diff --git a/CHANGELOG.md b/CHANGELOG.md
index 051050a94..f32014f1c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,31 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
+## [2.2.1] - 2020-12-22
+
+### Changed
+- Updated Pleroma FE
+
+### Fixed
+
+- Config generation: rename `Pleroma.Upload.Filter.ExifTool` to `Pleroma.Upload.Filter.Exiftool`.
+- S3 Uploads with Elixir 1.11.
+- Mix task pleroma.user delete_activities for source installations.
+- Search: RUM index search speed has been fixed.
+- Rich Media Previews sometimes showed the wrong preview due to a bug following redirects.
+- Fixes for the autolinker.
+- Forwarded reports duplication from Pleroma instances.
+
+-
+ API
+ - Statuses were not displayed for Mastodon forwarded reports.
+
+
+### Upgrade notes
+
+1. Restart Pleroma
+
+
## [2.2.0] - 2020-11-12
### Security
@@ -66,7 +91,6 @@ switched to a new configuration mechanism, however it was not officially removed
- From Source: `mix ecto.migrate`
3. Restart Pleroma
-
## [2.1.2] - 2020-09-17
### Security
diff --git a/config/releases.exs b/config/releases.exs
deleted file mode 100644
index 19636765f..000000000
--- a/config/releases.exs
+++ /dev/null
@@ -1,31 +0,0 @@
-import Config
-
-config :pleroma, :instance, static_dir: "/var/lib/pleroma/static"
-config :pleroma, Pleroma.Uploaders.Local, uploads: "/var/lib/pleroma/uploads"
-config :pleroma, :modules, runtime_dir: "/var/lib/pleroma/modules"
-
-config_path = System.get_env("PLEROMA_CONFIG_PATH") || "/etc/pleroma/config.exs"
-
-config :pleroma, release: true, config_path: config_path
-
-if File.exists?(config_path) do
- import_config config_path
-else
- warning = [
- IO.ANSI.red(),
- IO.ANSI.bright(),
- "!!! #{config_path} not found! Please ensure it exists and that PLEROMA_CONFIG_PATH is unset or points to an existing file",
- IO.ANSI.reset()
- ]
-
- IO.puts(warning)
-end
-
-exported_config =
- config_path
- |> Path.dirname()
- |> Path.join("prod.exported_from_db.secret.exs")
-
-if File.exists?(exported_config) do
- import_config exported_config
-end
diff --git a/lib/mix/pleroma.ex b/lib/mix/pleroma.ex
index 49ba2aae4..3de11efce 100644
--- a/lib/mix/pleroma.ex
+++ b/lib/mix/pleroma.ex
@@ -14,7 +14,7 @@ defmodule Mix.Pleroma do
:swoosh,
:timex
]
- @cachex_children ["object", "user", "scrubber"]
+ @cachex_children ["object", "user", "scrubber", "web_resp"]
@doc "Common functions to be reused in mix tasks"
def start_pleroma do
Pleroma.Config.Holder.save_default()
diff --git a/lib/mix/tasks/pleroma/instance.ex b/lib/mix/tasks/pleroma/instance.ex
index fc21ae062..ac8688424 100644
--- a/lib/mix/tasks/pleroma/instance.ex
+++ b/lib/mix/tasks/pleroma/instance.ex
@@ -284,7 +284,7 @@ defp write_robots_txt(static_dir, indexable, template_dir) do
defp upload_filters(filters) when is_map(filters) do
enabled_filters =
if filters.strip do
- [Pleroma.Upload.Filter.ExifTool]
+ [Pleroma.Upload.Filter.Exiftool]
else
[]
end
diff --git a/lib/pleroma/activity.ex b/lib/pleroma/activity.ex
index 17af04257..1dc777e3b 100644
--- a/lib/pleroma/activity.ex
+++ b/lib/pleroma/activity.ex
@@ -343,4 +343,15 @@ def pinned_by_actor?(%Activity{} = activity) do
actor = user_actor(activity)
activity.id in actor.pinned_activities
end
+
+ @spec get_by_object_ap_id_with_object(String.t()) :: t() | nil
+ def get_by_object_ap_id_with_object(ap_id) when is_binary(ap_id) do
+ ap_id
+ |> Queries.by_object_id()
+ |> with_preloaded_object()
+ |> first()
+ |> Repo.one()
+ end
+
+ def get_by_object_ap_id_with_object(_), do: nil
end
diff --git a/lib/pleroma/activity/search.ex b/lib/pleroma/activity/search.ex
index ceb365bb3..382c81118 100644
--- a/lib/pleroma/activity/search.ex
+++ b/lib/pleroma/activity/search.ex
@@ -27,7 +27,10 @@ def search(user, search_query, options \\ []) do
|> maybe_restrict_local(user)
|> maybe_restrict_author(author)
|> maybe_restrict_blocked(user)
- |> Pagination.fetch_paginated(%{"offset" => offset, "limit" => limit}, :offset)
+ |> Pagination.fetch_paginated(
+ %{"offset" => offset, "limit" => limit, "skip_order" => index_type == :rum},
+ :offset
+ )
|> maybe_fetch(user, search_query)
end
diff --git a/lib/pleroma/config/holder.ex b/lib/pleroma/config/holder.ex
index f037d5d48..a99fc0471 100644
--- a/lib/pleroma/config/holder.ex
+++ b/lib/pleroma/config/holder.ex
@@ -9,12 +9,7 @@ defmodule Pleroma.Config.Holder do
def save_default do
default_config =
if System.get_env("RELEASE_NAME") do
- release_config =
- [:code.root_dir(), "releases", System.get_env("RELEASE_VSN"), "releases.exs"]
- |> Path.join()
- |> Pleroma.Config.Loader.read()
-
- Pleroma.Config.Loader.merge(@config, release_config)
+ Pleroma.Config.Loader.merge(@config, release_defaults())
else
@config
end
@@ -32,4 +27,16 @@ def default_config(group), do: Keyword.get(get_default(), group)
def default_config(group, key), do: get_in(get_default(), [group, key])
defp get_default, do: Pleroma.Config.get(:default_config)
+
+ @spec release_defaults() :: keyword()
+ def release_defaults do
+ [
+ pleroma: [
+ {:instance, [static_dir: "/var/lib/pleroma/static"]},
+ {Pleroma.Uploaders.Local, [uploads: "/var/lib/pleroma/uploads"]},
+ {:modules, [runtime_dir: "/var/lib/pleroma/modules"]},
+ {:release, true}
+ ]
+ ]
+ end
end
diff --git a/lib/pleroma/config/release_runtime_provider.ex b/lib/pleroma/config/release_runtime_provider.ex
new file mode 100644
index 000000000..8227195dc
--- /dev/null
+++ b/lib/pleroma/config/release_runtime_provider.ex
@@ -0,0 +1,50 @@
+defmodule Pleroma.Config.ReleaseRuntimeProvider do
+ @moduledoc """
+ Imports `runtime.exs` and `{env}.exported_from_db.secret.exs` for elixir releases.
+ """
+ @behaviour Config.Provider
+
+ @impl true
+ def init(opts), do: opts
+
+ @impl true
+ def load(config, _opts) do
+ with_defaults = Config.Reader.merge(config, Pleroma.Config.Holder.release_defaults())
+
+ config_path = System.get_env("PLEROMA_CONFIG_PATH") || "/etc/pleroma/config.exs"
+
+ with_runtime_config =
+ if File.exists?(config_path) do
+ runtime_config = Config.Reader.read!(config_path)
+
+ with_defaults
+ |> Config.Reader.merge(pleroma: [config_path: config_path])
+ |> Config.Reader.merge(runtime_config)
+ else
+ warning = [
+ IO.ANSI.red(),
+ IO.ANSI.bright(),
+ "!!! #{config_path} not found! Please ensure it exists and that PLEROMA_CONFIG_PATH is unset or points to an existing file",
+ IO.ANSI.reset()
+ ]
+
+ IO.puts(warning)
+ with_defaults
+ end
+
+ exported_config_path =
+ config_path
+ |> Path.dirname()
+ |> Path.join("prod.exported_from_db.secret.exs")
+
+ with_exported =
+ if File.exists?(exported_config_path) do
+ exported_config = Config.Reader.read!(with_runtime_config)
+ Config.Reader.merge(with_runtime_config, exported_config)
+ else
+ with_runtime_config
+ end
+
+ with_exported
+ end
+end
diff --git a/lib/pleroma/emails/admin_email.ex b/lib/pleroma/emails/admin_email.ex
index 8979db2f8..423c294cb 100644
--- a/lib/pleroma/emails/admin_email.ex
+++ b/lib/pleroma/emails/admin_email.ex
@@ -52,6 +52,9 @@ def report(to, reporter, account, statuses, comment) do
status_url = Helpers.o_status_url(Pleroma.Web.Endpoint, :notice, id)
"
#{status_url}"
+ %{"id" => id} when is_binary(id) ->
+ "#{id}"
+
id when is_binary(id) ->
"#{id}"
end)
diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex
index b56a5dfe2..0545b7445 100644
--- a/lib/pleroma/user.ex
+++ b/lib/pleroma/user.ex
@@ -462,6 +462,18 @@ def remote_user_changeset(struct \\ %User{local: false}, params) do
|> validate_length(:bio, max: bio_limit)
|> validate_length(:name, max: name_limit)
|> validate_fields(true)
+ |> validate_non_local()
+ end
+
+ defp validate_non_local(cng) do
+ local? = get_field(cng, :local)
+
+ if local? do
+ cng
+ |> add_error(:local, "User is local, can't update with this changeset.")
+ else
+ cng
+ end
end
def update_changeset(struct, params \\ %{}) do
diff --git a/lib/pleroma/user/search.ex b/lib/pleroma/user/search.ex
index 35a828008..b54111090 100644
--- a/lib/pleroma/user/search.ex
+++ b/lib/pleroma/user/search.ex
@@ -85,7 +85,7 @@ defp search_query(query_string, for_user, following, top_user_ids) do
|> base_query(following)
|> filter_blocked_user(for_user)
|> filter_invisible_users()
- |> filter_discoverable_users()
+ |> filter_non_discoverable_users()
|> filter_internal_users()
|> filter_blocked_domains(for_user)
|> fts_search(query_string)
@@ -163,8 +163,10 @@ defp filter_invisible_users(query) do
from(q in query, where: q.invisible == false)
end
- defp filter_discoverable_users(query) do
- from(q in query, where: q.discoverable == true)
+ defp filter_non_discoverable_users(query) do
+ # Note: commented out โ can't do it with users being non-discoverable by default
+ # from(q in query, where: q.is_discoverable == true)
+ query
end
defp filter_internal_users(query) do
diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex
index 3543f7f73..99c729473 100644
--- a/lib/pleroma/web/activity_pub/activity_pub.ex
+++ b/lib/pleroma/web/activity_pub/activity_pub.ex
@@ -332,15 +332,21 @@ defp do_unfollow(follower, followed, activity_id, local) do
end
@spec flag(map()) :: {:ok, Activity.t()} | {:error, any()}
- def flag(
- %{
- actor: actor,
- context: _context,
- account: account,
- statuses: statuses,
- content: content
- } = params
- ) do
+ def flag(params) do
+ with {:ok, result} <- Repo.transaction(fn -> do_flag(params) end) do
+ result
+ end
+ end
+
+ defp do_flag(
+ %{
+ actor: actor,
+ context: _context,
+ account: account,
+ statuses: statuses,
+ content: content
+ } = params
+ ) do
# only accept false as false value
local = !(params[:local] == false)
forward = !(params[:forward] == false)
@@ -358,7 +364,8 @@ def flag(
{:ok, activity} <- insert(flag_data, local),
{:ok, stripped_activity} <- strip_report_status_data(activity),
_ <- notify_and_stream(activity),
- :ok <- maybe_federate(stripped_activity) do
+ :ok <-
+ maybe_federate(stripped_activity) do
User.all_superusers()
|> Enum.filter(fn user -> not is_nil(user.email) end)
|> Enum.each(fn superuser ->
@@ -368,6 +375,8 @@ def flag(
end)
{:ok, activity}
+ else
+ {:error, error} -> Repo.rollback(error)
end
end
@@ -791,10 +800,10 @@ defp restrict_replies(query, %{
where:
fragment(
"""
- ?->>'type' != 'Create' -- This isn't a Create
+ ?->>'type' != 'Create' -- This isn't a Create
OR ?->>'inReplyTo' is null -- this isn't a reply
- OR ? && array_remove(?, ?) -- The recipient is us or one of our friends,
- -- unless they are the author (because authors
+ OR ? && array_remove(?, ?) -- The recipient is us or one of our friends,
+ -- unless they are the author (because authors
-- are also part of the recipients). This leads
-- to a bug that self-replies by friends won't
-- show up.
diff --git a/lib/pleroma/web/activity_pub/utils.ex b/lib/pleroma/web/activity_pub/utils.ex
index 713b0ca1f..d580c02a9 100644
--- a/lib/pleroma/web/activity_pub/utils.ex
+++ b/lib/pleroma/web/activity_pub/utils.ex
@@ -701,14 +701,30 @@ def make_flag_data(%{actor: actor, context: context, content: content} = params,
def make_flag_data(_, _), do: %{}
- defp build_flag_object(%{account: account, statuses: statuses} = _) do
- [account.ap_id] ++ build_flag_object(%{statuses: statuses})
+ defp build_flag_object(%{account: account, statuses: statuses}) do
+ [account.ap_id | build_flag_object(%{statuses: statuses})]
end
defp build_flag_object(%{statuses: statuses}) do
Enum.map(statuses || [], &build_flag_object/1)
end
+ defp build_flag_object(%Activity{data: %{"id" => id}, object: %{data: data}}) do
+ activity_actor = User.get_by_ap_id(data["actor"])
+
+ %{
+ "type" => "Note",
+ "id" => id,
+ "content" => data["content"],
+ "published" => data["published"],
+ "actor" =>
+ AccountView.render(
+ "show.json",
+ %{user: activity_actor, skip_visibility_check: true}
+ )
+ }
+ end
+
defp build_flag_object(act) when is_map(act) or is_binary(act) do
id =
case act do
@@ -719,22 +735,14 @@ defp build_flag_object(act) when is_map(act) or is_binary(act) do
case Activity.get_by_ap_id_with_object(id) do
%Activity{} = activity ->
- activity_actor = User.get_by_ap_id(activity.object.data["actor"])
+ build_flag_object(activity)
- %{
- "type" => "Note",
- "id" => activity.data["id"],
- "content" => activity.object.data["content"],
- "published" => activity.object.data["published"],
- "actor" =>
- AccountView.render(
- "show.json",
- %{user: activity_actor, skip_visibility_check: true}
- )
- }
-
- _ ->
- %{"id" => id, "deleted" => true}
+ nil ->
+ if activity = Activity.get_by_object_ap_id_with_object(id) do
+ build_flag_object(activity)
+ else
+ %{"id" => id, "deleted" => true}
+ end
end
end
diff --git a/mix.exs b/mix.exs
index f91f57644..77168c91c 100644
--- a/mix.exs
+++ b/mix.exs
@@ -4,7 +4,7 @@ defmodule Pleroma.Mixfile do
def project do
[
app: :pleroma,
- version: version("2.2.0"),
+ version: version("2.2.1"),
elixir: "~> 1.9",
elixirc_paths: elixirc_paths(Mix.env()),
compilers: [:phoenix, :gettext] ++ Mix.compilers(),
@@ -37,7 +37,8 @@ def project do
pleroma: [
include_executables_for: [:unix],
applications: [ex_syslogger: :load, syslog: :load, eldap: :transient],
- steps: [:assemble, &put_otp_version/1, ©_files/1, ©_nginx_config/1]
+ steps: [:assemble, &put_otp_version/1, ©_files/1, ©_nginx_config/1],
+ config_providers: [{Pleroma.Config.ReleaseRuntimeProvider, nil}]
]
]
]
@@ -143,7 +144,7 @@ defp deps do
github: "ninenines/gun", ref: "921c47146b2d9567eac7e9a4d2ccc60fffd4f327", override: true},
{:jason, "~> 1.2"},
{:mogrify, "~> 0.7.4"},
- {:ex_aws, "~> 2.1"},
+ {:ex_aws, "~> 2.1.6"},
{:ex_aws_s3, "~> 2.0"},
{:sweet_xml, "~> 0.6.6"},
{:earmark, "1.4.3"},
@@ -160,7 +161,7 @@ defp deps do
{:floki, "~> 0.27"},
{:timex, "~> 3.6"},
{:ueberauth, "~> 0.4"},
- {:linkify, "~> 0.2.0"},
+ {:linkify, "~> 0.4.1"},
{:http_signatures, "~> 0.1.0"},
{:telemetry, "~> 0.3"},
{:poolboy, "~> 1.5"},
@@ -208,7 +209,10 @@ defp deps do
{:mock, "~> 0.3.5", only: :test},
# temporary downgrade for excoveralls, hackney until hackney max_connections bug will be fixed
{:excoveralls, "0.12.3", only: :test},
- {:hackney, "1.15.2", override: true},
+ {:hackney,
+ git: "https://git.pleroma.social/pleroma/elixir-libraries/hackney.git",
+ ref: "7d7119f0651515d6d7669c78393fd90950a3ec6e",
+ override: true},
{:mox, "~> 0.5", only: :test},
{:websocket_client, git: "https://github.com/jeremyong/websocket_client.git", only: :test}
] ++ oauth_deps()
diff --git a/mix.lock b/mix.lock
index 07238f550..dd8bc5d82 100644
--- a/mix.lock
+++ b/mix.lock
@@ -11,7 +11,7 @@
"calendar": {:hex, :calendar, "1.0.0", "f52073a708528482ec33d0a171954ca610fe2bd28f1e871f247dc7f1565fa807", [:mix], [{:tzdata, "~> 0.5.20 or ~> 0.1.201603 or ~> 1.0", [hex: :tzdata, repo: "hexpm", optional: false]}], "hexpm", "990e9581920c82912a5ee50e62ff5ef96da6b15949a2ee4734f935fdef0f0a6f"},
"captcha": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/elixir-captcha.git", "e0f16822d578866e186a0974d65ad58cddc1e2ab", [ref: "e0f16822d578866e186a0974d65ad58cddc1e2ab"]},
"castore": {:hex, :castore, "0.1.7", "1ca19eee705cde48c9e809e37fdd0730510752cc397745e550f6065a56a701e9", [:mix], [], "hexpm", "a2ae2c13d40e9c308387f1aceb14786dca019ebc2a11484fb2a9f797ea0aa0d8"},
- "certifi": {:hex, :certifi, "2.5.1", "867ce347f7c7d78563450a18a6a28a8090331e77fa02380b4a21962a65d36ee5", [:rebar3], [{:parse_trans, "~>3.3", [hex: :parse_trans, repo: "hexpm", optional: false]}], "hexpm", "805abd97539caf89ec6d4732c91e62ba9da0cda51ac462380bbd28ee697a8c42"},
+ "certifi": {:git, "https://github.com/certifi/erlang-certifi", "e08b12e8993502240c25b78563993776f87ecd2a", [tag: "2.5.1"]},
"combine": {:hex, :combine, "0.10.0", "eff8224eeb56498a2af13011d142c5e7997a80c8f5b97c499f84c841032e429f", [:mix], [], "hexpm", "1b1dbc1790073076580d0d1d64e42eae2366583e7aecd455d1215b0d16f2451b"},
"comeonin": {:hex, :comeonin, "5.3.1", "7fe612b739c78c9c1a75186ef2d322ce4d25032d119823269d0aa1e2f1e20025", [:mix], [], "hexpm", "d6222483060c17f0977fad1b7401ef0c5863c985a64352755f366aee3799c245"},
"concurrent_limiter": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/concurrent_limiter.git", "d81be41024569330f296fc472e24198d7499ba78", [ref: "d81be41024569330f296fc472e24198d7499ba78"]},
@@ -37,7 +37,7 @@
"esshd": {:hex, :esshd, "0.1.1", "d4dd4c46698093a40a56afecce8a46e246eb35463c457c246dacba2e056f31b5", [:mix], [], "hexpm", "d73e341e3009d390aa36387dc8862860bf9f874c94d9fd92ade2926376f49981"},
"eternal": {:hex, :eternal, "1.2.1", "d5b6b2499ba876c57be2581b5b999ee9bdf861c647401066d3eeed111d096bc4", [:mix], [], "hexpm", "b14f1dc204321429479c569cfbe8fb287541184ed040956c8862cb7a677b8406"},
"ex2ms": {:hex, :ex2ms, "1.5.0", "19e27f9212be9a96093fed8cdfbef0a2b56c21237196d26760f11dfcfae58e97", [:mix], [], "hexpm"},
- "ex_aws": {:hex, :ex_aws, "2.1.3", "26b6f036f0127548706aade4a509978fc7c26bd5334b004fba9bfe2687a525df", [:mix], [{:configparser_ex, "~> 4.0", [hex: :configparser_ex, repo: "hexpm", optional: true]}, {:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: true]}, {:jsx, "~> 2.8", [hex: :jsx, repo: "hexpm", optional: true]}, {:sweet_xml, "~> 0.6", [hex: :sweet_xml, repo: "hexpm", optional: true]}], "hexpm", "0bdbe2aed9f326922fc5a6a80417e32f0c895f4b3b2b0b9676ebf23dd16c5da4"},
+ "ex_aws": {:hex, :ex_aws, "2.1.6", "41ab8b4caa48035c96d07faa035d2d9de6df480e7e084c054e662ac888dcd4d4", [:mix], [{:configparser_ex, "~> 4.0", [hex: :configparser_ex, repo: "hexpm", optional: true]}, {:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: true]}, {:jsx, "~> 2.8", [hex: :jsx, repo: "hexpm", optional: true]}, {:sweet_xml, "~> 0.6", [hex: :sweet_xml, repo: "hexpm", optional: true]}], "hexpm", "a541bd042c1ee26412bb1e749ddf2a1c327e4fb7e382b1cd227e1b00eed3d469"},
"ex_aws_s3": {:hex, :ex_aws_s3, "2.0.2", "c0258bbdfea55de4f98f0b2f0ca61fe402cc696f573815134beb1866e778f47b", [:mix], [{:ex_aws, "~> 2.0", [hex: :ex_aws, repo: "hexpm", optional: false]}, {:sweet_xml, ">= 0.0.0", [hex: :sweet_xml, repo: "hexpm", optional: true]}], "hexpm", "0569f5b211b1a3b12b705fe2a9d0e237eb1360b9d76298028df2346cad13097a"},
"ex_const": {:hex, :ex_const, "0.2.4", "d06e540c9d834865b012a17407761455efa71d0ce91e5831e86881b9c9d82448", [:mix], [], "hexpm", "96fd346610cc992b8f896ed26a98be82ac4efb065a0578f334a32d60a3ba9767"},
"ex_doc": {:hex, :ex_doc, "0.22.2", "03a2a58bdd2ba0d83d004507c4ee113b9c521956938298eba16e55cc4aba4a6c", [:mix], [{:earmark_parser, "~> 1.4.0", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}], "hexpm", "cf60e1b3e2efe317095b6bb79651f83a2c1b3edcb4d319c421d7fcda8b3aff26"},
@@ -53,26 +53,26 @@
"gen_state_machine": {:hex, :gen_state_machine, "2.0.5", "9ac15ec6e66acac994cc442dcc2c6f9796cf380ec4b08267223014be1c728a95", [:mix], [], "hexpm"},
"gettext": {:hex, :gettext, "0.18.0", "406d6b9e0e3278162c2ae1de0a60270452c553536772167e2d701f028116f870", [:mix], [], "hexpm", "c3f850be6367ebe1a08616c2158affe4a23231c70391050bf359d5f92f66a571"},
"gun": {:git, "https://github.com/ninenines/gun.git", "921c47146b2d9567eac7e9a4d2ccc60fffd4f327", [ref: "921c47146b2d9567eac7e9a4d2ccc60fffd4f327"]},
- "hackney": {:hex, :hackney, "1.15.2", "07e33c794f8f8964ee86cebec1a8ed88db5070e52e904b8f12209773c1036085", [:rebar3], [{:certifi, "2.5.1", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "6.0.0", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "1.0.1", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "~>1.1", [hex: :mimerl, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "1.1.5", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}], "hexpm", "e0100f8ef7d1124222c11ad362c857d3df7cb5f4204054f9f0f4a728666591fc"},
+ "hackney": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/hackney.git", "7d7119f0651515d6d7669c78393fd90950a3ec6e", [ref: "7d7119f0651515d6d7669c78393fd90950a3ec6e"]},
"html_entities": {:hex, :html_entities, "0.5.1", "1c9715058b42c35a2ab65edc5b36d0ea66dd083767bef6e3edb57870ef556549", [:mix], [], "hexpm", "30efab070904eb897ff05cd52fa61c1025d7f8ef3a9ca250bc4e6513d16c32de"},
"html_sanitize_ex": {:hex, :html_sanitize_ex, "1.3.0", "f005ad692b717691203f940c686208aa3d8ffd9dd4bb3699240096a51fa9564e", [:mix], [{:mochiweb, "~> 2.15", [hex: :mochiweb, repo: "hexpm", optional: false]}], "hexpm"},
"http_signatures": {:hex, :http_signatures, "0.1.0", "4e4b501a936dbf4cb5222597038a89ea10781776770d2e185849fa829686b34c", [:mix], [], "hexpm", "f8a7b3731e3fd17d38fa6e343fcad7b03d6874a3b0a108c8568a71ed9c2cf824"},
"httpoison": {:hex, :httpoison, "1.6.2", "ace7c8d3a361cebccbed19c283c349b3d26991eff73a1eaaa8abae2e3c8089b6", [:mix], [{:hackney, "~> 1.15 and >= 1.15.2", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "aa2c74bd271af34239a3948779612f87df2422c2fdcfdbcec28d9c105f0773fe"},
- "idna": {:hex, :idna, "6.0.0", "689c46cbcdf3524c44d5f3dde8001f364cd7608a99556d8fbd8239a5798d4c10", [:rebar3], [{:unicode_util_compat, "0.4.1", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "4bdd305eb64e18b0273864920695cb18d7a2021f31a11b9c5fbcd9a253f936e2"},
+ "idna": {:git, "https://github.com/benoitc/erlang-idna", "6cff72747821110169ecfac871b0c69e5064afff", [tag: "6.0.0"]},
"inet_cidr": {:hex, :inet_cidr, "1.0.4", "a05744ab7c221ca8e395c926c3919a821eb512e8f36547c062f62c4ca0cf3d6e", [:mix], [], "hexpm", "64a2d30189704ae41ca7dbdd587f5291db5d1dda1414e0774c29ffc81088c1bc"},
"jason": {:hex, :jason, "1.2.2", "ba43e3f2709fd1aa1dce90aaabfd039d000469c05c56f0b8e31978e03fa39052", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "18a228f5f0058ee183f29f9eae0805c6e59d61c3b006760668d8d18ff0d12179"},
"joken": {:hex, :joken, "2.2.0", "2daa1b12be05184aff7b5ace1d43ca1f81345962285fff3f88db74927c954d3a", [:mix], [{:jose, "~> 1.9", [hex: :jose, repo: "hexpm", optional: false]}], "hexpm", "b4f92e30388206f869dd25d1af628a1d99d7586e5cf0672f64d4df84c4d2f5e9"},
"jose": {:hex, :jose, "1.10.1", "16d8e460dae7203c6d1efa3f277e25b5af8b659febfc2f2eb4bacf87f128b80a", [:mix, :rebar3], [], "hexpm", "3c7ddc8a9394b92891db7c2771da94bf819834a1a4c92e30857b7d582e2f8257"},
"jumper": {:hex, :jumper, "1.0.1", "3c00542ef1a83532b72269fab9f0f0c82bf23a35e27d278bfd9ed0865cecabff", [:mix], [], "hexpm", "318c59078ac220e966d27af3646026db9b5a5e6703cb2aa3e26bcfaba65b7433"},
"libring": {:hex, :libring, "1.4.0", "41246ba2f3fbc76b3971f6bce83119dfec1eee17e977a48d8a9cfaaf58c2a8d6", [:mix], [], "hexpm"},
- "linkify": {:hex, :linkify, "0.2.0", "2518bbbea21d2caa9d372424e1ad845b640c6630e2d016f1bd1f518f9ebcca28", [:mix], [], "hexpm", "b8ca8a68b79e30b7938d6c996085f3db14939f29538a59ca5101988bb7f917f6"},
+ "linkify": {:hex, :linkify, "0.4.1", "f881eb3429ae88010cf736e6fb3eed406c187bcdd544902ec937496636b7c7b3", [:mix], [], "hexpm", "ce98693f54ae9ace59f2f7a8aed3de2ef311381a8ce7794804bd75484c371dda"},
"majic": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/majic", "4c692e544b28d1f5e543fb8a44be090f8cd96f80", [branch: "develop"]},
"makeup": {:hex, :makeup, "1.0.3", "e339e2f766d12e7260e6672dd4047405963c5ec99661abdc432e6ec67d29ef95", [:mix], [{:nimble_parsec, "~> 0.5", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "2e9b4996d11832947731f7608fed7ad2f9443011b3b479ae288011265cdd3dad"},
"makeup_elixir": {:hex, :makeup_elixir, "0.14.1", "4f0e96847c63c17841d42c08107405a005a2680eb9c7ccadfd757bd31dabccfb", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "f2438b1a80eaec9ede832b5c41cd4f373b38fd7aa33e3b22d9db79e640cbde11"},
"meck": {:hex, :meck, "0.8.13", "ffedb39f99b0b99703b8601c6f17c7f76313ee12de6b646e671e3188401f7866", [:rebar3], [], "hexpm", "d34f013c156db51ad57cc556891b9720e6a1c1df5fe2e15af999c84d6cebeb1a"},
- "metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm", "69b09adddc4f74a40716ae54d140f93beb0fb8978d8636eaded0c31b6f099f16"},
+ "metrics": {:git, "https://github.com/benoitc/erlang-metrics", "c6eb4dcf29f9e907539915e2ab996f40c2ec7e8e", [tag: "1.0.1"]},
"mime": {:hex, :mime, "1.4.0", "5066f14944b470286146047d2f73518cf5cca82f8e4815cf35d196b58cf07c47", [:mix], [], "hexpm", "75fa42c4228ea9a23f70f123c74ba7cece6a03b1fd474fe13f6a7a85c6ea4ff6"},
- "mimerl": {:hex, :mimerl, "1.2.0", "67e2d3f571088d5cfd3e550c383094b47159f3eee8ffa08e64106cdf5e981be3", [:rebar3], [], "hexpm", "f278585650aa581986264638ebf698f8bb19df297f66ad91b18910dfc6e19323"},
+ "mimerl": {:git, "https://github.com/benoitc/mimerl", "5a1b22a8fada5b3b40438da00a6923cb87a42bbc", [tag: "1.2.0"]},
"mochiweb": {:hex, :mochiweb, "2.18.0", "eb55f1db3e6e960fac4e6db4e2db9ec3602cc9f30b86cd1481d56545c3145d2e", [:rebar3], [], "hexpm"},
"mock": {:hex, :mock, "0.3.5", "feb81f52b8dcf0a0d65001d2fec459f6b6a8c22562d94a965862f6cc066b5431", [:mix], [{:meck, "~> 0.8.13", [hex: :meck, repo: "hexpm", optional: false]}], "hexpm", "6fae404799408300f863550392635d8f7e3da6b71abdd5c393faf41b131c8728"},
"mogrify": {:hex, :mogrify, "0.7.4", "9b2496dde44b1ce12676f85d7dc531900939e6367bc537c7243a1b089435b32d", [:mix], [], "hexpm", "50d79e337fba6bc95bfbef918058c90f50b17eed9537771e61d4619488f099c3"},
@@ -84,7 +84,7 @@
"oban": {:hex, :oban, "2.1.0", "034144686f7e76a102b5d67731f098d98a9e4a52b07c25ad580a01f83a7f1cf5", [:mix], [{:ecto_sql, ">= 3.4.3", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.14", [hex: :postgrex, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "c6f067fa3b308ed9e0e6beb2b34277c9c4e48bf95338edabd8f4a757a26e04c2"},
"open_api_spex": {:git, "https://git.pleroma.social/pleroma/elixir-libraries/open_api_spex.git", "f296ac0924ba3cf79c7a588c4c252889df4c2edd", [ref: "f296ac0924ba3cf79c7a588c4c252889df4c2edd"]},
"p1_utils": {:hex, :p1_utils, "1.0.18", "3fe224de5b2e190d730a3c5da9d6e8540c96484cf4b4692921d1e28f0c32b01c", [:rebar3], [], "hexpm", "1fc8773a71a15553b179c986b22fbeead19b28fe486c332d4929700ffeb71f88"},
- "parse_trans": {:hex, :parse_trans, "3.3.0", "09765507a3c7590a784615cfd421d101aec25098d50b89d7aa1d66646bc571c1", [:rebar3], [], "hexpm", "17ef63abde837ad30680ea7f857dd9e7ced9476cdd7b0394432af4bfc241b960"},
+ "parse_trans": {:git, "https://github.com/uwiger/parse_trans.git", "76abb347c3c1d00fb0ccf9e4b43e22b3d2288484", [tag: "3.3.0"]},
"pbkdf2_elixir": {:hex, :pbkdf2_elixir, "1.2.1", "9cbe354b58121075bd20eb83076900a3832324b7dd171a6895fab57b6bb2752c", [:mix], [{:comeonin, "~> 5.3", [hex: :comeonin, repo: "hexpm", optional: false]}], "hexpm", "d3b40a4a4630f0b442f19eca891fcfeeee4c40871936fed2f68e1c4faa30481f"},
"phoenix": {:hex, :phoenix, "1.5.6", "8298cdb4e0f943242ba8410780a6a69cbbe972fef199b341a36898dd751bdd66", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_html, "~> 2.13", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.0", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:plug, "~> 1.10", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 1.0 or ~> 2.2", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.1.2 or ~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "0dc4d39af1306b6aa5122729b0a95ca779e42c708c6fe7abbb3d336d5379e956"},
"phoenix_ecto": {:hex, :phoenix_ecto, "4.2.1", "13f124cf0a3ce0f1948cf24654c7b9f2347169ff75c1123f44674afee6af3b03", [:mix], [{:ecto, "~> 3.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.14.2 or ~> 2.15", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "478a1bae899cac0a6e02be1deec7e2944b7754c04e7d4107fc5a517f877743c0"},
@@ -110,7 +110,7 @@
"recon": {:hex, :recon, "2.5.1", "430ffa60685ac1efdfb1fe4c97b8767c92d0d92e6e7c3e8621559ba77598678a", [:mix, :rebar3], [], "hexpm", "5721c6b6d50122d8f68cccac712caa1231f97894bab779eff5ff0f886cb44648"},
"remote_ip": {:git, "https://git.pleroma.social/pleroma/remote_ip.git", "b647d0deecaa3acb140854fe4bda5b7e1dc6d1c8", [ref: "b647d0deecaa3acb140854fe4bda5b7e1dc6d1c8"]},
"sleeplocks": {:hex, :sleeplocks, "1.1.1", "3d462a0639a6ef36cc75d6038b7393ae537ab394641beb59830a1b8271faeed3", [:rebar3], [], "hexpm", "84ee37aeff4d0d92b290fff986d6a95ac5eedf9b383fadfd1d88e9b84a1c02e1"},
- "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.5", "6eaf7ad16cb568bb01753dbbd7a95ff8b91c7979482b95f38443fe2c8852a79b", [:make, :mix, :rebar3], [], "hexpm", "13104d7897e38ed7f044c4de953a6c28597d1c952075eb2e328bc6d6f2bfc496"},
+ "ssl_verify_fun": {:git, "https://github.com/deadtrickster/ssl_verify_fun.erl", "c5718226b0b9f3d1a38ef6ca3c3b4c75f53dda92", [tag: "1.1.4"]},
"sweet_xml": {:hex, :sweet_xml, "0.6.6", "fc3e91ec5dd7c787b6195757fbcf0abc670cee1e4172687b45183032221b66b8", [:mix], [], "hexpm", "2e1ec458f892ffa81f9f8386e3f35a1af6db7a7a37748a64478f13163a1f3573"},
"swoosh": {:hex, :swoosh, "1.0.6", "6765e334c67dacabe721f0d701c7e5a6f06e4595c90df6f91e73ebd54d555833", [:mix], [{:cowboy, "~> 1.1 or ~> 2.4", [hex: :cowboy, repo: "hexpm", optional: true]}, {:gen_smtp, "~> 0.13 or ~> 1.0", [hex: :gen_smtp, repo: "hexpm", optional: true]}, {:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:mail, "~> 0.2", [hex: :mail, repo: "hexpm", optional: true]}, {:mime, "~> 1.1", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_cowboy, ">= 1.0.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}], "hexpm", "7c50ef78e4acfd1cbd4907dc1fa87b5540675a6be9dc979d04890f49d7ec1830"},
"syslog": {:hex, :syslog, "1.1.0", "6419a232bea84f07b56dc575225007ffe34d9fdc91abe6f1b2f254fd71d8efc2", [:rebar3], [], "hexpm", "4c6a41373c7e20587be33ef841d3de6f3beba08519809329ecc4d27b15b659e1"},
@@ -120,7 +120,7 @@
"trailing_format_plug": {:hex, :trailing_format_plug, "0.0.7", "64b877f912cf7273bed03379936df39894149e35137ac9509117e59866e10e45", [:mix], [{:plug, "> 0.12.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "bd4fde4c15f3e993a999e019d64347489b91b7a9096af68b2bdadd192afa693f"},
"tzdata": {:hex, :tzdata, "1.0.4", "a3baa4709ea8dba552dca165af6ae97c624a2d6ac14bd265165eaa8e8af94af6", [:mix], [{:hackney, "~> 1.0", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "b02637db3df1fd66dd2d3c4f194a81633d0e4b44308d36c1b2fdfd1e4e6f169b"},
"ueberauth": {:hex, :ueberauth, "0.6.3", "d42ace28b870e8072cf30e32e385579c57b9cc96ec74fa1f30f30da9c14f3cc0", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "afc293d8a1140d6591b53e3eaf415ca92842cb1d32fad3c450c6f045f7f91b60"},
- "unicode_util_compat": {:hex, :unicode_util_compat, "0.4.1", "d869e4c68901dd9531385bb0c8c40444ebf624e60b6962d95952775cac5e90cd", [:rebar3], [], "hexpm", "1d1848c40487cdb0b30e8ed975e34e025860c02e419cb615d255849f3427439d"},
+ "unicode_util_compat": {:git, "https://github.com/benoitc/unicode_util_compat.git", "38d7bc105f51159e8ea3279c40121db9db1e652f", [tag: "0.3.1"]},
"unsafe": {:hex, :unsafe, "1.0.1", "a27e1874f72ee49312e0a9ec2e0b27924214a05e3ddac90e91727bc76f8613d8", [:mix], [], "hexpm", "6c7729a2d214806450d29766abc2afaa7a2cbecf415be64f36a6691afebb50e5"},
"web_push_encryption": {:hex, :web_push_encryption, "0.3.0", "598b5135e696fd1404dc8d0d7c0fa2c027244a4e5d5e5a98ba267f14fdeaabc8", [:mix], [{:httpoison, "~> 1.0", [hex: :httpoison, repo: "hexpm", optional: false]}, {:jose, "~> 1.8", [hex: :jose, repo: "hexpm", optional: false]}], "hexpm", "f10bdd1afe527ede694749fb77a2f22f146a51b054c7fa541c9fd920fba7c875"},
"websocket_client": {:git, "https://github.com/jeremyong/websocket_client.git", "9a6f65d05ebf2725d62fb19262b21f1805a59fbf", []},
diff --git a/priv/repo/migrations/20201113060459_remove_purge_expired_activity_worker_from_oban_config.exs b/priv/repo/migrations/20201113060459_remove_purge_expired_activity_worker_from_oban_config.exs
new file mode 100644
index 000000000..fe31f4442
--- /dev/null
+++ b/priv/repo/migrations/20201113060459_remove_purge_expired_activity_worker_from_oban_config.exs
@@ -0,0 +1,19 @@
+defmodule Pleroma.Repo.Migrations.RemovePurgeExpiredActivityWorkerFromObanConfig do
+ use Ecto.Migration
+
+ def change do
+ with %Pleroma.ConfigDB{} = config <-
+ Pleroma.ConfigDB.get_by_params(%{group: :pleroma, key: Oban}),
+ crontab when is_list(crontab) <- config.value[:crontab],
+ index when is_integer(index) <-
+ Enum.find_index(crontab, fn {_, worker} ->
+ worker == Pleroma.Workers.Cron.PurgeExpiredActivitiesWorker
+ end) do
+ updated_value = Keyword.put(config.value, :crontab, List.delete_at(crontab, index))
+
+ config
+ |> Ecto.Changeset.change(value: updated_value)
+ |> Pleroma.Repo.update()
+ end
+ end
+end
diff --git a/priv/static/index.html b/priv/static/index.html
index 9b774959a..a1d3e00d2 100644
--- a/priv/static/index.html
+++ b/priv/static/index.html
@@ -1 +1 @@
-Pleroma
\ No newline at end of file
+
\ No newline at end of file
diff --git a/priv/static/static/emoji.json b/priv/static/static/emoji.json
index ae93d17e1..12b91b3f6 100644
--- a/priv/static/static/emoji.json
+++ b/priv/static/static/emoji.json
@@ -1,969 +1,1431 @@
{
- "womans_clothes": "\ud83d\udc5a",
- "cookie": "\ud83c\udf6a",
- "woman_with_headscarf": "\ud83e\uddd5",
- "no_smoking": "\ud83d\udead",
- "e-mail": "\ud83d\udce7",
- "regional_indicator_d": "\ud83c\udde9",
- "oncoming_bus": "\ud83d\ude8d",
- "knife": "\ud83d\udd2a",
- "person_getting_haircut": "\ud83d\udc87",
- "grimacing": "\ud83d\ude2c",
- "ophiuchus": "\u26ce",
- "regional_indicator_q": "\ud83c\uddf6",
- "thinking": "\ud83e\udd14",
- "signal_strength": "\ud83d\udcf6",
- "cactus": "\ud83c\udf35",
- "bullettrain_front": "\ud83d\ude85",
- "floppy_disk": "\ud83d\udcbe",
- "doughnut": "\ud83c\udf69",
- "tv": "\ud83d\udcfa",
- "1234": "\ud83d\udd22",
- "anguished": "\ud83d\ude27",
- "clock1030": "\ud83d\udd65",
- "u7533": "\ud83c\ude38",
- "speak_no_evil": "\ud83d\ude4a",
- "chart_with_upwards_trend": "\ud83d\udcc8",
- "trophy": "\ud83c\udfc6",
- "musical_score": "\ud83c\udfbc",
- "chestnut": "\ud83c\udf30",
- "clock1130": "\ud83d\udd66",
- "abcd": "\ud83d\udd21",
- "syringe": "\ud83d\udc89",
- "shrimp": "\ud83e\udd90",
- "pisces": "\u2653",
- "left_facing_fist": "\ud83e\udd1b",
- "bar_chart": "\ud83d\udcca",
- "eagle": "\ud83e\udd85",
- "woman": "\ud83d\udc69",
- "keycap_ten": "\ud83d\udd1f",
- "yellow_heart": "\ud83d\udc9b",
- "croissant": "\ud83e\udd50",
- "mosque": "\ud83d\udd4c",
- "rice_ball": "\ud83c\udf59",
- "volcano": "\ud83c\udf0b",
- "baggage_claim": "\ud83d\udec4",
- "family": "\ud83d\udc6a",
- "beetle": "\ud83d\udc1e",
- "older_adult": "\ud83e\uddd3",
- "clock830": "\ud83d\udd63",
- "bacon": "\ud83e\udd53",
- "sound": "\ud83d\udd09",
- "no_bicycles": "\ud83d\udeb3",
- "rewind": "\u23ea",
- "adult": "\ud83e\uddd1",
- "scream_cat": "\ud83d\ude40",
- "person_playing_water_polo": "\ud83e\udd3d",
- "blue_car": "\ud83d\ude99",
- "smiley": "\ud83d\ude03",
- "kaaba": "\ud83d\udd4b",
- "twisted_rightwards_arrows": "\ud83d\udd00",
- "last_quarter_moon": "\ud83c\udf17",
- "first_place": "\ud83e\udd47",
- "joy_cat": "\ud83d\ude39",
- "sleeping": "\ud83d\ude34",
- "basketball": "\ud83c\udfc0",
- "pray": "\ud83d\ude4f",
- "trumpet": "\ud83c\udfba",
- "purple_heart": "\ud83d\udc9c",
- "broken_heart": "\ud83d\udc94",
- "astonished": "\ud83d\ude32",
- "soccer": "\u26bd",
- "princess": "\ud83d\udc78",
- "ant": "\ud83d\udc1c",
- "pig": "\ud83d\udc37",
- "vhs": "\ud83d\udcfc",
- "scream": "\ud83d\ude31",
- "mouse": "\ud83d\udc2d",
- "field_hockey": "\ud83c\udfd1",
- "ab": "\ud83c\udd8e",
- "tokyo_tower": "\ud83d\uddfc",
- "girl": "\ud83d\udc67",
- "u55b6": "\ud83c\ude3a",
- "guard": "\ud83d\udc82",
- "regional_indicator_s": "\ud83c\uddf8",
- "tulip": "\ud83c\udf37",
- "capital_abcd": "\ud83d\udd20",
- "beginner": "\ud83d\udd30",
- "couplekiss": "\ud83d\udc8f",
- "u5408": "\ud83c\ude34",
- "black_medium_small_square": "\u25fe",
- "paperclip": "\ud83d\udcce",
- "hedgehog": "\ud83e\udd94",
- "musical_note": "\ud83c\udfb5",
- "pill": "\ud83d\udc8a",
- "blue_heart": "\ud83d\udc99",
- "mens": "\ud83d\udeb9",
- "third_place": "\ud83e\udd49",
- "stew": "\ud83c\udf72",
- "prince": "\ud83e\udd34",
- "mortar_board": "\ud83c\udf93",
- "clock6": "\ud83d\udd55",
- "beer": "\ud83c\udf7a",
- "person_tipping_hand": "\ud83d\udc81",
- "triangular_ruler": "\ud83d\udcd0",
- "regional_indicator_y": "\ud83c\uddfe",
- "person_facepalming": "\ud83e\udd26",
- "steam_locomotive": "\ud83d\ude82",
- "fire_engine": "\ud83d\ude92",
- "horse": "\ud83d\udc34",
- "ribbon": "\ud83c\udf80",
- "white_large_square": "\u2b1c",
- "smirk": "\ud83d\ude0f",
- "genie": "\ud83e\uddde",
- "tangerine": "\ud83c\udf4a",
- "cl": "\ud83c\udd91",
- "japanese_goblin": "\ud83d\udc7a",
- "regional_indicator_u": "\ud83c\uddfa",
- "ring": "\ud83d\udc8d",
- "roller_coaster": "\ud83c\udfa2",
- "100": "\ud83d\udcaf",
- "clock12": "\ud83d\udd5b",
- "two_hearts": "\ud83d\udc95",
- "anger": "\ud83d\udca2",
- "black_circle": "\u26ab",
- "revolving_hearts": "\ud83d\udc9e",
- "space_invader": "\ud83d\udc7e",
- "bell": "\ud83d\udd14",
- "point_up_2": "\ud83d\udc46",
- "person_mountain_biking": "\ud83d\udeb5",
- "flags": "\ud83c\udf8f",
- "pushpin": "\ud83d\udccc",
- "large_blue_diamond": "\ud83d\udd37",
- "fairy": "\ud83e\uddda",
- "european_post_office": "\ud83c\udfe4",
- "statue_of_liberty": "\ud83d\uddfd",
- "man": "\ud83d\udc68",
- "microphone": "\ud83c\udfa4",
- "inbox_tray": "\ud83d\udce5",
- "bath": "\ud83d\udec0",
- "person_gesturing_ok": "\ud83d\ude46",
- "clap": "\ud83d\udc4f",
- "confused": "\ud83d\ude15",
- "fortune_cookie": "\ud83e\udd60",
- "kissing_closed_eyes": "\ud83d\ude1a",
- "kissing_heart": "\ud83d\ude18",
- "tropical_fish": "\ud83d\udc20",
- "taco": "\ud83c\udf2e",
- "kimono": "\ud83d\udc58",
- "u7a7a": "\ud83c\ude33",
- "rat": "\ud83d\udc00",
- "taurus": "\u2649",
- "shopping_cart": "\ud83d\uded2",
- "womans_hat": "\ud83d\udc52",
- "blossom": "\ud83c\udf3c",
- "moyai": "\ud83d\uddff",
- "clock130": "\ud83d\udd5c",
- "telescope": "\ud83d\udd2d",
- "running_shirt_with_sash": "\ud83c\udfbd",
- "person_running": "\ud83c\udfc3",
- "dizzy": "\ud83d\udcab",
- "crescent_moon": "\ud83c\udf19",
- "boom": "\ud83d\udca5",
- "restroom": "\ud83d\udebb",
- "fist": "\u270a",
- "white_flower": "\ud83d\udcae",
- "clown": "\ud83e\udd21",
- "neutral_face": "\ud83d\ude10",
- "id": "\ud83c\udd94",
- "carrot": "\ud83e\udd55",
- "rice_scene": "\ud83c\udf91",
- "foggy": "\ud83c\udf01",
- "turtle": "\ud83d\udc22",
- "mailbox_with_mail": "\ud83d\udcec",
- "baseball": "\u26be",
- "grin": "\ud83d\ude01",
- "bathtub": "\ud83d\udec1",
- "feet": "\ud83d\udc3e",
- "small_red_triangle": "\ud83d\udd3a",
- "camel": "\ud83d\udc2b",
- "aquarius": "\u2652",
- "face_with_symbols_over_mouth": "\ud83e\udd2c",
- "handbag": "\ud83d\udc5c",
- "date": "\ud83d\udcc5",
- "nail_care": "\ud83d\udc85",
- "satellite": "\ud83d\udce1",
- "candy": "\ud83c\udf6c",
- "white_medium_small_square": "\u25fd",
- "clock930": "\ud83d\udd64",
- "fearful": "\ud83d\ude28",
- "fork_and_knife": "\ud83c\udf74",
- "person_wearing_turban": "\ud83d\udc73",
- "confounded": "\ud83d\ude16",
- "helicopter": "\ud83d\ude81",
- "arrow_double_down": "\u23ec",
- "convenience_store": "\ud83c\udfea",
- "ghost": "\ud83d\udc7b",
- "bus": "\ud83d\ude8c",
- "waning_gibbous_moon": "\ud83c\udf16",
- "bank": "\ud83c\udfe6",
- "department_store": "\ud83c\udfec",
- "hockey": "\ud83c\udfd2",
- "fingers_crossed": "\ud83e\udd1e",
- "blond_haired_person": "\ud83d\udc71",
- "mag": "\ud83d\udd0d",
- "cut_of_meat": "\ud83e\udd69",
- "wink": "\ud83d\ude09",
- "railway_car": "\ud83d\ude83",
- "face_vomiting": "\ud83e\udd2e",
- "star_struck": "\ud83e\udd29",
- "first_quarter_moon_with_face": "\ud83c\udf1b",
- "octagonal_sign": "\ud83d\uded1",
- "hospital": "\ud83c\udfe5",
- "monkey": "\ud83d\udc12",
- "curly_loop": "\u27b0",
- "avocado": "\ud83e\udd51",
- "earth_americas": "\ud83c\udf0e",
- "flashlight": "\ud83d\udd26",
- "8ball": "\ud83c\udfb1",
- "clock630": "\ud83d\udd61",
- "boar": "\ud83d\udc17",
- "birthday": "\ud83c\udf82",
- "crocodile": "\ud83d\udc0a",
- "confetti_ball": "\ud83c\udf8a",
- "door": "\ud83d\udeaa",
- "school_satchel": "\ud83c\udf92",
- "peanuts": "\ud83e\udd5c",
- "regional_indicator_m": "\ud83c\uddf2",
- "bust_in_silhouette": "\ud83d\udc64",
- "sweat_drops": "\ud83d\udca6",
- "tongue": "\ud83d\udc45",
- "mag_right": "\ud83d\udd0e",
- "t_rex": "\ud83e\udd96",
- "post_office": "\ud83c\udfe3",
- "shell": "\ud83d\udc1a",
- "disappointed_relieved": "\ud83d\ude25",
- "card_index": "\ud83d\udcc7",
- "oncoming_automobile": "\ud83d\ude98",
- "passport_control": "\ud83d\udec2",
- "cherry_blossom": "\ud83c\udf38",
- "shallow_pan_of_food": "\ud83e\udd58",
- "heart": "\u2764\ufe0f",
- "heartbeat": "\ud83d\udc93",
- "crazy_face": "\ud83e\udd2a",
- "grapes": "\ud83c\udf47",
- "symbols": "\ud83d\udd23",
- "gift": "\ud83c\udf81",
- "scorpion": "\ud83e\udd82",
- "wedding": "\ud83d\udc92",
- "last_quarter_moon_with_face": "\ud83c\udf1c",
- "love_letter": "\ud83d\udc8c",
- "postal_horn": "\ud83d\udcef",
- "stuffed_flatbread": "\ud83e\udd59",
- "heavy_dollar_sign": "\ud83d\udcb2",
- "love_hotel": "\ud83c\udfe9",
- "yen": "\ud83d\udcb4",
- "person_in_steamy_room": "\ud83e\uddd6",
- "palm_tree": "\ud83c\udf34",
- "name_badge": "\ud83d\udcdb",
- "clock430": "\ud83d\udd5f",
- "bike": "\ud83d\udeb2",
- "snail": "\ud83d\udc0c",
- "bowling": "\ud83c\udfb3",
- "umbrella": "\u2614",
- "sleeping_accommodation": "\ud83d\udecc",
- "fireworks": "\ud83c\udf86",
- "closed_book": "\ud83d\udcd5",
- "city_sunset": "\ud83c\udf07",
- "persevere": "\ud83d\ude23",
- "bento": "\ud83c\udf71",
- "nut_and_bolt": "\ud83d\udd29",
- "page_facing_up": "\ud83d\udcc4",
- "snowman": "\u26c4",
- "two_women_holding_hands": "\ud83d\udc6d",
- "regional_indicator_o": "\ud83c\uddf4",
- "calling": "\ud83d\udcf2",
- "person_shrugging": "\ud83e\udd37",
- "sneezing_face": "\ud83e\udd27",
- "arrows_clockwise": "\ud83d\udd03",
- "no_pedestrians": "\ud83d\udeb7",
- "potato": "\ud83e\udd54",
- "cheese": "\ud83e\uddc0",
- "full_moon": "\ud83c\udf15",
- "mount_fuji": "\ud83d\uddfb",
- "sob": "\ud83d\ude2d",
- "construction": "\ud83d\udea7",
- "head_bandage": "\ud83e\udd15",
- "sailboat": "\u26f5",
- "slight_frown": "\ud83d\ude41",
- "ping_pong": "\ud83c\udfd3",
- "hatched_chick": "\ud83d\udc25",
- "sun_with_face": "\ud83c\udf1e",
- "seedling": "\ud83c\udf31",
- "repeat_one": "\ud83d\udd02",
- "muscle": "\ud83d\udcaa",
- "bridge_at_night": "\ud83c\udf09",
- "raised_hands": "\ud83d\ude4c",
- "house": "\ud83c\udfe0",
- "nerd": "\ud83e\udd13",
- "penguin": "\ud83d\udc27",
- "peach": "\ud83c\udf51",
- "dumpling": "\ud83e\udd5f",
- "watch": "\u231a",
- "womens": "\ud83d\udeba",
- "round_pushpin": "\ud83d\udccd",
- "alarm_clock": "\u23f0",
- "relieved": "\ud83d\ude0c",
- "sagittarius": "\u2650",
- "busstop": "\ud83d\ude8f",
- "regional_indicator_a": "\ud83c\udde6",
- "sandal": "\ud83d\udc61",
- "whale2": "\ud83d\udc0b",
- "book": "\ud83d\udcd6",
- "sweat": "\ud83d\ude13",
- "movie_camera": "\ud83c\udfa5",
- "clock230": "\ud83d\udd5d",
- "tiger": "\ud83d\udc2f",
- "tractor": "\ud83d\ude9c",
- "smile": "\ud83d\ude04",
- "vertical_traffic_light": "\ud83d\udea6",
- "exploding_head": "\ud83e\udd2f",
- "raised_hand": "\u270b",
- "smoking": "\ud83d\udeac",
- "page_with_curl": "\ud83d\udcc3",
- "exclamation": "\u2757",
- "fish": "\ud83d\udc1f",
- "mans_shoe": "\ud83d\udc5e",
- "sos": "\ud83c\udd98",
- "unlock": "\ud83d\udd13",
- "dolls": "\ud83c\udf8e",
- "ear_of_rice": "\ud83c\udf3e",
- "cat2": "\ud83d\udc08",
- "u7121": "\ud83c\ude1a",
- "repeat": "\ud83d\udd01",
- "cool": "\ud83c\udd92",
- "minibus": "\ud83d\ude90",
- "aerial_tramway": "\ud83d\udea1",
- "key": "\ud83d\udd11",
- "child": "\ud83e\uddd2",
- "camera": "\ud83d\udcf7",
- "sunflower": "\ud83c\udf3b",
- "white_check_mark": "\u2705",
- "white_square_button": "\ud83d\udd33",
- "banana": "\ud83c\udf4c",
- "milky_way": "\ud83c\udf0c",
- "person_gesturing_no": "\ud83d\ude45",
- "sushi": "\ud83c\udf63",
- "heart_eyes_cat": "\ud83d\ude3b",
- "guitar": "\ud83c\udfb8",
- "pie": "\ud83e\udd67",
- "calendar": "\ud83d\udcc6",
- "bear": "\ud83d\udc3b",
- "person_in_lotus_position": "\ud83e\uddd8",
- "clock10": "\ud83d\udd59",
- "top": "\ud83d\udd1d",
- "fuelpump": "\u26fd",
- "rainbow": "\ud83c\udf08",
- "snowboarder": "\ud83c\udfc2",
- "drum": "\ud83e\udd41",
- "leaves": "\ud83c\udf43",
- "first_quarter_moon": "\ud83c\udf13",
- "spoon": "\ud83e\udd44",
- "pouting_cat": "\ud83d\ude3e",
- "shaved_ice": "\ud83c\udf67",
- "unamused": "\ud83d\ude12",
- "train2": "\ud83d\ude86",
- "clock1230": "\ud83d\udd67",
- "regional_indicator_r": "\ud83c\uddf7",
- "fast_forward": "\u23e9",
- "accept": "\ud83c\ude51",
- "hammer": "\ud83d\udd28",
- "panda_face": "\ud83d\udc3c",
- "briefcase": "\ud83d\udcbc",
- "package": "\ud83d\udce6",
- "flag_black": "\ud83c\udff4",
- "smiling_imp": "\ud83d\ude08",
- "sunrise_over_mountains": "\ud83c\udf04",
- "airplane_departure": "\ud83d\udeeb",
- "tiger2": "\ud83d\udc05",
- "non-potable_water": "\ud83d\udeb1",
- "bird": "\ud83d\udc26",
- "barber": "\ud83d\udc88",
- "cry": "\ud83d\ude22",
- "billed_cap": "\ud83e\udde2",
- "pouch": "\ud83d\udc5d",
- "link": "\ud83d\udd17",
- "zebra": "\ud83e\udd93",
- "kiss": "\ud83d\udc8b",
- "scorpius": "\u264f",
- "prayer_beads": "\ud83d\udcff",
- "high_brightness": "\ud83d\udd06",
- "kissing_smiling_eyes": "\ud83d\ude19",
- "rhino": "\ud83e\udd8f",
- "left_luggage": "\ud83d\udec5",
- "o": "\u2b55",
- "crying_cat_face": "\ud83d\ude3f",
- "clock8": "\ud83d\udd57",
- "dress": "\ud83d\udc57",
- "clock7": "\ud83d\udd56",
- "bowl_with_spoon": "\ud83e\udd63",
- "rolling_eyes": "\ud83d\ude44",
- "fax": "\ud83d\udce0",
- "worried": "\ud83d\ude1f",
- "grey_question": "\u2754",
- "saxophone": "\ud83c\udfb7",
- "burrito": "\ud83c\udf2f",
- "salad": "\ud83e\udd57",
- "regional_indicator_z": "\ud83c\uddff",
- "bikini": "\ud83d\udc59",
- "milk": "\ud83e\udd5b",
- "stars": "\ud83c\udf20",
- "lips": "\ud83d\udc44",
- "cd": "\ud83d\udcbf",
- "weary": "\ud83d\ude29",
- "face_with_raised_eyebrow": "\ud83e\udd28",
- "lizard": "\ud83e\udd8e",
- "tone1": "\ud83c\udffb",
- "bullettrain_side": "\ud83d\ude84",
- "nose": "\ud83d\udc43",
- "innocent": "\ud83d\ude07",
- "wilted_rose": "\ud83e\udd40",
- "mahjong": "\ud83c\udc04",
- "factory": "\ud83c\udfed",
- "people_wrestling": "\ud83e\udd3c",
- "mailbox": "\ud83d\udceb",
- "rage": "\ud83d\ude21",
- "wheelchair": "\u267f",
- "x": "\u274c",
- "flower_playing_cards": "\ud83c\udfb4",
- "nauseated_face": "\ud83e\udd22",
- "underage": "\ud83d\udd1e",
- "ideograph_advantage": "\ud83c\ude50",
- "high_heel": "\ud83d\udc60",
- "dizzy_face": "\ud83d\ude35",
- "stuck_out_tongue": "\ud83d\ude1b",
- "mailbox_with_no_mail": "\ud83d\udced",
- "orange_heart": "\ud83e\udde1",
- "raised_back_of_hand": "\ud83e\udd1a",
- "footprints": "\ud83d\udc63",
- "notebook_with_decorative_cover": "\ud83d\udcd4",
- "mask": "\ud83d\ude37",
- "sunglasses": "\ud83d\ude0e",
- "pancakes": "\ud83e\udd5e",
- "regional_indicator_f": "\ud83c\uddeb",
- "dog": "\ud83d\udc36",
- "pig2": "\ud83d\udc16",
- "ng": "\ud83c\udd96",
- "unicorn": "\ud83e\udd84",
- "triumph": "\ud83d\ude24",
- "eggplant": "\ud83c\udf46",
- "egg": "\ud83e\udd5a",
- "office": "\ud83c\udfe2",
- "goat": "\ud83d\udc10",
- "handshake": "\ud83e\udd1d",
- "star": "\u2b50",
- "rugby_football": "\ud83c\udfc9",
- "call_me": "\ud83e\udd19",
- "rice_cracker": "\ud83c\udf58",
- "droplet": "\ud83d\udca7",
- "badminton": "\ud83c\udff8",
- "waxing_crescent_moon": "\ud83c\udf12",
- "ocean": "\ud83c\udf0a",
- "slot_machine": "\ud83c\udfb0",
- "wine_glass": "\ud83c\udf77",
- "elephant": "\ud83d\udc18",
- "blowfish": "\ud83d\udc21",
- "ledger": "\ud83d\udcd2",
- "money_mouth": "\ud83e\udd11",
- "heart_decoration": "\ud83d\udc9f",
- "arrow_down_small": "\ud83d\udd3d",
- "station": "\ud83d\ude89",
- "man_with_chinese_cap": "\ud83d\udc72",
- "vampire": "\ud83e\udddb",
- "pencil": "\ud83d\udcdd",
- "cyclone": "\ud83c\udf00",
- "mushroom": "\ud83c\udf44",
- "sandwich": "\ud83e\udd6a",
- "champagne": "\ud83c\udf7e",
- "expressionless": "\ud83d\ude11",
- "cold_sweat": "\ud83d\ude30",
- "maple_leaf": "\ud83c\udf41",
- "dromedary_camel": "\ud83d\udc2a",
- "vs": "\ud83c\udd9a",
- "person_fencing": "\ud83e\udd3a",
- "straight_ruler": "\ud83d\udccf",
- "baby_bottle": "\ud83c\udf7c",
- "currency_exchange": "\ud83d\udcb1",
- "regional_indicator_h": "\ud83c\udded",
- "stuck_out_tongue_closed_eyes": "\ud83d\ude1d",
- "closed_lock_with_key": "\ud83d\udd10",
- "eyes": "\ud83d\udc40",
- "water_buffalo": "\ud83d\udc03",
- "lock_with_ink_pen": "\ud83d\udd0f",
- "heavy_plus_sign": "\u2795",
- "bookmark": "\ud83d\udd16",
- "soon": "\ud83d\udd1c",
- "orange_book": "\ud83d\udcd9",
- "pineapple": "\ud83c\udf4d",
- "clock9": "\ud83d\udd58",
- "small_blue_diamond": "\ud83d\udd39",
- "black_large_square": "\u2b1b",
- "person_surfing": "\ud83c\udfc4",
- "leo": "\u264c",
- "merperson": "\ud83e\udddc",
- "canoe": "\ud83d\udef6",
- "rooster": "\ud83d\udc13",
- "hear_no_evil": "\ud83d\ude49",
- "corn": "\ud83c\udf3d",
- "takeout_box": "\ud83e\udd61",
- "oncoming_taxi": "\ud83d\ude96",
- "taxi": "\ud83d\ude95",
- "chart": "\ud83d\udcb9",
- "goal": "\ud83e\udd45",
- "melon": "\ud83c\udf48",
- "notes": "\ud83c\udfb6",
- "sparkler": "\ud83c\udf87",
- "dolphin": "\ud83d\udc2c",
- "speedboat": "\ud83d\udea4",
- "cancer": "\u264b",
- "sled": "\ud83d\udef7",
- "tanabata_tree": "\ud83c\udf8b",
- "train": "\ud83d\ude8b",
- "christmas_tree": "\ud83c\udf84",
- "two_men_holding_hands": "\ud83d\udc6c",
- "back": "\ud83d\udd19",
- "balloon": "\ud83c\udf88",
- "checkered_flag": "\ud83c\udfc1",
- "loop": "\u27bf",
- "wc": "\ud83d\udebe",
- "jeans": "\ud83d\udc56",
- "green_apple": "\ud83c\udf4f",
- "crown": "\ud83d\udc51",
- "cowboy": "\ud83e\udd20",
- "postbox": "\ud83d\udcee",
- "volleyball": "\ud83c\udfd0",
- "upside_down": "\ud83d\ude43",
- "cricket": "\ud83e\udd97",
- "custard": "\ud83c\udf6e",
- "rose": "\ud83c\udf39",
- "eyeglasses": "\ud83d\udc53",
- "oncoming_police_car": "\ud83d\ude94",
- "atm": "\ud83c\udfe7",
- "flying_saucer": "\ud83d\udef8",
- "alien": "\ud83d\udc7d",
- "hamster": "\ud83d\udc39",
- "trident": "\ud83d\udd31",
- "disappointed": "\ud83d\ude1e",
- "cow": "\ud83d\udc2e",
- "police_officer": "\ud83d\udc6e",
- "popcorn": "\ud83c\udf7f",
- "baby_chick": "\ud83d\udc24",
- "video_camera": "\ud83d\udcf9",
- "zzz": "\ud83d\udca4",
- "person_climbing": "\ud83e\uddd7",
- "star2": "\ud83c\udf1f",
- "ok": "\ud83c\udd97",
- "capricorn": "\u2651",
- "chicken": "\ud83d\udc14",
- "arrow_double_up": "\u23eb",
- "zombie": "\ud83e\udddf",
- "closed_umbrella": "\ud83c\udf02",
- "person_walking": "\ud83d\udeb6",
- "lemon": "\ud83c\udf4b",
- "heartpulse": "\ud83d\udc97",
- "regional_indicator_i": "\ud83c\uddee",
- "sauropod": "\ud83e\udd95",
- "u7981": "\ud83c\ude32",
- "regional_indicator_w": "\ud83c\uddfc",
- "evergreen_tree": "\ud83c\udf32",
- "mobile_phone_off": "\ud83d\udcf4",
- "koko": "\ud83c\ude01",
- "poop": "\ud83d\udca9",
- "cup_with_straw": "\ud83e\udd64",
- "leopard": "\ud83d\udc06",
- "radio_button": "\ud83d\udd18",
- "mega": "\ud83d\udce3",
- "metal": "\ud83e\udd18",
- "shushing_face": "\ud83e\udd2b",
- "stuck_out_tongue_winking_eye": "\ud83d\ude1c",
- "octopus": "\ud83d\udc19",
- "boxing_glove": "\ud83e\udd4a",
- "person_juggling": "\ud83e\udd39",
- "money_with_wings": "\ud83d\udcb8",
- "dollar": "\ud83d\udcb5",
- "bride_with_veil": "\ud83d\udc70",
- "second_place": "\ud83e\udd48",
- "spaghetti": "\ud83c\udf5d",
- "waning_crescent_moon": "\ud83c\udf18",
- "football": "\ud83c\udfc8",
- "white_circle": "\u26aa",
- "full_moon_with_face": "\ud83c\udf1d",
- "selfie": "\ud83e\udd33",
- "tone3": "\ud83c\udffd",
- "rabbit": "\ud83d\udc30",
- "computer": "\ud83d\udcbb",
- "clock11": "\ud83d\udd5a",
- "heavy_minus_sign": "\u2796",
- "synagogue": "\ud83d\udd4d",
- "hourglass": "\u231b",
- "gem": "\ud83d\udc8e",
- "person_doing_cartwheel": "\ud83e\udd38",
- "new_moon_with_face": "\ud83c\udf1a",
- "sunrise": "\ud83c\udf05",
- "regional_indicator_x": "\ud83c\uddfd",
- "open_file_folder": "\ud83d\udcc2",
- "gift_heart": "\ud83d\udc9d",
- "tada": "\ud83c\udf89",
- "green_heart": "\ud83d\udc9a",
- "battery": "\ud83d\udd0b",
- "regional_indicator_t": "\ud83c\uddf9",
- "wrench": "\ud83d\udd27",
- "aries": "\u2648",
- "man_in_tuxedo": "\ud83e\udd35",
- "regional_indicator_e": "\ud83c\uddea",
- "regional_indicator_l": "\ud83c\uddf1",
- "cake": "\ud83c\udf70",
- "clapper": "\ud83c\udfac",
- "japanese_castle": "\ud83c\udfef",
- "crystal_ball": "\ud83d\udd2e",
- "golf": "\u26f3",
- "no_mobile_phones": "\ud83d\udcf5",
- "person_biking": "\ud83d\udeb4",
- "icecream": "\ud83c\udf66",
- "mage": "\ud83e\uddd9",
- "bookmark_tabs": "\ud83d\udcd1",
- "tone4": "\ud83c\udffe",
- "mountain_cableway": "\ud83d\udea0",
- "person_playing_handball": "\ud83e\udd3e",
- "bulb": "\ud83d\udca1",
- "clock330": "\ud83d\udd5e",
- "metro": "\ud83d\ude87",
- "wave": "\ud83d\udc4b",
- "whale": "\ud83d\udc33",
- "strawberry": "\ud83c\udf53",
- "hatching_chick": "\ud83d\udc23",
- "trolleybus": "\ud83d\ude8e",
- "lollipop": "\ud83c\udf6d",
- "clipboard": "\ud83d\udccb",
- "point_right": "\ud83d\udc49",
- "u6307": "\ud83c\ude2f",
- "santa": "\ud83c\udf85",
- "hibiscus": "\ud83c\udf3a",
- "green_book": "\ud83d\udcd7",
- "skull": "\ud83d\udc80",
- "tumbler_glass": "\ud83e\udd43",
- "clock2": "\ud83d\udd51",
- "open_mouth": "\ud83d\ude2e",
- "bouquet": "\ud83d\udc90",
- "champagne_glass": "\ud83e\udd42",
- "poodle": "\ud83d\udc29",
- "hushed": "\ud83d\ude2f",
- "earth_asia": "\ud83c\udf0f",
- "face_with_monocle": "\ud83e\uddd0",
- "libra": "\u264e",
- "clock5": "\ud83d\udd54",
- "ambulance": "\ud83d\ude91",
- "u5272": "\ud83c\ude39",
- "lipstick": "\ud83d\udc84",
- "apple": "\ud83c\udf4e",
- "headphones": "\ud83c\udfa7",
- "turkey": "\ud83e\udd83",
- "pretzel": "\ud83e\udd68",
- "bug": "\ud83d\udc1b",
- "school": "\ud83c\udfeb",
- "speaker": "\ud83d\udd08",
- "boot": "\ud83d\udc62",
- "cat": "\ud83d\udc31",
- "dancer": "\ud83d\udc83",
- "no_entry": "\u26d4",
- "kissing_cat": "\ud83d\ude3d",
- "art": "\ud83c\udfa8",
- "coat": "\ud83e\udde5",
- "credit_card": "\ud83d\udcb3",
- "customs": "\ud83d\udec3",
- "broccoli": "\ud83e\udd66",
- "point_left": "\ud83d\udc48",
- "canned_food": "\ud83e\udd6b",
- "sheep": "\ud83d\udc11",
- "person_bowing": "\ud83d\ude47",
- "scroll": "\ud83d\udcdc",
- "martial_arts_uniform": "\ud83e\udd4b",
- "amphora": "\ud83c\udffa",
- "thought_balloon": "\ud83d\udcad",
- "no_bell": "\ud83d\udd15",
- "musical_keyboard": "\ud83c\udfb9",
- "people_with_bunny_ears_partying": "\ud83d\udc6f",
- "european_castle": "\ud83c\udff0",
- "punch": "\ud83d\udc4a",
- "camera_with_flash": "\ud83d\udcf8",
- "regional_indicator_p": "\ud83c\uddf5",
- "red_car": "\ud83d\ude97",
- "regional_indicator_j": "\ud83c\uddef",
- "owl": "\ud83e\udd89",
- "chart_with_downwards_trend": "\ud83d\udcc9",
- "older_woman": "\ud83d\udc75",
- "gemini": "\u264a",
- "incoming_envelope": "\ud83d\udce8",
- "waxing_gibbous_moon": "\ud83c\udf14",
- "toilet": "\ud83d\udebd",
- "dragon_face": "\ud83d\udc32",
- "koala": "\ud83d\udc28",
- "tone5": "\ud83c\udfff",
- "kiwi": "\ud83e\udd5d",
- "dash": "\ud83d\udca8",
- "imp": "\ud83d\udc7f",
- "tent": "\u26fa",
- "regional_indicator_b": "\ud83c\udde7",
- "monorail": "\ud83d\ude9d",
- "ox": "\ud83d\udc02",
- "giraffe": "\ud83e\udd92",
- "new": "\ud83c\udd95",
- "person_raising_hand": "\ud83d\ude4b",
- "japan": "\ud83d\uddfe",
- "rice": "\ud83c\udf5a",
- "ticket": "\ud83c\udfab",
- "rotating_light": "\ud83d\udea8",
- "loudspeaker": "\ud83d\udce2",
- "person_getting_massage": "\ud83d\udc86",
- "loud_sound": "\ud83d\udd0a",
- "hugging": "\ud83e\udd17",
- "herb": "\ud83c\udf3f",
- "baby": "\ud83d\udc76",
- "angel": "\ud83d\udc7c",
- "athletic_shoe": "\ud83d\udc5f",
- "euro": "\ud83d\udcb6",
- "ram": "\ud83d\udc0f",
- "large_orange_diamond": "\ud83d\udd36",
- "red_circle": "\ud83d\udd34",
- "ferris_wheel": "\ud83c\udfa1",
- "drooling_face": "\ud83e\udd24",
- "microscope": "\ud83d\udd2c",
- "middle_finger": "\ud83d\udd95",
- "pager": "\ud83d\udcdf",
- "pensive": "\ud83d\ude14",
- "potable_water": "\ud83d\udeb0",
- "abc": "\ud83d\udd24",
- "four_leaf_clover": "\ud83c\udf40",
- "vulcan": "\ud83d\udd96",
- "french_bread": "\ud83e\udd56",
- "motor_scooter": "\ud83d\udef5",
- "moneybag": "\ud83d\udcb0",
- "sparkles": "\u2728",
- "gloves": "\ud83e\udde4",
- "envelope_with_arrow": "\ud83d\udce9",
- "thumbsdown": "\ud83d\udc4e",
- "regional_indicator_g": "\ud83c\uddec",
- "video_game": "\ud83c\udfae",
- "on": "\ud83d\udd1b",
- "open_hands": "\ud83d\udc50",
- "monkey_face": "\ud83d\udc35",
- "mountain_railway": "\ud83d\ude9e",
- "bee": "\ud83d\udc1d",
- "scooter": "\ud83d\udef4",
- "fishing_pole_and_fish": "\ud83c\udfa3",
- "smiley_cat": "\ud83d\ude3a",
- "heart_eyes": "\ud83d\ude0d",
- "horse_racing": "\ud83c\udfc7",
- "ear": "\ud83d\udc42",
- "blue_circle": "\ud83d\udd35",
- "crossed_flags": "\ud83c\udf8c",
- "black_joker": "\ud83c\udccf",
- "six_pointed_star": "\ud83d\udd2f",
- "fountain": "\u26f2",
- "free": "\ud83c\udd93",
- "tennis": "\ud83c\udfbe",
- "yum": "\ud83d\ude0b",
- "fried_shrimp": "\ud83c\udf64",
- "dragon": "\ud83d\udc09",
- "purse": "\ud83d\udc5b",
- "clock1": "\ud83d\udd50",
- "airplane_arriving": "\ud83d\udeec",
- "cucumber": "\ud83e\udd52",
- "man_dancing": "\ud83d\udd7a",
- "clock730": "\ud83d\udd62",
- "deer": "\ud83e\udd8c",
- "meat_on_bone": "\ud83c\udf56",
- "bomb": "\ud83d\udca3",
- "night_with_stars": "\ud83c\udf03",
- "snake": "\ud83d\udc0d",
- "ramen": "\ud83c\udf5c",
- "end": "\ud83d\udd1a",
- "do_not_litter": "\ud83d\udeaf",
- "joy": "\ud83d\ude02",
- "light_rail": "\ud83d\ude88",
- "game_die": "\ud83c\udfb2",
- "violin": "\ud83c\udfbb",
- "tone2": "\ud83c\udffc",
- "tropical_drink": "\ud83c\udf79",
- "love_you_gesture": "\ud83e\udd1f",
- "cherries": "\ud83c\udf52",
- "traffic_light": "\ud83d\udea5",
- "iphone": "\ud83d\udcf1",
- "socks": "\ud83e\udde6",
- "wind_chime": "\ud83c\udf90",
- "no_entry_sign": "\ud83d\udeab",
- "elf": "\ud83e\udddd",
- "squid": "\ud83e\udd91",
- "person_pouting": "\ud83d\ude4e",
- "smile_cat": "\ud83d\ude38",
- "beers": "\ud83c\udf7b",
- "minidisc": "\ud83d\udcbd",
- "clock4": "\ud83d\udd53",
- "ice_cream": "\ud83c\udf68",
- "cocktail": "\ud83c\udf78",
- "clock3": "\ud83d\udd52",
- "frowning": "\ud83d\ude26",
- "hamburger": "\ud83c\udf54",
- "brain": "\ud83e\udde0",
- "heavy_division_sign": "\u2797",
- "tophat": "\ud83c\udfa9",
- "no_mouth": "\ud83d\ude36",
- "ski": "\ud83c\udfbf",
- "right_facing_fist": "\ud83e\udd1c",
- "mailbox_closed": "\ud83d\udcea",
- "chocolate_bar": "\ud83c\udf6b",
- "rabbit2": "\ud83d\udc07",
- "honey_pot": "\ud83c\udf6f",
- "izakaya_lantern": "\ud83c\udfee",
- "articulated_lorry": "\ud83d\ude9b",
- "face_with_hand_over_mouth": "\ud83e\udd2d",
- "japanese_ogre": "\ud83d\udc79",
- "zap": "\u26a1",
- "rocket": "\ud83d\ude80",
- "pizza": "\ud83c\udf55",
- "pound": "\ud83d\udcb7",
- "person_swimming": "\ud83c\udfca",
- "anchor": "\u2693",
- "coconut": "\ud83e\udd65",
- "sparkling_heart": "\ud83d\udc96",
- "older_man": "\ud83d\udc74",
- "mouse2": "\ud83d\udc01",
- "angry": "\ud83d\ude20",
- "up": "\ud83c\udd99",
- "gorilla": "\ud83e\udd8d",
- "children_crossing": "\ud83d\udeb8",
- "smirk_cat": "\ud83d\ude3c",
- "pregnant_woman": "\ud83e\udd30",
- "electric_plug": "\ud83d\udd0c",
- "dog2": "\ud83d\udc15",
- "question": "\u2753",
- "carousel_horse": "\ud83c\udfa0",
- "church": "\u26ea",
- "outbox_tray": "\ud83d\udce4",
- "cinema": "\ud83c\udfa6",
- "flushed": "\ud83d\ude33",
- "blush": "\ud83d\ude0a",
- "medal": "\ud83c\udfc5",
- "coffee": "\u2615",
- "gun": "\ud83d\udd2b",
- "city_dusk": "\ud83c\udf06",
- "watermelon": "\ud83c\udf49",
- "cricket_game": "\ud83c\udfcf",
- "shower": "\ud83d\udebf",
- "mute": "\ud83d\udd07",
- "breast_feeding": "\ud83e\udd31",
- "sweat_smile": "\ud83d\ude05",
- "construction_worker": "\ud83d\udc77",
- "cow2": "\ud83d\udc04",
- "arrows_counterclockwise": "\ud83d\udd04",
- "u6e80": "\ud83c\ude35",
- "grinning": "\ud83d\ude00",
- "globe_with_meridians": "\ud83c\udf10",
- "diamond_shape_with_a_dot_inside": "\ud83d\udca0",
- "deciduous_tree": "\ud83c\udf33",
- "shark": "\ud83e\udd88",
- "tram": "\ud83d\ude8a",
- "person_rowing_boat": "\ud83d\udea3",
- "chopsticks": "\ud83e\udd62",
- "black_heart": "\ud83d\udda4",
- "seat": "\ud83d\udcba",
- "kissing": "\ud83d\ude17",
- "laughing": "\ud83d\ude06",
- "slight_smile": "\ud83d\ude42",
- "radio": "\ud83d\udcfb",
- "arrow_up_small": "\ud83d\udd3c",
- "dango": "\ud83c\udf61",
- "rofl": "\ud83e\udd23",
- "see_no_evil": "\ud83d\ude48",
- "thermometer_face": "\ud83e\udd12",
- "hotdog": "\ud83c\udf2d",
- "virgo": "\u264d",
- "poultry_leg": "\ud83c\udf57",
- "hotel": "\ud83c\udfe8",
- "wolf": "\ud83d\udc3a",
- "curry": "\ud83c\udf5b",
- "regional_indicator_v": "\ud83c\uddfb",
- "crab": "\ud83e\udd80",
- "tired_face": "\ud83d\ude2b",
- "place_of_worship": "\ud83d\uded0",
- "ok_hand": "\ud83d\udc4c",
- "speech_balloon": "\ud83d\udcac",
- "sleepy": "\ud83d\ude2a",
- "earth_africa": "\ud83c\udf0d",
- "police_car": "\ud83d\ude93",
- "small_red_triangle_down": "\ud83d\udd3b",
- "bearded_person": "\ud83e\uddd4",
- "curling_stone": "\ud83e\udd4c",
- "scarf": "\ud83e\udde3",
- "fire": "\ud83d\udd25",
- "file_folder": "\ud83d\udcc1",
- "zipper_mouth": "\ud83e\udd10",
- "new_moon": "\ud83c\udf11",
- "regional_indicator_n": "\ud83c\uddf3",
- "negative_squared_cross_mark": "\u274e",
- "newspaper": "\ud83d\udcf0",
- "dvd": "\ud83d\udcc0",
- "pear": "\ud83c\udf50",
- "partly_sunny": "\u26c5",
- "black_square_button": "\ud83d\udd32",
- "low_brightness": "\ud83d\udd05",
- "sake": "\ud83c\udf76",
- "bow_and_arrow": "\ud83c\udff9",
- "cooking": "\ud83c\udf73",
- "fish_cake": "\ud83c\udf65",
- "tomato": "\ud83c\udf45",
- "couple_with_heart": "\ud83d\udc91",
- "telephone_receiver": "\ud83d\udcde",
- "triangular_flag_on_post": "\ud83d\udea9",
- "jack_o_lantern": "\ud83c\udf83",
- "blue_book": "\ud83d\udcd8",
- "clock530": "\ud83d\udd60",
- "u6709": "\ud83c\ude36",
- "palms_up_together": "\ud83e\udd32",
- "lion_face": "\ud83e\udd81",
- "lock": "\ud83d\udd12",
- "duck": "\ud83e\udd86",
- "truck": "\ud83d\ude9a",
- "oden": "\ud83c\udf62",
- "busts_in_silhouette": "\ud83d\udc65",
- "hourglass_flowing_sand": "\u23f3",
- "frog": "\ud83d\udc38",
- "fox": "\ud83e\udd8a",
- "bread": "\ud83c\udf5e",
- "put_litter_in_its_place": "\ud83d\udeae",
- "couple": "\ud83d\udc6b",
- "bamboo": "\ud83c\udf8d",
- "regional_indicator_c": "\ud83c\udde8",
- "menorah": "\ud83d\udd4e",
- "circus_tent": "\ud83c\udfaa",
- "lying_face": "\ud83e\udd25",
- "small_orange_diamond": "\ud83d\udd38",
- "ship": "\ud83d\udea2",
- "person_frowning": "\ud83d\ude4d",
- "racehorse": "\ud83d\udc0e",
- "thumbsup": "\ud83d\udc4d",
- "cupid": "\ud83d\udc98",
- "robot": "\ud83e\udd16",
- "fallen_leaf": "\ud83c\udf42",
- "pig_nose": "\ud83d\udc3d",
- "vibration_mode": "\ud83d\udcf3",
- "necktie": "\ud83d\udc54",
- "boy": "\ud83d\udc66",
- "house_with_garden": "\ud83c\udfe1",
- "point_down": "\ud83d\udc47",
- "grey_exclamation": "\u2755",
- "books": "\ud83d\udcda",
- "regional_indicator_k": "\ud83c\uddf0",
- "shirt": "\ud83d\udc55",
- "fries": "\ud83c\udf5f",
- "dart": "\ud83c\udfaf",
- "tea": "\ud83c\udf75",
- "mrs_claus": "\ud83e\udd36",
- "suspension_railway": "\ud83d\ude9f",
- "baby_symbol": "\ud83d\udebc",
- "sweet_potato": "\ud83c\udf60",
- "butterfly": "\ud83e\udd8b",
- "performing_arts": "\ud83c\udfad",
- "notebook": "\ud83d\udcd3",
- "bat": "\ud83e\udd87"
-}
+ "100": "๐ฏ",
+ "1234": "๐ข",
+ "1st_place_medal": "๐ฅ",
+ "2nd_place_medal": "๐ฅ",
+ "3rd_place_medal": "๐ฅ",
+ "8ball": "๐ฑ",
+ "a_button_blood_type": "๐
ฐ",
+ "ab": "๐",
+ "abacus": "๐งฎ",
+ "abc": "๐ค",
+ "abcd": "๐ก",
+ "accept": "๐",
+ "adhesive_bandage": "๐ฉน",
+ "admission_tickets": "๐",
+ "adult": "๐ง",
+ "aerial_tramway": "๐ก",
+ "airplane": "โ",
+ "airplane_arriving": "๐ฌ",
+ "airplane_departure": "๐ซ",
+ "alarm_clock": "โฐ",
+ "alembic": "โ๏ธ",
+ "alien": "๐ฝ",
+ "ambulance": "๐",
+ "amphora": "๐บ",
+ "anchor": "โ",
+ "angel": "๐ผ",
+ "anger": "๐ข",
+ "anger_right": "๐ฏ",
+ "angry": "๐ ",
+ "anguished": "๐ง",
+ "ant": "๐",
+ "apple": "๐",
+ "aquarius": "โ",
+ "aries": "โ",
+ "arrow_backward": "โ๏ธ",
+ "arrow_double_down": "โฌ",
+ "arrow_double_up": "โซ",
+ "arrow_down": "โฌ๏ธ",
+ "arrow_down_small": "๐ฝ",
+ "arrow_forward": "โถ๏ธ",
+ "arrow_heading_down": "โคต๏ธ",
+ "arrow_heading_up": "โคด๏ธ",
+ "arrow_left": "โฌ
๏ธ",
+ "arrow_lower_left": "โ๏ธ",
+ "arrow_lower_right": "โ๏ธ",
+ "arrow_right": "โก",
+ "arrow_right_hook": "โช๏ธ",
+ "arrow_up": "โฌ๏ธ",
+ "arrow_up_down": "โ",
+ "arrow_up_small": "๐ผ",
+ "arrow_upper_left": "โ",
+ "arrow_upper_right": "โ๏ธ",
+ "arrows_clockwise": "๐",
+ "arrows_counterclockwise": "๐",
+ "art": "๐จ",
+ "articulated_lorry": "๐",
+ "artist_palette": "๐จ",
+ "asterisk": "*โฃ",
+ "astonished": "๐ฒ",
+ "athletic_shoe": "๐",
+ "atm": "๐ง",
+ "atom": "โ",
+ "atom_symbol": "โ๏ธ",
+ "auto_rickshaw": "๐บ",
+ "automobile": "๐",
+ "avocado": "๐ฅ",
+ "axe": "๐ช",
+ "b_button_blood_type": "๐
ฑ",
+ "baby": "๐ถ",
+ "baby_bottle": "๐ผ",
+ "baby_chick": "๐ค",
+ "baby_symbol": "๐ผ",
+ "back": "๐",
+ "bacon": "๐ฅ",
+ "badger": "๐ฆก",
+ "badminton": "๐ธ",
+ "bagel": "๐ฅฏ",
+ "baggage_claim": "๐",
+ "baguette_bread": "๐ฅ",
+ "balance_scale": "โ๏ธ",
+ "bald": "๐ฆฒ",
+ "ballet_shoes": "๐ฉฐ",
+ "balloon": "๐",
+ "ballot_box": "๐ณ",
+ "ballot_box_with_check": "โ๏ธ",
+ "bamboo": "๐",
+ "banana": "๐",
+ "bangbang": "โผ๏ธ",
+ "banjo": "๐ช",
+ "bank": "๐ฆ",
+ "bar_chart": "๐",
+ "barber": "๐",
+ "baseball": "โพ",
+ "basket": "๐งบ",
+ "basketball": "๐",
+ "basketballer": "โน",
+ "bat": "๐ฆ",
+ "bath": "๐",
+ "bathtub": "๐",
+ "battery": "๐",
+ "beach_umbrella": "โฑ",
+ "beach_with_umbrella": "๐",
+ "bear": "๐ป",
+ "beard": "๐ง",
+ "bearded_person": "๐ง",
+ "bed": "๐",
+ "bee": "๐",
+ "beer": "๐บ",
+ "beers": "๐ป",
+ "beetle": "๐",
+ "beginner": "๐ฐ",
+ "bell": "๐",
+ "bellhop_bell": "๐",
+ "bento": "๐ฑ",
+ "beverage_box": "๐ง",
+ "bicyclist": "๐ด",
+ "bike": "๐ฒ",
+ "bikini": "๐",
+ "billed_cap": "๐งข",
+ "biohazard": "โฃ๏ธ",
+ "bird": "๐ฆ",
+ "birthday": "๐",
+ "black_circle": "โซ",
+ "black_heart": "๐ค",
+ "black_joker": "๐",
+ "black_large_square": "โฌ",
+ "black_medium_small_square": "โพ",
+ "black_medium_square": "โผ",
+ "black_nib": "โ๏ธ",
+ "black_small_square": "โช",
+ "black_square_button": "๐ฒ",
+ "blond_haired_person": "๐ฑ",
+ "blossom": "๐ผ",
+ "blowfish": "๐ก",
+ "blue_book": "๐",
+ "blue_car": "๐",
+ "blue_circle": "๐ต",
+ "blue_heart": "๐",
+ "blue_square": "๐ฆ",
+ "blush": "๐",
+ "boar": "๐",
+ "bomb": "๐ฃ",
+ "bone": "๐ฆด",
+ "book": "๐",
+ "bookmark": "๐",
+ "bookmark_tabs": "๐",
+ "books": "๐",
+ "boom": "๐ฅ",
+ "boot": "๐ข",
+ "bouquet": "๐",
+ "bow": "๐",
+ "bow_and_arrow": "๐น",
+ "bowl_with_spoon": "๐ฅฃ",
+ "bowling": "๐ณ",
+ "boxing_glove": "๐ฅ",
+ "boy": "๐ฆ",
+ "brain": "๐ง ",
+ "bread": "๐",
+ "breast_feeding": "๐คฑ",
+ "breastfeeding": "๐คฑ",
+ "brick": "๐งฑ",
+ "bride_with_veil": "๐ฐ",
+ "bridge_at_night": "๐",
+ "briefcase": "๐ผ",
+ "briefs": "๐ฉฒ",
+ "broccoli": "๐ฅฆ",
+ "broken_heart": "๐",
+ "broom": "๐งน",
+ "brown_circle": "๐ค",
+ "brown_heart": "๐ค",
+ "bug": "๐",
+ "building_construction": "๐",
+ "bulb": "๐ก",
+ "bullettrain_front": "๐
",
+ "bullettrain_side": "๐",
+ "burrito": "๐ฏ",
+ "bus": "๐",
+ "busstop": "๐",
+ "bust_in_silhouette": "๐ค",
+ "busts_in_silhouette": "๐ฅ",
+ "butter": "๐ง",
+ "butterfly": "๐ฆ",
+ "cactus": "๐ต",
+ "cake": "๐ฐ",
+ "calendar": "๐",
+ "call_me": "๐ค",
+ "call_me_hand": "๐ค",
+ "calling": "๐ฒ",
+ "camel": "๐ซ",
+ "camera": "๐ท",
+ "camera_with_flash": "๐ธ",
+ "camping": "๐",
+ "cancer": "โ",
+ "candle": "๐ฏ",
+ "candy": "๐ฌ",
+ "canned_food": "๐ฅซ",
+ "canoe": "๐ถ",
+ "capital_abcd": "๐ ",
+ "capricorn": "โ",
+ "card_file_box": "๐",
+ "card_index": "๐",
+ "card_index_dividers": "๐",
+ "carousel_horse": "๐ ",
+ "carrot": "๐ฅ",
+ "cat": "๐ฑ",
+ "cat2": "๐",
+ "cd": "๐ฟ",
+ "chains": "โ๏ธ",
+ "chair": "๐ช",
+ "champagne": "๐พ",
+ "champagne_glass": "๐ฅ",
+ "chart": "๐น",
+ "chart_with_downwards_trend": "๐",
+ "chart_with_upwards_trend": "๐",
+ "check_box_with_check": "โ",
+ "check_mark": "โ",
+ "checkered_flag": "๐",
+ "cheese": "๐ง",
+ "cheese_wedge": "๐ง",
+ "cherries": "๐",
+ "cherry_blossom": "๐ธ",
+ "chess_pawn": "โ",
+ "chestnut": "๐ฐ",
+ "chicken": "๐",
+ "child": "๐ง",
+ "children_crossing": "๐ธ",
+ "chipmunk": "๐ฟ",
+ "chocolate_bar": "๐ซ",
+ "chopsticks": "๐ฅข",
+ "christmas_tree": "๐",
+ "church": "โช",
+ "cinema": "๐ฆ",
+ "circled_m": "โ",
+ "circus_tent": "๐ช",
+ "city_dusk": "๐",
+ "city_sunset": "๐",
+ "cityscape": "๐",
+ "cityscape_at_dusk": "๐",
+ "cl": "๐",
+ "clap": "๐",
+ "clapper": "๐ฌ",
+ "classical_building": "๐",
+ "clinking_glasses": "๐ฅ",
+ "clipboard": "๐",
+ "clock1": "๐",
+ "clock10": "๐",
+ "clock1030": "๐ฅ",
+ "clock11": "๐",
+ "clock1130": "๐ฆ",
+ "clock12": "๐",
+ "clock1230": "๐ง",
+ "clock130": "๐",
+ "clock2": "๐",
+ "clock230": "๐",
+ "clock3": "๐",
+ "clock330": "๐",
+ "clock4": "๐",
+ "clock430": "๐",
+ "clock5": "๐",
+ "clock530": "๐ ",
+ "clock6": "๐",
+ "clock630": "๐ก",
+ "clock7": "๐",
+ "clock730": "๐ข",
+ "clock8": "๐",
+ "clock830": "๐ฃ",
+ "clock9": "๐",
+ "clock930": "๐ค",
+ "closed_book": "๐",
+ "closed_lock_with_key": "๐",
+ "closed_umbrella": "๐",
+ "cloud": "โ๏ธ",
+ "cloud_with_lightning": "๐ฉ",
+ "cloud_with_lightning_and_rain": "โ๏ธ",
+ "cloud_with_rain": "๐ง",
+ "cloud_with_snow": "๐จ",
+ "clown": "๐คก",
+ "clown_face": "๐คก",
+ "club_suit": "โฃ๏ธ",
+ "clubs": "โฃ",
+ "coat": "๐งฅ",
+ "cocktail": "๐ธ",
+ "coconut": "๐ฅฅ",
+ "coffee": "โ",
+ "coffin": "โฐ๏ธ",
+ "cold_face": "๐ฅถ",
+ "cold_sweat": "๐ฐ",
+ "comet": "โ๏ธ",
+ "compass": "๐งญ",
+ "compression": "๐",
+ "computer": "๐ป",
+ "computer_mouse": "๐ฑ",
+ "confetti_ball": "๐",
+ "confounded": "๐",
+ "confused": "๐",
+ "congratulations": "ใ",
+ "construction": "๐ง",
+ "construction_worker": "๐ท",
+ "control_knobs": "๐",
+ "convenience_store": "๐ช",
+ "cookie": "๐ช",
+ "cooking": "๐ณ",
+ "cool": "๐",
+ "cop": "๐ฎ",
+ "copyright": "ยฉ",
+ "corn": "๐ฝ",
+ "couch_and_lamp": "๐",
+ "couple": "๐ซ",
+ "couple_with_heart": "๐",
+ "couplekiss": "๐",
+ "cow": "๐ฎ",
+ "cow2": "๐",
+ "cowboy": "๐ค ",
+ "cowboy_hat_face": "๐ค ",
+ "crab": "๐ฆ",
+ "crayon": "๐",
+ "crazy_face": "๐คช",
+ "credit_card": "๐ณ",
+ "crescent_moon": "๐",
+ "cricket": "๐ฆ",
+ "cricket_game": "๐",
+ "crocodile": "๐",
+ "croissant": "๐ฅ",
+ "cross": "โ๏ธ",
+ "crossed_fingers": "๐ค",
+ "crossed_flags": "๐",
+ "crossed_swords": "โ๏ธ",
+ "crown": "๐",
+ "cry": "๐ข",
+ "crying_cat_face": "๐ฟ",
+ "crystal_ball": "๐ฎ",
+ "cucumber": "๐ฅ",
+ "cup_with_straw": "๐ฅค",
+ "cupcake": "๐ง",
+ "cupid": "๐",
+ "curling_stone": "๐ฅ",
+ "curly_hair": "๐ฆฑ",
+ "curly_loop": "โฐ",
+ "currency_exchange": "๐ฑ",
+ "curry": "๐",
+ "custard": "๐ฎ",
+ "customs": "๐",
+ "cut_of_meat": "๐ฅฉ",
+ "cyclone": "๐",
+ "dagger": "๐ก",
+ "dancer": "๐",
+ "dancers": "๐ฏ",
+ "dango": "๐ก",
+ "dark_skin_tone": "๐ฟ",
+ "dark_sunglasses": "๐ถ",
+ "dart": "๐ฏ",
+ "dash": "๐จ",
+ "date": "๐
",
+ "deaf_person": "๐ง",
+ "deciduous_tree": "๐ณ",
+ "deer": "๐ฆ",
+ "department_store": "๐ฌ",
+ "derelict_house": "๐",
+ "desert": "๐",
+ "desert_island": "๐",
+ "desktop_computer": "๐ฅ",
+ "detective": "๐ต",
+ "diamond_shape_with_a_dot_inside": "๐ ",
+ "diamond_suit": "โฆ๏ธ",
+ "diamonds": "โฆ",
+ "disappointed": "๐",
+ "disappointed_relieved": "๐ฅ",
+ "diving_mask": "๐คฟ",
+ "diya_lamp": "๐ช",
+ "dizzy": "๐ซ",
+ "dizzy_face": "๐ต",
+ "dna": "๐งฌ",
+ "do_not_litter": "๐ฏ",
+ "dog": "๐ถ",
+ "dog2": "๐",
+ "dollar": "๐ต",
+ "dolls": "๐",
+ "dolphin": "๐ฌ",
+ "door": "๐ช",
+ "double_exclamation_mark": "โผ",
+ "doughnut": "๐ฉ",
+ "dove": "๐",
+ "down_arrow": "โฌ",
+ "downleft_arrow": "โ",
+ "downright_arrow": "โ",
+ "dragon": "๐",
+ "dragon_face": "๐ฒ",
+ "dress": "๐",
+ "dromedary_camel": "๐ช",
+ "drooling_face": "๐คค",
+ "drop_of_blood": "๐ฉธ",
+ "droplet": "๐ง",
+ "drum": "๐ฅ",
+ "duck": "๐ฆ",
+ "dumpling": "๐ฅ",
+ "dvd": "๐",
+ "e-mail": "๐ง",
+ "eagle": "๐ฆ
",
+ "ear": "๐",
+ "ear_of_rice": "๐พ",
+ "ear_with_hearing_aid": "๐ฆป",
+ "earth_africa": "๐",
+ "earth_americas": "๐",
+ "earth_asia": "๐",
+ "egg": "๐ฅ",
+ "eggplant": "๐",
+ "eight": "8โฃ",
+ "eight_pointed_black_star": "โด๏ธ",
+ "eight_spoked_asterisk": "โณ๏ธ",
+ "eightpointed_star": "โด",
+ "eightspoked_asterisk": "โณ",
+ "eject_button": "โ",
+ "electric_plug": "๐",
+ "elephant": "๐",
+ "elf": "๐ง",
+ "end": "๐",
+ "envelope": "โ",
+ "envelope_with_arrow": "๐ฉ",
+ "euro": "๐ถ",
+ "european_castle": "๐ฐ",
+ "european_post_office": "๐ค",
+ "evergreen_tree": "๐ฒ",
+ "exclamation": "โ",
+ "exclamation_question_mark": "โ",
+ "exploding_head": "๐คฏ",
+ "expressionless": "๐",
+ "eye": "๐",
+ "eyeglasses": "๐",
+ "eyes": "๐",
+ "face_vomiting": "๐คฎ",
+ "face_with_hand_over_mouth": "๐คญ",
+ "face_with_headbandage": "๐ค",
+ "face_with_monocle": "๐ง",
+ "face_with_raised_eyebrow": "๐คจ",
+ "face_with_symbols_on_mouth": "๐คฌ",
+ "face_with_symbols_over_mouth": "๐คฌ",
+ "face_with_thermometer": "๐ค",
+ "factory": "๐ญ",
+ "fairy": "๐ง",
+ "falafel": "๐ง",
+ "fallen_leaf": "๐",
+ "family": "๐ช",
+ "fast_forward": "โฉ",
+ "fax": "๐ ",
+ "fearful": "๐จ",
+ "feet": "๐พ",
+ "female_sign": "โ",
+ "ferris_wheel": "๐ก",
+ "ferry": "โด๏ธ",
+ "field_hockey": "๐",
+ "file_cabinet": "๐",
+ "file_folder": "๐",
+ "film_frames": "๐",
+ "film_projector": "๐ฝ",
+ "fingers_crossed": "๐ค",
+ "fire": "๐ฅ",
+ "fire_engine": "๐",
+ "fire_extinguisher": "๐งฏ",
+ "firecracker": "๐งจ",
+ "fireworks": "๐",
+ "first_place": "๐ฅ",
+ "first_quarter_moon": "๐",
+ "first_quarter_moon_with_face": "๐",
+ "fish": "๐",
+ "fish_cake": "๐ฅ",
+ "fishing_pole_and_fish": "๐ฃ",
+ "fist": "โ",
+ "five": "5โฃ",
+ "flag_black": "๐ด",
+ "flag_white": "๐ณ",
+ "flags": "๐",
+ "flamingo": "๐ฆฉ",
+ "flashlight": "๐ฆ",
+ "flat_shoe": "๐ฅฟ",
+ "fleur-de-lis": "โ",
+ "fleurde-lis": "โ๏ธ",
+ "floppy_disk": "๐พ",
+ "flower_playing_cards": "๐ด",
+ "flushed": "๐ณ",
+ "flying_disc": "๐ฅ",
+ "flying_saucer": "๐ธ",
+ "fog": "๐ซ",
+ "foggy": "๐",
+ "foot": "๐ฆถ",
+ "football": "๐",
+ "footprints": "๐ฃ",
+ "fork_and_knife": "๐ด",
+ "fork_and_knife_with_plate": "๐ฝ",
+ "fortune_cookie": "๐ฅ ",
+ "fountain": "โฒ",
+ "fountain_pen": "๐",
+ "four": "4โฃ",
+ "four_leaf_clover": "๐",
+ "fox": "๐ฆ",
+ "framed_picture": "๐ผ",
+ "free": "๐",
+ "french_bread": "๐ฅ",
+ "fried_shrimp": "๐ค",
+ "fries": "๐",
+ "frog": "๐ธ",
+ "frowning": "๐ฆ",
+ "frowning_face": "โน๏ธ",
+ "fuelpump": "โฝ",
+ "full_moon": "๐",
+ "full_moon_with_face": "๐",
+ "funeral_urn": "โฑ๏ธ",
+ "game_die": "๐ฒ",
+ "garlic": "๐ง",
+ "gear": "โ๏ธ",
+ "gem": "๐",
+ "gemini": "โ",
+ "genie": "๐ง",
+ "ghost": "๐ป",
+ "gift": "๐",
+ "gift_heart": "๐",
+ "giraffe": "๐ฆ",
+ "girl": "๐ง",
+ "glass_of_milk": "๐ฅ",
+ "globe_with_meridians": "๐",
+ "gloves": "๐งค",
+ "goal": "๐ฅ
",
+ "goal_net": "๐ฅ
",
+ "goat": "๐",
+ "goggles": "๐ฅฝ",
+ "golf": "โณ",
+ "golfer": "๐",
+ "gorilla": "๐ฆ",
+ "grapes": "๐",
+ "green_apple": "๐",
+ "green_book": "๐",
+ "green_circle": "๐ข",
+ "green_heart": "๐",
+ "green_salad": "๐ฅ",
+ "green_square": "๐ฉ",
+ "grey_exclamation": "โ",
+ "grey_question": "โ",
+ "grimacing": "๐ฌ",
+ "grin": "๐",
+ "grinning": "๐",
+ "guard": "๐",
+ "guardsman": "๐",
+ "guide_dog": "๐ฆฎ",
+ "guitar": "๐ธ",
+ "gun": "๐ซ",
+ "haircut": "๐",
+ "hamburger": "๐",
+ "hammer": "๐จ",
+ "hammer_and_pick": "โ๏ธ",
+ "hammer_and_wrench": "๐ ",
+ "hamster": "๐น",
+ "hand_with_fingers_splayed": "๐",
+ "handbag": "๐",
+ "handshake": "๐ค",
+ "hash": "#โฃ",
+ "hatched_chick": "๐ฅ",
+ "hatching_chick": "๐ฃ",
+ "head_bandage": "๐ค",
+ "headphones": "๐ง",
+ "hear_no_evil": "๐",
+ "heart": "โค๏ธ",
+ "heart_decoration": "๐",
+ "heart_exclamation": "โฃ",
+ "heart_eyes": "๐",
+ "heart_eyes_cat": "๐ป",
+ "heart_suit": "โฅ๏ธ",
+ "heartbeat": "๐",
+ "heartpulse": "๐",
+ "hearts": "โฅ",
+ "heavy_check_mark": "โ๏ธ",
+ "heavy_division_sign": "โ",
+ "heavy_dollar_sign": "๐ฒ",
+ "heavy_minus_sign": "โ",
+ "heavy_multiplication_x": "โ๏ธ",
+ "heavy_plus_sign": "โ",
+ "hedgehog": "๐ฆ",
+ "helicopter": "๐",
+ "herb": "๐ฟ",
+ "hibiscus": "๐บ",
+ "high_brightness": "๐",
+ "high_heel": "๐ ",
+ "hiking_boot": "๐ฅพ",
+ "hindu_temple": "๐",
+ "hippopotamus": "๐ฆ",
+ "hockey": "๐",
+ "hole": "๐ณ",
+ "honey_pot": "๐ฏ",
+ "horse": "๐ด",
+ "horse_racing": "๐",
+ "hospital": "๐ฅ",
+ "hot_face": "๐ฅต",
+ "hot_pepper": "๐ถ",
+ "hot_springs": "โจ",
+ "hotdog": "๐ญ",
+ "hotel": "๐จ",
+ "hotsprings": "โจ๏ธ",
+ "hourglass": "โ",
+ "hourglass_flowing_sand": "โณ",
+ "house": "๐ ",
+ "house_with_garden": "๐ก",
+ "houses": "๐",
+ "hugging": "๐ค",
+ "hundred_points": "๐ฏ",
+ "hushed": "๐ฏ",
+ "ice": "๐ง",
+ "ice_cream": "๐จ",
+ "ice_hockey": "๐",
+ "ice_skate": "โธ๏ธ",
+ "icecream": "๐ฆ",
+ "id": "๐",
+ "ideograph_advantage": "๐",
+ "imp": "๐ฟ",
+ "inbox_tray": "๐ฅ",
+ "incoming_envelope": "๐จ",
+ "index_pointing_up": "โ",
+ "infinity": "โพ",
+ "information": "โน๏ธ",
+ "information_desk_person": "๐",
+ "information_source": "โน",
+ "innocent": "๐",
+ "input_numbers": "๐ข",
+ "interrobang": "โ๏ธ",
+ "iphone": "๐ฑ",
+ "izakaya_lantern": "๐ฎ",
+ "jack_o_lantern": "๐",
+ "japan": "๐พ",
+ "japanese_castle": "๐ฏ",
+ "japanese_congratulations_button": "ใ๏ธ",
+ "japanese_free_of_charge_button": "๐",
+ "japanese_goblin": "๐บ",
+ "japanese_ogre": "๐น",
+ "japanese_reserved_button": "๐ฏ",
+ "japanese_secret_button": "ใ๏ธ",
+ "japanese_service_charge_button": "๐",
+ "jeans": "๐",
+ "joy": "๐",
+ "joy_cat": "๐น",
+ "joystick": "๐น",
+ "kaaba": "๐",
+ "kangaroo": "๐ฆ",
+ "key": "๐",
+ "keyboard": "โจ๏ธ",
+ "keycap_ten": "๐",
+ "kick_scooter": "๐ด",
+ "kimono": "๐",
+ "kiss": "๐",
+ "kissing": "๐",
+ "kissing_cat": "๐ฝ",
+ "kissing_closed_eyes": "๐",
+ "kissing_heart": "๐",
+ "kissing_smiling_eyes": "๐",
+ "kitchen_knife": "๐ช",
+ "kite": "๐ช",
+ "kiwi": "๐ฅ",
+ "kiwi_fruit": "๐ฅ",
+ "knife": "๐ช",
+ "koala": "๐จ",
+ "koko": "๐",
+ "lab_coat": "๐ฅผ",
+ "label": "๐ท",
+ "lacrosse": "๐ฅ",
+ "large_blue_diamond": "๐ท",
+ "large_orange_diamond": "๐ถ",
+ "last_quarter_moon": "๐",
+ "last_quarter_moon_with_face": "๐",
+ "last_track_button": "โฎ๏ธ",
+ "latin_cross": "โ",
+ "laughing": "๐",
+ "leafy_green": "๐ฅฌ",
+ "leaves": "๐",
+ "ledger": "๐",
+ "left_arrow": "โฌ
",
+ "left_arrow_curving_right": "โช",
+ "left_facing_fist": "๐ค",
+ "left_luggage": "๐
",
+ "left_right_arrow": "โ",
+ "leftfacing_fist": "๐ค",
+ "leftright_arrow": "โ๏ธ",
+ "leftwards_arrow_with_hook": "โฉ๏ธ",
+ "leg": "๐ฆต",
+ "lemon": "๐",
+ "leo": "โ",
+ "leopard": "๐",
+ "level_slider": "๐",
+ "libra": "โ",
+ "light_rail": "๐",
+ "light_skin_tone": "๐ป",
+ "link": "๐",
+ "linked_paperclips": "๐",
+ "lion_face": "๐ฆ",
+ "lips": "๐",
+ "lipstick": "๐",
+ "lizard": "๐ฆ",
+ "llama": "๐ฆ",
+ "lobster": "๐ฆ",
+ "lock": "๐",
+ "lock_with_ink_pen": "๐",
+ "lollipop": "๐ญ",
+ "loop": "โฟ",
+ "lotion_bottle": "๐งด",
+ "loud_sound": "๐",
+ "loudspeaker": "๐ข",
+ "love_hotel": "๐ฉ",
+ "love_letter": "๐",
+ "love_you_gesture": "๐ค",
+ "loveyou_gesture": "๐ค",
+ "low_brightness": "๐
",
+ "luggage": "๐งณ",
+ "lying_face": "๐คฅ",
+ "m": "โ๏ธ",
+ "mag": "๐",
+ "mag_right": "๐",
+ "mage": "๐ง",
+ "magnet": "๐งฒ",
+ "mahjong": "๐",
+ "mailbox": "๐ซ",
+ "mailbox_closed": "๐ช",
+ "mailbox_with_mail": "๐ฌ",
+ "mailbox_with_no_mail": "๐ญ",
+ "male_sign": "โ",
+ "man": "๐จ",
+ "man_dancing": "๐บ",
+ "man_in_suit": "๐ด",
+ "man_in_tuxedo": "๐คต",
+ "man_with_chinese_cap": "๐ฒ",
+ "man_with_gua_pi_mao": "๐ฒ",
+ "man_with_turban": "๐ณ",
+ "mango": "๐ฅญ",
+ "mans_shoe": "๐",
+ "mantelpiece_clock": "๐ฐ",
+ "manual_wheelchair": "๐ฆฝ",
+ "maple_leaf": "๐",
+ "martial_arts_uniform": "๐ฅ",
+ "mask": "๐ท",
+ "massage": "๐",
+ "mate": "๐ง",
+ "meat_on_bone": "๐",
+ "mechanical_arm": "๐ฆพ",
+ "mechanical_leg": "๐ฆฟ",
+ "medal": "๐
",
+ "medical_symbol": "โ",
+ "medium_skin_tone": "๐ฝ",
+ "mediumdark_skin_tone": "๐พ",
+ "mediumlight_skin_tone": "๐ผ",
+ "mega": "๐ฃ",
+ "melon": "๐",
+ "memo": "๐",
+ "menorah": "๐",
+ "mens": "๐น",
+ "merperson": "๐ง",
+ "metal": "๐ค",
+ "metro": "๐",
+ "microbe": "๐ฆ ",
+ "microphone": "๐ค",
+ "microscope": "๐ฌ",
+ "middle_finger": "๐",
+ "military_medal": "๐",
+ "milk": "๐ฅ",
+ "milky_way": "๐",
+ "minibus": "๐",
+ "minidisc": "๐ฝ",
+ "mobile_phone_off": "๐ด",
+ "money_mouth": "๐ค",
+ "money_with_wings": "๐ธ",
+ "moneybag": "๐ฐ",
+ "moneymouth_face": "๐ค",
+ "monkey": "๐",
+ "monkey_face": "๐ต",
+ "monorail": "๐",
+ "moon_cake": "๐ฅฎ",
+ "mortar_board": "๐",
+ "mosque": "๐",
+ "mosquito": "๐ฆ",
+ "motor_boat": "๐ฅ",
+ "motor_scooter": "๐ต",
+ "motorcycle": "๐",
+ "motorized_wheelchair": "๐ฆผ",
+ "motorway": "๐ฃ",
+ "mount_fuji": "๐ป",
+ "mountain": "โฐ๏ธ",
+ "mountain_bicyclist": "๐ต",
+ "mountain_cableway": "๐ ",
+ "mountain_railway": "๐",
+ "mouse": "๐ญ",
+ "mouse2": "๐",
+ "movie_camera": "๐ฅ",
+ "moyai": "๐ฟ",
+ "mrs_claus": "๐คถ",
+ "multiplication_sign": "โ",
+ "muscle": "๐ช",
+ "mushroom": "๐",
+ "musical_keyboard": "๐น",
+ "musical_note": "๐ต",
+ "musical_score": "๐ผ",
+ "mute": "๐",
+ "nail_care": "๐
",
+ "name_badge": "๐",
+ "national_park": "๐",
+ "nauseated_face": "๐คข",
+ "nazar_amulet": "๐งฟ",
+ "necktie": "๐",
+ "negative_squared_cross_mark": "โ",
+ "nerd": "๐ค",
+ "neutral_face": "๐",
+ "new": "๐",
+ "new_moon": "๐",
+ "new_moon_with_face": "๐",
+ "newspaper": "๐ฐ",
+ "next_track_button": "โญ๏ธ",
+ "ng": "๐",
+ "night_with_stars": "๐",
+ "nine": "9โฃ",
+ "no_bell": "๐",
+ "no_bicycles": "๐ณ",
+ "no_entry": "โ",
+ "no_entry_sign": "๐ซ",
+ "no_good": "๐
",
+ "no_mobile_phones": "๐ต",
+ "no_mouth": "๐ถ",
+ "no_pedestrians": "๐ท",
+ "no_smoking": "๐ญ",
+ "non-potable_water": "๐ฑ",
+ "nose": "๐",
+ "notebook": "๐",
+ "notebook_with_decorative_cover": "๐",
+ "notes": "๐ถ",
+ "nut_and_bolt": "๐ฉ",
+ "o": "โญ",
+ "o_button_blood_type": "๐
พ",
+ "ocean": "๐",
+ "octagonal_sign": "๐",
+ "octopus": "๐",
+ "oden": "๐ข",
+ "office": "๐ข",
+ "oil_drum": "๐ข",
+ "ok": "๐",
+ "ok_hand": "๐",
+ "ok_woman": "๐",
+ "old_key": "๐",
+ "older_adult": "๐ง",
+ "older_man": "๐ด",
+ "older_person": "๐ง",
+ "older_woman": "๐ต",
+ "om_symbol": "๐",
+ "on": "๐",
+ "oncoming_automobile": "๐",
+ "oncoming_bus": "๐",
+ "oncoming_fist": "๐",
+ "oncoming_police_car": "๐",
+ "oncoming_taxi": "๐",
+ "one": "1โฃ",
+ "onepiece_swimsuit": "๐ฉฑ",
+ "onion": "๐ง
",
+ "open_file_folder": "๐",
+ "open_hands": "๐",
+ "open_mouth": "๐ฎ",
+ "ophiuchus": "โ",
+ "orange_book": "๐",
+ "orange_circle": "๐ ",
+ "orange_heart": "๐งก",
+ "orange_square": "๐ง",
+ "orangutan": "๐ฆง",
+ "orthodox_cross": "โฆ๏ธ",
+ "otter": "๐ฆฆ",
+ "outbox_tray": "๐ค",
+ "owl": "๐ฆ",
+ "ox": "๐",
+ "oyster": "๐ฆช",
+ "p_button": "๐
ฟ",
+ "package": "๐ฆ",
+ "page_facing_up": "๐",
+ "page_with_curl": "๐",
+ "pager": "๐",
+ "paintbrush": "๐",
+ "palm_tree": "๐ด",
+ "palms_up_together": "๐คฒ",
+ "pancakes": "๐ฅ",
+ "panda_face": "๐ผ",
+ "paperclip": "๐",
+ "parachute": "๐ช",
+ "parrot": "๐ฆ",
+ "part_alternation_mark": "ใฝ",
+ "partly_sunny": "โ
",
+ "partying_face": "๐ฅณ",
+ "passenger_ship": "๐ณ",
+ "passport_control": "๐",
+ "pause_button": "โธ๏ธ",
+ "peace": "โฎ",
+ "peace_symbol": "โฎ๏ธ",
+ "peach": "๐",
+ "peacock": "๐ฆ",
+ "peanuts": "๐ฅ",
+ "pear": "๐",
+ "pen": "๐",
+ "pencil": "๐",
+ "pencil2": "โ",
+ "penguin": "๐ง",
+ "pensive": "๐",
+ "people_with_bunny_ears_partying": "๐ฏ",
+ "people_wrestling": "๐คผ",
+ "performing_arts": "๐ญ",
+ "persevere": "๐ฃ",
+ "person": "๐ง",
+ "person_biking": "๐ด",
+ "person_bouncing_ball": "โน๏ธ",
+ "person_bowing": "๐",
+ "person_cartwheeling": "๐คธ",
+ "person_climbing": "๐ง",
+ "person_doing_cartwheel": "๐คธ",
+ "person_facepalming": "๐คฆ",
+ "person_fencing": "๐คบ",
+ "person_frowning": "๐",
+ "person_gesturing_no": "๐
",
+ "person_gesturing_ok": "๐",
+ "person_getting_haircut": "๐",
+ "person_getting_massage": "๐",
+ "person_in_lotus_position": "๐ง",
+ "person_in_steamy_room": "๐ง",
+ "person_juggling": "๐คน",
+ "person_kneeling": "๐ง",
+ "person_mountain_biking": "๐ต",
+ "person_playing_handball": "๐คพ",
+ "person_playing_water_polo": "๐คฝ",
+ "person_pouting": "๐",
+ "person_raising_hand": "๐",
+ "person_rowing_boat": "๐ฃ",
+ "person_running": "๐",
+ "person_shrugging": "๐คท",
+ "person_standing": "๐ง",
+ "person_surfing": "๐",
+ "person_swimming": "๐",
+ "person_tipping_hand": "๐",
+ "person_walking": "๐ถ",
+ "person_wearing_turban": "๐ณ",
+ "person_with_blond_hair": "๐ฑ",
+ "person_with_pouting_face": "๐",
+ "petri_dish": "๐งซ",
+ "pick": "โ๏ธ",
+ "pie": "๐ฅง",
+ "pig": "๐ท",
+ "pig2": "๐",
+ "pig_nose": "๐ฝ",
+ "pill": "๐",
+ "pinching_hand": "๐ค",
+ "pineapple": "๐",
+ "ping_pong": "๐",
+ "pisces": "โ",
+ "pizza": "๐",
+ "place_of_worship": "๐",
+ "play_button": "โถ",
+ "play_or_pause_button": "โฏ๏ธ",
+ "play_pause": "โฏ",
+ "pleading_face": "๐ฅบ",
+ "point_down": "๐",
+ "point_left": "๐",
+ "point_right": "๐",
+ "point_up": "โ๏ธ",
+ "point_up_2": "๐",
+ "police_car": "๐",
+ "police_officer": "๐ฎ",
+ "poodle": "๐ฉ",
+ "poop": "๐ฉ",
+ "popcorn": "๐ฟ",
+ "post_office": "๐ฃ",
+ "postal_horn": "๐ฏ",
+ "postbox": "๐ฎ",
+ "potable_water": "๐ฐ",
+ "potato": "๐ฅ",
+ "pouch": "๐",
+ "poultry_leg": "๐",
+ "pound": "๐ท",
+ "pouting_cat": "๐พ",
+ "pray": "๐",
+ "prayer_beads": "๐ฟ",
+ "pregnant_woman": "๐คฐ",
+ "pretzel": "๐ฅจ",
+ "prince": "๐คด",
+ "princess": "๐ธ",
+ "printer": "๐จ",
+ "probing_cane": "๐ฆฏ",
+ "punch": "๐",
+ "purple_circle": "๐ฃ",
+ "purple_heart": "๐",
+ "purse": "๐",
+ "pushpin": "๐",
+ "put_litter_in_its_place": "๐ฎ",
+ "puzzle_piece": "๐งฉ",
+ "question": "โ",
+ "rabbit": "๐ฐ",
+ "rabbit2": "๐",
+ "raccoon": "๐ฆ",
+ "racehorse": "๐",
+ "racing_car": "๐",
+ "radio": "๐ป",
+ "radio_button": "๐",
+ "radioactive": "โข๏ธ",
+ "rage": "๐ก",
+ "railway_car": "๐",
+ "railway_track": "๐ค",
+ "rainbow": "๐",
+ "raised_back_of_hand": "๐ค",
+ "raised_hand": "โ",
+ "raised_hands": "๐",
+ "raising_hand": "๐",
+ "ram": "๐",
+ "ramen": "๐",
+ "rat": "๐",
+ "razor": "๐ช",
+ "receipt": "๐งพ",
+ "record_button": "โบ๏ธ",
+ "recycle": "โป",
+ "recycling_symbol": "โป๏ธ",
+ "red_car": "๐",
+ "red_circle": "๐ด",
+ "red_envelope": "๐งง",
+ "red_hair": "๐ฆฐ",
+ "red_heart": "โค",
+ "red_square": "๐ฅ",
+ "regional_indicator_a": "๐ฆ",
+ "regional_indicator_b": "๐ง",
+ "regional_indicator_c": "๐จ",
+ "regional_indicator_d": "๐ฉ",
+ "regional_indicator_e": "๐ช",
+ "regional_indicator_f": "๐ซ",
+ "regional_indicator_g": "๐ฌ",
+ "regional_indicator_h": "๐ญ",
+ "regional_indicator_i": "๐ฎ",
+ "regional_indicator_j": "๐ฏ",
+ "regional_indicator_k": "๐ฐ",
+ "regional_indicator_l": "๐ฑ",
+ "regional_indicator_m": "๐ฒ",
+ "regional_indicator_n": "๐ณ",
+ "regional_indicator_o": "๐ด",
+ "regional_indicator_p": "๐ต",
+ "regional_indicator_q": "๐ถ",
+ "regional_indicator_r": "๐ท",
+ "regional_indicator_s": "๐ธ",
+ "regional_indicator_t": "๐น",
+ "regional_indicator_u": "๐บ",
+ "regional_indicator_v": "๐ป",
+ "regional_indicator_w": "๐ผ",
+ "regional_indicator_x": "๐ฝ",
+ "regional_indicator_y": "๐พ",
+ "regional_indicator_z": "๐ฟ",
+ "registered": "ยฎ",
+ "relieved": "๐",
+ "reminder_ribbon": "๐",
+ "repeat": "๐",
+ "repeat_one": "๐",
+ "rescue_workerโs_helmet": "โ๏ธ",
+ "restroom": "๐ป",
+ "reverse_button": "โ",
+ "revolving_hearts": "๐",
+ "rewind": "โช",
+ "rhino": "๐ฆ",
+ "rhinoceros": "๐ฆ",
+ "ribbon": "๐",
+ "rice": "๐",
+ "rice_ball": "๐",
+ "rice_cracker": "๐",
+ "rice_scene": "๐",
+ "right_arrow": "โก๏ธ",
+ "right_arrow_curving_down": "โคต",
+ "right_arrow_curving_left": "โฉ",
+ "right_arrow_curving_up": "โคด",
+ "right_facing_fist": "๐ค",
+ "rightfacing_fist": "๐ค",
+ "ring": "๐",
+ "ringed_planet": "๐ช",
+ "robot": "๐ค",
+ "rocket": "๐",
+ "rofl": "๐คฃ",
+ "roll_of_paper": "๐งป",
+ "rolledup_newspaper": "๐",
+ "roller_coaster": "๐ข",
+ "rolling_eyes": "๐",
+ "rolling_on_the_floor_laughing": "๐คฃ",
+ "rooster": "๐",
+ "rose": "๐น",
+ "rosette": "๐ต",
+ "rotating_light": "๐จ",
+ "round_pushpin": "๐",
+ "rowboat": "๐ฃ",
+ "rugby_football": "๐",
+ "runner": "๐",
+ "running_shirt_with_sash": "๐ฝ",
+ "safety_pin": "๐งท",
+ "safety_vest": "๐ฆบ",
+ "sagittarius": "โ",
+ "sailboat": "โต",
+ "sake": "๐ถ",
+ "salad": "๐ฅ",
+ "salt": "๐ง",
+ "sandal": "๐ก",
+ "sandwich": "๐ฅช",
+ "santa": "๐
",
+ "sari": "๐ฅป",
+ "satellite": "๐ก",
+ "sauropod": "๐ฆ",
+ "saxophone": "๐ท",
+ "scales": "โ",
+ "scarf": "๐งฃ",
+ "school": "๐ซ",
+ "school_satchel": "๐",
+ "scissors": "โ",
+ "scooter": "๐ด",
+ "scorpion": "๐ฆ",
+ "scorpius": "โ",
+ "scream": "๐ฑ",
+ "scream_cat": "๐",
+ "scroll": "๐",
+ "seat": "๐บ",
+ "second_place": "๐ฅ",
+ "secret": "ใ",
+ "see_no_evil": "๐",
+ "seedling": "๐ฑ",
+ "selfie": "๐คณ",
+ "seven": "7โฃ",
+ "shallow_pan_of_food": "๐ฅ",
+ "shamrock": "โ๏ธ",
+ "shark": "๐ฆ",
+ "shaved_ice": "๐ง",
+ "sheep": "๐",
+ "shell": "๐",
+ "shield": "๐ก",
+ "shinto_shrine": "โฉ๏ธ",
+ "ship": "๐ข",
+ "shirt": "๐",
+ "shopping_bags": "๐",
+ "shopping_cart": "๐",
+ "shorts": "๐ฉณ",
+ "shower": "๐ฟ",
+ "shrimp": "๐ฆ",
+ "shushing_face": "๐คซ",
+ "sign_of_the_horns": "๐ค",
+ "signal_strength": "๐ถ",
+ "six": "6โฃ",
+ "six_pointed_star": "๐ฏ",
+ "skateboard": "๐น",
+ "ski": "๐ฟ",
+ "skier": "โท๏ธ",
+ "skull": "๐",
+ "skull_and_crossbones": "โ ๏ธ",
+ "skull_crossbones": "โ ",
+ "skunk": "๐ฆจ",
+ "sled": "๐ท",
+ "sleeping": "๐ด",
+ "sleeping_accommodation": "๐",
+ "sleepy": "๐ช",
+ "slight_frown": "๐",
+ "slight_smile": "๐",
+ "slightly_frowning_face": "๐",
+ "slot_machine": "๐ฐ",
+ "sloth": "๐ฆฅ",
+ "small_airplane": "๐ฉ",
+ "small_blue_diamond": "๐น",
+ "small_orange_diamond": "๐ธ",
+ "small_red_triangle": "๐บ",
+ "small_red_triangle_down": "๐ป",
+ "smile": "๐",
+ "smile_cat": "๐ธ",
+ "smiley": "๐",
+ "smiley_cat": "๐บ",
+ "smiling": "โบ๏ธ",
+ "smiling_face": "โบ",
+ "smiling_face_with_hearts": "๐ฅฐ",
+ "smiling_imp": "๐",
+ "smirk": "๐",
+ "smirk_cat": "๐ผ",
+ "smoking": "๐ฌ",
+ "snail": "๐",
+ "snake": "๐",
+ "sneezing_face": "๐คง",
+ "snowboarder": "๐",
+ "snowcapped_mountain": "๐",
+ "snowflake": "โ",
+ "snowman": "โ",
+ "soap": "๐งผ",
+ "sob": "๐ญ",
+ "soccer": "โฝ",
+ "socks": "๐งฆ",
+ "softball": "๐ฅ",
+ "soon": "๐",
+ "sos": "๐",
+ "sound": "๐",
+ "space_invader": "๐พ",
+ "spade_suit": "โ ๏ธ",
+ "spades": "โ ",
+ "spaghetti": "๐",
+ "sparkle": "โ",
+ "sparkler": "๐",
+ "sparkles": "โจ",
+ "sparkling_heart": "๐",
+ "speak_no_evil": "๐",
+ "speaker": "๐",
+ "speaking_head": "๐ฃ",
+ "speech_balloon": "๐ฌ",
+ "speech_left": "๐จ",
+ "speedboat": "๐ค",
+ "spider": "๐ท",
+ "spider_web": "๐ธ",
+ "spiral_calendar": "๐",
+ "spiral_notepad": "๐",
+ "sponge": "๐งฝ",
+ "spoon": "๐ฅ",
+ "squid": "๐ฆ",
+ "stadium": "๐",
+ "star": "โญ",
+ "star2": "๐",
+ "star_and_crescent": "โช๏ธ",
+ "star_of_david": "โก",
+ "star_struck": "๐คฉ",
+ "stars": "๐ ",
+ "starstruck": "๐คฉ",
+ "station": "๐",
+ "statue_of_liberty": "๐ฝ",
+ "steam_locomotive": "๐",
+ "stethoscope": "๐ฉบ",
+ "stew": "๐ฒ",
+ "stop_button": "โน๏ธ",
+ "stopwatch": "โฑ๏ธ",
+ "straight_ruler": "๐",
+ "strawberry": "๐",
+ "stuck_out_tongue": "๐",
+ "stuck_out_tongue_closed_eyes": "๐",
+ "stuck_out_tongue_winking_eye": "๐",
+ "studio_microphone": "๐",
+ "stuffed_flatbread": "๐ฅ",
+ "sun": "โ",
+ "sun_behind_large_cloud": "๐ฅ",
+ "sun_behind_rain_cloud": "๐ฆ",
+ "sun_behind_small_cloud": "๐ค",
+ "sun_with_face": "๐",
+ "sunflower": "๐ป",
+ "sunglasses": "๐",
+ "sunny": "โ๏ธ",
+ "sunrise": "๐
",
+ "sunrise_over_mountains": "๐",
+ "superhero": "๐ฆธ",
+ "supervillain": "๐ฆน",
+ "surfer": "๐",
+ "sushi": "๐ฃ",
+ "suspension_railway": "๐",
+ "swan": "๐ฆข",
+ "sweat": "๐",
+ "sweat_drops": "๐ฆ",
+ "sweat_smile": "๐
",
+ "sweet_potato": "๐ ",
+ "swimmer": "๐",
+ "symbols": "๐ฃ",
+ "synagogue": "๐",
+ "syringe": "๐",
+ "t_rex": "๐ฆ",
+ "taco": "๐ฎ",
+ "tada": "๐",
+ "takeout_box": "๐ฅก",
+ "tanabata_tree": "๐",
+ "tangerine": "๐",
+ "taurus": "โ",
+ "taxi": "๐",
+ "tea": "๐ต",
+ "teddy_bear": "๐งธ",
+ "telephone": "โ",
+ "telephone_receiver": "๐",
+ "telescope": "๐ญ",
+ "tennis": "๐พ",
+ "tent": "โบ",
+ "test_tube": "๐งช",
+ "thermometer": "๐ก",
+ "thermometer_face": "๐ค",
+ "thinking": "๐ค",
+ "third_place": "๐ฅ",
+ "thought_balloon": "๐ญ",
+ "thread": "๐งต",
+ "three": "3โฃ",
+ "thumbsdown": "๐",
+ "thumbsup": "๐",
+ "ticket": "๐ซ",
+ "tiger": "๐ฏ",
+ "tiger2": "๐
",
+ "timer_clock": "โฒ๏ธ",
+ "tired_face": "๐ซ",
+ "tm": "โข",
+ "toilet": "๐ฝ",
+ "tokyo_tower": "๐ผ",
+ "tomato": "๐
",
+ "tone1": "๐ป",
+ "tone2": "๐ผ",
+ "tone3": "๐ฝ",
+ "tone4": "๐พ",
+ "tone5": "๐ฟ",
+ "tongue": "๐
",
+ "toolbox": "๐งฐ",
+ "tooth": "๐ฆท",
+ "top": "๐",
+ "tophat": "๐ฉ",
+ "tornado": "๐ช",
+ "track_next": "โญ",
+ "track_previous": "โฎ",
+ "trackball": "๐ฒ",
+ "tractor": "๐",
+ "trade_mark": "โข๏ธ",
+ "traffic_light": "๐ฅ",
+ "train": "๐",
+ "train2": "๐",
+ "tram": "๐",
+ "trex": "๐ฆ",
+ "triangular_flag_on_post": "๐ฉ",
+ "triangular_ruler": "๐",
+ "trident": "๐ฑ",
+ "triumph": "๐ค",
+ "trolleybus": "๐",
+ "trophy": "๐",
+ "tropical_drink": "๐น",
+ "tropical_fish": "๐ ",
+ "truck": "๐",
+ "trumpet": "๐บ",
+ "tulip": "๐ท",
+ "tumbler_glass": "๐ฅ",
+ "turkey": "๐ฆ",
+ "turtle": "๐ข",
+ "tv": "๐บ",
+ "twisted_rightwards_arrows": "๐",
+ "two": "2โฃ",
+ "two_hearts": "๐",
+ "two_men_holding_hands": "๐ฌ",
+ "two_women_holding_hands": "๐ญ",
+ "u5272": "๐น",
+ "u5408": "๐ด",
+ "u55b6": "๐บ",
+ "u6307": "๐ฏ",
+ "u6708": "๐ท",
+ "u6709": "๐ถ",
+ "u6e80": "๐ต",
+ "u7121": "๐",
+ "u7533": "๐ธ",
+ "u7981": "๐ฒ",
+ "u7a7a": "๐ณ",
+ "umbrella": "โ",
+ "umbrella_on_ground": "โฑ๏ธ",
+ "unamused": "๐",
+ "underage": "๐",
+ "unicorn": "๐ฆ",
+ "unlock": "๐",
+ "up": "๐",
+ "up_arrow": "โฌ",
+ "updown_arrow": "โ๏ธ",
+ "upleft_arrow": "โ๏ธ",
+ "upright_arrow": "โ",
+ "upside_down": "๐",
+ "v": "โ๏ธ",
+ "vampire": "๐ง",
+ "vertical_traffic_light": "๐ฆ",
+ "vhs": "๐ผ",
+ "vibration_mode": "๐ณ",
+ "victory_hand": "โ",
+ "video_camera": "๐น",
+ "video_game": "๐ฎ",
+ "violin": "๐ป",
+ "virgo": "โ",
+ "volcano": "๐",
+ "volleyball": "๐",
+ "vs": "๐",
+ "vulcan": "๐",
+ "vulcan_salute": "๐",
+ "waffle": "๐ง",
+ "walking": "๐ถ",
+ "waning_crescent_moon": "๐",
+ "waning_gibbous_moon": "๐",
+ "warning": "โ ",
+ "wastebasket": "๐",
+ "watch": "โ",
+ "water_buffalo": "๐",
+ "watermelon": "๐",
+ "wave": "๐",
+ "wavy_dash": "ใฐ๏ธ",
+ "waxing_crescent_moon": "๐",
+ "waxing_gibbous_moon": "๐",
+ "wc": "๐พ",
+ "weary": "๐ฉ",
+ "wedding": "๐",
+ "weightlifter": "๐",
+ "whale": "๐ณ",
+ "whale2": "๐",
+ "wheel_of_dharma": "โธ๏ธ",
+ "wheelchair": "โฟ",
+ "white_check_mark": "โ
",
+ "white_circle": "โช",
+ "white_flower": "๐ฎ",
+ "white_hair": "๐ฆณ",
+ "white_heart": "๐ค",
+ "white_large_square": "โฌ",
+ "white_medium_small_square": "โฝ",
+ "white_medium_square": "โป๏ธ",
+ "white_small_square": "โซ๏ธ",
+ "white_square_button": "๐ณ",
+ "wilted_flower": "๐ฅ",
+ "wilted_rose": "๐ฅ",
+ "wind_blowing_face": "๐ฌ",
+ "wind_chime": "๐",
+ "wine_glass": "๐ท",
+ "wink": "๐",
+ "wolf": "๐บ",
+ "woman": "๐ฉ",
+ "woman_with_headscarf": "๐ง",
+ "womans_clothes": "๐",
+ "womans_hat": "๐",
+ "womens": "๐บ",
+ "woozy_face": "๐ฅด",
+ "world_map": "๐บ",
+ "worried": "๐",
+ "wrench": "๐ง",
+ "writing_hand": "โ๏ธ",
+ "x": "โ",
+ "yarn": "๐งถ",
+ "yawning_face": "๐ฅฑ",
+ "yellow_circle": "๐ก",
+ "yellow_heart": "๐",
+ "yellow_square": "๐จ",
+ "yen": "๐ด",
+ "yin_yang": "โฏ๏ธ",
+ "yoyo": "๐ช",
+ "yum": "๐",
+ "zany_face": "๐คช",
+ "zap": "โก",
+ "zebra": "๐ฆ",
+ "zero": "0โฃ",
+ "zipper_mouth": "๐ค",
+ "zombie": "๐ง",
+ "zzz": "๐ค"
+}
\ No newline at end of file
diff --git a/priv/static/static/js/10.0044e0a91e709d07cc7f.js b/priv/static/static/js/10.0044e0a91e709d07cc7f.js
new file mode 100644
index 000000000..1d9eb70f5
Binary files /dev/null and b/priv/static/static/js/10.0044e0a91e709d07cc7f.js differ
diff --git a/priv/static/static/js/16.5e3f20da470591d0cabf.js.map b/priv/static/static/js/10.0044e0a91e709d07cc7f.js.map
similarity index 56%
rename from priv/static/static/js/16.5e3f20da470591d0cabf.js.map
rename to priv/static/static/js/10.0044e0a91e709d07cc7f.js.map
index 0c4d0e385..2f816ec9d 100644
Binary files a/priv/static/static/js/16.5e3f20da470591d0cabf.js.map and b/priv/static/static/js/10.0044e0a91e709d07cc7f.js.map differ
diff --git a/priv/static/static/js/10.46f441b948010eda4403.js b/priv/static/static/js/10.46f441b948010eda4403.js
deleted file mode 100644
index 308d124c0..000000000
Binary files a/priv/static/static/js/10.46f441b948010eda4403.js and /dev/null differ
diff --git a/priv/static/static/js/16.5e3f20da470591d0cabf.js b/priv/static/static/js/16.49ae236fe0fc6a010e66.js
similarity index 98%
rename from priv/static/static/js/16.5e3f20da470591d0cabf.js
rename to priv/static/static/js/16.49ae236fe0fc6a010e66.js
index e90ed4ca1..dc0e1b08d 100644
Binary files a/priv/static/static/js/16.5e3f20da470591d0cabf.js and b/priv/static/static/js/16.49ae236fe0fc6a010e66.js differ
diff --git a/priv/static/static/js/18.9a5b877f94b2b53065e1.js.map b/priv/static/static/js/16.49ae236fe0fc6a010e66.js.map
similarity index 56%
rename from priv/static/static/js/18.9a5b877f94b2b53065e1.js.map
rename to priv/static/static/js/16.49ae236fe0fc6a010e66.js.map
index 61d9a7d41..ec00186b1 100644
Binary files a/priv/static/static/js/18.9a5b877f94b2b53065e1.js.map and b/priv/static/static/js/16.49ae236fe0fc6a010e66.js.map differ
diff --git a/priv/static/static/js/18.9a5b877f94b2b53065e1.js b/priv/static/static/js/18.9a5b877f94b2b53065e1.js
deleted file mode 100644
index c4aea5b25..000000000
Binary files a/priv/static/static/js/18.9a5b877f94b2b53065e1.js and /dev/null differ
diff --git a/priv/static/static/js/18.cf36e1127e02cd2a36a4.js b/priv/static/static/js/18.cf36e1127e02cd2a36a4.js
new file mode 100644
index 000000000..d7c021bed
Binary files /dev/null and b/priv/static/static/js/18.cf36e1127e02cd2a36a4.js differ
diff --git a/priv/static/static/js/10.46f441b948010eda4403.js.map b/priv/static/static/js/18.cf36e1127e02cd2a36a4.js.map
similarity index 56%
rename from priv/static/static/js/10.46f441b948010eda4403.js.map
rename to priv/static/static/js/18.cf36e1127e02cd2a36a4.js.map
index e0623e6bf..0431728a4 100644
Binary files a/priv/static/static/js/10.46f441b948010eda4403.js.map and b/priv/static/static/js/18.cf36e1127e02cd2a36a4.js.map differ
diff --git a/priv/static/static/js/2.422e6c756ac673a6fd44.js b/priv/static/static/js/2.422e6c756ac673a6fd44.js
deleted file mode 100644
index 9fb47e2bf..000000000
Binary files a/priv/static/static/js/2.422e6c756ac673a6fd44.js and /dev/null differ
diff --git a/priv/static/static/js/2.422e6c756ac673a6fd44.js.map b/priv/static/static/js/2.422e6c756ac673a6fd44.js.map
deleted file mode 100644
index 92fdb4d2c..000000000
Binary files a/priv/static/static/js/2.422e6c756ac673a6fd44.js.map and /dev/null differ
diff --git a/priv/static/static/js/2.9b94fcdec8b4c4dde80f.js b/priv/static/static/js/2.9b94fcdec8b4c4dde80f.js
new file mode 100644
index 000000000..b85deca02
Binary files /dev/null and b/priv/static/static/js/2.9b94fcdec8b4c4dde80f.js differ
diff --git a/priv/static/static/js/2.9b94fcdec8b4c4dde80f.js.map b/priv/static/static/js/2.9b94fcdec8b4c4dde80f.js.map
new file mode 100644
index 000000000..1f5da32fe
Binary files /dev/null and b/priv/static/static/js/2.9b94fcdec8b4c4dde80f.js.map differ
diff --git a/priv/static/static/js/28.e575fccfc5c48ba080e1.js b/priv/static/static/js/28.e575fccfc5c48ba080e1.js
new file mode 100644
index 000000000..3b503347c
Binary files /dev/null and b/priv/static/static/js/28.e575fccfc5c48ba080e1.js differ
diff --git a/priv/static/static/js/28.f1353aa382a104262d1a.js.map b/priv/static/static/js/28.e575fccfc5c48ba080e1.js.map
similarity index 56%
rename from priv/static/static/js/28.f1353aa382a104262d1a.js.map
rename to priv/static/static/js/28.e575fccfc5c48ba080e1.js.map
index 3421c9511..0bfdc3fc1 100644
Binary files a/priv/static/static/js/28.f1353aa382a104262d1a.js.map and b/priv/static/static/js/28.e575fccfc5c48ba080e1.js.map differ
diff --git a/priv/static/static/js/28.f1353aa382a104262d1a.js b/priv/static/static/js/28.f1353aa382a104262d1a.js
deleted file mode 100644
index a253284f0..000000000
Binary files a/priv/static/static/js/28.f1353aa382a104262d1a.js and /dev/null differ
diff --git a/priv/static/static/js/3.a0df8a5bcd120d1f8581.js b/priv/static/static/js/3.c16fafd37452b101b5bc.js
similarity index 99%
rename from priv/static/static/js/3.a0df8a5bcd120d1f8581.js
rename to priv/static/static/js/3.c16fafd37452b101b5bc.js
index 423121114..8115aa69a 100644
Binary files a/priv/static/static/js/3.a0df8a5bcd120d1f8581.js and b/priv/static/static/js/3.c16fafd37452b101b5bc.js differ
diff --git a/priv/static/static/js/3.a0df8a5bcd120d1f8581.js.map b/priv/static/static/js/3.c16fafd37452b101b5bc.js.map
similarity index 99%
rename from priv/static/static/js/3.a0df8a5bcd120d1f8581.js.map
rename to priv/static/static/js/3.c16fafd37452b101b5bc.js.map
index 653727d10..c1258b4d6 100644
Binary files a/priv/static/static/js/3.a0df8a5bcd120d1f8581.js.map and b/priv/static/static/js/3.c16fafd37452b101b5bc.js.map differ
diff --git a/priv/static/static/js/30.64736585965c63c2b5d4.js b/priv/static/static/js/30.64736585965c63c2b5d4.js
deleted file mode 100644
index 4fdbe8c3e..000000000
Binary files a/priv/static/static/js/30.64736585965c63c2b5d4.js and /dev/null differ
diff --git a/priv/static/static/js/30.64736585965c63c2b5d4.js.map b/priv/static/static/js/30.64736585965c63c2b5d4.js.map
deleted file mode 100644
index 376920946..000000000
Binary files a/priv/static/static/js/30.64736585965c63c2b5d4.js.map and /dev/null differ
diff --git a/priv/static/static/js/30.b461727270655cb0f752.js b/priv/static/static/js/30.b461727270655cb0f752.js
new file mode 100644
index 000000000..1baa0f5b1
Binary files /dev/null and b/priv/static/static/js/30.b461727270655cb0f752.js differ
diff --git a/priv/static/static/js/30.b461727270655cb0f752.js.map b/priv/static/static/js/30.b461727270655cb0f752.js.map
new file mode 100644
index 000000000..570e88f38
Binary files /dev/null and b/priv/static/static/js/30.b461727270655cb0f752.js.map differ
diff --git a/priv/static/static/js/31.554145c52128030ca625.js b/priv/static/static/js/31.554145c52128030ca625.js
new file mode 100644
index 000000000..46cfcc376
Binary files /dev/null and b/priv/static/static/js/31.554145c52128030ca625.js differ
diff --git a/priv/static/static/js/31.554145c52128030ca625.js.map b/priv/static/static/js/31.554145c52128030ca625.js.map
new file mode 100644
index 000000000..f16ddae52
Binary files /dev/null and b/priv/static/static/js/31.554145c52128030ca625.js.map differ
diff --git a/priv/static/static/js/4.4cde7fdd1fe6bf2a9499.js b/priv/static/static/js/4.e8cf78e629b76635765f.js
similarity index 83%
rename from priv/static/static/js/4.4cde7fdd1fe6bf2a9499.js
rename to priv/static/static/js/4.e8cf78e629b76635765f.js
index 4da4c56fa..bb655979f 100644
Binary files a/priv/static/static/js/4.4cde7fdd1fe6bf2a9499.js and b/priv/static/static/js/4.e8cf78e629b76635765f.js differ
diff --git a/priv/static/static/js/4.4cde7fdd1fe6bf2a9499.js.map b/priv/static/static/js/4.e8cf78e629b76635765f.js.map
similarity index 99%
rename from priv/static/static/js/4.4cde7fdd1fe6bf2a9499.js.map
rename to priv/static/static/js/4.e8cf78e629b76635765f.js.map
index bc040ab9b..61ef570d8 100644
Binary files a/priv/static/static/js/4.4cde7fdd1fe6bf2a9499.js.map and b/priv/static/static/js/4.e8cf78e629b76635765f.js.map differ
diff --git a/priv/static/static/js/9.3a29094f1886648a0af3.js b/priv/static/static/js/9.3a29094f1886648a0af3.js
deleted file mode 100644
index eb3516dcd..000000000
Binary files a/priv/static/static/js/9.3a29094f1886648a0af3.js and /dev/null differ
diff --git a/priv/static/static/js/9.fce4dde4ce07554d517f.js b/priv/static/static/js/9.fce4dde4ce07554d517f.js
new file mode 100644
index 000000000..ebf9272c9
Binary files /dev/null and b/priv/static/static/js/9.fce4dde4ce07554d517f.js differ
diff --git a/priv/static/static/js/9.3a29094f1886648a0af3.js.map b/priv/static/static/js/9.fce4dde4ce07554d517f.js.map
similarity index 57%
rename from priv/static/static/js/9.3a29094f1886648a0af3.js.map
rename to priv/static/static/js/9.fce4dde4ce07554d517f.js.map
index 1b6224a6a..ac0899d25 100644
Binary files a/priv/static/static/js/9.3a29094f1886648a0af3.js.map and b/priv/static/static/js/9.fce4dde4ce07554d517f.js.map differ
diff --git a/priv/static/static/js/app.45547c05212c403dd77c.js b/priv/static/static/js/app.45547c05212c403dd77c.js
deleted file mode 100644
index 219a59493..000000000
Binary files a/priv/static/static/js/app.45547c05212c403dd77c.js and /dev/null differ
diff --git a/priv/static/static/js/app.45547c05212c403dd77c.js.map b/priv/static/static/js/app.45547c05212c403dd77c.js.map
deleted file mode 100644
index e1dd6c992..000000000
Binary files a/priv/static/static/js/app.45547c05212c403dd77c.js.map and /dev/null differ
diff --git a/priv/static/static/js/app.c4f570328dc17a633803.js b/priv/static/static/js/app.c4f570328dc17a633803.js
new file mode 100644
index 000000000..a3cd5f5ee
Binary files /dev/null and b/priv/static/static/js/app.c4f570328dc17a633803.js differ
diff --git a/priv/static/static/js/app.c4f570328dc17a633803.js.map b/priv/static/static/js/app.c4f570328dc17a633803.js.map
new file mode 100644
index 000000000..5d215f8ac
Binary files /dev/null and b/priv/static/static/js/app.c4f570328dc17a633803.js.map differ
diff --git a/priv/static/static/js/vendors~app.952124344a84613dbac0.js b/priv/static/static/js/vendors~app.4103f03e428eb765f04d.js
similarity index 81%
rename from priv/static/static/js/vendors~app.952124344a84613dbac0.js
rename to priv/static/static/js/vendors~app.4103f03e428eb765f04d.js
index f7943c122..8884654a1 100644
Binary files a/priv/static/static/js/vendors~app.952124344a84613dbac0.js and b/priv/static/static/js/vendors~app.4103f03e428eb765f04d.js differ
diff --git a/priv/static/static/js/vendors~app.4103f03e428eb765f04d.js.map b/priv/static/static/js/vendors~app.4103f03e428eb765f04d.js.map
new file mode 100644
index 000000000..43c374b39
Binary files /dev/null and b/priv/static/static/js/vendors~app.4103f03e428eb765f04d.js.map differ
diff --git a/priv/static/static/js/vendors~app.952124344a84613dbac0.js.map b/priv/static/static/js/vendors~app.952124344a84613dbac0.js.map
deleted file mode 100644
index 05fc07c18..000000000
Binary files a/priv/static/static/js/vendors~app.952124344a84613dbac0.js.map and /dev/null differ
diff --git a/priv/static/static/themes/redmond-xx-se.json b/priv/static/static/themes/redmond-xx-se.json
index 24480d2c7..b62769dbc 100644
--- a/priv/static/static/themes/redmond-xx-se.json
+++ b/priv/static/static/themes/redmond-xx-se.json
@@ -267,6 +267,7 @@
},
"colors": {
"bg": "#c0c0c0",
+ "wallpaper": "#008080",
"text": "#000000",
"link": "#0000ff",
"accent": "#000080",
diff --git a/priv/static/static/themes/redmond-xx.json b/priv/static/static/themes/redmond-xx.json
index cf9010fe2..83b591091 100644
--- a/priv/static/static/themes/redmond-xx.json
+++ b/priv/static/static/themes/redmond-xx.json
@@ -258,6 +258,7 @@
},
"colors": {
"bg": "#c0c0c0",
+ "wallpaper": "#008080",
"text": "#000000",
"link": "#0000ff",
"accent": "#000080",
diff --git a/priv/static/static/themes/redmond-xxi.json b/priv/static/static/themes/redmond-xxi.json
index 7fdc4a6d6..60ceae7c2 100644
--- a/priv/static/static/themes/redmond-xxi.json
+++ b/priv/static/static/themes/redmond-xxi.json
@@ -240,6 +240,7 @@
},
"colors": {
"bg": "#d6d6ce",
+ "wallpaper": "#396ba5",
"text": "#000000",
"link": "#0000ff",
"accent": "#0a246a",
diff --git a/priv/static/sw-pleroma.js b/priv/static/sw-pleroma.js
index 385ee2f0c..e35f11e38 100644
Binary files a/priv/static/sw-pleroma.js and b/priv/static/sw-pleroma.js differ
diff --git a/priv/static/sw-pleroma.js.map b/priv/static/sw-pleroma.js.map
index 0b6a76c2f..2e4aaeff9 100644
Binary files a/priv/static/sw-pleroma.js.map and b/priv/static/sw-pleroma.js.map differ
diff --git a/test/fixtures/mastodon/application_actor.json b/test/fixtures/mastodon/application_actor.json
new file mode 100644
index 000000000..2089ea049
--- /dev/null
+++ b/test/fixtures/mastodon/application_actor.json
@@ -0,0 +1,67 @@
+{
+ "@context": [
+ "https://www.w3.org/ns/activitystreams",
+ "https://w3id.org/security/v1",
+ {
+ "manuallyApprovesFollowers": "as:manuallyApprovesFollowers",
+ "toot": "http://joinmastodon.org/ns#",
+ "featured": {
+ "@id": "toot:featured",
+ "@type": "@id"
+ },
+ "alsoKnownAs": {
+ "@id": "as:alsoKnownAs",
+ "@type": "@id"
+ },
+ "movedTo": {
+ "@id": "as:movedTo",
+ "@type": "@id"
+ },
+ "schema": "http://schema.org#",
+ "PropertyValue": "schema:PropertyValue",
+ "value": "schema:value",
+ "IdentityProof": "toot:IdentityProof",
+ "discoverable": "toot:discoverable",
+ "Device": "toot:Device",
+ "Ed25519Signature": "toot:Ed25519Signature",
+ "Ed25519Key": "toot:Ed25519Key",
+ "Curve25519Key": "toot:Curve25519Key",
+ "EncryptedMessage": "toot:EncryptedMessage",
+ "publicKeyBase64": "toot:publicKeyBase64",
+ "deviceId": "toot:deviceId",
+ "claim": {
+ "@type": "@id",
+ "@id": "toot:claim"
+ },
+ "fingerprintKey": {
+ "@type": "@id",
+ "@id": "toot:fingerprintKey"
+ },
+ "identityKey": {
+ "@type": "@id",
+ "@id": "toot:identityKey"
+ },
+ "devices": {
+ "@type": "@id",
+ "@id": "toot:devices"
+ },
+ "messageFranking": "toot:messageFranking",
+ "messageType": "toot:messageType",
+ "cipherText": "toot:cipherText"
+ }
+ ],
+ "id": "https://{{DOMAIN}}/actor",
+ "type": "Application",
+ "inbox": "https://{{DOMAIN}}/actor/inbox",
+ "preferredUsername": "{{DOMAIN}}",
+ "url": "https://{{DOMAIN}}/about/more?instance_actor=true",
+ "manuallyApprovesFollowers": true,
+ "publicKey": {
+ "id": "https://{{DOMAIN}}/actor#main-key",
+ "owner": "https://{{DOMAIN}}/actor",
+ "publicKeyPem": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAA0CA08AMIIBCgKCAQEAyi2T2FFZJgRPY+96YQrn\n6J6eF2P60J+nz+/pRc/acv/Nx+NLxxPyXby0F2s60MV7uALRQbBBnf7oNKCd/T4S\nvbr7UXMCWTdaJBpYubMKWT9uBlaUUkUfqL+WTV+IQnlcKtssQ4+AwrAKAZXza8ws\nZypevOsLHzayyEzztmm1KQC9GCUOITCLf7Q6qEhy8z/HuqLBEC0Own0pD7QsbfcS\no1peuZY7g1E/jJ9HR9GqJccMaR0H28KmJ7tT1Yzlyf5uZMRIdPxsoMR9sGLjR2B8\noegSwaf9SogR3ScP395Tt/9Ud1VVzuhpoS8Uy7jKSs+3CuLJsEGoMrib8VyOwadS\n9wIDAQAB\n-----END PUBLIC KEY-----\n"
+ },
+ "endpoints": {
+ "sharedInbox": "https://{{DOMAIN}}/inbox"
+ }
+}
diff --git a/test/mix/tasks/pleroma/instance_test.exs b/test/mix/tasks/pleroma/instance_test.exs
index 8a02710ee..6580fc932 100644
--- a/test/mix/tasks/pleroma/instance_test.exs
+++ b/test/mix/tasks/pleroma/instance_test.exs
@@ -88,7 +88,7 @@ test "running gen" do
assert generated_config =~ "password: \"dbpass\""
assert generated_config =~ "configurable_from_database: true"
assert generated_config =~ "http: [ip: {127, 0, 0, 1}, port: 4000]"
- assert generated_config =~ "filters: [Pleroma.Upload.Filter.ExifTool]"
+ assert generated_config =~ "filters: [Pleroma.Upload.Filter.Exiftool]"
assert File.read!(tmp_path() <> "setup.psql") == generated_setup_psql()
assert File.exists?(Path.expand("./test/instance/static/robots.txt"))
end
diff --git a/test/pleroma/activity_test.exs b/test/pleroma/activity_test.exs
index ee6a99cc3..3e9fe209e 100644
--- a/test/pleroma/activity_test.exs
+++ b/test/pleroma/activity_test.exs
@@ -231,4 +231,20 @@ test "all_by_actor_and_id/2" do
assert [%Activity{id: ^id1}, %Activity{id: ^id2}] = activities
end
+
+ test "get_by_object_ap_id_with_object/1" do
+ user = insert(:user)
+ another = insert(:user)
+
+ {:ok, %{id: id, object: %{data: %{"id" => obj_id}}}} =
+ Pleroma.Web.CommonAPI.post(user, %{status: "cofe"})
+
+ Pleroma.Web.CommonAPI.favorite(another, id)
+
+ assert obj_id
+ |> Pleroma.Activity.Queries.by_object_id()
+ |> Repo.aggregate(:count, :id) == 2
+
+ assert %{id: ^id} = Activity.get_by_object_ap_id_with_object(obj_id)
+ end
end
diff --git a/test/pleroma/formatter_test.exs b/test/pleroma/formatter_test.exs
index f066bd50a..5781a3f01 100644
--- a/test/pleroma/formatter_test.exs
+++ b/test/pleroma/formatter_test.exs
@@ -241,16 +241,14 @@ test "it can parse mentions and return the relevant users" do
"@@gsimg According to @archaeme, that is @daggsy. Also hello @archaeme@archae.me and @o and @@@jimm"
o = insert(:user, %{nickname: "o"})
- jimm = insert(:user, %{nickname: "jimm"})
- gsimg = insert(:user, %{nickname: "gsimg"})
+ _jimm = insert(:user, %{nickname: "jimm"})
+ _gsimg = insert(:user, %{nickname: "gsimg"})
archaeme = insert(:user, %{nickname: "archaeme"})
archaeme_remote = insert(:user, %{nickname: "archaeme@archae.me"})
expected_mentions = [
{"@archaeme", archaeme},
{"@archaeme@archae.me", archaeme_remote},
- {"@gsimg", gsimg},
- {"@jimm", jimm},
{"@o", o}
]
diff --git a/test/pleroma/user_search_test.exs b/test/pleroma/user_search_test.exs
index c4b805005..349797adb 100644
--- a/test/pleroma/user_search_test.exs
+++ b/test/pleroma/user_search_test.exs
@@ -65,12 +65,14 @@ test "excludes invisible users from results" do
assert found_user.id == user.id
end
- test "excludes users when discoverable is false" do
+ test "does NOT exclude non-discoverable users from results (as long as it's the default)" do
+ # NOTE: as long as users are non-discoverable by default,
+ # we can't filter out most users: #2301
insert(:user, %{nickname: "john 3000", discoverable: false})
insert(:user, %{nickname: "john 3001"})
users = User.search("john")
- assert Enum.count(users) == 1
+ assert Enum.count(users) == 2
end
test "excludes service actors from results" do
diff --git a/test/pleroma/user_test.exs b/test/pleroma/user_test.exs
index d8ac652af..52dcea0b3 100644
--- a/test/pleroma/user_test.exs
+++ b/test/pleroma/user_test.exs
@@ -877,6 +877,13 @@ test "it has required fields" do
refute cs.valid?
end)
end
+
+ test "it is invalid given a local user" do
+ user = insert(:user)
+ cs = User.remote_user_changeset(user, %{name: "tom from myspace"})
+
+ refute cs.valid?
+ end
end
describe "followers and friends" do
diff --git a/test/pleroma/web/activity_pub/activity_pub_controller_test.exs b/test/pleroma/web/activity_pub/activity_pub_controller_test.exs
index b696a24f4..fb5911825 100644
--- a/test/pleroma/web/activity_pub/activity_pub_controller_test.exs
+++ b/test/pleroma/web/activity_pub/activity_pub_controller_test.exs
@@ -766,6 +766,142 @@ test "it requires authentication", %{conn: conn} do
assert json_response(ret_conn, 200)
end
+
+ @tag capture_log: true
+ test "forwarded report", %{conn: conn} do
+ admin = insert(:user, is_admin: true)
+ actor = insert(:user, local: false)
+ remote_domain = URI.parse(actor.ap_id).host
+ reported_user = insert(:user)
+
+ note = insert(:note_activity, user: reported_user)
+
+ data = %{
+ "@context" => [
+ "https://www.w3.org/ns/activitystreams",
+ "https://#{remote_domain}/schemas/litepub-0.1.jsonld",
+ %{
+ "@language" => "und"
+ }
+ ],
+ "actor" => actor.ap_id,
+ "cc" => [
+ reported_user.ap_id
+ ],
+ "content" => "test",
+ "context" => "context",
+ "id" => "http://#{remote_domain}/activities/02be56cf-35e3-46b4-b2c6-47ae08dfee9e",
+ "nickname" => reported_user.nickname,
+ "object" => [
+ reported_user.ap_id,
+ %{
+ "actor" => %{
+ "actor_type" => "Person",
+ "approval_pending" => false,
+ "avatar" => "",
+ "confirmation_pending" => false,
+ "deactivated" => false,
+ "display_name" => "test user",
+ "id" => reported_user.id,
+ "local" => false,
+ "nickname" => reported_user.nickname,
+ "registration_reason" => nil,
+ "roles" => %{
+ "admin" => false,
+ "moderator" => false
+ },
+ "tags" => [],
+ "url" => reported_user.ap_id
+ },
+ "content" => "",
+ "id" => note.data["id"],
+ "published" => note.data["published"],
+ "type" => "Note"
+ }
+ ],
+ "published" => note.data["published"],
+ "state" => "open",
+ "to" => [],
+ "type" => "Flag"
+ }
+
+ conn
+ |> assign(:valid_signature, true)
+ |> put_req_header("content-type", "application/activity+json")
+ |> post("/users/#{reported_user.nickname}/inbox", data)
+ |> json_response(200)
+
+ ObanHelpers.perform(all_enqueued(worker: ReceiverWorker))
+
+ assert Pleroma.Repo.aggregate(Activity, :count, :id) == 2
+
+ ObanHelpers.perform_all()
+
+ Swoosh.TestAssertions.assert_email_sent(
+ to: {admin.name, admin.email},
+ html_body: ~r/Reported Account:/i
+ )
+ end
+
+ @tag capture_log: true
+ test "forwarded report from mastodon", %{conn: conn} do
+ admin = insert(:user, is_admin: true)
+ actor = insert(:user, local: false)
+ remote_domain = URI.parse(actor.ap_id).host
+ remote_actor = "https://#{remote_domain}/actor"
+ [reported_user, another] = insert_list(2, :user)
+
+ note = insert(:note_activity, user: reported_user)
+
+ Pleroma.Web.CommonAPI.favorite(another, note.id)
+
+ mock_json_body =
+ "test/fixtures/mastodon/application_actor.json"
+ |> File.read!()
+ |> String.replace("{{DOMAIN}}", remote_domain)
+
+ Tesla.Mock.mock(fn %{url: ^remote_actor} ->
+ %Tesla.Env{
+ status: 200,
+ body: mock_json_body,
+ headers: [{"content-type", "application/activity+json"}]
+ }
+ end)
+
+ data = %{
+ "@context" => "https://www.w3.org/ns/activitystreams",
+ "actor" => remote_actor,
+ "content" => "test report",
+ "id" => "https://#{remote_domain}/e3b12fd1-948c-446e-b93b-a5e67edbe1d8",
+ "nickname" => reported_user.nickname,
+ "object" => [
+ reported_user.ap_id,
+ note.data["object"]
+ ],
+ "type" => "Flag"
+ }
+
+ conn
+ |> assign(:valid_signature, true)
+ |> put_req_header("content-type", "application/activity+json")
+ |> post("/users/#{reported_user.nickname}/inbox", data)
+ |> json_response(200)
+
+ ObanHelpers.perform(all_enqueued(worker: ReceiverWorker))
+
+ flag_activity = "Flag" |> Pleroma.Activity.Queries.by_type() |> Pleroma.Repo.one()
+ reported_user_ap_id = reported_user.ap_id
+
+ [^reported_user_ap_id, flag_data] = flag_activity.data["object"]
+
+ Enum.each(~w(actor content id published type), &Map.has_key?(flag_data, &1))
+ ObanHelpers.perform_all()
+
+ Swoosh.TestAssertions.assert_email_sent(
+ to: {admin.name, admin.email},
+ html_body: ~r/#{note.data["object"]}/i
+ )
+ end
end
describe "GET /users/:nickname/outbox" do
diff --git a/test/pleroma/web/activity_pub/activity_pub_test.exs b/test/pleroma/web/activity_pub/activity_pub_test.exs
index c6ca37847..ef93b7859 100644
--- a/test/pleroma/web/activity_pub/activity_pub_test.exs
+++ b/test/pleroma/web/activity_pub/activity_pub_test.exs
@@ -1282,6 +1282,31 @@ test "it can create a Flag activity",
assert_called(Utils.maybe_federate(%{activity | data: new_data}))
end
+
+ test_with_mock "reverts on error",
+ %{
+ reporter: reporter,
+ context: context,
+ target_account: target_account,
+ reported_activity: reported_activity,
+ content: content
+ },
+ Utils,
+ [:passthrough],
+ maybe_federate: fn _ -> {:error, :reverted} end do
+ assert {:error, :reverted} =
+ ActivityPub.flag(%{
+ actor: reporter,
+ context: context,
+ account: target_account,
+ statuses: [reported_activity],
+ content: content
+ })
+
+ assert Repo.aggregate(Activity, :count, :id) == 1
+ assert Repo.aggregate(Object, :count, :id) == 2
+ assert Repo.aggregate(Notification, :count, :id) == 0
+ end
end
test "fetch_activities/2 returns activities addressed to a list " do
diff --git a/test/pleroma/web/activity_pub/side_effects_test.exs b/test/pleroma/web/activity_pub/side_effects_test.exs
index 9efbaad04..297fc0b84 100644
--- a/test/pleroma/web/activity_pub/side_effects_test.exs
+++ b/test/pleroma/web/activity_pub/side_effects_test.exs
@@ -108,7 +108,7 @@ test "it blocks but does not unfollow if the relevant setting is set", %{
describe "update users" do
setup do
- user = insert(:user)
+ user = insert(:user, local: false)
{:ok, update_data, []} = Builder.update(user, %{"id" => user.ap_id, "name" => "new name!"})
{:ok, update, _meta} = ActivityPub.persist(update_data, local: true)
diff --git a/test/support/factory.ex b/test/support/factory.ex
index fb82be0c4..581c4a2d8 100644
--- a/test/support/factory.ex
+++ b/test/support/factory.ex
@@ -24,7 +24,7 @@ def conversation_factory do
}
end
- def user_factory do
+ def user_factory(attrs \\ %{}) do
user = %User{
name: sequence(:name, &"Test ใในใ User #{&1}"),
email: sequence(:email, &"user#{&1}@example.com"),
@@ -39,13 +39,29 @@ def user_factory do
ap_enabled: true
}
- %{
- user
- | ap_id: User.ap_id(user),
- follower_address: User.ap_followers(user),
- following_address: User.ap_following(user),
- raw_bio: user.bio
- }
+ urls =
+ if attrs[:local] == false do
+ base_domain = Enum.random(["domain1.com", "domain2.com", "domain3.com"])
+
+ ap_id = "https://#{base_domain}/users/#{user.nickname}"
+
+ %{
+ ap_id: ap_id,
+ follower_address: ap_id <> "/followers",
+ following_address: ap_id <> "/following"
+ }
+ else
+ %{
+ ap_id: User.ap_id(user),
+ follower_address: User.ap_followers(user),
+ following_address: User.ap_following(user)
+ }
+ end
+
+ user
+ |> Map.put(:raw_bio, user.bio)
+ |> Map.merge(urls)
+ |> merge_attributes(attrs)
end
def user_relationship_factory(attrs \\ %{}) do