`;
+} else {
+media_views = `
+
";
+}
+return media_views;
+}
+function timeline_template(status) {
+if (status.reblog === null) {
+if (
+status.account.id !== JSON.parse(localStorage.getItem("what_to_follow_0")).id &
+status.account.id !== JSON.parse(localStorage.getItem("what_to_follow_1")).id &
+status.account.id !== JSON.parse(localStorage.getItem("what_to_follow_2")).id &
+status.account.id !== current_id
+) {
+localStorage.setItem("what_to_follow_"+String(Math.floor(Math.random()*3)), JSON.stringify(status.account) );
+}
+const status_account_link= getRelativeURL(status.account.url, status.account.id),
+status_datetime= getRelativeDatetime(Date.now(), getConversionedDate(null, status.created_at)),
+status_attr_datetime = getConversionedDate(null, status.created_at);
+let alart_text= "",
+article_option= "",
+toot_reblogs_count= "",
+toot_favourites_count = "",
+media_views = "";
+if ( status.spoiler_text ) {
+alart_text = "
"+status.spoiler_text+" SHOW MORE ",
+article_option = "content_warning";
+}
+if (status.reblogs_count) {
+toot_reblogs_count = status.reblogs_count;
+}
+if (status.favourites_count) {
+toot_favourites_count = status.favourites_count;
+}
+if ( status.media_attachments.length ) {
+media_views = mediaattachments_template(status);
+}
+const html=(`
+
+
+
+
+
+
+
+
+
+
+${alart_text}
+
+${status.content}
+
+${media_views}
+
+
+
+
+ `);
+return $(html)
+} else {
+if (
+status.reblog.account.id !== JSON.parse(localStorage.getItem("what_to_follow_0")).id &
+status.reblog.account.id !== JSON.parse(localStorage.getItem("what_to_follow_1")).id &
+status.reblog.account.id !== JSON.parse(localStorage.getItem("what_to_follow_2")).id &
+status.account.id!== current_id
+) {
+localStorage.setItem("what_to_follow_" + String(Math.floor(Math.random()*3)), JSON.stringify(status.reblog.account));
+}
+const status_datetime= getRelativeDatetime(Date.now(), getConversionedDate(null, status.reblog.created_at)),
+status_attr_datetime = getConversionedDate(null, status.reblog.created_at),
+status_reblog_account_link = getRelativeURL(status.reblog.account.url, status.reblog.account.id),
+status_account_link= getRelativeURL(status.account.url, status.account.id);
+let alart_text= "",
+article_option= "",
+toot_reblogs_count= "",
+toot_favourites_count = "",
+media_views = "";
+if ( status.reblog.spoiler_text ) {
+alart_text = "
"+status.reblog.spoiler_text+" SHOW MORE ",
+article_option = "content_warning";
+}
+if (status.reblog.reblogs_count) {
+toot_reblogs_count = status.reblog.reblogs_count;
+}
+if (status.reblog.favourites_count) {
+toot_favourites_count = status.reblog.favourites_count;
+}
+if ( status.reblog.media_attachments.length ) {
+media_views = mediaattachments_template(status.reblog);
+}
+const html = (`
+
+
+
+
+
+
+
+
+
+
+
+${alart_text}
+
+${status.reblog.content}
+
+${media_views}
+
+
+
+
+ `);
+return $(html)
+}
+}
+function notifications_template(NotificationObj) {
+const notice_author_link = getRelativeURL(NotificationObj.account.url, NotificationObj.account.id);
+if ( NotificationObj.type === 'favourite' | NotificationObj.type === 'reblog' ) {
+const toot_author_link = getRelativeURL(NotificationObj.status.account.url, NotificationObj.status.account.id),
+toot_datetime= getRelativeDatetime(Date.now(), getConversionedDate(null, NotificationObj.status.created_at)),
+toot_attr_datetime = getConversionedDate(null, NotificationObj.status.created_at);
+if( NotificationObj.type=='favourite' ){
+const html = (`
+
+
+
+
+
+
+${NotificationObj.status.content}
+
+
+
+
+ `);
+return $(html);
+} else if ( NotificationObj.type === 'reblog' ) {
+const sid= NotificationObj.status.id,
+html = (`
+
+
+
+
+
+
+${NotificationObj.status.content}
+
+
+
+
+ `);
+return $(html);
+}
+} else if ( NotificationObj.type === 'mention' ) {
+const toot_author_link = getRelativeURL(NotificationObj.status.account.url, NotificationObj.status.account.id),
+toot_datetime= getRelativeDatetime(Date.now(), getConversionedDate(null, NotificationObj.status.created_at)),
+toot_attr_datetime = getConversionedDate(null, NotificationObj.status.created_at);
+let alart_text= "",
+article_option= "",
+toot_reblogs_count= "",
+toot_favourites_count = "",
+media_views = "";
+if (NotificationObj.status.spoiler_text) {
+alart_text = '
'+NotificationObj.status.spoiler_text+' SHOW MORE ',
+article_option = 'content_warning';
+}
+if (NotificationObj.status.reblogs_count) {
+toot_reblogs_count = NotificationObj.status.reblogs_count;
+}
+if (NotificationObj.status.favourites_count) {
+toot_favourites_count = NotificationObj.status.favourites_count;
+}
+if (NotificationObj.status.media_attachments.length) {
+media_views = mediaattachments_template(NotificationObj.status);
+}
+const html=(`
+
+
+
+
+
+
+
+
+
+
+${alart_text}
+
+${NotificationObj.status.content}
+
+${media_views}
+
+
+
+
+ `);
+return $(html);
+} else {
+const html=(`
+
+
+ `);
+return $(html);
+}
+}
+function follows_template(AccountObj) {
+const array = AccountObj.url.split('/'),
+profile_link = '/'+array[array.length-1]+'@'+array[array.length-2]+'?mid='+AccountObj.id+'&';
+const html = (`
+
+
+
+
+
+
+
+
+Follow
+
+
+
+
+
`);
+return $(html)
+}
+function status_template(status, class_options) {
+if ( status.reblog === null ) {
+const status_account_link= getRelativeURL(status.account.url, status.account.id),
+status_datetime= getConversionedDate(null, status.created_at),
+status_attr_datetime = getConversionedDate(null, status.created_at);
+let alart_text= "",
+article_option= "",
+toot_reblogs_count= "",
+toot_favourites_count = "",
+media_views = "";
+if (status.spoiler_text) {
+alart_text = '
'+status.spoiler_text+' SHOW MORE ',
+article_option = 'content_warning';
+}
+if (status.reblogs_count) {
+toot_reblogs_count = status.reblogs_count;
+}
+if (status.favourites_count) {
+toot_favourites_count = status.favourites_count;
+}
+if (status.media_attachments.length) {
+media_views = mediaattachments_template(status);
+}
+const html=(`
+
+
+
+
+
+${alart_text}
+
+${status.content}
+
+${media_views}
+
+${status_datetime}
+
+
+
+
+
`);
+history.pushState(null, null, getRelativeURL(status.account.url, status.account.id, '/status/'+status.id));
+return $(html)
+} else {
+const status_datetime= getConversionedDate(null, status.reblog.created_at),
+status_attr_datetime = getConversionedDate(null, status.reblog.created_at),
+status_reblog_account_link = getRelativeURL(status.reblog.account.url, status.reblog.account.id),
+status_account_link= getRelativeURL(status.reblog.account.url, status.reblog.account.id);
+let alart_text= "",
+article_option= "",
+toot_reblogs_count= "",
+toot_favourites_count = "",
+media_views = "";
+if (status.spoiler_text) {
+alart_text = '
'+status.reblog.spoiler_text+' SHOW MORE ',
+article_option = 'content_warning';
+}
+if (status.reblog.reblogs_count) {
+toot_reblogs_count = status.reblog.reblogs_count;
+}
+if (status.reblog.favourites_count) {
+toot_favourites_count = status.reblog.favourites_count;
+}
+if(status.reblog.media_attachments.length){
+media_views = mediaattachments_template(status.reblog);
+}
+const html=(`
+
+
+
+
+
+${alart_text}
+
+${status.reblog.content}
+
+${media_views}
+
+${status_datetime}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+`);
+history.pushState(null, null, getRelativeURL(status.reblog.account.url, status.reblog.id, '/status/'+status.reblog.id));
+return $(html)
+}
+}
+function media_template(status, mediaURL) {
+if ( !status ) {
+const html = (`
+
`);
+return $(html)
+} else {
+const status_template = timeline_template(status).html(),
+html = (`
+
`);
+return $(html)
+}
+}
+function context_template(status, class_options) {
+if ( status.reblog === null ) {
+const status_account_link= getRelativeURL(status.account.url, status.account.id),
+status_datetime= getRelativeDatetime(Date.now(), getConversionedDate(null, status.created_at)),
+status_attr_datetime = getConversionedDate(null, status.created_at);
+let alart_text= "",
+article_option= "",
+toot_reblogs_count= "",
+toot_favourites_count = "",
+media_views = "";
+if ( status.spoiler_text ) {
+alart_text = '
'+status.spoiler_text+' SHOW MORE ',
+article_option = 'content_warning';
+}
+if (status.reblogs_count) {
+toot_reblogs_count = status.reblogs_count;
+}
+if (status.favourites_count) {
+toot_favourites_count = status.favourites_count;
+}
+if( status.media_attachments.length) {
+media_views = mediaattachments_template(status);
+}
+const html=(`
+
+
+
+
+
+
+
+
+${alart_text}
+
+${status.content}
+
+${media_views}
+
+
+
+
+
`);
+return $(html)
+} else {
+const status_datetime= getRelativeDatetime(Date.now(), getConversionedDate(null, status.reblog.created_at)),
+status_attr_datetime = getConversionedDate(null, status.reblog.created_at),
+status_reblog_account_link = getRelativeURL(status.reblog.account.url, status.reblog.account.id),
+status_account_link= getRelativeURL(status.account.url, status.account.id);
+let alart_text= "",
+article_option= "",
+toot_reblogs_count= "",
+toot_favourites_count = "",
+media_views = "";
+if ( status.spoiler_text ) {
+alart_text = '
'+status.reblog.spoiler_text+' SHOW MORE ',
+article_option = 'content_warning';
+}
+if (status.reblog.reblogs_count) {
+toot_reblogs_count = status.reblog.reblogs_count;
+}
+if (status.reblog.favourites_count) {
+toot_favourites_count = status.reblog.favourites_count;
+}
+if (status.reblog.media_attachments.length) {
+media_views = mediaattachments_template(status.reblog);
+}
+const html=(`
+
+
+
+
+
+
+
+
+
+${alart_text}
+
+${status.reblog.content}
+
+${media_views}
+
+
+
+
+
`);
+return $(html)
+}
+}
+function setTimeline(level,load_options) {
+let isSyncing = true;
+if ( load_options === undefined ) {
+var load_options = [];
+}
+api.get(level, load_options, function(statuses) {
+let reply_sources = {};
+for ( let i in statuses ) {
+timeline_template(statuses[i]).appendTo("#js-timeline");
+if (statuses[i].in_reply_to_id && level === "timelines/home" | level === "timelines/public" ) {
+if (!reply_sources[statuses[i].in_reply_to_id] & !$(".toot_entry[sid='"+statuses[i].in_reply_to_id+"']").length ) {
+reply_sources[statuses[i].in_reply_to_id] = statuses[i].id;
+api.get('statuses/'+statuses[i].in_reply_to_id, function(in_reply_statuses) {
+$("#js-timeline .toot_entry[sid='"+reply_sources[in_reply_statuses.id]+"']").before(context_template(in_reply_statuses, 'ancestors_status default_padding'));
+replace_emoji();
+});
+}
+}
+};
+links = getLinkFromXHRHeader(responce_headers);
+replaceInternalLink();
+replace_emoji();
+if (!statuses.length) {
+$('#js-timeline_footer > i').css({"display":"none"});
+}
+isSyncing = false;
+});
+$(window).scroll(function () {
+if ( $(window).scrollTop()+window.innerHeight >= $(document).height()-700 ) {
+if (!isSyncing) {
+isSyncing = true;
+load_options.unshift( {name:"max_id",data:links['next'].match(/max_id=(.+)&?/)[1]} );
+api.get(level, load_options, function(statuses) {
+if (statuses.length) {
+let reply_sources = {};
+for ( let i in statuses ) {
+timeline_template(statuses[i]).appendTo("#js-timeline");
+if (statuses[i].in_reply_to_id && level === "timelines/home" | level === "timelines/public" ) {
+if (!reply_sources[statuses[i].in_reply_to_id] & !$(".toot_entry[sid='"+statuses[i].in_reply_to_id+"']").length) {
+reply_sources[statuses[i].in_reply_to_id] = statuses[i].id;
+api.get('statuses/'+statuses[i].in_reply_to_id, function(in_reply_statuses) {
+$("#js-timeline .toot_entry[sid='"+reply_sources[in_reply_statuses.id]+"']").before(context_template(in_reply_statuses, 'ancestors_status default_padding'));
+replace_emoji();
+});
+}
+}
+};
+links = getLinkFromXHRHeader(responce_headers);
+replaceInternalLink();
+replace_emoji();
+isSyncing = false;
+} else {
+$('.timeline_footer > i').css({"display":"none"});
+$('.timeline_footer').append('
');
+isSyncing = true;
+}
+});
+load_options.shift();
+};
+};
+});
+$(function() {
+if ( level === "timelines/home" ) {
+var streamscope = "user",
+scope = "home";
+} else if ( level === "timelines/public" & load_options.length) {
+var streamscope = "public:local",
+scope = "local";
+} else if ( level === "timelines/public" & !load_options.length) {
+var streamscope = "public",
+scope = "federated";
+}
+let statuses = [];
+const original_title = $('title').text();
+api.stream(streamscope, function(userstream) {
+if (userstream.event === "update") {
+const streaming_option = localStorage.getItem("setting_post_stream");
+if ( streaming_option === "manual" ) {
+if ( !$('.toot_entry[sid="'+userstream.payload.id+'"]').length ) {
+$('#js-stream_update').css({'display':'block','height':'auto','padding':'10px'});
+statuses.unshift(userstream.payload);
+$('#js-stream_update > button > span').text(statuses.length);
+$('title').text("("+statuses.length+") "+original_title);
+$('#header .header_nav_list .'+scope+'_badge').removeClass('invisible');
+}
+} else if ( streaming_option === "auto" ) {
+if ( !$('.toot_entry[sid="'+userstream.payload.id+'"]').length ) {
+timeline_template(userstream.payload).prependTo("#js-timeline");
+replaceInternalLink();
+replace_emoji();
+if ( level === "timelines/home" | level === "timelines/public" ) {
+if (userstream.payload.in_reply_to_id & !$(".toot_entry[sid='"+userstream.in_reply_to_id+"']").length) {
+let reply_source = userstream.payload.id;
+api.get('statuses/'+userstream.payload.in_reply_to_id, function(in_reply_statuses) {
+$("#js-timeline .toot_entry[sid='"+reply_source+"']").before(context_template(in_reply_statuses, 'ancestors_status default_padding'));
+replaceInternalLink();
+replace_emoji();
+});
+}
+}
+}
+}
+}
+});
+$(document).on('click','#js-stream_update', function(e) {
+$('#header .header_nav_list .'+scope+'_badge').addClass('invisible');
+$('#js-stream_update').css({'display':'none','height':'0','padding':'0px'});
+statuses.reverse();
+for ( let i in statuses ) {
+timeline_template(statuses[i]).prependTo("#js-timeline");
+replace_emoji();
+if ( level === "timelines/home" | level === "timelines/public" ) {
+if (statuses[i].in_reply_to_id) {
+const reply_source = statuses[i].id;
+api.get('statuses/'+statuses[i].in_reply_to_id, function(in_reply_statuses) {
+$("#js-timeline .toot_entry[sid='"+reply_source+"']").before(context_template(in_reply_statuses, 'ancestors_status default_padding'));
+replace_emoji();
+});
+}
+}
+$('title').text(original_title);
+};
+statuses = [];
+});
+});
+};
+function setOtherTimeline(instance, load_options) {
+let isSyncing = true;
+if ( load_options === undefined ) {
+var load_options = [];
+}
+const loadstatus = instance + "timelines/public"
+api.getOther(loadstatus, load_options, function(statuses) {
+let reply_sources = {};
+for ( let i in statuses ) {
+timeline_template(statuses[i]).appendTo("#js-timeline");
+if (statuses[i].in_reply_to_id ) {
+if (!reply_sources[statuses[i].in_reply_to_id]) {
+reply_sources[statuses[i].in_reply_to_id] = statuses[i].id;
+api.getOther(instance + 'statuses/'+statuses[i].in_reply_to_id, function(in_reply_statuses) {
+$("#js-timeline .toot_entry[sid='"+reply_sources[in_reply_statuses.id]+"']").before(context_template(in_reply_statuses, 'ancestors_status default_padding'));
+replace_emoji();
+});
+}
+}
+};
+$('.toot_entry .toot_footer').addClass('invisible');
+links = getLinkFromXHRHeader(responce_headers);
+replaceInternalLink();
+replace_emoji();
+if (!statuses.length) {
+$('#js-timeline_footer > i').css({"display":"none"});
+}
+isSyncing = false;
+});
+$(window).scroll(function () {
+if ( $(window).scrollTop()+window.innerHeight >= $(document).height()-700 ) {
+if (!isSyncing) {
+isSyncing = true;
+load_options.unshift( {name:"max_id",data:links['next'].match(/max_id=(.+)&?/)[1]} );
+api.getOther(loadstatus, load_options, function(statuses) {
+if (statuses.length) {
+let reply_sources = {};
+for ( let i in statuses ) {
+timeline_template(statuses[i]).appendTo("#js-timeline");
+if (statuses[i].in_reply_to_id ) {
+if (!reply_sources[statuses[i].in_reply_to_id]) {
+reply_sources[statuses[i].in_reply_to_id] = statuses[i].id;
+api.getOther(instance+'statuses/'+statuses[i].in_reply_to_id, function(in_reply_statuses) {
+$("#js-timeline .toot_entry[sid='"+reply_sources[in_reply_statuses.id]+"']").before(context_template(in_reply_statuses, 'ancestors_status default_padding'));
+replace_emoji();
+});
+}
+}
+};
+$('.toot_entry .toot_footer').addClass('invisible');
+links = getLinkFromXHRHeader(responce_headers);
+replaceInternalLink();
+replace_emoji();
+isSyncing = false;
+} else {
+$('.timeline_footer > i').css({"display":"none"});
+$('.timeline_footer').append('
');
+isSyncing = true;
+}
+});
+load_options.shift();
+};
+};
+});
+};
+function setNotifications(load_options) {
+let isSyncing = true;
+if (load_options === undefined) {
+var load_options = [];
+}
+api.get('notifications', load_options, function(NotificationObj) {
+for (let i in NotificationObj) {
+notifications_template(NotificationObj[i]).appendTo("#js-timeline");
+};
+links = getLinkFromXHRHeader(responce_headers);
+replaceInternalLink();
+replace_emoji();
+if (!NotificationObj.length) {
+$('#js-timeline_footer > i').css({"display":"none"});
+}
+isSyncing = false;
+});
+$(window).scroll(function () {
+if($(window).scrollTop() + window.innerHeight >= $(document).height()-700) {
+if( !isSyncing ){
+isSyncing = true;
+load_options.unshift( {name:"max_id",data:links['next'].match(/max_id=(.+)&?/)[1]} );
+api.get('notifications', load_options, function(NotificationObj) {
+if (NotificationObj.length) {
+for (let i in NotificationObj) {
+notifications_template(NotificationObj[i]).appendTo("#js-timeline");
+};
+links = getLinkFromXHRHeader(responce_headers);
+replaceInternalLink();
+replace_emoji();
+isSyncing = false;
+} else {
+$('.timeline_footer > i').css({"display":"none"});
+$('.timeline_footer').append('
');
+isSyncing = true;
+}
+});
+load_options.shift();
+};
+};
+});
+api.stream("user", function(userstream) {
+const original_title = $('title').text();
+if (userstream.event === "notification") {
+const streaming_option = localStorage.getItem("setting_post_stream");
+if ( streaming_option === "manual" ) {
+} else if ( streaming_option === "auto" ) {
+notifications_template(userstream.payload).prependTo("#js-timeline");
+replaceInternalLink();
+replace_emoji();
+}
+}
+});
+}
+function setFollows(mid, param, load_options) {
+let isSyncing = true,
+followsList = [];
+api.get('accounts/'+mid+'/'+param, load_options, function(follows) {
+
+for (let i in follows) {
+follows_template(follows[i]).appendTo("#js-follows_profile");
+followsList.unshift(follows[i].id);
+};
+api.getArray('accounts/relationships', [{name:'id', data:followsList}], function(RelationshipsObj) {
+for ( let i in RelationshipsObj ) {
+if ( RelationshipsObj[i].following ) {
+const button = $('#js-follows_profile .follow_button[mid="'+RelationshipsObj[i].id+'"]');
+button.removeClass("follow_button");
+button.addClass("following_button");
+button.text('Following');
+}
+}
+});
+links = getLinkFromXHRHeader(responce_headers);
+replace_emoji();
+$("#js-follows_footer > i").css({"display":"none"});
+isSyncing = false;
+});
+$(window).scroll(function () {
+if ($(window).scrollTop() + window.innerHeight >= $(document).height()-700) {
+if( !isSyncing ){
+isSyncing = true;
+load_options.unshift( {name:"max_id",data:links['next'].match(/max_id=(.+)&?/)[1]} );
+api.get('accounts/'+mid+'/'+param, load_options, function(follows) {
+let followsList = [];
+if (follows.length) {
+for(let i in follows) {
+follows_template(follows[i]).appendTo("#js-follows_profile");
+followsList.unshift(follows[i].id);
+};
+api.getArray('accounts/relationships', [{name:'id', data:followsList}], function(RelationshipsObj) {
+for ( let i in RelationshipsObj ) {
+if ( RelationshipsObj[i].following ) {
+const button = $('#js-follows_profile .follow_button[mid="'+RelationshipsObj[i].id+'"]');
+button.removeClass("follow_button");
+button.addClass("following_button");
+button.text('Following');
+}
+}
+});
+links = getLinkFromXHRHeader(responce_headers);
+replace_emoji();
+isSyncing = false;
+} else {
+isSyncing = true;
+}
+});
+load_options.shift();
+};
+};
+});
+};
+function setUserSearch(query) {
+api.get('search', [{name:'q',data:query},{name:'resolve',data:'true'}], function(search) {
+for(let i in search.accounts) {
+follows_template(search.accounts[i]).appendTo("#js-follows_profile");;
+}
+$("#js-follows_footer > i").css({"display":"none"});
+replace_emoji();
+});
+};
+function setAccount(AccountObj) {
+$("#js_header_image").attr('src', AccountObj.header);
+$("#js_profile_image").attr('src', AccountObj.avatar);
+$("#js_toots_count").text(AccountObj.statuses_count);
+$("#js_following_count").text(AccountObj.following_count);
+$("#js_followers_count").text(AccountObj.followers_count);
+$("#js_profile_displayname").text(AccountObj.display_name);
+$("#js_profile_username").text(AccountObj.acct);
+$("#js_profile_bio").html(AccountObj.note);
+if( AccountObj.id === current_id ) {
+$(`
+
+Edit profile
+ `).appendTo('.profile_button_box');
+$(`
+FAVOURITES
+Show
+ `).appendTo("#js-profile_nav_favourites");
+} else {
+api.get('accounts/relationships', [{name:'id', data:String(AccountObj.id)}], function(RelationshipObj) {
+if (RelationshipObj[0].followed_by) {
+$('#main .profile_username .profile_followed_by').removeClass('invisible');
+}
+if (RelationshipObj[0].blocking) {
+$(`
+Blocking
+ `).appendTo('.profile_button_box');
+} else if (RelationshipObj[0].muting) {
+$(`
+Muting
+ `).appendTo('.profile_button_box');
+} else if (RelationshipObj[0].requested) {
+$(`
+
+Requested
+ `).appendTo('.profile_button_box');
+} else if(RelationshipObj[0].following){
+$(`
+Following
+ `).appendTo('.profile_button_box');
+} else {
+$(`
+
+Follow
+ `).appendTo('.profile_button_box');
+}
+});
+};
+replace_emoji();
+}
+function setRecentImages(mid) {
+api.get("accounts/"+mid+"/statuses", [{name:'only_media',data:'true'},{name:'limit',data:'6'}], function(statuses) {
+if ( statuses.length ) {
+$('#js_profile_recent_images span').text(`${statuses[0].account.statuses_count} Photos and toots`);
+$('#js_profile_recent_images a').attr('href', $("#media_link").attr('href'));
+for ( i in statuses ) {
+$(`
`).appendTo('#js_profile_recent_images_box');
+};
+}
+});
+};
+function badges_update(){
+let current_count = Number(localStorage.getItem("notification_count"));
+if ( current_count ) {
+$('#header .header_nav_list .notification_badge').removeClass('invisible');
+$('#header .header_nav_list .notification_badge').text( current_count );
+}
+api.stream("user", function(userstream) {
+if (userstream.event === "update" & location.pathname !== "/" ) {
+$('#header .header_nav_list .home_badge').removeClass('invisible');
+} else if (userstream.event === "notification" & location.pathname !== "/notifications") {
+current_count += 1;
+localStorage.setItem("notification_count", current_count );
+$('#header .header_nav_list .notification_badge').text( current_count );
+if ( $('#header .header_nav_list .notification_badge').hasClass('invisible') ) {
+$('#header .header_nav_list .notification_badge').removeClass('invisible')
+}
+}
+});
+}
+function setOverlayStatus(sid) {
+if ( !window.getSelection().toString() ) {
+$("#js-overlay_content .temporary_object").empty();
+$('#js-overlay_content_wrap').addClass('view');
+$('#js-overlay_content_wrap').addClass('black_05');
+api.get('statuses/'+sid+'/', function(status) {
+$('
').appendTo("#js-overlay_content .temporary_object");
+status_template(status, 'main_status').appendTo('#js-overlay_content .toot_detail_wrap');
+replaceInternalLink();
+replace_emoji();
+api.get('statuses/'+sid+'/context', function(status) {
+if (status.ancestors.length) {
+status.ancestors.reverse();
+for ( let i in status.ancestors ) {
+context_template(status.ancestors[i], 'ancestors_status').prependTo("#js-overlay_content .temporary_object .toot_detail_wrap");
+}
+}
+if (status.descendants.length) {
+for ( let i in status.descendants) {
+context_template(status.descendants[i], 'descendants_status').appendTo("#js-overlay_content .temporary_object .toot_detail_wrap");
+}
+}
+replaceInternalLink();
+replace_emoji();
+});
+});
+}
+}
+$(function() {
+$(document).on('click','.toot_entry.ancestors_status, .toot_entry.descendants_status', function(e) {
+$("#js-overlay_content .temporary_object").empty();
+});
+$(document).on('click','.toot_entry', function(e) {
+setOverlayStatus($(this).attr('sid'));
+});
+})
+function setOverlayMedia(sid,url) {
+$("#js-overlay_content .temporary_object").empty();
+$('#js-overlay_content_wrap').addClass('view');
+$('#js-overlay_content_wrap').addClass('black_08');
+$('#js-overlay_content .temporary_object').addClass('visible');
+api.get("statuses/"+sid, function(status) {
+if ( !status.reblog ) {
+media_template(status, url).appendTo("#js-overlay_content .temporary_object");
+replaceInternalLink();
+replace_emoji();
+} else {
+media_template(status.reblog, url).appendTo("#js-overlay_content .temporary_object");
+replaceInternalLink();
+replace_emoji();
+}
+});
+}
+$(function() {
+$(document).on('click','.media_attachment[otype="image"]', function(e) {
+e.stopPropagation();
+setOverlayMedia($(this).attr('sid'),$(this).attr('url'));
+$('.media_detail .toot_entry .media_views').addClass('invisible');
+});
+})
+function setOverlayMediaWithoutStatus(url) {
+$("#js-overlay_content .temporary_object").empty();
+$('#js-overlay_content_wrap').addClass('view');
+$('#js-overlay_content_wrap').addClass('black_05');
+media_template(null, url).appendTo("#js-overlay_content .temporary_object");
+}
+$(function() {
+$(document).on('click','img[mediaaccess="true"]', function(e) {
+e.stopPropagation();
+setOverlayMediaWithoutStatus($(this).attr('src'));
+});
+})
+$(function() {
+$(document).on('click', '#creat_status', function(e) {
+$('.overlay_status').removeClass('invisible');
+$("#js-overlay_content_wrap .temporary_object").empty();
+$('#js-overlay_content_wrap').addClass('view');
+$('#js-overlay_content_wrap').addClass('black_08');
+$('#overlay_status_form .status_textarea textarea').addClass('focus');
+$('.overlay_status .submit_status_label').addClass('active_submit_button');
+$('#overlay_status_form .status_textarea textarea').focus()
+$('#overlay_status_form input[name="privacy_option"]').val([localStorage.getItem("setting_post_privacy")]);
+$('#overlay_status_form .expand_privacy_menu_button > i').attr('class', "fa " + localStorage.getItem("setting_post_privacy"));
+});
+$(document).on('change keyup','#overlay_status_form textarea, #overlay_status_form .status_spoiler', function(e) {
+if (
+e.keyCode !== 224 &
+e.keyCode !== 17&
+e.keyCode !== undefined
+) {
+const textCount = $('#overlay_status_form textarea').val().length + $('#overlay_status_form .status_spoiler').val().length;
+let textLen = ( 500 - textCount );
+if ( textLen <= -1 ) {
+$('#overlay_status_form .character_count').addClass('red');
+$('#overlay_status_form').addClass('ready');
+} else if ( textLen === 500 ) {
+$('#overlay_status_form').addClass('ready');
+} else {
+$('#overlay_status_form .character_count').removeClass('red');
+$('#overlay_status_form').removeClass('ready');
+}
+$(this).val(replaced_emoji_return($(this).val()));
+$('#overlay_status_form .character_count').text(textLen);
+}
+});
+$(document).on('click','#overlay_status_form .status_CW', function(e) {
+$('#overlay_status_form .status_spoiler').toggleClass('invisible');
+});
+$(document).on('click','#overlay_status_form .expand_privacy_menu_button', function(e) {
+$('#overlay_status_form .expand_privacy_menu').removeClass('invisible');
+});
+$(document).on('click','#overlay_status_form .status_privacy.select_privacy', function(e) {
+e.stopPropagation();
+$('#overlay_status_form .expand_privacy_menu_button > i').attr('class', $(this).attr('privacyicon'));
+$('#overlay_status_form .expand_privacy_menu').addClass('invisible');
+});
+$(document).on('change','#overlay_status_media_atta', function(e) {
+$('#overlay_status_form .media_attachments_preview_area').empty();
+$('#overlay_status_form .status_textarea .media_attachments_preview_area').removeClass('invisible');
+for ( let i = 0, f; f = e.target.files[i]; i++ ) {
+let reader= new FileReader();
+reader.readAsDataURL(f);
+reader.onloadend = (function() {
+return function (e) {
+const html = (`
`);
+$(html).appendTo('#overlay_status_form .media_attachments_preview_area');
+}
+})(f);
+}
+});
+$(document).on('click','#overlay_status_form .status_NSFW', function(e) {
+$('#overlay_status_form .media_attachments_preview_area').toggleClass('nsfw');
+});
+$(document).on('click','#overlay_status_form .submit_status_label', function(e) {
+$('#overlay_status_form').addClass('ready');
+$('#overlay_status_form .status_textarea').addClass('disallow_select');
+$('#overlay_status_form .character_count').html('
');
+const form = document.forms.overlay_status_form;
+if ( !$('#overlay_status_media_atta')[0].files.length ) {
+const params = {
+status : form.status_textarea.value,
+sensitive: form.status_nsfw.checked,
+spoiler_text : form.status_spoiler.value,
+visibility : form.privacy_option.value
+}
+api.post("statuses", params, function (data) {
+$('#overlay_status_form .media_attachments_preview_area').empty();
+$('#overlay_status_form .status_spoiler').addClass('invisible');
+$('#overlay_status_form .status_textarea .media_attachments_preview_area').addClass('invisible');
+form.reset();
+$('#overlay_status_form').removeClass('ready');
+$('#overlay_status_form .status_textarea').removeClass('disallow_select');
+$('#overlay_status_form .character_count').html('500');
+$('.overlay_status .submit_status_label').removeClass('active_submit_button');
+$('.overlay_status').addClass('invisible');
+$('#js-overlay_content_wrap').removeClass('view');
+$('#js-overlay_content_wrap').removeClass('black_05');
+putMessage('Your Toot was posted!');
+});
+} else {
+const dummy_form= $('
').append($('#overlay_status_media_atta')),
+files = dummy_form[0][0].files,
+filesLen= files.length -1;
+let media_array = [];
+$("#overlay_status_form .status_bottom").append($('
'));
+for (let i=0; i
i').attr('class', $(this).attr('privacyicon'));
+$('#header_status_form .expand_privacy_menu').addClass('invisible');
+});
+$(document).on('click','#header_status_form', function(e) {
+if(!$('#header_status_form .status_textarea textarea').hasClass('focus')) {
+$('#header_status_form input[name="privacy_option"]').val([localStorage.getItem("setting_post_privacy")]);
+$('#header_status_form .expand_privacy_menu_button > i').attr('class', "fa " + localStorage.getItem("setting_post_privacy"));
+$('#header_status_form .status_textarea textarea').addClass('focus');
+$('#header_status_form .status_bottom').removeClass('invisible');
+$('#header_status_form .submit_status_label').addClass('active_submit_button');
+}
+});
+$(document).on('change','#header_status_media_atta', function(e) {
+$('#header_status_form .media_attachments_preview_area').empty();
+$('#header_status_form .status_textarea .media_attachments_preview_area').removeClass('invisible');
+for ( let i = 0, f; f = e.target.files[i]; i++ ) {
+let reader= new FileReader();
+reader.readAsDataURL(f);
+reader.onloadend = (function() {
+return function (e) {
+const html = (``);
+$(html).appendTo('#header_status_form .media_attachments_preview_area');
+}
+})(f);
+}
+});
+$(document).on('click','#header_status_form .status_NSFW', function(e) {
+$('#header_status_form .media_attachments_preview_area').toggleClass('nsfw');
+});
+$(document).on('click','#header_status_form .submit_status_label', function(e) {
+$('#header_status_form').addClass('ready');
+$('#header_status_form .status_textarea').addClass('disallow_select');
+$('#header_status_form .character_count').html(' ');
+const form = document.forms.header_status_form;
+if ( !$('#header_status_media_atta')[0].files.length ) {
+const params = {
+status : form.status_textarea.value,
+sensitive: form.status_nsfw.checked,
+spoiler_text : form.status_spoiler.value,
+visibility : form.privacy_option.value
+}
+api.post("statuses", params, function (data) {
+$('#header_status_form .media_attachments_preview_area').empty();
+$('#header_status_form .status_spoiler').addClass('invisible');
+$('#header_status_form .status_textarea .media_attachments_preview_area').addClass('invisible');
+form.reset();
+$('#header_status_form').removeClass('ready');
+$('#header_status_form .status_textarea').removeClass('disallow_select');
+$('#header_status_form .character_count').html('500');
+});
+} else {
+const dummy_form = $(' ').append($('#header_status_media_atta')),
+files= dummy_form[0][0].files,
+filesLen = files.length -1;
+let media_array = [];
+$("#header_status_form .status_bottom").append($(''));
+for (let i=0; i i').attr('class', "fa " + localStorage.getItem("setting_post_privacy"));
+}
+});
+$(document).on('change keyup','#reply_status_form textarea, #reply_status_form .status_spoiler', function(e) {
+if (
+e.keyCode !== 224 &
+e.keyCode !== 17&
+e.keyCode !== undefined
+) {
+const textCount = $('#reply_status_form textarea').val().length + $('#reply_status_form .status_spoiler').val().length;
+let textLen = ( 500 - textCount );
+if ( textLen <= -1 ) {
+$('#reply_status_form .character_count').addClass('red');
+$('#reply_status_form').addClass('ready');
+} else if ( textLen === 500 ) {
+$('#reply_status_form').addClass('ready');
+} else {
+$('#reply_status_form .character_count').removeClass('red');
+$('#reply_status_form').removeClass('ready');
+}
+$(this).val(replaced_emoji_return($(this).val()));
+$('#reply_status_form .character_count').text(textLen);
+}
+});
+$(document).on('click','#reply_status_form .status_CW', function(e) {
+$('#reply_status_form .status_spoiler').toggleClass('invisible');
+});
+$(document).on('click','#reply_status_form .expand_privacy_menu_button', function(e) {
+$('#reply_status_form .expand_privacy_menu').removeClass('invisible');
+});
+$(document).on('click','#reply_status_form .status_privacy.select_privacy', function(e) {
+e.stopPropagation();
+$('#reply_status_form .expand_privacy_menu_button > i').attr('class', $(this).attr('privacyicon'));
+$('#reply_status_form .expand_privacy_menu').addClass('invisible');
+});
+$(document).on('change','#reply_status_media_atta', function(e) {
+$('#reply_status_form .media_attachments_preview_area').empty();
+$('#reply_status_form .status_textarea .media_attachments_preview_area').removeClass('invisible');
+for ( let i = 0, f; f = e.target.files[i]; i++ ) {
+let reader= new FileReader();
+reader.readAsDataURL(f);
+reader.onloadend = (function() {
+return function (e) {
+const html = (``);
+$(html).appendTo('#reply_status_form .media_attachments_preview_area');
+}
+})(f);
+}
+});
+$(document).on('click','#reply_status_form .status_NSFW', function(e) {
+$('#reply_status_form .media_attachments_preview_area').toggleClass('nsfw');
+});
+$(document).on('click','#reply_status_form .submit_status_label', function(e) {
+$('#reply_status_form').addClass('ready');
+$('#reply_status_form .status_textarea').addClass('disallow_select');
+$('#reply_status_form .character_count').html(' ');
+let form = document.forms.reply_status_form;
+if ( !$('#reply_status_media_atta')[0].files.length ) {
+const params = {
+status : form.status_textarea.value,
+sensitive: form.status_nsfw.checked,
+spoiler_text : form.status_spoiler.value,
+visibility : form.privacy_option.value,
+in_reply_to_id : $('#reply_status_form').attr('sid')
+}
+api.post("statuses", params, function (data) {
+$('#reply_status_form .media_attachments_preview_area').empty();
+$('#reply_status_form .status_spoiler').addClass('invisible');
+$('#reply_status_form .status_textarea .media_attachments_preview_area').addClass('invisible');
+form.reset();
+$('#reply_status_form').removeClass('ready');
+$('#reply_status_form .status_textarea').removeClass('disallow_select');
+$('#reply_status_form .character_count').html('500');
+$('.reply_status .submit_status_label').removeClass('active_submit_button');
+context_template(data, 'descendants_status').appendTo("#js-overlay_content .temporary_object .toot_detail_wrap");
+replace_emoji();
+putMessage('Your Toot was posted!');
+});
+} else {
+const dummy_form = $(' ').append($('#reply_status_media_atta')),
+files= dummy_form[0][0].files,
+filesLen = files.length -1;
+let media_array = [];
+$('#reply_status_form .status_bottom').append($(' '));
+for (let i=0; i i').attr('class', "fa " + localStorage.getItem("setting_post_privacy"));
+$('#single_reply_status_form').attr('tid',sid);
+$('.single_reply_status .single_reply_status_header span').text("Reply to "+display_name);
+$('#single_reply_status_form textarea').val(acct+" ");
+api.get('statuses/'+sid+'/', function(status) {
+timeline_template(status).appendTo(".single_reply_status .status_preview");
+replace_emoji();
+});
+return false;
+});
+$(document).on('change keyup','#single_reply_status_form textarea, #single_reply_status_form .status_spoiler', function(e) {
+if (
+e.keyCode !== 224 &
+e.keyCode !== 17&
+e.keyCode !== undefined
+) {
+const textCount = $('#single_reply_status_form textarea').val().length + $('#single_reply_status_form .status_spoiler').val().length;
+let textLen = ( 500 - textCount );
+if ( textLen <= -1 ) {
+$('#single_reply_status_form .character_count').addClass('red');
+$('#single_reply_status_form').addClass('ready');
+} else if ( textLen === 500 ) {
+$('#single_reply_status_form').addClass('ready');
+} else {
+$('#single_reply_status_form .character_count').removeClass('red');
+$('#single_reply_status_form').removeClass('ready');
+}
+$(this).val(replaced_emoji_return($(this).val()));
+$('#single_reply_status_form .character_count').text(textLen);
+}
+});
+$(document).on('click','#single_reply_status_form .status_CW', function(e) {
+$('#single_reply_status_form .status_spoiler').toggleClass('invisible');
+});
+$(document).on('click','#single_reply_status_form .expand_privacy_menu_button', function(e) {
+$('#single_reply_status_form .expand_privacy_menu').removeClass('invisible');
+});
+$(document).on('click','#single_reply_status_form .status_privacy.select_privacy', function(e) {
+e.stopPropagation();
+$('#single_reply_status_form .expand_privacy_menu_button > i').attr('class', $(this).attr('privacyicon'));
+$('#single_reply_status_form .expand_privacy_menu').addClass('invisible');
+});
+$(document).on('change','#single_reply_status_media_atta', function(e) {
+$('#single_reply_status_form .media_attachments_preview_area').empty();
+$('#single_reply_status_form .status_textarea .media_attachments_preview_area').removeClass('invisible');
+for ( let i = 0, f; f = e.target.files[i]; i++ ) {
+let reader= new FileReader();
+reader.readAsDataURL(f);
+reader.onloadend = (function() {
+return function (e) {
+const html = (``);
+$(html).appendTo('#single_reply_status_form .media_attachments_preview_area');
+}
+})(f);
+}
+});
+$(document).on('click','#single_reply_status_form .status_NSFW', function(e) {
+$('#single_reply_status_form .media_attachments_preview_area').toggleClass('nsfw');
+});
+$(document).on('click','#single_reply_status_form .submit_status_label', function(e) {
+$('#single_reply_status_form').addClass('ready');
+$('#single_reply_status_form .status_textarea').addClass('disallow_select');
+$('#single_reply_status_form .character_count').html(' ');
+let form = document.forms.single_reply_status_form;
+if ( !$('#single_reply_status_media_atta')[0].files.length ) {
+const params = {
+status : form.status_textarea.value,
+sensitive: form.status_nsfw.checked,
+spoiler_text : form.status_spoiler.value,
+visibility : form.privacy_option.value,
+in_reply_to_id : $('#single_reply_status_form').attr('tid')
+}
+api.post("statuses", params, function (data) {
+$('#single_reply_status_form .media_attachments_preview_area').empty();
+$('#single_reply_status_form .status_spoiler').addClass('invisible');
+$('#single_reply_status_form .status_textarea .media_attachments_preview_area').addClass('invisible');
+form.reset();
+$('#single_reply_status_form').removeClass('ready');
+$('#single_reply_status_form .status_textarea').removeClass('disallow_select');
+$('#single_reply_status_form .character_count').html('500');
+$('.single_reply_status .submit_status_label').removeClass('active_submit_button');
+$('.single_reply_status').addClass('invisible');
+$('#js-overlay_content_wrap').removeClass('view');
+$('#js-overlay_content_wrap').removeClass('black_05');
+$("#js-overlay_content_wrap .single_reply_status .status_preview").empty();
+putMessage('Your Reply was posted!');
+});
+} else {
+const dummy_form= $(' ').append($('#single_reply_status_media_atta')),
+files = dummy_form[0][0].files,
+filesLen= files.length -1;
+let media_array = [];
+$("#single_reply_status_form .status_bottom").append($(' '));
+for (let i=0; i *, .parmanent_object > *', function(e) {
+e.stopPropagation();
+});
+$(document).on('click','#js-overlay_content_wrap', function(e) {
+$(this).removeClass('view');
+$("#js-overlay_content_wrap .temporary_object").empty();
+$("#js-overlay_content_wrap .single_reply_status .status_preview").empty();
+$('#js-overlay_content_wrap .overlay_status').addClass('invisible');
+$('#js-overlay_content_wrap .single_reply_status').addClass('invisible');
+$('#js-overlay_content_wrap .overlay_copy_link').addClass('invisible');
+$('#js-overlay_content .temporary_object, #js-overlay_content .parmanent_object').removeClass('visible');
+$('#js-overlay_content_wrap .overlay_status.submit_status_label').removeClass('active_submit_button');
+$('#js-overlay_content_wrap .single_reply_status .submit_status_label').removeClass('active_submit_button');
+$('#js-overlay_content_wrap #reply_status_form .submit_status_label').removeClass('active_submit_button');
+$('#js-overlay_content_wrap #header_status_form.submit_status_label').removeClass('active_submit_button');
+$('#js-overlay_content_wrap').removeClass('black_05');
+$('#js-overlay_content_wrap').removeClass('black_08');
+if ( current_file === "/user" ) {
+history.pushState(null, null, "/"+location.pathname.split("/")[1]+location.search);
+} else {
+history.pushState(null, null, current_file);
+}
+});
+})
+$(function () {
+$(document).on('click','.side_widget.stream_options .form_title button', function(e) {
+$(this).parent().next('.pulldown_form').toggleClass('view');
+if ( $(this).text() === "SHOW" ) {
+$(this).text("HIDE");
+} else {
+$(this).text("SHOW");
+}
+const html_post_steraming = $(`
+Manual update
+Auto update
+ `)
+const html_post_privacy = $(`
+Public
+Unlisted
+Followers-only
+Direct
+ `)
+const html_local_instance = $(` `)
+const html_search_filter = $(`
+All instances
+Local only
+ `)
+html_post_steraming.val(localStorage.getItem("setting_post_stream"));
+html_post_privacy.val(localStorage.getItem("setting_post_privacy"));
+html_local_instance.val(localStorage.getItem("setting_local_instance"));
+html_search_filter.val(localStorage.getItem("setting_search_filter"));
+$('.post_steraming_wrap').html(html_post_steraming)
+$('.post_privacy_wrap').html(html_post_privacy);
+$('.local_instance_wrap').html(html_local_instance);
+$('.search_filter_wrap').html(html_search_filter);
+return false;
+});
+$(document).on('change',".post_steraming_wrap select[name='post_steraming']", function(e) {
+localStorage.setItem("setting_post_stream", $(this).val() );
+putMessage("Changed setting to "+$(this).val() );
+});
+$(document).on('change', ".post_privacy_wrap select[name='post_privacy']", function(e) {
+localStorage.setItem("setting_post_privacy", $(this).val() );
+putMessage("Changed setting to "+$(this).val() );
+});
+$(document).on('change',".search_filter_wrap select[name='search_filter']", function(e) {
+localStorage.setItem("setting_search_filter", $(this).val() );
+putMessage("Changed setting to "+$(this).val() );
+});
+$(document).on('focus',".local_instance_wrap input[name='local_instance']", function(e) {
+$(this).attr("placeholder","https://"+current_instance);
+});
+$(document).on('change',".local_instance_wrap input[name='local_instance']", function(e) {
+if ( $(this).val() ) {
+localStorage.setItem("setting_local_instance", $(this).val() );
+} else {
+localStorage.setItem("setting_local_instance", "default" );
+}
+putMessage("Changed setting to "+$(this).val() );
+});
+})
+$(function() {
+shortcut.add("n",function() {
+$("#creat_status").click();
+},{
+ "disable_in_input":true,
+});
+shortcut.add("/",function() {
+$("#search_form").focus();
+},{
+"disable_in_input":true,
+'keycode':191
+});
+shortcut.add("Meta+Enter",function() {
+$(".active_submit_button").click();
+});
+shortcut.add("Ctrl+Enter",function() {
+$(".active_submit_button").click();
+});
+shortcut.add(".",function() {
+$("#js-stream_update").click();
+},{
+ "disable_in_input":true,
+});
+shortcut.add("Shift+h",function() {
+location.href="/home";
+},{
+"disable_in_input":true,
+});
+shortcut.add("Shift+l",function() {
+location.href="/local";
+},{
+"disable_in_input":true,
+});
+shortcut.add("Shift+f",function() {
+location.href="/federated";
+},{
+"disable_in_input":true,
+});
+shortcut.add("Shift+n",function() {
+location.href="/notifications";
+},{
+"disable_in_input":true,
+});
+shortcut.add("Shift+p",function() {
+location.href=current_url;
+},{
+"disable_in_input":true,
+});
+shortcut.add("Shift+v",function() {
+location.href=current_favourites_link;
+},{
+"disable_in_input":true,
+});
+shortcut.add("esc",function() {
+$("#js-overlay_content_wrap").click();
+});
+});
\ No newline at end of file
diff --git a/public_html/assets/js/jquery-cookie/MIT-LICENSE.txt b/assets/js/jquery-cookie/MIT-LICENSE.txt
similarity index 100%
rename from public_html/assets/js/jquery-cookie/MIT-LICENSE.txt
rename to assets/js/jquery-cookie/MIT-LICENSE.txt
diff --git a/assets/js/jquery-cookie/src/jquery.cookie.js b/assets/js/jquery-cookie/src/jquery.cookie.js
new file mode 100644
index 0000000..c8f6260
--- /dev/null
+++ b/assets/js/jquery-cookie/src/jquery.cookie.js
@@ -0,0 +1,78 @@
+/*!
+ * jQuery Cookie Plugin v1.4.1
+ * https://github.com/carhartl/jquery-cookie
+ *
+ * Copyright 2006, 2014 Klaus Hartl
+ * Released under the MIT license
+ */
+(function (factory) {
+if (typeof define === 'function' && define.amd) {
+define(['jquery'], factory);
+} else if (typeof exports === 'object') {
+module.exports = factory(require('jquery'));
+} else {
+factory(jQuery);
+}
+}(function ($) {
+var pluses = /\+/g;
+function encode(s) {
+return config.raw ? s : encodeURIComponent(s);
+}
+function decode(s) {
+return config.raw ? s : decodeURIComponent(s);
+}
+function stringifyCookieValue(value) {
+return encode(config.json ? JSON.stringify(value) : String(value));
+}
+function parseCookieValue(s) {
+if (s.indexOf('"') === 0) {
+s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\');
+}
+try {
+s = decodeURIComponent(s.replace(pluses, ' '));
+return config.json ? JSON.parse(s) : s;
+} catch(e) {}
+}
+function read(s, converter) {
+var value = config.raw ? s : parseCookieValue(s);
+return $.isFunction(converter) ? converter(value) : value;
+}
+var config = $.cookie = function (key, value, options) {
+if (arguments.length > 1 && !$.isFunction(value)) {
+options = $.extend({}, config.defaults, options);
+if (typeof options.expires === 'number') {
+var days = options.expires, t = options.expires = new Date();
+t.setMilliseconds(t.getMilliseconds() + days * 864e+5);
+}
+return (document.cookie = [
+encode(key), '=', stringifyCookieValue(value),
+options.expires ? '; expires=' + options.expires.toUTCString() : '',
+options.path ? '; path=' + options.path : '',
+options.domain ? '; domain=' + options.domain : '',
+options.secure ? '; secure' : ''
+].join(''));
+}
+var result = key ? undefined : {},
+cookies = document.cookie ? document.cookie.split('; ') : [],
+i = 0,
+l = cookies.length;
+for (; i < l; i++) {
+var parts = cookies[i].split('='),
+name = decode(parts.shift()),
+cookie = parts.join('=');
+if (key === name) {
+result = read(cookie, value);
+break;
+}
+if (!key && (cookie = read(cookie)) !== undefined) {
+result[name] = cookie;
+}
+}
+return result;
+};
+config.defaults = {};
+$.removeCookie = function (key, options) {
+$.cookie(key, '', $.extend({}, options, { expires: -1 }));
+return !$.cookie(key);
+};
+}));
\ No newline at end of file
diff --git a/public_html/assets/js/mastodon.js/LICENSE b/assets/js/mastodon.js/LICENSE
similarity index 100%
rename from public_html/assets/js/mastodon.js/LICENSE
rename to assets/js/mastodon.js/LICENSE
diff --git a/assets/js/mastodon.js/mastodon.js b/assets/js/mastodon.js/mastodon.js
new file mode 100644
index 0000000..e609d8e
--- /dev/null
+++ b/assets/js/mastodon.js/mastodon.js
@@ -0,0 +1,207 @@
+// mastodon javascript lib
+// by @kirschn@pleasehug.me 2017
+// no fucking copyright
+// do whatever you want with it
+// but please don't hurt it (and keep this header)
+var MastodonAPI = function(config) {
+var apiBase = config.instance + "/api/v1/";
+return {
+setConfig: function (key, value) {
+config[key] = value;
+},
+getConfig: function(key) {
+return config[key];
+},
+get: function (endpoint) {
+var queryData, callback,
+queryStringAppend = "?";
+if (typeof arguments[1] === "function") {
+queryData = {};
+callback = arguments[1];
+} else {
+queryData = arguments[1];
+callback = arguments[2];
+}
+for (var i in queryData) {
+if (queryData.hasOwnProperty(i)) {
+if (typeof queryData[i] === "string") {
+queryStringAppend += queryData[i] + "&";
+} else if (typeof queryData[i] === "object") {
+queryStringAppend += queryData[i].name + "="+ queryData[i].data + "&";
+}
+}
+}
+$.ajax({
+url: apiBase + endpoint + queryStringAppend,
+type: "GET",
+headers: {"Authorization": "Bearer " + config.api_user_token},
+success: function(data, textStatus, xhr) {
+console.log("Successful GET API request to " +apiBase+endpoint);
+responce_headers = xhr.getAllResponseHeaders();
+callback(data,textStatus);
+},
+error: function(xhr, textStatus, errorThrown) {
+putMessage(`[${xhr.status}] ${xhr.responseJSON['error']}`);
+if ( xhr.status === 401 ) {
+location.href = "/logout"
+}
+}
+});
+},
+getArray: function (endpoint) {
+var queryData, callback,
+queryStringAppend = "?";
+if (typeof arguments[1] === "function") {
+queryData = {};
+callback = arguments[1];
+} else {
+queryData = arguments[1];
+callback = arguments[2];
+}
+for (var i in queryData) {
+if (queryData.hasOwnProperty(i)) {
+if (typeof queryData[i] === "string") {
+queryStringAppend += queryData[i] + "&";
+} else if (typeof queryData[i] === "object") {
+for ( var j in queryData[i].data ){
+queryStringAppend += queryData[i].name + "[]="+ queryData[i].data[j] + "&";
+}
+}
+}
+}
+$.ajax({
+url: apiBase + endpoint + queryStringAppend,
+type: "GET",
+headers: {"Authorization": "Bearer " + config.api_user_token},
+success: function(data, textStatus, xhr) {
+console.log("Successful GET API request to " +apiBase+endpoint);
+responce_headers = xhr.getAllResponseHeaders();
+callback(data,textStatus);
+},
+error: function(xhr, textStatus, errorThrown) {
+putMessage(`[${xhr.status}] ${xhr.responseJSON['error']}`);
+if ( xhr.status === 401 ) {
+location.href = "/logout"
+}
+}
+});
+},
+getOther: function (domainAndEndpoint) {
+var queryData, callback,
+queryStringAppend = "?";
+if (typeof arguments[1] === "function") {
+queryData = {};
+callback = arguments[1];
+} else {
+queryData = arguments[1];
+callback = arguments[2];
+}
+for (var i in queryData) {
+if (queryData.hasOwnProperty(i)) {
+if (typeof queryData[i] === "string") {
+queryStringAppend += queryData[i] + "&";
+} else if (typeof queryData[i] === "object") {
+queryStringAppend += queryData[i].name + "="+ queryData[i].data + "&";
+}
+}
+}
+$.ajax({
+url: domainAndEndpoint + queryStringAppend,
+type: "GET",
+success: function(data, textStatus, xhr) {
+console.log("Successful GET API request to " +domainAndEndpoint);
+responce_headers = xhr.getAllResponseHeaders();
+callback(data,textStatus);
+},
+error: function(xhr, textStatus, errorThrown) {
+putMessage(`[${xhr.status}] ${xhr.responseJSON['error']}`);
+if ( xhr.status === 401 ) {
+location.href = "/logout"
+}
+}
+});
+},
+post: function (endpoint) {
+var postData, callback;
+if (typeof arguments[1] === "function") {
+postData = {};
+callback = arguments[1];
+} else {
+postData = arguments[1];
+callback = arguments[2];
+}
+$.ajax({
+url: apiBase + endpoint,
+type: "POST",
+data: postData,
+headers: {"Authorization": "Bearer " + config.api_user_token},
+success: function(data, textStatus) {
+console.log("Successful POST API request to " +apiBase+endpoint);
+callback(data,textStatus)
+},
+error: function(xhr, textStatus, errorThrown) {
+putMessage(`[${xhr.status}] ${xhr.responseJSON['error']}`);
+if ( xhr.status === 401 ) {
+location.href = "/logout"
+}
+}
+});
+},
+postMedia: function (endpoint) {
+var postData, callback;
+if (typeof arguments[1] === "function") {
+postData = {};
+callback = arguments[1];
+} else {
+postData = arguments[1];
+callback = arguments[2];
+}
+$.ajax({
+url: apiBase + endpoint,
+type: "POST",
+data: postData,
+contentType: false,
+processData: false,
+headers: {"Authorization": "Bearer " + config.api_user_token},
+success: function(data, textStatus) {
+console.log("Successful POST API request to " +apiBase+endpoint);
+callback(data,textStatus)
+},
+error: function(xhr, textStatus, errorThrown) {
+putMessage(`[${xhr.status}] ${xhr.responseJSON['error']}`);
+if ( xhr.status === 401 ) {
+location.href = "/logout"
+}
+}
+});
+},
+delete: function (endpoint, callback) {
+$.ajax({
+url: apiBase + endpoint,
+type: "DELETE",
+headers: {"Authorization": "Bearer " + config.api_user_token},
+success: function(data, textStatus) {
+console.log("Successful DELETE API request to " +apiBase+endpoint);
+callback(data,textStatus)
+},
+error: function(xhr, textStatus, errorThrown) {
+putMessage(`[${xhr.status}] ${xhr.responseJSON['error']}`);
+if ( xhr.status === 401 ) {
+location.href = "/logout"
+}
+}
+});
+},
+stream: function (streamType, onData) {
+var es = new WebSocket("wss://" + apiBase.substr(8)
++"streaming?access_token=" + config.api_user_token + "&stream=" + streamType);
+var listener = function (event) {
+console.log("Got Data from Stream " + streamType);
+event = JSON.parse(event.data);
+event.payload = JSON.parse(event.payload);
+onData(event);
+};
+es.onmessage = listener;
+}
+};
+};
\ No newline at end of file
diff --git a/assets/js/replace_emoji.js b/assets/js/replace_emoji.js
new file mode 100644
index 0000000..ca35b51
--- /dev/null
+++ b/assets/js/replace_emoji.js
@@ -0,0 +1,3473 @@
+const emoji_dict = {":hash:": "#⃣",
+":zero:": "0⃣",
+":one:": "1⃣",
+":two:": "2⃣",
+":three:": "3⃣",
+":four:": "4⃣",
+":five:": "5⃣",
+":six:": "6⃣",
+":seven:": "7⃣",
+":eight:": "8⃣",
+":nine:": "9⃣",
+":copyright:": "©",
+":registered:": "®",
+":bangbang:": "‼",
+":interrobang:": "⁉",
+":tm:": "™",
+":information_source:": "ℹ",
+":left_right_arrow:": "↔",
+":arrow_up_down:": "↕",
+":arrow_upper_left:": "↖",
+":third_place:": "🥉",
+":third_place_medal:": "🥉",
+":arrow_upper_right:": "↗",
+":arrow_lower_right:": "↘",
+":arrow_lower_left:": "↙",
+":second_place:": "🥈",
+":second_place_medal:": "🥈",
+":leftwards_arrow_with_hook:": "↩",
+":arrow_right_hook:": "↪",
+":watch:": "⌚",
+":hourglass:": "⌛",
+":fast_forward:": "⏩",
+":rewind:": "⏪",
+":arrow_double_up:": "⏫",
+":arrow_double_down:": "⏬",
+":alarm_clock:": "⏰",
+":hourglass_flowing_sand:": "⏳",
+":m:": "Ⓜ",
+":black_small_square:": "▪",
+":white_small_square:": "▫",
+":arrow_forward:": "▶",
+":arrow_backward:": "◀",
+":white_medium_square:": "◻",
+":black_medium_square:": "◼",
+":white_medium_small_square:": "◽",
+":black_medium_small_square:": "◾",
+":sunny:": "☀",
+":cloud:": "☁",
+":telephone:": "☎",
+":ballot_box_with_check:": "☑",
+":umbrella:": "☔",
+":coffee:": "☕",
+":point_up:": "☝",
+":relaxed:": "☺",
+":aries:": "♈",
+":first_place:": "🥇",
+":first_place_medal:": "🥇",
+":taurus:": "♉",
+":fencer:": "🤺",
+":fencing:": "🤺",
+":gemini:": "♊",
+":cancer:": "♋",
+":goal:": "🥅",
+":goal_net:": "🥅",
+":leo:": "♌",
+":asterisk_symbol:": "*",
+":virgo:": "♍",
+":handball:": "🤾",
+":libra:": "♎",
+":regional_indicator_z:": "🇿",
+":water_polo:": "🤽",
+":scorpius:": "♏",
+":sagittarius:": "♐",
+":martial_arts_uniform:": "🥋",
+":karate_uniform:": "🥋",
+":capricorn:": "♑",
+":boxing_glove:": "🥊",
+":boxing_gloves:": "🥊",
+":aquarius:": "♒",
+":wrestlers:": "🤼",
+":wrestling:": "🤼",
+":pisces:": "♓",
+":spades:": "♠",
+":clubs:": "♣",
+":hearts:": "♥",
+":diamonds:": "♦",
+":hotsprings:": "♨",
+":recycle:": "♻",
+":juggling:": "🤹",
+":juggler:": "🤹",
+":wheelchair:": "♿",
+":anchor:": "⚓",
+":warning:": "⚠",
+":zap:": "⚡",
+":white_circle:": "⚪",
+":black_circle:": "⚫",
+":soccer:": "⚽",
+":baseball:": "⚾",
+":snowman:": "⛄",
+":partly_sunny:": "⛅",
+":ophiuchus:": "⛎",
+":cartwheel:": "🤸",
+":person_doing_cartwheel:": "🤸",
+":no_entry:": "⛔",
+":church:": "⛪",
+":fountain:": "⛲",
+":canoe:": "🛶",
+":kayak:": "🛶",
+":golf:": "⛳",
+":sailboat:": "⛵",
+":tent:": "⛺",
+":fuelpump:": "⛽",
+":scissors:": "✂",
+":white_check_mark:": "✅",
+":airplane:": "✈",
+":envelope:": "✉",
+":fist:": "✊",
+":raised_hand:": "✋",
+":v:": "✌",
+":pencil2:": "✏",
+":black_nib:": "✒",
+":heavy_check_mark:": "✔",
+":heavy_multiplication_x:": "✖",
+":sparkles:": "✨",
+":eight_spoked_asterisk:": "✳",
+":eight_pointed_black_star:": "✴",
+":snowflake:": "❄",
+":sparkle:": "❇",
+":x:": "❌",
+":negative_squared_cross_mark:": "❎",
+":question:": "❓",
+":grey_question:": "❔",
+":motor_scooter:": "🛵",
+":motorbike:": "🛵",
+":grey_exclamation:": "❕",
+":exclamation:": "❗",
+":heart:": "❤",
+":heavy_plus_sign:": "➕",
+":heavy_minus_sign:": "➖",
+":heavy_division_sign:": "➗",
+":arrow_right:": "➡",
+":curly_loop:": "➰",
+":arrow_heading_up:": "⤴",
+":arrow_heading_down:": "⤵",
+":arrow_left:": "⬅",
+":arrow_up:": "⬆",
+":scooter:": "🛴",
+":arrow_down:": "⬇",
+":black_large_square:": "⬛",
+":white_large_square:": "⬜",
+":star:": "⭐",
+":o:": "⭕",
+":wavy_dash:": "〰",
+":part_alternation_mark:": "〽",
+":congratulations:": "㊗",
+":shopping_cart:": "🛒",
+":shopping_trolley:": "🛒",
+":secret:": "㊙",
+":mahjong:": "🀄",
+":black_joker:": "🃏",
+":a:": "🅰",
+":b:": "🅱",
+":o2:": "🅾",
+":parking:": "🅿",
+":octagonal_sign:": "🛑",
+":stop_sign:": "🛑",
+":ab:": "🆎",
+":cl:": "🆑",
+":regional_indicator_y:": "🇾",
+":cool:": "🆒",
+":free:": "🆓",
+":id:": "🆔",
+":new:": "🆕",
+":ng:": "🆖",
+":ok:": "🆗",
+":sos:": "🆘",
+":spoon:": "🥄",
+":up:": "🆙",
+":vs:": "🆚",
+":flag_cn:": "🇨🇳",
+":cn:": "🇨🇳",
+":flag_de:": "🇩🇪",
+":de:": "🇩🇪",
+":flag_es:": "🇪🇸",
+":es:": "🇪🇸",
+":flag_fr:": "🇫🇷",
+":fr:": "🇫🇷",
+":flag_gb:": "🇬🇧",
+":gb:": "🇬🇧",
+":champagne_glass:": "🥂",
+":clinking_glass:": "🥂",
+":tumbler_glass:": "🥃",
+":whisky:": "🥃",
+":flag_it:": "🇮🇹",
+":it:": "🇮🇹",
+":flag_jp:": "🇯🇵",
+":jp:": "🇯🇵",
+":flag_kr:": "🇰🇷",
+":kr:": "🇰🇷",
+":flag_us:": "🇺🇸",
+":us:": "🇺🇸",
+":flag_ru:": "🇷🇺",
+":ru:": "🇷🇺",
+":koko:": "🈁",
+":sa:": "🈂",
+":u7121:": "🈚",
+":u6307:": "🈯",
+":stuffed_flatbread:": "🥙",
+":stuffed_pita:": "🥙",
+":u7981:": "🈲",
+":u7a7a:": "🈳",
+":u5408:": "🈴",
+":u6e80:": "🈵",
+":u6709:": "🈶",
+":shallow_pan_of_food:": "🥘",
+":paella:": "🥘",
+":u6708:": "🈷",
+":u7533:": "🈸",
+":u5272:": "🈹",
+":salad:": "🥗",
+":green_salad:": "🥗",
+":u55b6:": "🈺",
+":ideograph_advantage:": "🉐",
+":accept:": "🉑",
+":cyclone:": "🌀",
+":french_bread:": "🥖",
+":baguette_bread:": "🥖",
+":foggy:": "🌁",
+":closed_umbrella:": "🌂",
+":night_with_stars:": "🌃",
+":sunrise_over_mountains:": "🌄",
+":sunrise:": "🌅",
+":city_dusk:": "🌆",
+":carrot:": "🥕",
+":city_sunset:": "🌇",
+":city_sunrise:": "🌇",
+":rainbow:": "🌈",
+":potato:": "🥔",
+":bridge_at_night:": "🌉",
+":ocean:": "🌊",
+":volcano:": "🌋",
+":milky_way:": "🌌",
+":earth_asia:": "🌏",
+":new_moon:": "🌑",
+":bacon:": "🥓",
+":first_quarter_moon:": "🌓",
+":waxing_gibbous_moon:": "🌔",
+":full_moon:": "🌕",
+":crescent_moon:": "🌙",
+":first_quarter_moon_with_face:": "🌛",
+":star2:": "🌟",
+":cucumber:": "🥒",
+":stars:": "🌠",
+":chestnut:": "🌰",
+":avocado:": "🥑",
+":seedling:": "🌱",
+":palm_tree:": "🌴",
+":cactus:": "🌵",
+":tulip:": "🌷",
+":cherry_blossom:": "🌸",
+":rose:": "🌹",
+":hibiscus:": "🌺",
+":sunflower:": "🌻",
+":blossom:": "🌼",
+":corn:": "🌽",
+":croissant:": "🥐",
+":ear_of_rice:": "🌾",
+":herb:": "🌿",
+":four_leaf_clover:": "🍀",
+":maple_leaf:": "🍁",
+":fallen_leaf:": "🍂",
+":leaves:": "🍃",
+":mushroom:": "🍄",
+":tomato:": "🍅",
+":eggplant:": "🍆",
+":grapes:": "🍇",
+":melon:": "🍈",
+":watermelon:": "🍉",
+":tangerine:": "🍊",
+":wilted_rose:": "🥀",
+":wilted_flower:": "🥀",
+":banana:": "🍌",
+":pineapple:": "🍍",
+":apple:": "🍎",
+":green_apple:": "🍏",
+":peach:": "🍑",
+":cherries:": "🍒",
+":strawberry:": "🍓",
+":rhino:": "🦏",
+":rhinoceros:": "🦏",
+":hamburger:": "🍔",
+":pizza:": "🍕",
+":meat_on_bone:": "🍖",
+":lizard:": "🦎",
+":poultry_leg:": "🍗",
+":rice_cracker:": "🍘",
+":rice_ball:": "🍙",
+":gorilla:": "🦍",
+":rice:": "🍚",
+":curry:": "🍛",
+":deer:": "🦌",
+":ramen:": "🍜",
+":spaghetti:": "🍝",
+":bread:": "🍞",
+":fries:": "🍟",
+":butterfly:": "🦋",
+":sweet_potato:": "🍠",
+":dango:": "🍡",
+":fox:": "🦊",
+":fox_face:": "🦊",
+":oden:": "🍢",
+":sushi:": "🍣",
+":owl:": "🦉",
+":fried_shrimp:": "🍤",
+":fish_cake:": "🍥",
+":shark:": "🦈",
+":icecream:": "🍦",
+":bat:": "🦇",
+":shaved_ice:": "🍧",
+":regional_indicator_x:": "🇽",
+":ice_cream:": "🍨",
+":duck:": "🦆",
+":doughnut:": "🍩",
+":eagle:": "🦅",
+":cookie:": "🍪",
+":black_heart:": "🖤",
+":chocolate_bar:": "🍫",
+":candy:": "🍬",
+":lollipop:": "🍭",
+":custard:": "🍮",
+":pudding:": "🍮",
+":flan:": "🍮",
+":honey_pot:": "🍯",
+":fingers_crossed:": "🤞",
+":hand_with_index_and_middle_finger_crossed:": "🤞",
+":cake:": "🍰",
+":bento:": "🍱",
+":stew:": "🍲",
+":handshake:": "🤝",
+":shaking_hands:": "🤝",
+":cooking:": "🍳",
+":fork_and_knife:": "🍴",
+":tea:": "🍵",
+":sake:": "🍶",
+":wine_glass:": "🍷",
+":cocktail:": "🍸",
+":tropical_drink:": "🍹",
+":beer:": "🍺",
+":beers:": "🍻",
+":ribbon:": "🎀",
+":gift:": "🎁",
+":birthday:": "🎂",
+":jack_o_lantern:": "🎃",
+":left_facing_fist:": "🤛",
+":left_fist:": "🤛",
+":right_facing_fist:": "🤜",
+":right_fist:": "🤜",
+":christmas_tree:": "🎄",
+":santa:": "🎅",
+":fireworks:": "🎆",
+":raised_back_of_hand:": "🤚",
+":back_of_hand:": "🤚",
+":sparkler:": "🎇",
+":balloon:": "🎈",
+":tada:": "🎉",
+":confetti_ball:": "🎊",
+":tanabata_tree:": "🎋",
+":crossed_flags:": "🎌",
+":call_me:": "🤙",
+":call_me_hand:": "🤙",
+":bamboo:": "🎍",
+":man_dancing:": "🕺",
+":male_dancer:": "🕺",
+":dolls:": "🎎",
+":selfie:": "🤳",
+":flags:": "🎏",
+":pregnant_woman:": "🤰",
+":expecting_woman:": "🤰",
+":wind_chime:": "🎐",
+":face_palm:": "🤦",
+":facepalm:": "🤦",
+":shrug:": "🤷",
+":rice_scene:": "🎑",
+":school_satchel:": "🎒",
+":mortar_board:": "🎓",
+":carousel_horse:": "🎠",
+":ferris_wheel:": "🎡",
+":roller_coaster:": "🎢",
+":fishing_pole_and_fish:": "🎣",
+":microphone:": "🎤",
+":pound_symbol:": "#",
+":movie_camera:": "🎥",
+":cinema:": "🎦",
+":headphones:": "🎧",
+":mrs_claus:": "🤶",
+":mother_christmas:": "🤶",
+":art:": "🎨",
+":man_in_tuxedo:": "🤵",
+":tophat:": "🎩",
+":circus_tent:": "🎪",
+":prince:": "🤴",
+":ticket:": "🎫",
+":clapper:": "🎬",
+":performing_arts:": "🎭",
+":sneezing_face:": "🤧",
+":sneeze:": "🤧",
+":video_game:": "🎮",
+":dart:": "🎯",
+":slot_machine:": "🎰",
+":8ball:": "🎱",
+":game_die:": "🎲",
+":bowling:": "🎳",
+":flower_playing_cards:": "🎴",
+":lying_face:": "🤥",
+":liar:": "🤥",
+":musical_note:": "🎵",
+":notes:": "🎶",
+":saxophone:": "🎷",
+":drooling_face:": "🤤",
+":drool:": "🤤",
+":guitar:": "🎸",
+":musical_keyboard:": "🎹",
+":trumpet:": "🎺",
+":rofl:": "🤣",
+":rolling_on_the_floor_laughing:": "🤣",
+":violin:": "🎻",
+":musical_score:": "🎼",
+":running_shirt_with_sash:": "🎽",
+":nauseated_face:": "🤢",
+":sick:": "🤢",
+":tennis:": "🎾",
+":ski:": "🎿",
+":basketball:": "🏀",
+":checkered_flag:": "🏁",
+":clown:": "🤡",
+":clown_face:": "🤡",
+":snowboarder:": "🏂",
+":runner:": "🏃",
+":surfer:": "🏄",
+":trophy:": "🏆",
+":football:": "🏈",
+":swimmer:": "🏊",
+":house:": "🏠",
+":house_with_garden:": "🏡",
+":office:": "🏢",
+":post_office:": "🏣",
+":hospital:": "🏥",
+":bank:": "🏦",
+":atm:": "🏧",
+":hotel:": "🏨",
+":love_hotel:": "🏩",
+":convenience_store:": "🏪",
+":school:": "🏫",
+":department_store:": "🏬",
+":cowboy:": "🤠",
+":face_with_cowboy_hat:": "🤠",
+":factory:": "🏭",
+":izakaya_lantern:": "🏮",
+":japanese_castle:": "🏯",
+":european_castle:": "🏰",
+":snail:": "🐌",
+":snake:": "🐍",
+":racehorse:": "🐎",
+":sheep:": "🐑",
+":monkey:": "🐒",
+":chicken:": "🐔",
+":boar:": "🐗",
+":elephant:": "🐘",
+":octopus:": "🐙",
+":shell:": "🐚",
+":prince_tone1:": "🤴🏻",
+":bug:": "🐛",
+":ant:": "🐜",
+":bee:": "🐝",
+":beetle:": "🐞",
+":fish:": "🐟",
+":tropical_fish:": "🐠",
+":blowfish:": "🐡",
+":turtle:": "🐢",
+":hatching_chick:": "🐣",
+":baby_chick:": "🐤",
+":hatched_chick:": "🐥",
+":bird:": "🐦",
+":penguin:": "🐧",
+":koala:": "🐨",
+":poodle:": "🐩",
+":camel:": "🐫",
+":dolphin:": "🐬",
+":mouse:": "🐭",
+":cow:": "🐮",
+":tiger:": "🐯",
+":rabbit:": "🐰",
+":cat:": "🐱",
+":dragon_face:": "🐲",
+":whale:": "🐳",
+":horse:": "🐴",
+":monkey_face:": "🐵",
+":dog:": "🐶",
+":pig:": "🐷",
+":frog:": "🐸",
+":hamster:": "🐹",
+":wolf:": "🐺",
+":bear:": "🐻",
+":panda_face:": "🐼",
+":pig_nose:": "🐽",
+":feet:": "🐾",
+":paw_prints:": "🐾",
+":prince_tone2:": "🤴🏼",
+":eyes:": "👀",
+":ear:": "👂",
+":nose:": "👃",
+":lips:": "👄",
+":tongue:": "👅",
+":prince_tone3:": "🤴🏽",
+":point_up_2:": "👆",
+":point_down:": "👇",
+":point_left:": "👈",
+":point_right:": "👉",
+":punch:": "👊",
+":wave:": "👋",
+":ok_hand:": "👌",
+":thumbsup:": "👍",
+":+1:": "👍",
+":thumbup:": "👍",
+":thumbsdown:": "👎",
+":1:": "👎",
+":thumbdown:": "👎",
+":clap:": "👏",
+":open_hands:": "👐",
+":crown:": "👑",
+":womans_hat:": "👒",
+":eyeglasses:": "👓",
+":necktie:": "👔",
+":shirt:": "👕",
+":prince_tone4:": "🤴🏾",
+":jeans:": "👖",
+":dress:": "👗",
+":kimono:": "👘",
+":prince_tone5:": "🤴🏿",
+":bikini:": "👙",
+":womans_clothes:": "👚",
+":purse:": "👛",
+":handbag:": "👜",
+":pouch:": "👝",
+":mans_shoe:": "👞",
+":athletic_shoe:": "👟",
+":high_heel:": "👠",
+":sandal:": "👡",
+":boot:": "👢",
+":footprints:": "👣",
+":bust_in_silhouette:": "👤",
+":mrs_claus_tone1:": "🤶🏻",
+":mother_christmas_tone1:": "🤶🏻",
+":boy:": "👦",
+":girl:": "👧",
+":man:": "👨",
+":woman:": "👩",
+":family:": "👪",
+":couple:": "👫",
+":cop:": "👮",
+":dancers:": "👯",
+":bride_with_veil:": "👰",
+":person_with_blond_hair:": "👱",
+":man_with_gua_pi_mao:": "👲",
+":man_with_turban:": "👳",
+":older_man:": "👴",
+":older_woman:": "👵",
+":grandma:": "👵",
+":baby:": "👶",
+":construction_worker:": "👷",
+":princess:": "👸",
+":japanese_ogre:": "👹",
+":mrs_claus_tone2:": "🤶🏼",
+":mother_christmas_tone2:": "🤶🏼",
+":japanese_goblin:": "👺",
+":ghost:": "👻",
+":angel:": "👼",
+":alien:": "👽",
+":space_invader:": "👾",
+":mrs_claus_tone3:": "🤶🏽",
+":mother_christmas_tone3:": "🤶🏽",
+":imp:": "👿",
+":skull:": "💀",
+":skeleton:": "💀",
+":card_index:": "📇",
+":information_desk_person:": "💁",
+":guardsman:": "💂",
+":dancer:": "💃",
+":lipstick:": "💄",
+":nail_care:": "💅",
+":ledger:": "📒",
+":massage:": "💆",
+":notebook:": "📓",
+":haircut:": "💇",
+":notebook_with_decorative_cover:": "📔",
+":barber:": "💈",
+":closed_book:": "📕",
+":syringe:": "💉",
+":book:": "📖",
+":pill:": "💊",
+":green_book:": "📗",
+":kiss:": "💋",
+":blue_book:": "📘",
+":love_letter:": "💌",
+":orange_book:": "📙",
+":ring:": "💍",
+":books:": "📚",
+":gem:": "💎",
+":mrs_claus_tone4:": "🤶🏾",
+":mother_christmas_tone4:": "🤶🏾",
+":name_badge:": "📛",
+":couplekiss:": "💏",
+":scroll:": "📜",
+":bouquet:": "💐",
+":pencil:": "📝",
+":mrs_claus_tone5:": "🤶🏿",
+":mother_christmas_tone5:": "🤶🏿",
+":couple_with_heart:": "💑",
+":telephone_receiver:": "📞",
+":wedding:": "💒",
+":pager:": "📟",
+":fax:": "📠",
+":heartbeat:": "💓",
+":satellite:": "📡",
+":loudspeaker:": "📢",
+":man_in_tuxedo_tone1:": "🤵🏻",
+":tuxedo_tone1:": "🤵🏻",
+":broken_heart:": "💔",
+":mega:": "📣",
+":outbox_tray:": "📤",
+":two_hearts:": "💕",
+":inbox_tray:": "📥",
+":package:": "📦",
+":man_in_tuxedo_tone2:": "🤵🏼",
+":tuxedo_tone2:": "🤵🏼",
+":sparkling_heart:": "💖",
+":email:": "📧",
+":incoming_envelope:": "📨",
+":heartpulse:": "💗",
+":man_in_tuxedo_tone3:": "🤵🏽",
+":tuxedo_tone3:": "🤵🏽",
+":envelope_with_arrow:": "📩",
+":mailbox_closed:": "📪",
+":cupid:": "💘",
+":mailbox:": "📫",
+":man_in_tuxedo_tone4:": "🤵🏾",
+":tuxedo_tone4:": "🤵🏾",
+":postbox:": "📮",
+":blue_heart:": "💙",
+":newspaper:": "📰",
+":man_in_tuxedo_tone5:": "🤵🏿",
+":tuxedo_tone5:": "🤵🏿",
+":iphone:": "📱",
+":green_heart:": "💚",
+":shrug_tone1:": "🤷🏻",
+":calling:": "📲",
+":vibration_mode:": "📳",
+":yellow_heart:": "💛",
+":shrug_tone2:": "🤷🏼",
+":mobile_phone_off:": "📴",
+":signal_strength:": "📶",
+":shrug_tone3:": "🤷🏽",
+":purple_heart:": "💜",
+":shrug_tone4:": "🤷🏾",
+":camera:": "📷",
+":video_camera:": "📹",
+":gift_heart:": "💝",
+":tv:": "📺",
+":shrug_tone5:": "🤷🏿",
+":radio:": "📻",
+":revolving_hearts:": "💞",
+":vhs:": "📼",
+":face_palm_tone1:": "🤦🏻",
+":facepalm_tone1:": "🤦🏻",
+":arrows_clockwise:": "🔃",
+":heart_decoration:": "💟",
+":loud_sound:": "🔊",
+":battery:": "🔋",
+":diamond_shape_with_a_dot_inside:": "💠",
+":electric_plug:": "🔌",
+":mag:": "🔍",
+":face_palm_tone2:": "🤦🏼",
+":facepalm_tone2:": "🤦🏼",
+":bulb:": "💡",
+":mag_right:": "🔎",
+":lock_with_ink_pen:": "🔏",
+":anger:": "💢",
+":closed_lock_with_key:": "🔐",
+":key:": "🔑",
+":bomb:": "💣",
+":lock:": "🔒",
+":unlock:": "🔓",
+":zzz:": "💤",
+":bell:": "🔔",
+":bookmark:": "🔖",
+":boom:": "💥",
+":face_palm_tone3:": "🤦🏽",
+":facepalm_tone3:": "🤦🏽",
+":link:": "🔗",
+":radio_button:": "🔘",
+":sweat_drops:": "💦",
+":back:": "🔙",
+":end:": "🔚",
+":droplet:": "💧",
+":face_palm_tone4:": "🤦🏾",
+":facepalm_tone4:": "🤦🏾",
+":on:": "🔛",
+":soon:": "🔜",
+":dash:": "💨",
+":top:": "🔝",
+":underage:": "🔞",
+":poop:": "💩",
+":shit:": "💩",
+ ":hankey:": "💩",
+":poo:": "💩",
+":keycap_ten:": "🔟",
+":muscle:": "💪",
+":capital_abcd:": "🔠",
+":abcd:": "🔡",
+":dizzy:": "💫",
+":face_palm_tone5:": "🤦🏿",
+":facepalm_tone5:": "🤦🏿",
+":1234:": "🔢",
+":symbols:": "🔣",
+":speech_balloon:": "💬",
+":abc:": "🔤",
+":fire:": "🔥",
+":flame:": "🔥",
+":white_flower:": "💮",
+":flashlight:": "🔦",
+":wrench:": "🔧",
+":100:": "💯",
+":hammer:": "🔨",
+":nut_and_bolt:": "🔩",
+":moneybag:": "💰",
+":knife:": "🔪",
+":gun:": "🔫",
+":currency_exchange:": "💱",
+":pregnant_woman_tone1:": "🤰🏻",
+":expecting_woman_tone1:": "🤰🏻",
+":crystal_ball:": "🔮",
+":heavy_dollar_sign:": "💲",
+":six_pointed_star:": "🔯",
+":credit_card:": "💳",
+":beginner:": "🔰",
+":trident:": "🔱",
+":yen:": "💴",
+":pregnant_woman_tone2:": "🤰🏼",
+":expecting_woman_tone2:": "🤰🏼",
+":black_square_button:": "🔲",
+":white_square_button:": "🔳",
+":dollar:": "💵",
+":red_circle:": "🔴",
+":blue_circle:": "🔵",
+":money_with_wings:": "💸",
+":large_orange_diamond:": "🔶",
+":large_blue_diamond:": "🔷",
+":chart:": "💹",
+":pregnant_woman_tone3:": "🤰🏽",
+":expecting_woman_tone3:": "🤰🏽",
+":small_orange_diamond:": "🔸",
+":small_blue_diamond:": "🔹",
+":seat:": "💺",
+":small_red_triangle:": "🔺",
+":small_red_triangle_down:": "🔻",
+":computer:": "💻",
+":arrow_up_small:": "🔼",
+":briefcase:": "💼",
+":arrow_down_small:": "🔽",
+":clock1:": "🕐",
+":minidisc:": "💽",
+":clock2:": "🕑",
+":floppy_disk:": "💾",
+":pregnant_woman_tone4:": "🤰🏾",
+":expecting_woman_tone4:": "🤰🏾",
+":clock3:": "🕒",
+":cd:": "💿",
+":clock4:": "🕓",
+":dvd:": "📀",
+":clock5:": "🕔",
+":clock6:": "🕕",
+":file_folder:": "📁",
+":clock7:": "🕖",
+":clock8:": "🕗",
+":open_file_folder:": "📂",
+":clock9:": "🕘",
+":clock10:": "🕙",
+":page_with_curl:": "📃",
+":clock11:": "🕚",
+":clock12:": "🕛",
+":page_facing_up:": "📄",
+":mount_fuji:": "🗻",
+":tokyo_tower:": "🗼",
+":date:": "📅",
+":statue_of_liberty:": "🗽",
+":japan:": "🗾",
+":calendar:": "📆",
+":moyai:": "🗿",
+":grin:": "😁",
+":joy:": "😂",
+":smiley:": "😃",
+":chart_with_upwards_trend:": "📈",
+":smile:": "😄",
+":sweat_smile:": "😅",
+":chart_with_downwards_trend:": "📉",
+":laughing:": "😆",
+":satisfied:": "😆",
+":wink:": "😉",
+":bar_chart:": "📊",
+":blush:": "😊",
+":yum:": "😋",
+":clipboard:": "📋",
+":relieved:": "😌",
+":heart_eyes:": "😍",
+":pushpin:": "📌",
+":smirk:": "😏",
+":unamused:": "😒",
+":round_pushpin:": "📍",
+":sweat:": "😓",
+":pensive:": "😔",
+":paperclip:": "📎",
+":confounded:": "😖",
+":kissing_heart:": "😘",
+":pregnant_woman_tone5:": "🤰🏿",
+":expecting_woman_tone5:": "🤰🏿",
+":straight_ruler:": "📏",
+":kissing_closed_eyes:": "😚",
+":stuck_out_tongue_winking_eye:": "😜",
+":triangular_ruler:": "📐",
+":stuck_out_tongue_closed_eyes:": "😝",
+":disappointed:": "😞",
+":bookmark_tabs:": "📑",
+":angry:": "😠",
+":rage:": "😡",
+":cry:": "😢",
+":persevere:": "😣",
+":triumph:": "😤",
+":disappointed_relieved:": "😥",
+":fearful:": "😨",
+":weary:": "😩",
+":sleepy:": "😪",
+":tired_face:": "😫",
+":sob:": "😭",
+":cold_sweat:": "😰",
+":scream:": "😱",
+":astonished:": "😲",
+":flushed:": "😳",
+":dizzy_face:": "😵",
+":mask:": "😷",
+":smile_cat:": "😸",
+":joy_cat:": "😹",
+":smiley_cat:": "😺",
+":heart_eyes_cat:": "😻",
+":smirk_cat:": "😼",
+":kissing_cat:": "😽",
+":pouting_cat:": "😾",
+":crying_cat_face:": "😿",
+":scream_cat:": "🙀",
+":no_good:": "🙅",
+":ok_woman:": "🙆",
+":bow:": "🙇",
+":see_no_evil:": "🙈",
+":man_dancing_tone1:": "🕺🏻",
+":male_dancer_tone1:": "🕺🏻",
+":hear_no_evil:": "🙉",
+":speak_no_evil:": "🙊",
+":man_dancing_tone2:": "🕺🏼",
+":male_dancer_tone2:": "🕺🏼",
+":raising_hand:": "🙋",
+":raised_hands:": "🙌",
+":person_frowning:": "🙍",
+":person_with_pouting_face:": "🙎",
+":pray:": "🙏",
+":rocket:": "🚀",
+":railway_car:": "🚃",
+":bullettrain_side:": "🚄",
+":bullettrain_front:": "🚅",
+":metro:": "🚇",
+":station:": "🚉",
+":bus:": "🚌",
+":busstop:": "🚏",
+":ambulance:": "🚑",
+":fire_engine:": "🚒",
+":police_car:": "🚓",
+":taxi:": "🚕",
+":red_car:": "🚗",
+":blue_car:": "🚙",
+":truck:": "🚚",
+":ship:": "🚢",
+":speedboat:": "🚤",
+":traffic_light:": "🚥",
+":construction:": "🚧",
+":rotating_light:": "🚨",
+":triangular_flag_on_post:": "🚩",
+":door:": "🚪",
+":man_dancing_tone3:": "🕺🏽",
+":male_dancer_tone3:": "🕺🏽",
+":no_entry_sign:": "🚫",
+":smoking:": "🚬",
+":no_smoking:": "🚭",
+":bike:": "🚲",
+":walking:": "🚶",
+":mens:": "🚹",
+":womens:": "🚺",
+":man_dancing_tone4:": "🕺🏾",
+":male_dancer_tone4:": "🕺🏾",
+":restroom:": "🚻",
+":baby_symbol:": "🚼",
+":man_dancing_tone5:": "🕺🏿",
+":male_dancer_tone5:": "🕺🏿",
+":toilet:": "🚽",
+":wc:": "🚾",
+":selfie_tone1:": "🤳🏻",
+":bath:": "🛀",
+":metal:": "🤘",
+":sign_of_the_horns:": "🤘",
+":grinning:": "😀",
+":innocent:": "😇",
+":smiling_imp:": "😈",
+":sunglasses:": "😎",
+":neutral_face:": "😐",
+":expressionless:": "😑",
+":confused:": "😕",
+":kissing:": "😗",
+":selfie_tone2:": "🤳🏼",
+":kissing_smiling_eyes:": "😙",
+":stuck_out_tongue:": "😛",
+":worried:": "😟",
+":frowning:": "😦",
+":anguished:": "😧",
+":grimacing:": "😬",
+":open_mouth:": "😮",
+":hushed:": "😯",
+":sleeping:": "😴",
+":no_mouth:": "😶",
+":helicopter:": "🚁",
+":steam_locomotive:": "🚂",
+":train2:": "🚆",
+":light_rail:": "🚈",
+":tram:": "🚊",
+":oncoming_bus:": "🚍",
+":trolleybus:": "🚎",
+":minibus:": "🚐",
+":oncoming_police_car:": "🚔",
+":oncoming_taxi:": "🚖",
+":oncoming_automobile:": "🚘",
+":articulated_lorry:": "🚛",
+":selfie_tone3:": "🤳🏽",
+":tractor:": "🚜",
+":monorail:": "🚝",
+":mountain_railway:": "🚞",
+":suspension_railway:": "🚟",
+":mountain_cableway:": "🚠",
+":aerial_tramway:": "🚡",
+":rowboat:": "🚣",
+":vertical_traffic_light:": "🚦",
+":selfie_tone4:": "🤳🏾",
+":put_litter_in_its_place:": "🚮",
+":do_not_litter:": "🚯",
+":selfie_tone5:": "🤳🏿",
+":potable_water:": "🚰",
+":nonpotable_water:": "🚱",
+":no_bicycles:": "🚳",
+":fingers_crossed_tone1:": "🤞🏻",
+":hand_with_index_and_middle_fingers_crossed_tone1:": "🤞🏻",
+":bicyclist:": "🚴",
+":mountain_bicyclist:": "🚵",
+":no_pedestrians:": "🚷",
+":children_crossing:": "🚸",
+":shower:": "🚿",
+":bathtub:": "🛁",
+":passport_control:": "🛂",
+":fingers_crossed_tone2:": "🤞🏼",
+":hand_with_index_and_middle_fingers_crossed_tone2:": "🤞🏼",
+":customs:": "🛃",
+":baggage_claim:": "🛄",
+":fingers_crossed_tone3:": "🤞🏽",
+":hand_with_index_and_middle_fingers_crossed_tone3:": "🤞🏽",
+":left_luggage:": "🛅",
+":earth_africa:": "🌍",
+":earth_americas:": "🌎",
+":globe_with_meridians:": "🌐",
+":waxing_crescent_moon:": "🌒",
+":waning_gibbous_moon:": "🌖",
+":last_quarter_moon:": "🌗",
+":waning_crescent_moon:": "🌘",
+":new_moon_with_face:": "🌚",
+":last_quarter_moon_with_face:": "🌜",
+":full_moon_with_face:": "🌝",
+":sun_with_face:": "🌞",
+":evergreen_tree:": "🌲",
+":deciduous_tree:": "🌳",
+":lemon:": "🍋",
+":fingers_crossed_tone4:": "🤞🏾",
+":hand_with_index_and_middle_fingers_crossed_tone4:": "🤞🏾",
+":pear:": "🍐",
+":baby_bottle:": "🍼",
+":horse_racing:": "🏇",
+":rugby_football:": "🏉",
+":european_post_office:": "🏤",
+":rat:": "🐀",
+":mouse2:": "🐁",
+":ox:": "🐂",
+":water_buffalo:": "🐃",
+":cow2:": "🐄",
+":tiger2:": "🐅",
+":leopard:": "🐆",
+":rabbit2:": "🐇",
+":cat2:": "🐈",
+":dragon:": "🐉",
+":crocodile:": "🐊",
+":whale2:": "🐋",
+":ram:": "🐏",
+":goat:": "🐐",
+":rooster:": "🐓",
+":dog2:": "🐕",
+":pig2:": "🐖",
+":fingers_crossed_tone5:": "🤞🏿",
+":hand_with_index_and_middle_fingers_crossed_tone5:": "🤞🏿",
+":dromedary_camel:": "🐪",
+":busts_in_silhouette:": "👥",
+":two_men_holding_hands:": "👬",
+":two_women_holding_hands:": "👭",
+":thought_balloon:": "💭",
+":euro:": "💶",
+":call_me_tone1:": "🤙🏻",
+":call_me_hand_tone1:": "🤙🏻",
+":pound:": "💷",
+":mailbox_with_mail:": "📬",
+":mailbox_with_no_mail:": "📭",
+":call_me_tone2:": "🤙🏼",
+":call_me_hand_tone2:": "🤙🏼",
+":postal_horn:": "📯",
+":no_mobile_phones:": "📵",
+":twisted_rightwards_arrows:": "🔀",
+":repeat:": "🔁",
+":repeat_one:": "🔂",
+":arrows_counterclockwise:": "🔄",
+":call_me_tone3:": "🤙🏽",
+":call_me_hand_tone3:": "🤙🏽",
+":low_brightness:": "🔅",
+":high_brightness:": "🔆",
+":mute:": "🔇",
+":sound:": "🔉",
+":no_bell:": "🔕",
+":microscope:": "🔬",
+":telescope:": "🔭",
+":clock130:": "🕜",
+":clock230:": "🕝",
+":clock330:": "🕞",
+":clock430:": "🕟",
+":clock530:": "🕠",
+":clock630:": "🕡",
+":clock730:": "🕢",
+":clock830:": "🕣",
+":clock930:": "🕤",
+":clock1030:": "🕥",
+":clock1130:": "🕦",
+":clock1230:": "🕧",
+":speaker:": "🔈",
+":train:": "🚋",
+":loop:": "➿",
+":flag_af:": "🇦🇫",
+":af:": "🇦🇫",
+":flag_al:": "🇦🇱",
+":al:": "🇦🇱",
+":flag_dz:": "🇩🇿",
+":dz:": "🇩🇿",
+":flag_ad:": "🇦🇩",
+":ad:": "🇦🇩",
+":flag_ao:": "🇦🇴",
+":ao:": "🇦🇴",
+":flag_ag:": "🇦🇬",
+":ag:": "🇦🇬",
+":flag_ar:": "🇦🇷",
+":ar:": "🇦🇷",
+":flag_am:": "🇦🇲",
+":am:": "🇦🇲",
+":flag_au:": "🇦🇺",
+":au:": "🇦🇺",
+":flag_at:": "🇦🇹",
+":at:": "🇦🇹",
+":flag_az:": "🇦🇿",
+":az:": "🇦🇿",
+":flag_bs:": "🇧🇸",
+":bs:": "🇧🇸",
+":flag_bh:": "🇧🇭",
+":bh:": "🇧🇭",
+":flag_bd:": "🇧🇩",
+":bd:": "🇧🇩",
+":flag_bb:": "🇧🇧",
+":bb:": "🇧🇧",
+":flag_by:": "🇧🇾",
+":by:": "🇧🇾",
+":flag_be:": "🇧🇪",
+":be:": "🇧🇪",
+":flag_bz:": "🇧🇿",
+":bz:": "🇧🇿",
+":flag_bj:": "🇧🇯",
+":bj:": "🇧🇯",
+":flag_bt:": "🇧🇹",
+":bt:": "🇧🇹",
+":flag_bo:": "🇧🇴",
+":bo:": "🇧🇴",
+":flag_ba:": "🇧🇦",
+":ba:": "🇧🇦",
+":flag_bw:": "🇧🇼",
+":bw:": "🇧🇼",
+":flag_br:": "🇧🇷",
+":br:": "🇧🇷",
+":flag_bn:": "🇧🇳",
+":bn:": "🇧🇳",
+":flag_bg:": "🇧🇬",
+":bg:": "🇧🇬",
+":flag_bf:": "🇧🇫",
+":bf:": "🇧🇫",
+":flag_bi:": "🇧🇮",
+":bi:": "🇧🇮",
+":flag_kh:": "🇰🇭",
+":kh:": "🇰🇭",
+":flag_cm:": "🇨🇲",
+":cm:": "🇨🇲",
+":flag_ca:": "🇨🇦",
+":ca:": "🇨🇦",
+":flag_cv:": "🇨🇻",
+":cv:": "🇨🇻",
+":call_me_tone4:": "🤙🏾",
+":call_me_hand_tone4:": "🤙🏾",
+":flag_cf:": "🇨🇫",
+":cf:": "🇨🇫",
+":flag_td:": "🇹🇩",
+":td:": "🇹🇩",
+":flag_cl:": "🇨🇱",
+":chile:": "🇨🇱",
+":flag_co:": "🇨🇴",
+":co:": "🇨🇴",
+":flag_km:": "🇰🇲",
+":km:": "🇰🇲",
+":flag_cr:": "🇨🇷",
+":cr:": "🇨🇷",
+":flag_ci:": "🇨🇮",
+":ci:": "🇨🇮",
+":flag_hr:": "🇭🇷",
+":hr:": "🇭🇷",
+":flag_cu:": "🇨🇺",
+":cu:": "🇨🇺",
+":flag_cy:": "🇨🇾",
+":cy:": "🇨🇾",
+":flag_cz:": "🇨🇿",
+":cz:": "🇨🇿",
+":call_me_tone5:": "🤙🏿",
+":call_me_hand_tone5:": "🤙🏿",
+":flag_cd:": "🇨🇩",
+":congo:": "🇨🇩",
+":left_facing_fist_tone1:": "🤛🏻",
+":left_fist_tone1:": "🤛🏻",
+":flag_dk:": "🇩🇰",
+":dk:": "🇩🇰",
+":flag_dj:": "🇩🇯",
+":dj:": "🇩🇯",
+":flag_dm:": "🇩🇲",
+":dm:": "🇩🇲",
+":flag_do:": "🇩🇴",
+":do:": "🇩🇴",
+":flag_tl:": "🇹🇱",
+":tl:": "🇹🇱",
+":flag_ec:": "🇪🇨",
+":ec:": "🇪🇨",
+":flag_eg:": "🇪🇬",
+":eg:": "🇪🇬",
+":flag_sv:": "🇸🇻",
+":sv:": "🇸🇻",
+":flag_gq:": "🇬🇶",
+":gq:": "🇬🇶",
+":flag_er:": "🇪🇷",
+":er:": "🇪🇷",
+":flag_ee:": "🇪🇪",
+":ee:": "🇪🇪",
+":flag_et:": "🇪🇹",
+":et:": "🇪🇹",
+":left_facing_fist_tone2:": "🤛🏼",
+":left_fist_tone2:": "🤛🏼",
+":flag_fj:": "🇫🇯",
+":fj:": "🇫🇯",
+":flag_fi:": "🇫🇮",
+":fi:": "🇫🇮",
+":flag_ga:": "🇬🇦",
+":ga:": "🇬🇦",
+":flag_gm:": "🇬🇲",
+":gm:": "🇬🇲",
+":flag_ge:": "🇬🇪",
+":ge:": "🇬🇪",
+":flag_gh:": "🇬🇭",
+":gh:": "🇬🇭",
+":flag_gr:": "🇬🇷",
+":gr:": "🇬🇷",
+":flag_gd:": "🇬🇩",
+":gd:": "🇬🇩",
+":flag_gt:": "🇬🇹",
+":gt:": "🇬🇹",
+":flag_gn:": "🇬🇳",
+":gn:": "🇬🇳",
+":flag_gw:": "🇬🇼",
+":gw:": "🇬🇼",
+":flag_gy:": "🇬🇾",
+":gy:": "🇬🇾",
+":flag_ht:": "🇭🇹",
+":ht:": "🇭🇹",
+":flag_hn:": "🇭🇳",
+":hn:": "🇭🇳",
+":flag_hu:": "🇭🇺",
+":hu:": "🇭🇺",
+":flag_is:": "🇮🇸",
+":is:": "🇮🇸",
+":flag_in:": "🇮🇳",
+":in:": "🇮🇳",
+":flag_id:": "🇮🇩",
+":indonesia:": "🇮🇩",
+":flag_ir:": "🇮🇷",
+":ir:": "🇮🇷",
+":flag_iq:": "🇮🇶",
+":iq:": "🇮🇶",
+":flag_ie:": "🇮🇪",
+":ie:": "🇮🇪",
+":flag_il:": "🇮🇱",
+":il:": "🇮🇱",
+":flag_jm:": "🇯🇲",
+":jm:": "🇯🇲",
+":flag_jo:": "🇯🇴",
+":jo:": "🇯🇴",
+":flag_kz:": "🇰🇿",
+":kz:": "🇰🇿",
+":flag_ke:": "🇰🇪",
+":ke:": "🇰🇪",
+":flag_ki:": "🇰🇮",
+":ki:": "🇰🇮",
+":flag_xk:": "🇽🇰",
+":xk:": "🇽🇰",
+":flag_kw:": "🇰🇼",
+":kw:": "🇰🇼",
+":flag_kg:": "🇰🇬",
+":kg:": "🇰🇬",
+":left_facing_fist_tone3:": "🤛🏽",
+":left_fist_tone3:": "🤛🏽",
+":flag_la:": "🇱🇦",
+":la:": "🇱🇦",
+":flag_lv:": "🇱🇻",
+":lv:": "🇱🇻",
+":flag_lb:": "🇱🇧",
+":lb:": "🇱🇧",
+":flag_ls:": "🇱🇸",
+":ls:": "🇱🇸",
+":flag_lr:": "🇱🇷",
+":lr:": "🇱🇷",
+":flag_ly:": "🇱🇾",
+":ly:": "🇱🇾",
+":flag_li:": "🇱🇮",
+":li:": "🇱🇮",
+":flag_lt:": "🇱🇹",
+":lt:": "🇱🇹",
+":flag_lu:": "🇱🇺",
+":lu:": "🇱🇺",
+":flag_mk:": "🇲🇰",
+":mk:": "🇲🇰",
+":flag_mg:": "🇲🇬",
+":mg:": "🇲🇬",
+":flag_mw:": "🇲🇼",
+":mw:": "🇲🇼",
+":flag_my:": "🇲🇾",
+":my:": "🇲🇾",
+":flag_mv:": "🇲🇻",
+":mv:": "🇲🇻",
+":flag_ml:": "🇲🇱",
+":ml:": "🇲🇱",
+":flag_mt:": "🇲🇹",
+":mt:": "🇲🇹",
+":flag_mh:": "🇲🇭",
+":mh:": "🇲🇭",
+":flag_mr:": "🇲🇷",
+":mr:": "🇲🇷",
+":flag_mu:": "🇲🇺",
+":mu:": "🇲🇺",
+":flag_mx:": "🇲🇽",
+":mx:": "🇲🇽",
+":flag_fm:": "🇫🇲",
+":fm:": "🇫🇲",
+":flag_md:": "🇲🇩",
+":md:": "🇲🇩",
+":flag_mc:": "🇲🇨",
+":mc:": "🇲🇨",
+":flag_mn:": "🇲🇳",
+":mn:": "🇲🇳",
+":flag_me:": "🇲🇪",
+":me:": "🇲🇪",
+":flag_ma:": "🇲🇦",
+":ma:": "🇲🇦",
+":flag_mz:": "🇲🇿",
+":mz:": "🇲🇿",
+":flag_mm:": "🇲🇲",
+":mm:": "🇲🇲",
+":flag_na:": "🇳🇦",
+":na:": "🇳🇦",
+":flag_nr:": "🇳🇷",
+":nr:": "🇳🇷",
+":flag_np:": "🇳🇵",
+":np:": "🇳🇵",
+":flag_nl:": "🇳🇱",
+":nl:": "🇳🇱",
+":flag_nz:": "🇳🇿",
+":nz:": "🇳🇿",
+":flag_ni:": "🇳🇮",
+":ni:": "🇳🇮",
+":flag_ne:": "🇳🇪",
+":ne:": "🇳🇪",
+":flag_ng:": "🇳🇬",
+":nigeria:": "🇳🇬",
+":flag_kp:": "🇰🇵",
+":kp:": "🇰🇵",
+":flag_no:": "🇳🇴",
+":no:": "🇳🇴",
+":flag_om:": "🇴🇲",
+":om:": "🇴🇲",
+":flag_pk:": "🇵🇰",
+":pk:": "🇵🇰",
+":flag_pw:": "🇵🇼",
+":pw:": "🇵🇼",
+":flag_pa:": "🇵🇦",
+":pa:": "🇵🇦",
+":flag_pg:": "🇵🇬",
+":pg:": "🇵🇬",
+":left_facing_fist_tone4:": "🤛🏾",
+":left_fist_tone4:": "🤛🏾",
+":flag_py:": "🇵🇾",
+":py:": "🇵🇾",
+":flag_pe:": "🇵🇪",
+":pe:": "🇵🇪",
+":flag_ph:": "🇵🇭",
+":ph:": "🇵🇭",
+":flag_pl:": "🇵🇱",
+":pl:": "🇵🇱",
+":flag_pt:": "🇵🇹",
+":pt:": "🇵🇹",
+":flag_qa:": "🇶🇦",
+":qa:": "🇶🇦",
+":flag_tw:": "🇹🇼",
+":tw:": "🇹🇼",
+":flag_cg:": "🇨🇬",
+":cg:": "🇨🇬",
+":flag_ro:": "🇷🇴",
+":ro:": "🇷🇴",
+":flag_rw:": "🇷🇼",
+":rw:": "🇷🇼",
+":flag_kn:": "🇰🇳",
+":kn:": "🇰🇳",
+":flag_lc:": "🇱🇨",
+":lc:": "🇱🇨",
+":flag_vc:": "🇻🇨",
+":vc:": "🇻🇨",
+":flag_ws:": "🇼🇸",
+":ws:": "🇼🇸",
+":flag_sm:": "🇸🇲",
+":sm:": "🇸🇲",
+":flag_st:": "🇸🇹",
+":st:": "🇸🇹",
+":flag_sa:": "🇸🇦",
+":saudiarabia:": "🇸🇦",
+":saudi:": "🇸🇦",
+":left_facing_fist_tone5:": "🤛🏿",
+":left_fist_tone5:": "🤛🏿",
+":flag_sn:": "🇸🇳",
+":sn:": "🇸🇳",
+":flag_rs:": "🇷🇸",
+":rs:": "🇷🇸",
+":flag_sc:": "🇸🇨",
+":sc:": "🇸🇨",
+":flag_sl:": "🇸🇱",
+":sl:": "🇸🇱",
+":flag_sg:": "🇸🇬",
+":sg:": "🇸🇬",
+":flag_sk:": "🇸🇰",
+":sk:": "🇸🇰",
+":flag_si:": "🇸🇮",
+":si:": "🇸🇮",
+":flag_sb:": "🇸🇧",
+":sb:": "🇸🇧",
+":flag_so:": "🇸🇴",
+":so:": "🇸🇴",
+":flag_za:": "🇿🇦",
+":za:": "🇿🇦",
+":flag_lk:": "🇱🇰",
+":lk:": "🇱🇰",
+":flag_sd:": "🇸🇩",
+":sd:": "🇸🇩",
+":flag_sr:": "🇸🇷",
+":sr:": "🇸🇷",
+":flag_sz:": "🇸🇿",
+":sz:": "🇸🇿",
+":flag_se:": "🇸🇪",
+":se:": "🇸🇪",
+":flag_ch:": "🇨🇭",
+":ch:": "🇨🇭",
+":flag_sy:": "🇸🇾",
+":sy:": "🇸🇾",
+":flag_tj:": "🇹🇯",
+":tj:": "🇹🇯",
+":flag_tz:": "🇹🇿",
+":tz:": "🇹🇿",
+":flag_th:": "🇹🇭",
+":th:": "🇹🇭",
+":flag_tg:": "🇹🇬",
+":tg:": "🇹🇬",
+":flag_to:": "🇹🇴",
+":to:": "🇹🇴",
+":flag_tt:": "🇹🇹",
+":tt:": "🇹🇹",
+":flag_tn:": "🇹🇳",
+":tn:": "🇹🇳",
+":flag_tr:": "🇹🇷",
+":tr:": "🇹🇷",
+":flag_tm:": "🇹🇲",
+":turkmenistan:": "🇹🇲",
+":flag_tv:": "🇹🇻",
+":tuvalu:": "🇹🇻",
+":flag_ug:": "🇺🇬",
+":ug:": "🇺🇬",
+":flag_ua:": "🇺🇦",
+":ua:": "🇺🇦",
+":flag_ae:": "🇦🇪",
+":ae:": "🇦🇪",
+":flag_uy:": "🇺🇾",
+":uy:": "🇺🇾",
+":flag_uz:": "🇺🇿",
+":uz:": "🇺🇿",
+":flag_vu:": "🇻🇺",
+":vu:": "🇻🇺",
+":flag_va:": "🇻🇦",
+":va:": "🇻🇦",
+":flag_ve:": "🇻🇪",
+":ve:": "🇻🇪",
+":flag_vn:": "🇻🇳",
+":vn:": "🇻🇳",
+":flag_eh:": "🇪🇭",
+":eh:": "🇪🇭",
+":right_facing_fist_tone1:": "🤜🏻",
+":right_fist_tone1:": "🤜🏻",
+":flag_ye:": "🇾🇪",
+":ye:": "🇾🇪",
+":flag_zm:": "🇿🇲",
+":zm:": "🇿🇲",
+":flag_zw:": "🇿🇼",
+":zw:": "🇿🇼",
+":flag_pr:": "🇵🇷",
+":pr:": "🇵🇷",
+":flag_ky:": "🇰🇾",
+":ky:": "🇰🇾",
+":flag_bm:": "🇧🇲",
+":bm:": "🇧🇲",
+":flag_pf:": "🇵🇫",
+":pf:": "🇵🇫",
+":flag_ps:": "🇵🇸",
+":ps:": "🇵🇸",
+":flag_nc:": "🇳🇨",
+":nc:": "🇳🇨",
+":right_facing_fist_tone2:": "🤜🏼",
+":right_fist_tone2:": "🤜🏼",
+":flag_sh:": "🇸🇭",
+":sh:": "🇸🇭",
+":flag_aw:": "🇦🇼",
+":aw:": "🇦🇼",
+":flag_vi:": "🇻🇮",
+":vi:": "🇻🇮",
+":flag_hk:": "🇭🇰",
+":hk:": "🇭🇰",
+":flag_ac:": "🇦🇨",
+":ac:": "🇦🇨",
+":flag_ms:": "🇲🇸",
+":ms:": "🇲🇸",
+":flag_gu:": "🇬🇺",
+":gu:": "🇬🇺",
+":flag_gl:": "🇬🇱",
+":gl:": "🇬🇱",
+":flag_nu:": "🇳🇺",
+":nu:": "🇳🇺",
+":flag_wf:": "🇼🇫",
+":wf:": "🇼🇫",
+":flag_mo:": "🇲🇴",
+":mo:": "🇲🇴",
+":right_facing_fist_tone3:": "🤜🏽",
+":right_fist_tone3:": "🤜🏽",
+":flag_fo:": "🇫🇴",
+":fo:": "🇫🇴",
+":flag_fk:": "🇫🇰",
+":fk:": "🇫🇰",
+":flag_je:": "🇯🇪",
+":je:": "🇯🇪",
+":flag_ai:": "🇦🇮",
+":ai:": "🇦🇮",
+":flag_gi:": "🇬🇮",
+":gi:": "🇬🇮",
+":film_frames:": "🎞",
+":tickets:": "🎟",
+":admission_tickets:": "🎟",
+":medal:": "🏅",
+":sports_medal:": "🏅",
+":lifter:": "🏋",
+":weight_lifter:": "🏋",
+":golfer:": "🏌",
+":motorcycle:": "🏍",
+":racing_motorcycle:": "🏍",
+":race_car:": "🏎",
+":racing_car:": "🏎",
+":military_medal:": "🎖",
+":reminder_ribbon:": "🎗",
+":hot_pepper:": "🌶",
+":right_facing_fist_tone4:": "🤜🏾",
+":right_fist_tone4:": "🤜🏾",
+":cloud_rain:": "🌧",
+":cloud_with_rain:": "🌧",
+":cloud_snow:": "🌨",
+":cloud_with_snow:": "🌨",
+":cloud_lightning:": "🌩",
+":cloud_with_lightning:": "🌩",
+":cloud_tornado:": "🌪",
+":cloud_with_tornado:": "🌪",
+":fog:": "🌫",
+":wind_blowing_face:": "🌬",
+":chipmunk:": "🐿",
+":spider:": "🕷",
+":spider_web:": "🕸",
+":thermometer:": "🌡",
+":microphone2:": "🎙",
+":studio_microphone:": "🎙",
+":level_slider:": "🎚",
+":control_knobs:": "🎛",
+":flag_white:": "🏳",
+":waving_white_flag:": "🏳",
+":flag_black:": "🏴",
+":waving_black_flag:": "🏴",
+":rosette:": "🏵",
+":label:": "🏷",
+":camera_with_flash:": "📸",
+":projector:": "📽",
+":film_projector:": "📽",
+":cross:": "✝",
+":latin_cross:": "✝",
+":om_symbol:": "🕉",
+":dove:": "🕊",
+":dove_of_peace:": "🕊",
+":candle:": "🕯",
+":clock:": "🕰",
+":mantlepiece_clock:": "🕰",
+":hole:": "🕳",
+":dark_sunglasses:": "🕶",
+":joystick:": "🕹",
+":paperclips:": "🖇",
+":linked_paperclips:": "🖇",
+":pen_ballpoint:": "🖊",
+":lower_left_ballpoint_pen:": "🖊",
+":pen_fountain:": "🖋",
+":lower_left_fountain_pen:": "🖋",
+":paintbrush:": "🖌",
+":lower_left_paintbrush:": "🖌",
+":crayon:": "🖍",
+":lower_left_crayon:": "🖍",
+":desktop:": "🖥",
+":desktop_computer:": "🖥",
+":printer:": "🖨",
+":right_facing_fist_tone5:": "🤜🏿",
+":right_fist_tone5:": "🤜🏿",
+":keyboard:": "⌨",
+":trackball:": "🖲",
+":raised_back_of_hand_tone1:": "🤚🏻",
+":back_of_hand_tone1:": "🤚🏻",
+":frame_photo:": "🖼",
+":frame_with_picture:": "🖼",
+":dividers:": "🗂",
+":card_index_dividers:": "🗂",
+":card_box:": "🗃",
+":card_file_box:": "🗃",
+":file_cabinet:": "🗄",
+":wastebasket:": "🗑",
+":notepad_spiral:": "🗒",
+":spiral_note_pad:": "🗒",
+":calendar_spiral:": "🗓",
+":spiral_calendar_pad:": "🗓",
+":compression:": "🗜",
+":key2:": "🗝",
+":old_key:": "🗝",
+":newspaper2:": "🗞",
+":rolled_up_newspaper:": "🗞",
+":dagger:": "🗡",
+":dagger_knife:": "🗡",
+":speaking_head:": "🗣",
+":speaking_head_in_silhouette:": "🗣",
+":speech_left:": "🗨",
+":left_speech_bubble:": "🗨",
+":raised_back_of_hand_tone2:": "🤚🏼",
+":back_of_hand_tone2:": "🤚🏼",
+":anger_right:": "🗯",
+":right_anger_bubble:": "🗯",
+":raised_back_of_hand_tone3:": "🤚🏽",
+":back_of_hand_tone3:": "🤚🏽",
+":ballot_box:": "🗳",
+":ballot_box_with_ballot:": "🗳",
+":map:": "🗺",
+":world_map:": "🗺",
+":sleeping_accommodation:": "🛌",
+":tools:": "🛠",
+":hammer_and_wrench:": "🛠",
+":shield:": "🛡",
+":oil:": "🛢",
+":oil_drum:": "🛢",
+":satellite_orbital:": "🛰",
+":fork_knife_plate:": "🍽",
+":fork_and_knife_with_plate:": "🍽",
+":eye:": "👁",
+":levitate:": "🕴",
+":man_in_business_suit_levitating:": "🕴",
+":spy:": "🕵",
+":sleuth_or_spy:": "🕵",
+":writing_hand:": "✍",
+":hand_splayed:": "🖐",
+":raised_hand_with_fingers_splayed:": "🖐",
+":middle_finger:": "🖕",
+":reversed_hand_with_middle_finger_extended:": "🖕",
+":vulcan:": "🖖",
+":raised_hand_with_part_between_middle_and_ring_fingers:": "🖖",
+":slight_frown:": "🙁",
+":slightly_frowning_face:": "🙁",
+":slight_smile:": "🙂",
+":slightly_smiling_face:": "🙂",
+":mountain_snow:": "🏔",
+":snow_capped_mountain:": "🏔",
+":camping:": "🏕",
+":beach:": "🏖",
+":beach_with_umbrella:": "🏖",
+":construction_site:": "🏗",
+":building_construction:": "🏗",
+":homes:": "🏘",
+":house_buildings:": "🏘",
+":cityscape:": "🏙",
+":house_abandoned:": "🏚",
+":derelict_house_building:": "🏚",
+":classical_building:": "🏛",
+":desert:": "🏜",
+":island:": "🏝",
+":desert_island:": "🏝",
+":park:": "🏞",
+":national_park:": "🏞",
+":stadium:": "🏟",
+":couch:": "🛋",
+":couch_and_lamp:": "🛋",
+":raised_back_of_hand_tone4:": "🤚🏾",
+":back_of_hand_tone4:": "🤚🏾",
+":shopping_bags:": "🛍",
+":bellhop:": "🛎",
+":bellhop_bell:": "🛎",
+":bed:": "🛏",
+":motorway:": "🛣",
+":railway_track:": "🛤",
+":railroad_track:": "🛤",
+":motorboat:": "🛥",
+":airplane_small:": "🛩",
+":small_airplane:": "🛩",
+":airplane_departure:": "🛫",
+":airplane_arriving:": "🛬",
+":cruise_ship:": "🛳",
+":passenger_ship:": "🛳",
+":baby_tone1:": "👶🏻",
+":baby_tone2:": "👶🏼",
+":baby_tone3:": "👶🏽",
+":baby_tone4:": "👶🏾",
+":baby_tone5:": "👶🏿",
+":boy_tone1:": "👦🏻",
+":boy_tone2:": "👦🏼",
+":boy_tone3:": "👦🏽",
+":boy_tone4:": "👦🏾",
+":boy_tone5:": "👦🏿",
+":girl_tone1:": "👧🏻",
+":girl_tone2:": "👧🏼",
+":girl_tone3:": "👧🏽",
+":girl_tone4:": "👧🏾",
+":girl_tone5:": "👧🏿",
+":man_tone1:": "👨🏻",
+":man_tone2:": "👨🏼",
+":man_tone3:": "👨🏽",
+":man_tone4:": "👨🏾",
+":man_tone5:": "👨🏿",
+":woman_tone1:": "👩🏻",
+":woman_tone2:": "👩🏼",
+":woman_tone3:": "👩🏽",
+":woman_tone4:": "👩🏾",
+":woman_tone5:": "👩🏿",
+":bride_with_veil_tone1:": "👰🏻",
+":bride_with_veil_tone2:": "👰🏼",
+":raised_back_of_hand_tone5:": "🤚🏿",
+":back_of_hand_tone5:": "🤚🏿",
+":bride_with_veil_tone3:": "👰🏽",
+":bride_with_veil_tone4:": "👰🏾",
+":bride_with_veil_tone5:": "👰🏿",
+":person_with_blond_hair_tone1:": "👱🏻",
+":person_with_blond_hair_tone2:": "👱🏼",
+":person_with_blond_hair_tone3:": "👱🏽",
+":person_with_blond_hair_tone4:": "👱🏾",
+":person_with_blond_hair_tone5:": "👱🏿",
+":man_with_gua_pi_mao_tone1:": "👲🏻",
+":man_with_gua_pi_mao_tone2:": "👲🏼",
+":man_with_gua_pi_mao_tone3:": "👲🏽",
+":man_with_gua_pi_mao_tone4:": "👲🏾",
+":man_with_gua_pi_mao_tone5:": "👲🏿",
+":man_with_turban_tone1:": "👳🏻",
+":man_with_turban_tone2:": "👳🏼",
+":man_with_turban_tone3:": "👳🏽",
+":man_with_turban_tone4:": "👳🏾",
+":man_with_turban_tone5:": "👳🏿",
+":older_man_tone1:": "👴🏻",
+":older_man_tone2:": "👴🏼",
+":older_man_tone3:": "👴🏽",
+":older_man_tone4:": "👴🏾",
+":older_man_tone5:": "👴🏿",
+":older_woman_tone1:": "👵🏻",
+":grandma_tone1:": "👵🏻",
+":older_woman_tone2:": "👵🏼",
+":grandma_tone2:": "👵🏼",
+":older_woman_tone3:": "👵🏽",
+":grandma_tone3:": "👵🏽",
+":older_woman_tone4:": "👵🏾",
+":grandma_tone4:": "👵🏾",
+":older_woman_tone5:": "👵🏿",
+":grandma_tone5:": "👵🏿",
+":cop_tone1:": "👮🏻",
+":cop_tone2:": "👮🏼",
+":cop_tone3:": "👮🏽",
+":cop_tone4:": "👮🏾",
+":cop_tone5:": "👮🏿",
+":construction_worker_tone1:": "👷🏻",
+":construction_worker_tone2:": "👷🏼",
+":construction_worker_tone3:": "👷🏽",
+":construction_worker_tone4:": "👷🏾",
+":construction_worker_tone5:": "👷🏿",
+":princess_tone1:": "👸🏻",
+":princess_tone2:": "👸🏼",
+":princess_tone3:": "👸🏽",
+":princess_tone4:": "👸🏾",
+":cartwheel_tone1:": "🤸🏻",
+":person_doing_cartwheel_tone1:": "🤸🏻",
+":princess_tone5:": "👸🏿",
+":guardsman_tone1:": "💂🏻",
+":guardsman_tone2:": "💂🏼",
+":cartwheel_tone2:": "🤸🏼",
+":person_doing_cartwheel_tone2:": "🤸🏼",
+":guardsman_tone3:": "💂🏽",
+":guardsman_tone4:": "💂🏾",
+":guardsman_tone5:": "💂🏿",
+":cartwheel_tone3:": "🤸🏽",
+":person_doing_cartwheel_tone3:": "🤸🏽",
+":angel_tone1:": "👼🏻",
+":angel_tone2:": "👼🏼",
+":angel_tone3:": "👼🏽",
+":angel_tone4:": "👼🏾",
+":angel_tone5:": "👼🏿",
+":bow_tone1:": "🙇🏻",
+":bow_tone2:": "🙇🏼",
+":bow_tone3:": "🙇🏽",
+":bow_tone4:": "🙇🏾",
+":bow_tone5:": "🙇🏿",
+":information_desk_person_tone1:": "💁🏻",
+":information_desk_person_tone2:": "💁🏼",
+":information_desk_person_tone3:": "💁🏽",
+":cartwheel_tone4:": "🤸🏾",
+":person_doing_cartwheel_tone4:": "🤸🏾",
+":information_desk_person_tone4:": "💁🏾",
+":information_desk_person_tone5:": "💁🏿",
+":no_good_tone1:": "🙅🏻",
+":cartwheel_tone5:": "🤸🏿",
+":person_doing_cartwheel_tone5:": "🤸🏿",
+":no_good_tone2:": "🙅🏼",
+":no_good_tone3:": "🙅🏽",
+":no_good_tone4:": "🙅🏾",
+":no_good_tone5:": "🙅🏿",
+":ok_woman_tone1:": "🙆🏻",
+":ok_woman_tone2:": "🙆🏼",
+":ok_woman_tone3:": "🙆🏽",
+":ok_woman_tone4:": "🙆🏾",
+":ok_woman_tone5:": "🙆🏿",
+":raising_hand_tone1:": "🙋🏻",
+":raising_hand_tone2:": "🙋🏼",
+":raising_hand_tone3:": "🙋🏽",
+":raising_hand_tone4:": "🙋🏾",
+":raising_hand_tone5:": "🙋🏿",
+":person_with_pouting_face_tone1:": "🙎🏻",
+":person_with_pouting_face_tone2:": "🙎🏼",
+":person_with_pouting_face_tone3:": "🙎🏽",
+":person_with_pouting_face_tone4:": "🙎🏾",
+":person_with_pouting_face_tone5:": "🙎🏿",
+":person_frowning_tone1:": "🙍🏻",
+":person_frowning_tone2:": "🙍🏼",
+":person_frowning_tone3:": "🙍🏽",
+":person_frowning_tone4:": "🙍🏾",
+":person_frowning_tone5:": "🙍🏿",
+":massage_tone1:": "💆🏻",
+":massage_tone2:": "💆🏼",
+":massage_tone3:": "💆🏽",
+":massage_tone4:": "💆🏾",
+":massage_tone5:": "💆🏿",
+":haircut_tone1:": "💇🏻",
+":haircut_tone2:": "💇🏼",
+":haircut_tone3:": "💇🏽",
+":haircut_tone4:": "💇🏾",
+":haircut_tone5:": "💇🏿",
+":raised_hands_tone1:": "🙌🏻",
+":raised_hands_tone2:": "🙌🏼",
+":raised_hands_tone3:": "🙌🏽",
+":raised_hands_tone4:": "🙌🏾",
+":raised_hands_tone5:": "🙌🏿",
+":clap_tone1:": "👏🏻",
+":clap_tone2:": "👏🏼",
+":clap_tone3:": "👏🏽",
+":water_polo_tone1:": "🤽🏻",
+":clap_tone4:": "👏🏾",
+":clap_tone5:": "👏🏿",
+":water_polo_tone2:": "🤽🏼",
+":ear_tone1:": "👂🏻",
+":ear_tone2:": "👂🏼",
+":ear_tone3:": "👂🏽",
+":ear_tone4:": "👂🏾",
+":ear_tone5:": "👂🏿",
+":nose_tone1:": "👃🏻",
+":nose_tone2:": "👃🏼",
+":nose_tone3:": "👃🏽",
+":nose_tone4:": "👃🏾",
+":nose_tone5:": "👃🏿",
+":nail_care_tone1:": "💅🏻",
+":nail_care_tone2:": "💅🏼",
+":nail_care_tone3:": "💅🏽",
+":nail_care_tone4:": "💅🏾",
+":nail_care_tone5:": "💅🏿",
+":wave_tone1:": "👋🏻",
+":wave_tone2:": "👋🏼",
+":wave_tone3:": "👋🏽",
+":wave_tone4:": "👋🏾",
+":wave_tone5:": "👋🏿",
+":thumbsup_tone1:": "👍🏻",
+":+1_tone1:": "👍🏻",
+":thumbup_tone1:": "👍🏻",
+":thumbsup_tone2:": "👍🏼",
+":+1_tone2:": "👍🏼",
+":thumbup_tone2:": "👍🏼",
+":thumbsup_tone3:": "👍🏽",
+":+1_tone3:": "👍🏽",
+":thumbup_tone3:": "👍🏽",
+":thumbsup_tone4:": "👍🏾",
+":+1_tone4:": "👍🏾",
+":thumbup_tone4:": "👍🏾",
+":thumbsup_tone5:": "👍🏿",
+":+1_tone5:": "👍🏿",
+":thumbup_tone5:": "👍🏿",
+":thumbsdown_tone1:": "👎🏻",
+":1_tone1:": "👎🏻",
+":thumbdown_tone1:": "👎🏻",
+":thumbsdown_tone2:": "👎🏼",
+":1_tone2:": "👎🏼",
+":thumbdown_tone2:": "👎🏼",
+":thumbsdown_tone3:": "👎🏽",
+":1_tone3:": "👎🏽",
+":thumbdown_tone3:": "👎🏽",
+":thumbsdown_tone4:": "👎🏾",
+":1_tone4:": "👎🏾",
+":thumbdown_tone4:": "👎🏾",
+":thumbsdown_tone5:": "👎🏿",
+":1_tone5:": "👎🏿",
+":thumbdown_tone5:": "👎🏿",
+":point_up_tone1:": "☝🏻",
+":point_up_tone2:": "☝🏼",
+":point_up_tone3:": "☝🏽",
+":point_up_tone4:": "☝🏾",
+":point_up_tone5:": "☝🏿",
+":point_up_2_tone1:": "👆🏻",
+":point_up_2_tone2:": "👆🏼",
+":point_up_2_tone3:": "👆🏽",
+":point_up_2_tone4:": "👆🏾",
+":point_up_2_tone5:": "👆🏿",
+":point_down_tone1:": "👇🏻",
+":point_down_tone2:": "👇🏼",
+":point_down_tone3:": "👇🏽",
+":point_down_tone4:": "👇🏾",
+":point_down_tone5:": "👇🏿",
+":point_left_tone1:": "👈🏻",
+":point_left_tone2:": "👈🏼",
+":point_left_tone3:": "👈🏽",
+":point_left_tone4:": "👈🏾",
+":point_left_tone5:": "👈🏿",
+":point_right_tone1:": "👉🏻",
+":point_right_tone2:": "👉🏼",
+":point_right_tone3:": "👉🏽",
+":point_right_tone4:": "👉🏾",
+":point_right_tone5:": "👉🏿",
+":ok_hand_tone1:": "👌🏻",
+":ok_hand_tone2:": "👌🏼",
+":water_polo_tone3:": "🤽🏽",
+":ok_hand_tone3:": "👌🏽",
+":ok_hand_tone4:": "👌🏾",
+":water_polo_tone4:": "🤽🏾",
+":ok_hand_tone5:": "👌🏿",
+":v_tone1:": "✌🏻",
+":v_tone2:": "✌🏼",
+":v_tone3:": "✌🏽",
+":v_tone4:": "✌🏾",
+":v_tone5:": "✌🏿",
+":punch_tone1:": "👊🏻",
+":punch_tone2:": "👊🏼",
+":punch_tone3:": "👊🏽",
+":punch_tone4:": "👊🏾",
+":punch_tone5:": "👊🏿",
+":fist_tone1:": "✊🏻",
+":fist_tone2:": "✊🏼",
+":fist_tone3:": "✊🏽",
+":fist_tone4:": "✊🏾",
+":fist_tone5:": "✊🏿",
+":raised_hand_tone1:": "✋🏻",
+":raised_hand_tone2:": "✋🏼",
+":raised_hand_tone3:": "✋🏽",
+":raised_hand_tone4:": "✋🏾",
+":raised_hand_tone5:": "✋🏿",
+":muscle_tone1:": "💪🏻",
+":muscle_tone2:": "💪🏼",
+":muscle_tone3:": "💪🏽",
+":muscle_tone4:": "💪🏾",
+":muscle_tone5:": "💪🏿",
+":open_hands_tone1:": "👐🏻",
+":open_hands_tone2:": "👐🏼",
+":open_hands_tone3:": "👐🏽",
+":open_hands_tone4:": "👐🏾",
+":open_hands_tone5:": "👐🏿",
+":pray_tone1:": "🙏🏻",
+":water_polo_tone5:": "🤽🏿",
+":pray_tone2:": "🙏🏼",
+":pray_tone3:": "🙏🏽",
+":handball_tone1:": "🤾🏻",
+":pray_tone4:": "🙏🏾",
+":pray_tone5:": "🙏🏿",
+":handball_tone2:": "🤾🏼",
+":runner_tone1:": "🏃🏻",
+":runner_tone2:": "🏃🏼",
+":runner_tone3:": "🏃🏽",
+":runner_tone4:": "🏃🏾",
+":handball_tone3:": "🤾🏽",
+":runner_tone5:": "🏃🏿",
+":walking_tone1:": "🚶🏻",
+":walking_tone2:": "🚶🏼",
+":walking_tone3:": "🚶🏽",
+":walking_tone4:": "🚶🏾",
+":walking_tone5:": "🚶🏿",
+":dancer_tone1:": "💃🏻",
+":handball_tone4:": "🤾🏾",
+":dancer_tone2:": "💃🏼",
+":dancer_tone3:": "💃🏽",
+":handball_tone5:": "🤾🏿",
+":dancer_tone4:": "💃🏾",
+":dancer_tone5:": "💃🏿",
+":juggling_tone1:": "🤹🏻",
+":juggler_tone1:": "🤹🏻",
+":rowboat_tone1:": "🚣🏻",
+":rowboat_tone2:": "🚣🏼",
+":rowboat_tone3:": "🚣🏽",
+":rowboat_tone4:": "🚣🏾",
+":rowboat_tone5:": "🚣🏿",
+":swimmer_tone1:": "🏊🏻",
+":swimmer_tone2:": "🏊🏼",
+":juggling_tone2:": "🤹🏼",
+":juggler_tone2:": "🤹🏼",
+":swimmer_tone3:": "🏊🏽",
+":swimmer_tone4:": "🏊🏾",
+":swimmer_tone5:": "🏊🏿",
+":juggling_tone3:": "🤹🏽",
+":juggler_tone3:": "🤹🏽",
+":surfer_tone1:": "🏄🏻",
+":surfer_tone2:": "🏄🏼",
+":surfer_tone3:": "🏄🏽",
+":surfer_tone4:": "🏄🏾",
+":surfer_tone5:": "🏄🏿",
+":bath_tone1:": "🛀🏻",
+":bath_tone2:": "🛀🏼",
+":juggling_tone4:": "🤹🏾",
+":juggler_tone4:": "🤹🏾",
+":bath_tone3:": "🛀🏽",
+":bath_tone4:": "🛀🏾",
+":bath_tone5:": "🛀🏿",
+":juggling_tone5:": "🤹🏿",
+":juggler_tone5:": "🤹🏿",
+":bicyclist_tone1:": "🚴🏻",
+":bicyclist_tone2:": "🚴🏼",
+":bicyclist_tone3:": "🚴🏽",
+":rainbow_flag:": "🏳🌈",
+":gay_pride_flag:": "🏳🌈",
+":bicyclist_tone4:": "🚴🏾",
+":bicyclist_tone5:": "🚴🏿",
+":mountain_bicyclist_tone1:": "🚵🏻",
+":mountain_bicyclist_tone2:": "🚵🏼",
+":mountain_bicyclist_tone3:": "🚵🏽",
+":mountain_bicyclist_tone4:": "🚵🏾",
+":mountain_bicyclist_tone5:": "🚵🏿",
+":horse_racing_tone1:": "🏇🏻",
+":horse_racing_tone2:": "🏇🏼",
+":horse_racing_tone3:": "🏇🏽",
+":horse_racing_tone4:": "🏇🏾",
+":horse_racing_tone5:": "🏇🏿",
+":writing_hand_tone1:": "✍🏻",
+":writing_hand_tone2:": "✍🏼",
+":writing_hand_tone3:": "✍🏽",
+":writing_hand_tone4:": "✍🏾",
+":writing_hand_tone5:": "✍🏿",
+":hand_splayed_tone1:": "🖐🏻",
+":raised_hand_with_fingers_splayed_tone1:": "🖐🏻",
+":hand_splayed_tone2:": "🖐🏼",
+":raised_hand_with_fingers_splayed_tone2:": "🖐🏼",
+":hand_splayed_tone3:": "🖐🏽",
+":raised_hand_with_fingers_splayed_tone3:": "🖐🏽",
+":hand_splayed_tone4:": "🖐🏾",
+":raised_hand_with_fingers_splayed_tone4:": "🖐🏾",
+":hand_splayed_tone5:": "🖐🏿",
+":raised_hand_with_fingers_splayed_tone5:": "🖐🏿",
+":middle_finger_tone1:": "🖕🏻",
+":reversed_hand_with_middle_finger_extended_tone1:": "🖕🏻",
+":middle_finger_tone2:": "🖕🏼",
+":reversed_hand_with_middle_finger_extended_tone2:": "🖕🏼",
+":middle_finger_tone3:": "🖕🏽",
+":reversed_hand_with_middle_finger_extended_tone3:": "🖕🏽",
+":middle_finger_tone4:": "🖕🏾",
+":reversed_hand_with_middle_finger_extended_tone4:": "🖕🏾",
+":middle_finger_tone5:": "🖕🏿",
+":reversed_hand_with_middle_finger_extended_tone5:": "🖕🏿",
+":vulcan_tone1:": "🖖🏻",
+":raised_hand_with_part_between_middle_and_ring_fingers_tone1:": "🖖🏻",
+":vulcan_tone2:": "🖖🏼",
+":raised_hand_with_part_between_middle_and_ring_fingers_tone2:": "🖖🏼",
+":vulcan_tone3:": "🖖🏽",
+":raised_hand_with_part_between_middle_and_ring_fingers_tone3:": "🖖🏽",
+":vulcan_tone4:": "🖖🏾",
+":raised_hand_with_part_between_middle_and_ring_fingers_tone4:": "🖖🏾",
+":vulcan_tone5:": "🖖🏿",
+":raised_hand_with_part_between_middle_and_ring_fingers_tone5:": "🖖🏿",
+":family_mmb:": "👨👨👦",
+":family_mmbb:": "👨👨👦👦",
+":family_mmg:": "👨👨👧",
+":family_mmgb:": "👨👨👧👦",
+":family_mmgg:": "👨👨👧👧",
+":family_mwbb:": "👨👩👧👦",
+":family_mwg:": "👨👩👧",
+":family_mwgb:": "👨👩👧👦",
+":family_mwgg:": "👨👩👧👧",
+":family_wwb:": "👩👩👦",
+":family_wwbb:": "👩👩👦👦",
+":family_wwg:": "👩👩👧",
+":family_wwgb:": "👩👩👧👦",
+":family_wwgg:": "👩👩👧👧",
+":couple_ww:": "👭",
+":couple_with_heart_ww:": "👩❤️👩",
+":couple_mm:": "👬",
+":couple_with_heart_mm:": "👨❤️👨",
+":kiss_ww:": "👩❤️💋👩",
+":couplekiss_ww:": "👩❤️💋👩",
+":kiss_mm:": "👨❤️💋👨",
+":couplekiss_mm:": "👨❤️💋👨",
+":tone1:": "🏻",
+":tone2:": "🏼",
+":tone3:": "🏽",
+":tone4:": "🏾",
+":tone5:": "🏿",
+":asterisk:": "ℍ",
+":keycap_asterisk:": "ℍ",
+":eject:": "⏏",
+":eject_symbol:": "⏏",
+":track_next:": "⏭",
+":next_track:": "⏭",
+":track_previous:": "⏮",
+":previous_track:": "⏮",
+":play_pause:": "⏯",
+":eye_in_speech_bubble:": "👁🗨",
+":stopwatch:": "⏱",
+":timer:": "⏲",
+":timer_clock:": "⏲",
+":pause_button:": "⏸",
+":double_vertical_bar:": "⏸",
+":stop_button:": "⏹",
+":record_button:": "⏺",
+":umbrella2:": "☂",
+":snowman2:": "☃",
+":comet:": "☄",
+":shamrock:": "☘",
+":skull_crossbones:": "☠",
+":skull_and_crossbones:": "☠",
+":radioactive:": "☢",
+":radioactive_sign:": "☢",
+":biohazard:": "☣",
+":biohazard_sign:": "☣",
+":orthodox_cross:": "☦",
+":star_and_crescent:": "☪",
+":peace:": "☮",
+":peace_symbol:": "☮",
+":yin_yang:": "☯",
+":wheel_of_dharma:": "☸",
+":frowning2:": "☹",
+":white_frowning_face:": "☹",
+":hammer_pick:": "⚒",
+":hammer_and_pick:": "⚒",
+":crossed_swords:": "⚔",
+":scales:": "⚖",
+":alembic:": "⚗",
+":gear:": "⚙",
+":atom:": "⚛",
+":atom_symbol:": "⚛",
+":fleurdelis:": "⚜",
+":coffin:": "⚰",
+":urn:": "⚱",
+":funeral_urn:": "⚱",
+":thunder_cloud_rain:": "⛈",
+":thunder_cloud_and_rain:": "⛈",
+":pick:": "⛏",
+":helmet_with_cross:": "⛑",
+":helmet_with_white_cross:": "⛑",
+":chains:": "⛓",
+":shinto_shrine:": "⛩",
+":mountain:": "⛰",
+":beach_umbrella:": "⛱",
+":umbrella_on_ground:": "⛱",
+":ferry:": "⛴",
+":skier:": "⛷",
+":ice_skate:": "⛸",
+":basketball_player:": "⛹",
+":person_with_ball:": "⛹",
+":star_of_david:": "✡",
+":heart_exclamation:": "❣",
+":heavy_heart_exclamation_mark_ornament:": "❣",
+":white_sun_small_cloud:": "🌤",
+":white_sun_with_small_cloud:": "🌤",
+":white_sun_cloud:": "🌥",
+":white_sun_behind_cloud:": "🌥",
+":white_sun_rain_cloud:": "🌦",
+":white_sun_behind_cloud_with_rain:": "🌦",
+":mouse_three_button:": "🖱",
+":three_button_mouse:": "🖱",
+":santa_tone1:": "🎅🏻",
+":santa_tone2:": "🎅🏼",
+":santa_tone3:": "🎅🏽",
+":santa_tone4:": "🎅🏾",
+":santa_tone5:": "🎅🏿",
+":metal_tone1:": "🤘🏻",
+":sign_of_the_horns_tone1:": "🤘🏻",
+":metal_tone2:": "🤘🏼",
+":sign_of_the_horns_tone2:": "🤘🏼",
+":metal_tone3:": "🤘🏽",
+":sign_of_the_horns_tone3:": "🤘🏽",
+":metal_tone4:": "🤘🏾",
+":sign_of_the_horns_tone4:": "🤘🏾",
+":metal_tone5:": "🤘🏿",
+":sign_of_the_horns_tone5:": "🤘🏿",
+":lifter_tone1:": "🏋🏻",
+":weight_lifter_tone1:": "🏋🏻",
+":lifter_tone2:": "🏋🏼",
+":weight_lifter_tone2:": "🏋🏼",
+":lifter_tone3:": "🏋🏽",
+":weight_lifter_tone3:": "🏋🏽",
+":lifter_tone4:": "🏋🏾",
+":weight_lifter_tone4:": "🏋🏾",
+":lifter_tone5:": "🏋🏿",
+":weight_lifter_tone5:": "🏋🏿",
+":basketball_player_tone1:": "⛹🏻",
+":person_with_ball_tone1:": "⛹🏻",
+":basketball_player_tone2:": "⛹🏼",
+":person_with_ball_tone2:": "⛹🏼",
+":basketball_player_tone3:": "⛹🏽",
+":person_with_ball_tone3:": "⛹🏽",
+":basketball_player_tone4:": "⛹🏾",
+":person_with_ball_tone4:": "⛹🏾",
+":basketball_player_tone5:": "⛹🏿",
+":person_with_ball_tone5:": "⛹🏿",
+":upside_down:": "🙃",
+":upside_down_face:": "🙃",
+":money_mouth:": "🤑",
+":money_mouth_face:": "🤑",
+":nerd:": "🤓",
+":nerd_face:": "🤓",
+":hugging:": "🤗",
+":hugging_face:": "🤗",
+":rolling_eyes:": "🙄",
+":face_with_rolling_eyes:": "🙄",
+":thinking:": "🤔",
+":thinking_face:": "🤔",
+":zipper_mouth:": "🤐",
+":zipper_mouth_face:": "🤐",
+":thermometer_face:": "🤒",
+":face_with_thermometer:": "🤒",
+":head_bandage:": "🤕",
+":face_with_head_bandage:": "🤕",
+":robot:": "🤖",
+":robot_face:": "🤖",
+":lion_face:": "🦁",
+":lion:": "🦁",
+":unicorn:": "🦄",
+":unicorn_face:": "🦄",
+":scorpion:": "🦂",
+":crab:": "🦀",
+":turkey:": "🦃",
+":cheese:": "🧀",
+":cheese_wedge:": "🧀",
+":hotdog:": "🌭",
+":hot_dog:": "🌭",
+":taco:": "🌮",
+":burrito:": "🌯",
+":popcorn:": "🍿",
+":champagne:": "🍾",
+":bottle_with_popping_cork:": "🍾",
+":bow_and_arrow:": "🏹",
+":archery:": "🏹",
+":amphora:": "🏺",
+":place_of_worship:": "🛐",
+":worship_symbol:": "🛐",
+":kaaba:": "🕋",
+":mosque:": "🕌",
+":synagogue:": "🕍",
+":menorah:": "🕎",
+":prayer_beads:": "📿",
+":cricket:": "🏏",
+":cricket_bat_ball:": "🏏",
+":volleyball:": "🏐",
+":field_hockey:": "🏑",
+":hockey:": "🏒",
+":ping_pong:": "🏓",
+":table_tennis:": "🏓",
+":badminton:": "🏸",
+":flag_ax:": "🇦🇽",
+":ax:": "🇦🇽",
+":flag_ta:": "🇹🇦",
+":ta:": "🇹🇦",
+":flag_io:": "🇮🇴",
+":io:": "🇮🇴",
+":flag_bq:": "🇧🇶",
+":bq:": "🇧🇶",
+":flag_cx:": "🇨🇽",
+":cx:": "🇨🇽",
+":flag_cc:": "🇨🇨",
+":cc:": "🇨🇨",
+":flag_gg:": "🇬🇬",
+":gg:": "🇬🇬",
+":flag_im:": "🇮🇲",
+":im:": "🇮🇲",
+":flag_yt:": "🇾🇹",
+":yt:": "🇾🇹",
+":flag_nf:": "🇳🇫",
+":nf:": "🇳🇫",
+":flag_pn:": "🇵🇳",
+":pn:": "🇵🇳",
+":flag_bl:": "🇧🇱",
+":bl:": "🇧🇱",
+":flag_pm:": "🇵🇲",
+":pm:": "🇵🇲",
+":flag_gs:": "🇬🇸",
+":gs:": "🇬🇸",
+":flag_tk:": "🇹🇰",
+":tk:": "🇹🇰",
+":flag_bv:": "🇧🇻",
+":bv:": "🇧🇻",
+":flag_hm:": "🇭🇲",
+":hm:": "🇭🇲",
+":flag_sj:": "🇸🇯",
+":sj:": "🇸🇯",
+":flag_um:": "🇺🇲",
+":um:": "🇺🇲",
+":flag_ic:": "🇮🇨",
+":ic:": "🇮🇨",
+":flag_ea:": "🇪🇦",
+":ea:": "🇪🇦",
+":flag_cp:": "🇨🇵",
+":cp:": "🇨🇵",
+":flag_dg:": "🇩🇬",
+":dg:": "🇩🇬",
+":flag_as:": "🇦🇸",
+":as:": "🇦🇸",
+":flag_aq:": "🇦🇶",
+":aq:": "🇦🇶",
+":flag_vg:": "🇻🇬",
+":vg:": "🇻🇬",
+":flag_ck:": "🇨🇰",
+":ck:": "🇨🇰",
+":flag_cw:": "🇨🇼",
+":cw:": "🇨🇼",
+":flag_eu:": "🇪🇺",
+":eu:": "🇪🇺",
+":flag_gf:": "🇬🇫",
+":gf:": "🇬🇫",
+":flag_tf:": "🇹🇫",
+":tf:": "🇹🇫",
+":flag_gp:": "🇬🇵",
+":gp:": "🇬🇵",
+":flag_mq:": "🇲🇶",
+":mq:": "🇲🇶",
+":flag_mp:": "🇲🇵",
+":mp:": "🇲🇵",
+":flag_re:": "🇷🇪",
+":re:": "🇷🇪",
+":flag_sx:": "🇸🇽",
+":sx:": "🇸🇽",
+":flag_ss:": "🇸🇸",
+":ss:": "🇸🇸",
+":flag_tc:": "🇹🇨",
+":tc:": "🇹🇨",
+":flag_mf:": "🇲🇫",
+":mf:": "🇲🇫",
+":spy_tone1:": "🕵🏻",
+":sleuth_or_spy_tone1:": "🕵🏻",
+":spy_tone2:": "🕵🏼",
+":sleuth_or_spy_tone2:": "🕵🏼",
+":spy_tone3:": "🕵🏽",
+":sleuth_or_spy_tone3:": "🕵🏽",
+":spy_tone4:": "🕵🏾",
+":sleuth_or_spy_tone4:": "🕵🏾",
+":spy_tone5:": "🕵🏿",
+":sleuth_or_spy_tone5:": "🕵🏿",
+":drum:": "🥁",
+":drum_with_drumsticks:": "🥁",
+":shrimp:": "🦐",
+":squid:": "🦑",
+":egg:": "🥚",
+":milk:": "🥛",
+":glass_of_milk:": "🥛",
+":peanuts:": "🥜",
+":shelled_peanut:": "🥜",
+":kiwi:": "🥝",
+":kiwifruit:": "🥝",
+":pancakes:": "🥞",
+":regional_indicator_w:": "🇼",
+":regional_indicator_v:": "🇻",
+":regional_indicator_u:": "🇺",
+":regional_indicator_t:": "🇹",
+":regional_indicator_s:": "🇸",
+":regional_indicator_r:": "🇷",
+":regional_indicator_q:": "🇶",
+":regional_indicator_p:": "🇵",
+":regional_indicator_o:": "🇴",
+":regional_indicator_n:": "🇳",
+":regional_indicator_m:": "🇲",
+":regional_indicator_l:": "🇱",
+":regional_indicator_k:": "🇰",
+":regional_indicator_j:": "🇯",
+":regional_indicator_i:": "🇮",
+":regional_indicator_h:": "🇭",
+":regional_indicator_g:": "🇬",
+":regional_indicator_f:": "🇫",
+":regional_indicator_e:": "🇪",
+":regional_indicator_d:": "🇩",
+":regional_indicator_c:": "🇨",
+":regional_indicator_b:": "🇧",
+":regional_indicator_a:": "🇦",
+":digit_nine:": "9",
+":digit_eight:": "8",
+":digit_seven:": "7",
+":digit_six:": "6",
+":digit_five:": "5",
+":digit_four:": "4",
+":digit_three:": "3",
+":digit_two:": "2",
+":digit_one:": "1",
+":digit_zero:": "0",
+":men_with_bunny_ears_partying:": "👯",
+":women_with_bunny_ears_partying:": "👯",
+":snowboarder_tone1:": "🏂🏻",
+":snowboarder_light_skin_tone:": "🏂🏻",
+":man_golfing:": "🏌",
+":man_golfing_tone1:": "🏌🏻",
+":man_golfing_light_skin_tone:": "🏌🏻",
+":man_golfing_tone2:": "🏌🏼",
+":man_golfing_medium_light_skin_tone:": "🏌🏼",
+":man_golfing_tone3:": "🏌🏽",
+":man_golfing_medium_skin_tone:": "🏌🏽",
+":man_golfing_tone4:": "🏌🏾",
+":man_golfing_medium_dark_skin_tone:": "🏌🏾",
+":man_golfing_tone5:": "🏌🏿",
+":man_golfing_dark_skin_tone:": "🏌🏿",
+":woman_golfing:": "🏌",
+":woman_golfing_tone1:": "🏌🏻",
+":woman_golfing_light_skin_tone:": "🏌🏻",
+":woman_golfing_tone2:": "🏌🏼",
+":woman_golfing_medium_light_skin_tone:": "🏌🏼",
+":woman_golfing_tone3:": "🏌🏽",
+":woman_golfing_medium_skin_tone:": "🏌🏽",
+":woman_golfing_tone4:": "🏌🏾",
+":woman_golfing_medium_dark_skin_tone:": "🏌🏾",
+":woman_golfing_tone5:": "🏌🏿",
+":woman_golfing_dark_skin_tone:": "🏌🏿",
+":men_wrestling:": "🤼",
+":women_wrestling:": "🤼",
+":man_juggling_tone5:": "🤹🏿",
+":man_juggling_dark_skin_tone:": "🤹🏿",
+":man_juggling_tone4:": "🤹🏾",
+":man_juggling_medium_dark_skin_tone:": "🤹🏾",
+":man_juggling_tone3:": "🤹🏽",
+":man_juggling_medium_skin_tone:": "🤹🏽",
+":man_juggling_tone2:": "🤹🏼",
+":man_juggling_medium_light_skin_tone:": "🤹🏼",
+":man_juggling_tone1:": "🤹🏻",
+":man_juggling_light_skin_tone:": "🤹🏻",
+":man_juggling:": "🤹",
+":woman_juggling_tone5:": "🤹🏿",
+":woman_juggling_dark_skin_tone:": "🤹🏿",
+":woman_juggling_tone4:": "🤹🏾",
+":woman_juggling_medium_dark_skin_tone:": "🤹🏾",
+":woman_juggling_tone3:": "🤹🏽",
+":woman_juggling_medium_skin_tone:": "🤹🏽",
+":woman_juggling_tone2:": "🤹🏼",
+":woman_juggling_medium_light_skin_tone:": "🤹🏼",
+":woman_juggling_tone1:": "🤹🏻",
+":woman_juggling_light_skin_tone:": "🤹🏻",
+":woman_juggling:": "🤹",
+":man_playing_handball_tone5:": "🤾🏿",
+":man_playing_handball_dark_skin_tone:": "🤾🏿",
+":man_playing_handball_tone4:": "🤾🏾",
+":man_playing_handball_medium_dark_skin_tone:": "🤾🏾",
+":man_playing_handball_tone3:": "🤾🏽",
+":man_playing_handball_medium_skin_tone:": "🤾🏽",
+":man_playing_handball_tone2:": "🤾🏼",
+":man_playing_handball_medium_light_skin_tone:": "🤾🏼",
+":man_playing_handball_tone1:": "🤾🏻",
+":man_playing_handball_light_skin_tone:": "🤾🏻",
+":man_playing_handball:": "🤾",
+":woman_playing_handball_tone5:": "🤾🏿",
+":woman_playing_handball_dark_skin_tone:": "🤾🏿",
+":woman_playing_handball_tone4:": "🤾🏾",
+":woman_playing_handball_medium_dark_skin_tone:": "🤾🏾",
+":woman_playing_handball_tone3:": "🤾🏽",
+":woman_playing_handball_medium_skin_tone:": "🤾🏽",
+":woman_playing_handball_tone2:": "🤾🏼",
+":woman_playing_handball_medium_light_skin_tone:": "🤾🏼",
+":woman_playing_handball_tone1:": "🤾🏻",
+":woman_playing_handball_light_skin_tone:": "🤾🏻",
+":woman_playing_handball:": "🤾",
+":man_playing_water_polo_tone5:": "🤽🏿",
+":man_playing_water_polo_dark_skin_tone:": "🤽🏿",
+":man_playing_water_polo_tone4:": "🤽🏾",
+":man_playing_water_polo_medium_dark_skin_tone:": "🤽🏾",
+":man_playing_water_polo_tone3:": "🤽🏽",
+":man_playing_water_polo_medium_skin_tone:": "🤽🏽",
+":man_playing_water_polo_tone2:": "🤽🏼",
+":man_playing_water_polo_medium_light_skin_tone:": "🤽🏼",
+":man_playing_water_polo_tone1:": "🤽🏻",
+":man_playing_water_polo_light_skin_tone:": "🤽🏻",
+":man_playing_water_polo:": "🤽",
+":woman_playing_water_polo_tone5:": "🤽🏿",
+":woman_playing_water_polo_dark_skin_tone:": "🤽🏿",
+":woman_playing_water_polo_tone4:": "🤽🏾",
+":woman_playing_water_polo_medium_dark_skin_tone:": "🤽🏾",
+":woman_playing_water_polo_tone3:": "🤽🏽",
+":woman_playing_water_polo_medium_skin_tone:": "🤽🏽",
+":woman_playing_water_polo_tone2:": "🤽🏼",
+":woman_playing_water_polo_medium_light_skin_tone:": "🤽🏼",
+":woman_playing_water_polo_tone1:": "🤽🏻",
+":woman_playing_water_polo_light_skin_tone:": "🤽🏻",
+":woman_playing_water_polo:": "🤽",
+":man_cartwheeling_tone5:": "🤸🏿",
+":man_cartwheeling_dark_skin_tone:": "🤸🏿",
+":man_cartwheeling_tone4:": "🤸🏾",
+":man_cartwheeling_medium_dark_skin_tone:": "🤸🏾",
+":man_cartwheeling_tone3:": "🤸🏽",
+":man_cartwheeling_medium_skin_tone:": "🤸🏽",
+":man_cartwheeling_tone2:": "🤸🏼",
+":man_cartwheeling_medium_light_skin_tone:": "🤸🏼",
+":man_cartwheeling_tone1:": "🤸🏻",
+":man_cartwheeling_light_skin_tone:": "🤸🏻",
+":man_cartwheeling:": "🤸",
+":woman_cartwheeling_tone5:": "🤸🏿",
+":woman_cartwheeling_dark_skin_tone:": "🤸🏿",
+":woman_cartwheeling_tone4:": "🤸🏾",
+":woman_cartwheeling_medium_dark_skin_tone:": "🤸🏾",
+":woman_cartwheeling_tone3:": "🤸🏽",
+":woman_cartwheeling_medium_skin_tone:": "🤸🏽",
+":woman_cartwheeling_tone2:": "🤸🏼",
+":woman_cartwheeling_medium_light_skin_tone:": "🤸🏼",
+":woman_cartwheeling_tone1:": "🤸🏻",
+":woman_cartwheeling_light_skin_tone:": "🤸🏻",
+":woman_cartwheeling:": "🤸",
+":man_walking_tone5:": "🚶🏿",
+":man_walking_dark_skin_tone:": "🚶🏿",
+":man_walking_tone4:": "🚶🏾",
+":man_walking_medium_dark_skin_tone:": "🚶🏾",
+":man_walking_tone3:": "🚶🏽",
+":man_walking_medium_skin_tone:": "🚶🏽",
+":man_walking_tone2:": "🚶🏼",
+":man_walking_medium_light_skin_tone:": "🚶🏼",
+":man_walking_tone1:": "🚶🏻",
+":man_walking_light_skin_tone:": "🚶🏻",
+":man_walking:": "🚶",
+":woman_walking_tone5:": "🚶🏿",
+":woman_walking_dark_skin_tone:": "🚶🏿",
+":woman_walking_tone4:": "🚶🏾",
+":woman_walking_medium_dark_skin_tone:": "🚶🏾",
+":woman_walking_tone3:": "🚶🏽",
+":woman_walking_medium_skin_tone:": "🚶🏽",
+":woman_walking_tone2:": "🚶🏼",
+":woman_walking_medium_light_skin_tone:": "🚶🏼",
+":woman_walking_tone1:": "🚶🏻",
+":woman_walking_light_skin_tone:": "🚶🏻",
+":woman_walking:": "🚶",
+":man_mountain_biking_tone5:": "🚵🏿",
+":man_mountain_biking_dark_skin_tone:": "🚵🏿",
+":man_mountain_biking_tone4:": "🚵🏾",
+":man_mountain_biking_medium_dark_skin_tone:": "🚵🏾",
+":man_mountain_biking_tone3:": "🚵🏽",
+":man_mountain_biking_medium_skin_tone:": "🚵🏽",
+":man_mountain_biking_tone2:": "🚵🏼",
+":man_mountain_biking_medium_light_skin_tone:": "🚵🏼",
+":man_mountain_biking_tone1:": "🚵🏻",
+":man_mountain_biking_light_skin_tone:": "🚵🏻",
+":man_mountain_biking:": "🚵",
+":woman_mountain_biking_tone5:": "🚵🏿",
+":woman_mountain_biking_dark_skin_tone:": "🚵🏿",
+":woman_mountain_biking_tone4:": "🚵🏾",
+":woman_mountain_biking_medium_dark_skin_tone:": "🚵🏾",
+":woman_mountain_biking_tone3:": "🚵🏽",
+":woman_mountain_biking_medium_skin_tone:": "🚵🏽",
+":woman_mountain_biking_tone2:": "🚵🏼",
+":woman_mountain_biking_medium_light_skin_tone:": "🚵🏼",
+":woman_mountain_biking_tone1:": "🚵🏻",
+":woman_mountain_biking_light_skin_tone:": "🚵🏻",
+":woman_mountain_biking:": "🚵",
+":man_biking_tone5:": "🚴🏿",
+":man_biking_dark_skin_tone:": "🚴🏿",
+":man_biking_tone4:": "🚴🏾",
+":man_biking_medium_dark_skin_tone:": "🚴🏾",
+":man_biking_tone3:": "🚴🏽",
+":man_biking_medium_skin_tone:": "🚴🏽",
+":man_biking_tone2:": "🚴🏼",
+":man_biking_medium_light_skin_tone:": "🚴🏼",
+":man_biking_tone1:": "🚴🏻",
+":man_biking_light_skin_tone:": "🚴🏻",
+":man_biking:": "🚴",
+":woman_biking_tone5:": "🚴🏿",
+":woman_biking_dark_skin_tone:": "🚴🏿",
+":woman_biking_tone4:": "🚴🏾",
+":woman_biking_medium_dark_skin_tone:": "🚴🏾",
+":woman_biking_tone3:": "🚴🏽",
+":woman_biking_medium_skin_tone:": "🚴🏽",
+":woman_biking_tone2:": "🚴🏼",
+":woman_biking_medium_light_skin_tone:": "🚴🏼",
+":woman_biking_tone1:": "🚴🏻",
+":woman_biking_light_skin_tone:": "🚴🏻",
+":woman_biking:": "🚴",
+":man_rowing_boat_tone5:": "🚣🏿",
+":man_rowing_boat_dark_skin_tone:": "🚣🏿",
+":man_rowing_boat_tone4:": "🚣🏾",
+":man_rowing_boat_medium_dark_skin_tone:": "🚣🏾",
+":man_rowing_boat_tone3:": "🚣🏽",
+":man_rowing_boat_medium_skin_tone:": "🚣🏽",
+":man_rowing_boat_tone2:": "🚣🏼",
+":man_rowing_boat_medium_light_skin_tone:": "🚣🏼",
+":man_rowing_boat_tone1:": "🚣🏻",
+":man_rowing_boat_light_skin_tone:": "🚣🏻",
+":man_rowing_boat:": "🚣",
+":woman_rowing_boat_tone5:": "🚣🏿",
+":woman_rowing_boat_dark_skin_tone:": "🚣🏿",
+":woman_rowing_boat_tone4:": "🚣🏾",
+":woman_rowing_boat_medium_dark_skin_tone:": "🚣🏾",
+":woman_rowing_boat_tone3:": "🚣🏽",
+":woman_rowing_boat_medium_skin_tone:": "🚣🏽",
+":woman_rowing_boat_tone2:": "🚣🏼",
+":woman_rowing_boat_medium_light_skin_tone:": "🚣🏼",
+":woman_rowing_boat_tone1:": "🚣🏻",
+":woman_rowing_boat_light_skin_tone:": "🚣🏻",
+":woman_rowing_boat:": "🚣",
+":man_lifting_weights_tone5:": "🏋🏿",
+":man_lifting_weights_dark_skin_tone:": "🏋🏿",
+":man_lifting_weights_tone4:": "🏋🏾",
+":man_lifting_weights_medium_dark_skin_tone:": "🏋🏾",
+":man_lifting_weights_tone3:": "🏋🏽",
+":man_lifting_weights_medium_skin_tone:": "🏋🏽",
+":man_lifting_weights_tone2:": "🏋🏼",
+":man_lifting_weights_medium_light_skin_tone:": "🏋🏼",
+":man_lifting_weights_tone1:": "🏋🏻",
+":man_lifting_weights_light_skin_tone:": "🏋🏻",
+":man_lifting_weights:": "🏋",
+":woman_lifting_weights_tone5:": "🏋🏿",
+":woman_lifting_weights_dark_skin_tone:": "🏋🏿",
+":woman_lifting_weights_tone4:": "🏋🏾",
+":woman_lifting_weights_medium_dark_skin_tone:": "🏋🏾",
+":woman_lifting_weights_tone3:": "🏋🏽",
+":woman_lifting_weights_medium_skin_tone:": "🏋🏽",
+":woman_lifting_weights_tone2:": "🏋🏼",
+":woman_lifting_weights_medium_light_skin_tone:": "🏋🏼",
+":woman_lifting_weights_tone1:": "🏋🏻",
+":woman_lifting_weights_light_skin_tone:": "🏋🏻",
+":woman_lifting_weights:": "🏋",
+":man_swimming_tone5:": "🏊🏿",
+":man_swimming_dark_skin_tone:": "🏊🏿",
+":man_swimming_tone4:": "🏊🏾",
+":man_swimming_medium_dark_skin_tone:": "🏊🏾",
+":man_swimming_tone3:": "🏊🏽",
+":man_swimming_medium_skin_tone:": "🏊🏽",
+":man_swimming_tone2:": "🏊🏼",
+":man_swimming_medium_light_skin_tone:": "🏊🏼",
+":man_swimming_tone1:": "🏊🏻",
+":man_swimming_light_skin_tone:": "🏊🏻",
+":man_swimming:": "🏊",
+":woman_swimming_tone5:": "🏊🏿",
+":woman_swimming_dark_skin_tone:": "🏊🏿",
+":woman_swimming_tone4:": "🏊🏾",
+":woman_swimming_medium_dark_skin_tone:": "🏊🏾",
+":woman_swimming_tone3:": "🏊🏽",
+":woman_swimming_medium_skin_tone:": "🏊🏽",
+":woman_swimming_tone2:": "🏊🏼",
+":woman_swimming_medium_light_skin_tone:": "🏊🏼",
+":woman_swimming_tone1:": "🏊🏻",
+":woman_swimming_light_skin_tone:": "🏊🏻",
+":woman_swimming:": "🏊",
+":man_surfing_tone5:": "🏄🏿",
+":man_surfing_dark_skin_tone:": "🏄🏿",
+":man_surfing_tone4:": "🏄🏾",
+":man_surfing_medium_dark_skin_tone:": "🏄🏾",
+":man_surfing_tone3:": "🏄🏽",
+":man_surfing_medium_skin_tone:": "🏄🏽",
+":man_surfing_tone2:": "🏄🏼",
+":man_surfing_medium_light_skin_tone:": "🏄🏼",
+":man_surfing_tone1:": "🏄🏻",
+":man_surfing_light_skin_tone:": "🏄🏻",
+":man_surfing:": "🏄",
+":woman_surfing_tone5:": "🏄🏿",
+":woman_surfing_dark_skin_tone:": "🏄🏿",
+":woman_surfing_tone4:": "🏄🏾",
+":woman_surfing_medium_dark_skin_tone:": "🏄🏾",
+":woman_surfing_tone3:": "🏄🏽",
+":woman_surfing_medium_skin_tone:": "🏄🏽",
+":woman_surfing_tone2:": "🏄🏼",
+":woman_surfing_medium_light_skin_tone:": "🏄🏼",
+":woman_surfing_tone1:": "🏄🏻",
+":woman_surfing_light_skin_tone:": "🏄🏻",
+":woman_surfing:": "🏄",
+":man_running_tone5:": "🏃🏿",
+":man_running_dark_skin_tone:": "🏃🏿",
+":man_running_tone4:": "🏃🏾",
+":man_running_medium_dark_skin_tone:": "🏃🏾",
+":man_running_tone3:": "🏃🏽",
+":man_running_medium_skin_tone:": "🏃🏽",
+":man_running_tone2:": "🏃🏼",
+":man_running_medium_light_skin_tone:": "🏃🏼",
+":man_running_tone1:": "🏃🏻",
+":man_running_light_skin_tone:": "🏃🏻",
+":man_running:": "🏃",
+":woman_running_tone5:": "🏃🏿",
+":woman_running_dark_skin_tone:": "🏃🏿",
+":woman_running_tone4:": "🏃🏾",
+":woman_running_medium_dark_skin_tone:": "🏃🏾",
+":woman_running_tone3:": "🏃🏽",
+":woman_running_medium_skin_tone:": "🏃🏽",
+":woman_running_tone2:": "🏃🏼",
+":woman_running_medium_light_skin_tone:": "🏃🏼",
+":woman_running_tone1:": "🏃🏻",
+":woman_running_light_skin_tone:": "🏃🏻",
+":woman_running:": "🏃",
+":man_bouncing_ball_tone5:": "",
+":man_bouncing_ball_dark_skin_tone:": "",
+":man_bouncing_ball_tone4:": "",
+":man_bouncing_ball_medium_dark_skin_tone:": "",
+":man_bouncing_ball_tone3:": "",
+":man_bouncing_ball_medium_skin_tone:": "",
+":man_bouncing_ball_tone2:": "𐢞",
+":man_bouncing_ball_medium_light_skin_tone:": "𐢞",
+":man_bouncing_ball_tone1:": "",
+":man_bouncing_ball_light_skin_tone:": "",
+":man_bouncing_ball:": "䴻",
+":woman_bouncing_ball_tone5:": "",
+":woman_bouncing_ball_dark_skin_tone:": "",
+":woman_bouncing_ball_tone4:": "",
+":woman_bouncing_ball_medium_dark_skin_tone:": "",
+":woman_bouncing_ball_tone3:": "",
+":woman_bouncing_ball_medium_skin_tone:": "",
+":woman_bouncing_ball_tone2:": "𐢜",
+":woman_bouncing_ball_medium_light_skin_tone:": "𐢜",
+":woman_bouncing_ball_tone1:": "",
+":woman_bouncing_ball_light_skin_tone:": "",
+":woman_bouncing_ball:": "䴹",
+":man_shrugging_tone5:": "🤷🏿",
+":man_shrugging_dark_skin_tone:": "🤷🏿",
+":man_shrugging_tone4:": "🤷🏾",
+":man_shrugging_medium_dark_skin_tone:": "🤷🏾",
+":man_shrugging_tone3:": "🤷🏽",
+":man_shrugging_medium_skin_tone:": "🤷🏽",
+":man_shrugging_tone2:": "🤷🏼",
+":man_shrugging_medium_light_skin_tone:": "🤷🏼",
+":man_shrugging_tone1:": "🤷🏻",
+":man_shrugging_light_skin_tone:": "🤷🏻",
+":man_shrugging:": "🤷",
+":woman_shrugging_tone5:": "🤷🏿",
+":woman_shrugging_dark_skin_tone:": "🤷🏿",
+":woman_shrugging_tone4:": "🤷🏾",
+":woman_shrugging_medium_dark_skin_tone:": "🤷🏾",
+":woman_shrugging_tone3:": "🤷🏽",
+":woman_shrugging_medium_skin_tone:": "🤷🏽",
+":woman_shrugging_tone2:": "🤷🏼",
+":woman_shrugging_medium_light_skin_tone:": "🤷🏼",
+":woman_shrugging_tone1:": "🤷🏻",
+":woman_shrugging_light_skin_tone:": "🤷🏻",
+":woman_shrugging:": "🤷",
+":man_facepalming_tone5:": "🤦🏿",
+":man_facepalming_dark_skin_tone:": "🤦🏿",
+":man_facepalming_tone4:": "🤦🏾",
+":man_facepalming_medium_dark_skin_tone:": "🤦🏾",
+":man_facepalming_tone3:": "🤦🏽",
+":man_facepalming_medium_skin_tone:": "🤦🏽",
+":man_facepalming_tone2:": "🤦🏼",
+":man_facepalming_medium_light_skin_tone:": "🤦🏼",
+":man_facepalming_tone1:": "🤦🏻",
+":man_facepalming_light_skin_tone:": "🤦🏻",
+":man_facepalming:": "🤦",
+":woman_facepalming_tone5:": "🤦🏿",
+":woman_facepalming_dark_skin_tone:": "🤦🏿",
+":woman_facepalming_tone4:": "🤦🏾",
+":woman_facepalming_medium_dark_skin_tone:": "🤦🏾",
+":woman_facepalming_tone3:": "🤦🏽",
+":woman_facepalming_medium_skin_tone:": "🤦🏽",
+":woman_facepalming_tone2:": "🤦🏼",
+":woman_facepalming_medium_light_skin_tone:": "🤦🏼",
+":woman_facepalming_tone1:": "🤦🏻",
+":woman_facepalming_light_skin_tone:": "🤦🏻",
+":woman_facepalming:": "🤦",
+":man_pouting_tone5:": "🙎🏿",
+":man_pouting_dark_skin_tone:": "🙎🏿",
+":man_pouting_tone4:": "🙎🏾",
+":man_pouting_medium_dark_skin_tone:": "🙎🏾",
+":man_pouting_tone3:": "🙎🏽",
+":man_pouting_medium_skin_tone:": "🙎🏽",
+":man_pouting_tone2:": "🙎🏼",
+":man_pouting_medium_light_skin_tone:": "🙎🏼",
+":man_pouting_tone1:": "🙎🏻",
+":man_pouting_light_skin_tone:": "🙎🏻",
+":man_pouting:": "🙎",
+":woman_pouting_tone5:": "🙎🏿",
+":woman_pouting_dark_skin_tone:": "🙎🏿",
+":woman_pouting_tone4:": "🙎🏾",
+":woman_pouting_medium_dark_skin_tone:": "🙎🏾",
+":woman_pouting_tone3:": "🙎🏽",
+":woman_pouting_medium_skin_tone:": "🙎🏽",
+":woman_pouting_tone2:": "🙎🏼",
+":woman_pouting_medium_light_skin_tone:": "🙎🏼",
+":woman_pouting_tone1:": "🙎🏻",
+":woman_pouting_light_skin_tone:": "🙎🏻",
+":woman_pouting:": "🙎",
+":man_frowning_tone5:": "🙍🏿",
+":man_frowning_dark_skin_tone:": "🙍🏿",
+":man_frowning_tone4:": "🙍🏾",
+":man_frowning_medium_dark_skin_tone:": "🙍🏾",
+":man_frowning_tone3:": "🙍🏽",
+":man_frowning_medium_skin_tone:": "🙍🏽",
+":man_frowning_tone2:": "🙍🏼",
+":man_frowning_medium_light_skin_tone:": "🙍🏼",
+":man_frowning_tone1:": "🙍🏻",
+":man_frowning_light_skin_tone:": "🙍🏻",
+":man_frowning:": "🙍",
+":woman_frowning_tone5:": "🙍🏿",
+":woman_frowning_dark_skin_tone:": "🙍🏿",
+":woman_frowning_tone4:": "🙍🏾",
+":woman_frowning_medium_dark_skin_tone:": "🙍🏾",
+":woman_frowning_tone3:": "🙍🏽",
+":woman_frowning_medium_skin_tone:": "🙍🏽",
+":woman_frowning_tone2:": "🙍🏼",
+":woman_frowning_medium_light_skin_tone:": "🙍🏼",
+":woman_frowning_tone1:": "🙍🏻",
+":woman_frowning_light_skin_tone:": "🙍🏻",
+":woman_frowning:": "🙍",
+":man_raising_hand_tone5:": "🙋🏿",
+":man_raising_hand_dark_skin_tone:": "🙋🏿",
+":man_raising_hand_tone4:": "🙋🏾",
+":man_raising_hand_medium_dark_skin_tone:": "🙋🏾",
+":man_raising_hand_tone3:": "🙋🏽",
+":man_raising_hand_medium_skin_tone:": "🙋🏽",
+":man_raising_hand_tone2:": "🙋🏼",
+":man_raising_hand_medium_light_skin_tone:": "🙋🏼",
+":man_raising_hand_tone1:": "🙋🏻",
+":man_raising_hand_light_skin_tone:": "🙋🏻",
+":man_raising_hand:": "🙋",
+":woman_raising_hand_tone5:": "🙋🏿",
+":woman_raising_hand_dark_skin_tone:": "🙋🏿",
+":woman_raising_hand_tone4:": "🙋🏾",
+":woman_raising_hand_medium_dark_skin_tone:": "🙋🏾",
+":woman_raising_hand_tone3:": "🙋🏽",
+":woman_raising_hand_medium_skin_tone:": "🙋🏽",
+":woman_raising_hand_tone2:": "🙋🏼",
+":woman_raising_hand_medium_light_skin_tone:": "🙋🏼",
+":woman_raising_hand_tone1:": "🙋🏻",
+":woman_raising_hand_light_skin_tone:": "🙋🏻",
+":woman_raising_hand:": "🙋",
+":man_bowing_tone5:": "🙇🏿",
+":man_bowing_dark_skin_tone:": "🙇🏿",
+":man_bowing_tone4:": "🙇🏾",
+":man_bowing_medium_dark_skin_tone:": "🙇🏾",
+":man_bowing_tone3:": "🙇🏽",
+":man_bowing_medium_skin_tone:": "🙇🏽",
+":man_bowing_tone2:": "🙇🏼",
+":man_bowing_medium_light_skin_tone:": "🙇🏼",
+":man_bowing_tone1:": "🙇🏻",
+":man_bowing_light_skin_tone:": "🙇🏻",
+":man_bowing:": "🙇",
+":woman_bowing_tone5:": "🙇🏿",
+":woman_bowing_dark_skin_tone:": "🙇🏿",
+":woman_bowing_tone4:": "🙇🏾",
+":woman_bowing_medium_dark_skin_tone:": "🙇🏾",
+":woman_bowing_tone3:": "🙇🏽",
+":woman_bowing_medium_skin_tone:": "🙇🏽",
+":woman_bowing_tone2:": "🙇🏼",
+":woman_bowing_medium_light_skin_tone:": "🙇🏼",
+":woman_bowing_tone1:": "🙇🏻",
+":woman_bowing_light_skin_tone:": "🙇🏻",
+":woman_bowing:": "🙇",
+":man_gesturing_ok_tone5:": "🙆🏿",
+":man_gesturing_ok_dark_skin_tone:": "🙆🏿",
+":man_gesturing_ok_tone4:": "🙆🏾",
+":man_gesturing_ok_medium_dark_skin_tone:": "🙆🏾",
+":man_gesturing_ok_tone3:": "🙆🏽",
+":man_gesturing_ok_medium_skin_tone:": "🙆🏽",
+":man_gesturing_ok_tone2:": "🙆🏼",
+":man_gesturing_ok_medium_light_skin_tone:": "🙆🏼",
+":man_gesturing_ok_tone1:": "🙆🏻",
+":man_gesturing_ok_light_skin_tone:": "🙆🏻",
+":man_gesturing_ok:": "🙆",
+":woman_gesturing_ok_tone5:": "🙆🏿",
+":woman_gesturing_ok_dark_skin_tone:": "🙆🏿",
+":woman_gesturing_ok_tone4:": "🙆🏾",
+":woman_gesturing_ok_medium_dark_skin_tone:": "🙆🏾",
+":woman_gesturing_ok_tone3:": "🙆🏽",
+":woman_gesturing_ok_medium_skin_tone:": "🙆🏽",
+":woman_gesturing_ok_tone2:": "🙆🏼",
+":woman_gesturing_ok_medium_light_skin_tone:": "🙆🏼",
+":woman_gesturing_ok_tone1:": "🙆🏻",
+":woman_gesturing_ok_light_skin_tone:": "🙆🏻",
+":woman_gesturing_ok:": "🙆",
+":man_gesturing_no_tone5:": "🙅🏿",
+":man_gesturing_no_dark_skin_tone:": "🙅🏿",
+":man_gesturing_no_tone4:": "🙅🏾",
+":man_gesturing_no_medium_dark_skin_tone:": "🙅🏾",
+":man_gesturing_no_tone3:": "🙅🏽",
+":man_gesturing_no_medium_skin_tone:": "🙅🏽",
+":man_gesturing_no_tone2:": "🙅🏼",
+":man_gesturing_no_medium_light_skin_tone:": "🙅🏼",
+":man_gesturing_no_tone1:": "🙅🏻",
+":man_gesturing_no_light_skin_tone:": "🙅🏻",
+":man_gesturing_no:": "🙅",
+":woman_gesturing_no_tone5:": "🙅🏿",
+":woman_gesturing_no_dark_skin_tone:": "🙅🏿",
+":woman_gesturing_no_tone4:": "🙅🏾",
+":woman_gesturing_no_medium_dark_skin_tone:": "🙅🏾",
+":woman_gesturing_no_tone3:": "🙅🏽",
+":woman_gesturing_no_medium_skin_tone:": "🙅🏽",
+":woman_gesturing_no_tone2:": "🙅🏼",
+":woman_gesturing_no_medium_light_skin_tone:": "🙅🏼",
+":woman_gesturing_no_tone1:": "🙅🏻",
+":woman_gesturing_no_light_skin_tone:": "🙅🏻",
+":woman_gesturing_no:": "🙅",
+":man_getting_haircut_tone5:": "💇🏿",
+":man_getting_haircut_dark_skin_tone:": "💇🏿",
+":man_getting_haircut_tone4:": "💇🏾",
+":man_getting_haircut_medium_dark_skin_tone:": "💇🏾",
+":man_getting_haircut_tone3:": "💇🏽",
+":man_getting_haircut_medium_skin_tone:": "💇🏽",
+":man_getting_haircut_tone2:": "💇🏼",
+":man_getting_haircut_medium_light_skin_tone:": "💇🏼",
+":man_getting_haircut_tone1:": "💇🏻",
+":man_getting_haircut_light_skin_tone:": "💇🏻",
+":man_getting_haircut:": "💇",
+":woman_getting_haircut_tone5:": "💇🏿",
+":woman_getting_haircut_dark_skin_tone:": "💇🏿",
+":woman_getting_haircut_tone4:": "💇🏾",
+":woman_getting_haircut_medium_dark_skin_tone:": "💇🏾",
+":woman_getting_haircut_tone3:": "💇🏽",
+":woman_getting_haircut_medium_skin_tone:": "💇🏽",
+":woman_getting_haircut_tone2:": "💇🏼",
+":woman_getting_haircut_medium_light_skin_tone:": "💇🏼",
+":woman_getting_haircut_tone1:": "💇🏻",
+":woman_getting_haircut_light_skin_tone:": "💇🏻",
+":woman_getting_haircut:": "💇",
+":man_getting_face_massage_tone5:": "💆🏿",
+":man_getting_face_massage_dark_skin_tone:": "💆🏿",
+":man_getting_face_massage_tone4:": "💆🏾",
+":man_getting_face_massage_medium_dark_skin_tone:": "💆🏾",
+":man_getting_face_massage_tone3:": "💆🏽",
+":man_getting_face_massage_medium_skin_tone:": "💆🏽",
+":man_getting_face_massage_tone2:": "💆🏼",
+":man_getting_face_massage_medium_light_skin_tone:": "💆🏼",
+":man_getting_face_massage_tone1:": "💆🏻",
+":man_getting_face_massage_light_skin_tone:": "💆🏻",
+":man_getting_face_massage:": "💆",
+":woman_getting_face_massage_tone5:": "💆🏿",
+":woman_getting_face_massage_dark_skin_tone:": "💆🏿",
+":woman_getting_face_massage_tone4:": "💆🏾",
+":woman_getting_face_massage_medium_dark_skin_tone:": "💆🏾",
+":woman_getting_face_massage_tone3:": "💆🏽",
+":woman_getting_face_massage_medium_skin_tone:": "💆🏽",
+":woman_getting_face_massage_tone2:": "💆🏼",
+":woman_getting_face_massage_medium_light_skin_tone:": "💆🏼",
+":woman_getting_face_massage_tone1:": "💆🏻",
+":woman_getting_face_massage_light_skin_tone:": "💆🏻",
+":woman_getting_face_massage:": "💆",
+":man_tipping_hand_tone5:": "💁🏿",
+":man_tipping_hand_dark_skin_tone:": "💁🏿",
+":man_tipping_hand_tone4:": "💁🏾",
+":man_tipping_hand_medium_dark_skin_tone:": "💁🏾",
+":man_tipping_hand_tone3:": "💁🏽",
+":man_tipping_hand_medium_skin_tone:": "💁🏽",
+":man_tipping_hand_tone2:": "💁🏼",
+":man_tipping_hand_medium_light_skin_tone:": "💁🏼",
+":man_tipping_hand_tone1:": "💁🏻",
+":man_tipping_hand_light_skin_tone:": "💁🏻",
+":man_tipping_hand:": "💁",
+":woman_tipping_hand_tone5:": "💁🏿",
+":woman_tipping_hand_dark_skin_tone:": "💁🏿",
+":woman_tipping_hand_tone4:": "💁🏾",
+":woman_tipping_hand_medium_dark_skin_tone:": "💁🏾",
+":woman_tipping_hand_tone3:": "💁🏽",
+":woman_tipping_hand_medium_skin_tone:": "💁🏽",
+":woman_tipping_hand_tone2:": "💁🏼",
+":woman_tipping_hand_medium_light_skin_tone:": "💁🏼",
+":woman_tipping_hand_tone1:": "💁🏻",
+":woman_tipping_hand_light_skin_tone:": "💁🏻",
+":woman_tipping_hand:": "💁",
+":blondhaired_man_tone5:": "👱🏿",
+":blondhaired_man_dark_skin_tone:": "👱🏿",
+":blondhaired_man_tone4:": "👱🏾",
+":blondhaired_man_medium_dark_skin_tone:": "👱🏾",
+":blondhaired_man_tone3:": "👱🏽",
+":blondhaired_man_medium_skin_tone:": "👱🏽",
+":blondhaired_man_tone2:": "👱🏼",
+":blondhaired_man_medium_light_skin_tone:": "👱🏼",
+":blondhaired_man_tone1:": "👱🏻",
+":blondhaired_man_light_skin_tone:": "👱🏻",
+":blondhaired_man:": "👱",
+":blondhaired_woman_tone5:": "👱🏿",
+":blondhaired_woman_dark_skin_tone:": "👱🏿",
+":blondhaired_woman_tone4:": "👱🏾",
+":blondhaired_woman_medium_dark_skin_tone:": "👱🏾",
+":blondhaired_woman_tone3:": "👱🏽",
+":blondhaired_woman_medium_skin_tone:": "👱🏽",
+":blondhaired_woman_tone2:": "👱🏼",
+":blondhaired_woman_medium_light_skin_tone:": "👱🏼",
+":blondhaired_woman_tone1:": "👱🏻",
+":blondhaired_woman_light_skin_tone:": "👱🏻",
+":blondhaired_woman:": "👱",
+":man_wearing_turban_tone5:": "👳🏿",
+":man_wearing_turban_dark_skin_tone:": "👳🏿",
+":man_wearing_turban_tone4:": "👳🏾",
+":man_wearing_turban_medium_dark_skin_tone:": "👳🏾",
+":man_wearing_turban_tone3:": "👳🏽",
+":man_wearing_turban_medium_skin_tone:": "👳🏽",
+":man_wearing_turban_tone2:": "👳🏼",
+":man_wearing_turban_medium_light_skin_tone:": "👳🏼",
+":man_wearing_turban_tone1:": "👳🏻",
+":man_wearing_turban_light_skin_tone:": "👳🏻",
+":man_wearing_turban:": "👳",
+":woman_wearing_turban_tone5:": "👳🏿",
+":woman_wearing_turban_dark_skin_tone:": "👳🏿",
+":woman_wearing_turban_tone4:": "👳🏾",
+":woman_wearing_turban_medium_dark_skin_tone:": "👳🏾",
+":woman_wearing_turban_tone3:": "👳🏽",
+":woman_wearing_turban_medium_skin_tone:": "👳🏽",
+":woman_wearing_turban_tone2:": "👳🏼",
+":woman_wearing_turban_medium_light_skin_tone:": "👳🏼",
+":woman_wearing_turban_tone1:": "👳🏻",
+":woman_wearing_turban_light_skin_tone:": "👳🏻",
+":woman_wearing_turban:": "👳",
+":man_guard_tone5:": "💂🏿",
+":man_guard_dark_skin_tone:": "💂🏿",
+":man_guard_tone4:": "💂🏾",
+":man_guard_medium_dark_skin_tone:": "💂🏾",
+":man_guard_tone3:": "💂🏽",
+":man_guard_medium_skin_tone:": "💂🏽",
+":man_guard_tone2:": "💂🏼",
+":man_guard_medium_light_skin_tone:": "💂🏼",
+":man_guard_tone1:": "💂🏻",
+":man_guard_light_skin_tone:": "💂🏻",
+":man_guard:": "💂",
+":woman_guard_tone5:": "💂🏿",
+":woman_guard_dark_skin_tone:": "💂🏿",
+":woman_guard_tone4:": "💂🏾",
+":woman_guard_medium_dark_skin_tone:": "💂🏾",
+":woman_guard_tone3:": "💂🏽",
+":woman_guard_medium_skin_tone:": "💂🏽",
+":woman_guard_tone2:": "💂🏼",
+":woman_guard_medium_light_skin_tone:": "💂🏼",
+":woman_guard_tone1:": "💂🏻",
+":woman_guard_light_skin_tone:": "💂🏻",
+":woman_guard:": "💂",
+":man_detective_tone5:": "🕵🏿",
+":man_detective_dark_skin_tone:": "🕵🏿",
+":man_detective_tone4:": "🕵🏾",
+":man_detective_medium_dark_skin_tone:": "🕵🏾",
+":man_detective_tone3:": "🕵🏽",
+":man_detective_medium_skin_tone:": "🕵🏽",
+":man_detective_tone2:": "🕵🏼",
+":man_detective_medium_light_skin_tone:": "🕵🏼",
+":man_detective_tone1:": "🕵🏻",
+":man_detective_light_skin_tone:": "🕵🏻",
+":man_detective:": "🕵",
+":woman_detective_tone5:": "🕵🏿",
+":woman_detective_dark_skin_tone:": "🕵🏿",
+":woman_detective_tone4:": "🕵🏾",
+":woman_detective_medium_dark_skin_tone:": "🕵🏾",
+":woman_detective_tone3:": "🕵🏽",
+":woman_detective_medium_skin_tone:": "🕵🏽",
+":woman_detective_tone2:": "🕵🏼",
+":woman_detective_medium_light_skin_tone:": "🕵🏼",
+":woman_detective_tone1:": "🕵🏻",
+":woman_detective_light_skin_tone:": "🕵🏻",
+":woman_detective:": "🕵",
+":man_construction_worker_tone5:": "👷🏿",
+":man_construction_worker_dark_skin_tone:": "👷🏿",
+":man_construction_worker_tone4:": "👷🏾",
+":man_construction_worker_medium_dark_skin_tone:": "👷🏾",
+":man_construction_worker_tone3:": "👷🏽",
+":man_construction_worker_medium_skin_tone:": "👷🏽",
+":man_construction_worker_tone2:": "👷🏼",
+":man_construction_worker_medium_light_skin_tone:": "👷🏼",
+":man_construction_worker_tone1:": "👷🏻",
+":man_construction_worker_light_skin_tone:": "👷🏻",
+":man_construction_worker:": "👷",
+":woman_construction_worker_tone5:": "👷🏿",
+":woman_construction_worker_dark_skin_tone:": "👷🏿",
+":woman_construction_worker_tone4:": "👷🏾",
+":woman_construction_worker_medium_dark_skin_tone:": "👷🏾",
+":woman_construction_worker_tone3:": "👷🏽",
+":woman_construction_worker_medium_skin_tone:": "👷🏽",
+":woman_construction_worker_tone2:": "👷🏼",
+":woman_construction_worker_medium_light_skin_tone:": "👷🏼",
+":woman_construction_worker_tone1:": "👷🏻",
+":woman_construction_worker_light_skin_tone:": "👷🏻",
+":woman_construction_worker:": "👷",
+":man_police_officer_tone5:": "👮🏿",
+":man_police_officer_dark_skin_tone:": "👮🏿",
+":man_police_officer_tone4:": "👮🏾",
+":man_police_officer_medium_dark_skin_tone:": "👮🏾",
+":man_police_officer_tone3:": "👮🏽",
+":man_police_officer_medium_skin_tone:": "👮🏽",
+":man_police_officer_tone2:": "👮🏼",
+":man_police_officer_medium_light_skin_tone:": "👮🏼",
+":man_police_officer_tone1:": "👮🏻",
+":man_police_officer_light_skin_tone:": "👮🏻",
+":man_police_officer:": "👮",
+":woman_police_officer_tone5:": "👮🏿",
+":woman_police_officer_dark_skin_tone:": "👮🏿",
+":woman_police_officer_tone4:": "👮🏾",
+":woman_police_officer_medium_dark_skin_tone:": "👮🏾",
+":woman_police_officer_tone3:": "👮🏽",
+":woman_police_officer_medium_skin_tone:": "👮🏽",
+":woman_police_officer_tone2:": "👮🏼",
+":woman_police_officer_medium_light_skin_tone:": "👮🏼",
+":woman_police_officer_tone1:": "👮🏻",
+":woman_police_officer_light_skin_tone:": "👮🏻",
+":woman_police_officer:": "👮",
+":man_technologist_tone5:": "👨🏿💻",
+":man_technologist_dark_skin_tone:": "👨🏿💻",
+":man_technologist_tone4:": "👨🏾💻",
+":man_technologist_medium_dark_skin_tone:": "👨🏾💻",
+":man_technologist_tone3:": "👨🏽💻",
+":man_technologist_medium_skin_tone:": "👨🏽💻",
+":man_technologist_tone2:": "👨🏼💻",
+":man_technologist_medium_light_skin_tone:": "👨🏼💻",
+":man_technologist_tone1:": "👨🏻💻",
+":man_technologist_light_skin_tone:": "👨🏻💻",
+":man_technologist:": "👨💻",
+":woman_technologist_tone5:": "👩🏿💻",
+":woman_technologist_dark_skin_tone:": "👩🏿💻",
+":woman_technologist_tone4:": "👩🏾💻",
+":woman_technologist_medium_dark_skin_tone:": "👩🏾💻",
+":woman_technologist_tone3:": "👩🏽💻",
+":woman_technologist_medium_skin_tone:": "👩🏽💻",
+":woman_technologist_tone2:": "👩🏼💻",
+":woman_technologist_medium_light_skin_tone:": "👩🏼💻",
+":woman_technologist_tone1:": "👩🏻💻",
+":woman_technologist_light_skin_tone:": "👩🏻💻",
+":woman_technologist:": "👩💻",
+":man_teacher_tone5:": "👨🏿🏫",
+":man_teacher_dark_skin_tone:": "👨🏿🏫",
+":man_teacher_tone4:": "👨🏾🏫",
+":man_teacher_medium_dark_skin_tone:": "👨🏾🏫",
+":man_teacher_tone3:": "👨🏽🏫",
+":man_teacher_medium_skin_tone:": "👨🏽🏫",
+":man_teacher_tone2:": "👨🏼🏫",
+":man_teacher_medium_light_skin_tone:": "👨🏼🏫",
+":man_teacher_tone1:": "👨🏻🏫",
+":man_teacher_light_skin_tone:": "👨🏻🏫",
+":man_teacher:": "👨🏫",
+":woman_teacher_tone5:": "👩🏿🏫",
+":woman_teacher_dark_skin_tone:": "👩🏿🏫",
+":woman_teacher_tone4:": "👩🏾🏫",
+":woman_teacher_medium_dark_skin_tone:": "👩🏾🏫",
+":woman_teacher_tone3:": "👩🏽🏫",
+":woman_teacher_medium_skin_tone:": "👩🏽🏫",
+":woman_teacher_tone2:": "👩🏼🏫",
+":woman_teacher_medium_light_skin_tone:": "👩🏼🏫",
+":woman_teacher_tone1:": "👩🏻🏫",
+":woman_teacher_light_skin_tone:": "👩🏻🏫",
+":woman_teacher:": "👩🏫",
+":man_student_tone5:": "👨🏿🎓",
+":man_student_dark_skin_tone:": "👨🏿🎓",
+":man_student_tone4:": "👨🏾🎓",
+":man_student_medium_dark_skin_tone:": "👨🏾🎓",
+":man_student_tone3:": "👨🏽🎓",
+":man_student_medium_skin_tone:": "👨🏽🎓",
+":man_student_tone2:": "👨🏼🎓",
+":man_student_medium_light_skin_tone:": "👨🏼🎓",
+":man_student_tone1:": "👨🏻🎓",
+":man_student_light_skin_tone:": "👨🏻🎓",
+":man_student:": "👨🎓",
+":woman_student_tone5:": "👩🏿🎓",
+":woman_student_dark_skin_tone:": "👩🏿🎓",
+":woman_student_tone4:": "👩🏾🎓",
+":woman_student_medium_dark_skin_tone:": "👩🏾🎓",
+":woman_student_tone3:": "👩🏽🎓",
+":woman_student_medium_skin_tone:": "👩🏽🎓",
+":woman_student_tone2:": "👩🏼🎓",
+":woman_student_medium_light_skin_tone:": "👩🏼🎓",
+":woman_student_tone1:": "👩🏻🎓",
+":woman_student_light_skin_tone:": "👩🏻🎓",
+":woman_student:": "👩🎓",
+":man_singer_tone5:": "👨🏿🎤",
+":man_singer_dark_skin_tone:": "👨🏿🎤",
+":man_singer_tone4:": "👨🏾🎤",
+":man_singer_medium_dark_skin_tone:": "👨🏾🎤",
+":man_singer_tone3:": "👨🏽🎤",
+":man_singer_medium_skin_tone:": "👨🏽🎤",
+":man_singer_tone2:": "👨🏼🎤",
+":man_singer_medium_light_skin_tone:": "👨🏼🎤",
+":man_singer_tone1:": "👨🏻🎤",
+":man_singer_light_skin_tone:": "👨🏻🎤",
+":man_singer:": "👨🎤",
+":woman_singer_tone5:": "👩🏿🎤",
+":woman_singer_dark_skin_tone:": "👩🏿🎤",
+":woman_singer_tone4:": "👩🏾🎤",
+":woman_singer_medium_dark_skin_tone:": "👩🏾🎤",
+":woman_singer_tone3:": "👩🏽🎤",
+":woman_singer_medium_skin_tone:": "👩🏽🎤",
+":woman_singer_tone2:": "👩🏼🎤",
+":woman_singer_medium_light_skin_tone:": "👩🏼🎤",
+":woman_singer_tone1:": "👩🏻🎤",
+":woman_singer_light_skin_tone:": "👩🏻🎤",
+":woman_singer:": "👩🎤",
+":man_scientist_tone5:": "👨🏿🔬",
+":man_scientist_dark_skin_tone:": "👨🏿🔬",
+":man_scientist_tone4:": "👨🏾🔬",
+":man_scientist_medium_dark_skin_tone:": "👨🏾🔬",
+":man_scientist_tone3:": "👨🏽🔬",
+":man_scientist_medium_skin_tone:": "👨🏽🔬",
+":man_scientist_tone2:": "👨🏼🔬",
+":man_scientist_medium_light_skin_tone:": "👨🏼🔬",
+":man_scientist_tone1:": "👨🏻🔬",
+":man_scientist_light_skin_tone:": "👨🏻🔬",
+":man_scientist:": "👨🔬",
+":woman_scientist_tone5:": "👩🏿🔬",
+":woman_scientist_dark_skin_tone:": "👩🏿🔬",
+":woman_scientist_tone4:": "👩🏾🔬",
+":woman_scientist_medium_dark_skin_tone:": "👩🏾🔬",
+":woman_scientist_tone3:": "👩🏽🔬",
+":woman_scientist_medium_skin_tone:": "👩🏽🔬",
+":woman_scientist_tone2:": "👩🏼🔬",
+":woman_scientist_medium_light_skin_tone:": "👩🏼🔬",
+":woman_scientist_tone1:": "👩🏻🔬",
+":woman_scientist_light_skin_tone:": "👩🏻🔬",
+":woman_scientist:": "👩🔬",
+":man_office_worker_tone5:": "👨🏿💼",
+":man_office_worker_dark_skin_tone:": "👨🏿💼",
+":man_office_worker_tone4:": "👨🏾💼",
+":man_office_worker_medium_dark_skin_tone:": "👨🏾💼",
+":man_office_worker_tone3:": "👨🏽💼",
+":man_office_worker_medium_skin_tone:": "👨🏽💼",
+":man_office_worker_tone2:": "👨🏼💼",
+":man_office_worker_medium_light_skin_tone:": "👨🏼💼",
+":man_office_worker_tone1:": "👨🏻💼",
+":man_office_worker_light_skin_tone:": "👨🏻💼",
+":man_office_worker:": "👨💼",
+":woman_office_worker_tone5:": "👩🏿💼",
+":woman_office_worker_dark_skin_tone:": "👩🏿💼",
+":woman_office_worker_tone4:": "👩🏾💼",
+":woman_office_worker_medium_dark_skin_tone:": "👩🏾💼",
+":woman_office_worker_tone3:": "👩🏽💼",
+":woman_office_worker_medium_skin_tone:": "👩🏽💼",
+":woman_office_worker_tone2:": "👩🏼💼",
+":woman_office_worker_medium_light_skin_tone:": "👩🏼💼",
+":woman_office_worker_tone1:": "👩🏻💼",
+":woman_office_worker_light_skin_tone:": "👩🏻💼",
+":woman_office_worker:": "👩💼",
+":man_mechanic_tone5:": "👨🏿🔧",
+":man_mechanic_dark_skin_tone:": "👨🏿🔧",
+":man_mechanic_tone4:": "👨🏾🔧",
+":man_mechanic_medium_dark_skin_tone:": "👨🏾🔧",
+":man_mechanic_tone3:": "👨🏽🔧",
+":man_mechanic_medium_skin_tone:": "👨🏽🔧",
+":man_mechanic_tone2:": "👨🏼🔧",
+":man_mechanic_medium_light_skin_tone:": "👨🏼🔧",
+":man_mechanic_tone1:": "👨🏻🔧",
+":man_mechanic_light_skin_tone:": "👨🏻🔧",
+":man_mechanic:": "👨🔧",
+":woman_mechanic_tone5:": "👩🏿🔧",
+":woman_mechanic_dark_skin_tone:": "👩🏿🔧",
+":woman_mechanic_tone4:": "👩🏾🔧",
+":woman_mechanic_medium_dark_skin_tone:": "👩🏾🔧",
+":woman_mechanic_tone3:": "👩🏽🔧",
+":woman_mechanic_medium_skin_tone:": "👩🏽🔧",
+":woman_mechanic_tone2:": "👩🏼🔧",
+":woman_mechanic_medium_light_skin_tone:": "👩🏼🔧",
+":woman_mechanic_tone1:": "👩🏻🔧",
+":woman_mechanic_light_skin_tone:": "👩🏻🔧",
+":woman_mechanic:": "👩🔧",
+":man_health_worker_tone5:": "👨🏿⚕",
+":man_health_worker_dark_skin_tone:": "👨🏿⚕",
+":man_health_worker_tone4:": "👨🏾⚕",
+":man_health_worker_medium_dark_skin_tone:": "👨🏾⚕",
+":man_health_worker_tone3:": "👨🏽⚕",
+":man_health_worker_medium_skin_tone:": "👨🏽⚕",
+":man_health_worker_tone2:": "👨🏼⚕",
+":man_health_worker_medium_light_skin_tone:": "👨🏼⚕",
+":man_health_worker_tone1:": "👨🏻⚕",
+":man_health_worker_light_skin_tone:": "👨🏻⚕",
+":man_health_worker:": "👨⚕",
+":woman_health_worker_tone5:": "👩🏿⚕",
+":woman_health_worker_dark_skin_tone:": "👩🏿⚕",
+":woman_health_worker_tone4:": "👩🏾⚕",
+":woman_health_worker_medium_dark_skin_tone:": "👩🏾⚕",
+":woman_health_worker_tone3:": "👩🏽⚕",
+":woman_health_worker_medium_skin_tone:": "👩🏽⚕",
+":woman_health_worker_tone2:": "👩🏼⚕",
+":woman_health_worker_medium_light_skin_tone:": "👩🏼⚕",
+":woman_health_worker_tone1:": "👩🏻⚕",
+":woman_health_worker_light_skin_tone:": "👩🏻⚕",
+":woman_health_worker:": "👩⚕",
+":man_factory_worker_tone5:": "👨🏿🏭",
+":man_factory_worker_dark_skin_tone:": "👨🏿🏭",
+":man_factory_worker_tone4:": "👨🏾🏭",
+":man_factory_worker_medium_dark_skin_tone:": "👨🏾🏭",
+":man_factory_worker_tone3:": "👨🏽🏭",
+":man_factory_worker_medium_skin_tone:": "👨🏽🏭",
+":man_factory_worker_tone2:": "👨🏼🏭",
+":man_factory_worker_medium_light_skin_tone:": "👨🏼🏭",
+":man_factory_worker_tone1:": "👨🏻🏭",
+":man_factory_worker_light_skin_tone:": "👨🏻🏭",
+":man_factory_worker:": "👨🏭",
+":woman_factory_worker_tone5:": "👩🏿🏭",
+":woman_factory_worker_dark_skin_tone:": "👩🏿🏭",
+":woman_factory_worker_tone4:": "👩🏾🏭",
+":woman_factory_worker_medium_dark_skin_tone:": "👩🏾🏭",
+":woman_factory_worker_tone3:": "👩🏽🏭",
+":woman_factory_worker_medium_skin_tone:": "👩🏽🏭",
+":woman_factory_worker_tone2:": "👩🏼🏭",
+":woman_factory_worker_medium_light_skin_tone:": "👩🏼🏭",
+":woman_factory_worker_tone1:": "👩🏻🏭",
+":woman_factory_worker_light_skin_tone:": "👩🏻🏭",
+":woman_factory_worker:": "👩🏭",
+":man_cook_tone5:": "👨🏿🍳",
+":man_cook_dark_skin_tone:": "👨🏿🍳",
+":man_cook_tone4:": "👨🏾🍳",
+":man_cook_medium_dark_skin_tone:": "👨🏾🍳",
+":man_cook_tone3:": "👨🏽🍳",
+":man_cook_medium_skin_tone:": "👨🏽🍳",
+":man_cook_tone2:": "👨🏼🍳",
+":man_cook_medium_light_skin_tone:": "👨🏼🍳",
+":man_cook_tone1:": "👨🏻🍳",
+":man_cook_light_skin_tone:": "👨🏻🍳",
+":man_cook:": "👨🍳",
+":woman_cook_tone5:": "👩🏿🍳",
+":woman_cook_dark_skin_tone:": "👩🏿🍳",
+":woman_cook_tone4:": "👩🏾🍳",
+":woman_cook_medium_dark_skin_tone:": "👩🏾🍳",
+":woman_cook_tone3:": "👩🏽🍳",
+":woman_cook_medium_skin_tone:": "👩🏽🍳",
+":woman_cook_tone2:": "👩🏼🍳",
+":woman_cook_medium_light_skin_tone:": "👩🏼🍳",
+":woman_cook_tone1:": "👩🏻🍳",
+":woman_cook_light_skin_tone:": "👩🏻🍳",
+":woman_cook:": "👩🍳",
+":man_farmer_tone5:": "👨🏿🌾",
+":man_farmer_dark_skin_tone:": "👨🏿🌾",
+":man_farmer_tone4:": "👨🏾🌾",
+":man_farmer_medium_dark_skin_tone:": "👨🏾🌾",
+":man_farmer_tone3:": "👨🏽🌾",
+":man_farmer_medium_skin_tone:": "👨🏽🌾",
+":man_farmer_tone2:": "👨🏼🌾",
+":man_farmer_medium_light_skin_tone:": "👨🏼🌾",
+":man_farmer_tone1:": "👨🏻🌾",
+":man_farmer_light_skin_tone:": "👨🏻🌾",
+":man_farmer:": "👨🌾",
+":woman_farmer_tone5:": "👩🏿🌾",
+":woman_farmer_dark_skin_tone:": "👩🏿🌾",
+":woman_farmer_tone4:": "👩🏾🌾",
+":woman_farmer_medium_dark_skin_tone:": "👩🏾🌾",
+":woman_farmer_tone3:": "👩🏽🌾",
+":woman_farmer_medium_skin_tone:": "👩🏽🌾",
+":woman_farmer_tone2:": "👩🏼🌾",
+":woman_farmer_medium_light_skin_tone:": "👩🏼🌾",
+":woman_farmer_tone1:": "👩🏻🌾",
+":woman_farmer_light_skin_tone:": "👩🏻🌾",
+":woman_farmer:": "👩🌾",
+":man_in_business_suit_levitating_tone1:": "🕴🏻",
+":man_in_business_suit_levitating_light_skin_tone:": "🕴🏻",
+":man_in_business_suit_levitating_tone2:": "🕴🏼",
+":man_in_business_suit_levitating_medium_light_skin_tone:": "🕴🏼",
+":man_in_business_suit_levitating_tone3:": "🕴🏽",
+":man_in_business_suit_levitating_medium_skin_tone:": "🕴🏽",
+":man_in_business_suit_levitating_tone4:": "🕴🏾",
+":man_in_business_suit_levitating_medium_dark_skin_tone:": "🕴🏾",
+":man_in_business_suit_levitating_tone5:": "🕴🏿",
+":man_in_business_suit_levitating_dark_skin_tone:": "🕴🏿",
+":person_in_bed_tone1:": "🛌🏻",
+":person_in_bed_light_skin_tone:": "🛌🏻",
+":person_in_bed_tone2:": "🛌🏼",
+":person_in_bed_medium_light_skin_tone:": "🛌🏼",
+":person_in_bed_tone3:": "🛌🏽",
+":person_in_bed_medium_skin_tone:": "🛌🏽",
+":person_in_bed_tone4:": "🛌🏾",
+":person_in_bed_medium_dark_skin_tone:": "🛌🏾",
+":person_in_bed_tone5:": "🛌🏿",
+":person_in_bed_dark_skin_tone:": "🛌🏿",
+":family_man_boy:": "👨👦",
+":family_man_boy_boy:": "👨👦👦",
+":family_man_girl:": "👨👧",
+":family_man_girl_boy:": "👨👧👦",
+":family_woman_boy:": "👩👦",
+":family_woman_boy_boy:": "👩👦👦",
+":family_woman_girl:": "👩👧",
+":family_woman_girl_boy:": "👩👧👦",
+":family_woman_girl_girl:": "👩👧👧",
+":man_judge:": "👨⚖",
+":man_judge_tone1:": "👨🏻⚖",
+":man_judge_light_skin_tone:": "👨🏻⚖",
+":man_judge_tone2:": "👨🏼⚖",
+":man_judge_medium_light_skin_tone:": "👨🏼⚖",
+":man_judge_tone3:": "👨🏽⚖",
+":man_judge_medium_skin_tone:": "👨🏽⚖",
+":man_judge_tone4:": "👨🏾⚖",
+":man_judge_medium_dark_skin_tone:": "👨🏾⚖",
+":man_judge_tone5:": "👨🏿⚖",
+":man_judge_dark_skin_tone:": "👨🏿⚖",
+":woman_judge:": "👩⚖",
+":woman_judge_tone1:": "👩🏻⚖",
+":woman_judge_light_skin_tone:": "👩🏻⚖",
+":woman_judge_tone2:": "👩🏼⚖",
+":woman_judge_medium_light_skin_tone:": "👩🏼⚖",
+":woman_judge_tone3:": "👩🏽⚖",
+":woman_judge_medium_skin_tone:": "👩🏽⚖",
+":woman_judge_tone4:": "👩🏾⚖",
+":woman_judge_medium_dark_skin_tone:": "👩🏾⚖",
+":woman_judge_tone5:": "👩🏿⚖",
+":woman_judge_dark_skin_tone:": "👩🏿⚖",
+":man_pilot:": "👨✈",
+":man_pilot_tone1:": "👨🏻✈",
+":man_pilot_light_skin_tone:": "👨🏻✈",
+":man_pilot_tone2:": "👨🏼✈",
+":man_pilot_medium_light_skin_tone:": "👨🏼✈",
+":man_pilot_tone3:": "👨🏽✈",
+":man_pilot_medium_skin_tone:": "👨🏽✈",
+":man_pilot_tone4:": "👨🏾✈",
+":man_pilot_medium_dark_skin_tone:": "👨🏾✈",
+":man_pilot_tone5:": "👨🏿✈",
+":man_pilot_dark_skin_tone:": "👨🏿✈",
+":woman_pilot:": "👩✈",
+":woman_pilot_tone1:": "👩🏻✈",
+":woman_pilot_light_skin_tone:": "👩🏻✈",
+":woman_pilot_tone2:": "👩🏼✈",
+":woman_pilot_medium_light_skin_tone:": "👩🏼✈",
+":woman_pilot_tone3:": "👩🏽✈",
+":woman_pilot_medium_skin_tone:": "👩🏽✈",
+":woman_pilot_tone4:": "👩🏾✈",
+":woman_pilot_medium_dark_skin_tone:": "👩🏾✈",
+":woman_pilot_tone5:": "👩🏿✈",
+":woman_pilot_dark_skin_tone:": "👩🏿✈",
+":man_artist:": "👨🎨",
+":man_artist_tone1:": "👨🏻🎨",
+":man_artist_light_skin_tone:": "👨🏻🎨",
+":man_artist_tone2:": "👨🏼🎨",
+":man_artist_medium_light_skin_tone:": "👨🏼🎨",
+":man_artist_tone3:": "👨🏽🎨",
+":man_artist_medium_skin_tone:": "👨🏽🎨",
+":man_artist_tone4:": "👨🏾🎨",
+":man_artist_medium_dark_skin_tone:": "👨🏾🎨",
+":man_artist_tone5:": "👨🏿🎨",
+":man_artist_dark_skin_tone:": "👨🏿🎨",
+":woman_artist:": "👩🎨",
+":woman_artist_tone1:": "👩🏻🎨",
+":woman_artist_light_skin_tone:": "👩🏻🎨",
+":woman_artist_tone2:": "👩🏼🎨",
+":woman_artist_medium_light_skin_tone:": "👩🏼🎨",
+":woman_artist_tone3:": "👩🏽🎨",
+":woman_artist_medium_skin_tone:": "👩🏽🎨",
+":woman_artist_tone4:": "👩🏾🎨",
+":woman_artist_medium_dark_skin_tone:": "👩🏾🎨",
+":woman_artist_tone5:": "👩🏿🎨",
+":woman_artist_dark_skin_tone:": "👩🏿🎨",
+":man_astronaut:": "👨🚀",
+":man_astronaut_tone1:": "👨🏻🚀",
+":man_astronaut_light_skin_tone:": "👨🏻🚀",
+":man_astronaut_tone2:": "👨🏼🚀",
+":man_astronaut_medium_light_skin_tone:": "👨🏼🚀",
+":man_astronaut_tone3:": "👨🏽🚀",
+":man_astronaut_medium_skin_tone:": "👨🏽🚀",
+":man_astronaut_tone4:": "👨🏾🚀",
+":man_astronaut_medium_dark_skin_tone:": "👨🏾🚀",
+":man_astronaut_tone5:": "👨🏿🚀",
+":man_astronaut_dark_skin_tone:": "👨🏿🚀",
+":woman_astronaut:": "👩🚀",
+":woman_astronaut_tone1:": "👩🏻🚀",
+":woman_astronaut_light_skin_tone:": "👩🏻🚀",
+":woman_astronaut_tone2:": "👩🏼🚀",
+":woman_astronaut_medium_light_skin_tone:": "👩🏼🚀",
+":woman_astronaut_tone3:": "👩🏽🚀",
+":woman_astronaut_medium_skin_tone:": "👩🏽🚀",
+":woman_astronaut_tone4:": "👩🏾🚀",
+":woman_astronaut_medium_dark_skin_tone:": "👩🏾🚀",
+":woman_astronaut_tone5:": "👩🏿🚀",
+":woman_astronaut_dark_skin_tone:": "👩🏿🚀",
+":man_firefighter:": "👨🚒",
+":man_firefighter_tone1:": "👨🏻🚒",
+":man_firefighter_light_skin_tone:": "👨🏻🚒",
+":man_firefighter_tone2:": "👨🏼🚒",
+":man_firefighter_medium_light_skin_tone:": "👨🏼🚒",
+":man_firefighter_tone3:": "👨🏽🚒",
+":man_firefighter_medium_skin_tone:": "👨🏽🚒",
+":man_firefighter_tone4:": "👨🏾🚒",
+":man_firefighter_medium_dark_skin_tone:": "👨🏾🚒",
+":man_firefighter_tone5:": "👨🏿🚒",
+":man_firefighter_dark_skin_tone:": "👨🏿🚒",
+":woman_firefighter:": "👩🚒",
+":woman_firefighter_tone1:": "👩🏻🚒",
+":woman_firefighter_light_skin_tone:": "👩🏻🚒",
+":woman_firefighter_tone2:": "👩🏼🚒",
+":woman_firefighter_medium_light_skin_tone:": "👩🏼🚒",
+":woman_firefighter_tone3:": "👩🏽🚒",
+":woman_firefighter_medium_skin_tone:": "👩🏽🚒",
+":woman_firefighter_tone4:": "👩🏾🚒",
+":woman_firefighter_medium_dark_skin_tone:": "👩🏾🚒",
+":woman_firefighter_tone5:": "👩🏿🚒",
+":woman_firefighter_dark_skin_tone:": "👩🏿🚒",
+":female_sign:": "♀",
+":male_sign:": "♂",
+":medical_symbol:": "⚕",
+":united_nations:": "🇺🇳",
+":snowboarder_tone2:": "🏂🏼",
+":snowboarder_medium_light_skin_tone:": "🏂🏼",
+":snowboarder_tone3:": "🏂🏽",
+":snowboarder_medium_skin_tone:": "🏂🏽",
+":snowboarder_tone4:": "🏂🏾",
+":snowboarder_medium_dark_skin_tone:": "🏂🏾",
+":snowboarder_tone5:": "🏂🏿",
+":snowboarder_dark_skin_tone:": "🏂🏿",
+":person_golfing_tone1:": "🏌🏻",
+":person_golfing_light_skin_tone:": "🏌🏻",
+":person_golfing_tone2:": "🏌🏼",
+":person_golfing_medium_light_skin_tone:": "🏌🏼",
+":person_golfing_tone3:": "🏌🏽",
+}
+function replace_emoji() {
+$('.emoji_poss').each(function(){
+const emoji = $(this).html().match(/(:.+?:)|✅/g);
+for(let i in emoji) {
+if(emoji_dict[emoji[i]]) {
+$(this).html($(this).html().replace(emoji[i], emoji_dict[emoji[i]]));
+$(this).removeClass('emoji_poss');
+}
+}
+$(this).html($(this).html().replace("✅", " "));
+});
+twemoji.parse(document.body,{base:(location.protocol==="https:"?"https:":"http:")+"//cdn.staticfile.org/twemoji/2.2.5/"});
+};
+function replaced_emoji_return(original) {
+const emoji = original.match(/(:.+?:)/g);
+for(let i in emoji) {
+if(emoji_dict[emoji[i]]) {
+original = original.replace(emoji[i], emoji_dict[emoji[i]]);
+}
+}
+return original
+};
\ No newline at end of file
diff --git a/assets/js/shortcut.js b/assets/js/shortcut.js
new file mode 100644
index 0000000..19640aa
--- /dev/null
+++ b/assets/js/shortcut.js
@@ -0,0 +1,186 @@
+/**
+ * http://www.openjs.com/scripts/events/keyboard_shortcuts/
+ * Version : 2.01.B
+ * By Binny V A
+ * License : BSD
+ */
+shortcut = {
+'all_shortcuts':{},
+'add': function(shortcut_combination,callback,opt) {
+var default_options = {
+'type':'keydown',
+'propagate':false,
+'disable_in_input':false,
+'target':document,
+'keycode':false
+}
+if(!opt) opt = default_options;
+else {
+for(var dfo in default_options) {
+if(typeof opt[dfo] == 'undefined') opt[dfo] = default_options[dfo];
+}
+}
+var ele = opt.target;
+if(typeof opt.target == 'string') ele = document.getElementById(opt.target);
+var ths = this;
+shortcut_combination = shortcut_combination.toLowerCase();
+var func = function(e) {
+e = e || window.event;
+if(opt['disable_in_input']) {
+var element;
+if(e.target) element=e.target;
+else if(e.srcElement) element=e.srcElement;
+if(element.nodeType==3) element=element.parentNode;
+if(element.tagName == 'INPUT' || element.tagName == 'TEXTAREA') return;
+}
+if (e.keyCode) code = e.keyCode;
+else if (e.which) code = e.which;
+var character = String.fromCharCode(code).toLowerCase();
+if(code == 188) character=",";
+if(code == 190) character=".";
+var keys = shortcut_combination.split("+");
+var kp = 0;
+var shift_nums = {
+"`":"~",
+"1":"!",
+"2":"@",
+"3":"#",
+"4":"$",
+"5":"%",
+"6":"^",
+"7":"&",
+"8":"*",
+"9":"(",
+"0":")",
+"-":"_",
+"=":"+",
+";":":",
+"'":"\"",
+",":"<",
+".":">",
+"/":"?",
+"\\":"|"
+}
+var special_keys = {
+'esc':27,
+'escape':27,
+'tab':9,
+'space':32,
+'return':13,
+'enter':13,
+'backspace':8,
+'scrolllock':145,
+'scroll_lock':145,
+'scroll':145,
+'capslock':20,
+'caps_lock':20,
+'caps':20,
+'numlock':144,
+'num_lock':144,
+'num':144,
+'pause':19,
+'break':19,
+'insert':45,
+'home':36,
+'delete':46,
+'end':35,
+'pageup':33,
+'page_up':33,
+'pu':33,
+'pagedown':34,
+'page_down':34,
+'pd':34,
+'left':37,
+'up':38,
+'right':39,
+'down':40,
+'f1':112,
+'f2':113,
+'f3':114,
+'f4':115,
+'f5':116,
+'f6':117,
+'f7':118,
+'f8':119,
+'f9':120,
+'f10':121,
+'f11':122,
+'f12':123
+}
+var modifiers = {
+shift: { wanted:false, pressed:false},
+ctrl : { wanted:false, pressed:false},
+alt : { wanted:false, pressed:false},
+meta : { wanted:false, pressed:false}
+};
+if(e.ctrlKey)modifiers.ctrl.pressed = true;
+if(e.shiftKey)modifiers.shift.pressed = true;
+if(e.altKey)modifiers.alt.pressed = true;
+if(e.metaKey) modifiers.meta.pressed = true;
+for(var i=0; k=keys[i],i 1) {
+if(special_keys[k] == code) kp++;
+} else if(opt['keycode']) {
+if(opt['keycode'] == code) kp++;
+} else {
+if(character == k) kp++;
+else {
+if(shift_nums[character] && e.shiftKey) {
+character = shift_nums[character];
+if(character == k) kp++;
+}
+}
+}
+}
+if(kp == keys.length &&
+modifiers.ctrl.pressed == modifiers.ctrl.wanted &&
+modifiers.shift.pressed == modifiers.shift.wanted &&
+modifiers.alt.pressed == modifiers.alt.wanted &&
+modifiers.meta.pressed == modifiers.meta.wanted) {
+callback(e);
+if(!opt['propagate']) {
+e.cancelBubble = true;
+e.returnValue = false;
+if (e.stopPropagation) {
+e.stopPropagation();
+e.preventDefault();
+}
+return false;
+}
+}
+}
+this.all_shortcuts[shortcut_combination] = {
+'callback':func,
+'target':ele,
+'event': opt['type']
+};
+if(ele.addEventListener) ele.addEventListener(opt['type'], func, false);
+else if(ele.attachEvent) ele.attachEvent('on'+opt['type'], func);
+else ele['on'+opt['type']] = func;
+},
+'remove':function(shortcut_combination) {
+shortcut_combination = shortcut_combination.toLowerCase();
+var binding = this.all_shortcuts[shortcut_combination];
+delete(this.all_shortcuts[shortcut_combination])
+if(!binding) return;
+var type = binding['event'];
+var ele = binding['target'];
+var callback = binding['callback'];
+if(ele.detachEvent) ele.detachEvent('on'+type, callback);
+else if(ele.removeEventListener) ele.removeEventListener(type, callback, false);
+else ele['on'+type] = false;
+}
+}
\ No newline at end of file
diff --git a/authorize/.htaccess b/authorize/.htaccess
new file mode 100644
index 0000000..0855d49
--- /dev/null
+++ b/authorize/.htaccess
@@ -0,0 +1 @@
+deny from all
\ No newline at end of file
diff --git a/authorize/Mastodon-api-php/Mastodon_api.php b/authorize/Mastodon-api-php/Mastodon_api.php
deleted file mode 100755
index 0f5ee35..0000000
--- a/authorize/Mastodon-api-php/Mastodon_api.php
+++ /dev/null
@@ -1,970 +0,0 @@
-
- * @copyright KwangSeon Yun
- * @license https://raw.githubusercontent.com/yks118/Mastodon-api-php/master/LICENSE MIT License
- * @link https://github.com/yks118/Mastodon-api-php
- */
-class Mastodon_api {
- private $mastodon_url = '';
- private $client_id = '';
- private $client_secret = '';
-
- private $token = array();
- private $scopes = array();
-
- public function __construct () {}
-
- public function __destruct () {}
-
- /**
- * _post
- *
- * curl post
- *
- * @param string $url
- * @param array $data
- *
- * @return array $response
- */
- private function _post ($url,$data = array()) {
- $parameters = array();
- $parameters[CURLOPT_POST] = 1;
-
- // set access_token
- if (isset($this->token['access_token'])) {
- $data['access_token'] = $this->token['access_token'];
- }
-
- if (count($data)) {
- $parameters[CURLOPT_POSTFIELDS] = http_build_query($data);
- }
-
- $url = $this->mastodon_url.$url;
- $response = $this->get_content_curl($url,$parameters);
- return $response;
- }
-
- /**
- * _get
- *
- * @param string $url
- * @param array $data
- *
- * @return array $response
- */
- private function _get ($url,$data = array()) {
- $parameters = array();
-
- // set authorization bearer
- if (isset($this->token['access_token'])) {
- $authorization = 'Authorization: '.$this->token['token_type'].' '.$this->token['access_token'];
- $parameters[CURLOPT_HTTPHEADER] = array('Content-Type: application/json',$authorization);
- }
-
- $url = $this->mastodon_url.$url;
- if (count($data)) {
- $url .= '?'.http_build_query($data);
- }
-
- $response = $this->get_content_curl($url,$parameters);
- return $response;
- }
-
- /**
- * _patch
- *
- * @param string $url
- * @param array $data
- *
- * @return array $parameters
- */
- private function _patch ($url,$data = array()) {
- $parameters = array();
- $parameters[CURLOPT_CUSTOMREQUEST] = 'PATCH';
-
- // set authorization bearer
- if (isset($this->token['access_token'])) {
- $authorization = 'Authorization: '.$this->token['token_type'].' '.$this->token['access_token'];
- $parameters[CURLOPT_HTTPHEADER] = array('Content-Type: application/json',$authorization);
- }
-
- if (count($data)) {
- $parameters[CURLOPT_POSTFIELDS] = json_encode($data);
- }
-
- $url = $this->mastodon_url.$url;
- $response = $this->get_content_curl($url,$parameters);
- return $response;
- }
-
- /**
- * _delete
- *
- * @param string $url
- *
- * @return array $response
- */
- private function _delete ($url) {
- $parameters = array();
- $parameters[CURLOPT_CUSTOMREQUEST] = 'DELETE';
-
- // set authorization bearer
- if (isset($this->token['access_token'])) {
- $authorization = 'Authorization: '.$this->token['token_type'].' '.$this->token['access_token'];
- $parameters[CURLOPT_HTTPHEADER] = array('Content-Type: application/json',$authorization);
- }
-
- $url = $this->mastodon_url.$url;
- $response = $this->get_content_curl($url,$parameters);
- return $response;
- }
-
- /**
- * get_content_curl
- *
- * @param string $url
- * @param array $parameters
- *
- * @return array $data
- */
- protected function get_content_curl ($url,$parameters = array()) {
- $data = array();
-
- // set CURLOPT_USERAGENT
- if (!isset($parameters[CURLOPT_USERAGENT])) {
- if (isset($_SERVER['HTTP_USER_AGENT'])) {
- $parameters[CURLOPT_USERAGENT] = $_SERVER['HTTP_USER_AGENT'];
- } else {
- // default IE11
- $parameters[CURLOPT_USERAGENT] = 'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko';
- }
- }
-
- // check curl_init
- if (function_exists('curl_init')) {
- $ch = curl_init();
-
- // url 설정
- curl_setopt($ch,CURLOPT_URL,$url);
-
- foreach ($parameters as $key => $value) {
- curl_setopt($ch,$key,$value);
- }
-
- // https
- if (!isset($parameters[CURLOPT_SSL_VERIFYPEER])) {
- curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
- }
- if (!isset($parameters[CURLOPT_SSLVERSION])) {
- curl_setopt($ch,CURLOPT_SSLVERSION,6);
- }
-
- // no header
- if (!isset($parameters[CURLOPT_HEADER])) {
- curl_setopt($ch,CURLOPT_HEADER,0);
- }
-
- // POST / GET (default : GET)
- if (!isset($parameters[CURLOPT_POST]) && !isset($parameters[CURLOPT_CUSTOMREQUEST])) {
- curl_setopt($ch,CURLOPT_POST,0);
- }
-
- // response get php value
- if (!isset($parameters[CURLOPT_RETURNTRANSFER])) {
- curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
- }
-
- // HTTP2
- if (!isset($parameters[CURLOPT_HTTP_VERSION])) {
- curl_setopt($ch,CURLOPT_HTTP_VERSION,3);
- }
- if (!isset($parameters[CURLINFO_HEADER_OUT])) {
- curl_setopt($ch,CURLINFO_HEADER_OUT,TRUE);
- }
-
- $data['html'] = json_decode(curl_exec($ch),true);
- $data['response'] = curl_getinfo($ch);
-
- curl_close($ch);
- }
-
- return $data;
- }
-
- /**
- * set_url
- *
- * @param string $path
- */
- public function set_url ($path) {
- $this->mastodon_url = $path;
- }
-
- /**
- * set_client
- *
- * @param string $id
- * @param string $secret
- */
- public function set_client ($id,$secret) {
- $this->client_id = $id;
- $this->client_secret = $secret;
- }
-
- /**
- * set_token
- *
- * @param string $token
- * @param string $type
- */
- public function set_token ($token,$type) {
- $this->token['access_token'] = $token;
- $this->token['token_type'] = $type;
- }
-
- /**
- * set_scopes
- *
- * @param array $scopes read / write / follow
- */
- public function set_scopes ($scopes) {
- $this->scopes = $scopes;
- }
-
- /**
- * create_app
- *
- * @param string $client_name
- * @param array $scopes read / write / follow
- * @param string $redirect_uris
- * @param string $website
- *
- * @return array $response
- * int $response['id']
- * string $response['redirect_uri']
- * string $response['client_id']
- * string $response['client_secret']
- */
- public function create_app ($client_name,$scopes = array(),$redirect_uris = '',$website = '') {
- $parameters = array();
-
- if (count($scopes) == 0) {
- if (count($this->scopes) == 0) {
- $scopes = array('read','write','follow');
- } else {
- $scopes = $this->scopes;
- }
- }
-
- $parameters['client_name'] = $client_name;
- $parameters['scopes'] = implode(' ',$scopes);
-
- if (empty($redirect_uris)) {
- $parameters['redirect_uris'] = 'urn:ietf:wg:oauth:2.0:oob';
- } else {
- $parameters['redirect_uris'] = $redirect_uris;
- }
-
- if ($website) {
- $parameters['website'] = $website;
- }
-
- $response = $this->_post('/api/v1/apps',$parameters);
-
- if (isset($response['html']['client_id'])) {
- $this->client_id = $response['html']['client_id'];
- $this->client_secret = $response['html']['client_secret'];
- }
-
- return $response;
- }
-
- /**
- * login
- *
- * @param string $id E-mail Address
- * @param string $password Password
- *
- * @return array $response
- * string $response['access_token']
- * string $response['token_type'] bearer
- * string $response['scope'] read
- * int $response['created_at'] time
- */
- public function login ($id,$password) {
- $parameters = array();
- $parameters['client_id'] = $this->client_id;
- $parameters['client_secret'] = $this->client_secret;
- $parameters['grant_type'] = 'password';
- $parameters['username'] = $id;
- $parameters['password'] = $password;
-
- if (count($this->scopes) == 0) {
- $parameters['scope'] = implode(' ',array('read','write','follow'));
- } else {
- $parameters['scope'] = implode(' ',$this->scopes);
- }
-
- $response = $this->_post('/oauth/token',$parameters);
-
- if (isset($response['html']["access_token"])) {
- $this->token['access_token'] = $response['html']['access_token'];
- $this->token['token_type'] = $response['html']['token_type'];
- }
-
- return $response;
- }
-
- public function get_access_token ($redirect_uri,$code) {
- $parameters = array();
- $parameters['grant_type'] = 'authorization_code';
- $parameters['redirect_uri'] = $redirect_uri;
- $parameters['client_id'] = $this->client_id;
- $parameters['client_secret'] = $this->client_secret;
- $parameters['code'] = $code;
- $response = $this->_post('/oauth/token',$parameters);
-
- if (isset($response['html']["access_token"])) {
- $this->token['access_token'] = $response['html']['access_token'];
- $this->token['token_type'] = $response['html']['token_type'];
- }
-
- return $response;
- }
-
- /**
- * accounts
- *
- * @see https://your-domain/web/accounts/:id
- *
- * @param int $id
- *
- * @return array $response
- * int $response['id']
- * string $response['username']
- * string $response['acct']
- * string $response['display_name'] The name to display in the user's profile
- * bool $response['locked']
- * string $response['created_at']
- * int $response['followers_count']
- * int $response['following_count']
- * int $response['statuses_count']
- * string $response['note'] A new biography for the user
- * string $response['url']
- * string $response['avatar'] A base64 encoded image to display as the user's avatar
- * string $response['avatar_static']
- * string $response['header'] A base64 encoded image to display as the user's header image
- * string $response['header_static']
- */
- public function accounts ($id) {
- $response = $this->_get('/api/v1/accounts/'.$id);
- return $response;
- }
-
- /**
- * accounts_verify_credentials
- *
- * Getting the current user
- *
- * @return array $response
- */
- public function accounts_verify_credentials () {
- $response = $this->_get('/api/v1/accounts/verify_credentials');
- return $response;
- }
-
- /**
- * accounts_update_credentials
- *
- * Updating the current user
- *
- * @param array $parameters
- * string $parameters['display_name'] The name to display in the user's profile
- * string $parameters['note'] A new biography for the user
- * string $parameters['avatar'] A base64 encoded image to display as the user's avatar
- * string $parameters['header'] A base64 encoded image to display as the user's header image
- *
- * @return array $response
- */
- public function accounts_update_credentials ($parameters) {
- $response = $this->_patch('/api/v1/accounts/update_credentials',$parameters);
- return $response;
- }
-
- /**
- * accounts_followers
- *
- * @see https://your-domain/web/accounts/:id
- *
- * @param int $id
- *
- * @return array $response
- */
- public function accounts_followers ($id) {
- $response = $this->_get('/api/v1/accounts/'.$id.'/followers');
- return $response;
- }
-
- /**
- * accounts_following
- *
- * @see https://your-domain/web/accounts/:id
- *
- * @param int $id
- *
- * @return array $response
- */
- public function accounts_following ($id) {
- $response = $this->_get('/api/v1/accounts/'.$id.'/following');
- return $response;
- }
-
- /**
- * accounts_statuses
- *
- * @see https://your-domain/web/accounts/:id
- *
- * @param int $id
- *
- * @return array $response
- */
- public function accounts_statuses ($id) {
- $response = $this->_get('/api/v1/accounts/'.$id.'/statuses');
- return $response;
- }
-
- /**
- * accounts_follow
- *
- * @see https://your-domain/web/accounts/:id
- *
- * @param int $id
- *
- * @return array $response
- */
- public function accounts_follow ($id) {
- $response = $this->_post('/api/v1/accounts/'.$id.'/follow');
- return $response;
- }
-
- /**
- * accounts_unfollow
- *
- * @see https://your-domain/web/accounts/:id
- *
- * @param int $id
- *
- * @return array $response
- */
- public function accounts_unfollow ($id) {
- $response = $this->_post('/api/v1/accounts/'.$id.'/unfollow');
- return $response;
- }
-
- /**
- * accounts_block
- *
- * @see https://your-domain/web/accounts/:id
- *
- * @param int $id
- *
- * @return array $response
- */
- public function accounts_block ($id) {
- $response = $this->_post('/api/v1/accounts/'.$id.'/block');
- return $response;
- }
-
- /**
- * accounts_unblock
- *
- * @see https://your-domain/web/accounts/:id
- *
- * @param int $id
- *
- * @return array $response
- */
- public function accounts_unblock ($id) {
- $response = $this->_post('/api/v1/accounts/'.$id.'/unblock');
- return $response;
- }
-
- /**
- * accounts_mute
- *
- * @see https://your-domain/web/accounts/:id
- *
- * @param int $id
- *
- * @return array $response
- */
- public function accounts_mute ($id) {
- $response = $this->_post('/api/v1/accounts/'.$id.'/mute');
- return $response;
- }
-
- /**
- * accounts_unmute
- *
- * @see https://your-domain/web/accounts/:id
- *
- * @param int $id
- *
- * @return array $response
- */
- public function accounts_unmute ($id) {
- $response = $this->_post('/api/v1/accounts/'.$id.'/unmute');
- return $response;
- }
-
- /**
- * accounts_relationships
- *
- * @see https://your-domain/web/accounts/:id
- *
- * @param array $parameters
- * int $parameters['id']
- *
- * @return array $response
- * int $response['id']
- * bool $response['following']
- * bool $response['followed_by']
- * bool $response['blocking']
- * bool $response['muting']
- * bool $response['requested']
- */
- public function accounts_relationships ($parameters) {
- $response = $this->_get('/api/v1/accounts/relationships',$parameters);
- return $response;
- }
-
- /**
- * accounts_search
- *
- * @param array $parameters
- * string $parameters['q']
- * int $parameters['limit'] default : 40
- *
- * @return array $response
- */
- public function accounts_search ($parameters) {
- $response = $this->_get('/api/v1/accounts/search',$parameters);
- return $response;
- }
-
- /**
- * blocks
- *
- * @return array $response
- */
- public function blocks () {
- $response = $this->_get('/api/v1/blocks');
- return $response;
- }
-
- /**
- * favourites
- *
- * @return array $response
- */
- public function favourites () {
- $response = $this->_get('/api/v1/favourites');
- return $response;
- }
-
- /**
- * follow_requests
- *
- * @return array $response
- */
- public function follow_requests () {
- $response = $this->_get('/api/v1/follow_requests');
- return $response;
- }
-
- /**
- * follow_requests_authorize
- *
- * @see https://your-domain/web/accounts/:id
- *
- * @param int $id
- *
- * @return array $response
- */
- public function follow_requests_authorize ($id) {
- $response = $this->_post('/api/v1/follow_requests/authorize',array('id'=>$id));
- return $response;
- }
-
- /**
- * follow_requests_reject
- *
- * @see https://your-domain/web/accounts/:id
- *
- * @param int $id
- * @return array $response
- */
- public function follow_requests_reject ($id) {
- $response = $this->_post('/api/v1/follow_requests/reject',array('id'=>$id));
- return $response;
- }
-
- /**
- * follows
- *
- * Following a remote user
- *
- * @param string $uri username@domain of the person you want to follow
- * @return array $response
- */
- public function follows ($uri) {
- $response = $this->_post('/api/v1/follows',array('uri'=>$uri));
- return $response;
- }
-
- /**
- * instance
- *
- * Getting instance information
- *
- * @return array $response
- * string $response['uri']
- * string $response['title']
- * string $response['description']
- * string $response['email']
- */
- public function instance () {
- $response = $this->_get('/api/v1/instance');
- return $response;
- }
-
- /**
- * media
- *
- * Uploading a media attachment
- *
- * @param string $file_path local path / http path
- *
- * @return array $response
- * int $response['id'] ID of the attachment
- * string $response['type'] One of: "image", "video", "gifv"
- * string $response['url'] URL of the locally hosted version of the image
- * string $response['remote_url'] For remote images, the remote URL of the original image
- * string $response['preview_url'] URL of the preview image
- * string $response['text_url'] Shorter URL for the image, for insertion into text (only present on local images)
- */
- public function media ($file_path) {
- $url = $this->mastodon_url.'/api/v1/media';
- $parameters = $data = array();
- $parameters[CURLOPT_HTTPHEADER] = array('Content-Type'=>'multipart/form-data');
- $parameters[CURLOPT_POST] = true;
-
- // set access_token
- if (isset($this->token['access_token'])) {
- $parameters[CURLOPT_POSTFIELDS]['access_token'] = $this->token['access_token'];
- }
-
- if (is_file($file_path)) {
- $mime_type = mime_content_type($file_path);
-
- $cf = curl_file_create($file_path,$mime_type,'file');
- $parameters[CURLOPT_POSTFIELDS]['file'] = $cf;
- }
-
- $response = $this->get_content_curl($url,$parameters);
- return $response;
- }
-
- /**
- * mutes
- *
- * Fetching a user's mutes
- *
- * @return array $response
- */
- public function mutes () {
- $response = $this->_get('/api/v1/mutes');
- return $response;
- }
-
- /**
- * notifications
- *
- * @param int $id
- *
- * @return array $response
- */
- public function notifications ($id = 0) {
- $url = '/api/v1/notifications';
-
- if ($id > 0) {
- $url .= '/'.$id;
- }
-
- $response = $this->_get($url);
- return $response;
- }
-
- /**
- * notifications_clear
- *
- * Clearing notifications
- *
- * @return array $response
- */
- public function notifications_clear () {
- $response = $this->_post('/api/v1/notifications/clear');
- return $response;
- }
-
- /**
- * get_reports
- *
- * Fetching a user's reports
- *
- * @return array $response
- */
- public function get_reports () {
- $response = $this->_get('/api/v1/reports');
- return $response;
- }
-
- /**
- * post_reports
- *
- * Reporting a user
- *
- * @param array $parameters
- * int $parameters['account_id'] The ID of the account to report
- * int $parameters['status_ids'] The IDs of statuses to report (can be an array)
- * string $parameters['comment'] A comment to associate with the report.
- *
- * @return array $response
- */
- public function post_reports ($parameters) {
- $response = $this->_post('/api/v1/reports',$parameters);
- return $response;
- }
-
- /**
- * search
- *
- * Searching for content
- *
- * @param array $parameters
- * string $parameters['q'] The search query
- * string $parameters['resolve'] Whether to resolve non-local accounts
- *
- * @return array $response
- */
- public function search ($parameters) {
- $response = $this->_get('/api/v1/search',$parameters);
- return $response;
- }
-
- /**
- * statuses
- *
- * Fetching a status
- *
- * @param int $id
- *
- * @return array $response
- */
- public function statuses ($id) {
- $response = $this->_get('/api/v1/statuses/'.$id);
- return $response;
- }
-
- /**
- * statuses_context
- *
- * Getting status context
- *
- * @param int $id
- *
- * @return array $response
- */
- public function statuses_context ($id) {
- $response = $this->_get('/api/v1/statuses/'.$id.'/context');
- return $response;
- }
-
- /**
- * statuses_card
- *
- * Getting a card associated with a status
- *
- * @param int $id
- *
- * @return array $response
- */
- public function statuses_card ($id) {
- $response = $this->_get('/api/v1/statuses/'.$id.'/card');
- return $response;
- }
-
- /**
- * statuses_reblogged_by
- *
- * Getting who reblogged a status
- *
- * @param int $id
- *
- * @return array $response
- */
- public function statuses_reblogged_by ($id) {
- $response = $this->_get('/api/v1/statuses/'.$id.'/reblogged_by');
- return $response;
- }
-
- /**
- * statuses_favourited_by
- *
- * Getting who favourited a status
- *
- * @param int $id
- *
- * @return array $response
- */
- public function statuses_favourited_by ($id) {
- $response = $this->_get('/api/v1/statuses/'.$id.'/favourited_by');
- return $response;
- }
-
- /**
- * post_statuses
- *
- * @param array $parameters
- * string $parameters['status'] The text of the status
- * int $parameters['in_reply_to_id'] (optional): local ID of the status you want to reply to
- * int $parameters['media_ids'] (optional): array of media IDs to attach to the status (maximum 4)
- * string $parameters['sensitive'] (optional): set this to mark the media of the status as NSFW
- * string $parameters['spoiler_text'] (optional): text to be shown as a warning before the actual content
- * string $parameters['visibility'] (optional): either "direct", "private", "unlisted" or "public"
- *
- * @return array $response
- */
- public function post_statuses ($parameters) {
- $response = $this->_post('/api/v1/statuses',$parameters);
- return $response;
- }
-
- /**
- * delete_statuses
- *
- * Deleting a status
- *
- * @param int $id
- *
- * @return array $response empty
- */
- public function delete_statuses ($id) {
- $response = $this->_delete('/api/v1/statuses/'.$id);
- return $response;
- }
-
- /**
- * statuses_reblog
- *
- * Reblogging a status
- *
- * @param int $id
- *
- * @return array $response
- */
- public function statuses_reblog ($id) {
- $response = $this->_post('/api/v1/statuses/'.$id.'/reblog');
- return $response;
- }
-
- /**
- * statuses_unreblog
- *
- * Unreblogging a status
- *
- * @param int $id
- *
- * @return array $response
- */
- public function statuses_unreblog ($id) {
- $response = $this->_post('/api/v1/statuses/'.$id.'/unreblog');
- return $response;
- }
-
- /**
- * statuses_favourite
- *
- * Favouriting a status
- *
- * @param int $id
- *
- * @return array $response
- */
- public function statuses_favourite ($id) {
- $response = $this->_post('/api/v1/statuses/'.$id.'/favourite');
- return $response;
- }
-
- /**
- * statuses_unfavourite
- *
- * Unfavouriting a status
- *
- * @param int $id
- *
- * @return array $response
- */
- public function statuses_unfavourite ($id) {
- $response = $this->_post('/api/v1/statuses/'.$id.'/unfavourite');
- return $response;
- }
-
- /**
- * timelines_home
- *
- * @return array $response
- */
- public function timelines_home () {
- $response = $this->_get('/api/v1/timelines/home');
- return $response;
- }
-
- /**
- * timelines_public
- *
- * @param array $parameters
- * bool $parameters['local'] Only return statuses originating from this instance
- *
- * @return array $response
- */
- public function timelines_public ($parameters = array()) {
- $response = $this->_get('/api/v1/timelines/public',$parameters);
- return $response;
- }
-
- /**
- * timelines_tag
- *
- * @param string $hashtag
- * @param array $parameters
- * bool $parameters['local'] Only return statuses originating from this instance
- *
- * @return array $response
- */
- public function timelines_tag ($hashtag,$parameters = array()) {
- $response = $this->_get('/api/v1/timelines/tag/'.$hashtag,$parameters);
- return $response;
- }
-
-}
diff --git a/authorize/Mastodon-api-php/README.md b/authorize/Mastodon-api-php/README.md
deleted file mode 100755
index 902b2ca..0000000
--- a/authorize/Mastodon-api-php/README.md
+++ /dev/null
@@ -1,19 +0,0 @@
-# Mastodon-api-php
-A GNU Social-compatible microblogging server https://mastodon.social PHP API
-
-## How to use
-require_once '/path/Mastodon_api.php';
-
-$mastodon_api = new Mastodon_api();
-$mastodon_api->set_url('Mastodon url');
-
-// print_r($mastodon_api->create_app('APP Name',null,null,'Mastodon url'));
-$mastodon_api->set_client('client_id','client_secret');
-
-// print_r($mastodon_api->login('your login email','your login password'));
-$mastodon_api->set_token('access_token','token_type');
-
-$mastodon_api->timelines_home();
-
-## Test Mastodon
-https://ery.kr
diff --git a/authorize/Mastodon.php b/authorize/Mastodon.php
deleted file mode 100755
index 77ab619..0000000
--- a/authorize/Mastodon.php
+++ /dev/null
@@ -1,82 +0,0 @@
-clientName = $appSettings["App"]["api_client_name"];
- $this->clientRedirectUris = $appSettings["App"]["api_client_website"].'/auth urn:ietf:wg:oauth:2.0:oob';
- $this->clientWebsite = $appSettings["App"]["api_client_website"];
- $this->clientScopes = array('read', 'write', 'follow');
- $this->instances = array();
-
- $this->dbHost = $appSettings["Mysql"]["db_host"];
- $this->dbUser = $appSettings["Mysql"]["db_user"];
- $this->dbPass = $appSettings["Mysql"]["db_pass"];
- $this->dbName = $appSettings["Mysql"]["db_name"];
-
- $this->database = new Database($this->dbHost, $this->dbUser, $this->dbPass, $this->dbName);
- $this->readInstances();
- }
-
- /* note: $domainって書いてあるけど、ドメインじゃなくてURLです。すみません */
-
- private function newInstance($domain)
- {
- $res = $this->create_app($this->clientName, $this->clientScopes, $this->clientRedirectUris, $this->clientWebsite);
- if (isset($res['html']['client_id'])) {
- $this->instances[$domain] = $res['html'];
- $this->database->dbExecute("insert into instances(domain, client_id, client_secret) values(?,?,?)", array($domain, $res['html']['client_id'], $res['html']['client_secret']));
- // insert into instances(domain, client_id, client_secret) values($domain, $client_id, $client_secret)
- }else{
- throw new Exception("Invalid instance");
- }
- }
-
- public function selectInstance($domain)
- {
- $this->set_url($domain);
- if (!$this->instanceExists($domain)) {
- $this->newInstance($domain);
- }
- $this->set_client($this->instances[$domain]['client_id'], $this->instances[$domain]['client_secret']);
- }
-
- public function getInstance($domain)
- {
- $this->set_url($domain);
- if (!$this->instanceExists($domain)) {
- $this->newInstance($domain);
- }
- return array('client_id' => $this->instances[$domain]['client_id'], 'client_secret' => $this->instances[$domain]['client_secret']);
- }
-
- public function instanceExists($domain)
- {
- return isset($this->instances[$domain]);
- }
-
- private function readInstances()
- {
- $stmt = $this->database->dbExecute("select domain,client_id,client_secret from instances");
- foreach($stmt->fetchAll(PDO::FETCH_ASSOC) as $row){
- $this->instances[$row['domain']] = $row;
- }
- }
-
-}
-?>
diff --git a/authorize/database.php b/authorize/database.php
deleted file mode 100755
index 68c8acb..0000000
--- a/authorize/database.php
+++ /dev/null
@@ -1,50 +0,0 @@
-dbhost = $dbhost;
- $this->dbuser = $dbuser;
- $this->dbpass = $dbpass;
- $this->dbname = $dbname;
- $this->dsn = "mysql:dbname=".$this->dbname.";host=".$this->dbhost.";charset=utf8";
- $this->connecting = false;
- $this->dbConnect();
- }
-
- public function dbConnect($commit=True){
- try{
- $dbh = new PDO($this->dsn, $this->dbuser, $this->dbpass);
- $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
- if(!$commit){
- $dbh->beginTransaction();
- }
- }catch (PDOException $e){
- throw new Exception($e);
- }
- $this->dbh = $dbh;
- $this->connecting = true;
- return $dbh;
- }
-
- public function dbClose(){
- $this->dbh = Null;
- $this->connecting = false;
- }
-
- public function dbExecute($sql, $attr = null){
- if ($attr === null) {
- $attr = array();
- }
- if (!$this->connecting) {
- $this->dbConnect();
- }
- $stmt = $this->dbh->prepare($sql);
- $stmt->execute($attr);
- return $stmt;
- }
-}
-?>
diff --git a/authorize/Mastodon-api-php/LICENSE b/authorize/mastodon-api/LICENSE
old mode 100755
new mode 100644
similarity index 100%
rename from authorize/Mastodon-api-php/LICENSE
rename to authorize/mastodon-api/LICENSE
diff --git a/authorize/mastodon-api/mastodon.php b/authorize/mastodon-api/mastodon.php
new file mode 100644
index 0000000..3d07633
--- /dev/null
+++ b/authorize/mastodon-api/mastodon.php
@@ -0,0 +1,374 @@
+
+ * @copyright KwangSeon Yun
+ * @license https://raw.githubusercontent.com/yks118/Mastodon-api-php/master/LICENSE MIT License
+ * @link https://github.com/yks118/Mastodon-api-php
+ */
+class Mastodon_api {
+private $mastodon_url = '';
+private $client_id = '';
+private $client_secret = '';
+private $token = array();
+private $scopes = array();
+public function __construct () {}
+public function __destruct () {}
+private function _post ($url,$data = array()) {
+$parameters = array();
+$parameters[CURLOPT_POST] = 1;
+if (isset($this->token['access_token'])) {
+$data['access_token'] = $this->token['access_token'];
+}
+if (count($data)) {
+$parameters[CURLOPT_POSTFIELDS] = http_build_query($data);
+}
+$url = $this->mastodon_url.$url;
+$response = $this->get_content_curl($url,$parameters);
+return $response;
+}
+private function _get ($url,$data = array()) {
+$parameters = array();
+if (isset($this->token['access_token'])) {
+$authorization = 'Authorization: '.$this->token['token_type'].' '.$this->token['access_token'];
+$parameters[CURLOPT_HTTPHEADER] = array('Content-Type: application/json',$authorization);
+}
+$url = $this->mastodon_url.$url;
+if (count($data)) {
+$url .= '?'.http_build_query($data);
+}
+$response = $this->get_content_curl($url,$parameters);
+return $response;
+}
+private function _patch ($url,$data = array()) {
+$parameters = array();
+$parameters[CURLOPT_CUSTOMREQUEST] = 'PATCH';
+if (isset($this->token['access_token'])) {
+$authorization = 'Authorization: '.$this->token['token_type'].' '.$this->token['access_token'];
+$parameters[CURLOPT_HTTPHEADER] = array('Content-Type: application/json',$authorization);
+}
+if (count($data)) {
+$parameters[CURLOPT_POSTFIELDS] = json_encode($data);
+}
+$url = $this->mastodon_url.$url;
+$response = $this->get_content_curl($url,$parameters);
+return $response;
+}
+private function _delete ($url) {
+$parameters = array();
+$parameters[CURLOPT_CUSTOMREQUEST] = 'DELETE';
+if (isset($this->token['access_token'])) {
+$authorization = 'Authorization: '.$this->token['token_type'].' '.$this->token['access_token'];
+$parameters[CURLOPT_HTTPHEADER] = array('Content-Type: application/json',$authorization);
+}
+$url = $this->mastodon_url.$url;
+$response = $this->get_content_curl($url,$parameters);
+return $response;
+}
+protected function get_content_curl ($url,$parameters = array()) {
+$data = array();
+if (!isset($parameters[CURLOPT_USERAGENT])) {
+if (isset($_SERVER['HTTP_USER_AGENT'])) {
+$parameters[CURLOPT_USERAGENT] = $_SERVER['HTTP_USER_AGENT'];
+} else {
+$parameters[CURLOPT_USERAGENT] = 'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko';
+}
+}
+if (function_exists('curl_init')) {
+$ch = curl_init();
+curl_setopt($ch,CURLOPT_URL,$url);
+foreach ($parameters as $key => $value) {
+curl_setopt($ch,$key,$value);
+}
+if (!isset($parameters[CURLOPT_SSL_VERIFYPEER])) {
+curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
+}
+if (!isset($parameters[CURLOPT_SSLVERSION])) {
+curl_setopt($ch,CURLOPT_SSLVERSION,6);
+}
+if (!isset($parameters[CURLOPT_HEADER])) {
+curl_setopt($ch,CURLOPT_HEADER,0);
+}
+if (!isset($parameters[CURLOPT_POST]) && !isset($parameters[CURLOPT_CUSTOMREQUEST])) {
+curl_setopt($ch,CURLOPT_POST,0);
+}
+if (!isset($parameters[CURLOPT_RETURNTRANSFER])) {
+curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
+}
+if (!isset($parameters[CURLOPT_HTTP_VERSION])) {
+curl_setopt($ch,CURLOPT_HTTP_VERSION,3);
+}
+if (!isset($parameters[CURLINFO_HEADER_OUT])) {
+curl_setopt($ch,CURLINFO_HEADER_OUT,TRUE);
+}
+$data['html'] = json_decode(curl_exec($ch),true);
+$data['response'] = curl_getinfo($ch);
+curl_close($ch);
+}
+return $data;
+}
+public function set_url ($path) {
+$this->mastodon_url = $path;
+}
+public function set_client ($id,$secret) {
+$this->client_id = $id;
+$this->client_secret = $secret;
+}
+public function set_token ($token,$type) {
+$this->token['access_token'] = $token;
+$this->token['token_type'] = $type;
+}
+public function set_scopes ($scopes) {
+$this->scopes = $scopes;
+}
+public function create_app ($client_name,$scopes = array(),$redirect_uris = '',$website = '') {
+$parameters = array();
+if (count($scopes) == 0) {
+if (count($this->scopes) == 0) {
+$scopes = array('read','write','follow');
+} else {
+$scopes = $this->scopes;
+}
+}
+$parameters['client_name'] = $client_name;
+$parameters['scopes'] = implode(' ',$scopes);
+if (empty($redirect_uris)) {
+$parameters['redirect_uris'] = 'urn:ietf:wg:oauth:2.0:oob';
+} else {
+$parameters['redirect_uris'] = $redirect_uris;
+}
+if ($website) {
+$parameters['website'] = $website;
+}
+$response = $this->_post('/api/v1/apps',$parameters);
+if (isset($response['html']['client_id'])) {
+$this->client_id = $response['html']['client_id'];
+$this->client_secret = $response['html']['client_secret'];
+}
+return $response;
+}
+public function login ($id,$password) {
+$parameters = array();
+$parameters['client_id'] = $this->client_id;
+$parameters['client_secret'] = $this->client_secret;
+$parameters['grant_type'] = 'password';
+$parameters['username'] = $id;
+$parameters['password'] = $password;
+if (count($this->scopes) == 0) {
+$parameters['scope'] = implode(' ',array('read','write','follow'));
+} else {
+$parameters['scope'] = implode(' ',$this->scopes);
+}
+$response = $this->_post('/oauth/token',$parameters);
+if (isset($response['html']["access_token"])) {
+$this->token['access_token'] = $response['html']['access_token'];
+$this->token['token_type'] = $response['html']['token_type'];
+}
+return $response;
+}
+public function get_access_token ($redirect_uri,$code) {
+$parameters = array();
+$parameters['grant_type'] = 'authorization_code';
+$parameters['redirect_uri'] = $redirect_uri;
+$parameters['client_id'] = $this->client_id;
+$parameters['client_secret'] = $this->client_secret;
+$parameters['code'] = $code;
+$response = $this->_post('/oauth/token',$parameters);
+if (isset($response['html']["access_token"])) {
+$this->token['access_token'] = $response['html']['access_token'];
+$this->token['token_type'] = $response['html']['token_type'];
+}
+return $response;
+}
+public function accounts ($id) {
+$response = $this->_get('/api/v1/accounts/'.$id);
+return $response;
+}
+public function accounts_verify_credentials () {
+$response = $this->_get('/api/v1/accounts/verify_credentials');
+return $response;
+}
+public function accounts_update_credentials ($parameters) {
+$response = $this->_patch('/api/v1/accounts/update_credentials',$parameters);
+return $response;
+}
+public function accounts_followers ($id) {
+$response = $this->_get('/api/v1/accounts/'.$id.'/followers');
+return $response;
+}
+public function accounts_following ($id) {
+$response = $this->_get('/api/v1/accounts/'.$id.'/following');
+return $response;
+}
+public function accounts_statuses ($id) {
+$response = $this->_get('/api/v1/accounts/'.$id.'/statuses');
+return $response;
+}
+public function accounts_follow ($id) {
+$response = $this->_post('/api/v1/accounts/'.$id.'/follow');
+return $response;
+}
+public function accounts_unfollow ($id) {
+$response = $this->_post('/api/v1/accounts/'.$id.'/unfollow');
+return $response;
+}
+public function accounts_block ($id) {
+$response = $this->_post('/api/v1/accounts/'.$id.'/block');
+return $response;
+}
+public function accounts_unblock ($id) {
+$response = $this->_post('/api/v1/accounts/'.$id.'/unblock');
+return $response;
+}
+public function accounts_mute ($id) {
+$response = $this->_post('/api/v1/accounts/'.$id.'/mute');
+return $response;
+}
+public function accounts_unmute ($id) {
+$response = $this->_post('/api/v1/accounts/'.$id.'/unmute');
+return $response;
+}
+public function accounts_relationships ($parameters) {
+$response = $this->_get('/api/v1/accounts/relationships',$parameters);
+return $response;
+}
+public function accounts_search ($parameters) {
+$response = $this->_get('/api/v1/accounts/search',$parameters);
+return $response;
+}
+public function blocks () {
+$response = $this->_get('/api/v1/blocks');
+return $response;
+}
+public function favourites () {
+$response = $this->_get('/api/v1/favourites');
+return $response;
+}
+public function follow_requests () {
+$response = $this->_get('/api/v1/follow_requests');
+return $response;
+}
+public function follow_requests_authorize ($id) {
+$response = $this->_post('/api/v1/follow_requests/authorize',array('id'=>$id));
+return $response;
+}
+public function follow_requests_reject ($id) {
+$response = $this->_post('/api/v1/follow_requests/reject',array('id'=>$id));
+return $response;
+}
+public function follows ($uri) {
+$response = $this->_post('/api/v1/follows',array('uri'=>$uri));
+return $response;
+}
+public function instance () {
+$response = $this->_get('/api/v1/instance');
+return $response;
+}
+public function media ($file_path) {
+$url = $this->mastodon_url.'/api/v1/media';
+$parameters = $data = array();
+$parameters[CURLOPT_HTTPHEADER] = array('Content-Type'=>'multipart/form-data');
+$parameters[CURLOPT_POST] = true;
+if (isset($this->token['access_token'])) {
+$parameters[CURLOPT_POSTFIELDS]['access_token'] = $this->token['access_token'];
+}
+if (is_file($file_path)) {
+$mime_type = mime_content_type($file_path);
+$cf = curl_file_create($file_path,$mime_type,'file');
+$parameters[CURLOPT_POSTFIELDS]['file'] = $cf;
+}
+$response = $this->get_content_curl($url,$parameters);
+return $response;
+}
+public function mutes () {
+$response = $this->_get('/api/v1/mutes');
+return $response;
+}
+public function notifications ($id = 0) {
+$url = '/api/v1/notifications';
+if ($id > 0) {
+$url .= '/'.$id;
+}
+$response = $this->_get($url);
+return $response;
+}
+public function notifications_clear () {
+$response = $this->_post('/api/v1/notifications/clear');
+return $response;
+}
+public function get_reports () {
+$response = $this->_get('/api/v1/reports');
+return $response;
+}
+public function post_reports ($parameters) {
+$response = $this->_post('/api/v1/reports',$parameters);
+return $response;
+}
+public function search ($parameters) {
+$response = $this->_get('/api/v1/search',$parameters);
+return $response;
+}
+public function statuses ($id) {
+$response = $this->_get('/api/v1/statuses/'.$id);
+return $response;
+}
+public function statuses_context ($id) {
+$response = $this->_get('/api/v1/statuses/'.$id.'/context');
+return $response;
+}
+public function statuses_card ($id) {
+$response = $this->_get('/api/v1/statuses/'.$id.'/card');
+return $response;
+}
+public function statuses_reblogged_by ($id) {
+$response = $this->_get('/api/v1/statuses/'.$id.'/reblogged_by');
+return $response;
+}
+public function statuses_favourited_by ($id) {
+$response = $this->_get('/api/v1/statuses/'.$id.'/favourited_by');
+return $response;
+}
+public function post_statuses ($parameters) {
+$response = $this->_post('/api/v1/statuses',$parameters);
+return $response;
+}
+public function delete_statuses ($id) {
+$response = $this->_delete('/api/v1/statuses/'.$id);
+return $response;
+}
+public function statuses_reblog ($id) {
+$response = $this->_post('/api/v1/statuses/'.$id.'/reblog');
+return $response;
+}
+public function statuses_unreblog ($id) {
+$response = $this->_post('/api/v1/statuses/'.$id.'/unreblog');
+return $response;
+}
+public function statuses_favourite ($id) {
+$response = $this->_post('/api/v1/statuses/'.$id.'/favourite');
+return $response;
+}
+public function statuses_unfavourite ($id) {
+$response = $this->_post('/api/v1/statuses/'.$id.'/unfavourite');
+return $response;
+}
+public function timelines_home () {
+$response = $this->_get('/api/v1/timelines/home');
+return $response;
+}
+public function timelines_public ($parameters = array()) {
+$response = $this->_get('/api/v1/timelines/public',$parameters);
+return $response;
+}
+public function timelines_tag ($hashtag,$parameters = array()) {
+$response = $this->_get('/api/v1/timelines/tag/'.$hashtag,$parameters);
+return $response;
+}
+}
+?>
\ No newline at end of file
diff --git a/authorize/mastodon.php b/authorize/mastodon.php
new file mode 100644
index 0000000..66b5c22
--- /dev/null
+++ b/authorize/mastodon.php
@@ -0,0 +1,51 @@
+datadir = "../data";
+$this->clientName = $appSettings["App"]["api_client_name"];
+$this->clientRedirectUris = $appSettings["App"]["api_client_website"].'/auth urn:ietf:wg:oauth:2.0:oob';
+$this->clientWebsite = $appSettings["App"]["api_client_website"];
+$this->clientScopes = array('read','write','follow');
+$this->instances = array();
+$this->readInstances();
+}
+private function newInstance($domain) {
+$res = $this->create_app($this->clientName,$this->clientScopes,$this->clientRedirectUris,$this->clientWebsite);
+if(isset($res['html']['client_id'])) {
+$this->instances[$domain] = $res['html'];
+file_put_contents($this->datadir."/".substr($domain,8).".txt",json_encode(array("client_id" => $res['html']['client_id'],"client_secret" => $res['html']['client_secret'])));
+}
+else {
+throw new Exception("Invalid instance");
+}
+}
+public function selectInstance($domain) {
+$this->set_url($domain);
+if(!$this->instanceExists($domain)) {
+$this->newInstance($domain);
+}
+$this->set_client($this->instances[$domain]['client_id'],$this->instances[$domain]['client_secret']);
+}
+public function getInstance($domain) {
+$this->set_url($domain);
+if (!$this->instanceExists($domain)) {
+$this->newInstance($domain);
+}
+return array('client_id' => $this->instances[$domain]['client_id'],'client_secret' => $this->instances[$domain]['client_secret']);
+}
+public function instanceExists($domain) {
+return isset($this->instances[$domain]);
+}
+private function readInstances() {
+$instlist = array_diff(scandir($this->datadir),array("..",".",".htaccess"));
+foreach($instlist as $index => $item) {
+$itemname = "https://".substr($item,0,-4);
+$this->instances[$itemname] = json_decode(file_get_contents($this->datadir."/".$item),true);
+}
+}
+}
+?>
\ No newline at end of file
diff --git a/config.ini.sample b/config.ini.sample
index 2661a1f..13fada1 100644
--- a/config.ini.sample
+++ b/config.ini.sample
@@ -2,10 +2,3 @@
[App]
api_client_name = APPLICATION'S NAME
api_client_website = HTTPS://YOURDOMAIN.COM/
-
-; MySQL Settings
-[Mysql]
-db_host = YOUR DATABASE'S HOST
-db_user = YOUR DATABASE'S USER
-db_pass = YOUR DATABASE'S PASSWORD
-db_name = YOUR DATABASE'S NAME
diff --git a/data/.htaccess b/data/.htaccess
new file mode 100644
index 0000000..8d2f256
--- /dev/null
+++ b/data/.htaccess
@@ -0,0 +1 @@
+deny from all
diff --git a/federated.php b/federated.php
new file mode 100644
index 0000000..dbc1a04
--- /dev/null
+++ b/federated.php
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+View new Toots
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/public_html/footer.php b/footer.php
similarity index 66%
rename from public_html/footer.php
rename to footer.php
index e1bb889..27f3f4a 100644
--- a/public_html/footer.php
+++ b/footer.php
@@ -1,76 +1,52 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-