uQn}zpHxs?
zKe1a{I~3n@g6xh1OOnpUtfi&x)K^|X*Z7YX_
z(K_le)=sHiK#Qc*)_c(7Tx#*3M*kz^2hYD8
zjcnnIHn}F6Sl-9hPrzNiiXC(<3H5r>R0cxc8RU-YoMz&9mggu06JQGACJxB
zd{``XEIosIUukC_rJZ%=+D_l6`&`!=kau|=Jl8lH#;7v?oBCULHYQ!-lMH_J&hyxB
zOR&%HM()qvuBXkf;Zc2^WZe9(%d2fXqsO&lu367?EJpJBEp=#JlcM7t{kp~~^LCuS
zdjClOP5Gqnkm>quA|TF(@paK+^?sY^BF8sG+x7!ucnpZ=+#*lRP4+Br`gGm($fWUS
z`Dxa5l<=|fC1BlR5pDy^C-$?>rWnZtc8&q<-?(hHZEJMu=B`?s+TTY`={=)7R?0Ev
zo6m>!@gq-t3!}WJ1^s#8Qqdc)uR7~`=;5oDXp1A_&_4SV@mG!&e!M-c93yDG4{Hk1
zy&j0`XTI!=6`kC8xDvQ@m&2lEzGI;?jCBJue@MAAVz9Vt(nHjK6Et%XMne|Gj+9
z6!e^x8H>GuzMWBOAbRd?)P2mtYrUggEu>
zn=6V}bKLf0kK5>a?lpZ~N8hucu;*%)IFAF3bKmM>xf-^bSle*qV~d(TG1nj$XiRH%
ziT|`8Kjq`wM#uczal+b_ey#tX!@YzBraWYt@!v_#ui7|T{?@iUNAaVq&Jk}e_8VbC
z!Ow|74Q?cd_%3tISM%77wa?x9W6pNm;Qv6tZ(P4Trw|uzh8o0c*+qOKaoRj)(Ib~z$o+lg
z@4@Qed4<-sR4;yVY8Ka5MVB~tk8^~~o#a-%My_2i#(Fqjyr$+J)i~S#&3^K_8PL0P
zdVhE1hK$~;Y25$C_w%99>6^g|{SLv%phtA_tV`d%)Vms*tNQ-+$mgK>UT3^U_W4?_
z1-m&A<
_oXz^JN1*h*AHNHFNLsc%=NbjDyxzJ?S@$|mu
z*ki5tQ>SANt2}F*5b*mgbl-8YwEw=>|7hv(ZDC}dGJC=XR!iSDnmF{1+5MBoALY~d
zHJ@wT7RLhFDK-C7XRb)eQk|4e=&aN
zzf0TuLtbkWr(gesF7?wIs=>ZACZ3xAs5dGf>+^a|bXPgW%KoeK_|x;aKGPaHe5Y@u
z=iDcXWsHv1)@)k4jwk4UkNi9R@1OcU-`398*bflX(0v1obAtGW=2Fzn=Pt8T=hgYX
zon@8x3iQJ6*U2{d{)l~|`adxlV|bOho?|M!*v@l7vZbx}qZ`%-i|6_Ht*nQRefr+4
z{-4}x_&T|dz3r0)yN{#Rc_NMA0{|Cmu#_>97uu>J>)Faj$XM>P7w4t!o=*E(NVz~-*C
zXnW*)NDaQyIt!|}rp>PVrc|Bj<}GAl!B37?91
zoew%_+sJq`98&Y&TglJ=5uw`rqu&_E+5SqzE7@Q;6%F!v2<1V_hw=w24sE3TTR!|i
V6tSNqS43DHt*-KEDTtnJ`wuJo2{8Zw
diff --git a/ultrasound/ui/hooks/SNXUSDBalanceOfBuyBackContract.ts b/ultrasound/ui/hooks/SNXUSDBalanceOfBuyBackContract.ts
deleted file mode 100644
index 5c1f288cb..000000000
--- a/ultrasound/ui/hooks/SNXUSDBalanceOfBuyBackContract.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-import { useGetNetwork, useProviderForChain } from '@snx-v3/useBlockchain';
-import { useQuery } from '@tanstack/react-query';
-import { BigNumber, Contract } from 'ethers';
-
-export function SNXUSDBalanceOfBuyBackContract(contractAddress: string) {
- const baseNetwork = useGetNetwork(`0x${Number(8453).toString(16)}`);
- const baseProvider = useProviderForChain(baseNetwork);
-
- return useQuery({
- queryKey: ['USDCBalanceOfBuyBackContract', contractAddress],
- queryFn: async () => {
- const USDC = new Contract(
- '0x09d51516F38980035153a554c26Df3C6f51a23C3',
- ['function balanceOf(address _owner) view returns (uint256 balance)'],
- baseProvider
- );
-
- const balance: BigNumber = await USDC.balanceOf(contractAddress);
- return balance;
- },
- refetchInterval: 100000,
- });
-}
diff --git a/ultrasound/ui/hooks/useBurnEvents.ts b/ultrasound/ui/hooks/useBurnEvents.ts
deleted file mode 100644
index 362129457..000000000
--- a/ultrasound/ui/hooks/useBurnEvents.ts
+++ /dev/null
@@ -1,105 +0,0 @@
-import { useGetNetwork, useProviderForChain } from '@snx-v3/useBlockchain';
-import { useQuery } from '@tanstack/react-query';
-import { BigNumber, Contract, utils } from 'ethers';
-
-interface BurnEvent {
- ts: number;
- snxAmount: number;
- usdAmount: number;
- cumulativeSnxAmount: number;
- cumulativeUsdAmount: number;
-}
-
-const now = new Date();
-now.setDate(now.getDate() - 7);
-const thirtyDaysAgo = new Date();
-thirtyDaysAgo.setDate(thirtyDaysAgo.getDate() - 30);
-
-export function useBurnEvents() {
- const ethNetwork = useGetNetwork(`0x${Number(1).toString(16)}`);
- const ethProvider = useProviderForChain(ethNetwork);
-
- return useQuery({
- queryKey: ['burn-events'],
- queryFn: async () => {
- const SNXonL1 = new Contract(
- '0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F',
- ['function totalSupply() view returns(uint256)'],
- ethProvider
- );
-
- const repsonse = await fetch('https://api.synthetix.io/v3/base/snx-buyback');
- const events: BurnEvent[] = await repsonse.json();
-
- const totalSupply: BigNumber = await SNXonL1.totalSupply();
-
- const supplyChange7Days = events
- .filter((event) => event.ts > now.getTime())
- .reduce((cur, prev) => cur + prev.snxAmount, 0);
-
- const SNXPriceResponse = await fetch(
- 'https://coins.llama.fi/prices/current/ethereum:0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F'
- );
-
- const { coins } = await SNXPriceResponse.json();
-
- const groupedByMonths = events.reduce(
- (cur, prev) => {
- const currentDate = new Date(prev.ts);
- const month = currentDate.toLocaleString('default', { month: 'long', year: 'numeric' });
- if (cur[month]) {
- cur[month] = cur[month] - prev.snxAmount;
- } else {
- cur[month] = Number(utils.formatEther(totalSupply)) - prev.cumulativeSnxAmount;
- }
- return cur;
- },
- {} as Record
- );
-
- const groupedByLast30Days = events
- .filter((_, index) => index % 2 === 0)
- .reduce(
- (cur, prev) => {
- const currentDate = new Date(prev.ts);
- if (currentDate.getTime() > thirtyDaysAgo.getTime()) {
- const day = currentDate.toLocaleString('default', {
- day: '2-digit',
- month: '2-digit',
- });
- if (cur[day]) {
- cur[day] = cur[day] - prev.snxAmount;
- } else {
- cur[day] = Number(utils.formatEther(totalSupply)) - prev.cumulativeSnxAmount;
- }
- }
- return cur;
- },
- {} as Record
- );
-
- const totalBurned = events.reduce((cur, prev) => cur + prev.snxAmount, 0);
- const currentSupply = Number(utils.formatEther(totalSupply)) - totalBurned;
-
- return {
- totalBurns: events.length,
- totalBurned: totalBurned.toLocaleString('en-US', {
- maximumFractionDigits: 2,
- }),
- groupedByMonths,
- groupedByLast30Days,
- supplyChange7Days: supplyChange7Days.toLocaleString('en-US', {
- minimumFractionDigits: 2,
- maximumFractionDigits: 2,
- }),
- totalSupply: currentSupply.toLocaleString('en-US', {
- minimumFractionDigits: 2,
- maximumFractionDigits: 2,
- }),
- SNXPrice:
- (coins['ethereum:0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F'].price as number) || 0,
- };
- },
- refetchInterval: 100000,
- });
-}
diff --git a/ultrasound/ui/hooks/useSNXPrice.ts b/ultrasound/ui/hooks/useSNXPrice.ts
deleted file mode 100644
index 56be233d3..000000000
--- a/ultrasound/ui/hooks/useSNXPrice.ts
+++ /dev/null
@@ -1,44 +0,0 @@
-import { useQuery } from '@tanstack/react-query';
-import { useGetNetwork, useProviderForChain } from '@snx-v3/useBlockchain';
-import { erc7412Call } from '@snx-v3/withERC7412';
-import { importOracleManagerProxy } from '@snx-v3/contracts';
-import { Contract } from 'ethers';
-import { Wei } from '@synthetixio/wei';
-import { BuyBack } from '../mutations/useSellSNX';
-
-export function useSNXPrice() {
- const baseNetwork = useGetNetwork(`0x${Number(8453).toString(16)}`);
- const baseProvider = useProviderForChain(baseNetwork);
-
- return useQuery({
- refetchInterval: 10000,
- enabled: Boolean(baseProvider && baseNetwork?.id && baseNetwork?.preset),
- queryKey: ['snx-price'],
- queryFn: async () => {
- if (!baseNetwork || !baseNetwork?.id || !baseNetwork?.preset)
- throw new Error('useSNX Price is not enabled');
- const { address, abi } = await importOracleManagerProxy(baseNetwork.id, baseNetwork.preset);
- const OracleManagerProxy = new Contract(address, abi, baseProvider);
-
- const price = [
- await OracleManagerProxy.populateTransaction.process(
- await BuyBack.connect(baseProvider!).getSnxNodeId()
- ),
- ];
-
- price[0].from = '0x4200000000000000000000000000000000000006';
-
- return await erc7412Call(
- baseNetwork!,
- baseProvider!,
- price,
- (txs) => {
- return new Wei(
- OracleManagerProxy.interface.decodeFunctionResult('process', txs[0])[0].price
- );
- },
- 'useSNXPrice'
- );
- },
- });
-}
diff --git a/ultrasound/ui/index.html b/ultrasound/ui/index.html
deleted file mode 100644
index 8b94d676b..000000000
--- a/ultrasound/ui/index.html
+++ /dev/null
@@ -1,57 +0,0 @@
-
-
-
-
-
-
-
- UltrasoundSNX Money
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/ultrasound/ui/index.js b/ultrasound/ui/index.js
deleted file mode 100644
index ec860a19f..000000000
--- a/ultrasound/ui/index.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import { safeImport } from '@synthetixio/safe-import/safeImport';
-
-async function bootstrap() {
- const { bootstrap } = await safeImport(
- () => import(/* webpackChunkName: "app" */ './src/index.tsx')
- );
- bootstrap();
-}
-
-bootstrap();
-
-if (module.hot) {
- module.hot.accept();
- module.hot.dispose(() => {
- // do nothing
- });
-}
diff --git a/ultrasound/ui/mutations/useSellSNX.ts b/ultrasound/ui/mutations/useSellSNX.ts
deleted file mode 100644
index 0d34e8628..000000000
--- a/ultrasound/ui/mutations/useSellSNX.ts
+++ /dev/null
@@ -1,95 +0,0 @@
-import { useMutation } from '@tanstack/react-query';
-import { useCoreProxy } from '@snx-v3/useCoreProxy';
-import { useUSDProxy } from '@snx-v3/useUSDProxy';
-import { useSpotMarketProxy } from '@snx-v3/useSpotMarketProxy';
-import Wei from '@synthetixio/wei';
-import { Contract, constants, utils } from 'ethers';
-import { getGasPrice } from '@snx-v3/useGasPrice';
-import { useDefaultProvider, useNetwork, useSigner } from '@snx-v3/useBlockchain';
-import { withERC7412 } from '@snx-v3/withERC7412';
-import { formatGasPriceForTransaction } from '@snx-v3/useGasOptions';
-import { useGasSpeed } from '@snx-v3/useGasSpeed';
-import { notNil } from '@snx-v3/tsHelpers';
-import { useSNXPrice } from '../hooks/useSNXPrice';
-
-export const BuyBack = new Contract('0x632cAa10A56343C5e6C0c066735840c096291B18', [
- 'function processBuyback(uint256 snxAmount) external',
- 'function getPremium() view returns(uint256)',
- 'function getSnxNodeId() view returns(bytes32)',
-]);
-
-export function useSellSNX() {
- const { data: CoreProxy } = useCoreProxy();
- const { data: UsdProxy } = useUSDProxy();
- const { data: SpotProxy } = useSpotMarketProxy();
- const provider = useDefaultProvider();
- const { network } = useNetwork();
- const signer = useSigner();
- const { gasSpeed } = useGasSpeed();
- const { data: SNXPrice, refetch } = useSNXPrice();
-
- return useMutation({
- mutationKey: ['sell-snx'],
- mutationFn: async (amount: Wei) => {
- await refetch();
- if (!CoreProxy) return;
- if (!network) return;
- if (!SpotProxy) return;
- if (!signer) return;
- if (!SNXPrice) return;
- if (!provider) return;
- if (!SNXPrice) return;
-
- const gasPricesPromised = getGasPrice({ provider });
-
- const premium = await BuyBack.connect(signer).getPremium();
-
- const USDCAmountPlusPremium = SNXPrice.mul(amount).add(SNXPrice.mul(premium));
-
- const sellSNX = BuyBack.connect(signer).populateTransaction.processBuyback(amount.toBN());
-
- const snxUSDApproval = UsdProxy?.populateTransaction.approve(
- SpotProxy.address,
- USDCAmountPlusPremium.toBN()
- );
-
- const buy_SUSD = SpotProxy.populateTransaction.buy(
- 1,
- USDCAmountPlusPremium.toBN(),
- 0,
- constants.AddressZero
- );
-
- const unwrapTxnPromised = SpotProxy.populateTransaction.unwrap(
- 1,
- USDCAmountPlusPremium.toBN(),
- //2% slippage
- Number(
- utils.formatUnits(USDCAmountPlusPremium.toBN().mul(99).div(100).toString(), 12).toString()
- ).toFixed()
- );
- const [gasPrices, sellSNX_Txn, sUSDCApproval_Txn, buy_SUSD_Txn, unwrapTxn] =
- await Promise.all([
- gasPricesPromised,
- sellSNX,
- snxUSDApproval,
- buy_SUSD,
- unwrapTxnPromised,
- ]);
-
- const allCalls = [sellSNX_Txn, sUSDCApproval_Txn, buy_SUSD_Txn, unwrapTxn].filter(notNil);
-
- const walletAddress = await signer.getAddress();
- const erc7412Tx = await withERC7412(network, allCalls, 'useSellSNX', walletAddress);
-
- const gasOptionsForTransaction = formatGasPriceForTransaction({
- gasLimit: erc7412Tx.gasLimit,
- gasPrices,
- gasSpeed,
- });
-
- const txn = await signer.sendTransaction({ ...erc7412Tx, ...gasOptionsForTransaction });
- await txn.wait();
- },
- });
-}
diff --git a/ultrasound/ui/package.json b/ultrasound/ui/package.json
deleted file mode 100644
index 5bd48a396..000000000
--- a/ultrasound/ui/package.json
+++ /dev/null
@@ -1,92 +0,0 @@
-{
- "name": "@snx-v3/ultrasound",
- "version": "0.0.1",
- "private": true,
- "scripts": {
- "start": "webpack-cli serve",
- "build": "NODE_ENV=production webpack-cli",
- "focus": "yarn workspaces focus '@snx-v3/ultrasound'"
- },
- "dependencies": {
- "@chakra-ui/icons": "^2.1.1",
- "@chakra-ui/react": "^2.8.2",
- "@emotion/react": "^11.11.1",
- "@emotion/styled": "^11.11.0",
- "@snx-v3/contracts": "workspace:*",
- "@snx-v3/isBaseAndromeda": "workspace:*",
- "@snx-v3/tsHelpers": "workspace:*",
- "@snx-v3/useApprove": "workspace:*",
- "@snx-v3/useBlockchain": "workspace:*",
- "@snx-v3/useCoreProxy": "workspace:*",
- "@snx-v3/useGasOptions": "workspace:*",
- "@snx-v3/useGasPrice": "workspace:*",
- "@snx-v3/useGasSpeed": "workspace:*",
- "@snx-v3/useSpotMarketProxy": "workspace:*",
- "@snx-v3/useTokenBalance": "workspace:*",
- "@snx-v3/useUSDProxy": "workspace:*",
- "@snx-v3/withERC7412": "workspace:*",
- "@synthetixio/safe-import": "workspace:*",
- "@synthetixio/v3-theme": "workspace:*",
- "@synthetixio/wei": "^2.74.4",
- "@tanstack/react-query": "^5.8.3",
- "@tanstack/react-query-devtools": "^5.8.3",
- "@web3-onboard/coinbase": "^2.4.1",
- "@web3-onboard/injected-wallets": "^2.11.1",
- "@web3-onboard/ledger": "2.7.1",
- "@web3-onboard/react": "^2.9.1",
- "@web3-onboard/trezor": "^2.4.6",
- "@web3-onboard/walletconnect": "^2.6.1",
- "chart.js": "^4.0.0",
- "ethers": "^5.7.2",
- "framer-motion": "^10.16.5",
- "react": "^18.2.0",
- "react-chartjs-2": "^5.2.0",
- "react-dom": "^18.2.0",
- "recoil": "^0.7.7"
- },
- "devDependencies": {
- "@babel/core": "^7.24.6",
- "@babel/plugin-transform-runtime": "^7.24.6",
- "@babel/preset-env": "^7.24.6",
- "@babel/preset-react": "^7.24.6",
- "@babel/preset-typescript": "^7.24.6",
- "@babel/runtime-corejs3": "^7.24.6",
- "@pmmmwh/react-refresh-webpack-plugin": "^0.5.11",
- "@types/react": "^18.2.37",
- "@types/react-dom": "^18.2.15",
- "babel-loader": "^9.1.3",
- "babel-plugin-istanbul": "^6.1.1",
- "bn.js": "^5.2.1",
- "copy-webpack-plugin": "^11.0.0",
- "core-js": "^3.33.2",
- "crypto-browserify": "^3.12.0",
- "css-loader": "^6.8.1",
- "dotenv": "^16.4.3",
- "html-webpack-plugin": "^5.5.3",
- "process": "^0.11.10",
- "react-refresh": "^0.14.0",
- "stream-browserify": "^3.0.0",
- "style-loader": "^3.3.3",
- "terser-webpack-plugin": "^5.3.9",
- "webpack": "^5.89.0",
- "webpack-bundle-analyzer": "^4.10.0",
- "webpack-cli": "^5.1.4",
- "webpack-dev-server": "^4.15.1"
- },
- "browserslist": [
- "last 1 Chrome version",
- "last 1 iOS version",
- "last 1 Safari version",
- "last 1 Firefox version",
- "last 1 Edge version",
- "last 1 Opera version"
- ],
- "depcheck": {
- "ignorePatterns": [
- "dist"
- ],
- "ignoreMatches": [
- "process"
- ]
- }
-}
diff --git a/ultrasound/ui/public/_redirects b/ultrasound/ui/public/_redirects
deleted file mode 100644
index f8243379a..000000000
--- a/ultrasound/ui/public/_redirects
+++ /dev/null
@@ -1 +0,0 @@
-/* /index.html 200
\ No newline at end of file
diff --git a/ultrasound/ui/public/farcaster.png b/ultrasound/ui/public/farcaster.png
deleted file mode 100644
index 0f6ac9a4069acac940925bb06559e025ee690e20..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 2600
zcmcImi8mB#8=uKenzAox%y5a!SY|So&*U88OyG#SCK`jBAOA
zY>6y!m3`@0J{b{XDcK55n5%p5_YZvMe9w8_^Zef5dEaxM=lPxYypIDOhf@^?07zI2
z(TQk8-iH9u{nZWp>HCaoh8O^#=L*OMYWDzpfaY`?x(!<$0#P%37AFqTfJiPSI70tPp&9$uWV8m
zo0C|8*Wm5uA&W6SdcCg69B}Ey4sW}cf{18-+dkD5Ho%+bI?hp7K~nuJUIbN(5Bv1X
z4xh<-vg^@YMZ35d=M!N0TGnbbx2b^M{N7a
z7kT56PvDTJy@z^a&-zLFdfmDF1?*wduck&
z$4sElg}u~s46xmR1sI?86Tod@U3>yST&wRDbWIDp0n(<^VhQF|lQZV%fol1|8>T0Xu~=;89_(mcR&mFp9|d*~J-_PSG5c^3J_ZnfhQl;x
z92P!3pfCoOCHyQsJlqEc7ul*LwaQB3M!tE>2-Z(luC~v{@pOOxID$g9_OSc`{BBd
zglk_nV8myceLp*GawB`tK=P!F0Jr+cW8FPn(J>&(p76H>49!ST?{DzF+l9aN91>ew
zvcuk7>6*p=BMA7?grm;xA97ifw!4?
zBjBOnGHD+A=nwTF6-Qh3fMlO+P*LL8;1Pq41f{s~i-t#aiuQvr@3z^P*p<)%SyaeH+4LQ@d=
zTPbO2UgDho%kLP?ib5S(RK-U*#KeoFdY|{3VMcfAHe~7cx6zaw29u9u@F<=YE_ULxJ<0j
z{SdKJhW>J|ZSL|!X911&PAIZLlp`;SyZ?CDqoC$CSF6vZM(d(M2znAK(Hzq3*_V%~
zt#F5}-%BIx#XYE=?}}xM8;4eiYS~K%Jv5Q=Rv+?ri25=#L;TUoQzdvb-j$0x1W~^<
zdhBMBytFOKQ$#jYBiAPC=tggs-1qE@$;*Y+*Xj4fycakpQFg(LrDWBiKxZKv6}>D4hR+!*8KhMHD&NB5Sji7~@1MBq>#>esB{q
z9lYtkyx{nnX&6KGiS#u~FJULh=Irc|J~N|{Lk;K!WbP-WzUQ^^#<;mM3Q2X{(lhZG
zsmAE{6{m5AYOuSPdY8X&iKg0w$<|_9koe&4h9Ru_KqyS3#q$*}EZys_aE@4q`KLUe
z)0PBqpy$y!`-CV5_aTYr{S>C(+a&bYgqOdwJ%+Hh{;-y^_50>VXc0Bt-6R@$q>kwl
zFq{;1tu)bFaOKm5lC*rv@r&k9-a)%1>c+jq4iSq^2{gW61)iSh}j`%VBEum%Qbf*%*?p
zZBP#xHB~M%uE0%f)q28jsjf&jbDiolD0?yxZ1}o{EPi%^
z`R_p^J2Ff=aI7HddUS8Nx8OU2(tdRyW>C(nBdROM!~s-OC6B+l3UoIss1V^Na@gQ>
zRIx}DFD35+Bej7e037;m_IqcuhQ*XI`~$|*9hz-?twAj2V0o_m>JEhR&e%poO!FL_
zqX2S(7>ZnS%>};c9SE*D!Z_7|R~StTIT~`}{TqttMgMNz?v>O@g-18n&K+o6SnK{=
zKn>R#a=hwvpHf0rdX;+4(K~%#9`K7Ue@z+BdOOV`&-Ole%-xBWE?-$Io|48GE^-#|
z92a>t(9pg%_oZYvES5AVd`mCKpxQ7qckw2)P15z6l(%+y&aoq+EuBmLPQ6e4u%5~cJC=hEpQJ5O
zD->3u+eVIo7OsU~7*6z?ikaC`)(>-8EDexl95@>aHBy%B4`%CVtvdOoy3Hj{g>fn)
z{`(jG6R~7G&TSv!@!EgSZ9sr`tRMim&nW$S5D18QECMjt-|76zpwC(2@%vaGjzYrq
oUx3`eweAR0P5<8VmK8HA;^Gx{9b5NnS^;^BI50~iwU7cX$U3;+NC
diff --git a/ultrasound/ui/public/metatag.png b/ultrasound/ui/public/metatag.png
deleted file mode 100644
index fc88a5470ba5eb1de178f00c64acfb4ad053fd85..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 793536
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