@aurora-is-near/intents-swap-widget 3.15.2 → 3.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. package/dist/components/TokenIcon.d.ts +5 -12
  2. package/dist/components/TokenIcon.js +34 -32
  3. package/dist/components/TokenIcon.js.map +1 -1
  4. package/dist/{config-CJfcVohD.js → config-DQMHUj5z.js} +678 -681
  5. package/dist/config-DQMHUj5z.js.map +1 -0
  6. package/dist/config.d.ts +1 -1
  7. package/dist/config.js +1 -1
  8. package/dist/constants/chains.d.ts +0 -1
  9. package/dist/constants/chains.js +44 -65
  10. package/dist/constants/chains.js.map +1 -1
  11. package/dist/constants/tokens.d.ts +1 -1
  12. package/dist/constants/tokens.js +3 -50
  13. package/dist/constants/tokens.js.map +1 -1
  14. package/dist/errors.js +1 -1
  15. package/dist/ext/alchemy/index.js +1 -1
  16. package/dist/ext/index.js +1 -1
  17. package/dist/features/BalanceRpcLoader/TokenBalanceLoader.js +1 -1
  18. package/dist/features/BalanceRpcLoader/index.js +1 -1
  19. package/dist/features/BalanceRpcLoader/useTokenBalanceRpc.js +1 -1
  20. package/dist/features/ChainsDropdown/index.js +32 -32
  21. package/dist/features/ChainsDropdown/index.js.map +1 -1
  22. package/dist/features/DepositMethodSwitcher.js +1 -1
  23. package/dist/features/ErrorBoundary.js +1 -1
  24. package/dist/features/ExternalDeposit.js +1 -1
  25. package/dist/features/SendAddress/index.js +1 -1
  26. package/dist/features/SendAddress/useNotification.js +1 -1
  27. package/dist/features/SubmitButton/index.js +1 -1
  28. package/dist/features/SuccessScreen/index.js +1 -1
  29. package/dist/features/SwapDirectionSwitcher.js +1 -1
  30. package/dist/features/SwapQuote/SwapQuote.js +1 -1
  31. package/dist/features/SwapQuote/index.js +1 -1
  32. package/dist/features/TokenInput/TokenInput.js +1 -1
  33. package/dist/features/TokenInput/TokenInputEmpty.js +1 -1
  34. package/dist/features/TokenInput/TokenInputSource.js +1 -1
  35. package/dist/features/TokenInput/TokenInputTarget.js +1 -1
  36. package/dist/features/TokenInput/WalletBalance.js +1 -1
  37. package/dist/features/TokenInput/hooks/index.js +1 -1
  38. package/dist/features/TokenInput/hooks/useTokenInputBalance.js +1 -1
  39. package/dist/features/TokenInput/index.js +1 -1
  40. package/dist/features/TokensList/TokenItem.js +1 -1
  41. package/dist/features/TokensList/TokensList.js +1 -1
  42. package/dist/features/TokensList/index.js +1 -1
  43. package/dist/features/TokensModal.js +1 -1
  44. package/dist/features/WalletCompatibilityCheck/WalletCompatibilityModal.js +1 -1
  45. package/dist/features/WalletCompatibilityCheck/index.js +1 -1
  46. package/dist/features/index.js +1 -1
  47. package/dist/hooks/index.js +1 -1
  48. package/dist/hooks/useAllTokens.js +1 -1
  49. package/dist/hooks/useChains.js +1 -1
  50. package/dist/hooks/useCompatibilityCheck.js +1 -1
  51. package/dist/hooks/useDefaultToken.js +1 -1
  52. package/dist/hooks/useExternalDepositStatus/index.js +1 -1
  53. package/dist/hooks/useExternalDepositStatus/usePoaExternalDepositStatus.js +1 -1
  54. package/dist/hooks/useIntentsBalance.js +1 -1
  55. package/dist/hooks/useIsCompatibilityCheckRequired.js +1 -1
  56. package/dist/hooks/useMakeDepositAddress.js +1 -1
  57. package/dist/hooks/useMakeIntentsTransfer.js +1 -1
  58. package/dist/hooks/useMakeNEARFtTransferCall.js +1 -1
  59. package/dist/hooks/useMakeQuote.js +1 -1
  60. package/dist/hooks/useMakeQuoteTransfer.js +1 -1
  61. package/dist/hooks/useMakeTransfer.js +1 -1
  62. package/dist/hooks/useMergedBalance.js +1 -1
  63. package/dist/hooks/useSwitchChain.js +1 -1
  64. package/dist/hooks/useTheme.js +1 -1
  65. package/dist/hooks/useTokenInputPair.js +1 -1
  66. package/dist/hooks/useTokens.js +2 -2
  67. package/dist/hooks/useTokensFiltered.js +1 -1
  68. package/dist/hooks/useTokensIntentsUnique.js +1 -1
  69. package/dist/icons/index.d.ts +4 -0
  70. package/dist/icons/index.js +392 -0
  71. package/dist/icons/index.js.map +1 -0
  72. package/dist/index.js +1 -1
  73. package/dist/machine/effects/index.js +1 -1
  74. package/dist/machine/effects/useAlchemyBalanceEffect.js +1 -1
  75. package/dist/machine/effects/useBalancesUpdateEffect.js +1 -1
  76. package/dist/machine/effects/useMakeQuoteEffect.js +1 -1
  77. package/dist/machine/effects/useSelectedTokensEffect.d.ts +0 -2
  78. package/dist/machine/effects/useSelectedTokensEffect.js +1 -1
  79. package/dist/machine/effects/useSetTokenBalanceEffect.js +1 -1
  80. package/dist/machine/effects/useSetTokenIntentsTargetEffect.js +1 -1
  81. package/dist/machine/effects/useWalletConnEffect.js +1 -1
  82. package/dist/machine/events/index.js +1 -1
  83. package/dist/machine/events/tokenSelect.js +1 -1
  84. package/dist/machine/events/validateInputAndMoveTo.js +1 -1
  85. package/dist/machine/events/validateInputs.js +1 -1
  86. package/dist/machine/index.js +1 -1
  87. package/dist/machine/snap.d.ts +0 -18
  88. package/dist/machine/snap.js +1 -1
  89. package/dist/machine/subscriptions/checkers/isSendAddressAsConnected.js +1 -1
  90. package/dist/machine/subscriptions/index.js +1 -1
  91. package/dist/styles.css +1 -1
  92. package/dist/tailwind.css +0 -4
  93. package/dist/theme/ThemeProvider.js +1 -1
  94. package/dist/theme.css +5 -4
  95. package/dist/types/chain.d.ts +0 -1
  96. package/dist/types/config.d.ts +1 -1
  97. package/dist/types/token.d.ts +0 -1
  98. package/dist/utils/intents/signers/near.js +1 -1
  99. package/dist/utils/intents/signers/privy.js +1 -1
  100. package/dist/utils/near/getNearNep141StorageBalance.js +1 -1
  101. package/dist/widgets/WidgetDeposit/WidgetDepositContent.js +3 -3
  102. package/dist/widgets/WidgetDeposit/WidgetDepositContent.js.map +1 -1
  103. package/dist/widgets/WidgetDeposit/WidgetDepositSkeleton.js +1 -1
  104. package/dist/widgets/WidgetSwap/WidgetSwapContent.js +1 -1
  105. package/dist/widgets/WidgetSwap/WidgetSwapSkeleton.js +1 -1
  106. package/dist/widgets/WidgetWithdraw/WidgetWithdrawContent.js +1 -1
  107. package/dist/widgets/WidgetWithdraw/WidgetWithdrawSkeleton.js +1 -1
  108. package/package.json +1 -1
  109. package/src/components/TokenIcon.tsx +35 -38
  110. package/src/config.tsx +0 -2
  111. package/src/constants/chains.ts +0 -23
  112. package/src/constants/tokens.ts +1 -48
  113. package/src/features/ChainsDropdown/index.tsx +5 -5
  114. package/src/features/TokenInput/TokenInput.tsx +1 -1
  115. package/src/features/TokensList/TokenItem.tsx +1 -1
  116. package/src/hooks/useTokens.ts +1 -8
  117. package/src/icons/abg.svg +11 -0
  118. package/src/icons/arb.svg +22 -0
  119. package/src/icons/aster.svg +1 -0
  120. package/src/icons/aurora.svg +14 -0
  121. package/src/icons/avax.svg +12 -0
  122. package/src/icons/base.svg +11 -0
  123. package/src/icons/bera.svg +20 -0
  124. package/src/icons/bsc.svg +14 -0
  125. package/src/icons/btc.svg +11 -0
  126. package/src/icons/cardano.svg +40 -0
  127. package/src/icons/doge.svg +15 -0
  128. package/src/icons/eth.svg +16 -0
  129. package/src/icons/frax.svg +26 -0
  130. package/src/icons/gnear.svg +1 -0
  131. package/src/icons/gnosis.svg +16 -0
  132. package/src/icons/index.tsx +111 -0
  133. package/src/icons/itlx.svg +12 -0
  134. package/src/icons/jambo.svg +10 -0
  135. package/src/icons/knc.svg +1 -0
  136. package/src/icons/loud.svg +7 -0
  137. package/src/icons/ltc.svg +1 -0
  138. package/src/icons/mon.svg +1 -0
  139. package/src/icons/mpdao.svg +1 -0
  140. package/src/icons/near.svg +16 -0
  141. package/src/icons/noear.svg +10 -0
  142. package/src/icons/op.svg +12 -0
  143. package/src/icons/pol.svg +11 -0
  144. package/src/icons/public.svg +1 -0
  145. package/src/icons/purge.svg +10 -0
  146. package/src/icons/rhea.svg +10 -0
  147. package/src/icons/sol.svg +21 -0
  148. package/src/icons/sui.svg +16 -0
  149. package/src/icons/ton.svg +11 -0
  150. package/src/icons/tron.svg +11 -0
  151. package/src/icons/unknown.svg +4 -0
  152. package/src/icons/usd1.svg +10 -0
  153. package/src/icons/usdf.svg +10 -0
  154. package/src/icons/wif.svg +10 -0
  155. package/src/icons/xdai.svg +22 -0
  156. package/src/icons/xrp.svg +17 -0
  157. package/src/icons/zec.svg +16 -0
  158. package/src/tailwind.css +0 -4
  159. package/src/theme/ThemeProvider.tsx +3 -1
  160. package/src/theme.css +5 -4
  161. package/src/types/chain.ts +0 -1
  162. package/src/types/config.ts +1 -1
  163. package/src/types/token.ts +0 -1
  164. package/src/widgets/WidgetDeposit/WidgetDepositContent.tsx +1 -1
  165. package/dist/config-CJfcVohD.js.map +0 -1
@@ -1,7 +1,7 @@
1
1
  import { jsxs as o, jsx as e } from "react/jsx-runtime";
2
2
  import a from "clsx";
3
3
  import { SkeletonBox as s } from "../../components/SkeletonBox.js";
4
- import { y as i } from "../../config-CJfcVohD.js";
4
+ import { y as i } from "../../config-DQMHUj5z.js";
5
5
  const p = () => {
6
6
  const { hideTokenInputHeadings: l } = i();
7
7
  return /* @__PURE__ */ o("div", { className: "w-full gap-sw-xl relative flex flex-col", children: [
@@ -3,7 +3,7 @@ import { useState as b, useEffect as y } from "react";
3
3
  import { useTokenModal as R } from "../../hooks/useTokenModal.js";
4
4
  import { WidgetSwapSkeleton as S } from "./WidgetSwapSkeleton.js";
5
5
  import { useTypedTranslation as D } from "../../localisation.js";
6
- import { b as N, u as O, y as Q, n as j, c as q, p as w, o as F, S as U } from "../../config-CJfcVohD.js";
6
+ import { b as N, u as O, y as Q, n as j, c as q, p as w, o as F, S as U } from "../../config-DQMHUj5z.js";
7
7
  import "@tanstack/react-query";
8
8
  import "@headlessui/react";
9
9
  import "framer-motion";
@@ -1,7 +1,7 @@
1
1
  import { jsxs as a, jsx as l } from "react/jsx-runtime";
2
2
  import o from "clsx";
3
3
  import { SkeletonBox as s } from "../../components/SkeletonBox.js";
4
- import { y as i } from "../../config-CJfcVohD.js";
4
+ import { y as i } from "../../config-DQMHUj5z.js";
5
5
  const m = () => {
6
6
  const { hideTokenInputHeadings: e } = i();
7
7
  return /* @__PURE__ */ a("div", { className: "w-full gap-sw-lg relative flex flex-col", children: [
@@ -3,7 +3,7 @@ import { useState as w, useEffect as b } from "react";
3
3
  import { useTokenModal as B } from "../../hooks/useTokenModal.js";
4
4
  import { WidgetWithdrawSkeleton as y } from "./WidgetWithdrawSkeleton.js";
5
5
  import { useTypedTranslation as D } from "../../localisation.js";
6
- import { b as N, u as O, y as Q, n as j, c as q, p as S, o as F, S as U } from "../../config-CJfcVohD.js";
6
+ import { b as N, u as O, y as Q, n as j, c as q, p as S, o as F, S as U } from "../../config-DQMHUj5z.js";
7
7
  import "@tanstack/react-query";
8
8
  import "@headlessui/react";
9
9
  import "framer-motion";
@@ -1,7 +1,7 @@
1
1
  import { jsxs as a, jsx as e } from "react/jsx-runtime";
2
2
  import o from "clsx";
3
3
  import { SkeletonBox as l } from "../../components/SkeletonBox.js";
4
- import { y as x } from "../../config-CJfcVohD.js";
4
+ import { y as x } from "../../config-DQMHUj5z.js";
5
5
  const p = () => {
6
6
  const { hideTokenInputHeadings: s } = x();
7
7
  return /* @__PURE__ */ a("div", { className: "w-full gap-sw-xl relative flex flex-col", children: [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aurora-is-near/intents-swap-widget",
3
- "version": "3.15.2",
3
+ "version": "3.16.0",
4
4
  "description": "Provides components and hooks to build your own Intents swap widget",
5
5
  "author": "Maksim Vashchuk",
6
6
  "license": "MIT",
@@ -1,50 +1,47 @@
1
1
  import { Icon } from './Icon';
2
2
 
3
3
  import { cn } from '@/utils';
4
+ import { TOKENS_DATA } from '@/constants/tokens';
5
+ import { ASSET_ICONS, CHAIN_ICONS, UNKNOWN_ICON } from '@/icons';
6
+ import type { Token } from '@/types/token';
4
7
 
5
8
  type TokenItemProps = {
6
- icon: string;
7
- name: string;
9
+ token: Token;
10
+ chainShowIcon: boolean;
8
11
  className?: string;
9
- } & (
10
- | {
11
- chainShowIcon: true;
12
- chainIcon: string;
13
- chainName: string;
14
- }
15
- | {
16
- chainShowIcon: false;
17
- chainIcon?: string | undefined;
18
- chainName?: string | undefined;
19
- }
20
- );
12
+ };
21
13
 
22
14
  const BORDER_RADIUS = 4;
23
15
 
24
16
  export const TokenIcon = ({
25
- icon,
26
- name,
27
- chainName,
28
- chainIcon,
17
+ token,
29
18
  chainShowIcon,
30
19
  className,
31
- }: TokenItemProps) => (
32
- <div className="relative flex items-center">
33
- <Icon icon={icon} label={name} />
34
- {chainShowIcon && (
35
- <div
36
- className={cn(
37
- 'absolute top-[19px] right-[-4px] flex h-[16px] w-[16px] items-center justify-center overflow-hidden border-2',
38
- className,
39
- )}
40
- style={{ borderRadius: BORDER_RADIUS }}>
41
- <Icon
42
- size={16}
43
- radius={BORDER_RADIUS}
44
- icon={chainIcon}
45
- label={chainName}
46
- />
47
- </div>
48
- )}
49
- </div>
50
- );
20
+ }: TokenItemProps) => {
21
+ const tokenSymbolLowerCase = token.symbol.toLowerCase();
22
+ const chainIcon = CHAIN_ICONS[token.blockchain] ?? UNKNOWN_ICON;
23
+ const tokenIcon =
24
+ ASSET_ICONS[tokenSymbolLowerCase] ??
25
+ TOKENS_DATA[tokenSymbolLowerCase]?.icon;
26
+
27
+ return (
28
+ <div className="relative flex items-center">
29
+ <Icon icon={tokenIcon} label={token.name} />
30
+ {chainShowIcon && (
31
+ <div
32
+ className={cn(
33
+ 'absolute top-[19px] right-[-4px] flex h-[16px] w-[16px] items-center justify-center overflow-hidden border-2',
34
+ className,
35
+ )}
36
+ style={{ borderRadius: BORDER_RADIUS }}>
37
+ <Icon
38
+ size={16}
39
+ radius={BORDER_RADIUS}
40
+ icon={chainIcon}
41
+ label={token.chainName}
42
+ />
43
+ </div>
44
+ )}
45
+ </div>
46
+ );
47
+ };
package/src/config.tsx CHANGED
@@ -33,8 +33,6 @@ const DISABLED_TOKENS = ['fms', 'abg', 'stjack', 'noear', 'testnebula'];
33
33
 
34
34
  const DEFAULT_CONFIG: WidgetConfig = {
35
35
  appName: 'Unknown',
36
- appIcon:
37
- 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/unknown.svg',
38
36
 
39
37
  slippageTolerance: 100, // 1%
40
38
  intentsAccountType: 'evm',
@@ -75,9 +75,6 @@ export const NOT_EVM_CHAINS = [
75
75
 
76
76
  export const CHAINS = [...EVM_CHAINS, ...NOT_EVM_CHAINS] as const;
77
77
 
78
- export const DEFAULT_CHAIN_ICON =
79
- 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/unknown.svg';
80
-
81
78
  export const DRY_QUOTE_ZERO_ADDRESSES = {
82
79
  evm: '0x0000000000000000000000000000000000000000',
83
80
  sol: '11111111111111111111111111111111',
@@ -106,102 +103,82 @@ export const CHAINS_LIST: Record<Chains, Chain> = {
106
103
  near: {
107
104
  id: 'near',
108
105
  label: 'NEAR',
109
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/near.svg',
110
106
  },
111
107
  eth: {
112
108
  id: 'eth',
113
109
  label: 'Ethereum',
114
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/eth.svg',
115
110
  },
116
111
  sol: {
117
112
  id: 'sol',
118
113
  label: 'Solana',
119
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/sol.svg',
120
114
  },
121
115
  base: {
122
116
  id: 'base',
123
117
  label: 'Base',
124
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/base.svg',
125
118
  },
126
119
  btc: {
127
120
  id: 'btc',
128
121
  label: 'Bitcoin',
129
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/btc.svg',
130
122
  },
131
123
  gnosis: {
132
124
  id: 'gnosis',
133
125
  label: 'Gnosis',
134
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/gnosis.svg',
135
126
  },
136
127
  xrp: {
137
128
  id: 'xrp',
138
129
  label: 'XRP',
139
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/xrp.svg',
140
130
  },
141
131
  bera: {
142
132
  id: 'bera',
143
133
  label: 'Bera',
144
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/bera.svg',
145
134
  },
146
135
  tron: {
147
136
  id: 'tron',
148
137
  label: 'Tron',
149
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/tron.svg',
150
138
  },
151
139
  zec: {
152
140
  id: 'zec',
153
141
  label: 'Zcash',
154
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/zec.svg',
155
142
  },
156
143
  doge: {
157
144
  id: 'doge',
158
145
  label: 'Dogecoin',
159
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/doge.svg',
160
146
  },
161
147
  arb: {
162
148
  id: 'arb',
163
149
  label: 'Arbitrum',
164
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/arb.svg',
165
150
  },
166
151
  ton: {
167
152
  id: 'ton',
168
153
  label: 'TON',
169
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/ton.svg',
170
154
  },
171
155
  op: {
172
156
  id: 'op',
173
157
  label: 'Optimism',
174
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/op.svg',
175
158
  },
176
159
  avax: {
177
160
  id: 'avax',
178
161
  label: 'Avalanche',
179
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/avax.svg',
180
162
  },
181
163
  pol: {
182
164
  id: 'pol',
183
165
  label: 'Polygon',
184
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/pol.svg',
185
166
  },
186
167
  bsc: {
187
168
  id: 'bsc',
188
169
  label: 'Binance Smart Chain',
189
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/bsc.svg',
190
170
  },
191
171
  sui: {
192
172
  id: 'sui',
193
173
  label: 'Sui',
194
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/sui.svg',
195
174
  },
196
175
  cardano: {
197
176
  id: 'cardano',
198
177
  label: 'Cardano',
199
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/cardano.svg',
200
178
  },
201
179
  ltc: {
202
180
  id: 'ltc',
203
181
  label: 'Litecoin',
204
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/ltc.svg',
205
182
  },
206
183
  };
207
184
 
@@ -1,7 +1,7 @@
1
1
  export const DEFAULT_TOKEN_ICON = '/icons/widget/unknown-token.png';
2
2
 
3
3
  type TokenAdditionalData = {
4
- icon: string | undefined;
4
+ icon?: string;
5
5
  name: string;
6
6
  };
7
7
 
@@ -98,19 +98,15 @@ export const TOKENS_DATA: Record<string, TokenAdditionalData> = {
98
98
  name: 'Burrow',
99
99
  },
100
100
  abg: {
101
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/abg.png',
102
101
  name: 'Asian Girl Boss',
103
102
  },
104
103
  noear: {
105
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/noear.png',
106
104
  name: 'NOEAR',
107
105
  },
108
106
  ref: {
109
- icon: undefined,
110
107
  name: 'Ref Finance',
111
108
  },
112
109
  gnear: {
113
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/gnear.svg',
114
110
  name: 'gNear',
115
111
  },
116
112
  gno: {
@@ -126,7 +122,6 @@ export const TOKENS_DATA: Record<string, TokenAdditionalData> = {
126
122
  name: 'Safe',
127
123
  },
128
124
  score: {
129
- icon: undefined,
130
125
  name: 'Trust Score',
131
126
  },
132
127
  kaito: {
@@ -138,147 +133,111 @@ export const TOKENS_DATA: Record<string, TokenAdditionalData> = {
138
133
  name: 'TRX',
139
134
  },
140
135
  arb: {
141
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/arb.svg',
142
136
  name: 'Arbitrum',
143
137
  },
144
138
  avax: {
145
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/avax.svg',
146
139
  name: 'Avalanche',
147
140
  },
148
141
  base: {
149
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/base.svg',
150
142
  name: 'Base',
151
143
  },
152
144
  bera: {
153
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/bera.svg',
154
145
  name: 'Bera',
155
146
  },
156
147
  bsc: {
157
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/bsc.svg',
158
148
  name: 'Binance Smart Chain',
159
149
  },
160
150
  bnb: {
161
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/bsc.svg',
162
151
  name: 'Binance Coin',
163
152
  },
164
153
  btc: {
165
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/btc.svg',
166
154
  name: 'Bitcoin',
167
155
  },
168
156
  ada: {
169
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/cardano.svg',
170
157
  name: 'Cardano',
171
158
  },
172
159
  doge: {
173
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/doge.svg',
174
160
  name: 'Dogecoin',
175
161
  },
176
162
  eth: {
177
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/eth.svg',
178
163
  name: 'Ethereum',
179
164
  },
180
165
  frax: {
181
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/frax.png',
182
166
  name: 'FRAZ',
183
167
  },
184
168
  gnosis: {
185
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/gnosis.svg',
186
169
  name: 'Gnosis',
187
170
  },
188
171
  jambo: {
189
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/jambo.png',
190
172
  name: 'Jambo',
191
173
  },
192
174
  knc: {
193
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/knc.svg',
194
175
  name: 'KNC',
195
176
  },
196
177
  loud: {
197
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/loud.svg',
198
178
  name: 'Loud',
199
179
  },
200
180
  mpdao: {
201
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/mpdao.svg',
202
181
  name: 'mpDAO',
203
182
  },
204
183
  near: {
205
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/near.svg',
206
184
  name: 'Near',
207
185
  },
208
186
  op: {
209
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/op.svg',
210
187
  name: 'Optimism',
211
188
  },
212
189
  pol: {
213
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/pol.svg',
214
190
  name: 'Polygon',
215
191
  },
216
192
  public: {
217
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/public.svg',
218
193
  name: 'Public',
219
194
  },
220
195
  purge: {
221
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/purge.png',
222
196
  name: 'Forgive Me Father',
223
197
  },
224
198
  rhea: {
225
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/rhea.png',
226
199
  name: 'Rhea',
227
200
  },
228
201
  sol: {
229
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/sol.svg',
230
202
  name: 'Solana',
231
203
  },
232
204
  sui: {
233
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/sui.svg',
234
205
  name: 'Sui',
235
206
  },
236
207
  ton: {
237
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/ton.svg',
238
208
  name: 'Ton',
239
209
  },
240
210
  tron: {
241
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/tron.svg',
242
211
  name: 'Tron',
243
212
  },
244
213
  usd1: {
245
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/usd1.png',
246
214
  name: 'USD1',
247
215
  },
248
216
  usdf: {
249
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/usdf.png',
250
217
  name: 'USDf',
251
218
  },
252
219
  $wif: {
253
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/wif.png',
254
220
  name: 'WIF',
255
221
  },
256
222
  xdai: {
257
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/xdai.svg',
258
223
  name: 'xDAI',
259
224
  },
260
225
  xrp: {
261
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/xrp.svg',
262
226
  name: 'Ripple',
263
227
  },
264
228
  zec: {
265
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/zec.svg',
266
229
  name: 'Zcash',
267
230
  },
268
231
  xbtc: {
269
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/btc.svg',
270
232
  name: 'xBTC',
271
233
  },
272
234
  wbtc: {
273
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/btc.svg',
274
235
  name: 'wBTC',
275
236
  },
276
237
  wnear: {
277
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/near.svg',
278
238
  name: 'wNEAR',
279
239
  },
280
240
  weth: {
281
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/eth.svg',
282
241
  name: 'wETH',
283
242
  },
284
243
  nearkat: {
@@ -286,27 +245,21 @@ export const TOKENS_DATA: Record<string, TokenAdditionalData> = {
286
245
  name: 'NearKat',
287
246
  },
288
247
  itlx: {
289
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/itlx.svg',
290
248
  name: 'ITLX',
291
249
  },
292
250
  ltc: {
293
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/ltc.svg',
294
251
  name: 'LTC',
295
252
  },
296
253
  aster: {
297
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/aster.svg',
298
254
  name: 'ASTER',
299
255
  },
300
256
  spx: {
301
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/spx.svg',
302
257
  name: 'SPX',
303
258
  },
304
259
  eure: {
305
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/eure.svg',
306
260
  name: 'EURe',
307
261
  },
308
262
  gbpe: {
309
- icon: 'https://wtmcxrwapthiogjpxwfr.supabase.co/storage/v1/object/public/swap-widget/gbpe.svg',
310
263
  name: 'GBPE',
311
264
  },
312
265
  };
@@ -9,9 +9,9 @@ import { useConfig } from '@/config';
9
9
  import { Hr } from '@/components/Hr';
10
10
  import { Icon } from '@/components/Icon';
11
11
  import { useChains } from '@/hooks/useChains';
12
- import { CHAINS_LIST } from '@/constants/chains';
13
12
  import { notReachable } from '@/utils/notReachable';
14
13
  import { useTypedTranslation } from '@/localisation';
14
+ import { ASSET_ICONS, UNKNOWN_ICON } from '@/icons';
15
15
  import type { Chains, ChainsFilter } from '@/types/chain';
16
16
 
17
17
  type Msg = { type: 'on_click_chain'; chain: 'all' | 'intents' | Chains };
@@ -72,7 +72,7 @@ export const ChainsDropdown = ({
72
72
  <Icon
73
73
  radius={10}
74
74
  label={selectedChain.label}
75
- icon={CHAINS_LIST[selected].icon}
75
+ icon={ASSET_ICONS[selected] ?? UNKNOWN_ICON}
76
76
  />
77
77
  );
78
78
  }
@@ -125,10 +125,10 @@ export const ChainsDropdown = ({
125
125
  {({ focus }) => (
126
126
  <ChainItem
127
127
  chain="intents"
128
- label={`${appName} account`}
128
+ label={appName}
129
129
  isSelected={selected === 'intents'}
130
130
  isFocused={focus}
131
- icon={appIcon}
131
+ icon={appIcon ?? UNKNOWN_ICON}
132
132
  onMsg={(msg) => {
133
133
  switch (msg.type) {
134
134
  case 'on_click_chain':
@@ -156,7 +156,7 @@ export const ChainsDropdown = ({
156
156
  <ChainItem
157
157
  chain={chain.id}
158
158
  label={chain.label}
159
- icon={CHAINS_LIST[chain.id].icon}
159
+ icon={ASSET_ICONS[chain.id] ?? UNKNOWN_ICON}
160
160
  isSelected={selected === chain.id}
161
161
  isFocused={focus}
162
162
  onMsg={(msg) => {
@@ -96,9 +96,9 @@ export const TokenInputWithToken = ({
96
96
  },
97
97
  )}>
98
98
  <TokenIcon
99
+ token={token}
99
100
  chainShowIcon={!token.isIntent}
100
101
  className="border-sw-gray-800 group-hover:border-sw-gray-700 transition-colors top-[14px]"
101
- {...token}
102
102
  />
103
103
  <span className="text-sw-label-md text-sw-gray-50">
104
104
  {token.symbol}
@@ -50,9 +50,9 @@ export const TokenItem = ({
50
50
  !isNotSelectable && onMsg({ type: 'on_select_token', token })
51
51
  }>
52
52
  <TokenIcon
53
+ token={token}
53
54
  chainShowIcon={!token.isIntent}
54
55
  className="border-sw-gray-900 group-hover:border-sw-gray-800 transition-colors"
55
- {...token}
56
56
  />
57
57
 
58
58
  <div className="gap-sw-xs mr-auto flex flex-col">
@@ -3,10 +3,9 @@ import { useQuery } from '@tanstack/react-query';
3
3
  import { OneClickService } from '@defuse-protocol/one-click-sdk-typescript';
4
4
 
5
5
  import { useConfig } from '@/config';
6
+ import { CHAINS_LIST } from '@/constants/chains';
6
7
  import { NATIVE_NEAR_DUMB_ASSET_ID, TOKENS_DATA } from '@/constants/tokens';
7
- import { CHAINS_LIST, DEFAULT_CHAIN_ICON } from '@/constants/chains';
8
8
  import { isValidChain } from '@/utils/checkers/isValidChain';
9
- import type { Chains } from '@/types/chain';
10
9
  import type { SimpleToken, Token } from '@/types/token';
11
10
 
12
11
  const getTokenIcon = (tokenSymbol: string): string => {
@@ -15,10 +14,6 @@ const getTokenIcon = (tokenSymbol: string): string => {
15
14
  return TOKENS_DATA[symbol]?.icon ?? '';
16
15
  };
17
16
 
18
- const getChainIcon = (blockchain: Chains): string => {
19
- return CHAINS_LIST[blockchain].icon ?? DEFAULT_CHAIN_ICON;
20
- };
21
-
22
17
  const capitalizeChainName = (blockchain: string) =>
23
18
  `${blockchain?.charAt(0).toUpperCase()}${blockchain?.slice(1)}`;
24
19
 
@@ -94,7 +89,6 @@ export const useTokens = (variant?: 'source' | 'target') => {
94
89
  isIntent: false,
95
90
  icon: token.icon ?? getTokenIcon(token.symbol),
96
91
  name: getTokenName(token.symbol),
97
- chainIcon: getChainIcon(blockchain),
98
92
  chainName:
99
93
  CHAINS_LIST[token.blockchain]?.label ??
100
94
  capitalizeChainName(token.blockchain),
@@ -120,7 +114,6 @@ export const useTokens = (variant?: 'source' | 'target') => {
120
114
  chainName: 'Near',
121
115
  blockchain: 'near',
122
116
  assetId: NATIVE_NEAR_DUMB_ASSET_ID,
123
- chainIcon: getChainIcon('near'),
124
117
  icon: TOKENS_DATA.near?.icon ?? '',
125
118
  price: wnearToken?.price ?? 0,
126
119
  contractAddress: wnearToken?.contractAddress,
@@ -0,0 +1,11 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg"
2
+ width="64"
3
+ height="64"
4
+ viewBox="0 0 64 64">
5
+ <image
6
+ width="64"
7
+ height="64"
8
+ preserveAspectRatio="xMidYMid meet"
9
+ href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABAEAIAAAB1mzrKAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAUGVYSWZNTQAqAAAACAACARIAAwAAAAEAAQAAh2kABAAAAAEAAAAmAAAAAAADoAEAAwAAAAEAAQAAoAIABAAAAAEAAABAoAMABAAAAAEAAABAAAAAAFSMbK4AAAIwaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA2LjAuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyI+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj42NDwvZXhpZjpQaXhlbFlEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj42NDwvZXhpZjpQaXhlbFhEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOkNvbG9yU3BhY2U+MTwvZXhpZjpDb2xvclNwYWNlPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KK+qO+QAAP4RJREFUeAG1vAdcFEf7ADyz5Sq9WrABNrCX2AW7iYpGo8ZYkti7RuNrrIC9xS5qLEmUWLCbmNgFe+wNMApYQJBe77i73Z35nt09zBE07/v/vt8387u9vdmZ2dnneebpezgt622NXGf0v5dYGksvvad7KA7FnSq241Ak1/9jobFIrh8qZWvgURp0MaIbZUdsRDfhXENT3zN0Al2NIugmlIhi8UQkn8PK4AOzQUsoA09AI2gEipBbKfySW+TVw/HfC4yHOdSizFZx/eXgoM6r9MdpMRkvcu7YB/9/+YJJ34cAdcpyt//AXSou2t6xDNwVx8kIiEW30XK4ZKQqGhQEoNSKnVEmoAqhx8gXIZpFjRQB2OUagQHoFMnVDm4F7I4zqOtXV/ihZ/ng+pWJyo36/wUB6nr/FQ2Oj/Se8w8BOhZd+sBu0KgIoAoC7Pvgwwioj3oBbSs7AGUpyHBchIyECIzkCnsgEkfIO10FKhwd90EF9DhO86HzDyNgYsbunDUfGvZf2kNRp/87e/ngnBUBDVv7A6BXJwEEAHBul0OAvA9U1vT3jQCB0C8LOUGTsgNQDL39j5mV3WAf8t/u+/fM/8uZgrAPIYBTeF5ExXnKDah4WaWCiiCr2PNDLRUeUqW2ct2BAqG1YikbK++AcKDrCOhSxoJuAM/uhgIrDnJsoSEK91eaMJapnlLg/3A3ucosSa4Kc3Kgd2Cx8i+1OLARe4u9/X+QGQ4DcOrB9JTsD8uATsDZQx3620//C3oqDvjXlnKgdwR6GaD/ObqsXUZAOdADMrTQIu8ARwDF0DuwBw6CtIhFnnQwCN6JeDWAWSmywAWRi2RE2IsPKik7Lfet3lelaBUZ6l0AaTCz4x2hzzu4qf2Vo302h544tX76iOze5W7j2FW9ULHlA4gpN8+///h3QJeBGOYoh57yc2qoggB0Ax5WBb2sEYWiv3eAynaCMHB/lfmIHuIgKYSZyK5hImWuDx9YCbmk7AOMotAsQIyvjAA8CLWUKV4hNsf7lrXJ3457Qu3zr/3VLo7ki19nplfPlnnjP4pjJ/slRzQ4nv9j5P/40wHEQD1yVUo5cCsM4V/mk3eALygvN1B9PBhoPwv5KKIY2gF8bVGADECQU1nIHfSiIGjTGrbpN+lN4nmprpRK3dBBFE89aXe6hXhLeVJVaYpUj4QiFu0GVuRD86kfjG+Lh6krBNTMQ7vsKFFYlOPayiHDEQ0yolR4har9HWHLyeIJHrpCAdqQCwyF7kop+1Z+qCBTp1Uv/1+P/wvQHfo4Isl+K19kA7D6wB65iYPQt1iL1+Nu+KZABYNwnVnCBjCBtAFdQm/oPte21zbI7Jw5/O3gH3edWH+MTaz7FD39SrtEt0I/pXpsjbE10rubumt7fO/7pc8jnwFaXvOTdiBJILuIhYvkVnM+hBITGS3DBI+S9SNAgywpYu0rgXUCFC/JUkNtwZ0cYQr2hdKzDIKO1wABSrXPVPHrb/T8F5RUHPqBFri9XB2LvPyyFserDuflRqn9G6I8QAALVBxCL9AScpOex7UQxZ7sSCZUWib5SzHaEZr/aFrkOGXlZ7Y7Endg0L4UXVUOo3Oeq/XNuGUH+h4dfmin7bg0nfa7uP38vvObZoydkTxzcuDNwCuBTVyXuCa5XgD58Cm9B4vNhx0G61FW2g7vshttfz8FXFNQ8iGiVMbKOxLQAOdQlZ74df03I7LKy4C/J0VqJ8eG97Solx32Srn+jsAtd0H5oS5FPSoN7wG0w1X7BGpLFwB/KvMN8wjfJH0JR5bTaXg2Xk5EOkPKwq/obnTIcFU3Rrvh4rxz/mdGGqxMU3KkXkM/k9cxywrzdvOEdZN/iN695Sq5/Z8Hm01hNkac1vhZsz9afj07aHbz2VbvST7JPq2cFzuPd3YHcEXjvqAZTUfxAIGWeI4MQnmt8AElF8y5ONWgk+EDIFarslw7a1Jb1QdQ+6hXX2W+qZ5VTgbYh9uftcKXw9QVrv3fGxRQ/hegq+BW5rb3jKXX6F4kIyANf4MeoRu0DTLQvaQzXoGiqUinUC1nYbez64R+5mYlm09Mj5l4YOxHOQ3b1fUruvOmV0pH/RRtO02lgjjLG2nltnU/Lfxld1FL8TSum9WtIL2488w5szp/26PlkI+Gt+zutc3rd581XBDXhLsPtnIBHQgsz4Ray+IbqlJkexrFwUf+BjZUxojUqyoyPiQhcEUE2IdV+PoviKnQX20oB1zHPo47QwXx+wAtU5haZEqTfVCq6ikrmrnoFF2Op+NH+AaeC9wfEYyaogTpPKlHUjVr+Olc37wxb6+nf3X1wR/rT95rVqv+mDqf3X5zPeFyT+ev9XV07VscahHRsvua65u0207fTno2P3UY08XJ0zm5e2jPpT1qDkwZNGLgLq+L3kO8u2qJtqfuAQkljekWgEM7NAxU2RD4KEVRYbGMEBn4AP4Itd2+G9QfCuGWQ4PSztm7fuhLBZPCXj4ISnWsI0AdZ4t1/KGclwH6Hdjf0fXf4I5QwB0LZla4Ov7d3f9WPaeAnnMDdJjJ9B45SI/SMyQP/YC0oFBG4zMoHXXGaUK6Za/VqVl6cP2gj5wzuLfIo5FHgyHBa/hIthkz0y3AcEf/iV+Qd3PP1Aujr2XcfuRp1gfqbcWRBYfzv0br6VrSQ7wr8qKona89i5IBoI3fPQ1oV+9YjQzySPsV+Rliy3op4ldlOMrTOroxVWSU14JUPl4RlBVbyu7w93cZWP9uqXhWoU850JfRuDxOXa5j/7I1aJTHA32fHsT90Em8BNWkw/E6NB6dZD7GKcwJeobeRTekGHKeeksPhEbCztLs/L35A5z3Orlqgmu8qXLTdwbRkLfi6NJZptZFC1tXavasye06U4PXN5531PPMg/NzzJ6FSwp6kdnSGDKKdJFeSfORFRAqe6RaKlxfQH5/A7niY/6jBZ4CnlNFg8MlQAZc+YcWpMh4x8d2GPA/nVYY+45y3z9cBasKeoex5RCjjlSWC0u+jqKhQXY8JAAfboaO4B0ogiTQ19RCfyeJJEhaR4OoRR+oKdU0z3qSlZY1723UM/RX/WppH33duDbHMgNQbSuSOpNDtmLpFzG8Dhs0t97JjFt5W02XgfZXFPTn/Vz6uXUTecFL+IzkSkfJXnqHVqXRQOfTqCyE2+GdMkD/KW7lhaort+8NGfAAeuWX+hQVjv9AgHLdARAV+n+woRygVbCqfWMdhjjSeNlVYDLvGRsuUwd0UdcCx3d9ylhQLEqkq9AwkAS36Bkwx64jH9wV/4ULsQ+10eviKkmSmrrscz3mgtwe1Y+pN5f5D1ufLRJail+JXsXE/GfpS5SmqabRZvyYF5KvXTNr/ckf/sjrYxplPWK8IQSKe4TttoPCZ9JAyU1aCKAfh0aBt2gpigcuPwvuqLIgpCDC4RE/eKo+A1x+x7iUrty7B1NHyg/8/66UB7oqMOWZ5Blj1SnL3Uvtr9CR/bpK42Uj/jlK7R+LrgEwZFGcSreilnQOGkSNKAx5olmoCI3Fy5GVbcrMZ2NRAb1Pe1zfcvP0zZMeD+lDy22yqPps31nWtaWJxUVWRM5KvWs9aJDS5Oyft64sunPzYeJfy57H+4VX7+N/3ZJuWW0Ll7pIcWIR3Yy20OuoJvhcB8hPQp1lYgAZE4qB66tPpGg9ndRndHzSD+4D+dlgZ8i1vAxQKVQ23stNZ5/6QxLC8c4fYiZqHxWIZcxEFl3KIuwTqMtSfrwHVepV+ZgEXXhQQSfQWciP1kenwOUQglxwCBpCfqJn8CfMbuxCA6SxRHvREjf8ylu2pTjQ9PHA6b2ndu8e3KJmYaVW+YeKrhSuSq2Z5ZV36Y+ml5pfGc+u1o3RmU13LDfNGc71pT9dvxGniYliDEoAlC+HO7rDHpAR3+Md0MGHJK+/TOm0g7vi+pWWDx04AMLfTCBU7gYTyY9ZsYTScCrrJH9Tt2MfeQwA2GGsCu4yZiL3jYW7RaiD3vWURzgWdZRjmzqncnw3Sh4RC1R/BizVIHQSZh1CETOYcWFDma14GQ4u2ldsLuwtnCBtJG8pm/HnXhdeEdZJU3MSTctKVz/enRD37Ms0W0HK41b3Rz7+JLGtzxzv1t7XTBes5tICy3VbnHWksFrcIgxFV+heqgHm8xrEPNwFfE0gCcAc+/eirhkpBKb2VGHzDl1lw//JgqC93EOW9bNPUgasD2JbBZ/au4zSYTHl5lT7xDpMXbZcuckBSWoP+1h1VARcj1Xblb4yDbYEopmId+Jg8N5ES97cVs0FnjHrzLuK3+Yvy92T08h5rlN/40HhBmnPFFxZf7frk9KctJzvc4acnn8h9KrgfNy5totJ/E4aL8XQq3Q8HWbeaJ1mWSDFIxZVo5+Cx6kZ3PMY8ga/6VmUhCNBBsAqgBHBSnDcu9UAh4DV2EuZjVD22/6tjFP2TajyJLHlWdA/er/7Wcad5QbFAWv3C6nt4Y54BvqIsIMsRBlfEXAfArF6O7W/eq4eI9SlOsxcdtWG/MBZ2BKuICRQPxCPS/Fo5hmuh3P3CdHJ0d4Fn+TfzC/xivds5DnmtTZt59tTr/WvfF6vSliSMDaB03TWT3Taz4aR6nQmn8f/yH5cml56rXSLeE5qJPnRcBJGT6O/FHacR3eB4E0E089blQEK+GMxYKBsMXYyU9EgoyJUhYMjsdr7AJeBa9ADh3Lvhv994ghuwBhUx6K0vAfEMJnMvBRFNsIOMuir3ghuJhf1qrI45XfZIbbsBL5hzL/cUZ2hrDsggFA6C8AUiQD0Bsag06dv6LJ+6Np1+5tHP4uu4tzd+ZHzrFfzX9vSdj6Xkh+8KLBmWD4uHahdrl2p28rv0gRqtVIDcY7QTHNBU0MXTGZIHWlbPJPco7XwMpqDpoI5Vgfia3dRDOqNXsPKnoD+HgpOh7I1/L//hucENL44+Do547ZiZMTa53IAgR3Q6gX14R2uVgTWe/rDjoDqCHRlBuCqchBcqfZRjsB1VFgVpUA2/VFIOWoCqkfVSBSZRnfqO+s76zrfWnlrxq22k6ImFI0P4X9nRjAjCDiSpevkD/yamUGb443g2Z9CGaTBY5k0xoZXMi44mO3J7GVs2sr8Yr4Taks2EGQsNTjr5y/qvujKor+q62u61Ip1f+U10/MOWUNWgVY0FmfiZHA/8DhNccJBkgvegEajLGyE1kFgLUP8QH4mR2j8Y+UyRGWChR0QrgBIAbHjADu1xioXVKDHyj3LAUsBn72n0hF6yH2VAuJRTfQAwKkIsINbjr9SuCaXCEWwh0BHCn3eiXfV1QX8VZ1N7qxE0DBiIpgIdX4yiLQlAUwic5aJJlfIePJmy7Etazd/VbLXtNAc6LrQ+a3TEpqALzFt6AvqS8OkOlKi9BpNQQzWsotRIJ6J9GgJShMZEik1w8dINrmriwfzjeGH83r+NmlP94PUSAG1NhvXQRch5jAWPaJheApqJMecQTTLIaDuKJtm4SM4Bh+kt2kcjcGNAc0JEP6UtTU5EUYpALfbSrAIfim8IlSB0w2ccuBVcrocK5WrY3FoUanVftGh3T5KpW6l/b0olMHqeNWR0h0Yl4IUhS6AMtT9oQQ+STiJIBE4loEq44nCAygITcSncKyO10RrflnquvTh0uu/RP3y+S99XG64THb5BHylefSQGC6sErqT+rQXRH074SZ4C6DNhWr5utxuPkG6ibrQvVxPZhvTHG+jZmoFF92PWsZrhecQj/pzJ82PmMdU9as2t/par7XeSd69iUg60SwmholjrDQTbONDaAA+gILxZiYZ/E+Z8g4AkzALtwGiPEuTIFhkcgRp+XMZDSADYGurtfxV9G4HqAD/+6j0UwGtAsLumLWD1UESKGxEDnhDVek3XN4DMAHMpo6ilCCCwBZ+x47UZaiAtu9OZX3QIt9BQYCmk1wNXxiKDBmR1sjkyBs/Hfpp8E+9PaZ7NHOvi46iCWi4bbN1js0LAvFLwUMaAyZbLK1PP0JzcH2g3i3iQem5FIqvMnNwsBAv3heasiHQbhW+ExYzT6mEGio9R+Hq7Cp2NJsAFF0LdcPz8SQ8BwyyZcBkOuCLKID5jElmRtMcmgfK6mI6j+7ECxgToCFTSYFRH+YDaFCeJxYnj3+5681qtWe5owpypek9dO1AuQDOd6zDPoMyVqVoOyhBZZOVtr8LBaomEerOUFkT7sSEMqEQ/JNRohQYAdUGngUb1TJaiDnqF8k1Z17O/Jz5ax+u3bh2+YnuJ26d+M3QXf9Gl46n4CAmFLT3mUK4ingi7yRgssDoImBKAfvBOk4hK3qMq+E09ACvAgZSmRwhzdjTzARsZW8zp5iZfqOrfl914HdXvwudM6hmK38X/36ed71reU2TRpEQiAe0B2CHs9l8PW4mvURukeXMVKYGMwcIuS0ajtqjXeApUpMBIGYHaQMfQID9GZPevqz25h2nUhpVWnYEsdrX8agCXQGQ2mxHkjrWznJUSlcYmNIOIupvrU0Zax+lMByZxTCxwiURqrr/tJfl6tRFrimz5bqu9rrAdYF3i++W3C3JGJdRL6Oax253f3cn8AKl4jRbtu2A7SJJkH6TYpWdrSrCSGVogFob8WMi2VnsWRyD7uBYAmxEimEaMjwzEw2nW6mV280+YgZVCvTt5es1e/p30d8V135TZ2Tdzp5fe7FeZtITXUEBRKJTiJY7wVZicnAiPg57YAD4mYKkCVKEdAZnAZIPAUzk/IyGEMiUo9Y2JXvDEX7vzt9nB9gpWt4i9n7/Dm61U7hKzQ6CWm2PUNEgt9uTXhU0qKCHfRAONUSplwhUvhMH1XDF2NXYNWVecqvkVr9nyPXY9GMDjnVImp00+/lsD86D9+Bcf3Dd5/JG6CKkCqkSkfZIe+SdCEqiLwUJKSvoGLFxgNQ4lX2BDAhlOkmZxF0aRrfQOXQUgK86DgV/5yUSBppMVzqXfEMz8SBLa+tLq1kYb9ssuAEUjqG50nWpKXmlX22cq/vkFHfK7bcuGRnpmRle3eZ2/a1bO6cIl9qunOsFV19XBLkU8s0bAhNCMugVIGhUULzvCAiowEDUfhXa7dTqOEsFSrfLExXoCveH+QH0KjOBoXBun0fZEwySqV5/Ra48J9dnpXLd/UKu57eezz+fX+BZYC54YahsEA0ZlbMqt6vibCVytSRYfrVcogNpaxrIN+KyuEh4bAC6Il1ktgN3IGpFQP0UvEafAv1OIOvJKNCdzjHRiKUHIK3xCh6FgkFCdEfDBA+hWBgKx26CWfCB89/QN/Q6RWw2/gKdKZ5XODjf+uDzO8tuT+Y+Yroxf+b+llUpc5Wlh2WxZRF7ilvG/m4sNoQZZsBK8uBpY8BHm4TqgwVhL6rgVbm/TJhyPMCxKE2ODeq5I8jsGo1yobz4VZoAwFDVomr5MdgJgoWXJKOEmE3sQzZZEIVhwlBDPcMxQ6TYQcwT/U75nXp8ynhx2cXRF7dc7Xk1+Kp3QfuCygXtnRY7rXQa6/7UPc59pbhYbChmlXYqzTEfBO3eSlJxIsrE60ABPIaTbJOA+VwCX1BLthMTheXkKh8gxBug84QQjSTvsnA2iAlnerCIjQDNvxFTADKggIJzDQ2GnXlI9BTHiRFMF6aEWSv8LNwTZiERD0duZD71JEYISX7Kn0958jzsCV/4NOf52/2lFstp8RDyoZ+QMHYFO4TxoE3IYekA7oEXoXvAQkHSQCKwBllVYADo5fwiufjBx4aVI419X26oQptK17JDRfai9lER5gD0cqiKkbVgOgGtgR3QHkyXJHG+OFMc6uTi/Ivz4td7X996tXNF3xWaFSFnjp2ufOYKfUYe0E5uW9zWuh5w/8a9nvtXUq50TIq2XbaGW+ujRSDQnuCusPxDTA8Qd81oFB4JbrhC8NIU8de4c5wbGUq/pWHkMCmRXECUgzhXRHEIzmUuMfekxdJcKQlNJI2kLLYhkwm7j5NRAjJqNU0F8dqNBHFBjIkdrjml9dMmGnc43XX6iUvmc/hKzFPsQQY+0z5+dW9+ds6bGa9SPfOqlNSq7NHUa6j3KzoV3CFVnAYYexufog7ABFmg7TvgQSorKrgFENGIgvUOzbEKYky4zftkgMpYlMF2GqeKPFDV1VjlwoeArl6VvfZ7IV8HMjLRJjqMBtIm9ACxOkUa/tBvuPifc3fODpjzx5zPv1uROy1Pymvkvtd1m8cmTT3tSu1Q+oL8QFKsl61/WkayWaw/W4im4BboPnpGx6NJzBI8DQdL08EpsIU5gQOA0jLpt6gNWUyak3vSZKmNlEVy6Wk6EfZApLwbIVwfrKwY0Vxqpcl4MZhRy6UjUgsSKiaIzcVobaz2jna5ZiJj5qPNkllvJtVC/H6odt7lqusfrl/pWumTdJPz5+SdyNn++nDykr82WoqL+xVoikqKzEVS3sXCpUW33Ia7NnLZUrS16ELhVdezrv9xX0xlCdAGWJBNMcfAYn8HeuUcvTuWsSAHoMucCapaHCnd3iR/2Sm9Yh8F9HD1OgTw6tMElI2fMPXwIZ7A1k8xmwt/zl+KQ4VVlsNtFzY/2zjq6q1rG2685a/wYRy2TRS0EALkIQZ7BlVCb4GBZBEDuYGOIKBrcAS/RetsvJAjPCGdSZ50iK3CFrNrbeNt4YITiDwLIDwH3NMT0WE0FzTWXOY3ZjkDyMM6O+cNZWwgo3IBKIdwAr4OOv1g3J3LFn1FjRjAIc7IBZKFZAFd0GFRx5iOh9y83O+5HzZ+50yMZ568ujf7cZ+csVnnMnpZV5e6mzZUOeG6zHUP/5dmhy4OZt2JtvNFXH3+CzwIB+LfUADNBygdBJGUBEBSqV4GOuiW8gcgJMMQyvtcESrQ5atI4egR7wG3ww4AZMEvex81YycChE8EJMNeR6lkH3lIvWkXsky8nrTlSatH1yqdcA1z0vj7VZvot+LmASYJa2gyqSsFijnCQdEb50LSUxj2hboW0kBCiBb4+BJpL02gb8ke52pOo537g2lVSm9lMVmFWVfxFrwQd2dj2DjWxmxl5rKjwVkxT85cgxoN6VKQsSOLXDCOBqNYJpYMhll16sOxnSB6UFtWkyHOnIh+A44cwRGuY71T9ax1M7SBkFW3k9vDrmHXxYtPOsRn5P6Yt6xAX1xs9rNkBPPBgxrkGR4bLxt/xBeoh3TLabdxlpON7AOCGUTbYA80EKxiG2Qu+UAe0XuKasbad8A78AHw7TtA+S77pbCgsit/g1udVkVYhKJNxaK5QA1K9g7dBxgfCOpeO3SP/Q9Ox23569afSl+9/Cql7vMbv84+MfnEIEuWsNH2p/BS4KTrOIftwQ/kDrKN2eESktKlZmCv9gOL9ZJ4UTzIfAGm/tpex3uH9Oofr32y64kurWfqxdSLutX6MH0blVDAoPsPbPwKRZYEMt3JlMdiFjFIuiTJ+lEICYU3BWRPFehpGFRWax1rD8vF4gsllpIL/CM+hhuduTD9XkZAWsfUNxlDc5sVrrUGuwV6JVat7X8x8M/AvqSA7BN66NJ0NXUlVI/74xAaAEDvjtajFvD004EJq0V+kUSuso4GR/ljR4BiJgFI1cvysZxuo7bHyg9YDhkquBVAw5ilaBRMqhaN8qVuOhNqgycy05kkYUzptlJ/t36G3fq4VI+UrJS8rOPZx7PnMR87e7je17RjcrkU9iWn4b8VD0gbJC8mCKhzDoeAlfhxmGVYbA2xhlhCf6r3Y70f76Iv0Ew0k5vNg0OShEsRYFEfQnFoDljS3ZhAAGc70DcA5HQ0jaSRELCMRWdJLLSArS23o1DZpcfI6YTK88ITh0I2kYCrKcba56/uvzzyajv3HXOcvZ2ifYleOhUsz79e0D7/QvF+i2+jt01WNWngO7/S1kqn6R1SX9LqiwyLjGvQYDwHh9E6ZA9EDiKAy8djGQFpCjzTZAgDBNUCK1DZkMyCALRQlfIOGXJLrNz+XqCrzjU5PSQUcB0IQyFJRO0JWG0LyptaFBOcptJoGqutpB2nvWKymRhLTYhdJfJVjW9cw92XlX6Mf2EHsrnMSK6ZOE2YINWHUHs4DQQn11aUxGNO4K3gYGiBOnNDOJZdK12Rq1DZtt8WKQ4U2ggBQixYzqU4i2pBrZSTVvbCzTX2l5bk4FE3phq0x8K+VECvukaYSAUFYJhhTDARaDXY4+A+02zTLNTu9l/lP9s/GnSWa/Rnl6dOfY05uYdy6mV/KxXjpcyoWp1qR9YJ197TrdJ9RRrCjkvSztP11qaj19iCbwP7aUs+A8UhEMYnAvIDQeoAC1IYnV2bBAUhQkYL7NhIToWVHdAy2P+5A1Rwv8tQQwfxI8i/3ET7oRXYBz2na2kiuKr6QpbOLbBDE7CcqfAYadEg8If0wPdoFFlFXHAfrjc7kJmi+U07otaBOvo6rZxmXNlzrZLlsclsPkSqkY0kXGgs5AuXhE/FWkI37gL3K7dM7ISLhOH8Yf5bfgXbFTT0HroZ2tG6BlxnJpfpbI1nTjN7mHpMW3YzisHXUTKwketgXsklGgRsC2A6W4EKU0GemPAZuHoWJ0n1pe7SMHDXRYDADqGNcDy4/KbheDDEWpIkLpjrxAcYLhtm6u+UDC/pVVK1UfPGfON5znpXybWl809uPYtP1coKNNfuys3lg/h14N6rgkdoF2h+19rECPF3yC9dDBAaho6A+p0M4Za5aJRdBsTCHQG6ACN5J4Qqbkk4Y8rRuNwBqp3jq6CXW9SSCZkBabgDOoBH0/O0OYmhHdBFWgQaSENwUbEwtQ9tCFrMDEgXHEYD6HxaRCfSKLSDnGGn8H/y1TOi817kucbdujHs5vXScZZ1lpE4GxxbWtyavqVz+Gb8Qc4XN0EHqI9tu7WB9bilkuWwpYkFW06U9rZ1thVZvxcGCl1smcDWNjCjjQ0MHxu+dNY673B6qef1P+hfsEFsd2Y4eOZl93oXlIIQ0xWnwJtHXWgyQpKPlC/5IQl9Ck7p+bBn+zBZTCGzDvofx2FwXsCusz208bYB95bfe3B/K/+J5ph26/O/Uiq/ePXK8413elKdw0HOQQZtV8MI/UppnSSS1hqeH69NhnDlOhoDLumXzBaAw/fIG0jyGOg/UXQa2lXG0mXQ2yH5Ds7oErAgZXPI+CljOGX8Xe6tbFvFmO6EPAGzAXQ9YDeN6QA27SR6hJikb4C+8nE1cMY+JEngWDjHJsiPxISJu6Rz4g2XXc7tnU8dzN7/136XrXXXnv7+JzwZTKooidCmeAfo5ivQRLqRVqE9iCsZR7KYOLAr+wqfCleFkYpdOon4QoQ2y+IjEvEaySEG6Tp7gL3PIo6yhLMxsewp1soehHHe5An7GR2EQ/BlpjndTWtTP7KEfE/7ALVl4eHMBaYJE0XWkePgvjhI5tJ4spRUpvHMINyEiScXaF16hqvLZbOZz0qft30+0nLbmmjtakKl7S3bAnV1J9etUelUlfpVMg1pxgvGhmwku5j3p0PIcXKfScCz2e7iFUhjaQKZegHoDARvPsWBELj8VCFf/t2L4yCHgE0rRSV9Dnii7DdWAn5wVDxJ8i4oB/qJeA3wrXT59Rz6EvAK1E0eEi/M0hV4OSTHHgWtvy3+C7a/BKY4IgHSPcnPdZLTAudbR1KORBz9ddnAld1X7mEbg82YpAvSLtQKUiTaQLykHuSudBcT5hokVz3FXVC0JlHjpWmGJqG91M3S2fLQ4sJ9DqnhI2hD2pYGWH2sHW0d+ct8HBcHroOl0g5mHF4CySgLufVcc7KOeoC17IaX43B2Injmq0kHpUpkGPj3x8t5ROQ1aD4i7E4vcL2twcPpIEDAMBTDPUTR3ERmIxuNwnVHdJefznh6+Wm9e0n3+tw/G/Jjp8BQTZugNqjt3XtT7te4/4v7Cbfx7oNxOnJGUSzHLmZ9aBQ9SeJB19pDC4DRrWG8AbhONBsE7VmUDdA2KmhQwF4mfFUkyEF5EASQ46WGBh0wI8sC2DyyRUdhuMyO0sHFRIFjzoLUjKOwtaPoR6BnDANt1wRMwQnXwtF0Av0NLedKwbCKY35m1mP354MTzj2uarpS8DCvv9tbzyc+ZnqCvcX1JOOlJTZEgmgpDWJr4jdMPEoHzw4kf8PcoZrF/HhNnPWpZYv1B3GgaBI1uk66zrra+BLUNIEIVrGqBmlsmq1if9Ca1kpvSSfSR+OrzdK6QNCxMh5IvwXRmqRErxBdAIQzF55FA1GAxxi8oyQE3BKj2FCwHU7CLvwIgFeFnqM+4GSux06ybLCUltKiG0XHCvsVpRT8XtA85XKymNzHqDNONu7RG/RfGbZLZ4S/hB3MMnjdL5LOBWW7C2oNgG4K8u8akGMMMCAZfg/sCJBfHYRaDvyxsmh+twMUXVm1h9UILpKZkn0fIHoK5MIAtAE4WgH4dkDTB+MinoGXI7CfqlfAdYqSpFnkJykkb2ahNv9cQVhmt4yxrcc33FBvSO74Lmc6fnJh6806t9dwTvxi0D447Ek0QIP9pDvYlzrh5WIDmyR8rxmqyeK/Bf16BOnOZDAuzCtwGPBCKrlM4nhG2wne9kqWsCRIFuGgcE14zm/lx2gCIUh4nFmBtsJ7XMVAUrNAAUDIjR4CKSUnbR0E6TURHh/epATgGxWVdCh1oY2ASWG6mGgBQScgt+4kuPMG4RvadfxzLursm9M/nhqf0TmNvj5atdTPzS+mdJDtC1svzolbxlwuPW26Y3vk0tT5kct58HbGy5Fh5E9BokAK13K4O69kE0EKJdy3m9KCAPwRDtwFOoGUggS/DXQ0aAUQ16cQpgDKV472mI4a2RkMgebhYKPuxlbwwGTje7gQNYHPYHBChYK4K6Fr8deoEU1wzXb2dPI4rTl187fx14dfppcS+PvSr7bJvRZ0CQ/p2m1hx+3tVpGL1uWlRWg27UuK4O3GYSgbcpvBCgUp4gmU1JCmoNagw8h3hPlxJzCdoEqqvg+qG4owMkbWyIJXcw3bE/SmlzYvaZpUJPoJqbaxlmVSW+Fn2yFppnRYCCMF0lrRhe4iReC5LKG1iI75BPVDo/Fu9BpQwZI/wT03AeK6RagO+pWOkhpLp8XY6la/sEoza02vtqCKGxdFm0k5/hHVU/wG0WjiL43WTNN01/xKBpKuUhbYK8OYHLKJFpNm2BPPwCch/haFXMAh9xBk2yXwiUXLSg2AHfaDCn6V98stchuDBzB7gW97wuMGwvb0Az1H/TcFT9lNC2jQgEV3ENJTk1AuuFebQm5kX7wX7SKb6VpQtIz0JNuaoVjP5zDHmPu3TddbX1tfeCdz0Ju8wrZvw980LuCz52VWyr76pnLaIlesSeNNho/YRswickHcK8xhNkDG8iB2EjsfRHcW1jB+4lt4IaKqZhL/vSYStJo+bKjskKAhQrgQblto7mjqYqplvWS7at3DbmPXM8WwyrE0VP9S1027zX2Ra4zLW1fO+anxEf+W7cK4cQ+ZMORK3aXvxTDpglBgzbJJlsrmHcIc20srqMloI+orvhFniAGCr9RDDBI9pN9sw/S+vIiFJl/WD6hdxbOjS0/DwaJzuQNy8t3iXbxdeuErkC0UrEa+8BNcD4zAx6gDagNuwWZEdsClUzmT7gGdBEewSwANgAD1aEeG/DtW2QCII0FkPoSns4CiE2CbbsU9UBTw4Xjwts8FSvGBuFIaXoICAD2zcR3kw53FsxkG0l+Xs4tFF+k/tuDCHgU/5f2edzlzTGbYQ88/d1+7YSWFf+V+bZlYHFL4fVy71KMvRnZ92iWsSz2n2QWbik9Z2ph40w4axW/TQZCEdsJ3JQ+pkKSxA9hIphjUTRcrAVTX156S3QasnAxlV4whiBgKvL6TtaOlq6UWsIsQpr7PSZ+pPq1qnKt+odoV5A5CdS+zhRGYNOk5eFXb4bmsN3OVbcjyzGwgoGiUTKKkAeS0CZl3mI22/cIm0dvWV1wvPmErcwb+rrPOeFPXwbuBd6qbLqnXi14v47kTzD5+OBujG+K0En+mnauvKq0ia2iQtJCMoh+zP3BP+EGAwq/FocxjJoVJRhySX6KCNUMNRU0AzGCHA/kOVl779oEgpR/YTKegVSkc+CQ+B/0ilj6jNwDYCawVN4TQgZX8IB0VJxpnGmsb6948cPPTP4NfbU3envRx0NHAIwGfFN8u8sqvZfzSeb6uo4UrSSneQ5uaPinpGOTvN8/3Jf2uhM3bldDhrdcbY/CipqFNTAGZzX9ufuTMyuv9bxXbKDCf76RTUiztQcegMPIHmQqK4HAq0a7oLrxwmobCBEZ4ILTTDta20waaI+QKTgLYCygWPPuX2AiI7EayiWw0m5x/NS8sP6HtxjaH2tX08vbe6nOb/g4WaLx2pP6VbqzB2fjAUN28yny0pACClzdtP0t3xCtSpmm/+UDpeMs5yyLL+YJbBR0KM0xzTWfMS8zPzV6mbonii6lpQa/aZDA5IwLa+N8OCMjtYr3x+qdu53qU9HyY+zjPL3+Ta023De41uSX8Us1SCNYHSTHAkNvhAHiNrxO9B+z6MU6CFTcmQeAKPAaIiQLyPgMWsk1xFHbHgTSUdCMBHJ1MukknwDQ/y00CYfUt2gPG1E1yCGj/WzDufZCADAVj87/P//L+snvivXal13L5zIeFl/KeZX9t2O40Wne2obW+rm4P11vGPN1+U6PCKYVTfb08R3um56X5zvbtkDu80L/QVHLROtoywN9Ye3ZgQWzdK3dvHIUUKz80A6iSgchRQ3KAFJIoCIkEo8nwFkqMbbyw2pbIH+cF/kfuMegm520LbbEkHPQ10Ngg+N1NigavYzRKau7UEn/Utfnw5lktWvl8Xalp5btuP7lPde/vOtNjkvs1w0PjBcM5i4+lm/kzELSf0SBQbWMta2xLbJ8IhdaF1lG2GcWeRc+LpuZuzP0lr5swQjgjHHKJdanlUsPzudcZL21xw6LJhb66/drjuq3Vr9X4qNZ9XYLuN+1Y9yD3NR69pPOSjRzEicxmZhKAOIL2hPeTfySF7FH2MntSkZp+kMjVEg2XGkiDpWFcJU7g0qTKYoioZb5gwG7n8A+4EDK/svAiHEZY6Xv6BxhWcmqRL6htLiW2krmmUSEzOg0MnZvbIrNy+pd/Nbu38HZA0Oe1nf3N5GNgQTtT27y483JE0v3SrqY/ilsUTiielt8117tgpb6d8wvnRXxHlvDu7H7hqZTqv75aWI0gxglUz6PCBqlAqA9mSxo3mtwAg2Y4OkwXURfIUShiZoqXhGvgpafiPvE1JKIsNiyyzbfNL4iARFmgHXDCabnarlNdf3Jt3PFYyPIOp7y2eW/3/LVytcrzfdf4fV99SPV7utv6QEM/W6nw3DbSoNdX1n3H6JixTE9mFdOH6QHh+DvMMHKanCMD2THMKXYvWAadIaEkFp9jkqUnElgYQphQItQFKVEHTeIacZO4mxDsjMA9IEjUgl2Ca8P7mbHgKm9BQsCi2ADWbyJo/d/AtZ5sBL1CJtB4DO5x3IZsJ93B6dEQYmGINARrPA3cJjegJqJz4IzT9ObacYnkEqTv9eH8eX92G6qFG+AR6Bfgz1rcG48Hw2ok/YJGjQj8sv6I9ueqetx2PvI4557xTk3T2qJjRVKj8Ib7Gqys3rDWAP8v39R5c/bNcvfJPrhKp2ZuzV42e2KrJTSweHPjyWu6oiAv91bOU+krqZ54A2P2Lp8Koe5HCLG7GQ8Ajx/zI7PS2tDawYrAhwNGvHWwtYl1uCFOru5XPa56dCKx0krSxXrRes2y1POm52OP9W5H3Q65mcVGUlUxwm2H232Xysa3+t90LYQ70jGxB9+P9WF9eX9uCcvAy3uhEItdA77UOHBCb0E6fis7ne0HavQ5SiGkfpdrS2dB/udO3oljNPMgHlDKI242u5nrKU0mLaTq6Hd4V6wdaUDySSraCtpjgnarZhY/mLQEyVQMGtty3Bf3RNtwc+TD8qAEV0fFNA1AH04b8De5Y1w0vUlL6K+wJ9qA7pdMJRLFZbZ4eyHdJvWS7kpTLAMtEy216EgSTU6Dnr4JW9FIcLnt0sErb/oU7IVfoZhGaa3Mrdp7tKrUtpKVfA2ZZBO8q3ts8/z9jdObMakT7z9IHPSspNe13kF9Zvp9EXg58ECy05PpDzcbb2oeav50e+XaxMUJlMt8EOFb2F18gPQNiYG3XK5AmKRQDCc7JAJutltMGPht6uKBordYXQwwdTB1N9V2ZdwYV4w6y9Vy0bK8FGmfas9rf9EN0fXXNi4aWDirYP6bxWlfpLoKf9lEW1t0D9/Ho3T7dCv1H9MO8PK2CDmkveFdmUwRi/Ok1WS1dJkNYM+x0ZrP+XZ8bdEfYg8NQTn1oQ8ZDGI8D5yK69EoJhXXxT3JSXBhpAKbPCv1Y7oz89hd8I8sw5BeDBfniLVh30CFGAYvpVqDrVMtd/lt/Ea+GKTpQ9QX4s8aJhEfZZbieZBDBykw1gaW2ZZQcKssIqncC48Xl1N2igfE3uI9sAavSLH8LAhwm8hOMY5MB2aEQST/DibRIfInvNnqLTQSXcXfsAgqXIT02kaFOtnBefXyi57lPt38tHrW/PzUggWJ65OPJc98defV9peft6hdb1idwdoJ/Nf8hRo3/ar5bam5tLpHtajnfm/02T/gCK6lpifNwVdRU+yFpuIZaCuqig/BvtsByVMQpUKxwiDZ7Wz6rKRpSUdgRysMY7jBHMv/zMyGLLY4pjFkOEwp3gRqQb+MZhlb09uaqphIcQa6CPb5DC6e+4GPoIm0DwqwuFuqWjbz2Xw18K8WaJ7y3oDwXtJQ/IyZy4wGpgeVeQ5xCMhLko/SEmmoFAI2/gzcEcT+Mna0ECmeFnZoF2laaHeD++EM3QVxuHNsMroKkjJFzvQjo0RGfCB+CUHTuVIhW4mtyrQtjSldWfqYHCQ6qUibp3XVFOCp8HJ5NsT4NpDlbK/g3k97jaRfoUhyim0LPKuAbAInWhc+nytmB5CDYhXxlLSAfCRWZr5FM0E7CpU+JVPoVDKNvESfoAVSpG2wtb1llk8bnyk+bRvsbvCsgdn62rrV4n5/693Fdx64VjXcMyQ4f2/INLhDuMKPdM0ZmLMkJ+vpghcfvezIHtT+rPlByBe/FqainuC1bItd8APIfbhLF6P25HcgCQ7Y0SwUCXuiRKJSgnRCCiv5rKRZyQWfhz5XfFo1im/ENGxWrC1uU9TTZ4zPcp9zehd9gP48M5ppiZdyDbg+7M/w2upk4lOkKwouzDdNMWlKDtKxdKz4Fbiyo9Fxaaww0jYVLJxP6KTSe+ZxJr1UIOqEGKkNmS2K4HCobF1rc7YlWYZBVG4LPixMF4xWv9JGpTdMmaVDzBklOZZGlj7mPsbHhjw9VcYGmQJMvUsyNYW8kWvIayGJsRQ3hb83iLPdtz60zhOm2b6xVgVFwNU6jtPxutvaFLDYVtMfbUdskZYn9CuI8rSGcGAO9qbbwfXmAlzPKu3ktGx3boW+gy5El25pZzlu4aH9PyjZycfJ3fmQ9UvbBmG6Jclqs2q4e5BvnObvU1NbU//o/JMlT9xvtriec22Az0xvX2+nBtMbb2+sTTJld8+Lu3ft8db4j1kD9xmDwSnxgoSB5xX+1Qe2529kOVosO+Dk9Cm0HGg9jpGDL7FiLOLpHrLXq8Srodd5zhf0iky0n05FX9L24Dndaj1h+cpc29bK1sA2DQLtHlyV0o9LR1ra0250ELyIVE8aaptQeKvgvsUMmso0dpZ+qd5DvxDmWcO+AUUcXJPFTYqPFDwDTWWKGGBoYBhg9NIFw1/e6CHw1EFagWqSPJIqxNmGWhayfZhZTKQx1ynXKd3cxhRaHGrqaO5s7kLqk09JACQQVOb26bfr6+o/1u7VfG7Yh68avzNcI29g9+wF2cPTBeyg8IFDB7xi3Rl33Jufx//AfqH9SHNXWwdrgRsbwUN5mtmJBjFg54Kt7M/0oldAUw/iu7Mb+ekkjSTSdPYC+4pP4LFml2ahfqNOq9Mwl0kPybNkaOH5/HpVB1YOr1SU070gKX+sZodrQ7cavq1qHKsx1Geh738qHYn3TBgT38Z0wTygdDDaiSm7FtJ5jGg+pLG4gwpwBH8LrM6CTkJCyV2yiWTQPtSLjnPOdT7tbOhc1Ll/51yXdq6/uURZu1kbWZo6P3TaqF9g87e0KKXMGzSCdtK05idyc8ln4iRpCO/Bb+DuwFs0AfqnbBR7nV1Ku1ArKbINttWyMQCsK7am0lTRTajBp3HefBPXCS5fuzTWe+ioronupHa/pg4tpBYSyYfwEWwTp7vGLobzzjWdnjh9rtNrX2ifMjuZpWicrp52ifY5X4c/xm0FFtodUmnccRHOAFdNDdSAQfgt9oYg0SN0E2TJSeYqPrwzZkx0HPA48KvA+4bjyElwS/Rm5kAufDuqkTyB5ZyQzknuZKBtu02wHdcHaA/q9byOq6VxlbZIn0vO2buzl2YPFvIks6jV39I+4t3rxdQ8Ua2GeWLRzYKP4ic/Dni8UUxAXfF133D/fQF+lkVClPSH6GbT2UqfXIv3SRR3mHfv+Hm7vrb+rHEFng0hk13kOoi0AMiTOCNOAOs8HPWESMNDPMlMIG/nWvuw9p+1b9ZlbpcjXdo5xTq1M24syi2MKOjiG+sb5j3ROErfX9eI+4bLZAdJ8PdkkhYcBbvQTuFncaU4zNLDeti6iavLH+R3yX5cUA2jIG+uh7abpkBz2LrIWhd28A+sJ9vJbbebm9tXmm78M746jmA24GBmAaPHNtBqrBB+6YHnM3HcVLYGOwciJd3xFqaTXCEUcw1NIp5yTh7qB16EZrgLGGXyv7k8hVh0V5QC+RkSJEOGSo8gww+xQxI+2/qpF/gFO0hDwDH9J7zGUwO8P10hMJHOdIQchTFMImdij+C+fCg3hv2RTJSWCR4Fe/O98lILQguX5W+nNeh4cgxE1zn8wMfq8di1lVGLb6ENul/Qn+gJ1xDvQo3PGs45n/ta+6VTG+dW7CTNHU1jPoyvw3n5L/V/FrArflN8u8S1gEi3nCa8O9ef9wRLuRKxoD7IgGoxezCDq1kGWp9YNldOrpxWqbBvcN+2fTeDghkGL+QNZ/7Cjd0F9yL3Mexy0PEblD4pDS0tNS8t/dmcKz6VWkir4JXTZ7buQmNphLiIZIIGhMRg8QfhJ0h752wj4aWibngSmUL6SnOkJqC8TuRmMb7wn1dZdBS5lbM0e3p2I3A2TBbi6UsyjzySaklLRGfLtNJBpfVte2yXbZ0hrzofosqLSW3izTUF3epX+O+WTljCGfBWQVd2C7OeOcAaQZxng1bUGv6zF+6IsrVXtXs0vRl8G9RNP3yLfg+66S2IH7VBswlDIqQ+4h3xnmgTutksdANkB4eSuWKSoCn4NX9Z/ifCr4LZOpBfznmxbT0qu9VwGe9d3a256zPnOZqdmlN6X24sJ7hsMQYZxpGFliO2u131oUWdWrxp9VpI3Wl4qWf1uR4mj9nuPxtXGZ30s8a1GddvdEenVGOevqbtc2uR5TMqx1QjQPx+iyOkKDKXjNL/pX+ka9E/5tNTn57w3OF5wn087IlS9IuFWIJKq4Ku/pad5LrffaH7KcMs4zPjItdp7lEe7Z0Y13GulZx4F+Jq0jXVvTK4MU24l7yr5htdHUNzz5+9PHw+8mldaXmlP7zTfAp8W6lHd2fPUK8heqOhi7EdZD9Mr7yQ28v11URZa9kuC72ZB0xrLor/jJ/NB5NMSIFskz8mb1HetoL5hQsK54uTxRaiBizhWUxPepAm0YmQ6jtOyAIdbKwl03pOaGo7WLi3qF3h/pyvc625Y7miP4siSrpIP8o6LHhXrsPQBfBvax3AHubxBWYG6MHHWCe2L9NUGGW7KNzVruE5TT+jj9MXRo7dy77i/HFPiZE26LIZd2a929f6IEOmsbP2L/54xqLUL9Lu285bKgkd08+mmtNTQc8gyKVoSMH8gnGm6sXfFboqyVtWQ2/jY+epfdeFffaJ3/6z+6cdzmYIo8GHgYFAviYIq2xy+vOBn3/5xb6mgc1+bXLNfMFcz1TKbYOkqXGkjtCQtI6vHR8Z/8D1U9f9rhkexCPY45GhiRN2WqRfrT+hF/ix2g6aLdJ9VGLdzJuYmtxzyMFbIXxXlGLuYYkoWFZ0zTSDNAHLYJJmFR/I34fYwglmPThAnFn37ItZx7OG4OfgNY70fO550eOVNTl/UvEDwz7dp5qL+nb6abpkuhH/gnM1V/lD/FO8AFTMdpltsqxZifA63yD8VJOt0Wmr40a4Mjigr0DAKhYtZa7hOMjAfiVc5PQD9Wv151ACPgd5ZIthawign14jCXgJZBU0h41UC7TyJeDrD2aidG6sTgsGpO4h6S+dlC5DGqAbaZublHMy+4q+Ia0Fb6BMsa6yDn78LH3lm3vnA86lnH/1ZsTr22+e+h31b+2f3vm7MNw73BJAXkIG5xVSKk0ubVu6urR7dp6Zy2xSV6ozt/aPnSd2bhz6+GzHs6vOb+RCuW/4kAFeA14NCGvau8m4Jj6ZFzLzM9MhgWQfOQ0O6nVCEOhFM4U+XBuw4b/UHzYU6EOke/CfKZbS2ZbulmvmFqUbLS7gMvmdOHNefB/uqdaia6zbR/vTUcifHJceAUM9BonoWeZGppqm8QaN4Yh+Cv8b34nXmZtLUVL/kl/NPcy5b7tk9MjoZzVYZ9boGxwS9FH9360dLJEmi0Vj3WHZASk3LbQrnI5DgoAHeHjWY53zPJd058XmtNKHlkg6AG9ESBug8dBcBmePQOKs94QjtnCuA/+Uj+VwFUjJmKzrrvPTToWUDT8yFMzqPcQN8g7uMLJOhiBqlUV4+Ee2H8lt+AOjIeJrMQYyHpLIXe18Xs+00BRp4/kRr75N/iNFl9c1f0X+HwdbH9IfWd7+YsfxHc8Y83yOVpnf4HKjzY1qehq8P4fcw4f5QXnzC+sVsyUnSB3Ip1gD+QJ1cB9zVVNH08KQTSH+HUIhKNjKMs/Xu1LdSoUdXTtuaZ9QtLBoe1FjMJB2MoGgLPqxKVI7+JPJ+pqLmvqaN95bvFO89/kGe6V6L7SdAy/S9+CLmQM51G7wXpcrZFrMxt6gtVw0OAl9IbivYyqjbfQBpXgpsmn2873Yk7q12ircdM1SMBijnCc6Bztt57/hOnIpnlPdzU6Ec2fa0VbgKdhkXkoGkGYkhvmd8YP/pxtCLgDrPgAvcDc0R5cONxHrIct3lql6b/0AfRDXlW/J1SZTpPEklM1j53Jx+uf6AfxiQy3ayxAqlsLbQOGcOca8wvxYCBZ7iCOYzXg7Y1UoBUI09C7E7wdA8PoM3QivWMZDJpAvas1K3OfsXLqZjEWRcUvjvo872axu49DGa5vsb9ai6df7TkZf3ef/cec+rn2GVO1ZvWrN9pfrX2t67broC38kM6Twl6LORR9lGWBTp9guiFWlDHIHXu2Mlw5J/aUC4K31GZ1lYmkHc8fOYV1qdJqtv6u3GLIKpcLqhf0hMpDJHILte52N5uK4RDbSGmBbbavH/c6OZ27qu4BcuQ25GNXxfTAY4X+EbFfhTTEv6govqDqTZ6QHPWMrsJqsR8RHYi3xEfOY3QdB+2bgw18Hb4VMZaP4Zpop/Aj2G/YTfNiypFRjHi5e4/ozs7VfaQfyY6q8rJJSKSnjWnpEdqJlQWlR6TX8CkNEDJxz86lLcUZx56KpyBVPwJPc37pHuPkYidN9J4N4WHwsBRX5FK0s8ih5XHKi+AIk8O7jI0GNZp1jdVV1m3WX/x9V8CDVYX2dlgAAAABJRU5ErkJggg=="
10
+ />
11
+ </svg>