From 65f7a623ce424051871346447745912dde146e84 Mon Sep 17 00:00:00 2001 From: Harrison Healey Date: Thu, 6 Jun 2024 12:25:33 -0400 Subject: [PATCH] Remove t from utils/emojis and related code (#27273) * Update make_emojis.mjs and remove unused field * Remove skin tone translations from emojis.ts * Remove category name translations from emojis.ts --------- Co-authored-by: Mattermost Build --- .../accessibility_popovers_spec.js | 18 +-- webapp/channels/build/emoji/make_emojis.mjs | 30 +--- .../__snapshots__/emoji_picker.test.tsx.snap | 20 +-- .../emoji_picker_category.test.tsx.snap | 2 +- .../components/emoji_picker_categories.tsx | 2 +- .../components/emoji_picker_category.test.tsx | 12 +- .../components/emoji_picker_category.tsx | 13 +- .../components/emoji_picker_skin.tsx | 85 +++++++++--- .../emoji_picker/constants/index.ts | 129 ++++++++++++++---- .../emoji_picker/emoji_picker.test.tsx | 4 +- .../components/emoji_picker/types/index.ts | 9 +- webapp/channels/src/utils/emoji.ts | 10 -- 12 files changed, 216 insertions(+), 118 deletions(-) diff --git a/e2e-tests/cypress/tests/integration/channels/accessibility/accessibility_popovers_spec.js b/e2e-tests/cypress/tests/integration/channels/accessibility/accessibility_popovers_spec.js index 25b88f9a30..5815dca9ee 100644 --- a/e2e-tests/cypress/tests/integration/channels/accessibility/accessibility_popovers_spec.js +++ b/e2e-tests/cypress/tests/integration/channels/accessibility/accessibility_popovers_spec.js @@ -46,15 +46,15 @@ describe('Verify Accessibility Support in Popovers', () => { cy.get('#emojiPickerCategories').children().eq(0).focus().tab({shift: true}).tab(); const categories = [ - {ariaLabel: 'emoji_picker.smileys-emotion', header: 'Smileys & Emotion'}, - {ariaLabel: 'emoji_picker.people-body', header: 'People & Body'}, - {ariaLabel: 'emoji_picker.animals-nature', header: 'Animals & Nature'}, - {ariaLabel: 'emoji_picker.food-drink', header: 'Food & Drink'}, - {ariaLabel: 'emoji_picker.travel-places', header: 'Travel Places'}, - {ariaLabel: 'emoji_picker.activities', header: 'Activities'}, - {ariaLabel: 'emoji_picker.objects', header: 'Objects'}, - {ariaLabel: 'emoji_picker.symbols', header: 'Symbols'}, - {ariaLabel: 'emoji_picker.flags', header: 'Flags'}, + {ariaLabel: 'Smileys & Emotion', header: 'Smileys & Emotion'}, + {ariaLabel: 'People & Body', header: 'People & Body'}, + {ariaLabel: 'Animals & Nature', header: 'Animals & Nature'}, + {ariaLabel: 'Food & Drink', header: 'Food & Drink'}, + {ariaLabel: 'Travel Places', header: 'Travel Places'}, + {ariaLabel: 'Activities', header: 'Activities'}, + {ariaLabel: 'Objects', header: 'Objects'}, + {ariaLabel: 'Symbols', header: 'Symbols'}, + {ariaLabel: 'Flags', header: 'Flags'}, ]; // * Verify if emoji Categories gets the focus when tab is pressed diff --git a/webapp/channels/build/emoji/make_emojis.mjs b/webapp/channels/build/emoji/make_emojis.mjs index b8ecb8e8b4..64e93d2891 100755 --- a/webapp/channels/build/emoji/make_emojis.mjs +++ b/webapp/channels/build/emoji/make_emojis.mjs @@ -13,17 +13,17 @@ * npm run make-emojis -- --help */ -import path from 'node:path'; -import * as fsPromise from 'node:fs/promises'; import * as fs from 'node:fs'; +import * as fsPromise from 'node:fs/promises'; +import path from 'node:path'; import * as url from 'node:url'; -import yargs from 'yargs'; import chalk from 'chalk'; -import jsonData from 'emoji-datasource/emoji.json'; -import jsonCategories from 'emoji-datasource/categories.json'; +import jsonCategories from 'emoji-datasource/categories.json' assert {type: 'json'}; +import jsonData from 'emoji-datasource/emoji.json' assert {type: 'json'}; +import yargs from 'yargs'; -import additionalShortnames from './additional_shortnames.json'; +import additionalShortnames from './additional_shortnames.json' assert {type: 'json'}; const EMOJI_SIZE = 64; const EMOJI_SIZE_PADDED = EMOJI_SIZE + 2; // 1px per side @@ -142,7 +142,6 @@ const emojiIndicesByCategory = new Map(); const emojiIndicesByCategoryAndSkin = new Map(); const emojiIndicesByCategoryNoSkin = new Map(); const categoryNamesSet = new Set(); -const categoryDefaultTranslation = new Map(); const emojiImagesByAlias = []; const emojiFilePositions = new Map(); const skinCodes = { @@ -237,7 +236,6 @@ fullEmoji.forEach((emoji, index) => { } const safeCat = normalizeCategoryName(emoji.category); - categoryDefaultTranslation.set(safeCat, emoji.category); emoji.category = safeCat; addIndexToMap(emojiIndicesByCategory, safeCat, index); if (emoji.skins || emoji.skin_variations) { @@ -351,17 +349,11 @@ endResults.push(writeToFileAndPrint('emoji.json', webappUtilsEmojiDir, JSON.stri const categoryList = Object.keys(jsonCategories).filter((item) => item !== 'Component').map(normalizeCategoryName); const categoryNames = ['recent', ...categoryList, 'custom']; -categoryDefaultTranslation.set('recent', 'Recently Used'); -categoryDefaultTranslation.set('searchResults', 'Search Results'); -categoryDefaultTranslation.set('custom', 'Custom'); -const categoryTranslations = ['recent', 'searchResults', ...categoryNames].map((c) => `['${c}', t('emoji_picker.${c}')]`); const writeableSkinCategories = []; -const skinTranslations = []; const skinnedCats = []; for (const skin of emojiIndicesByCategoryAndSkin.keys()) { writeableSkinCategories.push(`['${skin}', new Map(${JSON.stringify(Array.from(emojiIndicesByCategoryAndSkin.get(skin)))})]`); - skinTranslations.push(`['${skin}', t('emoji_skin.${skinCodes[skin]}')]`); skinnedCats.push(`['${skin}', genSkinnedCategories('${skin}')]`); } @@ -373,8 +365,6 @@ const emojiJSX = `// Copyright (c) 2015-present Mattermost, Inc. All Rights Rese /* eslint-disable */ -import {t} from 'utils/i18n'; - import memoize from 'memoize-one'; import emojis from 'utils/emoji.json'; @@ -389,14 +379,6 @@ export const EmojiIndicesByUnicode = new Map(${JSON.stringify(emojiIndicesByUnic export const CategoryNames = ${JSON.stringify(categoryNames)}; -export const CategoryMessage = new Map(${JSON.stringify(Array.from(categoryDefaultTranslation))}); - -export const CategoryTranslations = new Map([${categoryTranslations}]); - -export const SkinTranslations = new Map([${skinTranslations.join(', ')}]); - -export const ComponentCategory = 'Component'; - const AllEmojiIndicesByCategory = new Map(${JSON.stringify(Array.from(emojiIndicesByCategory))}); const EmojiIndicesByCategoryAndSkin = new Map([${writeableSkinCategories.join(', ')}]); diff --git a/webapp/channels/src/components/emoji_picker/__snapshots__/emoji_picker.test.tsx.snap b/webapp/channels/src/components/emoji_picker/__snapshots__/emoji_picker.test.tsx.snap index 04027027b5..85a20fb954 100644 --- a/webapp/channels/src/components/emoji_picker/__snapshots__/emoji_picker.test.tsx.snap +++ b/webapp/channels/src/components/emoji_picker/__snapshots__/emoji_picker.test.tsx.snap @@ -39,7 +39,7 @@ exports[`components/emoji_picker/EmojiPicker should match snapshot 1`] = ` id="emojiPickerCategories" > @@ -48,7 +48,7 @@ exports[`components/emoji_picker/EmojiPicker should match snapshot 1`] = ` /> @@ -57,7 +57,7 @@ exports[`components/emoji_picker/EmojiPicker should match snapshot 1`] = ` /> @@ -66,7 +66,7 @@ exports[`components/emoji_picker/EmojiPicker should match snapshot 1`] = ` /> @@ -75,7 +75,7 @@ exports[`components/emoji_picker/EmojiPicker should match snapshot 1`] = ` /> @@ -84,7 +84,7 @@ exports[`components/emoji_picker/EmojiPicker should match snapshot 1`] = ` /> @@ -93,7 +93,7 @@ exports[`components/emoji_picker/EmojiPicker should match snapshot 1`] = ` /> @@ -102,7 +102,7 @@ exports[`components/emoji_picker/EmojiPicker should match snapshot 1`] = ` /> @@ -111,7 +111,7 @@ exports[`components/emoji_picker/EmojiPicker should match snapshot 1`] = ` /> @@ -120,7 +120,7 @@ exports[`components/emoji_picker/EmojiPicker should match snapshot 1`] = ` /> diff --git a/webapp/channels/src/components/emoji_picker/components/__snapshots__/emoji_picker_category.test.tsx.snap b/webapp/channels/src/components/emoji_picker/components/__snapshots__/emoji_picker_category.test.tsx.snap index 736b908dff..248ef4c84e 100644 --- a/webapp/channels/src/components/emoji_picker/components/__snapshots__/emoji_picker_category.test.tsx.snap +++ b/webapp/channels/src/components/emoji_picker/components/__snapshots__/emoji_picker_category.test.tsx.snap @@ -3,7 +3,7 @@ exports[`EmojiPickerCategory should match snapshot 1`] = ` diff --git a/webapp/channels/src/components/emoji_picker/components/emoji_picker_categories.tsx b/webapp/channels/src/components/emoji_picker/components/emoji_picker_categories.tsx index b4a310ddac..cba27aa107 100644 --- a/webapp/channels/src/components/emoji_picker/components/emoji_picker_categories.tsx +++ b/webapp/channels/src/components/emoji_picker/components/emoji_picker_categories.tsx @@ -76,7 +76,7 @@ function EmojiPickerCategories({ return ( { event.preventDefault(); @@ -39,19 +41,16 @@ function EmojiPickerCategory({category, categoryRowIndex, selected, enable, onCl id={`emojiPickerCategoryTooltip-${category.name}`} placement='bottom' title={ - + } > - + ); diff --git a/webapp/channels/src/components/emoji_picker/components/emoji_picker_skin.tsx b/webapp/channels/src/components/emoji_picker/components/emoji_picker_skin.tsx index 7a22a2b378..229bfece1e 100644 --- a/webapp/channels/src/components/emoji_picker/components/emoji_picker_skin.tsx +++ b/webapp/channels/src/components/emoji_picker/components/emoji_picker_skin.tsx @@ -3,27 +3,74 @@ import classNames from 'classnames'; import React from 'react'; -import {FormattedMessage, injectIntl} from 'react-intl'; -import type {IntlShape} from 'react-intl'; +import {FormattedMessage, defineMessage, injectIntl} from 'react-intl'; +import type {IntlShape, MessageDescriptor} from 'react-intl'; import {CSSTransition} from 'react-transition-group'; import {CloseIcon} from '@mattermost/compass-icons/components'; +import type {SystemEmoji} from '@mattermost/types/emojis'; import WithTooltip from 'components/with_tooltip'; import imgTrans from 'images/img_trans.gif'; import * as Emoji from 'utils/emoji'; -const skinsList = [ - ['raised_hand_with_fingers_splayed_dark_skin_tone', '1F3FF'], - ['raised_hand_with_fingers_splayed_medium_dark_skin_tone', '1F3FE'], - ['raised_hand_with_fingers_splayed_medium_skin_tone', '1F3FD'], - ['raised_hand_with_fingers_splayed_medium_light_skin_tone', '1F3FC'], - ['raised_hand_with_fingers_splayed_light_skin_tone', '1F3FB'], - ['raised_hand_with_fingers_splayed', 'default'], -]; +interface SkinTone { + emoji: SystemEmoji; + label: MessageDescriptor; + value: string; +} -const skinToneEmojis = new Map(skinsList.map((pair) => [pair[1], Emoji.Emojis[Emoji.EmojiIndicesByAlias.get(pair[0])!]])); +const skinTones = [ + { + emoji: Emoji.Emojis[Emoji.EmojiIndicesByAlias.get('raised_hand_with_fingers_splayed_dark_skin_tone')!], + label: defineMessage({ + id: 'emoji_skin.dark_skin_tone', + defaultMessage: 'Dark skin tone', + }), + value: '1F3FF', + }, + { + emoji: Emoji.Emojis[Emoji.EmojiIndicesByAlias.get('raised_hand_with_fingers_splayed_medium_dark_skin_tone')!], + label: defineMessage({ + id: 'emoji_skin.medium_dark_skin_tone', + defaultMessage: 'Medium dark skin tone', + }), + value: '1F3FE', + }, + { + emoji: Emoji.Emojis[Emoji.EmojiIndicesByAlias.get('raised_hand_with_fingers_splayed_medium_skin_tone')!], + label: defineMessage({ + id: 'emoji_skin.medium_skin_tone', + defaultMessage: 'Medium skin tone', + }), + value: '1F3FD', + }, + { + emoji: Emoji.Emojis[Emoji.EmojiIndicesByAlias.get('raised_hand_with_fingers_splayed_medium_light_skin_tone')!], + label: defineMessage({ + id: 'emoji_skin.medium_light_skin_tone', + defaultMessage: 'Medium light skin tone', + }), + value: '1F3FC', + }, + { + emoji: Emoji.Emojis[Emoji.EmojiIndicesByAlias.get('raised_hand_with_fingers_splayed_light_skin_tone')!], + label: defineMessage({ + id: 'emoji_skin.light_skin_tone', + defaultMessage: 'Light skin tone', + }), + value: '1F3FB', + }, + { + emoji: Emoji.Emojis[Emoji.EmojiIndicesByAlias.get('raised_hand_with_fingers_splayed')!], + label: defineMessage({ + id: 'emoji_skin.default', + defaultMessage: 'Default skin tone', + }), + value: 'default', + }, +] satisfies SkinTone[]; export type Props = { userSkinTone: string; @@ -44,13 +91,13 @@ export class EmojiPickerSkin extends React.PureComponent { }; } - ariaLabel = (skin: string) => { + ariaLabel = (skinTone: SkinTone) => { return this.props.intl.formatMessage({ id: 'emoji_skin_item.emoji_aria_label', defaultMessage: '{skinName} emoji', }, { - skinName: Emoji.SkinTranslations.get(skin), + skinName: this.props.intl.formatMessage(skinTone.label), }); }; @@ -70,16 +117,16 @@ export class EmojiPickerSkin extends React.PureComponent { id: 'emoji_skin.close', defaultMessage: 'Close skin tones', }); - const choices = skinsList.map((skinPair) => { - const skin = skinPair[1]; - const emoji = skinToneEmojis.get(skin)!; + const choices = skinTones.map((skinTone) => { + const skin = skinTone.value; + const emoji = skinTone.emoji; const spriteClassName = classNames('emojisprite', `emoji-category-${emoji.category}`, `emoji-${emoji.unified.toLowerCase()}`); return (
@@ -117,7 +164,7 @@ export class EmojiPickerSkin extends React.PureComponent { } collapsed() { - const emoji = skinToneEmojis.get(this.props.userSkinTone)!; + const emoji = skinTones.find(({value}) => value === this.props.userSkinTone)!.emoji; const spriteClassName = classNames('emojisprite', `emoji-category-${emoji?.category}`, `emoji-${emoji?.unified.toLowerCase()}`); const expandButtonLabel = this.props.intl.formatMessage({ id: 'emoji_picker.skin_tone', diff --git a/webapp/channels/src/components/emoji_picker/constants/index.ts b/webapp/channels/src/components/emoji_picker/constants/index.ts index 8593aff3e5..0f9a200729 100644 --- a/webapp/channels/src/components/emoji_picker/constants/index.ts +++ b/webapp/channels/src/components/emoji_picker/constants/index.ts @@ -1,6 +1,8 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. +import {defineMessage} from 'react-intl'; + import type {EmojiCategory} from '@mattermost/types/emojis'; import * as Emoji from 'utils/emoji'; @@ -12,39 +14,114 @@ export const SEARCH_RESULTS = 'searchResults'; export const SMILEY_EMOTION = 'smileys-emotion'; export const CUSTOM = 'custom'; -const categoryClass: Map = new Map([ - [RECENT, 'icon-clock-outline'], - [SMILEY_EMOTION, 'icon-emoticon-happy-outline'], - ['people-body', 'icon-account-outline'], - ['animals-nature', 'icon-leaf-outline'], - ['food-drink', 'icon-food-apple'], - ['activities', 'icon-basketball'], - ['travel-places', 'icon-airplane-variant'], - ['objects', 'icon-lightbulb-outline'], - ['symbols', 'icon-heart-outline'], - ['flags', 'icon-flag-outline'], - [CUSTOM, 'icon-emoticon-custom-outline'], - [SEARCH_RESULTS, ''], -]); +const emojiCategories = { + recent: { + name: 'recent', + label: defineMessage({ + id: 'emoji_picker.recent', + defaultMessage: 'Recent', + }), + iconClassName: 'icon-clock-outline', + }, + searchResults: { + name: 'searchResults', + label: defineMessage({ + id: 'emoji_picker.searchResults', + defaultMessage: 'Search Results', + }), + iconClassName: '', + }, + 'smileys-emotion': { + name: 'smileys-emotion', + label: defineMessage({ + id: 'emoji_picker.smileys-emotion', + defaultMessage: 'Smileys & Emotion', + }), + iconClassName: 'icon-emoticon-happy-outline', + }, + 'people-body': { + name: 'people-body', + label: defineMessage({ + id: 'emoji_picker.people-body', + defaultMessage: 'People & Body', + }), + iconClassName: 'icon-account-outline', + }, + 'animals-nature': { + name: 'animals-nature', + label: defineMessage({ + id: 'emoji_picker.animals-nature', + defaultMessage: 'Animals & Nature', + }), + iconClassName: 'icon-leaf-outline', + }, + 'food-drink': { + name: 'food-drink', + label: defineMessage({ + id: 'emoji_picker.food-drink', + defaultMessage: 'Food & Drink', + }), + iconClassName: 'icon-food-apple', + }, + 'travel-places': { + name: 'travel-places', + label: defineMessage({ + id: 'emoji_picker.travel-places', + defaultMessage: 'Travel & Places', + }), + iconClassName: 'icon-airplane-variant', + }, + activities: { + name: 'activities', + label: defineMessage({ + id: 'emoji_picker.activities', + defaultMessage: 'Activities', + }), + iconClassName: 'icon-basketball', + }, + objects: { + name: 'objects', + label: defineMessage({ + id: 'emoji_picker.objects', + defaultMessage: 'Objects', + }), + iconClassName: 'icon-lightbulb-outline', + }, + symbols: { + name: 'symbols', + label: defineMessage({ + id: 'emoji_picker.symbols', + defaultMessage: 'Symbols', + }), + iconClassName: 'icon-heart-outline', + }, + flags: { + name: 'flags', + label: defineMessage({ + id: 'emoji_picker.flags', + defaultMessage: 'Flags', + }), + iconClassName: 'icon-flag-outline', + }, + custom: { + name: 'custom', + label: defineMessage({ + id: 'emoji_picker.custom', + defaultMessage: 'Custom', + }), + iconClassName: 'icon-emoticon-custom-outline', + }, +} satisfies Record; -function createCategory(name: EmojiCategory): Category { - return { - name, - id: Emoji.CategoryTranslations.get(name) || '', - className: categoryClass.get(name) || '', - message: Emoji.CategoryMessage.get(name)!, - }; -} - -export const RECENT_EMOJI_CATEGORY: Pick = {recent: createCategory(RECENT)}; -export const SEARCH_EMOJI_CATEGORY: Pick = {searchResults: createCategory(SEARCH_RESULTS)}; +export const RECENT_EMOJI_CATEGORY: Pick = {recent: emojiCategories.recent}; +export const SEARCH_EMOJI_CATEGORY: Pick = {searchResults: emojiCategories.searchResults}; export const CATEGORIES: Categories = Emoji.CategoryNames. filter((category) => !(category === 'recent' || category === 'searchResults')). reduce((previousCategory, currentCategory) => { return { ...previousCategory, - [currentCategory]: createCategory(currentCategory as EmojiCategory), + [currentCategory]: emojiCategories[currentCategory as EmojiCategory], }; }, {} as Categories); diff --git a/webapp/channels/src/components/emoji_picker/emoji_picker.test.tsx b/webapp/channels/src/components/emoji_picker/emoji_picker.test.tsx index 911d1945fc..835a20a002 100644 --- a/webapp/channels/src/components/emoji_picker/emoji_picker.test.tsx +++ b/webapp/channels/src/components/emoji_picker/emoji_picker.test.tsx @@ -51,7 +51,7 @@ describe('components/emoji_picker/EmojiPicker', () => { , ); - expect(screen.queryByLabelText('emoji_picker.recent')).toBeNull(); + expect(screen.queryByLabelText('Recent')).toBeNull(); }); test('Recent category should exist if there are recent emojis', () => { @@ -64,7 +64,7 @@ describe('components/emoji_picker/EmojiPicker', () => { , ); - expect(screen.queryByLabelText('emoji_picker.recent')).not.toBeNull(); + expect(screen.queryByLabelText('Recent')).not.toBeNull(); }); test('First emoji should be selected on search', () => { diff --git a/webapp/channels/src/components/emoji_picker/types/index.ts b/webapp/channels/src/components/emoji_picker/types/index.ts index 5320f20560..6be32984c8 100644 --- a/webapp/channels/src/components/emoji_picker/types/index.ts +++ b/webapp/channels/src/components/emoji_picker/types/index.ts @@ -1,6 +1,8 @@ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. +import type {MessageDescriptor} from 'react-intl'; + import type {EmojiCategory, Emoji, SystemEmoji, CustomEmoji} from '@mattermost/types/emojis'; import type { @@ -9,11 +11,10 @@ import type { } from 'components/emoji_picker/constants'; export type Category = { - className: string; - emojiIds?: string[]; - id: string; - message: string; name: EmojiCategory; + emojiIds?: string[]; + label: MessageDescriptor; + iconClassName: string; }; export type Categories = Record; diff --git a/webapp/channels/src/utils/emoji.ts b/webapp/channels/src/utils/emoji.ts index d6e6a1910a..94fad36b95 100644 --- a/webapp/channels/src/utils/emoji.ts +++ b/webapp/channels/src/utils/emoji.ts @@ -5,8 +5,6 @@ /* eslint-disable */ -import {t} from 'utils/i18n'; - import memoize from 'memoize-one'; import emojis from 'utils/emoji.json'; @@ -21,14 +19,6 @@ export const EmojiIndicesByUnicode = new Map([["1f600",0],["1f603",1],["1f604",2 export const CategoryNames = ["recent","smileys-emotion","people-body","animals-nature","food-drink","travel-places","activities","objects","symbols","flags","custom"]; -export const CategoryMessage = new Map([["smileys-emotion","Smileys & Emotion"],["people-body","People & Body"],["component","Component"],["animals-nature","Animals & Nature"],["food-drink","Food & Drink"],["travel-places","Travel & Places"],["activities","Activities"],["objects","Objects"],["symbols","Symbols"],["flags","Flags"],["custom","Custom"],["recent","Recently Used"],["searchResults","Search Results"]]); - -export const CategoryTranslations = new Map([['recent', t('emoji_picker.recent')],['searchResults', t('emoji_picker.searchResults')],['recent', t('emoji_picker.recent')],['smileys-emotion', t('emoji_picker.smileys-emotion')],['people-body', t('emoji_picker.people-body')],['animals-nature', t('emoji_picker.animals-nature')],['food-drink', t('emoji_picker.food-drink')],['travel-places', t('emoji_picker.travel-places')],['activities', t('emoji_picker.activities')],['objects', t('emoji_picker.objects')],['symbols', t('emoji_picker.symbols')],['flags', t('emoji_picker.flags')],['custom', t('emoji_picker.custom')]]); - -export const SkinTranslations = new Map([['default', t('emoji_skin.default')], ['1F3FB', t('emoji_skin.light_skin_tone')], ['1F3FC', t('emoji_skin.medium_light_skin_tone')], ['1F3FD', t('emoji_skin.medium_skin_tone')], ['1F3FE', t('emoji_skin.medium_dark_skin_tone')], ['1F3FF', t('emoji_skin.dark_skin_tone')]]); - -export const ComponentCategory = 'Component'; - const AllEmojiIndicesByCategory = new Map([["smileys-emotion",[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150]],["people-body",[151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,1810,1811,1812,1813,1814,1815,1816,1817,1818,1819,1820,1821,1822,1823,1824,1825,1826,1827,1828,1829,1830,1831,1832,1833,1834,1835,1836,1837,1838,1839,1840,1841,1842,1843,1844,1845,1846,1847,1848,1849,1850,1851,1852,1853,1854,1855,1856,1857,1858,1859,1860,1861,1862,1863,1864,1865,1866,1867,1868,1869,1870,1871,1872,1873,1874,1875,1876,1877,1878,1879,1880,1881,1882,1883,1884,1885,1886,1887,1888,1889,1890,1891,1892,1893,1894,1895,1896,1897,1898,1899,1900,1901,1902,1903,1904,1905,1906,1907,1908,1909,1910,1911,1912,1913,1914,1915,1916,1917,1918,1919,1920,1921,1922,1923,1924,1925,1926,1927,1928,1929,1930,1931,1932,1933,1934,1935,1936,1937,1938,1939,1940,1941,1942,1943,1944,1945,1946,1947,1948,1949,1950,1951,1952,1953,1954,1955,1956,1957,1958,1959,1960,1961,1962,1963,1964,1965,1966,1967,1968,1969,1970,1971,1972,1973,1974,1975,1976,1977,1978,1979,1980,1981,1982,1983,1984,1985,1986,1987,1988,1989,1990,1991,1992,1993,1994,1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026,2027,2028,2029,2030,2031,2032,2033,2034,2035,2036,2037,2038,2039,2040,2041,2042,2043,2044,2045,2046,2047,2048,2049,2050,2051,2052,2053,2054,2055,2056,2057,2058,2059,2060,2061,2062,2063,2064,2065,2066,2067,2068,2069,2070,2071,2072,2073,2074,2075,2076,2077,2078,2079,2080,2081,2082,2083,2084,2085,2086,2087,2088,2089,2090,2091,2092,2093,2094,2095,2096,2097,2098,2099,2100,2101,2102,2103,2104,2105,2106,2107,2108,2109,2110,2111,2112,2113,2114,2115,2116,2117,2118,2119,2120,2121,2122,2123,2124,2125,2126,2127,2128,2129,2130,2131,2132,2133,2134,2135,2136,2137,2138,2139,2140,2141,2142,2143,2144,2145,2146,2147,2148,2149,2150,2151,2152,2153,2154,2155,2156,2157,2158,2159,2160,2161,2162,2163,2164,2165,2166,2167,2168,2169,2170,2171,2172,2173,2174,2175,2176,2177,2178,2179,2180,2181,2182,2183,2184,2185,2186,2187,2188,2189,2190,2191,2192,2193,2194,2195,2196,2197,2198,2199,2200,2201,2202,2203,2204,2205,2206,2207,2208,2209,2210,2211,2212,2213,2214,2215,2216,2217,2218,2219,2220,2221,2222,2223,2224,2225,2226,2227,2228,2229,2230,2231,2232,2233,2234,2235,2236,2237,2238,2239,2240,2241,2242,2243,2244,2245,2246,2247,2248,2249,2250,2251,2252,2253,2254,2255,2256,2257,2258,2259,2260,2261,2262,2263,2264,2265,2266,2267,2268,2269,2270,2271,2272,2273,2274,2275,2276,2277,2278,2279,2280,2281,2282,2283,2284,2285,2286,2287,2288,2289,2290,2291,2292,2293,2294,2295,2296,2297,2298,2299,2300,2301,2302,2303,2304,2305,2306,2307,2308,2309,2310,2311,2312,2313,2314,2315,2316,2317,2318,2319,2320,2321,2322,2323,2324,2325,2326,2327,2328,2329,2330,2331,2332,2333,2334,2335,2336,2337,2338,2339,2340,2341,2342,2343,2344,2345,2346,2347,2348,2349,2350,2351,2352,2353,2354,2355,2356,2357,2358,2359,2360,2361,2362,2363,2364,2365,2366,2367,2368,2369,2370,2371,2372,2373,2374,2375,2376,2377,2378,2379,2380,2381,2382,2383,2384,2385,2386,2387,2388,2389,2390,2391,2392,2393,2394,2395,2396,2397,2398,2399,2400,2401,2402,2403,2404,2405,2406,2407,2408,2409,2410,2411,2412,2413,2414,2415,2416,2417,2418,2419,2420,2421,2422,2423,2424,2425,2426,2427,2428,2429,2430,2431,2432,2433,2434,2435,2436,2437,2438,2439,2440,2441,2442,2443,2444,2445,2446,2447,2448,2449,2450,2451,2452,2453,2454,2455,2456,2457,2458,2459,2460,2461,2462,2463,2464,2465,2466,2467,2468,2469,2470,2471,2472,2473,2474,2475,2476,2477,2478,2479,2480,2481,2482,2483,2484,2485,2486,2487,2488,2489,2490,2491,2492,2493,2494,2495,2496,2497,2498,2499,2500,2501,2502,2503,2504,2505,2506,2507,2508,2509,2510,2511,2512,2513,2514,2515,2516,2517,2518,2519,2520,2521,2522,2523,2524,2525,2526,2527,2528,2529,2530,2531,2532,2533,2534,2535,2536,2537,2538,2539,2540,2541,2542,2543,2544,2545,2546,2547,2548,2549,2550,2551,2552,2553,2554,2555,2556,2557,2558,2559,2560,2561,2562,2563,2564,2565,2566,2567,2568,2569,2570,2571,2572,2573,2574,2575,2576,2577,2578,2579,2580,2581,2582,2583,2584,2585,2586,2587,2588,2589,2590,2591,2592,2593,2594,2595,2596,2597,2598,2599,2600,2601,2602,2603,2604,2605,2606,2607,2608,2609,2610,2611,2612,2613,2614,2615,2616,2617,2618,2619,2620,2621,2622,2623,2624,2625,2626,2627,2628,2629,2630,2631,2632,2633,2634,2635,2636,2637,2638,2639,2640,2641,2642,2643,2644,2645,2646,2647,2648,2649,2650,2651,2652,2653,2654,2655,2656,2657,2658,2659,2660,2661,2662,2663,2664,2665,2666,2667,2668,2669,2670,2671,2672,2673,2674,2675,2676,2677,2678,2679,2680,2681,2682,2683,2684,2685,2686,2687,2688,2689,2690,2691,2692,2693,2694,2695,2696,2697,2698,2699,2700,2701,2702,2703,2704,2705,2706,2707,2708,2709,2710,2711,2712,2713,2714,2715,2716,2717,2718,2719,2720,2721,2722,2723,2724,2725,2726,2727,2728,2729,2730,2731,2732,2733,2734,2735,2736,2737,2738,2739,2740,2741,2742,2743,2744,2745,2746,2747,2748,2749,2750,2751,2752,2753,2754,2755,2756,2757,2758,2759,2760,2761,2762,2763,2764,2765,2766,2767,2768,2769,2770,2771,2772,2773,2774,2775,2776,2777,2778,2779,2780,2781,2782,2783,2784,2785,2786,2787,2788,2789,2790,2791,2792,2793,2794,2795,2796,2797,2798,2799,2800,2801,2802,2803,2804,2805,2806,2807,2808,2809,2810,2811,2812,2813,2814,2815,2816,2817,2818,2819,2820,2821,2822,2823,2824,2825,2826,2827,2828,2829,2830,2831,2832,2833,2834,2835,2836,2837,2838,2839,2840,2841,2842,2843,2844,2845,2846,2847,2848,2849,2850,2851,2852,2853,2854,2855,2856,2857,2858,2859,2860,2861,2862,2863,2864,2865,2866,2867,2868,2869,2870,2871,2872,2873,2874,2875,2876,2877,2878,2879,2880,2881,2882,2883,2884,2885,2886,2887,2888,2889,2890,2891,2892,2893,2894,2895,2896,2897,2898,2899,2900,2901,2902,2903,2904,2905,2906,2907,2908,2909,2910,2911,2912,2913,2914,2915,2916,2917,2918,2919,2920,2921,2922,2923,2924,2925,2926,2927,2928,2929,2930,2931,2932,2933,2934,2935,2936,2937,2938,2939,2940,2941,2942,2943,2944,2945,2946,2947,2948,2949,2950,2951,2952,2953,2954,2955,2956,2957,2958,2959,2960,2961,2962,2963,2964,2965,2966,2967,2968,2969,2970,2971,2972,2973,2974,2975,2976,2977,2978,2979,2980,2981,2982,2983,2984,2985,2986,2987,2988,2989,2990,2991,2992,2993,2994,2995,2996,2997,2998,2999,3000,3001,3002,3003,3004,3005,3006,3007,3008,3009,3010,3011,3012,3013,3014,3015,3016,3017,3018,3019,3020,3021,3022,3023,3024,3025,3026,3027,3028,3029,3030,3031,3032,3033,3034,3035,3036,3037,3038,3039,3040,3041,3042,3043,3044,3045,3046,3047,3048,3049,3050,3051,3052,3053,3054,3055,3056,3057,3058,3059,3060,3061,3062,3063,3064,3065,3066,3067,3068,3069,3070,3071,3072,3073,3074,3075,3076,3077,3078,3079,3080,3081,3082,3083,3084,3085,3086,3087,3088,3089,3090,3091,3092,3093,3094,3095,3096,3097,3098,3099,3100,3101,3102,3103,3104,3105,3106,3107,3108,3109,3110,3111,3112,3113,3114,3115,3116,3117,3118,3119,3120,3121,3122,3123,3124,3125,3126,3127,3128,3129,3130,3131,3132,3133,3134,3135,3136,3137,3138,3139,3140,3141,3142,3143,3144,3145,3146,3147,3148,3149,3150,3151,3152,3153,3154,3155,3156,3157,3158,3159,3160,3161,3162,3163,3164,3165,3166,3167,3168,3169,3170,3171,3172,3173,3174,3175,3176,3177,3178,3179,3180,3181,3182,3183,3184,3185,3186,3187,3188,3189,3190,3191,3192,3193,3194,3195,3196,3197,3198,3199,3200,3201,3202,3203,3204,3205,3206,3207,3208,3209,3210,3211,3212,3213,3214,3215,3216,3217,3218,3219,3220,3221,3222,3223,3224,3225,3226,3227,3228,3229,3230,3231,3232,3233,3234,3235,3236,3237,3238,3239,3240,3241,3242,3243,3244,3245,3246,3247,3248,3249,3250,3251,3252,3253,3254,3255,3256,3257,3258,3259,3260,3261,3262,3263,3264,3265,3266,3267,3268,3269,3270,3271,3272,3273,3274,3275,3276,3277,3278,3279,3280,3281,3282,3283,3284,3285,3286,3287,3288,3289,3290,3291,3292,3293,3294,3295,3296,3297,3298,3299]],["component",[498,499,500,501,502]],["animals-nature",[503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642]],["food-drink",[643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771]],["travel-places",[772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986]],["activities",[987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070]],["objects",[1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320]],["symbols",[1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1476,1477,1478,1479,1480,1481,1482,1483,1484,1485,1486,1487,1488,1489,1490,1491,1492,1493,1494,1495,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,1508,1509,1510,1511,1512,1513,1514,1515,1516,1517,1518,1519,1520,1521,1522,1523,1524,1525,1526,1527,1528,1529,1530,1531,1532,1533,1534,1535,1536,1537,1538,1539,1540]],["flags",[1541,1542,1543,1544,1545,1546,1547,1548,1549,1550,1551,1552,1553,1554,1555,1556,1557,1558,1559,1560,1561,1562,1563,1564,1565,1566,1567,1568,1569,1570,1571,1572,1573,1574,1575,1576,1577,1578,1579,1580,1581,1582,1583,1584,1585,1586,1587,1588,1589,1590,1591,1592,1593,1594,1595,1596,1597,1598,1599,1600,1601,1602,1603,1604,1605,1606,1607,1608,1609,1610,1611,1612,1613,1614,1615,1616,1617,1618,1619,1620,1621,1622,1623,1624,1625,1626,1627,1628,1629,1630,1631,1632,1633,1634,1635,1636,1637,1638,1639,1640,1641,1642,1643,1644,1645,1646,1647,1648,1649,1650,1651,1652,1653,1654,1655,1656,1657,1658,1659,1660,1661,1662,1663,1664,1665,1666,1667,1668,1669,1670,1671,1672,1673,1674,1675,1676,1677,1678,1679,1680,1681,1682,1683,1684,1685,1686,1687,1688,1689,1690,1691,1692,1693,1694,1695,1696,1697,1698,1699,1700,1701,1702,1703,1704,1705,1706,1707,1708,1709,1710,1711,1712,1713,1714,1715,1716,1717,1718,1719,1720,1721,1722,1723,1724,1725,1726,1727,1728,1729,1730,1731,1732,1733,1734,1735,1736,1737,1738,1739,1740,1741,1742,1743,1744,1745,1746,1747,1748,1749,1750,1751,1752,1753,1754,1755,1756,1757,1758,1759,1760,1761,1762,1763,1764,1765,1766,1767,1768,1769,1770,1771,1772,1773,1774,1775,1776,1777,1778,1779,1780,1781,1782,1783,1784,1785,1786,1787,1788,1789,1790,1791,1792,1793,1794,1795,1796,1797,1798,1799,1800,1801,1802,1803,1804,1805,1806,1807,1808,1809]],["custom",[3300]]]); const EmojiIndicesByCategoryAndSkin = new Map([['default', new Map([["people-body",[151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,181,182,183,184,185,188,189,190,191,192,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,401,402,403,404,405,406,408,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458]]])], ['1F3FB', new Map([["people-body",[1810,1815,1820,1825,1830,1835,1840,1845,1850,1855,1860,1865,1870,1875,1880,1885,1890,1895,1900,1905,1910,1915,1920,1925,1930,1935,1940,1945,1950,1955,1960,1965,1970,1975,1980,1985,1990,1995,2000,2005,2010,2015,2020,2025,2030,2035,2040,2045,2050,2055,2060,2065,2070,2075,2080,2085,2090,2095,2100,2105,2110,2115,2120,2125,2130,2135,2140,2145,2150,2155,2160,2165,2170,2175,2180,2185,2190,2195,2200,2205,2210,2215,2220,2225,2230,2231,2232,2233,2250,2255,2256,2257,2258,2275,2280,2281,2282,2283,2300,2305,2310,2315,2320,2325,2330,2335,2340,2345,2350,2355,2360,2365,2370,2375,2380,2385,2390,2395,2400,2405,2410,2415,2420,2425,2430,2435,2440,2445,2450,2455,2460,2465,2470,2475,2480,2485,2490,2495,2500,2505,2510,2515,2520,2525,2530,2535,2540,2545,2550,2555,2560,2565,2570,2575,2580,2585,2590,2595,2600,2605,2610,2615,2620,2625,2630,2635,2640,2645,2650,2655,2660,2665,2670,2675,2680,2685,2690,2695,2700,2705,2710,2715,2720,2725,2730,2735,2740,2745,2750,2755,2760,2765,2770,2775,2780,2785,2790,2795,2800,2805,2810,2815,2820,2825,2830,2835,2840,2845,2850,2855,2860,2865,2870,2875,2880,2885,2890,2895,2900,2905,2910,2915,2920,2925,2930,2935,2940,2945,2950,2955,2960,2965,2970,2975,2980,2985,2990,2995,3000,3005,3010,3015,3020,3025,3030,3035,3040,3041,3042,3043,3044,3065,3070,3075,3080,3085,3090,3095,3100,3105,3110,3115,3120,3125,3130,3135,3140,3145,3150,3155,3160,3165,3170,3175,3180,3185,3190,3195,3200,3205,3210,3215,3220,3225,3230,3235,3240,3245,3250,3255,3260,3265,3270,3275,3280,3285,3290,3295]]])], ['1F3FC', new Map([["people-body",[1811,1816,1821,1826,1831,1836,1841,1846,1851,1856,1861,1866,1871,1876,1881,1886,1891,1896,1901,1906,1911,1916,1921,1926,1931,1936,1941,1946,1951,1956,1961,1966,1971,1976,1981,1986,1991,1996,2001,2006,2011,2016,2021,2026,2031,2036,2041,2046,2051,2056,2061,2066,2071,2076,2081,2086,2091,2096,2101,2106,2111,2116,2121,2126,2131,2136,2141,2146,2151,2156,2161,2166,2171,2176,2181,2186,2191,2196,2201,2206,2211,2216,2221,2226,2234,2235,2236,2237,2251,2259,2260,2261,2262,2276,2284,2285,2286,2287,2301,2306,2311,2316,2321,2326,2331,2336,2341,2346,2351,2356,2361,2366,2371,2376,2381,2386,2391,2396,2401,2406,2411,2416,2421,2426,2431,2436,2441,2446,2451,2456,2461,2466,2471,2476,2481,2486,2491,2496,2501,2506,2511,2516,2521,2526,2531,2536,2541,2546,2551,2556,2561,2566,2571,2576,2581,2586,2591,2596,2601,2606,2611,2616,2621,2626,2631,2636,2641,2646,2651,2656,2661,2666,2671,2676,2681,2686,2691,2696,2701,2706,2711,2716,2721,2726,2731,2736,2741,2746,2751,2756,2761,2766,2771,2776,2781,2786,2791,2796,2801,2806,2811,2816,2821,2826,2831,2836,2841,2846,2851,2856,2861,2866,2871,2876,2881,2886,2891,2896,2901,2906,2911,2916,2921,2926,2931,2936,2941,2946,2951,2956,2961,2966,2971,2976,2981,2986,2991,2996,3001,3006,3011,3016,3021,3026,3031,3036,3045,3046,3047,3048,3049,3066,3071,3076,3081,3086,3091,3096,3101,3106,3111,3116,3121,3126,3131,3136,3141,3146,3151,3156,3161,3166,3171,3176,3181,3186,3191,3196,3201,3206,3211,3216,3221,3226,3231,3236,3241,3246,3251,3256,3261,3266,3271,3276,3281,3286,3291,3296]]])], ['1F3FD', new Map([["people-body",[1812,1817,1822,1827,1832,1837,1842,1847,1852,1857,1862,1867,1872,1877,1882,1887,1892,1897,1902,1907,1912,1917,1922,1927,1932,1937,1942,1947,1952,1957,1962,1967,1972,1977,1982,1987,1992,1997,2002,2007,2012,2017,2022,2027,2032,2037,2042,2047,2052,2057,2062,2067,2072,2077,2082,2087,2092,2097,2102,2107,2112,2117,2122,2127,2132,2137,2142,2147,2152,2157,2162,2167,2172,2177,2182,2187,2192,2197,2202,2207,2212,2217,2222,2227,2238,2239,2240,2241,2252,2263,2264,2265,2266,2277,2288,2289,2290,2291,2302,2307,2312,2317,2322,2327,2332,2337,2342,2347,2352,2357,2362,2367,2372,2377,2382,2387,2392,2397,2402,2407,2412,2417,2422,2427,2432,2437,2442,2447,2452,2457,2462,2467,2472,2477,2482,2487,2492,2497,2502,2507,2512,2517,2522,2527,2532,2537,2542,2547,2552,2557,2562,2567,2572,2577,2582,2587,2592,2597,2602,2607,2612,2617,2622,2627,2632,2637,2642,2647,2652,2657,2662,2667,2672,2677,2682,2687,2692,2697,2702,2707,2712,2717,2722,2727,2732,2737,2742,2747,2752,2757,2762,2767,2772,2777,2782,2787,2792,2797,2802,2807,2812,2817,2822,2827,2832,2837,2842,2847,2852,2857,2862,2867,2872,2877,2882,2887,2892,2897,2902,2907,2912,2917,2922,2927,2932,2937,2942,2947,2952,2957,2962,2967,2972,2977,2982,2987,2992,2997,3002,3007,3012,3017,3022,3027,3032,3037,3050,3051,3052,3053,3054,3067,3072,3077,3082,3087,3092,3097,3102,3107,3112,3117,3122,3127,3132,3137,3142,3147,3152,3157,3162,3167,3172,3177,3182,3187,3192,3197,3202,3207,3212,3217,3222,3227,3232,3237,3242,3247,3252,3257,3262,3267,3272,3277,3282,3287,3292,3297]]])], ['1F3FE', new Map([["people-body",[1813,1818,1823,1828,1833,1838,1843,1848,1853,1858,1863,1868,1873,1878,1883,1888,1893,1898,1903,1908,1913,1918,1923,1928,1933,1938,1943,1948,1953,1958,1963,1968,1973,1978,1983,1988,1993,1998,2003,2008,2013,2018,2023,2028,2033,2038,2043,2048,2053,2058,2063,2068,2073,2078,2083,2088,2093,2098,2103,2108,2113,2118,2123,2128,2133,2138,2143,2148,2153,2158,2163,2168,2173,2178,2183,2188,2193,2198,2203,2208,2213,2218,2223,2228,2242,2243,2244,2245,2253,2267,2268,2269,2270,2278,2292,2293,2294,2295,2303,2308,2313,2318,2323,2328,2333,2338,2343,2348,2353,2358,2363,2368,2373,2378,2383,2388,2393,2398,2403,2408,2413,2418,2423,2428,2433,2438,2443,2448,2453,2458,2463,2468,2473,2478,2483,2488,2493,2498,2503,2508,2513,2518,2523,2528,2533,2538,2543,2548,2553,2558,2563,2568,2573,2578,2583,2588,2593,2598,2603,2608,2613,2618,2623,2628,2633,2638,2643,2648,2653,2658,2663,2668,2673,2678,2683,2688,2693,2698,2703,2708,2713,2718,2723,2728,2733,2738,2743,2748,2753,2758,2763,2768,2773,2778,2783,2788,2793,2798,2803,2808,2813,2818,2823,2828,2833,2838,2843,2848,2853,2858,2863,2868,2873,2878,2883,2888,2893,2898,2903,2908,2913,2918,2923,2928,2933,2938,2943,2948,2953,2958,2963,2968,2973,2978,2983,2988,2993,2998,3003,3008,3013,3018,3023,3028,3033,3038,3055,3056,3057,3058,3059,3068,3073,3078,3083,3088,3093,3098,3103,3108,3113,3118,3123,3128,3133,3138,3143,3148,3153,3158,3163,3168,3173,3178,3183,3188,3193,3198,3203,3208,3213,3218,3223,3228,3233,3238,3243,3248,3253,3258,3263,3268,3273,3278,3283,3288,3293,3298]]])], ['1F3FF', new Map([["people-body",[1814,1819,1824,1829,1834,1839,1844,1849,1854,1859,1864,1869,1874,1879,1884,1889,1894,1899,1904,1909,1914,1919,1924,1929,1934,1939,1944,1949,1954,1959,1964,1969,1974,1979,1984,1989,1994,1999,2004,2009,2014,2019,2024,2029,2034,2039,2044,2049,2054,2059,2064,2069,2074,2079,2084,2089,2094,2099,2104,2109,2114,2119,2124,2129,2134,2139,2144,2149,2154,2159,2164,2169,2174,2179,2184,2189,2194,2199,2204,2209,2214,2219,2224,2229,2246,2247,2248,2249,2254,2271,2272,2273,2274,2279,2296,2297,2298,2299,2304,2309,2314,2319,2324,2329,2334,2339,2344,2349,2354,2359,2364,2369,2374,2379,2384,2389,2394,2399,2404,2409,2414,2419,2424,2429,2434,2439,2444,2449,2454,2459,2464,2469,2474,2479,2484,2489,2494,2499,2504,2509,2514,2519,2524,2529,2534,2539,2544,2549,2554,2559,2564,2569,2574,2579,2584,2589,2594,2599,2604,2609,2614,2619,2624,2629,2634,2639,2644,2649,2654,2659,2664,2669,2674,2679,2684,2689,2694,2699,2704,2709,2714,2719,2724,2729,2734,2739,2744,2749,2754,2759,2764,2769,2774,2779,2784,2789,2794,2799,2804,2809,2814,2819,2824,2829,2834,2839,2844,2849,2854,2859,2864,2869,2874,2879,2884,2889,2894,2899,2904,2909,2914,2919,2924,2929,2934,2939,2944,2949,2954,2959,2964,2969,2974,2979,2984,2989,2994,2999,3004,3009,3014,3019,3024,3029,3034,3039,3060,3061,3062,3063,3064,3069,3074,3079,3084,3089,3094,3099,3104,3109,3114,3119,3124,3129,3134,3139,3144,3149,3154,3159,3164,3169,3174,3179,3184,3189,3194,3199,3204,3209,3214,3219,3224,3229,3234,3239,3244,3249,3254,3259,3264,3269,3274,3279,3284,3289,3294,3299]]])]]);