KeyValue defines an ADT and some of its values, it now contains public final fields and no internal logic. KeyModifier handles modifiers and accents and creates new instances of KeyValue when needed. This operation is now properly cached.
Take the list from https://unicode.org/Public/emoji/13.1/emoji-test.txt Also change the list of groups, from the same source.