// "Lock wallet" locks; only "Clear all" deletes.
//
// Wallets save themselves to this device under an empty password unless the
// user sets one, so the unlock screen was demanding a password nobody had
// chosen — which made the action look like it had done something drastic. It
// hasn't: locking keeps every saved wallet.
//
// Run: bun tools/logout-test.js
import puppeteer from 'puppeteer-core';
import { generateMnemonic } from '@scure/bip39';
import { wordlist } from '@scure/bip39/wordlists/english';
import { buildHtml } from '../build.js';
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
let ok = true;
const check = (n, c, d = '') => { console.log(` ${c ? '✓' : '✗'} ${n}${d ? ' — ' + String(d).slice(0, 160) : ''}`); if (!c) ok = false; };
const html = await buildHtml({ minify: true, pwa: false });
const server = Bun.serve({ port: 5235, fetch: () => new Response(html, { headers: { 'content-type': 'text/html' } }) });
const browser = await puppeteer.launch({ executablePath: '/usr/bin/google-chrome', headless: 'new', args: ['--no-sandbox'] });
const page = await browser.newPage();
const body = () => page.evaluate(() => document.body.innerText);
const click = (sel, t) => page.evaluate((s, x) => { const e = [...document.querySelectorAll(s)].find((n) => n.textContent.trim().toLowerCase().includes(x.toLowerCase())); if (e) { e.click(); return true; } return false; }, sel, t);
const waitText = async (x, ms = 20000) => { for (let i = 0; i < ms / 250; i++) { if ((await body()).toLowerCase().includes(x.toLowerCase())) return true; await sleep(250); } return false; };
const logout = async () => {
await page.evaluate(() => document.querySelector('.header-avatar')?.click());
await sleep(400);
await click('.icon-select-item', 'Lock wallet');
await sleep(1500);
};
const vaultSize = () => page.evaluate(() => (localStorage.getItem('btc-wallet-vault') || '').length);
try {
await page.goto('http://localhost:5235/', { waitUntil: 'domcontentloaded' });
await page.evaluate(() => localStorage.setItem('btc-wallet-network', 'regtest'));
await page.reload({ waitUntil: 'domcontentloaded' });
await sleep(400);
await click('button', 'I already have a wallet');
await sleep(300);
await click('button', 'Import existing');
await sleep(300);
await page.waitForSelector('textarea'pre { line-height: 125%; }
td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
.highlight .hll { background-color: #ffffcc }
.highlight .c { color: #888 } /* Comment */
.highlight .err { color: #A61717; background-color: #E3D2D2 } /* Error */
.highlight .k { color: #080; font-weight: bold } /* Keyword */
.highlight .ch { color: #888 } /* Comment.Hashbang */
.highlight .cm { color: #888 } /* Comment.Multiline */
.highlight .cp { color: #C00; font-weight: bold } /* Comment.Preproc */
.highlight .cpf { color: #888 } /* Comment.PreprocFile */
.highlight .c1 { color: #888 } /* Comment.Single */
.highlight .cs { color: #C00; font-weight: bold; background-color: #FFF0F0 } /* Comment.Special */
.highlight .gd { color: #000; background-color: #FDD } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */
.highlight .gr { color: #A00 } /* Generic.Error */
.highlight .gh { color: #333 } /* Generic.Heading */
.highlight .gi { color: #000; background-color: #DFD } /* Generic.Inserted */
.highlight .go { color: #888 } /* Generic.Output */
.highlight .gp { color: #555 } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #666 } /* Generic.Subheading */
.highlight .gt { color: #A00 } /* Generic.Traceback */
.highlight .kc { color: #080; font-weight: bold } /* Keyword.Constant */
.highlight .kd { color: #080; font-weight: bold } /* Keyword.Declaration */
.highlight .kn { color: #080; font-weight: bold } /* Keyword.Namespace */
.highlight .kp { color: #080 } /* Keyword.Pseudo */
.highlight .kr { color: #080; font-weight: bold } /* Keyword.Reserved */
.highlight .kt { color: #888; font-weight: bold } /* Keyword.Type */
.highlight .m { color: #00D; font-weight: bold } /* Literal.Number */
.highlight .s { color: #D20; background-color: #FFF0F0 } /* Literal.String */
.highlight .na { color: #369 } /* Name.Attribute */
.highlight .nb { color: #038 } /* Name.Builtin */
.highlight .nc { color: #B06; font-weight: bold } /* Name.Class */
.highlight .no { color: #036; font-weight: bold } /* Name.Constant */
.highlight .nd { color: #555 } /* Name.Decorator */
.highlight .ne { color: #B06; font-weight: bold } /* Name.Exception */
.highlight .nf { color: #06B; font-weight: bold } /* Name.Function */
.highlight .nl { color: #369; font-style: italic } /* Name.Label */
.highlight .nn { color: #B06; font-weight: bold } /* Name.Namespace */
.highlight .py { color: #369; font-weight: bold } /* Name.Property */
.highlight .nt { color: #B06; font-weight: bold } /* Name.Tag */
.highlight .nv { color: #369 } /* Name.Variable */
.highlight .ow { color: #080 } /* Operator.Word */
.highlight .w { color: #BBB } /* Text.Whitespace */
.highlight .mb { color: #00D; font-weight: bold } /* Literal.Number.Bin */
.highlight .mf { color: #00D; font-weight: bold } /* Literal.Number.Float */
.highlight .mh { color: #00D; font-weight: bold } /* Literal.Number.Hex */
.highlight .mi { color: #00D; font-weight: bold } /* Literal.Number.Integer */
.highlight .mo { color: #00D; font-weight: bold } /* Literal.Number.Oct */
.highlight .sa { color: #D20; background-color: #FFF0F0 } /* Literal.String.Affix */
.highlight .sb { color: #D20; background-color: #FFF0F0 } /* Literal.String.Backtick */
.highlight .sc { color: #D20; background-color: #FFF0F0 } /* Literal.String.Char */
.highlight .dl { color: #D20; background-color: #FFF0F0 } /* Literal.String.Delimiter */
.highlight .sd { color: #D20; background-color: #FFF0F0 } /* Literal.String.Doc */
.highlight .s2 { color: #D20; background-color: #FFF0F0 } /* Literal.String.Double */
.highlight .se { color: #04D; background-color: #FFF0F0 } /* Literal.String.Escape */
.highlight .sh { color: #D20; background-color: #FFF0F0 } /* Literal.String.Heredoc */
.highlight .si { color: #33B; background-color: #FFF0F0 } /* Literal.String.Interpol */
.highlight .sx { color: #2B2; background-color: #F0FFF0 } /* Literal.String.Other */
.highlight .sr { color: #080; background-color: #FFF0FF } /* Literal.String.Regex */
.highlight .s1 { color: #D20; background-color: #FFF0F0 } /* Literal.String.Single */
.highlight .ss { color: #A60; background-color: #FFF0F0 } /* Literal.String.Symbol */
.highlight .bp { color: #038 } /* Name.Builtin.Pseudo */
.highlight .fm { color: #06B; font-weight: bold } /* Name.Function.Magic */
.highlight .vc { color: #369 } /* Name.Variable.Class */
.highlight .vg { color: #D70 } /* Name.Variable.Global */
.highlight .vi { color: #33B } /* Name.Variable.Instance */
.highlight .vm { color: #369 } /* Name.Variable.Magic */
.highlight .il { color: #00D; font-weight: bold } /* Literal.Number.Integer.Long */{
"appTitle": "Coinos",
"home": "Start",
"lockWallet": "Brieftasche sperren",
"accounts": "Konten",
"addWallet": "Wallet hinzufügen",
"clearAll": "Alle löschen",
"logoutForget": "Abmelden & vergessen Sie alle Daten",
"entropyToggle": "Entropie",
"entropySubmit": "Senden",
"entropyHint": "Der Samen kommt von genau dem, was Sie tippen. Das Eingeben desselben Textes erzeugt wieder dieselbe Brieftasche, auf jedem Gerät.",
"entropyWarn": "- Ja. Jeder, der diesen Text erraten kann, kann Ihr Geld nehmen. Verwenden Sie viel Real-World Randomness 100+ Würfelrollen, oder die Reihenfolge eines voll geschrafften Kartendecks.",
"entropyPlaceholder": "4 2 6 6 1 3 5 2 ...",
"logoutPopBlurb": "Ihre Konten bleiben auf diesem Gerät gespeichert.",
"clearAllWarn": "⚠ Dies entfernt alle Wallets von diesem Gerät. Jede Wallet, deren Wiederherstellungsphrase oder Schlüssel du nicht gesichert hast, ist für immer verloren.",
"removeWalletTitle": "Konto entfernen",
"removeWalletWarn": "Entfernen{name}Von diesem Gerät? Es wird von diesem Browser weg sein sicherzustellen, dass Sie seine Erholung Phrase haben. Andere Konten sind nicht betroffen.",
"rename": "Umbenennen",
"remove": "Entfernen",
"watchOnly": "Nur-Lesen",
"watchOnlyTag": "nur-lesen",
"watchOnlyAdd": "Nur-Lesen hinzufügen",
"watchOnlyDesc": "Beobachte eine beliebige Wallet über ihren öffentlichen Account-Schlüssel. Du kannst empfangen sowie Guthaben und Verlauf einsehen, aber nicht senden.",
"watchOnlyNote": "Dies ist eine Nur-Lesen-Wallet. Du kannst empfangen und einsehen, aber nicht senden.",
"loadSeedTitle": "Load Recovery Phrase",
"loadSeedDesc": "Geben Sie diese Geldbörse Erholung Phrase (oder privaten Schlüssel) zu verbringen, von ihm zu verwenden, muss es diesem Geldbörse entsprechen.",
"loadSeedBtn": "Load Recovery Phrase",
"seedPlaceholder": "gib deine Wörter durch Leerzeichen getrennt ein",
"bip39PassphraseOpt": "BIP39-Passphrase (optional)",
"alsoSaveDevice": "Speichern Sie auch auf diesem Gerät",
"enterSeedToSpend": "Geben Sie Ihre Genesung Phrase.",
"seedMismatch": "Diese Genesung Phrase entspricht nicht dieser Brieftasche.",
"seedNeedsPrivate": "Das ist ein öffentlicher Schlüssel Geben Sie die Erholung Phrase oder privaten Schlüssel zu verbringen.",
"seedInvalid": "Keine gültige Recovery Phrase oder Schlüssel.",
"watchOnlySendTitle": "Laden Sie Ihren Samen zu senden",
"watchOnlySendDesc": "Du siehst diese Brieftasche ohne Samen, also kannst du noch nicht ausgeben. Laden Sie Ihre Genesung Phrase zu senden.",
"watchXpubLabel": "Account-xpub oder -zpub",
"labelOptional": "Bezeichnung (optional)",
"walletLabelN": "Wallet {n}",
"watchLabelN": "Beobachtung {n}",
"saveDevice": "Auf diesem Gerät speichern",
"forgetDevice": "Gespeichert · entfernen",
"savedTag": "gespeichert",
"setPassword": "Passwort festlegen",
"setPasswordDesc": "Verschlüsselt diese Wallet auf diesem Gerät. Du brauchst es, um gespeicherte Wallets später zu entsperren.",
"passwordOptional": "Passwort (optional)",
"changePassword": "Passwort ändern",
"changePasswordDesc": "Verschlüsseln Sie Ihre gespeicherten Konten mit einem neuen Passwort neu. Lassen Sie das neue Passwort leer zu entfernen.",
"currentPassword": "Aktuelles Passwort",
"pwChanged": "Passwort geändert",
"enterPassword": "Passwort eingeben",
"enterPasswordDesc": "Entsperre deine gespeicherten Wallets, um fortzufahren.",
"profUsername": "Benutzername",
"profUploadPic": "Foto hochladen",
"profDisplayName": "Anzeigename",
"profUnameInvalid": "Benutzernamen können nur Buchstaben, Zahlen, Punkte, Striche und Unterstriche verwenden.",
"lockSaveDesc": "Die auf diesem Gerät bereits gespeicherten Konten werden durch ein Passwort geschützt. Geben Sie es ein, um dieses Konto mit ihnen zu speichern und zu sperren.",
"lockAction": "Sperre",
"password": "Passwort",
"confirmPassword": "Passwort bestätigen",
"pwMismatch": "Die Passwörter stimmen nicht überein.",
"pwWrong": "Falsches Passwort.",
"pwNeededToLock": "Geben Sie ein Passwort ein oder wählen Sie \"Nicht jetzt.\"",
"lockPwTitle": "Dieses Gerät schützen?",
"lockPwDesc": "Setzen Sie ein Passwort, um Ihre Brieftasche zu verriegeln. Jeder, der dieses Gerät verwendet, braucht es, um Ihr Geld auszugeben.",
"lockPwSkip": "Nicht jetzt",
"unlockSaved": "Gespeicherte Wallets entsperren",
"unlockSavedDesc": "Gib dein Passwort ein, um die auf diesem Gerät gespeicherten Wallets zu öffnen.",
"unlock": "Entsperren",
"useAnotherWallet": "Andere Wallet verwenden",
"save": "Speichern",
"publicKey": "Öffentlicher Schlüssel",
"publicKeyDesc": "Teile dies, um diese Wallet auf einem anderen Gerät oder in einer anderen App nur-lesend zu beobachten. Er gibt deine Adressen preis, nicht deine Schlüssel.",
"copyKey": "Schlüssel kopieren",
"showPublicKey": "Öffentlichen Schlüssel anzeigen",
"createNew": "Neu erstellen",
"importExisting": "Importieren",
"genIntro": "Erzeuge eine neue Seed-Phrase aus 12 Wörtern. Schreibe sie auf. Sie ist die einzige Möglichkeit, dieses Wallet wiederherzustellen.",
"generateSeed": "Seed-Phrase erzeugen",
"writeDownWarn": "⚠ Schreibe diese 12 Wörter in der richtigen Reihenfolge auf Papier. Wer sie hat, kann deine Coins ausgeben.",
"copyPhrase": "Phrase kopieren",
"regenerate": "Neu erzeugen",
"verifyBackup": "Backup prüfen",
"skipVerification": "Prüfung überspringen",
"confirmBackupIntro": "Bestätige dein Backup, indem du die abgefragten Wörter eingibst.",
"wordN": "Wort #{n}",
"reenterPassphrase": "Passphrase erneut eingeben",
"back": "← Zurück",
"cancel": "Abbrechen",
"paste": "Einfügen",
"openWallet": "Wallet öffnen",
"wordsMismatch": "Diese Wörter passen nicht zu deiner Phrase. Prüfe dein Backup.",
"passphraseMismatch": "Diese Passphrase stimmt nicht mit der eingegebenen überein.",
"seedPhrase": "Seed-Phrase",
"passphrase": "Passphrase",
"passWhatsThis": "Was ist das?",
"passInfo": "Ein optionales 13. Wort: Wenn jemand Ihre 12 Samenwörter hält, können sie Ihre Brieftasche noch ohne diese öffnen. Es ist nicht ein Login-Passwort und es verschlüsselt nicht alles Ã1⁄4ber jede Passphrase öffnet seine eigene separate GeldbÃ1⁄4cke, so dass Ihr Geld wieder benötigen Sie Ihre Samen Worte und diese Passphrase, genau wie geschrieben.",
"show": "Zeigen",
"hide": "Verbergen",
"invalidSeed": "Ungültige Seed-Phrase — prüfe Schreibweise und Reihenfolge.",
"importLabel": "Wiederherstellungsphrase oder Schlüssel",
"importPlaceholder": "Deine 12 oder 24 Wörter oder ein xpub / xprv",
"invalidImport": "Das ist keine gültige Wiederherstellungsphrase, kein xpub oder xprv.",
"importedKey": "Importierter Schlüssel",
"importedKeyNote": "Diese Wallet wurde aus einem erweiterten privaten Schlüssel importiert und hat daher keine Wiederherstellungsphrase. Sichere diesen Schlüssel selbst, um die Wallet zu behalten.",
"keysNote": "Schlüssel verlassen nie deinen Browser. Funktioniert offline. Speichere diese Seite und öffne sie lokal.",
"howItWorks": "So funktioniert es",
"installApp": "App installieren",
"hiwBasicsTitle": "Die Grundlagen",
"hiwBasics1": "Wenn Sie eine Geldbörse machen, erzeugt die Seite zwölf zufällige Wörter Die Schlüssel zu Ihren Münzen. Wer sie hat, kann ausgeben; wenn man sie verliert, sind die Münzen für immer weg. Schreib sie auf Papier, bevor du Geld reinsteckst.",
"hiwBasics2": "Ihre Schlüssel verlassen nie Ihr Gerät. Coinos betreibt Server, die Fähre Zahlungen und Nachrichten, aber sie können Ihr Geld nicht berühren. Die App selbst ist eine Seite, die Sie speichern können und öffnen Sie sie offline.",
"hiwBasics3": "Es verwendet Standard-Bitcoin-Formate: die gleichen zwölf Wörter wiederherstellen Ihre Einsparungen in Sparrow, Electrum, oder jede andere Standard-Geldbörse, auch wenn diese Website verschwindet.",
"hiwLnTitle": "Ausgaben und Ersparnisse",
"hiwLn1": "Ihr Geld kann in zwei Konten sitzen. Sparen ist gewöhnliches Bitcoin auf der Blockchain sicherste für Geld, das Sie behalten, aber jeder Zug kostet eine Minengebühr und wartet auf eine Bestätigung. Ausgaben sendet und kommt sofort, kostenlos oder fast frei, und ist immer noch nur Ihr: es läuft auf Ark, eine neuere Schicht auf Bitcoin, wo jede Münze an Ihrem Schlüssel gesperrt bleibt, und es spricht Blitz, so können Sie zahlen und von jeder Bitcoin App oder Shop bezahlt werden.",
"hiwGiftsTitle": "Geschenke",
"hiwGifts1": "Sie können Geschenk Bitcoin mit einem Link: Wer öffnet es beansprucht die Münzen in ihre eigene Geldbörse, keine App, kein Signup, funktioniert sogar für jemanden brandneu zu Bitcoin. Bis ein Geschenk beansprucht wird, können Sie es absagen und die Münzen zurücknehmen.",
"moveMoney": "Geld bewegen",
"moveToSpending": "Into Spend",
"moveToSpendingDesc": "Verdiene sofort Geld, ohne Gebühren, um es zu senden.",
"moveToSaving": "Into Savings",
"moveToSavingDesc": "Parken Sie Geld in normalen on-chain Bitcoin.",
"moveToSavingBtn": "Speichern",
"spendingLabel": "Ausgaben",
"savingLabel": "Einsparungen",
"balanceSwitch": "Auf {name}",
"movingLabel": "Bewegung...",
"balance": "Guthaben",
"pending": "Ausstehend",
"tabReceive": "Empfangen",
"tabSend": "Senden",
"tabHistory": "Verlauf",
"tabSettings": "Einstellungen",
"tabMessages": "Chat",
"msgSend": "Senden",
"msgEmpty": "Noch keine Nachrichten sagen Hallo!",
"msgPlaceholder": "Nachricht #{channel}",
"msgPlaceholderPlain": "Nachricht.",
"msgMembers": "{n} Mitglieder",
"msgEncrypted": "Ende-zu-Ende verschlüsselt",
"msgAddPerson": "Person hinzufügen",
"msgNewChannel": "Neuer Kanal",
"msgAdmin": "admin",
"msgEdited": "(bearbeitet)",
"msgDelete": "Nachricht löschen",
"msgNoIdentity": "Dein nostr signer ist nicht verbunden, es wieder zu senden, wie du selbst",
"msgSendFailed": "Kein Relais akzeptierte die Nachricht",
"msgLockedChat": "Ihre Brieftasche ist gesperrt, so dass sie Nachrichten signieren kann.",
"msgSignerOff": "Dein Nostr-Signer ist nicht verbunden, also kannst du noch nicht wie du posten.",
"msgReconnect": "Verbindungsaufbau",
"msgDmsTitle": "Nachrichten",
"msgCommunitiesTitle": "Gemeinschaften",
"msgNewDm": "Neue Nachricht",
"msgNoDms": "Noch keine Gespräche.",
"msgShowAllDms": "Alle zeigen {n} Gespräche",
"msgShowFewerDms": "Weniger zeigen",
"msgNoDmsYet": "Noch keine Nachrichten sagen Hallo!",
"msgDmPlaceholder": "Nachricht",
"msgDmEncrypted": "Private Nachricht · Ende-zu-Ende verschlüsselt",
"msgYouPrefix": "Du:",
"msgOpen": "Öffnen",
"msgNpubPlaceholder": "Npub...",
"msgSearchPlaceholder": "Name oder Npub...",
"zapNoBalance": "Es gibt nicht genug in Spending, um einen Zap zu senden, ein wenig Geld in Spending zuerst zu bewegen.",
"zapBoardBtn": "Sats in Ausgaben verschieben",
"onbBoardTitle": "Nach oben Ausgaben",
"onbBoardBody": "Bewegen Sie einige Sats von den Ersparnisse in Spenden der Zahlungen gibt es sofortige, ohne Mining-Gebühren.",
"topUpFromSavings": "Nach oben von den Einsparungen",
"arkRenewedHistory": "Erneut",
"arkDepthNotice": "Unkooperative Ausstiegskosten {fee} Sats.",
"arkDepthFree": "kostenlos",
"arkDepthBtn": "Verwaltung",
"arkDepthRenewed": "Erneuerung beantragt",
"arkDepthRenewBtn": "Jetzt erneuern",
"arkSpentElsewhere": "Auf einem anderen Gerät angelegt",
"arkSpentElsewhereN": "{n} Münzen",
"arkCoinsTitle": "Ausgabe von Münzen",
"arkCoinsIntro": "Deine Spenden Gleichgewicht lebt in {n} Münzen insgesamt {total}. Jeder kann auf-chain gezogen werden, ohne den Server zu helfen, zu einem Preis, der mit der Geschichte der Münze wächst.",
"arkCoinsColAmount": "Betrag",
"arkCoinsColExpires": "Ausgaben",
"arkCoinsColDepth": "Tiefe",
"arkCoinsColExitFee": "Ausreisegebühr",
"arkCoinsExitTitle": "Unkooperativer Ausgang",
"arkCoinsExitDesc": "Wenn der Server verschwand heute, Publishing jede Transaktion in jeder Münze Geschichte würde ungefähr kosten {fee} Sats in Bergbaugebühren. Nach einer Erneuerung wäre es eine frische Münze, ein Hopfen: {after} Sats.",
"arkCoinsRenewTitle": "Erneuerung",
"arkCoinsRenewNowFee": "Jetzt neu für {fee}",
"arkCoinsRenewSome": "Erneuerung {n} ausgewählt für {fee}",
"arkCoinsRenewNone": "Münzen zur Erneuerung auswählen",
"arkCoinsSelectAll": "Alle auswählen",
"arkCoinsColFee": "Neue Gebühr",
"arkCoinsSpanDay": "1 Tag",
"arkCoinsSpanDays": "{n} Tage",
"arkCoinsSpanHour": "1 Stunde",
"arkCoinsSpanHours": "{n} Stunden",
"arkCoinsSchedOver": "mehr als {span} links",
"arkCoinsSchedBetween": "{a} bis {b} links",
"arkCoinsSchedFinal": "weniger als {span} links",
"arkUniUneconomical": "Ein vertrauensloser On-Chain-Austritt würde ungefähr kosten {fee} sats in bergbau Gebühren mehr als die {n} sats es würde sich bewegen, so wird es nicht angeboten. Für ein Gleichgewicht dieser Größe, senden Sie es über Blitz statt: keine Bergbaugebühren überhaupt.",
"arkUniFallbackBody": "Der Server hat nicht kooperiert, aber Ihr Geld kann noch ohne es bewegen: Ihr gesamtes Spenden Gleichgewicht beendet sich zu Sparen on-chain. Es dauert etwa einen Tag und ungefähr {fee} sats der Bergbaugebühren werden von Savings bezahlt. Funds land in Savings Senden Sie sie von dort, sobald es abgeschlossen.",
"arkUniFallbackShort": "Sparkonten {have} Sats {need} Sats werden für die Bergbaugebühren benötigt. Erhöhe zuerst die Ersparnisse.",
"arkUniFallbackBtn": "Ausgang zu den Einsparungen ({fee} Sats in Gebühren)",
"msgPushOffer":