1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
// Copyright 2019 The Epic Developers
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

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)?)
	}
}