summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/CMakeLists.txt10
-rw-r--r--indra/newview/fonts/DejaVu-license.txt99
-rw-r--r--indra/newview/fonts/DejaVuSans-Bold.ttfbin573136 -> 0 bytes
-rw-r--r--indra/newview/fonts/DejaVuSans-BoldOblique.ttfbin524056 -> 0 bytes
-rw-r--r--indra/newview/fonts/DejaVuSans-Oblique.ttfbin523804 -> 0 bytes
-rw-r--r--indra/newview/fonts/DejaVuSans.ttfbin622280 -> 0 bytes
-rw-r--r--indra/newview/fonts/DejaVuSansMono.ttfbin321524 -> 0 bytes
-rwxr-xr-xindra/newview/installers/windows/lang_zh.nsibin10144 -> 10154 bytes
-rw-r--r--indra/newview/llautoreplace.h2
-rw-r--r--indra/newview/llchannelmanager.h2
-rw-r--r--indra/newview/llchathistory.cpp2
-rw-r--r--indra/newview/llchicletbar.h4
-rw-r--r--indra/newview/llconversationlog.h10
-rw-r--r--indra/newview/lldrawpoolbump.cpp4
-rw-r--r--indra/newview/llexpandabletextbox.cpp2
-rw-r--r--indra/newview/llfeaturemanager.h2
-rw-r--r--indra/newview/llfloateruipreview.cpp8
-rw-r--r--indra/newview/llfriendcard.h2
-rw-r--r--indra/newview/llgesturemgr.h4
-rw-r--r--indra/newview/llhudrender.cpp2
-rw-r--r--indra/newview/llimagefiltersmanager.h2
-rw-r--r--indra/newview/llimview.h2
-rw-r--r--indra/newview/llmutelist.h2
-rwxr-xr-xindra/newview/llnavigationbar.h8
-rw-r--r--indra/newview/lloutfitobserver.h2
-rw-r--r--indra/newview/llpanelemojicomplete.cpp321
-rw-r--r--indra/newview/llpanelemojicomplete.h115
-rw-r--r--indra/newview/llpaneltopinfobar.h6
-rw-r--r--indra/newview/llpathfindingpathtool.h18
-rw-r--r--indra/newview/llproductinforequest.h2
-rw-r--r--indra/newview/llrecentpeople.h2
-rw-r--r--indra/newview/llspeakers.h4
-rw-r--r--indra/newview/llspeakingindicatormanager.cpp2
-rw-r--r--indra/newview/lltextureview.cpp2
-rw-r--r--indra/newview/lltoolbrush.h20
-rw-r--r--indra/newview/lltoolcomp.h72
-rw-r--r--indra/newview/lltooldraganddrop.h12
-rw-r--r--indra/newview/lltoolface.h10
-rw-r--r--indra/newview/lltoolfocus.h14
-rw-r--r--indra/newview/lltoolindividual.h8
-rw-r--r--indra/newview/lltoolobjpicker.h14
-rw-r--r--indra/newview/lltoolpie.h32
-rw-r--r--indra/newview/lltoolpipette.h8
-rw-r--r--indra/newview/lltoolselectland.h16
-rw-r--r--indra/newview/llversioninfo.h2
-rw-r--r--indra/newview/llviewerfloaterreg.cpp2
-rw-r--r--indra/newview/llviewerhelp.h10
-rw-r--r--indra/newview/llviewermedia.h2
-rw-r--r--indra/newview/llviewermediafocus.h16
-rw-r--r--indra/newview/llviewermenu.cpp4
-rw-r--r--indra/newview/llviewerparcelaskplay.h4
-rw-r--r--indra/newview/llviewerparcelmedia.h2
-rw-r--r--indra/newview/llviewerparcelmediaautoplay.h2
-rw-r--r--indra/newview/llviewertexture.cpp16
-rw-r--r--indra/newview/llviewertexture.h5
-rw-r--r--indra/newview/llviewertexturelist.h6
-rw-r--r--indra/newview/llviewerwindow.cpp2
-rw-r--r--indra/newview/llvoicechannel.h22
-rw-r--r--indra/newview/llvoicevivox.h144
-rw-r--r--indra/newview/llwearableitemslist.h6
-rw-r--r--indra/newview/llwindebug.h4
-rwxr-xr-xindra/newview/llworldmapview.cpp3
-rw-r--r--indra/newview/skins/default/xui/en/emoji_characters.xml10955
-rw-r--r--indra/newview/skins/default/xui/en/floater_emoji_complete.xml28
-rw-r--r--indra/newview/skins/default/xui/en/floater_preview_notecard.xml2
-rw-r--r--indra/newview/skins/default/xui/en/fonts.xml6
-rw-r--r--indra/newview/skins/default/xui/en/menu_login.xml26
-rw-r--r--indra/newview/skins/default/xui/en/menu_viewer.xml12
-rw-r--r--indra/newview/skins/default/xui/en/widgets/chat_editor.xml5
-rw-r--r--indra/newview/skins/default/xui/en/widgets/emoji_complete.xml10
-rwxr-xr-xindra/newview/viewer_manifest.py6
71 files changed, 11777 insertions, 372 deletions
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
index 837efee7b1..871db7dfbb 100644
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -18,6 +18,7 @@ include(DragDrop)
include(EXPAT)
include(FMODSTUDIO)
include(Hunspell)
+include(ICU4C)
include(JPEGEncoderBasic)
include(JsonCpp)
include(LLAppearance)
@@ -448,6 +449,7 @@ set(viewer_SOURCE_FILES
llpaneleditsky.cpp
llpaneleditwater.cpp
llpaneleditwearable.cpp
+ llpanelemojicomplete.cpp
llpanelenvironment.cpp
llpanelexperiencelisteditor.cpp
llpanelexperiencelog.cpp
@@ -1079,6 +1081,7 @@ set(viewer_HEADER_FILES
llpaneleditsky.h
llpaneleditwater.h
llpaneleditwearable.h
+ llpanelemojicomplete.h
llpanelenvironment.h
llpanelexperiencelisteditor.h
llpanelexperiencelog.h
@@ -2043,6 +2046,7 @@ target_link_libraries(${VIEWER_BINARY_NAME}
${NDOF_LIBRARY}
${NVAPI_LIBRARY}
${HUNSPELL_LIBRARY}
+ ${ICU4C_LIBRARY}
${viewer_LIBRARIES}
${BOOST_PROGRAM_OPTIONS_LIBRARY}
${BOOST_REGEX_LIBRARY}
@@ -2077,6 +2081,12 @@ endif (USE_BUGSPLAT)
set(ARTWORK_DIR ${CMAKE_CURRENT_SOURCE_DIR} CACHE PATH
"Path to artwork files.")
+message("Copying fonts")
+file(GLOB FONT_FILE_GLOB_LIST
+ "${AUTOBUILD_INSTALL_DIR}/fonts/*"
+)
+file(COPY ${FONT_FILE_GLOB_LIST} DESTINATION "${CMAKE_CURRENT_SOURCE_DIR}/fonts")
+
if (LINUX)
set(product SecondLife-${ARCH}-${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION})
diff --git a/indra/newview/fonts/DejaVu-license.txt b/indra/newview/fonts/DejaVu-license.txt
deleted file mode 100644
index 254e2cc42a..0000000000
--- a/indra/newview/fonts/DejaVu-license.txt
+++ /dev/null
@@ -1,99 +0,0 @@
-Fonts are (c) Bitstream (see below). DejaVu changes are in public domain.
-Glyphs imported from Arev fonts are (c) Tavmjong Bah (see below)
-
-Bitstream Vera Fonts Copyright
-------------------------------
-
-Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is
-a trademark of Bitstream, Inc.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of the fonts accompanying this license ("Fonts") and associated
-documentation files (the "Font Software"), to reproduce and distribute the
-Font Software, including without limitation the rights to use, copy, merge,
-publish, distribute, and/or sell copies of the Font Software, and to permit
-persons to whom the Font Software is furnished to do so, subject to the
-following conditions:
-
-The above copyright and trademark notices and this permission notice shall
-be included in all copies of one or more of the Font Software typefaces.
-
-The Font Software may be modified, altered, or added to, and in particular
-the designs of glyphs or characters in the Fonts may be modified and
-additional glyphs or characters may be added to the Fonts, only if the fonts
-are renamed to names not containing either the words "Bitstream" or the word
-"Vera".
-
-This License becomes null and void to the extent applicable to Fonts or Font
-Software that has been modified and is distributed under the "Bitstream
-Vera" names.
-
-The Font Software may be sold as part of a larger software package but no
-copy of one or more of the Font Software typefaces may be sold by itself.
-
-THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT,
-TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL BITSTREAM OR THE GNOME
-FOUNDATION BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING
-ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
-WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
-THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE
-FONT SOFTWARE.
-
-Except as contained in this notice, the names of Gnome, the Gnome
-Foundation, and Bitstream Inc., shall not be used in advertising or
-otherwise to promote the sale, use or other dealings in this Font Software
-without prior written authorization from the Gnome Foundation or Bitstream
-Inc., respectively. For further information, contact: fonts at gnome dot
-org.
-
-Arev Fonts Copyright
-------------------------------
-
-Copyright (c) 2006 by Tavmjong Bah. All Rights Reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of the fonts accompanying this license ("Fonts") and
-associated documentation files (the "Font Software"), to reproduce
-and distribute the modifications to the Bitstream Vera Font Software,
-including without limitation the rights to use, copy, merge, publish,
-distribute, and/or sell copies of the Font Software, and to permit
-persons to whom the Font Software is furnished to do so, subject to
-the following conditions:
-
-The above copyright and trademark notices and this permission notice
-shall be included in all copies of one or more of the Font Software
-typefaces.
-
-The Font Software may be modified, altered, or added to, and in
-particular the designs of glyphs or characters in the Fonts may be
-modified and additional glyphs or characters may be added to the
-Fonts, only if the fonts are renamed to names not containing either
-the words "Tavmjong Bah" or the word "Arev".
-
-This License becomes null and void to the extent applicable to Fonts
-or Font Software that has been modified and is distributed under the
-"Tavmjong Bah Arev" names.
-
-The Font Software may be sold as part of a larger software package but
-no copy of one or more of the Font Software typefaces may be sold by
-itself.
-
-THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
-OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL
-TAVMJONG BAH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
-DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
-OTHER DEALINGS IN THE FONT SOFTWARE.
-
-Except as contained in this notice, the name of Tavmjong Bah shall not
-be used in advertising or otherwise to promote the sale, use or other
-dealings in this Font Software without prior written authorization
-from Tavmjong Bah. For further information, contact: tavmjong @ free
-. fr.
-
-$Id: LICENSE 2133 2007-11-28 02:46:28Z lechimp $
diff --git a/indra/newview/fonts/DejaVuSans-Bold.ttf b/indra/newview/fonts/DejaVuSans-Bold.ttf
deleted file mode 100644
index ec1a2ebaf2..0000000000
--- a/indra/newview/fonts/DejaVuSans-Bold.ttf
+++ /dev/null
Binary files differ
diff --git a/indra/newview/fonts/DejaVuSans-BoldOblique.ttf b/indra/newview/fonts/DejaVuSans-BoldOblique.ttf
deleted file mode 100644
index 1a5576460d..0000000000
--- a/indra/newview/fonts/DejaVuSans-BoldOblique.ttf
+++ /dev/null
Binary files differ
diff --git a/indra/newview/fonts/DejaVuSans-Oblique.ttf b/indra/newview/fonts/DejaVuSans-Oblique.ttf
deleted file mode 100644
index becc549927..0000000000
--- a/indra/newview/fonts/DejaVuSans-Oblique.ttf
+++ /dev/null
Binary files differ
diff --git a/indra/newview/fonts/DejaVuSans.ttf b/indra/newview/fonts/DejaVuSans.ttf
deleted file mode 100644
index c1b19d8705..0000000000
--- a/indra/newview/fonts/DejaVuSans.ttf
+++ /dev/null
Binary files differ
diff --git a/indra/newview/fonts/DejaVuSansMono.ttf b/indra/newview/fonts/DejaVuSansMono.ttf
deleted file mode 100644
index 6bc854ddae..0000000000
--- a/indra/newview/fonts/DejaVuSansMono.ttf
+++ /dev/null
Binary files differ
diff --git a/indra/newview/installers/windows/lang_zh.nsi b/indra/newview/installers/windows/lang_zh.nsi
index 7922d9df52..0985663041 100755
--- a/indra/newview/installers/windows/lang_zh.nsi
+++ b/indra/newview/installers/windows/lang_zh.nsi
Binary files differ
diff --git a/indra/newview/llautoreplace.h b/indra/newview/llautoreplace.h
index 23cc313646..a1eebf9dcb 100644
--- a/indra/newview/llautoreplace.h
+++ b/indra/newview/llautoreplace.h
@@ -203,7 +203,7 @@ public:
void setSettings(const LLAutoReplaceSettings& settings);
private:
- /*virtual*/ void initSingleton();
+ /*virtual*/ void initSingleton() override;
LLAutoReplaceSettings mSettings; ///< configuration information
diff --git a/indra/newview/llchannelmanager.h b/indra/newview/llchannelmanager.h
index 8abe350196..22ae595d66 100644
--- a/indra/newview/llchannelmanager.h
+++ b/indra/newview/llchannelmanager.h
@@ -46,7 +46,7 @@ class LLChannelManager : public LLSingleton<LLChannelManager>
LLSINGLETON(LLChannelManager);
virtual ~LLChannelManager();
- void cleanupSingleton();
+ void cleanupSingleton() override;
public:
diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
index 9a608fba8e..f4fa449ca2 100644
--- a/indra/newview/llchathistory.cpp
+++ b/indra/newview/llchathistory.cpp
@@ -1096,6 +1096,8 @@ LLChatHistory::LLChatHistory(const LLChatHistory::Params& p)
editor_params.enabled = false; // read only
editor_params.show_context_menu = "true";
editor_params.trusted_content = false;
+ editor_params.text_valign = LLFontGL::VAlign::VCENTER;
+ editor_params.use_color = true;
mEditor = LLUICtrlFactory::create<LLTextEditor>(editor_params, this);
mEditor->setIsFriendCallback(LLAvatarActions::isFriend);
mEditor->setIsObjectBlockedCallback(boost::bind(&LLMuteList::isMuted, LLMuteList::getInstance(), _1, _2, 0));
diff --git a/indra/newview/llchicletbar.h b/indra/newview/llchicletbar.h
index 6c521dc1d5..c295b99962 100644
--- a/indra/newview/llchicletbar.h
+++ b/indra/newview/llchicletbar.h
@@ -43,11 +43,11 @@ class LLChicletBar
public:
- BOOL postBuild();
+ BOOL postBuild() override;
LLChicletPanel* getChicletPanel() { return mChicletPanel; }
- /*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent);
+ /*virtual*/ void reshape(S32 width, S32 height, BOOL called_from_parent) override;
/**
diff --git a/indra/newview/llconversationlog.h b/indra/newview/llconversationlog.h
index 820a5db491..54aeedcf9a 100644
--- a/indra/newview/llconversationlog.h
+++ b/indra/newview/llconversationlog.h
@@ -125,11 +125,11 @@ public:
void removeObserver(LLConversationLogObserver* observer);
// LLIMSessionObserver triggers
- virtual void sessionAdded(const LLUUID& session_id, const std::string& name, const LLUUID& other_participant_id, BOOL has_offline_msg);
- virtual void sessionActivated(const LLUUID& session_id, const std::string& name, const LLUUID& other_participant_id) {}; // Stub
- virtual void sessionRemoved(const LLUUID& session_id){} // Stub
- virtual void sessionVoiceOrIMStarted(const LLUUID& session_id){}; // Stub
- virtual void sessionIDUpdated(const LLUUID& old_session_id, const LLUUID& new_session_id){}; // Stub
+ virtual void sessionAdded(const LLUUID& session_id, const std::string& name, const LLUUID& other_participant_id, BOOL has_offline_msg) override;
+ virtual void sessionActivated(const LLUUID& session_id, const std::string& name, const LLUUID& other_participant_id) override {}; // Stub
+ virtual void sessionRemoved(const LLUUID& session_id) override{} // Stub
+ virtual void sessionVoiceOrIMStarted(const LLUUID& session_id) override{}; // Stub
+ virtual void sessionIDUpdated(const LLUUID& old_session_id, const LLUUID& new_session_id) override{}; // Stub
void notifyObservers();
diff --git a/indra/newview/lldrawpoolbump.cpp b/indra/newview/lldrawpoolbump.cpp
index c4c88d304c..e6b6b10408 100644
--- a/indra/newview/lldrawpoolbump.cpp
+++ b/indra/newview/lldrawpoolbump.cpp
@@ -78,7 +78,9 @@ static S32 cube_channel = -1;
static S32 diffuse_channel = -1;
static S32 bump_channel = -1;
-#define LL_BUMPLIST_MULTITHREADED 0 // TODO -- figure out why this doesn't work
+// Enabled after changing LLViewerTexture::mNeedsCreateTexture to an
+// LLAtomicBool; this should work just fine, now. HB
+#define LL_BUMPLIST_MULTITHREADED 1
// static
diff --git a/indra/newview/llexpandabletextbox.cpp b/indra/newview/llexpandabletextbox.cpp
index 3395777aab..2d332f75f5 100644
--- a/indra/newview/llexpandabletextbox.cpp
+++ b/indra/newview/llexpandabletextbox.cpp
@@ -88,7 +88,7 @@ public:
mStyle->getShadowType(),
end - start, draw_rect.getWidth(),
&right_x,
- mEditor.getUseEllipses());
+ mEditor.getUseEllipses(), mEditor.getUseColor());
return right_x;
}
/*virtual*/ bool canEdit() const { return false; }
diff --git a/indra/newview/llfeaturemanager.h b/indra/newview/llfeaturemanager.h
index 42a226cd18..d9269224af 100644
--- a/indra/newview/llfeaturemanager.h
+++ b/indra/newview/llfeaturemanager.h
@@ -101,7 +101,7 @@ class LLFeatureManager : public LLFeatureList, public LLSingleton<LLFeatureManag
~LLFeatureManager() {cleanupFeatureTables();}
// initialize this by loading feature table and gpu table
- void initSingleton();
+ void initSingleton() override;
public:
diff --git a/indra/newview/llfloateruipreview.cpp b/indra/newview/llfloateruipreview.cpp
index e67c79a3a0..9d16faf0b5 100644
--- a/indra/newview/llfloateruipreview.cpp
+++ b/indra/newview/llfloateruipreview.cpp
@@ -1601,7 +1601,7 @@ void LLOverlapPanel::draw()
LLUI::translate(5,getRect().getHeight()-20); // translate to top-5,left-5
LLView::sDrawPreviewHighlights = FALSE;
LLFontGL::getFontSansSerifSmall()->renderUTF8(current_selection_text, 0, 0, 0, text_color,
- LLFontGL::LEFT, LLFontGL::BASELINE, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, S32_MAX, NULL, FALSE);
+ LLFontGL::LEFT, LLFontGL::BASELINE, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, S32_MAX, NULL, /*use_ellipses*/FALSE, /*use_color*/FALSE);
}
else
{
@@ -1619,7 +1619,7 @@ void LLOverlapPanel::draw()
std::string current_selection = std::string(current_selection_text + LLView::sPreviewClickedElement->getName() + " (no elements overlap)");
S32 text_width = LLFontGL::getFontSansSerifSmall()->getWidth(current_selection) + 10;
LLFontGL::getFontSansSerifSmall()->renderUTF8(current_selection, 0, 0, 0, text_color,
- LLFontGL::LEFT, LLFontGL::BASELINE, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, S32_MAX, NULL, FALSE);
+ LLFontGL::LEFT, LLFontGL::BASELINE, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, S32_MAX, NULL, /*use_ellipses*/FALSE, /*use_color*/FALSE);
// widen panel enough to fit this text
LLRect rect = getRect();
setRect(LLRect(rect.mLeft,rect.mTop,rect.getWidth() < text_width ? rect.mLeft + text_width : rect.mRight,rect.mTop));
@@ -1685,7 +1685,7 @@ void LLOverlapPanel::draw()
// draw currently-selected element at top of overlappers
LLUI::translate(0,-mSpacing);
LLFontGL::getFontSansSerifSmall()->renderUTF8(current_selection_text + LLView::sPreviewClickedElement->getName(), 0, 0, 0, text_color,
- LLFontGL::LEFT, LLFontGL::BASELINE, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, S32_MAX, NULL, FALSE);
+ LLFontGL::LEFT, LLFontGL::BASELINE, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, S32_MAX, NULL, /*use_ellipses*/FALSE, /*use_color*/FALSE);
LLUI::translate(0,-mSpacing-LLView::sPreviewClickedElement->getRect().getHeight()); // skip spacing distance + height
LLView::sPreviewClickedElement->draw();
@@ -1700,7 +1700,7 @@ void LLOverlapPanel::draw()
// draw name
LLUI::translate(0,-mSpacing);
LLFontGL::getFontSansSerifSmall()->renderUTF8(overlapper_text + viewp->getName(), 0, 0, 0, text_color,
- LLFontGL::LEFT, LLFontGL::BASELINE, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, S32_MAX, NULL, FALSE);
+ LLFontGL::LEFT, LLFontGL::BASELINE, LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, S32_MAX, NULL, /*use_ellipses*/FALSE, /*use_color*/FALSE);
// draw element
LLUI::translate(0,-mSpacing-viewp->getRect().getHeight()); // skip spacing distance + height
diff --git a/indra/newview/llfriendcard.h b/indra/newview/llfriendcard.h
index f5679d7d85..ef0dda7949 100644
--- a/indra/newview/llfriendcard.h
+++ b/indra/newview/llfriendcard.h
@@ -55,7 +55,7 @@ public:
};
// LLFriendObserver implementation
- void changed(U32 mask)
+ void changed(U32 mask) override
{
onFriendListUpdate(mask);
}
diff --git a/indra/newview/llgesturemgr.h b/indra/newview/llgesturemgr.h
index 7c8e8279c2..7bb60f00e2 100644
--- a/indra/newview/llgesturemgr.h
+++ b/indra/newview/llgesturemgr.h
@@ -135,7 +135,7 @@ public:
void notifyObservers();
// Overriding so we can update active gesture names and notify observers
- void changed(U32 mask);
+ void changed(U32 mask) override;
BOOL matchPrefix(const std::string& in_str, std::string* out_str);
@@ -150,7 +150,7 @@ protected:
void runStep(LLMultiGesture* gesture, LLGestureStep* step);
// LLInventoryCompletionObserver trigger
- void done();
+ void done() override;
// Used by loadGesture
static void onLoadComplete(const LLUUID& asset_uuid,
diff --git a/indra/newview/llhudrender.cpp b/indra/newview/llhudrender.cpp
index dff310ecf9..c1f17c9d33 100644
--- a/indra/newview/llhudrender.cpp
+++ b/indra/newview/llhudrender.cpp
@@ -138,7 +138,7 @@ void hud_render_text(const LLWString &wstr, const LLVector3 &pos_agent,
LLUI::translate((F32) winX*1.0f/LLFontGL::sScaleX, (F32) winY*1.0f/(LLFontGL::sScaleY), -(((F32) winZ*2.f)-1.f));
F32 right_x;
- font.render(wstr, 0, 0, 1, color, LLFontGL::LEFT, LLFontGL::BASELINE, style, shadow, wstr.length(), 1000, &right_x);
+ font.render(wstr, 0, 0, 1, color, LLFontGL::LEFT, LLFontGL::BASELINE, style, shadow, wstr.length(), 1000, &right_x, /*use_ellipses*/false, /*use_color*/true);
LLUI::popMatrix();
gGL.popMatrix();
diff --git a/indra/newview/llimagefiltersmanager.h b/indra/newview/llimagefiltersmanager.h
index d06212d85a..05d1806da4 100644
--- a/indra/newview/llimagefiltersmanager.h
+++ b/indra/newview/llimagefiltersmanager.h
@@ -45,7 +45,7 @@ private:
void loadAllFilters();
void loadFiltersFromDir(const std::string& dir);
- /*virtual*/ void initSingleton();
+ /*virtual*/ void initSingleton() override;
// List of filters : first is the user friendly localized name, second is the xml file name
std::map<std::string,std::string> mFiltersList;
diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h
index 326e8f22e3..353373f3b4 100644
--- a/indra/newview/llimview.h
+++ b/indra/newview/llimview.h
@@ -506,7 +506,7 @@ public:
static void onVoiceChannelStateChanged(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state, const LLVoiceChannel::EDirection& direction, bool ended_by_agent);
private:
- void initSingleton();
+ void initSingleton() override;
void onVoiceChannelChangedInt(const LLUUID &session_id);
void onVoiceChannelStateChangedInt(const LLVoiceChannel::EState& old_state, const LLVoiceChannel::EState& new_state, const LLVoiceChannel::EDirection& direction, bool ended_by_agent);
diff --git a/indra/newview/llmutelist.h b/indra/newview/llmutelist.h
index 0d426fbd48..f86c2acd10 100644
--- a/indra/newview/llmutelist.h
+++ b/indra/newview/llmutelist.h
@@ -73,7 +73,7 @@ class LLMuteList : public LLSingleton<LLMuteList>
{
LLSINGLETON(LLMuteList);
~LLMuteList();
- /*virtual*/ void cleanupSingleton();
+ /*virtual*/ void cleanupSingleton() override;
public:
// reasons for auto-unmuting a resident
enum EAutoReason
diff --git a/indra/newview/llnavigationbar.h b/indra/newview/llnavigationbar.h
index 11c671294a..4649f5bcb0 100755
--- a/indra/newview/llnavigationbar.h
+++ b/indra/newview/llnavigationbar.h
@@ -92,10 +92,10 @@ class LLNavigationBar
public:
- /*virtual*/ void draw();
- /*virtual*/ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
- /*virtual*/ BOOL postBuild();
- /*virtual*/ void setVisible(BOOL visible);
+ /*virtual*/ void draw() override;
+ /*virtual*/ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask) override;
+ /*virtual*/ BOOL postBuild() override;
+ /*virtual*/ void setVisible(BOOL visible) override;
void handleLoginComplete();
void clearHistoryCache();
diff --git a/indra/newview/lloutfitobserver.h b/indra/newview/lloutfitobserver.h
index 77041db68d..77bb3543aa 100644
--- a/indra/newview/lloutfitobserver.h
+++ b/indra/newview/lloutfitobserver.h
@@ -41,7 +41,7 @@ class LLOutfitObserver: public LLInventoryObserver, public LLSingleton<LLOutfitO
public:
- virtual void changed(U32 mask);
+ virtual void changed(U32 mask) override;
void notifyOutfitLockChanged() { mOutfitLockChanged(); }
diff --git a/indra/newview/llpanelemojicomplete.cpp b/indra/newview/llpanelemojicomplete.cpp
new file mode 100644
index 0000000000..8b89e3aa14
--- /dev/null
+++ b/indra/newview/llpanelemojicomplete.cpp
@@ -0,0 +1,321 @@
+/**
+* @file llpanelemojicomplete.h
+* @brief Header file for LLPanelEmojiComplete
+*
+* $LicenseInfo:firstyear=2012&license=lgpl$
+* Second Life Viewer Source Code
+* Copyright (C) 2011, Linden Research, Inc.
+*
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU Lesser General Public
+* License as published by the Free Software Foundation;
+* version 2.1 of the License only.
+*
+* This library is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this library; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*
+* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+* $/LicenseInfo$
+*/
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llemojidictionary.h"
+#include "llemojihelper.h"
+#include "llpanelemojicomplete.h"
+#include "lluictrlfactory.h"
+
+constexpr U32 MIN_MOUSE_MOVE_DELTA = 4;
+
+// ============================================================================
+// LLPanelEmojiComplete
+//
+
+static LLDefaultChildRegistry::Register<LLPanelEmojiComplete> r("emoji_complete");
+
+LLPanelEmojiComplete::Params::Params()
+ : autosize("autosize")
+ , max_emoji("max_emoji")
+ , padding("padding")
+ , selected_image("selected_image")
+{
+}
+
+LLPanelEmojiComplete::LLPanelEmojiComplete(const LLPanelEmojiComplete::Params& p)
+ : LLUICtrl(p)
+ , mAutoSize(p.autosize)
+ , mMaxVisible(p.max_emoji)
+ , mPadding(p.padding)
+ , mSelectedImage(p.selected_image)
+{
+ setFont(p.font);
+}
+
+LLPanelEmojiComplete::~LLPanelEmojiComplete()
+{
+}
+
+void LLPanelEmojiComplete::draw()
+{
+ if (!mEmojis.empty())
+ {
+ const S32 centerY = mRenderRect.getCenterY();
+ const size_t firstVisibleIdx = mScrollPos, lastVisibleIdx = llmin(mScrollPos + mVisibleEmojis, mEmojis.size()) - 1;
+
+ if (mCurSelected >= firstVisibleIdx && mCurSelected <= lastVisibleIdx)
+ {
+ const S32 emoji_left = mRenderRect.mLeft + (mCurSelected - firstVisibleIdx) * mEmojiWidth;
+ const S32 emoji_height = mFont->getLineHeight() + mPadding;
+ mSelectedImage->draw(emoji_left, centerY - emoji_height / 2, mEmojiWidth, emoji_height);
+ }
+
+ U32 left = mRenderRect.mLeft + mPadding;
+ for (U32 curIdx = firstVisibleIdx; curIdx <= lastVisibleIdx; curIdx++)
+ {
+ mFont->render(
+ mEmojis, curIdx,
+ left, centerY,
+ LLColor4::white, LLFontGL::LEFT, LLFontGL::VCENTER, LLFontGL::NORMAL, LLFontGL::DROP_SHADOW_SOFT,
+ 1, S32_MAX, nullptr, false, true);
+ left += mEmojiWidth;
+ }
+ }
+}
+
+BOOL LLPanelEmojiComplete::handleHover(S32 x, S32 y, MASK mask)
+{
+ LLVector2 curHover(x, y);
+ if ((mLastHover - curHover).lengthSquared() > MIN_MOUSE_MOVE_DELTA)
+ {
+ mCurSelected = posToIndex(x, y);
+ mLastHover = curHover;
+ }
+
+ return TRUE;
+}
+
+BOOL LLPanelEmojiComplete::handleKey(KEY key, MASK mask, BOOL called_from_parent)
+{
+ bool handled = false;
+ if (MASK_NONE == mask)
+ {
+ switch (key)
+ {
+ case KEY_LEFT:
+ case KEY_UP:
+ selectPrevious();
+ handled = true;
+ break;
+ case KEY_RIGHT:
+ case KEY_DOWN:
+ selectNext();
+ handled = true;
+ break;
+ case KEY_RETURN:
+ if (!mEmojis.empty())
+ {
+ onCommit();
+ handled = true;
+ }
+ break;
+ }
+ }
+
+ if (handled)
+ {
+ return TRUE;
+ }
+ return LLUICtrl::handleKey(key, mask, called_from_parent);
+}
+
+BOOL LLPanelEmojiComplete::handleMouseDown(S32 x, S32 y, MASK mask)
+{
+ mCurSelected = posToIndex(x, y);
+ mLastHover = LLVector2(x, y);
+
+ return TRUE;
+}
+
+BOOL LLPanelEmojiComplete::handleMouseUp(S32 x, S32 y, MASK mask)
+{
+ mCurSelected = posToIndex(x, y);
+ onCommit();
+
+ return TRUE;
+}
+
+void LLPanelEmojiComplete::onCommit()
+{
+ if (npos != mCurSelected)
+ {
+ LLWString wstr;
+ wstr.push_back(mEmojis.at(mCurSelected));
+ setValue(wstring_to_utf8str(wstr));
+ LLUICtrl::onCommit();
+ }
+}
+
+void LLPanelEmojiComplete::reshape(S32 width, S32 height, BOOL called_from_parent)
+{
+ LLUICtrl::reshape(width, height, called_from_parent);
+ updateConstraints();
+}
+
+void LLPanelEmojiComplete::setEmojiHint(const std::string& hint)
+{
+ llwchar curEmoji = (mCurSelected < mEmojis.size()) ? mEmojis.at(mCurSelected) : 0;
+
+ mEmojis = LLEmojiDictionary::instance().findMatchingEmojis(hint);
+ size_t curEmojiIdx = (curEmoji) ? mEmojis.find(curEmoji) : std::string::npos;
+ mCurSelected = (std::string::npos != curEmojiIdx) ? curEmojiIdx : 0;
+
+ if (mAutoSize)
+ {
+ mVisibleEmojis = std::min(mEmojis.size(), mMaxVisible);
+ reshape(mVisibleEmojis * mEmojiWidth, getRect().getHeight(), false);
+ }
+ else
+ {
+ updateConstraints();
+ }
+
+ mScrollPos = llmin(mScrollPos, mEmojis.size());
+}
+
+size_t LLPanelEmojiComplete::posToIndex(S32 x, S32 y) const
+{
+ if (mRenderRect.pointInRect(x, y))
+ {
+ return mScrollPos + llmin((size_t)x / mEmojiWidth, mEmojis.size() - 1);
+ }
+ return npos;
+}
+
+void LLPanelEmojiComplete::select(size_t emoji_idx)
+{
+ mCurSelected = llclamp<size_t>(emoji_idx, 0, mEmojis.size());
+ updateScrollPos();
+}
+
+void LLPanelEmojiComplete::selectNext()
+{
+ select(mCurSelected + 1 < mEmojis.size() ? mCurSelected + 1 : 0);
+}
+
+void LLPanelEmojiComplete::selectPrevious()
+{
+ select(mCurSelected - 1 >= 0 ? mCurSelected - 1 : mEmojis.size() - 1);
+}
+
+void LLPanelEmojiComplete::setFont(const LLFontGL* fontp)
+{
+ mFont = fontp;
+ updateConstraints();
+}
+
+void LLPanelEmojiComplete::updateConstraints()
+{
+ const S32 ctrlWidth = getLocalRect().getWidth();
+
+ mEmojiWidth = mFont->getWidthF32(u8"\U0001F431") + mPadding * 2;
+ mVisibleEmojis = ctrlWidth / mEmojiWidth;
+ mRenderRect = getLocalRect().stretch((ctrlWidth - mVisibleEmojis * mEmojiWidth) / -2, 0);
+
+ updateScrollPos();
+}
+
+void LLPanelEmojiComplete::updateScrollPos()
+{
+ const size_t cntEmoji = mEmojis.size();
+ if (0 == cntEmoji || cntEmoji < mVisibleEmojis || 0 == mCurSelected)
+ {
+ mScrollPos = 0;
+ }
+ else if (cntEmoji - 1 == mCurSelected)
+ {
+ mScrollPos = mCurSelected - mVisibleEmojis + 1;
+ }
+ else
+ {
+ mScrollPos = mCurSelected - ((float)mCurSelected / (cntEmoji - 2) * (mVisibleEmojis - 2));
+ }
+}
+
+// ============================================================================
+// LLFloaterEmojiComplete
+//
+
+LLFloaterEmojiComplete::LLFloaterEmojiComplete(const LLSD& sdKey)
+ : LLFloater(sdKey)
+{
+ // This floater should hover on top of our dependent (with the dependent having the focus)
+ setFocusStealsFrontmost(false);
+ setAutoFocus(false);
+ setBackgroundVisible(false);
+ setIsChrome(true);
+}
+
+BOOL LLFloaterEmojiComplete::handleKey(KEY key, MASK mask, BOOL called_from_parent)
+{
+ bool handled = false;
+ if (MASK_NONE == mask)
+ {
+ switch (key)
+ {
+ case KEY_ESCAPE:
+ LLEmojiHelper::instance().hideHelper();
+ handled = true;
+ break;
+ }
+
+ }
+
+ if (handled)
+ return TRUE;
+ return LLFloater::handleKey(key, mask, called_from_parent);
+}
+
+void LLFloaterEmojiComplete::onOpen(const LLSD& key)
+{
+ mEmojiCtrl->setEmojiHint(key["hint"].asString());
+ if (0 == mEmojiCtrl->getEmojiCount())
+ {
+ LLEmojiHelper::instance().hideHelper();
+ }
+}
+
+BOOL LLFloaterEmojiComplete::postBuild()
+{
+ mEmojiCtrl = findChild<LLPanelEmojiComplete>("emoji_complete_ctrl");
+ mEmojiCtrl->setCommitCallback(
+ std::bind([&](const LLSD& sdValue)
+ {
+ setValue(sdValue);
+ onCommit();
+ }, std::placeholders::_2));
+ mEmojiCtrlHorz = getRect().getWidth() - mEmojiCtrl->getRect().getWidth();
+
+ return LLFloater::postBuild();
+}
+
+void LLFloaterEmojiComplete::reshape(S32 width, S32 height, BOOL called_from_parent)
+{
+ if (!called_from_parent)
+ {
+ LLRect rctFloater = getRect(), rctCtrl = mEmojiCtrl->getRect();
+ rctFloater.mRight = rctFloater.mLeft + rctCtrl.getWidth() + mEmojiCtrlHorz;
+ setRect(rctFloater);
+
+ return;
+ }
+
+ LLFloater::reshape(width, height, called_from_parent);
+}
+
+// ============================================================================
diff --git a/indra/newview/llpanelemojicomplete.h b/indra/newview/llpanelemojicomplete.h
new file mode 100644
index 0000000000..aa0f806525
--- /dev/null
+++ b/indra/newview/llpanelemojicomplete.h
@@ -0,0 +1,115 @@
+/**
+* @file llpanelemojicomplete.h
+* @brief Header file for LLPanelEmojiComplete
+*
+* $LicenseInfo:firstyear=2014&license=viewerlgpl$
+* Second Life Viewer Source Code
+* Copyright (C) 2014, Linden Research, Inc.
+*
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU Lesser General Public
+* License as published by the Free Software Foundation;
+* version 2.1 of the License only.
+*
+* This library is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this library; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+*
+* Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+* $/LicenseInfo$
+*/
+
+#pragma once
+
+#include "llfloater.h"
+#include "lluictrl.h"
+
+// ============================================================================
+// LLPanelEmojiComplete
+//
+
+class LLPanelEmojiComplete : public LLUICtrl
+{
+ friend class LLUICtrlFactory;
+public:
+ struct Params : public LLInitParam::Block<Params, LLUICtrl::Params>
+ {
+ Optional<bool> autosize;
+ Optional<S32> max_emoji,
+ padding;
+
+ Optional<LLUIImage*> selected_image;
+
+ Params();
+ };
+
+protected:
+ LLPanelEmojiComplete(const LLPanelEmojiComplete::Params&);
+public:
+ virtual ~LLPanelEmojiComplete();
+
+ void draw() override;
+ BOOL handleHover(S32 x, S32 y, MASK mask) override;
+ BOOL handleKey(KEY key, MASK mask, BOOL called_from_parent) override;
+ BOOL handleMouseDown(S32 x, S32 y, MASK mask) override;
+ BOOL handleMouseUp(S32 x, S32 y, MASK mask) override;
+ void onCommit() override;
+ void reshape(S32 width, S32 height, BOOL called_from_parent) override;
+
+public:
+ size_t getEmojiCount() const { return mEmojis.size(); }
+ void setEmojiHint(const std::string& hint);
+protected:
+ size_t posToIndex(S32 x, S32 y) const;
+ void select(size_t emoji_idx);
+ void selectNext();
+ void selectPrevious();
+ void setFont(const LLFontGL* fontp);
+ void updateConstraints();
+ void updateScrollPos();
+
+protected:
+ static constexpr auto npos = std::numeric_limits<size_t>::max();
+
+ bool mAutoSize = false;
+ const LLFontGL* mFont;
+ U16 mEmojiWidth = 0;
+ size_t mMaxVisible = 0;
+ S32 mPadding = 8;
+ LLRect mRenderRect;
+ LLUIImagePtr mSelectedImage;
+
+ LLWString mEmojis;
+ size_t mVisibleEmojis = 0;
+ size_t mFirstVisible = 0;
+ size_t mScrollPos = 0;
+ size_t mCurSelected = 0;
+ LLVector2 mLastHover;
+};
+
+// ============================================================================
+// LLFloaterEmojiComplete
+//
+
+class LLFloaterEmojiComplete : public LLFloater
+{
+public:
+ LLFloaterEmojiComplete(const LLSD& sdKey);
+
+public:
+ BOOL handleKey(KEY key, MASK mask, BOOL called_from_parent) override;
+ void onOpen(const LLSD& key) override;
+ BOOL postBuild() override;
+ void reshape(S32 width, S32 height, BOOL called_from_parent) override;
+
+protected:
+ LLPanelEmojiComplete* mEmojiCtrl = nullptr;
+ S32 mEmojiCtrlHorz = 0;
+};
+
+// ============================================================================
diff --git a/indra/newview/llpaneltopinfobar.h b/indra/newview/llpaneltopinfobar.h
index 78dd997029..b6c263e331 100644
--- a/indra/newview/llpaneltopinfobar.h
+++ b/indra/newview/llpaneltopinfobar.h
@@ -46,8 +46,8 @@ class LLPanelTopInfoBar : public LLPanel, public LLSingleton<LLPanelTopInfoBar>,
public:
typedef boost::signals2::signal<void ()> resize_signal_t;
- /*virtual*/ BOOL postBuild();
- /*virtual*/ void draw();
+ /*virtual*/ BOOL postBuild() override;
+ /*virtual*/ void draw() override;
/**
* Updates location and parcel icons on login complete
@@ -83,7 +83,7 @@ private:
*/
void initParcelIcons();
- BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
+ BOOL handleRightMouseDown(S32 x, S32 y, MASK mask) override;
/**
* Handles clicks on the parcel icons.
diff --git a/indra/newview/llpathfindingpathtool.h b/indra/newview/llpathfindingpathtool.h
index 88cb3a15f8..f98624e30d 100644
--- a/indra/newview/llpathfindingpathtool.h
+++ b/indra/newview/llpathfindingpathtool.h
@@ -66,17 +66,17 @@ public:
typedef boost::signals2::signal<void (void)> path_event_signal_t;
typedef boost::signals2::connection path_event_slot_t;
- virtual BOOL handleMouseDown(S32 pX, S32 pY, MASK pMask);
- virtual BOOL handleMouseUp(S32 pX, S32 pY, MASK pMask);
- virtual BOOL handleMiddleMouseDown(S32 pX, S32 pY, MASK pMask);
- virtual BOOL handleMiddleMouseUp(S32 pX, S32 pY, MASK pMask);
- virtual BOOL handleRightMouseDown(S32 pX, S32 pY, MASK pMask);
- virtual BOOL handleRightMouseUp(S32 pX, S32 pY, MASK pMask);
- virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
+ virtual BOOL handleMouseDown(S32 pX, S32 pY, MASK pMask) override;
+ virtual BOOL handleMouseUp(S32 pX, S32 pY, MASK pMask) override;
+ virtual BOOL handleMiddleMouseDown(S32 pX, S32 pY, MASK pMask) override;
+ virtual BOOL handleMiddleMouseUp(S32 pX, S32 pY, MASK pMask) override;
+ virtual BOOL handleRightMouseDown(S32 pX, S32 pY, MASK pMask) override;
+ virtual BOOL handleRightMouseUp(S32 pX, S32 pY, MASK pMask) override;
+ virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask) override;
- virtual BOOL handleHover(S32 pX, S32 pY, MASK pMask);
+ virtual BOOL handleHover(S32 pX, S32 pY, MASK pMask) override;
- virtual BOOL handleKey(KEY pKey, MASK pMask);
+ virtual BOOL handleKey(KEY pKey, MASK pMask) override;
EPathStatus getPathStatus() const;
diff --git a/indra/newview/llproductinforequest.h b/indra/newview/llproductinforequest.h
index d1036374e8..0b94c39d11 100644
--- a/indra/newview/llproductinforequest.h
+++ b/indra/newview/llproductinforequest.h
@@ -46,7 +46,7 @@ public:
std::string getDescriptionForSku(const std::string& sku);
private:
- /* virtual */ void initSingleton();
+ /* virtual */ void initSingleton() override;
void getLandDescriptionsCoro(std::string url);
LLSD mSkuDescriptions;
diff --git a/indra/newview/llrecentpeople.h b/indra/newview/llrecentpeople.h
index 1b322f2c0a..0c04222a9f 100644
--- a/indra/newview/llrecentpeople.h
+++ b/indra/newview/llrecentpeople.h
@@ -106,7 +106,7 @@ public:
/**
* LLSimpleListener interface.
*/
- /*virtual*/ bool handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata);
+ /*virtual*/ bool handleEvent(LLPointer<LLOldEvents::LLEvent> event, const LLSD& userdata) override;
void updateAvatarsArrivalTime(uuid_vec_t& uuids);
F32 getArrivalTimeByID(const LLUUID& id);
diff --git a/indra/newview/llspeakers.h b/indra/newview/llspeakers.h
index ed795b5155..22c9481687 100644
--- a/indra/newview/llspeakers.h
+++ b/indra/newview/llspeakers.h
@@ -338,7 +338,7 @@ class LLActiveSpeakerMgr : public LLSpeakerMgr, public LLSingleton<LLActiveSpeak
LOG_CLASS(LLActiveSpeakerMgr);
protected:
- virtual void updateSpeakerList();
+ virtual void updateSpeakerList() override;
};
class LLLocalSpeakerMgr : public LLSpeakerMgr, public LLSingleton<LLLocalSpeakerMgr>
@@ -347,7 +347,7 @@ class LLLocalSpeakerMgr : public LLSpeakerMgr, public LLSingleton<LLLocalSpeaker
~LLLocalSpeakerMgr ();
LOG_CLASS(LLLocalSpeakerMgr);
protected:
- virtual void updateSpeakerList();
+ virtual void updateSpeakerList() override;
};
#endif // LL_LLSPEAKERS_H
diff --git a/indra/newview/llspeakingindicatormanager.cpp b/indra/newview/llspeakingindicatormanager.cpp
index 0111d8869c..37c7ea55ae 100644
--- a/indra/newview/llspeakingindicatormanager.cpp
+++ b/indra/newview/llspeakingindicatormanager.cpp
@@ -88,7 +88,7 @@ public:
* So, method does not calculate difference between these list it only switches off already
* switched on indicators and switches on indicators of voice channel participants
*/
- void onParticipantsChanged();
+ void onParticipantsChanged() override;
private:
typedef std::set<LLUUID> speaker_ids_t;
diff --git a/indra/newview/lltextureview.cpp b/indra/newview/lltextureview.cpp
index cf9211767e..4431f6527d 100644
--- a/indra/newview/lltextureview.cpp
+++ b/indra/newview/lltextureview.cpp
@@ -613,7 +613,7 @@ void LLGLTexMemBar::draw()
LLFontGL::getFontMonospace()->renderUTF8(text, 0, 0, v_offset + line_height*3,
text_color, LLFontGL::LEFT, LLFontGL::TOP,
LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, S32_MAX,
- &x_right, FALSE);
+ &x_right, /*use_ellipses*/FALSE, /*use_color*/FALSE);
F32Kilobits bandwidth(LLAppViewer::getTextureFetch()->getTextureBandwidth());
F32Kilobits max_bandwidth(gSavedSettings.getF32("ThrottleBandwidthKBPS"));
diff --git a/indra/newview/lltoolbrush.h b/indra/newview/lltoolbrush.h
index c108d83256..6545ee3611 100644
--- a/indra/newview/lltoolbrush.h
+++ b/indra/newview/lltoolbrush.h
@@ -49,27 +49,27 @@ class LLToolBrushLand : public LLTool, public LLEditMenuHandler, public LLSingle
public:
// x,y in window coords, 0,0 = left,bot
- virtual BOOL handleMouseDown( S32 x, S32 y, MASK mask );
- virtual BOOL handleMouseUp( S32 x, S32 y, MASK mask );
- virtual BOOL handleHover( S32 x, S32 y, MASK mask );
- virtual void handleSelect();
- virtual void handleDeselect();
+ virtual BOOL handleMouseDown( S32 x, S32 y, MASK mask ) override;
+ virtual BOOL handleMouseUp( S32 x, S32 y, MASK mask ) override;
+ virtual BOOL handleHover( S32 x, S32 y, MASK mask ) override;
+ virtual void handleSelect() override;
+ virtual void handleDeselect() override;
// isAlwaysRendered() - return true if this is a tool that should
// always be rendered regardless of selection.
- virtual BOOL isAlwaysRendered() { return TRUE; }
+ virtual BOOL isAlwaysRendered() override { return TRUE; }
// Draw the area that will be affected.
- virtual void render();
+ virtual void render() override;
// on Idle is where the land modification actually occurs
static void onIdle(void* brush_tool);
- void onMouseCaptureLost();
+ void onMouseCaptureLost() override;
void modifyLandInSelectionGlobal();
- virtual void undo();
- virtual BOOL canUndo() const { return TRUE; }
+ virtual void undo() override;
+ virtual BOOL canUndo() const override { return TRUE; }
protected:
void brush( void );
diff --git a/indra/newview/lltoolcomp.h b/indra/newview/lltoolcomp.h
index 86506f725e..f539a045b7 100644
--- a/indra/newview/lltoolcomp.h
+++ b/indra/newview/lltoolcomp.h
@@ -108,11 +108,11 @@ class LLToolCompInspect : public LLToolComposite, public LLSingleton<LLToolCompI
public:
// Overridden from LLToolComposite
- virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
- virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
- virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
- virtual BOOL handleKey(KEY key, MASK mask);
- virtual void onMouseCaptureLost();
+ virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask) override;
+ virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask) override;
+ virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask) override;
+ virtual BOOL handleKey(KEY key, MASK mask) override;
+ virtual void onMouseCaptureLost() override;
void keyUp(KEY key, MASK mask);
static void pickCallback(const LLPickInfo& pick_info);
@@ -133,13 +133,13 @@ class LLToolCompTranslate : public LLToolComposite, public LLSingleton<LLToolCom
public:
// Overridden from LLToolComposite
- virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
- virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
- virtual BOOL handleHover(S32 x, S32 y, MASK mask);
- virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); // Returns to the default tool
- virtual void render();
+ virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask) override;
+ virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask) override;
+ virtual BOOL handleHover(S32 x, S32 y, MASK mask) override;
+ virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask) override; // Returns to the default tool
+ virtual void render() override;
- virtual LLTool* getOverrideTool(MASK mask);
+ virtual LLTool* getOverrideTool(MASK mask) override;
static void pickCallback(const LLPickInfo& pick_info);
};
@@ -154,13 +154,13 @@ class LLToolCompScale : public LLToolComposite, public LLSingleton<LLToolCompSca
public:
// Overridden from LLToolComposite
- virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
- virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
- virtual BOOL handleHover(S32 x, S32 y, MASK mask);
- virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); // Returns to the default tool
- virtual void render();
+ virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask) override;
+ virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask) override;
+ virtual BOOL handleHover(S32 x, S32 y, MASK mask) override;
+ virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask) override; // Returns to the default tool
+ virtual void render() override;
- virtual LLTool* getOverrideTool(MASK mask);
+ virtual LLTool* getOverrideTool(MASK mask) override;
static void pickCallback(const LLPickInfo& pick_info);
};
@@ -176,13 +176,13 @@ class LLToolCompRotate : public LLToolComposite, public LLSingleton<LLToolCompRo
public:
// Overridden from LLToolComposite
- virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
- virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
- virtual BOOL handleHover(S32 x, S32 y, MASK mask);
- virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
- virtual void render();
+ virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask) override;
+ virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask) override;
+ virtual BOOL handleHover(S32 x, S32 y, MASK mask) override;
+ virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask) override;
+ virtual void render() override;
- virtual LLTool* getOverrideTool(MASK mask);
+ virtual LLTool* getOverrideTool(MASK mask) override;
static void pickCallback(const LLPickInfo& pick_info);
@@ -199,9 +199,9 @@ class LLToolCompCreate : public LLToolComposite, public LLSingleton<LLToolCompCr
public:
// Overridden from LLToolComposite
- virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
- virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
- virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
+ virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask) override;
+ virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask) override;
+ virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask) override;
static void pickCallback(const LLPickInfo& pick_info);
protected:
@@ -224,16 +224,16 @@ class LLToolCompGun : public LLToolComposite, public LLSingleton<LLToolCompGun>
public:
// Overridden from LLToolComposite
- virtual BOOL handleHover(S32 x, S32 y, MASK mask);
- virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
- virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
- virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
- virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
- virtual BOOL handleScrollWheel(S32 x, S32 y, S32 clicks);
- virtual void onMouseCaptureLost();
- virtual void handleSelect();
- virtual void handleDeselect();
- virtual LLTool* getOverrideTool(MASK mask) { return NULL; }
+ virtual BOOL handleHover(S32 x, S32 y, MASK mask) override;
+ virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask) override;
+ virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask) override;
+ virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask) override;
+ virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask) override;
+ virtual BOOL handleScrollWheel(S32 x, S32 y, S32 clicks) override;
+ virtual void onMouseCaptureLost() override;
+ virtual void handleSelect() override;
+ virtual void handleDeselect() override;
+ virtual LLTool* getOverrideTool(MASK mask) override { return NULL; }
protected:
LLToolGun* mGun;
diff --git a/indra/newview/lltooldraganddrop.h b/indra/newview/lltooldraganddrop.h
index 4537d73332..8ec027cb0e 100644
--- a/indra/newview/lltooldraganddrop.h
+++ b/indra/newview/lltooldraganddrop.h
@@ -48,12 +48,12 @@ public:
typedef boost::signals2::signal<void ()> enddrag_signal_t;
// overridden from LLTool
- virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
- virtual BOOL handleHover(S32 x, S32 y, MASK mask);
- virtual BOOL handleKey(KEY key, MASK mask);
- virtual BOOL handleToolTip(S32 x, S32 y, MASK mask);
- virtual void onMouseCaptureLost();
- virtual void handleDeselect();
+ virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask) override;
+ virtual BOOL handleHover(S32 x, S32 y, MASK mask) override;
+ virtual BOOL handleKey(KEY key, MASK mask) override;
+ virtual BOOL handleToolTip(S32 x, S32 y, MASK mask) override;
+ virtual void onMouseCaptureLost() override;
+ virtual void handleDeselect() override;
void setDragStart( S32 x, S32 y ); // In screen space
BOOL isOverThreshold( S32 x, S32 y ); // In screen space
diff --git a/indra/newview/lltoolface.h b/indra/newview/lltoolface.h
index e4b8ae12b8..7c8ff20480 100644
--- a/indra/newview/lltoolface.h
+++ b/indra/newview/lltoolface.h
@@ -39,11 +39,11 @@ class LLToolFace
virtual ~LLToolFace();
public:
- virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
- virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
- virtual void handleSelect();
- virtual void handleDeselect();
- virtual void render(); // draw face highlights
+ virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask) override;
+ virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask) override;
+ virtual void handleSelect() override;
+ virtual void handleDeselect() override;
+ virtual void render() override; // draw face highlights
static void pickCallback(const LLPickInfo& pick_info);
};
diff --git a/indra/newview/lltoolfocus.h b/indra/newview/lltoolfocus.h
index cfc235b6c2..c9dd39ff4b 100644
--- a/indra/newview/lltoolfocus.h
+++ b/indra/newview/lltoolfocus.h
@@ -38,16 +38,16 @@ class LLToolCamera
virtual ~LLToolCamera();
public:
- virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
- virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
- virtual BOOL handleHover(S32 x, S32 y, MASK mask);
+ virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask) override;
+ virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask) override;
+ virtual BOOL handleHover(S32 x, S32 y, MASK mask) override;
- virtual void onMouseCaptureLost();
+ virtual void onMouseCaptureLost() override;
- virtual void handleSelect();
- virtual void handleDeselect();
+ virtual void handleSelect() override;
+ virtual void handleDeselect() override;
- virtual LLTool* getOverrideTool(MASK mask) { return NULL; }
+ virtual LLTool* getOverrideTool(MASK mask) override { return NULL; }
static void pickCallback(const LLPickInfo& pick_info);
BOOL mouseSteerMode() { return mMouseSteering; }
diff --git a/indra/newview/lltoolindividual.h b/indra/newview/lltoolindividual.h
index e7c2060fba..89dd9d9796 100644
--- a/indra/newview/lltoolindividual.h
+++ b/indra/newview/lltoolindividual.h
@@ -43,11 +43,9 @@ class LLToolIndividual : public LLTool, public LLSingleton<LLToolIndividual>
virtual ~LLToolIndividual();
public:
- virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
- virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
- virtual void handleSelect();
- //virtual void handleDeselect();
- //virtual void render();
+ virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask) override;
+ virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask) override;
+ virtual void handleSelect() override;
static void pickCallback(const LLPickInfo& pick_info);
diff --git a/indra/newview/lltoolobjpicker.h b/indra/newview/lltoolobjpicker.h
index 5ad9b67e21..a55cd223de 100644
--- a/indra/newview/lltoolobjpicker.h
+++ b/indra/newview/lltoolobjpicker.h
@@ -38,16 +38,16 @@ class LLToolObjPicker : public LLTool, public LLSingleton<LLToolObjPicker>
LLSINGLETON(LLToolObjPicker);
public:
- virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
- virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
- virtual BOOL handleHover(S32 x, S32 y, MASK mask);
+ virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask) override;
+ virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask) override;
+ virtual BOOL handleHover(S32 x, S32 y, MASK mask) override;
- virtual void handleSelect();
- virtual void handleDeselect();
+ virtual void handleSelect() override;
+ virtual void handleDeselect() override;
- virtual void onMouseCaptureLost();
+ virtual void onMouseCaptureLost() override;
- virtual void setExitCallback(void (*callback)(void *), void *callback_data);
+ void setExitCallback(void (*callback)(void *), void *callback_data);
LLUUID getObjectID() const { return mHitObjectID; }
diff --git a/indra/newview/lltoolpie.h b/indra/newview/lltoolpie.h
index 8f6100e4b4..dca0d12cf6 100644
--- a/indra/newview/lltoolpie.h
+++ b/indra/newview/lltoolpie.h
@@ -42,26 +42,26 @@ class LLToolPie : public LLTool, public LLSingleton<LLToolPie>
public:
// Virtual functions inherited from LLMouseHandler
- virtual BOOL handleAnyMouseClick(S32 x, S32 y, MASK mask, EMouseClickType clicktype, BOOL down);
- virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
- virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
- virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
- virtual BOOL handleRightMouseUp(S32 x, S32 y, MASK mask);
- virtual BOOL handleHover(S32 x, S32 y, MASK mask);
- virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
+ virtual BOOL handleAnyMouseClick(S32 x, S32 y, MASK mask, EMouseClickType clicktype, BOOL down) override;
+ virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask) override;
+ virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask) override;
+ virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask) override;
+ virtual BOOL handleRightMouseUp(S32 x, S32 y, MASK mask) override;
+ virtual BOOL handleHover(S32 x, S32 y, MASK mask) override;
+ virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask) override;
BOOL handleScrollWheelAny(S32 x, S32 y, S32 clicks_x, S32 clicks_y);
- virtual BOOL handleScrollWheel(S32 x, S32 y, S32 clicks);
- virtual BOOL handleScrollHWheel(S32 x, S32 y, S32 clicks);
- virtual BOOL handleToolTip(S32 x, S32 y, MASK mask);
+ virtual BOOL handleScrollWheel(S32 x, S32 y, S32 clicks) override;
+ virtual BOOL handleScrollHWheel(S32 x, S32 y, S32 clicks) override;
+ virtual BOOL handleToolTip(S32 x, S32 y, MASK mask) override;
- virtual void render();
+ virtual void render() override;
- virtual void stopEditing();
+ virtual void stopEditing() override;
- virtual void onMouseCaptureLost();
- virtual void handleSelect();
- virtual void handleDeselect();
- virtual LLTool* getOverrideTool(MASK mask);
+ virtual void onMouseCaptureLost() override;
+ virtual void handleSelect() override;
+ virtual void handleDeselect() override;
+ virtual LLTool* getOverrideTool(MASK mask) override;
LLPickInfo& getPick() { return mPick; }
U8 getClickAction() { return mClickAction; }
diff --git a/indra/newview/lltoolpipette.h b/indra/newview/lltoolpipette.h
index 7575d8ad18..2636811c66 100644
--- a/indra/newview/lltoolpipette.h
+++ b/indra/newview/lltoolpipette.h
@@ -47,10 +47,10 @@ class LLToolPipette
virtual ~LLToolPipette();
public:
- virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
- virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
- virtual BOOL handleHover(S32 x, S32 y, MASK mask);
- virtual BOOL handleToolTip(S32 x, S32 y, MASK mask);
+ virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask) override;
+ virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask) override;
+ virtual BOOL handleHover(S32 x, S32 y, MASK mask) override;
+ virtual BOOL handleToolTip(S32 x, S32 y, MASK mask) override;
// Note: Don't return connection; use boost::bind + boost::signals2::trackable to disconnect slots
typedef boost::signals2::signal<void (const LLTextureEntry& te)> signal_t;
diff --git a/indra/newview/lltoolselectland.h b/indra/newview/lltoolselectland.h
index b5ba72f16d..88bc4e2e3d 100644
--- a/indra/newview/lltoolselectland.h
+++ b/indra/newview/lltoolselectland.h
@@ -39,15 +39,15 @@ class LLToolSelectLand
virtual ~LLToolSelectLand();
public:
- /*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask);
- /*virtual*/ BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
- /*virtual*/ BOOL handleMouseUp(S32 x, S32 y, MASK mask);
- /*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask);
- /*virtual*/ void render(); // draw the select rectangle
- /*virtual*/ BOOL isAlwaysRendered() { return TRUE; }
+ /*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask) override;
+ /*virtual*/ BOOL handleDoubleClick(S32 x, S32 y, MASK mask) override;
+ /*virtual*/ BOOL handleMouseUp(S32 x, S32 y, MASK mask) override;
+ /*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask) override;
+ /*virtual*/ void render() override; // draw the select rectangle
+ /*virtual*/ BOOL isAlwaysRendered() override { return TRUE; }
- /*virtual*/ void handleSelect();
- /*virtual*/ void handleDeselect();
+ /*virtual*/ void handleSelect() override;
+ /*virtual*/ void handleDeselect() override;
protected:
BOOL outsideSlop(S32 x, S32 y, S32 start_x, S32 start_y);
diff --git a/indra/newview/llversioninfo.h b/indra/newview/llversioninfo.h
index 02ff0c094a..37382243f6 100644
--- a/indra/newview/llversioninfo.h
+++ b/indra/newview/llversioninfo.h
@@ -47,7 +47,7 @@ class LLStoreListener;
class LLVersionInfo: public LLSingleton<LLVersionInfo>
{
LLSINGLETON(LLVersionInfo);
- void initSingleton();
+ void initSingleton() override;
public:
~LLVersionInfo();
diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp
index c0398372b4..1c1aa9ea47 100644
--- a/indra/newview/llviewerfloaterreg.cpp
+++ b/indra/newview/llviewerfloaterreg.cpp
@@ -158,6 +158,7 @@
#include "llfloaterimnearbychat.h"
#include "llpanelblockedlist.h"
#include "llpanelprofileclassifieds.h"
+#include "llpanelemojicomplete.h"
#include "llpreviewanim.h"
#include "llpreviewgesture.h"
#include "llpreviewnotecard.h"
@@ -336,6 +337,7 @@ void LLViewerFloaterReg::registerFloaters()
LLFloaterReg::add("delete_pref_preset", "floater_delete_pref_preset.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterDeletePrefPreset>);
LLFloaterReg::add("destinations", "floater_destinations.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterDestinations>);
+ LLFloaterReg::add("emoji_complete", "floater_emoji_complete.xml", &LLFloaterReg::build<LLFloaterEmojiComplete>);
LLFloaterReg::add("env_post_process", "floater_post_process.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterPostProcess>);
LLFloaterReg::add("env_fixed_environmentent_water", "floater_fixedenvironment.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterFixedEnvironmentWater>);
diff --git a/indra/newview/llviewerhelp.h b/indra/newview/llviewerhelp.h
index da50e07a43..bbd20bc07e 100644
--- a/indra/newview/llviewerhelp.h
+++ b/indra/newview/llviewerhelp.h
@@ -43,21 +43,21 @@ class LLViewerHelp : public LLHelp, public LLSingleton<LLViewerHelp>
public:
/// display the specified help topic in the help viewer
- /*virtual*/ void showTopic(const std::string &topic);
+ /*virtual*/ void showTopic(const std::string &topic) override;
- std::string getURL(const std::string& topic);
+ std::string getURL(const std::string& topic) override;
// return topic derived from viewer UI focus, else default topic
std::string getTopicFromFocus();
/// return default (fallback) topic name suitable for showTopic()
- /*virtual*/ std::string defaultTopic();
+ /*virtual*/ std::string defaultTopic() override;
// return topic to use before the user logs in
- /*virtual*/ std::string preLoginTopic();
+ /*virtual*/ std::string preLoginTopic() override;
// return topic to use for the top-level help, invoked by F1
- /*virtual*/ std::string f1HelpTopic();
+ /*virtual*/ std::string f1HelpTopic() override;
};
#endif // header guard
diff --git a/indra/newview/llviewermedia.h b/indra/newview/llviewermedia.h
index f1f42afd81..ad7c4bcefa 100644
--- a/indra/newview/llviewermedia.h
+++ b/indra/newview/llviewermedia.h
@@ -74,7 +74,7 @@ class LLViewerMedia: public LLSingleton<LLViewerMedia>
{
LLSINGLETON(LLViewerMedia);
~LLViewerMedia();
- void initSingleton();
+ void initSingleton() override;
LOG_CLASS(LLViewerMedia);
public:
diff --git a/indra/newview/llviewermediafocus.h b/indra/newview/llviewermediafocus.h
index effd08a559..2310e4dbfc 100644
--- a/indra/newview/llviewermediafocus.h
+++ b/indra/newview/llviewermediafocus.h
@@ -54,10 +54,10 @@ public:
void setHoverFace(LLPointer<LLViewerObject> objectp, S32 face, viewer_media_t media_impl, LLVector3 pick_normal = LLVector3::zero);
void clearHover();
- /*virtual*/ bool getFocus();
- /*virtual*/ BOOL handleKey(KEY key, MASK mask, BOOL called_from_parent);
- /*virtual*/ BOOL handleKeyUp(KEY key, MASK mask, BOOL called_from_parent);
- /*virtual*/ BOOL handleUnicodeChar(llwchar uni_char, BOOL called_from_parent);
+ bool getFocus();
+ /*virtual*/ BOOL handleKey(KEY key, MASK mask, BOOL called_from_parent) override;
+ /*virtual*/ BOOL handleKeyUp(KEY key, MASK mask, BOOL called_from_parent) override;
+ /*virtual*/ BOOL handleUnicodeChar(llwchar uni_char, BOOL called_from_parent) override;
BOOL handleScrollWheel(const LLVector2& texture_coords, S32 clicks_x, S32 clicks_y);
BOOL handleScrollWheel(S32 x, S32 y, S32 clicks_x, S32 clicks_y);
@@ -92,12 +92,12 @@ public:
LLUUID getControlsMediaID();
// The MoaP object wants keyup and keydown events. Overridden to return true.
- virtual bool wantsKeyUpKeyDown() const;
- virtual bool wantsReturnKey() const;
+ virtual bool wantsKeyUpKeyDown() const override;
+ virtual bool wantsReturnKey() const override;
protected:
- /*virtual*/ void onFocusReceived();
- /*virtual*/ void onFocusLost();
+ /*virtual*/ void onFocusReceived() override;
+ /*virtual*/ void onFocusLost() override;
private:
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index a0223a5dbb..af3eaea9be 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -9566,6 +9566,10 @@ void initialize_menus()
//Develop (clear cache immediately)
commit.add("Develop.ClearCache", boost::bind(&handle_cache_clear_immediately) );
+ // Develop (Fonts debugging)
+ commit.add("Develop.Fonts.Dump", boost::bind(&LLFontGL::dumpFonts));
+ commit.add("Develop.Fonts.DumpTextures", boost::bind(&LLFontGL::dumpFontTextures));
+
// Admin >Object
view_listener_t::addMenu(new LLAdminForceTakeCopy(), "Admin.ForceTakeCopy");
view_listener_t::addMenu(new LLAdminHandleObjectOwnerSelf(), "Admin.HandleObjectOwnerSelf");
diff --git a/indra/newview/llviewerparcelaskplay.h b/indra/newview/llviewerparcelaskplay.h
index dc711917d2..56faddae66 100644
--- a/indra/newview/llviewerparcelaskplay.h
+++ b/indra/newview/llviewerparcelaskplay.h
@@ -34,8 +34,8 @@ class LLViewerParcelAskPlay : public LLSingleton<LLViewerParcelAskPlay>
{
LLSINGLETON(LLViewerParcelAskPlay);
~LLViewerParcelAskPlay();
- void initSingleton();
- void cleanupSingleton();
+ void initSingleton() override;
+ void cleanupSingleton() override;
public:
// functor expects functor(region_id, parcel_id, url, play/stop)
typedef boost::function<void(const LLUUID&, const S32&, const std::string&, const bool&)> ask_callback;
diff --git a/indra/newview/llviewerparcelmedia.h b/indra/newview/llviewerparcelmedia.h
index 779a65bdf8..790b2b71fc 100644
--- a/indra/newview/llviewerparcelmedia.h
+++ b/indra/newview/llviewerparcelmedia.h
@@ -74,7 +74,7 @@ public:
void sendMediaNavigateMessage(const std::string& url);
// inherited from LLViewerMediaObserver
- virtual void handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event);
+ virtual void handleMediaEvent(LLPluginClassMedia* self, EMediaEvent event) override;
private:
void processParcelMediaCommandMessage(LLMessageSystem *msg);
diff --git a/indra/newview/llviewerparcelmediaautoplay.h b/indra/newview/llviewerparcelmediaautoplay.h
index d71fd4c075..e83085dee0 100644
--- a/indra/newview/llviewerparcelmediaautoplay.h
+++ b/indra/newview/llviewerparcelmediaautoplay.h
@@ -35,7 +35,7 @@ class LLViewerParcelMediaAutoPlay : LLEventTimer, public LLSingleton<LLViewerPar
{
LLSINGLETON(LLViewerParcelMediaAutoPlay);
public:
- virtual BOOL tick();
+ virtual BOOL tick() override;
static void playStarted();
private:
diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp
index e3ac56d0d3..8a11c5cf8f 100644
--- a/indra/newview/llviewertexture.cpp
+++ b/indra/newview/llviewertexture.cpp
@@ -1118,7 +1118,7 @@ void LLViewerFetchedTexture::init(bool firstinit)
mLoadedCallbackDesiredDiscardLevel = S8_MAX;
mPauseLoadedCallBacks = FALSE;
- mNeedsCreateTexture = FALSE;
+ mNeedsCreateTexture = false;
mIsRawImageValid = FALSE;
mRawDiscardLevel = INVALID_DISCARD_LEVEL;
@@ -1400,12 +1400,12 @@ void LLViewerFetchedTexture::addToCreateTexture()
{
//just update some variables, not to create a real GL texture.
createGLTexture(mRawDiscardLevel, mRawImage, 0, FALSE);
- mNeedsCreateTexture = FALSE;
+ mNeedsCreateTexture = false;
destroyRawImage();
}
else if(!force_update && getDiscardLevel() > -1 && getDiscardLevel() <= mRawDiscardLevel)
{
- mNeedsCreateTexture = FALSE;
+ mNeedsCreateTexture = false;
destroyRawImage();
}
else
@@ -1441,7 +1441,7 @@ void LLViewerFetchedTexture::addToCreateTexture()
mRawDiscardLevel += i;
if(mRawDiscardLevel >= getDiscardLevel() && getDiscardLevel() > 0)
{
- mNeedsCreateTexture = FALSE;
+ mNeedsCreateTexture = false;
destroyRawImage();
return;
}
@@ -1473,7 +1473,7 @@ BOOL LLViewerFetchedTexture::preCreateTexture(S32 usename/*= 0*/)
destroyRawImage();
return FALSE;
}
- mNeedsCreateTexture = FALSE;
+ mNeedsCreateTexture = false;
if (mRawImage.isNull())
{
@@ -1609,14 +1609,14 @@ void LLViewerFetchedTexture::postCreateTexture()
destroyRawImage();
}
- mNeedsCreateTexture = FALSE;
+ mNeedsCreateTexture = false;
}
void LLViewerFetchedTexture::scheduleCreateTexture()
{
if (!mNeedsCreateTexture)
{
- mNeedsCreateTexture = TRUE;
+ mNeedsCreateTexture = true;
if (preCreateTexture())
{
#if LL_IMAGEGL_THREAD_CHECK
@@ -1630,7 +1630,7 @@ void LLViewerFetchedTexture::scheduleCreateTexture()
memcpy(data_copy, data, size);
}
#endif
- mNeedsCreateTexture = TRUE;
+ mNeedsCreateTexture = true;
auto mainq = LLImageGLThread::sEnabled ? mMainQueue.lock() : nullptr;
if (mainq)
{
diff --git a/indra/newview/llviewertexture.h b/indra/newview/llviewertexture.h
index b953d7006b..2f5e0d01df 100644
--- a/indra/newview/llviewertexture.h
+++ b/indra/newview/llviewertexture.h
@@ -27,6 +27,7 @@
#ifndef LL_LLVIEWERTEXTURE_H
#define LL_LLVIEWERTEXTURE_H
+#include "llatomic.h"
#include "llgltexture.h"
#include "lltimer.h"
#include "llframetimer.h"
@@ -528,7 +529,9 @@ protected:
LLFrameTimer mStopFetchingTimer; // Time since mDecodePriority == 0.f.
BOOL mInImageList; // TRUE if image is in list (in which case don't reset priority!)
- BOOL mNeedsCreateTexture;
+ // This needs to be atomic, since it is written both in the main thread
+ // and in the GL image worker thread... HB
+ LLAtomicBool mNeedsCreateTexture;
BOOL mForSculpt ; //a flag if the texture is used as sculpt data.
BOOL mIsFetched ; //is loaded from remote or from cache, not generated locally.
diff --git a/indra/newview/llviewertexturelist.h b/indra/newview/llviewertexturelist.h
index 0018e78d45..f159682b67 100644
--- a/indra/newview/llviewertexturelist.h
+++ b/indra/newview/llviewertexturelist.h
@@ -242,9 +242,9 @@ class LLUIImageList : public LLImageProviderInterface, public LLSingleton<LLUIIm
LLSINGLETON_EMPTY_CTOR(LLUIImageList);
public:
// LLImageProviderInterface
- /*virtual*/ LLPointer<LLUIImage> getUIImageByID(const LLUUID& id, S32 priority);
- /*virtual*/ LLPointer<LLUIImage> getUIImage(const std::string& name, S32 priority);
- void cleanUp();
+ /*virtual*/ LLPointer<LLUIImage> getUIImageByID(const LLUUID& id, S32 priority) override;
+ /*virtual*/ LLPointer<LLUIImage> getUIImage(const std::string& name, S32 priority) override;
+ void cleanUp() override;
bool initFromFile();
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index ddc11ac0bd..a6a62ffacf 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -1008,7 +1008,7 @@ public:
const Line& line = *iter;
LLFontGL::getFontMonospace()->renderUTF8(line.text, 0, (F32)line.x, (F32)line.y, mTextColor,
LLFontGL::LEFT, LLFontGL::TOP,
- LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, S32_MAX, NULL, FALSE);
+ LLFontGL::NORMAL, LLFontGL::NO_SHADOW, S32_MAX, S32_MAX, NULL, /*use_ellipses*/FALSE, /*use_color*/FALSE);
}
}
diff --git a/indra/newview/llvoicechannel.h b/indra/newview/llvoicechannel.h
index 309c3eebdd..e68bfbe1ff 100644
--- a/indra/newview/llvoicechannel.h
+++ b/indra/newview/llvoicechannel.h
@@ -170,12 +170,12 @@ class LLVoiceChannelProximal : public LLVoiceChannel, public LLSingleton<LLVoice
LLSINGLETON(LLVoiceChannelProximal);
public:
- /*virtual*/ void onChange(EStatusType status, const std::string &channelURI, bool proximal);
- /*virtual*/ void handleStatusChange(EStatusType status);
- /*virtual*/ void handleError(EStatusType status);
- /*virtual*/ BOOL isActive();
- /*virtual*/ void activate();
- /*virtual*/ void deactivate();
+ /*virtual*/ void onChange(EStatusType status, const std::string &channelURI, bool proximal) override;
+ /*virtual*/ void handleStatusChange(EStatusType status) override;
+ /*virtual*/ void handleError(EStatusType status) override;
+ /*virtual*/ BOOL isActive() override;
+ /*virtual*/ void activate() override;
+ /*virtual*/ void deactivate() override;
};
@@ -184,15 +184,15 @@ class LLVoiceChannelP2P : public LLVoiceChannelGroup
public:
LLVoiceChannelP2P(const LLUUID& session_id, const std::string& session_name, const LLUUID& other_user_id);
- /*virtual*/ void handleStatusChange(EStatusType status);
- /*virtual*/ void handleError(EStatusType status);
- /*virtual*/ void activate();
- /*virtual*/ void getChannelInfo();
+ /*virtual*/ void handleStatusChange(EStatusType status) override;
+ /*virtual*/ void handleError(EStatusType status) override;
+ /*virtual*/ void activate() override;
+ /*virtual*/ void getChannelInfo() override;
void setSessionHandle(const std::string& handle, const std::string &inURI);
protected:
- virtual void setState(EState state);
+ virtual void setState(EState state) override;
private:
diff --git a/indra/newview/llvoicevivox.h b/indra/newview/llvoicevivox.h
index 0a785401c1..3df5cd33ac 100644
--- a/indra/newview/llvoicevivox.h
+++ b/indra/newview/llvoicevivox.h
@@ -64,26 +64,26 @@ public:
/// @name LLVoiceModuleInterface virtual implementations
/// @see LLVoiceModuleInterface
//@{
- virtual void init(LLPumpIO *pump); // Call this once at application startup (creates connector)
- virtual void terminate(); // Call this to clean up during shutdown
+ virtual void init(LLPumpIO *pump) override; // Call this once at application startup (creates connector)
+ virtual void terminate() override; // Call this to clean up during shutdown
- virtual const LLVoiceVersionInfo& getVersion();
+ virtual const LLVoiceVersionInfo& getVersion() override;
- virtual void updateSettings(); // call after loading settings and whenever they change
+ virtual void updateSettings() override; // call after loading settings and whenever they change
// Returns true if vivox has successfully logged in and is not in error state
- virtual bool isVoiceWorking() const;
+ virtual bool isVoiceWorking() const override;
/////////////////////
/// @name Tuning
//@{
- virtual void tuningStart();
- virtual void tuningStop();
- virtual bool inTuningMode();
+ virtual void tuningStart() override;
+ virtual void tuningStop() override;
+ virtual bool inTuningMode() override;
- virtual void tuningSetMicVolume(float volume);
- virtual void tuningSetSpeakerVolume(float volume);
- virtual float tuningGetEnergy(void);
+ virtual void tuningSetMicVolume(float volume) override;
+ virtual void tuningSetSpeakerVolume(float volume) override;
+ virtual float tuningGetEnergy(void) override;
//@}
/////////////////////
@@ -91,40 +91,40 @@ public:
//@{
// This returns true when it's safe to bring up the "device settings" dialog in the prefs.
// i.e. when the daemon is running and connected, and the device lists are populated.
- virtual bool deviceSettingsAvailable();
- virtual bool deviceSettingsUpdated(); //return if the list has been updated and never fetched, only to be called from the voicepanel.
+ virtual bool deviceSettingsAvailable() override;
+ virtual bool deviceSettingsUpdated() override; //return if the list has been updated and never fetched, only to be called from the voicepanel.
// Requery the vivox daemon for the current list of input/output devices.
// If you pass true for clearCurrentList, deviceSettingsAvailable() will be false until the query has completed
// (use this if you want to know when it's done).
// If you pass false, you'll have no way to know when the query finishes, but the device lists will not appear empty in the interim.
- virtual void refreshDeviceLists(bool clearCurrentList = true);
+ virtual void refreshDeviceLists(bool clearCurrentList = true) override;
- virtual void setCaptureDevice(const std::string& name);
- virtual void setRenderDevice(const std::string& name);
+ virtual void setCaptureDevice(const std::string& name) override;
+ virtual void setRenderDevice(const std::string& name) override;
- virtual LLVoiceDeviceList& getCaptureDevices();
- virtual LLVoiceDeviceList& getRenderDevices();
+ virtual LLVoiceDeviceList& getCaptureDevices() override;
+ virtual LLVoiceDeviceList& getRenderDevices() override;
//@}
- virtual void getParticipantList(std::set<LLUUID> &participants);
- virtual bool isParticipant(const LLUUID& speaker_id);
+ virtual void getParticipantList(std::set<LLUUID> &participants) override;
+ virtual bool isParticipant(const LLUUID& speaker_id) override;
// Send a text message to the specified user, initiating the session if necessary.
// virtual BOOL sendTextMessage(const LLUUID& participant_id, const std::string& message) const {return false;};
// close any existing text IM session with the specified user
- virtual void endUserIMSession(const LLUUID &uuid);
+ virtual void endUserIMSession(const LLUUID &uuid) override;
// Returns true if calling back the session URI after the session has closed is possible.
// Currently this will be false only for PSTN P2P calls.
// NOTE: this will return true if the session can't be found.
- virtual BOOL isSessionCallBackPossible(const LLUUID &session_id);
+ virtual BOOL isSessionCallBackPossible(const LLUUID &session_id) override;
// Returns true if the session can accepte text IM's.
// Currently this will be false only for PSTN P2P calls.
// NOTE: this will return true if the session can't be found.
- virtual BOOL isSessionTextIMPossible(const LLUUID &session_id);
+ virtual BOOL isSessionTextIMPossible(const LLUUID &session_id) override;
////////////////////////////
@@ -132,21 +132,21 @@ public:
//@{
// returns true iff the user is currently in a proximal (local spatial) channel.
// Note that gestures should only fire if this returns true.
- virtual bool inProximalChannel();
+ virtual bool inProximalChannel() override;
virtual void setNonSpatialChannel(const std::string &uri,
- const std::string &credentials);
+ const std::string &credentials) override;
virtual bool setSpatialChannel(const std::string &uri,
- const std::string &credentials);
+ const std::string &credentials) override;
- virtual void leaveNonSpatialChannel();
+ virtual void leaveNonSpatialChannel() override;
- virtual void leaveChannel(void);
+ virtual void leaveChannel(void) override;
// Returns the URI of the current channel, or an empty string if not currently in a channel.
// NOTE that it will return an empty string if it's in the process of joining a channel.
- virtual std::string getCurrentChannel();
+ virtual std::string getCurrentChannel() override;
//@}
@@ -154,59 +154,59 @@ public:
/// @name invitations
//@{
// start a voice channel with the specified user
- virtual void callUser(const LLUUID &uuid);
- virtual bool isValidChannel(std::string &channelHandle);
- virtual bool answerInvite(std::string &channelHandle);
- virtual void declineInvite(std::string &channelHandle);
+ virtual void callUser(const LLUUID &uuid) override;
+ virtual bool isValidChannel(std::string &channelHandle) override;
+ virtual bool answerInvite(std::string &channelHandle) override;
+ virtual void declineInvite(std::string &channelHandle) override;
//@}
/////////////////////////
/// @name Volume/gain
//@{
- virtual void setVoiceVolume(F32 volume);
- virtual void setMicGain(F32 volume);
+ virtual void setVoiceVolume(F32 volume) override;
+ virtual void setMicGain(F32 volume) override;
//@}
/////////////////////////
/// @name enable disable voice and features
//@{
- virtual bool voiceEnabled();
- virtual void setVoiceEnabled(bool enabled);
- virtual BOOL lipSyncEnabled();
- virtual void setLipSyncEnabled(BOOL enabled);
- virtual void setMuteMic(bool muted); // Set the mute state of the local mic.
+ virtual bool voiceEnabled() override;
+ virtual void setVoiceEnabled(bool enabled) override;
+ virtual BOOL lipSyncEnabled() override;
+ virtual void setLipSyncEnabled(BOOL enabled) override;
+ virtual void setMuteMic(bool muted) override; // Set the mute state of the local mic.
//@}
//////////////////////////
/// @name nearby speaker accessors
//@{
- virtual BOOL getVoiceEnabled(const LLUUID& id); // true if we've received data for this avatar
- virtual std::string getDisplayName(const LLUUID& id);
- virtual BOOL isParticipantAvatar(const LLUUID &id);
- virtual BOOL getIsSpeaking(const LLUUID& id);
- virtual BOOL getIsModeratorMuted(const LLUUID& id);
- virtual F32 getCurrentPower(const LLUUID& id); // "power" is related to "amplitude" in a defined way. I'm just not sure what the formula is...
- virtual BOOL getOnMuteList(const LLUUID& id);
- virtual F32 getUserVolume(const LLUUID& id);
- virtual void setUserVolume(const LLUUID& id, F32 volume); // set's volume for specified agent, from 0-1 (where .5 is nominal)
+ virtual BOOL getVoiceEnabled(const LLUUID& id) override; // true if we've received data for this avatar
+ virtual std::string getDisplayName(const LLUUID& id) override;
+ virtual BOOL isParticipantAvatar(const LLUUID &id) override;
+ virtual BOOL getIsSpeaking(const LLUUID& id) override;
+ virtual BOOL getIsModeratorMuted(const LLUUID& id) override;
+ virtual F32 getCurrentPower(const LLUUID& id) override; // "power" is related to "amplitude" in a defined way. I'm just not sure what the formula is...
+ virtual BOOL getOnMuteList(const LLUUID& id) override;
+ virtual F32 getUserVolume(const LLUUID& id) override;
+ virtual void setUserVolume(const LLUUID& id, F32 volume) override; // set's volume for specified agent, from 0-1 (where .5 is nominal)
//@}
// authorize the user
virtual void userAuthorized(const std::string& user_id,
- const LLUUID &agentID);
+ const LLUUID &agentID) override;
//////////////////////////////
/// @name Status notification
//@{
- virtual void addObserver(LLVoiceClientStatusObserver* observer);
- virtual void removeObserver(LLVoiceClientStatusObserver* observer);
- virtual void addObserver(LLFriendObserver* observer);
- virtual void removeObserver(LLFriendObserver* observer);
- virtual void addObserver(LLVoiceClientParticipantObserver* observer);
- virtual void removeObserver(LLVoiceClientParticipantObserver* observer);
+ virtual void addObserver(LLVoiceClientStatusObserver* observer) override;
+ virtual void removeObserver(LLVoiceClientStatusObserver* observer) override;
+ virtual void addObserver(LLFriendObserver* observer) override;
+ virtual void removeObserver(LLFriendObserver* observer) override;
+ virtual void addObserver(LLVoiceClientParticipantObserver* observer) override;
+ virtual void removeObserver(LLVoiceClientParticipantObserver* observer) override;
//@}
- virtual std::string sipURIFromID(const LLUUID &id);
+ virtual std::string sipURIFromID(const LLUUID &id) override;
//@}
/// @name LLVoiceEffectInterface virtual implementations
@@ -216,32 +216,32 @@ public:
//////////////////////////
/// @name Accessors
//@{
- virtual bool setVoiceEffect(const LLUUID& id);
- virtual const LLUUID getVoiceEffect();
- virtual LLSD getVoiceEffectProperties(const LLUUID& id);
+ virtual bool setVoiceEffect(const LLUUID& id) override;
+ virtual const LLUUID getVoiceEffect() override;
+ virtual LLSD getVoiceEffectProperties(const LLUUID& id) override;
- virtual void refreshVoiceEffectLists(bool clear_lists);
- virtual const voice_effect_list_t& getVoiceEffectList() const;
- virtual const voice_effect_list_t& getVoiceEffectTemplateList() const;
+ virtual void refreshVoiceEffectLists(bool clear_lists) override;
+ virtual const voice_effect_list_t& getVoiceEffectList() const override;
+ virtual const voice_effect_list_t& getVoiceEffectTemplateList() const override;
//@}
//////////////////////////////
/// @name Status notification
//@{
- virtual void addObserver(LLVoiceEffectObserver* observer);
- virtual void removeObserver(LLVoiceEffectObserver* observer);
+ virtual void addObserver(LLVoiceEffectObserver* observer) override;
+ virtual void removeObserver(LLVoiceEffectObserver* observer) override;
//@}
//////////////////////////////
/// @name Effect preview buffer
//@{
- virtual void enablePreviewBuffer(bool enable);
- virtual void recordPreviewBuffer();
- virtual void playPreviewBuffer(const LLUUID& effect_id = LLUUID::null);
- virtual void stopPreviewBuffer();
+ virtual void enablePreviewBuffer(bool enable) override;
+ virtual void recordPreviewBuffer() override;
+ virtual void playPreviewBuffer(const LLUUID& effect_id = LLUUID::null) override;
+ virtual void stopPreviewBuffer() override;
- virtual bool isPreviewRecording();
- virtual bool isPreviewPlaying();
+ virtual bool isPreviewRecording() override;
+ virtual bool isPreviewPlaying() override;
//@}
//@}
@@ -752,7 +752,7 @@ private:
std::string getAudioSessionURI();
std::string getAudioSessionHandle();
- void setHidden(bool hidden); //virtual
+ void setHidden(bool hidden) override; //virtual
void sendPositionAndVolumeUpdate(void);
void sendCaptureAndRenderDevices();
diff --git a/indra/newview/llwearableitemslist.h b/indra/newview/llwearableitemslist.h
index f7774a7086..0dbe50d5e4 100644
--- a/indra/newview/llwearableitemslist.h
+++ b/indra/newview/llwearableitemslist.h
@@ -428,7 +428,7 @@ public:
{
LLSINGLETON(ContextMenu);
public:
- /*virtual*/ void show(LLView* spawning_view, const uuid_vec_t& uuids, S32 x, S32 y);
+ /*virtual*/ void show(LLView* spawning_view, const uuid_vec_t& uuids, S32 x, S32 y) override;
void show(LLView* spawning_view, LLWearableType::EType w_type, S32 x, S32 y);
@@ -441,7 +441,7 @@ public:
MASK_UNKNOWN = 0x10,
};
- /* virtual */ LLContextMenu* createMenu();
+ /* virtual */ LLContextMenu* createMenu() override;
void updateItemsVisibility(LLContextMenu* menu);
void updateItemsLabels(LLContextMenu* menu);
static void setMenuItemVisible(LLContextMenu* menu, const std::string& name, bool val);
@@ -472,7 +472,7 @@ public:
virtual ~LLWearableItemsList();
- /*virtual*/ LLPanel* createNewItem(LLViewerInventoryItem* item);
+ /*virtual*/ LLPanel* createNewItem(LLViewerInventoryItem* item) override;
void updateList(const LLUUID& category_id);
diff --git a/indra/newview/llwindebug.h b/indra/newview/llwindebug.h
index 524adba652..31dbfb8ffd 100644
--- a/indra/newview/llwindebug.h
+++ b/indra/newview/llwindebug.h
@@ -40,9 +40,9 @@ class LLWinDebug:
{
LLSINGLETON_EMPTY_CTOR(LLWinDebug);
public:
- void initSingleton();
+ void initSingleton() override;
static void generateMinidump(struct _EXCEPTION_POINTERS *pExceptionInfo = NULL);
- void cleanupSingleton();
+ void cleanupSingleton() override;
private:
static void writeDumpToFile(MINIDUMP_TYPE type, MINIDUMP_EXCEPTION_INFORMATION *ExInfop, const std::string& filename);
};
diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp
index 6e994b4e68..67632cdbf7 100755
--- a/indra/newview/llworldmapview.cpp
+++ b/indra/newview/llworldmapview.cpp
@@ -551,7 +551,8 @@ void LLWorldMapView::draw()
S32_MAX, //max_chars
mMapScale, //max_pixels
NULL,
- TRUE); //use ellipses
+ /*use_ellipses*/TRUE,
+ /*use_color*/FALSE);
}
}
}
diff --git a/indra/newview/skins/default/xui/en/emoji_characters.xml b/indra/newview/skins/default/xui/en/emoji_characters.xml
new file mode 100644
index 0000000000..55aefe6745
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/emoji_characters.xml
@@ -0,0 +1,10955 @@
+<?xml version="1.0" ?>
+<llsd xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="llsd.xsd">
+ <array>
+ <map>
+ <key>Character</key>
+ <string>😀</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:grinning:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Smiling</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😄</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:smile:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Smiling</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😆</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:laughing:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Smiling</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤣</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:rofl:</string>
+ <string>:satisfied:</string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Smiling</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🙂</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:slightly_smiling_face:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Smiling</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😉</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:wink:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Smiling</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😇</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:innocent:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Smiling</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😃</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:smiley:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Smiling</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😁</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:grin:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Smiling</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😅</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:sweat_smile:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Smiling</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😂</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:joy:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Smiling</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🙃</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:upside_down_face:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Smiling</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😊</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:blush:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Smiling</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🥰</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:smiling_face_with_three_hearts:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Affection</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤩</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:star_struck:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Affection</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😗</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:kissing:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Affection</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😚</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:kissing_closed_eyes:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Affection</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🥲</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:smiling_face_with_tear:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Affection</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😍</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:heart_eyes:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Affection</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😘</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:kissing_heart:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Affection</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>☺️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:relaxed:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Affection</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😙</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:kissing_smiling_eyes:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Affection</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😋</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:yum:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Tongue</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😜</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:stuck_out_tongue_winking_eye:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Tongue</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😝</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:stuck_out_tongue_closed_eyes:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Tongue</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😛</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:stuck_out_tongue:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Tongue</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤪</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:zany_face:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Tongue</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤑</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:money_mouth_face:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Tongue</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤗</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:hugs:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Hand</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤫</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:shushing_face:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Hand</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤭</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:hand_over_mouth:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Hand</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤔</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:thinking:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Hand</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤐</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:zipper_mouth_face:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Neutral Skeptical</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😐</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:neutral_face:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Neutral Skeptical</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😶</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:no_mouth:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Neutral Skeptical</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😏</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:smirk:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Neutral Skeptical</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🙄</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:roll_eyes:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Neutral Skeptical</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😮‍💨</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:face_exhaling:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Neutral Skeptical</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤨</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:raised_eyebrow:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Neutral Skeptical</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😑</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:expressionless:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Neutral Skeptical</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😶‍🌫️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:face_in_clouds:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Neutral Skeptical</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😒</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:unamused:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Neutral Skeptical</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😬</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:grimacing:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Neutral Skeptical</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤥</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:lying_face:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Neutral Skeptical</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😌</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:relieved:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Sleepy</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😪</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:sleepy:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Sleepy</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😴</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:sleeping:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Sleepy</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😔</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:pensive:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Sleepy</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤤</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:drooling_face:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Sleepy</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😷</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:mask:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Unwell</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤕</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:face_with_head_bandage:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Unwell</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤮</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:vomiting_face:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Unwell</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🥵</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:hot_face:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Unwell</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🥴</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:woozy_face:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Unwell</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😵‍💫</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:face_with_spiral_eyes:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Unwell</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤒</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:face_with_thermometer:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Unwell</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤢</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:nauseated_face:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Unwell</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤧</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:sneezing_face:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Unwell</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🥶</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:cold_face:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Unwell</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😵</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:dizzy_face:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Unwell</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤯</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:exploding_head:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Unwell</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤠</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:cowboy_hat_face:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Hat</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🥸</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:disguised_face:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Hat</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🥳</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:partying_face:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Hat</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😎</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:sunglasses:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Glasses</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧐</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:monocle_face:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Glasses</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤓</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:nerd_face:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Glasses</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😕</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:confused:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Concerned</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🙁</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:slightly_frowning_face:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Concerned</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😮</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:open_mouth:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Concerned</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😲</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:astonished:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Concerned</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🥺</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:pleading_face:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Concerned</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😧</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:anguished:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Concerned</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😰</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:cold_sweat:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Concerned</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😢</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:cry:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Concerned</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😱</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:scream:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Concerned</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😣</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:persevere:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Concerned</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😓</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:sweat:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Concerned</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😫</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:tired_face:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Concerned</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😟</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:worried:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Concerned</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>☹️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:frowning_face:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Concerned</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😯</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:hushed:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Concerned</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😳</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:flushed:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Concerned</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😦</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:frowning:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Concerned</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😨</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:fearful:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Concerned</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😥</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:disappointed_relieved:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Concerned</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😭</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:sob:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Concerned</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😖</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:confounded:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Concerned</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😞</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:disappointed:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Concerned</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😩</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:weary:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Concerned</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🥱</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:yawning_face:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Concerned</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😤</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:triumph:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Negative</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😠</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:angry:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Negative</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😈</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:smiling_imp:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Negative</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>💀</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:skull:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Negative</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😡</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:pout:</string>
+ <string>:rage:</string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Negative</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤬</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:cursing_face:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Negative</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👿</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:imp:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Negative</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>☠️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:skull_and_crossbones:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Negative</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>💩</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:hankey:</string>
+ <string>:poop:</string>
+ <string>:shit:</string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Costume</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👹</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:japanese_ogre:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Costume</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👻</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:ghost:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Costume</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👾</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:space_invader:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Costume</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤡</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:clown_face:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Costume</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👺</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:japanese_goblin:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Costume</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👽</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:alien:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Costume</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤖</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:robot:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Face Costume</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😺</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:smiley_cat:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Cat Face</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😹</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:joy_cat:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Cat Face</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😼</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:smirk_cat:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Cat Face</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🙀</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:scream_cat:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Cat Face</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😾</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:pouting_cat:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Cat Face</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😸</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:smile_cat:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Cat Face</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😻</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:heart_eyes_cat:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Cat Face</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😽</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:kissing_cat:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Cat Face</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>😿</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:crying_cat_face:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Cat Face</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🙈</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:see_no_evil:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Monkey Face</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🙊</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:speak_no_evil:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Monkey Face</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🙉</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:hear_no_evil:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Smiley</string>
+ <string>Monkey Face</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>💋</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:kiss:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Emotion</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>💘</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:cupid:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Emotion</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>💖</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:sparkling_heart:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Emotion</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>💓</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:heartbeat:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Emotion</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>💕</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:two_hearts:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Emotion</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>❣️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:heavy_heart_exclamation:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Emotion</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>❤️‍🔥</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:heart_on_fire:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Emotion</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>❤️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:heart:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Emotion</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>💛</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:yellow_heart:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Emotion</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>💙</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:blue_heart:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Emotion</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤎</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:brown_heart:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Emotion</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤍</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:white_heart:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Emotion</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>💢</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:anger:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Emotion</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>💫</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:dizzy:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Emotion</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>💨</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:dash:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Emotion</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>💣</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:bomb:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Emotion</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👁️‍🗨️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:eye_speech_bubble:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Emotion</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🗯️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:right_anger_bubble:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Emotion</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>💤</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:zzz:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Emotion</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>💌</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:love_letter:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Emotion</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>💝</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:gift_heart:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Emotion</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>💗</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:heartpulse:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Emotion</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>💞</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:revolving_hearts:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Emotion</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>💟</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:heart_decoration:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Emotion</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>💔</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:broken_heart:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Emotion</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>❤️‍🩹</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:mending_heart:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Emotion</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧡</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:orange_heart:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Emotion</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>💚</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:green_heart:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Emotion</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>💜</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:purple_heart:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Emotion</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🖤</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:black_heart:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Emotion</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>💯</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:100:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Emotion</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>💥</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:boom:</string>
+ <string>:collision:</string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Emotion</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>💦</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:sweat_drops:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Emotion</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🕳️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:hole:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Emotion</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>💬</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:speech_balloon:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Emotion</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🗨️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:left_speech_bubble:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Emotion</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>💭</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:thought_balloon:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Emotion</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👋</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:wave:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Body</string>
+ <string>Hand Fingers Open</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🖐️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:raised_hand_with_fingers_splayed:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Body</string>
+ <string>Hand Fingers Open</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🖖</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:vulcan_salute:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Body</string>
+ <string>Hand Fingers Open</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤚</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:raised_back_of_hand:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Body</string>
+ <string>Hand Fingers Open</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>✋</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:hand:</string>
+ <string>:raised_hand:</string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Body</string>
+ <string>Hand Fingers Open</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👌</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:ok_hand:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Body</string>
+ <string>Hand Fingers Partial</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤏</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:pinching_hand:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Body</string>
+ <string>Hand Fingers Partial</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤞</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:crossed_fingers:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Body</string>
+ <string>Hand Fingers Partial</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤘</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:metal:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Body</string>
+ <string>Hand Fingers Partial</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤌</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:pinched_fingers:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Body</string>
+ <string>Hand Fingers Partial</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>✌️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:v:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Body</string>
+ <string>Hand Fingers Partial</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤟</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:love_you_gesture:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Body</string>
+ <string>Hand Fingers Partial</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤙</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:call_me_hand:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Body</string>
+ <string>Hand Fingers Partial</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👈</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:point_left:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Body</string>
+ <string>Hand Single Finger</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👆</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:point_up_2:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Body</string>
+ <string>Hand Single Finger</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👇</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:point_down:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Body</string>
+ <string>Hand Single Finger</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👉</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:point_right:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Body</string>
+ <string>Hand Single Finger</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🖕</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:fu:</string>
+ <string>:middle_finger:</string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Body</string>
+ <string>Hand Single Finger</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>☝️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:point_up:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Body</string>
+ <string>Hand Single Finger</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👍</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:+1:</string>
+ <string>:thumbsup:</string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Body</string>
+ <string>Hand Fingers Closed</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>✊</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:fist:</string>
+ <string>:fist_raised:</string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Body</string>
+ <string>Hand Fingers Closed</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤛</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:fist_left:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Body</string>
+ <string>Hand Fingers Closed</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👎</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:-1:</string>
+ <string>:thumbsdown:</string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Body</string>
+ <string>Hand Fingers Closed</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👊</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:facepunch:</string>
+ <string>:fist_oncoming:</string>
+ <string>:punch:</string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Body</string>
+ <string>Hand Fingers Closed</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤜</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:fist_right:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Body</string>
+ <string>Hand Fingers Closed</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👏</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:clap:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Body</string>
+ <string>Hands</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👐</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:open_hands:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Body</string>
+ <string>Hands</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤝</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:handshake:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Body</string>
+ <string>Hands</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🙌</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:raised_hands:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Body</string>
+ <string>Hands</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤲</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:palms_up_together:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Body</string>
+ <string>Hands</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🙏</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:pray:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Body</string>
+ <string>Hands</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>✍️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:writing_hand:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Body</string>
+ <string>Hand Prop</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤳</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:selfie:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Body</string>
+ <string>Hand Prop</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>💅</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:nail_care:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Body</string>
+ <string>Hand Prop</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>💪</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:muscle:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Body</string>
+ <string>Body Parts</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦿</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:mechanical_leg:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Body</string>
+ <string>Body Parts</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦶</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:foot:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Body</string>
+ <string>Body Parts</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦻</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:ear_with_hearing_aid:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Body</string>
+ <string>Body Parts</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧠</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:brain:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Body</string>
+ <string>Body Parts</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🫁</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:lungs:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Body</string>
+ <string>Body Parts</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦴</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:bone:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Body</string>
+ <string>Body Parts</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👁️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:eye:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Body</string>
+ <string>Body Parts</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👄</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:lips:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Body</string>
+ <string>Body Parts</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦾</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:mechanical_arm:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Body</string>
+ <string>Body Parts</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦵</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:leg:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Body</string>
+ <string>Body Parts</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👂</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:ear:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Body</string>
+ <string>Body Parts</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👃</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:nose:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Body</string>
+ <string>Body Parts</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🫀</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:anatomical_heart:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Body</string>
+ <string>Body Parts</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦷</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:tooth:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Body</string>
+ <string>Body Parts</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👀</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:eyes:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Body</string>
+ <string>Body Parts</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👅</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:tongue:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Body</string>
+ <string>Body Parts</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👶</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:baby:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👦</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:boy:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧑</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:adult:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👨</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:man:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧔‍♂️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:man_beard:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👨‍🦰</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:red_haired_man:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👨‍🦳</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:white_haired_man:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👩</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:woman:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧑‍🦰</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:person_red_hair:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧑‍🦱</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:person_curly_hair:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧑‍🦳</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:person_white_hair:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧑‍🦲</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:person_bald:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👱‍♂️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:blond_haired_man:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👴</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:older_man:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧒</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:child:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👧</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:girl:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👱</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:blond_haired_person:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧔</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:bearded_person:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧔‍♀️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:woman_beard:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👨‍🦱</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:curly_haired_man:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👨‍🦲</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:bald_man:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👩‍🦰</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:red_haired_woman:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👩‍🦱</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:curly_haired_woman:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👩‍🦳</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:white_haired_woman:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👩‍🦲</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:bald_woman:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👱‍♀️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:blond_haired_woman:</string>
+ <string>:blonde_woman:</string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧓</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:older_adult:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👵</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:older_woman:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🙍</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:frowning_person:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Gesture</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🙍‍♀️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:frowning_woman:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Gesture</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🙎‍♂️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:pouting_man:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Gesture</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🙅</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:no_good:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Gesture</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🙅‍♀️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:ng_woman:</string>
+ <string>:no_good_woman:</string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Gesture</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🙆‍♂️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:ok_man:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Gesture</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>💁</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:information_desk_person:</string>
+ <string>:tipping_hand_person:</string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Gesture</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>💁‍♀️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:sassy_woman:</string>
+ <string>:tipping_hand_woman:</string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Gesture</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🙋‍♂️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:raising_hand_man:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Gesture</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧏</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:deaf_person:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Gesture</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧏‍♀️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:deaf_woman:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Gesture</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🙇‍♂️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:bowing_man:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Gesture</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤦</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:facepalm:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Gesture</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤦‍♀️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:woman_facepalming:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Gesture</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤷‍♂️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:man_shrugging:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Gesture</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🙍‍♂️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:frowning_man:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Gesture</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🙎</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:pouting_face:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Gesture</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🙎‍♀️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:pouting_woman:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Gesture</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🙅‍♂️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:ng_man:</string>
+ <string>:no_good_man:</string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Gesture</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🙆</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:ok_person:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Gesture</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🙆‍♀️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:ok_woman:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Gesture</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>💁‍♂️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:sassy_man:</string>
+ <string>:tipping_hand_man:</string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Gesture</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🙋</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:raising_hand:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Gesture</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🙋‍♀️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:raising_hand_woman:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Gesture</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧏‍♂️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:deaf_man:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Gesture</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🙇</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:bow:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Gesture</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🙇‍♀️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:bowing_woman:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Gesture</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤦‍♂️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:man_facepalming:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Gesture</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤷</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:shrug:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Gesture</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤷‍♀️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:woman_shrugging:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Gesture</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧑‍⚕️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:health_worker:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👩‍⚕️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:woman_health_worker:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👨‍🎓</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:man_student:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧑‍🏫</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:teacher:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👩‍🏫</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:woman_teacher:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👨‍⚖️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:man_judge:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧑‍🌾</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:farmer:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👩‍🌾</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:woman_farmer:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👨‍🍳</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:man_cook:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧑‍🔧</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:mechanic:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👩‍🔧</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:woman_mechanic:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👨‍🏭</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:man_factory_worker:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧑‍💼</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:office_worker:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👩‍💼</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:woman_office_worker:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👨‍🔬</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:man_scientist:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧑‍💻</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:technologist:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👩‍💻</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:woman_technologist:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👨‍🎤</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:man_singer:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧑‍🎨</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:artist:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👩‍🎨</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:woman_artist:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👨‍✈️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:man_pilot:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧑‍🚀</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:astronaut:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👩‍🚀</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:woman_astronaut:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👨‍🚒</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:man_firefighter:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👮</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:cop:</string>
+ <string>:police_officer:</string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👮‍♀️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:policewoman:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🕵️‍♂️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:male_detective:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>💂</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:guard:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>💂‍♀️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:guardswoman:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👷</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:construction_worker:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👷‍♀️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:construction_worker_woman:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👸</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:princess:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👳‍♂️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:man_with_turban:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👲</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:man_with_gua_pi_mao:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤵</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:person_in_tuxedo:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤵‍♀️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:woman_in_tuxedo:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👰‍♂️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:man_with_veil:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤰</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:pregnant_woman:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👩‍🍼</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:woman_feeding_baby:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧑‍🍼</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:person_feeding_baby:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👨‍⚕️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:man_health_worker:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧑‍🎓</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:student:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👩‍🎓</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:woman_student:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👨‍🏫</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:man_teacher:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧑‍⚖️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:judge:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👩‍⚖️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:woman_judge:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👨‍🌾</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:man_farmer:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧑‍🍳</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:cook:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👩‍🍳</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:woman_cook:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👨‍🔧</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:man_mechanic:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧑‍🏭</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:factory_worker:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👩‍🏭</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:woman_factory_worker:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👨‍💼</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:man_office_worker:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧑‍🔬</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:scientist:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👩‍🔬</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:woman_scientist:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👨‍💻</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:man_technologist:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧑‍🎤</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:singer:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👩‍🎤</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:woman_singer:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👨‍🎨</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:man_artist:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧑‍✈️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:pilot:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👩‍✈️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:woman_pilot:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👨‍🚀</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:man_astronaut:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧑‍🚒</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:firefighter:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👩‍🚒</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:woman_firefighter:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👮‍♂️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:policeman:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🕵️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:detective:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🕵️‍♀️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:female_detective:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>💂‍♂️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:guardsman:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🥷</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:ninja:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👷‍♂️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:construction_worker_man:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤴</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:prince:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👳</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:person_with_turban:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👳‍♀️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:woman_with_turban:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧕</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:woman_with_headscarf:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤵‍♂️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:man_in_tuxedo:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👰</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:person_with_veil:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👰‍♀️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:bride_with_veil:</string>
+ <string>:woman_with_veil:</string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤱</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:breast_feeding:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👨‍🍼</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:man_feeding_baby:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Role</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👼</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:angel:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Fantasy</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤶</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:mrs_claus:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Fantasy</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦸</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:superhero:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Fantasy</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦸‍♀️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:superhero_woman:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Fantasy</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦹‍♂️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:supervillain_man:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Fantasy</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧙</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:mage:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Fantasy</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧙‍♀️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:mage_woman:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Fantasy</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧚‍♂️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:fairy_man:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Fantasy</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧛</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:vampire:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Fantasy</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧛‍♀️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:vampire_woman:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Fantasy</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧜‍♂️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:merman:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Fantasy</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧝</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:elf:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Fantasy</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧝‍♀️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:elf_woman:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Fantasy</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧞‍♂️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:genie_man:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Fantasy</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧟</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:zombie:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Fantasy</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧟‍♀️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:zombie_woman:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Fantasy</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🎅</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:santa:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Fantasy</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧑‍🎄</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:mx_claus:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Fantasy</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦸‍♂️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:superhero_man:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Fantasy</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦹</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:supervillain:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Fantasy</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦹‍♀️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:supervillain_woman:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Fantasy</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧙‍♂️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:mage_man:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Fantasy</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧚</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:fairy:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Fantasy</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧚‍♀️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:fairy_woman:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Fantasy</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧛‍♂️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:vampire_man:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Fantasy</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧜</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:merperson:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Fantasy</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧜‍♀️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:mermaid:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Fantasy</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧝‍♂️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:elf_man:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Fantasy</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧞</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:genie:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Fantasy</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧞‍♀️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:genie_woman:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Fantasy</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧟‍♂️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:zombie_man:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Fantasy</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>💆</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:massage:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Activity</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>💆‍♀️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:massage_woman:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Activity</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>💇‍♂️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:haircut_man:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Activity</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🚶</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:walking:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Activity</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🚶‍♀️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:walking_woman:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Activity</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧍‍♂️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:standing_man:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Activity</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧎</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:kneeling_person:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Activity</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧎‍♀️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:kneeling_woman:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Activity</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👨‍🦯</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:man_with_probing_cane:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Activity</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧑‍🦼</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:person_in_motorized_wheelchair:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Activity</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👩‍🦼</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:woman_in_motorized_wheelchair:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Activity</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👨‍🦽</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:man_in_manual_wheelchair:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Activity</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🏃</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:runner:</string>
+ <string>:running:</string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Activity</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🏃‍♀️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:running_woman:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Activity</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🕺</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:man_dancing:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Activity</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👯</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:dancers:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Activity</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👯‍♀️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:dancing_women:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Activity</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧖‍♂️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:sauna_man:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Activity</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧗</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:climbing:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Activity</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧗‍♀️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:climbing_woman:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Activity</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>💆‍♂️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:massage_man:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Activity</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>💇</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:haircut:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Activity</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>💇‍♀️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:haircut_woman:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Activity</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🚶‍♂️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:walking_man:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Activity</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧍</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:standing_person:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Activity</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧍‍♀️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:standing_woman:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Activity</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧎‍♂️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:kneeling_man:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Activity</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧑‍🦯</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:person_with_probing_cane:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Activity</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👩‍🦯</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:woman_with_probing_cane:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Activity</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👨‍🦼</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:man_in_motorized_wheelchair:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Activity</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧑‍🦽</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:person_in_manual_wheelchair:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Activity</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👩‍🦽</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:woman_in_manual_wheelchair:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Activity</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🏃‍♂️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:running_man:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Activity</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>💃</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:dancer:</string>
+ <string>:woman_dancing:</string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Activity</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🕴️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:business_suit_levitating:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Activity</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👯‍♂️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:dancing_men:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Activity</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧖</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:sauna_person:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Activity</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧖‍♀️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:sauna_woman:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Activity</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧗‍♂️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:climbing_man:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Activity</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤺</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:person_fencing:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Sport</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>⛷️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:skier:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Sport</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🏌️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:golfing:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Sport</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🏌️‍♀️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:golfing_woman:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Sport</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🏄‍♂️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:surfing_man:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Sport</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🚣</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:rowboat:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Sport</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🚣‍♀️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:rowing_woman:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Sport</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🏊‍♂️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:swimming_man:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Sport</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>⛹️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:bouncing_ball_person:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Sport</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>⛹️‍♀️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:basketball_woman:</string>
+ <string>:bouncing_ball_woman:</string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Sport</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🏋️‍♂️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:weight_lifting_man:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Sport</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🚴</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:bicyclist:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Sport</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🚴‍♀️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:biking_woman:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Sport</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🚵‍♂️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:mountain_biking_man:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Sport</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤸</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:cartwheeling:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Sport</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤸‍♀️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:woman_cartwheeling:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Sport</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤼‍♂️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:men_wrestling:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Sport</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤽</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:water_polo:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Sport</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤽‍♀️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:woman_playing_water_polo:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Sport</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤾‍♂️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:man_playing_handball:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Sport</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤹</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:juggling_person:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Sport</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤹‍♀️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:woman_juggling:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Sport</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🏇</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:horse_racing:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Sport</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🏂</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:snowboarder:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Sport</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🏌️‍♂️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:golfing_man:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Sport</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🏄</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:surfer:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Sport</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🏄‍♀️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:surfing_woman:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Sport</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🚣‍♂️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:rowing_man:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Sport</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🏊</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:swimmer:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Sport</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🏊‍♀️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:swimming_woman:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Sport</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>⛹️‍♂️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:basketball_man:</string>
+ <string>:bouncing_ball_man:</string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Sport</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🏋️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:weight_lifting:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Sport</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🏋️‍♀️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:weight_lifting_woman:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Sport</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🚴‍♂️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:biking_man:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Sport</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🚵</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:mountain_bicyclist:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Sport</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🚵‍♀️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:mountain_biking_woman:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Sport</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤸‍♂️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:man_cartwheeling:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Sport</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤼</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:wrestling:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Sport</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤼‍♀️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:women_wrestling:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Sport</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤽‍♂️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:man_playing_water_polo:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Sport</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤾</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:handball_person:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Sport</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤾‍♀️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:woman_playing_handball:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Sport</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🤹‍♂️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:man_juggling:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Sport</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧘</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:lotus_position:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Resting</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧘‍♀️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:lotus_position_woman:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Resting</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🛌</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:sleeping_bed:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Resting</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧘‍♂️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:lotus_position_man:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Resting</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🛀</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:bath:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Resting</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧑‍🤝‍🧑</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:people_holding_hands:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string>Family</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👫</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:couple:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string>Family</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>💏</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:couplekiss:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string>Family</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👨‍❤️‍💋‍👨</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:couplekiss_man_man:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string>Family</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>💑</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:couple_with_heart:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string>Family</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👨‍❤️‍👨</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:couple_with_heart_man_man:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string>Family</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👪</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:family:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string>Family</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👨‍👩‍👧</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:family_man_woman_girl:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string>Family</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👨‍👩‍👦‍👦</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:family_man_woman_boy_boy:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string>Family</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👨‍👨‍👦</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:family_man_man_boy:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string>Family</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👨‍👨‍👧‍👦</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:family_man_man_girl_boy:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string>Family</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👨‍👨‍👧‍👧</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:family_man_man_girl_girl:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string>Family</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👩‍👩‍👧</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:family_woman_woman_girl:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string>Family</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👩‍👩‍👦‍👦</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:family_woman_woman_boy_boy:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string>Family</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👨‍👦</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:family_man_boy:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string>Family</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👨‍👧</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:family_man_girl:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string>Family</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👨‍👧‍👧</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:family_man_girl_girl:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string>Family</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👩‍👦‍👦</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:family_woman_boy_boy:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string>Family</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👩‍👧‍👦</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:family_woman_girl_boy:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string>Family</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👭</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:two_women_holding_hands:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string>Family</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👬</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:two_men_holding_hands:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string>Family</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👩‍❤️‍💋‍👨</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:couplekiss_man_woman:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string>Family</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👩‍❤️‍💋‍👩</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:couplekiss_woman_woman:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string>Family</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👩‍❤️‍👨</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:couple_with_heart_woman_man:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string>Family</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👩‍❤️‍👩</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:couple_with_heart_woman_woman:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string>Family</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👨‍👩‍👦</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:family_man_woman_boy:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string>Family</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👨‍👩‍👧‍👦</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:family_man_woman_girl_boy:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string>Family</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👨‍👩‍👧‍👧</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:family_man_woman_girl_girl:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string>Family</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👨‍👨‍👧</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:family_man_man_girl:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string>Family</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👨‍👨‍👦‍👦</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:family_man_man_boy_boy:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string>Family</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👩‍👩‍👦</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:family_woman_woman_boy:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string>Family</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👩‍👩‍👧‍👦</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:family_woman_woman_girl_boy:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string>Family</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👩‍👩‍👧‍👧</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:family_woman_woman_girl_girl:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string>Family</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👨‍👦‍👦</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:family_man_boy_boy:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string>Family</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👨‍👧‍👦</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:family_man_girl_boy:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string>Family</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👩‍👦</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:family_woman_boy:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string>Family</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👩‍👧</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:family_woman_girl:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string>Family</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👩‍👧‍👧</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:family_woman_girl_girl:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person</string>
+ <string>Family</string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🗣️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:speaking_head:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Symbol</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👥</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:busts_in_silhouette:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Symbol</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👣</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:footprints:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Symbol</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>👤</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:bust_in_silhouette:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Symbol</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🫂</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:people_hugging:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Person Symbol</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐵</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:monkey_face:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦍</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:gorilla:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐶</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:dog:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦮</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:guide_dog:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐩</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:poodle:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦊</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:fox_face:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐱</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:cat:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐈‍⬛</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:black_cat:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐯</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:tiger:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐆</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:leopard:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐎</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:racehorse:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦓</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:zebra:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦬</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:bison:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐂</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:ox:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐄</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:cow2:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐖</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:pig2:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐽</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:pig_nose:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐑</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:sheep:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐪</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:dromedary_camel:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦙</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:llama:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐘</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:elephant:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦏</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:rhinoceros:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐭</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:mouse:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐀</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:rat:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐰</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:rabbit:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐿️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:chipmunk:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦔</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:hedgehog:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐻</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:bear:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐨</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:koala:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦥</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:sloth:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦨</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:skunk:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦡</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:badger:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐒</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:monkey:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦧</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:orangutan:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐕</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:dog2:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐕‍🦺</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:service_dog:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐺</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:wolf:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦝</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:raccoon:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐈</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:cat2:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦁</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:lion:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐅</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:tiger2:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐴</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:horse:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦄</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:unicorn:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦌</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:deer:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐮</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:cow:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐃</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:water_buffalo:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐷</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:pig:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐗</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:boar:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐏</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:ram:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐐</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:goat:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐫</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:camel:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦒</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:giraffe:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦣</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:mammoth:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦛</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:hippopotamus:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐁</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:mouse2:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐹</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:hamster:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐇</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:rabbit2:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦫</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:beaver:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦇</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:bat:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐻‍❄️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:polar_bear:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐼</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:panda_face:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦦</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:otter:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦘</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:kangaroo:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐾</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:feet:</string>
+ <string>:paw_prints:</string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Mammal</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦃</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:turkey:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Bird</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐓</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:rooster:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Bird</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐤</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:baby_chick:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Bird</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐦</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:bird:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Bird</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🕊️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:dove:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Bird</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦆</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:duck:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Bird</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦉</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:owl:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Bird</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🪶</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:feather:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Bird</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦚</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:peacock:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Bird</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐔</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:chicken:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Bird</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐣</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:hatching_chick:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Bird</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐥</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:hatched_chick:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Bird</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐧</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:penguin:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Bird</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦅</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:eagle:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Bird</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦢</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:swan:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Bird</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦤</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:dodo:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Bird</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦩</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:flamingo:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Bird</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦜</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:parrot:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Bird</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐸</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:frog:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Amphibian</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐊</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:crocodile:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Reptile</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦎</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:lizard:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Reptile</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐲</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:dragon_face:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Reptile</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦕</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:sauropod:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Reptile</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐢</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:turtle:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Reptile</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐍</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:snake:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Reptile</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐉</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:dragon:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Reptile</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦖</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:t-rex:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Reptile</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐳</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:whale:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Marine</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐬</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:dolphin:</string>
+ <string>:flipper:</string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Marine</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐟</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:fish:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Marine</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐡</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:blowfish:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Marine</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐙</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:octopus:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Marine</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐋</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:whale2:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Marine</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦭</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:seal:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Marine</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐠</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:tropical_fish:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Marine</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦈</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:shark:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Marine</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐚</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:shell:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Marine</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐌</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:snail:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Bug</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐛</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:bug:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Bug</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐝</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:bee:</string>
+ <string>:honeybee:</string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Bug</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐞</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:lady_beetle:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Bug</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🪳</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:cockroach:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Bug</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🕸️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:spider_web:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Bug</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦟</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:mosquito:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Bug</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🪱</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:worm:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Bug</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦋</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:butterfly:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Bug</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🐜</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:ant:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Bug</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🪲</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:beetle:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Bug</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦗</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:cricket:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Bug</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🕷️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:spider:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Bug</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦂</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:scorpion:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Bug</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🪰</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:fly:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Bug</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🦠</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:microbe:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Animal Bug</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>💐</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:bouquet:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Plant Flower</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>💮</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:white_flower:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Plant Flower</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🌹</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:rose:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Plant Flower</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🌺</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:hibiscus:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Plant Flower</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🌼</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:blossom:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Plant Flower</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🌸</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:cherry_blossom:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Plant Flower</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🏵️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:rosette:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Plant Flower</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🥀</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:wilted_flower:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Plant Flower</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🌻</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:sunflower:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Plant Flower</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🌷</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:tulip:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Plant Flower</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🌱</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:seedling:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Plant Other</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🌲</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:evergreen_tree:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Plant Other</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🌴</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:palm_tree:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Plant Other</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🌾</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:ear_of_rice:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Plant Other</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>☘️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:shamrock:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Plant Other</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🍁</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:maple_leaf:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Plant Other</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🍃</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:leaves:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Plant Other</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🪴</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:potted_plant:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Plant Other</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🌳</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:deciduous_tree:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Plant Other</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🌵</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:cactus:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Plant Other</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🌿</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:herb:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Plant Other</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🍀</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:four_leaf_clover:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Plant Other</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🍂</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:fallen_leaf:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Plant Other</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🍇</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:grapes:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Fruit</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🍉</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:watermelon:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Fruit</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🍋</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:lemon:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Fruit</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🍍</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:pineapple:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Fruit</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🍎</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:apple:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Fruit</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🍐</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:pear:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Fruit</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🍒</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:cherries:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Fruit</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🫐</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:blueberries:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Fruit</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🍅</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:tomato:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Fruit</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🥥</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:coconut:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Fruit</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🍈</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:melon:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Fruit</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🍊</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:mandarin:</string>
+ <string>:orange:</string>
+ <string>:tangerine:</string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Fruit</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🍌</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:banana:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Fruit</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🥭</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:mango:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Fruit</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🍏</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:green_apple:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Fruit</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🍑</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:peach:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Fruit</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🍓</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:strawberry:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Fruit</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🥝</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:kiwi_fruit:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Fruit</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🫒</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:olive:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Fruit</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🥑</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:avocado:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Vegetable</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🥔</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:potato:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Vegetable</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🌽</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:corn:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Vegetable</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🫑</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:bell_pepper:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Vegetable</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🥬</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:leafy_green:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Vegetable</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧄</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:garlic:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Vegetable</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🍄</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:mushroom:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Vegetable</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🌰</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:chestnut:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Vegetable</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🍆</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:eggplant:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Vegetable</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🥕</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:carrot:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Vegetable</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🌶️</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:hot_pepper:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Vegetable</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🥒</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:cucumber:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Vegetable</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🥦</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:broccoli:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Vegetable</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧅</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:onion:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Vegetable</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🥜</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:peanuts:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Vegetable</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🍞</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:bread:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Prepared</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🥖</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:baguette_bread:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Prepared</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🥨</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:pretzel:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Prepared</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🥞</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:pancakes:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Prepared</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧀</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:cheese:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Prepared</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🍗</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:poultry_leg:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Prepared</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🥓</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:bacon:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Prepared</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🍟</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:fries:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Prepared</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🌭</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:hotdog:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Prepared</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🌮</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:taco:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Prepared</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🫔</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:tamale:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Prepared</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧆</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:falafel:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Prepared</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🍳</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:fried_egg:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Prepared</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🍲</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:stew:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Prepared</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🥣</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:bowl_with_spoon:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Prepared</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🍿</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:popcorn:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Prepared</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧂</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:salt:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Prepared</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🥐</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:croissant:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Prepared</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🫓</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:flatbread:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Prepared</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🥯</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:bagel:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Prepared</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧇</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:waffle:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Prepared</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🍖</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:meat_on_bone:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Prepared</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🥩</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:cut_of_meat:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Prepared</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🍔</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:hamburger:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Prepared</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🍕</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:pizza:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Prepared</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🥪</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:sandwich:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Prepared</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🌯</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:burrito:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Prepared</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🥙</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:stuffed_flatbread:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Prepared</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🥚</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:egg:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Prepared</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🥘</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:shallow_pan_of_food:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Prepared</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🫕</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:fondue:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Prepared</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🥗</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:green_salad:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Prepared</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🧈</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:butter:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Prepared</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🥫</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:canned_food:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Prepared</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🍱</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:bento:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Asian</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🍙</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:rice_ball:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Asian</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🍛</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:curry:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Asian</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🍝</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:spaghetti:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Asian</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🍢</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:oden:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Asian</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🍤</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:fried_shrimp:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Asian</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🥮</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:moon_cake:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Asian</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🥟</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:dumpling:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Asian</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🥡</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:takeout_box:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Asian</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🍘</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:rice_cracker:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Asian</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🍚</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:rice:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Asian</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🍜</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:ramen:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Asian</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🍠</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:sweet_potato:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Asian</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🍣</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:sushi:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Asian</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🍥</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:fish_cake:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Asian</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🍡</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:dango:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Asian</string>
+ <string></string>
+ </array>
+ </map>
+ <map>
+ <key>Character</key>
+ <string>🥠</string>
+ <key>ShortCodes</key>
+ <array>
+ <string>:fortune_cookie:</string>
+ <string></string>
+ <string></string>
+ </array>
+ <key>Categories</key>
+ <array>
+ <string>Food Asian</string>
+ <string></string>
+ </array>
+ </map>
+ </array>
+</llsd>
diff --git a/indra/newview/skins/default/xui/en/floater_emoji_complete.xml b/indra/newview/skins/default/xui/en/floater_emoji_complete.xml
new file mode 100644
index 0000000000..e9ea8f4de7
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/floater_emoji_complete.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<floater
+ can_close="false"
+ can_dock="false"
+ can_drag_on_left="false"
+ can_minimize="false"
+ can_resize="false"
+ can_tear_off="false"
+ header_height="0"
+ layout="topleft"
+ legacy_header_height="0"
+ height="40"
+ single_instance="true"
+ width="240"
+ >
+ <emoji_complete
+ autosize="true"
+ height="30"
+ follows="top|left"
+ layout="topleft"
+ left="5"
+ max_emoji="7"
+ name="emoji_complete_ctrl"
+ top="5"
+ width="230"
+ >
+ </emoji_complete>
+</floater>
diff --git a/indra/newview/skins/default/xui/en/floater_preview_notecard.xml b/indra/newview/skins/default/xui/en/floater_preview_notecard.xml
index dcbdfa8794..ac5467c036 100644
--- a/indra/newview/skins/default/xui/en/floater_preview_notecard.xml
+++ b/indra/newview/skins/default/xui/en/floater_preview_notecard.xml
@@ -73,6 +73,8 @@
spellcheck="true"
tab_group="1"
top="46"
+ use_color="true"
+ show_emoji_helper="true"
width="392"
word_wrap="true">
Loading...
diff --git a/indra/newview/skins/default/xui/en/fonts.xml b/indra/newview/skins/default/xui/en/fonts.xml
index d88c267a95..40045625fd 100644
--- a/indra/newview/skins/default/xui/en/fonts.xml
+++ b/indra/newview/skins/default/xui/en/fonts.xml
@@ -3,6 +3,7 @@
<font name="default" comment="default font files (global fallbacks)">
<file>DejaVuSans.ttf</file>
+ <file functor="is_emoji">TwemojiSVG.ttf</file>
<os name="Windows">
<file>meiryo.TTC</file>
<file>MSGOTHIC.TTC</file>
@@ -69,6 +70,11 @@
<file>DejaVuSans-BoldOblique.ttf</file>
</font>
+ <font name="Emoji"
+ comment="Name of emoji font">
+ <file>TwemojiSVG.ttf</file>
+ </font>
+
<font name="Monospace"
comment="Name of monospace font">
<file>DejaVuSansMono.ttf</file>
diff --git a/indra/newview/skins/default/xui/en/menu_login.xml b/indra/newview/skins/default/xui/en/menu_login.xml
index 96fac1c6e8..40399b33ef 100644
--- a/indra/newview/skins/default/xui/en/menu_login.xml
+++ b/indra/newview/skins/default/xui/en/menu_login.xml
@@ -161,6 +161,32 @@
<menu_item_separator />
<menu
create_jump_keys="true"
+ label="Fonts"
+ name="Fonts"
+ tear_off="true">
+ <menu_item_call
+ label="Show Font Test"
+ name="Show Font Test">
+ <menu_item_call.on_click
+ function="Floater.Show"
+ parameter="font_test" />
+ </menu_item_call>
+ <menu_item_separator />
+ <menu_item_call
+ label="Dump Fonts"
+ name="Dump Fonts">
+ <menu_item_call.on_click
+ function="Develop.Fonts.Dump" />
+ </menu_item_call>
+ <menu_item_call
+ label="Dump Font Textures"
+ name="Dump Font Textures">
+ <menu_item_call.on_click
+ function="Develop.Fonts.DumpTextures" />
+ </menu_item_call>
+ </menu>
+ <menu
+ create_jump_keys="true"
label="UI Tests"
name="UI Tests"
tear_off="true">
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index 58584345a9..66b70512a6 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -3484,6 +3484,18 @@ function="World.EnvPreset"
parameter="https://cryptic-ridge-1632.herokuapp.com/"/>
</menu_item_call>
<menu_item_call
+ label="Dump Fonts"
+ name="Dump Fonts">
+ <menu_item_call.on_click
+ function="Develop.Fonts.Dump" />
+ </menu_item_call>
+ <menu_item_call
+ label="Dump Font Textures"
+ name="Dump Font Textures">
+ <menu_item_call.on_click
+ function="Develop.Fonts.DumpTextures" />
+ </menu_item_call>
+ <menu_item_call
label="Dump SelectMgr"
name="Dump SelectMgr">
<menu_item_call.on_click
diff --git a/indra/newview/skins/default/xui/en/widgets/chat_editor.xml b/indra/newview/skins/default/xui/en/widgets/chat_editor.xml
index f9facb593a..c550f634e5 100644
--- a/indra/newview/skins/default/xui/en/widgets/chat_editor.xml
+++ b/indra/newview/skins/default/xui/en/widgets/chat_editor.xml
@@ -1,4 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<chat_editor
name="chat_editor"
- show_context_menu="true"/>
+ show_context_menu="true"
+ show_emoji_helper="true"
+ use_color="true"
+ />
diff --git a/indra/newview/skins/default/xui/en/widgets/emoji_complete.xml b/indra/newview/skins/default/xui/en/widgets/emoji_complete.xml
new file mode 100644
index 0000000000..370f1d174e
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/widgets/emoji_complete.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<emoji_complete
+ autosize="false"
+ font="EmojiHuge"
+ hover_image="ListItem_Over"
+ max_emoji="7"
+ padding="8"
+ selected_image="ListItem_Select"
+ >
+</emoji_complete>
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
index 6d68fd5453..a2142d4c85 100755
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -141,7 +141,7 @@ class ViewerManifest(LLManifest):
self.path("*.tga")
# Include our fonts
- with self.prefix(src_dst="fonts"):
+ with self.prefix(src="../packages/fonts",src_dst="fonts"):
self.path("*.ttf")
self.path("*.txt")
@@ -517,6 +517,10 @@ class WindowsManifest(ViewerManifest):
self.path("OpenAL32.dll")
self.path("alut.dll")
+ # For ICU4C
+ self.path("icudt48.dll")
+ self.path("icuuc48.dll")
+
# For textures
self.path("openjp2.dll")