@ref-finance/ref-sdk 1.4.7 → 1.4.8

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.
@@ -1 +1 @@
1
- {"version":3,"file":"ref-sdk.esm.js","sources":["../src/constant.ts","../src/near.ts","../src/metaIcons.ts","../src/ref.ts","../src/dcl-swap/dcl-pool.ts","../src/error.ts","../src/stable-swap.ts","../src/swap-widget/constant.ts","../src/indexer.ts","../src/v1-swap/parallelSwapLogic.ts","../src/v1-swap/smartRoutingLogic.js","../src/v1-swap/swap.ts","../src/utils.ts","../src/v1-swap/instantSwap.ts","../src/v1-swap/pool.ts","../src/swap-widget/state.tsx","../node_modules/style-inject/dist/style-inject.es.js","../src/swap-widget/components.tsx","../src/swap-widget/index.tsx","../src/swap-widget/defaultTokenList.ts","../src/dcl-swap/swap.ts","../src/dcl-swap/limit-order.ts"],"sourcesContent":["import { TokenMetadata } from './types';\n\nexport const FEE_DIVISOR = 10000;\nexport const DEFAULT_SLIPPAGE_TOLERANCE = '0.5';\nexport const STABLE_LP_TOKEN_DECIMALS = 18;\nexport const RATED_POOL_LP_TOKEN_DECIMALS = 24;\nexport const STORAGE_TO_REGISTER_WITH_MFT = '0.1';\n//0.0125 NEAR\nexport const FT_MINIMUM_STORAGE_BALANCE_LARGE = '12500000000000000000000';\nexport const ONE_YOCTO_NEAR = '0.000000000000000000000001';\nlet ENV: string | undefined = '';\nlet INDEXER_URL: string | undefined = '';\nlet NODE_URL: string | undefined = '';\nexport function getConfig(\n env: string | undefined = ENV ||\n process.env.NEAR_ENV ||\n process.env.REACT_APP_REF_SDK_ENV,\n indexerUrl: string | undefined = INDEXER_URL,\n nodeUrl: string | undefined = ''\n) {\n ENV = env;\n INDEXER_URL = indexerUrl;\n NODE_URL = nodeUrl;\n switch (env) {\n case 'mainnet':\n return {\n networkId: 'mainnet',\n nodeUrl: nodeUrl || 'https://rpc.mainnet.near.org',\n walletUrl: 'https://wallet.near.org',\n WRAP_NEAR_CONTRACT_ID: 'wrap.near',\n REF_FI_CONTRACT_ID: 'v2.ref-finance.near',\n REF_TOKEN_ID: 'token.v2.ref-finance.near',\n indexerUrl: indexerUrl || 'https://indexer.ref.finance',\n explorerUrl: 'https://nearblocks.io',\n REF_DCL_SWAP_CONTRACT_ID: 'dclv2.ref-labs.near',\n };\n case 'testnet':\n return {\n networkId: 'testnet',\n nodeUrl: nodeUrl || 'https://rpc.testnet.near.org',\n walletUrl: 'https://wallet.testnet.near.org',\n indexerUrl: indexerUrl || 'https://testnet-indexer.ref-finance.com',\n WRAP_NEAR_CONTRACT_ID: 'wrap.testnet',\n REF_FI_CONTRACT_ID: 'ref-finance-101.testnet',\n REF_TOKEN_ID: 'ref.fakes.testnet',\n explorerUrl: 'https://testnet.nearblocks.io',\n REF_DCL_SWAP_CONTRACT_ID: 'dclv2.ref-dev.testnet',\n };\n case 'dev':\n return {\n networkId: 'testnet',\n nodeUrl: nodeUrl || 'https://rpc.testnet.near.org',\n walletUrl: 'https://wallet.testnet.near.org',\n indexerUrl: indexerUrl || 'https://dev-indexer.ref-finance.com',\n WRAP_NEAR_CONTRACT_ID: 'wrap.testnet',\n REF_FI_CONTRACT_ID: 'exchange.ref-dev.testnet',\n REF_TOKEN_ID: 'ref.fakes.testnet',\n explorerUrl: 'https://testnet.nearblocks.io',\n REF_DCL_SWAP_CONTRACT_ID: 'refv2-dev.ref-dev.testnet',\n };\n default:\n return {\n networkId: 'mainnet',\n nodeUrl: nodeUrl || 'https://rpc.mainnet.near.org',\n walletUrl: 'https://wallet.near.org',\n REF_FI_CONTRACT_ID: 'v2.ref-finance.near',\n WRAP_NEAR_CONTRACT_ID: 'wrap.near',\n REF_TOKEN_ID: 'token.v2.ref-finance.near',\n indexerUrl: indexerUrl || 'https://indexer.ref.finance',\n explorerUrl: 'https://nearblocks.io',\n REF_DCL_SWAP_CONTRACT_ID: 'dclv2.ref-labs.near',\n };\n }\n}\n\nexport let config = getConfig();\n\nexport let REF_FI_CONTRACT_ID = config.REF_FI_CONTRACT_ID;\n\nexport let WRAP_NEAR_CONTRACT_ID = config.WRAP_NEAR_CONTRACT_ID;\n\nexport let REF_TOKEN_ID = config.REF_TOKEN_ID;\n\nexport let WNEAR_META_DATA: TokenMetadata = {\n id: WRAP_NEAR_CONTRACT_ID,\n name: 'wNEAR',\n symbol: 'wNEAR',\n decimals: 24,\n icon: 'https://assets.ref.finance/images/w-NEAR-no-border.png',\n};\n\nexport let REF_META_DATA = {\n decimals: 18,\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='16 24 248 248' style='background: %23000'%3E%3Cpath d='M164,164v52h52Zm-45-45,20.4,20.4,20.6-20.6V81H119Zm0,18.39V216h41V137.19l-20.6,20.6ZM166.5,81H164v33.81l26.16-26.17A40.29,40.29,0,0,0,166.5,81ZM72,153.19V216h43V133.4l-11.6-11.61Zm0-18.38,31.4-31.4L115,115V81H72ZM207,121.5h0a40.29,40.29,0,0,0-7.64-23.66L164,133.19V162h2.5A40.5,40.5,0,0,0,207,121.5Z' fill='%23fff'/%3E%3Cpath d='M189 72l27 27V72h-27z' fill='%2300c08b'/%3E%3C/svg%3E%0A\",\n id: REF_TOKEN_ID,\n name: 'Ref Finance Token',\n symbol: 'REF',\n};\n\nexport const NEAR_META_DATA: TokenMetadata = {\n id: 'NEAR',\n name: 'NEAR',\n symbol: 'NEAR',\n decimals: 24,\n icon:\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA2AAAANgCAIAAADF8JzzAAAACXBIWXMAABYlAAAWJQFJUiTwAAAgAElEQVR4nO3d7VXb2rqw4eQd57/cgZ0KLCqwVwWIChAVYCrAqQBTgUUFERVEVBBTwTYdmArWO/by3uzMfBA+bHlK87r+nTP2WBFSjO/o8SN//Pvvvz8AAMB//T9nAgCA7wlEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAAC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ICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAID/+fDhw/8H0I0VimXUJpsAAAAASUVORK5CYII=',\n};\n\nexport const TokenLinks = {\n NEAR: 'https://awesomenear.com/near-protocol',\n wNEAR: 'https://awesomenear.com/near-protocol',\n REF: 'https://awesomenear.com/ref-finance',\n OCT: 'https://awesomenear.com/octopus-network',\n PARAS: 'https://awesomenear.com/paras',\n SKYWARD: 'https://awesomenear.com/skyward-finance',\n FLX: 'https://awesomenear.com/flux',\n PULSE: 'https://awesomenear.com/pulse',\n DBIO: 'https://awesomenear.com/debio-network',\n MYRIA: 'https://awesomenear.com/myriad-social',\n PXT: 'https://awesomenear.com/cryptoheroes',\n HAPI: 'https://awesomenear.com/hapi',\n OIN: 'https://awesomenear.com/oin-finance',\n ABR: 'https://awesomenear.com/allbridge',\n '1MIL': 'https://awesomenear.com/1millionnfts',\n MARMAJ: 'https://awesomenear.com/marmaj-foundation',\n marmaj: 'https://awesomenear.com/marmaj-foundation',\n USN: 'https://awesomenear.com/decentral-bank',\n '1INCH': 'https://awesomenear.com/1inch-network',\n GRT: 'https://awesomenear.com/the-graph',\n LINK: 'https://awesomenear.com/chainlink',\n Cheddar: 'https://awesomenear.com/cheddar-farm',\n AURORA: 'https://awesomenear.com/aurora-dev',\n $META: 'https://awesomenear.com/meta-pool',\n UMINT: 'https://awesomenear.com/youminter',\n UTO: 'https://awesomenear.com/secret-skellies-society',\n DEIP: 'https://awesomenear.com/deip',\n WOO: 'https://awesomenear.com/woo-dex',\n LINEAR: 'https://awesomenear.com/linear-protocol',\n PEM: 'https://awesomenear.com/pembrock-finance',\n ATO: 'https://awesomenear.com/atocha-protocol',\n SEAT: 'https://awesomenear.com/seatlab-nft',\n FAR: 'https://awesomenear.com/few-and-far',\n BSTN: 'https://awesomenear.com/bastion',\n BRRR: 'https://awesomenear.com/burrow',\n XNL: 'https://awesomenear.com/chronicle',\n KSW: 'https://awesomenear.com/killswitch-finance',\n STNEAR: 'https://awesomenear.com/meta-pool',\n NearX: 'https://awesomenear.com/stader',\n SD: 'https://awesomenear.com/stader',\n DISC: 'https://awesomenear.com/discovol',\n} as Record<string, string>;\n\nexport const CONSTANT_D = 1.0001;\n\nexport const POINTLEFTRANGE = -800000;\nexport const POINTRIGHTRANGE = 800000;\n\nexport const switchEnv = () => {\n config = getConfig();\n REF_FI_CONTRACT_ID = config.REF_FI_CONTRACT_ID;\n WRAP_NEAR_CONTRACT_ID = config.WRAP_NEAR_CONTRACT_ID;\n REF_TOKEN_ID = config.REF_TOKEN_ID;\n REF_META_DATA = {\n decimals: 18,\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='16 24 248 248' style='background: %23000'%3E%3Cpath d='M164,164v52h52Zm-45-45,20.4,20.4,20.6-20.6V81H119Zm0,18.39V216h41V137.19l-20.6,20.6ZM166.5,81H164v33.81l26.16-26.17A40.29,40.29,0,0,0,166.5,81ZM72,153.19V216h43V133.4l-11.6-11.61Zm0-18.38,31.4-31.4L115,115V81H72ZM207,121.5h0a40.29,40.29,0,0,0-7.64-23.66L164,133.19V162h2.5A40.5,40.5,0,0,0,207,121.5Z' fill='%23fff'/%3E%3Cpath d='M189 72l27 27V72h-27z' fill='%2300c08b'/%3E%3C/svg%3E%0A\",\n id: REF_TOKEN_ID,\n name: 'Ref Finance Token',\n symbol: 'REF',\n };\n WNEAR_META_DATA = {\n id: WRAP_NEAR_CONTRACT_ID,\n name: 'wNEAR',\n symbol: 'wNEAR',\n decimals: 24,\n icon: 'https://assets.ref.finance/images/w-NEAR-no-border.png',\n };\n return {\n config,\n REF_FI_CONTRACT_ID,\n WRAP_NEAR_CONTRACT_ID,\n REF_TOKEN_ID,\n REF_META_DATA,\n WNEAR_META_DATA,\n };\n};\n","import {\n keyStores,\n KeyPair,\n InMemorySigner,\n providers,\n transactions as nearTransactions,\n utils,\n} from 'near-api-js';\nimport BN from 'bn.js';\nimport { getConfig } from './constant';\nimport {\n NoPuiblicKeyError,\n InValidAccessKeyError,\n NoCredential,\n} from './error';\nimport { AccessKeyView } from 'near-api-js/lib/providers/provider';\nimport { TransformedTransaction } from './types';\nimport { Transaction } from './types';\nimport { transformTransactions } from './utils';\nimport { AccountIdMisMatch } from './error';\n\nexport const getKeyStore = () => {\n return typeof window === 'undefined'\n ? new keyStores.InMemoryKeyStore()\n : new keyStores.BrowserLocalStorageKeyStore();\n};\n\nexport const provider = new providers.JsonRpcProvider({\n url: getConfig().nodeUrl,\n});\n\nconst validateAccessKey = (\n transaction: TransformedTransaction,\n accessKey: AccessKeyView\n) => {\n if (accessKey.permission === 'FullAccess') {\n return accessKey;\n }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const { receiver_id, method_names } = accessKey.permission.FunctionCall;\n\n if (transaction.receiverId !== receiver_id) {\n return null;\n }\n\n return transaction.actions.every(action => {\n if (action.type !== 'FunctionCall') {\n return false;\n }\n\n const { methodName, deposit } = action.params;\n\n if (method_names.length && method_names.includes(methodName)) {\n return false;\n }\n\n return parseFloat(deposit) <= 0;\n });\n};\n\nexport const sendTransactionsByMemoryKey = async ({\n signedTransactions,\n}: {\n signedTransactions: nearTransactions.SignedTransaction[];\n}) => {\n try {\n const results: Array<providers.FinalExecutionOutcome> = [];\n\n for (let i = 0; i < signedTransactions.length; i += 1) {\n results.push(await provider.sendTransaction(signedTransactions[i]));\n }\n\n return results;\n } catch (err) {\n throw err;\n }\n};\n","const icons: { [tokenId: string]: string } = {\n '4691937a7508860f876c9c0a2a617e7d9e945d4b.factory.bridge.near':\n 'https://assets.ref.finance/images/woo-wtrue.png',\n 'wrap.near':\n 'data:image/png;base64,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',\n 'wrap.testnet':\n 'data:image/png;base64,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',\n '6b175474e89094c44da98b954eedeac495271d0f.factory.bridge.near':\n 'https://assets.ref.finance/images/4943.png',\n 'berryclub.ek.near': 'https://assets.ref.finance/images/banana.png',\n 'dac17f958d2ee523a2206206994597c13d831ec7.factory.bridge.near':\n 'https://assets.ref.finance/images/825.png',\n '1f9840a85d5af5bf1d1762f925bdaddc4201f984.factory.bridge.near':\n 'https://assets.ref.finance/images/7083.png',\n '514910771af9ca656af840dff83e8264ecf986ca.factory.bridge.near':\n 'https://assets.ref.finance/images/1975.png',\n 'a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48.factory.bridge.near':\n 'https://assets.ref.finance/images/3408.png',\n '2260fac5e5542a773aa44fbcfedf7c193bc2c599.factory.bridge.near':\n 'https://assets.ref.finance/images/3717.png',\n '7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9.factory.bridge.near':\n 'https://assets.ref.finance/images/7278.png',\n 'a0b73e1ff0b80914ab6fe0444e65848c4c34450b.factory.bridge.near':\n 'https://assets.ref.finance/images/3635.png',\n '50d1c9771902476076ecfc8b2a83ad6b9355a4c9.factory.bridge.near':\n 'https://assets.ref.finance/images/4195.png',\n '4fabb145d64652a948d72533023f6e7a623c7c53.factory.bridge.near':\n 'https://assets.ref.finance/images/4687.png',\n '6f259637dcd74c767781e37bc6133cd6a68aa161.factory.bridge.near':\n 'https://assets.ref.finance/images/2502.png',\n '6b3595068778dd592e39a122f4f5a5cf09c90fe2.factory.bridge.near':\n 'https://assets.ref.finance/images/6758.png',\n 'c011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f.factory.bridge.near':\n 'https://assets.ref.finance/images/2586.png',\n 'c944e90c64b2c07662a292be6244bdf05cda44a7.factory.bridge.near':\n 'https://assets.ref.finance/images/6719.png',\n '9f8f72aa9304c8b593d555f12ef6589cc3a579a2.factory.bridge.near':\n 'https://assets.ref.finance/images/1518.png',\n '0bc529c00c6401aef6d220be8c6ea1667f6ad93e.factory.bridge.near':\n 'https://assets.ref.finance/images/5864.png',\n 'c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2.factory.bridge.near':\n 'https://assets.ref.finance/images/2396.png',\n '0316eb71485b0ab14103307bf65a021042c6d380.factory.bridge.near':\n 'https://assets.ref.finance/images/6941.png',\n '111111111117dc0aa78b770fa6a738034120c302.factory.bridge.near':\n 'https://assets.ref.finance/images/8104.png',\n 'f5cfbc74057c610c8ef151a439252680ac68c6dc.factory.bridge.near':\n 'https://assets.ref.finance/images/55sGoBm.png',\n 'de30da39c46104798bb5aa3fe8b9e0e1f348163f.factory.bridge.near':\n 'https://assets.ref.finance/images/10052.png',\n 'a4ef4b0b23c1fc81d3f9ecf93510e64f58a4a016.factory.bridge.near':\n 'https://assets.ref.finance/images/4222.png',\n 'token.cheddar.near': 'https://assets.ref.finance/images/cheddar.png',\n 'farm.berryclub.ek.near': 'https://assets.ref.finance/images/cucumber.png',\n 'd9c2d319cd7e6177336b0a9c93c21cb48d84fb54.factory.bridge.near':\n 'https://assets.ref.finance/images/HAPI.png',\n};\n\nexport default icons;\n","import {\n REF_FI_CONTRACT_ID,\n config,\n WRAP_NEAR_CONTRACT_ID,\n NEAR_META_DATA,\n getConfig,\n switchEnv,\n FT_MINIMUM_STORAGE_BALANCE_LARGE,\n} from './constant';\nimport {\n keyStores,\n Near,\n providers,\n WalletConnection,\n utils,\n} from 'near-api-js';\nimport { NoAccountIdFound, TokenNotExistError, DCLInValid } from './error';\nimport { getKeyStore } from './near';\n\nimport {\n TokenMetadata,\n FTStorageBalance,\n RefFiViewFunctionOptions,\n} from './types';\nimport { AccountView, CodeResult } from 'near-api-js/lib/providers/provider';\nimport { Transaction } from './types';\nimport { ONE_YOCTO_NEAR, REF_TOKEN_ID, REF_META_DATA } from './constant';\n\nimport metaIconDefaults from './metaIcons';\n\nconst BANANA_ID = 'berryclub.ek.near';\nconst CHEDDAR_ID = 'token.cheddar.near';\nconst CUCUMBER_ID = 'farm.berryclub.ek.near';\nconst HAPI_ID = 'd9c2d319cd7e6177336b0a9c93c21cb48d84fb54.factory.bridge.near';\nconst WOO_ID = '4691937a7508860f876c9c0a2a617e7d9e945d4b.factory.bridge.near';\n\nexport const REPLACE_TOKENS = [\n BANANA_ID,\n CHEDDAR_ID,\n CUCUMBER_ID,\n HAPI_ID,\n WOO_ID,\n];\n\nlet near = new Near({\n keyStore: getKeyStore(),\n headers: {},\n ...getConfig(),\n});\nexport const init_env = (\n env: string,\n indexerUrl?: string,\n nodeUrl?: string\n) => {\n near = new Near({\n keyStore: getKeyStore(),\n headers: {},\n ...getConfig(env, indexerUrl, nodeUrl),\n });\n return switchEnv();\n};\n\nexport const refFiViewFunction = async ({\n methodName,\n args,\n}: RefFiViewFunctionOptions) => {\n const nearConnection = await near.account(REF_FI_CONTRACT_ID);\n\n return nearConnection.viewFunction(REF_FI_CONTRACT_ID, methodName, args);\n};\n\nexport const ftViewFunction = async (\n tokenId: string,\n { methodName, args }: RefFiViewFunctionOptions\n) => {\n const nearConnection = await near.account(REF_FI_CONTRACT_ID);\n\n return nearConnection.viewFunction(tokenId, methodName, args);\n};\n\nexport const ftGetStorageBalance = (\n tokenId: string,\n AccountId: string\n): Promise<FTStorageBalance | null> => {\n if (!AccountId) throw NoAccountIdFound;\n\n return ftViewFunction(tokenId, {\n methodName: 'storage_balance_of',\n args: { account_id: AccountId },\n });\n};\n\nexport const ftGetBalance = async (tokenId: string, AccountId: string) => {\n if (!AccountId) return '0';\n\n if (tokenId === 'NEAR') {\n return getAccountNearBalance(AccountId).catch(() => '0');\n }\n\n return ftViewFunction(tokenId, {\n methodName: 'ft_balance_of',\n args: {\n account_id: AccountId,\n },\n })\n .then(res => {\n return res;\n })\n .catch(() => '0');\n};\n\nexport const getTotalPools = async () => {\n return refFiViewFunction({\n methodName: 'get_number_of_pools',\n });\n};\n\nexport const ftGetTokenMetadata = async (\n id: string,\n tag?: string\n): Promise<TokenMetadata> => {\n if (id === REF_TOKEN_ID) return REF_META_DATA;\n\n const metadata = await ftViewFunction(id, {\n methodName: 'ft_metadata',\n }).catch(() => {\n throw TokenNotExistError(id);\n });\n\n if (\n !metadata.icon ||\n id === BANANA_ID ||\n id === CHEDDAR_ID ||\n id === CUCUMBER_ID ||\n id === HAPI_ID ||\n id === WOO_ID ||\n id === WRAP_NEAR_CONTRACT_ID\n ) {\n return {\n ...metadata,\n icon: metaIconDefaults[id],\n id,\n };\n }\n\n return { ...metadata, id };\n};\n\nexport const ftGetTokensMetadata = async (\n tokenIds?: string[],\n allTokens?: Record<string, TokenMetadata>\n) => {\n const ids = tokenIds || (await getGlobalWhitelist());\n\n const tokensMetadata = await Promise.all(\n ids.map(\n (id: string) =>\n allTokens?.[id] || ftGetTokenMetadata(id).catch(() => null)\n )\n );\n\n return tokensMetadata.reduce((pre, cur, i) => {\n return {\n ...pre,\n [ids[i]]: cur,\n };\n }, {}) as Record<string, TokenMetadata>;\n};\n\nexport const getGlobalWhitelist = async (): Promise<string[]> => {\n const globalWhitelist = await refFiViewFunction({\n methodName: 'get_whitelisted_tokens',\n });\n return Array.from(new Set(globalWhitelist));\n};\n\nexport const getUserRegisteredTokens = async (\n AccountId?: string\n): Promise<string[]> => {\n if (!AccountId) return [];\n\n return refFiViewFunction({\n methodName: 'get_user_whitelisted_tokens',\n args: { account_id: AccountId },\n });\n};\n\nexport const getAccountNearBalance = async (accountId: string) => {\n const provider = new providers.JsonRpcProvider({\n url: getConfig().nodeUrl,\n });\n\n return provider\n .query<AccountView>({\n request_type: 'view_account',\n finality: 'final',\n account_id: accountId,\n })\n .then(data => data.amount);\n};\n\nexport const nearDepositTransaction = (amount: string) => {\n const transaction: Transaction = {\n receiverId: WRAP_NEAR_CONTRACT_ID,\n functionCalls: [\n {\n methodName: 'near_deposit',\n args: {},\n gas: '50000000000000',\n amount,\n },\n ],\n };\n\n return transaction;\n};\n\nexport const nearWithdrawTransaction = (amount: string) => {\n const transaction: Transaction = {\n receiverId: WRAP_NEAR_CONTRACT_ID,\n functionCalls: [\n {\n methodName: 'near_withdraw',\n args: { amount: utils.format.parseNearAmount(amount) },\n amount: ONE_YOCTO_NEAR,\n },\n ],\n };\n return transaction;\n};\n\nexport const refDCLSwapViewFunction = async ({\n methodName,\n args,\n}: RefFiViewFunctionOptions) => {\n const nearConnection = await near.account(REF_FI_CONTRACT_ID);\n\n if (!config.REF_DCL_SWAP_CONTRACT_ID) throw DCLInValid;\n\n return nearConnection.viewFunction(\n config.REF_DCL_SWAP_CONTRACT_ID,\n methodName,\n args\n );\n};\n\nexport const DCLSwapGetStorageBalance = (\n tokenId: string,\n AccountId: string\n) => {\n return refDCLSwapViewFunction({\n methodName: 'storage_balance_of',\n args: { account_id: AccountId },\n });\n};\n\nexport const getMinStorageBalance = async (\n nep141Address: string\n): Promise<string> => {\n try {\n const provider = new providers.JsonRpcProvider({\n url: getConfig().nodeUrl,\n });\n const result = await provider.query<CodeResult>({\n request_type: 'call_function',\n account_id: nep141Address,\n method_name: 'storage_balance_bounds',\n args_base64: '',\n finality: 'optimistic',\n });\n const balance = JSON.parse(Buffer.from(result.result).toString());\n if (!balance || !balance.min) return FT_MINIMUM_STORAGE_BALANCE_LARGE;\n return balance.min as string;\n } catch (e) {\n console.error(e, nep141Address);\n return FT_MINIMUM_STORAGE_BALANCE_LARGE;\n }\n};\n","import { TokenMetadata, Transaction } from '../types';\nimport {\n priceToPoint,\n toNonDivisibleNumber,\n toPrecision,\n registerAccountOnToken,\n} from '../utils';\nimport { ONE_YOCTO_NEAR, WRAP_NEAR_CONTRACT_ID, config } from '../constant';\nimport {\n nearDepositTransaction,\n ftGetStorageBalance,\n refDCLSwapViewFunction,\n} from '../ref';\nimport { NoFeeToPool } from '../error';\n\nexport const DCL_POOL_FEE_LIST = [100, 400, 2000, 10000];\n\ninterface PoolInfo {\n pool_id?: string;\n token_x?: string;\n token_y?: string;\n fee: number;\n point_delta?: number;\n current_point?: number;\n state?: string;\n liquidity?: string;\n liquidity_x?: string;\n max_liquidity_per_point?: string;\n percent?: string;\n total_x?: string;\n total_y?: string;\n tvl?: number;\n token_x_metadata?: TokenMetadata;\n token_y_metadata?: TokenMetadata;\n}\n\nexport const getDCLPoolId = (tokenA: string, tokenB: string, fee: number) => {\n if (DCL_POOL_FEE_LIST.indexOf(fee) === -1) throw NoFeeToPool(fee);\n\n const tokenSeq = [tokenA, tokenB].sort().join('|');\n\n return `${tokenSeq}|${fee}`;\n};\nexport const listDCLPools = () => {\n return refDCLSwapViewFunction({\n methodName: 'list_pools',\n });\n};\n\nexport const getDCLPool = async (pool_id: string) => {\n const [token_x, token_y, fee] = pool_id.split('|');\n\n const token_seq = [token_x, token_y].sort().join('|');\n\n const new_pool_id = `${token_seq}|${fee}`;\n\n return refDCLSwapViewFunction({\n methodName: 'get_pool',\n args: {\n pool_id: new_pool_id,\n },\n }) as Promise<PoolInfo>;\n};\n","import { config, getConfig } from './constant';\nimport { DCL_POOL_FEE_LIST } from './dcl-swap/dcl-pool';\n\nexport const formatError = (msg: string) => {\n return new Error(msg);\n};\n\nexport const unNamedError = formatError('Something wrong happened');\n\nexport const SameInputTokenError = formatError(\n 'Input token should be different with output token'\n);\n\nexport const ZeroInputError = formatError(\n 'Input amount should be greater than 0'\n);\n\nexport const NoPoolError = formatError('No pool found for the input tokens');\n\nexport const NotLoginError = formatError('Please login in first');\n\nexport const SwapRouteError = formatError(\n \"Something wrong happened, we don't get correct routes corrreponding to current input\"\n);\n\nexport const TokenNotExistError = (id: string) =>\n formatError(`${id} doesn't exist in ${getConfig().networkId}`);\n\nexport const NoPuiblicKeyError = formatError('No public key found');\n\nexport const NoLocalSignerError = formatError('No local signer found');\n\nexport const InValidAccessKeyError = formatError('Invalid access key');\n\nexport const AccountIdMisMatch = formatError(\n \"Your input account id doesn't match the account id in the credential\"\n);\n\nexport const NoCredential = formatError('No Credential to such path');\n\nexport const NoAccountIdFound = formatError('No account id found');\n\nexport const NoFeeToPool = (fee: number) =>\n formatError(\n `InValid fee ${fee} to DCL pool, the valid fee should be one of ${DCL_POOL_FEE_LIST}`\n );\n\nexport const DCLInValid = formatError(\n `DCL contract currently in Valid on ${config.networkId}`\n);\n\nexport const NoPoolOnThisPair = (tokenA: string, tokenB: string) =>\n formatError(`No pools on pair ${tokenA} <> ${tokenB}`);\n\nexport const SlippageError = formatError(\n 'slippage tolerance should be in range (0, 100)'\n);\n\nexport const NoOrderFound = (order_id?: string) =>\n formatError(`No order ${order_id || ''} found`);\n\nexport const OrderNoRemainedAmount = formatError(\n 'No remained amount on this order'\n);\n","import { StablePool } from './types';\nimport { FEE_DIVISOR } from './constant';\n\nimport {\n toReadableNumber,\n toNonDivisibleNumber,\n scientificNotationToString,\n} from './utils';\n\nimport Big from 'big.js';\n\nimport _ from 'lodash';\n\nconst tradeFee = (amount: number, trade_fee: number) => {\n return (amount * trade_fee) / FEE_DIVISOR;\n};\n\nexport const calc_d = (amp: number, c_amounts: number[]) => {\n const token_num = c_amounts.length;\n const sum_amounts = _.sum(c_amounts);\n let d_prev = 0;\n let d = sum_amounts;\n for (let i = 0; i < 256; i++) {\n let d_prod = d;\n for (let c_amount of c_amounts) {\n d_prod = (d_prod * d) / (c_amount * token_num);\n }\n d_prev = d;\n const ann = amp * token_num ** token_num;\n const numerator = d_prev * (d_prod * token_num + ann * sum_amounts);\n const denominator = d_prev * (ann - 1) + d_prod * (token_num + 1);\n d = numerator / denominator;\n if (Math.abs(d - d_prev) <= 1) break;\n }\n return d;\n};\n\nexport const calc_y = (\n amp: number,\n x_c_amount: number,\n current_c_amounts: number[],\n index_x: number,\n index_y: number\n) => {\n const token_num = current_c_amounts.length;\n const ann = amp * token_num ** token_num;\n const d = calc_d(amp, current_c_amounts);\n let s = x_c_amount;\n let c = (d * d) / x_c_amount;\n for (let i = 0; i < token_num; i++) {\n if (i !== index_x && i !== index_y) {\n s += current_c_amounts[i];\n c = (c * d) / current_c_amounts[i];\n }\n }\n c = (c * d) / (ann * token_num ** token_num);\n const b = d / ann + s;\n let y_prev = 0;\n let y = d;\n for (let i = 0; i < 256; i++) {\n y_prev = y;\n const y_numerator = y ** 2 + c;\n const y_denominator = 2 * y + b - d;\n y = y_numerator / y_denominator;\n if (Math.abs(y - y_prev) <= 1) break;\n }\n\n return y;\n};\n\nexport const calc_swap = (\n amp: number,\n in_token_idx: number,\n in_c_amount: number,\n out_token_idx: number,\n old_c_amounts: number[],\n trade_fee: number\n) => {\n const y = calc_y(\n amp,\n in_c_amount + old_c_amounts[in_token_idx],\n old_c_amounts,\n in_token_idx,\n out_token_idx\n );\n const dy = old_c_amounts[out_token_idx] - y;\n const fee = tradeFee(dy, trade_fee);\n const amount_swapped = dy - fee;\n return [amount_swapped, fee, dy];\n};\n\nexport const getSwappedAmount = (\n tokenInId: string,\n tokenOutId: string,\n amountIn: string,\n stablePool: StablePool,\n STABLE_LP_TOKEN_DECIMALS: number\n) => {\n const amp = stablePool.amp;\n const trade_fee = stablePool.total_fee;\n\n // depended on pools\n const in_token_idx = stablePool.token_account_ids.findIndex(\n id => id === tokenInId\n );\n const out_token_idx = stablePool.token_account_ids.findIndex(\n id => id === tokenOutId\n );\n\n const rates = stablePool?.degens\n ? stablePool.degens.map(r => toReadableNumber(STABLE_LP_TOKEN_DECIMALS, r))\n : stablePool.rates.map(r => toReadableNumber(STABLE_LP_TOKEN_DECIMALS, r));\n\n const base_old_c_amounts = stablePool.c_amounts.map(amount =>\n toReadableNumber(STABLE_LP_TOKEN_DECIMALS, amount)\n );\n\n const old_c_amounts = base_old_c_amounts\n .map((amount, i) =>\n toNonDivisibleNumber(\n STABLE_LP_TOKEN_DECIMALS,\n scientificNotationToString(\n new Big(amount || 0).times(new Big(rates[i])).toString()\n )\n )\n )\n .map(amount => Number(amount));\n\n const in_c_amount = Number(\n toNonDivisibleNumber(\n STABLE_LP_TOKEN_DECIMALS,\n scientificNotationToString(\n new Big(amountIn).times(new Big(rates[in_token_idx])).toString()\n )\n )\n );\n\n const [amount_swapped, fee, dy] = calc_swap(\n amp,\n in_token_idx,\n in_c_amount,\n out_token_idx,\n old_c_amounts,\n trade_fee\n );\n\n return [\n amount_swapped / Number(rates[out_token_idx]),\n fee,\n dy / Number(rates[out_token_idx]),\n ];\n};\n","import { getConfig } from '../constant';\nexport const REF_WIDGET_STAR_TOKEN_LIST_KEY =\n 'REF_WIDGET_STAR_TOKEN_LIST_VALUE';\n\nexport const REF_WIDGET_ALL_TOKENS_LIST_KEY =\n 'REF_WIDGET_ALL_TOKENS_LIST_VALUE';\nexport const REF_WIDGET_ALL_LIGHT_TOKENS_LIST_KEY =\n 'REF_WIDGET_ALL_LIGHT_TOKENS_LIST_VALUE';\n\nexport const REF_WIDGET_SWAP_IN_KEY = 'REF_WIDGET_SWAP_IN_VALUE';\n\nexport const REF_WIDGET_SWAP_OUT_KEY = 'REF_WIDGET_SWAP_OUT_VALUE';\n\nexport const REF_WIDGET_SWAP_DETAIL_KEY = 'REF_WIDGET_SWAP_DETAIL_VALUE';\n\nexport const DEFAULT_START_TOKEN_LIST_TESTNET = [\n 'wrap.testnet',\n 'usdtt.fakes.testnet',\n 'usdt.fakes.testnet',\n 'ref.fakes.testnet',\n 'usdn.testnet',\n 'eth.fakes.testnet',\n];\n\nexport const DEFAULT_START_TOKEN_LIST_MAINNET = [\n 'wrap.near',\n 'usdt.tether-token.near',\n 'dac17f958d2ee523a2206206994597c13d831ec7.factory.bridge.near',\n 'token.v2.ref-finance.near',\n 'usn',\n 'aurora',\n 'token.sweat',\n];\n\nexport interface Theme {\n container: string; // container background\n buttonBg: string; // button background\n primary: string; // primary theme color\n secondary: string; // secondary theme color\n borderRadius: string; // border radius\n fontFamily: string; // font family\n hover: string; // hovering color\n active: string; // active color\n secondaryBg: string; // secondary background color\n borderColor: string; // border color\n iconDefault: string; // default icon color\n iconHover: string; // icon hovering color\n refIcon?: string; // ref icon color\n}\n\nexport const defaultTheme: Theme = {\n container: '#FFFFFF',\n buttonBg: '#00C6A2',\n primary: '#000000',\n secondary: '#7E8A93',\n borderRadius: '4px',\n fontFamily: 'sans-serif',\n hover: 'rgba(126, 138, 147, 0.2)',\n active: 'rgba(126, 138, 147, 0.2)',\n secondaryBg: '#F7F7F7',\n borderColor: 'rgba(126, 138, 147, 0.2)',\n iconDefault: 'rgba(126, 138, 147, 1)',\n iconHover: 'rgba(62, 62, 62, 1)',\n};\n\nexport const defaultDarkModeTheme: Theme = {\n container: '#26343E',\n buttonBg: '#00C6A2',\n primary: '#FFFFFF',\n secondary: '#7E8A93',\n borderRadius: '4px',\n fontFamily: 'sans-serif',\n hover: 'rgba(126, 138, 147, 0.2)',\n active: 'rgba(126, 138, 147, 0.2)',\n secondaryBg: 'rgba(0, 0, 0, 0.2)',\n borderColor: 'rgba(126, 138, 147, 0.2)',\n iconDefault: 'rgba(126, 138, 147, 1)',\n iconHover: 'rgba(183, 201, 214, 1)',\n refIcon: 'white',\n};\n","import { config, WRAP_NEAR_CONTRACT_ID, NEAR_META_DATA } from './constant';\nimport {\n REF_WIDGET_ALL_TOKENS_LIST_KEY,\n REF_WIDGET_ALL_LIGHT_TOKENS_LIST_KEY,\n} from './swap-widget/constant';\nimport { REPLACE_TOKENS } from './ref';\nimport metaIconDefaults from './metaIcons';\n\nexport const getTokenPriceList = async (): Promise<any> => {\n return await fetch(config.indexerUrl + '/list-token-price', {\n method: 'GET',\n headers: { 'Content-type': 'application/json; charset=UTF-8' },\n })\n .then(res => res.json())\n .then(list => {\n return list;\n });\n};\n\nexport const getTokens = async (reload?: boolean) => {\n const storagedTokens =\n typeof window !== 'undefined' && !reload\n ? localStorage.getItem(REF_WIDGET_ALL_TOKENS_LIST_KEY)\n : null;\n\n return storagedTokens\n ? JSON.parse(storagedTokens)\n : await fetch(config.indexerUrl + '/list-token', {\n method: 'GET',\n headers: { 'Content-type': 'application/json; charset=UTF-8' },\n })\n .then(res => res.json())\n .then(tokens => {\n const newTokens = Object.values(tokens).reduce(\n (acc: any, cur: any, i) => {\n const id = Object.keys(tokens)[i];\n return {\n ...acc,\n [id]: {\n ...cur,\n id,\n icon:\n !cur.icon || REPLACE_TOKENS.includes(id)\n ? metaIconDefaults[id]\n : cur.icon,\n },\n };\n },\n {}\n );\n\n return newTokens;\n })\n .then(res => {\n typeof window !== 'undefined' &&\n !reload &&\n localStorage.setItem(\n REF_WIDGET_ALL_TOKENS_LIST_KEY,\n JSON.stringify(res)\n );\n return res;\n });\n};\nexport const getTokensTiny = async (reload?: boolean) => {\n const storagedTokens =\n typeof window !== 'undefined' && !reload\n ? localStorage.getItem(REF_WIDGET_ALL_LIGHT_TOKENS_LIST_KEY)\n : null;\n\n return storagedTokens\n ? JSON.parse(storagedTokens)\n : await fetch(config.indexerUrl + '/list-token-v2', {\n method: 'GET',\n headers: { 'Content-type': 'application/json; charset=UTF-8' },\n })\n .then(res => res.json())\n .then(tokens => {\n const newTokens = Object.values(tokens).reduce(\n (acc: any, cur: any, i) => {\n const id = Object.keys(tokens)[i];\n return {\n ...acc,\n [id]: {\n ...cur,\n id,\n },\n };\n },\n {}\n );\n\n return newTokens;\n })\n .then(res => {\n typeof window !== 'undefined' &&\n !reload &&\n localStorage.setItem(\n REF_WIDGET_ALL_LIGHT_TOKENS_LIST_KEY,\n JSON.stringify(res)\n );\n return res;\n });\n};\n\nexport const getWhiteListTokensIndexer = async (whiteListIds: string[]) => {\n return await fetch(config.indexerUrl + '/list-token', {\n method: 'GET',\n headers: { 'Content-type': 'application/json; charset=UTF-8' },\n })\n .then(res => res.json())\n .then(res => {\n return whiteListIds.reduce((acc, cur, i) => {\n if (\n !res[cur] ||\n !Object.values(res[cur]) ||\n Object.values(res[cur]).length === 0\n )\n return acc;\n\n return {\n ...acc,\n [cur]: { ...res[cur], id: cur },\n };\n }, {});\n })\n .then(res => {\n return Object.values(res);\n });\n};\n","//@ts-nocheck\nimport Big from 'big.js';\n\nimport { Pool } from '../types';\n\nBig.RM = 0;\nBig.DP = 40;\nBig.NE = -40;\nBig.PE = 40;\n\ninterface FormatedPool extends Pool {\n x?: string;\n y?: string;\n gamma_bps?: Big;\n}\n\n///////////////////////////////\n// Parallel Swap Logic Below //\n///////////////////////////////\n\n/** formatPoolNew\n * This function appends to the existing standard Pool struct and adds attributes that simplify the parallel swap algorithms.\n * Adds attributes \"x\" (for input token reserves in pool), \"y\" (for output token reserves in pool), and \"gamma_bps\" (for 1- fee in bps)\n * Our convention for our algorithm has been to use \"x\" as the input token and \"y\" as the output token.\n * @param pool AMM structure containing reserves of inputToken and outputToken\n * @param inputToken the name of the inputToken being traded in.\n * @param outputToken the name of the outputToken being traded out.\n * @returns newFormatPool\n */\nexport function formatPoolNew(\n pool: Pool,\n inputToken: string,\n outputToken: string\n) {\n let p: FormatedPool = pool;\n let x = p.supplies[inputToken];\n let y = p.supplies[outputToken];\n p['gamma_bps'] = new Big(10000).minus(p.fee);\n p['x'] = x;\n p['y'] = y;\n return p;\n}\n\n/** solveForMuFloat\n * This function takes the set of token pools, the total input of inputToken, and the names of inputToken and outputToken and\n * solves for the Lagrange Multiplier \"mu\". Note that mu must be allowed to be aritrary precision floating point number. Mu will\n * be used in subsequent function calls to determine the best allocations of intputToken to be made per pool.\n * For more detailed math on how this function was derived, please see the white paper:\n * https://github.com/giddyphysicist/ParallelSwapForRefFinance/blob/main/ParallelSwapWhitePaper.pdf\n * @param pools list of pools that contain inputToken and outputToken\n * @param totalDeltaX total allocation (among all pools) being input of inputToken\n * @param inputToken the name of the inputToken being traded in.\n * @param outputToken the name of the outputToken being traded out.\n * @returns mu the lagrange multiplier value calculated for a set of pools and inputToken amount.\n */\nexport function solveForMuFloat(\n pools: Pool[],\n totalDeltaX: string,\n inputToken: string,\n outputToken: string\n) {\n if (pools.length > 0) {\n let numerator = new Big(totalDeltaX);\n let denominator = new Big(0);\n\n for (var i = 0; i < pools.length; i++) {\n let p = formatPoolNew(pools[i], inputToken, outputToken);\n let numAdd = new Big(p.x).times(10000).div(p.gamma_bps);\n numerator = numerator.plus(numAdd);\n let denomAdd = new Big(p.x)\n .times(p.y)\n .div(p.gamma_bps)\n .sqrt()\n .times(100);\n denominator = denominator.plus(denomAdd);\n }\n\n const mu = new Big(numerator).div(denominator);\n return mu;\n } else {\n // console.log('ERROR - could not find pools that satisfy token pair');\n const mu = NaN;\n return mu;\n }\n}\n\n/** calculate_dx_float\n * Once mu has been calculated for a set of pools and total input amount, the next step is\n * determining the total allocation per pool. This function evaluates the amount of input Token to be\n * allocated to the given pool. Note, in our original algorithmic convention, the 'x' variable was for the input token,\n * and the 'y' variable was for the output token. Here, the value dx is the part of the full amount of input token X.\n * Again, the detailed formulae for these operations can be found in the white paper referenced above.\n * @param mu the lagrange multiplier value calculated for a set of pools and inputToken amount.\n * @param pool AMM structure containing reserves of inputToken and outputToken\n * @param inputToken the name of the inputToken being traded in.\n * @param outputToken the name of the outputToken being traded out.\n * @returns dxFloat the allocation amount determined for the given pool\n */\nexport function calculate_dx_float(\n mu: number | Big,\n pool: FormatedPool,\n inputToken: string,\n outputToken: string\n) {\n let p = formatPoolNew(pool, inputToken, outputToken);\n let radical = new Big(p.x).times(p.y).div(p.gamma_bps);\n let dxFloat = new Big(mu)\n .times(100)\n .times(radical.sqrt())\n .minus(new Big(p.x).times(10000).div(p.gamma_bps));\n return dxFloat;\n}\n\n/** calculate_dy_float\n * Once you have an allocation amount for a given pool, you can use the AMM constant-product formula to determine\n * the expected output amount of output Token.\n * Note, here, as earlier, our algorithmic convention uses \"y\" as the output token, and so \"dy\" is the fraction of\n * the total output of output Token, assuming there could be dy contributions from other parallel pools as well.\n * @param dx_float input allocation amount of inputToken for the given pool\n * @param pool a structure representing the reserves and fees for a given pool.\n * @param inputToken the name of the inputToken being traded in.\n * @param outputToken the name of the outputToken being traded out.\n * @returns dyFloat the expected trade out amount out of outputToken\n */\nexport function calculate_dy_float(\n dx_float: number,\n pool: FormatedPool,\n inputToken: string,\n outputToken: string\n) {\n if (dx_float <= 0) {\n return new Big(0);\n }\n let p = formatPoolNew(pool, inputToken, outputToken);\n let dx = new Big(dx_float);\n let denom = new Big(10000).times(p.x).plus(new Big(p.gamma_bps).times(dx));\n let numerator = new Big(p.y).times(dx).times(p.gamma_bps);\n let dyFloat = numerator.div(denom).round();\n return dyFloat;\n}\n\n/** calculateOptimalOutput\n * This is the main function, which calculates optimal values of inputToken to swap into each pool.\n * @param pools list of relevant AMM pools containing inputToken and outputToken\n * @param inputAmount the numeric total amount of inputToken to be traded into the group of swap pools.\n * @param inputToken the name of the inputToken being traded in.\n * @param outputToken the name of the outputToken being traded out.\n * @returns normalizedDxArray an array containing the amount allocations of inputToken per pool in the list of pools.\n */\nexport function calculateOptimalOutput(\n pools: Pool[],\n inputAmount: string,\n inputToken: string,\n outputToken: string\n) {\n let mu = solveForMuFloat(pools, inputAmount, inputToken, outputToken);\n let dxArray: Big[] = [];\n let negativeDxValsFlag = false;\n for (var i = 0; i < pools.length; i++) {\n let pool = formatPoolNew(pools[i], inputToken, outputToken);\n let dx = calculate_dx_float(mu, pool, inputToken, outputToken);\n if (dx.lt(0)) {\n negativeDxValsFlag = true;\n }\n let dxInt = new Big(dx).round();\n dxArray.push(dxInt);\n }\n if (negativeDxValsFlag) {\n dxArray = reducePools(pools, dxArray, inputAmount, inputToken, outputToken);\n }\n let dxArraySum = new Big(0);\n for (var i = 0; i < dxArray.length; i++) {\n dxArraySum = dxArraySum.plus(dxArray[i]);\n }\n let tempAllocationsArray = [];\n for (var i = 0; i < dxArray.length; i++) {\n let ndx = new Big(dxArray[i])\n .times(inputAmount)\n .div(dxArraySum)\n .round();\n tempAllocationsArray.push(ndx);\n }\n let allocationsArray = checkIntegerSumOfAllocations(\n tempAllocationsArray,\n inputAmount\n );\n let normalizedDxArray = [];\n for (var i = 0; i < allocationsArray.length; i++) {\n let ndx = allocationsArray[i];\n normalizedDxArray.push(BigInt(ndx));\n pools[i]['partialAmountIn'] = ndx.toString();\n }\n return normalizedDxArray;\n}\n\n/** reducePools\n * This function is used to implement part of the non-linear slack variables in the lagrange - multiplier\n * solution for parallel swap. Part of what comes out of the math is that sometimes, the optimal allocation for a pool\n * can be negative, which makes no physical sense. When this occurs, that particular pool needs to be flagged and the\n * lagrange constraint applied to force the allocation to be zero.\n * This function takes an already-solved set of pools, input allocation per pool, the total input amount, and the\n * inputToken name and outputToken name, and determines which, if any, allocations need to be set to zero.\n * However, when this occurs, and a pool is essentially ignored from the list, then the calculation for mu must be re-done.\n * So the calculateOptimalOutput function is then called on the reduced set of pools, and if no negative allocation values remain,\n * then the allocations on the reduced set is determined, and values of zero are put in for the 'failed' pools.\n * @param pools list of pools that contain inputToken and outputToken\n * @param dxArray list of input allocation per pool\n * @param inputAmount total amount of inputToken to be traded among the pools\n * @param inputToken the name of the inputToken\n * @param outputToken the name of the outputToken\n * @returns newFullDxVec the new full list of input allocations the same length as dxArray, containing zeros for failed pools.\n */\nexport function reducePools(\n pools: Pool[],\n dxArray: Big[],\n inputAmount: string,\n inputToken: string,\n outputToken: string\n) {\n let goodIndices = [];\n for (var i = 0; i < dxArray.length; i++) {\n let dx = dxArray[i];\n if (dx.gte(0)) {\n goodIndices.push(i);\n }\n }\n if (goodIndices.length < 1) {\n // console.log(\"ERROR OCCURRED -- ALL DX VALUES WERE NEGATIVE\")\n return dxArray;\n }\n let newPools = [];\n for (var j = 0; j < dxArray.length; j++) {\n if (goodIndices.includes(j)) {\n newPools.push(pools[j]);\n }\n }\n let newDxVec = calculateOptimalOutput(\n newPools,\n inputAmount,\n inputToken,\n outputToken\n );\n let goodInd2newdx = {};\n for (var k = 0; k < newDxVec.length; k++) {\n goodInd2newdx[goodIndices[k]] = newDxVec[k];\n }\n let newFullDxVec = [];\n for (var ii = 0; ii < pools.length; ii++) {\n if (goodIndices.includes(ii)) {\n newFullDxVec.push(goodInd2newdx[ii]);\n } else {\n newFullDxVec.push(0);\n }\n }\n return newFullDxVec;\n}\n\nexport function checkIntegerSumOfAllocations(\n allocations: Big[] | string[] | BigInt[],\n totalInput: Big | string | BigInt\n) {\n var totalInput = new Big(totalInput);\n var allocations:\n | Big[]\n | string[]\n | BigInt[] = allocations.map((item: Big | string | BigInt) =>\n new Big(item).round()\n );\n let alloSum = allocations\n .map(item => new Big(item))\n .reduce((a, b) => a.plus(b), new Big(0));\n let offset = totalInput.minus(alloSum);\n //get largest allocation.\n let currMax = new Big(0);\n let currMaxInd = 0;\n for (var i = 0; i < allocations.length; i++) {\n if (allocations[i].gt(currMax)) {\n currMaxInd = i;\n currMax = allocations[i];\n }\n }\n let newAllocations = [];\n for (var j = 0; j < allocations.length; j++) {\n if (j === currMaxInd) {\n newAllocations.push(allocations[j].plus(offset).toString());\n } else {\n newAllocations.push(allocations[j].toString());\n }\n }\n return newAllocations;\n}\n","/* eslint-disable no-undef */\n////////////////////////////////////////////////////////////////////////////\n// SMART ROUTE SWAP LOGIC\n////////////////////////////////////////////////////////////////////////////\nimport Big from 'big.js';\nimport { checkIntegerSumOfAllocations } from './parallelSwapLogic';\n\nimport { TokenMetadata } from '../types';\n\nimport { ftGetTokenMetadata } from '../ref';\n\nimport { percentLess, toNonDivisibleNumber } from '../utils';\nBig.RM = 0;\nBig.DP = 40;\nBig.NE = -40;\nBig.PE = 40;\n\nfunction bisqrt(value) {\n // For some ridiculous reason, the .sqrt() method for Big decimals is extremely slow (~10-20ms),\n // which isn't so bad until you need to use it a bunch of times.\n // Since we're dealing with super large numbers anyway, we can convert the Big decimal number into a BigInt,\n // then run this BigInt Newton iteration square root function instead, and then convert back into a\n // Big number. And it speeds up the operation by a crazy factor, ~10x faster.\n if (value < BigInt(0)) {\n throw 'square root of negative numbers is not supported';\n }\n\n if (value < BigInt(2)) {\n return value;\n }\n\n function newtonIteration(n, x0) {\n const x1 = (n / x0 + x0) >> BigInt(1);\n if (x0 === x1 || x0 === x1 - BigInt(1)) {\n return x0;\n }\n return newtonIteration(n, x1);\n }\n\n return newtonIteration(value, BigInt(1));\n}\n\nfunction getBetaForRoute(route, path) {\n if (!route.length) {\n route = [route];\n }\n if (route.length == 1) {\n let p = route[0];\n var beta = new Big(p.reserves[path[0]]);\n } else if (route.length == 2) {\n let p1 = route[0];\n let p2 = route[1];\n var beta = new Big(p1.reserves[path[0]]).times(\n new Big(p2.reserves[path[1]])\n );\n }\n return beta;\n}\n\nfunction getEpsilonForRoute(route, path) {\n if (!route.length) {\n route = [route];\n }\n if (route.length == 1) {\n // Single Hop case\n let p = route[0];\n let gamma = new Big(10000).minus(new Big(p.fee)).div(new Big(10000));\n var epsilon = Big(gamma);\n } else if (route.length == 2) {\n //Double Hop Case\n let p1 = route[0];\n let p2 = route[1];\n let gamma1 = new Big(10000).minus(new Big(p1.fee)).div(new Big(10000));\n let gamma2 = new Big(10000).minus(new Big(p2.fee)).div(Big(10000));\n var epsilon = new Big(p2.reserves[path[1]])\n .times(new Big(gamma1))\n .plus(new Big(p1.reserves[path[1]]).times(gamma1).times(gamma2));\n }\n return epsilon;\n}\n\nfunction getAlphaForRoute(route, path) {\n if (!route.length) {\n route = [route];\n }\n if (route.length == 1) {\n //console.log('single hop')\n let p = route[0];\n let inputToken = path[0];\n let outputToken = path[1];\n let gamma = new Big(10000).minus(new Big(p.fee)).div(new Big(10000));\n let key1 = p.token1Id;\n let key2 = p.token2Id;\n let val1 = p.token1Supply;\n let val2 = p.token2Supply;\n p['reserves'] = { [key1]: val1, [key2]: val2 };\n var alpha = new Big(p.reserves[inputToken]).times(\n new Big(p.reserves[outputToken]).times(new Big(gamma))\n );\n } else if (route.length == 2) {\n //console.log('double hop')\n let p1 = route[0];\n let p2 = route[1];\n let key11 = p1.token1Id;\n let key12 = p1.token2Id;\n let val11 = p1.token1Supply;\n let val12 = p1.token2Supply;\n p1['reserves'] = { [key11]: val11, [key12]: val12 };\n let key21 = p2.token1Id;\n let key22 = p2.token2Id;\n let val21 = p2.token1Supply;\n let val22 = p2.token2Supply;\n p2['reserves'] = { [key21]: val21, [key22]: val22 };\n let inputToken = path[0];\n let middleToken = path[1];\n let outputToken = path[2];\n let gamma1 = new Big(10000).minus(Big(p1.fee)).div(new Big(10000));\n let gamma2 = new Big(10000).minus(new Big(p2.fee)).div(new Big(10000));\n let alpha1 = new Big(p1.reserves[inputToken])\n .times(new Big(p1.reserves[middleToken]))\n .times(gamma1);\n let alpha2 = new Big(p2.reserves[middleToken])\n .times(new Big(p2.reserves[outputToken]))\n .times(gamma2);\n var alpha = alpha1.times(alpha2);\n }\n return alpha;\n}\n\nfunction getAlphaSumFromRoutes(routes, nodeRoutes) {\n let alphaSum = new Big(0);\n for (var i in routes) {\n let route = routes[i];\n let nodeRoute = nodeRoutes[i];\n let alpha = getAlphaForRoute(route, nodeRoute);\n // console.log('alpha is...');\n // console.log(alpha.toString());\n // below, we are replacing the built-in Big sqrt() method with a\n // newton-iteration BigInt sqrt function, to speed it up by 10x.\n let radical = new Big(bisqrt(BigInt(new Big(alpha).round().toFixed())));\n // let radical = new Big(alpha).sqrt();\n let epsilon = getEpsilonForRoute(route, nodeRoute);\n let denom = new Big(epsilon);\n alphaSum = alphaSum.plus(radical.div(denom));\n }\n return alphaSum;\n}\n\nfunction getBetaSumFromRoutes(routes, nodeRoutes) {\n let betaSum = new Big(0);\n for (var i in routes) {\n let route = routes[i];\n let nodeRoute = nodeRoutes[i];\n let num = new Big(getBetaForRoute(route, nodeRoute));\n let denom = new Big(getEpsilonForRoute(route, nodeRoute));\n betaSum = betaSum.plus(num.div(denom));\n }\n return betaSum;\n}\n\nfunction getPhiFromRoutes(routes, nodeRoutes, totalInput) {\n let alphaSum = getAlphaSumFromRoutes(routes, nodeRoutes);\n let betaSum = getBetaSumFromRoutes(routes, nodeRoutes);\n let phi = new Big(totalInput).plus(betaSum).div(alphaSum);\n return phi;\n}\n\nfunction getAllocationForRoute(phi, route, path) {\n let alpha = getAlphaForRoute(route, path);\n let beta = getBetaForRoute(route, path);\n let epsilon = getEpsilonForRoute(route, path);\n // below, we are replacing the built-in Big sqrt() method with a\n // newton-iteration BigInt sqrt function, to speed it up by 10x.\n let allocation = new Big(phi)\n .abs()\n .times(new Big(bisqrt(BigInt(new Big(alpha).round().toFixed()))))\n .minus(beta)\n .div(epsilon);\n return allocation;\n}\n\nfunction getAllocationVectorForRoutes(phi, routes, nodeRoutes) {\n let allocationVec = [];\n for (var i in routes) {\n allocationVec.push(getAllocationForRoute(phi, routes[i], nodeRoutes[i]));\n }\n return allocationVec;\n}\n\nfunction getOptimalAllocationForRoutes(routes, nodeRoutes, totalInput) {\n // console.log(\"CALLING GET OPTIMAL ALLOCATION FOR ROUTES:\")\n // console.log(routes)\n var totalInput = new Big(totalInput);\n let phi = getPhiFromRoutes(routes, nodeRoutes, totalInput);\n // console.log('PHI CALCULATED TO BE...')\n // console.log(phi.toString())\n let allocations = getAllocationVectorForRoutes(phi, routes, nodeRoutes);\n if (allocations.every(item => item.lt(new Big(0)))) {\n allocations = allocations.map(item => item.times(new Big(-1.0)));\n }\n if (allocations.some(item => item.lt(new Big(0)))) {\n allocations = reduceRoutes(routes, nodeRoutes, allocations, totalInput);\n }\n let sumAllocations = allocations.reduce((a, b) => a.plus(b), new Big(0));\n let normalizedAllocations = allocations.map(a =>\n a.div(sumAllocations).times(new Big(totalInput))\n );\n return normalizedAllocations;\n}\n\nfunction reduceRoutes(routes, nodeRoutes, allocationVec, totalInput) {\n // console.log(\"RUNNING REDUCE ROUTES\")\n var totalInput = new Big(totalInput);\n let goodIndices = [];\n for (var i in allocationVec) {\n let dx = allocationVec[i];\n // console.log('DX IS...')\n // console.log(dx.toString())\n if (dx.gt(new Big(0))) {\n goodIndices.push(i);\n }\n }\n // console.log('GOOD INDICES ARE...');\n // console.log(goodIndices);\n let newRoutes = [];\n let newNodeRoutes = [];\n for (var i in goodIndices) {\n let goodIndex = goodIndices[i];\n newRoutes.push(routes[goodIndex]);\n newNodeRoutes.push(nodeRoutes[goodIndex]);\n }\n allocationVec = getOptimalAllocationForRoutes(\n newRoutes,\n newNodeRoutes,\n totalInput\n );\n let allocationDict = {};\n for (var i in goodIndices) {\n allocationDict[goodIndices[i]] = allocationVec[i];\n }\n var allocationVecNew = [];\n for (var i in routes) {\n if (goodIndices.includes(i)) {\n allocationVecNew.push(allocationDict[i]);\n } else {\n let zeroAllocation = new Big(0);\n allocationVecNew.push(zeroAllocation);\n }\n }\n return allocationVecNew;\n}\n\nfunction getNodeRoutesFromPathsAndPoolChains(paths, poolChains) {\n let multiplicity = [];\n for (var i in poolChains) {\n let pc = poolChains[i];\n let mul = pc\n .map(item => item.length)\n .reduce((elem1, elem2) => elem1 * elem2, 1);\n multiplicity.push(mul);\n }\n let nodeRoutes = [];\n for (var j in paths) {\n let path = paths[j];\n let m = multiplicity[j];\n for (var k = 0; k < m; k++) {\n nodeRoutes.push(path);\n }\n }\n return nodeRoutes;\n}\n\nfunction getPoolChainFromPaths(paths, pools, threshold = 0.001) {\n let poolChains = [];\n for (var pathInd in paths) {\n let path = paths[pathInd];\n let chain = [];\n let pairs = [];\n for (var i = 0; i < path.length - 1; i++) {\n pairs.push([path[i], path[i + 1]]);\n }\n for (var pairInd in pairs) {\n let pair = pairs[pairInd];\n // console.log(pair);\n let tokenPools = getPoolsByToken1ANDToken2(pools, pair[0], pair[1]);\n chain.push(tokenPools);\n }\n poolChains.push(chain);\n }\n // return poolChains;\n let culledPoolChains = getCulledPoolChains(poolChains, threshold);\n\n return culledPoolChains;\n}\n\nfunction getCulledPoolChains(poolChains, threshold = 0.001) {\n let newChains = [];\n for (var pathInd in poolChains) {\n let path = poolChains[pathInd];\n let newPath = [];\n for (var legInd in path) {\n let leg = path[legInd];\n let culledPath = cullPoolsWithInsufficientLiquidity(leg, threshold);\n newPath.push(culledPath);\n }\n newChains.push(newPath);\n }\n return newChains;\n}\n\nfunction getRoutesFromPoolChain(poolChains) {\n let routes = [];\n for (var pci in poolChains) {\n let poolChain = poolChains[pci];\n //get cartesian product of each pool chain to get the list of routes.\n let newRoutes = cartesianProduct(poolChain);\n routes.push(...newRoutes);\n }\n for (var i in routes) {\n if (!routes[i].length) {\n routes[i] = [routes[i]];\n }\n }\n return routes;\n}\n\nfunction getOutputSingleHop(pool, inputToken, outputToken, totalInput) {\n var totalInput = new Big(totalInput);\n // check if pool is forward or backward for inputToken/outputToken cf. token1Id/token2Id\n if (inputToken === pool.token1Id && outputToken === pool.token2Id) {\n // forward Pool\n var reserves = {\n [inputToken]: new Big(pool.token1Supply),\n [outputToken]: new Big(pool.token2Supply),\n };\n } else if (inputToken === pool.token2Id && outputToken === pool.token1Id) {\n // reverse pool\n var reserves = {\n [outputToken]: new Big(pool.token1Supply),\n [inputToken]: new Big(pool.token2Supply),\n };\n } else {\n return new Big(0);\n }\n let gamma = new Big(10000).minus(new Big(pool.fee)).div(new Big(10000));\n // console.log(totalInput)\n // console.log(gamma)\n // console.log(reserves)\n let num = totalInput.times(gamma).times(reserves[outputToken]);\n let denom = reserves[inputToken].plus(gamma.times(totalInput));\n return num.div(denom);\n}\n\nfunction getOutputDoubleHop(\n pools,\n inputToken,\n middleToken,\n outputToken,\n totalInput\n) {\n var totalInput = new Big(totalInput);\n for (var poolIndex in pools) {\n let p = pools[poolIndex];\n p['gamma'] = new Big(10000).minus(new Big(p.fee)).div(new Big(10000));\n }\n let p1 = pools[0];\n let p2 = pools[1];\n\n if (inputToken === p1.token1Id && middleToken === p1.token2Id) {\n // forward Pool\n p1['reserves'] = {\n [inputToken]: new Big(p1.token1Supply),\n [middleToken]: new Big(p1.token2Supply),\n };\n } else if (middleToken === p1.token1Id && inputToken === p1.token2Id) {\n //reverse pool\n p1['reserves'] = {\n [middleToken]: new Big(p1.token1Supply),\n [inputToken]: new Big(p1.token2Supply),\n };\n }\n\n if (middleToken === p2.token1Id && outputToken === p2.token2Id) {\n // forward Pool\n p2['reserves'] = {\n [middleToken]: new Big(p2.token1Supply),\n [outputToken]: new Big(p2.token2Supply),\n };\n } else if (outputToken === p2.token1Id && middleToken === p2.token2Id) {\n //reverse pool\n p2['reserves'] = {\n [outputToken]: new Big(p2.token1Supply),\n [middleToken]: new Big(p2.token2Supply),\n };\n }\n\n let c1 = new Big(p1.reserves[middleToken]);\n let a1 = new Big(p1.reserves[inputToken]);\n let c2 = new Big(p2.reserves[middleToken]);\n let b2 = new Big(p2.reserves[outputToken]);\n let gamma1 = p1.gamma;\n let gamma2 = p2.gamma;\n let num = totalInput\n .times(c1)\n .times(b2)\n .times(gamma1)\n .times(gamma2);\n let denom = c2\n .times(a1)\n .plus(\n totalInput.times(c2.times(gamma1).plus(c1.times(gamma1).times(gamma2)))\n );\n // denom = c2*a1 + totalInput * (c2*gamma1 + c1*gamma1*gamma2)\n\n return num.div(denom);\n}\n\nfunction getOutputFromRoute(route, nodeRoute, allocation) {\n if (new Big(allocation).eq(new Big(0))) {\n return new Big(0);\n } else {\n var allocation = new Big(allocation);\n }\n if (!route.length) {\n route = [route];\n }\n if (route.length == 1) {\n // single hop\n let inputToken = nodeRoute[0];\n let outputToken = nodeRoute[1];\n let pool = route[0];\n var output = getOutputSingleHop(pool, inputToken, outputToken, allocation);\n } else if (route.length == 2) {\n // DOUBLE HOP\n let inputToken = nodeRoute[0];\n let middleToken = nodeRoute[1];\n let outputToken = nodeRoute[2];\n let pools = route;\n var output = getOutputDoubleHop(\n pools,\n inputToken,\n middleToken,\n outputToken,\n allocation\n );\n }\n return output;\n}\n\nfunction getOptOutputVec(routes, nodeRoutes, totalInput) {\n let allocations = getOptimalAllocationForRoutes(\n routes,\n nodeRoutes,\n totalInput\n );\n let result = [];\n for (var i in routes) {\n let route = routes[i];\n let nodeRoute = nodeRoutes[i];\n let allocation = allocations[i];\n let output = getOutputFromRoute(route, nodeRoute, allocation);\n result.push(output);\n }\n return {\n result: result,\n allocations: allocations,\n };\n //NOTE -- I made this return an object instead of the tuple returned in python. need to check the places it is called, and specify\n // result field instead of tuple 0 position, and allocations field instead of tuple 1 position.\n}\n\nfunction getBestOptInputAndOutputSlower(routes, nodeRoutes, totalInput) {\n let refDict = getOptOutputVecRefined(routes, nodeRoutes, totalInput);\n let outputRefined = refDict.result;\n let inputRefined = refDict.allocations;\n inputRefined = checkIntegerSumOfAllocations(inputRefined, totalInput);\n let rawDict = getOptOutputVec(routes, nodeRoutes, totalInput);\n let outputRaw = rawDict.result;\n let inputRaw = rawDict.allocations;\n inputRaw = checkIntegerSumOfAllocations(inputRaw, totalInput);\n let res1 = new Big(0);\n let res2 = new Big(0);\n\n for (var n in outputRefined) {\n res1 = res1.plus(outputRefined[n]);\n }\n for (var nn in outputRaw) {\n res2 = res2.plus(outputRaw[nn]);\n }\n // console.log('COMPARING SINGLE HOPS VS DOUBLE')\n // console.log(res1.toString())\n // console.log(res2.toString())\n if (res1.gt(res2)) {\n return { input: inputRefined, output: res1 };\n } else {\n return { input: inputRaw, output: res2 };\n }\n}\n\nfunction getBestOptInputAndOutput(routes, nodeRoutes, totalInput) {\n // let refDict = getOptOutputVecRefined(routes, nodeRoutes, totalInput);\n // let outputRefined = refDict.result;\n // let inputRefined = refDict.allocations;\n // inputRefined = checkIntegerSumOfAllocations(inputRefined, totalInput);\n let rawDict = getOptOutputVec(routes, nodeRoutes, totalInput);\n let outputRaw = rawDict.result;\n let inputRaw = rawDict.allocations;\n inputRaw = checkIntegerSumOfAllocations(inputRaw, totalInput);\n let res1 = new Big(0);\n let res2 = new Big(0);\n\n let res = outputRaw\n .map(v => new Big(v))\n .reduce((bv1, bv2) => bv1.plus(bv2), new Big(0));\n\n return {\n input: inputRaw,\n output: res,\n };\n}\n\nfunction getBestOptOutput(routes, nodeRoutes, totalInput) {\n let outputRefined = getOptOutputVecRefined(routes, nodeRoutes, totalInput)\n .result;\n let outputRaw = getOptOutputVec(routes, nodeRoutes, totalInput).result;\n let res1 = new Big(0);\n let res2 = new Big(0);\n\n for (var n in outputRefined) {\n res1 = res1.plus(outputRefined[n]);\n }\n for (var nn in outputRaw) {\n res2 = res2.plus(outputRaw[nn]);\n }\n if (res1.gt(res2)) {\n return res1;\n } else {\n return res2;\n }\n}\n\nfunction getBestOptInput(routes, nodeRoutes, totalInput) {\n let refDict = getOptOutputVecRefined(routes, nodeRoutes, totalInput);\n let outputRefined = refDict.result;\n let inputRefined = refDict.allocations;\n inputRefined = checkIntegerSumOfAllocations(inputRefined, totalInput);\n let rawDict = getOptOutputVec(routes, nodeRoutes, totalInput);\n let outputRaw = rawDict.result;\n let inputRaw = rawDict.allocations;\n inputRaw = checkIntegerSumOfAllocations(inputRaw, totalInput);\n let res1 = new Big(0);\n let res2 = new Big(0);\n\n for (var n in outputRefined) {\n res1 = res1.plus(outputRefined[n]);\n }\n for (var nn in outputRaw) {\n res2 = res2.plus(outputRaw[nn]);\n }\n // console.log('COMPARING SINGLE HOPS VS DOUBLE')\n // console.log(res1.toString())\n // console.log(res2.toString())\n if (res1.gt(res2)) {\n return inputRefined;\n } else {\n return inputRaw;\n }\n}\n\nfunction getOptOutputVecRefined(routes, nodeRoutes, totalInput) {\n // need to calculate full result.\n // if direct pools exist, need to calculate parallel result. if not, this portion is set to zero output.\n\n // need to compare between outputs of the two results above.\n\n let initLengthRoutes = routes.length;\n let directRouteInds = [];\n for (var routeInd in routes) {\n let route = routes[routeInd];\n if (!route.length) {\n route = [route];\n }\n if (route.length == 1) {\n directRouteInds.push(routeInd);\n }\n }\n // console.log('DIRECT ROUTE INDS ARE')\n // console.log(directRouteInds)\n // if (directRouteInds.length < 1) {\n var fullResultAllocations = getOptimalAllocationForRoutes(\n routes,\n nodeRoutes,\n totalInput\n );\n var fullResult = [];\n for (var i in routes) {\n let r = routes[i];\n let nr = nodeRoutes[i];\n let a = fullResultAllocations[i];\n let output = getOutputFromRoute(r, nr, a);\n fullResult.push(output);\n }\n var fullResultTotal = fullResult.reduce((a, b) => a.plus(b), new Big(0));\n\n // } else {\n if (directRouteInds.length > 0) {\n // console.log('DOING SINGLE HOP ONLY')\n let droutes = [];\n let dnodeRoutes = [];\n for (var dri in directRouteInds) {\n let ind = directRouteInds[dri];\n droutes.push(routes[ind]);\n dnodeRoutes.push(nodeRoutes[ind]);\n }\n let dallocations = getOptimalAllocationForRoutes(\n droutes,\n dnodeRoutes,\n totalInput\n );\n let dallocDict = {};\n for (var dd in dallocations) {\n dallocDict[directRouteInds[dd]] = dallocations[dd];\n }\n var pallocations = [];\n\n for (var ii = 0; ii < initLengthRoutes; ii++) {\n if (directRouteInds.includes(ii.toString())) {\n //console.log('ADDING ALLOCATION FOR SINGLE ROUTE')\n pallocations.push(dallocDict[ii]);\n } else {\n pallocations.push(new Big(0));\n }\n }\n var presult = [];\n for (var j in routes) {\n let route = routes[j];\n let nodeRoute = nodeRoutes[j];\n let allocation = pallocations[j];\n let output = getOutputFromRoute(route, nodeRoute, allocation);\n presult.push(output);\n }\n var presultTotal = presult.reduce((a, b) => a.plus(b), new Big(0));\n } else {\n var presultTotal = new Big(0);\n }\n if (presultTotal.gt(fullResultTotal)) {\n var result = presult;\n var allocations = pallocations;\n } else {\n var result = fullResult;\n var allocations = fullResultAllocations;\n }\n // NEED TO COMPARE BETWEEEN DIRECT AND MULTI HOP TO GET BEST OUTPUT\n return {\n result: result,\n allocations: allocations,\n };\n}\n\nasync function getBestOptimalAllocationsAndOutputs(\n pools,\n inputToken,\n outputToken,\n totalInput,\n maxPathLength = 3,\n threshold = 0.001\n) {\n var totalInput = new Big(totalInput);\n let paths = await getPathsFromPools(\n pools,\n inputToken,\n outputToken,\n maxPathLength\n );\n if (!paths.length) {\n return {\n allocations: [],\n outputs: new Big(0),\n routes: [],\n nodeRoutes: [],\n };\n }\n let poolChains = await getPoolChainFromPaths(paths, pools, threshold);\n\n let routes = await getRoutesFromPoolChain(poolChains);\n let nodeRoutes = await getNodeRoutesFromPathsAndPoolChains(paths, poolChains);\n // let allocations = await getBestOptInput(routes, nodeRoutes, totalInput);\n // // fix integer rounding for allocations:\n // allocations = checkIntegerSumOfAllocations(allocations, totalInput);\n // let outputs = getBestOptOutput(routes, nodeRoutes, totalInput);\n let inputOutput = await getBestOptInputAndOutput(\n routes,\n nodeRoutes,\n totalInput\n );\n let allocations = inputOutput.input;\n let outputs = inputOutput.output;\n\n return {\n allocations: allocations,\n outputs: outputs,\n routes: routes,\n nodeRoutes: nodeRoutes,\n };\n}\n\nfunction getHopsFromRoutes(routes, nodeRoutes, allocations) {\n let hops = [];\n for (var i in routes) {\n var route = routes[i];\n var nodeRoute = nodeRoutes[i];\n var allocation = allocations[i];\n if (!route.length) {\n route = [route];\n }\n if (!route[0]) {\n continue;\n }\n let hop = {\n pool: route[0],\n allocation: allocation,\n inputToken: nodeRoute[0],\n outputToken: nodeRoute[1],\n };\n hops.push(hop);\n }\n return hops;\n}\n\nfunction distillHopsByPool(hops) {\n // console.log('some HOPS =');\n // console.log(hops);\n let distilledHops = [];\n let poolIds = [];\n let poolId2allocation = {};\n for (var i in hops) {\n let hop = hops[i];\n if (hop.allocation === '0') {\n continue;\n }\n // console.log(`HOP ${i} IS...`);\n // console.log(hop);\n let poolId = hop.pool['id'];\n if (poolIds.includes(poolId)) {\n poolId2allocation[poolId] = new Big(poolId2allocation[poolId])\n .plus(new Big(hop.allocation))\n .toString();\n } else {\n poolId2allocation[poolId] = new Big(hop.allocation).toString();\n poolIds.push(poolId);\n }\n }\n // let poolsWithOrder = [...new Set(...hops.map((item) => item.pool))]\n let keys = Object.keys(poolId2allocation);\n for (var j in keys) {\n var poolId = keys[j];\n let hop = hops.filter(\n item => item.pool.id.toString() === poolId.toString()\n )[0];\n let distilledHop = {\n pool: hop.pool,\n allocation: poolId2allocation[poolId],\n inputToken: hop.inputToken,\n outputToken: hop.outputToken,\n };\n distilledHops.push(distilledHop);\n }\n return distilledHops;\n}\n\nfunction getDistilledHopActions(distilledHops, slippageTolerance) {\n let actions = [];\n for (var i in distilledHops) {\n let hop = distilledHops[i];\n let expectedAmountOut = getOutputSingleHop(\n hop.pool,\n hop.inputToken,\n hop.outputToken,\n hop.allocation\n );\n let minimumAmountOut = new Big(expectedAmountOut)\n .times(new Big(1).minus(new Big(slippageTolerance).div(100)))\n .round()\n .toString(); //Here, assume slippage tolerance is a percentage. So 1% would be 1.0\n let action = {\n pool_id: hop.pool.id,\n token_in: hop.inputToken,\n token_out: hop.outputToken,\n amount_in: hop.allocation,\n min_amount_out: minimumAmountOut,\n };\n actions.push(action);\n }\n return actions;\n}\nfunction getMiddleTokenTotalsFromFirstHopActions(firstHopActions) {\n let middleTokens = [...new Set(firstHopActions.map(item => item.token_out))];\n let middleTokenTotals = {};\n for (var i in middleTokens) {\n let middleToken = middleTokens[i];\n let mtActions = firstHopActions.filter(\n item => item.token_out === middleToken\n );\n let mtTotal = mtActions\n .map(item => new Big(item.min_amount_out))\n .reduce((a, b) => a.plus(b), new Big(0))\n .toString();\n middleTokenTotals[middleToken] = mtTotal;\n }\n return middleTokenTotals;\n}\nfunction getRoutesAndAllocationsForMiddleToken(\n routes,\n nodeRoutes,\n allocations,\n middleToken,\n middleTokenTotal\n) {\n // get routes that use middle token.\n // (input route alloction) /sum(input allocations of routes with middle token) * (total_middleToken)\n let mask = [];\n for (var i in nodeRoutes) {\n if (nodeRoutes[i][1] === middleToken) {\n mask.push(true);\n } else {\n mask.push(false);\n }\n }\n let froutes = [];\n let fallocations = [];\n let fnoderoutes = [];\n for (var i in routes) {\n if (mask[i]) {\n froutes.push(routes[i]);\n fallocations.push(allocations[i]);\n fnoderoutes.push(nodeRoutes[i]);\n }\n }\n let sumfallocations = fallocations.reduce(\n (a, b) => new Big(a).plus(new Big(b)),\n new Big(0)\n );\n let middleAllocations = fallocations.map(item =>\n new Big(item).div(sumfallocations).times(new Big(middleTokenTotal))\n );\n let secondHopRoutes = froutes.map(item => [item[1]]);\n let secondHopNodeRoutes = fnoderoutes.map(item => [item[1], item[2]]);\n middleAllocations = checkIntegerSumOfAllocations(\n middleAllocations,\n middleTokenTotal\n );\n return {\n routes: secondHopRoutes,\n nodeRoutes: secondHopNodeRoutes,\n allocations: middleAllocations,\n };\n}\n\nfunction getHopActionsFromRoutes(routes, nodeRoutes, allocations) {\n // console.log('INSIDE GET HOP ACTIONS FROM ROUTES');\n // console.log('ROUTES ARE...');\n // console.log(routes);\n // console.log('NODE ROUTES ARE...');\n // console.log(nodeRoutes);\n // console.log('ALLOCATIONS ARE...');\n // console.log(allocations);\n let totalInput = allocations\n .map(a => new Big(a))\n .reduce((a, b) => a.plus(b), new Big(0))\n .toString();\n let hops = [];\n for (var i in routes) {\n var route = routes[i];\n var nodeRoute = nodeRoutes[i];\n var allocation = allocations[i];\n if (new Big(allocation).eq(new Big(0))) {\n continue;\n }\n if (!route.length) {\n route = [route];\n }\n if (!route[0]) {\n continue;\n }\n for (var j in route) {\n let pool = route[j];\n // console.log('J IS...');\n // console.log(j);\n // console.log('NODE ROUTE IS...');\n // console.log(nodeRoute);\n if (j == 0) {\n //first hop.\n // console.log(nodeRoute[0]);\n // console.log(nodeRoute[1]);\n var hop = {\n pool: pool,\n allocation: allocation.toString(),\n inputToken: nodeRoute[0],\n outputToken: nodeRoute[1],\n nodeRoute: nodeRoute,\n route: route,\n allRoutes: routes,\n allNodeRoutes: nodeRoutes,\n totalInputAmount: totalInput,\n allAllocations: allocations,\n };\n // console.log('FIRST HOP IS...');\n // console.log(hop);\n hops.push(hop);\n if (nodeRoute.length > 2) {\n var middleTokenAllocation = getOutputSingleHop(\n pool,\n nodeRoute[0],\n nodeRoute[1],\n allocation\n );\n }\n } else {\n // second hop\n var hop = {\n pool: pool,\n allocation: middleTokenAllocation.toString(),\n inputToken: nodeRoute[1],\n outputToken: nodeRoute[2],\n nodeRoute: nodeRoute,\n route: route,\n allRoutes: routes,\n allNodeRoutes: nodeRoutes,\n totalInputAmount: totalInput,\n allAllocations: allocations,\n };\n // console.log('SECOND HOP IS...');\n // console.log(hop);\n hops.push(hop);\n }\n }\n }\n // console.log('HOP ACTIONS FOUND TO BE');\n // console.log(hops);\n return hops;\n}\n\n// TODO: Clean this function. I don't need all the \"actions\" just the hops.\n// TODO: re-order actions to ensure each route is complete with zero input for second hop before starting next route.\nfunction getActionListFromRoutesAndAllocations(\n routes,\n nodeRoutes,\n allocations\n) {\n // REPLACE THE CODE BELOW WITH THE FUNCTION HERE.\n return getHopActionsFromRoutes(routes, nodeRoutes, allocations);\n var actions = [];\n var all_hops = [];\n let firstHops = getHopsFromRoutes(routes, nodeRoutes, allocations);\n\n firstHops = firstHops.filter(hop => new Big(hop.allocation).gt(new Big(0)));\n all_hops.push(...firstHops);\n let distilledFirstHops = distillHopsByPool(firstHops);\n let firstHopActions = getDistilledHopActions(\n distilledFirstHops,\n slippageTolerance\n );\n actions.push(...firstHopActions);\n let middleTokenTotals = getMiddleTokenTotalsFromFirstHopActions(\n firstHopActions\n );\n // console.log('first hop actions are...');\n // console.log(firstHopActions);\n let middleTokens = Object.keys(middleTokenTotals);\n // console.log('middle token totals are...');\n // console.log(middleTokenTotals);\n // console.log('middle tokens are...');\n // console.log(middleTokens);\n for (var tokenIndex in middleTokens) {\n var secondHops = [];\n let middleToken = middleTokens[tokenIndex];\n // console.log('current middle token is ');\n // console.log(middleToken);\n let middleTokenTotal = middleTokenTotals[middleToken];\n // console.log('current middle token total is...');\n // console.log(middleTokenTotal);\n let middleTokenRoutesWithAllocations = getRoutesAndAllocationsForMiddleToken(\n routes,\n nodeRoutes,\n allocations,\n middleToken,\n middleTokenTotal\n );\n // console.log('current middle tokens routes with allocations are...');\n // console.log(middleTokenRoutesWithAllocations);\n let middleTokenRoutes = middleTokenRoutesWithAllocations.routes;\n let middleTokenAllocations = middleTokenRoutesWithAllocations.allocations;\n let middleTokenNodeRoutes = middleTokenRoutesWithAllocations.nodeRoutes;\n // console.log('middle token routes are...');\n // console.log(middleTokenRoutes);\n // console.log('middle token allocations are...');\n // console.log(middleTokenAllocations);\n // console.log('middle token node routes are...');\n // console.log(middleTokenNodeRoutes);\n secondHops.push(\n ...getHopsFromRoutes(\n middleTokenRoutes,\n middleTokenNodeRoutes,\n middleTokenAllocations\n )\n );\n // console.log('CURRENT SECOND HOPS', secondHops);\n // console.log(secondHops.length);\n // console.log(secondHops.map((hop) => hop.allocation));\n // console.log('filter out zero allocation 2nd hops:');\n secondHops = secondHops.filter(hop =>\n new Big(hop.allocation).gt(new Big(0))\n );\n // console.log(secondHops);\n all_hops.push(...secondHops);\n // console.log('second hops are currently...');\n // console.log(secondHops);\n let distilledSecondHopsForToken = distillHopsByPool(secondHops);\n // console.log('distilled second hops are...');\n let secondHopActionsForToken = getDistilledHopActions(\n distilledSecondHopsForToken,\n slippageTolerance\n );\n // console.log(secondHopActionsForToken);\n actions.push(...secondHopActionsForToken);\n }\n\n //TODO: NEED TO RUN INTEGER ROUNDING FUNCTION ON MIDDLE TOKEN ALLOCATIONS\n\n // TODO: check the node routes. for double-hop cases, find the hop action for each hop.\n // For now, we are assuming no parallel swaps if there is a double-hop.\n\n // Possible cases:\n // (1) 1 single-hop.\n // (2) Parallel single-hop ?\n // (3) 1 double-hop\n // (4) 2 double-hops\n\n // We only have to worry about re-ordering the actions for cases (3) and (4).\n\n let orderedHops = orderHops(all_hops, routes, nodeRoutes, allocations);\n\n // console.log('ALL HOPS', all_hops);\n return orderedHops;\n // return actions;\n}\n\nfunction orderHops(hops, routes, nodeRoutes, allocations) {\n // first get rid of zero allocation routes\n // console.log('NODE ROUTES ARE...');\n // console.log(nodeRoutes);\n let filteredRoutes = [];\n let filteredNodeRoutes = [];\n let filteredAllocations = [];\n for (var i in routes) {\n // remove zero-allocation routes.\n let allocation = new Big(allocations[i]);\n if (allocation.gt(new Big(0))) {\n filteredAllocations.push(allocation);\n filteredRoutes.push(routes[i]);\n filteredNodeRoutes.push(nodeRoutes[i]);\n }\n // console.log('FILTERED NODE ROUTES ARE...');\n // console.log(filteredNodeRoutes);\n }\n // next check node routes to see if it is case 1, 2, 3, or 4.\n // Possible cases:\n // (1) 1 single-hop.\n // (2) Parallel single-hop ?\n // (3) 1 double-hop\n // (4) 2 double-hops\n\n if (filteredNodeRoutes.length === 1) {\n // only one route.\n let currentNodeRoute = filteredNodeRoutes[0];\n if (currentNodeRoute.length === 2) {\n // case 1.\n return hops;\n } else {\n // case 3. assume there are only 3 nodes (double-hop)\n //make sure order of hops is such that input token precedes output token.\n //make sure the amount_in for second hop is zero (which will grab all of output of first hop to use.)\n let firstHop = hops.filter(\n hop => hop.inputToken === currentNodeRoute[0]\n )[0];\n let secondHop = hops.filter(\n hop => hop.inputToken === currentNodeRoute[1]\n )[0];\n // set second hop amount in to 0 so that it will use whatever was generated by hop 1.\n secondHop.pool.partialAmountIn = '0';\n\n let orderedHops = [firstHop, secondHop];\n return orderedHops;\n }\n } else if (filteredNodeRoutes.length === 2) {\n // two routes.\n let lengthNodeRoutes = filteredNodeRoutes.map(nr => nr.length);\n // sub cases:\n // [2,2] -- parallel swap. (direct) -- case 2\n // [2,3] -- direct swap in parallel with double hop.\n // [3,2] -- double hop in parallel with direct swap.\n // [3,3] -- double hop in parallel with double hop. -- case 4\n let orderedHops = [];\n if (arrayEquals(lengthNodeRoutes, [2, 2])) {\n return hops;\n } else if (arrayEquals(lengthNodeRoutes, [2, 3])) {\n directNodeRoute = filteredNodeRoutes[0];\n doubleNodeRoute = filteredNodeRoutes[1];\n let firstHop = hops.filter(\n hop =>\n hop.inputToken === directNodeRoute[0] &&\n hop.outputToken === directNodeRoute[1]\n )[0];\n let secondHop = hops.filter(\n hop => hop.inputToken === doubleNodeRoute[0]\n )[0];\n let thirdHop = hops.filter(\n hop => hop.outputToken === doubleNodeRoute[2]\n )[0];\n // set third hop amount in to 0 so that it will use whatever was generated by hop 2.\n thirdHop.pool.partialAmountIn = '0';\n orderedHops = [firstHop, secondHop, thirdHop];\n return orderedHops;\n } else if (arrayEquals(lengthNodeRoutes, [3, 2])) {\n directNodeRoute = filteredNodeRoutes[1];\n doubleNodeRoute = filteredNodeRoutes[0];\n let firstHop = hops.filter(\n hop =>\n hop.inputToken === directNodeRoute[0] &&\n hop.outputToken === directNodeRoute[1]\n )[0];\n let secondHop = hops.filter(\n hop => hop.inputToken === doubleNodeRoute[0]\n )[0];\n let thirdHop = hops.filter(\n hop => hop.outputToken === doubleNodeRoute[2]\n )[0];\n // set third hop amount in to 0 so that it will use whatever was generated by hop 2.\n thirdHop.pool.partialAmountIn = '0';\n orderedHops = [firstHop, secondHop, thirdHop];\n return orderedHops;\n } else if (arrayEquals(lengthNodeRoutes, [3, 3])) {\n orderedHops = [];\n\n for (var i in filteredNodeRoutes) {\n let doubleNodeRoute = filteredNodeRoutes[i];\n let doubleHopMiddleToken = doubleNodeRoute[1];\n let firstHop = hops.filter(\n hop =>\n hop.inputToken === doubleNodeRoute[0] &&\n hop.outputToken === doubleHopMiddleToken\n )[0];\n let secondHop = hops.filter(\n hop =>\n hop.inputToken === doubleHopMiddleToken &&\n hop.outputToken === doubleNodeRoute[2]\n )[0];\n // set second hop amount in to 0 so that it will use whatever was generated by hop 1.\n secondHop.pool.partialAmountIn = '0';\n orderedHops.push(firstHop);\n orderedHops.push(secondHop);\n }\n return orderedHops;\n } else {\n return hops;\n }\n for (var i in filteredNodeRoutes) {\n let currentNodeRoute = filteredNodeRoutes[i];\n if (currentNodeRoute.length === 2) {\n }\n }\n }\n\n return hops;\n}\n\n// function getActionListFromRoutesAndAllocationsORIG(\n// routes,\n// nodeRoutes,\n// allocations,\n// slippageTolerance\n// ) {\n// let actions = [];\n// for (var i in routes) {\n// let route = routes[i];\n// let nodeRoute = nodeRoutes[i];\n// let allocation = new Big(allocations[i]);\n// if (allocation.eq(new Big(0))) {\n// continue;\n// }\n// if (!route.length) {\n// route = [route];\n// }\n// if (route.length === 1) {\n// //single hop. only one action.\n// let pool = route[0];\n// let poolId = pool.id;\n// let inputToken = nodeRoute[0];\n// let outputToken = nodeRoute[1];\n// let expectedAmountOut = getOutputSingleHop(\n// pool,\n// inputToken,\n// outputToken,\n// allocation\n// );\n// let minimumAmountOut = expectedAmountOut\n// .times(new Big(1).minus(new Big(slippageTolerance).div(100)))\n// .round()\n// .toString(); //Here, assume slippage tolerance is a percentage. So 1% would be 1.0\n// let action = {\n// pool_id: poolId,\n// token_in: inputToken,\n// token_out: outputToken,\n// amount_in: allocation.round().toString(),\n// min_amount_out: minimumAmountOut.toString(),\n// };\n// actions.push(action);\n// } else if (route.length === 2) {\n// // double hop. two actions.\n// let pool1 = route[0];\n// let pool2 = route[1];\n// let pool1Id = pool1.id;\n// let pool2Id = pool2.id;\n// let inputToken = nodeRoute[0];\n// let middleToken = nodeRoute[1];\n// let outputToken = nodeRoute[2];\n// let expectedAmountOutFirstHop = getOutputSingleHop(\n// pool1,\n// inputToken,\n// middleToken,\n// allocation\n// );\n// let minimumAmountOutFirstHop = expectedAmountOutFirstHop\n// .times(new Big(1).minus(new Big(slippageTolerance).div(100)))\n// .round()\n// .toString(); //Here, assume slippage tolerance is a percentage. So 1% would be 1.0\n\n// let action1 = {\n// pool_id: pool1Id,\n// token_in: inputToken,\n// token_out: middleToken,\n// amount_in: allocation.round().toString(),\n// min_amount_out: minimumAmountOutFirstHop,\n// };\n// let expectedFinalAmountOut = getOutputSingleHop(\n// pool2,\n// middleToken,\n// outputToken,\n// minimumAmountOutFirstHop\n// );\n// let minimumAMountOutSecondHop = expectedFinalAmountOut\n// .times(new Big(1).minus(new Big(slippageTolerance).div(100)))\n// .round()\n// .toString();\n// let action2 = {\n// pool_id: pool2Id,\n// token_in: middleToken,\n// token_out: outputToken,\n// amount_in: minimumAmountOutFirstHop,\n// min_amount_out: minimumAMountOutSecondHop,\n// };\n// actions.push(action1);\n// actions.push(action2);\n// }\n// }\n// return actions;\n// }\n\nfunction* range(start, end) {\n for (; start <= end; ++start) {\n yield start;\n }\n}\n\nfunction last(arr) {\n return arr[arr.length - 1];\n}\n\nfunction* numericCombinations(n, r, loc = []) {\n var idx = loc.length;\n if (idx === r) {\n yield loc;\n return;\n }\n for (let next of range(idx ? last(loc) + 1 : 0, n - r + idx)) {\n yield* numericCombinations(n, r, loc.concat(next));\n }\n}\n\nfunction* combinations(arr, r) {\n for (let idxs of numericCombinations(arr.length, r)) {\n yield idxs.map(i => arr[i]);\n }\n}\n\n// #middleTokenTotals = getMiddleTokenTotals(routes,nodeRoutes,allocations)\n// #TODO: complete this function with middle token checks.\n\n// #consider all routes of length 2 with non-zero allocation. (double-hops)\n// # among these, check for parallel swaps. That is, check for common node routes\n// # for first hop. Then check for common node routes on second hop.\n// # when common node routes occur for the first hop:\n// # 1. Calculate the total expected output of intermediate token.\n// # 2.\n// # when common node routes occur for the second hop:\n// # 1. get a ratio of the input allocations of the full routes associated with\n// # these common node routes. allocate the total intermediate token output\n// # toward these 2nd hop routes in the same ratio as their route input allocations.\n\nexport async function getSmartRouteSwapActions(\n pools,\n inputToken,\n outputToken,\n totalInput,\n allTokens,\n maxPathLength = 3,\n threshold = 0.001,\n numberOfRoutesLimit = 2,\n MAX_NUMBER_PARALLEL_POOLS = 4,\n decimalsCulledPoolIds = []\n) {\n if (!totalInput) {\n return [];\n }\n var totalInput = new Big(totalInput);\n\n // remove pools that have an id from the decimalCulledPoolIds\n pools = pools.filter(p => !decimalsCulledPoolIds.includes(p.id));\n\n let resDict = await getBestOptimalAllocationsAndOutputs(\n pools,\n inputToken,\n outputToken,\n totalInput,\n maxPathLength,\n threshold\n );\n\n let allocations = resDict.allocations;\n\n // let outputs = resDict.outputs;\n let routes = resDict.routes;\n let nodeRoutes = resDict.nodeRoutes;\n\n let sortedIndexValues = argsort(allocations);\n let topIndices = sortedIndexValues.slice(0, 10);\n var reducedRoutes = [];\n var reducedNodeRoutes = [];\n for (var ind of topIndices) {\n reducedRoutes.push(routes[ind]);\n reducedNodeRoutes.push(nodeRoutes[ind]);\n }\n routes = reducedRoutes;\n nodeRoutes = reducedNodeRoutes;\n\n // TODO: compare pairs of routes to get the best allocation pair-wise.\n var currentBestOutput = new Big(0);\n var bestResDict = { routes: [] };\n var bestAllocations = resDict.allocations;\n var bestNodeRoutes = resDict.nodeRoutes;\n var bestRoutes = resDict.routes;\n // first check parallel swap with 4 actions. store result.\n var parallelNodeRoutes = [];\n var parallelRoutes = [];\n for (var n in bestRoutes) {\n let currentNodeRoute = bestNodeRoutes[n];\n if (currentNodeRoute.length == 2) {\n parallelNodeRoutes.push(currentNodeRoute);\n parallelRoutes.push(bestRoutes[n]);\n }\n }\n // console.log(`${parallelNodeRoutes.length} parallel routes found...`);\n var bestRoutesAreParallel = false;\n if (parallelNodeRoutes.length > 0) {\n // first calculate the expected result using only parallel routes.\n // let filteredAllocationsAndOutputs = getOptOutputVecRefined(parallelRoutes, parallelNodeRoutes, totalInput);\n let filteredAllocationsAndOutputs = getOptOutputVec(\n parallelRoutes,\n parallelNodeRoutes,\n totalInput\n );\n let parallellAllocations = filteredAllocationsAndOutputs.allocations;\n let parallelOutputs = filteredAllocationsAndOutputs.result;\n\n if (parallellAllocations.length > MAX_NUMBER_PARALLEL_POOLS) {\n // now sort by allocation value to the top 4 parallel swaps:\n let sortIndices = argsort(parallellAllocations);\n\n sortIndices = sortIndices.slice(0, MAX_NUMBER_PARALLEL_POOLS);\n var filteredParallelRoutes = [];\n var filteredParallelNodeRoutes = [];\n for (var i in sortIndices) {\n filteredParallelRoutes.push(parallelRoutes[sortIndices[i]]);\n filteredParallelNodeRoutes.push(parallelNodeRoutes[sortIndices[i]]);\n }\n filteredAllocationsAndOutputs = getOptOutputVec(\n filteredParallelRoutes,\n filteredParallelNodeRoutes,\n totalInput\n );\n parallellAllocations = filteredAllocationsAndOutputs.allocations;\n parallelOutputs = filteredAllocationsAndOutputs.result;\n }\n\n let parallelOutput = parallelOutputs.reduce(\n (a, b) => a.plus(b),\n new Big(0)\n );\n if (new Big(parallelOutput).gt(currentBestOutput)) {\n bestAllocations = parallellAllocations;\n currentBestOutput = parallelOutput;\n // console.log(\n // 'BEST OUTPUT FROM PARALLEL SWAPS IS NOW... ',\n // currentBestOutput.toString()\n // );\n bestRoutes = parallelRoutes;\n bestNodeRoutes = parallelNodeRoutes;\n bestRoutesAreParallel = true;\n }\n }\n var canHaveTwoRoutes = false;\n // initialize this variable to check if we can have two routes, or if all routes share a pool for an edge case.\n // console.log('THE NUMBER OF ROUTES IS...', routes.length);\n\n for (var i in routes) {\n for (var j in routes) {\n if (j > i) {\n var route1 = routes[i];\n var route2 = routes[j];\n var nodeRoute1 = nodeRoutes[i];\n var nodeRoute2 = nodeRoutes[j];\n // check if they share a pool.\n let route1PoolIds = new Set(route1.map(r => r.id));\n let route2PoolIds = new Set(route2.map(r => r.id));\n var sharePool = false;\n for (var route1PoolId of route1PoolIds) {\n if (route2PoolIds.has(route1PoolId)) {\n sharePool = true;\n }\n }\n if (sharePool) {\n // routes are not independent. skip this pair.\n // console.log('skipping this pair because pool was shared.');\n continue;\n } else {\n canHaveTwoRoutes = true;\n let currentRoutes = [route1, route2];\n let currentNodeRoutes = [nodeRoute1, nodeRoute2];\n\n let filteredAllocationsAndOutputs = getOptOutputVec(\n currentRoutes,\n currentNodeRoutes,\n totalInput\n );\n\n let filteredAllocations = filteredAllocationsAndOutputs.allocations;\n let filteredOutputs = filteredAllocationsAndOutputs.result;\n // console.log('FILTERED ALLOCATIONS:');\n // console.log(filteredAllocations.map((i) => i.toString()));\n // console.log(filteredOutputs);\n let totalOutput = filteredOutputs.reduce(\n (a, b) => a.plus(b),\n new Big(0)\n );\n if (new Big(totalOutput).gt(currentBestOutput)) {\n bestAllocations = filteredAllocations;\n currentBestOutput = totalOutput;\n // console.log('BEST OUTPUT IS NOW... ', currentBestOutput.toString());\n bestRoutes = currentRoutes;\n bestNodeRoutes = currentNodeRoutes;\n bestRoutesAreParallel = false;\n // bestResDict = currentResDict\n }\n\n // if (currentResDict.outputs.gt(currentBestOutput)) {\n // console.log('DIFF IS...', currentResDict.outputs.minus(currentBestOutput).toString());\n // bestResDict = currentResDict;\n // currentBestOutput = bestResDict.outputs;\n // console.log('BEST OUTPUT IS NOW... ', currentBestOutput.toString());\n // console.log(bestResDict.routes);\n // console.log(bestResDict.allocations.map((i) => i.toString()));\n // console.log(bestResDict.outputs.toString());\n }\n }\n }\n }\n\n if (!canHaveTwoRoutes) {\n // now we need to check through the routes in single manner to find the best one:\n for (var i in routes) {\n let currentRoutes = [routes[i]];\n let currentNodeRoutes = [nodeRoutes[i]];\n // let filteredAllocationsAndOutputs = getOptOutputVecRefined(currentRoutes, currentNodeRoutes, totalInput);\n let filteredAllocationsAndOutputs = getOptOutputVec(\n currentRoutes,\n currentNodeRoutes,\n totalInput\n );\n\n let filteredAllocations = filteredAllocationsAndOutputs.allocations;\n let filteredOutputs = filteredAllocationsAndOutputs.result;\n // console.log('FILTERED ALLOCATIONS:');\n // console.log(filteredAllocations.map((i) => i.toString()));\n // console.log(filteredOutputs);\n let totalOutput = filteredOutputs.reduce((a, b) => a.plus(b), new Big(0));\n if (new Big(totalOutput).gt(currentBestOutput)) {\n bestAllocations = filteredAllocations;\n currentBestOutput = totalOutput;\n // console.log('BEST OUTPUT IS NOW... ', currentBestOutput.toString());\n bestRoutes = currentRoutes;\n bestNodeRoutes = currentNodeRoutes;\n bestRoutesAreParallel = false;\n // bestResDict = currentResDict\n }\n }\n }\n\n // resDict = bestResDict;\n\n allocations = bestAllocations;\n\n // let outputs = resDict.outputs;\n routes = bestRoutes;\n nodeRoutes = bestNodeRoutes;\n\n if (routes.length < 1) {\n return [];\n }\n\n // check the top numberOfRoutesLimit\n // console.log('initial allocations are...');\n // console.log(allocations.map((a) => a.toString()));\n // console.log('fixed allocations are...');\n // console.log(allocations.map((a) => new Big(a).toFixed()));\n //SORT BY ALLOCATIONS\n let allSortedIndices = argsort(allocations.map(a => new Big(a)));\n if (bestRoutesAreParallel) {\n numberOfRoutesLimit = 4;\n }\n let sortedIndices = allSortedIndices.slice(0, numberOfRoutesLimit);\n\n // console.log('sorted Indices are');\n // console.log(sortedIndices);\n var filteredRoutes = [];\n var filteredNodeRoutes = [];\n for (var i in sortedIndices) {\n let index = sortedIndices[i];\n filteredRoutes.push(routes[index]);\n filteredNodeRoutes.push(nodeRoutes[index]);\n }\n\n // console.log('filteredRoutes are ...');\n // console.log(filteredRoutes);\n for (var i in filteredRoutes) {\n if (!filteredRoutes[i].length) {\n filteredRoutes[i] = [filteredRoutes[i]];\n }\n }\n // console.log('filtered Node routes are...');\n // console.log(filteredNodeRoutes);\n\n // THE BELOW CODE WILL ENSURE THAT ROUTES ARE INDEPENDENT (e.g. THE ROUTES WILL NOT SHARE A POOL)\n\n let route1PoolIds = filteredRoutes[0].map(pool => pool.id);\n // console.log('route 1 pool ids:');\n // console.log(route1PoolIds);\n if (filteredRoutes.length > 1) {\n let route2PoolIds = filteredRoutes[1].map(pool => pool.id);\n // console.log('route 2 pool ids:');\n // console.log(route2PoolIds);\n var sharedRoute = false;\n for (var i in route2PoolIds) {\n if (route1PoolIds.includes(route2PoolIds[i])) {\n // a pool was shared between routes. need to calculate a new second route.\n // console.log(\n // 'a pool was shared between routes. going to calculate a new second route'\n // );\n sharedRoute = true;\n break;\n }\n }\n }\n\n // NOTE -- this is a much simpler solution than that below. Instead of choosing the next best second route that doesn't share a\n // pool with the first route, we could just use the first route and allocate all inputs to it.\n // but, for larger transactions, it would be better to have option of two independent routes to spread out slippage.\n\n // if (sharedRoute) {\n // filteredRoutes = [filteredRoutes[0]];\n // filteredNodeRoutes = [filteredNodeRoutes[0]];\n // // TODO -- later can add in a second route that doesn't share a pool with first.\n // }\n\n // We're going to find the next-highest allocation route that doesn't share a pool with the first route.\n if (sharedRoute) {\n let allFilteredRoutes = [];\n let allFilteredNodeRoutes = [];\n for (var i in allSortedIndices) {\n allFilteredRoutes.push(routes[allSortedIndices[i]]);\n allFilteredNodeRoutes.push(nodeRoutes[allSortedIndices[i]]);\n }\n let firstRoute = allFilteredRoutes[0];\n // console.log('first route is...');\n // console.log(firstRoute);\n let firstRoutePoolIds = firstRoute.map(pool => pool.id);\n for (var i in allFilteredRoutes) {\n if (!allFilteredRoutes[i].length) {\n allFilteredRoutes[i] = [allFilteredRoutes[i]];\n }\n }\n // console.log('FIRST ROUTE POOL IDS ARE');\n // console.log(firstRoutePoolIds);\n let allFilteredRouteIds = allFilteredRoutes.map(route =>\n route.map(pool => pool.id)\n );\n // console.log('allFilteredRouteIds are ...');\n // console.log(allFilteredRouteIds);\n for (var i in allFilteredRouteIds) {\n // console.log('i is', i);\n // console.log('ALL FILTERED ROUTES [i] IS...');\n // console.log(allFilteredRouteIds[i]);\n for (var j in allFilteredRouteIds[i]) {\n // console.log('j is', j);\n // console.log('ALL FILTERED ROUTES [i][j] IS...');\n // console.log(allFilteredRouteIds[i][j]);\n if (firstRoutePoolIds.includes(allFilteredRouteIds[i][j])) {\n break;\n }\n\n var secondRoute = allFilteredRoutes[i];\n if (!secondRoute.length) {\n secondRoute = [secondRoute];\n }\n filteredRoutes = [allFilteredRoutes[0], secondRoute];\n filteredNodeRoutes = [\n allFilteredNodeRoutes[0],\n allFilteredNodeRoutes[i],\n ];\n break;\n }\n }\n // console.log('new filteredRoutes are ...');\n // console.log(filteredRoutes);\n // console.log('new filtered Node routes are...');\n // console.log(filteredNodeRoutes);\n }\n\n // let filteredAllocations_check = getBestOptInput(\n // filteredRoutes,\n // filteredNodeRoutes,\n // totalInput\n // );\n // let filteredAllocationsAndOutputs = getOptOutputVecRefined(filteredRoutes, filteredNodeRoutes, totalInput);\n let filteredAllocationsAndOutputs = getOptOutputVec(\n filteredRoutes,\n filteredNodeRoutes,\n totalInput\n );\n\n let filteredAllocations = filteredAllocationsAndOutputs.allocations;\n let filteredOutputs = filteredAllocationsAndOutputs.result;\n\n filteredAllocations = checkIntegerSumOfAllocations(\n filteredAllocations,\n totalInput\n ).map(stringAllo => new Big(stringAllo));\n\n let hops = getActionListFromRoutesAndAllocations(\n filteredRoutes,\n filteredNodeRoutes,\n filteredAllocations\n );\n\n var actions = [];\n // console.log('hops are...');\n // console.log(hops);\n\n for (var i in hops) {\n let hopInputTokenMeta = allTokens[hops[i].inputToken]\n ? allTokens[hops[i].inputToken]\n : await ftGetTokenMetadata(hops[i].inputToken, 'token input');\n\n let hopOutputTokenMeta = allTokens[hops[i].outputToken]\n ? allTokens[hops[i].outputToken]\n : await ftGetTokenMetadata(hops[i].outputToken, 'token sm');\n let hopOutputTokenDecimals = hopOutputTokenMeta.decimals;\n\n let expectedHopOutput = getOutputSingleHop(\n hops[i].pool,\n hops[i].inputToken,\n hops[i].outputToken,\n hops[i].allocation\n );\n let decimalEstimate = new Big(expectedHopOutput)\n .div(new Big(10).pow(hopOutputTokenDecimals))\n .toString();\n\n // Need to check if expected Hop Output is > 1. If not, then cull the corresponding pool and re-calculate.\n if (new Big(expectedHopOutput).lt(new Big(1))) {\n // purge the pool and recalculate.\n\n decimalsCulledPoolIds.push(hops[i].pool.id);\n return getSmartRouteSwapActions(\n pools,\n inputToken,\n outputToken,\n totalInput,\n allTokens,\n (maxPathLength = maxPathLength),\n (threshold = threshold),\n (numberOfRoutesLimit = numberOfRoutesLimit),\n (MAX_NUMBER_PARALLEL_POOLS = MAX_NUMBER_PARALLEL_POOLS),\n (decimalsCulledPoolIds = decimalsCulledPoolIds)\n );\n }\n\n if (\n hops[i].inputToken == inputToken &&\n hops[i].outputToken == outputToken\n ) {\n var status = 'parallel swap';\n } else {\n var status = 'stableSmart';\n }\n\n let tokens = await Promise.all(\n hops[i].nodeRoute.map(async t =>\n allTokens[t] ? allTokens[t] : await ftGetTokenMetadata(t, 'smart')\n )\n );\n\n actions[i] = {\n estimate: decimalEstimate,\n pool: {\n fee: hops[i].pool.fee,\n gamma_bps: new Big(10000).minus(new Big(hops[i].pool.fee)), //.div(new Big(10000)), //hops[i].pool.gamma, //new Big(10000).minus(new Big(hops[i].pool.fee)).div(new Big(10000));\n id: hops[i].pool.id,\n partialAmountIn: new Big(hops[i].allocation).round().toString(),\n supplies: {\n [hops[i].pool.token1Id]: hops[i].pool.token1Supply,\n [hops[i].pool.token2Id]: hops[i].pool.token2Supply,\n },\n token0_ref_price: hops[i].pool.token0_price,\n tokenIds: [hops[i].pool.token1Id, hops[i].pool.token2Id],\n Dex: hops[i].pool.Dex,\n },\n status: status,\n token: hopInputTokenMeta,\n outputToken: hops[i].outputToken,\n inputToken: hops[i].inputToken,\n nodeRoute: hops[i].nodeRoute,\n route: hops[i].route,\n allRoutes: hops[i].allRoutes,\n allNodeRoutes: hops[i].allNodeRoutes,\n totalInputAmount: hops[i].totalInputAmount,\n allAllocations: hops[i].allAllocations,\n tokens: tokens,\n routeInputToken: inputToken,\n routeOutputToken: outputToken,\n overallPriceImpact: '0',\n };\n // console.log('INPUT TOKEN IS...');\n // console.log(hops[i].inputToken);\n actions[i].pool.x = actions[i].pool.supplies[hops[i].inputToken];\n actions[i].pool.y = actions[i].pool.supplies[hops[i].outputToken];\n }\n // now set partial amount in for second hops equal to zero:\n // also, set the total price impact value.\n let overallPriceImpact = await calculateSmartRouteV2PriceImpact(\n actions,\n allTokens\n );\n for (var i in actions) {\n let action = actions[i];\n action.overallPriceImpact = overallPriceImpact;\n if (action.outputToken === outputToken && action.inputToken != inputToken) {\n // only want to set second hop partial amount in to zero\n action.pool.partialAmountIn = '0';\n }\n }\n\n return actions;\n}\n\nasync function calculateSmartRouteV2PriceImpact(actions, allTokens) {\n // the goal is to take a weighted average of the price impact per route, treating each one at a time.\n // for single hop (parallel swaps), the price impact is calculated as before.\n // for double-hop, the market price, P, is determined using reserves of tokens in each pool in the route.\n // in both cases, we compare the 'market price', P , determined solely by reserves in pools, and the actual\n // average price, R, expected to be paid in the transaction.\n // the price impact is then defined as (P-R)/R * 100 and is a percentage number, returned as a string.\n\n let deltaY = actions\n .filter(a => a.outputToken == a.routeOutputToken)\n .map(a => new Big(a.estimate))\n .reduce((a, b) => a.plus(b), new Big(0));\n // console.log('DELTA Y IS...');\n // console.log(deltaY.toString());\n\n let inputTokenMeta = actions[0].tokens[0];\n let deltaX = new Big(actions[0].totalInputAmount).div(\n new Big(10).pow(inputTokenMeta.decimals)\n );\n let R = deltaY.div(deltaX);\n var P = new Big(0);\n let routes = actions[0].allRoutes;\n let nodeRoutes = actions[0].allNodeRoutes;\n let allocations = actions[0].allAllocations.map(a => new Big(a));\n let totalAllocations = allocations\n .map(a => new Big(a))\n .reduce((a, b) => a.plus(b), new Big(0));\n\n let weights = allocations.map(a => a.div(totalAllocations));\n\n for (var i in routes) {\n let route = routes[i];\n let nodeRoute = nodeRoutes[i];\n let tokens = await Promise.all(\n nodeRoute.map(async t => {\n return allTokens[t]\n ? allTokens[t]\n : await ftGetTokenMetadata(t, 'sm routes');\n })\n );\n let weight = weights[i];\n if (route.length == 1) {\n let num = new Big(route[0].reserves[nodeRoute[0]]).div(\n new Big(10).pow(tokens[0].decimals)\n );\n let denom = new Big(route[0].reserves[nodeRoute[1]]).div(\n new Big(10).pow(tokens[1].decimals)\n );\n var routeMarketPrice = num.div(denom);\n } else {\n let num1 = new Big(route[0].reserves[nodeRoute[0]]).div(\n new Big(10).pow(tokens[0].decimals)\n );\n\n let denom1 = new Big(route[0].reserves[nodeRoute[1]]).div(\n new Big(10).pow(tokens[1].decimals)\n );\n\n let num2 = new Big(route[1].reserves[nodeRoute[1]]).div(\n new Big(10).pow(tokens[1].decimals)\n );\n\n let denom2 = new Big(route[1].reserves[nodeRoute[2]]).div(\n new Big(10).pow(tokens[2].decimals)\n );\n\n var routeMarketPrice = num1\n .div(denom1)\n .times(num2)\n .div(denom2);\n }\n P = P.plus(weight.times(new Big(1).div(routeMarketPrice)));\n }\n\n let priceImpact = P.minus(R)\n .div(R)\n .times(new Big(100))\n .toString();\n return priceImpact;\n}\n\nfunction decor(arr) {\n var res = [];\n for (var i in arr) {\n res.push([arr[i], i]);\n }\n return res;\n}\nfunction argsort(arr) {\n let undecor = a => a[1]; // leave only index\n let decorated = decor(arr);\n\n return decorated\n .sort((a, b) => new Big(b[0]).minus(new Big(a[0])))\n .map(undecor);\n}\n\nfunction getPoolsByToken1ORToken2(pools, token1, token2) {\n let filteredPools = pools.filter(\n item =>\n item.token1Id === token1 ||\n item.token2Id === token1 ||\n item.token1Id === token2 ||\n item.token2Id === token2\n );\n return filteredPools;\n}\n\nfunction getPoolsByToken1ANDToken2(\n pools,\n token1,\n token2,\n cullZeroLiquidityPools = true\n) {\n let filteredPools = pools.filter(\n item =>\n (item.token1Id === token1 && item.token2Id === token2) ||\n (item.token1Id === token2 && item.token2Id === token1)\n );\n if (cullZeroLiquidityPools) {\n filteredPools = filteredPools.filter(\n item => item.token1Supply != '0' && item.token2Supply != '0'\n );\n }\n return filteredPools;\n}\n\nfunction getLiqudityOfPoolsFromList(pools) {\n let liquidities = [];\n for (var poolInd in pools) {\n let pool = pools[poolInd];\n pool.amounts = [pool.token1Supply, pool.token2Supply];\n let poolBigAmounts = pool.amounts.map(item => new Big(item));\n let liquidity = poolBigAmounts[0].times(poolBigAmounts[1]);\n liquidities.push(liquidity);\n }\n return liquidities;\n}\n\nfunction getNormalizedLiquiditiesFromList(pools) {\n let liquidities = getLiqudityOfPoolsFromList(pools);\n let maxLiq = bigMax(liquidities);\n let normalizedLiquidities = liquidities.map(item => item.div(maxLiq));\n return normalizedLiquidities;\n}\n\nfunction bigMax(arrayOfBigs) {\n if (arrayOfBigs.length < 1) {\n return null;\n }\n let maxElem = arrayOfBigs[0];\n for (var ind in arrayOfBigs) {\n let val = arrayOfBigs[ind];\n if (val.gt(maxElem)) {\n maxElem = val;\n }\n }\n return maxElem;\n}\n\nfunction cullPoolsWithInsufficientLiquidity(pools, threshold = 0.0001) {\n var thresh = new Big(threshold);\n let normLiq = getNormalizedLiquiditiesFromList(pools);\n let filteredPools = [];\n for (var i = 0; i < normLiq.length; i++) {\n if (normLiq[i] > thresh) {\n filteredPools.push(pools[i]);\n }\n }\n return filteredPools;\n}\n\nfunction cartesianProduct(a) {\n let result = a.reduce((a, b) => a.flatMap(d => b.map(e => [d, e].flat())));\n return result;\n}\n\nfunction addEdge(g, edge) {\n let src = edge[0];\n let dst = edge[1];\n if (Object.keys(g).includes(src)) {\n if (!Object.keys(g[src]).includes(dst)) {\n g[src][dst] = 1;\n }\n } else {\n g[src] = {};\n g[src][dst] = 1;\n }\n if (Object.keys(g).includes(dst)) {\n if (!Object.keys(g[dst]).includes(src)) {\n g[dst][src] = 1;\n }\n } else {\n g[dst] = {};\n g[dst][src] = 1;\n }\n}\n\nfunction addEdges(g, edgeList) {\n for (var n in edgeList) {\n let edge = edgeList[n];\n addEdge(g, edge);\n }\n}\n\nfunction deleteEdge(g, edge) {\n let gNew = JSON.parse(JSON.stringify(g)); // using this to deep clone graph structure\n let e1 = edge[0];\n let e2 = edge[1];\n if (Object.keys(gNew).includes(e1)) {\n if (Object.keys(gNew[e1]).includes(e2)) {\n delete gNew[e1][e2];\n }\n }\n if (Object.keys(gNew).includes(e2)) {\n if (Object.keys(gNew[e2]).includes(e1)) {\n delete gNew[e2][e1];\n }\n }\n return gNew;\n}\n\nfunction deleteNode(g, node) {\n let gNew = JSON.parse(JSON.stringify(g)); // using this to deep clone graph structure\n if (Object.keys(gNew).includes(node)) {\n delete gNew[node];\n }\n let keys = Object.keys(gNew);\n for (var nodeInd in keys) {\n let nodeNow = keys[nodeInd];\n if (Object.keys(gNew[nodeNow]).includes(node)) {\n delete gNew[nodeNow][node];\n }\n }\n return gNew;\n}\n\nfunction dijkstra(graph, s) {\n var solutions = {};\n solutions[s] = {};\n solutions[s].path = [];\n solutions[s].dist = 0;\n\n while (true) {\n var parent = null;\n var nearest = null;\n var dist = Infinity;\n\n //for each existing solution\n for (var n in solutions) {\n if (!solutions[n]) {\n solutions[n] = {};\n }\n if (!solutions[n].path) continue;\n var ndist = solutions[n].dist;\n var adj = graph[n];\n //for each of its adjacent nodes...\n for (var a in adj) {\n //without a solution already...\n if (!solutions[a]) {\n solutions[a] = {};\n }\n if (solutions[a].path) continue;\n //choose nearest node with lowest *total* cost\n var d = adj[a] + ndist;\n if (d < dist) {\n //reference parent\n parent = solutions[n].path;\n nearest = a;\n dist = d;\n }\n }\n }\n\n //no more solutions\n if (dist === Infinity) {\n break;\n }\n\n //extend parent's solution path\n solutions[nearest].path = parent.concat(nearest);\n //extend parent's cost\n solutions[nearest].dist = dist;\n }\n\n return solutions;\n}\n\nfunction shortestPath(g, src, dst, ignore_nodes = [], ignore_edges = []) {\n let gTemp = JSON.parse(JSON.stringify(g)); // using this to deep clone graph structure. If we can use lodash, could use _.cloneDeep(obj)\n // remove nodes\n for (var nodeInd in ignore_nodes) {\n let nodeNow = ignore_nodes[nodeInd];\n gTemp = deleteNode(gTemp, nodeNow);\n }\n // remove edges\n for (var edgeInd in ignore_edges) {\n let edgeNow = ignore_edges[edgeInd];\n gTemp = deleteEdge(gTemp, edgeNow);\n }\n let solution = dijkstra(gTemp, src)[dst];\n solution.path.unshift(src); // original algorithm doesn't include source node in path\n return solution;\n}\n\nfunction* count(firstval = 0, step = 1) {\n let x = firstval;\n while (true) {\n yield x;\n x = x + 1;\n }\n}\n\nclass PathBuffer {\n constructor() {\n this.paths = [];\n this.sortedpaths = [];\n //this.counter = count();\n }\n len() {\n return this.sortedpaths.length;\n }\n\n push(cost, path) {\n if (path && !arrayContains(this.paths, path)) {\n this.sortedpaths.push([cost, path]);\n this.sortedpaths.sort(function(a, b) {\n return a[0] - b[0];\n });\n //heappush(this.sortedpaths, (cost, this.counter.next().value,path));\n this.paths.push(path);\n }\n }\n\n pop() {\n //let val = heappop(this.sortedpaths);\n let val = this.sortedpaths.shift();\n let cost = val[0];\n let path = val[1];\n this.paths.splice(this.paths.indexOf(path), 1);\n return path;\n }\n}\n\nfunction arrayEquals(a, b) {\n return (\n Array.isArray(a) &&\n Array.isArray(b) &&\n a.length === b.length &&\n a.every((val, index) => val === b[index])\n );\n}\n\nfunction arrayContains(arr, obj) {\n // checks to see if the input array contains a reference object, obj, using\n // JSON.stringify() .\n let obj_json = JSON.stringify(obj);\n for (var itemInd in arr) {\n if (JSON.stringify(arr[itemInd]) == obj_json) {\n return true;\n }\n }\n return false;\n}\n\nfunction* yenFromPy(g, source, target) {\n //adapted from the python implementation in networkx.algorithms.simple_paths.shortest_simple_paths()\n let listA = [];\n let listB = new PathBuffer();\n let prev_path = null;\n\n while (true) {\n if (!prev_path) {\n let sol = shortestPath(g, source, target);\n let length = sol.dist;\n let path = sol.path;\n listB.push(length, path);\n } else {\n let ignore_nodes = [];\n let ignore_edges = [];\n for (var i = 1; i < prev_path.length; i++) {\n let root = prev_path.slice(0, i);\n let root_length = root.length;\n for (var pathInd in listA) {\n let path = listA[pathInd];\n\n if (arrayEquals(path.slice(0, i), root)) {\n let edgeToIgnore = [path[i - 1], path[i]];\n ignore_edges.push(edgeToIgnore);\n }\n }\n try {\n let sol = shortestPath(\n g,\n root[root.length - 1],\n target,\n (ignore_nodes = ignore_nodes),\n (ignore_edges = ignore_edges)\n );\n let length = sol.dist;\n let spur = sol.path;\n let path = root.slice(0, root.length - 1).concat(spur);\n listB.push(root_length + length, path);\n } catch (e) {\n //console.log(`yenFromPy error was... ${e}`)\n //dont do anything.\n }\n ignore_nodes.push(root[root.length - 1]);\n }\n }\n if (listB.sortedpaths) {\n try {\n let path = listB.pop();\n yield path;\n listA.push(path);\n prev_path = path;\n } catch (e) {\n break;\n }\n } else {\n break;\n }\n }\n}\n\nfunction getKShortestPaths(g, source, target, k, maxPathLength = 3) {\n let paths = [];\n if (maxPathLength < 2) {\n var maxPathLength = 2;\n }\n let gen = yenFromPy(g, source, target);\n for (var n = 1; n <= k; n++) {\n try {\n let res = gen.next().value;\n if (res && !arrayContains(paths, res)) {\n if (res.length > maxPathLength) {\n // console.log(\n // `found all hops of length ${\n // maxPathLength - 1\n // } or less... breaking out of generator`\n // );\n break;\n }\n paths.push(res);\n }\n } catch (e) {\n break;\n }\n }\n return paths;\n}\n\nasync function getPathsFromPools(\n pools,\n inputToken,\n outputToken,\n maxPathLength = 3\n) {\n let graph = getGraphFromPoolList(pools);\n return getKShortestPaths(graph, inputToken, outputToken, 100, maxPathLength);\n}\n\nasync function getAllPathsBelowLengthN(g, source, target, N, limit = 100) {\n // use Yen's algorithm to find the paths of length N or below between source and target nodes in graph g.\n\n let paths = [];\n\n let gen = await yenFromPy(g, source, target);\n let currentPathLength = 0;\n let count = 1;\n while (currentPathLength <= N) {\n // console.log(`CURRENT PATH LENGTH IS ${currentPathLength}`)\n try {\n let res = await gen.next().value;\n // console.log(`RES IS ${res}`)\n if (res && !arrayContains(paths, res)) {\n if (res.length > currentPathLength) {\n currentPathLength = res.length;\n if (currentPathLength > N) {\n break;\n }\n }\n paths.push(res);\n }\n count = count + 1;\n if (count > limit) {\n break;\n }\n } catch (e) {\n // console.log(e)\n break;\n }\n }\n return paths;\n}\n\nfunction getGraphFromPoolList(poolList) {\n let pools = poolList.filter(\n item => item.token1Supply != '0' && item.token2Supply != '0'\n );\n let transitions = pools.map(item => [item.token1Id, item.token2Id]);\n let g = {};\n addEdges(g, transitions);\n return g;\n}\n\n////////////////////////////////////\n\n// MAIN FUNCTION\n\n////////////////////////////////////\n\n// TODO -- incorporate the following integrated function, which tries to\n// account for stablecoins within the context of smart routing.\n\n//TODO -- need the right API / hooks for GETSTABLESWAPACTION function and GETPARALLELSWAPACTIONS functions.\n\n//TODO -- transform the actions generated in this function into tranaction to execute.\n\n//TRYING: GETSTABLESWAPACTION <==> instantSwapGetTransactions\n\nexport async function stableSmart(\n pools,\n inputToken,\n outputToken,\n totalInput,\n allTokens\n) {\n let smartRouteActions = await getSmartRouteSwapActions(\n pools,\n inputToken,\n outputToken,\n totalInput,\n allTokens\n );\n return smartRouteActions;\n}\n\nexport function getExpectedOutputFromActionsORIG(actions, outputToken) {\n return actions\n .filter(item => item.outputToken === outputToken)\n .map(item => new Big(item.estimate))\n .reduce((a, b) => a.plus(b), new Big(0));\n}\n\nfunction getFeeForRoute(route) {\n if (!route.length) {\n route = [route];\n }\n if (route.length == 1) {\n // Single Hop case\n let p = route[0];\n return p.fee;\n } else if (route.length == 2) {\n //Double Hop Case\n let p1 = route[0];\n let p2 = route[1];\n let fee1 = p1.fee;\n let fee2 = p2.fee;\n return fee1 + fee2;\n }\n}\n\nexport function getAverageFeeForRoutes(routes, nodeRoutes, totalInput) {\n let normalizedAllocations = getOptimalAllocationForRoutes(\n routes,\n nodeRoutes,\n totalInput\n ).map(a => a.div(new Big(totalInput)));\n let averageFee = 0;\n for (var i in routes) {\n averageFee += normalizedAllocations[i] * getFeeForRoute(routes[i]);\n }\n return averageFee;\n}\n","import { TokenMetadata, Pool, StablePool, EstimateSwapView } from '../types';\nimport {\n toReadableNumber,\n toNonDivisibleNumber,\n scientificNotationToString,\n} from '../utils';\nimport Big from 'big.js';\nimport { SameInputTokenError, ZeroInputError, NoPoolError } from '../error';\nimport { ONLY_ZEROS, toPrecision } from '../utils';\nimport _ from 'lodash';\nimport { FEE_DIVISOR } from '../constant';\nimport { getSwappedAmount } from '../stable-swap';\nimport { ftGetTokenMetadata, ftGetTokensMetadata } from '../ref';\nimport { isStablePool } from '../utils';\nimport { getTokensTiny } from '../indexer';\nimport {\n getStablePoolDecimal,\n isStablePoolToken,\n poolFormatter,\n} from '../utils';\nimport {\n stableSmart,\n getExpectedOutputFromActionsORIG,\n //@ts-ignore\n} from './smartRoutingLogic.js';\n\nexport enum PoolMode {\n PARALLEL = 'parallel swap',\n SMART = 'smart routing',\n SMART_V2 = 'stableSmart',\n STABLE = 'stable swap',\n}\n\nexport interface SwapParams {\n tokenIn: TokenMetadata;\n tokenOut: TokenMetadata;\n amountIn: string;\n simplePools: Pool[];\n options?: SwapOptions;\n}\n\nexport interface SwapOptions {\n enableSmartRouting?: boolean;\n stablePools?: Pool[];\n stablePoolsDetail?: StablePool[];\n}\n\nexport const getSimplePoolEstimate = ({\n tokenIn,\n tokenOut,\n pool,\n amountIn,\n}: {\n tokenIn: TokenMetadata;\n tokenOut: TokenMetadata;\n pool: Pool;\n amountIn: string;\n}) => {\n const amount_with_fee = Number(amountIn) * (FEE_DIVISOR - pool.fee);\n const in_balance = toReadableNumber(\n tokenIn.decimals,\n pool.supplies[tokenIn.id]\n );\n const out_balance = toReadableNumber(\n tokenOut.decimals,\n pool.supplies[tokenOut.id]\n );\n const estimate = new Big(\n (\n (amount_with_fee * Number(out_balance)) /\n (FEE_DIVISOR * Number(in_balance) + amount_with_fee)\n ).toString()\n ).toFixed();\n\n return {\n estimate,\n pool,\n outputToken: tokenOut.id,\n inputToken: tokenIn.id,\n };\n};\n\nexport const getStablePoolEstimate = ({\n tokenIn,\n tokenOut,\n amountIn,\n stablePool,\n pool,\n}: {\n tokenIn: TokenMetadata;\n tokenOut: TokenMetadata;\n amountIn: string;\n stablePool: StablePool;\n pool?: Pool;\n}) => {\n const STABLE_LP_TOKEN_DECIMALS = getStablePoolDecimal(stablePool);\n\n const [amount_swapped, _, dy] = getSwappedAmount(\n tokenIn.id,\n tokenOut.id,\n amountIn,\n stablePool,\n STABLE_LP_TOKEN_DECIMALS\n );\n\n const amountOut =\n amount_swapped < 0 || isNaN(amount_swapped)\n ? '0'\n : toPrecision(scientificNotationToString(amount_swapped.toString()), 0);\n\n const dyOut =\n amount_swapped < 0 || isNaN(amount_swapped) || isNaN(dy)\n ? '0'\n : toPrecision(scientificNotationToString(dy.toString()), 0);\n\n const rates = stablePool.rates.reduce((acc, cur, i) => {\n return {\n ...acc,\n [stablePool.token_account_ids[i]]: cur,\n };\n }, {});\n\n return {\n estimate: toReadableNumber(STABLE_LP_TOKEN_DECIMALS, amountOut),\n noFeeAmountOut: toReadableNumber(STABLE_LP_TOKEN_DECIMALS, dyOut),\n pool: {\n ...stablePool,\n rates,\n },\n outputToken: tokenOut.id,\n inputToken: tokenIn.id,\n };\n};\n\n/**\n * @description Get the estimate of the amount of tokenOut that can be received\n *\n */\nexport const singlePoolSwap = ({\n tokenIn,\n tokenOut,\n simplePools,\n amountIn,\n stablePools,\n}: {\n tokenIn: TokenMetadata;\n tokenOut: TokenMetadata;\n simplePools: Pool[];\n amountIn: string;\n stablePools?: StablePool[];\n}) => {\n if (!simplePools || simplePools.length === 0) {\n throw NoPoolError;\n }\n\n const parsedAmountIn = toNonDivisibleNumber(tokenIn.decimals, amountIn);\n\n // const pools = simplePools.concat(stablePools);\n\n const simplePoolsThisPair = simplePools.filter(\n p =>\n p.tokenIds.includes(tokenIn.id) &&\n p.tokenIds.includes(tokenOut.id) &&\n (!stablePools || !isStablePool(stablePools, p.id))\n );\n\n const estimatesSimplePool = simplePoolsThisPair.map(pool =>\n getSimplePoolEstimate({\n tokenIn,\n tokenOut,\n pool,\n amountIn,\n })\n );\n\n const stablePoolThisPair = stablePools?.filter(\n sp =>\n sp.token_account_ids.includes(tokenIn.id) &&\n sp.token_account_ids.includes(tokenOut.id)\n );\n\n // different stable lp token decimal for different type of pools\n const estimatesStablePool = stablePoolThisPair?.map(stablePool => {\n return getStablePoolEstimate({\n tokenIn,\n tokenOut,\n amountIn,\n stablePool,\n pool: simplePools.find(p => p.id === stablePool.id) as Pool,\n });\n });\n\n const maxSimplePoolEstimate =\n estimatesSimplePool === undefined || estimatesSimplePool.length === 0\n ? undefined\n : estimatesSimplePool.length === 1\n ? estimatesSimplePool[0]\n : _.maxBy(estimatesSimplePool, estimate => Number(estimate.estimate));\n\n const maxStablePoolEstimate =\n estimatesStablePool === undefined || estimatesStablePool.length === 0\n ? undefined\n : estimatesStablePool.length === 1\n ? estimatesStablePool[0]\n : _.maxBy(estimatesStablePool, estimate => Number(estimate.estimate));\n\n if (!maxStablePoolEstimate && !maxSimplePoolEstimate) throw NoPoolError;\n\n maxSimplePoolEstimate &&\n (maxSimplePoolEstimate.pool.partialAmountIn = parsedAmountIn);\n\n maxStablePoolEstimate &&\n (maxStablePoolEstimate.pool.partialAmountIn = parsedAmountIn);\n\n if (!maxStablePoolEstimate) {\n maxSimplePoolEstimate &&\n (maxSimplePoolEstimate.pool.partialAmountIn = parsedAmountIn);\n\n return maxSimplePoolEstimate;\n } else if (!maxSimplePoolEstimate) {\n return maxStablePoolEstimate;\n } else {\n return Number(maxSimplePoolEstimate?.estimate) >\n Number(maxStablePoolEstimate?.estimate)\n ? maxSimplePoolEstimate\n : maxStablePoolEstimate;\n }\n};\n\nexport const getStablePoolsThisPair = ({\n tokenInId,\n tokenOutId,\n stablePools,\n}: {\n tokenInId: string;\n tokenOutId: string;\n stablePools: Pool[];\n}) => {\n return stablePools.filter(\n p =>\n p.tokenIds.includes(tokenInId) &&\n p.tokenIds.includes(tokenOutId) &&\n tokenInId !== tokenOutId\n );\n};\n\nexport const getPoolsByTokens = ({\n pools,\n tokenInId,\n tokenOutId,\n}: {\n pools: Pool[];\n tokenInId: string;\n tokenOutId: string;\n}) => {\n if (tokenInId === tokenOutId) return [];\n\n return pools.filter(\n p => p.tokenIds.includes(tokenInId) && p.tokenIds.includes(tokenOutId)\n );\n};\n\nexport const getPoolEstimate = async ({\n tokenIn,\n tokenOut,\n amountIn,\n stablePoolDetail,\n pool,\n}: {\n tokenIn: TokenMetadata;\n tokenOut: TokenMetadata;\n amountIn: string;\n pool: Pool;\n stablePoolDetail?: StablePool;\n}) => {\n if (!!stablePoolDetail) {\n return getStablePoolEstimate({\n tokenIn,\n tokenOut,\n stablePool: stablePoolDetail,\n amountIn,\n pool,\n });\n } else {\n return getSimplePoolEstimate({\n tokenIn,\n tokenOut,\n pool,\n amountIn,\n });\n }\n};\n\nexport async function getHybridStableSmart(\n tokenIn: TokenMetadata,\n tokenOut: TokenMetadata,\n amountIn: string,\n stablePools: Pool[],\n stablePoolsDetail: StablePool[],\n simplePools: Pool[],\n allTokens: Record<string, TokenMetadata>\n) {\n if (\n !isStablePoolToken(stablePoolsDetail, tokenIn.id) &&\n !isStablePoolToken(stablePoolsDetail, tokenOut.id)\n ) {\n return { actions: [], estimate: '0' };\n }\n\n const stablePoolsDetailById = stablePoolsDetail.reduce((acc, cur) => {\n return {\n ...acc,\n [cur.id]: cur,\n };\n }, {} as Record<string, StablePool>);\n\n const parsedAmountIn = toNonDivisibleNumber(tokenIn.decimals, amountIn);\n\n let pool1: Pool, pool2: Pool;\n\n let pools1: Pool[] = [];\n let pools2: Pool[] = [];\n\n let pools1Right: Pool[] = [];\n let pools2Right: Pool[] = [];\n\n let candidatePools: Pool[][] = [];\n\n /**\n * find possible routes for this pair\n *\n *\n */\n\n if (isStablePoolToken(stablePoolsDetail, tokenIn.id)) {\n // first hop will be through stable pool.\n pools1 = stablePools.filter(pool => pool.tokenIds.includes(tokenIn.id));\n\n const otherStables = pools1\n .map(pool => pool.tokenIds.filter(id => id !== tokenIn.id))\n .flat();\n\n for (var otherStable of otherStables) {\n let stablePoolsThisPair = getStablePoolsThisPair({\n tokenInId: otherStable,\n tokenOutId: tokenOut.id,\n stablePools,\n });\n\n let tmpPools = getPoolsByTokens({\n tokenInId: otherStable,\n tokenOutId: tokenOut.id,\n pools: simplePools,\n });\n const tobeAddedPools = tmpPools.concat(stablePoolsThisPair);\n pools2.push(\n ...tobeAddedPools.filter(p => {\n const supplies = Object.values(p.supplies);\n return new Big(supplies[0]).times(new Big(supplies[1])).gt(0);\n })\n );\n }\n }\n\n if (isStablePoolToken(stablePoolsDetail, tokenOut.id)) {\n // second hop will be through stable pool.\n pools2Right = stablePools.filter(pool =>\n pool.tokenIds.includes(tokenOut.id)\n );\n\n const otherStables = pools2Right\n .map(pool => pool.tokenIds.filter(id => id !== tokenOut.id))\n .flat();\n for (let otherStable of otherStables) {\n let stablePoolsThisPair = getStablePoolsThisPair({\n tokenInId: tokenIn.id,\n tokenOutId: otherStable,\n stablePools,\n });\n\n let tmpPools = getPoolsByTokens({\n tokenInId: tokenIn.id,\n tokenOutId: otherStable,\n pools: simplePools,\n });\n\n const tobeAddedPools = tmpPools.concat(stablePoolsThisPair);\n\n pools1Right.push(\n ...tobeAddedPools.filter(p => {\n const supplies = Object.values(p.supplies);\n return new Big(supplies[0]).times(new Big(supplies[1])).gt(0);\n })\n );\n }\n }\n\n // find candidate pools\n\n for (let p1 of pools1) {\n let middleTokens = p1.tokenIds.filter((id: string) => id !== tokenIn.id);\n for (let middleToken of middleTokens) {\n let p2s = pools2.filter(\n p =>\n p.tokenIds.includes(middleToken) &&\n p.tokenIds.includes(tokenOut.id) &&\n middleToken !== tokenOut.id\n );\n let p2 = _.maxBy(p2s, p =>\n Number(\n new Big(toReadableNumber(tokenOut.decimals, p.supplies[tokenOut.id]))\n )\n );\n\n if (middleToken === tokenOut.id) {\n p2 = p1;\n }\n\n if (p1 && p2) {\n if (p1.id === p2.id) candidatePools.push([p1]);\n else candidatePools.push([p1, p2]);\n }\n }\n }\n for (let p1 of pools1Right) {\n let middleTokens = p1.tokenIds.filter((id: string) => id !== tokenIn.id);\n for (let middleToken of middleTokens) {\n let p2s = pools2Right.filter(\n p =>\n p.tokenIds.includes(middleToken) &&\n p.tokenIds.includes(tokenOut.id) &&\n middleToken !== tokenOut.id\n );\n let p2 = _.maxBy(p2s, p =>\n Number(\n new Big(toReadableNumber(tokenOut.decimals, p.supplies[tokenOut.id]))\n )\n );\n\n if (middleToken === tokenOut.id) {\n p2 = p1;\n }\n\n if (p1 && p2) {\n if (p1.id === p2.id) candidatePools.push([p1]);\n else candidatePools.push([p1, p2]);\n }\n }\n }\n\n if (candidatePools.length > 0) {\n const tokensMedata = await ftGetTokensMetadata(\n candidatePools.map(cp => cp.map(p => p.tokenIds).flat()).flat(),\n allTokens\n );\n\n const BestPoolPair =\n candidatePools.length === 1\n ? candidatePools[0]\n : _.maxBy(candidatePools, poolPair => {\n // only one pool case, only for stable tokens\n if (poolPair.length === 1) {\n if (isStablePool(stablePoolsDetail, poolPair[0].id)) {\n const stablePoolThisPair = getStablePoolsThisPair({\n tokenInId: tokenIn.id,\n tokenOutId: tokenOut.id,\n stablePools,\n })[0];\n\n const stablePoolDetailThisPair = stablePoolsDetail.find(\n spd => spd.id === stablePoolThisPair.id\n );\n\n return Number(\n getStablePoolEstimate({\n tokenIn,\n tokenOut,\n stablePool: stablePoolDetailThisPair as StablePool,\n amountIn,\n pool: poolPair[0],\n }).estimate\n );\n } else {\n return Number(\n getSimplePoolEstimate({\n tokenIn,\n tokenOut,\n amountIn,\n pool: poolPair[0],\n }).estimate\n );\n }\n }\n\n const [tmpPool1, tmpPool2] = poolPair;\n const tokenMidId = poolPair[0].tokenIds.find(\n (t: string) =>\n poolPair[1].tokenIds.includes(t) &&\n t !== tokenIn.id &&\n t !== tokenOut.id\n );\n\n const tokenMidMeta = tokensMedata[tokenMidId!];\n\n const estimate1 = {\n ...(isStablePool(stablePoolsDetail, tmpPool1.id)\n ? getStablePoolEstimate({\n tokenIn,\n tokenOut: tokenMidMeta,\n amountIn,\n stablePool: stablePoolsDetailById[tmpPool1.id],\n pool: tmpPool1,\n })\n : getSimplePoolEstimate({\n tokenIn,\n tokenOut: tokenMidMeta,\n amountIn,\n pool: tmpPool1,\n })),\n status: PoolMode.SMART,\n };\n\n const estimate2 = {\n ...(isStablePool(stablePoolsDetail, tmpPool2.id)\n ? getStablePoolEstimate({\n tokenIn: tokenMidMeta,\n tokenOut,\n amountIn: estimate1.estimate,\n stablePool: stablePoolsDetailById[tmpPool2.id],\n pool: tmpPool2,\n })\n : getSimplePoolEstimate({\n tokenIn: tokenMidMeta,\n tokenOut,\n pool: tmpPool2,\n amountIn: estimate1.estimate,\n })),\n status: PoolMode.SMART,\n };\n\n return Number(estimate2.estimate);\n });\n\n // one pool case only get best price\n\n if (!BestPoolPair) return { actions: [], estimate: '0' };\n\n if (BestPoolPair.length === 1) {\n const bestPool = BestPoolPair[0];\n const estimate = await getPoolEstimate({\n tokenIn,\n tokenOut,\n amountIn,\n pool: bestPool,\n stablePoolDetail: stablePoolsDetailById[bestPool.id],\n });\n\n return {\n actions: [\n {\n ...estimate,\n status: PoolMode.STABLE,\n\n pool: { ...estimate.pool, partialAmountIn: parsedAmountIn },\n tokens: [tokenIn, tokenOut],\n inputToken: tokenIn.id,\n outputToken: tokenOut.id,\n totalInputAmount: toNonDivisibleNumber(tokenIn.decimals, amountIn),\n },\n ],\n estimate: estimate.estimate,\n };\n }\n\n // two pool case get best price\n [pool1, pool2] = BestPoolPair;\n\n const tokenMidId = BestPoolPair[0].tokenIds.find(\n (t: string) =>\n BestPoolPair[1].tokenIds.includes(t) &&\n t !== tokenIn.id &&\n t !== tokenOut.id\n );\n\n const tokenMidMeta =\n allTokens[tokenMidId!] ||\n (await ftGetTokenMetadata(tokenMidId!, 'hybridSmartRoutingEstimate'));\n\n const estimate1 = {\n ...(isStablePool(stablePoolsDetail, pool1.id)\n ? getStablePoolEstimate({\n tokenIn,\n tokenOut: tokenMidMeta,\n amountIn,\n stablePool: stablePoolsDetailById[pool1.id],\n pool: pool1,\n })\n : getSimplePoolEstimate({\n tokenIn,\n tokenOut: tokenMidMeta,\n amountIn,\n pool: pool1,\n })),\n tokens: [tokenIn, tokenMidMeta, tokenOut],\n inputToken: tokenIn.id,\n outputToken: tokenMidMeta.id,\n status: PoolMode.SMART,\n };\n\n estimate1.pool = {\n ...estimate1.pool,\n partialAmountIn: parsedAmountIn,\n };\n\n const estimate2 = {\n ...(isStablePool(stablePoolsDetail, pool2.id)\n ? getStablePoolEstimate({\n tokenIn: tokenMidMeta,\n tokenOut,\n amountIn: estimate1.estimate,\n stablePool: stablePoolsDetailById[pool2.id],\n pool: pool2,\n })\n : getSimplePoolEstimate({\n tokenIn: tokenMidMeta,\n tokenOut,\n amountIn: estimate1.estimate,\n pool: pool2,\n })),\n\n tokens: [tokenIn, tokenMidMeta, tokenOut],\n inputToken: tokenMidMeta.id,\n outputToken: tokenOut.id,\n status: PoolMode.SMART,\n };\n\n return { actions: [estimate1, estimate2], estimate: estimate2.estimate };\n }\n\n return { actions: [], estimate: '0' };\n}\n\n// simple pools and stable pools for this pair\nexport const estimateSwap = async ({\n tokenIn,\n tokenOut,\n amountIn,\n simplePools,\n options,\n}: SwapParams) => {\n if (tokenIn.id === tokenOut.id) throw SameInputTokenError;\n\n if (ONLY_ZEROS.test(amountIn)) throw ZeroInputError;\n\n const { enableSmartRouting, stablePools, stablePoolsDetail } = options || {};\n\n const parsedAmountIn = toNonDivisibleNumber(tokenIn.decimals, amountIn);\n\n let singleRouteEstimate: EstimateSwapView[] = [];\n\n try {\n const estimate = singlePoolSwap({\n tokenIn,\n tokenOut,\n simplePools,\n amountIn,\n stablePools: stablePoolsDetail,\n });\n\n singleRouteEstimate = [\n {\n ...estimate,\n status: PoolMode.PARALLEL,\n pool: { ...estimate?.pool, partialAmountIn: parsedAmountIn },\n totalInputAmount: toNonDivisibleNumber(tokenIn.decimals, amountIn),\n tokens: [tokenIn, tokenOut],\n },\n ] as EstimateSwapView[];\n if (!enableSmartRouting) {\n return singleRouteEstimate;\n }\n } catch (error) {\n if (!enableSmartRouting) throw error;\n }\n\n const inputPools = simplePools.map(p => poolFormatter(p));\n\n const allTokens = (await getTokensTiny()) as Record<string, TokenMetadata>;\n\n const simplePoolSmartRoutingActions = await stableSmart(\n inputPools,\n tokenIn.id,\n tokenOut.id,\n parsedAmountIn,\n allTokens\n );\n\n const simplePoolSmartRoutingEstimate = getExpectedOutputFromActionsORIG(\n simplePoolSmartRoutingActions,\n tokenOut.id\n ).toString();\n\n const hybridSmartRoutingRes = await getHybridStableSmart(\n tokenIn,\n tokenOut,\n amountIn,\n stablePools || [],\n stablePoolsDetail || [],\n simplePools,\n allTokens\n );\n\n const hybridSmartRoutingEstimate = hybridSmartRoutingRes.estimate.toString();\n\n if (\n new Big(simplePoolSmartRoutingEstimate || '0').gte(\n hybridSmartRoutingEstimate || '0'\n )\n ) {\n if (!simplePoolSmartRoutingActions?.length) throw NoPoolError;\n\n if (\n typeof singleRouteEstimate !== 'undefined' &&\n singleRouteEstimate &&\n singleRouteEstimate?.[0]?.estimate &&\n new Big(singleRouteEstimate[0].estimate || '0').gt(\n simplePoolSmartRoutingEstimate || '0'\n )\n ) {\n return singleRouteEstimate;\n }\n return simplePoolSmartRoutingActions as EstimateSwapView[];\n } else {\n if (\n typeof singleRouteEstimate !== 'undefined' &&\n singleRouteEstimate &&\n singleRouteEstimate?.[0]?.estimate &&\n new Big(singleRouteEstimate[0].estimate || '0').gt(\n hybridSmartRoutingEstimate || '0'\n )\n ) {\n return singleRouteEstimate;\n }\n\n return hybridSmartRoutingRes.actions as EstimateSwapView[];\n }\n};\n","import {\n Pool,\n PoolRPCView,\n StablePool,\n SmartRoutingInputPool,\n Transaction,\n EstimateSwapView,\n} from './types';\nimport {\n FEE_DIVISOR,\n RATED_POOL_LP_TOKEN_DECIMALS,\n STABLE_LP_TOKEN_DECIMALS,\n} from './constant';\n\nimport {\n transactions,\n utils,\n transactions as nearTransactions,\n} from 'near-api-js';\n\nimport _, { sortBy } from 'lodash';\n\nimport BN from 'bn.js';\n\nimport * as math from 'mathjs';\nimport {\n REF_FI_CONTRACT_ID,\n WRAP_NEAR_CONTRACT_ID,\n STORAGE_TO_REGISTER_WITH_MFT,\n} from './constant';\nimport Big from 'big.js';\nimport { TokenMetadata } from './types';\nimport { PoolMode } from './v1-swap/swap';\nimport { getSwappedAmount } from './stable-swap';\nimport { NoFeeToPool } from './error';\nimport { CONSTANT_D, POINTLEFTRANGE, POINTRIGHTRANGE } from './constant';\nimport { DCL_POOL_FEE_LIST } from './dcl-swap/dcl-pool';\nimport { SignAndSendTransactionsParams } from '@near-wallet-selector/core/lib/wallet';\n\nexport const parsePool = (pool: PoolRPCView, id?: number): Pool => ({\n id: Number(typeof id === 'number' ? id : pool.id),\n tokenIds: pool.token_account_ids,\n supplies: pool.amounts.reduce(\n (acc: { [tokenId: string]: string }, amount: string, i: number) => {\n acc[pool.token_account_ids[i]] = amount;\n return acc;\n },\n {}\n ),\n fee: pool.total_fee,\n shareSupply: pool.shares_total_supply,\n tvl: pool.tvl,\n token0_ref_price: pool.token0_ref_price,\n pool_kind: pool.pool_kind,\n});\n\nexport const poolFormatter = (pool: Pool) => {\n return {\n id: pool.id,\n token1Id: pool.tokenIds[0],\n token2Id: pool.tokenIds[1],\n token1Supply: pool.supplies[pool.tokenIds[0]],\n token2Supply: pool.supplies[pool.tokenIds[1]],\n fee: pool.fee,\n shares: pool.shareSupply,\n token0_price: pool.token0_ref_price || '0',\n } as SmartRoutingInputPool;\n};\n\nexport const isStablePoolToken = (\n stablePools: StablePool[],\n tokenId: string | Number\n) => {\n return stablePools\n .map(p => p.token_account_ids)\n .flat()\n .includes(tokenId.toString());\n};\n\nexport const isStablePool = (\n stablePools: StablePool[],\n poolId: string | number\n) => {\n return stablePools.map(p => p.id.toString()).includes(poolId.toString());\n};\n\nexport const getStablePoolDecimal = (stablePool: StablePool) => {\n return stablePool.pool_kind === 'RATED_SWAP' ||\n stablePool.pool_kind === 'DEGEN_SWAP'\n ? RATED_POOL_LP_TOKEN_DECIMALS\n : STABLE_LP_TOKEN_DECIMALS;\n};\n\nexport const round = (decimals: number, minAmountOut: string) => {\n return Number.isInteger(Number(minAmountOut))\n ? minAmountOut\n : Math.ceil(\n Math.round(Number(minAmountOut) * Math.pow(10, decimals)) /\n Math.pow(10, decimals)\n ).toString();\n};\n\nexport const convertToPercentDecimal = (percent: number) => {\n return math.divide(percent, 100);\n};\n\nexport const percentOf = (percent: number, num: number | string) => {\n return math.evaluate(`${convertToPercentDecimal(percent)} * ${num}`);\n};\n\nexport const percentLess = (percent: number, num: number | string) => {\n return math.format(math.evaluate(`${num} - ${percentOf(percent, num)}`), {\n notation: 'fixed',\n });\n};\n\nexport const getGas = (gas: string | undefined) =>\n gas ? new BN(gas) : new BN('100000000000000');\n\nexport const getAmount = (amount: string) =>\n amount ? new BN(utils.format.parseNearAmount(amount) || '0') : new BN('0');\n\nexport const ONLY_ZEROS = /^0*\\.?0*$/;\n\nexport const toReadableNumber = (\n decimals: number,\n number: string = '0'\n): string => {\n if (!decimals) return number;\n\n const wholeStr = number.substring(0, number.length - decimals) || '0';\n const fractionStr = number\n .substring(number.length - decimals)\n .padStart(decimals, '0')\n .substring(0, decimals);\n\n return `${wholeStr}.${fractionStr}`.replace(/\\.?0+$/, '');\n};\n\nexport const toNonDivisibleNumber = (\n decimals: number,\n number: string\n): string => {\n if (decimals === null || decimals === undefined) return number;\n const [wholePart, fracPart = ''] = number.split('.');\n\n return `${wholePart}${fracPart.padEnd(decimals, '0').slice(0, decimals)}`\n .replace(/^0+/, '')\n .padStart(1, '0');\n};\n\nexport const scientificNotationToString = (strParam: string) => {\n let flag = /e/.test(strParam);\n if (!flag || !strParam) return strParam;\n\n let sysbol = true;\n if (/e-/.test(strParam)) {\n sysbol = false;\n }\n\n const negative = Number(strParam) < 0 ? '-' : '';\n\n let index = Number(strParam.match(/\\d+$/)?.[0]);\n\n let basis = strParam.match(/[\\d\\.]+/)?.[0];\n\n if (!index || !basis) return strParam;\n\n const ifFraction = basis.includes('.');\n\n let wholeStr;\n let fractionStr;\n\n if (ifFraction) {\n wholeStr = basis.split('.')[0];\n fractionStr = basis.split('.')[1];\n } else {\n wholeStr = basis;\n fractionStr = '';\n }\n\n if (sysbol) {\n if (!ifFraction) {\n return negative + wholeStr.padEnd(index + wholeStr.length, '0');\n } else {\n if (fractionStr.length <= index) {\n return negative + wholeStr + fractionStr.padEnd(index, '0');\n } else {\n return (\n negative +\n wholeStr +\n fractionStr.substring(0, index) +\n '.' +\n fractionStr.substring(index)\n );\n }\n }\n } else {\n if (!ifFraction)\n return (\n negative +\n wholeStr.padStart(index + wholeStr.length, '0').replace(/^0/, '0.')\n );\n else {\n return (\n negative +\n wholeStr.padStart(index + wholeStr.length, '0').replace(/^0/, '0.') +\n fractionStr\n );\n }\n }\n};\n\nexport const formatWithCommas = (value: string) => {\n const pattern = /(-?\\d+)(\\d{3})/;\n while (pattern.test(value)) {\n value = value.replace(pattern, '$1,$2');\n }\n return value;\n};\n\nexport const toPrecision = (\n number: string,\n precision: number,\n withCommas: boolean = false,\n atLeastOne: boolean = true\n): string => {\n const [whole, decimal = ''] = number.split('.');\n\n let str = `${withCommas ? formatWithCommas(whole) : whole}.${decimal.slice(\n 0,\n precision\n )}`.replace(/\\.$/, '');\n if (atLeastOne && Number(str) === 0 && str.length > 1) {\n var n = str.lastIndexOf('0');\n str = str.slice(0, n) + str.slice(n).replace('0', '1');\n }\n\n return str;\n};\n\nexport const transformTransactions = (\n transactions: Transaction[],\n AccountId: string\n) => {\n const parsedTransactions = transactions.map((t: Transaction) => {\n return {\n signerId: AccountId,\n receiverId: t.receiverId,\n actions: t.functionCalls.map(fc => {\n return {\n type: 'FunctionCall',\n params: {\n methodName: fc.methodName,\n args: fc.args || {},\n gas: getGas(fc.gas)\n .toNumber()\n .toFixed(),\n deposit: utils.format.parseNearAmount(fc.amount || '0')!,\n },\n };\n }),\n };\n });\n\n return parsedTransactions;\n};\n\nexport const WalletSelectorTransactions = (\n transactions: Transaction[],\n AccountId: string\n) => {\n const parsedTransactions = transactions.map((t: Transaction) => {\n return {\n signerId: AccountId,\n receiverId: t.receiverId,\n actions: t.functionCalls.map(fc => {\n return {\n type: 'FunctionCall',\n params: {\n methodName: fc.methodName,\n args: fc.args || {},\n gas: getGas(fc.gas)\n .toNumber()\n .toFixed(),\n deposit: utils.format.parseNearAmount(fc.amount || '0')!,\n },\n };\n }),\n };\n });\n\n return { transactions: parsedTransactions } as SignAndSendTransactionsParams;\n};\n\nexport const separateRoutes = (\n actions: EstimateSwapView[],\n outputToken: string\n) => {\n const res = [];\n let curRoute = [];\n\n for (let i in actions) {\n curRoute.push(actions[i]);\n if (actions[i].outputToken === outputToken) {\n res.push(curRoute);\n curRoute = [];\n }\n }\n\n return res;\n};\n\nexport const calculateExchangeRate = (\n from: string,\n to: string,\n precision?: number\n) => {\n return math\n .floor(math.evaluate(`${to} / ${from}`), precision || 4)\n .toString();\n};\n\nexport const getAvgFee = (\n estimates: EstimateSwapView[],\n outputToken: string,\n parsedAmountIn: string\n) => {\n if (!estimates || estimates.length === 0) {\n return 0;\n }\n\n const routes = separateRoutes(estimates, outputToken);\n\n let fee = new Big(0);\n\n routes.forEach(r => {\n const partialAmountIn = r[0].pool.partialAmountIn || '0';\n\n fee = fee.plus(\n r\n .reduce(\n (acc, cur) => acc.plus(cur.pool.fee || cur.pool.total_fee || 0),\n new Big(0)\n )\n .times(partialAmountIn)\n .div(ONLY_ZEROS.test(parsedAmountIn) ? '1' : parsedAmountIn)\n );\n });\n\n return fee.toNumber();\n};\n\nexport const getAccountName = (AccountId: string) => {\n if (!AccountId) return AccountId;\n\n const [account, network] = AccountId.split('.');\n const niceAccountId = `${account.slice(0, 10)}...${network || ''}`;\n\n return account.length > 10 ? niceAccountId : AccountId;\n};\n\nexport const symbolsArr = ['e', 'E', '+', '-'];\n\nexport const multiply = (factor1: string, factor2: string) => {\n return math.format(math.evaluate(`${factor1} * ${factor2}`), {\n notation: 'fixed',\n });\n};\n\nexport const toInternationalCurrencySystemLongString = (\n labelValue: string,\n percent?: number\n) => {\n return Math.abs(Number(labelValue)) >= 1.0e9\n ? (Math.abs(Number(labelValue)) / 1.0e9).toFixed(percent || 2) + 'B'\n : Math.abs(Number(labelValue)) >= 1.0e6\n ? (Math.abs(Number(labelValue)) / 1.0e6).toFixed(percent || 2) + 'M'\n : Math.abs(Number(labelValue)).toFixed(percent || 2);\n};\n\nexport const percentOfBigNumber = (\n percent: number,\n num: number | string,\n precision: number\n) => {\n const valueBig = math.bignumber(num);\n const percentBig = math.bignumber(percent).div(100);\n\n return toPrecision(\n scientificNotationToString(valueBig.mul(percentBig).toString()),\n precision\n );\n};\n\nexport const toRealSymbol = (symbol: string) => {\n if (!symbol) return '';\n const blackList = ['nUSDO'];\n\n if (symbol === 'nWETH' || symbol === 'WETH') return 'wETH';\n if (blackList.includes(symbol)) return symbol;\n return symbol.charAt(0) === 'n' &&\n symbol.charAt(1) === symbol.charAt(1).toUpperCase()\n ? symbol.substring(1)\n : symbol;\n};\n\nexport const calculateFeeCharge = (fee: number, total: string) => {\n return math.floor(math.evaluate(`(${fee} / ${FEE_DIVISOR}) * ${total}`), 3);\n};\n\nexport const calculateFeePercent = (fee: number) => {\n return math.divide(fee, 100);\n};\n\nexport function getExpectedOutputFromSwapTodos(\n estimates: EstimateSwapView[],\n outputToken: string\n) {\n if (!estimates || estimates.length === 0) return new Big(0);\n\n return estimates\n .filter(item => item.outputToken === outputToken)\n .map(item => new Big(item.estimate || 0))\n .reduce((a, b) => a.plus(b), new Big(0));\n}\n\nexport const calculateAmountReceived = (\n pool: Pool,\n amountIn: string,\n tokenIn: TokenMetadata,\n tokenOut: TokenMetadata\n) => {\n const partialAmountIn = toReadableNumber(tokenIn.decimals, amountIn);\n\n const in_balance = toReadableNumber(\n tokenIn.decimals,\n pool.supplies[tokenIn.id]\n );\n const out_balance = toReadableNumber(\n tokenOut.decimals,\n pool.supplies[tokenOut.id]\n );\n\n const big_in_balance = math.bignumber(in_balance);\n const big_out_balance = math.bignumber(out_balance);\n\n const constant_product = big_in_balance.mul(big_out_balance);\n\n const new_in_balance = big_in_balance.plus(math.bignumber(partialAmountIn));\n\n const new_out_balance = constant_product.div(new_in_balance);\n\n const tokenOutReceived = big_out_balance.minus(new_out_balance);\n\n return tokenOutReceived;\n};\n\nexport const calculateMarketPrice = (\n pool: Pool,\n tokenIn: TokenMetadata,\n tokenOut: TokenMetadata\n) => {\n const cur_in_balance = toReadableNumber(\n tokenIn.decimals,\n pool.supplies[tokenIn.id]\n );\n\n const cur_out_balance = toReadableNumber(\n tokenOut.decimals,\n pool.supplies[tokenOut.id]\n );\n\n return math.evaluate(`(${cur_in_balance} / ${cur_out_balance})`);\n};\n\nexport const calculateSmartRoutingPriceImpact = (\n tokenInAmount: string,\n swapTodos: EstimateSwapView[],\n tokenIn: TokenMetadata,\n tokenMid: TokenMetadata,\n tokenOut: TokenMetadata,\n stablePools: StablePool[]\n) => {\n const isPool1StablePool = isStablePool(stablePools, swapTodos[0].pool.id);\n const isPool2StablePool = isStablePool(stablePools, swapTodos[1].pool.id);\n\n const marketPrice1 = isPool1StablePool\n ? (\n Number(swapTodos[0].pool.rates?.[tokenMid.id]) /\n Number(swapTodos[0].pool.rates?.[tokenIn.id])\n ).toString()\n : calculateMarketPrice(swapTodos[0].pool, tokenIn, tokenMid);\n\n const marketPrice2 = isPool2StablePool\n ? (\n Number(swapTodos[1].pool.rates?.[tokenOut.id]) /\n Number(swapTodos[1].pool.rates?.[tokenMid.id])\n ).toString()\n : calculateMarketPrice(swapTodos[1].pool, tokenMid, tokenOut);\n\n const generalMarketPrice = math.evaluate(`${marketPrice1} * ${marketPrice2}`);\n\n const tokenMidReceived = isPool1StablePool\n ? swapTodos[0].noFeeAmountOut\n : calculateAmountReceived(\n swapTodos[0].pool,\n toNonDivisibleNumber(tokenIn.decimals, tokenInAmount),\n tokenIn,\n tokenMid\n );\n\n const formattedTokenMidReceived = scientificNotationToString(\n tokenMidReceived?.toString() || '0'\n );\n\n let stableOutPool2;\n if (isPool2StablePool) {\n const stablePool2 =\n stablePools.find(p => p.id === swapTodos[1].pool.id) || stablePools[0];\n\n const stableOut = getSwappedAmount(\n tokenMid.id,\n tokenOut.id,\n formattedTokenMidReceived,\n stablePool2,\n getStablePoolDecimal(stablePool2)\n );\n stableOutPool2 =\n stableOut[0] < 0\n ? '0'\n : toPrecision(scientificNotationToString(stableOut[2].toString()), 0);\n stableOutPool2 = toReadableNumber(\n getStablePoolDecimal(stablePool2),\n stableOutPool2\n );\n }\n\n const tokenOutReceived = isPool2StablePool\n ? stableOutPool2\n : calculateAmountReceived(\n swapTodos[1].pool,\n toNonDivisibleNumber(tokenMid.decimals, formattedTokenMidReceived),\n tokenMid,\n tokenOut\n );\n\n const newMarketPrice = math.evaluate(\n `${tokenInAmount} / ${tokenOutReceived}`\n );\n\n const PriceImpact = new Big(newMarketPrice)\n .minus(new Big(generalMarketPrice))\n .div(newMarketPrice)\n .times(100)\n .toString();\n\n return scientificNotationToString(PriceImpact);\n};\nexport const percent = (numerator: string, denominator: string) => {\n return math.evaluate(`(${numerator} / ${denominator}) * 100`);\n};\nexport const calcStableSwapPriceImpact = (\n from: string,\n to: string,\n marketPrice: string = '1'\n) => {\n const newMarketPrice = math.evaluate(`${from} / ${to}`);\n\n return math.format(\n percent(\n math.evaluate(`${newMarketPrice} - ${marketPrice}`),\n newMarketPrice\n ),\n {\n notation: 'fixed',\n }\n );\n};\n\nexport const calculatePriceImpact = (\n pools: Pool[],\n tokenIn: TokenMetadata,\n tokenOut: TokenMetadata,\n tokenInAmount: string\n) => {\n let in_balance: string = '0',\n out_balance: string = '0';\n\n pools.forEach((pool, i) => {\n const cur_in_balance = toReadableNumber(\n tokenIn.decimals,\n pool.supplies[tokenIn.id]\n );\n\n const cur_out_balance = toReadableNumber(\n tokenOut.decimals,\n pool.supplies[tokenOut.id]\n );\n\n in_balance = new Big(in_balance).plus(cur_in_balance).toString();\n out_balance = new Big(out_balance).plus(cur_out_balance).toString();\n });\n\n const finalMarketPrice = math.evaluate(`(${in_balance} / ${out_balance})`);\n\n const separatedReceivedAmount = pools.map(pool => {\n return calculateAmountReceived(\n pool,\n pool.partialAmountIn || '0',\n tokenIn,\n tokenOut\n );\n });\n\n const finalTokenOutReceived = math.sum(...separatedReceivedAmount);\n\n const newMarketPrice = math.evaluate(\n `${tokenInAmount} / ${finalTokenOutReceived}`\n );\n\n const PriceImpact = new Big(newMarketPrice)\n .minus(new Big(finalMarketPrice))\n .div(newMarketPrice)\n .times(100)\n .toString();\n\n return scientificNotationToString(PriceImpact);\n};\n\nexport function calculateSmartRoutesV2PriceImpact(\n actions: any,\n outputToken: string,\n tokenInPara: TokenMetadata,\n stablePools: StablePool[]\n) {\n const routes = separateRoutes(actions, outputToken);\n\n const tokenIn = routes[0][0].tokens?.[0] || tokenInPara;\n\n const totalInputAmount = routes[0][0].totalInputAmount;\n\n const priceImpactForRoutes = routes.map((r, i) => {\n const readablePartialAmountIn = toReadableNumber(\n tokenIn.decimals,\n r[0].pool.partialAmountIn\n );\n\n if (r.length > 1) {\n const tokenIn = r[0].tokens?.[0];\n const tokenMid = r[0].tokens?.[1];\n const tokenOut = r[0].tokens?.[2];\n\n return calculateSmartRoutingPriceImpact(\n readablePartialAmountIn,\n routes[i],\n tokenIn || tokenInPara,\n tokenMid || tokenInPara,\n tokenOut || tokenInPara,\n stablePools\n );\n } else {\n return isStablePool(stablePools, r[0].pool.id)\n ? calcStableSwapPriceImpact(\n readablePartialAmountIn,\n r[0].noFeeAmountOut || '0',\n (\n Number(r[0].pool.rates?.[outputToken]) /\n Number(r[0].pool.rates?.[tokenIn.id])\n ).toString()\n )\n : calculatePriceImpact(\n [r[0].pool],\n r[0].tokens?.[0] || tokenIn,\n r[0].tokens?.[1] || tokenIn,\n readablePartialAmountIn\n );\n }\n });\n\n const rawRes = priceImpactForRoutes.reduce(\n (pre, cur, i) => {\n return pre.plus(\n new Big(routes[i][0].pool.partialAmountIn || '0')\n .div(new Big(totalInputAmount || '1'))\n .mul(cur)\n );\n },\n\n new Big(0)\n );\n\n return scientificNotationToString(rawRes.toString());\n}\n\nexport const getPriceImpact = ({\n estimates,\n tokenIn,\n tokenOut,\n amountIn,\n amountOut,\n stablePools,\n}: {\n estimates: EstimateSwapView[];\n tokenIn: TokenMetadata;\n tokenOut: TokenMetadata;\n amountIn: string;\n amountOut: string;\n stablePools: StablePool[];\n}) => {\n let PriceImpactValue: string = '0';\n let priceImpactValueSmartRouting: string = '0';\n let priceImpactValueSmartRoutingV2: string = '0';\n\n if (typeof estimates === 'undefined') return '0';\n\n try {\n if (estimates?.length === 2 && estimates[0].status === PoolMode.SMART) {\n priceImpactValueSmartRouting = calculateSmartRoutingPriceImpact(\n amountIn,\n estimates,\n tokenIn,\n estimates[0].tokens?.[1] || tokenIn,\n tokenOut,\n stablePools\n );\n } else if (\n estimates?.length === 1 &&\n estimates[0].status === PoolMode.STABLE\n ) {\n priceImpactValueSmartRouting = calcStableSwapPriceImpact(\n toReadableNumber(tokenIn.decimals, estimates[0].totalInputAmount),\n estimates[0].noFeeAmountOut || '0',\n (\n Number(estimates[0].pool.rates?.[tokenOut.id]) /\n Number(estimates[0].pool.rates?.[tokenIn.id])\n ).toString()\n );\n } else priceImpactValueSmartRouting = '0';\n } catch (error) {\n priceImpactValueSmartRouting = '0';\n }\n\n try {\n priceImpactValueSmartRoutingV2 = calculateSmartRoutesV2PriceImpact(\n estimates,\n tokenOut.id,\n tokenIn,\n stablePools\n );\n } catch (error) {\n priceImpactValueSmartRoutingV2 = '0';\n }\n\n try {\n if (\n estimates[0].status === PoolMode.SMART ||\n estimates[0].status === PoolMode.STABLE\n ) {\n PriceImpactValue = priceImpactValueSmartRouting;\n } else {\n PriceImpactValue = priceImpactValueSmartRoutingV2;\n }\n\n return PriceImpactValue;\n } catch (error) {\n return '0';\n }\n};\n\nexport const subtraction = (initialValue: string, toBeSubtract: string) => {\n return math.format(math.evaluate(`${initialValue} - ${toBeSubtract}`), {\n notation: 'fixed',\n });\n};\n\nexport function getPoolAllocationPercents(pools: Pool[]) {\n if (pools.length === 1) return ['100'];\n\n if (pools) {\n const partialAmounts = pools.map(pool => {\n return math.bignumber(pool.partialAmountIn);\n });\n\n const ps: string[] = new Array(partialAmounts.length).fill('0');\n\n const sum =\n partialAmounts.length === 1\n ? partialAmounts[0]\n : math.sum(...partialAmounts);\n\n const sortedAmount = sortBy(partialAmounts, p => Number(p));\n\n let minIndexes: number[] = [];\n\n for (let k = 0; k < sortedAmount.length - 1; k++) {\n let minIndex = -1;\n\n for (let j = 0; j < partialAmounts.length; j++) {\n if (partialAmounts[j].eq(sortedAmount[k]) && !minIndexes.includes(j)) {\n minIndex = j;\n minIndexes.push(j);\n break;\n }\n }\n const res = math\n .round(percent(partialAmounts[minIndex].toString(), sum))\n .toString();\n\n if (Number(res) === 0) {\n ps[minIndex] = '1';\n } else {\n ps[minIndex] = res;\n }\n }\n\n const finalPIndex = ps.indexOf('0');\n\n ps[finalPIndex] = subtraction(\n '100',\n ps.length === 1 ? Number(ps[0]) : math.sum(...ps.map(p => Number(p)))\n ).toString();\n\n return ps;\n } else {\n return [];\n }\n}\n\nexport const isMobile = (): boolean => {\n return window.screen.width <= 600;\n};\nexport function divide(numerator: string, denominator: string) {\n return math.format(math.evaluate(`${numerator} / ${denominator}`), {\n notation: 'fixed',\n });\n}\n\nexport const getMax = function(\n id: string,\n amount: string,\n minNearAmountLeftForGasFees: number\n) {\n return id !== WRAP_NEAR_CONTRACT_ID\n ? amount\n : Number(amount) <= minNearAmountLeftForGasFees\n ? '0'\n : String(Number(amount) - minNearAmountLeftForGasFees);\n};\n\nexport const isValidSlippageTolerance = (value: number) => {\n return value > 0 && value < 100;\n};\n\nexport function getPointByPrice(\n pointDelta: number,\n price: string,\n decimalRate: number,\n noNeedSlot?: boolean\n) {\n const point = Math.log(+price * decimalRate) / Math.log(CONSTANT_D);\n const point_int = Math.round(point);\n let point_int_slot = point_int;\n if (!noNeedSlot) {\n point_int_slot = Math.floor(point_int / pointDelta) * pointDelta;\n }\n if (point_int_slot < POINTLEFTRANGE) {\n return POINTLEFTRANGE;\n } else if (point_int_slot > POINTRIGHTRANGE) {\n return 800000;\n }\n return point_int_slot;\n}\nexport const feeToPointDelta = (fee: number) => {\n switch (fee) {\n case 100:\n return 1;\n case 400:\n return 8;\n case 2000:\n return 40;\n case 10000:\n return 200;\n default:\n throw NoFeeToPool(fee);\n }\n};\n\nexport const priceToPoint = ({\n tokenA,\n tokenB,\n amountA,\n amountB,\n fee,\n}: {\n tokenA: TokenMetadata;\n tokenB: TokenMetadata;\n amountA: string;\n amountB: string;\n fee: number;\n}) => {\n if (DCL_POOL_FEE_LIST.indexOf(fee) === -1) throw NoFeeToPool(fee);\n\n const decimal_price_A_by_B = new Big(amountB).div(amountA);\n const undecimal_price_A_by_B = decimal_price_A_by_B\n .times(new Big(10).pow(tokenB.decimals))\n .div(new Big(10).pow(tokenA.decimals));\n\n const pointDelta = feeToPointDelta(fee);\n\n const price = decimal_price_A_by_B;\n\n const decimalRate = new Big(10)\n .pow(tokenB.decimals)\n .div(new Big(10).pow(tokenA.decimals))\n .toNumber();\n\n return getPointByPrice(\n pointDelta,\n scientificNotationToString(price.toString()),\n decimalRate\n );\n};\n\nexport const pointToPrice = ({\n tokenA,\n tokenB,\n point,\n}: {\n tokenA: TokenMetadata;\n tokenB: TokenMetadata;\n point: number;\n}) => {\n const undecimal_price = Math.pow(CONSTANT_D, point);\n const decimal_price_A_by_B = new Big(undecimal_price)\n .times(new Big(10).pow(tokenA.decimals))\n .div(new Big(10).pow(tokenB.decimals));\n\n return scientificNotationToString(decimal_price_A_by_B.toString());\n};\n\nexport const registerAccountOnToken = (AccountId: string) => {\n return {\n methodName: 'storage_deposit',\n args: {\n registration_only: true,\n account_id: AccountId,\n },\n gas: '30000000000000',\n amount: STORAGE_TO_REGISTER_WITH_MFT,\n };\n};\n","import { TokenMetadata, EstimateSwapView, Transaction } from '../types';\nimport { ftGetStorageBalance, getMinStorageBalance } from '../ref';\nimport {\n STORAGE_TO_REGISTER_WITH_MFT,\n REF_FI_CONTRACT_ID,\n ONE_YOCTO_NEAR,\n} from '../constant';\nimport { round, percentLess } from '../utils';\nimport { toNonDivisibleNumber } from '../utils';\nimport { config } from '../constant';\nimport { SwapRouteError } from '../error';\nimport { formatNearAmount } from 'near-api-js/lib/utils/format';\n\nexport const instantSwap = async ({\n tokenIn,\n tokenOut,\n amountIn,\n slippageTolerance,\n swapTodos,\n AccountId,\n referralId,\n}: {\n tokenIn: TokenMetadata;\n tokenOut: TokenMetadata;\n amountIn: string;\n slippageTolerance: number;\n swapTodos: EstimateSwapView[];\n AccountId: string;\n referralId?: string;\n}) => {\n const transactions: Transaction[] = [];\n\n if (swapTodos?.[swapTodos?.length - 1]?.outputToken !== tokenOut.id)\n throw SwapRouteError;\n\n const registerToken = async (token: TokenMetadata) => {\n const tokenRegistered = await ftGetStorageBalance(\n token.id,\n AccountId\n ).catch(() => {\n throw new Error(`${token.id} doesn't exist.`);\n });\n\n if (tokenRegistered === null) {\n transactions.push({\n receiverId: token.id,\n functionCalls: [\n {\n methodName: 'storage_deposit',\n args: {\n registration_only: true,\n account_id: AccountId,\n },\n gas: '30000000000000',\n amount: formatNearAmount(await getMinStorageBalance(token.id), 24),\n },\n ],\n });\n }\n };\n\n await registerToken(tokenOut);\n let actionsList: any = [];\n let allSwapsTokens = swapTodos.map(s => [s.inputToken, s.outputToken]); // to get the hop tokens\n for (let i in allSwapsTokens) {\n let swapTokens = allSwapsTokens[i];\n if (swapTokens[0] === tokenIn.id && swapTokens[1] === tokenOut.id) {\n // parallel, direct hop route.\n actionsList.push({\n pool_id: swapTodos[i].pool.id,\n token_in: tokenIn.id,\n token_out: tokenOut.id,\n amount_in: swapTodos[i].pool.partialAmountIn,\n min_amount_out: round(\n tokenOut.decimals,\n toNonDivisibleNumber(\n tokenOut.decimals,\n percentLess(slippageTolerance, swapTodos[i].estimate)\n )\n ),\n });\n } else if (swapTokens[0] === tokenIn.id) {\n // first hop in double hop route\n //TODO -- put in a check to make sure this first hop matches with the next (i+1) hop as a second hop.\n actionsList.push({\n pool_id: swapTodos[i].pool.id,\n token_in: swapTokens[0],\n token_out: swapTokens[1],\n amount_in: swapTodos[i].pool.partialAmountIn,\n min_amount_out: '0',\n });\n } else {\n // second hop in double hop route.\n //TODO -- put in a check to make sure this second hop matches with the previous (i-1) hop as a first hop.\n actionsList.push({\n pool_id: swapTodos[i].pool.id,\n token_in: swapTokens[0],\n token_out: swapTokens[1],\n min_amount_out: round(\n tokenOut.decimals,\n toNonDivisibleNumber(\n tokenOut.decimals,\n percentLess(slippageTolerance, swapTodos[i].estimate)\n )\n ),\n });\n }\n }\n\n transactions.push({\n receiverId: tokenIn.id,\n functionCalls: [\n {\n methodName: 'ft_transfer_call',\n args: {\n receiver_id: REF_FI_CONTRACT_ID,\n amount: toNonDivisibleNumber(tokenIn.decimals, amountIn),\n msg: !!referralId\n ? JSON.stringify({\n force: 0,\n actions: actionsList,\n referral_id: referralId,\n })\n : JSON.stringify({\n force: 0,\n actions: actionsList,\n }),\n },\n gas: '300000000000000',\n amount: ONE_YOCTO_NEAR,\n },\n ],\n });\n\n return transactions;\n};\n","import { getTotalPools, refFiViewFunction } from '../ref';\nimport { Pool, PoolRPCView } from '../types';\nimport { parsePool, toNonDivisibleNumber } from '../utils';\nimport { STABLE_LP_TOKEN_DECIMALS, config } from '../constant';\n\nlet DEFAULT_PAGE_LIMIT = 100;\nconst BLACK_TOKEN_LIST = ['meta-token.near'];\n\nexport const getRatedPoolDetail = async ({ id }: { id: string | number }) => {\n return refFiViewFunction({\n methodName: 'get_rated_pool',\n args: { pool_id: Number(id) },\n })\n .then(pool_info => ({\n ...pool_info,\n id: Number(id),\n pool_kind: 'RATED_SWAP',\n }))\n .catch(() => {});\n};\n\nexport const getUnRatedPoolDetail = async ({ id }: { id: string | number }) => {\n return refFiViewFunction({\n methodName: 'get_stable_pool',\n args: { pool_id: Number(id) },\n })\n .then(pool_info => ({\n ...pool_info,\n id: Number(id),\n pool_kind: 'STABLE_SWAP',\n rates: pool_info.c_amounts.map((_: any) =>\n toNonDivisibleNumber(STABLE_LP_TOKEN_DECIMALS, '1')\n ),\n }))\n .catch(() => {});\n};\nexport const getDegenPoolDetail = async ({ id }: { id: string | number }) => {\n return refFiViewFunction({\n methodName: 'get_degen_pool',\n args: { pool_id: Number(id) },\n })\n .then(pool_info => ({\n ...pool_info,\n id: Number(id),\n pool_kind: 'DEGEN_SWAP',\n rates: pool_info.c_amounts.map((i: any) =>\n toNonDivisibleNumber(STABLE_LP_TOKEN_DECIMALS, '1')\n ),\n }))\n .catch(() => {});\n};\n\nexport const getStablePools = async (stablePools: Pool[]) => {\n const res: any[] = await Promise.allSettled(\n stablePools.map(pool =>\n pool.pool_kind === 'RATED_SWAP'\n ? getRatedPoolDetail({ id: pool.id })\n : pool.pool_kind === 'DEGEN_SWAP'\n ? getDegenPoolDetail({ id: pool.id })\n : pool.pool_kind === 'STABLE_SWAP'\n ? getUnRatedPoolDetail({ id: pool.id })\n : getPool(pool.id)\n )\n );\n return res.reduce((acc, cur) => {\n if (cur.status === 'fulfilled' && cur.value) {\n return [...(acc || []), cur.value];\n }\n return acc;\n }, []);\n};\n\nexport const getPool = async (id: number): Promise<Pool> => {\n return await refFiViewFunction({\n methodName: 'get_pool',\n args: { pool_id: id },\n })\n .then((pool: PoolRPCView) => parsePool(pool, id))\n .catch();\n};\n\nexport const getPoolByIds = async (ids: number[]): Promise<Pool[]> => {\n return await refFiViewFunction({\n methodName: 'get_pool_by_ids',\n args: { pool_ids: ids },\n }).then((pools: PoolRPCView[]) => pools.map((p, i) => parsePool(p, ids[i])));\n};\n\nexport const getRefPools = async (\n page: number = 1,\n perPage: number = DEFAULT_PAGE_LIMIT\n): Promise<Pool[]> => {\n const index = (page - 1) * perPage;\n const poolData: PoolRPCView[] = await refFiViewFunction({\n methodName: 'get_pools',\n args: { from_index: index, limit: perPage },\n });\n return poolData\n .map((rawPool, i) => parsePool(rawPool, i + index))\n .filter(\n p => !p.tokenIds?.find(tokenId => BLACK_TOKEN_LIST.includes(tokenId))\n );\n};\n\nexport const fetchAllPools = async (perPage?: number) => {\n try {\n const pools = await fetch(`${config.indexerUrl}/fetchAllPools`).then(res =>\n res.json()\n );\n if (!pools.simplePools) throw Error();\n return pools;\n } catch (error) {}\n if (perPage) {\n DEFAULT_PAGE_LIMIT = Math.min(perPage, 500);\n }\n const totalPools = await getTotalPools();\n const pages = Math.ceil(totalPools / DEFAULT_PAGE_LIMIT);\n const pools = (\n await Promise.all(\n [...Array(pages)].fill(0).map((_, i) => getRefPools(i + 1))\n )\n ).flat() as Pool[];\n return {\n simplePools: pools.filter(\n p => p.pool_kind && p.pool_kind === 'SIMPLE_POOL'\n ),\n unRatedPools: pools.filter(\n p => p.pool_kind && p.pool_kind === 'STABLE_SWAP'\n ),\n ratedPools: pools.filter(p => p.pool_kind && p.pool_kind === 'RATED_SWAP'),\n };\n};\n","import React, {\n useEffect,\n useState,\n useContext,\n createContext,\n ReactNode,\n useMemo,\n useCallback,\n} from 'react';\nimport {\n ftGetBalance,\n ftGetTokenMetadata,\n getGlobalWhitelist,\n nearDepositTransaction,\n nearWithdrawTransaction,\n REPLACE_TOKENS,\n} from '../ref';\nimport {\n EstimateSwapView,\n Pool,\n StablePool,\n TokenMetadata,\n Transaction,\n} from '../types';\nimport { fetchAllPools, getStablePools } from '../v1-swap/pool';\nimport { estimateSwap, SwapOptions, SwapParams } from '../v1-swap/swap';\nimport { ftGetStorageBalance, getMinStorageBalance } from '../ref';\nimport { SwapOutParams } from './types';\nimport {\n percentLess,\n separateRoutes,\n toNonDivisibleNumber,\n calculateExchangeRate,\n getAvgFee,\n} from '../utils';\nimport Big from 'big.js';\nimport { instantSwap } from '../v1-swap/instantSwap';\n\nimport { getExpectedOutputFromActionsORIG } from '../v1-swap/smartRoutingLogic.js';\nimport { Theme } from './constant';\nimport { defaultTheme } from './constant';\nimport {\n getTokenPriceList,\n getTokens,\n getWhiteListTokensIndexer,\n} from '../indexer';\nimport {\n toReadableNumber,\n ONLY_ZEROS,\n getExpectedOutputFromSwapTodos,\n} from '../utils';\nimport { getUserRegisteredTokens } from '../ref';\nimport { WRAP_NEAR_CONTRACT_ID, NEAR_META_DATA } from '../constant';\nimport { scientificNotationToString } from '../utils';\nimport metaIconDefaults from '../metaIcons';\nimport {\n formatNearAmount,\n parseNearAmount,\n} from 'near-api-js/lib/utils/format';\n\nexport const ThemeContext = createContext<Theme>(defaultTheme);\n\nexport const ThemeContextProvider: React.FC<{\n customTheme: Theme | undefined;\n}> = ({ customTheme, children }) => {\n const [theme, setTheme] = useState<Theme>(customTheme || defaultTheme);\n\n useEffect(() => {\n if (!customTheme) return;\n setTheme(customTheme);\n }, [customTheme]);\n\n return (\n <ThemeContext.Provider value={theme}>{children}</ThemeContext.Provider>\n );\n};\n\nexport const estimateValidator = (\n swapTodos: EstimateSwapView[],\n tokenIn: TokenMetadata,\n parsedAmountIn: string,\n tokenOut: TokenMetadata\n) => {\n const tokenInId = swapTodos[0]?.inputToken;\n const tokenOutId = swapTodos[swapTodos.length - 1]?.outputToken;\n\n const totalPartialAmountIn =\n swapTodos.length === 0\n ? new Big(swapTodos[0].pool.partialAmountIn || 0)\n : swapTodos.reduce(\n (acc, cur, i) => acc.plus(cur.pool.partialAmountIn || 0),\n new Big(0)\n );\n\n if (\n tokenInId !== tokenIn.id ||\n tokenOutId !== tokenOut.id ||\n !totalPartialAmountIn.eq(parsedAmountIn || '0')\n ) {\n return false;\n }\n return true;\n};\n\nexport const useAllTokens = ({ reload }: { reload?: boolean }) => {\n const [tokens, setTokens] = useState<Record<string, TokenMetadata>>();\n const [tokensLoading, setTokensLoading] = useState<boolean>(true);\n\n useEffect(() => {\n const fetchTokens = async () => {\n const tokens = await getTokens(reload);\n setTokens(tokens);\n setTokensLoading(false);\n };\n fetchTokens();\n }, [reload]);\n\n return { tokens, tokensLoading };\n};\n\nexport const useTokensIndexer = ({\n defaultTokenList,\n AccountId,\n}: {\n defaultTokenList?: TokenMetadata[];\n AccountId?: string;\n}) => {\n const [tokens, setTokens] = useState<TokenMetadata[]>([]);\n\n const [tokenLoading, setTokenLoading] = useState<boolean>(false);\n\n useEffect(() => {\n setTokenLoading(true);\n\n const getTokensList = async () => {\n const whiteList = await getGlobalWhitelist();\n const globalWhiteListTokens = (\n await getWhiteListTokensIndexer(whiteList)\n ).filter(token => !!token) as TokenMetadata[];\n\n const parsedTokens = globalWhiteListTokens.map(t => {\n return t.id === WRAP_NEAR_CONTRACT_ID\n ? {\n ...NEAR_META_DATA,\n id: t.id,\n }\n : t;\n });\n\n if (!defaultTokenList || defaultTokenList.length === 0) {\n setTokens(parsedTokens);\n setTokenLoading(false);\n } else {\n const newList = defaultTokenList\n .map(t => {\n return t.id === WRAP_NEAR_CONTRACT_ID\n ? {\n ...NEAR_META_DATA,\n id: t.id,\n }\n : t;\n })\n .filter(t => {\n return parsedTokens.findIndex(p => p.id === t.id) !== -1;\n });\n setTokens(\n newList.map(t =>\n !t.icon || REPLACE_TOKENS.includes(t.id)\n ? {\n ...t,\n icon: metaIconDefaults[t.id],\n }\n : t\n )\n );\n setTokenLoading(false);\n }\n };\n\n getTokensList();\n }, [AccountId, defaultTokenList]);\n\n return { tokens, tokenLoading };\n};\n\nexport const useRefPools = (refreshTrigger: boolean) => {\n const [allPools, setAllPools] = useState<{\n simplePools: Pool[];\n ratedPools: Pool[];\n unRatedPools: Pool[];\n }>({\n simplePools: [],\n ratedPools: [],\n unRatedPools: [],\n });\n\n const [poolFetchingState, setPoolFetchingState] = useState<'loading' | 'end'>(\n 'loading'\n );\n\n const [allStablePools, setAllStablePools] = useState<StablePool[]>([]);\n\n useEffect(() => {\n setPoolFetchingState('loading');\n\n fetchAllPools()\n .then(allPools => {\n setAllPools(allPools);\n\n return allPools;\n })\n .then(allPools => {\n const pools: Pool[] = allPools.unRatedPools.concat(allPools.ratedPools);\n\n return getStablePools(pools).then(setAllStablePools);\n })\n .finally(() => {\n setPoolFetchingState('end');\n });\n }, [refreshTrigger]);\n\n return {\n allPools,\n allStablePools,\n poolFetchingState,\n };\n};\n\nexport const useSwap = (\n params: {\n tokenIn?: TokenMetadata;\n tokenOut?: TokenMetadata;\n amountIn: string;\n simplePools: Pool[];\n options?: SwapOptions;\n } & {\n slippageTolerance: number;\n refreshTrigger: boolean;\n onSwap: (transactionsRef: Transaction[]) => Promise<void>;\n AccountId?: string;\n poolFetchingState?: 'loading' | 'end';\n referralId?: string;\n tokens: TokenMetadata[];\n }\n): SwapOutParams => {\n const {\n slippageTolerance,\n refreshTrigger,\n onSwap,\n AccountId,\n poolFetchingState,\n referralId,\n tokens,\n } = params;\n\n const { tokenIn, tokenOut, amountIn } = params;\n\n const [estimates, setEstimates] = useState<EstimateSwapView[]>([]);\n\n const [canSwap, setCanSwap] = useState(false);\n\n const [swapError, setSwapError] = useState<Error | null>(null);\n\n const [amountOut, setAmountOut] = useState<string>('');\n\n const [isEstimating, setIsEstimating] = useState<boolean>(false);\n\n const [forceEstimate, setForceEstimate] = useState<boolean>(false);\n\n const { balances, updateTokenBalance } = useTokenBalances(tokens, AccountId);\n\n const tokenInBalance = useMemo(() => balances[tokenIn?.id!], [\n tokenIn,\n balances,\n ]);\n\n const tokenOutBalance = useMemo(() => balances[tokenOut?.id!] || '', [\n tokenOut,\n balances,\n ]);\n\n const minAmountOut = amountOut\n ? percentLess(slippageTolerance, amountOut)\n : '';\n\n const fee =\n !params.tokenOut || !params.tokenIn\n ? 0\n : getAvgFee(\n estimates,\n params.tokenOut.id,\n toNonDivisibleNumber(params.tokenIn.decimals, params.amountIn)\n );\n\n const rate = calculateExchangeRate(\n ONLY_ZEROS.test(params.amountIn) ? '1' : params.amountIn,\n amountOut || '1'\n );\n\n const makeSwap = async () => {\n if (!params.tokenIn || !params.tokenOut || !AccountId) return;\n\n const transactionsRef = await instantSwap({\n tokenIn: params.tokenIn,\n tokenOut: params.tokenOut,\n amountIn: params.amountIn,\n swapTodos: estimates,\n slippageTolerance,\n AccountId: AccountId,\n referralId,\n });\n if (tokenIn && tokenIn.id === WRAP_NEAR_CONTRACT_ID) {\n const tokenRegistered = await ftGetStorageBalance(tokenIn.id, AccountId);\n\n let nearDepositAmount = amountIn;\n if (tokenRegistered === null) {\n const minStorageBalance = await getMinStorageBalance(tokenIn.id);\n nearDepositAmount = formatNearAmount(\n String(\n BigInt(parseNearAmount(nearDepositAmount)!) +\n BigInt(minStorageBalance)\n )\n );\n }\n\n transactionsRef.splice(-1, 0, nearDepositTransaction(nearDepositAmount));\n }\n if (tokenOut && tokenOut.id === WRAP_NEAR_CONTRACT_ID) {\n let outEstimate = new Big(0);\n const routes = separateRoutes(estimates, tokenOut.id);\n\n const bigEstimate = routes.reduce((acc, cur) => {\n const curEstimate = cur[cur.length - 1].estimate;\n return acc.plus(curEstimate);\n }, outEstimate);\n\n const minAmountOut = percentLess(\n slippageTolerance,\n\n scientificNotationToString(bigEstimate.toString())\n );\n\n transactionsRef.push(nearWithdrawTransaction(minAmountOut));\n }\n\n await onSwap(transactionsRef);\n\n setTimeout(() => {\n const tokensToUpdate = [];\n if (tokenIn) tokensToUpdate.push(tokenIn.id);\n if (tokenOut) tokensToUpdate.push(tokenOut.id);\n if (tokensToUpdate.length > 0 && AccountId)\n updateTokenBalance(tokensToUpdate, AccountId);\n }, 3000);\n };\n\n const getEstimate = () => {\n if (\n !params.tokenIn ||\n !params.tokenOut ||\n poolFetchingState === 'loading'\n ) {\n setCanSwap(false);\n return;\n }\n setCanSwap(false);\n\n if (\n ONLY_ZEROS.test(params.amountIn) ||\n !params.tokenOut ||\n !params.tokenIn\n ) {\n setAmountOut('');\n setEstimates([]);\n return;\n }\n\n setSwapError(null);\n setIsEstimating(true);\n estimateSwap({\n tokenIn: params.tokenIn,\n tokenOut: params.tokenOut,\n amountIn: params.amountIn,\n simplePools: params.simplePools,\n options: params.options,\n })\n .then(estimates => {\n if (\n ONLY_ZEROS.test(params.amountIn) ||\n !params.tokenOut ||\n !params.tokenIn\n ) {\n setAmountOut('');\n return;\n }\n setSwapError(null);\n\n const expectAmountOut = getExpectedOutputFromSwapTodos(\n estimates,\n params.tokenOut.id\n ).toString();\n\n setAmountOut(expectAmountOut);\n\n setEstimates(estimates);\n setCanSwap(true);\n })\n .catch(e => {\n setSwapError(e);\n setCanSwap(false);\n setAmountOut('');\n })\n .finally(() => {\n setIsEstimating(false);\n setForceEstimate(false);\n });\n };\n\n useEffect(() => {\n const estimateValidationPass =\n estimates.length > 0 &&\n params.tokenIn &&\n params.tokenOut &&\n estimateValidator(\n estimates,\n params.tokenIn,\n toNonDivisibleNumber(params.tokenIn.decimals, params.amountIn),\n params.tokenOut\n );\n\n if (isEstimating && estimates && !forceEstimate) return;\n if ((estimateValidationPass || swapError) && !forceEstimate) return;\n getEstimate();\n }, [\n params.amountIn,\n params.tokenIn?.id,\n params.tokenOut?.id,\n refreshTrigger,\n poolFetchingState,\n isEstimating,\n forceEstimate,\n ]);\n\n useEffect(() => {\n // setEstimating(false);\n\n setForceEstimate(true);\n }, [\n params.tokenIn?.id,\n params.tokenOut?.id,\n params.options?.enableSmartRouting,\n ]);\n\n return {\n amountOut,\n minAmountOut,\n balances,\n tokenInBalance,\n tokenOutBalance,\n fee,\n rate,\n estimates,\n makeSwap,\n canSwap,\n swapError,\n setAmountOut,\n isEstimating,\n };\n};\n\nexport const TokenPriceContext = createContext<Record<string, any> | null>(\n null\n);\n\nexport const useTokenPriceList = () => {\n const [tokenPriceList, setTokenPriceList] = useState<Record<string, any>>({});\n\n useEffect(() => {\n getTokenPriceList().then(setTokenPriceList);\n }, []);\n\n return tokenPriceList;\n};\n\nexport const TokenPriceContextProvider: React.FC = ({ children }) => {\n const tokenPriceList = useTokenPriceList();\n\n return (\n <TokenPriceContext.Provider value={tokenPriceList}>\n {children}\n </TokenPriceContext.Provider>\n );\n};\n\ntype BalancesMap = Record<string, string>;\n\nexport const useTokenBalances = (\n tokens: TokenMetadata[],\n AccountId?: string\n) => {\n const [balances, setBalances] = useState<BalancesMap>({});\n\n const updateTokenBalance = useCallback(\n async (tokenIds: string[], AccountId: string) => {\n const updatedTokensBalancesMap: BalancesMap = {};\n await Promise.all(\n tokenIds.map(async tokenId => {\n updatedTokensBalancesMap[tokenId] = toReadableNumber(\n tokens.find(t => t.id === tokenId)?.decimals || 0,\n await ftGetBalance(\n tokenId === WRAP_NEAR_CONTRACT_ID ? 'NEAR' : tokenId,\n AccountId\n )\n );\n })\n );\n setBalances(prevState => ({ ...prevState, ...updatedTokensBalancesMap }));\n },\n [tokens]\n );\n\n useEffect(() => {\n // Initializes token balances\n // Called in 15 seconds intervals\n const initTokenBalances = async () => {\n if (!AccountId) {\n setBalances({});\n return;\n }\n\n const validTokens = tokens.filter(t => !!t?.id);\n const ids = validTokens.map(token => token.id);\n\n updateTokenBalance(ids, AccountId);\n };\n\n initTokenBalances();\n const interval = setInterval(initTokenBalances, 15_000);\n return () => clearInterval(interval);\n }, [AccountId, tokens.map(t => t?.id).join('-')]);\n\n return { balances, updateTokenBalance };\n};\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import React, { useState, useEffect, useContext, useRef, useMemo } from 'react';\nimport { TokenMetadata, EstimateSwapView, Pool } from '../types';\nimport {\n ThemeContext,\n useTokenPriceList,\n TokenPriceContext,\n useTokenBalances,\n} from './state';\n\nimport { FiChevronDown } from '@react-icons/all-files/fi/FiChevronDown';\n\nimport { FiChevronLeft } from '@react-icons/all-files/fi/FiChevronLeft';\n\nimport { FiChevronUp } from '@react-icons/all-files/fi/FiChevronUp';\n\nimport { FaSearch } from '@react-icons/all-files/fa/FaSearch';\n\nimport { RiRefreshLine } from '@react-icons/all-files/ri/RiRefreshLine';\n\nimport { TiArrowSortedUp } from '@react-icons/all-files/ti/TiArrowSortedUp';\n\nimport { TiArrowSortedDown } from '@react-icons/all-files/ti/TiArrowSortedDown';\n\nimport { HiOutlineExternalLink } from '@react-icons/all-files/hi/HiOutlineExternalLink';\n\nimport { AiFillPushpin } from '@react-icons/all-files/ai/AiFillPushpin';\n\nimport { AiOutlinePushpin } from '@react-icons/all-files/ai/AiOutlinePushpin';\n\nimport { RiExchangeFill } from '@react-icons/all-files/ri/RiExchangeFill';\n\nimport { IoWarning } from '@react-icons/all-files/io5/IoWarning';\n\nimport { IoCloseOutline } from '@react-icons/all-files/io5/IoCloseOutline';\n\nimport './style.css';\nimport {\n getAccountName,\n symbolsArr,\n multiply,\n percentOfBigNumber,\n ONLY_ZEROS,\n toRealSymbol,\n toPrecision,\n toInternationalCurrencySystemLongString,\n calculateFeeCharge,\n calculateFeePercent,\n isValidSlippageTolerance,\n} from '../utils';\nimport { REF_WIDGET_STAR_TOKEN_LIST_KEY } from './constant';\nimport Big from 'big.js';\nimport {\n config,\n DEFAULT_SLIPPAGE_TOLERANCE,\n FEE_DIVISOR,\n getConfig,\n NEAR_META_DATA,\n TokenLinks,\n WRAP_NEAR_CONTRACT_ID,\n} from '../constant';\nimport {\n scientificNotationToString,\n percent,\n getPoolAllocationPercents,\n} from '../utils';\nimport {\n REF_WIDGET_SWAP_DETAIL_KEY,\n DEFAULT_START_TOKEN_LIST_TESTNET,\n DEFAULT_START_TOKEN_LIST_MAINNET,\n} from './constant';\nimport { PoolMode } from '../v1-swap/swap';\nimport { isMobile, separateRoutes, divide, getMax } from '../utils';\nimport { SwapState } from './types';\n\ninterface TokenAmountProps {\n balance?: string;\n reloading?: JSX.Element;\n token?: TokenMetadata;\n onSelectToken: () => void;\n amount: string;\n onChangeAmount?: (amount: string) => void;\n price?: string;\n onForceUpdate?: () => void;\n poolFetchingState?: 'loading' | 'end';\n minNearAmountLeftForGasFees: number;\n}\n\nexport const getPriceImpact = (\n value: string,\n tokenIn: TokenMetadata,\n tokenInAmount: string\n) => {\n const textColor =\n Number(value) <= 1\n ? 'text-greenLight'\n : 1 < Number(value) && Number(value) <= 2\n ? 'text-warn'\n : 'text-error';\n\n const displayValue = scientificNotationToString(\n multiply(tokenInAmount || '0', divide(value, '100'))\n );\n\n const tokenInInfo =\n Number(displayValue) <= 0\n ? ` / 0 ${toRealSymbol(tokenIn.symbol)}`\n : ` / -${toInternationalCurrencySystemLongString(\n displayValue,\n 3\n )} ${toRealSymbol(tokenIn.symbol)}`;\n\n if (Number(value) < 0.01)\n return (\n <span className=\"text-greenLight\">\n {`< -0.01%`}\n {tokenInInfo}\n </span>\n );\n\n if (Number(value) > 1000)\n return (\n <span className=\"text-error\">\n {`< -1000%`}\n {tokenInInfo}\n </span>\n );\n\n return (\n <span className={`${textColor} font-sans`}>\n {`≈ -${toPrecision(value, 2)}%`}\n {tokenInInfo}\n </span>\n );\n};\n\nexport const SmartRouteV2 = ({\n tokens: tokensRaw,\n p,\n pools,\n}: {\n tokens: TokenMetadata[];\n p: string;\n pools: Pool[];\n}) => {\n const theme = useContext(ThemeContext);\n\n const tokens = tokensRaw.map(t =>\n t.id === WRAP_NEAR_CONTRACT_ID\n ? { ...NEAR_META_DATA, id: WRAP_NEAR_CONTRACT_ID }\n : t\n );\n\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n borderColor,\n iconDefault,\n iconHover,\n } = theme;\n\n const ParaTokenFrom = ({\n tokenIn,\n p,\n }: {\n tokenIn: TokenMetadata;\n p: string;\n }) => {\n return (\n <div\n className=\"__ref-swap-widget-row-flex-center \"\n style={{\n width: '60px',\n }}\n >\n <span\n style={{\n marginRight: '4px',\n }}\n >\n {p}%\n </span>\n <span className=\"\">\n <Icon token={tokenIn} />\n </span>\n </div>\n );\n };\n const Icon = ({ token }: { token: TokenMetadata }) => {\n if (token.icon) {\n return (\n <img\n src={token.icon}\n alt=\"\"\n style={{\n borderRadius: '100%',\n height: '16px',\n width: '16px',\n flexShrink: 0,\n }}\n />\n );\n } else {\n return (\n <div\n style={{\n borderRadius: '100%',\n height: '16px',\n width: '16px',\n }}\n />\n );\n }\n };\n const Hub = ({ token, poolId }: { token: TokenMetadata; poolId: number }) => {\n return (\n <div\n className={`__ref-swap-widget-row-flex-center`}\n style={{\n width: '62px',\n height: '22px',\n }}\n >\n <div\n className={`w-full flex items-center justify-start pl-2 `}\n style={{\n marginRight: '4px',\n }}\n >\n <span className=\"text-gray-400\">{`#${poolId}`}</span>\n </div>\n <Icon token={token} />\n </div>\n );\n };\n\n if (tokens.length === 3) {\n return (\n <div className=\"__ref-swap-widget-row-flex-center __ref-swap-widget-swap_route_row\">\n {/* <Hub token={tokens[0]} /> */}\n\n <ParaTokenFrom tokenIn={tokens[0]} p={p} />\n <div\n className=\"\"\n style={{\n position: 'relative',\n bottom: '1px',\n }}\n >\n <ArrowRight />\n </div>\n\n <Hub token={tokens[1]} poolId={pools?.[0]?.id} />\n <div\n className=\"px-3\"\n style={{\n position: 'relative',\n bottom: '1px',\n }}\n >\n <ArrowRight />\n </div>\n\n <Hub token={tokens[2]} poolId={pools?.[1]?.id} />\n </div>\n );\n } else if (tokens.length === 2) {\n return (\n <div className=\"__ref-swap-widget-row-flex-center __ref-swap-widget-swap_route_row\">\n <ParaTokenFrom tokenIn={tokens[0]} p={p} />\n <div className=\"px-3\">\n <ArrowRight />\n </div>\n <Hub token={tokens[1]} poolId={pools?.[0]?.id} />\n </div>\n );\n } else {\n return null;\n }\n};\n\nexport const DetailView = ({\n tokenIn,\n tokenOut,\n rate,\n fee,\n minReceived,\n amountIn,\n amountOut,\n priceImpact,\n estimates,\n}: {\n tokenIn: TokenMetadata | undefined;\n tokenOut: TokenMetadata | undefined;\n rate: string;\n fee: number;\n minReceived: string;\n amountIn: string;\n amountOut: string;\n priceImpact: string;\n estimates: EstimateSwapView[];\n}) => {\n const theme = useContext(ThemeContext);\n\n const storagedOpen = !!localStorage.getItem(REF_WIDGET_SWAP_DETAIL_KEY);\n\n const [showDetail, setShowDetail] = useState(storagedOpen || false);\n const [isRateReverse, setIsRateReverse] = useState(false);\n\n const tokensPerRoute = estimates\n .filter(swap => swap.inputToken === tokenIn?.id)\n .map(swap => swap.tokens);\n\n const identicalRoutes = separateRoutes(\n estimates,\n estimates[estimates.length - 1]?.outputToken || ''\n );\n\n const pools = identicalRoutes.map(r => r[0]).map(hub => hub.pool);\n const percents = useMemo(() => {\n if (!pools || pools.length === 0) return [];\n return getPoolAllocationPercents(pools);\n }, [pools]);\n\n const priceImpactDisplay = useMemo(() => {\n if (!priceImpact || !tokenIn || !amountIn) return null;\n return getPriceImpact(priceImpact, tokenIn, amountIn);\n }, [priceImpact, tokenIn, amountIn]);\n if (!tokenIn || !tokenOut) return null;\n\n const displayRate = `1 ${toRealSymbol(tokenIn.symbol)} ≈ ${\n Number(rate) < 0.01 ? '< 0.01' : toPrecision(rate, 2)\n } ${toRealSymbol(tokenOut.symbol)}`;\n\n const revertRate = new Big(1).div(ONLY_ZEROS.test(rate) ? '1' : rate || '1');\n\n const revertDisplayRate = `1 ${toRealSymbol(tokenOut.symbol)} ≈ ${\n Number(revertRate) < 0.01 ? '< 0.01' : toPrecision(revertRate.toString(), 2)\n } ${toRealSymbol(tokenIn.symbol)}`;\n\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n borderColor,\n iconDefault,\n iconHover,\n } = theme;\n\n return (\n <div\n className=\"__ref-widget-swap-detail-view __ref-swap-widget-col-flex-start\"\n style={{\n color: secondary,\n }}\n >\n <div className=\"__ref-swap-widget-row-flex-center __ref-swap-widget-swap-detail-view-item\">\n <div\n style={{\n color: primary,\n cursor: 'pointer',\n }}\n className=\"__ref-swap-widget-row-flex-center\"\n onClick={() => {\n if (showDetail) localStorage.removeItem(REF_WIDGET_SWAP_DETAIL_KEY);\n else {\n localStorage.setItem(REF_WIDGET_SWAP_DETAIL_KEY, '1');\n }\n setShowDetail(!showDetail);\n }}\n >\n <div>Detail</div>\n <div\n style={{\n position: 'relative',\n }}\n >\n {!showDetail ? <FiChevronDown /> : <FiChevronUp />}\n </div>\n </div>\n\n {amountIn && amountOut && (\n <div className=\"__ref-swap-widget-row-flex-center\">\n <div>{isRateReverse ? revertDisplayRate : displayRate}</div>\n\n <RiExchangeFill\n onClick={() => {\n setIsRateReverse(!isRateReverse);\n }}\n size={16}\n style={{\n marginLeft: '4px',\n cursor: 'pointer',\n }}\n fill={iconDefault}\n />\n </div>\n )}\n </div>\n {!showDetail ? null : (\n <>\n <div className=\"__ref-swap-widget-row-flex-center __ref-swap-widget-swap-detail-view-item\">\n <div>Minimum received</div>\n <div>{toPrecision(minReceived || '0', 8)}</div>\n </div>\n\n <div className=\"__ref-swap-widget-row-flex-center __ref-swap-widget-swap-detail-view-item\">\n <div>Fee</div>\n\n <div>\n {!amountIn\n ? '0'\n : `${calculateFeeCharge(fee, amountIn)} ${toRealSymbol(\n tokenIn.symbol\n )}(${toPrecision(calculateFeePercent(fee).toString(), 2)}%)`}\n </div>\n </div>\n </>\n )}\n\n {!showDetail ? null : (\n <>\n <div className=\"__ref-swap-widget-row-flex-center __ref-swap-widget-swap-detail-view-item\">\n <div>Price impact</div>\n\n <div>{priceImpactDisplay}</div>\n </div>\n </>\n )}\n\n {estimates && estimates.length > 1 && showDetail && (\n <div\n className=\"__ref-swap-widget-swap_routes __ref-swap-widget-row-flex-center\"\n style={{\n border: `1px solid ${borderColor}`,\n flexDirection: isMobile() ? 'column' : 'row',\n position: 'relative',\n alignItems: 'flex-start',\n justifyContent: 'space-between',\n }}\n >\n <div className=\"__ref-swap-widget-row-flex-center\">\n <RouterIcon />\n <span\n className=\"__ref-swap-widget-valueStyle\"\n style={{\n marginLeft: '4px',\n whiteSpace: 'nowrap',\n }}\n >\n {'Auto Router'}\n </span>\n </div>\n\n <div\n className=\"\"\n style={{\n width: isMobile() ? '100%' : 'auto',\n minWidth: !isMobile() ? '70%' : '',\n }}\n >\n {tokensPerRoute.every(r => !!r) &&\n tokensPerRoute.map((tokens, index) => {\n if (!tokens) return null;\n return (\n <SmartRouteV2\n key={index + '-swap-route'}\n tokens={tokens}\n p={percents[index]}\n pools={identicalRoutes[index].map(hub => hub.pool)}\n />\n );\n })}\n </div>\n </div>\n )}\n </div>\n );\n};\n\nexport const HalfAndMaxAmount = ({\n max,\n onChangeAmount,\n token,\n amount,\n}: {\n max: string;\n token: TokenMetadata;\n onChangeAmount: (amount: string) => void;\n amount: string;\n}) => {\n const halfValue = percentOfBigNumber(50, max, token.decimals);\n\n const theme = useContext(ThemeContext);\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n borderColor,\n } = theme;\n\n const [hoverHalf, setHoverHalf] = useState<boolean>(false);\n const [hoverMax, setHoverMax] = useState<boolean>(false);\n\n return (\n <div className=\"__ref-swap-widget-token-amount_quick_selector __ref-swap-widget-row-flex-center\">\n <span\n className=\"__ref-swap-widget-token-amount_quick_selector_item \"\n style={{\n color: secondary,\n borderRadius,\n border: `1px solid ${borderColor}`,\n marginRight: '4px',\n\n background:\n amount === halfValue && !ONLY_ZEROS.test(halfValue)\n ? active\n : hoverHalf\n ? hover\n : 'transparent',\n }}\n onMouseEnter={() => setHoverHalf(true)}\n onMouseLeave={() => setHoverHalf(false)}\n onClick={() => {\n const half = percentOfBigNumber(50, max, token.decimals);\n\n onChangeAmount(half);\n }}\n >\n Half\n </span>\n\n <span\n className=\"__ref-swap-widget-token-amount_quick_selector_item\"\n onClick={() => {\n onChangeAmount(max);\n }}\n onMouseEnter={() => setHoverMax(true)}\n onMouseLeave={() => setHoverMax(false)}\n style={{\n color: secondary,\n borderRadius,\n border: `1px solid ${borderColor}`,\n background:\n amount === max && !ONLY_ZEROS.test(max)\n ? active\n : hoverMax\n ? hover\n : 'transparent',\n }}\n >\n Max\n </span>\n </div>\n );\n};\n\nconst DECIMAL_POINT = '.';\nconst ALLOWED_KEYS: Record<string, boolean> = {\n '0': true,\n '1': true,\n '2': true,\n '3': true,\n '4': true,\n '5': true,\n '6': true,\n '7': true,\n '8': true,\n '9': true,\n [DECIMAL_POINT]: true,\n};\n\nconst isValidInput = (value: string) => {\n let decimalPointsAmount = 0;\n if (value === DECIMAL_POINT) return false;\n for (let i = 0; i < value.length; i++) {\n const char = value[i];\n if (!ALLOWED_KEYS[char]) return false;\n if (char === DECIMAL_POINT) {\n decimalPointsAmount++;\n if (decimalPointsAmount === 2) {\n return false;\n }\n }\n }\n return true;\n};\nexport const TokenAmount = (props: TokenAmountProps) => {\n const {\n balance,\n reloading,\n token,\n onSelectToken,\n amount,\n onChangeAmount,\n price,\n onForceUpdate,\n poolFetchingState,\n minNearAmountLeftForGasFees,\n } = props;\n\n const theme = useContext(ThemeContext);\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n borderColor,\n } = theme;\n\n const ref = useRef<HTMLInputElement>(null);\n\n const [hoverSelect, setHoverSelect] = useState<boolean>(false);\n const handleChange = (amount: string) => {\n if (onChangeAmount) {\n onChangeAmount(amount);\n }\n if (ref.current) {\n ref.current.value = amount;\n }\n };\n\n useEffect(() => {\n if (\n ref.current &&\n onChangeAmount &&\n token &&\n balance &&\n token.id === WRAP_NEAR_CONTRACT_ID &&\n Number(balance) - Number(ref.current.value) < minNearAmountLeftForGasFees\n ) {\n ref.current.setCustomValidity(\n `Must have ${minNearAmountLeftForGasFees}N or more left in wallet for gas fee.`\n );\n } else {\n ref.current?.setCustomValidity('');\n }\n }, [ref, balance, ref.current, ref.current?.value, token, amount]);\n\n const curMax = token\n ? getMax(token.id, balance || '0', minNearAmountLeftForGasFees)\n : '0';\n\n return (\n <>\n <div\n className=\"__ref-swap-widger-token-amount \"\n style={{\n background: secondaryBg,\n flexDirection: isMobile() ? 'column' : 'row',\n }}\n >\n <div\n className=\"__ref-swap-widget-row-flex-center\"\n style={{\n width: isMobile() ? 'auto' : '40%',\n }}\n >\n <div\n className=\"__ref-swap-widget-row-flex-center __ref-swap-widget-token-amount_token-select-button\"\n style={{\n color: primary,\n background: hoverSelect ? hover : 'transparent',\n border: `1px solide ${hoverSelect ? borderColor : 'transparent'}`,\n }}\n onClick={onSelectToken}\n onMouseEnter={() => setHoverSelect(true)}\n onMouseLeave={() => setHoverSelect(false)}\n >\n {!token ? (\n <>\n <span\n style={{\n whiteSpace: 'nowrap',\n height: '26px',\n userSelect: 'none',\n }}\n className=\"__ref-swap-widget-row-flex-center\"\n >\n Select Token\n </span>\n </>\n ) : (\n <>\n <img\n src={token?.icon}\n alt=\"\"\n className=\"__ref-swap-widget_token_icon\"\n style={{\n height: '26px',\n width: '26px',\n marginRight: '8px',\n }}\n />\n <span>{toRealSymbol(token?.symbol)}</span>\n </>\n )}\n <FiChevronDown\n style={{\n marginLeft: '4px',\n flexShrink: 0,\n }}\n />\n </div>\n\n {onForceUpdate && (\n <RiRefreshLine\n className={`${\n poolFetchingState === 'loading'\n ? '__ref-swap-widget-loading '\n : ''\n }`}\n style={{\n cursor: 'pointer',\n color: secondary,\n }}\n size={18}\n onClick={() => {\n onForceUpdate();\n }}\n />\n )}\n </div>\n\n <div\n className=\" __ref-swap-widget-token-amount_input\"\n style={{\n width: isMobile() ? '100%' : '60%',\n }}\n >\n <input\n ref={ref}\n max={!!onChangeAmount ? curMax : undefined}\n onWheel={() => {\n if (ref.current) {\n ref.current.blur();\n }\n }}\n className=\"__ref-swap-widget-input-class\"\n value={amount}\n type=\"text\"\n placeholder={!onChangeAmount ? '-' : '0.0'}\n onChange={({ target }) => {\n if (!isValidInput(target.value)) return;\n target.setCustomValidity('');\n handleChange(target.value);\n }}\n disabled={!onChangeAmount}\n style={{\n color: primary,\n marginBottom: '8px',\n width: '100%',\n textAlign: 'right',\n fontSize: '20px',\n }}\n />\n\n <div\n style={{\n fontSize: '12px',\n color: secondary,\n textAlign: 'right',\n }}\n >\n {!price\n ? '$-'\n : '~$' +\n toInternationalCurrencySystemLongString(\n multiply(price, amount || '0'),\n 2\n )}\n </div>\n </div>\n </div>\n\n {!balance || !token || !onChangeAmount ? null : (\n <div\n className=\"__ref-swap-widger-token-amount_balance __ref-swap-widget-row-flex-center\"\n style={{\n fontSize: '12px',\n color: secondary,\n }}\n >\n <span>\n Balance:&nbsp;\n {toPrecision(balance, 2)}\n </span>\n {token && (\n <HalfAndMaxAmount\n token={token}\n max={getMax(token.id, balance, minNearAmountLeftForGasFees)}\n onChangeAmount={handleChange}\n amount={amount}\n />\n )}\n </div>\n )}\n </>\n );\n};\n\nexport const SlippageSelector = ({\n slippageTolerance,\n onChangeSlippageTolerance,\n setShowSlip,\n}: {\n slippageTolerance: string;\n onChangeSlippageTolerance: (slippageTolerance: string) => void;\n setShowSlip: (showSlip: boolean) => void;\n}) => {\n const [invalid, setInValid] = useState<boolean>(false);\n\n const theme = useContext(ThemeContext);\n const { container, buttonBg, primary, borderRadius, borderColor } = theme;\n\n const handleChange = (amount: string) => {\n onChangeSlippageTolerance(amount);\n setInValid(!isValidSlippageTolerance(Number(amount)));\n };\n\n useEffect(() => {\n const onClick = (event: Event) => {\n if (!event.target) return;\n if (\n (event.target as HTMLElement).closest('#__ref-slippage-container') ===\n null\n ) {\n setShowSlip(false);\n if (invalid) onChangeSlippageTolerance(DEFAULT_SLIPPAGE_TOLERANCE);\n }\n };\n\n document.addEventListener('click', onClick);\n\n return () => {\n document.removeEventListener('click', onClick);\n };\n }, [invalid]);\n\n return (\n <div\n className=\"__ref-swap-widget_slippage_selector __ref-swap-widget-col-flex-start\"\n id=\"__ref-slippage-container\"\n onClick={e => e.stopPropagation()}\n style={{\n background: container,\n border: `1px solid ${borderColor}`,\n }}\n >\n <span\n style={{\n color: primary,\n paddingBottom: '14px',\n }}\n >\n Slippage tolerance\n </span>\n\n <div\n className={`__ref-swap-widget-row-flex-center\n `}\n >\n <div\n className={`__ref-swap-widget-row-flex-center\n __ref-swap-widget_slippage_selector_input_container`}\n style={{\n border: `1px solid ${invalid ? '#FF7575' : borderColor}`,\n borderRadius,\n color: invalid ? '#FF7575' : primary,\n }}\n >\n <input\n value={slippageTolerance}\n type=\"text\"\n required={true}\n placeholder=\"\"\n onChange={event => {\n if (isValidInput(event.target.value)) {\n handleChange(event.target.value);\n }\n }}\n style={{\n width: '100%',\n }}\n className=\"__ref-swap-widget-input-class\"\n />\n <span className=\"ml-2\">%</span>\n </div>\n\n <button\n className={`__ref-swap-widget_slippage_selector_button __ref-swap-widget-button ${\n isMobile()\n ? '__ref-swap-widget-opacity-active'\n : '__ref-swap-widget-opacity-hover'\n }`}\n style={{\n color: primary,\n background: buttonBg,\n borderRadius,\n }}\n onClick={e => {\n e.stopPropagation();\n e.preventDefault();\n onChangeSlippageTolerance(DEFAULT_SLIPPAGE_TOLERANCE);\n setInValid(false);\n }}\n >\n Auto\n </button>\n </div>\n {invalid && (\n <div\n className=\" text-xs py-3 __ref-swap-widget-row-flex-center\"\n style={{\n color: '#FF7575',\n fontSize: '12px',\n padding: '10px 0px 0px 0px',\n alignItems: 'start',\n }}\n >\n <IoWarning\n className=\"\"\n style={{\n marginRight: '4px',\n }}\n size={20}\n />\n <div>{'The slippage tolerance is invalid.'}</div>\n </div>\n )}\n </div>\n );\n};\n\nconst StarToken = ({\n price,\n token,\n onDelete,\n onClick,\n}: {\n token: TokenMetadata;\n price: string;\n onDelete: (token: TokenMetadata) => void;\n onClick: (token: TokenMetadata) => void;\n}) => {\n const theme = useContext(ThemeContext);\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n borderColor,\n iconDefault,\n iconHover,\n } = theme;\n\n const [hoverIcon, setHoverIcon] = useState(false);\n\n const [hoverClose, setHoverClose] = useState(false);\n\n return (\n <div\n className=\"__ref-swap-widget_star_token __ref-swap-widget-row-flex-center\"\n onMouseEnter={() => setHoverIcon(true)}\n onMouseLeave={() => setHoverIcon(false)}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n onClick(token);\n }}\n style={{\n background: hoverIcon ? hover : 'transparent',\n border: `1px solid ${borderColor}`,\n }}\n >\n {hoverIcon && (\n <div\n style={{\n position: 'absolute',\n top: '-4px',\n right: '-4px',\n boxShadow: '0px 0px 2px rgba(0, 0, 0, 0.25)',\n border: `1px solid ${borderColor}`,\n borderRadius: '100%',\n width: '16px',\n height: '16px',\n background: '#E3E3E3',\n }}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n onDelete(token);\n }}\n onMouseEnter={() => setHoverClose(true)}\n onMouseLeave={() => setHoverClose(false)}\n >\n <IoCloseOutline stroke={hoverClose ? 'black' : '#7e8a93'} />\n </div>\n )}\n\n <img\n src={token.icon}\n alt=\"\"\n className=\"__ref-swap-widget_token_icon\"\n style={{\n height: '26px',\n width: '26px',\n marginRight: '2px',\n }}\n />\n\n <div className=\"__ref-swap-widget-col-flex-start\">\n <span\n style={{\n fontSize: '14px',\n color: primary,\n }}\n >\n {toRealSymbol(token.symbol)}\n </span>\n\n <span\n style={{\n fontSize: '10px',\n color: secondary,\n }}\n >\n {!price\n ? '$-'\n : '$' + toInternationalCurrencySystemLongString(price, 2)}\n </span>\n </div>\n </div>\n );\n};\n\ninterface TokenProps {\n token: TokenMetadata;\n onClick: (token: TokenMetadata) => void;\n onClickPin: (token: TokenMetadata) => void;\n balance: string;\n price?: string;\n isSticky?: boolean;\n index: number;\n setHoverIndex: (index: number) => void;\n hoverIndex: number;\n}\n\nconst Token = ({\n token,\n onClick,\n price,\n balance,\n isSticky,\n onClickPin,\n index,\n setHoverIndex,\n hoverIndex,\n}: TokenProps) => {\n const theme = useContext(ThemeContext);\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n borderColor,\n iconDefault,\n iconHover,\n } = theme;\n\n const displayBalance =\n 0 < Number(balance) && Number(balance) < 0.001\n ? '< 0.001'\n : toPrecision(String(balance), 3);\n\n const [hoverOutLink, setHoverOutLink] = useState(false);\n\n const [hoverPin, setHoverPin] = useState(false);\n\n return (\n <div\n className=\"__ref-swap-widget_token-selector-token-list-item __ref-swap-widget-row-flex-center\"\n style={{\n background: hoverIndex === index ? hover : 'transparent',\n }}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n onClick(token);\n }}\n onMouseEnter={() => setHoverIndex(index)}\n onMouseLeave={() => setHoverIndex(-1)}\n >\n <div\n className=\"__ref-swap-widget-row-flex-center\"\n style={{\n justifyContent: 'space-between',\n }}\n >\n <img\n src={token.icon}\n alt=\"\"\n className=\"__ref-swap-widget_token_icon\"\n style={{\n height: '36px',\n width: '36px',\n marginRight: '10px',\n }}\n />\n\n <div className=\"__ref-swap-widget-col-flex-start\">\n <span\n style={{\n fontSize: '14px',\n color: primary,\n }}\n className=\"__ref-swap-widget-row-flex-center\"\n >\n {toRealSymbol(token.symbol)}\n\n {TokenLinks[token.symbol] && (\n <HiOutlineExternalLink\n onMouseEnter={() => setHoverOutLink(true)}\n onMouseLeave={() => setHoverOutLink(false)}\n style={{\n marginLeft: '4px',\n marginTop: '2px',\n }}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n window.open(TokenLinks[token.symbol], '_blank');\n }}\n stroke={hoverOutLink ? iconHover : iconDefault}\n />\n )}\n </span>\n\n <span\n style={{\n fontSize: '10px',\n color: secondary,\n marginTop: '2px',\n }}\n >\n {!price\n ? '$-'\n : '$' + toInternationalCurrencySystemLongString(price, 2)}\n </span>\n </div>\n </div>\n\n <div\n className=\"__ref-swap-widget-row-flex-center\"\n style={{\n color: primary,\n }}\n >\n {displayBalance}\n\n {isSticky ? (\n <AiFillPushpin\n onMouseEnter={() => setHoverPin(true)}\n onMouseLeave={() => setHoverPin(false)}\n fill={hoverPin && hoverIndex === index ? iconHover : iconDefault}\n style={{\n marginLeft: '10px',\n cursor: 'pointer',\n }}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n onClickPin(token);\n }}\n />\n ) : (\n <AiOutlinePushpin\n style={{\n marginLeft: '10px',\n cursor: 'pointer',\n }}\n onMouseEnter={() => setHoverPin(true)}\n onMouseLeave={() => setHoverPin(false)}\n fill={hoverPin && hoverIndex === index ? iconHover : iconDefault}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n onClickPin(token);\n }}\n />\n )}\n </div>\n </div>\n );\n};\n\ninterface TokenListProps {\n tokens: TokenMetadata[];\n onClick: (token: TokenMetadata) => void;\n balances: { [tokenId: string]: string };\n tokenPriceList: Record<string, any> | null;\n starList: string[];\n setStarList: (starList: string[]) => void;\n onDelete: (token: TokenMetadata) => void;\n}\n\nexport const TokenListTable = ({\n tokens,\n onClick,\n balances,\n tokenPriceList,\n starList,\n setStarList,\n onDelete,\n}: TokenListProps) => {\n const [currentSort, setCurrentSort] = useState('down');\n const theme = useContext(ThemeContext);\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n borderColor,\n iconDefault,\n iconHover,\n } = theme;\n\n const onClickPin = (token: TokenMetadata) => {\n if (starList.includes(token.id)) {\n onDelete(token);\n } else {\n const newList = [...starList, token.id];\n setStarList(newList);\n }\n };\n\n const [hoverIndex, setHoverIndex] = useState(-1);\n\n const tokenSorting = (a: TokenMetadata, b: TokenMetadata) => {\n const b1 = balances[a.id];\n const b2 = balances[b.id];\n\n if (currentSort === 'up') {\n return Number(b1) - Number(b2);\n } else return Number(b2) - Number(b1);\n };\n\n return !tokens || tokens.length === 0 ? null : (\n <div className=\"__ref-swap-widget_token_list_table\">\n <div\n className=\"__ref-swap-widget_token_list_table_header\"\n style={{\n color: secondary,\n borderBottom: `1px solid ${borderColor}`,\n }}\n >\n <span className=\"\">Asset</span>\n\n <span\n onClick={() => {\n setCurrentSort(currentSort === 'up' ? 'down' : 'up');\n }}\n style={{\n cursor: 'pointer',\n }}\n className=\"__ref-swap-widget-row-flex-center\"\n >\n <span className=\"ml-1\">Balance</span>\n {currentSort === 'up' ? <TiArrowSortedUp /> : <TiArrowSortedDown />}\n </span>\n </div>\n\n <div className=\"__ref-swap-widget_token_list_table_content\">\n {tokens.sort(tokenSorting).map((token, index) => (\n <Token\n key={token.id + '-select-token-list-item-' + index}\n onClick={onClick}\n index={index}\n token={token}\n price={tokenPriceList?.[token.id]?.price}\n balance={balances?.[token.id] || '0'}\n onClickPin={onClickPin}\n isSticky={starList.includes(token.id)}\n setHoverIndex={setHoverIndex}\n hoverIndex={hoverIndex}\n />\n ))}\n </div>\n </div>\n );\n};\n\nexport const TokenSelector = ({\n onSelect,\n width,\n tokens,\n onClose,\n AccountId,\n balances,\n className,\n}: {\n onSelect: (token: TokenMetadata) => void;\n width: string;\n tokens: TokenMetadata[];\n onClose: () => void;\n AccountId: string;\n balances: { [tokenId: string]: string };\n className?: string;\n}) => {\n const theme = useContext(ThemeContext);\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n iconDefault,\n iconHover,\n } = theme;\n\n const [searchValue, setSearchValue] = useState<string>('');\n\n const tokenPriceList = useContext(TokenPriceContext);\n\n const handleSearch = (value: string) => {\n setSearchValue(value);\n };\n\n const storagedStartList = localStorage.getItem(REF_WIDGET_STAR_TOKEN_LIST_KEY)\n ? JSON.parse(localStorage.getItem(REF_WIDGET_STAR_TOKEN_LIST_KEY) || '[]')\n : null;\n\n const DEFAULT_START_TOKEN_LIST =\n getConfig().networkId === 'testnet'\n ? DEFAULT_START_TOKEN_LIST_TESTNET\n : DEFAULT_START_TOKEN_LIST_MAINNET;\n\n const [starList, setStarList] = useState<string[]>(\n storagedStartList || DEFAULT_START_TOKEN_LIST\n );\n\n const onDelete = (token: TokenMetadata) => {\n const newStarList = starList.filter(starToken => starToken !== token.id);\n\n setStarList(newStarList);\n\n localStorage.setItem(\n REF_WIDGET_STAR_TOKEN_LIST_KEY,\n JSON.stringify(newStarList)\n );\n };\n\n const tableListFilter = (token: TokenMetadata) => {\n if (!searchValue) return true;\n\n const searchValueLower = searchValue.toLowerCase();\n\n return token.symbol?.toLowerCase().includes(searchValueLower) || false;\n };\n\n return (\n <div\n className={`__ref-swap_widget-token_selector __ref-swap-widget-container ${className}`}\n style={{\n position: 'relative',\n width,\n background: container,\n }}\n >\n <FiChevronLeft\n onClick={onClose}\n style={{\n color: primary,\n position: 'absolute',\n cursor: 'pointer',\n }}\n />\n <div\n className=\"__ref-swap-widget-header-title __ref-swap-widget-row-flex-center\"\n style={{\n color: primary,\n justifyContent: 'center',\n paddingBottom: '24px',\n }}\n >\n Select a token\n </div>\n\n <div\n className=\"__ref-swap-widget-select-token_input __ref-swap-widget-row-flex-center\"\n style={{\n border: `1px solid ${buttonBg}`,\n background: secondaryBg,\n }}\n >\n <FaSearch\n fill={iconDefault}\n style={{\n marginRight: '8px',\n }}\n />\n\n <input\n className=\"__ref-swap-widget-input-class\"\n placeholder=\"Search token...\"\n onChange={evt => handleSearch(evt.target.value)}\n style={{\n fontSize: '14px',\n color: primary,\n }}\n />\n </div>\n\n <div className=\"__ref-swap-widget_token-selector-star-tokens __ref-swap-widget-row-flex-center\">\n {starList.map(id => {\n if (!tokens || tokens.length === 0) return null;\n\n const token = tokens.find(token => token.id === id);\n\n return !token ? null : (\n <StarToken\n key={token.id + '-star-token'}\n token={token}\n price={tokenPriceList?.[token.id]?.price}\n onDelete={onDelete}\n onClick={onSelect}\n />\n );\n })}\n </div>\n\n <TokenListTable\n tokens={tokens.filter(tableListFilter)}\n tokenPriceList={tokenPriceList}\n onClick={onSelect}\n balances={balances}\n starList={starList}\n setStarList={starList => {\n setStarList(starList);\n localStorage.setItem(\n REF_WIDGET_STAR_TOKEN_LIST_KEY,\n JSON.stringify(starList)\n );\n }}\n onDelete={onDelete}\n />\n </div>\n );\n};\n\nexport const Slider = ({\n showSlip,\n setShowSlip,\n}: {\n showSlip: boolean;\n setShowSlip: (show: boolean) => void;\n}) => {\n const [hover, setHover] = useState(false);\n\n return (\n <svg\n width=\"17\"\n height=\"17\"\n viewBox=\"0 0 17 17\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n onMouseEnter={() => setHover(true)}\n onMouseLeave={() => setHover(false)}\n onClick={() => setShowSlip(true)}\n className=\"cursor-pointer\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M12.6957 13.0652C12.6957 14.1338 11.8294 15 10.7609 15C9.69235 15 8.82611 14.1338 8.82611 13.0652C8.82612 11.9967 9.69235 11.1304 10.7609 11.1304C11.8294 11.1304 12.6957 11.9967 12.6957 13.0652ZM14.5749 12.0941C14.6145 12.0894 14.6548 12.0869 14.6957 12.0869L15.9565 12.0869C16.5088 12.0869 16.9565 12.5346 16.9565 13.0869C16.9565 13.6392 16.5088 14.0869 15.9565 14.0869L14.6957 14.0869C14.651 14.0869 14.6071 14.084 14.564 14.0783C14.1171 15.7605 12.5837 17 10.7609 17C8.93806 17 7.40472 15.7605 6.95777 14.0783C6.91471 14.084 6.87078 14.0869 6.82617 14.0869L1.00009 14.0869C0.447802 14.0869 8.61245e-05 13.6392 8.61728e-05 13.0869C8.62211e-05 12.5346 0.447802 12.0869 1.00009 12.0869L6.82617 12.0869C6.86702 12.0869 6.90729 12.0894 6.94686 12.0941C7.37926 10.3906 8.92291 9.13044 10.7609 9.13044C12.5989 9.13044 14.1425 10.3906 14.5749 12.0941ZM4.26086 3.93478C4.26086 2.86623 5.1271 2 6.19565 2C7.2642 2 8.13043 2.86623 8.13043 3.93478C8.13043 5.00333 7.2642 5.86957 6.19565 5.86957C5.1271 5.86956 4.26086 5.00333 4.26086 3.93478ZM6.19565 9.66601e-07C4.3728 8.07243e-07 2.83946 1.23952 2.39252 2.92168C2.34944 2.91601 2.3055 2.91309 2.26087 2.91309L0.999999 2.91309C0.447715 2.91309 -7.14972e-07 3.3608 -7.63254e-07 3.91309C-8.11537e-07 4.46537 0.447715 4.91309 0.999999 4.91309L2.26087 4.91309C2.30173 4.91309 2.34202 4.91063 2.3816 4.90587C2.81401 6.60936 4.35766 7.86956 6.19565 7.86957C8.03363 7.86957 9.57728 6.60936 10.0097 4.90588C10.0493 4.91064 10.0895 4.91309 10.1304 4.91309L15.9565 4.91309C16.5087 4.91309 16.9565 4.46537 16.9565 3.91309C16.9565 3.3608 16.5087 2.91309 15.9565 2.91309L10.1304 2.91309C10.0858 2.91309 10.0418 2.91601 9.99877 2.92167C9.55182 1.23952 8.01849 1.12596e-06 6.19565 9.66601e-07Z\"\n fill={hover || showSlip ? '#00C6A2' : '#7E8A93'}\n />\n </svg>\n );\n};\n\nexport const RefIcon = (props: any) => {\n return (\n <svg\n {...props}\n width=\"10\"\n height=\"10\"\n viewBox=\"0 0 10 10\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M6.36365 10H10L6.36365 6.36363V10Z\" fill=\"currentColor\" />\n <path\n d=\"M10 4.05312e-06L7.87879 3.86767e-06L10 2.12122L10 4.05312e-06Z\"\n fill=\"#00C6A2\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6.51531 6.36364C6.46444 6.36364 6.41387 6.36232 6.36365 6.35971V4.08371L8.83901 1.78516C9.18802 2.26148 9.3941 2.8491 9.3941 3.48485C9.3941 5.07476 8.10522 6.36364 6.51531 6.36364ZM8.19255 1.14486L6.36365 2.84313V0.60999C6.41387 0.607383 6.46444 0.606064 6.51531 0.606064C7.14111 0.606064 7.72027 0.805743 8.19255 1.14486Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6.06046 0.606064H3.33319V3.29661L4.55696 4.52039L6.06046 3.12428V0.606064ZM6.06046 4.36486L4.5336 5.78267L3.33319 4.58226V10H6.06046V4.36486Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M3.0303 0.606064H0V4.50881L2.27284 2.23598L3.0303 2.99344V0.606064ZM3.0303 4.27909L2.27284 3.52162L0 5.79446V10H3.0303V4.27909Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n};\n\nexport const Loading = () => {\n return (\n <svg\n width=\"38\"\n height=\"38\"\n viewBox=\"0 0 38 38\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"__ref-swap-widget-loading\"\n >\n <circle\n cx=\"19\"\n cy=\"19\"\n r=\"16\"\n stroke=\"#EEEEEE\"\n strokeWidth=\"6\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M19 35C27.8366 35 35 27.8366 35 19C35 10.1634 27.8366 3 19 3C10.1634 3 3 10.1634 3 19\"\n stroke=\"#00C6A2\"\n strokeWidth=\"4\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n};\n\nexport const Warning = () => {\n return (\n <svg\n width=\"49\"\n height=\"49\"\n viewBox=\"0 0 49 49\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M21.0359 5.99999C22.5755 3.33333 26.4245 3.33333 27.9641 6L42.2535 30.75C43.7931 33.4167 41.8686 36.75 38.7894 36.75H10.2106C7.13137 36.75 5.20688 33.4167 6.74648 30.75L21.0359 5.99999Z\"\n stroke=\"#FF689E\"\n strokeWidth=\"4\"\n strokeLinecap=\"round\"\n />\n <line\n x1=\"24\"\n y1=\"14\"\n x2=\"24\"\n y2=\"24\"\n stroke=\"#FF689E\"\n strokeWidth=\"4\"\n strokeLinecap=\"round\"\n />\n <circle cx=\"24\" cy=\"30\" r=\"2\" fill=\"#FF689E\" />\n </svg>\n );\n};\n\nexport const Success = () => {\n return (\n <div\n style={{\n position: 'relative',\n height: '32px',\n width: '32px',\n }}\n >\n <svg\n width=\"38\"\n height=\"38\"\n viewBox=\"0 0 38 38\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n }}\n >\n <circle\n cx=\"19\"\n cy=\"19\"\n r=\"16\"\n stroke=\"#EEEEEE\"\n strokeWidth=\"6\"\n strokeLinecap=\"round\"\n />\n </svg>\n\n <svg\n width=\"30\"\n height=\"23\"\n viewBox=\"0 0 30 23\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{\n position: 'absolute',\n top: 4,\n left: 4,\n }}\n >\n <path\n d=\"M2 11.2727L10.4898 20L28 2\"\n stroke=\"#00C6A2\"\n strokeWidth=\"4\"\n strokeLinecap=\"round\"\n />\n </svg>\n </div>\n );\n};\n\nexport const RouterIcon = () => {\n return (\n <svg\n width=\"16\"\n height=\"12\"\n viewBox=\"0 0 16 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"mr-2\"\n >\n <path\n d=\"M13.4862 6.25488C12.2813 6.25488 11.2485 7.10159 11.019 8.28698H6.02703L4.7647 7.21448C4.93684 6.8758 5.05159 6.48067 5.10897 6.0291C5.10897 5.52107 4.93684 4.9566 4.59257 4.56147L6.02703 3.1503H11.0763C11.478 4.44858 12.8551 5.23884 14.1748 4.84371C15.4945 4.44858 16.2978 3.09385 15.8961 1.79557C15.4945 0.497295 14.1174 -0.292963 12.7977 0.102166C11.937 0.327954 11.3059 1.00532 11.0763 1.79557H5.51062L3.50237 3.77122C3.21548 3.65832 2.92859 3.60188 2.58432 3.60188C1.20723 3.54543 0.0596573 4.61792 0.00227872 5.97265C-0.0550999 7.32738 0.977715 8.45632 2.3548 8.51276H2.58432C3.04334 8.51276 3.44499 8.39987 3.84664 8.17408L5.568 9.6417H11.1911C11.7075 10.8835 13.142 11.5045 14.4043 11.0529C15.6666 10.5449 16.2978 9.13368 15.8388 7.89185C15.4371 6.8758 14.5191 6.25488 13.4862 6.25488V6.25488ZM13.4862 1.344C14.1174 1.344 14.6338 1.85202 14.6338 2.47294C14.6338 3.09385 14.1174 3.60188 13.4862 3.60188C12.8551 3.60188 12.3387 3.09385 12.3387 2.47294C12.3387 1.85202 12.8551 1.344 13.4862 1.344ZM2.58432 7.15804C1.95315 7.15804 1.43674 6.65001 1.43674 6.0291C1.43674 5.40818 1.95315 4.90016 2.58432 4.90016C3.21548 4.90016 3.73189 5.40818 3.73189 6.0291C3.73189 6.65001 3.21548 7.15804 2.58432 7.15804ZM13.4862 9.86749C12.8551 9.86749 12.3387 9.35947 12.3387 8.73855C12.3387 8.11763 12.8551 7.60961 13.4862 7.60961C14.1174 7.60961 14.6338 8.11763 14.6338 8.73855C14.6338 9.35947 14.1174 9.86749 13.4862 9.86749Z\"\n fill=\"url(#paint0_linear_12461_2312)\"\n />\n <defs>\n <linearGradient\n id=\"paint0_linear_12461_2312\"\n x1=\"8\"\n y1=\"0\"\n x2=\"8\"\n y2=\"11.2\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#00C6A2\" />\n <stop offset=\"1\" stopColor=\"#8C78FF\" />\n </linearGradient>\n </defs>\n </svg>\n );\n};\n\nexport const Notification = ({\n state,\n tx,\n detail,\n setSwapState,\n}: {\n state: SwapState;\n setSwapState: (state: SwapState) => void;\n tx?: string;\n detail?: string;\n}) => {\n const theme = useContext(ThemeContext);\n const { container, buttonBg, primary } = theme;\n\n const notificationStatus = useMemo(() => {\n return {\n isClosed: false,\n isWaitingForConfirmation: state === 'waitingForConfirmation',\n isFailure: state === 'fail',\n isSuccess: state === 'success',\n };\n }, [state]);\n\n return (\n <div\n className=\"__ref-swap-widget-notification\"\n style={{\n color: primary,\n background: container,\n }}\n >\n <div className=\"__ref-swap-widget-notification__icon\">\n {notificationStatus.isWaitingForConfirmation && <Loading />}\n {notificationStatus.isFailure && <Warning />}\n {notificationStatus.isSuccess && <Success />}\n </div>\n\n <div\n style={{\n fontSize: '16px',\n marginTop: '10px',\n marginBottom: '6px',\n }}\n >\n {notificationStatus.isSuccess && <p>Success!</p>}\n {notificationStatus.isFailure && <p>Swap Failed!</p>}\n </div>\n <div\n className=\"text-center\"\n style={{\n color: primary,\n }}\n >\n {notificationStatus.isWaitingForConfirmation && (\n <p>Waiting for confirmation</p>\n )}\n {notificationStatus.isSuccess && tx && (\n <a\n className=\"text-primary font-semibold\"\n href={`${config.explorerUrl}/txns/${tx}`}\n target=\"_blank\"\n style={{\n textDecoration: 'underline',\n fontSize: '14px',\n color: primary,\n }}\n rel=\"noreferrer\"\n >\n Click to view.\n </a>\n )}\n\n {notificationStatus.isSuccess && detail}\n </div>\n {state !== null && (\n <button\n className=\"__ref-swap-widget-notification__button __ref-swap-widget-button\"\n style={{\n background: buttonBg,\n fontWeight: 700,\n color: 'white',\n }}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n setSwapState(null);\n }}\n >\n Close\n </button>\n )}\n </div>\n );\n};\n\nexport const ArrowRight = () => {\n return (\n <div className=\"mx-1\">\n <svg\n width=\"12\"\n height=\"5\"\n viewBox=\"0 0 12 5\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M8.864 4.4C9.024 4.05867 9.17867 3.76 9.328 3.504C9.488 3.248 9.64267 3.03467 9.792 2.864H0.464V2.192H9.792C9.64267 2.01067 9.488 1.792 9.328 1.536C9.17867 1.28 9.024 0.986666 8.864 0.656H9.424C10.096 1.43467 10.8 2.01067 11.536 2.384V2.672C10.8 3.03467 10.096 3.61067 9.424 4.4H8.864Z\"\n fill=\"#7E8A93\"\n />\n </svg>\n </div>\n );\n};\n\nexport const AccountButton = ({\n AccountId,\n onDisConnect,\n}: {\n AccountId: string;\n onDisConnect: () => void;\n}) => {\n const [hoverAccount, setHoverAccount] = useState<boolean>(false);\n\n const theme = useContext(ThemeContext);\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n iconDefault,\n iconHover,\n borderColor,\n } = theme;\n\n return !AccountId ? null : (\n <div\n className=\"__ref-swap-widget-header-button-account __ref-swap-widget-row-flex-center\"\n style={{\n color: primary,\n background: secondaryBg,\n border: `1px solid ${borderColor}`,\n cursor: 'pointer',\n }}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n hoverAccount && onDisConnect();\n }}\n onMouseEnter={() => setHoverAccount(true)}\n onMouseLeave={() => setHoverAccount(false)}\n >\n {hoverAccount ? 'Disconnect' : getAccountName(AccountId)}\n </div>\n );\n};\n","import React, { useEffect, useMemo, useState } from 'react';\n\nimport { SwapWidgetProps } from './types';\nimport { TokenMetadata } from '../types';\nimport {\n useRefPools,\n useSwap,\n ThemeContextProvider,\n TokenPriceContextProvider,\n useAllTokens,\n} from './state';\nimport { ftGetBalance, ftGetTokenMetadata } from '../ref';\nimport {\n getAccountName,\n toReadableNumber,\n toPrecision,\n getPriceImpact,\n isMobile,\n isValidSlippageTolerance,\n} from '../utils';\nimport {\n Slider,\n SlippageSelector,\n TokenSelector,\n TokenAmount,\n DetailView,\n Notification,\n} from './components';\nimport { FiChevronDown } from '@react-icons/all-files/fi/FiChevronDown';\n\nimport { TiWarning } from '@react-icons/all-files/ti/TiWarning';\n\nimport './style.css';\nimport { useTokenPriceList, useTokenBalances, useTokensIndexer } from './state';\n\nimport { CgArrowsExchangeAltV } from '@react-icons/all-files/cg/CgArrowsExchangeAltV';\nimport { RefIcon, AccountButton } from './components';\nimport Big from 'big.js';\nimport { ONLY_ZEROS } from '../utils';\nimport {\n defaultTheme,\n defaultDarkModeTheme,\n REF_WIDGET_SWAP_IN_KEY,\n REF_WIDGET_SWAP_OUT_KEY,\n} from './constant';\nimport {\n WRAP_NEAR_CONTRACT_ID,\n NEAR_META_DATA,\n REF_TOKEN_ID,\n REF_META_DATA,\n DEFAULT_SLIPPAGE_TOLERANCE,\n} from '../constant';\n\nexport const SwapWidget = (props: SwapWidgetProps) => {\n const {\n theme,\n defaultTokenList,\n onSwap,\n connection,\n width,\n height,\n enableSmartRouting,\n className,\n transactionState,\n onConnect,\n defaultTokenIn,\n defaultTokenOut,\n onDisConnect,\n darkMode,\n referralId,\n minNearAmountLeftForGasFees = 0.5,\n } = props;\n\n const curTheme = theme || (darkMode ? defaultDarkModeTheme : defaultTheme);\n\n const STORAGED_TOKEN_IN = localStorage.getItem(REF_WIDGET_SWAP_IN_KEY);\n\n const STORAGED_TOKEN_OUT = localStorage.getItem(REF_WIDGET_SWAP_OUT_KEY);\n\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n borderColor,\n iconDefault,\n iconHover,\n refIcon,\n } = curTheme;\n\n const { AccountId, isSignedIn: isSignedInProp } = connection;\n\n const isSignedIn = !!AccountId && isSignedInProp;\n\n const [tokenIn, setTokenIn] = useState<TokenMetadata>();\n\n const handleSetTokenIn = (token: TokenMetadata) => {\n setTokenIn(token);\n localStorage.setItem(REF_WIDGET_SWAP_IN_KEY, token.id);\n };\n\n const handleSetTokenOut = (token: TokenMetadata) => {\n setTokenOut(token);\n localStorage.setItem(REF_WIDGET_SWAP_OUT_KEY, token.id);\n };\n\n const [tokenOut, setTokenOut] = useState<TokenMetadata>();\n\n const [widgetRoute, setWidgetRoute] = useState<\n 'swap' | 'token-selector-in' | 'token-selector-out'\n >('swap');\n\n const [amountIn, setAmountIn] = useState<string>('1');\n\n const [showSlip, setShowSlip] = useState<boolean>(false);\n\n const [slippageTolerance, setSlippageTolerance] = useState<string>(\n DEFAULT_SLIPPAGE_TOLERANCE\n );\n\n const formattedSlippageTolerance = useMemo(() => {\n try {\n const formatted = Number(slippageTolerance);\n if (Number.isNaN(formatted) || !isValidSlippageTolerance(formatted))\n return +DEFAULT_SLIPPAGE_TOLERANCE;\n return formatted;\n } catch {\n return +DEFAULT_SLIPPAGE_TOLERANCE;\n }\n }, [slippageTolerance]);\n\n const { tokens, tokenLoading } = useTokensIndexer({\n defaultTokenList,\n AccountId,\n });\n\n // cache list tokens\n useAllTokens({ reload: true });\n\n const [refreshTrigger, setRreshTrigger] = useState<boolean>(false);\n\n const tokenPriceList = useTokenPriceList();\n\n const { allPools, allStablePools, poolFetchingState } = useRefPools(\n refreshTrigger\n );\n\n useEffect(() => {\n const defaultIn =\n STORAGED_TOKEN_IN || defaultTokenIn || WRAP_NEAR_CONTRACT_ID;\n\n const defaultOut = STORAGED_TOKEN_OUT || defaultTokenOut || REF_TOKEN_ID;\n\n if (\n tokens.length > 0 &&\n defaultIn &&\n tokens.findIndex(t => t.id === defaultIn) !== -1\n ) {\n if (defaultIn === WRAP_NEAR_CONTRACT_ID || defaultIn === 'NEAR') {\n handleSetTokenIn({\n ...NEAR_META_DATA,\n id: WRAP_NEAR_CONTRACT_ID,\n });\n } else {\n ftGetTokenMetadata(defaultIn).then(handleSetTokenIn);\n }\n } else if (\n tokens.length > 0 &&\n defaultIn &&\n tokens.findIndex(t => t.id === defaultIn) === -1\n ) {\n handleSetTokenIn({\n ...NEAR_META_DATA,\n id: WRAP_NEAR_CONTRACT_ID,\n });\n }\n if (\n tokens.length > 0 &&\n defaultOut &&\n tokens.findIndex(t => t.id === defaultOut) !== -1\n ) {\n if (defaultOut === WRAP_NEAR_CONTRACT_ID || defaultOut === 'NEAR') {\n handleSetTokenOut({\n ...NEAR_META_DATA,\n id: WRAP_NEAR_CONTRACT_ID,\n });\n } else {\n ftGetTokenMetadata(defaultOut).then(handleSetTokenOut);\n }\n } else if (\n tokens.length > 0 &&\n defaultOut &&\n tokens.findIndex(t => t.id === defaultOut) === -1\n ) {\n handleSetTokenOut(REF_META_DATA);\n }\n }, [tokens, tokenLoading]);\n\n const {\n amountOut,\n minAmountOut,\n balances,\n tokenInBalance,\n tokenOutBalance,\n rate,\n fee,\n estimates,\n canSwap,\n swapError,\n makeSwap,\n setAmountOut,\n } = useSwap({\n tokenIn: tokenIn,\n tokenOut: tokenOut,\n amountIn,\n simplePools: allPools.simplePools.filter(p => Number(p.shareSupply) > 0),\n options: {\n enableSmartRouting,\n stablePools: allPools.ratedPools\n .concat(allPools.unRatedPools)\n .filter(p => Number(p.shareSupply) > 0),\n stablePoolsDetail: allStablePools.filter(\n p => Number(p.shares_total_supply) > 0\n ),\n },\n slippageTolerance: formattedSlippageTolerance,\n onSwap,\n AccountId,\n refreshTrigger,\n poolFetchingState,\n referralId,\n tokens,\n });\n\n const priceImpact = useMemo(() => {\n if (!tokenIn || !tokenOut) return '0';\n\n return getPriceImpact({\n estimates,\n tokenIn,\n tokenOut,\n amountIn,\n amountOut,\n stablePools: allStablePools,\n });\n }, [estimates, tokenIn, tokenOut, amountIn, amountOut, allStablePools]);\n\n const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n transactionState.setState('waitingForConfirmation');\n makeSwap();\n };\n\n const canSubmit =\n tokenIn &&\n tokenOut &&\n canSwap &&\n !swapError &&\n isSignedIn &&\n new Big(tokenInBalance || '0').gte(amountIn || '0') &&\n isValidSlippageTolerance(formattedSlippageTolerance) &&\n !ONLY_ZEROS.test(tokenInBalance);\n\n const tokensLoaded = useMemo(() => {\n return tokens.length > 0;\n }, [tokens]);\n\n return (\n <ThemeContextProvider customTheme={curTheme}>\n <TokenPriceContextProvider>\n {widgetRoute === 'swap' && (\n <form\n className={`__ref-swap-widget-container ${className}`}\n onSubmit={handleSubmit}\n style={{\n background: container,\n fontFamily,\n width,\n height,\n }}\n >\n <div className=\"__ref-swap-widget-header __ref-swap-widget-row-flex-center\">\n <div\n style={{\n color: primary,\n }}\n className=\"__ref-swap-widget-header-title\"\n >\n Swap\n </div>\n\n <div\n className=\"__ref-swap-widget-header-button __ref-swap-widget-row-flex-center\"\n style={{\n position: 'relative',\n }}\n >\n <AccountButton\n onDisConnect={onDisConnect}\n AccountId={AccountId}\n />\n\n <Slider showSlip={showSlip} setShowSlip={setShowSlip} />\n\n {showSlip && (\n <SlippageSelector\n slippageTolerance={slippageTolerance}\n onChangeSlippageTolerance={setSlippageTolerance}\n setShowSlip={setShowSlip}\n />\n )}\n </div>\n </div>\n\n <TokenAmount\n amount={amountIn}\n balance={tokenInBalance}\n token={tokenIn}\n price={!tokenIn ? null : tokenPriceList?.[tokenIn.id]?.price}\n onChangeAmount={setAmountIn}\n onSelectToken={() => {\n if (!tokensLoaded) return;\n setWidgetRoute('token-selector-in');\n }}\n minNearAmountLeftForGasFees={minNearAmountLeftForGasFees}\n />\n\n <div\n className={`__ref-swap-widget-exchange-button __ref-swap-widget-row-flex-center `}\n style={{\n color: iconDefault,\n }}\n >\n <CgArrowsExchangeAltV\n style={{\n cursor: 'pointer',\n }}\n className={`__ref-swap-widget-exchange-button-icon ${\n isMobile()\n ? '__ref-swap-widget-active'\n : '__ref-swap-widget-hover'\n }`}\n size={30}\n onClick={() => {\n tokenOut && handleSetTokenIn(tokenOut);\n tokenIn && handleSetTokenOut(tokenIn);\n setAmountIn('1');\n setAmountOut('');\n }}\n />\n </div>\n\n <TokenAmount\n amount={toPrecision(amountOut, 8)}\n balance={tokenOutBalance}\n token={tokenOut}\n price={!tokenOut ? null : tokenPriceList?.[tokenOut.id]?.price}\n onSelectToken={() => {\n if (!tokensLoaded) return;\n setWidgetRoute('token-selector-out');\n }}\n onForceUpdate={() => {\n setRreshTrigger(!refreshTrigger);\n }}\n poolFetchingState={poolFetchingState}\n minNearAmountLeftForGasFees={minNearAmountLeftForGasFees}\n />\n {!swapError && amountIn && amountOut && (\n <DetailView\n fee={fee}\n rate={rate}\n amountIn={amountIn}\n minReceived={minAmountOut}\n tokenIn={tokenIn}\n tokenOut={tokenOut}\n amountOut={amountOut}\n priceImpact={priceImpact}\n estimates={estimates}\n />\n )}\n\n {swapError && (\n <div\n className=\"__ref-swap-widget-row-flex-center\"\n style={{\n color: '#DE9450',\n fontSize: '14px',\n\n paddingTop: '16px',\n }}\n >\n <TiWarning fill=\"#DE9450\" size={20} />\n &nbsp;\n {swapError.message}\n </div>\n )}\n {isSignedIn ? (\n <button\n type=\"submit\"\n className=\"__ref-swap-widget-submit-button __ref-swap-widget-button\"\n style={{\n color: 'white',\n background: buttonBg,\n opacity: !canSubmit ? 0.5 : 1,\n cursor: !canSubmit ? 'not-allowed' : 'pointer',\n }}\n disabled={!canSubmit}\n >\n {tokensLoaded ? (\n 'Swap'\n ) : (\n <div className=\"__ref-swap-widget-submit-button-loader\"></div>\n )}\n </button>\n ) : (\n <button\n type=\"button\"\n className=\"__ref-swap-widget-submit-button __ref-swap-widget-button\"\n onClick={onConnect}\n style={{\n color: 'white',\n background: buttonBg,\n cursor: 'pointer',\n }}\n >\n {'Connect Wallet'}\n </button>\n )}\n <div\n className=\"__ref-swap-widget-row-flex-center\"\n style={{\n justifyContent: 'center',\n }}\n >\n <a\n className=\"__ref-swap-widget-row-flex-center\"\n style={{\n color: secondary,\n justifyContent: 'center',\n paddingTop: '12px',\n fontSize: '14px',\n display: 'inline-flex',\n }}\n href=\"https://ref.finance\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n <RefIcon\n style={{\n color: refIcon || 'black',\n }}\n />\n &nbsp; Powered by Ref.finance\n </a>\n </div>\n\n {transactionState.state !== null && (\n <Notification\n state={transactionState.state}\n setSwapState={transactionState.setState}\n tx={transactionState?.tx}\n detail={transactionState?.detail}\n />\n )}\n </form>\n )}\n\n {widgetRoute === 'token-selector-in' && (\n <TokenSelector\n balances={balances}\n tokens={tokens}\n width={width}\n onSelect={token => {\n handleSetTokenIn(token);\n setWidgetRoute('swap');\n }}\n onClose={() => setWidgetRoute('swap')}\n AccountId={AccountId}\n className={className}\n />\n )}\n\n {widgetRoute === 'token-selector-out' && (\n <TokenSelector\n tokens={tokens}\n balances={balances}\n width={width}\n onSelect={token => {\n handleSetTokenOut(token);\n setWidgetRoute('swap');\n }}\n onClose={() => setWidgetRoute('swap')}\n AccountId={AccountId}\n className={className}\n />\n )}\n </TokenPriceContextProvider>\n </ThemeContextProvider>\n );\n};\n","import { getConfig } from '../constant';\n\nexport const DefaultTestnetTokenList = [\n {\n spec: 'ft-1.0.0',\n name: 'Wrapped NEAR fungible token',\n symbol: 'wNEAR',\n icon: null,\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'wrap.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Banana',\n symbol: 'BANANA',\n icon:\n 'https://assets.onlinelabels.com/images/clip-art/pitr/pitr_Bananas_icon.png',\n reference: null,\n reference_hash: null,\n decimals: 6,\n id: 'banana.ft-fin.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'NEAR Wrapped USDC',\n symbol: 'nUSDC',\n icon: 'https://s2.coinmarketcap.com/static/img/coins/64x64/3408.png',\n reference: null,\n reference_hash: null,\n decimals: 2,\n id: 'nusdc.ft-fin.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'NEAR Wrapped Tether',\n symbol: 'nUSDT',\n icon: 'https://s2.coinmarketcap.com/static/img/coins/64x64/825.png',\n reference: null,\n reference_hash: null,\n decimals: 6,\n id: 'nusdt.ft-fin.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Ref Finance Token',\n symbol: 'RFT',\n icon: '',\n reference: null,\n reference_hash: null,\n decimals: 8,\n id: 'rft.tokenfactory.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'USD Coin',\n symbol: 'USDC',\n icon:\n \"data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none'%3E%3Ccircle cx='16' cy='16' r='16' fill='%232775C9'/%3E%3Cpath d='M15.75 27.5C9.26 27.5 4 22.24 4 15.75S9.26 4 15.75 4 27.5 9.26 27.5 15.75A11.75 11.75 0 0115.75 27.5zm-.7-16.11a2.58 2.58 0 00-2.45 2.47c0 1.21.74 2 2.31 2.33l1.1.26c1.07.25 1.51.61 1.51 1.22s-.77 1.21-1.77 1.21a1.9 1.9 0 01-1.8-.91.68.68 0 00-.61-.39h-.59a.35.35 0 00-.28.41 2.73 2.73 0 002.61 2.08v.84a.705.705 0 001.41 0v-.85a2.62 2.62 0 002.59-2.58c0-1.27-.73-2-2.46-2.37l-1-.22c-1-.25-1.47-.58-1.47-1.14 0-.56.6-1.18 1.6-1.18a1.64 1.64 0 011.59.81.8.8 0 00.72.46h.47a.42.42 0 00.31-.5 2.65 2.65 0 00-2.38-2v-.69a.705.705 0 00-1.41 0v.74zm-8.11 4.36a8.79 8.79 0 006 8.33h.14a.45.45 0 00.45-.45v-.21a.94.94 0 00-.58-.87 7.36 7.36 0 010-13.65.93.93 0 00.58-.86v-.23a.42.42 0 00-.56-.4 8.79 8.79 0 00-6.03 8.34zm17.62 0a8.79 8.79 0 00-6-8.32h-.15a.47.47 0 00-.47.47v.15a1 1 0 00.61.9 7.36 7.36 0 010 13.64 1 1 0 00-.6.89v.17a.47.47 0 00.62.44 8.79 8.79 0 005.99-8.34z' fill='%23FFF'/%3E%3C/g%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 6,\n id: 'usdc.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Tether USD',\n symbol: 'USDT.e',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Ccircle cx='16' cy='16' r='16' fill='%2326A17B'/%3E%3Cpath fill='%23FFF' d='M17.922 17.383v-.002c-.11.008-.677.042-1.942.042-1.01 0-1.721-.03-1.971-.042v.003c-3.888-.171-6.79-.848-6.79-1.658 0-.809 2.902-1.486 6.79-1.66v2.644c.254.018.982.061 1.988.061 1.207 0 1.812-.05 1.925-.06v-2.643c3.88.173 6.775.85 6.775 1.658 0 .81-2.895 1.485-6.775 1.657m0-3.59v-2.366h5.414V7.819H8.595v3.608h5.414v2.365c-4.4.202-7.709 1.074-7.709 2.118 0 1.044 3.309 1.915 7.709 2.118v7.582h3.913v-7.584c4.393-.202 7.694-1.073 7.694-2.116 0-1.043-3.301-1.914-7.694-2.117'/%3E%3C/g%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 6,\n id: 'usdt.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Dai Stablecoin',\n symbol: 'DAI',\n icon:\n \"data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Ccircle fill='%23F4B731' fill-rule='nonzero' cx='16' cy='16' r='16'/%3E%3Cpath d='M9.277 8h6.552c3.985 0 7.006 2.116 8.13 5.194H26v1.861h-1.611c.031.294.047.594.047.898v.046c0 .342-.02.68-.06 1.01H26v1.86h-2.08C22.767 21.905 19.77 24 15.83 24H9.277v-5.131H7v-1.86h2.277v-1.954H7v-1.86h2.277V8zm1.831 10.869v3.462h4.72c2.914 0 5.078-1.387 6.085-3.462H11.108zm11.366-1.86H11.108v-1.954h11.37c.041.307.063.622.063.944v.045c0 .329-.023.65-.067.964zM15.83 9.665c2.926 0 5.097 1.424 6.098 3.528h-10.82V9.666h4.72z' fill='%23FFF'/%3E%3C/g%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'dai.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Wrapped Ether',\n symbol: 'WETH',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='256' height='256'%3E%3Cdefs%3E%3Ctext id='A' x='50' y='180' font-size='180'%3E🍌%3C/text%3E%3C/defs%3E%3Cuse xlink:href='%23A'/%3E%3C/svg%3E%0A\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'weth.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'HAPI',\n symbol: 'HAPI',\n icon:\n \"data:image/svg+xml,%3Csvg version='1.1' id='Layer_2' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' width='600px' height='600px' viewBox='0 0 600 600' enable-background='new 0 0 600 600' xml:space='preserve'%3E %3Cg%3E %3Cg%3E %3Cpath fill='%23141414' d='M263.7,122.8c-3.6,0.3-7.1,0.9-10.7,1.8c-24.5,6-40.3,18.1-50.4,31c24.5-4.7,49.9,1.3,67.3,7.4 c0.5,0.2,1,0.4,1.6,0.6c-2.7-4.2-5.2-9-7.2-14.4C261.2,141.1,261.6,131.6,263.7,122.8z'/%3E %3Cpath fill='%23141414' d='M201.2,197.7c-9.8-1.1-19.1-2.1-24.6-2.1c-0.7,0-1.4,0-2,0.1c-38.1,2.6-67.2,37.3-69.1,82.4 c-1.4,32.2,13.5,53.1,23.3,63.4c-1.5-12.5-0.1-25,4.3-37.3c11.7-32.6,34.3-42.1,60.6-53.1c10.8-4.5,22.5-9.5,34.3-16.6l50.1-39.6 c-10.1,2.2-24.4,4.5-42.9,5.3C227.1,200.6,213.9,199.1,201.2,197.7z'/%3E %3Cpath fill='%23141414' d='M319.1,176.5c-0.5,1.1,0.9,2.1,1.8,1.2c5.3-5.4,16.3-14.3,30.8-14.2c15.6,0.1,35.5,10.2,40.5,22.1 c4,9.8-6.6,16.5-6.6,16.5l0,0c-2.5-2.7-8-6.3-18.2-6.6c-15-0.5-25.3,12.1-24.1,12.9c7.5,4.7,17.3,3.7,23.1,3.5 c5.8-0.2,15.1-2.5,17.8-3.5c4.7-1.8,11.7-7.8,14.9-16.1c2.5-6.5,8.4-28.7-25.2-34.4C352.7,154.3,327,159.6,319.1,176.5z'/%3E %3Cpath fill='%23141414' d='M473.1,225.1c-0.5-0.6-1.1-1.3-1.7-2l-0.3-0.3c-3.9-4.4-7.6-8.3-9.4-10.1c1.2-4.2,4-16.2,1-26.1 c-2.3-7.7-6.8-15.5-9.2-19.4l-0.8-1.2h0c-0.4-0.6-0.8-1.2-1.1-1.7c-0.3-0.4-0.5-0.7-0.6-1l-0.2-0.7c-2.5-7-8.6-22.3-16.4-28.1 l59.4-91.7c2.3-3.5-2.1-7.5-5.4-5l-86.8,66.5c-8.7-12.3-21.1-21.8-21.8-22.4c-0.8-0.6-2-0.7-2.9-0.2c-0.9,0.5-1.4,1.6-1.3,2.6 c0,0.1,0.6,5.9-2.9,17.6c7.5,2.7,13.9,6,19.3,9.7l-4.5,3.5c-8.8-5.7-20-10.5-34.3-12.6c-17.7-2.6-31.9,1-42.1,10.7c0,0,0,0,0,0 c5.9,3.8,13.1,8.7,17,12.4c0.8,0.7,1.5,1.5,2.2,2.3c-3.1,0.9-6.2,1.9-9.3,2.9c-0.3-0.2-0.5-0.5-0.8-0.7c-1.9-1.7-4.4-3.4-7-5.3 c-5.4-3.8-11.7-8.3-15.8-14c-2.2-3.1-3.8-6.5-4.3-10.4c-0.3-2.4-1-4-2.2-4.9c0,0,0,0,0,0c0,0,0,0,0,0c-0.6-0.5-2.8-2-5.8,0.3 c-2,1.6-4.4,5.3-6.5,10.3c-5.2,12.3-8.7,32.1-1.8,46.1c1.2,2.3,2.4,4.5,3.7,6.6c-0.4,1-0.7,2.1-0.9,3.1c-0.6,3.4-0.9,7.8-1.2,12.7 c-19.8-8.3-50.5-17.5-78.5-10.7c-23.9,5.8-39.4,17.5-49.6,30c7.4-3.1,15.2-5,23.5-5.6c5.6-0.4,16.4,0.8,27.9,2.1 c11.8,1.3,25.3,2.8,32.9,2.4c19.2-0.8,33.7-3.3,43.5-5.6c0,5.4,0.1,11.1,0.4,16.9c0.7,16.8,2.5,34.3,5,46.5 c3.6,17.9,16.5,55.2,31.4,64.6c5.5,3.5,13.5,8.2,22.9,13.4c-2.5,6.4-5.1,15.1-5.1,23.5c0,15.2,5.2,26.6,11,37 c4.6,8.2,9.6,15.7,12.8,24c2.5,6.5-2.7,27.7-5.6,38.9c-1.2,4.5-1.9,7.3-1.7,7c3.7-5.1,7.5-10.8,11.3-16.8 c15.3-24.2,19.4-47,19.5-48l0.2-1.4l-1.1-1c-0.2-0.2-17.2-15.7-18.3-33.3c-0.4-6.9,1-11.5,4.3-13.8c0.5-0.3,1-0.6,1.6-0.9 c7.5,3.7,15,7.3,22.2,10.5c2.8,3.5,9,9.4,11.8,12c3.4,3.2,6.9,7.8,12.2,7.8c5.3,0,15.9,0,21.3,0s13.1,0,17.3-2.1 c4.2-2.1,10.9-5.6,11-12.6c0-1.5,0.4-3.9,0.9-6.8c3.7-4.9,4.1-10.6,4.8-19.2c0.5-5.7,1.7-15.5,3-25.9c2-15.7,4.1-32,3.9-37.9 c-0.2-8.2-1.1-14.3-1.4-16.2C475.3,249.4,479.5,232.4,473.1,225.1z M318,310.6c-13.3-8.4-25.6-44.6-29-61.2 c-4.8-23.9-6.9-68.5-3.9-86.8c2.7-16.7,49-34.5,81.7-35.6c1.9-0.1,3.8-0.1,5.6-0.1c1,0,2,0,3,0c-0.1,4.9,1.3,15.6,13.8,25.5 c13.9,11,30.4,5,30.4,5l12.1-18.7c4.5,3.5,9.4,12.7,13,22.1c-0.9-0.4-1.9-0.7-3.1-0.9c-8.1-1.3-31.6-0.9-24,31.3 c1,4,5.2,9.4,17.2,22.3c2.8,3,5.1,5.3,7,7.2c5.6,5.6,7.4,7.4,7.5,11.8c0,0.3-0.2,1.6-0.4,3c-0.8-0.6-1.9-1.1-3.4-1 c-3.6-0.2-33.7,5.6-42.4,15.1c-1.7,1.9-4.5,2.6-6.7,1.4c-0.1-0.1-0.2-0.1-0.3-0.2c-1.4-0.8-2.3-1.9-2.8-3.5 c-1.3-5.1,2.9-13.2,4.6-16c0.6-1,0.3-2.3-0.6-2.9c-1-0.6-2.3-0.3-2.9,0.6c-0.1,0.2-0.9,1.5-1.9,3.5c-3.3,6.6-8.2,12.2-14.3,16.3 c-9.8,6.6-24,15.2-35.5,18.2c-18,4.7-24.9-8.2-25.2-8.8c-0.5-1-1.8-1.4-2.8-0.9c-1,0.5-1.5,1.8-0.9,2.8 c0.1,0.1,6.3,12.1,21.5,12.1c0.6,0,1.4-0.1,2.2-0.2c4.3-0.5,8.6,0.5,12.3,2.7c3.5,2.1,8,4.7,12.5,7c12.6,6.3,14.7,6.2,19.5,5.4 c1.1-0.2,49.8-2.4,80.1-8.2l3.6,0.2c2.4,0.1,4.3,2.3,4,4.7l0,0.1c-0.2,1.4-1,2.6-2.2,3.3c-2.7,1.5-6.5,3.5-9.9,4.9 c-1.6,0.6-3.3,1.2-5.1,1.6c-5.5,1.3-11.1,1.6-11.1,1.6s-5.4,1.2-13.5,2.1c-3.4,0.4-7.2,0.7-11.3,0.9c-14,0.7-13,1.6-24.8,1 c-2.9-0.1-5.7-0.3-8.3-0.6c-2.5-0.3-3.2,3.4-0.7,4c6.1,1.5,13.3,2.6,21.3,2.5c1,0,1.9,0,2.9,0c12.8-0.1,24.4,7.5,29.4,19.3 c2.1,5,4.1,12,5.4,18.5c1.8,8.4-5.3,16.1-13.8,15.3c-12.5-1.3-26.6-4.8-34.6-8.3C365.3,338.1,332.4,319.8,318,310.6z M448.7,169.2 l1.2,1.9c2.4,4,5.9,10.5,7.9,16.9c3.1,10.4-1.4,24.4-1.4,24.5l-0.5,1.5l1.1,1.1c0,0.1,5,5.2,10.3,11.1l0.1,0.2 c0.6,0.7,1.2,1.3,1.8,2c3.7,4.3,1.9,17-0.1,23.9l-0.2,0.6l0.1,0.6c0,0,0.3,1.5,0.6,3.9c-2.7,0.3-4.7,2.7-4.4,5.5l0.8,7.5l-8.6,0.1 l-13.5-15.3c-1-1.2-1-3,0.2-4c0,0,0,0,0,0c7.1-6.4,8.1-9.5,8.3-10.7c0.9-5.4,1.2-7.4,1.2-8.1c0-6.1-2.9-9-8.7-14.8 c-1.9-1.9-4.2-4.2-6.9-7.1c-0.6-0.6-1.1-1.2-1.7-1.8c2.1,0.6,4.9,1.2,8.5,1.5c8.4,0.7,10.9-1.4,10.9-1.4s1.5-2.7-1.1-6.6 c-2.6-3.9-6.2-6.7-13.2-6.9c-5-0.2-9.5,3.7-11.7,6c-0.9-1-2.9-4.7-3.8-10.9c-1.5-9.7,2.1-14.2,4.7-16.4c4.6-3.9,10.9-7.7,14.4-7.5 c0.9,0.1,1.9,0.2,2.7,0.4C447.8,167.7,448.2,168.4,448.7,169.2z M463.4,332.9c-0.7,8.2-1.1,12.8-3.8,16.5c-2.3,3.1-7.3,0.8-6.6-3 c0.4-2.1,0.7-4.3,0.8-6.4c0.3-10.7-4.9-20.9-6.7-27.7c0,0,0-0.1,0-0.1c-0.9-3.8,1.2-7.7,4.8-9.3c1.6-0.7,3.4-1.6,5.3-2.6 c4.6-2.3,9.9,1.3,9.2,6.4l0,0.1C465.2,317.2,463.9,327.1,463.4,332.9z M385.1,249.4c1.8-1.3,4.4-0.8,5.6,1.2 c0.8,1.4,1.9,2.9,3.4,4.1c4.5,3.7,9.8,3.5,13.2,3.5c3.3,0,5.4-0.6,6-0.8c0,0,0,0,0,0c2.4-0.5,4.3,2,3.1,4.2 c-2.6,4.8-6.1,11.1-6.5,11.4c-0.7,0.5-22.8,5.1-25.6,5.4s-11.6,1.2-18.2-3c-2.8-1.7-5.5-3.7-7.7-5.3c-1.7-1.2-1.4-3.8,0.4-4.7 C368.8,260.4,378.7,253.9,385.1,249.4z M436.8,263.8l8.3,9.1c1.5,1.7,0.5,4.4-1.7,4.7c-5,0.6-10,1.2-14.9,1.7 c-2.3,0.2-3.9-2.3-2.7-4.3c1.9-3,4.3-7,6.5-10.8C433.2,262.6,435.5,262.4,436.8,263.8z M396.4,117.1l83.5-69.1l-76.9,76.9 c-2.5,2.4-6.6,1.6-8.1-1.5h0C393.9,121.2,394.5,118.5,396.4,117.1z'/%3E %3Cpath fill='%23141414' d='M196.6,258.1c-25.6,10.7-45.8,19.2-56.4,48.7c-15.1,42,9.4,88.5,62.5,120.1c-17.4-68,3.5-93.1,22.1-115.3 c6.4-7.7,12.5-15,16.9-23.7c12.9-25.8,12.3-50.5,11.1-62C233.7,242.5,214.1,250.8,196.6,258.1z'/%3E %3C/g%3E %3Cg%3E %3Cpath d='M201.6,477.1h-9.1l-2.8,17.1h-14.3l2.8-17.1h-9.1l-2.8,17.1h-9.3l-1.5,9.1h9.3l-2.3,14h-9.4l-1.5,9.1h9.4l-2.8,17.1h9.1 l2.8-17.1h14.3l-2.8,17.1h9.1l2.8-17.1h9.3l1.5-9.1h-9.3l2.3-14h9.4l1.5-9.1h-9.4L201.6,477.1z M186,517.4h-14.3l2.3-14h14.3 L186,517.4z'/%3E %3Cpolygon points='260.8,505.3 230,505.3 230,477.1 218,477.1 218,543.6 230,543.6 230,515.4 260.8,515.4 260.8,543.6 272.9,543.6 272.9,477.1 260.8,477.1 '/%3E %3Cpath d='M307.1,477.1l-23.4,66.4h12.8l5.5-16.4h25l5.5,16.4h12.8l-23.4-66.4H307.1z M305.3,517.5l9-26.8h0.5l9,26.8H305.3z'/%3E %3Cpath d='M394,480c-3.5-1.9-7.8-2.9-12.9-2.9h-24.9v66.4h12v-22.4H381c5.1,0,9.4-0.9,12.9-2.8s6.2-4.5,7.9-7.8 c1.8-3.3,2.7-7.1,2.7-11.3c0-4.2-0.9-8-2.7-11.3C400.1,484.5,397.4,481.9,394,480z M390.9,505.4c-0.9,1.8-2.3,3.2-4.2,4.3 c-1.9,1-4.3,1.6-7.3,1.6h-11.1v-24h11c3,0,5.5,0.5,7.4,1.5c1.9,1,3.3,2.4,4.2,4.2c0.9,1.8,1.4,3.9,1.4,6.2 S391.8,503.6,390.9,505.4z'/%3E %3Crect x='417.1' y='477.1' width='12' height='66.4'/%3E %3C/g%3E %3C/g%3E %3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'hapi.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'PARAS',\n symbol: 'PARAS',\n icon:\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAMAAABrrFhUAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAn1BMVEUAAAAAAK8AALsAALkAALoAALoAALkAALsAALsAALsAALoAALgAALsAALgAALoAALcAAL8AALkAALoAALkAALgAALYAALrf3/a/v+6Pj+FQUNBAQMvPz/L///+vr+qAgNwwMMegoOXv7/twcNgQEL+QkOBgYNRQUM8gIMOvr+kQEL6fn+V/f91wcNmQkOGwsOrf3/cfH8LPz/MgIMJgYNPUXweEAAAAFnRSTlMAEHCv32BQ749/73CvsM9gEN+QgJBQjziFHwAAAAFiS0dEHesDcZEAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQflCAkCHB+v3qAcAAAIFElEQVR42u2dfV8bNxCEj4bQBEhomhaf37DxOYfBlLgv3/+z1cYJNGnQ7t3M3Sw/NH+DvfdYGmmlla4odjr46dXh+YvS4avXxaOOflbHI2HwgOCNOhSV3u6f/606Dp3e7J7/tToKpY62AF6Y+32r44OX3QDOz0+KU3UIWr0r3qtD0OqwUEegVgagDkCtDEAdgFoZgDoAtTIAdQBqZQDqANTKANQBqJUBqANQKwNQB6BWBqAOQK0MQB2AWhmAOgC1MgB1AGplAOoA1MoA1AGolQGoA1ArA1AHoFYGoA5ArQxAHYBaCIBBORyN1Q+gBDCZ7jS5mI3m6sfQALicPmhRDqvxUv0wfQP4NP1OWwzPrjEgAOrpD/W8+gQC4Gr6tJ5Nn0AArKaWBvH7BDQPMAF87RPVeKV+0E4ADJwEIvcJCMB1AwBRDRICcNkYwGOfiNIYIABVSwCR+gQEoEYABOkTEIA5DmCvUtcnIAA3LABf+4QgucTWAxZUApI+gQGY8AE8NIaepk4YgLbjoK8trPuAgAH4hD9mWoOLquP+gAEgjIO2FuWswyECA3CFP55Tk+GoGwgYADshZmrbEqIB8CbENA3WbEsAATRJiEma1JEANE+IGc2AiQAE0OlEIIGAN0EAAUAJMaLbIAB6mQh0SgAEQEuIm2sYAgA3IW6mPyIA6CIhdosyLUIBdJUQezSIAEA0Du41CwCg84Q4pQUhP0IBpMfB5fxqdt1hLyE0ARRAOiEe3f/NclzdlZ24JaEJoADSCXH1n7/cYrgu4zUBuEosGd/n//05uU8s9ACSCfFTA9X4itUn4LkADCCdEKf6KMUaSjmA9ERgZP4/2idQG4QBpBPiO+enzLd9YtMKAGqDMID0ROBzk4/a9YnGjQHtAzCAdELc3KWX27bQiMCfYgA3XYS3nTK43bFq9Q08AEZCbLvgU5pXvpYA9gEcQLrXel3wh1pdeowRGwdwAOlxEPx9Vo50u30j4wBIJ8TwXNVed4YaGQGAsTAMmrSDwF9iAMYOcQ1/gdkLIBPAARg7xFgD3enGGhGh/VLCoal0dHC2cn4+MwBAMwECgPQOMZ6xm01gLQZg7BDDLmiuvEIuSABghFfj3zBOfwPUyAgAjHEKd0GzDgMZBggAjHGQ4IKWDSLDAAGAsUNMcEGrD9RaANYOMaOsKT0OIOMg4/C0MUrVhK9IZ8aIzTAAGMtYDBdMjzTIRIABwJisY8nKXsSVxw4AGB7NcMF0woEMNAwAVqUUwwWTX4BUSjAAGIMUumx5r1Y7cH0BsEqmoWTliyaRAVgl0wwXTGdcagBWyTShkuUyNACrZJrggrEBWJVSBBeMDcBauCW4YGwA1tEhQkVjbABmyTTugrEBmCXTeFVvEgAy2ebcJWat3OMumMyH5RMhs2Qad8HgAKzdK9wFk3MtdTZo793gLjiNDcA8OoS6YDrfUq8I2Qkx7ILpL1CvCTrOEKMumJ5rIrWCpCs1LQCoC6bTLaRIhgTAPEMMumD68xGHIQEwzxBjLmjMtZENaBIA8+gQ5oJGuol8NAmAWcmELN1bG0Pq+oCdzLs0IBc0BhkILgmAfYYYcUFjoglVzJMA2GeIkaHKGGMgg2VdrW0WdwM/kzXRFtcJ7mUedAA6qtEA1JWie5nlnO1XbW6NT8am2SwAZkLceraysnpXHQKAfZdGSxdcmbNs7EIVFgB7HGyXs65Mc9lggbMA2JdqtVq2Gds3NYGZNu0NE+Y42MIFl0Pz8eHFJhoA+6dq6oLzW8/JMbAH8ADYl2pdVKPx/G/fpy3HQ+fpQXStiQbAfZfGYlOW69msfkLVbLhucooWXW6lARBdqoX2AB6A/i6X/EZ1GAD9Xi75IPhaORoAzaVa+KYj701TgsslCQ2ACEBxqRah9oYHQHGpFuFiSR4AOyGO2ACIAASXSzJuFuUB6P9yScZlckQAvU8E4EkgGUDfl0tuOFfrEgH0PBEg3bFNBNDvLdP/kKImAujzcskF6/mZAHpMiDe8O+aJAPpLiEviu0eIAPoaBxeMQ1hdAOgpIb7jvmqD+eLlHsbBxR37zTtMAJ0nxGXFf9EKE0CnCfGirJxL6joAnSXEm3V3L6NjAvAkxIuNW5OyXK9n9VUnP3wnADwJMeMygbAAPBMBxjHasAA8CTHjMoG4ADwTAcLFUnEBeBLiWv3EXQLwJMTRXJAKwJMQMy6WCgvAkxBHc0EqAFdCHMwFqQBcCXGtfuQOAbjGwWAuyAXgSYiDuSAXgCchDuaCXACuhDiWC3IBuHaIa/UzdwjAtUMcywW5AFwTAewEXWwArh3iWC5IBuBaGQ/lgmQArh1i7I0IsQG4dohDuSAZgGuHOJQLkgG4dogp7woNCsC3Q9zVJkcAAL4d4kguSAbgGwepG/zBALh2iCO5IBuAa4c4kguyAfh2iAO5IBuAr2Sa8tbwmAB8JdOBXJANwDcRYBT6BwXgK5kO5IJ0AL5SsTguSAfgK5mO44J0AL6S6TguSAfgK5mO44J0AL6S6TguSAfgLJkO44J0AM9NGYA6ALUyAHUAamUA6gDUygDUAaiVAagDUCsDUAegVgagDkCtDEAdgFoZgDoAtTIAdQBqZQDqANTKANQBqJUBqANQKwNQB6BWBqAOQK0MQB2AWhmAOgC1MgB1AGoVh+oItHpfnKpD0OpdcaIOQauz4pdjdQxKfSiK4kgdhFJnWwDFr+oodPpY3OujOg6Vfiu+6OyDOhSFjn8vHnV2+l4dT786PD05uH/yfwGfzk1OHMRnUAAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMS0wOC0wOFQxOToyODozMSswNzowMIUIpr0AAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjEtMDgtMDhUMTk6Mjg6MzErMDc6MDD0VR4BAAAAAElFTkSuQmCC',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'paras.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Ref Finance Token',\n symbol: 'REF',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='16 24 248 248' style='background: %23000'%3E%3Cpath d='M164,164v52h52Zm-45-45,20.4,20.4,20.6-20.6V81H119Zm0,18.39V216h41V137.19l-20.6,20.6ZM166.5,81H164v33.81l26.16-26.17A40.29,40.29,0,0,0,166.5,81ZM72,153.19V216h43V133.4l-11.6-11.61Zm0-18.38,31.4-31.4L115,115V81H72ZM207,121.5h0a40.29,40.29,0,0,0-7.64-23.66L164,133.19V162h2.5A40.5,40.5,0,0,0,207,121.5Z' fill='%23fff'/%3E%3Cpath d='M189 72l27 27V72h-27z' fill='%2300c08b'/%3E%3C/svg%3E%0A\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'ref.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Pulse',\n symbol: 'PULSE',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCIgdmlld0JveD0iMCAwIDIwMCAyMDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxjaXJjbGUgY3g9IjEwMCIgY3k9IjEwMCIgcj0iMTAwIiBmaWxsPSIjMEYyQUMzIi8+CjxwYXRoIGQ9Ik0xMDMuNTc0IDg0LjU3M0MxMDIuMDUyIDg2LjU4MDggMTAwLjg1MyA4OS4xNDAyIDk5LjY5NzIgOTEuNjU1OUM5OC41NDA5IDk0LjE3MTYgOTcuMzkyIDk2LjY1OTYgOTYuMjE0OSA5OC40MjU1Qzk1LjAzNzggMTAwLjE5MSA5My45Mjg0IDEwMS4wNTggOTIuNzMyNiAxMDEuMDU4QzkxLjI3MDMgMTAxLjA1OCA5MC40NDI1IDEwMC42NDMgODkuNzEwMiA5OS44NjcyQzg4Ljk3NzYgOTkuMDkxNiA4OC40MDY1IDk3LjkwNSA4Ny44NzAzIDk2LjY3MDRDODcuMzMzOSA5NS40MzU4IDg2Ljg0NzcgOTQuMTM1MSA4Ni4wMzA1IDkzLjAzNDlDODUuMjEzMyA5MS45MzQ3IDgzLjkxMDQgOTEuMDI5MSA4Mi4yMTk4IDkxLjAyOTFDODEuMjYzMyA5MS4wMjkxIDgwLjQyMzcgOTEuNDQ1MSA3OS43ODg2IDkyLjAzMkM3OS4xNTM0IDkyLjYxODkgNzguNjkwMSA5My4zOTAxIDc4LjI3NzQgOTQuMjI1OUM3Ny40NTIxIDk1Ljg5NjggNzYuODM1NCA5Ny45NjgyIDc2LjA0MzUgOTkuOTkyN0M3NS4yNTE2IDEwMi4wMTcgNzQuMjc3MSAxMDMuOTk1IDcyLjk1NTUgMTA1LjM4M0M3MS42MzM2IDEwNi43NzIgNjkuOTk5MiAxMDcuNjQgNjcuNTAxOCAxMDcuNjRIMzguMDY2MkMzNy42ODcxIDEwNy42MzUgMzcuMzM0NSAxMDcuODI1IDM3LjE0MzMgMTA4LjEzN0MzNi45NTIyIDEwOC40NDkgMzYuOTUyMiAxMDguODM2IDM3LjE0MzMgMTA5LjE0OEMzNy4zMzQ1IDEwOS40NjEgMzcuNjg3MSAxMDkuNjUxIDM4LjA2NjIgMTA5LjY0Nkg2Ny41MDE4QzcwLjU0NzkgMTA5LjY0NiA3Mi44OTg1IDEwOC40MTYgNzQuNTMyMyAxMDYuN0M3Ni4xNjYyIDEwNC45ODQgNzcuMTg3NSAxMDIuNzk3IDc4LjAxNDYgMTAwLjY4MkM3OC44NDE3IDk4LjU2NzUgNzkuNDc1IDk2LjQ3NDEgODAuMTgyOCA5NS4wNDA3QzgwLjUzNyA5NC4zMjQgODAuODg5MyA5My43OTE5IDgxLjIzNDEgOTMuNDczOEM4MS41Nzg5IDkzLjE1NTIgODEuODI2NiA5My4wMzQ5IDgyLjIxOTggOTMuMDM0OUM4My4yMjc5IDkzLjAzNDkgODMuNzQyNyA5My40NDUzIDg0LjMyMjIgOTQuMjI1OUM4NC45MDE4IDk1LjAwNiA4NS40MTIgOTYuMjEyNyA4NS45NjQ5IDk3LjQ4NTRDODYuNTE3NyA5OC43NTc3IDg3LjA4OTYgMTAwLjA3OCA4OC4xMzMxIDEwMS4xODRDODkuMTc2NiAxMDIuMjg5IDkwLjczNzUgMTAzLjA2NCA5Mi43MzI2IDEwMy4wNjRDOTQuOTkzOCAxMDMuMDY0IDk2LjY1OTEgMTAxLjQ4NiA5Ny45ODg4IDk5LjQ5MTJDOTkuMzE4NSA5Ny40OTYyIDEwMC40NTQgOTQuOTY5NSAxMDEuNjAzIDkyLjQ3MDlDMTAyLjc1MSA4OS45NzE4IDEwMy45NTMgODcuNTE2OSAxMDUuMjgyIDg1Ljc2MzhDMTA2LjYxMSA4NC4wMTA3IDEwNy45MjUgODMuMDA1OCAxMDkuNTUzIDgzLjAwNThDMTEwLjI5NSA4My4wMDU4IDExMC45NDYgODMuMjcyOCAxMTEuNjU2IDgzLjg4MzRDMTEyLjM2NSA4NC40OTM5IDExMy4wNjggODUuNDUxNyAxMTMuNzU4IDg2LjY0MTRDMTE1LjEzOCA4OS4wMjA3IDExNi40NDcgOTIuMzI4OCAxMTcuODMyIDk1LjY2NzVDMTE5LjIxNiA5OS4wMDYyIDEyMC43MTcgMTAyLjM3NiAxMjIuNjk0IDEwNS4wMDdDMTI0LjY3MSAxMDcuNjM4IDEyNy4yMzQgMTA5LjU4MyAxMzAuNTc4IDEwOS41ODNIMTYwLjkzNEMxNjEuMzEzIDEwOS41ODggMTYxLjY2NiAxMDkuMzk4IDE2MS44NTcgMTA5LjA4NkMxNjIuMDQ4IDEwOC43NzMgMTYyLjA0OCAxMDguMzg3IDE2MS44NTcgMTA4LjA3NEMxNjEuNjY2IDEwNy43NjIgMTYxLjMxMyAxMDcuNTcyIDE2MC45MzQgMTA3LjU3N0gxMzAuNTc4QzEyOC4wNjcgMTA3LjU3NyAxMjYuMTcgMTA2LjIzMiAxMjQuNDAyIDEwMy44NzlDMTIyLjYzNCAxMDEuNTI2IDEyMS4xMDggOTguMjgzNyAxMTkuNzM3IDk0Ljk3ODFDMTE4LjM2NiA5MS42NzIxIDExNy4xMDggODguMzA1MiAxMTUuNTk4IDg1LjcwMTJDMTE0Ljg0MyA4NC4zOTkxIDExNC4wOCA4My4yODQ2IDExMy4xMDEgODIuNDQxOEMxMTIuMTIyIDgxLjU5ODcgMTEwLjg4MyA4MSAxMDkuNTUzIDgxQzEwNy4wMzYgODEgMTA1LjA5NiA4Mi41NjUzIDEwMy41NzQgODQuNTczWiIgc3Ryb2tlPSJ3aGl0ZSIgc3Ryb2tlLXdpZHRoPSI1Ii8+Cjwvc3ZnPgo=',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'pulse.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Ether',\n symbol: 'ETH',\n icon:\n 'data:image/png;base64,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',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'eth.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Aurora',\n symbol: 'AURORA',\n icon:\n \"data:image/svg+xml,%3Csvg version='1.1' id='Layer_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 288 288' style='enable-background:new 0 0 288 288;' xml:space='preserve'%3E %3Cstyle type='text/css'%3E .st0%7Bfill:%2370D44B;%7D .st1%7Bfill:%23FFFFFF;%7D %3C/style%3E %3Cpath class='st0' d='M144,0L144,0c79.5,0,144,64.5,144,144v0c0,79.5-64.5,144-144,144h0C64.5,288,0,223.5,0,144v0 C0,64.5,64.5,0,144,0z'/%3E %3Cpath class='st1' d='M144,58.8c7.6,0,14.5,4.3,17.9,11.1l56.2,112.5c4.9,9.9,0.9,21.9-9,26.8c-2.8,1.4-5.8,2.1-8.9,2.1H87.8 c-11,0-20-9-20-20c0-3.1,0.7-6.2,2.1-8.9l56.2-112.5C129.5,63,136.4,58.7,144,58.8 M144,45c-12.8,0-24.5,7.2-30.2,18.7L57.6,176.2 c-8.3,16.7-1.6,36.9,15.1,45.3c4.7,2.3,9.9,3.6,15.1,3.6h112.5c18.6,0,33.8-15.1,33.8-33.7c0-5.2-1.2-10.4-3.6-15.1L174.2,63.7 C168.5,52.2,156.8,45,144,45z'/%3E %3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'aurora.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Skyward Finance Token',\n symbol: 'SKYWARD',\n icon:\n 'data:image/png;base64,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',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'skyward.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Staked NEAR',\n symbol: 'STNEAR',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 67.79 67.79' version='1.1'%3E%3Cpath style='fill:%23fff' d='M33.934.311a33.9 33.9 0 1 0 33.89 33.9 33.9 33.9 0 0 0-33.89-33.9z' id='path505'%3E%3C/path%3E%3Cpath style='fill:%23ffbd00;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1' d='m11.803 27.8 12.387.359 2.361 5.959 7.616 3.31 8.523-3.322 2.348-5.87 12.269.03L54.822 54.2 31.837 58.86 12.89 52.648z' id='path1051'%3E%3C/path%3E%3Cpath style='fill:%23a0a0ff;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1' d='m34.657 12.575-10.43 9.633 1.096 10.01 8.844 5.21 9.785-5.287 1.086-11.33z' id='path1815'%3E%3C/path%3E%3Cpath id='path928' style='fill:%23666;fill-opacity:1' d='M33.928 4.282a29.93 29.93 0 0 1 4.682.367 29.93 29.93 0 0 1 25.244 29.572 29.93 29.93 0 0 1-29.92 29.92 29.93 29.93 0 0 1-.006-59.86zm.729 8.293c-2.03 5.668-8.815 9.76-8.815 14.521 0 4.76 3.912 8.62 8.737 8.62 4.824 0 8.736-3.86 8.736-8.62s-6.707-8.697-8.658-14.521zM37.84 22.67a2.524 2.446 0 0 1 .246.012 2.524 2.446 0 0 1 .246.035 2.524 2.446 0 0 1 .24.059 2.524 2.446 0 0 1 .233.08 2.524 2.446 0 0 1 .225.104 2.524 2.446 0 0 1 .213.123 2.524 2.446 0 0 1 .197.142 2.524 2.446 0 0 1 .183.162 2.524 2.446 0 0 1 .168.178 2.524 2.446 0 0 1 .147.191 2.524 2.446 0 0 1 .127.207 2.524 2.446 0 0 1 .105.217 2.524 2.446 0 0 1 .084.227 2.524 2.446 0 0 1 .06.232 2.524 2.446 0 0 1 .038.237 2.524 2.446 0 0 1 .012.24 2.524 2.446 0 0 1-.086.633 2.524 2.446 0 0 1-.252.59 2.524 2.446 0 0 1-.403.507 2.524 2.446 0 0 1-.521.389 2.524 2.446 0 0 1-.61.244 2.524 2.446 0 0 1-.652.084 2.524 2.446 0 0 1-.654-.084 2.524 2.446 0 0 1-.607-.244 2.524 2.446 0 0 1-.524-.389 2.524 2.446 0 0 1-.4-.508 2.524 2.446 0 0 1-.252-.59 2.524 2.446 0 0 1-.086-.632 2.524 2.446 0 0 1 .086-.633 2.524 2.446 0 0 1 .252-.59 2.524 2.446 0 0 1 .4-.506A2.524 2.446 0 0 1 36.58 23a2.524 2.446 0 0 1 .607-.247 2.524 2.446 0 0 1 .654-.082zM24.19 28.16a16.579 2.485 0 0 0-6.502 1.965 16.579 2.485 0 0 0 7.635 2.093 10.483 10.6 0 0 1-1.133-4.058zm20.848.078a10.483 10.6 0 0 1-1.086 3.904 16.579 2.485 0 0 0 6.894-2.017 16.579 2.485 0 0 0-5.808-1.887zm6.925 3.21c-.455 1.177-4.097 2.154-9.273 2.659a10.483 10.6 0 0 1-8.072 3.861 10.483 10.6 0 0 1-8.067-3.85c-5.276-.506-8.978-1.498-9.398-2.64h-.049v5.17h.049a.69.69 0 0 0-.049.24c0 1.8 7.81 3.25 17.43 3.25 9.62 0 17.43-1.45 17.43-3.25a.69.69 0 0 0 0-.24zm.032 7.323c-.67 1.73-8.22 3.03-17.43 3.03-9.23 0-16.771-1.34-17.381-3h-.049v5.17h.049a.69.69 0 0 0-.049.24c0 1.8 7.81 3.25 17.43 3.25 9.62 0 17.43-1.45 17.43-3.25a.69.69 0 0 0 0-.24zm0 7.21c-.67 1.69-8.22 3.03-17.43 3.03-9.23 0-16.771-1.34-17.381-3h-.049v5.17h.049a.69.69 0 0 0-.049.24c0 1.8 7.81 3.25 17.43 3.25 9.62 0 17.43-1.45 17.43-3.25a.69.69 0 0 0 0-.24z'%3E%3C/path%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'stnear.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Octopus Network Token',\n symbol: 'OCT',\n icon:\n \"data:image/svg+xml,%3Csvg version='1.1' id='O' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 113.39 113.39' style='enable-background:new 0 0 113.39 113.39;' xml:space='preserve'%3E%3Cstyle type='text/css'%3E .st0%7Bfill:%23014299;%7D .st1%7Bfill:%23FFFFFF;%7D %3C/style%3E%3Ccircle class='st0' cx='56.69' cy='56.69' r='56.69'/%3E%3Cg%3E%3Cpath class='st1' d='M44.25,59.41c-1.43,0-2.59,1.16-2.59,2.59v20.28c0,1.43,1.16,2.59,2.59,2.59c1.43,0,2.59-1.16,2.59-2.59V62 C46.84,60.57,45.68,59.41,44.25,59.41z'/%3E%3Cpath class='st1' d='M56.69,59.41c-1.45,0-2.62,1.17-2.62,2.62v26.47c0,1.45,1.17,2.62,2.62,2.62s2.62-1.17,2.62-2.62V62.02 C59.31,60.58,58.14,59.41,56.69,59.41z'/%3E%3Cpath class='st1' d='M79.26,78.87c-0.33,0.15-0.64,0.28-0.95,0.38c0,0-0.01,0-0.01,0c-0.59,0.19-1.13,0.29-1.63,0.31h-0.06 c-1,0.03-1.84-0.27-2.59-0.75c-0.49-0.32-0.91-0.73-1.25-1.23c-0.3-0.43-0.53-0.93-0.71-1.51c0-0.01-0.01-0.02-0.01-0.03 c-0.22-0.74-0.34-1.61-0.34-2.59V62.02c0-1.45-1.17-2.62-2.62-2.62c-1.45,0-2.62,1.17-2.62,2.62v11.43c0,4.5,1.64,8.03,4.63,9.96 c1.5,0.97,3.21,1.45,5.04,1.45c1.68,0,3.45-0.41,5.25-1.22c1.32-0.59,1.9-2.14,1.31-3.46C82.13,78.86,80.57,78.27,79.26,78.87z'/%3E%3Cpath class='st1' d='M68.33,45.9c0-2.15-1.75-3.9-3.9-3.9c-2.15,0-3.9,1.75-3.9,3.9s1.75,3.9,3.9,3.9 C66.58,49.8,68.33,48.05,68.33,45.9z'/%3E%3Cpath class='st1' d='M48.96,41.99c-2.15,0-3.9,1.75-3.9,3.9s1.75,3.9,3.9,3.9s3.9-1.75,3.9-3.9S51.11,41.99,48.96,41.99z'/%3E%3Cpath class='st1' d='M56.69,22.28c-15.17,0-27.52,12.34-27.52,27.52v15.09c0,1.46,1.18,2.64,2.64,2.64s2.64-1.18,2.64-2.64V49.8 c0-12.26,9.98-22.24,22.24-22.24c12.26,0,22.24,9.98,22.24,22.24v15.09c0,1.46,1.18,2.64,2.64,2.64s2.64-1.18,2.64-2.64V49.8 C84.21,34.62,71.87,22.28,56.69,22.28z'/%3E%3C/g%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'oct.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Debio',\n symbol: 'DBIO',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIxOTAgOTcgNDIwIDQyMCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgODAwIDgwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZGVmcz48c3R5bGU+LnN0MHtmaWxsOiMzNjM2MzZ9LnN0M3tmaWxsOiNmZjU2ZTB9PC9zdHlsZT48L2RlZnM+PGNpcmNsZSBjbGFzcz0ic3QzIiBjeD0iNDAwIiBjeT0iMzA3LjM5IiByPSIyMDguNTgiLz48cGF0aCBkPSJNNDczLjk5IDIxMS4zczIuMzQgNTYuMjUtNzcuMzQgOTguNDMtNzAuMzEgOTMuNzQtNzAuMzEgOTMuNzQiIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiNlNmU2ZTY7c3Ryb2tlLXdpZHRoOjM3LjQ5NzU7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MTAiLz48cGF0aCBkPSJNMzI2LjAxIDIxMS4zcy0yLjM0IDU2LjI1IDc3LjM0IDk4LjQzIDcwLjMxIDkzLjc0IDcwLjMxIDkzLjc0IiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojZmZmO3N0cm9rZS13aWR0aDozNy40OTc1O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjEwIi8+PGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iNDAwIiBjeT0iMjE2LjQyIiByPSIyMC40OSIvPjxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjQwMCIgY3k9IjM5OC4zNiIgcj0iMjAuNDkiLz48dGV4dCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMzYuMzQyIDY1OC4wNzUpIiBjbGFzcz0ic3QzIiBzdHlsZT0id2hpdGUtc3BhY2U6cHJlO2ZvbnQtc2l6ZToxMTIuNDkyNXB4O2ZvbnQtZmFtaWx5OidBcnRlZ3JhU2Fucy1TZW1pQm9sZCciPkRlQmlvPC90ZXh0Pjwvc3ZnPg==',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'dbio.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Game GEM!!',\n symbol: 'gGEM',\n icon: null,\n reference: null,\n reference_hash: null,\n decimals: 4,\n id: 'gem.thegame.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Game Gold!!',\n symbol: 'gGOLD',\n icon: null,\n reference: null,\n reference_hash: null,\n decimals: 2,\n id: 'gold.thegame.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Game Elixir!!',\n symbol: 'gELXR',\n icon: null,\n reference: null,\n reference_hash: null,\n decimals: 2,\n id: 'elixir.thegame.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'USN',\n symbol: 'USN',\n icon:\n \"data:image/svg+xml;charset=UTF-8,%3Csvg width='38' height='38' viewBox='0 0 38 38' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='38' height='38' rx='19' fill='black'/%3E%3Cpath d='M14.8388 10.6601C14.4203 10.1008 13.6748 9.86519 12.9933 10.0768C12.3119 10.2885 11.85 10.8991 11.85 11.5883V14.7648H8V17.9412H11.85V20.0589H8V23.2353H11.85V28H15.15V16.5108L23.1612 27.2165C23.5797 27.7758 24.3252 28.0114 25.0067 27.7997C25.6881 27.5881 26.15 26.9775 26.15 26.2882V23.2353H30V20.0589H26.15V17.9412H30V14.7648H26.15V10.0001H22.85V21.3658L14.8388 10.6601Z' fill='white'/%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'usdn.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Learn NEAR Club',\n symbol: 'LNC',\n icon:\n 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/4gIoSUNDX1BST0ZJTEUAAQEAAAIYAAAAAAQwAABtbnRyUkdCIFhZWiAAAAAAAAAAAAAAAABhY3NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlkZXNjAAAA8AAAAHRyWFlaAAABZAAAABRnWFlaAAABeAAAABRiWFlaAAABjAAAABRyVFJDAAABoAAAAChnVFJDAAABoAAAAChiVFJDAAABoAAAACh3dHB0AAAByAAAABRjcHJ0AAAB3AAAADxtbHVjAAAAAAAAAAEAAAAMZW5VUwAAAFgAAAAcAHMAUgBHAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFhZWiAAAAAAAABvogAAOPUAAAOQWFlaIAAAAAAAAGKZAAC3hQAAGNpYWVogAAAAAAAAJKAAAA+EAAC2z3BhcmEAAAAAAAQAAAACZmYAAPKnAAANWQAAE9AAAApbAAAAAAAAAABYWVogAAAAAAAA9tYAAQAAAADTLW1sdWMAAAAAAAAAAQAAAAxlblVTAAAAIAAAABwARwBvAG8AZwBsAGUAIABJAG4AYwAuACAAMgAwADEANv/bAEMAAwICAgICAwICAgMDAwMEBgQEBAQECAYGBQYJCAoKCQgJCQoMDwwKCw4LCQkNEQ0ODxAQERAKDBITEhATDxAQEP/bAEMBAwMDBAMECAQECBALCQsQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEP/AABEIACAAIAMBIgACEQEDEQH/xAAZAAADAAMAAAAAAAAAAAAAAAAABgcDBAj/xAAjEAACAgICAgMAAwAAAAAAAAABAgMEBQYAEQcSEyExFCJB/8QAGAEAAgMAAAAAAAAAAAAAAAAAAQMABwj/xAAlEQACAQMDBAIDAAAAAAAAAAABEQMAAgQxQWESIZHwUXGBwfH/2gAMAwEAAhEDEQA/AOqOHNHN5vF67jnyuZtCtVSSKJpCjN00kixoOlBP27qPz/fv64qZDzBq+L8h2/Gt2rk0yVXFJlROK3tVlVhMwhEoPSzeteZgr+vsqMVJ9W6zZHBLKCbLSV38J+GKva+aONC8p/v+U88ORWv5t3fyTFTbwTpWPvxpjMfl8lc2O49SvCLldbENGMwLJ72vidWf7CxB4ifcSDqmaPseS2rXIMtmdYva9kRJLWuY632TDPE5jf436HyxFlJjlAAdCrADvrjZ8OXHt6pEOGGPhjUP3alxZUc9ys78oo/R0rD5E1O3u+oXdboZaPGWrD15oLctU2EikhnjlUtGHQuCYwCPZf394jZDwNc2pdht75uMF3LZ2ji4I72LxQpGhZoT25YLMKySzdN1aVSpJBCOD2shVa7w5IcyaC3ojKDegex1T2HbTtRkxYpruq8MpannbTc1EcB4D3jx3UxaeLPK1fFSpgcfhsxBkcH/AC6V+epWirR5CKFZ42gn+OPpv7uHCQq31GDymeP9XymnarTwed27JbPk0LzXcrfIElmeRy8jKgJEUfsxCRKSqIFUdgd8YuHDPmzZIUpB5QB4ZAZ9+BQhxIoC4wR+SvDXvNf/2Q==',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'lnc.factory.tokenhub.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Wrapped BTC',\n symbol: 'WBTC',\n icon:\n \"data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none'%3E%3Ccircle fill='%23201A2D' cx='16' cy='16' r='16'/%3E%3Cg fill='%23FFF'%3E%3Cpath d='M22.818 9.586l-.6.6a8.494 8.494 0 010 11.464l.6.6a9.352 9.352 0 000-12.678v.014zM10.2 9.638a8.494 8.494 0 0111.464 0l.6-.6a9.352 9.352 0 00-12.678 0l.614.6zm-.562 12.018a8.494 8.494 0 010-11.458l-.6-.6a9.352 9.352 0 000 12.678l.6-.62zm12.018.554a8.494 8.494 0 01-11.464 0l-.6.6a9.352 9.352 0 0012.678 0l-.614-.6zm-1.942-8.286c-.12-1.252-1.2-1.672-2.566-1.8V10.4h-1.056v1.692h-.844V10.4H14.2v1.736h-2.142v1.13s.78-.014.768 0a.546.546 0 01.6.464v4.752a.37.37 0 01-.128.258.366.366 0 01-.272.092c.014.012-.768 0-.768 0l-.2 1.262h2.122v1.764h1.056V20.12h.844v1.73h1.058v-1.744c1.784-.108 3.028-.548 3.184-2.218.126-1.344-.506-1.944-1.516-2.186.614-.302.994-.862.908-1.778zm-1.48 3.756c0 1.312-2.248 1.162-2.964 1.162v-2.328c.716.002 2.964-.204 2.964 1.166zm-.49-3.28c0 1.2-1.876 1.054-2.472 1.054v-2.116c.596 0 2.472-.188 2.472 1.062z'/%3E%3Cpath d='M15.924 26.852C9.89 26.851 5 21.959 5 15.925 5 9.892 9.892 5 15.925 5c6.034 0 10.926 4.89 10.927 10.924a10.926 10.926 0 01-10.928 10.928zm0-21c-5.559.004-10.062 4.513-10.06 10.072.002 5.559 4.51 10.064 10.068 10.064 5.559 0 10.066-4.505 10.068-10.064A10.068 10.068 0 0015.924 5.852z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 8,\n id: 'wbtc.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Huobi BTC',\n symbol: 'HBTC',\n icon: null,\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'hbtc.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Celo Dollar',\n symbol: 'cUSD',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiBoZWlnaHQ9IjEwMCIgdmlld0JveD0iMCAwIDEwMCAxMDAiIHdpZHRoPSIxMDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0ibTEwMCA1MGMwLTI3LjYxNDItMjIuMzg1OC01MC01MC01MHMtNTAgMjIuMzg1OC01MCA1MCAyMi4zODU4IDUwIDUwIDUwIDUwLTIyLjM4NTggNTAtNTB6IiBmaWxsPSIjNDVjZDg1Ii8+PGcgZmlsbD0iI2ZmZiI+PHBhdGggZD0ibTY5Ljg4MDUgNjIuNjQzOGMtMS41NjcxIDMuMzkzMS0zLjkzNzUgNi4zNTMyLTYuOTA2MSA4LjYyNDEtMi45Njg1IDIuMjcwOC02LjQ0NTggMy43ODQxLTEwLjEzMDcgNC40MDg3LTMuNjg1LjYyNDYtNy40NjY3LjM0MTctMTEuMDE3Ny0uODI0MS0zLjU1MTEtMS4xNjU4LTYuNzY0Ni0zLjE3OTQtOS4zNjIzLTUuODY2Ni0yLjU5NzgtMi42ODcxLTQuNTAxNS01Ljk2NjktNS41NDY1LTkuNTU1NC0xLjA0NDktMy41ODg1LTEuMTk5Ni03LjM3NzUtLjQ1MDctMTEuMDM5My43NDg5LTMuNjYxNyAyLjM3ODktNy4wODU3IDQuNzQ4OS05Ljk3NTggMi4zNzAxLTIuODkgNS40MDg3LTUuMTU4OSA4Ljg1MjktNi42MTAzbDIuMjY2OCA1LjM3OTJjLTIuNTcgMS4wODMxLTQuODM3NSAyLjc3NjEtNi42MDYgNC45MzI3LTEuNzY4NSAyLjE1NjUtMi45ODQ4IDQuNzExNS0zLjU0MzYgNy40NDM5LS41NTg5IDIuNzMyNC0uNDQzNSA1LjU1OTguMzM2MyA4LjIzNzYuNzc5OCAyLjY3NzcgMi4yMDAzIDUuMTI1MSA0LjEzODggNy4xMzAyIDEuOTM4NCAyLjAwNTIgNC4zMzYzIDMuNTA3OCA2Ljk4NjEgNC4zNzc3czUuNDcxNyAxLjA4MSA4LjIyMTUuNjE0OWMyLjc0OTctLjQ2NjEgNS4zNDQ0LTEuNTk1MyA3LjU1OTUtMy4yODk4IDIuMjE1Mi0xLjY5NDUgMy45ODQtMy45MDMzIDUuMTUzNC02LjQzNTNsNS45MTg5LjMwNDJ6Ii8+PHBhdGggZD0ibTU2LjEwNjEgMjQuNXYtNGg0LjUwMDV2NGMyIDAgNS4xNjY3LjY2NjcgNi41IDF2NC41Yy0xOS0zLTE1LjUwMTEgMy44NDYyLTggNSA2LjcyMTcgMS4wMzM5IDExIDIgMTEuNSA5IC40IDUuNi01LjgzMzMgNy42NjY3LTkgOHYzLjVoLTV2LTMuNWMtMi40IDAtNi42NjY3LTEuNjY2Ny04LjUtMi41di01LjVjNC41IDIuNSAxNyA0LjUgMTcgMHMtMTYuNTAxMS0zLTE4LjAwMDUtMTFjLTEuMDAyMy01LjM0NzUgNS4zMzMzLTcuODMzMyA5LTguNXoiLz48L2c+PC9zdmc+',\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'cusd.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'LiNEAR',\n symbol: 'LINEAR',\n icon:\n \"data:image/svg+xml,%3Csvg width='40' height='40' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M30.74 28.78c.21-.36.32-.78.32-1.21v-6.33c0-.24-.06-.46-.17-.66-.12-.21-.28-.38-.48-.49l-16.86-9.77c-.35-.2-.73-.31-1.13-.32-.64 0-1.24.26-1.69.72-.45.45-.7 1.07-.71 1.71v6.39c0 .24.06.47.18.67.11.21.28.37.48.48l16.82 9.71c.36.22.77.32 1.19.32.41 0 .82-.12 1.19-.33.36-.21.66-.52.86-.89zm.32-16.27c0-.42-.1-.84-.29-1.21-.2-.38-.49-.7-.85-.93-.36-.22-.78-.34-1.21-.34-.42 0-.84.12-1.21.34l-4.97 2.81c-.04.02-.08.07-.1.12-.03.04-.04.1-.04.14 0 .06.01.11.04.16.02.04.06.08.1.1l8.05 4.62c.05.02.1.04.15.04.05 0 .1-.02.15-.05.04-.02.08-.06.11-.11.02-.04.04-.1.03-.15l.04-5.54zM10.05 27.5c-.01.43.08.86.28 1.23.2.38.49.7.85.93.36.22.78.34 1.2.34.42 0 .83-.12 1.2-.34l4.92-2.85c.04-.02.08-.06.1-.11.03-.04.05-.1.05-.15 0-.05-.02-.11-.05-.15-.02-.05-.06-.09-.1-.12l-8.05-4.6c-.05-.03-.09-.04-.15-.04-.05 0-.1.01-.15.04-.05.02-.08.07-.11.12-.02.04-.04.09-.04.14l.05 5.56z' fill='url(%23paint0_linear_186_370)'/%3E%3Cdefs%3E%3ClinearGradient id='paint0_linear_186_370' x1='11.135' y1='11.152' x2='30.145' y2='30.457' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%231BB3CC'/%3E%3Cstop offset='1' stop-color='%23824ACC'/%3E%3C/linearGradient%3E%3C/defs%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'linear-protocol.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Staked NEAR',\n symbol: 'STNEAR',\n icon:\n \"data:image/svg+xml,%3Csvg width='96' height='96' viewBox='0 0 96 96' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='96' height='96' rx='48' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M48.0006 20L41.2575 26.7431L48.0006 33.4862L54.7437 26.7431L48.0006 20ZM37.281 30.7188L30.7144 37.2853L47.9998 54.5707L65.2851 37.2853L58.7186 30.7188L47.9998 41.4376L37.281 30.7188ZM26.7384 41.261L19.9953 48.0041L47.9995 76.0083L76.0037 48.0041L69.2606 41.2611L47.9995 62.5221L26.7384 41.261Z' fill='%23231B51'/%3E%3C/svg%3E\",\n reference: 'https://metapool.app',\n reference_hash: null,\n decimals: 24,\n id: 'meta-v2.pool.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'NearX',\n symbol: 'NearX',\n icon:\n \"data:image/svg+xml,%0A%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M24 12C24 18.6274 18.6274 24 12 24C5.37258 24 0 18.6274 0 12C0 5.37258 5.37258 0 12 0C18.6274 0 24 5.37258 24 12ZM17.1421 21.3848L21.3848 17.1421L19.3669 15.1243C18.5576 17.0303 17.0303 18.5576 15.1243 19.3669L17.1421 21.3848ZM9.43294 19.5793C7.45322 18.909 5.82115 17.4848 4.87848 15.6484L3.24264 17.2843L7.48528 21.5269L9.43294 19.5793ZM4.63306 8.8757C5.44239 6.96975 6.96975 5.44239 8.8757 4.63306L7.24264 3L3 7.24264L4.63306 8.8757ZM15.6484 4.87848L17.3848 3.14214L21.6274 7.38478L19.5793 9.43294C18.909 7.45322 17.4848 5.82115 15.6484 4.87848Z' fill='black'/%3E%3Cpath d='M8.00119 11.9921C8.00119 11.0268 8.00119 10.0615 8.00119 9.09612C8.00119 8.50505 8.16497 8.1743 8.56285 8.05781C8.97778 7.93628 9.40619 7.97917 9.79565 8.45228C11.3533 10.3447 12.9343 12.218 14.5092 14.0959C14.5692 14.1676 14.6117 14.3122 14.734 14.2626C14.8496 14.2157 14.7858 14.0805 14.786 13.9878C14.7904 12.6326 14.7898 11.2774 14.7868 9.92226C14.7868 9.83668 14.838 9.7162 14.7271 9.67372C14.6401 9.64029 14.5824 9.74185 14.522 9.79358C14.0492 10.1981 13.5804 10.6073 13.1088 11.0133C13.0208 11.089 12.9332 11.2118 12.8002 11.1012C12.6657 10.9894 12.7696 10.8872 12.8364 10.7881C13.3547 10.0186 13.8728 9.24898 14.3909 8.47919C14.6656 8.07085 15.0079 7.92282 15.4056 8.04141C15.786 8.15475 15.9986 8.48592 15.9992 8.97668C16.0007 10.0905 15.9996 11.2045 15.9996 12.3183C15.9996 13.2094 16.0003 14.1005 15.9994 14.9916C15.999 15.4826 15.8137 15.798 15.4512 15.9324C15.0256 16.0901 14.5767 15.9683 14.2734 15.6058C12.6823 13.705 11.0924 11.8029 9.50198 9.90144C9.46029 9.85161 9.42303 9.7961 9.37377 9.75489C9.28998 9.68487 9.21967 9.68108 9.21314 9.81797C9.20999 9.88273 9.21188 9.94791 9.21188 10.0129C9.21188 11.3496 9.21062 12.6862 9.2142 14.0227C9.21441 14.1186 9.15609 14.2557 9.26114 14.3038C9.38093 14.3587 9.45061 14.2178 9.52998 14.1503C9.98259 13.7651 10.4291 13.3728 10.8805 12.9859C10.9729 12.9066 11.0626 12.7651 11.208 12.8973C11.3402 13.0176 11.2213 13.1196 11.159 13.2127C10.6323 13.9989 10.1032 14.7837 9.57145 15.5663C9.32788 15.9248 8.9881 16.056 8.61085 15.9488C8.23739 15.8428 8.00498 15.5246 8.00287 15.0827C7.99761 14.0523 8.00119 13.022 8.00119 11.9917V11.9921Z' fill='white'/%3E%3C/svg%3E\",\n reference: 'https://near.staderlabs.com',\n reference_hash: null,\n decimals: 24,\n id: 'v2-nearx.staderlabs.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'refLove Finance Token',\n symbol: 'refLove',\n icon:\n 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDIxLjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCAyODggMzI0IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAyODggMzI0OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Cgkuc3Qwe2ZpbGw6IzAwQzA4Qjt9Cjwvc3R5bGU+CjxnPgoJPHBhdGggZD0iTTE3My40LDE5MS40VjI2OEgyNTBMMTczLjQsMTkxLjR6IE0xMDcuMiwxMjUuMmwzMCwzMGwzMC4zLTMwLjNWNjkuMmgtNjAuNFYxMjUuMnogTTEwNy4yLDE1Mi4zVjI2OGg2MC40VjE1MmwtMzAuMywzMC4zCgkJTDEwNy4yLDE1Mi4zeiBNMTc3LjEsNjkuMmgtMy43VjExOUwyMTIsODAuNUMyMDEuOCw3My4yLDE4OS42LDY5LjIsMTc3LjEsNjkuMnogTTM4LDE3NS41VjI2OGg2My4zVjE0Ni40bC0xNy4xLTE3LjFMMzgsMTc1LjV6CgkJIE0zOCwxNDguNWw0Ni4yLTQ2LjJsMTcuMSwxNy4xVjY5LjJIMzhWMTQ4LjV6IE0yMzYuOCwxMjguOUwyMzYuOCwxMjguOWMwLTEyLjUtMy45LTI0LjctMTEuMi0zNC44bC01Mi4xLDUydjQyLjRoMy43CgkJQzIxMC4xLDE4OC41LDIzNi44LDE2MS44LDIzNi44LDEyOC45eiIvPgoJPHBvbHlnb24gY2xhc3M9InN0MCIgcG9pbnRzPSIyMTAuMiw1NiAyNTAsOTUuOCAyNTAsNTYgCSIvPgo8L2c+Cjwvc3ZnPgo=',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'v010.refve.testnet',\n },\n {\n decimals: 18,\n icon:\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAs3SURBVHhe7Z1XqBQ9FMdFsYu999577wUfbCiiPoggFkQsCKJP9t57V7AgimLBjg8qKmLBXrD33hVUEAQ1H7+QXMb9Zndnd+/MJJf7h8Pu3c3Mzua3yTk5SeZmEZkySplADFMmEMOUCcQwZQggHz58EHfu3FF/2a0MAWTjxo2iWbNm6i+7ZT2QW7duiUWLFolixYqJQ4cOqVftlfVAZs6cKdauXSuqV68uKlWqpF61V1YDoUXMmTNHrFu3TtSoUUNCmTBhgnrXTlkL5Nu3b2Ly5MmyuwJIzZo1RaNGjUTx4sXFu3fvVCn7ZC2QVatWiQULFvwPSL169USnTp1UKftkJZCbN2+KGTNmSBiLFy/+BwhWoUIFsX//flXaLlkJZPr06WkwIoE0btxYNGzYUFSsWFGVtkvWATlw4IB05BqGGxAMBz9u3Dh1lD2yCsjXr1/THHk8IDwvVaqUeP36tTraDlkFZOXKldKRO2HEAoKD79ixozraDlkD5Pr16/848nhANBQc/N69e9VZzJc1QCIduRcgGA4eKLbICiD79u37nyN3WiwgvMZ7Y8eOVWczW8YDwZFPmTIlauvA4gHhsUSJEuLFixfqrObKeCArVqxwdeROiwUE43UcfNu2bdVZzZXRQK5duyYduRsEp8UDog1fsnPnTnV2M2U0kFiO3GlegeDgy5cvr85upowFQqg6d+5cVwCR5hUI71NuzJgx6lPMk5FAPn365Doij2ZegWCUIUX/9OlT9WlmyUggy5Yti+vInZYIEAwH37JlS/VpZsk4IJcvX5bTsl5bB5YoEMqRDd62bZv6VHNkHJBp06YlBANLFAiGgy9btqz6VHNkFJBdu3Z5duROSwYIxjEjRoxQn26GjAHy8ePHuCPyaJYsEMozgn/48KG6ivBlDJAlS5Yk5MidlgqQ+vXri+bNm6urCF9GALl48aJ05G6V7cWSBYJxDOu5Nm/erK4mXBkBJBlH7rRUgGAmOfjQgZBbSsaROy1VIBjHDxs2TF1VeAoVyPv37+WI3K2SE7H0AMKxJUuWFHfv3lVXF45CBZKKI3daegDBcPBNmzZVVxeOQgNy/vz5hEfkbsbxAGFtb6pAOL5y5cpye0NYCg1Iqo5c29KlS2WEVKdOHdGkSZOUoeDgS5cura4yeIUCZMeOHWLevHkpASEBScvAB/Xs2VMUKVJE1K1bV44pUgHDcbVq1RJDhgxRVxusAgfy5s0bMXXq1IRgOMsuX75c7gcZP368aN++vez3W7VqJfLnzy8KFCggU+tUKNncZMFwDA6eNcRBK3AgCxculOas8HiG82duffXq1WLkyJGiRYsWokGDBrI1UPHMlQOjaNGisqUUKlRIPrKclLKA0RUdWfnRDNCUD1qBAjl79qyYNWuWa6VHGq0CEGw7oHsaNGiQrCBMg9DmBKJNgylYsKAciQOFfYhUtlcwHEe3GKQCA/Lnzx/PyUMc9Zo1a+SAsV+/fvLXSgXxa3eCiAXECaZw4cISDPPpGijniweG93HwXHtQCgwIk0E4cjcAGhItAf8AuG7dukknzbgAENFgYLGAaNNgKMcibGYNdXdGxUeDgz8aOHCg+hb+KxAgr169kpUcCUKb01GzOJrKonuJB0KbFyBOAw4thgCgdu3aaWAA4AYGB8/a4iAUCBBG405Hrv2Dm6MGhFulx7JEgWjTYHisVq2a/GxapBMGgLguLAj5DuTMmTP/OHLtqPETdAW6u4h01IlYskC06e6MIICROlA0GH19vM51+y1fgfz+/TvNkWtHjR/p27ev7JboJrx2S7EsVSAYUDCgcC4CAEbtXJsGg4PnO/kpX4Fs3bpVwiB0BEz37t09O+pELD2AOE23GM5ZpkwZGeVxraRnBgwYoL6dP/INCCNyfAeOukOHDmmZVLcKTdXSG4jTNBidAaDlXLlyRX3L9JdvQPr06SObvHbU6dUa3MxPINp0d5Y3b16RJ08e9S3TX74Befz4sejcubOoWrWqdNi2AgEEj8DIkiWLdO4PHjxQ3zL95asPQQcPHpSTR/gOv6D4BUQ7+uzZs4usWbOK7du3q2/ln3wHosU+j3LlysmIxa1SUzG/gOTLl0+2ilGjRqlv4b8CA4K+fPkievXqJZt9MgPAaJbeQHT3hA9kJX6QChSI1smTJ+U4RKct3Co5EUsvIHRP2bJlEzlz5hRHjhxRVxusfANy4cIF9Sy6GLnrAZhbRXu1VIEAguiJVuHlfltbtmxRz9JfvgHhxpQMBt++fatecdfPnz/lYIvtAcmOU1IBQi4LEG3atJHXEkssEWK0fvv2bfVK+svXLosJKW4AQ3QSb07h6tWr0uEz+Eq0G0sGCAM+IieOI98WS3///hVDhw4VOXLkkAlRP+W7D9mwYYNMLtJa4n1xRBqe3bIMKL2CSQQI3VPu3Lllq+C64olsNPMnBCJdunRRr/qnQJw6IS/pdypg/vz5cff38YscPny49C9eujGvQCgDiB49eqhPii4WgJPuAQQ+Lqi1v4EAefToUVrWFzCsyWIx2q9fv1QJd92/f1+0bt1aLlaINdqPB4TuCRD80rmtbCzhR8hG66SizvKeOHFClfBXgQBBe/bskfcr0dO1pOFZU3Xs2DFVIrqY/q1SpUpa1tUrELqnXLlySRhe5jKYw2d2kHBcz4OwIjLIXVaBAUF0V5Ezh7Nnz5Z27949VSq6CBDoOphHiQYECDyyTgsQ/fv3V0dH1/Hjx2V6h7wbEAguMH4ABBlBKlAgbneE090Yd21Yv369+P79uyrtrpcvX/6TtIwEorsnlvA8efJEHeUuRuFdu3aVKR2CCCcMnpNyf/78uSodjAIFgk6fPh11txQtCGBebhlO0pLuhKSlBkISEBhMjMXTxIkTZYVzvBOEhgFQriloBQ4EEUrGWhKEryEyu3HjhjoiuggWqDxAeOnrufcW5QkUIkFoGEBiUi0MhQKEeel4q995DyjcZ/Hz58/qSHfRrcTbSUuZdu3ayTEOYawbDIz3iLDiRYB+KRQgiP/3waJrNxjagMI0MK2AKC1ZjR49Wm5/JqEZDQTGe8A4fPiwOjJ4hQYEsS3By/5CwFCOVsWAzatIAhKVed3MQznWEIepUIEg/IUzFI5lgCEgYG1XrKQlyT9CY3wFXZBb5UcaURZ+JWyFDoSs8KRJk2L6E6dRDoB0YyQtneukSGAOHjxYDu70KNut8iONckRcJvzbpNCBIAZmXrcpYBoekRpgyBQzhiE1wkDOKwiMsuSr6BJNkBFAENEU45DIyo9nwGGxNs44ERAY5QlxmQsxRcYAIcxMdKubtmS3RVOe7u3Hjx/qKsKXMUAQA0EiKbdKj2XJAiEC2717t/p0M2QUEETaw0so7LREgVCO8l4Sj0HLOCAIB+81FMYSAUIZQmGSkybKSCAs1I7MCseyRIEwaveSJwtDRgJBR48e9RwKewXC+0x0AdtUGQsEMSL3cnMaL0B4j1wWc/Qmy2ggzG/ruXg3ENq8AmHgyCSZyTIaCLp06VLce8DHA8LrrGDxMnEVtowHgjZt2hR1QguLB4R0Su/evdXZzJYVQJBe25UoELK4Nv1PQ2uAPHv2LKo/iQaEv0mNeFn4bYqsAYL4p5IsGfIChOfMb7Dp1CZZBQTRQiJDYTcgerrWNlkHhHVbkV1XJBAemXDirqe2yTog6Ny5c9LJayhOIBgrS1h1b6OsBIKocB0KO4FwtwVu7WSrrAWC9NouDYQsLstCbZbVQNjmwCwjQFjCwzTuqVOn1Lt2ymogiBk/PafOfbdsl/VAEEBs+gfEsZQhgDChxVKgjKAMASQjKROIYcoEYpgygRglIf4D6lp/+XognSwAAAAASUVORK5CYII=',\n name: 'Ether',\n reference: null,\n reference_hash: null,\n spec: 'ft-1.0.0',\n symbol: 'ETH',\n id: 'aurora',\n },\n {\n spec: 'ft-1.0.0',\n name: 'USDT',\n symbol: 'USDT',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 288 288'%3E%3Cg id='l' data-name='l'%3E%3Cpath d='M187.58,79.81l-30.1,44.69a3.2,3.2,0,0,0,4.75,4.2L191.86,103a1.2,1.2,0,0,1,2,.91v80.46a1.2,1.2,0,0,1-2.12.77L102.18,77.93A15.35,15.35,0,0,0,90.47,72.5H87.34A15.34,15.34,0,0,0,72,87.84V201.16A15.34,15.34,0,0,0,87.34,216.5h0a15.35,15.35,0,0,0,13.08-7.31l30.1-44.69a3.2,3.2,0,0,0-4.75-4.2L96.14,186a1.2,1.2,0,0,1-2-.91V104.61a1.2,1.2,0,0,1,2.12-.77l89.55,107.23a15.35,15.35,0,0,0,11.71,5.43h3.13A15.34,15.34,0,0,0,216,201.16V87.84A15.34,15.34,0,0,0,200.66,72.5h0A15.35,15.35,0,0,0,187.58,79.81Z'/%3E%3C/g%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'usdt.itachicara.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'USDC',\n symbol: 'USDC',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 288 288'%3E%3Cg id='l' data-name='l'%3E%3Cpath d='M187.58,79.81l-30.1,44.69a3.2,3.2,0,0,0,4.75,4.2L191.86,103a1.2,1.2,0,0,1,2,.91v80.46a1.2,1.2,0,0,1-2.12.77L102.18,77.93A15.35,15.35,0,0,0,90.47,72.5H87.34A15.34,15.34,0,0,0,72,87.84V201.16A15.34,15.34,0,0,0,87.34,216.5h0a15.35,15.35,0,0,0,13.08-7.31l30.1-44.69a3.2,3.2,0,0,0-4.75-4.2L96.14,186a1.2,1.2,0,0,1-2-.91V104.61a1.2,1.2,0,0,1,2.12-.77l89.55,107.23a15.35,15.35,0,0,0,11.71,5.43h3.13A15.34,15.34,0,0,0,216,201.16V87.84A15.34,15.34,0,0,0,200.66,72.5h0A15.35,15.35,0,0,0,187.58,79.81Z'/%3E%3C/g%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'usdc.itachicara.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Staked CORN',\n symbol: 'xCORN',\n icon:\n \"data:image/svg+xml,%3Csvg width='300' height='300' viewBox='0 0 300 300' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M150.43 32L99.7144 61.4389L150.43 90.8705L201.145 61.4389L150.43 32Z' fill='%235C65A5'/%3E%3Cpath d='M201.146 61.4388L150.431 90.8703L201.146 120.309L251.854 90.8703L201.146 61.4388Z' fill='%233B4274'/%3E%3Cpath d='M99.7152 61.4388L49 90.8703L99.7152 120.309L150.43 90.8703L99.7152 61.4388Z' fill='%233B4274'/%3E%3Cpath d='M150.43 90.8707L99.7144 120.31L150.43 149.749L201.145 120.31L150.43 90.8707Z' fill='%235C65A5'/%3E%3Cpath d='M99.7152 120.31L49 90.8707V149.749L99.7152 179.187V120.31Z' fill='%235C65A5'/%3E%3Cpath d='M150.43 149.748L99.7144 120.309V179.187L150.43 208.626V149.748Z' fill='%233B4274'/%3E%3Cpath d='M99.7152 179.187L49 149.748V208.626L99.7152 238.058V179.187Z' fill='%233B4274'/%3E%3Cpath d='M150.43 208.626L99.7144 179.187V238.057L150.43 267.496V208.626Z' fill='%235C65A5'/%3E%3Cpath d='M150.431 267.496L201.146 238.057L150.431 208.626V267.496Z' fill='%233B4274'/%3E%3Cpath d='M224.085 213.702L209.447 198.197L194.809 213.702H167.656L195.643 182.183L167.656 150.665H194.809L209.447 166.933L224.085 150.665H251.086L223.175 182.183L251.086 213.702H224.085Z' fill='%233B4274'/%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'xcorn.corndao.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Tether USD',\n symbol: 'USDt',\n icon:\n \"data:image/svg+xml,%3Csvg width='111' height='90' viewBox='0 0 111 90' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M24.4825 0.862305H88.0496C89.5663 0.862305 90.9675 1.64827 91.7239 2.92338L110.244 34.1419C111.204 35.7609 110.919 37.8043 109.549 39.1171L58.5729 87.9703C56.9216 89.5528 54.2652 89.5528 52.6139 87.9703L1.70699 39.1831C0.305262 37.8398 0.0427812 35.7367 1.07354 34.1077L20.8696 2.82322C21.6406 1.60483 23.0087 0.862305 24.4825 0.862305ZM79.8419 14.8003V23.5597H61.7343V29.6329C74.4518 30.2819 83.9934 32.9475 84.0642 36.1425L84.0638 42.803C83.993 45.998 74.4518 48.6635 61.7343 49.3125V64.2168H49.7105V49.3125C36.9929 48.6635 27.4513 45.998 27.3805 42.803L27.381 36.1425C27.4517 32.9475 36.9929 30.2819 49.7105 29.6329V23.5597H31.6028V14.8003H79.8419ZM55.7224 44.7367C69.2943 44.7367 80.6382 42.4827 83.4143 39.4727C81.0601 36.9202 72.5448 34.9114 61.7343 34.3597V40.7183C59.7966 40.8172 57.7852 40.8693 55.7224 40.8693C53.6595 40.8693 51.6481 40.8172 49.7105 40.7183V34.3597C38.8999 34.9114 30.3846 36.9202 28.0304 39.4727C30.8066 42.4827 42.1504 44.7367 55.7224 44.7367Z' fill='%23009393'/%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 6,\n id: 'usdtt.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Staked CORN',\n symbol: 'xCORN',\n icon:\n \"data:image/svg+xml,%3Csvg width='300' height='300' viewBox='0 0 300 300' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M150.43 32L99.7144 61.4389L150.43 90.8705L201.145 61.4389L150.43 32Z' fill='%235C65A5'/%3E%3Cpath d='M201.146 61.4388L150.431 90.8703L201.146 120.309L251.854 90.8703L201.146 61.4388Z' fill='%233B4274'/%3E%3Cpath d='M99.7152 61.4388L49 90.8703L99.7152 120.309L150.43 90.8703L99.7152 61.4388Z' fill='%233B4274'/%3E%3Cpath d='M150.43 90.8707L99.7144 120.31L150.43 149.749L201.145 120.31L150.43 90.8707Z' fill='%235C65A5'/%3E%3Cpath d='M99.7152 120.31L49 90.8707V149.749L99.7152 179.187V120.31Z' fill='%235C65A5'/%3E%3Cpath d='M150.43 149.748L99.7144 120.309V179.187L150.43 208.626V149.748Z' fill='%233B4274'/%3E%3Cpath d='M99.7152 179.187L49 149.748V208.626L99.7152 238.058V179.187Z' fill='%233B4274'/%3E%3Cpath d='M150.43 208.626L99.7144 179.187V238.057L150.43 267.496V208.626Z' fill='%235C65A5'/%3E%3Cpath d='M150.431 267.496L201.146 238.057L150.431 208.626V267.496Z' fill='%233B4274'/%3E%3Cpath d='M224.085 213.702L209.447 198.197L194.809 213.702H167.656L195.643 182.183L167.656 150.665H194.809L209.447 166.933L224.085 150.665H251.086L223.175 182.183L251.086 213.702H224.085Z' fill='%233B4274'/%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'xcorn.v1.corndao.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Tiptoken',\n symbol: 'TT',\n icon: null,\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'tiptoken.testnet',\n },\n];\n\nexport const DefaultMainnetTokenList = [\n {\n spec: 'ft-1.0.0',\n name: 'Wrapped NEAR fungible token',\n symbol: 'wNEAR',\n icon: null,\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'wrap.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'USD Coin',\n symbol: 'USDC',\n icon:\n \"data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none'%3E%3Ccircle cx='16' cy='16' r='16' fill='%232775C9'/%3E%3Cpath d='M15.75 27.5C9.26 27.5 4 22.24 4 15.75S9.26 4 15.75 4 27.5 9.26 27.5 15.75A11.75 11.75 0 0115.75 27.5zm-.7-16.11a2.58 2.58 0 00-2.45 2.47c0 1.21.74 2 2.31 2.33l1.1.26c1.07.25 1.51.61 1.51 1.22s-.77 1.21-1.77 1.21a1.9 1.9 0 01-1.8-.91.68.68 0 00-.61-.39h-.59a.35.35 0 00-.28.41 2.73 2.73 0 002.61 2.08v.84a.705.705 0 001.41 0v-.85a2.62 2.62 0 002.59-2.58c0-1.27-.73-2-2.46-2.37l-1-.22c-1-.25-1.47-.58-1.47-1.14 0-.56.6-1.18 1.6-1.18a1.64 1.64 0 011.59.81.8.8 0 00.72.46h.47a.42.42 0 00.31-.5 2.65 2.65 0 00-2.38-2v-.69a.705.705 0 00-1.41 0v.74zm-8.11 4.36a8.79 8.79 0 006 8.33h.14a.45.45 0 00.45-.45v-.21a.94.94 0 00-.58-.87 7.36 7.36 0 010-13.65.93.93 0 00.58-.86v-.23a.42.42 0 00-.56-.4 8.79 8.79 0 00-6.03 8.34zm17.62 0a8.79 8.79 0 00-6-8.32h-.15a.47.47 0 00-.47.47v.15a1 1 0 00.61.9 7.36 7.36 0 010 13.64 1 1 0 00-.6.89v.17a.47.47 0 00.62.44 8.79 8.79 0 005.99-8.34z' fill='%23FFF'/%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 6,\n id: 'a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Tether USD',\n symbol: 'USDT.e',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Ccircle cx='16' cy='16' r='16' fill='%2326A17B'/%3E%3Cpath fill='%23FFF' d='M17.922 17.383v-.002c-.11.008-.677.042-1.942.042-1.01 0-1.721-.03-1.971-.042v.003c-3.888-.171-6.79-.848-6.79-1.658 0-.809 2.902-1.486 6.79-1.66v2.644c.254.018.982.061 1.988.061 1.207 0 1.812-.05 1.925-.06v-2.643c3.88.173 6.775.85 6.775 1.658 0 .81-2.895 1.485-6.775 1.657m0-3.59v-2.366h5.414V7.819H8.595v3.608h5.414v2.365c-4.4.202-7.709 1.074-7.709 2.118 0 1.044 3.309 1.915 7.709 2.118v7.582h3.913v-7.584c4.393-.202 7.694-1.073 7.694-2.116 0-1.043-3.301-1.914-7.694-2.117'/%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 6,\n id: 'dac17f958d2ee523a2206206994597c13d831ec7.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Dai Stablecoin',\n symbol: 'DAI',\n icon:\n \"data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Ccircle fill='%23F4B731' fill-rule='nonzero' cx='16' cy='16' r='16'/%3E%3Cpath d='M9.277 8h6.552c3.985 0 7.006 2.116 8.13 5.194H26v1.861h-1.611c.031.294.047.594.047.898v.046c0 .342-.02.68-.06 1.01H26v1.86h-2.08C22.767 21.905 19.77 24 15.83 24H9.277v-5.131H7v-1.86h2.277v-1.954H7v-1.86h2.277V8zm1.831 10.869v3.462h4.72c2.914 0 5.078-1.387 6.085-3.462H11.108zm11.366-1.86H11.108v-1.954h11.37c.041.307.063.622.063.944v.045c0 .329-.023.65-.067.964zM15.83 9.665c2.926 0 5.097 1.424 6.098 3.528h-10.82V9.666h4.72z' fill='%23FFF'/%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '6b175474e89094c44da98b954eedeac495271d0f.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Wrapped Ether',\n symbol: 'WETH',\n icon: null,\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: 'c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: '1INCH Token',\n symbol: '1INCH',\n icon: null,\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '111111111117dc0aa78b770fa6a738034120c302.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Graph Token',\n symbol: 'GRT',\n icon: null,\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: 'c944e90c64b2c07662a292be6244bdf05cda44a7.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Skyward Finance Token',\n symbol: 'SKYWARD',\n icon:\n 'data:image/png;base64,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',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'token.skyward.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Banana',\n symbol: 'BANANA',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='256' height='256'%3E%3Cdefs%3E%3Ctext id='A' x='50' y='180' font-size='180'%3E🍌%3C/text%3E%3C/defs%3E%3Cuse xlink:href='%23A'/%3E%3C/svg%3E%0A\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'berryclub.ek.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Cucumber',\n symbol: 'CUCUMBER',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='256' height='256'%3E%3Cdefs%3E%3Ctext id='A' x='50' y='180' font-size='180'%3E🥒%3C/text%3E%3C/defs%3E%3Cuse xlink:href='%23A'/%3E%3C/svg%3E%0A\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'farm.berryclub.ek.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'HuobiToken',\n symbol: 'HT',\n icon: null,\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '6f259637dcd74c767781e37bc6133cd6a68aa161.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Gitcoin',\n symbol: 'GTC',\n icon: null,\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: 'de30da39c46104798bb5aa3fe8b9e0e1f348163f.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Uniswap',\n symbol: 'UNI',\n icon:\n \"data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Ccircle fill='%23FF007A' fill-rule='nonzero' cx='16' cy='16' r='16'/%3E%3Cg fill='%23FFF'%3E%3Cpath d='M12.261 5.767c-.285-.044-.297-.05-.163-.07.257-.04.865.015 1.284.114.977.233 1.866.828 2.816 1.885l.252.28.36-.057c1.52-.245 3.067-.05 4.36.547.356.164.917.491.987.576.023.026.064.199.091.383.096.637.048 1.125-.146 1.49-.106.198-.112.26-.041.43a.416.416 0 00.372.236c.322 0 .668-.52.828-1.243l.064-.287.126.143c.692.784 1.235 1.853 1.328 2.613l.025.199-.117-.18c-.2-.31-.4-.522-.658-.693-.464-.307-.955-.411-2.255-.48-1.174-.062-1.839-.162-2.497-.377-1.121-.365-1.686-.852-3.018-2.599-.591-.776-.957-1.205-1.32-1.55-.827-.786-1.639-1.198-2.678-1.36z' fill-rule='nonzero'/%3E%3Cpath d='M22.422 7.5c.03-.52.1-.863.242-1.176.056-.124.109-.226.117-.226a.773.773 0 01-.055.204c-.103.304-.12.72-.049 1.203.09.614.142.702.79 1.365.305.311.659.703.787.872l.233.306-.233-.219c-.285-.267-.941-.79-1.086-.864-.097-.05-.112-.049-.172.01-.055.056-.067.138-.074.529-.012.608-.095 1-.296 1.39-.108.21-.125.166-.027-.073.073-.178.08-.256.08-.845 0-1.184-.141-1.468-.966-1.956a9.046 9.046 0 00-.764-.396 2.916 2.916 0 01-.374-.182c.023-.023.827.211 1.15.336.482.185.561.209.62.186.039-.015.058-.129.077-.464zm-9.607 2.025c-.579-.797-.937-2.02-.86-2.934l.024-.283.132.024c.248.045.675.204.875.326.548.333.786.772 1.027 1.898.071.33.164.703.207.83.068.203.328.678.54.987.152.222.05.327-.286.297-.514-.047-1.21-.527-1.659-1.145zm8.905 5.935c-2.707-1.09-3.66-2.036-3.66-3.632 0-.235.008-.427.017-.427.01 0 .115.077.233.172.549.44 1.164.628 2.865.876 1.001.147 1.565.265 2.085.437 1.652.548 2.674 1.66 2.918 3.174.07.44.029 1.265-.086 1.7-.09.344-.367.963-.44.987-.02.006-.04-.071-.046-.178-.028-.568-.315-1.122-.798-1.537-.549-.471-1.286-.847-3.089-1.572zm-1.9.452a4.808 4.808 0 00-.131-.572l-.07-.206.129.144c.177.2.318.454.436.794.091.259.101.336.1.757 0 .414-.011.5-.095.734a2.32 2.32 0 01-.571.908c-.495.504-1.13.782-2.048.898-.16.02-.624.054-1.033.075-1.03.054-1.707.164-2.316.378a.488.488 0 01-.174.042c-.024-.025.39-.272.733-.437.483-.233.963-.36 2.04-.539.532-.089 1.082-.196 1.221-.239 1.318-.404 1.995-1.446 1.778-2.737z' fill-rule='nonzero'/%3E%3Cpath d='M21.06 18.116c-.36-.773-.442-1.52-.245-2.216.021-.074.055-.135.075-.135a.73.73 0 01.189.102c.166.112.498.3 1.383.782 1.105.603 1.735 1.07 2.164 1.602.375.467.607.999.719 1.647.063.367.026 1.25-.068 1.62-.297 1.166-.988 2.082-1.972 2.616a2.53 2.53 0 01-.288.143c-.014 0 .038-.133.117-.297.33-.692.369-1.366.118-2.116-.153-.459-.466-1.02-1.097-1.966-.734-1.1-.914-1.394-1.095-1.782zm-10.167 4.171c1.005-.848 2.254-1.45 3.393-1.635.49-.08 1.308-.048 1.762.068.728.186 1.38.604 1.719 1.101.33.486.473.91.62 1.852.06.372.123.745.142.83.11.488.327.879.595 1.075.425.311 1.158.33 1.878.05a.981.981 0 01.236-.074c.026.026-.336.269-.592.397a2.014 2.014 0 01-.983.238c-.66 0-1.208-.335-1.665-1.02-.09-.135-.292-.538-.45-.897-.482-1.1-.72-1.436-1.28-1.803-.489-.32-1.118-.377-1.591-.145-.622.305-.795 1.1-.35 1.603.177.2.507.373.777.406a.83.83 0 00.939-.83c0-.332-.128-.52-.448-.665-.437-.197-.907.033-.905.444.001.175.077.285.253.365.113.05.115.055.023.036-.401-.084-.495-.567-.172-.888.387-.386 1.188-.216 1.463.31.116.221.129.662.028.928-.225.595-.883.907-1.55.737-.454-.116-.639-.241-1.186-.805-.951-.98-1.32-1.17-2.692-1.384l-.263-.041.3-.253z' fill-rule='nonzero'/%3E%3Cpath d='M6.196 3.35l.096.117c3.708 4.54 5.624 6.896 5.746 7.064.2.278.125.527-.219.723-.191.109-.585.219-.781.219-.223 0-.474-.107-.657-.28-.129-.123-.65-.901-1.853-2.768a188.53 188.53 0 00-1.712-2.633c-.049-.046-.048-.045 1.618 2.936 1.046 1.872 1.4 2.533 1.4 2.622 0 .18-.05.274-.272.522-.37.413-.535.877-.655 1.837-.134 1.077-.51 1.837-1.554 3.138-.61.762-.71.902-.865 1.209-.194.386-.247.603-.269 1.091-.023.516.022.85.18 1.343.138.432.282.718.65 1.288.318.493.501.859.501 1.002 0 .114.022.114.515.003 1.179-.266 2.136-.735 2.675-1.309.333-.355.411-.551.414-1.038.001-.318-.01-.385-.096-.568-.14-.298-.395-.546-.957-.93-.737-.504-1.051-.91-1.138-1.467-.072-.457.011-.78.419-1.634.421-.884.526-1.26.597-2.151.045-.576.108-.803.274-.985.172-.19.328-.255.755-.313.696-.095 1.139-.275 1.503-.61.316-.292.448-.573.468-.995l.016-.32-.177-.206c-.254-.296-2.355-2.614-6.304-6.956l-.106-.115-.212.165zM7.91 19.732a.566.566 0 00-.174-.746c-.228-.152-.583-.08-.583.118 0 .06.033.104.108.143.127.065.136.139.037.288-.101.152-.093.286.023.377.186.146.45.065.59-.18zm5.524-7.176c-.327.1-.644.447-.743.81-.06.221-.026.61.064.73.145.194.286.245.666.242.744-.005 1.39-.324 1.466-.723.062-.327-.223-.78-.614-.98-.202-.102-.631-.143-.839-.079zm.87.68c.115-.163.064-.34-.13-.458-.372-.227-.934-.04-.934.312 0 .174.293.365.561.365.18 0 .424-.107.503-.219z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '1f9840a85d5af5bf1d1762f925bdaddc4201f984.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Wrapped BTC',\n symbol: 'WBTC',\n icon:\n \"data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none'%3E%3Ccircle fill='%23201A2D' cx='16' cy='16' r='16'/%3E%3Cg fill='%23FFF'%3E%3Cpath d='M22.818 9.586l-.6.6a8.494 8.494 0 010 11.464l.6.6a9.352 9.352 0 000-12.678v.014zM10.2 9.638a8.494 8.494 0 0111.464 0l.6-.6a9.352 9.352 0 00-12.678 0l.614.6zm-.562 12.018a8.494 8.494 0 010-11.458l-.6-.6a9.352 9.352 0 000 12.678l.6-.62zm12.018.554a8.494 8.494 0 01-11.464 0l-.6.6a9.352 9.352 0 0012.678 0l-.614-.6zm-1.942-8.286c-.12-1.252-1.2-1.672-2.566-1.8V10.4h-1.056v1.692h-.844V10.4H14.2v1.736h-2.142v1.13s.78-.014.768 0a.546.546 0 01.6.464v4.752a.37.37 0 01-.128.258.366.366 0 01-.272.092c.014.012-.768 0-.768 0l-.2 1.262h2.122v1.764h1.056V20.12h.844v1.73h1.058v-1.744c1.784-.108 3.028-.548 3.184-2.218.126-1.344-.506-1.944-1.516-2.186.614-.302.994-.862.908-1.778zm-1.48 3.756c0 1.312-2.248 1.162-2.964 1.162v-2.328c.716.002 2.964-.204 2.964 1.166zm-.49-3.28c0 1.2-1.876 1.054-2.472 1.054v-2.116c.596 0 2.472-.188 2.472 1.062z'/%3E%3Cpath d='M15.924 26.852C9.89 26.851 5 21.959 5 15.925 5 9.892 9.892 5 15.925 5c6.034 0 10.926 4.89 10.927 10.924a10.926 10.926 0 01-10.928 10.928zm0-21c-5.559.004-10.062 4.513-10.06 10.072.002 5.559 4.51 10.064 10.068 10.064 5.559 0 10.066-4.505 10.068-10.064A10.068 10.068 0 0015.924 5.852z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 8,\n id: '2260fac5e5542a773aa44fbcfedf7c193bc2c599.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'ChainLink Token',\n symbol: 'LINK',\n icon:\n \"data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none'%3E%3Ccircle fill='%232A5ADA' cx='16' cy='16' r='16'/%3E%3Cpath d='M16 6l-1.799 1.055L9.3 9.945 7.5 11v10l1.799 1.055 4.947 2.89L16.045 26l1.799-1.055 4.857-2.89L24.5 21V11l-1.799-1.055-4.902-2.89L16 6zm-4.902 12.89v-5.78L16 10.22l4.902 2.89v5.78L16 21.78l-4.902-2.89z' fill='%23FFF'/%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '514910771af9ca656af840dff83e8264ecf986ca.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Octopus Network Token',\n symbol: 'OCT',\n icon:\n \"data:image/svg+xml,%3Csvg version='1.1' id='O' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 113.39 113.39' style='enable-background:new 0 0 113.39 113.39;' xml:space='preserve'%3E%3Cstyle type='text/css'%3E .st0%7Bfill:%23014299;%7D .st1%7Bfill:%23FFFFFF;%7D %3C/style%3E%3Ccircle class='st0' cx='56.69' cy='56.69' r='56.69'/%3E%3Cg%3E%3Cpath class='st1' d='M44.25,59.41c-1.43,0-2.59,1.16-2.59,2.59v20.28c0,1.43,1.16,2.59,2.59,2.59c1.43,0,2.59-1.16,2.59-2.59V62 C46.84,60.57,45.68,59.41,44.25,59.41z'/%3E%3Cpath class='st1' d='M56.69,59.41c-1.45,0-2.62,1.17-2.62,2.62v26.47c0,1.45,1.17,2.62,2.62,2.62s2.62-1.17,2.62-2.62V62.02 C59.31,60.58,58.14,59.41,56.69,59.41z'/%3E%3Cpath class='st1' d='M79.26,78.87c-0.33,0.15-0.64,0.28-0.95,0.38c0,0-0.01,0-0.01,0c-0.59,0.19-1.13,0.29-1.63,0.31h-0.06 c-1,0.03-1.84-0.27-2.59-0.75c-0.49-0.32-0.91-0.73-1.25-1.23c-0.3-0.43-0.53-0.93-0.71-1.51c0-0.01-0.01-0.02-0.01-0.03 c-0.22-0.74-0.34-1.61-0.34-2.59V62.02c0-1.45-1.17-2.62-2.62-2.62c-1.45,0-2.62,1.17-2.62,2.62v11.43c0,4.5,1.64,8.03,4.63,9.96 c1.5,0.97,3.21,1.45,5.04,1.45c1.68,0,3.45-0.41,5.25-1.22c1.32-0.59,1.9-2.14,1.31-3.46C82.13,78.86,80.57,78.27,79.26,78.87z'/%3E%3Cpath class='st1' d='M68.33,45.9c0-2.15-1.75-3.9-3.9-3.9c-2.15,0-3.9,1.75-3.9,3.9s1.75,3.9,3.9,3.9 C66.58,49.8,68.33,48.05,68.33,45.9z'/%3E%3Cpath class='st1' d='M48.96,41.99c-2.15,0-3.9,1.75-3.9,3.9s1.75,3.9,3.9,3.9s3.9-1.75,3.9-3.9S51.11,41.99,48.96,41.99z'/%3E%3Cpath class='st1' d='M56.69,22.28c-15.17,0-27.52,12.34-27.52,27.52v15.09c0,1.46,1.18,2.64,2.64,2.64s2.64-1.18,2.64-2.64V49.8 c0-12.26,9.98-22.24,22.24-22.24c12.26,0,22.24,9.98,22.24,22.24v15.09c0,1.46,1.18,2.64,2.64,2.64s2.64-1.18,2.64-2.64V49.8 C84.21,34.62,71.87,22.28,56.69,22.28z'/%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: 'f5cfbc74057c610c8ef151a439252680ac68c6dc.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Ref Finance Token',\n symbol: 'REF',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='16 24 248 248' style='background: %23000'%3E%3Cpath d='M164,164v52h52Zm-45-45,20.4,20.4,20.6-20.6V81H119Zm0,18.39V216h41V137.19l-20.6,20.6ZM166.5,81H164v33.81l26.16-26.17A40.29,40.29,0,0,0,166.5,81ZM72,153.19V216h43V133.4l-11.6-11.61Zm0-18.38,31.4-31.4L115,115V81H72ZM207,121.5h0a40.29,40.29,0,0,0-7.64-23.66L164,133.19V162h2.5A40.5,40.5,0,0,0,207,121.5Z' fill='%23fff'/%3E%3Cpath d='M189 72l27 27V72h-27z' fill='%2300c08b'/%3E%3C/svg%3E%0A\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'token.v2.ref-finance.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'HAPI',\n symbol: 'HAPI',\n icon:\n \"data:image/svg+xml,%3Csvg version='1.1' id='Layer_2' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' width='600px' height='600px' viewBox='0 0 600 600' enable-background='new 0 0 600 600' xml:space='preserve'%3E %3Cg%3E %3Cg%3E %3Cpath fill='%23141414' d='M263.7,122.8c-3.6,0.3-7.1,0.9-10.7,1.8c-24.5,6-40.3,18.1-50.4,31c24.5-4.7,49.9,1.3,67.3,7.4 c0.5,0.2,1,0.4,1.6,0.6c-2.7-4.2-5.2-9-7.2-14.4C261.2,141.1,261.6,131.6,263.7,122.8z'/%3E %3Cpath fill='%23141414' d='M201.2,197.7c-9.8-1.1-19.1-2.1-24.6-2.1c-0.7,0-1.4,0-2,0.1c-38.1,2.6-67.2,37.3-69.1,82.4 c-1.4,32.2,13.5,53.1,23.3,63.4c-1.5-12.5-0.1-25,4.3-37.3c11.7-32.6,34.3-42.1,60.6-53.1c10.8-4.5,22.5-9.5,34.3-16.6l50.1-39.6 c-10.1,2.2-24.4,4.5-42.9,5.3C227.1,200.6,213.9,199.1,201.2,197.7z'/%3E %3Cpath fill='%23141414' d='M319.1,176.5c-0.5,1.1,0.9,2.1,1.8,1.2c5.3-5.4,16.3-14.3,30.8-14.2c15.6,0.1,35.5,10.2,40.5,22.1 c4,9.8-6.6,16.5-6.6,16.5l0,0c-2.5-2.7-8-6.3-18.2-6.6c-15-0.5-25.3,12.1-24.1,12.9c7.5,4.7,17.3,3.7,23.1,3.5 c5.8-0.2,15.1-2.5,17.8-3.5c4.7-1.8,11.7-7.8,14.9-16.1c2.5-6.5,8.4-28.7-25.2-34.4C352.7,154.3,327,159.6,319.1,176.5z'/%3E %3Cpath fill='%23141414' d='M473.1,225.1c-0.5-0.6-1.1-1.3-1.7-2l-0.3-0.3c-3.9-4.4-7.6-8.3-9.4-10.1c1.2-4.2,4-16.2,1-26.1 c-2.3-7.7-6.8-15.5-9.2-19.4l-0.8-1.2h0c-0.4-0.6-0.8-1.2-1.1-1.7c-0.3-0.4-0.5-0.7-0.6-1l-0.2-0.7c-2.5-7-8.6-22.3-16.4-28.1 l59.4-91.7c2.3-3.5-2.1-7.5-5.4-5l-86.8,66.5c-8.7-12.3-21.1-21.8-21.8-22.4c-0.8-0.6-2-0.7-2.9-0.2c-0.9,0.5-1.4,1.6-1.3,2.6 c0,0.1,0.6,5.9-2.9,17.6c7.5,2.7,13.9,6,19.3,9.7l-4.5,3.5c-8.8-5.7-20-10.5-34.3-12.6c-17.7-2.6-31.9,1-42.1,10.7c0,0,0,0,0,0 c5.9,3.8,13.1,8.7,17,12.4c0.8,0.7,1.5,1.5,2.2,2.3c-3.1,0.9-6.2,1.9-9.3,2.9c-0.3-0.2-0.5-0.5-0.8-0.7c-1.9-1.7-4.4-3.4-7-5.3 c-5.4-3.8-11.7-8.3-15.8-14c-2.2-3.1-3.8-6.5-4.3-10.4c-0.3-2.4-1-4-2.2-4.9c0,0,0,0,0,0c0,0,0,0,0,0c-0.6-0.5-2.8-2-5.8,0.3 c-2,1.6-4.4,5.3-6.5,10.3c-5.2,12.3-8.7,32.1-1.8,46.1c1.2,2.3,2.4,4.5,3.7,6.6c-0.4,1-0.7,2.1-0.9,3.1c-0.6,3.4-0.9,7.8-1.2,12.7 c-19.8-8.3-50.5-17.5-78.5-10.7c-23.9,5.8-39.4,17.5-49.6,30c7.4-3.1,15.2-5,23.5-5.6c5.6-0.4,16.4,0.8,27.9,2.1 c11.8,1.3,25.3,2.8,32.9,2.4c19.2-0.8,33.7-3.3,43.5-5.6c0,5.4,0.1,11.1,0.4,16.9c0.7,16.8,2.5,34.3,5,46.5 c3.6,17.9,16.5,55.2,31.4,64.6c5.5,3.5,13.5,8.2,22.9,13.4c-2.5,6.4-5.1,15.1-5.1,23.5c0,15.2,5.2,26.6,11,37 c4.6,8.2,9.6,15.7,12.8,24c2.5,6.5-2.7,27.7-5.6,38.9c-1.2,4.5-1.9,7.3-1.7,7c3.7-5.1,7.5-10.8,11.3-16.8 c15.3-24.2,19.4-47,19.5-48l0.2-1.4l-1.1-1c-0.2-0.2-17.2-15.7-18.3-33.3c-0.4-6.9,1-11.5,4.3-13.8c0.5-0.3,1-0.6,1.6-0.9 c7.5,3.7,15,7.3,22.2,10.5c2.8,3.5,9,9.4,11.8,12c3.4,3.2,6.9,7.8,12.2,7.8c5.3,0,15.9,0,21.3,0s13.1,0,17.3-2.1 c4.2-2.1,10.9-5.6,11-12.6c0-1.5,0.4-3.9,0.9-6.8c3.7-4.9,4.1-10.6,4.8-19.2c0.5-5.7,1.7-15.5,3-25.9c2-15.7,4.1-32,3.9-37.9 c-0.2-8.2-1.1-14.3-1.4-16.2C475.3,249.4,479.5,232.4,473.1,225.1z M318,310.6c-13.3-8.4-25.6-44.6-29-61.2 c-4.8-23.9-6.9-68.5-3.9-86.8c2.7-16.7,49-34.5,81.7-35.6c1.9-0.1,3.8-0.1,5.6-0.1c1,0,2,0,3,0c-0.1,4.9,1.3,15.6,13.8,25.5 c13.9,11,30.4,5,30.4,5l12.1-18.7c4.5,3.5,9.4,12.7,13,22.1c-0.9-0.4-1.9-0.7-3.1-0.9c-8.1-1.3-31.6-0.9-24,31.3 c1,4,5.2,9.4,17.2,22.3c2.8,3,5.1,5.3,7,7.2c5.6,5.6,7.4,7.4,7.5,11.8c0,0.3-0.2,1.6-0.4,3c-0.8-0.6-1.9-1.1-3.4-1 c-3.6-0.2-33.7,5.6-42.4,15.1c-1.7,1.9-4.5,2.6-6.7,1.4c-0.1-0.1-0.2-0.1-0.3-0.2c-1.4-0.8-2.3-1.9-2.8-3.5 c-1.3-5.1,2.9-13.2,4.6-16c0.6-1,0.3-2.3-0.6-2.9c-1-0.6-2.3-0.3-2.9,0.6c-0.1,0.2-0.9,1.5-1.9,3.5c-3.3,6.6-8.2,12.2-14.3,16.3 c-9.8,6.6-24,15.2-35.5,18.2c-18,4.7-24.9-8.2-25.2-8.8c-0.5-1-1.8-1.4-2.8-0.9c-1,0.5-1.5,1.8-0.9,2.8 c0.1,0.1,6.3,12.1,21.5,12.1c0.6,0,1.4-0.1,2.2-0.2c4.3-0.5,8.6,0.5,12.3,2.7c3.5,2.1,8,4.7,12.5,7c12.6,6.3,14.7,6.2,19.5,5.4 c1.1-0.2,49.8-2.4,80.1-8.2l3.6,0.2c2.4,0.1,4.3,2.3,4,4.7l0,0.1c-0.2,1.4-1,2.6-2.2,3.3c-2.7,1.5-6.5,3.5-9.9,4.9 c-1.6,0.6-3.3,1.2-5.1,1.6c-5.5,1.3-11.1,1.6-11.1,1.6s-5.4,1.2-13.5,2.1c-3.4,0.4-7.2,0.7-11.3,0.9c-14,0.7-13,1.6-24.8,1 c-2.9-0.1-5.7-0.3-8.3-0.6c-2.5-0.3-3.2,3.4-0.7,4c6.1,1.5,13.3,2.6,21.3,2.5c1,0,1.9,0,2.9,0c12.8-0.1,24.4,7.5,29.4,19.3 c2.1,5,4.1,12,5.4,18.5c1.8,8.4-5.3,16.1-13.8,15.3c-12.5-1.3-26.6-4.8-34.6-8.3C365.3,338.1,332.4,319.8,318,310.6z M448.7,169.2 l1.2,1.9c2.4,4,5.9,10.5,7.9,16.9c3.1,10.4-1.4,24.4-1.4,24.5l-0.5,1.5l1.1,1.1c0,0.1,5,5.2,10.3,11.1l0.1,0.2 c0.6,0.7,1.2,1.3,1.8,2c3.7,4.3,1.9,17-0.1,23.9l-0.2,0.6l0.1,0.6c0,0,0.3,1.5,0.6,3.9c-2.7,0.3-4.7,2.7-4.4,5.5l0.8,7.5l-8.6,0.1 l-13.5-15.3c-1-1.2-1-3,0.2-4c0,0,0,0,0,0c7.1-6.4,8.1-9.5,8.3-10.7c0.9-5.4,1.2-7.4,1.2-8.1c0-6.1-2.9-9-8.7-14.8 c-1.9-1.9-4.2-4.2-6.9-7.1c-0.6-0.6-1.1-1.2-1.7-1.8c2.1,0.6,4.9,1.2,8.5,1.5c8.4,0.7,10.9-1.4,10.9-1.4s1.5-2.7-1.1-6.6 c-2.6-3.9-6.2-6.7-13.2-6.9c-5-0.2-9.5,3.7-11.7,6c-0.9-1-2.9-4.7-3.8-10.9c-1.5-9.7,2.1-14.2,4.7-16.4c4.6-3.9,10.9-7.7,14.4-7.5 c0.9,0.1,1.9,0.2,2.7,0.4C447.8,167.7,448.2,168.4,448.7,169.2z M463.4,332.9c-0.7,8.2-1.1,12.8-3.8,16.5c-2.3,3.1-7.3,0.8-6.6-3 c0.4-2.1,0.7-4.3,0.8-6.4c0.3-10.7-4.9-20.9-6.7-27.7c0,0,0-0.1,0-0.1c-0.9-3.8,1.2-7.7,4.8-9.3c1.6-0.7,3.4-1.6,5.3-2.6 c4.6-2.3,9.9,1.3,9.2,6.4l0,0.1C465.2,317.2,463.9,327.1,463.4,332.9z M385.1,249.4c1.8-1.3,4.4-0.8,5.6,1.2 c0.8,1.4,1.9,2.9,3.4,4.1c4.5,3.7,9.8,3.5,13.2,3.5c3.3,0,5.4-0.6,6-0.8c0,0,0,0,0,0c2.4-0.5,4.3,2,3.1,4.2 c-2.6,4.8-6.1,11.1-6.5,11.4c-0.7,0.5-22.8,5.1-25.6,5.4s-11.6,1.2-18.2-3c-2.8-1.7-5.5-3.7-7.7-5.3c-1.7-1.2-1.4-3.8,0.4-4.7 C368.8,260.4,378.7,253.9,385.1,249.4z M436.8,263.8l8.3,9.1c1.5,1.7,0.5,4.4-1.7,4.7c-5,0.6-10,1.2-14.9,1.7 c-2.3,0.2-3.9-2.3-2.7-4.3c1.9-3,4.3-7,6.5-10.8C433.2,262.6,435.5,262.4,436.8,263.8z M396.4,117.1l83.5-69.1l-76.9,76.9 c-2.5,2.4-6.6,1.6-8.1-1.5h0C393.9,121.2,394.5,118.5,396.4,117.1z'/%3E %3Cpath fill='%23141414' d='M196.6,258.1c-25.6,10.7-45.8,19.2-56.4,48.7c-15.1,42,9.4,88.5,62.5,120.1c-17.4-68,3.5-93.1,22.1-115.3 c6.4-7.7,12.5-15,16.9-23.7c12.9-25.8,12.3-50.5,11.1-62C233.7,242.5,214.1,250.8,196.6,258.1z'/%3E %3C/g%3E %3Cg%3E %3Cpath d='M201.6,477.1h-9.1l-2.8,17.1h-14.3l2.8-17.1h-9.1l-2.8,17.1h-9.3l-1.5,9.1h9.3l-2.3,14h-9.4l-1.5,9.1h9.4l-2.8,17.1h9.1 l2.8-17.1h14.3l-2.8,17.1h9.1l2.8-17.1h9.3l1.5-9.1h-9.3l2.3-14h9.4l1.5-9.1h-9.4L201.6,477.1z M186,517.4h-14.3l2.3-14h14.3 L186,517.4z'/%3E %3Cpolygon points='260.8,505.3 230,505.3 230,477.1 218,477.1 218,543.6 230,543.6 230,515.4 260.8,515.4 260.8,543.6 272.9,543.6 272.9,477.1 260.8,477.1 '/%3E %3Cpath d='M307.1,477.1l-23.4,66.4h12.8l5.5-16.4h25l5.5,16.4h12.8l-23.4-66.4H307.1z M305.3,517.5l9-26.8h0.5l9,26.8H305.3z'/%3E %3Cpath d='M394,480c-3.5-1.9-7.8-2.9-12.9-2.9h-24.9v66.4h12v-22.4H381c5.1,0,9.4-0.9,12.9-2.8s6.2-4.5,7.9-7.8 c1.8-3.3,2.7-7.1,2.7-11.3c0-4.2-0.9-8-2.7-11.3C400.1,484.5,397.4,481.9,394,480z M390.9,505.4c-0.9,1.8-2.3,3.2-4.2,4.3 c-1.9,1-4.3,1.6-7.3,1.6h-11.1v-24h11c3,0,5.5,0.5,7.4,1.5c1.9,1,3.3,2.4,4.2,4.2c0.9,1.8,1.4,3.9,1.4,6.2 S391.8,503.6,390.9,505.4z'/%3E %3Crect x='417.1' y='477.1' width='12' height='66.4'/%3E %3C/g%3E %3C/g%3E %3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: 'd9c2d319cd7e6177336b0a9c93c21cb48d84fb54.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'PARAS',\n symbol: 'PARAS',\n icon:\n 'data:image/png;base64,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',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'token.paras.near',\n },\n {\n spec: 'ft-1.0.0',\n name: '1MILNFT',\n symbol: '1MIL',\n icon:\n \"data:image/svg+xml,%3Csvg version='1.1' id='O' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 146 146' xml:space='preserve'%3E %3Cpath style='fill:%23ff00c6; stroke:none;' d='M0 0L0 31L31 31L31 0L0 0z'/%3E %3Cpath style='fill:%23df01ae; stroke:none;' d='M31 0L31 31L32 31L31 0z'/%3E %3Cpath style='fill:%23000000; stroke:none;' d='M32 0L32 32L0 32L0 38L32 38L32 70L0 70L0 76L32 76L32 109L0 109L0 114L32 114L32 146L38 146L38 114L70 114L70 146L76 146L76 114C82.7843 114 102.446 110.653 107.397 115.603C112.241 120.448 109 139.378 109 146L114 146L114 114L146 114L146 109C139.378 109 120.448 112.241 115.603 107.397C110.653 102.446 114 82.7843 114 76L146 76L146 70L114 70L114 38L146 38L146 32C139.378 32 120.448 35.2414 115.603 30.3966C110.759 25.5518 114 6.6225 114 0L109 0L109 32L76 32L76 0L71 0L71 32L38 32L38 0L32 0z'/%3E %3Cpath style='fill:%23459f00; stroke:none;' d='M38 0L38 32L70 32L70 31L39 31L38 0z'/%3E %3Cpath style='fill:%236fff00; stroke:none;' d='M39 0L39 31L70 31L70 0L39 0z'/%3E %3Cpath style='fill:%230d2000; stroke:none;' d='M70 0L70 32L71 32L70 0z'/%3E %3Cpath style='fill:%233f0180; stroke:none;' d='M76 0L76 32L108 32L108 31L77 31L76 0z'/%3E %3Cpath style='fill:%237f00ff; stroke:none;' d='M77 0L77 31L108 31L108 0L77 0z'/%3E %3Cpath style='fill:%232f0060; stroke:none;' d='M108 0L108 32L109 32L108 0z'/%3E %3Cpath style='fill:%231d4101; stroke:none;' d='M114 0L114 31L115 31L114 0z'/%3E %3Cpath style='fill:%236fff00; stroke:none;' d='M115 0L115 31L146 31L146 0L115 0z'/%3E %3Cpath style='fill:%239f017c; stroke:none;' d='M0 31L0 32L32 32L0 31z'/%3E %3Cpath style='fill:%23459f00; stroke:none;' d='M115 31L115 32L146 32L115 31z'/%3E %3Cpath style='fill:%2300f0ff; stroke:none;' d='M0 38L0 69L31 69L31 38L0 38z'/%3E %3Cpath style='fill:%2300d2df; stroke:none;' d='M31 38L31 69L0 69L0 70L32 70L31 38z'/%3E %3Cpath style='fill:%23be0094; stroke:none;' d='M38 38L38 70L39 70L38 38z'/%3E %3Cpath style='fill:%23ff00c6; stroke:none;' d='M39 38L39 69L70 69L70 38L39 38z'/%3E %3Cpath style='fill:%23200018; stroke:none;' d='M70 38L70 70L71 70L70 38z'/%3E %3Cpath style='fill:%23007880; stroke:none;' d='M76 38L76 70L77 70L76 38z'/%3E %3Cpath style='fill:%2300f0ff; stroke:none;' d='M77 38L77 69L108 69L108 38L77 38z'/%3E %3Cpath style='fill:%23015a60; stroke:none;' d='M108 38L108 70L109 70L108 38z'/%3E %3Cpath style='fill:%23400032; stroke:none;' d='M114 38L114 70L115 70L114 38z'/%3E %3Cpath style='fill:%23de00ad; stroke:none;' d='M115 38L115 39L146 39L115 38z'/%3E %3Cpath style='fill:%23ff00c6; stroke:none;' d='M115 39L115 70L146 70L146 39L115 39z'/%3E %3Cpath style='fill:%23df01ae; stroke:none;' d='M39 69L39 70L70 70L39 69z'/%3E %3Cpath style='fill:%2300d2df; stroke:none;' d='M77 69L77 70L108 70L77 69z'/%3E %3Cpath style='fill:%2354bf00; stroke:none;' d='M0 76L0 77L32 77L0 76z'/%3E %3Cpath style='fill:%235f00be; stroke:none;' d='M38 76L38 108L39 108L39 77L70 77L38 76z'/%3E %3Cpath style='fill:%230f001f; stroke:none;' d='M70 76L70 108L71 108L70 76z'/%3E %3Cpath style='fill:%23388000; stroke:none;' d='M76 76L76 108L77 108L76 76z'/%3E %3Cpath style='fill:%2354bf00; stroke:none;' d='M77 76L77 77L108 77L77 76z'/%3E %3Cpath style='fill:%232a6000; stroke:none;' d='M108 76L108 108L109 108L108 76z'/%3E %3Cpath style='fill:%23003d40; stroke:none;' d='M114 76L114 108L115 108L114 76z'/%3E %3Cpath style='fill:%2300b4bf; stroke:none;' d='M115 76L115 77L146 77L115 76z'/%3E %3Cpath style='fill:%236fff00; stroke:none;' d='M0 77L0 108L32 108L32 77L0 77z'/%3E %3Cpath style='fill:%237f00ff; stroke:none;' d='M39 77L39 108L70 108L70 77L39 77z'/%3E %3Cpath style='fill:%236fff00; stroke:none;' d='M77 77L77 108L108 108L108 77L77 77z'/%3E %3Cpath style='fill:%2300f0ff; stroke:none;' d='M115 77L115 108L146 108L146 77L115 77z'/%3E %3Cpath style='fill:%230f2000; stroke:none;' d='M0 108L0 109L32 109L0 108M76 108L76 109L108 109L76 108z'/%3E %3Cpath style='fill:%23001e20; stroke:none;' d='M115 108L115 109L146 109L115 108z'/%3E %3Cpath style='fill:%23810064; stroke:none;' d='M0 114L0 115L32 115L0 114z'/%3E %3Cpath style='fill:%23398000; stroke:none;' d='M38 114L38 115L70 115L38 114z'/%3E %3Cpath style='fill:%23800063; stroke:none;' d='M76 114L76 146L77 146L77 115L108 115L76 114z'/%3E %3Cpath style='fill:%23200041; stroke:none;' d='M114 114L114 146L115 146L114 114z'/%3E %3Cpath style='fill:%23410080; stroke:none;' d='M115 114L115 115L146 115L115 114z'/%3E %3Cpath style='fill:%23ff00c6; stroke:none;' d='M0 115L0 146L31 146L31 115L0 115z'/%3E %3Cpath style='fill:%23df01ae; stroke:none;' d='M31 115L31 146L32 146L31 115z'/%3E %3Cpath style='fill:%2354bf00; stroke:none;' d='M38 115L38 146L39 146L38 115z'/%3E %3Cpath style='fill:%236fff00; stroke:none;' d='M39 115L39 146L70 146L70 115L39 115z'/%3E %3Cpath style='fill:%23ff00c6; stroke:none;' d='M77 115L77 146L108 146L108 115L77 115z'/%3E %3Cpath style='fill:%2360004a; stroke:none;' d='M108 115L108 146L109 146L108 115z'/%3E %3Cpath style='fill:%237f00ff; stroke:none;' d='M115 115L115 146L146 146L146 115L115 115z'/%3E %3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: 'a4ef4b0b23c1fc81d3f9ecf93510e64f58a4a016.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'marma j token',\n symbol: 'marmaj',\n icon:\n 'data:image/jpeg;base64,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',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'marmaj.tkn.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Staked NEAR',\n symbol: 'STNEAR',\n icon:\n \"data:image/svg+xml,%3csvg width='96' height='96' viewBox='0 0 96 96' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3crect width='96' height='96' rx='48' fill='white'/%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M48.0006 20L41.2575 26.7431L48.0006 33.4862L54.7437 26.7431L48.0006 20ZM37.281 30.7188L30.7144 37.2853L47.9998 54.5707L65.2851 37.2853L58.7186 30.7188L47.9998 41.4376L37.281 30.7188ZM26.7384 41.261L19.9953 48.0041L47.9995 76.0083L76.0037 48.0041L69.2606 41.2611L47.9995 62.5221L26.7384 41.261Z' fill='%23231B51'/%3e%3c/svg%3e\",\n reference: 'https://metapool.app',\n reference_hash: null,\n decimals: 24,\n id: 'meta-pool.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Cheddar',\n symbol: 'Cheddar',\n icon:\n 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI1LjMuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCA2NCA2NCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNjQgNjQ7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7ZmlsbDp1cmwoI1hNTElEXzE2Xyk7fQoJLnN0MXtmaWxsOiNGRkU5NTk7fQoJLnN0MntvcGFjaXR5OjAuMjt9Cgkuc3Qze2ZpbGw6IzQyNDI0Mjt9Cgkuc3Q0e29wYWNpdHk6MC45O2ZpbGw6dXJsKCNYTUxJRF8xN18pO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyAgICA7fQoJLnN0NXtmaWxsOnVybCgjU1ZHSURfMV8pO30KCS5zdDZ7ZmlsbDp1cmwoI1hNTElEXzE4Xyk7fQoJLnN0N3tvcGFjaXR5OjAuOTtmaWxsOnVybCgjWE1MSURfMTlfKTtlbmFibGUtYmFja2dyb3VuZDpuZXcgICAgO30KCS5zdDh7ZmlsbDp1cmwoI1hNTElEXzIwXyk7fQoJLnN0OXtvcGFjaXR5OjAuOTtmaWxsOnVybCgjWE1MSURfMjFfKTtlbmFibGUtYmFja2dyb3VuZDpuZXcgICAgO30KCS5zdDEwe2ZpbGw6dXJsKCNTVkdJRF8yXyk7fQoJLnN0MTF7b3BhY2l0eTowLjk7ZmlsbDp1cmwoI1hNTElEXzIyXyk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3ICAgIDt9Cgkuc3QxMntmaWxsOnVybCgjWE1MSURfMjNfKTt9Cgkuc3QxM3tvcGFjaXR5OjAuOTtmaWxsOnVybCgjWE1MSURfMjRfKTtlbmFibGUtYmFja2dyb3VuZDpuZXcgICAgO30KCS5zdDE0e2ZpbGw6dXJsKCNTVkdJRF8zXyk7fQoJLnN0MTV7ZmlsbDp1cmwoI1hNTElEXzI2Xyk7fQoJLnN0MTZ7b3BhY2l0eTowLjk7ZmlsbDp1cmwoI1hNTElEXzI3Xyk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3ICAgIDt9Cgkuc3QxN3tmaWxsOnVybCgjWE1MSURfMzFfKTt9Cgkuc3QxOHtvcGFjaXR5OjAuOTtmaWxsOnVybCgjWE1MSURfMzNfKTtlbmFibGUtYmFja2dyb3VuZDpuZXcgICAgO30KCS5zdDE5e2ZpbGw6dXJsKCNTVkdJRF80Xyk7fQoJLnN0MjB7b3BhY2l0eTowLjk7ZmlsbDp1cmwoI1hNTElEXzM0Xyk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3ICAgIDt9Cgkuc3QyMXtmaWxsOnVybCgjWE1MSURfMzZfKTt9Cgkuc3QyMntvcGFjaXR5OjAuOTtmaWxsOnVybCgjWE1MSURfMzdfKTtlbmFibGUtYmFja2dyb3VuZDpuZXcgICAgO30KCS5zdDIze2ZpbGw6dXJsKCNTVkdJRF81Xyk7fQoJLnN0MjR7ZmlsbDp1cmwoI1hNTElEXzM4Xyk7fQoJLnN0MjV7b3BhY2l0eTowLjk7ZmlsbDp1cmwoI1hNTElEXzM5Xyk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3ICAgIDt9Cgkuc3QyNntmaWxsOnVybCgjWE1MSURfNDBfKTt9Cgkuc3QyN3tvcGFjaXR5OjAuOTtmaWxsOnVybCgjWE1MSURfNDFfKTtlbmFibGUtYmFja2dyb3VuZDpuZXcgICAgO30KCS5zdDI4e2ZpbGw6dXJsKCNTVkdJRF82Xyk7fQoJLnN0Mjl7b3BhY2l0eTowLjk7ZmlsbDp1cmwoI1hNTElEXzQyXyk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3ICAgIDt9Cjwvc3R5bGU+CjxnIGlkPSJMYXllcl8xXzFfIj4KCQoJCTxsaW5lYXJHcmFkaWVudCBpZD0iWE1MSURfMTZfIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9Ii0xODIxLjEzNTMiIHkxPSI5ODMuMTc0MyIgeDI9Ii0xODIxLjEzNTMiIHkyPSI5OTguMDU0MyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMSAwIDAgMSAtMTc5MC4yNzUzIC05NDYpIj4KCQk8c3RvcCAgb2Zmc2V0PSIxLjk3MDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNGN0JDMDAiLz4KCQk8c3RvcCAgb2Zmc2V0PSIxIiBzdHlsZT0ic3RvcC1jb2xvcjojRkNENzNFIi8+Cgk8L2xpbmVhckdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzY4XyIgY2xhc3M9InN0MCIgZD0iTTUyLjMsNDAuMnYxNC4xbC00MC4yLTYuMWMtMS41LTAuMy0yLjYtMS4zLTIuNi0yLjNjMC4xLTMuOC0wLjEtNy41LDAtMTEuMQoJCWMwLTAuNywwLjEtMS41LDEuMi0xLjdjMC43LTAuMSwxLjYsMC4yLDIuMywwLjNsNC45LDAuOGMwLDAuMSwwLDAuMywwLDAuNGMwLDEuNiwxLjcsMyw0LDMuMWMyLDAuMSwzLjYtMC44LDMuOS0yLjJMNDAuNiwzOAoJCWMtMC4xLDAuMi0wLjIsMC40LTAuMiwwLjVjMCwwLjcsMC45LDEuMywxLjksMS40YzEuMSwwLjEsMS45LTAuNCwxLjktMS4yYzAtMC4xLDAtMC4xLDAtMC4yQzQ0LjEsMzguNiw1Mi4zLDQwLjIsNTIuMyw0MC4yeiIvPgoJPHBhdGggY2xhc3M9InN0MSIgZD0iTTkuNSwzNC44YzAuMy0xLjItMC40LTIuNiwzLjUtMS41bDQuOSwwLjhjMC40LTEsMi0xLjYsMy44LTEuNGMyLjIsMC4xLDQsMS4zLDQsMi41YzAsMC4xLDAsMC4yLDAsMC4zCgkJTDQwLjUsMzhsMCwwYzAuMy0wLjMsMS0wLjQsMS43LTAuNGMxLDAuMSwxLjksMC41LDEuOSwxLjFsOC4yLDEuNkwzMC44LDI3LjVjLTItMS4yLTQuNS0xLjctNi43LTEuM2MtMi4yLDAuMy01LDAuOC03LjEsMS42CgkJYy0yLjUsMC45LTQuOCwyLjQtNi4yLDMuNmMtMC4xLDAuMS0wLjYsMC41LTAuOSwxLjFDOS41LDMzLDkuNSwzMy44LDkuNSwzNC44eiIvPgoJPGcgY2xhc3M9InN0MiI+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTI1LjQsMjdjMS42LDAsMy4zLDAuNCw0LjcsMS4zbDIxLDEyLjV2MTIuNmwtMzguOC01LjljLTAuOS0wLjItMS43LTAuOC0xLjYtMS40YzAtMi4yLDAtNC4zLDAtNi41CgkJCWMwLTEuNSwwLTMuMSwwLTQuN2MwLTAuMSwwLTAuMiwwLTAuNGwwLDBjMC0wLjUsMC4xLTEuMiwwLjMtMS42YzAuMi0wLjQsMC41LTAuNywwLjYtMC44YzEuNC0xLjEsMy42LTIuNSw1LjgtMy40CgkJCWMxLjYtMC42LDQtMS4xLDYuOC0xLjVDMjQuNiwyNywyNC45LDI3LDI1LjQsMjcgTTI1LjQsMjYuMWMtMC40LDAtMC45LDAtMS4zLDAuMWMtMi4yLDAuMy01LDAuOC03LjEsMS42CgkJCWMtMi41LDAuOS00LjgsMi40LTYuMiwzLjZjLTAuMSwwLjEtMC42LDAuNS0wLjksMS4xYy0wLjMsMC41LTAuMywxLjItMC40LDEuOWMwLDAuMiwwLDAuMywwLDAuNGMwLDMuNywwLjEsNy41LDAuMSwxMS4xCgkJCWMwLDEuMSwxLjEsMi4xLDIuNiwyLjNsNDAuMiw2LjFWNDAuMkwzMC44LDI3LjVDMjkuMiwyNi42LDI3LjMsMjYuMSwyNS40LDI2LjFMMjUuNCwyNi4xeiIvPgoJPC9nPgoJCgkJPHJhZGlhbEdyYWRpZW50IGlkPSJYTUxJRF8xN18iIGN4PSItMzA0NS4xOTg3IiBjeT0iMjA0Ny40NDY5IiByPSI2Ljg2ODciIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuNDI1OCAwIDAgMC4zMjI1IC0xMjc5Ljk4MTMgLTYxNy4xODk5KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguMTMwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0RFN0YxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuMzM4OSIgc3R5bGU9InN0b3AtY29sb3I6I0RBN0QxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNTk5MyIgc3R5bGU9InN0b3AtY29sb3I6I0NFNzYwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuODYwMiIgc3R5bGU9InN0b3AtY29sb3I6I0JBNkMwNSIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQUQ2NTAwIi8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzM1XyIgY2xhc3M9InN0NCIgZD0iTTE4LjQsNDMuOGMwLDEuMi0xLjMsMi4xLTMsMmMtMS42LTAuMS0zLTEuMi0zLTIuM3MxLjMtMi4xLDMtMkMxNyw0MS41LDE4LjQsNDIuNiwxOC40LDQzLjh6IgoJCS8+CgkKCQk8cmFkaWFsR3JhZGllbnQgaWQ9IlNWR0lEXzFfIiBjeD0iLTMwNjQuNDI3NSIgY3k9IjIwMTUuOTU3IiByPSIxNC4xMzIxIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjQyNTggMCAwIDAuMzIyNSAtMTI3OS45ODEzIC02MTcuMTg5OSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KCQk8c3RvcCAgb2Zmc2V0PSI4LjEzMDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNERTdGMTQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjMzODkiIHN0eWxlPSJzdG9wLWNvbG9yOiNEQTdEMTIiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjU5OTMiIHN0eWxlPSJzdG9wLWNvbG9yOiNDRTc2MEQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjg2MDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNCQTZDMDUiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjk4NyIgc3R5bGU9InN0b3AtY29sb3I6I0FENjUwMCIvPgoJPC9yYWRpYWxHcmFkaWVudD4KCTxwYXRoIGNsYXNzPSJzdDUiIGQ9Ik0xNy44LDM0LjRjMCwxLjYsMS43LDMsNCwzLjFjMiwwLjEsMy42LTAuOCwzLjktMi4yaC0wLjFsLTAuMy0wLjFsMC40LDAuMWMwLTAuMSwwLTAuMiwwLTAuMwoJCWMwLTEuMy0xLjgtMi40LTQtMi41Yy0xLjgtMC4xLTMuNCwwLjUtMy44LDEuNEMxNy44LDM0LjIsMTcuOCwzNC40LDE3LjgsMzQuNHoiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMThfIiBjeD0iLTEzMjguMjIwMiIgY3k9IjM0ODEuNzQ3MSIgcj0iNy4xMDIiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMzA3OCAwLjIyMjggMC4yNDA5IDAuMTkwOSAtMTIyMS41MjUxIC0zNDAuNzk4NCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KCQk8c3RvcCAgb2Zmc2V0PSI4Ljc1MDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNEOTk5MTQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjQwOTgiIHN0eWxlPSJzdG9wLWNvbG9yOiNENTk2MTIiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjczNSIgc3R5bGU9InN0b3AtY29sb3I6I0M5OEQwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQkE4MjA3Ii8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzMyXyIgY2xhc3M9InN0NiIgZD0iTTI2LjgsMjkuNGMwLDAuNS0wLjksMS0yLDAuOXMtMi0wLjYtMi0xLjJzMC45LTEsMi0wLjlDMjYsMjguMiwyNi44LDI4LjgsMjYuOCwyOS40eiIvPgoJCgkJPHJhZGlhbEdyYWRpZW50IGlkPSJYTUxJRF8xOV8iIGN4PSItMzA3OS41NTMiIGN5PSIyMDQ0LjQxMSIgcj0iMTUuNjcyNSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMC40MjU4IDAgMCAwLjMyMjUgLTEyNzkuOTgxMyAtNjE3LjE4OTkpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CgkJPHN0b3AgIG9mZnNldD0iOC4xMzAwMDBlLTAyIiBzdHlsZT0ic3RvcC1jb2xvcjojREU3RjE0Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC4zMzg5IiBzdHlsZT0ic3RvcC1jb2xvcjojREE3RDEyIi8+CgkJPHN0b3AgIG9mZnNldD0iMC41OTkzIiBzdHlsZT0ic3RvcC1jb2xvcjojQ0U3NjBEIi8+CgkJPHN0b3AgIG9mZnNldD0iMC44NjAyIiBzdHlsZT0ic3RvcC1jb2xvcjojQkE2QzA1Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC45ODciIHN0eWxlPSJzdG9wLWNvbG9yOiNBRDY1MDAiLz4KCTwvcmFkaWFsR3JhZGllbnQ+Cgk8cGF0aCBpZD0iWE1MSURfMzBfIiBjbGFzcz0ic3Q3IiBkPSJNMzUuMSw0My40YzAsMi4xLTIuMiwzLjUtNSwzLjNzLTUtMi01LTRjMC0yLjEsMi4yLTMuNSw1LTMuM0MzMi44LDM5LjYsMzUuMSw0MS40LDM1LjEsNDMuNHoiCgkJLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMjBfIiBjeD0iLTMwNzYuMzYxNiIgY3k9IjIwMTEuMTY0OCIgcj0iMTAuOTExOCIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMC40MjU4IDAgMCAwLjMyMjUgLTEyNzkuOTgxMyAtNjE3LjE4OTkpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CgkJPHN0b3AgIG9mZnNldD0iOC43NTAwMDBlLTAyIiBzdHlsZT0ic3RvcC1jb2xvcjojRDk5OTE0Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC40MDk4IiBzdHlsZT0ic3RvcC1jb2xvcjojRDU5NjEyIi8+CgkJPHN0b3AgIG9mZnNldD0iMC43MzUiIHN0eWxlPSJzdG9wLWNvbG9yOiNDOThEMEQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjk4NyIgc3R5bGU9InN0b3AtY29sb3I6I0JBODIwNyIvPgoJPC9yYWRpYWxHcmFkaWVudD4KCTxwYXRoIGlkPSJYTUxJRF8yOV8iIGNsYXNzPSJzdDgiIGQ9Ik0zNS44LDMzLjFjMCwwLjgtMS4zLDEuMy0yLjksMS4yYy0xLjYtMC4yLTIuOS0wLjgtMi45LTEuNmMwLTAuOCwxLjMtMS4zLDIuOS0xLjIKCQlDMzQuNiwzMS43LDM1LjgsMzIuMywzNS44LDMzLjF6Ii8+CgkKCQk8cmFkaWFsR3JhZGllbnQgaWQ9IlhNTElEXzIxXyIgY3g9Ii0zMTAyLjMwMzUiIGN5PSIyMDU5Ljc2NjgiIHI9IjUuOTI4NSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMC40MjU4IDAgMCAwLjMyMjUgLTEyNzkuOTgxMyAtNjE3LjE4OTkpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CgkJPHN0b3AgIG9mZnNldD0iOC4xMzAwMDBlLTAyIiBzdHlsZT0ic3RvcC1jb2xvcjojREU3RjE0Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC4zMzg5IiBzdHlsZT0ic3RvcC1jb2xvcjojREE3RDEyIi8+CgkJPHN0b3AgIG9mZnNldD0iMC41OTkzIiBzdHlsZT0ic3RvcC1jb2xvcjojQ0U3NjBEIi8+CgkJPHN0b3AgIG9mZnNldD0iMC44NjAyIiBzdHlsZT0ic3RvcC1jb2xvcjojQkE2QzA1Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC45ODciIHN0eWxlPSJzdG9wLWNvbG9yOiNBRDY1MDAiLz4KCTwvcmFkaWFsR3JhZGllbnQ+Cgk8cGF0aCBpZD0iWE1MSURfMjhfIiBjbGFzcz0ic3Q5IiBkPSJNNDIuMyw0Ny43YzAsMS0xLjIsMS44LTIuNiwxLjdjLTEuNC0wLjEtMi42LTEtMi42LTIuMWMwLTEuMSwxLjItMS44LDIuNi0xLjcKCQlDNDEuMSw0NS45LDQyLjMsNDYuOCw0Mi4zLDQ3Ljd6Ii8+CgkKCQk8cmFkaWFsR3JhZGllbnQgaWQ9IlNWR0lEXzJfIiBjeD0iLTMxMDYuODA4OCIgY3k9IjIwMzAuMDM0MyIgcj0iOC44NDA4IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjQyNTggMCAwIDAuMzIyNSAtMTI3OS45ODEzIC02MTcuMTg5OSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KCQk8c3RvcCAgb2Zmc2V0PSI4LjYwMDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNDNzczMTUiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjM3NzQiIHN0eWxlPSJzdG9wLWNvbG9yOiNDMzcxMTMiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjY3MTgiIHN0eWxlPSJzdG9wLWNvbG9yOiNCNzZDMEYiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjk2NjkiIHN0eWxlPSJzdG9wLWNvbG9yOiNBMzY0MDciLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjk4NyIgc3R5bGU9InN0b3AtY29sb3I6I0ExNjMwNiIvPgoJPC9yYWRpYWxHcmFkaWVudD4KCTxwYXRoIGNsYXNzPSJzdDEwIiBkPSJNNDAuMiwzOC41YzAsMC43LDAuOSwxLjMsMS45LDEuNGMxLjEsMC4xLDEuOS0wLjQsMS45LTEuMmMwLTAuMSwwLTAuMSwwLTAuMmwwLDBjMC0wLjUtMC45LTEtMS45LTEuMQoJCWMtMC43LTAuMS0xLjQsMC4xLTEuNywwLjRsMCwwQzQwLjMsMzguMSw0MC4yLDM4LjMsNDAuMiwzOC41eiIvPgoJCgkJPHJhZGlhbEdyYWRpZW50IGlkPSJYTUxJRF8yMl8iIGN4PSItMzExOS4yMjA1IiBjeT0iMjA0OC44OTk5IiByPSI0LjM5ODUiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuNDI1OCAwIDAgMC4zMjI1IC0xMjc5Ljk4MTMgLTYxNy4xODk5KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguMTMwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0RFN0YxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuMzM4OSIgc3R5bGU9InN0b3AtY29sb3I6I0RBN0QxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNTk5MyIgc3R5bGU9InN0b3AtY29sb3I6I0NFNzYwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuODYwMiIgc3R5bGU9InN0b3AtY29sb3I6I0JBNkMwNSIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQUQ2NTAwIi8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzI1XyIgY2xhc3M9InN0MTEiIGQ9Ik00OC43LDQ0YzAsMC41LTAuNiwxLTEuMywwLjljLTAuNy0wLjEtMS4zLTAuNS0xLjMtMS4xYzAtMC41LDAuNi0xLDEuMy0wLjkKCQlDNDgsNDMsNDguNyw0My40LDQ4LjcsNDR6Ii8+CjwvZz4KPGcgaWQ9IkxheWVyXzFfMl8iPgoJCgkJPGxpbmVhckdyYWRpZW50IGlkPSJYTUxJRF8yM18iIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iLTIxMjYuNTcyIiB5MT0iMTAyNi43NzYxIiB4Mj0iLTIxMjYuNTcyIiB5Mj0iMTAzOS45Mzc5IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjc2NTIgLTEuNjc0MTIzZS0wMiAtMS44Nzk5NDdlLTAyIDAuODU5MyAtMTU3Ni4yMTU3IC04OTMuNDA4NSkiPgoJCTxzdG9wICBvZmZzZXQ9IjEuOTcwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0Y3QkMwMCIvPgoJCTxzdG9wICBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOiNGQ0Q3M0UiLz4KCTwvbGluZWFyR3JhZGllbnQ+Cgk8cGF0aCBpZD0iWE1MSURfN18iIGNsYXNzPSJzdDEyIiBkPSJNNDcsMjdsLTAuNCwxMC45bC0yOC41LTUuMWMtMS4xLTAuMi0xLjgtMS0xLjgtMS44YzAuMi0yLjksMC4xLTUuOCwwLjMtOC42CgkJYzAtMC41LDAuMS0xLjIsMC45LTEuM2MwLjUtMC4xLDEuMiwwLjIsMS43LDAuM2wzLjQsMC43YzAsMC4xLDAsMC4yLDAsMC4zYzAsMS4yLDEuMiwyLjMsMi43LDIuNGMxLjQsMC4xLDIuNi0wLjYsMi44LTEuNgoJCWwxMC41LDIuMmMtMC4xLDAuMS0wLjIsMC4zLTAuMiwwLjRjMCwwLjUsMC41LDEuMSwxLjMsMS4yYzAuNywwLjEsMS4zLTAuNCwxLjMtMC45YzAtMC4xLDAtMC4xLDAtMC4yQzQxLjEsMjUuNiw0NywyNyw0NywyN3oiLz4KCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik0xNi41LDIyLjRjMC4yLTAuOS0wLjItMiwyLjUtMS4ybDMuNCwwLjdjMC4zLTAuNywxLjQtMS4yLDIuOC0xLjFjMS41LDAuMSwyLjgsMS4xLDIuOCwyYzAsMC4xLDAsMC4yLDAsMC4yCgkJbDEwLjUsMi4ybDAsMGMwLjItMC4zLDAuNy0wLjQsMS4zLTAuNGMwLjcsMC4xLDEuMywwLjQsMS4zLDAuOGw1LjgsMS4zTDMyLDE3Yy0xLjMtMC45LTMuMS0xLjMtNC44LTEuMWMtMS42LDAuMi0zLjYsMC41LTUuMSwxLjIKCQljLTEuOCwwLjYtMy40LDEuOC00LjUsMi43Yy0wLjEsMC4xLTAuNCwwLjQtMC42LDAuOEMxNi42LDIxLjEsMTYuNiwyMS43LDE2LjUsMjIuNHoiLz4KCTxnIGNsYXNzPSJzdDIiPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0yOC4xLDE2LjVjMS4yLDAsMi4zLDAuNCwzLjMsMWwxNC43LDkuOEw0NS45LDM3bC0yNy42LTQuOWMtMC42LTAuMS0xLjItMC42LTEuMi0xLjIKCQkJYzAuMS0xLjYsMC4xLTMuMywwLjItNC45YzAtMS4yLDAuMS0yLjQsMC4xLTMuNmMwLTAuMSwwLTAuMiwwLTAuM2wwLDBjMC0wLjQsMC4xLTAuOSwwLjItMS4zYzAuMS0wLjMsMC40LTAuNSwwLjQtMC42CgkJCWMxLTAuOCwyLjYtMS45LDQuMy0yLjVjMS4yLTAuNCwyLjktMC44LDQuOS0xLjFDMjcuNSwxNi41LDI3LjgsMTYuNSwyOC4xLDE2LjUgTTI4LjEsMTUuOGMtMC40LDAtMC42LDAtMSwwLjEKCQkJYy0xLjYsMC4yLTMuNiwwLjUtNS4xLDEuMmMtMS44LDAuNi0zLjQsMS44LTQuNSwyLjdjLTAuMSwwLjEtMC40LDAuNC0wLjYsMC44Yy0wLjIsMC40LTAuMywwLjktMC4zLDEuNGMwLDAuMSwwLDAuMiwwLDAuMwoJCQljLTAuMSwyLjktMC4xLDUuOC0wLjMsOC42YzAsMC44LDAuNywxLjYsMS44LDEuOGwyOC41LDUuMUw0NywyN0wzMS45LDE3QzMwLjgsMTYuMywyOS40LDE1LjgsMjguMSwxNS44TDI4LjEsMTUuOHoiLz4KCTwvZz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMjRfIiBjeD0iLTM5OTEuOTUyOSIgY3k9IjI0MDEuOTY1MSIgcj0iNi44Njg3IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjMwMzcgLTQuMzQ2MjA4ZS0wMyAtNy41ODc3MjFlLTAzIDAuMjQ4NCAtMTE3Mi42NTQ4IC01ODUuMTI5KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguMTMwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0RFN0YxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuMzM4OSIgc3R5bGU9InN0b3AtY29sb3I6I0RBN0QxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNTk5MyIgc3R5bGU9InN0b3AtY29sb3I6I0NFNzYwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuODYwMiIgc3R5bGU9InN0b3AtY29sb3I6I0JBNkMwNSIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQUQ2NTAwIi8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzZfIiBjbGFzcz0ic3QxMyIgZD0iTTIyLjcsMjkuNGMwLDAuOS0xLDEuNi0yLjIsMS40Yy0xLjItMC4yLTIuMS0wLjktMi4xLTEuOWMwLTEsMS0xLjYsMi4yLTEuNAoJCVMyMi43LDI4LjUsMjIuNywyOS40eiIvPgoJCgkJPHJhZGlhbEdyYWRpZW50IGlkPSJTVkdJRF8zXyIgY3g9Ii00MDExLjE4MTYiIGN5PSIyMzcwLjQ3NTMiIHI9IjE0LjEzMjEiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMzAzNyAtNC4zNDYyMDhlLTAzIC03LjU4NzcyMWUtMDMgMC4yNDg0IC0xMTcyLjY1NDggLTU4NS4xMjkpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CgkJPHN0b3AgIG9mZnNldD0iOC4xMzAwMDBlLTAyIiBzdHlsZT0ic3RvcC1jb2xvcjojREU3RjE0Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC4zMzg5IiBzdHlsZT0ic3RvcC1jb2xvcjojREE3RDEyIi8+CgkJPHN0b3AgIG9mZnNldD0iMC41OTkzIiBzdHlsZT0ic3RvcC1jb2xvcjojQ0U3NjBEIi8+CgkJPHN0b3AgIG9mZnNldD0iMC44NjAyIiBzdHlsZT0ic3RvcC1jb2xvcjojQkE2QzA1Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC45ODciIHN0eWxlPSJzdG9wLWNvbG9yOiNBRDY1MDAiLz4KCTwvcmFkaWFsR3JhZGllbnQ+Cgk8cGF0aCBjbGFzcz0ic3QxNCIgZD0iTTIyLjQsMjIuMmMwLDEuMiwxLjIsMi4zLDIuNywyLjRjMS40LDAuMSwyLjYtMC42LDIuOC0xLjZoLTAuMWgtMC4ybDAuMywwLjFjMC0wLjEsMC0wLjIsMC0wLjIKCQljMC0xLTEuMy0xLjktMi44LTJjLTEuMy0wLjEtMi40LDAuNC0yLjgsMS4xQzIyLjUsMjIsMjIuNCwyMi4xLDIyLjQsMjIuMnoiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMjZfIiBjeD0iLTE3NjcuOTQ2NSIgY3k9IjQ1OTMuOTUyMSIgcj0iNy4xMDIiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMjI0OCAwLjE2ODUgMC4xNjczIDAuMTQ5NSAtMTEzNy40NjU2IC0zNzEuNjE3OCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KCQk8c3RvcCAgb2Zmc2V0PSI4Ljc1MDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNEOTk5MTQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjQwOTgiIHN0eWxlPSJzdG9wLWNvbG9yOiNENTk2MTIiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjczNSIgc3R5bGU9InN0b3AtY29sb3I6I0M5OEQwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQkE4MjA3Ii8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzVfIiBjbGFzcz0ic3QxNSIgZD0iTTI5LjEsMTguNGMwLDAuNC0wLjYsMC43LTEuNCwwLjdjLTAuNy0wLjEtMS4zLTAuNC0xLjMtMC45YzAtMC40LDAuNi0wLjcsMS40LTAuNwoJCUMyOC40LDE3LjYsMjkuMSwxNy45LDI5LjEsMTguNHoiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMjdfIiBjeD0iLTQwMjYuMzA3MSIgY3k9IjIzOTguOTI5MiIgcj0iMTUuNjcyNSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMC4zMDM3IC00LjM0NjIwOGUtMDMgLTcuNTg3NzIxZS0wMyAwLjI0ODQgLTExNzIuNjU0OCAtNTg1LjEyOSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KCQk8c3RvcCAgb2Zmc2V0PSI4LjEzMDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNERTdGMTQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjMzODkiIHN0eWxlPSJzdG9wLWNvbG9yOiNEQTdEMTIiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjU5OTMiIHN0eWxlPSJzdG9wLWNvbG9yOiNDRTc2MEQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjg2MDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNCQTZDMDUiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjk4NyIgc3R5bGU9InN0b3AtY29sb3I6I0FENjUwMCIvPgoJPC9yYWRpYWxHcmFkaWVudD4KCTxwYXRoIGlkPSJYTUxJRF80XyIgY2xhc3M9InN0MTYiIGQ9Ik0zNC42LDI5LjNjLTAuMSwxLjUtMS43LDIuNy0zLjcsMi41Yy0yLTAuMi0zLjYtMS42LTMuNS0zLjFjMC4xLTEuNSwxLjctMi43LDMuNy0yLjUKCQlDMzMsMjYuMywzNC42LDI3LjcsMzQuNiwyOS4zeiIvPgoJCgkJPHJhZGlhbEdyYWRpZW50IGlkPSJYTUxJRF8zMV8iIGN4PSItNDAyMy4xMTU3IiBjeT0iMjM2NS42ODMxIiByPSIxMC45MTE4IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjMwMzcgLTQuMzQ2MjA4ZS0wMyAtNy41ODc3MjFlLTAzIDAuMjQ4NCAtMTE3Mi42NTQ4IC01ODUuMTI5KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguNzUwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0Q5OTkxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNDA5OCIgc3R5bGU9InN0b3AtY29sb3I6I0Q1OTYxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNzM1IiBzdHlsZT0ic3RvcC1jb2xvcjojQzk4RDBEIi8+CgkJPHN0b3AgIG9mZnNldD0iMC45ODciIHN0eWxlPSJzdG9wLWNvbG9yOiNCQTgyMDciLz4KCTwvcmFkaWFsR3JhZGllbnQ+Cgk8cGF0aCBpZD0iWE1MSURfM18iIGNsYXNzPSJzdDE3IiBkPSJNMzUuNCwyMS4zYzAsMC42LTEsMS0yLjEsMC45Yy0xLjEtMC4xLTIuMS0wLjYtMi4xLTEuM3MxLTEsMi4xLTAuOQoJCUMzNC41LDIwLjIsMzUuNCwyMC43LDM1LjQsMjEuM3oiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMzNfIiBjeD0iLTQwNDkuMDU3OSIgY3k9IjI0MTQuMjg1MiIgcj0iNS45Mjg1IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjMwMzcgLTQuMzQ2MjA4ZS0wMyAtNy41ODc3MjFlLTAzIDAuMjQ4NCAtMTE3Mi42NTQ4IC01ODUuMTI5KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguMTMwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0RFN0YxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuMzM4OSIgc3R5bGU9InN0b3AtY29sb3I6I0RBN0QxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNTk5MyIgc3R5bGU9InN0b3AtY29sb3I6I0NFNzYwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuODYwMiIgc3R5bGU9InN0b3AtY29sb3I6I0JBNkMwNSIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQUQ2NTAwIi8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzJfIiBjbGFzcz0ic3QxOCIgZD0iTTM5LjYsMzIuN2MwLDAuOC0wLjksMS4zLTEuOSwxLjNjLTEtMC4xLTEuOC0wLjgtMS44LTEuNnMwLjktMS4zLDEuOS0xLjMKCQlDMzguOSwzMS4yLDM5LjcsMzEuOSwzOS42LDMyLjd6Ii8+CgkKCQk8cmFkaWFsR3JhZGllbnQgaWQ9IlNWR0lEXzRfIiBjeD0iLTQwNTMuNTYzIiBjeT0iMjM4NC41NTI1IiByPSI4Ljg0MDgiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMzAzNyAtNC4zNDYyMDhlLTAzIC03LjU4NzcyMWUtMDMgMC4yNDg0IC0xMTcyLjY1NDggLTU4NS4xMjkpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CgkJPHN0b3AgIG9mZnNldD0iOC42MDAwMDBlLTAyIiBzdHlsZT0ic3RvcC1jb2xvcjojQzc3MzE1Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC4zNzc0IiBzdHlsZT0ic3RvcC1jb2xvcjojQzM3MTEzIi8+CgkJPHN0b3AgIG9mZnNldD0iMC42NzE4IiBzdHlsZT0ic3RvcC1jb2xvcjojQjc2QzBGIi8+CgkJPHN0b3AgIG9mZnNldD0iMC45NjY5IiBzdHlsZT0ic3RvcC1jb2xvcjojQTM2NDA3Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC45ODciIHN0eWxlPSJzdG9wLWNvbG9yOiNBMTYzMDYiLz4KCTwvcmFkaWFsR3JhZGllbnQ+Cgk8cGF0aCBjbGFzcz0ic3QxOSIgZD0iTTM4LjQsMjUuNmMwLDAuNSwwLjUsMS4xLDEuMywxLjJjMC43LDAuMSwxLjMtMC40LDEuMy0wLjljMC0wLjEsMC0wLjEsMC0wLjJsMCwwYzAtMC40LTAuNi0wLjgtMS4zLTAuOAoJCWMtMC41LTAuMS0xLDAuMS0xLjMsMC40bDAsMEMzOC40LDI1LjMsMzguNCwyNS41LDM4LjQsMjUuNnoiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMzRfIiBjeD0iLTQwNjUuOTc0NiIgY3k9IjI0MDMuNDE4MiIgcj0iNC4zOTg1IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjMwMzcgLTQuMzQ2MjA4ZS0wMyAtNy41ODc3MjFlLTAzIDAuMjQ4NCAtMTE3Mi42NTQ4IC01ODUuMTI5KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguMTMwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0RFN0YxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuMzM4OSIgc3R5bGU9InN0b3AtY29sb3I6I0RBN0QxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNTk5MyIgc3R5bGU9InN0b3AtY29sb3I6I0NFNzYwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuODYwMiIgc3R5bGU9InN0b3AtY29sb3I6I0JBNkMwNSIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQUQ2NTAwIi8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzFfIiBjbGFzcz0ic3QyMCIgZD0iTTQ0LjMsMjkuOWMwLDAuNC0wLjQsMC43LTEsMC43cy0xLTAuNC0xLTAuOWMwLTAuNCwwLjQtMC43LDEtMC43CgkJQzQzLjgsMjkuMSw0NC4zLDI5LjQsNDQuMywyOS45eiIvPgo8L2c+CjxnIGlkPSJMYXllcl8xXzNfIj4KCQoJCTxsaW5lYXJHcmFkaWVudCBpZD0iWE1MSURfMzZfIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9Ii0yNDIyLjUxNzMiIHkxPSIxMDA1LjY1NDYiIHgyPSItMjQyMi41MTczIiB5Mj0iMTAxNC43NjQzIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjYyODcgLTMuOTI5MDMwZS0wMiAtNS4wNDc5OThlLTAyIDAuODA3NyAtMTQ0MC42ODE1IC04OTIuMDUxMykiPgoJCTxzdG9wICBvZmZzZXQ9IjEuOTcwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0Y3QkMwMCIvPgoJCTxzdG9wICBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOiNGQ0Q3M0UiLz4KCTwvbGluZWFyR3JhZGllbnQ+Cgk8cGF0aCBpZD0iWE1MSURfMTRfIiBjbGFzcz0ic3QyMSIgZD0iTTQwLjYsMTcuMmwtMC42LDcuMmwtMTYuNy0zLjhjLTAuNi0wLjItMS4xLTAuNy0xLTEuM2MwLjItMS45LDAuMy0zLjksMC40LTUuOAoJCWMwLTAuNCwwLjEtMC44LDAuNS0wLjljMC40LTAuMSwwLjcsMC4xLDEsMC4ybDIsMC41YzAsMC4xLDAsMC4yLDAsMC4yYy0wLjEsMC44LDAuNiwxLjUsMS41LDEuNmMwLjgsMC4xLDEuNS0wLjQsMS43LTEuMWw2LjIsMS41CgkJYy0wLjEsMC4xLTAuMSwwLjItMC4xLDAuM2MwLDAuNCwwLjMsMC43LDAuNywwLjhzMC44LTAuMiwwLjktMC41di0wLjFDMzcuMiwxNi4yLDQwLjYsMTcuMiw0MC42LDE3LjJ6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QxIiBkPSJNMjIuOCwxMy43YzAuMi0wLjUsMC0xLjMsMS41LTAuN2wyLDAuNWMwLjItMC40LDAuOS0wLjgsMS43LTAuN2MwLjksMC4xLDEuNiwwLjcsMS41LDEuM2MwLDAuMSwwLDAuMSwwLDAuMgoJCWw2LjIsMS41bDAsMGMwLjItMC4yLDAuNC0wLjMsMC43LTAuMmMwLjQsMC4xLDAuNywwLjMsMC43LDAuNWwzLjQsMUwzMiwxMC4zYy0wLjgtMC42LTEuOC0wLjktMi44LTAuOGMtMSwwLjItMi4yLDAuNC0zLjEsMC43CgkJYy0xLjEsMC40LTIuMSwxLjItMi44LDEuN2MwLDAtMC4zLDAuMy0wLjQsMC41QzIyLjksMTIuOCwyMi44LDEzLjIsMjIuOCwxMy43eiIvPgoJPGcgY2xhc3M9InN0MiI+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTI5LjgsOS45YzAuNywwLDEuMywwLjMsMS45LDAuN2w4LjQsNi43bC0wLjUsNi41bC0xNi4xLTMuN2MtMC40LTAuMS0wLjYtMC40LTAuNi0wLjgKCQkJYzAuMS0xLjEsMC4yLTIuMiwwLjMtMy4zYzAuMS0wLjgsMC4xLTEuNiwwLjItMi40YzAtMC4xLDAtMC4xLDAtMC4ybDAsMGMwLTAuMywwLjEtMC42LDAuMi0wLjhjMC4xLTAuMiwwLjMtMC40LDAuMy0wLjQKCQkJYzAuNi0wLjUsMS42LTEuMywyLjYtMS42YzAuNy0wLjMsMS43LTAuNSwzLTAuNkMyOS40LDkuOSwyOS42LDkuOSwyOS44LDkuOSBNMjkuOSw5LjVjLTAuMiwwLTAuNCwwLTAuNiwwYy0xLDAuMi0yLjIsMC40LTMuMSwwLjcKCQkJYy0xLjEsMC40LTIuMSwxLjItMi44LDEuN2MwLDAtMC4zLDAuMy0wLjQsMC41Yy0wLjEsMC4zLTAuMiwwLjUtMC4yLDFjMCwwLjEsMCwwLjIsMCwwLjJjLTAuMiwxLjktMC4zLDMuOS0wLjQsNS44CgkJCWMtMC4xLDAuNSwwLjQsMS4xLDEsMS4zbDE2LjYsMy45bDAuNi03LjNMMzIsMTAuM0MzMS40LDkuOCwzMC42LDkuNiwyOS45LDkuNUwyOS45LDkuNXoiLz4KCTwvZz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMzdfIiBjeD0iLTYzMDAuMDcxMyIgY3k9IjMxODQuNDk5MyIgcj0iNi44Njg3IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjE3OTYgLTYuODIyNTU0ZS0wMyAtMS4zOTA2NjJlLTAyIDAuMTY1NiAtMTA2MS43Nzg2IC01NTIuMjIzMykiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KCQk8c3RvcCAgb2Zmc2V0PSI4LjEzMDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNERTdGMTQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjMzODkiIHN0eWxlPSJzdG9wLWNvbG9yOiNEQTdEMTIiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjU5OTMiIHN0eWxlPSJzdG9wLWNvbG9yOiNDRTc2MEQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjg2MDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNCQTZDMDUiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjk4NyIgc3R5bGU9InN0b3AtY29sb3I6I0FENjUwMCIvPgoJPC9yYWRpYWxHcmFkaWVudD4KCTxwYXRoIGlkPSJYTUxJRF8xM18iIGNsYXNzPSJzdDIyIiBkPSJNMjYuMSwxOC41Yy0wLjEsMC42LTAuNiwxLjEtMS4zLDFjLTAuNy0wLjEtMS4yLTAuNi0xLjItMS4zYzAuMS0wLjYsMC42LTEuMSwxLjMtMQoJCUMyNS43LDE3LjMsMjYuMiwxNy45LDI2LjEsMTguNXoiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iU1ZHSURfNV8iIGN4PSItNjMxOS4zMDAzIiBjeT0iMzE1My4wMDk1IiByPSIxNC4xMzIxIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjE3OTYgLTYuODIyNTU0ZS0wMyAtMS4zOTA2NjJlLTAyIDAuMTY1NiAtMTA2MS43Nzg2IC01NTIuMjIzMykiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KCQk8c3RvcCAgb2Zmc2V0PSI4LjEzMDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNERTdGMTQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjMzODkiIHN0eWxlPSJzdG9wLWNvbG9yOiNEQTdEMTIiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjU5OTMiIHN0eWxlPSJzdG9wLWNvbG9yOiNDRTc2MEQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjg2MDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNCQTZDMDUiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjk4NyIgc3R5bGU9InN0b3AtY29sb3I6I0FENjUwMCIvPgoJPC9yYWRpYWxHcmFkaWVudD4KCTxwYXRoIGNsYXNzPSJzdDIzIiBkPSJNMjYuMywxMy43Yy0wLjEsMC44LDAuNiwxLjUsMS41LDEuNmMwLjgsMC4xLDEuNS0wLjQsMS43LTEuMWgtMC4xaC0wLjFoMC4yYzAtMC4xLDAtMC4xLDAtMC4yCgkJYzAuMS0wLjYtMC42LTEuMy0xLjUtMS4zYy0wLjgtMC4xLTEuNCwwLjItMS43LDAuN0MyNi4zLDEzLjUsMjYuMywxMy42LDI2LjMsMTMuN3oiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMzhfIiBjeD0iLTI4OTUuMTQ2NyIgY3k9IjcyMzAuOTM4NSIgcj0iNy4xMDIiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMTM5NSAwLjEwOTUgOS4zMzg2MjdlLTAyIDAuMTAxOSAtMTA0OS4wOTQyIC00MDkuMzQ3OCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KCQk8c3RvcCAgb2Zmc2V0PSI4Ljc1MDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNEOTk5MTQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjQwOTgiIHN0eWxlPSJzdG9wLWNvbG9yOiNENTk2MTIiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjczNSIgc3R5bGU9InN0b3AtY29sb3I6I0M5OEQwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQkE4MjA3Ii8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzEyXyIgY2xhc3M9InN0MjQiIGQ9Ik0zMC4zLDExLjJjMCwwLjMtMC40LDAuNC0wLjksMC40cy0wLjgtMC40LTAuOC0wLjZzMC40LTAuNCwwLjktMC40CgkJQzMwLDEwLjYsMzAuMywxMC45LDMwLjMsMTEuMnoiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMzlfIiBjeD0iLTYzMzQuNDI1OCIgY3k9IjMxODEuNDYzNCIgcj0iMTUuNjcyNSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMC4xNzk2IC02LjgyMjU1NGUtMDMgLTEuMzkwNjYyZS0wMiAwLjE2NTYgLTEwNjEuNzc4NiAtNTUyLjIyMzMpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CgkJPHN0b3AgIG9mZnNldD0iOC4xMzAwMDBlLTAyIiBzdHlsZT0ic3RvcC1jb2xvcjojREU3RjE0Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC4zMzg5IiBzdHlsZT0ic3RvcC1jb2xvcjojREE3RDEyIi8+CgkJPHN0b3AgIG9mZnNldD0iMC41OTkzIiBzdHlsZT0ic3RvcC1jb2xvcjojQ0U3NjBEIi8+CgkJPHN0b3AgIG9mZnNldD0iMC44NjAyIiBzdHlsZT0ic3RvcC1jb2xvcjojQkE2QzA1Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC45ODciIHN0eWxlPSJzdG9wLWNvbG9yOiNBRDY1MDAiLz4KCTwvcmFkaWFsR3JhZGllbnQ+Cgk8cGF0aCBpZD0iWE1MSURfMTFfIiBjbGFzcz0ic3QyNSIgZD0iTTMzLjIsMTguNWMtMC4xLDEuMS0xLjEsMS44LTIuMiwxLjZzLTIuMS0xLjEtMi0yLjJjMC4xLTEuMSwxLjEtMS44LDIuMi0xLjYKCQlDMzIuNCwxNi42LDMzLjMsMTcuNSwzMy4yLDE4LjV6Ii8+CgkKCQk8cmFkaWFsR3JhZGllbnQgaWQ9IlhNTElEXzQwXyIgY3g9Ii02MzMxLjIzNDQiIGN5PSIzMTQ4LjIxNzMiIHI9IjEwLjkxMTgiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMTc5NiAtNi44MjI1NTRlLTAzIC0xLjM5MDY2MmUtMDIgMC4xNjU2IC0xMDYxLjc3ODYgLTU1Mi4yMjMzKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguNzUwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0Q5OTkxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNDA5OCIgc3R5bGU9InN0b3AtY29sb3I6I0Q1OTYxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNzM1IiBzdHlsZT0ic3RvcC1jb2xvcjojQzk4RDBEIi8+CgkJPHN0b3AgIG9mZnNldD0iMC45ODciIHN0eWxlPSJzdG9wLWNvbG9yOiNCQTgyMDciLz4KCTwvcmFkaWFsR3JhZGllbnQ+Cgk8cGF0aCBpZD0iWE1MSURfMTBfIiBjbGFzcz0ic3QyNiIgZD0iTTMzLjksMTMuMmMwLDAuNC0wLjYsMC42LTEuMywwLjVjLTAuNi0wLjEtMS4yLTAuNC0xLjItMC45YzAtMC40LDAuNi0wLjYsMS4zLTAuNQoJCVMzMy45LDEyLjksMzMuOSwxMy4yeiIvPgoJCgkJPHJhZGlhbEdyYWRpZW50IGlkPSJYTUxJRF80MV8iIGN4PSItNjM1Ny4xNzYzIiBjeT0iMzE5Ni44MTkzIiByPSI1LjkyODUiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMTc5NiAtNi44MjI1NTRlLTAzIC0xLjM5MDY2MmUtMDIgMC4xNjU2IC0xMDYxLjc3ODYgLTU1Mi4yMjMzKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguMTMwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0RFN0YxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuMzM4OSIgc3R5bGU9InN0b3AtY29sb3I6I0RBN0QxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNTk5MyIgc3R5bGU9InN0b3AtY29sb3I6I0NFNzYwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuODYwMiIgc3R5bGU9InN0b3AtY29sb3I6I0JBNkMwNSIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQUQ2NTAwIi8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzlfIiBjbGFzcz0ic3QyNyIgZD0iTTM2LDIwLjljMCwwLjUtMC41LDAuOS0xLjIsMC44Yy0wLjYtMC4xLTEuMS0wLjUtMS0xLjFjMC0wLjUsMC41LTAuOSwxLjItMC44CgkJQzM1LjYsMTkuOSwzNi4xLDIwLjMsMzYsMjAuOXoiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iU1ZHSURfNl8iIGN4PSItNjM2MS42ODE2IiBjeT0iMzE2Ny4wODY3IiByPSI4Ljg0MDgiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMTc5NiAtNi44MjI1NTRlLTAzIC0xLjM5MDY2MmUtMDIgMC4xNjU2IC0xMDYxLjc3ODYgLTU1Mi4yMjMzKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguNjAwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0M3NzMxNSIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuMzc3NCIgc3R5bGU9InN0b3AtY29sb3I6I0MzNzExMyIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNjcxOCIgc3R5bGU9InN0b3AtY29sb3I6I0I3NkMwRiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTY2OSIgc3R5bGU9InN0b3AtY29sb3I6I0EzNjQwNyIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQTE2MzA2Ii8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggY2xhc3M9InN0MjgiIGQ9Ik0zNS41LDE2LjFjMCwwLjQsMC4zLDAuNywwLjcsMC44YzAuNCwwLjEsMC44LTAuMiwwLjktMC41di0wLjFsMCwwYzAtMC4zLTAuNC0wLjUtMC43LTAuNQoJCWMtMC40LDAtMC42LDAtMC43LDAuMmwwLDBDMzUuNiwxNS45LDM1LjUsMTYsMzUuNSwxNi4xeiIvPgoJCgkJPHJhZGlhbEdyYWRpZW50IGlkPSJYTUxJRF80Ml8iIGN4PSItNjM3NC4wOTMzIiBjeT0iMzE4NS45NTI0IiByPSI0LjM5ODUiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMTc5NiAtNi44MjI1NTRlLTAzIC0xLjM5MDY2MmUtMDIgMC4xNjU2IC0xMDYxLjc3ODYgLTU1Mi4yMjMzKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguMTMwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0RFN0YxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuMzM4OSIgc3R5bGU9InN0b3AtY29sb3I6I0RBN0QxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNTk5MyIgc3R5bGU9InN0b3AtY29sb3I6I0NFNzYwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuODYwMiIgc3R5bGU9InN0b3AtY29sb3I6I0JBNkMwNSIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQUQ2NTAwIi8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzhfIiBjbGFzcz0ic3QyOSIgZD0iTTM4LjksMTkuMWMwLDAuMy0wLjMsMC40LTAuNiwwLjRjLTAuNCwwLTAuNS0wLjMtMC41LTAuNnMwLjMtMC40LDAuNi0wLjQKCQlDMzguNywxOC41LDM4LjksMTguOCwzOC45LDE5LjF6Ii8+CjwvZz4KPC9zdmc+Cg==',\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'token.cheddar.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Pulse',\n symbol: 'PULSE',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGNpcmNsZSBjeD0iMTYiIGN5PSIxNiIgcj0iMTYiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNNi41NTAzNSAxOS4xMjM5TDkuMTcxNjYgMTQuOTQ5MkM5LjMyNzMxIDE0LjcwMTMgOS41OTk0OCAxNC41NTA4IDkuODkyMiAxNC41NTA4SDE4LjQxNEMxOS41NDEyIDE0LjU1MDggMjAuNTYxNCAxMy44ODM2IDIxLjAxMzMgMTIuODUwOUMyMS4zNjQ3IDEyLjA0NzYgMjAuNzc2MSAxMS4xNDc3IDE5Ljg5OTMgMTEuMTQ3N0gxMS45NzQyTDExLjU0ODggMTEuMjU0TDEzLjY0NjEgNy40NDA3OEMxMy43OTU2IDcuMTY4OTEgMTQuMDgxMyA3IDE0LjM5MTUgN0gyMi4wNzU0QzI1LjA1NDMgNyAyNy4xMTA3IDkuOTgyNzkgMjYuMDUxMyAxMi43NjdMMjUuODYzMSAxMy4yNjEzQzI0LjU0NDQgMTYuNzI2OSAyMS4yMjE4IDE5LjAxNzYgMTcuNTEzOCAxOS4wMTc2SDYuOTc1NzVMNi41NTAzNSAxOS4xMjM5Wk04LjM2ODg0IDE5Ljk3NDdDNy4wNTA0MiAxOS45NzQ3IDUuODM2NTUgMjAuNjkyNSA1LjIwMTE4IDIxLjg0NzdDNC42MTIyMyAyMi45MTg1IDUuMzg2OTQgMjQuMjI4NyA2LjYwOTAzIDI0LjIyODdIMTAuODA0NEwxMy40NjMxIDE5Ljg2ODRMMTMuMTQ0MSAxOS45NzQ3SDguMzY4ODRaIiBmaWxsPSJ1cmwoI3BhaW50MF9saW5lYXJfMjBfMykiLz4KPGRlZnM+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQwX2xpbmVhcl8yMF8zIiB4MT0iMTguMDI2NiIgeTE9IjUuNTI5MjYiIHgyPSIyLjI2ODYxIiB5Mj0iMzAuMTExNyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgo8c3RvcCBzdG9wLWNvbG9yPSIjREQ1OUZGIi8+CjxzdG9wIG9mZnNldD0iMC40NzM5NTgiIHN0b3AtY29sb3I9IiM1MDY5RkYiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMDAyNUZGIi8+CjwvbGluZWFyR3JhZGllbnQ+CjwvZGVmcz4KPC9zdmc+Cg==',\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '52a047ee205701895ee06a375492490ec9c597ce.factory.bridge.near',\n },\n {\n decimals: 18,\n icon:\n 'data:image/png;base64,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',\n name: 'Ether',\n reference: null,\n reference_hash: null,\n spec: 'ft-1.0.0',\n symbol: 'ETH',\n id: 'aurora',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Pixeltoken',\n symbol: 'PXT',\n icon:\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAANdJREFUWIXll70RwjAMhWUuNGwARVgEmuyQJRgo7AA7uGESGioaGlpTcK+w7nR+gcIyfJ1zys/7dHKSsO53SSqyqHlzEZFu7gm364Wq22z3VF07BpB8CANXn971JRP+Dejk8fSgLoz6kgm/Btjk58MqW4/TM6svmfBrQIOkSAiO92W2Hmc+gF8D6BV6h17qhOxUWPg18C16OizaN2AlxXTEFEWkxZ2QRe8DoJQctG8AIDH4vS8iFjY5aM8Au8Ox+DdgvRUBO+8W/g0AbUIf/5TqBsLf/x2/ADJHSOenTxC2AAAAAElFTkSuQmCC',\n reference: '',\n reference_hash: '',\n decimals: 6,\n id: 'pixeltoken.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Debio',\n symbol: 'DBIO',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIxOTAgOTcgNDIwIDQyMCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgODAwIDgwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZGVmcz48c3R5bGU+LnN0MHtmaWxsOiMzNjM2MzZ9LnN0M3tmaWxsOiNmZjU2ZTB9PC9zdHlsZT48L2RlZnM+PGNpcmNsZSBjbGFzcz0ic3QzIiBjeD0iNDAwIiBjeT0iMzA3LjM5IiByPSIyMDguNTgiLz48cGF0aCBkPSJNNDczLjk5IDIxMS4zczIuMzQgNTYuMjUtNzcuMzQgOTguNDMtNzAuMzEgOTMuNzQtNzAuMzEgOTMuNzQiIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiNlNmU2ZTY7c3Ryb2tlLXdpZHRoOjM3LjQ5NzU7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MTAiLz48cGF0aCBkPSJNMzI2LjAxIDIxMS4zcy0yLjM0IDU2LjI1IDc3LjM0IDk4LjQzIDcwLjMxIDkzLjc0IDcwLjMxIDkzLjc0IiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojZmZmO3N0cm9rZS13aWR0aDozNy40OTc1O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjEwIi8+PGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iNDAwIiBjeT0iMjE2LjQyIiByPSIyMC40OSIvPjxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjQwMCIgY3k9IjM5OC4zNiIgcj0iMjAuNDkiLz48dGV4dCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMzYuMzQyIDY1OC4wNzUpIiBjbGFzcz0ic3QzIiBzdHlsZT0id2hpdGUtc3BhY2U6cHJlO2ZvbnQtc2l6ZToxMTIuNDkyNXB4O2ZvbnQtZmFtaWx5OidBcnRlZ3JhU2Fucy1TZW1pQm9sZCciPkRlQmlvPC90ZXh0Pjwvc3ZnPg==',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'dbio.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Aurora',\n symbol: 'AURORA',\n icon:\n \"data:image/svg+xml,%3Csvg version='1.1' id='Layer_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 288 288' style='enable-background:new 0 0 288 288;' xml:space='preserve'%3E %3Cstyle type='text/css'%3E .st0%7Bfill:%2370D44B;%7D .st1%7Bfill:%23FFFFFF;%7D %3C/style%3E %3Cpath class='st0' d='M144,0L144,0c79.5,0,144,64.5,144,144v0c0,79.5-64.5,144-144,144h0C64.5,288,0,223.5,0,144v0 C0,64.5,64.5,0,144,0z'/%3E %3Cpath class='st1' d='M144,58.8c7.6,0,14.5,4.3,17.9,11.1l56.2,112.5c4.9,9.9,0.9,21.9-9,26.8c-2.8,1.4-5.8,2.1-8.9,2.1H87.8 c-11,0-20-9-20-20c0-3.1,0.7-6.2,2.1-8.9l56.2-112.5C129.5,63,136.4,58.7,144,58.8 M144,45c-12.8,0-24.5,7.2-30.2,18.7L57.6,176.2 c-8.3,16.7-1.6,36.9,15.1,45.3c4.7,2.3,9.9,3.6,15.1,3.6h112.5c18.6,0,33.8-15.1,33.8-33.7c0-5.2-1.2-10.4-3.6-15.1L174.2,63.7 C168.5,52.2,156.8,45,144,45z'/%3E %3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: 'aaaaaa20d9e0e2461697782ef11675f668207961.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Meta Token',\n symbol: '$META',\n icon:\n \"data:image/svg+xml,%3csvg width='96' height='96' viewBox='0 0 96 96' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3crect width='96' height='96' rx='48' fill='white'/%3e%3cpath d='M29.2241 28.7456C28.396 27.9423 27.0094 28.5289 27.0091 29.6825L27 66.6773C26.9997 67.8501 28.4257 68.4286 29.2426 67.5872L48.6529 47.5943L29.2241 28.7456Z' fill='%23231B51'/%3e%3cpath d='M66.7759 28.7456C67.604 27.9423 68.9906 28.5289 68.9909 29.6825L69 66.6773C69.0003 67.8501 67.5743 68.4286 66.7574 67.5872L47.3471 47.5943L66.7759 28.7456Z' fill='%23231B51'/%3e%3c/svg%3e\",\n reference: 'https://metapool.app',\n reference_hash: null,\n decimals: 24,\n id: 'meta-token.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Potato 🥔',\n symbol: 'POTATO',\n icon:\n 'data:image/jpeg;base64,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',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'v1.dacha-finance.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Flux Token',\n symbol: 'FLX',\n icon:\n \"data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg width='140px' height='140px' viewBox='0 0 140 140' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Ctitle%3EFlux Logo New%3C/title%3E%3Cdefs%3E%3CradialGradient cx='50%25' cy='0%25' fx='50%25' fy='0%25' r='248.533062%25' gradientTransform='translate(0.500000,0.000000),scale(1.000000,0.393939),rotate(90.000000),translate(-0.500000,-0.000000)' id='radialGradient-1'%3E%3Cstop stop-color='%23FE84FC' offset='0%25'%3E%3C/stop%3E%3Cstop stop-color='%232ED1FF' offset='100%25'%3E%3C/stop%3E%3C/radialGradient%3E%3C/defs%3E%3Cg id='logos' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='Group' transform='translate(-143.000000, -251.000000)'%3E%3Cg id='Group-2' transform='translate(0.000000, 251.000000)'%3E%3Cg id='Flux-Logo' transform='translate(143.000000, 0.000000)'%3E%3Cg id='Flux-Logo-New' transform='translate(70.000000, 70.000000) rotate(90.000000) translate(-70.000000, -70.000000) '%3E%3Ccircle id='Oval' fill='%23FFFFFF' cx='70' cy='70' r='70'%3E%3C/circle%3E%3Crect id='Rectangle' fill='%230F0E25' transform='translate(70.000000, 83.000000) rotate(90.000000) translate(-70.000000, -83.000000) ' x='57' y='50' width='26' height='66' rx='13'%3E%3C/rect%3E%3Cpath d='M50,30 C57.1797017,30 63,35.8202983 63,43 L63,96 L63,96 L50,96 C42.8202983,96 37,90.1797017 37,83 L37,43 C37,35.8202983 42.8202983,30 50,30 Z' id='Rectangle' fill='%230F0E25'%3E%3C/path%3E%3Cpath d='M63,44 L76,44 C83.1797017,44 89,49.8202983 89,57 L89,97 C89,104.179702 83.1797017,110 76,110 C68.8202983,110 63,104.179702 63,97 L63,44 L63,44 Z' id='Rectangle' fill='url(%23radialGradient-1)'%3E%3C/path%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '3ea8ea4237344c9931214796d9417af1a1180770.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'nUSDO',\n symbol: 'nUSDO',\n icon:\n 'data:image/png;base64,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',\n reference: '',\n reference_hash: '',\n decimals: 8,\n id: 'v3.oin_finance.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'oinfinance',\n symbol: 'OIN',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 974.66 974.66'%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bisolation:isolate;%7D.cls-2%7Bfill:%235a8dff;%7D.cls-3%7Bfill:%23fff;%7D.cls-4,.cls-5%7Bfill:%231b57f6;%7D.cls-5%7Bmix-blend-mode:multiply;%7D%3C/style%3E%3C/defs%3E%3Cg class='cls-1'%3E%3Cg id='图层_1' data-name='图层 1'%3E%3Ccircle class='cls-2' cx='487.33' cy='484.76' r='473.82'/%3E%3Ccircle class='cls-3' cx='487.33' cy='484.76' r='358.99'/%3E%3Cpath class='cls-4' d='M487.33,98.08c-213.55,0-386.67,173.12-386.67,386.68S273.78,871.43,487.33,871.43,874,698.31,874,484.76,700.88,98.08,487.33,98.08ZM368.59,297.83a9,9,0,0,1,12.71-.14,287,287,0,0,0,137.53,75,110.56,110.56,0,0,1,51.78,28.2,9,9,0,0,1-12.49,12.93,92.54,92.54,0,0,0-43.3-23.61,304.9,304.9,0,0,1-146.09-79.66A9,9,0,0,1,368.59,297.83Zm216.7,197.36a9,9,0,0,1,17.93,1.3c-1.86,25.6-15.92,49.6-38.58,65.86-18.31,13.13-40.08,19.87-63.28,19.87a130.41,130.41,0,0,1-32.7-4.3,9,9,0,0,1,4.52-17.4c29.91,7.76,58.67,3.23,81-12.78C572.48,534.61,583.82,515.45,585.29,495.19Zm-9.7-47.57a15.39,15.39,0,1,1,12.8,17.6A15.39,15.39,0,0,1,575.59,447.62Zm-244-118.07a9,9,0,0,1,12.71,0,335.48,335.48,0,0,0,163.36,90.53c30.07,6.9,50.7,33.19,48,61.16-1.64,17.07-9.08,30.42-21.52,38.59-8.23,5.41-18.1,8.14-28.9,8.14a76.36,76.36,0,0,1-23.39-3.91,9,9,0,1,1,5.52-17.1c14.54,4.69,27.64,3.93,36.9-2.15,7.73-5.08,12.39-13.82,13.49-25.29,2-20.88-15.76-37.71-34.1-41.92a353.42,353.42,0,0,1-172.1-95.35A9,9,0,0,1,331.59,329.55Zm-30,41.34a9,9,0,0,1,12.71-.23c36.29,35,81.18,62.68,133.43,82.22a9,9,0,0,1-3.15,17.41,8.89,8.89,0,0,1-3.14-.58c-54.58-20.41-101.55-49.38-139.62-86.11A9,9,0,0,1,301.56,370.89ZM452.39,512.8a15.39,15.39,0,1,1-12.8-17.6A15.38,15.38,0,0,1,452.39,512.8ZM278.9,429.48a9,9,0,0,1,12.54-2.07c38.33,27.47,67.76,43.32,105.66,61.43a9,9,0,1,1-7.75,16.21c-38.8-18.53-69-34.79-108.38-63A9,9,0,0,1,278.9,429.48Zm-4.46,60.34A9,9,0,0,1,287,487.67c45.31,32,91.6,55,137.57,68.37a9,9,0,0,1-2.5,17.62,8.76,8.76,0,0,1-2.51-.36c-47.9-13.9-96-37.78-142.94-70.95A9,9,0,0,1,274.44,489.82Zm18.28,73.95a9,9,0,0,1,12.38-2.89c44.19,27.46,93.91,45,123.06,51.75,27.43,6.32,56.78,9,65.69,9,77.91,0,141.29-63.38,141.29-141.29,0-65.78-46.6-123.81-110.81-138L516,340.57l0-.24a257.48,257.48,0,0,1-100.58-53,9,9,0,1,1,11.69-13.66A239.17,239.17,0,0,0,528.3,324.87l8.22,1.9,0,.16c68.06,19,116.62,82.18,116.62,153.46,0,87.82-71.45,159.27-159.27,159.27-9.61,0-40.9-2.87-69.72-9.51-30.5-7-82.46-25.38-128.52-54A9,9,0,0,1,292.72,563.77ZM493.85,688.36l-9-.07c-5.35-.12-10.74-.42-16.1-.9a302.94,302.94,0,0,1-109.22-31.85,9,9,0,1,1,8.2-16,284.85,284.85,0,0,0,102.64,29.94,225.63,225.63,0,0,0,23.34.87l7.29-.11c101.46-3.78,182.84-87.49,182.84-189.86,0-89.16-63.2-167.31-150.26-185.83l-.12,0-.11,0a206.73,206.73,0,0,1-49.14-18.68A9,9,0,0,1,492.69,260,188.85,188.85,0,0,0,537.56,277h0c95.18,20.37,164.23,105.85,164.23,203.35C701.82,595.07,608.53,688.36,493.85,688.36Z'/%3E%3Cpath class='cls-5' d='M144.68,484.76c0-206.19,161.39-374.67,364.73-386-7.27-.41-14.58-.64-21.94-.64-213.56,0-386.68,173.12-386.68,386.68S273.91,871.43,487.47,871.43c7.36,0,14.67-.23,21.94-.64C306.07,859.42,144.68,690.94,144.68,484.76Z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 8,\n id: '9aeb50f542050172359a0e1a25a9933bc8c01259.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Myria',\n symbol: 'MYRIA',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyBpZD0iTGF5ZXJfMSIgZGF0YS1uYW1lPSJMYXllciAxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MDAgNjAwIj48ZGVmcz48Y2xpcFBhdGggaWQ9ImNsaXAtcGF0aCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAtLjEzKSI+PHBhdGggc3R5bGU9ImZpbGw6bm9uZSIgZD0iTTAgMGg2MDB2NjAwSDB6Ii8+PC9jbGlwUGF0aD48c3R5bGU+LmNscy00e2ZpbGw6I2ZmZn08L3N0eWxlPjwvZGVmcz48ZyBzdHlsZT0iY2xpcC1wYXRoOnVybCgjY2xpcC1wYXRoKSI+PHBhdGggZD0iTTYwMCAzMDAuMTNjMCAxNjUuNjktMTM0LjMxIDMwMC0zMDAgMzAwUzAgNDY1LjgxIDAgMzAwLjEzIDEzNC4zMS4xMyAzMDAgLjEzczMwMCAxMzQuMzEgMzAwIDMwMCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAtLjEzKSIgc3R5bGU9ImZpbGw6Izg2MmFlOSIvPjxwYXRoIGNsYXNzPSJjbHMtNCIgZD0iTTQ3MS4xMSA0MjEuMjFhMTcuNzUgMTcuNzUgMCAwIDAgMi4wNy04IDcuMjQgNy4yNCAwIDAgMCAwLTEuMVYyNjMuNDdhOTUuMzYgOTUuMzYgMCAwIDAtMTQyLjYxLTgxLjcybC0xLjQ5Ljg1LTEyNi42NCA3My4xMi0xLjExLjY1YTE4LjE4IDE4LjE4IDAgMCAwLTUuNzcgNS43NWMtLjE1LjIxLS4yNi40MS0uMzkuNjNhMTguMzMgMTguMzMgMCAwIDAgNi43MSAyNWwyNDMuODQgMTQwLjgzYTE4LjMzIDE4LjMzIDAgMCAwIDI1LTYuNzFjLjEzLS4yMi4yNC0uNDIuMzUtLjY1TTIxMi41NCAyNzEuOTNsMTQuNzQtOC41MyA2Mi44NC0zNi4yNiA0OS4zOC0yOC41MSAxLjYtLjkxYTc2LjM0IDc2LjM0IDAgMCAxIDExMyA2NS4yNnYxNDguNDNaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIC0uMTMpIi8+PHBhdGggY2xhc3M9ImNscy00IiBkPSJNMTI4Ljg5IDQyMS4yMWExNy43NyAxNy43NyAwIDAgMS0yLjA4LTggNy41IDcuNSAwIDAgMSAwLTEuMVYyNjMuNDdhOTUuMzYgOTUuMzYgMCAwIDEgMTQyLjYxLTgxLjcybDEuNDkuODUgMTI2LjY1IDczLjExIDEuMTEuNjVhMTguMTcgMTguMTcgMCAwIDEgNS43NyA1Ljc1Yy4xNS4yMS4yNi40MS4zOS42M2ExOC4zMyAxOC4zMyAwIDAgMS02LjcxIDI1TDE1NC4yOCA0MjguNThhMTguMzMgMTguMzMgMCAwIDEtMjUtNi43MWMtLjEzLS4yMi0uMjQtLjQyLS4zNS0uNjVtMjU4LjUzLTE0OS4yOS0xNC43NC04LjUzLTYyLjgzLTM2LjI2LTQ5LjM5LTI4LjUyLTEuNi0uOTFhNzYuMzQgNzYuMzQgMCAwIDAtMTEzIDY1LjI2djE0OC40NFoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLS4xMykiLz48L2c+PC9zdmc+',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'myriadcore.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'xRef Finance Token',\n symbol: 'xREF',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNjIiIHZpZXdCb3g9IjAgMCA1NiA2MiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEuODU2OTMgMTcuODg1NkMxLjg1NjkzIDE2LjAyNzggMi44ODY5MiAxNC4zMjMyIDQuNTMxNTEgMTMuNDU5MkwyNS45MjE2IDIuMjIxNzJDMjcuMzc3NSAxLjQ1NjgzIDI5LjExNjUgMS40NTY4MyAzMC41NzI0IDIuMjIxNzJMNTEuOTYyNCAxMy40NTkyQzUzLjYwNyAxNC4zMjMyIDU0LjYzNyAxNi4wMjc4IDU0LjYzNyAxNy44ODU2VjQ1LjYzMDRDNTQuNjM3IDQ3LjYwMjEgNTMuNDc4MiA0OS4zODk4IDUxLjY3ODMgNTAuMTk0N0wzMC4yODgyIDU5Ljc2MDZDMjguOTg5NCA2MC4zNDE0IDI3LjUwNDYgNjAuMzQxNSAyNi4yMDU3IDU5Ljc2MDZMNC44MTU3IDUwLjE5NDdDMy4wMTU3NCA0OS4zODk4IDEuODU2OTMgNDcuNjAyMSAxLjg1NjkzIDQ1LjYzMDRMMS44NTY5MyAxNy44ODU2WiIgZmlsbD0idXJsKCNwYWludDBfbGluZWFyXzEyNDYxXzIwNzUpIiBzdHJva2U9IiMwMEM2QTIiIHN0cm9rZS13aWR0aD0iMiIvPgo8cGF0aCBkPSJNMTMuNjk3OCAyMC4zMzJMMjguMjQ3MSAxNEwyOC4yMjAyIDMwLjU0MTdMMjAuMjgwMyAyMy43MTE2TDEyLjMxMzUgMzAuOTI5NVYyMi4zNjU0QzEyLjMxNTIgMjEuNDkyMiAxMi44NTM4IDIwLjY5OTMgMTMuNjk3OCAyMC4zMzJaIiBmaWxsPSIjMDBDNkEyIiBmaWxsLW9wYWNpdHk9IjAuNSIvPgo8cGF0aCBkPSJNMTQuMTAyMyA0Mi43NjQ1TDI4LjI0NzEgNDYuODYyNkwyOC4yMjAyIDM0LjU5NDRMMjAuMjc5NCAyNy45NDE0TDEyLjMxMzUgMzQuOTcyMlY0MC41Mjc0QzEyLjMxMzUgNDEuNTUxNSAxMy4wMzY3IDQyLjQ1NTkgMTQuMTAyMyA0Mi43NjQ1WiIgZmlsbD0iIzAwQzZBMiIgZmlsbC1vcGFjaXR5PSIwLjUiLz4KPHBhdGggZD0iTTQzLjY0NDUgNDIuNzYzM0wyOC4yNzQ0IDQ2Ljg2MzJMMjguMjQ2OCAzNC41MTU3TDQzLjIyMSAyMi40NjQ4QzQzLjIyMSAyMi40NjQ4IDQ1Ljc5MyAyNC4zOTk2IDQ1LjAzNzMgMjcuODE5NkM0My43MDQ4IDMzLjg1MTEgMzUuMTc5NiAzNS45ODY5IDM1LjE3OTYgMzUuOTg2OUw0My45MDk2IDQxLjE1NjFDNDQuNjE1NSA0MS41NzggNDQuNDU1NCA0Mi41NDcgNDMuNjQ0NSA0Mi43NjMzWiIgZmlsbD0iIzQ1RkZERSIvPgo8cGF0aCBkPSJNMzguNTkwMyAxOC45NzkzTDI4LjI3MzQgMTRMMjguMjQ2OCAzMC40MzE1TDQwLjY5NSAyMC4zNTA5QzQwLjY5NSAyMC4zNTA5IDQwLjQyNzEgMjAuMDU5NyAzOS42OTAxIDE5LjU4MDVDMzkuNDI4OSAxOS40MTE0IDM4LjU5MDMgMTguOTc5MyAzOC41OTAzIDE4Ljk3OTNaIiBmaWxsPSIjNDVGRkRFIi8+CjxwYXRoIGQ9Ik00MC41NTEgMTYuMDEwMUw0Ni42NjAyIDE4LjI4MDVDNDYuOTY3NSAxOC4zOTQzIDQ3LjE2OCAxOC42NjU2IDQ3LjE2OCAxOC45NjVWMjMuMTIwN0M0Ny4xNjggMjMuNDM4OCA0Ni43MjYgMjMuNTgyMiA0Ni41MDQyIDIzLjMzNDNMNDAuMjU1MyAxNi4zNjg3QzQwLjA4OTMgMTYuMTgzMSA0MC4zMDYyIDE1LjkxODEgNDAuNTUxIDE2LjAxMDFaIiBmaWxsPSIjNDVGRkRFIi8+CjxkZWZzPgo8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MF9saW5lYXJfMTI0NjFfMjA3NSIgeDE9IjI4LjI0NyIgeTE9IjEiIHgyPSIyOC4yNDciIHkyPSI2MC42NzM1IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIHN0b3AtY29sb3I9IiMwMTEzMjAiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMDAxMzIwIi8+CjwvbGluZWFyR3JhZGllbnQ+CjwvZGVmcz4KPC9zdmc+Cg==',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'xtoken.ref-finance.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Solana',\n symbol: 'SOL',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiBoZWlnaHQ9IjEwMCIgdmlld0JveD0iMCAwIDEwMCAxMDAiIHdpZHRoPSIxMDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxsaW5lYXJHcmFkaWVudCBpZD0iYSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSI1MCIgeDI9IjUwIiB5MT0iMjciIHkyPSI3NCI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjMTRlNmFkIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYTk2NGRlIi8+PC9saW5lYXJHcmFkaWVudD48Y2xpcFBhdGggaWQ9ImIiPjxwYXRoIGQ9Im0wIDBoMTAwdjEwMGgtMTAweiIvPjwvY2xpcFBhdGg+PGcgY2xpcC1wYXRoPSJ1cmwoI2IpIj48cGF0aCBkPSJtNTAgMGM5Ljg4OTEgMCAxOS41NTYxIDIuOTMyNDUgMjcuNzc4NSA4LjQyNjUyIDguMjIyNSA1LjQ5NDA4IDE0LjYzMTEgMTMuMzAyOTggMTguNDE1NSAyMi40MzkyOHM0Ljc3NSAxOS4xODk3IDIuODQ1MyAyOC44ODg3Yy0xLjkyOTMgOS42OTkxLTYuNjkxMyAxOC42MDgyLTEzLjY4NCAyNS42MDA4LTYuOTkyNiA2Ljk5MjctMTUuOTAxNyAxMS43NTQ3LTI1LjYwMDggMTMuNjg0LTkuNjk5IDEuOTI5Ny0xOS43NTI0LjkzOTEtMjguODg4Ny0yLjg0NTNzLTE2Ljk0NTItMTAuMTkzLTIyLjQzOTI4LTE4LjQxNTVjLTUuNDk0MDctOC4yMjI0LTguNDI2NTItMTcuODg5NC04LjQyNjUyLTI3Ljc3ODUgMC0xMy4yNjA4IDUuMjY3ODQtMjUuOTc4NSAxNC42NDQ3LTM1LjM1NTMgOS4zNzY4LTkuMzc2ODYgMjIuMDk0NS0xNC42NDQ3IDM1LjM1NTMtMTQuNjQ0N3oiIGZpbGw9IiMwMDAiLz48ZyBmaWxsPSJ1cmwoI2EpIiBmaWxsLW9wYWNpdHk9Ii45MiI+PHBhdGggZD0ibTMwLjM4MDYgNjIuNzg4OWMuMzEzMS0uMzIzNC44MzQ5LS41MzkgMS4zNTY3LS41MzloNDYuMjMwN2MuODM0OSAwIDEuMjUyMyAxLjA3NzkuNjI2MiAxLjcyNDdsLTkuMTgzNiA5LjQ4NjRjLS4zMTMuMzIzNC0uODM0OC41MzktMS4zNTY2LjUzOWgtNDYuMTI2NGMtLjgzNDggMC0xLjI1MjItMS4wNzgtLjYyNjEtMS43MjQ4eiIvPjxwYXRoIGQ9Im0zMC4zODA2IDI3LjUzOWMuMzEzMS0uMzIzNC44MzQ5LS41MzkgMS4zNTY3LS41MzloNDYuMjMwN2MuODM0OSAwIDEuMjUyMyAxLjA3OC42MjYxIDEuNzI0OGwtOS4xODM1IDkuNDg2M2MtLjMxMzEuMzIzNC0uODM0OC41MzktMS4zNTY2LjUzOWgtNDYuMTI2NGMtLjgzNDkgMC0xLjI1MjMtMS4wNzgtLjYyNjEtMS43MjQ4eiIvPjxwYXRoIGQ9Im02OS41MTUgNDUuMDAxOGMtLjMxMzEtLjMyMzQtLjgzNDktLjUzOS0xLjM1NjctLjUzOWgtNDYuMjMwN2MtLjgzNDggMC0xLjI1MjIgMS4wNzgtLjYyNjEgMS43MjQ4bDkuMTgzNSA5LjQ4NjRjLjMxMzEuMzIzMy44MzQ5LjUzODkgMS4zNTY3LjUzODloNDYuMjMwNmMuODM0OSAwIDEuMjUyNC0xLjA3OC42MjYyLTEuNzI0OHoiLz48L2c+PC9nPjwvc3ZnPg==',\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'sol.token.a11bd.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'TerraUSD',\n symbol: 'UST',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiBoZWlnaHQ9IjEwMCIgdmlld0JveD0iMCAwIDEwMCAxMDAiIHdpZHRoPSIxMDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0ibTgxLjA5NiAxMy43MjItLjAxLS4wMS4wMTQtLjAwOGE0NC4xNzQgNDQuMTc0IDAgMCAwIC0yOC43NjUtMTAuNTc0IDQ0LjE2NyA0NC4xNjcgMCAwIDAgLTE4LjAxIDMuODI1Yy0zLjcwNSAxLjU2NS02LjcxNSAzLjYzNS05LjE5NSA2Ljg4NS0xMi43NCAxNi44MyAyOS45NiAyOS4wNiA1Mi43OSAyOS4xMDQgMTAuNDkyIDcuNTI4IDEzLjQ0Ni0yMS4yMzYgMy4xNzctMjkuMjIyeiIgZmlsbD0iIzBkM2NhNCIvPjxwYXRoIGQ9Im0zNi44OTMgMTQuMDYzYy01Ljg2MyA4LjgxNi0yNS40MDMgMTUuMDI3LTI4LjYxNSAxNC4wNTdsLS4wMTktLjA0Yy4xMzItLjI2OC4yNjgtLjUzMi40LS43OTVhNDYuNjcyIDQ2LjY3MiAwIDAgMSA4LjQ4LTExLjU4IDQ3LjIxIDQ3LjIxIDAgMCAxIDkuMTg1LTcuMTUxYzIuNzM3LTEuNTg0IDUuNTM2LTEuNjg4IDYuNDU4LTEuNzIgOC43MDguMTc3IDQuMTYgNy4xNiA0LjExIDcuMjI5em0tNC44MDYgNjIuMzAzYy40MTggMi43NzItLjAwOSAxMy43MTMtLjU4IDE0LjYzNC0uNDg2LjAzMi0xLjUwMy4wOTUtNC40NDgtMS41NTdhNDYuODI3IDQ2LjgyNyAwIDAgMSAtOS45Mi03LjU3MyA0Ni45NTIgNDYuOTUyIDAgMCAxIC04LjQ4LTExLjU4IDQ2LjUyNCA0Ni41MjQgMCAwIDEgLTUuMjIzLTIxLjVjMC0yLjU4MS4yMDgtNS4xMTguNjEyLTcuNTg3YTQ2LjUxMSA0Ni41MTEgMCAwIDEgMi4yNjUtOC41OThjMy4zNzYgNC40ODMgNy4yNzggOC41NDQgMTAuNTk1IDEzLjA3MyAzLjE1OSA0LjMxNSA3LjUwNiAxMS4zNDQgOC4zODYgMTIuODUgNS41IDkuMzE2IDYuMzc2IDE1LjA3NCA2Ljc5MyAxNy44Mzh6bS0zLjMxMi0zOC44NTdjLTIuMDA2LTE1LjMxIDI5LjA1NS0yNS45NzkgNDIuNzA1LTI2LjM4MiAxLjYzOC4wMTggNi42MTYuMDc3IDkuNTI1IDIuNDM2IDUzLjQ5NSA1MC45MzctNDYuOTU3IDY0LjI0LTUyLjIzIDIzLjk0N3oiIGZpbGw9IiM1NDk0ZjgiLz48cGF0aCBkPSJtMjAuNDU3IDkyLjM1YzAgMS44MjUgMS4yNyAzLjMwNCAyLjg0NSAzLjMxMyAzNy40OTYuMjU5IDczLjY5NC0xLjQ2IDczLjY5NC03LjA4MyAwLTE3LjAwNy03Ni41MzkgMy43Ny03Ni41MzkgMy43N3oiIGZpbGw9IiM3NjAxMDEiLz48cGF0aCBkPSJtMjMuMzIgNDQuMTg3YTIuODYzIDIuODYzIDAgMCAwIC0yLjg2MyAyLjg2M3Y0NS4zYzAgMS41NzQgMS4yNyAyLjg1IDIuODQ1IDIuODU4IDM3LjQ5Ni0uMjc2IDczLjc0LTEyLjY4NyA3My42OTQtNi42M3YtNTEuMDI0Yy4wNDUtNi4wNTMtMzYuMTg5IDYuMzUzLTczLjY3NiA2LjYzNHoiIGZpbGw9IiNkZTMwMzAiLz48cGF0aCBkPSJtODQgODBjOC44LTEuNiAxMi4zMzMtLjMzMyAxMyAuNXYzLjVjLTEuNi0xLjYtOS4zMzMtLjY2Ny0xMyAwLTIwLjUgNC41LTQ3LjgzMyA2LjMzMy02My41IDcuNXYtNGMxMS41IDAgNTIuNS01LjUgNjMuNS03LjV6bTAtOC4yMzJjOC44LTEuNiAxMi4zMzMtLjMzMyAxMyAuNXYzLjVjLTEuNi0xLjYtOS4zMzMtLjY2Ny0xMyAwLTIwLjUgNC41LTQ3LjgzMyA2LjMzMy02My41IDcuNXYtNGMxNC41IDEgNTIuNS01LjUgNjMuNS03LjV6bTAtOC4yMzJjOC44LTEuNiAxMi4zMzMtLjMzNCAxMyAuNXYzLjVjLTEuNi0xLjYtOS4zMzMtLjY2OC0xMyAwLTIwLjUgNC41LTQ3LjgzMyA2LjMzMi02My41IDcuNXYtNGMxNC41IDEgNTIuNS01LjUgNjMuNS03LjV6bTAtOC4yMzNjOC44LTEuNiAxMi4zMzMtLjMzMyAxMyAuNXYzLjVjLTEuNi0xLjYtOS4zMzMtLjY2Ny0xMyAwLTIwLjUgNC41LTQ3LjgzMyA2LjMzMy02My41IDcuNXYtNGMxNC41IDEgNTIuNS01LjUgNjMuNS03LjV6bTAtOC4yMzNjOC44LTEuNiAxMi4zMzMtLjMzMyAxMyAuNXYzLjVjLTEuNi0xLjYtOS4zMzMtLjY2Ni0xMyAwLTIwLjUgNC41LTQ3LjgzMyA2LjMzNC02My41IDcuNXYtNGMxNC41IDEgNTIuNS01LjUgNjMuNS03LjV6bTAtOC4yMzJjOC44LTEuNiAxMi4zMzMtLjMzMyAxMyAuNXYzLjVjLTEuNi0xLjYtOS4zMzMtLjY2Ny0xMyAwLTIwLjUgNC41LTQ3LjgzMyA2LjMzMy02My41IDcuNXYtNGMxNC41IDEgNTIuNS01LjUgNjMuNS03LjV6IiBmaWxsPSIjZmZmIi8+PHBhdGggZD0ibTI4LjU5MyA3MS41NGEyMDQuMTEyIDIwNC4xMTIgMCAwIDAgNy4wNjYtLjM3NiAyNTEuNzQ1IDI1MS43NDUgMCAwIDAgNi43MDYtLjU3MmMxLjEzLS4xMDkgMi4yNy0uMjIyIDMuNDQ1LS4zNSAxLjE3LS4xMjYgMi4zNjgtLjI1OCAzLjYxMi0uNDEyIDEuMjQzLS4xNSAyLjUzNi0uMzEzIDMuODg5LS40OSAxLjM1Mi0uMTczIDIuNzYzLS4zNzIgNC4yMzgtLjU5di0yNy41M2MtMTAuNTMyIDEuNTU2LTIyLjMxNyAyLjg3Mi0zNC4yMjkgMi45NThhMi44NjMgMi44NjMgMCAwIDAgLTIuODYzIDIuODY0djI0LjY1M2MxLjQ4NCAwIDIuODk1LS4wMTggNC4yNDctLjA1IDEuMzUzLS4wMTggMi42NDYtLjA2IDMuODktLjEwNXoiIGZpbGw9IiMxYTNhYjkiLz48cGF0aCBkPSJtMjMuMDUzIDQ2LjQ4IDEuMjIxIDEuODYzLTIuMjIzLjEyNiAxLjAwMi0xLjk4OHptNS4xMzUtLjI5IDEuMjIgMS44NjItMi4yMjIuMTI2em01LjEzNS0uMjkyIDEuMjIgMS44NjItMi4yMjMuMTI2em01LjEzNS0uMjkxIDEuMjIgMS44NjItMi4yMjMuMTI2em01LjEzNC0uMjkyIDEuMjIxIDEuODYyLTIuMjIzLjEyNnptNS4xMzUtLjI5MSAxLjIyMSAxLjg2Mi0yLjIyMy4xMjZ6bTUuMTMzLS4yOTIgMS4yMiAxLjg2Mi0yLjIyMi4xMjZ6bS0yOC4wNDcgNS4wMjYgMS4yMiAxLjg2Mi0yLjIyMi4xMjd6bTUuMTM1LS4yOTEgMS4yMiAxLjg2My0yLjIyMy4xMjZ6bTUuMTM1LS4yOTIgMS4yMiAxLjg2My0yLjIyMy4xMjZ6bTUuMTM0LS4yOTEgMS4yMjEgMS44NjItMi4yMjMuMTI3em01LjEzNS0uMjkyIDEuMjIxIDEuODYzLTIuMjIzLjEyNnptNS4xMzUtLjI5MSAxLjIyIDEuODYyLTIuMjIzLjEyN3ptLTI4LjA0NyA1LjAyNiAxLjIyIDEuODYyLTIuMjIzLjEyNnptNS4xMzUtLjI5MiAxLjIyIDEuODYzLTIuMjIzLjEyNnptNS4xMzUtLjI5MiAxLjIyIDEuODYzLTIuMjIzLjEyNiAxLjAwMi0xLjk4OXptNS4xMzQtLjI5IDEuMjIxIDEuODYyLTIuMjIzLjEyNiAxLjAwMi0xLjk4OXptNS4xMzUtLjI5MyAxLjIyIDEuODYzLTIuMjIyLjEyNnptNS4xMzUtLjI5IDEuMjIgMS44NjItMi4yMjMuMTI2em01LjEzMi0uMjkyIDEuMjIxIDEuODYyLTIuMjIzLjEyNiAxLjAwMi0xLjk4OXptLTI4LjA0MiA1LjAyNiAxLjIyIDEuODYyLTIuMjIzLjEyNyAxLjAwMy0xLjk5em01LjEzNC0uMjkxIDEuMjIxIDEuODYyLTIuMjIzLjEyNnptNS4xMzUtLjI5MyAxLjIyMSAxLjg2My0yLjIyMy4xMjd6bTUuMTM1LS4yOSAxLjIyIDEuODYyLTIuMjIzLjEyNnptNS4xMzUtLjI5MiAxLjIyIDEuODYyLTIuMjIzLjEyNnptNS4xMzQtLjI5MSAxLjIyMSAxLjg2Mi0yLjIyMy4xMjZ6bS0yOC4wNDggNS4wMjYgMS4yMiAxLjg2My0yLjIyMy4xMjZ6bTUuMTM0LS4yOTEgMS4yMjEgMS44NjMtMi4yMjMuMTI2em01LjEzNS0uMjkyIDEuMjIxIDEuODYzLTIuMjIzLjEyNnptNS4xMzUtLjI5IDEuMjIgMS44NjItMi4yMjMuMTI2IDEuMDAzLTEuOTg5em01LjEzNS0uMjkzIDEuMjIgMS44NjMtMi4yMjMuMTI2em01LjEzNC0uMjkxIDEuMjIxIDEuODYyLTIuMjIzLjEyN3ptNS4xMzMtLjI5MiAxLjIyMSAxLjg2My0yLjIyMy4xMjZ6bS0zMC42NTUgOS4wNDEgMS4yMjIgMS44NjMtMi4yMjMuMTI2IDEuMDAyLTEuOTg5em01LjEzNi0uMjkxIDEuMjIgMS44NjMtMi4yMjMuMTI2em01LjEzNC0uMjkyIDEuMjIxIDEuODYzLTIuMjIzLjEyNnptNS4xMzUtLjI5MSAxLjIyMSAxLjg2My0yLjIyMy4xMjZ6bTUuMTM1LS4yOTEgMS4yMjEgMS44NjItMi4yMjMuMTI2IDEuMDAyLTEuOTg5em01LjEzNS0uMjkyIDEuMjIgMS44NjMtMi4yMjMuMTI2em01LjEzMy0uMjkyIDEuMjIgMS44NjMtMi4yMjMuMTI2em0tMjguMTk2LTIuMjY2IDEuMjIxIDEuODYzLTIuMjIzLjEyNiAxLjAwMi0xLjk4OHptNS4xMzUtLjI5IDEuMjIxIDEuODYyLTIuMjIzLjEyNnptNS4xMzUtLjI5MiAxLjIyIDEuODYyLTIuMjIzLjEyNnptNS4xMzQtLjI5MSAxLjIyMSAxLjg2Mi0yLjIyMy4xMjZ6bTUuMTM1LS4yOTIgMS4yMjEgMS44NjItMi4yMjMuMTI2em01LjEzNS0uMjkyIDEuMjIxIDEuODYzLTIuMjIzLjEyNnoiIGZpbGw9IiNmZmYiLz48L3N2Zz4=',\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'ust.token.a11bd.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Celo',\n symbol: 'CELO',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiBoZWlnaHQ9IjEwMCIgdmlld0JveD0iMCAwIDEwMCAxMDAiIHdpZHRoPSIxMDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxjbGlwUGF0aCBpZD0iYSI+PHBhdGggZD0ibTAgMGgxMDB2MTAwaC0xMDB6Ii8+PC9jbGlwUGF0aD48ZyBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGQ9Im01MCAwYzkuODg5MSAwIDE5LjU1NjEgMi45MzI0NSAyNy43Nzg1IDguNDI2NTIgOC4yMjI1IDUuNDk0MDggMTQuNjMxMSAxMy4zMDI5OCAxOC40MTU1IDIyLjQzOTI4czQuNzc1IDE5LjE4OTcgMi44NDUzIDI4Ljg4ODdjLTEuOTI5MyA5LjY5OTEtNi42OTEzIDE4LjYwODItMTMuNjg0IDI1LjYwMDgtNi45OTI2IDYuOTkyNy0xNS45MDE3IDExLjc1NDctMjUuNjAwOCAxMy42ODQtOS42OTkgMS45Mjk3LTE5Ljc1MjQuOTM5MS0yOC44ODg3LTIuODQ1M3MtMTYuOTQ1Mi0xMC4xOTMtMjIuNDM5MjgtMTguNDE1NWMtNS40OTQwNy04LjIyMjQtOC40MjY1Mi0xNy44ODk0LTguNDI2NTItMjcuNzc4NSAwLTEzLjI2MDggNS4yNjc4NC0yNS45Nzg1IDE0LjY0NDctMzUuMzU1MyA5LjM3NjgtOS4zNzY4NiAyMi4wOTQ1LTE0LjY0NDcgMzUuMzU1My0xNC42NDQ3eiIgZmlsbD0iI2ZiY2M1YyIvPjxnIGZpbGw9IiNmZmYiPjxwYXRoIGQ9Im00My41NDIxIDczLjcyNDljMy40MDg1LjAwODMgNi43NDI5LS45OTQ4IDkuNTgxMS0yLjg4MjUgMi44MzgxLTEuODg3NiA1LjA1MjQtNC41NzQ4IDYuMzYyNi03LjcyMTVzMS42NTczLTYuNjExNC45OTc1LTkuOTU1NWMtLjY1OTktMy4zNDQtMi4yOTcxLTYuNDE3Mi00LjcwNDMtOC44MzAzLTIuNDA3My0yLjQxMzItNS40NzY0LTQuMDU3OS04LjgxODktNC43MjU5LTMuMzQyNC0uNjY4MS02LjgwNzktLjMyOTQtOS45NTc4Ljk3My0zLjE0OTkgMS4zMDI1LTUuODQyNSAzLjUxMDItNy43MzcxIDYuMzQzOC0xLjg5NDYgMi44MzM1LTIuOTA1OSA2LjE2NTQtMi45MDU5IDkuNTc0IDAgNC41NjEgMS44MDkgOC45MzU5IDUuMDMwMiAxMi4xNjQ5IDMuMjIxMiAzLjIyOTEgNy41OTE2IDUuMDQ4OCAxMi4xNTI2IDUuMDZ6bTAgNi4yNzUxYy00LjY0OTYuMDA4My05LjE5NzMtMS4zNjI5LTEzLjA2NzMtMy45NC0zLjg3MDEtMi41NzcyLTYuODg4Ny02LjI0NDQtOC42NzM4LTEwLjUzNzgtMS43ODUyLTQuMjkzMy0yLjI1NjYtOS4wMTk3LTEuMzU0Ni0xMy41ODFzMy4xMzY5LTguNzUyNSA2LjQyMTctMTIuMDQzM2MzLjI4NDgtMy4yOTA3IDcuNDcyMS01LjUzMzEgMTIuMDMxOC02LjQ0MzMgNC41NTk3LS45MTAxIDkuMjg2OS0uNDQ3MiAxMy41ODM0IDEuMzMwMnM3Ljk2OTIgNC43ODk0IDEwLjU1MzMgOC42NTQ5YzIuNTg0IDMuODY1NSAzLjk2MzQgOC40MTA2IDMuOTYzNCAxMy4wNjAzLjAwNTUgMy4wODQtLjU5NzIgNi4xMzg5LTEuNzczNiA4Ljk4OTgtMS4xNzYzIDIuODUwOS0yLjkwMzQgNS40NDE5LTUuMDgyMiA3LjYyNDZzLTQuNzY2NiAzLjkxNDQtNy42MTU0IDUuMDk1OS01LjkwMjYgMS43ODk3LTguOTg2NyAxLjc4OTd6Ii8+PHBhdGggZD0ibTU2LjUgNjAuNzI0OWMzLjQwODYuMDA4MyA2Ljc0MjktLjk5NDggOS41ODExLTIuODgyNHM1LjA1MjUtNC41NzQ5IDYuMzYyNi03LjcyMTZjMS4zMTAyLTMuMTQ2NyAxLjY1NzMtNi42MTEzLjk5NzUtOS45NTU0LS42NTk5LTMuMzQ0MS0yLjI5NzEtNi40MTcyLTQuNzA0My04LjgzMDQtMi40MDczLTIuNDEzMS01LjQ3NjQtNC4wNTc4LTguODE4OC00LjcyNTktMy4zNDI1LS42NjgtNi44MDgtLjMyOTQtOS45NTc5Ljk3MzEtMy4xNDk5IDEuMzAyNC01Ljg0MjUgMy41MTAyLTcuNzM3MSA2LjM0MzdzLTIuOTA1OSA2LjE2NTQtMi45MDU5IDkuNTc0YzAgNC41NjEgMS44MDkgOC45MzU5IDUuMDMwMiAxMi4xNjVzNy41OTE2IDUuMDQ4OCAxMi4xNTI2IDUuMDU5OXptMCA2LjI3NTFjLTQuNjQ3OSAwLTkuMTkxMy0xLjM3ODItMTMuMDU1OS0zLjk2MDUtMy44NjQ1LTIuNTgyMi02Ljg3NjYtNi4yNTI0LTguNjU1My0xMC41NDY0LTEuNzc4Ni00LjI5NDEtMi4yNDQtOS4wMTkyLTEuMzM3Mi0xMy41Nzc3LjkwNjctNC41NTg2IDMuMTQ0OS04Ljc0NTkgNi40MzE0LTEyLjAzMjRzNy40NzM4LTUuNTI0NyAxMi4wMzI0LTYuNDMxNGM0LjU1ODUtLjkwNjggOS4yODM2LS40NDE0IDEzLjU3NzcgMS4zMzcyIDQuMjk0IDEuNzc4NyA3Ljk2NDIgNC43OTA4IDEwLjU0NjQgOC42NTUzIDIuNTgyMiAzLjg2NDYgMy45NjA1IDguNDA4IDMuOTYwNSAxMy4wNTU5LS4wMTExIDYuMjI5Mi0yLjQ5MDYgMTIuMi02Ljg5NTMgMTYuNjA0N3MtMTAuMzc1NSA2Ljg4NDItMTYuNjA0NyA2Ljg5NTN6Ii8+PHBhdGggZD0ibTU3LjY4ODkgNjcuODU3MWMxLjYyMzQtMS45NzM4IDIuNzg2LTQuMjg0OCAzLjQwMzQtNi43NjQ3IDIuNDczNy0uNjM0MSA0Ljc4MTItMS43OTUgNi43NjQ3LTMuNDAzNC0uMDk4MyAyLjg5MDUtLjcyNDkgNS43Mzg2LTEuODQ4NyA4LjQwMzQtMi42NDQxIDEuMDg1MS01LjQ2MjUgMS42ODMtOC4zMTk0IDEuNzY0N3ptLTE3LjQzNy0yNy42MDVjLTIuNDM1NC42MzQ2LTQuNzAxNiAxLjc5NjQtNi42Mzg2IDMuNDAzMy4wNzI1LTIuODkzNi43MDAxLTUuNzQ2NCAxLjg0ODctOC40MDMzIDIuNjU4NS0xLjE0MzcgNS41MTA0LTEuNzcxMSA4LjQwMzQtMS44NDg4LTEuNjIzNCAxLjk3MzgtMi43ODYgNC4yODQ4LTMuNDAzNCA2Ljc2NDd6Ii8+PC9nPjwvZz48L3N2Zz4=',\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'celo.token.a11bd.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Celo Dollar',\n symbol: 'cUSD',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiBoZWlnaHQ9IjEwMCIgdmlld0JveD0iMCAwIDEwMCAxMDAiIHdpZHRoPSIxMDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0ibTEwMCA1MGMwLTI3LjYxNDItMjIuMzg1OC01MC01MC01MHMtNTAgMjIuMzg1OC01MCA1MCAyMi4zODU4IDUwIDUwIDUwIDUwLTIyLjM4NTggNTAtNTB6IiBmaWxsPSIjNDVjZDg1Ii8+PGcgZmlsbD0iI2ZmZiI+PHBhdGggZD0ibTY5Ljg4MDUgNjIuNjQzOGMtMS41NjcxIDMuMzkzMS0zLjkzNzUgNi4zNTMyLTYuOTA2MSA4LjYyNDEtMi45Njg1IDIuMjcwOC02LjQ0NTggMy43ODQxLTEwLjEzMDcgNC40MDg3LTMuNjg1LjYyNDYtNy40NjY3LjM0MTctMTEuMDE3Ny0uODI0MS0zLjU1MTEtMS4xNjU4LTYuNzY0Ni0zLjE3OTQtOS4zNjIzLTUuODY2Ni0yLjU5NzgtMi42ODcxLTQuNTAxNS01Ljk2NjktNS41NDY1LTkuNTU1NC0xLjA0NDktMy41ODg1LTEuMTk5Ni03LjM3NzUtLjQ1MDctMTEuMDM5My43NDg5LTMuNjYxNyAyLjM3ODktNy4wODU3IDQuNzQ4OS05Ljk3NTggMi4zNzAxLTIuODkgNS40MDg3LTUuMTU4OSA4Ljg1MjktNi42MTAzbDIuMjY2OCA1LjM3OTJjLTIuNTcgMS4wODMxLTQuODM3NSAyLjc3NjEtNi42MDYgNC45MzI3LTEuNzY4NSAyLjE1NjUtMi45ODQ4IDQuNzExNS0zLjU0MzYgNy40NDM5LS41NTg5IDIuNzMyNC0uNDQzNSA1LjU1OTguMzM2MyA4LjIzNzYuNzc5OCAyLjY3NzcgMi4yMDAzIDUuMTI1MSA0LjEzODggNy4xMzAyIDEuOTM4NCAyLjAwNTIgNC4zMzYzIDMuNTA3OCA2Ljk4NjEgNC4zNzc3czUuNDcxNyAxLjA4MSA4LjIyMTUuNjE0OWMyLjc0OTctLjQ2NjEgNS4zNDQ0LTEuNTk1MyA3LjU1OTUtMy4yODk4IDIuMjE1Mi0xLjY5NDUgMy45ODQtMy45MDMzIDUuMTUzNC02LjQzNTNsNS45MTg5LjMwNDJ6Ii8+PHBhdGggZD0ibTU2LjEwNjEgMjQuNXYtNGg0LjUwMDV2NGMyIDAgNS4xNjY3LjY2NjcgNi41IDF2NC41Yy0xOS0zLTE1LjUwMTEgMy44NDYyLTggNSA2LjcyMTcgMS4wMzM5IDExIDIgMTEuNSA5IC40IDUuNi01LjgzMzMgNy42NjY3LTkgOHYzLjVoLTV2LTMuNWMtMi40IDAtNi42NjY3LTEuNjY2Ny04LjUtMi41di01LjVjNC41IDIuNSAxNyA0LjUgMTcgMHMtMTYuNTAxMS0zLTE4LjAwMDUtMTFjLTEuMDAyMy01LjM0NzUgNS4zMzMzLTcuODMzMyA5LTguNXoiLz48L2c+PC9zdmc+',\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'cusd.token.a11bd.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'ABR',\n symbol: 'ABR',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjEyMSIgdmlld0JveD0iMCAwIDEyMSAxMjEiIHdpZHRoPSIxMjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48Y2lyY2xlIGN4PSI2MC41IiBjeT0iNjAuNSIgZmlsbD0iIzBlMGIwZiIgZmlsbC1ydWxlPSJub256ZXJvIiByPSI2MC41Ii8+PGNpcmNsZSBjeD0iNjAuNSIgY3k9IjYwLjUiIHI9IjYwIiBzdHJva2U9IiMyZDJjMmUiIHN0cm9rZS1vcGFjaXR5PSIuODEiLz48ZyBmaWxsLXJ1bGU9Im5vbnplcm8iPjxwYXRoIGQ9Im04MS4xNjg3IDUyLjIxNDctMTEuNjUzLTExLjY1MjloLTE3LjY1NTlsLTUuNjQ5MyA1LjY0OTl2LTIwLjEyNzdoLTYuMDAzN3YzNS42NjQ4IDcuNzY4NmwxMS42NTMgMTEuNjUyOWgxNy42NTU5bDUuNjUwMi01LjY0OTl2MjAuMTI3N2g2LjM1NjN2LTMzLjU0NjJ6bS0xNC40NzgxIDIyLjk1MjZoLTExLjY1MjJsLTguNDc1My04LjQ3NDh2LTQuOTQzNy02LjcwOTJsOC40NzUzLTguNDc0OGgxMS42NTIybDguNDc1MyA4LjQ3NDh2Ny40MTU1IDQuMjM3NHoiIGZpbGw9IiNmZmYiLz48cGF0aCBkPSJtMzEuNzMzNCA3Mi42OTUydi0zMi4xMzM3aC02LjAwMjh2MzQuOTU4NmwyMC40ODEgMjAuNDgwOGgyMC40ODAxdi02LjAwM2gtMTcuNjU1OXoiIGZpbGw9IiM2ZGQiLz48cGF0aCBkPSJtNTUuMDM4OCAyNS43MzA1djYuMDAzaDE3LjY1NTlsMTcuMzAyNCAxNy4zMDI3djMyLjEzMzdoNi4wMDI4di0zNC45NTg2bC0yMC40ODEtMjAuNDgwOHoiIGZpbGw9IiM2ZGQiLz48L2c+PC9nPjwvc3ZnPg==',\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'abr.a11bd.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Utopia',\n symbol: 'UTO',\n icon:\n \"data:image/svg+xml,%3Csvg id='Layer_1' data-name='Layer 1' xmlns='http://www.w3.org/2000/svg' viewBox='-40 -40 600 600'%3E%3Cdefs%3E%3Cstyle%3E .cls-1%7Bfill:%239f9f9f%7D.cls-2%7Bfill:%23fefefe%7D.cls-4%7Bfill:%23030303%7D %3C/style%3E%3C/defs%3E%3Cpath d='M371.65 15v23.92l-.47.71C368.82 41.48 366 41 363.36 41q-36.94.09-73.88 0h-176c-3.06 0-6.31.67-9.1-1.37l-.47-.71V15ZM55.21 355.33H31.66a2.81 2.81 0 0 1-.26-.3.82.82 0 0 1-.13-.37v-24H6.67V136.41h24.6l.69.44c2 2.64 1.38 5.75 1.39 8.67q.07 73.11 0 146.2c0 12.44.26 12.68 12.64 12.76 3 0 6-.29 8.85 1a3 3 0 0 1 1.23 1.1 12.38 12.38 0 0 1 1.18 6.17q.1 18 0 36.05c0 2.09.17 4.28-1.36 6.06ZM420.4 452.82v23.51c-3.87.66-178.64.93-195 .29v-23.8l.47-.71c2.79-2 6-1.37 9.1-1.37q75.33-.09 150.68 0c9.25 0 18.49-.06 27.74 0 2.25 0 4.6-.25 6.54 1.37ZM176.66 428H128v-23.83H79.16v-24.9l.39-.66c1.9-1.69 4.27-1.4 6.51-1.42 10.55-.08 21.09 0 31.63-.05 6.6-.05 7.89-1.5 8.12-8.1.16-4.52-.77-9.14 1.06-13.53a2.94 2.94 0 0 1 1.1-1.14 58.19 58.19 0 0 1 24.44-.12 3 3 0 0 1 1.2 1.07c1.29 2.36 1.19 4.95 1.2 7.5v30.75c.05 6.74 1.61 8.24 8.36 8.37 3.7.08 7.41-.1 11.1.23 2.23.2 3.9 1.14 4.1 3.54a107.23 107.23 0 0 1-.06 20 3.93 3.93 0 0 1-1 1.85c-.2.17-.43.31-.65.44Z'/%3E%3Cpath d='M225.4 452.82h-48.74V428c1.46-1.94 3.61-2 5.74-2.06 6.36-.1 12.72-.14 19.08.09 6.33-.23 12.67-.21 19-.07 1.93 0 4-.19 5.56 1.42 2.71 7.57 1.34 15.33 1 23-.04 1.09-.97 1.72-1.64 2.44ZM31.27 136.41V87.67h23.94l.7.45c1.36 1.51 1.34 3.39 1.35 5.22q.18 18.9 0 37.8a11.41 11.41 0 0 1-1 5 3.12 3.12 0 0 1-1.12 1.24c-7.1 2.15-14.32 1.17-21.51.74-1.03-.12-1.63-1.04-2.36-1.71Z'/%3E%3Cpath d='M55.21 87.67v-24.8h23.95l.69.44a3.53 3.53 0 0 1 1 1.84c.36 7.46 1.36 14.94-.69 22.33A3 3 0 0 1 79 88.65c-7.08 2-14.25 1.13-21.4.67-1.07-.06-1.67-.99-2.39-1.65ZM469.14 404.07V428h-24.8l-.71-.47a5.34 5.34 0 0 1-1.24-3.54q-.37-8.07 0-16.15a7 7 0 0 1 1.61-4.3 8.54 8.54 0 0 1 5.24-1.52c5-.13 10-.14 15 0 1.86.09 3.65.41 4.9 2.05Z'/%3E%3Cpath d='M79.16 62.87V38.92H104c.79.8 1.71 1.56 1.76 2.78.29 7 1.2 14-.69 20.86a3 3 0 0 1-1.13 1.23C96.52 66 89 64.92 81.56 64.53c-1.07-.06-1.68-1-2.4-1.66ZM444.34 428v24.8H420.4c-.67-.72-1.62-1.34-1.66-2.38-.33-7.7-1.67-15.44 1-23 1.15-1.33 2.78-1.33 4.32-1.4 5.11-.22 10.23-.18 15.35 0 1.9.03 3.68.36 4.93 1.98ZM79.16 379.27H55.21v-23.94c.52-.48.95-1.21 1.63-1.34a70.78 70.78 0 0 1 21.55-.16c1.55.19 2.36 1.57 2.5 3.09a109.82 109.82 0 0 1 0 19.53 4.76 4.76 0 0 1-1.73 2.82ZM444.34 111.61h24.8v73.54c-1.36 1.8-3.33 2-5.35 2-5 .13-9.94.18-14.9 0-5.5-.2-6.49-1.05-6.55-6.57-.18-14.62-.28-29.24.06-43.86-.24-6.35-.22-12.7-.12-19.06 0-2-.09-4 1.36-5.63ZM395.59 62.87h24.81v24.8c-.15.23-.3.46-.44.69a3.62 3.62 0 0 1-1.84 1c-7.43.4-14.88 1.3-22.25-.61a3 3 0 0 1-1.2-1.1c-1.72-8.12-2.21-16.24.23-24.32Z'/%3E%3Cpath d='M420.4 87.67h23.94v23.94c-.79.79-1.55 1.71-2.77 1.76-7 .29-14 1.2-20.87-.69a3.11 3.11 0 0 1-1.23-1.13c-2.14-7.1-1.16-14.3-.74-21.49.07-1.06 1-1.67 1.67-2.39ZM371.65 38.92h23.94v23.95c-.79.79-1.55 1.7-2.77 1.75-7 .3-14 1.2-20.87-.68a3.18 3.18 0 0 1-1.23-1.13c-2.13-7.1-1.16-14.31-.73-21.49.06-1.07 1.01-1.67 1.66-2.4Z'/%3E%3Cpath class='cls-1' d='M371.65 38.92v23.95c-.9 1.57-2.44 1.81-4 2-1.85.17-3.7.15-5.55.15q-124.27 0-248.55-.06c-3.25 0-6.93 1.15-9.57-2.05V38.92Z'/%3E%3Cpath class='cls-2' d='M104 62.87h267.65c1.92 1.47 2 3.6 2.07 5.74.1 3.68-.12 7.36.14 11 .28 4.05 1.77 5.54 5.81 5.83 3.53.25 7.07 0 10.6.14 2 .07 4 .3 5.32 2.07 1.93 1.47 2 3.6 2.08 5.74.11 3.53-.09 7.07.15 10.6.23 3.35 2 5.16 5.38 5.38 3.82.24 7.64 0 11.45.15 2.15.06 4.28.15 5.75 2.07 1.92 1.47 2 3.6 2.07 5.75.1 3.67-.12 7.35.13 11 .28 4 1.78 5.54 5.82 5.83 3.53.25 7.07 0 10.6.14 2 .06 4 .29 5.32 2.06v48.74h24.8v72.69c-1.25 1.62-3 2-4.92 2-3 .11-6 .06-9 .08-7.41.08-8.77 1.36-8.79 8.67-.05 14.34 0 28.68 0 43 0 3.27-.09 6.54 0 9.8.21 5.2 1.79 6.74 7.07 6.93 3.4.12 6.81 0 10.22.09 2 .06 4 .29 5.35 2.06v24.8c-1.45 1.93-3.59 2-5.71 2.05-6.32.1-12.64.16-19-.11-8 .24-16 .29-24 0-6.61.26-13.22.21-19.84.11a11 11 0 0 1-4.52-.85 3.53 3.53 0 0 1-1.28-.81c-1.44-2.28-1.36-4.85-1.38-7.4 0-3.11.09-6.23-.06-9.34-.22-4.62-1.65-6.06-6.2-6.29a67.32 67.32 0 0 0-7.65 0c-4.07.28-5.5 1.71-5.74 5.85-.22 3.68 0 7.37-.11 11.05-.06 2.4-.11 4.83-1.82 6.81-4.08 1.73-8.36.85-12.56 1s-8.19.09-12.28-.15c-6.36.26-12.72.22-19.08.12a11 11 0 0 1-4.54-.85 3.47 3.47 0 0 1-1.28-.82c-1.36-2.15-1.35-4.57-1.37-7 0-3.26.09-6.53-.07-9.79-.22-4.59-1.67-6-6.26-6.25-2.4-.12-4.82-.09-7.23 0-5.4.14-6.83 1.53-7 6.83-.11 3.54 0 7.09-.08 10.63-.07 2.27-.19 4.55-1.89 6.36-2.12 1.1-4.43.92-6.69.92q-29.41.09-58.84 0c-2.41 0-4.85.08-7.08-1.09-2.15-1.51-2.23-3.84-2.31-6.12-.14-3.56 0-7.12-.09-10.68-.17-5.33-1.6-6.72-7-6.86-2.13-.06-4.27-.09-6.41 0-4.58.25-6 1.68-6.19 6.35-.18 5.55.05 11.11-.27 16.67.34 6.24.22 12.48.14 18.72a11 11 0 0 1-1 4.55 2.94 2.94 0 0 1-1 1.19c-7.82 2.28-15.77 1.2-23.67.74-2.42-.14-2.95-2.34-3.11-4.45-.3-4 0-8-.22-11.93-.23-5.19-1.87-6.82-7-7-3.12-.14-6.25 0-9.38-.11-2-.07-4-.27-5.36-2.05-1.78-1.35-2-3.28-2.07-5.32-.09-3.82.1-7.65-.12-11.46-.24-4.14-1.67-5.57-5.75-5.83a69.87 69.87 0 0 0-8.92 0c-4.09.26-5.51 1.69-5.75 5.83-.23 3.81 0 7.64-.12 11.46 0 2-.29 4-2.07 5.32-.52.48-1 1.22-1.62 1.35a70.79 70.79 0 0 1-21.6.17c-2.15-.26-2.53-2.44-2.67-4.35-.32-4.26 0-8.53-.23-12.78-.22-5.2-1.85-6.83-7-7-4.26-.17-8.52 0-12.78-.2-3.1-.17-4.62-1.69-4.78-4.79-.22-4 0-8-.21-11.93-.23-5.18-1.86-6.8-7-7-3.12-.14-6.25 0-9.38-.11-2-.07-4-.28-5.36-2.05a5.39 5.39 0 0 1-2-4.1c-.09-1.71-.14-3.41-.14-5.12V145.58c0-3.16-.87-6.66 2.07-9.22 1.37-1.78 3.35-2 5.37-2 3.14-.11 6.27 0 9.4-.11 5.22-.22 6.91-1.8 7-7 .18-10.54 0-21.07.1-31.61 0-2.78-.52-5.79 2.08-7.93 1.47-1.93 3.6-2 5.74-2.08 3.68-.1 7.36.13 11-.13 4-.29 5.54-1.78 5.82-5.83.26-3.66 0-7.34.14-11 .15-2.2.21-4.33 2.21-5.8ZM469.14 404.07h-24.8l-.71-.47a5.84 5.84 0 0 1-1.28-3.92c-.19-5.76-.23-11.51 0-17.26.07-1.4.18-2.84 1.39-3.84 7.57-2.59 15.3-1.31 23-1 1 0 1.66 1 2.37 1.65Z'/%3E%3Cpath class='cls-1' d='M469.14 379.27h-24.8c-1.66-.8-1.87-2.36-1.95-3.92-.26-5.33-.25-10.66 0-16a5.23 5.23 0 0 1 1.95-4h24.8Z'/%3E%3Cpath d='M469.14 330.53h-24.36c-.65-3.68-.88-58.4-.29-72.69h24.65Z'/%3E%3Cpath class='cls-1' d='M55.21 136.41v170.18H31.72a2.76 2.76 0 0 1-.3-.29.64.64 0 0 1-.15-.36V136.41Z'/%3E%3Cpath d='M55.21 306.59H78.7a1.67 1.67 0 0 1 .31.28.73.73 0 0 1 .14.36v23.15h24.21a4.48 4.48 0 0 1 .45.45.8.8 0 0 1 .14.36v24.14h24v23.94H79.16v-23.94H55.21Z' fill='%23a1a1a1'/%3E%3Cpath class='cls-1' d='M420.4 428v24.8h-195V428c.7-1.53 2.11-1.78 3.55-1.94a48.57 48.57 0 0 1 5.12-.17h177.66c2.95.11 6.36-.98 8.67 2.11ZM152.71 355.33h23.49a1.72 1.72 0 0 1 .31.29.7.7 0 0 1 .14.36v23.29h24.8c2 1.24 2 3.31 2 5.26q.24 19.08 0 38.16c0 2-.25 4-2 5.33h-24.8v-23.5a1.7 1.7 0 0 0-.3-.3.62.62 0 0 0-.36-.14h-23.28Z'/%3E%3Cpath class='cls-1' d='M127.91 355.33V331a1.64 1.64 0 0 1 .29-.3.62.62 0 0 1 .36-.14h24.15v24.8Z'/%3E%3Cpath class='cls-2' d='M201.46 428v-48.73c1.48-1.95 3.64-2 5.79-2 6-.09 11.95-.17 17.92.12 7-.27 14-.31 20.93-.08 5.06.17 5.88 1.07 6.13 6.13.21 4-.06 8 .17 12 .27 4.69 1.92 6.25 6.65 6.56 11.72.77 13-.4 13-12.27 0-12.46 0-12.47 12.37-12.48h30.76c2.41 0 4.86-.13 7.15.88a3.53 3.53 0 0 1 1.27.77c2.32 4.12 1.32 8.63 1.39 13 .15 9.66.55 10.16 10.16 10.16h.85c7.68 0 8.7-1 8.75-8.55v-8.54a11.49 11.49 0 0 1 1.24-5.78 3 3 0 0 1 1.23-1 13.24 13.24 0 0 1 5.42-.92c14.31 0 28.63-.21 42.94.11 6.25-.24 12.51-.16 18.76-.12a14.32 14.32 0 0 1 6.23 1.14c1.93 1.13 1.76 3.1 1.84 4.9.2 4 0 7.93.14 11.88.2 5 1.73 6.58 6.68 6.8 3.26.15 6.51 0 9.77.1 2 .07 4 .29 5.33 2.06V428H201.46Z'/%3E%3Cpath class='cls-1' d='M79.16 87.67v48.74H55.21V87.67ZM104 62.87v24.8H79.16v-24.8ZM444.34 136.41H420.4v-24.8h23.94ZM395.59 87.67h-23.94v-24.8h23.94ZM420.4 111.61h-24.81V87.67h24.81Z'/%3E%3Cpath d='M322.9 379.27h-48.27a2.07 2.07 0 0 0-.31.27.68.68 0 0 0-.16.36v24h-23.67c.06.06-.06 0-.14-.14a.7.7 0 0 1-.14-.36v-24.15H225.4c-.46-.52-1.24-.92-1.33-1.59-.92-7.32-1.93-14.66.63-21.89l.7-.46h72.7c4-3.06 20.75-3.06 24.8 0 3.1 4.03 3.1 20.08 0 23.96ZM274.15 257.84H225.4V209.1c1.37-1.8 3.35-2 5.37-2q19-.19 38 0c2 0 4 .24 5.37 2 1.8 1.36 2 3.34 2 5.37q.19 19 0 38c.03 2.03-.14 4.01-1.99 5.37ZM395.59 257.84h-48.74V209.1c1.36-1.8 3.34-2 5.36-2q19-.19 38 0c2 0 4 .24 5.37 2 1.81 1.36 2 3.34 2 5.37q.21 19 0 38c.03 2.03-.18 4.01-1.99 5.37Z'/%3E%3Cpath class='cls-1' d='M395.59 257.84V209.1H420c.64 3.58.85 35.66.29 48.74Z'/%3E%3Cpath d='M444.34 404.07H420.4v-24.8c-3-4-3-19.92 0-23.94h23.94v48.74ZM395.59 379.27h-48.74c-.36-.45 0 .24-.35-.23-2.73-3.92-2.49-20 .35-23.71h24.8c4-3 19.93-3 23.94 0 3.04 4.02 3.04 19.93 0 23.94Z'/%3E%3Cpath class='cls-1' d='M274.15 209.1H225.4v-23.5c3.58-.64 35.65-.85 48.75-.3ZM395.59 209.1h-48.74v-23.5c3.58-.64 35.65-.85 48.74-.3ZM274.15 257.84V209.1h23.5c.64 3.58.85 35.65.3 48.74ZM322.9 355.33h-24.8V331a1.64 1.64 0 0 1 .29-.3.62.62 0 0 1 .36-.14h24.15ZM395.59 355.33h-23.94V331a1.64 1.64 0 0 1 .29-.3.62.62 0 0 1 .36-.14h23.29Z'/%3E%3Cpath d='M201.46 355.33V331a1.64 1.64 0 0 1 .29-.3.62.62 0 0 1 .36-.14h23.29v24.8c-4.01 3-19.93 3-23.94-.03Z'/%3E%3Cpath class='cls-1' d='M127.78 136.53v23.73h-23.64v-23.73ZM346.85 355.33v23.94c-4 3-19.93 3-24 0v-23.94ZM152.83 111.49V87.76h23.64v23.73Z'/%3E%3Cpath d='M322.9 379.27h24v24.35a2.07 2.07 0 0 1-.29.3.67.67 0 0 1-.37.15H322.9Z'/%3E%3Cpath class='cls-1' d='M127.79 136.27V111.7h24.91v24.57ZM201.45 379.25v-23.91h23.94v23.91ZM395.57 379.25v-23.91h24.86v23.91Z'/%3E%3Cpath class='cls-4' d='M469.17 404.08v-73.61h23.92v73.61ZM469.17 257.76v-72.61h23.92v72.61Z'/%3E%3C/svg%3E%0A\",\n reference: null,\n reference_hash: null,\n decimals: 8,\n id: 'utopia.secretskelliessociety.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'DEIP Token',\n symbol: 'DEIP',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDUiIGhlaWdodD0iNDUiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3QgeD0iLjg5MiIgeT0iLjkxIiB3aWR0aD0iNDMuMTYxIiBoZWlnaHQ9IjQzLjE2MSIgcng9IjIxLjU4MSIgZmlsbD0iI0Y4RkVGQSIvPjxwYXRoIGQ9Ik05LjcgMTAuNmgxNC41MzRjNi41NjcgMCAxMS44OTIgNS4zMjMgMTEuODkyIDExLjg5IDAgNi41NjgtNS4zMjQgMTEuODkyLTExLjg5MiAxMS44OTJIOS43VjEwLjZaIiBmaWxsPSJ1cmwoI2EpIi8+PGNpcmNsZSBjeD0iMjIuNDczIiBjeT0iMjIuNDkxIiByPSI0Ljg0NSIgZmlsbD0iIzAwMCIvPjxkZWZzPjxyYWRpYWxHcmFkaWVudCBpZD0iYSIgY3g9IjAiIGN5PSIwIiByPSIxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMjE2IDExLjY5NTUgLTExLjkyNjc3IC4yMjAyOCAyMi42OTcgMjIuNjg3KSI+PHN0b3Agb2Zmc2V0PSIuMzU5IiBzdG9wLWNvbG9yPSIjRTlGRjAwIi8+PHN0b3Agb2Zmc2V0PSIuNzYiIHN0b3AtY29sb3I9IiMyNjM4MDAiLz48c3RvcCBvZmZzZXQ9IjEiLz48L3JhZGlhbEdyYWRpZW50PjwvZGVmcz48L3N2Zz4=',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'deip-token.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Wootrade Network',\n symbol: 'WOO',\n icon:\n \"data:image/svg+xml,%3Csvg width='125' height='83' viewBox='0 0 125 83' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M102.422 0H122.958L113.203 30.9433H92.9243L102.422 0ZM75.982 29.4048L86.0788 53.3388L89.8436 41.0299H109.951L98.5713 78.0422C97.6301 80.9485 94.9776 82.9145 91.8972 82.9145H80.4314C77.6078 82.9145 75.0408 81.2049 73.9285 78.5551L61.2648 47.8682L48.8578 78.5551C47.831 81.2904 45.2641 83 42.3549 83H30.718C27.6376 83 24.9851 80.9485 24.0439 78.0422L0 5.85842e-05H20.1934L36.2797 53.3388L46.8898 29.3193C49.2857 23.3358 55.0185 19.4038 61.4359 19.4038C67.8533 19.4038 73.6718 23.3358 75.982 29.4048Z' fill='%2320252F'/%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '4691937a7508860f876c9c0a2a617e7d9e945d4b.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'LiNEAR',\n symbol: 'LINEAR',\n icon:\n \"data:image/svg+xml,%3Csvg width='40' height='40' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M30.74 28.78c.21-.36.32-.78.32-1.21v-6.33c0-.24-.06-.46-.17-.66-.12-.21-.28-.38-.48-.49l-16.86-9.77c-.35-.2-.73-.31-1.13-.32-.64 0-1.24.26-1.69.72-.45.45-.7 1.07-.71 1.71v6.39c0 .24.06.47.18.67.11.21.28.37.48.48l16.82 9.71c.36.22.77.32 1.19.32.41 0 .82-.12 1.19-.33.36-.21.66-.52.86-.89zm.32-16.27c0-.42-.1-.84-.29-1.21-.2-.38-.49-.7-.85-.93-.36-.22-.78-.34-1.21-.34-.42 0-.84.12-1.21.34l-4.97 2.81c-.04.02-.08.07-.1.12-.03.04-.04.1-.04.14 0 .06.01.11.04.16.02.04.06.08.1.1l8.05 4.62c.05.02.1.04.15.04.05 0 .1-.02.15-.05.04-.02.08-.06.11-.11.02-.04.04-.1.03-.15l.04-5.54zM10.05 27.5c-.01.43.08.86.28 1.23.2.38.49.7.85.93.36.22.78.34 1.2.34.42 0 .83-.12 1.2-.34l4.92-2.85c.04-.02.08-.06.1-.11.03-.04.05-.1.05-.15 0-.05-.02-.11-.05-.15-.02-.05-.06-.09-.1-.12l-8.05-4.6c-.05-.03-.09-.04-.15-.04-.05 0-.1.01-.15.04-.05.02-.08.07-.11.12-.02.04-.04.09-.04.14l.05 5.56z' fill='url(%23paint0_linear_186_370)'/%3E%3Cdefs%3E%3ClinearGradient id='paint0_linear_186_370' x1='11.135' y1='11.152' x2='30.145' y2='30.457' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%231BB3CC'/%3E%3Cstop offset='1' stop-color='%23824ACC'/%3E%3C/linearGradient%3E%3C/defs%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'linear-protocol.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'USN',\n symbol: 'USN',\n icon:\n \"data:image/svg+xml;charset=UTF-8,%3Csvg width='38' height='38' viewBox='0 0 38 38' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='38' height='38' rx='19' fill='black'/%3E%3Cpath d='M14.8388 10.6601C14.4203 10.1008 13.6748 9.86519 12.9933 10.0768C12.3119 10.2885 11.85 10.8991 11.85 11.5883V14.7648H8V17.9412H11.85V20.0589H8V23.2353H11.85V28H15.15V16.5108L23.1612 27.2165C23.5797 27.7758 24.3252 28.0114 25.0067 27.7997C25.6881 27.5881 26.15 26.9775 26.15 26.2882V23.2353H30V20.0589H26.15V17.9412H30V14.7648H26.15V10.0001H22.85V21.3658L14.8388 10.6601Z' fill='white'/%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'usn',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Huobi BTC',\n symbol: 'HBTC',\n icon:\n \"data:image/svg+xml,%3C%3Fxml version='1.0' standalone='no'%3F%3E%3C!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.0//EN' 'http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd'%3E%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' id='body_1' width='32' height='32'%3E%3Cg transform='matrix(1.3333334 0 0 1.3333334 0 0)'%3E%3Cimage x='0' y='0' xlink:href='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAA/tJREFUWIXtln9oVWUYxz/vOc67iWtNS9IkjcSui8RUsv40TbLfVoZE5R+li1JJioqYFlKI/bBQo+417A+pTSgkiH5p0ETIBIvaaosiRcRqYVM3t3Oe97zv0x+eO27jXt1kWoFfOJzDeX59npf3fc6B8/o/atNXOmKocgVnEmSt3vOvAaxr1stEdN5QAQwbbIAV7kO0dqgABrUCDR9rpVhdJqIO4KUdmjmnAEnCMon0Uom18/ltekXVSNafM4CVH+h4SVglkUdEDwELgoBHNu7RG846wIomb2xCXoQLpMdhRX8GrnWWwMDWV5v9mLMK0JuYx8QyX3ocNlZEtAWY3HPcE51w47z4rU9t1zM60qc9BYu36ExreQWArgTjNB5WEbaqMjE+AVZcZAzhyMBPA74ZUoBFeT/aJrwPZJAE0+sA9o2p9aPiKCYMg2dC53NrFlUdHWzhAQEk1mzGMAFVzFEBpxjDrrg3qg3CYOr6+pqDUT477tlc9iHgOqAW6AT2YGisXNp++HQAppzhttf9LcaYjwDoEUy3ABAYbtz+QvXOOHdVqLjVwNNAqXkQA+sM4ZpM/Q+uXJ2yG8cmZpVYEFFspyCxYkW7vHO7JV8XKK4RWN2v+ALgMNCUvl+tuEbJ15WtU9Iwe63WiWWWWLBdFht5rCgS66YP114YefVPAgsLrMBc4DmD+Q5oAT4vSrcw9R84gLXMEQtiQdLuJVa1lrfi3JQaoKHIvQK4tbK+fU2mvm1/EAY3pxDfFvk0pHEDAxDLlWIViRy2O0FEEdG25jdrDip6O1BdKk+Uy272zjdhOATcVWSvTuMGCJBQJYkpLo6I/pSap5cI2Zne64C7USabwPwB+CKfUnFlV6BDrCLdCTbWwtVd6KafuzXGfBnlspOAN4wJLq+sb9+lXh/tl79/XHkAm+hesWB7fd8KxHHfP0BHkWsvsCWztK0LuBd4V9X/GOWzNZycB8XqoIRKDqLEmU+d0yNBwmgTa+H1tAnzOg1cv7vItRl4OX1uArqA2iAIurzzyj+1mxIquQL7N5pem/CimLB4D4y3ksw0ATuAA6nrTcAvcX7KJOABjNlmCPLe6QxOzoiCDpjA7BgwAEDizIZ4+PBPxFI4hljxT2SWtFtgOVDo8IiqzgXGovq44n8D3QtMTO0KLM8sabOl6pQdxQCjFmuV6+h+jz9P3NmXTJl/bN8ln0W57ArgtaImfgdC4OKiFB5YWVnfvqFcjVMCAIy43xtz8NiDelwacH6SwhFVZketY1uiXHZOCnF1idCWtPgXp8p/WoCCLrrDmuO//jWdxF+jQEXIOz2tY52+PdXEzs4AnUXf19B8nQkr9pmHv++/Ec/rv6e/AQ/TFRmUSxQZAAAAAElFTkSuQmCC' width='24' height='24'/%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '0316eb71485b0ab14103307bf65a021042c6d380.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'PembRock',\n symbol: 'PEM',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAyMDAgMjAwIj48cGF0aCBmaWxsPSIjMUUxRTFGIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMTMuMiAxNzAuNDJhODMuNTEgODMuNTEgMCAwIDAgNzAuNy04Mi42IDgzLjUgODMuNSAwIDAgMC01Ljc4LTMwLjYxbDEzLjY4LTIzLjg3aC0yOC4wOGE4My4xIDgzLjEgMCAwIDAtNjMuMi0yOS4wNiA4My4xIDgzLjEgMCAwIDAtNjMuMiAyOS4wNkg4LjU4TDIyLjcgNTcuNzhhODMuNSA4My41IDAgMCAwLTUuNTUgMzAuMDUgODMuNTEgODMuNTEgMCAwIDAgNzAuNiA4Mi41N2wxMi43NyAyMi4xMSAxMi42Ny0yMi4xWiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iI0VBRUNFRiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTAwLjUzIDcuOTJBNzguNjYgNzguNjYgMCAwIDAgNDAuNjEgMzUuNmwtMS4xOCAxLjE3SDE2LjY1TDI4LjIzIDU3LjFsLS42OCAxLjc3Yy0zLjQgOC44Ny02LjA3IDE4LjEtNi4wNyAyOC4yIDAgMzkuNzcgMjkuMDMgNzMuMTQgNjYuOTQgNzlsMS44Ni4zIDEwLjM0IDE3Ljc5IDEwLjA2LTE3Ljc4IDEuODctLjNjMzcuOTUtNS44MSA2Ny4wMy0zOC44IDY3LjAzLTc4LjYxIDAtMTAuMy0yLjI0LTIwLjEzLTUuNzgtMjkuMTVsLS42OS0xLjc4IDExLjE4LTE5Ljc3aC0yMi42NWwtMS4xOC0xLjE3YTc4LjY2IDc4LjY2IDAgMCAwLTU5LjkzLTI3LjY3Wk0zNS44NCAyOS4wNEE4Ni40OCA4Ni40OCAwIDAgMSAxMDAuNTQgMGE4Ni40OCA4Ni40OCAwIDAgMSA2NC42OCAyOS4wNGgzMi42N0wxODEuODEgNTcuMmMzLjQ2IDkuNDMgNS42NSAxOS42MyA1LjY1IDMwLjI2IDAgNDMuMTItMzEuMDIgNzguOTUtNzEuODMgODYuMTRMMTAwLjY1IDIwMGwtMTUuMy0yNi40MmMtNDAuNzctNy4yMy03MS43NC00My40NC03MS43NC04Ni41MyAwLTEwLjQgMi42Mi0xOS45OSA1LjkzLTI5LjI1TDMgMjkuMDRoMzIuODRaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBmaWxsPSIjRjY4MjFGIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Im0zMS44NSA0NS40MSA2OC43NSAxMjAuNDIgOC4wNi0xNC4xMi0yNy40Ny00OC4xM2gyNC4zTDcyLjMzIDQ1LjRIMzEuODVabTQ5LjE5IDAgNDQuMTUgNzcuMzIgNy42Ny0xMy40NC0yOC4xOC00OS4zNGg4LjM3bDIzLjk5IDQyLjAyTDE0NSA4OGwtMTYuMDItMjguMDVoMTYuNDJsLTQuNDMgNy43NiA3LjgxIDEzLjcgMjAuNTctMzZIODEuMDRaTTU2LjMgNTkuOTVsMTYuNjIgMjkuMTFoOC42N0w2NC45NyA1OS45NUg1Ni4zWk00NC4yIDg0LjZhNTYuNjUgNTYuNjUgMCAwIDAgMzEuMDUgNTQuMTJsNi4zMiAxMS4wMWE2NC40NSA2NC40NSAwIDAgMS00NS4yOS02MS43YzAtNC45Ny41Ni05LjggMS42LTE0LjQ0bDYuMzMgMTEuMDJabTc5LjY1LTQ3LjlhNTUuNDYgNTUuNDYgMCAwIDAtMjMuNjYtNS4yNyA1NS40NSA1NS40NSAwIDAgMC0yMy42NSA1LjI2SDYxLjVhNjMuMjYgNjMuMjYgMCAwIDEgMzguNy0xMy4xNmMxNC41NCAwIDI3Ljk1IDQuOSAzOC43IDEzLjE2aC0xNS4wNVoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGZpbGw9IiNGNjgyMUYiIGQ9Ik00NC4xIDg4LjAyYzAtMS4xNC4wNC0yLjI4LjEtMy40MWwtNi4zLTExLjAyYTY1LjI2IDY1LjI2IDAgMCAwLTEuNiAxNC40MyA2NC40NSA2NC40NSAwIDAgMCA0NS4yOCA2MS43MWwtNi4zMS0xMWE1Ni42NSA1Ni42NSAwIDAgMS0zMS4xNS01MC43Wm0xMTMuMTIgMGMwLTEuMTQtLjItMi4yOC0uMjctMy40MWw2LjI1LTExLjAyYTY1LjMxIDY1LjMxIDAgMCAxIDEuODQgMTQuNDMgNjQuNDUgNjQuNDUgMCAwIDEtNDUuMjkgNjEuNzFsNi4zMS0xMWE1Ni42NSA1Ni42NSAwIDAgMCAzMS4xNi01MC43WiIvPjwvc3ZnPg==',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'token.pembrock.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Atocha Coin',\n symbol: 'ATO',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMzYuODggMTM2Ljg4Ij48Y2lyY2xlIGN4PSI2OC40NCIgY3k9IjY4LjQ0IiByPSI2OC40NCIgc3R5bGU9ImZpbGw6Z29sZCIgZGF0YS1uYW1lPSJMYXllciAyIi8+PGcgZGF0YS1uYW1lPSJMYXllciAxIj48cGF0aCBkPSJNNzEuNjUgNzkuNXYyNC40MWMwIDEuMjcuMjQgMS40OSAxLjQ3IDEuMTcgMS4wOC0uMjkgMi4xMy0uNjggMy4xOC0xYTExLjU4IDExLjU4IDAgMCAwIDEuNS0uNTljMS40MS0uNzIgMi44NC0xLjQgNC4xOC0yLjIyYTI1LjU5IDI1LjU5IDAgMCAwIDUuNTktNC42NGMxLjM2LTEuNTIgMi41NC0zLjIgMy43OC00LjgyLjMzLS40My4xOS0uNzItLjM1LS43MS0uODYgMC0xLjcyLjEzLTIuNTguMjItLjQ5IDAtMSAuMTMtMS40Ny4xOWEuMzkuMzkgMCAwIDEtLjQ4LS4zN2wtLjMzLTJhMS41NSAxLjU1IDAgMCAwLS4wNy0uNDIgNS43OCA1Ljc4IDAgMCAxLS4zMy0yLjEzYy0uMDktMS0uMjUtMS45NC0uMzQtMi45Mi0uMDctLjc4LjA1LS44NC44My0uOTQgMS41OS0uMTkgMy4xOC0uNDQgNC43Ny0uNjVsMi43OS0uMzcgMS4xNC0uMTUgNC44Ny0uNzRjLjI3IDAgLjU0LS4wNS44LS4wOWwyLjE4LS4zNWEyLjc1IDIuNzUgMCAwIDEgLjU1LS4wOC40Ny40NyAwIDAgMSAuMzUuMTcgOS44NSA5Ljg1IDAgMCAxIC40NCAxLjFjLjI0LjY5LjQ2IDEuMzkuNjkgMi4wOGEyLjY5IDIuNjkgMCAwIDEgLjA5LjI4Yy4xNy44My4zMyAxLjY2LjUxIDIuNDkuMjYgMS4xNC41NCAyLjI3LjgxIDMuNC4zMSAxLjMxLjYgMi42My45MyAzLjkzLjE5Ljc1LjQ1IDEuNDkuNjUgMi4yNHMuNDUgMS44MS42NiAyLjcxYS40LjQgMCAwIDEtLjE0LjM0IDMuMzkgMy4zOSAwIDAgMS0uODEuMzVjLTEuMzYuMzYtMi43Mi42OS00LjA5IDFsLTIuNTEuNjVjLS42My4xNy0uNzcuMDgtLjkyLS41NHEtLjM5LTEuNTktLjgyLTMuMTdjMC0uMTQtLjIxLS4zNC0uMzItLjM0YS45MS45MSAwIDAgMC0uNTkuMjRjLS4yOS4zMy0uNDguNzQtLjc1IDEuMDgtLjkzIDEuMTgtMS45IDIuMzMtMi44MyAzLjUxYTMwIDMwIDAgMCAxLTQuNiA0LjMgMzkuNCAzOS40IDAgMCAxLTMuNzQgMi41OCAyNi41OSAyNi41OSAwIDAgMS0yLjcxIDEuNTljLTEuMDguNTMtMi4yIDEtMy4zMiAxLjQycy0yIC43OC0zLjA3IDEuMTFjLS43MS4yMy0xLjQ1LjM3LTIuMTcuNTUtLjIuMDUtLjQuMTQtLjYuMjFhNC41MSA0LjUxIDAgMCAxLS40NC4xNmMtLjYxLjE1LTEuMjMuMy0xLjg1LjQzYS42Mi42MiAwIDAgMC0uNTMuN2MwIC43OCAwIDEuNTctLjA2IDIuMzRhNS4yOCA1LjI4IDAgMCAxLS44IDIuNDkgMy44OCAzLjg4IDAgMCAxLTEuNTIgMS4zMiAxMi41NyAxMi41NyAwIDAgMS0xLjU0LjcxIDEuMjQgMS4yNCAwIDAgMS0uNzguMDcgNS44NiA1Ljg2IDAgMCAxLTMuNzMtMi45MiA4IDggMCAwIDEtLjQtMi42MiAxMCAxMCAwIDAgMSAwLTEuMjguNjcuNjcgMCAwIDAtLjYxLS43NGMtLjc1LS4xNC0xLjUtLjI2LTIuMjQtLjQ0cy0xLjU3LS40NC0yLjM1LS42OGMtLjUtLjE1LTEtLjI4LTEuNS0uNDctMS42My0uNjEtMy4yOC0xLjE5LTQuODktMS44NmExNS4xMiAxNS4xMiAwIDAgMS0yLjI3LTEuMjljLTEuMzgtLjg5LTIuNzgtMS43Ny00LjEtMi43Ni0xLS43Ni0xLjkyLTEuNjgtMi44OC0yLjUyYTM2LjMzIDM2LjMzIDAgMCAxLTQuODEtNS42OGMtLjU4LS43Ny0xLjEtMS41OC0xLjY4LTIuMzVhLjgxLjgxIDAgMCAwLS42LS4yOWMtLjE2IDAtLjM3LjI1LS40My40My0uMzEgMS0uNTcgMi4wNy0uODYgMy4xMXEtLjE5LjctLjQgMS4zOWMtLjExLjM1LS4zOS4zNC0uNjYuMjgtLjU4LS4xMy0xLjE2LS4yOC0xLjczLS40My0xLjYyLS40Mi0zLjI0LS44NC00Ljg2LTEuMjhhNi41NSA2LjU1IDAgMCAxLTEtLjQuMzQuMzQgMCAwIDEtLjEyLS4zYy4yMS0xIC40MS0xLjkzLjY2LTIuODkuMzMtMS4yNC43Mi0yLjQ3IDEtMy43Mi4zOC0xLjQ4LjcyLTMgMS4wOC00LjQ3LjIyLS44OS40Ni0xLjc4LjY4LTIuNjguMTgtLjcyLjM0LTEuNDUuNTItMi4xN3MuMzItMS4yMy41Mi0xLjgzLjM4LS41NS44OC0uNDJhNi43NCA2Ljc0IDAgMCAwIC45Mi4xNWMxLjIuMTUgMi4zOS4yOCAzLjU5LjQ0bDUuNi43NSA0LjYxLjU3Yy44NS4xMSAxLjY5LjI1IDIuNTMuMzYuMyAwIC40Ny4xOS40NC41MXYuNDNjLS4xMyAxLjI0LS4yMiAyLjQ5LS40IDMuNzJzLS40NSAyLjM4LS42NiAzLjU4Yy0uMDYuMzQtLjIzLjQ3LS41NS40MmwtMi4xNC0uMzVhMi4yIDIuMiAwIDAgMC0uNDcgMGMtLjQgMC0uNTcuMjItLjQyLjU5YTcuOTIgNy45MiAwIDAgMCAuNzEgMS4zNCAyNC45NCAyNC45NCAwIDAgMCAzLjUyIDQuMjFjLjkxLjg4IDEuODIgMS43NiAyLjc4IDIuNTdhMTkgMTkgMCAwIDAgNC4yOSAyLjY5YzEuMTEuNTEgMi4yMiAxIDMuMzcgMS40N3MyLjM4LjggMy41OCAxLjE4YTIgMiAwIDAgMCAuNTEuMDUuNDcuNDcgMCAwIDAgLjUyLS40IDIuOTEgMi45MSAwIDAgMCAuMDctLjU1Yy4wNy0zLjYuMTgtNy4xOS4yLTEwLjc5LjA1LTguMzIuMDYtMTYuNjQuMDgtMjVWNTQuODVjMC0uOS0uMi0xLjA5LTEuMS0xLjA5aC0xNmExMy41MSAxMy41MSAwIDAgMS0yLjc4LS4zOSAxLjMxIDEuMzEgMCAwIDEtLjczLS43IDMuNDUgMy40NSAwIDAgMS0uMzMtMS4zNXYtNC4zMWEzLjQ1IDMuNDUgMCAwIDEgLjMxLTEuMSAxIDEgMCAwIDEgLjk1LS42M2MxLjMtLjExIDIuNi0uMjQgMy45MS0uMjYgMy42MyAwIDcuMjUgMCAxMC44OC0uMDVoMy44M2MuNjYgMCAxLS4yNyAxLS45M1YzMi41NmExLjQzIDEuNDMgMCAwIDAtLjc1LTEuMzQgMTAuNDkgMTAuNDkgMCAwIDEtMy41NS0zLjU2IDcuNTcgNy41NyAwIDAgMS0xLjI5LTMuN2MtLjA2LTEuMTkgMC0yLjM5IDAtMy41OEE4LjM1IDguMzUgMCAwIDEgNTguNDEgMTdhOS41IDkuNSAwIDAgMSA0LTMuNzYgNi41MyA2LjUzIDAgMCAxIDIuNjgtMWMuNzMtLjA4IDEuNDQtLjMgMi4xNy0uMzRhNi4xNiA2LjE2IDAgMCAxIDEuNDIuMjJjLjEzIDAgLjI1LjA4LjM3LjA5YTEwLjM1IDEwLjM1IDAgMCAxIDUgMi4zNSA3LjYyIDcuNjIgMCAwIDEgMi4xOCAyLjhjLjQ2LjkzLjggMS45MyAxLjE3IDIuOWEyLjEyIDIuMTIgMCAwIDEgLjEuNjd2MS40NWE4LjEyIDguMTIgMCAwIDEtLjcxIDMuNTUgMTIuMzEgMTIuMzEgMCAwIDEtMi4xNyAzLjYzIDUuOCA1LjggMCAwIDEtMS45MyAxLjU3IDEuNjggMS42OCAwIDAgMC0xLjA2IDEuNzR2MTEuMjZjMCAuNjIuMjkuODYuOTIuODhIODUuNjljMS43NiAwIDMuNTIuMTQgNS4yOC4xNmExLjgyIDEuODIgMCAwIDEgMS42OCAxLjg1djQuNjFhMi4zMyAyLjMzIDAgMCAxLS41NyAxLjQ0IDEuMzUgMS4zNSAwIDAgMS0uNy40MSAyMC4wNyAyMC4wNyAwIDAgMS01LjE4LjM0SDcyLjY3Yy0uOTEgMC0xLjA3LjE2LTEuMDcgMS4wNnEuMDUgMTIuMzQuMDUgMjQuNjJabS00LjQ5LTUxLjU1YTUuNzQgNS43NCAwIDAgMCA1LjcxLTUuNjQgNS44MiA1LjgyIDAgMCAwLTYuMDgtNS42M2MtMi41Mi4wNS01LjExIDIuODMtNS4wNyA1LjcxYTUuNiA1LjYgMCAwIDAgNS40NCA1LjU2WiIvPjxwYXRoIGQ9Ik04MC45NCA3Ny41YTIwIDIwIDAgMCAxLTIuNjktLjM3IDcuMzMgNy4zMyAwIDAgMS00LjM0LTMgNy43IDcuNyAwIDAgMS0xLTYuMjQgNy43OCA3Ljc4IDAgMCAxIDMuNzYtNSAxMC4yNSAxMC4yNSAwIDAgMSA2LjM4LTEuNTEgOC4xIDguMSAwIDAgMSA2LjE3IDMuNEE3LjY1IDcuNjUgMCAwIDEgOTAuNTcgNzFhNi40NiA2LjQ2IDAgMCAxLTIuMTQgMy40NiAxMi4yNyAxMi4yNyAwIDAgMS0zLjQ2IDIuMjEgMTAuNjQgMTAuNjQgMCAwIDEtNC4wMy44M1ptMy01LjY2YTYuNjkgNi42OSAwIDAgMCAwLS44NSAyMi41IDIyLjUgMCAwIDAtMS4xNy00Ljc3IDEuODMgMS44MyAwIDAgMC0xLjQ4LTEuMzFjLTEuMjYtLjEzLTEuOTIgMS0xLjggMi4xOWEyMy43MiAyMy43MiAwIDAgMCAuNjQgMy40IDEzLjA3IDEzLjA3IDAgMCAwIC44NiAyLjM5IDEuNDggMS40OCAwIDAgMCAyLjMzLjU2IDEuODEgMS44MSAwIDAgMCAuNjEtMS42M1pNNDMuOTQgNzMuMzFhMy44NyAzLjg3IDAgMCAxIDItMy42QTguOTEgOC45MSAwIDAgMSA1MSA2OC4zOWE1LjU5IDUuNTkgMCAwIDAgLjYgMCAxIDEgMCAwIDAgMS0xIDEwIDEwIDAgMCAwLS4yNy0yLjU2IDEuMzMgMS4zMyAwIDAgMC0yLjM0LS41NGMtLjU3LjU1LTEgMS4yMS0xLjU3IDEuNzlhMi41NiAyLjU2IDAgMCAxLTIuMjIuOTQgMS40NyAxLjQ3IDAgMCAxLTEuMjEtMiAzLjkzIDMuOTMgMCAwIDEgMi0yLjA5IDEzLjI2IDEzLjI2IDAgMCAxIDIuNTctMS4wOCAxMC4zMSAxMC4zMSAwIDAgMSA1LjEzLS4yNyA3LjM1IDcuMzUgMCAwIDEgMi45MyAxLjM2QTMuMzggMy4zOCAwIDAgMSA1OSA2NS4zOWMuMDcgMS4yNy4wOCAyLjU0LjE1IDMuODEuMDYgMSAuMTYgMiAuMjYgM2ExLjIzIDEuMjMgMCAwIDAgLjg4IDEuMDVjLjY3LjI3Ljc0LjQ2LjU3IDEuMTRhMy44IDMuOCAwIDAgMS0yIDIuMzUgNC4zOCA0LjM4IDAgMCAxLTMuNjguNDUgMy4zIDMuMyAwIDAgMS0xLjE1LS42OWMtLjc0LS42OC0uODItLjc1LTEuNjItLjE5YTYuMjEgNi4yMSAwIDAgMS00LjY5IDEgNC4yMSA0LjIxIDAgMCAxLTMuMS0xLjgxIDMuMSAzLjEgMCAwIDEtLjY4LTIuMTlabTcuNy0yLjkxYTIgMiAwIDAgMC0xLjE3IDMuNDMgMS4yMiAxLjIyIDAgMCAwIDEuNzQtLjI0IDIuOSAyLjkgMCAwIDAgLjI2LTIuNjIuNzYuNzYgMCAwIDAtLjgyLS41N1oiLz48L2c+PC9zdmc+',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'atocha-token.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'SeatlabNFT',\n symbol: 'SEAT',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' version='1.1' x='0px' y='0px' width='32px' height='32px' viewBox='0 0 32 32' style='enable-background:new 0 0 32 32;' xml:space='preserve'%3E%3Cstyle type='text/css'%3E .st0%7Bfill:%23050035;%7D .st1%7Bfill:url(%23SVGID_1_);%7D%0A%3C/style%3E%3Cg id='Layer_1'%3E%3Ccircle class='st0' cx='16' cy='16' r='16'/%3E%3C/g%3E%3Cg id='Isolation_Mode'%3E%3ClinearGradient id='SVGID_1_' gradientUnits='userSpaceOnUse' x1='6.2375' y1='16' x2='25.7625' y2='16'%3E%3Cstop offset='0' style='stop-color:%2300C2FF'/%3E%3Cstop offset='1' style='stop-color:%230067FF'/%3E%3C/linearGradient%3E%3Cpath class='st1' d='M14,6.1c-0.3,0-0.5,0.1-0.8,0.2L8.1,9.4L7.8,9.6L7.2,10c-0.5,0.3-0.9,0.6-0.9,1.7v4.1c0,0.9,0.3,1.6,0.9,1.9 l6.2,3.8c1,0.6,2.3-0.1,2.3-1.3v-2.9c0-0.7-0.4-1.4-1-1.8l-2.9-1.8l3-1.9c0.5-0.3,0.8-0.9,0.8-1.5V7.6C15.6,6.7,14.8,6.1,14,6.1z M14.7,10.4c0,0.3-0.2,0.6-0.4,0.8l-3.4,2.1l-1.8-1.1c-0.5-0.3-0.8-0.5-1.1-0.8c-0.3-0.3-0.2-0.8,0.2-1c0,0,0,0,0,0L13.7,7 C13.8,7,13.9,6.9,14,6.9c0.3,0,0.7,0.3,0.7,0.7V10.4z M24.9,14.3l-6.2-3.8c-1-0.6-2.3,0.1-2.3,1.3v2.9c0,0.7,0.4,1.4,1,1.8l2.9,1.8 l-3,1.9c-0.5,0.3-0.8,0.9-0.8,1.5v2.8c0,0.9,0.8,1.6,1.6,1.6c0.3,0,0.5-0.1,0.8-0.2l5.1-3.1l0.4-0.2l0.6-0.4 c0.5-0.3,0.9-0.6,0.9-1.7v-4.1C25.8,15.3,25.4,14.6,24.9,14.3z M23.8,21.6C23.8,21.6,23.8,21.6,23.8,21.6L18.3,25 c-0.1,0.1-0.2,0.1-0.4,0.1c-0.3,0-0.7-0.3-0.7-0.7v-2.8c0-0.3,0.2-0.6,0.4-0.8l3.4-2.1l1.8,1.1c0.5,0.3,0.8,0.5,1.1,0.8 C24.3,20.9,24.2,21.4,23.8,21.6z'/%3E%3C/g%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 5,\n id: 'token.stlb.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Burrow Token',\n symbol: 'BRRR',\n icon:\n 'data:image/png;base64,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',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'token.burrow.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'FUSOTAO',\n symbol: 'TAO',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0ibTU1LjQxIDI5LjYzNS03LjI5NiA2LjE0N2ExLjY1OSAxLjY1OSAwIDAgMS0uNjc1IDIuMzlsMS44NDggOS41NDZjLjgwNS0uMjA4IDEuNTM2LS43MDIgMi4wODktMS41MzlhMTIuODE2IDEyLjgxNiAwIDAgMCAxLjk4Mi01LjI4OWMuMTctMS4yNTEuNTY0LTIuNDczIDEuMTU2LTMuNTg2YTEyLjgzMyAxMi44MzMgMCAwIDAgMS40ODItNS40NjljLjAzNS0uODYzLS4xODYtMS42LS41ODctMi4yeiIgZmlsbD0idXJsKCNhKSIvPjxwYXRoIGQ9Ik00NS4zNDIgMzUuOTA2YTEuNjM3IDEuNjM3IDAgMCAxIDIuMTgzLS42M2w3LjM3OC02LjE5M2MtMS4yODMtMS4xOTMtMy40NTktMS41NDctNS40NDUtLjkwM2wtMTIuNzQyIDQuMTM1Yy0uMzEuMS0uNTUzLjI5Ny0uNzE2LjU0Mmw5LjM0MiAzLjA0OXoiIGZpbGw9InVybCgjYikiLz48cGF0aCBkPSJNNDMuODkyIDQ1LjM3YzEuMTQ5IDEuNTkyIDIuOTQ3IDIuNTcyIDQuNTk5IDIuNTI0bC0xLjg0NC05LjQ4N2ExLjY0NCAxLjY0NCAwIDAgMS0xLjUzOC0xLjY4bC05LjM2NC0zLjA1NWMuMDA0LjI2OC4wODcuNTQuMjYuNzhsNy44ODcgMTAuOTE5eiIgZmlsbD0idXJsKCNjKSIvPjxwYXRoIGQ9Im00MS40MSA1My4yMjMtOC4wNTYtNS4wOTJhMS42MzEgMS42MzEgMCAwIDEtMi40NjQuMDkxbC04LjQzOCA0LjcyMWMuNDQ0LjcwOCAxLjEzNiAxLjI1NiAyLjA5NyAxLjUyNyAxLjc5NC41MDYgMy43NC42MDMgNS42MDUuMjY1YTEwLjUzNiAxMC41MzYgMCAwIDEgMy43NDIgMGMxLjg3LjMzOSAzLjgyMS4yNCA1LjYxOS0uMjcuODI2LS4yMzMgMS40NTMtLjY3MyAxLjg5NS0xLjI0MnoiIGZpbGw9InVybCgjZCkiLz48cGF0aCBkPSJNMzIuMzg5IDQ1LjQzOGExLjY0NiAxLjY0NiAwIDAgMSAxLjI3IDEuODlsOC4xNDUgNS4xMzRjLjczNC0xLjU5NC4zOTctMy43ODItLjgyNy01LjQ4TDMzLjEyMyAzNi4wOWExLjM1NCAxLjM1NCAwIDAgMC0uNzM0LS41MTZ2OS44NjR6IiBmaWxsPSJ1cmwoI2UpIi8+PHBhdGggZD0iTTIyLjk3IDQ3LjAxN2MtMS4xNTEgMS41ODgtMS41MjQgMy42MDgtLjk2OSA1LjE3bDguNDItNC42OTJhMS42NDggMS42NDggMCAwIDEgMS4xMTctMS45ODd2LTkuODg0Yy0uMjUzLjA4Ny0uNDg1LjI1LS42NTkuNDlsLTcuOTA4IDEwLjkwM3oiIGZpbGw9InVybCgjZikiLz48cGF0aCBkPSJtMTUuODg2IDM1Ljc4Mi03LjI5NS02LjE0N2MtLjQwMS42LS42MjIgMS4zMzctLjU4NyAyLjJhMTIuODMgMTIuODMgMCAwIDAgMS40ODIgNS40NjkgMTAuNzUxIDEwLjc1MSAwIDAgMSAxLjE1NiAzLjU4NmMuMjU4IDEuODkyLjk1IDMuNzI3IDEuOTgyIDUuMjkuNTUzLjgzNiAxLjI4NCAxLjMzIDIuMDg5IDEuNTM4bDEuODQ4LTkuNTQ2YTEuNjU5IDEuNjU5IDAgMCAxLS42NzUtMi4zOXoiIGZpbGw9InVybCgjZykiLz48cGF0aCBkPSJNMTUuNTY4IDQ3Ljg1NmMxLjY0OS4wNDggMy40NDUtLjkzMiA0LjU5Mi0yLjUyMWw3Ljg3NS0xMC45MDhhMS4zNiAxLjM2IDAgMCAwIC4yNi0uNzhsLTkuMzUgMy4wNTJhMS42NDcgMS42NDcgMCAwIDEtMS41MzYgMS42NzlsLTEuODQgOS40Nzh6IiBmaWxsPSJ1cmwoI2gpIi8+PHBhdGggZD0iTTE2Ljc0NSAzNS4xOTNhMS42NCAxLjY0IDAgMCAxIDEuOTI3Ljc0bDkuMzU2LTMuMDUyYTEuMzU3IDEuMzU3IDAgMCAwLS43MTctLjU0M2wtMTIuNzYxLTQuMTRjLTEuOTktLjY0NC00LjE2OC0uMjktNS40NTMuOTA1bDcuMzkgNi4yYy4wOC0uMDQ0LjE2Ny0uMDguMjU4LS4xMXoiIGZpbGw9InVybCgjaSkiLz48cGF0aCBkPSJtNDAuNTcxIDE4LjA5LTMuNTQ2LTguODkyYy42ODktLjE5OCAxLjQ1My0uMTgyIDIuMjU4LjExOGExMi42NSAxMi42NSAwIDAgMSA0LjcwMyAzLjExIDEwLjYxNCAxMC42MTQgMCAwIDAgMy4wMjcgMi4yMTYgMTIuNjc2IDEyLjY3NiAwIDAgMSA0LjM4IDMuNTM1Yy42MTkuNzg4Ljg2IDEuNjQxLjgwNiAyLjQ3N2wtOS41OC0xLjE3OWExLjY0OSAxLjY0OSAwIDAgMC0uNjYyLTEuMTI2IDEuNjI2IDEuNjI2IDAgMCAwLTEuMzg2LS4yNnoiIGZpbGw9InVybCgjaikiLz48cGF0aCBkPSJNMzkuNzY0IDE4Ljc5Yy0uNDYzLjY0LS40IDEuNS4xMDQgMi4wNjZsLTUuNzczIDcuOThhMS4zNjMgMS4zNjMgMCAwIDEtLjI5Mi0uODVsLjAyMS0xMy40NDljLjAwNC0yLjA5NiAxLjAxMi00LjA2NCAyLjUzOC00LjkybDMuNTg1IDguOTZhMS42NiAxLjY2IDAgMCAwLS4xODMuMjEzeiIgZmlsbD0idXJsKCNrKSIvPjxwYXRoIGQ9Ik01Mi4xNiAyMS41NDhjLS40NjUgMS41OTEtMS45NSAzLjAwNi0zLjgxMiAzLjYxbC0xMi43ODIgNC4xNTVhMS4zNTIgMS4zNTIgMCAwIDEtLjgyLjAwOGw1Ljc4OC03Ljk5NmExLjY0IDEuNjQgMCAwIDAgMi4wNjctLjk0OWw5LjU1OSAxLjE3MnoiIGZpbGw9InVybCgjbCkiLz48cGF0aCBkPSJtMjcuNDYgOS4xOTgtMy41NDcgOC44OTJhMS42MjYgMS42MjYgMCAwIDAtMS4zODYuMjYgMS42NSAxLjY1IDAgMCAwLS42NjIgMS4xMjVsLTkuNTggMS4xNzljLS4wNTMtLjgzNi4xODctMS42OS44MDYtMi40NzdhMTIuNjc3IDEyLjY3NyAwIDAgMSA0LjM4LTMuNTM0IDEwLjYxNiAxMC42MTYgMCAwIDAgMy4wMjctMi4yMTcgMTIuNjUgMTIuNjUgMCAwIDEgNC43MDMtMy4xMWMuODA1LS4zIDEuNTY5LS4zMTYgMi4yNTgtLjExOHoiIGZpbGw9InVybCgjbSkiLz48cGF0aCBkPSJNMTYuMTk1IDI1LjE0M2MtMS44Ni0uNjA1LTMuMzQyLTIuMDE3LTMuODA2LTMuNjA3bDkuNTQ0LTEuMTdhMS42MzYgMS42MzYgMCAwIDAgMi4wNjQuOTQ4bDUuNzggNy45ODdhMS4zNDkgMS4zNDkgMCAwIDEtLjgxOS0uMDA4bC0xMi43NjMtNC4xNXoiIGZpbGw9InVybCgjbikiLz48cGF0aCBkPSJNMjQuNjM5IDIwLjg2N2ExLjY1NCAxLjY1NCAwIDAgMC0uMDc5LTIuMjgxbDMuNTktOC45N2MxLjUzLjg1NyAyLjUzOSAyLjgyOCAyLjU0MiA0LjkyNmwuMDIxIDEzLjQ2MmMuMDAxLjMyNy0uMTEuNjItLjI5Mi44NTJsLTUuNzgyLTcuOTg5eiIgZmlsbD0idXJsKCNvKSIvPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0iaCIgeDE9IjgiIHkxPSI0My40NjciIHgyPSIxNi4zOTkiIHkyPSIzNy45MzgiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBzdG9wLWNvbG9yPSIjOUEwQTBFIi8+PHN0b3Agb2Zmc2V0PSIuODY5IiBzdG9wLWNvbG9yPSIjREExODFGIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImEiIHgxPSI0NS45MjYiIHkxPSIzNi4wNTMiIHgyPSI1MS4wNjgiIHkyPSI0My41NjEiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9Ii40NjQiIHN0b3AtY29sb3I9IiNFQTMwMkEiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNDNTE1MUIiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iYyIgeDE9IjQ1LjkyNiIgeTE9IjM2LjA1MyIgeDI9IjUxLjA2OCIgeTI9IjQzLjU2MSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iLjQ2NCIgc3RvcC1jb2xvcj0iI0VBMzAyQSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0M1MTUxQiIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJkIiB4MT0iMzEuOTAxIiB5MT0iNTQuOTMzIiB4Mj0iMzEuOTAxIiB5Mj0iNDcuNDIxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iIzlFMEIwRiIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0RBMTgxRiIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJlIiB4MT0iMzEuOTAxIiB5MT0iNTQuOTMzIiB4Mj0iMzEuOTAxIiB5Mj0iNDcuNDIxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iIzlFMEIwRiIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0RBMTgxRiIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJmIiB4MT0iMzEuOTAxIiB5MT0iNTQuOTMzIiB4Mj0iMzEuOTAxIiB5Mj0iNDcuNDIxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iIzlFMEIwRiIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0RBMTgxRiIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJnIiB4MT0iOCIgeTE9IjQzLjQ2NyIgeDI9IjE2LjM5OSIgeTI9IjM3LjkzOCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiM5QTBBMEUiLz48c3RvcCBvZmZzZXQ9Ii44NjkiIHN0b3AtY29sb3I9IiNEQTE4MUYiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iYiIgeDE9IjQ1LjkyNiIgeTE9IjM2LjA1MyIgeDI9IjUxLjA2OCIgeTI9IjQzLjU2MSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iLjQ2NCIgc3RvcC1jb2xvcj0iI0VBMzAyQSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0M1MTUxQiIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJpIiB4MT0iOCIgeTE9IjQzLjQ2NyIgeDI9IjE2LjM5OSIgeTI9IjM3LjkzOCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiM5QTBBMEUiLz48c3RvcCBvZmZzZXQ9Ii44NjkiIHN0b3AtY29sb3I9IiNEQTE4MUYiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iaiIgeDE9IjQyLjk2MyIgeTE9IjEyLjIzIiB4Mj0iMzMuODY1IiB5Mj0iMjcuMDUiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBzdG9wLWNvbG9yPSIjRjlCMTk4Ii8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjRUUxQzI1Ii8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImsiIHgxPSI0Mi45NjMiIHkxPSIxMi4yMyIgeDI9IjMzLjg2NSIgeTI9IjI3LjA1IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iI0Y5QjE5OCIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0VFMUMyNSIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJsIiB4MT0iNDIuOTYzIiB5MT0iMTIuMjMiIHgyPSIzMy44NjUiIHkyPSIyNy4wNSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiNGOUIxOTgiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNFRTFDMjUiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0ibSIgeDE9IjE4Ljc2NSIgeTE9IjEzLjQxNiIgeDI9IjI5LjU0NSIgeTI9IjMyLjU4NSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiNFRTI3MjkiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNFRTFDMjUiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0ibiIgeDE9IjE4Ljc2NSIgeTE9IjEzLjQxNiIgeDI9IjI5LjU0NSIgeTI9IjMyLjU4NSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiNFRTI3MjkiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNFRTFDMjUiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0ibyIgeDE9IjE4Ljc2NSIgeTE9IjEzLjQxNiIgeDI9IjI5LjU0NSIgeTI9IjMyLjU4NSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiNFRTI3MjkiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNFRTFDMjUiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48L3N2Zz4=',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'fusotao-token.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'NearX',\n symbol: 'NearX',\n icon:\n \"data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M24 12C24 18.6274 18.6274 24 12 24C5.37258 24 0 18.6274 0 12C0 5.37258 5.37258 0 12 0C18.6274 0 24 5.37258 24 12ZM17.1421 21.3847L21.3848 17.1421L19.3669 15.1243C18.5576 17.0302 17.0303 18.5576 15.1243 19.3669L17.1421 21.3847ZM9.4329 19.5792C7.45318 18.9089 5.82112 17.4847 4.87847 15.6484L3.24263 17.2842L7.48527 21.5269L9.4329 19.5792ZM4.63307 8.87568C5.4424 6.96973 6.96977 5.44237 8.87573 4.63305L7.24263 2.99995L2.99999 7.24259L4.63307 8.87568ZM15.6484 4.87847L17.3848 3.14209L21.6274 7.38473L19.5792 9.4329C18.9089 7.45318 17.4847 5.82112 15.6484 4.87847Z' fill='%232FA8AF'/%3E%3Cpath d='M8.00119 11.9921C8.00119 11.0268 8.00119 10.0615 8.00119 9.09612C8.00119 8.50505 8.16497 8.1743 8.56285 8.05781C8.97778 7.93628 9.40619 7.97917 9.79565 8.45228C11.3533 10.3447 12.9343 12.218 14.5092 14.0959C14.5692 14.1676 14.6117 14.3122 14.734 14.2626C14.8496 14.2157 14.7858 14.0805 14.786 13.9878C14.7904 12.6326 14.7898 11.2774 14.7868 9.92226C14.7868 9.83668 14.838 9.7162 14.7271 9.67372C14.6401 9.64029 14.5824 9.74185 14.522 9.79358C14.0492 10.1981 13.5804 10.6073 13.1088 11.0133C13.0208 11.089 12.9332 11.2118 12.8002 11.1012C12.6657 10.9894 12.7696 10.8872 12.8364 10.7881C13.3547 10.0186 13.8728 9.24898 14.3909 8.47919C14.6656 8.07085 15.0079 7.92282 15.4056 8.04141C15.786 8.15475 15.9986 8.48592 15.9992 8.97668C16.0007 10.0905 15.9996 11.2045 15.9996 12.3183C15.9996 13.2094 16.0003 14.1005 15.9994 14.9916C15.999 15.4826 15.8137 15.798 15.4512 15.9324C15.0256 16.0901 14.5767 15.9683 14.2734 15.6058C12.6823 13.705 11.0924 11.8029 9.50198 9.90144C9.46029 9.85161 9.42303 9.7961 9.37377 9.75489C9.28998 9.68487 9.21967 9.68108 9.21314 9.81797C9.20999 9.88273 9.21188 9.94791 9.21188 10.0129C9.21188 11.3496 9.21062 12.6862 9.2142 14.0227C9.21441 14.1186 9.15609 14.2557 9.26114 14.3038C9.38093 14.3587 9.45061 14.2178 9.52998 14.1503C9.98259 13.7651 10.4291 13.3728 10.8805 12.9859C10.9729 12.9066 11.0626 12.7651 11.208 12.8973C11.3402 13.0176 11.2213 13.1196 11.159 13.2127C10.6323 13.9989 10.1032 14.7837 9.57145 15.5663C9.32788 15.9248 8.9881 16.056 8.61085 15.9488C8.23739 15.8428 8.00498 15.5246 8.00287 15.0827C7.99761 14.0523 8.00119 13.022 8.00119 11.9917V11.9921Z' fill='white'/%3E%3C/svg%3E%0A\",\n reference: 'https://near.staderlabs.com',\n reference_hash: null,\n decimals: 24,\n id: 'v2-nearx.stader-labs.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'DISCOVOL TOKEN',\n symbol: 'DISC',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSLlm77lsYJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4PSIwIiB5PSIwIiB2aWV3Qm94PSIwIDAgMTQxLjcgMTQxLjciIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDE0MS43IDE0MS43IiB4bWw6c3BhY2U9InByZXNlcnZlIj48c3R5bGU+LnN0MHtmaWxsOiNmOTcxMTZ9PC9zdHlsZT48cGF0aCBjbGFzcz0ic3QwIiBkPSJNNDYuMSAxOC43djEwNS42czIxLjMtNS41IDMzLjEtMjljMCAwIDEyLjctMjIuMi0uOS00OS43IDAgMC0xMC4xLTIwLjktMzIuMi0yNi45eiIvPjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xMDUuNyA5LjRjMzEuMSAxOC4zIDM0LjUgNDguNCAzNC41IDQ4LjQgNi40IDM3LjktMTcgNjAuMy0xNyA2MC4zLTMxLjQgMzQuNS03My40IDIwLjMtNzMuNCAyMC4zIDMwLjYtOS4zIDQxLjktMzUuMSA0MS45LTM1LjEgMTYuNi0zNS41IDAtNjMuMiAwLTYzLjJDNzcgOS43IDQ3LjMgMy45IDQ3LjMgMy45YzMyLjQtMTEuMyA1OC40IDUuNSA1OC40IDUuNXptNyAxMS41UzExMS4xIDM4IDk0LjcgMzhjMCAwIDE2IDIuOCAxNy41IDE4LjggMCAwIDEuNC0xNy41IDE4LjItMTguMy0uMSAwLTE4LjUtMS41LTE3LjctMTcuNnpNMjUuNiAxNS45aDUuOXYxMTAuOEgyN1M4IDExMiAyLjIgODkuMmMwIDAtNy43LTI2LjIgNS01MC40LjEuMSA5LjUtMTcgMTguNC0yMi45eiIvPjwvc3ZnPg==',\n reference: null,\n reference_hash: null,\n decimals: 14,\n id: 'discovol-token.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Stader',\n symbol: 'SD',\n icon:\n \"data:image/svg+xml,%3Csvg width='256' height='256' viewBox='0 0 256 256' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M128 256C198.692 256 256 198.692 256 128C256 57.3075 198.692 0 128 0C57.3075 0 0 57.3075 0 128C0 198.692 57.3075 256 128 256Z' fill='%236259D4'/%3E%3Cpath d='M126.852 191.869L126.822 181.088L153.98 165.105L153.886 133.025L163.667 127.882L164.056 170.723L126.852 191.869Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M153.98 165.105L126.822 181.088L126.852 191.869L164.056 170.723L163.667 127.882L153.886 133.025L153.98 165.105ZM154.207 133.218L154.3 165.104C154.301 165.218 154.241 165.323 154.143 165.381L127.143 181.271L127.171 191.32L163.735 170.538L163.352 128.41L154.207 133.218Z' fill='%236259D4'/%3E%3Cpath d='M134.785 112.611L145.906 106.314L173.184 123.396L173.334 175.037L164.063 170.734L163.673 127.894L134.785 112.611Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M163.673 127.894L164.063 170.734L173.334 175.037L173.184 123.396L145.906 106.314L134.785 112.611L163.673 127.894ZM135.451 112.601L163.823 127.611C163.927 127.666 163.992 127.773 163.993 127.891L164.381 170.529L173.013 174.535L172.865 123.574L145.898 106.687L135.451 112.601Z' fill='%236259D4'/%3E%3Cpath d='M126.443 53.3335L173.06 79.8728L173.094 90.9255L126.49 64.9081L126.443 53.3335Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M126.443 53.3335L126.49 64.9081L173.094 90.9255L173.06 79.8728L126.443 53.3335ZM126.766 53.8852L126.81 64.7198L172.773 90.3795L172.741 80.0592L126.766 53.8852Z' fill='%236259D4'/%3E%3Cpath d='M80.1584 134.322L80 80.4074L126.432 53.3335L126.48 64.9081L88.7187 86.0335L88.5731 128.106L80.1584 134.322Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M88.7187 86.0335L126.48 64.9081L126.432 53.3335L80 80.4074L80.1584 134.322L88.5731 128.106L88.7187 86.0335ZM88.2536 127.944L88.3987 86.0324C88.3991 85.9169 88.4617 85.8106 88.5624 85.7542L126.159 64.7209L126.115 53.8892L80.3205 80.5909L80.4766 133.689L88.2536 127.944Z' fill='%236259D4'/%3E%3Cpath d='M107.511 149.374L80.1562 134.324L88.5709 128.108L135.44 154.885L107.58 170.601L98.2445 175.794L126.85 191.879L164.054 170.733L173.325 175.035L126.619 202.66L80.2804 176.371L117.215 154.711L107.511 149.374Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M107.58 170.601L135.44 154.885L88.5709 128.108L80.1562 134.324L117.215 154.711L80.2804 176.371L126.619 202.66L173.325 175.035L164.054 170.733L126.85 191.879L98.2445 175.794L107.58 170.601ZM164.069 171.092L127.008 192.157C126.91 192.213 126.791 192.213 126.693 192.158L98.0877 176.073C97.9866 176.016 97.9242 175.909 97.9245 175.794C97.9248 175.678 97.9877 175.571 98.0889 175.515L107.423 170.322L134.792 154.884L88.5932 128.49L80.7483 134.285L107.666 149.093L117.369 154.431C117.47 154.486 117.533 154.592 117.535 154.707C117.536 154.822 117.476 154.929 117.377 154.987L80.9208 176.367L126.615 202.29L172.639 175.069L164.069 171.092Z' fill='%236259D4'/%3E%3Cpath d='M88.7207 86.0458L126.482 64.9204L173.085 90.9378L145.902 106.323L134.781 112.619L163.669 127.902L153.888 133.044L116.808 112.11L153.764 90.4499L144.947 85.4178L126.512 74.8955L99.0623 90.6069L88.7207 86.0458Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M173.085 90.9378L126.482 64.9204L88.7207 86.0458L99.0623 90.6069L126.512 74.8955L153.764 90.4499L116.808 112.11L153.888 133.044L163.669 127.902L134.781 112.619L173.085 90.9378ZM162.983 127.901L134.631 112.902C134.528 112.847 134.462 112.741 134.461 112.624C134.459 112.507 134.521 112.398 134.623 112.341L145.744 106.044L172.432 90.9397L126.482 65.287L89.4368 86.0119L99.0436 90.2489L126.353 74.6177C126.451 74.5614 126.572 74.5614 126.67 74.6175L153.923 90.172C154.022 90.2286 154.083 90.3338 154.084 90.4481C154.085 90.5623 154.024 90.6682 153.926 90.726L117.45 112.105L153.894 132.68L162.983 127.901Z' fill='%236259D4'/%3E%3Cpath d='M98.252 175.789L107.587 170.596L126.827 181.093L126.857 191.874L98.252 175.789Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M98.252 175.789L126.857 191.874L126.827 181.093L107.587 170.596L98.252 175.789ZM98.9075 175.791L126.536 191.326L126.508 181.283L107.589 170.962L98.9075 175.791Z' fill='%236259D4'/%3E%3Cpath d='M80.2804 176.368L80.2461 164.785L107.511 149.371L117.215 154.708L80.2804 176.368Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M80.2804 176.368L117.215 154.708L107.511 149.371L80.2461 164.785L80.2804 176.368ZM80.5987 175.81L116.567 154.717L107.513 149.737L80.5666 164.971L80.5987 175.81Z' fill='%236259D4'/%3E%3Cpath d='M116.809 112.109L116.92 101.073L144.947 85.417L153.764 90.4491L116.809 112.109Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M116.809 112.109L153.764 90.4491L144.947 85.417L116.92 101.073L116.809 112.109ZM117.134 111.547L153.125 90.4528L144.946 85.7845L117.238 101.262L117.134 111.547Z' fill='%236259D4'/%3E%3Cpath d='M88.5723 128.087L88.7179 86.0142L99.0595 90.5753L99.1537 123.589L135.407 143.582L135.442 154.864L88.5723 128.087Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M99.1537 123.589L99.0595 90.5753L88.7179 86.0142L88.5723 128.087L135.442 154.864L135.407 143.582L99.1537 123.589ZM135.088 143.771L98.9992 123.869C98.8974 123.813 98.8341 123.706 98.8337 123.59L98.7401 90.7841L89.0362 86.5043L88.8929 127.901L135.12 154.311L135.088 143.771Z' fill='%236259D4'/%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '30d20208d987713f46dfd34ef128bb16c404d10f.factory.bridge.near',\n },\n {\n spec: 'ft-1.0',\n name: 'SWEAT',\n symbol: 'SWEAT',\n icon:\n \"data:image/svg+xml,%3Csvg viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='100' height='100' rx='50' fill='%23FF0D75'/%3E%3Cg clip-path='url(%23clip0_283_2788)'%3E%3Cpath d='M39.4653 77.5455L19.0089 40.02L35.5411 22.2805L55.9975 59.806L39.4653 77.5455Z' stroke='white' stroke-width='10'/%3E%3Cpath d='M66.0253 77.8531L45.569 40.3276L62.1012 22.5882L82.5576 60.1136L66.0253 77.8531Z' stroke='white' stroke-width='10'/%3E%3C/g%3E%3Cdefs%3E%3CclipPath id='clip0_283_2788'%3E%3Crect width='100' height='56' fill='white' transform='translate(0 22)'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E%0A\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'token.sweat',\n },\n {\n spec: 'ft-1.0.0',\n name: 'APYSwap',\n symbol: 'APYS',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgdmlld0JveD0iLTEwIC0xMCAxMjAgMTIwIiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8ZyBjbGlwLXBhdGg9InVybCgjY2xpcDBfMTQ2OF81MTk1KSI+CjxwYXRoIGQ9Ik0zOC40MzUzIDEyLjY4NUw3NC41ODY5IDc3Ljg2NzdMOTguOTk5OSA3OC41NjYzTDYyLjY3NDkgMTMuMzc4N0wzOC40MzUzIDEyLjY4NVoiIGZpbGw9InVybCgjcGFpbnQwX2xpbmVhcl8xNDY4XzUxOTUpIi8+CjxwYXRoIGQ9Ik0xMi43NjcyIDU1LjQwNzFMODYuOTM2NiA1Ni42MzI2TDk4Ljk5ODIgNzcuODM0OEwwLjAxMTcwNDYgNzYuMTk5MkwxMi43NjcyIDU1LjQwNzFaIiBmaWxsPSJ1cmwoI3BhaW50MV9saW5lYXJfMTQ2OF81MTk1KSIvPgo8cGF0aCBkPSJNNjIuMjQxMSAxMy4wOTRMMjMuODY5OCA3Ny4wODU2TC0wLjUxMDgwNSA3Ni45MTIyTDM3Ljg2NzMgMTIuOTIwN0w2Mi4yNDExIDEzLjA5NFoiIGZpbGw9InVybCgjcGFpbnQyX2xpbmVhcl8xNDY4XzUxOTUpIi8+CjwvZz4KPGRlZnM+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQwX2xpbmVhcl8xNDY4XzUxOTUiIHgxPSI1NS45Njc3IiB5MT0iMjMuODc4MSIgeDI9Ijg1LjQ4MjUiIHkyPSI3Ny4wMTI2IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIHN0b3AtY29sb3I9IiMwOEFFRUEiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMkFGNTk4Ii8+CjwvbGluZWFyR3JhZGllbnQ+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQxX2xpbmVhcl8xNDY4XzUxOTUiIHgxPSIyOS40ODcxIiB5MT0iNjcuODQzIiB4Mj0iNjguOTYzNiIgeTI9IjY4LjgwMzIiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KPHN0b3Agc3RvcC1jb2xvcj0iIzA4QUVFQSIvPgo8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMyQUY1OTgiLz4KPC9saW5lYXJHcmFkaWVudD4KPGxpbmVhckdyYWRpZW50IGlkPSJwYWludDJfbGluZWFyXzE0NjhfNTE5NSIgeDE9IjUxLjk4MzUiIHkxPSIzLjEzMzQ1IiB4Mj0iMzEuMjQxOCIgeTI9IjM2LjE3MzUiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KPHN0b3Agc3RvcC1jb2xvcj0iIzA4QUVFQSIvPgo8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMyQUY1OTgiLz4KPC9saW5lYXJHcmFkaWVudD4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xNDY4XzUxOTUiPgo8cmVjdCB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgZmlsbD0id2hpdGUiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4=',\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'apys.token.a11bd.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Tether USD',\n symbol: 'USDt',\n icon:\n \"data:image/svg+xml,%3Csvg width='111' height='90' viewBox='0 0 111 90' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M24.4825 0.862305H88.0496C89.5663 0.862305 90.9675 1.64827 91.7239 2.92338L110.244 34.1419C111.204 35.7609 110.919 37.8043 109.549 39.1171L58.5729 87.9703C56.9216 89.5528 54.2652 89.5528 52.6139 87.9703L1.70699 39.1831C0.305262 37.8398 0.0427812 35.7367 1.07354 34.1077L20.8696 2.82322C21.6406 1.60483 23.0087 0.862305 24.4825 0.862305ZM79.8419 14.8003V23.5597H61.7343V29.6329C74.4518 30.2819 83.9934 32.9475 84.0642 36.1425L84.0638 42.803C83.993 45.998 74.4518 48.6635 61.7343 49.3125V64.2168H49.7105V49.3125C36.9929 48.6635 27.4513 45.998 27.3805 42.803L27.381 36.1425C27.4517 32.9475 36.9929 30.2819 49.7105 29.6329V23.5597H31.6028V14.8003H79.8419ZM55.7224 44.7367C69.2943 44.7367 80.6382 42.4827 83.4143 39.4727C81.0601 36.9202 72.5448 34.9114 61.7343 34.3597V40.7183C59.7966 40.8172 57.7852 40.8693 55.7224 40.8693C53.6595 40.8693 51.6481 40.8172 49.7105 40.7183V34.3597C38.8999 34.9114 30.3846 36.9202 28.0304 39.4727C30.8066 42.4827 42.1504 44.7367 55.7224 44.7367Z' fill='%23009393'/%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 6,\n id: 'usdt.tether-token.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'NEAT',\n symbol: 'NEAT',\n icon:\n \"data:image/svg+xml,%3Csvg width='40' height='40' viewBox='0 0 40 40' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='40' height='40' rx='4.8' fill='%23202020'/%3E%3Crect width='40' height='40' rx='4.8' fill='url(%23paint0_linear_1_5571)'/%3E%3Crect x='10.4' y='12.6001' width='4.8' height='4.8' fill='white'/%3E%3Crect x='15.2' y='12.6001' width='4.8' height='4.8' fill='white'/%3E%3Crect x='24.8' y='12.6001' width='4.8' height='4.8' fill='white'/%3E%3Crect x='10.4' y='17.4001' width='4.8' height='4.8' fill='white'/%3E%3Crect x='24.8' y='17.4001' width='4.8' height='4.8' fill='white'/%3E%3Crect x='10.4' y='22.2002' width='4.8' height='4.8' fill='white'/%3E%3Crect x='24.8' y='22.2002' width='4.8' height='4.8' fill='white'/%3E%3Crect x='20' y='22.2002' width='4.8' height='4.8' fill='white'/%3E%3Crect x='17.6' y='17.4001' width='4.8' height='4.8' fill='white'/%3E%3Cdefs%3E%3ClinearGradient id='paint0_linear_1_5571' x1='20' y1='0' x2='20' y2='40' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%23262626'/%3E%3Cstop offset='1' stop-color='%23121212'/%3E%3C/linearGradient%3E%3C/defs%3E%3C/svg%3E%0A\",\n reference: null,\n reference_hash: null,\n decimals: 8,\n id: 'neat.nrc-20.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'USMeme',\n symbol: 'USM',\n icon:\n 'https://storage.herewallet.app/upload/13151331-8f9c-4851-8038-36794688c693.jpg',\n reference: null,\n reference_hash: null,\n decimals: 8,\n id: 'usmeme.tg',\n },\n];\n\nexport function getDefaultTokenList() {\n const env = getConfig().networkId;\n\n switch (env) {\n case 'mainnet':\n return DefaultMainnetTokenList;\n case 'testnet':\n return DefaultTestnetTokenList;\n default:\n return DefaultMainnetTokenList;\n }\n}\n","import { TokenMetadata, Transaction } from '../types';\n\nimport {\n priceToPoint,\n toNonDivisibleNumber,\n toPrecision,\n registerAccountOnToken,\n} from '../utils';\nimport { ONE_YOCTO_NEAR, WRAP_NEAR_CONTRACT_ID, config } from '../constant';\nimport { DCLSwapGetStorageBalance } from '../ref';\nimport { DCL_POOL_FEE_LIST, getDCLPoolId } from './dcl-pool';\nimport {\n nearDepositTransaction,\n ftGetStorageBalance,\n refDCLSwapViewFunction,\n} from '../ref';\nimport _ from 'lodash';\nimport { toReadableNumber, percentLess } from '../utils';\nimport { NoPoolOnThisPair, SlippageError } from '../error';\n\ninterface SwapInfo {\n tokenA: TokenMetadata;\n tokenB: TokenMetadata;\n amountA: string;\n}\n\ninterface DCLSwapProps {\n swapInfo: SwapInfo;\n Swap?: {\n pool_ids: string[];\n min_output_amount: string;\n };\n SwapByOutput?: {\n pool_ids: string[];\n output_amount: string;\n };\n LimitOrderWithSwap?: {\n pool_id: string;\n output_amount: string;\n };\n SwapByStopPoint?: {\n pool_id: string;\n stop_point: number;\n skip_unwrap_near: boolean;\n };\n AccountId: string;\n}\nexport const DCL_POOL_SPLITER = '|';\n\nexport const DCLSwap = async ({\n Swap,\n SwapByOutput,\n LimitOrderWithSwap,\n SwapByStopPoint,\n AccountId,\n swapInfo,\n}: DCLSwapProps) => {\n const transactions: Transaction[] = [];\n\n const { tokenA, tokenB, amountA } = swapInfo;\n\n if (Swap) {\n const pool_ids = Swap.pool_ids;\n\n const tokenRegistered = await ftGetStorageBalance(\n tokenB.id,\n AccountId\n ).catch(() => {\n throw new Error(`${tokenB.id} doesn't exist.`);\n });\n\n if (tokenRegistered === null) {\n transactions.push({\n receiverId: tokenB.id,\n functionCalls: [registerAccountOnToken(AccountId)],\n });\n }\n\n const output_token = tokenB.id;\n const min_output_amount = toPrecision(Swap.min_output_amount, 0);\n\n const msg = JSON.stringify({\n Swap: {\n pool_ids,\n output_token,\n min_output_amount,\n client_id: '',\n },\n });\n\n transactions.push({\n receiverId: tokenA.id,\n functionCalls: [\n {\n methodName: 'ft_transfer_call',\n args: {\n receiver_id: config.REF_DCL_SWAP_CONTRACT_ID,\n amount: toNonDivisibleNumber(tokenA.decimals, amountA),\n msg,\n },\n gas: '180000000000000',\n amount: ONE_YOCTO_NEAR,\n },\n ],\n });\n } else if (SwapByOutput) {\n const pool_ids = SwapByOutput.pool_ids;\n const output_token = tokenB.id;\n const output_amount = toNonDivisibleNumber(\n tokenB.decimals,\n SwapByOutput.output_amount\n );\n const msg = JSON.stringify({\n SwapByOutput: {\n pool_ids,\n output_token,\n output_amount,\n client_id: '',\n },\n });\n const tokenRegistered = await ftGetStorageBalance(\n tokenB.id,\n AccountId\n ).catch(() => {\n throw new Error(`${tokenB.id} doesn't exist.`);\n });\n\n if (tokenRegistered === null) {\n transactions.push({\n receiverId: tokenB.id,\n functionCalls: [registerAccountOnToken(AccountId)],\n });\n }\n\n transactions.push({\n receiverId: tokenA.id,\n functionCalls: [\n {\n methodName: 'ft_transfer_call',\n args: {\n receiver_id: config.REF_DCL_SWAP_CONTRACT_ID,\n amount: toNonDivisibleNumber(tokenA.decimals, amountA),\n msg,\n },\n gas: '180000000000000',\n amount: ONE_YOCTO_NEAR,\n },\n ],\n });\n } else if (LimitOrderWithSwap) {\n const pool_id = LimitOrderWithSwap.pool_id;\n\n const fee = Number(pool_id.split(DCL_POOL_SPLITER)[2]);\n\n const buy_token = tokenB.id;\n const point = priceToPoint({\n amountA,\n amountB: LimitOrderWithSwap.output_amount,\n tokenA,\n tokenB,\n fee,\n });\n\n const tokenRegistered = await ftGetStorageBalance(\n tokenB.id,\n AccountId\n ).catch(() => {\n throw new Error(`${tokenB.id} doesn't exist.`);\n });\n\n if (tokenRegistered === null) {\n transactions.push({\n receiverId: tokenB.id,\n functionCalls: [registerAccountOnToken(AccountId)],\n });\n }\n\n const DCLRegistered = await DCLSwapGetStorageBalance(\n tokenB.id,\n AccountId\n ).catch(() => {\n throw new Error(`${tokenB.id} doesn't exist.`);\n });\n\n if (DCLRegistered === null) {\n transactions.push({\n receiverId: config.REF_DCL_SWAP_CONTRACT_ID,\n functionCalls: [\n {\n methodName: 'storage_deposit',\n args: {\n registration_only: true,\n account_id: AccountId,\n },\n gas: '30000000000000',\n amount: '0.5',\n },\n ],\n });\n }\n\n const new_point =\n pool_id.split(DCL_POOL_SPLITER)[0] === tokenA.id ? point : -point;\n\n const msg = JSON.stringify({\n LimitOrderWithSwap: {\n pool_id,\n buy_token,\n point: new_point,\n client_id: '',\n },\n });\n\n transactions.push({\n receiverId: tokenA.id,\n functionCalls: [\n {\n methodName: 'ft_transfer_call',\n args: {\n receiver_id: config.REF_DCL_SWAP_CONTRACT_ID,\n amount: toNonDivisibleNumber(tokenA.decimals, amountA),\n msg,\n },\n gas: '180000000000000',\n amount: ONE_YOCTO_NEAR,\n },\n ],\n });\n } else if (SwapByStopPoint) {\n const tokenRegistered = await ftGetStorageBalance(\n tokenB.id,\n AccountId\n ).catch(() => {\n throw new Error(`${tokenB.id} doesn't exist.`);\n });\n\n if (tokenRegistered === null) {\n transactions.push({\n receiverId: tokenB.id,\n functionCalls: [registerAccountOnToken(AccountId)],\n });\n }\n const msg = JSON.stringify({\n SwapByStopPoint: SwapByStopPoint,\n });\n transactions.push({\n receiverId: tokenA.id,\n functionCalls: [\n {\n methodName: 'ft_transfer_call',\n args: {\n receiver_id: config.REF_DCL_SWAP_CONTRACT_ID,\n amount: toNonDivisibleNumber(tokenA.decimals, amountA),\n msg,\n },\n gas: '180000000000000',\n amount: ONE_YOCTO_NEAR,\n },\n ],\n });\n }\n\n if (tokenA.id === WRAP_NEAR_CONTRACT_ID) {\n const registered = await ftGetStorageBalance(\n WRAP_NEAR_CONTRACT_ID,\n AccountId\n );\n if (registered === null) {\n transactions.unshift({\n receiverId: WRAP_NEAR_CONTRACT_ID,\n functionCalls: [registerAccountOnToken(AccountId)],\n });\n }\n }\n\n return transactions;\n};\n\nexport const quote = async ({\n pool_ids,\n input_amount,\n input_token,\n output_token,\n tag,\n}: {\n pool_ids: string[];\n input_token: TokenMetadata;\n output_token: TokenMetadata;\n input_amount: string;\n tag?: string;\n}) => {\n return refDCLSwapViewFunction({\n methodName: 'quote',\n args: {\n pool_ids,\n input_token: input_token.id,\n output_token: output_token.id,\n input_amount: toNonDivisibleNumber(input_token.decimals, input_amount),\n tag,\n },\n });\n};\n\nexport const list_user_assets = async (AccountId: string) => {\n if (!AccountId) return;\n\n return refDCLSwapViewFunction({\n methodName: 'list_user_assets',\n args: {\n account_id: AccountId,\n },\n });\n};\n\nexport const DCLSwapByInputOnBestPool = async ({\n tokenA,\n tokenB,\n amountA,\n slippageTolerance,\n AccountId,\n}: {\n tokenA: TokenMetadata;\n tokenB: TokenMetadata;\n amountA: string;\n slippageTolerance: number;\n AccountId: string;\n}) => {\n if (slippageTolerance <= 0 || slippageTolerance >= 100) {\n throw SlippageError;\n }\n\n const estimates = await Promise.all(\n DCL_POOL_FEE_LIST.map(async fee => {\n const pool_id = getDCLPoolId(tokenA.id, tokenB.id, fee);\n return quote({\n pool_ids: [pool_id],\n input_token: tokenA,\n output_token: tokenB,\n input_amount: amountA,\n tag: `${tokenA.id}-${fee}-${amountA}`,\n }).catch(e => null);\n })\n );\n\n if (!estimates || estimates.every(e => e === null)) {\n throw NoPoolOnThisPair(tokenA.id, tokenB.id);\n }\n\n const bestEstimate =\n estimates && estimates?.some(e => !!e)\n ? _.maxBy(estimates, e => Number(!e || !e.tag ? -1 : e.amount))\n : null;\n\n const bestFee =\n bestEstimate &&\n bestEstimate.tag &&\n bestEstimate?.tag?.split('-')?.[1] &&\n Number(bestEstimate?.tag?.split('-')?.[1]);\n\n return DCLSwap({\n swapInfo: {\n tokenA,\n tokenB,\n amountA,\n },\n Swap: {\n pool_ids: [getDCLPoolId(tokenA.id, tokenB.id, bestFee)],\n min_output_amount: percentLess(slippageTolerance, bestEstimate.amount),\n },\n AccountId,\n });\n};\n\nexport const quote_by_output = ({\n pool_ids,\n output_amount,\n input_token,\n output_token,\n}: {\n pool_ids: string[];\n input_token: TokenMetadata;\n output_token: TokenMetadata;\n output_amount: string;\n}) => {\n return refDCLSwapViewFunction({\n methodName: 'quote_by_output',\n args: {\n pool_ids,\n input_token: input_token.id,\n output_token: output_token.id,\n output_amount: toNonDivisibleNumber(output_token.decimals, output_amount),\n },\n });\n};\n","import { TokenMetadata, Transaction } from '../types';\nimport { NoOrderFound, OrderNoRemainedAmount } from '../error';\nimport {\n priceToPoint,\n toNonDivisibleNumber,\n toPrecision,\n registerAccountOnToken,\n} from '../utils';\nimport {\n ONE_YOCTO_NEAR,\n WRAP_NEAR_CONTRACT_ID,\n config,\n POINTLEFTRANGE,\n POINTRIGHTRANGE,\n} from '../constant';\nimport {\n nearDepositTransaction,\n ftGetStorageBalance,\n refDCLSwapViewFunction,\n} from '../ref';\n\nexport interface UserOrderInfo {\n order_id: string;\n owner_id: string;\n pool_id: string;\n point: number;\n sell_token: string;\n created_at: string;\n original_amount: string;\n remain_amount: string; // 0 means history order: ;\n cancel_amount: string;\n // amount through ft_transfer_call\n\n original_deposit_amount: string;\n // earn token amount through swap before actual place order\n\n swap_earn_amount: string;\n buy_token: string;\n unclaimed_amount: string; // claim will push it to inner account\n bought_amount: string; // accumalated amount into inner account\n}\n\nexport const list_history_orders = (AccountId: string) => {\n return refDCLSwapViewFunction({\n methodName: 'list_history_orders',\n args: {\n account_id: AccountId,\n },\n });\n};\n\nexport const list_active_orders = (AccountId: string) => {\n return refDCLSwapViewFunction({\n methodName: 'list_active_orders',\n args: {\n account_id: AccountId,\n },\n });\n};\n\nexport const get_order = async (order_id: string) => {\n return refDCLSwapViewFunction({\n methodName: 'get_order',\n args: {\n order_id,\n },\n }).catch(() => {\n throw NoOrderFound(order_id);\n });\n};\n\nexport const find_order = async ({\n pool_id,\n point,\n AccountId,\n}: {\n pool_id: string;\n point: number;\n AccountId: string;\n}) => {\n return refDCLSwapViewFunction({\n methodName: 'find_order',\n args: {\n account_id: AccountId,\n pool_id,\n point,\n },\n }).catch(() => {\n throw NoOrderFound();\n }) as Promise<UserOrderInfo>;\n};\nexport const cancel_order = async (order_id: string) => {\n const order = await get_order(order_id);\n\n if (!order.remain_amount) throw OrderNoRemainedAmount;\n\n const transactions: Transaction[] = [\n {\n receiverId: config.REF_DCL_SWAP_CONTRACT_ID,\n functionCalls: [\n {\n methodName: 'cancel_order',\n args: {\n order_id,\n amount: order.remain_amount,\n },\n gas: '180000000000000',\n },\n ],\n },\n ];\n\n return transactions;\n};\n\nexport const claim_order = (order_id: string) => {\n const transactions: Transaction[] = [\n {\n receiverId: config.REF_DCL_SWAP_CONTRACT_ID,\n functionCalls: [\n {\n methodName: 'cancel_order',\n args: {\n order_id,\n amount: '0',\n },\n gas: '180000000000000',\n },\n ],\n },\n ];\n\n return transactions;\n};\n\nexport const get_pointorder_range = ({\n pool_id,\n left_point,\n right_point,\n}: {\n pool_id: string;\n left_point?: number;\n right_point?: number;\n}) => {\n return refDCLSwapViewFunction({\n methodName: 'get_pointorder_range',\n args: {\n pool_id,\n left_point: left_point || POINTLEFTRANGE,\n right_point: right_point || POINTRIGHTRANGE,\n },\n });\n};\n"],"names":["FEE_DIVISOR","DEFAULT_SLIPPAGE_TOLERANCE","STABLE_LP_TOKEN_DECIMALS","RATED_POOL_LP_TOKEN_DECIMALS","STORAGE_TO_REGISTER_WITH_MFT","FT_MINIMUM_STORAGE_BALANCE_LARGE","ONE_YOCTO_NEAR","ENV","INDEXER_URL","getConfig","env","indexerUrl","nodeUrl","process","NEAR_ENV","REACT_APP_REF_SDK_ENV","networkId","walletUrl","WRAP_NEAR_CONTRACT_ID","REF_FI_CONTRACT_ID","REF_TOKEN_ID","explorerUrl","REF_DCL_SWAP_CONTRACT_ID","config","WNEAR_META_DATA","id","name","symbol","decimals","icon","REF_META_DATA","NEAR_META_DATA","TokenLinks","NEAR","wNEAR","REF","OCT","PARAS","SKYWARD","FLX","PULSE","DBIO","MYRIA","PXT","HAPI","OIN","ABR","MARMAJ","marmaj","USN","GRT","LINK","Cheddar","AURORA","$META","UMINT","UTO","DEIP","WOO","LINEAR","PEM","ATO","SEAT","FAR","BSTN","BRRR","XNL","KSW","STNEAR","NearX","SD","DISC","CONSTANT_D","POINTLEFTRANGE","POINTRIGHTRANGE","switchEnv","getKeyStore","window","keyStores","InMemoryKeyStore","BrowserLocalStorageKeyStore","provider","providers","JsonRpcProvider","url","sendTransactionsByMemoryKey","signedTransactions","results","i","length","sendTransaction","push","icons","BANANA_ID","CHEDDAR_ID","CUCUMBER_ID","HAPI_ID","WOO_ID","REPLACE_TOKENS","near","Near","keyStore","headers","init_env","refFiViewFunction","methodName","args","account","nearConnection","viewFunction","ftViewFunction","tokenId","ftGetStorageBalance","AccountId","NoAccountIdFound","account_id","ftGetBalance","getAccountNearBalance","then","res","getTotalPools","ftGetTokenMetadata","tag","TokenNotExistError","metadata","metaIconDefaults","ftGetTokensMetadata","tokenIds","allTokens","getGlobalWhitelist","ids","Promise","all","map","tokensMetadata","reduce","pre","cur","globalWhitelist","Array","from","Set","getUserRegisteredTokens","accountId","query","request_type","finality","data","amount","nearDepositTransaction","transaction","receiverId","functionCalls","gas","nearWithdrawTransaction","utils","format","parseNearAmount","refDCLSwapViewFunction","DCLInValid","DCLSwapGetStorageBalance","getMinStorageBalance","nep141Address","method_name","args_base64","result","balance","JSON","parse","Buffer","toString","min","console","error","DCL_POOL_FEE_LIST","getDCLPoolId","tokenA","tokenB","fee","indexOf","NoFeeToPool","tokenSeq","sort","join","listDCLPools","getDCLPool","pool_id","split","token_x","token_y","token_seq","new_pool_id","formatError","msg","Error","unNamedError","SameInputTokenError","ZeroInputError","NoPoolError","NotLoginError","SwapRouteError","NoPuiblicKeyError","NoLocalSignerError","InValidAccessKeyError","AccountIdMisMatch","NoCredential","NoPoolOnThisPair","SlippageError","NoOrderFound","order_id","OrderNoRemainedAmount","tradeFee","trade_fee","calc_d","amp","c_amounts","token_num","sum_amounts","_","sum","d_prev","d","d_prod","c_amount","ann","numerator","denominator","Math","abs","calc_y","x_c_amount","current_c_amounts","index_x","index_y","s","c","b","y_prev","y","y_numerator","y_denominator","calc_swap","in_token_idx","in_c_amount","out_token_idx","old_c_amounts","dy","amount_swapped","getSwappedAmount","tokenInId","tokenOutId","amountIn","stablePool","total_fee","token_account_ids","findIndex","rates","degens","r","toReadableNumber","base_old_c_amounts","toNonDivisibleNumber","scientificNotationToString","Big","times","Number","REF_WIDGET_STAR_TOKEN_LIST_KEY","REF_WIDGET_ALL_TOKENS_LIST_KEY","REF_WIDGET_ALL_LIGHT_TOKENS_LIST_KEY","REF_WIDGET_SWAP_IN_KEY","REF_WIDGET_SWAP_OUT_KEY","REF_WIDGET_SWAP_DETAIL_KEY","DEFAULT_START_TOKEN_LIST_TESTNET","DEFAULT_START_TOKEN_LIST_MAINNET","defaultTheme","container","buttonBg","primary","secondary","borderRadius","fontFamily","hover","active","secondaryBg","borderColor","iconDefault","iconHover","defaultDarkModeTheme","refIcon","getTokenPriceList","fetch","method","json","list","getTokens","reload","storagedTokens","localStorage","getItem","tokens","newTokens","Object","values","acc","keys","includes","setItem","stringify","getTokensTiny","getWhiteListTokensIndexer","whiteListIds","RM","DP","NE","PE","checkIntegerSumOfAllocations","allocations","totalInput","item","round","alloSum","a","plus","offset","minus","currMax","currMaxInd","gt","newAllocations","j","yenFromPy","bisqrt","value","BigInt","newtonIteration","n","x0","x1","getBetaForRoute","route","path","p","beta","reserves","p1","p2","getEpsilonForRoute","gamma","div","epsilon","gamma1","gamma2","getAlphaForRoute","inputToken","outputToken","key1","token1Id","key2","token2Id","val1","token1Supply","val2","token2Supply","alpha","key11","key12","val11","val12","key21","key22","val21","val22","middleToken","alpha1","alpha2","getAlphaSumFromRoutes","routes","nodeRoutes","alphaSum","nodeRoute","radical","toFixed","denom","getBetaSumFromRoutes","betaSum","num","getPhiFromRoutes","phi","getAllocationForRoute","allocation","getAllocationVectorForRoutes","allocationVec","getOptimalAllocationForRoutes","every","lt","some","reduceRoutes","sumAllocations","normalizedAllocations","goodIndices","dx","newRoutes","newNodeRoutes","goodIndex","allocationDict","allocationVecNew","zeroAllocation","getNodeRoutesFromPathsAndPoolChains","paths","poolChains","multiplicity","pc","mul","elem1","elem2","m","k","getPoolChainFromPaths","pools","threshold","pathInd","chain","pairs","pairInd","pair","tokenPools","getPoolsByToken1ANDToken2","culledPoolChains","getCulledPoolChains","newChains","newPath","legInd","leg","culledPath","cullPoolsWithInsufficientLiquidity","getRoutesFromPoolChain","pci","poolChain","cartesianProduct","getOutputSingleHop","pool","getOutputDoubleHop","poolIndex","c1","a1","c2","b2","getOutputFromRoute","eq","output","getOptOutputVec","getBestOptInputAndOutput","rawDict","outputRaw","inputRaw","res1","res2","v","bv1","bv2","input","getBestOptimalAllocationsAndOutputs","maxPathLength","getPathsFromPools","outputs","inputOutput","getHopActionsFromRoutes","hops","hop","allRoutes","allNodeRoutes","totalInputAmount","allAllocations","middleTokenAllocation","getActionListFromRoutesAndAllocations","getSmartRouteSwapActions","numberOfRoutesLimit","MAX_NUMBER_PARALLEL_POOLS","decimalsCulledPoolIds","filter","resDict","sortedIndexValues","argsort","topIndices","slice","reducedRoutes","reducedNodeRoutes","ind","currentBestOutput","bestAllocations","bestNodeRoutes","bestRoutes","parallelNodeRoutes","parallelRoutes","currentNodeRoute","bestRoutesAreParallel","filteredAllocationsAndOutputs","parallellAllocations","parallelOutputs","sortIndices","filteredParallelRoutes","filteredParallelNodeRoutes","parallelOutput","canHaveTwoRoutes","route1","route2","nodeRoute1","nodeRoute2","route1PoolIds","route2PoolIds","sharePool","route1PoolId","has","currentRoutes","currentNodeRoutes","filteredAllocations","filteredOutputs","totalOutput","allSortedIndices","sortedIndices","filteredRoutes","filteredNodeRoutes","index","sharedRoute","allFilteredRoutes","allFilteredNodeRoutes","firstRoute","firstRoutePoolIds","allFilteredRouteIds","secondRoute","stringAllo","actions","hopInputTokenMeta","hopOutputTokenMeta","hopOutputTokenDecimals","expectedHopOutput","decimalEstimate","pow","status","t","estimate","gamma_bps","partialAmountIn","supplies","token0_ref_price","token0_price","Dex","token","routeInputToken","routeOutputToken","overallPriceImpact","x","calculateSmartRouteV2PriceImpact","action","deltaY","inputTokenMeta","deltaX","R","P","totalAllocations","weights","weight","routeMarketPrice","num1","denom1","num2","denom2","priceImpact","decor","arr","undecor","decorated","token1","token2","cullZeroLiquidityPools","filteredPools","getLiqudityOfPoolsFromList","liquidities","poolInd","amounts","poolBigAmounts","liquidity","getNormalizedLiquiditiesFromList","maxLiq","bigMax","normalizedLiquidities","arrayOfBigs","maxElem","val","thresh","normLiq","flatMap","e","flat","addEdge","g","edge","src","dst","addEdges","edgeList","deleteEdge","gNew","e1","e2","deleteNode","node","nodeInd","nodeNow","dijkstra","graph","solutions","dist","parent","nearest","Infinity","ndist","adj","concat","shortestPath","ignore_nodes","ignore_edges","gTemp","edgeInd","edgeNow","solution","unshift","PathBuffer","sortedpaths","len","cost","arrayContains","pop","shift","splice","arrayEquals","isArray","obj","obj_json","itemInd","source","target","listA","listB","prev_path","sol","root","root_length","edgeToIgnore","spur","getKShortestPaths","gen","next","getGraphFromPoolList","poolList","transitions","stableSmart","smartRouteActions","getExpectedOutputFromActionsORIG","PoolMode","getSimplePoolEstimate","tokenIn","tokenOut","amount_with_fee","in_balance","out_balance","getStablePoolEstimate","getStablePoolDecimal","amountOut","isNaN","toPrecision","dyOut","noFeeAmountOut","singlePoolSwap","simplePools","stablePools","parsedAmountIn","simplePoolsThisPair","isStablePool","estimatesSimplePool","stablePoolThisPair","sp","estimatesStablePool","find","maxSimplePoolEstimate","undefined","maxBy","maxStablePoolEstimate","getStablePoolsThisPair","getPoolsByTokens","getPoolEstimate","stablePoolDetail","getHybridStableSmart","stablePoolsDetail","isStablePoolToken","stablePoolsDetailById","pools1","pools2","pools1Right","pools2Right","candidatePools","otherStables","otherStable","stablePoolsThisPair","tmpPools","tobeAddedPools","middleTokens","p2s","cp","tokensMedata","BestPoolPair","poolPair","stablePoolDetailThisPair","spd","tmpPool1","tmpPool2","tokenMidId","tokenMidMeta","estimate1","SMART","estimate2","bestPool","STABLE","pool1","pool2","estimateSwap","options","ONLY_ZEROS","test","enableSmartRouting","singleRouteEstimate","PARALLEL","inputPools","poolFormatter","simplePoolSmartRoutingActions","simplePoolSmartRoutingEstimate","hybridSmartRoutingRes","hybridSmartRoutingEstimate","gte","parsePool","shareSupply","shares_total_supply","tvl","pool_kind","shares","poolId","minAmountOut","isInteger","ceil","convertToPercentDecimal","percent","math","percentOf","percentLess","notation","getGas","BN","getAmount","number","wholeStr","substring","fractionStr","padStart","replace","wholePart","fracPart","padEnd","strParam","flag","sysbol","negative","match","basis","ifFraction","formatWithCommas","pattern","precision","withCommas","atLeastOne","whole","decimal","str","lastIndexOf","transformTransactions","transactions","parsedTransactions","signerId","fc","type","params","toNumber","deposit","WalletSelectorTransactions","separateRoutes","curRoute","calculateExchangeRate","to","getAvgFee","estimates","forEach","getAccountName","network","niceAccountId","symbolsArr","multiply","factor1","factor2","toInternationalCurrencySystemLongString","labelValue","percentOfBigNumber","valueBig","percentBig","toRealSymbol","blackList","charAt","toUpperCase","calculateFeeCharge","total","calculateFeePercent","getExpectedOutputFromSwapTodos","calculateAmountReceived","big_in_balance","big_out_balance","constant_product","new_in_balance","new_out_balance","tokenOutReceived","calculateMarketPrice","cur_in_balance","cur_out_balance","calculateSmartRoutingPriceImpact","tokenInAmount","swapTodos","tokenMid","isPool1StablePool","isPool2StablePool","marketPrice1","marketPrice2","generalMarketPrice","tokenMidReceived","formattedTokenMidReceived","stableOutPool2","stablePool2","stableOut","newMarketPrice","PriceImpact","calcStableSwapPriceImpact","marketPrice","calculatePriceImpact","finalMarketPrice","separatedReceivedAmount","finalTokenOutReceived","calculateSmartRoutesV2PriceImpact","tokenInPara","priceImpactForRoutes","readablePartialAmountIn","rawRes","getPriceImpact","PriceImpactValue","priceImpactValueSmartRouting","priceImpactValueSmartRoutingV2","subtraction","initialValue","toBeSubtract","getPoolAllocationPercents","partialAmounts","ps","fill","sortedAmount","sortBy","minIndexes","minIndex","finalPIndex","isMobile","screen","width","divide","getMax","minNearAmountLeftForGasFees","String","isValidSlippageTolerance","getPointByPrice","pointDelta","price","decimalRate","noNeedSlot","point","log","point_int","point_int_slot","floor","feeToPointDelta","priceToPoint","amountA","amountB","decimal_price_A_by_B","undecimal_price_A_by_B","pointToPrice","undecimal_price","registerAccountOnToken","registration_only","instantSwap","slippageTolerance","referralId","registerToken","tokenRegistered","formatNearAmount","actionsList","allSwapsTokens","swapTokens","token_in","token_out","amount_in","min_amount_out","receiver_id","force","referral_id","DEFAULT_PAGE_LIMIT","BLACK_TOKEN_LIST","getRatedPoolDetail","pool_info","getUnRatedPoolDetail","getDegenPoolDetail","getStablePools","allSettled","getPool","getPoolByIds","pool_ids","getRefPools","page","perPage","from_index","limit","poolData","rawPool","fetchAllPools","totalPools","pages","unRatedPools","ratedPools","ThemeContext","createContext","ThemeContextProvider","customTheme","children","useState","theme","setTheme","useEffect","React","Provider","estimateValidator","totalPartialAmountIn","useAllTokens","setTokens","tokensLoading","setTokensLoading","fetchTokens","useTokensIndexer","defaultTokenList","tokenLoading","setTokenLoading","getTokensList","whiteList","globalWhiteListTokens","parsedTokens","newList","useRefPools","refreshTrigger","allPools","setAllPools","poolFetchingState","setPoolFetchingState","allStablePools","setAllStablePools","useSwap","onSwap","setEstimates","canSwap","setCanSwap","swapError","setSwapError","setAmountOut","isEstimating","setIsEstimating","forceEstimate","setForceEstimate","useTokenBalances","balances","updateTokenBalance","tokenInBalance","useMemo","tokenOutBalance","rate","makeSwap","transactionsRef","nearDepositAmount","minStorageBalance","outEstimate","bigEstimate","curEstimate","setTimeout","tokensToUpdate","getEstimate","expectAmountOut","estimateValidationPass","TokenPriceContext","useTokenPriceList","tokenPriceList","setTokenPriceList","TokenPriceContextProvider","setBalances","useCallback","updatedTokensBalancesMap","prevState","initTokenBalances","validTokens","interval","setInterval","clearInterval","textColor","displayValue","tokenInInfo","className","SmartRouteV2","tokensRaw","useContext","ParaTokenFrom","style","marginRight","Icon","alt","height","flexShrink","Hub","position","bottom","ArrowRight","DetailView","minReceived","storagedOpen","showDetail","setShowDetail","isRateReverse","setIsRateReverse","tokensPerRoute","swap","identicalRoutes","hub","percents","priceImpactDisplay","displayRate","revertRate","revertDisplayRate","color","cursor","onClick","removeItem","FiChevronDown","FiChevronUp","RiExchangeFill","size","marginLeft","border","flexDirection","alignItems","justifyContent","RouterIcon","whiteSpace","minWidth","key","HalfAndMaxAmount","max","onChangeAmount","halfValue","hoverHalf","setHoverHalf","hoverMax","setHoverMax","background","onMouseEnter","onMouseLeave","half","DECIMAL_POINT","ALLOWED_KEYS","isValidInput","decimalPointsAmount","char","TokenAmount","props","reloading","onSelectToken","onForceUpdate","ref","useRef","hoverSelect","setHoverSelect","handleChange","current","setCustomValidity","curMax","userSelect","RiRefreshLine","onWheel","blur","placeholder","onChange","disabled","marginBottom","textAlign","fontSize","SlippageSelector","onChangeSlippageTolerance","setShowSlip","invalid","setInValid","event","closest","document","addEventListener","removeEventListener","stopPropagation","paddingBottom","required","preventDefault","padding","IoWarning","StarToken","onDelete","hoverIcon","setHoverIcon","hoverClose","setHoverClose","top","right","boxShadow","IoCloseOutline","stroke","Token","isSticky","onClickPin","setHoverIndex","hoverIndex","displayBalance","hoverOutLink","setHoverOutLink","hoverPin","setHoverPin","HiOutlineExternalLink","marginTop","open","AiFillPushpin","AiOutlinePushpin","TokenListTable","starList","setStarList","currentSort","setCurrentSort","tokenSorting","b1","borderBottom","TiArrowSortedUp","TiArrowSortedDown","TokenSelector","onSelect","onClose","searchValue","setSearchValue","handleSearch","storagedStartList","DEFAULT_START_TOKEN_LIST","newStarList","starToken","tableListFilter","searchValueLower","toLowerCase","FiChevronLeft","FaSearch","evt","Slider","showSlip","setHover","viewBox","xmlns","fillRule","clipRule","RefIcon","Loading","cx","cy","strokeWidth","strokeLinecap","Warning","y1","x2","y2","Success","left","gradientUnits","stopColor","Notification","state","tx","detail","setSwapState","notificationStatus","isClosed","isWaitingForConfirmation","isFailure","isSuccess","href","textDecoration","rel","fontWeight","AccountButton","onDisConnect","hoverAccount","setHoverAccount","SwapWidget","connection","transactionState","onConnect","defaultTokenIn","defaultTokenOut","darkMode","curTheme","STORAGED_TOKEN_IN","STORAGED_TOKEN_OUT","isSignedInProp","isSignedIn","setTokenIn","handleSetTokenIn","handleSetTokenOut","setTokenOut","widgetRoute","setWidgetRoute","setAmountIn","setSlippageTolerance","formattedSlippageTolerance","formatted","setRreshTrigger","defaultIn","defaultOut","handleSubmit","setState","canSubmit","tokensLoaded","onSubmit","CgArrowsExchangeAltV","paddingTop","TiWarning","message","opacity","display","DefaultTestnetTokenList","spec","reference","reference_hash","DefaultMainnetTokenList","getDefaultTokenList","DCL_POOL_SPLITER","DCLSwap","Swap","SwapByOutput","LimitOrderWithSwap","SwapByStopPoint","swapInfo","output_token","min_output_amount","client_id","output_amount","buy_token","DCLRegistered","new_point","registered","quote","input_amount","input_token","list_user_assets","DCLSwapByInputOnBestPool","bestEstimate","bestFee","quote_by_output","list_history_orders","list_active_orders","get_order","find_order","cancel_order","order","remain_amount","claim_order","get_pointorder_range","left_point","right_point"],"mappings":"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"}
1
+ {"version":3,"file":"ref-sdk.esm.js","sources":["../src/constant.ts","../src/stable-swap.ts","../src/swap-widget/constant.ts","../src/metaIcons.ts","../src/indexer.ts","../src/v1-swap/parallelSwapLogic.ts","../src/v1-swap/smartRoutingLogic.js","../src/v1-swap/swap.ts","../src/utils.ts","../src/near.ts","../src/ref.ts","../src/dcl-swap/dcl-pool.ts","../src/error.ts","../src/v1-swap/instantSwap.ts","../src/v1-swap/pool.ts","../src/swap-widget/state.tsx","../node_modules/style-inject/dist/style-inject.es.js","../src/swap-widget/components.tsx","../src/swap-widget/index.tsx","../src/swap-widget/defaultTokenList.ts","../src/dcl-swap/swap.ts","../src/dcl-swap/limit-order.ts"],"sourcesContent":["import { TokenMetadata } from './types';\n\nexport const FEE_DIVISOR = 10000;\nexport const DEFAULT_SLIPPAGE_TOLERANCE = '0.5';\nexport const STABLE_LP_TOKEN_DECIMALS = 18;\nexport const RATED_POOL_LP_TOKEN_DECIMALS = 24;\nexport const STORAGE_TO_REGISTER_WITH_MFT = '0.1';\n//0.0125 NEAR\nexport const FT_MINIMUM_STORAGE_BALANCE_LARGE = '12500000000000000000000';\nexport const ONE_YOCTO_NEAR = '0.000000000000000000000001';\nlet ENV: string | undefined = '';\nlet INDEXER_URL: string | undefined = '';\nlet NODE_URL: string | undefined = '';\nexport function getConfig(\n env: string | undefined = ENV ||\n process.env.NEAR_ENV ||\n process.env.REACT_APP_REF_SDK_ENV,\n indexerUrl: string | undefined = INDEXER_URL,\n nodeUrl: string | undefined = ''\n) {\n ENV = env;\n INDEXER_URL = indexerUrl;\n NODE_URL = nodeUrl;\n switch (env) {\n case 'mainnet':\n return {\n networkId: 'mainnet',\n nodeUrl: nodeUrl || 'https://rpc.mainnet.near.org',\n walletUrl: 'https://wallet.near.org',\n WRAP_NEAR_CONTRACT_ID: 'wrap.near',\n REF_FI_CONTRACT_ID: 'v2.ref-finance.near',\n REF_TOKEN_ID: 'token.v2.ref-finance.near',\n indexerUrl: indexerUrl || 'https://indexer.ref.finance',\n explorerUrl: 'https://nearblocks.io',\n REF_DCL_SWAP_CONTRACT_ID: 'dclv2.ref-labs.near',\n };\n case 'testnet':\n return {\n networkId: 'testnet',\n nodeUrl: nodeUrl || 'https://rpc.testnet.near.org',\n walletUrl: 'https://wallet.testnet.near.org',\n indexerUrl: indexerUrl || 'https://testnet-indexer.ref-finance.com',\n WRAP_NEAR_CONTRACT_ID: 'wrap.testnet',\n REF_FI_CONTRACT_ID: 'ref-finance-101.testnet',\n REF_TOKEN_ID: 'ref.fakes.testnet',\n explorerUrl: 'https://testnet.nearblocks.io',\n REF_DCL_SWAP_CONTRACT_ID: 'dclv2.ref-dev.testnet',\n };\n case 'dev':\n return {\n networkId: 'testnet',\n nodeUrl: nodeUrl || 'https://rpc.testnet.near.org',\n walletUrl: 'https://wallet.testnet.near.org',\n indexerUrl: indexerUrl || 'https://dev-indexer.ref-finance.com',\n WRAP_NEAR_CONTRACT_ID: 'wrap.testnet',\n REF_FI_CONTRACT_ID: 'exchange.ref-dev.testnet',\n REF_TOKEN_ID: 'ref.fakes.testnet',\n explorerUrl: 'https://testnet.nearblocks.io',\n REF_DCL_SWAP_CONTRACT_ID: 'refv2-dev.ref-dev.testnet',\n };\n default:\n return {\n networkId: 'mainnet',\n nodeUrl: nodeUrl || 'https://rpc.mainnet.near.org',\n walletUrl: 'https://wallet.near.org',\n REF_FI_CONTRACT_ID: 'v2.ref-finance.near',\n WRAP_NEAR_CONTRACT_ID: 'wrap.near',\n REF_TOKEN_ID: 'token.v2.ref-finance.near',\n indexerUrl: indexerUrl || 'https://indexer.ref.finance',\n explorerUrl: 'https://nearblocks.io',\n REF_DCL_SWAP_CONTRACT_ID: 'dclv2.ref-labs.near',\n };\n }\n}\n\nexport let config = getConfig();\n\nexport let REF_FI_CONTRACT_ID = config.REF_FI_CONTRACT_ID;\n\nexport let WRAP_NEAR_CONTRACT_ID = config.WRAP_NEAR_CONTRACT_ID;\n\nexport let REF_TOKEN_ID = config.REF_TOKEN_ID;\n\nexport let WNEAR_META_DATA: TokenMetadata = {\n id: WRAP_NEAR_CONTRACT_ID,\n name: 'wNEAR',\n symbol: 'wNEAR',\n decimals: 24,\n icon: 'https://assets.ref.finance/images/w-NEAR-no-border.png',\n};\n\nexport let REF_META_DATA = {\n decimals: 18,\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='16 24 248 248' style='background: %23000'%3E%3Cpath d='M164,164v52h52Zm-45-45,20.4,20.4,20.6-20.6V81H119Zm0,18.39V216h41V137.19l-20.6,20.6ZM166.5,81H164v33.81l26.16-26.17A40.29,40.29,0,0,0,166.5,81ZM72,153.19V216h43V133.4l-11.6-11.61Zm0-18.38,31.4-31.4L115,115V81H72ZM207,121.5h0a40.29,40.29,0,0,0-7.64-23.66L164,133.19V162h2.5A40.5,40.5,0,0,0,207,121.5Z' fill='%23fff'/%3E%3Cpath d='M189 72l27 27V72h-27z' fill='%2300c08b'/%3E%3C/svg%3E%0A\",\n id: REF_TOKEN_ID,\n name: 'Ref Finance Token',\n symbol: 'REF',\n};\n\nexport const NEAR_META_DATA: TokenMetadata = {\n id: 'NEAR',\n name: 'NEAR',\n symbol: 'NEAR',\n decimals: 24,\n icon:\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA2AAAANgCAIAAADF8JzzAAAACXBIWXMAABYlAAAWJQFJUiTwAAAgAElEQVR4nO3d7VXb2rqw4eQd57/cgZ0KLCqwVwWIChAVYCrAqQBTgUUFERVEVBBTwTYdmArWO/by3uzMfBA+bHlK87r+nTP2WBFSjO/o8SN//Pvvvz8AAMB//T9nAgCA7wlEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAAC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ICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAICAQAQAICAQAQAICEQAAAICEQCAgEAEACAgEAEACAhEAAACAhEAgIBABAAgIBABAAgIRAAAAgIRAID/+fDhw/8H0I0VimXUJpsAAAAASUVORK5CYII=',\n};\n\nexport const TokenLinks = {\n NEAR: 'https://awesomenear.com/near-protocol',\n wNEAR: 'https://awesomenear.com/near-protocol',\n REF: 'https://awesomenear.com/ref-finance',\n OCT: 'https://awesomenear.com/octopus-network',\n PARAS: 'https://awesomenear.com/paras',\n SKYWARD: 'https://awesomenear.com/skyward-finance',\n FLX: 'https://awesomenear.com/flux',\n PULSE: 'https://awesomenear.com/pulse',\n DBIO: 'https://awesomenear.com/debio-network',\n MYRIA: 'https://awesomenear.com/myriad-social',\n PXT: 'https://awesomenear.com/cryptoheroes',\n HAPI: 'https://awesomenear.com/hapi',\n OIN: 'https://awesomenear.com/oin-finance',\n ABR: 'https://awesomenear.com/allbridge',\n '1MIL': 'https://awesomenear.com/1millionnfts',\n MARMAJ: 'https://awesomenear.com/marmaj-foundation',\n marmaj: 'https://awesomenear.com/marmaj-foundation',\n USN: 'https://awesomenear.com/decentral-bank',\n '1INCH': 'https://awesomenear.com/1inch-network',\n GRT: 'https://awesomenear.com/the-graph',\n LINK: 'https://awesomenear.com/chainlink',\n Cheddar: 'https://awesomenear.com/cheddar-farm',\n AURORA: 'https://awesomenear.com/aurora-dev',\n $META: 'https://awesomenear.com/meta-pool',\n UMINT: 'https://awesomenear.com/youminter',\n UTO: 'https://awesomenear.com/secret-skellies-society',\n DEIP: 'https://awesomenear.com/deip',\n WOO: 'https://awesomenear.com/woo-dex',\n LINEAR: 'https://awesomenear.com/linear-protocol',\n PEM: 'https://awesomenear.com/pembrock-finance',\n ATO: 'https://awesomenear.com/atocha-protocol',\n SEAT: 'https://awesomenear.com/seatlab-nft',\n FAR: 'https://awesomenear.com/few-and-far',\n BSTN: 'https://awesomenear.com/bastion',\n BRRR: 'https://awesomenear.com/burrow',\n XNL: 'https://awesomenear.com/chronicle',\n KSW: 'https://awesomenear.com/killswitch-finance',\n STNEAR: 'https://awesomenear.com/meta-pool',\n NearX: 'https://awesomenear.com/stader',\n SD: 'https://awesomenear.com/stader',\n DISC: 'https://awesomenear.com/discovol',\n} as Record<string, string>;\n\nexport const CONSTANT_D = 1.0001;\n\nexport const POINTLEFTRANGE = -800000;\nexport const POINTRIGHTRANGE = 800000;\n\nexport const switchEnv = () => {\n config = getConfig();\n REF_FI_CONTRACT_ID = config.REF_FI_CONTRACT_ID;\n WRAP_NEAR_CONTRACT_ID = config.WRAP_NEAR_CONTRACT_ID;\n REF_TOKEN_ID = config.REF_TOKEN_ID;\n REF_META_DATA = {\n decimals: 18,\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='16 24 248 248' style='background: %23000'%3E%3Cpath d='M164,164v52h52Zm-45-45,20.4,20.4,20.6-20.6V81H119Zm0,18.39V216h41V137.19l-20.6,20.6ZM166.5,81H164v33.81l26.16-26.17A40.29,40.29,0,0,0,166.5,81ZM72,153.19V216h43V133.4l-11.6-11.61Zm0-18.38,31.4-31.4L115,115V81H72ZM207,121.5h0a40.29,40.29,0,0,0-7.64-23.66L164,133.19V162h2.5A40.5,40.5,0,0,0,207,121.5Z' fill='%23fff'/%3E%3Cpath d='M189 72l27 27V72h-27z' fill='%2300c08b'/%3E%3C/svg%3E%0A\",\n id: REF_TOKEN_ID,\n name: 'Ref Finance Token',\n symbol: 'REF',\n };\n WNEAR_META_DATA = {\n id: WRAP_NEAR_CONTRACT_ID,\n name: 'wNEAR',\n symbol: 'wNEAR',\n decimals: 24,\n icon: 'https://assets.ref.finance/images/w-NEAR-no-border.png',\n };\n return {\n config,\n REF_FI_CONTRACT_ID,\n WRAP_NEAR_CONTRACT_ID,\n REF_TOKEN_ID,\n REF_META_DATA,\n WNEAR_META_DATA,\n };\n};\n","import { StablePool } from './types';\nimport { FEE_DIVISOR } from './constant';\n\nimport {\n toReadableNumber,\n toNonDivisibleNumber,\n scientificNotationToString,\n} from './utils';\n\nimport Big from 'big.js';\n\nimport _ from 'lodash';\n\nconst tradeFee = (amount: number, trade_fee: number) => {\n return (amount * trade_fee) / FEE_DIVISOR;\n};\n\nexport const calc_d = (amp: number, c_amounts: number[]) => {\n const token_num = c_amounts.length;\n const sum_amounts = _.sum(c_amounts);\n let d_prev = 0;\n let d = sum_amounts;\n for (let i = 0; i < 256; i++) {\n let d_prod = d;\n for (let c_amount of c_amounts) {\n d_prod = (d_prod * d) / (c_amount * token_num);\n }\n d_prev = d;\n const ann = amp * token_num ** token_num;\n const numerator = d_prev * (d_prod * token_num + ann * sum_amounts);\n const denominator = d_prev * (ann - 1) + d_prod * (token_num + 1);\n d = numerator / denominator;\n if (Math.abs(d - d_prev) <= 1) break;\n }\n return d;\n};\n\nexport const calc_y = (\n amp: number,\n x_c_amount: number,\n current_c_amounts: number[],\n index_x: number,\n index_y: number\n) => {\n const token_num = current_c_amounts.length;\n const ann = amp * token_num ** token_num;\n const d = calc_d(amp, current_c_amounts);\n let s = x_c_amount;\n let c = (d * d) / x_c_amount;\n for (let i = 0; i < token_num; i++) {\n if (i !== index_x && i !== index_y) {\n s += current_c_amounts[i];\n c = (c * d) / current_c_amounts[i];\n }\n }\n c = (c * d) / (ann * token_num ** token_num);\n const b = d / ann + s;\n let y_prev = 0;\n let y = d;\n for (let i = 0; i < 256; i++) {\n y_prev = y;\n const y_numerator = y ** 2 + c;\n const y_denominator = 2 * y + b - d;\n y = y_numerator / y_denominator;\n if (Math.abs(y - y_prev) <= 1) break;\n }\n\n return y;\n};\n\nexport const calc_swap = (\n amp: number,\n in_token_idx: number,\n in_c_amount: number,\n out_token_idx: number,\n old_c_amounts: number[],\n trade_fee: number\n) => {\n const y = calc_y(\n amp,\n in_c_amount + old_c_amounts[in_token_idx],\n old_c_amounts,\n in_token_idx,\n out_token_idx\n );\n const dy = old_c_amounts[out_token_idx] - y;\n const fee = tradeFee(dy, trade_fee);\n const amount_swapped = dy - fee;\n return [amount_swapped, fee, dy];\n};\n\nexport const getSwappedAmount = (\n tokenInId: string,\n tokenOutId: string,\n amountIn: string,\n stablePool: StablePool,\n STABLE_LP_TOKEN_DECIMALS: number\n) => {\n const amp = stablePool.amp;\n const trade_fee = stablePool.total_fee;\n\n // depended on pools\n const in_token_idx = stablePool.token_account_ids.findIndex(\n id => id === tokenInId\n );\n const out_token_idx = stablePool.token_account_ids.findIndex(\n id => id === tokenOutId\n );\n\n const rates = stablePool?.degens\n ? stablePool.degens.map(r => toReadableNumber(STABLE_LP_TOKEN_DECIMALS, r))\n : stablePool.rates.map(r => toReadableNumber(STABLE_LP_TOKEN_DECIMALS, r));\n\n const base_old_c_amounts = stablePool.c_amounts.map(amount =>\n toReadableNumber(STABLE_LP_TOKEN_DECIMALS, amount)\n );\n\n const old_c_amounts = base_old_c_amounts\n .map((amount, i) =>\n toNonDivisibleNumber(\n STABLE_LP_TOKEN_DECIMALS,\n scientificNotationToString(\n new Big(amount || 0).times(new Big(rates[i])).toString()\n )\n )\n )\n .map(amount => Number(amount));\n\n const in_c_amount = Number(\n toNonDivisibleNumber(\n STABLE_LP_TOKEN_DECIMALS,\n scientificNotationToString(\n new Big(amountIn).times(new Big(rates[in_token_idx])).toString()\n )\n )\n );\n\n const [amount_swapped, fee, dy] = calc_swap(\n amp,\n in_token_idx,\n in_c_amount,\n out_token_idx,\n old_c_amounts,\n trade_fee\n );\n\n return [\n amount_swapped / Number(rates[out_token_idx]),\n fee,\n dy / Number(rates[out_token_idx]),\n ];\n};\n","import { getConfig } from '../constant';\nexport const REF_WIDGET_STAR_TOKEN_LIST_KEY =\n 'REF_WIDGET_STAR_TOKEN_LIST_VALUE';\n\nexport const REF_WIDGET_ALL_TOKENS_LIST_KEY =\n 'REF_WIDGET_ALL_TOKENS_LIST_VALUE';\nexport const REF_WIDGET_ALL_LIGHT_TOKENS_LIST_KEY =\n 'REF_WIDGET_ALL_LIGHT_TOKENS_LIST_VALUE';\n\nexport const REF_WIDGET_SWAP_IN_KEY = 'REF_WIDGET_SWAP_IN_VALUE';\n\nexport const REF_WIDGET_SWAP_OUT_KEY = 'REF_WIDGET_SWAP_OUT_VALUE';\n\nexport const REF_WIDGET_SWAP_DETAIL_KEY = 'REF_WIDGET_SWAP_DETAIL_VALUE';\n\nexport const DEFAULT_START_TOKEN_LIST_TESTNET = [\n 'wrap.testnet',\n 'usdtt.fakes.testnet',\n 'usdt.fakes.testnet',\n 'ref.fakes.testnet',\n 'usdn.testnet',\n 'eth.fakes.testnet',\n];\n\nexport const DEFAULT_START_TOKEN_LIST_MAINNET = [\n 'wrap.near',\n 'usdt.tether-token.near',\n 'dac17f958d2ee523a2206206994597c13d831ec7.factory.bridge.near',\n 'token.v2.ref-finance.near',\n 'usn',\n 'aurora',\n 'token.sweat',\n];\n\nexport interface Theme {\n container: string; // container background\n buttonBg: string; // button background\n primary: string; // primary theme color\n secondary: string; // secondary theme color\n borderRadius: string; // border radius\n fontFamily: string; // font family\n hover: string; // hovering color\n active: string; // active color\n secondaryBg: string; // secondary background color\n borderColor: string; // border color\n iconDefault: string; // default icon color\n iconHover: string; // icon hovering color\n refIcon?: string; // ref icon color\n}\n\nexport const defaultTheme: Theme = {\n container: '#FFFFFF',\n buttonBg: '#00C6A2',\n primary: '#000000',\n secondary: '#7E8A93',\n borderRadius: '4px',\n fontFamily: 'sans-serif',\n hover: 'rgba(126, 138, 147, 0.2)',\n active: 'rgba(126, 138, 147, 0.2)',\n secondaryBg: '#F7F7F7',\n borderColor: 'rgba(126, 138, 147, 0.2)',\n iconDefault: 'rgba(126, 138, 147, 1)',\n iconHover: 'rgba(62, 62, 62, 1)',\n};\n\nexport const defaultDarkModeTheme: Theme = {\n container: '#26343E',\n buttonBg: '#00C6A2',\n primary: '#FFFFFF',\n secondary: '#7E8A93',\n borderRadius: '4px',\n fontFamily: 'sans-serif',\n hover: 'rgba(126, 138, 147, 0.2)',\n active: 'rgba(126, 138, 147, 0.2)',\n secondaryBg: 'rgba(0, 0, 0, 0.2)',\n borderColor: 'rgba(126, 138, 147, 0.2)',\n iconDefault: 'rgba(126, 138, 147, 1)',\n iconHover: 'rgba(183, 201, 214, 1)',\n refIcon: 'white',\n};\n","const icons: { [tokenId: string]: string } = {\n '4691937a7508860f876c9c0a2a617e7d9e945d4b.factory.bridge.near':\n 'https://assets.ref.finance/images/woo-wtrue.png',\n 'wrap.near':\n 'data:image/png;base64,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',\n 'wrap.testnet':\n 'data:image/png;base64,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',\n '6b175474e89094c44da98b954eedeac495271d0f.factory.bridge.near':\n 'https://assets.ref.finance/images/4943.png',\n 'berryclub.ek.near': 'https://assets.ref.finance/images/banana.png',\n 'dac17f958d2ee523a2206206994597c13d831ec7.factory.bridge.near':\n 'https://assets.ref.finance/images/825.png',\n '1f9840a85d5af5bf1d1762f925bdaddc4201f984.factory.bridge.near':\n 'https://assets.ref.finance/images/7083.png',\n '514910771af9ca656af840dff83e8264ecf986ca.factory.bridge.near':\n 'https://assets.ref.finance/images/1975.png',\n 'a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48.factory.bridge.near':\n 'https://assets.ref.finance/images/3408.png',\n '2260fac5e5542a773aa44fbcfedf7c193bc2c599.factory.bridge.near':\n 'https://assets.ref.finance/images/3717.png',\n '7fc66500c84a76ad7e9c93437bfc5ac33e2ddae9.factory.bridge.near':\n 'https://assets.ref.finance/images/7278.png',\n 'a0b73e1ff0b80914ab6fe0444e65848c4c34450b.factory.bridge.near':\n 'https://assets.ref.finance/images/3635.png',\n '50d1c9771902476076ecfc8b2a83ad6b9355a4c9.factory.bridge.near':\n 'https://assets.ref.finance/images/4195.png',\n '4fabb145d64652a948d72533023f6e7a623c7c53.factory.bridge.near':\n 'https://assets.ref.finance/images/4687.png',\n '6f259637dcd74c767781e37bc6133cd6a68aa161.factory.bridge.near':\n 'https://assets.ref.finance/images/2502.png',\n '6b3595068778dd592e39a122f4f5a5cf09c90fe2.factory.bridge.near':\n 'https://assets.ref.finance/images/6758.png',\n 'c011a73ee8576fb46f5e1c5751ca3b9fe0af2a6f.factory.bridge.near':\n 'https://assets.ref.finance/images/2586.png',\n 'c944e90c64b2c07662a292be6244bdf05cda44a7.factory.bridge.near':\n 'https://assets.ref.finance/images/6719.png',\n '9f8f72aa9304c8b593d555f12ef6589cc3a579a2.factory.bridge.near':\n 'https://assets.ref.finance/images/1518.png',\n '0bc529c00c6401aef6d220be8c6ea1667f6ad93e.factory.bridge.near':\n 'https://assets.ref.finance/images/5864.png',\n 'c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2.factory.bridge.near':\n 'https://assets.ref.finance/images/2396.png',\n '0316eb71485b0ab14103307bf65a021042c6d380.factory.bridge.near':\n 'https://assets.ref.finance/images/6941.png',\n '111111111117dc0aa78b770fa6a738034120c302.factory.bridge.near':\n 'https://assets.ref.finance/images/8104.png',\n 'f5cfbc74057c610c8ef151a439252680ac68c6dc.factory.bridge.near':\n 'https://assets.ref.finance/images/55sGoBm.png',\n 'de30da39c46104798bb5aa3fe8b9e0e1f348163f.factory.bridge.near':\n 'https://assets.ref.finance/images/10052.png',\n 'a4ef4b0b23c1fc81d3f9ecf93510e64f58a4a016.factory.bridge.near':\n 'https://assets.ref.finance/images/4222.png',\n 'token.cheddar.near': 'https://assets.ref.finance/images/cheddar.png',\n 'farm.berryclub.ek.near': 'https://assets.ref.finance/images/cucumber.png',\n 'd9c2d319cd7e6177336b0a9c93c21cb48d84fb54.factory.bridge.near':\n 'https://assets.ref.finance/images/HAPI.png',\n};\n\nexport default icons;\n","import { config, WRAP_NEAR_CONTRACT_ID, NEAR_META_DATA } from './constant';\nimport {\n REF_WIDGET_ALL_TOKENS_LIST_KEY,\n REF_WIDGET_ALL_LIGHT_TOKENS_LIST_KEY,\n} from './swap-widget/constant';\nimport { REPLACE_TOKENS } from './ref';\nimport metaIconDefaults from './metaIcons';\n\nexport const getTokenPriceList = async (): Promise<any> => {\n return await fetch(config.indexerUrl + '/list-token-price', {\n method: 'GET',\n headers: { 'Content-type': 'application/json; charset=UTF-8' },\n })\n .then(res => res.json())\n .then(list => {\n return list;\n });\n};\n\nexport const getTokens = async (reload?: boolean) => {\n const storagedTokens =\n typeof window !== 'undefined' && !reload\n ? localStorage.getItem(REF_WIDGET_ALL_TOKENS_LIST_KEY)\n : null;\n\n return storagedTokens\n ? JSON.parse(storagedTokens)\n : await fetch(config.indexerUrl + '/list-token', {\n method: 'GET',\n headers: { 'Content-type': 'application/json; charset=UTF-8' },\n })\n .then(res => res.json())\n .then(tokens => {\n const newTokens = Object.values(tokens).reduce(\n (acc: any, cur: any, i) => {\n const id = Object.keys(tokens)[i];\n return {\n ...acc,\n [id]: {\n ...cur,\n id,\n icon:\n !cur.icon || REPLACE_TOKENS.includes(id)\n ? metaIconDefaults[id]\n : cur.icon,\n },\n };\n },\n {}\n );\n\n return newTokens;\n })\n .then(res => {\n typeof window !== 'undefined' &&\n !reload &&\n localStorage.setItem(\n REF_WIDGET_ALL_TOKENS_LIST_KEY,\n JSON.stringify(res)\n );\n return res;\n });\n};\nexport const getTokensTiny = async (reload?: boolean) => {\n const storagedTokens =\n typeof window !== 'undefined' && !reload\n ? localStorage.getItem(REF_WIDGET_ALL_LIGHT_TOKENS_LIST_KEY)\n : null;\n\n return storagedTokens\n ? JSON.parse(storagedTokens)\n : await fetch(config.indexerUrl + '/list-token-v2', {\n method: 'GET',\n headers: { 'Content-type': 'application/json; charset=UTF-8' },\n })\n .then(res => res.json())\n .then(tokens => {\n const newTokens = Object.values(tokens).reduce(\n (acc: any, cur: any, i) => {\n const id = Object.keys(tokens)[i];\n return {\n ...acc,\n [id]: {\n ...cur,\n id,\n },\n };\n },\n {}\n );\n\n return newTokens;\n })\n .then(res => {\n typeof window !== 'undefined' &&\n !reload &&\n localStorage.setItem(\n REF_WIDGET_ALL_LIGHT_TOKENS_LIST_KEY,\n JSON.stringify(res)\n );\n return res;\n });\n};\n\nexport const getWhiteListTokensIndexer = async (whiteListIds: string[]) => {\n return await fetch(config.indexerUrl + '/list-token', {\n method: 'GET',\n headers: { 'Content-type': 'application/json; charset=UTF-8' },\n })\n .then(res => res.json())\n .then(res => {\n return whiteListIds.reduce((acc, cur, i) => {\n if (\n !res[cur] ||\n !Object.values(res[cur]) ||\n Object.values(res[cur]).length === 0\n )\n return acc;\n\n return {\n ...acc,\n [cur]: { ...res[cur], id: cur },\n };\n }, {});\n })\n .then(res => {\n return Object.values(res);\n });\n};\n","//@ts-nocheck\nimport Big from 'big.js';\n\nimport { Pool } from '../types';\n\nBig.RM = 0;\nBig.DP = 40;\nBig.NE = -40;\nBig.PE = 40;\n\ninterface FormatedPool extends Pool {\n x?: string;\n y?: string;\n gamma_bps?: Big;\n}\n\n///////////////////////////////\n// Parallel Swap Logic Below //\n///////////////////////////////\n\n/** formatPoolNew\n * This function appends to the existing standard Pool struct and adds attributes that simplify the parallel swap algorithms.\n * Adds attributes \"x\" (for input token reserves in pool), \"y\" (for output token reserves in pool), and \"gamma_bps\" (for 1- fee in bps)\n * Our convention for our algorithm has been to use \"x\" as the input token and \"y\" as the output token.\n * @param pool AMM structure containing reserves of inputToken and outputToken\n * @param inputToken the name of the inputToken being traded in.\n * @param outputToken the name of the outputToken being traded out.\n * @returns newFormatPool\n */\nexport function formatPoolNew(\n pool: Pool,\n inputToken: string,\n outputToken: string\n) {\n let p: FormatedPool = pool;\n let x = p.supplies[inputToken];\n let y = p.supplies[outputToken];\n p['gamma_bps'] = new Big(10000).minus(p.fee);\n p['x'] = x;\n p['y'] = y;\n return p;\n}\n\n/** solveForMuFloat\n * This function takes the set of token pools, the total input of inputToken, and the names of inputToken and outputToken and\n * solves for the Lagrange Multiplier \"mu\". Note that mu must be allowed to be aritrary precision floating point number. Mu will\n * be used in subsequent function calls to determine the best allocations of intputToken to be made per pool.\n * For more detailed math on how this function was derived, please see the white paper:\n * https://github.com/giddyphysicist/ParallelSwapForRefFinance/blob/main/ParallelSwapWhitePaper.pdf\n * @param pools list of pools that contain inputToken and outputToken\n * @param totalDeltaX total allocation (among all pools) being input of inputToken\n * @param inputToken the name of the inputToken being traded in.\n * @param outputToken the name of the outputToken being traded out.\n * @returns mu the lagrange multiplier value calculated for a set of pools and inputToken amount.\n */\nexport function solveForMuFloat(\n pools: Pool[],\n totalDeltaX: string,\n inputToken: string,\n outputToken: string\n) {\n if (pools.length > 0) {\n let numerator = new Big(totalDeltaX);\n let denominator = new Big(0);\n\n for (var i = 0; i < pools.length; i++) {\n let p = formatPoolNew(pools[i], inputToken, outputToken);\n let numAdd = new Big(p.x).times(10000).div(p.gamma_bps);\n numerator = numerator.plus(numAdd);\n let denomAdd = new Big(p.x)\n .times(p.y)\n .div(p.gamma_bps)\n .sqrt()\n .times(100);\n denominator = denominator.plus(denomAdd);\n }\n\n const mu = new Big(numerator).div(denominator);\n return mu;\n } else {\n // console.log('ERROR - could not find pools that satisfy token pair');\n const mu = NaN;\n return mu;\n }\n}\n\n/** calculate_dx_float\n * Once mu has been calculated for a set of pools and total input amount, the next step is\n * determining the total allocation per pool. This function evaluates the amount of input Token to be\n * allocated to the given pool. Note, in our original algorithmic convention, the 'x' variable was for the input token,\n * and the 'y' variable was for the output token. Here, the value dx is the part of the full amount of input token X.\n * Again, the detailed formulae for these operations can be found in the white paper referenced above.\n * @param mu the lagrange multiplier value calculated for a set of pools and inputToken amount.\n * @param pool AMM structure containing reserves of inputToken and outputToken\n * @param inputToken the name of the inputToken being traded in.\n * @param outputToken the name of the outputToken being traded out.\n * @returns dxFloat the allocation amount determined for the given pool\n */\nexport function calculate_dx_float(\n mu: number | Big,\n pool: FormatedPool,\n inputToken: string,\n outputToken: string\n) {\n let p = formatPoolNew(pool, inputToken, outputToken);\n let radical = new Big(p.x).times(p.y).div(p.gamma_bps);\n let dxFloat = new Big(mu)\n .times(100)\n .times(radical.sqrt())\n .minus(new Big(p.x).times(10000).div(p.gamma_bps));\n return dxFloat;\n}\n\n/** calculate_dy_float\n * Once you have an allocation amount for a given pool, you can use the AMM constant-product formula to determine\n * the expected output amount of output Token.\n * Note, here, as earlier, our algorithmic convention uses \"y\" as the output token, and so \"dy\" is the fraction of\n * the total output of output Token, assuming there could be dy contributions from other parallel pools as well.\n * @param dx_float input allocation amount of inputToken for the given pool\n * @param pool a structure representing the reserves and fees for a given pool.\n * @param inputToken the name of the inputToken being traded in.\n * @param outputToken the name of the outputToken being traded out.\n * @returns dyFloat the expected trade out amount out of outputToken\n */\nexport function calculate_dy_float(\n dx_float: number,\n pool: FormatedPool,\n inputToken: string,\n outputToken: string\n) {\n if (dx_float <= 0) {\n return new Big(0);\n }\n let p = formatPoolNew(pool, inputToken, outputToken);\n let dx = new Big(dx_float);\n let denom = new Big(10000).times(p.x).plus(new Big(p.gamma_bps).times(dx));\n let numerator = new Big(p.y).times(dx).times(p.gamma_bps);\n let dyFloat = numerator.div(denom).round();\n return dyFloat;\n}\n\n/** calculateOptimalOutput\n * This is the main function, which calculates optimal values of inputToken to swap into each pool.\n * @param pools list of relevant AMM pools containing inputToken and outputToken\n * @param inputAmount the numeric total amount of inputToken to be traded into the group of swap pools.\n * @param inputToken the name of the inputToken being traded in.\n * @param outputToken the name of the outputToken being traded out.\n * @returns normalizedDxArray an array containing the amount allocations of inputToken per pool in the list of pools.\n */\nexport function calculateOptimalOutput(\n pools: Pool[],\n inputAmount: string,\n inputToken: string,\n outputToken: string\n) {\n let mu = solveForMuFloat(pools, inputAmount, inputToken, outputToken);\n let dxArray: Big[] = [];\n let negativeDxValsFlag = false;\n for (var i = 0; i < pools.length; i++) {\n let pool = formatPoolNew(pools[i], inputToken, outputToken);\n let dx = calculate_dx_float(mu, pool, inputToken, outputToken);\n if (dx.lt(0)) {\n negativeDxValsFlag = true;\n }\n let dxInt = new Big(dx).round();\n dxArray.push(dxInt);\n }\n if (negativeDxValsFlag) {\n dxArray = reducePools(pools, dxArray, inputAmount, inputToken, outputToken);\n }\n let dxArraySum = new Big(0);\n for (var i = 0; i < dxArray.length; i++) {\n dxArraySum = dxArraySum.plus(dxArray[i]);\n }\n let tempAllocationsArray = [];\n for (var i = 0; i < dxArray.length; i++) {\n let ndx = new Big(dxArray[i])\n .times(inputAmount)\n .div(dxArraySum)\n .round();\n tempAllocationsArray.push(ndx);\n }\n let allocationsArray = checkIntegerSumOfAllocations(\n tempAllocationsArray,\n inputAmount\n );\n let normalizedDxArray = [];\n for (var i = 0; i < allocationsArray.length; i++) {\n let ndx = allocationsArray[i];\n normalizedDxArray.push(BigInt(ndx));\n pools[i]['partialAmountIn'] = ndx.toString();\n }\n return normalizedDxArray;\n}\n\n/** reducePools\n * This function is used to implement part of the non-linear slack variables in the lagrange - multiplier\n * solution for parallel swap. Part of what comes out of the math is that sometimes, the optimal allocation for a pool\n * can be negative, which makes no physical sense. When this occurs, that particular pool needs to be flagged and the\n * lagrange constraint applied to force the allocation to be zero.\n * This function takes an already-solved set of pools, input allocation per pool, the total input amount, and the\n * inputToken name and outputToken name, and determines which, if any, allocations need to be set to zero.\n * However, when this occurs, and a pool is essentially ignored from the list, then the calculation for mu must be re-done.\n * So the calculateOptimalOutput function is then called on the reduced set of pools, and if no negative allocation values remain,\n * then the allocations on the reduced set is determined, and values of zero are put in for the 'failed' pools.\n * @param pools list of pools that contain inputToken and outputToken\n * @param dxArray list of input allocation per pool\n * @param inputAmount total amount of inputToken to be traded among the pools\n * @param inputToken the name of the inputToken\n * @param outputToken the name of the outputToken\n * @returns newFullDxVec the new full list of input allocations the same length as dxArray, containing zeros for failed pools.\n */\nexport function reducePools(\n pools: Pool[],\n dxArray: Big[],\n inputAmount: string,\n inputToken: string,\n outputToken: string\n) {\n let goodIndices = [];\n for (var i = 0; i < dxArray.length; i++) {\n let dx = dxArray[i];\n if (dx.gte(0)) {\n goodIndices.push(i);\n }\n }\n if (goodIndices.length < 1) {\n // console.log(\"ERROR OCCURRED -- ALL DX VALUES WERE NEGATIVE\")\n return dxArray;\n }\n let newPools = [];\n for (var j = 0; j < dxArray.length; j++) {\n if (goodIndices.includes(j)) {\n newPools.push(pools[j]);\n }\n }\n let newDxVec = calculateOptimalOutput(\n newPools,\n inputAmount,\n inputToken,\n outputToken\n );\n let goodInd2newdx = {};\n for (var k = 0; k < newDxVec.length; k++) {\n goodInd2newdx[goodIndices[k]] = newDxVec[k];\n }\n let newFullDxVec = [];\n for (var ii = 0; ii < pools.length; ii++) {\n if (goodIndices.includes(ii)) {\n newFullDxVec.push(goodInd2newdx[ii]);\n } else {\n newFullDxVec.push(0);\n }\n }\n return newFullDxVec;\n}\n\nexport function checkIntegerSumOfAllocations(\n allocations: Big[] | string[] | BigInt[],\n totalInput: Big | string | BigInt\n) {\n var totalInput = new Big(totalInput);\n var allocations:\n | Big[]\n | string[]\n | BigInt[] = allocations.map((item: Big | string | BigInt) =>\n new Big(item).round()\n );\n let alloSum = allocations\n .map(item => new Big(item))\n .reduce((a, b) => a.plus(b), new Big(0));\n let offset = totalInput.minus(alloSum);\n //get largest allocation.\n let currMax = new Big(0);\n let currMaxInd = 0;\n for (var i = 0; i < allocations.length; i++) {\n if (allocations[i].gt(currMax)) {\n currMaxInd = i;\n currMax = allocations[i];\n }\n }\n let newAllocations = [];\n for (var j = 0; j < allocations.length; j++) {\n if (j === currMaxInd) {\n newAllocations.push(allocations[j].plus(offset).toString());\n } else {\n newAllocations.push(allocations[j].toString());\n }\n }\n return newAllocations;\n}\n","/* eslint-disable no-undef */\n////////////////////////////////////////////////////////////////////////////\n// SMART ROUTE SWAP LOGIC\n////////////////////////////////////////////////////////////////////////////\nimport Big from 'big.js';\nimport { checkIntegerSumOfAllocations } from './parallelSwapLogic';\n\nimport { TokenMetadata } from '../types';\n\nimport { ftGetTokenMetadata } from '../ref';\n\nimport { percentLess, toNonDivisibleNumber } from '../utils';\nBig.RM = 0;\nBig.DP = 40;\nBig.NE = -40;\nBig.PE = 40;\n\nfunction bisqrt(value) {\n // For some ridiculous reason, the .sqrt() method for Big decimals is extremely slow (~10-20ms),\n // which isn't so bad until you need to use it a bunch of times.\n // Since we're dealing with super large numbers anyway, we can convert the Big decimal number into a BigInt,\n // then run this BigInt Newton iteration square root function instead, and then convert back into a\n // Big number. And it speeds up the operation by a crazy factor, ~10x faster.\n if (value < BigInt(0)) {\n throw 'square root of negative numbers is not supported';\n }\n\n if (value < BigInt(2)) {\n return value;\n }\n\n function newtonIteration(n, x0) {\n const x1 = (n / x0 + x0) >> BigInt(1);\n if (x0 === x1 || x0 === x1 - BigInt(1)) {\n return x0;\n }\n return newtonIteration(n, x1);\n }\n\n return newtonIteration(value, BigInt(1));\n}\n\nfunction getBetaForRoute(route, path) {\n if (!route.length) {\n route = [route];\n }\n if (route.length == 1) {\n let p = route[0];\n var beta = new Big(p.reserves[path[0]]);\n } else if (route.length == 2) {\n let p1 = route[0];\n let p2 = route[1];\n var beta = new Big(p1.reserves[path[0]]).times(\n new Big(p2.reserves[path[1]])\n );\n }\n return beta;\n}\n\nfunction getEpsilonForRoute(route, path) {\n if (!route.length) {\n route = [route];\n }\n if (route.length == 1) {\n // Single Hop case\n let p = route[0];\n let gamma = new Big(10000).minus(new Big(p.fee)).div(new Big(10000));\n var epsilon = Big(gamma);\n } else if (route.length == 2) {\n //Double Hop Case\n let p1 = route[0];\n let p2 = route[1];\n let gamma1 = new Big(10000).minus(new Big(p1.fee)).div(new Big(10000));\n let gamma2 = new Big(10000).minus(new Big(p2.fee)).div(Big(10000));\n var epsilon = new Big(p2.reserves[path[1]])\n .times(new Big(gamma1))\n .plus(new Big(p1.reserves[path[1]]).times(gamma1).times(gamma2));\n }\n return epsilon;\n}\n\nfunction getAlphaForRoute(route, path) {\n if (!route.length) {\n route = [route];\n }\n if (route.length == 1) {\n //console.log('single hop')\n let p = route[0];\n let inputToken = path[0];\n let outputToken = path[1];\n let gamma = new Big(10000).minus(new Big(p.fee)).div(new Big(10000));\n let key1 = p.token1Id;\n let key2 = p.token2Id;\n let val1 = p.token1Supply;\n let val2 = p.token2Supply;\n p['reserves'] = { [key1]: val1, [key2]: val2 };\n var alpha = new Big(p.reserves[inputToken]).times(\n new Big(p.reserves[outputToken]).times(new Big(gamma))\n );\n } else if (route.length == 2) {\n //console.log('double hop')\n let p1 = route[0];\n let p2 = route[1];\n let key11 = p1.token1Id;\n let key12 = p1.token2Id;\n let val11 = p1.token1Supply;\n let val12 = p1.token2Supply;\n p1['reserves'] = { [key11]: val11, [key12]: val12 };\n let key21 = p2.token1Id;\n let key22 = p2.token2Id;\n let val21 = p2.token1Supply;\n let val22 = p2.token2Supply;\n p2['reserves'] = { [key21]: val21, [key22]: val22 };\n let inputToken = path[0];\n let middleToken = path[1];\n let outputToken = path[2];\n let gamma1 = new Big(10000).minus(Big(p1.fee)).div(new Big(10000));\n let gamma2 = new Big(10000).minus(new Big(p2.fee)).div(new Big(10000));\n let alpha1 = new Big(p1.reserves[inputToken])\n .times(new Big(p1.reserves[middleToken]))\n .times(gamma1);\n let alpha2 = new Big(p2.reserves[middleToken])\n .times(new Big(p2.reserves[outputToken]))\n .times(gamma2);\n var alpha = alpha1.times(alpha2);\n }\n return alpha;\n}\n\nfunction getAlphaSumFromRoutes(routes, nodeRoutes) {\n let alphaSum = new Big(0);\n for (var i in routes) {\n let route = routes[i];\n let nodeRoute = nodeRoutes[i];\n let alpha = getAlphaForRoute(route, nodeRoute);\n // console.log('alpha is...');\n // console.log(alpha.toString());\n // below, we are replacing the built-in Big sqrt() method with a\n // newton-iteration BigInt sqrt function, to speed it up by 10x.\n let radical = new Big(bisqrt(BigInt(new Big(alpha).round().toFixed())));\n // let radical = new Big(alpha).sqrt();\n let epsilon = getEpsilonForRoute(route, nodeRoute);\n let denom = new Big(epsilon);\n alphaSum = alphaSum.plus(radical.div(denom));\n }\n return alphaSum;\n}\n\nfunction getBetaSumFromRoutes(routes, nodeRoutes) {\n let betaSum = new Big(0);\n for (var i in routes) {\n let route = routes[i];\n let nodeRoute = nodeRoutes[i];\n let num = new Big(getBetaForRoute(route, nodeRoute));\n let denom = new Big(getEpsilonForRoute(route, nodeRoute));\n betaSum = betaSum.plus(num.div(denom));\n }\n return betaSum;\n}\n\nfunction getPhiFromRoutes(routes, nodeRoutes, totalInput) {\n let alphaSum = getAlphaSumFromRoutes(routes, nodeRoutes);\n let betaSum = getBetaSumFromRoutes(routes, nodeRoutes);\n let phi = new Big(totalInput).plus(betaSum).div(alphaSum);\n return phi;\n}\n\nfunction getAllocationForRoute(phi, route, path) {\n let alpha = getAlphaForRoute(route, path);\n let beta = getBetaForRoute(route, path);\n let epsilon = getEpsilonForRoute(route, path);\n // below, we are replacing the built-in Big sqrt() method with a\n // newton-iteration BigInt sqrt function, to speed it up by 10x.\n let allocation = new Big(phi)\n .abs()\n .times(new Big(bisqrt(BigInt(new Big(alpha).round().toFixed()))))\n .minus(beta)\n .div(epsilon);\n return allocation;\n}\n\nfunction getAllocationVectorForRoutes(phi, routes, nodeRoutes) {\n let allocationVec = [];\n for (var i in routes) {\n allocationVec.push(getAllocationForRoute(phi, routes[i], nodeRoutes[i]));\n }\n return allocationVec;\n}\n\nfunction getOptimalAllocationForRoutes(routes, nodeRoutes, totalInput) {\n // console.log(\"CALLING GET OPTIMAL ALLOCATION FOR ROUTES:\")\n // console.log(routes)\n var totalInput = new Big(totalInput);\n let phi = getPhiFromRoutes(routes, nodeRoutes, totalInput);\n // console.log('PHI CALCULATED TO BE...')\n // console.log(phi.toString())\n let allocations = getAllocationVectorForRoutes(phi, routes, nodeRoutes);\n if (allocations.every(item => item.lt(new Big(0)))) {\n allocations = allocations.map(item => item.times(new Big(-1.0)));\n }\n if (allocations.some(item => item.lt(new Big(0)))) {\n allocations = reduceRoutes(routes, nodeRoutes, allocations, totalInput);\n }\n let sumAllocations = allocations.reduce((a, b) => a.plus(b), new Big(0));\n let normalizedAllocations = allocations.map(a =>\n a.div(sumAllocations).times(new Big(totalInput))\n );\n return normalizedAllocations;\n}\n\nfunction reduceRoutes(routes, nodeRoutes, allocationVec, totalInput) {\n // console.log(\"RUNNING REDUCE ROUTES\")\n var totalInput = new Big(totalInput);\n let goodIndices = [];\n for (var i in allocationVec) {\n let dx = allocationVec[i];\n // console.log('DX IS...')\n // console.log(dx.toString())\n if (dx.gt(new Big(0))) {\n goodIndices.push(i);\n }\n }\n // console.log('GOOD INDICES ARE...');\n // console.log(goodIndices);\n let newRoutes = [];\n let newNodeRoutes = [];\n for (var i in goodIndices) {\n let goodIndex = goodIndices[i];\n newRoutes.push(routes[goodIndex]);\n newNodeRoutes.push(nodeRoutes[goodIndex]);\n }\n allocationVec = getOptimalAllocationForRoutes(\n newRoutes,\n newNodeRoutes,\n totalInput\n );\n let allocationDict = {};\n for (var i in goodIndices) {\n allocationDict[goodIndices[i]] = allocationVec[i];\n }\n var allocationVecNew = [];\n for (var i in routes) {\n if (goodIndices.includes(i)) {\n allocationVecNew.push(allocationDict[i]);\n } else {\n let zeroAllocation = new Big(0);\n allocationVecNew.push(zeroAllocation);\n }\n }\n return allocationVecNew;\n}\n\nfunction getNodeRoutesFromPathsAndPoolChains(paths, poolChains) {\n let multiplicity = [];\n for (var i in poolChains) {\n let pc = poolChains[i];\n let mul = pc\n .map(item => item.length)\n .reduce((elem1, elem2) => elem1 * elem2, 1);\n multiplicity.push(mul);\n }\n let nodeRoutes = [];\n for (var j in paths) {\n let path = paths[j];\n let m = multiplicity[j];\n for (var k = 0; k < m; k++) {\n nodeRoutes.push(path);\n }\n }\n return nodeRoutes;\n}\n\nfunction getPoolChainFromPaths(paths, pools, threshold = 0.001) {\n let poolChains = [];\n for (var pathInd in paths) {\n let path = paths[pathInd];\n let chain = [];\n let pairs = [];\n for (var i = 0; i < path.length - 1; i++) {\n pairs.push([path[i], path[i + 1]]);\n }\n for (var pairInd in pairs) {\n let pair = pairs[pairInd];\n // console.log(pair);\n let tokenPools = getPoolsByToken1ANDToken2(pools, pair[0], pair[1]);\n chain.push(tokenPools);\n }\n poolChains.push(chain);\n }\n // return poolChains;\n let culledPoolChains = getCulledPoolChains(poolChains, threshold);\n\n return culledPoolChains;\n}\n\nfunction getCulledPoolChains(poolChains, threshold = 0.001) {\n let newChains = [];\n for (var pathInd in poolChains) {\n let path = poolChains[pathInd];\n let newPath = [];\n for (var legInd in path) {\n let leg = path[legInd];\n let culledPath = cullPoolsWithInsufficientLiquidity(leg, threshold);\n newPath.push(culledPath);\n }\n newChains.push(newPath);\n }\n return newChains;\n}\n\nfunction getRoutesFromPoolChain(poolChains) {\n let routes = [];\n for (var pci in poolChains) {\n let poolChain = poolChains[pci];\n //get cartesian product of each pool chain to get the list of routes.\n let newRoutes = cartesianProduct(poolChain);\n routes.push(...newRoutes);\n }\n for (var i in routes) {\n if (!routes[i].length) {\n routes[i] = [routes[i]];\n }\n }\n return routes;\n}\n\nfunction getOutputSingleHop(pool, inputToken, outputToken, totalInput) {\n var totalInput = new Big(totalInput);\n // check if pool is forward or backward for inputToken/outputToken cf. token1Id/token2Id\n if (inputToken === pool.token1Id && outputToken === pool.token2Id) {\n // forward Pool\n var reserves = {\n [inputToken]: new Big(pool.token1Supply),\n [outputToken]: new Big(pool.token2Supply),\n };\n } else if (inputToken === pool.token2Id && outputToken === pool.token1Id) {\n // reverse pool\n var reserves = {\n [outputToken]: new Big(pool.token1Supply),\n [inputToken]: new Big(pool.token2Supply),\n };\n } else {\n return new Big(0);\n }\n let gamma = new Big(10000).minus(new Big(pool.fee)).div(new Big(10000));\n // console.log(totalInput)\n // console.log(gamma)\n // console.log(reserves)\n let num = totalInput.times(gamma).times(reserves[outputToken]);\n let denom = reserves[inputToken].plus(gamma.times(totalInput));\n return num.div(denom);\n}\n\nfunction getOutputDoubleHop(\n pools,\n inputToken,\n middleToken,\n outputToken,\n totalInput\n) {\n var totalInput = new Big(totalInput);\n for (var poolIndex in pools) {\n let p = pools[poolIndex];\n p['gamma'] = new Big(10000).minus(new Big(p.fee)).div(new Big(10000));\n }\n let p1 = pools[0];\n let p2 = pools[1];\n\n if (inputToken === p1.token1Id && middleToken === p1.token2Id) {\n // forward Pool\n p1['reserves'] = {\n [inputToken]: new Big(p1.token1Supply),\n [middleToken]: new Big(p1.token2Supply),\n };\n } else if (middleToken === p1.token1Id && inputToken === p1.token2Id) {\n //reverse pool\n p1['reserves'] = {\n [middleToken]: new Big(p1.token1Supply),\n [inputToken]: new Big(p1.token2Supply),\n };\n }\n\n if (middleToken === p2.token1Id && outputToken === p2.token2Id) {\n // forward Pool\n p2['reserves'] = {\n [middleToken]: new Big(p2.token1Supply),\n [outputToken]: new Big(p2.token2Supply),\n };\n } else if (outputToken === p2.token1Id && middleToken === p2.token2Id) {\n //reverse pool\n p2['reserves'] = {\n [outputToken]: new Big(p2.token1Supply),\n [middleToken]: new Big(p2.token2Supply),\n };\n }\n\n let c1 = new Big(p1.reserves[middleToken]);\n let a1 = new Big(p1.reserves[inputToken]);\n let c2 = new Big(p2.reserves[middleToken]);\n let b2 = new Big(p2.reserves[outputToken]);\n let gamma1 = p1.gamma;\n let gamma2 = p2.gamma;\n let num = totalInput\n .times(c1)\n .times(b2)\n .times(gamma1)\n .times(gamma2);\n let denom = c2\n .times(a1)\n .plus(\n totalInput.times(c2.times(gamma1).plus(c1.times(gamma1).times(gamma2)))\n );\n // denom = c2*a1 + totalInput * (c2*gamma1 + c1*gamma1*gamma2)\n\n return num.div(denom);\n}\n\nfunction getOutputFromRoute(route, nodeRoute, allocation) {\n if (new Big(allocation).eq(new Big(0))) {\n return new Big(0);\n } else {\n var allocation = new Big(allocation);\n }\n if (!route.length) {\n route = [route];\n }\n if (route.length == 1) {\n // single hop\n let inputToken = nodeRoute[0];\n let outputToken = nodeRoute[1];\n let pool = route[0];\n var output = getOutputSingleHop(pool, inputToken, outputToken, allocation);\n } else if (route.length == 2) {\n // DOUBLE HOP\n let inputToken = nodeRoute[0];\n let middleToken = nodeRoute[1];\n let outputToken = nodeRoute[2];\n let pools = route;\n var output = getOutputDoubleHop(\n pools,\n inputToken,\n middleToken,\n outputToken,\n allocation\n );\n }\n return output;\n}\n\nfunction getOptOutputVec(routes, nodeRoutes, totalInput) {\n let allocations = getOptimalAllocationForRoutes(\n routes,\n nodeRoutes,\n totalInput\n );\n let result = [];\n for (var i in routes) {\n let route = routes[i];\n let nodeRoute = nodeRoutes[i];\n let allocation = allocations[i];\n let output = getOutputFromRoute(route, nodeRoute, allocation);\n result.push(output);\n }\n return {\n result: result,\n allocations: allocations,\n };\n //NOTE -- I made this return an object instead of the tuple returned in python. need to check the places it is called, and specify\n // result field instead of tuple 0 position, and allocations field instead of tuple 1 position.\n}\n\nfunction getBestOptInputAndOutputSlower(routes, nodeRoutes, totalInput) {\n let refDict = getOptOutputVecRefined(routes, nodeRoutes, totalInput);\n let outputRefined = refDict.result;\n let inputRefined = refDict.allocations;\n inputRefined = checkIntegerSumOfAllocations(inputRefined, totalInput);\n let rawDict = getOptOutputVec(routes, nodeRoutes, totalInput);\n let outputRaw = rawDict.result;\n let inputRaw = rawDict.allocations;\n inputRaw = checkIntegerSumOfAllocations(inputRaw, totalInput);\n let res1 = new Big(0);\n let res2 = new Big(0);\n\n for (var n in outputRefined) {\n res1 = res1.plus(outputRefined[n]);\n }\n for (var nn in outputRaw) {\n res2 = res2.plus(outputRaw[nn]);\n }\n // console.log('COMPARING SINGLE HOPS VS DOUBLE')\n // console.log(res1.toString())\n // console.log(res2.toString())\n if (res1.gt(res2)) {\n return { input: inputRefined, output: res1 };\n } else {\n return { input: inputRaw, output: res2 };\n }\n}\n\nfunction getBestOptInputAndOutput(routes, nodeRoutes, totalInput) {\n // let refDict = getOptOutputVecRefined(routes, nodeRoutes, totalInput);\n // let outputRefined = refDict.result;\n // let inputRefined = refDict.allocations;\n // inputRefined = checkIntegerSumOfAllocations(inputRefined, totalInput);\n let rawDict = getOptOutputVec(routes, nodeRoutes, totalInput);\n let outputRaw = rawDict.result;\n let inputRaw = rawDict.allocations;\n inputRaw = checkIntegerSumOfAllocations(inputRaw, totalInput);\n let res1 = new Big(0);\n let res2 = new Big(0);\n\n let res = outputRaw\n .map(v => new Big(v))\n .reduce((bv1, bv2) => bv1.plus(bv2), new Big(0));\n\n return {\n input: inputRaw,\n output: res,\n };\n}\n\nfunction getBestOptOutput(routes, nodeRoutes, totalInput) {\n let outputRefined = getOptOutputVecRefined(routes, nodeRoutes, totalInput)\n .result;\n let outputRaw = getOptOutputVec(routes, nodeRoutes, totalInput).result;\n let res1 = new Big(0);\n let res2 = new Big(0);\n\n for (var n in outputRefined) {\n res1 = res1.plus(outputRefined[n]);\n }\n for (var nn in outputRaw) {\n res2 = res2.plus(outputRaw[nn]);\n }\n if (res1.gt(res2)) {\n return res1;\n } else {\n return res2;\n }\n}\n\nfunction getBestOptInput(routes, nodeRoutes, totalInput) {\n let refDict = getOptOutputVecRefined(routes, nodeRoutes, totalInput);\n let outputRefined = refDict.result;\n let inputRefined = refDict.allocations;\n inputRefined = checkIntegerSumOfAllocations(inputRefined, totalInput);\n let rawDict = getOptOutputVec(routes, nodeRoutes, totalInput);\n let outputRaw = rawDict.result;\n let inputRaw = rawDict.allocations;\n inputRaw = checkIntegerSumOfAllocations(inputRaw, totalInput);\n let res1 = new Big(0);\n let res2 = new Big(0);\n\n for (var n in outputRefined) {\n res1 = res1.plus(outputRefined[n]);\n }\n for (var nn in outputRaw) {\n res2 = res2.plus(outputRaw[nn]);\n }\n // console.log('COMPARING SINGLE HOPS VS DOUBLE')\n // console.log(res1.toString())\n // console.log(res2.toString())\n if (res1.gt(res2)) {\n return inputRefined;\n } else {\n return inputRaw;\n }\n}\n\nfunction getOptOutputVecRefined(routes, nodeRoutes, totalInput) {\n // need to calculate full result.\n // if direct pools exist, need to calculate parallel result. if not, this portion is set to zero output.\n\n // need to compare between outputs of the two results above.\n\n let initLengthRoutes = routes.length;\n let directRouteInds = [];\n for (var routeInd in routes) {\n let route = routes[routeInd];\n if (!route.length) {\n route = [route];\n }\n if (route.length == 1) {\n directRouteInds.push(routeInd);\n }\n }\n // console.log('DIRECT ROUTE INDS ARE')\n // console.log(directRouteInds)\n // if (directRouteInds.length < 1) {\n var fullResultAllocations = getOptimalAllocationForRoutes(\n routes,\n nodeRoutes,\n totalInput\n );\n var fullResult = [];\n for (var i in routes) {\n let r = routes[i];\n let nr = nodeRoutes[i];\n let a = fullResultAllocations[i];\n let output = getOutputFromRoute(r, nr, a);\n fullResult.push(output);\n }\n var fullResultTotal = fullResult.reduce((a, b) => a.plus(b), new Big(0));\n\n // } else {\n if (directRouteInds.length > 0) {\n // console.log('DOING SINGLE HOP ONLY')\n let droutes = [];\n let dnodeRoutes = [];\n for (var dri in directRouteInds) {\n let ind = directRouteInds[dri];\n droutes.push(routes[ind]);\n dnodeRoutes.push(nodeRoutes[ind]);\n }\n let dallocations = getOptimalAllocationForRoutes(\n droutes,\n dnodeRoutes,\n totalInput\n );\n let dallocDict = {};\n for (var dd in dallocations) {\n dallocDict[directRouteInds[dd]] = dallocations[dd];\n }\n var pallocations = [];\n\n for (var ii = 0; ii < initLengthRoutes; ii++) {\n if (directRouteInds.includes(ii.toString())) {\n //console.log('ADDING ALLOCATION FOR SINGLE ROUTE')\n pallocations.push(dallocDict[ii]);\n } else {\n pallocations.push(new Big(0));\n }\n }\n var presult = [];\n for (var j in routes) {\n let route = routes[j];\n let nodeRoute = nodeRoutes[j];\n let allocation = pallocations[j];\n let output = getOutputFromRoute(route, nodeRoute, allocation);\n presult.push(output);\n }\n var presultTotal = presult.reduce((a, b) => a.plus(b), new Big(0));\n } else {\n var presultTotal = new Big(0);\n }\n if (presultTotal.gt(fullResultTotal)) {\n var result = presult;\n var allocations = pallocations;\n } else {\n var result = fullResult;\n var allocations = fullResultAllocations;\n }\n // NEED TO COMPARE BETWEEEN DIRECT AND MULTI HOP TO GET BEST OUTPUT\n return {\n result: result,\n allocations: allocations,\n };\n}\n\nasync function getBestOptimalAllocationsAndOutputs(\n pools,\n inputToken,\n outputToken,\n totalInput,\n maxPathLength = 3,\n threshold = 0.001\n) {\n var totalInput = new Big(totalInput);\n let paths = await getPathsFromPools(\n pools,\n inputToken,\n outputToken,\n maxPathLength\n );\n if (!paths.length) {\n return {\n allocations: [],\n outputs: new Big(0),\n routes: [],\n nodeRoutes: [],\n };\n }\n let poolChains = await getPoolChainFromPaths(paths, pools, threshold);\n\n let routes = await getRoutesFromPoolChain(poolChains);\n let nodeRoutes = await getNodeRoutesFromPathsAndPoolChains(paths, poolChains);\n // let allocations = await getBestOptInput(routes, nodeRoutes, totalInput);\n // // fix integer rounding for allocations:\n // allocations = checkIntegerSumOfAllocations(allocations, totalInput);\n // let outputs = getBestOptOutput(routes, nodeRoutes, totalInput);\n let inputOutput = await getBestOptInputAndOutput(\n routes,\n nodeRoutes,\n totalInput\n );\n let allocations = inputOutput.input;\n let outputs = inputOutput.output;\n\n return {\n allocations: allocations,\n outputs: outputs,\n routes: routes,\n nodeRoutes: nodeRoutes,\n };\n}\n\nfunction getHopsFromRoutes(routes, nodeRoutes, allocations) {\n let hops = [];\n for (var i in routes) {\n var route = routes[i];\n var nodeRoute = nodeRoutes[i];\n var allocation = allocations[i];\n if (!route.length) {\n route = [route];\n }\n if (!route[0]) {\n continue;\n }\n let hop = {\n pool: route[0],\n allocation: allocation,\n inputToken: nodeRoute[0],\n outputToken: nodeRoute[1],\n };\n hops.push(hop);\n }\n return hops;\n}\n\nfunction distillHopsByPool(hops) {\n // console.log('some HOPS =');\n // console.log(hops);\n let distilledHops = [];\n let poolIds = [];\n let poolId2allocation = {};\n for (var i in hops) {\n let hop = hops[i];\n if (hop.allocation === '0') {\n continue;\n }\n // console.log(`HOP ${i} IS...`);\n // console.log(hop);\n let poolId = hop.pool['id'];\n if (poolIds.includes(poolId)) {\n poolId2allocation[poolId] = new Big(poolId2allocation[poolId])\n .plus(new Big(hop.allocation))\n .toString();\n } else {\n poolId2allocation[poolId] = new Big(hop.allocation).toString();\n poolIds.push(poolId);\n }\n }\n // let poolsWithOrder = [...new Set(...hops.map((item) => item.pool))]\n let keys = Object.keys(poolId2allocation);\n for (var j in keys) {\n var poolId = keys[j];\n let hop = hops.filter(\n item => item.pool.id.toString() === poolId.toString()\n )[0];\n let distilledHop = {\n pool: hop.pool,\n allocation: poolId2allocation[poolId],\n inputToken: hop.inputToken,\n outputToken: hop.outputToken,\n };\n distilledHops.push(distilledHop);\n }\n return distilledHops;\n}\n\nfunction getDistilledHopActions(distilledHops, slippageTolerance) {\n let actions = [];\n for (var i in distilledHops) {\n let hop = distilledHops[i];\n let expectedAmountOut = getOutputSingleHop(\n hop.pool,\n hop.inputToken,\n hop.outputToken,\n hop.allocation\n );\n let minimumAmountOut = new Big(expectedAmountOut)\n .times(new Big(1).minus(new Big(slippageTolerance).div(100)))\n .round()\n .toString(); //Here, assume slippage tolerance is a percentage. So 1% would be 1.0\n let action = {\n pool_id: hop.pool.id,\n token_in: hop.inputToken,\n token_out: hop.outputToken,\n amount_in: hop.allocation,\n min_amount_out: minimumAmountOut,\n };\n actions.push(action);\n }\n return actions;\n}\nfunction getMiddleTokenTotalsFromFirstHopActions(firstHopActions) {\n let middleTokens = [...new Set(firstHopActions.map(item => item.token_out))];\n let middleTokenTotals = {};\n for (var i in middleTokens) {\n let middleToken = middleTokens[i];\n let mtActions = firstHopActions.filter(\n item => item.token_out === middleToken\n );\n let mtTotal = mtActions\n .map(item => new Big(item.min_amount_out))\n .reduce((a, b) => a.plus(b), new Big(0))\n .toString();\n middleTokenTotals[middleToken] = mtTotal;\n }\n return middleTokenTotals;\n}\nfunction getRoutesAndAllocationsForMiddleToken(\n routes,\n nodeRoutes,\n allocations,\n middleToken,\n middleTokenTotal\n) {\n // get routes that use middle token.\n // (input route alloction) /sum(input allocations of routes with middle token) * (total_middleToken)\n let mask = [];\n for (var i in nodeRoutes) {\n if (nodeRoutes[i][1] === middleToken) {\n mask.push(true);\n } else {\n mask.push(false);\n }\n }\n let froutes = [];\n let fallocations = [];\n let fnoderoutes = [];\n for (var i in routes) {\n if (mask[i]) {\n froutes.push(routes[i]);\n fallocations.push(allocations[i]);\n fnoderoutes.push(nodeRoutes[i]);\n }\n }\n let sumfallocations = fallocations.reduce(\n (a, b) => new Big(a).plus(new Big(b)),\n new Big(0)\n );\n let middleAllocations = fallocations.map(item =>\n new Big(item).div(sumfallocations).times(new Big(middleTokenTotal))\n );\n let secondHopRoutes = froutes.map(item => [item[1]]);\n let secondHopNodeRoutes = fnoderoutes.map(item => [item[1], item[2]]);\n middleAllocations = checkIntegerSumOfAllocations(\n middleAllocations,\n middleTokenTotal\n );\n return {\n routes: secondHopRoutes,\n nodeRoutes: secondHopNodeRoutes,\n allocations: middleAllocations,\n };\n}\n\nfunction getHopActionsFromRoutes(routes, nodeRoutes, allocations) {\n // console.log('INSIDE GET HOP ACTIONS FROM ROUTES');\n // console.log('ROUTES ARE...');\n // console.log(routes);\n // console.log('NODE ROUTES ARE...');\n // console.log(nodeRoutes);\n // console.log('ALLOCATIONS ARE...');\n // console.log(allocations);\n let totalInput = allocations\n .map(a => new Big(a))\n .reduce((a, b) => a.plus(b), new Big(0))\n .toString();\n let hops = [];\n for (var i in routes) {\n var route = routes[i];\n var nodeRoute = nodeRoutes[i];\n var allocation = allocations[i];\n if (new Big(allocation).eq(new Big(0))) {\n continue;\n }\n if (!route.length) {\n route = [route];\n }\n if (!route[0]) {\n continue;\n }\n for (var j in route) {\n let pool = route[j];\n // console.log('J IS...');\n // console.log(j);\n // console.log('NODE ROUTE IS...');\n // console.log(nodeRoute);\n if (j == 0) {\n //first hop.\n // console.log(nodeRoute[0]);\n // console.log(nodeRoute[1]);\n var hop = {\n pool: pool,\n allocation: allocation.toString(),\n inputToken: nodeRoute[0],\n outputToken: nodeRoute[1],\n nodeRoute: nodeRoute,\n route: route,\n allRoutes: routes,\n allNodeRoutes: nodeRoutes,\n totalInputAmount: totalInput,\n allAllocations: allocations,\n };\n // console.log('FIRST HOP IS...');\n // console.log(hop);\n hops.push(hop);\n if (nodeRoute.length > 2) {\n var middleTokenAllocation = getOutputSingleHop(\n pool,\n nodeRoute[0],\n nodeRoute[1],\n allocation\n );\n }\n } else {\n // second hop\n var hop = {\n pool: pool,\n allocation: middleTokenAllocation.toString(),\n inputToken: nodeRoute[1],\n outputToken: nodeRoute[2],\n nodeRoute: nodeRoute,\n route: route,\n allRoutes: routes,\n allNodeRoutes: nodeRoutes,\n totalInputAmount: totalInput,\n allAllocations: allocations,\n };\n // console.log('SECOND HOP IS...');\n // console.log(hop);\n hops.push(hop);\n }\n }\n }\n // console.log('HOP ACTIONS FOUND TO BE');\n // console.log(hops);\n return hops;\n}\n\n// TODO: Clean this function. I don't need all the \"actions\" just the hops.\n// TODO: re-order actions to ensure each route is complete with zero input for second hop before starting next route.\nfunction getActionListFromRoutesAndAllocations(\n routes,\n nodeRoutes,\n allocations\n) {\n // REPLACE THE CODE BELOW WITH THE FUNCTION HERE.\n return getHopActionsFromRoutes(routes, nodeRoutes, allocations);\n var actions = [];\n var all_hops = [];\n let firstHops = getHopsFromRoutes(routes, nodeRoutes, allocations);\n\n firstHops = firstHops.filter(hop => new Big(hop.allocation).gt(new Big(0)));\n all_hops.push(...firstHops);\n let distilledFirstHops = distillHopsByPool(firstHops);\n let firstHopActions = getDistilledHopActions(\n distilledFirstHops,\n slippageTolerance\n );\n actions.push(...firstHopActions);\n let middleTokenTotals = getMiddleTokenTotalsFromFirstHopActions(\n firstHopActions\n );\n // console.log('first hop actions are...');\n // console.log(firstHopActions);\n let middleTokens = Object.keys(middleTokenTotals);\n // console.log('middle token totals are...');\n // console.log(middleTokenTotals);\n // console.log('middle tokens are...');\n // console.log(middleTokens);\n for (var tokenIndex in middleTokens) {\n var secondHops = [];\n let middleToken = middleTokens[tokenIndex];\n // console.log('current middle token is ');\n // console.log(middleToken);\n let middleTokenTotal = middleTokenTotals[middleToken];\n // console.log('current middle token total is...');\n // console.log(middleTokenTotal);\n let middleTokenRoutesWithAllocations = getRoutesAndAllocationsForMiddleToken(\n routes,\n nodeRoutes,\n allocations,\n middleToken,\n middleTokenTotal\n );\n // console.log('current middle tokens routes with allocations are...');\n // console.log(middleTokenRoutesWithAllocations);\n let middleTokenRoutes = middleTokenRoutesWithAllocations.routes;\n let middleTokenAllocations = middleTokenRoutesWithAllocations.allocations;\n let middleTokenNodeRoutes = middleTokenRoutesWithAllocations.nodeRoutes;\n // console.log('middle token routes are...');\n // console.log(middleTokenRoutes);\n // console.log('middle token allocations are...');\n // console.log(middleTokenAllocations);\n // console.log('middle token node routes are...');\n // console.log(middleTokenNodeRoutes);\n secondHops.push(\n ...getHopsFromRoutes(\n middleTokenRoutes,\n middleTokenNodeRoutes,\n middleTokenAllocations\n )\n );\n // console.log('CURRENT SECOND HOPS', secondHops);\n // console.log(secondHops.length);\n // console.log(secondHops.map((hop) => hop.allocation));\n // console.log('filter out zero allocation 2nd hops:');\n secondHops = secondHops.filter(hop =>\n new Big(hop.allocation).gt(new Big(0))\n );\n // console.log(secondHops);\n all_hops.push(...secondHops);\n // console.log('second hops are currently...');\n // console.log(secondHops);\n let distilledSecondHopsForToken = distillHopsByPool(secondHops);\n // console.log('distilled second hops are...');\n let secondHopActionsForToken = getDistilledHopActions(\n distilledSecondHopsForToken,\n slippageTolerance\n );\n // console.log(secondHopActionsForToken);\n actions.push(...secondHopActionsForToken);\n }\n\n //TODO: NEED TO RUN INTEGER ROUNDING FUNCTION ON MIDDLE TOKEN ALLOCATIONS\n\n // TODO: check the node routes. for double-hop cases, find the hop action for each hop.\n // For now, we are assuming no parallel swaps if there is a double-hop.\n\n // Possible cases:\n // (1) 1 single-hop.\n // (2) Parallel single-hop ?\n // (3) 1 double-hop\n // (4) 2 double-hops\n\n // We only have to worry about re-ordering the actions for cases (3) and (4).\n\n let orderedHops = orderHops(all_hops, routes, nodeRoutes, allocations);\n\n // console.log('ALL HOPS', all_hops);\n return orderedHops;\n // return actions;\n}\n\nfunction orderHops(hops, routes, nodeRoutes, allocations) {\n // first get rid of zero allocation routes\n // console.log('NODE ROUTES ARE...');\n // console.log(nodeRoutes);\n let filteredRoutes = [];\n let filteredNodeRoutes = [];\n let filteredAllocations = [];\n for (var i in routes) {\n // remove zero-allocation routes.\n let allocation = new Big(allocations[i]);\n if (allocation.gt(new Big(0))) {\n filteredAllocations.push(allocation);\n filteredRoutes.push(routes[i]);\n filteredNodeRoutes.push(nodeRoutes[i]);\n }\n // console.log('FILTERED NODE ROUTES ARE...');\n // console.log(filteredNodeRoutes);\n }\n // next check node routes to see if it is case 1, 2, 3, or 4.\n // Possible cases:\n // (1) 1 single-hop.\n // (2) Parallel single-hop ?\n // (3) 1 double-hop\n // (4) 2 double-hops\n\n if (filteredNodeRoutes.length === 1) {\n // only one route.\n let currentNodeRoute = filteredNodeRoutes[0];\n if (currentNodeRoute.length === 2) {\n // case 1.\n return hops;\n } else {\n // case 3. assume there are only 3 nodes (double-hop)\n //make sure order of hops is such that input token precedes output token.\n //make sure the amount_in for second hop is zero (which will grab all of output of first hop to use.)\n let firstHop = hops.filter(\n hop => hop.inputToken === currentNodeRoute[0]\n )[0];\n let secondHop = hops.filter(\n hop => hop.inputToken === currentNodeRoute[1]\n )[0];\n // set second hop amount in to 0 so that it will use whatever was generated by hop 1.\n secondHop.pool.partialAmountIn = '0';\n\n let orderedHops = [firstHop, secondHop];\n return orderedHops;\n }\n } else if (filteredNodeRoutes.length === 2) {\n // two routes.\n let lengthNodeRoutes = filteredNodeRoutes.map(nr => nr.length);\n // sub cases:\n // [2,2] -- parallel swap. (direct) -- case 2\n // [2,3] -- direct swap in parallel with double hop.\n // [3,2] -- double hop in parallel with direct swap.\n // [3,3] -- double hop in parallel with double hop. -- case 4\n let orderedHops = [];\n if (arrayEquals(lengthNodeRoutes, [2, 2])) {\n return hops;\n } else if (arrayEquals(lengthNodeRoutes, [2, 3])) {\n directNodeRoute = filteredNodeRoutes[0];\n doubleNodeRoute = filteredNodeRoutes[1];\n let firstHop = hops.filter(\n hop =>\n hop.inputToken === directNodeRoute[0] &&\n hop.outputToken === directNodeRoute[1]\n )[0];\n let secondHop = hops.filter(\n hop => hop.inputToken === doubleNodeRoute[0]\n )[0];\n let thirdHop = hops.filter(\n hop => hop.outputToken === doubleNodeRoute[2]\n )[0];\n // set third hop amount in to 0 so that it will use whatever was generated by hop 2.\n thirdHop.pool.partialAmountIn = '0';\n orderedHops = [firstHop, secondHop, thirdHop];\n return orderedHops;\n } else if (arrayEquals(lengthNodeRoutes, [3, 2])) {\n directNodeRoute = filteredNodeRoutes[1];\n doubleNodeRoute = filteredNodeRoutes[0];\n let firstHop = hops.filter(\n hop =>\n hop.inputToken === directNodeRoute[0] &&\n hop.outputToken === directNodeRoute[1]\n )[0];\n let secondHop = hops.filter(\n hop => hop.inputToken === doubleNodeRoute[0]\n )[0];\n let thirdHop = hops.filter(\n hop => hop.outputToken === doubleNodeRoute[2]\n )[0];\n // set third hop amount in to 0 so that it will use whatever was generated by hop 2.\n thirdHop.pool.partialAmountIn = '0';\n orderedHops = [firstHop, secondHop, thirdHop];\n return orderedHops;\n } else if (arrayEquals(lengthNodeRoutes, [3, 3])) {\n orderedHops = [];\n\n for (var i in filteredNodeRoutes) {\n let doubleNodeRoute = filteredNodeRoutes[i];\n let doubleHopMiddleToken = doubleNodeRoute[1];\n let firstHop = hops.filter(\n hop =>\n hop.inputToken === doubleNodeRoute[0] &&\n hop.outputToken === doubleHopMiddleToken\n )[0];\n let secondHop = hops.filter(\n hop =>\n hop.inputToken === doubleHopMiddleToken &&\n hop.outputToken === doubleNodeRoute[2]\n )[0];\n // set second hop amount in to 0 so that it will use whatever was generated by hop 1.\n secondHop.pool.partialAmountIn = '0';\n orderedHops.push(firstHop);\n orderedHops.push(secondHop);\n }\n return orderedHops;\n } else {\n return hops;\n }\n for (var i in filteredNodeRoutes) {\n let currentNodeRoute = filteredNodeRoutes[i];\n if (currentNodeRoute.length === 2) {\n }\n }\n }\n\n return hops;\n}\n\n// function getActionListFromRoutesAndAllocationsORIG(\n// routes,\n// nodeRoutes,\n// allocations,\n// slippageTolerance\n// ) {\n// let actions = [];\n// for (var i in routes) {\n// let route = routes[i];\n// let nodeRoute = nodeRoutes[i];\n// let allocation = new Big(allocations[i]);\n// if (allocation.eq(new Big(0))) {\n// continue;\n// }\n// if (!route.length) {\n// route = [route];\n// }\n// if (route.length === 1) {\n// //single hop. only one action.\n// let pool = route[0];\n// let poolId = pool.id;\n// let inputToken = nodeRoute[0];\n// let outputToken = nodeRoute[1];\n// let expectedAmountOut = getOutputSingleHop(\n// pool,\n// inputToken,\n// outputToken,\n// allocation\n// );\n// let minimumAmountOut = expectedAmountOut\n// .times(new Big(1).minus(new Big(slippageTolerance).div(100)))\n// .round()\n// .toString(); //Here, assume slippage tolerance is a percentage. So 1% would be 1.0\n// let action = {\n// pool_id: poolId,\n// token_in: inputToken,\n// token_out: outputToken,\n// amount_in: allocation.round().toString(),\n// min_amount_out: minimumAmountOut.toString(),\n// };\n// actions.push(action);\n// } else if (route.length === 2) {\n// // double hop. two actions.\n// let pool1 = route[0];\n// let pool2 = route[1];\n// let pool1Id = pool1.id;\n// let pool2Id = pool2.id;\n// let inputToken = nodeRoute[0];\n// let middleToken = nodeRoute[1];\n// let outputToken = nodeRoute[2];\n// let expectedAmountOutFirstHop = getOutputSingleHop(\n// pool1,\n// inputToken,\n// middleToken,\n// allocation\n// );\n// let minimumAmountOutFirstHop = expectedAmountOutFirstHop\n// .times(new Big(1).minus(new Big(slippageTolerance).div(100)))\n// .round()\n// .toString(); //Here, assume slippage tolerance is a percentage. So 1% would be 1.0\n\n// let action1 = {\n// pool_id: pool1Id,\n// token_in: inputToken,\n// token_out: middleToken,\n// amount_in: allocation.round().toString(),\n// min_amount_out: minimumAmountOutFirstHop,\n// };\n// let expectedFinalAmountOut = getOutputSingleHop(\n// pool2,\n// middleToken,\n// outputToken,\n// minimumAmountOutFirstHop\n// );\n// let minimumAMountOutSecondHop = expectedFinalAmountOut\n// .times(new Big(1).minus(new Big(slippageTolerance).div(100)))\n// .round()\n// .toString();\n// let action2 = {\n// pool_id: pool2Id,\n// token_in: middleToken,\n// token_out: outputToken,\n// amount_in: minimumAmountOutFirstHop,\n// min_amount_out: minimumAMountOutSecondHop,\n// };\n// actions.push(action1);\n// actions.push(action2);\n// }\n// }\n// return actions;\n// }\n\nfunction* range(start, end) {\n for (; start <= end; ++start) {\n yield start;\n }\n}\n\nfunction last(arr) {\n return arr[arr.length - 1];\n}\n\nfunction* numericCombinations(n, r, loc = []) {\n var idx = loc.length;\n if (idx === r) {\n yield loc;\n return;\n }\n for (let next of range(idx ? last(loc) + 1 : 0, n - r + idx)) {\n yield* numericCombinations(n, r, loc.concat(next));\n }\n}\n\nfunction* combinations(arr, r) {\n for (let idxs of numericCombinations(arr.length, r)) {\n yield idxs.map(i => arr[i]);\n }\n}\n\n// #middleTokenTotals = getMiddleTokenTotals(routes,nodeRoutes,allocations)\n// #TODO: complete this function with middle token checks.\n\n// #consider all routes of length 2 with non-zero allocation. (double-hops)\n// # among these, check for parallel swaps. That is, check for common node routes\n// # for first hop. Then check for common node routes on second hop.\n// # when common node routes occur for the first hop:\n// # 1. Calculate the total expected output of intermediate token.\n// # 2.\n// # when common node routes occur for the second hop:\n// # 1. get a ratio of the input allocations of the full routes associated with\n// # these common node routes. allocate the total intermediate token output\n// # toward these 2nd hop routes in the same ratio as their route input allocations.\n\nexport async function getSmartRouteSwapActions(\n pools,\n inputToken,\n outputToken,\n totalInput,\n allTokens,\n maxPathLength = 3,\n threshold = 0.001,\n numberOfRoutesLimit = 2,\n MAX_NUMBER_PARALLEL_POOLS = 4,\n decimalsCulledPoolIds = []\n) {\n if (!totalInput) {\n return [];\n }\n var totalInput = new Big(totalInput);\n\n // remove pools that have an id from the decimalCulledPoolIds\n pools = pools.filter(p => !decimalsCulledPoolIds.includes(p.id));\n\n let resDict = await getBestOptimalAllocationsAndOutputs(\n pools,\n inputToken,\n outputToken,\n totalInput,\n maxPathLength,\n threshold\n );\n\n let allocations = resDict.allocations;\n\n // let outputs = resDict.outputs;\n let routes = resDict.routes;\n let nodeRoutes = resDict.nodeRoutes;\n\n let sortedIndexValues = argsort(allocations);\n let topIndices = sortedIndexValues.slice(0, 10);\n var reducedRoutes = [];\n var reducedNodeRoutes = [];\n for (var ind of topIndices) {\n reducedRoutes.push(routes[ind]);\n reducedNodeRoutes.push(nodeRoutes[ind]);\n }\n routes = reducedRoutes;\n nodeRoutes = reducedNodeRoutes;\n\n // TODO: compare pairs of routes to get the best allocation pair-wise.\n var currentBestOutput = new Big(0);\n var bestResDict = { routes: [] };\n var bestAllocations = resDict.allocations;\n var bestNodeRoutes = resDict.nodeRoutes;\n var bestRoutes = resDict.routes;\n // first check parallel swap with 4 actions. store result.\n var parallelNodeRoutes = [];\n var parallelRoutes = [];\n for (var n in bestRoutes) {\n let currentNodeRoute = bestNodeRoutes[n];\n if (currentNodeRoute.length == 2) {\n parallelNodeRoutes.push(currentNodeRoute);\n parallelRoutes.push(bestRoutes[n]);\n }\n }\n // console.log(`${parallelNodeRoutes.length} parallel routes found...`);\n var bestRoutesAreParallel = false;\n if (parallelNodeRoutes.length > 0) {\n // first calculate the expected result using only parallel routes.\n // let filteredAllocationsAndOutputs = getOptOutputVecRefined(parallelRoutes, parallelNodeRoutes, totalInput);\n let filteredAllocationsAndOutputs = getOptOutputVec(\n parallelRoutes,\n parallelNodeRoutes,\n totalInput\n );\n let parallellAllocations = filteredAllocationsAndOutputs.allocations;\n let parallelOutputs = filteredAllocationsAndOutputs.result;\n\n if (parallellAllocations.length > MAX_NUMBER_PARALLEL_POOLS) {\n // now sort by allocation value to the top 4 parallel swaps:\n let sortIndices = argsort(parallellAllocations);\n\n sortIndices = sortIndices.slice(0, MAX_NUMBER_PARALLEL_POOLS);\n var filteredParallelRoutes = [];\n var filteredParallelNodeRoutes = [];\n for (var i in sortIndices) {\n filteredParallelRoutes.push(parallelRoutes[sortIndices[i]]);\n filteredParallelNodeRoutes.push(parallelNodeRoutes[sortIndices[i]]);\n }\n filteredAllocationsAndOutputs = getOptOutputVec(\n filteredParallelRoutes,\n filteredParallelNodeRoutes,\n totalInput\n );\n parallellAllocations = filteredAllocationsAndOutputs.allocations;\n parallelOutputs = filteredAllocationsAndOutputs.result;\n }\n\n let parallelOutput = parallelOutputs.reduce(\n (a, b) => a.plus(b),\n new Big(0)\n );\n if (new Big(parallelOutput).gt(currentBestOutput)) {\n bestAllocations = parallellAllocations;\n currentBestOutput = parallelOutput;\n // console.log(\n // 'BEST OUTPUT FROM PARALLEL SWAPS IS NOW... ',\n // currentBestOutput.toString()\n // );\n bestRoutes = parallelRoutes;\n bestNodeRoutes = parallelNodeRoutes;\n bestRoutesAreParallel = true;\n }\n }\n var canHaveTwoRoutes = false;\n // initialize this variable to check if we can have two routes, or if all routes share a pool for an edge case.\n // console.log('THE NUMBER OF ROUTES IS...', routes.length);\n\n for (var i in routes) {\n for (var j in routes) {\n if (j > i) {\n var route1 = routes[i];\n var route2 = routes[j];\n var nodeRoute1 = nodeRoutes[i];\n var nodeRoute2 = nodeRoutes[j];\n // check if they share a pool.\n let route1PoolIds = new Set(route1.map(r => r.id));\n let route2PoolIds = new Set(route2.map(r => r.id));\n var sharePool = false;\n for (var route1PoolId of route1PoolIds) {\n if (route2PoolIds.has(route1PoolId)) {\n sharePool = true;\n }\n }\n if (sharePool) {\n // routes are not independent. skip this pair.\n // console.log('skipping this pair because pool was shared.');\n continue;\n } else {\n canHaveTwoRoutes = true;\n let currentRoutes = [route1, route2];\n let currentNodeRoutes = [nodeRoute1, nodeRoute2];\n\n let filteredAllocationsAndOutputs = getOptOutputVec(\n currentRoutes,\n currentNodeRoutes,\n totalInput\n );\n\n let filteredAllocations = filteredAllocationsAndOutputs.allocations;\n let filteredOutputs = filteredAllocationsAndOutputs.result;\n // console.log('FILTERED ALLOCATIONS:');\n // console.log(filteredAllocations.map((i) => i.toString()));\n // console.log(filteredOutputs);\n let totalOutput = filteredOutputs.reduce(\n (a, b) => a.plus(b),\n new Big(0)\n );\n if (new Big(totalOutput).gt(currentBestOutput)) {\n bestAllocations = filteredAllocations;\n currentBestOutput = totalOutput;\n // console.log('BEST OUTPUT IS NOW... ', currentBestOutput.toString());\n bestRoutes = currentRoutes;\n bestNodeRoutes = currentNodeRoutes;\n bestRoutesAreParallel = false;\n // bestResDict = currentResDict\n }\n\n // if (currentResDict.outputs.gt(currentBestOutput)) {\n // console.log('DIFF IS...', currentResDict.outputs.minus(currentBestOutput).toString());\n // bestResDict = currentResDict;\n // currentBestOutput = bestResDict.outputs;\n // console.log('BEST OUTPUT IS NOW... ', currentBestOutput.toString());\n // console.log(bestResDict.routes);\n // console.log(bestResDict.allocations.map((i) => i.toString()));\n // console.log(bestResDict.outputs.toString());\n }\n }\n }\n }\n\n if (!canHaveTwoRoutes) {\n // now we need to check through the routes in single manner to find the best one:\n for (var i in routes) {\n let currentRoutes = [routes[i]];\n let currentNodeRoutes = [nodeRoutes[i]];\n // let filteredAllocationsAndOutputs = getOptOutputVecRefined(currentRoutes, currentNodeRoutes, totalInput);\n let filteredAllocationsAndOutputs = getOptOutputVec(\n currentRoutes,\n currentNodeRoutes,\n totalInput\n );\n\n let filteredAllocations = filteredAllocationsAndOutputs.allocations;\n let filteredOutputs = filteredAllocationsAndOutputs.result;\n // console.log('FILTERED ALLOCATIONS:');\n // console.log(filteredAllocations.map((i) => i.toString()));\n // console.log(filteredOutputs);\n let totalOutput = filteredOutputs.reduce((a, b) => a.plus(b), new Big(0));\n if (new Big(totalOutput).gt(currentBestOutput)) {\n bestAllocations = filteredAllocations;\n currentBestOutput = totalOutput;\n // console.log('BEST OUTPUT IS NOW... ', currentBestOutput.toString());\n bestRoutes = currentRoutes;\n bestNodeRoutes = currentNodeRoutes;\n bestRoutesAreParallel = false;\n // bestResDict = currentResDict\n }\n }\n }\n\n // resDict = bestResDict;\n\n allocations = bestAllocations;\n\n // let outputs = resDict.outputs;\n routes = bestRoutes;\n nodeRoutes = bestNodeRoutes;\n\n if (routes.length < 1) {\n return [];\n }\n\n // check the top numberOfRoutesLimit\n // console.log('initial allocations are...');\n // console.log(allocations.map((a) => a.toString()));\n // console.log('fixed allocations are...');\n // console.log(allocations.map((a) => new Big(a).toFixed()));\n //SORT BY ALLOCATIONS\n let allSortedIndices = argsort(allocations.map(a => new Big(a)));\n if (bestRoutesAreParallel) {\n numberOfRoutesLimit = 4;\n }\n let sortedIndices = allSortedIndices.slice(0, numberOfRoutesLimit);\n\n // console.log('sorted Indices are');\n // console.log(sortedIndices);\n var filteredRoutes = [];\n var filteredNodeRoutes = [];\n for (var i in sortedIndices) {\n let index = sortedIndices[i];\n filteredRoutes.push(routes[index]);\n filteredNodeRoutes.push(nodeRoutes[index]);\n }\n\n // console.log('filteredRoutes are ...');\n // console.log(filteredRoutes);\n for (var i in filteredRoutes) {\n if (!filteredRoutes[i].length) {\n filteredRoutes[i] = [filteredRoutes[i]];\n }\n }\n // console.log('filtered Node routes are...');\n // console.log(filteredNodeRoutes);\n\n // THE BELOW CODE WILL ENSURE THAT ROUTES ARE INDEPENDENT (e.g. THE ROUTES WILL NOT SHARE A POOL)\n\n let route1PoolIds = filteredRoutes[0].map(pool => pool.id);\n // console.log('route 1 pool ids:');\n // console.log(route1PoolIds);\n if (filteredRoutes.length > 1) {\n let route2PoolIds = filteredRoutes[1].map(pool => pool.id);\n // console.log('route 2 pool ids:');\n // console.log(route2PoolIds);\n var sharedRoute = false;\n for (var i in route2PoolIds) {\n if (route1PoolIds.includes(route2PoolIds[i])) {\n // a pool was shared between routes. need to calculate a new second route.\n // console.log(\n // 'a pool was shared between routes. going to calculate a new second route'\n // );\n sharedRoute = true;\n break;\n }\n }\n }\n\n // NOTE -- this is a much simpler solution than that below. Instead of choosing the next best second route that doesn't share a\n // pool with the first route, we could just use the first route and allocate all inputs to it.\n // but, for larger transactions, it would be better to have option of two independent routes to spread out slippage.\n\n // if (sharedRoute) {\n // filteredRoutes = [filteredRoutes[0]];\n // filteredNodeRoutes = [filteredNodeRoutes[0]];\n // // TODO -- later can add in a second route that doesn't share a pool with first.\n // }\n\n // We're going to find the next-highest allocation route that doesn't share a pool with the first route.\n if (sharedRoute) {\n let allFilteredRoutes = [];\n let allFilteredNodeRoutes = [];\n for (var i in allSortedIndices) {\n allFilteredRoutes.push(routes[allSortedIndices[i]]);\n allFilteredNodeRoutes.push(nodeRoutes[allSortedIndices[i]]);\n }\n let firstRoute = allFilteredRoutes[0];\n // console.log('first route is...');\n // console.log(firstRoute);\n let firstRoutePoolIds = firstRoute.map(pool => pool.id);\n for (var i in allFilteredRoutes) {\n if (!allFilteredRoutes[i].length) {\n allFilteredRoutes[i] = [allFilteredRoutes[i]];\n }\n }\n // console.log('FIRST ROUTE POOL IDS ARE');\n // console.log(firstRoutePoolIds);\n let allFilteredRouteIds = allFilteredRoutes.map(route =>\n route.map(pool => pool.id)\n );\n // console.log('allFilteredRouteIds are ...');\n // console.log(allFilteredRouteIds);\n for (var i in allFilteredRouteIds) {\n // console.log('i is', i);\n // console.log('ALL FILTERED ROUTES [i] IS...');\n // console.log(allFilteredRouteIds[i]);\n for (var j in allFilteredRouteIds[i]) {\n // console.log('j is', j);\n // console.log('ALL FILTERED ROUTES [i][j] IS...');\n // console.log(allFilteredRouteIds[i][j]);\n if (firstRoutePoolIds.includes(allFilteredRouteIds[i][j])) {\n break;\n }\n\n var secondRoute = allFilteredRoutes[i];\n if (!secondRoute.length) {\n secondRoute = [secondRoute];\n }\n filteredRoutes = [allFilteredRoutes[0], secondRoute];\n filteredNodeRoutes = [\n allFilteredNodeRoutes[0],\n allFilteredNodeRoutes[i],\n ];\n break;\n }\n }\n // console.log('new filteredRoutes are ...');\n // console.log(filteredRoutes);\n // console.log('new filtered Node routes are...');\n // console.log(filteredNodeRoutes);\n }\n\n // let filteredAllocations_check = getBestOptInput(\n // filteredRoutes,\n // filteredNodeRoutes,\n // totalInput\n // );\n // let filteredAllocationsAndOutputs = getOptOutputVecRefined(filteredRoutes, filteredNodeRoutes, totalInput);\n let filteredAllocationsAndOutputs = getOptOutputVec(\n filteredRoutes,\n filteredNodeRoutes,\n totalInput\n );\n\n let filteredAllocations = filteredAllocationsAndOutputs.allocations;\n let filteredOutputs = filteredAllocationsAndOutputs.result;\n\n filteredAllocations = checkIntegerSumOfAllocations(\n filteredAllocations,\n totalInput\n ).map(stringAllo => new Big(stringAllo));\n\n let hops = getActionListFromRoutesAndAllocations(\n filteredRoutes,\n filteredNodeRoutes,\n filteredAllocations\n );\n\n var actions = [];\n // console.log('hops are...');\n // console.log(hops);\n\n for (var i in hops) {\n let hopInputTokenMeta = allTokens[hops[i].inputToken]\n ? allTokens[hops[i].inputToken]\n : await ftGetTokenMetadata(hops[i].inputToken, 'token input');\n\n let hopOutputTokenMeta = allTokens[hops[i].outputToken]\n ? allTokens[hops[i].outputToken]\n : await ftGetTokenMetadata(hops[i].outputToken, 'token sm');\n let hopOutputTokenDecimals = hopOutputTokenMeta.decimals;\n\n let expectedHopOutput = getOutputSingleHop(\n hops[i].pool,\n hops[i].inputToken,\n hops[i].outputToken,\n hops[i].allocation\n );\n let decimalEstimate = new Big(expectedHopOutput)\n .div(new Big(10).pow(hopOutputTokenDecimals))\n .toString();\n\n // Need to check if expected Hop Output is > 1. If not, then cull the corresponding pool and re-calculate.\n if (new Big(expectedHopOutput).lt(new Big(1))) {\n // purge the pool and recalculate.\n\n decimalsCulledPoolIds.push(hops[i].pool.id);\n return getSmartRouteSwapActions(\n pools,\n inputToken,\n outputToken,\n totalInput,\n allTokens,\n (maxPathLength = maxPathLength),\n (threshold = threshold),\n (numberOfRoutesLimit = numberOfRoutesLimit),\n (MAX_NUMBER_PARALLEL_POOLS = MAX_NUMBER_PARALLEL_POOLS),\n (decimalsCulledPoolIds = decimalsCulledPoolIds)\n );\n }\n\n if (\n hops[i].inputToken == inputToken &&\n hops[i].outputToken == outputToken\n ) {\n var status = 'parallel swap';\n } else {\n var status = 'stableSmart';\n }\n\n let tokens = await Promise.all(\n hops[i].nodeRoute.map(async t =>\n allTokens[t] ? allTokens[t] : await ftGetTokenMetadata(t, 'smart')\n )\n );\n\n actions[i] = {\n estimate: decimalEstimate,\n pool: {\n fee: hops[i].pool.fee,\n gamma_bps: new Big(10000).minus(new Big(hops[i].pool.fee)), //.div(new Big(10000)), //hops[i].pool.gamma, //new Big(10000).minus(new Big(hops[i].pool.fee)).div(new Big(10000));\n id: hops[i].pool.id,\n partialAmountIn: new Big(hops[i].allocation).round().toString(),\n supplies: {\n [hops[i].pool.token1Id]: hops[i].pool.token1Supply,\n [hops[i].pool.token2Id]: hops[i].pool.token2Supply,\n },\n token0_ref_price: hops[i].pool.token0_price,\n tokenIds: [hops[i].pool.token1Id, hops[i].pool.token2Id],\n Dex: hops[i].pool.Dex,\n },\n status: status,\n token: hopInputTokenMeta,\n outputToken: hops[i].outputToken,\n inputToken: hops[i].inputToken,\n nodeRoute: hops[i].nodeRoute,\n route: hops[i].route,\n allRoutes: hops[i].allRoutes,\n allNodeRoutes: hops[i].allNodeRoutes,\n totalInputAmount: hops[i].totalInputAmount,\n allAllocations: hops[i].allAllocations,\n tokens: tokens,\n routeInputToken: inputToken,\n routeOutputToken: outputToken,\n overallPriceImpact: '0',\n };\n // console.log('INPUT TOKEN IS...');\n // console.log(hops[i].inputToken);\n actions[i].pool.x = actions[i].pool.supplies[hops[i].inputToken];\n actions[i].pool.y = actions[i].pool.supplies[hops[i].outputToken];\n }\n // now set partial amount in for second hops equal to zero:\n // also, set the total price impact value.\n let overallPriceImpact = await calculateSmartRouteV2PriceImpact(\n actions,\n allTokens\n );\n for (var i in actions) {\n let action = actions[i];\n action.overallPriceImpact = overallPriceImpact;\n if (action.outputToken === outputToken && action.inputToken != inputToken) {\n // only want to set second hop partial amount in to zero\n action.pool.partialAmountIn = '0';\n }\n }\n\n return actions;\n}\n\nasync function calculateSmartRouteV2PriceImpact(actions, allTokens) {\n // the goal is to take a weighted average of the price impact per route, treating each one at a time.\n // for single hop (parallel swaps), the price impact is calculated as before.\n // for double-hop, the market price, P, is determined using reserves of tokens in each pool in the route.\n // in both cases, we compare the 'market price', P , determined solely by reserves in pools, and the actual\n // average price, R, expected to be paid in the transaction.\n // the price impact is then defined as (P-R)/R * 100 and is a percentage number, returned as a string.\n\n let deltaY = actions\n .filter(a => a.outputToken == a.routeOutputToken)\n .map(a => new Big(a.estimate))\n .reduce((a, b) => a.plus(b), new Big(0));\n // console.log('DELTA Y IS...');\n // console.log(deltaY.toString());\n\n let inputTokenMeta = actions[0].tokens[0];\n let deltaX = new Big(actions[0].totalInputAmount).div(\n new Big(10).pow(inputTokenMeta.decimals)\n );\n let R = deltaY.div(deltaX);\n var P = new Big(0);\n let routes = actions[0].allRoutes;\n let nodeRoutes = actions[0].allNodeRoutes;\n let allocations = actions[0].allAllocations.map(a => new Big(a));\n let totalAllocations = allocations\n .map(a => new Big(a))\n .reduce((a, b) => a.plus(b), new Big(0));\n\n let weights = allocations.map(a => a.div(totalAllocations));\n\n for (var i in routes) {\n let route = routes[i];\n let nodeRoute = nodeRoutes[i];\n let tokens = await Promise.all(\n nodeRoute.map(async t => {\n return allTokens[t]\n ? allTokens[t]\n : await ftGetTokenMetadata(t, 'sm routes');\n })\n );\n let weight = weights[i];\n if (route.length == 1) {\n let num = new Big(route[0].reserves[nodeRoute[0]]).div(\n new Big(10).pow(tokens[0].decimals)\n );\n let denom = new Big(route[0].reserves[nodeRoute[1]]).div(\n new Big(10).pow(tokens[1].decimals)\n );\n var routeMarketPrice = num.div(denom);\n } else {\n let num1 = new Big(route[0].reserves[nodeRoute[0]]).div(\n new Big(10).pow(tokens[0].decimals)\n );\n\n let denom1 = new Big(route[0].reserves[nodeRoute[1]]).div(\n new Big(10).pow(tokens[1].decimals)\n );\n\n let num2 = new Big(route[1].reserves[nodeRoute[1]]).div(\n new Big(10).pow(tokens[1].decimals)\n );\n\n let denom2 = new Big(route[1].reserves[nodeRoute[2]]).div(\n new Big(10).pow(tokens[2].decimals)\n );\n\n var routeMarketPrice = num1\n .div(denom1)\n .times(num2)\n .div(denom2);\n }\n P = P.plus(weight.times(new Big(1).div(routeMarketPrice)));\n }\n\n let priceImpact = P.minus(R)\n .div(R)\n .times(new Big(100))\n .toString();\n return priceImpact;\n}\n\nfunction decor(arr) {\n var res = [];\n for (var i in arr) {\n res.push([arr[i], i]);\n }\n return res;\n}\nfunction argsort(arr) {\n let undecor = a => a[1]; // leave only index\n let decorated = decor(arr);\n\n return decorated\n .sort((a, b) => new Big(b[0]).minus(new Big(a[0])))\n .map(undecor);\n}\n\nfunction getPoolsByToken1ORToken2(pools, token1, token2) {\n let filteredPools = pools.filter(\n item =>\n item.token1Id === token1 ||\n item.token2Id === token1 ||\n item.token1Id === token2 ||\n item.token2Id === token2\n );\n return filteredPools;\n}\n\nfunction getPoolsByToken1ANDToken2(\n pools,\n token1,\n token2,\n cullZeroLiquidityPools = true\n) {\n let filteredPools = pools.filter(\n item =>\n (item.token1Id === token1 && item.token2Id === token2) ||\n (item.token1Id === token2 && item.token2Id === token1)\n );\n if (cullZeroLiquidityPools) {\n filteredPools = filteredPools.filter(\n item => item.token1Supply != '0' && item.token2Supply != '0'\n );\n }\n return filteredPools;\n}\n\nfunction getLiqudityOfPoolsFromList(pools) {\n let liquidities = [];\n for (var poolInd in pools) {\n let pool = pools[poolInd];\n pool.amounts = [pool.token1Supply, pool.token2Supply];\n let poolBigAmounts = pool.amounts.map(item => new Big(item));\n let liquidity = poolBigAmounts[0].times(poolBigAmounts[1]);\n liquidities.push(liquidity);\n }\n return liquidities;\n}\n\nfunction getNormalizedLiquiditiesFromList(pools) {\n let liquidities = getLiqudityOfPoolsFromList(pools);\n let maxLiq = bigMax(liquidities);\n let normalizedLiquidities = liquidities.map(item => item.div(maxLiq));\n return normalizedLiquidities;\n}\n\nfunction bigMax(arrayOfBigs) {\n if (arrayOfBigs.length < 1) {\n return null;\n }\n let maxElem = arrayOfBigs[0];\n for (var ind in arrayOfBigs) {\n let val = arrayOfBigs[ind];\n if (val.gt(maxElem)) {\n maxElem = val;\n }\n }\n return maxElem;\n}\n\nfunction cullPoolsWithInsufficientLiquidity(pools, threshold = 0.0001) {\n var thresh = new Big(threshold);\n let normLiq = getNormalizedLiquiditiesFromList(pools);\n let filteredPools = [];\n for (var i = 0; i < normLiq.length; i++) {\n if (normLiq[i] > thresh) {\n filteredPools.push(pools[i]);\n }\n }\n return filteredPools;\n}\n\nfunction cartesianProduct(a) {\n let result = a.reduce((a, b) => a.flatMap(d => b.map(e => [d, e].flat())));\n return result;\n}\n\nfunction addEdge(g, edge) {\n let src = edge[0];\n let dst = edge[1];\n if (Object.keys(g).includes(src)) {\n if (!Object.keys(g[src]).includes(dst)) {\n g[src][dst] = 1;\n }\n } else {\n g[src] = {};\n g[src][dst] = 1;\n }\n if (Object.keys(g).includes(dst)) {\n if (!Object.keys(g[dst]).includes(src)) {\n g[dst][src] = 1;\n }\n } else {\n g[dst] = {};\n g[dst][src] = 1;\n }\n}\n\nfunction addEdges(g, edgeList) {\n for (var n in edgeList) {\n let edge = edgeList[n];\n addEdge(g, edge);\n }\n}\n\nfunction deleteEdge(g, edge) {\n let gNew = JSON.parse(JSON.stringify(g)); // using this to deep clone graph structure\n let e1 = edge[0];\n let e2 = edge[1];\n if (Object.keys(gNew).includes(e1)) {\n if (Object.keys(gNew[e1]).includes(e2)) {\n delete gNew[e1][e2];\n }\n }\n if (Object.keys(gNew).includes(e2)) {\n if (Object.keys(gNew[e2]).includes(e1)) {\n delete gNew[e2][e1];\n }\n }\n return gNew;\n}\n\nfunction deleteNode(g, node) {\n let gNew = JSON.parse(JSON.stringify(g)); // using this to deep clone graph structure\n if (Object.keys(gNew).includes(node)) {\n delete gNew[node];\n }\n let keys = Object.keys(gNew);\n for (var nodeInd in keys) {\n let nodeNow = keys[nodeInd];\n if (Object.keys(gNew[nodeNow]).includes(node)) {\n delete gNew[nodeNow][node];\n }\n }\n return gNew;\n}\n\nfunction dijkstra(graph, s) {\n var solutions = {};\n solutions[s] = {};\n solutions[s].path = [];\n solutions[s].dist = 0;\n\n while (true) {\n var parent = null;\n var nearest = null;\n var dist = Infinity;\n\n //for each existing solution\n for (var n in solutions) {\n if (!solutions[n]) {\n solutions[n] = {};\n }\n if (!solutions[n].path) continue;\n var ndist = solutions[n].dist;\n var adj = graph[n];\n //for each of its adjacent nodes...\n for (var a in adj) {\n //without a solution already...\n if (!solutions[a]) {\n solutions[a] = {};\n }\n if (solutions[a].path) continue;\n //choose nearest node with lowest *total* cost\n var d = adj[a] + ndist;\n if (d < dist) {\n //reference parent\n parent = solutions[n].path;\n nearest = a;\n dist = d;\n }\n }\n }\n\n //no more solutions\n if (dist === Infinity) {\n break;\n }\n\n //extend parent's solution path\n solutions[nearest].path = parent.concat(nearest);\n //extend parent's cost\n solutions[nearest].dist = dist;\n }\n\n return solutions;\n}\n\nfunction shortestPath(g, src, dst, ignore_nodes = [], ignore_edges = []) {\n let gTemp = JSON.parse(JSON.stringify(g)); // using this to deep clone graph structure. If we can use lodash, could use _.cloneDeep(obj)\n // remove nodes\n for (var nodeInd in ignore_nodes) {\n let nodeNow = ignore_nodes[nodeInd];\n gTemp = deleteNode(gTemp, nodeNow);\n }\n // remove edges\n for (var edgeInd in ignore_edges) {\n let edgeNow = ignore_edges[edgeInd];\n gTemp = deleteEdge(gTemp, edgeNow);\n }\n let solution = dijkstra(gTemp, src)[dst];\n solution.path.unshift(src); // original algorithm doesn't include source node in path\n return solution;\n}\n\nfunction* count(firstval = 0, step = 1) {\n let x = firstval;\n while (true) {\n yield x;\n x = x + 1;\n }\n}\n\nclass PathBuffer {\n constructor() {\n this.paths = [];\n this.sortedpaths = [];\n //this.counter = count();\n }\n len() {\n return this.sortedpaths.length;\n }\n\n push(cost, path) {\n if (path && !arrayContains(this.paths, path)) {\n this.sortedpaths.push([cost, path]);\n this.sortedpaths.sort(function(a, b) {\n return a[0] - b[0];\n });\n //heappush(this.sortedpaths, (cost, this.counter.next().value,path));\n this.paths.push(path);\n }\n }\n\n pop() {\n //let val = heappop(this.sortedpaths);\n let val = this.sortedpaths.shift();\n let cost = val[0];\n let path = val[1];\n this.paths.splice(this.paths.indexOf(path), 1);\n return path;\n }\n}\n\nfunction arrayEquals(a, b) {\n return (\n Array.isArray(a) &&\n Array.isArray(b) &&\n a.length === b.length &&\n a.every((val, index) => val === b[index])\n );\n}\n\nfunction arrayContains(arr, obj) {\n // checks to see if the input array contains a reference object, obj, using\n // JSON.stringify() .\n let obj_json = JSON.stringify(obj);\n for (var itemInd in arr) {\n if (JSON.stringify(arr[itemInd]) == obj_json) {\n return true;\n }\n }\n return false;\n}\n\nfunction* yenFromPy(g, source, target) {\n //adapted from the python implementation in networkx.algorithms.simple_paths.shortest_simple_paths()\n let listA = [];\n let listB = new PathBuffer();\n let prev_path = null;\n\n while (true) {\n if (!prev_path) {\n let sol = shortestPath(g, source, target);\n let length = sol.dist;\n let path = sol.path;\n listB.push(length, path);\n } else {\n let ignore_nodes = [];\n let ignore_edges = [];\n for (var i = 1; i < prev_path.length; i++) {\n let root = prev_path.slice(0, i);\n let root_length = root.length;\n for (var pathInd in listA) {\n let path = listA[pathInd];\n\n if (arrayEquals(path.slice(0, i), root)) {\n let edgeToIgnore = [path[i - 1], path[i]];\n ignore_edges.push(edgeToIgnore);\n }\n }\n try {\n let sol = shortestPath(\n g,\n root[root.length - 1],\n target,\n (ignore_nodes = ignore_nodes),\n (ignore_edges = ignore_edges)\n );\n let length = sol.dist;\n let spur = sol.path;\n let path = root.slice(0, root.length - 1).concat(spur);\n listB.push(root_length + length, path);\n } catch (e) {\n //console.log(`yenFromPy error was... ${e}`)\n //dont do anything.\n }\n ignore_nodes.push(root[root.length - 1]);\n }\n }\n if (listB.sortedpaths) {\n try {\n let path = listB.pop();\n yield path;\n listA.push(path);\n prev_path = path;\n } catch (e) {\n break;\n }\n } else {\n break;\n }\n }\n}\n\nfunction getKShortestPaths(g, source, target, k, maxPathLength = 3) {\n let paths = [];\n if (maxPathLength < 2) {\n var maxPathLength = 2;\n }\n let gen = yenFromPy(g, source, target);\n for (var n = 1; n <= k; n++) {\n try {\n let res = gen.next().value;\n if (res && !arrayContains(paths, res)) {\n if (res.length > maxPathLength) {\n // console.log(\n // `found all hops of length ${\n // maxPathLength - 1\n // } or less... breaking out of generator`\n // );\n break;\n }\n paths.push(res);\n }\n } catch (e) {\n break;\n }\n }\n return paths;\n}\n\nasync function getPathsFromPools(\n pools,\n inputToken,\n outputToken,\n maxPathLength = 3\n) {\n let graph = getGraphFromPoolList(pools);\n return getKShortestPaths(graph, inputToken, outputToken, 100, maxPathLength);\n}\n\nasync function getAllPathsBelowLengthN(g, source, target, N, limit = 100) {\n // use Yen's algorithm to find the paths of length N or below between source and target nodes in graph g.\n\n let paths = [];\n\n let gen = await yenFromPy(g, source, target);\n let currentPathLength = 0;\n let count = 1;\n while (currentPathLength <= N) {\n // console.log(`CURRENT PATH LENGTH IS ${currentPathLength}`)\n try {\n let res = await gen.next().value;\n // console.log(`RES IS ${res}`)\n if (res && !arrayContains(paths, res)) {\n if (res.length > currentPathLength) {\n currentPathLength = res.length;\n if (currentPathLength > N) {\n break;\n }\n }\n paths.push(res);\n }\n count = count + 1;\n if (count > limit) {\n break;\n }\n } catch (e) {\n // console.log(e)\n break;\n }\n }\n return paths;\n}\n\nfunction getGraphFromPoolList(poolList) {\n let pools = poolList.filter(\n item => item.token1Supply != '0' && item.token2Supply != '0'\n );\n let transitions = pools.map(item => [item.token1Id, item.token2Id]);\n let g = {};\n addEdges(g, transitions);\n return g;\n}\n\n////////////////////////////////////\n\n// MAIN FUNCTION\n\n////////////////////////////////////\n\n// TODO -- incorporate the following integrated function, which tries to\n// account for stablecoins within the context of smart routing.\n\n//TODO -- need the right API / hooks for GETSTABLESWAPACTION function and GETPARALLELSWAPACTIONS functions.\n\n//TODO -- transform the actions generated in this function into tranaction to execute.\n\n//TRYING: GETSTABLESWAPACTION <==> instantSwapGetTransactions\n\nexport async function stableSmart(\n pools,\n inputToken,\n outputToken,\n totalInput,\n allTokens\n) {\n let smartRouteActions = await getSmartRouteSwapActions(\n pools,\n inputToken,\n outputToken,\n totalInput,\n allTokens\n );\n return smartRouteActions;\n}\n\nexport function getExpectedOutputFromActionsORIG(actions, outputToken) {\n return actions\n .filter(item => item.outputToken === outputToken)\n .map(item => new Big(item.estimate))\n .reduce((a, b) => a.plus(b), new Big(0));\n}\n\nfunction getFeeForRoute(route) {\n if (!route.length) {\n route = [route];\n }\n if (route.length == 1) {\n // Single Hop case\n let p = route[0];\n return p.fee;\n } else if (route.length == 2) {\n //Double Hop Case\n let p1 = route[0];\n let p2 = route[1];\n let fee1 = p1.fee;\n let fee2 = p2.fee;\n return fee1 + fee2;\n }\n}\n\nexport function getAverageFeeForRoutes(routes, nodeRoutes, totalInput) {\n let normalizedAllocations = getOptimalAllocationForRoutes(\n routes,\n nodeRoutes,\n totalInput\n ).map(a => a.div(new Big(totalInput)));\n let averageFee = 0;\n for (var i in routes) {\n averageFee += normalizedAllocations[i] * getFeeForRoute(routes[i]);\n }\n return averageFee;\n}\n","import { TokenMetadata, Pool, StablePool, EstimateSwapView } from '../types';\nimport {\n toReadableNumber,\n toNonDivisibleNumber,\n scientificNotationToString,\n} from '../utils';\nimport Big from 'big.js';\nimport { SameInputTokenError, ZeroInputError, NoPoolError } from '../error';\nimport { ONLY_ZEROS, toPrecision } from '../utils';\nimport _ from 'lodash';\nimport { FEE_DIVISOR } from '../constant';\nimport { getSwappedAmount } from '../stable-swap';\nimport { ftGetTokenMetadata, ftGetTokensMetadata } from '../ref';\nimport { isStablePool } from '../utils';\nimport { getTokensTiny } from '../indexer';\nimport {\n getStablePoolDecimal,\n isStablePoolToken,\n poolFormatter,\n} from '../utils';\nimport {\n stableSmart,\n getExpectedOutputFromActionsORIG,\n //@ts-ignore\n} from './smartRoutingLogic.js';\n\nexport enum PoolMode {\n PARALLEL = 'parallel swap',\n SMART = 'smart routing',\n SMART_V2 = 'stableSmart',\n STABLE = 'stable swap',\n}\n\nexport interface SwapParams {\n tokenIn: TokenMetadata;\n tokenOut: TokenMetadata;\n amountIn: string;\n simplePools: Pool[];\n options?: SwapOptions;\n}\n\nexport interface SwapOptions {\n enableSmartRouting?: boolean;\n stablePools?: Pool[];\n stablePoolsDetail?: StablePool[];\n}\n\nexport const getSimplePoolEstimate = ({\n tokenIn,\n tokenOut,\n pool,\n amountIn,\n}: {\n tokenIn: TokenMetadata;\n tokenOut: TokenMetadata;\n pool: Pool;\n amountIn: string;\n}) => {\n const amount_with_fee = Number(amountIn) * (FEE_DIVISOR - pool.fee);\n const in_balance = toReadableNumber(\n tokenIn.decimals,\n pool.supplies[tokenIn.id]\n );\n const out_balance = toReadableNumber(\n tokenOut.decimals,\n pool.supplies[tokenOut.id]\n );\n const estimate = new Big(\n (\n (amount_with_fee * Number(out_balance)) /\n (FEE_DIVISOR * Number(in_balance) + amount_with_fee)\n ).toString()\n ).toFixed();\n\n return {\n estimate,\n pool,\n outputToken: tokenOut.id,\n inputToken: tokenIn.id,\n };\n};\n\nexport const getStablePoolEstimate = ({\n tokenIn,\n tokenOut,\n amountIn,\n stablePool,\n pool,\n}: {\n tokenIn: TokenMetadata;\n tokenOut: TokenMetadata;\n amountIn: string;\n stablePool: StablePool;\n pool?: Pool;\n}) => {\n const STABLE_LP_TOKEN_DECIMALS = getStablePoolDecimal(stablePool);\n\n const [amount_swapped, _, dy] = getSwappedAmount(\n tokenIn.id,\n tokenOut.id,\n amountIn,\n stablePool,\n STABLE_LP_TOKEN_DECIMALS\n );\n\n const amountOut =\n amount_swapped < 0 || isNaN(amount_swapped)\n ? '0'\n : toPrecision(scientificNotationToString(amount_swapped.toString()), 0);\n\n const dyOut =\n amount_swapped < 0 || isNaN(amount_swapped) || isNaN(dy)\n ? '0'\n : toPrecision(scientificNotationToString(dy.toString()), 0);\n\n const rates = stablePool.rates.reduce((acc, cur, i) => {\n return {\n ...acc,\n [stablePool.token_account_ids[i]]: cur,\n };\n }, {});\n\n return {\n estimate: toReadableNumber(STABLE_LP_TOKEN_DECIMALS, amountOut),\n noFeeAmountOut: toReadableNumber(STABLE_LP_TOKEN_DECIMALS, dyOut),\n pool: {\n ...stablePool,\n rates,\n },\n outputToken: tokenOut.id,\n inputToken: tokenIn.id,\n };\n};\n\n/**\n * @description Get the estimate of the amount of tokenOut that can be received\n *\n */\nexport const singlePoolSwap = ({\n tokenIn,\n tokenOut,\n simplePools,\n amountIn,\n stablePools,\n}: {\n tokenIn: TokenMetadata;\n tokenOut: TokenMetadata;\n simplePools: Pool[];\n amountIn: string;\n stablePools?: StablePool[];\n}) => {\n if (!simplePools || simplePools.length === 0) {\n throw NoPoolError;\n }\n\n const parsedAmountIn = toNonDivisibleNumber(tokenIn.decimals, amountIn);\n\n // const pools = simplePools.concat(stablePools);\n\n const simplePoolsThisPair = simplePools.filter(\n p =>\n p.tokenIds.includes(tokenIn.id) &&\n p.tokenIds.includes(tokenOut.id) &&\n (!stablePools || !isStablePool(stablePools, p.id))\n );\n\n const estimatesSimplePool = simplePoolsThisPair.map(pool =>\n getSimplePoolEstimate({\n tokenIn,\n tokenOut,\n pool,\n amountIn,\n })\n );\n\n const stablePoolThisPair = stablePools?.filter(\n sp =>\n sp.token_account_ids.includes(tokenIn.id) &&\n sp.token_account_ids.includes(tokenOut.id)\n );\n\n // different stable lp token decimal for different type of pools\n const estimatesStablePool = stablePoolThisPair?.map(stablePool => {\n return getStablePoolEstimate({\n tokenIn,\n tokenOut,\n amountIn,\n stablePool,\n pool: simplePools.find(p => p.id === stablePool.id) as Pool,\n });\n });\n\n const maxSimplePoolEstimate =\n estimatesSimplePool === undefined || estimatesSimplePool.length === 0\n ? undefined\n : estimatesSimplePool.length === 1\n ? estimatesSimplePool[0]\n : _.maxBy(estimatesSimplePool, estimate => Number(estimate.estimate));\n\n const maxStablePoolEstimate =\n estimatesStablePool === undefined || estimatesStablePool.length === 0\n ? undefined\n : estimatesStablePool.length === 1\n ? estimatesStablePool[0]\n : _.maxBy(estimatesStablePool, estimate => Number(estimate.estimate));\n\n if (!maxStablePoolEstimate && !maxSimplePoolEstimate) throw NoPoolError;\n\n maxSimplePoolEstimate &&\n (maxSimplePoolEstimate.pool.partialAmountIn = parsedAmountIn);\n\n maxStablePoolEstimate &&\n (maxStablePoolEstimate.pool.partialAmountIn = parsedAmountIn);\n\n if (!maxStablePoolEstimate) {\n maxSimplePoolEstimate &&\n (maxSimplePoolEstimate.pool.partialAmountIn = parsedAmountIn);\n\n return maxSimplePoolEstimate;\n } else if (!maxSimplePoolEstimate) {\n return maxStablePoolEstimate;\n } else {\n return Number(maxSimplePoolEstimate?.estimate) >\n Number(maxStablePoolEstimate?.estimate)\n ? maxSimplePoolEstimate\n : maxStablePoolEstimate;\n }\n};\n\nexport const getStablePoolsThisPair = ({\n tokenInId,\n tokenOutId,\n stablePools,\n}: {\n tokenInId: string;\n tokenOutId: string;\n stablePools: Pool[];\n}) => {\n return stablePools.filter(\n p =>\n p.tokenIds.includes(tokenInId) &&\n p.tokenIds.includes(tokenOutId) &&\n tokenInId !== tokenOutId\n );\n};\n\nexport const getPoolsByTokens = ({\n pools,\n tokenInId,\n tokenOutId,\n}: {\n pools: Pool[];\n tokenInId: string;\n tokenOutId: string;\n}) => {\n if (tokenInId === tokenOutId) return [];\n\n return pools.filter(\n p => p.tokenIds.includes(tokenInId) && p.tokenIds.includes(tokenOutId)\n );\n};\n\nexport const getPoolEstimate = async ({\n tokenIn,\n tokenOut,\n amountIn,\n stablePoolDetail,\n pool,\n}: {\n tokenIn: TokenMetadata;\n tokenOut: TokenMetadata;\n amountIn: string;\n pool: Pool;\n stablePoolDetail?: StablePool;\n}) => {\n if (!!stablePoolDetail) {\n return getStablePoolEstimate({\n tokenIn,\n tokenOut,\n stablePool: stablePoolDetail,\n amountIn,\n pool,\n });\n } else {\n return getSimplePoolEstimate({\n tokenIn,\n tokenOut,\n pool,\n amountIn,\n });\n }\n};\n\nexport async function getHybridStableSmart(\n tokenIn: TokenMetadata,\n tokenOut: TokenMetadata,\n amountIn: string,\n stablePools: Pool[],\n stablePoolsDetail: StablePool[],\n simplePools: Pool[],\n allTokens: Record<string, TokenMetadata>\n) {\n if (\n !isStablePoolToken(stablePoolsDetail, tokenIn.id) &&\n !isStablePoolToken(stablePoolsDetail, tokenOut.id)\n ) {\n return { actions: [], estimate: '0' };\n }\n\n const stablePoolsDetailById = stablePoolsDetail.reduce((acc, cur) => {\n return {\n ...acc,\n [cur.id]: cur,\n };\n }, {} as Record<string, StablePool>);\n\n const parsedAmountIn = toNonDivisibleNumber(tokenIn.decimals, amountIn);\n\n let pool1: Pool, pool2: Pool;\n\n let pools1: Pool[] = [];\n let pools2: Pool[] = [];\n\n let pools1Right: Pool[] = [];\n let pools2Right: Pool[] = [];\n\n let candidatePools: Pool[][] = [];\n\n /**\n * find possible routes for this pair\n *\n *\n */\n\n if (isStablePoolToken(stablePoolsDetail, tokenIn.id)) {\n // first hop will be through stable pool.\n pools1 = stablePools.filter(pool => pool.tokenIds.includes(tokenIn.id));\n\n const otherStables = pools1\n .map(pool => pool.tokenIds.filter(id => id !== tokenIn.id))\n .flat();\n\n for (var otherStable of otherStables) {\n let stablePoolsThisPair = getStablePoolsThisPair({\n tokenInId: otherStable,\n tokenOutId: tokenOut.id,\n stablePools,\n });\n\n let tmpPools = getPoolsByTokens({\n tokenInId: otherStable,\n tokenOutId: tokenOut.id,\n pools: simplePools,\n });\n const tobeAddedPools = tmpPools.concat(stablePoolsThisPair);\n pools2.push(\n ...tobeAddedPools.filter(p => {\n const supplies = Object.values(p.supplies);\n return new Big(supplies[0]).times(new Big(supplies[1])).gt(0);\n })\n );\n }\n }\n\n if (isStablePoolToken(stablePoolsDetail, tokenOut.id)) {\n // second hop will be through stable pool.\n pools2Right = stablePools.filter(pool =>\n pool.tokenIds.includes(tokenOut.id)\n );\n\n const otherStables = pools2Right\n .map(pool => pool.tokenIds.filter(id => id !== tokenOut.id))\n .flat();\n for (let otherStable of otherStables) {\n let stablePoolsThisPair = getStablePoolsThisPair({\n tokenInId: tokenIn.id,\n tokenOutId: otherStable,\n stablePools,\n });\n\n let tmpPools = getPoolsByTokens({\n tokenInId: tokenIn.id,\n tokenOutId: otherStable,\n pools: simplePools,\n });\n\n const tobeAddedPools = tmpPools.concat(stablePoolsThisPair);\n\n pools1Right.push(\n ...tobeAddedPools.filter(p => {\n const supplies = Object.values(p.supplies);\n return new Big(supplies[0]).times(new Big(supplies[1])).gt(0);\n })\n );\n }\n }\n\n // find candidate pools\n\n for (let p1 of pools1) {\n let middleTokens = p1.tokenIds.filter((id: string) => id !== tokenIn.id);\n for (let middleToken of middleTokens) {\n let p2s = pools2.filter(\n p =>\n p.tokenIds.includes(middleToken) &&\n p.tokenIds.includes(tokenOut.id) &&\n middleToken !== tokenOut.id\n );\n let p2 = _.maxBy(p2s, p =>\n Number(\n new Big(toReadableNumber(tokenOut.decimals, p.supplies[tokenOut.id]))\n )\n );\n\n if (middleToken === tokenOut.id) {\n p2 = p1;\n }\n\n if (p1 && p2) {\n if (p1.id === p2.id) candidatePools.push([p1]);\n else candidatePools.push([p1, p2]);\n }\n }\n }\n for (let p1 of pools1Right) {\n let middleTokens = p1.tokenIds.filter((id: string) => id !== tokenIn.id);\n for (let middleToken of middleTokens) {\n let p2s = pools2Right.filter(\n p =>\n p.tokenIds.includes(middleToken) &&\n p.tokenIds.includes(tokenOut.id) &&\n middleToken !== tokenOut.id\n );\n let p2 = _.maxBy(p2s, p =>\n Number(\n new Big(toReadableNumber(tokenOut.decimals, p.supplies[tokenOut.id]))\n )\n );\n\n if (middleToken === tokenOut.id) {\n p2 = p1;\n }\n\n if (p1 && p2) {\n if (p1.id === p2.id) candidatePools.push([p1]);\n else candidatePools.push([p1, p2]);\n }\n }\n }\n\n if (candidatePools.length > 0) {\n const tokensMedata = await ftGetTokensMetadata(\n candidatePools.map(cp => cp.map(p => p.tokenIds).flat()).flat(),\n allTokens\n );\n\n const BestPoolPair =\n candidatePools.length === 1\n ? candidatePools[0]\n : _.maxBy(candidatePools, poolPair => {\n // only one pool case, only for stable tokens\n if (poolPair.length === 1) {\n if (isStablePool(stablePoolsDetail, poolPair[0].id)) {\n const stablePoolThisPair = getStablePoolsThisPair({\n tokenInId: tokenIn.id,\n tokenOutId: tokenOut.id,\n stablePools,\n })[0];\n\n const stablePoolDetailThisPair = stablePoolsDetail.find(\n spd => spd.id === stablePoolThisPair.id\n );\n\n return Number(\n getStablePoolEstimate({\n tokenIn,\n tokenOut,\n stablePool: stablePoolDetailThisPair as StablePool,\n amountIn,\n pool: poolPair[0],\n }).estimate\n );\n } else {\n return Number(\n getSimplePoolEstimate({\n tokenIn,\n tokenOut,\n amountIn,\n pool: poolPair[0],\n }).estimate\n );\n }\n }\n\n const [tmpPool1, tmpPool2] = poolPair;\n const tokenMidId = poolPair[0].tokenIds.find(\n (t: string) =>\n poolPair[1].tokenIds.includes(t) &&\n t !== tokenIn.id &&\n t !== tokenOut.id\n );\n\n const tokenMidMeta = tokensMedata[tokenMidId!];\n\n const estimate1 = {\n ...(isStablePool(stablePoolsDetail, tmpPool1.id)\n ? getStablePoolEstimate({\n tokenIn,\n tokenOut: tokenMidMeta,\n amountIn,\n stablePool: stablePoolsDetailById[tmpPool1.id],\n pool: tmpPool1,\n })\n : getSimplePoolEstimate({\n tokenIn,\n tokenOut: tokenMidMeta,\n amountIn,\n pool: tmpPool1,\n })),\n status: PoolMode.SMART,\n };\n\n const estimate2 = {\n ...(isStablePool(stablePoolsDetail, tmpPool2.id)\n ? getStablePoolEstimate({\n tokenIn: tokenMidMeta,\n tokenOut,\n amountIn: estimate1.estimate,\n stablePool: stablePoolsDetailById[tmpPool2.id],\n pool: tmpPool2,\n })\n : getSimplePoolEstimate({\n tokenIn: tokenMidMeta,\n tokenOut,\n pool: tmpPool2,\n amountIn: estimate1.estimate,\n })),\n status: PoolMode.SMART,\n };\n\n return Number(estimate2.estimate);\n });\n\n // one pool case only get best price\n\n if (!BestPoolPair) return { actions: [], estimate: '0' };\n\n if (BestPoolPair.length === 1) {\n const bestPool = BestPoolPair[0];\n const estimate = await getPoolEstimate({\n tokenIn,\n tokenOut,\n amountIn,\n pool: bestPool,\n stablePoolDetail: stablePoolsDetailById[bestPool.id],\n });\n\n return {\n actions: [\n {\n ...estimate,\n status: PoolMode.STABLE,\n\n pool: { ...estimate.pool, partialAmountIn: parsedAmountIn },\n tokens: [tokenIn, tokenOut],\n inputToken: tokenIn.id,\n outputToken: tokenOut.id,\n totalInputAmount: toNonDivisibleNumber(tokenIn.decimals, amountIn),\n },\n ],\n estimate: estimate.estimate,\n };\n }\n\n // two pool case get best price\n [pool1, pool2] = BestPoolPair;\n\n const tokenMidId = BestPoolPair[0].tokenIds.find(\n (t: string) =>\n BestPoolPair[1].tokenIds.includes(t) &&\n t !== tokenIn.id &&\n t !== tokenOut.id\n );\n\n const tokenMidMeta =\n allTokens[tokenMidId!] ||\n (await ftGetTokenMetadata(tokenMidId!, 'hybridSmartRoutingEstimate'));\n\n const estimate1 = {\n ...(isStablePool(stablePoolsDetail, pool1.id)\n ? getStablePoolEstimate({\n tokenIn,\n tokenOut: tokenMidMeta,\n amountIn,\n stablePool: stablePoolsDetailById[pool1.id],\n pool: pool1,\n })\n : getSimplePoolEstimate({\n tokenIn,\n tokenOut: tokenMidMeta,\n amountIn,\n pool: pool1,\n })),\n tokens: [tokenIn, tokenMidMeta, tokenOut],\n inputToken: tokenIn.id,\n outputToken: tokenMidMeta.id,\n status: PoolMode.SMART,\n };\n\n estimate1.pool = {\n ...estimate1.pool,\n partialAmountIn: parsedAmountIn,\n };\n\n const estimate2 = {\n ...(isStablePool(stablePoolsDetail, pool2.id)\n ? getStablePoolEstimate({\n tokenIn: tokenMidMeta,\n tokenOut,\n amountIn: estimate1.estimate,\n stablePool: stablePoolsDetailById[pool2.id],\n pool: pool2,\n })\n : getSimplePoolEstimate({\n tokenIn: tokenMidMeta,\n tokenOut,\n amountIn: estimate1.estimate,\n pool: pool2,\n })),\n\n tokens: [tokenIn, tokenMidMeta, tokenOut],\n inputToken: tokenMidMeta.id,\n outputToken: tokenOut.id,\n status: PoolMode.SMART,\n };\n\n return { actions: [estimate1, estimate2], estimate: estimate2.estimate };\n }\n\n return { actions: [], estimate: '0' };\n}\n\n// simple pools and stable pools for this pair\nexport const estimateSwap = async ({\n tokenIn,\n tokenOut,\n amountIn,\n simplePools,\n options,\n}: SwapParams) => {\n if (tokenIn.id === tokenOut.id) throw SameInputTokenError;\n\n if (ONLY_ZEROS.test(amountIn)) throw ZeroInputError;\n\n const { enableSmartRouting, stablePools, stablePoolsDetail } = options || {};\n\n const parsedAmountIn = toNonDivisibleNumber(tokenIn.decimals, amountIn);\n\n let singleRouteEstimate: EstimateSwapView[] = [];\n\n try {\n const estimate = singlePoolSwap({\n tokenIn,\n tokenOut,\n simplePools,\n amountIn,\n stablePools: stablePoolsDetail,\n });\n\n singleRouteEstimate = [\n {\n ...estimate,\n status: PoolMode.PARALLEL,\n pool: { ...estimate?.pool, partialAmountIn: parsedAmountIn },\n totalInputAmount: toNonDivisibleNumber(tokenIn.decimals, amountIn),\n tokens: [tokenIn, tokenOut],\n },\n ] as EstimateSwapView[];\n if (!enableSmartRouting) {\n return singleRouteEstimate;\n }\n } catch (error) {\n if (!enableSmartRouting) throw error;\n }\n\n const inputPools = simplePools.map(p => poolFormatter(p));\n\n const allTokens = (await getTokensTiny()) as Record<string, TokenMetadata>;\n\n const simplePoolSmartRoutingActions = await stableSmart(\n inputPools,\n tokenIn.id,\n tokenOut.id,\n parsedAmountIn,\n allTokens\n );\n\n const simplePoolSmartRoutingEstimate = getExpectedOutputFromActionsORIG(\n simplePoolSmartRoutingActions,\n tokenOut.id\n ).toString();\n\n const hybridSmartRoutingRes = await getHybridStableSmart(\n tokenIn,\n tokenOut,\n amountIn,\n stablePools || [],\n stablePoolsDetail || [],\n simplePools,\n allTokens\n );\n\n const hybridSmartRoutingEstimate = hybridSmartRoutingRes.estimate.toString();\n\n if (\n new Big(simplePoolSmartRoutingEstimate || '0').gte(\n hybridSmartRoutingEstimate || '0'\n )\n ) {\n if (!simplePoolSmartRoutingActions?.length) throw NoPoolError;\n\n if (\n typeof singleRouteEstimate !== 'undefined' &&\n singleRouteEstimate &&\n singleRouteEstimate?.[0]?.estimate &&\n new Big(singleRouteEstimate[0].estimate || '0').gt(\n simplePoolSmartRoutingEstimate || '0'\n )\n ) {\n return singleRouteEstimate;\n }\n return simplePoolSmartRoutingActions as EstimateSwapView[];\n } else {\n if (\n typeof singleRouteEstimate !== 'undefined' &&\n singleRouteEstimate &&\n singleRouteEstimate?.[0]?.estimate &&\n new Big(singleRouteEstimate[0].estimate || '0').gt(\n hybridSmartRoutingEstimate || '0'\n )\n ) {\n return singleRouteEstimate;\n }\n\n return hybridSmartRoutingRes.actions as EstimateSwapView[];\n }\n};\n","import {\n Pool,\n PoolRPCView,\n StablePool,\n SmartRoutingInputPool,\n Transaction,\n EstimateSwapView,\n} from './types';\nimport {\n FEE_DIVISOR,\n RATED_POOL_LP_TOKEN_DECIMALS,\n STABLE_LP_TOKEN_DECIMALS,\n} from './constant';\n\nimport {\n transactions,\n utils,\n transactions as nearTransactions,\n} from 'near-api-js';\n\nimport _, { sortBy } from 'lodash';\n\nimport BN from 'bn.js';\n\nimport * as math from 'mathjs';\nimport {\n REF_FI_CONTRACT_ID,\n WRAP_NEAR_CONTRACT_ID,\n STORAGE_TO_REGISTER_WITH_MFT,\n} from './constant';\nimport Big from 'big.js';\nimport { TokenMetadata } from './types';\nimport { PoolMode } from './v1-swap/swap';\nimport { getSwappedAmount } from './stable-swap';\nimport { NoFeeToPool } from './error';\nimport { CONSTANT_D, POINTLEFTRANGE, POINTRIGHTRANGE } from './constant';\nimport { DCL_POOL_FEE_LIST } from './dcl-swap/dcl-pool';\nimport { SignAndSendTransactionsParams } from '@near-wallet-selector/core/lib/wallet';\n\nexport const parsePool = (pool: PoolRPCView, id?: number): Pool => ({\n id: Number(typeof id === 'number' ? id : pool.id),\n tokenIds: pool.token_account_ids,\n supplies: pool.amounts.reduce(\n (acc: { [tokenId: string]: string }, amount: string, i: number) => {\n acc[pool.token_account_ids[i]] = amount;\n return acc;\n },\n {}\n ),\n fee: pool.total_fee,\n shareSupply: pool.shares_total_supply,\n tvl: pool.tvl,\n token0_ref_price: pool.token0_ref_price,\n pool_kind: pool.pool_kind,\n});\n\nexport const poolFormatter = (pool: Pool) => {\n return {\n id: pool.id,\n token1Id: pool.tokenIds[0],\n token2Id: pool.tokenIds[1],\n token1Supply: pool.supplies[pool.tokenIds[0]],\n token2Supply: pool.supplies[pool.tokenIds[1]],\n fee: pool.fee,\n shares: pool.shareSupply,\n token0_price: pool.token0_ref_price || '0',\n } as SmartRoutingInputPool;\n};\n\nexport const isStablePoolToken = (\n stablePools: StablePool[],\n tokenId: string | Number\n) => {\n return stablePools\n .map(p => p.token_account_ids)\n .flat()\n .includes(tokenId.toString());\n};\n\nexport const isStablePool = (\n stablePools: StablePool[],\n poolId: string | number\n) => {\n return stablePools.map(p => p.id.toString()).includes(poolId.toString());\n};\n\nexport const getStablePoolDecimal = (stablePool: StablePool) => {\n return stablePool.pool_kind === 'RATED_SWAP' ||\n stablePool.pool_kind === 'DEGEN_SWAP'\n ? RATED_POOL_LP_TOKEN_DECIMALS\n : STABLE_LP_TOKEN_DECIMALS;\n};\n\nexport const round = (decimals: number, minAmountOut: string) => {\n return Number.isInteger(Number(minAmountOut))\n ? minAmountOut\n : Math.ceil(\n Math.round(Number(minAmountOut) * Math.pow(10, decimals)) /\n Math.pow(10, decimals)\n ).toString();\n};\n\nexport const convertToPercentDecimal = (percent: number) => {\n return math.divide(percent, 100);\n};\n\nexport const percentOf = (percent: number, num: number | string) => {\n return math.evaluate(`${convertToPercentDecimal(percent)} * ${num}`);\n};\n\nexport const percentLess = (percent: number, num: number | string) => {\n return math.format(math.evaluate(`${num} - ${percentOf(percent, num)}`), {\n notation: 'fixed',\n });\n};\n\nexport const getGas = (gas: string | undefined) =>\n gas ? new BN(gas) : new BN('100000000000000');\n\nexport const getAmount = (amount: string) =>\n amount ? new BN(utils.format.parseNearAmount(amount) || '0') : new BN('0');\n\nexport const ONLY_ZEROS = /^0*\\.?0*$/;\n\nexport const toReadableNumber = (\n decimals: number,\n number: string = '0'\n): string => {\n if (!decimals) return number;\n\n const wholeStr = number.substring(0, number.length - decimals) || '0';\n const fractionStr = number\n .substring(number.length - decimals)\n .padStart(decimals, '0')\n .substring(0, decimals);\n\n return `${wholeStr}.${fractionStr}`.replace(/\\.?0+$/, '');\n};\n\nexport const toNonDivisibleNumber = (\n decimals: number,\n number: string\n): string => {\n if (decimals === null || decimals === undefined) return number;\n const [wholePart, fracPart = ''] = number.split('.');\n\n return `${wholePart}${fracPart.padEnd(decimals, '0').slice(0, decimals)}`\n .replace(/^0+/, '')\n .padStart(1, '0');\n};\n\nexport const scientificNotationToString = (strParam: string) => {\n let flag = /e/.test(strParam);\n if (!flag || !strParam) return strParam;\n\n let sysbol = true;\n if (/e-/.test(strParam)) {\n sysbol = false;\n }\n\n const negative = Number(strParam) < 0 ? '-' : '';\n\n let index = Number(strParam.match(/\\d+$/)?.[0]);\n\n let basis = strParam.match(/[\\d\\.]+/)?.[0];\n\n if (!index || !basis) return strParam;\n\n const ifFraction = basis.includes('.');\n\n let wholeStr;\n let fractionStr;\n\n if (ifFraction) {\n wholeStr = basis.split('.')[0];\n fractionStr = basis.split('.')[1];\n } else {\n wholeStr = basis;\n fractionStr = '';\n }\n\n if (sysbol) {\n if (!ifFraction) {\n return negative + wholeStr.padEnd(index + wholeStr.length, '0');\n } else {\n if (fractionStr.length <= index) {\n return negative + wholeStr + fractionStr.padEnd(index, '0');\n } else {\n return (\n negative +\n wholeStr +\n fractionStr.substring(0, index) +\n '.' +\n fractionStr.substring(index)\n );\n }\n }\n } else {\n if (!ifFraction)\n return (\n negative +\n wholeStr.padStart(index + wholeStr.length, '0').replace(/^0/, '0.')\n );\n else {\n return (\n negative +\n wholeStr.padStart(index + wholeStr.length, '0').replace(/^0/, '0.') +\n fractionStr\n );\n }\n }\n};\n\nexport const formatWithCommas = (value: string) => {\n const pattern = /(-?\\d+)(\\d{3})/;\n while (pattern.test(value)) {\n value = value.replace(pattern, '$1,$2');\n }\n return value;\n};\n\nexport const toPrecision = (\n number: string,\n precision: number,\n withCommas: boolean = false,\n atLeastOne: boolean = true\n): string => {\n const [whole, decimal = ''] = number.split('.');\n\n let str = `${withCommas ? formatWithCommas(whole) : whole}.${decimal.slice(\n 0,\n precision\n )}`.replace(/\\.$/, '');\n if (atLeastOne && Number(str) === 0 && str.length > 1) {\n var n = str.lastIndexOf('0');\n str = str.slice(0, n) + str.slice(n).replace('0', '1');\n }\n\n return str;\n};\n\nexport const transformTransactions = (\n transactions: Transaction[],\n AccountId: string\n) => {\n const parsedTransactions = transactions.map((t: Transaction) => {\n return {\n signerId: AccountId,\n receiverId: t.receiverId,\n actions: t.functionCalls.map(fc => {\n return {\n type: 'FunctionCall',\n params: {\n methodName: fc.methodName,\n args: fc.args || {},\n gas: getGas(fc.gas)\n .toNumber()\n .toFixed(),\n deposit: utils.format.parseNearAmount(fc.amount || '0')!,\n },\n };\n }),\n };\n });\n\n return parsedTransactions;\n};\n\nexport const WalletSelectorTransactions = (\n transactions: Transaction[],\n AccountId: string\n) => {\n const parsedTransactions = transactions.map((t: Transaction) => {\n return {\n signerId: AccountId,\n receiverId: t.receiverId,\n actions: t.functionCalls.map(fc => {\n return {\n type: 'FunctionCall',\n params: {\n methodName: fc.methodName,\n args: fc.args || {},\n gas: getGas(fc.gas)\n .toNumber()\n .toFixed(),\n deposit: utils.format.parseNearAmount(fc.amount || '0')!,\n },\n };\n }),\n };\n });\n\n return { transactions: parsedTransactions } as SignAndSendTransactionsParams;\n};\n\nexport const separateRoutes = (\n actions: EstimateSwapView[],\n outputToken: string\n) => {\n const res = [];\n let curRoute = [];\n\n for (let i in actions) {\n curRoute.push(actions[i]);\n if (actions[i].outputToken === outputToken) {\n res.push(curRoute);\n curRoute = [];\n }\n }\n\n return res;\n};\n\nexport const calculateExchangeRate = (\n from: string,\n to: string,\n precision?: number\n) => {\n return math\n .floor(math.evaluate(`${to} / ${from}`), precision || 4)\n .toString();\n};\n\nexport const getAvgFee = (\n estimates: EstimateSwapView[],\n outputToken: string,\n parsedAmountIn: string\n) => {\n if (!estimates || estimates.length === 0) {\n return 0;\n }\n\n const routes = separateRoutes(estimates, outputToken);\n\n let fee = new Big(0);\n\n routes.forEach(r => {\n const partialAmountIn = r[0].pool.partialAmountIn || '0';\n\n fee = fee.plus(\n r\n .reduce(\n (acc, cur) => acc.plus(cur.pool.fee || cur.pool.total_fee || 0),\n new Big(0)\n )\n .times(partialAmountIn)\n .div(ONLY_ZEROS.test(parsedAmountIn) ? '1' : parsedAmountIn)\n );\n });\n\n return fee.toNumber();\n};\n\nexport const getAccountName = (AccountId: string) => {\n if (!AccountId) return AccountId;\n\n const [account, network] = AccountId.split('.');\n const niceAccountId = `${account.slice(0, 10)}...${network || ''}`;\n\n return account.length > 10 ? niceAccountId : AccountId;\n};\n\nexport const symbolsArr = ['e', 'E', '+', '-'];\n\nexport const multiply = (factor1: string, factor2: string) => {\n return math.format(math.evaluate(`${factor1} * ${factor2}`), {\n notation: 'fixed',\n });\n};\n\nexport const toInternationalCurrencySystemLongString = (\n labelValue: string,\n percent?: number\n) => {\n return Math.abs(Number(labelValue)) >= 1.0e9\n ? (Math.abs(Number(labelValue)) / 1.0e9).toFixed(percent || 2) + 'B'\n : Math.abs(Number(labelValue)) >= 1.0e6\n ? (Math.abs(Number(labelValue)) / 1.0e6).toFixed(percent || 2) + 'M'\n : Math.abs(Number(labelValue)).toFixed(percent || 2);\n};\n\nexport const percentOfBigNumber = (\n percent: number,\n num: number | string,\n precision: number\n) => {\n const valueBig = math.bignumber(num);\n const percentBig = math.bignumber(percent).div(100);\n\n return toPrecision(\n scientificNotationToString(valueBig.mul(percentBig).toString()),\n precision\n );\n};\n\nexport const toRealSymbol = (symbol: string) => {\n if (!symbol) return '';\n const blackList = ['nUSDO'];\n\n if (symbol === 'nWETH' || symbol === 'WETH') return 'wETH';\n if (blackList.includes(symbol)) return symbol;\n return symbol.charAt(0) === 'n' &&\n symbol.charAt(1) === symbol.charAt(1).toUpperCase()\n ? symbol.substring(1)\n : symbol;\n};\n\nexport const calculateFeeCharge = (fee: number, total: string) => {\n return math.floor(math.evaluate(`(${fee} / ${FEE_DIVISOR}) * ${total}`), 3);\n};\n\nexport const calculateFeePercent = (fee: number) => {\n return math.divide(fee, 100);\n};\n\nexport function getExpectedOutputFromSwapTodos(\n estimates: EstimateSwapView[],\n outputToken: string\n) {\n if (!estimates || estimates.length === 0) return new Big(0);\n\n return estimates\n .filter(item => item.outputToken === outputToken)\n .map(item => new Big(item.estimate || 0))\n .reduce((a, b) => a.plus(b), new Big(0));\n}\n\nexport const calculateAmountReceived = (\n pool: Pool,\n amountIn: string,\n tokenIn: TokenMetadata,\n tokenOut: TokenMetadata\n) => {\n const partialAmountIn = toReadableNumber(tokenIn.decimals, amountIn);\n\n const in_balance = toReadableNumber(\n tokenIn.decimals,\n pool.supplies[tokenIn.id]\n );\n const out_balance = toReadableNumber(\n tokenOut.decimals,\n pool.supplies[tokenOut.id]\n );\n\n const big_in_balance = math.bignumber(in_balance);\n const big_out_balance = math.bignumber(out_balance);\n\n const constant_product = big_in_balance.mul(big_out_balance);\n\n const new_in_balance = big_in_balance.plus(math.bignumber(partialAmountIn));\n\n const new_out_balance = constant_product.div(new_in_balance);\n\n const tokenOutReceived = big_out_balance.minus(new_out_balance);\n\n return tokenOutReceived;\n};\n\nexport const calculateMarketPrice = (\n pool: Pool,\n tokenIn: TokenMetadata,\n tokenOut: TokenMetadata\n) => {\n const cur_in_balance = toReadableNumber(\n tokenIn.decimals,\n pool.supplies[tokenIn.id]\n );\n\n const cur_out_balance = toReadableNumber(\n tokenOut.decimals,\n pool.supplies[tokenOut.id]\n );\n\n return math.evaluate(`(${cur_in_balance} / ${cur_out_balance})`);\n};\n\nexport const calculateSmartRoutingPriceImpact = (\n tokenInAmount: string,\n swapTodos: EstimateSwapView[],\n tokenIn: TokenMetadata,\n tokenMid: TokenMetadata,\n tokenOut: TokenMetadata,\n stablePools: StablePool[]\n) => {\n const isPool1StablePool = isStablePool(stablePools, swapTodos[0].pool.id);\n const isPool2StablePool = isStablePool(stablePools, swapTodos[1].pool.id);\n\n const marketPrice1 = isPool1StablePool\n ? (\n Number(swapTodos[0].pool.rates?.[tokenMid.id]) /\n Number(swapTodos[0].pool.rates?.[tokenIn.id])\n ).toString()\n : calculateMarketPrice(swapTodos[0].pool, tokenIn, tokenMid);\n\n const marketPrice2 = isPool2StablePool\n ? (\n Number(swapTodos[1].pool.rates?.[tokenOut.id]) /\n Number(swapTodos[1].pool.rates?.[tokenMid.id])\n ).toString()\n : calculateMarketPrice(swapTodos[1].pool, tokenMid, tokenOut);\n\n const generalMarketPrice = math.evaluate(`${marketPrice1} * ${marketPrice2}`);\n\n const tokenMidReceived = isPool1StablePool\n ? swapTodos[0].noFeeAmountOut\n : calculateAmountReceived(\n swapTodos[0].pool,\n toNonDivisibleNumber(tokenIn.decimals, tokenInAmount),\n tokenIn,\n tokenMid\n );\n\n const formattedTokenMidReceived = scientificNotationToString(\n tokenMidReceived?.toString() || '0'\n );\n\n let stableOutPool2;\n if (isPool2StablePool) {\n const stablePool2 =\n stablePools.find(p => p.id === swapTodos[1].pool.id) || stablePools[0];\n\n const stableOut = getSwappedAmount(\n tokenMid.id,\n tokenOut.id,\n formattedTokenMidReceived,\n stablePool2,\n getStablePoolDecimal(stablePool2)\n );\n stableOutPool2 =\n stableOut[0] < 0\n ? '0'\n : toPrecision(scientificNotationToString(stableOut[2].toString()), 0);\n stableOutPool2 = toReadableNumber(\n getStablePoolDecimal(stablePool2),\n stableOutPool2\n );\n }\n\n const tokenOutReceived = isPool2StablePool\n ? stableOutPool2\n : calculateAmountReceived(\n swapTodos[1].pool,\n toNonDivisibleNumber(tokenMid.decimals, formattedTokenMidReceived),\n tokenMid,\n tokenOut\n );\n\n const newMarketPrice = math.evaluate(\n `${tokenInAmount} / ${tokenOutReceived}`\n );\n\n const PriceImpact = new Big(newMarketPrice)\n .minus(new Big(generalMarketPrice))\n .div(newMarketPrice)\n .times(100)\n .toString();\n\n return scientificNotationToString(PriceImpact);\n};\nexport const percent = (numerator: string, denominator: string) => {\n return math.evaluate(`(${numerator} / ${denominator}) * 100`);\n};\nexport const calcStableSwapPriceImpact = (\n from: string,\n to: string,\n marketPrice: string = '1'\n) => {\n const newMarketPrice = math.evaluate(`${from} / ${to}`);\n\n return math.format(\n percent(\n math.evaluate(`${newMarketPrice} - ${marketPrice}`),\n newMarketPrice\n ),\n {\n notation: 'fixed',\n }\n );\n};\n\nexport const calculatePriceImpact = (\n pools: Pool[],\n tokenIn: TokenMetadata,\n tokenOut: TokenMetadata,\n tokenInAmount: string\n) => {\n let in_balance: string = '0',\n out_balance: string = '0';\n\n pools.forEach((pool, i) => {\n const cur_in_balance = toReadableNumber(\n tokenIn.decimals,\n pool.supplies[tokenIn.id]\n );\n\n const cur_out_balance = toReadableNumber(\n tokenOut.decimals,\n pool.supplies[tokenOut.id]\n );\n\n in_balance = new Big(in_balance).plus(cur_in_balance).toString();\n out_balance = new Big(out_balance).plus(cur_out_balance).toString();\n });\n\n const finalMarketPrice = math.evaluate(`(${in_balance} / ${out_balance})`);\n\n const separatedReceivedAmount = pools.map(pool => {\n return calculateAmountReceived(\n pool,\n pool.partialAmountIn || '0',\n tokenIn,\n tokenOut\n );\n });\n\n const finalTokenOutReceived = math.sum(...separatedReceivedAmount);\n\n const newMarketPrice = math.evaluate(\n `${tokenInAmount} / ${finalTokenOutReceived}`\n );\n\n const PriceImpact = new Big(newMarketPrice)\n .minus(new Big(finalMarketPrice))\n .div(newMarketPrice)\n .times(100)\n .toString();\n\n return scientificNotationToString(PriceImpact);\n};\n\nexport function calculateSmartRoutesV2PriceImpact(\n actions: any,\n outputToken: string,\n tokenInPara: TokenMetadata,\n stablePools: StablePool[]\n) {\n const routes = separateRoutes(actions, outputToken);\n\n const tokenIn = routes[0][0].tokens?.[0] || tokenInPara;\n\n const totalInputAmount = routes[0][0].totalInputAmount;\n\n const priceImpactForRoutes = routes.map((r, i) => {\n const readablePartialAmountIn = toReadableNumber(\n tokenIn.decimals,\n r[0].pool.partialAmountIn\n );\n\n if (r.length > 1) {\n const tokenIn = r[0].tokens?.[0];\n const tokenMid = r[0].tokens?.[1];\n const tokenOut = r[0].tokens?.[2];\n\n return calculateSmartRoutingPriceImpact(\n readablePartialAmountIn,\n routes[i],\n tokenIn || tokenInPara,\n tokenMid || tokenInPara,\n tokenOut || tokenInPara,\n stablePools\n );\n } else {\n return isStablePool(stablePools, r[0].pool.id)\n ? calcStableSwapPriceImpact(\n readablePartialAmountIn,\n r[0].noFeeAmountOut || '0',\n (\n Number(r[0].pool.rates?.[outputToken]) /\n Number(r[0].pool.rates?.[tokenIn.id])\n ).toString()\n )\n : calculatePriceImpact(\n [r[0].pool],\n r[0].tokens?.[0] || tokenIn,\n r[0].tokens?.[1] || tokenIn,\n readablePartialAmountIn\n );\n }\n });\n\n const rawRes = priceImpactForRoutes.reduce(\n (pre, cur, i) => {\n return pre.plus(\n new Big(routes[i][0].pool.partialAmountIn || '0')\n .div(new Big(totalInputAmount || '1'))\n .mul(cur)\n );\n },\n\n new Big(0)\n );\n\n return scientificNotationToString(rawRes.toString());\n}\n\nexport const getPriceImpact = ({\n estimates,\n tokenIn,\n tokenOut,\n amountIn,\n amountOut,\n stablePools,\n}: {\n estimates: EstimateSwapView[];\n tokenIn: TokenMetadata;\n tokenOut: TokenMetadata;\n amountIn: string;\n amountOut: string;\n stablePools: StablePool[];\n}) => {\n let PriceImpactValue: string = '0';\n let priceImpactValueSmartRouting: string = '0';\n let priceImpactValueSmartRoutingV2: string = '0';\n\n if (typeof estimates === 'undefined') return '0';\n\n try {\n if (estimates?.length === 2 && estimates[0].status === PoolMode.SMART) {\n priceImpactValueSmartRouting = calculateSmartRoutingPriceImpact(\n amountIn,\n estimates,\n tokenIn,\n estimates[0].tokens?.[1] || tokenIn,\n tokenOut,\n stablePools\n );\n } else if (\n estimates?.length === 1 &&\n estimates[0].status === PoolMode.STABLE\n ) {\n priceImpactValueSmartRouting = calcStableSwapPriceImpact(\n toReadableNumber(tokenIn.decimals, estimates[0].totalInputAmount),\n estimates[0].noFeeAmountOut || '0',\n (\n Number(estimates[0].pool.rates?.[tokenOut.id]) /\n Number(estimates[0].pool.rates?.[tokenIn.id])\n ).toString()\n );\n } else priceImpactValueSmartRouting = '0';\n } catch (error) {\n priceImpactValueSmartRouting = '0';\n }\n\n try {\n priceImpactValueSmartRoutingV2 = calculateSmartRoutesV2PriceImpact(\n estimates,\n tokenOut.id,\n tokenIn,\n stablePools\n );\n } catch (error) {\n priceImpactValueSmartRoutingV2 = '0';\n }\n\n try {\n if (\n estimates[0].status === PoolMode.SMART ||\n estimates[0].status === PoolMode.STABLE\n ) {\n PriceImpactValue = priceImpactValueSmartRouting;\n } else {\n PriceImpactValue = priceImpactValueSmartRoutingV2;\n }\n\n return PriceImpactValue;\n } catch (error) {\n return '0';\n }\n};\n\nexport const subtraction = (initialValue: string, toBeSubtract: string) => {\n return math.format(math.evaluate(`${initialValue} - ${toBeSubtract}`), {\n notation: 'fixed',\n });\n};\n\nexport function getPoolAllocationPercents(pools: Pool[]) {\n if (pools.length === 1) return ['100'];\n\n if (pools) {\n const partialAmounts = pools.map(pool => {\n return math.bignumber(pool.partialAmountIn);\n });\n\n const ps: string[] = new Array(partialAmounts.length).fill('0');\n\n const sum =\n partialAmounts.length === 1\n ? partialAmounts[0]\n : math.sum(...partialAmounts);\n\n const sortedAmount = sortBy(partialAmounts, p => Number(p));\n\n let minIndexes: number[] = [];\n\n for (let k = 0; k < sortedAmount.length - 1; k++) {\n let minIndex = -1;\n\n for (let j = 0; j < partialAmounts.length; j++) {\n if (partialAmounts[j].eq(sortedAmount[k]) && !minIndexes.includes(j)) {\n minIndex = j;\n minIndexes.push(j);\n break;\n }\n }\n const res = math\n .round(percent(partialAmounts[minIndex].toString(), sum))\n .toString();\n\n if (Number(res) === 0) {\n ps[minIndex] = '1';\n } else {\n ps[minIndex] = res;\n }\n }\n\n const finalPIndex = ps.indexOf('0');\n\n ps[finalPIndex] = subtraction(\n '100',\n ps.length === 1 ? Number(ps[0]) : math.sum(...ps.map(p => Number(p)))\n ).toString();\n\n return ps;\n } else {\n return [];\n }\n}\n\nexport const isMobile = (): boolean => {\n return window.screen.width <= 600;\n};\nexport function divide(numerator: string, denominator: string) {\n return math.format(math.evaluate(`${numerator} / ${denominator}`), {\n notation: 'fixed',\n });\n}\n\nexport const getMax = function(\n id: string,\n amount: string,\n minNearAmountLeftForGasFees: number\n) {\n return id !== WRAP_NEAR_CONTRACT_ID\n ? amount\n : Number(amount) <= minNearAmountLeftForGasFees\n ? '0'\n : String(Number(amount) - minNearAmountLeftForGasFees);\n};\n\nexport const isValidSlippageTolerance = (value: number) => {\n return value > 0 && value < 100;\n};\n\nexport function getPointByPrice(\n pointDelta: number,\n price: string,\n decimalRate: number,\n noNeedSlot?: boolean\n) {\n const point = Math.log(+price * decimalRate) / Math.log(CONSTANT_D);\n const point_int = Math.round(point);\n let point_int_slot = point_int;\n if (!noNeedSlot) {\n point_int_slot = Math.floor(point_int / pointDelta) * pointDelta;\n }\n if (point_int_slot < POINTLEFTRANGE) {\n return POINTLEFTRANGE;\n } else if (point_int_slot > POINTRIGHTRANGE) {\n return 800000;\n }\n return point_int_slot;\n}\nexport const feeToPointDelta = (fee: number) => {\n switch (fee) {\n case 100:\n return 1;\n case 400:\n return 8;\n case 2000:\n return 40;\n case 10000:\n return 200;\n default:\n throw NoFeeToPool(fee);\n }\n};\n\nexport const priceToPoint = ({\n tokenA,\n tokenB,\n amountA,\n amountB,\n fee,\n}: {\n tokenA: TokenMetadata;\n tokenB: TokenMetadata;\n amountA: string;\n amountB: string;\n fee: number;\n}) => {\n if (DCL_POOL_FEE_LIST.indexOf(fee) === -1) throw NoFeeToPool(fee);\n\n const decimal_price_A_by_B = new Big(amountB).div(amountA);\n const undecimal_price_A_by_B = decimal_price_A_by_B\n .times(new Big(10).pow(tokenB.decimals))\n .div(new Big(10).pow(tokenA.decimals));\n\n const pointDelta = feeToPointDelta(fee);\n\n const price = decimal_price_A_by_B;\n\n const decimalRate = new Big(10)\n .pow(tokenB.decimals)\n .div(new Big(10).pow(tokenA.decimals))\n .toNumber();\n\n return getPointByPrice(\n pointDelta,\n scientificNotationToString(price.toString()),\n decimalRate\n );\n};\n\nexport const pointToPrice = ({\n tokenA,\n tokenB,\n point,\n}: {\n tokenA: TokenMetadata;\n tokenB: TokenMetadata;\n point: number;\n}) => {\n const undecimal_price = Math.pow(CONSTANT_D, point);\n const decimal_price_A_by_B = new Big(undecimal_price)\n .times(new Big(10).pow(tokenA.decimals))\n .div(new Big(10).pow(tokenB.decimals));\n\n return scientificNotationToString(decimal_price_A_by_B.toString());\n};\n\nexport const registerAccountOnToken = (AccountId: string) => {\n return {\n methodName: 'storage_deposit',\n args: {\n registration_only: true,\n account_id: AccountId,\n },\n gas: '30000000000000',\n amount: STORAGE_TO_REGISTER_WITH_MFT,\n };\n};\n","import {\n keyStores,\n KeyPair,\n InMemorySigner,\n providers,\n transactions as nearTransactions,\n utils,\n} from 'near-api-js';\nimport BN from 'bn.js';\nimport { getConfig } from './constant';\nimport fs from 'fs';\nimport {\n NoPuiblicKeyError,\n InValidAccessKeyError,\n NoCredential,\n} from './error';\nimport { AccessKeyView } from 'near-api-js/lib/providers/provider';\nimport { TransformedTransaction } from './types';\nimport { Transaction } from './types';\nimport { transformTransactions } from './utils';\nimport { AccountIdMisMatch } from './error';\n\nexport const getKeyStore = () => {\n return typeof window === 'undefined'\n ? new keyStores.InMemoryKeyStore()\n : new keyStores.BrowserLocalStorageKeyStore();\n};\n\nexport const provider = new providers.JsonRpcProvider({\n url: getConfig().nodeUrl,\n});\n\nexport const getMemorySigner = async ({\n AccountId,\n keyPath,\n}: {\n AccountId: string;\n keyPath: string;\n}) => {\n try {\n // const homedir = os.homedir();\n const credentials = JSON.parse(fs.readFileSync(keyPath).toString());\n\n const credentialAccountId = credentials?.account_id;\n\n if (!credentialAccountId) throw NoCredential;\n\n if (credentialAccountId !== AccountId) throw AccountIdMisMatch;\n\n const myKeyStore = new keyStores.InMemoryKeyStore();\n myKeyStore.setKey(\n getConfig().networkId,\n AccountId,\n KeyPair.fromString(credentials.private_key)\n );\n\n const signer = new InMemorySigner(myKeyStore);\n\n return signer;\n } catch (error) {\n throw error;\n }\n};\n\nconst validateAccessKey = (\n transaction: TransformedTransaction,\n accessKey: AccessKeyView\n) => {\n if (accessKey.permission === 'FullAccess') {\n return accessKey;\n }\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n const { receiver_id, method_names } = accessKey.permission.FunctionCall;\n\n if (transaction.receiverId !== receiver_id) {\n return null;\n }\n\n return transaction.actions.every(action => {\n if (action.type !== 'FunctionCall') {\n return false;\n }\n\n const { methodName, deposit } = action.params;\n\n if (method_names.length && method_names.includes(methodName)) {\n return false;\n }\n\n return parseFloat(deposit) <= 0;\n });\n};\n\nexport const getSignedTransactionsByMemoryKey = async ({\n transactionsRef,\n AccountId,\n keyPath,\n}: {\n transactionsRef: Transaction[];\n AccountId: string;\n keyPath: string;\n}) => {\n const transactions = transformTransactions(transactionsRef, AccountId);\n\n const block = await provider.block({ finality: 'final' });\n\n const signedTransactions: Array<nearTransactions.SignedTransaction> = [];\n const signer = await getMemorySigner({\n AccountId,\n keyPath,\n });\n\n for (let i = 0; i < transactions.length; i += 1) {\n const transaction = transactions[i];\n\n const publicKey = await signer.getPublicKey(\n AccountId,\n getConfig().networkId\n );\n if (!publicKey) {\n throw NoPuiblicKeyError;\n }\n\n const accessKey = await provider.query<AccessKeyView>({\n request_type: 'view_access_key',\n finality: 'final',\n account_id: AccountId,\n public_key: publicKey.toString(),\n });\n\n if (!validateAccessKey(transaction, accessKey)) {\n throw InValidAccessKeyError;\n }\n\n const tx = nearTransactions.createTransaction(\n AccountId,\n utils.PublicKey.from(publicKey.toString()),\n transactions[i].receiverId,\n accessKey.nonce + i + 1,\n transaction.actions.map(action => {\n const { methodName, args, gas, deposit } = action.params;\n return nearTransactions.functionCall(\n methodName,\n args,\n new BN(gas),\n new BN(deposit)\n );\n }),\n utils.serialize.base_decode(block.header.hash)\n );\n\n const [, signedTx] = await nearTransactions.signTransaction(\n tx,\n signer,\n transactions[i].signerId,\n getConfig().networkId\n );\n signedTransactions.push(signedTx);\n }\n\n return signedTransactions;\n};\n\nexport const sendTransactionsByMemoryKey = async ({\n signedTransactions,\n}: {\n signedTransactions: nearTransactions.SignedTransaction[];\n}) => {\n try {\n const results: Array<providers.FinalExecutionOutcome> = [];\n\n for (let i = 0; i < signedTransactions.length; i += 1) {\n results.push(await provider.sendTransaction(signedTransactions[i]));\n }\n\n return results;\n } catch (err) {\n throw err;\n }\n};\n","import {\n REF_FI_CONTRACT_ID,\n config,\n WRAP_NEAR_CONTRACT_ID,\n NEAR_META_DATA,\n getConfig,\n switchEnv,\n FT_MINIMUM_STORAGE_BALANCE_LARGE,\n} from './constant';\nimport {\n keyStores,\n Near,\n providers,\n WalletConnection,\n utils,\n} from 'near-api-js';\nimport { NoAccountIdFound, TokenNotExistError, DCLInValid } from './error';\nimport { getKeyStore } from './near';\n\nimport {\n TokenMetadata,\n FTStorageBalance,\n RefFiViewFunctionOptions,\n} from './types';\nimport { AccountView, CodeResult } from 'near-api-js/lib/providers/provider';\nimport { Transaction } from './types';\nimport { ONE_YOCTO_NEAR, REF_TOKEN_ID, REF_META_DATA } from './constant';\n\nimport metaIconDefaults from './metaIcons';\n\nconst BANANA_ID = 'berryclub.ek.near';\nconst CHEDDAR_ID = 'token.cheddar.near';\nconst CUCUMBER_ID = 'farm.berryclub.ek.near';\nconst HAPI_ID = 'd9c2d319cd7e6177336b0a9c93c21cb48d84fb54.factory.bridge.near';\nconst WOO_ID = '4691937a7508860f876c9c0a2a617e7d9e945d4b.factory.bridge.near';\n\nexport const REPLACE_TOKENS = [\n BANANA_ID,\n CHEDDAR_ID,\n CUCUMBER_ID,\n HAPI_ID,\n WOO_ID,\n];\n\nlet near = new Near({\n keyStore: getKeyStore(),\n headers: {},\n ...getConfig(),\n});\nexport const init_env = (\n env: string,\n indexerUrl?: string,\n nodeUrl?: string\n) => {\n near = new Near({\n keyStore: getKeyStore(),\n headers: {},\n ...getConfig(env, indexerUrl, nodeUrl),\n });\n return switchEnv();\n};\n\nexport const refFiViewFunction = async ({\n methodName,\n args,\n}: RefFiViewFunctionOptions) => {\n const nearConnection = await near.account(REF_FI_CONTRACT_ID);\n\n return nearConnection.viewFunction(REF_FI_CONTRACT_ID, methodName, args);\n};\n\nexport const ftViewFunction = async (\n tokenId: string,\n { methodName, args }: RefFiViewFunctionOptions\n) => {\n const nearConnection = await near.account(REF_FI_CONTRACT_ID);\n\n return nearConnection.viewFunction(tokenId, methodName, args);\n};\n\nexport const ftGetStorageBalance = (\n tokenId: string,\n AccountId: string\n): Promise<FTStorageBalance | null> => {\n if (!AccountId) throw NoAccountIdFound;\n\n return ftViewFunction(tokenId, {\n methodName: 'storage_balance_of',\n args: { account_id: AccountId },\n });\n};\n\nexport const ftGetBalance = async (tokenId: string, AccountId: string) => {\n if (!AccountId) return '0';\n\n if (tokenId === 'NEAR') {\n return getAccountNearBalance(AccountId).catch(() => '0');\n }\n\n return ftViewFunction(tokenId, {\n methodName: 'ft_balance_of',\n args: {\n account_id: AccountId,\n },\n })\n .then(res => {\n return res;\n })\n .catch(() => '0');\n};\n\nexport const getTotalPools = async () => {\n return refFiViewFunction({\n methodName: 'get_number_of_pools',\n });\n};\n\nexport const ftGetTokenMetadata = async (\n id: string,\n tag?: string\n): Promise<TokenMetadata> => {\n if (id === REF_TOKEN_ID) return REF_META_DATA;\n\n const metadata = await ftViewFunction(id, {\n methodName: 'ft_metadata',\n }).catch(() => {\n throw TokenNotExistError(id);\n });\n\n if (\n !metadata.icon ||\n id === BANANA_ID ||\n id === CHEDDAR_ID ||\n id === CUCUMBER_ID ||\n id === HAPI_ID ||\n id === WOO_ID ||\n id === WRAP_NEAR_CONTRACT_ID\n ) {\n return {\n ...metadata,\n icon: metaIconDefaults[id],\n id,\n };\n }\n\n return { ...metadata, id };\n};\n\nexport const ftGetTokensMetadata = async (\n tokenIds?: string[],\n allTokens?: Record<string, TokenMetadata>\n) => {\n const ids = tokenIds || (await getGlobalWhitelist());\n\n const tokensMetadata = await Promise.all(\n ids.map(\n (id: string) =>\n allTokens?.[id] || ftGetTokenMetadata(id).catch(() => null)\n )\n );\n\n return tokensMetadata.reduce((pre, cur, i) => {\n return {\n ...pre,\n [ids[i]]: cur,\n };\n }, {}) as Record<string, TokenMetadata>;\n};\n\nexport const getGlobalWhitelist = async (): Promise<string[]> => {\n const globalWhitelist = await refFiViewFunction({\n methodName: 'get_whitelisted_tokens',\n });\n return Array.from(new Set(globalWhitelist));\n};\n\nexport const getUserRegisteredTokens = async (\n AccountId?: string\n): Promise<string[]> => {\n if (!AccountId) return [];\n\n return refFiViewFunction({\n methodName: 'get_user_whitelisted_tokens',\n args: { account_id: AccountId },\n });\n};\n\nexport const getAccountNearBalance = async (accountId: string) => {\n const provider = new providers.JsonRpcProvider({\n url: getConfig().nodeUrl,\n });\n\n return provider\n .query<AccountView>({\n request_type: 'view_account',\n finality: 'final',\n account_id: accountId,\n })\n .then(data => data.amount);\n};\n\nexport const nearDepositTransaction = (amount: string) => {\n const transaction: Transaction = {\n receiverId: WRAP_NEAR_CONTRACT_ID,\n functionCalls: [\n {\n methodName: 'near_deposit',\n args: {},\n gas: '50000000000000',\n amount,\n },\n ],\n };\n\n return transaction;\n};\n\nexport const nearWithdrawTransaction = (amount: string) => {\n const transaction: Transaction = {\n receiverId: WRAP_NEAR_CONTRACT_ID,\n functionCalls: [\n {\n methodName: 'near_withdraw',\n args: { amount: utils.format.parseNearAmount(amount) },\n amount: ONE_YOCTO_NEAR,\n },\n ],\n };\n return transaction;\n};\n\nexport const refDCLSwapViewFunction = async ({\n methodName,\n args,\n}: RefFiViewFunctionOptions) => {\n const nearConnection = await near.account(REF_FI_CONTRACT_ID);\n\n if (!config.REF_DCL_SWAP_CONTRACT_ID) throw DCLInValid;\n\n return nearConnection.viewFunction(\n config.REF_DCL_SWAP_CONTRACT_ID,\n methodName,\n args\n );\n};\n\nexport const DCLSwapGetStorageBalance = (\n tokenId: string,\n AccountId: string\n) => {\n return refDCLSwapViewFunction({\n methodName: 'storage_balance_of',\n args: { account_id: AccountId },\n });\n};\n\nexport const getMinStorageBalance = async (\n nep141Address: string\n): Promise<string> => {\n try {\n const provider = new providers.JsonRpcProvider({\n url: getConfig().nodeUrl,\n });\n const result = await provider.query<CodeResult>({\n request_type: 'call_function',\n account_id: nep141Address,\n method_name: 'storage_balance_bounds',\n args_base64: '',\n finality: 'optimistic',\n });\n const balance = JSON.parse(Buffer.from(result.result).toString());\n if (!balance || !balance.min) return FT_MINIMUM_STORAGE_BALANCE_LARGE;\n return balance.min as string;\n } catch (e) {\n console.error(e, nep141Address);\n return FT_MINIMUM_STORAGE_BALANCE_LARGE;\n }\n};\n","import { TokenMetadata, Transaction } from '../types';\nimport {\n priceToPoint,\n toNonDivisibleNumber,\n toPrecision,\n registerAccountOnToken,\n} from '../utils';\nimport { ONE_YOCTO_NEAR, WRAP_NEAR_CONTRACT_ID, config } from '../constant';\nimport {\n nearDepositTransaction,\n ftGetStorageBalance,\n refDCLSwapViewFunction,\n} from '../ref';\nimport { NoFeeToPool } from '../error';\n\nexport const DCL_POOL_FEE_LIST = [100, 400, 2000, 10000];\n\ninterface PoolInfo {\n pool_id?: string;\n token_x?: string;\n token_y?: string;\n fee: number;\n point_delta?: number;\n current_point?: number;\n state?: string;\n liquidity?: string;\n liquidity_x?: string;\n max_liquidity_per_point?: string;\n percent?: string;\n total_x?: string;\n total_y?: string;\n tvl?: number;\n token_x_metadata?: TokenMetadata;\n token_y_metadata?: TokenMetadata;\n}\n\nexport const getDCLPoolId = (tokenA: string, tokenB: string, fee: number) => {\n if (DCL_POOL_FEE_LIST.indexOf(fee) === -1) throw NoFeeToPool(fee);\n\n const tokenSeq = [tokenA, tokenB].sort().join('|');\n\n return `${tokenSeq}|${fee}`;\n};\nexport const listDCLPools = () => {\n return refDCLSwapViewFunction({\n methodName: 'list_pools',\n });\n};\n\nexport const getDCLPool = async (pool_id: string) => {\n const [token_x, token_y, fee] = pool_id.split('|');\n\n const token_seq = [token_x, token_y].sort().join('|');\n\n const new_pool_id = `${token_seq}|${fee}`;\n\n return refDCLSwapViewFunction({\n methodName: 'get_pool',\n args: {\n pool_id: new_pool_id,\n },\n }) as Promise<PoolInfo>;\n};\n","import { config, getConfig } from './constant';\nimport { DCL_POOL_FEE_LIST } from './dcl-swap/dcl-pool';\n\nexport const formatError = (msg: string) => {\n return new Error(msg);\n};\n\nexport const unNamedError = formatError('Something wrong happened');\n\nexport const SameInputTokenError = formatError(\n 'Input token should be different with output token'\n);\n\nexport const ZeroInputError = formatError(\n 'Input amount should be greater than 0'\n);\n\nexport const NoPoolError = formatError('No pool found for the input tokens');\n\nexport const NotLoginError = formatError('Please login in first');\n\nexport const SwapRouteError = formatError(\n \"Something wrong happened, we don't get correct routes corrreponding to current input\"\n);\n\nexport const TokenNotExistError = (id: string) =>\n formatError(`${id} doesn't exist in ${getConfig().networkId}`);\n\nexport const NoPuiblicKeyError = formatError('No public key found');\n\nexport const NoLocalSignerError = formatError('No local signer found');\n\nexport const InValidAccessKeyError = formatError('Invalid access key');\n\nexport const AccountIdMisMatch = formatError(\n \"Your input account id doesn't match the account id in the credential\"\n);\n\nexport const NoCredential = formatError('No Credential to such path');\n\nexport const NoAccountIdFound = formatError('No account id found');\n\nexport const NoFeeToPool = (fee: number) =>\n formatError(\n `InValid fee ${fee} to DCL pool, the valid fee should be one of ${DCL_POOL_FEE_LIST}`\n );\n\nexport const DCLInValid = formatError(\n `DCL contract currently in Valid on ${config.networkId}`\n);\n\nexport const NoPoolOnThisPair = (tokenA: string, tokenB: string) =>\n formatError(`No pools on pair ${tokenA} <> ${tokenB}`);\n\nexport const SlippageError = formatError(\n 'slippage tolerance should be in range (0, 100)'\n);\n\nexport const NoOrderFound = (order_id?: string) =>\n formatError(`No order ${order_id || ''} found`);\n\nexport const OrderNoRemainedAmount = formatError(\n 'No remained amount on this order'\n);\n","import { TokenMetadata, EstimateSwapView, Transaction } from '../types';\nimport { ftGetStorageBalance, getMinStorageBalance } from '../ref';\nimport {\n STORAGE_TO_REGISTER_WITH_MFT,\n REF_FI_CONTRACT_ID,\n ONE_YOCTO_NEAR,\n} from '../constant';\nimport { round, percentLess } from '../utils';\nimport { toNonDivisibleNumber } from '../utils';\nimport { config } from '../constant';\nimport { SwapRouteError } from '../error';\nimport { formatNearAmount } from 'near-api-js/lib/utils/format';\n\nexport const instantSwap = async ({\n tokenIn,\n tokenOut,\n amountIn,\n slippageTolerance,\n swapTodos,\n AccountId,\n referralId,\n}: {\n tokenIn: TokenMetadata;\n tokenOut: TokenMetadata;\n amountIn: string;\n slippageTolerance: number;\n swapTodos: EstimateSwapView[];\n AccountId: string;\n referralId?: string;\n}) => {\n const transactions: Transaction[] = [];\n\n if (swapTodos?.[swapTodos?.length - 1]?.outputToken !== tokenOut.id)\n throw SwapRouteError;\n\n const registerToken = async (token: TokenMetadata) => {\n const tokenRegistered = await ftGetStorageBalance(\n token.id,\n AccountId\n ).catch(() => {\n throw new Error(`${token.id} doesn't exist.`);\n });\n\n if (tokenRegistered === null) {\n transactions.push({\n receiverId: token.id,\n functionCalls: [\n {\n methodName: 'storage_deposit',\n args: {\n registration_only: true,\n account_id: AccountId,\n },\n gas: '30000000000000',\n amount: formatNearAmount(await getMinStorageBalance(token.id), 24),\n },\n ],\n });\n }\n };\n\n await registerToken(tokenOut);\n let actionsList: any = [];\n let allSwapsTokens = swapTodos.map(s => [s.inputToken, s.outputToken]); // to get the hop tokens\n for (let i in allSwapsTokens) {\n let swapTokens = allSwapsTokens[i];\n if (swapTokens[0] === tokenIn.id && swapTokens[1] === tokenOut.id) {\n // parallel, direct hop route.\n actionsList.push({\n pool_id: swapTodos[i].pool.id,\n token_in: tokenIn.id,\n token_out: tokenOut.id,\n amount_in: swapTodos[i].pool.partialAmountIn,\n min_amount_out: round(\n tokenOut.decimals,\n toNonDivisibleNumber(\n tokenOut.decimals,\n percentLess(slippageTolerance, swapTodos[i].estimate)\n )\n ),\n });\n } else if (swapTokens[0] === tokenIn.id) {\n // first hop in double hop route\n //TODO -- put in a check to make sure this first hop matches with the next (i+1) hop as a second hop.\n actionsList.push({\n pool_id: swapTodos[i].pool.id,\n token_in: swapTokens[0],\n token_out: swapTokens[1],\n amount_in: swapTodos[i].pool.partialAmountIn,\n min_amount_out: '0',\n });\n } else {\n // second hop in double hop route.\n //TODO -- put in a check to make sure this second hop matches with the previous (i-1) hop as a first hop.\n actionsList.push({\n pool_id: swapTodos[i].pool.id,\n token_in: swapTokens[0],\n token_out: swapTokens[1],\n min_amount_out: round(\n tokenOut.decimals,\n toNonDivisibleNumber(\n tokenOut.decimals,\n percentLess(slippageTolerance, swapTodos[i].estimate)\n )\n ),\n });\n }\n }\n\n transactions.push({\n receiverId: tokenIn.id,\n functionCalls: [\n {\n methodName: 'ft_transfer_call',\n args: {\n receiver_id: REF_FI_CONTRACT_ID,\n amount: toNonDivisibleNumber(tokenIn.decimals, amountIn),\n msg: !!referralId\n ? JSON.stringify({\n force: 0,\n actions: actionsList,\n referral_id: referralId,\n })\n : JSON.stringify({\n force: 0,\n actions: actionsList,\n }),\n },\n gas: '300000000000000',\n amount: ONE_YOCTO_NEAR,\n },\n ],\n });\n\n return transactions;\n};\n","import { getTotalPools, refFiViewFunction } from '../ref';\nimport { Pool, PoolRPCView } from '../types';\nimport { parsePool, toNonDivisibleNumber } from '../utils';\nimport { STABLE_LP_TOKEN_DECIMALS, config } from '../constant';\n\nlet DEFAULT_PAGE_LIMIT = 100;\nconst BLACK_TOKEN_LIST = ['meta-token.near'];\n\nexport const getRatedPoolDetail = async ({ id }: { id: string | number }) => {\n return refFiViewFunction({\n methodName: 'get_rated_pool',\n args: { pool_id: Number(id) },\n })\n .then(pool_info => ({\n ...pool_info,\n id: Number(id),\n pool_kind: 'RATED_SWAP',\n }))\n .catch(() => {});\n};\n\nexport const getUnRatedPoolDetail = async ({ id }: { id: string | number }) => {\n return refFiViewFunction({\n methodName: 'get_stable_pool',\n args: { pool_id: Number(id) },\n })\n .then(pool_info => ({\n ...pool_info,\n id: Number(id),\n pool_kind: 'STABLE_SWAP',\n rates: pool_info.c_amounts.map((_: any) =>\n toNonDivisibleNumber(STABLE_LP_TOKEN_DECIMALS, '1')\n ),\n }))\n .catch(() => {});\n};\nexport const getDegenPoolDetail = async ({ id }: { id: string | number }) => {\n return refFiViewFunction({\n methodName: 'get_degen_pool',\n args: { pool_id: Number(id) },\n })\n .then(pool_info => ({\n ...pool_info,\n id: Number(id),\n pool_kind: 'DEGEN_SWAP',\n rates: pool_info.c_amounts.map((i: any) =>\n toNonDivisibleNumber(STABLE_LP_TOKEN_DECIMALS, '1')\n ),\n }))\n .catch(() => {});\n};\n\nexport const getStablePools = async (stablePools: Pool[]) => {\n const res: any[] = await Promise.allSettled(\n stablePools.map(pool =>\n pool.pool_kind === 'RATED_SWAP'\n ? getRatedPoolDetail({ id: pool.id })\n : pool.pool_kind === 'DEGEN_SWAP'\n ? getDegenPoolDetail({ id: pool.id })\n : pool.pool_kind === 'STABLE_SWAP'\n ? getUnRatedPoolDetail({ id: pool.id })\n : getPool(pool.id)\n )\n );\n return res.reduce((acc, cur) => {\n if (cur.status === 'fulfilled' && cur.value) {\n return [...(acc || []), cur.value];\n }\n return acc;\n }, []);\n};\n\nexport const getPool = async (id: number): Promise<Pool> => {\n return await refFiViewFunction({\n methodName: 'get_pool',\n args: { pool_id: id },\n })\n .then((pool: PoolRPCView) => parsePool(pool, id))\n .catch();\n};\n\nexport const getPoolByIds = async (ids: number[]): Promise<Pool[]> => {\n return await refFiViewFunction({\n methodName: 'get_pool_by_ids',\n args: { pool_ids: ids },\n }).then((pools: PoolRPCView[]) => pools.map((p, i) => parsePool(p, ids[i])));\n};\n\nexport const getRefPools = async (\n page: number = 1,\n perPage: number = DEFAULT_PAGE_LIMIT\n): Promise<Pool[]> => {\n const index = (page - 1) * perPage;\n const poolData: PoolRPCView[] = await refFiViewFunction({\n methodName: 'get_pools',\n args: { from_index: index, limit: perPage },\n });\n return poolData\n .map((rawPool, i) => parsePool(rawPool, i + index))\n .filter(\n p => !p.tokenIds?.find(tokenId => BLACK_TOKEN_LIST.includes(tokenId))\n );\n};\n\nexport const fetchAllPools = async (perPage?: number) => {\n try {\n const pools = await fetch(`${config.indexerUrl}/fetchAllPools`).then(res =>\n res.json()\n );\n if (!pools.simplePools) throw Error();\n return pools;\n } catch (error) {}\n if (perPage) {\n DEFAULT_PAGE_LIMIT = Math.min(perPage, 500);\n }\n const totalPools = await getTotalPools();\n const pages = Math.ceil(totalPools / DEFAULT_PAGE_LIMIT);\n const pools = (\n await Promise.all(\n [...Array(pages)].fill(0).map((_, i) => getRefPools(i + 1))\n )\n ).flat() as Pool[];\n return {\n simplePools: pools.filter(\n p => p.pool_kind && p.pool_kind === 'SIMPLE_POOL'\n ),\n unRatedPools: pools.filter(\n p => p.pool_kind && p.pool_kind === 'STABLE_SWAP'\n ),\n ratedPools: pools.filter(p => p.pool_kind && p.pool_kind === 'RATED_SWAP'),\n };\n};\n","import React, {\n useEffect,\n useState,\n useContext,\n createContext,\n ReactNode,\n useMemo,\n useCallback,\n} from 'react';\nimport {\n ftGetBalance,\n ftGetTokenMetadata,\n getGlobalWhitelist,\n nearDepositTransaction,\n nearWithdrawTransaction,\n REPLACE_TOKENS,\n} from '../ref';\nimport {\n EstimateSwapView,\n Pool,\n StablePool,\n TokenMetadata,\n Transaction,\n} from '../types';\nimport { fetchAllPools, getStablePools } from '../v1-swap/pool';\nimport { estimateSwap, SwapOptions, SwapParams } from '../v1-swap/swap';\nimport { ftGetStorageBalance, getMinStorageBalance } from '../ref';\nimport { SwapOutParams } from './types';\nimport {\n percentLess,\n separateRoutes,\n toNonDivisibleNumber,\n calculateExchangeRate,\n getAvgFee,\n} from '../utils';\nimport Big from 'big.js';\nimport { instantSwap } from '../v1-swap/instantSwap';\n\nimport { getExpectedOutputFromActionsORIG } from '../v1-swap/smartRoutingLogic.js';\nimport { Theme } from './constant';\nimport { defaultTheme } from './constant';\nimport {\n getTokenPriceList,\n getTokens,\n getWhiteListTokensIndexer,\n} from '../indexer';\nimport {\n toReadableNumber,\n ONLY_ZEROS,\n getExpectedOutputFromSwapTodos,\n} from '../utils';\nimport { getUserRegisteredTokens } from '../ref';\nimport { WRAP_NEAR_CONTRACT_ID, NEAR_META_DATA } from '../constant';\nimport { scientificNotationToString } from '../utils';\nimport metaIconDefaults from '../metaIcons';\nimport {\n formatNearAmount,\n parseNearAmount,\n} from 'near-api-js/lib/utils/format';\n\nexport const ThemeContext = createContext<Theme>(defaultTheme);\n\nexport const ThemeContextProvider: React.FC<{\n customTheme: Theme | undefined;\n}> = ({ customTheme, children }) => {\n const [theme, setTheme] = useState<Theme>(customTheme || defaultTheme);\n\n useEffect(() => {\n if (!customTheme) return;\n setTheme(customTheme);\n }, [customTheme]);\n\n return (\n <ThemeContext.Provider value={theme}>{children}</ThemeContext.Provider>\n );\n};\n\nexport const estimateValidator = (\n swapTodos: EstimateSwapView[],\n tokenIn: TokenMetadata,\n parsedAmountIn: string,\n tokenOut: TokenMetadata\n) => {\n const tokenInId = swapTodos[0]?.inputToken;\n const tokenOutId = swapTodos[swapTodos.length - 1]?.outputToken;\n\n const totalPartialAmountIn =\n swapTodos.length === 0\n ? new Big(swapTodos[0].pool.partialAmountIn || 0)\n : swapTodos.reduce(\n (acc, cur, i) => acc.plus(cur.pool.partialAmountIn || 0),\n new Big(0)\n );\n\n if (\n tokenInId !== tokenIn.id ||\n tokenOutId !== tokenOut.id ||\n !totalPartialAmountIn.eq(parsedAmountIn || '0')\n ) {\n return false;\n }\n return true;\n};\n\nexport const useAllTokens = ({ reload }: { reload?: boolean }) => {\n const [tokens, setTokens] = useState<Record<string, TokenMetadata>>();\n const [tokensLoading, setTokensLoading] = useState<boolean>(true);\n\n useEffect(() => {\n const fetchTokens = async () => {\n const tokens = await getTokens(reload);\n setTokens(tokens);\n setTokensLoading(false);\n };\n fetchTokens();\n }, [reload]);\n\n return { tokens, tokensLoading };\n};\n\nexport const useTokensIndexer = ({\n defaultTokenList,\n AccountId,\n}: {\n defaultTokenList?: TokenMetadata[];\n AccountId?: string;\n}) => {\n const [tokens, setTokens] = useState<TokenMetadata[]>([]);\n\n const [tokenLoading, setTokenLoading] = useState<boolean>(false);\n\n useEffect(() => {\n setTokenLoading(true);\n\n const getTokensList = async () => {\n const whiteList = await getGlobalWhitelist();\n const globalWhiteListTokens = (\n await getWhiteListTokensIndexer(whiteList)\n ).filter(token => !!token) as TokenMetadata[];\n\n const parsedTokens = globalWhiteListTokens.map(t => {\n return t.id === WRAP_NEAR_CONTRACT_ID\n ? {\n ...NEAR_META_DATA,\n id: t.id,\n }\n : t;\n });\n\n if (!defaultTokenList || defaultTokenList.length === 0) {\n setTokens(parsedTokens);\n setTokenLoading(false);\n } else {\n const newList = defaultTokenList\n .map(t => {\n return t.id === WRAP_NEAR_CONTRACT_ID\n ? {\n ...NEAR_META_DATA,\n id: t.id,\n }\n : t;\n })\n .filter(t => {\n return parsedTokens.findIndex(p => p.id === t.id) !== -1;\n });\n setTokens(\n newList.map(t =>\n !t.icon || REPLACE_TOKENS.includes(t.id)\n ? {\n ...t,\n icon: metaIconDefaults[t.id],\n }\n : t\n )\n );\n setTokenLoading(false);\n }\n };\n\n getTokensList();\n }, [AccountId, defaultTokenList]);\n\n return { tokens, tokenLoading };\n};\n\nexport const useRefPools = (refreshTrigger: boolean) => {\n const [allPools, setAllPools] = useState<{\n simplePools: Pool[];\n ratedPools: Pool[];\n unRatedPools: Pool[];\n }>({\n simplePools: [],\n ratedPools: [],\n unRatedPools: [],\n });\n\n const [poolFetchingState, setPoolFetchingState] = useState<'loading' | 'end'>(\n 'loading'\n );\n\n const [allStablePools, setAllStablePools] = useState<StablePool[]>([]);\n\n useEffect(() => {\n setPoolFetchingState('loading');\n\n fetchAllPools()\n .then(allPools => {\n setAllPools(allPools);\n\n return allPools;\n })\n .then(allPools => {\n const pools: Pool[] = allPools.unRatedPools.concat(allPools.ratedPools);\n\n return getStablePools(pools).then(setAllStablePools);\n })\n .finally(() => {\n setPoolFetchingState('end');\n });\n }, [refreshTrigger]);\n\n return {\n allPools,\n allStablePools,\n poolFetchingState,\n };\n};\n\nexport const useSwap = (\n params: {\n tokenIn?: TokenMetadata;\n tokenOut?: TokenMetadata;\n amountIn: string;\n simplePools: Pool[];\n options?: SwapOptions;\n } & {\n slippageTolerance: number;\n refreshTrigger: boolean;\n onSwap: (transactionsRef: Transaction[]) => Promise<void>;\n AccountId?: string;\n poolFetchingState?: 'loading' | 'end';\n referralId?: string;\n tokens: TokenMetadata[];\n }\n): SwapOutParams => {\n const {\n slippageTolerance,\n refreshTrigger,\n onSwap,\n AccountId,\n poolFetchingState,\n referralId,\n tokens,\n } = params;\n\n const { tokenIn, tokenOut, amountIn } = params;\n\n const [estimates, setEstimates] = useState<EstimateSwapView[]>([]);\n\n const [canSwap, setCanSwap] = useState(false);\n\n const [swapError, setSwapError] = useState<Error | null>(null);\n\n const [amountOut, setAmountOut] = useState<string>('');\n\n const [isEstimating, setIsEstimating] = useState<boolean>(false);\n\n const [forceEstimate, setForceEstimate] = useState<boolean>(false);\n\n const { balances, updateTokenBalance } = useTokenBalances(tokens, AccountId);\n\n const tokenInBalance = useMemo(() => balances[tokenIn?.id!], [\n tokenIn,\n balances,\n ]);\n\n const tokenOutBalance = useMemo(() => balances[tokenOut?.id!] || '', [\n tokenOut,\n balances,\n ]);\n\n const minAmountOut = amountOut\n ? percentLess(slippageTolerance, amountOut)\n : '';\n\n const fee =\n !params.tokenOut || !params.tokenIn\n ? 0\n : getAvgFee(\n estimates,\n params.tokenOut.id,\n toNonDivisibleNumber(params.tokenIn.decimals, params.amountIn)\n );\n\n const rate = calculateExchangeRate(\n ONLY_ZEROS.test(params.amountIn) ? '1' : params.amountIn,\n amountOut || '1'\n );\n\n const makeSwap = async () => {\n if (!params.tokenIn || !params.tokenOut || !AccountId) return;\n\n const transactionsRef = await instantSwap({\n tokenIn: params.tokenIn,\n tokenOut: params.tokenOut,\n amountIn: params.amountIn,\n swapTodos: estimates,\n slippageTolerance,\n AccountId: AccountId,\n referralId,\n });\n if (tokenIn && tokenIn.id === WRAP_NEAR_CONTRACT_ID) {\n const tokenRegistered = await ftGetStorageBalance(tokenIn.id, AccountId);\n\n let nearDepositAmount = amountIn;\n if (tokenRegistered === null) {\n const minStorageBalance = await getMinStorageBalance(tokenIn.id);\n nearDepositAmount = formatNearAmount(\n String(\n BigInt(parseNearAmount(nearDepositAmount)!) +\n BigInt(minStorageBalance)\n )\n );\n }\n\n transactionsRef.splice(-1, 0, nearDepositTransaction(nearDepositAmount));\n }\n if (tokenOut && tokenOut.id === WRAP_NEAR_CONTRACT_ID) {\n let outEstimate = new Big(0);\n const routes = separateRoutes(estimates, tokenOut.id);\n\n const bigEstimate = routes.reduce((acc, cur) => {\n const curEstimate = cur[cur.length - 1].estimate;\n return acc.plus(curEstimate);\n }, outEstimate);\n\n const minAmountOut = percentLess(\n slippageTolerance,\n\n scientificNotationToString(bigEstimate.toString())\n );\n\n transactionsRef.push(nearWithdrawTransaction(minAmountOut));\n }\n\n await onSwap(transactionsRef);\n\n setTimeout(() => {\n const tokensToUpdate = [];\n if (tokenIn) tokensToUpdate.push(tokenIn.id);\n if (tokenOut) tokensToUpdate.push(tokenOut.id);\n if (tokensToUpdate.length > 0 && AccountId)\n updateTokenBalance(tokensToUpdate, AccountId);\n }, 3000);\n };\n\n const getEstimate = () => {\n if (\n !params.tokenIn ||\n !params.tokenOut ||\n poolFetchingState === 'loading'\n ) {\n setCanSwap(false);\n return;\n }\n setCanSwap(false);\n\n if (\n ONLY_ZEROS.test(params.amountIn) ||\n !params.tokenOut ||\n !params.tokenIn\n ) {\n setAmountOut('');\n setEstimates([]);\n return;\n }\n\n setSwapError(null);\n setIsEstimating(true);\n estimateSwap({\n tokenIn: params.tokenIn,\n tokenOut: params.tokenOut,\n amountIn: params.amountIn,\n simplePools: params.simplePools,\n options: params.options,\n })\n .then(estimates => {\n if (\n ONLY_ZEROS.test(params.amountIn) ||\n !params.tokenOut ||\n !params.tokenIn\n ) {\n setAmountOut('');\n return;\n }\n setSwapError(null);\n\n const expectAmountOut = getExpectedOutputFromSwapTodos(\n estimates,\n params.tokenOut.id\n ).toString();\n\n setAmountOut(expectAmountOut);\n\n setEstimates(estimates);\n setCanSwap(true);\n })\n .catch(e => {\n setSwapError(e);\n setCanSwap(false);\n setAmountOut('');\n })\n .finally(() => {\n setIsEstimating(false);\n setForceEstimate(false);\n });\n };\n\n useEffect(() => {\n const estimateValidationPass =\n estimates.length > 0 &&\n params.tokenIn &&\n params.tokenOut &&\n estimateValidator(\n estimates,\n params.tokenIn,\n toNonDivisibleNumber(params.tokenIn.decimals, params.amountIn),\n params.tokenOut\n );\n\n if (isEstimating && estimates && !forceEstimate) return;\n if ((estimateValidationPass || swapError) && !forceEstimate) return;\n getEstimate();\n }, [\n params.amountIn,\n params.tokenIn?.id,\n params.tokenOut?.id,\n refreshTrigger,\n poolFetchingState,\n isEstimating,\n forceEstimate,\n ]);\n\n useEffect(() => {\n // setEstimating(false);\n\n setForceEstimate(true);\n }, [\n params.tokenIn?.id,\n params.tokenOut?.id,\n params.options?.enableSmartRouting,\n ]);\n\n return {\n amountOut,\n minAmountOut,\n balances,\n tokenInBalance,\n tokenOutBalance,\n fee,\n rate,\n estimates,\n makeSwap,\n canSwap,\n swapError,\n setAmountOut,\n isEstimating,\n };\n};\n\nexport const TokenPriceContext = createContext<Record<string, any> | null>(\n null\n);\n\nexport const useTokenPriceList = () => {\n const [tokenPriceList, setTokenPriceList] = useState<Record<string, any>>({});\n\n useEffect(() => {\n getTokenPriceList().then(setTokenPriceList);\n }, []);\n\n return tokenPriceList;\n};\n\nexport const TokenPriceContextProvider: React.FC = ({ children }) => {\n const tokenPriceList = useTokenPriceList();\n\n return (\n <TokenPriceContext.Provider value={tokenPriceList}>\n {children}\n </TokenPriceContext.Provider>\n );\n};\n\ntype BalancesMap = Record<string, string>;\n\nexport const useTokenBalances = (\n tokens: TokenMetadata[],\n AccountId?: string\n) => {\n const [balances, setBalances] = useState<BalancesMap>({});\n\n const updateTokenBalance = useCallback(\n async (tokenIds: string[], AccountId: string) => {\n const updatedTokensBalancesMap: BalancesMap = {};\n await Promise.all(\n tokenIds.map(async tokenId => {\n updatedTokensBalancesMap[tokenId] = toReadableNumber(\n tokens.find(t => t.id === tokenId)?.decimals || 0,\n await ftGetBalance(\n tokenId === WRAP_NEAR_CONTRACT_ID ? 'NEAR' : tokenId,\n AccountId\n )\n );\n })\n );\n setBalances(prevState => ({ ...prevState, ...updatedTokensBalancesMap }));\n },\n [tokens]\n );\n\n useEffect(() => {\n // Initializes token balances\n // Called in 15 seconds intervals\n const initTokenBalances = async () => {\n if (!AccountId) {\n setBalances({});\n return;\n }\n\n const validTokens = tokens.filter(t => !!t?.id);\n const ids = validTokens.map(token => token.id);\n\n updateTokenBalance(ids, AccountId);\n };\n\n initTokenBalances();\n const interval = setInterval(initTokenBalances, 15_000);\n return () => clearInterval(interval);\n }, [AccountId, tokens.map(t => t?.id).join('-')]);\n\n return { balances, updateTokenBalance };\n};\n","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","import React, { useState, useEffect, useContext, useRef, useMemo } from 'react';\nimport { TokenMetadata, EstimateSwapView, Pool } from '../types';\nimport {\n ThemeContext,\n useTokenPriceList,\n TokenPriceContext,\n useTokenBalances,\n} from './state';\n\nimport { FiChevronDown } from '@react-icons/all-files/fi/FiChevronDown';\n\nimport { FiChevronLeft } from '@react-icons/all-files/fi/FiChevronLeft';\n\nimport { FiChevronUp } from '@react-icons/all-files/fi/FiChevronUp';\n\nimport { FaSearch } from '@react-icons/all-files/fa/FaSearch';\n\nimport { RiRefreshLine } from '@react-icons/all-files/ri/RiRefreshLine';\n\nimport { TiArrowSortedUp } from '@react-icons/all-files/ti/TiArrowSortedUp';\n\nimport { TiArrowSortedDown } from '@react-icons/all-files/ti/TiArrowSortedDown';\n\nimport { HiOutlineExternalLink } from '@react-icons/all-files/hi/HiOutlineExternalLink';\n\nimport { AiFillPushpin } from '@react-icons/all-files/ai/AiFillPushpin';\n\nimport { AiOutlinePushpin } from '@react-icons/all-files/ai/AiOutlinePushpin';\n\nimport { RiExchangeFill } from '@react-icons/all-files/ri/RiExchangeFill';\n\nimport { IoWarning } from '@react-icons/all-files/io5/IoWarning';\n\nimport { IoCloseOutline } from '@react-icons/all-files/io5/IoCloseOutline';\n\nimport './style.css';\nimport {\n getAccountName,\n symbolsArr,\n multiply,\n percentOfBigNumber,\n ONLY_ZEROS,\n toRealSymbol,\n toPrecision,\n toInternationalCurrencySystemLongString,\n calculateFeeCharge,\n calculateFeePercent,\n isValidSlippageTolerance,\n} from '../utils';\nimport { REF_WIDGET_STAR_TOKEN_LIST_KEY } from './constant';\nimport Big from 'big.js';\nimport {\n config,\n DEFAULT_SLIPPAGE_TOLERANCE,\n FEE_DIVISOR,\n getConfig,\n NEAR_META_DATA,\n TokenLinks,\n WRAP_NEAR_CONTRACT_ID,\n} from '../constant';\nimport {\n scientificNotationToString,\n percent,\n getPoolAllocationPercents,\n} from '../utils';\nimport {\n REF_WIDGET_SWAP_DETAIL_KEY,\n DEFAULT_START_TOKEN_LIST_TESTNET,\n DEFAULT_START_TOKEN_LIST_MAINNET,\n} from './constant';\nimport { PoolMode } from '../v1-swap/swap';\nimport { isMobile, separateRoutes, divide, getMax } from '../utils';\nimport { SwapState } from './types';\n\ninterface TokenAmountProps {\n balance?: string;\n reloading?: JSX.Element;\n token?: TokenMetadata;\n onSelectToken: () => void;\n amount: string;\n onChangeAmount?: (amount: string) => void;\n price?: string;\n onForceUpdate?: () => void;\n poolFetchingState?: 'loading' | 'end';\n minNearAmountLeftForGasFees: number;\n}\n\nexport const getPriceImpact = (\n value: string,\n tokenIn: TokenMetadata,\n tokenInAmount: string\n) => {\n const textColor =\n Number(value) <= 1\n ? 'text-greenLight'\n : 1 < Number(value) && Number(value) <= 2\n ? 'text-warn'\n : 'text-error';\n\n const displayValue = scientificNotationToString(\n multiply(tokenInAmount || '0', divide(value, '100'))\n );\n\n const tokenInInfo =\n Number(displayValue) <= 0\n ? ` / 0 ${toRealSymbol(tokenIn.symbol)}`\n : ` / -${toInternationalCurrencySystemLongString(\n displayValue,\n 3\n )} ${toRealSymbol(tokenIn.symbol)}`;\n\n if (Number(value) < 0.01)\n return (\n <span className=\"text-greenLight\">\n {`< -0.01%`}\n {tokenInInfo}\n </span>\n );\n\n if (Number(value) > 1000)\n return (\n <span className=\"text-error\">\n {`< -1000%`}\n {tokenInInfo}\n </span>\n );\n\n return (\n <span className={`${textColor} font-sans`}>\n {`≈ -${toPrecision(value, 2)}%`}\n {tokenInInfo}\n </span>\n );\n};\n\nexport const SmartRouteV2 = ({\n tokens: tokensRaw,\n p,\n pools,\n}: {\n tokens: TokenMetadata[];\n p: string;\n pools: Pool[];\n}) => {\n const theme = useContext(ThemeContext);\n\n const tokens = tokensRaw.map(t =>\n t.id === WRAP_NEAR_CONTRACT_ID\n ? { ...NEAR_META_DATA, id: WRAP_NEAR_CONTRACT_ID }\n : t\n );\n\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n borderColor,\n iconDefault,\n iconHover,\n } = theme;\n\n const ParaTokenFrom = ({\n tokenIn,\n p,\n }: {\n tokenIn: TokenMetadata;\n p: string;\n }) => {\n return (\n <div\n className=\"__ref-swap-widget-row-flex-center \"\n style={{\n width: '60px',\n }}\n >\n <span\n style={{\n marginRight: '4px',\n }}\n >\n {p}%\n </span>\n <span className=\"\">\n <Icon token={tokenIn} />\n </span>\n </div>\n );\n };\n const Icon = ({ token }: { token: TokenMetadata }) => {\n if (token.icon) {\n return (\n <img\n src={token.icon}\n alt=\"\"\n style={{\n borderRadius: '100%',\n height: '16px',\n width: '16px',\n flexShrink: 0,\n }}\n />\n );\n } else {\n return (\n <div\n style={{\n borderRadius: '100%',\n height: '16px',\n width: '16px',\n }}\n />\n );\n }\n };\n const Hub = ({ token, poolId }: { token: TokenMetadata; poolId: number }) => {\n return (\n <div\n className={`__ref-swap-widget-row-flex-center`}\n style={{\n width: '62px',\n height: '22px',\n }}\n >\n <div\n className={`w-full flex items-center justify-start pl-2 `}\n style={{\n marginRight: '4px',\n }}\n >\n <span className=\"text-gray-400\">{`#${poolId}`}</span>\n </div>\n <Icon token={token} />\n </div>\n );\n };\n\n if (tokens.length === 3) {\n return (\n <div className=\"__ref-swap-widget-row-flex-center __ref-swap-widget-swap_route_row\">\n {/* <Hub token={tokens[0]} /> */}\n\n <ParaTokenFrom tokenIn={tokens[0]} p={p} />\n <div\n className=\"\"\n style={{\n position: 'relative',\n bottom: '1px',\n }}\n >\n <ArrowRight />\n </div>\n\n <Hub token={tokens[1]} poolId={pools?.[0]?.id} />\n <div\n className=\"px-3\"\n style={{\n position: 'relative',\n bottom: '1px',\n }}\n >\n <ArrowRight />\n </div>\n\n <Hub token={tokens[2]} poolId={pools?.[1]?.id} />\n </div>\n );\n } else if (tokens.length === 2) {\n return (\n <div className=\"__ref-swap-widget-row-flex-center __ref-swap-widget-swap_route_row\">\n <ParaTokenFrom tokenIn={tokens[0]} p={p} />\n <div className=\"px-3\">\n <ArrowRight />\n </div>\n <Hub token={tokens[1]} poolId={pools?.[0]?.id} />\n </div>\n );\n } else {\n return null;\n }\n};\n\nexport const DetailView = ({\n tokenIn,\n tokenOut,\n rate,\n fee,\n minReceived,\n amountIn,\n amountOut,\n priceImpact,\n estimates,\n}: {\n tokenIn: TokenMetadata | undefined;\n tokenOut: TokenMetadata | undefined;\n rate: string;\n fee: number;\n minReceived: string;\n amountIn: string;\n amountOut: string;\n priceImpact: string;\n estimates: EstimateSwapView[];\n}) => {\n const theme = useContext(ThemeContext);\n\n const storagedOpen = !!localStorage.getItem(REF_WIDGET_SWAP_DETAIL_KEY);\n\n const [showDetail, setShowDetail] = useState(storagedOpen || false);\n const [isRateReverse, setIsRateReverse] = useState(false);\n\n const tokensPerRoute = estimates\n .filter(swap => swap.inputToken === tokenIn?.id)\n .map(swap => swap.tokens);\n\n const identicalRoutes = separateRoutes(\n estimates,\n estimates[estimates.length - 1]?.outputToken || ''\n );\n\n const pools = identicalRoutes.map(r => r[0]).map(hub => hub.pool);\n const percents = useMemo(() => {\n if (!pools || pools.length === 0) return [];\n return getPoolAllocationPercents(pools);\n }, [pools]);\n\n const priceImpactDisplay = useMemo(() => {\n if (!priceImpact || !tokenIn || !amountIn) return null;\n return getPriceImpact(priceImpact, tokenIn, amountIn);\n }, [priceImpact, tokenIn, amountIn]);\n if (!tokenIn || !tokenOut) return null;\n\n const displayRate = `1 ${toRealSymbol(tokenIn.symbol)} ≈ ${\n Number(rate) < 0.01 ? '< 0.01' : toPrecision(rate, 2)\n } ${toRealSymbol(tokenOut.symbol)}`;\n\n const revertRate = new Big(1).div(ONLY_ZEROS.test(rate) ? '1' : rate || '1');\n\n const revertDisplayRate = `1 ${toRealSymbol(tokenOut.symbol)} ≈ ${\n Number(revertRate) < 0.01 ? '< 0.01' : toPrecision(revertRate.toString(), 2)\n } ${toRealSymbol(tokenIn.symbol)}`;\n\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n borderColor,\n iconDefault,\n iconHover,\n } = theme;\n\n return (\n <div\n className=\"__ref-widget-swap-detail-view __ref-swap-widget-col-flex-start\"\n style={{\n color: secondary,\n }}\n >\n <div className=\"__ref-swap-widget-row-flex-center __ref-swap-widget-swap-detail-view-item\">\n <div\n style={{\n color: primary,\n cursor: 'pointer',\n }}\n className=\"__ref-swap-widget-row-flex-center\"\n onClick={() => {\n if (showDetail) localStorage.removeItem(REF_WIDGET_SWAP_DETAIL_KEY);\n else {\n localStorage.setItem(REF_WIDGET_SWAP_DETAIL_KEY, '1');\n }\n setShowDetail(!showDetail);\n }}\n >\n <div>Detail</div>\n <div\n style={{\n position: 'relative',\n }}\n >\n {!showDetail ? <FiChevronDown /> : <FiChevronUp />}\n </div>\n </div>\n\n {amountIn && amountOut && (\n <div className=\"__ref-swap-widget-row-flex-center\">\n <div>{isRateReverse ? revertDisplayRate : displayRate}</div>\n\n <RiExchangeFill\n onClick={() => {\n setIsRateReverse(!isRateReverse);\n }}\n size={16}\n style={{\n marginLeft: '4px',\n cursor: 'pointer',\n }}\n fill={iconDefault}\n />\n </div>\n )}\n </div>\n {!showDetail ? null : (\n <>\n <div className=\"__ref-swap-widget-row-flex-center __ref-swap-widget-swap-detail-view-item\">\n <div>Minimum received</div>\n <div>{toPrecision(minReceived || '0', 8)}</div>\n </div>\n\n <div className=\"__ref-swap-widget-row-flex-center __ref-swap-widget-swap-detail-view-item\">\n <div>Fee</div>\n\n <div>\n {!amountIn\n ? '0'\n : `${calculateFeeCharge(fee, amountIn)} ${toRealSymbol(\n tokenIn.symbol\n )}(${toPrecision(calculateFeePercent(fee).toString(), 2)}%)`}\n </div>\n </div>\n </>\n )}\n\n {!showDetail ? null : (\n <>\n <div className=\"__ref-swap-widget-row-flex-center __ref-swap-widget-swap-detail-view-item\">\n <div>Price impact</div>\n\n <div>{priceImpactDisplay}</div>\n </div>\n </>\n )}\n\n {estimates && estimates.length > 1 && showDetail && (\n <div\n className=\"__ref-swap-widget-swap_routes __ref-swap-widget-row-flex-center\"\n style={{\n border: `1px solid ${borderColor}`,\n flexDirection: isMobile() ? 'column' : 'row',\n position: 'relative',\n alignItems: 'flex-start',\n justifyContent: 'space-between',\n }}\n >\n <div className=\"__ref-swap-widget-row-flex-center\">\n <RouterIcon />\n <span\n className=\"__ref-swap-widget-valueStyle\"\n style={{\n marginLeft: '4px',\n whiteSpace: 'nowrap',\n }}\n >\n {'Auto Router'}\n </span>\n </div>\n\n <div\n className=\"\"\n style={{\n width: isMobile() ? '100%' : 'auto',\n minWidth: !isMobile() ? '70%' : '',\n }}\n >\n {tokensPerRoute.every(r => !!r) &&\n tokensPerRoute.map((tokens, index) => {\n if (!tokens) return null;\n return (\n <SmartRouteV2\n key={index + '-swap-route'}\n tokens={tokens}\n p={percents[index]}\n pools={identicalRoutes[index].map(hub => hub.pool)}\n />\n );\n })}\n </div>\n </div>\n )}\n </div>\n );\n};\n\nexport const HalfAndMaxAmount = ({\n max,\n onChangeAmount,\n token,\n amount,\n}: {\n max: string;\n token: TokenMetadata;\n onChangeAmount: (amount: string) => void;\n amount: string;\n}) => {\n const halfValue = percentOfBigNumber(50, max, token.decimals);\n\n const theme = useContext(ThemeContext);\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n borderColor,\n } = theme;\n\n const [hoverHalf, setHoverHalf] = useState<boolean>(false);\n const [hoverMax, setHoverMax] = useState<boolean>(false);\n\n return (\n <div className=\"__ref-swap-widget-token-amount_quick_selector __ref-swap-widget-row-flex-center\">\n <span\n className=\"__ref-swap-widget-token-amount_quick_selector_item \"\n style={{\n color: secondary,\n borderRadius,\n border: `1px solid ${borderColor}`,\n marginRight: '4px',\n\n background:\n amount === halfValue && !ONLY_ZEROS.test(halfValue)\n ? active\n : hoverHalf\n ? hover\n : 'transparent',\n }}\n onMouseEnter={() => setHoverHalf(true)}\n onMouseLeave={() => setHoverHalf(false)}\n onClick={() => {\n const half = percentOfBigNumber(50, max, token.decimals);\n\n onChangeAmount(half);\n }}\n >\n Half\n </span>\n\n <span\n className=\"__ref-swap-widget-token-amount_quick_selector_item\"\n onClick={() => {\n onChangeAmount(max);\n }}\n onMouseEnter={() => setHoverMax(true)}\n onMouseLeave={() => setHoverMax(false)}\n style={{\n color: secondary,\n borderRadius,\n border: `1px solid ${borderColor}`,\n background:\n amount === max && !ONLY_ZEROS.test(max)\n ? active\n : hoverMax\n ? hover\n : 'transparent',\n }}\n >\n Max\n </span>\n </div>\n );\n};\n\nconst DECIMAL_POINT = '.';\nconst ALLOWED_KEYS: Record<string, boolean> = {\n '0': true,\n '1': true,\n '2': true,\n '3': true,\n '4': true,\n '5': true,\n '6': true,\n '7': true,\n '8': true,\n '9': true,\n [DECIMAL_POINT]: true,\n};\n\nconst isValidInput = (value: string) => {\n let decimalPointsAmount = 0;\n if (value === DECIMAL_POINT) return false;\n for (let i = 0; i < value.length; i++) {\n const char = value[i];\n if (!ALLOWED_KEYS[char]) return false;\n if (char === DECIMAL_POINT) {\n decimalPointsAmount++;\n if (decimalPointsAmount === 2) {\n return false;\n }\n }\n }\n return true;\n};\nexport const TokenAmount = (props: TokenAmountProps) => {\n const {\n balance,\n reloading,\n token,\n onSelectToken,\n amount,\n onChangeAmount,\n price,\n onForceUpdate,\n poolFetchingState,\n minNearAmountLeftForGasFees,\n } = props;\n\n const theme = useContext(ThemeContext);\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n borderColor,\n } = theme;\n\n const ref = useRef<HTMLInputElement>(null);\n\n const [hoverSelect, setHoverSelect] = useState<boolean>(false);\n const handleChange = (amount: string) => {\n if (onChangeAmount) {\n onChangeAmount(amount);\n }\n if (ref.current) {\n ref.current.value = amount;\n }\n };\n\n useEffect(() => {\n if (\n ref.current &&\n onChangeAmount &&\n token &&\n balance &&\n token.id === WRAP_NEAR_CONTRACT_ID &&\n Number(balance) - Number(ref.current.value) < minNearAmountLeftForGasFees\n ) {\n ref.current.setCustomValidity(\n `Must have ${minNearAmountLeftForGasFees}N or more left in wallet for gas fee.`\n );\n } else {\n ref.current?.setCustomValidity('');\n }\n }, [ref, balance, ref.current, ref.current?.value, token, amount]);\n\n const curMax = token\n ? getMax(token.id, balance || '0', minNearAmountLeftForGasFees)\n : '0';\n\n return (\n <>\n <div\n className=\"__ref-swap-widger-token-amount \"\n style={{\n background: secondaryBg,\n flexDirection: isMobile() ? 'column' : 'row',\n }}\n >\n <div\n className=\"__ref-swap-widget-row-flex-center\"\n style={{\n width: isMobile() ? 'auto' : '40%',\n }}\n >\n <div\n className=\"__ref-swap-widget-row-flex-center __ref-swap-widget-token-amount_token-select-button\"\n style={{\n color: primary,\n background: hoverSelect ? hover : 'transparent',\n border: `1px solide ${hoverSelect ? borderColor : 'transparent'}`,\n }}\n onClick={onSelectToken}\n onMouseEnter={() => setHoverSelect(true)}\n onMouseLeave={() => setHoverSelect(false)}\n >\n {!token ? (\n <>\n <span\n style={{\n whiteSpace: 'nowrap',\n height: '26px',\n userSelect: 'none',\n }}\n className=\"__ref-swap-widget-row-flex-center\"\n >\n Select Token\n </span>\n </>\n ) : (\n <>\n <img\n src={token?.icon}\n alt=\"\"\n className=\"__ref-swap-widget_token_icon\"\n style={{\n height: '26px',\n width: '26px',\n marginRight: '8px',\n }}\n />\n <span>{toRealSymbol(token?.symbol)}</span>\n </>\n )}\n <FiChevronDown\n style={{\n marginLeft: '4px',\n flexShrink: 0,\n }}\n />\n </div>\n\n {onForceUpdate && (\n <RiRefreshLine\n className={`${\n poolFetchingState === 'loading'\n ? '__ref-swap-widget-loading '\n : ''\n }`}\n style={{\n cursor: 'pointer',\n color: secondary,\n }}\n size={18}\n onClick={() => {\n onForceUpdate();\n }}\n />\n )}\n </div>\n\n <div\n className=\" __ref-swap-widget-token-amount_input\"\n style={{\n width: isMobile() ? '100%' : '60%',\n }}\n >\n <input\n ref={ref}\n max={!!onChangeAmount ? curMax : undefined}\n onWheel={() => {\n if (ref.current) {\n ref.current.blur();\n }\n }}\n className=\"__ref-swap-widget-input-class\"\n value={amount}\n type=\"text\"\n placeholder={!onChangeAmount ? '-' : '0.0'}\n onChange={({ target }) => {\n if (!isValidInput(target.value)) return;\n target.setCustomValidity('');\n handleChange(target.value);\n }}\n disabled={!onChangeAmount}\n style={{\n color: primary,\n marginBottom: '8px',\n width: '100%',\n textAlign: 'right',\n fontSize: '20px',\n }}\n />\n\n <div\n style={{\n fontSize: '12px',\n color: secondary,\n textAlign: 'right',\n }}\n >\n {!price\n ? '$-'\n : '~$' +\n toInternationalCurrencySystemLongString(\n multiply(price, amount || '0'),\n 2\n )}\n </div>\n </div>\n </div>\n\n {!balance || !token || !onChangeAmount ? null : (\n <div\n className=\"__ref-swap-widger-token-amount_balance __ref-swap-widget-row-flex-center\"\n style={{\n fontSize: '12px',\n color: secondary,\n }}\n >\n <span>\n Balance:&nbsp;\n {toPrecision(balance, 2)}\n </span>\n {token && (\n <HalfAndMaxAmount\n token={token}\n max={getMax(token.id, balance, minNearAmountLeftForGasFees)}\n onChangeAmount={handleChange}\n amount={amount}\n />\n )}\n </div>\n )}\n </>\n );\n};\n\nexport const SlippageSelector = ({\n slippageTolerance,\n onChangeSlippageTolerance,\n setShowSlip,\n}: {\n slippageTolerance: string;\n onChangeSlippageTolerance: (slippageTolerance: string) => void;\n setShowSlip: (showSlip: boolean) => void;\n}) => {\n const [invalid, setInValid] = useState<boolean>(false);\n\n const theme = useContext(ThemeContext);\n const { container, buttonBg, primary, borderRadius, borderColor } = theme;\n\n const handleChange = (amount: string) => {\n onChangeSlippageTolerance(amount);\n setInValid(!isValidSlippageTolerance(Number(amount)));\n };\n\n useEffect(() => {\n const onClick = (event: Event) => {\n if (!event.target) return;\n if (\n (event.target as HTMLElement).closest('#__ref-slippage-container') ===\n null\n ) {\n setShowSlip(false);\n if (invalid) onChangeSlippageTolerance(DEFAULT_SLIPPAGE_TOLERANCE);\n }\n };\n\n document.addEventListener('click', onClick);\n\n return () => {\n document.removeEventListener('click', onClick);\n };\n }, [invalid]);\n\n return (\n <div\n className=\"__ref-swap-widget_slippage_selector __ref-swap-widget-col-flex-start\"\n id=\"__ref-slippage-container\"\n onClick={e => e.stopPropagation()}\n style={{\n background: container,\n border: `1px solid ${borderColor}`,\n }}\n >\n <span\n style={{\n color: primary,\n paddingBottom: '14px',\n }}\n >\n Slippage tolerance\n </span>\n\n <div\n className={`__ref-swap-widget-row-flex-center\n `}\n >\n <div\n className={`__ref-swap-widget-row-flex-center\n __ref-swap-widget_slippage_selector_input_container`}\n style={{\n border: `1px solid ${invalid ? '#FF7575' : borderColor}`,\n borderRadius,\n color: invalid ? '#FF7575' : primary,\n }}\n >\n <input\n value={slippageTolerance}\n type=\"text\"\n required={true}\n placeholder=\"\"\n onChange={event => {\n if (isValidInput(event.target.value)) {\n handleChange(event.target.value);\n }\n }}\n style={{\n width: '100%',\n }}\n className=\"__ref-swap-widget-input-class\"\n />\n <span className=\"ml-2\">%</span>\n </div>\n\n <button\n className={`__ref-swap-widget_slippage_selector_button __ref-swap-widget-button ${\n isMobile()\n ? '__ref-swap-widget-opacity-active'\n : '__ref-swap-widget-opacity-hover'\n }`}\n style={{\n color: primary,\n background: buttonBg,\n borderRadius,\n }}\n onClick={e => {\n e.stopPropagation();\n e.preventDefault();\n onChangeSlippageTolerance(DEFAULT_SLIPPAGE_TOLERANCE);\n setInValid(false);\n }}\n >\n Auto\n </button>\n </div>\n {invalid && (\n <div\n className=\" text-xs py-3 __ref-swap-widget-row-flex-center\"\n style={{\n color: '#FF7575',\n fontSize: '12px',\n padding: '10px 0px 0px 0px',\n alignItems: 'start',\n }}\n >\n <IoWarning\n className=\"\"\n style={{\n marginRight: '4px',\n }}\n size={20}\n />\n <div>{'The slippage tolerance is invalid.'}</div>\n </div>\n )}\n </div>\n );\n};\n\nconst StarToken = ({\n price,\n token,\n onDelete,\n onClick,\n}: {\n token: TokenMetadata;\n price: string;\n onDelete: (token: TokenMetadata) => void;\n onClick: (token: TokenMetadata) => void;\n}) => {\n const theme = useContext(ThemeContext);\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n borderColor,\n iconDefault,\n iconHover,\n } = theme;\n\n const [hoverIcon, setHoverIcon] = useState(false);\n\n const [hoverClose, setHoverClose] = useState(false);\n\n return (\n <div\n className=\"__ref-swap-widget_star_token __ref-swap-widget-row-flex-center\"\n onMouseEnter={() => setHoverIcon(true)}\n onMouseLeave={() => setHoverIcon(false)}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n onClick(token);\n }}\n style={{\n background: hoverIcon ? hover : 'transparent',\n border: `1px solid ${borderColor}`,\n }}\n >\n {hoverIcon && (\n <div\n style={{\n position: 'absolute',\n top: '-4px',\n right: '-4px',\n boxShadow: '0px 0px 2px rgba(0, 0, 0, 0.25)',\n border: `1px solid ${borderColor}`,\n borderRadius: '100%',\n width: '16px',\n height: '16px',\n background: '#E3E3E3',\n }}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n onDelete(token);\n }}\n onMouseEnter={() => setHoverClose(true)}\n onMouseLeave={() => setHoverClose(false)}\n >\n <IoCloseOutline stroke={hoverClose ? 'black' : '#7e8a93'} />\n </div>\n )}\n\n <img\n src={token.icon}\n alt=\"\"\n className=\"__ref-swap-widget_token_icon\"\n style={{\n height: '26px',\n width: '26px',\n marginRight: '2px',\n }}\n />\n\n <div className=\"__ref-swap-widget-col-flex-start\">\n <span\n style={{\n fontSize: '14px',\n color: primary,\n }}\n >\n {toRealSymbol(token.symbol)}\n </span>\n\n <span\n style={{\n fontSize: '10px',\n color: secondary,\n }}\n >\n {!price\n ? '$-'\n : '$' + toInternationalCurrencySystemLongString(price, 2)}\n </span>\n </div>\n </div>\n );\n};\n\ninterface TokenProps {\n token: TokenMetadata;\n onClick: (token: TokenMetadata) => void;\n onClickPin: (token: TokenMetadata) => void;\n balance: string;\n price?: string;\n isSticky?: boolean;\n index: number;\n setHoverIndex: (index: number) => void;\n hoverIndex: number;\n}\n\nconst Token = ({\n token,\n onClick,\n price,\n balance,\n isSticky,\n onClickPin,\n index,\n setHoverIndex,\n hoverIndex,\n}: TokenProps) => {\n const theme = useContext(ThemeContext);\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n borderColor,\n iconDefault,\n iconHover,\n } = theme;\n\n const displayBalance =\n 0 < Number(balance) && Number(balance) < 0.001\n ? '< 0.001'\n : toPrecision(String(balance), 3);\n\n const [hoverOutLink, setHoverOutLink] = useState(false);\n\n const [hoverPin, setHoverPin] = useState(false);\n\n return (\n <div\n className=\"__ref-swap-widget_token-selector-token-list-item __ref-swap-widget-row-flex-center\"\n style={{\n background: hoverIndex === index ? hover : 'transparent',\n }}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n onClick(token);\n }}\n onMouseEnter={() => setHoverIndex(index)}\n onMouseLeave={() => setHoverIndex(-1)}\n >\n <div\n className=\"__ref-swap-widget-row-flex-center\"\n style={{\n justifyContent: 'space-between',\n }}\n >\n <img\n src={token.icon}\n alt=\"\"\n className=\"__ref-swap-widget_token_icon\"\n style={{\n height: '36px',\n width: '36px',\n marginRight: '10px',\n }}\n />\n\n <div className=\"__ref-swap-widget-col-flex-start\">\n <span\n style={{\n fontSize: '14px',\n color: primary,\n }}\n className=\"__ref-swap-widget-row-flex-center\"\n >\n {toRealSymbol(token.symbol)}\n\n {TokenLinks[token.symbol] && (\n <HiOutlineExternalLink\n onMouseEnter={() => setHoverOutLink(true)}\n onMouseLeave={() => setHoverOutLink(false)}\n style={{\n marginLeft: '4px',\n marginTop: '2px',\n }}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n window.open(TokenLinks[token.symbol], '_blank');\n }}\n stroke={hoverOutLink ? iconHover : iconDefault}\n />\n )}\n </span>\n\n <span\n style={{\n fontSize: '10px',\n color: secondary,\n marginTop: '2px',\n }}\n >\n {!price\n ? '$-'\n : '$' + toInternationalCurrencySystemLongString(price, 2)}\n </span>\n </div>\n </div>\n\n <div\n className=\"__ref-swap-widget-row-flex-center\"\n style={{\n color: primary,\n }}\n >\n {displayBalance}\n\n {isSticky ? (\n <AiFillPushpin\n onMouseEnter={() => setHoverPin(true)}\n onMouseLeave={() => setHoverPin(false)}\n fill={hoverPin && hoverIndex === index ? iconHover : iconDefault}\n style={{\n marginLeft: '10px',\n cursor: 'pointer',\n }}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n onClickPin(token);\n }}\n />\n ) : (\n <AiOutlinePushpin\n style={{\n marginLeft: '10px',\n cursor: 'pointer',\n }}\n onMouseEnter={() => setHoverPin(true)}\n onMouseLeave={() => setHoverPin(false)}\n fill={hoverPin && hoverIndex === index ? iconHover : iconDefault}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n onClickPin(token);\n }}\n />\n )}\n </div>\n </div>\n );\n};\n\ninterface TokenListProps {\n tokens: TokenMetadata[];\n onClick: (token: TokenMetadata) => void;\n balances: { [tokenId: string]: string };\n tokenPriceList: Record<string, any> | null;\n starList: string[];\n setStarList: (starList: string[]) => void;\n onDelete: (token: TokenMetadata) => void;\n}\n\nexport const TokenListTable = ({\n tokens,\n onClick,\n balances,\n tokenPriceList,\n starList,\n setStarList,\n onDelete,\n}: TokenListProps) => {\n const [currentSort, setCurrentSort] = useState('down');\n const theme = useContext(ThemeContext);\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n borderColor,\n iconDefault,\n iconHover,\n } = theme;\n\n const onClickPin = (token: TokenMetadata) => {\n if (starList.includes(token.id)) {\n onDelete(token);\n } else {\n const newList = [...starList, token.id];\n setStarList(newList);\n }\n };\n\n const [hoverIndex, setHoverIndex] = useState(-1);\n\n const tokenSorting = (a: TokenMetadata, b: TokenMetadata) => {\n const b1 = balances[a.id];\n const b2 = balances[b.id];\n\n if (currentSort === 'up') {\n return Number(b1) - Number(b2);\n } else return Number(b2) - Number(b1);\n };\n\n return !tokens || tokens.length === 0 ? null : (\n <div className=\"__ref-swap-widget_token_list_table\">\n <div\n className=\"__ref-swap-widget_token_list_table_header\"\n style={{\n color: secondary,\n borderBottom: `1px solid ${borderColor}`,\n }}\n >\n <span className=\"\">Asset</span>\n\n <span\n onClick={() => {\n setCurrentSort(currentSort === 'up' ? 'down' : 'up');\n }}\n style={{\n cursor: 'pointer',\n }}\n className=\"__ref-swap-widget-row-flex-center\"\n >\n <span className=\"ml-1\">Balance</span>\n {currentSort === 'up' ? <TiArrowSortedUp /> : <TiArrowSortedDown />}\n </span>\n </div>\n\n <div className=\"__ref-swap-widget_token_list_table_content\">\n {tokens.sort(tokenSorting).map((token, index) => (\n <Token\n key={token.id + '-select-token-list-item-' + index}\n onClick={onClick}\n index={index}\n token={token}\n price={tokenPriceList?.[token.id]?.price}\n balance={balances?.[token.id] || '0'}\n onClickPin={onClickPin}\n isSticky={starList.includes(token.id)}\n setHoverIndex={setHoverIndex}\n hoverIndex={hoverIndex}\n />\n ))}\n </div>\n </div>\n );\n};\n\nexport const TokenSelector = ({\n onSelect,\n width,\n tokens,\n onClose,\n AccountId,\n balances,\n className,\n}: {\n onSelect: (token: TokenMetadata) => void;\n width: string;\n tokens: TokenMetadata[];\n onClose: () => void;\n AccountId: string;\n balances: { [tokenId: string]: string };\n className?: string;\n}) => {\n const theme = useContext(ThemeContext);\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n iconDefault,\n iconHover,\n } = theme;\n\n const [searchValue, setSearchValue] = useState<string>('');\n\n const tokenPriceList = useContext(TokenPriceContext);\n\n const handleSearch = (value: string) => {\n setSearchValue(value);\n };\n\n const storagedStartList = localStorage.getItem(REF_WIDGET_STAR_TOKEN_LIST_KEY)\n ? JSON.parse(localStorage.getItem(REF_WIDGET_STAR_TOKEN_LIST_KEY) || '[]')\n : null;\n\n const DEFAULT_START_TOKEN_LIST =\n getConfig().networkId === 'testnet'\n ? DEFAULT_START_TOKEN_LIST_TESTNET\n : DEFAULT_START_TOKEN_LIST_MAINNET;\n\n const [starList, setStarList] = useState<string[]>(\n storagedStartList || DEFAULT_START_TOKEN_LIST\n );\n\n const onDelete = (token: TokenMetadata) => {\n const newStarList = starList.filter(starToken => starToken !== token.id);\n\n setStarList(newStarList);\n\n localStorage.setItem(\n REF_WIDGET_STAR_TOKEN_LIST_KEY,\n JSON.stringify(newStarList)\n );\n };\n\n const tableListFilter = (token: TokenMetadata) => {\n if (!searchValue) return true;\n\n const searchValueLower = searchValue.toLowerCase();\n\n return token.symbol?.toLowerCase().includes(searchValueLower) || false;\n };\n\n return (\n <div\n className={`__ref-swap_widget-token_selector __ref-swap-widget-container ${className}`}\n style={{\n position: 'relative',\n width,\n background: container,\n }}\n >\n <FiChevronLeft\n onClick={onClose}\n style={{\n color: primary,\n position: 'absolute',\n cursor: 'pointer',\n }}\n />\n <div\n className=\"__ref-swap-widget-header-title __ref-swap-widget-row-flex-center\"\n style={{\n color: primary,\n justifyContent: 'center',\n paddingBottom: '24px',\n }}\n >\n Select a token\n </div>\n\n <div\n className=\"__ref-swap-widget-select-token_input __ref-swap-widget-row-flex-center\"\n style={{\n border: `1px solid ${buttonBg}`,\n background: secondaryBg,\n }}\n >\n <FaSearch\n fill={iconDefault}\n style={{\n marginRight: '8px',\n }}\n />\n\n <input\n className=\"__ref-swap-widget-input-class\"\n placeholder=\"Search token...\"\n onChange={evt => handleSearch(evt.target.value)}\n style={{\n fontSize: '14px',\n color: primary,\n }}\n />\n </div>\n\n <div className=\"__ref-swap-widget_token-selector-star-tokens __ref-swap-widget-row-flex-center\">\n {starList.map(id => {\n if (!tokens || tokens.length === 0) return null;\n\n const token = tokens.find(token => token.id === id);\n\n return !token ? null : (\n <StarToken\n key={token.id + '-star-token'}\n token={token}\n price={tokenPriceList?.[token.id]?.price}\n onDelete={onDelete}\n onClick={onSelect}\n />\n );\n })}\n </div>\n\n <TokenListTable\n tokens={tokens.filter(tableListFilter)}\n tokenPriceList={tokenPriceList}\n onClick={onSelect}\n balances={balances}\n starList={starList}\n setStarList={starList => {\n setStarList(starList);\n localStorage.setItem(\n REF_WIDGET_STAR_TOKEN_LIST_KEY,\n JSON.stringify(starList)\n );\n }}\n onDelete={onDelete}\n />\n </div>\n );\n};\n\nexport const Slider = ({\n showSlip,\n setShowSlip,\n}: {\n showSlip: boolean;\n setShowSlip: (show: boolean) => void;\n}) => {\n const [hover, setHover] = useState(false);\n\n return (\n <svg\n width=\"17\"\n height=\"17\"\n viewBox=\"0 0 17 17\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n onMouseEnter={() => setHover(true)}\n onMouseLeave={() => setHover(false)}\n onClick={() => setShowSlip(true)}\n className=\"cursor-pointer\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M12.6957 13.0652C12.6957 14.1338 11.8294 15 10.7609 15C9.69235 15 8.82611 14.1338 8.82611 13.0652C8.82612 11.9967 9.69235 11.1304 10.7609 11.1304C11.8294 11.1304 12.6957 11.9967 12.6957 13.0652ZM14.5749 12.0941C14.6145 12.0894 14.6548 12.0869 14.6957 12.0869L15.9565 12.0869C16.5088 12.0869 16.9565 12.5346 16.9565 13.0869C16.9565 13.6392 16.5088 14.0869 15.9565 14.0869L14.6957 14.0869C14.651 14.0869 14.6071 14.084 14.564 14.0783C14.1171 15.7605 12.5837 17 10.7609 17C8.93806 17 7.40472 15.7605 6.95777 14.0783C6.91471 14.084 6.87078 14.0869 6.82617 14.0869L1.00009 14.0869C0.447802 14.0869 8.61245e-05 13.6392 8.61728e-05 13.0869C8.62211e-05 12.5346 0.447802 12.0869 1.00009 12.0869L6.82617 12.0869C6.86702 12.0869 6.90729 12.0894 6.94686 12.0941C7.37926 10.3906 8.92291 9.13044 10.7609 9.13044C12.5989 9.13044 14.1425 10.3906 14.5749 12.0941ZM4.26086 3.93478C4.26086 2.86623 5.1271 2 6.19565 2C7.2642 2 8.13043 2.86623 8.13043 3.93478C8.13043 5.00333 7.2642 5.86957 6.19565 5.86957C5.1271 5.86956 4.26086 5.00333 4.26086 3.93478ZM6.19565 9.66601e-07C4.3728 8.07243e-07 2.83946 1.23952 2.39252 2.92168C2.34944 2.91601 2.3055 2.91309 2.26087 2.91309L0.999999 2.91309C0.447715 2.91309 -7.14972e-07 3.3608 -7.63254e-07 3.91309C-8.11537e-07 4.46537 0.447715 4.91309 0.999999 4.91309L2.26087 4.91309C2.30173 4.91309 2.34202 4.91063 2.3816 4.90587C2.81401 6.60936 4.35766 7.86956 6.19565 7.86957C8.03363 7.86957 9.57728 6.60936 10.0097 4.90588C10.0493 4.91064 10.0895 4.91309 10.1304 4.91309L15.9565 4.91309C16.5087 4.91309 16.9565 4.46537 16.9565 3.91309C16.9565 3.3608 16.5087 2.91309 15.9565 2.91309L10.1304 2.91309C10.0858 2.91309 10.0418 2.91601 9.99877 2.92167C9.55182 1.23952 8.01849 1.12596e-06 6.19565 9.66601e-07Z\"\n fill={hover || showSlip ? '#00C6A2' : '#7E8A93'}\n />\n </svg>\n );\n};\n\nexport const RefIcon = (props: any) => {\n return (\n <svg\n {...props}\n width=\"10\"\n height=\"10\"\n viewBox=\"0 0 10 10\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M6.36365 10H10L6.36365 6.36363V10Z\" fill=\"currentColor\" />\n <path\n d=\"M10 4.05312e-06L7.87879 3.86767e-06L10 2.12122L10 4.05312e-06Z\"\n fill=\"#00C6A2\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6.51531 6.36364C6.46444 6.36364 6.41387 6.36232 6.36365 6.35971V4.08371L8.83901 1.78516C9.18802 2.26148 9.3941 2.8491 9.3941 3.48485C9.3941 5.07476 8.10522 6.36364 6.51531 6.36364ZM8.19255 1.14486L6.36365 2.84313V0.60999C6.41387 0.607383 6.46444 0.606064 6.51531 0.606064C7.14111 0.606064 7.72027 0.805743 8.19255 1.14486Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M6.06046 0.606064H3.33319V3.29661L4.55696 4.52039L6.06046 3.12428V0.606064ZM6.06046 4.36486L4.5336 5.78267L3.33319 4.58226V10H6.06046V4.36486Z\"\n fill=\"currentColor\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M3.0303 0.606064H0V4.50881L2.27284 2.23598L3.0303 2.99344V0.606064ZM3.0303 4.27909L2.27284 3.52162L0 5.79446V10H3.0303V4.27909Z\"\n fill=\"currentColor\"\n />\n </svg>\n );\n};\n\nexport const Loading = () => {\n return (\n <svg\n width=\"38\"\n height=\"38\"\n viewBox=\"0 0 38 38\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"__ref-swap-widget-loading\"\n >\n <circle\n cx=\"19\"\n cy=\"19\"\n r=\"16\"\n stroke=\"#EEEEEE\"\n strokeWidth=\"6\"\n strokeLinecap=\"round\"\n />\n <path\n d=\"M19 35C27.8366 35 35 27.8366 35 19C35 10.1634 27.8366 3 19 3C10.1634 3 3 10.1634 3 19\"\n stroke=\"#00C6A2\"\n strokeWidth=\"4\"\n strokeLinecap=\"round\"\n />\n </svg>\n );\n};\n\nexport const Warning = () => {\n return (\n <svg\n width=\"49\"\n height=\"49\"\n viewBox=\"0 0 49 49\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M21.0359 5.99999C22.5755 3.33333 26.4245 3.33333 27.9641 6L42.2535 30.75C43.7931 33.4167 41.8686 36.75 38.7894 36.75H10.2106C7.13137 36.75 5.20688 33.4167 6.74648 30.75L21.0359 5.99999Z\"\n stroke=\"#FF689E\"\n strokeWidth=\"4\"\n strokeLinecap=\"round\"\n />\n <line\n x1=\"24\"\n y1=\"14\"\n x2=\"24\"\n y2=\"24\"\n stroke=\"#FF689E\"\n strokeWidth=\"4\"\n strokeLinecap=\"round\"\n />\n <circle cx=\"24\" cy=\"30\" r=\"2\" fill=\"#FF689E\" />\n </svg>\n );\n};\n\nexport const Success = () => {\n return (\n <div\n style={{\n position: 'relative',\n height: '32px',\n width: '32px',\n }}\n >\n <svg\n width=\"38\"\n height=\"38\"\n viewBox=\"0 0 38 38\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n }}\n >\n <circle\n cx=\"19\"\n cy=\"19\"\n r=\"16\"\n stroke=\"#EEEEEE\"\n strokeWidth=\"6\"\n strokeLinecap=\"round\"\n />\n </svg>\n\n <svg\n width=\"30\"\n height=\"23\"\n viewBox=\"0 0 30 23\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n style={{\n position: 'absolute',\n top: 4,\n left: 4,\n }}\n >\n <path\n d=\"M2 11.2727L10.4898 20L28 2\"\n stroke=\"#00C6A2\"\n strokeWidth=\"4\"\n strokeLinecap=\"round\"\n />\n </svg>\n </div>\n );\n};\n\nexport const RouterIcon = () => {\n return (\n <svg\n width=\"16\"\n height=\"12\"\n viewBox=\"0 0 16 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"mr-2\"\n >\n <path\n d=\"M13.4862 6.25488C12.2813 6.25488 11.2485 7.10159 11.019 8.28698H6.02703L4.7647 7.21448C4.93684 6.8758 5.05159 6.48067 5.10897 6.0291C5.10897 5.52107 4.93684 4.9566 4.59257 4.56147L6.02703 3.1503H11.0763C11.478 4.44858 12.8551 5.23884 14.1748 4.84371C15.4945 4.44858 16.2978 3.09385 15.8961 1.79557C15.4945 0.497295 14.1174 -0.292963 12.7977 0.102166C11.937 0.327954 11.3059 1.00532 11.0763 1.79557H5.51062L3.50237 3.77122C3.21548 3.65832 2.92859 3.60188 2.58432 3.60188C1.20723 3.54543 0.0596573 4.61792 0.00227872 5.97265C-0.0550999 7.32738 0.977715 8.45632 2.3548 8.51276H2.58432C3.04334 8.51276 3.44499 8.39987 3.84664 8.17408L5.568 9.6417H11.1911C11.7075 10.8835 13.142 11.5045 14.4043 11.0529C15.6666 10.5449 16.2978 9.13368 15.8388 7.89185C15.4371 6.8758 14.5191 6.25488 13.4862 6.25488V6.25488ZM13.4862 1.344C14.1174 1.344 14.6338 1.85202 14.6338 2.47294C14.6338 3.09385 14.1174 3.60188 13.4862 3.60188C12.8551 3.60188 12.3387 3.09385 12.3387 2.47294C12.3387 1.85202 12.8551 1.344 13.4862 1.344ZM2.58432 7.15804C1.95315 7.15804 1.43674 6.65001 1.43674 6.0291C1.43674 5.40818 1.95315 4.90016 2.58432 4.90016C3.21548 4.90016 3.73189 5.40818 3.73189 6.0291C3.73189 6.65001 3.21548 7.15804 2.58432 7.15804ZM13.4862 9.86749C12.8551 9.86749 12.3387 9.35947 12.3387 8.73855C12.3387 8.11763 12.8551 7.60961 13.4862 7.60961C14.1174 7.60961 14.6338 8.11763 14.6338 8.73855C14.6338 9.35947 14.1174 9.86749 13.4862 9.86749Z\"\n fill=\"url(#paint0_linear_12461_2312)\"\n />\n <defs>\n <linearGradient\n id=\"paint0_linear_12461_2312\"\n x1=\"8\"\n y1=\"0\"\n x2=\"8\"\n y2=\"11.2\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#00C6A2\" />\n <stop offset=\"1\" stopColor=\"#8C78FF\" />\n </linearGradient>\n </defs>\n </svg>\n );\n};\n\nexport const Notification = ({\n state,\n tx,\n detail,\n setSwapState,\n}: {\n state: SwapState;\n setSwapState: (state: SwapState) => void;\n tx?: string;\n detail?: string;\n}) => {\n const theme = useContext(ThemeContext);\n const { container, buttonBg, primary } = theme;\n\n const notificationStatus = useMemo(() => {\n return {\n isClosed: false,\n isWaitingForConfirmation: state === 'waitingForConfirmation',\n isFailure: state === 'fail',\n isSuccess: state === 'success',\n };\n }, [state]);\n\n return (\n <div\n className=\"__ref-swap-widget-notification\"\n style={{\n color: primary,\n background: container,\n }}\n >\n <div className=\"__ref-swap-widget-notification__icon\">\n {notificationStatus.isWaitingForConfirmation && <Loading />}\n {notificationStatus.isFailure && <Warning />}\n {notificationStatus.isSuccess && <Success />}\n </div>\n\n <div\n style={{\n fontSize: '16px',\n marginTop: '10px',\n marginBottom: '6px',\n }}\n >\n {notificationStatus.isSuccess && <p>Success!</p>}\n {notificationStatus.isFailure && <p>Swap Failed!</p>}\n </div>\n <div\n className=\"text-center\"\n style={{\n color: primary,\n }}\n >\n {notificationStatus.isWaitingForConfirmation && (\n <p>Waiting for confirmation</p>\n )}\n {notificationStatus.isSuccess && tx && (\n <a\n className=\"text-primary font-semibold\"\n href={`${config.explorerUrl}/txns/${tx}`}\n target=\"_blank\"\n style={{\n textDecoration: 'underline',\n fontSize: '14px',\n color: primary,\n }}\n rel=\"noreferrer\"\n >\n Click to view.\n </a>\n )}\n\n {notificationStatus.isSuccess && detail}\n </div>\n {state !== null && (\n <button\n className=\"__ref-swap-widget-notification__button __ref-swap-widget-button\"\n style={{\n background: buttonBg,\n fontWeight: 700,\n color: 'white',\n }}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n setSwapState(null);\n }}\n >\n Close\n </button>\n )}\n </div>\n );\n};\n\nexport const ArrowRight = () => {\n return (\n <div className=\"mx-1\">\n <svg\n width=\"12\"\n height=\"5\"\n viewBox=\"0 0 12 5\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M8.864 4.4C9.024 4.05867 9.17867 3.76 9.328 3.504C9.488 3.248 9.64267 3.03467 9.792 2.864H0.464V2.192H9.792C9.64267 2.01067 9.488 1.792 9.328 1.536C9.17867 1.28 9.024 0.986666 8.864 0.656H9.424C10.096 1.43467 10.8 2.01067 11.536 2.384V2.672C10.8 3.03467 10.096 3.61067 9.424 4.4H8.864Z\"\n fill=\"#7E8A93\"\n />\n </svg>\n </div>\n );\n};\n\nexport const AccountButton = ({\n AccountId,\n onDisConnect,\n}: {\n AccountId: string;\n onDisConnect: () => void;\n}) => {\n const [hoverAccount, setHoverAccount] = useState<boolean>(false);\n\n const theme = useContext(ThemeContext);\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n iconDefault,\n iconHover,\n borderColor,\n } = theme;\n\n return !AccountId ? null : (\n <div\n className=\"__ref-swap-widget-header-button-account __ref-swap-widget-row-flex-center\"\n style={{\n color: primary,\n background: secondaryBg,\n border: `1px solid ${borderColor}`,\n cursor: 'pointer',\n }}\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n hoverAccount && onDisConnect();\n }}\n onMouseEnter={() => setHoverAccount(true)}\n onMouseLeave={() => setHoverAccount(false)}\n >\n {hoverAccount ? 'Disconnect' : getAccountName(AccountId)}\n </div>\n );\n};\n","import React, { useEffect, useMemo, useState } from 'react';\n\nimport { SwapWidgetProps } from './types';\nimport { TokenMetadata } from '../types';\nimport {\n useRefPools,\n useSwap,\n ThemeContextProvider,\n TokenPriceContextProvider,\n useAllTokens,\n} from './state';\nimport { ftGetBalance, ftGetTokenMetadata } from '../ref';\nimport {\n getAccountName,\n toReadableNumber,\n toPrecision,\n getPriceImpact,\n isMobile,\n isValidSlippageTolerance,\n} from '../utils';\nimport {\n Slider,\n SlippageSelector,\n TokenSelector,\n TokenAmount,\n DetailView,\n Notification,\n} from './components';\nimport { FiChevronDown } from '@react-icons/all-files/fi/FiChevronDown';\n\nimport { TiWarning } from '@react-icons/all-files/ti/TiWarning';\n\nimport './style.css';\nimport { useTokenPriceList, useTokenBalances, useTokensIndexer } from './state';\n\nimport { CgArrowsExchangeAltV } from '@react-icons/all-files/cg/CgArrowsExchangeAltV';\nimport { RefIcon, AccountButton } from './components';\nimport Big from 'big.js';\nimport { ONLY_ZEROS } from '../utils';\nimport {\n defaultTheme,\n defaultDarkModeTheme,\n REF_WIDGET_SWAP_IN_KEY,\n REF_WIDGET_SWAP_OUT_KEY,\n} from './constant';\nimport {\n WRAP_NEAR_CONTRACT_ID,\n NEAR_META_DATA,\n REF_TOKEN_ID,\n REF_META_DATA,\n DEFAULT_SLIPPAGE_TOLERANCE,\n} from '../constant';\n\nexport const SwapWidget = (props: SwapWidgetProps) => {\n const {\n theme,\n defaultTokenList,\n onSwap,\n connection,\n width,\n height,\n enableSmartRouting,\n className,\n transactionState,\n onConnect,\n defaultTokenIn,\n defaultTokenOut,\n onDisConnect,\n darkMode,\n referralId,\n minNearAmountLeftForGasFees = 0.5,\n } = props;\n\n const curTheme = theme || (darkMode ? defaultDarkModeTheme : defaultTheme);\n\n const STORAGED_TOKEN_IN = localStorage.getItem(REF_WIDGET_SWAP_IN_KEY);\n\n const STORAGED_TOKEN_OUT = localStorage.getItem(REF_WIDGET_SWAP_OUT_KEY);\n\n const {\n container,\n buttonBg,\n primary,\n secondary,\n borderRadius,\n fontFamily,\n hover,\n active,\n secondaryBg,\n borderColor,\n iconDefault,\n iconHover,\n refIcon,\n } = curTheme;\n\n const { AccountId, isSignedIn: isSignedInProp } = connection;\n\n const isSignedIn = !!AccountId && isSignedInProp;\n\n const [tokenIn, setTokenIn] = useState<TokenMetadata>();\n\n const handleSetTokenIn = (token: TokenMetadata) => {\n setTokenIn(token);\n localStorage.setItem(REF_WIDGET_SWAP_IN_KEY, token.id);\n };\n\n const handleSetTokenOut = (token: TokenMetadata) => {\n setTokenOut(token);\n localStorage.setItem(REF_WIDGET_SWAP_OUT_KEY, token.id);\n };\n\n const [tokenOut, setTokenOut] = useState<TokenMetadata>();\n\n const [widgetRoute, setWidgetRoute] = useState<\n 'swap' | 'token-selector-in' | 'token-selector-out'\n >('swap');\n\n const [amountIn, setAmountIn] = useState<string>('1');\n\n const [showSlip, setShowSlip] = useState<boolean>(false);\n\n const [slippageTolerance, setSlippageTolerance] = useState<string>(\n DEFAULT_SLIPPAGE_TOLERANCE\n );\n\n const formattedSlippageTolerance = useMemo(() => {\n try {\n const formatted = Number(slippageTolerance);\n if (Number.isNaN(formatted) || !isValidSlippageTolerance(formatted))\n return +DEFAULT_SLIPPAGE_TOLERANCE;\n return formatted;\n } catch {\n return +DEFAULT_SLIPPAGE_TOLERANCE;\n }\n }, [slippageTolerance]);\n\n const { tokens, tokenLoading } = useTokensIndexer({\n defaultTokenList,\n AccountId,\n });\n\n // cache list tokens\n useAllTokens({ reload: true });\n\n const [refreshTrigger, setRreshTrigger] = useState<boolean>(false);\n\n const tokenPriceList = useTokenPriceList();\n\n const { allPools, allStablePools, poolFetchingState } = useRefPools(\n refreshTrigger\n );\n\n useEffect(() => {\n const defaultIn =\n STORAGED_TOKEN_IN || defaultTokenIn || WRAP_NEAR_CONTRACT_ID;\n\n const defaultOut = STORAGED_TOKEN_OUT || defaultTokenOut || REF_TOKEN_ID;\n\n if (\n tokens.length > 0 &&\n defaultIn &&\n tokens.findIndex(t => t.id === defaultIn) !== -1\n ) {\n if (defaultIn === WRAP_NEAR_CONTRACT_ID || defaultIn === 'NEAR') {\n handleSetTokenIn({\n ...NEAR_META_DATA,\n id: WRAP_NEAR_CONTRACT_ID,\n });\n } else {\n ftGetTokenMetadata(defaultIn).then(handleSetTokenIn);\n }\n } else if (\n tokens.length > 0 &&\n defaultIn &&\n tokens.findIndex(t => t.id === defaultIn) === -1\n ) {\n handleSetTokenIn({\n ...NEAR_META_DATA,\n id: WRAP_NEAR_CONTRACT_ID,\n });\n }\n if (\n tokens.length > 0 &&\n defaultOut &&\n tokens.findIndex(t => t.id === defaultOut) !== -1\n ) {\n if (defaultOut === WRAP_NEAR_CONTRACT_ID || defaultOut === 'NEAR') {\n handleSetTokenOut({\n ...NEAR_META_DATA,\n id: WRAP_NEAR_CONTRACT_ID,\n });\n } else {\n ftGetTokenMetadata(defaultOut).then(handleSetTokenOut);\n }\n } else if (\n tokens.length > 0 &&\n defaultOut &&\n tokens.findIndex(t => t.id === defaultOut) === -1\n ) {\n handleSetTokenOut(REF_META_DATA);\n }\n }, [tokens, tokenLoading]);\n\n const {\n amountOut,\n minAmountOut,\n balances,\n tokenInBalance,\n tokenOutBalance,\n rate,\n fee,\n estimates,\n canSwap,\n swapError,\n makeSwap,\n setAmountOut,\n } = useSwap({\n tokenIn: tokenIn,\n tokenOut: tokenOut,\n amountIn,\n simplePools: allPools.simplePools.filter(p => Number(p.shareSupply) > 0),\n options: {\n enableSmartRouting,\n stablePools: allPools.ratedPools\n .concat(allPools.unRatedPools)\n .filter(p => Number(p.shareSupply) > 0),\n stablePoolsDetail: allStablePools.filter(\n p => Number(p.shares_total_supply) > 0\n ),\n },\n slippageTolerance: formattedSlippageTolerance,\n onSwap,\n AccountId,\n refreshTrigger,\n poolFetchingState,\n referralId,\n tokens,\n });\n\n const priceImpact = useMemo(() => {\n if (!tokenIn || !tokenOut) return '0';\n\n return getPriceImpact({\n estimates,\n tokenIn,\n tokenOut,\n amountIn,\n amountOut,\n stablePools: allStablePools,\n });\n }, [estimates, tokenIn, tokenOut, amountIn, amountOut, allStablePools]);\n\n const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault();\n transactionState.setState('waitingForConfirmation');\n makeSwap();\n };\n\n const canSubmit =\n tokenIn &&\n tokenOut &&\n canSwap &&\n !swapError &&\n isSignedIn &&\n new Big(tokenInBalance || '0').gte(amountIn || '0') &&\n isValidSlippageTolerance(formattedSlippageTolerance) &&\n !ONLY_ZEROS.test(tokenInBalance);\n\n const tokensLoaded = useMemo(() => {\n return tokens.length > 0;\n }, [tokens]);\n\n return (\n <ThemeContextProvider customTheme={curTheme}>\n <TokenPriceContextProvider>\n {widgetRoute === 'swap' && (\n <form\n className={`__ref-swap-widget-container ${className}`}\n onSubmit={handleSubmit}\n style={{\n background: container,\n fontFamily,\n width,\n height,\n }}\n >\n <div className=\"__ref-swap-widget-header __ref-swap-widget-row-flex-center\">\n <div\n style={{\n color: primary,\n }}\n className=\"__ref-swap-widget-header-title\"\n >\n Swap\n </div>\n\n <div\n className=\"__ref-swap-widget-header-button __ref-swap-widget-row-flex-center\"\n style={{\n position: 'relative',\n }}\n >\n <AccountButton\n onDisConnect={onDisConnect}\n AccountId={AccountId}\n />\n\n <Slider showSlip={showSlip} setShowSlip={setShowSlip} />\n\n {showSlip && (\n <SlippageSelector\n slippageTolerance={slippageTolerance}\n onChangeSlippageTolerance={setSlippageTolerance}\n setShowSlip={setShowSlip}\n />\n )}\n </div>\n </div>\n\n <TokenAmount\n amount={amountIn}\n balance={tokenInBalance}\n token={tokenIn}\n price={!tokenIn ? null : tokenPriceList?.[tokenIn.id]?.price}\n onChangeAmount={setAmountIn}\n onSelectToken={() => {\n if (!tokensLoaded) return;\n setWidgetRoute('token-selector-in');\n }}\n minNearAmountLeftForGasFees={minNearAmountLeftForGasFees}\n />\n\n <div\n className={`__ref-swap-widget-exchange-button __ref-swap-widget-row-flex-center `}\n style={{\n color: iconDefault,\n }}\n >\n <CgArrowsExchangeAltV\n style={{\n cursor: 'pointer',\n }}\n className={`__ref-swap-widget-exchange-button-icon ${\n isMobile()\n ? '__ref-swap-widget-active'\n : '__ref-swap-widget-hover'\n }`}\n size={30}\n onClick={() => {\n tokenOut && handleSetTokenIn(tokenOut);\n tokenIn && handleSetTokenOut(tokenIn);\n setAmountIn('1');\n setAmountOut('');\n }}\n />\n </div>\n\n <TokenAmount\n amount={toPrecision(amountOut, 8)}\n balance={tokenOutBalance}\n token={tokenOut}\n price={!tokenOut ? null : tokenPriceList?.[tokenOut.id]?.price}\n onSelectToken={() => {\n if (!tokensLoaded) return;\n setWidgetRoute('token-selector-out');\n }}\n onForceUpdate={() => {\n setRreshTrigger(!refreshTrigger);\n }}\n poolFetchingState={poolFetchingState}\n minNearAmountLeftForGasFees={minNearAmountLeftForGasFees}\n />\n {!swapError && amountIn && amountOut && (\n <DetailView\n fee={fee}\n rate={rate}\n amountIn={amountIn}\n minReceived={minAmountOut}\n tokenIn={tokenIn}\n tokenOut={tokenOut}\n amountOut={amountOut}\n priceImpact={priceImpact}\n estimates={estimates}\n />\n )}\n\n {swapError && (\n <div\n className=\"__ref-swap-widget-row-flex-center\"\n style={{\n color: '#DE9450',\n fontSize: '14px',\n\n paddingTop: '16px',\n }}\n >\n <TiWarning fill=\"#DE9450\" size={20} />\n &nbsp;\n {swapError.message}\n </div>\n )}\n {isSignedIn ? (\n <button\n type=\"submit\"\n className=\"__ref-swap-widget-submit-button __ref-swap-widget-button\"\n style={{\n color: 'white',\n background: buttonBg,\n opacity: !canSubmit ? 0.5 : 1,\n cursor: !canSubmit ? 'not-allowed' : 'pointer',\n }}\n disabled={!canSubmit}\n >\n {tokensLoaded ? (\n 'Swap'\n ) : (\n <div className=\"__ref-swap-widget-submit-button-loader\"></div>\n )}\n </button>\n ) : (\n <button\n type=\"button\"\n className=\"__ref-swap-widget-submit-button __ref-swap-widget-button\"\n onClick={onConnect}\n style={{\n color: 'white',\n background: buttonBg,\n cursor: 'pointer',\n }}\n >\n {'Connect Wallet'}\n </button>\n )}\n <div\n className=\"__ref-swap-widget-row-flex-center\"\n style={{\n justifyContent: 'center',\n }}\n >\n <a\n className=\"__ref-swap-widget-row-flex-center\"\n style={{\n color: secondary,\n justifyContent: 'center',\n paddingTop: '12px',\n fontSize: '14px',\n display: 'inline-flex',\n }}\n href=\"https://ref.finance\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n <RefIcon\n style={{\n color: refIcon || 'black',\n }}\n />\n &nbsp; Powered by Ref.finance\n </a>\n </div>\n\n {transactionState.state !== null && (\n <Notification\n state={transactionState.state}\n setSwapState={transactionState.setState}\n tx={transactionState?.tx}\n detail={transactionState?.detail}\n />\n )}\n </form>\n )}\n\n {widgetRoute === 'token-selector-in' && (\n <TokenSelector\n balances={balances}\n tokens={tokens}\n width={width}\n onSelect={token => {\n handleSetTokenIn(token);\n setWidgetRoute('swap');\n }}\n onClose={() => setWidgetRoute('swap')}\n AccountId={AccountId}\n className={className}\n />\n )}\n\n {widgetRoute === 'token-selector-out' && (\n <TokenSelector\n tokens={tokens}\n balances={balances}\n width={width}\n onSelect={token => {\n handleSetTokenOut(token);\n setWidgetRoute('swap');\n }}\n onClose={() => setWidgetRoute('swap')}\n AccountId={AccountId}\n className={className}\n />\n )}\n </TokenPriceContextProvider>\n </ThemeContextProvider>\n );\n};\n","import { getConfig } from '../constant';\n\nexport const DefaultTestnetTokenList = [\n {\n spec: 'ft-1.0.0',\n name: 'Wrapped NEAR fungible token',\n symbol: 'wNEAR',\n icon: null,\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'wrap.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Banana',\n symbol: 'BANANA',\n icon:\n 'https://assets.onlinelabels.com/images/clip-art/pitr/pitr_Bananas_icon.png',\n reference: null,\n reference_hash: null,\n decimals: 6,\n id: 'banana.ft-fin.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'NEAR Wrapped USDC',\n symbol: 'nUSDC',\n icon: 'https://s2.coinmarketcap.com/static/img/coins/64x64/3408.png',\n reference: null,\n reference_hash: null,\n decimals: 2,\n id: 'nusdc.ft-fin.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'NEAR Wrapped Tether',\n symbol: 'nUSDT',\n icon: 'https://s2.coinmarketcap.com/static/img/coins/64x64/825.png',\n reference: null,\n reference_hash: null,\n decimals: 6,\n id: 'nusdt.ft-fin.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Ref Finance Token',\n symbol: 'RFT',\n icon: '',\n reference: null,\n reference_hash: null,\n decimals: 8,\n id: 'rft.tokenfactory.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'USD Coin',\n symbol: 'USDC',\n icon:\n \"data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none'%3E%3Ccircle cx='16' cy='16' r='16' fill='%232775C9'/%3E%3Cpath d='M15.75 27.5C9.26 27.5 4 22.24 4 15.75S9.26 4 15.75 4 27.5 9.26 27.5 15.75A11.75 11.75 0 0115.75 27.5zm-.7-16.11a2.58 2.58 0 00-2.45 2.47c0 1.21.74 2 2.31 2.33l1.1.26c1.07.25 1.51.61 1.51 1.22s-.77 1.21-1.77 1.21a1.9 1.9 0 01-1.8-.91.68.68 0 00-.61-.39h-.59a.35.35 0 00-.28.41 2.73 2.73 0 002.61 2.08v.84a.705.705 0 001.41 0v-.85a2.62 2.62 0 002.59-2.58c0-1.27-.73-2-2.46-2.37l-1-.22c-1-.25-1.47-.58-1.47-1.14 0-.56.6-1.18 1.6-1.18a1.64 1.64 0 011.59.81.8.8 0 00.72.46h.47a.42.42 0 00.31-.5 2.65 2.65 0 00-2.38-2v-.69a.705.705 0 00-1.41 0v.74zm-8.11 4.36a8.79 8.79 0 006 8.33h.14a.45.45 0 00.45-.45v-.21a.94.94 0 00-.58-.87 7.36 7.36 0 010-13.65.93.93 0 00.58-.86v-.23a.42.42 0 00-.56-.4 8.79 8.79 0 00-6.03 8.34zm17.62 0a8.79 8.79 0 00-6-8.32h-.15a.47.47 0 00-.47.47v.15a1 1 0 00.61.9 7.36 7.36 0 010 13.64 1 1 0 00-.6.89v.17a.47.47 0 00.62.44 8.79 8.79 0 005.99-8.34z' fill='%23FFF'/%3E%3C/g%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 6,\n id: 'usdc.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Tether USD',\n symbol: 'USDT.e',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Ccircle cx='16' cy='16' r='16' fill='%2326A17B'/%3E%3Cpath fill='%23FFF' d='M17.922 17.383v-.002c-.11.008-.677.042-1.942.042-1.01 0-1.721-.03-1.971-.042v.003c-3.888-.171-6.79-.848-6.79-1.658 0-.809 2.902-1.486 6.79-1.66v2.644c.254.018.982.061 1.988.061 1.207 0 1.812-.05 1.925-.06v-2.643c3.88.173 6.775.85 6.775 1.658 0 .81-2.895 1.485-6.775 1.657m0-3.59v-2.366h5.414V7.819H8.595v3.608h5.414v2.365c-4.4.202-7.709 1.074-7.709 2.118 0 1.044 3.309 1.915 7.709 2.118v7.582h3.913v-7.584c4.393-.202 7.694-1.073 7.694-2.116 0-1.043-3.301-1.914-7.694-2.117'/%3E%3C/g%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 6,\n id: 'usdt.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Dai Stablecoin',\n symbol: 'DAI',\n icon:\n \"data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Ccircle fill='%23F4B731' fill-rule='nonzero' cx='16' cy='16' r='16'/%3E%3Cpath d='M9.277 8h6.552c3.985 0 7.006 2.116 8.13 5.194H26v1.861h-1.611c.031.294.047.594.047.898v.046c0 .342-.02.68-.06 1.01H26v1.86h-2.08C22.767 21.905 19.77 24 15.83 24H9.277v-5.131H7v-1.86h2.277v-1.954H7v-1.86h2.277V8zm1.831 10.869v3.462h4.72c2.914 0 5.078-1.387 6.085-3.462H11.108zm11.366-1.86H11.108v-1.954h11.37c.041.307.063.622.063.944v.045c0 .329-.023.65-.067.964zM15.83 9.665c2.926 0 5.097 1.424 6.098 3.528h-10.82V9.666h4.72z' fill='%23FFF'/%3E%3C/g%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'dai.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Wrapped Ether',\n symbol: 'WETH',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='256' height='256'%3E%3Cdefs%3E%3Ctext id='A' x='50' y='180' font-size='180'%3E🍌%3C/text%3E%3C/defs%3E%3Cuse xlink:href='%23A'/%3E%3C/svg%3E%0A\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'weth.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'HAPI',\n symbol: 'HAPI',\n icon:\n \"data:image/svg+xml,%3Csvg version='1.1' id='Layer_2' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' width='600px' height='600px' viewBox='0 0 600 600' enable-background='new 0 0 600 600' xml:space='preserve'%3E %3Cg%3E %3Cg%3E %3Cpath fill='%23141414' d='M263.7,122.8c-3.6,0.3-7.1,0.9-10.7,1.8c-24.5,6-40.3,18.1-50.4,31c24.5-4.7,49.9,1.3,67.3,7.4 c0.5,0.2,1,0.4,1.6,0.6c-2.7-4.2-5.2-9-7.2-14.4C261.2,141.1,261.6,131.6,263.7,122.8z'/%3E %3Cpath fill='%23141414' d='M201.2,197.7c-9.8-1.1-19.1-2.1-24.6-2.1c-0.7,0-1.4,0-2,0.1c-38.1,2.6-67.2,37.3-69.1,82.4 c-1.4,32.2,13.5,53.1,23.3,63.4c-1.5-12.5-0.1-25,4.3-37.3c11.7-32.6,34.3-42.1,60.6-53.1c10.8-4.5,22.5-9.5,34.3-16.6l50.1-39.6 c-10.1,2.2-24.4,4.5-42.9,5.3C227.1,200.6,213.9,199.1,201.2,197.7z'/%3E %3Cpath fill='%23141414' d='M319.1,176.5c-0.5,1.1,0.9,2.1,1.8,1.2c5.3-5.4,16.3-14.3,30.8-14.2c15.6,0.1,35.5,10.2,40.5,22.1 c4,9.8-6.6,16.5-6.6,16.5l0,0c-2.5-2.7-8-6.3-18.2-6.6c-15-0.5-25.3,12.1-24.1,12.9c7.5,4.7,17.3,3.7,23.1,3.5 c5.8-0.2,15.1-2.5,17.8-3.5c4.7-1.8,11.7-7.8,14.9-16.1c2.5-6.5,8.4-28.7-25.2-34.4C352.7,154.3,327,159.6,319.1,176.5z'/%3E %3Cpath fill='%23141414' d='M473.1,225.1c-0.5-0.6-1.1-1.3-1.7-2l-0.3-0.3c-3.9-4.4-7.6-8.3-9.4-10.1c1.2-4.2,4-16.2,1-26.1 c-2.3-7.7-6.8-15.5-9.2-19.4l-0.8-1.2h0c-0.4-0.6-0.8-1.2-1.1-1.7c-0.3-0.4-0.5-0.7-0.6-1l-0.2-0.7c-2.5-7-8.6-22.3-16.4-28.1 l59.4-91.7c2.3-3.5-2.1-7.5-5.4-5l-86.8,66.5c-8.7-12.3-21.1-21.8-21.8-22.4c-0.8-0.6-2-0.7-2.9-0.2c-0.9,0.5-1.4,1.6-1.3,2.6 c0,0.1,0.6,5.9-2.9,17.6c7.5,2.7,13.9,6,19.3,9.7l-4.5,3.5c-8.8-5.7-20-10.5-34.3-12.6c-17.7-2.6-31.9,1-42.1,10.7c0,0,0,0,0,0 c5.9,3.8,13.1,8.7,17,12.4c0.8,0.7,1.5,1.5,2.2,2.3c-3.1,0.9-6.2,1.9-9.3,2.9c-0.3-0.2-0.5-0.5-0.8-0.7c-1.9-1.7-4.4-3.4-7-5.3 c-5.4-3.8-11.7-8.3-15.8-14c-2.2-3.1-3.8-6.5-4.3-10.4c-0.3-2.4-1-4-2.2-4.9c0,0,0,0,0,0c0,0,0,0,0,0c-0.6-0.5-2.8-2-5.8,0.3 c-2,1.6-4.4,5.3-6.5,10.3c-5.2,12.3-8.7,32.1-1.8,46.1c1.2,2.3,2.4,4.5,3.7,6.6c-0.4,1-0.7,2.1-0.9,3.1c-0.6,3.4-0.9,7.8-1.2,12.7 c-19.8-8.3-50.5-17.5-78.5-10.7c-23.9,5.8-39.4,17.5-49.6,30c7.4-3.1,15.2-5,23.5-5.6c5.6-0.4,16.4,0.8,27.9,2.1 c11.8,1.3,25.3,2.8,32.9,2.4c19.2-0.8,33.7-3.3,43.5-5.6c0,5.4,0.1,11.1,0.4,16.9c0.7,16.8,2.5,34.3,5,46.5 c3.6,17.9,16.5,55.2,31.4,64.6c5.5,3.5,13.5,8.2,22.9,13.4c-2.5,6.4-5.1,15.1-5.1,23.5c0,15.2,5.2,26.6,11,37 c4.6,8.2,9.6,15.7,12.8,24c2.5,6.5-2.7,27.7-5.6,38.9c-1.2,4.5-1.9,7.3-1.7,7c3.7-5.1,7.5-10.8,11.3-16.8 c15.3-24.2,19.4-47,19.5-48l0.2-1.4l-1.1-1c-0.2-0.2-17.2-15.7-18.3-33.3c-0.4-6.9,1-11.5,4.3-13.8c0.5-0.3,1-0.6,1.6-0.9 c7.5,3.7,15,7.3,22.2,10.5c2.8,3.5,9,9.4,11.8,12c3.4,3.2,6.9,7.8,12.2,7.8c5.3,0,15.9,0,21.3,0s13.1,0,17.3-2.1 c4.2-2.1,10.9-5.6,11-12.6c0-1.5,0.4-3.9,0.9-6.8c3.7-4.9,4.1-10.6,4.8-19.2c0.5-5.7,1.7-15.5,3-25.9c2-15.7,4.1-32,3.9-37.9 c-0.2-8.2-1.1-14.3-1.4-16.2C475.3,249.4,479.5,232.4,473.1,225.1z M318,310.6c-13.3-8.4-25.6-44.6-29-61.2 c-4.8-23.9-6.9-68.5-3.9-86.8c2.7-16.7,49-34.5,81.7-35.6c1.9-0.1,3.8-0.1,5.6-0.1c1,0,2,0,3,0c-0.1,4.9,1.3,15.6,13.8,25.5 c13.9,11,30.4,5,30.4,5l12.1-18.7c4.5,3.5,9.4,12.7,13,22.1c-0.9-0.4-1.9-0.7-3.1-0.9c-8.1-1.3-31.6-0.9-24,31.3 c1,4,5.2,9.4,17.2,22.3c2.8,3,5.1,5.3,7,7.2c5.6,5.6,7.4,7.4,7.5,11.8c0,0.3-0.2,1.6-0.4,3c-0.8-0.6-1.9-1.1-3.4-1 c-3.6-0.2-33.7,5.6-42.4,15.1c-1.7,1.9-4.5,2.6-6.7,1.4c-0.1-0.1-0.2-0.1-0.3-0.2c-1.4-0.8-2.3-1.9-2.8-3.5 c-1.3-5.1,2.9-13.2,4.6-16c0.6-1,0.3-2.3-0.6-2.9c-1-0.6-2.3-0.3-2.9,0.6c-0.1,0.2-0.9,1.5-1.9,3.5c-3.3,6.6-8.2,12.2-14.3,16.3 c-9.8,6.6-24,15.2-35.5,18.2c-18,4.7-24.9-8.2-25.2-8.8c-0.5-1-1.8-1.4-2.8-0.9c-1,0.5-1.5,1.8-0.9,2.8 c0.1,0.1,6.3,12.1,21.5,12.1c0.6,0,1.4-0.1,2.2-0.2c4.3-0.5,8.6,0.5,12.3,2.7c3.5,2.1,8,4.7,12.5,7c12.6,6.3,14.7,6.2,19.5,5.4 c1.1-0.2,49.8-2.4,80.1-8.2l3.6,0.2c2.4,0.1,4.3,2.3,4,4.7l0,0.1c-0.2,1.4-1,2.6-2.2,3.3c-2.7,1.5-6.5,3.5-9.9,4.9 c-1.6,0.6-3.3,1.2-5.1,1.6c-5.5,1.3-11.1,1.6-11.1,1.6s-5.4,1.2-13.5,2.1c-3.4,0.4-7.2,0.7-11.3,0.9c-14,0.7-13,1.6-24.8,1 c-2.9-0.1-5.7-0.3-8.3-0.6c-2.5-0.3-3.2,3.4-0.7,4c6.1,1.5,13.3,2.6,21.3,2.5c1,0,1.9,0,2.9,0c12.8-0.1,24.4,7.5,29.4,19.3 c2.1,5,4.1,12,5.4,18.5c1.8,8.4-5.3,16.1-13.8,15.3c-12.5-1.3-26.6-4.8-34.6-8.3C365.3,338.1,332.4,319.8,318,310.6z M448.7,169.2 l1.2,1.9c2.4,4,5.9,10.5,7.9,16.9c3.1,10.4-1.4,24.4-1.4,24.5l-0.5,1.5l1.1,1.1c0,0.1,5,5.2,10.3,11.1l0.1,0.2 c0.6,0.7,1.2,1.3,1.8,2c3.7,4.3,1.9,17-0.1,23.9l-0.2,0.6l0.1,0.6c0,0,0.3,1.5,0.6,3.9c-2.7,0.3-4.7,2.7-4.4,5.5l0.8,7.5l-8.6,0.1 l-13.5-15.3c-1-1.2-1-3,0.2-4c0,0,0,0,0,0c7.1-6.4,8.1-9.5,8.3-10.7c0.9-5.4,1.2-7.4,1.2-8.1c0-6.1-2.9-9-8.7-14.8 c-1.9-1.9-4.2-4.2-6.9-7.1c-0.6-0.6-1.1-1.2-1.7-1.8c2.1,0.6,4.9,1.2,8.5,1.5c8.4,0.7,10.9-1.4,10.9-1.4s1.5-2.7-1.1-6.6 c-2.6-3.9-6.2-6.7-13.2-6.9c-5-0.2-9.5,3.7-11.7,6c-0.9-1-2.9-4.7-3.8-10.9c-1.5-9.7,2.1-14.2,4.7-16.4c4.6-3.9,10.9-7.7,14.4-7.5 c0.9,0.1,1.9,0.2,2.7,0.4C447.8,167.7,448.2,168.4,448.7,169.2z M463.4,332.9c-0.7,8.2-1.1,12.8-3.8,16.5c-2.3,3.1-7.3,0.8-6.6-3 c0.4-2.1,0.7-4.3,0.8-6.4c0.3-10.7-4.9-20.9-6.7-27.7c0,0,0-0.1,0-0.1c-0.9-3.8,1.2-7.7,4.8-9.3c1.6-0.7,3.4-1.6,5.3-2.6 c4.6-2.3,9.9,1.3,9.2,6.4l0,0.1C465.2,317.2,463.9,327.1,463.4,332.9z M385.1,249.4c1.8-1.3,4.4-0.8,5.6,1.2 c0.8,1.4,1.9,2.9,3.4,4.1c4.5,3.7,9.8,3.5,13.2,3.5c3.3,0,5.4-0.6,6-0.8c0,0,0,0,0,0c2.4-0.5,4.3,2,3.1,4.2 c-2.6,4.8-6.1,11.1-6.5,11.4c-0.7,0.5-22.8,5.1-25.6,5.4s-11.6,1.2-18.2-3c-2.8-1.7-5.5-3.7-7.7-5.3c-1.7-1.2-1.4-3.8,0.4-4.7 C368.8,260.4,378.7,253.9,385.1,249.4z M436.8,263.8l8.3,9.1c1.5,1.7,0.5,4.4-1.7,4.7c-5,0.6-10,1.2-14.9,1.7 c-2.3,0.2-3.9-2.3-2.7-4.3c1.9-3,4.3-7,6.5-10.8C433.2,262.6,435.5,262.4,436.8,263.8z M396.4,117.1l83.5-69.1l-76.9,76.9 c-2.5,2.4-6.6,1.6-8.1-1.5h0C393.9,121.2,394.5,118.5,396.4,117.1z'/%3E %3Cpath fill='%23141414' d='M196.6,258.1c-25.6,10.7-45.8,19.2-56.4,48.7c-15.1,42,9.4,88.5,62.5,120.1c-17.4-68,3.5-93.1,22.1-115.3 c6.4-7.7,12.5-15,16.9-23.7c12.9-25.8,12.3-50.5,11.1-62C233.7,242.5,214.1,250.8,196.6,258.1z'/%3E %3C/g%3E %3Cg%3E %3Cpath d='M201.6,477.1h-9.1l-2.8,17.1h-14.3l2.8-17.1h-9.1l-2.8,17.1h-9.3l-1.5,9.1h9.3l-2.3,14h-9.4l-1.5,9.1h9.4l-2.8,17.1h9.1 l2.8-17.1h14.3l-2.8,17.1h9.1l2.8-17.1h9.3l1.5-9.1h-9.3l2.3-14h9.4l1.5-9.1h-9.4L201.6,477.1z M186,517.4h-14.3l2.3-14h14.3 L186,517.4z'/%3E %3Cpolygon points='260.8,505.3 230,505.3 230,477.1 218,477.1 218,543.6 230,543.6 230,515.4 260.8,515.4 260.8,543.6 272.9,543.6 272.9,477.1 260.8,477.1 '/%3E %3Cpath d='M307.1,477.1l-23.4,66.4h12.8l5.5-16.4h25l5.5,16.4h12.8l-23.4-66.4H307.1z M305.3,517.5l9-26.8h0.5l9,26.8H305.3z'/%3E %3Cpath d='M394,480c-3.5-1.9-7.8-2.9-12.9-2.9h-24.9v66.4h12v-22.4H381c5.1,0,9.4-0.9,12.9-2.8s6.2-4.5,7.9-7.8 c1.8-3.3,2.7-7.1,2.7-11.3c0-4.2-0.9-8-2.7-11.3C400.1,484.5,397.4,481.9,394,480z M390.9,505.4c-0.9,1.8-2.3,3.2-4.2,4.3 c-1.9,1-4.3,1.6-7.3,1.6h-11.1v-24h11c3,0,5.5,0.5,7.4,1.5c1.9,1,3.3,2.4,4.2,4.2c0.9,1.8,1.4,3.9,1.4,6.2 S391.8,503.6,390.9,505.4z'/%3E %3Crect x='417.1' y='477.1' width='12' height='66.4'/%3E %3C/g%3E %3C/g%3E %3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'hapi.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'PARAS',\n symbol: 'PARAS',\n icon:\n 'data:image/png;base64,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',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'paras.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Ref Finance Token',\n symbol: 'REF',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='16 24 248 248' style='background: %23000'%3E%3Cpath d='M164,164v52h52Zm-45-45,20.4,20.4,20.6-20.6V81H119Zm0,18.39V216h41V137.19l-20.6,20.6ZM166.5,81H164v33.81l26.16-26.17A40.29,40.29,0,0,0,166.5,81ZM72,153.19V216h43V133.4l-11.6-11.61Zm0-18.38,31.4-31.4L115,115V81H72ZM207,121.5h0a40.29,40.29,0,0,0-7.64-23.66L164,133.19V162h2.5A40.5,40.5,0,0,0,207,121.5Z' fill='%23fff'/%3E%3Cpath d='M189 72l27 27V72h-27z' fill='%2300c08b'/%3E%3C/svg%3E%0A\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'ref.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Pulse',\n symbol: 'PULSE',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCIgdmlld0JveD0iMCAwIDIwMCAyMDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxjaXJjbGUgY3g9IjEwMCIgY3k9IjEwMCIgcj0iMTAwIiBmaWxsPSIjMEYyQUMzIi8+CjxwYXRoIGQ9Ik0xMDMuNTc0IDg0LjU3M0MxMDIuMDUyIDg2LjU4MDggMTAwLjg1MyA4OS4xNDAyIDk5LjY5NzIgOTEuNjU1OUM5OC41NDA5IDk0LjE3MTYgOTcuMzkyIDk2LjY1OTYgOTYuMjE0OSA5OC40MjU1Qzk1LjAzNzggMTAwLjE5MSA5My45Mjg0IDEwMS4wNTggOTIuNzMyNiAxMDEuMDU4QzkxLjI3MDMgMTAxLjA1OCA5MC40NDI1IDEwMC42NDMgODkuNzEwMiA5OS44NjcyQzg4Ljk3NzYgOTkuMDkxNiA4OC40MDY1IDk3LjkwNSA4Ny44NzAzIDk2LjY3MDRDODcuMzMzOSA5NS40MzU4IDg2Ljg0NzcgOTQuMTM1MSA4Ni4wMzA1IDkzLjAzNDlDODUuMjEzMyA5MS45MzQ3IDgzLjkxMDQgOTEuMDI5MSA4Mi4yMTk4IDkxLjAyOTFDODEuMjYzMyA5MS4wMjkxIDgwLjQyMzcgOTEuNDQ1MSA3OS43ODg2IDkyLjAzMkM3OS4xNTM0IDkyLjYxODkgNzguNjkwMSA5My4zOTAxIDc4LjI3NzQgOTQuMjI1OUM3Ny40NTIxIDk1Ljg5NjggNzYuODM1NCA5Ny45NjgyIDc2LjA0MzUgOTkuOTkyN0M3NS4yNTE2IDEwMi4wMTcgNzQuMjc3MSAxMDMuOTk1IDcyLjk1NTUgMTA1LjM4M0M3MS42MzM2IDEwNi43NzIgNjkuOTk5MiAxMDcuNjQgNjcuNTAxOCAxMDcuNjRIMzguMDY2MkMzNy42ODcxIDEwNy42MzUgMzcuMzM0NSAxMDcuODI1IDM3LjE0MzMgMTA4LjEzN0MzNi45NTIyIDEwOC40NDkgMzYuOTUyMiAxMDguODM2IDM3LjE0MzMgMTA5LjE0OEMzNy4zMzQ1IDEwOS40NjEgMzcuNjg3MSAxMDkuNjUxIDM4LjA2NjIgMTA5LjY0Nkg2Ny41MDE4QzcwLjU0NzkgMTA5LjY0NiA3Mi44OTg1IDEwOC40MTYgNzQuNTMyMyAxMDYuN0M3Ni4xNjYyIDEwNC45ODQgNzcuMTg3NSAxMDIuNzk3IDc4LjAxNDYgMTAwLjY4MkM3OC44NDE3IDk4LjU2NzUgNzkuNDc1IDk2LjQ3NDEgODAuMTgyOCA5NS4wNDA3QzgwLjUzNyA5NC4zMjQgODAuODg5MyA5My43OTE5IDgxLjIzNDEgOTMuNDczOEM4MS41Nzg5IDkzLjE1NTIgODEuODI2NiA5My4wMzQ5IDgyLjIxOTggOTMuMDM0OUM4My4yMjc5IDkzLjAzNDkgODMuNzQyNyA5My40NDUzIDg0LjMyMjIgOTQuMjI1OUM4NC45MDE4IDk1LjAwNiA4NS40MTIgOTYuMjEyNyA4NS45NjQ5IDk3LjQ4NTRDODYuNTE3NyA5OC43NTc3IDg3LjA4OTYgMTAwLjA3OCA4OC4xMzMxIDEwMS4xODRDODkuMTc2NiAxMDIuMjg5IDkwLjczNzUgMTAzLjA2NCA5Mi43MzI2IDEwMy4wNjRDOTQuOTkzOCAxMDMuMDY0IDk2LjY1OTEgMTAxLjQ4NiA5Ny45ODg4IDk5LjQ5MTJDOTkuMzE4NSA5Ny40OTYyIDEwMC40NTQgOTQuOTY5NSAxMDEuNjAzIDkyLjQ3MDlDMTAyLjc1MSA4OS45NzE4IDEwMy45NTMgODcuNTE2OSAxMDUuMjgyIDg1Ljc2MzhDMTA2LjYxMSA4NC4wMTA3IDEwNy45MjUgODMuMDA1OCAxMDkuNTUzIDgzLjAwNThDMTEwLjI5NSA4My4wMDU4IDExMC45NDYgODMuMjcyOCAxMTEuNjU2IDgzLjg4MzRDMTEyLjM2NSA4NC40OTM5IDExMy4wNjggODUuNDUxNyAxMTMuNzU4IDg2LjY0MTRDMTE1LjEzOCA4OS4wMjA3IDExNi40NDcgOTIuMzI4OCAxMTcuODMyIDk1LjY2NzVDMTE5LjIxNiA5OS4wMDYyIDEyMC43MTcgMTAyLjM3NiAxMjIuNjk0IDEwNS4wMDdDMTI0LjY3MSAxMDcuNjM4IDEyNy4yMzQgMTA5LjU4MyAxMzAuNTc4IDEwOS41ODNIMTYwLjkzNEMxNjEuMzEzIDEwOS41ODggMTYxLjY2NiAxMDkuMzk4IDE2MS44NTcgMTA5LjA4NkMxNjIuMDQ4IDEwOC43NzMgMTYyLjA0OCAxMDguMzg3IDE2MS44NTcgMTA4LjA3NEMxNjEuNjY2IDEwNy43NjIgMTYxLjMxMyAxMDcuNTcyIDE2MC45MzQgMTA3LjU3N0gxMzAuNTc4QzEyOC4wNjcgMTA3LjU3NyAxMjYuMTcgMTA2LjIzMiAxMjQuNDAyIDEwMy44NzlDMTIyLjYzNCAxMDEuNTI2IDEyMS4xMDggOTguMjgzNyAxMTkuNzM3IDk0Ljk3ODFDMTE4LjM2NiA5MS42NzIxIDExNy4xMDggODguMzA1MiAxMTUuNTk4IDg1LjcwMTJDMTE0Ljg0MyA4NC4zOTkxIDExNC4wOCA4My4yODQ2IDExMy4xMDEgODIuNDQxOEMxMTIuMTIyIDgxLjU5ODcgMTEwLjg4MyA4MSAxMDkuNTUzIDgxQzEwNy4wMzYgODEgMTA1LjA5NiA4Mi41NjUzIDEwMy41NzQgODQuNTczWiIgc3Ryb2tlPSJ3aGl0ZSIgc3Ryb2tlLXdpZHRoPSI1Ii8+Cjwvc3ZnPgo=',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'pulse.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Ether',\n symbol: 'ETH',\n icon:\n 'data:image/png;base64,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',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'eth.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Aurora',\n symbol: 'AURORA',\n icon:\n \"data:image/svg+xml,%3Csvg version='1.1' id='Layer_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 288 288' style='enable-background:new 0 0 288 288;' xml:space='preserve'%3E %3Cstyle type='text/css'%3E .st0%7Bfill:%2370D44B;%7D .st1%7Bfill:%23FFFFFF;%7D %3C/style%3E %3Cpath class='st0' d='M144,0L144,0c79.5,0,144,64.5,144,144v0c0,79.5-64.5,144-144,144h0C64.5,288,0,223.5,0,144v0 C0,64.5,64.5,0,144,0z'/%3E %3Cpath class='st1' d='M144,58.8c7.6,0,14.5,4.3,17.9,11.1l56.2,112.5c4.9,9.9,0.9,21.9-9,26.8c-2.8,1.4-5.8,2.1-8.9,2.1H87.8 c-11,0-20-9-20-20c0-3.1,0.7-6.2,2.1-8.9l56.2-112.5C129.5,63,136.4,58.7,144,58.8 M144,45c-12.8,0-24.5,7.2-30.2,18.7L57.6,176.2 c-8.3,16.7-1.6,36.9,15.1,45.3c4.7,2.3,9.9,3.6,15.1,3.6h112.5c18.6,0,33.8-15.1,33.8-33.7c0-5.2-1.2-10.4-3.6-15.1L174.2,63.7 C168.5,52.2,156.8,45,144,45z'/%3E %3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'aurora.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Skyward Finance Token',\n symbol: 'SKYWARD',\n icon:\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMAAAADACAMAAABlApw1AAAB+1BMVEUAAABWWLVmXbOiaJ9pXrJbWrVvX7NhXLRxYbNXWbWcaKffeILLb41lXbSCZbCkZ6N+ZbJcWrVgXLXTcYjlf33jfH7heYDieoCJZq5+ZLHAaJRoXrTgeIHFaZCZZ6iYZ6jcdYPmgX2oZ6GxZ5u7aJbRbImyaJzie3/Qa4n///94Y7ODZrGZaKnrjHpqX7XohX1kXbW1aJvFaZHacIWeaKfBaZTieoDgdoJ9ZbNzYrSTaKxvYLS9aJbQbIquaJ+jaKTTbYleW7XmgX3piHuyaJ25aJnJapDNa42paKCmaKLdc4PwnXXtk3iJZ6/skXlYWbWOZ63ypnPkfn7Lao6JZq/xonTXb4fzrHHulXfvmXf1snBhXLXvmneQZ632uW/75+b69fjXdY2HcLj67/GahML+9O385tXpi4T2296AabXvnn3chJn1t4TjmqrafJL3wo68rNaSe72bcLDxqIffjqH0tZfp3+73wp/ohoHy7PWtir73ybfuqKb1s3mnk8n62cGmfrbmpbTsn5zqlpTg1enxxcnyqHz00NSync3yuLOicKzpj4v4v3m4k8H5y5mgd7TtmofUxuDrtsLeeInljpjwqZPLudn0r3zEo8rCh7D61KzjgIbTjauRcbTjho7WrcnSeZitd63KfaLXnLi1gbG5cKHEcpuvbqPjxNjN3AFJAAAAKXRSTlMA71IjE7A5ZcbT8kw6oXlU8ol5YezgsHOi4ansne3iyorQrIt01eTFwdYInfkAABWHSURBVHja7JY9b9pQFIax8QceXMms+QUJVZUxgYkfgNKBLYqEIpZuNoMlM1gMHqxKCLGgLPmvPb4GH/vcD9vBBIa+pKaly/Oc99xLev9DY1i67bmOo1XjOK5n65bRu+UYumc62osqmmN6+k1aWLbpEFiVhd3v3VBg8if4qeAljnMrTRi2qZ3Ys8AbvpekBCaaaV/dQc/op/Vh/ODBO+i968XytGnLCCQ0z+pdJbY5/UpETVyhBmPo8Giv01eaplU4dueIanwNqY95fIQfPvAf6KKqQhv2vi0n/By8acQSV1Cw7xg7R97eAnv4xkXSHQn8L/aHvCQSEEkPzoVvpL4rpYcHEJfCPsieTarAFtxLfrcNRei/EFwVoUTZ4FSDdrE9sgaEvX1oHdkVxW+SeZnf9IaE/YyoemC5wH3UH5SWRpwJn+xDHh+rQAdiYHZ9EnSkr+cWmfAeRIE4aHqn/J54cSZtI5PAGtDB6w7fYOtTg/4sC29Rr9DtGll3BL6Wu16E3EyiFjr7VrMr+HXsD8e3B4WE2qG8R3oXt6eaHsnFQRW1BDpgDZ3cpy5PT7gRVRGqISyC/3Y7/yibCno1cL0HpyBapBe3C36eXjTzJ3jBE36Kh9pB3ALdI/MM/gHiE3gCfoIv5w9JVUhaA38UzLP46ezJ4BG8wv4OCYJgWQT+AR+BhdwBW+jKYMDhC+ZOM8rggTyO09QvJU3jGDxA4qlW4REVzjEwK7vD7zvPPgJ6Bp/6hySMFot7zCIKk72fxsuAFCFxqCp85SS7Ewk/HfyoCNDn8NG9JItw78fHHjBqBWbgtf/+QnoKT+if2AuS4fuHEOcuTrSHHmoVqIHdkl9Hfjy2yI6jZ88jfuonKnrsIfGVCvQoMAO9Fb+F9MK1H5Gw6SN+fUI/DsBApUBL6LfgN+6K1cfhIzyP/xkgflOFdHlUQAtiACkZaG0u0Amhf6jsfJEZ+5m/fy7TQ3TfMot9vAQDdQt4oba5TD3cngo+23mkZ4/5fJaNP2yDjnsEJTxBKiWgAS1h2PQA4/hlw5/Ba84yY/w4/rYlsDWCkBbEBlazA4DjR34cfr41R3rgz9YHt79tEjAYjSQt0JPQ8BgMKD6kPPv5iT7Lb+DfI3/7hIUBpPgdV1ZCk2PwA/kF1w7CH/l3yH+uAbbwTPYIDexa/j69ecqrg/TADgH+WLk/UZ56g0Ihj7SEV6N2geTjR3rAZxnv1lL+KDmk23WebXrYh1LRZJkJ0BYkF+qgboHI9OnwEf7t7W28Wn9E4qnut+vNZrdb5dntNpv11k8kBocgw6ctSNZIvUQGjr+yPWT2jH48Xm3SUDjSj/UG2H/mGbOAxWYtOS9RMBuxiBS4LVIKuIhPxl+hz5myBRJNH/D/MnqGj39ZrUAhETXwyQRkLZAOXAW/JcLH3SnTswL+MV4+r01FQRSGtNoqWH+sLIKuRTfWFCW06kKTtlAQKu7EhGwCISIlFFJcJGAJBEJpK9JgtEmapv0znUxect6dmXtfj7pT+L6ZM/dZo0D5I8InXgQirPC9pm/g7/an2Qpg4NYIBoHP2TL4MX2bnoAO20fG+OutVjqdfp4m3rShcLhPtZP8H3lKs5mZO4DBLS//QsT/zB0/ugN6Cl1wXvG364QvQiIxld1626nR0Zh/GwZQ8BqkfAL3MH5j+hkHnxeg+fvgVxYwwC3vfa/vZrbJAAp8Cs6DKh+jR94n1GmPOXxMsqUvoHbab711IixgMDM+3M18pEwVcAmhU17wLECNX3Ufj0q6pZ+g30Pw+zzYfdqin/vEn8l8gQF6FDKwV7Ck5q/wp6FCpPvtPfmaDPubm2836Q/9CllMDY4m/HEFGKBGxC8NFswF6PHb5WGI1lCecK1N/FYMiVZ9//Tnaf2Qv3NKIXTK/hUs4UcWjF9Pf4YwlA26Gl5uuLE1Jv+81Tps8fcCCvYSbIOUtQC0B+VX0+cQRr99Jb5g7f6GN0IC92Ao4BJe+w30tyCFb1fED3wxfWZQJ7DXudx4I2OsAwpxBxiYNdIG6nO86MzfGj/oKZv905pqEMB9JoaDayCW4G/RDcE/J8YfxCeGDXXDp30mfR+LkFBlwifOXEJ4B3OuwMPobwt+0Mfxif9yeOYK5DsX732Ri1AKUYQBTtkyeCBOWNcH/Ap/YyzgLqAYCbxwYliEFFCj5B08ck8Y80/CZ4A3lx0hUOtcOOimhnawFZIN5BkvYv4mP4bP+G+0wB4EzJgK2IJtQPG36E5cgPn1/DU+01sCpc7FByteCygYS0CN9P/tIgGnQwvM7xu/wieGC7UBCAQ9DAVswV8jyyAFgYeB+qD7wDcEit2LNSPSAQqcmIKnRuoOUCJ0aP4e+HV9NP4Yo3OWFwKjNX+EhNwClqAN/GeADqU8/GiPwIcAcj5YW11bFZEScJAKqNH1DW7OGqT5MX6Fz/kwOBcCZ4MRwH0atgJ6JGrkN2CB2bdsGfyoP+FLfuB/IIGaK9DsxgRWvBZYAxRgoGoUNFiM+Oc0f2j8TLA2Oi+JKz4frK5YgYNUwC3YNdItYgEYzEcnkMCv8Qlj1L2SP9B0Ryu+GHuAgnsJMEhuUSo6AfCj/jY+8zPCaHD2VK0gl82uZGfRFmEFGIR3AIE70QmAP17/2dvJi3bxCWRwXhQGpW6PDIyYDm6RZI2e2wb8ScbXYHIE8+A362PhU0bd0lNZIjLYiSWb3YEDFOAAAz4zGOgd0EuvS/SIBe5uW/yiPgKfBY6lQPGYDKaBipSAARR0jZ5rA10i/hIsSX5z/C4+YWTRIcMAcTRkk2wDtQP8iCNWsMQ3nMCv8CcQ2R7eIRgcVMq93Po6/5YW8T3AgCIPQbfId8h8xU++fMH9evkFPpHkeAUypUa1V1iPJReZSAX/EtAi2wACfMXzhE8R/Fx/4Ct+yk6ve0DEukaV6rdC4d27uAQcdqBgL8HewUfbYJkEbqoCYf5q/KCn5HqVrwBHvpJCmRTGWYeHswe1hMAOYKBLNEePkJg/+J3rlfg5Sq/ayD+1FRrVMq9hEhhQ4vccNlCPqf4apOgREvy6P3L8jE9ZJ4MmqMU1Nyoxh3X6DQtsYbIE1Ei3KOEMFlgg3B97/ExTKKNEeg1wUHtghRVrCdgBDFSJ8JYu0SsKfmf+sj4an8ZaKDdgoJIvHUcOn5UCliAN8JrikDPj4IdkGNynVzRj8r/X9ZH4FNMg2QEKWAIM0KLkEtGH4LHqj54/2s/dZ3zO58/fqjCwU4QDFPQSQjuAgVzBIgTwAVDzx/gFPqUAg2QHrWAY8Ar0DrACGLDA7RA/C8jxA//lON/KlRJYvQ5NPK1QsAxYwfOYqhItuwLh+aP8RM/4nJOTcqWZTxLA0woF1MjcgV0iLXB9foyf6KfZ2to6+Reqkf7CsQJqhFPWBnaJYMACToF8/DkK8OP8bPCrclAEZ7BKjQoUUCMYiKcovIJ7UwHmxwME/tD4tyb4ryh/SKEJhfDLygoJBjiD0OeMBawC4X7Bj/Fj9hF/pPDjugrNRjUyoMBgFQbJJYJAiJ8i5g980HP+N2+ur03GYBQPVhRscULtqmPqdF4/iHjbvqhI590hXnA6EauI3ajVfpijg20UK6sURYpaChP8W03S5j3N8yR52+nUs6kIiueXc54kfVsnfvz4+WFlLTwLuHMjhOt9E/AIOAAGwNkftN+yPzE5oSVTqDWwI4U0jxCQARnkYAQAsAOAf7L+rD5Ye0im8OnDytd8XyG8e20TnAkSYI4NgJIG0P6xA3H/WH7X6vfovlRu7tOHGqoUmoQ3r/0ZnOYENAIDwAvkW3/u3zJvlFvSDB9jGeZ9BBgDX4kMgDoHiH+ygUr/WH+6/Lb3nPw2WkIO8QSYZAxyaI5xp9MA+gi4RAsUXH+H/RzVqX4Y8oSAlwjHGT/NAIAA6AZE1v9WyD68KymE+C59jPYiCUAI/FMAAHWdxosADAD8Y/3jV/8Uk2Hwn3Br797OgABbkTXHOI/JWaAADvgC4P4B0GOfeucMc5JhpeGJ4eV7WSIQDBKBItgjxCEJ4NiBsIHCP1l/h/0p+W1kMcgYGvOeMXj7AhlcCxBgI8Lrgp1CjN9kRwB2UO4f9rl7l8AgEfLuEgHAImBbKdtJNcBhOQHOCXb517KWn5g/eXJKfnV+JgxLskiua8bLN2/PzsSWiEyBAdguxBCZAHYCzLgCkO5hPzLPBQRdpFrjpXMnmlEEbC+VjY6LYIsQKRYAKRDml/WH2/dCmB6t5J0RGILYCAhAQghxExNA/fMCwT78U/N31BdH8BOsvf424ypRfIf2CqkDLAB9BMC/tz/c/h1bFoKfIP8uigA7EYnAvZPuUQCHAEACwACw9Yd9Yn5afk+r764IgiLgcyA7JAkQAZ8CHgEAxlWDSAC0QFh/l3+4t2UwCEGt4egQiYBMgQ9gpwIY8gbA/Cu5/Peafxz9AANC0NvpCj3S5t99O+ua49gObRNKl3AIswBQIL7+3P5jWwaChCBL9JzvQ2fJYYAI0CEKsEtoHcUI8wDgn68/7Bvzs73qUiAFTeCMQAOEI8BRAIADQusQaVAoAPjH8k8rGfdPIxkInQMIJAKfgq+vz1oRAOBC6CjYI7SGrvBDmAcQWH/tXpu/3SMDYVIAwpLsEJ9ivhGRMeYA24RWwjXCOgC+A9n+o/Yw96DQCKiRBvhEz4KP37+RCAIdOhftQ1tFdwgAEAoA/rH8UXlgnyF0Q8Aon2JDMN8FUATYSdlpbO9Ddw+Irsb5CGMC6A5E11/Zx+o/7FHEYHoUlWiutsYAbiGC64gg2KGdBmCIjnA4AO6fmGcMJIQAwEx8hwCAT08fNQB8D8UE8AJJ+5Z/g3Dv3j0guAjmassOACVrJ2UAN6wE9otII2gQrnGhALj/yDoEBD0JepQDAIiAdci9ke4BwJCvQWH/6A/cEwEBBCEA3iH/YTwkILoHXQ4DwD+WH/4fyS9KoEc5KtFca80BcCvUIQ6wQ/RohOxBrEE8ALL+xjxECGQEUQbNlY8MYDLQIVzoAKAaBKUAgAbFB0D9K9vRFxiQQfdEa9JzYO3n5KSzQ+xCh6Nsm+jVvjgAHoDe/3uHt+MeUr+JQsAYKAD6muYrAHxnGQXYLyyNyz/ZX4MwwdJ/sVhfWKjX693qQyDQsgimm63ODEMrGuAWAOKHYKcNkAAAOwQmGIApkLS/WKlUSm2UX+nJEwsBGTztlMiMAFT70QFAh2IBtgpbI2iQC4AFoP1L+8uvTpxYLrVhPhIjMBEUW7RB+e8SwESAITgTmOJDgigVBOAN6vhfLuh/X2YA948IQkTQnePZ5mKVPtoCADrkOspwmdgmqPYBwDoFaIOM/2JxQS2/VqFSWlX+mXozMCUqtrp/DWr8nJhEh9wAp3EhlQAHBFNaAWCG2Qho/wAoLrQqWMhCubQK288sAoUAAJlbo0Df7qv9UACT/CgjF1IADAmufdiEEIAH4HGnPlBVEhj3z5QMBS1RcQEFwjFGAMwUn/FN8X7h0GGdAEbAv4lq/3YPXhkCbV59GwQ7AvUXn5/gDZIAbIoD2xACIBEAwD3DJoBm5B8EXxSBtA2ZDBABBdfKf/ihAHxnMQdAADQC1yaEBmEPKi7ABubgS/kzzOsQKEBd+2cBfDIA2IaCAAiARtA3QAv9hwrr5c+fAwT1ut63WAC1uQkpbEOOBBQBABAAUdp3l5b+CQAbRF2j9S8WggVQV6d2VfafB5DTAIiA76N2AgiA6ggAAufw9PTswqL7TceCRvjMCdrtkjy1XX9p/sNcjiYQPskOCK9S9CpHAHAK4DAiIWgEzYDNdHW1VCpXlgtYfujlyqel+/djAK5aAAnh1wg/x8zzFAB0tlGUiCFIBgmhtfq5JM2XK+tV2Le09mEpZwAm+0pgXIT0gAG4LxKSAHPMGaoSQqpcVj+vS/fIixcoJ/33D7BDBJUOVwg3ORB4IF4VCoVqtVoo5GHesQN9WsqxBGZwl+AAQyKs430BgGCDgv9TuYEqdEjEKAEA7y6kAfSt5tXv+W8056R/CdD/LiRilcY26pkB83Ie5+pv+JcA8TOAcwAFCpSIVMgLIK8Gi5X8xv23lH/ToP4qhAKFZN1GnduoBtAEpcpGB2Fe+/ckcNENcFT0pSS5SgAAr+hnZxWAIlhc30gIL9ek/6kpKwF6neYVSon+NOZ8PUBe0isARdAuVQaf5cJKs3nyZBiA30YPi3513AcwZQHc1k+02u1ypTAQQn5ZLv9JDYBNKB4AAxCvi+GjGEOgCB61S2WWQth+807Hvw9A+ycAR8UASvgOgik6BPqZnEZYL/RVnkarWZyW/p0A5J0+6wF7QgyipHsbIhGA4JG6cH6p5mMWv7rYWijOTt+xASZcAPQdgpQYTFnvq3o8GTVTIAkUgmZYxzjQG96ycl+cNe/2ydUY4BgYEoNqDADuJ3MkAsOgbqDVqrzCveqQyF/lra6yuCifAheLTzv+EQAAgs/XD4vBNUqnmHcIBApB68mqplD6UlEqlxdLpVK7Xn/4EA/YQyMwg8dC0QyPi41oGADBCECAB7yrXbWl6tI8nk6jQXQE+Fs0ZgRGxMY0LDvkB5AEiIC8P0Dfaer69wTgvosCAP4HJ9AA2EjpA3abgCFIKPhHgYIjTGf4PPxvhMDfIVMitAgI1D7e5ZtmAbhfjgEA/jekUXSIR8AIdJHwxf2jQP4GkSej4+L3NOaLAGOA94mVaYi/y+oNgAOYETgsfldZAEg536kHgqaAsPzcPwII3eTS4veVlC3Ch204Qe9HVbh77j82AOxB+1LiTyiVsT9vFvdpm45xuLc+68ECYCMMgCMJ8Yc07Pu8EPYiMDjtx/vn94gR8ec0Zi7VIDAI5ANn1L2uD/FvCgQA+Mcmelj8SSV341bNMkCPiLD8xH98AKj/H6sRxoATzCIF4p7Yp/4xAUoIYET8eWX5cYZR7jBIv2TtlX34JwWa8AWwLy02Q4lhRGDPgc2gfnTMm9V3+ycTgENsJCE2SendhEAJBAbCeHd/dtr49wWA5d8MjboI2MfX4R324Z8MAAlgTGyuUsfMGND/P2BkPu8N97AP/2QHMgEcT4lNVzqjMgABjQHeyf9+QH/g3y7QkaT4K8pmSAhgoDoZifrnA3DEX/7NRAABpyDujf9c7/obANj/O0ofBAEguNAe2HcM8PGk+OtKDiuCeIQpx/KTARhNiX+iVDYDAiAQ83z5taL+HMkmxN8XYtjdYYCMc5iHfeY/8/cXnzOMIgemU8S+1Z/MaFL8H0pmDxqnynTXu3QfsH8s+7+47yiRHD2o2wTBPdqjlTk2lkyI/1Gp7OhwxmEeq58ZHs3++9bHZZHOjg0fO3gws9soc/DgseGxbHoT1v0X6Almagg4b48AAAAASUVORK5CYII=',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'skyward.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Staked NEAR',\n symbol: 'STNEAR',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 67.79 67.79' version='1.1'%3E%3Cpath style='fill:%23fff' d='M33.934.311a33.9 33.9 0 1 0 33.89 33.9 33.9 33.9 0 0 0-33.89-33.9z' id='path505'%3E%3C/path%3E%3Cpath style='fill:%23ffbd00;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1' d='m11.803 27.8 12.387.359 2.361 5.959 7.616 3.31 8.523-3.322 2.348-5.87 12.269.03L54.822 54.2 31.837 58.86 12.89 52.648z' id='path1051'%3E%3C/path%3E%3Cpath style='fill:%23a0a0ff;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1' d='m34.657 12.575-10.43 9.633 1.096 10.01 8.844 5.21 9.785-5.287 1.086-11.33z' id='path1815'%3E%3C/path%3E%3Cpath id='path928' style='fill:%23666;fill-opacity:1' d='M33.928 4.282a29.93 29.93 0 0 1 4.682.367 29.93 29.93 0 0 1 25.244 29.572 29.93 29.93 0 0 1-29.92 29.92 29.93 29.93 0 0 1-.006-59.86zm.729 8.293c-2.03 5.668-8.815 9.76-8.815 14.521 0 4.76 3.912 8.62 8.737 8.62 4.824 0 8.736-3.86 8.736-8.62s-6.707-8.697-8.658-14.521zM37.84 22.67a2.524 2.446 0 0 1 .246.012 2.524 2.446 0 0 1 .246.035 2.524 2.446 0 0 1 .24.059 2.524 2.446 0 0 1 .233.08 2.524 2.446 0 0 1 .225.104 2.524 2.446 0 0 1 .213.123 2.524 2.446 0 0 1 .197.142 2.524 2.446 0 0 1 .183.162 2.524 2.446 0 0 1 .168.178 2.524 2.446 0 0 1 .147.191 2.524 2.446 0 0 1 .127.207 2.524 2.446 0 0 1 .105.217 2.524 2.446 0 0 1 .084.227 2.524 2.446 0 0 1 .06.232 2.524 2.446 0 0 1 .038.237 2.524 2.446 0 0 1 .012.24 2.524 2.446 0 0 1-.086.633 2.524 2.446 0 0 1-.252.59 2.524 2.446 0 0 1-.403.507 2.524 2.446 0 0 1-.521.389 2.524 2.446 0 0 1-.61.244 2.524 2.446 0 0 1-.652.084 2.524 2.446 0 0 1-.654-.084 2.524 2.446 0 0 1-.607-.244 2.524 2.446 0 0 1-.524-.389 2.524 2.446 0 0 1-.4-.508 2.524 2.446 0 0 1-.252-.59 2.524 2.446 0 0 1-.086-.632 2.524 2.446 0 0 1 .086-.633 2.524 2.446 0 0 1 .252-.59 2.524 2.446 0 0 1 .4-.506A2.524 2.446 0 0 1 36.58 23a2.524 2.446 0 0 1 .607-.247 2.524 2.446 0 0 1 .654-.082zM24.19 28.16a16.579 2.485 0 0 0-6.502 1.965 16.579 2.485 0 0 0 7.635 2.093 10.483 10.6 0 0 1-1.133-4.058zm20.848.078a10.483 10.6 0 0 1-1.086 3.904 16.579 2.485 0 0 0 6.894-2.017 16.579 2.485 0 0 0-5.808-1.887zm6.925 3.21c-.455 1.177-4.097 2.154-9.273 2.659a10.483 10.6 0 0 1-8.072 3.861 10.483 10.6 0 0 1-8.067-3.85c-5.276-.506-8.978-1.498-9.398-2.64h-.049v5.17h.049a.69.69 0 0 0-.049.24c0 1.8 7.81 3.25 17.43 3.25 9.62 0 17.43-1.45 17.43-3.25a.69.69 0 0 0 0-.24zm.032 7.323c-.67 1.73-8.22 3.03-17.43 3.03-9.23 0-16.771-1.34-17.381-3h-.049v5.17h.049a.69.69 0 0 0-.049.24c0 1.8 7.81 3.25 17.43 3.25 9.62 0 17.43-1.45 17.43-3.25a.69.69 0 0 0 0-.24zm0 7.21c-.67 1.69-8.22 3.03-17.43 3.03-9.23 0-16.771-1.34-17.381-3h-.049v5.17h.049a.69.69 0 0 0-.049.24c0 1.8 7.81 3.25 17.43 3.25 9.62 0 17.43-1.45 17.43-3.25a.69.69 0 0 0 0-.24z'%3E%3C/path%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'stnear.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Octopus Network Token',\n symbol: 'OCT',\n icon:\n \"data:image/svg+xml,%3Csvg version='1.1' id='O' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 113.39 113.39' style='enable-background:new 0 0 113.39 113.39;' xml:space='preserve'%3E%3Cstyle type='text/css'%3E .st0%7Bfill:%23014299;%7D .st1%7Bfill:%23FFFFFF;%7D %3C/style%3E%3Ccircle class='st0' cx='56.69' cy='56.69' r='56.69'/%3E%3Cg%3E%3Cpath class='st1' d='M44.25,59.41c-1.43,0-2.59,1.16-2.59,2.59v20.28c0,1.43,1.16,2.59,2.59,2.59c1.43,0,2.59-1.16,2.59-2.59V62 C46.84,60.57,45.68,59.41,44.25,59.41z'/%3E%3Cpath class='st1' d='M56.69,59.41c-1.45,0-2.62,1.17-2.62,2.62v26.47c0,1.45,1.17,2.62,2.62,2.62s2.62-1.17,2.62-2.62V62.02 C59.31,60.58,58.14,59.41,56.69,59.41z'/%3E%3Cpath class='st1' d='M79.26,78.87c-0.33,0.15-0.64,0.28-0.95,0.38c0,0-0.01,0-0.01,0c-0.59,0.19-1.13,0.29-1.63,0.31h-0.06 c-1,0.03-1.84-0.27-2.59-0.75c-0.49-0.32-0.91-0.73-1.25-1.23c-0.3-0.43-0.53-0.93-0.71-1.51c0-0.01-0.01-0.02-0.01-0.03 c-0.22-0.74-0.34-1.61-0.34-2.59V62.02c0-1.45-1.17-2.62-2.62-2.62c-1.45,0-2.62,1.17-2.62,2.62v11.43c0,4.5,1.64,8.03,4.63,9.96 c1.5,0.97,3.21,1.45,5.04,1.45c1.68,0,3.45-0.41,5.25-1.22c1.32-0.59,1.9-2.14,1.31-3.46C82.13,78.86,80.57,78.27,79.26,78.87z'/%3E%3Cpath class='st1' d='M68.33,45.9c0-2.15-1.75-3.9-3.9-3.9c-2.15,0-3.9,1.75-3.9,3.9s1.75,3.9,3.9,3.9 C66.58,49.8,68.33,48.05,68.33,45.9z'/%3E%3Cpath class='st1' d='M48.96,41.99c-2.15,0-3.9,1.75-3.9,3.9s1.75,3.9,3.9,3.9s3.9-1.75,3.9-3.9S51.11,41.99,48.96,41.99z'/%3E%3Cpath class='st1' d='M56.69,22.28c-15.17,0-27.52,12.34-27.52,27.52v15.09c0,1.46,1.18,2.64,2.64,2.64s2.64-1.18,2.64-2.64V49.8 c0-12.26,9.98-22.24,22.24-22.24c12.26,0,22.24,9.98,22.24,22.24v15.09c0,1.46,1.18,2.64,2.64,2.64s2.64-1.18,2.64-2.64V49.8 C84.21,34.62,71.87,22.28,56.69,22.28z'/%3E%3C/g%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'oct.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Debio',\n symbol: 'DBIO',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIxOTAgOTcgNDIwIDQyMCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgODAwIDgwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZGVmcz48c3R5bGU+LnN0MHtmaWxsOiMzNjM2MzZ9LnN0M3tmaWxsOiNmZjU2ZTB9PC9zdHlsZT48L2RlZnM+PGNpcmNsZSBjbGFzcz0ic3QzIiBjeD0iNDAwIiBjeT0iMzA3LjM5IiByPSIyMDguNTgiLz48cGF0aCBkPSJNNDczLjk5IDIxMS4zczIuMzQgNTYuMjUtNzcuMzQgOTguNDMtNzAuMzEgOTMuNzQtNzAuMzEgOTMuNzQiIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiNlNmU2ZTY7c3Ryb2tlLXdpZHRoOjM3LjQ5NzU7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MTAiLz48cGF0aCBkPSJNMzI2LjAxIDIxMS4zcy0yLjM0IDU2LjI1IDc3LjM0IDk4LjQzIDcwLjMxIDkzLjc0IDcwLjMxIDkzLjc0IiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojZmZmO3N0cm9rZS13aWR0aDozNy40OTc1O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjEwIi8+PGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iNDAwIiBjeT0iMjE2LjQyIiByPSIyMC40OSIvPjxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjQwMCIgY3k9IjM5OC4zNiIgcj0iMjAuNDkiLz48dGV4dCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMzYuMzQyIDY1OC4wNzUpIiBjbGFzcz0ic3QzIiBzdHlsZT0id2hpdGUtc3BhY2U6cHJlO2ZvbnQtc2l6ZToxMTIuNDkyNXB4O2ZvbnQtZmFtaWx5OidBcnRlZ3JhU2Fucy1TZW1pQm9sZCciPkRlQmlvPC90ZXh0Pjwvc3ZnPg==',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'dbio.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Game GEM!!',\n symbol: 'gGEM',\n icon: null,\n reference: null,\n reference_hash: null,\n decimals: 4,\n id: 'gem.thegame.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Game Gold!!',\n symbol: 'gGOLD',\n icon: null,\n reference: null,\n reference_hash: null,\n decimals: 2,\n id: 'gold.thegame.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Game Elixir!!',\n symbol: 'gELXR',\n icon: null,\n reference: null,\n reference_hash: null,\n decimals: 2,\n id: 'elixir.thegame.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'USN',\n symbol: 'USN',\n icon:\n \"data:image/svg+xml;charset=UTF-8,%3Csvg width='38' height='38' viewBox='0 0 38 38' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='38' height='38' rx='19' fill='black'/%3E%3Cpath d='M14.8388 10.6601C14.4203 10.1008 13.6748 9.86519 12.9933 10.0768C12.3119 10.2885 11.85 10.8991 11.85 11.5883V14.7648H8V17.9412H11.85V20.0589H8V23.2353H11.85V28H15.15V16.5108L23.1612 27.2165C23.5797 27.7758 24.3252 28.0114 25.0067 27.7997C25.6881 27.5881 26.15 26.9775 26.15 26.2882V23.2353H30V20.0589H26.15V17.9412H30V14.7648H26.15V10.0001H22.85V21.3658L14.8388 10.6601Z' fill='white'/%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'usdn.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Learn NEAR Club',\n symbol: 'LNC',\n icon:\n 'data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/4gIoSUNDX1BST0ZJTEUAAQEAAAIYAAAAAAQwAABtbnRyUkdCIFhZWiAAAAAAAAAAAAAAAABhY3NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlkZXNjAAAA8AAAAHRyWFlaAAABZAAAABRnWFlaAAABeAAAABRiWFlaAAABjAAAABRyVFJDAAABoAAAAChnVFJDAAABoAAAAChiVFJDAAABoAAAACh3dHB0AAAByAAAABRjcHJ0AAAB3AAAADxtbHVjAAAAAAAAAAEAAAAMZW5VUwAAAFgAAAAcAHMAUgBHAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFhZWiAAAAAAAABvogAAOPUAAAOQWFlaIAAAAAAAAGKZAAC3hQAAGNpYWVogAAAAAAAAJKAAAA+EAAC2z3BhcmEAAAAAAAQAAAACZmYAAPKnAAANWQAAE9AAAApbAAAAAAAAAABYWVogAAAAAAAA9tYAAQAAAADTLW1sdWMAAAAAAAAAAQAAAAxlblVTAAAAIAAAABwARwBvAG8AZwBsAGUAIABJAG4AYwAuACAAMgAwADEANv/bAEMAAwICAgICAwICAgMDAwMEBgQEBAQECAYGBQYJCAoKCQgJCQoMDwwKCw4LCQkNEQ0ODxAQERAKDBITEhATDxAQEP/bAEMBAwMDBAMECAQECBALCQsQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEP/AABEIACAAIAMBIgACEQEDEQH/xAAZAAADAAMAAAAAAAAAAAAAAAAABgcDBAj/xAAjEAACAgICAgMAAwAAAAAAAAABAgMEBQYAEQcSEyExFCJB/8QAGAEAAgMAAAAAAAAAAAAAAAAAAQMABwj/xAAlEQACAQMDBAIDAAAAAAAAAAABEQMAAgQxQWESIZHwUXGBwfH/2gAMAwEAAhEDEQA/AOqOHNHN5vF67jnyuZtCtVSSKJpCjN00kixoOlBP27qPz/fv64qZDzBq+L8h2/Gt2rk0yVXFJlROK3tVlVhMwhEoPSzeteZgr+vsqMVJ9W6zZHBLKCbLSV38J+GKva+aONC8p/v+U88ORWv5t3fyTFTbwTpWPvxpjMfl8lc2O49SvCLldbENGMwLJ72vidWf7CxB4ifcSDqmaPseS2rXIMtmdYva9kRJLWuY632TDPE5jf436HyxFlJjlAAdCrADvrjZ8OXHt6pEOGGPhjUP3alxZUc9ys78oo/R0rD5E1O3u+oXdboZaPGWrD15oLctU2EikhnjlUtGHQuCYwCPZf394jZDwNc2pdht75uMF3LZ2ji4I72LxQpGhZoT25YLMKySzdN1aVSpJBCOD2shVa7w5IcyaC3ojKDegex1T2HbTtRkxYpruq8MpannbTc1EcB4D3jx3UxaeLPK1fFSpgcfhsxBkcH/AC6V+epWirR5CKFZ42gn+OPpv7uHCQq31GDymeP9XymnarTwed27JbPk0LzXcrfIElmeRy8jKgJEUfsxCRKSqIFUdgd8YuHDPmzZIUpB5QB4ZAZ9+BQhxIoC4wR+SvDXvNf/2Q==',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'lnc.factory.tokenhub.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Wrapped BTC',\n symbol: 'WBTC',\n icon:\n \"data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none'%3E%3Ccircle fill='%23201A2D' cx='16' cy='16' r='16'/%3E%3Cg fill='%23FFF'%3E%3Cpath d='M22.818 9.586l-.6.6a8.494 8.494 0 010 11.464l.6.6a9.352 9.352 0 000-12.678v.014zM10.2 9.638a8.494 8.494 0 0111.464 0l.6-.6a9.352 9.352 0 00-12.678 0l.614.6zm-.562 12.018a8.494 8.494 0 010-11.458l-.6-.6a9.352 9.352 0 000 12.678l.6-.62zm12.018.554a8.494 8.494 0 01-11.464 0l-.6.6a9.352 9.352 0 0012.678 0l-.614-.6zm-1.942-8.286c-.12-1.252-1.2-1.672-2.566-1.8V10.4h-1.056v1.692h-.844V10.4H14.2v1.736h-2.142v1.13s.78-.014.768 0a.546.546 0 01.6.464v4.752a.37.37 0 01-.128.258.366.366 0 01-.272.092c.014.012-.768 0-.768 0l-.2 1.262h2.122v1.764h1.056V20.12h.844v1.73h1.058v-1.744c1.784-.108 3.028-.548 3.184-2.218.126-1.344-.506-1.944-1.516-2.186.614-.302.994-.862.908-1.778zm-1.48 3.756c0 1.312-2.248 1.162-2.964 1.162v-2.328c.716.002 2.964-.204 2.964 1.166zm-.49-3.28c0 1.2-1.876 1.054-2.472 1.054v-2.116c.596 0 2.472-.188 2.472 1.062z'/%3E%3Cpath d='M15.924 26.852C9.89 26.851 5 21.959 5 15.925 5 9.892 9.892 5 15.925 5c6.034 0 10.926 4.89 10.927 10.924a10.926 10.926 0 01-10.928 10.928zm0-21c-5.559.004-10.062 4.513-10.06 10.072.002 5.559 4.51 10.064 10.068 10.064 5.559 0 10.066-4.505 10.068-10.064A10.068 10.068 0 0015.924 5.852z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 8,\n id: 'wbtc.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Huobi BTC',\n symbol: 'HBTC',\n icon: null,\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'hbtc.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Celo Dollar',\n symbol: 'cUSD',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiBoZWlnaHQ9IjEwMCIgdmlld0JveD0iMCAwIDEwMCAxMDAiIHdpZHRoPSIxMDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0ibTEwMCA1MGMwLTI3LjYxNDItMjIuMzg1OC01MC01MC01MHMtNTAgMjIuMzg1OC01MCA1MCAyMi4zODU4IDUwIDUwIDUwIDUwLTIyLjM4NTggNTAtNTB6IiBmaWxsPSIjNDVjZDg1Ii8+PGcgZmlsbD0iI2ZmZiI+PHBhdGggZD0ibTY5Ljg4MDUgNjIuNjQzOGMtMS41NjcxIDMuMzkzMS0zLjkzNzUgNi4zNTMyLTYuOTA2MSA4LjYyNDEtMi45Njg1IDIuMjcwOC02LjQ0NTggMy43ODQxLTEwLjEzMDcgNC40MDg3LTMuNjg1LjYyNDYtNy40NjY3LjM0MTctMTEuMDE3Ny0uODI0MS0zLjU1MTEtMS4xNjU4LTYuNzY0Ni0zLjE3OTQtOS4zNjIzLTUuODY2Ni0yLjU5NzgtMi42ODcxLTQuNTAxNS01Ljk2NjktNS41NDY1LTkuNTU1NC0xLjA0NDktMy41ODg1LTEuMTk5Ni03LjM3NzUtLjQ1MDctMTEuMDM5My43NDg5LTMuNjYxNyAyLjM3ODktNy4wODU3IDQuNzQ4OS05Ljk3NTggMi4zNzAxLTIuODkgNS40MDg3LTUuMTU4OSA4Ljg1MjktNi42MTAzbDIuMjY2OCA1LjM3OTJjLTIuNTcgMS4wODMxLTQuODM3NSAyLjc3NjEtNi42MDYgNC45MzI3LTEuNzY4NSAyLjE1NjUtMi45ODQ4IDQuNzExNS0zLjU0MzYgNy40NDM5LS41NTg5IDIuNzMyNC0uNDQzNSA1LjU1OTguMzM2MyA4LjIzNzYuNzc5OCAyLjY3NzcgMi4yMDAzIDUuMTI1MSA0LjEzODggNy4xMzAyIDEuOTM4NCAyLjAwNTIgNC4zMzYzIDMuNTA3OCA2Ljk4NjEgNC4zNzc3czUuNDcxNyAxLjA4MSA4LjIyMTUuNjE0OWMyLjc0OTctLjQ2NjEgNS4zNDQ0LTEuNTk1MyA3LjU1OTUtMy4yODk4IDIuMjE1Mi0xLjY5NDUgMy45ODQtMy45MDMzIDUuMTUzNC02LjQzNTNsNS45MTg5LjMwNDJ6Ii8+PHBhdGggZD0ibTU2LjEwNjEgMjQuNXYtNGg0LjUwMDV2NGMyIDAgNS4xNjY3LjY2NjcgNi41IDF2NC41Yy0xOS0zLTE1LjUwMTEgMy44NDYyLTggNSA2LjcyMTcgMS4wMzM5IDExIDIgMTEuNSA5IC40IDUuNi01LjgzMzMgNy42NjY3LTkgOHYzLjVoLTV2LTMuNWMtMi40IDAtNi42NjY3LTEuNjY2Ny04LjUtMi41di01LjVjNC41IDIuNSAxNyA0LjUgMTcgMHMtMTYuNTAxMS0zLTE4LjAwMDUtMTFjLTEuMDAyMy01LjM0NzUgNS4zMzMzLTcuODMzMyA5LTguNXoiLz48L2c+PC9zdmc+',\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'cusd.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'LiNEAR',\n symbol: 'LINEAR',\n icon:\n \"data:image/svg+xml,%3Csvg width='40' height='40' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M30.74 28.78c.21-.36.32-.78.32-1.21v-6.33c0-.24-.06-.46-.17-.66-.12-.21-.28-.38-.48-.49l-16.86-9.77c-.35-.2-.73-.31-1.13-.32-.64 0-1.24.26-1.69.72-.45.45-.7 1.07-.71 1.71v6.39c0 .24.06.47.18.67.11.21.28.37.48.48l16.82 9.71c.36.22.77.32 1.19.32.41 0 .82-.12 1.19-.33.36-.21.66-.52.86-.89zm.32-16.27c0-.42-.1-.84-.29-1.21-.2-.38-.49-.7-.85-.93-.36-.22-.78-.34-1.21-.34-.42 0-.84.12-1.21.34l-4.97 2.81c-.04.02-.08.07-.1.12-.03.04-.04.1-.04.14 0 .06.01.11.04.16.02.04.06.08.1.1l8.05 4.62c.05.02.1.04.15.04.05 0 .1-.02.15-.05.04-.02.08-.06.11-.11.02-.04.04-.1.03-.15l.04-5.54zM10.05 27.5c-.01.43.08.86.28 1.23.2.38.49.7.85.93.36.22.78.34 1.2.34.42 0 .83-.12 1.2-.34l4.92-2.85c.04-.02.08-.06.1-.11.03-.04.05-.1.05-.15 0-.05-.02-.11-.05-.15-.02-.05-.06-.09-.1-.12l-8.05-4.6c-.05-.03-.09-.04-.15-.04-.05 0-.1.01-.15.04-.05.02-.08.07-.11.12-.02.04-.04.09-.04.14l.05 5.56z' fill='url(%23paint0_linear_186_370)'/%3E%3Cdefs%3E%3ClinearGradient id='paint0_linear_186_370' x1='11.135' y1='11.152' x2='30.145' y2='30.457' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%231BB3CC'/%3E%3Cstop offset='1' stop-color='%23824ACC'/%3E%3C/linearGradient%3E%3C/defs%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'linear-protocol.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Staked NEAR',\n symbol: 'STNEAR',\n icon:\n \"data:image/svg+xml,%3Csvg width='96' height='96' viewBox='0 0 96 96' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='96' height='96' rx='48' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M48.0006 20L41.2575 26.7431L48.0006 33.4862L54.7437 26.7431L48.0006 20ZM37.281 30.7188L30.7144 37.2853L47.9998 54.5707L65.2851 37.2853L58.7186 30.7188L47.9998 41.4376L37.281 30.7188ZM26.7384 41.261L19.9953 48.0041L47.9995 76.0083L76.0037 48.0041L69.2606 41.2611L47.9995 62.5221L26.7384 41.261Z' fill='%23231B51'/%3E%3C/svg%3E\",\n reference: 'https://metapool.app',\n reference_hash: null,\n decimals: 24,\n id: 'meta-v2.pool.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'NearX',\n symbol: 'NearX',\n icon:\n \"data:image/svg+xml,%0A%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M24 12C24 18.6274 18.6274 24 12 24C5.37258 24 0 18.6274 0 12C0 5.37258 5.37258 0 12 0C18.6274 0 24 5.37258 24 12ZM17.1421 21.3848L21.3848 17.1421L19.3669 15.1243C18.5576 17.0303 17.0303 18.5576 15.1243 19.3669L17.1421 21.3848ZM9.43294 19.5793C7.45322 18.909 5.82115 17.4848 4.87848 15.6484L3.24264 17.2843L7.48528 21.5269L9.43294 19.5793ZM4.63306 8.8757C5.44239 6.96975 6.96975 5.44239 8.8757 4.63306L7.24264 3L3 7.24264L4.63306 8.8757ZM15.6484 4.87848L17.3848 3.14214L21.6274 7.38478L19.5793 9.43294C18.909 7.45322 17.4848 5.82115 15.6484 4.87848Z' fill='black'/%3E%3Cpath d='M8.00119 11.9921C8.00119 11.0268 8.00119 10.0615 8.00119 9.09612C8.00119 8.50505 8.16497 8.1743 8.56285 8.05781C8.97778 7.93628 9.40619 7.97917 9.79565 8.45228C11.3533 10.3447 12.9343 12.218 14.5092 14.0959C14.5692 14.1676 14.6117 14.3122 14.734 14.2626C14.8496 14.2157 14.7858 14.0805 14.786 13.9878C14.7904 12.6326 14.7898 11.2774 14.7868 9.92226C14.7868 9.83668 14.838 9.7162 14.7271 9.67372C14.6401 9.64029 14.5824 9.74185 14.522 9.79358C14.0492 10.1981 13.5804 10.6073 13.1088 11.0133C13.0208 11.089 12.9332 11.2118 12.8002 11.1012C12.6657 10.9894 12.7696 10.8872 12.8364 10.7881C13.3547 10.0186 13.8728 9.24898 14.3909 8.47919C14.6656 8.07085 15.0079 7.92282 15.4056 8.04141C15.786 8.15475 15.9986 8.48592 15.9992 8.97668C16.0007 10.0905 15.9996 11.2045 15.9996 12.3183C15.9996 13.2094 16.0003 14.1005 15.9994 14.9916C15.999 15.4826 15.8137 15.798 15.4512 15.9324C15.0256 16.0901 14.5767 15.9683 14.2734 15.6058C12.6823 13.705 11.0924 11.8029 9.50198 9.90144C9.46029 9.85161 9.42303 9.7961 9.37377 9.75489C9.28998 9.68487 9.21967 9.68108 9.21314 9.81797C9.20999 9.88273 9.21188 9.94791 9.21188 10.0129C9.21188 11.3496 9.21062 12.6862 9.2142 14.0227C9.21441 14.1186 9.15609 14.2557 9.26114 14.3038C9.38093 14.3587 9.45061 14.2178 9.52998 14.1503C9.98259 13.7651 10.4291 13.3728 10.8805 12.9859C10.9729 12.9066 11.0626 12.7651 11.208 12.8973C11.3402 13.0176 11.2213 13.1196 11.159 13.2127C10.6323 13.9989 10.1032 14.7837 9.57145 15.5663C9.32788 15.9248 8.9881 16.056 8.61085 15.9488C8.23739 15.8428 8.00498 15.5246 8.00287 15.0827C7.99761 14.0523 8.00119 13.022 8.00119 11.9917V11.9921Z' fill='white'/%3E%3C/svg%3E\",\n reference: 'https://near.staderlabs.com',\n reference_hash: null,\n decimals: 24,\n id: 'v2-nearx.staderlabs.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'refLove Finance Token',\n symbol: 'refLove',\n icon:\n 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDIxLjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCAyODggMzI0IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAyODggMzI0OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Cgkuc3Qwe2ZpbGw6IzAwQzA4Qjt9Cjwvc3R5bGU+CjxnPgoJPHBhdGggZD0iTTE3My40LDE5MS40VjI2OEgyNTBMMTczLjQsMTkxLjR6IE0xMDcuMiwxMjUuMmwzMCwzMGwzMC4zLTMwLjNWNjkuMmgtNjAuNFYxMjUuMnogTTEwNy4yLDE1Mi4zVjI2OGg2MC40VjE1MmwtMzAuMywzMC4zCgkJTDEwNy4yLDE1Mi4zeiBNMTc3LjEsNjkuMmgtMy43VjExOUwyMTIsODAuNUMyMDEuOCw3My4yLDE4OS42LDY5LjIsMTc3LjEsNjkuMnogTTM4LDE3NS41VjI2OGg2My4zVjE0Ni40bC0xNy4xLTE3LjFMMzgsMTc1LjV6CgkJIE0zOCwxNDguNWw0Ni4yLTQ2LjJsMTcuMSwxNy4xVjY5LjJIMzhWMTQ4LjV6IE0yMzYuOCwxMjguOUwyMzYuOCwxMjguOWMwLTEyLjUtMy45LTI0LjctMTEuMi0zNC44bC01Mi4xLDUydjQyLjRoMy43CgkJQzIxMC4xLDE4OC41LDIzNi44LDE2MS44LDIzNi44LDEyOC45eiIvPgoJPHBvbHlnb24gY2xhc3M9InN0MCIgcG9pbnRzPSIyMTAuMiw1NiAyNTAsOTUuOCAyNTAsNTYgCSIvPgo8L2c+Cjwvc3ZnPgo=',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'v010.refve.testnet',\n },\n {\n decimals: 18,\n icon:\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAs3SURBVHhe7Z1XqBQ9FMdFsYu999577wUfbCiiPoggFkQsCKJP9t57V7AgimLBjg8qKmLBXrD33hVUEAQ1H7+QXMb9Zndnd+/MJJf7h8Pu3c3Mzua3yTk5SeZmEZkySplADFMmEMOUCcQwZQggHz58EHfu3FF/2a0MAWTjxo2iWbNm6i+7ZT2QW7duiUWLFolixYqJQ4cOqVftlfVAZs6cKdauXSuqV68uKlWqpF61V1YDoUXMmTNHrFu3TtSoUUNCmTBhgnrXTlkL5Nu3b2Ly5MmyuwJIzZo1RaNGjUTx4sXFu3fvVCn7ZC2QVatWiQULFvwPSL169USnTp1UKftkJZCbN2+KGTNmSBiLFy/+BwhWoUIFsX//flXaLlkJZPr06WkwIoE0btxYNGzYUFSsWFGVtkvWATlw4IB05BqGGxAMBz9u3Dh1lD2yCsjXr1/THHk8IDwvVaqUeP36tTraDlkFZOXKldKRO2HEAoKD79ixozraDlkD5Pr16/848nhANBQc/N69e9VZzJc1QCIduRcgGA4eKLbICiD79u37nyN3WiwgvMZ7Y8eOVWczW8YDwZFPmTIlauvA4gHhsUSJEuLFixfqrObKeCArVqxwdeROiwUE43UcfNu2bdVZzZXRQK5duyYduRsEp8UDog1fsnPnTnV2M2U0kFiO3GlegeDgy5cvr85upowFQqg6d+5cVwCR5hUI71NuzJgx6lPMk5FAPn365Doij2ZegWCUIUX/9OlT9WlmyUggy5Yti+vInZYIEAwH37JlS/VpZsk4IJcvX5bTsl5bB5YoEMqRDd62bZv6VHNkHJBp06YlBANLFAiGgy9btqz6VHNkFJBdu3Z5duROSwYIxjEjRoxQn26GjAHy8ePHuCPyaJYsEMozgn/48KG6ivBlDJAlS5Yk5MidlgqQ+vXri+bNm6urCF9GALl48aJ05G6V7cWSBYJxDOu5Nm/erK4mXBkBJBlH7rRUgGAmOfjQgZBbSsaROy1VIBjHDxs2TF1VeAoVyPv37+WI3K2SE7H0AMKxJUuWFHfv3lVXF45CBZKKI3daegDBcPBNmzZVVxeOQgNy/vz5hEfkbsbxAGFtb6pAOL5y5cpye0NYCg1Iqo5c29KlS2WEVKdOHdGkSZOUoeDgS5cura4yeIUCZMeOHWLevHkpASEBScvAB/Xs2VMUKVJE1K1bV44pUgHDcbVq1RJDhgxRVxusAgfy5s0bMXXq1IRgOMsuX75c7gcZP368aN++vez3W7VqJfLnzy8KFCggU+tUKNncZMFwDA6eNcRBK3AgCxculOas8HiG82duffXq1WLkyJGiRYsWokGDBrI1UPHMlQOjaNGisqUUKlRIPrKclLKA0RUdWfnRDNCUD1qBAjl79qyYNWuWa6VHGq0CEGw7oHsaNGiQrCBMg9DmBKJNgylYsKAciQOFfYhUtlcwHEe3GKQCA/Lnzx/PyUMc9Zo1a+SAsV+/fvLXSgXxa3eCiAXECaZw4cISDPPpGijniweG93HwXHtQCgwIk0E4cjcAGhItAf8AuG7dukknzbgAENFgYLGAaNNgKMcibGYNdXdGxUeDgz8aOHCg+hb+KxAgr169kpUcCUKb01GzOJrKonuJB0KbFyBOAw4thgCgdu3aaWAA4AYGB8/a4iAUCBBG405Hrv2Dm6MGhFulx7JEgWjTYHisVq2a/GxapBMGgLguLAj5DuTMmTP/OHLtqPETdAW6u4h01IlYskC06e6MIICROlA0GH19vM51+y1fgfz+/TvNkWtHjR/p27ev7JboJrx2S7EsVSAYUDCgcC4CAEbtXJsGg4PnO/kpX4Fs3bpVwiB0BEz37t09O+pELD2AOE23GM5ZpkwZGeVxraRnBgwYoL6dP/INCCNyfAeOukOHDmmZVLcKTdXSG4jTNBidAaDlXLlyRX3L9JdvQPr06SObvHbU6dUa3MxPINp0d5Y3b16RJ08e9S3TX74Befz4sejcubOoWrWqdNi2AgEEj8DIkiWLdO4PHjxQ3zL95asPQQcPHpSTR/gOv6D4BUQ7+uzZs4usWbOK7du3q2/ln3wHosU+j3LlysmIxa1SUzG/gOTLl0+2ilGjRqlv4b8CA4K+fPkievXqJZt9MgPAaJbeQHT3hA9kJX6QChSI1smTJ+U4RKct3Co5EUsvIHRP2bJlEzlz5hRHjhxRVxusfANy4cIF9Sy6GLnrAZhbRXu1VIEAguiJVuHlfltbtmxRz9JfvgHhxpQMBt++fatecdfPnz/lYIvtAcmOU1IBQi4LEG3atJHXEkssEWK0fvv2bfVK+svXLosJKW4AQ3QSb07h6tWr0uEz+Eq0G0sGCAM+IieOI98WS3///hVDhw4VOXLkkAlRP+W7D9mwYYNMLtJa4n1xRBqe3bIMKL2CSQQI3VPu3Lllq+C64olsNPMnBCJdunRRr/qnQJw6IS/pdypg/vz5cff38YscPny49C9eujGvQCgDiB49eqhPii4WgJPuAQQ+Lqi1v4EAefToUVrWFzCsyWIx2q9fv1QJd92/f1+0bt1aLlaINdqPB4TuCRD80rmtbCzhR8hG66SizvKeOHFClfBXgQBBe/bskfcr0dO1pOFZU3Xs2DFVIrqY/q1SpUpa1tUrELqnXLlySRhe5jKYw2d2kHBcz4OwIjLIXVaBAUF0V5Ezh7Nnz5Z27949VSq6CBDoOphHiQYECDyyTgsQ/fv3V0dH1/Hjx2V6h7wbEAguMH4ABBlBKlAgbneE090Yd21Yv369+P79uyrtrpcvX/6TtIwEorsnlvA8efJEHeUuRuFdu3aVKR2CCCcMnpNyf/78uSodjAIFgk6fPh11txQtCGBebhlO0pLuhKSlBkISEBhMjMXTxIkTZYVzvBOEhgFQriloBQ4EEUrGWhKEryEyu3HjhjoiuggWqDxAeOnrufcW5QkUIkFoGEBiUi0MhQKEeel4q995DyjcZ/Hz58/qSHfRrcTbSUuZdu3ayTEOYawbDIz3iLDiRYB+KRQgiP/3waJrNxjagMI0MK2AKC1ZjR49Wm5/JqEZDQTGe8A4fPiwOjJ4hQYEsS3By/5CwFCOVsWAzatIAhKVed3MQznWEIepUIEg/IUzFI5lgCEgYG1XrKQlyT9CY3wFXZBb5UcaURZ+JWyFDoSs8KRJk2L6E6dRDoB0YyQtneukSGAOHjxYDu70KNut8iONckRcJvzbpNCBIAZmXrcpYBoekRpgyBQzhiE1wkDOKwiMsuSr6BJNkBFAENEU45DIyo9nwGGxNs44ERAY5QlxmQsxRcYAIcxMdKubtmS3RVOe7u3Hjx/qKsKXMUAQA0EiKbdKj2XJAiEC2717t/p0M2QUEETaw0so7LREgVCO8l4Sj0HLOCAIB+81FMYSAUIZQmGSkybKSCAs1I7MCseyRIEwaveSJwtDRgJBR48e9RwKewXC+0x0AdtUGQsEMSL3cnMaL0B4j1wWc/Qmy2ggzG/ruXg3ENq8AmHgyCSZyTIaCLp06VLce8DHA8LrrGDxMnEVtowHgjZt2hR1QguLB4R0Su/evdXZzJYVQJBe25UoELK4Nv1PQ2uAPHv2LKo/iQaEv0mNeFn4bYqsAYL4p5IsGfIChOfMb7Dp1CZZBQTRQiJDYTcgerrWNlkHhHVbkV1XJBAemXDirqe2yTog6Ny5c9LJayhOIBgrS1h1b6OsBIKocB0KO4FwtwVu7WSrrAWC9NouDYQsLstCbZbVQNjmwCwjQFjCwzTuqVOn1Lt2ymogiBk/PafOfbdsl/VAEEBs+gfEsZQhgDChxVKgjKAMASQjKROIYcoEYpgygRglIf4D6lp/+XognSwAAAAASUVORK5CYII=',\n name: 'Ether',\n reference: null,\n reference_hash: null,\n spec: 'ft-1.0.0',\n symbol: 'ETH',\n id: 'aurora',\n },\n {\n spec: 'ft-1.0.0',\n name: 'USDT',\n symbol: 'USDT',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 288 288'%3E%3Cg id='l' data-name='l'%3E%3Cpath d='M187.58,79.81l-30.1,44.69a3.2,3.2,0,0,0,4.75,4.2L191.86,103a1.2,1.2,0,0,1,2,.91v80.46a1.2,1.2,0,0,1-2.12.77L102.18,77.93A15.35,15.35,0,0,0,90.47,72.5H87.34A15.34,15.34,0,0,0,72,87.84V201.16A15.34,15.34,0,0,0,87.34,216.5h0a15.35,15.35,0,0,0,13.08-7.31l30.1-44.69a3.2,3.2,0,0,0-4.75-4.2L96.14,186a1.2,1.2,0,0,1-2-.91V104.61a1.2,1.2,0,0,1,2.12-.77l89.55,107.23a15.35,15.35,0,0,0,11.71,5.43h3.13A15.34,15.34,0,0,0,216,201.16V87.84A15.34,15.34,0,0,0,200.66,72.5h0A15.35,15.35,0,0,0,187.58,79.81Z'/%3E%3C/g%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'usdt.itachicara.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'USDC',\n symbol: 'USDC',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 288 288'%3E%3Cg id='l' data-name='l'%3E%3Cpath d='M187.58,79.81l-30.1,44.69a3.2,3.2,0,0,0,4.75,4.2L191.86,103a1.2,1.2,0,0,1,2,.91v80.46a1.2,1.2,0,0,1-2.12.77L102.18,77.93A15.35,15.35,0,0,0,90.47,72.5H87.34A15.34,15.34,0,0,0,72,87.84V201.16A15.34,15.34,0,0,0,87.34,216.5h0a15.35,15.35,0,0,0,13.08-7.31l30.1-44.69a3.2,3.2,0,0,0-4.75-4.2L96.14,186a1.2,1.2,0,0,1-2-.91V104.61a1.2,1.2,0,0,1,2.12-.77l89.55,107.23a15.35,15.35,0,0,0,11.71,5.43h3.13A15.34,15.34,0,0,0,216,201.16V87.84A15.34,15.34,0,0,0,200.66,72.5h0A15.35,15.35,0,0,0,187.58,79.81Z'/%3E%3C/g%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'usdc.itachicara.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Staked CORN',\n symbol: 'xCORN',\n icon:\n \"data:image/svg+xml,%3Csvg width='300' height='300' viewBox='0 0 300 300' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M150.43 32L99.7144 61.4389L150.43 90.8705L201.145 61.4389L150.43 32Z' fill='%235C65A5'/%3E%3Cpath d='M201.146 61.4388L150.431 90.8703L201.146 120.309L251.854 90.8703L201.146 61.4388Z' fill='%233B4274'/%3E%3Cpath d='M99.7152 61.4388L49 90.8703L99.7152 120.309L150.43 90.8703L99.7152 61.4388Z' fill='%233B4274'/%3E%3Cpath d='M150.43 90.8707L99.7144 120.31L150.43 149.749L201.145 120.31L150.43 90.8707Z' fill='%235C65A5'/%3E%3Cpath d='M99.7152 120.31L49 90.8707V149.749L99.7152 179.187V120.31Z' fill='%235C65A5'/%3E%3Cpath d='M150.43 149.748L99.7144 120.309V179.187L150.43 208.626V149.748Z' fill='%233B4274'/%3E%3Cpath d='M99.7152 179.187L49 149.748V208.626L99.7152 238.058V179.187Z' fill='%233B4274'/%3E%3Cpath d='M150.43 208.626L99.7144 179.187V238.057L150.43 267.496V208.626Z' fill='%235C65A5'/%3E%3Cpath d='M150.431 267.496L201.146 238.057L150.431 208.626V267.496Z' fill='%233B4274'/%3E%3Cpath d='M224.085 213.702L209.447 198.197L194.809 213.702H167.656L195.643 182.183L167.656 150.665H194.809L209.447 166.933L224.085 150.665H251.086L223.175 182.183L251.086 213.702H224.085Z' fill='%233B4274'/%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'xcorn.corndao.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Tether USD',\n symbol: 'USDt',\n icon:\n \"data:image/svg+xml,%3Csvg width='111' height='90' viewBox='0 0 111 90' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M24.4825 0.862305H88.0496C89.5663 0.862305 90.9675 1.64827 91.7239 2.92338L110.244 34.1419C111.204 35.7609 110.919 37.8043 109.549 39.1171L58.5729 87.9703C56.9216 89.5528 54.2652 89.5528 52.6139 87.9703L1.70699 39.1831C0.305262 37.8398 0.0427812 35.7367 1.07354 34.1077L20.8696 2.82322C21.6406 1.60483 23.0087 0.862305 24.4825 0.862305ZM79.8419 14.8003V23.5597H61.7343V29.6329C74.4518 30.2819 83.9934 32.9475 84.0642 36.1425L84.0638 42.803C83.993 45.998 74.4518 48.6635 61.7343 49.3125V64.2168H49.7105V49.3125C36.9929 48.6635 27.4513 45.998 27.3805 42.803L27.381 36.1425C27.4517 32.9475 36.9929 30.2819 49.7105 29.6329V23.5597H31.6028V14.8003H79.8419ZM55.7224 44.7367C69.2943 44.7367 80.6382 42.4827 83.4143 39.4727C81.0601 36.9202 72.5448 34.9114 61.7343 34.3597V40.7183C59.7966 40.8172 57.7852 40.8693 55.7224 40.8693C53.6595 40.8693 51.6481 40.8172 49.7105 40.7183V34.3597C38.8999 34.9114 30.3846 36.9202 28.0304 39.4727C30.8066 42.4827 42.1504 44.7367 55.7224 44.7367Z' fill='%23009393'/%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 6,\n id: 'usdtt.fakes.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Staked CORN',\n symbol: 'xCORN',\n icon:\n \"data:image/svg+xml,%3Csvg width='300' height='300' viewBox='0 0 300 300' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M150.43 32L99.7144 61.4389L150.43 90.8705L201.145 61.4389L150.43 32Z' fill='%235C65A5'/%3E%3Cpath d='M201.146 61.4388L150.431 90.8703L201.146 120.309L251.854 90.8703L201.146 61.4388Z' fill='%233B4274'/%3E%3Cpath d='M99.7152 61.4388L49 90.8703L99.7152 120.309L150.43 90.8703L99.7152 61.4388Z' fill='%233B4274'/%3E%3Cpath d='M150.43 90.8707L99.7144 120.31L150.43 149.749L201.145 120.31L150.43 90.8707Z' fill='%235C65A5'/%3E%3Cpath d='M99.7152 120.31L49 90.8707V149.749L99.7152 179.187V120.31Z' fill='%235C65A5'/%3E%3Cpath d='M150.43 149.748L99.7144 120.309V179.187L150.43 208.626V149.748Z' fill='%233B4274'/%3E%3Cpath d='M99.7152 179.187L49 149.748V208.626L99.7152 238.058V179.187Z' fill='%233B4274'/%3E%3Cpath d='M150.43 208.626L99.7144 179.187V238.057L150.43 267.496V208.626Z' fill='%235C65A5'/%3E%3Cpath d='M150.431 267.496L201.146 238.057L150.431 208.626V267.496Z' fill='%233B4274'/%3E%3Cpath d='M224.085 213.702L209.447 198.197L194.809 213.702H167.656L195.643 182.183L167.656 150.665H194.809L209.447 166.933L224.085 150.665H251.086L223.175 182.183L251.086 213.702H224.085Z' fill='%233B4274'/%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'xcorn.v1.corndao.testnet',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Tiptoken',\n symbol: 'TT',\n icon: null,\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'tiptoken.testnet',\n },\n];\n\nexport const DefaultMainnetTokenList = [\n {\n spec: 'ft-1.0.0',\n name: 'Wrapped NEAR fungible token',\n symbol: 'wNEAR',\n icon: null,\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'wrap.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'USD Coin',\n symbol: 'USDC',\n icon:\n \"data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none'%3E%3Ccircle cx='16' cy='16' r='16' fill='%232775C9'/%3E%3Cpath d='M15.75 27.5C9.26 27.5 4 22.24 4 15.75S9.26 4 15.75 4 27.5 9.26 27.5 15.75A11.75 11.75 0 0115.75 27.5zm-.7-16.11a2.58 2.58 0 00-2.45 2.47c0 1.21.74 2 2.31 2.33l1.1.26c1.07.25 1.51.61 1.51 1.22s-.77 1.21-1.77 1.21a1.9 1.9 0 01-1.8-.91.68.68 0 00-.61-.39h-.59a.35.35 0 00-.28.41 2.73 2.73 0 002.61 2.08v.84a.705.705 0 001.41 0v-.85a2.62 2.62 0 002.59-2.58c0-1.27-.73-2-2.46-2.37l-1-.22c-1-.25-1.47-.58-1.47-1.14 0-.56.6-1.18 1.6-1.18a1.64 1.64 0 011.59.81.8.8 0 00.72.46h.47a.42.42 0 00.31-.5 2.65 2.65 0 00-2.38-2v-.69a.705.705 0 00-1.41 0v.74zm-8.11 4.36a8.79 8.79 0 006 8.33h.14a.45.45 0 00.45-.45v-.21a.94.94 0 00-.58-.87 7.36 7.36 0 010-13.65.93.93 0 00.58-.86v-.23a.42.42 0 00-.56-.4 8.79 8.79 0 00-6.03 8.34zm17.62 0a8.79 8.79 0 00-6-8.32h-.15a.47.47 0 00-.47.47v.15a1 1 0 00.61.9 7.36 7.36 0 010 13.64 1 1 0 00-.6.89v.17a.47.47 0 00.62.44 8.79 8.79 0 005.99-8.34z' fill='%23FFF'/%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 6,\n id: 'a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Tether USD',\n symbol: 'USDT.e',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Ccircle cx='16' cy='16' r='16' fill='%2326A17B'/%3E%3Cpath fill='%23FFF' d='M17.922 17.383v-.002c-.11.008-.677.042-1.942.042-1.01 0-1.721-.03-1.971-.042v.003c-3.888-.171-6.79-.848-6.79-1.658 0-.809 2.902-1.486 6.79-1.66v2.644c.254.018.982.061 1.988.061 1.207 0 1.812-.05 1.925-.06v-2.643c3.88.173 6.775.85 6.775 1.658 0 .81-2.895 1.485-6.775 1.657m0-3.59v-2.366h5.414V7.819H8.595v3.608h5.414v2.365c-4.4.202-7.709 1.074-7.709 2.118 0 1.044 3.309 1.915 7.709 2.118v7.582h3.913v-7.584c4.393-.202 7.694-1.073 7.694-2.116 0-1.043-3.301-1.914-7.694-2.117'/%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 6,\n id: 'dac17f958d2ee523a2206206994597c13d831ec7.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Dai Stablecoin',\n symbol: 'DAI',\n icon:\n \"data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Ccircle fill='%23F4B731' fill-rule='nonzero' cx='16' cy='16' r='16'/%3E%3Cpath d='M9.277 8h6.552c3.985 0 7.006 2.116 8.13 5.194H26v1.861h-1.611c.031.294.047.594.047.898v.046c0 .342-.02.68-.06 1.01H26v1.86h-2.08C22.767 21.905 19.77 24 15.83 24H9.277v-5.131H7v-1.86h2.277v-1.954H7v-1.86h2.277V8zm1.831 10.869v3.462h4.72c2.914 0 5.078-1.387 6.085-3.462H11.108zm11.366-1.86H11.108v-1.954h11.37c.041.307.063.622.063.944v.045c0 .329-.023.65-.067.964zM15.83 9.665c2.926 0 5.097 1.424 6.098 3.528h-10.82V9.666h4.72z' fill='%23FFF'/%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '6b175474e89094c44da98b954eedeac495271d0f.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Wrapped Ether',\n symbol: 'WETH',\n icon: null,\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: 'c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: '1INCH Token',\n symbol: '1INCH',\n icon: null,\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '111111111117dc0aa78b770fa6a738034120c302.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Graph Token',\n symbol: 'GRT',\n icon: null,\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: 'c944e90c64b2c07662a292be6244bdf05cda44a7.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Skyward Finance Token',\n symbol: 'SKYWARD',\n icon:\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMAAAADACAMAAABlApw1AAAB+1BMVEUAAABWWLVmXbOiaJ9pXrJbWrVvX7NhXLRxYbNXWbWcaKffeILLb41lXbSCZbCkZ6N+ZbJcWrVgXLXTcYjlf33jfH7heYDieoCJZq5+ZLHAaJRoXrTgeIHFaZCZZ6iYZ6jcdYPmgX2oZ6GxZ5u7aJbRbImyaJzie3/Qa4n///94Y7ODZrGZaKnrjHpqX7XohX1kXbW1aJvFaZHacIWeaKfBaZTieoDgdoJ9ZbNzYrSTaKxvYLS9aJbQbIquaJ+jaKTTbYleW7XmgX3piHuyaJ25aJnJapDNa42paKCmaKLdc4PwnXXtk3iJZ6/skXlYWbWOZ63ypnPkfn7Lao6JZq/xonTXb4fzrHHulXfvmXf1snBhXLXvmneQZ632uW/75+b69fjXdY2HcLj67/GahML+9O385tXpi4T2296AabXvnn3chJn1t4TjmqrafJL3wo68rNaSe72bcLDxqIffjqH0tZfp3+73wp/ohoHy7PWtir73ybfuqKb1s3mnk8n62cGmfrbmpbTsn5zqlpTg1enxxcnyqHz00NSync3yuLOicKzpj4v4v3m4k8H5y5mgd7TtmofUxuDrtsLeeInljpjwqZPLudn0r3zEo8rCh7D61KzjgIbTjauRcbTjho7WrcnSeZitd63KfaLXnLi1gbG5cKHEcpuvbqPjxNjN3AFJAAAAKXRSTlMA71IjE7A5ZcbT8kw6oXlU8ol5YezgsHOi4ansne3iyorQrIt01eTFwdYInfkAABWHSURBVHja7JY9b9pQFIax8QceXMms+QUJVZUxgYkfgNKBLYqEIpZuNoMlM1gMHqxKCLGgLPmvPb4GH/vcD9vBBIa+pKaly/Oc99xLev9DY1i67bmOo1XjOK5n65bRu+UYumc62osqmmN6+k1aWLbpEFiVhd3v3VBg8if4qeAljnMrTRi2qZ3Ys8AbvpekBCaaaV/dQc/op/Vh/ODBO+i968XytGnLCCQ0z+pdJbY5/UpETVyhBmPo8Giv01eaplU4dueIanwNqY95fIQfPvAf6KKqQhv2vi0n/By8acQSV1Cw7xg7R97eAnv4xkXSHQn8L/aHvCQSEEkPzoVvpL4rpYcHEJfCPsieTarAFtxLfrcNRei/EFwVoUTZ4FSDdrE9sgaEvX1oHdkVxW+SeZnf9IaE/YyoemC5wH3UH5SWRpwJn+xDHh+rQAdiYHZ9EnSkr+cWmfAeRIE4aHqn/J54cSZtI5PAGtDB6w7fYOtTg/4sC29Rr9DtGll3BL6Wu16E3EyiFjr7VrMr+HXsD8e3B4WE2qG8R3oXt6eaHsnFQRW1BDpgDZ3cpy5PT7gRVRGqISyC/3Y7/yibCno1cL0HpyBapBe3C36eXjTzJ3jBE36Kh9pB3ALdI/MM/gHiE3gCfoIv5w9JVUhaA38UzLP46ezJ4BG8wv4OCYJgWQT+AR+BhdwBW+jKYMDhC+ZOM8rggTyO09QvJU3jGDxA4qlW4REVzjEwK7vD7zvPPgJ6Bp/6hySMFot7zCIKk72fxsuAFCFxqCp85SS7Ewk/HfyoCNDn8NG9JItw78fHHjBqBWbgtf/+QnoKT+if2AuS4fuHEOcuTrSHHmoVqIHdkl9Hfjy2yI6jZ88jfuonKnrsIfGVCvQoMAO9Fb+F9MK1H5Gw6SN+fUI/DsBApUBL6LfgN+6K1cfhIzyP/xkgflOFdHlUQAtiACkZaG0u0Amhf6jsfJEZ+5m/fy7TQ3TfMot9vAQDdQt4oba5TD3cngo+23mkZ4/5fJaNP2yDjnsEJTxBKiWgAS1h2PQA4/hlw5/Ba84yY/w4/rYlsDWCkBbEBlazA4DjR34cfr41R3rgz9YHt79tEjAYjSQt0JPQ8BgMKD6kPPv5iT7Lb+DfI3/7hIUBpPgdV1ZCk2PwA/kF1w7CH/l3yH+uAbbwTPYIDexa/j69ecqrg/TADgH+WLk/UZ56g0Ihj7SEV6N2geTjR3rAZxnv1lL+KDmk23WebXrYh1LRZJkJ0BYkF+qgboHI9OnwEf7t7W28Wn9E4qnut+vNZrdb5dntNpv11k8kBocgw6ctSNZIvUQGjr+yPWT2jH48Xm3SUDjSj/UG2H/mGbOAxWYtOS9RMBuxiBS4LVIKuIhPxl+hz5myBRJNH/D/MnqGj39ZrUAhETXwyQRkLZAOXAW/JcLH3SnTswL+MV4+r01FQRSGtNoqWH+sLIKuRTfWFCW06kKTtlAQKu7EhGwCISIlFFJcJGAJBEJpK9JgtEmapv0znUxect6dmXtfj7pT+L6ZM/dZo0D5I8InXgQirPC9pm/g7/an2Qpg4NYIBoHP2TL4MX2bnoAO20fG+OutVjqdfp4m3rShcLhPtZP8H3lKs5mZO4DBLS//QsT/zB0/ugN6Cl1wXvG364QvQiIxld1626nR0Zh/GwZQ8BqkfAL3MH5j+hkHnxeg+fvgVxYwwC3vfa/vZrbJAAp8Cs6DKh+jR94n1GmPOXxMsqUvoHbab711IixgMDM+3M18pEwVcAmhU17wLECNX3Ufj0q6pZ+g30Pw+zzYfdqin/vEn8l8gQF6FDKwV7Ck5q/wp6FCpPvtPfmaDPubm2836Q/9CllMDY4m/HEFGKBGxC8NFswF6PHb5WGI1lCecK1N/FYMiVZ9//Tnaf2Qv3NKIXTK/hUs4UcWjF9Pf4YwlA26Gl5uuLE1Jv+81Tps8fcCCvYSbIOUtQC0B+VX0+cQRr99Jb5g7f6GN0IC92Ao4BJe+w30tyCFb1fED3wxfWZQJ7DXudx4I2OsAwpxBxiYNdIG6nO86MzfGj/oKZv905pqEMB9JoaDayCW4G/RDcE/J8YfxCeGDXXDp30mfR+LkFBlwifOXEJ4B3OuwMPobwt+0Mfxif9yeOYK5DsX732Ri1AKUYQBTtkyeCBOWNcH/Ap/YyzgLqAYCbxwYliEFFCj5B08ck8Y80/CZ4A3lx0hUOtcOOimhnawFZIN5BkvYv4mP4bP+G+0wB4EzJgK2IJtQPG36E5cgPn1/DU+01sCpc7FByteCygYS0CN9P/tIgGnQwvM7xu/wieGC7UBCAQ9DAVswV8jyyAFgYeB+qD7wDcEit2LNSPSAQqcmIKnRuoOUCJ0aP4e+HV9NP4Yo3OWFwKjNX+EhNwClqAN/GeADqU8/GiPwIcAcj5YW11bFZEScJAKqNH1DW7OGqT5MX6Fz/kwOBcCZ4MRwH0atgJ6JGrkN2CB2bdsGfyoP+FLfuB/IIGaK9DsxgRWvBZYAxRgoGoUNFiM+Oc0f2j8TLA2Oi+JKz4frK5YgYNUwC3YNdItYgEYzEcnkMCv8Qlj1L2SP9B0Ryu+GHuAgnsJMEhuUSo6AfCj/jY+8zPCaHD2VK0gl82uZGfRFmEFGIR3AIE70QmAP17/2dvJi3bxCWRwXhQGpW6PDIyYDm6RZI2e2wb8ScbXYHIE8+A362PhU0bd0lNZIjLYiSWb3YEDFOAAAz4zGOgd0EuvS/SIBe5uW/yiPgKfBY6lQPGYDKaBipSAARR0jZ5rA10i/hIsSX5z/C4+YWTRIcMAcTRkk2wDtQP8iCNWsMQ3nMCv8CcQ2R7eIRgcVMq93Po6/5YW8T3AgCIPQbfId8h8xU++fMH9evkFPpHkeAUypUa1V1iPJReZSAX/EtAi2wACfMXzhE8R/Fx/4Ct+yk6ve0DEukaV6rdC4d27uAQcdqBgL8HewUfbYJkEbqoCYf5q/KCn5HqVrwBHvpJCmRTGWYeHswe1hMAOYKBLNEePkJg/+J3rlfg5Sq/ayD+1FRrVMq9hEhhQ4vccNlCPqf4apOgREvy6P3L8jE9ZJ4MmqMU1Nyoxh3X6DQtsYbIE1Ei3KOEMFlgg3B97/ExTKKNEeg1wUHtghRVrCdgBDFSJ8JYu0SsKfmf+sj4an8ZaKDdgoJIvHUcOn5UCliAN8JrikDPj4IdkGNynVzRj8r/X9ZH4FNMg2QEKWAIM0KLkEtGH4LHqj54/2s/dZ3zO58/fqjCwU4QDFPQSQjuAgVzBIgTwAVDzx/gFPqUAg2QHrWAY8Ar0DrACGLDA7RA/C8jxA//lON/KlRJYvQ5NPK1QsAxYwfOYqhItuwLh+aP8RM/4nJOTcqWZTxLA0woF1MjcgV0iLXB9foyf6KfZ2to6+Reqkf7CsQJqhFPWBnaJYMACToF8/DkK8OP8bPCrclAEZ7BKjQoUUCMYiKcovIJ7UwHmxwME/tD4tyb4ryh/SKEJhfDLygoJBjiD0OeMBawC4X7Bj/Fj9hF/pPDjugrNRjUyoMBgFQbJJYJAiJ8i5g980HP+N2+ur03GYBQPVhRscULtqmPqdF4/iHjbvqhI590hXnA6EauI3ajVfpijg20UK6sURYpaChP8W03S5j3N8yR52+nUs6kIiueXc54kfVsnfvz4+WFlLTwLuHMjhOt9E/AIOAAGwNkftN+yPzE5oSVTqDWwI4U0jxCQARnkYAQAsAOAf7L+rD5Ye0im8OnDytd8XyG8e20TnAkSYI4NgJIG0P6xA3H/WH7X6vfovlRu7tOHGqoUmoQ3r/0ZnOYENAIDwAvkW3/u3zJvlFvSDB9jGeZ9BBgDX4kMgDoHiH+ygUr/WH+6/Lb3nPw2WkIO8QSYZAxyaI5xp9MA+gi4RAsUXH+H/RzVqX4Y8oSAlwjHGT/NAIAA6AZE1v9WyD68KymE+C59jPYiCUAI/FMAAHWdxosADAD8Y/3jV/8Uk2Hwn3Br797OgABbkTXHOI/JWaAADvgC4P4B0GOfeucMc5JhpeGJ4eV7WSIQDBKBItgjxCEJ4NiBsIHCP1l/h/0p+W1kMcgYGvOeMXj7AhlcCxBgI8Lrgp1CjN9kRwB2UO4f9rl7l8AgEfLuEgHAImBbKdtJNcBhOQHOCXb517KWn5g/eXJKfnV+JgxLskiua8bLN2/PzsSWiEyBAdguxBCZAHYCzLgCkO5hPzLPBQRdpFrjpXMnmlEEbC+VjY6LYIsQKRYAKRDml/WH2/dCmB6t5J0RGILYCAhAQghxExNA/fMCwT78U/N31BdH8BOsvf424ypRfIf2CqkDLAB9BMC/tz/c/h1bFoKfIP8uigA7EYnAvZPuUQCHAEACwACw9Yd9Yn5afk+r764IgiLgcyA7JAkQAZ8CHgEAxlWDSAC0QFh/l3+4t2UwCEGt4egQiYBMgQ9gpwIY8gbA/Cu5/Peafxz9AANC0NvpCj3S5t99O+ua49gObRNKl3AIswBQIL7+3P5jWwaChCBL9JzvQ2fJYYAI0CEKsEtoHcUI8wDgn68/7Bvzs73qUiAFTeCMQAOEI8BRAIADQusQaVAoAPjH8k8rGfdPIxkInQMIJAKfgq+vz1oRAOBC6CjYI7SGrvBDmAcQWH/tXpu/3SMDYVIAwpLsEJ9ivhGRMeYA24RWwjXCOgC+A9n+o/Yw96DQCKiRBvhEz4KP37+RCAIdOhftQ1tFdwgAEAoA/rH8UXlgnyF0Q8Aon2JDMN8FUATYSdlpbO9Ddw+Irsb5CGMC6A5E11/Zx+o/7FHEYHoUlWiutsYAbiGC64gg2KGdBmCIjnA4AO6fmGcMJIQAwEx8hwCAT08fNQB8D8UE8AJJ+5Z/g3Dv3j0guAjmassOACVrJ2UAN6wE9otII2gQrnGhALj/yDoEBD0JepQDAIiAdci9ke4BwJCvQWH/6A/cEwEBBCEA3iH/YTwkILoHXQ4DwD+WH/4fyS9KoEc5KtFca80BcCvUIQ6wQ/RohOxBrEE8ALL+xjxECGQEUQbNlY8MYDLQIVzoAKAaBKUAgAbFB0D9K9vRFxiQQfdEa9JzYO3n5KSzQ+xCh6Nsm+jVvjgAHoDe/3uHt+MeUr+JQsAYKAD6muYrAHxnGQXYLyyNyz/ZX4MwwdJ/sVhfWKjX693qQyDQsgimm63ODEMrGuAWAOKHYKcNkAAAOwQmGIApkLS/WKlUSm2UX+nJEwsBGTztlMiMAFT70QFAh2IBtgpbI2iQC4AFoP1L+8uvTpxYLrVhPhIjMBEUW7RB+e8SwESAITgTmOJDgigVBOAN6vhfLuh/X2YA948IQkTQnePZ5mKVPtoCADrkOspwmdgmqPYBwDoFaIOM/2JxQS2/VqFSWlX+mXozMCUqtrp/DWr8nJhEh9wAp3EhlQAHBFNaAWCG2Qho/wAoLrQqWMhCubQK288sAoUAAJlbo0Df7qv9UACT/CgjF1IADAmufdiEEIAH4HGnPlBVEhj3z5QMBS1RcQEFwjFGAMwUn/FN8X7h0GGdAEbAv4lq/3YPXhkCbV59GwQ7AvUXn5/gDZIAbIoD2xACIBEAwD3DJoBm5B8EXxSBtA2ZDBABBdfKf/ihAHxnMQdAADQC1yaEBmEPKi7ABubgS/kzzOsQKEBd+2cBfDIA2IaCAAiARtA3QAv9hwrr5c+fAwT1ut63WAC1uQkpbEOOBBQBABAAUdp3l5b+CQAbRF2j9S8WggVQV6d2VfafB5DTAIiA76N2AgiA6ggAAufw9PTswqL7TceCRvjMCdrtkjy1XX9p/sNcjiYQPskOCK9S9CpHAHAK4DAiIWgEzYDNdHW1VCpXlgtYfujlyqel+/djAK5aAAnh1wg/x8zzFAB0tlGUiCFIBgmhtfq5JM2XK+tV2Le09mEpZwAm+0pgXIT0gAG4LxKSAHPMGaoSQqpcVj+vS/fIixcoJ/33D7BDBJUOVwg3ORB4IF4VCoVqtVoo5GHesQN9WsqxBGZwl+AAQyKs430BgGCDgv9TuYEqdEjEKAEA7y6kAfSt5tXv+W8056R/CdD/LiRilcY26pkB83Ie5+pv+JcA8TOAcwAFCpSIVMgLIK8Gi5X8xv23lH/ToP4qhAKFZN1GnduoBtAEpcpGB2Fe+/ckcNENcFT0pSS5SgAAr+hnZxWAIlhc30gIL9ek/6kpKwF6neYVSon+NOZ8PUBe0isARdAuVQaf5cJKs3nyZBiA30YPi3513AcwZQHc1k+02u1ypTAQQn5ZLv9JDYBNKB4AAxCvi+GjGEOgCB61S2WWQth+807Hvw9A+ycAR8UASvgOgik6BPqZnEZYL/RVnkarWZyW/p0A5J0+6wF7QgyipHsbIhGA4JG6cH6p5mMWv7rYWijOTt+xASZcAPQdgpQYTFnvq3o8GTVTIAkUgmZYxzjQG96ycl+cNe/2ydUY4BgYEoNqDADuJ3MkAsOgbqDVqrzCveqQyF/lra6yuCifAheLTzv+EQAAgs/XD4vBNUqnmHcIBApB68mqplD6UlEqlxdLpVK7Xn/4EA/YQyMwg8dC0QyPi41oGADBCECAB7yrXbWl6tI8nk6jQXQE+Fs0ZgRGxMY0LDvkB5AEiIC8P0Dfaer69wTgvosCAP4HJ9AA2EjpA3abgCFIKPhHgYIjTGf4PPxvhMDfIVMitAgI1D7e5ZtmAbhfjgEA/jekUXSIR8AIdJHwxf2jQP4GkSej4+L3NOaLAGOA94mVaYi/y+oNgAOYETgsfldZAEg536kHgqaAsPzcPwII3eTS4veVlC3Ch204Qe9HVbh77j82AOxB+1LiTyiVsT9vFvdpm45xuLc+68ECYCMMgCMJ8Yc07Pu8EPYiMDjtx/vn94gR8ec0Zi7VIDAI5ANn1L2uD/FvCgQA+Mcmelj8SSV341bNMkCPiLD8xH98AKj/H6sRxoATzCIF4p7Yp/4xAUoIYET8eWX5cYZR7jBIv2TtlX34JwWa8AWwLy02Q4lhRGDPgc2gfnTMm9V3+ycTgENsJCE2SendhEAJBAbCeHd/dtr49wWA5d8MjboI2MfX4R324Z8MAAlgTGyuUsfMGND/P2BkPu8N97AP/2QHMgEcT4lNVzqjMgABjQHeyf9+QH/g3y7QkaT4K8pmSAhgoDoZifrnA3DEX/7NRAABpyDujf9c7/obANj/O0ofBAEguNAe2HcM8PGk+OtKDiuCeIQpx/KTARhNiX+iVDYDAiAQ83z5taL+HMkmxN8XYtjdYYCMc5iHfeY/8/cXnzOMIgemU8S+1Z/MaFL8H0pmDxqnynTXu3QfsH8s+7+47yiRHD2o2wTBPdqjlTk2lkyI/1Gp7OhwxmEeq58ZHs3++9bHZZHOjg0fO3gws9soc/DgseGxbHoT1v0X6Almagg4b48AAAAASUVORK5CYII=',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'token.skyward.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Banana',\n symbol: 'BANANA',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='256' height='256'%3E%3Cdefs%3E%3Ctext id='A' x='50' y='180' font-size='180'%3E🍌%3C/text%3E%3C/defs%3E%3Cuse xlink:href='%23A'/%3E%3C/svg%3E%0A\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'berryclub.ek.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Cucumber',\n symbol: 'CUCUMBER',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' width='256' height='256'%3E%3Cdefs%3E%3Ctext id='A' x='50' y='180' font-size='180'%3E🥒%3C/text%3E%3C/defs%3E%3Cuse xlink:href='%23A'/%3E%3C/svg%3E%0A\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'farm.berryclub.ek.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'HuobiToken',\n symbol: 'HT',\n icon: null,\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '6f259637dcd74c767781e37bc6133cd6a68aa161.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Gitcoin',\n symbol: 'GTC',\n icon: null,\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: 'de30da39c46104798bb5aa3fe8b9e0e1f348163f.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Uniswap',\n symbol: 'UNI',\n icon:\n \"data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Ccircle fill='%23FF007A' fill-rule='nonzero' cx='16' cy='16' r='16'/%3E%3Cg fill='%23FFF'%3E%3Cpath d='M12.261 5.767c-.285-.044-.297-.05-.163-.07.257-.04.865.015 1.284.114.977.233 1.866.828 2.816 1.885l.252.28.36-.057c1.52-.245 3.067-.05 4.36.547.356.164.917.491.987.576.023.026.064.199.091.383.096.637.048 1.125-.146 1.49-.106.198-.112.26-.041.43a.416.416 0 00.372.236c.322 0 .668-.52.828-1.243l.064-.287.126.143c.692.784 1.235 1.853 1.328 2.613l.025.199-.117-.18c-.2-.31-.4-.522-.658-.693-.464-.307-.955-.411-2.255-.48-1.174-.062-1.839-.162-2.497-.377-1.121-.365-1.686-.852-3.018-2.599-.591-.776-.957-1.205-1.32-1.55-.827-.786-1.639-1.198-2.678-1.36z' fill-rule='nonzero'/%3E%3Cpath d='M22.422 7.5c.03-.52.1-.863.242-1.176.056-.124.109-.226.117-.226a.773.773 0 01-.055.204c-.103.304-.12.72-.049 1.203.09.614.142.702.79 1.365.305.311.659.703.787.872l.233.306-.233-.219c-.285-.267-.941-.79-1.086-.864-.097-.05-.112-.049-.172.01-.055.056-.067.138-.074.529-.012.608-.095 1-.296 1.39-.108.21-.125.166-.027-.073.073-.178.08-.256.08-.845 0-1.184-.141-1.468-.966-1.956a9.046 9.046 0 00-.764-.396 2.916 2.916 0 01-.374-.182c.023-.023.827.211 1.15.336.482.185.561.209.62.186.039-.015.058-.129.077-.464zm-9.607 2.025c-.579-.797-.937-2.02-.86-2.934l.024-.283.132.024c.248.045.675.204.875.326.548.333.786.772 1.027 1.898.071.33.164.703.207.83.068.203.328.678.54.987.152.222.05.327-.286.297-.514-.047-1.21-.527-1.659-1.145zm8.905 5.935c-2.707-1.09-3.66-2.036-3.66-3.632 0-.235.008-.427.017-.427.01 0 .115.077.233.172.549.44 1.164.628 2.865.876 1.001.147 1.565.265 2.085.437 1.652.548 2.674 1.66 2.918 3.174.07.44.029 1.265-.086 1.7-.09.344-.367.963-.44.987-.02.006-.04-.071-.046-.178-.028-.568-.315-1.122-.798-1.537-.549-.471-1.286-.847-3.089-1.572zm-1.9.452a4.808 4.808 0 00-.131-.572l-.07-.206.129.144c.177.2.318.454.436.794.091.259.101.336.1.757 0 .414-.011.5-.095.734a2.32 2.32 0 01-.571.908c-.495.504-1.13.782-2.048.898-.16.02-.624.054-1.033.075-1.03.054-1.707.164-2.316.378a.488.488 0 01-.174.042c-.024-.025.39-.272.733-.437.483-.233.963-.36 2.04-.539.532-.089 1.082-.196 1.221-.239 1.318-.404 1.995-1.446 1.778-2.737z' fill-rule='nonzero'/%3E%3Cpath d='M21.06 18.116c-.36-.773-.442-1.52-.245-2.216.021-.074.055-.135.075-.135a.73.73 0 01.189.102c.166.112.498.3 1.383.782 1.105.603 1.735 1.07 2.164 1.602.375.467.607.999.719 1.647.063.367.026 1.25-.068 1.62-.297 1.166-.988 2.082-1.972 2.616a2.53 2.53 0 01-.288.143c-.014 0 .038-.133.117-.297.33-.692.369-1.366.118-2.116-.153-.459-.466-1.02-1.097-1.966-.734-1.1-.914-1.394-1.095-1.782zm-10.167 4.171c1.005-.848 2.254-1.45 3.393-1.635.49-.08 1.308-.048 1.762.068.728.186 1.38.604 1.719 1.101.33.486.473.91.62 1.852.06.372.123.745.142.83.11.488.327.879.595 1.075.425.311 1.158.33 1.878.05a.981.981 0 01.236-.074c.026.026-.336.269-.592.397a2.014 2.014 0 01-.983.238c-.66 0-1.208-.335-1.665-1.02-.09-.135-.292-.538-.45-.897-.482-1.1-.72-1.436-1.28-1.803-.489-.32-1.118-.377-1.591-.145-.622.305-.795 1.1-.35 1.603.177.2.507.373.777.406a.83.83 0 00.939-.83c0-.332-.128-.52-.448-.665-.437-.197-.907.033-.905.444.001.175.077.285.253.365.113.05.115.055.023.036-.401-.084-.495-.567-.172-.888.387-.386 1.188-.216 1.463.31.116.221.129.662.028.928-.225.595-.883.907-1.55.737-.454-.116-.639-.241-1.186-.805-.951-.98-1.32-1.17-2.692-1.384l-.263-.041.3-.253z' fill-rule='nonzero'/%3E%3Cpath d='M6.196 3.35l.096.117c3.708 4.54 5.624 6.896 5.746 7.064.2.278.125.527-.219.723-.191.109-.585.219-.781.219-.223 0-.474-.107-.657-.28-.129-.123-.65-.901-1.853-2.768a188.53 188.53 0 00-1.712-2.633c-.049-.046-.048-.045 1.618 2.936 1.046 1.872 1.4 2.533 1.4 2.622 0 .18-.05.274-.272.522-.37.413-.535.877-.655 1.837-.134 1.077-.51 1.837-1.554 3.138-.61.762-.71.902-.865 1.209-.194.386-.247.603-.269 1.091-.023.516.022.85.18 1.343.138.432.282.718.65 1.288.318.493.501.859.501 1.002 0 .114.022.114.515.003 1.179-.266 2.136-.735 2.675-1.309.333-.355.411-.551.414-1.038.001-.318-.01-.385-.096-.568-.14-.298-.395-.546-.957-.93-.737-.504-1.051-.91-1.138-1.467-.072-.457.011-.78.419-1.634.421-.884.526-1.26.597-2.151.045-.576.108-.803.274-.985.172-.19.328-.255.755-.313.696-.095 1.139-.275 1.503-.61.316-.292.448-.573.468-.995l.016-.32-.177-.206c-.254-.296-2.355-2.614-6.304-6.956l-.106-.115-.212.165zM7.91 19.732a.566.566 0 00-.174-.746c-.228-.152-.583-.08-.583.118 0 .06.033.104.108.143.127.065.136.139.037.288-.101.152-.093.286.023.377.186.146.45.065.59-.18zm5.524-7.176c-.327.1-.644.447-.743.81-.06.221-.026.61.064.73.145.194.286.245.666.242.744-.005 1.39-.324 1.466-.723.062-.327-.223-.78-.614-.98-.202-.102-.631-.143-.839-.079zm.87.68c.115-.163.064-.34-.13-.458-.372-.227-.934-.04-.934.312 0 .174.293.365.561.365.18 0 .424-.107.503-.219z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '1f9840a85d5af5bf1d1762f925bdaddc4201f984.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Wrapped BTC',\n symbol: 'WBTC',\n icon:\n \"data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none'%3E%3Ccircle fill='%23201A2D' cx='16' cy='16' r='16'/%3E%3Cg fill='%23FFF'%3E%3Cpath d='M22.818 9.586l-.6.6a8.494 8.494 0 010 11.464l.6.6a9.352 9.352 0 000-12.678v.014zM10.2 9.638a8.494 8.494 0 0111.464 0l.6-.6a9.352 9.352 0 00-12.678 0l.614.6zm-.562 12.018a8.494 8.494 0 010-11.458l-.6-.6a9.352 9.352 0 000 12.678l.6-.62zm12.018.554a8.494 8.494 0 01-11.464 0l-.6.6a9.352 9.352 0 0012.678 0l-.614-.6zm-1.942-8.286c-.12-1.252-1.2-1.672-2.566-1.8V10.4h-1.056v1.692h-.844V10.4H14.2v1.736h-2.142v1.13s.78-.014.768 0a.546.546 0 01.6.464v4.752a.37.37 0 01-.128.258.366.366 0 01-.272.092c.014.012-.768 0-.768 0l-.2 1.262h2.122v1.764h1.056V20.12h.844v1.73h1.058v-1.744c1.784-.108 3.028-.548 3.184-2.218.126-1.344-.506-1.944-1.516-2.186.614-.302.994-.862.908-1.778zm-1.48 3.756c0 1.312-2.248 1.162-2.964 1.162v-2.328c.716.002 2.964-.204 2.964 1.166zm-.49-3.28c0 1.2-1.876 1.054-2.472 1.054v-2.116c.596 0 2.472-.188 2.472 1.062z'/%3E%3Cpath d='M15.924 26.852C9.89 26.851 5 21.959 5 15.925 5 9.892 9.892 5 15.925 5c6.034 0 10.926 4.89 10.927 10.924a10.926 10.926 0 01-10.928 10.928zm0-21c-5.559.004-10.062 4.513-10.06 10.072.002 5.559 4.51 10.064 10.068 10.064 5.559 0 10.066-4.505 10.068-10.064A10.068 10.068 0 0015.924 5.852z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 8,\n id: '2260fac5e5542a773aa44fbcfedf7c193bc2c599.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'ChainLink Token',\n symbol: 'LINK',\n icon:\n \"data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none'%3E%3Ccircle fill='%232A5ADA' cx='16' cy='16' r='16'/%3E%3Cpath d='M16 6l-1.799 1.055L9.3 9.945 7.5 11v10l1.799 1.055 4.947 2.89L16.045 26l1.799-1.055 4.857-2.89L24.5 21V11l-1.799-1.055-4.902-2.89L16 6zm-4.902 12.89v-5.78L16 10.22l4.902 2.89v5.78L16 21.78l-4.902-2.89z' fill='%23FFF'/%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '514910771af9ca656af840dff83e8264ecf986ca.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Octopus Network Token',\n symbol: 'OCT',\n icon:\n \"data:image/svg+xml,%3Csvg version='1.1' id='O' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 113.39 113.39' style='enable-background:new 0 0 113.39 113.39;' xml:space='preserve'%3E%3Cstyle type='text/css'%3E .st0%7Bfill:%23014299;%7D .st1%7Bfill:%23FFFFFF;%7D %3C/style%3E%3Ccircle class='st0' cx='56.69' cy='56.69' r='56.69'/%3E%3Cg%3E%3Cpath class='st1' d='M44.25,59.41c-1.43,0-2.59,1.16-2.59,2.59v20.28c0,1.43,1.16,2.59,2.59,2.59c1.43,0,2.59-1.16,2.59-2.59V62 C46.84,60.57,45.68,59.41,44.25,59.41z'/%3E%3Cpath class='st1' d='M56.69,59.41c-1.45,0-2.62,1.17-2.62,2.62v26.47c0,1.45,1.17,2.62,2.62,2.62s2.62-1.17,2.62-2.62V62.02 C59.31,60.58,58.14,59.41,56.69,59.41z'/%3E%3Cpath class='st1' d='M79.26,78.87c-0.33,0.15-0.64,0.28-0.95,0.38c0,0-0.01,0-0.01,0c-0.59,0.19-1.13,0.29-1.63,0.31h-0.06 c-1,0.03-1.84-0.27-2.59-0.75c-0.49-0.32-0.91-0.73-1.25-1.23c-0.3-0.43-0.53-0.93-0.71-1.51c0-0.01-0.01-0.02-0.01-0.03 c-0.22-0.74-0.34-1.61-0.34-2.59V62.02c0-1.45-1.17-2.62-2.62-2.62c-1.45,0-2.62,1.17-2.62,2.62v11.43c0,4.5,1.64,8.03,4.63,9.96 c1.5,0.97,3.21,1.45,5.04,1.45c1.68,0,3.45-0.41,5.25-1.22c1.32-0.59,1.9-2.14,1.31-3.46C82.13,78.86,80.57,78.27,79.26,78.87z'/%3E%3Cpath class='st1' d='M68.33,45.9c0-2.15-1.75-3.9-3.9-3.9c-2.15,0-3.9,1.75-3.9,3.9s1.75,3.9,3.9,3.9 C66.58,49.8,68.33,48.05,68.33,45.9z'/%3E%3Cpath class='st1' d='M48.96,41.99c-2.15,0-3.9,1.75-3.9,3.9s1.75,3.9,3.9,3.9s3.9-1.75,3.9-3.9S51.11,41.99,48.96,41.99z'/%3E%3Cpath class='st1' d='M56.69,22.28c-15.17,0-27.52,12.34-27.52,27.52v15.09c0,1.46,1.18,2.64,2.64,2.64s2.64-1.18,2.64-2.64V49.8 c0-12.26,9.98-22.24,22.24-22.24c12.26,0,22.24,9.98,22.24,22.24v15.09c0,1.46,1.18,2.64,2.64,2.64s2.64-1.18,2.64-2.64V49.8 C84.21,34.62,71.87,22.28,56.69,22.28z'/%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: 'f5cfbc74057c610c8ef151a439252680ac68c6dc.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Ref Finance Token',\n symbol: 'REF',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='16 24 248 248' style='background: %23000'%3E%3Cpath d='M164,164v52h52Zm-45-45,20.4,20.4,20.6-20.6V81H119Zm0,18.39V216h41V137.19l-20.6,20.6ZM166.5,81H164v33.81l26.16-26.17A40.29,40.29,0,0,0,166.5,81ZM72,153.19V216h43V133.4l-11.6-11.61Zm0-18.38,31.4-31.4L115,115V81H72ZM207,121.5h0a40.29,40.29,0,0,0-7.64-23.66L164,133.19V162h2.5A40.5,40.5,0,0,0,207,121.5Z' fill='%23fff'/%3E%3Cpath d='M189 72l27 27V72h-27z' fill='%2300c08b'/%3E%3C/svg%3E%0A\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'token.v2.ref-finance.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'HAPI',\n symbol: 'HAPI',\n icon:\n \"data:image/svg+xml,%3Csvg version='1.1' id='Layer_2' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' width='600px' height='600px' viewBox='0 0 600 600' enable-background='new 0 0 600 600' xml:space='preserve'%3E %3Cg%3E %3Cg%3E %3Cpath fill='%23141414' d='M263.7,122.8c-3.6,0.3-7.1,0.9-10.7,1.8c-24.5,6-40.3,18.1-50.4,31c24.5-4.7,49.9,1.3,67.3,7.4 c0.5,0.2,1,0.4,1.6,0.6c-2.7-4.2-5.2-9-7.2-14.4C261.2,141.1,261.6,131.6,263.7,122.8z'/%3E %3Cpath fill='%23141414' d='M201.2,197.7c-9.8-1.1-19.1-2.1-24.6-2.1c-0.7,0-1.4,0-2,0.1c-38.1,2.6-67.2,37.3-69.1,82.4 c-1.4,32.2,13.5,53.1,23.3,63.4c-1.5-12.5-0.1-25,4.3-37.3c11.7-32.6,34.3-42.1,60.6-53.1c10.8-4.5,22.5-9.5,34.3-16.6l50.1-39.6 c-10.1,2.2-24.4,4.5-42.9,5.3C227.1,200.6,213.9,199.1,201.2,197.7z'/%3E %3Cpath fill='%23141414' d='M319.1,176.5c-0.5,1.1,0.9,2.1,1.8,1.2c5.3-5.4,16.3-14.3,30.8-14.2c15.6,0.1,35.5,10.2,40.5,22.1 c4,9.8-6.6,16.5-6.6,16.5l0,0c-2.5-2.7-8-6.3-18.2-6.6c-15-0.5-25.3,12.1-24.1,12.9c7.5,4.7,17.3,3.7,23.1,3.5 c5.8-0.2,15.1-2.5,17.8-3.5c4.7-1.8,11.7-7.8,14.9-16.1c2.5-6.5,8.4-28.7-25.2-34.4C352.7,154.3,327,159.6,319.1,176.5z'/%3E %3Cpath fill='%23141414' d='M473.1,225.1c-0.5-0.6-1.1-1.3-1.7-2l-0.3-0.3c-3.9-4.4-7.6-8.3-9.4-10.1c1.2-4.2,4-16.2,1-26.1 c-2.3-7.7-6.8-15.5-9.2-19.4l-0.8-1.2h0c-0.4-0.6-0.8-1.2-1.1-1.7c-0.3-0.4-0.5-0.7-0.6-1l-0.2-0.7c-2.5-7-8.6-22.3-16.4-28.1 l59.4-91.7c2.3-3.5-2.1-7.5-5.4-5l-86.8,66.5c-8.7-12.3-21.1-21.8-21.8-22.4c-0.8-0.6-2-0.7-2.9-0.2c-0.9,0.5-1.4,1.6-1.3,2.6 c0,0.1,0.6,5.9-2.9,17.6c7.5,2.7,13.9,6,19.3,9.7l-4.5,3.5c-8.8-5.7-20-10.5-34.3-12.6c-17.7-2.6-31.9,1-42.1,10.7c0,0,0,0,0,0 c5.9,3.8,13.1,8.7,17,12.4c0.8,0.7,1.5,1.5,2.2,2.3c-3.1,0.9-6.2,1.9-9.3,2.9c-0.3-0.2-0.5-0.5-0.8-0.7c-1.9-1.7-4.4-3.4-7-5.3 c-5.4-3.8-11.7-8.3-15.8-14c-2.2-3.1-3.8-6.5-4.3-10.4c-0.3-2.4-1-4-2.2-4.9c0,0,0,0,0,0c0,0,0,0,0,0c-0.6-0.5-2.8-2-5.8,0.3 c-2,1.6-4.4,5.3-6.5,10.3c-5.2,12.3-8.7,32.1-1.8,46.1c1.2,2.3,2.4,4.5,3.7,6.6c-0.4,1-0.7,2.1-0.9,3.1c-0.6,3.4-0.9,7.8-1.2,12.7 c-19.8-8.3-50.5-17.5-78.5-10.7c-23.9,5.8-39.4,17.5-49.6,30c7.4-3.1,15.2-5,23.5-5.6c5.6-0.4,16.4,0.8,27.9,2.1 c11.8,1.3,25.3,2.8,32.9,2.4c19.2-0.8,33.7-3.3,43.5-5.6c0,5.4,0.1,11.1,0.4,16.9c0.7,16.8,2.5,34.3,5,46.5 c3.6,17.9,16.5,55.2,31.4,64.6c5.5,3.5,13.5,8.2,22.9,13.4c-2.5,6.4-5.1,15.1-5.1,23.5c0,15.2,5.2,26.6,11,37 c4.6,8.2,9.6,15.7,12.8,24c2.5,6.5-2.7,27.7-5.6,38.9c-1.2,4.5-1.9,7.3-1.7,7c3.7-5.1,7.5-10.8,11.3-16.8 c15.3-24.2,19.4-47,19.5-48l0.2-1.4l-1.1-1c-0.2-0.2-17.2-15.7-18.3-33.3c-0.4-6.9,1-11.5,4.3-13.8c0.5-0.3,1-0.6,1.6-0.9 c7.5,3.7,15,7.3,22.2,10.5c2.8,3.5,9,9.4,11.8,12c3.4,3.2,6.9,7.8,12.2,7.8c5.3,0,15.9,0,21.3,0s13.1,0,17.3-2.1 c4.2-2.1,10.9-5.6,11-12.6c0-1.5,0.4-3.9,0.9-6.8c3.7-4.9,4.1-10.6,4.8-19.2c0.5-5.7,1.7-15.5,3-25.9c2-15.7,4.1-32,3.9-37.9 c-0.2-8.2-1.1-14.3-1.4-16.2C475.3,249.4,479.5,232.4,473.1,225.1z M318,310.6c-13.3-8.4-25.6-44.6-29-61.2 c-4.8-23.9-6.9-68.5-3.9-86.8c2.7-16.7,49-34.5,81.7-35.6c1.9-0.1,3.8-0.1,5.6-0.1c1,0,2,0,3,0c-0.1,4.9,1.3,15.6,13.8,25.5 c13.9,11,30.4,5,30.4,5l12.1-18.7c4.5,3.5,9.4,12.7,13,22.1c-0.9-0.4-1.9-0.7-3.1-0.9c-8.1-1.3-31.6-0.9-24,31.3 c1,4,5.2,9.4,17.2,22.3c2.8,3,5.1,5.3,7,7.2c5.6,5.6,7.4,7.4,7.5,11.8c0,0.3-0.2,1.6-0.4,3c-0.8-0.6-1.9-1.1-3.4-1 c-3.6-0.2-33.7,5.6-42.4,15.1c-1.7,1.9-4.5,2.6-6.7,1.4c-0.1-0.1-0.2-0.1-0.3-0.2c-1.4-0.8-2.3-1.9-2.8-3.5 c-1.3-5.1,2.9-13.2,4.6-16c0.6-1,0.3-2.3-0.6-2.9c-1-0.6-2.3-0.3-2.9,0.6c-0.1,0.2-0.9,1.5-1.9,3.5c-3.3,6.6-8.2,12.2-14.3,16.3 c-9.8,6.6-24,15.2-35.5,18.2c-18,4.7-24.9-8.2-25.2-8.8c-0.5-1-1.8-1.4-2.8-0.9c-1,0.5-1.5,1.8-0.9,2.8 c0.1,0.1,6.3,12.1,21.5,12.1c0.6,0,1.4-0.1,2.2-0.2c4.3-0.5,8.6,0.5,12.3,2.7c3.5,2.1,8,4.7,12.5,7c12.6,6.3,14.7,6.2,19.5,5.4 c1.1-0.2,49.8-2.4,80.1-8.2l3.6,0.2c2.4,0.1,4.3,2.3,4,4.7l0,0.1c-0.2,1.4-1,2.6-2.2,3.3c-2.7,1.5-6.5,3.5-9.9,4.9 c-1.6,0.6-3.3,1.2-5.1,1.6c-5.5,1.3-11.1,1.6-11.1,1.6s-5.4,1.2-13.5,2.1c-3.4,0.4-7.2,0.7-11.3,0.9c-14,0.7-13,1.6-24.8,1 c-2.9-0.1-5.7-0.3-8.3-0.6c-2.5-0.3-3.2,3.4-0.7,4c6.1,1.5,13.3,2.6,21.3,2.5c1,0,1.9,0,2.9,0c12.8-0.1,24.4,7.5,29.4,19.3 c2.1,5,4.1,12,5.4,18.5c1.8,8.4-5.3,16.1-13.8,15.3c-12.5-1.3-26.6-4.8-34.6-8.3C365.3,338.1,332.4,319.8,318,310.6z M448.7,169.2 l1.2,1.9c2.4,4,5.9,10.5,7.9,16.9c3.1,10.4-1.4,24.4-1.4,24.5l-0.5,1.5l1.1,1.1c0,0.1,5,5.2,10.3,11.1l0.1,0.2 c0.6,0.7,1.2,1.3,1.8,2c3.7,4.3,1.9,17-0.1,23.9l-0.2,0.6l0.1,0.6c0,0,0.3,1.5,0.6,3.9c-2.7,0.3-4.7,2.7-4.4,5.5l0.8,7.5l-8.6,0.1 l-13.5-15.3c-1-1.2-1-3,0.2-4c0,0,0,0,0,0c7.1-6.4,8.1-9.5,8.3-10.7c0.9-5.4,1.2-7.4,1.2-8.1c0-6.1-2.9-9-8.7-14.8 c-1.9-1.9-4.2-4.2-6.9-7.1c-0.6-0.6-1.1-1.2-1.7-1.8c2.1,0.6,4.9,1.2,8.5,1.5c8.4,0.7,10.9-1.4,10.9-1.4s1.5-2.7-1.1-6.6 c-2.6-3.9-6.2-6.7-13.2-6.9c-5-0.2-9.5,3.7-11.7,6c-0.9-1-2.9-4.7-3.8-10.9c-1.5-9.7,2.1-14.2,4.7-16.4c4.6-3.9,10.9-7.7,14.4-7.5 c0.9,0.1,1.9,0.2,2.7,0.4C447.8,167.7,448.2,168.4,448.7,169.2z M463.4,332.9c-0.7,8.2-1.1,12.8-3.8,16.5c-2.3,3.1-7.3,0.8-6.6-3 c0.4-2.1,0.7-4.3,0.8-6.4c0.3-10.7-4.9-20.9-6.7-27.7c0,0,0-0.1,0-0.1c-0.9-3.8,1.2-7.7,4.8-9.3c1.6-0.7,3.4-1.6,5.3-2.6 c4.6-2.3,9.9,1.3,9.2,6.4l0,0.1C465.2,317.2,463.9,327.1,463.4,332.9z M385.1,249.4c1.8-1.3,4.4-0.8,5.6,1.2 c0.8,1.4,1.9,2.9,3.4,4.1c4.5,3.7,9.8,3.5,13.2,3.5c3.3,0,5.4-0.6,6-0.8c0,0,0,0,0,0c2.4-0.5,4.3,2,3.1,4.2 c-2.6,4.8-6.1,11.1-6.5,11.4c-0.7,0.5-22.8,5.1-25.6,5.4s-11.6,1.2-18.2-3c-2.8-1.7-5.5-3.7-7.7-5.3c-1.7-1.2-1.4-3.8,0.4-4.7 C368.8,260.4,378.7,253.9,385.1,249.4z M436.8,263.8l8.3,9.1c1.5,1.7,0.5,4.4-1.7,4.7c-5,0.6-10,1.2-14.9,1.7 c-2.3,0.2-3.9-2.3-2.7-4.3c1.9-3,4.3-7,6.5-10.8C433.2,262.6,435.5,262.4,436.8,263.8z M396.4,117.1l83.5-69.1l-76.9,76.9 c-2.5,2.4-6.6,1.6-8.1-1.5h0C393.9,121.2,394.5,118.5,396.4,117.1z'/%3E %3Cpath fill='%23141414' d='M196.6,258.1c-25.6,10.7-45.8,19.2-56.4,48.7c-15.1,42,9.4,88.5,62.5,120.1c-17.4-68,3.5-93.1,22.1-115.3 c6.4-7.7,12.5-15,16.9-23.7c12.9-25.8,12.3-50.5,11.1-62C233.7,242.5,214.1,250.8,196.6,258.1z'/%3E %3C/g%3E %3Cg%3E %3Cpath d='M201.6,477.1h-9.1l-2.8,17.1h-14.3l2.8-17.1h-9.1l-2.8,17.1h-9.3l-1.5,9.1h9.3l-2.3,14h-9.4l-1.5,9.1h9.4l-2.8,17.1h9.1 l2.8-17.1h14.3l-2.8,17.1h9.1l2.8-17.1h9.3l1.5-9.1h-9.3l2.3-14h9.4l1.5-9.1h-9.4L201.6,477.1z M186,517.4h-14.3l2.3-14h14.3 L186,517.4z'/%3E %3Cpolygon points='260.8,505.3 230,505.3 230,477.1 218,477.1 218,543.6 230,543.6 230,515.4 260.8,515.4 260.8,543.6 272.9,543.6 272.9,477.1 260.8,477.1 '/%3E %3Cpath d='M307.1,477.1l-23.4,66.4h12.8l5.5-16.4h25l5.5,16.4h12.8l-23.4-66.4H307.1z M305.3,517.5l9-26.8h0.5l9,26.8H305.3z'/%3E %3Cpath d='M394,480c-3.5-1.9-7.8-2.9-12.9-2.9h-24.9v66.4h12v-22.4H381c5.1,0,9.4-0.9,12.9-2.8s6.2-4.5,7.9-7.8 c1.8-3.3,2.7-7.1,2.7-11.3c0-4.2-0.9-8-2.7-11.3C400.1,484.5,397.4,481.9,394,480z M390.9,505.4c-0.9,1.8-2.3,3.2-4.2,4.3 c-1.9,1-4.3,1.6-7.3,1.6h-11.1v-24h11c3,0,5.5,0.5,7.4,1.5c1.9,1,3.3,2.4,4.2,4.2c0.9,1.8,1.4,3.9,1.4,6.2 S391.8,503.6,390.9,505.4z'/%3E %3Crect x='417.1' y='477.1' width='12' height='66.4'/%3E %3C/g%3E %3C/g%3E %3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: 'd9c2d319cd7e6177336b0a9c93c21cb48d84fb54.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'PARAS',\n symbol: 'PARAS',\n icon:\n 'data:image/png;base64,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',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'token.paras.near',\n },\n {\n spec: 'ft-1.0.0',\n name: '1MILNFT',\n symbol: '1MIL',\n icon:\n \"data:image/svg+xml,%3Csvg version='1.1' id='O' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 146 146' xml:space='preserve'%3E %3Cpath style='fill:%23ff00c6; stroke:none;' d='M0 0L0 31L31 31L31 0L0 0z'/%3E %3Cpath style='fill:%23df01ae; stroke:none;' d='M31 0L31 31L32 31L31 0z'/%3E %3Cpath style='fill:%23000000; stroke:none;' d='M32 0L32 32L0 32L0 38L32 38L32 70L0 70L0 76L32 76L32 109L0 109L0 114L32 114L32 146L38 146L38 114L70 114L70 146L76 146L76 114C82.7843 114 102.446 110.653 107.397 115.603C112.241 120.448 109 139.378 109 146L114 146L114 114L146 114L146 109C139.378 109 120.448 112.241 115.603 107.397C110.653 102.446 114 82.7843 114 76L146 76L146 70L114 70L114 38L146 38L146 32C139.378 32 120.448 35.2414 115.603 30.3966C110.759 25.5518 114 6.6225 114 0L109 0L109 32L76 32L76 0L71 0L71 32L38 32L38 0L32 0z'/%3E %3Cpath style='fill:%23459f00; stroke:none;' d='M38 0L38 32L70 32L70 31L39 31L38 0z'/%3E %3Cpath style='fill:%236fff00; stroke:none;' d='M39 0L39 31L70 31L70 0L39 0z'/%3E %3Cpath style='fill:%230d2000; stroke:none;' d='M70 0L70 32L71 32L70 0z'/%3E %3Cpath style='fill:%233f0180; stroke:none;' d='M76 0L76 32L108 32L108 31L77 31L76 0z'/%3E %3Cpath style='fill:%237f00ff; stroke:none;' d='M77 0L77 31L108 31L108 0L77 0z'/%3E %3Cpath style='fill:%232f0060; stroke:none;' d='M108 0L108 32L109 32L108 0z'/%3E %3Cpath style='fill:%231d4101; stroke:none;' d='M114 0L114 31L115 31L114 0z'/%3E %3Cpath style='fill:%236fff00; stroke:none;' d='M115 0L115 31L146 31L146 0L115 0z'/%3E %3Cpath style='fill:%239f017c; stroke:none;' d='M0 31L0 32L32 32L0 31z'/%3E %3Cpath style='fill:%23459f00; stroke:none;' d='M115 31L115 32L146 32L115 31z'/%3E %3Cpath style='fill:%2300f0ff; stroke:none;' d='M0 38L0 69L31 69L31 38L0 38z'/%3E %3Cpath style='fill:%2300d2df; stroke:none;' d='M31 38L31 69L0 69L0 70L32 70L31 38z'/%3E %3Cpath style='fill:%23be0094; stroke:none;' d='M38 38L38 70L39 70L38 38z'/%3E %3Cpath style='fill:%23ff00c6; stroke:none;' d='M39 38L39 69L70 69L70 38L39 38z'/%3E %3Cpath style='fill:%23200018; stroke:none;' d='M70 38L70 70L71 70L70 38z'/%3E %3Cpath style='fill:%23007880; stroke:none;' d='M76 38L76 70L77 70L76 38z'/%3E %3Cpath style='fill:%2300f0ff; stroke:none;' d='M77 38L77 69L108 69L108 38L77 38z'/%3E %3Cpath style='fill:%23015a60; stroke:none;' d='M108 38L108 70L109 70L108 38z'/%3E %3Cpath style='fill:%23400032; stroke:none;' d='M114 38L114 70L115 70L114 38z'/%3E %3Cpath style='fill:%23de00ad; stroke:none;' d='M115 38L115 39L146 39L115 38z'/%3E %3Cpath style='fill:%23ff00c6; stroke:none;' d='M115 39L115 70L146 70L146 39L115 39z'/%3E %3Cpath style='fill:%23df01ae; stroke:none;' d='M39 69L39 70L70 70L39 69z'/%3E %3Cpath style='fill:%2300d2df; stroke:none;' d='M77 69L77 70L108 70L77 69z'/%3E %3Cpath style='fill:%2354bf00; stroke:none;' d='M0 76L0 77L32 77L0 76z'/%3E %3Cpath style='fill:%235f00be; stroke:none;' d='M38 76L38 108L39 108L39 77L70 77L38 76z'/%3E %3Cpath style='fill:%230f001f; stroke:none;' d='M70 76L70 108L71 108L70 76z'/%3E %3Cpath style='fill:%23388000; stroke:none;' d='M76 76L76 108L77 108L76 76z'/%3E %3Cpath style='fill:%2354bf00; stroke:none;' d='M77 76L77 77L108 77L77 76z'/%3E %3Cpath style='fill:%232a6000; stroke:none;' d='M108 76L108 108L109 108L108 76z'/%3E %3Cpath style='fill:%23003d40; stroke:none;' d='M114 76L114 108L115 108L114 76z'/%3E %3Cpath style='fill:%2300b4bf; stroke:none;' d='M115 76L115 77L146 77L115 76z'/%3E %3Cpath style='fill:%236fff00; stroke:none;' d='M0 77L0 108L32 108L32 77L0 77z'/%3E %3Cpath style='fill:%237f00ff; stroke:none;' d='M39 77L39 108L70 108L70 77L39 77z'/%3E %3Cpath style='fill:%236fff00; stroke:none;' d='M77 77L77 108L108 108L108 77L77 77z'/%3E %3Cpath style='fill:%2300f0ff; stroke:none;' d='M115 77L115 108L146 108L146 77L115 77z'/%3E %3Cpath style='fill:%230f2000; stroke:none;' d='M0 108L0 109L32 109L0 108M76 108L76 109L108 109L76 108z'/%3E %3Cpath style='fill:%23001e20; stroke:none;' d='M115 108L115 109L146 109L115 108z'/%3E %3Cpath style='fill:%23810064; stroke:none;' d='M0 114L0 115L32 115L0 114z'/%3E %3Cpath style='fill:%23398000; stroke:none;' d='M38 114L38 115L70 115L38 114z'/%3E %3Cpath style='fill:%23800063; stroke:none;' d='M76 114L76 146L77 146L77 115L108 115L76 114z'/%3E %3Cpath style='fill:%23200041; stroke:none;' d='M114 114L114 146L115 146L114 114z'/%3E %3Cpath style='fill:%23410080; stroke:none;' d='M115 114L115 115L146 115L115 114z'/%3E %3Cpath style='fill:%23ff00c6; stroke:none;' d='M0 115L0 146L31 146L31 115L0 115z'/%3E %3Cpath style='fill:%23df01ae; stroke:none;' d='M31 115L31 146L32 146L31 115z'/%3E %3Cpath style='fill:%2354bf00; stroke:none;' d='M38 115L38 146L39 146L38 115z'/%3E %3Cpath style='fill:%236fff00; stroke:none;' d='M39 115L39 146L70 146L70 115L39 115z'/%3E %3Cpath style='fill:%23ff00c6; stroke:none;' d='M77 115L77 146L108 146L108 115L77 115z'/%3E %3Cpath style='fill:%2360004a; stroke:none;' d='M108 115L108 146L109 146L108 115z'/%3E %3Cpath style='fill:%237f00ff; stroke:none;' d='M115 115L115 146L146 146L146 115L115 115z'/%3E %3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: 'a4ef4b0b23c1fc81d3f9ecf93510e64f58a4a016.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'marma j token',\n symbol: 'marmaj',\n icon:\n 'data:image/jpeg;base64,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',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'marmaj.tkn.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Staked NEAR',\n symbol: 'STNEAR',\n icon:\n \"data:image/svg+xml,%3csvg width='96' height='96' viewBox='0 0 96 96' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3crect width='96' height='96' rx='48' fill='white'/%3e%3cpath fill-rule='evenodd' clip-rule='evenodd' d='M48.0006 20L41.2575 26.7431L48.0006 33.4862L54.7437 26.7431L48.0006 20ZM37.281 30.7188L30.7144 37.2853L47.9998 54.5707L65.2851 37.2853L58.7186 30.7188L47.9998 41.4376L37.281 30.7188ZM26.7384 41.261L19.9953 48.0041L47.9995 76.0083L76.0037 48.0041L69.2606 41.2611L47.9995 62.5221L26.7384 41.261Z' fill='%23231B51'/%3e%3c/svg%3e\",\n reference: 'https://metapool.app',\n reference_hash: null,\n decimals: 24,\n id: 'meta-pool.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Cheddar',\n symbol: 'Cheddar',\n icon:\n 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI1LjMuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IgoJIHZpZXdCb3g9IjAgMCA2NCA2NCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNjQgNjQ7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7ZmlsbDp1cmwoI1hNTElEXzE2Xyk7fQoJLnN0MXtmaWxsOiNGRkU5NTk7fQoJLnN0MntvcGFjaXR5OjAuMjt9Cgkuc3Qze2ZpbGw6IzQyNDI0Mjt9Cgkuc3Q0e29wYWNpdHk6MC45O2ZpbGw6dXJsKCNYTUxJRF8xN18pO2VuYWJsZS1iYWNrZ3JvdW5kOm5ldyAgICA7fQoJLnN0NXtmaWxsOnVybCgjU1ZHSURfMV8pO30KCS5zdDZ7ZmlsbDp1cmwoI1hNTElEXzE4Xyk7fQoJLnN0N3tvcGFjaXR5OjAuOTtmaWxsOnVybCgjWE1MSURfMTlfKTtlbmFibGUtYmFja2dyb3VuZDpuZXcgICAgO30KCS5zdDh7ZmlsbDp1cmwoI1hNTElEXzIwXyk7fQoJLnN0OXtvcGFjaXR5OjAuOTtmaWxsOnVybCgjWE1MSURfMjFfKTtlbmFibGUtYmFja2dyb3VuZDpuZXcgICAgO30KCS5zdDEwe2ZpbGw6dXJsKCNTVkdJRF8yXyk7fQoJLnN0MTF7b3BhY2l0eTowLjk7ZmlsbDp1cmwoI1hNTElEXzIyXyk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3ICAgIDt9Cgkuc3QxMntmaWxsOnVybCgjWE1MSURfMjNfKTt9Cgkuc3QxM3tvcGFjaXR5OjAuOTtmaWxsOnVybCgjWE1MSURfMjRfKTtlbmFibGUtYmFja2dyb3VuZDpuZXcgICAgO30KCS5zdDE0e2ZpbGw6dXJsKCNTVkdJRF8zXyk7fQoJLnN0MTV7ZmlsbDp1cmwoI1hNTElEXzI2Xyk7fQoJLnN0MTZ7b3BhY2l0eTowLjk7ZmlsbDp1cmwoI1hNTElEXzI3Xyk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3ICAgIDt9Cgkuc3QxN3tmaWxsOnVybCgjWE1MSURfMzFfKTt9Cgkuc3QxOHtvcGFjaXR5OjAuOTtmaWxsOnVybCgjWE1MSURfMzNfKTtlbmFibGUtYmFja2dyb3VuZDpuZXcgICAgO30KCS5zdDE5e2ZpbGw6dXJsKCNTVkdJRF80Xyk7fQoJLnN0MjB7b3BhY2l0eTowLjk7ZmlsbDp1cmwoI1hNTElEXzM0Xyk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3ICAgIDt9Cgkuc3QyMXtmaWxsOnVybCgjWE1MSURfMzZfKTt9Cgkuc3QyMntvcGFjaXR5OjAuOTtmaWxsOnVybCgjWE1MSURfMzdfKTtlbmFibGUtYmFja2dyb3VuZDpuZXcgICAgO30KCS5zdDIze2ZpbGw6dXJsKCNTVkdJRF81Xyk7fQoJLnN0MjR7ZmlsbDp1cmwoI1hNTElEXzM4Xyk7fQoJLnN0MjV7b3BhY2l0eTowLjk7ZmlsbDp1cmwoI1hNTElEXzM5Xyk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3ICAgIDt9Cgkuc3QyNntmaWxsOnVybCgjWE1MSURfNDBfKTt9Cgkuc3QyN3tvcGFjaXR5OjAuOTtmaWxsOnVybCgjWE1MSURfNDFfKTtlbmFibGUtYmFja2dyb3VuZDpuZXcgICAgO30KCS5zdDI4e2ZpbGw6dXJsKCNTVkdJRF82Xyk7fQoJLnN0Mjl7b3BhY2l0eTowLjk7ZmlsbDp1cmwoI1hNTElEXzQyXyk7ZW5hYmxlLWJhY2tncm91bmQ6bmV3ICAgIDt9Cjwvc3R5bGU+CjxnIGlkPSJMYXllcl8xXzFfIj4KCQoJCTxsaW5lYXJHcmFkaWVudCBpZD0iWE1MSURfMTZfIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9Ii0xODIxLjEzNTMiIHkxPSI5ODMuMTc0MyIgeDI9Ii0xODIxLjEzNTMiIHkyPSI5OTguMDU0MyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMSAwIDAgMSAtMTc5MC4yNzUzIC05NDYpIj4KCQk8c3RvcCAgb2Zmc2V0PSIxLjk3MDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNGN0JDMDAiLz4KCQk8c3RvcCAgb2Zmc2V0PSIxIiBzdHlsZT0ic3RvcC1jb2xvcjojRkNENzNFIi8+Cgk8L2xpbmVhckdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzY4XyIgY2xhc3M9InN0MCIgZD0iTTUyLjMsNDAuMnYxNC4xbC00MC4yLTYuMWMtMS41LTAuMy0yLjYtMS4zLTIuNi0yLjNjMC4xLTMuOC0wLjEtNy41LDAtMTEuMQoJCWMwLTAuNywwLjEtMS41LDEuMi0xLjdjMC43LTAuMSwxLjYsMC4yLDIuMywwLjNsNC45LDAuOGMwLDAuMSwwLDAuMywwLDAuNGMwLDEuNiwxLjcsMyw0LDMuMWMyLDAuMSwzLjYtMC44LDMuOS0yLjJMNDAuNiwzOAoJCWMtMC4xLDAuMi0wLjIsMC40LTAuMiwwLjVjMCwwLjcsMC45LDEuMywxLjksMS40YzEuMSwwLjEsMS45LTAuNCwxLjktMS4yYzAtMC4xLDAtMC4xLDAtMC4yQzQ0LjEsMzguNiw1Mi4zLDQwLjIsNTIuMyw0MC4yeiIvPgoJPHBhdGggY2xhc3M9InN0MSIgZD0iTTkuNSwzNC44YzAuMy0xLjItMC40LTIuNiwzLjUtMS41bDQuOSwwLjhjMC40LTEsMi0xLjYsMy44LTEuNGMyLjIsMC4xLDQsMS4zLDQsMi41YzAsMC4xLDAsMC4yLDAsMC4zCgkJTDQwLjUsMzhsMCwwYzAuMy0wLjMsMS0wLjQsMS43LTAuNGMxLDAuMSwxLjksMC41LDEuOSwxLjFsOC4yLDEuNkwzMC44LDI3LjVjLTItMS4yLTQuNS0xLjctNi43LTEuM2MtMi4yLDAuMy01LDAuOC03LjEsMS42CgkJYy0yLjUsMC45LTQuOCwyLjQtNi4yLDMuNmMtMC4xLDAuMS0wLjYsMC41LTAuOSwxLjFDOS41LDMzLDkuNSwzMy44LDkuNSwzNC44eiIvPgoJPGcgY2xhc3M9InN0MiI+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTI1LjQsMjdjMS42LDAsMy4zLDAuNCw0LjcsMS4zbDIxLDEyLjV2MTIuNmwtMzguOC01LjljLTAuOS0wLjItMS43LTAuOC0xLjYtMS40YzAtMi4yLDAtNC4zLDAtNi41CgkJCWMwLTEuNSwwLTMuMSwwLTQuN2MwLTAuMSwwLTAuMiwwLTAuNGwwLDBjMC0wLjUsMC4xLTEuMiwwLjMtMS42YzAuMi0wLjQsMC41LTAuNywwLjYtMC44YzEuNC0xLjEsMy42LTIuNSw1LjgtMy40CgkJCWMxLjYtMC42LDQtMS4xLDYuOC0xLjVDMjQuNiwyNywyNC45LDI3LDI1LjQsMjcgTTI1LjQsMjYuMWMtMC40LDAtMC45LDAtMS4zLDAuMWMtMi4yLDAuMy01LDAuOC03LjEsMS42CgkJCWMtMi41LDAuOS00LjgsMi40LTYuMiwzLjZjLTAuMSwwLjEtMC42LDAuNS0wLjksMS4xYy0wLjMsMC41LTAuMywxLjItMC40LDEuOWMwLDAuMiwwLDAuMywwLDAuNGMwLDMuNywwLjEsNy41LDAuMSwxMS4xCgkJCWMwLDEuMSwxLjEsMi4xLDIuNiwyLjNsNDAuMiw2LjFWNDAuMkwzMC44LDI3LjVDMjkuMiwyNi42LDI3LjMsMjYuMSwyNS40LDI2LjFMMjUuNCwyNi4xeiIvPgoJPC9nPgoJCgkJPHJhZGlhbEdyYWRpZW50IGlkPSJYTUxJRF8xN18iIGN4PSItMzA0NS4xOTg3IiBjeT0iMjA0Ny40NDY5IiByPSI2Ljg2ODciIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuNDI1OCAwIDAgMC4zMjI1IC0xMjc5Ljk4MTMgLTYxNy4xODk5KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguMTMwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0RFN0YxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuMzM4OSIgc3R5bGU9InN0b3AtY29sb3I6I0RBN0QxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNTk5MyIgc3R5bGU9InN0b3AtY29sb3I6I0NFNzYwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuODYwMiIgc3R5bGU9InN0b3AtY29sb3I6I0JBNkMwNSIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQUQ2NTAwIi8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzM1XyIgY2xhc3M9InN0NCIgZD0iTTE4LjQsNDMuOGMwLDEuMi0xLjMsMi4xLTMsMmMtMS42LTAuMS0zLTEuMi0zLTIuM3MxLjMtMi4xLDMtMkMxNyw0MS41LDE4LjQsNDIuNiwxOC40LDQzLjh6IgoJCS8+CgkKCQk8cmFkaWFsR3JhZGllbnQgaWQ9IlNWR0lEXzFfIiBjeD0iLTMwNjQuNDI3NSIgY3k9IjIwMTUuOTU3IiByPSIxNC4xMzIxIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjQyNTggMCAwIDAuMzIyNSAtMTI3OS45ODEzIC02MTcuMTg5OSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KCQk8c3RvcCAgb2Zmc2V0PSI4LjEzMDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNERTdGMTQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjMzODkiIHN0eWxlPSJzdG9wLWNvbG9yOiNEQTdEMTIiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjU5OTMiIHN0eWxlPSJzdG9wLWNvbG9yOiNDRTc2MEQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjg2MDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNCQTZDMDUiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjk4NyIgc3R5bGU9InN0b3AtY29sb3I6I0FENjUwMCIvPgoJPC9yYWRpYWxHcmFkaWVudD4KCTxwYXRoIGNsYXNzPSJzdDUiIGQ9Ik0xNy44LDM0LjRjMCwxLjYsMS43LDMsNCwzLjFjMiwwLjEsMy42LTAuOCwzLjktMi4yaC0wLjFsLTAuMy0wLjFsMC40LDAuMWMwLTAuMSwwLTAuMiwwLTAuMwoJCWMwLTEuMy0xLjgtMi40LTQtMi41Yy0xLjgtMC4xLTMuNCwwLjUtMy44LDEuNEMxNy44LDM0LjIsMTcuOCwzNC40LDE3LjgsMzQuNHoiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMThfIiBjeD0iLTEzMjguMjIwMiIgY3k9IjM0ODEuNzQ3MSIgcj0iNy4xMDIiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMzA3OCAwLjIyMjggMC4yNDA5IDAuMTkwOSAtMTIyMS41MjUxIC0zNDAuNzk4NCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KCQk8c3RvcCAgb2Zmc2V0PSI4Ljc1MDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNEOTk5MTQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjQwOTgiIHN0eWxlPSJzdG9wLWNvbG9yOiNENTk2MTIiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjczNSIgc3R5bGU9InN0b3AtY29sb3I6I0M5OEQwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQkE4MjA3Ii8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzMyXyIgY2xhc3M9InN0NiIgZD0iTTI2LjgsMjkuNGMwLDAuNS0wLjksMS0yLDAuOXMtMi0wLjYtMi0xLjJzMC45LTEsMi0wLjlDMjYsMjguMiwyNi44LDI4LjgsMjYuOCwyOS40eiIvPgoJCgkJPHJhZGlhbEdyYWRpZW50IGlkPSJYTUxJRF8xOV8iIGN4PSItMzA3OS41NTMiIGN5PSIyMDQ0LjQxMSIgcj0iMTUuNjcyNSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMC40MjU4IDAgMCAwLjMyMjUgLTEyNzkuOTgxMyAtNjE3LjE4OTkpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CgkJPHN0b3AgIG9mZnNldD0iOC4xMzAwMDBlLTAyIiBzdHlsZT0ic3RvcC1jb2xvcjojREU3RjE0Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC4zMzg5IiBzdHlsZT0ic3RvcC1jb2xvcjojREE3RDEyIi8+CgkJPHN0b3AgIG9mZnNldD0iMC41OTkzIiBzdHlsZT0ic3RvcC1jb2xvcjojQ0U3NjBEIi8+CgkJPHN0b3AgIG9mZnNldD0iMC44NjAyIiBzdHlsZT0ic3RvcC1jb2xvcjojQkE2QzA1Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC45ODciIHN0eWxlPSJzdG9wLWNvbG9yOiNBRDY1MDAiLz4KCTwvcmFkaWFsR3JhZGllbnQ+Cgk8cGF0aCBpZD0iWE1MSURfMzBfIiBjbGFzcz0ic3Q3IiBkPSJNMzUuMSw0My40YzAsMi4xLTIuMiwzLjUtNSwzLjNzLTUtMi01LTRjMC0yLjEsMi4yLTMuNSw1LTMuM0MzMi44LDM5LjYsMzUuMSw0MS40LDM1LjEsNDMuNHoiCgkJLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMjBfIiBjeD0iLTMwNzYuMzYxNiIgY3k9IjIwMTEuMTY0OCIgcj0iMTAuOTExOCIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMC40MjU4IDAgMCAwLjMyMjUgLTEyNzkuOTgxMyAtNjE3LjE4OTkpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CgkJPHN0b3AgIG9mZnNldD0iOC43NTAwMDBlLTAyIiBzdHlsZT0ic3RvcC1jb2xvcjojRDk5OTE0Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC40MDk4IiBzdHlsZT0ic3RvcC1jb2xvcjojRDU5NjEyIi8+CgkJPHN0b3AgIG9mZnNldD0iMC43MzUiIHN0eWxlPSJzdG9wLWNvbG9yOiNDOThEMEQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjk4NyIgc3R5bGU9InN0b3AtY29sb3I6I0JBODIwNyIvPgoJPC9yYWRpYWxHcmFkaWVudD4KCTxwYXRoIGlkPSJYTUxJRF8yOV8iIGNsYXNzPSJzdDgiIGQ9Ik0zNS44LDMzLjFjMCwwLjgtMS4zLDEuMy0yLjksMS4yYy0xLjYtMC4yLTIuOS0wLjgtMi45LTEuNmMwLTAuOCwxLjMtMS4zLDIuOS0xLjIKCQlDMzQuNiwzMS43LDM1LjgsMzIuMywzNS44LDMzLjF6Ii8+CgkKCQk8cmFkaWFsR3JhZGllbnQgaWQ9IlhNTElEXzIxXyIgY3g9Ii0zMTAyLjMwMzUiIGN5PSIyMDU5Ljc2NjgiIHI9IjUuOTI4NSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMC40MjU4IDAgMCAwLjMyMjUgLTEyNzkuOTgxMyAtNjE3LjE4OTkpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CgkJPHN0b3AgIG9mZnNldD0iOC4xMzAwMDBlLTAyIiBzdHlsZT0ic3RvcC1jb2xvcjojREU3RjE0Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC4zMzg5IiBzdHlsZT0ic3RvcC1jb2xvcjojREE3RDEyIi8+CgkJPHN0b3AgIG9mZnNldD0iMC41OTkzIiBzdHlsZT0ic3RvcC1jb2xvcjojQ0U3NjBEIi8+CgkJPHN0b3AgIG9mZnNldD0iMC44NjAyIiBzdHlsZT0ic3RvcC1jb2xvcjojQkE2QzA1Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC45ODciIHN0eWxlPSJzdG9wLWNvbG9yOiNBRDY1MDAiLz4KCTwvcmFkaWFsR3JhZGllbnQ+Cgk8cGF0aCBpZD0iWE1MSURfMjhfIiBjbGFzcz0ic3Q5IiBkPSJNNDIuMyw0Ny43YzAsMS0xLjIsMS44LTIuNiwxLjdjLTEuNC0wLjEtMi42LTEtMi42LTIuMWMwLTEuMSwxLjItMS44LDIuNi0xLjcKCQlDNDEuMSw0NS45LDQyLjMsNDYuOCw0Mi4zLDQ3Ljd6Ii8+CgkKCQk8cmFkaWFsR3JhZGllbnQgaWQ9IlNWR0lEXzJfIiBjeD0iLTMxMDYuODA4OCIgY3k9IjIwMzAuMDM0MyIgcj0iOC44NDA4IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjQyNTggMCAwIDAuMzIyNSAtMTI3OS45ODEzIC02MTcuMTg5OSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KCQk8c3RvcCAgb2Zmc2V0PSI4LjYwMDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNDNzczMTUiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjM3NzQiIHN0eWxlPSJzdG9wLWNvbG9yOiNDMzcxMTMiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjY3MTgiIHN0eWxlPSJzdG9wLWNvbG9yOiNCNzZDMEYiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjk2NjkiIHN0eWxlPSJzdG9wLWNvbG9yOiNBMzY0MDciLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjk4NyIgc3R5bGU9InN0b3AtY29sb3I6I0ExNjMwNiIvPgoJPC9yYWRpYWxHcmFkaWVudD4KCTxwYXRoIGNsYXNzPSJzdDEwIiBkPSJNNDAuMiwzOC41YzAsMC43LDAuOSwxLjMsMS45LDEuNGMxLjEsMC4xLDEuOS0wLjQsMS45LTEuMmMwLTAuMSwwLTAuMSwwLTAuMmwwLDBjMC0wLjUtMC45LTEtMS45LTEuMQoJCWMtMC43LTAuMS0xLjQsMC4xLTEuNywwLjRsMCwwQzQwLjMsMzguMSw0MC4yLDM4LjMsNDAuMiwzOC41eiIvPgoJCgkJPHJhZGlhbEdyYWRpZW50IGlkPSJYTUxJRF8yMl8iIGN4PSItMzExOS4yMjA1IiBjeT0iMjA0OC44OTk5IiByPSI0LjM5ODUiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuNDI1OCAwIDAgMC4zMjI1IC0xMjc5Ljk4MTMgLTYxNy4xODk5KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguMTMwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0RFN0YxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuMzM4OSIgc3R5bGU9InN0b3AtY29sb3I6I0RBN0QxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNTk5MyIgc3R5bGU9InN0b3AtY29sb3I6I0NFNzYwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuODYwMiIgc3R5bGU9InN0b3AtY29sb3I6I0JBNkMwNSIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQUQ2NTAwIi8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzI1XyIgY2xhc3M9InN0MTEiIGQ9Ik00OC43LDQ0YzAsMC41LTAuNiwxLTEuMywwLjljLTAuNy0wLjEtMS4zLTAuNS0xLjMtMS4xYzAtMC41LDAuNi0xLDEuMy0wLjkKCQlDNDgsNDMsNDguNyw0My40LDQ4LjcsNDR6Ii8+CjwvZz4KPGcgaWQ9IkxheWVyXzFfMl8iPgoJCgkJPGxpbmVhckdyYWRpZW50IGlkPSJYTUxJRF8yM18iIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iLTIxMjYuNTcyIiB5MT0iMTAyNi43NzYxIiB4Mj0iLTIxMjYuNTcyIiB5Mj0iMTAzOS45Mzc5IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjc2NTIgLTEuNjc0MTIzZS0wMiAtMS44Nzk5NDdlLTAyIDAuODU5MyAtMTU3Ni4yMTU3IC04OTMuNDA4NSkiPgoJCTxzdG9wICBvZmZzZXQ9IjEuOTcwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0Y3QkMwMCIvPgoJCTxzdG9wICBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOiNGQ0Q3M0UiLz4KCTwvbGluZWFyR3JhZGllbnQ+Cgk8cGF0aCBpZD0iWE1MSURfN18iIGNsYXNzPSJzdDEyIiBkPSJNNDcsMjdsLTAuNCwxMC45bC0yOC41LTUuMWMtMS4xLTAuMi0xLjgtMS0xLjgtMS44YzAuMi0yLjksMC4xLTUuOCwwLjMtOC42CgkJYzAtMC41LDAuMS0xLjIsMC45LTEuM2MwLjUtMC4xLDEuMiwwLjIsMS43LDAuM2wzLjQsMC43YzAsMC4xLDAsMC4yLDAsMC4zYzAsMS4yLDEuMiwyLjMsMi43LDIuNGMxLjQsMC4xLDIuNi0wLjYsMi44LTEuNgoJCWwxMC41LDIuMmMtMC4xLDAuMS0wLjIsMC4zLTAuMiwwLjRjMCwwLjUsMC41LDEuMSwxLjMsMS4yYzAuNywwLjEsMS4zLTAuNCwxLjMtMC45YzAtMC4xLDAtMC4xLDAtMC4yQzQxLjEsMjUuNiw0NywyNyw0NywyN3oiLz4KCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik0xNi41LDIyLjRjMC4yLTAuOS0wLjItMiwyLjUtMS4ybDMuNCwwLjdjMC4zLTAuNywxLjQtMS4yLDIuOC0xLjFjMS41LDAuMSwyLjgsMS4xLDIuOCwyYzAsMC4xLDAsMC4yLDAsMC4yCgkJbDEwLjUsMi4ybDAsMGMwLjItMC4zLDAuNy0wLjQsMS4zLTAuNGMwLjcsMC4xLDEuMywwLjQsMS4zLDAuOGw1LjgsMS4zTDMyLDE3Yy0xLjMtMC45LTMuMS0xLjMtNC44LTEuMWMtMS42LDAuMi0zLjYsMC41LTUuMSwxLjIKCQljLTEuOCwwLjYtMy40LDEuOC00LjUsMi43Yy0wLjEsMC4xLTAuNCwwLjQtMC42LDAuOEMxNi42LDIxLjEsMTYuNiwyMS43LDE2LjUsMjIuNHoiLz4KCTxnIGNsYXNzPSJzdDIiPgoJCTxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik0yOC4xLDE2LjVjMS4yLDAsMi4zLDAuNCwzLjMsMWwxNC43LDkuOEw0NS45LDM3bC0yNy42LTQuOWMtMC42LTAuMS0xLjItMC42LTEuMi0xLjIKCQkJYzAuMS0xLjYsMC4xLTMuMywwLjItNC45YzAtMS4yLDAuMS0yLjQsMC4xLTMuNmMwLTAuMSwwLTAuMiwwLTAuM2wwLDBjMC0wLjQsMC4xLTAuOSwwLjItMS4zYzAuMS0wLjMsMC40LTAuNSwwLjQtMC42CgkJCWMxLTAuOCwyLjYtMS45LDQuMy0yLjVjMS4yLTAuNCwyLjktMC44LDQuOS0xLjFDMjcuNSwxNi41LDI3LjgsMTYuNSwyOC4xLDE2LjUgTTI4LjEsMTUuOGMtMC40LDAtMC42LDAtMSwwLjEKCQkJYy0xLjYsMC4yLTMuNiwwLjUtNS4xLDEuMmMtMS44LDAuNi0zLjQsMS44LTQuNSwyLjdjLTAuMSwwLjEtMC40LDAuNC0wLjYsMC44Yy0wLjIsMC40LTAuMywwLjktMC4zLDEuNGMwLDAuMSwwLDAuMiwwLDAuMwoJCQljLTAuMSwyLjktMC4xLDUuOC0wLjMsOC42YzAsMC44LDAuNywxLjYsMS44LDEuOGwyOC41LDUuMUw0NywyN0wzMS45LDE3QzMwLjgsMTYuMywyOS40LDE1LjgsMjguMSwxNS44TDI4LjEsMTUuOHoiLz4KCTwvZz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMjRfIiBjeD0iLTM5OTEuOTUyOSIgY3k9IjI0MDEuOTY1MSIgcj0iNi44Njg3IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjMwMzcgLTQuMzQ2MjA4ZS0wMyAtNy41ODc3MjFlLTAzIDAuMjQ4NCAtMTE3Mi42NTQ4IC01ODUuMTI5KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguMTMwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0RFN0YxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuMzM4OSIgc3R5bGU9InN0b3AtY29sb3I6I0RBN0QxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNTk5MyIgc3R5bGU9InN0b3AtY29sb3I6I0NFNzYwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuODYwMiIgc3R5bGU9InN0b3AtY29sb3I6I0JBNkMwNSIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQUQ2NTAwIi8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzZfIiBjbGFzcz0ic3QxMyIgZD0iTTIyLjcsMjkuNGMwLDAuOS0xLDEuNi0yLjIsMS40Yy0xLjItMC4yLTIuMS0wLjktMi4xLTEuOWMwLTEsMS0xLjYsMi4yLTEuNAoJCVMyMi43LDI4LjUsMjIuNywyOS40eiIvPgoJCgkJPHJhZGlhbEdyYWRpZW50IGlkPSJTVkdJRF8zXyIgY3g9Ii00MDExLjE4MTYiIGN5PSIyMzcwLjQ3NTMiIHI9IjE0LjEzMjEiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMzAzNyAtNC4zNDYyMDhlLTAzIC03LjU4NzcyMWUtMDMgMC4yNDg0IC0xMTcyLjY1NDggLTU4NS4xMjkpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CgkJPHN0b3AgIG9mZnNldD0iOC4xMzAwMDBlLTAyIiBzdHlsZT0ic3RvcC1jb2xvcjojREU3RjE0Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC4zMzg5IiBzdHlsZT0ic3RvcC1jb2xvcjojREE3RDEyIi8+CgkJPHN0b3AgIG9mZnNldD0iMC41OTkzIiBzdHlsZT0ic3RvcC1jb2xvcjojQ0U3NjBEIi8+CgkJPHN0b3AgIG9mZnNldD0iMC44NjAyIiBzdHlsZT0ic3RvcC1jb2xvcjojQkE2QzA1Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC45ODciIHN0eWxlPSJzdG9wLWNvbG9yOiNBRDY1MDAiLz4KCTwvcmFkaWFsR3JhZGllbnQ+Cgk8cGF0aCBjbGFzcz0ic3QxNCIgZD0iTTIyLjQsMjIuMmMwLDEuMiwxLjIsMi4zLDIuNywyLjRjMS40LDAuMSwyLjYtMC42LDIuOC0xLjZoLTAuMWgtMC4ybDAuMywwLjFjMC0wLjEsMC0wLjIsMC0wLjIKCQljMC0xLTEuMy0xLjktMi44LTJjLTEuMy0wLjEtMi40LDAuNC0yLjgsMS4xQzIyLjUsMjIsMjIuNCwyMi4xLDIyLjQsMjIuMnoiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMjZfIiBjeD0iLTE3NjcuOTQ2NSIgY3k9IjQ1OTMuOTUyMSIgcj0iNy4xMDIiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMjI0OCAwLjE2ODUgMC4xNjczIDAuMTQ5NSAtMTEzNy40NjU2IC0zNzEuNjE3OCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KCQk8c3RvcCAgb2Zmc2V0PSI4Ljc1MDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNEOTk5MTQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjQwOTgiIHN0eWxlPSJzdG9wLWNvbG9yOiNENTk2MTIiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjczNSIgc3R5bGU9InN0b3AtY29sb3I6I0M5OEQwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQkE4MjA3Ii8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzVfIiBjbGFzcz0ic3QxNSIgZD0iTTI5LjEsMTguNGMwLDAuNC0wLjYsMC43LTEuNCwwLjdjLTAuNy0wLjEtMS4zLTAuNC0xLjMtMC45YzAtMC40LDAuNi0wLjcsMS40LTAuNwoJCUMyOC40LDE3LjYsMjkuMSwxNy45LDI5LjEsMTguNHoiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMjdfIiBjeD0iLTQwMjYuMzA3MSIgY3k9IjIzOTguOTI5MiIgcj0iMTUuNjcyNSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMC4zMDM3IC00LjM0NjIwOGUtMDMgLTcuNTg3NzIxZS0wMyAwLjI0ODQgLTExNzIuNjU0OCAtNTg1LjEyOSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KCQk8c3RvcCAgb2Zmc2V0PSI4LjEzMDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNERTdGMTQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjMzODkiIHN0eWxlPSJzdG9wLWNvbG9yOiNEQTdEMTIiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjU5OTMiIHN0eWxlPSJzdG9wLWNvbG9yOiNDRTc2MEQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjg2MDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNCQTZDMDUiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjk4NyIgc3R5bGU9InN0b3AtY29sb3I6I0FENjUwMCIvPgoJPC9yYWRpYWxHcmFkaWVudD4KCTxwYXRoIGlkPSJYTUxJRF80XyIgY2xhc3M9InN0MTYiIGQ9Ik0zNC42LDI5LjNjLTAuMSwxLjUtMS43LDIuNy0zLjcsMi41Yy0yLTAuMi0zLjYtMS42LTMuNS0zLjFjMC4xLTEuNSwxLjctMi43LDMuNy0yLjUKCQlDMzMsMjYuMywzNC42LDI3LjcsMzQuNiwyOS4zeiIvPgoJCgkJPHJhZGlhbEdyYWRpZW50IGlkPSJYTUxJRF8zMV8iIGN4PSItNDAyMy4xMTU3IiBjeT0iMjM2NS42ODMxIiByPSIxMC45MTE4IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjMwMzcgLTQuMzQ2MjA4ZS0wMyAtNy41ODc3MjFlLTAzIDAuMjQ4NCAtMTE3Mi42NTQ4IC01ODUuMTI5KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguNzUwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0Q5OTkxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNDA5OCIgc3R5bGU9InN0b3AtY29sb3I6I0Q1OTYxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNzM1IiBzdHlsZT0ic3RvcC1jb2xvcjojQzk4RDBEIi8+CgkJPHN0b3AgIG9mZnNldD0iMC45ODciIHN0eWxlPSJzdG9wLWNvbG9yOiNCQTgyMDciLz4KCTwvcmFkaWFsR3JhZGllbnQ+Cgk8cGF0aCBpZD0iWE1MSURfM18iIGNsYXNzPSJzdDE3IiBkPSJNMzUuNCwyMS4zYzAsMC42LTEsMS0yLjEsMC45Yy0xLjEtMC4xLTIuMS0wLjYtMi4xLTEuM3MxLTEsMi4xLTAuOQoJCUMzNC41LDIwLjIsMzUuNCwyMC43LDM1LjQsMjEuM3oiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMzNfIiBjeD0iLTQwNDkuMDU3OSIgY3k9IjI0MTQuMjg1MiIgcj0iNS45Mjg1IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjMwMzcgLTQuMzQ2MjA4ZS0wMyAtNy41ODc3MjFlLTAzIDAuMjQ4NCAtMTE3Mi42NTQ4IC01ODUuMTI5KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguMTMwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0RFN0YxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuMzM4OSIgc3R5bGU9InN0b3AtY29sb3I6I0RBN0QxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNTk5MyIgc3R5bGU9InN0b3AtY29sb3I6I0NFNzYwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuODYwMiIgc3R5bGU9InN0b3AtY29sb3I6I0JBNkMwNSIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQUQ2NTAwIi8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzJfIiBjbGFzcz0ic3QxOCIgZD0iTTM5LjYsMzIuN2MwLDAuOC0wLjksMS4zLTEuOSwxLjNjLTEtMC4xLTEuOC0wLjgtMS44LTEuNnMwLjktMS4zLDEuOS0xLjMKCQlDMzguOSwzMS4yLDM5LjcsMzEuOSwzOS42LDMyLjd6Ii8+CgkKCQk8cmFkaWFsR3JhZGllbnQgaWQ9IlNWR0lEXzRfIiBjeD0iLTQwNTMuNTYzIiBjeT0iMjM4NC41NTI1IiByPSI4Ljg0MDgiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMzAzNyAtNC4zNDYyMDhlLTAzIC03LjU4NzcyMWUtMDMgMC4yNDg0IC0xMTcyLjY1NDggLTU4NS4xMjkpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CgkJPHN0b3AgIG9mZnNldD0iOC42MDAwMDBlLTAyIiBzdHlsZT0ic3RvcC1jb2xvcjojQzc3MzE1Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC4zNzc0IiBzdHlsZT0ic3RvcC1jb2xvcjojQzM3MTEzIi8+CgkJPHN0b3AgIG9mZnNldD0iMC42NzE4IiBzdHlsZT0ic3RvcC1jb2xvcjojQjc2QzBGIi8+CgkJPHN0b3AgIG9mZnNldD0iMC45NjY5IiBzdHlsZT0ic3RvcC1jb2xvcjojQTM2NDA3Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC45ODciIHN0eWxlPSJzdG9wLWNvbG9yOiNBMTYzMDYiLz4KCTwvcmFkaWFsR3JhZGllbnQ+Cgk8cGF0aCBjbGFzcz0ic3QxOSIgZD0iTTM4LjQsMjUuNmMwLDAuNSwwLjUsMS4xLDEuMywxLjJjMC43LDAuMSwxLjMtMC40LDEuMy0wLjljMC0wLjEsMC0wLjEsMC0wLjJsMCwwYzAtMC40LTAuNi0wLjgtMS4zLTAuOAoJCWMtMC41LTAuMS0xLDAuMS0xLjMsMC40bDAsMEMzOC40LDI1LjMsMzguNCwyNS41LDM4LjQsMjUuNnoiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMzRfIiBjeD0iLTQwNjUuOTc0NiIgY3k9IjI0MDMuNDE4MiIgcj0iNC4zOTg1IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjMwMzcgLTQuMzQ2MjA4ZS0wMyAtNy41ODc3MjFlLTAzIDAuMjQ4NCAtMTE3Mi42NTQ4IC01ODUuMTI5KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguMTMwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0RFN0YxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuMzM4OSIgc3R5bGU9InN0b3AtY29sb3I6I0RBN0QxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNTk5MyIgc3R5bGU9InN0b3AtY29sb3I6I0NFNzYwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuODYwMiIgc3R5bGU9InN0b3AtY29sb3I6I0JBNkMwNSIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQUQ2NTAwIi8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzFfIiBjbGFzcz0ic3QyMCIgZD0iTTQ0LjMsMjkuOWMwLDAuNC0wLjQsMC43LTEsMC43cy0xLTAuNC0xLTAuOWMwLTAuNCwwLjQtMC43LDEtMC43CgkJQzQzLjgsMjkuMSw0NC4zLDI5LjQsNDQuMywyOS45eiIvPgo8L2c+CjxnIGlkPSJMYXllcl8xXzNfIj4KCQoJCTxsaW5lYXJHcmFkaWVudCBpZD0iWE1MSURfMzZfIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9Ii0yNDIyLjUxNzMiIHkxPSIxMDA1LjY1NDYiIHgyPSItMjQyMi41MTczIiB5Mj0iMTAxNC43NjQzIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjYyODcgLTMuOTI5MDMwZS0wMiAtNS4wNDc5OThlLTAyIDAuODA3NyAtMTQ0MC42ODE1IC04OTIuMDUxMykiPgoJCTxzdG9wICBvZmZzZXQ9IjEuOTcwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0Y3QkMwMCIvPgoJCTxzdG9wICBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOiNGQ0Q3M0UiLz4KCTwvbGluZWFyR3JhZGllbnQ+Cgk8cGF0aCBpZD0iWE1MSURfMTRfIiBjbGFzcz0ic3QyMSIgZD0iTTQwLjYsMTcuMmwtMC42LDcuMmwtMTYuNy0zLjhjLTAuNi0wLjItMS4xLTAuNy0xLTEuM2MwLjItMS45LDAuMy0zLjksMC40LTUuOAoJCWMwLTAuNCwwLjEtMC44LDAuNS0wLjljMC40LTAuMSwwLjcsMC4xLDEsMC4ybDIsMC41YzAsMC4xLDAsMC4yLDAsMC4yYy0wLjEsMC44LDAuNiwxLjUsMS41LDEuNmMwLjgsMC4xLDEuNS0wLjQsMS43LTEuMWw2LjIsMS41CgkJYy0wLjEsMC4xLTAuMSwwLjItMC4xLDAuM2MwLDAuNCwwLjMsMC43LDAuNywwLjhzMC44LTAuMiwwLjktMC41di0wLjFDMzcuMiwxNi4yLDQwLjYsMTcuMiw0MC42LDE3LjJ6Ii8+Cgk8cGF0aCBjbGFzcz0ic3QxIiBkPSJNMjIuOCwxMy43YzAuMi0wLjUsMC0xLjMsMS41LTAuN2wyLDAuNWMwLjItMC40LDAuOS0wLjgsMS43LTAuN2MwLjksMC4xLDEuNiwwLjcsMS41LDEuM2MwLDAuMSwwLDAuMSwwLDAuMgoJCWw2LjIsMS41bDAsMGMwLjItMC4yLDAuNC0wLjMsMC43LTAuMmMwLjQsMC4xLDAuNywwLjMsMC43LDAuNWwzLjQsMUwzMiwxMC4zYy0wLjgtMC42LTEuOC0wLjktMi44LTAuOGMtMSwwLjItMi4yLDAuNC0zLjEsMC43CgkJYy0xLjEsMC40LTIuMSwxLjItMi44LDEuN2MwLDAtMC4zLDAuMy0wLjQsMC41QzIyLjksMTIuOCwyMi44LDEzLjIsMjIuOCwxMy43eiIvPgoJPGcgY2xhc3M9InN0MiI+CgkJPHBhdGggY2xhc3M9InN0MyIgZD0iTTI5LjgsOS45YzAuNywwLDEuMywwLjMsMS45LDAuN2w4LjQsNi43bC0wLjUsNi41bC0xNi4xLTMuN2MtMC40LTAuMS0wLjYtMC40LTAuNi0wLjgKCQkJYzAuMS0xLjEsMC4yLTIuMiwwLjMtMy4zYzAuMS0wLjgsMC4xLTEuNiwwLjItMi40YzAtMC4xLDAtMC4xLDAtMC4ybDAsMGMwLTAuMywwLjEtMC42LDAuMi0wLjhjMC4xLTAuMiwwLjMtMC40LDAuMy0wLjQKCQkJYzAuNi0wLjUsMS42LTEuMywyLjYtMS42YzAuNy0wLjMsMS43LTAuNSwzLTAuNkMyOS40LDkuOSwyOS42LDkuOSwyOS44LDkuOSBNMjkuOSw5LjVjLTAuMiwwLTAuNCwwLTAuNiwwYy0xLDAuMi0yLjIsMC40LTMuMSwwLjcKCQkJYy0xLjEsMC40LTIuMSwxLjItMi44LDEuN2MwLDAtMC4zLDAuMy0wLjQsMC41Yy0wLjEsMC4zLTAuMiwwLjUtMC4yLDFjMCwwLjEsMCwwLjIsMCwwLjJjLTAuMiwxLjktMC4zLDMuOS0wLjQsNS44CgkJCWMtMC4xLDAuNSwwLjQsMS4xLDEsMS4zbDE2LjYsMy45bDAuNi03LjNMMzIsMTAuM0MzMS40LDkuOCwzMC42LDkuNiwyOS45LDkuNUwyOS45LDkuNXoiLz4KCTwvZz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMzdfIiBjeD0iLTYzMDAuMDcxMyIgY3k9IjMxODQuNDk5MyIgcj0iNi44Njg3IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjE3OTYgLTYuODIyNTU0ZS0wMyAtMS4zOTA2NjJlLTAyIDAuMTY1NiAtMTA2MS43Nzg2IC01NTIuMjIzMykiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KCQk8c3RvcCAgb2Zmc2V0PSI4LjEzMDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNERTdGMTQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjMzODkiIHN0eWxlPSJzdG9wLWNvbG9yOiNEQTdEMTIiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjU5OTMiIHN0eWxlPSJzdG9wLWNvbG9yOiNDRTc2MEQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjg2MDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNCQTZDMDUiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjk4NyIgc3R5bGU9InN0b3AtY29sb3I6I0FENjUwMCIvPgoJPC9yYWRpYWxHcmFkaWVudD4KCTxwYXRoIGlkPSJYTUxJRF8xM18iIGNsYXNzPSJzdDIyIiBkPSJNMjYuMSwxOC41Yy0wLjEsMC42LTAuNiwxLjEtMS4zLDFjLTAuNy0wLjEtMS4yLTAuNi0xLjItMS4zYzAuMS0wLjYsMC42LTEuMSwxLjMtMQoJCUMyNS43LDE3LjMsMjYuMiwxNy45LDI2LjEsMTguNXoiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iU1ZHSURfNV8iIGN4PSItNjMxOS4zMDAzIiBjeT0iMzE1My4wMDk1IiByPSIxNC4xMzIxIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KC0wLjE3OTYgLTYuODIyNTU0ZS0wMyAtMS4zOTA2NjJlLTAyIDAuMTY1NiAtMTA2MS43Nzg2IC01NTIuMjIzMykiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KCQk8c3RvcCAgb2Zmc2V0PSI4LjEzMDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNERTdGMTQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjMzODkiIHN0eWxlPSJzdG9wLWNvbG9yOiNEQTdEMTIiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjU5OTMiIHN0eWxlPSJzdG9wLWNvbG9yOiNDRTc2MEQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjg2MDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNCQTZDMDUiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjk4NyIgc3R5bGU9InN0b3AtY29sb3I6I0FENjUwMCIvPgoJPC9yYWRpYWxHcmFkaWVudD4KCTxwYXRoIGNsYXNzPSJzdDIzIiBkPSJNMjYuMywxMy43Yy0wLjEsMC44LDAuNiwxLjUsMS41LDEuNmMwLjgsMC4xLDEuNS0wLjQsMS43LTEuMWgtMC4xaC0wLjFoMC4yYzAtMC4xLDAtMC4xLDAtMC4yCgkJYzAuMS0wLjYtMC42LTEuMy0xLjUtMS4zYy0wLjgtMC4xLTEuNCwwLjItMS43LDAuN0MyNi4zLDEzLjUsMjYuMywxMy42LDI2LjMsMTMuN3oiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMzhfIiBjeD0iLTI4OTUuMTQ2NyIgY3k9IjcyMzAuOTM4NSIgcj0iNy4xMDIiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMTM5NSAwLjEwOTUgOS4zMzg2MjdlLTAyIDAuMTAxOSAtMTA0OS4wOTQyIC00MDkuMzQ3OCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KCQk8c3RvcCAgb2Zmc2V0PSI4Ljc1MDAwMGUtMDIiIHN0eWxlPSJzdG9wLWNvbG9yOiNEOTk5MTQiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjQwOTgiIHN0eWxlPSJzdG9wLWNvbG9yOiNENTk2MTIiLz4KCQk8c3RvcCAgb2Zmc2V0PSIwLjczNSIgc3R5bGU9InN0b3AtY29sb3I6I0M5OEQwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQkE4MjA3Ii8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzEyXyIgY2xhc3M9InN0MjQiIGQ9Ik0zMC4zLDExLjJjMCwwLjMtMC40LDAuNC0wLjksMC40cy0wLjgtMC40LTAuOC0wLjZzMC40LTAuNCwwLjktMC40CgkJQzMwLDEwLjYsMzAuMywxMC45LDMwLjMsMTEuMnoiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iWE1MSURfMzlfIiBjeD0iLTYzMzQuNDI1OCIgY3k9IjMxODEuNDYzNCIgcj0iMTUuNjcyNSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMC4xNzk2IC02LjgyMjU1NGUtMDMgLTEuMzkwNjYyZS0wMiAwLjE2NTYgLTEwNjEuNzc4NiAtNTUyLjIyMzMpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CgkJPHN0b3AgIG9mZnNldD0iOC4xMzAwMDBlLTAyIiBzdHlsZT0ic3RvcC1jb2xvcjojREU3RjE0Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC4zMzg5IiBzdHlsZT0ic3RvcC1jb2xvcjojREE3RDEyIi8+CgkJPHN0b3AgIG9mZnNldD0iMC41OTkzIiBzdHlsZT0ic3RvcC1jb2xvcjojQ0U3NjBEIi8+CgkJPHN0b3AgIG9mZnNldD0iMC44NjAyIiBzdHlsZT0ic3RvcC1jb2xvcjojQkE2QzA1Ii8+CgkJPHN0b3AgIG9mZnNldD0iMC45ODciIHN0eWxlPSJzdG9wLWNvbG9yOiNBRDY1MDAiLz4KCTwvcmFkaWFsR3JhZGllbnQ+Cgk8cGF0aCBpZD0iWE1MSURfMTFfIiBjbGFzcz0ic3QyNSIgZD0iTTMzLjIsMTguNWMtMC4xLDEuMS0xLjEsMS44LTIuMiwxLjZzLTIuMS0xLjEtMi0yLjJjMC4xLTEuMSwxLjEtMS44LDIuMi0xLjYKCQlDMzIuNCwxNi42LDMzLjMsMTcuNSwzMy4yLDE4LjV6Ii8+CgkKCQk8cmFkaWFsR3JhZGllbnQgaWQ9IlhNTElEXzQwXyIgY3g9Ii02MzMxLjIzNDQiIGN5PSIzMTQ4LjIxNzMiIHI9IjEwLjkxMTgiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMTc5NiAtNi44MjI1NTRlLTAzIC0xLjM5MDY2MmUtMDIgMC4xNjU2IC0xMDYxLjc3ODYgLTU1Mi4yMjMzKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguNzUwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0Q5OTkxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNDA5OCIgc3R5bGU9InN0b3AtY29sb3I6I0Q1OTYxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNzM1IiBzdHlsZT0ic3RvcC1jb2xvcjojQzk4RDBEIi8+CgkJPHN0b3AgIG9mZnNldD0iMC45ODciIHN0eWxlPSJzdG9wLWNvbG9yOiNCQTgyMDciLz4KCTwvcmFkaWFsR3JhZGllbnQ+Cgk8cGF0aCBpZD0iWE1MSURfMTBfIiBjbGFzcz0ic3QyNiIgZD0iTTMzLjksMTMuMmMwLDAuNC0wLjYsMC42LTEuMywwLjVjLTAuNi0wLjEtMS4yLTAuNC0xLjItMC45YzAtMC40LDAuNi0wLjYsMS4zLTAuNQoJCVMzMy45LDEyLjksMzMuOSwxMy4yeiIvPgoJCgkJPHJhZGlhbEdyYWRpZW50IGlkPSJYTUxJRF80MV8iIGN4PSItNjM1Ny4xNzYzIiBjeT0iMzE5Ni44MTkzIiByPSI1LjkyODUiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMTc5NiAtNi44MjI1NTRlLTAzIC0xLjM5MDY2MmUtMDIgMC4xNjU2IC0xMDYxLjc3ODYgLTU1Mi4yMjMzKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguMTMwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0RFN0YxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuMzM4OSIgc3R5bGU9InN0b3AtY29sb3I6I0RBN0QxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNTk5MyIgc3R5bGU9InN0b3AtY29sb3I6I0NFNzYwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuODYwMiIgc3R5bGU9InN0b3AtY29sb3I6I0JBNkMwNSIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQUQ2NTAwIi8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzlfIiBjbGFzcz0ic3QyNyIgZD0iTTM2LDIwLjljMCwwLjUtMC41LDAuOS0xLjIsMC44Yy0wLjYtMC4xLTEuMS0wLjUtMS0xLjFjMC0wLjUsMC41LTAuOSwxLjItMC44CgkJQzM1LjYsMTkuOSwzNi4xLDIwLjMsMzYsMjAuOXoiLz4KCQoJCTxyYWRpYWxHcmFkaWVudCBpZD0iU1ZHSURfNl8iIGN4PSItNjM2MS42ODE2IiBjeT0iMzE2Ny4wODY3IiByPSI4Ljg0MDgiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMTc5NiAtNi44MjI1NTRlLTAzIC0xLjM5MDY2MmUtMDIgMC4xNjU2IC0xMDYxLjc3ODYgLTU1Mi4yMjMzKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguNjAwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0M3NzMxNSIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuMzc3NCIgc3R5bGU9InN0b3AtY29sb3I6I0MzNzExMyIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNjcxOCIgc3R5bGU9InN0b3AtY29sb3I6I0I3NkMwRiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTY2OSIgc3R5bGU9InN0b3AtY29sb3I6I0EzNjQwNyIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQTE2MzA2Ii8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggY2xhc3M9InN0MjgiIGQ9Ik0zNS41LDE2LjFjMCwwLjQsMC4zLDAuNywwLjcsMC44YzAuNCwwLjEsMC44LTAuMiwwLjktMC41di0wLjFsMCwwYzAtMC4zLTAuNC0wLjUtMC43LTAuNQoJCWMtMC40LDAtMC42LDAtMC43LDAuMmwwLDBDMzUuNiwxNS45LDM1LjUsMTYsMzUuNSwxNi4xeiIvPgoJCgkJPHJhZGlhbEdyYWRpZW50IGlkPSJYTUxJRF80Ml8iIGN4PSItNjM3NC4wOTMzIiBjeT0iMzE4NS45NTI0IiByPSI0LjM5ODUiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuMTc5NiAtNi44MjI1NTRlLTAzIC0xLjM5MDY2MmUtMDIgMC4xNjU2IC0xMDYxLjc3ODYgLTU1Mi4yMjMzKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgoJCTxzdG9wICBvZmZzZXQ9IjguMTMwMDAwZS0wMiIgc3R5bGU9InN0b3AtY29sb3I6I0RFN0YxNCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuMzM4OSIgc3R5bGU9InN0b3AtY29sb3I6I0RBN0QxMiIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuNTk5MyIgc3R5bGU9InN0b3AtY29sb3I6I0NFNzYwRCIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuODYwMiIgc3R5bGU9InN0b3AtY29sb3I6I0JBNkMwNSIvPgoJCTxzdG9wICBvZmZzZXQ9IjAuOTg3IiBzdHlsZT0ic3RvcC1jb2xvcjojQUQ2NTAwIi8+Cgk8L3JhZGlhbEdyYWRpZW50PgoJPHBhdGggaWQ9IlhNTElEXzhfIiBjbGFzcz0ic3QyOSIgZD0iTTM4LjksMTkuMWMwLDAuMy0wLjMsMC40LTAuNiwwLjRjLTAuNCwwLTAuNS0wLjMtMC41LTAuNnMwLjMtMC40LDAuNi0wLjQKCQlDMzguNywxOC41LDM4LjksMTguOCwzOC45LDE5LjF6Ii8+CjwvZz4KPC9zdmc+Cg==',\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'token.cheddar.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Pulse',\n symbol: 'PULSE',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGNpcmNsZSBjeD0iMTYiIGN5PSIxNiIgcj0iMTYiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNNi41NTAzNSAxOS4xMjM5TDkuMTcxNjYgMTQuOTQ5MkM5LjMyNzMxIDE0LjcwMTMgOS41OTk0OCAxNC41NTA4IDkuODkyMiAxNC41NTA4SDE4LjQxNEMxOS41NDEyIDE0LjU1MDggMjAuNTYxNCAxMy44ODM2IDIxLjAxMzMgMTIuODUwOUMyMS4zNjQ3IDEyLjA0NzYgMjAuNzc2MSAxMS4xNDc3IDE5Ljg5OTMgMTEuMTQ3N0gxMS45NzQyTDExLjU0ODggMTEuMjU0TDEzLjY0NjEgNy40NDA3OEMxMy43OTU2IDcuMTY4OTEgMTQuMDgxMyA3IDE0LjM5MTUgN0gyMi4wNzU0QzI1LjA1NDMgNyAyNy4xMTA3IDkuOTgyNzkgMjYuMDUxMyAxMi43NjdMMjUuODYzMSAxMy4yNjEzQzI0LjU0NDQgMTYuNzI2OSAyMS4yMjE4IDE5LjAxNzYgMTcuNTEzOCAxOS4wMTc2SDYuOTc1NzVMNi41NTAzNSAxOS4xMjM5Wk04LjM2ODg0IDE5Ljk3NDdDNy4wNTA0MiAxOS45NzQ3IDUuODM2NTUgMjAuNjkyNSA1LjIwMTE4IDIxLjg0NzdDNC42MTIyMyAyMi45MTg1IDUuMzg2OTQgMjQuMjI4NyA2LjYwOTAzIDI0LjIyODdIMTAuODA0NEwxMy40NjMxIDE5Ljg2ODRMMTMuMTQ0MSAxOS45NzQ3SDguMzY4ODRaIiBmaWxsPSJ1cmwoI3BhaW50MF9saW5lYXJfMjBfMykiLz4KPGRlZnM+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQwX2xpbmVhcl8yMF8zIiB4MT0iMTguMDI2NiIgeTE9IjUuNTI5MjYiIHgyPSIyLjI2ODYxIiB5Mj0iMzAuMTExNyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgo8c3RvcCBzdG9wLWNvbG9yPSIjREQ1OUZGIi8+CjxzdG9wIG9mZnNldD0iMC40NzM5NTgiIHN0b3AtY29sb3I9IiM1MDY5RkYiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMDAyNUZGIi8+CjwvbGluZWFyR3JhZGllbnQ+CjwvZGVmcz4KPC9zdmc+Cg==',\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '52a047ee205701895ee06a375492490ec9c597ce.factory.bridge.near',\n },\n {\n decimals: 18,\n icon:\n 'data:image/png;base64,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',\n name: 'Ether',\n reference: null,\n reference_hash: null,\n spec: 'ft-1.0.0',\n symbol: 'ETH',\n id: 'aurora',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Pixeltoken',\n symbol: 'PXT',\n icon:\n 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAANdJREFUWIXll70RwjAMhWUuNGwARVgEmuyQJRgo7AA7uGESGioaGlpTcK+w7nR+gcIyfJ1zys/7dHKSsO53SSqyqHlzEZFu7gm364Wq22z3VF07BpB8CANXn971JRP+Dejk8fSgLoz6kgm/Btjk58MqW4/TM6svmfBrQIOkSAiO92W2Hmc+gF8D6BV6h17qhOxUWPg18C16OizaN2AlxXTEFEWkxZ2QRe8DoJQctG8AIDH4vS8iFjY5aM8Au8Ox+DdgvRUBO+8W/g0AbUIf/5TqBsLf/x2/ADJHSOenTxC2AAAAAElFTkSuQmCC',\n reference: '',\n reference_hash: '',\n decimals: 6,\n id: 'pixeltoken.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Debio',\n symbol: 'DBIO',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIxOTAgOTcgNDIwIDQyMCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgODAwIDgwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZGVmcz48c3R5bGU+LnN0MHtmaWxsOiMzNjM2MzZ9LnN0M3tmaWxsOiNmZjU2ZTB9PC9zdHlsZT48L2RlZnM+PGNpcmNsZSBjbGFzcz0ic3QzIiBjeD0iNDAwIiBjeT0iMzA3LjM5IiByPSIyMDguNTgiLz48cGF0aCBkPSJNNDczLjk5IDIxMS4zczIuMzQgNTYuMjUtNzcuMzQgOTguNDMtNzAuMzEgOTMuNzQtNzAuMzEgOTMuNzQiIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiNlNmU2ZTY7c3Ryb2tlLXdpZHRoOjM3LjQ5NzU7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6MTAiLz48cGF0aCBkPSJNMzI2LjAxIDIxMS4zcy0yLjM0IDU2LjI1IDc3LjM0IDk4LjQzIDcwLjMxIDkzLjc0IDcwLjMxIDkzLjc0IiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojZmZmO3N0cm9rZS13aWR0aDozNy40OTc1O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjEwIi8+PGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iNDAwIiBjeT0iMjE2LjQyIiByPSIyMC40OSIvPjxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjQwMCIgY3k9IjM5OC4zNiIgcj0iMjAuNDkiLz48dGV4dCB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMzYuMzQyIDY1OC4wNzUpIiBjbGFzcz0ic3QzIiBzdHlsZT0id2hpdGUtc3BhY2U6cHJlO2ZvbnQtc2l6ZToxMTIuNDkyNXB4O2ZvbnQtZmFtaWx5OidBcnRlZ3JhU2Fucy1TZW1pQm9sZCciPkRlQmlvPC90ZXh0Pjwvc3ZnPg==',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'dbio.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Aurora',\n symbol: 'AURORA',\n icon:\n \"data:image/svg+xml,%3Csvg version='1.1' id='Layer_1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' x='0px' y='0px' viewBox='0 0 288 288' style='enable-background:new 0 0 288 288;' xml:space='preserve'%3E %3Cstyle type='text/css'%3E .st0%7Bfill:%2370D44B;%7D .st1%7Bfill:%23FFFFFF;%7D %3C/style%3E %3Cpath class='st0' d='M144,0L144,0c79.5,0,144,64.5,144,144v0c0,79.5-64.5,144-144,144h0C64.5,288,0,223.5,0,144v0 C0,64.5,64.5,0,144,0z'/%3E %3Cpath class='st1' d='M144,58.8c7.6,0,14.5,4.3,17.9,11.1l56.2,112.5c4.9,9.9,0.9,21.9-9,26.8c-2.8,1.4-5.8,2.1-8.9,2.1H87.8 c-11,0-20-9-20-20c0-3.1,0.7-6.2,2.1-8.9l56.2-112.5C129.5,63,136.4,58.7,144,58.8 M144,45c-12.8,0-24.5,7.2-30.2,18.7L57.6,176.2 c-8.3,16.7-1.6,36.9,15.1,45.3c4.7,2.3,9.9,3.6,15.1,3.6h112.5c18.6,0,33.8-15.1,33.8-33.7c0-5.2-1.2-10.4-3.6-15.1L174.2,63.7 C168.5,52.2,156.8,45,144,45z'/%3E %3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: 'aaaaaa20d9e0e2461697782ef11675f668207961.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Meta Token',\n symbol: '$META',\n icon:\n \"data:image/svg+xml,%3csvg width='96' height='96' viewBox='0 0 96 96' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3crect width='96' height='96' rx='48' fill='white'/%3e%3cpath d='M29.2241 28.7456C28.396 27.9423 27.0094 28.5289 27.0091 29.6825L27 66.6773C26.9997 67.8501 28.4257 68.4286 29.2426 67.5872L48.6529 47.5943L29.2241 28.7456Z' fill='%23231B51'/%3e%3cpath d='M66.7759 28.7456C67.604 27.9423 68.9906 28.5289 68.9909 29.6825L69 66.6773C69.0003 67.8501 67.5743 68.4286 66.7574 67.5872L47.3471 47.5943L66.7759 28.7456Z' fill='%23231B51'/%3e%3c/svg%3e\",\n reference: 'https://metapool.app',\n reference_hash: null,\n decimals: 24,\n id: 'meta-token.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Potato 🥔',\n symbol: 'POTATO',\n icon:\n 'data:image/jpeg;base64,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',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'v1.dacha-finance.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Flux Token',\n symbol: 'FLX',\n icon:\n \"data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg width='140px' height='140px' viewBox='0 0 140 140' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Ctitle%3EFlux Logo New%3C/title%3E%3Cdefs%3E%3CradialGradient cx='50%25' cy='0%25' fx='50%25' fy='0%25' r='248.533062%25' gradientTransform='translate(0.500000,0.000000),scale(1.000000,0.393939),rotate(90.000000),translate(-0.500000,-0.000000)' id='radialGradient-1'%3E%3Cstop stop-color='%23FE84FC' offset='0%25'%3E%3C/stop%3E%3Cstop stop-color='%232ED1FF' offset='100%25'%3E%3C/stop%3E%3C/radialGradient%3E%3C/defs%3E%3Cg id='logos' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='Group' transform='translate(-143.000000, -251.000000)'%3E%3Cg id='Group-2' transform='translate(0.000000, 251.000000)'%3E%3Cg id='Flux-Logo' transform='translate(143.000000, 0.000000)'%3E%3Cg id='Flux-Logo-New' transform='translate(70.000000, 70.000000) rotate(90.000000) translate(-70.000000, -70.000000) '%3E%3Ccircle id='Oval' fill='%23FFFFFF' cx='70' cy='70' r='70'%3E%3C/circle%3E%3Crect id='Rectangle' fill='%230F0E25' transform='translate(70.000000, 83.000000) rotate(90.000000) translate(-70.000000, -83.000000) ' x='57' y='50' width='26' height='66' rx='13'%3E%3C/rect%3E%3Cpath d='M50,30 C57.1797017,30 63,35.8202983 63,43 L63,96 L63,96 L50,96 C42.8202983,96 37,90.1797017 37,83 L37,43 C37,35.8202983 42.8202983,30 50,30 Z' id='Rectangle' fill='%230F0E25'%3E%3C/path%3E%3Cpath d='M63,44 L76,44 C83.1797017,44 89,49.8202983 89,57 L89,97 C89,104.179702 83.1797017,110 76,110 C68.8202983,110 63,104.179702 63,97 L63,44 L63,44 Z' id='Rectangle' fill='url(%23radialGradient-1)'%3E%3C/path%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '3ea8ea4237344c9931214796d9417af1a1180770.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'nUSDO',\n symbol: 'nUSDO',\n icon:\n 'data:image/png;base64,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',\n reference: '',\n reference_hash: '',\n decimals: 8,\n id: 'v3.oin_finance.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'oinfinance',\n symbol: 'OIN',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 974.66 974.66'%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bisolation:isolate;%7D.cls-2%7Bfill:%235a8dff;%7D.cls-3%7Bfill:%23fff;%7D.cls-4,.cls-5%7Bfill:%231b57f6;%7D.cls-5%7Bmix-blend-mode:multiply;%7D%3C/style%3E%3C/defs%3E%3Cg class='cls-1'%3E%3Cg id='图层_1' data-name='图层 1'%3E%3Ccircle class='cls-2' cx='487.33' cy='484.76' r='473.82'/%3E%3Ccircle class='cls-3' cx='487.33' cy='484.76' r='358.99'/%3E%3Cpath class='cls-4' d='M487.33,98.08c-213.55,0-386.67,173.12-386.67,386.68S273.78,871.43,487.33,871.43,874,698.31,874,484.76,700.88,98.08,487.33,98.08ZM368.59,297.83a9,9,0,0,1,12.71-.14,287,287,0,0,0,137.53,75,110.56,110.56,0,0,1,51.78,28.2,9,9,0,0,1-12.49,12.93,92.54,92.54,0,0,0-43.3-23.61,304.9,304.9,0,0,1-146.09-79.66A9,9,0,0,1,368.59,297.83Zm216.7,197.36a9,9,0,0,1,17.93,1.3c-1.86,25.6-15.92,49.6-38.58,65.86-18.31,13.13-40.08,19.87-63.28,19.87a130.41,130.41,0,0,1-32.7-4.3,9,9,0,0,1,4.52-17.4c29.91,7.76,58.67,3.23,81-12.78C572.48,534.61,583.82,515.45,585.29,495.19Zm-9.7-47.57a15.39,15.39,0,1,1,12.8,17.6A15.39,15.39,0,0,1,575.59,447.62Zm-244-118.07a9,9,0,0,1,12.71,0,335.48,335.48,0,0,0,163.36,90.53c30.07,6.9,50.7,33.19,48,61.16-1.64,17.07-9.08,30.42-21.52,38.59-8.23,5.41-18.1,8.14-28.9,8.14a76.36,76.36,0,0,1-23.39-3.91,9,9,0,1,1,5.52-17.1c14.54,4.69,27.64,3.93,36.9-2.15,7.73-5.08,12.39-13.82,13.49-25.29,2-20.88-15.76-37.71-34.1-41.92a353.42,353.42,0,0,1-172.1-95.35A9,9,0,0,1,331.59,329.55Zm-30,41.34a9,9,0,0,1,12.71-.23c36.29,35,81.18,62.68,133.43,82.22a9,9,0,0,1-3.15,17.41,8.89,8.89,0,0,1-3.14-.58c-54.58-20.41-101.55-49.38-139.62-86.11A9,9,0,0,1,301.56,370.89ZM452.39,512.8a15.39,15.39,0,1,1-12.8-17.6A15.38,15.38,0,0,1,452.39,512.8ZM278.9,429.48a9,9,0,0,1,12.54-2.07c38.33,27.47,67.76,43.32,105.66,61.43a9,9,0,1,1-7.75,16.21c-38.8-18.53-69-34.79-108.38-63A9,9,0,0,1,278.9,429.48Zm-4.46,60.34A9,9,0,0,1,287,487.67c45.31,32,91.6,55,137.57,68.37a9,9,0,0,1-2.5,17.62,8.76,8.76,0,0,1-2.51-.36c-47.9-13.9-96-37.78-142.94-70.95A9,9,0,0,1,274.44,489.82Zm18.28,73.95a9,9,0,0,1,12.38-2.89c44.19,27.46,93.91,45,123.06,51.75,27.43,6.32,56.78,9,65.69,9,77.91,0,141.29-63.38,141.29-141.29,0-65.78-46.6-123.81-110.81-138L516,340.57l0-.24a257.48,257.48,0,0,1-100.58-53,9,9,0,1,1,11.69-13.66A239.17,239.17,0,0,0,528.3,324.87l8.22,1.9,0,.16c68.06,19,116.62,82.18,116.62,153.46,0,87.82-71.45,159.27-159.27,159.27-9.61,0-40.9-2.87-69.72-9.51-30.5-7-82.46-25.38-128.52-54A9,9,0,0,1,292.72,563.77ZM493.85,688.36l-9-.07c-5.35-.12-10.74-.42-16.1-.9a302.94,302.94,0,0,1-109.22-31.85,9,9,0,1,1,8.2-16,284.85,284.85,0,0,0,102.64,29.94,225.63,225.63,0,0,0,23.34.87l7.29-.11c101.46-3.78,182.84-87.49,182.84-189.86,0-89.16-63.2-167.31-150.26-185.83l-.12,0-.11,0a206.73,206.73,0,0,1-49.14-18.68A9,9,0,0,1,492.69,260,188.85,188.85,0,0,0,537.56,277h0c95.18,20.37,164.23,105.85,164.23,203.35C701.82,595.07,608.53,688.36,493.85,688.36Z'/%3E%3Cpath class='cls-5' d='M144.68,484.76c0-206.19,161.39-374.67,364.73-386-7.27-.41-14.58-.64-21.94-.64-213.56,0-386.68,173.12-386.68,386.68S273.91,871.43,487.47,871.43c7.36,0,14.67-.23,21.94-.64C306.07,859.42,144.68,690.94,144.68,484.76Z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 8,\n id: '9aeb50f542050172359a0e1a25a9933bc8c01259.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Myria',\n symbol: 'MYRIA',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyBpZD0iTGF5ZXJfMSIgZGF0YS1uYW1lPSJMYXllciAxIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2MDAgNjAwIj48ZGVmcz48Y2xpcFBhdGggaWQ9ImNsaXAtcGF0aCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAtLjEzKSI+PHBhdGggc3R5bGU9ImZpbGw6bm9uZSIgZD0iTTAgMGg2MDB2NjAwSDB6Ii8+PC9jbGlwUGF0aD48c3R5bGU+LmNscy00e2ZpbGw6I2ZmZn08L3N0eWxlPjwvZGVmcz48ZyBzdHlsZT0iY2xpcC1wYXRoOnVybCgjY2xpcC1wYXRoKSI+PHBhdGggZD0iTTYwMCAzMDAuMTNjMCAxNjUuNjktMTM0LjMxIDMwMC0zMDAgMzAwUzAgNDY1LjgxIDAgMzAwLjEzIDEzNC4zMS4xMyAzMDAgLjEzczMwMCAxMzQuMzEgMzAwIDMwMCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCAtLjEzKSIgc3R5bGU9ImZpbGw6Izg2MmFlOSIvPjxwYXRoIGNsYXNzPSJjbHMtNCIgZD0iTTQ3MS4xMSA0MjEuMjFhMTcuNzUgMTcuNzUgMCAwIDAgMi4wNy04IDcuMjQgNy4yNCAwIDAgMCAwLTEuMVYyNjMuNDdhOTUuMzYgOTUuMzYgMCAwIDAtMTQyLjYxLTgxLjcybC0xLjQ5Ljg1LTEyNi42NCA3My4xMi0xLjExLjY1YTE4LjE4IDE4LjE4IDAgMCAwLTUuNzcgNS43NWMtLjE1LjIxLS4yNi40MS0uMzkuNjNhMTguMzMgMTguMzMgMCAwIDAgNi43MSAyNWwyNDMuODQgMTQwLjgzYTE4LjMzIDE4LjMzIDAgMCAwIDI1LTYuNzFjLjEzLS4yMi4yNC0uNDIuMzUtLjY1TTIxMi41NCAyNzEuOTNsMTQuNzQtOC41MyA2Mi44NC0zNi4yNiA0OS4zOC0yOC41MSAxLjYtLjkxYTc2LjM0IDc2LjM0IDAgMCAxIDExMyA2NS4yNnYxNDguNDNaIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIC0uMTMpIi8+PHBhdGggY2xhc3M9ImNscy00IiBkPSJNMTI4Ljg5IDQyMS4yMWExNy43NyAxNy43NyAwIDAgMS0yLjA4LTggNy41IDcuNSAwIDAgMSAwLTEuMVYyNjMuNDdhOTUuMzYgOTUuMzYgMCAwIDEgMTQyLjYxLTgxLjcybDEuNDkuODUgMTI2LjY1IDczLjExIDEuMTEuNjVhMTguMTcgMTguMTcgMCAwIDEgNS43NyA1Ljc1Yy4xNS4yMS4yNi40MS4zOS42M2ExOC4zMyAxOC4zMyAwIDAgMS02LjcxIDI1TDE1NC4yOCA0MjguNThhMTguMzMgMTguMzMgMCAwIDEtMjUtNi43MWMtLjEzLS4yMi0uMjQtLjQyLS4zNS0uNjVtMjU4LjUzLTE0OS4yOS0xNC43NC04LjUzLTYyLjgzLTM2LjI2LTQ5LjM5LTI4LjUyLTEuNi0uOTFhNzYuMzQgNzYuMzQgMCAwIDAtMTEzIDY1LjI2djE0OC40NFoiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLS4xMykiLz48L2c+PC9zdmc+',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'myriadcore.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'xRef Finance Token',\n symbol: 'xREF',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTYiIGhlaWdodD0iNjIiIHZpZXdCb3g9IjAgMCA1NiA2MiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTEuODU2OTMgMTcuODg1NkMxLjg1NjkzIDE2LjAyNzggMi44ODY5MiAxNC4zMjMyIDQuNTMxNTEgMTMuNDU5MkwyNS45MjE2IDIuMjIxNzJDMjcuMzc3NSAxLjQ1NjgzIDI5LjExNjUgMS40NTY4MyAzMC41NzI0IDIuMjIxNzJMNTEuOTYyNCAxMy40NTkyQzUzLjYwNyAxNC4zMjMyIDU0LjYzNyAxNi4wMjc4IDU0LjYzNyAxNy44ODU2VjQ1LjYzMDRDNTQuNjM3IDQ3LjYwMjEgNTMuNDc4MiA0OS4zODk4IDUxLjY3ODMgNTAuMTk0N0wzMC4yODgyIDU5Ljc2MDZDMjguOTg5NCA2MC4zNDE0IDI3LjUwNDYgNjAuMzQxNSAyNi4yMDU3IDU5Ljc2MDZMNC44MTU3IDUwLjE5NDdDMy4wMTU3NCA0OS4zODk4IDEuODU2OTMgNDcuNjAyMSAxLjg1NjkzIDQ1LjYzMDRMMS44NTY5MyAxNy44ODU2WiIgZmlsbD0idXJsKCNwYWludDBfbGluZWFyXzEyNDYxXzIwNzUpIiBzdHJva2U9IiMwMEM2QTIiIHN0cm9rZS13aWR0aD0iMiIvPgo8cGF0aCBkPSJNMTMuNjk3OCAyMC4zMzJMMjguMjQ3MSAxNEwyOC4yMjAyIDMwLjU0MTdMMjAuMjgwMyAyMy43MTE2TDEyLjMxMzUgMzAuOTI5NVYyMi4zNjU0QzEyLjMxNTIgMjEuNDkyMiAxMi44NTM4IDIwLjY5OTMgMTMuNjk3OCAyMC4zMzJaIiBmaWxsPSIjMDBDNkEyIiBmaWxsLW9wYWNpdHk9IjAuNSIvPgo8cGF0aCBkPSJNMTQuMTAyMyA0Mi43NjQ1TDI4LjI0NzEgNDYuODYyNkwyOC4yMjAyIDM0LjU5NDRMMjAuMjc5NCAyNy45NDE0TDEyLjMxMzUgMzQuOTcyMlY0MC41Mjc0QzEyLjMxMzUgNDEuNTUxNSAxMy4wMzY3IDQyLjQ1NTkgMTQuMTAyMyA0Mi43NjQ1WiIgZmlsbD0iIzAwQzZBMiIgZmlsbC1vcGFjaXR5PSIwLjUiLz4KPHBhdGggZD0iTTQzLjY0NDUgNDIuNzYzM0wyOC4yNzQ0IDQ2Ljg2MzJMMjguMjQ2OCAzNC41MTU3TDQzLjIyMSAyMi40NjQ4QzQzLjIyMSAyMi40NjQ4IDQ1Ljc5MyAyNC4zOTk2IDQ1LjAzNzMgMjcuODE5NkM0My43MDQ4IDMzLjg1MTEgMzUuMTc5NiAzNS45ODY5IDM1LjE3OTYgMzUuOTg2OUw0My45MDk2IDQxLjE1NjFDNDQuNjE1NSA0MS41NzggNDQuNDU1NCA0Mi41NDcgNDMuNjQ0NSA0Mi43NjMzWiIgZmlsbD0iIzQ1RkZERSIvPgo8cGF0aCBkPSJNMzguNTkwMyAxOC45NzkzTDI4LjI3MzQgMTRMMjguMjQ2OCAzMC40MzE1TDQwLjY5NSAyMC4zNTA5QzQwLjY5NSAyMC4zNTA5IDQwLjQyNzEgMjAuMDU5NyAzOS42OTAxIDE5LjU4MDVDMzkuNDI4OSAxOS40MTE0IDM4LjU5MDMgMTguOTc5MyAzOC41OTAzIDE4Ljk3OTNaIiBmaWxsPSIjNDVGRkRFIi8+CjxwYXRoIGQ9Ik00MC41NTEgMTYuMDEwMUw0Ni42NjAyIDE4LjI4MDVDNDYuOTY3NSAxOC4zOTQzIDQ3LjE2OCAxOC42NjU2IDQ3LjE2OCAxOC45NjVWMjMuMTIwN0M0Ny4xNjggMjMuNDM4OCA0Ni43MjYgMjMuNTgyMiA0Ni41MDQyIDIzLjMzNDNMNDAuMjU1MyAxNi4zNjg3QzQwLjA4OTMgMTYuMTgzMSA0MC4zMDYyIDE1LjkxODEgNDAuNTUxIDE2LjAxMDFaIiBmaWxsPSIjNDVGRkRFIi8+CjxkZWZzPgo8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MF9saW5lYXJfMTI0NjFfMjA3NSIgeDE9IjI4LjI0NyIgeTE9IjEiIHgyPSIyOC4yNDciIHkyPSI2MC42NzM1IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIHN0b3AtY29sb3I9IiMwMTEzMjAiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMDAxMzIwIi8+CjwvbGluZWFyR3JhZGllbnQ+CjwvZGVmcz4KPC9zdmc+Cg==',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'xtoken.ref-finance.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Solana',\n symbol: 'SOL',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiBoZWlnaHQ9IjEwMCIgdmlld0JveD0iMCAwIDEwMCAxMDAiIHdpZHRoPSIxMDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxsaW5lYXJHcmFkaWVudCBpZD0iYSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSI1MCIgeDI9IjUwIiB5MT0iMjciIHkyPSI3NCI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjMTRlNmFkIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjYTk2NGRlIi8+PC9saW5lYXJHcmFkaWVudD48Y2xpcFBhdGggaWQ9ImIiPjxwYXRoIGQ9Im0wIDBoMTAwdjEwMGgtMTAweiIvPjwvY2xpcFBhdGg+PGcgY2xpcC1wYXRoPSJ1cmwoI2IpIj48cGF0aCBkPSJtNTAgMGM5Ljg4OTEgMCAxOS41NTYxIDIuOTMyNDUgMjcuNzc4NSA4LjQyNjUyIDguMjIyNSA1LjQ5NDA4IDE0LjYzMTEgMTMuMzAyOTggMTguNDE1NSAyMi40MzkyOHM0Ljc3NSAxOS4xODk3IDIuODQ1MyAyOC44ODg3Yy0xLjkyOTMgOS42OTkxLTYuNjkxMyAxOC42MDgyLTEzLjY4NCAyNS42MDA4LTYuOTkyNiA2Ljk5MjctMTUuOTAxNyAxMS43NTQ3LTI1LjYwMDggMTMuNjg0LTkuNjk5IDEuOTI5Ny0xOS43NTI0LjkzOTEtMjguODg4Ny0yLjg0NTNzLTE2Ljk0NTItMTAuMTkzLTIyLjQzOTI4LTE4LjQxNTVjLTUuNDk0MDctOC4yMjI0LTguNDI2NTItMTcuODg5NC04LjQyNjUyLTI3Ljc3ODUgMC0xMy4yNjA4IDUuMjY3ODQtMjUuOTc4NSAxNC42NDQ3LTM1LjM1NTMgOS4zNzY4LTkuMzc2ODYgMjIuMDk0NS0xNC42NDQ3IDM1LjM1NTMtMTQuNjQ0N3oiIGZpbGw9IiMwMDAiLz48ZyBmaWxsPSJ1cmwoI2EpIiBmaWxsLW9wYWNpdHk9Ii45MiI+PHBhdGggZD0ibTMwLjM4MDYgNjIuNzg4OWMuMzEzMS0uMzIzNC44MzQ5LS41MzkgMS4zNTY3LS41MzloNDYuMjMwN2MuODM0OSAwIDEuMjUyMyAxLjA3NzkuNjI2MiAxLjcyNDdsLTkuMTgzNiA5LjQ4NjRjLS4zMTMuMzIzNC0uODM0OC41MzktMS4zNTY2LjUzOWgtNDYuMTI2NGMtLjgzNDggMC0xLjI1MjItMS4wNzgtLjYyNjEtMS43MjQ4eiIvPjxwYXRoIGQ9Im0zMC4zODA2IDI3LjUzOWMuMzEzMS0uMzIzNC44MzQ5LS41MzkgMS4zNTY3LS41MzloNDYuMjMwN2MuODM0OSAwIDEuMjUyMyAxLjA3OC42MjYxIDEuNzI0OGwtOS4xODM1IDkuNDg2M2MtLjMxMzEuMzIzNC0uODM0OC41MzktMS4zNTY2LjUzOWgtNDYuMTI2NGMtLjgzNDkgMC0xLjI1MjMtMS4wNzgtLjYyNjEtMS43MjQ4eiIvPjxwYXRoIGQ9Im02OS41MTUgNDUuMDAxOGMtLjMxMzEtLjMyMzQtLjgzNDktLjUzOS0xLjM1NjctLjUzOWgtNDYuMjMwN2MtLjgzNDggMC0xLjI1MjIgMS4wNzgtLjYyNjEgMS43MjQ4bDkuMTgzNSA5LjQ4NjRjLjMxMzEuMzIzMy44MzQ5LjUzODkgMS4zNTY3LjUzODloNDYuMjMwNmMuODM0OSAwIDEuMjUyNC0xLjA3OC42MjYyLTEuNzI0OHoiLz48L2c+PC9nPjwvc3ZnPg==',\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'sol.token.a11bd.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'TerraUSD',\n symbol: 'UST',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiBoZWlnaHQ9IjEwMCIgdmlld0JveD0iMCAwIDEwMCAxMDAiIHdpZHRoPSIxMDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0ibTgxLjA5NiAxMy43MjItLjAxLS4wMS4wMTQtLjAwOGE0NC4xNzQgNDQuMTc0IDAgMCAwIC0yOC43NjUtMTAuNTc0IDQ0LjE2NyA0NC4xNjcgMCAwIDAgLTE4LjAxIDMuODI1Yy0zLjcwNSAxLjU2NS02LjcxNSAzLjYzNS05LjE5NSA2Ljg4NS0xMi43NCAxNi44MyAyOS45NiAyOS4wNiA1Mi43OSAyOS4xMDQgMTAuNDkyIDcuNTI4IDEzLjQ0Ni0yMS4yMzYgMy4xNzctMjkuMjIyeiIgZmlsbD0iIzBkM2NhNCIvPjxwYXRoIGQ9Im0zNi44OTMgMTQuMDYzYy01Ljg2MyA4LjgxNi0yNS40MDMgMTUuMDI3LTI4LjYxNSAxNC4wNTdsLS4wMTktLjA0Yy4xMzItLjI2OC4yNjgtLjUzMi40LS43OTVhNDYuNjcyIDQ2LjY3MiAwIDAgMSA4LjQ4LTExLjU4IDQ3LjIxIDQ3LjIxIDAgMCAxIDkuMTg1LTcuMTUxYzIuNzM3LTEuNTg0IDUuNTM2LTEuNjg4IDYuNDU4LTEuNzIgOC43MDguMTc3IDQuMTYgNy4xNiA0LjExIDcuMjI5em0tNC44MDYgNjIuMzAzYy40MTggMi43NzItLjAwOSAxMy43MTMtLjU4IDE0LjYzNC0uNDg2LjAzMi0xLjUwMy4wOTUtNC40NDgtMS41NTdhNDYuODI3IDQ2LjgyNyAwIDAgMSAtOS45Mi03LjU3MyA0Ni45NTIgNDYuOTUyIDAgMCAxIC04LjQ4LTExLjU4IDQ2LjUyNCA0Ni41MjQgMCAwIDEgLTUuMjIzLTIxLjVjMC0yLjU4MS4yMDgtNS4xMTguNjEyLTcuNTg3YTQ2LjUxMSA0Ni41MTEgMCAwIDEgMi4yNjUtOC41OThjMy4zNzYgNC40ODMgNy4yNzggOC41NDQgMTAuNTk1IDEzLjA3MyAzLjE1OSA0LjMxNSA3LjUwNiAxMS4zNDQgOC4zODYgMTIuODUgNS41IDkuMzE2IDYuMzc2IDE1LjA3NCA2Ljc5MyAxNy44Mzh6bS0zLjMxMi0zOC44NTdjLTIuMDA2LTE1LjMxIDI5LjA1NS0yNS45NzkgNDIuNzA1LTI2LjM4MiAxLjYzOC4wMTggNi42MTYuMDc3IDkuNTI1IDIuNDM2IDUzLjQ5NSA1MC45MzctNDYuOTU3IDY0LjI0LTUyLjIzIDIzLjk0N3oiIGZpbGw9IiM1NDk0ZjgiLz48cGF0aCBkPSJtMjAuNDU3IDkyLjM1YzAgMS44MjUgMS4yNyAzLjMwNCAyLjg0NSAzLjMxMyAzNy40OTYuMjU5IDczLjY5NC0xLjQ2IDczLjY5NC03LjA4MyAwLTE3LjAwNy03Ni41MzkgMy43Ny03Ni41MzkgMy43N3oiIGZpbGw9IiM3NjAxMDEiLz48cGF0aCBkPSJtMjMuMzIgNDQuMTg3YTIuODYzIDIuODYzIDAgMCAwIC0yLjg2MyAyLjg2M3Y0NS4zYzAgMS41NzQgMS4yNyAyLjg1IDIuODQ1IDIuODU4IDM3LjQ5Ni0uMjc2IDczLjc0LTEyLjY4NyA3My42OTQtNi42M3YtNTEuMDI0Yy4wNDUtNi4wNTMtMzYuMTg5IDYuMzUzLTczLjY3NiA2LjYzNHoiIGZpbGw9IiNkZTMwMzAiLz48cGF0aCBkPSJtODQgODBjOC44LTEuNiAxMi4zMzMtLjMzMyAxMyAuNXYzLjVjLTEuNi0xLjYtOS4zMzMtLjY2Ny0xMyAwLTIwLjUgNC41LTQ3LjgzMyA2LjMzMy02My41IDcuNXYtNGMxMS41IDAgNTIuNS01LjUgNjMuNS03LjV6bTAtOC4yMzJjOC44LTEuNiAxMi4zMzMtLjMzMyAxMyAuNXYzLjVjLTEuNi0xLjYtOS4zMzMtLjY2Ny0xMyAwLTIwLjUgNC41LTQ3LjgzMyA2LjMzMy02My41IDcuNXYtNGMxNC41IDEgNTIuNS01LjUgNjMuNS03LjV6bTAtOC4yMzJjOC44LTEuNiAxMi4zMzMtLjMzNCAxMyAuNXYzLjVjLTEuNi0xLjYtOS4zMzMtLjY2OC0xMyAwLTIwLjUgNC41LTQ3LjgzMyA2LjMzMi02My41IDcuNXYtNGMxNC41IDEgNTIuNS01LjUgNjMuNS03LjV6bTAtOC4yMzNjOC44LTEuNiAxMi4zMzMtLjMzMyAxMyAuNXYzLjVjLTEuNi0xLjYtOS4zMzMtLjY2Ny0xMyAwLTIwLjUgNC41LTQ3LjgzMyA2LjMzMy02My41IDcuNXYtNGMxNC41IDEgNTIuNS01LjUgNjMuNS03LjV6bTAtOC4yMzNjOC44LTEuNiAxMi4zMzMtLjMzMyAxMyAuNXYzLjVjLTEuNi0xLjYtOS4zMzMtLjY2Ni0xMyAwLTIwLjUgNC41LTQ3LjgzMyA2LjMzNC02My41IDcuNXYtNGMxNC41IDEgNTIuNS01LjUgNjMuNS03LjV6bTAtOC4yMzJjOC44LTEuNiAxMi4zMzMtLjMzMyAxMyAuNXYzLjVjLTEuNi0xLjYtOS4zMzMtLjY2Ny0xMyAwLTIwLjUgNC41LTQ3LjgzMyA2LjMzMy02My41IDcuNXYtNGMxNC41IDEgNTIuNS01LjUgNjMuNS03LjV6IiBmaWxsPSIjZmZmIi8+PHBhdGggZD0ibTI4LjU5MyA3MS41NGEyMDQuMTEyIDIwNC4xMTIgMCAwIDAgNy4wNjYtLjM3NiAyNTEuNzQ1IDI1MS43NDUgMCAwIDAgNi43MDYtLjU3MmMxLjEzLS4xMDkgMi4yNy0uMjIyIDMuNDQ1LS4zNSAxLjE3LS4xMjYgMi4zNjgtLjI1OCAzLjYxMi0uNDEyIDEuMjQzLS4xNSAyLjUzNi0uMzEzIDMuODg5LS40OSAxLjM1Mi0uMTczIDIuNzYzLS4zNzIgNC4yMzgtLjU5di0yNy41M2MtMTAuNTMyIDEuNTU2LTIyLjMxNyAyLjg3Mi0zNC4yMjkgMi45NThhMi44NjMgMi44NjMgMCAwIDAgLTIuODYzIDIuODY0djI0LjY1M2MxLjQ4NCAwIDIuODk1LS4wMTggNC4yNDctLjA1IDEuMzUzLS4wMTggMi42NDYtLjA2IDMuODktLjEwNXoiIGZpbGw9IiMxYTNhYjkiLz48cGF0aCBkPSJtMjMuMDUzIDQ2LjQ4IDEuMjIxIDEuODYzLTIuMjIzLjEyNiAxLjAwMi0xLjk4OHptNS4xMzUtLjI5IDEuMjIgMS44NjItMi4yMjIuMTI2em01LjEzNS0uMjkyIDEuMjIgMS44NjItMi4yMjMuMTI2em01LjEzNS0uMjkxIDEuMjIgMS44NjItMi4yMjMuMTI2em01LjEzNC0uMjkyIDEuMjIxIDEuODYyLTIuMjIzLjEyNnptNS4xMzUtLjI5MSAxLjIyMSAxLjg2Mi0yLjIyMy4xMjZ6bTUuMTMzLS4yOTIgMS4yMiAxLjg2Mi0yLjIyMi4xMjZ6bS0yOC4wNDcgNS4wMjYgMS4yMiAxLjg2Mi0yLjIyMi4xMjd6bTUuMTM1LS4yOTEgMS4yMiAxLjg2My0yLjIyMy4xMjZ6bTUuMTM1LS4yOTIgMS4yMiAxLjg2My0yLjIyMy4xMjZ6bTUuMTM0LS4yOTEgMS4yMjEgMS44NjItMi4yMjMuMTI3em01LjEzNS0uMjkyIDEuMjIxIDEuODYzLTIuMjIzLjEyNnptNS4xMzUtLjI5MSAxLjIyIDEuODYyLTIuMjIzLjEyN3ptLTI4LjA0NyA1LjAyNiAxLjIyIDEuODYyLTIuMjIzLjEyNnptNS4xMzUtLjI5MiAxLjIyIDEuODYzLTIuMjIzLjEyNnptNS4xMzUtLjI5MiAxLjIyIDEuODYzLTIuMjIzLjEyNiAxLjAwMi0xLjk4OXptNS4xMzQtLjI5IDEuMjIxIDEuODYyLTIuMjIzLjEyNiAxLjAwMi0xLjk4OXptNS4xMzUtLjI5MyAxLjIyIDEuODYzLTIuMjIyLjEyNnptNS4xMzUtLjI5IDEuMjIgMS44NjItMi4yMjMuMTI2em01LjEzMi0uMjkyIDEuMjIxIDEuODYyLTIuMjIzLjEyNiAxLjAwMi0xLjk4OXptLTI4LjA0MiA1LjAyNiAxLjIyIDEuODYyLTIuMjIzLjEyNyAxLjAwMy0xLjk5em01LjEzNC0uMjkxIDEuMjIxIDEuODYyLTIuMjIzLjEyNnptNS4xMzUtLjI5MyAxLjIyMSAxLjg2My0yLjIyMy4xMjd6bTUuMTM1LS4yOSAxLjIyIDEuODYyLTIuMjIzLjEyNnptNS4xMzUtLjI5MiAxLjIyIDEuODYyLTIuMjIzLjEyNnptNS4xMzQtLjI5MSAxLjIyMSAxLjg2Mi0yLjIyMy4xMjZ6bS0yOC4wNDggNS4wMjYgMS4yMiAxLjg2My0yLjIyMy4xMjZ6bTUuMTM0LS4yOTEgMS4yMjEgMS44NjMtMi4yMjMuMTI2em01LjEzNS0uMjkyIDEuMjIxIDEuODYzLTIuMjIzLjEyNnptNS4xMzUtLjI5IDEuMjIgMS44NjItMi4yMjMuMTI2IDEuMDAzLTEuOTg5em01LjEzNS0uMjkzIDEuMjIgMS44NjMtMi4yMjMuMTI2em01LjEzNC0uMjkxIDEuMjIxIDEuODYyLTIuMjIzLjEyN3ptNS4xMzMtLjI5MiAxLjIyMSAxLjg2My0yLjIyMy4xMjZ6bS0zMC42NTUgOS4wNDEgMS4yMjIgMS44NjMtMi4yMjMuMTI2IDEuMDAyLTEuOTg5em01LjEzNi0uMjkxIDEuMjIgMS44NjMtMi4yMjMuMTI2em01LjEzNC0uMjkyIDEuMjIxIDEuODYzLTIuMjIzLjEyNnptNS4xMzUtLjI5MSAxLjIyMSAxLjg2My0yLjIyMy4xMjZ6bTUuMTM1LS4yOTEgMS4yMjEgMS44NjItMi4yMjMuMTI2IDEuMDAyLTEuOTg5em01LjEzNS0uMjkyIDEuMjIgMS44NjMtMi4yMjMuMTI2em01LjEzMy0uMjkyIDEuMjIgMS44NjMtMi4yMjMuMTI2em0tMjguMTk2LTIuMjY2IDEuMjIxIDEuODYzLTIuMjIzLjEyNiAxLjAwMi0xLjk4OHptNS4xMzUtLjI5IDEuMjIxIDEuODYyLTIuMjIzLjEyNnptNS4xMzUtLjI5MiAxLjIyIDEuODYyLTIuMjIzLjEyNnptNS4xMzQtLjI5MSAxLjIyMSAxLjg2Mi0yLjIyMy4xMjZ6bTUuMTM1LS4yOTIgMS4yMjEgMS44NjItMi4yMjMuMTI2em01LjEzNS0uMjkyIDEuMjIxIDEuODYzLTIuMjIzLjEyNnoiIGZpbGw9IiNmZmYiLz48L3N2Zz4=',\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'ust.token.a11bd.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Celo',\n symbol: 'CELO',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiBoZWlnaHQ9IjEwMCIgdmlld0JveD0iMCAwIDEwMCAxMDAiIHdpZHRoPSIxMDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxjbGlwUGF0aCBpZD0iYSI+PHBhdGggZD0ibTAgMGgxMDB2MTAwaC0xMDB6Ii8+PC9jbGlwUGF0aD48ZyBjbGlwLXBhdGg9InVybCgjYSkiPjxwYXRoIGQ9Im01MCAwYzkuODg5MSAwIDE5LjU1NjEgMi45MzI0NSAyNy43Nzg1IDguNDI2NTIgOC4yMjI1IDUuNDk0MDggMTQuNjMxMSAxMy4zMDI5OCAxOC40MTU1IDIyLjQzOTI4czQuNzc1IDE5LjE4OTcgMi44NDUzIDI4Ljg4ODdjLTEuOTI5MyA5LjY5OTEtNi42OTEzIDE4LjYwODItMTMuNjg0IDI1LjYwMDgtNi45OTI2IDYuOTkyNy0xNS45MDE3IDExLjc1NDctMjUuNjAwOCAxMy42ODQtOS42OTkgMS45Mjk3LTE5Ljc1MjQuOTM5MS0yOC44ODg3LTIuODQ1M3MtMTYuOTQ1Mi0xMC4xOTMtMjIuNDM5MjgtMTguNDE1NWMtNS40OTQwNy04LjIyMjQtOC40MjY1Mi0xNy44ODk0LTguNDI2NTItMjcuNzc4NSAwLTEzLjI2MDggNS4yNjc4NC0yNS45Nzg1IDE0LjY0NDctMzUuMzU1MyA5LjM3NjgtOS4zNzY4NiAyMi4wOTQ1LTE0LjY0NDcgMzUuMzU1My0xNC42NDQ3eiIgZmlsbD0iI2ZiY2M1YyIvPjxnIGZpbGw9IiNmZmYiPjxwYXRoIGQ9Im00My41NDIxIDczLjcyNDljMy40MDg1LjAwODMgNi43NDI5LS45OTQ4IDkuNTgxMS0yLjg4MjUgMi44MzgxLTEuODg3NiA1LjA1MjQtNC41NzQ4IDYuMzYyNi03LjcyMTVzMS42NTczLTYuNjExNC45OTc1LTkuOTU1NWMtLjY1OTktMy4zNDQtMi4yOTcxLTYuNDE3Mi00LjcwNDMtOC44MzAzLTIuNDA3My0yLjQxMzItNS40NzY0LTQuMDU3OS04LjgxODktNC43MjU5LTMuMzQyNC0uNjY4MS02LjgwNzktLjMyOTQtOS45NTc4Ljk3My0zLjE0OTkgMS4zMDI1LTUuODQyNSAzLjUxMDItNy43MzcxIDYuMzQzOC0xLjg5NDYgMi44MzM1LTIuOTA1OSA2LjE2NTQtMi45MDU5IDkuNTc0IDAgNC41NjEgMS44MDkgOC45MzU5IDUuMDMwMiAxMi4xNjQ5IDMuMjIxMiAzLjIyOTEgNy41OTE2IDUuMDQ4OCAxMi4xNTI2IDUuMDZ6bTAgNi4yNzUxYy00LjY0OTYuMDA4My05LjE5NzMtMS4zNjI5LTEzLjA2NzMtMy45NC0zLjg3MDEtMi41NzcyLTYuODg4Ny02LjI0NDQtOC42NzM4LTEwLjUzNzgtMS43ODUyLTQuMjkzMy0yLjI1NjYtOS4wMTk3LTEuMzU0Ni0xMy41ODFzMy4xMzY5LTguNzUyNSA2LjQyMTctMTIuMDQzM2MzLjI4NDgtMy4yOTA3IDcuNDcyMS01LjUzMzEgMTIuMDMxOC02LjQ0MzMgNC41NTk3LS45MTAxIDkuMjg2OS0uNDQ3MiAxMy41ODM0IDEuMzMwMnM3Ljk2OTIgNC43ODk0IDEwLjU1MzMgOC42NTQ5YzIuNTg0IDMuODY1NSAzLjk2MzQgOC40MTA2IDMuOTYzNCAxMy4wNjAzLjAwNTUgMy4wODQtLjU5NzIgNi4xMzg5LTEuNzczNiA4Ljk4OTgtMS4xNzYzIDIuODUwOS0yLjkwMzQgNS40NDE5LTUuMDgyMiA3LjYyNDZzLTQuNzY2NiAzLjkxNDQtNy42MTU0IDUuMDk1OS01LjkwMjYgMS43ODk3LTguOTg2NyAxLjc4OTd6Ii8+PHBhdGggZD0ibTU2LjUgNjAuNzI0OWMzLjQwODYuMDA4MyA2Ljc0MjktLjk5NDggOS41ODExLTIuODgyNHM1LjA1MjUtNC41NzQ5IDYuMzYyNi03LjcyMTZjMS4zMTAyLTMuMTQ2NyAxLjY1NzMtNi42MTEzLjk5NzUtOS45NTU0LS42NTk5LTMuMzQ0MS0yLjI5NzEtNi40MTcyLTQuNzA0My04LjgzMDQtMi40MDczLTIuNDEzMS01LjQ3NjQtNC4wNTc4LTguODE4OC00LjcyNTktMy4zNDI1LS42NjgtNi44MDgtLjMyOTQtOS45NTc5Ljk3MzEtMy4xNDk5IDEuMzAyNC01Ljg0MjUgMy41MTAyLTcuNzM3MSA2LjM0MzdzLTIuOTA1OSA2LjE2NTQtMi45MDU5IDkuNTc0YzAgNC41NjEgMS44MDkgOC45MzU5IDUuMDMwMiAxMi4xNjVzNy41OTE2IDUuMDQ4OCAxMi4xNTI2IDUuMDU5OXptMCA2LjI3NTFjLTQuNjQ3OSAwLTkuMTkxMy0xLjM3ODItMTMuMDU1OS0zLjk2MDUtMy44NjQ1LTIuNTgyMi02Ljg3NjYtNi4yNTI0LTguNjU1My0xMC41NDY0LTEuNzc4Ni00LjI5NDEtMi4yNDQtOS4wMTkyLTEuMzM3Mi0xMy41Nzc3LjkwNjctNC41NTg2IDMuMTQ0OS04Ljc0NTkgNi40MzE0LTEyLjAzMjRzNy40NzM4LTUuNTI0NyAxMi4wMzI0LTYuNDMxNGM0LjU1ODUtLjkwNjggOS4yODM2LS40NDE0IDEzLjU3NzcgMS4zMzcyIDQuMjk0IDEuNzc4NyA3Ljk2NDIgNC43OTA4IDEwLjU0NjQgOC42NTUzIDIuNTgyMiAzLjg2NDYgMy45NjA1IDguNDA4IDMuOTYwNSAxMy4wNTU5LS4wMTExIDYuMjI5Mi0yLjQ5MDYgMTIuMi02Ljg5NTMgMTYuNjA0N3MtMTAuMzc1NSA2Ljg4NDItMTYuNjA0NyA2Ljg5NTN6Ii8+PHBhdGggZD0ibTU3LjY4ODkgNjcuODU3MWMxLjYyMzQtMS45NzM4IDIuNzg2LTQuMjg0OCAzLjQwMzQtNi43NjQ3IDIuNDczNy0uNjM0MSA0Ljc4MTItMS43OTUgNi43NjQ3LTMuNDAzNC0uMDk4MyAyLjg5MDUtLjcyNDkgNS43Mzg2LTEuODQ4NyA4LjQwMzQtMi42NDQxIDEuMDg1MS01LjQ2MjUgMS42ODMtOC4zMTk0IDEuNzY0N3ptLTE3LjQzNy0yNy42MDVjLTIuNDM1NC42MzQ2LTQuNzAxNiAxLjc5NjQtNi42Mzg2IDMuNDAzMy4wNzI1LTIuODkzNi43MDAxLTUuNzQ2NCAxLjg0ODctOC40MDMzIDIuNjU4NS0xLjE0MzcgNS41MTA0LTEuNzcxMSA4LjQwMzQtMS44NDg4LTEuNjIzNCAxLjk3MzgtMi43ODYgNC4yODQ4LTMuNDAzNCA2Ljc2NDd6Ii8+PC9nPjwvZz48L3N2Zz4=',\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'celo.token.a11bd.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Celo Dollar',\n symbol: 'cUSD',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiBoZWlnaHQ9IjEwMCIgdmlld0JveD0iMCAwIDEwMCAxMDAiIHdpZHRoPSIxMDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0ibTEwMCA1MGMwLTI3LjYxNDItMjIuMzg1OC01MC01MC01MHMtNTAgMjIuMzg1OC01MCA1MCAyMi4zODU4IDUwIDUwIDUwIDUwLTIyLjM4NTggNTAtNTB6IiBmaWxsPSIjNDVjZDg1Ii8+PGcgZmlsbD0iI2ZmZiI+PHBhdGggZD0ibTY5Ljg4MDUgNjIuNjQzOGMtMS41NjcxIDMuMzkzMS0zLjkzNzUgNi4zNTMyLTYuOTA2MSA4LjYyNDEtMi45Njg1IDIuMjcwOC02LjQ0NTggMy43ODQxLTEwLjEzMDcgNC40MDg3LTMuNjg1LjYyNDYtNy40NjY3LjM0MTctMTEuMDE3Ny0uODI0MS0zLjU1MTEtMS4xNjU4LTYuNzY0Ni0zLjE3OTQtOS4zNjIzLTUuODY2Ni0yLjU5NzgtMi42ODcxLTQuNTAxNS01Ljk2NjktNS41NDY1LTkuNTU1NC0xLjA0NDktMy41ODg1LTEuMTk5Ni03LjM3NzUtLjQ1MDctMTEuMDM5My43NDg5LTMuNjYxNyAyLjM3ODktNy4wODU3IDQuNzQ4OS05Ljk3NTggMi4zNzAxLTIuODkgNS40MDg3LTUuMTU4OSA4Ljg1MjktNi42MTAzbDIuMjY2OCA1LjM3OTJjLTIuNTcgMS4wODMxLTQuODM3NSAyLjc3NjEtNi42MDYgNC45MzI3LTEuNzY4NSAyLjE1NjUtMi45ODQ4IDQuNzExNS0zLjU0MzYgNy40NDM5LS41NTg5IDIuNzMyNC0uNDQzNSA1LjU1OTguMzM2MyA4LjIzNzYuNzc5OCAyLjY3NzcgMi4yMDAzIDUuMTI1MSA0LjEzODggNy4xMzAyIDEuOTM4NCAyLjAwNTIgNC4zMzYzIDMuNTA3OCA2Ljk4NjEgNC4zNzc3czUuNDcxNyAxLjA4MSA4LjIyMTUuNjE0OWMyLjc0OTctLjQ2NjEgNS4zNDQ0LTEuNTk1MyA3LjU1OTUtMy4yODk4IDIuMjE1Mi0xLjY5NDUgMy45ODQtMy45MDMzIDUuMTUzNC02LjQzNTNsNS45MTg5LjMwNDJ6Ii8+PHBhdGggZD0ibTU2LjEwNjEgMjQuNXYtNGg0LjUwMDV2NGMyIDAgNS4xNjY3LjY2NjcgNi41IDF2NC41Yy0xOS0zLTE1LjUwMTEgMy44NDYyLTggNSA2LjcyMTcgMS4wMzM5IDExIDIgMTEuNSA5IC40IDUuNi01LjgzMzMgNy42NjY3LTkgOHYzLjVoLTV2LTMuNWMtMi40IDAtNi42NjY3LTEuNjY2Ny04LjUtMi41di01LjVjNC41IDIuNSAxNyA0LjUgMTcgMHMtMTYuNTAxMS0zLTE4LjAwMDUtMTFjLTEuMDAyMy01LjM0NzUgNS4zMzMzLTcuODMzMyA5LTguNXoiLz48L2c+PC9zdmc+',\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'cusd.token.a11bd.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'ABR',\n symbol: 'ABR',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjEyMSIgdmlld0JveD0iMCAwIDEyMSAxMjEiIHdpZHRoPSIxMjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48Y2lyY2xlIGN4PSI2MC41IiBjeT0iNjAuNSIgZmlsbD0iIzBlMGIwZiIgZmlsbC1ydWxlPSJub256ZXJvIiByPSI2MC41Ii8+PGNpcmNsZSBjeD0iNjAuNSIgY3k9IjYwLjUiIHI9IjYwIiBzdHJva2U9IiMyZDJjMmUiIHN0cm9rZS1vcGFjaXR5PSIuODEiLz48ZyBmaWxsLXJ1bGU9Im5vbnplcm8iPjxwYXRoIGQ9Im04MS4xNjg3IDUyLjIxNDctMTEuNjUzLTExLjY1MjloLTE3LjY1NTlsLTUuNjQ5MyA1LjY0OTl2LTIwLjEyNzdoLTYuMDAzN3YzNS42NjQ4IDcuNzY4NmwxMS42NTMgMTEuNjUyOWgxNy42NTU5bDUuNjUwMi01LjY0OTl2MjAuMTI3N2g2LjM1NjN2LTMzLjU0NjJ6bS0xNC40NzgxIDIyLjk1MjZoLTExLjY1MjJsLTguNDc1My04LjQ3NDh2LTQuOTQzNy02LjcwOTJsOC40NzUzLTguNDc0OGgxMS42NTIybDguNDc1MyA4LjQ3NDh2Ny40MTU1IDQuMjM3NHoiIGZpbGw9IiNmZmYiLz48cGF0aCBkPSJtMzEuNzMzNCA3Mi42OTUydi0zMi4xMzM3aC02LjAwMjh2MzQuOTU4NmwyMC40ODEgMjAuNDgwOGgyMC40ODAxdi02LjAwM2gtMTcuNjU1OXoiIGZpbGw9IiM2ZGQiLz48cGF0aCBkPSJtNTUuMDM4OCAyNS43MzA1djYuMDAzaDE3LjY1NTlsMTcuMzAyNCAxNy4zMDI3djMyLjEzMzdoNi4wMDI4di0zNC45NTg2bC0yMC40ODEtMjAuNDgwOHoiIGZpbGw9IiM2ZGQiLz48L2c+PC9nPjwvc3ZnPg==',\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'abr.a11bd.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Utopia',\n symbol: 'UTO',\n icon:\n \"data:image/svg+xml,%3Csvg id='Layer_1' data-name='Layer 1' xmlns='http://www.w3.org/2000/svg' viewBox='-40 -40 600 600'%3E%3Cdefs%3E%3Cstyle%3E .cls-1%7Bfill:%239f9f9f%7D.cls-2%7Bfill:%23fefefe%7D.cls-4%7Bfill:%23030303%7D %3C/style%3E%3C/defs%3E%3Cpath d='M371.65 15v23.92l-.47.71C368.82 41.48 366 41 363.36 41q-36.94.09-73.88 0h-176c-3.06 0-6.31.67-9.1-1.37l-.47-.71V15ZM55.21 355.33H31.66a2.81 2.81 0 0 1-.26-.3.82.82 0 0 1-.13-.37v-24H6.67V136.41h24.6l.69.44c2 2.64 1.38 5.75 1.39 8.67q.07 73.11 0 146.2c0 12.44.26 12.68 12.64 12.76 3 0 6-.29 8.85 1a3 3 0 0 1 1.23 1.1 12.38 12.38 0 0 1 1.18 6.17q.1 18 0 36.05c0 2.09.17 4.28-1.36 6.06ZM420.4 452.82v23.51c-3.87.66-178.64.93-195 .29v-23.8l.47-.71c2.79-2 6-1.37 9.1-1.37q75.33-.09 150.68 0c9.25 0 18.49-.06 27.74 0 2.25 0 4.6-.25 6.54 1.37ZM176.66 428H128v-23.83H79.16v-24.9l.39-.66c1.9-1.69 4.27-1.4 6.51-1.42 10.55-.08 21.09 0 31.63-.05 6.6-.05 7.89-1.5 8.12-8.1.16-4.52-.77-9.14 1.06-13.53a2.94 2.94 0 0 1 1.1-1.14 58.19 58.19 0 0 1 24.44-.12 3 3 0 0 1 1.2 1.07c1.29 2.36 1.19 4.95 1.2 7.5v30.75c.05 6.74 1.61 8.24 8.36 8.37 3.7.08 7.41-.1 11.1.23 2.23.2 3.9 1.14 4.1 3.54a107.23 107.23 0 0 1-.06 20 3.93 3.93 0 0 1-1 1.85c-.2.17-.43.31-.65.44Z'/%3E%3Cpath d='M225.4 452.82h-48.74V428c1.46-1.94 3.61-2 5.74-2.06 6.36-.1 12.72-.14 19.08.09 6.33-.23 12.67-.21 19-.07 1.93 0 4-.19 5.56 1.42 2.71 7.57 1.34 15.33 1 23-.04 1.09-.97 1.72-1.64 2.44ZM31.27 136.41V87.67h23.94l.7.45c1.36 1.51 1.34 3.39 1.35 5.22q.18 18.9 0 37.8a11.41 11.41 0 0 1-1 5 3.12 3.12 0 0 1-1.12 1.24c-7.1 2.15-14.32 1.17-21.51.74-1.03-.12-1.63-1.04-2.36-1.71Z'/%3E%3Cpath d='M55.21 87.67v-24.8h23.95l.69.44a3.53 3.53 0 0 1 1 1.84c.36 7.46 1.36 14.94-.69 22.33A3 3 0 0 1 79 88.65c-7.08 2-14.25 1.13-21.4.67-1.07-.06-1.67-.99-2.39-1.65ZM469.14 404.07V428h-24.8l-.71-.47a5.34 5.34 0 0 1-1.24-3.54q-.37-8.07 0-16.15a7 7 0 0 1 1.61-4.3 8.54 8.54 0 0 1 5.24-1.52c5-.13 10-.14 15 0 1.86.09 3.65.41 4.9 2.05Z'/%3E%3Cpath d='M79.16 62.87V38.92H104c.79.8 1.71 1.56 1.76 2.78.29 7 1.2 14-.69 20.86a3 3 0 0 1-1.13 1.23C96.52 66 89 64.92 81.56 64.53c-1.07-.06-1.68-1-2.4-1.66ZM444.34 428v24.8H420.4c-.67-.72-1.62-1.34-1.66-2.38-.33-7.7-1.67-15.44 1-23 1.15-1.33 2.78-1.33 4.32-1.4 5.11-.22 10.23-.18 15.35 0 1.9.03 3.68.36 4.93 1.98ZM79.16 379.27H55.21v-23.94c.52-.48.95-1.21 1.63-1.34a70.78 70.78 0 0 1 21.55-.16c1.55.19 2.36 1.57 2.5 3.09a109.82 109.82 0 0 1 0 19.53 4.76 4.76 0 0 1-1.73 2.82ZM444.34 111.61h24.8v73.54c-1.36 1.8-3.33 2-5.35 2-5 .13-9.94.18-14.9 0-5.5-.2-6.49-1.05-6.55-6.57-.18-14.62-.28-29.24.06-43.86-.24-6.35-.22-12.7-.12-19.06 0-2-.09-4 1.36-5.63ZM395.59 62.87h24.81v24.8c-.15.23-.3.46-.44.69a3.62 3.62 0 0 1-1.84 1c-7.43.4-14.88 1.3-22.25-.61a3 3 0 0 1-1.2-1.1c-1.72-8.12-2.21-16.24.23-24.32Z'/%3E%3Cpath d='M420.4 87.67h23.94v23.94c-.79.79-1.55 1.71-2.77 1.76-7 .29-14 1.2-20.87-.69a3.11 3.11 0 0 1-1.23-1.13c-2.14-7.1-1.16-14.3-.74-21.49.07-1.06 1-1.67 1.67-2.39ZM371.65 38.92h23.94v23.95c-.79.79-1.55 1.7-2.77 1.75-7 .3-14 1.2-20.87-.68a3.18 3.18 0 0 1-1.23-1.13c-2.13-7.1-1.16-14.31-.73-21.49.06-1.07 1.01-1.67 1.66-2.4Z'/%3E%3Cpath class='cls-1' d='M371.65 38.92v23.95c-.9 1.57-2.44 1.81-4 2-1.85.17-3.7.15-5.55.15q-124.27 0-248.55-.06c-3.25 0-6.93 1.15-9.57-2.05V38.92Z'/%3E%3Cpath class='cls-2' d='M104 62.87h267.65c1.92 1.47 2 3.6 2.07 5.74.1 3.68-.12 7.36.14 11 .28 4.05 1.77 5.54 5.81 5.83 3.53.25 7.07 0 10.6.14 2 .07 4 .3 5.32 2.07 1.93 1.47 2 3.6 2.08 5.74.11 3.53-.09 7.07.15 10.6.23 3.35 2 5.16 5.38 5.38 3.82.24 7.64 0 11.45.15 2.15.06 4.28.15 5.75 2.07 1.92 1.47 2 3.6 2.07 5.75.1 3.67-.12 7.35.13 11 .28 4 1.78 5.54 5.82 5.83 3.53.25 7.07 0 10.6.14 2 .06 4 .29 5.32 2.06v48.74h24.8v72.69c-1.25 1.62-3 2-4.92 2-3 .11-6 .06-9 .08-7.41.08-8.77 1.36-8.79 8.67-.05 14.34 0 28.68 0 43 0 3.27-.09 6.54 0 9.8.21 5.2 1.79 6.74 7.07 6.93 3.4.12 6.81 0 10.22.09 2 .06 4 .29 5.35 2.06v24.8c-1.45 1.93-3.59 2-5.71 2.05-6.32.1-12.64.16-19-.11-8 .24-16 .29-24 0-6.61.26-13.22.21-19.84.11a11 11 0 0 1-4.52-.85 3.53 3.53 0 0 1-1.28-.81c-1.44-2.28-1.36-4.85-1.38-7.4 0-3.11.09-6.23-.06-9.34-.22-4.62-1.65-6.06-6.2-6.29a67.32 67.32 0 0 0-7.65 0c-4.07.28-5.5 1.71-5.74 5.85-.22 3.68 0 7.37-.11 11.05-.06 2.4-.11 4.83-1.82 6.81-4.08 1.73-8.36.85-12.56 1s-8.19.09-12.28-.15c-6.36.26-12.72.22-19.08.12a11 11 0 0 1-4.54-.85 3.47 3.47 0 0 1-1.28-.82c-1.36-2.15-1.35-4.57-1.37-7 0-3.26.09-6.53-.07-9.79-.22-4.59-1.67-6-6.26-6.25-2.4-.12-4.82-.09-7.23 0-5.4.14-6.83 1.53-7 6.83-.11 3.54 0 7.09-.08 10.63-.07 2.27-.19 4.55-1.89 6.36-2.12 1.1-4.43.92-6.69.92q-29.41.09-58.84 0c-2.41 0-4.85.08-7.08-1.09-2.15-1.51-2.23-3.84-2.31-6.12-.14-3.56 0-7.12-.09-10.68-.17-5.33-1.6-6.72-7-6.86-2.13-.06-4.27-.09-6.41 0-4.58.25-6 1.68-6.19 6.35-.18 5.55.05 11.11-.27 16.67.34 6.24.22 12.48.14 18.72a11 11 0 0 1-1 4.55 2.94 2.94 0 0 1-1 1.19c-7.82 2.28-15.77 1.2-23.67.74-2.42-.14-2.95-2.34-3.11-4.45-.3-4 0-8-.22-11.93-.23-5.19-1.87-6.82-7-7-3.12-.14-6.25 0-9.38-.11-2-.07-4-.27-5.36-2.05-1.78-1.35-2-3.28-2.07-5.32-.09-3.82.1-7.65-.12-11.46-.24-4.14-1.67-5.57-5.75-5.83a69.87 69.87 0 0 0-8.92 0c-4.09.26-5.51 1.69-5.75 5.83-.23 3.81 0 7.64-.12 11.46 0 2-.29 4-2.07 5.32-.52.48-1 1.22-1.62 1.35a70.79 70.79 0 0 1-21.6.17c-2.15-.26-2.53-2.44-2.67-4.35-.32-4.26 0-8.53-.23-12.78-.22-5.2-1.85-6.83-7-7-4.26-.17-8.52 0-12.78-.2-3.1-.17-4.62-1.69-4.78-4.79-.22-4 0-8-.21-11.93-.23-5.18-1.86-6.8-7-7-3.12-.14-6.25 0-9.38-.11-2-.07-4-.28-5.36-2.05a5.39 5.39 0 0 1-2-4.1c-.09-1.71-.14-3.41-.14-5.12V145.58c0-3.16-.87-6.66 2.07-9.22 1.37-1.78 3.35-2 5.37-2 3.14-.11 6.27 0 9.4-.11 5.22-.22 6.91-1.8 7-7 .18-10.54 0-21.07.1-31.61 0-2.78-.52-5.79 2.08-7.93 1.47-1.93 3.6-2 5.74-2.08 3.68-.1 7.36.13 11-.13 4-.29 5.54-1.78 5.82-5.83.26-3.66 0-7.34.14-11 .15-2.2.21-4.33 2.21-5.8ZM469.14 404.07h-24.8l-.71-.47a5.84 5.84 0 0 1-1.28-3.92c-.19-5.76-.23-11.51 0-17.26.07-1.4.18-2.84 1.39-3.84 7.57-2.59 15.3-1.31 23-1 1 0 1.66 1 2.37 1.65Z'/%3E%3Cpath class='cls-1' d='M469.14 379.27h-24.8c-1.66-.8-1.87-2.36-1.95-3.92-.26-5.33-.25-10.66 0-16a5.23 5.23 0 0 1 1.95-4h24.8Z'/%3E%3Cpath d='M469.14 330.53h-24.36c-.65-3.68-.88-58.4-.29-72.69h24.65Z'/%3E%3Cpath class='cls-1' d='M55.21 136.41v170.18H31.72a2.76 2.76 0 0 1-.3-.29.64.64 0 0 1-.15-.36V136.41Z'/%3E%3Cpath d='M55.21 306.59H78.7a1.67 1.67 0 0 1 .31.28.73.73 0 0 1 .14.36v23.15h24.21a4.48 4.48 0 0 1 .45.45.8.8 0 0 1 .14.36v24.14h24v23.94H79.16v-23.94H55.21Z' fill='%23a1a1a1'/%3E%3Cpath class='cls-1' d='M420.4 428v24.8h-195V428c.7-1.53 2.11-1.78 3.55-1.94a48.57 48.57 0 0 1 5.12-.17h177.66c2.95.11 6.36-.98 8.67 2.11ZM152.71 355.33h23.49a1.72 1.72 0 0 1 .31.29.7.7 0 0 1 .14.36v23.29h24.8c2 1.24 2 3.31 2 5.26q.24 19.08 0 38.16c0 2-.25 4-2 5.33h-24.8v-23.5a1.7 1.7 0 0 0-.3-.3.62.62 0 0 0-.36-.14h-23.28Z'/%3E%3Cpath class='cls-1' d='M127.91 355.33V331a1.64 1.64 0 0 1 .29-.3.62.62 0 0 1 .36-.14h24.15v24.8Z'/%3E%3Cpath class='cls-2' d='M201.46 428v-48.73c1.48-1.95 3.64-2 5.79-2 6-.09 11.95-.17 17.92.12 7-.27 14-.31 20.93-.08 5.06.17 5.88 1.07 6.13 6.13.21 4-.06 8 .17 12 .27 4.69 1.92 6.25 6.65 6.56 11.72.77 13-.4 13-12.27 0-12.46 0-12.47 12.37-12.48h30.76c2.41 0 4.86-.13 7.15.88a3.53 3.53 0 0 1 1.27.77c2.32 4.12 1.32 8.63 1.39 13 .15 9.66.55 10.16 10.16 10.16h.85c7.68 0 8.7-1 8.75-8.55v-8.54a11.49 11.49 0 0 1 1.24-5.78 3 3 0 0 1 1.23-1 13.24 13.24 0 0 1 5.42-.92c14.31 0 28.63-.21 42.94.11 6.25-.24 12.51-.16 18.76-.12a14.32 14.32 0 0 1 6.23 1.14c1.93 1.13 1.76 3.1 1.84 4.9.2 4 0 7.93.14 11.88.2 5 1.73 6.58 6.68 6.8 3.26.15 6.51 0 9.77.1 2 .07 4 .29 5.33 2.06V428H201.46Z'/%3E%3Cpath class='cls-1' d='M79.16 87.67v48.74H55.21V87.67ZM104 62.87v24.8H79.16v-24.8ZM444.34 136.41H420.4v-24.8h23.94ZM395.59 87.67h-23.94v-24.8h23.94ZM420.4 111.61h-24.81V87.67h24.81Z'/%3E%3Cpath d='M322.9 379.27h-48.27a2.07 2.07 0 0 0-.31.27.68.68 0 0 0-.16.36v24h-23.67c.06.06-.06 0-.14-.14a.7.7 0 0 1-.14-.36v-24.15H225.4c-.46-.52-1.24-.92-1.33-1.59-.92-7.32-1.93-14.66.63-21.89l.7-.46h72.7c4-3.06 20.75-3.06 24.8 0 3.1 4.03 3.1 20.08 0 23.96ZM274.15 257.84H225.4V209.1c1.37-1.8 3.35-2 5.37-2q19-.19 38 0c2 0 4 .24 5.37 2 1.8 1.36 2 3.34 2 5.37q.19 19 0 38c.03 2.03-.14 4.01-1.99 5.37ZM395.59 257.84h-48.74V209.1c1.36-1.8 3.34-2 5.36-2q19-.19 38 0c2 0 4 .24 5.37 2 1.81 1.36 2 3.34 2 5.37q.21 19 0 38c.03 2.03-.18 4.01-1.99 5.37Z'/%3E%3Cpath class='cls-1' d='M395.59 257.84V209.1H420c.64 3.58.85 35.66.29 48.74Z'/%3E%3Cpath d='M444.34 404.07H420.4v-24.8c-3-4-3-19.92 0-23.94h23.94v48.74ZM395.59 379.27h-48.74c-.36-.45 0 .24-.35-.23-2.73-3.92-2.49-20 .35-23.71h24.8c4-3 19.93-3 23.94 0 3.04 4.02 3.04 19.93 0 23.94Z'/%3E%3Cpath class='cls-1' d='M274.15 209.1H225.4v-23.5c3.58-.64 35.65-.85 48.75-.3ZM395.59 209.1h-48.74v-23.5c3.58-.64 35.65-.85 48.74-.3ZM274.15 257.84V209.1h23.5c.64 3.58.85 35.65.3 48.74ZM322.9 355.33h-24.8V331a1.64 1.64 0 0 1 .29-.3.62.62 0 0 1 .36-.14h24.15ZM395.59 355.33h-23.94V331a1.64 1.64 0 0 1 .29-.3.62.62 0 0 1 .36-.14h23.29Z'/%3E%3Cpath d='M201.46 355.33V331a1.64 1.64 0 0 1 .29-.3.62.62 0 0 1 .36-.14h23.29v24.8c-4.01 3-19.93 3-23.94-.03Z'/%3E%3Cpath class='cls-1' d='M127.78 136.53v23.73h-23.64v-23.73ZM346.85 355.33v23.94c-4 3-19.93 3-24 0v-23.94ZM152.83 111.49V87.76h23.64v23.73Z'/%3E%3Cpath d='M322.9 379.27h24v24.35a2.07 2.07 0 0 1-.29.3.67.67 0 0 1-.37.15H322.9Z'/%3E%3Cpath class='cls-1' d='M127.79 136.27V111.7h24.91v24.57ZM201.45 379.25v-23.91h23.94v23.91ZM395.57 379.25v-23.91h24.86v23.91Z'/%3E%3Cpath class='cls-4' d='M469.17 404.08v-73.61h23.92v73.61ZM469.17 257.76v-72.61h23.92v72.61Z'/%3E%3C/svg%3E%0A\",\n reference: null,\n reference_hash: null,\n decimals: 8,\n id: 'utopia.secretskelliessociety.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'DEIP Token',\n symbol: 'DEIP',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDUiIGhlaWdodD0iNDUiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3QgeD0iLjg5MiIgeT0iLjkxIiB3aWR0aD0iNDMuMTYxIiBoZWlnaHQ9IjQzLjE2MSIgcng9IjIxLjU4MSIgZmlsbD0iI0Y4RkVGQSIvPjxwYXRoIGQ9Ik05LjcgMTAuNmgxNC41MzRjNi41NjcgMCAxMS44OTIgNS4zMjMgMTEuODkyIDExLjg5IDAgNi41NjgtNS4zMjQgMTEuODkyLTExLjg5MiAxMS44OTJIOS43VjEwLjZaIiBmaWxsPSJ1cmwoI2EpIi8+PGNpcmNsZSBjeD0iMjIuNDczIiBjeT0iMjIuNDkxIiByPSI0Ljg0NSIgZmlsbD0iIzAwMCIvPjxkZWZzPjxyYWRpYWxHcmFkaWVudCBpZD0iYSIgY3g9IjAiIGN5PSIwIiByPSIxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCguMjE2IDExLjY5NTUgLTExLjkyNjc3IC4yMjAyOCAyMi42OTcgMjIuNjg3KSI+PHN0b3Agb2Zmc2V0PSIuMzU5IiBzdG9wLWNvbG9yPSIjRTlGRjAwIi8+PHN0b3Agb2Zmc2V0PSIuNzYiIHN0b3AtY29sb3I9IiMyNjM4MDAiLz48c3RvcCBvZmZzZXQ9IjEiLz48L3JhZGlhbEdyYWRpZW50PjwvZGVmcz48L3N2Zz4=',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'deip-token.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Wootrade Network',\n symbol: 'WOO',\n icon:\n \"data:image/svg+xml,%3Csvg width='125' height='83' viewBox='0 0 125 83' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M102.422 0H122.958L113.203 30.9433H92.9243L102.422 0ZM75.982 29.4048L86.0788 53.3388L89.8436 41.0299H109.951L98.5713 78.0422C97.6301 80.9485 94.9776 82.9145 91.8972 82.9145H80.4314C77.6078 82.9145 75.0408 81.2049 73.9285 78.5551L61.2648 47.8682L48.8578 78.5551C47.831 81.2904 45.2641 83 42.3549 83H30.718C27.6376 83 24.9851 80.9485 24.0439 78.0422L0 5.85842e-05H20.1934L36.2797 53.3388L46.8898 29.3193C49.2857 23.3358 55.0185 19.4038 61.4359 19.4038C67.8533 19.4038 73.6718 23.3358 75.982 29.4048Z' fill='%2320252F'/%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '4691937a7508860f876c9c0a2a617e7d9e945d4b.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'LiNEAR',\n symbol: 'LINEAR',\n icon:\n \"data:image/svg+xml,%3Csvg width='40' height='40' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M30.74 28.78c.21-.36.32-.78.32-1.21v-6.33c0-.24-.06-.46-.17-.66-.12-.21-.28-.38-.48-.49l-16.86-9.77c-.35-.2-.73-.31-1.13-.32-.64 0-1.24.26-1.69.72-.45.45-.7 1.07-.71 1.71v6.39c0 .24.06.47.18.67.11.21.28.37.48.48l16.82 9.71c.36.22.77.32 1.19.32.41 0 .82-.12 1.19-.33.36-.21.66-.52.86-.89zm.32-16.27c0-.42-.1-.84-.29-1.21-.2-.38-.49-.7-.85-.93-.36-.22-.78-.34-1.21-.34-.42 0-.84.12-1.21.34l-4.97 2.81c-.04.02-.08.07-.1.12-.03.04-.04.1-.04.14 0 .06.01.11.04.16.02.04.06.08.1.1l8.05 4.62c.05.02.1.04.15.04.05 0 .1-.02.15-.05.04-.02.08-.06.11-.11.02-.04.04-.1.03-.15l.04-5.54zM10.05 27.5c-.01.43.08.86.28 1.23.2.38.49.7.85.93.36.22.78.34 1.2.34.42 0 .83-.12 1.2-.34l4.92-2.85c.04-.02.08-.06.1-.11.03-.04.05-.1.05-.15 0-.05-.02-.11-.05-.15-.02-.05-.06-.09-.1-.12l-8.05-4.6c-.05-.03-.09-.04-.15-.04-.05 0-.1.01-.15.04-.05.02-.08.07-.11.12-.02.04-.04.09-.04.14l.05 5.56z' fill='url(%23paint0_linear_186_370)'/%3E%3Cdefs%3E%3ClinearGradient id='paint0_linear_186_370' x1='11.135' y1='11.152' x2='30.145' y2='30.457' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%231BB3CC'/%3E%3Cstop offset='1' stop-color='%23824ACC'/%3E%3C/linearGradient%3E%3C/defs%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'linear-protocol.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'USN',\n symbol: 'USN',\n icon:\n \"data:image/svg+xml;charset=UTF-8,%3Csvg width='38' height='38' viewBox='0 0 38 38' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='38' height='38' rx='19' fill='black'/%3E%3Cpath d='M14.8388 10.6601C14.4203 10.1008 13.6748 9.86519 12.9933 10.0768C12.3119 10.2885 11.85 10.8991 11.85 11.5883V14.7648H8V17.9412H11.85V20.0589H8V23.2353H11.85V28H15.15V16.5108L23.1612 27.2165C23.5797 27.7758 24.3252 28.0114 25.0067 27.7997C25.6881 27.5881 26.15 26.9775 26.15 26.2882V23.2353H30V20.0589H26.15V17.9412H30V14.7648H26.15V10.0001H22.85V21.3658L14.8388 10.6601Z' fill='white'/%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'usn',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Huobi BTC',\n symbol: 'HBTC',\n icon:\n \"data:image/svg+xml,%3C%3Fxml version='1.0' standalone='no'%3F%3E%3C!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.0//EN' 'http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd'%3E%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' id='body_1' width='32' height='32'%3E%3Cg transform='matrix(1.3333334 0 0 1.3333334 0 0)'%3E%3Cimage x='0' y='0' xlink:href='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAA/tJREFUWIXtln9oVWUYxz/vOc67iWtNS9IkjcSui8RUsv40TbLfVoZE5R+li1JJioqYFlKI/bBQo+417A+pTSgkiH5p0ETIBIvaaosiRcRqYVM3t3Oe97zv0x+eO27jXt1kWoFfOJzDeX59npf3fc6B8/o/atNXOmKocgVnEmSt3vOvAaxr1stEdN5QAQwbbIAV7kO0dqgABrUCDR9rpVhdJqIO4KUdmjmnAEnCMon0Uom18/ltekXVSNafM4CVH+h4SVglkUdEDwELgoBHNu7RG846wIomb2xCXoQLpMdhRX8GrnWWwMDWV5v9mLMK0JuYx8QyX3ocNlZEtAWY3HPcE51w47z4rU9t1zM60qc9BYu36ExreQWArgTjNB5WEbaqMjE+AVZcZAzhyMBPA74ZUoBFeT/aJrwPZJAE0+sA9o2p9aPiKCYMg2dC53NrFlUdHWzhAQEk1mzGMAFVzFEBpxjDrrg3qg3CYOr6+pqDUT477tlc9iHgOqAW6AT2YGisXNp++HQAppzhttf9LcaYjwDoEUy3ABAYbtz+QvXOOHdVqLjVwNNAqXkQA+sM4ZpM/Q+uXJ2yG8cmZpVYEFFspyCxYkW7vHO7JV8XKK4RWN2v+ALgMNCUvl+tuEbJ15WtU9Iwe63WiWWWWLBdFht5rCgS66YP114YefVPAgsLrMBc4DmD+Q5oAT4vSrcw9R84gLXMEQtiQdLuJVa1lrfi3JQaoKHIvQK4tbK+fU2mvm1/EAY3pxDfFvk0pHEDAxDLlWIViRy2O0FEEdG25jdrDip6O1BdKk+Uy272zjdhOATcVWSvTuMGCJBQJYkpLo6I/pSap5cI2Zne64C7USabwPwB+CKfUnFlV6BDrCLdCTbWwtVd6KafuzXGfBnlspOAN4wJLq+sb9+lXh/tl79/XHkAm+hesWB7fd8KxHHfP0BHkWsvsCWztK0LuBd4V9X/GOWzNZycB8XqoIRKDqLEmU+d0yNBwmgTa+H1tAnzOg1cv7vItRl4OX1uArqA2iAIurzzyj+1mxIquQL7N5pem/CimLB4D4y3ksw0ATuAA6nrTcAvcX7KJOABjNlmCPLe6QxOzoiCDpjA7BgwAEDizIZ4+PBPxFI4hljxT2SWtFtgOVDo8IiqzgXGovq44n8D3QtMTO0KLM8sabOl6pQdxQCjFmuV6+h+jz9P3NmXTJl/bN8ln0W57ArgtaImfgdC4OKiFB5YWVnfvqFcjVMCAIy43xtz8NiDelwacH6SwhFVZketY1uiXHZOCnF1idCWtPgXp8p/WoCCLrrDmuO//jWdxF+jQEXIOz2tY52+PdXEzs4AnUXf19B8nQkr9pmHv++/Ec/rv6e/AQ/TFRmUSxQZAAAAAElFTkSuQmCC' width='24' height='24'/%3E%3C/g%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '0316eb71485b0ab14103307bf65a021042c6d380.factory.bridge.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'PembRock',\n symbol: 'PEM',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAyMDAgMjAwIj48cGF0aCBmaWxsPSIjMUUxRTFGIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMTMuMiAxNzAuNDJhODMuNTEgODMuNTEgMCAwIDAgNzAuNy04Mi42IDgzLjUgODMuNSAwIDAgMC01Ljc4LTMwLjYxbDEzLjY4LTIzLjg3aC0yOC4wOGE4My4xIDgzLjEgMCAwIDAtNjMuMi0yOS4wNiA4My4xIDgzLjEgMCAwIDAtNjMuMiAyOS4wNkg4LjU4TDIyLjcgNTcuNzhhODMuNSA4My41IDAgMCAwLTUuNTUgMzAuMDUgODMuNTEgODMuNTEgMCAwIDAgNzAuNiA4Mi41N2wxMi43NyAyMi4xMSAxMi42Ny0yMi4xWiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iI0VBRUNFRiIgZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTAwLjUzIDcuOTJBNzguNjYgNzguNjYgMCAwIDAgNDAuNjEgMzUuNmwtMS4xOCAxLjE3SDE2LjY1TDI4LjIzIDU3LjFsLS42OCAxLjc3Yy0zLjQgOC44Ny02LjA3IDE4LjEtNi4wNyAyOC4yIDAgMzkuNzcgMjkuMDMgNzMuMTQgNjYuOTQgNzlsMS44Ni4zIDEwLjM0IDE3Ljc5IDEwLjA2LTE3Ljc4IDEuODctLjNjMzcuOTUtNS44MSA2Ny4wMy0zOC44IDY3LjAzLTc4LjYxIDAtMTAuMy0yLjI0LTIwLjEzLTUuNzgtMjkuMTVsLS42OS0xLjc4IDExLjE4LTE5Ljc3aC0yMi42NWwtMS4xOC0xLjE3YTc4LjY2IDc4LjY2IDAgMCAwLTU5LjkzLTI3LjY3Wk0zNS44NCAyOS4wNEE4Ni40OCA4Ni40OCAwIDAgMSAxMDAuNTQgMGE4Ni40OCA4Ni40OCAwIDAgMSA2NC42OCAyOS4wNGgzMi42N0wxODEuODEgNTcuMmMzLjQ2IDkuNDMgNS42NSAxOS42MyA1LjY1IDMwLjI2IDAgNDMuMTItMzEuMDIgNzguOTUtNzEuODMgODYuMTRMMTAwLjY1IDIwMGwtMTUuMy0yNi40MmMtNDAuNzctNy4yMy03MS43NC00My40NC03MS43NC04Ni41MyAwLTEwLjQgMi42Mi0xOS45OSA1LjkzLTI5LjI1TDMgMjkuMDRoMzIuODRaIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz48cGF0aCBmaWxsPSIjRjY4MjFGIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Im0zMS44NSA0NS40MSA2OC43NSAxMjAuNDIgOC4wNi0xNC4xMi0yNy40Ny00OC4xM2gyNC4zTDcyLjMzIDQ1LjRIMzEuODVabTQ5LjE5IDAgNDQuMTUgNzcuMzIgNy42Ny0xMy40NC0yOC4xOC00OS4zNGg4LjM3bDIzLjk5IDQyLjAyTDE0NSA4OGwtMTYuMDItMjguMDVoMTYuNDJsLTQuNDMgNy43NiA3LjgxIDEzLjcgMjAuNTctMzZIODEuMDRaTTU2LjMgNTkuOTVsMTYuNjIgMjkuMTFoOC42N0w2NC45NyA1OS45NUg1Ni4zWk00NC4yIDg0LjZhNTYuNjUgNTYuNjUgMCAwIDAgMzEuMDUgNTQuMTJsNi4zMiAxMS4wMWE2NC40NSA2NC40NSAwIDAgMS00NS4yOS02MS43YzAtNC45Ny41Ni05LjggMS42LTE0LjQ0bDYuMzMgMTEuMDJabTc5LjY1LTQ3LjlhNTUuNDYgNTUuNDYgMCAwIDAtMjMuNjYtNS4yNyA1NS40NSA1NS40NSAwIDAgMC0yMy42NSA1LjI2SDYxLjVhNjMuMjYgNjMuMjYgMCAwIDEgMzguNy0xMy4xNmMxNC41NCAwIDI3Ljk1IDQuOSAzOC43IDEzLjE2aC0xNS4wNVoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPjxwYXRoIGZpbGw9IiNGNjgyMUYiIGQ9Ik00NC4xIDg4LjAyYzAtMS4xNC4wNC0yLjI4LjEtMy40MWwtNi4zLTExLjAyYTY1LjI2IDY1LjI2IDAgMCAwLTEuNiAxNC40MyA2NC40NSA2NC40NSAwIDAgMCA0NS4yOCA2MS43MWwtNi4zMS0xMWE1Ni42NSA1Ni42NSAwIDAgMS0zMS4xNS01MC43Wm0xMTMuMTIgMGMwLTEuMTQtLjItMi4yOC0uMjctMy40MWw2LjI1LTExLjAyYTY1LjMxIDY1LjMxIDAgMCAxIDEuODQgMTQuNDMgNjQuNDUgNjQuNDUgMCAwIDEtNDUuMjkgNjEuNzFsNi4zMS0xMWE1Ni42NSA1Ni42NSAwIDAgMCAzMS4xNi01MC43WiIvPjwvc3ZnPg==',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'token.pembrock.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Atocha Coin',\n symbol: 'ATO',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMzYuODggMTM2Ljg4Ij48Y2lyY2xlIGN4PSI2OC40NCIgY3k9IjY4LjQ0IiByPSI2OC40NCIgc3R5bGU9ImZpbGw6Z29sZCIgZGF0YS1uYW1lPSJMYXllciAyIi8+PGcgZGF0YS1uYW1lPSJMYXllciAxIj48cGF0aCBkPSJNNzEuNjUgNzkuNXYyNC40MWMwIDEuMjcuMjQgMS40OSAxLjQ3IDEuMTcgMS4wOC0uMjkgMi4xMy0uNjggMy4xOC0xYTExLjU4IDExLjU4IDAgMCAwIDEuNS0uNTljMS40MS0uNzIgMi44NC0xLjQgNC4xOC0yLjIyYTI1LjU5IDI1LjU5IDAgMCAwIDUuNTktNC42NGMxLjM2LTEuNTIgMi41NC0zLjIgMy43OC00LjgyLjMzLS40My4xOS0uNzItLjM1LS43MS0uODYgMC0xLjcyLjEzLTIuNTguMjItLjQ5IDAtMSAuMTMtMS40Ny4xOWEuMzkuMzkgMCAwIDEtLjQ4LS4zN2wtLjMzLTJhMS41NSAxLjU1IDAgMCAwLS4wNy0uNDIgNS43OCA1Ljc4IDAgMCAxLS4zMy0yLjEzYy0uMDktMS0uMjUtMS45NC0uMzQtMi45Mi0uMDctLjc4LjA1LS44NC44My0uOTQgMS41OS0uMTkgMy4xOC0uNDQgNC43Ny0uNjVsMi43OS0uMzcgMS4xNC0uMTUgNC44Ny0uNzRjLjI3IDAgLjU0LS4wNS44LS4wOWwyLjE4LS4zNWEyLjc1IDIuNzUgMCAwIDEgLjU1LS4wOC40Ny40NyAwIDAgMSAuMzUuMTcgOS44NSA5Ljg1IDAgMCAxIC40NCAxLjFjLjI0LjY5LjQ2IDEuMzkuNjkgMi4wOGEyLjY5IDIuNjkgMCAwIDEgLjA5LjI4Yy4xNy44My4zMyAxLjY2LjUxIDIuNDkuMjYgMS4xNC41NCAyLjI3LjgxIDMuNC4zMSAxLjMxLjYgMi42My45MyAzLjkzLjE5Ljc1LjQ1IDEuNDkuNjUgMi4yNHMuNDUgMS44MS42NiAyLjcxYS40LjQgMCAwIDEtLjE0LjM0IDMuMzkgMy4zOSAwIDAgMS0uODEuMzVjLTEuMzYuMzYtMi43Mi42OS00LjA5IDFsLTIuNTEuNjVjLS42My4xNy0uNzcuMDgtLjkyLS41NHEtLjM5LTEuNTktLjgyLTMuMTdjMC0uMTQtLjIxLS4zNC0uMzItLjM0YS45MS45MSAwIDAgMC0uNTkuMjRjLS4yOS4zMy0uNDguNzQtLjc1IDEuMDgtLjkzIDEuMTgtMS45IDIuMzMtMi44MyAzLjUxYTMwIDMwIDAgMCAxLTQuNiA0LjMgMzkuNCAzOS40IDAgMCAxLTMuNzQgMi41OCAyNi41OSAyNi41OSAwIDAgMS0yLjcxIDEuNTljLTEuMDguNTMtMi4yIDEtMy4zMiAxLjQycy0yIC43OC0zLjA3IDEuMTFjLS43MS4yMy0xLjQ1LjM3LTIuMTcuNTUtLjIuMDUtLjQuMTQtLjYuMjFhNC41MSA0LjUxIDAgMCAxLS40NC4xNmMtLjYxLjE1LTEuMjMuMy0xLjg1LjQzYS42Mi42MiAwIDAgMC0uNTMuN2MwIC43OCAwIDEuNTctLjA2IDIuMzRhNS4yOCA1LjI4IDAgMCAxLS44IDIuNDkgMy44OCAzLjg4IDAgMCAxLTEuNTIgMS4zMiAxMi41NyAxMi41NyAwIDAgMS0xLjU0LjcxIDEuMjQgMS4yNCAwIDAgMS0uNzguMDcgNS44NiA1Ljg2IDAgMCAxLTMuNzMtMi45MiA4IDggMCAwIDEtLjQtMi42MiAxMCAxMCAwIDAgMSAwLTEuMjguNjcuNjcgMCAwIDAtLjYxLS43NGMtLjc1LS4xNC0xLjUtLjI2LTIuMjQtLjQ0cy0xLjU3LS40NC0yLjM1LS42OGMtLjUtLjE1LTEtLjI4LTEuNS0uNDctMS42My0uNjEtMy4yOC0xLjE5LTQuODktMS44NmExNS4xMiAxNS4xMiAwIDAgMS0yLjI3LTEuMjljLTEuMzgtLjg5LTIuNzgtMS43Ny00LjEtMi43Ni0xLS43Ni0xLjkyLTEuNjgtMi44OC0yLjUyYTM2LjMzIDM2LjMzIDAgMCAxLTQuODEtNS42OGMtLjU4LS43Ny0xLjEtMS41OC0xLjY4LTIuMzVhLjgxLjgxIDAgMCAwLS42LS4yOWMtLjE2IDAtLjM3LjI1LS40My40My0uMzEgMS0uNTcgMi4wNy0uODYgMy4xMXEtLjE5LjctLjQgMS4zOWMtLjExLjM1LS4zOS4zNC0uNjYuMjgtLjU4LS4xMy0xLjE2LS4yOC0xLjczLS40My0xLjYyLS40Mi0zLjI0LS44NC00Ljg2LTEuMjhhNi41NSA2LjU1IDAgMCAxLTEtLjQuMzQuMzQgMCAwIDEtLjEyLS4zYy4yMS0xIC40MS0xLjkzLjY2LTIuODkuMzMtMS4yNC43Mi0yLjQ3IDEtMy43Mi4zOC0xLjQ4LjcyLTMgMS4wOC00LjQ3LjIyLS44OS40Ni0xLjc4LjY4LTIuNjguMTgtLjcyLjM0LTEuNDUuNTItMi4xN3MuMzItMS4yMy41Mi0xLjgzLjM4LS41NS44OC0uNDJhNi43NCA2Ljc0IDAgMCAwIC45Mi4xNWMxLjIuMTUgMi4zOS4yOCAzLjU5LjQ0bDUuNi43NSA0LjYxLjU3Yy44NS4xMSAxLjY5LjI1IDIuNTMuMzYuMyAwIC40Ny4xOS40NC41MXYuNDNjLS4xMyAxLjI0LS4yMiAyLjQ5LS40IDMuNzJzLS40NSAyLjM4LS42NiAzLjU4Yy0uMDYuMzQtLjIzLjQ3LS41NS40MmwtMi4xNC0uMzVhMi4yIDIuMiAwIDAgMC0uNDcgMGMtLjQgMC0uNTcuMjItLjQyLjU5YTcuOTIgNy45MiAwIDAgMCAuNzEgMS4zNCAyNC45NCAyNC45NCAwIDAgMCAzLjUyIDQuMjFjLjkxLjg4IDEuODIgMS43NiAyLjc4IDIuNTdhMTkgMTkgMCAwIDAgNC4yOSAyLjY5YzEuMTEuNTEgMi4yMiAxIDMuMzcgMS40N3MyLjM4LjggMy41OCAxLjE4YTIgMiAwIDAgMCAuNTEuMDUuNDcuNDcgMCAwIDAgLjUyLS40IDIuOTEgMi45MSAwIDAgMCAuMDctLjU1Yy4wNy0zLjYuMTgtNy4xOS4yLTEwLjc5LjA1LTguMzIuMDYtMTYuNjQuMDgtMjVWNTQuODVjMC0uOS0uMi0xLjA5LTEuMS0xLjA5aC0xNmExMy41MSAxMy41MSAwIDAgMS0yLjc4LS4zOSAxLjMxIDEuMzEgMCAwIDEtLjczLS43IDMuNDUgMy40NSAwIDAgMS0uMzMtMS4zNXYtNC4zMWEzLjQ1IDMuNDUgMCAwIDEgLjMxLTEuMSAxIDEgMCAwIDEgLjk1LS42M2MxLjMtLjExIDIuNi0uMjQgMy45MS0uMjYgMy42MyAwIDcuMjUgMCAxMC44OC0uMDVoMy44M2MuNjYgMCAxLS4yNyAxLS45M1YzMi41NmExLjQzIDEuNDMgMCAwIDAtLjc1LTEuMzQgMTAuNDkgMTAuNDkgMCAwIDEtMy41NS0zLjU2IDcuNTcgNy41NyAwIDAgMS0xLjI5LTMuN2MtLjA2LTEuMTkgMC0yLjM5IDAtMy41OEE4LjM1IDguMzUgMCAwIDEgNTguNDEgMTdhOS41IDkuNSAwIDAgMSA0LTMuNzYgNi41MyA2LjUzIDAgMCAxIDIuNjgtMWMuNzMtLjA4IDEuNDQtLjMgMi4xNy0uMzRhNi4xNiA2LjE2IDAgMCAxIDEuNDIuMjJjLjEzIDAgLjI1LjA4LjM3LjA5YTEwLjM1IDEwLjM1IDAgMCAxIDUgMi4zNSA3LjYyIDcuNjIgMCAwIDEgMi4xOCAyLjhjLjQ2LjkzLjggMS45MyAxLjE3IDIuOWEyLjEyIDIuMTIgMCAwIDEgLjEuNjd2MS40NWE4LjEyIDguMTIgMCAwIDEtLjcxIDMuNTUgMTIuMzEgMTIuMzEgMCAwIDEtMi4xNyAzLjYzIDUuOCA1LjggMCAwIDEtMS45MyAxLjU3IDEuNjggMS42OCAwIDAgMC0xLjA2IDEuNzR2MTEuMjZjMCAuNjIuMjkuODYuOTIuODhIODUuNjljMS43NiAwIDMuNTIuMTQgNS4yOC4xNmExLjgyIDEuODIgMCAwIDEgMS42OCAxLjg1djQuNjFhMi4zMyAyLjMzIDAgMCAxLS41NyAxLjQ0IDEuMzUgMS4zNSAwIDAgMS0uNy40MSAyMC4wNyAyMC4wNyAwIDAgMS01LjE4LjM0SDcyLjY3Yy0uOTEgMC0xLjA3LjE2LTEuMDcgMS4wNnEuMDUgMTIuMzQuMDUgMjQuNjJabS00LjQ5LTUxLjU1YTUuNzQgNS43NCAwIDAgMCA1LjcxLTUuNjQgNS44MiA1LjgyIDAgMCAwLTYuMDgtNS42M2MtMi41Mi4wNS01LjExIDIuODMtNS4wNyA1LjcxYTUuNiA1LjYgMCAwIDAgNS40NCA1LjU2WiIvPjxwYXRoIGQ9Ik04MC45NCA3Ny41YTIwIDIwIDAgMCAxLTIuNjktLjM3IDcuMzMgNy4zMyAwIDAgMS00LjM0LTMgNy43IDcuNyAwIDAgMS0xLTYuMjQgNy43OCA3Ljc4IDAgMCAxIDMuNzYtNSAxMC4yNSAxMC4yNSAwIDAgMSA2LjM4LTEuNTEgOC4xIDguMSAwIDAgMSA2LjE3IDMuNEE3LjY1IDcuNjUgMCAwIDEgOTAuNTcgNzFhNi40NiA2LjQ2IDAgMCAxLTIuMTQgMy40NiAxMi4yNyAxMi4yNyAwIDAgMS0zLjQ2IDIuMjEgMTAuNjQgMTAuNjQgMCAwIDEtNC4wMy44M1ptMy01LjY2YTYuNjkgNi42OSAwIDAgMCAwLS44NSAyMi41IDIyLjUgMCAwIDAtMS4xNy00Ljc3IDEuODMgMS44MyAwIDAgMC0xLjQ4LTEuMzFjLTEuMjYtLjEzLTEuOTIgMS0xLjggMi4xOWEyMy43MiAyMy43MiAwIDAgMCAuNjQgMy40IDEzLjA3IDEzLjA3IDAgMCAwIC44NiAyLjM5IDEuNDggMS40OCAwIDAgMCAyLjMzLjU2IDEuODEgMS44MSAwIDAgMCAuNjEtMS42M1pNNDMuOTQgNzMuMzFhMy44NyAzLjg3IDAgMCAxIDItMy42QTguOTEgOC45MSAwIDAgMSA1MSA2OC4zOWE1LjU5IDUuNTkgMCAwIDAgLjYgMCAxIDEgMCAwIDAgMS0xIDEwIDEwIDAgMCAwLS4yNy0yLjU2IDEuMzMgMS4zMyAwIDAgMC0yLjM0LS41NGMtLjU3LjU1LTEgMS4yMS0xLjU3IDEuNzlhMi41NiAyLjU2IDAgMCAxLTIuMjIuOTQgMS40NyAxLjQ3IDAgMCAxLTEuMjEtMiAzLjkzIDMuOTMgMCAwIDEgMi0yLjA5IDEzLjI2IDEzLjI2IDAgMCAxIDIuNTctMS4wOCAxMC4zMSAxMC4zMSAwIDAgMSA1LjEzLS4yNyA3LjM1IDcuMzUgMCAwIDEgMi45MyAxLjM2QTMuMzggMy4zOCAwIDAgMSA1OSA2NS4zOWMuMDcgMS4yNy4wOCAyLjU0LjE1IDMuODEuMDYgMSAuMTYgMiAuMjYgM2ExLjIzIDEuMjMgMCAwIDAgLjg4IDEuMDVjLjY3LjI3Ljc0LjQ2LjU3IDEuMTRhMy44IDMuOCAwIDAgMS0yIDIuMzUgNC4zOCA0LjM4IDAgMCAxLTMuNjguNDUgMy4zIDMuMyAwIDAgMS0xLjE1LS42OWMtLjc0LS42OC0uODItLjc1LTEuNjItLjE5YTYuMjEgNi4yMSAwIDAgMS00LjY5IDEgNC4yMSA0LjIxIDAgMCAxLTMuMS0xLjgxIDMuMSAzLjEgMCAwIDEtLjY4LTIuMTlabTcuNy0yLjkxYTIgMiAwIDAgMC0xLjE3IDMuNDMgMS4yMiAxLjIyIDAgMCAwIDEuNzQtLjI0IDIuOSAyLjkgMCAwIDAgLjI2LTIuNjIuNzYuNzYgMCAwIDAtLjgyLS41N1oiLz48L2c+PC9zdmc+',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'atocha-token.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'SeatlabNFT',\n symbol: 'SEAT',\n icon:\n \"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' version='1.1' x='0px' y='0px' width='32px' height='32px' viewBox='0 0 32 32' style='enable-background:new 0 0 32 32;' xml:space='preserve'%3E%3Cstyle type='text/css'%3E .st0%7Bfill:%23050035;%7D .st1%7Bfill:url(%23SVGID_1_);%7D%0A%3C/style%3E%3Cg id='Layer_1'%3E%3Ccircle class='st0' cx='16' cy='16' r='16'/%3E%3C/g%3E%3Cg id='Isolation_Mode'%3E%3ClinearGradient id='SVGID_1_' gradientUnits='userSpaceOnUse' x1='6.2375' y1='16' x2='25.7625' y2='16'%3E%3Cstop offset='0' style='stop-color:%2300C2FF'/%3E%3Cstop offset='1' style='stop-color:%230067FF'/%3E%3C/linearGradient%3E%3Cpath class='st1' d='M14,6.1c-0.3,0-0.5,0.1-0.8,0.2L8.1,9.4L7.8,9.6L7.2,10c-0.5,0.3-0.9,0.6-0.9,1.7v4.1c0,0.9,0.3,1.6,0.9,1.9 l6.2,3.8c1,0.6,2.3-0.1,2.3-1.3v-2.9c0-0.7-0.4-1.4-1-1.8l-2.9-1.8l3-1.9c0.5-0.3,0.8-0.9,0.8-1.5V7.6C15.6,6.7,14.8,6.1,14,6.1z M14.7,10.4c0,0.3-0.2,0.6-0.4,0.8l-3.4,2.1l-1.8-1.1c-0.5-0.3-0.8-0.5-1.1-0.8c-0.3-0.3-0.2-0.8,0.2-1c0,0,0,0,0,0L13.7,7 C13.8,7,13.9,6.9,14,6.9c0.3,0,0.7,0.3,0.7,0.7V10.4z M24.9,14.3l-6.2-3.8c-1-0.6-2.3,0.1-2.3,1.3v2.9c0,0.7,0.4,1.4,1,1.8l2.9,1.8 l-3,1.9c-0.5,0.3-0.8,0.9-0.8,1.5v2.8c0,0.9,0.8,1.6,1.6,1.6c0.3,0,0.5-0.1,0.8-0.2l5.1-3.1l0.4-0.2l0.6-0.4 c0.5-0.3,0.9-0.6,0.9-1.7v-4.1C25.8,15.3,25.4,14.6,24.9,14.3z M23.8,21.6C23.8,21.6,23.8,21.6,23.8,21.6L18.3,25 c-0.1,0.1-0.2,0.1-0.4,0.1c-0.3,0-0.7-0.3-0.7-0.7v-2.8c0-0.3,0.2-0.6,0.4-0.8l3.4-2.1l1.8,1.1c0.5,0.3,0.8,0.5,1.1,0.8 C24.3,20.9,24.2,21.4,23.8,21.6z'/%3E%3C/g%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 5,\n id: 'token.stlb.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Burrow Token',\n symbol: 'BRRR',\n icon:\n 'data:image/png;base64,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',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'token.burrow.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'FUSOTAO',\n symbol: 'TAO',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjQiIGhlaWdodD0iNjQiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0ibTU1LjQxIDI5LjYzNS03LjI5NiA2LjE0N2ExLjY1OSAxLjY1OSAwIDAgMS0uNjc1IDIuMzlsMS44NDggOS41NDZjLjgwNS0uMjA4IDEuNTM2LS43MDIgMi4wODktMS41MzlhMTIuODE2IDEyLjgxNiAwIDAgMCAxLjk4Mi01LjI4OWMuMTctMS4yNTEuNTY0LTIuNDczIDEuMTU2LTMuNTg2YTEyLjgzMyAxMi44MzMgMCAwIDAgMS40ODItNS40NjljLjAzNS0uODYzLS4xODYtMS42LS41ODctMi4yeiIgZmlsbD0idXJsKCNhKSIvPjxwYXRoIGQ9Ik00NS4zNDIgMzUuOTA2YTEuNjM3IDEuNjM3IDAgMCAxIDIuMTgzLS42M2w3LjM3OC02LjE5M2MtMS4yODMtMS4xOTMtMy40NTktMS41NDctNS40NDUtLjkwM2wtMTIuNzQyIDQuMTM1Yy0uMzEuMS0uNTUzLjI5Ny0uNzE2LjU0Mmw5LjM0MiAzLjA0OXoiIGZpbGw9InVybCgjYikiLz48cGF0aCBkPSJNNDMuODkyIDQ1LjM3YzEuMTQ5IDEuNTkyIDIuOTQ3IDIuNTcyIDQuNTk5IDIuNTI0bC0xLjg0NC05LjQ4N2ExLjY0NCAxLjY0NCAwIDAgMS0xLjUzOC0xLjY4bC05LjM2NC0zLjA1NWMuMDA0LjI2OC4wODcuNTQuMjYuNzhsNy44ODcgMTAuOTE5eiIgZmlsbD0idXJsKCNjKSIvPjxwYXRoIGQ9Im00MS40MSA1My4yMjMtOC4wNTYtNS4wOTJhMS42MzEgMS42MzEgMCAwIDEtMi40NjQuMDkxbC04LjQzOCA0LjcyMWMuNDQ0LjcwOCAxLjEzNiAxLjI1NiAyLjA5NyAxLjUyNyAxLjc5NC41MDYgMy43NC42MDMgNS42MDUuMjY1YTEwLjUzNiAxMC41MzYgMCAwIDEgMy43NDIgMGMxLjg3LjMzOSAzLjgyMS4yNCA1LjYxOS0uMjcuODI2LS4yMzMgMS40NTMtLjY3MyAxLjg5NS0xLjI0MnoiIGZpbGw9InVybCgjZCkiLz48cGF0aCBkPSJNMzIuMzg5IDQ1LjQzOGExLjY0NiAxLjY0NiAwIDAgMSAxLjI3IDEuODlsOC4xNDUgNS4xMzRjLjczNC0xLjU5NC4zOTctMy43ODItLjgyNy01LjQ4TDMzLjEyMyAzNi4wOWExLjM1NCAxLjM1NCAwIDAgMC0uNzM0LS41MTZ2OS44NjR6IiBmaWxsPSJ1cmwoI2UpIi8+PHBhdGggZD0iTTIyLjk3IDQ3LjAxN2MtMS4xNTEgMS41ODgtMS41MjQgMy42MDgtLjk2OSA1LjE3bDguNDItNC42OTJhMS42NDggMS42NDggMCAwIDEgMS4xMTctMS45ODd2LTkuODg0Yy0uMjUzLjA4Ny0uNDg1LjI1LS42NTkuNDlsLTcuOTA4IDEwLjkwM3oiIGZpbGw9InVybCgjZikiLz48cGF0aCBkPSJtMTUuODg2IDM1Ljc4Mi03LjI5NS02LjE0N2MtLjQwMS42LS42MjIgMS4zMzctLjU4NyAyLjJhMTIuODMgMTIuODMgMCAwIDAgMS40ODIgNS40NjkgMTAuNzUxIDEwLjc1MSAwIDAgMSAxLjE1NiAzLjU4NmMuMjU4IDEuODkyLjk1IDMuNzI3IDEuOTgyIDUuMjkuNTUzLjgzNiAxLjI4NCAxLjMzIDIuMDg5IDEuNTM4bDEuODQ4LTkuNTQ2YTEuNjU5IDEuNjU5IDAgMCAxLS42NzUtMi4zOXoiIGZpbGw9InVybCgjZykiLz48cGF0aCBkPSJNMTUuNTY4IDQ3Ljg1NmMxLjY0OS4wNDggMy40NDUtLjkzMiA0LjU5Mi0yLjUyMWw3Ljg3NS0xMC45MDhhMS4zNiAxLjM2IDAgMCAwIC4yNi0uNzhsLTkuMzUgMy4wNTJhMS42NDcgMS42NDcgMCAwIDEtMS41MzYgMS42NzlsLTEuODQgOS40Nzh6IiBmaWxsPSJ1cmwoI2gpIi8+PHBhdGggZD0iTTE2Ljc0NSAzNS4xOTNhMS42NCAxLjY0IDAgMCAxIDEuOTI3Ljc0bDkuMzU2LTMuMDUyYTEuMzU3IDEuMzU3IDAgMCAwLS43MTctLjU0M2wtMTIuNzYxLTQuMTRjLTEuOTktLjY0NC00LjE2OC0uMjktNS40NTMuOTA1bDcuMzkgNi4yYy4wOC0uMDQ0LjE2Ny0uMDguMjU4LS4xMXoiIGZpbGw9InVybCgjaSkiLz48cGF0aCBkPSJtNDAuNTcxIDE4LjA5LTMuNTQ2LTguODkyYy42ODktLjE5OCAxLjQ1My0uMTgyIDIuMjU4LjExOGExMi42NSAxMi42NSAwIDAgMSA0LjcwMyAzLjExIDEwLjYxNCAxMC42MTQgMCAwIDAgMy4wMjcgMi4yMTYgMTIuNjc2IDEyLjY3NiAwIDAgMSA0LjM4IDMuNTM1Yy42MTkuNzg4Ljg2IDEuNjQxLjgwNiAyLjQ3N2wtOS41OC0xLjE3OWExLjY0OSAxLjY0OSAwIDAgMC0uNjYyLTEuMTI2IDEuNjI2IDEuNjI2IDAgMCAwLTEuMzg2LS4yNnoiIGZpbGw9InVybCgjaikiLz48cGF0aCBkPSJNMzkuNzY0IDE4Ljc5Yy0uNDYzLjY0LS40IDEuNS4xMDQgMi4wNjZsLTUuNzczIDcuOThhMS4zNjMgMS4zNjMgMCAwIDEtLjI5Mi0uODVsLjAyMS0xMy40NDljLjAwNC0yLjA5NiAxLjAxMi00LjA2NCAyLjUzOC00LjkybDMuNTg1IDguOTZhMS42NiAxLjY2IDAgMCAwLS4xODMuMjEzeiIgZmlsbD0idXJsKCNrKSIvPjxwYXRoIGQ9Ik01Mi4xNiAyMS41NDhjLS40NjUgMS41OTEtMS45NSAzLjAwNi0zLjgxMiAzLjYxbC0xMi43ODIgNC4xNTVhMS4zNTIgMS4zNTIgMCAwIDEtLjgyLjAwOGw1Ljc4OC03Ljk5NmExLjY0IDEuNjQgMCAwIDAgMi4wNjctLjk0OWw5LjU1OSAxLjE3MnoiIGZpbGw9InVybCgjbCkiLz48cGF0aCBkPSJtMjcuNDYgOS4xOTgtMy41NDcgOC44OTJhMS42MjYgMS42MjYgMCAwIDAtMS4zODYuMjYgMS42NSAxLjY1IDAgMCAwLS42NjIgMS4xMjVsLTkuNTggMS4xNzljLS4wNTMtLjgzNi4xODctMS42OS44MDYtMi40NzdhMTIuNjc3IDEyLjY3NyAwIDAgMSA0LjM4LTMuNTM0IDEwLjYxNiAxMC42MTYgMCAwIDAgMy4wMjctMi4yMTcgMTIuNjUgMTIuNjUgMCAwIDEgNC43MDMtMy4xMWMuODA1LS4zIDEuNTY5LS4zMTYgMi4yNTgtLjExOHoiIGZpbGw9InVybCgjbSkiLz48cGF0aCBkPSJNMTYuMTk1IDI1LjE0M2MtMS44Ni0uNjA1LTMuMzQyLTIuMDE3LTMuODA2LTMuNjA3bDkuNTQ0LTEuMTdhMS42MzYgMS42MzYgMCAwIDAgMi4wNjQuOTQ4bDUuNzggNy45ODdhMS4zNDkgMS4zNDkgMCAwIDEtLjgxOS0uMDA4bC0xMi43NjMtNC4xNXoiIGZpbGw9InVybCgjbikiLz48cGF0aCBkPSJNMjQuNjM5IDIwLjg2N2ExLjY1NCAxLjY1NCAwIDAgMC0uMDc5LTIuMjgxbDMuNTktOC45N2MxLjUzLjg1NyAyLjUzOSAyLjgyOCAyLjU0MiA0LjkyNmwuMDIxIDEzLjQ2MmMuMDAxLjMyNy0uMTEuNjItLjI5Mi44NTJsLTUuNzgyLTcuOTg5eiIgZmlsbD0idXJsKCNvKSIvPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0iaCIgeDE9IjgiIHkxPSI0My40NjciIHgyPSIxNi4zOTkiIHkyPSIzNy45MzgiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBzdG9wLWNvbG9yPSIjOUEwQTBFIi8+PHN0b3Agb2Zmc2V0PSIuODY5IiBzdG9wLWNvbG9yPSIjREExODFGIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImEiIHgxPSI0NS45MjYiIHkxPSIzNi4wNTMiIHgyPSI1MS4wNjgiIHkyPSI0My41NjEiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9Ii40NjQiIHN0b3AtY29sb3I9IiNFQTMwMkEiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNDNTE1MUIiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iYyIgeDE9IjQ1LjkyNiIgeTE9IjM2LjA1MyIgeDI9IjUxLjA2OCIgeTI9IjQzLjU2MSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iLjQ2NCIgc3RvcC1jb2xvcj0iI0VBMzAyQSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0M1MTUxQiIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJkIiB4MT0iMzEuOTAxIiB5MT0iNTQuOTMzIiB4Mj0iMzEuOTAxIiB5Mj0iNDcuNDIxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iIzlFMEIwRiIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0RBMTgxRiIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJlIiB4MT0iMzEuOTAxIiB5MT0iNTQuOTMzIiB4Mj0iMzEuOTAxIiB5Mj0iNDcuNDIxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iIzlFMEIwRiIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0RBMTgxRiIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJmIiB4MT0iMzEuOTAxIiB5MT0iNTQuOTMzIiB4Mj0iMzEuOTAxIiB5Mj0iNDcuNDIxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iIzlFMEIwRiIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0RBMTgxRiIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJnIiB4MT0iOCIgeTE9IjQzLjQ2NyIgeDI9IjE2LjM5OSIgeTI9IjM3LjkzOCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiM5QTBBMEUiLz48c3RvcCBvZmZzZXQ9Ii44NjkiIHN0b3AtY29sb3I9IiNEQTE4MUYiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iYiIgeDE9IjQ1LjkyNiIgeTE9IjM2LjA1MyIgeDI9IjUxLjA2OCIgeTI9IjQzLjU2MSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iLjQ2NCIgc3RvcC1jb2xvcj0iI0VBMzAyQSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0M1MTUxQiIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJpIiB4MT0iOCIgeTE9IjQzLjQ2NyIgeDI9IjE2LjM5OSIgeTI9IjM3LjkzOCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiM5QTBBMEUiLz48c3RvcCBvZmZzZXQ9Ii44NjkiIHN0b3AtY29sb3I9IiNEQTE4MUYiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iaiIgeDE9IjQyLjk2MyIgeTE9IjEyLjIzIiB4Mj0iMzMuODY1IiB5Mj0iMjcuMDUiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBzdG9wLWNvbG9yPSIjRjlCMTk4Ii8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjRUUxQzI1Ii8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9ImsiIHgxPSI0Mi45NjMiIHkxPSIxMi4yMyIgeDI9IjMzLjg2NSIgeTI9IjI3LjA1IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iI0Y5QjE5OCIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0VFMUMyNSIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJsIiB4MT0iNDIuOTYzIiB5MT0iMTIuMjMiIHgyPSIzMy44NjUiIHkyPSIyNy4wNSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiNGOUIxOTgiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNFRTFDMjUiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0ibSIgeDE9IjE4Ljc2NSIgeTE9IjEzLjQxNiIgeDI9IjI5LjU0NSIgeTI9IjMyLjU4NSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiNFRTI3MjkiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNFRTFDMjUiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0ibiIgeDE9IjE4Ljc2NSIgeTE9IjEzLjQxNiIgeDI9IjI5LjU0NSIgeTI9IjMyLjU4NSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiNFRTI3MjkiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNFRTFDMjUiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0ibyIgeDE9IjE4Ljc2NSIgeTE9IjEzLjQxNiIgeDI9IjI5LjU0NSIgeTI9IjMyLjU4NSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiNFRTI3MjkiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNFRTFDMjUiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48L3N2Zz4=',\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'fusotao-token.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'NearX',\n symbol: 'NearX',\n icon:\n \"data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M24 12C24 18.6274 18.6274 24 12 24C5.37258 24 0 18.6274 0 12C0 5.37258 5.37258 0 12 0C18.6274 0 24 5.37258 24 12ZM17.1421 21.3847L21.3848 17.1421L19.3669 15.1243C18.5576 17.0302 17.0303 18.5576 15.1243 19.3669L17.1421 21.3847ZM9.4329 19.5792C7.45318 18.9089 5.82112 17.4847 4.87847 15.6484L3.24263 17.2842L7.48527 21.5269L9.4329 19.5792ZM4.63307 8.87568C5.4424 6.96973 6.96977 5.44237 8.87573 4.63305L7.24263 2.99995L2.99999 7.24259L4.63307 8.87568ZM15.6484 4.87847L17.3848 3.14209L21.6274 7.38473L19.5792 9.4329C18.9089 7.45318 17.4847 5.82112 15.6484 4.87847Z' fill='%232FA8AF'/%3E%3Cpath d='M8.00119 11.9921C8.00119 11.0268 8.00119 10.0615 8.00119 9.09612C8.00119 8.50505 8.16497 8.1743 8.56285 8.05781C8.97778 7.93628 9.40619 7.97917 9.79565 8.45228C11.3533 10.3447 12.9343 12.218 14.5092 14.0959C14.5692 14.1676 14.6117 14.3122 14.734 14.2626C14.8496 14.2157 14.7858 14.0805 14.786 13.9878C14.7904 12.6326 14.7898 11.2774 14.7868 9.92226C14.7868 9.83668 14.838 9.7162 14.7271 9.67372C14.6401 9.64029 14.5824 9.74185 14.522 9.79358C14.0492 10.1981 13.5804 10.6073 13.1088 11.0133C13.0208 11.089 12.9332 11.2118 12.8002 11.1012C12.6657 10.9894 12.7696 10.8872 12.8364 10.7881C13.3547 10.0186 13.8728 9.24898 14.3909 8.47919C14.6656 8.07085 15.0079 7.92282 15.4056 8.04141C15.786 8.15475 15.9986 8.48592 15.9992 8.97668C16.0007 10.0905 15.9996 11.2045 15.9996 12.3183C15.9996 13.2094 16.0003 14.1005 15.9994 14.9916C15.999 15.4826 15.8137 15.798 15.4512 15.9324C15.0256 16.0901 14.5767 15.9683 14.2734 15.6058C12.6823 13.705 11.0924 11.8029 9.50198 9.90144C9.46029 9.85161 9.42303 9.7961 9.37377 9.75489C9.28998 9.68487 9.21967 9.68108 9.21314 9.81797C9.20999 9.88273 9.21188 9.94791 9.21188 10.0129C9.21188 11.3496 9.21062 12.6862 9.2142 14.0227C9.21441 14.1186 9.15609 14.2557 9.26114 14.3038C9.38093 14.3587 9.45061 14.2178 9.52998 14.1503C9.98259 13.7651 10.4291 13.3728 10.8805 12.9859C10.9729 12.9066 11.0626 12.7651 11.208 12.8973C11.3402 13.0176 11.2213 13.1196 11.159 13.2127C10.6323 13.9989 10.1032 14.7837 9.57145 15.5663C9.32788 15.9248 8.9881 16.056 8.61085 15.9488C8.23739 15.8428 8.00498 15.5246 8.00287 15.0827C7.99761 14.0523 8.00119 13.022 8.00119 11.9917V11.9921Z' fill='white'/%3E%3C/svg%3E%0A\",\n reference: 'https://near.staderlabs.com',\n reference_hash: null,\n decimals: 24,\n id: 'v2-nearx.stader-labs.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'DISCOVOL TOKEN',\n symbol: 'DISC',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSLlm77lsYJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4PSIwIiB5PSIwIiB2aWV3Qm94PSIwIDAgMTQxLjcgMTQxLjciIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDE0MS43IDE0MS43IiB4bWw6c3BhY2U9InByZXNlcnZlIj48c3R5bGU+LnN0MHtmaWxsOiNmOTcxMTZ9PC9zdHlsZT48cGF0aCBjbGFzcz0ic3QwIiBkPSJNNDYuMSAxOC43djEwNS42czIxLjMtNS41IDMzLjEtMjljMCAwIDEyLjctMjIuMi0uOS00OS43IDAgMC0xMC4xLTIwLjktMzIuMi0yNi45eiIvPjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xMDUuNyA5LjRjMzEuMSAxOC4zIDM0LjUgNDguNCAzNC41IDQ4LjQgNi40IDM3LjktMTcgNjAuMy0xNyA2MC4zLTMxLjQgMzQuNS03My40IDIwLjMtNzMuNCAyMC4zIDMwLjYtOS4zIDQxLjktMzUuMSA0MS45LTM1LjEgMTYuNi0zNS41IDAtNjMuMiAwLTYzLjJDNzcgOS43IDQ3LjMgMy45IDQ3LjMgMy45YzMyLjQtMTEuMyA1OC40IDUuNSA1OC40IDUuNXptNyAxMS41UzExMS4xIDM4IDk0LjcgMzhjMCAwIDE2IDIuOCAxNy41IDE4LjggMCAwIDEuNC0xNy41IDE4LjItMTguMy0uMSAwLTE4LjUtMS41LTE3LjctMTcuNnpNMjUuNiAxNS45aDUuOXYxMTAuOEgyN1M4IDExMiAyLjIgODkuMmMwIDAtNy43LTI2LjIgNS01MC40LjEuMSA5LjUtMTcgMTguNC0yMi45eiIvPjwvc3ZnPg==',\n reference: null,\n reference_hash: null,\n decimals: 14,\n id: 'discovol-token.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Stader',\n symbol: 'SD',\n icon:\n \"data:image/svg+xml,%3Csvg width='256' height='256' viewBox='0 0 256 256' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M128 256C198.692 256 256 198.692 256 128C256 57.3075 198.692 0 128 0C57.3075 0 0 57.3075 0 128C0 198.692 57.3075 256 128 256Z' fill='%236259D4'/%3E%3Cpath d='M126.852 191.869L126.822 181.088L153.98 165.105L153.886 133.025L163.667 127.882L164.056 170.723L126.852 191.869Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M153.98 165.105L126.822 181.088L126.852 191.869L164.056 170.723L163.667 127.882L153.886 133.025L153.98 165.105ZM154.207 133.218L154.3 165.104C154.301 165.218 154.241 165.323 154.143 165.381L127.143 181.271L127.171 191.32L163.735 170.538L163.352 128.41L154.207 133.218Z' fill='%236259D4'/%3E%3Cpath d='M134.785 112.611L145.906 106.314L173.184 123.396L173.334 175.037L164.063 170.734L163.673 127.894L134.785 112.611Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M163.673 127.894L164.063 170.734L173.334 175.037L173.184 123.396L145.906 106.314L134.785 112.611L163.673 127.894ZM135.451 112.601L163.823 127.611C163.927 127.666 163.992 127.773 163.993 127.891L164.381 170.529L173.013 174.535L172.865 123.574L145.898 106.687L135.451 112.601Z' fill='%236259D4'/%3E%3Cpath d='M126.443 53.3335L173.06 79.8728L173.094 90.9255L126.49 64.9081L126.443 53.3335Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M126.443 53.3335L126.49 64.9081L173.094 90.9255L173.06 79.8728L126.443 53.3335ZM126.766 53.8852L126.81 64.7198L172.773 90.3795L172.741 80.0592L126.766 53.8852Z' fill='%236259D4'/%3E%3Cpath d='M80.1584 134.322L80 80.4074L126.432 53.3335L126.48 64.9081L88.7187 86.0335L88.5731 128.106L80.1584 134.322Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M88.7187 86.0335L126.48 64.9081L126.432 53.3335L80 80.4074L80.1584 134.322L88.5731 128.106L88.7187 86.0335ZM88.2536 127.944L88.3987 86.0324C88.3991 85.9169 88.4617 85.8106 88.5624 85.7542L126.159 64.7209L126.115 53.8892L80.3205 80.5909L80.4766 133.689L88.2536 127.944Z' fill='%236259D4'/%3E%3Cpath d='M107.511 149.374L80.1562 134.324L88.5709 128.108L135.44 154.885L107.58 170.601L98.2445 175.794L126.85 191.879L164.054 170.733L173.325 175.035L126.619 202.66L80.2804 176.371L117.215 154.711L107.511 149.374Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M107.58 170.601L135.44 154.885L88.5709 128.108L80.1562 134.324L117.215 154.711L80.2804 176.371L126.619 202.66L173.325 175.035L164.054 170.733L126.85 191.879L98.2445 175.794L107.58 170.601ZM164.069 171.092L127.008 192.157C126.91 192.213 126.791 192.213 126.693 192.158L98.0877 176.073C97.9866 176.016 97.9242 175.909 97.9245 175.794C97.9248 175.678 97.9877 175.571 98.0889 175.515L107.423 170.322L134.792 154.884L88.5932 128.49L80.7483 134.285L107.666 149.093L117.369 154.431C117.47 154.486 117.533 154.592 117.535 154.707C117.536 154.822 117.476 154.929 117.377 154.987L80.9208 176.367L126.615 202.29L172.639 175.069L164.069 171.092Z' fill='%236259D4'/%3E%3Cpath d='M88.7207 86.0458L126.482 64.9204L173.085 90.9378L145.902 106.323L134.781 112.619L163.669 127.902L153.888 133.044L116.808 112.11L153.764 90.4499L144.947 85.4178L126.512 74.8955L99.0623 90.6069L88.7207 86.0458Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M173.085 90.9378L126.482 64.9204L88.7207 86.0458L99.0623 90.6069L126.512 74.8955L153.764 90.4499L116.808 112.11L153.888 133.044L163.669 127.902L134.781 112.619L173.085 90.9378ZM162.983 127.901L134.631 112.902C134.528 112.847 134.462 112.741 134.461 112.624C134.459 112.507 134.521 112.398 134.623 112.341L145.744 106.044L172.432 90.9397L126.482 65.287L89.4368 86.0119L99.0436 90.2489L126.353 74.6177C126.451 74.5614 126.572 74.5614 126.67 74.6175L153.923 90.172C154.022 90.2286 154.083 90.3338 154.084 90.4481C154.085 90.5623 154.024 90.6682 153.926 90.726L117.45 112.105L153.894 132.68L162.983 127.901Z' fill='%236259D4'/%3E%3Cpath d='M98.252 175.789L107.587 170.596L126.827 181.093L126.857 191.874L98.252 175.789Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M98.252 175.789L126.857 191.874L126.827 181.093L107.587 170.596L98.252 175.789ZM98.9075 175.791L126.536 191.326L126.508 181.283L107.589 170.962L98.9075 175.791Z' fill='%236259D4'/%3E%3Cpath d='M80.2804 176.368L80.2461 164.785L107.511 149.371L117.215 154.708L80.2804 176.368Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M80.2804 176.368L117.215 154.708L107.511 149.371L80.2461 164.785L80.2804 176.368ZM80.5987 175.81L116.567 154.717L107.513 149.737L80.5666 164.971L80.5987 175.81Z' fill='%236259D4'/%3E%3Cpath d='M116.809 112.109L116.92 101.073L144.947 85.417L153.764 90.4491L116.809 112.109Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M116.809 112.109L153.764 90.4491L144.947 85.417L116.92 101.073L116.809 112.109ZM117.134 111.547L153.125 90.4528L144.946 85.7845L117.238 101.262L117.134 111.547Z' fill='%236259D4'/%3E%3Cpath d='M88.5723 128.087L88.7179 86.0142L99.0595 90.5753L99.1537 123.589L135.407 143.582L135.442 154.864L88.5723 128.087Z' fill='white'/%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M99.1537 123.589L99.0595 90.5753L88.7179 86.0142L88.5723 128.087L135.442 154.864L135.407 143.582L99.1537 123.589ZM135.088 143.771L98.9992 123.869C98.8974 123.813 98.8341 123.706 98.8337 123.59L98.7401 90.7841L89.0362 86.5043L88.8929 127.901L135.12 154.311L135.088 143.771Z' fill='%236259D4'/%3E%3C/svg%3E\",\n reference: '',\n reference_hash: '',\n decimals: 18,\n id: '30d20208d987713f46dfd34ef128bb16c404d10f.factory.bridge.near',\n },\n {\n spec: 'ft-1.0',\n name: 'SWEAT',\n symbol: 'SWEAT',\n icon:\n \"data:image/svg+xml,%3Csvg viewBox='0 0 100 100' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='100' height='100' rx='50' fill='%23FF0D75'/%3E%3Cg clip-path='url(%23clip0_283_2788)'%3E%3Cpath d='M39.4653 77.5455L19.0089 40.02L35.5411 22.2805L55.9975 59.806L39.4653 77.5455Z' stroke='white' stroke-width='10'/%3E%3Cpath d='M66.0253 77.8531L45.569 40.3276L62.1012 22.5882L82.5576 60.1136L66.0253 77.8531Z' stroke='white' stroke-width='10'/%3E%3C/g%3E%3Cdefs%3E%3CclipPath id='clip0_283_2788'%3E%3Crect width='100' height='56' fill='white' transform='translate(0 22)'/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E%0A\",\n reference: null,\n reference_hash: null,\n decimals: 18,\n id: 'token.sweat',\n },\n {\n spec: 'ft-1.0.0',\n name: 'APYSwap',\n symbol: 'APYS',\n icon:\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgdmlld0JveD0iLTEwIC0xMCAxMjAgMTIwIiBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8ZyBjbGlwLXBhdGg9InVybCgjY2xpcDBfMTQ2OF81MTk1KSI+CjxwYXRoIGQ9Ik0zOC40MzUzIDEyLjY4NUw3NC41ODY5IDc3Ljg2NzdMOTguOTk5OSA3OC41NjYzTDYyLjY3NDkgMTMuMzc4N0wzOC40MzUzIDEyLjY4NVoiIGZpbGw9InVybCgjcGFpbnQwX2xpbmVhcl8xNDY4XzUxOTUpIi8+CjxwYXRoIGQ9Ik0xMi43NjcyIDU1LjQwNzFMODYuOTM2NiA1Ni42MzI2TDk4Ljk5ODIgNzcuODM0OEwwLjAxMTcwNDYgNzYuMTk5MkwxMi43NjcyIDU1LjQwNzFaIiBmaWxsPSJ1cmwoI3BhaW50MV9saW5lYXJfMTQ2OF81MTk1KSIvPgo8cGF0aCBkPSJNNjIuMjQxMSAxMy4wOTRMMjMuODY5OCA3Ny4wODU2TC0wLjUxMDgwNSA3Ni45MTIyTDM3Ljg2NzMgMTIuOTIwN0w2Mi4yNDExIDEzLjA5NFoiIGZpbGw9InVybCgjcGFpbnQyX2xpbmVhcl8xNDY4XzUxOTUpIi8+CjwvZz4KPGRlZnM+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQwX2xpbmVhcl8xNDY4XzUxOTUiIHgxPSI1NS45Njc3IiB5MT0iMjMuODc4MSIgeDI9Ijg1LjQ4MjUiIHkyPSI3Ny4wMTI2IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIHN0b3AtY29sb3I9IiMwOEFFRUEiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMkFGNTk4Ii8+CjwvbGluZWFyR3JhZGllbnQ+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQxX2xpbmVhcl8xNDY4XzUxOTUiIHgxPSIyOS40ODcxIiB5MT0iNjcuODQzIiB4Mj0iNjguOTYzNiIgeTI9IjY4LjgwMzIiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KPHN0b3Agc3RvcC1jb2xvcj0iIzA4QUVFQSIvPgo8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMyQUY1OTgiLz4KPC9saW5lYXJHcmFkaWVudD4KPGxpbmVhckdyYWRpZW50IGlkPSJwYWludDJfbGluZWFyXzE0NjhfNTE5NSIgeDE9IjUxLjk4MzUiIHkxPSIzLjEzMzQ1IiB4Mj0iMzEuMjQxOCIgeTI9IjM2LjE3MzUiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KPHN0b3Agc3RvcC1jb2xvcj0iIzA4QUVFQSIvPgo8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMyQUY1OTgiLz4KPC9saW5lYXJHcmFkaWVudD4KPGNsaXBQYXRoIGlkPSJjbGlwMF8xNDY4XzUxOTUiPgo8cmVjdCB3aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCIgZmlsbD0id2hpdGUiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4=',\n reference: null,\n reference_hash: null,\n decimals: 24,\n id: 'apys.token.a11bd.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'Tether USD',\n symbol: 'USDt',\n icon:\n \"data:image/svg+xml,%3Csvg width='111' height='90' viewBox='0 0 111 90' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M24.4825 0.862305H88.0496C89.5663 0.862305 90.9675 1.64827 91.7239 2.92338L110.244 34.1419C111.204 35.7609 110.919 37.8043 109.549 39.1171L58.5729 87.9703C56.9216 89.5528 54.2652 89.5528 52.6139 87.9703L1.70699 39.1831C0.305262 37.8398 0.0427812 35.7367 1.07354 34.1077L20.8696 2.82322C21.6406 1.60483 23.0087 0.862305 24.4825 0.862305ZM79.8419 14.8003V23.5597H61.7343V29.6329C74.4518 30.2819 83.9934 32.9475 84.0642 36.1425L84.0638 42.803C83.993 45.998 74.4518 48.6635 61.7343 49.3125V64.2168H49.7105V49.3125C36.9929 48.6635 27.4513 45.998 27.3805 42.803L27.381 36.1425C27.4517 32.9475 36.9929 30.2819 49.7105 29.6329V23.5597H31.6028V14.8003H79.8419ZM55.7224 44.7367C69.2943 44.7367 80.6382 42.4827 83.4143 39.4727C81.0601 36.9202 72.5448 34.9114 61.7343 34.3597V40.7183C59.7966 40.8172 57.7852 40.8693 55.7224 40.8693C53.6595 40.8693 51.6481 40.8172 49.7105 40.7183V34.3597C38.8999 34.9114 30.3846 36.9202 28.0304 39.4727C30.8066 42.4827 42.1504 44.7367 55.7224 44.7367Z' fill='%23009393'/%3E%3C/svg%3E\",\n reference: null,\n reference_hash: null,\n decimals: 6,\n id: 'usdt.tether-token.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'NEAT',\n symbol: 'NEAT',\n icon:\n \"data:image/svg+xml,%3Csvg width='40' height='40' viewBox='0 0 40 40' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='40' height='40' rx='4.8' fill='%23202020'/%3E%3Crect width='40' height='40' rx='4.8' fill='url(%23paint0_linear_1_5571)'/%3E%3Crect x='10.4' y='12.6001' width='4.8' height='4.8' fill='white'/%3E%3Crect x='15.2' y='12.6001' width='4.8' height='4.8' fill='white'/%3E%3Crect x='24.8' y='12.6001' width='4.8' height='4.8' fill='white'/%3E%3Crect x='10.4' y='17.4001' width='4.8' height='4.8' fill='white'/%3E%3Crect x='24.8' y='17.4001' width='4.8' height='4.8' fill='white'/%3E%3Crect x='10.4' y='22.2002' width='4.8' height='4.8' fill='white'/%3E%3Crect x='24.8' y='22.2002' width='4.8' height='4.8' fill='white'/%3E%3Crect x='20' y='22.2002' width='4.8' height='4.8' fill='white'/%3E%3Crect x='17.6' y='17.4001' width='4.8' height='4.8' fill='white'/%3E%3Cdefs%3E%3ClinearGradient id='paint0_linear_1_5571' x1='20' y1='0' x2='20' y2='40' gradientUnits='userSpaceOnUse'%3E%3Cstop stop-color='%23262626'/%3E%3Cstop offset='1' stop-color='%23121212'/%3E%3C/linearGradient%3E%3C/defs%3E%3C/svg%3E%0A\",\n reference: null,\n reference_hash: null,\n decimals: 8,\n id: 'neat.nrc-20.near',\n },\n {\n spec: 'ft-1.0.0',\n name: 'USMeme',\n symbol: 'USM',\n icon:\n 'https://storage.herewallet.app/upload/13151331-8f9c-4851-8038-36794688c693.jpg',\n reference: null,\n reference_hash: null,\n decimals: 8,\n id: 'usmeme.tg',\n },\n];\n\nexport function getDefaultTokenList() {\n const env = getConfig().networkId;\n\n switch (env) {\n case 'mainnet':\n return DefaultMainnetTokenList;\n case 'testnet':\n return DefaultTestnetTokenList;\n default:\n return DefaultMainnetTokenList;\n }\n}\n","import { TokenMetadata, Transaction } from '../types';\n\nimport {\n priceToPoint,\n toNonDivisibleNumber,\n toPrecision,\n registerAccountOnToken,\n} from '../utils';\nimport { ONE_YOCTO_NEAR, WRAP_NEAR_CONTRACT_ID, config } from '../constant';\nimport { DCLSwapGetStorageBalance } from '../ref';\nimport { DCL_POOL_FEE_LIST, getDCLPoolId } from './dcl-pool';\nimport {\n nearDepositTransaction,\n ftGetStorageBalance,\n refDCLSwapViewFunction,\n} from '../ref';\nimport _ from 'lodash';\nimport { toReadableNumber, percentLess } from '../utils';\nimport { NoPoolOnThisPair, SlippageError } from '../error';\n\ninterface SwapInfo {\n tokenA: TokenMetadata;\n tokenB: TokenMetadata;\n amountA: string;\n}\n\ninterface DCLSwapProps {\n swapInfo: SwapInfo;\n Swap?: {\n pool_ids: string[];\n min_output_amount: string;\n };\n SwapByOutput?: {\n pool_ids: string[];\n output_amount: string;\n };\n LimitOrderWithSwap?: {\n pool_id: string;\n output_amount: string;\n };\n SwapByStopPoint?: {\n pool_id: string;\n stop_point: number;\n skip_unwrap_near: boolean;\n };\n AccountId: string;\n}\nexport const DCL_POOL_SPLITER = '|';\n\nexport const DCLSwap = async ({\n Swap,\n SwapByOutput,\n LimitOrderWithSwap,\n SwapByStopPoint,\n AccountId,\n swapInfo,\n}: DCLSwapProps) => {\n const transactions: Transaction[] = [];\n\n const { tokenA, tokenB, amountA } = swapInfo;\n\n if (Swap) {\n const pool_ids = Swap.pool_ids;\n\n const tokenRegistered = await ftGetStorageBalance(\n tokenB.id,\n AccountId\n ).catch(() => {\n throw new Error(`${tokenB.id} doesn't exist.`);\n });\n\n if (tokenRegistered === null) {\n transactions.push({\n receiverId: tokenB.id,\n functionCalls: [registerAccountOnToken(AccountId)],\n });\n }\n\n const output_token = tokenB.id;\n const min_output_amount = toPrecision(Swap.min_output_amount, 0);\n\n const msg = JSON.stringify({\n Swap: {\n pool_ids,\n output_token,\n min_output_amount,\n client_id: '',\n },\n });\n\n transactions.push({\n receiverId: tokenA.id,\n functionCalls: [\n {\n methodName: 'ft_transfer_call',\n args: {\n receiver_id: config.REF_DCL_SWAP_CONTRACT_ID,\n amount: toNonDivisibleNumber(tokenA.decimals, amountA),\n msg,\n },\n gas: '180000000000000',\n amount: ONE_YOCTO_NEAR,\n },\n ],\n });\n } else if (SwapByOutput) {\n const pool_ids = SwapByOutput.pool_ids;\n const output_token = tokenB.id;\n const output_amount = toNonDivisibleNumber(\n tokenB.decimals,\n SwapByOutput.output_amount\n );\n const msg = JSON.stringify({\n SwapByOutput: {\n pool_ids,\n output_token,\n output_amount,\n client_id: '',\n },\n });\n const tokenRegistered = await ftGetStorageBalance(\n tokenB.id,\n AccountId\n ).catch(() => {\n throw new Error(`${tokenB.id} doesn't exist.`);\n });\n\n if (tokenRegistered === null) {\n transactions.push({\n receiverId: tokenB.id,\n functionCalls: [registerAccountOnToken(AccountId)],\n });\n }\n\n transactions.push({\n receiverId: tokenA.id,\n functionCalls: [\n {\n methodName: 'ft_transfer_call',\n args: {\n receiver_id: config.REF_DCL_SWAP_CONTRACT_ID,\n amount: toNonDivisibleNumber(tokenA.decimals, amountA),\n msg,\n },\n gas: '180000000000000',\n amount: ONE_YOCTO_NEAR,\n },\n ],\n });\n } else if (LimitOrderWithSwap) {\n const pool_id = LimitOrderWithSwap.pool_id;\n\n const fee = Number(pool_id.split(DCL_POOL_SPLITER)[2]);\n\n const buy_token = tokenB.id;\n const point = priceToPoint({\n amountA,\n amountB: LimitOrderWithSwap.output_amount,\n tokenA,\n tokenB,\n fee,\n });\n\n const tokenRegistered = await ftGetStorageBalance(\n tokenB.id,\n AccountId\n ).catch(() => {\n throw new Error(`${tokenB.id} doesn't exist.`);\n });\n\n if (tokenRegistered === null) {\n transactions.push({\n receiverId: tokenB.id,\n functionCalls: [registerAccountOnToken(AccountId)],\n });\n }\n\n const DCLRegistered = await DCLSwapGetStorageBalance(\n tokenB.id,\n AccountId\n ).catch(() => {\n throw new Error(`${tokenB.id} doesn't exist.`);\n });\n\n if (DCLRegistered === null) {\n transactions.push({\n receiverId: config.REF_DCL_SWAP_CONTRACT_ID,\n functionCalls: [\n {\n methodName: 'storage_deposit',\n args: {\n registration_only: true,\n account_id: AccountId,\n },\n gas: '30000000000000',\n amount: '0.5',\n },\n ],\n });\n }\n\n const new_point =\n pool_id.split(DCL_POOL_SPLITER)[0] === tokenA.id ? point : -point;\n\n const msg = JSON.stringify({\n LimitOrderWithSwap: {\n pool_id,\n buy_token,\n point: new_point,\n client_id: '',\n },\n });\n\n transactions.push({\n receiverId: tokenA.id,\n functionCalls: [\n {\n methodName: 'ft_transfer_call',\n args: {\n receiver_id: config.REF_DCL_SWAP_CONTRACT_ID,\n amount: toNonDivisibleNumber(tokenA.decimals, amountA),\n msg,\n },\n gas: '180000000000000',\n amount: ONE_YOCTO_NEAR,\n },\n ],\n });\n } else if (SwapByStopPoint) {\n const tokenRegistered = await ftGetStorageBalance(\n tokenB.id,\n AccountId\n ).catch(() => {\n throw new Error(`${tokenB.id} doesn't exist.`);\n });\n\n if (tokenRegistered === null) {\n transactions.push({\n receiverId: tokenB.id,\n functionCalls: [registerAccountOnToken(AccountId)],\n });\n }\n const msg = JSON.stringify({\n SwapByStopPoint: SwapByStopPoint,\n });\n transactions.push({\n receiverId: tokenA.id,\n functionCalls: [\n {\n methodName: 'ft_transfer_call',\n args: {\n receiver_id: config.REF_DCL_SWAP_CONTRACT_ID,\n amount: toNonDivisibleNumber(tokenA.decimals, amountA),\n msg,\n },\n gas: '180000000000000',\n amount: ONE_YOCTO_NEAR,\n },\n ],\n });\n }\n\n if (tokenA.id === WRAP_NEAR_CONTRACT_ID) {\n const registered = await ftGetStorageBalance(\n WRAP_NEAR_CONTRACT_ID,\n AccountId\n );\n if (registered === null) {\n transactions.unshift({\n receiverId: WRAP_NEAR_CONTRACT_ID,\n functionCalls: [registerAccountOnToken(AccountId)],\n });\n }\n }\n\n return transactions;\n};\n\nexport const quote = async ({\n pool_ids,\n input_amount,\n input_token,\n output_token,\n tag,\n}: {\n pool_ids: string[];\n input_token: TokenMetadata;\n output_token: TokenMetadata;\n input_amount: string;\n tag?: string;\n}) => {\n return refDCLSwapViewFunction({\n methodName: 'quote',\n args: {\n pool_ids,\n input_token: input_token.id,\n output_token: output_token.id,\n input_amount: toNonDivisibleNumber(input_token.decimals, input_amount),\n tag,\n },\n });\n};\n\nexport const list_user_assets = async (AccountId: string) => {\n if (!AccountId) return;\n\n return refDCLSwapViewFunction({\n methodName: 'list_user_assets',\n args: {\n account_id: AccountId,\n },\n });\n};\n\nexport const DCLSwapByInputOnBestPool = async ({\n tokenA,\n tokenB,\n amountA,\n slippageTolerance,\n AccountId,\n}: {\n tokenA: TokenMetadata;\n tokenB: TokenMetadata;\n amountA: string;\n slippageTolerance: number;\n AccountId: string;\n}) => {\n if (slippageTolerance <= 0 || slippageTolerance >= 100) {\n throw SlippageError;\n }\n\n const estimates = await Promise.all(\n DCL_POOL_FEE_LIST.map(async fee => {\n const pool_id = getDCLPoolId(tokenA.id, tokenB.id, fee);\n return quote({\n pool_ids: [pool_id],\n input_token: tokenA,\n output_token: tokenB,\n input_amount: amountA,\n tag: `${tokenA.id}-${fee}-${amountA}`,\n }).catch(e => null);\n })\n );\n\n if (!estimates || estimates.every(e => e === null)) {\n throw NoPoolOnThisPair(tokenA.id, tokenB.id);\n }\n\n const bestEstimate =\n estimates && estimates?.some(e => !!e)\n ? _.maxBy(estimates, e => Number(!e || !e.tag ? -1 : e.amount))\n : null;\n\n const bestFee =\n bestEstimate &&\n bestEstimate.tag &&\n bestEstimate?.tag?.split('-')?.[1] &&\n Number(bestEstimate?.tag?.split('-')?.[1]);\n\n return DCLSwap({\n swapInfo: {\n tokenA,\n tokenB,\n amountA,\n },\n Swap: {\n pool_ids: [getDCLPoolId(tokenA.id, tokenB.id, bestFee)],\n min_output_amount: percentLess(slippageTolerance, bestEstimate.amount),\n },\n AccountId,\n });\n};\n\nexport const quote_by_output = ({\n pool_ids,\n output_amount,\n input_token,\n output_token,\n}: {\n pool_ids: string[];\n input_token: TokenMetadata;\n output_token: TokenMetadata;\n output_amount: string;\n}) => {\n return refDCLSwapViewFunction({\n methodName: 'quote_by_output',\n args: {\n pool_ids,\n input_token: input_token.id,\n output_token: output_token.id,\n output_amount: toNonDivisibleNumber(output_token.decimals, output_amount),\n },\n });\n};\n","import { TokenMetadata, Transaction } from '../types';\nimport { NoOrderFound, OrderNoRemainedAmount } from '../error';\nimport {\n priceToPoint,\n toNonDivisibleNumber,\n toPrecision,\n registerAccountOnToken,\n} from '../utils';\nimport {\n ONE_YOCTO_NEAR,\n WRAP_NEAR_CONTRACT_ID,\n config,\n POINTLEFTRANGE,\n POINTRIGHTRANGE,\n} from '../constant';\nimport {\n nearDepositTransaction,\n ftGetStorageBalance,\n refDCLSwapViewFunction,\n} from '../ref';\n\nexport interface UserOrderInfo {\n order_id: string;\n owner_id: string;\n pool_id: string;\n point: number;\n sell_token: string;\n created_at: string;\n original_amount: string;\n remain_amount: string; // 0 means history order: ;\n cancel_amount: string;\n // amount through ft_transfer_call\n\n original_deposit_amount: string;\n // earn token amount through swap before actual place order\n\n swap_earn_amount: string;\n buy_token: string;\n unclaimed_amount: string; // claim will push it to inner account\n bought_amount: string; // accumalated amount into inner account\n}\n\nexport const list_history_orders = (AccountId: string) => {\n return refDCLSwapViewFunction({\n methodName: 'list_history_orders',\n args: {\n account_id: AccountId,\n },\n });\n};\n\nexport const list_active_orders = (AccountId: string) => {\n return refDCLSwapViewFunction({\n methodName: 'list_active_orders',\n args: {\n account_id: AccountId,\n },\n });\n};\n\nexport const get_order = async (order_id: string) => {\n return refDCLSwapViewFunction({\n methodName: 'get_order',\n args: {\n order_id,\n },\n }).catch(() => {\n throw NoOrderFound(order_id);\n });\n};\n\nexport const find_order = async ({\n pool_id,\n point,\n AccountId,\n}: {\n pool_id: string;\n point: number;\n AccountId: string;\n}) => {\n return refDCLSwapViewFunction({\n methodName: 'find_order',\n args: {\n account_id: AccountId,\n pool_id,\n point,\n },\n }).catch(() => {\n throw NoOrderFound();\n }) as Promise<UserOrderInfo>;\n};\nexport const cancel_order = async (order_id: string) => {\n const order = await get_order(order_id);\n\n if (!order.remain_amount) throw OrderNoRemainedAmount;\n\n const transactions: Transaction[] = [\n {\n receiverId: config.REF_DCL_SWAP_CONTRACT_ID,\n functionCalls: [\n {\n methodName: 'cancel_order',\n args: {\n order_id,\n amount: order.remain_amount,\n },\n gas: '180000000000000',\n },\n ],\n },\n ];\n\n return transactions;\n};\n\nexport const claim_order = (order_id: string) => {\n const transactions: Transaction[] = [\n {\n receiverId: config.REF_DCL_SWAP_CONTRACT_ID,\n functionCalls: [\n {\n methodName: 'cancel_order',\n args: {\n order_id,\n amount: '0',\n },\n gas: '180000000000000',\n },\n ],\n },\n ];\n\n return transactions;\n};\n\nexport const get_pointorder_range = ({\n pool_id,\n left_point,\n right_point,\n}: {\n pool_id: string;\n left_point?: number;\n right_point?: number;\n}) => {\n return refDCLSwapViewFunction({\n methodName: 'get_pointorder_range',\n args: {\n pool_id,\n left_point: left_point || POINTLEFTRANGE,\n right_point: right_point || POINTRIGHTRANGE,\n },\n });\n};\n"],"names":["FEE_DIVISOR","DEFAULT_SLIPPAGE_TOLERANCE","STABLE_LP_TOKEN_DECIMALS","RATED_POOL_LP_TOKEN_DECIMALS","STORAGE_TO_REGISTER_WITH_MFT","FT_MINIMUM_STORAGE_BALANCE_LARGE","ONE_YOCTO_NEAR","ENV","INDEXER_URL","getConfig","env","indexerUrl","nodeUrl","process","NEAR_ENV","REACT_APP_REF_SDK_ENV","networkId","walletUrl","WRAP_NEAR_CONTRACT_ID","REF_FI_CONTRACT_ID","REF_TOKEN_ID","explorerUrl","REF_DCL_SWAP_CONTRACT_ID","config","WNEAR_META_DATA","id","name","symbol","decimals","icon","REF_META_DATA","NEAR_META_DATA","TokenLinks","NEAR","wNEAR","REF","OCT","PARAS","SKYWARD","FLX","PULSE","DBIO","MYRIA","PXT","HAPI","OIN","ABR","MARMAJ","marmaj","USN","GRT","LINK","Cheddar","AURORA","$META","UMINT","UTO","DEIP","WOO","LINEAR","PEM","ATO","SEAT","FAR","BSTN","BRRR","XNL","KSW","STNEAR","NearX","SD","DISC","CONSTANT_D","POINTLEFTRANGE","POINTRIGHTRANGE","switchEnv","tradeFee","amount","trade_fee","calc_d","amp","c_amounts","token_num","length","sum_amounts","_","sum","d_prev","d","i","d_prod","c_amount","ann","numerator","denominator","Math","abs","calc_y","x_c_amount","current_c_amounts","index_x","index_y","s","c","b","y_prev","y","y_numerator","y_denominator","calc_swap","in_token_idx","in_c_amount","out_token_idx","old_c_amounts","dy","fee","amount_swapped","getSwappedAmount","tokenInId","tokenOutId","amountIn","stablePool","total_fee","token_account_ids","findIndex","rates","degens","map","r","toReadableNumber","base_old_c_amounts","toNonDivisibleNumber","scientificNotationToString","Big","times","toString","Number","REF_WIDGET_STAR_TOKEN_LIST_KEY","REF_WIDGET_ALL_TOKENS_LIST_KEY","REF_WIDGET_ALL_LIGHT_TOKENS_LIST_KEY","REF_WIDGET_SWAP_IN_KEY","REF_WIDGET_SWAP_OUT_KEY","REF_WIDGET_SWAP_DETAIL_KEY","DEFAULT_START_TOKEN_LIST_TESTNET","DEFAULT_START_TOKEN_LIST_MAINNET","defaultTheme","container","buttonBg","primary","secondary","borderRadius","fontFamily","hover","active","secondaryBg","borderColor","iconDefault","iconHover","defaultDarkModeTheme","refIcon","icons","getTokenPriceList","fetch","method","headers","then","res","json","list","getTokens","reload","storagedTokens","window","localStorage","getItem","JSON","parse","tokens","newTokens","Object","values","reduce","acc","cur","keys","REPLACE_TOKENS","includes","metaIconDefaults","setItem","stringify","getTokensTiny","getWhiteListTokensIndexer","whiteListIds","RM","DP","NE","PE","checkIntegerSumOfAllocations","allocations","totalInput","item","round","alloSum","a","plus","offset","minus","currMax","currMaxInd","gt","newAllocations","j","push","yenFromPy","bisqrt","value","BigInt","newtonIteration","n","x0","x1","getBetaForRoute","route","path","p","beta","reserves","p1","p2","getEpsilonForRoute","gamma","div","epsilon","gamma1","gamma2","getAlphaForRoute","inputToken","outputToken","key1","token1Id","key2","token2Id","val1","token1Supply","val2","token2Supply","alpha","key11","key12","val11","val12","key21","key22","val21","val22","middleToken","alpha1","alpha2","getAlphaSumFromRoutes","routes","nodeRoutes","alphaSum","nodeRoute","radical","toFixed","denom","getBetaSumFromRoutes","betaSum","num","getPhiFromRoutes","phi","getAllocationForRoute","allocation","getAllocationVectorForRoutes","allocationVec","getOptimalAllocationForRoutes","every","lt","some","reduceRoutes","sumAllocations","normalizedAllocations","goodIndices","dx","newRoutes","newNodeRoutes","goodIndex","allocationDict","allocationVecNew","zeroAllocation","getNodeRoutesFromPathsAndPoolChains","paths","poolChains","multiplicity","pc","mul","elem1","elem2","m","k","getPoolChainFromPaths","pools","threshold","pathInd","chain","pairs","pairInd","pair","tokenPools","getPoolsByToken1ANDToken2","culledPoolChains","getCulledPoolChains","newChains","newPath","legInd","leg","culledPath","cullPoolsWithInsufficientLiquidity","getRoutesFromPoolChain","pci","poolChain","cartesianProduct","getOutputSingleHop","pool","getOutputDoubleHop","poolIndex","c1","a1","c2","b2","getOutputFromRoute","eq","output","getOptOutputVec","result","getBestOptInputAndOutput","rawDict","outputRaw","inputRaw","res1","res2","v","bv1","bv2","input","getBestOptimalAllocationsAndOutputs","maxPathLength","getPathsFromPools","outputs","inputOutput","getHopActionsFromRoutes","hops","hop","allRoutes","allNodeRoutes","totalInputAmount","allAllocations","middleTokenAllocation","getActionListFromRoutesAndAllocations","getSmartRouteSwapActions","allTokens","numberOfRoutesLimit","MAX_NUMBER_PARALLEL_POOLS","decimalsCulledPoolIds","filter","resDict","sortedIndexValues","argsort","topIndices","slice","reducedRoutes","reducedNodeRoutes","ind","currentBestOutput","bestAllocations","bestNodeRoutes","bestRoutes","parallelNodeRoutes","parallelRoutes","currentNodeRoute","bestRoutesAreParallel","filteredAllocationsAndOutputs","parallellAllocations","parallelOutputs","sortIndices","filteredParallelRoutes","filteredParallelNodeRoutes","parallelOutput","canHaveTwoRoutes","route1","route2","nodeRoute1","nodeRoute2","route1PoolIds","Set","route2PoolIds","sharePool","route1PoolId","has","currentRoutes","currentNodeRoutes","filteredAllocations","filteredOutputs","totalOutput","allSortedIndices","sortedIndices","filteredRoutes","filteredNodeRoutes","index","sharedRoute","allFilteredRoutes","allFilteredNodeRoutes","firstRoute","firstRoutePoolIds","allFilteredRouteIds","secondRoute","stringAllo","actions","ftGetTokenMetadata","hopInputTokenMeta","hopOutputTokenMeta","hopOutputTokenDecimals","expectedHopOutput","decimalEstimate","pow","status","Promise","all","t","estimate","gamma_bps","partialAmountIn","supplies","token0_ref_price","token0_price","tokenIds","Dex","token","routeInputToken","routeOutputToken","overallPriceImpact","x","calculateSmartRouteV2PriceImpact","action","deltaY","inputTokenMeta","deltaX","R","P","totalAllocations","weights","weight","routeMarketPrice","num1","denom1","num2","denom2","priceImpact","decor","arr","undecor","decorated","sort","token1","token2","cullZeroLiquidityPools","filteredPools","getLiqudityOfPoolsFromList","liquidities","poolInd","amounts","poolBigAmounts","liquidity","getNormalizedLiquiditiesFromList","maxLiq","bigMax","normalizedLiquidities","arrayOfBigs","maxElem","val","thresh","normLiq","flatMap","e","flat","addEdge","g","edge","src","dst","addEdges","edgeList","deleteEdge","gNew","e1","e2","deleteNode","node","nodeInd","nodeNow","dijkstra","graph","solutions","dist","parent","nearest","Infinity","ndist","adj","concat","shortestPath","ignore_nodes","ignore_edges","gTemp","edgeInd","edgeNow","solution","unshift","PathBuffer","sortedpaths","len","cost","arrayContains","pop","shift","splice","indexOf","arrayEquals","Array","isArray","obj","obj_json","itemInd","source","target","listA","listB","prev_path","sol","root","root_length","edgeToIgnore","spur","getKShortestPaths","gen","next","getGraphFromPoolList","poolList","transitions","stableSmart","smartRouteActions","getExpectedOutputFromActionsORIG","PoolMode","getSimplePoolEstimate","tokenIn","tokenOut","amount_with_fee","in_balance","out_balance","getStablePoolEstimate","getStablePoolDecimal","amountOut","isNaN","toPrecision","dyOut","noFeeAmountOut","singlePoolSwap","simplePools","stablePools","NoPoolError","parsedAmountIn","simplePoolsThisPair","isStablePool","estimatesSimplePool","stablePoolThisPair","sp","estimatesStablePool","find","maxSimplePoolEstimate","undefined","maxBy","maxStablePoolEstimate","getStablePoolsThisPair","getPoolsByTokens","getPoolEstimate","stablePoolDetail","getHybridStableSmart","stablePoolsDetail","isStablePoolToken","stablePoolsDetailById","pools1","pools2","pools1Right","pools2Right","candidatePools","otherStables","otherStable","stablePoolsThisPair","tmpPools","tobeAddedPools","middleTokens","p2s","ftGetTokensMetadata","cp","tokensMedata","BestPoolPair","poolPair","stablePoolDetailThisPair","spd","tmpPool1","tmpPool2","tokenMidId","tokenMidMeta","estimate1","SMART","estimate2","bestPool","STABLE","pool1","pool2","estimateSwap","options","SameInputTokenError","ONLY_ZEROS","test","ZeroInputError","enableSmartRouting","singleRouteEstimate","PARALLEL","inputPools","poolFormatter","simplePoolSmartRoutingActions","simplePoolSmartRoutingEstimate","hybridSmartRoutingRes","hybridSmartRoutingEstimate","gte","parsePool","shareSupply","shares_total_supply","tvl","pool_kind","shares","tokenId","poolId","minAmountOut","isInteger","ceil","convertToPercentDecimal","percent","math","percentOf","percentLess","notation","getGas","gas","BN","getAmount","utils","format","parseNearAmount","number","wholeStr","substring","fractionStr","padStart","replace","split","wholePart","fracPart","padEnd","strParam","flag","sysbol","negative","match","basis","ifFraction","formatWithCommas","pattern","precision","withCommas","atLeastOne","whole","decimal","str","lastIndexOf","transformTransactions","transactions","AccountId","parsedTransactions","signerId","receiverId","functionCalls","fc","type","params","methodName","args","toNumber","deposit","WalletSelectorTransactions","separateRoutes","curRoute","calculateExchangeRate","from","to","getAvgFee","estimates","forEach","getAccountName","account","network","niceAccountId","symbolsArr","multiply","factor1","factor2","toInternationalCurrencySystemLongString","labelValue","percentOfBigNumber","valueBig","percentBig","toRealSymbol","blackList","charAt","toUpperCase","calculateFeeCharge","total","calculateFeePercent","getExpectedOutputFromSwapTodos","calculateAmountReceived","big_in_balance","big_out_balance","constant_product","new_in_balance","new_out_balance","tokenOutReceived","calculateMarketPrice","cur_in_balance","cur_out_balance","calculateSmartRoutingPriceImpact","tokenInAmount","swapTodos","tokenMid","isPool1StablePool","isPool2StablePool","marketPrice1","marketPrice2","generalMarketPrice","tokenMidReceived","formattedTokenMidReceived","stableOutPool2","stablePool2","stableOut","newMarketPrice","PriceImpact","calcStableSwapPriceImpact","marketPrice","calculatePriceImpact","finalMarketPrice","separatedReceivedAmount","finalTokenOutReceived","calculateSmartRoutesV2PriceImpact","tokenInPara","priceImpactForRoutes","readablePartialAmountIn","rawRes","pre","getPriceImpact","PriceImpactValue","priceImpactValueSmartRouting","priceImpactValueSmartRoutingV2","error","subtraction","initialValue","toBeSubtract","getPoolAllocationPercents","partialAmounts","ps","fill","sortedAmount","sortBy","minIndexes","minIndex","finalPIndex","isMobile","screen","width","divide","getMax","minNearAmountLeftForGasFees","String","isValidSlippageTolerance","getPointByPrice","pointDelta","price","decimalRate","noNeedSlot","point","log","point_int","point_int_slot","floor","feeToPointDelta","NoFeeToPool","priceToPoint","tokenA","tokenB","amountA","amountB","DCL_POOL_FEE_LIST","decimal_price_A_by_B","undecimal_price_A_by_B","pointToPrice","undecimal_price","registerAccountOnToken","registration_only","account_id","getKeyStore","keyStores","InMemoryKeyStore","BrowserLocalStorageKeyStore","provider","providers","JsonRpcProvider","url","getMemorySigner","keyPath","credentials","fs","readFileSync","credentialAccountId","NoCredential","AccountIdMisMatch","myKeyStore","setKey","KeyPair","fromString","private_key","signer","InMemorySigner","validateAccessKey","transaction","accessKey","permission","FunctionCall","receiver_id","method_names","parseFloat","getSignedTransactionsByMemoryKey","transactionsRef","block","finality","signedTransactions","getPublicKey","publicKey","NoPuiblicKeyError","query","request_type","public_key","InValidAccessKeyError","tx","nearTransactions","createTransaction","PublicKey","nonce","functionCall","serialize","base_decode","header","hash","signTransaction","signedTx","sendTransactionsByMemoryKey","results","sendTransaction","BANANA_ID","CHEDDAR_ID","CUCUMBER_ID","HAPI_ID","WOO_ID","near","Near","keyStore","init_env","refFiViewFunction","nearConnection","viewFunction","ftViewFunction","ftGetStorageBalance","NoAccountIdFound","ftGetBalance","getAccountNearBalance","getTotalPools","tag","TokenNotExistError","metadata","getGlobalWhitelist","ids","tokensMetadata","globalWhitelist","getUserRegisteredTokens","accountId","data","nearDepositTransaction","nearWithdrawTransaction","refDCLSwapViewFunction","DCLInValid","DCLSwapGetStorageBalance","getMinStorageBalance","nep141Address","method_name","args_base64","balance","Buffer","min","console","getDCLPoolId","tokenSeq","join","listDCLPools","getDCLPool","pool_id","token_x","token_y","token_seq","new_pool_id","formatError","msg","Error","unNamedError","NotLoginError","SwapRouteError","NoLocalSignerError","NoPoolOnThisPair","SlippageError","NoOrderFound","order_id","OrderNoRemainedAmount","instantSwap","slippageTolerance","referralId","registerToken","tokenRegistered","formatNearAmount","actionsList","allSwapsTokens","swapTokens","token_in","token_out","amount_in","min_amount_out","force","referral_id","DEFAULT_PAGE_LIMIT","BLACK_TOKEN_LIST","getRatedPoolDetail","pool_info","getUnRatedPoolDetail","getDegenPoolDetail","getStablePools","allSettled","getPool","getPoolByIds","pool_ids","getRefPools","page","perPage","from_index","limit","poolData","rawPool","fetchAllPools","totalPools","pages","unRatedPools","ratedPools","ThemeContext","createContext","ThemeContextProvider","customTheme","children","useState","theme","setTheme","useEffect","React","Provider","estimateValidator","totalPartialAmountIn","useAllTokens","setTokens","tokensLoading","setTokensLoading","fetchTokens","useTokensIndexer","defaultTokenList","tokenLoading","setTokenLoading","getTokensList","whiteList","globalWhiteListTokens","parsedTokens","newList","useRefPools","refreshTrigger","allPools","setAllPools","poolFetchingState","setPoolFetchingState","allStablePools","setAllStablePools","useSwap","onSwap","setEstimates","canSwap","setCanSwap","swapError","setSwapError","setAmountOut","isEstimating","setIsEstimating","forceEstimate","setForceEstimate","useTokenBalances","balances","updateTokenBalance","tokenInBalance","useMemo","tokenOutBalance","rate","makeSwap","nearDepositAmount","minStorageBalance","outEstimate","bigEstimate","curEstimate","setTimeout","tokensToUpdate","getEstimate","expectAmountOut","estimateValidationPass","TokenPriceContext","useTokenPriceList","tokenPriceList","setTokenPriceList","TokenPriceContextProvider","setBalances","useCallback","updatedTokensBalancesMap","prevState","initTokenBalances","validTokens","interval","setInterval","clearInterval","textColor","displayValue","tokenInInfo","className","SmartRouteV2","tokensRaw","useContext","ParaTokenFrom","style","marginRight","Icon","alt","height","flexShrink","Hub","position","bottom","ArrowRight","DetailView","minReceived","storagedOpen","showDetail","setShowDetail","isRateReverse","setIsRateReverse","tokensPerRoute","swap","identicalRoutes","hub","percents","priceImpactDisplay","displayRate","revertRate","revertDisplayRate","color","cursor","onClick","removeItem","FiChevronDown","FiChevronUp","RiExchangeFill","size","marginLeft","border","flexDirection","alignItems","justifyContent","RouterIcon","whiteSpace","minWidth","key","HalfAndMaxAmount","max","onChangeAmount","halfValue","hoverHalf","setHoverHalf","hoverMax","setHoverMax","background","onMouseEnter","onMouseLeave","half","DECIMAL_POINT","ALLOWED_KEYS","isValidInput","decimalPointsAmount","char","TokenAmount","props","reloading","onSelectToken","onForceUpdate","ref","useRef","hoverSelect","setHoverSelect","handleChange","current","setCustomValidity","curMax","userSelect","RiRefreshLine","onWheel","blur","placeholder","onChange","disabled","marginBottom","textAlign","fontSize","SlippageSelector","onChangeSlippageTolerance","setShowSlip","invalid","setInValid","event","closest","document","addEventListener","removeEventListener","stopPropagation","paddingBottom","required","preventDefault","padding","IoWarning","StarToken","onDelete","hoverIcon","setHoverIcon","hoverClose","setHoverClose","top","right","boxShadow","IoCloseOutline","stroke","Token","isSticky","onClickPin","setHoverIndex","hoverIndex","displayBalance","hoverOutLink","setHoverOutLink","hoverPin","setHoverPin","HiOutlineExternalLink","marginTop","open","AiFillPushpin","AiOutlinePushpin","TokenListTable","starList","setStarList","currentSort","setCurrentSort","tokenSorting","b1","borderBottom","TiArrowSortedUp","TiArrowSortedDown","TokenSelector","onSelect","onClose","searchValue","setSearchValue","handleSearch","storagedStartList","DEFAULT_START_TOKEN_LIST","newStarList","starToken","tableListFilter","searchValueLower","toLowerCase","FiChevronLeft","FaSearch","evt","Slider","showSlip","setHover","viewBox","xmlns","fillRule","clipRule","RefIcon","Loading","cx","cy","strokeWidth","strokeLinecap","Warning","y1","x2","y2","Success","left","gradientUnits","stopColor","Notification","state","detail","setSwapState","notificationStatus","isClosed","isWaitingForConfirmation","isFailure","isSuccess","href","textDecoration","rel","fontWeight","AccountButton","onDisConnect","hoverAccount","setHoverAccount","SwapWidget","connection","transactionState","onConnect","defaultTokenIn","defaultTokenOut","darkMode","curTheme","STORAGED_TOKEN_IN","STORAGED_TOKEN_OUT","isSignedInProp","isSignedIn","setTokenIn","handleSetTokenIn","handleSetTokenOut","setTokenOut","widgetRoute","setWidgetRoute","setAmountIn","setSlippageTolerance","formattedSlippageTolerance","formatted","setRreshTrigger","defaultIn","defaultOut","handleSubmit","setState","canSubmit","tokensLoaded","onSubmit","CgArrowsExchangeAltV","paddingTop","TiWarning","message","opacity","display","DefaultTestnetTokenList","spec","reference","reference_hash","DefaultMainnetTokenList","getDefaultTokenList","DCL_POOL_SPLITER","DCLSwap","Swap","SwapByOutput","LimitOrderWithSwap","SwapByStopPoint","swapInfo","output_token","min_output_amount","client_id","output_amount","buy_token","DCLRegistered","new_point","registered","quote","input_amount","input_token","list_user_assets","DCLSwapByInputOnBestPool","bestEstimate","bestFee","quote_by_output","list_history_orders","list_active_orders","get_order","find_order","cancel_order","order","remain_amount","claim_order","get_pointorder_range","left_point","right_point"],"mappings":"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"}