use bitvec::prelude::*;
use emoji::{self, Emoji};
use crate::libwallet::{Error, Slate, SlateVersion, VersionedSlate};
#[derive(Clone)]
pub struct EmojiSlate();
static EMOJI_MAP: [Emoji; 1024] = [
emoji::activities::arts_and_crafts::ARTIST_PALETTE,
emoji::activities::arts_and_crafts::PERFORMING_ARTS,
emoji::activities::arts_and_crafts::THREAD,
emoji::activities::arts_and_crafts::YARN,
emoji::activities::arts_and_crafts::KNOT,
emoji::activities::arts_and_crafts::SEWING_NEEDLE,
emoji::activities::award_medal::TROPHY,
emoji::activities::award_medal::FIRST_PLACE_MEDAL,
emoji::activities::award_medal::SPORTS_MEDAL,
emoji::activities::award_medal::SECOND_PLACE_MEDAL,
emoji::activities::award_medal::THIRD_PLACE_MEDAL,
emoji::activities::event::BALLOON,
emoji::activities::event::CARP_STREAMER,
emoji::activities::event::CHRISTMAS_TREE,
emoji::activities::event::CONFETTI_BALL,
emoji::activities::event::FIRECRACKER,
emoji::activities::event::FIREWORKS,
emoji::activities::event::JACK_O_LANTERN,
emoji::activities::event::JAPANESE_DOLLS,
emoji::activities::event::MOON_VIEWING_CEREMONY,
emoji::activities::event::PARTY_POPPER,
emoji::activities::event::PINE_DECORATION,
emoji::activities::event::RED_ENVELOPE,
emoji::activities::event::RIBBON,
emoji::activities::event::SPARKLER,
emoji::activities::event::SPARKLES,
emoji::activities::event::TANABATA_TREE,
emoji::activities::event::TICKET,
emoji::activities::event::WIND_CHIME,
emoji::activities::event::WRAPPED_GIFT,
emoji::activities::game::BULLSEYE,
emoji::activities::game::CRYSTAL_BALL,
emoji::activities::game::FLOWER_PLAYING_CARDS,
emoji::activities::game::GAME_DIE,
emoji::activities::game::JOKER,
emoji::activities::game::KITE,
emoji::activities::game::MAGIC_WAND,
emoji::activities::game::MAHJONG_RED_DRAGON,
emoji::activities::game::NAZAR_AMULET,
emoji::activities::game::NESTING_DOLLS,
emoji::activities::game::PINATA,
emoji::activities::game::POOL_8_BALL,
emoji::activities::game::PUZZLE_PIECE,
emoji::activities::game::SLOT_MACHINE,
emoji::activities::game::TEDDY_BEAR,
emoji::activities::game::VIDEO_GAME,
emoji::activities::game::YO_YO,
emoji::activities::sport::AMERICAN_FOOTBALL,
emoji::activities::sport::BADMINTON,
emoji::activities::sport::BASEBALL,
emoji::activities::sport::BASKETBALL,
emoji::activities::sport::BOWLING,
emoji::activities::sport::BOXING_GLOVE,
emoji::activities::sport::CRICKET_GAME,
emoji::activities::sport::CURLING_STONE,
emoji::activities::sport::DIVING_MASK,
emoji::activities::sport::FIELD_HOCKEY,
emoji::activities::sport::FISHING_POLE,
emoji::activities::sport::FLAG_IN_HOLE,
emoji::activities::sport::FLYING_DISC,
emoji::activities::sport::GOAL_NET,
emoji::activities::sport::ICE_HOCKEY,
emoji::activities::sport::LACROSSE,
emoji::activities::sport::MARTIAL_ARTS_UNIFORM,
emoji::activities::sport::PING_PONG,
emoji::activities::sport::RUGBY_FOOTBALL,
emoji::activities::sport::RUNNING_SHIRT,
emoji::activities::sport::SKIS,
emoji::activities::sport::SLED,
emoji::activities::sport::SOCCER_BALL,
emoji::activities::sport::SOFTBALL,
emoji::activities::sport::TENNIS,
emoji::activities::sport::VOLLEYBALL,
emoji::animals_and_nature::animal_amphibian::FROG,
emoji::animals_and_nature::animal_bird::BABY_CHICK,
emoji::animals_and_nature::animal_bird::BIRD,
emoji::animals_and_nature::animal_bird::CHICKEN,
emoji::animals_and_nature::animal_bird::DODO,
emoji::animals_and_nature::animal_bird::DUCK,
emoji::animals_and_nature::animal_bird::EAGLE,
emoji::animals_and_nature::animal_bird::FEATHER,
emoji::animals_and_nature::animal_bird::FLAMINGO,
emoji::animals_and_nature::animal_bird::FRONT_FACING_BABY_CHICK,
emoji::animals_and_nature::animal_bird::HATCHING_CHICK,
emoji::animals_and_nature::animal_bird::OWL,
emoji::animals_and_nature::animal_bird::PARROT,
emoji::animals_and_nature::animal_bird::PEACOCK,
emoji::animals_and_nature::animal_bird::PENGUIN,
emoji::animals_and_nature::animal_bird::ROOSTER,
emoji::animals_and_nature::animal_bird::SWAN,
emoji::animals_and_nature::animal_bird::TURKEY,
emoji::animals_and_nature::animal_bug::ANT,
emoji::animals_and_nature::animal_bug::BEETLE,
emoji::animals_and_nature::animal_bug::BUG,
emoji::animals_and_nature::animal_bug::BUTTERFLY,
emoji::animals_and_nature::animal_bug::COCKROACH,
emoji::animals_and_nature::animal_bug::CRICKET,
emoji::animals_and_nature::animal_bug::FLY,
emoji::animals_and_nature::animal_bug::HONEYBEE,
emoji::animals_and_nature::animal_bug::LADY_BEETLE,
emoji::animals_and_nature::animal_bug::MICROBE,
emoji::animals_and_nature::animal_bug::MOSQUITO,
emoji::animals_and_nature::animal_bug::SCORPION,
emoji::animals_and_nature::animal_bug::SNAIL,
emoji::animals_and_nature::animal_bug::WORM,
emoji::animals_and_nature::animal_mammal::BADGER,
emoji::animals_and_nature::animal_mammal::BAT,
emoji::animals_and_nature::animal_mammal::BEAR,
emoji::animals_and_nature::animal_mammal::BEAVER,
emoji::animals_and_nature::animal_mammal::BISON,
emoji::animals_and_nature::animal_mammal::BOAR,
emoji::animals_and_nature::animal_mammal::CAMEL,
emoji::animals_and_nature::animal_mammal::CAT,
emoji::animals_and_nature::animal_mammal::CAT_FACE,
emoji::animals_and_nature::animal_mammal::COW,
emoji::animals_and_nature::animal_mammal::COW_FACE,
emoji::animals_and_nature::animal_mammal::DEER,
emoji::animals_and_nature::animal_mammal::DOG,
emoji::animals_and_nature::animal_mammal::DOG_FACE,
emoji::animals_and_nature::animal_mammal::ELEPHANT,
emoji::animals_and_nature::animal_mammal::EWE,
emoji::animals_and_nature::animal_mammal::FOX,
emoji::animals_and_nature::animal_mammal::GIRAFFE,
emoji::animals_and_nature::animal_mammal::GOAT,
emoji::animals_and_nature::animal_mammal::GORILLA,
emoji::animals_and_nature::animal_mammal::GUIDE_DOG,
emoji::animals_and_nature::animal_mammal::HAMSTER,
emoji::animals_and_nature::animal_mammal::HEDGEHOG,
emoji::animals_and_nature::animal_mammal::HIPPOPOTAMUS,
emoji::animals_and_nature::animal_mammal::HORSE,
emoji::animals_and_nature::animal_mammal::HORSE_FACE,
emoji::animals_and_nature::animal_mammal::KANGAROO,
emoji::animals_and_nature::animal_mammal::KOALA,
emoji::animals_and_nature::animal_mammal::LEOPARD,
emoji::animals_and_nature::animal_mammal::LION,
emoji::animals_and_nature::animal_mammal::LLAMA,
emoji::animals_and_nature::animal_mammal::MAMMOTH,
emoji::animals_and_nature::animal_mammal::MONKEY,
emoji::animals_and_nature::animal_mammal::MONKEY_FACE,
emoji::animals_and_nature::animal_mammal::MOUSE,
emoji::animals_and_nature::animal_mammal::MOUSE_FACE,
emoji::animals_and_nature::animal_mammal::ORANGUTAN,
emoji::animals_and_nature::animal_mammal::OTTER,
emoji::animals_and_nature::animal_mammal::OX,
emoji::animals_and_nature::animal_mammal::PANDA,
emoji::animals_and_nature::animal_mammal::PAW_PRINTS,
emoji::animals_and_nature::animal_mammal::PIG,
emoji::animals_and_nature::animal_mammal::PIG_FACE,
emoji::animals_and_nature::animal_mammal::PIG_NOSE,
emoji::animals_and_nature::animal_mammal::POODLE,
emoji::animals_and_nature::animal_mammal::RABBIT,
emoji::animals_and_nature::animal_mammal::RABBIT_FACE,
emoji::animals_and_nature::animal_mammal::RACCOON,
emoji::animals_and_nature::animal_mammal::RAM,
emoji::animals_and_nature::animal_mammal::RAT,
emoji::animals_and_nature::animal_mammal::RHINOCEROS,
emoji::animals_and_nature::animal_mammal::SKUNK,
emoji::animals_and_nature::animal_mammal::SLOTH,
emoji::animals_and_nature::animal_mammal::TIGER,
emoji::animals_and_nature::animal_mammal::TIGER_FACE,
emoji::animals_and_nature::animal_mammal::TWO_HUMP_CAMEL,
emoji::animals_and_nature::animal_mammal::UNICORN,
emoji::animals_and_nature::animal_mammal::WATER_BUFFALO,
emoji::animals_and_nature::animal_mammal::WOLF,
emoji::animals_and_nature::animal_mammal::ZEBRA,
emoji::animals_and_nature::animal_marine::BLOWFISH,
emoji::animals_and_nature::animal_marine::DOLPHIN,
emoji::animals_and_nature::animal_marine::FISH,
emoji::animals_and_nature::animal_marine::OCTOPUS,
emoji::animals_and_nature::animal_marine::SEAL,
emoji::animals_and_nature::animal_marine::SHARK,
emoji::animals_and_nature::animal_marine::SPIRAL_SHELL,
emoji::animals_and_nature::animal_marine::SPOUTING_WHALE,
emoji::animals_and_nature::animal_marine::TROPICAL_FISH,
emoji::animals_and_nature::animal_marine::WHALE,
emoji::animals_and_nature::animal_reptile::CROCODILE,
emoji::animals_and_nature::animal_reptile::DRAGON,
emoji::animals_and_nature::animal_reptile::DRAGON_FACE,
emoji::animals_and_nature::animal_reptile::LIZARD,
emoji::animals_and_nature::animal_reptile::SAUROPOD,
emoji::animals_and_nature::animal_reptile::SNAKE,
emoji::animals_and_nature::animal_reptile::TURTLE,
emoji::animals_and_nature::animal_reptile::T_REX,
emoji::animals_and_nature::plant_flower::BLOSSOM,
emoji::animals_and_nature::plant_flower::BOUQUET,
emoji::animals_and_nature::plant_flower::CHERRY_BLOSSOM,
emoji::animals_and_nature::plant_flower::HIBISCUS,
emoji::animals_and_nature::plant_flower::ROSE,
emoji::animals_and_nature::plant_flower::SUNFLOWER,
emoji::animals_and_nature::plant_flower::TULIP,
emoji::animals_and_nature::plant_flower::WHITE_FLOWER,
emoji::animals_and_nature::plant_flower::WILTED_FLOWER,
emoji::animals_and_nature::plant_other::CACTUS,
emoji::animals_and_nature::plant_other::DECIDUOUS_TREE,
emoji::animals_and_nature::plant_other::EVERGREEN_TREE,
emoji::animals_and_nature::plant_other::FALLEN_LEAF,
emoji::animals_and_nature::plant_other::FOUR_LEAF_CLOVER,
emoji::animals_and_nature::plant_other::HERB,
emoji::animals_and_nature::plant_other::LEAF_FLUTTERING_IN_WIND,
emoji::animals_and_nature::plant_other::MAPLE_LEAF,
emoji::animals_and_nature::plant_other::PALM_TREE,
emoji::animals_and_nature::plant_other::POTTED_PLANT,
emoji::animals_and_nature::plant_other::SEEDLING,
emoji::animals_and_nature::plant_other::SHEAF_OF_RICE,
emoji::flags::flag::BLACK_FLAG,
emoji::flags::flag::CHEQUERED_FLAG,
emoji::flags::flag::CROSSED_FLAGS,
emoji::flags::flag::TRIANGULAR_FLAG,
emoji::food_and_drink::dishware::AMPHORA,
emoji::food_and_drink::dishware::CHOPSTICKS,
emoji::food_and_drink::dishware::FORK_AND_KNIFE,
emoji::food_and_drink::dishware::KITCHEN_KNIFE,
emoji::food_and_drink::dishware::SPOON,
emoji::food_and_drink::drink::BABY_BOTTLE,
emoji::food_and_drink::drink::BEER_MUG,
emoji::food_and_drink::drink::BEVERAGE_BOX,
emoji::food_and_drink::drink::BOTTLE_WITH_POPPING_CORK,
emoji::food_and_drink::drink::BUBBLE_TEA,
emoji::food_and_drink::drink::CLINKING_BEER_MUGS,
emoji::food_and_drink::drink::CLINKING_GLASSES,
emoji::food_and_drink::drink::COCKTAIL_GLASS,
emoji::food_and_drink::drink::CUP_WITH_STRAW,
emoji::food_and_drink::drink::GLASS_OF_MILK,
emoji::food_and_drink::drink::HOT_BEVERAGE,
emoji::food_and_drink::drink::ICE,
emoji::food_and_drink::drink::MATE,
emoji::food_and_drink::drink::SAKE,
emoji::food_and_drink::drink::TEACUP_WITHOUT_HANDLE,
emoji::food_and_drink::drink::TEAPOT,
emoji::food_and_drink::drink::TROPICAL_DRINK,
emoji::food_and_drink::drink::TUMBLER_GLASS,
emoji::food_and_drink::drink::WINE_GLASS,
emoji::food_and_drink::food_asian::BENTO_BOX,
emoji::food_and_drink::food_asian::COOKED_RICE,
emoji::food_and_drink::food_asian::CURRY_RICE,
emoji::food_and_drink::food_asian::DANGO,
emoji::food_and_drink::food_asian::DUMPLING,
emoji::food_and_drink::food_asian::FISH_CAKE_WITH_SWIRL,
emoji::food_and_drink::food_asian::FORTUNE_COOKIE,
emoji::food_and_drink::food_asian::FRIED_SHRIMP,
emoji::food_and_drink::food_asian::MOON_CAKE,
emoji::food_and_drink::food_asian::ODEN,
emoji::food_and_drink::food_asian::RICE_BALL,
emoji::food_and_drink::food_asian::RICE_CRACKER,
emoji::food_and_drink::food_asian::ROASTED_SWEET_POTATO,
emoji::food_and_drink::food_asian::SPAGHETTI,
emoji::food_and_drink::food_asian::STEAMING_BOWL,
emoji::food_and_drink::food_asian::SUSHI,
emoji::food_and_drink::food_asian::TAKEOUT_BOX,
emoji::food_and_drink::food_fruit::BANANA,
emoji::food_and_drink::food_fruit::BLUEBERRIES,
emoji::food_and_drink::food_fruit::CHERRIES,
emoji::food_and_drink::food_fruit::COCONUT,
emoji::food_and_drink::food_fruit::GRAPES,
emoji::food_and_drink::food_fruit::GREEN_APPLE,
emoji::food_and_drink::food_fruit::KIWI_FRUIT,
emoji::food_and_drink::food_fruit::LEMON,
emoji::food_and_drink::food_fruit::MANGO,
emoji::food_and_drink::food_fruit::MELON,
emoji::food_and_drink::food_fruit::OLIVE,
emoji::food_and_drink::food_fruit::PEACH,
emoji::food_and_drink::food_fruit::PEAR,
emoji::food_and_drink::food_fruit::PINEAPPLE,
emoji::food_and_drink::food_fruit::RED_APPLE,
emoji::food_and_drink::food_fruit::STRAWBERRY,
emoji::food_and_drink::food_fruit::TANGERINE,
emoji::food_and_drink::food_fruit::TOMATO,
emoji::food_and_drink::food_fruit::WATERMELON,
emoji::food_and_drink::food_marine::CRAB,
emoji::food_and_drink::food_marine::LOBSTER,
emoji::food_and_drink::food_marine::OYSTER,
emoji::food_and_drink::food_marine::SHRIMP,
emoji::food_and_drink::food_marine::SQUID,
emoji::food_and_drink::food_prepared::BACON,
emoji::food_and_drink::food_prepared::BAGEL,
emoji::food_and_drink::food_prepared::BAGUETTE_BREAD,
emoji::food_and_drink::food_prepared::BOWL_WITH_SPOON,
emoji::food_and_drink::food_prepared::BREAD,
emoji::food_and_drink::food_prepared::BURRITO,
emoji::food_and_drink::food_prepared::BUTTER,
emoji::food_and_drink::food_prepared::CANNED_FOOD,
emoji::food_and_drink::food_prepared::CHEESE_WEDGE,
emoji::food_and_drink::food_prepared::COOKING,
emoji::food_and_drink::food_prepared::CROISSANT,
emoji::food_and_drink::food_prepared::CUT_OF_MEAT,
emoji::food_and_drink::food_prepared::EGG,
emoji::food_and_drink::food_prepared::FALAFEL,
emoji::food_and_drink::food_prepared::FLATBREAD,
emoji::food_and_drink::food_prepared::FONDUE,
emoji::food_and_drink::food_prepared::FRENCH_FRIES,
emoji::food_and_drink::food_prepared::GREEN_SALAD,
emoji::food_and_drink::food_prepared::HAMBURGER,
emoji::food_and_drink::food_prepared::HOT_DOG,
emoji::food_and_drink::food_prepared::MEAT_ON_BONE,
emoji::food_and_drink::food_prepared::PANCAKES,
emoji::food_and_drink::food_prepared::PIZZA,
emoji::food_and_drink::food_prepared::POPCORN,
emoji::food_and_drink::food_prepared::POT_OF_FOOD,
emoji::food_and_drink::food_prepared::POULTRY_LEG,
emoji::food_and_drink::food_prepared::PRETZEL,
emoji::food_and_drink::food_prepared::SALT,
emoji::food_and_drink::food_prepared::SANDWICH,
emoji::food_and_drink::food_prepared::SHALLOW_PAN_OF_FOOD,
emoji::food_and_drink::food_prepared::STUFFED_FLATBREAD,
emoji::food_and_drink::food_prepared::TACO,
emoji::food_and_drink::food_prepared::TAMALE,
emoji::food_and_drink::food_prepared::WAFFLE,
emoji::food_and_drink::food_sweet::BIRTHDAY_CAKE,
emoji::food_and_drink::food_sweet::CANDY,
emoji::food_and_drink::food_sweet::CHOCOLATE_BAR,
emoji::food_and_drink::food_sweet::COOKIE,
emoji::food_and_drink::food_sweet::CUPCAKE,
emoji::food_and_drink::food_sweet::CUSTARD,
emoji::food_and_drink::food_sweet::DOUGHNUT,
emoji::food_and_drink::food_sweet::HONEY_POT,
emoji::food_and_drink::food_sweet::ICE_CREAM,
emoji::food_and_drink::food_sweet::LOLLIPOP,
emoji::food_and_drink::food_sweet::PIE,
emoji::food_and_drink::food_sweet::SHAVED_ICE,
emoji::food_and_drink::food_sweet::SHORTCAKE,
emoji::food_and_drink::food_sweet::SOFT_ICE_CREAM,
emoji::food_and_drink::food_vegetable::AVOCADO,
emoji::food_and_drink::food_vegetable::BELL_PEPPER,
emoji::food_and_drink::food_vegetable::BROCCOLI,
emoji::food_and_drink::food_vegetable::CARROT,
emoji::food_and_drink::food_vegetable::CHESTNUT,
emoji::food_and_drink::food_vegetable::CUCUMBER,
emoji::food_and_drink::food_vegetable::EAR_OF_CORN,
emoji::food_and_drink::food_vegetable::EGGPLANT,
emoji::food_and_drink::food_vegetable::GARLIC,
emoji::food_and_drink::food_vegetable::LEAFY_GREEN,
emoji::food_and_drink::food_vegetable::MUSHROOM,
emoji::food_and_drink::food_vegetable::ONION,
emoji::food_and_drink::food_vegetable::PEANUTS,
emoji::food_and_drink::food_vegetable::POTATO,
emoji::objects::book_paper::BLUE_BOOK,
emoji::objects::book_paper::BOOKMARK,
emoji::objects::book_paper::BOOKMARK_TABS,
emoji::objects::book_paper::BOOKS,
emoji::objects::book_paper::CLOSED_BOOK,
emoji::objects::book_paper::GREEN_BOOK,
emoji::objects::book_paper::LEDGER,
emoji::objects::book_paper::NEWSPAPER,
emoji::objects::book_paper::NOTEBOOK,
emoji::objects::book_paper::NOTEBOOK_WITH_DECORATIVE_COVER,
emoji::objects::book_paper::OPEN_BOOK,
emoji::objects::book_paper::ORANGE_BOOK,
emoji::objects::book_paper::PAGE_FACING_UP,
emoji::objects::book_paper::PAGE_WITH_CURL,
emoji::objects::book_paper::SCROLL,
emoji::objects::clothing::BACKPACK,
emoji::objects::clothing::BALLET_SHOES,
emoji::objects::clothing::BIKINI,
emoji::objects::clothing::BILLED_CAP,
emoji::objects::clothing::BRIEFS,
emoji::objects::clothing::CLUTCH_BAG,
emoji::objects::clothing::COAT,
emoji::objects::clothing::CROWN,
emoji::objects::clothing::DRESS,
emoji::objects::clothing::FLAT_SHOE,
emoji::objects::clothing::GEM_STONE,
emoji::objects::clothing::GLASSES,
emoji::objects::clothing::GLOVES,
emoji::objects::clothing::GOGGLES,
emoji::objects::clothing::GRADUATION_CAP,
emoji::objects::clothing::HANDBAG,
emoji::objects::clothing::HIGH_HEELED_SHOE,
emoji::objects::clothing::HIKING_BOOT,
emoji::objects::clothing::JEANS,
emoji::objects::clothing::KIMONO,
emoji::objects::clothing::LAB_COAT,
emoji::objects::clothing::LIPSTICK,
emoji::objects::clothing::MANS_SHOE,
emoji::objects::clothing::MILITARY_HELMET,
emoji::objects::clothing::NECKTIE,
emoji::objects::clothing::ONE_PIECE_SWIMSUIT,
emoji::objects::clothing::PRAYER_BEADS,
emoji::objects::clothing::PURSE,
emoji::objects::clothing::RING,
emoji::objects::clothing::RUNNING_SHOE,
emoji::objects::clothing::SAFETY_VEST,
emoji::objects::clothing::SARI,
emoji::objects::clothing::SCARF,
emoji::objects::clothing::SHORTS,
emoji::objects::clothing::SOCKS,
emoji::objects::clothing::THONG_SANDAL,
emoji::objects::clothing::TOP_HAT,
emoji::objects::clothing::T_SHIRT,
emoji::objects::clothing::WOMANS_BOOT,
emoji::objects::clothing::WOMANS_CLOTHES,
emoji::objects::clothing::WOMANS_HAT,
emoji::objects::clothing::WOMANS_SANDAL,
emoji::objects::computer::ABACUS,
emoji::objects::computer::BATTERY,
emoji::objects::computer::COMPUTER_DISK,
emoji::objects::computer::DVD,
emoji::objects::computer::ELECTRIC_PLUG,
emoji::objects::computer::FLOPPY_DISK,
emoji::objects::computer::LAPTOP,
emoji::objects::computer::OPTICAL_DISK,
emoji::objects::household::BASKET,
emoji::objects::household::BATHTUB,
emoji::objects::household::BROOM,
emoji::objects::household::BUCKET,
emoji::objects::household::CHAIR,
emoji::objects::household::DOOR,
emoji::objects::household::ELEVATOR,
emoji::objects::household::FIRE_EXTINGUISHER,
emoji::objects::household::LOTION_BOTTLE,
emoji::objects::household::MIRROR,
emoji::objects::household::MOUSE_TRAP,
emoji::objects::household::RAZOR,
emoji::objects::household::ROLL_OF_PAPER,
emoji::objects::household::SAFETY_PIN,
emoji::objects::household::SHOPPING_CART,
emoji::objects::household::SHOWER,
emoji::objects::household::SOAP,
emoji::objects::household::SPONGE,
emoji::objects::household::TOILET,
emoji::objects::household::TOOTHBRUSH,
emoji::objects::household::WINDOW,
emoji::objects::light_and_video::CAMERA,
emoji::objects::light_and_video::CAMERA_WITH_FLASH,
emoji::objects::light_and_video::CLAPPER_BOARD,
emoji::objects::light_and_video::DIYA_LAMP,
emoji::objects::light_and_video::FLASHLIGHT,
emoji::objects::light_and_video::LIGHT_BULB,
emoji::objects::light_and_video::MAGNIFYING_GLASS_TILTED_LEFT,
emoji::objects::light_and_video::MAGNIFYING_GLASS_TILTED_RIGHT,
emoji::objects::light_and_video::MOVIE_CAMERA,
emoji::objects::light_and_video::RED_PAPER_LANTERN,
emoji::objects::light_and_video::TELEVISION,
emoji::objects::light_and_video::VIDEOCASSETTE,
emoji::objects::light_and_video::VIDEO_CAMERA,
emoji::objects::lock::KEY,
emoji::objects::lock::LOCKED,
emoji::objects::lock::LOCKED_WITH_KEY,
emoji::objects::lock::LOCKED_WITH_PEN,
emoji::objects::lock::UNLOCKED,
emoji::objects::mail::CLOSED_MAILBOX_WITH_LOWERED_FLAG,
emoji::objects::mail::CLOSED_MAILBOX_WITH_RAISED_FLAG,
emoji::objects::mail::ENVELOPE_WITH_ARROW,
emoji::objects::mail::E_MAIL,
emoji::objects::mail::INBOX_TRAY,
emoji::objects::mail::INCOMING_ENVELOPE,
emoji::objects::mail::OPEN_MAILBOX_WITH_LOWERED_FLAG,
emoji::objects::mail::OPEN_MAILBOX_WITH_RAISED_FLAG,
emoji::objects::mail::OUTBOX_TRAY,
emoji::objects::mail::PACKAGE,
emoji::objects::mail::POSTBOX,
emoji::objects::medical::ADHESIVE_BANDAGE,
emoji::objects::medical::DROP_OF_BLOOD,
emoji::objects::medical::PILL,
emoji::objects::medical::STETHOSCOPE,
emoji::objects::medical::SYRINGE,
emoji::objects::money::CHART_INCREASING_WITH_YEN,
emoji::objects::money::COIN,
emoji::objects::money::CREDIT_CARD,
emoji::objects::money::DOLLAR_BANKNOTE,
emoji::objects::money::EURO_BANKNOTE,
emoji::objects::money::MONEY_BAG,
emoji::objects::money::MONEY_WITH_WINGS,
emoji::objects::money::POUND_BANKNOTE,
emoji::objects::money::RECEIPT,
emoji::objects::money::YEN_BANKNOTE,
emoji::objects::music::HEADPHONE,
emoji::objects::music::MICROPHONE,
emoji::objects::music::MUSICAL_NOTE,
emoji::objects::music::MUSICAL_NOTES,
emoji::objects::music::MUSICAL_SCORE,
emoji::objects::music::RADIO,
emoji::objects::musical_instrument::ACCORDION,
emoji::objects::musical_instrument::BANJO,
emoji::objects::musical_instrument::DRUM,
emoji::objects::musical_instrument::GUITAR,
emoji::objects::musical_instrument::LONG_DRUM,
emoji::objects::musical_instrument::MUSICAL_KEYBOARD,
emoji::objects::musical_instrument::SAXOPHONE,
emoji::objects::musical_instrument::TRUMPET,
emoji::objects::musical_instrument::VIOLIN,
emoji::objects::office::BAR_CHART,
emoji::objects::office::BRIEFCASE,
emoji::objects::office::CALENDAR,
emoji::objects::office::CARD_INDEX,
emoji::objects::office::CHART_DECREASING,
emoji::objects::office::CHART_INCREASING,
emoji::objects::office::CLIPBOARD,
emoji::objects::office::FILE_FOLDER,
emoji::objects::office::OPEN_FILE_FOLDER,
emoji::objects::office::PAPERCLIP,
emoji::objects::office::PUSHPIN,
emoji::objects::office::ROUND_PUSHPIN,
emoji::objects::office::STRAIGHT_RULER,
emoji::objects::office::TEAR_OFF_CALENDAR,
emoji::objects::office::TRIANGULAR_RULER,
emoji::objects::other_object::CIGARETTE,
emoji::objects::other_object::HEADSTONE,
emoji::objects::other_object::MOAI,
emoji::objects::other_object::PLACARD,
emoji::objects::phone::FAX_MACHINE,
emoji::objects::phone::MOBILE_PHONE,
emoji::objects::phone::MOBILE_PHONE_WITH_ARROW,
emoji::objects::phone::PAGER,
emoji::objects::phone::TELEPHONE_RECEIVER,
emoji::objects::science::DNA,
emoji::objects::science::MICROSCOPE,
emoji::objects::science::PETRI_DISH,
emoji::objects::science::SATELLITE_ANTENNA,
emoji::objects::science::TELESCOPE,
emoji::objects::science::TEST_TUBE,
emoji::objects::sound::BELL,
emoji::objects::sound::BELL_WITH_SLASH,
emoji::objects::sound::LOUDSPEAKER,
emoji::objects::sound::MEGAPHONE,
emoji::objects::sound::MUTED_SPEAKER,
emoji::objects::sound::POSTAL_HORN,
emoji::objects::sound::SPEAKER_HIGH_VOLUME,
emoji::objects::sound::SPEAKER_LOW_VOLUME,
emoji::objects::sound::SPEAKER_MEDIUM_VOLUME,
emoji::objects::tool::AXE,
emoji::objects::tool::BOOMERANG,
emoji::objects::tool::BOW_AND_ARROW,
emoji::objects::tool::CARPENTRY_SAW,
emoji::objects::tool::HAMMER,
emoji::objects::tool::HOOK,
emoji::objects::tool::LADDER,
emoji::objects::tool::LINK,
emoji::objects::tool::MAGNET,
emoji::objects::tool::NUT_AND_BOLT,
emoji::objects::tool::SCREWDRIVER,
emoji::objects::tool::TOOLBOX,
emoji::objects::tool::WATER_PISTOL,
emoji::objects::tool::WHITE_CANE,
emoji::objects::tool::WRENCH,
emoji::objects::writing::MEMO,
emoji::people_and_body::body_parts::ANATOMICAL_HEART,
emoji::people_and_body::body_parts::BONE,
emoji::people_and_body::body_parts::BRAIN,
emoji::people_and_body::body_parts::EAR,
emoji::people_and_body::body_parts::EAR_WITH_HEARING_AID,
emoji::people_and_body::body_parts::EYES,
emoji::people_and_body::body_parts::FLEXED_BICEPS,
emoji::people_and_body::body_parts::FOOT,
emoji::people_and_body::body_parts::LEG,
emoji::people_and_body::body_parts::LUNGS,
emoji::people_and_body::body_parts::MECHANICAL_ARM,
emoji::people_and_body::body_parts::MECHANICAL_LEG,
emoji::people_and_body::body_parts::MOUTH,
emoji::people_and_body::body_parts::NOSE,
emoji::people_and_body::body_parts::TONGUE,
emoji::people_and_body::body_parts::TOOTH,
emoji::people_and_body::hand_fingers_closed::LEFT_FACING_FIST,
emoji::people_and_body::hand_fingers_closed::ONCOMING_FIST,
emoji::people_and_body::hand_fingers_closed::RAISED_FIST,
emoji::people_and_body::hand_fingers_closed::RIGHT_FACING_FIST,
emoji::people_and_body::hand_fingers_closed::THUMBS_DOWN,
emoji::people_and_body::hand_fingers_closed::THUMBS_UP,
emoji::people_and_body::hand_fingers_open::RAISED_BACK_OF_HAND,
emoji::people_and_body::hand_fingers_open::RAISED_HAND,
emoji::people_and_body::hand_fingers_open::VULCAN_SALUTE,
emoji::people_and_body::hand_fingers_open::WAVING_HAND,
emoji::people_and_body::hand_fingers_partial::CALL_ME_HAND,
emoji::people_and_body::hand_fingers_partial::CROSSED_FINGERS,
emoji::people_and_body::hand_fingers_partial::LOVE_YOU_GESTURE,
emoji::people_and_body::hand_fingers_partial::OK_HAND,
emoji::people_and_body::hand_fingers_partial::PINCHED_FINGERS,
emoji::people_and_body::hand_fingers_partial::PINCHING_HAND,
emoji::people_and_body::hand_fingers_partial::SIGN_OF_THE_HORNS,
emoji::people_and_body::hand_prop::NAIL_POLISH,
emoji::people_and_body::hand_prop::SELFIE,
emoji::people_and_body::hand_single_finger::BACKHAND_INDEX_POINTING_DOWN,
emoji::people_and_body::hand_single_finger::BACKHAND_INDEX_POINTING_LEFT,
emoji::people_and_body::hand_single_finger::BACKHAND_INDEX_POINTING_RIGHT,
emoji::people_and_body::hand_single_finger::BACKHAND_INDEX_POINTING_UP,
emoji::people_and_body::hand_single_finger::MIDDLE_FINGER,
emoji::people_and_body::hands::CLAPPING_HANDS,
emoji::people_and_body::hands::FOLDED_HANDS,
emoji::people_and_body::hands::HANDSHAKE,
emoji::people_and_body::hands::OPEN_HANDS,
emoji::people_and_body::hands::PALMS_UP_TOGETHER,
emoji::people_and_body::hands::RAISING_HANDS,
emoji::people_and_body::person::BABY,
emoji::people_and_body::person::BOY,
emoji::people_and_body::person::CHILD,
emoji::people_and_body::person::GIRL,
emoji::people_and_body::person::MAN,
emoji::people_and_body::person::OLDER_PERSON,
emoji::people_and_body::person::OLD_MAN,
emoji::people_and_body::person::OLD_WOMAN,
emoji::people_and_body::person::PERSON,
emoji::people_and_body::person::PERSON_BEARD,
emoji::people_and_body::person::PERSON_BLOND_HAIR,
emoji::people_and_body::person::WOMAN,
emoji::people_and_body::person_activity::MAN_DANCING,
emoji::people_and_body::person_activity::PEOPLE_WITH_BUNNY_EARS,
emoji::people_and_body::person_activity::PERSON_CLIMBING,
emoji::people_and_body::person_activity::PERSON_GETTING_HAIRCUT,
emoji::people_and_body::person_activity::PERSON_GETTING_MASSAGE,
emoji::people_and_body::person_activity::PERSON_IN_STEAMY_ROOM,
emoji::people_and_body::person_activity::PERSON_KNEELING,
emoji::people_and_body::person_activity::PERSON_RUNNING,
emoji::people_and_body::person_activity::PERSON_STANDING,
emoji::people_and_body::person_activity::PERSON_WALKING,
emoji::people_and_body::person_activity::WOMAN_DANCING,
emoji::people_and_body::person_fantasy::BABY_ANGEL,
emoji::people_and_body::person_fantasy::ELF,
emoji::people_and_body::person_fantasy::FAIRY,
emoji::people_and_body::person_fantasy::GENIE,
emoji::people_and_body::person_fantasy::MAGE,
emoji::people_and_body::person_fantasy::MERPERSON,
emoji::people_and_body::person_fantasy::MRS_CLAUS,
emoji::people_and_body::person_fantasy::SANTA_CLAUS,
emoji::people_and_body::person_fantasy::SUPERHERO,
emoji::people_and_body::person_fantasy::SUPERVILLAIN,
emoji::people_and_body::person_fantasy::VAMPIRE,
emoji::people_and_body::person_fantasy::ZOMBIE,
emoji::people_and_body::person_gesture::DEAF_PERSON,
emoji::people_and_body::person_gesture::PERSON_BOWING,
emoji::people_and_body::person_gesture::PERSON_FACEPALMING,
emoji::people_and_body::person_gesture::PERSON_FROWNING,
emoji::people_and_body::person_gesture::PERSON_GESTURING_NO,
emoji::people_and_body::person_gesture::PERSON_GESTURING_OK,
emoji::people_and_body::person_gesture::PERSON_POUTING,
emoji::people_and_body::person_gesture::PERSON_RAISING_HAND,
emoji::people_and_body::person_gesture::PERSON_SHRUGGING,
emoji::people_and_body::person_gesture::PERSON_TIPPING_HAND,
emoji::people_and_body::person_role::BREAST_FEEDING,
emoji::people_and_body::person_role::CONSTRUCTION_WORKER,
emoji::people_and_body::person_role::GUARD,
emoji::people_and_body::person_role::NINJA,
emoji::people_and_body::person_role::PERSON_IN_TUXEDO,
emoji::people_and_body::person_role::PERSON_WEARING_TURBAN,
emoji::people_and_body::person_role::PERSON_WITH_SKULLCAP,
emoji::people_and_body::person_role::PERSON_WITH_VEIL,
emoji::people_and_body::person_role::POLICE_OFFICER,
emoji::people_and_body::person_role::PREGNANT_WOMAN,
emoji::people_and_body::person_role::PRINCE,
emoji::people_and_body::person_role::PRINCESS,
emoji::people_and_body::person_role::WOMAN_WITH_HEADSCARF,
emoji::people_and_body::person_sport::HORSE_RACING,
emoji::people_and_body::person_sport::PEOPLE_WRESTLING,
emoji::people_and_body::person_sport::PERSON_BIKING,
emoji::people_and_body::person_sport::PERSON_CARTWHEELING,
emoji::people_and_body::person_sport::PERSON_FENCING,
emoji::people_and_body::person_sport::PERSON_JUGGLING,
emoji::people_and_body::person_sport::PERSON_MOUNTAIN_BIKING,
emoji::people_and_body::person_sport::PERSON_PLAYING_HANDBALL,
emoji::people_and_body::person_sport::PERSON_PLAYING_WATER_POLO,
emoji::people_and_body::person_sport::PERSON_ROWING_BOAT,
emoji::people_and_body::person_sport::PERSON_SURFING,
emoji::people_and_body::person_sport::PERSON_SWIMMING,
emoji::people_and_body::person_sport::SNOWBOARDER,
emoji::people_and_body::person_symbol::BUSTS_IN_SILHOUETTE,
emoji::people_and_body::person_symbol::BUST_IN_SILHOUETTE,
emoji::people_and_body::person_symbol::FOOTPRINTS,
emoji::people_and_body::person_symbol::PEOPLE_HUGGING,
emoji::smileys_and_emotion::emotion::ANGER_SYMBOL,
emoji::smileys_and_emotion::emotion::BEATING_HEART,
emoji::smileys_and_emotion::emotion::BLACK_HEART,
emoji::smileys_and_emotion::emotion::BLUE_HEART,
emoji::smileys_and_emotion::emotion::BOMB,
emoji::smileys_and_emotion::emotion::BROKEN_HEART,
emoji::smileys_and_emotion::emotion::BROWN_HEART,
emoji::smileys_and_emotion::emotion::COLLISION,
emoji::smileys_and_emotion::emotion::DASHING_AWAY,
emoji::smileys_and_emotion::emotion::DIZZY,
emoji::smileys_and_emotion::emotion::GREEN_HEART,
emoji::smileys_and_emotion::emotion::GROWING_HEART,
emoji::smileys_and_emotion::emotion::HEART_DECORATION,
emoji::smileys_and_emotion::emotion::HEART_WITH_ARROW,
emoji::smileys_and_emotion::emotion::HEART_WITH_RIBBON,
emoji::smileys_and_emotion::emotion::HUNDRED_POINTS,
emoji::smileys_and_emotion::emotion::KISS_MARK,
emoji::smileys_and_emotion::emotion::LOVE_LETTER,
emoji::smileys_and_emotion::emotion::ORANGE_HEART,
emoji::smileys_and_emotion::emotion::PURPLE_HEART,
emoji::smileys_and_emotion::emotion::REVOLVING_HEARTS,
emoji::smileys_and_emotion::emotion::SPARKLING_HEART,
emoji::smileys_and_emotion::emotion::SPEECH_BALLOON,
emoji::smileys_and_emotion::emotion::SWEAT_DROPLETS,
emoji::smileys_and_emotion::emotion::THOUGHT_BALLOON,
emoji::smileys_and_emotion::emotion::TWO_HEARTS,
emoji::smileys_and_emotion::emotion::WHITE_HEART,
emoji::smileys_and_emotion::emotion::YELLOW_HEART,
emoji::smileys_and_emotion::emotion::ZZZ,
emoji::smileys_and_emotion::face_affection::FACE_BLOWING_A_KISS,
emoji::smileys_and_emotion::face_affection::KISSING_FACE,
emoji::smileys_and_emotion::face_affection::KISSING_FACE_WITH_CLOSED_EYES,
emoji::smileys_and_emotion::face_affection::KISSING_FACE_WITH_SMILING_EYES,
emoji::smileys_and_emotion::face_affection::SMILING_FACE_WITH_HEARTS,
emoji::smileys_and_emotion::face_affection::SMILING_FACE_WITH_HEART_EYES,
emoji::smileys_and_emotion::face_affection::SMILING_FACE_WITH_TEAR,
emoji::smileys_and_emotion::face_affection::STAR_STRUCK,
emoji::smileys_and_emotion::face_concerned::ANGUISHED_FACE,
emoji::smileys_and_emotion::face_concerned::ANXIOUS_FACE_WITH_SWEAT,
emoji::smileys_and_emotion::face_concerned::ASTONISHED_FACE,
emoji::smileys_and_emotion::face_concerned::CONFOUNDED_FACE,
emoji::smileys_and_emotion::face_concerned::CONFUSED_FACE,
emoji::smileys_and_emotion::face_concerned::CRYING_FACE,
emoji::smileys_and_emotion::face_concerned::DISAPPOINTED_FACE,
emoji::smileys_and_emotion::face_concerned::DOWNCAST_FACE_WITH_SWEAT,
emoji::smileys_and_emotion::face_concerned::FACE_SCREAMING_IN_FEAR,
emoji::smileys_and_emotion::face_concerned::FACE_WITH_OPEN_MOUTH,
emoji::smileys_and_emotion::face_concerned::FEARFUL_FACE,
emoji::smileys_and_emotion::face_concerned::FLUSHED_FACE,
emoji::smileys_and_emotion::face_concerned::FROWNING_FACE_WITH_OPEN_MOUTH,
emoji::smileys_and_emotion::face_concerned::HUSHED_FACE,
emoji::smileys_and_emotion::face_concerned::LOUDLY_CRYING_FACE,
emoji::smileys_and_emotion::face_concerned::PERSEVERING_FACE,
emoji::smileys_and_emotion::face_concerned::PLEADING_FACE,
emoji::smileys_and_emotion::face_concerned::SAD_BUT_RELIEVED_FACE,
emoji::smileys_and_emotion::face_concerned::SLIGHTLY_FROWNING_FACE,
emoji::smileys_and_emotion::face_concerned::TIRED_FACE,
emoji::smileys_and_emotion::face_concerned::WEARY_FACE,
emoji::smileys_and_emotion::face_concerned::WORRIED_FACE,
emoji::smileys_and_emotion::face_concerned::YAWNING_FACE,
emoji::smileys_and_emotion::face_costume::ALIEN,
emoji::smileys_and_emotion::face_costume::ALIEN_MONSTER,
emoji::smileys_and_emotion::face_costume::CLOWN_FACE,
emoji::smileys_and_emotion::face_costume::GHOST,
emoji::smileys_and_emotion::face_costume::GOBLIN,
emoji::smileys_and_emotion::face_costume::OGRE,
emoji::smileys_and_emotion::face_costume::PILE_OF_POO,
emoji::smileys_and_emotion::face_costume::ROBOT,
emoji::smileys_and_emotion::face_glasses::FACE_WITH_MONOCLE,
emoji::smileys_and_emotion::face_glasses::NERD_FACE,
emoji::smileys_and_emotion::face_glasses::SMILING_FACE_WITH_SUNGLASSES,
emoji::smileys_and_emotion::face_hand::FACE_WITH_HAND_OVER_MOUTH,
emoji::smileys_and_emotion::face_hand::HUGGING_FACE,
emoji::smileys_and_emotion::face_hand::SHUSHING_FACE,
emoji::smileys_and_emotion::face_hand::THINKING_FACE,
emoji::smileys_and_emotion::face_hat::COWBOY_HAT_FACE,
emoji::smileys_and_emotion::face_hat::DISGUISED_FACE,
emoji::smileys_and_emotion::face_hat::PARTYING_FACE,
emoji::smileys_and_emotion::face_negative::ANGRY_FACE,
emoji::smileys_and_emotion::face_negative::ANGRY_FACE_WITH_HORNS,
emoji::smileys_and_emotion::face_negative::FACE_WITH_STEAM_FROM_NOSE,
emoji::smileys_and_emotion::face_negative::FACE_WITH_SYMBOLS_ON_MOUTH,
emoji::smileys_and_emotion::face_negative::POUTING_FACE,
emoji::smileys_and_emotion::face_negative::SKULL,
emoji::smileys_and_emotion::face_negative::SMILING_FACE_WITH_HORNS,
emoji::smileys_and_emotion::face_neutral_skeptical::EXPRESSIONLESS_FACE,
emoji::smileys_and_emotion::face_neutral_skeptical::FACE_WITHOUT_MOUTH,
emoji::smileys_and_emotion::face_neutral_skeptical::FACE_WITH_RAISED_EYEBROW,
emoji::smileys_and_emotion::face_neutral_skeptical::FACE_WITH_ROLLING_EYES,
emoji::smileys_and_emotion::face_neutral_skeptical::GRIMACING_FACE,
emoji::smileys_and_emotion::face_neutral_skeptical::LYING_FACE,
emoji::smileys_and_emotion::face_neutral_skeptical::NEUTRAL_FACE,
emoji::smileys_and_emotion::face_neutral_skeptical::SMIRKING_FACE,
emoji::smileys_and_emotion::face_neutral_skeptical::UNAMUSED_FACE,
emoji::smileys_and_emotion::face_neutral_skeptical::ZIPPER_MOUTH_FACE,
emoji::smileys_and_emotion::face_sleepy::DROOLING_FACE,
emoji::smileys_and_emotion::face_sleepy::PENSIVE_FACE,
emoji::smileys_and_emotion::face_sleepy::RELIEVED_FACE,
emoji::smileys_and_emotion::face_sleepy::SLEEPING_FACE,
emoji::smileys_and_emotion::face_sleepy::SLEEPY_FACE,
emoji::smileys_and_emotion::face_smiling::BEAMING_FACE_WITH_SMILING_EYES,
emoji::smileys_and_emotion::face_smiling::FACE_WITH_TEARS_OF_JOY,
emoji::smileys_and_emotion::face_smiling::GRINNING_FACE,
emoji::smileys_and_emotion::face_smiling::GRINNING_FACE_WITH_BIG_EYES,
emoji::smileys_and_emotion::face_smiling::GRINNING_FACE_WITH_SMILING_EYES,
emoji::smileys_and_emotion::face_smiling::GRINNING_FACE_WITH_SWEAT,
emoji::smileys_and_emotion::face_smiling::GRINNING_SQUINTING_FACE,
emoji::smileys_and_emotion::face_smiling::ROLLING_ON_THE_FLOOR_LAUGHING,
emoji::smileys_and_emotion::face_smiling::SLIGHTLY_SMILING_FACE,
emoji::smileys_and_emotion::face_smiling::SMILING_FACE_WITH_HALO,
emoji::smileys_and_emotion::face_smiling::SMILING_FACE_WITH_SMILING_EYES,
emoji::smileys_and_emotion::face_smiling::UPSIDE_DOWN_FACE,
emoji::smileys_and_emotion::face_smiling::WINKING_FACE,
emoji::smileys_and_emotion::face_tongue::FACE_SAVORING_FOOD,
emoji::smileys_and_emotion::face_tongue::FACE_WITH_TONGUE,
emoji::smileys_and_emotion::face_tongue::MONEY_MOUTH_FACE,
emoji::smileys_and_emotion::face_tongue::SQUINTING_FACE_WITH_TONGUE,
emoji::smileys_and_emotion::face_tongue::WINKING_FACE_WITH_TONGUE,
emoji::smileys_and_emotion::face_tongue::ZANY_FACE,
emoji::smileys_and_emotion::face_unwell::COLD_FACE,
emoji::smileys_and_emotion::face_unwell::EXPLODING_HEAD,
emoji::smileys_and_emotion::face_unwell::FACE_VOMITING,
emoji::smileys_and_emotion::face_unwell::FACE_WITH_HEAD_BANDAGE,
emoji::smileys_and_emotion::face_unwell::FACE_WITH_MEDICAL_MASK,
emoji::smileys_and_emotion::face_unwell::FACE_WITH_THERMOMETER,
emoji::smileys_and_emotion::face_unwell::HOT_FACE,
emoji::smileys_and_emotion::face_unwell::KNOCKED_OUT_FACE,
emoji::smileys_and_emotion::face_unwell::NAUSEATED_FACE,
emoji::smileys_and_emotion::face_unwell::SNEEZING_FACE,
emoji::smileys_and_emotion::face_unwell::WOOZY_FACE,
emoji::symbols::alphanum::AB_BUTTON_BLOOD_TYPE,
emoji::symbols::alphanum::CL_BUTTON,
emoji::symbols::alphanum::COOL_BUTTON,
emoji::symbols::alphanum::FREE_BUTTON,
emoji::symbols::alphanum::ID_BUTTON,
emoji::symbols::alphanum::INPUT_LATIN_LETTERS,
emoji::symbols::alphanum::INPUT_LATIN_LOWERCASE,
emoji::symbols::alphanum::INPUT_LATIN_UPPERCASE,
emoji::symbols::alphanum::INPUT_NUMBERS,
emoji::symbols::alphanum::INPUT_SYMBOLS,
emoji::symbols::alphanum::JAPANESE__ACCEPTABLE__BUTTON,
emoji::symbols::alphanum::JAPANESE__APPLICATION__BUTTON,
emoji::symbols::alphanum::JAPANESE__BARGAIN__BUTTON,
emoji::symbols::alphanum::JAPANESE__DISCOUNT__BUTTON,
emoji::symbols::alphanum::JAPANESE__FREE_OF_CHARGE__BUTTON,
emoji::symbols::alphanum::JAPANESE__HERE__BUTTON,
emoji::symbols::alphanum::JAPANESE__NOT_FREE_OF_CHARGE__BUTTON,
emoji::symbols::alphanum::JAPANESE__NO_VACANCY__BUTTON,
emoji::symbols::alphanum::JAPANESE__OPEN_FOR_BUSINESS__BUTTON,
emoji::symbols::alphanum::JAPANESE__PASSING_GRADE__BUTTON,
emoji::symbols::alphanum::JAPANESE__PROHIBITED__BUTTON,
emoji::symbols::alphanum::JAPANESE__RESERVED__BUTTON,
emoji::symbols::alphanum::JAPANESE__VACANCY__BUTTON,
emoji::symbols::alphanum::NEW_BUTTON,
emoji::symbols::alphanum::NG_BUTTON,
emoji::symbols::alphanum::OK_BUTTON,
emoji::symbols::alphanum::SOS_BUTTON,
emoji::symbols::alphanum::UP_BUTTON,
emoji::symbols::alphanum::VS_BUTTON,
emoji::symbols::arrow::BACK_ARROW,
emoji::symbols::arrow::CLOCKWISE_VERTICAL_ARROWS,
emoji::symbols::arrow::COUNTERCLOCKWISE_ARROWS_BUTTON,
emoji::symbols::arrow::END_ARROW,
emoji::symbols::arrow::ON_ARROW,
emoji::symbols::arrow::SOON_ARROW,
emoji::symbols::arrow::TOP_ARROW,
emoji::symbols::av_symbol::ANTENNA_BARS,
emoji::symbols::av_symbol::BRIGHT_BUTTON,
emoji::symbols::av_symbol::CINEMA,
emoji::symbols::av_symbol::DIM_BUTTON,
emoji::symbols::av_symbol::DOWNWARDS_BUTTON,
emoji::symbols::av_symbol::FAST_DOWN_BUTTON,
emoji::symbols::av_symbol::FAST_FORWARD_BUTTON,
emoji::symbols::av_symbol::FAST_REVERSE_BUTTON,
emoji::symbols::av_symbol::FAST_UP_BUTTON,
emoji::symbols::av_symbol::MOBILE_PHONE_OFF,
emoji::symbols::av_symbol::REPEAT_BUTTON,
emoji::symbols::av_symbol::REPEAT_SINGLE_BUTTON,
emoji::symbols::av_symbol::SHUFFLE_TRACKS_BUTTON,
emoji::symbols::av_symbol::UPWARDS_BUTTON,
emoji::symbols::av_symbol::VIBRATION_MODE,
emoji::symbols::currency::CURRENCY_EXCHANGE,
emoji::symbols::currency::HEAVY_DOLLAR_SIGN,
emoji::symbols::math::DIVIDE,
emoji::symbols::math::MINUS,
emoji::symbols::math::PLUS,
emoji::symbols::other_symbol::CHECK_MARK_BUTTON,
emoji::symbols::other_symbol::CROSS_MARK,
emoji::symbols::other_symbol::CROSS_MARK_BUTTON,
emoji::symbols::other_symbol::CURLY_LOOP,
emoji::symbols::other_symbol::DOUBLE_CURLY_LOOP,
emoji::symbols::other_symbol::HOLLOW_RED_CIRCLE,
emoji::symbols::other_symbol::JAPANESE_SYMBOL_FOR_BEGINNER,
emoji::symbols::other_symbol::NAME_BADGE,
emoji::symbols::other_symbol::TRIDENT_EMBLEM,
emoji::symbols::punctuation::RED_EXCLAMATION_MARK,
emoji::symbols::punctuation::RED_QUESTION_MARK,
emoji::symbols::punctuation::WHITE_EXCLAMATION_MARK,
emoji::symbols::punctuation::WHITE_QUESTION_MARK,
emoji::symbols::transport_sign::ATM_SIGN,
emoji::symbols::transport_sign::BABY_SYMBOL,
emoji::symbols::transport_sign::BAGGAGE_CLAIM,
emoji::symbols::transport_sign::CUSTOMS,
emoji::symbols::transport_sign::LEFT_LUGGAGE,
emoji::symbols::transport_sign::LITTER_IN_BIN_SIGN,
emoji::symbols::transport_sign::MENS_ROOM,
emoji::symbols::transport_sign::PASSPORT_CONTROL,
emoji::symbols::transport_sign::POTABLE_WATER,
emoji::symbols::transport_sign::RESTROOM,
emoji::symbols::transport_sign::WATER_CLOSET,
emoji::symbols::transport_sign::WHEELCHAIR_SYMBOL,
emoji::symbols::transport_sign::WOMENS_ROOM,
emoji::symbols::warning::CHILDREN_CROSSING,
emoji::symbols::warning::NON_POTABLE_WATER,
emoji::symbols::warning::NO_BICYCLES,
emoji::symbols::warning::NO_ENTRY,
emoji::symbols::warning::NO_LITTERING,
emoji::symbols::warning::NO_MOBILE_PHONES,
emoji::symbols::warning::NO_ONE_UNDER_EIGHTEEN,
emoji::symbols::warning::NO_PEDESTRIANS,
emoji::symbols::warning::NO_SMOKING,
emoji::symbols::warning::PROHIBITED,
emoji::travel_and_places::place_building::BANK,
emoji::travel_and_places::place_building::BRICK,
emoji::travel_and_places::place_building::CASTLE,
emoji::travel_and_places::place_building::CONVENIENCE_STORE,
emoji::travel_and_places::place_building::DEPARTMENT_STORE,
emoji::travel_and_places::place_building::FACTORY,
emoji::travel_and_places::place_building::HOSPITAL,
emoji::travel_and_places::place_building::HOTEL,
emoji::travel_and_places::place_building::HOUSE,
emoji::travel_and_places::place_building::HOUSE_WITH_GARDEN,
emoji::travel_and_places::place_building::HUT,
emoji::travel_and_places::place_building::JAPANESE_CASTLE,
emoji::travel_and_places::place_building::JAPANESE_POST_OFFICE,
emoji::travel_and_places::place_building::LOVE_HOTEL,
emoji::travel_and_places::place_building::OFFICE_BUILDING,
emoji::travel_and_places::place_building::POST_OFFICE,
emoji::travel_and_places::place_building::ROCK,
emoji::travel_and_places::place_building::SCHOOL,
emoji::travel_and_places::place_building::STATUE_OF_LIBERTY,
emoji::travel_and_places::place_building::TOKYO_TOWER,
emoji::travel_and_places::place_building::WEDDING,
emoji::travel_and_places::place_building::WOOD,
emoji::travel_and_places::place_geographic::MOUNT_FUJI,
emoji::travel_and_places::place_geographic::VOLCANO,
emoji::travel_and_places::place_other::BARBER_POLE,
emoji::travel_and_places::place_other::BRIDGE_AT_NIGHT,
emoji::travel_and_places::place_other::CAROUSEL_HORSE,
emoji::travel_and_places::place_other::CIRCUS_TENT,
emoji::travel_and_places::place_other::CITYSCAPE_AT_DUSK,
emoji::travel_and_places::place_other::FERRIS_WHEEL,
emoji::travel_and_places::place_other::FOGGY,
emoji::travel_and_places::place_other::FOUNTAIN,
emoji::travel_and_places::place_other::NIGHT_WITH_STARS,
emoji::travel_and_places::place_other::ROLLER_COASTER,
emoji::travel_and_places::place_other::SUNRISE,
emoji::travel_and_places::place_other::SUNRISE_OVER_MOUNTAINS,
emoji::travel_and_places::place_other::SUNSET,
emoji::travel_and_places::place_other::TENT,
emoji::travel_and_places::place_religious::CHURCH,
emoji::travel_and_places::place_religious::HINDU_TEMPLE,
emoji::travel_and_places::place_religious::KAABA,
emoji::travel_and_places::place_religious::MOSQUE,
emoji::travel_and_places::place_religious::SYNAGOGUE,
emoji::travel_and_places::sky_and_weather::CLOSED_UMBRELLA,
emoji::travel_and_places::sky_and_weather::CRESCENT_MOON,
emoji::travel_and_places::sky_and_weather::CYCLONE,
emoji::travel_and_places::sky_and_weather::DROPLET,
emoji::travel_and_places::sky_and_weather::FIRE,
emoji::travel_and_places::sky_and_weather::FIRST_QUARTER_MOON,
emoji::travel_and_places::sky_and_weather::FIRST_QUARTER_MOON_FACE,
emoji::travel_and_places::sky_and_weather::FULL_MOON,
emoji::travel_and_places::sky_and_weather::FULL_MOON_FACE,
emoji::travel_and_places::sky_and_weather::GLOWING_STAR,
emoji::travel_and_places::sky_and_weather::HIGH_VOLTAGE,
emoji::travel_and_places::sky_and_weather::LAST_QUARTER_MOON,
emoji::travel_and_places::sky_and_weather::LAST_QUARTER_MOON_FACE,
emoji::travel_and_places::sky_and_weather::MILKY_WAY,
emoji::travel_and_places::sky_and_weather::NEW_MOON,
emoji::travel_and_places::sky_and_weather::NEW_MOON_FACE,
emoji::travel_and_places::sky_and_weather::RAINBOW,
emoji::travel_and_places::sky_and_weather::RINGED_PLANET,
emoji::travel_and_places::sky_and_weather::SHOOTING_STAR,
emoji::travel_and_places::sky_and_weather::SNOWMAN_WITHOUT_SNOW,
emoji::travel_and_places::sky_and_weather::STAR,
emoji::travel_and_places::sky_and_weather::SUN_BEHIND_CLOUD,
emoji::travel_and_places::sky_and_weather::SUN_WITH_FACE,
emoji::travel_and_places::sky_and_weather::UMBRELLA_WITH_RAIN_DROPS,
emoji::travel_and_places::sky_and_weather::WANING_CRESCENT_MOON,
emoji::travel_and_places::sky_and_weather::WANING_GIBBOUS_MOON,
emoji::travel_and_places::sky_and_weather::WATER_WAVE,
emoji::travel_and_places::sky_and_weather::WAXING_CRESCENT_MOON,
emoji::travel_and_places::sky_and_weather::WAXING_GIBBOUS_MOON,
emoji::travel_and_places::time::ALARM_CLOCK,
emoji::travel_and_places::time::EIGHT_OCLOCK,
emoji::travel_and_places::time::EIGHT_THIRTY,
emoji::travel_and_places::time::ELEVEN_OCLOCK,
emoji::travel_and_places::time::ELEVEN_THIRTY,
emoji::travel_and_places::time::FIVE_OCLOCK,
emoji::travel_and_places::time::FIVE_THIRTY,
emoji::travel_and_places::time::FOUR_OCLOCK,
emoji::travel_and_places::time::FOUR_THIRTY,
emoji::travel_and_places::time::HOURGLASS_DONE,
emoji::travel_and_places::time::HOURGLASS_NOT_DONE,
emoji::travel_and_places::time::NINE_OCLOCK,
emoji::travel_and_places::time::NINE_THIRTY,
emoji::travel_and_places::time::ONE_OCLOCK,
emoji::travel_and_places::time::ONE_THIRTY,
emoji::travel_and_places::time::SEVEN_OCLOCK,
emoji::travel_and_places::time::SEVEN_THIRTY,
emoji::travel_and_places::time::SIX_OCLOCK,
emoji::travel_and_places::time::SIX_THIRTY,
emoji::travel_and_places::time::TEN_OCLOCK,
emoji::travel_and_places::time::TEN_THIRTY,
emoji::travel_and_places::time::THREE_OCLOCK,
emoji::travel_and_places::time::THREE_THIRTY,
emoji::travel_and_places::time::TWELVE_OCLOCK,
emoji::travel_and_places::time::TWELVE_THIRTY,
emoji::travel_and_places::time::TWO_OCLOCK,
emoji::travel_and_places::time::TWO_THIRTY,
emoji::travel_and_places::time::WATCH,
emoji::travel_and_places::transport_air::AERIAL_TRAMWAY,
emoji::travel_and_places::transport_air::AIRPLANE_ARRIVAL,
emoji::travel_and_places::transport_air::AIRPLANE_DEPARTURE,
emoji::travel_and_places::transport_air::FLYING_SAUCER,
emoji::travel_and_places::transport_air::HELICOPTER,
emoji::travel_and_places::transport_air::MOUNTAIN_CABLEWAY,
emoji::travel_and_places::transport_air::PARACHUTE,
emoji::travel_and_places::transport_air::ROCKET,
emoji::travel_and_places::transport_air::SEAT,
emoji::travel_and_places::transport_air::SUSPENSION_RAILWAY,
emoji::travel_and_places::transport_ground::AMBULANCE,
emoji::travel_and_places::transport_ground::ARTICULATED_LORRY,
emoji::travel_and_places::transport_ground::AUTOMOBILE,
emoji::travel_and_places::transport_ground::AUTO_RICKSHAW,
emoji::travel_and_places::transport_ground::BICYCLE,
emoji::travel_and_places::transport_ground::BULLET_TRAIN,
emoji::travel_and_places::transport_ground::BUS,
emoji::travel_and_places::transport_ground::BUS_STOP,
emoji::travel_and_places::transport_ground::CONSTRUCTION,
emoji::travel_and_places::transport_ground::DELIVERY_TRUCK,
emoji::travel_and_places::transport_ground::FIRE_ENGINE,
emoji::travel_and_places::transport_ground::FUEL_PUMP,
emoji::travel_and_places::transport_ground::HIGH_SPEED_TRAIN,
emoji::travel_and_places::transport_ground::HORIZONTAL_TRAFFIC_LIGHT,
emoji::travel_and_places::transport_ground::KICK_SCOOTER,
emoji::travel_and_places::transport_ground::LIGHT_RAIL,
emoji::travel_and_places::transport_ground::LOCOMOTIVE,
emoji::travel_and_places::transport_ground::MANUAL_WHEELCHAIR,
emoji::travel_and_places::transport_ground::METRO,
emoji::travel_and_places::transport_ground::MINIBUS,
emoji::travel_and_places::transport_ground::MONORAIL,
emoji::travel_and_places::transport_ground::MOTORIZED_WHEELCHAIR,
emoji::travel_and_places::transport_ground::MOTOR_SCOOTER,
emoji::travel_and_places::transport_ground::MOUNTAIN_RAILWAY,
emoji::travel_and_places::transport_ground::ONCOMING_AUTOMOBILE,
emoji::travel_and_places::transport_ground::ONCOMING_BUS,
emoji::travel_and_places::transport_ground::ONCOMING_POLICE_CAR,
emoji::travel_and_places::transport_ground::ONCOMING_TAXI,
emoji::travel_and_places::transport_ground::PICKUP_TRUCK,
emoji::travel_and_places::transport_ground::POLICE_CAR,
emoji::travel_and_places::transport_ground::POLICE_CAR_LIGHT,
emoji::travel_and_places::transport_ground::RAILWAY_CAR,
emoji::travel_and_places::transport_ground::ROLLER_SKATE,
emoji::travel_and_places::transport_ground::SKATEBOARD,
emoji::travel_and_places::transport_ground::SPORT_UTILITY_VEHICLE,
emoji::travel_and_places::transport_ground::STATION,
];
impl EmojiSlate {
fn byte2bitvec(&self, byte: u8) -> BitVec {
let mut bit_vec = BitVec::new();
for i in 0..8 {
let mut bit = byte << i;
bit = bit >> 7;
if bit == 1 {
bit_vec.push(true);
} else {
bit_vec.push(false);
}
}
return bit_vec;
}
fn bitvec2byte(&self, bit_vec: BitVec) -> u8 {
let mut byte = 0;
let mut exp = 0;
for i in (0..bit_vec.len()).rev() {
byte = byte + bit_vec[i] as usize * (2_i32.pow(exp) as usize);
exp = exp + 1;
}
return byte as u8;
}
fn set_extra_bits(&self, data_len: usize) -> BitVec {
let mut bit_vec = BitVec::new();
let extra_bits = (10 - ((data_len * 8) % 10)) as u8;
let extra_bits_vec = self.byte2bitvec(extra_bits);
for _ in 0..6 {
bit_vec.push(false);
}
for i in 4..extra_bits_vec.len() {
bit_vec.push(extra_bits_vec[i]);
}
for _ in 0..extra_bits {
bit_vec.push(false);
}
return bit_vec;
}
fn translate2emoji(&self, content: Vec<u16>) -> String {
let mut emoji_string = "".to_owned();
for value in content {
emoji_string.push_str(EMOJI_MAP[value as usize].glyph);
}
return emoji_string;
}
fn translate2string(&self, emoji_string: &str) -> String {
let mut content = "".to_owned();
let mut bit_vec: BitVec = BitVec::new();
for i in 0..emoji_string.len() {
if emoji_string.chars().nth(i) == None {
break;
}
let emoji = emoji_string.chars().nth(i).unwrap();
let idx = EMOJI_MAP
.iter()
.position(|r| r.glyph == emoji.to_string())
.unwrap() as u16;
for i in (1..11).rev() {
let mut bit = idx << (16 - i);
bit = bit >> 15;
if bit == 1 {
bit_vec.push(true);
} else {
bit_vec.push(false);
}
}
}
let emoji = emoji_string.chars().nth(0).unwrap();
let num_extra_bits = EMOJI_MAP
.iter()
.position(|r| r.glyph == emoji.to_string())
.unwrap();
for i in ((10 + num_extra_bits)..bit_vec.len()).step_by(8) {
let mut bit_vec_8b_slice: BitVec = BitVec::new();
for j in i..(i + 8) {
bit_vec_8b_slice.push(bit_vec[j]);
}
content.push(self.bitvec2byte(bit_vec_8b_slice) as char);
}
return content;
}
pub fn encode(&self, slate: &Slate) -> String {
let out_slate = {
if slate.payment_proof.is_some() || slate.ttl_cutoff_height.is_some() {
warn!("Transaction contains features that require epic-wallet 3.0.0 or later");
warn!("Please ensure the other party is running epic-wallet v3.0.0 or later before sending");
VersionedSlate::into_version(slate.clone(), SlateVersion::V3)
} else {
let mut s = slate.clone();
s.version_info.version = 2;
s.version_info.orig_version = 2;
VersionedSlate::into_version(s, SlateVersion::V2)
}
};
let slate_str = match serde_json::to_string(&out_slate).map_err(|_| Error::SlateSer) {
Ok(s) => s,
Err(_) => "ERROR - Slate JSON generation".to_string(),
}
.into_bytes();
let mut bitstream: BitVec = BitVec::new();
for bit in self.set_extra_bits(slate_str.len()) {
bitstream.push(bit);
}
for i in 0..slate_str.len() {
let char_bitvector = self.byte2bitvec(slate_str[i]);
for bit in char_bitvector {
bitstream.push(bit);
}
}
let mut emoji_map_idx = Vec::new();
while bitstream.len() > 0 {
let slice = bitstream.drain(0..10);
let mut bv: BitVec = BitVec::new();
for _ in 0..6 {
bv.push(false);
}
for bit in slice {
bv.push(bit);
}
bv.reverse();
emoji_map_idx.push(bv.load::<u16>());
}
let emoji_string = self.translate2emoji(emoji_map_idx);
return emoji_string;
}
pub fn decode(&self, emoji_string: &str) -> Result<Slate, Error> {
let slate_string = self.translate2string(emoji_string);
Ok(Slate::deserialize_upgrade(&slate_string)?)
}
}