From d3836e71f8213d0d27f2f1a149f84cd6b4a0530f Mon Sep 17 00:00:00 2001 From: morethanwords Date: Sat, 20 Jun 2020 04:11:24 +0300 Subject: [PATCH] fixes and fixes --- .gitignore | 3 +- src/components/appSearch.ts | 35 ++- src/components/appSelectPeers.ts | 2 +- src/components/audio.ts | 8 +- src/components/chatInput.ts | 17 +- src/components/emoticonsDropdown.ts | 131 +++++++-- src/components/preloader.ts | 8 +- src/components/sidebarLeft/chatFolders.ts | 2 + src/components/sidebarLeft/settings.ts | 5 +- src/emoji.json | 2 +- src/format_jsons.js | 2 +- src/index.hbs | 16 +- src/lib/MP4Source.js | 272 ------------------ src/lib/MP4Sourcee.ts | 2 +- src/lib/MP4Sourceee.ts | 279 ------------------- src/lib/appManagers/appDialogsManager.ts | 72 ++++- src/lib/appManagers/appDocsManager.ts | 6 +- src/lib/appManagers/appImManager.ts | 35 ++- src/lib/appManagers/appMediaViewer.ts | 5 +- src/lib/appManagers/appMessagesManager.ts | 237 ++++------------ src/lib/appManagers/appSidebarLeft.ts | 102 +++++-- src/lib/appManagers/appSidebarRight.ts | 10 +- src/lib/appManagers/appStateManager.ts | 195 +++++++++++++ src/lib/appManagers/appUsersManager.ts | 48 +++- src/lib/config.ts | 2 +- src/lib/lottieLoader.ts | 24 +- src/lib/mtproto/networker.ts | 1 + src/lib/mtproto/transports/websocket.ts | 16 +- src/lib/richtextprocessor.js | 4 +- src/lib/utils.js | 6 +- src/pages/pageAuthCode.ts | 10 +- src/pages/pagePassword.ts | 29 +- src/scss/partials/_chatlist.scss | 2 +- src/scss/partials/_leftSidebar.scss | 189 ++++++++++--- src/scss/partials/_rightSidebar.scss | 2 +- src/scss/partials/_selector.scss | 4 + src/scss/partials/pages/_pages.scss | 47 ++++ src/scss/partials/popups/_mediaAttacher.scss | 6 + src/scss/style.scss | 26 +- 39 files changed, 918 insertions(+), 944 deletions(-) delete mode 100644 src/lib/MP4Source.js delete mode 100644 src/lib/MP4Sourceee.ts create mode 100644 src/lib/appManagers/appStateManager.ts diff --git a/.gitignore b/.gitignore index d23e431f..9069b69e 100644 --- a/.gitignore +++ b/.gitignore @@ -4,4 +4,5 @@ __pycache__ dist .DS_Store stats.json -certs \ No newline at end of file +certs +src/rlottie.github.io \ No newline at end of file diff --git a/src/components/appSearch.ts b/src/components/appSearch.ts index ca2d84b2..1c1d6191 100644 --- a/src/components/appSearch.ts +++ b/src/components/appSearch.ts @@ -50,9 +50,10 @@ export class SearchGroup { export default class AppSearch { private minMsgID = 0; - private loadedCount = 0; - private foundCount = 0; + private loadedCount = -1; + private foundCount = -1; private offsetRate = 0; + private loadedContacts = false; private searchPromise: Promise = null; private searchTimeout: number = 0; @@ -107,9 +108,10 @@ export default class AppSearch { } this.minMsgID = 0; - this.loadedCount = 0; - this.foundCount = 0; + this.loadedCount = -1; + this.foundCount = -1; this.offsetRate = 0; + this.loadedContacts = false; for(let i in this.searchGroups) { this.searchGroups[i].clear(); @@ -129,25 +131,27 @@ export default class AppSearch { public searchMore() { if(this.searchPromise) return this.searchPromise; - let query = this.query; + const query = this.query; if(!query.trim()) { this.onSearch && this.onSearch(0); return; } - if(this.loadedCount != 0 && this.loadedCount >= this.foundCount) { + if(this.foundCount != -1 && this.loadedCount >= this.foundCount) { return Promise.resolve(); } - let maxID = appMessagesIDsManager.getMessageIDInfo(this.minMsgID)[0]; + const maxID = appMessagesIDsManager.getMessageIDInfo(this.minMsgID)[0] || 0; - if(!this.peerID && !maxID) { + if(!this.peerID && !maxID && !this.loadedContacts) { appUsersManager.searchContacts(query, 20).then((contacts: any) => { if(this.searchInput.value != query) { return; } + this.loadedContacts = true; + ///////this.log('input search contacts result:', contacts); let setResults = (results: any, group: SearchGroup, showMembersCount = false) => { @@ -205,19 +209,19 @@ export default class AppSearch { return; } - //console.log('input search result:', this.peerID, query, null, maxID, 20, res); + console.log('input search result:', this.peerID, query, null, maxID, 20, res); - let {count, history, next_rate} = res; + const {count, history, next_rate} = res; if(history[0] == this.minMsgID) { history.shift(); } - let searchGroup = this.searchGroups['messages']; + const searchGroup = this.searchGroups['messages']; searchGroup.setActive(); history.forEach((msgID: number) => { - let message = appMessagesManager.getMessage(msgID); + const message = appMessagesManager.getMessage(msgID); let originalDialog = appMessagesManager.getDialogByPeerID(message.peerID)[0]; if(!originalDialog) { @@ -230,15 +234,18 @@ export default class AppSearch { } as any; } - let {dialog, dom} = appDialogsManager.addDialog(originalDialog, this.scrollable/* searchGroup.list */, false); + const {dialog, dom} = appDialogsManager.addDialog(originalDialog, this.scrollable/* searchGroup.list */, false); appDialogsManager.setLastMessage(dialog, message, dom, query); }); this.minMsgID = history[history.length - 1]; this.offsetRate = next_rate; this.loadedCount += history.length; + if(this.loadedCount == -1) { + this.loadedCount = 0; + } - if(!this.foundCount) { + if(this.foundCount == -1) { this.foundCount = count; this.onSearch && this.onSearch(this.foundCount); } diff --git a/src/components/appSelectPeers.ts b/src/components/appSelectPeers.ts index 82c871aa..813b7ca4 100644 --- a/src/components/appSelectPeers.ts +++ b/src/components/appSelectPeers.ts @@ -208,7 +208,7 @@ export class AppSelectPeers { } public add(peerID: any, title?: string) { - console.trace('add'); + //console.trace('add'); const div = document.createElement('div'); div.classList.add('selector-user', 'scale-in'); diff --git a/src/components/audio.ts b/src/components/audio.ts index 7479807c..1439f394 100644 --- a/src/components/audio.ts +++ b/src/components/audio.ts @@ -271,6 +271,7 @@ function wrapAudio(doc: MTDocument, audioEl: AudioElement) { export default class AudioElement extends HTMLElement { public audio: HTMLAudioElement; + public preloader: ProgressivePreloader; private attachedHandlers: {[name: string]: any[]} = {}; private onTypeDisconnect: () => void; @@ -303,7 +304,7 @@ export default class AudioElement extends HTMLElement { const audioTimeDiv = this.querySelector('.audio-time') as HTMLDivElement; audioTimeDiv.innerHTML = durationStr; - let preloader: ProgressivePreloader; + let preloader: ProgressivePreloader = this.preloader; let promise: CancellablePromise; const onLoad = () => { @@ -377,7 +378,8 @@ export default class AudioElement extends HTMLElement { this.addEventListener('click', onClick); this.click(); } else { - onLoad(); + this.preloader.attach(this.querySelector('.audio-download'), false); + //onLoad(); } } @@ -402,6 +404,8 @@ export default class AudioElement extends HTMLElement { delete this.attachedHandlers[name]; } + + this.preloader = null; } static get observedAttributes(): string[] { diff --git a/src/components/chatInput.ts b/src/components/chatInput.ts index 9f2ea70c..7a65717b 100644 --- a/src/components/chatInput.ts +++ b/src/components/chatInput.ts @@ -151,7 +151,7 @@ export class ChatInput { }).then((webpage: any) => { appWebPagesManager.saveWebPage(webpage); if(this.lastUrl != url) return; - console.log('got webpage: ', webpage); + //console.log('got webpage: ', webpage); this.setTopInfo(webpage.site_name || webpage.title, webpage.description || webpage.url); @@ -235,7 +235,7 @@ export class ChatInput { return new Promise((resolve, reject) => { let params: SendFileParams = {}; params.file = file; - console.log('selected file:', file, typeof(file), willAttach); + //console.log('selected file:', file, typeof(file), willAttach); let itemDiv = document.createElement('div'); switch(willAttach.type) { case 'media': { @@ -249,6 +249,8 @@ export class ChatInput { source.src = params.objectURL = URL.createObjectURL(file); video.autoplay = false; video.controls = false; + video.muted = true; + video.setAttribute('playsinline', ''); video.onloadeddata = () => { params.width = video.videoWidth; @@ -283,6 +285,8 @@ export class ChatInput { type: file.type.indexOf('image/') !== -1 ? 'photo' : 'doc' } as any, false, true); + params.objectURL = URL.createObjectURL(file); + itemDiv.append(docDiv); resolve(itemDiv); break; @@ -364,7 +368,7 @@ export class ChatInput { this.attachMediaPopUp.mediaContainer.append(div); } - console.log('chatInput album layout:', layout); + //console.log('chatInput album layout:', layout); } else { let params = willAttach.sendFileDetails[0]; let div = results[0]; @@ -407,11 +411,13 @@ export class ChatInput { }, false); this.attachMenu.media.addEventListener('click', () => { + this.fileInput.setAttribute('accept', 'image/*, video/*'); willAttach.type = 'media'; this.fileInput.click(); }); this.attachMenu.document.addEventListener('click', () => { + this.fileInput.removeAttribute('accept'); willAttach.type = 'document'; this.fileInput.click(); }); @@ -451,7 +457,7 @@ export class ChatInput { let caption = this.attachMediaPopUp.captionInput.value; willAttach.isMedia = willAttach.type == 'media'; - console.log('will send files with options:', willAttach); + //console.log('will send files with options:', willAttach); let peerID = appImManager.peerID; @@ -471,7 +477,8 @@ export class ChatInput { let promises = willAttach.sendFileDetails.map(params => { let promise = appMessagesManager.sendFile(peerID, params.file, Object.assign({ - isMedia: willAttach.isMedia, + //isMedia: willAttach.isMedia, + isMedia: true, caption, replyToMsgID: this.replyToMsgID }, params)); diff --git a/src/components/emoticonsDropdown.ts b/src/components/emoticonsDropdown.ts index b410166e..e5a736b6 100644 --- a/src/components/emoticonsDropdown.ts +++ b/src/components/emoticonsDropdown.ts @@ -3,7 +3,7 @@ import { horizontalMenu, renderImageFromUrl, putPreloader } from "./misc"; import lottieLoader from "../lib/lottieLoader"; //import Scrollable from "./scrollable"; import Scrollable from "./scrollable_new"; -import { findUpTag, whichChild, calcImageInBox } from "../lib/utils"; +import { findUpTag, whichChild, calcImageInBox, emojiUnicode } from "../lib/utils"; import { RichTextProcessor } from "../lib/richtextprocessor"; import appStickersManager, { MTStickerSet } from "../lib/appManagers/appStickersManager"; //import apiManager from '../lib/mtproto/apiManager'; @@ -16,6 +16,7 @@ import Config, { touchSupport } from "../lib/config"; import { MTDocument } from "../types"; import animationIntersector from "./animationIntersector"; import appSidebarRight from "../lib/appManagers/appSidebarRight"; +import appStateManager from "../lib/appManagers/appStateManager"; export const EMOTICONSSTICKERGROUP = 'emoticons-dropdown'; @@ -27,6 +28,12 @@ interface EmoticonsTab { class EmojiTab implements EmoticonsTab { public content: HTMLElement; + private recent: string[] = []; + private recentItemsDiv: HTMLElement; + + private heights: number[] = []; + private scroll: Scrollable; + init() { this.content = document.getElementById('content-emoji') as HTMLDivElement; @@ -37,7 +44,9 @@ class EmojiTab implements EmoticonsTab { const sorted: { [category: string]: string[] - } = {}; + } = { + 'Recent': [] + }; for(const emoji in Config.Emoji) { const details = Config.Emoji[emoji]; @@ -72,46 +81,48 @@ class EmojiTab implements EmoticonsTab { const emojis = sorted[category]; emojis.forEach(emoji => { - //const emoji = details.unified; - //const emoji = (details.unified as string).split('-') - //.reduce((prev, curr) => prev + String.fromCodePoint(parseInt(curr, 16)), ''); + /* if(emojiUnicode(emoji) == '1f481-200d-2642') { + console.log('append emoji', emoji, emojiUnicode(emoji)); + } */ - const spanEmoji = document.createElement('span'); - const kek = RichTextProcessor.wrapRichText(emoji); + this.appendEmoji(emoji/* .replace(/[\ufe0f\u2640\u2642\u2695]/g, '') */, itemsDiv); - if(!kek.includes('emoji')) { - console.log(emoji, kek, spanEmoji, emoji.length, new TextEncoder().encode(emoji)); - return; - } - - //console.log(kek); - - spanEmoji.innerHTML = kek; - - //spanEmoji = spanEmoji.firstElementChild as HTMLSpanElement; - //spanEmoji.setAttribute('emoji', emoji); - itemsDiv.appendChild(spanEmoji); + /* if(category == 'Smileys & Emotion') { + console.log('appended emoji', emoji, itemsDiv.children[itemsDiv.childElementCount - 1].innerHTML, emojiUnicode(emoji)); + } */ }); divs[category] = div; } //console.timeEnd('emojiParse'); - const heights: number[] = [0]; - - let prevCategoryIndex = 1; + let prevCategoryIndex = 0; const menu = this.content.previousElementSibling.firstElementChild as HTMLUListElement; - const emojiScroll = new Scrollable(this.content, 'y', 'EMOJI', null); + const emojiScroll = this.scroll = new Scrollable(this.content, 'y', 'EMOJI', null); emojiScroll.container.addEventListener('scroll', (e) => { - prevCategoryIndex = EmoticonsDropdown.contentOnScroll(menu, heights, prevCategoryIndex, emojiScroll.container); + prevCategoryIndex = EmoticonsDropdown.contentOnScroll(menu, this.heights, prevCategoryIndex, emojiScroll.container); }); //emojiScroll.setVirtualContainer(emojiScroll.container); const preloader = putPreloader(this.content, true); - setTimeout(() => { + Promise.all([ + new Promise((resolve) => setTimeout(resolve, 200)), + + appStateManager.getState().then(state => { + if(Array.isArray(state.recentEmoji)) { + this.recent = state.recentEmoji; + } + }) + ]).then(() => { preloader.remove(); + this.recentItemsDiv = divs['Recent'].querySelector('.category-items'); + for(const emoji of this.recent) { + this.appendEmoji(emoji, this.recentItemsDiv); + } + + categories.unshift('Recent'); categories.map(category => { const div = divs[category]; @@ -123,27 +134,86 @@ class EmojiTab implements EmoticonsTab { return div; }).forEach(div => { //console.log('emoji heights push: ', (heights[heights.length - 1] || 0) + div.scrollHeight, div, div.scrollHeight); - heights.push((heights[heights.length - 1] || 0) + div.scrollHeight); + this.heights.push((this.heights[this.heights.length - 1] || 0) + div.scrollHeight); }); - }, 200); + }); this.content.addEventListener('click', this.onContentClick); - EmoticonsDropdown.menuOnClick(menu, heights, emojiScroll); + EmoticonsDropdown.menuOnClick(menu, this.heights, emojiScroll); this.init = null; } + private appendEmoji(emoji: string, container: HTMLElement, prepend = false) { + //const emoji = details.unified; + //const emoji = (details.unified as string).split('-') + //.reduce((prev, curr) => prev + String.fromCodePoint(parseInt(curr, 16)), ''); + + const spanEmoji = document.createElement('span'); + const kek = RichTextProcessor.wrapEmojiText(emoji); + + /* if(!kek.includes('emoji')) { + console.log(emoji, kek, spanEmoji, emoji.length, new TextEncoder().encode(emoji), emojiUnicode(emoji)); + return; + } */ + + //console.log(kek); + + spanEmoji.innerHTML = kek; + + //spanEmoji = spanEmoji.firstElementChild as HTMLSpanElement; + //spanEmoji.setAttribute('emoji', emoji); + if(prepend) container.prepend(spanEmoji); + else container.appendChild(spanEmoji); + } + + private getEmojiFromElement(element: HTMLElement) { + if(element.tagName == 'SPAN' && !element.classList.contains('emoji')) { + element = element.firstElementChild as HTMLElement; + } + + return element.getAttribute('alt') || element.innerText; + } + onContentClick = (e: MouseEvent) => { - let target = e.target as any; + let target = e.target as HTMLElement; //if(target.tagName != 'SPAN') return; if(target.tagName == 'SPAN' && !target.classList.contains('emoji')) { - target = target.firstElementChild; + target = target.firstElementChild as HTMLElement; } else if(target.tagName == 'DIV') return; //console.log('contentEmoji div', target); appImManager.chatInputC.messageInput.innerHTML += target.outerHTML; + // Recent + const emoji = this.getEmojiFromElement(target); + (Array.from(this.recentItemsDiv.children) as HTMLElement[]).forEach((el, idx) => { + const _emoji = this.getEmojiFromElement(el); + if(emoji == _emoji) { + el.remove(); + } + }); + const scrollHeight = this.recentItemsDiv.scrollHeight; + this.appendEmoji(emoji, this.recentItemsDiv, true); + + // нужно поставить новые размеры для скролла + if(this.recentItemsDiv.scrollHeight != scrollHeight) { + this.heights.length = 0; + (Array.from(this.scroll.container.children) as HTMLElement[]).forEach(div => { + this.heights.push((this.heights[this.heights.length - 1] || 0) + div.scrollHeight); + }); + } + + this.recent.findAndSplice(e => e == emoji); + this.recent.unshift(emoji); + if(this.recent.length > 36) { + this.recent.length = 36; + } + + appStateManager.pushToState('recentEmoji', this.recent); + + // Append to input const event = new Event('input', {bubbles: true, cancelable: true}); appImManager.chatInputC.messageInput.dispatchEvent(event); }; @@ -685,6 +755,7 @@ class EmoticonsDropdown { if(appImManager.chatInputC.sendMessageWithDocument(fileID)) { /* dropdown.classList.remove('active'); toggleEl.classList.remove('active'); */ + emoticonsDropdown.toggle(false); } else { console.warn('got no doc by id:', fileID); } diff --git a/src/components/preloader.ts b/src/components/preloader.ts index 083a6252..95e10d6d 100644 --- a/src/components/preloader.ts +++ b/src/components/preloader.ts @@ -111,8 +111,10 @@ export default class ProgressivePreloader { return; } - let totalLength = this.circle.getTotalLength(); - //console.log('setProgress', (percents / 100 * totalLength)); - this.circle.style.strokeDasharray = '' + Math.max(5, percents / 100 * totalLength) + ', 200'; + try { + let totalLength = this.circle.getTotalLength(); + //console.log('setProgress', (percents / 100 * totalLength)); + this.circle.style.strokeDasharray = '' + Math.max(5, percents / 100 * totalLength) + ', 200'; + } catch(err) {} } } diff --git a/src/components/sidebarLeft/chatFolders.ts b/src/components/sidebarLeft/chatFolders.ts index 6ca54669..531a9b91 100644 --- a/src/components/sidebarLeft/chatFolders.ts +++ b/src/components/sidebarLeft/chatFolders.ts @@ -143,6 +143,8 @@ export default class AppChatFoldersTab implements SliderTab { delete this.filtersRendered[filter.id] } }); + + this.getSuggestedFilters(); } private getSuggestedFilters() { diff --git a/src/components/sidebarLeft/settings.ts b/src/components/sidebarLeft/settings.ts index 59ad0d24..093c0d0a 100644 --- a/src/components/sidebarLeft/settings.ts +++ b/src/components/sidebarLeft/settings.ts @@ -31,7 +31,10 @@ export default class AppSettingsTab implements SliderTab { }); this.logOutBtn.addEventListener('click', (e) => { - apiManager.logOut(); + apiManager.logOut().finally(() => { + localStorage.clear(); + location.reload(); + }); }); this.buttons.edit.addEventListener('click', () => { diff --git a/src/emoji.json b/src/emoji.json index f4511eab..cd6e32da 100644 --- a/src/emoji.json +++ b/src/emoji.json @@ -1 +1 @@ -{"#⃣":6365,"*⃣":6366,"0⃣":6367,"1⃣":6368,"2⃣":6369,"3⃣":6370,"4⃣":6371,"5⃣":6372,"6⃣":6373,"7⃣":6374,"8⃣":6375,"9⃣":6376,"©":6362,"®":6363,"🀄":573,"🃏":572,"🅰":6383,"🅱":6385,"🅾":6394,"🅿":6396,"🆎":6384,"🆑":6386,"🆒":6387,"🆓":6388,"🆔":6390,"🆕":6392,"🆖":6393,"🆗":6395,"🆘":6397,"🆙":6398,"🆚":6399,"🇦🇨":78,"🇦🇩":79,"🇦🇪":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,"🇩🇿":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,"🇬🇶":7100,"🇬🇷":7101,"🇬🇸":7102,"🇬🇹":7103,"🇬🇺":7104,"🇬🇼":7105,"🇬🇾":7106,"🇭🇰":7107,"🇭🇲":7108,"🇭🇳":7109,"🇭🇷":7110,"🇭🇹":7111,"🇭🇺":7112,"🇮🇨":7113,"🇮🇩":7114,"🇮🇪":7115,"🇮🇱":7116,"🇮🇲":7117,"🇮🇳":7118,"🇮🇴":7119,"🇮🇶":7120,"🇮🇷":7121,"🇮🇸":7122,"🇮🇹":7123,"🇯🇪":7124,"🇯🇲":7125,"🇯🇴":7126,"🇯🇵":7127,"🇰🇪":7128,"🇰🇬":7129,"🇰🇭":7130,"🇰🇮":7131,"🇰🇲":7132,"🇰🇳":7133,"🇰🇵":7134,"🇰🇷":7135,"🇰🇼":7136,"🇰🇾":7137,"🇰🇿":7138,"🇱🇦":7139,"🇱🇧":7140,"🇱🇨":7141,"🇱🇮":7142,"🇱🇰":7143,"🇱🇷":7144,"🇱🇸":7145,"🇱🇹":7146,"🇱🇺":7147,"🇱🇻":7148,"🇱🇾":7149,"🇲🇦":7150,"🇲🇨":7151,"🇲🇩":7152,"🇲🇪":7153,"🇲🇫":7154,"🇲🇬":7155,"🇲🇭":7156,"🇲🇰":7157,"🇲🇱":7158,"🇲🇲":7159,"🇲🇳":7160,"🇲🇴":7161,"🇲🇵":7162,"🇲🇶":7163,"🇲🇷":7164,"🇲🇸":7165,"🇲🇹":7166,"🇲🇺":7167,"🇲🇻":7168,"🇲🇼":7169,"🇲🇽":7170,"🇲🇾":7171,"🇲🇿":7172,"🇳🇦":7173,"🇳🇨":7174,"🇳🇪":7175,"🇳🇫":7176,"🇳🇬":7177,"🇳🇮":7178,"🇳🇱":7179,"🇳🇴":7180,"🇳🇵":7181,"🇳🇷":7182,"🇳🇺":7183,"🇳🇿":7184,"🇴🇲":7185,"🇵🇦":7186,"🇵🇪":7187,"🇵🇫":7188,"🇵🇬":7189,"🇵🇭":7190,"🇵🇰":7191,"🇵🇱":7192,"🇵🇲":7193,"🇵🇳":7194,"🇵🇷":7195,"🇵🇸":7196,"🇵🇹":7197,"🇵🇼":7198,"🇵🇾":7199,"🇶🇦":7200,"🇷🇪":7201,"🇷🇴":7202,"🇷🇸":7203,"🇷🇺":7204,"🇷🇼":7205,"🇸🇦":7206,"🇸🇧":7207,"🇸🇨":7208,"🇸🇩":7209,"🇸🇪":7210,"🇸🇬":7211,"🇸🇭":7212,"🇸🇮":7213,"🇸🇯":7214,"🇸🇰":7215,"🇸🇱":7216,"🇸🇲":7217,"🇸🇳":7218,"🇸🇴":7219,"🇸🇷":7220,"🇸🇸":7221,"🇸🇹":7222,"🇸🇻":7223,"🇸🇽":7224,"🇸🇾":7225,"🇸🇿":7226,"🇹🇦":7227,"🇹🇨":7228,"🇹🇩":7229,"🇹🇫":7230,"🇹🇬":7231,"🇹🇭":7232,"🇹🇯":7233,"🇹🇰":7234,"🇹🇱":7235,"🇹🇲":7236,"🇹🇳":7237,"🇹🇴":7238,"🇹🇷":7239,"🇹🇹":7240,"🇹🇻":7241,"🇹🇼":7242,"🇹🇿":7243,"🇺🇦":7244,"🇺🇬":7245,"🇺🇲":7246,"🇺🇳":7247,"🇺🇸":7248,"🇺🇾":7249,"🇺🇿":7250,"🇻🇦":7251,"🇻🇨":7252,"🇻🇪":7253,"🇻🇬":7254,"🇻🇮":7255,"🇻🇳":7256,"🇻🇺":7257,"🇼🇫":7258,"🇼🇸":7259,"🇽🇰":7260,"🇾🇪":7261,"🇾🇹":7262,"🇿🇦":7263,"🇿🇲":7264,"🇿🇼":7265,"🈁":6400,"🈂":6401,"🈚":6407,"🈯":6404,"🈲":6408,"🈳":6412,"🈴":6411,"🈵":6416,"🈶":6403,"🈷":6402,"🈸":6410,"🈹":6406,"🈺":6415,"🉐":6405,"🉑":6409,"🌀":4197,"🌁":449,"🌂":4199,"🌃":450,"🌄":452,"🌅":453,"🌆":454,"🌇":455,"🌈":4198,"🌉":456,"🌊":4210,"🌋":410,"🌌":4184,"🌍":41,"🌎":42,"🌏":43,"🌐":44,"🌑":4164,"🌒":4165,"🌓":4166,"🌔":4167,"🌕":4168,"🌖":4169,"🌗":4170,"🌘":4171,"🌙":4172,"🌚":4173,"🌛":4174,"🌜":4175,"🌝":4178,"🌞":4179,"🌟":4182,"🌠":4183,"🌡":4176,"🌤":4188,"🌥":4189,"🌦":4190,"🌧":4191,"🌨":4192,"🌩":4193,"🌪":4194,"🌫":4195,"🌬":4196,"🌭":347,"🌮":349,"🌯":350,"🌰":331,"🌱":2116,"🌲":2117,"🌳":2118,"🌴":2119,"🌵":2120,"🌶":323,"🌷":2115,"🌸":2107,"🌹":2110,"🌺":2112,"🌻":2113,"🌼":2114,"🌽":322,"🌾":2121,"🌿":2122,"🍀":2124,"🍁":2125,"🍂":2126,"🍃":2127,"🍄":329,"🍅":316,"🍆":319,"🍇":31,"🍈":32,"🍉":33,"🍊":34,"🍋":35,"🍌":36,"🍍":37,"🍎":39,"🍏":310,"🍐":311,"🍑":312,"🍒":313,"🍓":314,"🍔":344,"🍕":346,"🍖":340,"🍗":341,"🍘":364,"🍙":365,"🍚":366,"🍛":367,"🍜":368,"🍝":369,"🍞":332,"🍟":345,"🍠":370,"🍡":376,"🍢":371,"🍣":372,"🍤":373,"🍥":374,"🍦":385,"🍧":386,"🍨":387,"🍩":388,"🍪":389,"🍫":394,"🍬":395,"🍭":396,"🍮":397,"🍯":398,"🍰":391,"🍱":363,"🍲":356,"🍳":354,"🍴":3118,"🍵":3102,"🍶":3103,"🍷":3105,"🍸":3106,"🍹":3107,"🍺":3108,"🍻":3109,"🍼":399,"🍽":3117,"🍾":3104,"🍿":359,"🎀":517,"🎁":518,"🎂":390,"🎃":51,"🎄":52,"🎅":1326,"🎆":53,"🎇":54,"🎈":57,"🎉":58,"🎊":59,"🎋":510,"🎌":73,"🎍":511,"🎎":512,"🎏":513,"🎐":514,"🎑":515,"🎒":625,"🎓":637,"🎖":522,"🎗":519,"🎙":656,"🎚":657,"🎛":658,"🎞":689,"🎟":520,"🎠":458,"🎡":459,"🎢":460,"🎣":549,"🎤":659,"🎥":688,"🎦":6324,"🎧":660,"🎨":577,"🎩":636,"🎪":462,"🎫":521,"🎬":691,"🎭":575,"🎮":561,"🎯":555,"🎰":563,"🎱":558,"🎲":564,"🎳":537,"🎴":574,"🎵":654,"🎶":655,"🎷":662,"🎸":663,"🎹":664,"🎺":665,"🎻":666,"🎼":653,"🎽":551,"🎾":535,"🎿":552,"🏀":531,"🏁":71,"🏂":1397,"🏃‍♀":1381,"🏃‍♂":1380,"🏃":1379,"🏄‍♀":1403,"🏄‍♂":1402,"🏄":1401,"🏅":524,"🏆":523,"🏇":1395,"🏈":533,"🏉":534,"🏊‍♀":1409,"🏊‍♂":1408,"🏊":1407,"🏋‍♀":1415,"🏋‍♂":1414,"🏋":1413,"🏌‍♀":1400,"🏌‍♂":1399,"🏌":1398,"🏍":492,"🏎":491,"🏏":538,"🏐":532,"🏑":539,"🏒":540,"🏓":542,"🏔":48,"🏕":412,"🏖":413,"🏗":419,"🏘":421,"🏙":451,"🏚":422,"🏛":418,"🏜":414,"🏝":415,"🏞":416,"🏟":417,"🏠":423,"🏡":424,"🏢":425,"🏣":426,"🏤":427,"🏥":428,"🏦":429,"🏧":6234,"🏨":430,"🏩":431,"🏪":432,"🏫":433,"🏬":434,"🏭":435,"🏮":6102,"🏯":436,"🏰":437,"🏳‍🌈":76,"🏳":75,"🏴‍☠":77,"🏴󠁧󠁢󠁥󠁮󠁧󠁿":7266,"🏴󠁧󠁢󠁳󠁣󠁴󠁿":7267,"🏴󠁧󠁢󠁷󠁬󠁳󠁿":7268,"🏴":74,"🏵":2109,"🏷":6120,"🏸":543,"🏹":6189,"🏺":3121,"🏻":81,"🏼":82,"🏽":83,"🏾":84,"🏿":85,"🐀":244,"🐁":243,"🐂":225,"🐃":226,"🐄":227,"🐅":217,"🐆":218,"🐇":247,"🐈":214,"🐉":282,"🐊":277,"🐋":286,"🐌":294,"🐍":280,"🐎":220,"🐏":232,"🐐":234,"🐑":233,"🐒":22,"🐓":262,"🐔":261,"🐕‍🦺":28,"🐕":26,"🐖":229,"🐗":230,"🐘":239,"🐙":292,"🐚":293,"🐛":296,"🐜":297,"🐝":298,"🐞":299,"🐟":288,"🐠":289,"🐡":290,"🐢":278,"🐣":263,"🐤":264,"🐥":265,"🐦":266,"🐧":267,"🐨":252,"🐩":29,"🐪":235,"🐫":236,"🐬":287,"🐭":242,"🐮":224,"🐯":216,"🐰":246,"🐱":213,"🐲":281,"🐳":285,"🐴":219,"🐵":21,"🐶":25,"🐷":228,"🐸":276,"🐹":245,"🐺":210,"🐻":251,"🐼":253,"🐽":231,"🐾":259,"🐿":248,"👀":1194,"👁‍🗨":1145,"👁":1195,"👂":1188,"👃":1190,"👄":1197,"👅":1196,"👆":1164,"👇":1166,"👈":1162,"👉":1163,"👊":1171,"👋":1150,"👌":1155,"👍":1168,"👎":1169,"👏":1174,"👐":1176,"👑":634,"👒":635,"👓":61,"👔":66,"👕":67,"👖":68,"👗":613,"👘":614,"👙":619,"👚":620,"👛":621,"👜":622,"👝":623,"👞":626,"👟":627,"👠":630,"👡":631,"👢":633,"👣":1483,"👤":1481,"👥":1482,"👦":1200,"👧":1201,"👨‍🌾":1267,"👨‍🍳":1270,"👨‍🎓":1258,"👨‍🎤":1288,"👨‍🎨":1291,"👨‍🏫":1261,"👨‍🏭":1276,"👨‍👦‍👦":1471,"👨‍👦":1470,"👨‍👧‍👦":1473,"👨‍👧‍👧":1474,"👨‍👧":1472,"👨‍👨‍👦":1460,"👨‍👨‍👦‍👦":1463,"👨‍👨‍👧":1461,"👨‍👨‍👧‍👦":1462,"👨‍👨‍👧‍👧":1464,"👨‍👩‍👦":1455,"👨‍👩‍👦‍👦":1458,"👨‍👩‍👧":1456,"👨‍👩‍👧‍👦":1457,"👨‍👩‍👧‍👧":1459,"👨‍💻":1285,"👨‍💼":1279,"👨‍🔧":1273,"👨‍🔬":1282,"👨‍🚀":1297,"👨‍🚒":1300,"👨‍🦯":1371,"👨‍🦰":1206,"👨‍🦱":1207,"👨‍🦲":1209,"👨‍🦳":1208,"👨‍🦼":1374,"👨‍🦽":1377,"👨‍⚕":1255,"👨‍⚖":1264,"👨‍✈":1294,"👨‍❤‍👨":1452,"👨‍❤‍💋‍👨":1448,"👨":1204,"👩‍🌾":1268,"👩‍🍳":1271,"👩‍🎓":1259,"👩‍🎤":1289,"👩‍🎨":1292,"👩‍🏫":1262,"👩‍🏭":1277,"👩‍👦‍👦":1476,"👩‍👦":1475,"👩‍👧‍👦":1478,"👩‍👧‍👧":1479,"👩‍👧":1477,"👩‍👩‍👦":1465,"👩‍👩‍👦‍👦":1468,"👩‍👩‍👧":1466,"👩‍👩‍👧‍👦":1467,"👩‍👩‍👧‍👧":1469,"👩‍💻":1286,"👩‍💼":1280,"👩‍🔧":1274,"👩‍🔬":1283,"👩‍🚀":1298,"👩‍🚒":1301,"👩‍🦯":1372,"👩‍🦰":1211,"👩‍🦱":1213,"👩‍🦲":1217,"👩‍🦳":1215,"👩‍🦼":1375,"👩‍🦽":1378,"👩‍⚕":1256,"👩‍⚖":1265,"👩‍✈":1295,"👩‍❤‍👨":1451,"👩‍❤‍👩":1453,"👩‍❤‍💋‍👨":1447,"👩‍❤‍💋‍👩":1449,"👩":1210,"👪":1454,"👫":1444,"👬":1445,"👭":1443,"👮‍♀":1304,"👮‍♂":1303,"👮":1302,"👯‍♀":1387,"👯‍♂":1386,"👯":1385,"👰":1322,"👱‍♀":1219,"👱‍♂":1220,"👱":1203,"👲":1319,"👳‍♀":1318,"👳‍♂":1317,"👳":1316,"👴":1222,"👵":1223,"👶":1198,"👷‍♀":1313,"👷‍♂":1312,"👷":1311,"👸":1315,"👹":197,"👺":198,"👻":199,"👼":1325,"👽":1100,"👾":1101,"👿":192,"💀":193,"💁‍♀":1238,"💁‍♂":1237,"💁":1236,"💂‍♀":1310,"💂‍♂":1309,"💂":1308,"💃":1382,"💄":641,"💅":1181,"💆‍♀":1357,"💆‍♂":1356,"💆":1355,"💇‍♀":1360,"💇‍♂":1359,"💇":1358,"💈":461,"💉":6208,"💊":6210,"💋":1115,"💌":1116,"💍":642,"💎":643,"💏":1446,"💐":2106,"💑":1450,"💒":438,"💓":1121,"💔":1126,"💕":1123,"💖":1119,"💗":1120,"💘":1117,"💙":1131,"💚":1130,"💛":1129,"💜":1132,"💝":1118,"💞":1122,"💟":1124,"💠":6447,"💡":6100,"💢":1137,"💣":1143,"💤":1149,"💥":1138,"💦":1140,"💧":4209,"💨":1141,"💩":195,"💪":1183,"💫":1139,"💬":1144,"💭":1148,"💮":2108,"💯":1136,"💰":6121,"💱":6130,"💲":6131,"💳":6127,"💴":6122,"💵":6123,"💶":6124,"💷":6125,"💸":6126,"💹":6129,"💺":4123,"💻":677,"💼":6152,"💽":683,"💾":684,"💿":685,"📀":686,"📁":6153,"📂":6154,"📃":6113,"📄":6115,"📅":6156,"📆":6157,"📇":6160,"📈":6161,"📉":6162,"📊":6163,"📋":6164,"📌":6165,"📍":6166,"📎":6167,"📏":6169,"📐":6170,"📑":6118,"📒":6112,"📓":6111,"📔":6104,"📕":6105,"📖":6106,"📗":6107,"📘":6108,"📙":6109,"📚":6110,"📛":6337,"📜":6114,"📝":6151,"📞":672,"📟":673,"📠":674,"📡":6207,"📢":648,"📣":649,"📤":6136,"📥":6137,"📦":6138,"📧":6133,"📨":6134,"📩":6135,"📪":6140,"📫":6139,"📬":6141,"📭":6142,"📮":6143,"📯":650,"📰":6116,"📱":669,"📲":670,"📳":6328,"📴":6329,"📵":6256,"📶":6327,"📷":693,"📸":694,"📹":695,"📺":692,"📻":661,"📼":696,"📽":690,"📿":640,"🔀":6306,"🔁":6307,"🔂":6308,"🔃":6274,"🔄":6275,"🔅":6325,"🔆":6326,"🔇":644,"🔈":645,"🔉":646,"🔊":647,"🔋":675,"🔌":676,"🔍":697,"🔎":698,"🔏":6177,"🔐":6178,"🔑":6179,"🔒":6175,"🔓":6176,"🔔":651,"🔕":652,"🔖":6119,"🔗":6197,"🔘":6448,"🔙":6276,"🔚":6277,"🔛":6278,"🔜":6279,"🔝":6280,"🔞":6257,"🔟":6377,"🔠":6378,"🔡":6379,"🔢":6380,"🔣":6381,"🔤":6382,"🔥":4208,"🔦":6101,"🔧":6191,"🔨":6181,"🔩":6192,"🔪":3120,"🔫":6188,"🔬":6205,"🔭":6206,"🔮":559,"🔯":6292,"🔰":6338,"🔱":6336,"🔲":6450,"🔳":6449,"🔴":6417,"🔵":6421,"🔶":6441,"🔷":6442,"🔸":6443,"🔹":6444,"🔺":6445,"🔻":6446,"🔼":6316,"🔽":6318,"🕉":6283,"🕊":268,"🕋":446,"🕌":442,"🕍":444,"🕎":6291,"🕐":4142,"🕑":4144,"🕒":4146,"🕓":4148,"🕔":4150,"🕕":4152,"🕖":4154,"🕗":4156,"🕘":4158,"🕙":4160,"🕚":4162,"🕛":4140,"🕜":4143,"🕝":4145,"🕞":4147,"🕟":4149,"🕠":4151,"🕡":4153,"🕢":4155,"🕣":4157,"🕤":4159,"🕥":4161,"🕦":4163,"🕧":4141,"🕯":699,"🕰":4139,"🕳":1142,"🕴":1384,"🕵‍♀":1307,"🕵‍♂":1306,"🕵":1305,"🕶":62,"🕷":2101,"🕸":2102,"🕹":562,"🕺":1383,"🖇":6168,"🖊":6148,"🖋":6147,"🖌":6149,"🖍":6150,"🖐":1152,"🖕":1165,"🖖":1154,"🖤":1134,"🖥":678,"🖨":679,"🖱":681,"🖲":682,"🖼":576,"🗂":6155,"🗃":6172,"🗄":6173,"🗑":6174,"🗒":6158,"🗓":6159,"🗜":6194,"🗝":6180,"🗞":6117,"🗡":6186,"🗣":1480,"🗨":1146,"🗯":1147,"🗳":6144,"🗺":45,"🗻":411,"🗼":439,"🗽":440,"🗾":46,"🗿":6233,"😀":11,"😁":14,"😂":18,"😃":12,"😄":13,"😅":16,"😆":15,"😇":113,"😈":191,"😉":111,"😊":112,"😋":122,"😌":142,"😍":115,"😎":160,"😏":137,"😐":134,"😑":135,"😒":138,"😓":183,"😔":143,"😕":163,"😖":180,"😗":118,"😘":117,"😙":121,"😚":120,"😛":123,"😜":124,"😝":126,"😞":182,"😟":164,"😠":189,"😡":188,"😢":177,"😣":181,"😤":187,"😥":176,"😦":172,"😧":173,"😨":174,"😩":184,"😪":144,"😫":185,"😬":140,"😭":178,"😮":167,"😯":168,"😰":175,"😱":179,"😲":169,"😳":170,"😴":146,"😵":156,"😶":136,"😷":147,"😸":1104,"😹":1105,"😺":1103,"😻":1106,"😼":1107,"😽":1108,"😾":1111,"😿":1110,"🙀":1109,"🙁":165,"🙂":19,"🙃":110,"🙄":139,"🙅‍♀":1232,"🙅‍♂":1231,"🙅":1230,"🙆‍♀":1235,"🙆‍♂":1234,"🙆":1233,"🙇‍♀":1247,"🙇‍♂":1246,"🙇":1245,"🙈":1112,"🙉":1113,"🙊":1114,"🙋‍♀":1241,"🙋‍♂":1240,"🙋":1239,"🙌":1175,"🙍‍♀":1226,"🙍‍♂":1225,"🙍":1224,"🙎‍♀":1229,"🙎‍♂":1228,"🙎":1227,"🙏":1179,"🚀":4129,"🚁":4124,"🚂":463,"🚃":464,"🚄":465,"🚅":466,"🚆":467,"🚇":468,"🚈":469,"🚉":470,"🚊":471,"🚋":474,"🚌":475,"🚍":476,"🚎":477,"🚏":4100,"🚐":478,"🚑":479,"🚒":480,"🚓":481,"🚔":482,"🚕":483,"🚖":484,"🚗":485,"🚘":486,"🚙":487,"🚚":488,"🚛":489,"🚜":490,"🚝":472,"🚞":473,"🚟":4125,"🚠":4126,"🚡":4127,"🚢":4117,"🚣‍♀":1406,"🚣‍♂":1405,"🚣":1404,"🚤":4113,"🚥":4106,"🚦":4107,"🚧":4109,"🚨":4105,"🚩":72,"🚪":6213,"🚫":6250,"🚬":6230,"🚭":6252,"🚮":6235,"🚯":6253,"🚰":6236,"🚱":6254,"🚲":497,"🚳":6251,"🚴‍♀":1418,"🚴‍♂":1417,"🚴":1416,"🚵‍♀":1421,"🚵‍♂":1420,"🚵":1419,"🚶‍♀":1363,"🚶‍♂":1362,"🚶":1361,"🚷":6255,"🚸":6248,"🚹":6238,"🚺":6239,"🚻":6240,"🚼":6241,"🚽":6217,"🚾":6242,"🚿":6218,"🛀":1440,"🛁":6219,"🛂":6243,"🛃":6244,"🛄":6245,"🛅":6246,"🛋":6215,"🛌":1441,"🛍":624,"🛎":4131,"🛏":6214,"🛐":6281,"🛑":4108,"🛒":6229,"🛕":443,"🛠":6185,"🛡":6190,"🛢":4103,"🛣":4101,"🛤":4102,"🛥":4116,"🛩":4119,"🛫":4120,"🛬":4121,"🛰":4128,"🛳":4114,"🛴":498,"🛵":493,"🛶":4112,"🛷":553,"🛸":4130,"🛹":499,"🛺":496,"🟠":6418,"🟡":6419,"🟢":6420,"🟣":6422,"🟤":6423,"🟥":6426,"🟦":6430,"🟧":6427,"🟨":6428,"🟩":6429,"🟪":6431,"🟫":6432,"🤍":1135,"🤎":1133,"🤏":1156,"🤐":132,"🤑":127,"🤒":148,"🤓":161,"🤔":131,"🤕":149,"🤖":1102,"🤗":128,"🤘":1160,"🤙":1161,"🤚":1151,"🤛":1172,"🤜":1173,"🤝":1178,"🤞":1158,"🤟":1159,"🤠":158,"🤡":196,"🤢":150,"🤣":17,"🤤":145,"🤥":141,"🤦‍♀":1250,"🤦‍♂":1249,"🤦":1248,"🤧":152,"🤨":133,"🤩":116,"🤪":125,"🤫":130,"🤬":190,"🤭":129,"🤮":151,"🤯":157,"🤰":1323,"🤱":1324,"🤲":1177,"🤳":1182,"🤴":1314,"🤵":1321,"🤶":1327,"🤷‍♀":1253,"🤷‍♂":1252,"🤷":1251,"🤸‍♀":1424,"🤸‍♂":1423,"🤸":1422,"🤹‍♀":1436,"🤹‍♂":1435,"🤹":1434,"🤺":1394,"🤼‍♀":1427,"🤼‍♂":1426,"🤼":1425,"🤽‍♀":1430,"🤽‍♂":1429,"🤽":1428,"🤾‍♀":1433,"🤾‍♂":1432,"🤾":1431,"🤿":550,"🥀":2111,"🥁":668,"🥂":3110,"🥃":3111,"🥄":3119,"🥅":546,"🥇":525,"🥈":526,"🥉":527,"🥊":544,"🥋":545,"🥌":554,"🥍":541,"🥎":530,"🥏":536,"🥐":333,"🥑":318,"🥒":324,"🥓":343,"🥔":320,"🥕":321,"🥖":334,"🥗":358,"🥘":355,"🥙":351,"🥚":353,"🥛":3100,"🥜":330,"🥝":315,"🥞":337,"🥟":377,"🥠":378,"🥡":379,"🥢":3116,"🥣":357,"🥤":3112,"🥥":317,"🥦":326,"🥧":393,"🥨":335,"🥩":342,"🥪":348,"🥫":362,"🥬":325,"🥭":38,"🥮":375,"🥯":336,"🥰":114,"🥱":186,"🥳":159,"🥴":155,"🥵":153,"🥶":154,"🥺":171,"🥻":615,"🥼":64,"🥽":63,"🥾":628,"🥿":629,"🦀":380,"🦁":215,"🦂":2103,"🦃":260,"🦄":221,"🦅":269,"🦆":270,"🦇":250,"🦈":291,"🦉":272,"🦊":211,"🦋":295,"🦌":223,"🦍":23,"🦎":279,"🦏":240,"🦐":382,"🦑":383,"🦒":238,"🦓":222,"🦔":249,"🦕":283,"🦖":284,"🦗":2100,"🦘":257,"🦙":237,"🦚":274,"🦛":241,"🦜":275,"🦝":212,"🦞":381,"🦟":2104,"🦠":2105,"🦡":258,"🦢":271,"🦥":254,"🦦":255,"🦧":24,"🦨":256,"🦩":273,"🦪":384,"🦮":27,"🦯":6196,"🦴":1193,"🦵":1186,"🦶":1187,"🦷":1192,"🦸‍♀":1330,"🦸‍♂":1329,"🦸":1328,"🦹‍♀":1333,"🦹‍♂":1332,"🦹":1331,"🦺":65,"🦻":1189,"🦼":495,"🦽":494,"🦾":1184,"🦿":1185,"🧀":339,"🧁":392,"🧂":361,"🧃":3113,"🧄":327,"🧅":328,"🧆":352,"🧇":338,"🧈":360,"🧉":3114,"🧊":3115,"🧍‍♀":1366,"🧍‍♂":1365,"🧍":1364,"🧎‍♀":1369,"🧎‍♂":1368,"🧎":1367,"🧏‍♀":1244,"🧏‍♂":1243,"🧏":1242,"🧐":162,"🧑‍🌾":1266,"🧑‍🍳":1269,"🧑‍🎓":1257,"🧑‍🎤":1287,"🧑‍🎨":1290,"🧑‍🏫":1260,"🧑‍🏭":1275,"🧑‍💻":1284,"🧑‍💼":1278,"🧑‍🔧":1272,"🧑‍🔬":1281,"🧑‍🚀":1296,"🧑‍🚒":1299,"🧑‍🤝‍🧑":1442,"🧑‍🦯":1370,"🧑‍🦰":1212,"🧑‍🦱":1214,"🧑‍🦲":1218,"🧑‍🦳":1216,"🧑‍🦼":1373,"🧑‍🦽":1376,"🧑‍⚕":1254,"🧑‍⚖":1263,"🧑‍✈":1293,"🧑":1202,"🧒":1199,"🧓":1221,"🧔":1205,"🧕":1320,"🧖‍♀":1390,"🧖‍♂":1389,"🧖":1388,"🧗‍♀":1393,"🧗‍♂":1392,"🧗":1391,"🧘‍♀":1439,"🧘‍♂":1438,"🧘":1437,"🧙‍♀":1336,"🧙‍♂":1335,"🧙":1334,"🧚‍♀":1339,"🧚‍♂":1338,"🧚":1337,"🧛‍♀":1342,"🧛‍♂":1341,"🧛":1340,"🧜‍♀":1345,"🧜‍♂":1344,"🧜":1343,"🧝‍♀":1348,"🧝‍♂":1347,"🧝":1346,"🧞‍♀":1351,"🧞‍♂":1350,"🧞":1349,"🧟‍♀":1354,"🧟‍♂":1353,"🧟":1352,"🧠":1191,"🧡":1128,"🧢":638,"🧣":69,"🧤":610,"🧥":611,"🧦":612,"🧧":516,"🧨":55,"🧩":565,"🧪":6202,"🧫":6203,"🧬":6204,"🧭":47,"🧮":687,"🧯":6228,"🧰":6199,"🧱":420,"🧲":6200,"🧳":4132,"🧴":6221,"🧵":578,"🧶":579,"🧷":6222,"🧸":566,"🧹":6223,"🧺":6224,"🧻":6225,"🧼":6226,"🧽":6227,"🧾":6128,"🧿":560,"🩰":632,"🩱":616,"🩲":617,"🩳":618,"🩸":6209,"🩹":6211,"🩺":6212,"🪀":556,"🪁":557,"🪂":4122,"🪐":4180,"🪑":6216,"🪒":6220,"🪓":6182,"🪔":6103,"🪕":667,"‼":6355,"⁉":6356,"™":6364,"ℹ":6389,"↔":6269,"↕":6268,"↖":6267,"↗":6261,"↘":6263,"↙":6265,"↩":6270,"↪":6271,"⌚":4135,"⌛":4133,"⌨":680,"⏏":6323,"⏩":6310,"⏪":6314,"⏫":6317,"⏬":6319,"⏭":6311,"⏮":6315,"⏯":6312,"⏰":4136,"⏱":4137,"⏲":4138,"⏳":4134,"⏸":6320,"⏹":6321,"⏺":6322,"Ⓜ":6391,"▪":6439,"▫":6440,"▶":6309,"◀":6313,"◻":6436,"◼":6435,"◽":6438,"◾":6437,"☀":4177,"☁":4185,"☂":4200,"☃":4205,"☄":4207,"☎":671,"☑":6341,"☔":4201,"☕":3101,"☘":2123,"☝":1167,"☠":194,"☢":6258,"☣":6259,"☦":6288,"☪":6289,"☮":6290,"☯":6286,"☸":6285,"☹":166,"☺":119,"♈":6293,"♉":6294,"♊":6295,"♋":6296,"♌":6297,"♍":6298,"♎":6299,"♏":6300,"♐":6301,"♑":6302,"♒":6303,"♓":6304,"♟":571,"♠":567,"♣":570,"♥":568,"♦":569,"♨":457,"♻":6334,"♾":6333,"♿":6237,"⚒":6184,"⚓":4110,"⚔":6187,"⚖":6195,"⚗":6201,"⚙":6193,"⚛":6282,"⚜":6335,"⚠":6247,"⚡":4203,"⚪":6425,"⚫":6424,"⚰":6231,"⚱":6232,"⚽":528,"⚾":529,"⛄":4206,"⛅":4186,"⛈":4187,"⛎":6305,"⛏":6183,"⛑":639,"⛓":6198,"⛔":6249,"⛩":445,"⛪":441,"⛰":49,"⛱":4202,"⛲":447,"⛳":547,"⛴":4115,"⛵":4111,"⛷":1396,"⛸":548,"⛹‍♀":1412,"⛹‍♂":1411,"⛹":1410,"⛺":448,"⛽":4104,"✂":6171,"✅":6340,"✈":4118,"✉":6132,"✊":1170,"✋":1153,"✌":1157,"✍":1180,"✏":6145,"✒":6146,"✔":6342,"✖":6343,"✝":6287,"✡":6284,"✨":56,"✳":6352,"✴":6353,"❄":4204,"❇":6354,"❌":6344,"❎":6345,"❓":6357,"❔":6358,"❕":6359,"❗":6360,"❣":1125,"❤":1127,"➕":6346,"➖":6347,"➗":6348,"➡":6262,"➰":6349,"➿":6350,"⤴":6272,"⤵":6273,"⬅":6266,"⬆":6260,"⬇":6264,"⬛":6433,"⬜":6434,"⭐":4181,"⭕":6339,"〰":6361,"〽":6351,"㊗":6413,"㊙":6414,"🎅🏻":0,"🎅🏼":0,"🎅🏽":0,"🎅🏾":0,"🎅🏿":0,"🏂🏻":0,"🏂🏼":0,"🏂🏽":0,"🏂🏾":0,"🏂🏿":0,"🏃🏻‍♀":0,"🏃🏼‍♀":0,"🏃🏽‍♀":0,"🏃🏾‍♀":0,"🏃🏿‍♀":0,"🏃🏻‍♂":0,"🏃🏼‍♂":0,"🏃🏽‍♂":0,"🏃🏾‍♂":0,"🏃🏿‍♂":0,"🏃🏻":0,"🏃🏼":0,"🏃🏽":0,"🏃🏾":0,"🏃🏿":0,"🏄🏻‍♀":0,"🏄🏼‍♀":0,"🏄🏽‍♀":0,"🏄🏾‍♀":0,"🏄🏿‍♀":0,"🏄🏻‍♂":0,"🏄🏼‍♂":0,"🏄🏽‍♂":0,"🏄🏾‍♂":0,"🏄🏿‍♂":0,"🏄🏻":0,"🏄🏼":0,"🏄🏽":0,"🏄🏾":0,"🏄🏿":0,"🏇🏻":0,"🏇🏼":0,"🏇🏽":0,"🏇🏾":0,"🏇🏿":0,"🏊🏻‍♀":0,"🏊🏼‍♀":0,"🏊🏽‍♀":0,"🏊🏾‍♀":0,"🏊🏿‍♀":0,"🏊🏻‍♂":0,"🏊🏼‍♂":0,"🏊🏽‍♂":0,"🏊🏾‍♂":0,"🏊🏿‍♂":0,"🏊🏻":0,"🏊🏼":0,"🏊🏽":0,"🏊🏾":0,"🏊🏿":0,"🏋🏻‍♀":0,"🏋🏼‍♀":0,"🏋🏽‍♀":0,"🏋🏾‍♀":0,"🏋🏿‍♀":0,"🏋🏻‍♂":0,"🏋🏼‍♂":0,"🏋🏽‍♂":0,"🏋🏾‍♂":0,"🏋🏿‍♂":0,"🏋🏻":0,"🏋🏼":0,"🏋🏽":0,"🏋🏾":0,"🏋🏿":0,"🏌🏻‍♀":0,"🏌🏼‍♀":0,"🏌🏽‍♀":0,"🏌🏾‍♀":0,"🏌🏿‍♀":0,"🏌🏻‍♂":0,"🏌🏼‍♂":0,"🏌🏽‍♂":0,"🏌🏾‍♂":0,"🏌🏿‍♂":0,"🏌🏻":0,"🏌🏼":0,"🏌🏽":0,"🏌🏾":0,"🏌🏿":0,"👂🏻":0,"👂🏼":0,"👂🏽":0,"👂🏾":0,"👂🏿":0,"👃🏻":0,"👃🏼":0,"👃🏽":0,"👃🏾":0,"👃🏿":0,"👆🏻":0,"👆🏼":0,"👆🏽":0,"👆🏾":0,"👆🏿":0,"👇🏻":0,"👇🏼":0,"👇🏽":0,"👇🏾":0,"👇🏿":0,"👈🏻":0,"👈🏼":0,"👈🏽":0,"👈🏾":0,"👈🏿":0,"👉🏻":0,"👉🏼":0,"👉🏽":0,"👉🏾":0,"👉🏿":0,"👊🏻":0,"👊🏼":0,"👊🏽":0,"👊🏾":0,"👊🏿":0,"👋🏻":0,"👋🏼":0,"👋🏽":0,"👋🏾":0,"👋🏿":0,"👌🏻":0,"👌🏼":0,"👌🏽":0,"👌🏾":0,"👌🏿":0,"👍🏻":0,"👍🏼":0,"👍🏽":0,"👍🏾":0,"👍🏿":0,"👎🏻":0,"👎🏼":0,"👎🏽":0,"👎🏾":0,"👎🏿":0,"👏🏻":0,"👏🏼":0,"👏🏽":0,"👏🏾":0,"👏🏿":0,"👐🏻":0,"👐🏼":0,"👐🏽":0,"👐🏾":0,"👐🏿":0,"👦🏻":0,"👦🏼":0,"👦🏽":0,"👦🏾":0,"👦🏿":0,"👧🏻":0,"👧🏼":0,"👧🏽":0,"👧🏾":0,"👧🏿":0,"👨🏻‍🌾":0,"👨🏼‍🌾":0,"👨🏽‍🌾":0,"👨🏾‍🌾":0,"👨🏿‍🌾":0,"👨🏻‍🍳":0,"👨🏼‍🍳":0,"👨🏽‍🍳":0,"👨🏾‍🍳":0,"👨🏿‍🍳":0,"👨🏻‍🎓":0,"👨🏼‍🎓":0,"👨🏽‍🎓":0,"👨🏾‍🎓":0,"👨🏿‍🎓":0,"👨🏻‍🎤":0,"👨🏼‍🎤":0,"👨🏽‍🎤":0,"👨🏾‍🎤":0,"👨🏿‍🎤":0,"👨🏻‍🎨":0,"👨🏼‍🎨":0,"👨🏽‍🎨":0,"👨🏾‍🎨":0,"👨🏿‍🎨":0,"👨🏻‍🏫":0,"👨🏼‍🏫":0,"👨🏽‍🏫":0,"👨🏾‍🏫":0,"👨🏿‍🏫":0,"👨🏻‍🏭":0,"👨🏼‍🏭":0,"👨🏽‍🏭":0,"👨🏾‍🏭":0,"👨🏿‍🏭":0,"👨🏻‍💻":0,"👨🏼‍💻":0,"👨🏽‍💻":0,"👨🏾‍💻":0,"👨🏿‍💻":0,"👨🏻‍💼":0,"👨🏼‍💼":0,"👨🏽‍💼":0,"👨🏾‍💼":0,"👨🏿‍💼":0,"👨🏻‍🔧":0,"👨🏼‍🔧":0,"👨🏽‍🔧":0,"👨🏾‍🔧":0,"👨🏿‍🔧":0,"👨🏻‍🔬":0,"👨🏼‍🔬":0,"👨🏽‍🔬":0,"👨🏾‍🔬":0,"👨🏿‍🔬":0,"👨🏻‍🚀":0,"👨🏼‍🚀":0,"👨🏽‍🚀":0,"👨🏾‍🚀":0,"👨🏿‍🚀":0,"👨🏻‍🚒":0,"👨🏼‍🚒":0,"👨🏽‍🚒":0,"👨🏾‍🚒":0,"👨🏿‍🚒":0,"👨🏻‍🦯":0,"👨🏼‍🦯":0,"👨🏽‍🦯":0,"👨🏾‍🦯":0,"👨🏿‍🦯":0,"👨🏻‍🦰":0,"👨🏼‍🦰":0,"👨🏽‍🦰":0,"👨🏾‍🦰":0,"👨🏿‍🦰":0,"👨🏻‍🦱":0,"👨🏼‍🦱":0,"👨🏽‍🦱":0,"👨🏾‍🦱":0,"👨🏿‍🦱":0,"👨🏻‍🦲":0,"👨🏼‍🦲":0,"👨🏽‍🦲":0,"👨🏾‍🦲":0,"👨🏿‍🦲":0,"👨🏻‍🦳":0,"👨🏼‍🦳":0,"👨🏽‍🦳":0,"👨🏾‍🦳":0,"👨🏿‍🦳":0,"👨🏻‍🦼":0,"👨🏼‍🦼":0,"👨🏽‍🦼":0,"👨🏾‍🦼":0,"👨🏿‍🦼":0,"👨🏻‍🦽":0,"👨🏼‍🦽":0,"👨🏽‍🦽":0,"👨🏾‍🦽":0,"👨🏿‍🦽":0,"👨🏻‍⚕":0,"👨🏼‍⚕":0,"👨🏽‍⚕":0,"👨🏾‍⚕":0,"👨🏿‍⚕":0,"👨🏻‍⚖":0,"👨🏼‍⚖":0,"👨🏽‍⚖":0,"👨🏾‍⚖":0,"👨🏿‍⚖":0,"👨🏻‍✈":0,"👨🏼‍✈":0,"👨🏽‍✈":0,"👨🏾‍✈":0,"👨🏿‍✈":0,"👨🏻":0,"👨🏼":0,"👨🏽":0,"👨🏾":0,"👨🏿":0,"👩🏻‍🌾":0,"👩🏼‍🌾":0,"👩🏽‍🌾":0,"👩🏾‍🌾":0,"👩🏿‍🌾":0,"👩🏻‍🍳":0,"👩🏼‍🍳":0,"👩🏽‍🍳":0,"👩🏾‍🍳":0,"👩🏿‍🍳":0,"👩🏻‍🎓":0,"👩🏼‍🎓":0,"👩🏽‍🎓":0,"👩🏾‍🎓":0,"👩🏿‍🎓":0,"👩🏻‍🎤":0,"👩🏼‍🎤":0,"👩🏽‍🎤":0,"👩🏾‍🎤":0,"👩🏿‍🎤":0,"👩🏻‍🎨":0,"👩🏼‍🎨":0,"👩🏽‍🎨":0,"👩🏾‍🎨":0,"👩🏿‍🎨":0,"👩🏻‍🏫":0,"👩🏼‍🏫":0,"👩🏽‍🏫":0,"👩🏾‍🏫":0,"👩🏿‍🏫":0,"👩🏻‍🏭":0,"👩🏼‍🏭":0,"👩🏽‍🏭":0,"👩🏾‍🏭":0,"👩🏿‍🏭":0,"👩🏻‍💻":0,"👩🏼‍💻":0,"👩🏽‍💻":0,"👩🏾‍💻":0,"👩🏿‍💻":0,"👩🏻‍💼":0,"👩🏼‍💼":0,"👩🏽‍💼":0,"👩🏾‍💼":0,"👩🏿‍💼":0,"👩🏻‍🔧":0,"👩🏼‍🔧":0,"👩🏽‍🔧":0,"👩🏾‍🔧":0,"👩🏿‍🔧":0,"👩🏻‍🔬":0,"👩🏼‍🔬":0,"👩🏽‍🔬":0,"👩🏾‍🔬":0,"👩🏿‍🔬":0,"👩🏻‍🚀":0,"👩🏼‍🚀":0,"👩🏽‍🚀":0,"👩🏾‍🚀":0,"👩🏿‍🚀":0,"👩🏻‍🚒":0,"👩🏼‍🚒":0,"👩🏽‍🚒":0,"👩🏾‍🚒":0,"👩🏿‍🚒":0,"👩🏻‍🦯":0,"👩🏼‍🦯":0,"👩🏽‍🦯":0,"👩🏾‍🦯":0,"👩🏿‍🦯":0,"👩🏻‍🦰":0,"👩🏼‍🦰":0,"👩🏽‍🦰":0,"👩🏾‍🦰":0,"👩🏿‍🦰":0,"👩🏻‍🦱":0,"👩🏼‍🦱":0,"👩🏽‍🦱":0,"👩🏾‍🦱":0,"👩🏿‍🦱":0,"👩🏻‍🦲":0,"👩🏼‍🦲":0,"👩🏽‍🦲":0,"👩🏾‍🦲":0,"👩🏿‍🦲":0,"👩🏻‍🦳":0,"👩🏼‍🦳":0,"👩🏽‍🦳":0,"👩🏾‍🦳":0,"👩🏿‍🦳":0,"👩🏻‍🦼":0,"👩🏼‍🦼":0,"👩🏽‍🦼":0,"👩🏾‍🦼":0,"👩🏿‍🦼":0,"👩🏻‍🦽":0,"👩🏼‍🦽":0,"👩🏽‍🦽":0,"👩🏾‍🦽":0,"👩🏿‍🦽":0,"👩🏻‍⚕":0,"👩🏼‍⚕":0,"👩🏽‍⚕":0,"👩🏾‍⚕":0,"👩🏿‍⚕":0,"👩🏻‍⚖":0,"👩🏼‍⚖":0,"👩🏽‍⚖":0,"👩🏾‍⚖":0,"👩🏿‍⚖":0,"👩🏻‍✈":0,"👩🏼‍✈":0,"👩🏽‍✈":0,"👩🏾‍✈":0,"👩🏿‍✈":0,"👩🏻":0,"👩🏼":0,"👩🏽":0,"👩🏾":0,"👩🏿":0,"👫🏻":0,"👫🏼":0,"👫🏽":0,"👫🏾":0,"👫🏿":0,"👩🏻‍🤝‍👨🏼":0,"👩🏻‍🤝‍👨🏽":0,"👩🏻‍🤝‍👨🏾":0,"👩🏻‍🤝‍👨🏿":0,"👩🏼‍🤝‍👨🏻":0,"👩🏼‍🤝‍👨🏽":0,"👩🏼‍🤝‍👨🏾":0,"👩🏼‍🤝‍👨🏿":0,"👩🏽‍🤝‍👨🏻":0,"👩🏽‍🤝‍👨🏼":0,"👩🏽‍🤝‍👨🏾":0,"👩🏽‍🤝‍👨🏿":0,"👩🏾‍🤝‍👨🏻":0,"👩🏾‍🤝‍👨🏼":0,"👩🏾‍🤝‍👨🏽":0,"👩🏾‍🤝‍👨🏿":0,"👩🏿‍🤝‍👨🏻":0,"👩🏿‍🤝‍👨🏼":0,"👩🏿‍🤝‍👨🏽":0,"👩🏿‍🤝‍👨🏾":0,"👬🏻":0,"👬🏼":0,"👬🏽":0,"👬🏾":0,"👬🏿":0,"👨🏻‍🤝‍👨🏼":0,"👨🏻‍🤝‍👨🏽":0,"👨🏻‍🤝‍👨🏾":0,"👨🏻‍🤝‍👨🏿":0,"👨🏼‍🤝‍👨🏻":0,"👨🏼‍🤝‍👨🏽":0,"👨🏼‍🤝‍👨🏾":0,"👨🏼‍🤝‍👨🏿":0,"👨🏽‍🤝‍👨🏻":0,"👨🏽‍🤝‍👨🏼":0,"👨🏽‍🤝‍👨🏾":0,"👨🏽‍🤝‍👨🏿":0,"👨🏾‍🤝‍👨🏻":0,"👨🏾‍🤝‍👨🏼":0,"👨🏾‍🤝‍👨🏽":0,"👨🏾‍🤝‍👨🏿":0,"👨🏿‍🤝‍👨🏻":0,"👨🏿‍🤝‍👨🏼":0,"👨🏿‍🤝‍👨🏽":0,"👨🏿‍🤝‍👨🏾":0,"👭🏻":0,"👭🏼":0,"👭🏽":0,"👭🏾":0,"👭🏿":0,"👩🏻‍🤝‍👩🏼":0,"👩🏻‍🤝‍👩🏽":0,"👩🏻‍🤝‍👩🏾":0,"👩🏻‍🤝‍👩🏿":0,"👩🏼‍🤝‍👩🏻":0,"👩🏼‍🤝‍👩🏽":0,"👩🏼‍🤝‍👩🏾":0,"👩🏼‍🤝‍👩🏿":0,"👩🏽‍🤝‍👩🏻":0,"👩🏽‍🤝‍👩🏼":0,"👩🏽‍🤝‍👩🏾":0,"👩🏽‍🤝‍👩🏿":0,"👩🏾‍🤝‍👩🏻":0,"👩🏾‍🤝‍👩🏼":0,"👩🏾‍🤝‍👩🏽":0,"👩🏾‍🤝‍👩🏿":0,"👩🏿‍🤝‍👩🏻":0,"👩🏿‍🤝‍👩🏼":0,"👩🏿‍🤝‍👩🏽":0,"👩🏿‍🤝‍👩🏾":0,"👮🏻‍♀":0,"👮🏼‍♀":0,"👮🏽‍♀":0,"👮🏾‍♀":0,"👮🏿‍♀":0,"👮🏻‍♂":0,"👮🏼‍♂":0,"👮🏽‍♂":0,"👮🏾‍♂":0,"👮🏿‍♂":0,"👮🏻":0,"👮🏼":0,"👮🏽":0,"👮🏾":0,"👮🏿":0,"👰🏻":0,"👰🏼":0,"👰🏽":0,"👰🏾":0,"👰🏿":0,"👱🏻‍♀":0,"👱🏼‍♀":0,"👱🏽‍♀":0,"👱🏾‍♀":0,"👱🏿‍♀":0,"👱🏻‍♂":0,"👱🏼‍♂":0,"👱🏽‍♂":0,"👱🏾‍♂":0,"👱🏿‍♂":0,"👱🏻":0,"👱🏼":0,"👱🏽":0,"👱🏾":0,"👱🏿":0,"👲🏻":0,"👲🏼":0,"👲🏽":0,"👲🏾":0,"👲🏿":0,"👳🏻‍♀":0,"👳🏼‍♀":0,"👳🏽‍♀":0,"👳🏾‍♀":0,"👳🏿‍♀":0,"👳🏻‍♂":0,"👳🏼‍♂":0,"👳🏽‍♂":0,"👳🏾‍♂":0,"👳🏿‍♂":0,"👳🏻":0,"👳🏼":0,"👳🏽":0,"👳🏾":0,"👳🏿":0,"👴🏻":0,"👴🏼":0,"👴🏽":0,"👴🏾":0,"👴🏿":0,"👵🏻":0,"👵🏼":0,"👵🏽":0,"👵🏾":0,"👵🏿":0,"👶🏻":0,"👶🏼":0,"👶🏽":0,"👶🏾":0,"👶🏿":0,"👷🏻‍♀":0,"👷🏼‍♀":0,"👷🏽‍♀":0,"👷🏾‍♀":0,"👷🏿‍♀":0,"👷🏻‍♂":0,"👷🏼‍♂":0,"👷🏽‍♂":0,"👷🏾‍♂":0,"👷🏿‍♂":0,"👷🏻":0,"👷🏼":0,"👷🏽":0,"👷🏾":0,"👷🏿":0,"👸🏻":0,"👸🏼":0,"👸🏽":0,"👸🏾":0,"👸🏿":0,"👼🏻":0,"👼🏼":0,"👼🏽":0,"👼🏾":0,"👼🏿":0,"💁🏻‍♀":0,"💁🏼‍♀":0,"💁🏽‍♀":0,"💁🏾‍♀":0,"💁🏿‍♀":0,"💁🏻‍♂":0,"💁🏼‍♂":0,"💁🏽‍♂":0,"💁🏾‍♂":0,"💁🏿‍♂":0,"💁🏻":0,"💁🏼":0,"💁🏽":0,"💁🏾":0,"💁🏿":0,"💂🏻‍♀":0,"💂🏼‍♀":0,"💂🏽‍♀":0,"💂🏾‍♀":0,"💂🏿‍♀":0,"💂🏻‍♂":0,"💂🏼‍♂":0,"💂🏽‍♂":0,"💂🏾‍♂":0,"💂🏿‍♂":0,"💂🏻":0,"💂🏼":0,"💂🏽":0,"💂🏾":0,"💂🏿":0,"💃🏻":0,"💃🏼":0,"💃🏽":0,"💃🏾":0,"💃🏿":0,"💅🏻":0,"💅🏼":0,"💅🏽":0,"💅🏾":0,"💅🏿":0,"💆🏻‍♀":0,"💆🏼‍♀":0,"💆🏽‍♀":0,"💆🏾‍♀":0,"💆🏿‍♀":0,"💆🏻‍♂":0,"💆🏼‍♂":0,"💆🏽‍♂":0,"💆🏾‍♂":0,"💆🏿‍♂":0,"💆🏻":0,"💆🏼":0,"💆🏽":0,"💆🏾":0,"💆🏿":0,"💇🏻‍♀":0,"💇🏼‍♀":0,"💇🏽‍♀":0,"💇🏾‍♀":0,"💇🏿‍♀":0,"💇🏻‍♂":0,"💇🏼‍♂":0,"💇🏽‍♂":0,"💇🏾‍♂":0,"💇🏿‍♂":0,"💇🏻":0,"💇🏼":0,"💇🏽":0,"💇🏾":0,"💇🏿":0,"💪🏻":0,"💪🏼":0,"💪🏽":0,"💪🏾":0,"💪🏿":0,"🕴🏻":0,"🕴🏼":0,"🕴🏽":0,"🕴🏾":0,"🕴🏿":0,"🕵🏻‍♀":0,"🕵🏼‍♀":0,"🕵🏽‍♀":0,"🕵🏾‍♀":0,"🕵🏿‍♀":0,"🕵🏻‍♂":0,"🕵🏼‍♂":0,"🕵🏽‍♂":0,"🕵🏾‍♂":0,"🕵🏿‍♂":0,"🕵🏻":0,"🕵🏼":0,"🕵🏽":0,"🕵🏾":0,"🕵🏿":0,"🕺🏻":0,"🕺🏼":0,"🕺🏽":0,"🕺🏾":0,"🕺🏿":0,"🖐🏻":0,"🖐🏼":0,"🖐🏽":0,"🖐🏾":0,"🖐🏿":0,"🖕🏻":0,"🖕🏼":0,"🖕🏽":0,"🖕🏾":0,"🖕🏿":0,"🖖🏻":0,"🖖🏼":0,"🖖🏽":0,"🖖🏾":0,"🖖🏿":0,"🙅🏻‍♀":0,"🙅🏼‍♀":0,"🙅🏽‍♀":0,"🙅🏾‍♀":0,"🙅🏿‍♀":0,"🙅🏻‍♂":0,"🙅🏼‍♂":0,"🙅🏽‍♂":0,"🙅🏾‍♂":0,"🙅🏿‍♂":0,"🙅🏻":0,"🙅🏼":0,"🙅🏽":0,"🙅🏾":0,"🙅🏿":0,"🙆🏻‍♀":0,"🙆🏼‍♀":0,"🙆🏽‍♀":0,"🙆🏾‍♀":0,"🙆🏿‍♀":0,"🙆🏻‍♂":0,"🙆🏼‍♂":0,"🙆🏽‍♂":0,"🙆🏾‍♂":0,"🙆🏿‍♂":0,"🙆🏻":0,"🙆🏼":0,"🙆🏽":0,"🙆🏾":0,"🙆🏿":0,"🙇🏻‍♀":0,"🙇🏼‍♀":0,"🙇🏽‍♀":0,"🙇🏾‍♀":0,"🙇🏿‍♀":0,"🙇🏻‍♂":0,"🙇🏼‍♂":0,"🙇🏽‍♂":0,"🙇🏾‍♂":0,"🙇🏿‍♂":0,"🙇🏻":0,"🙇🏼":0,"🙇🏽":0,"🙇🏾":0,"🙇🏿":0,"🙋🏻‍♀":0,"🙋🏼‍♀":0,"🙋🏽‍♀":0,"🙋🏾‍♀":0,"🙋🏿‍♀":0,"🙋🏻‍♂":0,"🙋🏼‍♂":0,"🙋🏽‍♂":0,"🙋🏾‍♂":0,"🙋🏿‍♂":0,"🙋🏻":0,"🙋🏼":0,"🙋🏽":0,"🙋🏾":0,"🙋🏿":0,"🙌🏻":0,"🙌🏼":0,"🙌🏽":0,"🙌🏾":0,"🙌🏿":0,"🙍🏻‍♀":0,"🙍🏼‍♀":0,"🙍🏽‍♀":0,"🙍🏾‍♀":0,"🙍🏿‍♀":0,"🙍🏻‍♂":0,"🙍🏼‍♂":0,"🙍🏽‍♂":0,"🙍🏾‍♂":0,"🙍🏿‍♂":0,"🙍🏻":0,"🙍🏼":0,"🙍🏽":0,"🙍🏾":0,"🙍🏿":0,"🙎🏻‍♀":0,"🙎🏼‍♀":0,"🙎🏽‍♀":0,"🙎🏾‍♀":0,"🙎🏿‍♀":0,"🙎🏻‍♂":0,"🙎🏼‍♂":0,"🙎🏽‍♂":0,"🙎🏾‍♂":0,"🙎🏿‍♂":0,"🙎🏻":0,"🙎🏼":0,"🙎🏽":0,"🙎🏾":0,"🙎🏿":0,"🙏🏻":0,"🙏🏼":0,"🙏🏽":0,"🙏🏾":0,"🙏🏿":0,"🚣🏻‍♀":0,"🚣🏼‍♀":0,"🚣🏽‍♀":0,"🚣🏾‍♀":0,"🚣🏿‍♀":0,"🚣🏻‍♂":0,"🚣🏼‍♂":0,"🚣🏽‍♂":0,"🚣🏾‍♂":0,"🚣🏿‍♂":0,"🚣🏻":0,"🚣🏼":0,"🚣🏽":0,"🚣🏾":0,"🚣🏿":0,"🚴🏻‍♀":0,"🚴🏼‍♀":0,"🚴🏽‍♀":0,"🚴🏾‍♀":0,"🚴🏿‍♀":0,"🚴🏻‍♂":0,"🚴🏼‍♂":0,"🚴🏽‍♂":0,"🚴🏾‍♂":0,"🚴🏿‍♂":0,"🚴🏻":0,"🚴🏼":0,"🚴🏽":0,"🚴🏾":0,"🚴🏿":0,"🚵🏻‍♀":0,"🚵🏼‍♀":0,"🚵🏽‍♀":0,"🚵🏾‍♀":0,"🚵🏿‍♀":0,"🚵🏻‍♂":0,"🚵🏼‍♂":0,"🚵🏽‍♂":0,"🚵🏾‍♂":0,"🚵🏿‍♂":0,"🚵🏻":0,"🚵🏼":0,"🚵🏽":0,"🚵🏾":0,"🚵🏿":0,"🚶🏻‍♀":0,"🚶🏼‍♀":0,"🚶🏽‍♀":0,"🚶🏾‍♀":0,"🚶🏿‍♀":0,"🚶🏻‍♂":0,"🚶🏼‍♂":0,"🚶🏽‍♂":0,"🚶🏾‍♂":0,"🚶🏿‍♂":0,"🚶🏻":0,"🚶🏼":0,"🚶🏽":0,"🚶🏾":0,"🚶🏿":0,"🛀🏻":0,"🛀🏼":0,"🛀🏽":0,"🛀🏾":0,"🛀🏿":0,"🛌🏻":0,"🛌🏼":0,"🛌🏽":0,"🛌🏾":0,"🛌🏿":0,"🤏🏻":0,"🤏🏼":0,"🤏🏽":0,"🤏🏾":0,"🤏🏿":0,"🤘🏻":0,"🤘🏼":0,"🤘🏽":0,"🤘🏾":0,"🤘🏿":0,"🤙🏻":0,"🤙🏼":0,"🤙🏽":0,"🤙🏾":0,"🤙🏿":0,"🤚🏻":0,"🤚🏼":0,"🤚🏽":0,"🤚🏾":0,"🤚🏿":0,"🤛🏻":0,"🤛🏼":0,"🤛🏽":0,"🤛🏾":0,"🤛🏿":0,"🤜🏻":0,"🤜🏼":0,"🤜🏽":0,"🤜🏾":0,"🤜🏿":0,"🤞🏻":0,"🤞🏼":0,"🤞🏽":0,"🤞🏾":0,"🤞🏿":0,"🤟🏻":0,"🤟🏼":0,"🤟🏽":0,"🤟🏾":0,"🤟🏿":0,"🤦🏻‍♀":0,"🤦🏼‍♀":0,"🤦🏽‍♀":0,"🤦🏾‍♀":0,"🤦🏿‍♀":0,"🤦🏻‍♂":0,"🤦🏼‍♂":0,"🤦🏽‍♂":0,"🤦🏾‍♂":0,"🤦🏿‍♂":0,"🤦🏻":0,"🤦🏼":0,"🤦🏽":0,"🤦🏾":0,"🤦🏿":0,"🤰🏻":0,"🤰🏼":0,"🤰🏽":0,"🤰🏾":0,"🤰🏿":0,"🤱🏻":0,"🤱🏼":0,"🤱🏽":0,"🤱🏾":0,"🤱🏿":0,"🤲🏻":0,"🤲🏼":0,"🤲🏽":0,"🤲🏾":0,"🤲🏿":0,"🤳🏻":0,"🤳🏼":0,"🤳🏽":0,"🤳🏾":0,"🤳🏿":0,"🤴🏻":0,"🤴🏼":0,"🤴🏽":0,"🤴🏾":0,"🤴🏿":0,"🤵🏻":0,"🤵🏼":0,"🤵🏽":0,"🤵🏾":0,"🤵🏿":0,"🤶🏻":0,"🤶🏼":0,"🤶🏽":0,"🤶🏾":0,"🤶🏿":0,"🤷🏻‍♀":0,"🤷🏼‍♀":0,"🤷🏽‍♀":0,"🤷🏾‍♀":0,"🤷🏿‍♀":0,"🤷🏻‍♂":0,"🤷🏼‍♂":0,"🤷🏽‍♂":0,"🤷🏾‍♂":0,"🤷🏿‍♂":0,"🤷🏻":0,"🤷🏼":0,"🤷🏽":0,"🤷🏾":0,"🤷🏿":0,"🤸🏻‍♀":0,"🤸🏼‍♀":0,"🤸🏽‍♀":0,"🤸🏾‍♀":0,"🤸🏿‍♀":0,"🤸🏻‍♂":0,"🤸🏼‍♂":0,"🤸🏽‍♂":0,"🤸🏾‍♂":0,"🤸🏿‍♂":0,"🤸🏻":0,"🤸🏼":0,"🤸🏽":0,"🤸🏾":0,"🤸🏿":0,"🤹🏻‍♀":0,"🤹🏼‍♀":0,"🤹🏽‍♀":0,"🤹🏾‍♀":0,"🤹🏿‍♀":0,"🤹🏻‍♂":0,"🤹🏼‍♂":0,"🤹🏽‍♂":0,"🤹🏾‍♂":0,"🤹🏿‍♂":0,"🤹🏻":0,"🤹🏼":0,"🤹🏽":0,"🤹🏾":0,"🤹🏿":0,"🤽🏻‍♀":0,"🤽🏼‍♀":0,"🤽🏽‍♀":0,"🤽🏾‍♀":0,"🤽🏿‍♀":0,"🤽🏻‍♂":0,"🤽🏼‍♂":0,"🤽🏽‍♂":0,"🤽🏾‍♂":0,"🤽🏿‍♂":0,"🤽🏻":0,"🤽🏼":0,"🤽🏽":0,"🤽🏾":0,"🤽🏿":0,"🤾🏻‍♀":0,"🤾🏼‍♀":0,"🤾🏽‍♀":0,"🤾🏾‍♀":0,"🤾🏿‍♀":0,"🤾🏻‍♂":0,"🤾🏼‍♂":0,"🤾🏽‍♂":0,"🤾🏾‍♂":0,"🤾🏿‍♂":0,"🤾🏻":0,"🤾🏼":0,"🤾🏽":0,"🤾🏾":0,"🤾🏿":0,"🦵🏻":0,"🦵🏼":0,"🦵🏽":0,"🦵🏾":0,"🦵🏿":0,"🦶🏻":0,"🦶🏼":0,"🦶🏽":0,"🦶🏾":0,"🦶🏿":0,"🦸🏻‍♀":0,"🦸🏼‍♀":0,"🦸🏽‍♀":0,"🦸🏾‍♀":0,"🦸🏿‍♀":0,"🦸🏻‍♂":0,"🦸🏼‍♂":0,"🦸🏽‍♂":0,"🦸🏾‍♂":0,"🦸🏿‍♂":0,"🦸🏻":0,"🦸🏼":0,"🦸🏽":0,"🦸🏾":0,"🦸🏿":0,"🦹🏻‍♀":0,"🦹🏼‍♀":0,"🦹🏽‍♀":0,"🦹🏾‍♀":0,"🦹🏿‍♀":0,"🦹🏻‍♂":0,"🦹🏼‍♂":0,"🦹🏽‍♂":0,"🦹🏾‍♂":0,"🦹🏿‍♂":0,"🦹🏻":0,"🦹🏼":0,"🦹🏽":0,"🦹🏾":0,"🦹🏿":0,"🦻🏻":0,"🦻🏼":0,"🦻🏽":0,"🦻🏾":0,"🦻🏿":0,"🧍🏻‍♀":0,"🧍🏼‍♀":0,"🧍🏽‍♀":0,"🧍🏾‍♀":0,"🧍🏿‍♀":0,"🧍🏻‍♂":0,"🧍🏼‍♂":0,"🧍🏽‍♂":0,"🧍🏾‍♂":0,"🧍🏿‍♂":0,"🧍🏻":0,"🧍🏼":0,"🧍🏽":0,"🧍🏾":0,"🧍🏿":0,"🧎🏻‍♀":0,"🧎🏼‍♀":0,"🧎🏽‍♀":0,"🧎🏾‍♀":0,"🧎🏿‍♀":0,"🧎🏻‍♂":0,"🧎🏼‍♂":0,"🧎🏽‍♂":0,"🧎🏾‍♂":0,"🧎🏿‍♂":0,"🧎🏻":0,"🧎🏼":0,"🧎🏽":0,"🧎🏾":0,"🧎🏿":0,"🧏🏻‍♀":0,"🧏🏼‍♀":0,"🧏🏽‍♀":0,"🧏🏾‍♀":0,"🧏🏿‍♀":0,"🧏🏻‍♂":0,"🧏🏼‍♂":0,"🧏🏽‍♂":0,"🧏🏾‍♂":0,"🧏🏿‍♂":0,"🧏🏻":0,"🧏🏼":0,"🧏🏽":0,"🧏🏾":0,"🧏🏿":0,"🧑🏻‍🌾":0,"🧑🏼‍🌾":0,"🧑🏽‍🌾":0,"🧑🏾‍🌾":0,"🧑🏿‍🌾":0,"🧑🏻‍🍳":0,"🧑🏼‍🍳":0,"🧑🏽‍🍳":0,"🧑🏾‍🍳":0,"🧑🏿‍🍳":0,"🧑🏻‍🎓":0,"🧑🏼‍🎓":0,"🧑🏽‍🎓":0,"🧑🏾‍🎓":0,"🧑🏿‍🎓":0,"🧑🏻‍🎤":0,"🧑🏼‍🎤":0,"🧑🏽‍🎤":0,"🧑🏾‍🎤":0,"🧑🏿‍🎤":0,"🧑🏻‍🎨":0,"🧑🏼‍🎨":0,"🧑🏽‍🎨":0,"🧑🏾‍🎨":0,"🧑🏿‍🎨":0,"🧑🏻‍🏫":0,"🧑🏼‍🏫":0,"🧑🏽‍🏫":0,"🧑🏾‍🏫":0,"🧑🏿‍🏫":0,"🧑🏻‍🏭":0,"🧑🏼‍🏭":0,"🧑🏽‍🏭":0,"🧑🏾‍🏭":0,"🧑🏿‍🏭":0,"🧑🏻‍💻":0,"🧑🏼‍💻":0,"🧑🏽‍💻":0,"🧑🏾‍💻":0,"🧑🏿‍💻":0,"🧑🏻‍💼":0,"🧑🏼‍💼":0,"🧑🏽‍💼":0,"🧑🏾‍💼":0,"🧑🏿‍💼":0,"🧑🏻‍🔧":0,"🧑🏼‍🔧":0,"🧑🏽‍🔧":0,"🧑🏾‍🔧":0,"🧑🏿‍🔧":0,"🧑🏻‍🔬":0,"🧑🏼‍🔬":0,"🧑🏽‍🔬":0,"🧑🏾‍🔬":0,"🧑🏿‍🔬":0,"🧑🏻‍🚀":0,"🧑🏼‍🚀":0,"🧑🏽‍🚀":0,"🧑🏾‍🚀":0,"🧑🏿‍🚀":0,"🧑🏻‍🚒":0,"🧑🏼‍🚒":0,"🧑🏽‍🚒":0,"🧑🏾‍🚒":0,"🧑🏿‍🚒":0,"🧑🏻‍🤝‍🧑🏻":0,"🧑🏻‍🤝‍🧑🏼":0,"🧑🏻‍🤝‍🧑🏽":0,"🧑🏻‍🤝‍🧑🏾":0,"🧑🏻‍🤝‍🧑🏿":0,"🧑🏼‍🤝‍🧑🏻":0,"🧑🏼‍🤝‍🧑🏼":0,"🧑🏼‍🤝‍🧑🏽":0,"🧑🏼‍🤝‍🧑🏾":0,"🧑🏼‍🤝‍🧑🏿":0,"🧑🏽‍🤝‍🧑🏻":0,"🧑🏽‍🤝‍🧑🏼":0,"🧑🏽‍🤝‍🧑🏽":0,"🧑🏽‍🤝‍🧑🏾":0,"🧑🏽‍🤝‍🧑🏿":0,"🧑🏾‍🤝‍🧑🏻":0,"🧑🏾‍🤝‍🧑🏼":0,"🧑🏾‍🤝‍🧑🏽":0,"🧑🏾‍🤝‍🧑🏾":0,"🧑🏾‍🤝‍🧑🏿":0,"🧑🏿‍🤝‍🧑🏻":0,"🧑🏿‍🤝‍🧑🏼":0,"🧑🏿‍🤝‍🧑🏽":0,"🧑🏿‍🤝‍🧑🏾":0,"🧑🏿‍🤝‍🧑🏿":0,"🧑🏻‍🦯":0,"🧑🏼‍🦯":0,"🧑🏽‍🦯":0,"🧑🏾‍🦯":0,"🧑🏿‍🦯":0,"🧑🏻‍🦰":0,"🧑🏼‍🦰":0,"🧑🏽‍🦰":0,"🧑🏾‍🦰":0,"🧑🏿‍🦰":0,"🧑🏻‍🦱":0,"🧑🏼‍🦱":0,"🧑🏽‍🦱":0,"🧑🏾‍🦱":0,"🧑🏿‍🦱":0,"🧑🏻‍🦲":0,"🧑🏼‍🦲":0,"🧑🏽‍🦲":0,"🧑🏾‍🦲":0,"🧑🏿‍🦲":0,"🧑🏻‍🦳":0,"🧑🏼‍🦳":0,"🧑🏽‍🦳":0,"🧑🏾‍🦳":0,"🧑🏿‍🦳":0,"🧑🏻‍🦼":0,"🧑🏼‍🦼":0,"🧑🏽‍🦼":0,"🧑🏾‍🦼":0,"🧑🏿‍🦼":0,"🧑🏻‍🦽":0,"🧑🏼‍🦽":0,"🧑🏽‍🦽":0,"🧑🏾‍🦽":0,"🧑🏿‍🦽":0,"🧑🏻‍⚕":0,"🧑🏼‍⚕":0,"🧑🏽‍⚕":0,"🧑🏾‍⚕":0,"🧑🏿‍⚕":0,"🧑🏻‍⚖":0,"🧑🏼‍⚖":0,"🧑🏽‍⚖":0,"🧑🏾‍⚖":0,"🧑🏿‍⚖":0,"🧑🏻‍✈":0,"🧑🏼‍✈":0,"🧑🏽‍✈":0,"🧑🏾‍✈":0,"🧑🏿‍✈":0,"🧑🏻":0,"🧑🏼":0,"🧑🏽":0,"🧑🏾":0,"🧑🏿":0,"🧒🏻":0,"🧒🏼":0,"🧒🏽":0,"🧒🏾":0,"🧒🏿":0,"🧓🏻":0,"🧓🏼":0,"🧓🏽":0,"🧓🏾":0,"🧓🏿":0,"🧔🏻":0,"🧔🏼":0,"🧔🏽":0,"🧔🏾":0,"🧔🏿":0,"🧕🏻":0,"🧕🏼":0,"🧕🏽":0,"🧕🏾":0,"🧕🏿":0,"🧖🏻‍♀":0,"🧖🏼‍♀":0,"🧖🏽‍♀":0,"🧖🏾‍♀":0,"🧖🏿‍♀":0,"🧖🏻‍♂":0,"🧖🏼‍♂":0,"🧖🏽‍♂":0,"🧖🏾‍♂":0,"🧖🏿‍♂":0,"🧖🏻":0,"🧖🏼":0,"🧖🏽":0,"🧖🏾":0,"🧖🏿":0,"🧗🏻‍♀":0,"🧗🏼‍♀":0,"🧗🏽‍♀":0,"🧗🏾‍♀":0,"🧗🏿‍♀":0,"🧗🏻‍♂":0,"🧗🏼‍♂":0,"🧗🏽‍♂":0,"🧗🏾‍♂":0,"🧗🏿‍♂":0,"🧗🏻":0,"🧗🏼":0,"🧗🏽":0,"🧗🏾":0,"🧗🏿":0,"🧘🏻‍♀":0,"🧘🏼‍♀":0,"🧘🏽‍♀":0,"🧘🏾‍♀":0,"🧘🏿‍♀":0,"🧘🏻‍♂":0,"🧘🏼‍♂":0,"🧘🏽‍♂":0,"🧘🏾‍♂":0,"🧘🏿‍♂":0,"🧘🏻":0,"🧘🏼":0,"🧘🏽":0,"🧘🏾":0,"🧘🏿":0,"🧙🏻‍♀":0,"🧙🏼‍♀":0,"🧙🏽‍♀":0,"🧙🏾‍♀":0,"🧙🏿‍♀":0,"🧙🏻‍♂":0,"🧙🏼‍♂":0,"🧙🏽‍♂":0,"🧙🏾‍♂":0,"🧙🏿‍♂":0,"🧙🏻":0,"🧙🏼":0,"🧙🏽":0,"🧙🏾":0,"🧙🏿":0,"🧚🏻‍♀":0,"🧚🏼‍♀":0,"🧚🏽‍♀":0,"🧚🏾‍♀":0,"🧚🏿‍♀":0,"🧚🏻‍♂":0,"🧚🏼‍♂":0,"🧚🏽‍♂":0,"🧚🏾‍♂":0,"🧚🏿‍♂":0,"🧚🏻":0,"🧚🏼":0,"🧚🏽":0,"🧚🏾":0,"🧚🏿":0,"🧛🏻‍♀":0,"🧛🏼‍♀":0,"🧛🏽‍♀":0,"🧛🏾‍♀":0,"🧛🏿‍♀":0,"🧛🏻‍♂":0,"🧛🏼‍♂":0,"🧛🏽‍♂":0,"🧛🏾‍♂":0,"🧛🏿‍♂":0,"🧛🏻":0,"🧛🏼":0,"🧛🏽":0,"🧛🏾":0,"🧛🏿":0,"🧜🏻‍♀":0,"🧜🏼‍♀":0,"🧜🏽‍♀":0,"🧜🏾‍♀":0,"🧜🏿‍♀":0,"🧜🏻‍♂":0,"🧜🏼‍♂":0,"🧜🏽‍♂":0,"🧜🏾‍♂":0,"🧜🏿‍♂":0,"🧜🏻":0,"🧜🏼":0,"🧜🏽":0,"🧜🏾":0,"🧜🏿":0,"🧝🏻‍♀":0,"🧝🏼‍♀":0,"🧝🏽‍♀":0,"🧝🏾‍♀":0,"🧝🏿‍♀":0,"🧝🏻‍♂":0,"🧝🏼‍♂":0,"🧝🏽‍♂":0,"🧝🏾‍♂":0,"🧝🏿‍♂":0,"🧝🏻":0,"🧝🏼":0,"🧝🏽":0,"🧝🏾":0,"🧝🏿":0,"☝🏻":0,"☝🏼":0,"☝🏽":0,"☝🏾":0,"☝🏿":0,"⛹🏻‍♀":0,"⛹🏼‍♀":0,"⛹🏽‍♀":0,"⛹🏾‍♀":0,"⛹🏿‍♀":0,"⛹🏻‍♂":0,"⛹🏼‍♂":0,"⛹🏽‍♂":0,"⛹🏾‍♂":0,"⛹🏿‍♂":0,"⛹🏻":0,"⛹🏼":0,"⛹🏽":0,"⛹🏾":0,"⛹🏿":0,"✊🏻":0,"✊🏼":0,"✊🏽":0,"✊🏾":0,"✊🏿":0,"✋🏻":0,"✋🏼":0,"✋🏽":0,"✋🏾":0,"✋🏿":0,"✌🏻":0,"✌🏼":0,"✌🏽":0,"✌🏾":0,"✌🏿":0,"✍🏻":0,"✍🏼":0,"✍🏽":0,"✍🏾":0,"✍🏿":0} \ No newline at end of file +{"#️⃣":6365,"*️⃣":6366,"0️⃣":6367,"1️⃣":6368,"2️⃣":6369,"3️⃣":6370,"4️⃣":6371,"5️⃣":6372,"6️⃣":6373,"7️⃣":6374,"8️⃣":6375,"9️⃣":6376,"©️":6362,"®️":6363,"🀄":573,"🃏":572,"🅰️":6383,"🅱️":6385,"🅾️":6394,"🅿️":6396,"🆎":6384,"🆑":6386,"🆒":6387,"🆓":6388,"🆔":6390,"🆕":6392,"🆖":6393,"🆗":6395,"🆘":6397,"🆙":6398,"🆚":6399,"🇦🇨":78,"🇦🇩":79,"🇦🇪":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,"🇩🇿":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,"🇬🇶":7100,"🇬🇷":7101,"🇬🇸":7102,"🇬🇹":7103,"🇬🇺":7104,"🇬🇼":7105,"🇬🇾":7106,"🇭🇰":7107,"🇭🇲":7108,"🇭🇳":7109,"🇭🇷":7110,"🇭🇹":7111,"🇭🇺":7112,"🇮🇨":7113,"🇮🇩":7114,"🇮🇪":7115,"🇮🇱":7116,"🇮🇲":7117,"🇮🇳":7118,"🇮🇴":7119,"🇮🇶":7120,"🇮🇷":7121,"🇮🇸":7122,"🇮🇹":7123,"🇯🇪":7124,"🇯🇲":7125,"🇯🇴":7126,"🇯🇵":7127,"🇰🇪":7128,"🇰🇬":7129,"🇰🇭":7130,"🇰🇮":7131,"🇰🇲":7132,"🇰🇳":7133,"🇰🇵":7134,"🇰🇷":7135,"🇰🇼":7136,"🇰🇾":7137,"🇰🇿":7138,"🇱🇦":7139,"🇱🇧":7140,"🇱🇨":7141,"🇱🇮":7142,"🇱🇰":7143,"🇱🇷":7144,"🇱🇸":7145,"🇱🇹":7146,"🇱🇺":7147,"🇱🇻":7148,"🇱🇾":7149,"🇲🇦":7150,"🇲🇨":7151,"🇲🇩":7152,"🇲🇪":7153,"🇲🇫":7154,"🇲🇬":7155,"🇲🇭":7156,"🇲🇰":7157,"🇲🇱":7158,"🇲🇲":7159,"🇲🇳":7160,"🇲🇴":7161,"🇲🇵":7162,"🇲🇶":7163,"🇲🇷":7164,"🇲🇸":7165,"🇲🇹":7166,"🇲🇺":7167,"🇲🇻":7168,"🇲🇼":7169,"🇲🇽":7170,"🇲🇾":7171,"🇲🇿":7172,"🇳🇦":7173,"🇳🇨":7174,"🇳🇪":7175,"🇳🇫":7176,"🇳🇬":7177,"🇳🇮":7178,"🇳🇱":7179,"🇳🇴":7180,"🇳🇵":7181,"🇳🇷":7182,"🇳🇺":7183,"🇳🇿":7184,"🇴🇲":7185,"🇵🇦":7186,"🇵🇪":7187,"🇵🇫":7188,"🇵🇬":7189,"🇵🇭":7190,"🇵🇰":7191,"🇵🇱":7192,"🇵🇲":7193,"🇵🇳":7194,"🇵🇷":7195,"🇵🇸":7196,"🇵🇹":7197,"🇵🇼":7198,"🇵🇾":7199,"🇶🇦":7200,"🇷🇪":7201,"🇷🇴":7202,"🇷🇸":7203,"🇷🇺":7204,"🇷🇼":7205,"🇸🇦":7206,"🇸🇧":7207,"🇸🇨":7208,"🇸🇩":7209,"🇸🇪":7210,"🇸🇬":7211,"🇸🇭":7212,"🇸🇮":7213,"🇸🇯":7214,"🇸🇰":7215,"🇸🇱":7216,"🇸🇲":7217,"🇸🇳":7218,"🇸🇴":7219,"🇸🇷":7220,"🇸🇸":7221,"🇸🇹":7222,"🇸🇻":7223,"🇸🇽":7224,"🇸🇾":7225,"🇸🇿":7226,"🇹🇦":7227,"🇹🇨":7228,"🇹🇩":7229,"🇹🇫":7230,"🇹🇬":7231,"🇹🇭":7232,"🇹🇯":7233,"🇹🇰":7234,"🇹🇱":7235,"🇹🇲":7236,"🇹🇳":7237,"🇹🇴":7238,"🇹🇷":7239,"🇹🇹":7240,"🇹🇻":7241,"🇹🇼":7242,"🇹🇿":7243,"🇺🇦":7244,"🇺🇬":7245,"🇺🇲":7246,"🇺🇳":7247,"🇺🇸":7248,"🇺🇾":7249,"🇺🇿":7250,"🇻🇦":7251,"🇻🇨":7252,"🇻🇪":7253,"🇻🇬":7254,"🇻🇮":7255,"🇻🇳":7256,"🇻🇺":7257,"🇼🇫":7258,"🇼🇸":7259,"🇽🇰":7260,"🇾🇪":7261,"🇾🇹":7262,"🇿🇦":7263,"🇿🇲":7264,"🇿🇼":7265,"🈁":6400,"🈂️":6401,"🈚":6407,"🈯":6404,"🈲":6408,"🈳":6412,"🈴":6411,"🈵":6416,"🈶":6403,"🈷️":6402,"🈸":6410,"🈹":6406,"🈺":6415,"🉐":6405,"🉑":6409,"🌀":4197,"🌁":449,"🌂":4199,"🌃":450,"🌄":452,"🌅":453,"🌆":454,"🌇":455,"🌈":4198,"🌉":456,"🌊":4210,"🌋":410,"🌌":4184,"🌍":41,"🌎":42,"🌏":43,"🌐":44,"🌑":4164,"🌒":4165,"🌓":4166,"🌔":4167,"🌕":4168,"🌖":4169,"🌗":4170,"🌘":4171,"🌙":4172,"🌚":4173,"🌛":4174,"🌜":4175,"🌝":4178,"🌞":4179,"🌟":4182,"🌠":4183,"🌡️":4176,"🌤️":4188,"🌥️":4189,"🌦️":4190,"🌧️":4191,"🌨️":4192,"🌩️":4193,"🌪️":4194,"🌫️":4195,"🌬️":4196,"🌭":347,"🌮":349,"🌯":350,"🌰":331,"🌱":2116,"🌲":2117,"🌳":2118,"🌴":2119,"🌵":2120,"🌶️":323,"🌷":2115,"🌸":2107,"🌹":2110,"🌺":2112,"🌻":2113,"🌼":2114,"🌽":322,"🌾":2121,"🌿":2122,"🍀":2124,"🍁":2125,"🍂":2126,"🍃":2127,"🍄":329,"🍅":316,"🍆":319,"🍇":31,"🍈":32,"🍉":33,"🍊":34,"🍋":35,"🍌":36,"🍍":37,"🍎":39,"🍏":310,"🍐":311,"🍑":312,"🍒":313,"🍓":314,"🍔":344,"🍕":346,"🍖":340,"🍗":341,"🍘":364,"🍙":365,"🍚":366,"🍛":367,"🍜":368,"🍝":369,"🍞":332,"🍟":345,"🍠":370,"🍡":376,"🍢":371,"🍣":372,"🍤":373,"🍥":374,"🍦":385,"🍧":386,"🍨":387,"🍩":388,"🍪":389,"🍫":394,"🍬":395,"🍭":396,"🍮":397,"🍯":398,"🍰":391,"🍱":363,"🍲":356,"🍳":354,"🍴":3118,"🍵":3102,"🍶":3103,"🍷":3105,"🍸":3106,"🍹":3107,"🍺":3108,"🍻":3109,"🍼":399,"🍽️":3117,"🍾":3104,"🍿":359,"🎀":517,"🎁":518,"🎂":390,"🎃":51,"🎄":52,"🎅":1326,"🎆":53,"🎇":54,"🎈":57,"🎉":58,"🎊":59,"🎋":510,"🎌":73,"🎍":511,"🎎":512,"🎏":513,"🎐":514,"🎑":515,"🎒":625,"🎓":637,"🎖️":522,"🎗️":519,"🎙️":656,"🎚️":657,"🎛️":658,"🎞️":689,"🎟️":520,"🎠":458,"🎡":459,"🎢":460,"🎣":549,"🎤":659,"🎥":688,"🎦":6324,"🎧":660,"🎨":577,"🎩":636,"🎪":462,"🎫":521,"🎬":691,"🎭":575,"🎮":561,"🎯":555,"🎰":563,"🎱":558,"🎲":564,"🎳":537,"🎴":574,"🎵":654,"🎶":655,"🎷":662,"🎸":663,"🎹":664,"🎺":665,"🎻":666,"🎼":653,"🎽":551,"🎾":535,"🎿":552,"🏀":531,"🏁":71,"🏂":1397,"🏃‍♀️":1381,"🏃‍♂️":1380,"🏃":1379,"🏄‍♀️":1403,"🏄‍♂️":1402,"🏄":1401,"🏅":524,"🏆":523,"🏇":1395,"🏈":533,"🏉":534,"🏊‍♀️":1409,"🏊‍♂️":1408,"🏊":1407,"🏋️‍♀️":1415,"🏋️‍♂️":1414,"🏋️":1413,"🏌️‍♀️":1400,"🏌️‍♂️":1399,"🏌️":1398,"🏍️":492,"🏎️":491,"🏏":538,"🏐":532,"🏑":539,"🏒":540,"🏓":542,"🏔️":48,"🏕️":412,"🏖️":413,"🏗️":419,"🏘️":421,"🏙️":451,"🏚️":422,"🏛️":418,"🏜️":414,"🏝️":415,"🏞️":416,"🏟️":417,"🏠":423,"🏡":424,"🏢":425,"🏣":426,"🏤":427,"🏥":428,"🏦":429,"🏧":6234,"🏨":430,"🏩":431,"🏪":432,"🏫":433,"🏬":434,"🏭":435,"🏮":6102,"🏯":436,"🏰":437,"🏳️‍🌈":76,"🏳️":75,"🏴‍☠️":77,"🏴󠁧󠁢󠁥󠁮󠁧󠁿":7266,"🏴󠁧󠁢󠁳󠁣󠁴󠁿":7267,"🏴󠁧󠁢󠁷󠁬󠁳󠁿":7268,"🏴":74,"🏵️":2109,"🏷️":6120,"🏸":543,"🏹":6189,"🏺":3121,"🏻":81,"🏼":82,"🏽":83,"🏾":84,"🏿":85,"🐀":244,"🐁":243,"🐂":225,"🐃":226,"🐄":227,"🐅":217,"🐆":218,"🐇":247,"🐈":214,"🐉":282,"🐊":277,"🐋":286,"🐌":294,"🐍":280,"🐎":220,"🐏":232,"🐐":234,"🐑":233,"🐒":22,"🐓":262,"🐔":261,"🐕‍🦺":28,"🐕":26,"🐖":229,"🐗":230,"🐘":239,"🐙":292,"🐚":293,"🐛":296,"🐜":297,"🐝":298,"🐞":299,"🐟":288,"🐠":289,"🐡":290,"🐢":278,"🐣":263,"🐤":264,"🐥":265,"🐦":266,"🐧":267,"🐨":252,"🐩":29,"🐪":235,"🐫":236,"🐬":287,"🐭":242,"🐮":224,"🐯":216,"🐰":246,"🐱":213,"🐲":281,"🐳":285,"🐴":219,"🐵":21,"🐶":25,"🐷":228,"🐸":276,"🐹":245,"🐺":210,"🐻":251,"🐼":253,"🐽":231,"🐾":259,"🐿️":248,"👀":1194,"👁️‍🗨️":1145,"👁️":1195,"👂":1188,"👃":1190,"👄":1197,"👅":1196,"👆":1164,"👇":1166,"👈":1162,"👉":1163,"👊":1171,"👋":1150,"👌":1155,"👍":1168,"👎":1169,"👏":1174,"👐":1176,"👑":634,"👒":635,"👓":61,"👔":66,"👕":67,"👖":68,"👗":613,"👘":614,"👙":619,"👚":620,"👛":621,"👜":622,"👝":623,"👞":626,"👟":627,"👠":630,"👡":631,"👢":633,"👣":1483,"👤":1481,"👥":1482,"👦":1200,"👧":1201,"👨‍🌾":1267,"👨‍🍳":1270,"👨‍🎓":1258,"👨‍🎤":1288,"👨‍🎨":1291,"👨‍🏫":1261,"👨‍🏭":1276,"👨‍👦‍👦":1471,"👨‍👦":1470,"👨‍👧‍👦":1473,"👨‍👧‍👧":1474,"👨‍👧":1472,"👨‍👨‍👦":1460,"👨‍👨‍👦‍👦":1463,"👨‍👨‍👧":1461,"👨‍👨‍👧‍👦":1462,"👨‍👨‍👧‍👧":1464,"👨‍👩‍👦":1455,"👨‍👩‍👦‍👦":1458,"👨‍👩‍👧":1456,"👨‍👩‍👧‍👦":1457,"👨‍👩‍👧‍👧":1459,"👨‍💻":1285,"👨‍💼":1279,"👨‍🔧":1273,"👨‍🔬":1282,"👨‍🚀":1297,"👨‍🚒":1300,"👨‍🦯":1371,"👨‍🦰":1206,"👨‍🦱":1207,"👨‍🦲":1209,"👨‍🦳":1208,"👨‍🦼":1374,"👨‍🦽":1377,"👨‍⚕️":1255,"👨‍⚖️":1264,"👨‍✈️":1294,"👨‍❤️‍👨":1452,"👨‍❤️‍💋‍👨":1448,"👨":1204,"👩‍🌾":1268,"👩‍🍳":1271,"👩‍🎓":1259,"👩‍🎤":1289,"👩‍🎨":1292,"👩‍🏫":1262,"👩‍🏭":1277,"👩‍👦‍👦":1476,"👩‍👦":1475,"👩‍👧‍👦":1478,"👩‍👧‍👧":1479,"👩‍👧":1477,"👩‍👩‍👦":1465,"👩‍👩‍👦‍👦":1468,"👩‍👩‍👧":1466,"👩‍👩‍👧‍👦":1467,"👩‍👩‍👧‍👧":1469,"👩‍💻":1286,"👩‍💼":1280,"👩‍🔧":1274,"👩‍🔬":1283,"👩‍🚀":1298,"👩‍🚒":1301,"👩‍🦯":1372,"👩‍🦰":1211,"👩‍🦱":1213,"👩‍🦲":1217,"👩‍🦳":1215,"👩‍🦼":1375,"👩‍🦽":1378,"👩‍⚕️":1256,"👩‍⚖️":1265,"👩‍✈️":1295,"👩‍❤️‍👨":1451,"👩‍❤️‍👩":1453,"👩‍❤️‍💋‍👨":1447,"👩‍❤️‍💋‍👩":1449,"👩":1210,"👪":1454,"👫":1444,"👬":1445,"👭":1443,"👮‍♀️":1304,"👮‍♂️":1303,"👮":1302,"👯‍♀️":1387,"👯‍♂️":1386,"👯":1385,"👰":1322,"👱‍♀️":1219,"👱‍♂️":1220,"👱":1203,"👲":1319,"👳‍♀️":1318,"👳‍♂️":1317,"👳":1316,"👴":1222,"👵":1223,"👶":1198,"👷‍♀️":1313,"👷‍♂️":1312,"👷":1311,"👸":1315,"👹":197,"👺":198,"👻":199,"👼":1325,"👽":1100,"👾":1101,"👿":192,"💀":193,"💁‍♀️":1238,"💁‍♂️":1237,"💁":1236,"💂‍♀️":1310,"💂‍♂️":1309,"💂":1308,"💃":1382,"💄":641,"💅":1181,"💆‍♀️":1357,"💆‍♂️":1356,"💆":1355,"💇‍♀️":1360,"💇‍♂️":1359,"💇":1358,"💈":461,"💉":6208,"💊":6210,"💋":1115,"💌":1116,"💍":642,"💎":643,"💏":1446,"💐":2106,"💑":1450,"💒":438,"💓":1121,"💔":1126,"💕":1123,"💖":1119,"💗":1120,"💘":1117,"💙":1131,"💚":1130,"💛":1129,"💜":1132,"💝":1118,"💞":1122,"💟":1124,"💠":6447,"💡":6100,"💢":1137,"💣":1143,"💤":1149,"💥":1138,"💦":1140,"💧":4209,"💨":1141,"💩":195,"💪":1183,"💫":1139,"💬":1144,"💭":1148,"💮":2108,"💯":1136,"💰":6121,"💱":6130,"💲":6131,"💳":6127,"💴":6122,"💵":6123,"💶":6124,"💷":6125,"💸":6126,"💹":6129,"💺":4123,"💻":677,"💼":6152,"💽":683,"💾":684,"💿":685,"📀":686,"📁":6153,"📂":6154,"📃":6113,"📄":6115,"📅":6156,"📆":6157,"📇":6160,"📈":6161,"📉":6162,"📊":6163,"📋":6164,"📌":6165,"📍":6166,"📎":6167,"📏":6169,"📐":6170,"📑":6118,"📒":6112,"📓":6111,"📔":6104,"📕":6105,"📖":6106,"📗":6107,"📘":6108,"📙":6109,"📚":6110,"📛":6337,"📜":6114,"📝":6151,"📞":672,"📟":673,"📠":674,"📡":6207,"📢":648,"📣":649,"📤":6136,"📥":6137,"📦":6138,"📧":6133,"📨":6134,"📩":6135,"📪":6140,"📫":6139,"📬":6141,"📭":6142,"📮":6143,"📯":650,"📰":6116,"📱":669,"📲":670,"📳":6328,"📴":6329,"📵":6256,"📶":6327,"📷":693,"📸":694,"📹":695,"📺":692,"📻":661,"📼":696,"📽️":690,"📿":640,"🔀":6306,"🔁":6307,"🔂":6308,"🔃":6274,"🔄":6275,"🔅":6325,"🔆":6326,"🔇":644,"🔈":645,"🔉":646,"🔊":647,"🔋":675,"🔌":676,"🔍":697,"🔎":698,"🔏":6177,"🔐":6178,"🔑":6179,"🔒":6175,"🔓":6176,"🔔":651,"🔕":652,"🔖":6119,"🔗":6197,"🔘":6448,"🔙":6276,"🔚":6277,"🔛":6278,"🔜":6279,"🔝":6280,"🔞":6257,"🔟":6377,"🔠":6378,"🔡":6379,"🔢":6380,"🔣":6381,"🔤":6382,"🔥":4208,"🔦":6101,"🔧":6191,"🔨":6181,"🔩":6192,"🔪":3120,"🔫":6188,"🔬":6205,"🔭":6206,"🔮":559,"🔯":6292,"🔰":6338,"🔱":6336,"🔲":6450,"🔳":6449,"🔴":6417,"🔵":6421,"🔶":6441,"🔷":6442,"🔸":6443,"🔹":6444,"🔺":6445,"🔻":6446,"🔼":6316,"🔽":6318,"🕉️":6283,"🕊️":268,"🕋":446,"🕌":442,"🕍":444,"🕎":6291,"🕐":4142,"🕑":4144,"🕒":4146,"🕓":4148,"🕔":4150,"🕕":4152,"🕖":4154,"🕗":4156,"🕘":4158,"🕙":4160,"🕚":4162,"🕛":4140,"🕜":4143,"🕝":4145,"🕞":4147,"🕟":4149,"🕠":4151,"🕡":4153,"🕢":4155,"🕣":4157,"🕤":4159,"🕥":4161,"🕦":4163,"🕧":4141,"🕯️":699,"🕰️":4139,"🕳️":1142,"🕴️":1384,"🕵️‍♀️":1307,"🕵️‍♂️":1306,"🕵️":1305,"🕶️":62,"🕷️":2101,"🕸️":2102,"🕹️":562,"🕺":1383,"🖇️":6168,"🖊️":6148,"🖋️":6147,"🖌️":6149,"🖍️":6150,"🖐️":1152,"🖕":1165,"🖖":1154,"🖤":1134,"🖥️":678,"🖨️":679,"🖱️":681,"🖲️":682,"🖼️":576,"🗂️":6155,"🗃️":6172,"🗄️":6173,"🗑️":6174,"🗒️":6158,"🗓️":6159,"🗜️":6194,"🗝️":6180,"🗞️":6117,"🗡️":6186,"🗣️":1480,"🗨️":1146,"🗯️":1147,"🗳️":6144,"🗺️":45,"🗻":411,"🗼":439,"🗽":440,"🗾":46,"🗿":6233,"😀":11,"😁":14,"😂":18,"😃":12,"😄":13,"😅":16,"😆":15,"😇":113,"😈":191,"😉":111,"😊":112,"😋":122,"😌":142,"😍":115,"😎":160,"😏":137,"😐":134,"😑":135,"😒":138,"😓":183,"😔":143,"😕":163,"😖":180,"😗":118,"😘":117,"😙":121,"😚":120,"😛":123,"😜":124,"😝":126,"😞":182,"😟":164,"😠":189,"😡":188,"😢":177,"😣":181,"😤":187,"😥":176,"😦":172,"😧":173,"😨":174,"😩":184,"😪":144,"😫":185,"😬":140,"😭":178,"😮":167,"😯":168,"😰":175,"😱":179,"😲":169,"😳":170,"😴":146,"😵":156,"😶":136,"😷":147,"😸":1104,"😹":1105,"😺":1103,"😻":1106,"😼":1107,"😽":1108,"😾":1111,"😿":1110,"🙀":1109,"🙁":165,"🙂":19,"🙃":110,"🙄":139,"🙅‍♀️":1232,"🙅‍♂️":1231,"🙅":1230,"🙆‍♀️":1235,"🙆‍♂️":1234,"🙆":1233,"🙇‍♀️":1247,"🙇‍♂️":1246,"🙇":1245,"🙈":1112,"🙉":1113,"🙊":1114,"🙋‍♀️":1241,"🙋‍♂️":1240,"🙋":1239,"🙌":1175,"🙍‍♀️":1226,"🙍‍♂️":1225,"🙍":1224,"🙎‍♀️":1229,"🙎‍♂️":1228,"🙎":1227,"🙏":1179,"🚀":4129,"🚁":4124,"🚂":463,"🚃":464,"🚄":465,"🚅":466,"🚆":467,"🚇":468,"🚈":469,"🚉":470,"🚊":471,"🚋":474,"🚌":475,"🚍":476,"🚎":477,"🚏":4100,"🚐":478,"🚑":479,"🚒":480,"🚓":481,"🚔":482,"🚕":483,"🚖":484,"🚗":485,"🚘":486,"🚙":487,"🚚":488,"🚛":489,"🚜":490,"🚝":472,"🚞":473,"🚟":4125,"🚠":4126,"🚡":4127,"🚢":4117,"🚣‍♀️":1406,"🚣‍♂️":1405,"🚣":1404,"🚤":4113,"🚥":4106,"🚦":4107,"🚧":4109,"🚨":4105,"🚩":72,"🚪":6213,"🚫":6250,"🚬":6230,"🚭":6252,"🚮":6235,"🚯":6253,"🚰":6236,"🚱":6254,"🚲":497,"🚳":6251,"🚴‍♀️":1418,"🚴‍♂️":1417,"🚴":1416,"🚵‍♀️":1421,"🚵‍♂️":1420,"🚵":1419,"🚶‍♀️":1363,"🚶‍♂️":1362,"🚶":1361,"🚷":6255,"🚸":6248,"🚹":6238,"🚺":6239,"🚻":6240,"🚼":6241,"🚽":6217,"🚾":6242,"🚿":6218,"🛀":1440,"🛁":6219,"🛂":6243,"🛃":6244,"🛄":6245,"🛅":6246,"🛋️":6215,"🛌":1441,"🛍️":624,"🛎️":4131,"🛏️":6214,"🛐":6281,"🛑":4108,"🛒":6229,"🛕":443,"🛠️":6185,"🛡️":6190,"🛢️":4103,"🛣️":4101,"🛤️":4102,"🛥️":4116,"🛩️":4119,"🛫":4120,"🛬":4121,"🛰️":4128,"🛳️":4114,"🛴":498,"🛵":493,"🛶":4112,"🛷":553,"🛸":4130,"🛹":499,"🛺":496,"🟠":6418,"🟡":6419,"🟢":6420,"🟣":6422,"🟤":6423,"🟥":6426,"🟦":6430,"🟧":6427,"🟨":6428,"🟩":6429,"🟪":6431,"🟫":6432,"🤍":1135,"🤎":1133,"🤏":1156,"🤐":132,"🤑":127,"🤒":148,"🤓":161,"🤔":131,"🤕":149,"🤖":1102,"🤗":128,"🤘":1160,"🤙":1161,"🤚":1151,"🤛":1172,"🤜":1173,"🤝":1178,"🤞":1158,"🤟":1159,"🤠":158,"🤡":196,"🤢":150,"🤣":17,"🤤":145,"🤥":141,"🤦‍♀️":1250,"🤦‍♂️":1249,"🤦":1248,"🤧":152,"🤨":133,"🤩":116,"🤪":125,"🤫":130,"🤬":190,"🤭":129,"🤮":151,"🤯":157,"🤰":1323,"🤱":1324,"🤲":1177,"🤳":1182,"🤴":1314,"🤵":1321,"🤶":1327,"🤷‍♀️":1253,"🤷‍♂️":1252,"🤷":1251,"🤸‍♀️":1424,"🤸‍♂️":1423,"🤸":1422,"🤹‍♀️":1436,"🤹‍♂️":1435,"🤹":1434,"🤺":1394,"🤼‍♀️":1427,"🤼‍♂️":1426,"🤼":1425,"🤽‍♀️":1430,"🤽‍♂️":1429,"🤽":1428,"🤾‍♀️":1433,"🤾‍♂️":1432,"🤾":1431,"🤿":550,"🥀":2111,"🥁":668,"🥂":3110,"🥃":3111,"🥄":3119,"🥅":546,"🥇":525,"🥈":526,"🥉":527,"🥊":544,"🥋":545,"🥌":554,"🥍":541,"🥎":530,"🥏":536,"🥐":333,"🥑":318,"🥒":324,"🥓":343,"🥔":320,"🥕":321,"🥖":334,"🥗":358,"🥘":355,"🥙":351,"🥚":353,"🥛":3100,"🥜":330,"🥝":315,"🥞":337,"🥟":377,"🥠":378,"🥡":379,"🥢":3116,"🥣":357,"🥤":3112,"🥥":317,"🥦":326,"🥧":393,"🥨":335,"🥩":342,"🥪":348,"🥫":362,"🥬":325,"🥭":38,"🥮":375,"🥯":336,"🥰":114,"🥱":186,"🥳":159,"🥴":155,"🥵":153,"🥶":154,"🥺":171,"🥻":615,"🥼":64,"🥽":63,"🥾":628,"🥿":629,"🦀":380,"🦁":215,"🦂":2103,"🦃":260,"🦄":221,"🦅":269,"🦆":270,"🦇":250,"🦈":291,"🦉":272,"🦊":211,"🦋":295,"🦌":223,"🦍":23,"🦎":279,"🦏":240,"🦐":382,"🦑":383,"🦒":238,"🦓":222,"🦔":249,"🦕":283,"🦖":284,"🦗":2100,"🦘":257,"🦙":237,"🦚":274,"🦛":241,"🦜":275,"🦝":212,"🦞":381,"🦟":2104,"🦠":2105,"🦡":258,"🦢":271,"🦥":254,"🦦":255,"🦧":24,"🦨":256,"🦩":273,"🦪":384,"🦮":27,"🦯":6196,"🦴":1193,"🦵":1186,"🦶":1187,"🦷":1192,"🦸‍♀️":1330,"🦸‍♂️":1329,"🦸":1328,"🦹‍♀️":1333,"🦹‍♂️":1332,"🦹":1331,"🦺":65,"🦻":1189,"🦼":495,"🦽":494,"🦾":1184,"🦿":1185,"🧀":339,"🧁":392,"🧂":361,"🧃":3113,"🧄":327,"🧅":328,"🧆":352,"🧇":338,"🧈":360,"🧉":3114,"🧊":3115,"🧍‍♀️":1366,"🧍‍♂️":1365,"🧍":1364,"🧎‍♀️":1369,"🧎‍♂️":1368,"🧎":1367,"🧏‍♀️":1244,"🧏‍♂️":1243,"🧏":1242,"🧐":162,"🧑‍🌾":1266,"🧑‍🍳":1269,"🧑‍🎓":1257,"🧑‍🎤":1287,"🧑‍🎨":1290,"🧑‍🏫":1260,"🧑‍🏭":1275,"🧑‍💻":1284,"🧑‍💼":1278,"🧑‍🔧":1272,"🧑‍🔬":1281,"🧑‍🚀":1296,"🧑‍🚒":1299,"🧑‍🤝‍🧑":1442,"🧑‍🦯":1370,"🧑‍🦰":1212,"🧑‍🦱":1214,"🧑‍🦲":1218,"🧑‍🦳":1216,"🧑‍🦼":1373,"🧑‍🦽":1376,"🧑‍⚕️":1254,"🧑‍⚖️":1263,"🧑‍✈️":1293,"🧑":1202,"🧒":1199,"🧓":1221,"🧔":1205,"🧕":1320,"🧖‍♀️":1390,"🧖‍♂️":1389,"🧖":1388,"🧗‍♀️":1393,"🧗‍♂️":1392,"🧗":1391,"🧘‍♀️":1439,"🧘‍♂️":1438,"🧘":1437,"🧙‍♀️":1336,"🧙‍♂️":1335,"🧙":1334,"🧚‍♀️":1339,"🧚‍♂️":1338,"🧚":1337,"🧛‍♀️":1342,"🧛‍♂️":1341,"🧛":1340,"🧜‍♀️":1345,"🧜‍♂️":1344,"🧜":1343,"🧝‍♀️":1348,"🧝‍♂️":1347,"🧝":1346,"🧞‍♀️":1351,"🧞‍♂️":1350,"🧞":1349,"🧟‍♀️":1354,"🧟‍♂️":1353,"🧟":1352,"🧠":1191,"🧡":1128,"🧢":638,"🧣":69,"🧤":610,"🧥":611,"🧦":612,"🧧":516,"🧨":55,"🧩":565,"🧪":6202,"🧫":6203,"🧬":6204,"🧭":47,"🧮":687,"🧯":6228,"🧰":6199,"🧱":420,"🧲":6200,"🧳":4132,"🧴":6221,"🧵":578,"🧶":579,"🧷":6222,"🧸":566,"🧹":6223,"🧺":6224,"🧻":6225,"🧼":6226,"🧽":6227,"🧾":6128,"🧿":560,"🩰":632,"🩱":616,"🩲":617,"🩳":618,"🩸":6209,"🩹":6211,"🩺":6212,"🪀":556,"🪁":557,"🪂":4122,"🪐":4180,"🪑":6216,"🪒":6220,"🪓":6182,"🪔":6103,"🪕":667,"‼️":6355,"⁉️":6356,"™️":6364,"ℹ️":6389,"↔️":6269,"↕️":6268,"↖️":6267,"↗️":6261,"↘️":6263,"↙️":6265,"↩️":6270,"↪️":6271,"⌚":4135,"⌛":4133,"⌨️":680,"⏏️":6323,"⏩":6310,"⏪":6314,"⏫":6317,"⏬":6319,"⏭️":6311,"⏮️":6315,"⏯️":6312,"⏰":4136,"⏱️":4137,"⏲️":4138,"⏳":4134,"⏸️":6320,"⏹️":6321,"⏺️":6322,"Ⓜ️":6391,"▪️":6439,"▫️":6440,"▶️":6309,"◀️":6313,"◻️":6436,"◼️":6435,"◽":6438,"◾":6437,"☀️":4177,"☁️":4185,"☂️":4200,"☃️":4205,"☄️":4207,"☎️":671,"☑️":6341,"☔":4201,"☕":3101,"☘️":2123,"☝️":1167,"☠️":194,"☢️":6258,"☣️":6259,"☦️":6288,"☪️":6289,"☮️":6290,"☯️":6286,"☸️":6285,"☹️":166,"☺️":119,"♈":6293,"♉":6294,"♊":6295,"♋":6296,"♌":6297,"♍":6298,"♎":6299,"♏":6300,"♐":6301,"♑":6302,"♒":6303,"♓":6304,"♟️":571,"♠️":567,"♣️":570,"♥️":568,"♦️":569,"♨️":457,"♻️":6334,"♾️":6333,"♿":6237,"⚒️":6184,"⚓":4110,"⚔️":6187,"⚖️":6195,"⚗️":6201,"⚙️":6193,"⚛️":6282,"⚜️":6335,"⚠️":6247,"⚡":4203,"⚪":6425,"⚫":6424,"⚰️":6231,"⚱️":6232,"⚽":528,"⚾":529,"⛄":4206,"⛅":4186,"⛈️":4187,"⛎":6305,"⛏️":6183,"⛑️":639,"⛓️":6198,"⛔":6249,"⛩️":445,"⛪":441,"⛰️":49,"⛱️":4202,"⛲":447,"⛳":547,"⛴️":4115,"⛵":4111,"⛷️":1396,"⛸️":548,"⛹️‍♀️":1412,"⛹️‍♂️":1411,"⛹️":1410,"⛺":448,"⛽":4104,"✂️":6171,"✅":6340,"✈️":4118,"✉️":6132,"✊":1170,"✋":1153,"✌️":1157,"✍️":1180,"✏️":6145,"✒️":6146,"✔️":6342,"✖️":6343,"✝️":6287,"✡️":6284,"✨":56,"✳️":6352,"✴️":6353,"❄️":4204,"❇️":6354,"❌":6344,"❎":6345,"❓":6357,"❔":6358,"❕":6359,"❗":6360,"❣️":1125,"❤️":1127,"➕":6346,"➖":6347,"➗":6348,"➡️":6262,"➰":6349,"➿":6350,"⤴️":6272,"⤵️":6273,"⬅️":6266,"⬆️":6260,"⬇️":6264,"⬛":6433,"⬜":6434,"⭐":4181,"⭕":6339,"〰️":6361,"〽️":6351,"㊗️":6413,"㊙️":6414,"🎅🏻":0,"🎅🏼":0,"🎅🏽":0,"🎅🏾":0,"🎅🏿":0,"🏂🏻":0,"🏂🏼":0,"🏂🏽":0,"🏂🏾":0,"🏂🏿":0,"🏃🏻‍♀️":0,"🏃🏼‍♀️":0,"🏃🏽‍♀️":0,"🏃🏾‍♀️":0,"🏃🏿‍♀️":0,"🏃🏻‍♂️":0,"🏃🏼‍♂️":0,"🏃🏽‍♂️":0,"🏃🏾‍♂️":0,"🏃🏿‍♂️":0,"🏃🏻":0,"🏃🏼":0,"🏃🏽":0,"🏃🏾":0,"🏃🏿":0,"🏄🏻‍♀️":0,"🏄🏼‍♀️":0,"🏄🏽‍♀️":0,"🏄🏾‍♀️":0,"🏄🏿‍♀️":0,"🏄🏻‍♂️":0,"🏄🏼‍♂️":0,"🏄🏽‍♂️":0,"🏄🏾‍♂️":0,"🏄🏿‍♂️":0,"🏄🏻":0,"🏄🏼":0,"🏄🏽":0,"🏄🏾":0,"🏄🏿":0,"🏇🏻":0,"🏇🏼":0,"🏇🏽":0,"🏇🏾":0,"🏇🏿":0,"🏊🏻‍♀️":0,"🏊🏼‍♀️":0,"🏊🏽‍♀️":0,"🏊🏾‍♀️":0,"🏊🏿‍♀️":0,"🏊🏻‍♂️":0,"🏊🏼‍♂️":0,"🏊🏽‍♂️":0,"🏊🏾‍♂️":0,"🏊🏿‍♂️":0,"🏊🏻":0,"🏊🏼":0,"🏊🏽":0,"🏊🏾":0,"🏊🏿":0,"🏋🏻‍♀️":0,"🏋🏼‍♀️":0,"🏋🏽‍♀️":0,"🏋🏾‍♀️":0,"🏋🏿‍♀️":0,"🏋🏻‍♂️":0,"🏋🏼‍♂️":0,"🏋🏽‍♂️":0,"🏋🏾‍♂️":0,"🏋🏿‍♂️":0,"🏋🏻":0,"🏋🏼":0,"🏋🏽":0,"🏋🏾":0,"🏋🏿":0,"🏌🏻‍♀️":0,"🏌🏼‍♀️":0,"🏌🏽‍♀️":0,"🏌🏾‍♀️":0,"🏌🏿‍♀️":0,"🏌🏻‍♂️":0,"🏌🏼‍♂️":0,"🏌🏽‍♂️":0,"🏌🏾‍♂️":0,"🏌🏿‍♂️":0,"🏌🏻":0,"🏌🏼":0,"🏌🏽":0,"🏌🏾":0,"🏌🏿":0,"👂🏻":0,"👂🏼":0,"👂🏽":0,"👂🏾":0,"👂🏿":0,"👃🏻":0,"👃🏼":0,"👃🏽":0,"👃🏾":0,"👃🏿":0,"👆🏻":0,"👆🏼":0,"👆🏽":0,"👆🏾":0,"👆🏿":0,"👇🏻":0,"👇🏼":0,"👇🏽":0,"👇🏾":0,"👇🏿":0,"👈🏻":0,"👈🏼":0,"👈🏽":0,"👈🏾":0,"👈🏿":0,"👉🏻":0,"👉🏼":0,"👉🏽":0,"👉🏾":0,"👉🏿":0,"👊🏻":0,"👊🏼":0,"👊🏽":0,"👊🏾":0,"👊🏿":0,"👋🏻":0,"👋🏼":0,"👋🏽":0,"👋🏾":0,"👋🏿":0,"👌🏻":0,"👌🏼":0,"👌🏽":0,"👌🏾":0,"👌🏿":0,"👍🏻":0,"👍🏼":0,"👍🏽":0,"👍🏾":0,"👍🏿":0,"👎🏻":0,"👎🏼":0,"👎🏽":0,"👎🏾":0,"👎🏿":0,"👏🏻":0,"👏🏼":0,"👏🏽":0,"👏🏾":0,"👏🏿":0,"👐🏻":0,"👐🏼":0,"👐🏽":0,"👐🏾":0,"👐🏿":0,"👦🏻":0,"👦🏼":0,"👦🏽":0,"👦🏾":0,"👦🏿":0,"👧🏻":0,"👧🏼":0,"👧🏽":0,"👧🏾":0,"👧🏿":0,"👨🏻‍🌾":0,"👨🏼‍🌾":0,"👨🏽‍🌾":0,"👨🏾‍🌾":0,"👨🏿‍🌾":0,"👨🏻‍🍳":0,"👨🏼‍🍳":0,"👨🏽‍🍳":0,"👨🏾‍🍳":0,"👨🏿‍🍳":0,"👨🏻‍🎓":0,"👨🏼‍🎓":0,"👨🏽‍🎓":0,"👨🏾‍🎓":0,"👨🏿‍🎓":0,"👨🏻‍🎤":0,"👨🏼‍🎤":0,"👨🏽‍🎤":0,"👨🏾‍🎤":0,"👨🏿‍🎤":0,"👨🏻‍🎨":0,"👨🏼‍🎨":0,"👨🏽‍🎨":0,"👨🏾‍🎨":0,"👨🏿‍🎨":0,"👨🏻‍🏫":0,"👨🏼‍🏫":0,"👨🏽‍🏫":0,"👨🏾‍🏫":0,"👨🏿‍🏫":0,"👨🏻‍🏭":0,"👨🏼‍🏭":0,"👨🏽‍🏭":0,"👨🏾‍🏭":0,"👨🏿‍🏭":0,"👨🏻‍💻":0,"👨🏼‍💻":0,"👨🏽‍💻":0,"👨🏾‍💻":0,"👨🏿‍💻":0,"👨🏻‍💼":0,"👨🏼‍💼":0,"👨🏽‍💼":0,"👨🏾‍💼":0,"👨🏿‍💼":0,"👨🏻‍🔧":0,"👨🏼‍🔧":0,"👨🏽‍🔧":0,"👨🏾‍🔧":0,"👨🏿‍🔧":0,"👨🏻‍🔬":0,"👨🏼‍🔬":0,"👨🏽‍🔬":0,"👨🏾‍🔬":0,"👨🏿‍🔬":0,"👨🏻‍🚀":0,"👨🏼‍🚀":0,"👨🏽‍🚀":0,"👨🏾‍🚀":0,"👨🏿‍🚀":0,"👨🏻‍🚒":0,"👨🏼‍🚒":0,"👨🏽‍🚒":0,"👨🏾‍🚒":0,"👨🏿‍🚒":0,"👨🏻‍🦯":0,"👨🏼‍🦯":0,"👨🏽‍🦯":0,"👨🏾‍🦯":0,"👨🏿‍🦯":0,"👨🏻‍🦰":0,"👨🏼‍🦰":0,"👨🏽‍🦰":0,"👨🏾‍🦰":0,"👨🏿‍🦰":0,"👨🏻‍🦱":0,"👨🏼‍🦱":0,"👨🏽‍🦱":0,"👨🏾‍🦱":0,"👨🏿‍🦱":0,"👨🏻‍🦲":0,"👨🏼‍🦲":0,"👨🏽‍🦲":0,"👨🏾‍🦲":0,"👨🏿‍🦲":0,"👨🏻‍🦳":0,"👨🏼‍🦳":0,"👨🏽‍🦳":0,"👨🏾‍🦳":0,"👨🏿‍🦳":0,"👨🏻‍🦼":0,"👨🏼‍🦼":0,"👨🏽‍🦼":0,"👨🏾‍🦼":0,"👨🏿‍🦼":0,"👨🏻‍🦽":0,"👨🏼‍🦽":0,"👨🏽‍🦽":0,"👨🏾‍🦽":0,"👨🏿‍🦽":0,"👨🏻‍⚕️":0,"👨🏼‍⚕️":0,"👨🏽‍⚕️":0,"👨🏾‍⚕️":0,"👨🏿‍⚕️":0,"👨🏻‍⚖️":0,"👨🏼‍⚖️":0,"👨🏽‍⚖️":0,"👨🏾‍⚖️":0,"👨🏿‍⚖️":0,"👨🏻‍✈️":0,"👨🏼‍✈️":0,"👨🏽‍✈️":0,"👨🏾‍✈️":0,"👨🏿‍✈️":0,"👨🏻":0,"👨🏼":0,"👨🏽":0,"👨🏾":0,"👨🏿":0,"👩🏻‍🌾":0,"👩🏼‍🌾":0,"👩🏽‍🌾":0,"👩🏾‍🌾":0,"👩🏿‍🌾":0,"👩🏻‍🍳":0,"👩🏼‍🍳":0,"👩🏽‍🍳":0,"👩🏾‍🍳":0,"👩🏿‍🍳":0,"👩🏻‍🎓":0,"👩🏼‍🎓":0,"👩🏽‍🎓":0,"👩🏾‍🎓":0,"👩🏿‍🎓":0,"👩🏻‍🎤":0,"👩🏼‍🎤":0,"👩🏽‍🎤":0,"👩🏾‍🎤":0,"👩🏿‍🎤":0,"👩🏻‍🎨":0,"👩🏼‍🎨":0,"👩🏽‍🎨":0,"👩🏾‍🎨":0,"👩🏿‍🎨":0,"👩🏻‍🏫":0,"👩🏼‍🏫":0,"👩🏽‍🏫":0,"👩🏾‍🏫":0,"👩🏿‍🏫":0,"👩🏻‍🏭":0,"👩🏼‍🏭":0,"👩🏽‍🏭":0,"👩🏾‍🏭":0,"👩🏿‍🏭":0,"👩🏻‍💻":0,"👩🏼‍💻":0,"👩🏽‍💻":0,"👩🏾‍💻":0,"👩🏿‍💻":0,"👩🏻‍💼":0,"👩🏼‍💼":0,"👩🏽‍💼":0,"👩🏾‍💼":0,"👩🏿‍💼":0,"👩🏻‍🔧":0,"👩🏼‍🔧":0,"👩🏽‍🔧":0,"👩🏾‍🔧":0,"👩🏿‍🔧":0,"👩🏻‍🔬":0,"👩🏼‍🔬":0,"👩🏽‍🔬":0,"👩🏾‍🔬":0,"👩🏿‍🔬":0,"👩🏻‍🚀":0,"👩🏼‍🚀":0,"👩🏽‍🚀":0,"👩🏾‍🚀":0,"👩🏿‍🚀":0,"👩🏻‍🚒":0,"👩🏼‍🚒":0,"👩🏽‍🚒":0,"👩🏾‍🚒":0,"👩🏿‍🚒":0,"👩🏻‍🦯":0,"👩🏼‍🦯":0,"👩🏽‍🦯":0,"👩🏾‍🦯":0,"👩🏿‍🦯":0,"👩🏻‍🦰":0,"👩🏼‍🦰":0,"👩🏽‍🦰":0,"👩🏾‍🦰":0,"👩🏿‍🦰":0,"👩🏻‍🦱":0,"👩🏼‍🦱":0,"👩🏽‍🦱":0,"👩🏾‍🦱":0,"👩🏿‍🦱":0,"👩🏻‍🦲":0,"👩🏼‍🦲":0,"👩🏽‍🦲":0,"👩🏾‍🦲":0,"👩🏿‍🦲":0,"👩🏻‍🦳":0,"👩🏼‍🦳":0,"👩🏽‍🦳":0,"👩🏾‍🦳":0,"👩🏿‍🦳":0,"👩🏻‍🦼":0,"👩🏼‍🦼":0,"👩🏽‍🦼":0,"👩🏾‍🦼":0,"👩🏿‍🦼":0,"👩🏻‍🦽":0,"👩🏼‍🦽":0,"👩🏽‍🦽":0,"👩🏾‍🦽":0,"👩🏿‍🦽":0,"👩🏻‍⚕️":0,"👩🏼‍⚕️":0,"👩🏽‍⚕️":0,"👩🏾‍⚕️":0,"👩🏿‍⚕️":0,"👩🏻‍⚖️":0,"👩🏼‍⚖️":0,"👩🏽‍⚖️":0,"👩🏾‍⚖️":0,"👩🏿‍⚖️":0,"👩🏻‍✈️":0,"👩🏼‍✈️":0,"👩🏽‍✈️":0,"👩🏾‍✈️":0,"👩🏿‍✈️":0,"👩🏻":0,"👩🏼":0,"👩🏽":0,"👩🏾":0,"👩🏿":0,"👫🏻":0,"👫🏼":0,"👫🏽":0,"👫🏾":0,"👫🏿":0,"👩🏻‍🤝‍👨🏼":0,"👩🏻‍🤝‍👨🏽":0,"👩🏻‍🤝‍👨🏾":0,"👩🏻‍🤝‍👨🏿":0,"👩🏼‍🤝‍👨🏻":0,"👩🏼‍🤝‍👨🏽":0,"👩🏼‍🤝‍👨🏾":0,"👩🏼‍🤝‍👨🏿":0,"👩🏽‍🤝‍👨🏻":0,"👩🏽‍🤝‍👨🏼":0,"👩🏽‍🤝‍👨🏾":0,"👩🏽‍🤝‍👨🏿":0,"👩🏾‍🤝‍👨🏻":0,"👩🏾‍🤝‍👨🏼":0,"👩🏾‍🤝‍👨🏽":0,"👩🏾‍🤝‍👨🏿":0,"👩🏿‍🤝‍👨🏻":0,"👩🏿‍🤝‍👨🏼":0,"👩🏿‍🤝‍👨🏽":0,"👩🏿‍🤝‍👨🏾":0,"👬🏻":0,"👬🏼":0,"👬🏽":0,"👬🏾":0,"👬🏿":0,"👨🏻‍🤝‍👨🏼":0,"👨🏻‍🤝‍👨🏽":0,"👨🏻‍🤝‍👨🏾":0,"👨🏻‍🤝‍👨🏿":0,"👨🏼‍🤝‍👨🏻":0,"👨🏼‍🤝‍👨🏽":0,"👨🏼‍🤝‍👨🏾":0,"👨🏼‍🤝‍👨🏿":0,"👨🏽‍🤝‍👨🏻":0,"👨🏽‍🤝‍👨🏼":0,"👨🏽‍🤝‍👨🏾":0,"👨🏽‍🤝‍👨🏿":0,"👨🏾‍🤝‍👨🏻":0,"👨🏾‍🤝‍👨🏼":0,"👨🏾‍🤝‍👨🏽":0,"👨🏾‍🤝‍👨🏿":0,"👨🏿‍🤝‍👨🏻":0,"👨🏿‍🤝‍👨🏼":0,"👨🏿‍🤝‍👨🏽":0,"👨🏿‍🤝‍👨🏾":0,"👭🏻":0,"👭🏼":0,"👭🏽":0,"👭🏾":0,"👭🏿":0,"👩🏻‍🤝‍👩🏼":0,"👩🏻‍🤝‍👩🏽":0,"👩🏻‍🤝‍👩🏾":0,"👩🏻‍🤝‍👩🏿":0,"👩🏼‍🤝‍👩🏻":0,"👩🏼‍🤝‍👩🏽":0,"👩🏼‍🤝‍👩🏾":0,"👩🏼‍🤝‍👩🏿":0,"👩🏽‍🤝‍👩🏻":0,"👩🏽‍🤝‍👩🏼":0,"👩🏽‍🤝‍👩🏾":0,"👩🏽‍🤝‍👩🏿":0,"👩🏾‍🤝‍👩🏻":0,"👩🏾‍🤝‍👩🏼":0,"👩🏾‍🤝‍👩🏽":0,"👩🏾‍🤝‍👩🏿":0,"👩🏿‍🤝‍👩🏻":0,"👩🏿‍🤝‍👩🏼":0,"👩🏿‍🤝‍👩🏽":0,"👩🏿‍🤝‍👩🏾":0,"👮🏻‍♀️":0,"👮🏼‍♀️":0,"👮🏽‍♀️":0,"👮🏾‍♀️":0,"👮🏿‍♀️":0,"👮🏻‍♂️":0,"👮🏼‍♂️":0,"👮🏽‍♂️":0,"👮🏾‍♂️":0,"👮🏿‍♂️":0,"👮🏻":0,"👮🏼":0,"👮🏽":0,"👮🏾":0,"👮🏿":0,"👰🏻":0,"👰🏼":0,"👰🏽":0,"👰🏾":0,"👰🏿":0,"👱🏻‍♀️":0,"👱🏼‍♀️":0,"👱🏽‍♀️":0,"👱🏾‍♀️":0,"👱🏿‍♀️":0,"👱🏻‍♂️":0,"👱🏼‍♂️":0,"👱🏽‍♂️":0,"👱🏾‍♂️":0,"👱🏿‍♂️":0,"👱🏻":0,"👱🏼":0,"👱🏽":0,"👱🏾":0,"👱🏿":0,"👲🏻":0,"👲🏼":0,"👲🏽":0,"👲🏾":0,"👲🏿":0,"👳🏻‍♀️":0,"👳🏼‍♀️":0,"👳🏽‍♀️":0,"👳🏾‍♀️":0,"👳🏿‍♀️":0,"👳🏻‍♂️":0,"👳🏼‍♂️":0,"👳🏽‍♂️":0,"👳🏾‍♂️":0,"👳🏿‍♂️":0,"👳🏻":0,"👳🏼":0,"👳🏽":0,"👳🏾":0,"👳🏿":0,"👴🏻":0,"👴🏼":0,"👴🏽":0,"👴🏾":0,"👴🏿":0,"👵🏻":0,"👵🏼":0,"👵🏽":0,"👵🏾":0,"👵🏿":0,"👶🏻":0,"👶🏼":0,"👶🏽":0,"👶🏾":0,"👶🏿":0,"👷🏻‍♀️":0,"👷🏼‍♀️":0,"👷🏽‍♀️":0,"👷🏾‍♀️":0,"👷🏿‍♀️":0,"👷🏻‍♂️":0,"👷🏼‍♂️":0,"👷🏽‍♂️":0,"👷🏾‍♂️":0,"👷🏿‍♂️":0,"👷🏻":0,"👷🏼":0,"👷🏽":0,"👷🏾":0,"👷🏿":0,"👸🏻":0,"👸🏼":0,"👸🏽":0,"👸🏾":0,"👸🏿":0,"👼🏻":0,"👼🏼":0,"👼🏽":0,"👼🏾":0,"👼🏿":0,"💁🏻‍♀️":0,"💁🏼‍♀️":0,"💁🏽‍♀️":0,"💁🏾‍♀️":0,"💁🏿‍♀️":0,"💁🏻‍♂️":0,"💁🏼‍♂️":0,"💁🏽‍♂️":0,"💁🏾‍♂️":0,"💁🏿‍♂️":0,"💁🏻":0,"💁🏼":0,"💁🏽":0,"💁🏾":0,"💁🏿":0,"💂🏻‍♀️":0,"💂🏼‍♀️":0,"💂🏽‍♀️":0,"💂🏾‍♀️":0,"💂🏿‍♀️":0,"💂🏻‍♂️":0,"💂🏼‍♂️":0,"💂🏽‍♂️":0,"💂🏾‍♂️":0,"💂🏿‍♂️":0,"💂🏻":0,"💂🏼":0,"💂🏽":0,"💂🏾":0,"💂🏿":0,"💃🏻":0,"💃🏼":0,"💃🏽":0,"💃🏾":0,"💃🏿":0,"💅🏻":0,"💅🏼":0,"💅🏽":0,"💅🏾":0,"💅🏿":0,"💆🏻‍♀️":0,"💆🏼‍♀️":0,"💆🏽‍♀️":0,"💆🏾‍♀️":0,"💆🏿‍♀️":0,"💆🏻‍♂️":0,"💆🏼‍♂️":0,"💆🏽‍♂️":0,"💆🏾‍♂️":0,"💆🏿‍♂️":0,"💆🏻":0,"💆🏼":0,"💆🏽":0,"💆🏾":0,"💆🏿":0,"💇🏻‍♀️":0,"💇🏼‍♀️":0,"💇🏽‍♀️":0,"💇🏾‍♀️":0,"💇🏿‍♀️":0,"💇🏻‍♂️":0,"💇🏼‍♂️":0,"💇🏽‍♂️":0,"💇🏾‍♂️":0,"💇🏿‍♂️":0,"💇🏻":0,"💇🏼":0,"💇🏽":0,"💇🏾":0,"💇🏿":0,"💪🏻":0,"💪🏼":0,"💪🏽":0,"💪🏾":0,"💪🏿":0,"🕴🏻":0,"🕴🏼":0,"🕴🏽":0,"🕴🏾":0,"🕴🏿":0,"🕵🏻‍♀️":0,"🕵🏼‍♀️":0,"🕵🏽‍♀️":0,"🕵🏾‍♀️":0,"🕵🏿‍♀️":0,"🕵🏻‍♂️":0,"🕵🏼‍♂️":0,"🕵🏽‍♂️":0,"🕵🏾‍♂️":0,"🕵🏿‍♂️":0,"🕵🏻":0,"🕵🏼":0,"🕵🏽":0,"🕵🏾":0,"🕵🏿":0,"🕺🏻":0,"🕺🏼":0,"🕺🏽":0,"🕺🏾":0,"🕺🏿":0,"🖐🏻":0,"🖐🏼":0,"🖐🏽":0,"🖐🏾":0,"🖐🏿":0,"🖕🏻":0,"🖕🏼":0,"🖕🏽":0,"🖕🏾":0,"🖕🏿":0,"🖖🏻":0,"🖖🏼":0,"🖖🏽":0,"🖖🏾":0,"🖖🏿":0,"🙅🏻‍♀️":0,"🙅🏼‍♀️":0,"🙅🏽‍♀️":0,"🙅🏾‍♀️":0,"🙅🏿‍♀️":0,"🙅🏻‍♂️":0,"🙅🏼‍♂️":0,"🙅🏽‍♂️":0,"🙅🏾‍♂️":0,"🙅🏿‍♂️":0,"🙅🏻":0,"🙅🏼":0,"🙅🏽":0,"🙅🏾":0,"🙅🏿":0,"🙆🏻‍♀️":0,"🙆🏼‍♀️":0,"🙆🏽‍♀️":0,"🙆🏾‍♀️":0,"🙆🏿‍♀️":0,"🙆🏻‍♂️":0,"🙆🏼‍♂️":0,"🙆🏽‍♂️":0,"🙆🏾‍♂️":0,"🙆🏿‍♂️":0,"🙆🏻":0,"🙆🏼":0,"🙆🏽":0,"🙆🏾":0,"🙆🏿":0,"🙇🏻‍♀️":0,"🙇🏼‍♀️":0,"🙇🏽‍♀️":0,"🙇🏾‍♀️":0,"🙇🏿‍♀️":0,"🙇🏻‍♂️":0,"🙇🏼‍♂️":0,"🙇🏽‍♂️":0,"🙇🏾‍♂️":0,"🙇🏿‍♂️":0,"🙇🏻":0,"🙇🏼":0,"🙇🏽":0,"🙇🏾":0,"🙇🏿":0,"🙋🏻‍♀️":0,"🙋🏼‍♀️":0,"🙋🏽‍♀️":0,"🙋🏾‍♀️":0,"🙋🏿‍♀️":0,"🙋🏻‍♂️":0,"🙋🏼‍♂️":0,"🙋🏽‍♂️":0,"🙋🏾‍♂️":0,"🙋🏿‍♂️":0,"🙋🏻":0,"🙋🏼":0,"🙋🏽":0,"🙋🏾":0,"🙋🏿":0,"🙌🏻":0,"🙌🏼":0,"🙌🏽":0,"🙌🏾":0,"🙌🏿":0,"🙍🏻‍♀️":0,"🙍🏼‍♀️":0,"🙍🏽‍♀️":0,"🙍🏾‍♀️":0,"🙍🏿‍♀️":0,"🙍🏻‍♂️":0,"🙍🏼‍♂️":0,"🙍🏽‍♂️":0,"🙍🏾‍♂️":0,"🙍🏿‍♂️":0,"🙍🏻":0,"🙍🏼":0,"🙍🏽":0,"🙍🏾":0,"🙍🏿":0,"🙎🏻‍♀️":0,"🙎🏼‍♀️":0,"🙎🏽‍♀️":0,"🙎🏾‍♀️":0,"🙎🏿‍♀️":0,"🙎🏻‍♂️":0,"🙎🏼‍♂️":0,"🙎🏽‍♂️":0,"🙎🏾‍♂️":0,"🙎🏿‍♂️":0,"🙎🏻":0,"🙎🏼":0,"🙎🏽":0,"🙎🏾":0,"🙎🏿":0,"🙏🏻":0,"🙏🏼":0,"🙏🏽":0,"🙏🏾":0,"🙏🏿":0,"🚣🏻‍♀️":0,"🚣🏼‍♀️":0,"🚣🏽‍♀️":0,"🚣🏾‍♀️":0,"🚣🏿‍♀️":0,"🚣🏻‍♂️":0,"🚣🏼‍♂️":0,"🚣🏽‍♂️":0,"🚣🏾‍♂️":0,"🚣🏿‍♂️":0,"🚣🏻":0,"🚣🏼":0,"🚣🏽":0,"🚣🏾":0,"🚣🏿":0,"🚴🏻‍♀️":0,"🚴🏼‍♀️":0,"🚴🏽‍♀️":0,"🚴🏾‍♀️":0,"🚴🏿‍♀️":0,"🚴🏻‍♂️":0,"🚴🏼‍♂️":0,"🚴🏽‍♂️":0,"🚴🏾‍♂️":0,"🚴🏿‍♂️":0,"🚴🏻":0,"🚴🏼":0,"🚴🏽":0,"🚴🏾":0,"🚴🏿":0,"🚵🏻‍♀️":0,"🚵🏼‍♀️":0,"🚵🏽‍♀️":0,"🚵🏾‍♀️":0,"🚵🏿‍♀️":0,"🚵🏻‍♂️":0,"🚵🏼‍♂️":0,"🚵🏽‍♂️":0,"🚵🏾‍♂️":0,"🚵🏿‍♂️":0,"🚵🏻":0,"🚵🏼":0,"🚵🏽":0,"🚵🏾":0,"🚵🏿":0,"🚶🏻‍♀️":0,"🚶🏼‍♀️":0,"🚶🏽‍♀️":0,"🚶🏾‍♀️":0,"🚶🏿‍♀️":0,"🚶🏻‍♂️":0,"🚶🏼‍♂️":0,"🚶🏽‍♂️":0,"🚶🏾‍♂️":0,"🚶🏿‍♂️":0,"🚶🏻":0,"🚶🏼":0,"🚶🏽":0,"🚶🏾":0,"🚶🏿":0,"🛀🏻":0,"🛀🏼":0,"🛀🏽":0,"🛀🏾":0,"🛀🏿":0,"🛌🏻":0,"🛌🏼":0,"🛌🏽":0,"🛌🏾":0,"🛌🏿":0,"🤏🏻":0,"🤏🏼":0,"🤏🏽":0,"🤏🏾":0,"🤏🏿":0,"🤘🏻":0,"🤘🏼":0,"🤘🏽":0,"🤘🏾":0,"🤘🏿":0,"🤙🏻":0,"🤙🏼":0,"🤙🏽":0,"🤙🏾":0,"🤙🏿":0,"🤚🏻":0,"🤚🏼":0,"🤚🏽":0,"🤚🏾":0,"🤚🏿":0,"🤛🏻":0,"🤛🏼":0,"🤛🏽":0,"🤛🏾":0,"🤛🏿":0,"🤜🏻":0,"🤜🏼":0,"🤜🏽":0,"🤜🏾":0,"🤜🏿":0,"🤞🏻":0,"🤞🏼":0,"🤞🏽":0,"🤞🏾":0,"🤞🏿":0,"🤟🏻":0,"🤟🏼":0,"🤟🏽":0,"🤟🏾":0,"🤟🏿":0,"🤦🏻‍♀️":0,"🤦🏼‍♀️":0,"🤦🏽‍♀️":0,"🤦🏾‍♀️":0,"🤦🏿‍♀️":0,"🤦🏻‍♂️":0,"🤦🏼‍♂️":0,"🤦🏽‍♂️":0,"🤦🏾‍♂️":0,"🤦🏿‍♂️":0,"🤦🏻":0,"🤦🏼":0,"🤦🏽":0,"🤦🏾":0,"🤦🏿":0,"🤰🏻":0,"🤰🏼":0,"🤰🏽":0,"🤰🏾":0,"🤰🏿":0,"🤱🏻":0,"🤱🏼":0,"🤱🏽":0,"🤱🏾":0,"🤱🏿":0,"🤲🏻":0,"🤲🏼":0,"🤲🏽":0,"🤲🏾":0,"🤲🏿":0,"🤳🏻":0,"🤳🏼":0,"🤳🏽":0,"🤳🏾":0,"🤳🏿":0,"🤴🏻":0,"🤴🏼":0,"🤴🏽":0,"🤴🏾":0,"🤴🏿":0,"🤵🏻":0,"🤵🏼":0,"🤵🏽":0,"🤵🏾":0,"🤵🏿":0,"🤶🏻":0,"🤶🏼":0,"🤶🏽":0,"🤶🏾":0,"🤶🏿":0,"🤷🏻‍♀️":0,"🤷🏼‍♀️":0,"🤷🏽‍♀️":0,"🤷🏾‍♀️":0,"🤷🏿‍♀️":0,"🤷🏻‍♂️":0,"🤷🏼‍♂️":0,"🤷🏽‍♂️":0,"🤷🏾‍♂️":0,"🤷🏿‍♂️":0,"🤷🏻":0,"🤷🏼":0,"🤷🏽":0,"🤷🏾":0,"🤷🏿":0,"🤸🏻‍♀️":0,"🤸🏼‍♀️":0,"🤸🏽‍♀️":0,"🤸🏾‍♀️":0,"🤸🏿‍♀️":0,"🤸🏻‍♂️":0,"🤸🏼‍♂️":0,"🤸🏽‍♂️":0,"🤸🏾‍♂️":0,"🤸🏿‍♂️":0,"🤸🏻":0,"🤸🏼":0,"🤸🏽":0,"🤸🏾":0,"🤸🏿":0,"🤹🏻‍♀️":0,"🤹🏼‍♀️":0,"🤹🏽‍♀️":0,"🤹🏾‍♀️":0,"🤹🏿‍♀️":0,"🤹🏻‍♂️":0,"🤹🏼‍♂️":0,"🤹🏽‍♂️":0,"🤹🏾‍♂️":0,"🤹🏿‍♂️":0,"🤹🏻":0,"🤹🏼":0,"🤹🏽":0,"🤹🏾":0,"🤹🏿":0,"🤽🏻‍♀️":0,"🤽🏼‍♀️":0,"🤽🏽‍♀️":0,"🤽🏾‍♀️":0,"🤽🏿‍♀️":0,"🤽🏻‍♂️":0,"🤽🏼‍♂️":0,"🤽🏽‍♂️":0,"🤽🏾‍♂️":0,"🤽🏿‍♂️":0,"🤽🏻":0,"🤽🏼":0,"🤽🏽":0,"🤽🏾":0,"🤽🏿":0,"🤾🏻‍♀️":0,"🤾🏼‍♀️":0,"🤾🏽‍♀️":0,"🤾🏾‍♀️":0,"🤾🏿‍♀️":0,"🤾🏻‍♂️":0,"🤾🏼‍♂️":0,"🤾🏽‍♂️":0,"🤾🏾‍♂️":0,"🤾🏿‍♂️":0,"🤾🏻":0,"🤾🏼":0,"🤾🏽":0,"🤾🏾":0,"🤾🏿":0,"🦵🏻":0,"🦵🏼":0,"🦵🏽":0,"🦵🏾":0,"🦵🏿":0,"🦶🏻":0,"🦶🏼":0,"🦶🏽":0,"🦶🏾":0,"🦶🏿":0,"🦸🏻‍♀️":0,"🦸🏼‍♀️":0,"🦸🏽‍♀️":0,"🦸🏾‍♀️":0,"🦸🏿‍♀️":0,"🦸🏻‍♂️":0,"🦸🏼‍♂️":0,"🦸🏽‍♂️":0,"🦸🏾‍♂️":0,"🦸🏿‍♂️":0,"🦸🏻":0,"🦸🏼":0,"🦸🏽":0,"🦸🏾":0,"🦸🏿":0,"🦹🏻‍♀️":0,"🦹🏼‍♀️":0,"🦹🏽‍♀️":0,"🦹🏾‍♀️":0,"🦹🏿‍♀️":0,"🦹🏻‍♂️":0,"🦹🏼‍♂️":0,"🦹🏽‍♂️":0,"🦹🏾‍♂️":0,"🦹🏿‍♂️":0,"🦹🏻":0,"🦹🏼":0,"🦹🏽":0,"🦹🏾":0,"🦹🏿":0,"🦻🏻":0,"🦻🏼":0,"🦻🏽":0,"🦻🏾":0,"🦻🏿":0,"🧍🏻‍♀️":0,"🧍🏼‍♀️":0,"🧍🏽‍♀️":0,"🧍🏾‍♀️":0,"🧍🏿‍♀️":0,"🧍🏻‍♂️":0,"🧍🏼‍♂️":0,"🧍🏽‍♂️":0,"🧍🏾‍♂️":0,"🧍🏿‍♂️":0,"🧍🏻":0,"🧍🏼":0,"🧍🏽":0,"🧍🏾":0,"🧍🏿":0,"🧎🏻‍♀️":0,"🧎🏼‍♀️":0,"🧎🏽‍♀️":0,"🧎🏾‍♀️":0,"🧎🏿‍♀️":0,"🧎🏻‍♂️":0,"🧎🏼‍♂️":0,"🧎🏽‍♂️":0,"🧎🏾‍♂️":0,"🧎🏿‍♂️":0,"🧎🏻":0,"🧎🏼":0,"🧎🏽":0,"🧎🏾":0,"🧎🏿":0,"🧏🏻‍♀️":0,"🧏🏼‍♀️":0,"🧏🏽‍♀️":0,"🧏🏾‍♀️":0,"🧏🏿‍♀️":0,"🧏🏻‍♂️":0,"🧏🏼‍♂️":0,"🧏🏽‍♂️":0,"🧏🏾‍♂️":0,"🧏🏿‍♂️":0,"🧏🏻":0,"🧏🏼":0,"🧏🏽":0,"🧏🏾":0,"🧏🏿":0,"🧑🏻‍🌾":0,"🧑🏼‍🌾":0,"🧑🏽‍🌾":0,"🧑🏾‍🌾":0,"🧑🏿‍🌾":0,"🧑🏻‍🍳":0,"🧑🏼‍🍳":0,"🧑🏽‍🍳":0,"🧑🏾‍🍳":0,"🧑🏿‍🍳":0,"🧑🏻‍🎓":0,"🧑🏼‍🎓":0,"🧑🏽‍🎓":0,"🧑🏾‍🎓":0,"🧑🏿‍🎓":0,"🧑🏻‍🎤":0,"🧑🏼‍🎤":0,"🧑🏽‍🎤":0,"🧑🏾‍🎤":0,"🧑🏿‍🎤":0,"🧑🏻‍🎨":0,"🧑🏼‍🎨":0,"🧑🏽‍🎨":0,"🧑🏾‍🎨":0,"🧑🏿‍🎨":0,"🧑🏻‍🏫":0,"🧑🏼‍🏫":0,"🧑🏽‍🏫":0,"🧑🏾‍🏫":0,"🧑🏿‍🏫":0,"🧑🏻‍🏭":0,"🧑🏼‍🏭":0,"🧑🏽‍🏭":0,"🧑🏾‍🏭":0,"🧑🏿‍🏭":0,"🧑🏻‍💻":0,"🧑🏼‍💻":0,"🧑🏽‍💻":0,"🧑🏾‍💻":0,"🧑🏿‍💻":0,"🧑🏻‍💼":0,"🧑🏼‍💼":0,"🧑🏽‍💼":0,"🧑🏾‍💼":0,"🧑🏿‍💼":0,"🧑🏻‍🔧":0,"🧑🏼‍🔧":0,"🧑🏽‍🔧":0,"🧑🏾‍🔧":0,"🧑🏿‍🔧":0,"🧑🏻‍🔬":0,"🧑🏼‍🔬":0,"🧑🏽‍🔬":0,"🧑🏾‍🔬":0,"🧑🏿‍🔬":0,"🧑🏻‍🚀":0,"🧑🏼‍🚀":0,"🧑🏽‍🚀":0,"🧑🏾‍🚀":0,"🧑🏿‍🚀":0,"🧑🏻‍🚒":0,"🧑🏼‍🚒":0,"🧑🏽‍🚒":0,"🧑🏾‍🚒":0,"🧑🏿‍🚒":0,"🧑🏻‍🤝‍🧑🏻":0,"🧑🏻‍🤝‍🧑🏼":0,"🧑🏻‍🤝‍🧑🏽":0,"🧑🏻‍🤝‍🧑🏾":0,"🧑🏻‍🤝‍🧑🏿":0,"🧑🏼‍🤝‍🧑🏻":0,"🧑🏼‍🤝‍🧑🏼":0,"🧑🏼‍🤝‍🧑🏽":0,"🧑🏼‍🤝‍🧑🏾":0,"🧑🏼‍🤝‍🧑🏿":0,"🧑🏽‍🤝‍🧑🏻":0,"🧑🏽‍🤝‍🧑🏼":0,"🧑🏽‍🤝‍🧑🏽":0,"🧑🏽‍🤝‍🧑🏾":0,"🧑🏽‍🤝‍🧑🏿":0,"🧑🏾‍🤝‍🧑🏻":0,"🧑🏾‍🤝‍🧑🏼":0,"🧑🏾‍🤝‍🧑🏽":0,"🧑🏾‍🤝‍🧑🏾":0,"🧑🏾‍🤝‍🧑🏿":0,"🧑🏿‍🤝‍🧑🏻":0,"🧑🏿‍🤝‍🧑🏼":0,"🧑🏿‍🤝‍🧑🏽":0,"🧑🏿‍🤝‍🧑🏾":0,"🧑🏿‍🤝‍🧑🏿":0,"🧑🏻‍🦯":0,"🧑🏼‍🦯":0,"🧑🏽‍🦯":0,"🧑🏾‍🦯":0,"🧑🏿‍🦯":0,"🧑🏻‍🦰":0,"🧑🏼‍🦰":0,"🧑🏽‍🦰":0,"🧑🏾‍🦰":0,"🧑🏿‍🦰":0,"🧑🏻‍🦱":0,"🧑🏼‍🦱":0,"🧑🏽‍🦱":0,"🧑🏾‍🦱":0,"🧑🏿‍🦱":0,"🧑🏻‍🦲":0,"🧑🏼‍🦲":0,"🧑🏽‍🦲":0,"🧑🏾‍🦲":0,"🧑🏿‍🦲":0,"🧑🏻‍🦳":0,"🧑🏼‍🦳":0,"🧑🏽‍🦳":0,"🧑🏾‍🦳":0,"🧑🏿‍🦳":0,"🧑🏻‍🦼":0,"🧑🏼‍🦼":0,"🧑🏽‍🦼":0,"🧑🏾‍🦼":0,"🧑🏿‍🦼":0,"🧑🏻‍🦽":0,"🧑🏼‍🦽":0,"🧑🏽‍🦽":0,"🧑🏾‍🦽":0,"🧑🏿‍🦽":0,"🧑🏻‍⚕️":0,"🧑🏼‍⚕️":0,"🧑🏽‍⚕️":0,"🧑🏾‍⚕️":0,"🧑🏿‍⚕️":0,"🧑🏻‍⚖️":0,"🧑🏼‍⚖️":0,"🧑🏽‍⚖️":0,"🧑🏾‍⚖️":0,"🧑🏿‍⚖️":0,"🧑🏻‍✈️":0,"🧑🏼‍✈️":0,"🧑🏽‍✈️":0,"🧑🏾‍✈️":0,"🧑🏿‍✈️":0,"🧑🏻":0,"🧑🏼":0,"🧑🏽":0,"🧑🏾":0,"🧑🏿":0,"🧒🏻":0,"🧒🏼":0,"🧒🏽":0,"🧒🏾":0,"🧒🏿":0,"🧓🏻":0,"🧓🏼":0,"🧓🏽":0,"🧓🏾":0,"🧓🏿":0,"🧔🏻":0,"🧔🏼":0,"🧔🏽":0,"🧔🏾":0,"🧔🏿":0,"🧕🏻":0,"🧕🏼":0,"🧕🏽":0,"🧕🏾":0,"🧕🏿":0,"🧖🏻‍♀️":0,"🧖🏼‍♀️":0,"🧖🏽‍♀️":0,"🧖🏾‍♀️":0,"🧖🏿‍♀️":0,"🧖🏻‍♂️":0,"🧖🏼‍♂️":0,"🧖🏽‍♂️":0,"🧖🏾‍♂️":0,"🧖🏿‍♂️":0,"🧖🏻":0,"🧖🏼":0,"🧖🏽":0,"🧖🏾":0,"🧖🏿":0,"🧗🏻‍♀️":0,"🧗🏼‍♀️":0,"🧗🏽‍♀️":0,"🧗🏾‍♀️":0,"🧗🏿‍♀️":0,"🧗🏻‍♂️":0,"🧗🏼‍♂️":0,"🧗🏽‍♂️":0,"🧗🏾‍♂️":0,"🧗🏿‍♂️":0,"🧗🏻":0,"🧗🏼":0,"🧗🏽":0,"🧗🏾":0,"🧗🏿":0,"🧘🏻‍♀️":0,"🧘🏼‍♀️":0,"🧘🏽‍♀️":0,"🧘🏾‍♀️":0,"🧘🏿‍♀️":0,"🧘🏻‍♂️":0,"🧘🏼‍♂️":0,"🧘🏽‍♂️":0,"🧘🏾‍♂️":0,"🧘🏿‍♂️":0,"🧘🏻":0,"🧘🏼":0,"🧘🏽":0,"🧘🏾":0,"🧘🏿":0,"🧙🏻‍♀️":0,"🧙🏼‍♀️":0,"🧙🏽‍♀️":0,"🧙🏾‍♀️":0,"🧙🏿‍♀️":0,"🧙🏻‍♂️":0,"🧙🏼‍♂️":0,"🧙🏽‍♂️":0,"🧙🏾‍♂️":0,"🧙🏿‍♂️":0,"🧙🏻":0,"🧙🏼":0,"🧙🏽":0,"🧙🏾":0,"🧙🏿":0,"🧚🏻‍♀️":0,"🧚🏼‍♀️":0,"🧚🏽‍♀️":0,"🧚🏾‍♀️":0,"🧚🏿‍♀️":0,"🧚🏻‍♂️":0,"🧚🏼‍♂️":0,"🧚🏽‍♂️":0,"🧚🏾‍♂️":0,"🧚🏿‍♂️":0,"🧚🏻":0,"🧚🏼":0,"🧚🏽":0,"🧚🏾":0,"🧚🏿":0,"🧛🏻‍♀️":0,"🧛🏼‍♀️":0,"🧛🏽‍♀️":0,"🧛🏾‍♀️":0,"🧛🏿‍♀️":0,"🧛🏻‍♂️":0,"🧛🏼‍♂️":0,"🧛🏽‍♂️":0,"🧛🏾‍♂️":0,"🧛🏿‍♂️":0,"🧛🏻":0,"🧛🏼":0,"🧛🏽":0,"🧛🏾":0,"🧛🏿":0,"🧜🏻‍♀️":0,"🧜🏼‍♀️":0,"🧜🏽‍♀️":0,"🧜🏾‍♀️":0,"🧜🏿‍♀️":0,"🧜🏻‍♂️":0,"🧜🏼‍♂️":0,"🧜🏽‍♂️":0,"🧜🏾‍♂️":0,"🧜🏿‍♂️":0,"🧜🏻":0,"🧜🏼":0,"🧜🏽":0,"🧜🏾":0,"🧜🏿":0,"🧝🏻‍♀️":0,"🧝🏼‍♀️":0,"🧝🏽‍♀️":0,"🧝🏾‍♀️":0,"🧝🏿‍♀️":0,"🧝🏻‍♂️":0,"🧝🏼‍♂️":0,"🧝🏽‍♂️":0,"🧝🏾‍♂️":0,"🧝🏿‍♂️":0,"🧝🏻":0,"🧝🏼":0,"🧝🏽":0,"🧝🏾":0,"🧝🏿":0,"☝🏻":0,"☝🏼":0,"☝🏽":0,"☝🏾":0,"☝🏿":0,"⛹🏻‍♀️":0,"⛹🏼‍♀️":0,"⛹🏽‍♀️":0,"⛹🏾‍♀️":0,"⛹🏿‍♀️":0,"⛹🏻‍♂️":0,"⛹🏼‍♂️":0,"⛹🏽‍♂️":0,"⛹🏾‍♂️":0,"⛹🏿‍♂️":0,"⛹🏻":0,"⛹🏼":0,"⛹🏽":0,"⛹🏾":0,"⛹🏿":0,"✊🏻":0,"✊🏼":0,"✊🏽":0,"✊🏾":0,"✊🏿":0,"✋🏻":0,"✋🏼":0,"✋🏽":0,"✋🏾":0,"✋🏿":0,"✌🏻":0,"✌🏼":0,"✌🏽":0,"✌🏾":0,"✌🏿":0,"✍🏻":0,"✍🏼":0,"✍🏽":0,"✍🏾":0,"✍🏿":0} \ No newline at end of file diff --git a/src/format_jsons.js b/src/format_jsons.js index 7bff93f9..2778d713 100644 --- a/src/format_jsons.js +++ b/src/format_jsons.js @@ -90,7 +90,7 @@ if(false) { formatted.forEach(e => { let {unified, name, short_names, category, sheet_x, sheet_y, sort_order} = e; - let emoji = unified.replace(/-FE0F/gi, '').split('-') + let emoji = unified/* .replace(/-FE0F/gi, '') */.split('-') .reduce((prev, curr) => prev + String.fromCodePoint(parseInt(curr, 16)), ''); let c = categories[category] === undefined ? 9 : categories[category]; diff --git a/src/index.hbs b/src/index.hbs index ae3bbbf6..a7b80be8 100644 --- a/src/index.hbs +++ b/src/index.hbs @@ -77,7 +77,7 @@

- +
@@ -214,7 +214,7 @@
@@ -268,12 +268,12 @@
- - + +
- - + +
You can provide an optional description for your channel.
@@ -301,8 +301,8 @@
- - + +
diff --git a/src/lib/MP4Source.js b/src/lib/MP4Source.js deleted file mode 100644 index 8592a2b8..00000000 --- a/src/lib/MP4Source.js +++ /dev/null @@ -1,272 +0,0 @@ -/* -* Copyright (c) 2018-present, Evgeny Nadymov -* -* This source code is licensed under the GPL v.3.0 license found in the -* LICENSE file in the root directory of this source tree. -*/ - -import MP4Box from 'mp4box/dist/mp4box.all.min'; -//import { LOG, logSourceBufferRanges } from '../Utils/Common'; - -let LOG = () => console.log(...arguments); - -export default class MP4Source { - constructor(video, getBufferAsync) { - this.mp4file = null; - this.nextBufferStart = 0; - this.mediaSource = null; - this.ready = false; - this.bufferedTime = 40; - - this.beforeMoovBufferSize = 32 * 1024; - this.moovBufferSize = 512 * 1024; - this.bufferSize = 1024 * 1024; - this.seekBufferSize = 1024 * 1024; - - this.currentBufferSize = this.beforeMoovBufferSize; - this.nbSamples = 10; - this.video = video; - this.getBufferAsync = getBufferAsync; - this.expectedSize = this.video.video.expected_size; - - this.seeking = false; - this.loading = false; - this.url = null; - - this.init(video.duration); - } - - init(videoDuration) { - const mediaSource = new MediaSource(); - mediaSource.addEventListener('sourceopen', async () => { - LOG('[MediaSource] sourceopen start', this.mediaSource, this); - - if (this.mediaSource.sourceBuffers.length > 0) return; - - const mp4File = MP4Box.createFile(); - mp4File.onMoovStart = () => { - LOG('[MP4Box] onMoovStart'); - this.currentBufferSize = this.moovBufferSize; - }; - mp4File.onError = error => { - LOG('[MP4Box] onError', error); - }; - mp4File.onReady = info => { - LOG('[MP4Box] onReady', info); - this.ready = true; - this.currentBufferSize = this.bufferSize; - const { isFragmented, timescale, fragment_duration, duration } = info; - - if (!fragment_duration && !duration) { - this.mediaSource.duration = videoDuration; - this.bufferedTime = videoDuration; - } else { - this.mediaSource.duration = isFragmented - ? fragment_duration / timescale - : duration / timescale; - } - - for (let i = 0; i < info.tracks.length; i++) { - this.addSourceBuffer(mp4File, this.mediaSource, info.tracks[i]); - } - - const initSegs = mp4File.initializeSegmentation(); - LOG('[MP4Box] initializeSegmentation', initSegs); - - for (let i = 0; i < initSegs.length; i++) { - const { user: sourceBuffer } = initSegs[i]; - sourceBuffer.onupdateend = () => { - sourceBuffer.initSegs = true; - sourceBuffer.onupdateend = this.handleSourceBufferUpdateEnd; - }; - sourceBuffer.appendBuffer(initSegs[i].buffer); - } - - LOG('[MP4Box] start fragmentation'); - mp4File.start(); - }; - mp4File.onSegment = (id, sourceBuffer, buffer, sampleNum, is_last) => { - const isLast = (sampleNum + this.nbSamples) > sourceBuffer.nb_samples; - - LOG('[MP4Box] onSegment', id, buffer, `${sampleNum}/${sourceBuffer.nb_samples}`, isLast, sourceBuffer.timestampOffset); - - if (mediaSource.readyState !== 'open') { - return; - } - - sourceBuffer.pendingUpdates.push({ id, buffer, sampleNum, isLast }); - if (sourceBuffer.initSegs && !sourceBuffer.updating) { - this.handleSourceBufferUpdateEnd({ target: sourceBuffer, mediaSource: this.mediaSource }); - } - }; - - this.nextBufferStart = 0; - this.mp4file = mp4File; - LOG('[MediaSource] sourceopen end', this, this.mp4file); - - this.loadNextBuffer(); - }); - mediaSource.addEventListener('sourceended', () => { - LOG('[MediaSource] sourceended', mediaSource.readyState); - }); - mediaSource.addEventListener('sourceclose', () => { - LOG('[MediaSource] sourceclose', mediaSource.readyState); - }); - - this.mediaSource = mediaSource; - } - - addSourceBuffer(file, source, track) { - if (!track) return null; - - const { id, codec, type: trackType, nb_samples } = track; - const type = `video/mp4; codecs="${codec}"`; - if (!MediaSource.isTypeSupported(type)) { - LOG('[addSourceBuffer] not supported', type); - return null; - } - // if (trackType !== 'video') { - // LOG('[addSourceBuffer] skip', trackType); - // return null; - // } - - const sourceBuffer = source.addSourceBuffer(type); - sourceBuffer.id = id; - sourceBuffer.pendingUpdates = []; - sourceBuffer.nb_samples = nb_samples; - file.setSegmentOptions(id, sourceBuffer, { nbSamples: this.nbSamples }); - LOG('[addSourceBuffer] add', id, codec, trackType); - - return sourceBuffer; - } - - handleSourceBufferUpdateEnd = event => { - const { target: sourceBuffer } = event; - const { mediaSource, mp4file } = this; - - if (!sourceBuffer) return; - if (sourceBuffer.updating) return; - - //logSourceBufferRanges(sourceBuffer, 0, 0); - - const { pendingUpdates } = sourceBuffer; - if (!pendingUpdates) return; - if (!pendingUpdates.length) { - if (sourceBuffer.isLast && mediaSource.readyState === 'open') { - LOG('[SourceBuffer] updateend endOfStream start', sourceBuffer.id); - if (Array.from(mediaSource.sourceBuffers).every(x => !x.pendingUpdates.length && !x.updating)) { - mediaSource.endOfStream(); - LOG('[SourceBuffer] updateend endOfStream stop', sourceBuffer.id); - } - } - return; - } - - const update = pendingUpdates.shift(); - if (!update) return; - - const { id, buffer, sampleNum, isLast } = update; - - if (sampleNum) { - LOG('[SourceBuffer] updateend releaseUsedSamples', id, sampleNum); - mp4file.releaseUsedSamples(id, sampleNum); - } - - LOG('[SourceBuffer] updateend end', sourceBuffer.id, sourceBuffer.pendingUpdates.length); - sourceBuffer.isLast = isLast; - sourceBuffer.appendBuffer(buffer); - }; - - getURL() { - this.url = this.url || URL.createObjectURL(this.mediaSource); - - return this.url; - } - - seek(currentTime, buffered) { - const seekInfo = this.mp4file.seek(currentTime, true); - this.nextBufferStart = seekInfo.offset; - - let loadNextBuffer = buffered.length === 0; - for (let i = 0; i < buffered.length; i++) { - const start = buffered.start(i); - const end = buffered.end(i); - - if (start <= currentTime && currentTime + this.bufferedTime > end) { - loadNextBuffer = true; - break; - } - } - - LOG('[player] onSeeked', loadNextBuffer, currentTime, seekInfo, this.nextBufferStart); - if (loadNextBuffer) { - this.loadNextBuffer(true); - } - } - - timeUpdate(currentTime, duration, buffered) { - const ranges = []; - for (let i = 0; i < buffered.length; i++) { - ranges.push({ start: buffered.start(i), end: buffered.end(i)}) - } - - let loadNextBuffer = buffered.length === 0; - let hasRange = false; - for (let i = 0; i < buffered.length; i++) { - const start = buffered.start(i); - const end = buffered.end(i); - - if (start <= currentTime && currentTime <= end) { - hasRange = true; - if (end < duration && currentTime + this.bufferedTime > end) { - loadNextBuffer = true; - break; - } - } - } - - if (!hasRange) { - loadNextBuffer = true; - } - - LOG('[player] timeUpdate', loadNextBuffer, currentTime, duration, JSON.stringify(ranges)); - if (loadNextBuffer) { - this.loadNextBuffer(); - } - } - - async loadNextBuffer(seek = false) { - const { nextBufferStart, loading, currentBufferSize, mp4file } = this; - LOG('[player] loadNextBuffer', nextBufferStart === undefined, loading, !mp4file); - if (!mp4file) return; - if (nextBufferStart === undefined) return; - if (loading) return; - - this.loading = true; - let bufferSize = seek ? this.seekBufferSize : this.bufferSize; - if (nextBufferStart + bufferSize > this.expectedSize) { - bufferSize = this.expectedSize - nextBufferStart; - } - const nextBuffer = await this.getBufferAsync(nextBufferStart, nextBufferStart + bufferSize); - nextBuffer.fileStart = nextBufferStart; - - LOG('[player] loadNextBuffer start', nextBuffer.byteLength, nextBufferStart); - if (nextBuffer.byteLength) { - this.nextBufferStart = mp4file.appendBuffer(nextBuffer); - } else { - this.nextBufferStart = undefined; - } - LOG('[player] loadNextBuffer stop', nextBuffer.byteLength, nextBufferStart, this.nextBufferStart); - - if (nextBuffer.byteLength < currentBufferSize) { - LOG('[player] loadNextBuffer flush'); - this.mp4file.flush(); - } - - this.loading = false; - if (!this.ready) { - LOG('[player] loadNextBuffer next'); - this.loadNextBuffer(); - } - } -} \ No newline at end of file diff --git a/src/lib/MP4Sourcee.ts b/src/lib/MP4Sourcee.ts index 38329642..23ef70ae 100644 --- a/src/lib/MP4Sourcee.ts +++ b/src/lib/MP4Sourcee.ts @@ -29,7 +29,7 @@ export default class MP4Source { private loading = false; private url: string; - private log = logger('MP4', LogLevels.error); + private log = logger('MP4'/* , LogLevels.error */); //public onLoadBuffer: (offset: number) diff --git a/src/lib/MP4Sourceee.ts b/src/lib/MP4Sourceee.ts deleted file mode 100644 index edc96093..00000000 --- a/src/lib/MP4Sourceee.ts +++ /dev/null @@ -1,279 +0,0 @@ -/* -* Copyright (c) 2018-present, Evgeny Nadymov -* -* This source code is licensed under the GPL v.3.0 license found in the -* LICENSE file in the root directory of this source tree. -*/ - -// @ts-ignore -import MP4Box from 'mp4box/dist/mp4box.all.min'; - -let LOG = (...args: any[]) => { - console.log(...args); -}; - -export default class MP4Source { - private mp4file: any; - private nextBufferStart = 0; - private mediaSource: MediaSource = null; - private ready = false; - private bufferedTime = 40; - - private beforeMoovBufferSize = 32 * 1024; - private moovBufferSize = 512 * 1024; - private bufferSize = 512 * 1024; - private seekBufferSize = 512 * 1024; - - private currentBufferSize = this.beforeMoovBufferSize; - private nbSamples = 12; - private expectedSize: number; - - private seeking = false; - private loading = false; - private url: string = null; - - constructor(private video: {duration: number, video: {expected_size: number}}, private getBufferAsync: (start: number, end: number) => Promise) { - this.expectedSize = this.video.video.expected_size; - - this.init(video.duration); - } - - init(videoDuration: any) { - const mediaSource = new MediaSource(); - mediaSource.addEventListener('sourceopen', async () => { - LOG('[MediaSource] sourceopen start', this.mediaSource, this); - - if (this.mediaSource.sourceBuffers.length > 0) return; - - const mp4File = MP4Box.createFile(); - mp4File.onMoovStart = () => { - LOG('[MP4Box] onMoovStart'); - this.currentBufferSize = this.moovBufferSize; - }; - mp4File.onError = (error: any) => { - LOG('[MP4Box] onError', error); - }; - mp4File.onReady = (info: any) => { - LOG('[MP4Box] onReady', info); - this.ready = true; - this.currentBufferSize = this.bufferSize; - const { isFragmented, timescale, fragment_duration, duration } = info; - - if (!fragment_duration && !duration) { - this.mediaSource.duration = videoDuration; - this.bufferedTime = videoDuration; - } else { - this.mediaSource.duration = isFragmented - ? fragment_duration / timescale - : duration / timescale; - } - - for (let i = 0; i < info.tracks.length; i++) { - this.addSourceBuffer(mp4File, this.mediaSource, info.tracks[i]); - } - - const initSegs = mp4File.initializeSegmentation(); - LOG('[MP4Box] initializeSegmentation', initSegs); - - for (let i = 0; i < initSegs.length; i++) { - const { user: sourceBuffer } = initSegs[i]; - sourceBuffer.onupdateend = () => { - sourceBuffer.initSegs = true; - sourceBuffer.onupdateend = this.handleSourceBufferUpdateEnd; - }; - sourceBuffer.appendBuffer(initSegs[i].buffer); - } - - LOG('[MP4Box] start fragmentation'); - mp4File.start(); - - setInterval(() => { - this.loadNextBuffer(); - }, 1e3); - }; - mp4File.onSegment = (id: any, sourceBuffer: any, buffer: any, sampleNum: any, is_last: boolean) => { - const isLast = (sampleNum + this.nbSamples) > sourceBuffer.nb_samples; - - LOG('[MP4Box] onSegment', id, buffer, `${sampleNum}/${sourceBuffer.nb_samples}`, isLast, sourceBuffer.timestampOffset); - - if (mediaSource.readyState !== 'open') { - return; - } - - sourceBuffer.pendingUpdates.push({ id, buffer, sampleNum, isLast }); - if (sourceBuffer.initSegs && !sourceBuffer.updating) { - this.handleSourceBufferUpdateEnd({ target: sourceBuffer, mediaSource: this.mediaSource }); - } - }; - - this.nextBufferStart = 0; - this.mp4file = mp4File; - LOG('[MediaSource] sourceopen end', this, this.mp4file); - - this.loadNextBuffer(); - }); - mediaSource.addEventListener('sourceended', () => { - LOG('[MediaSource] sourceended', mediaSource.readyState); - }); - mediaSource.addEventListener('sourceclose', () => { - LOG('[MediaSource] sourceclose', mediaSource.readyState); - }); - - this.mediaSource = mediaSource; - } - - addSourceBuffer(file: any, source: any, track: any) { - if (!track) return null; - - const { id, codec, type: trackType, nb_samples } = track; - const type = `video/mp4; codecs="${codec}"`; - if (!MediaSource.isTypeSupported(type)) { - LOG('[addSourceBuffer] not supported', type); - return null; - } - // if (trackType !== 'video') { - // LOG('[addSourceBuffer] skip', trackType); - // return null; - // } - - const sourceBuffer = source.addSourceBuffer(type); - sourceBuffer.id = id; - sourceBuffer.pendingUpdates = []; - sourceBuffer.nb_samples = nb_samples; - file.setSegmentOptions(id, sourceBuffer, { nbSamples: this.nbSamples }); - LOG('[addSourceBuffer] add', id, codec, trackType); - - return sourceBuffer; - } - - handleSourceBufferUpdateEnd = (event: any) => { - const { target: sourceBuffer } = event; - const { mediaSource, mp4file } = this; - - if (!sourceBuffer) return; - if (sourceBuffer.updating) return; - - //logSourceBufferRanges(sourceBuffer, 0, 0); - - const { pendingUpdates } = sourceBuffer; - if (!pendingUpdates) return; - if (!pendingUpdates.length) { - if (sourceBuffer.isLast && mediaSource.readyState === 'open') { - LOG('[SourceBuffer] updateend endOfStream start', sourceBuffer.id); - if (Array.from(mediaSource.sourceBuffers).every((x: any) => !x.pendingUpdates.length && !x.updating)) { - mediaSource.endOfStream(); - LOG('[SourceBuffer] updateend endOfStream stop', sourceBuffer.id); - } - } - return; - } - - const update = pendingUpdates.shift(); - if (!update) return; - - const { id, buffer, sampleNum, isLast } = update; - - if (sampleNum) { - LOG('[SourceBuffer] updateend releaseUsedSamples', id, sampleNum); - mp4file.releaseUsedSamples(id, sampleNum); - } - - LOG('[SourceBuffer] updateend end', sourceBuffer.id, sourceBuffer.pendingUpdates.length); - sourceBuffer.isLast = isLast; - sourceBuffer.appendBuffer(buffer); - }; - - getURL() { - this.url = this.url || URL.createObjectURL(this.mediaSource); - - return this.url; - } - - seek(currentTime: number, buffered: any) { - const seekInfo = this.mp4file.seek(currentTime, true); - this.nextBufferStart = seekInfo.offset; - - let loadNextBuffer = buffered.length === 0; - for (let i = 0; i < buffered.length; i++) { - const start = buffered.start(i); - const end = buffered.end(i); - - if (start <= currentTime && currentTime + this.bufferedTime > end) { - loadNextBuffer = true; - break; - } - } - - LOG('[player] onSeeked', loadNextBuffer, currentTime, seekInfo, this.nextBufferStart); - if (loadNextBuffer) { - this.loadNextBuffer(true); - } - } - - timeUpdate(currentTime: number, duration: number, buffered: any) { - const ranges = []; - for (let i = 0; i < buffered.length; i++) { - ranges.push({ start: buffered.start(i), end: buffered.end(i)}) - } - - let loadNextBuffer = buffered.length === 0; - let hasRange = false; - for (let i = 0; i < buffered.length; i++) { - const start = buffered.start(i); - const end = buffered.end(i); - - if (start <= currentTime && currentTime <= end) { - hasRange = true; - if (end < duration && currentTime + this.bufferedTime > end) { - loadNextBuffer = true; - break; - } - } - } - - if (!hasRange) { - loadNextBuffer = true; - } - - LOG('[player] timeUpdate', loadNextBuffer, currentTime, duration, JSON.stringify(ranges)); - if (loadNextBuffer) { - this.loadNextBuffer(); - } - } - - async loadNextBuffer(seek = false) { - const { nextBufferStart, loading, currentBufferSize, mp4file } = this; - LOG('[player] loadNextBuffer', nextBufferStart === undefined, loading, !mp4file); - if (!mp4file) return; - if (nextBufferStart === undefined) return; - if (loading) return; - - this.loading = true; - let bufferSize = seek ? this.seekBufferSize : this.bufferSize; - if (nextBufferStart + bufferSize > this.expectedSize) { - bufferSize = this.expectedSize - nextBufferStart; - } - const nextBuffer = await this.getBufferAsync(nextBufferStart, nextBufferStart + bufferSize); - // @ts-ignore - nextBuffer.fileStart = nextBufferStart; - - LOG('[player] loadNextBuffer start', nextBuffer.byteLength, nextBufferStart); - if (nextBuffer.byteLength) { - this.nextBufferStart = mp4file.appendBuffer(nextBuffer); - } else { - this.nextBufferStart = undefined; - } - LOG('[player] loadNextBuffer stop', nextBuffer.byteLength, nextBufferStart, this.nextBufferStart); - - if (nextBuffer.byteLength < currentBufferSize) { - LOG('[player] loadNextBuffer flush'); - this.mp4file.flush(); - } - - this.loading = false; - if (!this.ready) { - LOG('[player] loadNextBuffer next'); - this.loadNextBuffer(); - } - } -} \ No newline at end of file diff --git a/src/lib/appManagers/appDialogsManager.ts b/src/lib/appManagers/appDialogsManager.ts index 021ce89b..6c1f17bb 100644 --- a/src/lib/appManagers/appDialogsManager.ts +++ b/src/lib/appManagers/appDialogsManager.ts @@ -12,6 +12,7 @@ import appChatsManager from "./appChatsManager"; import AvatarElement from "../../components/avatar"; import { PopupButton, PopupPeer } from "../../components/popup"; import { SliderTab } from "../../components/slider"; +import appStateManager from "./appStateManager"; type DialogDom = { avatarEl: AvatarElement, @@ -330,7 +331,7 @@ export class AppDialogsManager { public chatsContainer = document.getElementById('chats-container') as HTMLDivElement; private chatsPreloader: HTMLDivElement; - public loadDialogsPromise: ReturnType; + public loadDialogsPromise: Promise; public loadedAll = false; public scroll: Scrollable = null; @@ -351,15 +352,21 @@ export class AppDialogsManager { }; private filtersRendered: { [filterID: string]: { - menu: HTMLElement, container: HTMLElement + menu: HTMLElement, + container: HTMLElement, + unread: HTMLElement } } = {}; + private showFiltersTimeout: number; + private allUnreadCount: HTMLElement; private accumulateArchivedTimeout: number; constructor() { this.chatList.addEventListener('contextmenu', this.contextMenu.onContextMenu); this.chatsPreloader = putPreloader(null, true); + + this.allUnreadCount = this.folders.menu.querySelector('.unread-count'); if(USEPINNEDDELIMITER) { this.pinnedDelimiter = document.createElement('div'); @@ -423,6 +430,7 @@ export class AppDialogsManager { this.setDialogPosition(dialog); this.setPinnedDelimiter(); + this.setFiltersUnreadCount(); }); $rootScope.$on('dialog_flush', (e: CustomEvent) => { @@ -431,6 +439,7 @@ export class AppDialogsManager { if(dialog) { this.setLastMessage(dialog); this.validateForFilter(); + this.setFiltersUnreadCount(); } }); @@ -444,6 +453,7 @@ export class AppDialogsManager { this.setPinnedDelimiter(); this.validateForFilter(); + this.setFiltersUnreadCount(); }); $rootScope.$on('dialog_drop', (e: CustomEvent) => { @@ -455,6 +465,8 @@ export class AppDialogsManager { delete this.doms[peerID]; this.scroll.reorder(); } + + this.setFiltersUnreadCount(); }); $rootScope.$on('dialog_unread', (e: CustomEvent) => { @@ -472,6 +484,7 @@ export class AppDialogsManager { } this.validateForFilter(); + this.setFiltersUnreadCount(); } }); @@ -505,6 +518,7 @@ export class AppDialogsManager { const dialog = folder[i]; this.updateDialog(dialog); } + this.setFiltersUnreadCount(); } }); @@ -549,6 +563,7 @@ export class AppDialogsManager { if(this.filterID == id) return; + this.chatLists[id].innerHTML = ''; this.scroll.setVirtualContainer(this.chatLists[id]); this.filterID = id; this.onTabChange(); @@ -563,7 +578,7 @@ export class AppDialogsManager { //selectTab(0); (this.folders.menu.firstElementChild.firstElementChild as HTMLElement).click(); - /* false && */appMessagesManager.loadSavedState().then(() => { + /* false && */appStateManager.loadSavedState().then(() => { return appMessagesManager.filtersStorage.getDialogFilters(); }).then(filters => { for(const filterID in filters) { @@ -601,6 +616,26 @@ export class AppDialogsManager { this.loadDialogs(this.filterID); }; + public setFilterUnreadCount(filterID: number, folder?: Dialog[]) { + const unreadSpan = filterID == 0 ? this.allUnreadCount : this.filtersRendered[filterID]?.unread; + if(!unreadSpan) { + return; + } + + folder = folder || appMessagesManager.dialogsStorage.getFolder(filterID); + const sum = folder.reduce((acc, dialog) => acc + +!!dialog.unread_count, 0); + + unreadSpan.innerText = sum ? '' + sum : ''; + } + + public setFiltersUnreadCount() { + for(const filterID in this.filtersRendered) { + this.setFilterUnreadCount(+filterID); + } + + this.setFilterUnreadCount(0); + } + /** * Удалит неподходящие чаты из списка, но не добавит их(!) */ @@ -635,7 +670,9 @@ export class AppDialogsManager { const li = document.createElement('li'); const span = document.createElement('span'); span.innerHTML = RichTextProcessor.wrapEmojiText(filter.title); - li.append(span); + const unreadSpan = document.createElement('span'); + unreadSpan.classList.add('unread-count'); + li.append(span, unreadSpan); ripple(li); this.folders.menu.firstElementChild.append(li); @@ -650,13 +687,18 @@ export class AppDialogsManager { this.setListClickListener(ul); ul.addEventListener('contextmenu', this.contextMenu.onContextMenu); - setTimeout(() => { - this.folders.menu.style.display = ''; - }, 0); + if(!this.showFiltersTimeout) { + this.showFiltersTimeout = setTimeout(() => { + this.showFiltersTimeout = 0; + this.folders.menu.style.display = ''; + this.setFiltersUnreadCount(); + }, 0); + } this.filtersRendered[filter.id] = { menu: li, - container: div + container: div, + unread: unreadSpan }; } @@ -688,9 +730,14 @@ export class AppDialogsManager { //console.time('getDialogs time'); const loadCount = 50/*this.chatsLoadCount */; - this.loadDialogsPromise = appMessagesManager.getConversations('', offsetIndex, loadCount, folderID); + + const getConversationPromise = (this.filterID > 1 ? appUsersManager.getContacts() as Promise : Promise.resolve()).then(() => { + return appMessagesManager.getConversations('', offsetIndex, loadCount, folderID); + }); + + this.loadDialogsPromise = getConversationPromise; - const result = await this.loadDialogsPromise; + const result = await getConversationPromise; //console.timeEnd('getDialogs time'); @@ -1170,6 +1217,11 @@ export class AppDialogsManager { this.doms[dialog.peerID] = dom; + if($rootScope.selectedPeerID == peerID) { + li.classList.add('active'); + this.lastActiveListElement = li; + } + /* if(container) { container.append(li); } */ diff --git a/src/lib/appManagers/appDocsManager.ts b/src/lib/appManagers/appDocsManager.ts index 1abbdf2e..437b1b9b 100644 --- a/src/lib/appManagers/appDocsManager.ts +++ b/src/lib/appManagers/appDocsManager.ts @@ -294,7 +294,11 @@ class AppDocsManager { }; promise.then(() => { - deferred.resolve(this.createMP4Stream(doc)); + if(doc.url) { // может быть уже загружен из кэша + deferred.resolve(); + } else { + deferred.resolve(this.createMP4Stream(doc)); + } }); return deferred; diff --git a/src/lib/appManagers/appImManager.ts b/src/lib/appManagers/appImManager.ts index feb165f0..7350d1fc 100644 --- a/src/lib/appManagers/appImManager.ts +++ b/src/lib/appManagers/appImManager.ts @@ -678,6 +678,12 @@ export class AppImManager { } } + if(['audio', 'voice'].includes(message.media?.document?.type)) { + const audio = bubble.querySelector('audio-element'); + audio.setAttribute('doc-id', message.media.document.id); + audio.setAttribute('message-id', '' + mid); + } + bubble.classList.remove('is-sending'); bubble.classList.add('is-sent'); bubble.dataset.mid = mid; @@ -1404,12 +1410,12 @@ export class AppImManager { if(samePeer) { if(this.bubbles[lastMsgID]) { - if(dialog && lastMsgID == topMessage) { - this.log('will scroll down', this.scroll.scrollTop, this.scroll.scrollHeight); - this.scroll.scrollTop = this.scroll.scrollHeight; - } else if(isTarget) { + if(isTarget) { this.scrollable.scrollIntoView(this.bubbles[lastMsgID]); this.highlightBubble(this.bubbles[lastMsgID]); + } else if(dialog && lastMsgID == topMessage) { + this.log('will scroll down', this.scroll.scrollTop, this.scroll.scrollHeight); + this.scroll.scrollTop = this.scroll.scrollHeight; } return true; @@ -1503,14 +1509,15 @@ export class AppImManager { this.lazyLoadQueue.unlock(); - if(dialog && lastMsgID && lastMsgID != topMessage && (this.bubbles[lastMsgID] || this.firstUnreadBubble)) { + //if(dialog && lastMsgID && lastMsgID != topMessage && (this.bubbles[lastMsgID] || this.firstUnreadBubble)) { + if(dialog && (isTarget || (lastMsgID != topMessage)) && (this.bubbles[lastMsgID] || this.firstUnreadBubble)) { if(this.scrollable.scrollLocked) { clearTimeout(this.scrollable.scrollLocked); this.scrollable.scrollLocked = 0; } const fromUp = maxBubbleID > 0 && (maxBubbleID < lastMsgID || lastMsgID < 0); - const forwardingUnread = dialog.read_inbox_max_id == lastMsgID; + const forwardingUnread = dialog.read_inbox_max_id == lastMsgID && !isTarget; if(!fromUp && (samePeer || forwardingUnread)) { this.scrollable.scrollTop = this.scrollable.scrollHeight; } @@ -2209,9 +2216,14 @@ export class AppImManager { let doc = appDocsManager.getDoc(message.id); this.log('will wrap pending doc:', doc); let docDiv = wrapDocument(doc, false, true, message.id); - - let icoDiv = docDiv.querySelector('.audio-download, .document-ico'); - preloader.attach(icoDiv, false); + + if(doc.type == 'audio' || doc.type == 'voice') { + // @ts-ignore + docDiv.preloader = preloader; + } else { + let icoDiv = docDiv.querySelector('.audio-download, .document-ico'); + preloader.attach(icoDiv, false); + } if(pending.type == 'voice') { bubble.classList.add('bubble-audio'); @@ -2735,7 +2747,10 @@ export class AppImManager { promise = result.then((result) => { this.log('getHistory not cached result by maxID:', maxID, reverse, isBackLimit, result, peerID); - if(justLoad) return true; + if(justLoad) { + this.scrollable.onScroll(); // нужно делать из-за ранней прогрузки + return true; + } //console.timeEnd('appImManager call getHistory'); if(this.peerID != peerID) { diff --git a/src/lib/appManagers/appMediaViewer.ts b/src/lib/appManagers/appMediaViewer.ts index b4b2a0d4..bbb35956 100644 --- a/src/lib/appManagers/appMediaViewer.ts +++ b/src/lib/appManagers/appMediaViewer.ts @@ -475,13 +475,14 @@ export class AppMediaViewer { } private setFullAspect(aspecter: HTMLDivElement, containerRect: DOMRect, rect: DOMRect) { - let media = aspecter.firstElementChild; + /* let media = aspecter.firstElementChild; let proportion: number; if(media instanceof HTMLImageElement) { proportion = media.naturalWidth / media.naturalHeight; } else if(media instanceof HTMLVideoElement) { proportion = media.videoWidth / media.videoHeight; - } + } */ + const proportion = containerRect.width / containerRect.height; let {width, height} = rect; /* if(proportion == 1) { diff --git a/src/lib/appManagers/appMessagesManager.ts b/src/lib/appManagers/appMessagesManager.ts index 9e45a1e1..dbd63dd8 100644 --- a/src/lib/appManagers/appMessagesManager.ts +++ b/src/lib/appManagers/appMessagesManager.ts @@ -59,7 +59,6 @@ export type Dialog = { index: number, peerID: number, - pinnedIndex: number, pFlags: Partial<{ pinned: true, unread_mark: true @@ -67,15 +66,15 @@ export type Dialog = { pts: number } -class DialogsStorage { +export class DialogsStorage { public dialogs: {[peerID: string]: Dialog} = {}; public byFolders: {[folderID: number]: Dialog[]} = {}; public allDialogsLoaded: {[folder_id: number]: boolean} = {}; public dialogsOffsetDate: {[folder_id: number]: number} = {}; - public pinnedIndexes: {[folder_id: number]: number} = { - 0: 0, - 1: 0 + public pinnedOrders: {[folder_id: number]: number[]} = { + 0: [], + 1: [] }; public dialogsNum = 0; @@ -176,26 +175,14 @@ class DialogsStorage { } public generateDialogPinnedDateByIndex(pinnedIndex: number) { - return 0x7fffff00 + (pinnedIndex & 0xff); + return 0x7fff0000 + (pinnedIndex & 0xFFFF); // 0xFFFF - потому что в папках может быть бесконечное число пиннедов } - public generateDialogPinnedDate(dialog?: Dialog) { - const folderID = dialog.folder_id; - let pinnedIndex: number; - - if(dialog) { - if(dialog.hasOwnProperty('pinnedIndex')) { - pinnedIndex = dialog.pinnedIndex; - } else { - dialog.pinnedIndex = pinnedIndex = this.pinnedIndexes[folderID]++; - } - } else { - pinnedIndex = this.pinnedIndexes[folderID]++; - } + public generateDialogPinnedDate(dialog: Dialog) { + const order = this.pinnedOrders[dialog.folder_id]; - if(pinnedIndex > this.pinnedIndexes[folderID]) { - this.pinnedIndexes[folderID] = pinnedIndex; - } + const foundIndex = order.indexOf(dialog.peerID); + const pinnedIndex = foundIndex === -1 ? order.push(dialog.peerID) - 1 : foundIndex; return this.generateDialogPinnedDateByIndex(pinnedIndex); } @@ -268,7 +255,7 @@ export type DialogFilter = { include_peers: number[], exclude_peers: number[] }; -class FiltersStorage { +export class FiltersStorage { public filters: {[filterID: string]: DialogFilter} = {}; constructor() { @@ -465,11 +452,18 @@ class FiltersStorage { } public getOutputDialogFilter(filter: DialogFilter) { - const c = copy(filter); + const c: DialogFilter = copy(filter); ['pinned_peers', 'exclude_peers', 'include_peers'].forEach(key => { + // @ts-ignore c[key] = c[key].map((peerID: number) => appPeersManager.getInputPeerByID(peerID)); }); + c.include_peers.forEachReverse((peerID, idx) => { + if(c.pinned_peers.includes(peerID)) { + c.include_peers.splice(idx, 1); + } + }); + return c; } @@ -500,6 +494,14 @@ class FiltersStorage { filter[key] = filter[key].map((peer: any) => appPeersManager.getPeerID(peer)); }); + filter.include_peers.forEachReverse((peerID, idx) => { + if(filter.pinned_peers.includes(peerID)) { + filter.include_peers.splice(idx, 1); + } + }); + + filter.include_peers = filter.pinned_peers.concat(filter.include_peers); + /* if(this.filters[filter.id]) { // ну давай же найдём различия теперь, раз они сами не хотят приходить const oldFilter = this.filters[filter.id]; @@ -578,7 +580,8 @@ export class AppMessagesManager { public newDialogsToHandle: {[peerID: string]: {reload: true} | Dialog} = {}; public newUpdatesAfterReloadToHandle: any = {}; - public loaded: Promise = null; + private reloadConversationsPromise: Promise; + private reloadConversationsPeers: number[] = []; private dialogsIndex = searchIndexManager.createIndex(); private cachedResults: { @@ -652,156 +655,7 @@ export class AppMessagesManager { }); } - public loadSavedState() { - if(this.loaded) return this.loaded; - return this.loaded = new Promise((resolve, reject) => { - AppStorage.get<{ - dialogs: Dialog[], - allDialogsLoaded: DialogsStorage['allDialogsLoaded'], - peers: any[], - messages: any[], - contactsList: number[], - updates: any, - filters: FiltersStorage['filters'], - maxSeenMsgID: number - }>('state').then(({dialogs, allDialogsLoaded, peers, messages, contactsList, maxSeenMsgID, updates, filters}) => { - this.log('state res', dialogs, messages); - - if(maxSeenMsgID && !appMessagesIDsManager.getMessageIDInfo(maxSeenMsgID)[1]) { - this.maxSeenID = maxSeenMsgID; - } - - //return resolve(); - - if(peers) { - for(let peerID in peers) { - let peer = peers[peerID]; - if(+peerID < 0) appChatsManager.saveApiChat(peer); - else appUsersManager.saveApiUser(peer); - } - } - - if(contactsList && Array.isArray(contactsList) && contactsList.length) { - contactsList.forEach(userID => { - appUsersManager.pushContact(userID); - }); - appUsersManager.contactsFillPromise = Promise.resolve(appUsersManager.contactsList); - } - - if(messages) { - /* let tempID = this.tempID; - - for(let message of messages) { - if(message.id < tempID) { - tempID = message.id; - } - } - - if(tempID != this.tempID) { - this.log('Set tempID to:', tempID); - this.tempID = tempID; - } */ - - this.saveMessages(messages); - - // FIX FILE_REFERENCE_EXPIRED KOSTIL'1999 - for(let message of messages) { - if(message.media) { - this.wrapSingleMessage(message.mid, true); - } - } - } - - if(allDialogsLoaded) { - this.dialogsStorage.allDialogsLoaded = allDialogsLoaded; - } - - if(filters) { - this.filtersStorage.filters = filters; - } - - if(dialogs) { - dialogs.forEachReverse(dialog => { - // @ts-ignore - //dialog.refetchTopMessage = true; - this.saveConversation(dialog); - }); - } - - apiUpdatesManager.attach(updates ?? null); - - resolve(); - }).catch(resolve).finally(() => { - setInterval(() => this.saveState(), 10000); - }); - }); - } - - public saveState() { - const messages: any[] = []; - const dialogs: Dialog[] = []; - const peers: {[peerID: number]: any} = {}; - - for(const peerID in this.dialogsStorage.dialogs) { - let dialog = this.dialogsStorage.dialogs[peerID]; - const historyStorage = this.historiesStorage[dialog.peerID]; - const history = [].concat(historyStorage?.pending ?? [], historyStorage?.history ?? []); - - dialog = copy(dialog); - let removeUnread = 0; - for(const mid of history) { - const message = this.getMessage(mid); - if(/* message._ != 'messageEmpty' && */message.id > 0) { - messages.push(message); - if(message.fromID != dialog.peerID) { - peers[message.fromID] = appPeersManager.getPeer(message.fromID); - } - - dialog.top_message = message.mid; - - break; - } else if(message.pFlags && message.pFlags.unread) { - ++removeUnread; - } - } - - if(removeUnread && dialog.unread_count) dialog.unread_count -= removeUnread; - - dialogs.push(dialog); - - peers[dialog.peerID] = appPeersManager.getPeer(dialog.peerID); - } - - const us = apiUpdatesManager.updatesState; - const updates = { - seq: us.seq, - pts: us.pts, - date: us.date - }; - - const contactsList = [...appUsersManager.contactsList]; - for(const userID of contactsList) { - if(!peers[userID]) { - peers[userID] = appUsersManager.getUser(userID); - } - } - - const filters = this.filtersStorage.filters; - - AppStorage.set({ - state: { - dialogs, - messages, - allDialogsLoaded: this.dialogsStorage.allDialogsLoaded, - peers, - contactsList, - filters, - updates, - maxSeenMsgID: this.maxSeenID - } - }); - } public getInputEntities(entities: any) { var sendEntites = copy(entities); @@ -2232,13 +2086,27 @@ export class AppMessagesManager { } public reloadConversation(peerID: number | number[]) { - let peers = [].concat(peerID).map(peerID => appPeersManager.getInputPeerByID(peerID)); - - this.log('will reloadConversation', peerID); + [].concat(peerID).forEach(peerID => { + if(!this.reloadConversationsPeers.includes(peerID)) { + this.reloadConversationsPeers.push(peerID); + this.log('will reloadConversation', peerID); + } + }); - return apiManager.invokeApi('messages.getPeerDialogs', { - peers: peers - }).then(this.applyConversations.bind(this)); + if(this.reloadConversationsPromise) return this.reloadConversationsPromise; + return this.reloadConversationsPromise = new Promise((resolve, reject) => { + setTimeout(() => { + let peers = this.reloadConversationsPeers.map(peerID => appPeersManager.getInputPeerByID(peerID)); + this.reloadConversationsPeers.length = 0; + + apiManager.invokeApi('messages.getPeerDialogs', {peers}).then((result) => { + this.applyConversations(result); + resolve(); + }, reject).finally(() => { + this.reloadConversationsPromise = null; + }); + }, 0); + }); } private doFlushHistory(inputPeer: any, justClear: boolean): Promise { @@ -2819,7 +2687,6 @@ export class AppMessagesManager { if(wasDialogBefore && wasDialogBefore.pFlags && wasDialogBefore.pFlags.pinned) { if(!dialog.pFlags) dialog.pFlags = {}; dialog.pFlags.pinned = true; - dialog.pinnedIndex = wasDialogBefore.pinnedIndex; } this.saveConversation(dialog); @@ -3635,8 +3502,8 @@ export class AppMessagesManager { this.newDialogsToHandle[peerID] = dialog; if(dialog.pFlags?.pinned) { - delete dialog.pinnedIndex; delete dialog.pFlags.pinned; + this.dialogsStorage.pinnedOrders[folder_id].findAndSplice(p => p == dialog.peerID); } dialog.folder_id = folder_id; @@ -3649,6 +3516,7 @@ export class AppMessagesManager { } case 'updateDialogPinned': { + const folderID = update.folder_id ?? 0; this.log('updateDialogPinned', update); const peerID = appPeersManager.getPeerID(update.peer.peer); const foundDialog = this.getDialogByPeerID(peerID); @@ -3672,7 +3540,7 @@ export class AppMessagesManager { if(!update.pFlags.pinned) { delete dialog.pFlags.pinned; - delete dialog.pinnedIndex; + this.dialogsStorage.pinnedOrders[folderID].findAndSplice(p => p == dialog.peerID); } else { // means set dialog.pFlags.pinned = true; } @@ -3713,7 +3581,7 @@ export class AppMessagesManager { //this.log('before order:', this.dialogsStorage[0].map(d => d.peerID)); - this.dialogsStorage.pinnedIndexes[folderID] = 0; + this.dialogsStorage.pinnedOrders[folderID].length = 0; let willHandle = false; update.order.reverse(); // index must be higher update.order.forEach((peer: any) => { @@ -3728,7 +3596,6 @@ export class AppMessagesManager { } const dialog = foundDialog[0]; - delete dialog.pinnedIndex; dialog.pFlags.pinned = true; this.dialogsStorage.generateIndexForDialog(dialog); diff --git a/src/lib/appManagers/appSidebarLeft.ts b/src/lib/appManagers/appSidebarLeft.ts index ec7b5732..d2c2f97f 100644 --- a/src/lib/appManagers/appSidebarLeft.ts +++ b/src/lib/appManagers/appSidebarLeft.ts @@ -1,6 +1,6 @@ //import { logger } from "../polyfill"; import appDialogsManager, { AppArchivedTab, archivedTab } from "./appDialogsManager"; -import { $rootScope } from "../utils"; +import { $rootScope, findUpTag, findUpClassName } from "../utils"; import appImManager from "./appImManager"; import AppSearch, { SearchGroup } from "../../components/appSearch"; import { parseMenuButtonsTo } from "../../components/misc"; @@ -19,6 +19,8 @@ import AppEditFolderTab from "../../components/sidebarLeft/editFolder"; import AppIncludedChatsTab from "../../components/sidebarLeft/includedChats"; import SidebarSlider from "../../components/slider"; import SearchInput from "../../components/searchInput"; +import appStateManager from "./appStateManager"; +import appChatsManager from "./appChatsManager"; AvatarElement; @@ -92,6 +94,11 @@ export class AppSidebarLeft extends SidebarSlider { }; private globalSearch: AppSearch; + // peerIDs + private recentSearch: number[] = []; + private recentSearchLoaded = false; + private recentSearchClearBtn: HTMLElement; + constructor() { super(document.getElementById('column-left') as HTMLDivElement, { [AppSidebarLeft.SLIDERITEMSIDS.archived]: archivedTab, @@ -127,7 +134,41 @@ export class AppSidebarLeft extends SidebarSlider { this.menuEl = this.toolsBtn.querySelector('.btn-menu'); this.newBtnMenu = this.sidebarEl.querySelector('#new-menu'); - this.globalSearch = new AppSearch(this.searchContainer, this.searchInput, this.searchGroups); + this.globalSearch = new AppSearch(this.searchContainer, this.searchInput, this.searchGroups, (count) => { + if(!count && !this.searchInput.value.trim()) { + this.globalSearch.reset(); + this.searchGroups.people.setActive(); + this.renderRecentSearch(); + } + }); + this.searchContainer.addEventListener('click', (e) => { + const target = findUpTag(e.target, 'LI') as HTMLElement; + if(!target) { + return; + } + + const searchGroup = findUpClassName(target, 'search-group'); + if(!searchGroup || searchGroup.classList.contains('search-group-recent') || searchGroup.classList.contains('search-group-people')) { + return; + } + + const peerID = +target.getAttribute('data-peerID'); + if(this.recentSearch[0] != peerID) { + this.recentSearch.findAndSplice(p => p == peerID); + this.recentSearch.unshift(peerID); + if(this.recentSearch.length > 20) { + this.recentSearch.length = 20; + } + + this.renderRecentSearch(); + appStateManager.pushToState('recentSearch', this.recentSearch); + for(const peerID of this.recentSearch) { + appStateManager.pushPeer(peerID); + } + + clearRecentSearchBtn.style.display = ''; + } + }, {capture: true}); let peopleContainer = document.createElement('div'); peopleContainer.classList.add('search-group-scrollable'); @@ -160,6 +201,7 @@ export class AppSidebarLeft extends SidebarSlider { this.selectTab(AppSidebarLeft.SLIDERITEMSIDS.settings); }); + let firstTime = true; this.searchInput.input.addEventListener('focus', (e) => { this.toolsBtn.classList.remove('active'); this.backBtn.classList.add('active'); @@ -167,6 +209,12 @@ export class AppSidebarLeft extends SidebarSlider { void this.searchContainer.offsetWidth; // reflow this.searchContainer.classList.add('active'); + if(firstTime) { + this.searchGroups.people.setActive(); + this.renderRecentSearch(); + firstTime = false; + } + /* this.searchInput.addEventListener('blur', (e) => { if(!this.searchInput.value) { this.toolsBtn.classList.add('active'); @@ -181,13 +229,11 @@ export class AppSidebarLeft extends SidebarSlider { this.toolsBtn.classList.add('active'); this.backBtn.classList.remove('active'); this.searchContainer.classList.remove('active'); + firstTime = true; setTimeout(() => { this.searchContainer.classList.add('hide'); this.globalSearch.reset(); - - this.searchGroups.people.setActive(); - //this.searchGroups.recent.setActive(); }, 150); }); @@ -207,24 +253,44 @@ export class AppSidebarLeft extends SidebarSlider { this.archivedCount.innerText = '' + e.detail.count; }); - appUsersManager.getTopPeers().then(categories => { + appUsersManager.getTopPeers().then(peers => { //console.log('got top categories:', categories); + peers.forEach((peerID) => { + let {dialog, dom} = appDialogsManager.addDialog(peerID, this.searchGroups.people.list, false, true, true); + + this.searchGroups.people.setActive(); + }); + }); - let category = categories[0]; - if(!category || !category.peers) { - return; + this.renderRecentSearch(); + const clearRecentSearchBtn = this.recentSearchClearBtn = document.createElement('button'); + clearRecentSearchBtn.classList.add('btn-icon', 'tgico-close'); + this.searchGroups.recent.nameEl.append(clearRecentSearchBtn); + clearRecentSearchBtn.addEventListener('click', () => { + this.recentSearch = []; + appStateManager.pushToState('recentSearch', this.recentSearch); + this.renderRecentSearch(); + clearRecentSearchBtn.style.display = 'none'; + }); + } + + public renderRecentSearch() { + appStateManager.getState().then(state => { + if(state && !this.recentSearchLoaded && Array.isArray(state.recentSearch)) { + this.recentSearch = state.recentSearch; + this.recentSearchLoaded = true; } - - category.peers.forEach((topPeer: { - _: 'topPeer', - peer: any, - rating: number - }) => { - let peerID = appPeersManager.getPeerID(topPeer.peer); - let {dialog, dom} = appDialogsManager.addDialog(peerID, this.searchGroups.people.list, false, true, true); - this.searchGroups.people.setActive(); + this.searchGroups.recent.list.innerHTML = ''; + this.recentSearchClearBtn.style.display = this.recentSearch.length ? '' : 'none'; + + this.recentSearch.slice(0, 20).forEach(peerID => { + let {dialog, dom} = appDialogsManager.addDialog(peerID, this.searchGroups.recent.list, false, true, false, true); + + dom.lastMessageSpan.innerText = peerID > 0 ? appUsersManager.getUserStatusString(peerID) : appChatsManager.getChatMembersString(peerID); }); + + this.searchGroups.recent.setActive(); }); } } diff --git a/src/lib/appManagers/appSidebarRight.ts b/src/lib/appManagers/appSidebarRight.ts index e4f89faf..4c9afc45 100644 --- a/src/lib/appManagers/appSidebarRight.ts +++ b/src/lib/appManagers/appSidebarRight.ts @@ -420,8 +420,8 @@ export class AppSidebarRight extends SidebarSlider { private loadedAllMedia: {[type: string]: boolean} = {}; public sharedMediaTypes = [ - 'members', - //'inputMessagesFilterContacts', + //'members', + 'inputMessagesFilterContacts', 'inputMessagesFilterPhotoVideo', 'inputMessagesFilterDocument', 'inputMessagesFilterUrl', @@ -1145,9 +1145,9 @@ export class AppSidebarRight extends SidebarSlider { }); } - let membersLi = this.profileTabs.firstElementChild.children[0] as HTMLLIElement; + //let membersLi = this.profileTabs.firstElementChild.children[0] as HTMLLIElement; if(peerID > 0) { - membersLi.style.display = 'none'; + //membersLi.style.display = 'none'; let user = appUsersManager.getUser(peerID); if(user.phone && peerID != $rootScope.myID) { @@ -1167,7 +1167,7 @@ export class AppSidebarRight extends SidebarSlider { //this.log('userFull', userFull); }); } else { - membersLi.style.display = appPeersManager.isBroadcast(peerID) ? 'none' : ''; + //membersLi.style.display = appPeersManager.isBroadcast(peerID) ? 'none' : ''; let chat = appPeersManager.getPeer(peerID); appProfileManager.getChatFull(chat.id).then((chatFull: any) => { diff --git a/src/lib/appManagers/appStateManager.ts b/src/lib/appManagers/appStateManager.ts new file mode 100644 index 00000000..9a6d550d --- /dev/null +++ b/src/lib/appManagers/appStateManager.ts @@ -0,0 +1,195 @@ +import AppStorage from '../storage'; +import appMessagesManager, { Dialog, DialogsStorage, FiltersStorage } from './appMessagesManager'; +import appMessagesIDsManager from './appMessagesIDsManager'; +import appPeersManager from './appPeersManager'; +import appChatsManager from './appChatsManager'; +import appUsersManager from './appUsersManager'; +import apiUpdatesManager from './apiUpdatesManager'; +import { copy } from '../utils'; +import { logger } from '../polyfill'; + +export class AppStateManager { + public loaded: Promise; + private log = logger('STATE'/* , LogLevels.error */); + + private state: any = {}; + private peers: {[peerID: number]: any} = {}; + + constructor() { + this.loadSavedState(); + } + + public loadSavedState() { + if(this.loaded) return this.loaded; + return this.loaded = new Promise((resolve, reject) => { + AppStorage.get<{ + dialogs: Dialog[], + allDialogsLoaded: DialogsStorage['allDialogsLoaded'], + peers: any[], + messages: any[], + contactsList: number[], + updates: any, + filters: FiltersStorage['filters'], + maxSeenMsgID: number + }>('state').then((state) => { + const {dialogs, allDialogsLoaded, peers, messages, contactsList, maxSeenMsgID, updates, filters} = state; + this.state = state ?? {}; + this.log('state res', dialogs, messages); + + if(maxSeenMsgID && !appMessagesIDsManager.getMessageIDInfo(maxSeenMsgID)[1]) { + appMessagesManager.maxSeenID = maxSeenMsgID; + } + + //return resolve(); + + if(peers) { + for(let peerID in peers) { + let peer = peers[peerID]; + if(+peerID < 0) appChatsManager.saveApiChat(peer); + else appUsersManager.saveApiUser(peer); + } + } + + if(contactsList && Array.isArray(contactsList) && contactsList.length) { + contactsList.forEach(userID => { + appUsersManager.pushContact(userID); + }); + appUsersManager.contactsFillPromise = Promise.resolve(appUsersManager.contactsList); + } + + if(messages) { + /* let tempID = this.tempID; + + for(let message of messages) { + if(message.id < tempID) { + tempID = message.id; + } + } + + if(tempID != this.tempID) { + this.log('Set tempID to:', tempID); + this.tempID = tempID; + } */ + + appMessagesManager.saveMessages(messages); + + // FIX FILE_REFERENCE_EXPIRED KOSTIL'1999 + for(let message of messages) { + if(message.media) { + appMessagesManager.wrapSingleMessage(message.mid, true); + } + } + } + + if(allDialogsLoaded) { + appMessagesManager.dialogsStorage.allDialogsLoaded = allDialogsLoaded; + } + + if(filters) { + for(const filterID in filters) { + appMessagesManager.filtersStorage.saveDialogFilter(filters[filterID], false); + } + } + + if(dialogs) { + dialogs.forEachReverse(dialog => { + appMessagesManager.saveConversation(dialog); + }); + } + + apiUpdatesManager.attach(updates ?? null); + + resolve(state); + }).catch(resolve).finally(() => { + setInterval(() => this.saveState(), 10000); + }); + }); + } + + public getState() { + return this.loadSavedState(); + } + + public saveState() { + const messages: any[] = []; + const dialogs: Dialog[] = []; + const peers: {[peerID: number]: any} = this.peers; + + for(const folderID in appMessagesManager.dialogsStorage.byFolders) { + const folder = appMessagesManager.dialogsStorage.getFolder(+folderID); + + for(let dialog of folder) { + const historyStorage = appMessagesManager.historiesStorage[dialog.peerID]; + const history = [].concat(historyStorage?.pending ?? [], historyStorage?.history ?? []); + + dialog = copy(dialog); + let removeUnread = 0; + for(const mid of history) { + const message = appMessagesManager.getMessage(mid); + if(/* message._ != 'messageEmpty' && */message.id > 0) { + messages.push(message); + + if(message.fromID != dialog.peerID) { + peers[message.fromID] = appPeersManager.getPeer(message.fromID); + } + + dialog.top_message = message.mid; + + break; + } else if(message.pFlags && message.pFlags.unread) { + ++removeUnread; + } + } + + if(removeUnread && dialog.unread_count) dialog.unread_count -= removeUnread; + + dialogs.push(dialog); + + peers[dialog.peerID] = appPeersManager.getPeer(dialog.peerID); + } + } + + + const us = apiUpdatesManager.updatesState; + const updates = { + seq: us.seq, + pts: us.pts, + date: us.date + }; + + const contactsList = [...appUsersManager.contactsList]; + for(const userID of contactsList) { + if(!peers[userID]) { + peers[userID] = appUsersManager.getUser(userID); + } + } + + const filters = appMessagesManager.filtersStorage.filters; + //const pinnedOrders = appMessagesManager.dialogsStorage.pinnedOrders; + + AppStorage.set({ + state: Object.assign({}, this.state, { + dialogs, + messages, + allDialogsLoaded: appMessagesManager.dialogsStorage.allDialogsLoaded, + peers, + contactsList, + filters, + //pinnedOrders, + updates, + maxSeenMsgID: appMessagesManager.maxSeenID + }) + }); + } + + public pushToState(key: string, value: any) { + this.state[key] = value; + } + + public pushPeer(peerID: number) { + this.peers[peerID] = appPeersManager.getPeer(peerID); + } +} + +const appStateManager = new AppStateManager(); +export default appStateManager; \ No newline at end of file diff --git a/src/lib/appManagers/appUsersManager.ts b/src/lib/appManagers/appUsersManager.ts index 86ff4677..53d7a154 100644 --- a/src/lib/appManagers/appUsersManager.ts +++ b/src/lib/appManagers/appUsersManager.ts @@ -6,6 +6,8 @@ import apiManager from '../mtproto/mtprotoworker'; import serverTimeManager from "../mtproto/serverTimeManager"; import { formatPhoneNumber } from "../../components/misc"; import searchIndexManager from "../searchIndexManager"; +import appPeersManager from "./appPeersManager"; +import appStateManager from "./appStateManager"; export type User = { _: 'user', @@ -45,6 +47,8 @@ export class AppUsersManager { public contactsList: Set = new Set(); public myID: number; + public getPeersPromise: Promise; + constructor() { apiManager.getUserID().then((id) => { this.myID = id; @@ -510,19 +514,39 @@ export class AppUsersManager { }); } - public getTopPeers() { - return apiManager.invokeApi('contacts.getTopPeers', { - flags: 1, - correspondents: true, - offset: 0, - limit: 30, - hash: 0, - }).then((peers: any) => { - //console.log(peers); - this.saveApiUsers(peers.users); - appChatsManager.saveApiChats(peers.chats); + public getTopPeers(): Promise { + if(this.getPeersPromise) return this.getPeersPromise; - return peers.categories; + return this.getPeersPromise = appStateManager.getState().then((state) => { + if(state?.topPeers?.length) { + return state.topPeers; + } + + return apiManager.invokeApi('contacts.getTopPeers', { + flags: 1, + correspondents: true, + offset: 0, + limit: 30, + hash: 0, + }).then((result: any) => { + //console.log(result); + this.saveApiUsers(result.users); + appChatsManager.saveApiChats(result.chats); + + const peerIDs = result.categories[0].peers.map((topPeer: { + _: 'topPeer', + peer: any, + rating: number + }) => { + const peerID = appPeersManager.getPeerID(topPeer.peer); + appStateManager.pushPeer(peerID); + return peerID; + }); + + appStateManager.pushToState('topPeers', peerIDs); + + return peerIDs; + }); }); } diff --git a/src/lib/config.ts b/src/lib/config.ts index 9ee9fd88..0afea706 100644 --- a/src/lib/config.ts +++ b/src/lib/config.ts @@ -15,7 +15,7 @@ */ -export const Emoji: {[emoji: string]: number} = {"#⃣":6365,"*⃣":6366,"0⃣":6367,"1⃣":6368,"2⃣":6369,"3⃣":6370,"4⃣":6371,"5⃣":6372,"6⃣":6373,"7⃣":6374,"8⃣":6375,"9⃣":6376,"©":6362,"®":6363,"🀄":573,"🃏":572,"🅰":6383,"🅱":6385,"🅾":6394,"🅿":6396,"🆎":6384,"🆑":6386,"🆒":6387,"🆓":6388,"🆔":6390,"🆕":6392,"🆖":6393,"🆗":6395,"🆘":6397,"🆙":6398,"🆚":6399,"🇦🇨":78,"🇦🇩":79,"🇦🇪":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,"🇩🇿":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,"🇬🇶":7100,"🇬🇷":7101,"🇬🇸":7102,"🇬🇹":7103,"🇬🇺":7104,"🇬🇼":7105,"🇬🇾":7106,"🇭🇰":7107,"🇭🇲":7108,"🇭🇳":7109,"🇭🇷":7110,"🇭🇹":7111,"🇭🇺":7112,"🇮🇨":7113,"🇮🇩":7114,"🇮🇪":7115,"🇮🇱":7116,"🇮🇲":7117,"🇮🇳":7118,"🇮🇴":7119,"🇮🇶":7120,"🇮🇷":7121,"🇮🇸":7122,"🇮🇹":7123,"🇯🇪":7124,"🇯🇲":7125,"🇯🇴":7126,"🇯🇵":7127,"🇰🇪":7128,"🇰🇬":7129,"🇰🇭":7130,"🇰🇮":7131,"🇰🇲":7132,"🇰🇳":7133,"🇰🇵":7134,"🇰🇷":7135,"🇰🇼":7136,"🇰🇾":7137,"🇰🇿":7138,"🇱🇦":7139,"🇱🇧":7140,"🇱🇨":7141,"🇱🇮":7142,"🇱🇰":7143,"🇱🇷":7144,"🇱🇸":7145,"🇱🇹":7146,"🇱🇺":7147,"🇱🇻":7148,"🇱🇾":7149,"🇲🇦":7150,"🇲🇨":7151,"🇲🇩":7152,"🇲🇪":7153,"🇲🇫":7154,"🇲🇬":7155,"🇲🇭":7156,"🇲🇰":7157,"🇲🇱":7158,"🇲🇲":7159,"🇲🇳":7160,"🇲🇴":7161,"🇲🇵":7162,"🇲🇶":7163,"🇲🇷":7164,"🇲🇸":7165,"🇲🇹":7166,"🇲🇺":7167,"🇲🇻":7168,"🇲🇼":7169,"🇲🇽":7170,"🇲🇾":7171,"🇲🇿":7172,"🇳🇦":7173,"🇳🇨":7174,"🇳🇪":7175,"🇳🇫":7176,"🇳🇬":7177,"🇳🇮":7178,"🇳🇱":7179,"🇳🇴":7180,"🇳🇵":7181,"🇳🇷":7182,"🇳🇺":7183,"🇳🇿":7184,"🇴🇲":7185,"🇵🇦":7186,"🇵🇪":7187,"🇵🇫":7188,"🇵🇬":7189,"🇵🇭":7190,"🇵🇰":7191,"🇵🇱":7192,"🇵🇲":7193,"🇵🇳":7194,"🇵🇷":7195,"🇵🇸":7196,"🇵🇹":7197,"🇵🇼":7198,"🇵🇾":7199,"🇶🇦":7200,"🇷🇪":7201,"🇷🇴":7202,"🇷🇸":7203,"🇷🇺":7204,"🇷🇼":7205,"🇸🇦":7206,"🇸🇧":7207,"🇸🇨":7208,"🇸🇩":7209,"🇸🇪":7210,"🇸🇬":7211,"🇸🇭":7212,"🇸🇮":7213,"🇸🇯":7214,"🇸🇰":7215,"🇸🇱":7216,"🇸🇲":7217,"🇸🇳":7218,"🇸🇴":7219,"🇸🇷":7220,"🇸🇸":7221,"🇸🇹":7222,"🇸🇻":7223,"🇸🇽":7224,"🇸🇾":7225,"🇸🇿":7226,"🇹🇦":7227,"🇹🇨":7228,"🇹🇩":7229,"🇹🇫":7230,"🇹🇬":7231,"🇹🇭":7232,"🇹🇯":7233,"🇹🇰":7234,"🇹🇱":7235,"🇹🇲":7236,"🇹🇳":7237,"🇹🇴":7238,"🇹🇷":7239,"🇹🇹":7240,"🇹🇻":7241,"🇹🇼":7242,"🇹🇿":7243,"🇺🇦":7244,"🇺🇬":7245,"🇺🇲":7246,"🇺🇳":7247,"🇺🇸":7248,"🇺🇾":7249,"🇺🇿":7250,"🇻🇦":7251,"🇻🇨":7252,"🇻🇪":7253,"🇻🇬":7254,"🇻🇮":7255,"🇻🇳":7256,"🇻🇺":7257,"🇼🇫":7258,"🇼🇸":7259,"🇽🇰":7260,"🇾🇪":7261,"🇾🇹":7262,"🇿🇦":7263,"🇿🇲":7264,"🇿🇼":7265,"🈁":6400,"🈂":6401,"🈚":6407,"🈯":6404,"🈲":6408,"🈳":6412,"🈴":6411,"🈵":6416,"🈶":6403,"🈷":6402,"🈸":6410,"🈹":6406,"🈺":6415,"🉐":6405,"🉑":6409,"🌀":4197,"🌁":449,"🌂":4199,"🌃":450,"🌄":452,"🌅":453,"🌆":454,"🌇":455,"🌈":4198,"🌉":456,"🌊":4210,"🌋":410,"🌌":4184,"🌍":41,"🌎":42,"🌏":43,"🌐":44,"🌑":4164,"🌒":4165,"🌓":4166,"🌔":4167,"🌕":4168,"🌖":4169,"🌗":4170,"🌘":4171,"🌙":4172,"🌚":4173,"🌛":4174,"🌜":4175,"🌝":4178,"🌞":4179,"🌟":4182,"🌠":4183,"🌡":4176,"🌤":4188,"🌥":4189,"🌦":4190,"🌧":4191,"🌨":4192,"🌩":4193,"🌪":4194,"🌫":4195,"🌬":4196,"🌭":347,"🌮":349,"🌯":350,"🌰":331,"🌱":2116,"🌲":2117,"🌳":2118,"🌴":2119,"🌵":2120,"🌶":323,"🌷":2115,"🌸":2107,"🌹":2110,"🌺":2112,"🌻":2113,"🌼":2114,"🌽":322,"🌾":2121,"🌿":2122,"🍀":2124,"🍁":2125,"🍂":2126,"🍃":2127,"🍄":329,"🍅":316,"🍆":319,"🍇":31,"🍈":32,"🍉":33,"🍊":34,"🍋":35,"🍌":36,"🍍":37,"🍎":39,"🍏":310,"🍐":311,"🍑":312,"🍒":313,"🍓":314,"🍔":344,"🍕":346,"🍖":340,"🍗":341,"🍘":364,"🍙":365,"🍚":366,"🍛":367,"🍜":368,"🍝":369,"🍞":332,"🍟":345,"🍠":370,"🍡":376,"🍢":371,"🍣":372,"🍤":373,"🍥":374,"🍦":385,"🍧":386,"🍨":387,"🍩":388,"🍪":389,"🍫":394,"🍬":395,"🍭":396,"🍮":397,"🍯":398,"🍰":391,"🍱":363,"🍲":356,"🍳":354,"🍴":3118,"🍵":3102,"🍶":3103,"🍷":3105,"🍸":3106,"🍹":3107,"🍺":3108,"🍻":3109,"🍼":399,"🍽":3117,"🍾":3104,"🍿":359,"🎀":517,"🎁":518,"🎂":390,"🎃":51,"🎄":52,"🎅":1326,"🎆":53,"🎇":54,"🎈":57,"🎉":58,"🎊":59,"🎋":510,"🎌":73,"🎍":511,"🎎":512,"🎏":513,"🎐":514,"🎑":515,"🎒":625,"🎓":637,"🎖":522,"🎗":519,"🎙":656,"🎚":657,"🎛":658,"🎞":689,"🎟":520,"🎠":458,"🎡":459,"🎢":460,"🎣":549,"🎤":659,"🎥":688,"🎦":6324,"🎧":660,"🎨":577,"🎩":636,"🎪":462,"🎫":521,"🎬":691,"🎭":575,"🎮":561,"🎯":555,"🎰":563,"🎱":558,"🎲":564,"🎳":537,"🎴":574,"🎵":654,"🎶":655,"🎷":662,"🎸":663,"🎹":664,"🎺":665,"🎻":666,"🎼":653,"🎽":551,"🎾":535,"🎿":552,"🏀":531,"🏁":71,"🏂":1397,"🏃‍♀":1381,"🏃‍♂":1380,"🏃":1379,"🏄‍♀":1403,"🏄‍♂":1402,"🏄":1401,"🏅":524,"🏆":523,"🏇":1395,"🏈":533,"🏉":534,"🏊‍♀":1409,"🏊‍♂":1408,"🏊":1407,"🏋‍♀":1415,"🏋‍♂":1414,"🏋":1413,"🏌‍♀":1400,"🏌‍♂":1399,"🏌":1398,"🏍":492,"🏎":491,"🏏":538,"🏐":532,"🏑":539,"🏒":540,"🏓":542,"🏔":48,"🏕":412,"🏖":413,"🏗":419,"🏘":421,"🏙":451,"🏚":422,"🏛":418,"🏜":414,"🏝":415,"🏞":416,"🏟":417,"🏠":423,"🏡":424,"🏢":425,"🏣":426,"🏤":427,"🏥":428,"🏦":429,"🏧":6234,"🏨":430,"🏩":431,"🏪":432,"🏫":433,"🏬":434,"🏭":435,"🏮":6102,"🏯":436,"🏰":437,"🏳‍🌈":76,"🏳":75,"🏴‍☠":77,"🏴󠁧󠁢󠁥󠁮󠁧󠁿":7266,"🏴󠁧󠁢󠁳󠁣󠁴󠁿":7267,"🏴󠁧󠁢󠁷󠁬󠁳󠁿":7268,"🏴":74,"🏵":2109,"🏷":6120,"🏸":543,"🏹":6189,"🏺":3121,"🏻":81,"🏼":82,"🏽":83,"🏾":84,"🏿":85,"🐀":244,"🐁":243,"🐂":225,"🐃":226,"🐄":227,"🐅":217,"🐆":218,"🐇":247,"🐈":214,"🐉":282,"🐊":277,"🐋":286,"🐌":294,"🐍":280,"🐎":220,"🐏":232,"🐐":234,"🐑":233,"🐒":22,"🐓":262,"🐔":261,"🐕‍🦺":28,"🐕":26,"🐖":229,"🐗":230,"🐘":239,"🐙":292,"🐚":293,"🐛":296,"🐜":297,"🐝":298,"🐞":299,"🐟":288,"🐠":289,"🐡":290,"🐢":278,"🐣":263,"🐤":264,"🐥":265,"🐦":266,"🐧":267,"🐨":252,"🐩":29,"🐪":235,"🐫":236,"🐬":287,"🐭":242,"🐮":224,"🐯":216,"🐰":246,"🐱":213,"🐲":281,"🐳":285,"🐴":219,"🐵":21,"🐶":25,"🐷":228,"🐸":276,"🐹":245,"🐺":210,"🐻":251,"🐼":253,"🐽":231,"🐾":259,"🐿":248,"👀":1194,"👁‍🗨":1145,"👁":1195,"👂":1188,"👃":1190,"👄":1197,"👅":1196,"👆":1164,"👇":1166,"👈":1162,"👉":1163,"👊":1171,"👋":1150,"👌":1155,"👍":1168,"👎":1169,"👏":1174,"👐":1176,"👑":634,"👒":635,"👓":61,"👔":66,"👕":67,"👖":68,"👗":613,"👘":614,"👙":619,"👚":620,"👛":621,"👜":622,"👝":623,"👞":626,"👟":627,"👠":630,"👡":631,"👢":633,"👣":1483,"👤":1481,"👥":1482,"👦":1200,"👧":1201,"👨‍🌾":1267,"👨‍🍳":1270,"👨‍🎓":1258,"👨‍🎤":1288,"👨‍🎨":1291,"👨‍🏫":1261,"👨‍🏭":1276,"👨‍👦‍👦":1471,"👨‍👦":1470,"👨‍👧‍👦":1473,"👨‍👧‍👧":1474,"👨‍👧":1472,"👨‍👨‍👦":1460,"👨‍👨‍👦‍👦":1463,"👨‍👨‍👧":1461,"👨‍👨‍👧‍👦":1462,"👨‍👨‍👧‍👧":1464,"👨‍👩‍👦":1455,"👨‍👩‍👦‍👦":1458,"👨‍👩‍👧":1456,"👨‍👩‍👧‍👦":1457,"👨‍👩‍👧‍👧":1459,"👨‍💻":1285,"👨‍💼":1279,"👨‍🔧":1273,"👨‍🔬":1282,"👨‍🚀":1297,"👨‍🚒":1300,"👨‍🦯":1371,"👨‍🦰":1206,"👨‍🦱":1207,"👨‍🦲":1209,"👨‍🦳":1208,"👨‍🦼":1374,"👨‍🦽":1377,"👨‍⚕":1255,"👨‍⚖":1264,"👨‍✈":1294,"👨‍❤‍👨":1452,"👨‍❤‍💋‍👨":1448,"👨":1204,"👩‍🌾":1268,"👩‍🍳":1271,"👩‍🎓":1259,"👩‍🎤":1289,"👩‍🎨":1292,"👩‍🏫":1262,"👩‍🏭":1277,"👩‍👦‍👦":1476,"👩‍👦":1475,"👩‍👧‍👦":1478,"👩‍👧‍👧":1479,"👩‍👧":1477,"👩‍👩‍👦":1465,"👩‍👩‍👦‍👦":1468,"👩‍👩‍👧":1466,"👩‍👩‍👧‍👦":1467,"👩‍👩‍👧‍👧":1469,"👩‍💻":1286,"👩‍💼":1280,"👩‍🔧":1274,"👩‍🔬":1283,"👩‍🚀":1298,"👩‍🚒":1301,"👩‍🦯":1372,"👩‍🦰":1211,"👩‍🦱":1213,"👩‍🦲":1217,"👩‍🦳":1215,"👩‍🦼":1375,"👩‍🦽":1378,"👩‍⚕":1256,"👩‍⚖":1265,"👩‍✈":1295,"👩‍❤‍👨":1451,"👩‍❤‍👩":1453,"👩‍❤‍💋‍👨":1447,"👩‍❤‍💋‍👩":1449,"👩":1210,"👪":1454,"👫":1444,"👬":1445,"👭":1443,"👮‍♀":1304,"👮‍♂":1303,"👮":1302,"👯‍♀":1387,"👯‍♂":1386,"👯":1385,"👰":1322,"👱‍♀":1219,"👱‍♂":1220,"👱":1203,"👲":1319,"👳‍♀":1318,"👳‍♂":1317,"👳":1316,"👴":1222,"👵":1223,"👶":1198,"👷‍♀":1313,"👷‍♂":1312,"👷":1311,"👸":1315,"👹":197,"👺":198,"👻":199,"👼":1325,"👽":1100,"👾":1101,"👿":192,"💀":193,"💁‍♀":1238,"💁‍♂":1237,"💁":1236,"💂‍♀":1310,"💂‍♂":1309,"💂":1308,"💃":1382,"💄":641,"💅":1181,"💆‍♀":1357,"💆‍♂":1356,"💆":1355,"💇‍♀":1360,"💇‍♂":1359,"💇":1358,"💈":461,"💉":6208,"💊":6210,"💋":1115,"💌":1116,"💍":642,"💎":643,"💏":1446,"💐":2106,"💑":1450,"💒":438,"💓":1121,"💔":1126,"💕":1123,"💖":1119,"💗":1120,"💘":1117,"💙":1131,"💚":1130,"💛":1129,"💜":1132,"💝":1118,"💞":1122,"💟":1124,"💠":6447,"💡":6100,"💢":1137,"💣":1143,"💤":1149,"💥":1138,"💦":1140,"💧":4209,"💨":1141,"💩":195,"💪":1183,"💫":1139,"💬":1144,"💭":1148,"💮":2108,"💯":1136,"💰":6121,"💱":6130,"💲":6131,"💳":6127,"💴":6122,"💵":6123,"💶":6124,"💷":6125,"💸":6126,"💹":6129,"💺":4123,"💻":677,"💼":6152,"💽":683,"💾":684,"💿":685,"📀":686,"📁":6153,"📂":6154,"📃":6113,"📄":6115,"📅":6156,"📆":6157,"📇":6160,"📈":6161,"📉":6162,"📊":6163,"📋":6164,"📌":6165,"📍":6166,"📎":6167,"📏":6169,"📐":6170,"📑":6118,"📒":6112,"📓":6111,"📔":6104,"📕":6105,"📖":6106,"📗":6107,"📘":6108,"📙":6109,"📚":6110,"📛":6337,"📜":6114,"📝":6151,"📞":672,"📟":673,"📠":674,"📡":6207,"📢":648,"📣":649,"📤":6136,"📥":6137,"📦":6138,"📧":6133,"📨":6134,"📩":6135,"📪":6140,"📫":6139,"📬":6141,"📭":6142,"📮":6143,"📯":650,"📰":6116,"📱":669,"📲":670,"📳":6328,"📴":6329,"📵":6256,"📶":6327,"📷":693,"📸":694,"📹":695,"📺":692,"📻":661,"📼":696,"📽":690,"📿":640,"🔀":6306,"🔁":6307,"🔂":6308,"🔃":6274,"🔄":6275,"🔅":6325,"🔆":6326,"🔇":644,"🔈":645,"🔉":646,"🔊":647,"🔋":675,"🔌":676,"🔍":697,"🔎":698,"🔏":6177,"🔐":6178,"🔑":6179,"🔒":6175,"🔓":6176,"🔔":651,"🔕":652,"🔖":6119,"🔗":6197,"🔘":6448,"🔙":6276,"🔚":6277,"🔛":6278,"🔜":6279,"🔝":6280,"🔞":6257,"🔟":6377,"🔠":6378,"🔡":6379,"🔢":6380,"🔣":6381,"🔤":6382,"🔥":4208,"🔦":6101,"🔧":6191,"🔨":6181,"🔩":6192,"🔪":3120,"🔫":6188,"🔬":6205,"🔭":6206,"🔮":559,"🔯":6292,"🔰":6338,"🔱":6336,"🔲":6450,"🔳":6449,"🔴":6417,"🔵":6421,"🔶":6441,"🔷":6442,"🔸":6443,"🔹":6444,"🔺":6445,"🔻":6446,"🔼":6316,"🔽":6318,"🕉":6283,"🕊":268,"🕋":446,"🕌":442,"🕍":444,"🕎":6291,"🕐":4142,"🕑":4144,"🕒":4146,"🕓":4148,"🕔":4150,"🕕":4152,"🕖":4154,"🕗":4156,"🕘":4158,"🕙":4160,"🕚":4162,"🕛":4140,"🕜":4143,"🕝":4145,"🕞":4147,"🕟":4149,"🕠":4151,"🕡":4153,"🕢":4155,"🕣":4157,"🕤":4159,"🕥":4161,"🕦":4163,"🕧":4141,"🕯":699,"🕰":4139,"🕳":1142,"🕴":1384,"🕵‍♀":1307,"🕵‍♂":1306,"🕵":1305,"🕶":62,"🕷":2101,"🕸":2102,"🕹":562,"🕺":1383,"🖇":6168,"🖊":6148,"🖋":6147,"🖌":6149,"🖍":6150,"🖐":1152,"🖕":1165,"🖖":1154,"🖤":1134,"🖥":678,"🖨":679,"🖱":681,"🖲":682,"🖼":576,"🗂":6155,"🗃":6172,"🗄":6173,"🗑":6174,"🗒":6158,"🗓":6159,"🗜":6194,"🗝":6180,"🗞":6117,"🗡":6186,"🗣":1480,"🗨":1146,"🗯":1147,"🗳":6144,"🗺":45,"🗻":411,"🗼":439,"🗽":440,"🗾":46,"🗿":6233,"😀":11,"😁":14,"😂":18,"😃":12,"😄":13,"😅":16,"😆":15,"😇":113,"😈":191,"😉":111,"😊":112,"😋":122,"😌":142,"😍":115,"😎":160,"😏":137,"😐":134,"😑":135,"😒":138,"😓":183,"😔":143,"😕":163,"😖":180,"😗":118,"😘":117,"😙":121,"😚":120,"😛":123,"😜":124,"😝":126,"😞":182,"😟":164,"😠":189,"😡":188,"😢":177,"😣":181,"😤":187,"😥":176,"😦":172,"😧":173,"😨":174,"😩":184,"😪":144,"😫":185,"😬":140,"😭":178,"😮":167,"😯":168,"😰":175,"😱":179,"😲":169,"😳":170,"😴":146,"😵":156,"😶":136,"😷":147,"😸":1104,"😹":1105,"😺":1103,"😻":1106,"😼":1107,"😽":1108,"😾":1111,"😿":1110,"🙀":1109,"🙁":165,"🙂":19,"🙃":110,"🙄":139,"🙅‍♀":1232,"🙅‍♂":1231,"🙅":1230,"🙆‍♀":1235,"🙆‍♂":1234,"🙆":1233,"🙇‍♀":1247,"🙇‍♂":1246,"🙇":1245,"🙈":1112,"🙉":1113,"🙊":1114,"🙋‍♀":1241,"🙋‍♂":1240,"🙋":1239,"🙌":1175,"🙍‍♀":1226,"🙍‍♂":1225,"🙍":1224,"🙎‍♀":1229,"🙎‍♂":1228,"🙎":1227,"🙏":1179,"🚀":4129,"🚁":4124,"🚂":463,"🚃":464,"🚄":465,"🚅":466,"🚆":467,"🚇":468,"🚈":469,"🚉":470,"🚊":471,"🚋":474,"🚌":475,"🚍":476,"🚎":477,"🚏":4100,"🚐":478,"🚑":479,"🚒":480,"🚓":481,"🚔":482,"🚕":483,"🚖":484,"🚗":485,"🚘":486,"🚙":487,"🚚":488,"🚛":489,"🚜":490,"🚝":472,"🚞":473,"🚟":4125,"🚠":4126,"🚡":4127,"🚢":4117,"🚣‍♀":1406,"🚣‍♂":1405,"🚣":1404,"🚤":4113,"🚥":4106,"🚦":4107,"🚧":4109,"🚨":4105,"🚩":72,"🚪":6213,"🚫":6250,"🚬":6230,"🚭":6252,"🚮":6235,"🚯":6253,"🚰":6236,"🚱":6254,"🚲":497,"🚳":6251,"🚴‍♀":1418,"🚴‍♂":1417,"🚴":1416,"🚵‍♀":1421,"🚵‍♂":1420,"🚵":1419,"🚶‍♀":1363,"🚶‍♂":1362,"🚶":1361,"🚷":6255,"🚸":6248,"🚹":6238,"🚺":6239,"🚻":6240,"🚼":6241,"🚽":6217,"🚾":6242,"🚿":6218,"🛀":1440,"🛁":6219,"🛂":6243,"🛃":6244,"🛄":6245,"🛅":6246,"🛋":6215,"🛌":1441,"🛍":624,"🛎":4131,"🛏":6214,"🛐":6281,"🛑":4108,"🛒":6229,"🛕":443,"🛠":6185,"🛡":6190,"🛢":4103,"🛣":4101,"🛤":4102,"🛥":4116,"🛩":4119,"🛫":4120,"🛬":4121,"🛰":4128,"🛳":4114,"🛴":498,"🛵":493,"🛶":4112,"🛷":553,"🛸":4130,"🛹":499,"🛺":496,"🟠":6418,"🟡":6419,"🟢":6420,"🟣":6422,"🟤":6423,"🟥":6426,"🟦":6430,"🟧":6427,"🟨":6428,"🟩":6429,"🟪":6431,"🟫":6432,"🤍":1135,"🤎":1133,"🤏":1156,"🤐":132,"🤑":127,"🤒":148,"🤓":161,"🤔":131,"🤕":149,"🤖":1102,"🤗":128,"🤘":1160,"🤙":1161,"🤚":1151,"🤛":1172,"🤜":1173,"🤝":1178,"🤞":1158,"🤟":1159,"🤠":158,"🤡":196,"🤢":150,"🤣":17,"🤤":145,"🤥":141,"🤦‍♀":1250,"🤦‍♂":1249,"🤦":1248,"🤧":152,"🤨":133,"🤩":116,"🤪":125,"🤫":130,"🤬":190,"🤭":129,"🤮":151,"🤯":157,"🤰":1323,"🤱":1324,"🤲":1177,"🤳":1182,"🤴":1314,"🤵":1321,"🤶":1327,"🤷‍♀":1253,"🤷‍♂":1252,"🤷":1251,"🤸‍♀":1424,"🤸‍♂":1423,"🤸":1422,"🤹‍♀":1436,"🤹‍♂":1435,"🤹":1434,"🤺":1394,"🤼‍♀":1427,"🤼‍♂":1426,"🤼":1425,"🤽‍♀":1430,"🤽‍♂":1429,"🤽":1428,"🤾‍♀":1433,"🤾‍♂":1432,"🤾":1431,"🤿":550,"🥀":2111,"🥁":668,"🥂":3110,"🥃":3111,"🥄":3119,"🥅":546,"🥇":525,"🥈":526,"🥉":527,"🥊":544,"🥋":545,"🥌":554,"🥍":541,"🥎":530,"🥏":536,"🥐":333,"🥑":318,"🥒":324,"🥓":343,"🥔":320,"🥕":321,"🥖":334,"🥗":358,"🥘":355,"🥙":351,"🥚":353,"🥛":3100,"🥜":330,"🥝":315,"🥞":337,"🥟":377,"🥠":378,"🥡":379,"🥢":3116,"🥣":357,"🥤":3112,"🥥":317,"🥦":326,"🥧":393,"🥨":335,"🥩":342,"🥪":348,"🥫":362,"🥬":325,"🥭":38,"🥮":375,"🥯":336,"🥰":114,"🥱":186,"🥳":159,"🥴":155,"🥵":153,"🥶":154,"🥺":171,"🥻":615,"🥼":64,"🥽":63,"🥾":628,"🥿":629,"🦀":380,"🦁":215,"🦂":2103,"🦃":260,"🦄":221,"🦅":269,"🦆":270,"🦇":250,"🦈":291,"🦉":272,"🦊":211,"🦋":295,"🦌":223,"🦍":23,"🦎":279,"🦏":240,"🦐":382,"🦑":383,"🦒":238,"🦓":222,"🦔":249,"🦕":283,"🦖":284,"🦗":2100,"🦘":257,"🦙":237,"🦚":274,"🦛":241,"🦜":275,"🦝":212,"🦞":381,"🦟":2104,"🦠":2105,"🦡":258,"🦢":271,"🦥":254,"🦦":255,"🦧":24,"🦨":256,"🦩":273,"🦪":384,"🦮":27,"🦯":6196,"🦴":1193,"🦵":1186,"🦶":1187,"🦷":1192,"🦸‍♀":1330,"🦸‍♂":1329,"🦸":1328,"🦹‍♀":1333,"🦹‍♂":1332,"🦹":1331,"🦺":65,"🦻":1189,"🦼":495,"🦽":494,"🦾":1184,"🦿":1185,"🧀":339,"🧁":392,"🧂":361,"🧃":3113,"🧄":327,"🧅":328,"🧆":352,"🧇":338,"🧈":360,"🧉":3114,"🧊":3115,"🧍‍♀":1366,"🧍‍♂":1365,"🧍":1364,"🧎‍♀":1369,"🧎‍♂":1368,"🧎":1367,"🧏‍♀":1244,"🧏‍♂":1243,"🧏":1242,"🧐":162,"🧑‍🌾":1266,"🧑‍🍳":1269,"🧑‍🎓":1257,"🧑‍🎤":1287,"🧑‍🎨":1290,"🧑‍🏫":1260,"🧑‍🏭":1275,"🧑‍💻":1284,"🧑‍💼":1278,"🧑‍🔧":1272,"🧑‍🔬":1281,"🧑‍🚀":1296,"🧑‍🚒":1299,"🧑‍🤝‍🧑":1442,"🧑‍🦯":1370,"🧑‍🦰":1212,"🧑‍🦱":1214,"🧑‍🦲":1218,"🧑‍🦳":1216,"🧑‍🦼":1373,"🧑‍🦽":1376,"🧑‍⚕":1254,"🧑‍⚖":1263,"🧑‍✈":1293,"🧑":1202,"🧒":1199,"🧓":1221,"🧔":1205,"🧕":1320,"🧖‍♀":1390,"🧖‍♂":1389,"🧖":1388,"🧗‍♀":1393,"🧗‍♂":1392,"🧗":1391,"🧘‍♀":1439,"🧘‍♂":1438,"🧘":1437,"🧙‍♀":1336,"🧙‍♂":1335,"🧙":1334,"🧚‍♀":1339,"🧚‍♂":1338,"🧚":1337,"🧛‍♀":1342,"🧛‍♂":1341,"🧛":1340,"🧜‍♀":1345,"🧜‍♂":1344,"🧜":1343,"🧝‍♀":1348,"🧝‍♂":1347,"🧝":1346,"🧞‍♀":1351,"🧞‍♂":1350,"🧞":1349,"🧟‍♀":1354,"🧟‍♂":1353,"🧟":1352,"🧠":1191,"🧡":1128,"🧢":638,"🧣":69,"🧤":610,"🧥":611,"🧦":612,"🧧":516,"🧨":55,"🧩":565,"🧪":6202,"🧫":6203,"🧬":6204,"🧭":47,"🧮":687,"🧯":6228,"🧰":6199,"🧱":420,"🧲":6200,"🧳":4132,"🧴":6221,"🧵":578,"🧶":579,"🧷":6222,"🧸":566,"🧹":6223,"🧺":6224,"🧻":6225,"🧼":6226,"🧽":6227,"🧾":6128,"🧿":560,"🩰":632,"🩱":616,"🩲":617,"🩳":618,"🩸":6209,"🩹":6211,"🩺":6212,"🪀":556,"🪁":557,"🪂":4122,"🪐":4180,"🪑":6216,"🪒":6220,"🪓":6182,"🪔":6103,"🪕":667,"‼":6355,"⁉":6356,"™":6364,"ℹ":6389,"↔":6269,"↕":6268,"↖":6267,"↗":6261,"↘":6263,"↙":6265,"↩":6270,"↪":6271,"⌚":4135,"⌛":4133,"⌨":680,"⏏":6323,"⏩":6310,"⏪":6314,"⏫":6317,"⏬":6319,"⏭":6311,"⏮":6315,"⏯":6312,"⏰":4136,"⏱":4137,"⏲":4138,"⏳":4134,"⏸":6320,"⏹":6321,"⏺":6322,"Ⓜ":6391,"▪":6439,"▫":6440,"▶":6309,"◀":6313,"◻":6436,"◼":6435,"◽":6438,"◾":6437,"☀":4177,"☁":4185,"☂":4200,"☃":4205,"☄":4207,"☎":671,"☑":6341,"☔":4201,"☕":3101,"☘":2123,"☝":1167,"☠":194,"☢":6258,"☣":6259,"☦":6288,"☪":6289,"☮":6290,"☯":6286,"☸":6285,"☹":166,"☺":119,"♈":6293,"♉":6294,"♊":6295,"♋":6296,"♌":6297,"♍":6298,"♎":6299,"♏":6300,"♐":6301,"♑":6302,"♒":6303,"♓":6304,"♟":571,"♠":567,"♣":570,"♥":568,"♦":569,"♨":457,"♻":6334,"♾":6333,"♿":6237,"⚒":6184,"⚓":4110,"⚔":6187,"⚖":6195,"⚗":6201,"⚙":6193,"⚛":6282,"⚜":6335,"⚠":6247,"⚡":4203,"⚪":6425,"⚫":6424,"⚰":6231,"⚱":6232,"⚽":528,"⚾":529,"⛄":4206,"⛅":4186,"⛈":4187,"⛎":6305,"⛏":6183,"⛑":639,"⛓":6198,"⛔":6249,"⛩":445,"⛪":441,"⛰":49,"⛱":4202,"⛲":447,"⛳":547,"⛴":4115,"⛵":4111,"⛷":1396,"⛸":548,"⛹‍♀":1412,"⛹‍♂":1411,"⛹":1410,"⛺":448,"⛽":4104,"✂":6171,"✅":6340,"✈":4118,"✉":6132,"✊":1170,"✋":1153,"✌":1157,"✍":1180,"✏":6145,"✒":6146,"✔":6342,"✖":6343,"✝":6287,"✡":6284,"✨":56,"✳":6352,"✴":6353,"❄":4204,"❇":6354,"❌":6344,"❎":6345,"❓":6357,"❔":6358,"❕":6359,"❗":6360,"❣":1125,"❤":1127,"➕":6346,"➖":6347,"➗":6348,"➡":6262,"➰":6349,"➿":6350,"⤴":6272,"⤵":6273,"⬅":6266,"⬆":6260,"⬇":6264,"⬛":6433,"⬜":6434,"⭐":4181,"⭕":6339,"〰":6361,"〽":6351,"㊗":6413,"㊙":6414,"🎅🏻":0,"🎅🏼":0,"🎅🏽":0,"🎅🏾":0,"🎅🏿":0,"🏂🏻":0,"🏂🏼":0,"🏂🏽":0,"🏂🏾":0,"🏂🏿":0,"🏃🏻‍♀":0,"🏃🏼‍♀":0,"🏃🏽‍♀":0,"🏃🏾‍♀":0,"🏃🏿‍♀":0,"🏃🏻‍♂":0,"🏃🏼‍♂":0,"🏃🏽‍♂":0,"🏃🏾‍♂":0,"🏃🏿‍♂":0,"🏃🏻":0,"🏃🏼":0,"🏃🏽":0,"🏃🏾":0,"🏃🏿":0,"🏄🏻‍♀":0,"🏄🏼‍♀":0,"🏄🏽‍♀":0,"🏄🏾‍♀":0,"🏄🏿‍♀":0,"🏄🏻‍♂":0,"🏄🏼‍♂":0,"🏄🏽‍♂":0,"🏄🏾‍♂":0,"🏄🏿‍♂":0,"🏄🏻":0,"🏄🏼":0,"🏄🏽":0,"🏄🏾":0,"🏄🏿":0,"🏇🏻":0,"🏇🏼":0,"🏇🏽":0,"🏇🏾":0,"🏇🏿":0,"🏊🏻‍♀":0,"🏊🏼‍♀":0,"🏊🏽‍♀":0,"🏊🏾‍♀":0,"🏊🏿‍♀":0,"🏊🏻‍♂":0,"🏊🏼‍♂":0,"🏊🏽‍♂":0,"🏊🏾‍♂":0,"🏊🏿‍♂":0,"🏊🏻":0,"🏊🏼":0,"🏊🏽":0,"🏊🏾":0,"🏊🏿":0,"🏋🏻‍♀":0,"🏋🏼‍♀":0,"🏋🏽‍♀":0,"🏋🏾‍♀":0,"🏋🏿‍♀":0,"🏋🏻‍♂":0,"🏋🏼‍♂":0,"🏋🏽‍♂":0,"🏋🏾‍♂":0,"🏋🏿‍♂":0,"🏋🏻":0,"🏋🏼":0,"🏋🏽":0,"🏋🏾":0,"🏋🏿":0,"🏌🏻‍♀":0,"🏌🏼‍♀":0,"🏌🏽‍♀":0,"🏌🏾‍♀":0,"🏌🏿‍♀":0,"🏌🏻‍♂":0,"🏌🏼‍♂":0,"🏌🏽‍♂":0,"🏌🏾‍♂":0,"🏌🏿‍♂":0,"🏌🏻":0,"🏌🏼":0,"🏌🏽":0,"🏌🏾":0,"🏌🏿":0,"👂🏻":0,"👂🏼":0,"👂🏽":0,"👂🏾":0,"👂🏿":0,"👃🏻":0,"👃🏼":0,"👃🏽":0,"👃🏾":0,"👃🏿":0,"👆🏻":0,"👆🏼":0,"👆🏽":0,"👆🏾":0,"👆🏿":0,"👇🏻":0,"👇🏼":0,"👇🏽":0,"👇🏾":0,"👇🏿":0,"👈🏻":0,"👈🏼":0,"👈🏽":0,"👈🏾":0,"👈🏿":0,"👉🏻":0,"👉🏼":0,"👉🏽":0,"👉🏾":0,"👉🏿":0,"👊🏻":0,"👊🏼":0,"👊🏽":0,"👊🏾":0,"👊🏿":0,"👋🏻":0,"👋🏼":0,"👋🏽":0,"👋🏾":0,"👋🏿":0,"👌🏻":0,"👌🏼":0,"👌🏽":0,"👌🏾":0,"👌🏿":0,"👍🏻":0,"👍🏼":0,"👍🏽":0,"👍🏾":0,"👍🏿":0,"👎🏻":0,"👎🏼":0,"👎🏽":0,"👎🏾":0,"👎🏿":0,"👏🏻":0,"👏🏼":0,"👏🏽":0,"👏🏾":0,"👏🏿":0,"👐🏻":0,"👐🏼":0,"👐🏽":0,"👐🏾":0,"👐🏿":0,"👦🏻":0,"👦🏼":0,"👦🏽":0,"👦🏾":0,"👦🏿":0,"👧🏻":0,"👧🏼":0,"👧🏽":0,"👧🏾":0,"👧🏿":0,"👨🏻‍🌾":0,"👨🏼‍🌾":0,"👨🏽‍🌾":0,"👨🏾‍🌾":0,"👨🏿‍🌾":0,"👨🏻‍🍳":0,"👨🏼‍🍳":0,"👨🏽‍🍳":0,"👨🏾‍🍳":0,"👨🏿‍🍳":0,"👨🏻‍🎓":0,"👨🏼‍🎓":0,"👨🏽‍🎓":0,"👨🏾‍🎓":0,"👨🏿‍🎓":0,"👨🏻‍🎤":0,"👨🏼‍🎤":0,"👨🏽‍🎤":0,"👨🏾‍🎤":0,"👨🏿‍🎤":0,"👨🏻‍🎨":0,"👨🏼‍🎨":0,"👨🏽‍🎨":0,"👨🏾‍🎨":0,"👨🏿‍🎨":0,"👨🏻‍🏫":0,"👨🏼‍🏫":0,"👨🏽‍🏫":0,"👨🏾‍🏫":0,"👨🏿‍🏫":0,"👨🏻‍🏭":0,"👨🏼‍🏭":0,"👨🏽‍🏭":0,"👨🏾‍🏭":0,"👨🏿‍🏭":0,"👨🏻‍💻":0,"👨🏼‍💻":0,"👨🏽‍💻":0,"👨🏾‍💻":0,"👨🏿‍💻":0,"👨🏻‍💼":0,"👨🏼‍💼":0,"👨🏽‍💼":0,"👨🏾‍💼":0,"👨🏿‍💼":0,"👨🏻‍🔧":0,"👨🏼‍🔧":0,"👨🏽‍🔧":0,"👨🏾‍🔧":0,"👨🏿‍🔧":0,"👨🏻‍🔬":0,"👨🏼‍🔬":0,"👨🏽‍🔬":0,"👨🏾‍🔬":0,"👨🏿‍🔬":0,"👨🏻‍🚀":0,"👨🏼‍🚀":0,"👨🏽‍🚀":0,"👨🏾‍🚀":0,"👨🏿‍🚀":0,"👨🏻‍🚒":0,"👨🏼‍🚒":0,"👨🏽‍🚒":0,"👨🏾‍🚒":0,"👨🏿‍🚒":0,"👨🏻‍🦯":0,"👨🏼‍🦯":0,"👨🏽‍🦯":0,"👨🏾‍🦯":0,"👨🏿‍🦯":0,"👨🏻‍🦰":0,"👨🏼‍🦰":0,"👨🏽‍🦰":0,"👨🏾‍🦰":0,"👨🏿‍🦰":0,"👨🏻‍🦱":0,"👨🏼‍🦱":0,"👨🏽‍🦱":0,"👨🏾‍🦱":0,"👨🏿‍🦱":0,"👨🏻‍🦲":0,"👨🏼‍🦲":0,"👨🏽‍🦲":0,"👨🏾‍🦲":0,"👨🏿‍🦲":0,"👨🏻‍🦳":0,"👨🏼‍🦳":0,"👨🏽‍🦳":0,"👨🏾‍🦳":0,"👨🏿‍🦳":0,"👨🏻‍🦼":0,"👨🏼‍🦼":0,"👨🏽‍🦼":0,"👨🏾‍🦼":0,"👨🏿‍🦼":0,"👨🏻‍🦽":0,"👨🏼‍🦽":0,"👨🏽‍🦽":0,"👨🏾‍🦽":0,"👨🏿‍🦽":0,"👨🏻‍⚕":0,"👨🏼‍⚕":0,"👨🏽‍⚕":0,"👨🏾‍⚕":0,"👨🏿‍⚕":0,"👨🏻‍⚖":0,"👨🏼‍⚖":0,"👨🏽‍⚖":0,"👨🏾‍⚖":0,"👨🏿‍⚖":0,"👨🏻‍✈":0,"👨🏼‍✈":0,"👨🏽‍✈":0,"👨🏾‍✈":0,"👨🏿‍✈":0,"👨🏻":0,"👨🏼":0,"👨🏽":0,"👨🏾":0,"👨🏿":0,"👩🏻‍🌾":0,"👩🏼‍🌾":0,"👩🏽‍🌾":0,"👩🏾‍🌾":0,"👩🏿‍🌾":0,"👩🏻‍🍳":0,"👩🏼‍🍳":0,"👩🏽‍🍳":0,"👩🏾‍🍳":0,"👩🏿‍🍳":0,"👩🏻‍🎓":0,"👩🏼‍🎓":0,"👩🏽‍🎓":0,"👩🏾‍🎓":0,"👩🏿‍🎓":0,"👩🏻‍🎤":0,"👩🏼‍🎤":0,"👩🏽‍🎤":0,"👩🏾‍🎤":0,"👩🏿‍🎤":0,"👩🏻‍🎨":0,"👩🏼‍🎨":0,"👩🏽‍🎨":0,"👩🏾‍🎨":0,"👩🏿‍🎨":0,"👩🏻‍🏫":0,"👩🏼‍🏫":0,"👩🏽‍🏫":0,"👩🏾‍🏫":0,"👩🏿‍🏫":0,"👩🏻‍🏭":0,"👩🏼‍🏭":0,"👩🏽‍🏭":0,"👩🏾‍🏭":0,"👩🏿‍🏭":0,"👩🏻‍💻":0,"👩🏼‍💻":0,"👩🏽‍💻":0,"👩🏾‍💻":0,"👩🏿‍💻":0,"👩🏻‍💼":0,"👩🏼‍💼":0,"👩🏽‍💼":0,"👩🏾‍💼":0,"👩🏿‍💼":0,"👩🏻‍🔧":0,"👩🏼‍🔧":0,"👩🏽‍🔧":0,"👩🏾‍🔧":0,"👩🏿‍🔧":0,"👩🏻‍🔬":0,"👩🏼‍🔬":0,"👩🏽‍🔬":0,"👩🏾‍🔬":0,"👩🏿‍🔬":0,"👩🏻‍🚀":0,"👩🏼‍🚀":0,"👩🏽‍🚀":0,"👩🏾‍🚀":0,"👩🏿‍🚀":0,"👩🏻‍🚒":0,"👩🏼‍🚒":0,"👩🏽‍🚒":0,"👩🏾‍🚒":0,"👩🏿‍🚒":0,"👩🏻‍🦯":0,"👩🏼‍🦯":0,"👩🏽‍🦯":0,"👩🏾‍🦯":0,"👩🏿‍🦯":0,"👩🏻‍🦰":0,"👩🏼‍🦰":0,"👩🏽‍🦰":0,"👩🏾‍🦰":0,"👩🏿‍🦰":0,"👩🏻‍🦱":0,"👩🏼‍🦱":0,"👩🏽‍🦱":0,"👩🏾‍🦱":0,"👩🏿‍🦱":0,"👩🏻‍🦲":0,"👩🏼‍🦲":0,"👩🏽‍🦲":0,"👩🏾‍🦲":0,"👩🏿‍🦲":0,"👩🏻‍🦳":0,"👩🏼‍🦳":0,"👩🏽‍🦳":0,"👩🏾‍🦳":0,"👩🏿‍🦳":0,"👩🏻‍🦼":0,"👩🏼‍🦼":0,"👩🏽‍🦼":0,"👩🏾‍🦼":0,"👩🏿‍🦼":0,"👩🏻‍🦽":0,"👩🏼‍🦽":0,"👩🏽‍🦽":0,"👩🏾‍🦽":0,"👩🏿‍🦽":0,"👩🏻‍⚕":0,"👩🏼‍⚕":0,"👩🏽‍⚕":0,"👩🏾‍⚕":0,"👩🏿‍⚕":0,"👩🏻‍⚖":0,"👩🏼‍⚖":0,"👩🏽‍⚖":0,"👩🏾‍⚖":0,"👩🏿‍⚖":0,"👩🏻‍✈":0,"👩🏼‍✈":0,"👩🏽‍✈":0,"👩🏾‍✈":0,"👩🏿‍✈":0,"👩🏻":0,"👩🏼":0,"👩🏽":0,"👩🏾":0,"👩🏿":0,"👫🏻":0,"👫🏼":0,"👫🏽":0,"👫🏾":0,"👫🏿":0,"👩🏻‍🤝‍👨🏼":0,"👩🏻‍🤝‍👨🏽":0,"👩🏻‍🤝‍👨🏾":0,"👩🏻‍🤝‍👨🏿":0,"👩🏼‍🤝‍👨🏻":0,"👩🏼‍🤝‍👨🏽":0,"👩🏼‍🤝‍👨🏾":0,"👩🏼‍🤝‍👨🏿":0,"👩🏽‍🤝‍👨🏻":0,"👩🏽‍🤝‍👨🏼":0,"👩🏽‍🤝‍👨🏾":0,"👩🏽‍🤝‍👨🏿":0,"👩🏾‍🤝‍👨🏻":0,"👩🏾‍🤝‍👨🏼":0,"👩🏾‍🤝‍👨🏽":0,"👩🏾‍🤝‍👨🏿":0,"👩🏿‍🤝‍👨🏻":0,"👩🏿‍🤝‍👨🏼":0,"👩🏿‍🤝‍👨🏽":0,"👩🏿‍🤝‍👨🏾":0,"👬🏻":0,"👬🏼":0,"👬🏽":0,"👬🏾":0,"👬🏿":0,"👨🏻‍🤝‍👨🏼":0,"👨🏻‍🤝‍👨🏽":0,"👨🏻‍🤝‍👨🏾":0,"👨🏻‍🤝‍👨🏿":0,"👨🏼‍🤝‍👨🏻":0,"👨🏼‍🤝‍👨🏽":0,"👨🏼‍🤝‍👨🏾":0,"👨🏼‍🤝‍👨🏿":0,"👨🏽‍🤝‍👨🏻":0,"👨🏽‍🤝‍👨🏼":0,"👨🏽‍🤝‍👨🏾":0,"👨🏽‍🤝‍👨🏿":0,"👨🏾‍🤝‍👨🏻":0,"👨🏾‍🤝‍👨🏼":0,"👨🏾‍🤝‍👨🏽":0,"👨🏾‍🤝‍👨🏿":0,"👨🏿‍🤝‍👨🏻":0,"👨🏿‍🤝‍👨🏼":0,"👨🏿‍🤝‍👨🏽":0,"👨🏿‍🤝‍👨🏾":0,"👭🏻":0,"👭🏼":0,"👭🏽":0,"👭🏾":0,"👭🏿":0,"👩🏻‍🤝‍👩🏼":0,"👩🏻‍🤝‍👩🏽":0,"👩🏻‍🤝‍👩🏾":0,"👩🏻‍🤝‍👩🏿":0,"👩🏼‍🤝‍👩🏻":0,"👩🏼‍🤝‍👩🏽":0,"👩🏼‍🤝‍👩🏾":0,"👩🏼‍🤝‍👩🏿":0,"👩🏽‍🤝‍👩🏻":0,"👩🏽‍🤝‍👩🏼":0,"👩🏽‍🤝‍👩🏾":0,"👩🏽‍🤝‍👩🏿":0,"👩🏾‍🤝‍👩🏻":0,"👩🏾‍🤝‍👩🏼":0,"👩🏾‍🤝‍👩🏽":0,"👩🏾‍🤝‍👩🏿":0,"👩🏿‍🤝‍👩🏻":0,"👩🏿‍🤝‍👩🏼":0,"👩🏿‍🤝‍👩🏽":0,"👩🏿‍🤝‍👩🏾":0,"👮🏻‍♀":0,"👮🏼‍♀":0,"👮🏽‍♀":0,"👮🏾‍♀":0,"👮🏿‍♀":0,"👮🏻‍♂":0,"👮🏼‍♂":0,"👮🏽‍♂":0,"👮🏾‍♂":0,"👮🏿‍♂":0,"👮🏻":0,"👮🏼":0,"👮🏽":0,"👮🏾":0,"👮🏿":0,"👰🏻":0,"👰🏼":0,"👰🏽":0,"👰🏾":0,"👰🏿":0,"👱🏻‍♀":0,"👱🏼‍♀":0,"👱🏽‍♀":0,"👱🏾‍♀":0,"👱🏿‍♀":0,"👱🏻‍♂":0,"👱🏼‍♂":0,"👱🏽‍♂":0,"👱🏾‍♂":0,"👱🏿‍♂":0,"👱🏻":0,"👱🏼":0,"👱🏽":0,"👱🏾":0,"👱🏿":0,"👲🏻":0,"👲🏼":0,"👲🏽":0,"👲🏾":0,"👲🏿":0,"👳🏻‍♀":0,"👳🏼‍♀":0,"👳🏽‍♀":0,"👳🏾‍♀":0,"👳🏿‍♀":0,"👳🏻‍♂":0,"👳🏼‍♂":0,"👳🏽‍♂":0,"👳🏾‍♂":0,"👳🏿‍♂":0,"👳🏻":0,"👳🏼":0,"👳🏽":0,"👳🏾":0,"👳🏿":0,"👴🏻":0,"👴🏼":0,"👴🏽":0,"👴🏾":0,"👴🏿":0,"👵🏻":0,"👵🏼":0,"👵🏽":0,"👵🏾":0,"👵🏿":0,"👶🏻":0,"👶🏼":0,"👶🏽":0,"👶🏾":0,"👶🏿":0,"👷🏻‍♀":0,"👷🏼‍♀":0,"👷🏽‍♀":0,"👷🏾‍♀":0,"👷🏿‍♀":0,"👷🏻‍♂":0,"👷🏼‍♂":0,"👷🏽‍♂":0,"👷🏾‍♂":0,"👷🏿‍♂":0,"👷🏻":0,"👷🏼":0,"👷🏽":0,"👷🏾":0,"👷🏿":0,"👸🏻":0,"👸🏼":0,"👸🏽":0,"👸🏾":0,"👸🏿":0,"👼🏻":0,"👼🏼":0,"👼🏽":0,"👼🏾":0,"👼🏿":0,"💁🏻‍♀":0,"💁🏼‍♀":0,"💁🏽‍♀":0,"💁🏾‍♀":0,"💁🏿‍♀":0,"💁🏻‍♂":0,"💁🏼‍♂":0,"💁🏽‍♂":0,"💁🏾‍♂":0,"💁🏿‍♂":0,"💁🏻":0,"💁🏼":0,"💁🏽":0,"💁🏾":0,"💁🏿":0,"💂🏻‍♀":0,"💂🏼‍♀":0,"💂🏽‍♀":0,"💂🏾‍♀":0,"💂🏿‍♀":0,"💂🏻‍♂":0,"💂🏼‍♂":0,"💂🏽‍♂":0,"💂🏾‍♂":0,"💂🏿‍♂":0,"💂🏻":0,"💂🏼":0,"💂🏽":0,"💂🏾":0,"💂🏿":0,"💃🏻":0,"💃🏼":0,"💃🏽":0,"💃🏾":0,"💃🏿":0,"💅🏻":0,"💅🏼":0,"💅🏽":0,"💅🏾":0,"💅🏿":0,"💆🏻‍♀":0,"💆🏼‍♀":0,"💆🏽‍♀":0,"💆🏾‍♀":0,"💆🏿‍♀":0,"💆🏻‍♂":0,"💆🏼‍♂":0,"💆🏽‍♂":0,"💆🏾‍♂":0,"💆🏿‍♂":0,"💆🏻":0,"💆🏼":0,"💆🏽":0,"💆🏾":0,"💆🏿":0,"💇🏻‍♀":0,"💇🏼‍♀":0,"💇🏽‍♀":0,"💇🏾‍♀":0,"💇🏿‍♀":0,"💇🏻‍♂":0,"💇🏼‍♂":0,"💇🏽‍♂":0,"💇🏾‍♂":0,"💇🏿‍♂":0,"💇🏻":0,"💇🏼":0,"💇🏽":0,"💇🏾":0,"💇🏿":0,"💪🏻":0,"💪🏼":0,"💪🏽":0,"💪🏾":0,"💪🏿":0,"🕴🏻":0,"🕴🏼":0,"🕴🏽":0,"🕴🏾":0,"🕴🏿":0,"🕵🏻‍♀":0,"🕵🏼‍♀":0,"🕵🏽‍♀":0,"🕵🏾‍♀":0,"🕵🏿‍♀":0,"🕵🏻‍♂":0,"🕵🏼‍♂":0,"🕵🏽‍♂":0,"🕵🏾‍♂":0,"🕵🏿‍♂":0,"🕵🏻":0,"🕵🏼":0,"🕵🏽":0,"🕵🏾":0,"🕵🏿":0,"🕺🏻":0,"🕺🏼":0,"🕺🏽":0,"🕺🏾":0,"🕺🏿":0,"🖐🏻":0,"🖐🏼":0,"🖐🏽":0,"🖐🏾":0,"🖐🏿":0,"🖕🏻":0,"🖕🏼":0,"🖕🏽":0,"🖕🏾":0,"🖕🏿":0,"🖖🏻":0,"🖖🏼":0,"🖖🏽":0,"🖖🏾":0,"🖖🏿":0,"🙅🏻‍♀":0,"🙅🏼‍♀":0,"🙅🏽‍♀":0,"🙅🏾‍♀":0,"🙅🏿‍♀":0,"🙅🏻‍♂":0,"🙅🏼‍♂":0,"🙅🏽‍♂":0,"🙅🏾‍♂":0,"🙅🏿‍♂":0,"🙅🏻":0,"🙅🏼":0,"🙅🏽":0,"🙅🏾":0,"🙅🏿":0,"🙆🏻‍♀":0,"🙆🏼‍♀":0,"🙆🏽‍♀":0,"🙆🏾‍♀":0,"🙆🏿‍♀":0,"🙆🏻‍♂":0,"🙆🏼‍♂":0,"🙆🏽‍♂":0,"🙆🏾‍♂":0,"🙆🏿‍♂":0,"🙆🏻":0,"🙆🏼":0,"🙆🏽":0,"🙆🏾":0,"🙆🏿":0,"🙇🏻‍♀":0,"🙇🏼‍♀":0,"🙇🏽‍♀":0,"🙇🏾‍♀":0,"🙇🏿‍♀":0,"🙇🏻‍♂":0,"🙇🏼‍♂":0,"🙇🏽‍♂":0,"🙇🏾‍♂":0,"🙇🏿‍♂":0,"🙇🏻":0,"🙇🏼":0,"🙇🏽":0,"🙇🏾":0,"🙇🏿":0,"🙋🏻‍♀":0,"🙋🏼‍♀":0,"🙋🏽‍♀":0,"🙋🏾‍♀":0,"🙋🏿‍♀":0,"🙋🏻‍♂":0,"🙋🏼‍♂":0,"🙋🏽‍♂":0,"🙋🏾‍♂":0,"🙋🏿‍♂":0,"🙋🏻":0,"🙋🏼":0,"🙋🏽":0,"🙋🏾":0,"🙋🏿":0,"🙌🏻":0,"🙌🏼":0,"🙌🏽":0,"🙌🏾":0,"🙌🏿":0,"🙍🏻‍♀":0,"🙍🏼‍♀":0,"🙍🏽‍♀":0,"🙍🏾‍♀":0,"🙍🏿‍♀":0,"🙍🏻‍♂":0,"🙍🏼‍♂":0,"🙍🏽‍♂":0,"🙍🏾‍♂":0,"🙍🏿‍♂":0,"🙍🏻":0,"🙍🏼":0,"🙍🏽":0,"🙍🏾":0,"🙍🏿":0,"🙎🏻‍♀":0,"🙎🏼‍♀":0,"🙎🏽‍♀":0,"🙎🏾‍♀":0,"🙎🏿‍♀":0,"🙎🏻‍♂":0,"🙎🏼‍♂":0,"🙎🏽‍♂":0,"🙎🏾‍♂":0,"🙎🏿‍♂":0,"🙎🏻":0,"🙎🏼":0,"🙎🏽":0,"🙎🏾":0,"🙎🏿":0,"🙏🏻":0,"🙏🏼":0,"🙏🏽":0,"🙏🏾":0,"🙏🏿":0,"🚣🏻‍♀":0,"🚣🏼‍♀":0,"🚣🏽‍♀":0,"🚣🏾‍♀":0,"🚣🏿‍♀":0,"🚣🏻‍♂":0,"🚣🏼‍♂":0,"🚣🏽‍♂":0,"🚣🏾‍♂":0,"🚣🏿‍♂":0,"🚣🏻":0,"🚣🏼":0,"🚣🏽":0,"🚣🏾":0,"🚣🏿":0,"🚴🏻‍♀":0,"🚴🏼‍♀":0,"🚴🏽‍♀":0,"🚴🏾‍♀":0,"🚴🏿‍♀":0,"🚴🏻‍♂":0,"🚴🏼‍♂":0,"🚴🏽‍♂":0,"🚴🏾‍♂":0,"🚴🏿‍♂":0,"🚴🏻":0,"🚴🏼":0,"🚴🏽":0,"🚴🏾":0,"🚴🏿":0,"🚵🏻‍♀":0,"🚵🏼‍♀":0,"🚵🏽‍♀":0,"🚵🏾‍♀":0,"🚵🏿‍♀":0,"🚵🏻‍♂":0,"🚵🏼‍♂":0,"🚵🏽‍♂":0,"🚵🏾‍♂":0,"🚵🏿‍♂":0,"🚵🏻":0,"🚵🏼":0,"🚵🏽":0,"🚵🏾":0,"🚵🏿":0,"🚶🏻‍♀":0,"🚶🏼‍♀":0,"🚶🏽‍♀":0,"🚶🏾‍♀":0,"🚶🏿‍♀":0,"🚶🏻‍♂":0,"🚶🏼‍♂":0,"🚶🏽‍♂":0,"🚶🏾‍♂":0,"🚶🏿‍♂":0,"🚶🏻":0,"🚶🏼":0,"🚶🏽":0,"🚶🏾":0,"🚶🏿":0,"🛀🏻":0,"🛀🏼":0,"🛀🏽":0,"🛀🏾":0,"🛀🏿":0,"🛌🏻":0,"🛌🏼":0,"🛌🏽":0,"🛌🏾":0,"🛌🏿":0,"🤏🏻":0,"🤏🏼":0,"🤏🏽":0,"🤏🏾":0,"🤏🏿":0,"🤘🏻":0,"🤘🏼":0,"🤘🏽":0,"🤘🏾":0,"🤘🏿":0,"🤙🏻":0,"🤙🏼":0,"🤙🏽":0,"🤙🏾":0,"🤙🏿":0,"🤚🏻":0,"🤚🏼":0,"🤚🏽":0,"🤚🏾":0,"🤚🏿":0,"🤛🏻":0,"🤛🏼":0,"🤛🏽":0,"🤛🏾":0,"🤛🏿":0,"🤜🏻":0,"🤜🏼":0,"🤜🏽":0,"🤜🏾":0,"🤜🏿":0,"🤞🏻":0,"🤞🏼":0,"🤞🏽":0,"🤞🏾":0,"🤞🏿":0,"🤟🏻":0,"🤟🏼":0,"🤟🏽":0,"🤟🏾":0,"🤟🏿":0,"🤦🏻‍♀":0,"🤦🏼‍♀":0,"🤦🏽‍♀":0,"🤦🏾‍♀":0,"🤦🏿‍♀":0,"🤦🏻‍♂":0,"🤦🏼‍♂":0,"🤦🏽‍♂":0,"🤦🏾‍♂":0,"🤦🏿‍♂":0,"🤦🏻":0,"🤦🏼":0,"🤦🏽":0,"🤦🏾":0,"🤦🏿":0,"🤰🏻":0,"🤰🏼":0,"🤰🏽":0,"🤰🏾":0,"🤰🏿":0,"🤱🏻":0,"🤱🏼":0,"🤱🏽":0,"🤱🏾":0,"🤱🏿":0,"🤲🏻":0,"🤲🏼":0,"🤲🏽":0,"🤲🏾":0,"🤲🏿":0,"🤳🏻":0,"🤳🏼":0,"🤳🏽":0,"🤳🏾":0,"🤳🏿":0,"🤴🏻":0,"🤴🏼":0,"🤴🏽":0,"🤴🏾":0,"🤴🏿":0,"🤵🏻":0,"🤵🏼":0,"🤵🏽":0,"🤵🏾":0,"🤵🏿":0,"🤶🏻":0,"🤶🏼":0,"🤶🏽":0,"🤶🏾":0,"🤶🏿":0,"🤷🏻‍♀":0,"🤷🏼‍♀":0,"🤷🏽‍♀":0,"🤷🏾‍♀":0,"🤷🏿‍♀":0,"🤷🏻‍♂":0,"🤷🏼‍♂":0,"🤷🏽‍♂":0,"🤷🏾‍♂":0,"🤷🏿‍♂":0,"🤷🏻":0,"🤷🏼":0,"🤷🏽":0,"🤷🏾":0,"🤷🏿":0,"🤸🏻‍♀":0,"🤸🏼‍♀":0,"🤸🏽‍♀":0,"🤸🏾‍♀":0,"🤸🏿‍♀":0,"🤸🏻‍♂":0,"🤸🏼‍♂":0,"🤸🏽‍♂":0,"🤸🏾‍♂":0,"🤸🏿‍♂":0,"🤸🏻":0,"🤸🏼":0,"🤸🏽":0,"🤸🏾":0,"🤸🏿":0,"🤹🏻‍♀":0,"🤹🏼‍♀":0,"🤹🏽‍♀":0,"🤹🏾‍♀":0,"🤹🏿‍♀":0,"🤹🏻‍♂":0,"🤹🏼‍♂":0,"🤹🏽‍♂":0,"🤹🏾‍♂":0,"🤹🏿‍♂":0,"🤹🏻":0,"🤹🏼":0,"🤹🏽":0,"🤹🏾":0,"🤹🏿":0,"🤽🏻‍♀":0,"🤽🏼‍♀":0,"🤽🏽‍♀":0,"🤽🏾‍♀":0,"🤽🏿‍♀":0,"🤽🏻‍♂":0,"🤽🏼‍♂":0,"🤽🏽‍♂":0,"🤽🏾‍♂":0,"🤽🏿‍♂":0,"🤽🏻":0,"🤽🏼":0,"🤽🏽":0,"🤽🏾":0,"🤽🏿":0,"🤾🏻‍♀":0,"🤾🏼‍♀":0,"🤾🏽‍♀":0,"🤾🏾‍♀":0,"🤾🏿‍♀":0,"🤾🏻‍♂":0,"🤾🏼‍♂":0,"🤾🏽‍♂":0,"🤾🏾‍♂":0,"🤾🏿‍♂":0,"🤾🏻":0,"🤾🏼":0,"🤾🏽":0,"🤾🏾":0,"🤾🏿":0,"🦵🏻":0,"🦵🏼":0,"🦵🏽":0,"🦵🏾":0,"🦵🏿":0,"🦶🏻":0,"🦶🏼":0,"🦶🏽":0,"🦶🏾":0,"🦶🏿":0,"🦸🏻‍♀":0,"🦸🏼‍♀":0,"🦸🏽‍♀":0,"🦸🏾‍♀":0,"🦸🏿‍♀":0,"🦸🏻‍♂":0,"🦸🏼‍♂":0,"🦸🏽‍♂":0,"🦸🏾‍♂":0,"🦸🏿‍♂":0,"🦸🏻":0,"🦸🏼":0,"🦸🏽":0,"🦸🏾":0,"🦸🏿":0,"🦹🏻‍♀":0,"🦹🏼‍♀":0,"🦹🏽‍♀":0,"🦹🏾‍♀":0,"🦹🏿‍♀":0,"🦹🏻‍♂":0,"🦹🏼‍♂":0,"🦹🏽‍♂":0,"🦹🏾‍♂":0,"🦹🏿‍♂":0,"🦹🏻":0,"🦹🏼":0,"🦹🏽":0,"🦹🏾":0,"🦹🏿":0,"🦻🏻":0,"🦻🏼":0,"🦻🏽":0,"🦻🏾":0,"🦻🏿":0,"🧍🏻‍♀":0,"🧍🏼‍♀":0,"🧍🏽‍♀":0,"🧍🏾‍♀":0,"🧍🏿‍♀":0,"🧍🏻‍♂":0,"🧍🏼‍♂":0,"🧍🏽‍♂":0,"🧍🏾‍♂":0,"🧍🏿‍♂":0,"🧍🏻":0,"🧍🏼":0,"🧍🏽":0,"🧍🏾":0,"🧍🏿":0,"🧎🏻‍♀":0,"🧎🏼‍♀":0,"🧎🏽‍♀":0,"🧎🏾‍♀":0,"🧎🏿‍♀":0,"🧎🏻‍♂":0,"🧎🏼‍♂":0,"🧎🏽‍♂":0,"🧎🏾‍♂":0,"🧎🏿‍♂":0,"🧎🏻":0,"🧎🏼":0,"🧎🏽":0,"🧎🏾":0,"🧎🏿":0,"🧏🏻‍♀":0,"🧏🏼‍♀":0,"🧏🏽‍♀":0,"🧏🏾‍♀":0,"🧏🏿‍♀":0,"🧏🏻‍♂":0,"🧏🏼‍♂":0,"🧏🏽‍♂":0,"🧏🏾‍♂":0,"🧏🏿‍♂":0,"🧏🏻":0,"🧏🏼":0,"🧏🏽":0,"🧏🏾":0,"🧏🏿":0,"🧑🏻‍🌾":0,"🧑🏼‍🌾":0,"🧑🏽‍🌾":0,"🧑🏾‍🌾":0,"🧑🏿‍🌾":0,"🧑🏻‍🍳":0,"🧑🏼‍🍳":0,"🧑🏽‍🍳":0,"🧑🏾‍🍳":0,"🧑🏿‍🍳":0,"🧑🏻‍🎓":0,"🧑🏼‍🎓":0,"🧑🏽‍🎓":0,"🧑🏾‍🎓":0,"🧑🏿‍🎓":0,"🧑🏻‍🎤":0,"🧑🏼‍🎤":0,"🧑🏽‍🎤":0,"🧑🏾‍🎤":0,"🧑🏿‍🎤":0,"🧑🏻‍🎨":0,"🧑🏼‍🎨":0,"🧑🏽‍🎨":0,"🧑🏾‍🎨":0,"🧑🏿‍🎨":0,"🧑🏻‍🏫":0,"🧑🏼‍🏫":0,"🧑🏽‍🏫":0,"🧑🏾‍🏫":0,"🧑🏿‍🏫":0,"🧑🏻‍🏭":0,"🧑🏼‍🏭":0,"🧑🏽‍🏭":0,"🧑🏾‍🏭":0,"🧑🏿‍🏭":0,"🧑🏻‍💻":0,"🧑🏼‍💻":0,"🧑🏽‍💻":0,"🧑🏾‍💻":0,"🧑🏿‍💻":0,"🧑🏻‍💼":0,"🧑🏼‍💼":0,"🧑🏽‍💼":0,"🧑🏾‍💼":0,"🧑🏿‍💼":0,"🧑🏻‍🔧":0,"🧑🏼‍🔧":0,"🧑🏽‍🔧":0,"🧑🏾‍🔧":0,"🧑🏿‍🔧":0,"🧑🏻‍🔬":0,"🧑🏼‍🔬":0,"🧑🏽‍🔬":0,"🧑🏾‍🔬":0,"🧑🏿‍🔬":0,"🧑🏻‍🚀":0,"🧑🏼‍🚀":0,"🧑🏽‍🚀":0,"🧑🏾‍🚀":0,"🧑🏿‍🚀":0,"🧑🏻‍🚒":0,"🧑🏼‍🚒":0,"🧑🏽‍🚒":0,"🧑🏾‍🚒":0,"🧑🏿‍🚒":0,"🧑🏻‍🤝‍🧑🏻":0,"🧑🏻‍🤝‍🧑🏼":0,"🧑🏻‍🤝‍🧑🏽":0,"🧑🏻‍🤝‍🧑🏾":0,"🧑🏻‍🤝‍🧑🏿":0,"🧑🏼‍🤝‍🧑🏻":0,"🧑🏼‍🤝‍🧑🏼":0,"🧑🏼‍🤝‍🧑🏽":0,"🧑🏼‍🤝‍🧑🏾":0,"🧑🏼‍🤝‍🧑🏿":0,"🧑🏽‍🤝‍🧑🏻":0,"🧑🏽‍🤝‍🧑🏼":0,"🧑🏽‍🤝‍🧑🏽":0,"🧑🏽‍🤝‍🧑🏾":0,"🧑🏽‍🤝‍🧑🏿":0,"🧑🏾‍🤝‍🧑🏻":0,"🧑🏾‍🤝‍🧑🏼":0,"🧑🏾‍🤝‍🧑🏽":0,"🧑🏾‍🤝‍🧑🏾":0,"🧑🏾‍🤝‍🧑🏿":0,"🧑🏿‍🤝‍🧑🏻":0,"🧑🏿‍🤝‍🧑🏼":0,"🧑🏿‍🤝‍🧑🏽":0,"🧑🏿‍🤝‍🧑🏾":0,"🧑🏿‍🤝‍🧑🏿":0,"🧑🏻‍🦯":0,"🧑🏼‍🦯":0,"🧑🏽‍🦯":0,"🧑🏾‍🦯":0,"🧑🏿‍🦯":0,"🧑🏻‍🦰":0,"🧑🏼‍🦰":0,"🧑🏽‍🦰":0,"🧑🏾‍🦰":0,"🧑🏿‍🦰":0,"🧑🏻‍🦱":0,"🧑🏼‍🦱":0,"🧑🏽‍🦱":0,"🧑🏾‍🦱":0,"🧑🏿‍🦱":0,"🧑🏻‍🦲":0,"🧑🏼‍🦲":0,"🧑🏽‍🦲":0,"🧑🏾‍🦲":0,"🧑🏿‍🦲":0,"🧑🏻‍🦳":0,"🧑🏼‍🦳":0,"🧑🏽‍🦳":0,"🧑🏾‍🦳":0,"🧑🏿‍🦳":0,"🧑🏻‍🦼":0,"🧑🏼‍🦼":0,"🧑🏽‍🦼":0,"🧑🏾‍🦼":0,"🧑🏿‍🦼":0,"🧑🏻‍🦽":0,"🧑🏼‍🦽":0,"🧑🏽‍🦽":0,"🧑🏾‍🦽":0,"🧑🏿‍🦽":0,"🧑🏻‍⚕":0,"🧑🏼‍⚕":0,"🧑🏽‍⚕":0,"🧑🏾‍⚕":0,"🧑🏿‍⚕":0,"🧑🏻‍⚖":0,"🧑🏼‍⚖":0,"🧑🏽‍⚖":0,"🧑🏾‍⚖":0,"🧑🏿‍⚖":0,"🧑🏻‍✈":0,"🧑🏼‍✈":0,"🧑🏽‍✈":0,"🧑🏾‍✈":0,"🧑🏿‍✈":0,"🧑🏻":0,"🧑🏼":0,"🧑🏽":0,"🧑🏾":0,"🧑🏿":0,"🧒🏻":0,"🧒🏼":0,"🧒🏽":0,"🧒🏾":0,"🧒🏿":0,"🧓🏻":0,"🧓🏼":0,"🧓🏽":0,"🧓🏾":0,"🧓🏿":0,"🧔🏻":0,"🧔🏼":0,"🧔🏽":0,"🧔🏾":0,"🧔🏿":0,"🧕🏻":0,"🧕🏼":0,"🧕🏽":0,"🧕🏾":0,"🧕🏿":0,"🧖🏻‍♀":0,"🧖🏼‍♀":0,"🧖🏽‍♀":0,"🧖🏾‍♀":0,"🧖🏿‍♀":0,"🧖🏻‍♂":0,"🧖🏼‍♂":0,"🧖🏽‍♂":0,"🧖🏾‍♂":0,"🧖🏿‍♂":0,"🧖🏻":0,"🧖🏼":0,"🧖🏽":0,"🧖🏾":0,"🧖🏿":0,"🧗🏻‍♀":0,"🧗🏼‍♀":0,"🧗🏽‍♀":0,"🧗🏾‍♀":0,"🧗🏿‍♀":0,"🧗🏻‍♂":0,"🧗🏼‍♂":0,"🧗🏽‍♂":0,"🧗🏾‍♂":0,"🧗🏿‍♂":0,"🧗🏻":0,"🧗🏼":0,"🧗🏽":0,"🧗🏾":0,"🧗🏿":0,"🧘🏻‍♀":0,"🧘🏼‍♀":0,"🧘🏽‍♀":0,"🧘🏾‍♀":0,"🧘🏿‍♀":0,"🧘🏻‍♂":0,"🧘🏼‍♂":0,"🧘🏽‍♂":0,"🧘🏾‍♂":0,"🧘🏿‍♂":0,"🧘🏻":0,"🧘🏼":0,"🧘🏽":0,"🧘🏾":0,"🧘🏿":0,"🧙🏻‍♀":0,"🧙🏼‍♀":0,"🧙🏽‍♀":0,"🧙🏾‍♀":0,"🧙🏿‍♀":0,"🧙🏻‍♂":0,"🧙🏼‍♂":0,"🧙🏽‍♂":0,"🧙🏾‍♂":0,"🧙🏿‍♂":0,"🧙🏻":0,"🧙🏼":0,"🧙🏽":0,"🧙🏾":0,"🧙🏿":0,"🧚🏻‍♀":0,"🧚🏼‍♀":0,"🧚🏽‍♀":0,"🧚🏾‍♀":0,"🧚🏿‍♀":0,"🧚🏻‍♂":0,"🧚🏼‍♂":0,"🧚🏽‍♂":0,"🧚🏾‍♂":0,"🧚🏿‍♂":0,"🧚🏻":0,"🧚🏼":0,"🧚🏽":0,"🧚🏾":0,"🧚🏿":0,"🧛🏻‍♀":0,"🧛🏼‍♀":0,"🧛🏽‍♀":0,"🧛🏾‍♀":0,"🧛🏿‍♀":0,"🧛🏻‍♂":0,"🧛🏼‍♂":0,"🧛🏽‍♂":0,"🧛🏾‍♂":0,"🧛🏿‍♂":0,"🧛🏻":0,"🧛🏼":0,"🧛🏽":0,"🧛🏾":0,"🧛🏿":0,"🧜🏻‍♀":0,"🧜🏼‍♀":0,"🧜🏽‍♀":0,"🧜🏾‍♀":0,"🧜🏿‍♀":0,"🧜🏻‍♂":0,"🧜🏼‍♂":0,"🧜🏽‍♂":0,"🧜🏾‍♂":0,"🧜🏿‍♂":0,"🧜🏻":0,"🧜🏼":0,"🧜🏽":0,"🧜🏾":0,"🧜🏿":0,"🧝🏻‍♀":0,"🧝🏼‍♀":0,"🧝🏽‍♀":0,"🧝🏾‍♀":0,"🧝🏿‍♀":0,"🧝🏻‍♂":0,"🧝🏼‍♂":0,"🧝🏽‍♂":0,"🧝🏾‍♂":0,"🧝🏿‍♂":0,"🧝🏻":0,"🧝🏼":0,"🧝🏽":0,"🧝🏾":0,"🧝🏿":0,"☝🏻":0,"☝🏼":0,"☝🏽":0,"☝🏾":0,"☝🏿":0,"⛹🏻‍♀":0,"⛹🏼‍♀":0,"⛹🏽‍♀":0,"⛹🏾‍♀":0,"⛹🏿‍♀":0,"⛹🏻‍♂":0,"⛹🏼‍♂":0,"⛹🏽‍♂":0,"⛹🏾‍♂":0,"⛹🏿‍♂":0,"⛹🏻":0,"⛹🏼":0,"⛹🏽":0,"⛹🏾":0,"⛹🏿":0,"✊🏻":0,"✊🏼":0,"✊🏽":0,"✊🏾":0,"✊🏿":0,"✋🏻":0,"✋🏼":0,"✋🏽":0,"✋🏾":0,"✋🏿":0,"✌🏻":0,"✌🏼":0,"✌🏽":0,"✌🏾":0,"✌🏿":0,"✍🏻":0,"✍🏼":0,"✍🏽":0,"✍🏾":0,"✍🏿":0}; +export const Emoji: {[emoji: string]: number} = {"#️⃣":6365,"*️⃣":6366,"0️⃣":6367,"1️⃣":6368,"2️⃣":6369,"3️⃣":6370,"4️⃣":6371,"5️⃣":6372,"6️⃣":6373,"7️⃣":6374,"8️⃣":6375,"9️⃣":6376,"©️":6362,"®️":6363,"🀄":573,"🃏":572,"🅰️":6383,"🅱️":6385,"🅾️":6394,"🅿️":6396,"🆎":6384,"🆑":6386,"🆒":6387,"🆓":6388,"🆔":6390,"🆕":6392,"🆖":6393,"🆗":6395,"🆘":6397,"🆙":6398,"🆚":6399,"🇦🇨":78,"🇦🇩":79,"🇦🇪":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,"🇩🇿":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,"🇬🇶":7100,"🇬🇷":7101,"🇬🇸":7102,"🇬🇹":7103,"🇬🇺":7104,"🇬🇼":7105,"🇬🇾":7106,"🇭🇰":7107,"🇭🇲":7108,"🇭🇳":7109,"🇭🇷":7110,"🇭🇹":7111,"🇭🇺":7112,"🇮🇨":7113,"🇮🇩":7114,"🇮🇪":7115,"🇮🇱":7116,"🇮🇲":7117,"🇮🇳":7118,"🇮🇴":7119,"🇮🇶":7120,"🇮🇷":7121,"🇮🇸":7122,"🇮🇹":7123,"🇯🇪":7124,"🇯🇲":7125,"🇯🇴":7126,"🇯🇵":7127,"🇰🇪":7128,"🇰🇬":7129,"🇰🇭":7130,"🇰🇮":7131,"🇰🇲":7132,"🇰🇳":7133,"🇰🇵":7134,"🇰🇷":7135,"🇰🇼":7136,"🇰🇾":7137,"🇰🇿":7138,"🇱🇦":7139,"🇱🇧":7140,"🇱🇨":7141,"🇱🇮":7142,"🇱🇰":7143,"🇱🇷":7144,"🇱🇸":7145,"🇱🇹":7146,"🇱🇺":7147,"🇱🇻":7148,"🇱🇾":7149,"🇲🇦":7150,"🇲🇨":7151,"🇲🇩":7152,"🇲🇪":7153,"🇲🇫":7154,"🇲🇬":7155,"🇲🇭":7156,"🇲🇰":7157,"🇲🇱":7158,"🇲🇲":7159,"🇲🇳":7160,"🇲🇴":7161,"🇲🇵":7162,"🇲🇶":7163,"🇲🇷":7164,"🇲🇸":7165,"🇲🇹":7166,"🇲🇺":7167,"🇲🇻":7168,"🇲🇼":7169,"🇲🇽":7170,"🇲🇾":7171,"🇲🇿":7172,"🇳🇦":7173,"🇳🇨":7174,"🇳🇪":7175,"🇳🇫":7176,"🇳🇬":7177,"🇳🇮":7178,"🇳🇱":7179,"🇳🇴":7180,"🇳🇵":7181,"🇳🇷":7182,"🇳🇺":7183,"🇳🇿":7184,"🇴🇲":7185,"🇵🇦":7186,"🇵🇪":7187,"🇵🇫":7188,"🇵🇬":7189,"🇵🇭":7190,"🇵🇰":7191,"🇵🇱":7192,"🇵🇲":7193,"🇵🇳":7194,"🇵🇷":7195,"🇵🇸":7196,"🇵🇹":7197,"🇵🇼":7198,"🇵🇾":7199,"🇶🇦":7200,"🇷🇪":7201,"🇷🇴":7202,"🇷🇸":7203,"🇷🇺":7204,"🇷🇼":7205,"🇸🇦":7206,"🇸🇧":7207,"🇸🇨":7208,"🇸🇩":7209,"🇸🇪":7210,"🇸🇬":7211,"🇸🇭":7212,"🇸🇮":7213,"🇸🇯":7214,"🇸🇰":7215,"🇸🇱":7216,"🇸🇲":7217,"🇸🇳":7218,"🇸🇴":7219,"🇸🇷":7220,"🇸🇸":7221,"🇸🇹":7222,"🇸🇻":7223,"🇸🇽":7224,"🇸🇾":7225,"🇸🇿":7226,"🇹🇦":7227,"🇹🇨":7228,"🇹🇩":7229,"🇹🇫":7230,"🇹🇬":7231,"🇹🇭":7232,"🇹🇯":7233,"🇹🇰":7234,"🇹🇱":7235,"🇹🇲":7236,"🇹🇳":7237,"🇹🇴":7238,"🇹🇷":7239,"🇹🇹":7240,"🇹🇻":7241,"🇹🇼":7242,"🇹🇿":7243,"🇺🇦":7244,"🇺🇬":7245,"🇺🇲":7246,"🇺🇳":7247,"🇺🇸":7248,"🇺🇾":7249,"🇺🇿":7250,"🇻🇦":7251,"🇻🇨":7252,"🇻🇪":7253,"🇻🇬":7254,"🇻🇮":7255,"🇻🇳":7256,"🇻🇺":7257,"🇼🇫":7258,"🇼🇸":7259,"🇽🇰":7260,"🇾🇪":7261,"🇾🇹":7262,"🇿🇦":7263,"🇿🇲":7264,"🇿🇼":7265,"🈁":6400,"🈂️":6401,"🈚":6407,"🈯":6404,"🈲":6408,"🈳":6412,"🈴":6411,"🈵":6416,"🈶":6403,"🈷️":6402,"🈸":6410,"🈹":6406,"🈺":6415,"🉐":6405,"🉑":6409,"🌀":4197,"🌁":449,"🌂":4199,"🌃":450,"🌄":452,"🌅":453,"🌆":454,"🌇":455,"🌈":4198,"🌉":456,"🌊":4210,"🌋":410,"🌌":4184,"🌍":41,"🌎":42,"🌏":43,"🌐":44,"🌑":4164,"🌒":4165,"🌓":4166,"🌔":4167,"🌕":4168,"🌖":4169,"🌗":4170,"🌘":4171,"🌙":4172,"🌚":4173,"🌛":4174,"🌜":4175,"🌝":4178,"🌞":4179,"🌟":4182,"🌠":4183,"🌡️":4176,"🌤️":4188,"🌥️":4189,"🌦️":4190,"🌧️":4191,"🌨️":4192,"🌩️":4193,"🌪️":4194,"🌫️":4195,"🌬️":4196,"🌭":347,"🌮":349,"🌯":350,"🌰":331,"🌱":2116,"🌲":2117,"🌳":2118,"🌴":2119,"🌵":2120,"🌶️":323,"🌷":2115,"🌸":2107,"🌹":2110,"🌺":2112,"🌻":2113,"🌼":2114,"🌽":322,"🌾":2121,"🌿":2122,"🍀":2124,"🍁":2125,"🍂":2126,"🍃":2127,"🍄":329,"🍅":316,"🍆":319,"🍇":31,"🍈":32,"🍉":33,"🍊":34,"🍋":35,"🍌":36,"🍍":37,"🍎":39,"🍏":310,"🍐":311,"🍑":312,"🍒":313,"🍓":314,"🍔":344,"🍕":346,"🍖":340,"🍗":341,"🍘":364,"🍙":365,"🍚":366,"🍛":367,"🍜":368,"🍝":369,"🍞":332,"🍟":345,"🍠":370,"🍡":376,"🍢":371,"🍣":372,"🍤":373,"🍥":374,"🍦":385,"🍧":386,"🍨":387,"🍩":388,"🍪":389,"🍫":394,"🍬":395,"🍭":396,"🍮":397,"🍯":398,"🍰":391,"🍱":363,"🍲":356,"🍳":354,"🍴":3118,"🍵":3102,"🍶":3103,"🍷":3105,"🍸":3106,"🍹":3107,"🍺":3108,"🍻":3109,"🍼":399,"🍽️":3117,"🍾":3104,"🍿":359,"🎀":517,"🎁":518,"🎂":390,"🎃":51,"🎄":52,"🎅":1326,"🎆":53,"🎇":54,"🎈":57,"🎉":58,"🎊":59,"🎋":510,"🎌":73,"🎍":511,"🎎":512,"🎏":513,"🎐":514,"🎑":515,"🎒":625,"🎓":637,"🎖️":522,"🎗️":519,"🎙️":656,"🎚️":657,"🎛️":658,"🎞️":689,"🎟️":520,"🎠":458,"🎡":459,"🎢":460,"🎣":549,"🎤":659,"🎥":688,"🎦":6324,"🎧":660,"🎨":577,"🎩":636,"🎪":462,"🎫":521,"🎬":691,"🎭":575,"🎮":561,"🎯":555,"🎰":563,"🎱":558,"🎲":564,"🎳":537,"🎴":574,"🎵":654,"🎶":655,"🎷":662,"🎸":663,"🎹":664,"🎺":665,"🎻":666,"🎼":653,"🎽":551,"🎾":535,"🎿":552,"🏀":531,"🏁":71,"🏂":1397,"🏃‍♀️":1381,"🏃‍♂️":1380,"🏃":1379,"🏄‍♀️":1403,"🏄‍♂️":1402,"🏄":1401,"🏅":524,"🏆":523,"🏇":1395,"🏈":533,"🏉":534,"🏊‍♀️":1409,"🏊‍♂️":1408,"🏊":1407,"🏋️‍♀️":1415,"🏋️‍♂️":1414,"🏋️":1413,"🏌️‍♀️":1400,"🏌️‍♂️":1399,"🏌️":1398,"🏍️":492,"🏎️":491,"🏏":538,"🏐":532,"🏑":539,"🏒":540,"🏓":542,"🏔️":48,"🏕️":412,"🏖️":413,"🏗️":419,"🏘️":421,"🏙️":451,"🏚️":422,"🏛️":418,"🏜️":414,"🏝️":415,"🏞️":416,"🏟️":417,"🏠":423,"🏡":424,"🏢":425,"🏣":426,"🏤":427,"🏥":428,"🏦":429,"🏧":6234,"🏨":430,"🏩":431,"🏪":432,"🏫":433,"🏬":434,"🏭":435,"🏮":6102,"🏯":436,"🏰":437,"🏳️‍🌈":76,"🏳️":75,"🏴‍☠️":77,"🏴󠁧󠁢󠁥󠁮󠁧󠁿":7266,"🏴󠁧󠁢󠁳󠁣󠁴󠁿":7267,"🏴󠁧󠁢󠁷󠁬󠁳󠁿":7268,"🏴":74,"🏵️":2109,"🏷️":6120,"🏸":543,"🏹":6189,"🏺":3121,"🏻":81,"🏼":82,"🏽":83,"🏾":84,"🏿":85,"🐀":244,"🐁":243,"🐂":225,"🐃":226,"🐄":227,"🐅":217,"🐆":218,"🐇":247,"🐈":214,"🐉":282,"🐊":277,"🐋":286,"🐌":294,"🐍":280,"🐎":220,"🐏":232,"🐐":234,"🐑":233,"🐒":22,"🐓":262,"🐔":261,"🐕‍🦺":28,"🐕":26,"🐖":229,"🐗":230,"🐘":239,"🐙":292,"🐚":293,"🐛":296,"🐜":297,"🐝":298,"🐞":299,"🐟":288,"🐠":289,"🐡":290,"🐢":278,"🐣":263,"🐤":264,"🐥":265,"🐦":266,"🐧":267,"🐨":252,"🐩":29,"🐪":235,"🐫":236,"🐬":287,"🐭":242,"🐮":224,"🐯":216,"🐰":246,"🐱":213,"🐲":281,"🐳":285,"🐴":219,"🐵":21,"🐶":25,"🐷":228,"🐸":276,"🐹":245,"🐺":210,"🐻":251,"🐼":253,"🐽":231,"🐾":259,"🐿️":248,"👀":1194,"👁️‍🗨️":1145,"👁️":1195,"👂":1188,"👃":1190,"👄":1197,"👅":1196,"👆":1164,"👇":1166,"👈":1162,"👉":1163,"👊":1171,"👋":1150,"👌":1155,"👍":1168,"👎":1169,"👏":1174,"👐":1176,"👑":634,"👒":635,"👓":61,"👔":66,"👕":67,"👖":68,"👗":613,"👘":614,"👙":619,"👚":620,"👛":621,"👜":622,"👝":623,"👞":626,"👟":627,"👠":630,"👡":631,"👢":633,"👣":1483,"👤":1481,"👥":1482,"👦":1200,"👧":1201,"👨‍🌾":1267,"👨‍🍳":1270,"👨‍🎓":1258,"👨‍🎤":1288,"👨‍🎨":1291,"👨‍🏫":1261,"👨‍🏭":1276,"👨‍👦‍👦":1471,"👨‍👦":1470,"👨‍👧‍👦":1473,"👨‍👧‍👧":1474,"👨‍👧":1472,"👨‍👨‍👦":1460,"👨‍👨‍👦‍👦":1463,"👨‍👨‍👧":1461,"👨‍👨‍👧‍👦":1462,"👨‍👨‍👧‍👧":1464,"👨‍👩‍👦":1455,"👨‍👩‍👦‍👦":1458,"👨‍👩‍👧":1456,"👨‍👩‍👧‍👦":1457,"👨‍👩‍👧‍👧":1459,"👨‍💻":1285,"👨‍💼":1279,"👨‍🔧":1273,"👨‍🔬":1282,"👨‍🚀":1297,"👨‍🚒":1300,"👨‍🦯":1371,"👨‍🦰":1206,"👨‍🦱":1207,"👨‍🦲":1209,"👨‍🦳":1208,"👨‍🦼":1374,"👨‍🦽":1377,"👨‍⚕️":1255,"👨‍⚖️":1264,"👨‍✈️":1294,"👨‍❤️‍👨":1452,"👨‍❤️‍💋‍👨":1448,"👨":1204,"👩‍🌾":1268,"👩‍🍳":1271,"👩‍🎓":1259,"👩‍🎤":1289,"👩‍🎨":1292,"👩‍🏫":1262,"👩‍🏭":1277,"👩‍👦‍👦":1476,"👩‍👦":1475,"👩‍👧‍👦":1478,"👩‍👧‍👧":1479,"👩‍👧":1477,"👩‍👩‍👦":1465,"👩‍👩‍👦‍👦":1468,"👩‍👩‍👧":1466,"👩‍👩‍👧‍👦":1467,"👩‍👩‍👧‍👧":1469,"👩‍💻":1286,"👩‍💼":1280,"👩‍🔧":1274,"👩‍🔬":1283,"👩‍🚀":1298,"👩‍🚒":1301,"👩‍🦯":1372,"👩‍🦰":1211,"👩‍🦱":1213,"👩‍🦲":1217,"👩‍🦳":1215,"👩‍🦼":1375,"👩‍🦽":1378,"👩‍⚕️":1256,"👩‍⚖️":1265,"👩‍✈️":1295,"👩‍❤️‍👨":1451,"👩‍❤️‍👩":1453,"👩‍❤️‍💋‍👨":1447,"👩‍❤️‍💋‍👩":1449,"👩":1210,"👪":1454,"👫":1444,"👬":1445,"👭":1443,"👮‍♀️":1304,"👮‍♂️":1303,"👮":1302,"👯‍♀️":1387,"👯‍♂️":1386,"👯":1385,"👰":1322,"👱‍♀️":1219,"👱‍♂️":1220,"👱":1203,"👲":1319,"👳‍♀️":1318,"👳‍♂️":1317,"👳":1316,"👴":1222,"👵":1223,"👶":1198,"👷‍♀️":1313,"👷‍♂️":1312,"👷":1311,"👸":1315,"👹":197,"👺":198,"👻":199,"👼":1325,"👽":1100,"👾":1101,"👿":192,"💀":193,"💁‍♀️":1238,"💁‍♂️":1237,"💁":1236,"💂‍♀️":1310,"💂‍♂️":1309,"💂":1308,"💃":1382,"💄":641,"💅":1181,"💆‍♀️":1357,"💆‍♂️":1356,"💆":1355,"💇‍♀️":1360,"💇‍♂️":1359,"💇":1358,"💈":461,"💉":6208,"💊":6210,"💋":1115,"💌":1116,"💍":642,"💎":643,"💏":1446,"💐":2106,"💑":1450,"💒":438,"💓":1121,"💔":1126,"💕":1123,"💖":1119,"💗":1120,"💘":1117,"💙":1131,"💚":1130,"💛":1129,"💜":1132,"💝":1118,"💞":1122,"💟":1124,"💠":6447,"💡":6100,"💢":1137,"💣":1143,"💤":1149,"💥":1138,"💦":1140,"💧":4209,"💨":1141,"💩":195,"💪":1183,"💫":1139,"💬":1144,"💭":1148,"💮":2108,"💯":1136,"💰":6121,"💱":6130,"💲":6131,"💳":6127,"💴":6122,"💵":6123,"💶":6124,"💷":6125,"💸":6126,"💹":6129,"💺":4123,"💻":677,"💼":6152,"💽":683,"💾":684,"💿":685,"📀":686,"📁":6153,"📂":6154,"📃":6113,"📄":6115,"📅":6156,"📆":6157,"📇":6160,"📈":6161,"📉":6162,"📊":6163,"📋":6164,"📌":6165,"📍":6166,"📎":6167,"📏":6169,"📐":6170,"📑":6118,"📒":6112,"📓":6111,"📔":6104,"📕":6105,"📖":6106,"📗":6107,"📘":6108,"📙":6109,"📚":6110,"📛":6337,"📜":6114,"📝":6151,"📞":672,"📟":673,"📠":674,"📡":6207,"📢":648,"📣":649,"📤":6136,"📥":6137,"📦":6138,"📧":6133,"📨":6134,"📩":6135,"📪":6140,"📫":6139,"📬":6141,"📭":6142,"📮":6143,"📯":650,"📰":6116,"📱":669,"📲":670,"📳":6328,"📴":6329,"📵":6256,"📶":6327,"📷":693,"📸":694,"📹":695,"📺":692,"📻":661,"📼":696,"📽️":690,"📿":640,"🔀":6306,"🔁":6307,"🔂":6308,"🔃":6274,"🔄":6275,"🔅":6325,"🔆":6326,"🔇":644,"🔈":645,"🔉":646,"🔊":647,"🔋":675,"🔌":676,"🔍":697,"🔎":698,"🔏":6177,"🔐":6178,"🔑":6179,"🔒":6175,"🔓":6176,"🔔":651,"🔕":652,"🔖":6119,"🔗":6197,"🔘":6448,"🔙":6276,"🔚":6277,"🔛":6278,"🔜":6279,"🔝":6280,"🔞":6257,"🔟":6377,"🔠":6378,"🔡":6379,"🔢":6380,"🔣":6381,"🔤":6382,"🔥":4208,"🔦":6101,"🔧":6191,"🔨":6181,"🔩":6192,"🔪":3120,"🔫":6188,"🔬":6205,"🔭":6206,"🔮":559,"🔯":6292,"🔰":6338,"🔱":6336,"🔲":6450,"🔳":6449,"🔴":6417,"🔵":6421,"🔶":6441,"🔷":6442,"🔸":6443,"🔹":6444,"🔺":6445,"🔻":6446,"🔼":6316,"🔽":6318,"🕉️":6283,"🕊️":268,"🕋":446,"🕌":442,"🕍":444,"🕎":6291,"🕐":4142,"🕑":4144,"🕒":4146,"🕓":4148,"🕔":4150,"🕕":4152,"🕖":4154,"🕗":4156,"🕘":4158,"🕙":4160,"🕚":4162,"🕛":4140,"🕜":4143,"🕝":4145,"🕞":4147,"🕟":4149,"🕠":4151,"🕡":4153,"🕢":4155,"🕣":4157,"🕤":4159,"🕥":4161,"🕦":4163,"🕧":4141,"🕯️":699,"🕰️":4139,"🕳️":1142,"🕴️":1384,"🕵️‍♀️":1307,"🕵️‍♂️":1306,"🕵️":1305,"🕶️":62,"🕷️":2101,"🕸️":2102,"🕹️":562,"🕺":1383,"🖇️":6168,"🖊️":6148,"🖋️":6147,"🖌️":6149,"🖍️":6150,"🖐️":1152,"🖕":1165,"🖖":1154,"🖤":1134,"🖥️":678,"🖨️":679,"🖱️":681,"🖲️":682,"🖼️":576,"🗂️":6155,"🗃️":6172,"🗄️":6173,"🗑️":6174,"🗒️":6158,"🗓️":6159,"🗜️":6194,"🗝️":6180,"🗞️":6117,"🗡️":6186,"🗣️":1480,"🗨️":1146,"🗯️":1147,"🗳️":6144,"🗺️":45,"🗻":411,"🗼":439,"🗽":440,"🗾":46,"🗿":6233,"😀":11,"😁":14,"😂":18,"😃":12,"😄":13,"😅":16,"😆":15,"😇":113,"😈":191,"😉":111,"😊":112,"😋":122,"😌":142,"😍":115,"😎":160,"😏":137,"😐":134,"😑":135,"😒":138,"😓":183,"😔":143,"😕":163,"😖":180,"😗":118,"😘":117,"😙":121,"😚":120,"😛":123,"😜":124,"😝":126,"😞":182,"😟":164,"😠":189,"😡":188,"😢":177,"😣":181,"😤":187,"😥":176,"😦":172,"😧":173,"😨":174,"😩":184,"😪":144,"😫":185,"😬":140,"😭":178,"😮":167,"😯":168,"😰":175,"😱":179,"😲":169,"😳":170,"😴":146,"😵":156,"😶":136,"😷":147,"😸":1104,"😹":1105,"😺":1103,"😻":1106,"😼":1107,"😽":1108,"😾":1111,"😿":1110,"🙀":1109,"🙁":165,"🙂":19,"🙃":110,"🙄":139,"🙅‍♀️":1232,"🙅‍♂️":1231,"🙅":1230,"🙆‍♀️":1235,"🙆‍♂️":1234,"🙆":1233,"🙇‍♀️":1247,"🙇‍♂️":1246,"🙇":1245,"🙈":1112,"🙉":1113,"🙊":1114,"🙋‍♀️":1241,"🙋‍♂️":1240,"🙋":1239,"🙌":1175,"🙍‍♀️":1226,"🙍‍♂️":1225,"🙍":1224,"🙎‍♀️":1229,"🙎‍♂️":1228,"🙎":1227,"🙏":1179,"🚀":4129,"🚁":4124,"🚂":463,"🚃":464,"🚄":465,"🚅":466,"🚆":467,"🚇":468,"🚈":469,"🚉":470,"🚊":471,"🚋":474,"🚌":475,"🚍":476,"🚎":477,"🚏":4100,"🚐":478,"🚑":479,"🚒":480,"🚓":481,"🚔":482,"🚕":483,"🚖":484,"🚗":485,"🚘":486,"🚙":487,"🚚":488,"🚛":489,"🚜":490,"🚝":472,"🚞":473,"🚟":4125,"🚠":4126,"🚡":4127,"🚢":4117,"🚣‍♀️":1406,"🚣‍♂️":1405,"🚣":1404,"🚤":4113,"🚥":4106,"🚦":4107,"🚧":4109,"🚨":4105,"🚩":72,"🚪":6213,"🚫":6250,"🚬":6230,"🚭":6252,"🚮":6235,"🚯":6253,"🚰":6236,"🚱":6254,"🚲":497,"🚳":6251,"🚴‍♀️":1418,"🚴‍♂️":1417,"🚴":1416,"🚵‍♀️":1421,"🚵‍♂️":1420,"🚵":1419,"🚶‍♀️":1363,"🚶‍♂️":1362,"🚶":1361,"🚷":6255,"🚸":6248,"🚹":6238,"🚺":6239,"🚻":6240,"🚼":6241,"🚽":6217,"🚾":6242,"🚿":6218,"🛀":1440,"🛁":6219,"🛂":6243,"🛃":6244,"🛄":6245,"🛅":6246,"🛋️":6215,"🛌":1441,"🛍️":624,"🛎️":4131,"🛏️":6214,"🛐":6281,"🛑":4108,"🛒":6229,"🛕":443,"🛠️":6185,"🛡️":6190,"🛢️":4103,"🛣️":4101,"🛤️":4102,"🛥️":4116,"🛩️":4119,"🛫":4120,"🛬":4121,"🛰️":4128,"🛳️":4114,"🛴":498,"🛵":493,"🛶":4112,"🛷":553,"🛸":4130,"🛹":499,"🛺":496,"🟠":6418,"🟡":6419,"🟢":6420,"🟣":6422,"🟤":6423,"🟥":6426,"🟦":6430,"🟧":6427,"🟨":6428,"🟩":6429,"🟪":6431,"🟫":6432,"🤍":1135,"🤎":1133,"🤏":1156,"🤐":132,"🤑":127,"🤒":148,"🤓":161,"🤔":131,"🤕":149,"🤖":1102,"🤗":128,"🤘":1160,"🤙":1161,"🤚":1151,"🤛":1172,"🤜":1173,"🤝":1178,"🤞":1158,"🤟":1159,"🤠":158,"🤡":196,"🤢":150,"🤣":17,"🤤":145,"🤥":141,"🤦‍♀️":1250,"🤦‍♂️":1249,"🤦":1248,"🤧":152,"🤨":133,"🤩":116,"🤪":125,"🤫":130,"🤬":190,"🤭":129,"🤮":151,"🤯":157,"🤰":1323,"🤱":1324,"🤲":1177,"🤳":1182,"🤴":1314,"🤵":1321,"🤶":1327,"🤷‍♀️":1253,"🤷‍♂️":1252,"🤷":1251,"🤸‍♀️":1424,"🤸‍♂️":1423,"🤸":1422,"🤹‍♀️":1436,"🤹‍♂️":1435,"🤹":1434,"🤺":1394,"🤼‍♀️":1427,"🤼‍♂️":1426,"🤼":1425,"🤽‍♀️":1430,"🤽‍♂️":1429,"🤽":1428,"🤾‍♀️":1433,"🤾‍♂️":1432,"🤾":1431,"🤿":550,"🥀":2111,"🥁":668,"🥂":3110,"🥃":3111,"🥄":3119,"🥅":546,"🥇":525,"🥈":526,"🥉":527,"🥊":544,"🥋":545,"🥌":554,"🥍":541,"🥎":530,"🥏":536,"🥐":333,"🥑":318,"🥒":324,"🥓":343,"🥔":320,"🥕":321,"🥖":334,"🥗":358,"🥘":355,"🥙":351,"🥚":353,"🥛":3100,"🥜":330,"🥝":315,"🥞":337,"🥟":377,"🥠":378,"🥡":379,"🥢":3116,"🥣":357,"🥤":3112,"🥥":317,"🥦":326,"🥧":393,"🥨":335,"🥩":342,"🥪":348,"🥫":362,"🥬":325,"🥭":38,"🥮":375,"🥯":336,"🥰":114,"🥱":186,"🥳":159,"🥴":155,"🥵":153,"🥶":154,"🥺":171,"🥻":615,"🥼":64,"🥽":63,"🥾":628,"🥿":629,"🦀":380,"🦁":215,"🦂":2103,"🦃":260,"🦄":221,"🦅":269,"🦆":270,"🦇":250,"🦈":291,"🦉":272,"🦊":211,"🦋":295,"🦌":223,"🦍":23,"🦎":279,"🦏":240,"🦐":382,"🦑":383,"🦒":238,"🦓":222,"🦔":249,"🦕":283,"🦖":284,"🦗":2100,"🦘":257,"🦙":237,"🦚":274,"🦛":241,"🦜":275,"🦝":212,"🦞":381,"🦟":2104,"🦠":2105,"🦡":258,"🦢":271,"🦥":254,"🦦":255,"🦧":24,"🦨":256,"🦩":273,"🦪":384,"🦮":27,"🦯":6196,"🦴":1193,"🦵":1186,"🦶":1187,"🦷":1192,"🦸‍♀️":1330,"🦸‍♂️":1329,"🦸":1328,"🦹‍♀️":1333,"🦹‍♂️":1332,"🦹":1331,"🦺":65,"🦻":1189,"🦼":495,"🦽":494,"🦾":1184,"🦿":1185,"🧀":339,"🧁":392,"🧂":361,"🧃":3113,"🧄":327,"🧅":328,"🧆":352,"🧇":338,"🧈":360,"🧉":3114,"🧊":3115,"🧍‍♀️":1366,"🧍‍♂️":1365,"🧍":1364,"🧎‍♀️":1369,"🧎‍♂️":1368,"🧎":1367,"🧏‍♀️":1244,"🧏‍♂️":1243,"🧏":1242,"🧐":162,"🧑‍🌾":1266,"🧑‍🍳":1269,"🧑‍🎓":1257,"🧑‍🎤":1287,"🧑‍🎨":1290,"🧑‍🏫":1260,"🧑‍🏭":1275,"🧑‍💻":1284,"🧑‍💼":1278,"🧑‍🔧":1272,"🧑‍🔬":1281,"🧑‍🚀":1296,"🧑‍🚒":1299,"🧑‍🤝‍🧑":1442,"🧑‍🦯":1370,"🧑‍🦰":1212,"🧑‍🦱":1214,"🧑‍🦲":1218,"🧑‍🦳":1216,"🧑‍🦼":1373,"🧑‍🦽":1376,"🧑‍⚕️":1254,"🧑‍⚖️":1263,"🧑‍✈️":1293,"🧑":1202,"🧒":1199,"🧓":1221,"🧔":1205,"🧕":1320,"🧖‍♀️":1390,"🧖‍♂️":1389,"🧖":1388,"🧗‍♀️":1393,"🧗‍♂️":1392,"🧗":1391,"🧘‍♀️":1439,"🧘‍♂️":1438,"🧘":1437,"🧙‍♀️":1336,"🧙‍♂️":1335,"🧙":1334,"🧚‍♀️":1339,"🧚‍♂️":1338,"🧚":1337,"🧛‍♀️":1342,"🧛‍♂️":1341,"🧛":1340,"🧜‍♀️":1345,"🧜‍♂️":1344,"🧜":1343,"🧝‍♀️":1348,"🧝‍♂️":1347,"🧝":1346,"🧞‍♀️":1351,"🧞‍♂️":1350,"🧞":1349,"🧟‍♀️":1354,"🧟‍♂️":1353,"🧟":1352,"🧠":1191,"🧡":1128,"🧢":638,"🧣":69,"🧤":610,"🧥":611,"🧦":612,"🧧":516,"🧨":55,"🧩":565,"🧪":6202,"🧫":6203,"🧬":6204,"🧭":47,"🧮":687,"🧯":6228,"🧰":6199,"🧱":420,"🧲":6200,"🧳":4132,"🧴":6221,"🧵":578,"🧶":579,"🧷":6222,"🧸":566,"🧹":6223,"🧺":6224,"🧻":6225,"🧼":6226,"🧽":6227,"🧾":6128,"🧿":560,"🩰":632,"🩱":616,"🩲":617,"🩳":618,"🩸":6209,"🩹":6211,"🩺":6212,"🪀":556,"🪁":557,"🪂":4122,"🪐":4180,"🪑":6216,"🪒":6220,"🪓":6182,"🪔":6103,"🪕":667,"‼️":6355,"⁉️":6356,"™️":6364,"ℹ️":6389,"↔️":6269,"↕️":6268,"↖️":6267,"↗️":6261,"↘️":6263,"↙️":6265,"↩️":6270,"↪️":6271,"⌚":4135,"⌛":4133,"⌨️":680,"⏏️":6323,"⏩":6310,"⏪":6314,"⏫":6317,"⏬":6319,"⏭️":6311,"⏮️":6315,"⏯️":6312,"⏰":4136,"⏱️":4137,"⏲️":4138,"⏳":4134,"⏸️":6320,"⏹️":6321,"⏺️":6322,"Ⓜ️":6391,"▪️":6439,"▫️":6440,"▶️":6309,"◀️":6313,"◻️":6436,"◼️":6435,"◽":6438,"◾":6437,"☀️":4177,"☁️":4185,"☂️":4200,"☃️":4205,"☄️":4207,"☎️":671,"☑️":6341,"☔":4201,"☕":3101,"☘️":2123,"☝️":1167,"☠️":194,"☢️":6258,"☣️":6259,"☦️":6288,"☪️":6289,"☮️":6290,"☯️":6286,"☸️":6285,"☹️":166,"☺️":119,"♈":6293,"♉":6294,"♊":6295,"♋":6296,"♌":6297,"♍":6298,"♎":6299,"♏":6300,"♐":6301,"♑":6302,"♒":6303,"♓":6304,"♟️":571,"♠️":567,"♣️":570,"♥️":568,"♦️":569,"♨️":457,"♻️":6334,"♾️":6333,"♿":6237,"⚒️":6184,"⚓":4110,"⚔️":6187,"⚖️":6195,"⚗️":6201,"⚙️":6193,"⚛️":6282,"⚜️":6335,"⚠️":6247,"⚡":4203,"⚪":6425,"⚫":6424,"⚰️":6231,"⚱️":6232,"⚽":528,"⚾":529,"⛄":4206,"⛅":4186,"⛈️":4187,"⛎":6305,"⛏️":6183,"⛑️":639,"⛓️":6198,"⛔":6249,"⛩️":445,"⛪":441,"⛰️":49,"⛱️":4202,"⛲":447,"⛳":547,"⛴️":4115,"⛵":4111,"⛷️":1396,"⛸️":548,"⛹️‍♀️":1412,"⛹️‍♂️":1411,"⛹️":1410,"⛺":448,"⛽":4104,"✂️":6171,"✅":6340,"✈️":4118,"✉️":6132,"✊":1170,"✋":1153,"✌️":1157,"✍️":1180,"✏️":6145,"✒️":6146,"✔️":6342,"✖️":6343,"✝️":6287,"✡️":6284,"✨":56,"✳️":6352,"✴️":6353,"❄️":4204,"❇️":6354,"❌":6344,"❎":6345,"❓":6357,"❔":6358,"❕":6359,"❗":6360,"❣️":1125,"❤️":1127,"➕":6346,"➖":6347,"➗":6348,"➡️":6262,"➰":6349,"➿":6350,"⤴️":6272,"⤵️":6273,"⬅️":6266,"⬆️":6260,"⬇️":6264,"⬛":6433,"⬜":6434,"⭐":4181,"⭕":6339,"〰️":6361,"〽️":6351,"㊗️":6413,"㊙️":6414,"🎅🏻":0,"🎅🏼":0,"🎅🏽":0,"🎅🏾":0,"🎅🏿":0,"🏂🏻":0,"🏂🏼":0,"🏂🏽":0,"🏂🏾":0,"🏂🏿":0,"🏃🏻‍♀️":0,"🏃🏼‍♀️":0,"🏃🏽‍♀️":0,"🏃🏾‍♀️":0,"🏃🏿‍♀️":0,"🏃🏻‍♂️":0,"🏃🏼‍♂️":0,"🏃🏽‍♂️":0,"🏃🏾‍♂️":0,"🏃🏿‍♂️":0,"🏃🏻":0,"🏃🏼":0,"🏃🏽":0,"🏃🏾":0,"🏃🏿":0,"🏄🏻‍♀️":0,"🏄🏼‍♀️":0,"🏄🏽‍♀️":0,"🏄🏾‍♀️":0,"🏄🏿‍♀️":0,"🏄🏻‍♂️":0,"🏄🏼‍♂️":0,"🏄🏽‍♂️":0,"🏄🏾‍♂️":0,"🏄🏿‍♂️":0,"🏄🏻":0,"🏄🏼":0,"🏄🏽":0,"🏄🏾":0,"🏄🏿":0,"🏇🏻":0,"🏇🏼":0,"🏇🏽":0,"🏇🏾":0,"🏇🏿":0,"🏊🏻‍♀️":0,"🏊🏼‍♀️":0,"🏊🏽‍♀️":0,"🏊🏾‍♀️":0,"🏊🏿‍♀️":0,"🏊🏻‍♂️":0,"🏊🏼‍♂️":0,"🏊🏽‍♂️":0,"🏊🏾‍♂️":0,"🏊🏿‍♂️":0,"🏊🏻":0,"🏊🏼":0,"🏊🏽":0,"🏊🏾":0,"🏊🏿":0,"🏋🏻‍♀️":0,"🏋🏼‍♀️":0,"🏋🏽‍♀️":0,"🏋🏾‍♀️":0,"🏋🏿‍♀️":0,"🏋🏻‍♂️":0,"🏋🏼‍♂️":0,"🏋🏽‍♂️":0,"🏋🏾‍♂️":0,"🏋🏿‍♂️":0,"🏋🏻":0,"🏋🏼":0,"🏋🏽":0,"🏋🏾":0,"🏋🏿":0,"🏌🏻‍♀️":0,"🏌🏼‍♀️":0,"🏌🏽‍♀️":0,"🏌🏾‍♀️":0,"🏌🏿‍♀️":0,"🏌🏻‍♂️":0,"🏌🏼‍♂️":0,"🏌🏽‍♂️":0,"🏌🏾‍♂️":0,"🏌🏿‍♂️":0,"🏌🏻":0,"🏌🏼":0,"🏌🏽":0,"🏌🏾":0,"🏌🏿":0,"👂🏻":0,"👂🏼":0,"👂🏽":0,"👂🏾":0,"👂🏿":0,"👃🏻":0,"👃🏼":0,"👃🏽":0,"👃🏾":0,"👃🏿":0,"👆🏻":0,"👆🏼":0,"👆🏽":0,"👆🏾":0,"👆🏿":0,"👇🏻":0,"👇🏼":0,"👇🏽":0,"👇🏾":0,"👇🏿":0,"👈🏻":0,"👈🏼":0,"👈🏽":0,"👈🏾":0,"👈🏿":0,"👉🏻":0,"👉🏼":0,"👉🏽":0,"👉🏾":0,"👉🏿":0,"👊🏻":0,"👊🏼":0,"👊🏽":0,"👊🏾":0,"👊🏿":0,"👋🏻":0,"👋🏼":0,"👋🏽":0,"👋🏾":0,"👋🏿":0,"👌🏻":0,"👌🏼":0,"👌🏽":0,"👌🏾":0,"👌🏿":0,"👍🏻":0,"👍🏼":0,"👍🏽":0,"👍🏾":0,"👍🏿":0,"👎🏻":0,"👎🏼":0,"👎🏽":0,"👎🏾":0,"👎🏿":0,"👏🏻":0,"👏🏼":0,"👏🏽":0,"👏🏾":0,"👏🏿":0,"👐🏻":0,"👐🏼":0,"👐🏽":0,"👐🏾":0,"👐🏿":0,"👦🏻":0,"👦🏼":0,"👦🏽":0,"👦🏾":0,"👦🏿":0,"👧🏻":0,"👧🏼":0,"👧🏽":0,"👧🏾":0,"👧🏿":0,"👨🏻‍🌾":0,"👨🏼‍🌾":0,"👨🏽‍🌾":0,"👨🏾‍🌾":0,"👨🏿‍🌾":0,"👨🏻‍🍳":0,"👨🏼‍🍳":0,"👨🏽‍🍳":0,"👨🏾‍🍳":0,"👨🏿‍🍳":0,"👨🏻‍🎓":0,"👨🏼‍🎓":0,"👨🏽‍🎓":0,"👨🏾‍🎓":0,"👨🏿‍🎓":0,"👨🏻‍🎤":0,"👨🏼‍🎤":0,"👨🏽‍🎤":0,"👨🏾‍🎤":0,"👨🏿‍🎤":0,"👨🏻‍🎨":0,"👨🏼‍🎨":0,"👨🏽‍🎨":0,"👨🏾‍🎨":0,"👨🏿‍🎨":0,"👨🏻‍🏫":0,"👨🏼‍🏫":0,"👨🏽‍🏫":0,"👨🏾‍🏫":0,"👨🏿‍🏫":0,"👨🏻‍🏭":0,"👨🏼‍🏭":0,"👨🏽‍🏭":0,"👨🏾‍🏭":0,"👨🏿‍🏭":0,"👨🏻‍💻":0,"👨🏼‍💻":0,"👨🏽‍💻":0,"👨🏾‍💻":0,"👨🏿‍💻":0,"👨🏻‍💼":0,"👨🏼‍💼":0,"👨🏽‍💼":0,"👨🏾‍💼":0,"👨🏿‍💼":0,"👨🏻‍🔧":0,"👨🏼‍🔧":0,"👨🏽‍🔧":0,"👨🏾‍🔧":0,"👨🏿‍🔧":0,"👨🏻‍🔬":0,"👨🏼‍🔬":0,"👨🏽‍🔬":0,"👨🏾‍🔬":0,"👨🏿‍🔬":0,"👨🏻‍🚀":0,"👨🏼‍🚀":0,"👨🏽‍🚀":0,"👨🏾‍🚀":0,"👨🏿‍🚀":0,"👨🏻‍🚒":0,"👨🏼‍🚒":0,"👨🏽‍🚒":0,"👨🏾‍🚒":0,"👨🏿‍🚒":0,"👨🏻‍🦯":0,"👨🏼‍🦯":0,"👨🏽‍🦯":0,"👨🏾‍🦯":0,"👨🏿‍🦯":0,"👨🏻‍🦰":0,"👨🏼‍🦰":0,"👨🏽‍🦰":0,"👨🏾‍🦰":0,"👨🏿‍🦰":0,"👨🏻‍🦱":0,"👨🏼‍🦱":0,"👨🏽‍🦱":0,"👨🏾‍🦱":0,"👨🏿‍🦱":0,"👨🏻‍🦲":0,"👨🏼‍🦲":0,"👨🏽‍🦲":0,"👨🏾‍🦲":0,"👨🏿‍🦲":0,"👨🏻‍🦳":0,"👨🏼‍🦳":0,"👨🏽‍🦳":0,"👨🏾‍🦳":0,"👨🏿‍🦳":0,"👨🏻‍🦼":0,"👨🏼‍🦼":0,"👨🏽‍🦼":0,"👨🏾‍🦼":0,"👨🏿‍🦼":0,"👨🏻‍🦽":0,"👨🏼‍🦽":0,"👨🏽‍🦽":0,"👨🏾‍🦽":0,"👨🏿‍🦽":0,"👨🏻‍⚕️":0,"👨🏼‍⚕️":0,"👨🏽‍⚕️":0,"👨🏾‍⚕️":0,"👨🏿‍⚕️":0,"👨🏻‍⚖️":0,"👨🏼‍⚖️":0,"👨🏽‍⚖️":0,"👨🏾‍⚖️":0,"👨🏿‍⚖️":0,"👨🏻‍✈️":0,"👨🏼‍✈️":0,"👨🏽‍✈️":0,"👨🏾‍✈️":0,"👨🏿‍✈️":0,"👨🏻":0,"👨🏼":0,"👨🏽":0,"👨🏾":0,"👨🏿":0,"👩🏻‍🌾":0,"👩🏼‍🌾":0,"👩🏽‍🌾":0,"👩🏾‍🌾":0,"👩🏿‍🌾":0,"👩🏻‍🍳":0,"👩🏼‍🍳":0,"👩🏽‍🍳":0,"👩🏾‍🍳":0,"👩🏿‍🍳":0,"👩🏻‍🎓":0,"👩🏼‍🎓":0,"👩🏽‍🎓":0,"👩🏾‍🎓":0,"👩🏿‍🎓":0,"👩🏻‍🎤":0,"👩🏼‍🎤":0,"👩🏽‍🎤":0,"👩🏾‍🎤":0,"👩🏿‍🎤":0,"👩🏻‍🎨":0,"👩🏼‍🎨":0,"👩🏽‍🎨":0,"👩🏾‍🎨":0,"👩🏿‍🎨":0,"👩🏻‍🏫":0,"👩🏼‍🏫":0,"👩🏽‍🏫":0,"👩🏾‍🏫":0,"👩🏿‍🏫":0,"👩🏻‍🏭":0,"👩🏼‍🏭":0,"👩🏽‍🏭":0,"👩🏾‍🏭":0,"👩🏿‍🏭":0,"👩🏻‍💻":0,"👩🏼‍💻":0,"👩🏽‍💻":0,"👩🏾‍💻":0,"👩🏿‍💻":0,"👩🏻‍💼":0,"👩🏼‍💼":0,"👩🏽‍💼":0,"👩🏾‍💼":0,"👩🏿‍💼":0,"👩🏻‍🔧":0,"👩🏼‍🔧":0,"👩🏽‍🔧":0,"👩🏾‍🔧":0,"👩🏿‍🔧":0,"👩🏻‍🔬":0,"👩🏼‍🔬":0,"👩🏽‍🔬":0,"👩🏾‍🔬":0,"👩🏿‍🔬":0,"👩🏻‍🚀":0,"👩🏼‍🚀":0,"👩🏽‍🚀":0,"👩🏾‍🚀":0,"👩🏿‍🚀":0,"👩🏻‍🚒":0,"👩🏼‍🚒":0,"👩🏽‍🚒":0,"👩🏾‍🚒":0,"👩🏿‍🚒":0,"👩🏻‍🦯":0,"👩🏼‍🦯":0,"👩🏽‍🦯":0,"👩🏾‍🦯":0,"👩🏿‍🦯":0,"👩🏻‍🦰":0,"👩🏼‍🦰":0,"👩🏽‍🦰":0,"👩🏾‍🦰":0,"👩🏿‍🦰":0,"👩🏻‍🦱":0,"👩🏼‍🦱":0,"👩🏽‍🦱":0,"👩🏾‍🦱":0,"👩🏿‍🦱":0,"👩🏻‍🦲":0,"👩🏼‍🦲":0,"👩🏽‍🦲":0,"👩🏾‍🦲":0,"👩🏿‍🦲":0,"👩🏻‍🦳":0,"👩🏼‍🦳":0,"👩🏽‍🦳":0,"👩🏾‍🦳":0,"👩🏿‍🦳":0,"👩🏻‍🦼":0,"👩🏼‍🦼":0,"👩🏽‍🦼":0,"👩🏾‍🦼":0,"👩🏿‍🦼":0,"👩🏻‍🦽":0,"👩🏼‍🦽":0,"👩🏽‍🦽":0,"👩🏾‍🦽":0,"👩🏿‍🦽":0,"👩🏻‍⚕️":0,"👩🏼‍⚕️":0,"👩🏽‍⚕️":0,"👩🏾‍⚕️":0,"👩🏿‍⚕️":0,"👩🏻‍⚖️":0,"👩🏼‍⚖️":0,"👩🏽‍⚖️":0,"👩🏾‍⚖️":0,"👩🏿‍⚖️":0,"👩🏻‍✈️":0,"👩🏼‍✈️":0,"👩🏽‍✈️":0,"👩🏾‍✈️":0,"👩🏿‍✈️":0,"👩🏻":0,"👩🏼":0,"👩🏽":0,"👩🏾":0,"👩🏿":0,"👫🏻":0,"👫🏼":0,"👫🏽":0,"👫🏾":0,"👫🏿":0,"👩🏻‍🤝‍👨🏼":0,"👩🏻‍🤝‍👨🏽":0,"👩🏻‍🤝‍👨🏾":0,"👩🏻‍🤝‍👨🏿":0,"👩🏼‍🤝‍👨🏻":0,"👩🏼‍🤝‍👨🏽":0,"👩🏼‍🤝‍👨🏾":0,"👩🏼‍🤝‍👨🏿":0,"👩🏽‍🤝‍👨🏻":0,"👩🏽‍🤝‍👨🏼":0,"👩🏽‍🤝‍👨🏾":0,"👩🏽‍🤝‍👨🏿":0,"👩🏾‍🤝‍👨🏻":0,"👩🏾‍🤝‍👨🏼":0,"👩🏾‍🤝‍👨🏽":0,"👩🏾‍🤝‍👨🏿":0,"👩🏿‍🤝‍👨🏻":0,"👩🏿‍🤝‍👨🏼":0,"👩🏿‍🤝‍👨🏽":0,"👩🏿‍🤝‍👨🏾":0,"👬🏻":0,"👬🏼":0,"👬🏽":0,"👬🏾":0,"👬🏿":0,"👨🏻‍🤝‍👨🏼":0,"👨🏻‍🤝‍👨🏽":0,"👨🏻‍🤝‍👨🏾":0,"👨🏻‍🤝‍👨🏿":0,"👨🏼‍🤝‍👨🏻":0,"👨🏼‍🤝‍👨🏽":0,"👨🏼‍🤝‍👨🏾":0,"👨🏼‍🤝‍👨🏿":0,"👨🏽‍🤝‍👨🏻":0,"👨🏽‍🤝‍👨🏼":0,"👨🏽‍🤝‍👨🏾":0,"👨🏽‍🤝‍👨🏿":0,"👨🏾‍🤝‍👨🏻":0,"👨🏾‍🤝‍👨🏼":0,"👨🏾‍🤝‍👨🏽":0,"👨🏾‍🤝‍👨🏿":0,"👨🏿‍🤝‍👨🏻":0,"👨🏿‍🤝‍👨🏼":0,"👨🏿‍🤝‍👨🏽":0,"👨🏿‍🤝‍👨🏾":0,"👭🏻":0,"👭🏼":0,"👭🏽":0,"👭🏾":0,"👭🏿":0,"👩🏻‍🤝‍👩🏼":0,"👩🏻‍🤝‍👩🏽":0,"👩🏻‍🤝‍👩🏾":0,"👩🏻‍🤝‍👩🏿":0,"👩🏼‍🤝‍👩🏻":0,"👩🏼‍🤝‍👩🏽":0,"👩🏼‍🤝‍👩🏾":0,"👩🏼‍🤝‍👩🏿":0,"👩🏽‍🤝‍👩🏻":0,"👩🏽‍🤝‍👩🏼":0,"👩🏽‍🤝‍👩🏾":0,"👩🏽‍🤝‍👩🏿":0,"👩🏾‍🤝‍👩🏻":0,"👩🏾‍🤝‍👩🏼":0,"👩🏾‍🤝‍👩🏽":0,"👩🏾‍🤝‍👩🏿":0,"👩🏿‍🤝‍👩🏻":0,"👩🏿‍🤝‍👩🏼":0,"👩🏿‍🤝‍👩🏽":0,"👩🏿‍🤝‍👩🏾":0,"👮🏻‍♀️":0,"👮🏼‍♀️":0,"👮🏽‍♀️":0,"👮🏾‍♀️":0,"👮🏿‍♀️":0,"👮🏻‍♂️":0,"👮🏼‍♂️":0,"👮🏽‍♂️":0,"👮🏾‍♂️":0,"👮🏿‍♂️":0,"👮🏻":0,"👮🏼":0,"👮🏽":0,"👮🏾":0,"👮🏿":0,"👰🏻":0,"👰🏼":0,"👰🏽":0,"👰🏾":0,"👰🏿":0,"👱🏻‍♀️":0,"👱🏼‍♀️":0,"👱🏽‍♀️":0,"👱🏾‍♀️":0,"👱🏿‍♀️":0,"👱🏻‍♂️":0,"👱🏼‍♂️":0,"👱🏽‍♂️":0,"👱🏾‍♂️":0,"👱🏿‍♂️":0,"👱🏻":0,"👱🏼":0,"👱🏽":0,"👱🏾":0,"👱🏿":0,"👲🏻":0,"👲🏼":0,"👲🏽":0,"👲🏾":0,"👲🏿":0,"👳🏻‍♀️":0,"👳🏼‍♀️":0,"👳🏽‍♀️":0,"👳🏾‍♀️":0,"👳🏿‍♀️":0,"👳🏻‍♂️":0,"👳🏼‍♂️":0,"👳🏽‍♂️":0,"👳🏾‍♂️":0,"👳🏿‍♂️":0,"👳🏻":0,"👳🏼":0,"👳🏽":0,"👳🏾":0,"👳🏿":0,"👴🏻":0,"👴🏼":0,"👴🏽":0,"👴🏾":0,"👴🏿":0,"👵🏻":0,"👵🏼":0,"👵🏽":0,"👵🏾":0,"👵🏿":0,"👶🏻":0,"👶🏼":0,"👶🏽":0,"👶🏾":0,"👶🏿":0,"👷🏻‍♀️":0,"👷🏼‍♀️":0,"👷🏽‍♀️":0,"👷🏾‍♀️":0,"👷🏿‍♀️":0,"👷🏻‍♂️":0,"👷🏼‍♂️":0,"👷🏽‍♂️":0,"👷🏾‍♂️":0,"👷🏿‍♂️":0,"👷🏻":0,"👷🏼":0,"👷🏽":0,"👷🏾":0,"👷🏿":0,"👸🏻":0,"👸🏼":0,"👸🏽":0,"👸🏾":0,"👸🏿":0,"👼🏻":0,"👼🏼":0,"👼🏽":0,"👼🏾":0,"👼🏿":0,"💁🏻‍♀️":0,"💁🏼‍♀️":0,"💁🏽‍♀️":0,"💁🏾‍♀️":0,"💁🏿‍♀️":0,"💁🏻‍♂️":0,"💁🏼‍♂️":0,"💁🏽‍♂️":0,"💁🏾‍♂️":0,"💁🏿‍♂️":0,"💁🏻":0,"💁🏼":0,"💁🏽":0,"💁🏾":0,"💁🏿":0,"💂🏻‍♀️":0,"💂🏼‍♀️":0,"💂🏽‍♀️":0,"💂🏾‍♀️":0,"💂🏿‍♀️":0,"💂🏻‍♂️":0,"💂🏼‍♂️":0,"💂🏽‍♂️":0,"💂🏾‍♂️":0,"💂🏿‍♂️":0,"💂🏻":0,"💂🏼":0,"💂🏽":0,"💂🏾":0,"💂🏿":0,"💃🏻":0,"💃🏼":0,"💃🏽":0,"💃🏾":0,"💃🏿":0,"💅🏻":0,"💅🏼":0,"💅🏽":0,"💅🏾":0,"💅🏿":0,"💆🏻‍♀️":0,"💆🏼‍♀️":0,"💆🏽‍♀️":0,"💆🏾‍♀️":0,"💆🏿‍♀️":0,"💆🏻‍♂️":0,"💆🏼‍♂️":0,"💆🏽‍♂️":0,"💆🏾‍♂️":0,"💆🏿‍♂️":0,"💆🏻":0,"💆🏼":0,"💆🏽":0,"💆🏾":0,"💆🏿":0,"💇🏻‍♀️":0,"💇🏼‍♀️":0,"💇🏽‍♀️":0,"💇🏾‍♀️":0,"💇🏿‍♀️":0,"💇🏻‍♂️":0,"💇🏼‍♂️":0,"💇🏽‍♂️":0,"💇🏾‍♂️":0,"💇🏿‍♂️":0,"💇🏻":0,"💇🏼":0,"💇🏽":0,"💇🏾":0,"💇🏿":0,"💪🏻":0,"💪🏼":0,"💪🏽":0,"💪🏾":0,"💪🏿":0,"🕴🏻":0,"🕴🏼":0,"🕴🏽":0,"🕴🏾":0,"🕴🏿":0,"🕵🏻‍♀️":0,"🕵🏼‍♀️":0,"🕵🏽‍♀️":0,"🕵🏾‍♀️":0,"🕵🏿‍♀️":0,"🕵🏻‍♂️":0,"🕵🏼‍♂️":0,"🕵🏽‍♂️":0,"🕵🏾‍♂️":0,"🕵🏿‍♂️":0,"🕵🏻":0,"🕵🏼":0,"🕵🏽":0,"🕵🏾":0,"🕵🏿":0,"🕺🏻":0,"🕺🏼":0,"🕺🏽":0,"🕺🏾":0,"🕺🏿":0,"🖐🏻":0,"🖐🏼":0,"🖐🏽":0,"🖐🏾":0,"🖐🏿":0,"🖕🏻":0,"🖕🏼":0,"🖕🏽":0,"🖕🏾":0,"🖕🏿":0,"🖖🏻":0,"🖖🏼":0,"🖖🏽":0,"🖖🏾":0,"🖖🏿":0,"🙅🏻‍♀️":0,"🙅🏼‍♀️":0,"🙅🏽‍♀️":0,"🙅🏾‍♀️":0,"🙅🏿‍♀️":0,"🙅🏻‍♂️":0,"🙅🏼‍♂️":0,"🙅🏽‍♂️":0,"🙅🏾‍♂️":0,"🙅🏿‍♂️":0,"🙅🏻":0,"🙅🏼":0,"🙅🏽":0,"🙅🏾":0,"🙅🏿":0,"🙆🏻‍♀️":0,"🙆🏼‍♀️":0,"🙆🏽‍♀️":0,"🙆🏾‍♀️":0,"🙆🏿‍♀️":0,"🙆🏻‍♂️":0,"🙆🏼‍♂️":0,"🙆🏽‍♂️":0,"🙆🏾‍♂️":0,"🙆🏿‍♂️":0,"🙆🏻":0,"🙆🏼":0,"🙆🏽":0,"🙆🏾":0,"🙆🏿":0,"🙇🏻‍♀️":0,"🙇🏼‍♀️":0,"🙇🏽‍♀️":0,"🙇🏾‍♀️":0,"🙇🏿‍♀️":0,"🙇🏻‍♂️":0,"🙇🏼‍♂️":0,"🙇🏽‍♂️":0,"🙇🏾‍♂️":0,"🙇🏿‍♂️":0,"🙇🏻":0,"🙇🏼":0,"🙇🏽":0,"🙇🏾":0,"🙇🏿":0,"🙋🏻‍♀️":0,"🙋🏼‍♀️":0,"🙋🏽‍♀️":0,"🙋🏾‍♀️":0,"🙋🏿‍♀️":0,"🙋🏻‍♂️":0,"🙋🏼‍♂️":0,"🙋🏽‍♂️":0,"🙋🏾‍♂️":0,"🙋🏿‍♂️":0,"🙋🏻":0,"🙋🏼":0,"🙋🏽":0,"🙋🏾":0,"🙋🏿":0,"🙌🏻":0,"🙌🏼":0,"🙌🏽":0,"🙌🏾":0,"🙌🏿":0,"🙍🏻‍♀️":0,"🙍🏼‍♀️":0,"🙍🏽‍♀️":0,"🙍🏾‍♀️":0,"🙍🏿‍♀️":0,"🙍🏻‍♂️":0,"🙍🏼‍♂️":0,"🙍🏽‍♂️":0,"🙍🏾‍♂️":0,"🙍🏿‍♂️":0,"🙍🏻":0,"🙍🏼":0,"🙍🏽":0,"🙍🏾":0,"🙍🏿":0,"🙎🏻‍♀️":0,"🙎🏼‍♀️":0,"🙎🏽‍♀️":0,"🙎🏾‍♀️":0,"🙎🏿‍♀️":0,"🙎🏻‍♂️":0,"🙎🏼‍♂️":0,"🙎🏽‍♂️":0,"🙎🏾‍♂️":0,"🙎🏿‍♂️":0,"🙎🏻":0,"🙎🏼":0,"🙎🏽":0,"🙎🏾":0,"🙎🏿":0,"🙏🏻":0,"🙏🏼":0,"🙏🏽":0,"🙏🏾":0,"🙏🏿":0,"🚣🏻‍♀️":0,"🚣🏼‍♀️":0,"🚣🏽‍♀️":0,"🚣🏾‍♀️":0,"🚣🏿‍♀️":0,"🚣🏻‍♂️":0,"🚣🏼‍♂️":0,"🚣🏽‍♂️":0,"🚣🏾‍♂️":0,"🚣🏿‍♂️":0,"🚣🏻":0,"🚣🏼":0,"🚣🏽":0,"🚣🏾":0,"🚣🏿":0,"🚴🏻‍♀️":0,"🚴🏼‍♀️":0,"🚴🏽‍♀️":0,"🚴🏾‍♀️":0,"🚴🏿‍♀️":0,"🚴🏻‍♂️":0,"🚴🏼‍♂️":0,"🚴🏽‍♂️":0,"🚴🏾‍♂️":0,"🚴🏿‍♂️":0,"🚴🏻":0,"🚴🏼":0,"🚴🏽":0,"🚴🏾":0,"🚴🏿":0,"🚵🏻‍♀️":0,"🚵🏼‍♀️":0,"🚵🏽‍♀️":0,"🚵🏾‍♀️":0,"🚵🏿‍♀️":0,"🚵🏻‍♂️":0,"🚵🏼‍♂️":0,"🚵🏽‍♂️":0,"🚵🏾‍♂️":0,"🚵🏿‍♂️":0,"🚵🏻":0,"🚵🏼":0,"🚵🏽":0,"🚵🏾":0,"🚵🏿":0,"🚶🏻‍♀️":0,"🚶🏼‍♀️":0,"🚶🏽‍♀️":0,"🚶🏾‍♀️":0,"🚶🏿‍♀️":0,"🚶🏻‍♂️":0,"🚶🏼‍♂️":0,"🚶🏽‍♂️":0,"🚶🏾‍♂️":0,"🚶🏿‍♂️":0,"🚶🏻":0,"🚶🏼":0,"🚶🏽":0,"🚶🏾":0,"🚶🏿":0,"🛀🏻":0,"🛀🏼":0,"🛀🏽":0,"🛀🏾":0,"🛀🏿":0,"🛌🏻":0,"🛌🏼":0,"🛌🏽":0,"🛌🏾":0,"🛌🏿":0,"🤏🏻":0,"🤏🏼":0,"🤏🏽":0,"🤏🏾":0,"🤏🏿":0,"🤘🏻":0,"🤘🏼":0,"🤘🏽":0,"🤘🏾":0,"🤘🏿":0,"🤙🏻":0,"🤙🏼":0,"🤙🏽":0,"🤙🏾":0,"🤙🏿":0,"🤚🏻":0,"🤚🏼":0,"🤚🏽":0,"🤚🏾":0,"🤚🏿":0,"🤛🏻":0,"🤛🏼":0,"🤛🏽":0,"🤛🏾":0,"🤛🏿":0,"🤜🏻":0,"🤜🏼":0,"🤜🏽":0,"🤜🏾":0,"🤜🏿":0,"🤞🏻":0,"🤞🏼":0,"🤞🏽":0,"🤞🏾":0,"🤞🏿":0,"🤟🏻":0,"🤟🏼":0,"🤟🏽":0,"🤟🏾":0,"🤟🏿":0,"🤦🏻‍♀️":0,"🤦🏼‍♀️":0,"🤦🏽‍♀️":0,"🤦🏾‍♀️":0,"🤦🏿‍♀️":0,"🤦🏻‍♂️":0,"🤦🏼‍♂️":0,"🤦🏽‍♂️":0,"🤦🏾‍♂️":0,"🤦🏿‍♂️":0,"🤦🏻":0,"🤦🏼":0,"🤦🏽":0,"🤦🏾":0,"🤦🏿":0,"🤰🏻":0,"🤰🏼":0,"🤰🏽":0,"🤰🏾":0,"🤰🏿":0,"🤱🏻":0,"🤱🏼":0,"🤱🏽":0,"🤱🏾":0,"🤱🏿":0,"🤲🏻":0,"🤲🏼":0,"🤲🏽":0,"🤲🏾":0,"🤲🏿":0,"🤳🏻":0,"🤳🏼":0,"🤳🏽":0,"🤳🏾":0,"🤳🏿":0,"🤴🏻":0,"🤴🏼":0,"🤴🏽":0,"🤴🏾":0,"🤴🏿":0,"🤵🏻":0,"🤵🏼":0,"🤵🏽":0,"🤵🏾":0,"🤵🏿":0,"🤶🏻":0,"🤶🏼":0,"🤶🏽":0,"🤶🏾":0,"🤶🏿":0,"🤷🏻‍♀️":0,"🤷🏼‍♀️":0,"🤷🏽‍♀️":0,"🤷🏾‍♀️":0,"🤷🏿‍♀️":0,"🤷🏻‍♂️":0,"🤷🏼‍♂️":0,"🤷🏽‍♂️":0,"🤷🏾‍♂️":0,"🤷🏿‍♂️":0,"🤷🏻":0,"🤷🏼":0,"🤷🏽":0,"🤷🏾":0,"🤷🏿":0,"🤸🏻‍♀️":0,"🤸🏼‍♀️":0,"🤸🏽‍♀️":0,"🤸🏾‍♀️":0,"🤸🏿‍♀️":0,"🤸🏻‍♂️":0,"🤸🏼‍♂️":0,"🤸🏽‍♂️":0,"🤸🏾‍♂️":0,"🤸🏿‍♂️":0,"🤸🏻":0,"🤸🏼":0,"🤸🏽":0,"🤸🏾":0,"🤸🏿":0,"🤹🏻‍♀️":0,"🤹🏼‍♀️":0,"🤹🏽‍♀️":0,"🤹🏾‍♀️":0,"🤹🏿‍♀️":0,"🤹🏻‍♂️":0,"🤹🏼‍♂️":0,"🤹🏽‍♂️":0,"🤹🏾‍♂️":0,"🤹🏿‍♂️":0,"🤹🏻":0,"🤹🏼":0,"🤹🏽":0,"🤹🏾":0,"🤹🏿":0,"🤽🏻‍♀️":0,"🤽🏼‍♀️":0,"🤽🏽‍♀️":0,"🤽🏾‍♀️":0,"🤽🏿‍♀️":0,"🤽🏻‍♂️":0,"🤽🏼‍♂️":0,"🤽🏽‍♂️":0,"🤽🏾‍♂️":0,"🤽🏿‍♂️":0,"🤽🏻":0,"🤽🏼":0,"🤽🏽":0,"🤽🏾":0,"🤽🏿":0,"🤾🏻‍♀️":0,"🤾🏼‍♀️":0,"🤾🏽‍♀️":0,"🤾🏾‍♀️":0,"🤾🏿‍♀️":0,"🤾🏻‍♂️":0,"🤾🏼‍♂️":0,"🤾🏽‍♂️":0,"🤾🏾‍♂️":0,"🤾🏿‍♂️":0,"🤾🏻":0,"🤾🏼":0,"🤾🏽":0,"🤾🏾":0,"🤾🏿":0,"🦵🏻":0,"🦵🏼":0,"🦵🏽":0,"🦵🏾":0,"🦵🏿":0,"🦶🏻":0,"🦶🏼":0,"🦶🏽":0,"🦶🏾":0,"🦶🏿":0,"🦸🏻‍♀️":0,"🦸🏼‍♀️":0,"🦸🏽‍♀️":0,"🦸🏾‍♀️":0,"🦸🏿‍♀️":0,"🦸🏻‍♂️":0,"🦸🏼‍♂️":0,"🦸🏽‍♂️":0,"🦸🏾‍♂️":0,"🦸🏿‍♂️":0,"🦸🏻":0,"🦸🏼":0,"🦸🏽":0,"🦸🏾":0,"🦸🏿":0,"🦹🏻‍♀️":0,"🦹🏼‍♀️":0,"🦹🏽‍♀️":0,"🦹🏾‍♀️":0,"🦹🏿‍♀️":0,"🦹🏻‍♂️":0,"🦹🏼‍♂️":0,"🦹🏽‍♂️":0,"🦹🏾‍♂️":0,"🦹🏿‍♂️":0,"🦹🏻":0,"🦹🏼":0,"🦹🏽":0,"🦹🏾":0,"🦹🏿":0,"🦻🏻":0,"🦻🏼":0,"🦻🏽":0,"🦻🏾":0,"🦻🏿":0,"🧍🏻‍♀️":0,"🧍🏼‍♀️":0,"🧍🏽‍♀️":0,"🧍🏾‍♀️":0,"🧍🏿‍♀️":0,"🧍🏻‍♂️":0,"🧍🏼‍♂️":0,"🧍🏽‍♂️":0,"🧍🏾‍♂️":0,"🧍🏿‍♂️":0,"🧍🏻":0,"🧍🏼":0,"🧍🏽":0,"🧍🏾":0,"🧍🏿":0,"🧎🏻‍♀️":0,"🧎🏼‍♀️":0,"🧎🏽‍♀️":0,"🧎🏾‍♀️":0,"🧎🏿‍♀️":0,"🧎🏻‍♂️":0,"🧎🏼‍♂️":0,"🧎🏽‍♂️":0,"🧎🏾‍♂️":0,"🧎🏿‍♂️":0,"🧎🏻":0,"🧎🏼":0,"🧎🏽":0,"🧎🏾":0,"🧎🏿":0,"🧏🏻‍♀️":0,"🧏🏼‍♀️":0,"🧏🏽‍♀️":0,"🧏🏾‍♀️":0,"🧏🏿‍♀️":0,"🧏🏻‍♂️":0,"🧏🏼‍♂️":0,"🧏🏽‍♂️":0,"🧏🏾‍♂️":0,"🧏🏿‍♂️":0,"🧏🏻":0,"🧏🏼":0,"🧏🏽":0,"🧏🏾":0,"🧏🏿":0,"🧑🏻‍🌾":0,"🧑🏼‍🌾":0,"🧑🏽‍🌾":0,"🧑🏾‍🌾":0,"🧑🏿‍🌾":0,"🧑🏻‍🍳":0,"🧑🏼‍🍳":0,"🧑🏽‍🍳":0,"🧑🏾‍🍳":0,"🧑🏿‍🍳":0,"🧑🏻‍🎓":0,"🧑🏼‍🎓":0,"🧑🏽‍🎓":0,"🧑🏾‍🎓":0,"🧑🏿‍🎓":0,"🧑🏻‍🎤":0,"🧑🏼‍🎤":0,"🧑🏽‍🎤":0,"🧑🏾‍🎤":0,"🧑🏿‍🎤":0,"🧑🏻‍🎨":0,"🧑🏼‍🎨":0,"🧑🏽‍🎨":0,"🧑🏾‍🎨":0,"🧑🏿‍🎨":0,"🧑🏻‍🏫":0,"🧑🏼‍🏫":0,"🧑🏽‍🏫":0,"🧑🏾‍🏫":0,"🧑🏿‍🏫":0,"🧑🏻‍🏭":0,"🧑🏼‍🏭":0,"🧑🏽‍🏭":0,"🧑🏾‍🏭":0,"🧑🏿‍🏭":0,"🧑🏻‍💻":0,"🧑🏼‍💻":0,"🧑🏽‍💻":0,"🧑🏾‍💻":0,"🧑🏿‍💻":0,"🧑🏻‍💼":0,"🧑🏼‍💼":0,"🧑🏽‍💼":0,"🧑🏾‍💼":0,"🧑🏿‍💼":0,"🧑🏻‍🔧":0,"🧑🏼‍🔧":0,"🧑🏽‍🔧":0,"🧑🏾‍🔧":0,"🧑🏿‍🔧":0,"🧑🏻‍🔬":0,"🧑🏼‍🔬":0,"🧑🏽‍🔬":0,"🧑🏾‍🔬":0,"🧑🏿‍🔬":0,"🧑🏻‍🚀":0,"🧑🏼‍🚀":0,"🧑🏽‍🚀":0,"🧑🏾‍🚀":0,"🧑🏿‍🚀":0,"🧑🏻‍🚒":0,"🧑🏼‍🚒":0,"🧑🏽‍🚒":0,"🧑🏾‍🚒":0,"🧑🏿‍🚒":0,"🧑🏻‍🤝‍🧑🏻":0,"🧑🏻‍🤝‍🧑🏼":0,"🧑🏻‍🤝‍🧑🏽":0,"🧑🏻‍🤝‍🧑🏾":0,"🧑🏻‍🤝‍🧑🏿":0,"🧑🏼‍🤝‍🧑🏻":0,"🧑🏼‍🤝‍🧑🏼":0,"🧑🏼‍🤝‍🧑🏽":0,"🧑🏼‍🤝‍🧑🏾":0,"🧑🏼‍🤝‍🧑🏿":0,"🧑🏽‍🤝‍🧑🏻":0,"🧑🏽‍🤝‍🧑🏼":0,"🧑🏽‍🤝‍🧑🏽":0,"🧑🏽‍🤝‍🧑🏾":0,"🧑🏽‍🤝‍🧑🏿":0,"🧑🏾‍🤝‍🧑🏻":0,"🧑🏾‍🤝‍🧑🏼":0,"🧑🏾‍🤝‍🧑🏽":0,"🧑🏾‍🤝‍🧑🏾":0,"🧑🏾‍🤝‍🧑🏿":0,"🧑🏿‍🤝‍🧑🏻":0,"🧑🏿‍🤝‍🧑🏼":0,"🧑🏿‍🤝‍🧑🏽":0,"🧑🏿‍🤝‍🧑🏾":0,"🧑🏿‍🤝‍🧑🏿":0,"🧑🏻‍🦯":0,"🧑🏼‍🦯":0,"🧑🏽‍🦯":0,"🧑🏾‍🦯":0,"🧑🏿‍🦯":0,"🧑🏻‍🦰":0,"🧑🏼‍🦰":0,"🧑🏽‍🦰":0,"🧑🏾‍🦰":0,"🧑🏿‍🦰":0,"🧑🏻‍🦱":0,"🧑🏼‍🦱":0,"🧑🏽‍🦱":0,"🧑🏾‍🦱":0,"🧑🏿‍🦱":0,"🧑🏻‍🦲":0,"🧑🏼‍🦲":0,"🧑🏽‍🦲":0,"🧑🏾‍🦲":0,"🧑🏿‍🦲":0,"🧑🏻‍🦳":0,"🧑🏼‍🦳":0,"🧑🏽‍🦳":0,"🧑🏾‍🦳":0,"🧑🏿‍🦳":0,"🧑🏻‍🦼":0,"🧑🏼‍🦼":0,"🧑🏽‍🦼":0,"🧑🏾‍🦼":0,"🧑🏿‍🦼":0,"🧑🏻‍🦽":0,"🧑🏼‍🦽":0,"🧑🏽‍🦽":0,"🧑🏾‍🦽":0,"🧑🏿‍🦽":0,"🧑🏻‍⚕️":0,"🧑🏼‍⚕️":0,"🧑🏽‍⚕️":0,"🧑🏾‍⚕️":0,"🧑🏿‍⚕️":0,"🧑🏻‍⚖️":0,"🧑🏼‍⚖️":0,"🧑🏽‍⚖️":0,"🧑🏾‍⚖️":0,"🧑🏿‍⚖️":0,"🧑🏻‍✈️":0,"🧑🏼‍✈️":0,"🧑🏽‍✈️":0,"🧑🏾‍✈️":0,"🧑🏿‍✈️":0,"🧑🏻":0,"🧑🏼":0,"🧑🏽":0,"🧑🏾":0,"🧑🏿":0,"🧒🏻":0,"🧒🏼":0,"🧒🏽":0,"🧒🏾":0,"🧒🏿":0,"🧓🏻":0,"🧓🏼":0,"🧓🏽":0,"🧓🏾":0,"🧓🏿":0,"🧔🏻":0,"🧔🏼":0,"🧔🏽":0,"🧔🏾":0,"🧔🏿":0,"🧕🏻":0,"🧕🏼":0,"🧕🏽":0,"🧕🏾":0,"🧕🏿":0,"🧖🏻‍♀️":0,"🧖🏼‍♀️":0,"🧖🏽‍♀️":0,"🧖🏾‍♀️":0,"🧖🏿‍♀️":0,"🧖🏻‍♂️":0,"🧖🏼‍♂️":0,"🧖🏽‍♂️":0,"🧖🏾‍♂️":0,"🧖🏿‍♂️":0,"🧖🏻":0,"🧖🏼":0,"🧖🏽":0,"🧖🏾":0,"🧖🏿":0,"🧗🏻‍♀️":0,"🧗🏼‍♀️":0,"🧗🏽‍♀️":0,"🧗🏾‍♀️":0,"🧗🏿‍♀️":0,"🧗🏻‍♂️":0,"🧗🏼‍♂️":0,"🧗🏽‍♂️":0,"🧗🏾‍♂️":0,"🧗🏿‍♂️":0,"🧗🏻":0,"🧗🏼":0,"🧗🏽":0,"🧗🏾":0,"🧗🏿":0,"🧘🏻‍♀️":0,"🧘🏼‍♀️":0,"🧘🏽‍♀️":0,"🧘🏾‍♀️":0,"🧘🏿‍♀️":0,"🧘🏻‍♂️":0,"🧘🏼‍♂️":0,"🧘🏽‍♂️":0,"🧘🏾‍♂️":0,"🧘🏿‍♂️":0,"🧘🏻":0,"🧘🏼":0,"🧘🏽":0,"🧘🏾":0,"🧘🏿":0,"🧙🏻‍♀️":0,"🧙🏼‍♀️":0,"🧙🏽‍♀️":0,"🧙🏾‍♀️":0,"🧙🏿‍♀️":0,"🧙🏻‍♂️":0,"🧙🏼‍♂️":0,"🧙🏽‍♂️":0,"🧙🏾‍♂️":0,"🧙🏿‍♂️":0,"🧙🏻":0,"🧙🏼":0,"🧙🏽":0,"🧙🏾":0,"🧙🏿":0,"🧚🏻‍♀️":0,"🧚🏼‍♀️":0,"🧚🏽‍♀️":0,"🧚🏾‍♀️":0,"🧚🏿‍♀️":0,"🧚🏻‍♂️":0,"🧚🏼‍♂️":0,"🧚🏽‍♂️":0,"🧚🏾‍♂️":0,"🧚🏿‍♂️":0,"🧚🏻":0,"🧚🏼":0,"🧚🏽":0,"🧚🏾":0,"🧚🏿":0,"🧛🏻‍♀️":0,"🧛🏼‍♀️":0,"🧛🏽‍♀️":0,"🧛🏾‍♀️":0,"🧛🏿‍♀️":0,"🧛🏻‍♂️":0,"🧛🏼‍♂️":0,"🧛🏽‍♂️":0,"🧛🏾‍♂️":0,"🧛🏿‍♂️":0,"🧛🏻":0,"🧛🏼":0,"🧛🏽":0,"🧛🏾":0,"🧛🏿":0,"🧜🏻‍♀️":0,"🧜🏼‍♀️":0,"🧜🏽‍♀️":0,"🧜🏾‍♀️":0,"🧜🏿‍♀️":0,"🧜🏻‍♂️":0,"🧜🏼‍♂️":0,"🧜🏽‍♂️":0,"🧜🏾‍♂️":0,"🧜🏿‍♂️":0,"🧜🏻":0,"🧜🏼":0,"🧜🏽":0,"🧜🏾":0,"🧜🏿":0,"🧝🏻‍♀️":0,"🧝🏼‍♀️":0,"🧝🏽‍♀️":0,"🧝🏾‍♀️":0,"🧝🏿‍♀️":0,"🧝🏻‍♂️":0,"🧝🏼‍♂️":0,"🧝🏽‍♂️":0,"🧝🏾‍♂️":0,"🧝🏿‍♂️":0,"🧝🏻":0,"🧝🏼":0,"🧝🏽":0,"🧝🏾":0,"🧝🏿":0,"☝🏻":0,"☝🏼":0,"☝🏽":0,"☝🏾":0,"☝🏿":0,"⛹🏻‍♀️":0,"⛹🏼‍♀️":0,"⛹🏽‍♀️":0,"⛹🏾‍♀️":0,"⛹🏿‍♀️":0,"⛹🏻‍♂️":0,"⛹🏼‍♂️":0,"⛹🏽‍♂️":0,"⛹🏾‍♂️":0,"⛹🏿‍♂️":0,"⛹🏻":0,"⛹🏼":0,"⛹🏽":0,"⛹🏾":0,"⛹🏿":0,"✊🏻":0,"✊🏼":0,"✊🏽":0,"✊🏾":0,"✊🏿":0,"✋🏻":0,"✋🏼":0,"✋🏽":0,"✋🏾":0,"✋🏿":0,"✌🏻":0,"✌🏼":0,"✌🏽":0,"✌🏾":0,"✌🏿":0,"✍🏻":0,"✍🏼":0,"✍🏽":0,"✍🏾":0,"✍🏿":0}; export const Countries = [{"phoneCode":"7 840","code":"AB","name":"Abkhazia","pattern":"","emoji":""},{"phoneCode":"93","code":"AF","name":"Afghanistan","pattern":"93 XXX XXX XXX","emoji":"🇦🇫"},{"phoneCode":"358 18","code":"AX","name":"Aland Islands","pattern":"","emoji":"🇦🇽"},{"phoneCode":"355","code":"AL","name":"Albania","pattern":"355 XX XXX XXXX","emoji":"🇦🇱"},{"phoneCode":"213","code":"DZ","name":"Algeria","pattern":"213 XXX XX XX XX","emoji":"🇩🇿"},{"phoneCode":"1 684","code":"AS","name":"American Samoa","pattern":"1684 XXX XXXX","emoji":"🇦🇸"},{"phoneCode":"376","code":"AD","name":"Andorra","pattern":"376 XX XX XX","emoji":"🇦🇩"},{"phoneCode":"244","code":"AO","name":"Angola","pattern":"244 XXX XXX XXX","emoji":"🇦🇴"},{"phoneCode":"1 264","code":"AI","name":"Anguilla","pattern":"1264 XXX XXXX","emoji":"🇦🇮"},{"phoneCode":"1 268","code":"AG","name":"Antigua & Barbuda","pattern":"1268 XXX XXXX","emoji":"🇦🇬"},{"phoneCode":"54","code":"AR","name":"Argentina","pattern":"","emoji":"🇦🇷"},{"phoneCode":"374","code":"AM","name":"Armenia","pattern":"374 XX XXX XXX","emoji":"🇦🇲"},{"phoneCode":"297","code":"AW","name":"Aruba","pattern":"297 XXX XXXX","emoji":"🇦🇼"},{"phoneCode":"247","code":"SH","name":"Ascension","pattern":"290 XX XXX","emoji":"🇸🇭"},{"phoneCode":"61","code":"AU","name":"Australia","pattern":"61 XXX XXX XXX","emoji":"🇦🇺"},{"phoneCode":"672","code":"AU","name":"Australian External Territories","pattern":"61 XXX XXX XXX","emoji":"🇦🇺"},{"phoneCode":"43","code":"AT","name":"Austria","pattern":"","emoji":"🇦🇹"},{"phoneCode":"994","code":"AZ","name":"Azerbaijan","pattern":"994 XX XXX XX XX","emoji":"🇦🇿"},{"phoneCode":"1 242","code":"BS","name":"Bahamas","pattern":"1242 XXX XXXX","emoji":"🇧🇸"},{"phoneCode":"973","code":"BH","name":"Bahrain","pattern":"973 XXXX XXXX","emoji":"🇧🇭"},{"phoneCode":"880","code":"BD","name":"Bangladesh","pattern":"","emoji":"🇧🇩"},{"phoneCode":"1 246","code":"BB","name":"Barbados","pattern":"1246 XXX XXXX","emoji":"🇧🇧"},{"phoneCode":"1 268","code":"AG","name":"Barbuda","pattern":"1268 XXX XXXX","emoji":"🇦🇬"},{"phoneCode":"375","code":"BY","name":"Belarus","pattern":"375 XX XXX XXXX","emoji":"🇧🇾"},{"phoneCode":"32","code":"BE","name":"Belgium","pattern":"32 XXX XX XX XX","emoji":"🇧🇪"},{"phoneCode":"501","code":"BZ","name":"Belize","pattern":"","emoji":"🇧🇿"},{"phoneCode":"229","code":"BJ","name":"Benin","pattern":"229 XX XXX XXX","emoji":"🇧🇯"},{"phoneCode":"1 441","code":"BM","name":"Bermuda","pattern":"1441 XXX XXXX","emoji":"🇧🇲"},{"phoneCode":"975","code":"BT","name":"Bhutan","pattern":"","emoji":"🇧🇹"},{"phoneCode":"591","code":"BO","name":"Bolivia","pattern":"591 X XXX XXXX","emoji":"🇧🇴"},{"phoneCode":"599 7","code":"BQ","name":"Caribbean Netherlands","pattern":"","emoji":"🇧🇶"},{"phoneCode":"387","code":"BA","name":"Bosnia & Herzegovina","pattern":"","emoji":"🇧🇦"},{"phoneCode":"267","code":"BW","name":"Botswana","pattern":"267 XX XXX XXX","emoji":"🇧🇼"},{"phoneCode":"55","code":"BR","name":"Brazil","pattern":"55 XX XXXXX XXXX","emoji":"🇧🇷"},{"phoneCode":"246","code":"IO","name":"British Indian Ocean Territory","pattern":"246 XXX XXXX","emoji":"🇮🇴"},{"phoneCode":"1 284","code":"VG","name":"British Virgin Islands","pattern":"1284 XXX XXXX","emoji":"🇻🇬"},{"phoneCode":"673","code":"BN","name":"Brunei","pattern":"673 XXX XXXX","emoji":"🇧🇳"},{"phoneCode":"359","code":"BG","name":"Bulgaria","pattern":"","emoji":"🇧🇬"},{"phoneCode":"226","code":"BF","name":"Burkina Faso","pattern":"226 XX XX XX XX","emoji":"🇧🇫"},{"phoneCode":"95","code":"MM","name":"Myanmar (Burma)","pattern":"","emoji":"🇲🇲"},{"phoneCode":"257","code":"BI","name":"Burundi","pattern":"257 XX XX XXXX","emoji":"🇧🇮"},{"phoneCode":"855","code":"KH","name":"Cambodia","pattern":"","emoji":"🇰🇭"},{"phoneCode":"237","code":"CM","name":"Cameroon","pattern":"237 XXXX XXXX","emoji":"🇨🇲"},{"phoneCode":"1","code":"CA","name":"Canada","pattern":"1 XXX XXX XXXX","emoji":"🇨🇦"},{"phoneCode":"238","code":"CV","name":"Cape Verde","pattern":"238 XXX XXXX","emoji":"🇨🇻"},{"phoneCode":"1 345","code":"KY","name":"Cayman Islands","pattern":"1345 XXX XXXX","emoji":"🇰🇾"},{"phoneCode":"236","code":"CF","name":"Central African Republic","pattern":"236 XX XX XX XX","emoji":"🇨🇫"},{"phoneCode":"235","code":"TD","name":"Chad","pattern":"235 XX XX XX XX","emoji":"🇹🇩"},{"phoneCode":"56","code":"CL","name":"Chile","pattern":"56 X XXXX XXXX","emoji":"🇨🇱"},{"phoneCode":"86","code":"CN","name":"China","pattern":"86 XXX XXXX XXXX","emoji":"🇨🇳"},{"phoneCode":"61","code":"CX","name":"Christmas Island","pattern":"","emoji":"🇨🇽"},{"phoneCode":"61","code":"CC","name":"Cocos (Keeling) Islands","pattern":"","emoji":"🇨🇨"},{"phoneCode":"57","code":"CO","name":"Colombia","pattern":"57 XXX XXX XXXX","emoji":"🇨🇴"},{"phoneCode":"269","code":"KM","name":"Comoros","pattern":"269 XXX XXXX","emoji":"🇰🇲"},{"phoneCode":"242","code":"CG","name":"Congo - Brazzaville","pattern":"242 XX XXX XXXX","emoji":"🇨🇬"},{"phoneCode":"243","code":"CD","name":"Congo - Kinshasa","pattern":"243 XX XXX XXXX","emoji":"🇨🇩"},{"phoneCode":"682","code":"CK","name":"Cook Islands","pattern":"","emoji":"🇨🇰"},{"phoneCode":"506","code":"CR","name":"Costa Rica","pattern":"","emoji":"🇨🇷"},{"phoneCode":"225","code":"CI","name":"Cote d’Ivoire","pattern":"225 XX XXX XXX","emoji":"🇨🇮"},{"phoneCode":"385","code":"HR","name":"Croatia","pattern":"","emoji":"🇭🇷"},{"phoneCode":"53","code":"CU","name":"Cuba","pattern":"53 XXXX XXXX","emoji":"🇨🇺"},{"phoneCode":"599 9","code":"CW","name":"Curacao","pattern":"","emoji":"🇨🇼"},{"phoneCode":"357","code":"CY","name":"Cyprus","pattern":"357 XXXX XXXX","emoji":"🇨🇾"},{"phoneCode":"420","code":"CZ","name":"Czech Republic","pattern":"","emoji":"🇨🇿"},{"phoneCode":"45","code":"DK","name":"Denmark","pattern":"45 XXXX XXXX","emoji":"🇩🇰"},{"phoneCode":"246","code":"DG","name":"Diego Garcia","pattern":"","emoji":"🇩🇬"},{"phoneCode":"253","code":"DJ","name":"Djibouti","pattern":"253 XX XX XX XX","emoji":"🇩🇯"},{"phoneCode":"1 767","code":"DM","name":"Dominica","pattern":"1767 XXX XXXX","emoji":"🇩🇲"},{"phoneCode":"1 809 and 1 829","code":"DO","name":"Dominican Republic","pattern":"1 XXX XXX XXXX","emoji":"🇩🇴"},{"phoneCode":"670","code":"TL","name":"Timor-Leste","pattern":"","emoji":"🇹🇱"},{"phoneCode":"593","code":"EC","name":"Ecuador","pattern":"","emoji":"🇪🇨"},{"phoneCode":"20","code":"EG","name":"Egypt","pattern":"20 XX XXX XXXX","emoji":"🇪🇬"},{"phoneCode":"503","code":"SV","name":"El Salvador","pattern":"503 XXXX XXXX","emoji":"🇸🇻"},{"phoneCode":"240","code":"GQ","name":"Equatorial Guinea","pattern":"240 XXX XXX XXX","emoji":"🇬🇶"},{"phoneCode":"291","code":"ER","name":"Eritrea","pattern":"291 X XXX XXX","emoji":"🇪🇷"},{"phoneCode":"372","code":"EE","name":"Estonia","pattern":"","emoji":"🇪🇪"},{"phoneCode":"251","code":"ET","name":"Ethiopia","pattern":"251 XX XXX XXXX","emoji":"🇪🇹"},{"phoneCode":"500","code":"FK","name":"Falkland Islands","pattern":"","emoji":"🇫🇰"},{"phoneCode":"298","code":"FO","name":"Faroe Islands","pattern":"298 XXX XXX","emoji":"🇫🇴"},{"phoneCode":"679","code":"FJ","name":"Fiji","pattern":"","emoji":"🇫🇯"},{"phoneCode":"358","code":"FI","name":"Finland","pattern":"","emoji":"🇫🇮"},{"phoneCode":"33","code":"FR","name":"France","pattern":"33 X XX XX XX XX","emoji":"🇫🇷"},{"phoneCode":"594","code":"GF","name":"French Guiana","pattern":"","emoji":"🇬🇫"},{"phoneCode":"689","code":"PF","name":"French Polynesia","pattern":"","emoji":"🇵🇫"},{"phoneCode":"241","code":"GA","name":"Gabon","pattern":"241 X XX XX XX","emoji":"🇬🇦"},{"phoneCode":"220","code":"GM","name":"Gambia","pattern":"220 XXX XXXX","emoji":"🇬🇲"},{"phoneCode":"995","code":"GE","name":"Georgia","pattern":"","emoji":"🇬🇪"},{"phoneCode":"49","code":"DE","name":"Germany","pattern":"49 XXX XXXXXXXX","emoji":"🇩🇪"},{"phoneCode":"233","code":"GH","name":"Ghana","pattern":"","emoji":"🇬🇭"},{"phoneCode":"350","code":"GI","name":"Gibraltar","pattern":"350 XXXX XXXX","emoji":"🇬🇮"},{"phoneCode":"30","code":"GR","name":"Greece","pattern":"30 XX XXXX XXXX","emoji":"🇬🇷"},{"phoneCode":"299","code":"GL","name":"Greenland","pattern":"299 XXX XXX","emoji":"🇬🇱"},{"phoneCode":"1 473","code":"GD","name":"Grenada","pattern":"1473 XXX XXXX","emoji":"🇬🇩"},{"phoneCode":"590","code":"GP","name":"Guadeloupe","pattern":"","emoji":"🇬🇵"},{"phoneCode":"1 671","code":"GU","name":"Guam","pattern":"1671 XXX XXXX","emoji":"🇬🇺"},{"phoneCode":"502","code":"GT","name":"Guatemala","pattern":"502 X XXX XXXX","emoji":"🇬🇹"},{"phoneCode":"44","code":"GG","name":"Guernsey","pattern":"","emoji":"🇬🇬"},{"phoneCode":"224","code":"GN","name":"Guinea","pattern":"224 XXX XXX XXX","emoji":"🇬🇳"},{"phoneCode":"245","code":"GW","name":"Guinea-Bissau","pattern":"245 XXX XXXX","emoji":"🇬🇼"},{"phoneCode":"592","code":"GY","name":"Guyana","pattern":"","emoji":"🇬🇾"},{"phoneCode":"509","code":"HT","name":"Haiti","pattern":"","emoji":"🇭🇹"},{"phoneCode":"504","code":"HN","name":"Honduras","pattern":"504 XXXX XXXX","emoji":"🇭🇳"},{"phoneCode":"852","code":"HK","name":"Hong Kong SAR China","pattern":"","emoji":"🇭🇰"},{"phoneCode":"36","code":"HU","name":"Hungary","pattern":"36 XX XXX XXXX","emoji":"🇭🇺"},{"phoneCode":"354","code":"IS","name":"Iceland","pattern":"354 XXX XXXX","emoji":"🇮🇸"},{"phoneCode":"91","code":"IN","name":"India","pattern":"91 XXXXX XXXXX","emoji":"🇮🇳"},{"phoneCode":"62","code":"ID","name":"Indonesia","pattern":"","emoji":"🇮🇩"},{"phoneCode":"98","code":"IR","name":"Iran","pattern":"98 XXX XXX XXXX","emoji":"🇮🇷"},{"phoneCode":"964","code":"IQ","name":"Iraq","pattern":"964 XXX XXX XXXX","emoji":"🇮🇶"},{"phoneCode":"353","code":"IE","name":"Ireland","pattern":"353 XX XXX XXXX","emoji":"🇮🇪"},{"phoneCode":"972","code":"IL","name":"Israel","pattern":"972 XX XXX XXXX","emoji":"🇮🇱"},{"phoneCode":"39","code":"IT","name":"Italy","pattern":"39 XXX XXX XXXX","emoji":"🇮🇹"},{"phoneCode":"1 876","code":"JM","name":"Jamaica","pattern":"1876 XXX XXXX","emoji":"🇯🇲"},{"phoneCode":"47 79","code":"SJ","name":"Svalbard & Jan Mayen","pattern":"","emoji":"🇸🇯"},{"phoneCode":"81","code":"JP","name":"Japan","pattern":"81 XX XXXX XXXX","emoji":"🇯🇵"},{"phoneCode":"44","code":"JE","name":"Jersey","pattern":"","emoji":"🇯🇪"},{"phoneCode":"962","code":"JO","name":"Jordan","pattern":"962 X XXXX XXXX","emoji":"🇯🇴"},{"phoneCode":"7 7","code":"KZ","name":"Kazakhstan","pattern":"7 XXX XXX XX XX","emoji":"🇰🇿"},{"phoneCode":"254","code":"KE","name":"Kenya","pattern":"254 XXX XXX XXX","emoji":"🇰🇪"},{"phoneCode":"686","code":"KI","name":"Kiribati","pattern":"","emoji":"🇰🇮"},{"phoneCode":"850","code":"KP","name":"North Korea","pattern":"","emoji":"🇰🇵"},{"phoneCode":"82","code":"KR","name":"South Korea","pattern":"","emoji":"🇰🇷"},{"phoneCode":"965","code":"KW","name":"Kuwait","pattern":"965 XXXX XXXX","emoji":"🇰🇼"},{"phoneCode":"996","code":"KG","name":"Kyrgyzstan","pattern":"","emoji":"🇰🇬"},{"phoneCode":"856","code":"LA","name":"Laos","pattern":"","emoji":"🇱🇦"},{"phoneCode":"371","code":"LV","name":"Latvia","pattern":"371 XXX XXXXX","emoji":"🇱🇻"},{"phoneCode":"961","code":"LB","name":"Lebanon","pattern":"","emoji":"🇱🇧"},{"phoneCode":"266","code":"LS","name":"Lesotho","pattern":"266 XX XXX XXX","emoji":"🇱🇸"},{"phoneCode":"231","code":"LR","name":"Liberia","pattern":"","emoji":"🇱🇷"},{"phoneCode":"218","code":"LY","name":"Libya","pattern":"218 XX XXX XXXX","emoji":"🇱🇾"},{"phoneCode":"423","code":"LI","name":"Liechtenstein","pattern":"","emoji":"🇱🇮"},{"phoneCode":"370","code":"LT","name":"Lithuania","pattern":"370 XXX XXXXX","emoji":"🇱🇹"},{"phoneCode":"352","code":"LU","name":"Luxembourg","pattern":"","emoji":"🇱🇺"},{"phoneCode":"853","code":"MO","name":"Macau SAR China","pattern":"","emoji":"🇲🇴"},{"phoneCode":"389","code":"MK","name":"Macedonia","pattern":"","emoji":"🇲🇰"},{"phoneCode":"261","code":"MG","name":"Madagascar","pattern":"261 XX XX XXX XX","emoji":"🇲🇬"},{"phoneCode":"265","code":"MW","name":"Malawi","pattern":"","emoji":"🇲🇼"},{"phoneCode":"60","code":"MM","name":"Malaysia","pattern":"","emoji":"🇲🇲"},{"phoneCode":"960","code":"MV","name":"Maldives","pattern":"","emoji":"🇲🇻"},{"phoneCode":"223","code":"ML","name":"Mali","pattern":"223 XXXX XXXX","emoji":"🇲🇱"},{"phoneCode":"356","code":"MT","name":"Malta","pattern":"356 XX XX XX XX","emoji":"🇲🇹"},{"phoneCode":"692","code":"MH","name":"Marshall Islands","pattern":"","emoji":"🇲🇭"},{"phoneCode":"596","code":"MQ","name":"Martinique","pattern":"","emoji":"🇲🇶"},{"phoneCode":"222","code":"MR","name":"Mauritania","pattern":"222 XXXX XXXX","emoji":"🇲🇷"},{"phoneCode":"230","code":"MU","name":"Mauritius","pattern":"","emoji":"🇲🇺"},{"phoneCode":"262","code":"YT","name":"Mayotte","pattern":"","emoji":"🇾🇹"},{"phoneCode":"52","code":"MX","name":"Mexico","pattern":"","emoji":"🇲🇽"},{"phoneCode":"691","code":"FM","name":"Micronesia","pattern":"","emoji":"🇫🇲"},{"phoneCode":"373","code":"MD","name":"Moldova","pattern":"373 XX XXX XXX","emoji":"🇲🇩"},{"phoneCode":"377","code":"MC","name":"Monaco","pattern":"377 XXXX XXXX","emoji":"🇲🇨"},{"phoneCode":"976","code":"MN","name":"Mongolia","pattern":"","emoji":"🇲🇳"},{"phoneCode":"382","code":"ME","name":"Montenegro","pattern":"","emoji":"🇲🇪"},{"phoneCode":"1 664","code":"MS","name":"Montserrat","pattern":"1664 XXX XXXX","emoji":"🇲🇸"},{"phoneCode":"212","code":"MA","name":"Morocco","pattern":"212 XX XXX XXXX","emoji":"🇲🇦"},{"phoneCode":"258","code":"MZ","name":"Mozambique","pattern":"258 XX XXX XXXX","emoji":"🇲🇿"},{"phoneCode":"264","code":"NA","name":"Namibia","pattern":"264 XX XXX XXXX","emoji":"🇳🇦"},{"phoneCode":"674","code":"NR","name":"Nauru","pattern":"","emoji":"🇳🇷"},{"phoneCode":"977","code":"NP","name":"Nepal","pattern":"","emoji":"🇳🇵"},{"phoneCode":"31","code":"NL","name":"Netherlands","pattern":"31 X XX XX XX XX","emoji":"🇳🇱"},{"phoneCode":"687","code":"NC","name":"New Caledonia","pattern":"","emoji":"🇳🇨"},{"phoneCode":"64","code":"NZ","name":"New Zealand","pattern":"","emoji":"🇳🇿"},{"phoneCode":"505","code":"NI","name":"Nicaragua","pattern":"505 XXXX XXXX","emoji":"🇳🇮"},{"phoneCode":"227","code":"NE","name":"Niger","pattern":"227 XX XX XX XX","emoji":"🇳🇪"},{"phoneCode":"234","code":"NG","name":"Nigeria","pattern":"","emoji":"🇳🇬"},{"phoneCode":"683","code":"NU","name":"Niue","pattern":"","emoji":"🇳🇺"},{"phoneCode":"672","code":"NF","name":"Norfolk Island","pattern":"","emoji":"🇳🇫"},{"phoneCode":"1 670","code":"MP","name":"Northern Mariana Islands","pattern":"1670 XXX XXXX","emoji":"🇲🇵"},{"phoneCode":"47","code":"NO","name":"Norway","pattern":"47 XXXX XXXX","emoji":"🇳🇴"},{"phoneCode":"968","code":"OM","name":"Oman","pattern":"968 XXXX XXXX","emoji":"🇴🇲"},{"phoneCode":"92","code":"PK","name":"Pakistan","pattern":"92 XXX XXX XXXX","emoji":"🇵🇰"},{"phoneCode":"680","code":"PW","name":"Palau","pattern":"","emoji":"🇵🇼"},{"phoneCode":"970","code":"PS","name":"Palestinian Territories","pattern":"970 XXX XX XXXX","emoji":"🇵🇸"},{"phoneCode":"507","code":"PA","name":"Panama","pattern":"507 XXXX XXXX","emoji":"🇵🇦"},{"phoneCode":"675","code":"PG","name":"Papua New Guinea","pattern":"","emoji":"🇵🇬"},{"phoneCode":"595","code":"PY","name":"Paraguay","pattern":"595 XXX XXX XXX","emoji":"🇵🇾"},{"phoneCode":"51","code":"PE","name":"Peru","pattern":"51 XXX XXX XXX","emoji":"🇵🇪"},{"phoneCode":"63","code":"PH","name":"Philippines","pattern":"63 XXX XXX XXXX","emoji":"🇵🇭"},{"phoneCode":"64","code":"PN","name":"Pitcairn Islands","pattern":"","emoji":"🇵🇳"},{"phoneCode":"48","code":"PL","name":"Poland","pattern":"48 XXX XXX XXX","emoji":"🇵🇱"},{"phoneCode":"351","code":"PT","name":"Portugal","pattern":"351 X XXXX XXXX","emoji":"🇵🇹"},{"phoneCode":"1 787 and 1 939","code":"PR","name":"Puerto Rico","pattern":"1 XXX XXX XXXX","emoji":"🇵🇷"},{"phoneCode":"974","code":"QA","name":"Qatar","pattern":"","emoji":"🇶🇦"},{"phoneCode":"262","code":"RE","name":"Reunion","pattern":"262 XXX XXX XXX","emoji":"🇷🇪"},{"phoneCode":"40","code":"RO","name":"Romania","pattern":"40 XXX XXX XXX","emoji":"🇷🇴"},{"phoneCode":"7","code":"RU","name":"Russia","pattern":"7 XXX XXX XX XX","emoji":"🇷🇺"},{"phoneCode":"250","code":"RW","name":"Rwanda","pattern":"250 XXX XXX XXX","emoji":"🇷🇼"},{"phoneCode":"590","code":"BL","name":"St. Barthelemy","pattern":"","emoji":"🇧🇱"},{"phoneCode":"290","code":"SH","name":"St. Helena","pattern":"290 XX XXX","emoji":"🇸🇭"},{"phoneCode":"1 869","code":"KN","name":"St. Kitts & Nevis","pattern":"1869 XXX XXXX","emoji":"🇰🇳"},{"phoneCode":"1 758","code":"LC","name":"St. Lucia","pattern":"1758 XXX XXXX","emoji":"🇱🇨"},{"phoneCode":"590","code":"MF","name":"St. Martin (France)","pattern":"","emoji":"🇲🇫"},{"phoneCode":"508","code":"PM","name":"St. Pierre and Miquelon","pattern":"","emoji":"🇵🇲"},{"phoneCode":"1 784","code":"VC","name":"St. Vincent and the Grenadines","pattern":"1784 XXX XXXX","emoji":"🇻🇨"},{"phoneCode":"685","code":"WS","name":"Samoa","pattern":"","emoji":"🇼🇸"},{"phoneCode":"378","code":"SM","name":"San Marino","pattern":"378 XXX XXX XXXX","emoji":"🇸🇲"},{"phoneCode":"239","code":"ST","name":"São Tome & Principe","pattern":"239 XX XXXXX","emoji":"🇸🇹"},{"phoneCode":"966","code":"SA","name":"Saudi Arabia","pattern":"","emoji":"🇸🇦"},{"phoneCode":"221","code":"SN","name":"Senegal","pattern":"221 XX XXX XXXX","emoji":"🇸🇳"},{"phoneCode":"381","code":"RS","name":"Serbia","pattern":"381 XX XXX XXXX","emoji":"🇷🇸"},{"phoneCode":"248","code":"SC","name":"Seychelles","pattern":"248 X XX XX XX","emoji":"🇸🇨"},{"phoneCode":"232","code":"SL","name":"Sierra Leone","pattern":"232 XX XXX XXX","emoji":"🇸🇱"},{"phoneCode":"65","code":"SG","name":"Singapore","pattern":"65 XXXX XXXX","emoji":"🇸🇬"},{"phoneCode":"599 3","code":"BQ","name":"Sint Eustatius","pattern":"","emoji":"🇧🇶"},{"phoneCode":"1 721","code":"SX","name":"Sint Maarten","pattern":"1721 XXX XXXX","emoji":"🇸🇽"},{"phoneCode":"421","code":"SK","name":"Slovakia","pattern":"","emoji":"🇸🇰"},{"phoneCode":"386","code":"SI","name":"Slovenia","pattern":"","emoji":"🇸🇮"},{"phoneCode":"677","code":"SB","name":"Solomon Islands","pattern":"","emoji":"🇸🇧"},{"phoneCode":"252","code":"SO","name":"Somalia","pattern":"252 XX XXX XXX","emoji":"🇸🇴"},{"phoneCode":"27","code":"ZA","name":"South Africa","pattern":"27 XX XXX XXXX","emoji":"🇿🇦"},{"phoneCode":"500","code":"GS","name":"South Georgia & South Sandwich Islands","pattern":"","emoji":"🇬🇸"},{"phoneCode":"995 34","code":"","name":"South Ossetia","pattern":"","emoji":""},{"phoneCode":"211","code":"SS","name":"South Sudan","pattern":"211 XX XXX XXXX","emoji":"🇸🇸"},{"phoneCode":"34","code":"ES","name":"Spain","pattern":"34 XXX XXX XXX","emoji":"🇪🇸"},{"phoneCode":"94","code":"LK","name":"Sri Lanka","pattern":"94 XX XXX XXXX","emoji":"🇱🇰"},{"phoneCode":"249","code":"SD","name":"Sudan","pattern":"249 XX XXX XXXX","emoji":"🇸🇩"},{"phoneCode":"597","code":"SR","name":"Suriname","pattern":"597 XXX XXXX","emoji":"🇸🇷"},{"phoneCode":"47 79","code":"SJ","name":"Svalbard","pattern":"","emoji":"🇸🇯"},{"phoneCode":"268","code":"SZ","name":"Swaziland","pattern":"268 XXXX XXXX","emoji":"🇸🇿"},{"phoneCode":"46","code":"SE","name":"Sweden","pattern":"46 XX XXX XXXX","emoji":"🇸🇪"},{"phoneCode":"41","code":"CH","name":"Switzerland","pattern":"41 XX XXX XXXX","emoji":"🇨🇭"},{"phoneCode":"963","code":"SY","name":"Syria","pattern":"","emoji":"🇸🇾"},{"phoneCode":"886","code":"TW","name":"Taiwan","pattern":"","emoji":"🇹🇼"},{"phoneCode":"992","code":"TJ","name":"Tajikistan","pattern":"","emoji":"🇹🇯"},{"phoneCode":"255","code":"TZ","name":"Tanzania","pattern":"255 XX XXX XXXX","emoji":"🇹🇿"},{"phoneCode":"66","code":"TH","name":"Thailand","pattern":"66 X XXXX XXXX","emoji":"🇹🇭"},{"phoneCode":"228","code":"TG","name":"Togo","pattern":"228 XX XXX XXX","emoji":"🇹🇬"},{"phoneCode":"690","code":"TK","name":"Tokelau","pattern":"","emoji":"🇹🇰"},{"phoneCode":"676","code":"TO","name":"Tonga","pattern":"","emoji":"🇹🇴"},{"phoneCode":"1 868","code":"TT","name":"Trinidad & Tobago","pattern":"1868 XXX XXXX","emoji":"🇹🇹"},{"phoneCode":"216","code":"TN","name":"Tunisia","pattern":"216 XX XXX XXX","emoji":"🇹🇳"},{"phoneCode":"90","code":"TR","name":"Turkey","pattern":"90 XXX XXX XXXX","emoji":"🇹🇷"},{"phoneCode":"993","code":"TM","name":"Turkmenistan","pattern":"993 XX XXXXXX","emoji":"🇹🇲"},{"phoneCode":"1 649","code":"TC","name":"Turks & Caicos Islands","pattern":"1649 XXX XXXX","emoji":"🇹🇨"},{"phoneCode":"688","code":"TV","name":"Tuvalu","pattern":"","emoji":"🇹🇻"},{"phoneCode":"256","code":"UG","name":"Uganda","pattern":"256 XX XXX XXXX","emoji":"🇺🇬"},{"phoneCode":"380","code":"UA","name":"Ukraine","pattern":"380 XX XXX XX XX","emoji":"🇺🇦"},{"phoneCode":"971","code":"AE","name":"United Arab Emirates","pattern":"971 XX XXX XXXX","emoji":"🇦🇪"},{"phoneCode":"44","code":"GB","name":"United Kingdom","pattern":"44 XXXX XXXXXX","emoji":"🇬🇧"},{"phoneCode":"1","code":"US","name":"United States","pattern":"1 XXX XXX XXXX","emoji":"🇺🇸"},{"phoneCode":"598","code":"UY","name":"Uruguay","pattern":"598 XXXX XXXX","emoji":"🇺🇾"},{"phoneCode":"1 340","code":"VI","name":"U.S. Virgin Islands","pattern":"1340 XXX XXXX","emoji":"🇻🇮"},{"phoneCode":"998","code":"UZ","name":"Uzbekistan","pattern":"998 XX XXXXXXX","emoji":"🇺🇿"},{"phoneCode":"678","code":"VU","name":"Vanuatu","pattern":"","emoji":"🇻🇺"},{"phoneCode":"58","code":"VE","name":"Venezuela","pattern":"58 XXX XXX XXXX","emoji":"🇻🇪"},{"phoneCode":"39 06 698","code":"VA","name":"Vatican City","pattern":"","emoji":"🇻🇦"},{"phoneCode":"84","code":"VN","name":"Vietnam","pattern":"","emoji":"🇻🇳"},{"phoneCode":"681","code":"WF","name":"Wallis & Futuna","pattern":"","emoji":"🇼🇫"},{"phoneCode":"967","code":"YE","name":"Yemen","pattern":"967 XXX XXX XXX","emoji":"🇾🇪"},{"phoneCode":"260","code":"ZM","name":"Zambia","pattern":"260 XX XXX XXXX","emoji":"🇿🇲"},{"phoneCode":"255","code":"","name":"Zanzibar","pattern":"","emoji":""},{"phoneCode":"263","code":"ZW","name":"Zimbabwe","pattern":"263 XX XXX XXXX","emoji":"🇿🇼"}]; diff --git a/src/lib/lottieLoader.ts b/src/lib/lottieLoader.ts index d44d778d..4d0522cd 100644 --- a/src/lib/lottieLoader.ts +++ b/src/lib/lottieLoader.ts @@ -15,7 +15,8 @@ type RLottieOptions = { loop?: boolean, width?: number, height?: number, - group?: string + group?: string, + noCache?: true }; export class RLottiePlayer { @@ -96,13 +97,15 @@ export class RLottiePlayer { } } - // проверка на размер уже после скейлинга, сделано для попапа и сайдбарfа, где стикеры 80х80 и 68х68, туда нужно 75% - if(isApple && this.width > 100 && this.height > 100) { - this.cachingDelta = 2; //2 // 50% - } else if(this.width < 100 && this.height < 100) { - this.cachingDelta = Infinity; // 100% - } else { - this.cachingDelta = 4; // 75% + if(!options.noCache) { + // проверка на размер уже после скейлинга, сделано для попапа и сайдбарfа, где стикеры 80х80 и 68х68, туда нужно 75% + if(isApple && this.width > 100 && this.height > 100) { + this.cachingDelta = 2; //2 // 50% + } else if(this.width < 100 && this.height < 100) { + this.cachingDelta = Infinity; // 100% + } else { + this.cachingDelta = 4; // 75% + } } // if(isApple) { @@ -284,6 +287,10 @@ export class RLottiePlayer { } else if(isSafari) { this.sendQuery('renderFrame', frameNo); } else { + if(!this.clamped.length) { // fix detached + this.clamped = new Uint8ClampedArray(this.width * this.height * 4); + } + this.sendQuery('renderFrame', frameNo, this.clamped); } } @@ -471,6 +478,7 @@ class QueryableWorker { } } + //console.log('transfer', transfer); this.worker.postMessage({ 'queryMethod': queryMethod, 'queryMethodArguments': args diff --git a/src/lib/mtproto/networker.ts b/src/lib/mtproto/networker.ts index 3e3a6e46..fccd58a4 100644 --- a/src/lib/mtproto/networker.ts +++ b/src/lib/mtproto/networker.ts @@ -321,6 +321,7 @@ class MTPNetworker { }); } + // тут можно сделать таймаут и выводить дисконнект public pushMessage(message: { msg_id: string, seq_no: number, diff --git a/src/lib/mtproto/transports/websocket.ts b/src/lib/mtproto/transports/websocket.ts index 7010b421..703adad4 100644 --- a/src/lib/mtproto/transports/websocket.ts +++ b/src/lib/mtproto/transports/websocket.ts @@ -55,7 +55,7 @@ export class Obfuscation { this.encNew = new CTR(encKey, encIv); this.decNew = new CTR(decKey, decIv); - initPayload.set(intermediatePacketCodec.obfuscateTag, 56); + initPayload.set(codec.obfuscateTag, 56); const encrypted = this.encode(initPayload); initPayload.set(encrypted.slice(56, 64), 56); @@ -132,10 +132,8 @@ export default class Socket extends MTTransport { constructor(dcID: number, url: string) { super(dcID, url); - this.log = logger(`WS-${dcID}`, LogLevels.log | LogLevels.error); - + this.log = logger(`WS-${dcID}`, LogLevels.log/* | LogLevels.error | LogLevels.debug */); this.log('constructor'); - this.connect(); } @@ -157,10 +155,14 @@ export default class Socket extends MTTransport { handleOpen = () => { this.log('opened'); + this.log.debug('sending init packet'); this.ws.send(this.obfuscation.init(this.codec)); - this.connected = true; - this.releasePending(); + //setTimeout(() => { + this.connected = true; + + this.releasePending(); + //}, 3e3); }; handleClose = (event: CloseEvent) => { @@ -218,6 +220,8 @@ export default class Socket extends MTTransport { send = (body: Uint8Array) => { this.log.debug('-> body length to pending:', body.length); + //return; + if(this.networker) { this.pending.push({body}); this.releasePending(); diff --git a/src/lib/richtextprocessor.js b/src/lib/richtextprocessor.js index 3239e3c0..cfc15ce0 100644 --- a/src/lib/richtextprocessor.js +++ b/src/lib/richtextprocessor.js @@ -84,13 +84,13 @@ var markdownEntities = { '__': 'messageEntityItalic' } function getEmojiSpritesheetCoords(emojiCode) { - let emojiInfo = emojiData[emojiCode.replace(/\ufe0f/g, '')]; + let emojiInfo = emojiData[emojiCode/* .replace(/\ufe0f/g, '') */]; if(emojiInfo === undefined) { //console.error('no emoji by code:', emojiCode, emojiCode && emojiCode.length, new TextEncoder().encode(emojiCode), emojiUnicode(emojiCode)); return null; } - return emojiUnicode(emojiCode); + return emojiUnicode(emojiCode).replace(/(-fe0f|fe0f)/g, ''); } function parseEntities(text, options = {}) { var match; diff --git a/src/lib/utils.js b/src/lib/utils.js index 782d75c2..05879c1c 100644 --- a/src/lib/utils.js +++ b/src/lib/utils.js @@ -143,9 +143,9 @@ export function getRichElementValue (node, lines, line, selNode, selOffset) { export const $rootScope = { $broadcast: (name/* : string */, detail/*? : any */) => { - /* if(name != 'user_update') { + if(name != 'user_update') { console.log(dT(), 'Broadcasting ' + name + ' event, with args:', detail); - } */ + } let myCustomEvent = new CustomEvent(name, {detail}); document.dispatchEvent(myCustomEvent); @@ -463,7 +463,7 @@ export function calcImageInBox (imageW, imageH, boxW, boxH, noZooom) { * @returns {String} The base 16 unicode code. */ export function emojiUnicode(input) { - let pairs = emojiUnicode.raw(input).split(' ').map(val => parseInt(val).toString(16)).filter(p => p != 'fe0f'); + let pairs = emojiUnicode.raw(input).split(' ').map(val => parseInt(val).toString(16))/* .filter(p => p != 'fe0f') */; if(pairs.length && pairs[0].length == 2) pairs[0] = '00' + pairs[0]; return pairs.join('-'); } diff --git a/src/pages/pageAuthCode.ts b/src/pages/pageAuthCode.ts index 55c36252..edf270b0 100644 --- a/src/pages/pageAuthCode.ts +++ b/src/pages/pageAuthCode.ts @@ -8,6 +8,7 @@ import LottieLoader, { RLottiePlayer } from '../lib/lottieLoader'; import apiManager from '../lib/mtproto/mtprotoworker'; import Page from './page'; import { App } from '../lib/mtproto/mtproto_config'; +import { mediaSizes } from '../lib/config'; let authCode: { _: string, // 'auth.sentCode' @@ -235,13 +236,14 @@ let onFirstMount = (): Promise => { }); let imageDiv = page.pageEl.querySelector('.auth-image') as HTMLDivElement; + const size = mediaSizes.isMobile ? 100 : 166; return Promise.all([ LottieLoader.loadAnimationFromURL({ container: imageDiv, loop: true, autoplay: true, - width: 166, - height: 166 + width: size, + height: size }, 'assets/img/TwoFactorSetupMonkeyIdle.tgs').then(animation => { idleAnimation = animation; }), @@ -250,8 +252,8 @@ let onFirstMount = (): Promise => { container: imageDiv, loop: false, autoplay: false, - width: 166, - height: 166 + width: size, + height: size }, 'assets/img/TwoFactorSetupMonkeyTracking.tgs').then(_animation => { animation = _animation; diff --git a/src/pages/pagePassword.ts b/src/pages/pagePassword.ts index c7d95e8c..d11c488f 100644 --- a/src/pages/pagePassword.ts +++ b/src/pages/pagePassword.ts @@ -7,6 +7,7 @@ import LottieLoader, { RLottiePlayer } from '../lib/lottieLoader'; //import passwordManager from '../lib/mtproto/passwordManager'; import apiManager from '../lib/mtproto/mtprotoworker'; import Page from './page'; +import { mediaSizes } from '../lib/config'; let onFirstMount = (): Promise => { let needFrame = 0; @@ -30,21 +31,23 @@ let onFirstMount = (): Promise => { }; toggleVisible.addEventListener('click', function(this, e) { - if(!passwordVisible) { + passwordVisible = !passwordVisible; + + if(passwordVisible) { this.classList.add('tgico-eye2'); passwordInput.setAttribute('type', 'text'); - animation.setDirection(-1); - needFrame = 0; + animation.setDirection(1); + animation.curFrame = 0; + needFrame = 16; animation.play(); } else { this.classList.remove('tgico-eye2'); passwordInput.setAttribute('type', 'password'); - animation.setDirection(1); - needFrame = 49; + animation.setDirection(-1); + animation.curFrame = 16; + needFrame = 0; animation.play(); } - - passwordVisible = !passwordVisible; }); btnNext.addEventListener('click', function(this, e) { @@ -90,14 +93,18 @@ let onFirstMount = (): Promise => { /* passwordInput.addEventListener('input', function(this, e) { }); */ + const size = mediaSizes.isMobile ? 100 : 166; return Promise.all([ LottieLoader.loadAnimationFromURL({ container: page.pageEl.querySelector('.auth-image'), loop: false, autoplay: false, - width: 166, - height: 166 - }, 'assets/img/TwoFactorSetupMonkeyClose.tgs').then(_animation => { + width: size, + height: size, + noCache: true + //}, 'assets/img/TwoFactorSetupMonkeyClose.tgs').then(_animation => { + }, 'assets/img/TwoFactorSetupMonkeyPeek.tgs').then(_animation => { + //return; animation = _animation; animation.addListener('enterFrame', currentFrame => { //console.log('enterFrame', e, needFrame); @@ -110,7 +117,7 @@ let onFirstMount = (): Promise => { }); needFrame = 49; - animation.play(); + //animation.play(); }) ]); }; diff --git a/src/scss/partials/_chatlist.scss b/src/scss/partials/_chatlist.scss index 665dbbe0..869b661b 100644 --- a/src/scss/partials/_chatlist.scss +++ b/src/scss/partials/_chatlist.scss @@ -272,7 +272,7 @@ color: #fff; border-radius: 12px; margin-top: 4px; - margin-right: -2px; + margin-right: -3px; flex: 0 0 auto; } diff --git a/src/scss/partials/_leftSidebar.scss b/src/scss/partials/_leftSidebar.scss index 03e7f4ed..803f39ec 100644 --- a/src/scss/partials/_leftSidebar.scss +++ b/src/scss/partials/_leftSidebar.scss @@ -2,30 +2,55 @@ //display: flex; flex-direction: column; - #chats-container { - max-height: 100%; - overflow: hidden; - position: relative; - - .folders-tabs-scrollable { - position: sticky; - top: 0; - z-index: 1; + .folders-tabs-scrollable { + position: sticky; + top: -1px; + z-index: 1; + background-color: #fff; - .scrollable { - position: relative; - } + .scrollable { + position: relative; + border-bottom: 1px solid #dadce0; } .menu-horizontal { - background: #fff; + border-bottom: none; ul { justify-content: space-between } + + li { + padding: 9px 16px 7px 16px; + display: flex; + justify-content: center; + } + } + + span.unread-count { + margin-left: 5px; + background: #50a2e9; + height: 20px; + border-radius: 12px; + font-weight: 500; + color: white; + line-height: 22px; + margin-top: 3px; + min-width: 20px; + padding: 0 6px; + + &:empty { + display: none; + } } } + #chats-container { + max-height: 100%; + overflow: hidden; + position: relative; + } + .sidebar-slider { height: 100%; } @@ -216,6 +241,11 @@ width: 380px; margin: 0 auto; flex: 0 0 auto; + + @include respond-to(handhelds) { + width: 100%; + padding: 0 16px; + } } .chats-container { @@ -227,6 +257,15 @@ margin-top: 14px; margin-left: 23px; color: #707579; + padding-right: 24px; + } +} + +.edit-folder-container { + .input-wrapper { + width: 380px; + margin: 0 auto; + flex: 0 0 auto; } } @@ -290,6 +329,10 @@ margin-left: 1.438rem; line-height: 1.2; padding-bottom: 1.438rem; + + @include respond-to(handhelds) { + padding-right: 24px; + } } .sidebar-left-h2 { @@ -314,7 +357,7 @@ .sticker-container { width: 86px; height: 86px; - margin: 1px auto 32px; + margin: 1px auto 29px; flex: 0 0 auto; } @@ -328,8 +371,9 @@ .sidebar-left-h2 { color: #707579; font-size: 15px; - padding-top: 7px; - padding-bottom: 15px; + // padding-top: 7px; + // padding-bottom: 15px; + padding: 7px 16px 15px 16px; font-weight: 500; } } @@ -351,22 +395,27 @@ margin-right: 6px; } - .folders-container { - padding: 0 16px; - } + // .folders-container { + // padding: 0 16px; + // } .category { - padding: 7px 0 11px 0; + padding: 7px 16px 11px 16px; display: flex; - padding-bottom: 11px; + //padding-bottom: 11px; justify-content: space-between; cursor: pointer; position: relative; + margin-bottom: 10px; + + p { + height: unset; + } p:last-child { color: #707579; font-size: 14px; - line-height: 1; + line-height: 20px; } .btn-primary { @@ -386,7 +435,8 @@ @include respond-to(handhelds) { .input-wrapper { - width: 328px; + width: 100%; + padding: 0 16px; } .input-field input { @@ -410,6 +460,10 @@ .rp { padding: 8px 3px !important; height: 48px !important; + + @include respond-to(handhelds) { + padding: 8px 12px !important; + } } } @@ -429,6 +483,21 @@ .folder-categories { width: 100%; + + .checkbox { + margin-top: -9px !important;; + right: 0; + position: absolute; + + [type="checkbox"]+span { + padding-left: 38px; + } + + [type="checkbox"]:checked+span:before { + top: 5px; + left: 0px; + } + } } .folder-category-button { @@ -440,6 +509,7 @@ user-select: none; margin-left: 32px; font-size: 16px; + flex: 1 1 auto; } &.blue, &.blue:before { @@ -466,31 +536,64 @@ font-weight: 500; padding: 6px 0 8px 16px; } + .selector { + ul { + li > .rp { + margin: 0 !important; + padding: 7px 12px !important; + height: 62px; + } + + .dialog-avatar { + width: 46px; + height: 46px; + } + + span.user-title { + font-weight: 500; + } + + .user-caption { + padding: 0px 0px 0 14px; + margin-top: -2px; + } + + span.user-last-message { + font-size: 15px; + margin-top: 2px; + } - ul { - li > .rp { - margin: 0 !important; - padding: 7px 12px !important; - height: 62px; - } + .checkbox { + margin-top: 10px; + } - .dialog-avatar { - width: 46px; - height: 46px; + [type="checkbox"]+span { + padding-left: 26px; + } } + } - span.user-title { - font-weight: 500; - } + .checkbox [type="checkbox"]+span:after { + border-radius: 50%; + height: 20px; + width: 20px; + border-color: #dadbdc; + } - .user-caption { - padding: 0px 0px 0 14px; - margin-top: -2px; - } + .checkbox [type="checkbox"]:checked+span:after { + background-color: #4EA4F6; + border: none; + } - span.user-last-message { - font-size: 15px; - margin-top: -1px; - } + .folder-category-button { + cursor: pointer; + } +} + +.search-group-recent { + .search-group__name { + display: flex; + justify-content: space-between; + align-items: center; } } \ No newline at end of file diff --git a/src/scss/partials/_rightSidebar.scss b/src/scss/partials/_rightSidebar.scss index 4ddc1e51..75b6befe 100644 --- a/src/scss/partials/_rightSidebar.scss +++ b/src/scss/partials/_rightSidebar.scss @@ -294,7 +294,7 @@ opacity: 1; transition: opacity .2s ease; - &.thumbnail { + html:not(.is-mac) &.thumbnail { filter: blur(7px); } } diff --git a/src/scss/partials/_selector.scss b/src/scss/partials/_selector.scss index da088f15..822dd3a9 100644 --- a/src/scss/partials/_selector.scss +++ b/src/scss/partials/_selector.scss @@ -24,6 +24,10 @@ position: relative; max-height: inherit; // fix safari } + + avatar-element:before { + font-size: 18px; + } } &-search { diff --git a/src/scss/partials/pages/_pages.scss b/src/scss/partials/pages/_pages.scss index 6a27a94e..b830c6db 100644 --- a/src/scss/partials/pages/_pages.scss +++ b/src/scss/partials/pages/_pages.scss @@ -2,12 +2,27 @@ max-width: 720px; // 360 + 360 / 2 overflow: hidden; + .btn-primary { + @include respond-to(handhelds) { + height: 50px; + } + } + .subtitle { margin: 0; + @include respond-to(handhelds) { + font-size: 14px; + } } .input-wrapper { margin-top: 49px; + + @include respond-to(handhelds) { + margin-top: 41px; + width: 100%; + padding: 0 16px; + } } .tabs-container { @@ -50,6 +65,18 @@ height: auto; } */ } + + .page-password { + .input-wrapper { + @include respond-to(handhelds) { + margin-top: 31px; + } + + .btn-primary { + margin-top: 1rem; + } + } + } } .page-sign, .page-signUp { @@ -85,6 +112,15 @@ } } +.page-signQR { + .auth-image { + @include respond-to(handhelds) { + width: 166px; + height: 166px; + } + } +} + /* .page-signQR { .auth-image { position: relative; @@ -106,5 +142,16 @@ .auth-image { margin-top: 10px; margin-bottom: 14px; + + @include respond-to(handhelds) { + margin-bottom: 24px; + } + + } + + #signUp { + @include respond-to(handhelds) { + margin-top: 100px; + } } } \ No newline at end of file diff --git a/src/scss/partials/popups/_mediaAttacher.scss b/src/scss/partials/popups/_mediaAttacher.scss index 533e2028..36e59c3c 100644 --- a/src/scss/partials/popups/_mediaAttacher.scss +++ b/src/scss/partials/popups/_mediaAttacher.scss @@ -152,4 +152,10 @@ .popup-create-poll.popup-new-media .btn-primary { width: 94px; +} + +.popup-new-media.popup-send-photo { + .popup-header { + padding: 0; + } } \ No newline at end of file diff --git a/src/scss/style.scss b/src/scss/style.scss index 16ae3dfc..d7f978fc 100644 --- a/src/scss/style.scss +++ b/src/scss/style.scss @@ -202,6 +202,11 @@ h4 { //margin: 1.5rem 0 1rem 0; margin: 22px 0 14px; line-height: 110%; + + @include respond-to(handhelds) { + font-size: 20px; + margin: 2px 0 8px; + } } input { @@ -766,7 +771,7 @@ avatar-element { height: 0; width: 0; - border: solid #bdbdbd; + border: solid #707579; border-radius: 1px; border-width: 0 2px 2px 0; display: inline-block; @@ -805,6 +810,10 @@ avatar-element { transition: .2s border-color; position: relative; z-index: 1; + + @include respond-to(handhelds) { + height: 50px; + } /* font-weight: 500; */ /* &:hover { @@ -869,9 +878,13 @@ avatar-element { margin: 1.25rem 0; display: block; text-align: left; - padding: 0 19px; + padding: 0 18px; /* font-weight: 500; */ position: relative; + + @include respond-to(handhelds) { + margin-bottom: 27px; + } } [type="checkbox"] { @@ -1036,6 +1049,11 @@ input:focus, button:focus { width: 166px; height: 166px; margin: 0 auto 18px; + + @include respond-to(handhelds) { + width: 120px; + height: 120px; + } } /* .phone-wrapper { @@ -1053,6 +1071,10 @@ input:focus, button:focus { cursor: pointer; font-size: 1.5rem; + @include respond-to(handhelds) { + margin-top: -14px; + } + html.no-touch &:hover { opacity: 1; }