[tbb-commits] [tor-browser] 58/73: Bug 31286: Implementation of bridge, proxy, and firewall settings in about:preferences#connection
gitolite role
git at cupani.torproject.org
Thu Jul 21 10:28:15 UTC 2022
This is an automated email from the git hooks/post-receive script.
pierov pushed a commit to branch tor-browser-91.12.0esr-11.5-1
in repository tor-browser.
commit 2842f2fcb1da377eac382587fee302d98302cf2e
Author: Richard Pospesel <richard at torproject.org>
AuthorDate: Mon Sep 16 15:25:39 2019 -0700
Bug 31286: Implementation of bridge, proxy, and firewall settings in about:preferences#connection
This patch adds a new about:preferences#connection page which allows
modifying bridge, proxy, and firewall settings from within Tor Browser.
All of the functionality present in tor-launcher's Network
Configuration panel is present:
- Setting built-in bridges
- Requesting bridges from BridgeDB via moat
- Using user-provided bridges
- Configuring SOCKS4, SOCKS5, and HTTP/HTTPS proxies
- Setting firewall ports
- Viewing and Copying Tor's logs
- The Networking Settings in General preferences has been removed
Bug 40774: Update about:preferences page to match new UI designs
---
browser/components/moz.build | 1 +
browser/components/preferences/main.inc.xhtml | 54 -
browser/components/preferences/main.js | 14 -
browser/components/preferences/preferences.js | 9 +
browser/components/preferences/preferences.xhtml | 6 +
.../torpreferences/content/bridgeQrDialog.jsm | 51 +
.../torpreferences/content/bridgeQrDialog.xhtml | 25 +
.../content/bridgemoji-annotations.json | 8774 ++++++++++++++++++++
.../torpreferences/content/bridgemoji/1f300.svg | 1 +
.../torpreferences/content/bridgemoji/1f308.svg | 1 +
.../torpreferences/content/bridgemoji/1f30a.svg | 1 +
.../torpreferences/content/bridgemoji/1f30b.svg | 1 +
.../torpreferences/content/bridgemoji/1f319.svg | 1 +
.../torpreferences/content/bridgemoji/1f31f.svg | 1 +
.../torpreferences/content/bridgemoji/1f321.svg | 1 +
.../torpreferences/content/bridgemoji/1f32d.svg | 1 +
.../torpreferences/content/bridgemoji/1f32e.svg | 1 +
.../torpreferences/content/bridgemoji/1f332.svg | 1 +
.../torpreferences/content/bridgemoji/1f333.svg | 1 +
.../torpreferences/content/bridgemoji/1f334.svg | 1 +
.../torpreferences/content/bridgemoji/1f335.svg | 1 +
.../torpreferences/content/bridgemoji/1f336.svg | 1 +
.../torpreferences/content/bridgemoji/1f337.svg | 1 +
.../torpreferences/content/bridgemoji/1f339.svg | 1 +
.../torpreferences/content/bridgemoji/1f33a.svg | 1 +
.../torpreferences/content/bridgemoji/1f33b.svg | 1 +
.../torpreferences/content/bridgemoji/1f33d.svg | 1 +
.../torpreferences/content/bridgemoji/1f33f.svg | 1 +
.../torpreferences/content/bridgemoji/1f341.svg | 1 +
.../torpreferences/content/bridgemoji/1f344.svg | 1 +
.../torpreferences/content/bridgemoji/1f345.svg | 1 +
.../torpreferences/content/bridgemoji/1f346.svg | 1 +
.../torpreferences/content/bridgemoji/1f347.svg | 1 +
.../torpreferences/content/bridgemoji/1f348.svg | 1 +
.../torpreferences/content/bridgemoji/1f349.svg | 1 +
.../torpreferences/content/bridgemoji/1f34a.svg | 1 +
.../torpreferences/content/bridgemoji/1f34b.svg | 1 +
.../torpreferences/content/bridgemoji/1f34c.svg | 1 +
.../torpreferences/content/bridgemoji/1f34d.svg | 1 +
.../torpreferences/content/bridgemoji/1f34f.svg | 1 +
.../torpreferences/content/bridgemoji/1f350.svg | 1 +
.../torpreferences/content/bridgemoji/1f351.svg | 1 +
.../torpreferences/content/bridgemoji/1f352.svg | 1 +
.../torpreferences/content/bridgemoji/1f353.svg | 1 +
.../torpreferences/content/bridgemoji/1f354.svg | 1 +
.../torpreferences/content/bridgemoji/1f355.svg | 1 +
.../torpreferences/content/bridgemoji/1f368.svg | 1 +
.../torpreferences/content/bridgemoji/1f369.svg | 1 +
.../torpreferences/content/bridgemoji/1f36a.svg | 1 +
.../torpreferences/content/bridgemoji/1f36b.svg | 1 +
.../torpreferences/content/bridgemoji/1f36c.svg | 1 +
.../torpreferences/content/bridgemoji/1f36d.svg | 1 +
.../torpreferences/content/bridgemoji/1f37f.svg | 1 +
.../torpreferences/content/bridgemoji/1f380.svg | 1 +
.../torpreferences/content/bridgemoji/1f381.svg | 1 +
.../torpreferences/content/bridgemoji/1f382.svg | 1 +
.../torpreferences/content/bridgemoji/1f383.svg | 1 +
.../torpreferences/content/bridgemoji/1f388.svg | 1 +
.../torpreferences/content/bridgemoji/1f389.svg | 1 +
.../torpreferences/content/bridgemoji/1f38f.svg | 1 +
.../torpreferences/content/bridgemoji/1f392.svg | 1 +
.../torpreferences/content/bridgemoji/1f399.svg | 1 +
.../torpreferences/content/bridgemoji/1f39f.svg | 1 +
.../torpreferences/content/bridgemoji/1f3a0.svg | 1 +
.../torpreferences/content/bridgemoji/1f3a1.svg | 1 +
.../torpreferences/content/bridgemoji/1f3a2.svg | 1 +
.../torpreferences/content/bridgemoji/1f3a8.svg | 1 +
.../torpreferences/content/bridgemoji/1f3ac.svg | 1 +
.../torpreferences/content/bridgemoji/1f3af.svg | 1 +
.../torpreferences/content/bridgemoji/1f3b2.svg | 1 +
.../torpreferences/content/bridgemoji/1f3b6.svg | 1 +
.../torpreferences/content/bridgemoji/1f3b7.svg | 1 +
.../torpreferences/content/bridgemoji/1f3b8.svg | 1 +
.../torpreferences/content/bridgemoji/1f3ba.svg | 1 +
.../torpreferences/content/bridgemoji/1f3bb.svg | 1 +
.../torpreferences/content/bridgemoji/1f3be.svg | 1 +
.../torpreferences/content/bridgemoji/1f3c0.svg | 1 +
.../torpreferences/content/bridgemoji/1f3c6.svg | 1 +
.../torpreferences/content/bridgemoji/1f3c8.svg | 1 +
.../torpreferences/content/bridgemoji/1f3d3.svg | 1 +
.../torpreferences/content/bridgemoji/1f3d4.svg | 1 +
.../torpreferences/content/bridgemoji/1f3d5.svg | 1 +
.../torpreferences/content/bridgemoji/1f3dd.svg | 1 +
.../torpreferences/content/bridgemoji/1f3e1.svg | 1 +
.../torpreferences/content/bridgemoji/1f3ee.svg | 1 +
.../torpreferences/content/bridgemoji/1f3f7.svg | 1 +
.../torpreferences/content/bridgemoji/1f3f8.svg | 1 +
.../torpreferences/content/bridgemoji/1f3f9.svg | 1 +
.../torpreferences/content/bridgemoji/1f40a.svg | 1 +
.../torpreferences/content/bridgemoji/1f40c.svg | 1 +
.../torpreferences/content/bridgemoji/1f40d.svg | 1 +
.../torpreferences/content/bridgemoji/1f417.svg | 1 +
.../torpreferences/content/bridgemoji/1f418.svg | 1 +
.../torpreferences/content/bridgemoji/1f419.svg | 1 +
.../torpreferences/content/bridgemoji/1f41a.svg | 1 +
.../torpreferences/content/bridgemoji/1f41b.svg | 1 +
.../torpreferences/content/bridgemoji/1f41d.svg | 1 +
.../torpreferences/content/bridgemoji/1f41e.svg | 1 +
.../torpreferences/content/bridgemoji/1f41f.svg | 1 +
.../torpreferences/content/bridgemoji/1f420.svg | 1 +
.../torpreferences/content/bridgemoji/1f422.svg | 1 +
.../torpreferences/content/bridgemoji/1f425.svg | 1 +
.../torpreferences/content/bridgemoji/1f426.svg | 1 +
.../torpreferences/content/bridgemoji/1f428.svg | 1 +
.../torpreferences/content/bridgemoji/1f42a.svg | 1 +
.../torpreferences/content/bridgemoji/1f42c.svg | 1 +
.../torpreferences/content/bridgemoji/1f42d.svg | 1 +
.../torpreferences/content/bridgemoji/1f42e.svg | 1 +
.../torpreferences/content/bridgemoji/1f42f.svg | 1 +
.../torpreferences/content/bridgemoji/1f430.svg | 1 +
.../torpreferences/content/bridgemoji/1f431.svg | 1 +
.../torpreferences/content/bridgemoji/1f432.svg | 1 +
.../torpreferences/content/bridgemoji/1f433.svg | 1 +
.../torpreferences/content/bridgemoji/1f434.svg | 1 +
.../torpreferences/content/bridgemoji/1f435.svg | 1 +
.../torpreferences/content/bridgemoji/1f436.svg | 1 +
.../torpreferences/content/bridgemoji/1f437.svg | 1 +
.../torpreferences/content/bridgemoji/1f43a.svg | 1 +
.../torpreferences/content/bridgemoji/1f43b.svg | 1 +
.../torpreferences/content/bridgemoji/1f43f.svg | 1 +
.../torpreferences/content/bridgemoji/1f441.svg | 1 +
.../torpreferences/content/bridgemoji/1f451.svg | 1 +
.../torpreferences/content/bridgemoji/1f455.svg | 1 +
.../torpreferences/content/bridgemoji/1f457.svg | 1 +
.../torpreferences/content/bridgemoji/1f45f.svg | 1 +
.../torpreferences/content/bridgemoji/1f47d.svg | 1 +
.../torpreferences/content/bridgemoji/1f484.svg | 1 +
.../torpreferences/content/bridgemoji/1f488.svg | 1 +
.../torpreferences/content/bridgemoji/1f48d.svg | 1 +
.../torpreferences/content/bridgemoji/1f48e.svg | 1 +
.../torpreferences/content/bridgemoji/1f490.svg | 1 +
.../torpreferences/content/bridgemoji/1f4a1.svg | 1 +
.../torpreferences/content/bridgemoji/1f4a7.svg | 1 +
.../torpreferences/content/bridgemoji/1f4b3.svg | 1 +
.../torpreferences/content/bridgemoji/1f4bf.svg | 1 +
.../torpreferences/content/bridgemoji/1f4cc.svg | 1 +
.../torpreferences/content/bridgemoji/1f4ce.svg | 1 +
.../torpreferences/content/bridgemoji/1f4d5.svg | 1 +
.../torpreferences/content/bridgemoji/1f4e1.svg | 1 +
.../torpreferences/content/bridgemoji/1f4e2.svg | 1 +
.../torpreferences/content/bridgemoji/1f4fb.svg | 1 +
.../torpreferences/content/bridgemoji/1f50b.svg | 1 +
.../torpreferences/content/bridgemoji/1f511.svg | 1 +
.../torpreferences/content/bridgemoji/1f525.svg | 1 +
.../torpreferences/content/bridgemoji/1f526.svg | 1 +
.../torpreferences/content/bridgemoji/1f52c.svg | 1 +
.../torpreferences/content/bridgemoji/1f52d.svg | 1 +
.../torpreferences/content/bridgemoji/1f52e.svg | 1 +
.../torpreferences/content/bridgemoji/1f54a.svg | 1 +
.../torpreferences/content/bridgemoji/1f58c.svg | 1 +
.../torpreferences/content/bridgemoji/1f58d.svg | 1 +
.../torpreferences/content/bridgemoji/1f5ff.svg | 1 +
.../torpreferences/content/bridgemoji/1f680.svg | 1 +
.../torpreferences/content/bridgemoji/1f681.svg | 1 +
.../torpreferences/content/bridgemoji/1f686.svg | 1 +
.../torpreferences/content/bridgemoji/1f68b.svg | 1 +
.../torpreferences/content/bridgemoji/1f68d.svg | 1 +
.../torpreferences/content/bridgemoji/1f695.svg | 1 +
.../torpreferences/content/bridgemoji/1f697.svg | 1 +
.../torpreferences/content/bridgemoji/1f69a.svg | 1 +
.../torpreferences/content/bridgemoji/1f69c.svg | 1 +
.../torpreferences/content/bridgemoji/1f6a0.svg | 1 +
.../torpreferences/content/bridgemoji/1f6a2.svg | 1 +
.../torpreferences/content/bridgemoji/1f6a4.svg | 1 +
.../torpreferences/content/bridgemoji/1f6f0.svg | 1 +
.../torpreferences/content/bridgemoji/1f6f4.svg | 1 +
.../torpreferences/content/bridgemoji/1f6f5.svg | 1 +
.../torpreferences/content/bridgemoji/1f6f6.svg | 1 +
.../torpreferences/content/bridgemoji/1f6f8.svg | 1 +
.../torpreferences/content/bridgemoji/1f6f9.svg | 1 +
.../torpreferences/content/bridgemoji/1f6fa.svg | 1 +
.../torpreferences/content/bridgemoji/1f6fc.svg | 1 +
.../torpreferences/content/bridgemoji/1f916.svg | 1 +
.../torpreferences/content/bridgemoji/1f93f.svg | 1 +
.../torpreferences/content/bridgemoji/1f941.svg | 1 +
.../torpreferences/content/bridgemoji/1f94c.svg | 1 +
.../torpreferences/content/bridgemoji/1f94f.svg | 1 +
.../torpreferences/content/bridgemoji/1f950.svg | 1 +
.../torpreferences/content/bridgemoji/1f951.svg | 1 +
.../torpreferences/content/bridgemoji/1f955.svg | 1 +
.../torpreferences/content/bridgemoji/1f956.svg | 1 +
.../torpreferences/content/bridgemoji/1f95c.svg | 1 +
.../torpreferences/content/bridgemoji/1f95d.svg | 1 +
.../torpreferences/content/bridgemoji/1f95e.svg | 1 +
.../torpreferences/content/bridgemoji/1f965.svg | 1 +
.../torpreferences/content/bridgemoji/1f966.svg | 1 +
.../torpreferences/content/bridgemoji/1f968.svg | 1 +
.../torpreferences/content/bridgemoji/1f96c.svg | 1 +
.../torpreferences/content/bridgemoji/1f96d.svg | 1 +
.../torpreferences/content/bridgemoji/1f96f.svg | 1 +
.../torpreferences/content/bridgemoji/1f980.svg | 1 +
.../torpreferences/content/bridgemoji/1f981.svg | 1 +
.../torpreferences/content/bridgemoji/1f984.svg | 1 +
.../torpreferences/content/bridgemoji/1f986.svg | 1 +
.../torpreferences/content/bridgemoji/1f987.svg | 1 +
.../torpreferences/content/bridgemoji/1f988.svg | 1 +
.../torpreferences/content/bridgemoji/1f989.svg | 1 +
.../torpreferences/content/bridgemoji/1f98a.svg | 1 +
.../torpreferences/content/bridgemoji/1f98b.svg | 1 +
.../torpreferences/content/bridgemoji/1f98c.svg | 1 +
.../torpreferences/content/bridgemoji/1f98e.svg | 1 +
.../torpreferences/content/bridgemoji/1f98f.svg | 1 +
.../torpreferences/content/bridgemoji/1f992.svg | 1 +
.../torpreferences/content/bridgemoji/1f993.svg | 1 +
.../torpreferences/content/bridgemoji/1f994.svg | 1 +
.../torpreferences/content/bridgemoji/1f995.svg | 1 +
.../torpreferences/content/bridgemoji/1f998.svg | 1 +
.../torpreferences/content/bridgemoji/1f999.svg | 1 +
.../torpreferences/content/bridgemoji/1f99a.svg | 1 +
.../torpreferences/content/bridgemoji/1f99c.svg | 1 +
.../torpreferences/content/bridgemoji/1f99d.svg | 1 +
.../torpreferences/content/bridgemoji/1f99e.svg | 1 +
.../torpreferences/content/bridgemoji/1f9a3.svg | 1 +
.../torpreferences/content/bridgemoji/1f9a4.svg | 1 +
.../torpreferences/content/bridgemoji/1f9a5.svg | 1 +
.../torpreferences/content/bridgemoji/1f9a6.svg | 1 +
.../torpreferences/content/bridgemoji/1f9a7.svg | 1 +
.../torpreferences/content/bridgemoji/1f9a9.svg | 1 +
.../torpreferences/content/bridgemoji/1f9ad.svg | 1 +
.../torpreferences/content/bridgemoji/1f9c1.svg | 1 +
.../torpreferences/content/bridgemoji/1f9c3.svg | 1 +
.../torpreferences/content/bridgemoji/1f9c5.svg | 1 +
.../torpreferences/content/bridgemoji/1f9c7.svg | 1 +
.../torpreferences/content/bridgemoji/1f9c9.svg | 1 +
.../torpreferences/content/bridgemoji/1f9d9.svg | 1 +
.../torpreferences/content/bridgemoji/1f9da.svg | 1 +
.../torpreferences/content/bridgemoji/1f9dc.svg | 1 +
.../torpreferences/content/bridgemoji/1f9e0.svg | 1 +
.../torpreferences/content/bridgemoji/1f9e2.svg | 1 +
.../torpreferences/content/bridgemoji/1f9e6.svg | 1 +
.../torpreferences/content/bridgemoji/1f9e9.svg | 1 +
.../torpreferences/content/bridgemoji/1f9ea.svg | 1 +
.../torpreferences/content/bridgemoji/1f9ec.svg | 1 +
.../torpreferences/content/bridgemoji/1f9ed.svg | 1 +
.../torpreferences/content/bridgemoji/1f9ee.svg | 1 +
.../torpreferences/content/bridgemoji/1f9f2.svg | 1 +
.../torpreferences/content/bridgemoji/1f9f5.svg | 1 +
.../torpreferences/content/bridgemoji/1f9f9.svg | 1 +
.../torpreferences/content/bridgemoji/1fa73.svg | 1 +
.../torpreferences/content/bridgemoji/1fa80.svg | 1 +
.../torpreferences/content/bridgemoji/1fa81.svg | 1 +
.../torpreferences/content/bridgemoji/1fa83.svg | 1 +
.../torpreferences/content/bridgemoji/1fa90.svg | 1 +
.../torpreferences/content/bridgemoji/1fa91.svg | 1 +
.../torpreferences/content/bridgemoji/1fa95.svg | 1 +
.../torpreferences/content/bridgemoji/1fa97.svg | 1 +
.../torpreferences/content/bridgemoji/1fab6.svg | 1 +
.../torpreferences/content/bridgemoji/1fad0.svg | 1 +
.../torpreferences/content/bridgemoji/1fad2.svg | 1 +
.../torpreferences/content/bridgemoji/1fad6.svg | 1 +
.../torpreferences/content/bridgemoji/23f0.svg | 1 +
.../torpreferences/content/bridgemoji/2600.svg | 1 +
.../torpreferences/content/bridgemoji/2602.svg | 1 +
.../torpreferences/content/bridgemoji/2604.svg | 1 +
.../torpreferences/content/bridgemoji/260e.svg | 1 +
.../torpreferences/content/bridgemoji/2693.svg | 1 +
.../torpreferences/content/bridgemoji/2696.svg | 1 +
.../torpreferences/content/bridgemoji/26bd.svg | 1 +
.../torpreferences/content/bridgemoji/26f2.svg | 1 +
.../torpreferences/content/bridgemoji/26f5.svg | 1 +
.../torpreferences/content/bridgemoji/2708.svg | 1 +
.../torpreferences/content/bridgemoji/270f.svg | 1 +
.../torpreferences/content/bridgemoji/2728.svg | 1 +
.../torpreferences/content/bridgemoji/2744.svg | 1 +
.../torpreferences/content/builtinBridgeDialog.jsm | 120 +
.../content/builtinBridgeDialog.xhtml | 31 +
.../components/torpreferences/content/check.svg | 3 +
.../content/connectionCategory.inc.xhtml | 9 +
.../torpreferences/content/connectionPane.js | 1163 +++
.../torpreferences/content/connectionPane.xhtml | 194 +
.../content/connectionSettingsDialog.jsm | 397 +
.../content/connectionSettingsDialog.xhtml | 60 +
.../components/torpreferences/content/network.svg | 6 +
.../torpreferences/content/provideBridgeDialog.jsm | 72 +
.../content/provideBridgeDialog.xhtml | 21 +
.../torpreferences/content/requestBridgeDialog.jsm | 211 +
.../content/requestBridgeDialog.xhtml | 35 +
.../torpreferences/content/torLogDialog.jsm | 84 +
.../torpreferences/content/torLogDialog.xhtml | 23 +
.../torpreferences/content/torPreferences.css | 714 ++
.../torpreferences/content/torPreferencesIcon.svg | 8 +
browser/components/torpreferences/jar.mn | 22 +
browser/components/torpreferences/moz.build | 1 +
tools/torbrowser/update_bridgemoiji.py | 114 +
284 files changed, 12410 insertions(+), 68 deletions(-)
diff --git a/browser/components/moz.build b/browser/components/moz.build
index 1bc09f4093fb7..66de87290bd83 100644
--- a/browser/components/moz.build
+++ b/browser/components/moz.build
@@ -53,6 +53,7 @@ DIRS += [
"syncedtabs",
"uitour",
"urlbar",
+ "torpreferences",
"translation",
]
diff --git a/browser/components/preferences/main.inc.xhtml b/browser/components/preferences/main.inc.xhtml
index a89b89f723a80..594711e614747 100644
--- a/browser/components/preferences/main.inc.xhtml
+++ b/browser/components/preferences/main.inc.xhtml
@@ -671,58 +671,4 @@
<label id="cfrFeaturesLearnMore" class="learnMore" data-l10n-id="browsing-cfr-recommendations-learn-more" is="text-link"/>
</hbox>
</groupbox>
-
-<hbox id="networkProxyCategory"
- class="subcategory"
- hidden="true"
- data-category="paneGeneral">
- <html:h1 data-l10n-id="network-settings-title"/>
-</hbox>
-
-<!-- Network Settings-->
-<groupbox id="connectionGroup" data-category="paneGeneral" hidden="true">
- <label class="search-header" hidden="true"><html:h2 data-l10n-id="network-settings-title"/></label>
-
- <hbox align="center">
- <hbox align="center" flex="1">
- <description id="connectionSettingsDescription" control="connectionSettings"/>
- <spacer width="5"/>
- <label id="connectionSettingsLearnMore" class="learnMore" is="text-link"
- data-l10n-id="network-proxy-connection-learn-more">
- </label>
- <separator orient="vertical"/>
- </hbox>
-
- <!-- Please don't remove the wrapping hbox/vbox/box for these elements. It's used to properly compute the search tooltip position. -->
- <hbox>
- <button id="connectionSettings"
- is="highlightable-button"
- class="accessory-button"
- data-l10n-id="network-proxy-connection-settings"
- searchkeywords="doh trr"
- search-l10n-ids="
- connection-window.title,
- connection-proxy-option-no.label,
- connection-proxy-option-auto.label,
- connection-proxy-option-system.label,
- connection-proxy-option-manual.label,
- connection-proxy-http,
- connection-proxy-https,
- connection-proxy-http-port,
- connection-proxy-socks,
- connection-proxy-socks4,
- connection-proxy-socks5,
- connection-proxy-noproxy,
- connection-proxy-noproxy-desc,
- connection-proxy-https-sharing.label,
- connection-proxy-autotype.label,
- connection-proxy-reload.label,
- connection-proxy-autologin.label,
- connection-proxy-socks-remote-dns.label,
- connection-dns-over-https.label,
- connection-dns-over-https-url-custom.label,
- " />
- </hbox>
- </hbox>
-</groupbox>
</html:template>
diff --git a/browser/components/preferences/main.js b/browser/components/preferences/main.js
index 2a6ba4a3d8e42..501ba9144a314 100644
--- a/browser/components/preferences/main.js
+++ b/browser/components/preferences/main.js
@@ -368,15 +368,6 @@ var gMainPane = {
});
this.updatePerformanceSettingsBox({ duringChangeEvent: false });
this.displayUseSystemLocale();
- let connectionSettingsLink = document.getElementById(
- "connectionSettingsLearnMore"
- );
- let connectionSettingsUrl =
- Services.urlFormatter.formatURLPref("app.support.baseURL") +
- "prefs-connection-settings";
- connectionSettingsLink.setAttribute("href", connectionSettingsUrl);
- this.updateProxySettingsUI();
- initializeProxyUI(gMainPane);
if (Services.prefs.getBoolPref("intl.multilingual.enabled")) {
gMainPane.initBrowserLocale();
@@ -510,11 +501,6 @@ var gMainPane = {
"change",
gMainPane.updateHardwareAcceleration.bind(gMainPane)
);
- setEventListener(
- "connectionSettings",
- "command",
- gMainPane.showConnections
- );
setEventListener(
"browserContainersCheckbox",
"command",
diff --git a/browser/components/preferences/preferences.js b/browser/components/preferences/preferences.js
index a3656f827ffc6..5981bcd38fc83 100644
--- a/browser/components/preferences/preferences.js
+++ b/browser/components/preferences/preferences.js
@@ -13,6 +13,7 @@
/* import-globals-from findInPage.js */
/* import-globals-from ../../base/content/utilityOverlay.js */
/* import-globals-from ../../../toolkit/content/preferencesBindings.js */
+/* import-globals-from ../torpreferences/content/connectionPane.js */
"use strict";
@@ -136,6 +137,14 @@ function init_all() {
register_module("paneSync", gSyncPane);
}
register_module("paneSearchResults", gSearchResultsPane);
+ if (gConnectionPane.enabled) {
+ document.getElementById("category-connection").hidden = false;
+ register_module("paneConnection", gConnectionPane);
+ } else {
+ // Remove the pane from the DOM so it doesn't get incorrectly included in search results.
+ document.getElementById("template-paneConnection").remove();
+ }
+
gSearchResultsPane.init();
gMainPane.preInit();
diff --git a/browser/components/preferences/preferences.xhtml b/browser/components/preferences/preferences.xhtml
index 32184867ac179..9ee09581de32a 100644
--- a/browser/components/preferences/preferences.xhtml
+++ b/browser/components/preferences/preferences.xhtml
@@ -6,12 +6,14 @@
<?xml-stylesheet href="chrome://global/skin/global.css"?>
<?xml-stylesheet href="chrome://global/skin/in-content/common.css"?>
+<?xml-stylesheet href="chrome://global/skin/in-content/toggle-button.css"?>
<?xml-stylesheet href="chrome://browser/skin/preferences/preferences.css"?>
<?xml-stylesheet href="chrome://browser/content/preferences/dialogs/handlers.css"?>
<?xml-stylesheet href="chrome://browser/skin/preferences/applications.css"?>
<?xml-stylesheet href="chrome://browser/skin/preferences/search.css"?>
<?xml-stylesheet href="chrome://browser/skin/preferences/containers.css"?>
<?xml-stylesheet href="chrome://browser/skin/preferences/privacy.css"?>
+<?xml-stylesheet href="chrome://browser/content/torpreferences/torPreferences.css"?>
<!DOCTYPE html [
<!ENTITY % aboutTorDTD SYSTEM "chrome://torbutton/locale/aboutTor.dtd">
@@ -154,6 +156,9 @@
<image class="category-icon"/>
<label class="category-name" flex="1" data-l10n-id="pane-experimental-title"></label>
</richlistitem>
+
+#include ../torpreferences/content/connectionCategory.inc.xhtml
+
</richlistbox>
<spacer flex="1"/>
@@ -207,6 +212,7 @@
#include containers.inc.xhtml
#include sync.inc.xhtml
#include experimental.inc.xhtml
+#include ../torpreferences/content/connectionPane.xhtml
</vbox>
</vbox>
</vbox>
diff --git a/browser/components/torpreferences/content/bridgeQrDialog.jsm b/browser/components/torpreferences/content/bridgeQrDialog.jsm
new file mode 100644
index 0000000000000..e63347742ea50
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgeQrDialog.jsm
@@ -0,0 +1,51 @@
+"use strict";
+
+var EXPORTED_SYMBOLS = ["BridgeQrDialog"];
+
+const { QRCode } = ChromeUtils.import("resource://gre/modules/QRCode.jsm");
+
+const { TorStrings } = ChromeUtils.import("resource:///modules/TorStrings.jsm");
+
+class BridgeQrDialog {
+ constructor() {
+ this._bridgeString = "";
+ }
+
+ static get selectors() {
+ return {
+ target: "#bridgeQr-target",
+ };
+ }
+
+ _populateXUL(window, dialog) {
+ dialog.parentElement.setAttribute("title", TorStrings.settings.scanQrTitle);
+ const target = dialog.querySelector(BridgeQrDialog.selectors.target);
+ const style = window.getComputedStyle(target);
+ const width = style.width.substr(0, style.width.length - 2);
+ const height = style.height.substr(0, style.height.length - 2);
+ new QRCode(target, {
+ text: this._bridgeString,
+ width,
+ height,
+ colorDark: style.color,
+ colorLight: style.backgroundColor,
+ document: window.document,
+ });
+ }
+
+ init(window, dialog) {
+ // Defer to later until Firefox has populated the dialog with all our elements
+ window.setTimeout(() => {
+ this._populateXUL(window, dialog);
+ }, 0);
+ }
+
+ openDialog(gSubDialog, bridgeString) {
+ this._bridgeString = bridgeString;
+ gSubDialog.open(
+ "chrome://browser/content/torpreferences/bridgeQrDialog.xhtml",
+ { features: "resizable=yes" },
+ this
+ );
+ }
+}
diff --git a/browser/components/torpreferences/content/bridgeQrDialog.xhtml b/browser/components/torpreferences/content/bridgeQrDialog.xhtml
new file mode 100644
index 0000000000000..5411c963ba490
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgeQrDialog.xhtml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
+<?xml-stylesheet href="chrome://browser/skin/preferences/preferences.css"?>
+<?xml-stylesheet href="chrome://browser/content/torpreferences/torPreferences.css"?>
+
+<window type="child"
+ xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+ xmlns:html="http://www.w3.org/1999/xhtml">
+<dialog id="bridgeQr-dialog" buttons="accept">
+ <html:div>
+ <html:div id="bridgeQr">
+ <html:div id="bridgeQr-target"/>
+ <html:div id="bridgeQr-onionBox"/>
+ <html:div id="bridgeQr-onion"/>
+ </html:div>
+ </html:div>
+ <script type="application/javascript"><![CDATA[
+ "use strict";
+
+ let dialogObject = window.arguments[0];
+ let dialogElement = document.getElementById("bridgeQr-dialog");
+ dialogObject.init(window, dialogElement);
+ ]]></script>
+</dialog>
+</window>
diff --git a/browser/components/torpreferences/content/bridgemoji-annotations.json b/browser/components/torpreferences/content/bridgemoji-annotations.json
new file mode 100644
index 0000000000000..2099a47276c11
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji-annotations.json
@@ -0,0 +1,8774 @@
+{
+ "ar": {
+ "👽️": "كائن فضائي",
+ "🤖": "وجه روبوت",
+ "🧠": "دماغ",
+ "👁️": "عين",
+ "🧙": "سحرة",
+ "🧚": "جنيّة خيالية",
+ "🧜": "مخلوق بحري بجسد بشري وذيل سمكة",
+ "🐵": "وجه قرد",
+ "🦧": "إنسان الغاب",
+ "🐶": "وجه كلب",
+ "🐺": "وجه ذئب",
+ "🦊": "وجه ثعلب",
+ "🦝": "راكون",
+ "🐱": "وجه قطة",
+ "🦁": "وجه أسد",
+ "🐯": "وجه نمر",
+ "🐴": "وجه حصان",
+ "🦄": "وجه أحادي قرن",
+ "🦓": "حمار وحشي",
+ "🦌": "غزال",
+ "🐮": "وجه بقرة",
+ "🐷": "وجه خنزير",
+ "🐗": "خنزير بري",
+ "🐪": "جمل وحيد السنام",
+ "🦙": "لاما",
+ "🦒": "زرافة",
+ "🐘": "فيل",
+ "🦣": "ماموث",
+ "🦏": "وحيد القرن",
+ "🐭": "وجه فأر",
+ "🐰": "وجه أرنب",
+ "🐿️": "سنجاب",
+ "🦔": "قنفد",
+ "🦇": "خفاش",
+ "🐻": "وجه دب",
+ "🐨": "دب كوالا",
+ "🦥": "كسلان",
+ "🦦": "قندس",
+ "🦘": "كنغر",
+ "🐥": "كتكوت صغير بوجه للأمام",
+ "🐦️": "طائر",
+ "🕊️": "حمامة",
+ "🦆": "بطة",
+ "🦉": "بومة",
+ "🦤": "طائر الدودو",
+ "🪶": "ريشة",
+ "🦩": "فلامينغو",
+ "🦚": "طاووس",
+ "🦜": "ببغاء",
+ "🐊": "تمساح",
+ "🐢": "سلحفاة",
+ "🦎": "سحلية",
+ "🐍": "ثعبان",
+ "🐲": "وجه تنين",
+ "🦕": "ديناصور صوروبودا",
+ "🐳": "حوت بنافورة",
+ "🐬": "دولفين",
+ "🦭": "فقمة",
+ "🐟️": "سمكة",
+ "🐠": "سمكة استوائية",
+ "🦈": "سمكة قرش",
+ "🐙": "أخطبوط",
+ "🐚": "صدفة حلزونية",
+ "🐌": "حلزون",
+ "🦋": "فراشة",
+ "🐛": "بق",
+ "🐝": "نحلة",
+ "🐞": "دعسوقة",
+ "💐": "باقة زهور",
+ "🌹": "وردة",
+ "🌺": "كركديه",
+ "🌻": "دوار الشمس",
+ "🌷": "زهرة التوليب",
+ "🌲": "شجرة دائمة الخضرة",
+ "🌳": "شجرة زائلة الخضرة",
+ "🌴": "نخلة",
+ "🌵": "صبار",
+ "🌿": "عشب",
+ "🍁": "ورقة شجر القيقب",
+ "🍇": "عنب",
+ "🍈": "شمام",
+ "🍉": "بطيخ",
+ "🍊": "يوسفي",
+ "🍋": "ليمون",
+ "🍌": "موز",
+ "🍍": "أناناس",
+ "🥭": "مانجو",
+ "🍏": "تفاح أخضر",
+ "🍐": "كمثرى",
+ "🍑": "خوخ",
+ "🍒": "كرز",
+ "🍓": "فراولة",
+ "🫐": "توت برّي",
+ "🥝": "كيوي",
+ "🍅": "طماطم",
+ "🫒": "زيتون",
+ "🥥": "جوز الهند",
+ "🥑": "أفوكادو",
+ "🍆": "باذنجان",
+ "🥕": "جزر",
+ "🌽": "ذرة",
+ "🌶️": "فلفل حار",
+ "🥬": "خضار ورقي",
+ "🥦": "بروكولي",
+ "🧅": "بصل",
+ "🍄": "عيش الغراب",
+ "🥜": "فول سوداني",
+ "🥐": "كرواسون",
+ "🥖": "الخبز الفرنسي",
+ "🥨": "بريتزل",
+ "🥯": "خبز البيغل",
+ "🥞": "فطائر",
+ "🧇": "وافل",
+ "🍔": "همبرغر",
+ "🍕": "بيتزا",
+ "🌭": "هوت دوغ",
+ "🌮": "تاكو",
+ "🍿": "فشار",
+ "🦀": "سرطان",
+ "🦞": "كركند",
+ "🍨": "آيس كريم",
+ "🍩": "كعكة محلاة",
+ "🍪": "كعكة",
+ "🎂": "كعكة عيد ميلاد",
+ "🧁": "كعكة صغيرة",
+ "🍫": "لوح شوكولاتة",
+ "🍬": "حلوى",
+ "🍭": "مصاصة",
+ "🫖": "إبريق شاي",
+ "🧃": "علبة عصير",
+ "🧉": "متة",
+ "🧭": "بوصلة",
+ "🏔️": "جبل بقمة ثلجية",
+ "🌋": "بركان",
+ "🏕️": "تخييم",
+ "🏝️": "جزيرة صحراوية",
+ "🏡": "منزل بحديقة",
+ "⛲️": "نافورة",
+ "🎠": "حصان الدوامة",
+ "🎡": "عجلة دوارة",
+ "🎢": "قطار ملاهي",
+ "💈": "محل حلاقة",
+ "🚆": "قطار",
+ "🚋": "سيارة ترام",
+ "🚍️": "حافلة مقتربة",
+ "🚕": "تاكسي",
+ "🚗": "سيارة",
+ "🚚": "شاحنة توصيل طلبات",
+ "🚜": "جرار",
+ "🛵": "سكوتر بمحرك",
+ "🛺": "توكتوك",
+ "🛴": "سكوتر بدون محرك",
+ "🛹": "لوح التزلج",
+ "🛼": "حذاء مع عجلات",
+ "⚓️": "مرساة",
+ "⛵️": "مركب شراعي",
+ "🛶": "زورق",
+ "🚤": "قارب سريع",
+ "🚢": "سفينة",
+ "✈️": "طائرة",
+ "🚁": "هليكوبتر",
+ "🚠": "قطار جبلي",
+ "🛰️": "قمر صناعي",
+ "🚀": "صاروخ",
+ "🛸": "صحن طائر",
+ "⏰": "ساعة منبه",
+ "🌙": "هلال",
+ "🌡️": "ترمومتر",
+ "☀️": "شمس",
+ "🪐": "كوكب داخل حلقة",
+ "🌟": "نجم ساطع",
+ "🌀": "عاصفة",
+ "🌈": "ألوان الطيف",
+ "☂️": "شمسية",
+ "❄️": "كتلة ثلج",
+ "☄️": "مذنّب",
+ "🔥": "حريق",
+ "💧": "قطرة",
+ "🌊": "موجة",
+ "🎃": "هالوين",
+ "✨": "ومضات",
+ "🎈": "بالون",
+ "🎉": "فرقعة حفلة",
+ "🎏": "قصاصات ملونة",
+ "🎀": "شريط",
+ "🎁": "هدية ملفوفة",
+ "🎟️": "تذكرتا دخول",
+ "🏆️": "كأس",
+ "⚽️": "كرة قدم",
+ "🏀": "كرة سلة",
+ "🏈": "كرة قدم أمريكية",
+ "🎾": "تنس",
+ "🥏": "قرص طائر",
+ "🏓": "تنس الطاولة",
+ "🏸": "تنس الريشة",
+ "🤿": "قناع غطس",
+ "🥌": "حجرة لعبة الكرلنغ",
+ "🎯": "نشان",
+ "🪀": "يويو",
+ "🪁": "طائرة ورقية",
+ "🔮": "كرة كريستال",
+ "🎲": "زهر",
+ "🧩": "أحجية الصور المقطوعة",
+ "🎨": "لوحة ألوان الرسام",
+ "🧵": "بكرة خيط",
+ "👕": "تي شيرت",
+ "🧦": "جورب",
+ "👗": "فستان",
+ "🩳": "شورت",
+ "🎒": "حقيبة مدرسة",
+ "👟": "حذاء رياضي",
+ "👑": "تاج",
+ "🧢": "قبعة رياضية",
+ "💄": "أحمر شفاه",
+ "💍": "خاتم",
+ "💎": "جوهرة",
+ "📢": "مكبر صوت",
+ "🎶": "نوتات موسيقية",
+ "🎙️": "ميكروفون استوديو",
+ "📻️": "راديو",
+ "🎷": "ساكسفون",
+ "🪗": "أكورديون",
+ "🎸": "غيتار",
+ "🎺": "آلة نفخ",
+ "🎻": "كمان",
+ "🪕": "آلة بانجو",
+ "🥁": "طبلة",
+ "☎️": "هاتف أرضي",
+ "🔋": "بطارية",
+ "💿️": "سي دي",
+ "🧮": "معداد",
+ "🎬️": "كلاكيت",
+ "💡": "مصباح مضاء",
+ "🔦": "ضوء فلاش",
+ "🏮": "فانوس بورق أحمر",
+ "📕": "كتاب مغلق",
+ "🏷️": "ملصق",
+ "💳️": "بطاقة ائتمان",
+ "✏️": "قلم رصاص",
+ "🖌️": "فرشاة ألوان",
+ "🖍️": "قلم شمع ملون",
+ "📌": "دبوس ضغط",
+ "📎": "مشبك ورق",
+ "🔑": "مفتاح",
+ "🪃": "خذوف مرتد",
+ "🏹": "قوس وسهم",
+ "⚖️": "ميزان",
+ "🧲": "مغناطيس",
+ "🧪": "أنبوب اختبار",
+ "🧬": "الحامض النووي",
+ "🔬": "ميكروسكوب",
+ "🔭": "تليسكوب",
+ "📡": "طبق قمر صناعي",
+ "🪑": "كرسي",
+ "🧹": "مكنسة",
+ "🗿": "تمثال"
+ },
+ "ca": {
+ "👽️": "alienígena",
+ "🤖": "robot",
+ "🧠": "cervell",
+ "👁️": "ull",
+ "🧙": "mag",
+ "🧚": "fada",
+ "🧜": "persona sirena",
+ "🐵": "cara de mona",
+ "🦧": "orangutan",
+ "🐶": "cara de gos",
+ "🐺": "llop",
+ "🦊": "guineu",
+ "🦝": "os rentador",
+ "🐱": "cara de gat",
+ "🦁": "cara de lleó",
+ "🐯": "cara de tigre",
+ "🐴": "cara de cavall",
+ "🦄": "unicorn",
+ "🦓": "zebra",
+ "🦌": "cérvol",
+ "🐮": "cara de vaca",
+ "🐷": "cara de porc",
+ "🐗": "senglar",
+ "🐪": "dromedari",
+ "🦙": "llama",
+ "🦒": "girafa",
+ "🐘": "elefant",
+ "🦣": "mamut",
+ "🦏": "rinoceront",
+ "🐭": "cara de ratolí",
+ "🐰": "cara de conill",
+ "🐿️": "esquirol",
+ "🦔": "eriçó",
+ "🦇": "ratapinyada",
+ "🐻": "cara d’os",
+ "🐨": "coala",
+ "🦥": "peresós",
+ "🦦": "llúdria",
+ "🦘": "cangur",
+ "🐥": "pollet de cara",
+ "🐦️": "ocell",
+ "🕊️": "colom",
+ "🦆": "ànec",
+ "🦉": "mussol",
+ "🦤": "dodo",
+ "🪶": "ploma",
+ "🦩": "flamenc",
+ "🦚": "paó",
+ "🦜": "lloro",
+ "🐊": "cocodril",
+ "🐢": "tortuga",
+ "🦎": "llangardaix",
+ "🐍": "serp",
+ "🐲": "cara de drac",
+ "🦕": "sauròpode",
+ "🐳": "balena que treu aigua",
+ "🐬": "dofí",
+ "🦭": "foca",
+ "🐟️": "peix",
+ "🐠": "peix tropical",
+ "🦈": "tauró",
+ "🐙": "pop",
+ "🐚": "cargol de mar",
+ "🐌": "cargol",
+ "🦋": "papallona",
+ "🐛": "eruga",
+ "🐝": "abella",
+ "🐞": "marieta",
+ "💐": "ram de flors",
+ "🌹": "rosa",
+ "🌺": "hibisc",
+ "🌻": "gira-sol",
+ "🌷": "tulipa",
+ "🌲": "arbre de fulla perenne",
+ "🌳": "arbre de fulla caduca",
+ "🌴": "palmera",
+ "🌵": "cactus",
+ "🌿": "herba",
+ "🍁": "fulla d’auró",
+ "🍇": "raïm",
+ "🍈": "meló",
+ "🍉": "síndria",
+ "🍊": "mandarina",
+ "🍋": "llimona",
+ "🍌": "plàtan",
+ "🍍": "pinya",
+ "🥭": "mango",
+ "🍏": "poma verda",
+ "🍐": "pera",
+ "🍑": "préssec",
+ "🍒": "cireres",
+ "🍓": "maduixa",
+ "🫐": "nabius",
+ "🥝": "kiwi",
+ "🍅": "tomàquet",
+ "🫒": "oliva",
+ "🥥": "coco",
+ "🥑": "alvocat",
+ "🍆": "albergínia",
+ "🥕": "pastanaga",
+ "🌽": "panotxa",
+ "🌶️": "bitxo",
+ "🥬": "fulla verda",
+ "🥦": "bròcoli",
+ "🧅": "ceba",
+ "🍄": "bolet",
+ "🥜": "cacauets",
+ "🥐": "croissant",
+ "🥖": "baguet",
+ "🥨": "brètzel",
+ "🥯": "bagel",
+ "🥞": "creps americanes",
+ "🧇": "gofra",
+ "🍔": "hamburguesa",
+ "🍕": "pizza",
+ "🌭": "frankfurt",
+ "🌮": "taco",
+ "🍿": "crispetes",
+ "🦀": "cranc",
+ "🦞": "llagosta",
+ "🍨": "gelat",
+ "🍩": "dònut",
+ "🍪": "galeta",
+ "🎂": "pastís d’aniversari",
+ "🧁": "cupcake",
+ "🍫": "rajola de xocolata",
+ "🍬": "caramel",
+ "🍭": "piruleta",
+ "🫖": "tetera",
+ "🧃": "bric",
+ "🧉": "mate",
+ "🧭": "brúixola",
+ "🏔️": "muntanya amb neu al cim",
+ "🌋": "volcà",
+ "🏕️": "acampada",
+ "🏝️": "illa deserta",
+ "🏡": "casa amb jardí",
+ "⛲️": "font",
+ "🎠": "cavallets",
+ "🎡": "roda de fira",
+ "🎢": "muntanya russa",
+ "💈": "barberia",
+ "🚆": "tren",
+ "🚋": "vagó de tramvia",
+ "🚍️": "autobús que arriba",
+ "🚕": "taxi",
+ "🚗": "automòbil",
+ "🚚": "camió de repartiment",
+ "🚜": "tractor",
+ "🛵": "escúter",
+ "🛺": "bicitaxi amb motor",
+ "🛴": "patinet",
+ "🛹": "monopatí",
+ "🛼": "patí de rodes",
+ "⚓️": "àncora",
+ "⛵️": "veler",
+ "🛶": "canoa",
+ "🚤": "llanxa ràpida",
+ "🚢": "vaixell",
+ "✈️": "avió",
+ "🚁": "helicòpter",
+ "🚠": "telefèric de muntanya",
+ "🛰️": "satèl·lit",
+ "🚀": "coet",
+ "🛸": "plat volador",
+ "⏰": "despertador",
+ "🌙": "lluna creixent",
+ "🌡️": "termòmetre",
+ "☀️": "sol",
+ "🪐": "planeta amb anell",
+ "🌟": "estrella brillant",
+ "🌀": "cicló",
+ "🌈": "arc de Sant Martí",
+ "☂️": "paraigua",
+ "❄️": "floc de neu",
+ "☄️": "cometa",
+ "🔥": "foc",
+ "💧": "gota",
+ "🌊": "onada",
+ "🎃": "carabassa de Halloween",
+ "✨": "espurnes",
+ "🎈": "globus",
+ "🎉": "tub de confeti",
+ "🎏": "banderins de carpes",
+ "🎀": "llaç",
+ "🎁": "regal embolicat",
+ "🎟️": "bitllet d’entrada",
+ "🏆️": "trofeu",
+ "⚽️": "pilota de futbol",
+ "🏀": "pilota de bàsquet",
+ "🏈": "pilota de futbol americà",
+ "🎾": "tennis",
+ "🥏": "disc volador",
+ "🏓": "tennis de taula",
+ "🏸": "bàdminton",
+ "🤿": "ulleres de busseig",
+ "🥌": "pedra de cúrling",
+ "🎯": "dards",
+ "🪀": "io-io",
+ "🪁": "estel",
+ "🔮": "bola de vidre",
+ "🎲": "daus",
+ "🧩": "peces de trencaclosques",
+ "🎨": "paleta d’artista",
+ "🧵": "fil",
+ "👕": "samarreta",
+ "🧦": "mitjons",
+ "👗": "vestit",
+ "🩳": "pantalons curts",
+ "🎒": "motxilla d’escola",
+ "👟": "sabatilla de córrer",
+ "👑": "corona",
+ "🧢": "gorra",
+ "💄": "pintallavis",
+ "💍": "anell",
+ "💎": "gemma",
+ "📢": "altaveu de megafonia",
+ "🎶": "notes musicals",
+ "🎙️": "micròfon d’estudi",
+ "📻️": "ràdio",
+ "🎷": "saxofon",
+ "🪗": "acordió",
+ "🎸": "guitarra",
+ "🎺": "trompeta",
+ "🎻": "violí",
+ "🪕": "banjo",
+ "🥁": "tambor",
+ "☎️": "telèfon",
+ "🔋": "bateria",
+ "💿️": "disc òptic",
+ "🧮": "àbac",
+ "🎬️": "claqueta",
+ "💡": "bombeta",
+ "🔦": "llanterna",
+ "🏮": "fanal de paper vermell",
+ "📕": "llibre tancat",
+ "🏷️": "etiqueta",
+ "💳️": "targeta de crèdit",
+ "✏️": "llapis",
+ "🖌️": "pinzell",
+ "🖍️": "llapis de color",
+ "📌": "xinxeta",
+ "📎": "clip",
+ "🔑": "clau",
+ "🪃": "bumerang",
+ "🏹": "arc i fletxa",
+ "⚖️": "balança (aparell)",
+ "🧲": "imant",
+ "🧪": "tub d’assaig",
+ "🧬": "adn",
+ "🔬": "microscopi",
+ "🔭": "telescopi",
+ "📡": "antena de satèl·lit",
+ "🪑": "cadira",
+ "🧹": "escombra",
+ "🗿": "moai"
+ },
+ "cs": {
+ "👽️": "mimozemšťan",
+ "🤖": "obličej robota",
+ "🧠": "mozek",
+ "👁️": "oko",
+ "🧙": "mág",
+ "🧚": "víla",
+ "🧜": "mořská bytost",
+ "🐵": "hlava opice",
+ "🦧": "orangutan",
+ "🐶": "hlava psa",
+ "🐺": "hlava vlka",
+ "🦊": "hlava lišky",
+ "🦝": "mýval",
+ "🐱": "hlava kočky",
+ "🦁": "hlava lva",
+ "🐯": "hlava tygra",
+ "🐴": "hlava koně",
+ "🦄": "hlava jednorožce",
+ "🦓": "zebra",
+ "🦌": "jelen",
+ "🐮": "hlava krávy",
+ "🐷": "hlava prasete",
+ "🐗": "kanec",
+ "🐪": "velbloud jednohrbý",
+ "🦙": "lama",
+ "🦒": "žirafa",
+ "🐘": "slon",
+ "🦣": "mamut",
+ "🦏": "nosorožec",
+ "🐭": "hlava myši",
+ "🐰": "hlava králíka",
+ "🐿️": "veverka",
+ "🦔": "ježek",
+ "🦇": "netopýr",
+ "🐻": "hlava medvěda",
+ "🐨": "koala",
+ "🦥": "lenochod",
+ "🦦": "vydra",
+ "🦘": "klokan",
+ "🐥": "kuřátko zepředu",
+ "🐦️": "pták",
+ "🕊️": "holubice",
+ "🦆": "kachna",
+ "🦉": "sova",
+ "🦤": "dodo",
+ "🪶": "pírko",
+ "🦩": "plameňák",
+ "🦚": "páv",
+ "🦜": "papoušek",
+ "🐊": "krokodýl",
+ "🐢": "želva",
+ "🦎": "ještěrka",
+ "🐍": "had",
+ "🐲": "hlava draka",
+ "🦕": "brontosaurus",
+ "🐳": "velryba stříkající vodu",
+ "🐬": "delfín",
+ "🦭": "tuleň",
+ "🐟️": "ryba",
+ "🐠": "tropická ryba",
+ "🦈": "žralok",
+ "🐙": "chobotnice",
+ "🐚": "ulita",
+ "🐌": "hlemýžď",
+ "🦋": "motýl",
+ "🐛": "housenka",
+ "🐝": "včela",
+ "🐞": "beruška",
+ "💐": "kytice",
+ "🌹": "růže",
+ "🌺": "ibišek",
+ "🌻": "slunečnice",
+ "🌷": "tulipán",
+ "🌲": "jehličnatý strom",
+ "🌳": "listnatý strom",
+ "🌴": "palma",
+ "🌵": "kaktus",
+ "🌿": "bylina",
+ "🍁": "javorový list",
+ "🍇": "hrozny",
+ "🍈": "cukrový meloun",
+ "🍉": "meloun",
+ "🍊": "mandarinka",
+ "🍋": "citron",
+ "🍌": "banán",
+ "🍍": "ananas",
+ "🥭": "mango",
+ "🍏": "zelené jablko",
+ "🍐": "hruška",
+ "🍑": "broskev",
+ "🍒": "třešně",
+ "🍓": "jahoda",
+ "🫐": "borůvky",
+ "🥝": "kiwi",
+ "🍅": "rajče",
+ "🫒": "oliva",
+ "🥥": "kokos",
+ "🥑": "avokádo",
+ "🍆": "lilek",
+ "🥕": "mrkev",
+ "🌽": "kukuřičný klas",
+ "🌶️": "feferonka",
+ "🥬": "salátové listy",
+ "🥦": "brokolice",
+ "🧅": "cibule",
+ "🍄": "houba",
+ "🥜": "arašídy",
+ "🥐": "croissant",
+ "🥖": "bageta",
+ "🥨": "preclík",
+ "🥯": "bagel",
+ "🥞": "palačinky",
+ "🧇": "vafle",
+ "🍔": "hamburger",
+ "🍕": "pizza",
+ "🌭": "párek v rohlíku",
+ "🌮": "taco",
+ "🍿": "popcorn",
+ "🦀": "krab",
+ "🦞": "humr",
+ "🍨": "kopečková zmrzlina",
+ "🍩": "donut",
+ "🍪": "koláček",
+ "🎂": "narozeninový dort",
+ "🧁": "košíček",
+ "🍫": "tabulka čokolády",
+ "🍬": "bonbon",
+ "🍭": "lízátko",
+ "🫖": "čajová konvice",
+ "🧃": "nápoj v krabičce",
+ "🧉": "maté",
+ "🧭": "kompas",
+ "🏔️": "zasněžená hora",
+ "🌋": "sopka",
+ "🏕️": "tábor",
+ "🏝️": "pustý ostrov",
+ "🏡": "domek se zahradou",
+ "⛲️": "fontána",
+ "🎠": "kolotočový kůň",
+ "🎡": "ruské kolo",
+ "🎢": "horská dráha",
+ "💈": "značka holičství",
+ "🚆": "vlak",
+ "🚋": "vagón tramvaje",
+ "🚍️": "přijíždějící autobus",
+ "🚕": "taxík",
+ "🚗": "auto",
+ "🚚": "dodávka",
+ "🚜": "traktor",
+ "🛵": "skútr",
+ "🛺": "autorikša",
+ "🛴": "koloběžka",
+ "🛹": "skateboard",
+ "🛼": "kolečková brusle",
+ "⚓️": "kotva",
+ "⛵️": "plachetnice",
+ "🛶": "kánoe",
+ "🚤": "motorový člun",
+ "🚢": "loď",
+ "✈️": "letadlo",
+ "🚁": "vrtulník",
+ "🚠": "horská lanovka",
+ "🛰️": "satelit",
+ "🚀": "raketa",
+ "🛸": "létající talíř",
+ "⏰": "budík",
+ "🌙": "srpek měsíce",
+ "🌡️": "teploměr",
+ "☀️": "slunce",
+ "🪐": "planeta s prstencem",
+ "🌟": "zářící hvězda",
+ "🌀": "cyklóna",
+ "🌈": "duha",
+ "☂️": "deštník",
+ "❄️": "sněhová vločka",
+ "☄️": "kometa",
+ "🔥": "oheň",
+ "💧": "kapka",
+ "🌊": "vodní vlna",
+ "🎃": "dýňová lucerna",
+ "✨": "jiskry",
+ "🎈": "balónek",
+ "🎉": "vystřelovací konfety",
+ "🎏": "koinobori",
+ "🎀": "mašle",
+ "🎁": "zabalený dárek",
+ "🎟️": "vstupenky",
+ "🏆️": "trofejní pohár",
+ "⚽️": "fotbalový míč",
+ "🏀": "basketbalový míč",
+ "🏈": "míč na americký fotbal",
+ "🎾": "tenis",
+ "🥏": "frisbee",
+ "🏓": "stolní tenis",
+ "🏸": "badminton",
+ "🤿": "potápěčská maska",
+ "🥌": "curlingový kámen",
+ "🎯": "přesný zásah do terče",
+ "🪀": "jojo",
+ "🪁": "papírový drak",
+ "🔮": "křišťálová koule",
+ "🎲": "hrací kostka",
+ "🧩": "puzzle",
+ "🎨": "malířská paleta",
+ "🧵": "cívka nití",
+ "👕": "tričko",
+ "🧦": "ponožky",
+ "👗": "šaty",
+ "🩳": "šortky",
+ "🎒": "školní batoh",
+ "👟": "běžecká bota",
+ "👑": "koruna",
+ "🧢": "kšiltovka",
+ "💄": "rtěnka",
+ "💍": "prsten",
+ "💎": "drahokam",
+ "📢": "tlampač",
+ "🎶": "noty",
+ "🎙️": "studiový mikrofon",
+ "📻️": "rádio",
+ "🎷": "saxofon",
+ "🪗": "akordeon",
+ "🎸": "kytara",
+ "🎺": "trubka",
+ "🎻": "housle",
+ "🪕": "banjo",
+ "🥁": "buben",
+ "☎️": "telefon",
+ "🔋": "baterie",
+ "💿️": "optický disk",
+ "🧮": "počitadlo",
+ "🎬️": "filmová klapka",
+ "💡": "žárovka",
+ "🔦": "baterka",
+ "🏮": "červený lampion",
+ "📕": "zavřená kniha",
+ "🏷️": "visačka",
+ "💳️": "platební karta",
+ "✏️": "tužka",
+ "🖌️": "štětec",
+ "🖍️": "pastelka",
+ "📌": "připínáček",
+ "📎": "kancelářská sponka",
+ "🔑": "klíč",
+ "🪃": "bumerang",
+ "🏹": "luk a šíp",
+ "⚖️": "miskové váhy",
+ "🧲": "magnet",
+ "🧪": "zkumavka",
+ "🧬": "DNA",
+ "🔬": "mikroskop",
+ "🔭": "teleskop",
+ "📡": "satelitní anténa",
+ "🪑": "židle",
+ "🧹": "koště",
+ "🗿": "socha moai"
+ },
+ "da": {
+ "👽️": "rumvæsen",
+ "🤖": "robot",
+ "🧠": "hjerne",
+ "👁️": "øje",
+ "🧙": "magiker",
+ "🧚": "fe",
+ "🧜": "havvæsen",
+ "🐵": "abehoved",
+ "🦧": "orangutang",
+ "🐶": "hundehoved",
+ "🐺": "ulvehoved",
+ "🦊": "rævehoved",
+ "🦝": "vaskebjørn",
+ "🐱": "kattehoved",
+ "🦁": "løvehoved",
+ "🐯": "tigerhoved",
+ "🐴": "hestehoved",
+ "🦄": "enhjørningehoved",
+ "🦓": "zebra",
+ "🦌": "hjort",
+ "🐮": "kohoved",
+ "🐷": "grisehoved",
+ "🐗": "vildsvin",
+ "🐪": "dromedar",
+ "🦙": "lama",
+ "🦒": "giraf",
+ "🐘": "elefant",
+ "🦣": "mammut",
+ "🦏": "næsehorn",
+ "🐭": "musehoved",
+ "🐰": "kaninhoved",
+ "🐿️": "jordegern",
+ "🦔": "pindsvin",
+ "🦇": "flagermus",
+ "🐻": "bjørnehoved",
+ "🐨": "koala",
+ "🦥": "dovendyr",
+ "🦦": "odder",
+ "🦘": "kænguru",
+ "🐥": "kylling forfra",
+ "🐦️": "fugl",
+ "🕊️": "due",
+ "🦆": "and",
+ "🦉": "ugle",
+ "🦤": "dronte",
+ "🪶": "fjer",
+ "🦩": "flamingo",
+ "🦚": "påfugl",
+ "🦜": "papegøje",
+ "🐊": "krokodille",
+ "🐢": "skildpadde",
+ "🦎": "firben",
+ "🐍": "slange",
+ "🐲": "dragehoved",
+ "🦕": "sauropod",
+ "🐳": "hval med vandsprøjt",
+ "🐬": "delfin",
+ "🦭": "sæl",
+ "🐟️": "fisk",
+ "🐠": "tropisk fisk",
+ "🦈": "haj",
+ "🐙": "blæksprutte",
+ "🐚": "konkylie",
+ "🐌": "snegl",
+ "🦋": "sommerfugl",
+ "🐛": "larve",
+ "🐝": "honningbi",
+ "🐞": "mariehøne",
+ "💐": "blomsterbuket",
+ "🌹": "rose",
+ "🌺": "hibiscus",
+ "🌻": "solsikke",
+ "🌷": "tulipan",
+ "🌲": "nåletræ",
+ "🌳": "løvtræ",
+ "🌴": "palme",
+ "🌵": "kaktus",
+ "🌿": "urt",
+ "🍁": "ahornblad",
+ "🍇": "vindruer",
+ "🍈": "melon",
+ "🍉": "vandmelon",
+ "🍊": "appelsin",
+ "🍋": "citron",
+ "🍌": "banan",
+ "🍍": "ananas",
+ "🥭": "mango",
+ "🍏": "grønt æble",
+ "🍐": "pære",
+ "🍑": "fersken",
+ "🍒": "kirsebær",
+ "🍓": "jordbær",
+ "🫐": "blåbær",
+ "🥝": "kiwifrugt",
+ "🍅": "tomat",
+ "🫒": "oliven",
+ "🥥": "kokosnød",
+ "🥑": "avokado",
+ "🍆": "aubergine",
+ "🥕": "gulerod",
+ "🌽": "majs",
+ "🌶️": "chili",
+ "🥬": "bladgrønt",
+ "🥦": "broccoli",
+ "🧅": "løg",
+ "🍄": "svamp",
+ "🥜": "jordnødder",
+ "🥐": "croissant",
+ "🥖": "flute",
+ "🥨": "kringle",
+ "🥯": "bagel",
+ "🥞": "pandekager",
+ "🧇": "vaffel",
+ "🍔": "hamburger",
+ "🍕": "pizza",
+ "🌭": "hotdog",
+ "🌮": "taco",
+ "🍿": "popcorn",
+ "🦀": "krabbe",
+ "🦞": "hummer",
+ "🍨": "is",
+ "🍩": "donut",
+ "🍪": "småkage",
+ "🎂": "fødselsdagskage",
+ "🧁": "cupcake",
+ "🍫": "chokolade",
+ "🍬": "bolsje",
+ "🍭": "slikkepind",
+ "🫖": "tekande",
+ "🧃": "brik",
+ "🧉": "mate",
+ "🧭": "kompas",
+ "🏔️": "sneklædt bjerg",
+ "🌋": "vulkan",
+ "🏕️": "camping",
+ "🏝️": "øde ø",
+ "🏡": "hus med have",
+ "⛲️": "springvand",
+ "🎠": "karrusel",
+ "🎡": "pariserhjul",
+ "🎢": "rutsjebane",
+ "💈": "barber",
+ "🚆": "tog",
+ "🚋": "vogn",
+ "🚍️": "bus forfra",
+ "🚕": "taxa",
+ "🚗": "bil",
+ "🚚": "lastbil",
+ "🚜": "traktor",
+ "🛵": "scooter",
+ "🛺": "motor-rickshaw",
+ "🛴": "løbehjul",
+ "🛹": "skateboard",
+ "🛼": "rulleskøjte",
+ "⚓️": "anker",
+ "⛵️": "sejlbåd",
+ "🛶": "kano",
+ "🚤": "speedbåd",
+ "🚢": "skib",
+ "✈️": "fly",
+ "🚁": "helikopter",
+ "🚠": "kabelbane",
+ "🛰️": "satellit",
+ "🚀": "raket",
+ "🛸": "ufo",
+ "⏰": "vækkeur",
+ "🌙": "halvmåne",
+ "🌡️": "termometer",
+ "☀️": "sol",
+ "🪐": "planet med ringe",
+ "🌟": "blinkende stjerne",
+ "🌀": "cyklon",
+ "🌈": "regnbue",
+ "☂️": "paraply",
+ "❄️": "snefnug",
+ "☄️": "komet",
+ "🔥": "ild",
+ "💧": "dråbe",
+ "🌊": "bølge",
+ "🎃": "græskarmand",
+ "✨": "stjerner",
+ "🎈": "ballon",
+ "🎉": "bordbombe",
+ "🎏": "karpevimpel",
+ "🎀": "sløjfe",
+ "🎁": "gave",
+ "🎟️": "adgangsbillet",
+ "🏆️": "pokal",
+ "⚽️": "fodbold",
+ "🏀": "basketball",
+ "🏈": "amerikansk fodbold",
+ "🎾": "tennis",
+ "🥏": "frisbee",
+ "🏓": "bordtennis",
+ "🏸": "badminton",
+ "🤿": "dykkermaske",
+ "🥌": "curlingsten",
+ "🎯": "pletskud",
+ "🪀": "yoyo",
+ "🪁": "legetøjsdrage",
+ "🔮": "krystalkugle",
+ "🎲": "terning",
+ "🧩": "brik til puslespil",
+ "🎨": "palet",
+ "🧵": "tråd",
+ "👕": "T-shirt",
+ "🧦": "sokker",
+ "👗": "kjole",
+ "🩳": "shorts",
+ "🎒": "rygsæk",
+ "👟": "løbesko",
+ "👑": "krone",
+ "🧢": "kasket",
+ "💄": "læbestift",
+ "💍": "ring",
+ "💎": "ædelsten",
+ "📢": "elektrisk megafon",
+ "🎶": "noder",
+ "🎙️": "studiemikrofon",
+ "📻️": "radio",
+ "🎷": "saxofon",
+ "🪗": "akkordeon",
+ "🎸": "guitar",
+ "🎺": "trompet",
+ "🎻": "violin",
+ "🪕": "banjo",
+ "🥁": "tromme",
+ "☎️": "telefon",
+ "🔋": "batteri",
+ "💿️": "cd",
+ "🧮": "kugleramme",
+ "🎬️": "klaptræ",
+ "💡": "elpære",
+ "🔦": "lommelygte",
+ "🏮": "papirlanterne",
+ "📕": "lukket bog",
+ "🏷️": "mærkat",
+ "💳️": "kreditkort",
+ "✏️": "blyant",
+ "🖌️": "malerpensel",
+ "🖍️": "farvekridt",
+ "📌": "tegnestift",
+ "📎": "papirclips",
+ "🔑": "nøgle",
+ "🪃": "boomerang",
+ "🏹": "bue og pil",
+ "⚖️": "vægt",
+ "🧲": "magnet",
+ "🧪": "reagensglas",
+ "🧬": "dna",
+ "🔬": "mikroskop",
+ "🔭": "teleskop",
+ "📡": "parabolantenne",
+ "🪑": "stol",
+ "🧹": "kost",
+ "🗿": "statue"
+ },
+ "de": {
+ "👽️": "Außerirdischer",
+ "🤖": "Roboter",
+ "🧠": "Gehirn",
+ "👁️": "Auge",
+ "🧙": "Magier(in)",
+ "🧚": "Märchenfee",
+ "🧜": "Wassermensch",
+ "🐵": "Affengesicht",
+ "🦧": "Orang-Utan",
+ "🐶": "Hundegesicht",
+ "🐺": "Wolf",
+ "🦊": "Fuchs",
+ "🦝": "Waschbär",
+ "🐱": "Katzengesicht",
+ "🦁": "Löwe",
+ "🐯": "Tigergesicht",
+ "🐴": "Pferdegesicht",
+ "🦄": "Einhorn",
+ "🦓": "Zebra",
+ "🦌": "Hirsch",
+ "🐮": "Kuhgesicht",
+ "🐷": "Schweinegesicht",
+ "🐗": "Wildschwein",
+ "🐪": "Dromedar",
+ "🦙": "Lama",
+ "🦒": "Giraffe",
+ "🐘": "Elefant",
+ "🦣": "Mammut",
+ "🦏": "Nashorn",
+ "🐭": "Mäusegesicht",
+ "🐰": "Hasengesicht",
+ "🐿️": "Streifenhörnchen",
+ "🦔": "Igel",
+ "🦇": "Fledermaus",
+ "🐻": "Bär",
+ "🐨": "Koala",
+ "🦥": "Faultier",
+ "🦦": "Otter",
+ "🦘": "Känguru",
+ "🐥": "Küken von vorne",
+ "🐦️": "Vogel",
+ "🕊️": "Taube",
+ "🦆": "Ente",
+ "🦉": "Eule",
+ "🦤": "Dodo",
+ "🪶": "Feder",
+ "🦩": "Flamingo",
+ "🦚": "Pfau",
+ "🦜": "Papagei",
+ "🐊": "Krokodil",
+ "🐢": "Schildkröte",
+ "🦎": "Eidechse",
+ "🐍": "Schlange",
+ "🐲": "Drachengesicht",
+ "🦕": "Sauropode",
+ "🐳": "blasender Wal",
+ "🐬": "Delfin",
+ "🦭": "Seehund",
+ "🐟️": "Fisch",
+ "🐠": "Tropenfisch",
+ "🦈": "Hai",
+ "🐙": "Oktopus",
+ "🐚": "Schneckenhaus",
+ "🐌": "Schnecke",
+ "🦋": "Schmetterling",
+ "🐛": "Raupe",
+ "🐝": "Biene",
+ "🐞": "Marienkäfer",
+ "💐": "Blumenstrauß",
+ "🌹": "Rose",
+ "🌺": "Hibiskus",
+ "🌻": "Sonnenblume",
+ "🌷": "Tulpe",
+ "🌲": "Nadelbaum",
+ "🌳": "Laubbaum",
+ "🌴": "Palme",
+ "🌵": "Kaktus",
+ "🌿": "Kräuter",
+ "🍁": "Ahornblatt",
+ "🍇": "Trauben",
+ "🍈": "Honigmelone",
+ "🍉": "Wassermelone",
+ "🍊": "Mandarine",
+ "🍋": "Zitrone",
+ "🍌": "Banane",
+ "🍍": "Ananas",
+ "🥭": "Mango",
+ "🍏": "grüner Apfel",
+ "🍐": "Birne",
+ "🍑": "Pfirsich",
+ "🍒": "Kirschen",
+ "🍓": "Erdbeere",
+ "🫐": "Blaubeeren",
+ "🥝": "Kiwi",
+ "🍅": "Tomate",
+ "🫒": "Olive",
+ "🥥": "Kokosnuss",
+ "🥑": "Avocado",
+ "🍆": "Aubergine",
+ "🥕": "Karotte",
+ "🌽": "Maiskolben",
+ "🌶️": "Peperoni",
+ "🥬": "Blattgemüse",
+ "🥦": "Brokkoli",
+ "🧅": "Zwiebel",
+ "🍄": "Fliegenpilz",
+ "🥜": "Erdnuss",
+ "🥐": "Croissant",
+ "🥖": "Baguette",
+ "🥨": "Brezel",
+ "🥯": "Bagel",
+ "🥞": "Pfannkuchen",
+ "🧇": "Waffel",
+ "🍔": "Hamburger",
+ "🍕": "Pizza",
+ "🌭": "Hotdog",
+ "🌮": "Taco",
+ "🍿": "Popcorn",
+ "🦀": "Krebs",
+ "🦞": "Hummer",
+ "🍨": "Eiscreme",
+ "🍩": "Donut",
+ "🍪": "Keks",
+ "🎂": "Geburtstagskuchen",
+ "🧁": "Cupcake",
+ "🍫": "Schokoladentafel",
+ "🍬": "Bonbon",
+ "🍭": "Lutscher",
+ "🫖": "Teekanne",
+ "🧃": "Trinkpäckchen",
+ "🧉": "Mate-Tee",
+ "🧭": "Kompass",
+ "🏔️": "schneebedeckter Berg",
+ "🌋": "Vulkan",
+ "🏕️": "Camping",
+ "🏝️": "einsame Insel",
+ "🏡": "Haus mit Garten",
+ "⛲️": "Springbrunnen",
+ "🎠": "Karussellpferd",
+ "🎡": "Riesenrad",
+ "🎢": "Achterbahn",
+ "💈": "Barbershop-Säule",
+ "🚆": "Zug",
+ "🚋": "Straßenbahnwagen",
+ "🚍️": "Bus von vorne",
+ "🚕": "Taxi",
+ "🚗": "Auto",
+ "🚚": "Lieferwagen",
+ "🚜": "Traktor",
+ "🛵": "Motorroller",
+ "🛺": "Autorikscha",
+ "🛴": "Tretroller",
+ "🛹": "Skateboard",
+ "🛼": "Rollschuh",
+ "⚓️": "Anker",
+ "⛵️": "Segelboot",
+ "🛶": "Kanu",
+ "🚤": "Schnellboot",
+ "🚢": "Schiff",
+ "✈️": "Flugzeug",
+ "🚁": "Hubschrauber",
+ "🚠": "Bergschwebebahn",
+ "🛰️": "Satellit",
+ "🚀": "Rakete",
+ "🛸": "fliegende Untertasse",
+ "⏰": "Wecker",
+ "🌙": "Mondsichel",
+ "🌡️": "Thermometer",
+ "☀️": "Sonne",
+ "🪐": "Ringplanet",
+ "🌟": "funkelnder Stern",
+ "🌀": "Wirbel",
+ "🌈": "Regenbogen",
+ "☂️": "Regenschirm",
+ "❄️": "Schneeflocke",
+ "☄️": "Komet",
+ "🔥": "Feuer",
+ "💧": "Tropfen",
+ "🌊": "Welle",
+ "🎃": "Halloweenkürbis",
+ "✨": "funkelnde Sterne",
+ "🎈": "Luftballon",
+ "🎉": "Konfettibombe",
+ "🎏": "traditionelle japanische Windsäcke",
+ "🎀": "pinke Schleife",
+ "🎁": "Geschenk",
+ "🎟️": "Eintrittskarten",
+ "🏆️": "Pokal",
+ "⚽️": "Fußball",
+ "🏀": "Basketball",
+ "🏈": "Football",
+ "🎾": "Tennisball",
+ "🥏": "Frisbee",
+ "🏓": "Tischtennis",
+ "🏸": "Badminton",
+ "🤿": "Tauchmaske",
+ "🥌": "Curlingstein",
+ "🎯": "Darts",
+ "🪀": "Jo-Jo",
+ "🪁": "Drachen",
+ "🔮": "Kristallkugel",
+ "🎲": "Spielwürfel",
+ "🧩": "Puzzleteil",
+ "🎨": "Mischpalette",
+ "🧵": "Faden",
+ "👕": "T-Shirt",
+ "🧦": "Socken",
+ "👗": "Kleid",
+ "🩳": "Shorts",
+ "🎒": "Schulranzen",
+ "👟": "Sportschuh",
+ "👑": "Krone",
+ "🧢": "Baseballmütze",
+ "💄": "Lippenstift",
+ "💍": "Ring",
+ "💎": "Edelstein",
+ "📢": "Lautsprecher",
+ "🎶": "Musiknoten",
+ "🎙️": "Studiomikrofon",
+ "📻️": "Radio",
+ "🎷": "Saxofon",
+ "🪗": "Akkordeon",
+ "🎸": "Gitarre",
+ "🎺": "Trompete",
+ "🎻": "Geige",
+ "🪕": "Banjo",
+ "🥁": "Trommel",
+ "☎️": "Telefon",
+ "🔋": "Batterie",
+ "💿️": "CD",
+ "🧮": "Abakus",
+ "🎬️": "Filmklappe",
+ "💡": "Glühbirne",
+ "🔦": "Taschenlampe",
+ "🏮": "rote Papierlaterne",
+ "📕": "geschlossenes Buch",
+ "🏷️": "Etikett",
+ "💳️": "Kreditkarte",
+ "✏️": "Bleistift",
+ "🖌️": "Pinsel",
+ "🖍️": "Wachsmalstift",
+ "📌": "Reißzwecke",
+ "📎": "Büroklammer",
+ "🔑": "Schlüssel",
+ "🪃": "Bumerang",
+ "🏹": "Pfeil und Bogen",
+ "⚖️": "Waage",
+ "🧲": "Magnet",
+ "🧪": "Reagenzglas",
+ "🧬": "DNA",
+ "🔬": "Mikroskop",
+ "🔭": "Teleskop",
+ "📡": "Satellitenschüssel",
+ "🪑": "Stuhl",
+ "🧹": "Besen",
+ "🗿": "Statue"
+ },
+ "el": {
+ "👽️": "εξωγήινος",
+ "🤖": "ρομπότ",
+ "🧠": "μυαλό",
+ "👁️": "μάτι",
+ "🧙": "μάγος",
+ "🧚": "νεράιδα",
+ "🧜": "γοργόνα",
+ "🐵": "πρόσωπο μαϊμούς",
+ "🦧": "ουρακοτάγκος",
+ "🐶": "πρόσωπο σκύλου",
+ "🐺": "λύκος",
+ "🦊": "αλεπού",
+ "🦝": "ρακούν",
+ "🐱": "πρόσωπο γάτας",
+ "🦁": "λιοντάρι",
+ "🐯": "πρόσωπο τίγρης",
+ "🐴": "πρόσωπο αλόγου",
+ "🦄": "μονόκερος",
+ "🦓": "ζέβρα",
+ "🦌": "ελάφι",
+ "🐮": "πρόσωπο αγελάδας",
+ "🐷": "πρόσωπο γουρουνιού",
+ "🐗": "αγριογούρουνο",
+ "🐪": "καμήλα",
+ "🦙": "λάμα",
+ "🦒": "καμηλοπάρδαλη",
+ "🐘": "ελέφαντας",
+ "🦣": "μαμούθ",
+ "🦏": "ρινόκερος",
+ "🐭": "πρόσωπο ποντικιού",
+ "🐰": "πρόσωπο κουνελιού",
+ "🐿️": "σκιουράκι",
+ "🦔": "σκαντζόχοιρος",
+ "🦇": "νυχτερίδα",
+ "🐻": "αρκούδα",
+ "🐨": "κοάλα",
+ "🦥": "βραδύπους",
+ "🦦": "βίδρα",
+ "🦘": "καγκουρό",
+ "🐥": "κοτοπουλάκι που κοιτά μπροστά",
+ "🐦️": "πουλί",
+ "🕊️": "περιστέρι",
+ "🦆": "πάπια",
+ "🦉": "κουκουβάγια",
+ "🦤": "ντόντο",
+ "🪶": "φτερό",
+ "🦩": "φλαμίνγκο",
+ "🦚": "παγώνι",
+ "🦜": "παπαγάλος",
+ "🐊": "κροκόδειλος",
+ "🐢": "χελώνα",
+ "🦎": "σαύρα",
+ "🐍": "φίδι",
+ "🐲": "πρόσωπο δράκου",
+ "🦕": "σαυρόποδο",
+ "🐳": "φάλαινα που πετά νερό",
+ "🐬": "δελφίνι",
+ "🦭": "φώκια",
+ "🐟️": "ψάρι",
+ "🐠": "τροπικό ψάρι",
+ "🦈": "καρχαρίας",
+ "🐙": "χταπόδι",
+ "🐚": "σπειροειδές κοχύλι",
+ "🐌": "σαλιγκάρι",
+ "🦋": "πεταλούδα",
+ "🐛": "κάμπια",
+ "🐝": "μέλισσα",
+ "🐞": "πασχαλίτσα",
+ "💐": "μπουκέτο λουλούδια",
+ "🌹": "τριαντάφυλλο",
+ "🌺": "ιβίσκος",
+ "🌻": "ηλιοτρόπιο",
+ "🌷": "τουλίπα",
+ "🌲": "αειθαλές δέντρο",
+ "🌳": "φυλλοβόλο δέντρο",
+ "🌴": "φοίνικας",
+ "🌵": "κάκτος",
+ "🌿": "βότανο",
+ "🍁": "φύλλο σφενδάμου",
+ "🍇": "σταφύλι",
+ "🍈": "πεπόνι",
+ "🍉": "καρπούζι",
+ "🍊": "μανταρίνι",
+ "🍋": "λεμόνι",
+ "🍌": "μπανάνα",
+ "🍍": "ανανάς",
+ "🥭": "μάνγκο",
+ "🍏": "πράσινο μήλο",
+ "🍐": "αχλάδι",
+ "🍑": "ροδάκινο",
+ "🍒": "κεράσια",
+ "🍓": "φράουλα",
+ "🫐": "μύρτιλο",
+ "🥝": "ακτινίδιο",
+ "🍅": "ντομάτα",
+ "🫒": "ελιά",
+ "🥥": "καρύδα",
+ "🥑": "αβοκάντο",
+ "🍆": "μελιτζάνα",
+ "🥕": "καρότο",
+ "🌽": "καλαμπόκι",
+ "🌶️": "καυτερή πιπεριά",
+ "🥬": "πράσινο φυλλώδες",
+ "🥦": "μπρόκολο",
+ "🧅": "κρεμμύδι",
+ "🍄": "μανιτάρι",
+ "🥜": "φιστίκια",
+ "🥐": "κρουασάν",
+ "🥖": "μπαγκέτα",
+ "🥨": "πρέτσελ",
+ "🥯": "μπέιγκελ",
+ "🥞": "τηγανίτες",
+ "🧇": "βάφλα",
+ "🍔": "χάμπουργκερ",
+ "🍕": "πίτσα",
+ "🌭": "χοτ ντογκ",
+ "🌮": "τάκο",
+ "🍿": "ποπ-κορν",
+ "🦀": "κάβουρας",
+ "🦞": "αστακός",
+ "🍨": "παγωτό",
+ "🍩": "ντόνατ",
+ "🍪": "μπισκότο",
+ "🎂": "τούρτα γενεθλίων",
+ "🧁": "κεκάκι",
+ "🍫": "σοκολάτα",
+ "🍬": "καραμέλα",
+ "🍭": "γλειφιτζούρι",
+ "🫖": "τσαγιέρα",
+ "🧃": "κουτί ροφήματος",
+ "🧉": "μάτε",
+ "🧭": "πυξίδα",
+ "🏔️": "χιονισμένο βουνό",
+ "🌋": "ηφαίστειο",
+ "🏕️": "κατασκήνωση",
+ "🏝️": "ερημονήσι",
+ "🏡": "σπίτι με κήπο",
+ "⛲️": "σιντριβάνι",
+ "🎠": "αλογάκι καρουσέλ",
+ "🎡": "ρόδα λούνα-παρκ",
+ "🎢": "τρενάκι",
+ "💈": "σύμβολο κουρείου",
+ "🚆": "τρένο",
+ "🚋": "βαγόνι τραμ",
+ "🚍️": "διερχόμενο λεωφορείο",
+ "🚕": "ταξί",
+ "🚗": "αυτοκίνητο",
+ "🚚": "φορτηγό",
+ "🚜": "τρακτέρ",
+ "🛵": "σκουτεράκι",
+ "🛺": "ποδήλατο-ταξί",
+ "🛴": "πατίνι",
+ "🛹": "σκέιτμπορντ",
+ "🛼": "πατίνια",
+ "⚓️": "άγκυρα",
+ "⛵️": "ιστιοφόρο",
+ "🛶": "κανό",
+ "🚤": "ταχύπλοο",
+ "🚢": "πλοίο",
+ "✈️": "αεροπλάνο",
+ "🚁": "ελικόπτερο",
+ "🚠": "τελεφερίκ",
+ "🛰️": "δορυφόρος",
+ "🚀": "πύραυλος",
+ "🛸": "ιπτάμενος δίσκος",
+ "⏰": "ξυπνητήρι",
+ "🌙": "ημισέληνος",
+ "🌡️": "θερμόμετρο",
+ "☀️": "ήλιος",
+ "🪐": "πλανήτης με δακτύλιο",
+ "🌟": "λαμπερό αστέρι",
+ "🌀": "κυκλώνας",
+ "🌈": "ουράνιο τόξο",
+ "☂️": "ομπρέλα",
+ "❄️": "χιονονιφάδα",
+ "☄️": "κομήτης",
+ "🔥": "φωτιά",
+ "💧": "σταγόνα",
+ "🌊": "θαλάσσιο κύμα",
+ "🎃": "φανάρι από κολοκύθα",
+ "✨": "αστράκια",
+ "🎈": "μπαλόνι",
+ "🎉": "χαρτοπόλεμος",
+ "🎏": "διακοσμητικοί κυπρίνοι",
+ "🎀": "κορδέλα",
+ "🎁": "τυλιγμένο δώρο",
+ "🎟️": "κάρτες εισόδου",
+ "🏆️": "τρόπαιο",
+ "⚽️": "μπάλα ποδοσφαίρου",
+ "🏀": "μπάλα μπάσκετ",
+ "🏈": "μπάλα αμερικάνικου ποδοσφαίρου",
+ "🎾": "μπάλα τένις",
+ "🥏": "φρίσμπι",
+ "🏓": "πινγκ πονγκ",
+ "🏸": "μπάντμιντον",
+ "🤿": "μάσκα κατάδυσης",
+ "🥌": "πέτρα κέρλινγκ",
+ "🎯": "βελάκια",
+ "🪀": "γιογιό",
+ "🪁": "χαρταετός",
+ "🔮": "κρυστάλλινη σφαίρα",
+ "🎲": "ζάρι",
+ "🧩": "κομμάτι παζλ",
+ "🎨": "παλέτα ζωγράφου",
+ "🧵": "κλωστή",
+ "👕": "μπλουζάκι",
+ "🧦": "κάλτσες",
+ "👗": "φόρεμα",
+ "🩳": "σορτσάκι",
+ "🎒": "σχολική σάκα",
+ "👟": "αθλητικό παπούτσι",
+ "👑": "στέμμα",
+ "🧢": "καπελάκι",
+ "💄": "κραγιόν",
+ "💍": "δαχτυλίδι",
+ "💎": "διαμάντι",
+ "📢": "ντουντούκα",
+ "🎶": "νότες μουσικής",
+ "🎙️": "μικρόφωνο στούντιο",
+ "📻️": "ραδιόφωνο",
+ "🎷": "σαξόφωνο",
+ "🪗": "ακορντεόν",
+ "🎸": "κιθάρα",
+ "🎺": "τρομπέτα",
+ "🎻": "βιολί",
+ "🪕": "μπάντζο",
+ "🥁": "τύμπανο",
+ "☎️": "τηλέφωνο",
+ "🔋": "μπαταρία",
+ "💿️": "οπτικός δίσκος",
+ "🧮": "άβακας",
+ "🎬️": "κλακέτα φιλμ",
+ "💡": "λαμπτήρας",
+ "🔦": "φακός",
+ "🏮": "κόκκινο χάρτινο φανάρι",
+ "📕": "κλειστό βιβλίο",
+ "🏷️": "ετικέτα",
+ "💳️": "πιστωτική κάρτα",
+ "✏️": "μολύβι",
+ "🖌️": "πινέλο",
+ "🖍️": "κηρομπογιά",
+ "📌": "πινέζα",
+ "📎": "συνδετήρας",
+ "🔑": "κλειδί",
+ "🪃": "μπούμερανγκ",
+ "🏹": "τόξο και βέλος",
+ "⚖️": "ζυγαριά",
+ "🧲": "μαγνήτης",
+ "🧪": "δοκιμαστικός σωλήνας",
+ "🧬": "dna",
+ "🔬": "μικροσκόπιο",
+ "🔭": "τηλεσκόπιο",
+ "📡": "δορυφορική κεραία",
+ "🪑": "καρέκλα",
+ "🧹": "σκούπα",
+ "🗿": "μοάι"
+ },
+ "en": {
+ "👽️": "alien",
+ "🤖": "robot",
+ "🧠": "brain",
+ "👁️": "eye",
+ "🧙": "mage",
+ "🧚": "fairy",
+ "🧜": "merperson",
+ "🐵": "monkey face",
+ "🦧": "orangutan",
+ "🐶": "dog face",
+ "🐺": "wolf",
+ "🦊": "fox",
+ "🦝": "raccoon",
+ "🐱": "cat face",
+ "🦁": "lion",
+ "🐯": "tiger face",
+ "🐴": "horse face",
+ "🦄": "unicorn",
+ "🦓": "zebra",
+ "🦌": "deer",
+ "🐮": "cow face",
+ "🐷": "pig face",
+ "🐗": "boar",
+ "🐪": "camel",
+ "🦙": "llama",
+ "🦒": "giraffe",
+ "🐘": "elephant",
+ "🦣": "mammoth",
+ "🦏": "rhinoceros",
+ "🐭": "mouse face",
+ "🐰": "rabbit face",
+ "🐿️": "chipmunk",
+ "🦔": "hedgehog",
+ "🦇": "bat",
+ "🐻": "bear",
+ "🐨": "koala",
+ "🦥": "sloth",
+ "🦦": "otter",
+ "🦘": "kangaroo",
+ "🐥": "front-facing baby chick",
+ "🐦️": "bird",
+ "🕊️": "dove",
+ "🦆": "duck",
+ "🦉": "owl",
+ "🦤": "dodo",
+ "🪶": "feather",
+ "🦩": "flamingo",
+ "🦚": "peacock",
+ "🦜": "parrot",
+ "🐊": "crocodile",
+ "🐢": "turtle",
+ "🦎": "lizard",
+ "🐍": "snake",
+ "🐲": "dragon face",
+ "🦕": "sauropod",
+ "🐳": "spouting whale",
+ "🐬": "dolphin",
+ "🦭": "seal",
+ "🐟️": "fish",
+ "🐠": "tropical fish",
+ "🦈": "shark",
+ "🐙": "octopus",
+ "🐚": "spiral shell",
+ "🐌": "snail",
+ "🦋": "butterfly",
+ "🐛": "bug",
+ "🐝": "honeybee",
+ "🐞": "lady beetle",
+ "💐": "bouquet",
+ "🌹": "rose",
+ "🌺": "hibiscus",
+ "🌻": "sunflower",
+ "🌷": "tulip",
+ "🌲": "evergreen tree",
+ "🌳": "deciduous tree",
+ "🌴": "palm tree",
+ "🌵": "cactus",
+ "🌿": "herb",
+ "🍁": "maple leaf",
+ "🍇": "grapes",
+ "🍈": "melon",
+ "🍉": "watermelon",
+ "🍊": "tangerine",
+ "🍋": "lemon",
+ "🍌": "banana",
+ "🍍": "pineapple",
+ "🥭": "mango",
+ "🍏": "green apple",
+ "🍐": "pear",
+ "🍑": "peach",
+ "🍒": "cherries",
+ "🍓": "strawberry",
+ "🫐": "blueberries",
+ "🥝": "kiwi fruit",
+ "🍅": "tomato",
+ "🫒": "olive",
+ "🥥": "coconut",
+ "🥑": "avocado",
+ "🍆": "eggplant",
+ "🥕": "carrot",
+ "🌽": "ear of corn",
+ "🌶️": "hot pepper",
+ "🥬": "leafy green",
+ "🥦": "broccoli",
+ "🧅": "onion",
+ "🍄": "mushroom",
+ "🥜": "peanuts",
+ "🥐": "croissant",
+ "🥖": "baguette bread",
+ "🥨": "pretzel",
+ "🥯": "bagel",
+ "🥞": "pancakes",
+ "🧇": "waffle",
+ "🍔": "hamburger",
+ "🍕": "pizza",
+ "🌭": "hot dog",
+ "🌮": "taco",
+ "🍿": "popcorn",
+ "🦀": "crab",
+ "🦞": "lobster",
+ "🍨": "ice cream",
+ "🍩": "doughnut",
+ "🍪": "cookie",
+ "🎂": "birthday cake",
+ "🧁": "cupcake",
+ "🍫": "chocolate bar",
+ "🍬": "candy",
+ "🍭": "lollipop",
+ "🫖": "teapot",
+ "🧃": "beverage box",
+ "🧉": "mate",
+ "🧭": "compass",
+ "🏔️": "snow-capped mountain",
+ "🌋": "volcano",
+ "🏕️": "camping",
+ "🏝️": "desert island",
+ "🏡": "house with garden",
+ "⛲️": "fountain",
+ "🎠": "carousel horse",
+ "🎡": "ferris wheel",
+ "🎢": "roller coaster",
+ "💈": "barber pole",
+ "🚆": "train",
+ "🚋": "tram car",
+ "🚍️": "oncoming bus",
+ "🚕": "taxi",
+ "🚗": "automobile",
+ "🚚": "delivery truck",
+ "🚜": "tractor",
+ "🛵": "motor scooter",
+ "🛺": "auto rickshaw",
+ "🛴": "kick scooter",
+ "🛹": "skateboard",
+ "🛼": "roller skate",
+ "⚓️": "anchor",
+ "⛵️": "sailboat",
+ "🛶": "canoe",
+ "🚤": "speedboat",
+ "🚢": "ship",
+ "✈️": "airplane",
+ "🚁": "helicopter",
+ "🚠": "mountain cableway",
+ "🛰️": "satellite",
+ "🚀": "rocket",
+ "🛸": "flying saucer",
+ "⏰": "alarm clock",
+ "🌙": "crescent moon",
+ "🌡️": "thermometer",
+ "☀️": "sun",
+ "🪐": "ringed planet",
+ "🌟": "glowing star",
+ "🌀": "cyclone",
+ "🌈": "rainbow",
+ "☂️": "umbrella",
+ "❄️": "snowflake",
+ "☄️": "comet",
+ "🔥": "fire",
+ "💧": "droplet",
+ "🌊": "water wave",
+ "🎃": "jack-o-lantern",
+ "✨": "sparkles",
+ "🎈": "balloon",
+ "🎉": "party popper",
+ "🎏": "carp streamer",
+ "🎀": "ribbon",
+ "🎁": "wrapped gift",
+ "🎟️": "admission tickets",
+ "🏆️": "trophy",
+ "⚽️": "soccer ball",
+ "🏀": "basketball",
+ "🏈": "american football",
+ "🎾": "tennis",
+ "🥏": "flying disc",
+ "🏓": "ping pong",
+ "🏸": "badminton",
+ "🤿": "diving mask",
+ "🥌": "curling stone",
+ "🎯": "bullseye",
+ "🪀": "yo-yo",
+ "🪁": "kite",
+ "🔮": "crystal ball",
+ "🎲": "game die",
+ "🧩": "puzzle piece",
+ "🎨": "artist palette",
+ "🧵": "thread",
+ "👕": "t-shirt",
+ "🧦": "socks",
+ "👗": "dress",
+ "🩳": "shorts",
+ "🎒": "backpack",
+ "👟": "running shoe",
+ "👑": "crown",
+ "🧢": "billed cap",
+ "💄": "lipstick",
+ "💍": "ring",
+ "💎": "gem stone",
+ "📢": "loudspeaker",
+ "🎶": "musical notes",
+ "🎙️": "studio microphone",
+ "📻️": "radio",
+ "🎷": "saxophone",
+ "🪗": "accordion",
+ "🎸": "guitar",
+ "🎺": "trumpet",
+ "🎻": "violin",
+ "🪕": "banjo",
+ "🥁": "drum",
+ "☎️": "telephone",
+ "🔋": "battery",
+ "💿️": "optical disk",
+ "🧮": "abacus",
+ "🎬️": "clapper board",
+ "💡": "light bulb",
+ "🔦": "flashlight",
+ "🏮": "red paper lantern",
+ "📕": "closed book",
+ "🏷️": "label",
+ "💳️": "credit card",
+ "✏️": "pencil",
+ "🖌️": "paintbrush",
+ "🖍️": "crayon",
+ "📌": "pushpin",
+ "📎": "paperclip",
+ "🔑": "key",
+ "🪃": "boomerang",
+ "🏹": "bow and arrow",
+ "⚖️": "balance scale",
+ "🧲": "magnet",
+ "🧪": "test tube",
+ "🧬": "dna",
+ "🔬": "microscope",
+ "🔭": "telescope",
+ "📡": "satellite antenna",
+ "🪑": "chair",
+ "🧹": "broom",
+ "🗿": "moai"
+ },
+ "es": {
+ "👽️": "alienígena",
+ "🤖": "robot",
+ "🧠": "cerebro",
+ "👁️": "ojo",
+ "🧙": "persona maga",
+ "🧚": "hada",
+ "🧜": "persona sirena",
+ "🐵": "cara de mono",
+ "🦧": "orangután",
+ "🐶": "cara de perro",
+ "🐺": "lobo",
+ "🦊": "zorro",
+ "🦝": "mapache",
+ "🐱": "cara de gato",
+ "🦁": "león",
+ "🐯": "cara de tigre",
+ "🐴": "cara de caballo",
+ "🦄": "unicornio",
+ "🦓": "cebra",
+ "🦌": "ciervo",
+ "🐮": "cara de vaca",
+ "🐷": "cara de cerdo",
+ "🐗": "jabalí",
+ "🐪": "dromedario",
+ "🦙": "llama",
+ "🦒": "jirafa",
+ "🐘": "elefante",
+ "🦣": "mamut",
+ "🦏": "rinoceronte",
+ "🐭": "cara de ratón",
+ "🐰": "cara de conejo",
+ "🐿️": "ardilla",
+ "🦔": "erizo",
+ "🦇": "murciélago",
+ "🐻": "oso",
+ "🐨": "koala",
+ "🦥": "perezoso",
+ "🦦": "nutria",
+ "🦘": "canguro",
+ "🐥": "pollito de frente",
+ "🐦️": "pájaro",
+ "🕊️": "paloma",
+ "🦆": "pato",
+ "🦉": "búho",
+ "🦤": "dodo",
+ "🪶": "pluma",
+ "🦩": "flamenco",
+ "🦚": "pavo real",
+ "🦜": "loro",
+ "🐊": "cocodrilo",
+ "🐢": "tortuga",
+ "🦎": "lagarto",
+ "🐍": "serpiente",
+ "🐲": "cara de dragón",
+ "🦕": "saurópodo",
+ "🐳": "ballena soltando un chorro",
+ "🐬": "delfín",
+ "🦭": "foca",
+ "🐟️": "pez",
+ "🐠": "pez tropical",
+ "🦈": "tiburón",
+ "🐙": "pulpo",
+ "🐚": "concha de mar",
+ "🐌": "caracol",
+ "🦋": "mariposa",
+ "🐛": "insecto",
+ "🐝": "abeja",
+ "🐞": "mariquita",
+ "💐": "ramo de flores",
+ "🌹": "rosa",
+ "🌺": "flor de hibisco",
+ "🌻": "girasol",
+ "🌷": "tulipán",
+ "🌲": "árbol de hoja perenne",
+ "🌳": "árbol de hoja caduca",
+ "🌴": "palmera",
+ "🌵": "cactus",
+ "🌿": "hierba",
+ "🍁": "hoja de arce",
+ "🍇": "uvas",
+ "🍈": "melón",
+ "🍉": "sandía",
+ "🍊": "mandarina",
+ "🍋": "limón",
+ "🍌": "plátano",
+ "🍍": "piña",
+ "🥭": "mango",
+ "🍏": "manzana verde",
+ "🍐": "pera",
+ "🍑": "melocotón",
+ "🍒": "cerezas",
+ "🍓": "fresa",
+ "🫐": "arándanos",
+ "🥝": "kiwi",
+ "🍅": "tomate",
+ "🫒": "aceituna",
+ "🥥": "coco",
+ "🥑": "aguacate",
+ "🍆": "berenjena",
+ "🥕": "zanahoria",
+ "🌽": "espiga de maíz",
+ "🌶️": "chile picante",
+ "🥬": "verdura de hoja verde",
+ "🥦": "brócoli",
+ "🧅": "cebolla",
+ "🍄": "champiñón",
+ "🥜": "cacahuetes",
+ "🥐": "cruasán",
+ "🥖": "baguete",
+ "🥨": "bretzel",
+ "🥯": "bagel",
+ "🥞": "tortitas",
+ "🧇": "gofre",
+ "🍔": "hamburguesa",
+ "🍕": "pizza",
+ "🌭": "perrito caliente",
+ "🌮": "taco",
+ "🍿": "palomitas",
+ "🦀": "cangrejo",
+ "🦞": "bogavante",
+ "🍨": "helado",
+ "🍩": "dónut",
+ "🍪": "galleta",
+ "🎂": "tarta de cumpleaños",
+ "🧁": "magdalena",
+ "🍫": "tableta de chocolate",
+ "🍬": "caramelo",
+ "🍭": "piruleta",
+ "🫖": "tetera",
+ "🧃": "tetrabrik",
+ "🧉": "mate",
+ "🧭": "brújula",
+ "🏔️": "montaña con nieve",
+ "🌋": "volcán",
+ "🏕️": "camping",
+ "🏝️": "isla desierta",
+ "🏡": "casa con jardín",
+ "⛲️": "fuente",
+ "🎠": "caballo de tiovivo",
+ "🎡": "noria de feria",
+ "🎢": "montaña rusa",
+ "💈": "poste de barbero",
+ "🚆": "tren",
+ "🚋": "vagón de tranvía",
+ "🚍️": "autobús próximo",
+ "🚕": "taxi",
+ "🚗": "coche",
+ "🚚": "camión de reparto",
+ "🚜": "tractor",
+ "🛵": "scooter",
+ "🛺": "mototaxi",
+ "🛴": "patinete",
+ "🛹": "monopatín",
+ "🛼": "patines",
+ "⚓️": "ancla",
+ "⛵️": "velero",
+ "🛶": "canoa",
+ "🚤": "lancha motora",
+ "🚢": "barco",
+ "✈️": "avión",
+ "🚁": "helicóptero",
+ "🚠": "teleférico de montaña",
+ "🛰️": "satélite",
+ "🚀": "cohete",
+ "🛸": "platillo volante",
+ "⏰": "reloj despertador",
+ "🌙": "luna",
+ "🌡️": "termómetro",
+ "☀️": "sol",
+ "🪐": "planeta con anillos",
+ "🌟": "estrella brillante",
+ "🌀": "ciclón",
+ "🌈": "arcoíris",
+ "☂️": "paraguas",
+ "❄️": "copo de nieve",
+ "☄️": "meteorito",
+ "🔥": "fuego",
+ "💧": "gota",
+ "🌊": "ola de mar",
+ "🎃": "calabaza de Halloween",
+ "✨": "chispas",
+ "🎈": "globo",
+ "🎉": "cañón de confeti",
+ "🎏": "banderín de carpas",
+ "🎀": "lazo",
+ "🎁": "regalo",
+ "🎟️": "entradas",
+ "🏆️": "trofeo",
+ "⚽️": "balón de fútbol",
+ "🏀": "balón de baloncesto",
+ "🏈": "balón de fútbol americano",
+ "🎾": "pelota de tenis",
+ "🥏": "disco volador",
+ "🏓": "tenis de mesa",
+ "🏸": "bádminton",
+ "🤿": "máscara de buceo",
+ "🥌": "piedra de curling",
+ "🎯": "diana",
+ "🪀": "yoyó",
+ "🪁": "cometa",
+ "🔮": "bola de cristal",
+ "🎲": "dado",
+ "🧩": "pieza de puzle",
+ "🎨": "paleta de pintor",
+ "🧵": "hilo",
+ "👕": "camiseta",
+ "🧦": "calcetines",
+ "👗": "vestido",
+ "🩳": "pantalones cortos",
+ "🎒": "mochila escolar",
+ "👟": "zapatilla deportiva",
+ "👑": "corona",
+ "🧢": "gorra con visera",
+ "💄": "pintalabios",
+ "💍": "anillo",
+ "💎": "piedra preciosa",
+ "📢": "altavoz de mano",
+ "🎶": "notas musicales",
+ "🎙️": "micrófono de estudio",
+ "📻️": "radio",
+ "🎷": "saxofón",
+ "🪗": "acordeón",
+ "🎸": "guitarra",
+ "🎺": "trompeta",
+ "🎻": "violín",
+ "🪕": "banjo",
+ "🥁": "tambor",
+ "☎️": "teléfono",
+ "🔋": "pila",
+ "💿️": "disco óptico",
+ "🧮": "ábaco",
+ "🎬️": "claqueta",
+ "💡": "bombilla",
+ "🔦": "linterna",
+ "🏮": "lámpara japonesa",
+ "📕": "libro cerrado",
+ "🏷️": "etiqueta",
+ "💳️": "tarjeta de crédito",
+ "✏️": "lápiz",
+ "🖌️": "pincel",
+ "🖍️": "lápiz de cera",
+ "📌": "chincheta",
+ "📎": "clip",
+ "🔑": "llave",
+ "🪃": "bumerán",
+ "🏹": "arco y flecha",
+ "⚖️": "balanza",
+ "🧲": "imán",
+ "🧪": "tubo de ensayo",
+ "🧬": "adn",
+ "🔬": "microscopio",
+ "🔭": "telescopio",
+ "📡": "antena de satélite",
+ "🪑": "silla",
+ "🧹": "escoba",
+ "🗿": "estatua moái"
+ },
+ "fa": {
+ "👽️": "موجود فضایی",
+ "🤖": "روبات",
+ "🧠": "مغز",
+ "👁️": "چشم",
+ "🧙": "ساحر",
+ "🧚": "پری",
+ "🧜": "دریامردمان",
+ "🐵": "صورت میمون",
+ "🦧": "اورانگوتان",
+ "🐶": "صورت سگ",
+ "🐺": "گرگ",
+ "🦊": "روباه",
+ "🦝": "راکون",
+ "🐱": "صورت گربه",
+ "🦁": "شیر",
+ "🐯": "صورت ببر",
+ "🐴": "صورت اسب",
+ "🦄": "تکشاخ",
+ "🦓": "گورخر",
+ "🦌": "گوزن",
+ "🐮": "صورت گاو",
+ "🐷": "صورت خوک",
+ "🐗": "گراز نر",
+ "🐪": "شتر",
+ "🦙": "لاما",
+ "🦒": "زرافه",
+ "🐘": "فیل",
+ "🦣": "ماموت",
+ "🦏": "کرگدن",
+ "🐭": "صورت موش",
+ "🐰": "صورت خرگوش",
+ "🐿️": "سنجاب راهراه",
+ "🦔": "جوجهتیغی",
+ "🦇": "خفاش",
+ "🐻": "خرس",
+ "🐨": "کوآلا",
+ "🦥": "تنبل",
+ "🦦": "سمور آبی",
+ "🦘": "کانگورو",
+ "🐥": "جوجه از روبرو",
+ "🐦️": "پرنده",
+ "🕊️": "کبوتر",
+ "🦆": "مرغابی",
+ "🦉": "جغد",
+ "🦤": "دودو",
+ "🪶": "پَر",
+ "🦩": "فلامینگو",
+ "🦚": "طاووس",
+ "🦜": "طوطی",
+ "🐊": "تمساح",
+ "🐢": "لاکپشت",
+ "🦎": "مارمولک",
+ "🐍": "مار",
+ "🐲": "صورت اژدها",
+ "🦕": "سوسمار",
+ "🐳": "نهنگ در حال آبفشانی",
+ "🐬": "دلفین",
+ "🦭": "فُک",
+ "🐟️": "ماهی",
+ "🐠": "ماهی استوایی",
+ "🦈": "کوسه",
+ "🐙": "هشتپا",
+ "🐚": "صدف مارپیچی",
+ "🐌": "حلزون",
+ "🦋": "پروانه",
+ "🐛": "حشره",
+ "🐝": "زنبور عسل",
+ "🐞": "کفشدوزک",
+ "💐": "دسته گل",
+ "🌹": "رز",
+ "🌺": "گل ختمی",
+ "🌻": "گل آفتابگردان",
+ "🌷": "لاله",
+ "🌲": "همیشهسبز",
+ "🌳": "درخت سبز",
+ "🌴": "نخل",
+ "🌵": "کاکتوس",
+ "🌿": "گیاه دارویی",
+ "🍁": "برگ افرا",
+ "🍇": "انگور",
+ "🍈": "طالبی",
+ "🍉": "هندوانه",
+ "🍊": "نارنگی",
+ "🍋": "لیمو ترش",
+ "🍌": "موز",
+ "🍍": "آناناس",
+ "🥭": "انبه",
+ "🍏": "سیب سبز",
+ "🍐": "گلابی",
+ "🍑": "هلو",
+ "🍒": "گیلاس",
+ "🍓": "توتفرنگی",
+ "🫐": "توت آبی",
+ "🥝": "کیوی",
+ "🍅": "گوجهفرنگی",
+ "🫒": "زیتون",
+ "🥥": "نارگیل",
+ "🥑": "آووکادو",
+ "🍆": "بادمجان",
+ "🥕": "هویج",
+ "🌽": "بلال ذرت",
+ "🌶️": "فلفل قرمز",
+ "🥬": "برگسبز",
+ "🥦": "بروکلی",
+ "🧅": "پیاز",
+ "🍄": "قارچ",
+ "🥜": "بادام زمینی",
+ "🥐": "کرواسان",
+ "🥖": "نان باگت",
+ "🥨": "چوبشور",
+ "🥯": "نان بیگل",
+ "🥞": "پنکیک",
+ "🧇": "وافل",
+ "🍔": "همبرگر",
+ "🍕": "پیتزا",
+ "🌭": "هات داگ",
+ "🌮": "تاکو",
+ "🍿": "ذرت بوداده",
+ "🦀": "خرچنگ",
+ "🦞": "لابستر",
+ "🍨": "بستنی",
+ "🍩": "دونات",
+ "🍪": "کلوچه",
+ "🎂": "کیک تولد",
+ "🧁": "کیک فنجانی",
+ "🍫": "تخته شکلات",
+ "🍬": "آبنبات",
+ "🍭": "آبنباتچوبی",
+ "🫖": "قوری",
+ "🧃": "پاکت نوشیدنی",
+ "🧉": "ماته",
+ "🧭": "قطبنما",
+ "🏔️": "قلهٔ برفی",
+ "🌋": "آتشفشان",
+ "🏕️": "چادرزنی",
+ "🏝️": "جزیرهٔ خالی از سکنه",
+ "🏡": "خانهٔ حیاطدار",
+ "⛲️": "فواره",
+ "🎠": "چرخوفلک اسبی",
+ "🎡": "چرخوفلک",
+ "🎢": "ترن هوایی",
+ "💈": "چراغ سلمانی",
+ "🚆": "قطار",
+ "🚋": "قطار خیابانی",
+ "🚍️": "اتوبوس روبهجلو",
+ "🚕": "تاکسی",
+ "🚗": "خودرو",
+ "🚚": "کامیون پخش",
+ "🚜": "تراکتور",
+ "🛵": "اسکوتر",
+ "🛺": "اتوریکشا",
+ "🛴": "چرخ پایی",
+ "🛹": "تختهٔ اسکیت",
+ "🛼": "کفش اسکیت",
+ "⚓️": "لنگر",
+ "⛵️": "قایق بادبانی",
+ "🛶": "بلم",
+ "🚤": "قایق تندرو",
+ "🚢": "کشتی",
+ "✈️": "هواپیما",
+ "🚁": "هلیکوپتر",
+ "🚠": "تلهکابین کوهستانی",
+ "🛰️": "ماهواره",
+ "🚀": "موشک",
+ "🛸": "بشقابپرنده",
+ "⏰": "ساعت رومیزی",
+ "🌙": "هلال ماه",
+ "🌡️": "دماسنج",
+ "☀️": "خورشید",
+ "🪐": "سیاره حلقهدار",
+ "🌟": "ستاره درخشان",
+ "🌀": "چرخند",
+ "🌈": "رنگین کمان",
+ "☂️": "چتر",
+ "❄️": "برفدانه",
+ "☄️": "ستاره دنبالهدار",
+ "🔥": "آتش",
+ "💧": "قطره",
+ "🌊": "موج آب",
+ "🎃": "فانوس کدو تنبل",
+ "✨": "درخشش",
+ "🎈": "بادکنک",
+ "🎉": "بمب کاغذ رنگی",
+ "🎏": "پرچمهای ماهی در باد",
+ "🎀": "روبان",
+ "🎁": "هدیهٔ کادوشده",
+ "🎟️": "بلیت ورود",
+ "🏆️": "جام ورزشی",
+ "⚽️": "توپ فوتبال",
+ "🏀": "بسکتبال",
+ "🏈": "فوتبال امریکایی",
+ "🎾": "تنیس",
+ "🥏": "فریزبی",
+ "🏓": "پینگپونگ",
+ "🏸": "بدمینتون",
+ "🤿": "ماسک غواصی",
+ "🥌": "سنگ کرلینگ",
+ "🎯": "پیکان در قلب هدف",
+ "🪀": "یویو",
+ "🪁": "بادبادک",
+ "🔮": "گوی",
+ "🎲": "تاس بازی",
+ "🧩": "قطعه پازل",
+ "🎨": "پالت نقاشی",
+ "🧵": "نخ",
+ "👕": "تیشرت",
+ "🧦": "جوراب",
+ "👗": "پیراهن زنانه",
+ "🩳": "شلوارک",
+ "🎒": "کولهپشتی",
+ "👟": "کفش دویدن",
+ "👑": "تاج",
+ "🧢": "کلاه لبهدار",
+ "💄": "رژلب",
+ "💍": "حلقه",
+ "💎": "جواهر",
+ "📢": "بلندگو",
+ "🎶": "نتهای موسیقی",
+ "🎙️": "میکروفون استودیویی",
+ "📻️": "رادیو",
+ "🎷": "ساکسیفون",
+ "🪗": "آکوردئون",
+ "🎸": "گیتار",
+ "🎺": "ترومپت",
+ "🎻": "ویولن",
+ "🪕": "بانجو",
+ "🥁": "طبل",
+ "☎️": "تلفن",
+ "🔋": "باتری",
+ "💿️": "سیدی",
+ "🧮": "چرتکه",
+ "🎬️": "کلاکت",
+ "💡": "لامپ",
+ "🔦": "چراغقوه",
+ "🏮": "فانوس کاغذی قرمز",
+ "📕": "کتاب بسته",
+ "🏷️": "برچسب",
+ "💳️": "کارت اعتباری",
+ "✏️": "مداد",
+ "🖌️": "قلممو",
+ "🖍️": "مدادشمعی",
+ "📌": "سنجاق",
+ "📎": "گیرهٔ کاغذ",
+ "🔑": "کلید",
+ "🪃": "بومرنگ",
+ "🏹": "تیر و کمان",
+ "⚖️": "ترازو",
+ "🧲": "آهنربا",
+ "🧪": "لولهٔ آزمایشگاه",
+ "🧬": "دیانای",
+ "🔬": "میکروسکوپ",
+ "🔭": "تلسکوپ",
+ "📡": "آنتن ماهواره",
+ "🪑": "صندلی",
+ "🧹": "جارو",
+ "🗿": "سردیس موآی"
+ },
+ "fr": {
+ "👽️": "alien",
+ "🤖": "robot",
+ "🧠": "cerveau",
+ "👁️": "œil",
+ "🧙": "mage",
+ "🧚": "personnage féérique",
+ "🧜": "créature aquatique",
+ "🐵": "tête de singe",
+ "🦧": "orang-outan",
+ "🐶": "tête de chien",
+ "🐺": "loup",
+ "🦊": "renard",
+ "🦝": "raton laveur",
+ "🐱": "tête de chat",
+ "🦁": "tête de lion",
+ "🐯": "tête de tigre",
+ "🐴": "tête de cheval",
+ "🦄": "licorne",
+ "🦓": "zèbre",
+ "🦌": "cerf",
+ "🐮": "tête de vache",
+ "🐷": "tête de cochon",
+ "🐗": "sanglier",
+ "🐪": "dromadaire",
+ "🦙": "lama",
+ "🦒": "girafe",
+ "🐘": "éléphant",
+ "🦣": "mammouth",
+ "🦏": "rhinocéros",
+ "🐭": "tête de souris",
+ "🐰": "tête de lapin",
+ "🐿️": "écureuil",
+ "🦔": "hérisson",
+ "🦇": "chauve-souris",
+ "🐻": "ours",
+ "🐨": "koala",
+ "🦥": "paresseux",
+ "🦦": "loutre",
+ "🦘": "kangourou",
+ "🐥": "poussin de face",
+ "🐦️": "oiseau",
+ "🕊️": "colombe",
+ "🦆": "canard",
+ "🦉": "chouette",
+ "🦤": "dodo",
+ "🪶": "plume",
+ "🦩": "flamant",
+ "🦚": "paon",
+ "🦜": "perroquet",
+ "🐊": "crocodile",
+ "🐢": "tortue",
+ "🦎": "lézard",
+ "🐍": "serpent",
+ "🐲": "tête de dragon",
+ "🦕": "sauropode",
+ "🐳": "baleine soufflant par son évent",
+ "🐬": "dauphin",
+ "🦭": "phoque",
+ "🐟️": "poisson",
+ "🐠": "poisson tropical",
+ "🦈": "requin",
+ "🐙": "pieuvre",
+ "🐚": "coquille en spirale",
+ "🐌": "escargot",
+ "🦋": "papillon",
+ "🐛": "chenille",
+ "🐝": "abeille",
+ "🐞": "coccinelle",
+ "💐": "bouquet",
+ "🌹": "rose",
+ "🌺": "hibiscus",
+ "🌻": "tournesol",
+ "🌷": "tulipe",
+ "🌲": "conifère",
+ "🌳": "arbre à feuilles caduques",
+ "🌴": "palmier",
+ "🌵": "cactus",
+ "🌿": "feuille",
+ "🍁": "feuille d’érable",
+ "🍇": "raisin",
+ "🍈": "melon",
+ "🍉": "pastèque",
+ "🍊": "mandarine",
+ "🍋": "citron",
+ "🍌": "banane",
+ "🍍": "ananas",
+ "🥭": "mangue",
+ "🍏": "pomme verte",
+ "🍐": "poire",
+ "🍑": "pêche",
+ "🍒": "cerises",
+ "🍓": "fraise",
+ "🫐": "myrtilles",
+ "🥝": "kiwi",
+ "🍅": "tomate",
+ "🫒": "olive",
+ "🥥": "noix de coco",
+ "🥑": "avocat",
+ "🍆": "aubergine",
+ "🥕": "carotte",
+ "🌽": "épi de maïs",
+ "🌶️": "piment rouge",
+ "🥬": "légume à feuilles vertes",
+ "🥦": "brocoli",
+ "🧅": "oignon",
+ "🍄": "champignon",
+ "🥜": "cacahuètes",
+ "🥐": "croissant",
+ "🥖": "baguette",
+ "🥨": "bretzel",
+ "🥯": "bagel",
+ "🥞": "pancakes",
+ "🧇": "gaufre",
+ "🍔": "hamburger",
+ "🍕": "pizza",
+ "🌭": "hot dog",
+ "🌮": "taco",
+ "🍿": "pop-corn",
+ "🦀": "crabe",
+ "🦞": "homard",
+ "🍨": "glace",
+ "🍩": "doughnut",
+ "🍪": "cookie",
+ "🎂": "gâteau d’anniversaire",
+ "🧁": "cupcake",
+ "🍫": "barre chocolatée",
+ "🍬": "bonbon",
+ "🍭": "sucette",
+ "🫖": "théière",
+ "🧃": "briquette de jus",
+ "🧉": "maté",
+ "🧭": "boussole",
+ "🏔️": "montagne enneigée",
+ "🌋": "volcan",
+ "🏕️": "camping",
+ "🏝️": "île déserte",
+ "🏡": "maison avec jardin",
+ "⛲️": "fontaine",
+ "🎠": "cheval de manège",
+ "🎡": "grande roue",
+ "🎢": "montagnes russes",
+ "💈": "enseigne de barbier",
+ "🚆": "train",
+ "🚋": "wagon de tramway",
+ "🚍️": "bus de face",
+ "🚕": "taxi",
+ "🚗": "voiture",
+ "🚚": "camion de livraison",
+ "🚜": "tracteur",
+ "🛵": "scooter",
+ "🛺": "tuk tuk",
+ "🛴": "trottinette",
+ "🛹": "planche à roulettes",
+ "🛼": "patin à roulettes",
+ "⚓️": "ancre",
+ "⛵️": "voilier",
+ "🛶": "canoë",
+ "🚤": "hors-bord",
+ "🚢": "navire",
+ "✈️": "avion",
+ "🚁": "hélicoptère",
+ "🚠": "téléphérique",
+ "🛰️": "satellite",
+ "🚀": "fusée",
+ "🛸": "soucoupe volante",
+ "⏰": "réveil",
+ "🌙": "croissant de lune",
+ "🌡️": "thermomètre",
+ "☀️": "soleil",
+ "🪐": "planète à anneaux",
+ "🌟": "étoile brillante",
+ "🌀": "cyclone",
+ "🌈": "arc-en-ciel",
+ "☂️": "parapluie ouvert",
+ "❄️": "flocon",
+ "☄️": "comète",
+ "🔥": "feu",
+ "💧": "goutte d’eau",
+ "🌊": "vague",
+ "🎃": "citrouille",
+ "✨": "étincelles",
+ "🎈": "ballon gonflable",
+ "🎉": "cotillons",
+ "🎏": "koinobori",
+ "🎀": "ruban",
+ "🎁": "cadeau",
+ "🎟️": "billet d’entrée",
+ "🏆️": "trophée",
+ "⚽️": "ballon de football",
+ "🏀": "basket",
+ "🏈": "football américain",
+ "🎾": "tennis",
+ "🥏": "disque volant",
+ "🏓": "ping-pong",
+ "🏸": "badminton",
+ "🤿": "masque de plongée",
+ "🥌": "pierre de curling",
+ "🎯": "dans le mille",
+ "🪀": "yoyo",
+ "🪁": "cerf-volant",
+ "🔮": "boule de cristal",
+ "🎲": "dés",
+ "🧩": "pièce de puzzle",
+ "🎨": "palette de peinture",
+ "🧵": "bobine de fil",
+ "👕": "T-shirt",
+ "🧦": "chaussettes",
+ "👗": "robe",
+ "🩳": "short",
+ "🎒": "cartable",
+ "👟": "chaussure de sport",
+ "👑": "couronne",
+ "🧢": "casquette américaine",
+ "💄": "rouge à lèvres",
+ "💍": "bague",
+ "💎": "pierre précieuse",
+ "📢": "haut-parleur",
+ "🎶": "notes de musique",
+ "🎙️": "micro de studio",
+ "📻️": "radio",
+ "🎷": "saxophone",
+ "🪗": "accordéon",
+ "🎸": "guitare",
+ "🎺": "trompette",
+ "🎻": "violon",
+ "🪕": "banjo",
+ "🥁": "batterie",
+ "☎️": "téléphone",
+ "🔋": "pile",
+ "💿️": "CD",
+ "🧮": "abaque",
+ "🎬️": "clap",
+ "💡": "ampoule",
+ "🔦": "torche",
+ "🏮": "lampion rouge",
+ "📕": "livre fermé",
+ "🏷️": "étiquette",
+ "💳️": "carte bancaire",
+ "✏️": "crayon",
+ "🖌️": "pinceau",
+ "🖍️": "crayon pastel",
+ "📌": "punaise",
+ "📎": "trombone",
+ "🔑": "clé",
+ "🪃": "boomerang",
+ "🏹": "arc et flèche",
+ "⚖️": "balance à poids",
+ "🧲": "aimant",
+ "🧪": "tube à essai",
+ "🧬": "adn",
+ "🔬": "microscope",
+ "🔭": "télescope",
+ "📡": "antenne satellite",
+ "🪑": "chaise",
+ "🧹": "balai",
+ "🗿": "moai"
+ },
+ "ga": {
+ "👽️": "eachtrán",
+ "🤖": "róbat",
+ "🧠": "inchinn",
+ "👁️": "súil",
+ "🧙": "duine draíochta",
+ "🧚": "síog",
+ "🧜": "duine murúch",
+ "🐵": "aghaidh moncaí",
+ "🦧": "órang-útan",
+ "🐶": "aghaidh madra",
+ "🐺": "aghaidh mic tíre",
+ "🦊": "aghaidh sionnaigh",
+ "🦝": "racún",
+ "🐱": "aghaidh cait",
+ "🦁": "aghaidh leoin",
+ "🐯": "aghaidh tíogair",
+ "🐴": "aghaidh capaill",
+ "🦄": "aghaidh aonbheannaigh",
+ "🦓": "séabra",
+ "🦌": "fia",
+ "🐮": "aghaidh bó",
+ "🐷": "aghaidh muice",
+ "🐗": "torc",
+ "🐪": "camall",
+ "🦙": "láma",
+ "🦒": "sioráf",
+ "🐘": "eilifint",
+ "🦣": "mamat",
+ "🦏": "srónbheannach",
+ "🐭": "aghaidh luiche",
+ "🐰": "aghaidh coinín",
+ "🐿️": "iora talún",
+ "🦔": "gráinneog",
+ "🦇": "ialtóg",
+ "🐻": "aghaidh béair",
+ "🐨": "cóála",
+ "🦥": "spadán",
+ "🦦": "madra uisce",
+ "🦘": "cangarú",
+ "🐥": "gearrshicín éadain",
+ "🐦️": "éan",
+ "🕊️": "colm",
+ "🦆": "lacha",
+ "🦉": "ulchabhán",
+ "🦤": "dódó",
+ "🪶": "cleite",
+ "🦩": "lasairéan",
+ "🦚": "péacóg",
+ "🦜": "pearóid",
+ "🐊": "crogall",
+ "🐢": "turtar",
+ "🦎": "earc luachra",
+ "🐍": "nathair",
+ "🐲": "aghaidh dragain",
+ "🦕": "sárapód",
+ "🐳": "míol mór ag séideadh",
+ "🐬": "deilf",
+ "🦭": "rón",
+ "🐟️": "iasc",
+ "🐠": "iasc teochreasa",
+ "🦈": "siorc",
+ "🐙": "ochtapas",
+ "🐚": "sliogán",
+ "🐌": "seilide",
+ "🦋": "féileacán",
+ "🐛": "míol",
+ "🐝": "beach mheala",
+ "🐞": "bóín",
+ "💐": "crobhaing bláthanna",
+ "🌹": "rós",
+ "🌺": "roiseog",
+ "🌻": "lus na gréine",
+ "🌷": "tiúilip",
+ "🌲": "crann síorghlas",
+ "🌳": "crann duillsilteach",
+ "🌴": "pailm",
+ "🌵": "cachtas",
+ "🌿": "luibh",
+ "🍁": "duilleog mhailpe",
+ "🍇": "caora fíniúna",
+ "🍈": "mealbhacán",
+ "🍉": "mealbhacán uisce",
+ "🍊": "táinséirín",
+ "🍋": "líomóid",
+ "🍌": "banana",
+ "🍍": "anann",
+ "🥭": "mangó",
+ "🍏": "úll glas",
+ "🍐": "piorra",
+ "🍑": "péitseog",
+ "🍒": "silíní",
+ "🍓": "sú talún",
+ "🫐": "fraochán",
+ "🥝": "cíobhaí",
+ "🍅": "tráta",
+ "🫒": "ológ",
+ "🥥": "cnó cócó",
+ "🥑": "abhacád",
+ "🍆": "ubhthoradh",
+ "🥕": "meacan dearg",
+ "🌽": "dias arbhair",
+ "🌶️": "píobar te",
+ "🥬": "glasra duilleach",
+ "🥦": "brocailí",
+ "🧅": "oiniún",
+ "🍄": "beacán",
+ "🥜": "pis talún",
+ "🥐": "croissant",
+ "🥖": "baguette",
+ "🥨": "preatsal",
+ "🥯": "béigeal",
+ "🥞": "pancóga",
+ "🧇": "vaifeal",
+ "🍔": "burgar",
+ "🍕": "píotsa",
+ "🌭": "brocaire te",
+ "🌮": "taco",
+ "🍿": "grán rósta",
+ "🦀": "portán",
+ "🦞": "gliomach",
+ "🍨": "uachtar reoite",
+ "🍩": "taoschnó",
+ "🍪": "briosca",
+ "🎂": "cáca breithe",
+ "🧁": "cístín cupa",
+ "🍫": "seacláid",
+ "🍬": "milseán",
+ "🍭": "líreacán",
+ "🫖": "taephota",
+ "🧃": "bosca dí",
+ "🧉": "maité",
+ "🧭": "compás",
+ "🏔️": "sliabh le sneachta",
+ "🌋": "bolcán",
+ "🏕️": "ag campáil",
+ "🏝️": "oileán díthreibhe",
+ "🏡": "teach le gairdín",
+ "⛲️": "scairdeán",
+ "🎠": "capall an roithleagáin ró",
+ "🎡": "roth Ferris",
+ "🎢": "rollchóstóir",
+ "💈": "cuaille bearbóra",
+ "🚆": "traein",
+ "🚋": "carráiste tram",
+ "🚍️": "bus atá ag teacht",
+ "🚕": "tacsaí",
+ "🚗": "gluaisteán",
+ "🚚": "trucail seachadta",
+ "🚜": "tarracóir",
+ "🛵": "scútar",
+ "🛺": "ricseá uathoibríoch",
+ "🛴": "scútar gan inneall",
+ "🛹": "clár scátála",
+ "🛼": "scáta rothach",
+ "⚓️": "ancaire",
+ "⛵️": "bád seoil",
+ "🛶": "canú",
+ "🚤": "luasbhád",
+ "🚢": "long",
+ "✈️": "eitleán",
+ "🚁": "héileacaptar",
+ "🚠": "cáblabhealach sléibhe",
+ "🛰️": "satailít",
+ "🚀": "roicéad",
+ "🛸": "sásar eitilte",
+ "⏰": "clog aláraim",
+ "🌙": "corrán gealaí",
+ "🌡️": "teirmiméadar",
+ "☀️": "grian",
+ "🪐": "pláinéad le fáinne",
+ "🌟": "réalta ag lonrú",
+ "🌀": "cioclón",
+ "🌈": "bogha báistí",
+ "☂️": "scáth báistí",
+ "❄️": "calóg shneachta",
+ "☄️": "cóiméad",
+ "🔥": "tine",
+ "💧": "braoinín",
+ "🌊": "tonn san uisce",
+ "🎃": "Seán na gealaí",
+ "✨": "drithlí",
+ "🎈": "balún",
+ "🎉": "pléiscín cóisire",
+ "🎏": "sraoilleán éisc",
+ "🎀": "ribín",
+ "🎁": "bronntanas",
+ "🎟️": "ticéid cead isteach",
+ "🏆️": "corn",
+ "⚽️": "liathróid sacair",
+ "🏀": "cispheil",
+ "🏈": "peil Mheiriceánach",
+ "🎾": "leadóg",
+ "🥏": "diosca eitilte",
+ "🏓": "ping pang",
+ "🏸": "badmantan",
+ "🤿": "masc tumadóireachta",
+ "🥌": "cloch churlála",
+ "🎯": "buille díreach",
+ "🪀": "yó-yó",
+ "🪁": "eitleog",
+ "🔮": "cruinneog chriostail",
+ "🎲": "dísle",
+ "🧩": "mír mearaí",
+ "🎨": "pailéad dathanna",
+ "🧵": "snáth",
+ "👕": "t-léine",
+ "🧦": "stocaí",
+ "👗": "gúna",
+ "🩳": "brístí gearra",
+ "🎒": "mála scoile",
+ "👟": "bróg reatha",
+ "👑": "coróin",
+ "🧢": "caipín speiceach",
+ "💄": "béaldath",
+ "💍": "fáinne",
+ "💎": "geamchloch",
+ "📢": "callaire",
+ "🎶": "nótaí ceoil",
+ "🎙️": "micreafón stiúideo",
+ "📻️": "raidió",
+ "🎷": "sacsafón",
+ "🪗": "bosca ceoil",
+ "🎸": "giotár",
+ "🎺": "trumpa",
+ "🎻": "veidhlín",
+ "🪕": "bainseó",
+ "🥁": "druma",
+ "☎️": "teileafón",
+ "🔋": "ceallra",
+ "💿️": "diosca optúil",
+ "🧮": "abacas",
+ "🎬️": "clabaire",
+ "💡": "bolgán solais",
+ "🔦": "tóirse",
+ "🏮": "laindéar dearg",
+ "📕": "leabhar dúnta",
+ "🏷️": "lipéad",
+ "💳️": "cárta creidmheasa",
+ "✏️": "peann luaidhe",
+ "🖌️": "scuab phéinteála",
+ "🖍️": "crián",
+ "📌": "tacóid ordóige",
+ "📎": "fáiscín páipéir",
+ "🔑": "eochair",
+ "🪃": "búmarang",
+ "🏹": "saighead is bogha",
+ "⚖️": "scála",
+ "🧲": "maighnéad",
+ "🧪": "triaileadán",
+ "🧬": "ADN",
+ "🔬": "micreascóp",
+ "🔭": "teileascóp",
+ "📡": "aeróg satailíte",
+ "🪑": "cathaoir",
+ "🧹": "scruab",
+ "🗿": "dealbh Oileán na Cásca"
+ },
+ "he": {
+ "👽️": "חייזר",
+ "🤖": "רובוט",
+ "🧠": "מוח",
+ "👁️": "עין",
+ "🧙": "קוסם",
+ "🧚": "פיה",
+ "🧜": "בתולת ים",
+ "🐵": "פני קוף",
+ "🦧": "אורנגאוטן",
+ "🐶": "פני כלב",
+ "🐺": "זאב",
+ "🦊": "שועל",
+ "🦝": "רקון",
+ "🐱": "פני חתול",
+ "🦁": "אריה",
+ "🐯": "פני טיגריס",
+ "🐴": "פני סוס",
+ "🦄": "חד קרן",
+ "🦓": "זברה",
+ "🦌": "אייל",
+ "🐮": "פני פרה",
+ "🐷": "פני חזיר",
+ "🐗": "חזיר בר",
+ "🐪": "גמל",
+ "🦙": "למה",
+ "🦒": "ג׳ירף",
+ "🐘": "פיל",
+ "🦣": "ממותה",
+ "🦏": "קרנף",
+ "🐭": "פני עכבר",
+ "🐰": "פני ארנב",
+ "🐿️": "סנאי",
+ "🦔": "קיפוד",
+ "🦇": "עטלף",
+ "🐻": "דוב",
+ "🐨": "קואלה",
+ "🦥": "עצלן",
+ "🦦": "לוטרה",
+ "🦘": "קנגורו",
+ "🐥": "אפרוח מלפנים",
+ "🐦️": "ציפור",
+ "🕊️": "יונה",
+ "🦆": "ברווז",
+ "🦉": "ינשוף",
+ "🦤": "ציפור דודו",
+ "🪶": "נוצה",
+ "🦩": "פלמינגו",
+ "🦚": "טווס",
+ "🦜": "תוכי",
+ "🐊": "תנין",
+ "🐢": "צב",
+ "🦎": "לטאה",
+ "🐍": "נחש",
+ "🐲": "פני דרקון",
+ "🦕": "סרופוד",
+ "🐳": "לווייתן מתיז סילון מים",
+ "🐬": "דולפין",
+ "🦭": "כלב ים",
+ "🐟️": "דג",
+ "🐠": "דג טרופי",
+ "🦈": "כריש",
+ "🐙": "תמנון",
+ "🐚": "צדף מסולסל",
+ "🐌": "חלזון",
+ "🦋": "פרפר",
+ "🐛": "זחל",
+ "🐝": "דבורה",
+ "🐞": "פרת משה רבנו",
+ "💐": "זר פרחים",
+ "🌹": "ורד",
+ "🌺": "היביסקוס",
+ "🌻": "חמניה",
+ "🌷": "צבעוני",
+ "🌲": "עץ ירוק-עד",
+ "🌳": "עץ נשיר",
+ "🌴": "עץ דקל",
+ "🌵": "קקטוס",
+ "🌿": "צמח תבלין",
+ "🍁": "עלה מייפל",
+ "🍇": "ענבים",
+ "🍈": "מלון",
+ "🍉": "אבטיח",
+ "🍊": "קלמנטינה",
+ "🍋": "לימון",
+ "🍌": "בננה",
+ "🍍": "אננס",
+ "🥭": "מנגו",
+ "🍏": "תפוח ירוק",
+ "🍐": "אגס",
+ "🍑": "אפרסק",
+ "🍒": "דובדבנים",
+ "🍓": "תות שדה",
+ "🫐": "אוכמניות",
+ "🥝": "קיווי",
+ "🍅": "עגבנייה",
+ "🫒": "זית",
+ "🥥": "קוקוס",
+ "🥑": "אבוקדו",
+ "🍆": "חציל",
+ "🥕": "גזר",
+ "🌽": "קלח תירס",
+ "🌶️": "פלפל חריף",
+ "🥬": "עלים ירוקים",
+ "🥦": "ברוקולי",
+ "🧅": "בצל",
+ "🍄": "פטריה",
+ "🥜": "בוטנים",
+ "🥐": "קרואסון",
+ "🥖": "באגט",
+ "🥨": "בייגלה",
+ "🥯": "בייגל",
+ "🥞": "פנקייקס",
+ "🧇": "וופל",
+ "🍔": "המבורגר",
+ "🍕": "פיצה",
+ "🌭": "נקניקייה בלחמניה",
+ "🌮": "טאקו",
+ "🍿": "פופקורן",
+ "🦀": "סרטן",
+ "🦞": "לובסטר",
+ "🍨": "גלידה",
+ "🍩": "סופגניה",
+ "🍪": "עוגיה",
+ "🎂": "עוגת יום הולדת",
+ "🧁": "קפקייק",
+ "🍫": "חפיסת שוקולד",
+ "🍬": "סוכריה",
+ "🍭": "סוכריה על מקל",
+ "🫖": "קנקן תה",
+ "🧃": "קופסת מיץ",
+ "🧉": "מאטה",
+ "🧭": "מצפן",
+ "🏔️": "הר עם פסגה מושלגת",
+ "🌋": "הר געש",
+ "🏕️": "מחנאות",
+ "🏝️": "אי בודד",
+ "🏡": "בית עם גינה",
+ "⛲️": "מזרקה",
+ "🎠": "סוס בקרוסלה",
+ "🎡": "גלגל ענק",
+ "🎢": "רכבת הרים",
+ "💈": "עמוד מספרה",
+ "🚆": "רכבת",
+ "🚋": "קרון חשמלית",
+ "🚍️": "אוטובוס מלפנים",
+ "🚕": "מונית",
+ "🚗": "מכונית",
+ "🚚": "משאית",
+ "🚜": "טרקטור",
+ "🛵": "קטנוע",
+ "🛺": "ריקשה ממונעת",
+ "🛴": "קורקינט",
+ "🛹": "סקייטבורד",
+ "🛼": "גלגיליות",
+ "⚓️": "עוגן",
+ "⛵️": "סירת מפרש",
+ "🛶": "קאנו",
+ "🚤": "סירת מירוץ",
+ "🚢": "ספינה",
+ "✈️": "מטוס",
+ "🚁": "מסוק",
+ "🚠": "קרון רכבל",
+ "🛰️": "לוויין",
+ "🚀": "טיל",
+ "🛸": "צלחת מעופפת",
+ "⏰": "שעון מעורר",
+ "🌙": "סהר",
+ "🌡️": "מדחום",
+ "☀️": "שמש",
+ "🪐": "כוכב לכת עם טבעות",
+ "🌟": "כוכב זוהר",
+ "🌀": "הוריקן",
+ "🌈": "קשת בענן",
+ "☂️": "מטריה",
+ "❄️": "פתית שלג",
+ "☄️": "שביט",
+ "🔥": "אש",
+ "💧": "טיפה",
+ "🌊": "גל",
+ "🎃": "מנורת דלעת",
+ "✨": "נצנוץ",
+ "🎈": "בלון",
+ "🎉": "פצצת קונפטי",
+ "🎏": "דגלים בצורת דגי קוי",
+ "🎀": "סרט מתנה",
+ "🎁": "קופסת מתנה",
+ "🎟️": "כרטיס כניסה",
+ "🏆️": "גביע",
+ "⚽️": "כדורגל",
+ "🏀": "כדור סל",
+ "🏈": "פוטבול אמריקאי",
+ "🎾": "כדור טניס",
+ "🥏": "פריזבי",
+ "🏓": "פינג פונג",
+ "🏸": "בדמינטון",
+ "🤿": "מסיכת צלילה",
+ "🥌": "אבן קרלינג",
+ "🎯": "פגיעה בול",
+ "🪀": "יו-יו",
+ "🪁": "עפיפון",
+ "🔮": "כדור בדולח",
+ "🎲": "קוביית משחק",
+ "🧩": "חלק בפאזל",
+ "🎨": "פלטת צבעים",
+ "🧵": "חוט",
+ "👕": "חולצת טי",
+ "🧦": "גרביים",
+ "👗": "שמלה",
+ "🩳": "מכנסיים קצרים",
+ "🎒": "ילקוט",
+ "👟": "נעל ריצה",
+ "👑": "כתר",
+ "🧢": "כובע מצחייה",
+ "💄": "שפתון",
+ "💍": "טבעת",
+ "💎": "יהלום",
+ "📢": "מגפון",
+ "🎶": "תווים מוזיקליים",
+ "🎙️": "מיקרופון אולפן",
+ "📻️": "רדיו",
+ "🎷": "סקסופון",
+ "🪗": "אקורדיון",
+ "🎸": "גיטרה",
+ "🎺": "חצוצרה",
+ "🎻": "כינור",
+ "🪕": "בנג׳ו",
+ "🥁": "תוף",
+ "☎️": "טלפון רגיל",
+ "🔋": "סוללה",
+ "💿️": "דיסק אופטי",
+ "🧮": "חשבונייה",
+ "🎬️": "קלאפר",
+ "💡": "נורה",
+ "🔦": "פנס",
+ "🏮": "פנס נייר אדום",
+ "📕": "ספר סגור",
+ "🏷️": "תווית",
+ "💳️": "כרטיס אשראי",
+ "✏️": "עיפרון",
+ "🖌️": "מכחול",
+ "🖍️": "צבע פנדה",
+ "📌": "נעץ",
+ "📎": "אטב נייר",
+ "🔑": "מפתח",
+ "🪃": "בומרנג",
+ "🏹": "חץ וקשת",
+ "⚖️": "מאזניים",
+ "🧲": "מגנט",
+ "🧪": "מבחנה",
+ "🧬": "די אנ איי",
+ "🔬": "מיקרוסקופ",
+ "🔭": "טלסקופ",
+ "📡": "צלחת לוויין",
+ "🪑": "כיסא",
+ "🧹": "מטאטא",
+ "🗿": "פסל מאיי הפסחא"
+ },
+ "hu": {
+ "👽️": "földönkívüli",
+ "🤖": "robot",
+ "🧠": "agy",
+ "👁️": "szem",
+ "🧙": "varázsló",
+ "🧚": "tündér",
+ "🧜": "sellő",
+ "🐵": "majomfej",
+ "🦧": "orangután",
+ "🐶": "kutyafej",
+ "🐺": "farkasfej",
+ "🦊": "rókafej",
+ "🦝": "mosómedve",
+ "🐱": "macskafej",
+ "🦁": "oroszlánfej",
+ "🐯": "tigrisfej",
+ "🐴": "lófej",
+ "🦄": "unikornisfej",
+ "🦓": "zebra",
+ "🦌": "szarvas",
+ "🐮": "tehénfej",
+ "🐷": "malacfej",
+ "🐗": "vaddisznó",
+ "🐪": "teve",
+ "🦙": "láma",
+ "🦒": "zsiráf",
+ "🐘": "elefánt",
+ "🦣": "mamut",
+ "🦏": "orrszarvú",
+ "🐭": "egérfej",
+ "🐰": "nyúlfej",
+ "🐿️": "mókus",
+ "🦔": "sün",
+ "🦇": "denevér",
+ "🐻": "medvefej",
+ "🐨": "koala",
+ "🦥": "lajhár",
+ "🦦": "vidra",
+ "🦘": "kenguru",
+ "🐥": "előre néző kiscsibe",
+ "🐦️": "madár",
+ "🕊️": "galamb",
+ "🦆": "kacsa",
+ "🦉": "bagoly",
+ "🦤": "dodó",
+ "🪶": "madártoll",
+ "🦩": "flamingó",
+ "🦚": "páva",
+ "🦜": "papagáj",
+ "🐊": "krokodil",
+ "🐢": "teknős",
+ "🦎": "gyík",
+ "🐍": "kígyó",
+ "🐲": "sárkányfej",
+ "🦕": "sauropoda",
+ "🐳": "fröcskölő bálna",
+ "🐬": "delfin",
+ "🦭": "fóka",
+ "🐟️": "hal",
+ "🐠": "trópusi hal",
+ "🦈": "cápa",
+ "🐙": "polip",
+ "🐚": "tengeri csiga",
+ "🐌": "csiga",
+ "🦋": "pillangó",
+ "🐛": "rovar",
+ "🐝": "méh",
+ "🐞": "katica",
+ "💐": "csokor",
+ "🌹": "rózsa",
+ "🌺": "hibiszkusz",
+ "🌻": "napraforgó",
+ "🌷": "tulipán",
+ "🌲": "örökzöld",
+ "🌳": "lombhullató fa",
+ "🌴": "pálmafa",
+ "🌵": "kaktusz",
+ "🌿": "gyógynövény",
+ "🍁": "juharlevél",
+ "🍇": "szőlő",
+ "🍈": "sárgadinnye",
+ "🍉": "görögdinnye",
+ "🍊": "mandarin",
+ "🍋": "citrom",
+ "🍌": "banán",
+ "🍍": "ananász",
+ "🥭": "mangó",
+ "🍏": "zöld alma",
+ "🍐": "körte",
+ "🍑": "őszibarack",
+ "🍒": "cseresznye",
+ "🍓": "eper",
+ "🫐": "áfonya",
+ "🥝": "kivi",
+ "🍅": "paradicsom",
+ "🫒": "olajbogyó",
+ "🥥": "kókuszdió",
+ "🥑": "avokádó",
+ "🍆": "padlizsán",
+ "🥕": "sárgarépa",
+ "🌽": "kukoricacső",
+ "🌶️": "erőspaprika",
+ "🥬": "leveles zöldség",
+ "🥦": "brokkoli",
+ "🧅": "hagyma",
+ "🍄": "gomba",
+ "🥜": "földimogyoró",
+ "🥐": "croissant",
+ "🥖": "bagett",
+ "🥨": "perec",
+ "🥯": "bagel",
+ "🥞": "palacsinta",
+ "🧇": "gofri",
+ "🍔": "hamburger",
+ "🍕": "pizza",
+ "🌭": "hot dog",
+ "🌮": "taco",
+ "🍿": "pattogatott kukorica",
+ "🦀": "rák",
+ "🦞": "homár",
+ "🍨": "fagylalt",
+ "🍩": "fánk",
+ "🍪": "sütemény",
+ "🎂": "születésnapi torta",
+ "🧁": "cupcake",
+ "🍫": "csokoládé",
+ "🍬": "cukorka",
+ "🍭": "nyalóka",
+ "🫖": "teáskanna",
+ "🧃": "italos doboz",
+ "🧉": "maté",
+ "🧭": "iránytű",
+ "🏔️": "hegy hótakaróval",
+ "🌋": "vulkán",
+ "🏕️": "sátorozás",
+ "🏝️": "lakatlan sziget",
+ "🏡": "ház kerttel",
+ "⛲️": "szökőkút",
+ "🎠": "ló a körhintáról",
+ "🎡": "óriáskerék",
+ "🎢": "hullámvasút",
+ "💈": "fodrászcégér",
+ "🚆": "vonat",
+ "🚋": "villamoskocsi",
+ "🚍️": "érkező busz",
+ "🚕": "taxi",
+ "🚗": "autó",
+ "🚚": "teherautó",
+ "🚜": "traktor",
+ "🛵": "robogó",
+ "🛺": "motoros riksa",
+ "🛴": "roller",
+ "🛹": "gördeszka",
+ "🛼": "görkorcsolya",
+ "⚓️": "vasmacska",
+ "⛵️": "vitorlás hajó",
+ "🛶": "kenu",
+ "🚤": "motoros siklócsónak",
+ "🚢": "hajó",
+ "✈️": "repülőgép",
+ "🚁": "helikopter",
+ "🚠": "hegyi felvonó",
+ "🛰️": "műhold",
+ "🚀": "rakéta",
+ "🛸": "repülő csészealj",
+ "⏰": "ébresztőóra",
+ "🌙": "növekvő hold",
+ "🌡️": "hőmérő",
+ "☀️": "nap",
+ "🪐": "gyűrűs bolygó",
+ "🌟": "fénylő csillag",
+ "🌀": "ciklon",
+ "🌈": "szivárvány",
+ "☂️": "esernyő",
+ "❄️": "hópehely",
+ "☄️": "üstökös",
+ "🔥": "tűz",
+ "💧": "csepp",
+ "🌊": "vízhullám",
+ "🎃": "töklámpás",
+ "✨": "szikrák",
+ "🎈": "léggömb",
+ "🎉": "partikellékek",
+ "🎏": "rizspapír pontyok",
+ "🎀": "szalag",
+ "🎁": "becsomagolt ajándék",
+ "🎟️": "belépőjegyek",
+ "🏆️": "kupa",
+ "⚽️": "foci",
+ "🏀": "kosárlabda",
+ "🏈": "amerikai foci",
+ "🎾": "tenisz",
+ "🥏": "frizbi",
+ "🏓": "pingpong",
+ "🏸": "tollaslabda",
+ "🤿": "búvármaszk",
+ "🥌": "curlingkő",
+ "🎯": "telitalálat",
+ "🪀": "jojó",
+ "🪁": "papírsárkány",
+ "🔮": "kristálygömb",
+ "🎲": "dobókocka",
+ "🧩": "kirakó",
+ "🎨": "festőpaletta",
+ "🧵": "cérna",
+ "👕": "póló",
+ "🧦": "zokni",
+ "👗": "ruha",
+ "🩳": "rövidnadrág",
+ "🎒": "iskolatáska",
+ "👟": "futócipő",
+ "👑": "korona",
+ "🧢": "sildes sapka",
+ "💄": "ajakrúzs",
+ "💍": "gyűrű",
+ "💎": "ékkő",
+ "📢": "hangosbeszélő",
+ "🎶": "hangjegyek",
+ "🎙️": "stúdiómikrofon",
+ "📻️": "rádió",
+ "🎷": "szaxofon",
+ "🪗": "harmonika",
+ "🎸": "gitár",
+ "🎺": "trombita",
+ "🎻": "hegedű",
+ "🪕": "bendzsó",
+ "🥁": "dob",
+ "☎️": "telefon",
+ "🔋": "elem",
+ "💿️": "optikai lemez",
+ "🧮": "abakusz",
+ "🎬️": "csapó",
+ "💡": "villanykörte",
+ "🔦": "zseblámpa",
+ "🏮": "piros papírlámpa",
+ "📕": "becsukott könyv",
+ "🏷️": "címke",
+ "💳️": "hitelkártya",
+ "✏️": "ceruza",
+ "🖌️": "ecset",
+ "🖍️": "zsírkréta",
+ "📌": "rajzszög",
+ "📎": "gemkapocs",
+ "🔑": "kulcs",
+ "🪃": "bumeráng",
+ "🏹": "íj és nyíl",
+ "⚖️": "kétkarú mérleg",
+ "🧲": "mágnes",
+ "🧪": "kémcső",
+ "🧬": "DNS",
+ "🔬": "mikroszkóp",
+ "🔭": "távcső",
+ "📡": "parabolaantenna",
+ "🪑": "szék",
+ "🧹": "seprű",
+ "🗿": "moai"
+ },
+ "id": {
+ "👽️": "alien",
+ "🤖": "robot",
+ "🧠": "otak",
+ "👁️": "satu mata",
+ "🧙": "magi",
+ "🧚": "peri",
+ "🧜": "orang duyung",
+ "🐵": "wajah monyet",
+ "🦧": "orangutan",
+ "🐶": "wajah anjing",
+ "🐺": "serigala",
+ "🦊": "rubah",
+ "🦝": "rakun",
+ "🐱": "wajah kucing",
+ "🦁": "singa",
+ "🐯": "wajah harimau",
+ "🐴": "wajah kuda",
+ "🦄": "unicorn",
+ "🦓": "zebra",
+ "🦌": "rusa",
+ "🐮": "wajah sapi",
+ "🐷": "wajah babi",
+ "🐗": "babi hutan",
+ "🐪": "unta",
+ "🦙": "llama",
+ "🦒": "jerapah",
+ "🐘": "gajah",
+ "🦣": "mamut",
+ "🦏": "badak",
+ "🐭": "wajah tikus",
+ "🐰": "wajah kelinci",
+ "🐿️": "tupai",
+ "🦔": "landak",
+ "🦇": "kelelawar",
+ "🐻": "beruang",
+ "🐨": "koala",
+ "🦥": "kungkang",
+ "🦦": "berang-berang",
+ "🦘": "kanguru",
+ "🐥": "itik bayi menghadap ke depan",
+ "🐦️": "burung",
+ "🕊️": "merpati",
+ "🦆": "bebek",
+ "🦉": "burung hantu",
+ "🦤": "dodo",
+ "🪶": "bulu",
+ "🦩": "flamingo",
+ "🦚": "merak",
+ "🦜": "nuri",
+ "🐊": "buaya",
+ "🐢": "kura-kura",
+ "🦎": "kadal",
+ "🐍": "ular",
+ "🐲": "wajah naga",
+ "🦕": "sauropod",
+ "🐳": "ikan paus menyembur",
+ "🐬": "lumba-lumba",
+ "🦭": "anjing laut",
+ "🐟️": "ikan",
+ "🐠": "ikan tropis",
+ "🦈": "hiu",
+ "🐙": "gurita",
+ "🐚": "cangkang spiral",
+ "🐌": "siput",
+ "🦋": "kupu-kupu",
+ "🐛": "serangga kecil",
+ "🐝": "lebah madu",
+ "🐞": "kumbang betina",
+ "💐": "karangan bunga",
+ "🌹": "mawar",
+ "🌺": "kembang sepatu",
+ "🌻": "bunga matahari",
+ "🌷": "tulip",
+ "🌲": "pohon hijau abadi",
+ "🌳": "pohon meranggas",
+ "🌴": "pohon palem",
+ "🌵": "kaktus",
+ "🌿": "herba",
+ "🍁": "daun maple",
+ "🍇": "anggur",
+ "🍈": "melon",
+ "🍉": "semangka",
+ "🍊": "buah jeruk",
+ "🍋": "lemon",
+ "🍌": "pisang",
+ "🍍": "nanas",
+ "🥭": "mangga",
+ "🍏": "apel hijau",
+ "🍐": "pir",
+ "🍑": "persik",
+ "🍒": "ceri",
+ "🍓": "stroberi",
+ "🫐": "blueberry",
+ "🥝": "buah kiwi",
+ "🍅": "tomat",
+ "🫒": "zaitun",
+ "🥥": "kelapa",
+ "🥑": "alpukat",
+ "🍆": "terung",
+ "🥕": "wortel",
+ "🌽": "bonggol jagung",
+ "🌶️": "cabai pedas",
+ "🥬": "selada hijau",
+ "🥦": "brokoli",
+ "🧅": "bawang bombay",
+ "🍄": "jamur",
+ "🥜": "kacang tanah",
+ "🥐": "croissant",
+ "🥖": "roti baguette",
+ "🥨": "pretzel",
+ "🥯": "bagel",
+ "🥞": "panekuk",
+ "🧇": "wafel",
+ "🍔": "hamburger",
+ "🍕": "pizza",
+ "🌭": "hot dog",
+ "🌮": "taco",
+ "🍿": "popcorn",
+ "🦀": "kepiting",
+ "🦞": "lobster",
+ "🍨": "es krim",
+ "🍩": "donat",
+ "🍪": "biskuit",
+ "🎂": "kue ulang tahun",
+ "🧁": "kue mangkuk",
+ "🍫": "sebatang cokelat",
+ "🍬": "permen",
+ "🍭": "permen lolipop",
+ "🫖": "teko",
+ "🧃": "kotak minuman",
+ "🧉": "teh mate",
+ "🧭": "kompas",
+ "🏔️": "gunung dengan puncak bersalju",
+ "🌋": "gunung berapi",
+ "🏕️": "berkemah",
+ "🏝️": "pulau terpencil",
+ "🏡": "rumah dengan taman",
+ "⛲️": "air mancur",
+ "🎠": "komidi putar",
+ "🎡": "kincir ria",
+ "🎢": "roller coaster",
+ "💈": "tanda salon",
+ "🚆": "kereta",
+ "🚋": "gerbong trem",
+ "🚍️": "bus datang",
+ "🚕": "taksi",
+ "🚗": "mobil",
+ "🚚": "truk pengiriman",
+ "🚜": "traktor",
+ "🛵": "motor skuter",
+ "🛺": "bajaj",
+ "🛴": "otoped",
+ "🛹": "papan luncur",
+ "🛼": "sepatu roda",
+ "⚓️": "jangkar",
+ "⛵️": "perahu layar",
+ "🛶": "kano",
+ "🚤": "perahu cepat",
+ "🚢": "kapal",
+ "✈️": "pesawat",
+ "🚁": "helikopter",
+ "🚠": "kereta gantung",
+ "🛰️": "satelit",
+ "🚀": "roket",
+ "🛸": "piring terbang",
+ "⏰": "jam weker",
+ "🌙": "bulan sabit",
+ "🌡️": "termometer",
+ "☀️": "matahari",
+ "🪐": "planet bercincin",
+ "🌟": "bintang bersinar",
+ "🌀": "topan",
+ "🌈": "pelangi",
+ "☂️": "payung",
+ "❄️": "serpihan salju",
+ "☄️": "komet",
+ "🔥": "api",
+ "💧": "tetesan air",
+ "🌊": "ombak",
+ "🎃": "jack-o-lantern",
+ "✨": "berkilau",
+ "🎈": "balon",
+ "🎉": "party popper",
+ "🎏": "bendera ikan koi",
+ "🎀": "pita",
+ "🎁": "kado",
+ "🎟️": "tiket masuk",
+ "🏆️": "piala",
+ "⚽️": "bola sepak",
+ "🏀": "bola basket",
+ "🏈": "American football",
+ "🎾": "tenis",
+ "🥏": "lempar cakram",
+ "🏓": "ping pong",
+ "🏸": "bulu tangkis",
+ "🤿": "kacamata selam",
+ "🥌": "batu curling",
+ "🎯": "dart",
+ "🪀": "yo-yo",
+ "🪁": "layang-layang",
+ "🔮": "bola kristal",
+ "🎲": "dadu",
+ "🧩": "keping puzzle",
+ "🎨": "palet pelukis",
+ "🧵": "benang",
+ "👕": "kaos",
+ "🧦": "kaus kaki",
+ "👗": "gaun",
+ "🩳": "celana pendek",
+ "🎒": "tas sekolah",
+ "👟": "sepatu lari",
+ "👑": "mahkota",
+ "🧢": "topi berlidah",
+ "💄": "lipstik",
+ "💍": "cincin",
+ "💎": "batu permata",
+ "📢": "pengeras suara",
+ "🎶": "not-not musik",
+ "🎙️": "mikrofon studio",
+ "📻️": "radio",
+ "🎷": "saksofon",
+ "🪗": "akordeon",
+ "🎸": "gitar",
+ "🎺": "trompet",
+ "🎻": "biola",
+ "🪕": "banjo",
+ "🥁": "drum",
+ "☎️": "telepon",
+ "🔋": "baterai",
+ "💿️": "disk optik",
+ "🧮": "sempoa",
+ "🎬️": "papan sutradara",
+ "💡": "bohlam",
+ "🔦": "lampu senter",
+ "🏮": "lampion merah",
+ "📕": "buku tertutup",
+ "🏷️": "label",
+ "💳️": "kartu kredit",
+ "✏️": "pensil",
+ "🖌️": "kuas",
+ "🖍️": "krayon",
+ "📌": "paku penanda",
+ "📎": "klip kertas",
+ "🔑": "kunci",
+ "🪃": "bumerang",
+ "🏹": "busur dan panah",
+ "⚖️": "timbangan gantung",
+ "🧲": "magnet",
+ "🧪": "tabung uji",
+ "🧬": "dna",
+ "🔬": "mikroskop",
+ "🔭": "teleskop",
+ "📡": "antena satelit",
+ "🪑": "bangku",
+ "🧹": "sapu",
+ "🗿": "moai"
+ },
+ "is": {
+ "👽️": "geimvera",
+ "🤖": "vélmennisandlit",
+ "🧠": "heili",
+ "👁️": "auga",
+ "🧙": "galdramaður",
+ "🧚": "álfur",
+ "🧜": "sæbúi",
+ "🐵": "apahöfuð",
+ "🦧": "órangútan",
+ "🐶": "hundshöfuð",
+ "🐺": "úlfur",
+ "🦊": "refur",
+ "🦝": "þvottabjörn",
+ "🐱": "kattarhöfuð",
+ "🦁": "ljón",
+ "🐯": "tígrisdýrshöfuð",
+ "🐴": "hestshöfuð",
+ "🦄": "einhyrningur",
+ "🦓": "sebrahestur",
+ "🦌": "´hjartardýr",
+ "🐮": "kýrhöfuð",
+ "🐷": "svínshöfuð",
+ "🐗": "villisvín",
+ "🐪": "drómedari",
+ "🦙": "lamadýr",
+ "🦒": "gíraffi",
+ "🐘": "fíll",
+ "🦣": "loðfíll",
+ "🦏": "nashyrningur",
+ "🐭": "músarhöfuð",
+ "🐰": "kanínuhöfuð",
+ "🐿️": "jarðíkorni",
+ "🦔": "broddgöltur",
+ "🦇": "leðurblaka",
+ "🐻": "björn",
+ "🐨": "kóalabjörn",
+ "🦥": "letidýr",
+ "🦦": "otur",
+ "🦘": "kengúra",
+ "🐥": "framhlið hænuunga",
+ "🐦️": "fugl",
+ "🕊️": "dúfa",
+ "🦆": "önd",
+ "🦉": "ugla",
+ "🦤": "dúdúfugl",
+ "🪶": "fjöður",
+ "🦩": "flamingói",
+ "🦚": "páfugl",
+ "🦜": "páfagaukur",
+ "🐊": "krókódíll",
+ "🐢": "skjaldbaka",
+ "🦎": "eðla",
+ "🐍": "snákur",
+ "🐲": "drekahöfuð",
+ "🦕": "graseðla",
+ "🐳": "blásandi hvalur",
+ "🐬": "höfrungur",
+ "🦭": "selur",
+ "🐟️": "fiskur",
+ "🐠": "hitabeltisfiskur",
+ "🦈": "hákarl",
+ "🐙": "kolkrabbi",
+ "🐚": "kuðungur",
+ "🐌": "snigill",
+ "🦋": "fiðrildi",
+ "🐛": "skordýr",
+ "🐝": "hunangsfluga",
+ "🐞": "maríuhæna",
+ "💐": "blómvöndur",
+ "🌹": "rós",
+ "🌺": "Havaírós",
+ "🌻": "sólblóm",
+ "🌷": "túlípani",
+ "🌲": "sígrænt tré",
+ "🌳": "sumargrænt tré",
+ "🌴": "pálmatré",
+ "🌵": "kaktus",
+ "🌿": "kryddjurt",
+ "🍁": "hlynslauf",
+ "🍇": "vínber",
+ "🍈": "melóna",
+ "🍉": "vatnsmelóna",
+ "🍊": "mandarína",
+ "🍋": "sítróna",
+ "🍌": "banani",
+ "🍍": "ananas",
+ "🥭": "mangó",
+ "🍏": "grænt epli",
+ "🍐": "pera",
+ "🍑": "ferskja",
+ "🍒": "kirsuber",
+ "🍓": "jarðarber",
+ "🫐": "bláber",
+ "🥝": "kíví",
+ "🍅": "tómatur",
+ "🫒": "ólífa",
+ "🥥": "kókoshneta",
+ "🥑": "avókadó",
+ "🍆": "eggaldin",
+ "🥕": "gulrót",
+ "🌽": "maís",
+ "🌶️": "chilipipar",
+ "🥬": "kál",
+ "🥦": "brokkólí",
+ "🧅": "laukur",
+ "🍄": "sveppur",
+ "🥜": "jarðhneta",
+ "🥐": "Croissant",
+ "🥖": "fransbrauð",
+ "🥨": "saltkringla",
+ "🥯": "beygla",
+ "🥞": "pönnukökur",
+ "🧇": "vaffla",
+ "🍔": "hamborgari",
+ "🍕": "pítsusneið",
+ "🌭": "pylsa í brauði",
+ "🌮": "takó",
+ "🍿": "popp",
+ "🦀": "krabbi",
+ "🦞": "humar",
+ "🍨": "kúluís",
+ "🍩": "kleinuhringur",
+ "🍪": "smákaka",
+ "🎂": "afmæliskaka",
+ "🧁": "bollakaka",
+ "🍫": "súkkulaði",
+ "🍬": "nammi",
+ "🍭": "sleikibrjóstsykur",
+ "🫖": "tekanna",
+ "🧃": "ferna",
+ "🧉": "mate",
+ "🧭": "áttaviti",
+ "🏔️": "snæviþakinn fjallstindur",
+ "🌋": "eldfjall",
+ "🏕️": "tjaldstæði",
+ "🏝️": "eyðieyja",
+ "🏡": "hús með garði",
+ "⛲️": "gosbrunnur",
+ "🎠": "hringekjuhestur",
+ "🎡": "parísarhjól",
+ "🎢": "rússíbani",
+ "💈": "rakarastofa",
+ "🚆": "lest",
+ "🚋": "sporvagn",
+ "🚍️": "strætó á móti",
+ "🚕": "leigubíll",
+ "🚗": "bíll",
+ "🚚": "flutningabíll",
+ "🚜": "dráttarvél",
+ "🛵": "vespa",
+ "🛺": "vélknúinn léttvagn",
+ "🛴": "hlaupahjól",
+ "🛹": "hjólabretti",
+ "🛼": "hjólaskautar",
+ "⚓️": "akkeri",
+ "⛵️": "seglskúta",
+ "🛶": "kanó",
+ "🚤": "hraðbátur",
+ "🚢": "skip",
+ "✈️": "flugvél",
+ "🚁": "þyrla",
+ "🚠": "kláfferja í fjalli",
+ "🛰️": "gervihnöttur",
+ "🚀": "eldflaug",
+ "🛸": "fljúgandi diskur",
+ "⏰": "vekjaraklukka",
+ "🌙": "hálfmáni",
+ "🌡️": "hitamælir",
+ "☀️": "sól",
+ "🪐": "pláneta með hringi",
+ "🌟": "skínandi stjarna",
+ "🌀": "fellibylur",
+ "🌈": "regnbogi",
+ "☂️": "regnhlíf",
+ "❄️": "snjókorn",
+ "☄️": "halastjarna",
+ "🔥": "eldur",
+ "💧": "dropi",
+ "🌊": "alda",
+ "🎃": "hrekkjavökugrasker",
+ "✨": "stjörnur",
+ "🎈": "blaðra",
+ "🎉": "knall",
+ "🎏": "fiskveifur",
+ "🎀": "borði",
+ "🎁": "gjöf",
+ "🎟️": "aðgöngumiðar",
+ "🏆️": "verðlaunabikar",
+ "⚽️": "fótbolti",
+ "🏀": "körfubolti",
+ "🏈": "amerískur fótbolti",
+ "🎾": "tennis",
+ "🥏": "frisbídiskur",
+ "🏓": "borðtennis",
+ "🏸": "badminton",
+ "🤿": "köfunargríma",
+ "🥌": "krullusteinn",
+ "🎯": "skotmark",
+ "🪀": "jójó",
+ "🪁": "flugdreki",
+ "🔮": "kristalskúla",
+ "🎲": "teningur",
+ "🧩": "púsl",
+ "🎨": "litapalletta",
+ "🧵": "tvinni",
+ "👕": "stuttermabolur",
+ "🧦": "sokkar",
+ "👗": "kjóll",
+ "🩳": "stuttbuxur",
+ "🎒": "skólataska",
+ "👟": "íþróttaskór",
+ "👑": "kóróna",
+ "🧢": "derhúfa",
+ "💄": "varalitur",
+ "💍": "hringur",
+ "💎": "gimsteinn",
+ "📢": "Almannavarnahátalari",
+ "🎶": "nótur",
+ "🎙️": "hljóðnemi í hljóðveri",
+ "📻️": "útvarp",
+ "🎷": "saxófónn",
+ "🪗": "harmonika",
+ "🎸": "gítar",
+ "🎺": "trompet",
+ "🎻": "fiðla",
+ "🪕": "banjó",
+ "🥁": "tromma",
+ "☎️": "sími",
+ "🔋": "rafhlaða",
+ "💿️": "blu-ray",
+ "🧮": "talnagrind",
+ "🎬️": "klapptré",
+ "💡": "ljósapera",
+ "🔦": "vasaljós",
+ "🏮": "rauður lampi",
+ "📕": "lokuð bók",
+ "🏷️": "merkimiði",
+ "💳️": "kreditkort",
+ "✏️": "blýantur",
+ "🖌️": "málningarpensill",
+ "🖍️": "vaxlitur",
+ "📌": "teiknibóla",
+ "📎": "bréfaklemma",
+ "🔑": "lykill",
+ "🪃": "búmerang",
+ "🏹": "bogi og ör",
+ "⚖️": "vog",
+ "🧲": "segull",
+ "🧪": "tilraunaglas",
+ "🧬": "dna",
+ "🔬": "smásjá",
+ "🔭": "sjónauki",
+ "📡": "gervihnattaloftnet",
+ "🪑": "stóll",
+ "🧹": "kústur",
+ "🗿": "moyai-stytta"
+ },
+ "it": {
+ "👽️": "alieno",
+ "🤖": "faccina di robot",
+ "🧠": "cervello",
+ "👁️": "occhio",
+ "🧙": "mago",
+ "🧚": "fata",
+ "🧜": "sirena",
+ "🐵": "muso di scimmia",
+ "🦧": "orangotango",
+ "🐶": "muso di cane",
+ "🐺": "lupo",
+ "🦊": "volpe",
+ "🦝": "procione",
+ "🐱": "muso di gatto",
+ "🦁": "leone",
+ "🐯": "muso di tigre",
+ "🐴": "muso di cavallo",
+ "🦄": "unicorno",
+ "🦓": "zebra",
+ "🦌": "cervo",
+ "🐮": "muso di mucca",
+ "🐷": "muso di maiale",
+ "🐗": "cinghiale",
+ "🐪": "dromedario",
+ "🦙": "lama",
+ "🦒": "giraffa",
+ "🐘": "elefante",
+ "🦣": "mammut",
+ "🦏": "rinoceronte",
+ "🐭": "muso di topo",
+ "🐰": "muso di coniglio",
+ "🐿️": "scoiattolo",
+ "🦔": "riccio",
+ "🦇": "pipistrello",
+ "🐻": "orso",
+ "🐨": "koala",
+ "🦥": "bradipo",
+ "🦦": "lontra",
+ "🦘": "canguro",
+ "🐥": "pulcino visto di fronte",
+ "🐦️": "uccello",
+ "🕊️": "colomba",
+ "🦆": "anatra",
+ "🦉": "gufo",
+ "🦤": "dodo",
+ "🪶": "piuma",
+ "🦩": "fenicottero",
+ "🦚": "pavone",
+ "🦜": "pappagallo",
+ "🐊": "coccodrillo",
+ "🐢": "tartaruga",
+ "🦎": "lucertola",
+ "🐍": "serpente",
+ "🐲": "testa di drago",
+ "🦕": "sauropode",
+ "🐳": "balena che spruzza acqua",
+ "🐬": "delfino",
+ "🦭": "foca",
+ "🐟️": "pesce",
+ "🐠": "pesce tropicale",
+ "🦈": "squalo",
+ "🐙": "polpo",
+ "🐚": "conchiglia",
+ "🐌": "lumaca",
+ "🦋": "farfalla",
+ "🐛": "insetto",
+ "🐝": "ape",
+ "🐞": "coccinella",
+ "💐": "mazzo di fiori",
+ "🌹": "rosa",
+ "🌺": "ibisco",
+ "🌻": "girasole",
+ "🌷": "tulipano",
+ "🌲": "albero sempreverde",
+ "🌳": "albero deciduo",
+ "🌴": "palma",
+ "🌵": "cactus",
+ "🌿": "pianta",
+ "🍁": "foglia d’acero",
+ "🍇": "uva",
+ "🍈": "melone",
+ "🍉": "anguria",
+ "🍊": "mandarino",
+ "🍋": "limone",
+ "🍌": "banana",
+ "🍍": "ananas",
+ "🥭": "mango",
+ "🍏": "mela verde",
+ "🍐": "pera",
+ "🍑": "pesca",
+ "🍒": "ciliegie",
+ "🍓": "fragola",
+ "🫐": "mirtilli",
+ "🥝": "kiwi",
+ "🍅": "pomodoro",
+ "🫒": "oliva",
+ "🥥": "cocco",
+ "🥑": "avocado",
+ "🍆": "melanzana",
+ "🥕": "carota",
+ "🌽": "pannocchia",
+ "🌶️": "peperoncino",
+ "🥬": "verdure a foglia",
+ "🥦": "broccoli",
+ "🧅": "cipolla",
+ "🍄": "fungo",
+ "🥜": "arachidi",
+ "🥐": "croissant",
+ "🥖": "baguette",
+ "🥨": "pretzel",
+ "🥯": "bagel",
+ "🥞": "pancake",
+ "🧇": "waffle",
+ "🍔": "hamburger",
+ "🍕": "pizza",
+ "🌭": "hot dog",
+ "🌮": "taco",
+ "🍿": "popcorn",
+ "🦀": "granchio",
+ "🦞": "aragosta",
+ "🍨": "coppa di gelato",
+ "🍩": "ciambella",
+ "🍪": "biscotto",
+ "🎂": "torta di compleanno",
+ "🧁": "cupcake",
+ "🍫": "cioccolato",
+ "🍬": "caramella",
+ "🍭": "lecca lecca",
+ "🫖": "teiera",
+ "🧃": "bevanda monodose",
+ "🧉": "mate",
+ "🧭": "bussola",
+ "🏔️": "montagna innevata",
+ "🌋": "vulcano",
+ "🏕️": "campeggio",
+ "🏝️": "isola deserta",
+ "🏡": "casa con giardino",
+ "⛲️": "fontana",
+ "🎠": "cavallo da giostra",
+ "🎡": "ruota panoramica",
+ "🎢": "montagne russe",
+ "💈": "barbiere",
+ "🚆": "treno",
+ "🚋": "vagone del tram",
+ "🚍️": "bus in arrivo",
+ "🚕": "taxi",
+ "🚗": "auto",
+ "🚚": "camion",
+ "🚜": "trattore",
+ "🛵": "scooter",
+ "🛺": "risciò a motore",
+ "🛴": "monopattino",
+ "🛹": "skateboard",
+ "🛼": "pattini a rotelle",
+ "⚓️": "ancora",
+ "⛵️": "barca a vela",
+ "🛶": "canoa",
+ "🚤": "motoscafo",
+ "🚢": "nave",
+ "✈️": "aeroplano",
+ "🚁": "elicottero",
+ "🚠": "funivia",
+ "🛰️": "satellite",
+ "🚀": "razzo",
+ "🛸": "disco volante",
+ "⏰": "sveglia",
+ "🌙": "spicchio di luna",
+ "🌡️": "termometro",
+ "☀️": "sole",
+ "🪐": "pianeta con satellite",
+ "🌟": "stella che brilla",
+ "🌀": "ciclone",
+ "🌈": "arcobaleno",
+ "☂️": "ombrello",
+ "❄️": "fiocco di neve",
+ "☄️": "cometa",
+ "🔥": "fuoco",
+ "💧": "goccia",
+ "🌊": "onda",
+ "🎃": "zucca di Halloween",
+ "✨": "stelline",
+ "🎈": "palloncino",
+ "🎉": "spara coriandoli",
+ "🎏": "aquilone a forma di carpa",
+ "🎀": "fiocco",
+ "🎁": "regalo",
+ "🎟️": "biglietto d’ingresso",
+ "🏆️": "coppa",
+ "⚽️": "pallone da calcio",
+ "🏀": "palla da pallacanestro",
+ "🏈": "football americano",
+ "🎾": "tennis",
+ "🥏": "frisbee",
+ "🏓": "ping pong",
+ "🏸": "badminton",
+ "🤿": "maschera da sub",
+ "🥌": "stone da curling",
+ "🎯": "bersaglio",
+ "🪀": "yo-yo",
+ "🪁": "aquilone",
+ "🔮": "sfera di cristallo",
+ "🎲": "dado",
+ "🧩": "pezzo di puzzle",
+ "🎨": "tavolozza",
+ "🧵": "filo",
+ "👕": "t-shirt",
+ "🧦": "calzini",
+ "👗": "vestito",
+ "🩳": "pantaloncini",
+ "🎒": "zaino",
+ "👟": "scarpa sportiva",
+ "👑": "corona",
+ "🧢": "cappello con visiera",
+ "💄": "rossetto",
+ "💍": "anello",
+ "💎": "gemma",
+ "📢": "altoparlante",
+ "🎶": "note musicali",
+ "🎙️": "microfono radiofonico",
+ "📻️": "radio",
+ "🎷": "sassofono",
+ "🪗": "fisarmonica",
+ "🎸": "chitarra",
+ "🎺": "tromba",
+ "🎻": "violino",
+ "🪕": "banjo",
+ "🥁": "tamburo",
+ "☎️": "telefono fisso",
+ "🔋": "batteria",
+ "💿️": "disco ottico",
+ "🧮": "abaco",
+ "🎬️": "ciak",
+ "💡": "lampadina",
+ "🔦": "torcia",
+ "🏮": "lanterna rossa",
+ "📕": "libro chiuso",
+ "🏷️": "etichetta",
+ "💳️": "carta di credito",
+ "✏️": "matita",
+ "🖌️": "pennello",
+ "🖍️": "pastello a cera",
+ "📌": "puntina",
+ "📎": "graffetta",
+ "🔑": "chiave",
+ "🪃": "boomerang",
+ "🏹": "arco e freccia",
+ "⚖️": "bilancia a doppio piatto",
+ "🧲": "calamita",
+ "🧪": "provetta",
+ "🧬": "dna",
+ "🔬": "microscopio",
+ "🔭": "telescopio",
+ "📡": "antenna satellitare",
+ "🪑": "sedia",
+ "🧹": "scopa",
+ "🗿": "Moai"
+ },
+ "ja": {
+ "👽️": "エイリアン",
+ "🤖": "ロボット",
+ "🧠": "脳",
+ "👁️": "片目",
+ "🧙": "魔法使い",
+ "🧚": "妖精",
+ "🧜": "人魚",
+ "🐵": "サルの顔",
+ "🦧": "オランウータン",
+ "🐶": "イヌの顔",
+ "🐺": "オオカミの顔",
+ "🦊": "キツネの顔",
+ "🦝": "アライグマ",
+ "🐱": "ネコの顔",
+ "🦁": "ライオンの顔",
+ "🐯": "トラの顔",
+ "🐴": "馬の顔",
+ "🦄": "ユニコーンの顔",
+ "🦓": "シマウマ",
+ "🦌": "シカ",
+ "🐮": "牛の顔",
+ "🐷": "ブタの顔",
+ "🐗": "イノシシ",
+ "🐪": "ラクダ",
+ "🦙": "ラマ",
+ "🦒": "キリン",
+ "🐘": "ゾウ",
+ "🦣": "マンモス",
+ "🦏": "サイ",
+ "🐭": "ネズミの顔",
+ "🐰": "ウサギの顔",
+ "🐿️": "リス",
+ "🦔": "ハリネズミ",
+ "🦇": "コウモリ",
+ "🐻": "クマの顔",
+ "🐨": "コアラ",
+ "🦥": "ナマケモノ",
+ "🦦": "カワウソ",
+ "🦘": "カンガルー",
+ "🐥": "前を向いているひよこ",
+ "🐦️": "鳥",
+ "🕊️": "ハト",
+ "🦆": "カモ",
+ "🦉": "フクロウ",
+ "🦤": "ドードー",
+ "🪶": "羽",
+ "🦩": "フラミンゴ",
+ "🦚": "クジャク",
+ "🦜": "オウム",
+ "🐊": "ワニ",
+ "🐢": "カメ",
+ "🦎": "トカゲ",
+ "🐍": "ヘビ",
+ "🐲": "ドラゴンの顔",
+ "🦕": "草食恐竜",
+ "🐳": "潮吹きクジラ",
+ "🐬": "イルカ",
+ "🦭": "アザラシ",
+ "🐟️": "魚",
+ "🐠": "熱帯魚",
+ "🦈": "サメ",
+ "🐙": "タコ",
+ "🐚": "巻き貝",
+ "🐌": "かたつむり",
+ "🦋": "チョウ",
+ "🐛": "毛虫",
+ "🐝": "ミツバチ",
+ "🐞": "テントウムシ",
+ "💐": "花束",
+ "🌹": "バラ",
+ "🌺": "ハイビスカス",
+ "🌻": "ヒマワリ",
+ "🌷": "チューリップ",
+ "🌲": "常緑樹",
+ "🌳": "落葉樹",
+ "🌴": "ヤシの木",
+ "🌵": "サボテン",
+ "🌿": "ハーブ",
+ "🍁": "かえで",
+ "🍇": "ぶどう",
+ "🍈": "メロン",
+ "🍉": "スイカ",
+ "🍊": "みかん",
+ "🍋": "レモン",
+ "🍌": "バナナ",
+ "🍍": "パイナップル",
+ "🥭": "マンゴー",
+ "🍏": "青リンゴ",
+ "🍐": "洋ナシ",
+ "🍑": "桃",
+ "🍒": "さくらんぼ",
+ "🍓": "いちご",
+ "🫐": "ブルーベリー",
+ "🥝": "キウイフルーツ",
+ "🍅": "トマト",
+ "🫒": "オリーブ",
+ "🥥": "ココナツ",
+ "🥑": "アボカド",
+ "🍆": "ナス",
+ "🥕": "人参",
+ "🌽": "とうもろこし",
+ "🌶️": "とうがらし",
+ "🥬": "葉野菜",
+ "🥦": "ブロッコリー",
+ "🧅": "タマネギ",
+ "🍄": "キノコ",
+ "🥜": "ピーナッツ",
+ "🥐": "クロワッサン",
+ "🥖": "バゲット",
+ "🥨": "プレッツェル",
+ "🥯": "ベーグル",
+ "🥞": "パンケーキ",
+ "🧇": "ワッフル",
+ "🍔": "ハンバーガー",
+ "🍕": "ピザ",
+ "🌭": "ホットドッグ",
+ "🌮": "タコス",
+ "🍿": "ポップコーン",
+ "🦀": "カニ",
+ "🦞": "ザリガニ",
+ "🍨": "アイスクリーム",
+ "🍩": "ドーナツ",
+ "🍪": "クッキー",
+ "🎂": "バースデーケーキ",
+ "🧁": "カップケーキ",
+ "🍫": "チョコレート",
+ "🍬": "キャンディ",
+ "🍭": "ぺろぺろキャンディ",
+ "🫖": "ティーポット",
+ "🧃": "紙パック飲料",
+ "🧉": "マテ茶",
+ "🧭": "コンパス",
+ "🏔️": "雪山",
+ "🌋": "火山",
+ "🏕️": "キャンプ",
+ "🏝️": "無人島",
+ "🏡": "庭付きの家",
+ "⛲️": "噴水",
+ "🎠": "メリーゴーランド",
+ "🎡": "観覧車",
+ "🎢": "ジェットコースター",
+ "💈": "床屋",
+ "🚆": "電車正面",
+ "🚋": "路面電車",
+ "🚍️": "バス正面",
+ "🚕": "タクシー",
+ "🚗": "自動車",
+ "🚚": "トラック",
+ "🚜": "トラクター",
+ "🛵": "スクーター",
+ "🛺": "三輪タクシー",
+ "🛴": "キックボード",
+ "🛹": "スケートボード",
+ "🛼": "ローラースケート",
+ "⚓️": "錨",
+ "⛵️": "ヨット",
+ "🛶": "カヌー",
+ "🚤": "スピードボート",
+ "🚢": "船",
+ "✈️": "飛行機",
+ "🚁": "ヘリコプター",
+ "🚠": "ケーブルカー",
+ "🛰️": "人工衛星",
+ "🚀": "ロケット",
+ "🛸": "空飛ぶ円盤",
+ "⏰": "目覚まし時計",
+ "🌙": "三日月",
+ "🌡️": "温度計",
+ "☀️": "太陽",
+ "🪐": "環のある惑星",
+ "🌟": "きらきら星",
+ "🌀": "渦巻き",
+ "🌈": "虹",
+ "☂️": "傘",
+ "❄️": "雪の結晶",
+ "☄️": "彗星",
+ "🔥": "火",
+ "💧": "水滴",
+ "🌊": "波",
+ "🎃": "ハロウィンかぼちゃ",
+ "✨": "きらきら",
+ "🎈": "風船",
+ "🎉": "クラッカー",
+ "🎏": "こいのぼり",
+ "🎀": "リボン",
+ "🎁": "プレゼント",
+ "🎟️": "入場券",
+ "🏆️": "トロフィー",
+ "⚽️": "サッカー",
+ "🏀": "バスケットボール",
+ "🏈": "アメフト",
+ "🎾": "テニス",
+ "🥏": "フリスビー",
+ "🏓": "卓球",
+ "🏸": "バドミントン",
+ "🤿": "ダイビング マスク",
+ "🥌": "カーリング",
+ "🎯": "的",
+ "🪀": "ヨーヨー",
+ "🪁": "たこ",
+ "🔮": "水晶玉",
+ "🎲": "サイコロ",
+ "🧩": "ジグソーパズル",
+ "🎨": "絵の具パレット",
+ "🧵": "糸",
+ "👕": "Tシャツ",
+ "🧦": "ソックス",
+ "👗": "ワンピース",
+ "🩳": "ショーツ",
+ "🎒": "バックパック",
+ "👟": "スニーカー",
+ "👑": "王冠",
+ "🧢": "キャップ",
+ "💄": "口紅",
+ "💍": "指輪",
+ "💎": "宝石",
+ "📢": "拡声器",
+ "🎶": "複数の音符",
+ "🎙️": "スタジオマイク",
+ "📻️": "ラジオ",
+ "🎷": "サックス",
+ "🪗": "アコーディオン",
+ "🎸": "ギター",
+ "🎺": "トランペット",
+ "🎻": "バイオリン",
+ "🪕": "バンジョー",
+ "🥁": "ドラム",
+ "☎️": "固定電話",
+ "🔋": "電池",
+ "💿️": "CD",
+ "🧮": "そろばん",
+ "🎬️": "カチンコ",
+ "💡": "電球",
+ "🔦": "懐中電灯",
+ "🏮": "赤ちょうちん",
+ "📕": "閉じた本",
+ "🏷️": "荷札",
+ "💳️": "クレジットカード",
+ "✏️": "鉛筆",
+ "🖌️": "絵筆",
+ "🖍️": "クレヨン",
+ "📌": "押しピン",
+ "📎": "クリップ",
+ "🔑": "鍵",
+ "🪃": "ブーメラン",
+ "🏹": "弓矢",
+ "⚖️": "天秤",
+ "🧲": "U字型磁石",
+ "🧪": "試験管",
+ "🧬": "DNA",
+ "🔬": "顕微鏡",
+ "🔭": "望遠鏡",
+ "📡": "パラボラアンテナ",
+ "🪑": "椅子",
+ "🧹": "ほうき",
+ "🗿": "モアイ"
+ },
+ "ka": {
+ "👽️": "უცხოპლანეტელი",
+ "🤖": "რობოტის სახე",
+ "🧠": "ტვინი",
+ "👁️": "თვალი",
+ "🧙": "ჯადოქარი",
+ "🧚": "ფერია",
+ "🧜": "ადამიანთევზა",
+ "🐵": "მაიმუნის სახე",
+ "🦧": "ორანგუტანი",
+ "🐶": "ძაღლის სახე",
+ "🐺": "მგლის სახე",
+ "🦊": "მელიის თავი",
+ "🦝": "ენოტი",
+ "🐱": "კატის სახე",
+ "🦁": "ლომის სახე",
+ "🐯": "ვეფხვის სახე",
+ "🐴": "ცხენის სახე",
+ "🦄": "ზღაპრული მარტორქის სახე",
+ "🦓": "ზებრა",
+ "🦌": "ირემი",
+ "🐮": "ძროხის სახე",
+ "🐷": "ღორის სახე",
+ "🐗": "ტახი",
+ "🐪": "აქლემი",
+ "🦙": "ლამა",
+ "🦒": "ჟირაფი",
+ "🐘": "სპილო",
+ "🦣": "მამონტი",
+ "🦏": "მარტორქა",
+ "🐭": "თაგვის სახე",
+ "🐰": "კურდღლის სახე",
+ "🐿️": "ციყვი",
+ "🦔": "ზღარბი",
+ "🦇": "ღამურა",
+ "🐻": "დათვის სახე",
+ "🐨": "კოალა",
+ "🦥": "ზარმაცა",
+ "🦦": "წავი",
+ "🦘": "კენგურუ",
+ "🐥": "პატარა წიწილა წინიდან",
+ "🐦️": "ჩიტი",
+ "🕊️": "მტრედი",
+ "🦆": "იხვი",
+ "🦉": "ბუ",
+ "🦤": "დოდო",
+ "🪶": "ბუმბული",
+ "🦩": "ფლამინგო",
+ "🦚": "ფარშევანგი",
+ "🦜": "თუთიყუში",
+ "🐊": "ნიანგი",
+ "🐢": "კუ",
+ "🦎": "ხვლიკი",
+ "🐍": "გველი",
+ "🐲": "დრაკონის სახე",
+ "🦕": "ზაუროპოდი",
+ "🐳": "ვეშაპი ჭავლით",
+ "🐬": "დელფინი",
+ "🦭": "სელაპი",
+ "🐟️": "თევზი",
+ "🐠": "ტროპიკული თევზი",
+ "🦈": "ზვიგენი",
+ "🐙": "რვაფეხა",
+ "🐚": "სპირალური ნიჟარა",
+ "🐌": "ლოკოკინა",
+ "🦋": "პეპელა",
+ "🐛": "ბაღლინჯო",
+ "🐝": "ფუტკარი",
+ "🐞": "ჭიამაია",
+ "💐": "თაიგული",
+ "🌹": "ვარდი",
+ "🌺": "ჰიბისკუსი",
+ "🌻": "მზესუმზირა",
+ "🌷": "ტიტა",
+ "🌲": "მარადმწვანე",
+ "🌳": "ფოთლოვანი ხე",
+ "🌴": "პალმა",
+ "🌵": "კაქტუსი",
+ "🌿": "სამკურნალო მცენარე",
+ "🍁": "ნეკერჩხლის ფოთოლი",
+ "🍇": "ყურძენი",
+ "🍈": "ნესვი",
+ "🍉": "საზამთრო",
+ "🍊": "მანდარინი",
+ "🍋": "ლიმონი",
+ "🍌": "ბანანი",
+ "🍍": "ანანასი",
+ "🥭": "მანგო",
+ "🍏": "მწვანე ვაშლი",
+ "🍐": "მსხალი",
+ "🍑": "ატამი",
+ "🍒": "ალუბალი",
+ "🍓": "მარწყვი",
+ "🫐": "მოცვი",
+ "🥝": "კივი",
+ "🍅": "პამიდორი",
+ "🫒": "ზეითუნი",
+ "🥥": "ქოქოსი",
+ "🥑": "ავოკადო",
+ "🍆": "ბადრიჯანი",
+ "🥕": "სტაფილო",
+ "🌽": "სიმინდის ტარო",
+ "🌶️": "ცხარე წიწაკა",
+ "🥬": "სალათის ფოთოლი",
+ "🥦": "ბროკოლი",
+ "🧅": "ხახვი",
+ "🍄": "სოკო",
+ "🥜": "მიწის თხილი",
+ "🥐": "კრუასანი",
+ "🥖": "ბაგეტი",
+ "🥨": "პრეცელი",
+ "🥯": "ბეიგელი",
+ "🥞": "ბლინები",
+ "🧇": "ვაფლი",
+ "🍔": "ჰამბურგერი",
+ "🍕": "პიცა",
+ "🌭": "ჰოთდოგი",
+ "🌮": "ტაკო",
+ "🍿": "ბატი-ბუტი",
+ "🦀": "კიბორჩხალა",
+ "🦞": "კიბო",
+ "🍨": "ნაყინი",
+ "🍩": "დონატი",
+ "🍪": "ფხვიერი ნამცხვარი",
+ "🎂": "დაბადების დღის ტორტი",
+ "🧁": "ქაფქეიქი",
+ "🍫": "შოკოლადის ფილა",
+ "🍬": "კანფეტი",
+ "🍭": "კანფეტი ჯოხზე",
+ "🫖": "ჩაიდანი",
+ "🧃": "წვენი პაკეტში",
+ "🧉": "მატე",
+ "🧭": "კომპასი",
+ "🏔️": "თოვლით დაფარული მთა",
+ "🌋": "ვულკანი",
+ "🏕️": "კემპინგი",
+ "🏝️": "უკაცრიელი კუნძული",
+ "🏡": "სახლი ბაღით",
+ "⛲️": "შადრევანი",
+ "🎠": "კარუსელის ცხენი",
+ "🎡": "ეშმაკის ბორბალი",
+ "🎢": "ამერიკული გორაკები",
+ "💈": "დალაქის სვეტი",
+ "🚆": "მატარებელი",
+ "🚋": "ტრამვაის ვაგონი",
+ "🚍️": "მომავალი ავტობუსი",
+ "🚕": "ტაქსი",
+ "🚗": "ავტომობილი",
+ "🚚": "მიმწოდებელი სატვირთო მანქანა",
+ "🚜": "ტრაქტორი",
+ "🛵": "სკუტერი ძრავით",
+ "🛺": "ავტორიქშა",
+ "🛴": "ფეხის სკუტერი",
+ "🛹": "სკეიტბორდი",
+ "🛼": "გორგოლაჭიანი ციგურები",
+ "⚓️": "ღუზა",
+ "⛵️": "იალქნიანი ნავი",
+ "🛶": "კანოე",
+ "🚤": "გლისერი",
+ "🚢": "გემი",
+ "✈️": "თვითმფრინავი",
+ "🚁": "ვერტმფრენი",
+ "🚠": "მთის საბაგირო",
+ "🛰️": "თანამგზავრი",
+ "🚀": "რაკეტა",
+ "🛸": "მფრინავი თეფში",
+ "⏰": "მაღვიძარა",
+ "🌙": "ნამგალა მთვარე",
+ "🌡️": "თერმომეტრი",
+ "☀️": "მზე",
+ "🪐": "პლანეტა სარტყელით",
+ "🌟": "მბრწყინავი ვარსკვლავი",
+ "🌀": "ციკლონი",
+ "🌈": "ცისარტყელა",
+ "☂️": "ქოლგა",
+ "❄️": "თოვლის ფანტელი",
+ "☄️": "კომეტა",
+ "🔥": "ცეცხლი",
+ "💧": "წვეთი",
+ "🌊": "წყლის ტალღა",
+ "🎃": "ჰელოუინის გოგრა",
+ "✨": "ნაპერწკლები",
+ "🎈": "ბუშტი",
+ "🎉": "ტკაცუნა",
+ "🎏": "კობრებიანი ალამი",
+ "🎀": "ლენტი",
+ "🎁": "შეფუთული საჩუქარი",
+ "🎟️": "ბილეთები",
+ "🏆️": "პრიზი",
+ "⚽️": "ფეხბურთი",
+ "🏀": "კალათბურთი",
+ "🏈": "ამერიკული ფეხბურთი",
+ "🎾": "ჩოგბურთი",
+ "🥏": "მფრინავი დისკი",
+ "🏓": "მაგიდის ჩოგბურთი",
+ "🏸": "ბადმინტონი",
+ "🤿": "წყლის ნიღაბი",
+ "🥌": "კერლინგის ქვა",
+ "🎯": "პირდაპირი მოხვედრა",
+ "🪀": "იო-იო",
+ "🪁": "ფრანი",
+ "🔮": "კრისტალის ბურთი",
+ "🎲": "კამათელი",
+ "🧩": "პაზლი",
+ "🎨": "მხატვრის პალიტრა",
+ "🧵": "ძაფის კოჭა",
+ "👕": "მაისური",
+ "🧦": "წინდები",
+ "👗": "კაბა",
+ "🩳": "შორტები",
+ "🎒": "სკოლის ზურგჩანთა",
+ "👟": "ბოტასი",
+ "👑": "გვირგვინი",
+ "🧢": "ბეისბოლის კეპი",
+ "💄": "ტუჩის პომადა",
+ "💍": "ბეჭედი",
+ "💎": "ძვირფასი ქვა",
+ "📢": "რუპორი",
+ "🎶": "მუსიკალური ნოტები",
+ "🎙️": "სტუდიური მიკროფონი",
+ "📻️": "რადიო",
+ "🎷": "საქსოფონი",
+ "🪗": "აკორდეონი",
+ "🎸": "გიტარა",
+ "🎺": "საყვირი",
+ "🎻": "ვიოლინო",
+ "🪕": "ბანჯო",
+ "🥁": "ბარაბანი",
+ "☎️": "ტელეფონი",
+ "🔋": "ბატარეა",
+ "💿️": "ოპტიკური დისკი",
+ "🧮": "საანგარიშო დაფა",
+ "🎬️": "ნუმერატორი ტკაცუნათი",
+ "💡": "ნათურა",
+ "🔦": "ფანარი",
+ "🏮": "ქაღალდის წითელი ფარანი",
+ "📕": "დახურული წიგნი",
+ "🏷️": "იარლიყი",
+ "💳️": "საკრედიტო ბარათი",
+ "✏️": "ფანქარი",
+ "🖌️": "სახატავი ფუნჯი",
+ "🖍️": "ფერადი ფანქარი",
+ "📌": "ჭიკარტი",
+ "📎": "ქაღალდის სამაგრი",
+ "🔑": "გასაღები",
+ "🪃": "ბუმერანგი",
+ "🏹": "მშვილდ-ისარი",
+ "⚖️": "ბერკეტიანი სასწორი",
+ "🧲": "მაგნიტი",
+ "🧪": "სინჯარა",
+ "🧬": "დნმ",
+ "🔬": "მიკროსკოპი",
+ "🔭": "ტელესკოპი",
+ "📡": "თანამგზავრული ანტენა",
+ "🪑": "სკამი",
+ "🧹": "ცოცხი",
+ "🗿": "მოაი"
+ },
+ "ko": {
+ "👽️": "외계인",
+ "🤖": "로봇 얼굴",
+ "🧠": "뇌",
+ "👁️": "눈",
+ "🧙": "마법사",
+ "🧚": "요정",
+ "🧜": "인어",
+ "🐵": "원숭이 얼굴",
+ "🦧": "오랑우탄",
+ "🐶": "강아지 얼굴",
+ "🐺": "늑대 얼굴",
+ "🦊": "여우 얼굴",
+ "🦝": "너구리",
+ "🐱": "고양이 얼굴",
+ "🦁": "사자 얼굴",
+ "🐯": "호랑이 얼굴",
+ "🐴": "말 얼굴",
+ "🦄": "유니콘 얼굴",
+ "🦓": "얼룩말",
+ "🦌": "사슴",
+ "🐮": "소 얼굴",
+ "🐷": "돼지 얼굴",
+ "🐗": "멧돼지",
+ "🐪": "낙타",
+ "🦙": "라마",
+ "🦒": "기린",
+ "🐘": "코끼리",
+ "🦣": "매머드",
+ "🦏": "코뿔소",
+ "🐭": "쥐 얼굴",
+ "🐰": "토끼 얼굴",
+ "🐿️": "얼룩다람쥐",
+ "🦔": "고슴도치",
+ "🦇": "박쥐",
+ "🐻": "곰 얼굴",
+ "🐨": "코알라",
+ "🦥": "나무늘보",
+ "🦦": "수달",
+ "🦘": "캥거루",
+ "🐥": "정면을 향해 날개를 편 병아리",
+ "🐦️": "새",
+ "🕊️": "비둘기",
+ "🦆": "오리",
+ "🦉": "부엉이",
+ "🦤": "도도새",
+ "🪶": "깃털",
+ "🦩": "홍학",
+ "🦚": "공작",
+ "🦜": "앵무새",
+ "🐊": "악어",
+ "🐢": "거북이",
+ "🦎": "도마뱀",
+ "🐍": "뱀",
+ "🐲": "용 얼굴",
+ "🦕": "초식 공룡",
+ "🐳": "물 뿜는 고래",
+ "🐬": "돌고래",
+ "🦭": "물개",
+ "🐟️": "물고기",
+ "🐠": "열대어",
+ "🦈": "상어",
+ "🐙": "문어",
+ "🐚": "달팽이집",
+ "🐌": "달팽이",
+ "🦋": "나비",
+ "🐛": "송충이",
+ "🐝": "꿀벌",
+ "🐞": "무당벌레",
+ "💐": "꽃다발",
+ "🌹": "장미꽃",
+ "🌺": "무궁화",
+ "🌻": "해바라기",
+ "🌷": "튤립",
+ "🌲": "소나무",
+ "🌳": "나무",
+ "🌴": "야자수",
+ "🌵": "선인장",
+ "🌿": "풀",
+ "🍁": "단풍잎",
+ "🍇": "포도",
+ "🍈": "멜론",
+ "🍉": "수박",
+ "🍊": "귤",
+ "🍋": "레몬",
+ "🍌": "바나나",
+ "🍍": "파인애플",
+ "🥭": "망고",
+ "🍏": "초록 사과",
+ "🍐": "배",
+ "🍑": "복숭아",
+ "🍒": "체리",
+ "🍓": "딸기",
+ "🫐": "블루베리",
+ "🥝": "키위",
+ "🍅": "토마토",
+ "🫒": "올리브",
+ "🥥": "코코넛",
+ "🥑": "아보카도",
+ "🍆": "가지",
+ "🥕": "당근",
+ "🌽": "옥수수",
+ "🌶️": "홍고추",
+ "🥬": "녹색 채소",
+ "🥦": "브로콜리",
+ "🧅": "양파",
+ "🍄": "버섯",
+ "🥜": "땅콩",
+ "🥐": "크루아상",
+ "🥖": "바게트",
+ "🥨": "프레첼",
+ "🥯": "베이글",
+ "🥞": "팬케이크",
+ "🧇": "와플",
+ "🍔": "햄버거",
+ "🍕": "피자",
+ "🌭": "핫도그",
+ "🌮": "타코",
+ "🍿": "팝콘",
+ "🦀": "꽃게",
+ "🦞": "바닷가재",
+ "🍨": "아이스크림",
+ "🍩": "도넛",
+ "🍪": "쿠키",
+ "🎂": "생일 케이크",
+ "🧁": "컵케이크",
+ "🍫": "초콜렛",
+ "🍬": "사탕",
+ "🍭": "롤리팝",
+ "🫖": "찻주전자",
+ "🧃": "음료 팩",
+ "🧉": "마테차",
+ "🧭": "나침반",
+ "🏔️": "눈 덮인 산",
+ "🌋": "화산",
+ "🏕️": "캠핑",
+ "🏝️": "사막 섬",
+ "🏡": "정원이 있는 집",
+ "⛲️": "분수",
+ "🎠": "회전 목마",
+ "🎡": "관람차",
+ "🎢": "롤러코스터",
+ "💈": "이발소",
+ "🚆": "기차",
+ "🚋": "트램 차량",
+ "🚍️": "오고 있는 버스",
+ "🚕": "택시",
+ "🚗": "자동차",
+ "🚚": "운송 트럭",
+ "🚜": "트랙터",
+ "🛵": "스쿠터",
+ "🛺": "경삼륜차",
+ "🛴": "킥보드",
+ "🛹": "스케이트보드",
+ "🛼": "롤러스케이트",
+ "⚓️": "닻",
+ "⛵️": "돛단배",
+ "🛶": "카누",
+ "🚤": "쾌속정",
+ "🚢": "선박",
+ "✈️": "비행기",
+ "🚁": "헬리콥터",
+ "🚠": "산악 케이블카",
+ "🛰️": "인공위성",
+ "🚀": "로켓",
+ "🛸": "비행접시",
+ "⏰": "알람 시계",
+ "🌙": "초승달",
+ "🌡️": "온도계",
+ "☀️": "태양",
+ "🪐": "고리가 있는 행성",
+ "🌟": "반짝이는 별",
+ "🌀": "태풍",
+ "🌈": "무지개",
+ "☂️": "우산",
+ "❄️": "눈송이",
+ "☄️": "혜성",
+ "🔥": "불",
+ "💧": "물방울",
+ "🌊": "파도",
+ "🎃": "할로윈",
+ "✨": "블링블링",
+ "🎈": "풍선",
+ "🎉": "파티",
+ "🎏": "물고기 깃발",
+ "🎀": "리본",
+ "🎁": "선물",
+ "🎟️": "입장 티켓",
+ "🏆️": "트로피",
+ "⚽️": "축구공",
+ "🏀": "농구",
+ "🏈": "미식축구공",
+ "🎾": "테니스",
+ "🥏": "원반",
+ "🏓": "탁구",
+ "🏸": "배드민턴",
+ "🤿": "다이빙 마스크",
+ "🥌": "컬링 스톤",
+ "🎯": "과녁 명중",
+ "🪀": "요요",
+ "🪁": "연",
+ "🔮": "수정 구슬",
+ "🎲": "주사위",
+ "🧩": "퍼즐",
+ "🎨": "팔레트",
+ "🧵": "실타래",
+ "👕": "티셔츠",
+ "🧦": "양말",
+ "👗": "원피스",
+ "🩳": "반바지",
+ "🎒": "학교 가방",
+ "👟": "운동화",
+ "👑": "왕관",
+ "🧢": "야구모자",
+ "💄": "립스틱",
+ "💍": "반지",
+ "💎": "원석",
+ "📢": "확성기",
+ "🎶": "노래 음표",
+ "🎙️": "스튜디오 마이크",
+ "📻️": "라디오",
+ "🎷": "색소폰",
+ "🪗": "아코디언",
+ "🎸": "기타",
+ "🎺": "트럼펫",
+ "🎻": "바이올린",
+ "🪕": "밴조",
+ "🥁": "드럼",
+ "☎️": "전화기",
+ "🔋": "배터리",
+ "💿️": "씨디",
+ "🧮": "주판",
+ "🎬️": "슬레이트",
+ "💡": "전구",
+ "🔦": "손전등",
+ "🏮": "일본식 등",
+ "📕": "펼치지 않은 책",
+ "🏷️": "라벨",
+ "💳️": "신용카드",
+ "✏️": "연필",
+ "🖌️": "붓",
+ "🖍️": "크레용",
+ "📌": "압정",
+ "📎": "클립",
+ "🔑": "열쇠",
+ "🪃": "부메랑",
+ "🏹": "활과 화살",
+ "⚖️": "접시저울",
+ "🧲": "자석",
+ "🧪": "시험관",
+ "🧬": "DNA",
+ "🔬": "현미경",
+ "🔭": "망원경",
+ "📡": "위성 안테나",
+ "🪑": "의자",
+ "🧹": "빗자루",
+ "🗿": "모아이"
+ },
+ "lt": {
+ "👽️": "ateivis",
+ "🤖": "roboto veidas",
+ "🧠": "smegenys",
+ "👁️": "akis",
+ "🧙": "magas",
+ "🧚": "fėja",
+ "🧜": "undinius",
+ "🐵": "beždžionės snukutis",
+ "🦧": "orangutangas",
+ "🐶": "šuns snukutis",
+ "🐺": "vilko snukis",
+ "🦊": "lapės snukis",
+ "🦝": "meškėnas",
+ "🐱": "katės snukutis",
+ "🦁": "liūto snukis",
+ "🐯": "tigro snukis",
+ "🐴": "arklio snukis",
+ "🦄": "vienaragio snukis",
+ "🦓": "zebras",
+ "🦌": "elnias",
+ "🐮": "karvės snukis",
+ "🐷": "kiaulės snukis",
+ "🐗": "šernas",
+ "🐪": "kupranugaris",
+ "🦙": "lama",
+ "🦒": "žirafa",
+ "🐘": "dramblys",
+ "🦣": "mamutas",
+ "🦏": "raganosis",
+ "🐭": "pelės snukutis",
+ "🐰": "triušio snukutis",
+ "🐿️": "voverė",
+ "🦔": "ežys",
+ "🦇": "šikšnosparnis",
+ "🐻": "meškos snukis",
+ "🐨": "koala",
+ "🦥": "tinginys",
+ "🦦": "ūdra",
+ "🦘": "kengūra",
+ "🐥": "atsisukęs snapu viščiukas",
+ "🐦️": "paukštis",
+ "🕊️": "balandis",
+ "🦆": "antis",
+ "🦉": "pelėda",
+ "🦤": "drontas",
+ "🪶": "plunksna",
+ "🦩": "flamingas",
+ "🦚": "povas",
+ "🦜": "papūga",
+ "🐊": "krokodilas",
+ "🐢": "vėžlys",
+ "🦎": "driežas",
+ "🐍": "gyvatė",
+ "🐲": "drakono snukis",
+ "🦕": "sauropodas",
+ "🐳": "purškiantis banginis",
+ "🐬": "delfinas",
+ "🦭": "ruonis",
+ "🐟️": "žuvis",
+ "🐠": "tropinė žuvis",
+ "🦈": "ryklys",
+ "🐙": "aštuonkojis",
+ "🐚": "susisukusi kriauklė",
+ "🐌": "sraigė",
+ "🦋": "drugelis",
+ "🐛": "vabalas",
+ "🐝": "bitė",
+ "🐞": "boružė",
+ "💐": "puokštė",
+ "🌹": "rožė",
+ "🌺": "kinrožė",
+ "🌻": "saulėgrąža",
+ "🌷": "tulpė",
+ "🌲": "amžinai žaliuojantis medis",
+ "🌳": "lapuotis",
+ "🌴": "palmė",
+ "🌵": "kaktusas",
+ "🌿": "žolelė",
+ "🍁": "klevo lapas",
+ "🍇": "vynuogės",
+ "🍈": "melionas",
+ "🍉": "arbūzas",
+ "🍊": "mandarinas",
+ "🍋": "citrina",
+ "🍌": "bananas",
+ "🍍": "ananasas",
+ "🥭": "mangas",
+ "🍏": "žalias obuolys",
+ "🍐": "kriaušė",
+ "🍑": "persikas",
+ "🍒": "vyšnios",
+ "🍓": "braškė",
+ "🫐": "mėlynės",
+ "🥝": "kivis",
+ "🍅": "pomidoras",
+ "🫒": "alyvuogė",
+ "🥥": "kokosas",
+ "🥑": "avokadas",
+ "🍆": "baklažanas",
+ "🥕": "morka",
+ "🌽": "kukurūzo burbuolė",
+ "🌶️": "aštrusis pipiras",
+ "🥬": "lapinė daržovė",
+ "🥦": "brokolis",
+ "🧅": "svogūnas",
+ "🍄": "grybas",
+ "🥜": "žemės riešutas",
+ "🥐": "raguolis",
+ "🥖": "ilgas batonas",
+ "🥨": "riestainis",
+ "🥯": "apvalus riestainis",
+ "🥞": "blynai",
+ "🧇": "vaflis",
+ "🍔": "mėsainis",
+ "🍕": "pica",
+ "🌭": "dešrainis",
+ "🌮": "meksikietiškas paplotėlis",
+ "🍿": "spragėsiai",
+ "🦀": "krabas",
+ "🦞": "omaras",
+ "🍨": "ledai",
+ "🍩": "spurga",
+ "🍪": "sausainis",
+ "🎂": "gimtadienio tortas",
+ "🧁": "keksiukas",
+ "🍫": "šokolado batonėlis",
+ "🍬": "saldainis",
+ "🍭": "ledinukas ant pagaliuko",
+ "🫖": "arbatinukas",
+ "🧃": "gėrimo pakelis",
+ "🧉": "matė",
+ "🧭": "kompasas",
+ "🏔️": "kalnas su snieguota viršūne",
+ "🌋": "ugnikalnis",
+ "🏕️": "stovyklavimas",
+ "🏝️": "atoki sala",
+ "🏡": "namas su sodu",
+ "⛲️": "fontanas",
+ "🎠": "karuselės arkliukas",
+ "🎡": "apžvalgos ratas",
+ "🎢": "linksmieji kalneliai",
+ "💈": "kirpėjo suktukas",
+ "🚆": "traukinys",
+ "🚋": "tramvajaus vagonas",
+ "🚍️": "artėjantis autobusas",
+ "🚕": "taksi",
+ "🚗": "automobilis",
+ "🚚": "krovininis sunkvežimis",
+ "🚜": "traktorius",
+ "🛵": "motoroleris",
+ "🛺": "autorikša",
+ "🛴": "paspirtukas",
+ "🛹": "riedlentė",
+ "🛼": "riedučiai",
+ "⚓️": "inkaras",
+ "⛵️": "burlaivis",
+ "🛶": "kanoja",
+ "🚤": "motorinis kateris",
+ "🚢": "laivas",
+ "✈️": "lėktuvas",
+ "🚁": "sraigstasparnis",
+ "🚠": "kalnų keltuvas",
+ "🛰️": "palydovas",
+ "🚀": "raketa",
+ "🛸": "skraidanti lėkštė",
+ "⏰": "žadintuvas",
+ "🌙": "pusmėnulis",
+ "🌡️": "termometras",
+ "☀️": "saulė",
+ "🪐": "planeta su žiedu",
+ "🌟": "žėrinti žvaigždė",
+ "🌀": "ciklonas",
+ "🌈": "vaivorykštė",
+ "☂️": "skėtis",
+ "❄️": "snaigė",
+ "☄️": "kometa",
+ "🔥": "ugnis",
+ "💧": "lašas",
+ "🌊": "vandens banga",
+ "🎃": "žibintas iš moliūgo",
+ "✨": "kibirkštėlės",
+ "🎈": "balionas",
+ "🎉": "konfeti šaudyklė",
+ "🎏": "karpio vėtrungė",
+ "🎀": "kaspinas",
+ "🎁": "supakuota dovana",
+ "🎟️": "įėjimo bilietai",
+ "🏆️": "trofėjus",
+ "⚽️": "futbolo kamuolys",
+ "🏀": "krepšinio kamuolys",
+ "🏈": "amerikietiškojo futbolo kamuolys",
+ "🎾": "teniso kamuoliukas",
+ "🥏": "skraidantis diskas",
+ "🏓": "stalo tenisas",
+ "🏸": "badmintonas",
+ "🤿": "nardymo kaukė",
+ "🥌": "akmenslydis",
+ "🎯": "smūgis tiesiai į taikinį",
+ "🪀": "jo-jo",
+ "🪁": "aitvaras",
+ "🔮": "krištolinis rutulys",
+ "🎲": "kauliukas",
+ "🧩": "dėlionė",
+ "🎨": "dailininko paletė",
+ "🧵": "siūlas",
+ "👕": "marškinėliai",
+ "🧦": "kojinės",
+ "👗": "suknelė",
+ "🩳": "šortai",
+ "🎒": "mokyklinė kuprinė",
+ "👟": "bėgimo batelis",
+ "👑": "karūna",
+ "🧢": "reklaminė kepurė",
+ "💄": "lūpų dažai",
+ "💍": "žiedas",
+ "💎": "brangakmenis",
+ "📢": "garsiakalbio simbolis",
+ "🎶": "muzikos natos",
+ "🎙️": "studijos mikrofonas",
+ "📻️": "radijas",
+ "🎷": "saksofonas",
+ "🪗": "akordeonas",
+ "🎸": "gitara",
+ "🎺": "trimitas",
+ "🎻": "smuikas",
+ "🪕": "bandža",
+ "🥁": "būgnas",
+ "☎️": "telefonas",
+ "🔋": "baterija",
+ "💿️": "optinis diskas",
+ "🧮": "skaitytuvai",
+ "🎬️": "pliauškė",
+ "💡": "lemputė",
+ "🔦": "žibintuvėlis",
+ "🏮": "raudonas popierinis žibintas",
+ "📕": "užversta knyga",
+ "🏷️": "etiketė",
+ "💳️": "kredito kortelė",
+ "✏️": "pieštukas",
+ "🖌️": "teptukas",
+ "🖍️": "kreidelė",
+ "📌": "smeigtukas",
+ "📎": "sąvaržėlė",
+ "🔑": "raktas",
+ "🪃": "bumerangas",
+ "🏹": "lankas ir strėlė",
+ "⚖️": "svarstyklės su lėkštėmis",
+ "🧲": "magnetas",
+ "🧪": "mėgintuvėlis",
+ "🧬": "DNR",
+ "🔬": "mikroskopas",
+ "🔭": "teleskopas",
+ "📡": "palydovinė antena",
+ "🪑": "kėdė",
+ "🧹": "šluota",
+ "🗿": "moai"
+ },
+ "mk": {
+ "👽️": "вонземјанин",
+ "🤖": "робот",
+ "🧠": "мозок",
+ "👁️": "око",
+ "🧙": "магичар",
+ "🧚": "самовила",
+ "🧜": "морско лице",
+ "🐵": "глава на мајмун",
+ "🦧": "орангутан",
+ "🐶": "глава на куче",
+ "🐺": "волк",
+ "🦊": "лисица",
+ "🦝": "ракун",
+ "🐱": "глава на мачка",
+ "🦁": "лав",
+ "🐯": "глава на тигар",
+ "🐴": "глава на коњ",
+ "🦄": "еднорог",
+ "🦓": "зебра",
+ "🦌": "елен",
+ "🐮": "глава на крава",
+ "🐷": "глава на прасе",
+ "🐗": "дива свиња",
+ "🐪": "камила",
+ "🦙": "лама",
+ "🦒": "жирафа",
+ "🐘": "слон",
+ "🦣": "мамут",
+ "🦏": "носорог",
+ "🐭": "глава на глушец",
+ "🐰": "глава на зајак",
+ "🐿️": "верверица",
+ "🦔": "еж",
+ "🦇": "лилјак",
+ "🐻": "мечка",
+ "🐨": "коала",
+ "🦥": "мрзливец",
+ "🦦": "видра",
+ "🦘": "кенгур",
+ "🐥": "пиле свртено нанапред",
+ "🐦️": "птица",
+ "🕊️": "гулабица",
+ "🦆": "патка",
+ "🦉": "був",
+ "🦤": "додо",
+ "🪶": "пердув",
+ "🦩": "фламинго",
+ "🦚": "паун",
+ "🦜": "папагал",
+ "🐊": "крокодил",
+ "🐢": "желка",
+ "🦎": "гуштер",
+ "🐍": "змија",
+ "🐲": "глава на змеј",
+ "🦕": "сауропод",
+ "🐳": "кит што прска вода",
+ "🐬": "делфин",
+ "🦭": "фока",
+ "🐟️": "риба",
+ "🐠": "тропска риба",
+ "🦈": "ајкула",
+ "🐙": "октопод",
+ "🐚": "спирална школка",
+ "🐌": "полжав",
+ "🦋": "пеперутка",
+ "🐛": "бубачка",
+ "🐝": "пчела",
+ "🐞": "бубамара",
+ "💐": "букет",
+ "🌹": "роза",
+ "🌺": "хибискус",
+ "🌻": "сончоглед",
+ "🌷": "лале",
+ "🌲": "зимзелено дрво",
+ "🌳": "листопадно дрво",
+ "🌴": "палма",
+ "🌵": "кактус",
+ "🌿": "билка",
+ "🍁": "јаворов лист",
+ "🍇": "грозје",
+ "🍈": "диња",
+ "🍉": "лубеница",
+ "🍊": "мандарина",
+ "🍋": "лимон",
+ "🍌": "банана",
+ "🍍": "ананас",
+ "🥭": "манго",
+ "🍏": "зелено јаболко",
+ "🍐": "круша",
+ "🍑": "праска",
+ "🍒": "цреши",
+ "🍓": "јагода",
+ "🫐": "боровинки",
+ "🥝": "киви",
+ "🍅": "домат",
+ "🫒": "маслинка",
+ "🥥": "кокосов орев",
+ "🥑": "авокадо",
+ "🍆": "модар патлиџан",
+ "🥕": "морков",
+ "🌽": "клас пченка",
+ "🌶️": "лута пиперка",
+ "🥬": "зелени листови",
+ "🥦": "брокола",
+ "🧅": "кромид",
+ "🍄": "печурка",
+ "🥜": "кикиритки",
+ "🥐": "кроасан",
+ "🥖": "багет",
+ "🥨": "перек",
+ "🥯": "ѓеврек",
+ "🥞": "палачинки",
+ "🧇": "вафла",
+ "🍔": "хамбургер",
+ "🍕": "пица",
+ "🌭": "хот дог",
+ "🌮": "тако",
+ "🍿": "пуканки",
+ "🦀": "рак",
+ "🦞": "јастог",
+ "🍨": "сладолед",
+ "🍩": "крофна",
+ "🍪": "колаче",
+ "🎂": "роденденска торта",
+ "🧁": "тортичка",
+ "🍫": "чоколадо",
+ "🍬": "бонбона",
+ "🍭": "лижалче",
+ "🫖": "чајник",
+ "🧃": "сокче во тетрапак",
+ "🧉": "мате",
+ "🧭": "компас",
+ "🏔️": "планина со снежен врв",
+ "🌋": "вулкан",
+ "🏕️": "кампување",
+ "🏝️": "пуст остров",
+ "🏡": "куќа со градина",
+ "⛲️": "фонтана",
+ "🎠": "коњче од вртелешка",
+ "🎡": "панорамско тркало",
+ "🎢": "тобоган",
+ "💈": "столб пред берберница",
+ "🚆": "воз",
+ "🚋": "вагон на трамвај",
+ "🚍️": "автобус што пристигнува",
+ "🚕": "такси",
+ "🚗": "автомобил",
+ "🚚": "камион за испорака",
+ "🚜": "трактор",
+ "🛵": "скутер",
+ "🛺": "авто-рикша",
+ "🛴": "тротинет",
+ "🛹": "скејтборд",
+ "🛼": "ролшуи",
+ "⚓️": "сидро",
+ "⛵️": "едреник",
+ "🛶": "кајак",
+ "🚤": "глисер",
+ "🚢": "брод",
+ "✈️": "авион",
+ "🚁": "хеликоптер",
+ "🚠": "планинска жичарница",
+ "🛰️": "сателит",
+ "🚀": "ракета",
+ "🛸": "летечка чинија",
+ "⏰": "часовник со аларм",
+ "🌙": "месечев срп",
+ "🌡️": "термометар",
+ "☀️": "сонце",
+ "🪐": "планета со прстени",
+ "🌟": "светлечка ѕвезда",
+ "🌀": "циклон",
+ "🌈": "виножито",
+ "☂️": "чадор",
+ "❄️": "снегулка",
+ "☄️": "комета",
+ "🔥": "оган",
+ "💧": "капка",
+ "🌊": "бран",
+ "🎃": "фенер од тиква",
+ "✨": "светки",
+ "🎈": "балон",
+ "🎉": "прскалка со конфети",
+ "🎏": "летало со крапови",
+ "🎀": "панделка",
+ "🎁": "завиткан подарок",
+ "🎟️": "влезни билети",
+ "🏆️": "трофеј",
+ "⚽️": "фудбалска топка",
+ "🏀": "баскет",
+ "🏈": "топка за американски фудбал",
+ "🎾": "тениско топче",
+ "🥏": "летечки диск",
+ "🏓": "пинг понг",
+ "🏸": "бадминтон",
+ "🤿": "нуркачка маска",
+ "🥌": "камен за карлинг",
+ "🎯": "пикадо",
+ "🪀": "јојо",
+ "🪁": "летечки змеј",
+ "🔮": "кристална топка",
+ "🎲": "коцка",
+ "🧩": "сложувалка",
+ "🎨": "сликарска палета",
+ "🧵": "конец",
+ "👕": "маица",
+ "🧦": "чорапи",
+ "👗": "фустан",
+ "🩳": "шорцеви",
+ "🎒": "училишен ранец",
+ "👟": "патика",
+ "👑": "круна",
+ "🧢": "капче",
+ "💄": "кармин",
+ "💍": "прстен",
+ "💎": "скапоцен камен",
+ "📢": "разглас",
+ "🎶": "музички ноти",
+ "🎙️": "студиски микрофон",
+ "📻️": "радио",
+ "🎷": "саксофон",
+ "🪗": "хармоника",
+ "🎸": "гитара",
+ "🎺": "труба",
+ "🎻": "виолина",
+ "🪕": "бенџо",
+ "🥁": "тапан",
+ "☎️": "телефон",
+ "🔋": "батерија",
+ "💿️": "цд",
+ "🧮": "сметалка",
+ "🎬️": "филмска клапа",
+ "💡": "светилка",
+ "🔦": "батериска ламба",
+ "🏮": "црвен фенер",
+ "📕": "затворена книга",
+ "🏷️": "етикета",
+ "💳️": "кредитна картичка",
+ "✏️": "молив",
+ "🖌️": "четка за боење",
+ "🖍️": "креон",
+ "📌": "притискач",
+ "📎": "спојувалка",
+ "🔑": "клуч",
+ "🪃": "бумеранг",
+ "🏹": "лак и стрела",
+ "⚖️": "механичка вага",
+ "🧲": "магнет",
+ "🧪": "епрувета",
+ "🧬": "днк",
+ "🔬": "микроскоп",
+ "🔭": "телескоп",
+ "📡": "сателитска антена",
+ "🪑": "стол",
+ "🧹": "метла",
+ "🗿": "монолитни статуи"
+ },
+ "ms": {
+ "👽️": "makhluk asing",
+ "🤖": "robot",
+ "🧠": "otak",
+ "👁️": "mata",
+ "🧙": "ahli silap mata",
+ "🧚": "pari-pari",
+ "🧜": "manusia duyung",
+ "🐵": "muka monyet",
+ "🦧": "orang utan",
+ "🐶": "muka anjing",
+ "🐺": "serigala",
+ "🦊": "rubah",
+ "🦝": "rakun",
+ "🐱": "muka kucing",
+ "🦁": "singa",
+ "🐯": "muka harimau",
+ "🐴": "muka kuda",
+ "🦄": "unikorn",
+ "🦓": "zebra",
+ "🦌": "rusa",
+ "🐮": "muka lembu",
+ "🐷": "muka khinzir",
+ "🐗": "babi hutan",
+ "🐪": "unta",
+ "🦙": "llama",
+ "🦒": "zirafah",
+ "🐘": "gajah",
+ "🦣": "mamot",
+ "🦏": "badak sumbu",
+ "🐭": "muka tikus",
+ "🐰": "muka arnab",
+ "🐿️": "tupai tanah",
+ "🦔": "landak kecil",
+ "🦇": "kelawar",
+ "🐻": "beruang",
+ "🐨": "koala",
+ "🦥": "sloth",
+ "🦦": "memerang",
+ "🦘": "kanggaru",
+ "🐥": "anak ayam menghadap depan",
+ "🐦️": "burung",
+ "🕊️": "burung merpati",
+ "🦆": "itik",
+ "🦉": "burung hantu",
+ "🦤": "dodo",
+ "🪶": "bulu pelepah",
+ "🦩": "flamingo",
+ "🦚": "merak",
+ "🦜": "kakak tua",
+ "🐊": "buaya",
+ "🐢": "penyu",
+ "🦎": "cicak",
+ "🐍": "ular",
+ "🐲": "muka naga",
+ "🦕": "sauropod",
+ "🐳": "ikan paus memancutkan air",
+ "🐬": "ikan lumba-lumba",
+ "🦭": "anjing laut",
+ "🐟️": "ikan",
+ "🐠": "ikan tropika",
+ "🦈": "jerung",
+ "🐙": "sotong kurita",
+ "🐚": "kulit kerang berpilin",
+ "🐌": "siput",
+ "🦋": "rama-rama",
+ "🐛": "ulat",
+ "🐝": "lebah madu",
+ "🐞": "kumbang kura-kura",
+ "💐": "sejambak bunga",
+ "🌹": "bunga mawar",
+ "🌺": "bunga raya",
+ "🌻": "bunga matahari",
+ "🌷": "bunga tulip",
+ "🌲": "malar hijau",
+ "🌳": "pokok daun luruh",
+ "🌴": "pokok palma",
+ "🌵": "kaktus",
+ "🌿": "herba",
+ "🍁": "daun mapel",
+ "🍇": "anggur",
+ "🍈": "tembikai susu",
+ "🍉": "tembikai",
+ "🍊": "limau tangerin",
+ "🍋": "lemon",
+ "🍌": "pisang",
+ "🍍": "nanas",
+ "🥭": "mangga",
+ "🍏": "epal hijau",
+ "🍐": "buah pear",
+ "🍑": "buah pic",
+ "🍒": "buah ceri",
+ "🍓": "buah strawberi",
+ "🫐": "beri biru",
+ "🥝": "buah kiwi",
+ "🍅": "tomato",
+ "🫒": "buah zaitun",
+ "🥥": "kelapa",
+ "🥑": "avokado",
+ "🍆": "terung",
+ "🥕": "lobak merah",
+ "🌽": "tongkol jagung",
+ "🌶️": "cili api",
+ "🥬": "sayuran hijau",
+ "🥦": "brokoli",
+ "🧅": "bawang",
+ "🍄": "cendawan",
+ "🥜": "kacang tanah",
+ "🥐": "kroisan",
+ "🥖": "roti baguette",
+ "🥨": "pretzel",
+ "🥯": "bagel",
+ "🥞": "penkek",
+ "🧇": "wafel",
+ "🍔": "hamburger",
+ "🍕": "piza",
+ "🌭": "hot dog",
+ "🌮": "tako",
+ "🍿": "bertih jagung",
+ "🦀": "ketam",
+ "🦞": "udang karang",
+ "🍨": "ais krim",
+ "🍩": "donat",
+ "🍪": "biskut",
+ "🎂": "kek hari jadi",
+ "🧁": "kek cawan",
+ "🍫": "sekeping coklat",
+ "🍬": "gula-gula",
+ "🍭": "lolipop",
+ "🫖": "teko teh",
+ "🧃": "minuman air kotak",
+ "🧉": "mate",
+ "🧭": "kompas",
+ "🏔️": "gunung dengan puncak bersalji",
+ "🌋": "gunung berapi",
+ "🏕️": "berkhemah",
+ "🏝️": "pulau padang pasir",
+ "🏡": "rumah dengan taman",
+ "⛲️": "air pancut",
+ "🎠": "kuda karusel",
+ "🎡": "roda ferris",
+ "🎢": "roller coaster",
+ "💈": "jalur kedai gunting rambut",
+ "🚆": "kereta api",
+ "🚋": "gerabak trem",
+ "🚍️": "bas dari arah depan",
+ "🚕": "teksi",
+ "🚗": "kereta",
+ "🚚": "trak penghantaran",
+ "🚜": "traktor",
+ "🛵": "skuter bermotor",
+ "🛺": "lanca auto",
+ "🛴": "skuter tolak",
+ "🛹": "papan luncur",
+ "🛼": "kasut roda",
+ "⚓️": "sauh",
+ "⛵️": "perahu layar",
+ "🛶": "kanu",
+ "🚤": "bot laju",
+ "🚢": "kapal",
+ "✈️": "kapal terbang",
+ "🚁": "helikopter",
+ "🚠": "jalan kabel gunung",
+ "🛰️": "satelit",
+ "🚀": "roket",
+ "🛸": "piring terbang",
+ "⏰": "jam loceng",
+ "🌙": "bulan sabit",
+ "🌡️": "termometer",
+ "☀️": "matahari",
+ "🪐": "planet bergelang",
+ "🌟": "bintang bersinar",
+ "🌀": "taufan",
+ "🌈": "pelangi",
+ "☂️": "payung",
+ "❄️": "emping salji",
+ "☄️": "komet",
+ "🔥": "api",
+ "💧": "titisan air",
+ "🌊": "ombak laut",
+ "🎃": "tanglung labu",
+ "✨": "berkilauan",
+ "🎈": "belon",
+ "🎉": "pencetus bunyi parti",
+ "🎏": "panji-panji kap",
+ "🎀": "reben",
+ "🎁": "bungkusan hadiah",
+ "🎟️": "tiket masuk",
+ "🏆️": "piala",
+ "⚽️": "bola sepak",
+ "🏀": "bola keranjang",
+ "🏈": "bola sepak amerika",
+ "🎾": "tenis",
+ "🥏": "cakera terbang",
+ "🏓": "ping pong",
+ "🏸": "badminton",
+ "🤿": "topeng menyelam",
+ "🥌": "batu curling",
+ "🎯": "balingan tepat",
+ "🪀": "yo-yo",
+ "🪁": "layang-layang",
+ "🔮": "bola kristal",
+ "🎲": "dadu permainan",
+ "🧩": "kepingan suai gambar",
+ "🎨": "palet artis",
+ "🧵": "benang",
+ "👕": "kemeja-t",
+ "🧦": "stoking",
+ "👗": "gaun",
+ "🩳": "seluar pendek",
+ "🎒": "beg galas sekolah",
+ "👟": "kasut lari",
+ "👑": "mahkota",
+ "🧢": "kep berbil",
+ "💄": "gincu",
+ "💍": "cincin",
+ "💎": "batu permata",
+ "📢": "corong pembesar suara",
+ "🎶": "nota-nota muzik",
+ "🎙️": "mikrofon studio",
+ "📻️": "radio",
+ "🎷": "saksofon",
+ "🪗": "akordion",
+ "🎸": "gitar",
+ "🎺": "trompet",
+ "🎻": "biola",
+ "🪕": "banjo",
+ "🥁": "dram",
+ "☎️": "telefon",
+ "🔋": "bateri",
+ "💿️": "cakera optik",
+ "🧮": "sempua",
+ "🎬️": "papan pengetap",
+ "💡": "mentol lampu",
+ "🔦": "lampu suluh",
+ "🏮": "tanglung kertas merah",
+ "📕": "buku tertutup",
+ "🏷️": "label",
+ "💳️": "kad kredit",
+ "✏️": "pensel",
+ "🖌️": "berus cat",
+ "🖍️": "krayon",
+ "📌": "paku tekan",
+ "📎": "klip kertas",
+ "🔑": "kunci",
+ "🪃": "bumerang",
+ "🏹": "panah dan busur",
+ "⚖️": "neraca timbang",
+ "🧲": "magnet",
+ "🧪": "tabung uji",
+ "🧬": "dna",
+ "🔬": "mikroskop",
+ "🔭": "teleskop",
+ "📡": "antena satelit",
+ "🪑": "kerusi",
+ "🧹": "penyapu",
+ "🗿": "moyai"
+ },
+ "my": {
+ "👽️": "ဂြိုဟ်သား",
+ "🤖": "စက်ရုပ် မျက်နှာ",
+ "🧠": "ဦးနှောက်",
+ "👁️": "မျက်လုံး",
+ "🧙": "မှော်ဆရာ",
+ "🧚": "နတ်သမီး",
+ "🧜": "ရေလူ",
+ "🐵": "မျောက်ရုပ်",
+ "🦧": "အိုရန်အူတန်",
+ "🐶": "ခွေးရုပ်",
+ "🐺": "ဝံပုလွေရုပ်",
+ "🦊": "မြေခွေးရုပ်",
+ "🦝": "ရက်ကွန်းဝံ",
+ "🐱": "ကြောင်ရုပ်",
+ "🦁": "ခြင်္သေ့ရုပ်",
+ "🐯": "ကျားရုပ်",
+ "🐴": "မြင်းရုပ်",
+ "🦄": "ချိုတစ်ချောင်းမြင်းရုပ်",
+ "🦓": "မြင်းကျား",
+ "🦌": "သမင်",
+ "🐮": "နွားမရုပ်",
+ "🐷": "ဝက်ရုပ်",
+ "🐗": "တောဝက်",
+ "🐪": "ကုလားအုတ်",
+ "🦙": "လာမာ ကုလားအုတ်",
+ "🦒": "သစ်ကုလားအုတ်",
+ "🐘": "ဆင်",
+ "🦣": "ရှေးဆင်",
+ "🦏": "ကြံ့",
+ "🐭": "ကြွက် မျက်နှာ",
+ "🐰": "ယုန်ရုပ်",
+ "🐿️": "ကျောရိုးတွင် အဖြူအနက်စင်းပါ ရှဥ့်ငယ်တမျိုး",
+ "🦔": "ဖြူငယ်",
+ "🦇": "လင်းနို့",
+ "🐻": "ဝက်ဝံရုပ်",
+ "🐨": "ကိုအာလာ",
+ "🦥": "မျောက်မောင်းမ",
+ "🦦": "ဖျံ",
+ "🦘": "သားပိုက်ကောင်",
+ "🐥": "ရှေ့သို့မျက်နှာမူထားသည့် ကြက်ပေါက်စ",
+ "🐦️": "ငှက်",
+ "🕊️": "ချိုးငှက်",
+ "🦆": "ဘဲ",
+ "🦉": "ဇီးကွက်",
+ "🦤": "ဒိုဒို",
+ "🪶": "အတောင်",
+ "🦩": "ကြိုးကြာနီ",
+ "🦚": "ဒေါင်း",
+ "🦜": "ကြက်တူရွေး",
+ "🐊": "မိကျောင်း",
+ "🐢": "လိပ်",
+ "🦎": "အိမ်မြှောင်",
+ "🐍": "မြွေ",
+ "🐲": "နဂါးရုပ်",
+ "🦕": "ဆော်ရိုပေါ့ဒ်",
+ "🐳": "ရေမှုတ်ထုတ်နေသည့် ဝေလငါး",
+ "🐬": "လင်းပိုင်",
+ "🦭": "ပင်လယ်ဖျံ",
+ "🐟️": "ငါး",
+ "🐠": "အပူပိုင်း ငါး",
+ "🦈": "ငါးမန်း",
+ "🐙": "ဘဝဲ",
+ "🐚": "ခရုခွံ",
+ "🐌": "ခရု",
+ "🦋": "လိပ်ပြာ",
+ "🐛": "ပိုးကောင်ကလေး",
+ "🐝": "ပျား",
+ "🐞": "ပိုးတောင်မာ",
+ "💐": "ပန်းစည်း",
+ "🌹": "နှင်းဆီပန်း",
+ "🌺": "ခေါင်ရန်းပန်း",
+ "🌻": "နေကြာပန်း",
+ "🌷": "ကျူးလစ်ပန်း",
+ "🌲": "အမြဲစိမ်း သစ်ပင်",
+ "🌳": "ရွက်ပြတ်ပင်",
+ "🌴": "ထန်းပင်",
+ "🌵": "ရှားစောင်းပင်",
+ "🌿": "ဆေးဖက်ဝင်အပင်",
+ "🍁": "မေပယ်ရွက်",
+ "🍇": "စပျစ်သီး",
+ "🍈": "သခွားမွှေး",
+ "🍉": "ဖရဲသီး",
+ "🍊": "အခွံပွလိမ္မော်သီး",
+ "🍋": "ရှောက်သီး",
+ "🍌": "ငှက်ပျောသီး",
+ "🍍": "နာနတ်သီး",
+ "🥭": "သရက်သီး",
+ "🍏": "ပန်းသီးစိမ်း",
+ "🍐": "သစ်တော်သီး",
+ "🍑": "မက်မွန်သီး",
+ "🍒": "ချယ်ရီသီးများ",
+ "🍓": "စတော်ဘယ်ရီ",
+ "🫐": "ဘလူးဘယ်ရီ",
+ "🥝": "ကီဝီသီး",
+ "🍅": "ခရမ်းချဉ်သီး",
+ "🫒": "သံလွင်",
+ "🥥": "အုန်းသီး",
+ "🥑": "ထောပတ်သီး",
+ "🍆": "ခရမ်းသီး",
+ "🥕": "မုန်လာဥ",
+ "🌽": "ပြောင်းနှံ",
+ "🌶️": "ငရုတ်သီး",
+ "🥬": "အရွက်ဖားဖား သစ်ရွက်စိမ်း",
+ "🥦": "ပန်းဂေါ်ဖီစိမ်း",
+ "🧅": "ကြက်သွန်နီ",
+ "🍄": "မှို",
+ "🥜": "မြေပဲ",
+ "🥐": "လခြမ်းကွေးပေါင်မုန့်",
+ "🥖": "ပြင်သစ်ပေါင်မုန့်",
+ "🥨": "မုန့်ကြိုးလိမ်",
+ "🥯": "ပေါင်မုန့်အကွင်း",
+ "🥞": "မုန့်အိုးကင်းကြော်",
+ "🧇": "ဒေါင်းဖန်ဝါ မုန့်",
+ "🍔": "ဟမ်ဘာဂါ",
+ "🍕": "ပီဇာ",
+ "🌭": "ဟော့ဒေါ့",
+ "🌮": "တာကို",
+ "🍿": "ပြောင်းဖူးပေါက်ပေါက်",
+ "🦀": "ကဏန်း",
+ "🦞": "ကျောက်ပုစွန်",
+ "🍨": "ရေခဲမုန့်",
+ "🍩": "ဒိုးနတ်",
+ "🍪": "ကွတ်ကီး",
+ "🎂": "မွေးနေ့ ကိတ်မုန့်",
+ "🧁": "ကြက်ဥမုန့်",
+ "🍫": "ချောကလက် အချောင်း",
+ "🍬": "သကြားလုံး",
+ "🍭": "ချိုချဉ်ပလုတ်တုတ်",
+ "🫖": "ခရား",
+ "🧃": "အဖျော်ရေ ဘူး",
+ "🧉": "ချီမာရအို",
+ "🧭": "သံလိုက်အိမ်မြှောင်",
+ "🏔️": "ဆီးနှင်းဖုံးနေသည့် တောင်",
+ "🌋": "မီးတောင်",
+ "🏕️": "စခန်းချနေခြင်း",
+ "🏝️": "လူသူမဲ့ကျွန်း",
+ "🏡": "ပန်းခြံနှင့် အိမ်",
+ "⛲️": "အလှပြ ရေပန်း",
+ "🎠": "ချားရဟတ် မြင်း",
+ "🎡": "ချားရဟတ်",
+ "🎢": "သည်းဖိုရထား",
+ "💈": "ဆံပင်ညှပ်ဆိုင် တိုင်",
+ "🚆": "ရထား",
+ "🚋": "ဓာတ်ရထားတွဲ",
+ "🚍️": "လာနေသည့် ဘတ်စ်ကား",
+ "🚕": "တက်ကစီ",
+ "🚗": "မော်တော်ကား",
+ "🚚": "ပစ္စည်းပို့သည့် ထရပ်ကား",
+ "🚜": "လယ်ထွန်စက်",
+ "🛵": "မော်တာစက်တပ် စကူတာ",
+ "🛺": "သုံးဘီး",
+ "🛴": "စကူတာ",
+ "🛹": "စကိတ်လျှောပြား",
+ "🛼": "ရိုလာ စကိတ်",
+ "⚓️": "ကျောက်ဆူး",
+ "⛵️": "ရွက်လှေ",
+ "🛶": "ကနူး",
+ "🚤": "အမြန်စက်လှေ",
+ "🚢": "သင်္ဘော",
+ "✈️": "လေယာဉ်",
+ "🚁": "ရဟတ်ယာဉ်",
+ "🚠": "တောင်တက် ဓာတ်ကြိုးရထားလမ်း",
+ "🛰️": "ဂြိုဟ်တု",
+ "🚀": "ဒုံးယာဉ်",
+ "🛸": "ပန်းကန်ပြားပျံ",
+ "⏰": "နှိုးစက်နာရီ",
+ "🌙": "လခြမ်း",
+ "🌡️": "သာမိုမီတာ",
+ "☀️": "နေ",
+ "🪐": "ကွင်းပါရှိသည့် ဂြိုဟ်",
+ "🌟": "တောက်ပသည့် ကြယ်",
+ "🌀": "ဆိုင်ကလုန်း",
+ "🌈": "သက်တံ",
+ "☂️": "ထီး",
+ "❄️": "နှင်းပွင့်",
+ "☄️": "ကြယ်တံခွန်",
+ "🔥": "မီး",
+ "💧": "အစက်ကလေး",
+ "🌊": "ရေလှိုင်း",
+ "🎃": "ဖရုံသီး မီးအိမ်",
+ "✨": "မီးပွင့်များ",
+ "🎈": "လေပူဖောင်း",
+ "🎉": "ပါတီဗြောက်အိုး",
+ "🎏": "ငါးကြင်း တံခွန်",
+ "🎀": "ဖဲကြိုး",
+ "🎁": "ထုပ်ပိုးထားသည့် လက်ဆောင်",
+ "🎟️": "ဝင်ခွင့် လက်မှတ်များ",
+ "🏆️": "ဖလားဆု",
+ "⚽️": "ဘောလုံး",
+ "🏀": "ဘတ်စကက်ဘော",
+ "🏈": "အမေရိကန် ဘောလုံး",
+ "🎾": "တင်းနစ်",
+ "🥏": "ချပ်ပြားဝိုင်း ပစ်",
+ "🏓": "စားပွဲတင် တင်းနစ်",
+ "🏸": "ကြက်တောင်ရိုက်ခြင်း",
+ "🤿": "ရေငုပ် မျက်နှာဖုံး",
+ "🥌": "ရေခဲပြင်ကျောက်ပြားဝိုင်း",
+ "🎯": "ဗဟိုချက်ထိမှန်ခြင်း",
+ "🪀": "ယိုယို",
+ "🪁": "စွန်",
+ "🔮": "ကသိုဏ်းဖန်လုံး",
+ "🎲": "အန်စာတုံး",
+ "🧩": "ဂျစ်စော အပိုင်းအစ",
+ "🎨": "ဆေးစပ်ရာ အပြား",
+ "🧵": "အပ်ချည်",
+ "👕": "တီရှပ်",
+ "🧦": "ခြေအိတ်",
+ "👗": "ဝတ်စုံ",
+ "🩳": "ဘောင်းဘီတို",
+ "🎒": "ကျောင်းသား ကျောပိုးအိတ်",
+ "👟": "အပြေး ဖိနပ်",
+ "👑": "သရဖူ",
+ "🧢": "ကက်ဦးထုတ်",
+ "💄": "နှုတ်ခမ်းနီ",
+ "💍": "လက်စွပ်",
+ "💎": "ကျောက်မျက် ရတနာ",
+ "📢": "အသံချဲ့စက်",
+ "🎶": "ဂီတ သင်္ကေတများ",
+ "🎙️": "စတူဒီယို မိုက်ကရိုဖုန်း",
+ "📻️": "ရေဒီယို",
+ "🎷": "ဆက်ဆိုဖုန်း",
+ "🪗": "အကော်ဒီယံ",
+ "🎸": "ဂစ်တာ",
+ "🎺": "ခရာ",
+ "🎻": "တယော",
+ "🪕": "ဘင်ဂျို",
+ "🥁": "ဗုံ",
+ "☎️": "တယ်လီဖုန်း",
+ "🔋": "ဘက်ထရီ",
+ "💿️": "အလင်းသုံးဒစ်",
+ "🧮": "ပေသီးတွက်ခုံ",
+ "🎬️": "ရုပ်ရှင် ကလက်ဘုတ်",
+ "💡": "မီးလုံး",
+ "🔦": "ဓာတ်မီး",
+ "🏮": "စက္ကူမီးအိမ် အနီ",
+ "📕": "ပိတ်ထားသည့် စာအုပ်",
+ "🏷️": "တံဆိပ်",
+ "💳️": "ခရက်ဒစ်ကတ်",
+ "✏️": "ခဲတံ",
+ "🖌️": "စုတ်တံ",
+ "🖍️": "ရောင်စုံဖယောင်းခဲတံ",
+ "📌": "ဖိထိုးရသည့် ပင်အပ်",
+ "📎": "စက္ကူညှပ်",
+ "🔑": "သော့",
+ "🪃": "ထိကပြန်",
+ "🏹": "လေးနှင့် မြား",
+ "⚖️": "ချိန်ခွင်",
+ "🧲": "သံလိုက်",
+ "🧪": "ဖန်ပြွန်",
+ "🧬": "မျိုးရိုးဗီဇ",
+ "🔬": "အဏုကြည့်မှန်ပြောင်း",
+ "🔭": "အဝေးကြည့်မှန်ပြောင်း",
+ "📡": "ဂြိုဟ်တု စလောင်း",
+ "🪑": "ကုလားထိုင်",
+ "🧹": "တံမြက်စည်း",
+ "🗿": "မိုအိုင်"
+ },
+ "nl": {
+ "👽️": "buitenaards wezen",
+ "🤖": "robot",
+ "🧠": "brein",
+ "👁️": "oog",
+ "🧙": "magiër",
+ "🧚": "elfje",
+ "🧜": "zeemeermin",
+ "🐵": "apengezicht",
+ "🦧": "orang-oetang",
+ "🐶": "hondengezicht",
+ "🐺": "wolf",
+ "🦊": "vos",
+ "🦝": "wasbeer",
+ "🐱": "kattengezicht",
+ "🦁": "leeuw",
+ "🐯": "tijgergezicht",
+ "🐴": "paardengezicht",
+ "🦄": "eenhoorn",
+ "🦓": "zebra",
+ "🦌": "hert",
+ "🐮": "koeiengezicht",
+ "🐷": "varkensgezicht",
+ "🐗": "zwijn",
+ "🐪": "dromedaris",
+ "🦙": "lama",
+ "🦒": "giraffe",
+ "🐘": "olifant",
+ "🦣": "mammoet",
+ "🦏": "neushoorn",
+ "🐭": "muizengezicht",
+ "🐰": "konijnengezicht",
+ "🐿️": "eekhoorn",
+ "🦔": "egel",
+ "🦇": "vleermuis",
+ "🐻": "beer",
+ "🐨": "koala",
+ "🦥": "luiaard",
+ "🦦": "otter",
+ "🦘": "kangoeroe",
+ "🐥": "naar voren kijkend kuikentje",
+ "🐦️": "vogel",
+ "🕊️": "duif",
+ "🦆": "eend",
+ "🦉": "uil",
+ "🦤": "dodo",
+ "🪶": "veer",
+ "🦩": "flamingo",
+ "🦚": "pauw",
+ "🦜": "papegaai",
+ "🐊": "krokodil",
+ "🐢": "schildpad",
+ "🦎": "hagedis",
+ "🐍": "slang",
+ "🐲": "drakengezicht",
+ "🦕": "sauropode",
+ "🐳": "spuitende walvis",
+ "🐬": "dolfijn",
+ "🦭": "zeehond",
+ "🐟️": "vis",
+ "🐠": "tropische vis",
+ "🦈": "haai",
+ "🐙": "octopus",
+ "🐚": "schelp",
+ "🐌": "slak",
+ "🦋": "vlinder",
+ "🐛": "insect",
+ "🐝": "honingbij",
+ "🐞": "lieveheersbeestje",
+ "💐": "boeket",
+ "🌹": "roos",
+ "🌺": "hibiscus",
+ "🌻": "zonnebloem",
+ "🌷": "tulp",
+ "🌲": "naaldboom",
+ "🌳": "loofboom",
+ "🌴": "palmboom",
+ "🌵": "cactus",
+ "🌿": "kruid",
+ "🍁": "esdoornblad",
+ "🍇": "druiven",
+ "🍈": "meloen",
+ "🍉": "watermeloen",
+ "🍊": "mandarijn",
+ "🍋": "citroen",
+ "🍌": "banaan",
+ "🍍": "ananas",
+ "🥭": "mango",
+ "🍏": "groene appel",
+ "🍐": "peer",
+ "🍑": "perzik",
+ "🍒": "kersen",
+ "🍓": "aardbei",
+ "🫐": "bosbessen",
+ "🥝": "kiwi",
+ "🍅": "tomaat",
+ "🫒": "olijf",
+ "🥥": "kokosnoot",
+ "🥑": "avocado",
+ "🍆": "aubergine",
+ "🥕": "wortel",
+ "🌽": "maïskolf",
+ "🌶️": "hete peper",
+ "🥬": "bladgroente",
+ "🥦": "broccoli",
+ "🧅": "ui",
+ "🍄": "paddenstoel",
+ "🥜": "pinda’s",
+ "🥐": "croissant",
+ "🥖": "stokbrood",
+ "🥨": "pretzel",
+ "🥯": "bagel",
+ "🥞": "pannenkoeken",
+ "🧇": "wafel",
+ "🍔": "hamburger",
+ "🍕": "pizzapunt",
+ "🌭": "hotdog",
+ "🌮": "taco",
+ "🍿": "popcorn",
+ "🦀": "krab",
+ "🦞": "kreeft",
+ "🍨": "ijs",
+ "🍩": "donut",
+ "🍪": "koekje",
+ "🎂": "verjaardagstaart",
+ "🧁": "cupcake",
+ "🍫": "chocoladereep",
+ "🍬": "snoep",
+ "🍭": "lolly",
+ "🫖": "theepot",
+ "🧃": "pakje drinken",
+ "🧉": "maté",
+ "🧭": "kompas",
+ "🏔️": "berg met besneeuwde toppen",
+ "🌋": "vulkaan",
+ "🏕️": "kamperen",
+ "🏝️": "onbewoond eiland",
+ "🏡": "huis met tuin",
+ "⛲️": "fontein",
+ "🎠": "draaimolenpaard",
+ "🎡": "reuzenrad",
+ "🎢": "achtbaan",
+ "💈": "kapperspaal",
+ "🚆": "trein",
+ "🚋": "tramwagon",
+ "🚍️": "naderende bus",
+ "🚕": "taxi",
+ "🚗": "auto",
+ "🚚": "bestelbus",
+ "🚜": "tractor",
+ "🛵": "scooter",
+ "🛺": "riksja",
+ "🛴": "step",
+ "🛹": "skateboard",
+ "🛼": "rolschaats",
+ "⚓️": "anker",
+ "⛵️": "zeilboot",
+ "🛶": "kano",
+ "🚤": "speedboot",
+ "🚢": "schip",
+ "✈️": "vliegtuig",
+ "🚁": "helikopter",
+ "🚠": "bergkabelbaan",
+ "🛰️": "satelliet",
+ "🚀": "raket",
+ "🛸": "vliegende schotel",
+ "⏰": "wekker",
+ "🌙": "maansikkel",
+ "🌡️": "thermometer",
+ "☀️": "zon",
+ "🪐": "planeet met ringen",
+ "🌟": "stralende ster",
+ "🌀": "cycloon",
+ "🌈": "regenboog",
+ "☂️": "paraplu",
+ "❄️": "sneeuwvlok",
+ "☄️": "komeet",
+ "🔥": "vuur",
+ "💧": "druppel",
+ "🌊": "golf",
+ "🎃": "halloweenlantaarn",
+ "✨": "sterretjes",
+ "🎈": "ballon",
+ "🎉": "feestknaller",
+ "🎏": "karperslinger",
+ "🎀": "strik",
+ "🎁": "ingepakt cadeau",
+ "🎟️": "entreekaartjes",
+ "🏆️": "trofee",
+ "⚽️": "voetbal",
+ "🏀": "basketbal",
+ "🏈": "american football",
+ "🎾": "tennis",
+ "🥏": "frisbee",
+ "🏓": "pingpong",
+ "🏸": "badminton",
+ "🤿": "duikbril",
+ "🥌": "curlingsteen",
+ "🎯": "directe treffer",
+ "🪀": "jojo",
+ "🪁": "vlieger",
+ "🔮": "kristallen bol",
+ "🎲": "dobbelsteen",
+ "🧩": "puzzelstukje",
+ "🎨": "schilderspalet",
+ "🧵": "garen",
+ "👕": "T-shirt",
+ "🧦": "sokken",
+ "👗": "jurk",
+ "🩳": "korte broek",
+ "🎒": "schooltas",
+ "👟": "sportschoen",
+ "👑": "kroon",
+ "🧢": "pet",
+ "💄": "lippenstift",
+ "💍": "ring",
+ "💎": "edelsteen",
+ "📢": "luidspreker",
+ "🎶": "muzieknoten",
+ "🎙️": "studiomicrofoon",
+ "📻️": "radio",
+ "🎷": "saxofoon",
+ "🪗": "accordeon",
+ "🎸": "gitaar",
+ "🎺": "trompet",
+ "🎻": "viool",
+ "🪕": "banjo",
+ "🥁": "trommel",
+ "☎️": "telefoon",
+ "🔋": "batterij",
+ "💿️": "optische schijf",
+ "🧮": "abacus",
+ "🎬️": "klapbord",
+ "💡": "gloeilamp",
+ "🔦": "zaklamp",
+ "🏮": "rode papieren lantaarn",
+ "📕": "gesloten boek",
+ "🏷️": "label",
+ "💳️": "creditcard",
+ "✏️": "potlood",
+ "🖌️": "kwast",
+ "🖍️": "krijtje",
+ "📌": "punaise",
+ "📎": "paperclip",
+ "🔑": "sleutel",
+ "🪃": "boemerang",
+ "🏹": "pijl en boog",
+ "⚖️": "weegschaal",
+ "🧲": "magneet",
+ "🧪": "reageerbuis",
+ "🧬": "DNA",
+ "🔬": "microscoop",
+ "🔭": "telescoop",
+ "📡": "satellietschotel",
+ "🪑": "hoge stoel",
+ "🧹": "bezem",
+ "🗿": "moai-beeld"
+ },
+ "pl": {
+ "👽️": "ufoludek",
+ "🤖": "głowa robota",
+ "🧠": "mózg",
+ "👁️": "oko",
+ "🧙": "mag",
+ "🧚": "wróżka",
+ "🧜": "syrena",
+ "🐵": "głowa małpy",
+ "🦧": "orangutan",
+ "🐶": "głowa psa",
+ "🐺": "głowa wilka",
+ "🦊": "głowa lisa",
+ "🦝": "szop",
+ "🐱": "głowa kota",
+ "🦁": "głowa lwa",
+ "🐯": "głowa tygrysa",
+ "🐴": "głowa konia",
+ "🦄": "głowa jednorożca",
+ "🦓": "zebra",
+ "🦌": "jeleń",
+ "🐮": "głowa krowy",
+ "🐷": "głowa świni",
+ "🐗": "dzik",
+ "🐪": "wielbłąd",
+ "🦙": "lama",
+ "🦒": "żyrafa",
+ "🐘": "słoń",
+ "🦣": "mamut",
+ "🦏": "nosorożec",
+ "🐭": "głowa myszy",
+ "🐰": "głowa królika",
+ "🐿️": "pręgowiec",
+ "🦔": "jeż",
+ "🦇": "nietoperz",
+ "🐻": "głowa niedźwiedzia",
+ "🐨": "koala",
+ "🦥": "leniwiec",
+ "🦦": "wydra",
+ "🦘": "kangur",
+ "🐥": "kurczątko od przodu",
+ "🐦️": "ptak",
+ "🕊️": "gołąb",
+ "🦆": "kaczka",
+ "🦉": "sowa",
+ "🦤": "dodo",
+ "🪶": "pióro",
+ "🦩": "flaming",
+ "🦚": "paw",
+ "🦜": "papuga",
+ "🐊": "krokodyl",
+ "🐢": "żółw",
+ "🦎": "jaszczurka",
+ "🐍": "wąż",
+ "🐲": "głowa smoka",
+ "🦕": "zauropod",
+ "🐳": "wieloryb tryskający wodą",
+ "🐬": "delfin",
+ "🦭": "foka",
+ "🐟️": "ryba",
+ "🐠": "ryba tropikalna",
+ "🦈": "rekin",
+ "🐙": "ośmiornica",
+ "🐚": "muszla spiralna",
+ "🐌": "ślimak",
+ "🦋": "motyl",
+ "🐛": "gąsienica",
+ "🐝": "pszczoła",
+ "🐞": "biedronka",
+ "💐": "bukiet kwiatów",
+ "🌹": "róża",
+ "🌺": "kwiat hibiskusa",
+ "🌻": "słonecznik",
+ "🌷": "tulipan",
+ "🌲": "wiecznie zielone drzewo",
+ "🌳": "drzewo liściaste",
+ "🌴": "palma",
+ "🌵": "kaktus",
+ "🌿": "zioło",
+ "🍁": "liść klonowy",
+ "🍇": "winogrona",
+ "🍈": "melon",
+ "🍉": "arbuz",
+ "🍊": "mandarynka",
+ "🍋": "cytryna",
+ "🍌": "banan",
+ "🍍": "ananas",
+ "🥭": "mango",
+ "🍏": "zielone jabłko",
+ "🍐": "gruszka",
+ "🍑": "brzoskwinia",
+ "🍒": "wiśnie",
+ "🍓": "truskawka",
+ "🫐": "borówka amerykańska",
+ "🥝": "owoc kiwi",
+ "🍅": "pomidor",
+ "🫒": "oliwka",
+ "🥥": "kokos",
+ "🥑": "awokado",
+ "🍆": "bakłażan",
+ "🥕": "marchew",
+ "🌽": "kolba kukurydzy",
+ "🌶️": "ostra papryka",
+ "🥬": "zielenina liściasta",
+ "🥦": "brokuł",
+ "🧅": "cebula",
+ "🍄": "grzyb",
+ "🥜": "orzeszki ziemne",
+ "🥐": "rogalik",
+ "🥖": "bagietka",
+ "🥨": "precel",
+ "🥯": "bajgiel",
+ "🥞": "naleśniki",
+ "🧇": "gofr",
+ "🍔": "hamburger",
+ "🍕": "pizza",
+ "🌭": "hot dog",
+ "🌮": "taco",
+ "🍿": "popcorn",
+ "🦀": "krab",
+ "🦞": "homar",
+ "🍨": "lody",
+ "🍩": "pączek z dziurką",
+ "🍪": "ciastko",
+ "🎂": "tort urodzinowy",
+ "🧁": "babeczka",
+ "🍫": "tabliczka czekolady",
+ "🍬": "cukierek",
+ "🍭": "lizak",
+ "🫖": "czajniczek",
+ "🧃": "napój w kartoniku",
+ "🧉": "yerba mate",
+ "🧭": "kompas",
+ "🏔️": "góra z czapą lodową",
+ "🌋": "wulkan",
+ "🏕️": "kemping",
+ "🏝️": "bezludna wyspa",
+ "🏡": "dom z ogrodem",
+ "⛲️": "fontanna",
+ "🎠": "koń z karuzeli",
+ "🎡": "diabelski młyn",
+ "🎢": "kolejka górska",
+ "💈": "słup fryzjerski",
+ "🚆": "pociąg",
+ "🚋": "wagon tramwajowy",
+ "🚍️": "nadjeżdżający autobus",
+ "🚕": "taksówka",
+ "🚗": "samochód",
+ "🚚": "samochód dostawczy",
+ "🚜": "ciągnik",
+ "🛵": "skuter",
+ "🛺": "autoriksza",
+ "🛴": "hulajnoga",
+ "🛹": "deskorolka",
+ "🛼": "wrotka",
+ "⚓️": "kotwica",
+ "⛵️": "żaglówka",
+ "🛶": "kajak",
+ "🚤": "ścigacz wodny",
+ "🚢": "statek",
+ "✈️": "samolot",
+ "🚁": "helikopter",
+ "🚠": "górska kolej linowa",
+ "🛰️": "satelita",
+ "🚀": "rakieta",
+ "🛸": "latający talerz",
+ "⏰": "budzik",
+ "🌙": "półksiężyc",
+ "🌡️": "termometr",
+ "☀️": "słońce",
+ "🪐": "planeta z pierścieniami",
+ "🌟": "błyszcząca gwiazda",
+ "🌀": "cyklon",
+ "🌈": "tęcza",
+ "☂️": "parasol",
+ "❄️": "płatek śniegu",
+ "☄️": "kometa",
+ "🔥": "ogień",
+ "💧": "kropla",
+ "🌊": "fala",
+ "🎃": "dynia na halloween",
+ "✨": "gwiazdki",
+ "🎈": "balon",
+ "🎉": "tuba z konfetti",
+ "🎏": "flaga w kształcie karpia",
+ "🎀": "wstążka",
+ "🎁": "zapakowany prezent",
+ "🎟️": "bilety wstępu",
+ "🏆️": "puchar",
+ "⚽️": "piłka nożna",
+ "🏀": "koszykówka",
+ "🏈": "futbol amerykański",
+ "🎾": "tenis",
+ "🥏": "frisbee",
+ "🏓": "tenis stołowy",
+ "🏸": "badminton",
+ "🤿": "maska do nurkowania",
+ "🥌": "kamień do curlingu",
+ "🎯": "strzał w 10",
+ "🪀": "jojo",
+ "🪁": "latawiec",
+ "🔮": "kryształowa kula",
+ "🎲": "kostka do gry",
+ "🧩": "element układanki",
+ "🎨": "paleta malarska",
+ "🧵": "nić",
+ "👕": "koszulka",
+ "🧦": "skarpetki",
+ "👗": "sukienka",
+ "🩳": "szorty",
+ "🎒": "tornister",
+ "👟": "but do biegania",
+ "👑": "korona",
+ "🧢": "bejsbolówka",
+ "💄": "szminka",
+ "💍": "pierścionek",
+ "💎": "kamień szlachetny",
+ "📢": "głośnik",
+ "🎶": "nuty",
+ "🎙️": "mikrofon studyjny",
+ "📻️": "radio",
+ "🎷": "saksofon",
+ "🪗": "akordeon",
+ "🎸": "gitara",
+ "🎺": "trąbka",
+ "🎻": "skrzypce",
+ "🪕": "banjo",
+ "🥁": "bęben",
+ "☎️": "telefon",
+ "🔋": "bateria",
+ "💿️": "dysk optyczny",
+ "🧮": "liczydło",
+ "🎬️": "klaps",
+ "💡": "żarówka",
+ "🔦": "latarka",
+ "🏮": "czerwony lampion",
+ "📕": "zamknięta książka",
+ "🏷️": "przywieszka do kluczy",
+ "💳️": "karta kredytowa",
+ "✏️": "ołówek",
+ "🖌️": "pędzel",
+ "🖍️": "kredka",
+ "📌": "pinezka",
+ "📎": "spinacz",
+ "🔑": "klucz",
+ "🪃": "bumerang",
+ "🏹": "łuk i strzała",
+ "⚖️": "waga szalkowa",
+ "🧲": "magnes",
+ "🧪": "probówka",
+ "🧬": "dna",
+ "🔬": "mikroskop",
+ "🔭": "teleskop",
+ "📡": "antena satelitarna",
+ "🪑": "krzesło",
+ "🧹": "miotła",
+ "🗿": "moai"
+ },
+ "pt": {
+ "👽️": "alienígena",
+ "🤖": "rosto de robô",
+ "🧠": "cérebro",
+ "👁️": "olho",
+ "🧙": "mago",
+ "🧚": "fada",
+ "🧜": "pessoa sereia",
+ "🐵": "rosto de macaco",
+ "🦧": "orangotango",
+ "🐶": "rosto de cachorro",
+ "🐺": "rosto de lobo",
+ "🦊": "rosto de raposa",
+ "🦝": "guaxinim",
+ "🐱": "rosto de gato",
+ "🦁": "rosto de leão",
+ "🐯": "rosto de tigre",
+ "🐴": "rosto de cavalo",
+ "🦄": "rosto de unicórnio",
+ "🦓": "zebra",
+ "🦌": "cervo",
+ "🐮": "rosto de vaca",
+ "🐷": "rosto de porco",
+ "🐗": "javali",
+ "🐪": "camelo",
+ "🦙": "lhama",
+ "🦒": "girafa",
+ "🐘": "elefante",
+ "🦣": "mamute",
+ "🦏": "rinoceronte",
+ "🐭": "rosto de camundongo",
+ "🐰": "rosto de coelho",
+ "🐿️": "esquilo",
+ "🦔": "porco-espinho",
+ "🦇": "morcego",
+ "🐻": "rosto de urso",
+ "🐨": "coala",
+ "🦥": "preguiça",
+ "🦦": "lontra",
+ "🦘": "canguru",
+ "🐥": "pintinho de frente",
+ "🐦️": "pássaro",
+ "🕊️": "pomba branca",
+ "🦆": "pato",
+ "🦉": "coruja",
+ "🦤": "dodô",
+ "🪶": "pena",
+ "🦩": "flamingo",
+ "🦚": "pavão",
+ "🦜": "papagaio",
+ "🐊": "crocodilo",
+ "🐢": "tartaruga",
+ "🦎": "lagartixa",
+ "🐍": "cobra",
+ "🐲": "rosto de dragão",
+ "🦕": "saurópode",
+ "🐳": "baleia esguichando água",
+ "🐬": "golfinho",
+ "🦭": "foca",
+ "🐟️": "peixe",
+ "🐠": "peixe tropical",
+ "🦈": "tubarão",
+ "🐙": "polvo",
+ "🐚": "caramujo",
+ "🐌": "caracol",
+ "🦋": "borboleta",
+ "🐛": "inseto",
+ "🐝": "abelha",
+ "🐞": "joaninha",
+ "💐": "buquê",
+ "🌹": "rosa",
+ "🌺": "hibisco",
+ "🌻": "girassol",
+ "🌷": "tulipa",
+ "🌲": "conífera",
+ "🌳": "árvore caidiça",
+ "🌴": "palmeira",
+ "🌵": "cacto",
+ "🌿": "erva",
+ "🍁": "folha de bordo",
+ "🍇": "uvas",
+ "🍈": "melão",
+ "🍉": "melancia",
+ "🍊": "tangerina",
+ "🍋": "limão",
+ "🍌": "banana",
+ "🍍": "abacaxi",
+ "🥭": "manga",
+ "🍏": "maçã verde",
+ "🍐": "pera",
+ "🍑": "pêssego",
+ "🍒": "cereja",
+ "🍓": "morango",
+ "🫐": "mirtilos",
+ "🥝": "kiwi",
+ "🍅": "tomate",
+ "🫒": "azeitona",
+ "🥥": "coco",
+ "🥑": "abacate",
+ "🍆": "berinjela",
+ "🥕": "cenoura",
+ "🌽": "milho",
+ "🌶️": "pimenta",
+ "🥬": "verdura",
+ "🥦": "brócolis",
+ "🧅": "cebola",
+ "🍄": "cogumelo",
+ "🥜": "amendoim",
+ "🥐": "croissant",
+ "🥖": "baguete",
+ "🥨": "pretzel",
+ "🥯": "rosca",
+ "🥞": "panquecas",
+ "🧇": "waffle",
+ "🍔": "hambúrguer",
+ "🍕": "pizza",
+ "🌭": "cachorro-quente",
+ "🌮": "taco",
+ "🍿": "pipoca",
+ "🦀": "caranguejo",
+ "🦞": "lagosta",
+ "🍨": "sorvete",
+ "🍩": "donut",
+ "🍪": "biscoito",
+ "🎂": "bolo de aniversário",
+ "🧁": "cupcake",
+ "🍫": "chocolate",
+ "🍬": "bala",
+ "🍭": "pirulito",
+ "🫖": "bule",
+ "🧃": "suco de caixa",
+ "🧉": "mate",
+ "🧭": "bússola",
+ "🏔️": "montanha com neve",
+ "🌋": "vulcão",
+ "🏕️": "acampamento",
+ "🏝️": "ilha deserta",
+ "🏡": "casa com jardim",
+ "⛲️": "fonte",
+ "🎠": "carrossel",
+ "🎡": "roda gigante",
+ "🎢": "montanha russa",
+ "💈": "barbearia",
+ "🚆": "trem",
+ "🚋": "bonde",
+ "🚍️": "ônibus se aproximando",
+ "🚕": "táxi",
+ "🚗": "carro",
+ "🚚": "caminhão de entrega",
+ "🚜": "trator",
+ "🛵": "scooter",
+ "🛺": "automóvel riquixá",
+ "🛴": "patinete",
+ "🛹": "skate",
+ "🛼": "patins de rodas",
+ "⚓️": "âncora",
+ "⛵️": "barco a vela",
+ "🛶": "canoa",
+ "🚤": "lancha",
+ "🚢": "navio",
+ "✈️": "avião",
+ "🚁": "helicóptero",
+ "🚠": "cabo suspenso usado em teleféricos nas montanhas",
+ "🛰️": "satélite",
+ "🚀": "foguete",
+ "🛸": "disco voador",
+ "⏰": "despertador",
+ "🌙": "lua crescente",
+ "🌡️": "termômetro",
+ "☀️": "sol",
+ "🪐": "planeta com anéis",
+ "🌟": "estrela brilhante",
+ "🌀": "ciclone",
+ "🌈": "arco-íris",
+ "☂️": "guarda-chuva",
+ "❄️": "floco de neve",
+ "☄️": "cometa",
+ "🔥": "fogo",
+ "💧": "gota",
+ "🌊": "onda",
+ "🎃": "abóbora de halloween",
+ "✨": "brilhos",
+ "🎈": "balão",
+ "🎉": "cone de festa",
+ "🎏": "bandeira de carpas",
+ "🎀": "laço de fita",
+ "🎁": "presente",
+ "🎟️": "ingresso de cinema",
+ "🏆️": "troféu",
+ "⚽️": "bola de futebol",
+ "🏀": "bola de basquete",
+ "🏈": "bola de futebol americano",
+ "🎾": "tênis",
+ "🥏": "frisbee",
+ "🏓": "pingue-pongue",
+ "🏸": "badminton",
+ "🤿": "máscara de mergulho",
+ "🥌": "pedra de curling",
+ "🎯": "no alvo",
+ "🪀": "ioiô",
+ "🪁": "pipa",
+ "🔮": "bola de cristal",
+ "🎲": "jogo de dado",
+ "🧩": "quebra-cabeça",
+ "🎨": "paleta de tintas",
+ "🧵": "carretel",
+ "👕": "camiseta",
+ "🧦": "meias",
+ "👗": "vestido",
+ "🩳": "shorts",
+ "🎒": "mochila",
+ "👟": "tênis de corrida",
+ "👑": "coroa",
+ "🧢": "boné",
+ "💄": "batom",
+ "💍": "anel",
+ "💎": "pedra preciosa",
+ "📢": "buzina",
+ "🎶": "notas musicais",
+ "🎙️": "microfone de estúdio",
+ "📻️": "rádio",
+ "🎷": "saxofone",
+ "🪗": "acordeão",
+ "🎸": "guitarra",
+ "🎺": "trompete",
+ "🎻": "violino",
+ "🪕": "banjo",
+ "🥁": "tambor",
+ "☎️": "telefone no gancho",
+ "🔋": "pilha",
+ "💿️": "cd",
+ "🧮": "ábaco",
+ "🎬️": "claquete",
+ "💡": "lâmpada",
+ "🔦": "lanterna",
+ "🏮": "lanterna vermelha de papel",
+ "📕": "livro fechado",
+ "🏷️": "etiqueta",
+ "💳️": "cartão de crédito",
+ "✏️": "lápis",
+ "🖌️": "pincel",
+ "🖍️": "giz de cera",
+ "📌": "tacha",
+ "📎": "clipe de papel",
+ "🔑": "chave",
+ "🪃": "bumerangue",
+ "🏹": "arco e flecha",
+ "⚖️": "balança",
+ "🧲": "ímã",
+ "🧪": "tubo de ensaio",
+ "🧬": "dna",
+ "🔬": "microscópio",
+ "🔭": "telescópio",
+ "📡": "antena parabólica",
+ "🪑": "cadeira",
+ "🧹": "vassoura",
+ "🗿": "moai"
+ },
+ "ro": {
+ "👽️": "extraterestru",
+ "🤖": "robot",
+ "🧠": "creier",
+ "👁️": "un ochi",
+ "🧙": "mag",
+ "🧚": "zână",
+ "🧜": "persoană sirenă",
+ "🐵": "față de maimuță",
+ "🦧": "urangutan",
+ "🐶": "față de câine",
+ "🐺": "lup",
+ "🦊": "vulpe",
+ "🦝": "raton",
+ "🐱": "față de pisică",
+ "🦁": "leu",
+ "🐯": "față de tigru",
+ "🐴": "față de cal",
+ "🦄": "unicorn",
+ "🦓": "zebră",
+ "🦌": "cerb",
+ "🐮": "cap de vacă",
+ "🐷": "cap de porc",
+ "🐗": "mistreț",
+ "🐪": "dromader",
+ "🦙": "lamă",
+ "🦒": "girafă",
+ "🐘": "elefant",
+ "🦣": "mamut",
+ "🦏": "rinocer",
+ "🐭": "față de șoarece",
+ "🐰": "față de iepure",
+ "🐿️": "veveriță",
+ "🦔": "arici",
+ "🦇": "liliac",
+ "🐻": "urs",
+ "🐨": "koala",
+ "🦥": "leneș",
+ "🦦": "vidră",
+ "🦘": "cangur",
+ "🐥": "pui de găină din față",
+ "🐦️": "pasăre",
+ "🕊️": "porumbiță",
+ "🦆": "rață",
+ "🦉": "bufniță",
+ "🦤": "dodo",
+ "🪶": "pană",
+ "🦩": "flamingo",
+ "🦚": "păun",
+ "🦜": "papagal mare",
+ "🐊": "crocodil",
+ "🐢": "broască țestoasă",
+ "🦎": "șopârlă",
+ "🐍": "șarpe",
+ "🐲": "față de dragon",
+ "🦕": "sauropod",
+ "🐳": "balenă împroșcând apă",
+ "🐬": "delfin",
+ "🦭": "focă",
+ "🐟️": "pește",
+ "🐠": "pește tropical",
+ "🦈": "rechin",
+ "🐙": "caracatiță",
+ "🐚": "cochilie spiralată",
+ "🐌": "melc",
+ "🦋": "fluture",
+ "🐛": "gândac",
+ "🐝": "albină",
+ "🐞": "buburuză",
+ "💐": "buchet de flori",
+ "🌹": "trandafir",
+ "🌺": "hibiscus",
+ "🌻": "floarea soarelui",
+ "🌷": "lalea",
+ "🌲": "arbore conifer",
+ "🌳": "arbore foios",
+ "🌴": "palmier",
+ "🌵": "cactus",
+ "🌿": "plantă aromatică",
+ "🍁": "frunză de arțar",
+ "🍇": "struguri",
+ "🍈": "pepene galben",
+ "🍉": "pepene verde",
+ "🍊": "mandarină",
+ "🍋": "lămâie",
+ "🍌": "banană",
+ "🍍": "ananas",
+ "🥭": "mango",
+ "🍏": "măr verde",
+ "🍐": "pară",
+ "🍑": "piersică",
+ "🍒": "cireșe",
+ "🍓": "căpșună",
+ "🫐": "afine",
+ "🥝": "kiwi",
+ "🍅": "roșie",
+ "🫒": "măslină",
+ "🥥": "nucă de cocos",
+ "🥑": "avocado",
+ "🍆": "vânătă",
+ "🥕": "morcov",
+ "🌽": "știulete de porumb",
+ "🌶️": "ardei iute",
+ "🥬": "verdețuri",
+ "🥦": "broccoli",
+ "🧅": "ceapă",
+ "🍄": "ciupercă",
+ "🥜": "arahide",
+ "🥐": "croasant",
+ "🥖": "baghetă de pâine",
+ "🥨": "covrig",
+ "🥯": "bagel",
+ "🥞": "clătite",
+ "🧇": "gofră",
+ "🍔": "hamburger",
+ "🍕": "pizza",
+ "🌭": "hot dog",
+ "🌮": "taco",
+ "🍿": "floricele de porumb",
+ "🦀": "rac",
+ "🦞": "homar",
+ "🍨": "înghețată",
+ "🍩": "gogoașă americană",
+ "🍪": "fursec",
+ "🎂": "tort aniversar",
+ "🧁": "brioșă",
+ "🍫": "baton de ciocolată",
+ "🍬": "bomboană",
+ "🍭": "acadea",
+ "🫖": "ceainic",
+ "🧃": "cutie de băutură",
+ "🧉": "mate",
+ "🧭": "busolă",
+ "🏔️": "vârf de munte înzăpezit",
+ "🌋": "vulcan",
+ "🏕️": "camping",
+ "🏝️": "insulă pustie",
+ "🏡": "casă cu grădină",
+ "⛲️": "fântână arteziană",
+ "🎠": "căluț de carusel",
+ "🎡": "roata mare",
+ "🎢": "montagne russe",
+ "💈": "semn de frizerie",
+ "🚆": "tren",
+ "🚋": "vagon de tramvai",
+ "🚍️": "autobuz care se apropie",
+ "🚕": "taxi",
+ "🚗": "automobil",
+ "🚚": "camion de marfă",
+ "🚜": "tractor",
+ "🛵": "scuter",
+ "🛺": "autoricșă",
+ "🛴": "trotinetă",
+ "🛹": "skateboard",
+ "🛼": "patină cu rotile",
+ "⚓️": "ancoră",
+ "⛵️": "barcă cu pânze",
+ "🛶": "canoe",
+ "🚤": "barcă de viteză",
+ "🚢": "vapor",
+ "✈️": "avion",
+ "🚁": "elicopter",
+ "🚠": "telecabină montană",
+ "🛰️": "satelit",
+ "🚀": "rachetă",
+ "🛸": "farfurie zburătoare",
+ "⏰": "ceas deșteptător",
+ "🌙": "semilună",
+ "🌡️": "termometru",
+ "☀️": "soare",
+ "🪐": "planetă cu inele",
+ "🌟": "stea strălucitoare",
+ "🌀": "ciclon",
+ "🌈": "curcubeu",
+ "☂️": "umbrelă",
+ "❄️": "fulg de nea",
+ "☄️": "cometă",
+ "🔥": "foc",
+ "💧": "picătură",
+ "🌊": "val",
+ "🎃": "dovleac cu felinar",
+ "✨": "steluțe",
+ "🎈": "balon",
+ "🎉": "tun cu confetti",
+ "🎏": "crap decorativ în vânt",
+ "🎀": "fundă",
+ "🎁": "cadou împachetat",
+ "🎟️": "bilete de intrare",
+ "🏆️": "trofeu",
+ "⚽️": "minge de fotbal",
+ "🏀": "baschet",
+ "🏈": "fotbal american",
+ "🎾": "tenis",
+ "🥏": "disc zburător",
+ "🏓": "ping pong",
+ "🏸": "badminton",
+ "🤿": "mască de scufundări",
+ "🥌": "piatră de curling",
+ "🎯": "fix la țintă",
+ "🪀": "yo-yo",
+ "🪁": "zmeu",
+ "🔮": "glob de cristal",
+ "🎲": "zar",
+ "🧩": "piesă de puzzle",
+ "🎨": "paletă de pictor",
+ "🧵": "ață",
+ "👕": "tricou",
+ "🧦": "șosete",
+ "👗": "rochie",
+ "🩳": "șort",
+ "🎒": "rucsac",
+ "👟": "pantof sport",
+ "👑": "coroană",
+ "🧢": "șapcă",
+ "💄": "ruj",
+ "💍": "inel",
+ "💎": "piatră prețioasă",
+ "📢": "portavoce",
+ "🎶": "note muzicale",
+ "🎙️": "microfon de studio",
+ "📻️": "radio",
+ "🎷": "saxofon",
+ "🪗": "acordeon",
+ "🎸": "chitară",
+ "🎺": "trompetă",
+ "🎻": "vioară",
+ "🪕": "banjo",
+ "🥁": "tobă",
+ "☎️": "telefon",
+ "🔋": "baterie",
+ "💿️": "cd",
+ "🧮": "abac",
+ "🎬️": "clachetă",
+ "💡": "bec",
+ "🔦": "lanternă",
+ "🏮": "felinar din hârtie roșie",
+ "📕": "carte închisă",
+ "🏷️": "etichetă",
+ "💳️": "card de credit",
+ "✏️": "creion",
+ "🖌️": "pensulă",
+ "🖍️": "creion colorat",
+ "📌": "piuneză",
+ "📎": "agrafă de hârtie",
+ "🔑": "cheie",
+ "🪃": "bumerang",
+ "🏹": "arc și săgeată",
+ "⚖️": "balanță",
+ "🧲": "magnet",
+ "🧪": "eprubetă",
+ "🧬": "ADN",
+ "🔬": "microscop",
+ "🔭": "telescop",
+ "📡": "antenă satelit",
+ "🪑": "scaun",
+ "🧹": "mătură",
+ "🗿": "statuie moai"
+ },
+ "ru": {
+ "👽️": "инопланетянин",
+ "🤖": "робот",
+ "🧠": "мозг",
+ "👁️": "глаз",
+ "🧙": "маг",
+ "🧚": "фея",
+ "🧜": "русалка",
+ "🐵": "морда обезьяны",
+ "🦧": "орангутан",
+ "🐶": "морда собаки",
+ "🐺": "морда волка",
+ "🦊": "морда лисицы",
+ "🦝": "морда енота",
+ "🐱": "морда кошки",
+ "🦁": "морда льва",
+ "🐯": "морда тигра",
+ "🐴": "морда лошади",
+ "🦄": "голова единорога",
+ "🦓": "зебра",
+ "🦌": "олень",
+ "🐮": "морда коровы",
+ "🐷": "морда свиньи",
+ "🐗": "кабан",
+ "🐪": "одногорбый верблюд",
+ "🦙": "лама",
+ "🦒": "жираф",
+ "🐘": "слон",
+ "🦣": "мамонт",
+ "🦏": "носорог",
+ "🐭": "морда мыши",
+ "🐰": "морда кролика",
+ "🐿️": "бурундук",
+ "🦔": "еж",
+ "🦇": "летучая мышь",
+ "🐻": "морда медведя",
+ "🐨": "морда коалы",
+ "🦥": "ленивец",
+ "🦦": "выдра",
+ "🦘": "кенгуру",
+ "🐥": "цыпленок",
+ "🐦️": "птица",
+ "🕊️": "голубь",
+ "🦆": "утка",
+ "🦉": "сова",
+ "🦤": "дронт",
+ "🪶": "перо",
+ "🦩": "фламинго",
+ "🦚": "павлин",
+ "🦜": "попугай",
+ "🐊": "крокодил",
+ "🐢": "черепаха",
+ "🦎": "ящерица",
+ "🐍": "змея",
+ "🐲": "голова дракона",
+ "🦕": "зауропод",
+ "🐳": "кит с фонтанчиком",
+ "🐬": "дельфин",
+ "🦭": "тюлень",
+ "🐟️": "рыба",
+ "🐠": "тропическая рыба",
+ "🦈": "акула",
+ "🐙": "осьминог",
+ "🐚": "раковина",
+ "🐌": "улитка",
+ "🦋": "бабочка",
+ "🐛": "гусеница",
+ "🐝": "пчела",
+ "🐞": "божья коровка",
+ "💐": "букет",
+ "🌹": "роза",
+ "🌺": "гибискус",
+ "🌻": "подсолнух",
+ "🌷": "тюльпан",
+ "🌲": "елка",
+ "🌳": "дерево",
+ "🌴": "пальма",
+ "🌵": "кактус",
+ "🌿": "веточка",
+ "🍁": "кленовый лист",
+ "🍇": "виноград",
+ "🍈": "дыня",
+ "🍉": "арбуз",
+ "🍊": "мандарин",
+ "🍋": "лимон",
+ "🍌": "банан",
+ "🍍": "ананас",
+ "🥭": "манго",
+ "🍏": "зеленое яблоко",
+ "🍐": "груша",
+ "🍑": "персик",
+ "🍒": "вишня",
+ "🍓": "клубника",
+ "🫐": "голубика",
+ "🥝": "киви",
+ "🍅": "помидор",
+ "🫒": "оливка",
+ "🥥": "кокос",
+ "🥑": "авокадо",
+ "🍆": "баклажан",
+ "🥕": "морковь",
+ "🌽": "кукурузный початок",
+ "🌶️": "острый перец",
+ "🥬": "зеленый салат",
+ "🥦": "брокколи",
+ "🧅": "лук",
+ "🍄": "гриб",
+ "🥜": "арахис",
+ "🥐": "круассан",
+ "🥖": "багет",
+ "🥨": "крендель",
+ "🥯": "бублик",
+ "🥞": "блины",
+ "🧇": "вафля",
+ "🍔": "гамбургер",
+ "🍕": "пицца",
+ "🌭": "хот-дог",
+ "🌮": "тако",
+ "🍿": "попкорн",
+ "🦀": "краб",
+ "🦞": "омар",
+ "🍨": "мороженое",
+ "🍩": "пончик",
+ "🍪": "печенье",
+ "🎂": "торт ко дню рождения",
+ "🧁": "капкейк",
+ "🍫": "шоколад",
+ "🍬": "конфета",
+ "🍭": "леденец",
+ "🫖": "чайник",
+ "🧃": "пакетик сока",
+ "🧉": "мате",
+ "🧭": "компас",
+ "🏔️": "гора со снежной шапкой",
+ "🌋": "вулкан",
+ "🏕️": "кемпинг",
+ "🏝️": "остров",
+ "🏡": "дом с садом",
+ "⛲️": "фонтан",
+ "🎠": "лошадь на карусели",
+ "🎡": "колесо обозрения",
+ "🎢": "американские горки",
+ "💈": "парикмахерская",
+ "🚆": "поезд",
+ "🚋": "трамвайный вагон",
+ "🚍️": "автобус спереди",
+ "🚕": "такси",
+ "🚗": "автомобиль",
+ "🚚": "грузовик",
+ "🚜": "трактор",
+ "🛵": "скутер",
+ "🛺": "авторикша",
+ "🛴": "самокат",
+ "🛹": "скейтборд",
+ "🛼": "роликовые коньки",
+ "⚓️": "якорь",
+ "⛵️": "парусник",
+ "🛶": "каноэ",
+ "🚤": "катер",
+ "🚢": "корабль",
+ "✈️": "самолет",
+ "🚁": "вертолет",
+ "🚠": "вагон фуникулера",
+ "🛰️": "спутник",
+ "🚀": "ракета",
+ "🛸": "летающая тарелка",
+ "⏰": "будильник",
+ "🌙": "полумесяц",
+ "🌡️": "термометр",
+ "☀️": "солнце",
+ "🪐": "планета с кольцом",
+ "🌟": "сияющая звезда",
+ "🌀": "циклон",
+ "🌈": "радуга",
+ "☂️": "зонт",
+ "❄️": "снежинка",
+ "☄️": "комета",
+ "🔥": "огонь",
+ "💧": "капля",
+ "🌊": "волна",
+ "🎃": "тыква-фонарь",
+ "✨": "блестки",
+ "🎈": "воздушный шарик",
+ "🎉": "хлопушка",
+ "🎏": "вымпелы в виде карпов",
+ "🎀": "бантик",
+ "🎁": "подарок",
+ "🎟️": "билеты",
+ "🏆️": "кубок",
+ "⚽️": "футбол",
+ "🏀": "баскетбол",
+ "🏈": "американский футбол",
+ "🎾": "теннис",
+ "🥏": "летающий диск",
+ "🏓": "настольный теннис",
+ "🏸": "бадминтон",
+ "🤿": "маска с трубкой",
+ "🥌": "керлинг",
+ "🎯": "мишень",
+ "🪀": "йо-йо",
+ "🪁": "воздушный змей",
+ "🔮": "хрустальный шар",
+ "🎲": "игральная кость",
+ "🧩": "пазл",
+ "🎨": "палитра с красками",
+ "🧵": "катушка ниток",
+ "👕": "футболка",
+ "🧦": "носки",
+ "👗": "платье",
+ "🩳": "шорты",
+ "🎒": "ранец",
+ "👟": "кроссовки",
+ "👑": "корона",
+ "🧢": "бейсболка",
+ "💄": "помада",
+ "💍": "кольцо",
+ "💎": "драгоценный камень",
+ "📢": "громкоговоритель",
+ "🎶": "ноты",
+ "🎙️": "студийный микрофон",
+ "📻️": "радио",
+ "🎷": "саксофон",
+ "🪗": "аккордеон",
+ "🎸": "гитара",
+ "🎺": "труба",
+ "🎻": "скрипка",
+ "🪕": "банджо",
+ "🥁": "барабан",
+ "☎️": "телефон",
+ "🔋": "батарейка",
+ "💿️": "CD",
+ "🧮": "счеты",
+ "🎬️": "хлопушка-нумератор",
+ "💡": "лампочка",
+ "🔦": "фонарик",
+ "🏮": "красный бумажный фонарик",
+ "📕": "закрытая книга",
+ "🏷️": "бирка",
+ "💳️": "кредитная карта",
+ "✏️": "карандаш",
+ "🖌️": "кисточка",
+ "🖍️": "восковой мелок",
+ "📌": "канцелярская кнопка",
+ "📎": "скрепка",
+ "🔑": "ключ",
+ "🪃": "бумеранг",
+ "🏹": "лук со стрелой",
+ "⚖️": "весы",
+ "🧲": "магнит",
+ "🧪": "пробирка",
+ "🧬": "ДНК",
+ "🔬": "микроскоп",
+ "🔭": "телескоп",
+ "📡": "спутниковая антенна",
+ "🪑": "стул",
+ "🧹": "метла",
+ "🗿": "истукан"
+ },
+ "sv": {
+ "👽️": "utomjording",
+ "🤖": "robotansikte",
+ "🧠": "hjärna",
+ "👁️": "öga",
+ "🧙": "magiker",
+ "🧚": "fé",
+ "🧜": "vattenväsen",
+ "🐵": "apansikte",
+ "🦧": "orangutang",
+ "🐶": "hundansikte",
+ "🐺": "vargansikte",
+ "🦊": "rävansikte",
+ "🦝": "tvättbjörn",
+ "🐱": "kattansikte",
+ "🦁": "lejonansikte",
+ "🐯": "tigeransikte",
+ "🐴": "hästansikte",
+ "🦄": "enhörningsansikte",
+ "🦓": "zebra",
+ "🦌": "hjort",
+ "🐮": "koansikte",
+ "🐷": "grisansikte",
+ "🐗": "vildsvin",
+ "🐪": "dromedar",
+ "🦙": "lama",
+ "🦒": "giraff",
+ "🐘": "elefant",
+ "🦣": "mammut",
+ "🦏": "noshörning",
+ "🐭": "musansikte",
+ "🐰": "kaninansikte",
+ "🐿️": "jordekorre",
+ "🦔": "igelkott",
+ "🦇": "fladdermus",
+ "🐻": "björnansikte",
+ "🐨": "koala",
+ "🦥": "sengångare",
+ "🦦": "utter",
+ "🦘": "känguru",
+ "🐥": "kyckling framifrån",
+ "🐦️": "fågel",
+ "🕊️": "duva",
+ "🦆": "and",
+ "🦉": "uggla",
+ "🦤": "dront",
+ "🪶": "fågelfjäder",
+ "🦩": "flamingo",
+ "🦚": "påfågel",
+ "🦜": "papegoja",
+ "🐊": "krokodil",
+ "🐢": "sköldpadda",
+ "🦎": "ödla",
+ "🐍": "orm",
+ "🐲": "drakansikte",
+ "🦕": "sauropod",
+ "🐳": "val som sprutar vatten",
+ "🐬": "delfin",
+ "🦭": "säl",
+ "🐟️": "fisk",
+ "🐠": "tropisk fisk",
+ "🦈": "haj",
+ "🐙": "bläckfisk",
+ "🐚": "snäcka",
+ "🐌": "snigel",
+ "🦋": "fjäril",
+ "🐛": "tusenfoting",
+ "🐝": "bi",
+ "🐞": "nyckelpiga",
+ "💐": "blombukett",
+ "🌹": "ros",
+ "🌺": "hibiskus",
+ "🌻": "solros",
+ "🌷": "tulpan",
+ "🌲": "barrträd",
+ "🌳": "lövträd",
+ "🌴": "palm",
+ "🌵": "kaktus",
+ "🌿": "ört",
+ "🍁": "lönnlöv",
+ "🍇": "vindruvor",
+ "🍈": "melon",
+ "🍉": "vattenmelon",
+ "🍊": "mandarin",
+ "🍋": "citron",
+ "🍌": "banan",
+ "🍍": "ananas",
+ "🥭": "mango",
+ "🍏": "grönt äpple",
+ "🍐": "päron",
+ "🍑": "persika",
+ "🍒": "körsbär",
+ "🍓": "jordgubbe",
+ "🫐": "blåbär",
+ "🥝": "kiwifrukt",
+ "🍅": "tomat",
+ "🫒": "oliv",
+ "🥥": "kokosnöt",
+ "🥑": "avokado",
+ "🍆": "aubergine",
+ "🥕": "morot",
+ "🌽": "majskolv",
+ "🌶️": "chili",
+ "🥬": "sallat",
+ "🥦": "broccoli",
+ "🧅": "lök",
+ "🍄": "svamp",
+ "🥜": "jordnötter",
+ "🥐": "croissant",
+ "🥖": "baguette",
+ "🥨": "pretzel",
+ "🥯": "bagel",
+ "🥞": "pannkakor",
+ "🧇": "våffla",
+ "🍔": "hamburgare",
+ "🍕": "pizzabit",
+ "🌭": "varmkorv",
+ "🌮": "taco",
+ "🍿": "popcorn",
+ "🦀": "krabba",
+ "🦞": "hummer",
+ "🍨": "glass",
+ "🍩": "munk",
+ "🍪": "kaka",
+ "🎂": "födelsedagstårta",
+ "🧁": "muffin",
+ "🍫": "chokladkaka",
+ "🍬": "godis",
+ "🍭": "klubba",
+ "🫖": "tekanna",
+ "🧃": "dryckeskartong",
+ "🧉": "mate-te",
+ "🧭": "kompass",
+ "🏔️": "snöklätt berg",
+ "🌋": "vulkan",
+ "🏕️": "camping",
+ "🏝️": "öde ö",
+ "🏡": "hus med trädgård",
+ "⛲️": "fontän",
+ "🎠": "karusellhäst",
+ "🎡": "pariserhjul",
+ "🎢": "berg- och dalbana",
+ "💈": "barberarstolpe",
+ "🚆": "tåg",
+ "🚋": "spårvagnsvagn",
+ "🚍️": "mötande buss",
+ "🚕": "taxi",
+ "🚗": "bil",
+ "🚚": "budbil",
+ "🚜": "traktor",
+ "🛵": "skoter",
+ "🛺": "automatisk riksha",
+ "🛴": "sparkcykel",
+ "🛹": "skateboard",
+ "🛼": "rullskridsko",
+ "⚓️": "ankare",
+ "⛵️": "segelbåt",
+ "🛶": "kanot",
+ "🚤": "racerbåt",
+ "🚢": "fartyg",
+ "✈️": "flygplan",
+ "🚁": "helikopter",
+ "🚠": "linbana",
+ "🛰️": "satellit",
+ "🚀": "raket",
+ "🛸": "flygande tefat",
+ "⏰": "väckarklocka",
+ "🌙": "månskära",
+ "🌡️": "termometer",
+ "☀️": "sol",
+ "🪐": "planet med ringar",
+ "🌟": "blänkande stjärna",
+ "🌀": "cyklon",
+ "🌈": "regnbåge",
+ "☂️": "paraply",
+ "❄️": "snöflinga",
+ "☄️": "komet",
+ "🔥": "eld",
+ "💧": "droppe",
+ "🌊": "våg",
+ "🎃": "lyktgubbe",
+ "✨": "gnistrande stjärnor",
+ "🎈": "ballong",
+ "🎉": "konfettismällare",
+ "🎏": "karpvindstrut",
+ "🎀": "rosett",
+ "🎁": "inslagen present",
+ "🎟️": "inträdesbiljetter",
+ "🏆️": "pokal",
+ "⚽️": "fotboll",
+ "🏀": "basketboll",
+ "🏈": "amerikansk fotboll",
+ "🎾": "tennis",
+ "🥏": "frisbee",
+ "🏓": "bordtennis",
+ "🏸": "badminton",
+ "🤿": "dykmask",
+ "🥌": "curlingsten",
+ "🎯": "mitt i prick",
+ "🪀": "jojo",
+ "🪁": "flygande drake",
+ "🔮": "kristallkula",
+ "🎲": "speltärning",
+ "🧩": "pusselbit",
+ "🎨": "färgpalett",
+ "🧵": "tråd",
+ "👕": "t-shirt",
+ "🧦": "sockor",
+ "👗": "klänning",
+ "🩳": "shorts",
+ "🎒": "ryggsäck",
+ "👟": "gympasko",
+ "👑": "krona",
+ "🧢": "skärmmössa",
+ "💄": "läppstift",
+ "💍": "ring",
+ "💎": "ädelsten",
+ "📢": "handhögtalare",
+ "🎶": "musiknoter",
+ "🎙️": "studiomikrofon",
+ "📻️": "radio",
+ "🎷": "saxofon",
+ "🪗": "dragspel",
+ "🎸": "gitarr",
+ "🎺": "trumpet",
+ "🎻": "fiol",
+ "🪕": "banjo",
+ "🥁": "trumma",
+ "☎️": "telefon",
+ "🔋": "batteri",
+ "💿️": "optisk skiva",
+ "🧮": "kulram",
+ "🎬️": "filmklappa",
+ "💡": "glödlampa",
+ "🔦": "ficklampa",
+ "🏮": "röd papperslykta",
+ "📕": "stängd bok",
+ "🏷️": "etikett",
+ "💳️": "kreditkort",
+ "✏️": "blyertspenna",
+ "🖌️": "målarpensel",
+ "🖍️": "krita",
+ "📌": "kartnål",
+ "📎": "gem",
+ "🔑": "nyckel",
+ "🪃": "boomerang",
+ "🏹": "pil och båge",
+ "⚖️": "balansvåg",
+ "🧲": "magnet",
+ "🧪": "provrör",
+ "🧬": "DNA",
+ "🔬": "mikroskop",
+ "🔭": "teleskop",
+ "📡": "tv-satellit",
+ "🪑": "stol",
+ "🧹": "kvast",
+ "🗿": "staty"
+ },
+ "th": {
+ "👽️": "เอเลี่ยน",
+ "🤖": "หุ่นยนต์",
+ "🧠": "สมอง",
+ "👁️": "ตาข้างเดียว",
+ "🧙": "นักเวทย์",
+ "🧚": "นางฟ้า",
+ "🧜": "ครึ่งคนครึ่งปลา",
+ "🐵": "หน้าลิง",
+ "🦧": "อุรังอุตัง",
+ "🐶": "หน้าสุนัข",
+ "🐺": "หมาป่า",
+ "🦊": "จิ้งจอก",
+ "🦝": "แรคคูน",
+ "🐱": "หน้าแมว",
+ "🦁": "สิงโต",
+ "🐯": "หน้าเสือ",
+ "🐴": "หน้าม้า",
+ "🦄": "ยูนิคอร์น",
+ "🦓": "ม้าลาย",
+ "🦌": "กวาง",
+ "🐮": "หน้าวัว",
+ "🐷": "หน้าหมู",
+ "🐗": "หมูป่าตัวผู้",
+ "🐪": "อูฐโหนกเดียว",
+ "🦙": "ลามะ",
+ "🦒": "ยีราฟ",
+ "🐘": "ช้าง",
+ "🦣": "ช้างแมมมอธ",
+ "🦏": "แรด",
+ "🐭": "หน้าหนู",
+ "🐰": "หน้ากระต่าย",
+ "🐿️": "ชิปมังก์",
+ "🦔": "เฮดจ์ฮ็อก",
+ "🦇": "ค้างคาว",
+ "🐻": "หมี",
+ "🐨": "โคอาล่า",
+ "🦥": "สลอธ",
+ "🦦": "ตัวนาก",
+ "🦘": "จิงโจ้",
+ "🐥": "ลูกเจี๊ยบยืนหันหน้า",
+ "🐦️": "นก",
+ "🕊️": "นกพิราบขาว",
+ "🦆": "เป็ด",
+ "🦉": "นกฮูก",
+ "🦤": "นกโดโด",
+ "🪶": "ขนนก",
+ "🦩": "นกฟลามิงโก",
+ "🦚": "นกยูง",
+ "🦜": "นกแก้ว",
+ "🐊": "จระเข้",
+ "🐢": "เต่า",
+ "🦎": "จิ้งจก",
+ "🐍": "งู",
+ "🐲": "หน้ามังกร",
+ "🦕": "ไดโนเสาร์",
+ "🐳": "ปลาวาฬพ่นน้ำ",
+ "🐬": "ปลาโลมา",
+ "🦭": "แมวน้ำ",
+ "🐟️": "ปลา",
+ "🐠": "ปลาเขตร้อน",
+ "🦈": "ฉลาม",
+ "🐙": "ปลาหมึกยักษ์",
+ "🐚": "หอย",
+ "🐌": "หอยทาก",
+ "🦋": "ผีเสื้อ",
+ "🐛": "แมลง",
+ "🐝": "ผึ้ง",
+ "🐞": "เต่าทอง",
+ "💐": "ช่อดอกไม้",
+ "🌹": "ดอกกุหลาบ",
+ "🌺": "ดอกชบา",
+ "🌻": "ดอกทานตะวัน",
+ "🌷": "ทิวลิป",
+ "🌲": "ต้นสน",
+ "🌳": "ต้นไม้ร่มรื่น",
+ "🌴": "ต้นมะพร้าว",
+ "🌵": "ตะบองเพชร",
+ "🌿": "สมุนไพร",
+ "🍁": "ใบเมเปิ้ล",
+ "🍇": "องุ่น",
+ "🍈": "เมลอน",
+ "🍉": "แตงโม",
+ "🍊": "ส้ม",
+ "🍋": "เลมอน",
+ "🍌": "กล้วย",
+ "🍍": "สับปะรด",
+ "🥭": "มะม่วง",
+ "🍏": "แอปเปิ้ลเขียว",
+ "🍐": "ลูกแพร์",
+ "🍑": "ลูกพีช",
+ "🍒": "เชอร์รี่",
+ "🍓": "สตรอว์เบอร์รี่",
+ "🫐": "บลูเบอร์รี่",
+ "🥝": "กีวี",
+ "🍅": "มะเขือเทศ",
+ "🫒": "มะกอก",
+ "🥥": "มะพร้าว",
+ "🥑": "อาโวคาโด",
+ "🍆": "มะเขือยาว",
+ "🥕": "แครอท",
+ "🌽": "ข้าวโพด",
+ "🌶️": "พริก",
+ "🥬": "ผักใบเขียว",
+ "🥦": "บรอกโคลี",
+ "🧅": "หอมหัวใหญ่",
+ "🍄": "เห็ด",
+ "🥜": "ถั่ว",
+ "🥐": "ครัวซอง",
+ "🥖": "ขนมปังฝรั่งเศส",
+ "🥨": "เพรตเซล",
+ "🥯": "เบเกิล",
+ "🥞": "แพนเค้ก",
+ "🧇": "วาฟเฟิล",
+ "🍔": "แฮมเบอร์เกอร์",
+ "🍕": "พิซซ่า 1 ชิ้น",
+ "🌭": "ฮอทด็อก",
+ "🌮": "ทาโก้",
+ "🍿": "ป๊อปคอร์น",
+ "🦀": "ปู",
+ "🦞": "กุ้งมังกร",
+ "🍨": "ไอศกรีม",
+ "🍩": "โดนัท",
+ "🍪": "คุกกี้",
+ "🎂": "เค้กวันเกิด",
+ "🧁": "คัพเค้ก",
+ "🍫": "ช็อกโกแลต",
+ "🍬": "ลูกอม",
+ "🍭": "อมยิ้ม",
+ "🫖": "กาน้ำชา",
+ "🧃": "เครื่องดื่มแบบกล่อง",
+ "🧉": "ชามาเต",
+ "🧭": "เข็มทิศ",
+ "🏔️": "ภูเขามีหิมะ",
+ "🌋": "ภูเขาไฟ",
+ "🏕️": "ตั้งแคมป์",
+ "🏝️": "เกาะ",
+ "🏡": "บ้านพร้อมสวน",
+ "⛲️": "น้ำพุ",
+ "🎠": "ม้าหมุน",
+ "🎡": "ชิงช้าสวรรค์",
+ "🎢": "รถไฟเหาะ",
+ "💈": "ร้านตัดผม",
+ "🚆": "รถไฟ",
+ "🚋": "ตู้รถราง",
+ "🚍️": "รถบัสกำลังมา",
+ "🚕": "แท็กซี่",
+ "🚗": "รถ",
+ "🚚": "รถขนส่ง",
+ "🚜": "แทร็กเตอร์",
+ "🛵": "รถสกู๊ตเตอร์",
+ "🛺": "รถสามล้อ",
+ "🛴": "สกู๊ตเตอร์",
+ "🛹": "สเก็ตบอร์ด",
+ "🛼": "รองเท้าสเก็ต",
+ "⚓️": "สมอเรือ",
+ "⛵️": "เรือใบ",
+ "🛶": "แคนู",
+ "🚤": "เรือด่วน",
+ "🚢": "เรือ",
+ "✈️": "เครื่องบิน",
+ "🚁": "เฮลิคอปเตอร์",
+ "🚠": "เคเบิลคาร์",
+ "🛰️": "ดาวเทียม",
+ "🚀": "จรวด",
+ "🛸": "จานบิน",
+ "⏰": "นาฬิกาปลุก",
+ "🌙": "พระจันทร์เสี้ยว",
+ "🌡️": "เครื่องวัดอุณหภูมิ",
+ "☀️": "พระอาทิตย์",
+ "🪐": "ดาวเคราะห์ที่มีวงแหวน",
+ "🌟": "ดาวส่องแสง",
+ "🌀": "ไซโคลน",
+ "🌈": "รุ้ง",
+ "☂️": "ร่ม",
+ "❄️": "เกล็ดหิมะ",
+ "☄️": "ดาวหาง",
+ "🔥": "ไฟ",
+ "💧": "หยดน้ำ",
+ "🌊": "คลื่น",
+ "🎃": "ฟักทองฮาโลวีน",
+ "✨": "ประกายวิบวับ",
+ "🎈": "ลูกโป่ง",
+ "🎉": "ปาร์ตี้",
+ "🎏": "ธงปลาคาร์พ",
+ "🎀": "ริบบิ้น",
+ "🎁": "ของขวัญ",
+ "🎟️": "ตั๋วเข้าชม",
+ "🏆️": "ถ้วยรางวัล",
+ "⚽️": "ลูกฟุตบอล",
+ "🏀": "บาสเกตบอล",
+ "🏈": "อเมริกันฟุตบอล",
+ "🎾": "เทนนิส",
+ "🥏": "จานร่อน",
+ "🏓": "ปิงปอง",
+ "🏸": "แบดมินตัน",
+ "🤿": "หน้ากากดำน้ำ",
+ "🥌": "ลูกกลิ้งหิน",
+ "🎯": "กลางเป้า",
+ "🪀": "โยโย่",
+ "🪁": "ว่าว",
+ "🔮": "ลูกแก้ววิเศษ",
+ "🎲": "ลูกเต๋า",
+ "🧩": "จิ๊กซอว์",
+ "🎨": "จานสีวาดรูป",
+ "🧵": "ด้าย",
+ "👕": "เสื้อยืด",
+ "🧦": "ถุงเท้า",
+ "👗": "ชุดกระโปรง",
+ "🩳": "กางเกงขาสั้น",
+ "🎒": "เป้นักเรียน",
+ "👟": "รองเท้ากีฬา",
+ "👑": "มงกุฎ",
+ "🧢": "หมวกแก๊ป",
+ "💄": "ลิปสติก",
+ "💍": "แหวน",
+ "💎": "อัญมณี",
+ "📢": "เครื่องขยายเสียง",
+ "🎶": "โน้ตดนตรีหลายตัว",
+ "🎙️": "ไมค์สตูดิโอ",
+ "📻️": "วิทยุ",
+ "🎷": "แซ็กโซโฟน",
+ "🪗": "แอคคอร์เดียน",
+ "🎸": "กีต้าร์",
+ "🎺": "ทรัมเป็ต",
+ "🎻": "ไวโอลิน",
+ "🪕": "แบนโจ",
+ "🥁": "กลอง",
+ "☎️": "โทรศัพท์",
+ "🔋": "แบตเตอรี่",
+ "💿️": "บลูเรย์",
+ "🧮": "ลูกคิด",
+ "🎬️": "สเลท",
+ "💡": "หลอดไฟ",
+ "🔦": "ไฟฉาย",
+ "🏮": "โคมไฟแดง",
+ "📕": "หนังสือปิด",
+ "🏷️": "ป้าย",
+ "💳️": "บัตรเครดิต",
+ "✏️": "ดินสอ",
+ "🖌️": "แปรงทาสี",
+ "🖍️": "ดินสอสี",
+ "📌": "หมุดปัก",
+ "📎": "คลิปหนีบกระดาษ",
+ "🔑": "กุญแจ",
+ "🪃": "บูมเมอแรง",
+ "🏹": "ธนูและลูกศร",
+ "⚖️": "ตราชั่ง",
+ "🧲": "แม่เหล็ก",
+ "🧪": "หลอดทดลอง",
+ "🧬": "ดีเอ็นเอ",
+ "🔬": "กล้องจุลทรรศน์",
+ "🔭": "กล้องโทรทรรศน์",
+ "📡": "จานดาวเทียม",
+ "🪑": "เก้าอี้",
+ "🧹": "ไม้กวาด",
+ "🗿": "รูปปั้นโมไอ"
+ },
+ "tr": {
+ "👽️": "uzaylı",
+ "🤖": "robot",
+ "🧠": "beyin",
+ "👁️": "göz",
+ "🧙": "büyücü",
+ "🧚": "peri",
+ "🧜": "balık insan",
+ "🐵": "maymun yüzü",
+ "🦧": "orangutan",
+ "🐶": "köpek yüzü",
+ "🐺": "kurt",
+ "🦊": "tilki",
+ "🦝": "rakun",
+ "🐱": "kedi yüzü",
+ "🦁": "aslan",
+ "🐯": "kaplan yüzü",
+ "🐴": "at yüzü",
+ "🦄": "tek boynuzlu at",
+ "🦓": "zebra",
+ "🦌": "geyik",
+ "🐮": "inek yüzü",
+ "🐷": "domuz yüzü",
+ "🐗": "yaban domuzu",
+ "🐪": "deve",
+ "🦙": "lama",
+ "🦒": "zürafa",
+ "🐘": "fil",
+ "🦣": "mamut",
+ "🦏": "gergedan",
+ "🐭": "fare yüzü",
+ "🐰": "tavşan yüzü",
+ "🐿️": "sincap",
+ "🦔": "kirpi",
+ "🦇": "yarasa",
+ "🐻": "ayı",
+ "🐨": "koala",
+ "🦥": "tembel hayvan",
+ "🦦": "su samuru",
+ "🦘": "kanguru",
+ "🐥": "önden civciv",
+ "🐦️": "kuş",
+ "🕊️": "güvercin",
+ "🦆": "ördek",
+ "🦉": "baykuş",
+ "🦤": "dodo kuşu",
+ "🪶": "kuş tüyü",
+ "🦩": "flamingo",
+ "🦚": "tavus kuşu",
+ "🦜": "papağan",
+ "🐊": "timsah",
+ "🐢": "kaplumbağa",
+ "🦎": "kertenkele",
+ "🐍": "yılan",
+ "🐲": "ejderha yüzü",
+ "🦕": "soropod",
+ "🐳": "su püskürten balina",
+ "🐬": "yunus",
+ "🦭": "fok",
+ "🐟️": "balık",
+ "🐠": "tropikal balık",
+ "🦈": "köpek balığı",
+ "🐙": "ahtapot",
+ "🐚": "deniz kabuğu",
+ "🐌": "salyangoz",
+ "🦋": "kelebek",
+ "🐛": "tırtıl",
+ "🐝": "bal arısı",
+ "🐞": "uğur böceği",
+ "💐": "buket",
+ "🌹": "gül",
+ "🌺": "çingülü",
+ "🌻": "ayçiçeği",
+ "🌷": "lale",
+ "🌲": "yaprak dökmeyen ağaç",
+ "🌳": "yaprak döken ağaç",
+ "🌴": "palmiye ağacı",
+ "🌵": "kaktüs",
+ "🌿": "ot",
+ "🍁": "akçaağaç yaprağı",
+ "🍇": "üzüm",
+ "🍈": "kavun",
+ "🍉": "karpuz",
+ "🍊": "mandalina",
+ "🍋": "limon",
+ "🍌": "muz",
+ "🍍": "ananas",
+ "🥭": "mango",
+ "🍏": "yeşil elma",
+ "🍐": "armut",
+ "🍑": "şeftali",
+ "🍒": "kiraz",
+ "🍓": "çilek",
+ "🫐": "yaban mersini",
+ "🥝": "kivi",
+ "🍅": "domates",
+ "🫒": "zeytin",
+ "🥥": "Hindistan cevizi",
+ "🥑": "avokado",
+ "🍆": "patlıcan",
+ "🥕": "havuç",
+ "🌽": "mısır koçanı",
+ "🌶️": "acı biber",
+ "🥬": "yeşil yapraklı sebze",
+ "🥦": "brokoli",
+ "🧅": "soğan",
+ "🍄": "mantar",
+ "🥜": "yer fıstığı",
+ "🥐": "kruvasan",
+ "🥖": "baget ekmek",
+ "🥨": "pretzel",
+ "🥯": "simit",
+ "🥞": "krep",
+ "🧇": "waffle",
+ "🍔": "hamburger",
+ "🍕": "pizza dilimi",
+ "🌭": "sosisli sandviç",
+ "🌮": "tako",
+ "🍿": "patlamış mısır",
+ "🦀": "yengeç",
+ "🦞": "ıstakoz",
+ "🍨": "dondurma",
+ "🍩": "donut",
+ "🍪": "kurabiye",
+ "🎂": "doğum günü pastası",
+ "🧁": "cupcake",
+ "🍫": "çikolata",
+ "🍬": "şekerleme",
+ "🍭": "lolipop",
+ "🫖": "demlik",
+ "🧃": "içecek kutusu",
+ "🧉": "mate çayı",
+ "🧭": "pusula",
+ "🏔️": "karla kaplı dağ",
+ "🌋": "yanardağ",
+ "🏕️": "kamp",
+ "🏝️": "ıssız ada",
+ "🏡": "bahçeli ev",
+ "⛲️": "fıskiye",
+ "🎠": "atlıkarınca",
+ "🎡": "dönme dolap",
+ "🎢": "hız treni",
+ "💈": "berber dükkanı",
+ "🚆": "tren",
+ "🚋": "tramvay vagonu",
+ "🚍️": "yaklaşan otobüs",
+ "🚕": "taksi",
+ "🚗": "araba",
+ "🚚": "nakliye kamyonu",
+ "🚜": "traktör",
+ "🛵": "motorlu skuter",
+ "🛺": "elektrikli çekçek",
+ "🛴": "ayakla sürülen skuter",
+ "🛹": "kaykay",
+ "🛼": "paten",
+ "⚓️": "çıpa",
+ "⛵️": "yelkenli tekne",
+ "🛶": "kano",
+ "🚤": "sürat teknesi",
+ "🚢": "gemi",
+ "✈️": "uçak",
+ "🚁": "helikopter",
+ "🚠": "dağ teleferik hattı",
+ "🛰️": "uydu",
+ "🚀": "roket",
+ "🛸": "uçan daire",
+ "⏰": "çalar saat",
+ "🌙": "hilal",
+ "🌡️": "termometre",
+ "☀️": "güneş",
+ "🪐": "halkalı gezegen",
+ "🌟": "parıldayan yıldız",
+ "🌀": "siklon",
+ "🌈": "gökkuşağı",
+ "☂️": "şemsiye",
+ "❄️": "kar tanesi",
+ "☄️": "kuyruklu yıldız",
+ "🔥": "ateş",
+ "💧": "damlacık",
+ "🌊": "dalga",
+ "🎃": "kabak fener",
+ "✨": "parıltılar",
+ "🎈": "balon",
+ "🎉": "parti konfetisi",
+ "🎏": "sazan şekilli flama",
+ "🎀": "kurdele",
+ "🎁": "paketlenmiş hediye",
+ "🎟️": "giriş bileti",
+ "🏆️": "zafer kupası",
+ "⚽️": "futbol topu",
+ "🏀": "basketbol",
+ "🏈": "amerikan futbolu",
+ "🎾": "tenis",
+ "🥏": "frizbi",
+ "🏓": "masa tenisi",
+ "🏸": "badminton",
+ "🤿": "dalgıç maskesi",
+ "🥌": "curling taşı",
+ "🎯": "tam isabet",
+ "🪀": "yoyo",
+ "🪁": "uçurtma",
+ "🔮": "kristal küre",
+ "🎲": "oyun zarı",
+ "🧩": "yapboz parçası",
+ "🎨": "boya paleti",
+ "🧵": "iplik",
+ "👕": "tişört",
+ "🧦": "çorap",
+ "👗": "elbise",
+ "🩳": "şort",
+ "🎒": "okul çantası",
+ "👟": "koşu ayakkabısı",
+ "👑": "taç",
+ "🧢": "siperli şapka",
+ "💄": "ruj",
+ "💍": "yüzük",
+ "💎": "mücevher",
+ "📢": "hoparlör",
+ "🎶": "müzik notaları",
+ "🎙️": "stüdyo mikrofonu",
+ "📻️": "radyo",
+ "🎷": "saksafon",
+ "🪗": "akordiyon",
+ "🎸": "gitar",
+ "🎺": "trompet",
+ "🎻": "keman",
+ "🪕": "banjo",
+ "🥁": "davul",
+ "☎️": "telefon",
+ "🔋": "pil",
+ "💿️": "optik disk",
+ "🧮": "abaküs",
+ "🎬️": "film tahtası",
+ "💡": "ampul",
+ "🔦": "el feneri",
+ "🏮": "kırmızı kağıt fener",
+ "📕": "kapalı kitap",
+ "🏷️": "etiket",
+ "💳️": "kredi kartı",
+ "✏️": "kurşun kalem",
+ "🖌️": "boya fırçası",
+ "🖍️": "pastel boya",
+ "📌": "raptiye",
+ "📎": "ataş",
+ "🔑": "anahtar",
+ "🪃": "bumerang",
+ "🏹": "ok ve yay",
+ "⚖️": "terazi",
+ "🧲": "mıknatıs",
+ "🧪": "deney tüpü",
+ "🧬": "dna",
+ "🔬": "mikroskop",
+ "🔭": "teleskop",
+ "📡": "uydu anteni",
+ "🪑": "sandalye",
+ "🧹": "süpürge",
+ "🗿": "moyai heykeli"
+ },
+ "vi": {
+ "👽️": "người ngoài hành tinh",
+ "🤖": "mặt rô-bốt",
+ "🧠": "não",
+ "👁️": "mắt",
+ "🧙": "pháp sư",
+ "🧚": "tiên",
+ "🧜": "người cá",
+ "🐵": "mặt khỉ",
+ "🦧": "đười ươi",
+ "🐶": "mặt cún",
+ "🐺": "mặt chó sói",
+ "🦊": "mặt cáo",
+ "🦝": "gấu trúc",
+ "🐱": "mặt mèo",
+ "🦁": "mặt sư tử",
+ "🐯": "mặt hổ",
+ "🐴": "mặt ngựa",
+ "🦄": "mặt kỳ lân",
+ "🦓": "ngựa vằn",
+ "🦌": "hươu",
+ "🐮": "mặt bò",
+ "🐷": "mặt lợn",
+ "🐗": "lợn rừng",
+ "🐪": "lạc đà",
+ "🦙": "lạc đà không bướu",
+ "🦒": "hươu cao cổ",
+ "🐘": "voi",
+ "🦣": "voi ma mút",
+ "🦏": "tê giác",
+ "🐭": "mặt chuột",
+ "🐰": "mặt thỏ",
+ "🐿️": "sóc chuột",
+ "🦔": "nhím",
+ "🦇": "dơi",
+ "🐻": "mặt gấu",
+ "🐨": "gấu túi",
+ "🦥": "con lười",
+ "🦦": "rái cá",
+ "🦘": "chuột túi",
+ "🐥": "mặt trước gà con",
+ "🐦️": "chim",
+ "🕊️": "bồ câu",
+ "🦆": "vịt",
+ "🦉": "cú",
+ "🦤": "chim cưu",
+ "🪶": "lông chim",
+ "🦩": "hồng hạc",
+ "🦚": "con công",
+ "🦜": "con vẹt",
+ "🐊": "cá sấu",
+ "🐢": "rùa",
+ "🦎": "thằn lằn",
+ "🐍": "rắn",
+ "🐲": "mặt rồng",
+ "🦕": "khủng long chân thằn lằn",
+ "🐳": "cá voi đang phun nước",
+ "🐬": "cá heo",
+ "🦭": "chó biển",
+ "🐟️": "cá",
+ "🐠": "cá nhiệt đới",
+ "🦈": "cá mập",
+ "🐙": "bạch tuộc",
+ "🐚": "vỏ xoắn ốc",
+ "🐌": "ốc sên",
+ "🦋": "bướm",
+ "🐛": "con bọ",
+ "🐝": "ong mật",
+ "🐞": "bọ rùa",
+ "💐": "bó hoa",
+ "🌹": "hoa hồng",
+ "🌺": "hoa dâm bụt",
+ "🌻": "hoa hướng dương",
+ "🌷": "hoa tulip",
+ "🌲": "cây thường xanh",
+ "🌳": "cây rụng lá",
+ "🌴": "cây cọ",
+ "🌵": "cây xương rồng",
+ "🌿": "thảo mộc",
+ "🍁": "lá phong",
+ "🍇": "chùm nho",
+ "🍈": "dưa",
+ "🍉": "dưa hấu",
+ "🍊": "quýt",
+ "🍋": "chanh",
+ "🍌": "chuối",
+ "🍍": "dứa",
+ "🥭": "xoài",
+ "🍏": "táo xanh",
+ "🍐": "lê",
+ "🍑": "đào",
+ "🍒": "anh đào",
+ "🍓": "dâu tây",
+ "🫐": "quả việt quất",
+ "🥝": "quả kiwi",
+ "🍅": "cà chua",
+ "🫒": "ôliu",
+ "🥥": "dừa",
+ "🥑": "quả bơ",
+ "🍆": "cà tím",
+ "🥕": "cà rốt",
+ "🌽": "bắp ngô",
+ "🌶️": "quả ớt",
+ "🥬": "xanh lá",
+ "🥦": "xúp lơ xanh",
+ "🧅": "hành",
+ "🍄": "nấm",
+ "🥜": "đậu phộng",
+ "🥐": "bánh sừng bò",
+ "🥖": "bánh mì que",
+ "🥨": "bánh quy xoắn",
+ "🥯": "bánh mỳ vòng",
+ "🥞": "bánh kếp",
+ "🧇": "bánh quế",
+ "🍔": "bánh hamburger",
+ "🍕": "bánh pizza",
+ "🌭": "bánh mì xúc xích",
+ "🌮": "bánh taco",
+ "🍿": "bỏng ngô",
+ "🦀": "cua",
+ "🦞": "tôm hùm",
+ "🍨": "kem",
+ "🍩": "bánh rán vòng",
+ "🍪": "bánh quy",
+ "🎂": "bánh sinh nhật",
+ "🧁": "bánh nướng nhỏ",
+ "🍫": "thanh sô cô la",
+ "🍬": "kẹo",
+ "🍭": "kẹo mút",
+ "🫖": "ấm trà",
+ "🧃": "hộp đồ uống",
+ "🧉": "trà nhựa ruồi",
+ "🧭": "la bàn",
+ "🏔️": "đỉnh núi phủ tuyết",
+ "🌋": "núi lửa",
+ "🏕️": "cắm trại",
+ "🏝️": "đảo hoang",
+ "🏡": "nhà có vườn",
+ "⛲️": "đài phun nước",
+ "🎠": "ngựa đu quay",
+ "🎡": "vòng đu quay",
+ "🎢": "tàu lượn siêu tốc",
+ "💈": "biển hiệu của thợ cắt tóc",
+ "🚆": "tàu hỏa",
+ "🚋": "tàu điện",
+ "🚍️": "xe buýt đang tới",
+ "🚕": "taxi",
+ "🚗": "ô tô",
+ "🚚": "xe tải giao hàng",
+ "🚜": "máy kéo",
+ "🛵": "xe tay ga",
+ "🛺": "xe lam",
+ "🛴": "xe hẩy",
+ "🛹": "ván trượt",
+ "🛼": "giày trượt patin",
+ "⚓️": "mỏ neo",
+ "⛵️": "thuyền buồm",
+ "🛶": "xuồng",
+ "🚤": "xuồng cao tốc",
+ "🚢": "tàu thủy",
+ "✈️": "máy bay",
+ "🚁": "máy bay trực thăng",
+ "🚠": "cáp treo trên núi",
+ "🛰️": "vệ tinh",
+ "🚀": "tên lửa",
+ "🛸": "đĩa bay",
+ "⏰": "đồng hồ báo thức",
+ "🌙": "trăng lưỡi liềm",
+ "🌡️": "nhiệt kế",
+ "☀️": "mặt trời",
+ "🪐": "hành tinh có vành đai bao quanh",
+ "🌟": "ngôi sao lấp lánh",
+ "🌀": "hình lốc xoáy",
+ "🌈": "cầu vồng",
+ "☂️": "cái ô",
+ "❄️": "bông tuyết",
+ "☄️": "sao chổi",
+ "🔥": "lửa",
+ "💧": "giọt nước",
+ "🌊": "sóng nước",
+ "🎃": "đèn lồng bí ngô",
+ "✨": "ánh lấp lánh",
+ "🎈": "bóng bay",
+ "🎉": "pháo giấy buổi tiệc",
+ "🎏": "cờ cá chép",
+ "🎀": "ruy băng",
+ "🎁": "gói quà",
+ "🎟️": "vé vào cửa",
+ "🏆️": "cúp",
+ "⚽️": "bóng đá",
+ "🏀": "bóng rổ",
+ "🏈": "bóng bầu dục Mỹ",
+ "🎾": "quần vợt",
+ "🥏": "đĩa bay trò chơi",
+ "🏓": "bóng bàn",
+ "🏸": "cầu lông",
+ "🤿": "mặt nạ lặn",
+ "🥌": "bi đá trên băng",
+ "🎯": "trúng đích",
+ "🪀": "yo-yo",
+ "🪁": "diều",
+ "🔮": "quả cầu pha lê",
+ "🎲": "trò xúc xắc",
+ "🧩": "ghép hình",
+ "🎨": "bảng màu",
+ "🧵": "sợi chỉ",
+ "👕": "áo phông",
+ "🧦": "tất",
+ "👗": "váy",
+ "🩳": "quần soóc",
+ "🎒": "ba lô đi học",
+ "👟": "giày chạy",
+ "👑": "vương miện",
+ "🧢": "mũ lưỡi trai",
+ "💄": "son môi",
+ "💍": "nhẫn",
+ "💎": "đá quý",
+ "📢": "loa phát thanh",
+ "🎶": "các nốt nhạc",
+ "🎙️": "micrô phòng thu âm",
+ "📻️": "radio",
+ "🎷": "kèn saxophone",
+ "🪗": "phong cầm",
+ "🎸": "đàn ghi-ta",
+ "🎺": "kèn trumpet",
+ "🎻": "đàn violin",
+ "🪕": "đàn banjo",
+ "🥁": "trống",
+ "☎️": "điện thoại bàn",
+ "🔋": "pin",
+ "💿️": "đĩa quang",
+ "🧮": "bàn tính",
+ "🎬️": "bảng clapper",
+ "💡": "bóng đèn",
+ "🔦": "đèn pin",
+ "🏮": "đèn lồng giấy màu đỏ",
+ "📕": "sách đóng",
+ "🏷️": "nhãn",
+ "💳️": "thẻ tín dụng",
+ "✏️": "bút chì",
+ "🖌️": "cọ vẽ tranh",
+ "🖍️": "bút sáp màu",
+ "📌": "đinh ghim",
+ "📎": "kẹp giấy",
+ "🔑": "chìa khóa",
+ "🪃": "bumơrang",
+ "🏹": "cung tên",
+ "⚖️": "cân thăng bằng",
+ "🧲": "nam châm",
+ "🧪": "ống nghiệm",
+ "🧬": "adn",
+ "🔬": "kính hiển vi",
+ "🔭": "kính viễn vọng",
+ "📡": "ăng-ten vệ tinh",
+ "🪑": "ghế",
+ "🧹": "cây chổi",
+ "🗿": "tượng moai"
+ },
+ "zh-CN": {
+ "👽️": "外星人",
+ "🤖": "机器人",
+ "🧠": "脑",
+ "👁️": "眼睛",
+ "🧙": "法师",
+ "🧚": "精灵",
+ "🧜": "人鱼",
+ "🐵": "猴头",
+ "🦧": "红毛猩猩",
+ "🐶": "狗脸",
+ "🐺": "狼",
+ "🦊": "狐狸",
+ "🦝": "浣熊",
+ "🐱": "猫脸",
+ "🦁": "狮子",
+ "🐯": "老虎头",
+ "🐴": "马头",
+ "🦄": "独角兽",
+ "🦓": "斑马",
+ "🦌": "鹿",
+ "🐮": "奶牛头",
+ "🐷": "猪头",
+ "🐗": "野猪",
+ "🐪": "骆驼",
+ "🦙": "美洲鸵",
+ "🦒": "长颈鹿",
+ "🐘": "大象",
+ "🦣": "猛犸",
+ "🦏": "犀牛",
+ "🐭": "老鼠头",
+ "🐰": "兔子头",
+ "🐿️": "松鼠",
+ "🦔": "刺猬",
+ "🦇": "蝙蝠",
+ "🐻": "熊",
+ "🐨": "考拉",
+ "🦥": "树懒",
+ "🦦": "水獭",
+ "🦘": "袋鼠",
+ "🐥": "正面朝向的小鸡",
+ "🐦️": "鸟",
+ "🕊️": "鸽",
+ "🦆": "鸭子",
+ "🦉": "猫头鹰",
+ "🦤": "渡渡鸟",
+ "🪶": "羽毛",
+ "🦩": "火烈鸟",
+ "🦚": "孔雀",
+ "🦜": "鹦鹉",
+ "🐊": "鳄鱼",
+ "🐢": "龟",
+ "🦎": "蜥蜴",
+ "🐍": "蛇",
+ "🐲": "龙头",
+ "🦕": "蜥蜴类",
+ "🐳": "喷水的鲸",
+ "🐬": "海豚",
+ "🦭": "海豹",
+ "🐟️": "鱼",
+ "🐠": "热带鱼",
+ "🦈": "鲨鱼",
+ "🐙": "章鱼",
+ "🐚": "海螺",
+ "🐌": "蜗牛",
+ "🦋": "蝴蝶",
+ "🐛": "毛毛虫",
+ "🐝": "蜜蜂",
+ "🐞": "瓢虫",
+ "💐": "花束",
+ "🌹": "玫瑰",
+ "🌺": "芙蓉",
+ "🌻": "向日葵",
+ "🌷": "郁金香",
+ "🌲": "松树",
+ "🌳": "落叶树",
+ "🌴": "棕榈树",
+ "🌵": "仙人掌",
+ "🌿": "药草",
+ "🍁": "枫叶",
+ "🍇": "葡萄",
+ "🍈": "甜瓜",
+ "🍉": "西瓜",
+ "🍊": "橘子",
+ "🍋": "柠檬",
+ "🍌": "香蕉",
+ "🍍": "菠萝",
+ "🥭": "芒果",
+ "🍏": "青苹果",
+ "🍐": "梨",
+ "🍑": "桃",
+ "🍒": "樱桃",
+ "🍓": "草莓",
+ "🫐": "蓝莓",
+ "🥝": "猕猴桃",
+ "🍅": "西红柿",
+ "🫒": "橄榄",
+ "🥥": "椰子",
+ "🥑": "鳄梨",
+ "🍆": "茄子",
+ "🥕": "胡萝卜",
+ "🌽": "玉米",
+ "🌶️": "红辣椒",
+ "🥬": "绿叶蔬菜",
+ "🥦": "西兰花",
+ "🧅": "洋葱",
+ "🍄": "蘑菇",
+ "🥜": "花生",
+ "🥐": "羊角面包",
+ "🥖": "法式长棍面包",
+ "🥨": "椒盐卷饼",
+ "🥯": "面包圈",
+ "🥞": "烙饼",
+ "🧇": "华夫饼",
+ "🍔": "汉堡",
+ "🍕": "披萨",
+ "🌭": "热狗",
+ "🌮": "墨西哥卷饼",
+ "🍿": "爆米花",
+ "🦀": "蟹",
+ "🦞": "龙虾",
+ "🍨": "冰淇淋",
+ "🍩": "甜甜圈",
+ "🍪": "饼干",
+ "🎂": "生日蛋糕",
+ "🧁": "纸杯蛋糕",
+ "🍫": "巧克力",
+ "🍬": "糖",
+ "🍭": "棒棒糖",
+ "🫖": "茶壶",
+ "🧃": "饮料盒",
+ "🧉": "马黛茶",
+ "🧭": "指南针",
+ "🏔️": "雪山",
+ "🌋": "火山",
+ "🏕️": "露营",
+ "🏝️": "无人荒岛",
+ "🏡": "别墅",
+ "⛲️": "喷泉",
+ "🎠": "旋转木马",
+ "🎡": "摩天轮",
+ "🎢": "过山车",
+ "💈": "理发店",
+ "🚆": "火车",
+ "🚋": "有轨电车",
+ "🚍️": "迎面驶来的公交车",
+ "🚕": "出租车",
+ "🚗": "汽车",
+ "🚚": "货车",
+ "🚜": "拖拉机",
+ "🛵": "小型摩托车",
+ "🛺": "三轮摩托车",
+ "🛴": "滑板车",
+ "🛹": "滑板",
+ "🛼": "四轮滑冰鞋",
+ "⚓️": "锚",
+ "⛵️": "帆船",
+ "🛶": "独木舟",
+ "🚤": "快艇",
+ "🚢": "船",
+ "✈️": "飞机",
+ "🚁": "直升机",
+ "🚠": "缆车",
+ "🛰️": "卫星",
+ "🚀": "火箭",
+ "🛸": "飞碟",
+ "⏰": "闹钟",
+ "🌙": "弯月",
+ "🌡️": "温度计",
+ "☀️": "太阳",
+ "🪐": "有环行星",
+ "🌟": "闪亮的星星",
+ "🌀": "台风",
+ "🌈": "彩虹",
+ "☂️": "伞",
+ "❄️": "雪花",
+ "☄️": "彗星",
+ "🔥": "火焰",
+ "💧": "水滴",
+ "🌊": "浪花",
+ "🎃": "南瓜灯",
+ "✨": "闪亮",
+ "🎈": "气球",
+ "🎉": "拉炮彩带",
+ "🎏": "鲤鱼旗",
+ "🎀": "蝴蝶结",
+ "🎁": "礼物",
+ "🎟️": "入场券",
+ "🏆️": "奖杯",
+ "⚽️": "足球",
+ "🏀": "篮球",
+ "🏈": "美式橄榄球",
+ "🎾": "网球",
+ "🥏": "飞盘",
+ "🏓": "乒乓球",
+ "🏸": "羽毛球",
+ "🤿": "潜水面罩",
+ "🥌": "冰壶",
+ "🎯": "正中靶心的飞镖",
+ "🪀": "悠悠球",
+ "🪁": "风筝",
+ "🔮": "水晶球",
+ "🎲": "骰子",
+ "🧩": "拼图",
+ "🎨": "调色盘",
+ "🧵": "线",
+ "👕": "T恤",
+ "🧦": "袜子",
+ "👗": "连衣裙",
+ "🩳": "短裤",
+ "🎒": "书包",
+ "👟": "跑鞋",
+ "👑": "皇冠",
+ "🧢": "鸭舌帽",
+ "💄": "唇膏",
+ "💍": "戒指",
+ "💎": "宝石",
+ "📢": "喇叭",
+ "🎶": "多个音符",
+ "🎙️": "录音室麦克风",
+ "📻️": "收音机",
+ "🎷": "萨克斯管",
+ "🪗": "手风琴",
+ "🎸": "吉他",
+ "🎺": "小号",
+ "🎻": "小提琴",
+ "🪕": "班卓琴",
+ "🥁": "鼓",
+ "☎️": "电话",
+ "🔋": "电池",
+ "💿️": "光盘",
+ "🧮": "算盘",
+ "🎬️": "场记板",
+ "💡": "灯泡",
+ "🔦": "手电筒",
+ "🏮": "红灯笼",
+ "📕": "合上的书本",
+ "🏷️": "标签",
+ "💳️": "信用卡",
+ "✏️": "铅笔",
+ "🖌️": "画笔",
+ "🖍️": "蜡笔",
+ "📌": "图钉",
+ "📎": "回形针",
+ "🔑": "钥匙",
+ "🪃": "回旋镖",
+ "🏹": "弓和箭",
+ "⚖️": "天平",
+ "🧲": "磁铁",
+ "🧪": "试管",
+ "🧬": "DNA",
+ "🔬": "显微镜",
+ "🔭": "望远镜",
+ "📡": "卫星天线",
+ "🪑": "椅子",
+ "🧹": "扫帚",
+ "🗿": "摩埃"
+ },
+ "zh-TW": {
+ "👽️": "外星人",
+ "🤖": "機器人",
+ "🧠": "腦",
+ "👁️": "眼睛",
+ "🧙": "魔術師",
+ "🧚": "仙女",
+ "🧜": "人魚",
+ "🐵": "猴子頭",
+ "🦧": "猩猩",
+ "🐶": "狗頭",
+ "🐺": "狼",
+ "🦊": "狐狸",
+ "🦝": "浣熊",
+ "🐱": "貓頭",
+ "🦁": "獅子",
+ "🐯": "老虎頭",
+ "🐴": "馬頭",
+ "🦄": "獨角獸",
+ "🦓": "斑馬",
+ "🦌": "鹿",
+ "🐮": "牛頭",
+ "🐷": "豬頭",
+ "🐗": "野豬",
+ "🐪": "單峰駱駝",
+ "🦙": "羊駝",
+ "🦒": "長頸鹿",
+ "🐘": "大象",
+ "🦣": "毛象",
+ "🦏": "犀牛",
+ "🐭": "老鼠頭",
+ "🐰": "兔子頭",
+ "🐿️": "松鼠",
+ "🦔": "刺蝟",
+ "🦇": "蝙蝠",
+ "🐻": "熊",
+ "🐨": "無尾熊",
+ "🦥": "樹懶",
+ "🦦": "水獺",
+ "🦘": "袋鼠",
+ "🐥": "小雞",
+ "🐦️": "鳥",
+ "🕊️": "飛鳥",
+ "🦆": "鴨子",
+ "🦉": "貓頭鷹",
+ "🦤": "渡渡鳥",
+ "🪶": "羽毛",
+ "🦩": "紅鶴",
+ "🦚": "孔雀",
+ "🦜": "鸚鵡",
+ "🐊": "鱷魚",
+ "🐢": "烏龜",
+ "🦎": "蜥蜴",
+ "🐍": "蛇",
+ "🐲": "龍頭",
+ "🦕": "蜥腳類恐龍",
+ "🐳": "鯨魚",
+ "🐬": "海豚",
+ "🦭": "海豹",
+ "🐟️": "魚",
+ "🐠": "熱帶魚",
+ "🦈": "鯊魚",
+ "🐙": "章魚",
+ "🐚": "海螺",
+ "🐌": "蝸牛",
+ "🦋": "蝴蝶",
+ "🐛": "毛毛蟲",
+ "🐝": "蜜蜂",
+ "🐞": "瓢蟲",
+ "💐": "花束",
+ "🌹": "玫瑰",
+ "🌺": "芙蓉",
+ "🌻": "向日葵",
+ "🌷": "鬱金香",
+ "🌲": "常青樹",
+ "🌳": "落葉樹",
+ "🌴": "棕櫚樹",
+ "🌵": "仙人掌",
+ "🌿": "草藥",
+ "🍁": "楓葉",
+ "🍇": "葡萄",
+ "🍈": "瓜",
+ "🍉": "西瓜",
+ "🍊": "橘子",
+ "🍋": "檸檬",
+ "🍌": "香蕉",
+ "🍍": "鳳梨",
+ "🥭": "芒果",
+ "🍏": "青蘋果",
+ "🍐": "梨子",
+ "🍑": "桃子",
+ "🍒": "櫻桃",
+ "🍓": "草莓",
+ "🫐": "藍莓",
+ "🥝": "奇異果",
+ "🍅": "番茄",
+ "🫒": "橄欖",
+ "🥥": "椰子",
+ "🥑": "酪梨",
+ "🍆": "茄子",
+ "🥕": "胡蘿蔔",
+ "🌽": "玉米",
+ "🌶️": "辣椒",
+ "🥬": "綠葉蔬菜",
+ "🥦": "花椰菜",
+ "🧅": "洋蔥",
+ "🍄": "蘑菇",
+ "🥜": "花生",
+ "🥐": "可頌",
+ "🥖": "法國麵包",
+ "🥨": "蝴蝶餅",
+ "🥯": "貝果",
+ "🥞": "鬆餅",
+ "🧇": "格子鬆餅",
+ "🍔": "漢堡",
+ "🍕": "披薩",
+ "🌭": "熱狗",
+ "🌮": "夾餅",
+ "🍿": "爆米花",
+ "🦀": "螃蟹",
+ "🦞": "龍蝦",
+ "🍨": "冰淇淋",
+ "🍩": "甜甜圈",
+ "🍪": "餅乾",
+ "🎂": "生日蛋糕",
+ "🧁": "杯子蛋糕",
+ "🍫": "巧克力",
+ "🍬": "糖",
+ "🍭": "棒棒糖",
+ "🫖": "茶壺",
+ "🧃": "鋁箔包",
+ "🧉": "瑪黛茶",
+ "🧭": "指南針",
+ "🏔️": "雪山",
+ "🌋": "火山",
+ "🏕️": "露營",
+ "🏝️": "熱帶小島",
+ "🏡": "別墅",
+ "⛲️": "噴泉",
+ "🎠": "旋轉木馬",
+ "🎡": "摩天輪",
+ "🎢": "雲霄飛車",
+ "💈": "理髮店",
+ "🚆": "火車",
+ "🚋": "電纜車",
+ "🚍️": "公共汽車",
+ "🚕": "計程車",
+ "🚗": "汽車",
+ "🚚": "貨車",
+ "🚜": "拖弋機",
+ "🛵": "摩托車",
+ "🛺": "嘟嘟車",
+ "🛴": "滑板車",
+ "🛹": "滑板",
+ "🛼": "輪式溜冰鞋",
+ "⚓️": "錨",
+ "⛵️": "帆船",
+ "🛶": "獨木舟",
+ "🚤": "快艇",
+ "🚢": "船",
+ "✈️": "飛機",
+ "🚁": "直升機",
+ "🚠": "纜車",
+ "🛰️": "衛星",
+ "🚀": "火箭",
+ "🛸": "飛碟",
+ "⏰": "鬧鐘",
+ "🌙": "彎月",
+ "🌡️": "溫度計",
+ "☀️": "太陽",
+ "🪐": "帶行星環的行星",
+ "🌟": "閃爍的星星",
+ "🌀": "颱風",
+ "🌈": "彩虹",
+ "☂️": "雨傘",
+ "❄️": "雪花",
+ "☄️": "慧星",
+ "🔥": "火",
+ "💧": "水滴",
+ "🌊": "波浪",
+ "🎃": "南瓜燈",
+ "✨": "閃爍",
+ "🎈": "氣球",
+ "🎉": "拉炮",
+ "🎏": "鯉魚旗",
+ "🎀": "蝴蝶結",
+ "🎁": "禮物",
+ "🎟️": "入場券",
+ "🏆️": "獎盃",
+ "⚽️": "足球",
+ "🏀": "籃球",
+ "🏈": "美式足球",
+ "🎾": "網球",
+ "🥏": "飛盤",
+ "🏓": "桌球",
+ "🏸": "羽毛球",
+ "🤿": "潛水面罩",
+ "🥌": "冰石壺",
+ "🎯": "命中",
+ "🪀": "溜溜球",
+ "🪁": "風箏",
+ "🔮": "水晶球",
+ "🎲": "骰子",
+ "🧩": "拼圖",
+ "🎨": "調色板",
+ "🧵": "線",
+ "👕": "T卹",
+ "🧦": "襪子",
+ "👗": "洋裝",
+ "🩳": "短泳褲",
+ "🎒": "書包",
+ "👟": "運動鞋",
+ "👑": "皇冠",
+ "🧢": "鴨舌帽",
+ "💄": "口紅",
+ "💍": "戒指",
+ "💎": "鑽石",
+ "📢": "大聲公",
+ "🎶": "樂符",
+ "🎙️": "錄音室麥克風",
+ "📻️": "收音機",
+ "🎷": "薩克斯風",
+ "🪗": "手風琴",
+ "🎸": "吉他",
+ "🎺": "小號",
+ "🎻": "小提琴",
+ "🪕": "斑鳩琴",
+ "🥁": "鼓",
+ "☎️": "電話",
+ "🔋": "電池",
+ "💿️": "光碟",
+ "🧮": "算盤",
+ "🎬️": "場記板",
+ "💡": "燈泡",
+ "🔦": "手電筒",
+ "🏮": "燈籠",
+ "📕": "合起來的書本",
+ "🏷️": "吊牌",
+ "💳️": "信用卡",
+ "✏️": "鉛筆",
+ "🖌️": "畫筆",
+ "🖍️": "蠟筆",
+ "📌": "圖釘",
+ "📎": "迴紋針",
+ "🔑": "鑰匙",
+ "🪃": "迴力鏢",
+ "🏹": "弓箭",
+ "⚖️": "天平",
+ "🧲": "磁鐵",
+ "🧪": "試管",
+ "🧬": "DNA",
+ "🔬": "顯微鏡",
+ "🔭": "望遠鏡",
+ "📡": "衛星天線",
+ "🪑": "椅子",
+ "🧹": "掃帚",
+ "🗿": "復活節島"
+ }
+}
diff --git a/browser/components/torpreferences/content/bridgemoji/1f300.svg b/browser/components/torpreferences/content/bridgemoji/1f300.svg
new file mode 100644
index 0000000000000..1de6f256cb52c
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f300.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#55ACEE" d="M35.782 24.518c-.13-.438-.422-.799-.821-1.016-.802-.436-1.879-.116-2.316.683-1.797 3.296-4.771 5.695-8.372 6.757-3.563 1.051-7.437.634-10.698-1.144-2.558-1.394-4.419-3.699-5.242-6.493-.74-2.514-.495-5.016.552-7.033-.363 1.605-.313 3.285.164 4.908.737 2.507 2.407 4.575 4.701 5.823 2.733 1.492 5.989 1.841 8.979.961 3.025-.892 5.521-2.906 7.026-5.672 1.832-3.358 2.246-7.228 1.165-10.898-1.08-3.669-3.524-6.69 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f308.svg b/browser/components/torpreferences/content/bridgemoji/1f308.svg
new file mode 100644
index 0000000000000..ffe6a12398cf0
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f308.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#8767AC" d="M36 1C16.118 1 1 16.118 1 36h17.042c0-9.917 8.042-17.958 17.958-17.958V1z"/><path fill="#EB2027" d="M0 35.999h3.042c0-18.189 14.734-32.935 32.917-32.957V0C16.095.023 0 16.131 0 35.999z"/><path fill="#F19020" d="M3.083 36h3C6.083 19.468 19.473 6.065 36 6.043v-3C17.817 3.065 3.083 17.811 3.083 36z"/><path fill="#FFCB4C" d="M6.083 36h3C9.083 21.125 21.13 9.065 36 9.043v-3C19.473 6.065 6.083 19.468 6.083 36z" [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f30a.svg b/browser/components/torpreferences/content/bridgemoji/1f30a.svg
new file mode 100644
index 0000000000000..0e68ec3614f89
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f30a.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#269" d="M33.398 23.678c-7.562 4.875-20.062-.438-18.375-8.062 1.479-6.684 9.419-4.763 11.225-3.861 1.806.902.713-3.889-3.475-5.327C17.1 4.48 10.156 4.893 7.961 14.678c-1.5 6.687 1.438 16.062 12.719 16.187 11.281.125 12.718-7.187 12.718-7.187z"/><path fill="#55ACEE" d="M35.988 25.193c0-2.146-2.754-2.334-4-1.119-2.994 2.919-7.402 4.012-13.298 2.861-10.25-2-10.341-14.014-3.333-17.441 3.791-1.854 8.289.341 9.999 1.655 1. [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f30b.svg b/browser/components/torpreferences/content/bridgemoji/1f30b.svg
new file mode 100644
index 0000000000000..88d989d73c53d
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f30b.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M12 36V16s-1.17 1.053-2.354 1.929c-.313.231-1.977.79-2.312 1.04-1.762 1.315-2.552 3.841-2.792 4.167C4.083 23.76 0 36 0 36h12z"/><path fill="#4B545D" d="M32 36l-5.5-17.75-8.5-5.656-6.458 2.208C11.135 15.583 10 18.25 10 18.25L8.75 22 0 36h32z"/><path fill="#292F33" d="M18.135 25.726c-.145-.513-.026-.97-.177-1.476-.148-.499-.566-1.047-.693-1.478-.265-.899-.454-1.583-.445-1.772.024-.469.894-.401 1.102.469.293 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f319.svg b/browser/components/torpreferences/content/bridgemoji/1f319.svg
new file mode 100644
index 0000000000000..d98dc2f9f42ff
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f319.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFD983" d="M30.312.776C32 19 20 32 .776 30.312c8.199 7.717 21.091 7.588 29.107-.429C37.9 21.867 38.03 8.975 30.312.776z"/><path d="M30.705 15.915c-.453.454-.453 1.189 0 1.644.454.453 1.189.453 1.643 0 .454-.455.455-1.19 0-1.644-.453-.454-1.189-.454-1.643 0zm-16.022 14.38c-.682.681-.682 1.783 0 2.465.68.682 1.784.682 2.464 0 .681-.682.681-1.784 0-2.465-.68-.682-1.784-.682-2.464 0zm13.968-2.147c-1.135 1.135-2.974 1.13 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f31f.svg b/browser/components/torpreferences/content/bridgemoji/1f31f.svg
new file mode 100644
index 0000000000000..a4695dd6df575
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f31f.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M28.84 17.638c-.987 1.044-1.633 3.067-1.438 4.493l.892 6.441c.197 1.427-.701 2.087-1.996 1.469l-5.851-2.796c-1.295-.62-3.408-.611-4.7.018l-5.826 2.842c-1.291.629-2.193-.026-2.007-1.452l.843-6.449c.186-1.427-.475-3.444-1.47-4.481l-4.494-4.688c-.996-1.037-.655-2.102.755-2.365l6.37-1.188c1.41-.263 3.116-1.518 3.793-2.789L16.762.956c.675-1.271 1.789-1.274 2.473-.009L22.33 6.66c.686 1.265 2.4 2.507 3.814 2.758 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f321.svg b/browser/components/torpreferences/content/bridgemoji/1f321.svg
new file mode 100644
index 0000000000000..95a75984e1ff2
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f321.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M33.536 2.464c-1.953-1.953-5.118-1.953-7.071 0l-1.197 1.199 2.842 2.843c.391.391.391 1.024 0 1.414-.195.195-.451.293-.707.293s-.512-.098-.707-.293l-2.841-2.842-2.11 2.112 2.841 2.84c.391.39.391 1.023 0 1.414-.195.195-.451.293-.707.293s-.512-.098-.707-.293l-2.84-2.839-2.12 2.122 2.837 2.838c.391.391.391 1.024 0 1.414-.195.195-.451.293-.707.293s-.512-.098-.707-.293l-2.837-2.837-2.12 2.123 2.836 2.836c.391.3 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f32d.svg b/browser/components/torpreferences/content/bridgemoji/1f32d.svg
new file mode 100644
index 0000000000000..a450dbba085ec
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f32d.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D99E82" d="M31.42 31.471c-3.515 3.515-9.213 3.515-12.728 0L4.55 17.328c-3.515-3.515-3.515-9.213 0-12.728 3.515-3.515 9.213-3.515 12.728 0L31.42 18.743c3.515 3.514 3.515 9.213 0 12.728z"/><path fill="#F7BBA6" d="M29.335 20.9c3.515 3.515 4.609 8.119 2.475 10.253-2.135 2.134-6.739 1.039-10.253-2.475L7.414 14.536c-3.515-3.515-4.609-8.12-2.475-10.253 2.134-2.134 6.738-1.04 10.253 2.475L29.335 20.9z"/><path fill="#DD2E44" [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f32e.svg b/browser/components/torpreferences/content/bridgemoji/1f32e.svg
new file mode 100644
index 0000000000000..5b08f1f7d1997
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f32e.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFE8B6" d="M12 7C5.374 7 0 14.164 0 23h6v6h17.119c.564-1.854.881-3.877.881-6 0-8.836-5.373-16-12-16z"/><path fill="#FFE8B6" d="M29 21h4.896C33.156 13.11 28.118 7 22 7c-6.627 0-12 7.164-12 16 0 2.123.317 4.146.88 6H29v-8z"/><path fill="#FFAC33" d="M36 23c0-8.836-5.373-16-12-16-6.626 0-12 7.164-12 16 0 2.123.317 4.146.88 6H30c3.314 0 6-2.685 6-6z"/><path fill="#FFAC33" d="M6 23h10v6H6z"/><path fill="#FFE8B6" d="M0 23c [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f332.svg b/browser/components/torpreferences/content/bridgemoji/1f332.svg
new file mode 100644
index 0000000000000..540f1860cc166
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f332.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#662113" d="M22 33c0 2.209-1.791 3-4 3s-4-.791-4-3l1-9c0-2.209.791-2 3-2s3-.209 3 2l1 9z"/><path fill="#5C913B" d="M31.406 27.297C24.443 21.332 21.623 12.791 18 12.791c-3.623 0-6.443 8.541-13.405 14.506-2.926 2.507-1.532 3.957 2.479 3.667 3.576-.258 6.919-1.069 10.926-1.069s7.352.812 10.926 1.069c4.012.29 5.405-1.16 2.48-3.667z"/><path fill="#3E721D" d="M29.145 24.934C23.794 20.027 20.787 13 18 13c-2.785 0-5.793 7.02 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f333.svg b/browser/components/torpreferences/content/bridgemoji/1f333.svg
new file mode 100644
index 0000000000000..3937fc499f8b5
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f333.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#662113" d="M22 33c0 2.209-1.791 3-4 3s-4-.791-4-3l1-9c0-2.209.791-2 3-2s3-.209 3 2l1 9z"/><path fill="#5C913B" d="M34 17c0 8.837-7.163 12-16 12-8.836 0-16-3.163-16-12C2 8.164 11 0 18 0s16 8.164 16 17z"/><g fill="#3E721D"><ellipse cx="6" cy="21" rx="2" ry="1"/><ellipse cx="30" cy="21" rx="2" ry="1"/><ellipse cx="10" cy="25" rx="2" ry="1"/><ellipse cx="14" cy="22" rx="2" ry="1"/><ellipse cx="10" cy="16" rx="2" ry="1"/ [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f334.svg b/browser/components/torpreferences/content/bridgemoji/1f334.svg
new file mode 100644
index 0000000000000..55d246a2fe7a0
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f334.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C1694F" d="M21.978 20.424c-.054-.804-.137-1.582-.247-2.325-.133-.89-.299-1.728-.485-2.513-.171-.723-.356-1.397-.548-2.017-.288-.931-.584-1.738-.852-2.4-.527-1.299-.943-2.043-.943-2.043l-3.613.466s.417.87.868 2.575c.183.692.371 1.524.54 2.495.086.49.166 1.012.238 1.573.1.781.183 1.632.242 2.549.034.518.058 1.058.074 1.619.006.204.015.401.018.611.01.656-.036 1.323-.118 1.989-.074.6-.182 1.197-.311 1.789-.185.848-.413 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f335.svg b/browser/components/torpreferences/content/bridgemoji/1f335.svg
new file mode 100644
index 0000000000000..097dc13c440eb
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f335.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#77B255" d="M30 4c-2.209 0-4 1.791-4 4v9.125c0 1.086-.887 1.96-2 2.448V6c0-3.313-2.687-6-6-6s-6 2.687-6 6v17.629c-1.122-.475-2-1.371-2-2.504V16c0-2.209-1.791-4-4-4s-4 1.791-4 4v7c0 2.209 1.75 3.875 3.375 4.812 1.244.718 4.731 1.6 6.625 1.651V33c0 3.313 12 3.313 12 0v-7.549c1.981-.119 5.291-.953 6.479-1.639C32.104 22.875 34 21.209 34 19V8c0-2.209-1.791-4-4-4z"/><g fill="#3E721D"><circle cx="12" cy="6" r="1"/><circle c [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f336.svg b/browser/components/torpreferences/content/bridgemoji/1f336.svg
new file mode 100644
index 0000000000000..eaeef864dc485
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f336.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DA2F47" d="M4.042 27.916c4.89.551 9.458-1.625 13.471-5.946 4.812-5.182 5-13 5-14s11.31-3.056 11 5c-.43 11.196-7.43 20.946-19.917 21.916-5.982.465-9.679-.928-11.387-2.345-2.69-2.231-.751-4.916 1.833-4.625z"/><path fill="#77B255" d="M30.545 6.246c.204-1.644.079-3.754-.747-4.853-1.111-1.479-4.431-.765-3.569.113.96.979 2.455 2.254 2.401 4.151-.044-.01-.085-.022-.13-.032-3.856-.869-6.721 1.405-7.167 2.958-.782 2.722 4.06 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f337.svg b/browser/components/torpreferences/content/bridgemoji/1f337.svg
new file mode 100644
index 0000000000000..86a1a36f99dba
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f337.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#77B255" d="M34.751 22c-3.382 0-11.9 3.549-15.751 7.158V17c0-.553-.447-1-1-1-.552 0-1 .447-1 1v12.341C13.247 25.669 4.491 22 1.052 22 .123 22 11.913 35.992 17 34.599V35c0 .553.448 1 1 1 .553 0 1-.447 1-1v-.356C24.188 35.638 35.668 22 34.751 22z"/><path fill="#EA596E" d="M25 13.417C25 19.768 23.293 23 18 23s-7-3.232-7-9.583S16 0 18 0s7 7.066 7 13.417z"/><path fill="#F4ABBA" d="M22.795 2c-.48 0-4.106 14.271-4.803 19.27 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f339.svg b/browser/components/torpreferences/content/bridgemoji/1f339.svg
new file mode 100644
index 0000000000000..500d9257cece8
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f339.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#3E721D" d="M19.32 25.358c-.113 0-.217.003-.32.005v-.415c4.805-.479 8.548-4.264 8.548-7.301 0-3.249 0 1.47-9.562 1.47-9.558 0-9.558-4.719-9.558-1.47 0 3.043 3.757 6.838 8.572 7.305v.411c-.104-.002-.207-.005-.321-.005-2.553 0-6.603-2.05-6.603-1.32 0 .646 4.187 4.017 6.924 4.796V35c0 .553.447 1 1 1s1-.447 1-1v-6.166c2.738-.779 6.924-4.15 6.924-4.796 0-.729-4.05 1.32-6.604 1.32z"/><path fill="#A0041E" d="M26.527 7.353c- [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f33a.svg b/browser/components/torpreferences/content/bridgemoji/1f33a.svg
new file mode 100644
index 0000000000000..19c2f896020e1
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f33a.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#77B255" d="M19.602 32.329c6.509 6.506 17.254-7.669 15.72-7.669-7.669 0-22.227 1.161-15.72 7.669z"/><path fill="#77B255" d="M15.644 33.372C9.612 39.404-.07 26.263 1.352 26.263c3.81 0 9.374-.348 12.79.867 2.958 1.052 4.304 3.442 1.502 6.242z"/><path fill="#F4ABBA" d="M34.613 15.754c-.052-.901-.175-2.585-1.398-4.227-1.16-1.549-3.805-3.371-5.534-2.585.516-1.676-.264-4.125-1.191-5.49-1.179-1.736-4.262-3.843-8.146-3.026-1 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f33b.svg b/browser/components/torpreferences/content/bridgemoji/1f33b.svg
new file mode 100644
index 0000000000000..413e6fcbf87b6
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f33b.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#3E721D" d="M28 27c-8 0-8 6-8 6V22h-4v11s0-6-8-6c-4 0-7-2-7-2s0 9 9 9h6s0 2 2 2 2-2 2-2h6c9 0 9-9 9-9s-3 2-7 2z"/><path fill="#FFAC33" d="M21.125 27.662c-.328 0-.651-.097-.927-.283l-2.323-1.575-2.322 1.575c-.277.186-.601.283-.929.283-.143 0-.287-.018-.429-.057-.462-.123-.851-.441-1.06-.874l-1.225-2.527-2.797.204c-.04.002-.079.004-.119.004-.438 0-.86-.174-1.17-.484-.34-.342-.516-.81-.481-1.288l.201-2.8-2.523-1.225c-.4 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f33d.svg b/browser/components/torpreferences/content/bridgemoji/1f33d.svg
new file mode 100644
index 0000000000000..6c4ae3bf53b02
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f33d.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#5C913B" d="M15.373 1.022C13.71 2.686 8.718 9.34 11.214 15.164c2.495 5.823 5.909 2.239 7.486-2.495.832-2.496.832-5.824-.831-10.815-.832-2.496-2.496-.832-2.496-.832zm19.304 19.304c-1.663 1.663-8.319 6.655-14.142 4.159-5.824-2.496-2.241-5.909 2.495-7.486 2.497-.832 5.823-.833 10.814.832 2.496.831.833 2.495.833 2.495z"/><path fill="#F4900C" d="M32.314 6.317s-.145-1.727-.781-2.253c-.435-.546-2.018-.546-2.018-.546-1.664 0 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f33f.svg b/browser/components/torpreferences/content/bridgemoji/1f33f.svg
new file mode 100644
index 0000000000000..9243e96857bf6
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f33f.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#77B255" d="M20.917 22.502c-2.706-.331-3.895-1.852-6.273-4.889 3.039-2.376 4.559-3.565 7.266-3.235 2.71.332 5.25 2.016 6.273 4.889-1.683 2.543-4.557 3.563-7.266 3.235zm-5.959 8.814c-2.549-.187-3.733-1.553-6.098-4.288 2.735-2.364 4.102-3.547 6.652-3.364 2.551.185 5.009 1.644 6.098 4.287-1.459 2.458-4.1 3.548-6.652 3.365zm-6.22-15.707c1.338 1.631 1.191 3.117.898 6.088-2.97-.294-4.456-.44-5.795-2.071-1.339-1.634-1.861-3 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f341.svg b/browser/components/torpreferences/content/bridgemoji/1f341.svg
new file mode 100644
index 0000000000000..7cd7ad977b13b
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f341.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M36 20.917c0-.688-2.895-.5-3.125-1s3.208-4.584 2.708-5.5-5.086 1.167-5.375.708c-.288-.458.292-3.5-.208-3.875s-5.25 4.916-5.917 4.292c-.666-.625 1.542-10.5 1.086-10.698-.456-.198-3.419 1.365-3.793 1.282C21.002 6.042 18.682 0 18 0s-3.002 6.042-3.376 6.125c-.374.083-3.337-1.48-3.793-1.282-.456.198 1.752 10.073 1.085 10.698C11.25 16.166 6.5 10.875 6 11.25s.08 3.417-.208 3.875c-.289.458-4.875-1.625-5.375-.708s [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f344.svg b/browser/components/torpreferences/content/bridgemoji/1f344.svg
new file mode 100644
index 0000000000000..0cf7a79142409
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f344.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#99AAB5" d="M27 33c0 2.209-1.791 3-4 3H13c-2.209 0-4-.791-4-3s3-7 3-13 12-6 12 0 3 10.791 3 13z"/><path fill="#DD2E44" d="M34.666 11.189l-.001-.002c-.96-2.357-2.404-4.453-4.208-6.182h-.003C27.222 1.904 22.839 0 18 0 13.638 0 9.639 1.541 6.524 4.115c-2.19 1.809-3.941 4.13-5.076 6.785C.518 13.075 0 15.473 0 18c0 2.209 1.791 4 4 4h28c2.209 0 4-1.791 4-4 0-2.417-.48-4.713-1.334-6.811z"/><g fill="#F4ABBA"><path d="M7.708 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f345.svg b/browser/components/torpreferences/content/bridgemoji/1f345.svg
new file mode 100644
index 0000000000000..411c2a50e38b2
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f345.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M22.494 5.344c-.687 0-1.352.066-1.991.177-.819-.104-2.74-.231-3.591-.231-8.473 0-15.886 3.177-15.886 14.298 0 9.036 7.049 16.361 16.976 16.361s17.974-7.325 17.974-16.361C35.975 8.339 26.59 5.344 22.494 5.344z"/><path fill="#77B255" d="M8.439.091c1.637 1.636 2.77 2.266 3.274 4.91.298 1.564 2.266 1.51 2.266 1.51s-3.903 1.763-5.54 3.4c0 0 4.91-1.637 6.547-1.637 0 0 3.273 1.637 3.273 3.273 0 0 0-3.273-1.636-3 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f346.svg b/browser/components/torpreferences/content/bridgemoji/1f346.svg
new file mode 100644
index 0000000000000..14688a6dd5fa2
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f346.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#744EAA" d="M6 4c3 0 5 2 8 6s7.957 7.191 12 8c5 1 9 5 9 11 0 4.897-3.846 7-9 7-5 0-9-3-14-8S2 14 2 10s1-6 4-6z"/><path fill="#77B255" d="M3.515 0c1.248 0 1.248 1.248 1.248 2.495 0 1.764 1.248 1.129 2.496 1.129C8.505 3.624 11 6 11 6H7.258c-1.248 0 0 2.614-1.248 2.614S4.762 7.426 3.515 7.426 2 11 2 11s-1.604-4.153.267-6.024C3.515 3.728 1.02 0 3.515 0z"/></svg>
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f347.svg b/browser/components/torpreferences/content/bridgemoji/1f347.svg
new file mode 100644
index 0000000000000..e52e2f851970b
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f347.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#77B255" d="M9.999 12c-.15 0-.303-.034-.446-.106-4.38-2.19-7.484-7.526-8.501-10.578C.876.792 1.16.226 1.684.051c.525-.176 1.091.109 1.265.632.877 2.632 3.688 7.517 7.499 9.422.494.247.694.848.447 1.342-.176.351-.529.553-.896.553z"/><circle fill="#553788" cx="19" cy="29" r="7"/><circle fill="#9266CC" cx="10" cy="15" r="7"/><circle fill="#AA8DD8" cx="19" cy="12" r="7"/><circle fill="#744EAA" cx="27" cy="18" r="7"/><cir [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f348.svg b/browser/components/torpreferences/content/bridgemoji/1f348.svg
new file mode 100644
index 0000000000000..f3482735105c8
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f348.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#A6D388" d="M31.924 10.982c4.418 7.652 1.99 17.326-5.424 21.607-7.414 4.28-16.505 2.413-20.924-5.241C.577 18.688 3.086 9.156 10.5 4.876c7.414-4.28 17.924.044 21.424 6.106z"/><path fill="#77B255" d="M24 6c3 1 6 4 8 7 .836 1.254.729-.078-.294-2.348C28.02 4.768 17.777.675 10.5 4.876c-3.01 1.738-5.194 4.349-6.413 7.408C4.808 11.471 5.52 11 6 11c1 0-1.896 3.279 1 11 3 8 3 4 3 4s-2-9-1-12 2-5 3-4 5 9 7 14c2.259 5.647 2-1-1 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f349.svg b/browser/components/torpreferences/content/bridgemoji/1f349.svg
new file mode 100644
index 0000000000000..0f5ec06a4d403
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f349.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#5C913B" d="M2.472 6.572C1.528 8.698 1 11.038 1 13.5 1 23.165 9.059 31 19 31c7.746 0 14.33-4.767 16.868-11.44L2.472 6.572z"/><path fill="#FFE8B6" d="M4.332 7.295C3.479 9.197 3 11.293 3 13.5c0 8.591 7.164 15.556 16 15.556 6.904 0 12.77-4.26 15.013-10.218L4.332 7.295z"/><path fill="#DD2E44" d="M6.191 8.019C5.43 9.697 5 11.548 5 13.5c0 7.518 6.268 13.611 14 13.611 6.062 0 11.21-3.753 13.156-8.995L6.191 8.019z"/><path d= [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f34a.svg b/browser/components/torpreferences/content/bridgemoji/1f34a.svg
new file mode 100644
index 0000000000000..82c0c52b1d0de
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f34a.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F4900C" d="M3 19.5C3 10.388 10.387 3 19.499 3c9.113 0 16.5 7.387 16.5 16.5S28.612 36 19.499 36C10.387 36 3 28.613 3 19.5z"/><path fill="#662113" d="M11.414 7.585c-.267-.267-.797-.197-1.355.12-3.3-2.732-8.653-3.652-8.895-3.692-.546-.089-1.059.277-1.15.821-.091.544.276 1.06.821 1.151.053.009 4.934.854 7.821 3.16-.275.525-.324 1.015-.07 1.268.39.391 1.34.074 2.121-.707.781-.78 1.097-1.73.707-2.121z"/><path fill="#5C913 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f34b.svg b/browser/components/torpreferences/content/bridgemoji/1f34b.svg
new file mode 100644
index 0000000000000..ffbdc0886c9e7
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f34b.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#5C913B" d="M11.405 3.339c6.48-1.275 8.453 1.265 11.655.084 3.202-1.181.093 2.82-.745 3.508-.84.688-8.141 4.809-11.307 3.298-3.166-1.511-3.182-6.186.397-6.89z"/><path fill="#77B255" d="M15.001 16c-.304 0-.605-.138-.801-.4-.687-.916-1.308-1.955-1.965-3.056C9.967 8.749 7.396 4.446.783 2.976c-.539-.12-.879-.654-.759-1.193.12-.54.654-.878 1.193-.759C8.671 2.68 11.599 7.581 13.952 11.519c.63 1.054 1.224 2.049 1.848 2.881. [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f34c.svg b/browser/components/torpreferences/content/bridgemoji/1f34c.svg
new file mode 100644
index 0000000000000..b4120ba34cbf2
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f34c.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFE8B6" d="M28 2c2.684-1.342 5 4 3 13-1.106 4.977-5 9-9 12s-11-1-7-5 8-7 10-13c1.304-3.912 1-6 3-7z"/><path fill="#FFD983" d="M31 8c0 3-1 9-4 13s-7 5-4 1 5-7 6-11 2-7 2-3z"/><path fill="#FFCC4D" d="M22 20c-.296.592 1.167-3.833-3-6-1.984-1.032-10 1-4 1 3 0 4 2 2 4-.291.292-.489.603-.622.912-.417.346-.873.709-1.378 1.088-2.263 1.697-5.84 4.227-10 7-3 2-4 3-4 4 0 3 9 3 14 1s10-7 10-7l4-4c-3-4-7-2-7-2z"/><path fill="#FF [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f34d.svg b/browser/components/torpreferences/content/bridgemoji/1f34d.svg
new file mode 100644
index 0000000000000..e96999db7a0e9
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f34d.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#5C913B" d="M18.241 9.633c-.277-3.307 2.17-4.72 2.17-4.72-3.199.113-4.894 2.826-4.894 2.826-.752-1.3.946-4.012 2.169-4.719-3.198.113-3.67 2.12-3.67 2.12-1.503-2.601-1.03-4.607-1.03-4.607-1.121.647-1.767 2.113-2.141 3.512l-2.318-2.67c-.23 1.044.157 3.174.573 4.959-3.055-1.79-5.903-.15-5.903-.15 3.95 1.188 5.45 3.788 5.45 3.788s-3.948-1.187-5.646 1.526c2.597-.092 4.5.499 5.856 1.23-1.163.289-3.145-.236-4.355 1.371 0 0 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f34f.svg b/browser/components/torpreferences/content/bridgemoji/1f34f.svg
new file mode 100644
index 0000000000000..1423d8aa8e2cb
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f34f.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#77B255" d="M24 7c-3 0-3 1-6 1s-3-1-6-1c-4 0-9 2-9 9 0 11 6 20 10 20 3 0 3-1 5-1s2 1 5 1c4 0 10-9 10-20 0-7.001-5-9-9-9z"/><path fill="#3E721D" d="M17.311 7.88s-1.775-4.674-6.58-6.06c-3.843-1.108-6.318.26-6.318.26s3.012 3.991 5.895 4.822c2.882.83 7.003.978 7.003.978z"/><path fill="#662113" d="M18 10c-.552 0-1-.448-1-1 0-3.441 1.2-6.615 3.293-8.707.391-.391 1.023-.391 1.414 0s.391 1.024 0 1.414C19.986 3.427 19 6.085 1 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f350.svg b/browser/components/torpreferences/content/bridgemoji/1f350.svg
new file mode 100644
index 0000000000000..2888963f457ac
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f350.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#A6D388" d="M7.681 9.097c1.587-3.151 7.698-1.916 11.958 2.171 2.697 2.586 8.056 1.498 11.498 4.804 3.493 3.354 3.259 9.361-3.053 15.767C23 37 16 37 11.835 33.384c-4.388-3.811-2.476-8.61-4.412-13.585C5.487 14.823 3.1 9.375 7.681 9.097z"/><path fill="#662113" d="M8.178 9.534c-.43.448-1.114.489-1.527.093-3.208-3.079-3.918-7.544-3.946-7.776-.074-.586.348-1.157.939-1.278.592-.121 1.131.257 1.205.842.006.05.657 3.997 3.359 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f351.svg b/browser/components/torpreferences/content/bridgemoji/1f351.svg
new file mode 100644
index 0000000000000..84e81f5e6ee2c
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f351.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#5C913B" d="M1.062 5.125s4.875-5 10-5C17.188.125 19 5.062 19 5.062s.625-4 5-4 6.938 3.125 6.938 3.125-3.562 2.125-4.625 2.562c-2.801 1.153-11.375 3.562-15.375 2.562S1.062 5.125 1.062 5.125z"/><path fill="#FF886C" d="M18 6s1.042-.896 6-.896c6.542 0 12 4.812 12 12.927 0 11.531-14.958 17.881-14.958 17.881S1 34.833 1 17.977C1 8.018 7.75 5 12 5c4.958 0 6 1 6 1z"/><path fill="#77B255" d="M1.062 5.125s4.875-5 10-5C17.188.12 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f352.svg b/browser/components/torpreferences/content/bridgemoji/1f352.svg
new file mode 100644
index 0000000000000..bdba6bd679c56
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f352.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#77B255" d="M25.999 24c-.198 0-.397-.059-.572-.181-6.543-4.58-12.166-12.366-15.397-17.439 1.699 10.528.997 16.458.962 16.744-.068.548-.562.93-1.115.868-.548-.068-.937-.567-.869-1.115.009-.079.936-8.033-1.986-21.668-.105-.487.166-.978.634-1.148.466-.172.991.028 1.226.468.079.148 8.007 14.873 17.691 21.652.453.316.562.94.246 1.392-.194.279-.504.427-.82.427z"/><path fill="#5C913B" d="M26.547 8.818c-3.476.96-5.051 2.546- [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f353.svg b/browser/components/torpreferences/content/bridgemoji/1f353.svg
new file mode 100644
index 0000000000000..26a41ee246bf0
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f353.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#BE1931" d="M22.614 34.845c3.462-1.154 6.117-3.034 6.12-9.373C28.736 21.461 33 17 32.999 12.921 32.998 9 28.384 2.537 17.899 3.635 7.122 4.764 3 8 2.999 15.073c0 4.927 5.304 8.381 8.127 13.518C13 32 18.551 38.187 22.614 34.845z"/><path fill="#77B255" d="M26.252 3.572c-1.278-1.044-3.28-1.55-5.35-1.677.273-.037.542-.076.82-.094.973-.063 3.614-1.232 1.4-1.087-.969.063-1.901.259-2.837.423.237-.154.479-.306.74-.442C21 0 1 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f354.svg b/browser/components/torpreferences/content/bridgemoji/1f354.svg
new file mode 100644
index 0000000000000..a129dccb3ba42
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f354.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D99E82" d="M18 20.411c-9.371 0-16.967-.225-16.967 6.427C1.033 33.487 8.629 35 18 35c9.371 0 16.967-1.513 16.967-8.162 0-6.651-7.596-6.427-16.967-6.427z"/><path fill="#662113" d="M34.47 20.916S26.251 19.932 18 19.89c-8.251.042-16.47 1.026-16.47 1.026C.717 27.39 7.467 30.057 18 30.057s17.283-2.667 16.47-9.141z"/><path fill="#FFCC4D" d="M33.886 18.328l-31.855.646c-1.1 0-2.021 2.229-.854 2.812 8.708 2.708 15.708 5.448 1 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f355.svg b/browser/components/torpreferences/content/bridgemoji/1f355.svg
new file mode 100644
index 0000000000000..3a44bba9a045b
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f355.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F4900C" d="M18 4c7.257 0 13 4 14.699 2 .197-.323.301-.657.301-1 0-2-6.716-5-15-5C9.716 0 3 3 3 5c0 .343.104.677.301 1C5 8 10.743 4 18 4z"/><path fill="#FFCC4D" d="M18 3C11.787 3 7.384 4.81 5.727 5.618c-.477.233-.539.84-.415 1.278S16 34 16 34s.896 2 2 2 2-2 2-2L30.704 6.779s.213-.842-.569-1.229C28.392 4.689 24.047 3 18 3z"/><g fill="#BE1931"><path d="M18 31c0-2.208-1.791-4-4-4-.254 0-.5.029-.741.075L16 34s.071.14.19. [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f368.svg b/browser/components/torpreferences/content/bridgemoji/1f368.svg
new file mode 100644
index 0000000000000..187b2f4c9a417
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f368.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#55ACEE" d="M20 28.625S30.661 25.9 33.356 15.72c.396-1.495-1.518-2.72-3.868-2.72H5.999c-1.175 0-3.74.493-3.072 2.894C5.711 25.9 16 28.625 16 28.625v1.173s-4.634 2.443-5.588 3.01c-1.027.588-.268 1.526.144 1.689.684.269 2.39 1.15 7.116 1.15 4.847 0 7.497-.954 8.083-1.15.226-.075 1.197-.973-.198-1.799-2.484-1.47-5.557-2.9-5.557-2.9v-1.173z"/><path fill="#3B88C3" d="M33.291 15.248c0 1.692-6.835 3.064-15.269 3.064-8.432 0 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f369.svg b/browser/components/torpreferences/content/bridgemoji/1f369.svg
new file mode 100644
index 0000000000000..3c2aa5826ec6d
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f369.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M35.337 23.549C34.291 29.819 27.615 34 18.092 34S1.894 29.819.849 23.549c-.247-1.479.156-8.12 1.054-9.406 2.559-3.664 3.474 10.365 16.189 10.365 13.847 0 13.64-14.028 16.199-10.365.898 1.286 1.292 7.927 1.046 9.406z"/><path fill="#8A4B38" d="M18.092 5.995c-9.331 0-16.895 4.584-16.895 10.239 0 5.655 7.564 10.24 16.895 10.24 9.33 0 16.895-4.585 16.895-10.24S27.422 5.995 18.092 5.995zm0 13.374c-3.174 0-5.748 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f36a.svg b/browser/components/torpreferences/content/bridgemoji/1f36a.svg
new file mode 100644
index 0000000000000..4f5368a41dd26
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f36a.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DA9F83" d="M34.966 17.87c.414 4.649-2.082 8.731-4.831 12.206-2.304 2.554-5.602 3.631-8.901 4.285-3.198 1.089-6.766.739-9.716-.895-1.034-.43-2.248-.559-3.167-1.176-2.879-1.846-4.524-4.927-5.779-8.029-1.627-2.916-1.74-6.483-1.414-9.742.219-1.107.967-2.032 1.388-3.051.729-2.127 1.916-3.963 3.569-5.475.786-.787 1.377-1.823 2.303-2.444.919-.617 2.103-.758 3.137-1.188 1.016-.422 1.968-1.08 3.072-1.299 1.072-.213 2.201.106 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f36b.svg b/browser/components/torpreferences/content/bridgemoji/1f36b.svg
new file mode 100644
index 0000000000000..a993c9b4b7f8e
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f36b.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C1694F" d="M26.339 33.496c-1.562 1.561-4.095 1.561-5.657 0L1.59 14.404c-1.562-1.562-1.562-2.681 0-4.243l8.485-8.485c1.562-1.562 2.681-1.562 4.243 0L33.41 20.768c1.562 1.562 1.562 4.095 0 5.657l-7.071 7.071z"/><path fill="#8A4B38" d="M16.582 15.253l-4.885-4.885 5.657-5.657-1.415-1.414-5.656 5.657L6.54 5.211 5.126 6.626l3.743 3.742-5.657 5.657 1.414 1.414 5.657-5.657 4.885 4.885z"/><path fill="#DD2E44" d="M26.339 34.9 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f36c.svg b/browser/components/torpreferences/content/bridgemoji/1f36c.svg
new file mode 100644
index 0000000000000..f6fbf3b70bba8
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f36c.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M13.298 3.538c-.531-4.075-5.627-4.3-6.248-2.125l-.933 4.041-4.041.933c-2.175.621-1.949 5.717 2.125 6.248l3.054.399c4.074.531 6.973-2.367 6.441-6.441l-.398-3.055zm18.993 18.991c4.074.531 4.299 5.629 2.125 6.249l-4.041.933-.934 4.042c-.62 2.174-5.717 1.948-6.248-2.126l-.398-3.055c-.531-4.074 2.367-6.973 6.441-6.441l3.055.398z"/><path fill="#BE1931" d="M30.49 22.294l-1.254-.164c-4.074-.531-6.973 2.367-6.441 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f36d.svg b/browser/components/torpreferences/content/bridgemoji/1f36d.svg
new file mode 100644
index 0000000000000..e13447edec3c8
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f36d.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M35.066 35.066c-.766.766-2.006.766-2.771 0L12.198 14.97c-.766-.766-.766-2.007 0-2.773.766-.765 2.007-.765 2.772 0l20.096 20.098c.766.764.766 2.006 0 2.771z"/><path fill="#DD2E44" d="M27.8 14.08c0 7.576-6.142 13.72-13.72 13.72C6.503 27.8.36 21.656.36 14.08.36 6.502 6.503.36 14.08.36c7.578 0 13.72 6.142 13.72 13.72z"/><path fill="#F4900C" d="M17.411 27.376c-1.459.092-2.938-.066-4.379-.503-3.156-.961-5.748-3 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f37f.svg b/browser/components/torpreferences/content/bridgemoji/1f37f.svg
new file mode 100644
index 0000000000000..ddbff6d95f16f
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f37f.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E1E8ED" d="M31.301 11H4.668c-1.657 0-3 1.343-3 3s1.343 3 3 3c.182 0 .357-.023.53-.053L5.182 17l.637 14.004C5.918 33.202 7.8 35 10 35h16c2.2 0 4.082-1.798 4.182-3.996L30.818 17l-.015-.05c.163.027.327.05.498.05 1.657 0 3-1.343 3-3s-1.344-3-3-3z"/><path d="M28.668 17v16.989c.863-.734 1.444-1.796 1.492-2.986L30.84 17h-2.172zm-6 0h3v18h-3zm-6 18V17h3v18zm-6-18h3v18h-3zM5.16 17l.68 14.003c.054 1.342.776 2.528 1.828 3.254V [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f380.svg b/browser/components/torpreferences/content/bridgemoji/1f380.svg
new file mode 100644
index 0000000000000..03d4a75106524
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f380.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M19.281 6.392c0 .405-2.37.405-2.37 0 0-.9-14.911-9.899-14.911-2.7v13.499c0 2.487 3.476 1.947 7.193.361-1.429 3.525-4.498 9.68-7.05 13.934-.229.382-.178.868.124 1.194.303.325.783.415 1.181.215l5.258-2.629c.441.726.931 1.868 1.376 2.906.333.778.678 1.582 1.024 2.275.144.287.417.488.734.54.053.009.107.013.16.013.263 0 .518-.104.707-.293 1.42-1.419 3.429-8.395 4.793-14.093 1.364 5.698 3.373 12.674 4.793 14.09 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f381.svg b/browser/components/torpreferences/content/bridgemoji/1f381.svg
new file mode 100644
index 0000000000000..1ab82981c0572
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f381.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FDD888" d="M33 31c0 2.2-1.8 4-4 4H7c-2.2 0-4-1.8-4-4V14c0-2.2 1.8-4 4-4h22c2.2 0 4 1.8 4 4v17z"/><path fill="#FDD888" d="M36 11c0 2.2-1.8 4-4 4H4c-2.2 0-4-1.8-4-4s1.8-4 4-4h28c2.2 0 4 1.8 4 4z"/><path fill="#FCAB40" d="M3 15h30v2H3z"/><path fill="#DA2F47" d="M19 3h-2c-1.657 0-3 1.343-3 3v29h8V6c0-1.656-1.343-3-3-3z"/><path fill="#DA2F47" d="M16 7c1.1 0 1.263-.516.361-1.147L9.639 1.147c-.902-.631-2.085-.366-2.631.589 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f382.svg b/browser/components/torpreferences/content/bridgemoji/1f382.svg
new file mode 100644
index 0000000000000..35f9a002a9a7c
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f382.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><ellipse fill="#8899A6" cx="18" cy="26" rx="18" ry="10"/><ellipse fill="#CCD6DD" cx="18" cy="24.25" rx="18" ry="10"/><path fill="#DD2E44" d="M32.675 23.685c0 4.26-6.57 7.712-14.675 7.712S3.325 27.945 3.325 23.685c0-4.258 6.57-7.711 14.675-7.711 8.104 0 14.675 3.453 14.675 7.711z"/><path fill="#F4ABBA" d="M32.233 22.543c0 9.854-28.466 9.854-28.466 0v-8.759h28.466v8.759z"/><path fill="#DD2E44" d="M17.984 18.166c-8.984 0-14.218-4.1 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f383.svg b/browser/components/torpreferences/content/bridgemoji/1f383.svg
new file mode 100644
index 0000000000000..591fc66a439db
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f383.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F4900C" d="M32.664 8.519C29.364 5.134 23.42 4.75 18 4.75S6.636 5.134 3.336 8.519C.582 11.344 0 15.751 0 19.791c0 5.263 1.982 11.311 6.357 14.244C9.364 36.051 13.95 35.871 18 35.871s8.636.18 11.643-1.836C34.018 31.101 36 25.054 36 19.791c0-4.04-.582-8.447-3.336-11.272z"/><path fill="#3F7123" d="M20.783 5.444c.069.42-.222.764-.647.764h-4.451c-.426 0-.717-.344-.647-.764l.745-4.472c.07-.421.476-.764.902-.764h2.451c.426 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f388.svg b/browser/components/torpreferences/content/bridgemoji/1f388.svg
new file mode 100644
index 0000000000000..6d431bc8568de
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f388.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FCAB40" d="M27.999 36c-.448 0-.855-.303-.969-.758-.036-.136-.926-3.436-4.273-4.272C18.054 29.794 18 23.277 18 23c0-.552.447-.998.998-.999.554.034 1 .445 1.002.997 0 .053.054 5.234 3.242 6.032 4.53 1.132 5.682 5.54 5.727 5.728.135.535-.191 1.078-.727 1.212-.081.02-.163.03-.243.03z"/><path fill="#BB1A34" d="M18 25c-1.1 0-1.598-.805-1.105-1.789l1.211-2.422c.492-.984 1.297-.984 1.789 0l1.211 2.422C21.598 24.195 21.1 25 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f389.svg b/browser/components/torpreferences/content/bridgemoji/1f389.svg
new file mode 100644
index 0000000000000..a4b8305af6be3
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f389.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M11.626 7.488c-.112.112-.197.247-.268.395l-.008-.008L.134 33.141l.011.011c-.208.403.14 1.223.853 1.937.713.713 1.533 1.061 1.936.853l.01.01L28.21 24.735l-.008-.009c.147-.07.282-.155.395-.269 1.562-1.562-.971-6.627-5.656-11.313-4.687-4.686-9.752-7.218-11.315-5.656z"/><path fill="#EA596E" d="M13 12L.416 32.506l-.282.635.011.011c-.208.403.14 1.223.853 1.937.232.232.473.408.709.557L17 17l-4-5z"/><path fill="# [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f38f.svg b/browser/components/torpreferences/content/bridgemoji/1f38f.svg
new file mode 100644
index 0000000000000..5457d1e8d5f12
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f38f.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M3 3h2v33H3z"/><circle fill="#F4900C" cx="4" cy="3" r="3"/><path fill="#66757F" d="M9 28H4c-.552 0-1-.447-1-1s.448-1 1-1h5c.552 0 1 .447 1 1s-.448 1-1 1z"/><path fill="#DD2E44" d="M31 27c0-2.209 6.209-6 4-6h-8.447c-1.203-1.464-4.595-3-7.053-3-2.459 0-3.23 1.536-3.435 3H10c-2.209 0-3 1.791-3 4v4c0 2.209.791 4 3 4h25c2.209 0-4-3.791-4-6z"/><circle fill="#FFF" cx="12" cy="25" r="3"/><circle cx="11.5" cy="24. [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f392.svg b/browser/components/torpreferences/content/bridgemoji/1f392.svg
new file mode 100644
index 0000000000000..f44d568064f51
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f392.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path d="M11.946 27C-1.036 7.876 7.524 2.752 9.114 2c.149-.07.242-.105.245-.107.418-.209.638-.675.529-1.125C9.779.318 9.372 0 8.903 0H4.847C1.054 0-4.282 11 5.859 28c.151.253 5.073 0 5.073 0 .559 0 1.324-.541 1.014-1zM31.229 0h-4c-.462 0-.863.318-.971.768-.107.45.109.916.521 1.125.004.002.095.037.242.107 1.568.752 10.01 5.876-2.792 25-.307.459.448 1 1 1 0 0 4.854.253 5.002 0 10-17 4.739-28 .998-28z" fill="#C1694F"/><path d="M6.8 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f399.svg b/browser/components/torpreferences/content/bridgemoji/1f399.svg
new file mode 100644
index 0000000000000..07881e4aabe6a
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f399.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M6 15h24v2H6zm15 15c0 2.208-.792 4-3 4-2.209 0-3-1.792-3-4s.791-2 3-2c2.208 0 3-.208 3 2z"/><path fill="#66757F" d="M18 31c-6.627 0-10 1.343-10 3v2h20v-2c0-1.657-3.373-3-10-3z"/><path fill="#99AAB5" d="M18 0c-4.971 0-9 4.029-9 9v7h18V9c0-4.971-4.029-9-9-9z"/><g fill="#292F33"><circle cx="15.5" cy="2.5" r="1.5"/><circle cx="20.5" cy="2.5" r="1.5"/><circle cx="17.5" cy="6.5" r="1.5"/><circle cx="22.5" cy="6 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f39f.svg b/browser/components/torpreferences/content/bridgemoji/1f39f.svg
new file mode 100644
index 0000000000000..984f270649422
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f39f.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#EA596E" d="M26.751 8.007c1.364 1.365 3.364 1.708 5.046 1.032l3.613 3.611c.737.74.738 1.938-.004 2.68L15.319 35.405c-.743.739-1.94.737-2.681 0l-3.606-3.612c.672-1.684.33-3.682-1.032-5.047-1.367-1.365-3.364-1.707-5.047-1.032l-2.359-2.36c-.74-.737-.742-1.938 0-2.68L20.678.596c.739-.74 1.936-.741 2.679.002l2.361 2.361c-.677 1.683-.331 3.681 1.033 5.048z"/><path fill="#BE1931" d="M5.42 18.527l-2.149 2.148c-.739.739-.741 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f3a0.svg b/browser/components/torpreferences/content/bridgemoji/1f3a0.svg
new file mode 100644
index 0000000000000..35c75b6970344
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f3a0.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M24.357 16.337s2.248-3.959 4.805-4.169c2.557-.21 3.929.934 4.144 3.432.287 3.334-.878 3.802-.033 7.53 0 0-3.546-2.414-2.421-6.07 1.172-3.806-4.81-3.095-3.835.316l-2.66-1.039z"/><path fill="#FFCC4D" d="M14.31 20.375c-.553 0-1 .448-1 1v13.563c0 .552.447 1 1 1s1-.448 1-1V21.375c0-.552-.448-1-1-1z"/><path fill="#F4900C" d="M15.31 25.77l-2 1.047v2.257l2-1.047zm-2 8.054l2-1.047V30.52l-2 1.047z"/><path fill="#88 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f3a1.svg b/browser/components/torpreferences/content/bridgemoji/1f3a1.svg
new file mode 100644
index 0000000000000..c35744ab8c82f
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f3a1.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M30.806 15.347H19.201l8.205-8.205-.707-.707-8.205 8.205V3.036h-1V14.64L9.288 6.435l-.707.707 8.206 8.205H5.182v1h11.605l-8.206 8.206.707.707 8.206-8.206v11.605h1V17.055l8.205 8.205.707-.707-8.205-8.206h11.605z"/><path fill="#AAB8C2" d="M17.994 1.394c-7.982 0-14.453 6.471-14.453 14.453 0 7.982 6.471 14.453 14.453 14.453 7.983 0 14.454-6.471 14.454-14.453-.001-7.982-6.472-14.453-14.454-14.453zm0 26.683c-6.7 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f3a2.svg b/browser/components/torpreferences/content/bridgemoji/1f3a2.svg
new file mode 100644
index 0000000000000..256d8afb7df44
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f3a2.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E1E8ED" d="M32.612 16.645v-1h-4.083V8.333h-1v7.312h-3.11v1h3.11v4H18.55v-4.604h-1v4.604H12.8v1h4.75v4H8.612v-3.208h-1v3.208H2.205v1h5.407v4H2.205v1h5.407V36h1v-4.355h8.938V36h1v-4.355h8.979V36h1v-4.355h4.083v-1h-4.083v-4h4.083v-1h-4.083v-4h4.083v-1h-4.083v-4h4.083zm-24 14v-4h8.938v4H8.612zm18.917 0H18.55v-4h8.979v4zm0-5H18.55v-4h8.979v4z"/><path fill="#CCD6DD" d="M31.05 6.595h4V36h-4z"/><path fill="#8899A6" d="M34.0 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f3a8.svg b/browser/components/torpreferences/content/bridgemoji/1f3a8.svg
new file mode 100644
index 0000000000000..3bfdea0c95bfd
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f3a8.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D99E82" d="M18 3.143c-9.941 0-18 6.908-18 15.428 0 1.066.126 2.107.367 3.112C2.146 24.744 3.377 22.812 9 20c5.727-2.864 0 4-2 8-.615 1.23-.282 2.271.56 3.124C10.506 32.928 14.104 34 18 34c9.941 0 18-6.907 18-15.429 0-8.52-8.059-15.428-18-15.428zm2.849 24.447c-.395 1.346-2.46 1.924-4.613 1.291-2.153-.632-3.578-2.234-3.183-3.581.395-1.346 2.46-1.924 4.613-1.29 2.153.631 3.578 2.233 3.183 3.58z"/><circle fill="#5C913B" [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f3ac.svg b/browser/components/torpreferences/content/bridgemoji/1f3ac.svg
new file mode 100644
index 0000000000000..3a326766110ef
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f3ac.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#3F7123" d="M35.845 32c0 2.2-1.8 4-4 4h-26c-2.2 0-4-1.8-4-4V19c0-2.2 1.8-4 4-4h26c2.2 0 4 1.8 4 4v13z"/><path fill="#3F7123" d="M1.845 15h34v6h-34z"/><path fill="#CCD6DD" d="M1.845 15h34v7h-34z"/><path fill="#292F33" d="M1.845 15h4l-4 7v-7zm11 0l-4 7h7l4-7h-7zm14 0l-4 7h7l4-7h-7z"/><path fill="#CCD6DD" d="M.155 8.207L33.148 0l1.69 6.792L1.845 15z"/><path fill="#292F33" d="M.155 8.207l5.572 5.827L1.845 15 .155 8.207zm [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f3af.svg b/browser/components/torpreferences/content/bridgemoji/1f3af.svg
new file mode 100644
index 0000000000000..073817f2f3163
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f3af.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#DD2E44" cx="18" cy="18" r="18"/><circle fill="#FFF" cx="18" cy="18" r="13.5"/><circle fill="#DD2E44" cx="18" cy="18" r="10"/><circle fill="#FFF" cx="18" cy="18" r="6"/><circle fill="#DD2E44" cx="18" cy="18" r="3"/><path opacity=".2" d="M18.24 18.282l13.144 11.754s-2.647 3.376-7.89 5.109L17.579 18.42l.661-.138z"/><path fill="#FFAC33" d="M18.294 19c-.255 0-.509-.097-.704-.292-.389-.389-.389-1.018 0-1.407l.563-.563c. [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f3b2.svg b/browser/components/torpreferences/content/bridgemoji/1f3b2.svg
new file mode 100644
index 0000000000000..408f2f9206f7a
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f3b2.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#A0041E" d="M4 11v.137c0-.042.011-.084.015-.126L4 11zm13 11.137c-.146-.067-.287-.145-.412-.246L4.565 12.245C4.188 11.94 4 11.539 4 11.137v12.238c0 2.042 1.093 2.484 1.093 2.484l11.574 9.099c.205.161.377.259.528.318-.114-.174-.195-.375-.195-.604V22.137zm-8.773.363c-.994 0-2.033-1.007-2.319-2.25-.287-1.242.287-2.249 1.28-2.249.994 0 2.033 1.007 2.319 2.249.287 1.243-.286 2.25-1.28 2.25zM13.81 30c-.994 0-2.033-1.008-2.3 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f3b6.svg b/browser/components/torpreferences/content/bridgemoji/1f3b6.svg
new file mode 100644
index 0000000000000..f13b3b8bfb9a7
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f3b6.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#5DADEC" d="M14.182.168L7.818 1.469C7.368 1.561 7 2.012 7 2.471v15.857C6.387 18.12 5.712 18 5 18c-2.762 0-5 1.741-5 3.889 0 2.147 2.238 3.889 5 3.889 2.713 0 4.908-1.683 4.985-3.777H10V6.477l4.182-.855c.45-.092.818-.543.818-1.002V.835c0-.459-.368-.76-.818-.667zm21 4l-6.363 1.301c-.451.092-.819.543-.819 1.002v15.857c-.613-.209-1.288-.328-2-.328-2.762 0-5 1.741-5 3.889 0 2.147 2.238 3.889 5 3.889 2.713 0 4.908-1.683 4. [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f3b7.svg b/browser/components/torpreferences/content/bridgemoji/1f3b7.svg
new file mode 100644
index 0000000000000..ed0f849e0d997
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f3b7.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill-rule="evenodd" clip-rule="evenodd" fill="#FCAB40" d="M14 16L9 26s-1 2 1 2c1 0 2-2 2-2L26 7s2-4 8-1v2c-3-1-4 1-4 1L15 33s-2 3-7 3c-6 0-7-5-7-8 0-2 1-4 2-6s-2-6-2-6h13z"/><path fill="#FDCB58" d="M7.5 20C4.04 20 0 18.952 0 16c0-2.953 4.04-4 7.5-4s7.5 1.047 7.5 4c0 2.952-4.04 4-7.5 4z"/><circle fill="#CCD6DD" cx="19" cy="17" r="2"/><circle fill="#CCD6DD" cx="22" cy="13" r="2"/><circle fill="#CCD6DD" cx="25" cy="9" r="2"/> [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f3b8.svg b/browser/components/torpreferences/content/bridgemoji/1f3b8.svg
new file mode 100644
index 0000000000000..22074a11f3f0d
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f3b8.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#BB1A34" d="M21.828 20.559C19.707 21.266 19 17.731 19 17.731s.965-.968.235-1.829c1.138-1.137.473-1.707.473-1.707-1.954-1.953-5.119-1.953-7.071 0-.246.246-.414.467-.553.678-.061.086-.115.174-.17.262l-.014.027c-.285.475-.491.982-.605 1.509-.156.319-.379.659-.779 1.06-1.414 1.414-4.949-.707-7.778 2.121-.029.029-.045.069-.069.104-.094.084-.193.158-.284.25-3.319 3.319-3.003 9.018.708 12.728 3.524 3.525 8.84 3.979 12.209 1 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f3ba.svg b/browser/components/torpreferences/content/bridgemoji/1f3ba.svg
new file mode 100644
index 0000000000000..454ab7818ac24
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f3ba.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FCAB40" d="M5.622 33.051l-2.674-2.673L23.337 9.987c3.344-3.343 1.337-8.021 2.007-8.689.666-.67 1.335-.002 1.335-.002l8.023 8.023c.668.668 0 1.336 0 1.336-.669.67-5.778-.908-8.692 2.006L5.622 33.051z"/><path fill="#CCD6DD" d="M5.457 33.891c.925-.925.925-2.424 0-3.35-.924-.924-2.424-.924-3.349 0l.087.087c-.371-.334-.938-.331-1.296.027-.369.368-.369.968 0 1.336L4.008 35.1c.37.369.968.369 1.337 0 .355-.356.36-.919.032-1 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f3bb.svg b/browser/components/torpreferences/content/bridgemoji/1f3bb.svg
new file mode 100644
index 0000000000000..efb7d5da7eeb5
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f3bb.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F18F26" d="M23.912 12.087C22.219 10.394 20.318 9.5 18.415 9.5c-1.626 0-3.189.667-4.402 1.88-1.519 1.519-1.727 2.39-1.865 2.966-.071.295-.106.421-.255.57-.106.106-.155.256-.14.406.015.149.1.286.225.369.013.009.324.22.368.651.039.394-.13 1.08-1.16 2.11-.629.629-1.252.948-1.85.948-.981 0-1.649-.87-1.654-.877-.11-.15-.295-.226-.48-.197-.185.029-.337.159-.396.335-.221.663-.251.668-.535.709-.59.086-1.578.229-3.624 2.275C. [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f3be.svg b/browser/components/torpreferences/content/bridgemoji/1f3be.svg
new file mode 100644
index 0000000000000..323e5c462ecfb
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f3be.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#77B255" cx="18" cy="18" r="18"/><path fill="#A6D388" d="M26 18c0 6.048 2.792 10.221 5.802 11.546C34.42 26.42 36 22.396 36 18c0-4.396-1.58-8.42-4.198-11.546C28.792 7.779 26 11.952 26 18z"/><path fill="#FFF" d="M27 18c0-6.048 1.792-10.221 4.802-11.546-.445-.531-.926-1.028-1.428-1.504C27.406 6.605 25 10.578 25 18c0 7.421 2.406 11.395 5.374 13.05.502-.476.984-.973 1.428-1.504C28.792 28.221 27 24.048 27 18z"/><path fil [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f3c0.svg b/browser/components/torpreferences/content/bridgemoji/1f3c0.svg
new file mode 100644
index 0000000000000..24693956f6f9b
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f3c0.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#F4900C" cx="18" cy="18" r="18"/><path fill="#231F20" d="M36 17h-8.981c.188-5.506 1.943-9.295 4.784-10.546-.445-.531-.926-1.027-1.428-1.504-2.83 1.578-5.145 5.273-5.354 12.049H19V0h-2v17h-6.021c-.208-6.776-2.523-10.471-5.353-12.049-.502.476-.984.972-1.428 1.503C7.039 7.705 8.793 11.494 8.981 17H0v2h8.981c-.188 5.506-1.942 9.295-4.783 10.546.445.531.926 1.027 1.428 1.504 2.831-1.578 5.145-5.273 5.353-12.05H17v17h2V1 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f3c6.svg b/browser/components/torpreferences/content/bridgemoji/1f3c6.svg
new file mode 100644
index 0000000000000..00457c31ea308
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f3c6.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M5.123 5h6C12.227 5 13 4.896 13 6V4c0-1.104-.773-2-1.877-2h-8c-2 0-3.583 2.125-3 5 0 0 1.791 9.375 1.917 9.958C2.373 18.5 4.164 20 6.081 20h6.958c1.105 0-.039-1.896-.039-3v-2c0 1.104-.773 2-1.877 2h-4c-1.104 0-1.833-1.042-2-2S3.539 7.667 3.539 7.667C3.206 5.75 4.018 5 5.123 5zm25.812 0h-6C23.831 5 22 4.896 22 6V4c0-1.104 1.831-2 2.935-2h8c2 0 3.584 2.125 3 5 0 0-1.633 9.419-1.771 10-.354 1.5-2.042 3-4 3h- [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f3c8.svg b/browser/components/torpreferences/content/bridgemoji/1f3c8.svg
new file mode 100644
index 0000000000000..4f5530d29087a
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f3c8.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#662113" d="M7.754 7.754C4.068 11.44 1.64 16.37.843 21.335l13.822 13.822c4.965-.797 9.895-3.225 13.581-6.911s6.114-8.616 6.911-13.581L21.335.843C16.37 1.64 11.44 4.068 7.754 7.754zm25.615-5.123C30.707 1.152 27.634.51 24.472.564l10.965 10.964c.053-3.162-.589-6.235-2.068-8.897zM2.631 33.369c2.662 1.479 5.736 2.121 8.898 2.067L.564 24.472c-.054 3.161.588 6.235 2.067 8.897z"/><path fill="#E1E8ED" d="M22.828 11.757l-2.414 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f3d3.svg b/browser/components/torpreferences/content/bridgemoji/1f3d3.svg
new file mode 100644
index 0000000000000..6201ef5ae20b7
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f3d3.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M23.106 5.971C17.615.48 8.384-.521 3.307 4.557-1.77 9.634-.77 18.865 4.721 24.356c3.554 3.554 7.785 4.323 11.707 3.058l-.015.013.13-.052c.264-.088.527-.179.788-.284.698-.238 1.734-.558 2.942-.806 1.848-.38 3.541 1.606 4.955 3.021 1.414 1.414 4.242 5.657 4.949 6.364.707.707 1.414 0 2.122-.707l.707-.707.707-.707c.707-.708 1.414-1.415.707-2.122-.707-.707-4.95-3.535-6.364-4.949-1.414-1.414-3.4-3.107-3.021-4.9 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f3d4.svg b/browser/components/torpreferences/content/bridgemoji/1f3d4.svg
new file mode 100644
index 0000000000000..8b78f31e4c642
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f3d4.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M19.083 35.5L12.25 12.292s-1.42.761-2.604 1.637c-.313.231-1.977 2.79-2.312 3.04-1.762 1.315-3.552 2.841-3.792 3.167C3.083 20.76 0 36 0 36l19.083-.5z"/><path fill="#4B545D" d="M32 35l-5.5-19.75L18 4.542l-5.373 4.193-.971 1.172C11.25 10.688 10 15.25 10 15.25L8.75 20 3.252 30.054.917 34.791 32 35z"/><path fill="#FFF" d="M3.252 30.054s7.873-10.783 7.894-11.388C11.167 18.062 10 15.25 10 15.25L8.75 20 3.252 30. [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f3d5.svg b/browser/components/torpreferences/content/bridgemoji/1f3d5.svg
new file mode 100644
index 0000000000000..7a2fb80eddb76
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f3d5.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#78B159" d="M18 25.18C3.438 25.18 0 29.844 0 32s1.791 4 4 4h28c2.209 0 4-1.851 4-4s-3.438-6.82-18-6.82z"/><path fill="#662113" d="M28.804 28.15c0 1.531-1.242 2.08-2.773 2.08-1.531 0-2.773-.548-2.773-2.08l.693-6.239c0-1.531.548-1.387 2.08-1.387 1.531 0 2.08-.145 2.08 1.387l.693 6.239z"/><path fill="#5C913B" d="M34.868 19.717c-4.59-4.135-6.449-10.056-8.837-10.056s-4.247 5.921-8.836 10.056c-1.929 1.738-1.01 2.743 1.634 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f3dd.svg b/browser/components/torpreferences/content/bridgemoji/1f3dd.svg
new file mode 100644
index 0000000000000..d66d8d477b43a
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f3dd.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><ellipse fill="#3B88C3" cx="18" cy="30.54" rx="18" ry="5.36"/><path fill="#88C9F9" d="M33.812 28.538c0 1.616-2.5 2.587-14.482 2.587-10.925 0-13.612-.971-13.612-2.587s5.683-2.926 13.612-2.926 14.482 1.31 14.482 2.926z"/><path fill="#F4900C" d="M7 28.25c0-1 1-5 11-5 12 0 15 4 15 5s0 2-14 2c-12 0-12-1-12-2z"/><circle fill="#FFCC4D" cx="7" cy="6.25" r="5"/><circle fill="#FFAC33" cx="7" cy="6.25" r="4"/><path fill="#C1694F" d="M26.94 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f3e1.svg b/browser/components/torpreferences/content/bridgemoji/1f3e1.svg
new file mode 100644
index 0000000000000..b44b7288b1d66
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f3e1.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#5C913B" d="M36 33.5c0 .828-.672 1.5-1.5 1.5h-33C.672 35 0 34.328 0 33.5S.672 32 1.5 32h33c.828 0 1.5.672 1.5 1.5z"/><path fill="#A0041E" d="M12.344 14.702h-2c-.276 0-.5-.224-.5-.5v-7c0-.276.224-.5.5-.5h2c.276 0 .5.224.5.5v7c0 .276-.224.5-.5.5z"/><path fill="#FFCC4D" d="M5.942 32c-.137-4.657-.506-8-.942-8-.435 0-.804 3.343-.941 8h1.883z"/><path fill="#77B255" d="M10 18.731C10 24.306 7.762 26 5 26c-2.761 0-5-1.694-5-7 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f3ee.svg b/browser/components/torpreferences/content/bridgemoji/1f3ee.svg
new file mode 100644
index 0000000000000..a825f2b79b1c3
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f3ee.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M29 34c0 1.104-.896 2-2 2H9c-1.104 0-2-.896-2-2V2c0-1.104.896-2 2-2h18c1.104 0 2 .896 2 2v32z"/><path fill="#BE1931" d="M6.699 32h22.602C33.383 28.7 35 23.658 35 18c0-5.658-1.616-10.7-5.698-14H6.698C2.615 7.3 1 12.342 1 18c0 5.658 1.616 10.7 5.699 14z"/><path d="M1.301 22c.108.682.245 1.35.415 2h32.568c.17-.65.307-1.318.415-2H1.301zm-.229-2h33.855c.049-.657.073-1.324.073-2H1c0 .676.024 1.343.072 2zm31.605 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f3f7.svg b/browser/components/torpreferences/content/bridgemoji/1f3f7.svg
new file mode 100644
index 0000000000000..60462664ebd6c
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f3f7.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFD983" d="M32.017 20.181L17.345 5.746C16.687 5.087 15.823 5 14.96 5H4.883C3.029 5 2 6.029 2 7.883v10.082c0 .861.089 1.723.746 2.38L17.3 35.017c1.311 1.31 3.378 1.31 4.688 0l10.059-10.088c1.31-1.312 1.28-3.438-.03-4.748zm-23.596-8.76c-.585.585-1.533.585-2.118 0s-.586-1.533 0-2.118c.585-.586 1.533-.585 2.118 0 .585.586.586 1.533 0 2.118z"/><path fill="#D99E82" d="M9.952 7.772c-1.43-1.431-3.749-1.431-5.179 0-1.431 1.4 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f3f8.svg b/browser/components/torpreferences/content/bridgemoji/1f3f8.svg
new file mode 100644
index 0000000000000..143f8eaedb2dc
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f3f8.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#55ACEE" d="M30.385 29c.382.382.382 1.002 0 1.385-.383.382-1.003.382-1.385 0L15.5 16.884c-.382-.382-.382-1.002 0-1.384.382-.382 1.001-.382 1.384 0L30.385 29z"/><path fill="#292F33" d="M35.561 33.439c.586.586.586 1.536 0 2.121-.585.586-1.535.586-2.121 0l-5.656-5.656c-.586-.586-.586-1.536 0-2.121.585-.586 1.535-.586 2.121 0l5.656 5.656z"/><g fill="#99AAB5"><path d="M2.447 5.2l.707-.707L15.178 16.51l-.707.707zm1.417-2.8 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f3f9.svg b/browser/components/torpreferences/content/bridgemoji/1f3f9.svg
new file mode 100644
index 0000000000000..37922127ee965
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f3f9.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C1694F" d="M21.279 4.28c-9 0-10.5 1.5-13 4s-4 4-4 13c0 11.181-2 14-1 14s3-2 3-4-2-13 5-20h-.001c7-6.999 18-5 20-5s4-2 4-3-2.818 1-13.999 1z"/><path fill="#D99E82" d="M29.5 29.779c0 .276-.224.5-.5.5H3.78c-.276 0-.5-.224-.5-.5s.224-.5.5-.5H29c.276 0 .5.224.5.5zm.279-.279c-.277 0-.5-.225-.5-.5V3.779c0-.276.223-.5.5-.5.275 0 .5.224.5.5V29c0 .275-.224.5-.5.5z"/><path fill="#99AAB5" d="M0 0l2.793 8.52L4.93 4.955l3.52-2.09 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f40a.svg b/browser/components/torpreferences/content/bridgemoji/1f40a.svg
new file mode 100644
index 0000000000000..a9a6debcc432f
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f40a.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#3E721D" d="M19 32c0 1-1.723 3-3.334 3C14.056 35 14 33.657 14 32s1.306-3 2.916-3C18.527 29 19 30.343 19 32zm11 0c0 1-1.723 3-3.334 3C25.056 35 25 33.657 25 32s1.306-3 2.916-3C29.527 29 30 30.343 30 32z"/><path fill="#5C913B" d="M36 25c0-6-3.172-9.171-6-12-1-1-1.399.321-1 1 .508.862 3 8-2 8h-2c-5 0-6.172-1.172-9-4-4.5-4.5-7 0-9 0-6 0-7-1.812-7 2 0 3 3 4 6 4s3 1 5 4c1.071 1.606 2.836 3.211 5.023 4.155.232 1.119 2.774 3 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f40c.svg b/browser/components/torpreferences/content/bridgemoji/1f40c.svg
new file mode 100644
index 0000000000000..2c63658289aed
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f40c.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#9266CC" d="M9 15.561c0-4 2-8 0-10s-3 2-2 2c1.414 0 2 2 1 5s1 3.999 1 3zm-3.875 0c0-4 2-8 0-10s-3 2-2 2c1.414 0 2 2 1 5s1 3.999 1 3z"/><path fill="#AA8DD8" d="M36 34.936c0 1-1 1-2 1H11c-5 0-7.272-3.09-8-6-1-4 2-11 0-12s-3-1-3-3 4.47-5.265 7-4c4 2 2.767 6.932 2 10-.88 3.522 1.115 3.594 5 5 4.94 1.787 12.32 4.44 14 5 3 1 8 3 8 4z"/><path fill="#FFCC4D" d="M10.925 24.935c2.887 1 3.849 9 13.472 9 6.377 0 8.66-5.479 8.66- [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f40d.svg b/browser/components/torpreferences/content/bridgemoji/1f40d.svg
new file mode 100644
index 0000000000000..17531783ba93d
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f40d.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M11.84 7.634c-.719 0-2.295 2.243-3.567 1.029-.44-.419 1.818-1.278 1.727-2.017-.075-.607-2.842-1.52-1.875-2.099.967-.578 2.418.841 3.513.866 2.382.055 4.212-.853 4.238-.866.541-.274 1.195-.052 1.464.496.27.547.051 1.213-.488 1.486-.131.066-2.225 1.105-5.012 1.105z"/><path fill="#77B255" d="M27.818 36c-3.967 0-8.182-2.912-8.182-8.308 0-1.374-.89-1.661-1.637-1.661-.746 0-1.636.287-1.636 1.661 0 5.396-4.216 8 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f417.svg b/browser/components/torpreferences/content/bridgemoji/1f417.svg
new file mode 100644
index 0000000000000..ad7a77db82d7c
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f417.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C1694F" d="M33.359 13.254c1.434-3.462 2.06-11.534 1.262-12.004-.704-.416-5.641 1.084-8.34 3.205C23.883 2.909 21.085 2 18 2c-3.085 0-5.883.91-8.281 2.455C7.02 2.334 2.082.834 1.378 1.25c-.797.47-.171 8.543 1.263 12.004C1.59 15.818 1 18.623 1 21.479 1 31.468 2 36 18 36s17-4.532 17-14.521c0-2.856-.59-5.662-1.641-8.225z"/><path fill="#662113" d="M32.878 12.157c.929-3.252 1.081-7.708.524-8.037-.411-.243-2.78.633-5.009 1. [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f418.svg b/browser/components/torpreferences/content/bridgemoji/1f418.svg
new file mode 100644
index 0000000000000..fb9656cd18f0b
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f418.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#99AAB5" d="M34.453 15.573c-.864-7.3-5.729-10.447-13.93-10.447-.391 0-.763.017-1.139.031-.013-.01-.022-.021-.035-.031C14.655 1.605 4.091 2.779 1.745 6.3c-3.255 4.883-1.174 22.3 0 24.646 1.173 2.35 4.694 3.521 5.868 2.35 1.174-1.176 0-1.176-1.173-3.521-.85-1.701-.466-5.859.255-8.471.028.168.068.322.1.486.39 2.871 1.993 7.412 1.993 9.744 0 3.564 2.102 4.107 4.694 4.107 2.593 0 4.695-.543 4.695-4.107 0-.24-.008-.463-.01 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f419.svg b/browser/components/torpreferences/content/bridgemoji/1f419.svg
new file mode 100644
index 0000000000000..d915a8fd2e6b6
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f419.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#553788" d="M10 12c3 5 0 10.692-3 9.692s-4 2-1 3 9.465-.465 13-4c1-1 2-1 2-1L10 12z"/><path fill="#553788" d="M26 12c-3 5 0 10.692 3 9.692s4 2 1 3-9.465-.465-13-4c-1-1-2-1-2-1L26 12z"/><path fill="#744EAA" d="M30.188 16c-3 5 0 10.692 3 9.692s4 2 1 3-9.465-.465-13-4c-1-1-2-1-2-1l11-7.692zM5.812 16c3 5 0 10.692-3 9.692s-4 2-1 3 9.465-.465 13-4c1-1 2-1 2-1L5.812 16z"/><path fill="#9266CC" d="M33.188 31.375c-2.729.91-6.4 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f41a.svg b/browser/components/torpreferences/content/bridgemoji/1f41a.svg
new file mode 100644
index 0000000000000..804ece8811a33
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f41a.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M29.049 7.033c-.07-.07-.141-.126-.211-.188-1.08-1.087-2.497-1.564-4.008-1.373l-3.812.483c-.382-3.003-2.25-4.446-4.351-4.181l-4.24.536C12.075.767 11.011.034 9.827.185L5.033.79C3.71.958 2.773 2.438 2.94 4.097l.606 6.007c.152 1.501 1.425 2.591 2.403 2.693l.514 5.093c.258 2.553 2.509 4.365 4.117 4.38l.498 4.926c.164 1.622.928 3.027 1.917 4.063.23.339.471.656.737.922 4.423 4.423 12.183 5.064 16.607.64 4.42-4.4 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f41b.svg b/browser/components/torpreferences/content/bridgemoji/1f41b.svg
new file mode 100644
index 0000000000000..f8986dd7818b9
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f41b.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AA8DD8" d="M7.415 4c1-1 .25-4-1.438-4s-1.562 2-.562 2 1 2 1 3 1-1 1-1zM3.232 5.72c1-1 .25-4-1.438-4s-1.562 2-.562 2 1 2 1 3 1-1 1-1z"/><path fill="#744EAA" d="M29.607 32.856c.189.808 1.227 2.28 2.032 2.091.806-.19 1.077-1.971.888-2.777-.189-.808-.998-1.307-1.804-1.117-.805.19-1.306.997-1.116 1.803zm-5.434.649c.003.83.681 2.498 1.509 2.495.828-.004 1.494-1.677 1.491-2.506-.003-.829-.677-1.497-1.505-1.495-.828.004-1.4 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f41d.svg b/browser/components/torpreferences/content/bridgemoji/1f41d.svg
new file mode 100644
index 0000000000000..31e78828044a0
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f41d.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#31373D" d="M27.816 23.464c.299-1.148.465-2.318.465-3.464 0-4.161-2.122-6.779-5.258-8.035.417-1.008.665-2.108.665-3.2 0-1.581-.495-2.498-1.315-3.032 1.091-.482 2.517-1.5 3.027-2.011.781-.781.94-1.889.354-2.475-.586-.586-1.693-.428-2.475.354-.611.611-1.948 2.53-2.223 3.619C20.172 5.025 19.126 5 18 5c-1.125 0-2.172.025-3.055.219-.275-1.089-1.612-3.007-2.223-3.619-.781-.781-1.889-.94-2.475-.354-.585.587-.427 1.694.354 2 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f41e.svg b/browser/components/torpreferences/content/bridgemoji/1f41e.svg
new file mode 100644
index 0000000000000..f314ca9a208e7
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f41e.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path d="M35 21H1c-.552 0-1-.447-1-1s.448-1 1-1h34c.553 0 1 .447 1 1s-.447 1-1 1zm-22.177-2l-.069-.002c-.092-.007-9.214-.714-10.734-8.235-.109-.542.241-1.069.782-1.178.543-.113 1.069.241 1.178.782 1.221 6.044 8.833 6.631 8.91 6.636.551.038.967.515.93 1.066-.036.527-.476.931-.997.931zM3 31c-.142 0-.286-.03-.423-.094-.5-.234-.716-.829-.482-1.33 3.166-6.77 11.038-7.721 11.372-7.758.548-.056 1.042.334 1.103.882.062.548-.332 1.043-.8 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f41f.svg b/browser/components/torpreferences/content/bridgemoji/1f41f.svg
new file mode 100644
index 0000000000000..7d9ef4108b41a
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f41f.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#3B88C3" d="M32.153 24c0-1 1.523-6.212 3.047-7.735 1.522-1.523 0-3.166-1.523-3.166-3.405 0-9.139 6.901-9.139 10.901 0 5 5.733 10.424 9.139 10.424 1.523 0 3.046-1.404 1.523-2.928C33.677 29.974 32.153 26 32.153 24z"/><path fill="#3B88C3" d="M9.021 14.384c0-3.046 1.497-6.093 3.02-6.093 4.569 0 13.322 4.823 14.845 12.439 1.524 7.616-17.865-6.346-17.865-6.346zm4.854 18.278c1.523 1.523 4.57 3.047 7.617 3.047 3.046 0-3.111- [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f420.svg b/browser/components/torpreferences/content/bridgemoji/1f420.svg
new file mode 100644
index 0000000000000..ccc11c48d0243
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f420.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M8.231 10c6-8 14-10 18-10 1 0 1 1 0 1s-6 2-7 9-11 0-11 0zm-1 18c4 3 13 8 18 8 3 0 2-1 1-1s-9-3-10-7-9 0-9 0z"/><path fill="#FFCC4D" d="M35 9c-1.611 0-4.059 2.972-5.268 6.294-1.475-5.62-6.166-10.739-12.945-10.739-8.273 0-12.061 10.216-14.524 14.479-.629 1.091-4.091 1.034-.989 3.103-3.103 2.068.449 2.243 1.222 3.103 2.625 2.92 8.997 6.205 14.291 6.205 5.655 0 11.12-3.786 12.863-8.958C30.828 25.896 33.353 29 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f422.svg b/browser/components/torpreferences/content/bridgemoji/1f422.svg
new file mode 100644
index 0000000000000..fe4b659ee0fcc
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f422.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#77B255" d="M9.842 19.922c0 9.842 6.575 9.673 5.158 10.078-7 2-8.803-7.618-9.464-7.618-2.378 0-5.536-.423-5.536-2.46C0 17.883 2.46 15 6.151 15c2.379 0 3.691 2.883 3.691 4.922zM36 28.638c0 1.104-3.518-.741-5 0-2 1-2-.896-2-2s1.343-1 3-1 4 1.895 4 3z"/><path fill="#77B255" d="M16.715 33.143c0 2.761-1.279 2.857-2.857 2.857S11 35.903 11 33.143c0-.489.085-1.029.234-1.587.69-2.59 2.754-5.556 4.052-5.556 1.578 0 1.429 4.382 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f425.svg b/browser/components/torpreferences/content/bridgemoji/1f425.svg
new file mode 100644
index 0000000000000..bcbd2181bb0a6
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f425.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M17.38 33.098c-.097-.18-.25-.302-.417-.391C15.366 31.001 16.5 29 16.5 29c0-.553 1-2 0-2l-1 1c-1 1-1 4-1 4h-2c-.553 0-1 .447-1 1s.447 1 1 1h1.108l-.222.12c-.486.263-.667.869-.404 1.355s.869.667 1.356.404l2.639-1.427c.485-.262.666-.868.403-1.354zM23.5 32h-2s0-3-1-4l-1-1c-1 0 0 1.447 0 2 0 0 1.135 2.001-.462 3.707-.168.089-.32.211-.418.391-.263.486-.082 1.093.404 1.355l2.639 1.427c.486.263 1.093.082 1.356-.4 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f426.svg b/browser/components/torpreferences/content/bridgemoji/1f426.svg
new file mode 100644
index 0000000000000..06d93a9162da3
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f426.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M8.916 12.88c-.111 1.652 1.768 3.126-.712 2.959-2.48-.167-7.836-2.533-7.768-3.53s3.708-2.757 6.188-2.59c2.48.166 2.404 1.508 2.292 3.161zm20.122 16.049c-.202-.032-.392.015-.564.095-2.325.232-3.225-1.885-3.225-1.885-.439-.336-.981-2.009-1.589-1.215l.187 1.402c.187 1.402 2.57 3.224 2.57 3.224l-1.215 1.589c-.336.439-.252 1.066.187 1.402.439.336 1.066.252 1.402-.187l.673-.88-.039.249c-.087.546.285 1.058.831 1 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f428.svg b/browser/components/torpreferences/content/bridgemoji/1f428.svg
new file mode 100644
index 0000000000000..1da7190a6813b
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f428.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#99AAB5" d="M36 13.533C36 8.867 32.866 7 29 7c-1.621 0-3.285.354-4.676 1.027C22.523 6.798 20.405 6.062 18 6.062s-4.523.736-6.324 1.965C10.285 7.354 8.621 7 7 7c-3.866 0-7 1.867-7 6.533 0 3.844 2.128 6.417 5.038 7.206-.043.536-.068 1.073-.068 1.611 0 5.729 4.52 7.675 8.581 8.326C14.649 31.487 16.232 32 18 32s3.351-.513 4.449-1.323c4.062-.651 8.581-2.597 8.581-8.326 0-.538-.025-1.075-.068-1.611 2.91-.79 5.038-3.363 5.0 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f42a.svg b/browser/components/torpreferences/content/bridgemoji/1f42a.svg
new file mode 100644
index 0000000000000..278e144ffd3dc
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f42a.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C1694F" d="M31.595 15.007c-1.75-3.623-5.934-9.053-9.531-9.053-4.071 0-8.228 7.259-10.071 10.378-.176.299-.321.578-.464.857-3.371-1.182-.536-6.631-.536-10.463 0-.957-.138-1.637-.44-2.119.489-.606.586-1.347.192-1.699-.413-.367-1.195-.163-1.745.456-.08.089-.129.186-.189.28-.424-.067-.903-.102-1.472-.102-.565 0-2.916.266-4.229.791C-.007 5.582.993 9 1.993 9h4c1 0 .756 2.31 0 4.726-.83 2.654-1.439 5.145-1 6.606.808 2.687 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f42c.svg b/browser/components/torpreferences/content/bridgemoji/1f42c.svg
new file mode 100644
index 0000000000000..ee782f2f20e25
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f42c.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4292E0" d="M30.584 7.854c.27-1.729 1.028-3.908 2.975-5.854.704-.704.25-2-1-2 0 0-6.061.007-9.893 3.327C21.663 3.115 20.625 3 19.559 3c-8 0-12 4-14 12-.444 1.778-.865 1.399-3 3-1.195.896-2.117 3 1 3 3 0 5 .954 9 1 3.629.042 9.504-3.229 11.087-1.292 2.211 2.706 1.396 5.438.597 6.666-2.904 3.396-5.939.541-8.685-.374-3-1-1 1 0 2s1.312 4 0 6 3 0 5-3c.011-.017.022-.028.032-.045C28.392 31.5 34.559 25.936 34.559 18c0-3.918- [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f42d.svg b/browser/components/torpreferences/content/bridgemoji/1f42d.svg
new file mode 100644
index 0000000000000..91e126242bda5
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f42d.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#99AAB5" cx="8.5" cy="9.5" r="8.5"/><circle fill="#99AAB5" cx="27.5" cy="9.5" r="8.5"/><path fill="#F4ABBA" d="M13.812 10.031c0 3.228-2.617 5.844-5.844 5.844s-5.844-2.616-5.844-5.844c0-3.227 2.617-5.844 5.844-5.844s5.844 2.617 5.844 5.844zm20.063 0c0 3.228-2.617 5.844-5.844 5.844-3.227 0-5.844-2.616-5.844-5.844 0-3.227 2.617-5.844 5.844-5.844 3.227.001 5.844 2.617 5.844 5.844z"/><path fill="#99AAB5" d="M30 18c0 7.1 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f42e.svg b/browser/components/torpreferences/content/bridgemoji/1f42e.svg
new file mode 100644
index 0000000000000..40fede032f581
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f42e.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#99AAB5" d="M4 8s-4 2-4 11c0 0 6-1 7-3 0 0 2-12.25-3-8zm27.995.043s4 2 4 11c0 0-6-.999-7-2.999 0 0-2-12.251 3-8.001z"/><path fill="#FFE8B6" d="M1 1c-1.01.99 1 8 5 9s4-5 3-5C5 5 3.042-1 1 1zm34.297 0c1.011.99-1 8-5 9s-4-5-3-5c4 0 5.959-6 8-4z"/><path fill="#CCD6DD" d="M21.976 31h-7.951C8.488 31 4 26.512 4 20.976v-8.951C4 6.488 8.488 2 14.025 2h7.951C27.512 2 32 6.488 32 12.025v8.951C32 26.512 27.512 31 21.976 31z"/><p [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f42f.svg b/browser/components/torpreferences/content/bridgemoji/1f42f.svg
new file mode 100644
index 0000000000000..5ecd980c51305
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f42f.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#FFCC4D" cx="7" cy="6" r="6"/><circle fill="#FFCC4D" cx="18" cy="30" r="6"/><circle fill="#DD2E44" cx="18" cy="30" r="4"/><circle fill="#FFCC4D" cx="29" cy="6" r="6"/><circle fill="#E6AAAA" cx="7" cy="6" r="4"/><circle fill="#E6AAAA" cx="29" cy="6" r="4"/><path fill="#FFCC4D" d="M34 22c0 7-4.923 7-4.923 7H6.923S2 29 2 22C2 22 3.231 0 18 0c14.77 0 16 22 16 22z"/><path fill="#272B2B" d="M11 17s0-2 2-2 2 2 2 2v2s0 2-2 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f430.svg b/browser/components/torpreferences/content/bridgemoji/1f430.svg
new file mode 100644
index 0000000000000..2f70f9669ff74
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f430.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#99AAB5" d="M33.799.005c-.467-.178-7.998 3.971-9.969 9.131-1.166 3.052-1.686 6.058-1.652 8.112C20.709 16.459 19.257 16 18 16s-2.709.458-4.178 1.249c.033-2.055-.486-5.061-1.652-8.112C10.2 3.977 2.668-.173 2.201.005c-.455.174 4.268 16.044 7.025 20.838C6.805 23.405 5 26.661 5 29.828c0 3.234 1.635 5.14 4 5.94 2.531.857 5-.94 9-.94s6.469 1.798 9 .94c2.365-.801 4-2.706 4-5.94 0-3.166-1.805-6.423-4.225-8.984C29.53 16.049 34 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f431.svg b/browser/components/torpreferences/content/bridgemoji/1f431.svg
new file mode 100644
index 0000000000000..cc75dcc68f5a8
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f431.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFCC4D" d="M32.348 13.999s3.445-8.812 1.651-11.998c-.604-1.073-8 1.998-10.723 5.442 0 0-2.586-.86-5.276-.86s-5.276.86-5.276.86C10.001 3.999 2.605.928 2.001 2.001.207 5.187 3.652 13.999 3.652 13.999c-.897 1.722-1.233 4.345-1.555 7.16-.354 3.086.35 5.546.658 6.089.35.617 2.123 2.605 4.484 4.306 3.587 2.583 8.967 3.445 10.761 3.445s7.174-.861 10.761-3.445c2.361-1.701 4.134-3.689 4.484-4.306.308-.543 1.012-3.003.659-6.0 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f432.svg b/browser/components/torpreferences/content/bridgemoji/1f432.svg
new file mode 100644
index 0000000000000..1c1b4347daa1c
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f432.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#3E721D" d="M35.125 13.344c0-1 .771-2.327.771-2.635 0-.656-1.553-.421-1.626-1.046-.209-1.794 1.887-3.318-1.745-3.312-1.352.002-.274-1.768-.274-2.725 0-.957-2.596-.145-3.552-.145-.957 0-.957-2.87-1.913-2.87-2.87 0-3.827 2.87-4.783 2.87-.957 0-1.744-3.621-2.87-2.87-2.87 1.913-3.826 7.653-3.826 7.653s4.783-3.826 10.522-2.87c5.345.891 4.79 10.821 5.641 16.888L24.609 36h3.359c.344-1.5 1.939-.529 2.375-1.688.381-1.016-.67- [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f433.svg b/browser/components/torpreferences/content/bridgemoji/1f433.svg
new file mode 100644
index 0000000000000..f00ea1033e029
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f433.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#3B88C3" d="M32 12c2.122-2.122 5 14.312-3 21-2.757 2.305-6 2.969-8 2.969-2.371 0-10.029.031-13 .031-7.18 0-8-4.925-8-11s.82-11 8-11c6 0 10 2 13 3.996 4.977 3.312 5.992 3.861 8 2.004 3.213-2.97 1-6 3-8z"/><path fill="#55ACEE" d="M34.003 23c-.465 3.727-2.041 7.523-5.003 10-2.757 2.305-6 2.969-8 2.969-2.371 0-10.029.031-13 .031-4.035 0-6.062-1.555-7.062-3.996C.157 30.102 4 33 15 33c14 0 17-5 19.003-10z"/><path fill="#3B [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f434.svg b/browser/components/torpreferences/content/bridgemoji/1f434.svg
new file mode 100644
index 0000000000000..9aa7d69356ae7
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f434.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C1694F" d="M23.283 23.275s1.374 1.635 2.733 10.047c.143.883.201 1.775.217 2.678H36V7.448C31.613 3.975 25.601 3.259 18.322 5.69c0 0-5.408-3-6.147-3.739-.719-.72-1.857-1.556-1.235.35.364 1.112.764 2.373 2.358 4.862-3.436 2.036-4.513 4.68-8.558 13.341C1.652 27.12.08 29.269.937 31.797c1.13 3.337 5.316 5.595 8.844 3.021 1.919-1.4 2.246-3.913 6.225-6.223 3.653-.065 7.277-1.604 7.277-5.32z"/><path fill="#292F33" d="M36 6.0 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f435.svg b/browser/components/torpreferences/content/bridgemoji/1f435.svg
new file mode 100644
index 0000000000000..ee6c57cf9e41a
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f435.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><ellipse transform="rotate(-14.999 5.05 17.456)" fill="#D79E84" cx="5.05" cy="17.455" rx="3.818" ry="5.455"/><ellipse transform="rotate(-75.001 31.05 17.455)" fill="#D79E84" cx="31.05" cy="17.455" rx="5.455" ry="3.818"/><path fill="#BF6952" d="M19.018 36h-2.036C10.264 36 3.75 30.848 3.75 23.636c0-4.121 1.527-6.182 1.527-6.182s-.509-2.061-.509-4.121C4.768 7.152 11.282 2 18 2c6.718 0 13.232 6.182 13.232 11.333 0 2.061-.509 4.121-. [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f436.svg b/browser/components/torpreferences/content/bridgemoji/1f436.svg
new file mode 100644
index 0000000000000..8b2e685804d95
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f436.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M15 27v6s0 3 3 3 3-3 3-3v-6h-6z"/><path fill="#BE1931" d="M15 33l.001.037c1.041-.035 2.016-.274 2.632-1.286.171-.281.563-.281.735 0 .616 1.011 1.591 1.251 2.632 1.286V27h-6v6z"/><path fill="#D99E82" d="M31.954 21.619c0 6.276-5 6.276-5 6.276h-18s-5 0-5-6.276c0-6.724 5-18.619 14-18.619s14 12.895 14 18.619z"/><path fill="#F4C7B5" d="M18 20c-7 0-10 3.527-10 6.395 0 3.037 2.462 5.5 5.5 5.5 1.605 0 3.042-.664 4 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f437.svg b/browser/components/torpreferences/content/bridgemoji/1f437.svg
new file mode 100644
index 0000000000000..49175ea42aa23
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f437.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F4ABBA" d="M34.193 13.329c.387-.371.733-.795 1.019-1.28 1.686-2.854.27-10.292-.592-10.8-.695-.411-5.529 1.05-8.246 3.132C23.876 2.884 21.031 2 18 2c-3.021 0-5.856.879-8.349 2.367C6.93 2.293 2.119.839 1.424 1.249c-.861.508-2.276 7.947-.592 10.8.278.471.615.884.989 1.249C.666 15.85 0 18.64 0 21.479 0 31.468 8.011 34 18 34s18-2.532 18-12.521c0-2.828-.66-5.606-1.807-8.15z"/><path fill="#EA596E" d="M7.398 5.965c-2.166-1. [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f43a.svg b/browser/components/torpreferences/content/bridgemoji/1f43a.svg
new file mode 100644
index 0000000000000..af402057ef411
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f43a.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#66757F" d="M14.858 9.497c.475 2.326-.182 4.236-2.921 4.638-2.741.403-6.7 3.898-8.848-1.798C1.844 9.038 1.092 2.234 2.628 2.009c1.537-.226 11.756 5.162 12.23 7.488z"/><path fill="#CCD6DD" d="M12.784 9.851c.865 1.392-2.205 3.833-3.844 4.568-1.639.736-2.915-.66-4.173-4.1-.55-1.503-1.234-5.532-.634-5.802.599-.268 7.785 3.942 8.651 5.334z"/><path fill="#66757F" d="M21.372 9.497c-.458 2.326.176 4.236 2.818 4.638 2.644.403 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f43b.svg b/browser/components/torpreferences/content/bridgemoji/1f43b.svg
new file mode 100644
index 0000000000000..50224417b0cef
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f43b.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#C1694F" cx="7" cy="6" r="6"/><circle fill="#C1694F" cx="29" cy="6" r="6"/><circle fill="#E6AAAA" cx="7" cy="6" r="4"/><circle fill="#E6AAAA" cx="29" cy="6" r="4"/><path fill="#C1694F" d="M35 22S33.692 0 18 0 1 22 1 22c0 5.872 4.499 10.323 12.216 11.61C14.311 35.06 16.044 36 18 36s3.688-.94 4.784-2.39C30.501 32.323 35 27.872 35 22z"/><circle fill="#DD2E44" cx="18" cy="30" r="4"/><path fill="#D99E82" d="M18 20S7 23. [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f43f.svg b/browser/components/torpreferences/content/bridgemoji/1f43f.svg
new file mode 100644
index 0000000000000..3676874901703
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f43f.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AD743D" d="M35.432 22.773c-.195.858-.638 1.773-1.022 2.159 1.399-4.418 1.399-9.111-2.25-11.167.112 1.107-.11 1.691-.265 2.153-.21-2.219-.578-3.744-2.158-4.927-1.82-1.363-2.611-.452-.736 3.765 2.2 4.945 1.475 8.603.827 11.216-.038.154-.08.29-.12.439.804-5.765-.989-11.722-6.825-14.915-2.989-1.636-5.211-1.852-5.329-3.037-.135-1.377-1.218-3.698-3.811-5.327.444-1.309-.485-2.787-1.117-2.841-.631-.054-2.024 1.039-2.16 2.52 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f441.svg b/browser/components/torpreferences/content/bridgemoji/1f441.svg
new file mode 100644
index 0000000000000..bd1a45e4e6e44
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f441.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E1E8ED" d="M35.059 18c0 3.304-7.642 11-17.067 11C8.566 29 .925 22.249.925 18c0-3.314 34.134-3.314 34.134 0z"/><path fill="#292F33" d="M35.059 18H.925c0-3.313 7.642-11 17.067-11s17.067 7.686 17.067 11z"/><path fill="#F5F8FA" d="M33.817 18c0 2.904-7.087 9.667-15.826 9.667-8.74 0-15.825-5.935-15.825-9.667 0-2.912 7.085-9.666 15.825-9.666C26.73 8.333 33.817 15.088 33.817 18z"/><circle fill="#8B5E3C" cx="18" cy="18" r="8 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f451.svg b/browser/components/torpreferences/content/bridgemoji/1f451.svg
new file mode 100644
index 0000000000000..4db8d2bc357e6
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f451.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F4900C" d="M14.174 17.075L6.75 7.594l-3.722 9.481z"/><path fill="#F4900C" d="M17.938 5.534l-6.563 12.389H24.5z"/><path fill="#F4900C" d="M21.826 17.075l7.424-9.481 3.722 9.481z"/><path fill="#FFCC4D" d="M28.669 15.19L23.887 3.523l-5.88 11.668-.007.003-.007-.004-5.88-11.668L7.331 15.19C4.197 10.833 1.28 8.042 1.28 8.042S3 20.75 3 33h30c0-12.25 1.72-24.958 1.72-24.958s-2.917 2.791-6.051 7.148z"/><circle fill="#5C913B" [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f455.svg b/browser/components/torpreferences/content/bridgemoji/1f455.svg
new file mode 100644
index 0000000000000..1db482028323c
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f455.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#3B88C3" d="M11 2C8 2 0 4 0 6s1 7 2 9 8 0 9-1 2-12 0-12z"/><path fill="#55ACEE" d="M1 4.717C.352 5.088 0 5.565 0 6c0 2 1 7 2 9 .281.562 1.039.777 2 .85C3 13 2 9 1 4.717z"/><path fill="#3B88C3" d="M25 2c3 0 11 2 11 4s-1 7-2 9-8 0-9-1-2-12 0-12z"/><path fill="#55ACEE" d="M35 4.717c.648.371 1 .848 1 1.283 0 2-1 7-2 9-.281.562-1.039.777-2 .85C33 13 34 9 35 4.717z"/><path fill="#3B88C3" d="M25 2h-1.068C23.515 3.695 21.021 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f457.svg b/browser/components/torpreferences/content/bridgemoji/1f457.svg
new file mode 100644
index 0000000000000..29cc45c742cf0
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f457.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#55ACEE" d="M22.42 11.847L26 2s-.398.002-1 .034V0h-2v2.219c-2.271.302-5 1.028-5 2.781 0-1.753-2.729-2.479-5-2.781V0h-2v2.034C10.398 2.002 10 2 10 2l3.581 9.847L1 25.643S7 36 18 36s17-10.357 17-10.357L22.42 11.847z"/><path fill="#BBDDF5" d="M13 11h10v2H13z"/><path fill="#3B88C3" d="M15 13s-6.734 8.106-5.051 9.006C11.633 22.907 15 13 15 13zm6.096 0s6.734 8.105 5.051 9.007c-1.684.9-5.051-9.007-5.051-9.007zM18 13s-2 11 0 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f45f.svg b/browser/components/torpreferences/content/bridgemoji/1f45f.svg
new file mode 100644
index 0000000000000..f0c998c631359
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f45f.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#8899A6" d="M24.161 10.166l-.676-2.034c-.134-.302-.49-.43-.781-.275-.918.487-2.944 1.318-3.684 1.575 1.419.505 3.499 1.503 4.511 1.396.384-.04.787-.308.63-.662zm10.21 24.574c-.399.225-6.509 1.692-18.621-8.906C12.083 22.625 1.2 12.879 1.341 12.547c0 0-.329.36-.602.736-.197.271-.319.559-.274.848.31 1.967 3.112 3.819 6.962 6.781l.549.422.363.279c.588.452 2.316 1.815 4.329 3.403 2.753 2.171 8.284 6.49 8.445 6.61 2.12 1.5 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f47d.svg b/browser/components/torpreferences/content/bridgemoji/1f47d.svg
new file mode 100644
index 0000000000000..f6e98d1c1403d
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f47d.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M35 17c0 9.389-13.223 19-17 19-3.778 0-17-9.611-17-19S8.611 0 18 0s17 7.611 17 17z"/><path fill="#292F33" d="M13.503 14.845c3.124 3.124 4.39 6.923 2.828 8.485-1.562 1.562-5.361.297-8.485-2.828-3.125-3.124-4.391-6.923-2.828-8.485s5.361-.296 8.485 2.828zm8.994 0c-3.124 3.124-4.39 6.923-2.828 8.485 1.562 1.562 5.361.297 8.485-2.828 3.125-3.125 4.391-6.923 2.828-8.485-1.562-1.562-5.361-.297-8.485 2.828zM18 31 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f484.svg b/browser/components/torpreferences/content/bridgemoji/1f484.svg
new file mode 100644
index 0000000000000..af7e861693285
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f484.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#EA596E" d="M16.522.232c2.246 0 4.832 1.375 6.703 3.249C25.098 5.355 27 7.408 27 9.479v17.204l-15.974.031V9.582c-.093-1.506 1.075-9.35 5.496-9.35"/><path fill="#DD2E44" d="M19 11.378V28c0 1.104.896 0 2 0v2c1.104 0 2-.896 2-2V12.333c-1.258-.104-2.65-.262-4-.955z"/><path fill="#F4ABBA" d="M22.072 3.455c2.664 2.391 4.277 5.236 2.961 6.699-1.314 1.463-5.06.991-7.721-1.4-2.661-2.39-3.753-5.516-2.439-6.979 1.316-1.463 4.53 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f488.svg b/browser/components/torpreferences/content/bridgemoji/1f488.svg
new file mode 100644
index 0000000000000..33ed332874ddf
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f488.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#CCD6DD" cx="18" cy="6" r="6"/><path fill="#FFF" d="M11 12h14v21H11z"/><path fill="#DD2E44" d="M11 28.487L20.251 33H25v-2.134l-14-6.83z"/><path fill="#55ACEE" d="M11 19.585l14 6.83v-4.45l-14-6.831z"/><path fill="#DD2E44" d="M13.697 12L25 17.514V12z"/><path fill="#99AAB5" d="M27 11c0 1.104-.896 2-2 2H11c-1.104 0-2-.896-2-2s.896-2 2-2h14c1.104 0 2 .896 2 2zm0 23c0 1.104-.896 2-2 2H11c-1.104 0-2-.896-2-2s.896-2 2-2h14 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f48d.svg b/browser/components/torpreferences/content/bridgemoji/1f48d.svg
new file mode 100644
index 0000000000000..0834165960a70
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f48d.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#9AAAB4" d="M18 12c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm0 20c-4.418 0-8-3.582-8-8s3.582-8 8-8 8 3.582 8 8-3.582 8-8 8z"/><path fill="#5DADEC" d="M29 5l-4-5H11L7 5l11 9z"/><path fill="#8CCAF7" d="M29 5l-4-5H11L7 5h11z"/><path fill="#5DADEC" d="M29 5l-4-5h-7v5h1z"/><path fill="#8CCAF7" d="M18 5h11l-11 9z"/><path fill="#9AAAB4" d="M25 13c0 1.657-1.343 3-3 3h-8c-1.657 0-3-1.343-3-3s1.343- [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f48e.svg b/browser/components/torpreferences/content/bridgemoji/1f48e.svg
new file mode 100644
index 0000000000000..a379f7195f971
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f48e.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#BDDDF4" d="M13 3H7l-7 9h10z"/><path fill="#5DADEC" d="M36 12l-7-9h-6l3 9z"/><path fill="#4289C1" d="M26 12h10L18 33z"/><path fill="#8CCAF7" d="M10 12H0l18 21zm3-9l-3 9h16l-3-9z"/><path fill="#5DADEC" d="M18 33l-8-21h16z"/></svg>
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f490.svg b/browser/components/torpreferences/content/bridgemoji/1f490.svg
new file mode 100644
index 0000000000000..f080ef7f15932
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f490.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#3E721D" d="M35.01 30.967c-1.385-2.226-3.34-5.001-5.265-7.888-5.141-8.772-1.513-18.411-2.893-21.511-.56-1.259-3.879.966-5.555 4.563-.356-.106-.747-.156-1.17-.148.155-2.397.293-4.31-.193-5.403-.71-1.599-5.867 2.418-6.463 7.729-1.848 1.006-3.223 1.957-3.223 1.957s-.95 1.375-1.954 3.223c-5.312.594-9.331 5.753-7.732 6.464 1.097.488 3.015.349 5.421.192-.006.42.046.807.154 1.159-3.61 1.674-5.848 5.006-4.586 5.567 3.282 1.4 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f4a1.svg b/browser/components/torpreferences/content/bridgemoji/1f4a1.svg
new file mode 100644
index 0000000000000..88b62e387aea1
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f4a1.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFD983" d="M29 11.06c0 6.439-5 7.439-5 13.44 0 3.098-3.123 3.359-5.5 3.359-2.053 0-6.586-.779-6.586-3.361C11.914 18.5 7 17.5 7 11.06 7 5.029 12.285.14 18.083.14 23.883.14 29 5.029 29 11.06z"/><path fill="#CCD6DD" d="M22.167 32.5c0 .828-2.234 2.5-4.167 2.5-1.933 0-4.167-1.672-4.167-2.5 0-.828 2.233-.5 4.167-.5 1.933 0 4.167-.328 4.167.5z"/><path fill="#FFCC4D" d="M22.707 10.293c-.391-.391-1.023-.391-1.414 0L18 13.586 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f4a7.svg b/browser/components/torpreferences/content/bridgemoji/1f4a7.svg
new file mode 100644
index 0000000000000..3116ec31793c1
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f4a7.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#5DADEC" d="M28.344 17.768L18.148 1.09 8.7 17.654c-2.2 3.51-2.392 8.074-.081 11.854 3.285 5.373 10.363 7.098 15.811 3.857 5.446-3.24 7.199-10.22 3.914-15.597z"/></svg>
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f4b3.svg b/browser/components/torpreferences/content/bridgemoji/1f4b3.svg
new file mode 100644
index 0000000000000..97641af46a3e9
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f4b3.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M4 5C1.791 5 0 6.791 0 9v18c0 2.209 1.791 4 4 4h28c2.209 0 4-1.791 4-4V9s0-4-4-4H4z"/><path fill="#292F33" d="M0 10h36v5H0z"/><path fill="#F4F7F9" d="M4 19h28v6H4z"/><path fill="#8899A6" d="M19 24c-1.703 0-2.341-1.21-2.469-1.801-.547.041-1.08.303-1.805.764C13.961 23.449 13.094 24 12 24c-1.197 0-1.924-.675-2-2-.003-.056.038-.188.021-.188-1.858 0-3.202 1.761-3.215 1.779-.195.267-.499.409-.806.409-.206 0-.41 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f4bf.svg b/browser/components/torpreferences/content/bridgemoji/1f4bf.svg
new file mode 100644
index 0000000000000..6824a06417d6f
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f4bf.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#8899A6" d="M36 18c0 9.941-8.059 18-18 18S0 27.941 0 18 8.059 0 18 0s18 8.059 18 18zm-18-3c-1.657 0-3 1.343-3 3s1.343 3 3 3 3-1.343 3-3-1.343-3-3-3z"/><path fill="#CCD6DD" d="M13.288 17.476c.122-1.104.598-2.101 1.343-2.846L6.686 6.686C4.182 9.19 2.51 12.521 2.102 16.233l11.186 1.243zm9.425 1.048c-.122 1.104-.598 2.101-1.343 2.846l7.944 7.944c2.504-2.504 4.176-5.835 4.584-9.547l-11.185-1.243z"/><path fill="#F5F8FA" d= [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f4cc.svg b/browser/components/torpreferences/content/bridgemoji/1f4cc.svg
new file mode 100644
index 0000000000000..2ab6da3e14729
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f4cc.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#BE1931" d="M23.651 23.297L12.702 12.348l9.386-7.821 9.385 9.385z"/><path fill="#DD2E44" d="M34.6 13.912c-1.727 1.729-4.528 1.729-6.255 0l-6.257-6.256c-1.729-1.727-1.729-4.53 0-6.258 1.726-1.727 4.528-1.727 6.257 0L34.6 7.656c1.728 1.727 1.728 4.529 0 6.256z"/><path fill="#99AAB5" d="M14 17.823S-.593 35.029.188 35.813C.97 36.596 18.177 22 18.177 22L14 17.823z"/><path fill="#DD2E44" d="M25.215 27.991c-1.726 1.729-4.52 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f4ce.svg b/browser/components/torpreferences/content/bridgemoji/1f4ce.svg
new file mode 100644
index 0000000000000..284cf6674b654
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f4ce.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#99AAB5" d="M35.354 25.254c.217-2.391-.513-4.558-2.057-6.102L17.033 2.89c-.391-.391-1.024-.391-1.414 0-.391.391-.391 1.024 0 1.414l16.264 16.263c1.116 1.117 1.642 2.717 1.479 4.506-.159 1.748-.957 3.456-2.188 4.686-1.23 1.23-2.938 2.027-4.685 2.187-1.781.161-3.39-.362-4.506-1.479L3.598 12.082c-.98-.98-1.059-2.204-.953-3.058.15-1.196.755-2.401 1.66-3.307 1.7-1.7 4.616-2.453 6.364-.707l14.85 14.849c1.119 1.12.026 2.803 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f4d5.svg b/browser/components/torpreferences/content/bridgemoji/1f4d5.svg
new file mode 100644
index 0000000000000..701ff017c5049
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f4d5.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#A0041E" d="M35 26c0 2.209-1.791 4-4 4H5c-2.209 0-4-1.791-4-4V6.313C1 4.104 6.791 0 9 0h20.625C32.719 0 35 2.312 35 5.375V26z"/><path fill="#CCD6DD" d="M33 30c0 2.209-1.791 4-4 4H7c-2.209 0-4-1.791-4-4V6c0-4.119-.021-4 5-4h21c2.209 0 4 1.791 4 4v24z"/><path fill="#E1E8ED" d="M31 31c0 1.657-1.343 3-3 3H4c-1.657 0-3-1.343-3-3V7c0-1.657 1.343-3 3-3h24c1.657 0 3 1.343 3 3v24z"/><path fill="#BE1931" d="M31 32c0 2.209-1.79 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f4e1.svg b/browser/components/torpreferences/content/bridgemoji/1f4e1.svg
new file mode 100644
index 0000000000000..dcb02946d303e
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f4e1.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#99AAB5" d="M10.746 21.521c1.668 0 7.43 4.345 7.427 9.701.003 5.358-14.853 5.358-14.854-.001.001-5.356 5.759-9.7 7.427-9.7z"/><path fill="#CCD6DD" d="M8.541 25.182c8.839 8.84 17.337 5.163 20.033 2.469 2.695-2.696-.158-9.916-6.371-16.129C15.988 5.308 8.767 2.455 6.072 5.15 3.377 7.845-.299 16.343 8.541 25.182z"/><path fill="#66757F" d="M12.443 21.278c6.214 6.214 13.434 9.066 16.13 6.372 2.695-2.696-.158-9.916-6.371-16 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f4e2.svg b/browser/components/torpreferences/content/bridgemoji/1f4e2.svg
new file mode 100644
index 0000000000000..8bd0c94fb602a
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f4e2.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#BE1931" d="M12.908 30.75c-.276 2.209-2.291 3-4.5 3s-3.776-1.791-3.5-4l1-9c.276-2.209 2.291-4 4.5-4s6.468 0 3.5 4-1 10-1 10z"/><path fill="#CCD6DD" d="M35.825 14.75c0 6.902-1.544 12.5-3.45 12.5-1.905 0-20.45-5.598-20.45-12.5 0-6.903 18.545-12.5 20.45-12.5 1.906 0 3.45 5.597 3.45 12.5z"/><ellipse fill="#66757F" cx="32.375" cy="14.75" rx="3.45" ry="12.5"/><path fill="#DD2E44" d="M17.925 21.75l-14-1c-5 0-5-12 0-12l14-1c [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f4fb.svg b/browser/components/torpreferences/content/bridgemoji/1f4fb.svg
new file mode 100644
index 0000000000000..33808ad72ba8f
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f4fb.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M2.697 12.389c-.391.391-.391 1.023 0 1.414s1.023.391 1.414 0l9.192-9.192c.391-.391.391-1.023 0-1.414s-1.023-.391-1.414 0l-9.192 9.192z"/><path fill="#99AAB5" d="M36 32c0 4-4 4-4 4H4s-4 0-4-4V14s0-4 4-4h28c4 0 4 4 4 4v18z"/><path fill="#292F33" d="M15.561 3.061c-.391.391-1.023.391-1.414 0l-.707-.707c-.391-.391-.391-1.023 0-1.414s1.023-.391 1.414 0l.707.707c.39.39.39 1.023 0 1.414z"/><circle fill="#292F33" [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f50b.svg b/browser/components/torpreferences/content/bridgemoji/1f50b.svg
new file mode 100644
index 0000000000000..66d420fc301e9
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f50b.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M24 4c0 2.209-1.791 4-4 4h-4c-2.209 0-4-1.791-4-4s1.791-4 4-4h4c2.209 0 4 1.791 4 4z"/><path fill="#E1E8ED" d="M30 32c0 2.209-1.791 4-4 4H10c-2.209 0-4-1.791-4-4V8c0-2.209 1.791-4 4-4h16c2.209 0 4 1.791 4 4v24z"/><path fill="#77B255" d="M6 8h24v24H6z"/><path fill="#F5F8FA" d="M23 14h-3v-3c0-.552-.447-1-1-1h-2c-.552 0-1 .448-1 1v3h-3c-.553 0-1 .448-1 1v2c0 .553.447 1 1 1h3v3c0 .553.448 1 1 1h2c.553 0 1-.44 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f511.svg b/browser/components/torpreferences/content/bridgemoji/1f511.svg
new file mode 100644
index 0000000000000..7b4dc2a73dc75
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f511.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C1694F" d="M32.614 3.414C28.31-.89 21.332-.89 17.027 3.414c-3.391 3.392-4.098 8.439-2.144 12.535l-3.916 3.915c-.64.641-.841 1.543-.625 2.359l-1.973 1.972c-.479-.48-1.252-.48-1.731 0l-1.731 1.732c-.479.479-.479 1.253 0 1.732l-.867.864c-.479-.478-1.253-.478-1.731 0l-.866.867c-.479.479-.479 1.253 0 1.732.015.016.036.02.051.033-.794 1.189-.668 2.812.382 3.863 1.195 1.195 3.134 1.195 4.329 0L20.08 21.144c4.097 1.955 9.14 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f525.svg b/browser/components/torpreferences/content/bridgemoji/1f525.svg
new file mode 100644
index 0000000000000..e7dee6dd270be
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f525.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F4900C" d="M35 19c0-2.062-.367-4.039-1.04-5.868-.46 5.389-3.333 8.157-6.335 6.868-2.812-1.208-.917-5.917-.777-8.164.236-3.809-.012-8.169-6.931-11.794 2.875 5.5.333 8.917-2.333 9.125-2.958.231-5.667-2.542-4.667-7.042-3.238 2.386-3.332 6.402-2.333 9 1.042 2.708-.042 4.958-2.583 5.208-2.84.28-4.418-3.041-2.963-8.333C2.52 10.965 1 14.805 1 19c0 9.389 7.611 17 17 17s17-7.611 17-17z"/><path fill="#FFCC4D" d="M28.394 23.99 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f526.svg b/browser/components/torpreferences/content/bridgemoji/1f526.svg
new file mode 100644
index 0000000000000..1aff8ae2c0d7f
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f526.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#66757F" d="M23 17l1-1s1-1 2 0l2 2s1 1 0 2l-1 1-4-4z"/><path fill="#8899A6" d="M34.879 27.879c1.166 1.166 1.166 3.076 0 4.242l-2.758 2.758c-1.166 1.166-3.076 1.166-4.242 0L9.121 16.121c-1.167-1.166-1.167-3.076 0-4.242l2.758-2.758c1.167-1.167 3.076-1.167 4.242 0l18.758 18.758z"/><path fill="#66757F" d="M20.879 10.879c1.166 1.167 1.166 3.076 0 4.242l-5.758 5.758c-1.167 1.166-3.076 1.166-4.242 0L6 16s-1-1 0-2l8-8c1-1 2 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f52c.svg b/browser/components/torpreferences/content/bridgemoji/1f52c.svg
new file mode 100644
index 0000000000000..e910ee894e4a8
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f52c.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><g fill="#66757F"><path d="M19.78 21.345l-6.341-6.342-.389 4.38 2.35 2.351z"/><path d="M15.4 22.233c-.132 0-.259-.053-.354-.146l-2.351-2.351c-.104-.104-.158-.25-.145-.397l.389-4.38c.017-.193.145-.359.327-.425.182-.067.388-.021.524.116l6.341 6.342c.138.138.183.342.116.524s-.232.31-.426.327l-4.379.389-.042.001zm-1.832-3.039l2.021 2.021 3.081-.273-4.828-4.828-.274 3.08z"/></g><path fill="#8899A6" d="M31 32h-3c0-3.314-2.63-6-5.875-6 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f52d.svg b/browser/components/torpreferences/content/bridgemoji/1f52d.svg
new file mode 100644
index 0000000000000..113c0330a8f3e
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f52d.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#9AAAB4" cx="17" cy="20" r="3"/><path fill="#DA2F47" d="M19.235 17.059c-.259.485-.868.671-1.353.412L5.529 10.883c-.485-.259-.67-.868-.412-1.353L7.94 4.235c.259-.485.868-.67 1.353-.412l12.353 6.588c.485.259.671.868.412 1.353l-2.823 5.295z"/><path fill="#DA2F47" d="M31.177 22.293c-.259.485-.868.671-1.354.412l-9.705-5.176c-.485-.259-.671-.868-.412-1.354l1.882-3.529c.259-.485.868-.67 1.354-.412l9.705 5.176c.485.259.671 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f52e.svg b/browser/components/torpreferences/content/bridgemoji/1f52e.svg
new file mode 100644
index 0000000000000..d7e09232d7e87
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f52e.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#BF6952" d="M28.736 28.767l-21.458.076-1.649 4.835c-.062.187-.101.387-.073.582.145.984.993 1.74 2.017 1.74h20.894c1.024 0 1.872-.756 2.017-1.74.029-.195-.01-.395-.073-.582l-1.675-4.911z"/><path fill="#854836" d="M28.736 28.767l-.19-.556c-.199-.598-.759-1.001-1.389-1.001H8.883c-.63 0-1.19.403-1.389 1.001l-.216.632c2.928 2.344 6.636 3.754 10.678 3.754 4.088 0 7.837-1.438 10.78-3.83z"/><circle fill="#AA8DD8" cx="17.956" [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f54a.svg b/browser/components/torpreferences/content/bridgemoji/1f54a.svg
new file mode 100644
index 0000000000000..613e4956d71d0
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f54a.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#5C913B" d="M.794 16.112c1 0 5.875 1.344 6.5 2.312L6.013 18.3s-3.906-1.25-4.906-1.25c-1.001 0-.313-.938-.313-.938z"/><path fill="#99AAB5" d="M11 2c1 1 3 7 3 10s-2 6 2 8 5.001-1 5.001-5S20 7 19 5s-2 0-2 0-1-4-2-4-1 2-1 2-2-2-3-2 0 1 0 1z"/><path fill="#CCD6DD" d="M10 15c3 0 4 4 6 4s1-3 3-3 10-5 10-11 3-3 3-1c1 0 2 1.586 2 3 0 1 0 2-1 3 1 0 2 2 1 3 1 3-1 6-3 7 0 1-2 3-4 2 0 0-1 3-3 2 0 0 3.052 1.684 4 2 3 1 7 1 7 1s0 1 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f58c.svg b/browser/components/torpreferences/content/bridgemoji/1f58c.svg
new file mode 100644
index 0000000000000..b39bcbc9dd7e6
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f58c.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#3B88C3" d="M14.57 27.673c2.814-1.692 6.635-3.807 9.899-7.071 7.03-7.029 12.729-16.97 11.314-18.385C34.369.803 24.428 6.502 17.398 13.531c-3.265 3.265-5.379 7.085-7.071 9.899l4.243 4.243z"/><path fill="#C1694F" d="M.428 34.744s7.071 1.414 12.021-3.536c2.121-2.121 2.121-4.949 2.121-4.949l-2.829-2.829s-3.535.708-4.95 2.122c-1.414 1.414-2.518 4.232-2.888 5.598-.676 2.502-3.475 3.594-3.475 3.594z"/><path fill="#CCD6DD" d [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f58d.svg b/browser/components/torpreferences/content/bridgemoji/1f58d.svg
new file mode 100644
index 0000000000000..5a4cbe8e1a8c3
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f58d.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M35.702 7.477L28.522.298c-.396-.397-1.038-.397-1.436 0L3.395 23.989c-.397.397-.397 1.038 0 1.437.72.719-3.14 7.959-3.395 8.496L2.068 36c.536-.255 7.785-4.115 8.506-3.395.397.397 1.039.397 1.436 0L35.702 8.913c.397-.396.397-1.039 0-1.436z"/><path fill="#EA596E" d="M4.139 23.24L26.407.972l8.62 8.62L12.759 31.86z"/><path fill="#292F33" d="M23.534 3.846l1.437-1.436 8.62 8.62-1.437 1.436zM5.576 21.803l1.436-1. [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f5ff.svg b/browser/components/torpreferences/content/bridgemoji/1f5ff.svg
new file mode 100644
index 0000000000000..5ba18be1f9340
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f5ff.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#66757F" d="M8 27s-2 4-2 6 4 3 12 3 12-1 12-3-2-6-2-6H8zM9 6C6 6 6 7 5 16c-.994 8.945 0 10 4 10 2 0 2-20 0-20zm18 0c3 0 3 1 4 10 .994 8.945 0 10-4 10-2 0-2-20 0-20z"/><path fill="#CCD6DD" d="M8 3s1-3 10-3 10 3 10 3 1 6 1 14-1 14-1 14-1 2-10 2-10-2-10-2-1-3-1-14S8 3 8 3z"/><path fill="#66757F" d="M28 8c0-1-3-4-10-4S8 7 8 8c0 .807 4.548 1.612 6.311 1.894C14.999 12.548 15 18 15 18c.805-3.218.315-7.079.093-8.467C15.295 8 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f680.svg b/browser/components/torpreferences/content/bridgemoji/1f680.svg
new file mode 100644
index 0000000000000..8658d4397b8cb
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f680.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#A0041E" d="M1 17l8-7 16 1 1 16-7 8s.001-5.999-6-12-12-6-12-6z"/><path fill="#FFAC33" d="M.973 35s-.036-7.979 2.985-11S15 21.187 15 21.187 14.999 29 11.999 32c-3 3-11.026 3-11.026 3z"/><circle fill="#FFCC4D" cx="8.999" cy="27" r="4"/><path fill="#55ACEE" d="M35.999 0s-10 0-22 10c-6 5-6 14-4 16s11 2 16-4c10-12 10-22 10-22z"/><path d="M26.999 5c-1.623 0-3.013.971-3.641 2.36.502-.227 1.055-.36 1.641-.36 2.209 0 4 1.791 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f681.svg b/browser/components/torpreferences/content/bridgemoji/1f681.svg
new file mode 100644
index 0000000000000..8b7a40320cb31
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f681.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#66757F" d="M16.26 26h2v5h-2zm-8 0h2v5h-2z"/><ellipse fill="#99AAB5" cx="6.259" cy="3" rx="6" ry="1"/><ellipse fill="#99AAB5" cx="20.259" cy="3" rx="6" ry="1"/><path fill="#99AAB5" d="M12.26 3h2v6h-2z"/><ellipse fill="#66757F" cx="13.259" cy="3" rx="2" ry="1"/><path fill="#FFCC4D" d="M34.259 10c0-3 0-7-1-7s-3 4-4 6 5 1 5 1z"/><path fill="#FFCC4D" d="M34.259 10c0-2.209-8-3-19-3h-2C6.632 7 .509 12.451.509 18.25S4.259 2 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f686.svg b/browser/components/torpreferences/content/bridgemoji/1f686.svg
new file mode 100644
index 0000000000000..3f5f5b85617cc
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f686.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#A7A9AC" d="M2 36h32L23 19H13z"/><path fill="#58595B" d="M5 36h26L21 19h-6z"/><path fill="#808285" d="M8 36h20l-9-17h-2z"/><path fill="#A7A9AC" d="M28 35c0 .553-.447 1-1 1H9c-.552 0-1-.447-1-1 0-.553.448-1 1-1h18c.553 0 1 .447 1 1zm-2-4c0 .553-.447 1-1 1H11c-.552 0-1-.447-1-1 0-.553.448-1 1-1h14c.553 0 1 .447 1 1z"/><path fill="#58595B" d="M27.076 25.3L23 19H13l-4.076 6.3c1.889 2.517 4.798 4.699 9.076 4.699 4.277 0 7 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f68b.svg b/browser/components/torpreferences/content/bridgemoji/1f68b.svg
new file mode 100644
index 0000000000000..da204b81a3b09
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f68b.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#939598" d="M0 34h36v2H0z"/><path fill="#58595B" d="M10 32c0-1.657-1.344-3-3-3s-3 1.343-3 3 1.343 3 3 3 3-1.343 3-3z"/><path fill="#292F33" d="M9 32c0-1.105-.896-2-2-2s-2 .895-2 2 .896 2 2 2 2-.895 2-2z"/><circle fill="#58595B" cx="29" cy="32" r="3"/><circle fill="#292F33" cx="29" cy="32" r="2"/><path fill="#E6E7E8" d="M34 2H2c-.552 0-1-.448-1-1s.448-1 1-1h32c.553 0 1 .448 1 1s-.447 1-1 1z"/><path fill="#66757F" d="M [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f68d.svg b/browser/components/torpreferences/content/bridgemoji/1f68d.svg
new file mode 100644
index 0000000000000..68ca65faa0734
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f68d.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M11 34c0 1.104-.896 2-2 2H7c-1.104 0-2-.896-2-2v-7c0-1.104.896-2 2-2h2c1.104 0 2 .896 2 2v7zm20 0c0 1.104-.896 2-2 2h-2c-1.104 0-2-.896-2-2v-7c0-1.104.896-2 2-2h2c1.104 0 2 .896 2 2v7z"/><path fill="#99AAB5" d="M3 17c0 .553-.448 1-1 1H1c-.552 0-1-.447-1-1v-7c0-.552.448-1 1-1h1c.552 0 1 .448 1 1v7zm33 0c0 .553-.447 1-1 1h-1c-.553 0-1-.447-1-1v-7c0-.552.447-1 1-1h1c.553 0 1 .448 1 1v7z"/><path fill="#99AAB5 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f695.svg b/browser/components/torpreferences/content/bridgemoji/1f695.svg
new file mode 100644
index 0000000000000..5446414a25448
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f695.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M21.377 15.449c.089.816-.83 1.495-2.053 1.515-1.223.02-2.095-.635-1.947-1.463l.356-2c.147-.829.938-1.5 1.767-1.5.828 0 1.572.662 1.661 1.478l.216 1.97z"/><path fill="#FFCC4D" d="M32.246 21h-.135l-.444-3c-.327-2.209-1.864-4-3.433-4H16.162c-1.569 0-3.574 1.791-4.478 4l-1.228 3H6.911c-2.073 0-4.104 1.791-4.538 4l-.588 3c-.001.008 0 .015-.002.021C.782 28.132 0 28.97 0 30c0 1.104.896 2 2 2h30c2.209 0 4-1.791 4 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f697.svg b/browser/components/torpreferences/content/bridgemoji/1f697.svg
new file mode 100644
index 0000000000000..97b5f10d4c5a0
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f697.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M13 32h20s3 0 3-4c0-2 0-6-1-7s-8-7-11-7h-6c-3 0-10 7-10 7l-4 1s-3 1-3 3v3s-1 .338-1 1.957C0 32 2 32 2 32h11z"/><path fill="#BBDDF5" d="M20 16h-2c-2 0-8 6-8 6s4.997-.263 10-.519V16zm10 3c-1-1-5-3-7-3h-1v5.379c4.011-.204 7.582-.379 8-.379 1 0 1-1 0-2z"/><circle fill="#292F33" cx="10" cy="31" r="4"/><circle fill="#CCD6DD" cx="10" cy="31" r="2"/><circle fill="#292F33" cx="27" cy="31" r="4"/><circle fill="#CCD [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f69a.svg b/browser/components/torpreferences/content/bridgemoji/1f69a.svg
new file mode 100644
index 0000000000000..7441d1bba8047
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f69a.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M36 27c0 2.209-1.791 4-4 4H4c-2.209 0-4-1.791-4-4v-3c0-2.209 1.791-4 4-4h28c2.209 0 4 1.791 4 4v3z"/><path fill="#FFCC4D" d="M19 13l-.979-1H7.146C4 12 3 14 3 14l-3 5.959V25h19V13z"/><path fill="#55ACEE" d="M9 20H2l2-4s1-2 3-2h2v6z"/><circle fill="#292F33" cx="9" cy="31" r="4"/><circle fill="#CCD6DD" cx="9" cy="31" r="2"/><circle fill="#292F33" cx="27" cy="31" r="4"/><circle fill="#CCD6DD" cx="27" cy="31" [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f69c.svg b/browser/components/torpreferences/content/bridgemoji/1f69c.svg
new file mode 100644
index 0000000000000..014ca11d340ab
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f69c.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M11 11h3v9h-3z"/><path fill="#77B255" d="M24 26.157C24 28.832 22.354 31 20.325 31H4.709c-2.029 0-3.488-1.565-3.258-3.494l.625-5.241c.23-1.93 1.992-3.808 3.928-4.199l14.628-3.21C22.496 14.413 24 16.219 24 18.893v7.264z"/><path fill="#292F33" d="M16.535 24.167C16.239 26.283 17.791 28 20 28h9c2.209 0 4-1.717 4-3.833V8.833C33 6.716 31.547 5 29.755 5h-7.303c-1.792 0-3.484 1.716-3.78 3.833l-2.137 15.334z"/><pat [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f6a0.svg b/browser/components/torpreferences/content/bridgemoji/1f6a0.svg
new file mode 100644
index 0000000000000..8510956dc2af6
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f6a0.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#58595B" d="M19 12V5h-2v7h-5v5h12v-5z"/><path fill="#FFD983" d="M34 28V18c0-2.209-1.791-4-4-4H6c-2.209 0-4 1.791-4 4v10h32z"/><path fill="#269" d="M2 22v6c0 4.418 3.582 8 8 8h16c4.418 0 8-3.582 8-8v-6H2z"/><path fill="#88C9F9" d="M2 18h6v9H2zm8 0h7v9h-7zm9 0h7v9h-7zm9 0h6v9h-6z"/><path fill="#6D6E71" d="M33.213 10.977L3.27 2.954c-.533-.144-.85-.691-.707-1.226.143-.533.691-.85 1.225-.707L33.73 9.045c.534.144.851.691.7 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f6a2.svg b/browser/components/torpreferences/content/bridgemoji/1f6a2.svg
new file mode 100644
index 0000000000000..79077f00a46c9
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f6a2.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M16 0h4v5h-4z"/><path fill="#D1D3D4" d="M16 2h4v4h-4z"/><path fill="#A7A9AC" d="M18 2h2v4h-2z"/><path fill="#66757F" d="M18 19H5s1.355 8 4.875 14C13.394 39 18 33 18 33s4.606 6 8.125 0C29.645 27 31 19 31 19H18z"/><path fill="#99AAB5" d="M18 19H5s1.355 8 4.875 14C13.394 39 18 33 18 33V19z"/><path fill="#55ACEE" d="M0 30h36v6H0z"/><path fill="#E6E7E8" d="M30 9h-2.45l-.242-4H8.692l-.241 4H6v6h2.088l-.242 4h20 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f6a4.svg b/browser/components/torpreferences/content/bridgemoji/1f6a4.svg
new file mode 100644
index 0000000000000..7dfe5a6b81b24
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f6a4.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#5C913B" d="M33 27h-2l1-8h2z"/><path fill="#DD2E44" d="M1 14c9.055.053 11 1 17 2 2.959.493 7 1 11 1 2 0 4 1 4 4 0 2 .534 3.187-5.433 3.815C23.59 25.233 13 23 9 21c-6-3-9-7.005-8-7z"/><path fill="#55ACEE" d="M0 24h36v12H0z"/><path fill="#FFCC4D" d="M5 13c4 0 11 0 18 1s10 1 10 3v3c0 1.414-6.869.447-10 0-7-1-14-3-18-4-4.047-1.011-7-3 0-3z"/><path fill="#A0041E" d="M30.592 24.322c2.122-.539 2.403-1.307 2.418-2.361-1.263. [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f6f0.svg b/browser/components/torpreferences/content/bridgemoji/1f6f0.svg
new file mode 100644
index 0000000000000..6d9bb3d2eaf15
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f6f0.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#99AAB5" d="M8.514 19.828L19.122 9.223l2.121 2.121L10.635 21.95z"/><path fill="#55ACEE" d="M8.515 29.728c-.781.781-2.047.781-2.828 0l-4.95-4.949c-.781-.781-.781-2.048 0-2.828L5.687 17c.781-.781 2.047-.781 2.828 0l4.95 4.95c.781.78.781 2.047 0 2.828l-4.95 4.95zm16.262-16.263c-.78.781-2.047.781-2.827 0L17 8.515c-.781-.781-.781-2.047 0-2.828l4.951-4.95c.781-.781 2.047-.781 2.828 0l4.949 4.95c.781.781.781 2.047.001 2.828 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f6f4.svg b/browser/components/torpreferences/content/bridgemoji/1f6f4.svg
new file mode 100644
index 0000000000000..e217dc436402c
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f6f4.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#292F33" cx="4.5" cy="31.5" r="4.5"/><circle fill="#DD2E44" cx="4.5" cy="31.5" r="3"/><circle fill="#292F33" cx="31.5" cy="31.5" r="4.5"/><circle fill="#DD2E44" cx="31.5" cy="31.5" r="3"/><path fill="#55ACEE" d="M31.5 33h-20c-.825 0-1.5-.675-1.5-1.5s.675-1.5 1.5-1.5h20c.825 0 1.5.675 1.5 1.5s-.675 1.5-1.5 1.5z"/><path fill="#55ACEE" d="M26.012 31.746c-.003-.082-.012-.163-.012-.246 0-3.038 2.462-5.5 5.5-5.5 1.21 0 2 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f6f5.svg b/browser/components/torpreferences/content/bridgemoji/1f6f5.svg
new file mode 100644
index 0000000000000..a1e0f4b99e20b
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f6f5.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F4900C" d="M32 24h-1c-.55 0-1-.45-1-1s.45-1 1-1h1c.55 0 1 .45 1 1s-.45 1-1 1"/><path fill="#292F33" d="M10 31.5c0 2.485-2.015 4.5-4.5 4.5S1 33.985 1 31.5 3.015 27 5.5 27s4.5 2.015 4.5 4.5m24 0c0 2.485-2.015 4.5-4.5 4.5S25 33.985 25 31.5s2.015-4.5 4.5-4.5 4.5 2.015 4.5 4.5"/><path fill="#99AAB5" d="M8 31.5C8 32.881 6.881 34 5.5 34S3 32.881 3 31.5 4.119 29 5.5 29 8 30.119 8 31.5m24 0c0 1.381-1.119 2.5-2.5 2.5S27 32.88 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f6f6.svg b/browser/components/torpreferences/content/bridgemoji/1f6f6.svg
new file mode 100644
index 0000000000000..b6a2165254a33
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f6f6.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#DD2E44" d="M33.793 17S32.476 20 18 20C3.523 20 1.973 17 1.973 17S-1 22.117 4.802 25c4.238 2.105 10.916-.131 12.723-.814 1.991.683 9.274 2.824 13.557.814 5.862-2.751 2.711-8 2.711-8z"/><path fill="#55ACEE" d="M0 24h36v12H0z"/><path fill="#FFAC33" d="M27.005 25.389c.206 0 .412-.079.569-.236.315-.315.315-.824 0-1.139l-8.861-8.86c-.315-.315-.824-.315-1.139 0-.315.315-.315.824 0 1.139l8.861 8.86c.158.157.364.236.57.236z" [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f6f8.svg b/browser/components/torpreferences/content/bridgemoji/1f6f8.svg
new file mode 100644
index 0000000000000..5f015fe792bb0
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f6f8.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFD983" d="M32.831 20.425c-.689 3.241-9.21 6.221-17.314 4.499S.841 17.013 1.53 13.772s8.587-3.287 16.69-1.564 15.3 4.976 14.611 8.217z"/><path fill="#FFD983" d="M27 36l-2-14-17-5-8 19z"/><ellipse transform="rotate(-78 17.482 15.686)" fill="#67757F" cx="17.481" cy="15.685" rx="7.556" ry="17"/><path fill="#67757F" d="M.414 10.977l.414 2.315 32.866 6.986 1.412-2.126z"/><ellipse transform="rotate(-78 18.013 13.186)" fil [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f6f9.svg b/browser/components/torpreferences/content/bridgemoji/1f6f9.svg
new file mode 100644
index 0000000000000..1ee4bfec4ac72
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f6f9.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#A0041E" d="M32.436 2.821c1.801 1.799 3.779 2.737 0 6.517L12.884 28.889c-4.594 4.595-5.463 7.571-11.405 1.63-3.258-3.258.284-3.543 4.888-8.148l19.552-19.55c1.8-1.8 4.718-1.8 6.517 0z"/><path fill="#DD2E44" d="M33.936 4.321c1.801 1.799 1.801 4.717 0 6.517L14.385 30.389c-4.073 4.073-8.342 4.693-11.405 1.63-3.258-3.258.284-3.543 4.888-8.148L27.42 4.321c1.799-1.8 4.717-1.8 6.516 0z"/><path fill="#3B88C3" d="M15.301 33.18 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f6fa.svg b/browser/components/torpreferences/content/bridgemoji/1f6fa.svg
new file mode 100644
index 0000000000000..aae4e94ac5a0f
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f6fa.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#99AAB5" d="M19 9h2v11h-2z"/><path fill="#55ACEE" d="M10 9c-2 2-4 5-4 7 0 4 5 1 5 1V9h-1z"/><circle fill="#292F33" cx="5" cy="32" r="4"/><circle fill="#99AAB5" cx="5" cy="32" r="2"/><path fill="#1E5200" d="M29 23h-2c-1.105 0-2 .895-2 2v5c0 1.105.895 2 2 2h2c1.105 0 2-.895 2-2v-5c0-1.105-.895-2-2-2zm-10 0h-2c-1.105 0-2 .895-2 2v5c0 1.105.895 2 2 2h2c1.105 0 2-.895 2-2v-5c0-1.105-.895-2-2-2z"/><path fill="#5C913B" d="M [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f6fc.svg b/browser/components/torpreferences/content/bridgemoji/1f6fc.svg
new file mode 100644
index 0000000000000..091d51ef63eb8
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f6fc.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M10 27.5c0 1.381-2.567 3.5-4.5 3.5S1 28.881 1 27.5 3.567 26 5.5 26s4.5.119 4.5 1.5zm19 0c0 1.381-2.567 3.5-4.5 3.5S20 28.881 20 27.5s2.567-1.5 4.5-1.5 4.5.119 4.5 1.5zm0-.5c0 1 0 2 2 3s2-3 2-3h-4z"/><path fill="#F4900C" d="M34.787 28.795c1.332 1.332.729 1.683-.603 3.016-1.332 1.332-1.683 1.935-3.016.603-1.332-1.332-1.935-2.889-.603-4.222 1.332-1.333 2.889-.73 4.222.603z"/><path fill="#662113" d="M33.299 2 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f916.svg b/browser/components/torpreferences/content/bridgemoji/1f916.svg
new file mode 100644
index 0000000000000..1dbe6d68de79c
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f916.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><ellipse fill="#F4900C" cx="33.5" cy="14.5" rx="2.5" ry="3.5"/><ellipse fill="#F4900C" cx="2.5" cy="14.5" rx="2.5" ry="3.5"/><path fill="#FFAC33" d="M34 19c0 .553-.447 1-1 1h-3c-.553 0-1-.447-1-1v-9c0-.552.447-1 1-1h3c.553 0 1 .448 1 1v9zM7 19c0 .553-.448 1-1 1H3c-.552 0-1-.447-1-1v-9c0-.552.448-1 1-1h3c.552 0 1 .448 1 1v9z"/><path fill="#FFCC4D" d="M28 5c0 2.761-4.478 4-10 4C12.477 9 8 7.761 8 5s4.477-5 10-5c5.522 0 10 2.239 10 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f93f.svg b/browser/components/torpreferences/content/bridgemoji/1f93f.svg
new file mode 100644
index 0000000000000..01239db878463
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f93f.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#66757F" d="M21 25c-2.556 0-4.062-3.128-5.161-4.676-.412-.58-1.266-.58-1.677 0C13.062 21.872 11.557 25 9 25c-4.551 0-7.923-3.033-8.784-7.619C-.804 11.955 3.589 7 9.11 7h11.78c5.521 0 9.914 4.955 8.894 10.381C28.923 21.967 25.551 25 21 25z"/><path fill="#292F33" d="M18 22l-3-3-3 3-2 2c2 0 3 3 5 3s3-3 5-3l-2-2z"/><path fill="#4E9322" d="M21 25c-2.556 0-4.062-3.128-5.161-4.676-.412-.58-1.266-.58-1.677 0C13.062 21.872 11 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f941.svg b/browser/components/torpreferences/content/bridgemoji/1f941.svg
new file mode 100644
index 0000000000000..e197d16c3e092
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f941.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F18F26" d="M0 18h36v9H0z"/><ellipse fill="#F18F26" cx="18" cy="26" rx="18" ry="9"/><ellipse fill="#F18F26" cx="18" cy="27" rx="18" ry="9"/><path fill="#9D0522" d="M0 10v16h.117c.996 4.499 8.619 8 17.883 8s16.887-3.501 17.883-8H36V10H0z"/><ellipse fill="#F18F26" cx="18" cy="11" rx="18" ry="9"/><ellipse fill="#F18F26" cx="18" cy="12" rx="18" ry="9"/><path fill="#F18F26" d="M0 10h1v2H0zm35 0h1v2h-1z"/><ellipse fill="#F [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f94c.svg b/browser/components/torpreferences/content/bridgemoji/1f94c.svg
new file mode 100644
index 0000000000000..9bc8f8a58d421
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f94c.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#BE1931" d="M28 12H13V8c0-.552.448-1 1-1h11c1.104 0 2-.896 2-2s-.896-2-2-2H14c-2.761 0-5 2.239-5 5v4H8c-1.104 0-2 .896-2 2s.896 2 2 2h20c1.104 0 2-.896 2-2s-.896-2-2-2z"/><path fill="#66757F" d="M36 25c0 3.313-2.687 6-6 6H6c-3.313 0-6-2.687-6-6v-5c0-3.313 2.687-6 6-6h24c3.313 0 6 2.687 6 6v5z"/><path fill="#99AAB5" d="M0 20h36v5H0z"/></svg>
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f94f.svg b/browser/components/torpreferences/content/bridgemoji/1f94f.svg
new file mode 100644
index 0000000000000..84fdba474f0ab
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f94f.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F4900C" d="M35 21.526C35 26.758 27.389 31 18 31S1 26.758 1 21.526 7.625 11 18 11s17 5.294 17 10.526z"/><ellipse fill="#FFAC33" cx="18" cy="19.502" rx="16" ry="8.5"/><path fill="#FFD983" d="M18 11.331c-6.449 0-11.5 2.491-11.5 5.672 0 3.18 5.051 5.671 11.5 5.671 6.448 0 11.5-2.491 11.5-5.671 0-3.181-5.052-5.672-11.5-5.672z"/><ellipse fill="#FFAC33" cx="18" cy="18.002" rx="12" ry="6"/><path fill="#F4900C" d="M29 18.002 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f950.svg b/browser/components/torpreferences/content/bridgemoji/1f950.svg
new file mode 100644
index 0000000000000..eef4358d88ee4
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f950.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F4900C" d="M11.569 35.41c-2.223-.63-5.362-4.11-6.86-7.331-.183-.391-1.101-.673-1.265-1.084C.953 20.775.637 12.54 6.342 6.834 12.751.425 20.537-.295 26.817 1.757c.45.147.837 1.114 1.286 1.199 5.917 1.115 8.322 7.549 5.759 6.816-1.199-.342-2.657-.557-3.814-.428-.437.049-1.051.892-1.544.962-.767.11-2.64.212-3.564.305-9.159.916-12.395 6.971-12.811 14.256-.046.808-.617.623-.73 1.283-.344 1.992 1.089 4.884 1.772 6.939.594 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f951.svg b/browser/components/torpreferences/content/bridgemoji/1f951.svg
new file mode 100644
index 0000000000000..ed1d9f9f633cb
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f951.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#3E721D" d="M35 5.904c2.394 6.042-1.438 20.543-10.5 26.5-9.06 5.957-20.395 3.573-23.097-6.443-1.669-6.186 2.79-10.721 11.851-16.677C22.315 3.327 32.64-.053 35 5.904z"/><path fill="#3E721D" d="M20.605 26.03c-6.523 4.546-15.287 5.15-18.469.582-3.183-4.566.418-12.578 6.943-17.124 6.522-4.545 21.951-9.796 25.134-5.23 3.183 4.57-7.085 17.226-13.608 21.772"/><path fill="#A6D388" d="M19.815 26.578c-5.757 4.013-13.482 3.097- [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f955.svg b/browser/components/torpreferences/content/bridgemoji/1f955.svg
new file mode 100644
index 0000000000000..b949554ff7a1c
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f955.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#77B255" d="M31.096 8.933c3.535-2.122 4.408-8.32 3.701-7.613.707-.707-5.657 0-7.778 3.536 0-1.414-1.414-7.071-3.535-2.121-2.122 4.95-1.415 5.657-1.415 7.071 0 1.414 2.829 1.414 2.829 1.414s-.125 2.704 1.29 2.704c1.414 0 1.997.583 6.946-1.538 4.95-2.122-.624-3.453-2.038-3.453z"/><path fill="#F4900C" d="M22.422 23.594C14.807 31.209 2.27 36.675.502 34.907c-1.768-1.768 3.699-14.305 11.313-21.92 7.615-7.615 11.53-7.562 14 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f956.svg b/browser/components/torpreferences/content/bridgemoji/1f956.svg
new file mode 100644
index 0000000000000..8da10427ff0f0
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f956.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#EDB980" d="M12.697 31.165c-3.785 3.785-8.273 3.838-9.841 2.271-1.568-1.568-1.514-6.056 2.271-9.841L24.052 4.67c3.785-3.784 8.271-3.838 9.84-2.271 1.567 1.568 1.515 6.056-2.271 9.841L12.697 31.165z"/><path d="M24.322 7.969c1.568 1.568 2.758 2.917 3.595 2.082.152-.152.241-.349.301-.565-.018-.043-.036-.087-.041-.136-.128-1.148-2.41-3.641-4.08-4.721l-.045.042-1.474 1.474c.438.539 1.064 1.144 1.744 1.824zm-4.543 4.542c1. [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f95c.svg b/browser/components/torpreferences/content/bridgemoji/1f95c.svg
new file mode 100644
index 0000000000000..c809689a05365
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f95c.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D99E82" d="M17.256 31.519c-4.754 4.754-11.207 5.573-14.683 2.097C-.902 30.141.056 23.55 4.672 18.934c3.355-3.356 6.711-3.356 9.228-5.873 2.517-2.516 1.678-5.033 5.454-8.809C23.968-.361 29.84-1.201 33.616 2.574c3.774 3.776 2.832 9.754-1.678 14.263-3.775 3.775-6.292 2.936-8.809 5.452-2.518 2.518-2.518 5.873-5.873 9.23z"/><path fill="#C1694F" d="M8.211 21.397c-.324 0-.643-.157-.835-.448-.305-.46-.179-1.081.282-1.386.68 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f95d.svg b/browser/components/torpreferences/content/bridgemoji/1f95d.svg
new file mode 100644
index 0000000000000..4007a720a2803
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f95d.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C1694F" d="M25.94 15.188c2.045 8.239-1.642 16.246-8.235 17.881-6.592 1.636-13.593-3.719-15.638-11.958-2.044-8.24 1.642-16.246 8.236-17.882 6.59-1.636 13.593 3.718 15.637 11.959z"/><path fill="#C1694F" d="M34.146 13.151c2.391 9.635-6.295 17.402-14.948 19.548-8.653 2.146-14.34-3.532-16.385-11.773-2.044-8.24.328-15.92 8.98-18.066 8.652-2.148 19.801.005 22.353 10.291z"/><path fill="#77B255" d="M24.448 15.558c1.789 7.211 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f95e.svg b/browser/components/torpreferences/content/bridgemoji/1f95e.svg
new file mode 100644
index 0000000000000..795fb134113d3
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f95e.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><ellipse fill="#929497" cx="18" cy="23.949" rx="18" ry="10"/><ellipse fill="#CCD6DC" cx="18" cy="22.199" rx="18" ry="10"/><path fill="#F19020" d="M32 20.393c0 4.295-6.268 7.778-14 7.778S4 24.688 4 20.393s6.268-7.778 14-7.778 14 3.483 14 7.778z"/><path fill="#FAAA35" d="M32 18.239c0 4.295-6.268 7.778-14 7.778S4 22.534 4 18.239s6.268-7.778 14-7.778 14 3.483 14 7.778z"/><path fill="#F19020" d="M32 16.085c0 4.295-6.268 7.778-14 7.77 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f965.svg b/browser/components/torpreferences/content/bridgemoji/1f965.svg
new file mode 100644
index 0000000000000..7f1692794b5e5
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f965.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#8B5E3C" d="M5.506 30.167c-7.03-7.029-6.397-19.059 1.414-26.87l25.456 25.456c-7.811 7.811-19.841 8.443-26.87 1.414z"/><path fill="#603913" d="M6.92 3.297c-3.905 3.905-1.373 12.77 5.656 19.8 7.031 7.029 15.895 9.561 19.799 5.656 3.905-3.904 1.374-12.769-5.657-19.799C19.69 1.924 10.825-.607 6.92 3.297z"/><path fill="#F5F8FA" d="M31.591 24.217c.229.229.56.336.887.276.387-.071.696-.362.79-.745.067-.269 1.575-6.67-3.013-1 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f966.svg b/browser/components/torpreferences/content/bridgemoji/1f966.svg
new file mode 100644
index 0000000000000..ee2bc1cb1092e
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f966.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#77B255" d="M23.013 24.322l-5.546-5.546-5.547-5.546S12.375 24.413.737 27.323c0 0 1.032 2.487 3.364 4.819s4.819 3.364 4.819 3.364c2.91-11.639 14.093-11.184 14.093-11.184z"/><path fill="#5C913B" d="M13.83 16.594c-.727 3.637-5.092 9.456-5.092 9.456l8.728-8.728c2.909-2.909-3.636-.728-3.636-.728zm12.365 6.546s-10.91.727-17.457 5.819c8.001-8.001 11.638-8.728 11.638-8.728l5.819 2.909z"/><path fill="#3E721D" d="M30.156 28.19 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f968.svg b/browser/components/torpreferences/content/bridgemoji/1f968.svg
new file mode 100644
index 0000000000000..10bd682b6834c
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f968.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F4900C" d="M35 16c0-8-6-11-12-11-1.738 0-3.472.371-5 1.097C16.472 5.371 14.738 5 13 5 7 5 1 8 1 16c0 3 1.314 5.662 3 8 .434.602.903 1.146 1.4 1.647-.357.603-.616 1.091-.779 1.353C4 28 5 29 6 29c.69 0 1.205-.617 1.745-1.482C10.552 29.273 14.023 30 18 30s7.448-.727 10.255-2.482C28.795 28.383 29.31 29 30 29c1 0 2-1 1.379-2-.163-.262-.422-.75-.779-1.353.497-.501.967-1.046 1.4-1.647 1.686-2.338 3-5 3-8zm-17 1.207C16.578 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f96c.svg b/browser/components/torpreferences/content/bridgemoji/1f96c.svg
new file mode 100644
index 0000000000000..6ef36cb221f1a
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f96c.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#5C913B" d="M29.866 24.625c2.522-.841 5.884-4.203 5.884-5.884s-2.522-.841-1.681-3.362 1.681-5.043 0-6.724-3.362 0-5.043-1.681 0-3.362-1.681-5.043-4.203-.841-6.724 0S18.939.25 17.258.25s-5.043 3.362-5.884 5.884-2.521.84-3.361 3.362c-.78 2.341.177 4.823-1.972 9.748-1.026 1.621-1.995 3.178-2.899 4.543C-.836 29.792.449 35.552.449 35.552s5.76 1.285 11.765-2.693c1.365-.904 2.922-1.873 4.543-2.899 4.925-2.15 7.407-1.192 9.7 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f96d.svg b/browser/components/torpreferences/content/bridgemoji/1f96d.svg
new file mode 100644
index 0000000000000..b5607c107cc4d
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f96d.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#77B255" d="M26.38 3.539c.483-.039 1.259-.655 1.664-.595.405.06 1.573 1.078 1.67 1.283.097.205-.637 1.178-.746 1.48-.109.302-.64.239-1.51-.543-.869-.782-1.078-1.625-1.078-1.625z"/><path fill="#EA564B" d="M12.3 3.139c4.545-2.66 11.267-2.611 13.685-.58 1.617 1.358 2.942 2.401 4.474 3.011 2.022.804 3.692 3.154 4.415 5.384.981 3.023 1.68 12.579-8.029 18.516-6.233 3.812-17.656 5.363-18.961 4.723-.984-.483-4.621-2.09-6.675 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f96f.svg b/browser/components/torpreferences/content/bridgemoji/1f96f.svg
new file mode 100644
index 0000000000000..6a65f4c19330d
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f96f.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C1694F" d="M18.09 9.295C7.847 9.295.573 13.188.573 18.053c0 7.569 5.839 15.57 17.517 15.57 11.678 0 17.517-8.001 17.517-15.57 0-4.865-7.274-8.758-17.517-8.758z"/><path fill="#D99E82" d="M18.09 8.322C7.847 8.322.573 11.961.573 17.927c0 5.966 7.273 9.858 17.517 9.858 10.243 0 17.517-4.146 17.517-9.858S28.333 8.322 18.09 8.322z"/><path fill="#CCD6DD" d="M2.519 20.973c-.973.973 4.866 6.812 7.785 3.893 2.919-2.919 5.942 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f980.svg b/browser/components/torpreferences/content/bridgemoji/1f980.svg
new file mode 100644
index 0000000000000..8f45b53dd4f91
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f980.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#A0041E" d="M6.96 20.637c.068.639-.543 1.228-1.368 1.315-.824.089-1.547-.357-1.615-.995-.068-.639.544-1.227 1.368-1.314.824-.089 1.547.356 1.615.994zm2.087 2.717c.125.818-1.756 2.544-2.576 2.669-.819.125-1.584-.438-1.708-1.257-.125-.818.58-1.14 1.398-1.265.819-.124 2.761-.965 2.886-.147zm1.783 2.104c.173.81-1.628 3.927-2.438 4.1-.811.173-1.645.146-1.817-.665-.173-.81.306-1.688 1.116-1.861.81-.174 2.966-2.384 3.139-1. [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f981.svg b/browser/components/torpreferences/content/bridgemoji/1f981.svg
new file mode 100644
index 0000000000000..674ff24e628ae
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f981.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#662113" d="M32.325 10.958s2.315.024 3.511 1.177c-.336-4.971-2.104-8.249-5.944-10.13-3.141-1.119-6.066 1.453-6.066 1.453s.862-1.99 2.19-2.746C23.789.236 21.146 0 18 0c-3.136 0-5.785.227-8.006.701 1.341.745 2.215 2.758 2.215 2.758S9.194.803 6 2.053C2.221 3.949.481 7.223.158 12.174c1.183-1.19 3.55-1.215 3.55-1.215S-.105 13.267.282 16.614c.387 2.947 1.394 5.967 2.879 8.722C3.039 22.15 5.917 20 5.917 20s-2.492 5.96-.581 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f984.svg b/browser/components/torpreferences/content/bridgemoji/1f984.svg
new file mode 100644
index 0000000000000..19d9ff1613d2b
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f984.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C1CDD5" d="M36 19.854C33.518 9.923 25.006 1.909 16.031 6.832c0 0-4.522-1.496-5.174-1.948-.635-.44-1.635-.904-.912.436.423.782.875 1.672 2.403 3.317C8 12.958 9.279 18.262 7.743 21.75c-1.304 2.962-2.577 4.733-1.31 6.976 1.317 2.33 4.729 3.462 7.018 1.06 1.244-1.307.471-1.937 3.132-4.202 2.723-.543 4.394-1.791 4.394-4.375 0 0 .795-.382 1.826 6.009.456 2.818-.157 5.632-.039 8.783H36V19.854z"/><path fill="#60379A" d="M31 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f986.svg b/browser/components/torpreferences/content/bridgemoji/1f986.svg
new file mode 100644
index 0000000000000..085c900634683
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f986.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D99E82" d="M12.75 17.75c1.226 2.195 1.856-1.361 9.312-2.625s13.729 4.454 13.859 5.413c.132.958-4.447 9.462-9.462 9.462H10.75c-4.143 0-7.022-7.224-4-11.438 0 0 4.5-3.5 6-.812z"/><path fill="#C1694F" d="M13.008 18.136C8.02 25.073 6.969 30 10.75 30c-4.143 0-6.578-6.188-4.468-11.031.463-1.064 1.758-2.492 1.758-2.492l4.179-.008c.162.32.599 1.365.789 1.667z"/><path fill="#E1E8ED" d="M20.062 22.75c6.672-2.682 15.729-3.171 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f987.svg b/browser/components/torpreferences/content/bridgemoji/1f987.svg
new file mode 100644
index 0000000000000..4ebb5ad4c15f5
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f987.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#66757F" d="M23 21c0 6.352-3 10-5 10s-5-3.648-5-10 2.239-7 5-7c2.762 0 5 .648 5 7z"/><circle fill="#66757F" cx="18" cy="11" r="4"/><path fill="#66757F" d="M14 11c-2-5 1-7 1-7s2 1 2 4-3 3-3 3z"/><path fill="#546066" d="M14.668 9.904c-.776-2.457-.119-3.896.403-4.58C15.486 5.773 16 6.608 16 8c0 1.268-.739 1.734-1.332 1.904z"/><path fill="#66757F" d="M22 11c2-5-1-7-1-7s-2 1-2 4 3 3 3 3zm-5.984 3c-1.62 1.157-10 2-9-5 .142 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f988.svg b/browser/components/torpreferences/content/bridgemoji/1f988.svg
new file mode 100644
index 0000000000000..f6381c521eaf5
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f988.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#66757F" d="M36 21c0 5-3 9-11 11-7.062 1.766-21-.934-21-2 0-1.129 2.503-1.371 6.812-1.125 10.938.625 13.75-3.857 12-5.25-3.062-2.437-6.437.375-12.062-.125C3.782 22.881 0 17.472 0 16c0-2 11.716-8 20-8s16 4.25 16 13z"/><path fill="#292F33" d="M15 12.5c0 .829-.671 1.5-1.5 1.5s-1.5-.671-1.5-1.5.671-.5 1.5-.5 1.5-.329 1.5.5z"/><path fill="#66757F" d="M14 9c2-5 5.291-9 7.958-9S21 2 26 10 14 9 14 9zM3 30c0-4-1.04-6 .146-6s6 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f989.svg b/browser/components/torpreferences/content/bridgemoji/1f989.svg
new file mode 100644
index 0000000000000..bb0d461ab47a7
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f989.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#662113" d="M7.317 11c-5.723 9.083.958 18 .958 18s2.874-.442 6.875-5.2c4-4.758-7.833-12.8-7.833-12.8zm21.342 0c5.723 9.083-.958 18-.958 18s-2.874-.442-6.875-5.2C16.825 19.042 28.659 11 28.659 11z"/><path fill="#FFAC33" d="M15.203 31.557c-.123-.229-.317-.384-.531-.496-2.032-2.172-.589-4.717-.589-4.717 0-.703 1.271-2.544 0-2.544l-1.272 1.272c-1.272 1.271-1.272 5.089-1.272 5.089H8.995c-.703 0-1.272.568-1.272 1.272 0 .70 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f98a.svg b/browser/components/torpreferences/content/bridgemoji/1f98a.svg
new file mode 100644
index 0000000000000..2cb2f986dfa21
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f98a.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F4900C" d="M13.431 9.802c.658 2.638-8.673 10.489-11.244 4.098C.696 10.197-.606 2.434.874 2.065c1.48-.368 11.9 5.098 12.557 7.737z"/><path fill="#A0041E" d="M11.437 10.355c.96 1.538-1.831 4.561-3.368 5.522-1.538.961-2.899-.552-4.414-4.414-.662-1.689-1.666-6.27-1.103-6.622.562-.351 7.924 3.976 8.885 5.514z"/><path fill="#F4900C" d="M22.557 9.802C21.9 12.441 31.23 20.291 33.802 13.9c1.49-3.703 2.792-11.466 1.312-11.835 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f98b.svg b/browser/components/torpreferences/content/bridgemoji/1f98b.svg
new file mode 100644
index 0000000000000..22c6ead8ffcf6
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f98b.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#1C6399" d="M20.004 20.243c-.426 0-.858.01-1.294.031-.436 1.268-.468 2.747 0 5.097.328 1.646 2.659 6.299 4.584 7.933.683.58 1.638.884 2.69.884 2.144 0 4.691-1.265 6.157-4.034 3.001-5.671-3.474-9.911-12.137-9.911z"/><path fill="#1C6399" d="M33.666 1.973c-.204 0-.425.021-.663.066-3.182.601-9.302 5.126-14.287 11.771 0 0-.789 5.16-.789 6.194 0 .336 1.264.5 3.058.5 3.717 0 9.709-.705 11.424-2.041 1.898-1.479 3.65-9.804 3. [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f98c.svg b/browser/components/torpreferences/content/bridgemoji/1f98c.svg
new file mode 100644
index 0000000000000..86623680c2432
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f98c.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#662113" d="M15.971 15.083c-1.458-2.333-.667-7.708 0-8.958s-.542-2.458-1.5-.458-.996 3-3.162 2.458-1.088-3.292-.379-5.625c.729-2.4-.917-1.959-1.667-.458-.75 1.5-1.254 5.693-2.901 5.984-1.647.291-6.099.599-2.851-5.651C4.818-.139 2.773-.656 1.68 1.459.361 4.007-.404 7.25.221 8.625c1.113 2.448 3.483 2.95 6.983 2.284s6.101-.634 6.101 1.133c0 1.872.208 3.458 1.042 3.625s1.624-.584 1.624-.584zm4.057 0c1.458-2.333.667-7.708 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f98e.svg b/browser/components/torpreferences/content/bridgemoji/1f98e.svg
new file mode 100644
index 0000000000000..1164a73b64f12
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f98e.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#3E721D" d="M15.66 6.844c.485-2.03.384-3.139-.553-3.677-.936-.537.337-2.666 1.977-.793 1.641 1.873 1.428 3.618.662 4.853-.767 1.234-2.336.66-2.086-.383zm-.48 2.951c-.916 1.877-1.699 2.668-2.764 2.487-1.064-.18-1.435 2.272 1.023 1.869 2.457-.403 3.401-1.886 3.595-3.326.193-1.44-1.383-1.994-1.854-1.03zm11.336 6.261c-2.072-1.377-5.382 1.43-5.699 2.28-.317.85 1.721 3.461 1.146 4.94-.577 1.477 1.142 1.768 1.92.491.778-1.2 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f98f.svg b/browser/components/torpreferences/content/bridgemoji/1f98f.svg
new file mode 100644
index 0000000000000..0d07017ab4fdc
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f98f.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#66757F" d="M27.295 7.526c-1.152-3.054-2.65-6.8-8.299-6.915-1.759-.036-1.52.539-.347 1.02 2.248.922-2.474 5.438 4.759 7.4 5.648 1.531 5.039 1.549 3.887-1.505z"/><path fill="#99AAB5" d="M36.004 3.903c-7.737 0-14.411 2.514-18.105 5.757-4.875 4.28-5.38 10.306-14.034 15.66-2.847 1.761-.423 7.517 1.153 9.618 1.908 2.544 28.617.238 30.987-8.777l-.001-22.258z"/><path fill="#66757F" d="M8.676 29.652c1.011.507 1.787 1.051 1.3 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f992.svg b/browser/components/torpreferences/content/bridgemoji/1f992.svg
new file mode 100644
index 0000000000000..233e3c989dc0e
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f992.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path d="M22.217 35.615h-.002c-.804-.142-1.34-.908-1.198-1.712l.59-3.344s.68-3.165-1.076-5.449c1.259-1.171 5.024.085 5.024.085l-1.626 9.221c-.142.804-.908 1.34-1.712 1.199zm-12.692-.021h-.002c-.804-.142-1.34-.908-1.198-1.712l1.312-7.025s.503-2.419.503-4.439c1.142-.439 2.723 2.757 2.723 2.757l-1.626 9.221c-.143.803-.909 1.339-1.712 1.198zm21.277-9.823c-.537 0-.977-.431-.985-.969-.012-.723-.304-4.326-4.925-4.326-.545 0-.985-.441-. [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f993.svg b/browser/components/torpreferences/content/bridgemoji/1f993.svg
new file mode 100644
index 0000000000000..2cb4b9eb2e8bc
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f993.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E1E8ED" d="M23.283 23.275s1.374 1.635 2.733 10.047c.143.883.201 1.775.217 2.678H36V7.448C31.613 3.975 25.601 3.259 18.322 5.69c0 0-5.408-3-6.147-3.739-.719-.72-1.857-1.556-1.235.35.364 1.112.764 2.373 2.358 4.862-3.436 2.036-4.513 4.68-8.558 13.341C1.652 27.12.08 29.269.937 31.797c1.13 3.337 5.316 5.595 8.844 3.021 1.919-1.4 2.246-3.913 6.225-6.223 3.653-.065 7.277-1.604 7.277-5.32z"/><path fill="#292F33" d="M36 6.0 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f994.svg b/browser/components/torpreferences/content/bridgemoji/1f994.svg
new file mode 100644
index 0000000000000..ebbfc2ad25cd8
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f994.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#6D6E71" d="M28.688 20.312C28.688 26.217 23.904 31 18 31c-5.903 0-10.688-4.783-10.688-10.688 0-5.903 4.786-10.689 10.688-10.689 5.904.001 10.688 4.786 10.688 10.689z"/><path fill="#662113" d="M26 33.5H10c-1.665 0-2.479-1.339-2.763-2.31l-2.664-.056c-.153-.003-.297-.077-.389-.2-.092-.122-.123-.281-.083-.43l.594-2.216-2.446-.651c-.152-.041-.276-.15-.335-.296s-.046-.311.035-.445l1.199-1.993-2.156-1.192c-.139-.077-.233-.2 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f995.svg b/browser/components/torpreferences/content/bridgemoji/1f995.svg
new file mode 100644
index 0000000000000..fb046c69c7bc8
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f995.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#3E721D" d="M17.68 22s1.937 7.873 1.187 9.373c-2.373 4.746-1.187 4.627 0 4.627h2.373c2.373 0-1.187-14-1.187-14H17.68zM5.255 19.387s-.436 7.993-1.187 9.493C1.695 33.626 1.695 36 2.882 36h2.373c1.186 0 1.187-4.154 1.187-5.34 0-1.187 1.187-8.603 1.187-8.603l-2.374-2.67z"/><path fill="#77B255" d="M12.374 5.251c-2.068.017-4.209-.435-5.523 2.099-1.404 2.709-2.065 8.579.776 9.664 2.479.947 7.933-1.187 13.866 1.187 5.933 2.3 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f998.svg b/browser/components/torpreferences/content/bridgemoji/1f998.svg
new file mode 100644
index 0000000000000..8a72b40a7af20
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f998.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#BF6952" d="M6.513.886c0 .984.649 3.926 1.153 5.047s-.505.35-1.442-.771-1.657-2.244-1.225-3.435S6.513-.446 6.513.886z"/><path fill="#D99E82" d="M.314 10.699c-.004.961 1.22 2.097 2.883 1.682 1.333-.332 3.234-1.359 3.316-.561.082.798-1.179 3.471-.629 6.276.93 4.74 2.379 8.873 7.201 10.095 0 0 .723 2.775 1.479 3.986.694 1.111 1.029 2.022.45 2.215-.579.193-3.472.386-4.694.579C9.099 35.164 8.906 36 10.256 36H17.2c.707 0 . [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f999.svg b/browser/components/torpreferences/content/bridgemoji/1f999.svg
new file mode 100644
index 0000000000000..b505faf82d7a7
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f999.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C1694F" d="M6.755 2.246c-.443-.368-1.05-.976-1.629-1.299-.497-.277-.247.918.173 1.391.421.473 1.824 1.342 2.455 1.815.631.473.936.398.315-.473-.649-.911-1.314-1.434-1.314-1.434z"/><path fill="#D99E82" d="M8.191.736c.328.339.735 2.394.735 2.394s1.282.092 2.407.786c4.5 2.776 2.542 9.542 3.944 11.102.432.48 9.681-1.643 14.222.544 3.844 1.852 3.083 4.646 4.083 5.271.758.474-2 1.25-2.578-2.313-.506 11.147-1.072 13.867-1. [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f99a.svg b/browser/components/torpreferences/content/bridgemoji/1f99a.svg
new file mode 100644
index 0000000000000..7606d382ac63e
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f99a.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#292F33" d="M14.5 36c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707L16 33.293V31.5c0-.276.224-.5.5-.5s.5.224.5.5v2.207l-2.146 2.146c-.098.098-.226.147-.354.147z"/><path fill="#292F33" d="M16.5 34h-3c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h3c.276 0 .5.224.5.5s-.224.5-.5.5zm5 2c-.128 0-.256-.049-.354-.146L19 33.707V31.5c0-.276.224-.5.5-.5s.5.224.5.5v1.793l1.854 1.854c.195.195.195.512 0 .707-.098.097-.226.146-.354.14 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f99c.svg b/browser/components/torpreferences/content/bridgemoji/1f99c.svg
new file mode 100644
index 0000000000000..f7f743c52258f
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f99c.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#66757F" d="M17.5 35c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707L19 32.293V29.5c0-.276.224-.5.5-.5s.5.224.5.5v3.207l-2.146 2.146c-.098.098-.226.147-.354.147z"/><path fill="#66757F" d="M19.5 33h-3c-.276 0-.5-.224-.5-.5s.224-.5.5-.5h3c.276 0 .5.224.5.5s-.224.5-.5.5zm3 2c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707L24 32.293V29.5c0-.276.224-.5.5-.5s.5.224.5.5v3.207l-2.146 2.146c-.098.098-.226.147-.3 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f99d.svg b/browser/components/torpreferences/content/bridgemoji/1f99d.svg
new file mode 100644
index 0000000000000..30c88720fb800
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f99d.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#99AAB5" d="M10.668 5.616C9.032 2.479 4.439 1.005 3.584 2.298s.707 10.152 1.757 9.967c1.051-.185 5.327-6.649 5.327-6.649z"/><path fill="#292F33" d="M9.841 7.674c-1.27-2.68-4.696-4.82-5.304-3.745-.435.771.122 5.263.757 7.696l4.547-3.951z"/><path fill="#99AAB5" d="M25.284 5.616c1.636-3.137 6.228-4.611 7.084-3.318s-.708 10.152-1.758 9.967c-1.051-.185-5.326-6.649-5.326-6.649z"/><path fill="#292F33" d="M26.36 7.674c1.231- [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f99e.svg b/browser/components/torpreferences/content/bridgemoji/1f99e.svg
new file mode 100644
index 0000000000000..8df2a7467606b
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f99e.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><g fill="#BE1931"><path d="M14.847 22.402h-.064c-2.117-.069-4.919-1.006-6.246-5.077-.135-.413.089-.864.503-.999.414-.135.857.085.992.499l.003.011c.312.959 1.263 3.876 4.8 3.991.435.015.776.378.762.812-.014.415-.344.743-.75.763zm-5.348 5.637c.151-.221.411-.359.698-.342 3.034.181 4.578-1.938 5.086-2.634.256-.352.749-.429 1.1-.173.352.256.414.747.173 1.1-1.698 2.33-3.869 3.434-6.453 3.28-.434-.026-.766-.399-.74-.834.01-.148.059-.28 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f9a3.svg b/browser/components/torpreferences/content/bridgemoji/1f9a3.svg
new file mode 100644
index 0000000000000..1aa87190b9ea1
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f9a3.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#662113" d="M9.396 20.496s2.053 6.29 2.053 8.144.023 3.271-.374 4.463c-.397 1.192-.066 1.523 1.523 1.589 1.589.066 3.774 0 3.973-1.192.199-1.192-.156-1.55-.089-2.742.066-1.192.331-4.37.53-4.701.199-.331 3.906.662 4.635.927s3.046.265 3.112 1.059c.066.795.487 4.86.288 5.655-.199.795.397.993 2.251.927 1.986-.071 3.112-.463 2.979-1.324-.132-.861-.222-2.146.043-3.139s1.258-3.84 1.324-4.767c0 0 .927-2.053.861-3.575-.066-1. [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f9a4.svg b/browser/components/torpreferences/content/bridgemoji/1f9a4.svg
new file mode 100644
index 0000000000000..1dbac1e3177b3
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f9a4.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E08110" d="M17.338 26.109c0 1.515-.032 2.456-.771 2.813-.739.357-3.354.065-3.805.339-.45.274-.845.792-.42.78.425-.012 1.004.13 1.004.13s-.821.222-1.127.531-.464.961-.148.923c.316-.038 1.869-.427 2.177-.429 0 0-.386.482-.429.816-.043.335.229.478.229.478s1.118-.495 1.551-.697c.433-.202 1.161-.83 1.504-.977.343-.147.768-.158 2.126.249 0 0 .016-.655-.51-.859-.526-.205-.915-.058-.802-.847.134-.936.436-2.834.713-3.342.278 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f9a5.svg b/browser/components/torpreferences/content/bridgemoji/1f9a5.svg
new file mode 100644
index 0000000000000..7371a8ed19f1c
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f9a5.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7A5C44" d="M6 21c-1.105 0-2-.895-2-2V4c0-1.105.895-1 2-1s2-.105 2 1c0 0-.606 6.424 0 11.997C8.54 20.971 12 22 12 22c0 1.105-4.895-1-6-1zm14 4.999c-1.105 0-2-.895-2-2v-21c0-1.105.895-1 2-1s2-.105 2 1c0 0-.446 5.108-.125 9.297.32 4.187.125 11.703.125 11.703 0 1.104-.895 2-2 2z"/><path fill="#662113" d="M36 4L0 8V4l36-2z"/><path fill="#A78E81" d="M22.644 18.406c-.633 1.126-1.363 1.809-2.16 2.193-.402.041-1.132-.085-1.4 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f9a6.svg b/browser/components/torpreferences/content/bridgemoji/1f9a6.svg
new file mode 100644
index 0000000000000..5ea0173a5008b
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f9a6.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#A78E81" d="M2.381 8.671c-1.573 0-2.359.786-1.573 1.573 1.573 1.573 3.145 1.573 3.931.786L2.381 8.671zm6.29-6.29c0-1.573.786-2.359 1.573-1.573 1.573 1.573 1.573 3.145.786 3.931L8.671 2.381zm-4.717 9.435s8.547 14.433 14.939 16.512c3.344 1.087 5.692.599 7.863-1.573s2.406-4.447 1.573-7.863C26.937 13.188 11.816 3.954 11.816 3.954l-7.862 7.862z"/><path fill="#A78E81" d="M16.129 26.852c4.231 5.36 8.793 7.807 10.465 6.519 1 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f9a7.svg b/browser/components/torpreferences/content/bridgemoji/1f9a7.svg
new file mode 100644
index 0000000000000..0382845585341
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f9a7.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E26000" d="M36 32c0-12-2-28-18-28S0 20 0 32h8v-5c0-1 1-1 1 0 0 7 4 6 4 6l2 2 1-1c0-.552 1.448-1 2-1s2 .448 2 1l1 1 2-2s4 1 4-6c0-1 1-1 1 0v5h8z"/><circle fill="#E26000" cx="18" cy="13.5" r="11.5"/><path fill="#D9B981" d="M32 31c-3 0-4 1-4 1v1c0 .552.448 1 1 1s1-.448 1-1c0 .552.448 1 1 1s1-.448 1-1c0 .552.448 1 1 1s1-.448 1-1c0 .552.448 1 1 1s1-.448 1-1v-1s-1-1-4-1zM4 31c-3 0-4 1-4 1v1c0 .552.448 1 1 1s1-.448 1-1c0 . [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f9a9.svg b/browser/components/torpreferences/content/bridgemoji/1f9a9.svg
new file mode 100644
index 0000000000000..aaa5cfa26d386
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f9a9.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#EA596E" d="M22.903 27.55c1.218-.812 2.232-.783 3.073-.058-.435-1.131-2.348-3.624-2.348-3.624l-.725 3.682z"/><path fill="#F4ABBA" d="M22.949 27.679c-.03 0-.06-.002-.091-.006-.401-.05-.686-.415-.637-.816l.426-3.448c.023-.188.117-.358.264-.478l4.448-3.624-7.108-3.833c-.356-.192-.488-.636-.296-.992.193-.356.636-.489.992-.297l8.072 4.353c.214.116.357.332.381.575.023.244-.077.482-.267.636l-5.07 4.13-.39 3.156c-.044.373-.3 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f9ad.svg b/browser/components/torpreferences/content/bridgemoji/1f9ad.svg
new file mode 100644
index 0000000000000..6904e81a57331
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f9ad.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><g fill="#99AAB5"><path d="M3.016 5.201c-.062 0-.116-.043-.128-.105-.105-.555-.092-1.586.168-1.875.047-.053.129-.058.184-.01.053.048.058.13.01.184-.159.176-.216 1.072-.106 1.652.013.071-.033.139-.104.152-.008.002-.016.002-.024.002zm.517.9c-.057 0-.109-.038-.125-.096-.203-.74-.075-1.858-.008-2.097.019-.068.093-.107.16-.09.069.019.109.091.09.16-.069.246-.172 1.299.008 1.959.019.069-.022.141-.091.16-.011.003-.023.004-.034.004z"/><p [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f9c1.svg b/browser/components/torpreferences/content/bridgemoji/1f9c1.svg
new file mode 100644
index 0000000000000..1f966c363b0f5
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f9c1.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#BBDDF5" d="M5 21.875s1.589 5.727 2 8.482c.464 3.111 3.571 5.571 11 5.571s10.536-2.461 11-5.571c.411-2.755 2-8.482 2-8.482H5z"/><path fill="#662113" d="M5.094 21.969c.25 1.219.694 1.994 1.344 1.594.65-.4 1.65-.193 1.344.625-.281.75.969 1.094 1.5.656.509-.419 1.555-.881 1.656.062.094.875 1.168 1.11 1.656.469.5-.656 1.875-.394 2.125.406s1.594.688 1.969.125c.355-.533.713-.885 1.312-.885V25c.6 0 .957.373 1.312.906.375.56 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f9c3.svg b/browser/components/torpreferences/content/bridgemoji/1f9c3.svg
new file mode 100644
index 0000000000000..51a3f26d4d9d5
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f9c3.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#E3A919" d="M28.337 32.563l-2.579 3.082c-.552.553-1.758.007-1.758-.545V12.001c0-.552 2.372-4.501 5-4.501l-.028 23.007c0 1.134-.093 1.308-.635 2.056z"/><path fill="#FFD983" d="M26 10.454H9l.194-.348L12.74 7.5c.486-.379.831-.5 1.383-.5h14.363c.188 0 .514.277.344.47L26 10.454z"/><path fill="#FFCC4D" d="M25 36H10c-.552 0-1-.448-1-1V10.454S9.448 10 10 10h15c.552 0 1 .454 1 .454V35c0 .552-.448 1-1 1z"/><circle fill="#F4900 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f9c5.svg b/browser/components/torpreferences/content/bridgemoji/1f9c5.svg
new file mode 100644
index 0000000000000..ab68cb1d6c197
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f9c5.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D39954" d="M26.617 32.441c-.02-.039-.373-.678-1.025-1.172.103-.421.056-.835-.307-1.103-.9-.662-8.82.226-9.386 3.057-.234 1.171.588 1.171 1.038.809-.137.499-.212 1.011-.169 1.49.024.269.261.467.531.444.029-.002.057-.007.084-.015.225-.06.381-.275.36-.516-.03-.334.022-.694.111-1.051.201.18.424.327.686.269.312-.07.51-.378.64-.712.015.212.046.348.05.363.069.259.333.411.593.345l.006-.002c.257-.069.411-.333.348-.591-.004-. [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f9c7.svg b/browser/components/torpreferences/content/bridgemoji/1f9c7.svg
new file mode 100644
index 0000000000000..cc92a9d18792e
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f9c7.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><ellipse fill="#939598" cx="18" cy="26" rx="18" ry="10"/><ellipse fill="#CCD6DD" cx="18" cy="24" rx="18" ry="10"/><path fill="#F4900C" d="M15.714 32.54L2.575 24.857c-1.262-.738-.929-3.558-.929-4.785l14.069-6.657c1.262-.738 3.308-.738 4.57 0L34.37 20.26c0 1.689.316 3.859-.947 4.597L20.285 32.54c-1.262.738-3.309.738-4.571 0z"/><path fill="#FFAC33" d="M15.714 29.279L2.575 21.596c-1.262-.738-1.262-1.934 0-2.672l13.139-7.683c1.262-.7 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f9c9.svg b/browser/components/torpreferences/content/bridgemoji/1f9c9.svg
new file mode 100644
index 0000000000000..16b0db823d27a
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f9c9.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#8A4B38" d="M26.875 14.6C25.1 12.778 21.55 12.778 18 12.778s-7.1 0-8.875 1.822c-2.663 2.733-5.325 9.72-3.55 15.186C7.35 35.252 15.132 35.814 18 35.814s10.65-.562 12.425-6.028c1.775-5.465-.887-12.453-3.55-15.186z"/><path fill="#A5503C" d="M25.58 14.412c-1.516-1.556-4.548-1.556-7.58-1.556s-6.064 0-7.58 1.556c-2.274 2.334-4.548 8.302-3.032 12.969C8.904 32.049 15.55 32.529 18 32.529s9.096-.48 10.611-5.148c1.516-4.668-.75 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f9d9.svg b/browser/components/torpreferences/content/bridgemoji/1f9d9.svg
new file mode 100644
index 0000000000000..553708315577b
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f9d9.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><ellipse fill="#C63900" cx="18" cy="19.024" rx="15" ry="3.529"/><path fill="#FA743E" d="M26.276 28.276h-16c-2.486 0-4.774 1.443-5.762 3.449-.368-.415-.907-.619-1.514-.619-1.1 0-2 .935-2 1.998V36h31v-1.931c0-3.199-2.411-5.793-5.724-5.793z"/><path fill="#FFDC5D" d="M14 25v3.234c0 .004.011.007.015.011.132.237 3.737 6.739 3.989 6.739.253 0 3.854-6.502 3.985-6.739.004-.004.01-.007.01-.011V25H14z"/><path fill="#F9CA55" d="M14 27.598c1 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f9da.svg b/browser/components/torpreferences/content/bridgemoji/1f9da.svg
new file mode 100644
index 0000000000000..5c9ea3625c0a9
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f9da.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#ABDFFF" d="M20.769 20.273c-4.558 6.089-5.676 12.675-2.497 14.71 3.179 2.035 9.451-1.252 14.008-7.341 4.558-6.089 2.752-17.029 2.497-16.631-1.777 2.774-9.45 3.173-14.008 9.262z"/><path fill="#ABDFFF" d="M15.255 20.273c4.558 6.089 5.676 12.675 2.498 14.71-3.179 2.035-9.451-1.252-14.009-7.341S.904 10.673 1.247 11.011C5 14.71 10.698 14.184 15.255 20.273z"/><path fill="#55ACEE" d="M4.598 17.829c-.484-.808-1.158-1.652-.77 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f9dc.svg b/browser/components/torpreferences/content/bridgemoji/1f9dc.svg
new file mode 100644
index 0000000000000..52f120c41f499
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f9dc.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M7.399 17.278c-1.878 1.035-3.24 2.455-3.336 2.617-.239.404-.437 1.592-.276 2.415.145.741.177 2.238.66 2.915.198.277.107.759-.032 1.208-.419 1.353.306 3.199-.145 2.882-.918-.644-1.074-1.83-1.047-2.528.015-.393-.166-.884-.257-1.138-.059-.16-1.245-3.203-1.518-4.54-.148-.722-.333-1.302.275-2.155.903-1.266 2.094-2.996 3.311-3.885 2.012-1.471 3.936-1.687 3.936-1.687s-.911 3.532-1.571 3.896zm23-6.626c-.084.009-. [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f9e0.svg b/browser/components/torpreferences/content/bridgemoji/1f9e0.svg
new file mode 100644
index 0000000000000..653427da92a85
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f9e0.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#EA596E" d="M29.896 26.667c.003.283-.07.653-.146.958-.531 2.145-2.889 4.552-6.208 4.333-3.008-.198-5.458-1.642-5.458-3.667s2.444-3.667 5.458-3.667 6.335.018 6.354 2.043z"/><path fill="#DD2E44" d="M23.542 24.964c-1.619 0-5.314.448-6.162.448-1.498 0-2.713.94-2.713 2.1 0 .558.286 1.062.744 1.438 0 0 1.006 1.009 2.818.525.793-.212 2.083-1.786 4.354-2.036 1.131-.125 3.25.75 6.974.771.16-.344.193-.583.193-.583 0-2.027-3.19 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f9e2.svg b/browser/components/torpreferences/content/bridgemoji/1f9e2.svg
new file mode 100644
index 0000000000000..c2dd6c6f2f1e6
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f9e2.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><ellipse transform="rotate(-87.495 21.25 5.018)" fill="#2B7BB9" cx="21.249" cy="5.018" rx=".944" ry="1.565"/><path fill="#292F33" d="M29.831 27.74s3.523 1.385 5.185.088c.125-1.17-3.311-2.035-3.311-2.035l-1.874 1.947zM7.527 25.549S2.271 33.375.77 32.031c0 0-.425-1.397 1.23-4.218 1.656-2.822 5.527-2.264 5.527-2.264z"/><path fill="#1C6399" d="M19.766 4.82s-8.537.43-13.735 16.348c7.494 0 16.785.555 16.785.555s7.799 3.982 8.889 4.469 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f9e6.svg b/browser/components/torpreferences/content/bridgemoji/1f9e6.svg
new file mode 100644
index 0000000000000..44fc31080aaa6
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f9e6.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#55ACEE" d="M27 19.276c-.983 0-1.893.294-2.667.784v4.549h-2.3c.175 2.603 2.319 4.667 4.966 4.667 2.761 0 5-2.239 5-5v-5H27z"/><path fill="#1C6399" d="M22.995 22.999l.005-16 9 .003-.005 16z"/><path fill="#1C6399" d="M24.202 21.451l6.354 6.354-6.878 6.878-6.354-6.354z"/><path fill="#55ACEE" d="M30 4h-5c-1.1 0-2 .9-2 2v2h9V6c0-1.1-.9-2-2-2zM15 15.276c-.983 0-1.893.294-2.667.784v4.549h-2.3c.175 2.603 2.319 4.667 4.966 4. [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f9e9.svg b/browser/components/torpreferences/content/bridgemoji/1f9e9.svg
new file mode 100644
index 0000000000000..ae4bf566814b6
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f9e9.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#78B159" d="M26.093 4.612c-.498.498-.629.839-.728 1.029-.66 1.266-1.455 1.676-2.78.351-.13-.13-4.087-4.267-4.741-5.017-.427-.49-1.081-.64-1.584-.262-.38.286-4.035 3.273-5.035 4.507-.774.955-.8 2.134-.079 2.856.326.326.727.449 1.151.578.552.169 1.763.068 2.47.775 1.133 1.133.54 2.924-.917 4.421-1.497 1.457-3.288 2.05-4.421.917-.708-.708-.606-1.918-.775-2.47-.129-.424-.252-.824-.578-1.151-.721-.721-1.9-.694-2.856.079-1 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f9ea.svg b/browser/components/torpreferences/content/bridgemoji/1f9ea.svg
new file mode 100644
index 0000000000000..8116cfa1ca017
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f9ea.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M14.563 14.414L25.47 3.505l6.961 6.962-10.908 10.908z"/><path fill="#68E090" d="M8.103 34.399C2.5 34 1.5 30.062 1.635 27.932c.322-5.07 15.601-16.551 15.601-16.551l12.517 1.93c.001 0-17.389 21.392-21.65 21.088z"/><path fill="#8899A6" d="M32.326 3.708C29.405.787 26.104-.649 24.954.502c-.013.013-.022.031-.034.044-.006.006-.015.008-.021.014L2.295 23.164c-1.412 1.412-2.19 3.29-2.19 5.288 0 1.997.778 3.875 2.19 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f9ec.svg b/browser/components/torpreferences/content/bridgemoji/1f9ec.svg
new file mode 100644
index 0000000000000..689cc3e440fad
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f9ec.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#77B255" d="M3.019 26.246l3.432 3.432-.923.922-3.432-3.431z"/><path fill="#FFD983" d="M6.362 29.587l3.431 3.432-.923.923-3.43-3.432z"/><path fill="#FFAC33" d="M6.273 24.237l3.432 3.432-.923.923L5.35 25.16z"/><path fill="#EA596E" d="M8.998 26.962l3.432 3.432-.923.923-3.431-3.432zm3.909-9.359l3.431 3.432-.923.923-3.431-3.432z"/><path fill="#FFAC33" d="M15.631 20.329l3.432 3.431-.923.923-3.432-3.431z"/><path fill="#77B2 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f9ed.svg b/browser/components/torpreferences/content/bridgemoji/1f9ed.svg
new file mode 100644
index 0000000000000..fd3d583e58a96
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f9ed.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#F4900C" cx="18" cy="18" r="18"/><circle fill="#FFD983" cx="18" cy="18" r="14.5"/><circle fill="#F5F8FA" cx="18" cy="18" r="13"/><path fill="#CCD6DD" d="M18 8l1.531 6.304 5.54-3.375-3.375 5.54L28 18l-6.304 1.531 3.375 5.54-5.54-3.375L18 28l-1.531-6.304-5.54 3.375 3.375-5.54L8 18l6.304-1.531-3.375-5.54 5.54 3.375z"/><path fill="#292F33" d="M17.343 20.748l8.777 5.381-5.379-8.778z"/><path fill="#DD2E44" d="M18.657 15. [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f9ee.svg b/browser/components/torpreferences/content/bridgemoji/1f9ee.svg
new file mode 100644
index 0000000000000..c619bb0eb5e78
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f9ee.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M3 16v-2h30v2zm0 7v-2h30v2zm0 7v-2h30v2zM3 9V7h30v2z"/><path fill="#D5AB88" d="M35 33V1c0-.552-.448-1-1-1h-1c-.552 0-1 .448-1 1H4c0-.552-.448-1-1-1H2c-.552 0-1 .448-1 1v32h34zM4 4h28v29H4V4z"/><path fill="#3B94D9" d="M19 5.5c-.829 0-1.5.671-1.5 1.5 0-.829-.671-1.5-1.5-1.5s-1.5.671-1.5 1.5c0-.829-.671-1.5-1.5-1.5s-1.5.671-1.5 1.5c0-.829-.671-1.5-1.5-1.5S8.5 6.171 8.5 7c0-.829-.671-1.5-1.5-1.5S5.5 6.171 5.5 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f9f2.svg b/browser/components/torpreferences/content/bridgemoji/1f9f2.svg
new file mode 100644
index 0000000000000..e81b4644e2930
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f9f2.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M19.469 8.319l-3.854-4.671c-.355-.43-.991-.491-1.421-.136l-3.376 2.785 5.138 6.228 3.376-2.785c.431-.355.492-.991.137-1.421z"/><path fill="#BE1931" d="M29.543 25.021l-6.228-5.138s-2.395 3.132-5.006 6.152c-1.986 2.298-6.093 2.215-8.406-.098s-2.395-6.42-.098-8.406c3.02-2.611 6.152-5.006 6.152-5.006l-5.138-6.228s-5.122 3.928-6.613 5.43c-5.468 5.508-5.487 14.418.001 19.906s14.398 5.468 19.906.001c1.502-1.491 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f9f5.svg b/browser/components/torpreferences/content/bridgemoji/1f9f5.svg
new file mode 100644
index 0000000000000..3210fbeb543ab
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f9f5.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#553788" d="M35 36c-.419 0-.809-.265-.948-.684C33.388 33.326 31.595 32 25 32c-.553 0-1-.447-1-1s.447-1 1-1c5.635 0 9.653.797 10.948 4.684.175.524-.108 1.091-.632 1.265-.105.034-.212.051-.316.051z"/><path fill="#553788" d="M3 3h22v30H3z"/><path fill="#C1694F" d="M26 4H2c-.55 0-2-3-2-3 0-.55.45-1 1-1h26c.55 0 1 .45 1 1 0 0-1.45 3-2 3zm0 28H2c-.55 0-2 3-2 3 0 .55.45 1 1 1h26c.55 0 1-.45 1-1 0 0-1.45-3-2-3z"/><path fill= [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1f9f9.svg b/browser/components/torpreferences/content/bridgemoji/1f9f9.svg
new file mode 100644
index 0000000000000..2bcbda87e3e86
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1f9f9.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C1694F" d="M19.175 16.825c-.706-.706-.706-1.861 0-2.567L32.433 1C33.139.294 34.294.294 35 1c.706.706.706 1.861 0 2.567L21.742 16.825c-.706.706-1.861.706-2.567 0z"/><path fill="#66757F" d="M8.839 27.365l-.204-.204c-.941-.941-.941-2.48 0-3.42l8.35-8.35c.941-.941 2.48-.941 3.42 0l.204.204c.941.941.941 2.48 0 3.42l-8.35 8.35c-.94.941-2.48.941-3.42 0z"/><path fill="#FFCC4D" d="M19.389 26.341c1.688-1.688.671-5.441-1.809-7 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1fa73.svg b/browser/components/torpreferences/content/bridgemoji/1fa73.svg
new file mode 100644
index 0000000000000..03e70ca89e718
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1fa73.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#78B159" d="M31 6V1.955c0-.527-.428-.955-.955-.955H5.955C5.428 1 5 1.428 5 1.955V6L0 31l14 4 4-10.545L22 35l14-4-5-25z"/><g fill="#5D9040"><path d="M5 4h26v2H5zm8.782 2h-2.074c-1.378 4.107-5.46 5.399-7.87 5.807l-.421 2.107c3.606-.408 8.9-2.403 10.365-7.914z"/><path d="M32.583 13.914l-.421-2.107c-2.41-.408-6.491-1.701-7.87-5.807h-2.074c1.464 5.511 6.759 7.506 10.365 7.914zM17 6v21.091l1-2.636 1 2.636V6z"/><path d="M18 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1fa80.svg b/browser/components/torpreferences/content/bridgemoji/1fa80.svg
new file mode 100644
index 0000000000000..fc9af9be9d2d8
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1fa80.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><ellipse fill="#BE1931" cx="17.722" cy="21.507" rx="12.917" ry="13.993"/><ellipse fill="#A0041E" cx="15.569" cy="21.507" rx="12.917" ry="13.993"/><path fill="#99AAB5" d="M28.298 13.741c-1.643 0-3.457-.825-5.227-1.629-2.124-.966-4.322-1.966-5.46-1.113l-1.167-1.555c2.06-1.544 4.79-.303 7.431.898 2.023.92 4.117 1.868 5.327 1.263.664-.331 1.155-1.195 1.459-2.566l1.899.422c-.444 2-1.259 3.27-2.49 3.885-.558.278-1.153.395-1.772.395z"/ [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1fa81.svg b/browser/components/torpreferences/content/bridgemoji/1fa81.svg
new file mode 100644
index 0000000000000..fd8605e468471
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1fa81.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#55ACEE" d="M22.45 32.289L.592 18.752 6.55.711l18.042 5.958z"/><path fill="#269" d="M20.543 29.5c-.366 0-.719-.201-.895-.551L6.929 3.687c-.249-.493-.05-1.095.443-1.343.494-.249 1.095-.05 1.343.443l12.72 25.264c.248.493.05 1.094-.444 1.343-.143.072-.297.106-.448.106z"/><path fill="#269" d="M3.12 18.48c-.366 0-.718-.201-.894-.55-.249-.493-.05-1.095.443-1.343l18.947-9.54c.49-.25 1.094-.05 1.343.443.248.493.05 1.095-.443 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1fa83.svg b/browser/components/torpreferences/content/bridgemoji/1fa83.svg
new file mode 100644
index 0000000000000..3de58a8f2cc51
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1fa83.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#CCD6DD" d="M31.497 6.06s.244-4.293-6.702-3.83c-8.617.574-18.599 9.155-18.95 17.159-.267 6.089 8.109 1.203 11.139-1.96-.045-.045 3.282 1.426 4.752 4.545-3.267 2.733-8.047 4.803-11.644 5.109-6.282.535-8.546-2.727-7.557-9.15C3.758 10 13.588.858 24.604.795c8.377-.048 6.893 5.265 6.893 5.265z"/><path fill="#662113" d="M32.19 32.317c.351-1.768-.27-19.086-4.411-22.615S5.541 7.73 3.881 8.435c-2.24.95-1.352 3.835.184 3.93 5. [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1fa90.svg b/browser/components/torpreferences/content/bridgemoji/1fa90.svg
new file mode 100644
index 0000000000000..46a0c53cea531
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1fa90.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#FFCC4D" cx="18" cy="18" r="10.694"/><path fill="#F4900C" d="M10.229 22.751c-.985.067-1.689-.308-2.203-.917.214.557.487 1.081.788 1.588.771.289 1.591.41 2.54-.272-.463-.227-.88-.415-1.125-.399zM23.086 8.608c.045.328-.187.5-.75.363-.955-.232-1.793.776-2.274 1.619-.947 1.657-4.854 3.524-4.857 2.087-.001-.679-3.452.843-3.893.161-.417-.644-1.663-.396-1.921-1.168-1.135 1.544-1.869 3.402-2.04 5.422.377.718.864 1.282 1.35 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1fa91.svg b/browser/components/torpreferences/content/bridgemoji/1fa91.svg
new file mode 100644
index 0000000000000..8db580193f882
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1fa91.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#A4523A" d="M12 20c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2s2-.9 2-2V22c0-1.1-.9-2-2-2zm18 0c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2s2-.9 2-2V22c0-1.1-.9-2-2-2z"/><path fill="#C1694F" d="M13 2h16v8H13z"/><path fill="#C1694F" d="M16 9h2v13h-2zm4 0h2v13h-2zm4 0h2v13h-2zM7 23c-1.1 0-2 .9-2 2v9c0 1.1.9 2 2 2s2-.9 2-2v-9c0-1.1-.9-2-2-2z"/><path fill="#C1694F" d="M25 21c-1.1 0-2 .9-2 2v11c0 1.1.9 2 2 2s2-.9 2-2V23c0-1.1-.9-2-2-2zM12 0c-1 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1fa95.svg b/browser/components/torpreferences/content/bridgemoji/1fa95.svg
new file mode 100644
index 0000000000000..da6e25d06b84f
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1fa95.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#67757F" cx="10.047" cy="16.953" r="1"/><circle fill="#67757F" cx="1.047" cy="25.953" r="1"/><circle fill="#67757F" cx="19.047" cy="25.953" r="1"/><circle fill="#67757F" cx="10.047" cy="34.953" r="1"/><circle fill="#67757F" cx="3.547" cy="19.828" r="1"/><circle fill="#67757F" cx="16.214" cy="32.495" r="1"/><path fill="#292F33" d="M32.339 5.338l-15.45 17.334-3.561-3.56L30.66 3.66z"/><ellipse transform="rotate(-52.01 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1fa97.svg b/browser/components/torpreferences/content/bridgemoji/1fa97.svg
new file mode 100644
index 0000000000000..c9c21ca2a2965
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1fa97.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFE8B6" d="M17.483 30.971c-.574.051-1.099-.36-1.168-.93L13.427 5.136c-.069-.57.676-1.133 1.657-1.22.981-.087 1.811.336 1.844.909l1.541 25.024c.031.574-.412 1.07-.986 1.122zm4.199-.146c-.574-.011-1.051-.476-1.058-1.051l-.192-25.071c-.007-.574.791-1.054 1.773-1.034.982.019 1.76.528 1.731 1.102l-1.157 25.045c-.029.574-.522 1.02-1.097 1.009zm4.185.306c-.57-.073-.993-.586-.939-1.158l2.501-24.947c.054-.572.899-.963 1.873- [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1fab6.svg b/browser/components/torpreferences/content/bridgemoji/1fab6.svg
new file mode 100644
index 0000000000000..8e70d6cd5c39b
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1fab6.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#C1694F" d="M4.048 29.644c-.811-.558-1.541-4.073-.936-4.404.738-.402.686.835 2.255 2.362 1.569 1.528 6.47.913 7.708 1.326 1.363.455-6.385 2.533-9.027.716z"/><path fill="#D99E82" d="M5.367 27.603C4 22 4.655 18.919 5.433 16.861 6.8 13.24 16.699 5.169 23.8 2.637 25.678 1.967 31.62 1 35 1c.589 2.332-1.174 6.717-1.62 7.518-1.009 1.81-3.564 4.273-8.646 9.482-.252.258-5.119-.46-5.376-.191-.283.296 4.044 1.579 3.755 1.889-.7 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1fad0.svg b/browser/components/torpreferences/content/bridgemoji/1fad0.svg
new file mode 100644
index 0000000000000..34e68d6b49b17
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1fad0.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#5C913B" d="M8.089 1s5.858.616 8.54 4.06c3.206 4.117.891 7.962.891 7.962s-4.825-.425-7.03-3.157C7.287 5.896 8.089 1 8.089 1z"/><path fill="#77B255" d="M21.901 1s.913 4.617-1.006 7.47c-2.293 3.41-5.676 2.54-5.676 2.54s-.813-3.784.691-6.106C18.096 1.53 21.901 1 21.901 1z"/><ellipse fill="#5864B7" cx="23.737" cy="11.536" rx="6.916" ry="6.027"/><path fill="#334372" d="M19.34 16.996c0-.851-.124-1.64-.34-2.373 1.231-.409 2 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1fad2.svg b/browser/components/torpreferences/content/bridgemoji/1fad2.svg
new file mode 100644
index 0000000000000..b84ce6a1f4800
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1fad2.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#909B50" d="M13.241 23.993c1.274-1.617 4.455-.891 6.416.535s3.089 4.337 1.901 5.941-4.158 1.96-6.416.416c-2.258-1.545-3.446-4.931-1.901-6.892zm4.455-20.792c2.802.342 3.208 2.97 2.792 5.703-.416 2.733-2.436 5.347-4.693 5.228-2.257-.119-3.149-3.446-2.792-6.238s2.258-4.99 4.693-4.693z"/><path fill="#C1694F" d="M1.3 32.876c-.08 0-.161-.016-.239-.048-.319-.133-.47-.498-.337-.817 2.393-5.756 6.062-8.645 8.72-10.055 1.57-.8 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/1fad6.svg b/browser/components/torpreferences/content/bridgemoji/1fad6.svg
new file mode 100644
index 0000000000000..9e6894dafeee6
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/1fad6.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><ellipse fill="#269" cx="17.5" cy="31.5" rx="8" ry="2"/><path fill="#3B88C3" d="M11.173 31.777s3.297.757 6.371.668c2.539-.074 5.614-.356 6.505-.757 0 0-1.069 1.381-6.416 1.381s-6.46-1.292-6.46-1.292z"/><ellipse fill="#269" cx="17.5" cy="15.25" rx="8.5" ry="2.25"/><path fill="#3B88C3" d="M33.582 16.654c3.518-.202 2.185 1.133 1.072 1.712-.505.262-1.515 1.738-2.098 4.234-.455 1.948-.847 5.658-5.213 5.391-2.994-.183-.045-7.084-.045- [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/23f0.svg b/browser/components/torpreferences/content/bridgemoji/23f0.svg
new file mode 100644
index 0000000000000..ea9ad14316615
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/23f0.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFCC4D" d="M20 6.042c0 1.112-.903 2.014-2 2.014s-2-.902-2-2.014V2.014C16 .901 16.903 0 18 0s2 .901 2 2.014v4.028z"/><path fill="#FFAC33" d="M9.18 36c-.224 0-.452-.052-.666-.159-.736-.374-1.035-1.28-.667-2.027l8.94-18.127c.252-.512.768-.835 1.333-.835s1.081.323 1.333.835l8.941 18.127c.368.747.07 1.653-.666 2.027-.736.372-1.631.07-1.999-.676L18.121 19.74l-7.607 15.425c-.262.529-.788.835-1.334.835z"/><path fill="#58595 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/2600.svg b/browser/components/torpreferences/content/bridgemoji/2600.svg
new file mode 100644
index 0000000000000..8602baef7e5aa
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/2600.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M16 2s0-2 2-2 2 2 2 2v2s0 2-2 2-2-2-2-2V2zm18 14s2 0 2 2-2 2-2 2h-2s-2 0-2-2 2-2 2-2h2zM4 16s2 0 2 2-2 2-2 2H2s-2 0-2-2 2-2 2-2h2zm5.121-8.707s1.414 1.414 0 2.828-2.828 0-2.828 0L4.878 8.708s-1.414-1.414 0-2.829c1.415-1.414 2.829 0 2.829 0l1.414 1.414zm21 21s1.414 1.414 0 2.828-2.828 0-2.828 0l-1.414-1.414s-1.414-1.414 0-2.828 2.828 0 2.828 0l1.414 1.414zm-.413-18.172s-1.414 1.414-2.828 0 0-2.828 0-2.828l [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/2602.svg b/browser/components/torpreferences/content/bridgemoji/2602.svg
new file mode 100644
index 0000000000000..7c633302e7e8f
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/2602.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#66757F" d="M9 28.5c0-.828.672-1.5 1.5-1.5s1.5.672 1.5 1.5v.5s0 3 3 3 3-3 3-3V3.5c0-.829.671-1.5 1.5-1.5s1.5.671 1.5 1.5V29s0 6-6 6-6-6-6-6v-.5z"/><path fill="#744EAA" d="M19.5 4C28.612 4 36 9.82 36 17c0 0 0 2-1 2s-3-2-3-2H7s-2 2-3 2-1-2-1-2C3 9.82 10.387 4 19.5 4z"/><path fill="#9266CC" d="M19.5 4C26.403 4 32 9.82 32 17c0 0 0 2-2 2s-5-2-5-2H14s-3 2-5 2-2-2-2-2C7 9.82 12.596 4 19.5 4z"/><path fill="#744EAA" d="M19.5 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/2604.svg b/browser/components/torpreferences/content/bridgemoji/2604.svg
new file mode 100644
index 0000000000000..07df915c4f9b6
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/2604.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#5DADEC" d="M33.662.049c-1.148-.077-5.869-.75-17.522 6.665C4.488 14.129-1.646 26.609 3.604 33.329c1.104 1.413 5.518 4.283 10.682.53 3.247-2.359 4.242-7.52 7.15-14.434 1.986-4.723 6.444-13.594 12.668-17.611 1.942-.97.22-1.72-.442-1.765z"/><path fill="#8CCAF7" d="M16.625 13.651c-.265-1.059.971-4.281 1.324-5.164-6.437 2.929-12.509 11.616-12.47 13.18.006.227.139.305.42.193 5.398-2.166 8.882 1.07 9.807 3.751.095.274.214.4 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/260e.svg b/browser/components/torpreferences/content/bridgemoji/260e.svg
new file mode 100644
index 0000000000000..e65124faa5485
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/260e.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#BE1931" d="M36 11.5C36 8.462 33 4 18 4S0 8.462 0 11.5c0 .045.019.076.022.119-.012.196-.022.402-.022.631C0 14.873 2.239 16 5 16s5-1.127 5-3.75c0-.218-.021-.412-.051-.597C12.374 11.302 15.102 11 18 11s5.626.302 8.051.653c-.03.185-.051.379-.051.597 0 2.623 2.238 3.75 5 3.75s5-1.127 5-3.75c0-.225-.009-.429-.024-.621.004-.046.024-.08.024-.129z"/><path fill="#DD2E44" d="M34.934 23c-.482-1.031-2.31-4.19-3.968-7.007C29.408 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/2693.svg b/browser/components/torpreferences/content/bridgemoji/2693.svg
new file mode 100644
index 0000000000000..09f3fe4162e12
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/2693.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#269" d="M30.5 18.572L26 25h2.575c-1.13 3.988-4.445 7.05-8.575 7.81V17h3c1.104 0 2-.896 2-2s-.896-2-2-2h-3v-1.349h-4V13h-3c-1.104 0-2 .896-2 2s.896 2 2 2h3v15.81c-4.13-.76-7.445-3.821-8.575-7.81H10l-4.5-6.428L1 25h3.33C5.705 31.289 11.299 36 18 36s12.295-4.711 13.67-11H35l-4.5-6.428z"/><path fill="#269" d="M18 0c-3.314 0-6 2.686-6 6s2.686 6 6 6 6-2.686 6-6-2.686-6-6-6zm0 9c-1.657 0-3-1.343-3-3s1.343-3 3-3 3 1.343 3 3 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/2696.svg b/browser/components/torpreferences/content/bridgemoji/2696.svg
new file mode 100644
index 0000000000000..61af8441c5a75
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/2696.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#66757F" d="M3.923 22.923c-.212.511-.798.751-1.308.539-.51-.213-.751-.798-.539-1.308L6.693 9.616c.212-.51.798-.751 1.307-.539.51.213.751.798.539 1.308L3.923 22.923z"/><path fill="#66757F" d="M13.923 22.154c.212.51-.029 1.095-.539 1.308-.51.212-1.095-.028-1.308-.539L7.461 10.385c-.212-.51.029-1.095.539-1.308.51-.212 1.095.029 1.308.539l4.615 12.538zm10.001.769c-.213.511-.799.751-1.309.539-.51-.213-.75-.798-.538-1.308l [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/26bd.svg b/browser/components/torpreferences/content/bridgemoji/26bd.svg
new file mode 100644
index 0000000000000..f24749cb5eab3
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/26bd.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><circle fill="#F5F8FA" cx="18" cy="18" r="18"/><path d="M18 11c-.552 0-1-.448-1-1V3c0-.552.448-1 1-1s1 .448 1 1v7c0 .552-.448 1-1 1zm-6.583 4.5c-.1 0-.202-.015-.302-.047l-8.041-2.542c-.527-.167-.819-.728-.652-1.255.166-.527.73-.818 1.255-.652l8.042 2.542c.527.167.819.729.652 1.255-.136.426-.53.699-.954.699zm13.625-.291c-.434 0-.833-.285-.96-.722-.154-.531.151-1.085.682-1.239l6.75-1.958c.531-.153 1.085.153 1.238.682.154.531-.151 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/26f2.svg b/browser/components/torpreferences/content/bridgemoji/26f2.svg
new file mode 100644
index 0000000000000..659c22850c5d3
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/26f2.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#99AAB5" d="M1 22.923v6.538C1 33.073 8.611 36 18 36s17-2.927 17-6.538v-6.538H1z"/><ellipse fill="#E1E8ED" cx="18" cy="22.923" rx="17" ry="6.538"/><path fill="#AAB8C2" d="M18 20.308c6.7 0 12.314 1.668 13.913 3.923.297-.419.472-.855.472-1.308 0-2.889-6.44-5.231-14.385-5.231S3.615 20.034 3.615 22.923c0 .452.175.889.472 1.308C5.686 21.976 11.3 20.308 18 20.308z"/><ellipse fill="#3B88C3" cx="18" cy="24.231" rx="13.913" ry [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/26f5.svg b/browser/components/torpreferences/content/bridgemoji/26f5.svg
new file mode 100644
index 0000000000000..c76c0dedfb1f1
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/26f5.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#A7A9AC" d="M20 26c0 .553-.447 1-1 1-.552 0-1-.447-1-1V1c0-.552.448-1 1-1 .553 0 1 .448 1 1v25z"/><path fill="#D1D3D4" d="M3 24h31v8H12c-6 0-9-8-9-8z"/><path fill="#55ACEE" d="M0 30h36v6H0z"/><path fill="#FFAC33" d="M5 22s2-5 5-9 8-8 8-8-1 11-1 16v1s-3-1-6-1-6 1-6 1z"/><path fill="#F4900C" d="M20 2s6 6 9 11c2.771 4.618 4 9 4 9s-3-1-6-1-6 1-6 1v-1c0-9-1-19-1-19z"/><path fill="#E6E7E8" d="M2 24c-.552 0-1 .447-1 1s.448 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/2708.svg b/browser/components/torpreferences/content/bridgemoji/2708.svg
new file mode 100644
index 0000000000000..ebce3afbc7832
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/2708.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#66757F" d="M30 23.828c-.391.392-1.023.392-1.414 0l-1.414-1.414c-.392-.391-.392-1.024 0-1.414L30 18.172c.391-.391 1.023-.391 1.414 0l1.414 1.414c.392.391.392 1.024 0 1.414L30 23.828zm-15-15c-.391.392-1.023.392-1.414 0l-1.414-1.414c-.392-.391-.392-1.023 0-1.414L15 3.172c.391-.391 1.023-.391 1.414 0l1.414 1.414c.392.391.392 1.023 0 1.414L15 8.828z"/><path fill="#55ACEE" d="M2 22c2 0 11 1 11 1s1 9 1 11-2 2-3 1-4-6-4-6-5 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/270f.svg b/browser/components/torpreferences/content/bridgemoji/270f.svg
new file mode 100644
index 0000000000000..a9b69e1b29529
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/270f.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D99E82" d="M35.222 33.598c-.647-2.101-1.705-6.059-2.325-7.566-.501-1.216-.969-2.438-1.544-3.014-.575-.575-1.553-.53-2.143.058 0 0-2.469 1.675-3.354 2.783-1.108.882-2.785 3.357-2.785 3.357-.59.59-.635 1.567-.06 2.143.576.575 1.798 1.043 3.015 1.544 1.506.62 5.465 1.676 7.566 2.325.359.11 1.74-1.271 1.63-1.63z"/><path fill="#EA596E" d="M13.643 5.308c1.151 1.151 1.151 3.016 0 4.167l-4.167 4.168c-1.151 1.15-3.018 1.15-4 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/2728.svg b/browser/components/torpreferences/content/bridgemoji/2728.svg
new file mode 100644
index 0000000000000..347ad12abbd7b
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/2728.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFAC33" d="M34.347 16.893l-8.899-3.294-3.323-10.891c-.128-.42-.517-.708-.956-.708-.439 0-.828.288-.956.708l-3.322 10.891-8.9 3.294c-.393.146-.653.519-.653.938 0 .418.26.793.653.938l8.895 3.293 3.324 11.223c.126.424.516.715.959.715.442 0 .833-.291.959-.716l3.324-11.223 8.896-3.293c.391-.144.652-.518.652-.937 0-.418-.261-.792-.653-.938z"/><path fill="#FFCC4D" d="M14.347 27.894l-2.314-.856-.9-3.3c-.118-.436-.513-.738-. [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/bridgemoji/2744.svg b/browser/components/torpreferences/content/bridgemoji/2744.svg
new file mode 100644
index 0000000000000..258c161bb9bb8
--- /dev/null
+++ b/browser/components/torpreferences/content/bridgemoji/2744.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#88C9F9" d="M19 27.586V8.415l4.828-4.829s.707-.707 0-1.415c-.707-.707-1.414 0-1.414 0L19 5.586V1s0-1-1-1-1 1-1 1v4.586l-3.414-3.415s-.707-.707-1.414 0c-.707.708 0 1.415 0 1.415L17 8.415v19.171l-4.828 4.828s-.707.707 0 1.414 1.414 0 1.414 0L17 30.414V35s0 1 1 1 1-1 1-1v-4.586l3.414 3.414s.707.707 1.414 0 0-1.414 0-1.414L19 27.586z"/><path fill="#88C9F9" d="M34.622 20.866c-.259-.966-1.225-.707-1.225-.707l-6.595 1.767-1 [...]
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/builtinBridgeDialog.jsm b/browser/components/torpreferences/content/builtinBridgeDialog.jsm
new file mode 100644
index 0000000000000..5b5e1560cd466
--- /dev/null
+++ b/browser/components/torpreferences/content/builtinBridgeDialog.jsm
@@ -0,0 +1,120 @@
+"use strict";
+
+var EXPORTED_SYMBOLS = ["BuiltinBridgeDialog"];
+
+const { TorStrings } = ChromeUtils.import("resource:///modules/TorStrings.jsm");
+
+const {
+ TorSettings,
+ TorBridgeSource,
+ TorBuiltinBridgeTypes,
+} = ChromeUtils.import("resource:///modules/TorSettings.jsm");
+
+class BuiltinBridgeDialog {
+ constructor() {
+ this._dialog = null;
+ this._bridgeType = "";
+ }
+
+ static get selectors() {
+ return {
+ header: "#torPreferences-builtinBridge-header",
+ description: "#torPreferences-builtinBridge-description",
+ radiogroup: "#torPreferences-builtinBridge-typeSelection",
+ obfsRadio: "#torPreferences-builtinBridges-radioObfs",
+ obfsDescr: "#torPreferences-builtinBridges-descrObfs",
+ snowflakeRadio: "#torPreferences-builtinBridges-radioSnowflake",
+ snowflakeDescr: "#torPreferences-builtinBridges-descrSnowflake",
+ meekAzureRadio: "#torPreferences-builtinBridges-radioMeekAzure",
+ meekAzureDescr: "#torPreferences-builtinBridges-descrMeekAzure",
+ };
+ }
+
+ _populateXUL(window, aDialog) {
+ const selectors = BuiltinBridgeDialog.selectors;
+
+ this._dialog = aDialog;
+ const dialogWin = this._dialog.parentElement;
+ dialogWin.setAttribute("title", TorStrings.settings.builtinBridgeTitle);
+
+ this._dialog.querySelector(selectors.header).textContent =
+ TorStrings.settings.builtinBridgeHeader;
+ this._dialog.querySelector(selectors.description).textContent =
+ TorStrings.settings.builtinBridgeDescription;
+ let radioGroup = this._dialog.querySelector(selectors.radiogroup);
+
+ let types = {
+ obfs4: {
+ elemRadio: this._dialog.querySelector(selectors.obfsRadio),
+ elemDescr: this._dialog.querySelector(selectors.obfsDescr),
+ label: TorStrings.settings.builtinBridgeObfs4,
+ descr: TorStrings.settings.builtinBridgeObfs4Description,
+ },
+ snowflake: {
+ elemRadio: this._dialog.querySelector(selectors.snowflakeRadio),
+ elemDescr: this._dialog.querySelector(selectors.snowflakeDescr),
+ label: TorStrings.settings.builtinBridgeSnowflake,
+ descr: TorStrings.settings.builtinBridgeSnowflakeDescription,
+ },
+ "meek-azure": {
+ elemRadio: this._dialog.querySelector(selectors.meekAzureRadio),
+ elemDescr: this._dialog.querySelector(selectors.meekAzureDescr),
+ label: TorStrings.settings.builtinBridgeMeekAzure,
+ descr: TorStrings.settings.builtinBridgeMeekAzureDescription,
+ },
+ };
+
+ TorBuiltinBridgeTypes.forEach(type => {
+ types[type].elemRadio.setAttribute("label", types[type].label);
+ types[type].elemRadio.setAttribute("hidden", "false");
+ types[type].elemDescr.textContent = types[type].descr;
+ types[type].elemDescr.removeAttribute("hidden");
+ });
+
+ if (
+ TorSettings.bridges.enabled &&
+ TorSettings.bridges.source == TorBridgeSource.BuiltIn
+ ) {
+ radioGroup.selectedItem =
+ types[TorSettings.bridges.builtin_type]?.elemRadio;
+ this._bridgeType = TorSettings.bridges.builtin_type;
+ } else {
+ radioGroup.selectedItem = null;
+ this._bridgeType = "";
+ }
+
+ this._dialog.addEventListener("dialogaccept", e => {
+ this._bridgeType = radioGroup.value;
+ });
+ this._dialog.addEventListener("dialoghelp", e => {
+ window.top.openTrustedLinkIn(
+ TorStrings.settings.learnMoreCircumventionURL,
+ "tab"
+ );
+ });
+
+ // Hack: see the CSS
+ this._dialog.style.minWidth = '0';
+ this._dialog.style.minHeight = '0';
+ }
+
+ init(window, aDialog) {
+ // defer to later until firefox has populated the dialog with all our elements
+ window.setTimeout(() => {
+ this._populateXUL(window, aDialog);
+ }, 0);
+ }
+
+ openDialog(gSubDialog, aCloseCallback) {
+ gSubDialog.open(
+ "chrome://browser/content/torpreferences/builtinBridgeDialog.xhtml",
+ {
+ features: "resizable=yes",
+ closingCallback: () => {
+ aCloseCallback(this._bridgeType);
+ },
+ },
+ this
+ );
+ }
+}
diff --git a/browser/components/torpreferences/content/builtinBridgeDialog.xhtml b/browser/components/torpreferences/content/builtinBridgeDialog.xhtml
new file mode 100644
index 0000000000000..61c6110f327a7
--- /dev/null
+++ b/browser/components/torpreferences/content/builtinBridgeDialog.xhtml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
+<?xml-stylesheet href="chrome://browser/skin/preferences/preferences.css"?>
+<?xml-stylesheet href="chrome://browser/content/torpreferences/torPreferences.css"?>
+
+<window type="child"
+ xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+ xmlns:html="http://www.w3.org/1999/xhtml">
+<dialog id="torPreferences-builtinBridge-dialog"
+ buttons="help,accept,cancel">
+ <html:h3 id="torPreferences-builtinBridge-header"></html:h3>
+ <description>
+ <html:div id="torPreferences-builtinBridge-description"><br/></html:div>
+ </description>
+ <radiogroup id="torPreferences-builtinBridge-typeSelection">
+ <radio id="torPreferences-builtinBridges-radioObfs" value="obfs4" hidden="true"/>
+ <html:div id="torPreferences-builtinBridges-descrObfs" class="indent" hidden="true"></html:div>
+ <radio id="torPreferences-builtinBridges-radioSnowflake" value="snowflake" hidden="true"/>
+ <html:div id="torPreferences-builtinBridges-descrSnowflake" class="indent" hidden="true"></html:div>
+ <radio id="torPreferences-builtinBridges-radioMeekAzure" value="meek-azure" hidden="true"/>
+ <html:div id="torPreferences-builtinBridges-descrMeekAzure" class="indent" hidden="true"></html:div>
+ </radiogroup>
+ <script type="application/javascript"><![CDATA[
+ "use strict";
+
+ let builtinBridgeDialog = window.arguments[0];
+ let dialog = document.getElementById("torPreferences-builtinBridge-dialog");
+ builtinBridgeDialog.init(window, dialog);
+ ]]></script>
+</dialog>
+</window>
diff --git a/browser/components/torpreferences/content/check.svg b/browser/components/torpreferences/content/check.svg
new file mode 100644
index 0000000000000..34b90800c71b9
--- /dev/null
+++ b/browser/components/torpreferences/content/check.svg
@@ -0,0 +1,3 @@
+<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M6.02301 13L1.18301 8.16099C1.07063 8.04262 1.00892 7.88505 1.01104 7.72185C1.01316 7.55865 1.07893 7.40273 1.19434 7.28732C1.30975 7.17191 1.46567 7.10613 1.62887 7.10402C1.79207 7.1019 1.94964 7.16361 2.06801 7.27599L6.37501 11.584L13.934 4.02299C14.0517 3.90617 14.2107 3.84061 14.3765 3.84061C14.5423 3.84061 14.7014 3.90617 14.819 4.02299C14.9358 4.14063 15.0014 4.29969 15.0014 4.46549C15.0014 4.63128 14.9358 4.79034 14.819 4.90799L6.72901 12.998L6.02301 13Z" fill="context-fill"/>
+</svg>
diff --git a/browser/components/torpreferences/content/connectionCategory.inc.xhtml b/browser/components/torpreferences/content/connectionCategory.inc.xhtml
new file mode 100644
index 0000000000000..15cf24cfe6950
--- /dev/null
+++ b/browser/components/torpreferences/content/connectionCategory.inc.xhtml
@@ -0,0 +1,9 @@
+<richlistitem id="category-connection"
+ class="category"
+ value="paneConnection"
+ helpTopic="prefs-connection"
+ align="center"
+ hidden="true">
+ <image class="category-icon"/>
+ <label id="torPreferences-labelCategory" class="category-name" flex="1" value="Connection"/>
+</richlistitem>
diff --git a/browser/components/torpreferences/content/connectionPane.js b/browser/components/torpreferences/content/connectionPane.js
new file mode 100644
index 0000000000000..e3125c850708e
--- /dev/null
+++ b/browser/components/torpreferences/content/connectionPane.js
@@ -0,0 +1,1163 @@
+"use strict";
+
+/* global Services, gSubDialog */
+
+const { setTimeout, clearTimeout } = ChromeUtils.import(
+ "resource://gre/modules/Timer.jsm"
+);
+
+const {
+ TorSettings,
+ TorSettingsTopics,
+ TorSettingsData,
+ TorBridgeSource,
+} = ChromeUtils.import("resource:///modules/TorSettings.jsm");
+
+const { TorProtocolService } = ChromeUtils.import(
+ "resource:///modules/TorProtocolService.jsm"
+);
+
+const {
+ TorConnect,
+ TorConnectTopics,
+ TorConnectState,
+ TorCensorshipLevel,
+} = ChromeUtils.import("resource:///modules/TorConnect.jsm");
+
+const { TorLogDialog } = ChromeUtils.import(
+ "chrome://browser/content/torpreferences/torLogDialog.jsm"
+);
+
+const { ConnectionSettingsDialog } = ChromeUtils.import(
+ "chrome://browser/content/torpreferences/connectionSettingsDialog.jsm"
+);
+
+const { BridgeQrDialog } = ChromeUtils.import(
+ "chrome://browser/content/torpreferences/bridgeQrDialog.jsm"
+);
+
+const { BuiltinBridgeDialog } = ChromeUtils.import(
+ "chrome://browser/content/torpreferences/builtinBridgeDialog.jsm"
+);
+
+const { RequestBridgeDialog } = ChromeUtils.import(
+ "chrome://browser/content/torpreferences/requestBridgeDialog.jsm"
+);
+
+const { ProvideBridgeDialog } = ChromeUtils.import(
+ "chrome://browser/content/torpreferences/provideBridgeDialog.jsm"
+);
+
+const { MoatRPC } = ChromeUtils.import("resource:///modules/Moat.jsm");
+
+const { QRCode } = ChromeUtils.import("resource://gre/modules/QRCode.jsm");
+
+ChromeUtils.defineModuleGetter(
+ this,
+ "TorStrings",
+ "resource:///modules/TorStrings.jsm"
+);
+
+const InternetStatus = Object.freeze({
+ Unknown: 0,
+ Online: 1,
+ Offline: -1,
+});
+
+/*
+ Connection Pane
+
+ Code for populating the XUL in about:preferences#connection, handling input events, interfacing with tor-launcher
+*/
+const gConnectionPane = (function() {
+ /* CSS selectors for all of the Tor Network DOM elements we need to access */
+ const selectors = {
+ category: {
+ title: "label#torPreferences-labelCategory",
+ },
+ messageBox: {
+ box: "div#torPreferences-connectMessageBox",
+ message: "td#torPreferences-connectMessageBox-message",
+ button: "button#torPreferences-connectMessageBox-button",
+ },
+ torPreferences: {
+ header: "h1#torPreferences-header",
+ description: "span#torPreferences-description",
+ learnMore: "label#torPreferences-learnMore",
+ },
+ status: {
+ internetLabel: "#torPreferences-status-internet-label",
+ internetTest: "#torPreferences-status-internet-test",
+ internetIcon: "#torPreferences-status-internet-statusIcon",
+ internetStatus: "#torPreferences-status-internet-status",
+ torLabel: "#torPreferences-status-tor-label",
+ torIcon: "#torPreferences-status-tor-statusIcon",
+ torStatus: "#torPreferences-status-tor-status",
+ },
+ quickstart: {
+ header: "h2#torPreferences-quickstart-header",
+ description: "span#torPreferences-quickstart-description",
+ enableQuickstartCheckbox: "checkbox#torPreferences-quickstart-toggle",
+ },
+ bridges: {
+ header: "h1#torPreferences-bridges-header",
+ description: "span#torPreferences-bridges-description",
+ learnMore: "label#torPreferences-bridges-learnMore",
+ locationGroup: "#torPreferences-bridges-locationGroup",
+ locationLabel: "#torPreferences-bridges-locationLabel",
+ location: "#torPreferences-bridges-location",
+ locationEntries: "#torPreferences-bridges-locationEntries",
+ chooseForMe: "#torPreferences-bridges-buttonChooseBridgeForMe",
+ currentHeader: "#torPreferences-currentBridges-header",
+ currentHeaderText: "#torPreferences-currentBridges-headerText",
+ currentDescription: "#torPreferences-currentBridges-description",
+ currentDescriptionText: "#torPreferences-currentBridges-descriptionText",
+ switch: "#torPreferences-currentBridges-switch",
+ cards: "#torPreferences-currentBridges-cards",
+ cardTemplate: "#torPreferences-bridgeCard-template",
+ card: ".torPreferences-bridgeCard",
+ cardId: ".torPreferences-bridgeCard-id",
+ cardHeadingAddr: ".torPreferences-bridgeCard-headingAddr",
+ cardConnectedLabel: ".torPreferences-bridgeCard-connectedLabel",
+ cardOptions: ".torPreferences-bridgeCard-options",
+ cardMenu: "#torPreferences-bridgeCard-menu",
+ cardQrGrid: ".torPreferences-bridgeCard-grid",
+ cardQrContainer: ".torPreferences-bridgeCard-qr",
+ cardQr: ".torPreferences-bridgeCard-qrCode",
+ cardShare: ".torPreferences-bridgeCard-share",
+ cardAddr: ".torPreferences-bridgeCard-addr",
+ cardLearnMore: ".torPreferences-bridgeCard-learnMore",
+ cardCopy: ".torPreferences-bridgeCard-copyButton",
+ showAll: "#torPreferences-currentBridges-showAll",
+ removeAll: "#torPreferences-currentBridges-removeAll",
+ addHeader: "#torPreferences-addBridge-header",
+ addBuiltinLabel: "#torPreferences-addBridge-labelBuiltinBridge",
+ addBuiltinButton: "#torPreferences-addBridge-buttonBuiltinBridge",
+ requestLabel: "#torPreferences-addBridge-labelRequestBridge",
+ requestButton: "#torPreferences-addBridge-buttonRequestBridge",
+ enterLabel: "#torPreferences-addBridge-labelEnterBridge",
+ enterButton: "#torPreferences-addBridge-buttonEnterBridge",
+ removeOverlay: "#bridge-remove-overlay",
+ removeModal: "#bridge-remove-modal",
+ removeDismiss: "#bridge-remove-dismiss",
+ removeQuestion: "#bridge-remove-question",
+ removeWarning: "#bridge-remove-warning",
+ removeConfirm: "#bridge-remove-confirm",
+ removeCancel: "#bridge-remove-cancel",
+ },
+ advanced: {
+ header: "h1#torPreferences-advanced-header",
+ label: "#torPreferences-advanced-label",
+ button: "#torPreferences-advanced-button",
+ torLogsLabel: "label#torPreferences-torLogs",
+ torLogsButton: "button#torPreferences-buttonTorLogs",
+ },
+ }; /* selectors */
+
+ let retval = {
+ // cached frequently accessed DOM elements
+ _enableQuickstartCheckbox: null,
+
+ _internetStatus: InternetStatus.Unknown,
+
+ _controller: null,
+
+ _currentBridge: "",
+
+ // disables the provided list of elements
+ _setElementsDisabled(elements, disabled) {
+ for (let currentElement of elements) {
+ currentElement.disabled = disabled;
+ }
+ },
+
+ // populate xul with strings and cache the relevant elements
+ _populateXUL() {
+ // saves tor settings to disk when navigate away from about:preferences
+ window.addEventListener("blur", val => {
+ TorProtocolService.flushSettings();
+ });
+
+ document
+ .querySelector(selectors.category.title)
+ .setAttribute("value", TorStrings.settings.categoryTitle);
+
+ let prefpane = document.getElementById("mainPrefPane");
+
+ // 'Connect to Tor' Message Bar
+
+ const messageBox = prefpane.querySelector(selectors.messageBox.box);
+ const messageBoxMessage = prefpane.querySelector(
+ selectors.messageBox.message
+ );
+ const messageBoxButton = prefpane.querySelector(
+ selectors.messageBox.button
+ );
+ // wire up connect button
+ messageBoxButton.addEventListener("click", () => {
+ TorConnect.beginBootstrap();
+ TorConnect.openTorConnect();
+ });
+
+ this._populateMessagebox = () => {
+ if (
+ TorConnect.shouldShowTorConnect &&
+ TorConnect.state === TorConnectState.Configuring
+ ) {
+ // set messagebox style and text
+ if (TorProtocolService.torBootstrapErrorOccurred()) {
+ messageBox.parentNode.style.display = null;
+ messageBox.className = "error";
+ messageBoxMessage.innerText = TorStrings.torConnect.tryAgainMessage;
+ messageBoxButton.innerText = TorStrings.torConnect.tryAgain;
+ } else {
+ messageBox.parentNode.style.display = null;
+ messageBox.className = "warning";
+ messageBoxMessage.innerText = TorStrings.torConnect.connectMessage;
+ messageBoxButton.innerText = TorStrings.torConnect.torConnectButton;
+ }
+ } else {
+ // we need to explicitly hide the groupbox, as switching between
+ // the tor pane and other panes will 'unhide' (via the 'hidden'
+ // attribute) the groupbox, offsetting all of the content down
+ // by the groupbox's margin (even if content is 0 height)
+ messageBox.parentNode.style.display = "none";
+ messageBox.className = "hidden";
+ messageBoxMessage.innerText = "";
+ messageBoxButton.innerText = "";
+ }
+ };
+ this._populateMessagebox();
+
+ // Heading
+ prefpane.querySelector(selectors.torPreferences.header).innerText =
+ TorStrings.settings.categoryTitle;
+ prefpane.querySelector(selectors.torPreferences.description).textContent =
+ TorStrings.settings.torPreferencesDescription;
+ {
+ let learnMore = prefpane.querySelector(
+ selectors.torPreferences.learnMore
+ );
+ learnMore.setAttribute("value", TorStrings.settings.learnMore);
+ learnMore.setAttribute(
+ "href",
+ TorStrings.settings.learnMoreTorBrowserURL
+ );
+ if (TorStrings.settings.learnMoreTorBrowserURL.startsWith("about:")) {
+ learnMore.setAttribute("useoriginprincipal", "true");
+ }
+ }
+
+ // Internet and Tor status
+ prefpane.querySelector(selectors.status.internetLabel).textContent =
+ TorStrings.settings.statusInternetLabel;
+ prefpane.querySelector(selectors.status.torLabel).textContent =
+ TorStrings.settings.statusTorLabel;
+ const internetTest = prefpane.querySelector(
+ selectors.status.internetTest
+ );
+ internetTest.setAttribute(
+ "label",
+ TorStrings.settings.statusInternetTest
+ );
+ internetTest.addEventListener("command", () => {
+ this.onInternetTest();
+ });
+ const internetIcon = prefpane.querySelector(
+ selectors.status.internetIcon
+ );
+ const internetStatus = prefpane.querySelector(
+ selectors.status.internetStatus
+ );
+ const torIcon = prefpane.querySelector(selectors.status.torIcon);
+ const torStatus = prefpane.querySelector(selectors.status.torStatus);
+ this._populateStatus = () => {
+ switch (this._internetStatus) {
+ case InternetStatus.Unknown:
+ internetTest.removeAttribute("hidden");
+ break;
+ case InternetStatus.Online:
+ internetTest.setAttribute("hidden", "true");
+ internetIcon.className = "online";
+ internetStatus.textContent =
+ TorStrings.settings.statusInternetOnline;
+ break;
+ case InternetStatus.Offline:
+ internetTest.setAttribute("hidden", "true");
+ internetIcon.className = "offline";
+ internetStatus.textContent =
+ TorStrings.settings.statusInternetOffline;
+ break;
+ }
+ if (TorConnect.state === TorConnectState.Bootstrapped) {
+ torIcon.className = "connected";
+ torStatus.textContent = TorStrings.settings.statusTorConnected;
+ } else if (TorConnect.hasBootstrapEverFailed) {
+ torIcon.className = "blocked";
+ torStatus.textContent = TorStrings.settings.statusTorBlocked;
+ } else {
+ torIcon.className = "";
+ torStatus.textContent = TorStrings.settings.statusTorNotConnected;
+ }
+ };
+ this._populateStatus();
+
+ // Quickstart
+ prefpane.querySelector(selectors.quickstart.header).innerText =
+ TorStrings.settings.quickstartHeading;
+ prefpane.querySelector(selectors.quickstart.description).textContent =
+ TorStrings.settings.quickstartDescription;
+
+ this._enableQuickstartCheckbox = prefpane.querySelector(
+ selectors.quickstart.enableQuickstartCheckbox
+ );
+ this._enableQuickstartCheckbox.setAttribute(
+ "label",
+ TorStrings.settings.quickstartCheckbox
+ );
+ this._enableQuickstartCheckbox.addEventListener("command", e => {
+ const checked = this._enableQuickstartCheckbox.checked;
+ TorSettings.quickstart.enabled = checked;
+ TorSettings.saveToPrefs().applySettings();
+ });
+ this._enableQuickstartCheckbox.checked = TorSettings.quickstart.enabled;
+ Services.obs.addObserver(this, TorSettingsTopics.SettingChanged);
+
+ // Bridge setup
+ prefpane.querySelector(selectors.bridges.header).innerText =
+ TorStrings.settings.bridgesHeading;
+ prefpane.querySelector(selectors.bridges.description).textContent =
+ TorStrings.settings.bridgesDescription;
+ {
+ let learnMore = prefpane.querySelector(selectors.bridges.learnMore);
+ learnMore.setAttribute("value", TorStrings.settings.learnMore);
+ learnMore.setAttribute("href", TorStrings.settings.learnMoreBridgesURL);
+ if (TorStrings.settings.learnMoreBridgesURL.startsWith("about:")) {
+ learnMore.setAttribute("useoriginprincipal", "true");
+ }
+ }
+
+ // Location
+ {
+ const locationGroup = prefpane.querySelector(
+ selectors.bridges.locationGroup
+ );
+ prefpane.querySelector(selectors.bridges.locationLabel).textContent =
+ TorStrings.settings.bridgeLocation;
+ const location = prefpane.querySelector(selectors.bridges.location);
+ const locationEntries = prefpane.querySelector(
+ selectors.bridges.locationEntries
+ );
+ const chooseForMe = prefpane.querySelector(
+ selectors.bridges.chooseForMe
+ );
+ chooseForMe.setAttribute(
+ "label",
+ TorStrings.settings.bridgeChooseForMe
+ );
+ chooseForMe.addEventListener("command", e => {
+ TorConnect.beginAutoBootstrap(location.value);
+ });
+ this._populateLocations = () => {
+ const currentValue = location.value;
+ locationEntries.textContent = "";
+ const createItem = (value, label, disabled) => {
+ const item = document.createXULElement("menuitem");
+ item.setAttribute("value", value);
+ item.setAttribute("label", label);
+ if (disabled) {
+ item.setAttribute("disabled", "true");
+ }
+ return item;
+ };
+ const addLocations = codes => {
+ const items = [];
+ for (const code of codes) {
+ items.push(
+ createItem(
+ code,
+ TorConnect.countryNames[code]
+ ? TorConnect.countryNames[code]
+ : code
+ )
+ );
+ }
+ items.sort((left, right) => left.label.localeCompare(right.label));
+ locationEntries.append(...items);
+ };
+ locationEntries.append(
+ createItem("", TorStrings.settings.bridgeLocationAutomatic)
+ );
+ if (TorConnect.countryCodes.length) {
+ locationEntries.append(
+ createItem("", TorStrings.settings.bridgeLocationFrequent, true)
+ );
+ addLocations(TorConnect.countryCodes);
+ locationEntries.append(
+ createItem("", TorStrings.settings.bridgeLocationOther, true)
+ );
+ }
+ addLocations(Object.keys(TorConnect.countryNames));
+ location.value = currentValue;
+ };
+ this._showAutoconfiguration = () => {
+ if (
+ !TorConnect.shouldShowTorConnect ||
+ !TorProtocolService.torBootstrapErrorOccurred()
+ ) {
+ locationGroup.setAttribute("hidden", "true");
+ return;
+ }
+ // Populate locations, even though we will show only the automatic
+ // item for a moment. In my opinion showing the button immediately is
+ // better then waiting for the Moat query to finish (after a while)
+ // and showing the controls only after that.
+ this._populateLocations();
+ locationGroup.removeAttribute("hidden");
+ if (!TorConnect.countryCodes.length) {
+ TorConnect.getCountryCodes().then(() => this._populateLocations());
+ }
+ };
+ this._showAutoconfiguration();
+ }
+
+ // Bridge cards
+ const bridgeHeader = prefpane.querySelector(
+ selectors.bridges.currentHeader
+ );
+ bridgeHeader.querySelector(
+ selectors.bridges.currentHeaderText
+ ).textContent = TorStrings.settings.bridgeCurrent;
+ const bridgeSwitch = bridgeHeader.querySelector(selectors.bridges.switch);
+ bridgeSwitch.addEventListener("change", () => {
+ TorSettings.bridges.enabled = bridgeSwitch.checked;
+ TorSettings.saveToPrefs();
+ TorSettings.applySettings().then(result => {
+ this._populateBridgeCards();
+ });
+ });
+ const bridgeDescription = prefpane.querySelector(
+ selectors.bridges.currentDescription
+ );
+ bridgeDescription.querySelector(
+ selectors.bridges.currentDescriptionText
+ ).textContent = TorStrings.settings.bridgeCurrentDescription;
+ const bridgeTemplate = prefpane.querySelector(
+ selectors.bridges.cardTemplate
+ );
+ {
+ const learnMore = bridgeTemplate.querySelector(
+ selectors.bridges.cardLearnMore
+ );
+ learnMore.setAttribute("value", TorStrings.settings.learnMore);
+ learnMore.setAttribute(
+ "href",
+ TorStrings.settings.learnMoreBridgesCardURL
+ );
+ if (TorStrings.settings.learnMoreBridgesCardURL.startsWith("about:")) {
+ learnMore.setAttribute("useoriginprincipal", "true");
+ }
+ }
+ bridgeTemplate.querySelector(
+ selectors.bridges.cardConnectedLabel
+ ).textContent = TorStrings.settings.statusTorConnected;
+ bridgeTemplate
+ .querySelector(selectors.bridges.cardCopy)
+ .setAttribute("label", TorStrings.settings.bridgeCopy);
+ bridgeTemplate.querySelector(selectors.bridges.cardShare).textContent =
+ TorStrings.settings.bridgeShare;
+ const bridgeCards = prefpane.querySelector(selectors.bridges.cards);
+ const bridgeMenu = prefpane.querySelector(selectors.bridges.cardMenu);
+
+ let emojiAnnotations;
+ this._addBridgeCard = bridgeString => {
+ const card = bridgeTemplate.cloneNode(true);
+ card.removeAttribute("id");
+ const grid = card.querySelector(selectors.bridges.cardQrGrid);
+ card.addEventListener("click", e => {
+ if (
+ card.classList.contains("currently-connected") ||
+ bridgeCards.classList.contains("single-card")
+ ) {
+ return;
+ }
+ let target = e.target;
+ let apply = true;
+ while (target !== null && target !== card && apply) {
+ // Deal with mixture of "command" and "click" events
+ apply = !target.classList?.contains("stop-click");
+ target = target.parentElement;
+ }
+ if (apply) {
+ if (card.classList.toggle("expanded")) {
+ grid.classList.add("to-animate");
+ grid.style.height = `${grid.scrollHeight}px`;
+ } else {
+ // Be sure we still have the to-animate class
+ grid.classList.add("to-animate");
+ grid.style.height = "";
+ }
+ }
+ });
+ const emojis = makeBridgeId(bridgeString).map(e => {
+ const img = document.createElement("img");
+ const cp = e.codePointAt(0).toString(16);
+ img.setAttribute(
+ "src",
+ `chrome://browser/content/torpreferences/bridgemoji/${cp}.svg`
+ );
+ img.setAttribute("alt", e);
+ img.setAttribute("title", emojiAnnotations[e]);
+ img.className = "emoji";
+ return img;
+ });
+ const idString = TorStrings.settings.bridgeId;
+ const id = card.querySelector(selectors.bridges.cardId);
+ const details = parseBridgeLine(bridgeString);
+ if (details && details.id !== undefined) {
+ card.setAttribute("data-bridge-id", details.id);
+ }
+ // TODO: properly handle "vanilla" bridges?
+ const type =
+ details && details.transport !== undefined
+ ? details.transport
+ : "vanilla";
+ for (const piece of idString.split(/(#[12])/)) {
+ if (piece == "#1") {
+ id.append(type);
+ } else if (piece == "#2") {
+ id.append(...emojis);
+ } else {
+ id.append(piece);
+ }
+ }
+ card.querySelector(
+ selectors.bridges.cardHeadingAddr
+ ).textContent = bridgeString;
+ const optionsButton = card.querySelector(selectors.bridges.cardOptions);
+ if (TorSettings.bridges.source === TorBridgeSource.BuiltIn) {
+ optionsButton.setAttribute("hidden", "true");
+ } else {
+ // Cloning the menupopup element does not work as expected.
+ // Therefore, we use only one, and just before opening it, we remove
+ // its previous items, and add the ones relative to the bridge whose
+ // button has been pressed.
+ optionsButton.addEventListener("click", () => {
+ const menuItem = document.createXULElement("menuitem");
+ menuItem.setAttribute("label", TorStrings.settings.remove);
+ menuItem.classList.add("menuitem-iconic");
+ menuItem.image = "chrome://global/skin/icons/delete.svg";
+ menuItem.addEventListener("command", e => {
+ const strings = TorSettings.bridges.bridge_strings;
+ const index = strings.indexOf(bridgeString);
+ if (index !== -1) {
+ strings.splice(index, 1);
+ }
+ TorSettings.bridges.enabled =
+ bridgeSwitch.checked && !!strings.length;
+ TorSettings.bridges.bridge_strings = strings.join("\n");
+ TorSettings.saveToPrefs();
+ TorSettings.applySettings().then(result => {
+ this._populateBridgeCards();
+ });
+ });
+ if (bridgeMenu.firstChild) {
+ bridgeMenu.firstChild.remove();
+ }
+ bridgeMenu.append(menuItem);
+ bridgeMenu.openPopup(optionsButton, {
+ position: "bottomleft topleft",
+ });
+ });
+ }
+ const bridgeAddr = card.querySelector(selectors.bridges.cardAddr);
+ bridgeAddr.setAttribute("value", bridgeString);
+ const bridgeCopy = card.querySelector(selectors.bridges.cardCopy);
+ let restoreTimeout = null;
+ bridgeCopy.addEventListener("command", e => {
+ this.onCopyBridgeAddress(bridgeAddr);
+ const label = bridgeCopy.querySelector("label");
+ label.setAttribute("value", TorStrings.settings.copied);
+ bridgeCopy.classList.add("primary");
+
+ const RESTORE_TIME = 1200;
+ if (restoreTimeout !== null) {
+ clearTimeout(restoreTimeout);
+ }
+ restoreTimeout = setTimeout(() => {
+ label.setAttribute("value", TorStrings.settings.bridgeCopy);
+ bridgeCopy.classList.remove("primary");
+ restoreTimeout = null;
+ }, RESTORE_TIME);
+ });
+ if (details && details.id === this._currentBridge) {
+ card.classList.add("currently-connected");
+ bridgeCards.prepend(card);
+ } else {
+ bridgeCards.append(card);
+ }
+ // Add the QR only after appending the card, to have the computed style
+ try {
+ const container = card.querySelector(selectors.bridges.cardQr);
+ const style = getComputedStyle(container);
+ const width = style.width.substring(0, style.width.length - 2);
+ const height = style.height.substring(0, style.height.length - 2);
+ new QRCode(container, {
+ text: bridgeString,
+ width,
+ height,
+ colorDark: style.color,
+ colorLight: style.backgroundColor,
+ document,
+ });
+ container.parentElement.addEventListener("click", () => {
+ this.onShowQr(bridgeString);
+ });
+ } catch (err) {
+ // TODO: Add a generic image in case of errors such as code overflow.
+ // It should never happen with correct codes, but after all this
+ // content can be generated by users...
+ console.error("Could not generate the QR code for the bridge:", err);
+ }
+ };
+ this._checkBridgeCardsHeight = () => {
+ for (const card of bridgeCards.children) {
+ // Expanded cards have the height set manually to their details for
+ // the CSS animation. However, when resizing the window, we may need
+ // to adjust their height.
+ if (
+ card.classList.contains("expanded") ||
+ card.classList.contains("currently-connected")
+ ) {
+ const grid = card.querySelector(selectors.bridges.cardQrGrid);
+ // Reset it first, to avoid having a height that is higher than
+ // strictly needed. Also, remove the to-animate class, because the
+ // animation interferes with this process!
+ grid.classList.remove("to-animate");
+ grid.style.height = "";
+ grid.style.height = `${grid.scrollHeight}px`;
+ }
+ }
+ };
+ this._currentBridgesExpanded = false;
+ const showAll = prefpane.querySelector(selectors.bridges.showAll);
+ showAll.setAttribute("label", TorStrings.settings.bridgeShowAll);
+ showAll.addEventListener("command", () => {
+ this._currentBridgesExpanded = true;
+ this._populateBridgeCards();
+ });
+ const removeAll = prefpane.querySelector(selectors.bridges.removeAll);
+ removeAll.setAttribute("label", TorStrings.settings.bridgeRemoveAll);
+ removeAll.addEventListener("command", () => {
+ this._confirmBridgeRemoval();
+ });
+ this._populateBridgeCards = () => {
+ const collapseThreshold = 4;
+
+ let newStrings = new Set(TorSettings.bridges.bridge_strings);
+ const numBridges = newStrings.size;
+ if (!newStrings.size) {
+ bridgeHeader.setAttribute("hidden", "true");
+ bridgeDescription.setAttribute("hidden", "true");
+ bridgeCards.setAttribute("hidden", "true");
+ showAll.setAttribute("hidden", "true");
+ removeAll.setAttribute("hidden", "true");
+ bridgeCards.textContent = "";
+ return;
+ }
+ bridgeHeader.removeAttribute("hidden");
+ bridgeDescription.removeAttribute("hidden");
+ bridgeCards.removeAttribute("hidden");
+ bridgeSwitch.checked = TorSettings.bridges.enabled;
+ bridgeCards.classList.toggle("disabled", !TorSettings.bridges.enabled);
+ bridgeCards.classList.toggle("single-card", numBridges === 1);
+
+ let shownCards = 0;
+ const toShow = this._currentBridgesExpanded
+ ? numBridges
+ : collapseThreshold;
+
+ // Do not remove all the old cards, because it makes scrollbar "jump"
+ const currentCards = bridgeCards.querySelectorAll(
+ selectors.bridges.card
+ );
+ for (const card of currentCards) {
+ const string = card.querySelector(selectors.bridges.cardAddr).value;
+ const hadString = newStrings.delete(string);
+ if (!hadString || shownCards == toShow) {
+ card.remove();
+ } else {
+ shownCards++;
+ }
+ }
+
+ // Add only the new strings that remained in the set
+ for (const bridge of newStrings) {
+ if (shownCards >= toShow) {
+ if (this._currentBridge === "") {
+ break;
+ } else if (!bridge.includes(this._currentBridge)) {
+ continue;
+ }
+ }
+ this._addBridgeCard(bridge);
+ shownCards++;
+ }
+
+ // If we know the connected bridge, we may have added more than the ones
+ // we should actually show (but the connected ones have been prepended,
+ // if needed). So, remove any exceeding ones.
+ while (shownCards > toShow) {
+ bridgeCards.lastElementChild.remove();
+ shownCards--;
+ }
+
+ // And finally update the buttons
+ if (numBridges > collapseThreshold && !this._currentBridgesExpanded) {
+ showAll.removeAttribute("hidden");
+ if (TorSettings.bridges.enabled) {
+ showAll.classList.add("primary");
+ } else {
+ showAll.classList.remove("primary");
+ }
+ removeAll.setAttribute("hidden", "true");
+ if (TorSettings.bridges.enabled) {
+ // We do not want both collapsed and disabled at the same time,
+ // because we use collapsed only to display a gradient on the list.
+ bridgeCards.classList.add("list-collapsed");
+ }
+ } else {
+ showAll.setAttribute("hidden", "true");
+ removeAll.removeAttribute("hidden");
+ bridgeCards.classList.remove("list-collapsed");
+ }
+ };
+ // Use a promise to avoid blocking the population of the page
+ // FIXME: Stop using a JSON file, and switch to properties
+ fetch(
+ "chrome://browser/content/torpreferences/bridgemoji-annotations.json"
+ ).then(async res => {
+ const annotations = await res.json();
+ const bcp47 = Services.locale.appLocaleAsBCP47;
+ const dash = bcp47.indexOf("-");
+ const lang = dash !== -1 ? bcp47.substring(dash) : bcp47;
+ if (bcp47 in annotations) {
+ emojiAnnotations = annotations[bcp47];
+ } else if (lang in annotations) {
+ emojiAnnotations = annotations[lang];
+ } else {
+ // At the moment, nb does not have annotations!
+ emojiAnnotations = annotations.en;
+ }
+ this._populateBridgeCards();
+ });
+ this._updateConnectedBridges = () => {
+ for (const card of bridgeCards.querySelectorAll(
+ ".currently-connected"
+ )) {
+ card.classList.remove("currently-connected");
+ }
+ if (this._currentBridge === "") {
+ return;
+ }
+ // Make sure we have the connected bridge in the list
+ this._populateBridgeCards();
+ // At the moment, IDs do not have to be unique (and it is a concrete
+ // case also with built-in bridges!). E.g., one line for the IPv4
+ // address and one for the IPv6 address, so use querySelectorAll
+ const cards = bridgeCards.querySelectorAll(
+ `[data-bridge-id="${this._currentBridge}"]`
+ );
+ for (const card of cards) {
+ card.classList.add("currently-connected");
+ }
+ const placeholder = document.createElement("span");
+ bridgeCards.prepend(placeholder);
+ placeholder.replaceWith(...cards);
+ this._checkBridgeCardsHeight();
+ };
+ try {
+ const { controller } = ChromeUtils.import(
+ "resource://torbutton/modules/tor-control-port.js",
+ {}
+ );
+ // Avoid the cache because we set our custom event watcher, and at the
+ // moment, watchers cannot be removed from a controller.
+ controller(true).then(aController => {
+ this._controller = aController;
+ // Getting the circuits may be enough, if we have bootstrapped for a
+ // while, but at the beginning it gives many bridges as connected,
+ // because tor pokes all the bridges to find the best one.
+ // Also, watching circuit events does not work, at the moment, but in
+ // any case, checking the stream has the advantage that we can see if
+ // it really used for a connection, rather than tor having created
+ // this circuit to check if the bridge can be used. We do this by
+ // checking if the stream has SOCKS username, which actually contains
+ // the destination of the stream.
+ this._controller.watchEvent(
+ "STREAM",
+ event =>
+ event.StreamStatus === "SUCCEEDED" && "SOCKS_USERNAME" in event,
+ async event => {
+ const circuitStatuses = await this._controller.getInfo(
+ "circuit-status"
+ );
+ if (!circuitStatuses) {
+ return;
+ }
+ for (const status of circuitStatuses) {
+ if (status.id === event.CircuitID && status.circuit.length) {
+ // The id in the circuit begins with a $ sign
+ const bridgeId = status.circuit[0][0].substring(1);
+ if (bridgeId !== this._currentBridge) {
+ this._currentBridge = bridgeId;
+ this._updateConnectedBridges();
+ }
+ break;
+ }
+ }
+ }
+ );
+ });
+ } catch (err) {
+ console.warn(
+ "We could not load torbutton, bridge statuses will not be updated",
+ err
+ );
+ }
+
+ // Add a new bridge
+ prefpane.querySelector(selectors.bridges.addHeader).textContent =
+ TorStrings.settings.bridgeAdd;
+ prefpane
+ .querySelector(selectors.bridges.addBuiltinLabel)
+ .setAttribute("value", TorStrings.settings.bridgeSelectBrowserBuiltin);
+ {
+ let button = prefpane.querySelector(selectors.bridges.addBuiltinButton);
+ button.setAttribute("label", TorStrings.settings.bridgeSelectBuiltin);
+ button.addEventListener("command", e => {
+ this.onAddBuiltinBridge();
+ });
+ }
+ prefpane
+ .querySelector(selectors.bridges.requestLabel)
+ .setAttribute("value", TorStrings.settings.bridgeRequestFromTorProject);
+ {
+ let button = prefpane.querySelector(selectors.bridges.requestButton);
+ button.setAttribute("label", TorStrings.settings.bridgeRequest);
+ button.addEventListener("command", e => {
+ this.onRequestBridge();
+ });
+ }
+ prefpane
+ .querySelector(selectors.bridges.enterLabel)
+ .setAttribute("value", TorStrings.settings.bridgeEnterKnown);
+ {
+ const button = prefpane.querySelector(selectors.bridges.enterButton);
+ button.setAttribute("label", TorStrings.settings.bridgeAddManually);
+ button.addEventListener("command", e => {
+ this.onAddBridgeManually();
+ });
+ }
+
+ {
+ const overlay = prefpane.querySelector(selectors.bridges.removeOverlay);
+ this._confirmBridgeRemoval = () => {
+ overlay.classList.remove("hidden");
+ };
+ const closeDialog = () => {
+ overlay.classList.add("hidden");
+ };
+ overlay.addEventListener("click", closeDialog);
+ const modal = prefpane.querySelector(selectors.bridges.removeModal);
+ modal.addEventListener("click", e => {
+ e.stopPropagation();
+ });
+ const dismiss = prefpane.querySelector(selectors.bridges.removeDismiss);
+ dismiss.addEventListener("click", closeDialog);
+ const question = prefpane.querySelector(
+ selectors.bridges.removeQuestion
+ );
+ question.textContent = TorStrings.settings.removeBridgesQuestion;
+ const warning = prefpane.querySelector(selectors.bridges.removeWarning);
+ warning.textContent = TorStrings.settings.removeBridgesWarning;
+ const confirm = prefpane.querySelector(selectors.bridges.removeConfirm);
+ confirm.setAttribute("label", TorStrings.settings.remove);
+ confirm.addEventListener("command", () => {
+ this.onRemoveAllBridges();
+ closeDialog();
+ });
+ const cancel = prefpane.querySelector(selectors.bridges.removeCancel);
+ cancel.setAttribute("label", TorStrings.settings.cancel);
+ cancel.addEventListener("command", closeDialog);
+ }
+
+ // Advanced setup
+ prefpane.querySelector(selectors.advanced.header).innerText =
+ TorStrings.settings.advancedHeading;
+ prefpane.querySelector(selectors.advanced.label).textContent =
+ TorStrings.settings.advancedLabel;
+ {
+ let settingsButton = prefpane.querySelector(selectors.advanced.button);
+ settingsButton.setAttribute(
+ "label",
+ TorStrings.settings.advancedButton
+ );
+ settingsButton.addEventListener("command", () => {
+ this.onAdvancedSettings();
+ });
+ }
+
+ // Tor logs
+ prefpane
+ .querySelector(selectors.advanced.torLogsLabel)
+ .setAttribute("value", TorStrings.settings.showTorDaemonLogs);
+ let torLogsButton = prefpane.querySelector(
+ selectors.advanced.torLogsButton
+ );
+ torLogsButton.setAttribute("label", TorStrings.settings.showLogs);
+ torLogsButton.addEventListener("command", () => {
+ this.onViewTorLogs();
+ });
+
+ Services.obs.addObserver(this, TorConnectTopics.StateChange);
+ },
+
+ init() {
+ this._populateXUL();
+
+ const onUnload = () => {
+ window.removeEventListener("unload", onUnload);
+ gConnectionPane.uninit();
+ };
+ window.addEventListener("unload", onUnload);
+
+ window.addEventListener("resize", () => {
+ this._checkBridgeCardsHeight();
+ });
+ window.addEventListener("hashchange", () => {
+ this._checkBridgeCardsHeight();
+ })
+ },
+
+ uninit() {
+ // unregister our observer topics
+ Services.obs.removeObserver(this, TorSettingsTopics.SettingChanged);
+ Services.obs.removeObserver(this, TorConnectTopics.StateChange);
+
+ if (this._controller !== null) {
+ this._controller.close();
+ this._controller = null;
+ }
+ },
+
+ // whether the page should be present in about:preferences
+ get enabled() {
+ return TorProtocolService.ownsTorDaemon;
+ },
+
+ //
+ // Callbacks
+ //
+
+ observe(subject, topic, data) {
+ switch (topic) {
+ // triggered when a TorSettings param has changed
+ case TorSettingsTopics.SettingChanged: {
+ let obj = subject?.wrappedJSObject;
+ switch (data) {
+ case TorSettingsData.QuickStartEnabled: {
+ this._enableQuickstartCheckbox.checked = obj.value;
+ break;
+ }
+ }
+ break;
+ }
+ // triggered when tor connect state changes and we may
+ // need to update the messagebox
+ case TorConnectTopics.StateChange: {
+ this.onStateChange();
+ break;
+ }
+ }
+ },
+
+ async onInternetTest() {
+ const mrpc = new MoatRPC();
+ let status = null;
+ try {
+ await mrpc.init();
+ status = await mrpc.testInternetConnection();
+ } catch (err) {
+ console.log("Error while checking the Internet connection", err);
+ } finally {
+ mrpc.uninit();
+ }
+ if (status) {
+ this._internetStatus = status.successful
+ ? InternetStatus.Online
+ : InternetStatus.Offline;
+ this._populateStatus();
+ }
+ },
+
+ onStateChange() {
+ this._populateMessagebox();
+ this._populateStatus();
+ this._showAutoconfiguration();
+ this._populateBridgeCards();
+ },
+
+ onShowQr(bridgeString) {
+ const dialog = new BridgeQrDialog();
+ dialog.openDialog(gSubDialog, bridgeString);
+ },
+
+ onCopyBridgeAddress(addressElem) {
+ let clipboard = Cc["@mozilla.org/widget/clipboardhelper;1"].getService(
+ Ci.nsIClipboardHelper
+ );
+ clipboard.copyString(addressElem.value);
+ },
+
+ onRemoveAllBridges() {
+ TorSettings.bridges.enabled = false;
+ TorSettings.bridges.bridge_strings = "";
+ if (TorSettings.bridges.source == TorBridgeSource.BuiltIn) {
+ TorSettings.bridges.builtin_type = "";
+ }
+ TorSettings.saveToPrefs();
+ TorSettings.applySettings().then(result => {
+ this._populateBridgeCards();
+ });
+ },
+
+ onAddBuiltinBridge() {
+ const builtinBridgeDialog = new BuiltinBridgeDialog();
+ builtinBridgeDialog.openDialog(gSubDialog, aBridgeType => {
+ if (!aBridgeType) {
+ TorSettings.bridges.enabled = false;
+ TorSettings.bridges.builtin_type = "";
+ } else {
+ TorSettings.bridges.enabled = true;
+ TorSettings.bridges.source = TorBridgeSource.BuiltIn;
+ TorSettings.bridges.builtin_type = aBridgeType;
+ }
+ TorSettings.saveToPrefs();
+ TorSettings.applySettings().then(result => {
+ this._populateBridgeCards();
+ });
+ });
+ },
+
+ // called when the request bridge button is activated
+ onRequestBridge() {
+ let requestBridgeDialog = new RequestBridgeDialog();
+ requestBridgeDialog.openDialog(gSubDialog, aBridges => {
+ if (aBridges.length) {
+ let bridgeStrings = aBridges.join("\n");
+ TorSettings.bridges.enabled = true;
+ TorSettings.bridges.source = TorBridgeSource.BridgeDB;
+ TorSettings.bridges.bridge_strings = bridgeStrings;
+ TorSettings.saveToPrefs();
+ TorSettings.applySettings().then(result => {
+ this._populateBridgeCards();
+ });
+ } else {
+ TorSettings.bridges.enabled = false;
+ }
+ });
+ },
+
+ onAddBridgeManually() {
+ let provideBridgeDialog = new ProvideBridgeDialog();
+ provideBridgeDialog.openDialog(gSubDialog, aBridgeString => {
+ if (aBridgeString.length) {
+ TorSettings.bridges.enabled = true;
+ TorSettings.bridges.source = TorBridgeSource.UserProvided;
+ TorSettings.bridges.bridge_strings = aBridgeString;
+ TorSettings.saveToPrefs();
+ TorSettings.applySettings().then(result => {
+ this._populateBridgeCards();
+ });
+ } else {
+ TorSettings.bridges.enabled = false;
+ TorSettings.bridges.source = TorBridgeSource.Invalid;
+ }
+ });
+ },
+
+ onAdvancedSettings() {
+ let connectionSettingsDialog = new ConnectionSettingsDialog();
+ connectionSettingsDialog.openDialog(gSubDialog);
+ },
+
+ onViewTorLogs() {
+ let torLogDialog = new TorLogDialog();
+ torLogDialog.openDialog(gSubDialog);
+ },
+ };
+ return retval;
+})(); /* gConnectionPane */
+
+function makeBridgeId(bridgeString) {
+ // JS uses UTF-16. While most of these emojis are surrogate pairs, a few
+ // ones fit one UTF-16 character. So we could not use neither indices,
+ // nor substr, nor some function to split the string.
+ /* eslint-disable */
+ const emojis = [
+ "👽️", "🤖", "🧠", "👁️", "🧙", "🧚", "🧜", "🐵", "🦧", "🐶", "🐺", "🦊", "🦝", "🐱", "🦁", "🐯",
+ "🐴", "🦄", "🦓", "🦌", "🐮", "🐷", "🐗", "🐪", "🦙", "🦒", "🐘", "🦣", "🦏", "🐭", "🐰", "🐿️",
+ "🦔", "🦇", "🐻", "🐨", "🦥", "🦦", "🦘", "🐥", "🐦️", "🕊️", "🦆", "🦉", "🦤", "🪶", "🦩", "🦚",
+ "🦜", "🐊", "🐢", "🦎", "🐍", "🐲", "🦕", "🐳", "🐬", "🦭", "🐟️", "🐠", "🦈", "🐙", "🐚", "🐌",
+ "🦋", "🐛", "🐝", "🐞", "💐", "🌹", "🌺", "🌻", "🌷", "🌲", "🌳", "🌴", "🌵", "🌿", "🍁", "🍇",
+ "🍈", "🍉", "🍊", "🍋", "🍌", "🍍", "🥭", "🍏", "🍐", "🍑", "🍒", "🍓", "🫐", "🥝", "🍅", "🫒",
+ "🥥", "🥑", "🍆", "🥕", "🌽", "🌶️", "🥬", "🥦", "🧅", "🍄", "🥜", "🥐", "🥖", "🥨", "🥯", "🥞",
+ "🧇", "🍔", "🍕", "🌭", "🌮", "🍿", "🦀", "🦞", "🍨", "🍩", "🍪", "🎂", "🧁", "🍫", "🍬", "🍭",
+ "🫖", "🧃", "🧉", "🧭", "🏔️", "🌋", "🏕️", "🏝️", "🏡", "⛲️", "🎠", "🎡", "🎢", "💈", "🚆", "🚋",
+ "🚍️", "🚕", "🚗", "🚚", "🚜", "🛵", "🛺", "🛴", "🛹", "🛼", "⚓️", "⛵️", "🛶", "🚤", "🚢", "✈️",
+ "🚁", "🚠", "🛰️", "🚀", "🛸", "⏰", "🌙", "🌡️", "☀️", "🪐", "🌟", "🌀", "🌈", "☂️", "❄️", "☄️",
+ "🔥", "💧", "🌊", "🎃", "✨", "🎈", "🎉", "🎏", "🎀", "🎁", "🎟️", "🏆️", "⚽️", "🏀", "🏈", "🎾",
+ "🥏", "🏓", "🏸", "🤿", "🥌", "🎯", "🪀", "🪁", "🔮", "🎲", "🧩", "🎨", "🧵", "👕", "🧦", "👗",
+ "🩳", "🎒", "👟", "👑", "🧢", "💄", "💍", "💎", "📢", "🎶", "🎙️", "📻️", "🎷", "🪗", "🎸", "🎺",
+ "🎻", "🪕", "🥁", "☎️", "🔋", "💿️", "🧮", "🎬️", "💡", "🔦", "🏮", "📕", "🏷️", "💳️", "✏️", "🖌️",
+ "🖍️", "📌", "📎", "🔑", "🪃", "🏹", "⚖️", "🧲", "🧪", "🧬", "🔬", "🔭", "📡", "🪑", "🧹", "🗿",
+ ];
+ /* eslint-enable */
+
+ // FNV-1a implementation that is compatible with other languages
+ const prime = 0x01000193;
+ const offset = 0x811c9dc5;
+ let hash = offset;
+ const encoder = new TextEncoder();
+ for (const byte of encoder.encode(bridgeString)) {
+ hash = Math.imul(hash ^ byte, prime);
+ }
+
+ const hashBytes = [
+ ((hash & 0x7f000000) >> 24) | (hash < 0 ? 0x80 : 0),
+ (hash & 0x00ff0000) >> 16,
+ (hash & 0x0000ff00) >> 8,
+ hash & 0x000000ff,
+ ];
+ return hashBytes.map(b => emojis[b]);
+}
+
+function parseBridgeLine(line) {
+ const re = /^([^\s]+\s+)?([0-9a-fA-F\.\[\]\:]+:[0-9]{1,5})\s*([0-9a-fA-F]{40})(\s+.+)?/;
+ const matches = line.match(re);
+ if (!matches) {
+ return null;
+ }
+ let bridge = { addr: matches[2] };
+ if (matches[1] !== undefined) {
+ bridge.transport = matches[1].trim();
+ }
+ if (matches[3] !== undefined) {
+ bridge.id = matches[3].toUpperCase();
+ }
+ if (matches[4] !== undefined) {
+ bridge.args = matches[4].trim();
+ }
+ return bridge;
+}
diff --git a/browser/components/torpreferences/content/connectionPane.xhtml b/browser/components/torpreferences/content/connectionPane.xhtml
new file mode 100644
index 0000000000000..82738723ae21a
--- /dev/null
+++ b/browser/components/torpreferences/content/connectionPane.xhtml
@@ -0,0 +1,194 @@
+<!-- Tor panel -->
+
+<script type="application/javascript"
+ src="chrome://browser/content/torpreferences/connectionPane.js"/>
+<html:template id="template-paneConnection">
+
+<!-- Tor Connect Message Box -->
+<groupbox data-category="paneConnection" hidden="true">
+ <html:div id="torPreferences-connectMessageBox"
+ class="subcategory"
+ data-category="paneConnection"
+ hidden="true">
+ <html:table>
+ <html:tr>
+ <html:td>
+ <html:div id="torPreferences-connectMessageBox-icon"/>
+ </html:td>
+ <html:td id="torPreferences-connectMessageBox-message">
+ </html:td>
+ <html:td>
+ <html:button id="torPreferences-connectMessageBox-button">
+ </html:button>
+ </html:td>
+ </html:tr>
+ </html:table>
+ </html:div>
+</groupbox>
+
+<hbox id="torPreferencesCategory"
+ class="subcategory"
+ data-category="paneConnection"
+ hidden="true">
+ <html:h1 id="torPreferences-header"/>
+</hbox>
+
+<groupbox data-category="paneConnection"
+ hidden="true">
+ <description flex="1">
+ <html:span id="torPreferences-description" class="tail-with-learn-more"/>
+ <label id="torPreferences-learnMore" class="learnMore text-link" is="text-link"/>
+ </description>
+</groupbox>
+
+<groupbox id="torPreferences-status-group"
+ data-category="paneConnection"
+ hidden="true">
+ <hbox id="torPreferences-status-box">
+ <image id="torPreferences-status-internet-icon"/>
+ <html:span id="torPreferences-status-internet-label"/>
+ <button id="torPreferences-status-internet-test"/>
+ <image id="torPreferences-status-internet-statusIcon"/>
+ <html:span id="torPreferences-status-internet-status"/>
+ <image id="torPreferences-status-tor-icon"/>
+ <html:span id="torPreferences-status-tor-label"/>
+ <image id="torPreferences-status-tor-statusIcon"/>
+ <html:span id="torPreferences-status-tor-status"/>
+ </hbox>
+</groupbox>
+
+<!-- Quickstart -->
+<groupbox id="torPreferences-quickstart-group"
+ data-category="paneConnection"
+ hidden="true">
+ <html:h2 id="torPreferences-quickstart-header"/>
+ <description flex="1">
+ <html:span id="torPreferences-quickstart-description"/>
+ </description>
+ <checkbox id="torPreferences-quickstart-toggle"/>
+</groupbox>
+
+<!-- Bridges -->
+<hbox class="subcategory"
+ data-category="paneConnection"
+ hidden="true">
+ <html:h1 id="torPreferences-bridges-header"/>
+</hbox>
+<groupbox id="torPreferences-bridges-group"
+ data-category="paneConnection"
+ hidden="true">
+ <description flex="1">
+ <html:span id="torPreferences-bridges-description" class="tail-with-learn-more"/>
+ <label id="torPreferences-bridges-learnMore" class="learnMore text-link" is="text-link"/>
+ </description>
+ <hbox align="center" id="torPreferences-bridges-locationGroup" hidden="true">
+ <label id="torPreferences-bridges-locationLabel"
+ control="torPreferences-bridges-location"/>
+ <spacer flex="1"/>
+ <menulist id="torPreferences-bridges-location">
+ <menupopup id="torPreferences-bridges-locationEntries"/>
+ </menulist>
+ <button id="torPreferences-bridges-buttonChooseBridgeForMe" class="torMarginFix primary"/>
+ </hbox>
+ <html:h2 id="torPreferences-currentBridges-header">
+ <html:span id="torPreferences-currentBridges-headerText"/>
+ <html:input type="checkbox" id="torPreferences-currentBridges-switch" class="toggle-button"/>
+ </html:h2>
+ <description flex="1" id="torPreferences-currentBridges-description">
+ <html:span id="torPreferences-currentBridges-descriptionText"/>
+ </description>
+ <menupopup id="torPreferences-bridgeCard-menu"/>
+ <vbox id="torPreferences-bridgeCard-template" class="torPreferences-bridgeCard">
+ <hbox class="torPreferences-bridgeCard-heading">
+ <html:div class="torPreferences-bridgeCard-id"/>
+ <html:div class="torPreferences-bridgeCard-headingAddr"/>
+ <html:div class="torPreferences-bridgeCard-buttons">
+ <html:span class="torPreferences-bridgeCard-connectedBadge">
+ <image class="torPreferences-bridgeCard-connectedIcon"/>
+ <html:span class="torPreferences-bridgeCard-connectedLabel"/>
+ </html:span>
+ <html:button class="torPreferences-bridgeCard-options stop-click"/>
+ </html:div>
+ </hbox>
+ <box class="torPreferences-bridgeCard-grid">
+ <box class="torPreferences-bridgeCard-qrWrapper">
+ <html:div class="torPreferences-bridgeCard-qr stop-click">
+ <html:div class="torPreferences-bridgeCard-qrCode"/>
+ <html:div class="torPreferences-bridgeCard-qrOnionBox"/>
+ <html:div class="torPreferences-bridgeCard-qrOnion"/>
+ </html:div>
+ </box>
+ <description class="torPreferences-bridgeCard-share"></description>
+ <hbox class="torPreferences-bridgeCard-addrBox">
+ <html:input class="torPreferences-bridgeCard-addr torMarginFix stop-click" type="text" readonly="readonly"/>
+ </hbox>
+ <hbox class="torPreferences-bridgeCard-learnMoreBox" align="center">
+ <label class="torPreferences-bridgeCard-learnMore learnMore text-link stop-click" is="text-link"/>
+ </hbox>
+ <hbox class="torPreferences-bridgeCard-copy" align="center">
+ <button class="torPreferences-bridgeCard-copyButton stop-click"/>
+ </hbox>
+ </box>
+ </vbox>
+ <vbox id="torPreferences-currentBridges-cards"></vbox>
+ <vbox align="center">
+ <button id="torPreferences-currentBridges-showAll"/>
+ <button id="torPreferences-currentBridges-removeAll" class="primary danger-button"/>
+ </vbox>
+ <html:h2 id="torPreferences-addBridge-header"></html:h2>
+ <hbox align="center">
+ <label id="torPreferences-addBridge-labelBuiltinBridge"/>
+ <space flex="1"/>
+ <button id="torPreferences-addBridge-buttonBuiltinBridge" class="torMarginFix"/>
+ </hbox>
+ <hbox align="center">
+ <label id="torPreferences-addBridge-labelRequestBridge"/>
+ <space flex="1"/>
+ <button id="torPreferences-addBridge-buttonRequestBridge" class="torMarginFix"/>
+ </hbox>
+ <hbox align="center">
+ <label id="torPreferences-addBridge-labelEnterBridge"/>
+ <space flex="1"/>
+ <button id="torPreferences-addBridge-buttonEnterBridge" class="torMarginFix"/>
+ </hbox>
+</groupbox>
+
+<!-- Advanced -->
+<hbox class="subcategory"
+ data-category="paneConnection"
+ hidden="true">
+ <html:h1 id="torPreferences-advanced-header"/>
+</hbox>
+<groupbox id="torPreferences-advanced-group"
+ data-category="paneConnection"
+ hidden="true">
+ <box id="torPreferences-advanced-grid">
+ <hbox id="torPreferences-advanced-hbox" align="center">
+ <label id="torPreferences-advanced-label"/>
+ </hbox>
+ <hbox align="center">
+ <button id="torPreferences-advanced-button"/>
+ </hbox>
+ <hbox id="torPreferences-torDaemon-hbox" align="center">
+ <label id="torPreferences-torLogs"/>
+ </hbox>
+ <hbox align="center" data-subcategory="viewlogs">
+ <button id="torPreferences-buttonTorLogs"/>
+ </hbox>
+ </box>
+</groupbox>
+
+<html:div id="bridge-remove-overlay" class="hidden">
+ <html:div id="bridge-remove-modal">
+ <html:img id="bridge-remove-dismiss" src="chrome://global/skin/icons/close.svg"/>
+ <html:div id="bridge-remove-icon"/>
+ <html:p id="bridge-remove-question"/>
+ <html:p id="bridge-remove-warning"/>
+ <html:div id="bridge-remove-buttonbar">
+ <button id="bridge-remove-cancel"/>
+ <button id="bridge-remove-confirm"/>
+ </html:div>
+ </html:div>
+</html:div>
+
+</html:template>
diff --git a/browser/components/torpreferences/content/connectionSettingsDialog.jsm b/browser/components/torpreferences/content/connectionSettingsDialog.jsm
new file mode 100644
index 0000000000000..41b9565780dcc
--- /dev/null
+++ b/browser/components/torpreferences/content/connectionSettingsDialog.jsm
@@ -0,0 +1,397 @@
+"use strict";
+
+var EXPORTED_SYMBOLS = ["ConnectionSettingsDialog"];
+
+const { TorSettings, TorProxyType } = ChromeUtils.import(
+ "resource:///modules/TorSettings.jsm"
+);
+
+const { TorStrings } = ChromeUtils.import("resource:///modules/TorStrings.jsm");
+
+class ConnectionSettingsDialog {
+ constructor() {
+ this._dialog = null;
+ this._useProxyCheckbox = null;
+ this._proxyTypeLabel = null;
+ this._proxyTypeMenulist = null;
+ this._proxyAddressLabel = null;
+ this._proxyAddressTextbox = null;
+ this._proxyPortLabel = null;
+ this._proxyPortTextbox = null;
+ this._proxyUsernameLabel = null;
+ this._proxyUsernameTextbox = null;
+ this._proxyPasswordLabel = null;
+ this._proxyPasswordTextbox = null;
+ this._useFirewallCheckbox = null;
+ this._allowedPortsLabel = null;
+ this._allowedPortsTextbox = null;
+ }
+
+ static get selectors() {
+ return {
+ header: "#torPreferences-connection-header",
+ useProxyCheckbox: "checkbox#torPreferences-connection-toggleProxy",
+ proxyTypeLabel: "label#torPreferences-localProxy-type",
+ proxyTypeList: "menulist#torPreferences-localProxy-builtinList",
+ proxyAddressLabel: "label#torPreferences-localProxy-address",
+ proxyAddressTextbox: "input#torPreferences-localProxy-textboxAddress",
+ proxyPortLabel: "label#torPreferences-localProxy-port",
+ proxyPortTextbox: "input#torPreferences-localProxy-textboxPort",
+ proxyUsernameLabel: "label#torPreferences-localProxy-username",
+ proxyUsernameTextbox: "input#torPreferences-localProxy-textboxUsername",
+ proxyPasswordLabel: "label#torPreferences-localProxy-password",
+ proxyPasswordTextbox: "input#torPreferences-localProxy-textboxPassword",
+ useFirewallCheckbox: "checkbox#torPreferences-connection-toggleFirewall",
+ firewallAllowedPortsLabel: "label#torPreferences-connection-allowedPorts",
+ firewallAllowedPortsTextbox:
+ "input#torPreferences-connection-textboxAllowedPorts",
+ };
+ }
+
+ // disables the provided list of elements
+ _setElementsDisabled(elements, disabled) {
+ for (let currentElement of elements) {
+ currentElement.disabled = disabled;
+ }
+ }
+
+ _populateXUL(window, aDialog) {
+ const selectors = ConnectionSettingsDialog.selectors;
+
+ this._dialog = aDialog;
+ const dialogWin = this._dialog.parentElement;
+ dialogWin.setAttribute(
+ "title",
+ TorStrings.settings.connectionSettingsDialogTitle
+ );
+ this._dialog.querySelector(selectors.header).textContent =
+ TorStrings.settings.connectionSettingsDialogHeader;
+
+ // Local Proxy
+ this._useProxyCheckbox = this._dialog.querySelector(
+ selectors.useProxyCheckbox
+ );
+ this._useProxyCheckbox.setAttribute(
+ "label",
+ TorStrings.settings.useLocalProxy
+ );
+ this._useProxyCheckbox.addEventListener("command", e => {
+ const checked = this._useProxyCheckbox.checked;
+ this.onToggleProxy(checked);
+ });
+ this._proxyTypeLabel = this._dialog.querySelector(selectors.proxyTypeLabel);
+ this._proxyTypeLabel.setAttribute("value", TorStrings.settings.proxyType);
+
+ let mockProxies = [
+ {
+ value: TorProxyType.Socks4,
+ label: TorStrings.settings.proxyTypeSOCKS4,
+ },
+ {
+ value: TorProxyType.Socks5,
+ label: TorStrings.settings.proxyTypeSOCKS5,
+ },
+ { value: TorProxyType.HTTPS, label: TorStrings.settings.proxyTypeHTTP },
+ ];
+ this._proxyTypeMenulist = this._dialog.querySelector(
+ selectors.proxyTypeList
+ );
+ this._proxyTypeMenulist.addEventListener("command", e => {
+ const value = this._proxyTypeMenulist.value;
+ this.onSelectProxyType(value);
+ });
+ for (let currentProxy of mockProxies) {
+ let menuEntry = window.document.createXULElement("menuitem");
+ menuEntry.setAttribute("value", currentProxy.value);
+ menuEntry.setAttribute("label", currentProxy.label);
+ this._proxyTypeMenulist.querySelector("menupopup").appendChild(menuEntry);
+ }
+
+ this._proxyAddressLabel = this._dialog.querySelector(
+ selectors.proxyAddressLabel
+ );
+ this._proxyAddressLabel.setAttribute(
+ "value",
+ TorStrings.settings.proxyAddress
+ );
+ this._proxyAddressTextbox = this._dialog.querySelector(
+ selectors.proxyAddressTextbox
+ );
+ this._proxyAddressTextbox.setAttribute(
+ "placeholder",
+ TorStrings.settings.proxyAddressPlaceholder
+ );
+ this._proxyAddressTextbox.addEventListener("blur", e => {
+ let value = this._proxyAddressTextbox.value.trim();
+ let colon = value.lastIndexOf(":");
+ if (colon != -1) {
+ let maybePort = parseInt(value.substr(colon + 1));
+ if (!isNaN(maybePort) && maybePort > 0 && maybePort < 65536) {
+ this._proxyAddressTextbox.value = value.substr(0, colon);
+ this._proxyPortTextbox.value = maybePort;
+ }
+ }
+ });
+ this._proxyPortLabel = this._dialog.querySelector(selectors.proxyPortLabel);
+ this._proxyPortLabel.setAttribute("value", TorStrings.settings.proxyPort);
+ this._proxyPortTextbox = this._dialog.querySelector(
+ selectors.proxyPortTextbox
+ );
+ this._proxyUsernameLabel = this._dialog.querySelector(
+ selectors.proxyUsernameLabel
+ );
+ this._proxyUsernameLabel.setAttribute(
+ "value",
+ TorStrings.settings.proxyUsername
+ );
+ this._proxyUsernameTextbox = this._dialog.querySelector(
+ selectors.proxyUsernameTextbox
+ );
+ this._proxyUsernameTextbox.setAttribute(
+ "placeholder",
+ TorStrings.settings.proxyUsernamePasswordPlaceholder
+ );
+ this._proxyPasswordLabel = this._dialog.querySelector(
+ selectors.proxyPasswordLabel
+ );
+ this._proxyPasswordLabel.setAttribute(
+ "value",
+ TorStrings.settings.proxyPassword
+ );
+ this._proxyPasswordTextbox = this._dialog.querySelector(
+ selectors.proxyPasswordTextbox
+ );
+ this._proxyPasswordTextbox.setAttribute(
+ "placeholder",
+ TorStrings.settings.proxyUsernamePasswordPlaceholder
+ );
+
+ this.onToggleProxy(false);
+ if (TorSettings.proxy.enabled) {
+ this.onToggleProxy(true);
+ this.onSelectProxyType(TorSettings.proxy.type);
+ this._proxyAddressTextbox.value = TorSettings.proxy.address;
+ this._proxyPortTextbox.value = TorSettings.proxy.port;
+ this._proxyUsernameTextbox.value = TorSettings.proxy.username;
+ this._proxyPasswordTextbox.value = TorSettings.proxy.password;
+ }
+
+ // Local firewall
+ this._useFirewallCheckbox = this._dialog.querySelector(
+ selectors.useFirewallCheckbox
+ );
+ this._useFirewallCheckbox.setAttribute(
+ "label",
+ TorStrings.settings.useFirewall
+ );
+ this._useFirewallCheckbox.addEventListener("command", e => {
+ const checked = this._useFirewallCheckbox.checked;
+ this.onToggleFirewall(checked);
+ });
+ this._allowedPortsLabel = this._dialog.querySelector(
+ selectors.firewallAllowedPortsLabel
+ );
+ this._allowedPortsLabel.setAttribute(
+ "value",
+ TorStrings.settings.allowedPorts
+ );
+ this._allowedPortsTextbox = this._dialog.querySelector(
+ selectors.firewallAllowedPortsTextbox
+ );
+ this._allowedPortsTextbox.setAttribute(
+ "placeholder",
+ TorStrings.settings.allowedPortsPlaceholder
+ );
+
+ this.onToggleFirewall(false);
+ if (TorSettings.firewall.enabled) {
+ this.onToggleFirewall(true);
+ this._allowedPortsTextbox.value = TorSettings.firewall.allowed_ports.join(
+ ", "
+ );
+ }
+
+ this._dialog.addEventListener("dialogaccept", e => {
+ this._applySettings();
+ });
+
+ // Hack: see the CSS
+ this._dialog.style.minWidth = '0';
+ this._dialog.style.minHeight = '0';
+ }
+
+ // callback when proxy is toggled
+ onToggleProxy(enabled) {
+ this._useProxyCheckbox.checked = enabled;
+ let disabled = !enabled;
+
+ this._setElementsDisabled(
+ [
+ this._proxyTypeLabel,
+ this._proxyTypeMenulist,
+ this._proxyAddressLabel,
+ this._proxyAddressTextbox,
+ this._proxyPortLabel,
+ this._proxyPortTextbox,
+ this._proxyUsernameLabel,
+ this._proxyUsernameTextbox,
+ this._proxyPasswordLabel,
+ this._proxyPasswordTextbox,
+ ],
+ disabled
+ );
+ if (enabled) {
+ this.onSelectProxyType(this._proxyTypeMenulist.value);
+ }
+ }
+
+ // callback when proxy type is changed
+ onSelectProxyType(value) {
+ if (typeof value === "string") {
+ value = parseInt(value);
+ }
+
+ this._proxyTypeMenulist.value = value;
+ switch (value) {
+ case TorProxyType.Invalid: {
+ this._setElementsDisabled(
+ [
+ this._proxyAddressLabel,
+ this._proxyAddressTextbox,
+ this._proxyPortLabel,
+ this._proxyPortTextbox,
+ this._proxyUsernameLabel,
+ this._proxyUsernameTextbox,
+ this._proxyPasswordLabel,
+ this._proxyPasswordTextbox,
+ ],
+ true
+ ); // DISABLE
+
+ this._proxyAddressTextbox.value = "";
+ this._proxyPortTextbox.value = "";
+ this._proxyUsernameTextbox.value = "";
+ this._proxyPasswordTextbox.value = "";
+ break;
+ }
+ case TorProxyType.Socks4: {
+ this._setElementsDisabled(
+ [
+ this._proxyAddressLabel,
+ this._proxyAddressTextbox,
+ this._proxyPortLabel,
+ this._proxyPortTextbox,
+ ],
+ false
+ ); // ENABLE
+ this._setElementsDisabled(
+ [
+ this._proxyUsernameLabel,
+ this._proxyUsernameTextbox,
+ this._proxyPasswordLabel,
+ this._proxyPasswordTextbox,
+ ],
+ true
+ ); // DISABLE
+
+ this._proxyUsernameTextbox.value = "";
+ this._proxyPasswordTextbox.value = "";
+ break;
+ }
+ case TorProxyType.Socks5:
+ case TorProxyType.HTTPS: {
+ this._setElementsDisabled(
+ [
+ this._proxyAddressLabel,
+ this._proxyAddressTextbox,
+ this._proxyPortLabel,
+ this._proxyPortTextbox,
+ this._proxyUsernameLabel,
+ this._proxyUsernameTextbox,
+ this._proxyPasswordLabel,
+ this._proxyPasswordTextbox,
+ ],
+ false
+ ); // ENABLE
+ break;
+ }
+ }
+ }
+
+ // callback when firewall proxy is toggled
+ onToggleFirewall(enabled) {
+ this._useFirewallCheckbox.checked = enabled;
+ let disabled = !enabled;
+
+ this._setElementsDisabled(
+ [this._allowedPortsLabel, this._allowedPortsTextbox],
+ disabled
+ );
+ }
+
+ // pushes settings from UI to tor
+ _applySettings() {
+ const type = this._useProxyCheckbox.checked
+ ? parseInt(this._proxyTypeMenulist.value)
+ : TorProxyType.Invalid;
+ const address = this._proxyAddressTextbox.value;
+ const port = this._proxyPortTextbox.value;
+ const username = this._proxyUsernameTextbox.value;
+ const password = this._proxyPasswordTextbox.value;
+ switch (type) {
+ case TorProxyType.Invalid:
+ TorSettings.proxy.enabled = false;
+ break;
+ case TorProxyType.Socks4:
+ TorSettings.proxy.enabled = true;
+ TorSettings.proxy.type = type;
+ TorSettings.proxy.address = address;
+ TorSettings.proxy.port = port;
+ break;
+ case TorProxyType.Socks5:
+ TorSettings.proxy.enabled = true;
+ TorSettings.proxy.type = type;
+ TorSettings.proxy.address = address;
+ TorSettings.proxy.port = port;
+ TorSettings.proxy.username = username;
+ TorSettings.proxy.password = password;
+ break;
+ case TorProxyType.HTTPS:
+ TorSettings.proxy.enabled = true;
+ TorSettings.proxy.type = type;
+ TorSettings.proxy.address = address;
+ TorSettings.proxy.port = port;
+ TorSettings.proxy.username = username;
+ TorSettings.proxy.password = password;
+ break;
+ }
+
+ let portListString = this._useFirewallCheckbox.checked
+ ? this._allowedPortsTextbox.value
+ : "";
+ if (portListString) {
+ TorSettings.firewall.enabled = true;
+ TorSettings.firewall.allowed_ports = portListString;
+ } else {
+ TorSettings.firewall.enabled = false;
+ }
+
+ TorSettings.saveToPrefs();
+ TorSettings.applySettings();
+ }
+
+ init(window, aDialog) {
+ // defer to later until firefox has populated the dialog with all our elements
+ window.setTimeout(() => {
+ this._populateXUL(window, aDialog);
+ }, 0);
+ }
+
+ openDialog(gSubDialog) {
+ gSubDialog.open(
+ "chrome://browser/content/torpreferences/connectionSettingsDialog.xhtml",
+ { features: "resizable=yes" },
+ this
+ );
+ }
+}
diff --git a/browser/components/torpreferences/content/connectionSettingsDialog.xhtml b/browser/components/torpreferences/content/connectionSettingsDialog.xhtml
new file mode 100644
index 0000000000000..8265cdd71c2f8
--- /dev/null
+++ b/browser/components/torpreferences/content/connectionSettingsDialog.xhtml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
+<?xml-stylesheet href="chrome://browser/skin/preferences/preferences.css"?>
+<?xml-stylesheet href="chrome://browser/content/torpreferences/torPreferences.css"?>
+
+<window type="child"
+ xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+ xmlns:html="http://www.w3.org/1999/xhtml">
+<dialog id="torPreferences-connection-dialog"
+ buttons="accept,cancel">
+ <html:h3 id="torPreferences-connection-header"></html:h3>
+ <!-- Local Proxy -->
+ <checkbox id="torPreferences-connection-toggleProxy" label=""/>
+ <box id="torPreferences-connection-grid">
+ <hbox class="indent" align="center">
+ <label id="torPreferences-localProxy-type"/>
+ </hbox>
+ <hbox align="center">
+ <spacer flex="1"/>
+ <menulist id="torPreferences-localProxy-builtinList" class="torMarginFix">
+ <menupopup/>
+ </menulist>
+ </hbox>
+ <hbox class="indent" align="center">
+ <label id="torPreferences-localProxy-address"/>
+ </hbox>
+ <hbox align="center">
+ <html:input id="torPreferences-localProxy-textboxAddress" type="text" class="torMarginFix"/>
+ <label id="torPreferences-localProxy-port"/>
+ <!-- proxy-port-input class style pulled from preferences.css and used in the vanilla proxy setup menu -->
+ <html:input id="torPreferences-localProxy-textboxPort" class="proxy-port-input torMarginFix" hidespinbuttons="true" type="number" min="0" max="65535" maxlength="5"/>
+ </hbox>
+ <hbox class="indent" align="center">
+ <label id="torPreferences-localProxy-username"/>
+ </hbox>
+ <hbox align="center">
+ <html:input id="torPreferences-localProxy-textboxUsername" type="text" class="torMarginFix"/>
+ <label id="torPreferences-localProxy-password"/>
+ <html:input id="torPreferences-localProxy-textboxPassword" class="torMarginFix" type="password"/>
+ </hbox>
+ </box>
+ <!-- Firewall -->
+ <checkbox id="torPreferences-connection-toggleFirewall" label=""/>
+ <box id="torPreferences-connection-firewall">
+ <hbox class="indent" align="center">
+ <label id="torPreferences-connection-allowedPorts"/>
+ </hbox>
+ <hbox id="torPreferences-connection-hboxAllowedPorts" align="center">
+ <html:input id="torPreferences-connection-textboxAllowedPorts" type="text" class="torMarginFix" value="80,443"/>
+ </hbox>
+ </box>
+ <script type="application/javascript"><![CDATA[
+ "use strict";
+
+ let connectionSettingsDialog = window.arguments[0];
+ let dialog = document.getElementById("torPreferences-connection-dialog");
+ connectionSettingsDialog.init(window, dialog);
+ ]]></script>
+</dialog>
+</window>
diff --git a/browser/components/torpreferences/content/network.svg b/browser/components/torpreferences/content/network.svg
new file mode 100644
index 0000000000000..e1689b5e6d649
--- /dev/null
+++ b/browser/components/torpreferences/content/network.svg
@@ -0,0 +1,6 @@
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" width="16" height="16" fill="context-fill" fill-opacity="context-fill-opacity">
+ <path d="M8.5 1a7.5 7.5 0 1 0 0 15 7.5 7.5 0 0 0 0-15zm2.447 1.75a6.255 6.255 0 0 1 3.756 5.125l-2.229 0A9.426 9.426 0 0 0 10.54 2.75l.407 0zm-2.049 0a8.211 8.211 0 0 1 2.321 5.125l-5.438 0A8.211 8.211 0 0 1 8.102 2.75l.796 0zm-2.846 0 .408 0a9.434 9.434 0 0 0-1.934 5.125l-2.229 0A6.254 6.254 0 0 1 6.052 2.75zm0 11.5a6.252 6.252 0 0 1-3.755-5.125l2.229 0A9.426 9.426 0 0 0 6.46 14.25l-.408 0zm2.05 0a8.211 8.211 0 0 1-2.321-5.125l5.437 0a8.211 8.211 0 0 1-2.321 5.125l-.795 0zm2.846 0-.40 [...]
+</svg>
diff --git a/browser/components/torpreferences/content/provideBridgeDialog.jsm b/browser/components/torpreferences/content/provideBridgeDialog.jsm
new file mode 100644
index 0000000000000..bc6a841138fb6
--- /dev/null
+++ b/browser/components/torpreferences/content/provideBridgeDialog.jsm
@@ -0,0 +1,72 @@
+"use strict";
+
+var EXPORTED_SYMBOLS = ["ProvideBridgeDialog"];
+
+const { TorStrings } = ChromeUtils.import("resource:///modules/TorStrings.jsm");
+
+const { TorSettings, TorBridgeSource } = ChromeUtils.import(
+ "resource:///modules/TorSettings.jsm"
+);
+
+class ProvideBridgeDialog {
+ constructor() {
+ this._dialog = null;
+ this._textarea = null;
+ this._bridgeString = "";
+ }
+
+ static get selectors() {
+ return {
+ header: "#torPreferences-provideBridge-header",
+ textarea: "#torPreferences-provideBridge-textarea",
+ };
+ }
+
+ _populateXUL(window, aDialog) {
+ const selectors = ProvideBridgeDialog.selectors;
+
+ this._dialog = aDialog;
+ const dialogWin = this._dialog.parentElement;
+ dialogWin.setAttribute("title", TorStrings.settings.provideBridgeTitle);
+ this._dialog.querySelector(selectors.header).textContent =
+ TorStrings.settings.provideBridgeHeader;
+ this._textarea = this._dialog.querySelector(selectors.textarea);
+ this._textarea.setAttribute(
+ "placeholder",
+ TorStrings.settings.provideBridgePlaceholder
+ );
+ if (TorSettings.bridges.source == TorBridgeSource.UserProvided) {
+ this._textarea.value = TorSettings.bridges.bridge_strings.join("\n");
+ }
+
+ this._dialog.addEventListener("dialogaccept", e => {
+ this._bridgeString = this._textarea.value;
+ });
+ this._dialog.addEventListener("dialoghelp", e => {
+ window.top.openTrustedLinkIn(
+ TorStrings.settings.learnMoreBridgesURL,
+ "tab"
+ );
+ });
+ }
+
+ init(window, aDialog) {
+ // defer to later until firefox has populated the dialog with all our elements
+ window.setTimeout(() => {
+ this._populateXUL(window, aDialog);
+ }, 0);
+ }
+
+ openDialog(gSubDialog, aCloseCallback) {
+ gSubDialog.open(
+ "chrome://browser/content/torpreferences/provideBridgeDialog.xhtml",
+ {
+ features: "resizable=yes",
+ closingCallback: () => {
+ aCloseCallback(this._bridgeString);
+ },
+ },
+ this
+ );
+ }
+}
diff --git a/browser/components/torpreferences/content/provideBridgeDialog.xhtml b/browser/components/torpreferences/content/provideBridgeDialog.xhtml
new file mode 100644
index 0000000000000..28d19cadaf9c9
--- /dev/null
+++ b/browser/components/torpreferences/content/provideBridgeDialog.xhtml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
+<?xml-stylesheet href="chrome://browser/skin/preferences/preferences.css"?>
+<?xml-stylesheet href="chrome://browser/content/torpreferences/torPreferences.css"?>
+
+<window type="child"
+ xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+ xmlns:html="http://www.w3.org/1999/xhtml">
+<dialog id="torPreferences-provideBridge-dialog"
+ buttons="help,accept,cancel">
+ <html:h3 id="torPreferences-provideBridge-header"></html:h3>
+ <html:textarea id="torPreferences-provideBridge-textarea" multiline="true" rows="3"/>
+ <script type="application/javascript"><![CDATA[
+ "use strict";
+
+ let provideBridgeDialog = window.arguments[0];
+ let dialog = document.getElementById("torPreferences-provideBridge-dialog");
+ provideBridgeDialog.init(window, dialog);
+ ]]></script>
+</dialog>
+</window>
diff --git a/browser/components/torpreferences/content/requestBridgeDialog.jsm b/browser/components/torpreferences/content/requestBridgeDialog.jsm
new file mode 100644
index 0000000000000..9b8cd6db0a9b9
--- /dev/null
+++ b/browser/components/torpreferences/content/requestBridgeDialog.jsm
@@ -0,0 +1,211 @@
+"use strict";
+
+var EXPORTED_SYMBOLS = ["RequestBridgeDialog"];
+
+const { BridgeDB } = ChromeUtils.import("resource:///modules/BridgeDB.jsm");
+const { TorStrings } = ChromeUtils.import("resource:///modules/TorStrings.jsm");
+
+class RequestBridgeDialog {
+ constructor() {
+ this._dialog = null;
+ this._submitButton = null;
+ this._dialogHeader = null;
+ this._captchaImage = null;
+ this._captchaEntryTextbox = null;
+ this._captchaRefreshButton = null;
+ this._incorrectCaptchaHbox = null;
+ this._incorrectCaptchaLabel = null;
+ this._bridges = [];
+ }
+
+ static get selectors() {
+ return {
+ submitButton:
+ "accept" /* not really a selector but a key for dialog's getButton */,
+ dialogHeader: "h3#torPreferences-requestBridge-header",
+ captchaImage: "image#torPreferences-requestBridge-captchaImage",
+ captchaEntryTextbox: "input#torPreferences-requestBridge-captchaTextbox",
+ refreshCaptchaButton:
+ "button#torPreferences-requestBridge-refreshCaptchaButton",
+ incorrectCaptchaHbox:
+ "hbox#torPreferences-requestBridge-incorrectCaptchaHbox",
+ incorrectCaptchaLabel:
+ "label#torPreferences-requestBridge-incorrectCaptchaError",
+ };
+ }
+
+ _populateXUL(window, dialog) {
+ const selectors = RequestBridgeDialog.selectors;
+
+ this._dialog = dialog;
+ const dialogWin = dialog.parentElement;
+ dialogWin.setAttribute(
+ "title",
+ TorStrings.settings.requestBridgeDialogTitle
+ );
+ // user may have opened a Request Bridge dialog in another tab, so update the
+ // CAPTCHA image or close out the dialog if we have a bridge list
+ this._dialog.addEventListener("focusin", () => {
+ const uri = BridgeDB.currentCaptchaImage;
+ const bridges = BridgeDB.currentBridges;
+
+ // new captcha image
+ if (uri) {
+ this._setcaptchaImage(uri);
+ } else if (bridges) {
+ this._bridges = bridges;
+ this._submitButton.disabled = false;
+ this._dialog.cancelDialog();
+ }
+ });
+
+ this._submitButton = this._dialog.getButton(selectors.submitButton);
+ this._submitButton.setAttribute("label", TorStrings.settings.submitCaptcha);
+ this._submitButton.disabled = true;
+ this._dialog.addEventListener("dialogaccept", e => {
+ e.preventDefault();
+ this.onSubmitCaptcha();
+ });
+ this._dialog.addEventListener("dialoghelp", e => {
+ window.top.openTrustedLinkIn(
+ TorStrings.settings.learnMoreBridgesURL,
+ "tab"
+ );
+ });
+
+ this._dialogHeader = this._dialog.querySelector(selectors.dialogHeader);
+ this._dialogHeader.textContent = TorStrings.settings.contactingBridgeDB;
+
+ this._captchaImage = this._dialog.querySelector(selectors.captchaImage);
+
+ // request captcha from bridge db
+ BridgeDB.requestNewCaptchaImage().then(uri => {
+ this._setcaptchaImage(uri);
+ });
+
+ this._captchaEntryTextbox = this._dialog.querySelector(
+ selectors.captchaEntryTextbox
+ );
+ this._captchaEntryTextbox.setAttribute(
+ "placeholder",
+ TorStrings.settings.captchaTextboxPlaceholder
+ );
+ this._captchaEntryTextbox.disabled = true;
+ // disable submit if entry textbox is empty
+ this._captchaEntryTextbox.oninput = () => {
+ this._submitButton.disabled = this._captchaEntryTextbox.value == "";
+ };
+
+ this._captchaRefreshButton = this._dialog.querySelector(
+ selectors.refreshCaptchaButton
+ );
+ this._captchaRefreshButton.disabled = true;
+
+ this._incorrectCaptchaHbox = this._dialog.querySelector(
+ selectors.incorrectCaptchaHbox
+ );
+ this._incorrectCaptchaLabel = this._dialog.querySelector(
+ selectors.incorrectCaptchaLabel
+ );
+ this._incorrectCaptchaLabel.setAttribute(
+ "value",
+ TorStrings.settings.incorrectCaptcha
+ );
+
+ return true;
+ }
+
+ _setcaptchaImage(uri) {
+ if (uri != this._captchaImage.src) {
+ this._captchaImage.src = uri;
+ this._dialogHeader.textContent = TorStrings.settings.solveTheCaptcha;
+ this._setUIDisabled(false);
+ this._captchaEntryTextbox.focus();
+ this._captchaEntryTextbox.select();
+ }
+ }
+
+ _setUIDisabled(disabled) {
+ this._submitButton.disabled = this._captchaGuessIsEmpty() || disabled;
+ this._captchaEntryTextbox.disabled = disabled;
+ this._captchaRefreshButton.disabled = disabled;
+ }
+
+ _captchaGuessIsEmpty() {
+ return this._captchaEntryTextbox.value == "";
+ }
+
+ init(window, dialog) {
+ // defer to later until firefox has populated the dialog with all our elements
+ window.setTimeout(() => {
+ this._populateXUL(window, dialog);
+ }, 0);
+ }
+
+ close() {
+ BridgeDB.close();
+ }
+
+ /*
+ Event Handlers
+ */
+ onSubmitCaptcha() {
+ let captchaText = this._captchaEntryTextbox.value.trim();
+ // noop if the field is empty
+ if (captchaText == "") {
+ return;
+ }
+
+ // freeze ui while we make request
+ this._setUIDisabled(true);
+ this._incorrectCaptchaHbox.style.visibility = "hidden";
+
+ BridgeDB.submitCaptchaGuess(captchaText)
+ .then(aBridges => {
+ if (aBridges) {
+ this._bridges = aBridges;
+ this._submitButton.disabled = false;
+ // This was successful, but use cancelDialog() to close, since
+ // we intercept the `dialogaccept` event.
+ this._dialog.cancelDialog();
+ } else {
+ this._bridges = [];
+ this._setUIDisabled(false);
+ this._incorrectCaptchaHbox.style.visibility = "visible";
+ }
+ })
+ .catch(aError => {
+ // TODO: handle other errors properly here when we do the bridge settings re-design
+ this._bridges = [];
+ this._setUIDisabled(false);
+ this._incorrectCaptchaHbox.style.visibility = "visible";
+ console.log(aError);
+ });
+ }
+
+ onRefreshCaptcha() {
+ this._setUIDisabled(true);
+ this._captchaImage.src = "";
+ this._dialogHeader.textContent = TorStrings.settings.contactingBridgeDB;
+ this._captchaEntryTextbox.value = "";
+ this._incorrectCaptchaHbox.style.visibility = "hidden";
+
+ BridgeDB.requestNewCaptchaImage().then(uri => {
+ this._setcaptchaImage(uri);
+ });
+ }
+
+ openDialog(gSubDialog, aCloseCallback) {
+ gSubDialog.open(
+ "chrome://browser/content/torpreferences/requestBridgeDialog.xhtml",
+ {
+ features: "resizable=yes",
+ closingCallback: () => {
+ this.close();
+ aCloseCallback(this._bridges);
+ },
+ },
+ this
+ );
+ }
+}
diff --git a/browser/components/torpreferences/content/requestBridgeDialog.xhtml b/browser/components/torpreferences/content/requestBridgeDialog.xhtml
new file mode 100644
index 0000000000000..b7286528a8a5a
--- /dev/null
+++ b/browser/components/torpreferences/content/requestBridgeDialog.xhtml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
+<?xml-stylesheet href="chrome://browser/skin/preferences/preferences.css"?>
+<?xml-stylesheet href="chrome://browser/content/torpreferences/torPreferences.css"?>
+
+<window type="child"
+ xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+ xmlns:html="http://www.w3.org/1999/xhtml">
+<dialog id="torPreferences-requestBridge-dialog"
+ buttons="help,accept,cancel">
+ <!-- ok, so is a zero-width space. We need to have *something* in the innerText so that XUL knows how tall the
+ title node is so that it can determine how large to make the dialog element's inner draw area. If we have nothing
+ in the innerText, then it collapse to 0 height, and the contents of the dialog ends up partially hidden >:( -->
+ <html:h3 id="torPreferences-requestBridge-header"></html:h3>
+ <!-- init to transparent 400x125 png -->
+ <image id="torPreferences-requestBridge-captchaImage" flex="1"/>
+ <hbox id="torPreferences-requestBridge-inputHbox">
+ <html:input id="torPreferences-requestBridge-captchaTextbox" type="text" style="-moz-box-flex: 1;"/>
+ <button id="torPreferences-requestBridge-refreshCaptchaButton"
+ image="chrome://browser/skin/reload.svg"
+ oncommand="requestBridgeDialog.onRefreshCaptcha();"/>
+ </hbox>
+ <hbox id="torPreferences-requestBridge-incorrectCaptchaHbox" align="center">
+ <image id="torPreferences-requestBridge-errorIcon" />
+ <label id="torPreferences-requestBridge-incorrectCaptchaError" flex="1"/>
+ </hbox>
+ <script type="application/javascript"><![CDATA[
+ "use strict";
+
+ let requestBridgeDialog = window.arguments[0];
+ let dialog = document.getElementById("torPreferences-requestBridge-dialog");
+ requestBridgeDialog.init(window, dialog);
+ ]]></script>
+</dialog>
+</window>
diff --git a/browser/components/torpreferences/content/torLogDialog.jsm b/browser/components/torpreferences/content/torLogDialog.jsm
new file mode 100644
index 0000000000000..94a57b9b165ee
--- /dev/null
+++ b/browser/components/torpreferences/content/torLogDialog.jsm
@@ -0,0 +1,84 @@
+"use strict";
+
+var EXPORTED_SYMBOLS = ["TorLogDialog"];
+
+const { setTimeout, clearTimeout } = ChromeUtils.import(
+ "resource://gre/modules/Timer.jsm"
+);
+
+const { TorProtocolService } = ChromeUtils.import(
+ "resource:///modules/TorProtocolService.jsm"
+);
+const { TorStrings } = ChromeUtils.import("resource:///modules/TorStrings.jsm");
+
+class TorLogDialog {
+ constructor() {
+ this._dialog = null;
+ this._logTextarea = null;
+ this._copyLogButton = null;
+ this._restoreButtonTimeout = null;
+ }
+
+ static get selectors() {
+ return {
+ copyLogButton: "extra1",
+ logTextarea: "textarea#torPreferences-torDialog-textarea",
+ };
+ }
+
+ _populateXUL(aDialog) {
+ this._dialog = aDialog;
+ const dialogWin = this._dialog.parentElement;
+ dialogWin.setAttribute("title", TorStrings.settings.torLogDialogTitle);
+
+ this._logTextarea = this._dialog.querySelector(
+ TorLogDialog.selectors.logTextarea
+ );
+
+ this._copyLogButton = this._dialog.getButton(
+ TorLogDialog.selectors.copyLogButton
+ );
+ this._copyLogButton.setAttribute("label", TorStrings.settings.copyLog);
+ this._copyLogButton.addEventListener("command", () => {
+ this.copyTorLog();
+ const label = this._copyLogButton.querySelector("label");
+ label.setAttribute("value", TorStrings.settings.copied);
+ this._copyLogButton.classList.add("primary");
+
+ const RESTORE_TIME = 1200;
+ if (this._restoreButtonTimeout !== null) {
+ clearTimeout(this._restoreButtonTimeout);
+ }
+ this._restoreButtonTimeout = setTimeout(() => {
+ label.setAttribute("value", TorStrings.settings.copyLog);
+ this._copyLogButton.classList.remove("primary");
+ this._restoreButtonTimeout = null;
+ }, RESTORE_TIME);
+ });
+
+ this._logTextarea.value = TorProtocolService.getLog();
+ }
+
+ init(window, aDialog) {
+ // defer to later until firefox has populated the dialog with all our elements
+ window.setTimeout(() => {
+ this._populateXUL(aDialog);
+ }, 0);
+ }
+
+ copyTorLog() {
+ // Copy tor log messages to the system clipboard.
+ let clipboard = Cc["@mozilla.org/widget/clipboardhelper;1"].getService(
+ Ci.nsIClipboardHelper
+ );
+ clipboard.copyString(this._logTextarea.value);
+ }
+
+ openDialog(gSubDialog) {
+ gSubDialog.open(
+ "chrome://browser/content/torpreferences/torLogDialog.xhtml",
+ { features: "resizable=yes" },
+ this
+ );
+ }
+}
diff --git a/browser/components/torpreferences/content/torLogDialog.xhtml b/browser/components/torpreferences/content/torLogDialog.xhtml
new file mode 100644
index 0000000000000..9c17f8132978d
--- /dev/null
+++ b/browser/components/torpreferences/content/torLogDialog.xhtml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
+<?xml-stylesheet href="chrome://browser/skin/preferences/preferences.css"?>
+<?xml-stylesheet href="chrome://browser/content/torpreferences/torPreferences.css"?>
+
+<window type="child"
+ xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+ xmlns:html="http://www.w3.org/1999/xhtml">
+<dialog id="torPreferences-torLog-dialog"
+ buttons="accept,extra1">
+ <html:textarea
+ id="torPreferences-torDialog-textarea"
+ multiline="true"
+ readonly="true"/>
+ <script type="application/javascript"><![CDATA[
+ "use strict";
+
+ let torLogDialog = window.arguments[0];
+ let dialog = document.getElementById("torPreferences-torLog-dialog");
+ torLogDialog.init(window, dialog);
+ ]]></script>
+</dialog>
+</window>
\ No newline at end of file
diff --git a/browser/components/torpreferences/content/torPreferences.css b/browser/components/torpreferences/content/torPreferences.css
new file mode 100644
index 0000000000000..b13cbec1603be
--- /dev/null
+++ b/browser/components/torpreferences/content/torPreferences.css
@@ -0,0 +1,714 @@
+ at import url("chrome://branding/content/tor-styles.css");
+
+#category-connection > .category-icon {
+ list-style-image: url("chrome://browser/content/torpreferences/torPreferencesIcon.svg");
+}
+
+html:dir(rtl) input[type="checkbox"].toggle-button::before {
+ /* For some reason, the rule from toggle-button.css is not applied... */
+ scale: -1;
+}
+
+/* Connect Message Box */
+
+#torPreferences-connectMessageBox {
+ display: block;
+ position: relative;
+
+ width: auto;
+ min-height: 32px;
+ border-radius: 4px;
+ padding: 8px;
+}
+
+#torPreferences-connectMessageBox.hidden {
+ display: none;
+}
+
+#torPreferences-connectMessageBox.error {
+ background-color: var(--red-60);
+ color: white;
+}
+
+#torPreferences-connectMessageBox.warning {
+ background-color: var(--purple-50);
+ color: white;
+}
+
+#torPreferences-connectMessageBox table {
+ border-collapse: collapse;
+}
+
+#torPreferences-connectMessageBox td {
+ vertical-align: middle;
+}
+
+#torPreferences-connectMessageBox td:first-child {
+ width: 16px;
+}
+
+#torPreferences-connectMessageBox-icon {
+ width: 16px;
+ height: 16px;
+
+ mask-repeat: no-repeat !important;
+ mask-size: 16px !important;
+}
+
+#torPreferences-connectMessageBox.error #torPreferences-connectMessageBox-icon
+{
+ mask: url("chrome://browser/skin/onion-slash.svg");
+ background-color: white;
+}
+
+#torPreferences-connectMessageBox.warning #torPreferences-connectMessageBox-icon
+{
+ mask: url("chrome://browser/skin/onion.svg");
+ background-color: white;
+}
+
+#torPreferences-connectMessageBox-message {
+ line-height: 16px;
+ padding-inline-start: 8px;
+}
+
+#torPreferences-connectMessageBox-button {
+ display: block;
+ width: auto;
+
+ border-radius: 4px;
+ border: 0;
+
+ padding-inline: 18px;
+ padding-block: 8px;
+ margin-block: 0px;
+ margin-inline-start: 8px;
+ margin-inline-end: 0px;
+
+ font-size: 1.0em;
+ font-weight: 600;
+ white-space: nowrap;
+
+ color: white;
+}
+
+#torPreferences-connectMessageBox.error #torPreferences-connectMessageBox-button {
+ background-color: var(--red-70);
+}
+
+#torPreferences-connectMessageBox.error #torPreferences-connectMessageBox-button:hover {
+ background-color: var(--red-80);
+}
+
+#torPreferences-connectMessageBox.error #torPreferences-connectMessageBox-button:active {
+ background-color: var(--red-90);
+}
+
+#torPreferences-connectMessageBox.warning #torPreferences-connectMessageBox-button {
+ background-color: var(--purple-70);
+}
+
+#torPreferences-connectMessageBox.warning #torPreferences-connectMessageBox-button:hover {
+ background-color: var(--purple-80);
+}
+
+#torPreferences-connectMessageBox.warning #torPreferences-connectMessageBox-button:active {
+ background-color: var(--purple-90);
+}
+
+/* Status */
+#torPreferences-status-box {
+ display: flex;
+ align-items: center;
+}
+
+#torPreferences-status-internet-icon, #torPreferences-status-tor-icon {
+ width: 18px;
+ height: 18px;
+ margin-inline-end: 8px;
+}
+
+#torPreferences-status-internet-label, #torPreferences-status-tor-label {
+ font-weight: bold;
+}
+
+#torPreferences-status-internet-icon {
+ list-style-image: url("chrome://browser/content/torpreferences/network.svg");
+}
+
+#torPreferences-status-internet-statusIcon.online,
+#torPreferences-status-internet-statusIcon.offline,
+#torPreferences-status-tor-statusIcon {
+ margin-inline-start: 12px;
+ margin-inline-end: 9px;
+}
+
+#torPreferences-status-internet-statusIcon.online, #torPreferences-status-tor-statusIcon.connected {
+ list-style-image: url("chrome://browser/content/torpreferences/check.svg");
+ -moz-context-properties: fill;
+ fill: var(--purple-60);
+}
+
+ at media (-moz-toolbar-prefers-color-scheme: dark) {
+ #torPreferences-status-internet-statusIcon.online, #torPreferences-status-tor-statusIcon.connected {
+ fill: var(--purple-30);
+ }
+}
+
+#torPreferences-status-internet-status {
+ margin-inline-end: 32px;
+}
+
+#torPreferences-status-tor-icon {
+ list-style-image: url("chrome://browser/skin/onion.svg");
+}
+
+#torPreferences-status-internet-icon, #torPreferences-status-tor-icon {
+ -moz-context-properties: fill;
+ fill: var(--in-content-text-color);
+}
+
+#torPreferences-status-tor-statusIcon, #torPreferences-status-internet-statusIcon.offline {
+ list-style-image: url("chrome://browser/skin/warning.svg");
+}
+
+#torPreferences-status-tor-statusIcon.blocked {
+ -moz-context-properties: fill;
+ fill: var(--red-60);
+}
+
+/* Bridge settings */
+#torPreferences-bridges-location {
+ width: 280px;
+}
+
+#torPreferences-bridges-location menuitem[disabled="true"] {
+ color: var(--in-content-button-text-color, inherit);
+ font-weight: 700;
+}
+
+/* Bridge cards */
+:root {
+ --bridgeCard-animation-time: 0.25s;
+}
+
+#torPreferences-currentBridges-cards {
+ /* The padding is needed because the mask-image creates an unexpected result
+ otherwise... */
+ padding: 24px 4px;
+}
+
+#torPreferences-currentBridges-cards.list-collapsed {
+ mask-image: linear-gradient(rgb(0, 0, 0) 0% 75%, rgba(0, 0, 0, 0.1));
+}
+
+#torPreferences-currentBridges-cards.disabled {
+ opacity: 0.4;
+}
+
+.torPreferences-bridgeCard {
+ padding: 16px 12px;
+ /* define border-radius here because of the transition */
+ border-radius: 4px;
+ transition: margin var(--bridgeCard-animation-time), box-shadow 150ms;
+ cursor: pointer;
+}
+
+.torPreferences-bridgeCard.expanded,
+.torPreferences-bridgeCard.currently-connected,
+.single-card .torPreferences-bridgeCard {
+ margin: 12px 0;
+ background: var(--in-content-box-background);
+ box-shadow: var(--card-shadow);
+}
+
+.torPreferences-bridgeCard:hover {
+ background: var(--in-content-box-background);
+ box-shadow: var(--card-shadow-hover);
+}
+
+.single-card .torPreferences-bridgeCard,
+.torPreferences-bridgeCard.currently-connected {
+ cursor: default;
+}
+
+.torPreferences-bridgeCard-heading {
+ display: flex;
+ align-items: center;
+}
+
+.torPreferences-bridgeCard-id {
+ display: flex;
+ align-items: center;
+ font-weight: 700;
+}
+
+.torPreferences-bridgeCard-id .emoji {
+ width: 20px;
+ height: 20px;
+ margin-inline-start: 4px;
+ padding: 4px;
+ font-size: 20px;
+ border-radius: 4px;
+ background: var(--in-content-box-background-odd);
+}
+
+.torPreferences-bridgeCard-headingAddr {
+ /* flex extends the element when needed, but without setting a width (any) the
+ overflow + ellipses does not work. */
+ width: 20px;
+ flex: 1;
+ margin: 0 8px;
+ overflow: hidden;
+ color: var(--in-content-deemphasized-text);
+ white-space: nowrap;
+ text-overflow: ellipsis;
+}
+
+.expanded .torPreferences-bridgeCard-headingAddr,
+.currently-connected .torPreferences-bridgeCard-headingAddr,
+.single-card .torPreferences-bridgeCard-headingAddr {
+ display: none;
+}
+
+.torPreferences-bridgeCard-buttons {
+ display: flex;
+ align-items: center;
+ margin-inline-start: auto;
+ align-self: center;
+}
+
+.torPreferences-bridgeCard-connectedBadge {
+ display: none;
+ margin-inline-end: 12px;
+ color: var(--purple-60);
+}
+
+ at media (-moz-toolbar-prefers-color-scheme: dark) {
+ .torPreferences-bridgeCard-connectedBadge {
+ color: var(--purple-30);
+ }
+}
+
+.currently-connected .torPreferences-bridgeCard-connectedBadge {
+ display: flex;
+}
+
+.torPreferences-bridgeCard-connectedIcon {
+ margin-inline-start: 1px;
+ margin-inline-end: 7px;
+ list-style-image: url("chrome://browser/content/torpreferences/check.svg");
+ -moz-context-properties: fill;
+ fill: currentColor;
+}
+
+.torPreferences-bridgeCard-options {
+ width: 24px;
+ min-width: 0;
+ height: 24px;
+ min-height: 0;
+ margin-inline-start: 8px;
+ padding: 1px;
+ background-image: url("chrome://global/skin/icons/more.svg");
+ background-repeat: no-repeat;
+ background-position: center center;
+ fill: currentColor;
+ -moz-context-properties: fill;
+}
+
+#torPreferences-bridgeCard-menu menuitem {
+ fill: currentColor;
+ -moz-context-properties: fill;
+}
+
+.torPreferences-bridgeCard-qrWrapper {
+ grid-area: bridge-qr;
+ display: block; /* So it doesn't stretch the child vertically. */
+ margin-inline-end: 14px;
+}
+
+.torPreferences-bridgeCard-qr {
+ --qr-one: black;
+ --qr-zero: white;
+ background: var(--qr-zero);
+ position: relative;
+ padding: 4px;
+ border-radius: 2px;
+}
+
+.torPreferences-bridgeCard-qrCode {
+ width: 112px;
+ height: 112px;
+ /* Define these colors, as they will be passed to the QR code library */
+ background: var(--qr-zero);
+ color: var(--qr-one);
+}
+
+.torPreferences-bridgeCard-qrOnionBox {
+ width: 28px;
+ height: 28px;
+ position: absolute;
+ top: calc(50% - 14px);
+ inset-inline-start: calc(50% - 14px);
+ background: var(--qr-zero);
+}
+
+.torPreferences-bridgeCard-qrOnion {
+ width: 16px;
+ height: 16px;
+ position: absolute;
+ top: calc(50% - 8px);
+ inset-inline-start: calc(50% - 8px);
+
+ mask: url("chrome://browser/skin/onion.svg");
+ mask-repeat: no-repeat;
+ mask-size: 16px;
+ background: var(--qr-one);
+}
+
+.torPreferences-bridgeCard-qr:hover .torPreferences-bridgeCard-qrOnionBox {
+ background: var(--qr-one);
+}
+
+.torPreferences-bridgeCard-qr:hover .torPreferences-bridgeCard-qrOnion {
+ mask: url("chrome://global/skin/icons/search-glass.svg");
+ background: var(--qr-zero);
+}
+
+.torPreferences-bridgeCard-grid {
+ height: 0; /* We will set it in JS when expanding it! */
+ display: grid;
+ grid-template-rows: auto 1fr;
+ grid-template-columns: auto 1fr auto;
+ grid-template-areas:
+ 'bridge-qr bridge-share bridge-share'
+ 'bridge-qr bridge-address bridge-address'
+ 'bridge-qr bridge-learn-more bridge-copy';
+ padding-top: 12px;
+ visibility: hidden;
+}
+
+.expanded .torPreferences-bridgeCard-grid,
+.currently-connected .torPreferences-bridgeCard-grid,
+.single-card .torPreferences-bridgeCard-grid {
+ visibility: visible;
+}
+
+.currently-connected .torPreferences-bridgeCard-grid,
+.single-card .torPreferences-bridgeCard-grid {
+ height: auto;
+}
+
+.torPreferences-bridgeCard-grid.to-animate {
+ transition: height var(--bridgeCard-animation-time) ease-out, visibility var(--bridgeCard-animation-time);
+ overflow: hidden;
+}
+
+.torPreferences-bridgeCard-share {
+ grid-area: bridge-share;
+}
+
+.torPreferences-bridgeCard-addrBox {
+ grid-area: bridge-address;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ margin: 8px 0;
+}
+
+input.torPreferences-bridgeCard-addr {
+ width: 100%;
+ color: var(--in-content-deemphasized-text);
+}
+
+.torPreferences-bridgeCard-leranMoreBox {
+ grid-area: bridge-learn-more;
+}
+
+.torPreferences-bridgeCard-copy {
+ grid-area: bridge-copy;
+}
+
+#torPreferences-bridgeCard-template {
+ display: none;
+}
+
+/* Advanced Settings */
+#torPreferences-advanced-grid {
+ display: grid;
+ grid-template-columns: 1fr auto;
+}
+
+#torPreferences-advanced-group button {
+ min-width: 150px;
+}
+
+#torPreferences-advanced-hbox, #torPreferences-torDaemon-hbox {
+ padding-inline-end: 15px;
+}
+
+h3#torPreferences-requestBridge-header {
+ margin: 0;
+}
+
+image#torPreferences-requestBridge-captchaImage {
+ margin: 16px 0 8px 0;
+ min-height: 140px;
+}
+
+button#torPreferences-requestBridge-refreshCaptchaButton {
+ min-width: initial;
+}
+
+#torPreferences-requestBridge-refreshCaptchaButton image {
+ -moz-context-properties: fill;
+ fill: currentColor;
+}
+
+dialog#torPreferences-requestBridge-dialog > hbox {
+ margin-bottom: 1em;
+}
+
+/*
+ Various elements that really should be lining up don't because they have inconsistent margins
+*/
+.torMarginFix {
+ margin-left : 4px;
+ margin-right : 4px;
+}
+
+/* Show bridge QR dialog */
+#bridgeQr {
+ /* Some readers don't recognize QRs with inverted colors, so let's make
+ the ones are darker than zeroes. See
+ https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/41049 */
+ --qr-one: black;
+ --qr-zero: white;
+ background: var(--qr-zero);
+ position: relative;
+ /* Padding is needed in case the dark theme is used so the bits don't blend
+ with whatever the default background color is. */
+ padding: 10px;
+ margin: auto;
+ margin-bottom: 20px;
+ max-width: max-content;
+ border-radius: 5px;
+}
+
+#bridgeQr-target {
+ width: 300px;
+ height: 300px;
+ background: var(--qr-zero);
+ color: var(--qr-one);
+}
+
+#bridgeQr-onionBox {
+ position: absolute;
+ width: 70px;
+ height: 70px;
+ top: calc(50% - 35px);
+ left: calc(50% - 35px);
+ background-color: var(--qr-zero);
+}
+
+#bridgeQr-onion {
+ position: absolute;
+ width: 38px;
+ height: 38px;
+ top: calc(50% - 19px);
+ left: calc(50% - 19px);
+ mask: url("chrome://browser/skin/onion.svg");
+ mask-repeat: no-repeat;
+ mask-size: 38px;
+ background: var(--qr-one);
+}
+
+/* Builtin bridge dialog */
+#torPreferences-builtinBridge-dialog {
+ /* Hack: ask XUL to load with a lot of space, then we will remove the minimum
+ sizes after we populate the string. Users with high resolutions should see a
+ big dialog, but with all the needed buttons, users with small resolutions
+ should see scrollbars.
+ Known problems:
+ 1) the hack works only if a window is *already* small: if it is big, and then
+ it is resized, the dialog will not shrink;
+ 2) horizontal scrollbars are never added.
+ The proper solution for this will be loading the localized string with
+ Mozilla's way.
+ See also https://gitlab.torproject.org/tpo/applications/tor-browser/-/issues/41044 */
+ min-width: 700px;
+ min-height: 550px;
+}
+
+#torPreferences-builtinBridge-header {
+ margin: 8px 0 10px 0;
+}
+
+#torPreferences-builtinBridge-description {
+ margin-bottom: 18px;
+}
+
+#torPreferences-builtinBridge-typeSelection {
+ margin-bottom: 16px;
+}
+
+#torPreferences-builtinBridge-typeSelection radio label {
+ font-weight: 700;
+}
+
+/* Request bridge dialog */
+/*
+ This hbox is hidden by css here by default so that the
+ xul dialog allocates enough screen space for the error message
+ element, otherwise it gets cut off since dialog's overflow is hidden
+*/
+hbox#torPreferences-requestBridge-incorrectCaptchaHbox {
+ visibility: hidden;
+}
+
+image#torPreferences-requestBridge-errorIcon {
+ list-style-image: url("chrome://browser/skin/warning.svg");
+}
+
+groupbox#torPreferences-bridges-group textarea {
+ white-space: pre;
+ overflow: auto;
+}
+
+/* Provide bridge dialog */
+#torPreferences-provideBridge-header {
+ margin-top: 8px;
+}
+
+/* Connection settings dialog */
+#torPreferences-connection-dialog {
+ /* Hack: like the built-in dialog */
+ min-width: 700px;
+ min-height: 550px;
+}
+
+#torPreferences-connection-header {
+ margin: 4px 0 14px 0;
+}
+
+#torPreferences-connection-grid {
+ display: grid;
+ grid-template-columns: auto 1fr;
+}
+
+#torPreferences-localProxy-textboxAddress,
+#torPreferences-localProxy-textboxUsername,
+#torPreferences-localProxy-textboxPassword,
+#torPreferences-connection-textboxAllowedPorts {
+ -moz-box-flex: 1;
+}
+
+#torPreferences-connection-firewall {
+ display: flex;
+}
+
+#torPreferences-connection-hboxAllowedPorts {
+ flex: 1;
+}
+
+/* Tor logs dialog */
+textarea#torPreferences-torDialog-textarea {
+ -moz-box-flex: 1;
+ font-family: monospace;
+ font-size: 0.8em;
+ white-space: pre;
+ overflow: auto;
+ /* 10 lines */
+ min-height: 20em;
+}
+
+/* Bridge remove overlay */
+#bridge-remove-overlay {
+ position: fixed;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ top: 0;
+ inset: 0;
+ width: 100%;
+ height: 100%;
+ z-index: 1;
+ background-color: rgba(0, 0, 0, 0.5);
+}
+
+#bridge-remove-overlay.hidden {
+ display: none;
+}
+
+#bridge-remove-modal {
+ position: relative;
+ min-width: 250px;
+ max-width: 500px;
+ min-height: 200px;
+ z-index: 2;
+ text-align: center;
+ background: var(--in-content-page-background);
+ box-shadow: var(--shadow-30);
+}
+
+#bridge-remove-dismiss {
+ position: absolute;
+ top: 16px;
+ inset-inline-end: 16px;
+ width: 16px;
+ height: 16px;
+ fill: currentColor;
+ -moz-context-properties: fill;
+}
+
+#bridge-remove-dismiss:hover {
+ background-color: var(--in-content-button-background-hover);
+ color: var(--in-content-button-text-color-hover);
+ border: 1px solid var(--in-content-button-border-color-hover);
+ border-radius: 4px;
+}
+
+#bridge-remove-dismiss:hover:active {
+ background-color: var(--in-content-button-background-active);
+}
+
+#bridge-remove-icon {
+ width: 40px;
+ height: 40px;
+ background-image: url("chrome://global/skin/icons/warning.svg");
+ background-size: 40px;
+ margin: 16px auto;
+ fill: currentColor;
+ -moz-context-properties: fill;
+}
+
+#bridge-remove-question {
+ font-size: 150%;
+}
+
+#bridge-remove-warning {
+ color: var(--in-content-deemphasized-text);
+}
+
+#bridge-remove-buttonbar {
+ padding: 16px 32px;
+}
+
+#bridge-remove-buttonbar button {
+ min-width: 140px;
+}
+
+#bridge-remove-confirm {
+ background: var(--in-content-danger-button-background);
+ color: var(--in-content-primary-button-text-color);
+}
+
+#bridge-remove-confirm:hover {
+ background: var(--in-content-danger-button-background-hover);
+ color: var(--in-content-primary-button-text-color-hover);
+ border-color: var(--in-content-primary-button-border-hover);
+}
+
+#bridge-remove-confirm:hover:active {
+ background: var(--in-content-danger-button-background-active);
+}
diff --git a/browser/components/torpreferences/content/torPreferencesIcon.svg b/browser/components/torpreferences/content/torPreferencesIcon.svg
new file mode 100644
index 0000000000000..382a061774aaa
--- /dev/null
+++ b/browser/components/torpreferences/content/torPreferencesIcon.svg
@@ -0,0 +1,8 @@
+<svg fill="context-fill" fill-opacity="context-fill-opacity" viewBox="0 0 16 16" width="16" height="16" xmlns="http://www.w3.org/2000/svg">
+ <g clip-rule="evenodd" fill-rule="evenodd">
+ <path d="m11 8c0 1.65686-1.34314 3-3 3-1.65685 0-3-1.34314-3-3 0-1.65685 1.34315-3 3-3 1.65686 0 3 1.34315 3 3zm-1.17187 0c0 1.00965-.81848 1.82813-1.82813 1.82813-1.00964 0-1.82812-.81848-1.82812-1.82813 0-1.00964.81848-1.82812 1.82812-1.82812 1.00965 0 1.82813.81848 1.82813 1.82812z"/>
+ <path d="m7.99999 13.25c2.89951 0 5.25001-2.3505 5.25001-5.25001 0-2.89949-2.3505-5.25-5.25001-5.25-2.89949 0-5.25 2.35051-5.25 5.25 0 2.89951 2.35051 5.25001 5.25 5.25001zm0-1.1719c2.25231 0 4.07811-1.8258 4.07811-4.07811 0-2.25228-1.8258-4.07812-4.07811-4.07812-2.25228 0-4.07812 1.82584-4.07812 4.07812 0 2.25231 1.82584 4.07811 4.07812 4.07811z"/>
+ <path d="m8 15.5c4.1421 0 7.5-3.3579 7.5-7.5 0-4.14214-3.3579-7.5-7.5-7.5-4.14214 0-7.5 3.35786-7.5 7.5 0 4.1421 3.35786 7.5 7.5 7.5zm0-1.1719c3.4949 0 6.3281-2.8332 6.3281-6.3281 0-3.49493-2.8332-6.32812-6.3281-6.32812-3.49493 0-6.32812 2.83319-6.32812 6.32812 0 3.4949 2.83319 6.3281 6.32812 6.3281z"/>
+ </g>
+ <path d="m.5 8c0 4.1421 3.35786 7.5 7.5 7.5v-15c-4.14214 0-7.5 3.35786-7.5 7.5z"/>
+</svg>
\ No newline at end of file
diff --git a/browser/components/torpreferences/jar.mn b/browser/components/torpreferences/jar.mn
new file mode 100644
index 0000000000000..b54373ae7bc23
--- /dev/null
+++ b/browser/components/torpreferences/jar.mn
@@ -0,0 +1,22 @@
+browser.jar:
+ content/browser/torpreferences/bridgeQrDialog.xhtml (content/bridgeQrDialog.xhtml)
+ content/browser/torpreferences/bridgeQrDialog.jsm (content/bridgeQrDialog.jsm)
+ content/browser/torpreferences/builtinBridgeDialog.xhtml (content/builtinBridgeDialog.xhtml)
+ content/browser/torpreferences/builtinBridgeDialog.jsm (content/builtinBridgeDialog.jsm)
+ content/browser/torpreferences/check.svg (content/check.svg)
+ content/browser/torpreferences/connectionSettingsDialog.xhtml (content/connectionSettingsDialog.xhtml)
+ content/browser/torpreferences/connectionSettingsDialog.jsm (content/connectionSettingsDialog.jsm)
+ content/browser/torpreferences/network.svg (content/network.svg)
+ content/browser/torpreferences/provideBridgeDialog.xhtml (content/provideBridgeDialog.xhtml)
+ content/browser/torpreferences/provideBridgeDialog.jsm (content/provideBridgeDialog.jsm)
+ content/browser/torpreferences/requestBridgeDialog.xhtml (content/requestBridgeDialog.xhtml)
+ content/browser/torpreferences/requestBridgeDialog.jsm (content/requestBridgeDialog.jsm)
+ content/browser/torpreferences/connectionCategory.inc.xhtml (content/connectionCategory.inc.xhtml)
+ content/browser/torpreferences/torLogDialog.jsm (content/torLogDialog.jsm)
+ content/browser/torpreferences/torLogDialog.xhtml (content/torLogDialog.xhtml)
+ content/browser/torpreferences/connectionPane.js (content/connectionPane.js)
+ content/browser/torpreferences/connectionPane.xhtml (content/connectionPane.xhtml)
+ content/browser/torpreferences/torPreferences.css (content/torPreferences.css)
+ content/browser/torpreferences/torPreferencesIcon.svg (content/torPreferencesIcon.svg)
+ content/browser/torpreferences/bridgemoji/ (content/bridgemoji/*.svg)
+ content/browser/torpreferences/bridgemoji-annotations.json (content/bridgemoji-annotations.json)
diff --git a/browser/components/torpreferences/moz.build b/browser/components/torpreferences/moz.build
new file mode 100644
index 0000000000000..2661ad7cb9f3d
--- /dev/null
+++ b/browser/components/torpreferences/moz.build
@@ -0,0 +1 @@
+JAR_MANIFESTS += ["jar.mn"]
diff --git a/tools/torbrowser/update_bridgemoiji.py b/tools/torbrowser/update_bridgemoiji.py
new file mode 100755
index 0000000000000..251a0bb5d013c
--- /dev/null
+++ b/tools/torbrowser/update_bridgemoiji.py
@@ -0,0 +1,114 @@
+#!/usr/bin/env python3
+# Script to update bridgemoji files from Twemoji, and from Unicode
+# datasets.
+# Please be sure to grab and extract twe-svg.zip from
+# https://github.com/mozilla/twemoji-colr, and to get the latest
+# version of https://github.com/unicode-org/cldr.git.
+
+import json
+from pathlib import Path
+from shutil import copyfile
+import sys
+from xml.dom.minidom import parse
+
+
+if len(sys.argv) < 3:
+ print(f'Usage: {sys.argv[0]} twemoji-svg-dir cldr-dir')
+ sys.exit(1)
+twemoji_dir = Path(sys.argv[1])
+cldr_dir = Path(sys.argv[2])
+
+LANGS = [
+ "ar",
+ "ca",
+ "cs",
+ "da",
+ "de",
+ "el",
+ "en",
+ "es",
+ "fa",
+ "fr",
+ "ga",
+ "he",
+ "hu",
+ "id",
+ "is",
+ "it",
+ "ja",
+ "ka",
+ "ko",
+ "lt",
+ "mk",
+ "ms",
+ "my",
+ # "nb", # Empty file, currently!!
+ "nl",
+ "pl",
+ "pt",
+ "ro",
+ "ru",
+ "sv",
+ "th",
+ "tr",
+ "vi",
+ "zh", # zh-CN, zh-hans
+ "zh_Hant", # zh-TW, zh-hant
+]
+
+# Currently the script is in tools/torbrowser/
+firefox_root = Path(__file__).parents[2]
+panel_dir = firefox_root / 'browser/components/torpreferences/content'
+
+with (panel_dir / 'connectionPane.js').open() as f:
+ pane_js = f.read()
+make_id_offset = pane_js.find('function makeBridgeId(bridgeString) {')
+emojis_var = 'const emojis = '
+emojis_offset = pane_js.find(emojis_var, make_id_offset) + len(emojis_var)
+close_offset = pane_js.find(']', emojis_offset)
+emojis_str = pane_js[emojis_offset:close_offset].strip('\t \n,')
+emojis_str += ']'
+emojis = json.loads(emojis_str)
+codepoints = []
+for idx, e in enumerate(emojis):
+ if len(e) > 2 or (len(e) == 2 and ord(e[1]) != 0xfe0f):
+ # U+FE0F is "VARIATION SELECTOR-16" and tells the emoji to be
+ # colored, or something like that.
+ print(f'Unsupported emoji {e}: too many codepoints')
+ sys.exit(2)
+ codepoints.append(ord(e[0]))
+
+emojis_dest = panel_dir / 'bridgemoji'
+emojis_dest.mkdir(exist_ok=True)
+for f in emojis_dest.iterdir():
+ f.unlink()
+for cp in codepoints:
+ src = twemoji_dir / f'{cp:x}.svg'
+ dst = emojis_dest / f'{cp:x}.svg'
+ copyfile(src, dst)
+
+data = {l: {} for l in LANGS}
+
+for l in LANGS:
+ with (cldr_dir / f'common/annotations/{l}.xml').open() as f:
+ doc = parse(f)
+ anns = doc.getElementsByTagName('annotation')
+ for ann in anns:
+ cp = ann.getAttribute('cp')
+ if len(cp) != 1:
+ continue
+ try:
+ idx = codepoints.index(ord(cp))
+ if ann.getAttribute('type') == 'tts':
+ ann.normalize()
+ data[l][emojis[idx]] = ann.firstChild.data
+ except ValueError:
+ pass
+ if len(data[l]) != len(emojis):
+ print(f'Lang {l} doesn\'t have all the emoji descriptions!')
+
+data['zh-CN'] = data.pop('zh')
+data['zh-TW'] = data.pop('zh_Hant')
+
+with (panel_dir / 'bridgemoji-annotations.json').open('w') as f:
+ json.dump(data, f, ensure_ascii=False, indent=2)
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the tbb-commits
mailing list