From b92f99d71a58332f63e1d2fc81deb8efb814dca2 Mon Sep 17 00:00:00 2001 From: Matt Sherman Date: Sat, 16 May 2026 18:41:24 -0400 Subject: [PATCH 01/10] first pass for simple case only look for the VS16 cases in the variation sequences. still need to look for those with later FE0F. --- .../data/17.0.0/emoji-variation-sequences.txt | 757 +++++++ internal/gen/trie.go | 4 +- internal/gen/unicode.go | 80 +- trie.go | 1754 +++++++++-------- width.go | 38 +- width_test.go | 46 +- 6 files changed, 1826 insertions(+), 853 deletions(-) create mode 100644 internal/gen/data/17.0.0/emoji-variation-sequences.txt diff --git a/internal/gen/data/17.0.0/emoji-variation-sequences.txt b/internal/gen/data/17.0.0/emoji-variation-sequences.txt new file mode 100644 index 0000000..8d999cf --- /dev/null +++ b/internal/gen/data/17.0.0/emoji-variation-sequences.txt @@ -0,0 +1,757 @@ +# emoji-variation-sequences.txt +# Date: 2025-01-30, 21:48:29 GMT +# © 2025 Unicode®, Inc. +# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries. +# For terms of use and license, see https://www.unicode.org/terms_of_use.html +# +# Emoji Variation Sequences for UTS #51 +# Version: 17.0 +# +# For documentation and usage, see https://www.unicode.org/reports/tr51 +# +0023 FE0E ; text style; # (1.1) NUMBER SIGN +0023 FE0F ; emoji style; # (1.1) NUMBER SIGN +002A FE0E ; text style; # (1.1) ASTERISK +002A FE0F ; emoji style; # (1.1) ASTERISK +0030 FE0E ; text style; # (1.1) DIGIT ZERO +0030 FE0F ; emoji style; # (1.1) DIGIT ZERO +0031 FE0E ; text style; # (1.1) DIGIT ONE +0031 FE0F ; emoji style; # (1.1) DIGIT ONE +0032 FE0E ; text style; # (1.1) DIGIT TWO +0032 FE0F ; emoji style; # (1.1) DIGIT TWO +0033 FE0E ; text style; # (1.1) DIGIT THREE +0033 FE0F ; emoji style; # (1.1) DIGIT THREE +0034 FE0E ; text style; # (1.1) DIGIT FOUR +0034 FE0F ; emoji style; # (1.1) DIGIT FOUR +0035 FE0E ; text style; # (1.1) DIGIT FIVE +0035 FE0F ; emoji style; # (1.1) DIGIT FIVE +0036 FE0E ; text style; # (1.1) DIGIT SIX +0036 FE0F ; emoji style; # (1.1) DIGIT SIX +0037 FE0E ; text style; # (1.1) DIGIT SEVEN +0037 FE0F ; emoji style; # (1.1) DIGIT SEVEN +0038 FE0E ; text style; # (1.1) DIGIT EIGHT +0038 FE0F ; emoji style; # (1.1) DIGIT EIGHT +0039 FE0E ; text style; # (1.1) DIGIT NINE +0039 FE0F ; emoji style; # (1.1) DIGIT NINE +00A9 FE0E ; text style; # (1.1) COPYRIGHT SIGN +00A9 FE0F ; emoji style; # (1.1) COPYRIGHT SIGN +00AE FE0E ; text style; # (1.1) REGISTERED SIGN +00AE FE0F ; emoji style; # (1.1) REGISTERED SIGN +203C FE0E ; text style; # (1.1) DOUBLE EXCLAMATION MARK +203C FE0F ; emoji style; # (1.1) DOUBLE EXCLAMATION MARK +2049 FE0E ; text style; # (3.0) EXCLAMATION QUESTION MARK +2049 FE0F ; emoji style; # (3.0) EXCLAMATION QUESTION MARK +2122 FE0E ; text style; # (1.1) TRADE MARK SIGN +2122 FE0F ; emoji style; # (1.1) TRADE MARK SIGN +2139 FE0E ; text style; # (3.0) INFORMATION SOURCE +2139 FE0F ; emoji style; # (3.0) INFORMATION SOURCE +2194 FE0E ; text style; # (1.1) LEFT RIGHT ARROW +2194 FE0F ; emoji style; # (1.1) LEFT RIGHT ARROW +2195 FE0E ; text style; # (1.1) UP DOWN ARROW +2195 FE0F ; emoji style; # (1.1) UP DOWN ARROW +2196 FE0E ; text style; # (1.1) NORTH WEST ARROW +2196 FE0F ; emoji style; # (1.1) NORTH WEST ARROW +2197 FE0E ; text style; # (1.1) NORTH EAST ARROW +2197 FE0F ; emoji style; # (1.1) NORTH EAST ARROW +2198 FE0E ; text style; # (1.1) SOUTH EAST ARROW +2198 FE0F ; emoji style; # (1.1) SOUTH EAST ARROW +2199 FE0E ; text style; # (1.1) SOUTH WEST ARROW +2199 FE0F ; emoji style; # (1.1) SOUTH WEST ARROW +21A9 FE0E ; text style; # (1.1) LEFTWARDS ARROW WITH HOOK +21A9 FE0F ; emoji style; # (1.1) LEFTWARDS ARROW WITH HOOK +21AA FE0E ; text style; # (1.1) RIGHTWARDS ARROW WITH HOOK +21AA FE0F ; emoji style; # (1.1) RIGHTWARDS ARROW WITH HOOK +231A FE0E ; text style; # (1.1) WATCH +231A FE0F ; emoji style; # (1.1) WATCH +231B FE0E ; text style; # (1.1) HOURGLASS +231B FE0F ; emoji style; # (1.1) HOURGLASS +2328 FE0E ; text style; # (1.1) KEYBOARD +2328 FE0F ; emoji style; # (1.1) KEYBOARD +23CF FE0E ; text style; # (4.0) EJECT SYMBOL +23CF FE0F ; emoji style; # (4.0) EJECT SYMBOL +23E9 FE0E ; text style; # (6.0) BLACK RIGHT-POINTING DOUBLE TRIANGLE +23E9 FE0F ; emoji style; # (6.0) BLACK RIGHT-POINTING DOUBLE TRIANGLE +23EA FE0E ; text style; # (6.0) BLACK LEFT-POINTING DOUBLE TRIANGLE +23EA FE0F ; emoji style; # (6.0) BLACK LEFT-POINTING DOUBLE TRIANGLE +23EB FE0E ; text style; # (6.0) BLACK UP-POINTING DOUBLE TRIANGLE +23EB FE0F ; emoji style; # (6.0) BLACK UP-POINTING DOUBLE TRIANGLE +23EC FE0E ; text style; # (6.0) BLACK DOWN-POINTING DOUBLE TRIANGLE +23EC FE0F ; emoji style; # (6.0) BLACK DOWN-POINTING DOUBLE TRIANGLE +23ED FE0E ; text style; # (6.0) BLACK RIGHT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR +23ED FE0F ; emoji style; # (6.0) BLACK RIGHT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR +23EE FE0E ; text style; # (6.0) BLACK LEFT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR +23EE FE0F ; emoji style; # (6.0) BLACK LEFT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR +23EF FE0E ; text style; # (6.0) BLACK RIGHT-POINTING TRIANGLE WITH DOUBLE VERTICAL BAR +23EF FE0F ; emoji style; # (6.0) BLACK RIGHT-POINTING TRIANGLE WITH DOUBLE VERTICAL BAR +23F0 FE0E ; text style; # (6.0) ALARM CLOCK +23F0 FE0F ; emoji style; # (6.0) ALARM CLOCK +23F1 FE0E ; text style; # (6.0) STOPWATCH +23F1 FE0F ; emoji style; # (6.0) STOPWATCH +23F2 FE0E ; text style; # (6.0) TIMER CLOCK +23F2 FE0F ; emoji style; # (6.0) TIMER CLOCK +23F3 FE0E ; text style; # (6.0) HOURGLASS WITH FLOWING SAND +23F3 FE0F ; emoji style; # (6.0) HOURGLASS WITH FLOWING SAND +23F8 FE0E ; text style; # (7.0) DOUBLE VERTICAL BAR +23F8 FE0F ; emoji style; # (7.0) DOUBLE VERTICAL BAR +23F9 FE0E ; text style; # (7.0) BLACK SQUARE FOR STOP +23F9 FE0F ; emoji style; # (7.0) BLACK SQUARE FOR STOP +23FA FE0E ; text style; # (7.0) BLACK CIRCLE FOR RECORD +23FA FE0F ; emoji style; # (7.0) BLACK CIRCLE FOR RECORD +24C2 FE0E ; text style; # (1.1) CIRCLED LATIN CAPITAL LETTER M +24C2 FE0F ; emoji style; # (1.1) CIRCLED LATIN CAPITAL LETTER M +25AA FE0E ; text style; # (1.1) BLACK SMALL SQUARE +25AA FE0F ; emoji style; # (1.1) BLACK SMALL SQUARE +25AB FE0E ; text style; # (1.1) WHITE SMALL SQUARE +25AB FE0F ; emoji style; # (1.1) WHITE SMALL SQUARE +25B6 FE0E ; text style; # (1.1) BLACK RIGHT-POINTING TRIANGLE +25B6 FE0F ; emoji style; # (1.1) BLACK RIGHT-POINTING TRIANGLE +25C0 FE0E ; text style; # (1.1) BLACK LEFT-POINTING TRIANGLE +25C0 FE0F ; emoji style; # (1.1) BLACK LEFT-POINTING TRIANGLE +25FB FE0E ; text style; # (3.2) WHITE MEDIUM SQUARE +25FB FE0F ; emoji style; # (3.2) WHITE MEDIUM SQUARE +25FC FE0E ; text style; # (3.2) BLACK MEDIUM SQUARE +25FC FE0F ; emoji style; # (3.2) BLACK MEDIUM SQUARE +25FD FE0E ; text style; # (3.2) WHITE MEDIUM SMALL SQUARE +25FD FE0F ; emoji style; # (3.2) WHITE MEDIUM SMALL SQUARE +25FE FE0E ; text style; # (3.2) BLACK MEDIUM SMALL SQUARE +25FE FE0F ; emoji style; # (3.2) BLACK MEDIUM SMALL SQUARE +2600 FE0E ; text style; # (1.1) BLACK SUN WITH RAYS +2600 FE0F ; emoji style; # (1.1) BLACK SUN WITH RAYS +2601 FE0E ; text style; # (1.1) CLOUD +2601 FE0F ; emoji style; # (1.1) CLOUD +2602 FE0E ; text style; # (1.1) UMBRELLA +2602 FE0F ; emoji style; # (1.1) UMBRELLA +2603 FE0E ; text style; # (1.1) SNOWMAN +2603 FE0F ; emoji style; # (1.1) SNOWMAN +2604 FE0E ; text style; # (1.1) COMET +2604 FE0F ; emoji style; # (1.1) COMET +260E FE0E ; text style; # (1.1) BLACK TELEPHONE +260E FE0F ; emoji style; # (1.1) BLACK TELEPHONE +2611 FE0E ; text style; # (1.1) BALLOT BOX WITH CHECK +2611 FE0F ; emoji style; # (1.1) BALLOT BOX WITH CHECK +2614 FE0E ; text style; # (4.0) UMBRELLA WITH RAIN DROPS +2614 FE0F ; emoji style; # (4.0) UMBRELLA WITH RAIN DROPS +2615 FE0E ; text style; # (4.0) HOT BEVERAGE +2615 FE0F ; emoji style; # (4.0) HOT BEVERAGE +2618 FE0E ; text style; # (4.1) SHAMROCK +2618 FE0F ; emoji style; # (4.1) SHAMROCK +261D FE0E ; text style; # (1.1) WHITE UP POINTING INDEX +261D FE0F ; emoji style; # (1.1) WHITE UP POINTING INDEX +2620 FE0E ; text style; # (1.1) SKULL AND CROSSBONES +2620 FE0F ; emoji style; # (1.1) SKULL AND CROSSBONES +2622 FE0E ; text style; # (1.1) RADIOACTIVE SIGN +2622 FE0F ; emoji style; # (1.1) RADIOACTIVE SIGN +2623 FE0E ; text style; # (1.1) BIOHAZARD SIGN +2623 FE0F ; emoji style; # (1.1) BIOHAZARD SIGN +2626 FE0E ; text style; # (1.1) ORTHODOX CROSS +2626 FE0F ; emoji style; # (1.1) ORTHODOX CROSS +262A FE0E ; text style; # (1.1) STAR AND CRESCENT +262A FE0F ; emoji style; # (1.1) STAR AND CRESCENT +262E FE0E ; text style; # (1.1) PEACE SYMBOL +262E FE0F ; emoji style; # (1.1) PEACE SYMBOL +262F FE0E ; text style; # (1.1) YIN YANG +262F FE0F ; emoji style; # (1.1) YIN YANG +2638 FE0E ; text style; # (1.1) WHEEL OF DHARMA +2638 FE0F ; emoji style; # (1.1) WHEEL OF DHARMA +2639 FE0E ; text style; # (1.1) WHITE FROWNING FACE +2639 FE0F ; emoji style; # (1.1) WHITE FROWNING FACE +263A FE0E ; text style; # (1.1) WHITE SMILING FACE +263A FE0F ; emoji style; # (1.1) WHITE SMILING FACE +2640 FE0E ; text style; # (1.1) FEMALE SIGN +2640 FE0F ; emoji style; # (1.1) FEMALE SIGN +2642 FE0E ; text style; # (1.1) MALE SIGN +2642 FE0F ; emoji style; # (1.1) MALE SIGN +2648 FE0E ; text style; # (1.1) ARIES +2648 FE0F ; emoji style; # (1.1) ARIES +2649 FE0E ; text style; # (1.1) TAURUS +2649 FE0F ; emoji style; # (1.1) TAURUS +264A FE0E ; text style; # (1.1) GEMINI +264A FE0F ; emoji style; # (1.1) GEMINI +264B FE0E ; text style; # (1.1) CANCER +264B FE0F ; emoji style; # (1.1) CANCER +264C FE0E ; text style; # (1.1) LEO +264C FE0F ; emoji style; # (1.1) LEO +264D FE0E ; text style; # (1.1) VIRGO +264D FE0F ; emoji style; # (1.1) VIRGO +264E FE0E ; text style; # (1.1) LIBRA +264E FE0F ; emoji style; # (1.1) LIBRA +264F FE0E ; text style; # (1.1) SCORPIUS +264F FE0F ; emoji style; # (1.1) SCORPIUS +2650 FE0E ; text style; # (1.1) SAGITTARIUS +2650 FE0F ; emoji style; # (1.1) SAGITTARIUS +2651 FE0E ; text style; # (1.1) CAPRICORN +2651 FE0F ; emoji style; # (1.1) CAPRICORN +2652 FE0E ; text style; # (1.1) AQUARIUS +2652 FE0F ; emoji style; # (1.1) AQUARIUS +2653 FE0E ; text style; # (1.1) PISCES +2653 FE0F ; emoji style; # (1.1) PISCES +265F FE0E ; text style; # (1.1) BLACK CHESS PAWN +265F FE0F ; emoji style; # (1.1) BLACK CHESS PAWN +2660 FE0E ; text style; # (1.1) BLACK SPADE SUIT +2660 FE0F ; emoji style; # (1.1) BLACK SPADE SUIT +2663 FE0E ; text style; # (1.1) BLACK CLUB SUIT +2663 FE0F ; emoji style; # (1.1) BLACK CLUB SUIT +2665 FE0E ; text style; # (1.1) BLACK HEART SUIT +2665 FE0F ; emoji style; # (1.1) BLACK HEART SUIT +2666 FE0E ; text style; # (1.1) BLACK DIAMOND SUIT +2666 FE0F ; emoji style; # (1.1) BLACK DIAMOND SUIT +2668 FE0E ; text style; # (1.1) HOT SPRINGS +2668 FE0F ; emoji style; # (1.1) HOT SPRINGS +267B FE0E ; text style; # (3.2) BLACK UNIVERSAL RECYCLING SYMBOL +267B FE0F ; emoji style; # (3.2) BLACK UNIVERSAL RECYCLING SYMBOL +267E FE0E ; text style; # (4.1) PERMANENT PAPER SIGN +267E FE0F ; emoji style; # (4.1) PERMANENT PAPER SIGN +267F FE0E ; text style; # (4.1) WHEELCHAIR SYMBOL +267F FE0F ; emoji style; # (4.1) WHEELCHAIR SYMBOL +2692 FE0E ; text style; # (4.1) HAMMER AND PICK +2692 FE0F ; emoji style; # (4.1) HAMMER AND PICK +2693 FE0E ; text style; # (4.1) ANCHOR +2693 FE0F ; emoji style; # (4.1) ANCHOR +2694 FE0E ; text style; # (4.1) CROSSED SWORDS +2694 FE0F ; emoji style; # (4.1) CROSSED SWORDS +2695 FE0E ; text style; # (4.1) STAFF OF AESCULAPIUS +2695 FE0F ; emoji style; # (4.1) STAFF OF AESCULAPIUS +2696 FE0E ; text style; # (4.1) SCALES +2696 FE0F ; emoji style; # (4.1) SCALES +2697 FE0E ; text style; # (4.1) ALEMBIC +2697 FE0F ; emoji style; # (4.1) ALEMBIC +2699 FE0E ; text style; # (4.1) GEAR +2699 FE0F ; emoji style; # (4.1) GEAR +269B FE0E ; text style; # (4.1) ATOM SYMBOL +269B FE0F ; emoji style; # (4.1) ATOM SYMBOL +269C FE0E ; text style; # (4.1) FLEUR-DE-LIS +269C FE0F ; emoji style; # (4.1) FLEUR-DE-LIS +26A0 FE0E ; text style; # (4.0) WARNING SIGN +26A0 FE0F ; emoji style; # (4.0) WARNING SIGN +26A1 FE0E ; text style; # (4.0) HIGH VOLTAGE SIGN +26A1 FE0F ; emoji style; # (4.0) HIGH VOLTAGE SIGN +26A7 FE0E ; text style; # (4.1) MALE WITH STROKE AND MALE AND FEMALE SIGN +26A7 FE0F ; emoji style; # (4.1) MALE WITH STROKE AND MALE AND FEMALE SIGN +26AA FE0E ; text style; # (4.1) MEDIUM WHITE CIRCLE +26AA FE0F ; emoji style; # (4.1) MEDIUM WHITE CIRCLE +26AB FE0E ; text style; # (4.1) MEDIUM BLACK CIRCLE +26AB FE0F ; emoji style; # (4.1) MEDIUM BLACK CIRCLE +26B0 FE0E ; text style; # (4.1) COFFIN +26B0 FE0F ; emoji style; # (4.1) COFFIN +26B1 FE0E ; text style; # (4.1) FUNERAL URN +26B1 FE0F ; emoji style; # (4.1) FUNERAL URN +26BD FE0E ; text style; # (5.2) SOCCER BALL +26BD FE0F ; emoji style; # (5.2) SOCCER BALL +26BE FE0E ; text style; # (5.2) BASEBALL +26BE FE0F ; emoji style; # (5.2) BASEBALL +26C4 FE0E ; text style; # (5.2) SNOWMAN WITHOUT SNOW +26C4 FE0F ; emoji style; # (5.2) SNOWMAN WITHOUT SNOW +26C5 FE0E ; text style; # (5.2) SUN BEHIND CLOUD +26C5 FE0F ; emoji style; # (5.2) SUN BEHIND CLOUD +26C8 FE0E ; text style; # (5.2) THUNDER CLOUD AND RAIN +26C8 FE0F ; emoji style; # (5.2) THUNDER CLOUD AND RAIN +26CE FE0E ; text style; # (6.0) OPHIUCHUS +26CE FE0F ; emoji style; # (6.0) OPHIUCHUS +26CF FE0E ; text style; # (5.2) PICK +26CF FE0F ; emoji style; # (5.2) PICK +26D1 FE0E ; text style; # (5.2) HELMET WITH WHITE CROSS +26D1 FE0F ; emoji style; # (5.2) HELMET WITH WHITE CROSS +26D3 FE0E ; text style; # (5.2) CHAINS +26D3 FE0F ; emoji style; # (5.2) CHAINS +26D4 FE0E ; text style; # (5.2) NO ENTRY +26D4 FE0F ; emoji style; # (5.2) NO ENTRY +26E9 FE0E ; text style; # (5.2) SHINTO SHRINE +26E9 FE0F ; emoji style; # (5.2) SHINTO SHRINE +26EA FE0E ; text style; # (5.2) CHURCH +26EA FE0F ; emoji style; # (5.2) CHURCH +26F0 FE0E ; text style; # (5.2) MOUNTAIN +26F0 FE0F ; emoji style; # (5.2) MOUNTAIN +26F1 FE0E ; text style; # (5.2) UMBRELLA ON GROUND +26F1 FE0F ; emoji style; # (5.2) UMBRELLA ON GROUND +26F2 FE0E ; text style; # (5.2) FOUNTAIN +26F2 FE0F ; emoji style; # (5.2) FOUNTAIN +26F3 FE0E ; text style; # (5.2) FLAG IN HOLE +26F3 FE0F ; emoji style; # (5.2) FLAG IN HOLE +26F4 FE0E ; text style; # (5.2) FERRY +26F4 FE0F ; emoji style; # (5.2) FERRY +26F5 FE0E ; text style; # (5.2) SAILBOAT +26F5 FE0F ; emoji style; # (5.2) SAILBOAT +26F7 FE0E ; text style; # (5.2) SKIER +26F7 FE0F ; emoji style; # (5.2) SKIER +26F8 FE0E ; text style; # (5.2) ICE SKATE +26F8 FE0F ; emoji style; # (5.2) ICE SKATE +26F9 FE0E ; text style; # (5.2) PERSON WITH BALL +26F9 FE0F ; emoji style; # (5.2) PERSON WITH BALL +26FA FE0E ; text style; # (5.2) TENT +26FA FE0F ; emoji style; # (5.2) TENT +26FD FE0E ; text style; # (5.2) FUEL PUMP +26FD FE0F ; emoji style; # (5.2) FUEL PUMP +2702 FE0E ; text style; # (1.1) BLACK SCISSORS +2702 FE0F ; emoji style; # (1.1) BLACK SCISSORS +2705 FE0E ; text style; # (6.0) WHITE HEAVY CHECK MARK +2705 FE0F ; emoji style; # (6.0) WHITE HEAVY CHECK MARK +2708 FE0E ; text style; # (1.1) AIRPLANE +2708 FE0F ; emoji style; # (1.1) AIRPLANE +2709 FE0E ; text style; # (1.1) ENVELOPE +2709 FE0F ; emoji style; # (1.1) ENVELOPE +270A FE0E ; text style; # (6.0) RAISED FIST +270A FE0F ; emoji style; # (6.0) RAISED FIST +270B FE0E ; text style; # (6.0) RAISED HAND +270B FE0F ; emoji style; # (6.0) RAISED HAND +270C FE0E ; text style; # (1.1) VICTORY HAND +270C FE0F ; emoji style; # (1.1) VICTORY HAND +270D FE0E ; text style; # (1.1) WRITING HAND +270D FE0F ; emoji style; # (1.1) WRITING HAND +270F FE0E ; text style; # (1.1) PENCIL +270F FE0F ; emoji style; # (1.1) PENCIL +2712 FE0E ; text style; # (1.1) BLACK NIB +2712 FE0F ; emoji style; # (1.1) BLACK NIB +2714 FE0E ; text style; # (1.1) HEAVY CHECK MARK +2714 FE0F ; emoji style; # (1.1) HEAVY CHECK MARK +2716 FE0E ; text style; # (1.1) HEAVY MULTIPLICATION X +2716 FE0F ; emoji style; # (1.1) HEAVY MULTIPLICATION X +271D FE0E ; text style; # (1.1) LATIN CROSS +271D FE0F ; emoji style; # (1.1) LATIN CROSS +2721 FE0E ; text style; # (1.1) STAR OF DAVID +2721 FE0F ; emoji style; # (1.1) STAR OF DAVID +2728 FE0E ; text style; # (6.0) SPARKLES +2728 FE0F ; emoji style; # (6.0) SPARKLES +2733 FE0E ; text style; # (1.1) EIGHT SPOKED ASTERISK +2733 FE0F ; emoji style; # (1.1) EIGHT SPOKED ASTERISK +2734 FE0E ; text style; # (1.1) EIGHT POINTED BLACK STAR +2734 FE0F ; emoji style; # (1.1) EIGHT POINTED BLACK STAR +2744 FE0E ; text style; # (1.1) SNOWFLAKE +2744 FE0F ; emoji style; # (1.1) SNOWFLAKE +2747 FE0E ; text style; # (1.1) SPARKLE +2747 FE0F ; emoji style; # (1.1) SPARKLE +274C FE0E ; text style; # (6.0) CROSS MARK +274C FE0F ; emoji style; # (6.0) CROSS MARK +274E FE0E ; text style; # (6.0) NEGATIVE SQUARED CROSS MARK +274E FE0F ; emoji style; # (6.0) NEGATIVE SQUARED CROSS MARK +2753 FE0E ; text style; # (6.0) BLACK QUESTION MARK ORNAMENT +2753 FE0F ; emoji style; # (6.0) BLACK QUESTION MARK ORNAMENT +2754 FE0E ; text style; # (6.0) WHITE QUESTION MARK ORNAMENT +2754 FE0F ; emoji style; # (6.0) WHITE QUESTION MARK ORNAMENT +2755 FE0E ; text style; # (6.0) WHITE EXCLAMATION MARK ORNAMENT +2755 FE0F ; emoji style; # (6.0) WHITE EXCLAMATION MARK ORNAMENT +2757 FE0E ; text style; # (5.2) HEAVY EXCLAMATION MARK SYMBOL +2757 FE0F ; emoji style; # (5.2) HEAVY EXCLAMATION MARK SYMBOL +2763 FE0E ; text style; # (1.1) HEAVY HEART EXCLAMATION MARK ORNAMENT +2763 FE0F ; emoji style; # (1.1) HEAVY HEART EXCLAMATION MARK ORNAMENT +2764 FE0E ; text style; # (1.1) HEAVY BLACK HEART +2764 FE0F ; emoji style; # (1.1) HEAVY BLACK HEART +2795 FE0E ; text style; # (6.0) HEAVY PLUS SIGN +2795 FE0F ; emoji style; # (6.0) HEAVY PLUS SIGN +2796 FE0E ; text style; # (6.0) HEAVY MINUS SIGN +2796 FE0F ; emoji style; # (6.0) HEAVY MINUS SIGN +2797 FE0E ; text style; # (6.0) HEAVY DIVISION SIGN +2797 FE0F ; emoji style; # (6.0) HEAVY DIVISION SIGN +27A1 FE0E ; text style; # (1.1) BLACK RIGHTWARDS ARROW +27A1 FE0F ; emoji style; # (1.1) BLACK RIGHTWARDS ARROW +27B0 FE0E ; text style; # (6.0) CURLY LOOP +27B0 FE0F ; emoji style; # (6.0) CURLY LOOP +27BF FE0E ; text style; # (6.0) DOUBLE CURLY LOOP +27BF FE0F ; emoji style; # (6.0) DOUBLE CURLY LOOP +2934 FE0E ; text style; # (3.2) ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS +2934 FE0F ; emoji style; # (3.2) ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS +2935 FE0E ; text style; # (3.2) ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS +2935 FE0F ; emoji style; # (3.2) ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS +2B05 FE0E ; text style; # (4.0) LEFTWARDS BLACK ARROW +2B05 FE0F ; emoji style; # (4.0) LEFTWARDS BLACK ARROW +2B06 FE0E ; text style; # (4.0) UPWARDS BLACK ARROW +2B06 FE0F ; emoji style; # (4.0) UPWARDS BLACK ARROW +2B07 FE0E ; text style; # (4.0) DOWNWARDS BLACK ARROW +2B07 FE0F ; emoji style; # (4.0) DOWNWARDS BLACK ARROW +2B1B FE0E ; text style; # (5.1) BLACK LARGE SQUARE +2B1B FE0F ; emoji style; # (5.1) BLACK LARGE SQUARE +2B1C FE0E ; text style; # (5.1) WHITE LARGE SQUARE +2B1C FE0F ; emoji style; # (5.1) WHITE LARGE SQUARE +2B50 FE0E ; text style; # (5.1) WHITE MEDIUM STAR +2B50 FE0F ; emoji style; # (5.1) WHITE MEDIUM STAR +2B55 FE0E ; text style; # (5.2) HEAVY LARGE CIRCLE +2B55 FE0F ; emoji style; # (5.2) HEAVY LARGE CIRCLE +3030 FE0E ; text style; # (1.1) WAVY DASH +3030 FE0F ; emoji style; # (1.1) WAVY DASH +303D FE0E ; text style; # (3.2) PART ALTERNATION MARK +303D FE0F ; emoji style; # (3.2) PART ALTERNATION MARK +3297 FE0E ; text style; # (1.1) CIRCLED IDEOGRAPH CONGRATULATION +3297 FE0F ; emoji style; # (1.1) CIRCLED IDEOGRAPH CONGRATULATION +3299 FE0E ; text style; # (1.1) CIRCLED IDEOGRAPH SECRET +3299 FE0F ; emoji style; # (1.1) CIRCLED IDEOGRAPH SECRET +1F004 FE0E ; text style; # (5.1) MAHJONG TILE RED DRAGON +1F004 FE0F ; emoji style; # (5.1) MAHJONG TILE RED DRAGON +1F170 FE0E ; text style; # (6.0) NEGATIVE SQUARED LATIN CAPITAL LETTER A +1F170 FE0F ; emoji style; # (6.0) NEGATIVE SQUARED LATIN CAPITAL LETTER A +1F171 FE0E ; text style; # (6.0) NEGATIVE SQUARED LATIN CAPITAL LETTER B +1F171 FE0F ; emoji style; # (6.0) NEGATIVE SQUARED LATIN CAPITAL LETTER B +1F17E FE0E ; text style; # (6.0) NEGATIVE SQUARED LATIN CAPITAL LETTER O +1F17E FE0F ; emoji style; # (6.0) NEGATIVE SQUARED LATIN CAPITAL LETTER O +1F17F FE0E ; text style; # (5.2) NEGATIVE SQUARED LATIN CAPITAL LETTER P +1F17F FE0F ; emoji style; # (5.2) NEGATIVE SQUARED LATIN CAPITAL LETTER P +1F202 FE0E ; text style; # (6.0) SQUARED KATAKANA SA +1F202 FE0F ; emoji style; # (6.0) SQUARED KATAKANA SA +1F21A FE0E ; text style; # (5.2) SQUARED CJK UNIFIED IDEOGRAPH-7121 +1F21A FE0F ; emoji style; # (5.2) SQUARED CJK UNIFIED IDEOGRAPH-7121 +1F22F FE0E ; text style; # (5.2) SQUARED CJK UNIFIED IDEOGRAPH-6307 +1F22F FE0F ; emoji style; # (5.2) SQUARED CJK UNIFIED IDEOGRAPH-6307 +1F237 FE0E ; text style; # (6.0) SQUARED CJK UNIFIED IDEOGRAPH-6708 +1F237 FE0F ; emoji style; # (6.0) SQUARED CJK UNIFIED IDEOGRAPH-6708 +1F30D FE0E ; text style; # (6.0) EARTH GLOBE EUROPE-AFRICA +1F30D FE0F ; emoji style; # (6.0) EARTH GLOBE EUROPE-AFRICA +1F30E FE0E ; text style; # (6.0) EARTH GLOBE AMERICAS +1F30E FE0F ; emoji style; # (6.0) EARTH GLOBE AMERICAS +1F30F FE0E ; text style; # (6.0) EARTH GLOBE ASIA-AUSTRALIA +1F30F FE0F ; emoji style; # (6.0) EARTH GLOBE ASIA-AUSTRALIA +1F315 FE0E ; text style; # (6.0) FULL MOON SYMBOL +1F315 FE0F ; emoji style; # (6.0) FULL MOON SYMBOL +1F31C FE0E ; text style; # (6.0) LAST QUARTER MOON WITH FACE +1F31C FE0F ; emoji style; # (6.0) LAST QUARTER MOON WITH FACE +1F321 FE0E ; text style; # (7.0) THERMOMETER +1F321 FE0F ; emoji style; # (7.0) THERMOMETER +1F324 FE0E ; text style; # (7.0) WHITE SUN WITH SMALL CLOUD +1F324 FE0F ; emoji style; # (7.0) WHITE SUN WITH SMALL CLOUD +1F325 FE0E ; text style; # (7.0) WHITE SUN BEHIND CLOUD +1F325 FE0F ; emoji style; # (7.0) WHITE SUN BEHIND CLOUD +1F326 FE0E ; text style; # (7.0) WHITE SUN BEHIND CLOUD WITH RAIN +1F326 FE0F ; emoji style; # (7.0) WHITE SUN BEHIND CLOUD WITH RAIN +1F327 FE0E ; text style; # (7.0) CLOUD WITH RAIN +1F327 FE0F ; emoji style; # (7.0) CLOUD WITH RAIN +1F328 FE0E ; text style; # (7.0) CLOUD WITH SNOW +1F328 FE0F ; emoji style; # (7.0) CLOUD WITH SNOW +1F329 FE0E ; text style; # (7.0) CLOUD WITH LIGHTNING +1F329 FE0F ; emoji style; # (7.0) CLOUD WITH LIGHTNING +1F32A FE0E ; text style; # (7.0) CLOUD WITH TORNADO +1F32A FE0F ; emoji style; # (7.0) CLOUD WITH TORNADO +1F32B FE0E ; text style; # (7.0) FOG +1F32B FE0F ; emoji style; # (7.0) FOG +1F32C FE0E ; text style; # (7.0) WIND BLOWING FACE +1F32C FE0F ; emoji style; # (7.0) WIND BLOWING FACE +1F336 FE0E ; text style; # (7.0) HOT PEPPER +1F336 FE0F ; emoji style; # (7.0) HOT PEPPER +1F378 FE0E ; text style; # (6.0) COCKTAIL GLASS +1F378 FE0F ; emoji style; # (6.0) COCKTAIL GLASS +1F37D FE0E ; text style; # (7.0) FORK AND KNIFE WITH PLATE +1F37D FE0F ; emoji style; # (7.0) FORK AND KNIFE WITH PLATE +1F393 FE0E ; text style; # (6.0) GRADUATION CAP +1F393 FE0F ; emoji style; # (6.0) GRADUATION CAP +1F396 FE0E ; text style; # (7.0) MILITARY MEDAL +1F396 FE0F ; emoji style; # (7.0) MILITARY MEDAL +1F397 FE0E ; text style; # (7.0) REMINDER RIBBON +1F397 FE0F ; emoji style; # (7.0) REMINDER RIBBON +1F399 FE0E ; text style; # (7.0) STUDIO MICROPHONE +1F399 FE0F ; emoji style; # (7.0) STUDIO MICROPHONE +1F39A FE0E ; text style; # (7.0) LEVEL SLIDER +1F39A FE0F ; emoji style; # (7.0) LEVEL SLIDER +1F39B FE0E ; text style; # (7.0) CONTROL KNOBS +1F39B FE0F ; emoji style; # (7.0) CONTROL KNOBS +1F39E FE0E ; text style; # (7.0) FILM FRAMES +1F39E FE0F ; emoji style; # (7.0) FILM FRAMES +1F39F FE0E ; text style; # (7.0) ADMISSION TICKETS +1F39F FE0F ; emoji style; # (7.0) ADMISSION TICKETS +1F3A7 FE0E ; text style; # (6.0) HEADPHONE +1F3A7 FE0F ; emoji style; # (6.0) HEADPHONE +1F3AC FE0E ; text style; # (6.0) CLAPPER BOARD +1F3AC FE0F ; emoji style; # (6.0) CLAPPER BOARD +1F3AD FE0E ; text style; # (6.0) PERFORMING ARTS +1F3AD FE0F ; emoji style; # (6.0) PERFORMING ARTS +1F3AE FE0E ; text style; # (6.0) VIDEO GAME +1F3AE FE0F ; emoji style; # (6.0) VIDEO GAME +1F3C2 FE0E ; text style; # (6.0) SNOWBOARDER +1F3C2 FE0F ; emoji style; # (6.0) SNOWBOARDER +1F3C4 FE0E ; text style; # (6.0) SURFER +1F3C4 FE0F ; emoji style; # (6.0) SURFER +1F3C6 FE0E ; text style; # (6.0) TROPHY +1F3C6 FE0F ; emoji style; # (6.0) TROPHY +1F3CA FE0E ; text style; # (6.0) SWIMMER +1F3CA FE0F ; emoji style; # (6.0) SWIMMER +1F3CB FE0E ; text style; # (7.0) WEIGHT LIFTER +1F3CB FE0F ; emoji style; # (7.0) WEIGHT LIFTER +1F3CC FE0E ; text style; # (7.0) GOLFER +1F3CC FE0F ; emoji style; # (7.0) GOLFER +1F3CD FE0E ; text style; # (7.0) RACING MOTORCYCLE +1F3CD FE0F ; emoji style; # (7.0) RACING MOTORCYCLE +1F3CE FE0E ; text style; # (7.0) RACING CAR +1F3CE FE0F ; emoji style; # (7.0) RACING CAR +1F3D4 FE0E ; text style; # (7.0) SNOW CAPPED MOUNTAIN +1F3D4 FE0F ; emoji style; # (7.0) SNOW CAPPED MOUNTAIN +1F3D5 FE0E ; text style; # (7.0) CAMPING +1F3D5 FE0F ; emoji style; # (7.0) CAMPING +1F3D6 FE0E ; text style; # (7.0) BEACH WITH UMBRELLA +1F3D6 FE0F ; emoji style; # (7.0) BEACH WITH UMBRELLA +1F3D7 FE0E ; text style; # (7.0) BUILDING CONSTRUCTION +1F3D7 FE0F ; emoji style; # (7.0) BUILDING CONSTRUCTION +1F3D8 FE0E ; text style; # (7.0) HOUSE BUILDINGS +1F3D8 FE0F ; emoji style; # (7.0) HOUSE BUILDINGS +1F3D9 FE0E ; text style; # (7.0) CITYSCAPE +1F3D9 FE0F ; emoji style; # (7.0) CITYSCAPE +1F3DA FE0E ; text style; # (7.0) DERELICT HOUSE BUILDING +1F3DA FE0F ; emoji style; # (7.0) DERELICT HOUSE BUILDING +1F3DB FE0E ; text style; # (7.0) CLASSICAL BUILDING +1F3DB FE0F ; emoji style; # (7.0) CLASSICAL BUILDING +1F3DC FE0E ; text style; # (7.0) DESERT +1F3DC FE0F ; emoji style; # (7.0) DESERT +1F3DD FE0E ; text style; # (7.0) DESERT ISLAND +1F3DD FE0F ; emoji style; # (7.0) DESERT ISLAND +1F3DE FE0E ; text style; # (7.0) NATIONAL PARK +1F3DE FE0F ; emoji style; # (7.0) NATIONAL PARK +1F3DF FE0E ; text style; # (7.0) STADIUM +1F3DF FE0F ; emoji style; # (7.0) STADIUM +1F3E0 FE0E ; text style; # (6.0) HOUSE BUILDING +1F3E0 FE0F ; emoji style; # (6.0) HOUSE BUILDING +1F3ED FE0E ; text style; # (6.0) FACTORY +1F3ED FE0F ; emoji style; # (6.0) FACTORY +1F3F3 FE0E ; text style; # (7.0) WAVING WHITE FLAG +1F3F3 FE0F ; emoji style; # (7.0) WAVING WHITE FLAG +1F3F5 FE0E ; text style; # (7.0) ROSETTE +1F3F5 FE0F ; emoji style; # (7.0) ROSETTE +1F3F7 FE0E ; text style; # (7.0) LABEL +1F3F7 FE0F ; emoji style; # (7.0) LABEL +1F408 FE0E ; text style; # (6.0) CAT +1F408 FE0F ; emoji style; # (6.0) CAT +1F415 FE0E ; text style; # (6.0) DOG +1F415 FE0F ; emoji style; # (6.0) DOG +1F41F FE0E ; text style; # (6.0) FISH +1F41F FE0F ; emoji style; # (6.0) FISH +1F426 FE0E ; text style; # (6.0) BIRD +1F426 FE0F ; emoji style; # (6.0) BIRD +1F43F FE0E ; text style; # (7.0) CHIPMUNK +1F43F FE0F ; emoji style; # (7.0) CHIPMUNK +1F441 FE0E ; text style; # (7.0) EYE +1F441 FE0F ; emoji style; # (7.0) EYE +1F442 FE0E ; text style; # (6.0) EAR +1F442 FE0F ; emoji style; # (6.0) EAR +1F446 FE0E ; text style; # (6.0) WHITE UP POINTING BACKHAND INDEX +1F446 FE0F ; emoji style; # (6.0) WHITE UP POINTING BACKHAND INDEX +1F447 FE0E ; text style; # (6.0) WHITE DOWN POINTING BACKHAND INDEX +1F447 FE0F ; emoji style; # (6.0) WHITE DOWN POINTING BACKHAND INDEX +1F448 FE0E ; text style; # (6.0) WHITE LEFT POINTING BACKHAND INDEX +1F448 FE0F ; emoji style; # (6.0) WHITE LEFT POINTING BACKHAND INDEX +1F449 FE0E ; text style; # (6.0) WHITE RIGHT POINTING BACKHAND INDEX +1F449 FE0F ; emoji style; # (6.0) WHITE RIGHT POINTING BACKHAND INDEX +1F44D FE0E ; text style; # (6.0) THUMBS UP SIGN +1F44D FE0F ; emoji style; # (6.0) THUMBS UP SIGN +1F44E FE0E ; text style; # (6.0) THUMBS DOWN SIGN +1F44E FE0F ; emoji style; # (6.0) THUMBS DOWN SIGN +1F453 FE0E ; text style; # (6.0) EYEGLASSES +1F453 FE0F ; emoji style; # (6.0) EYEGLASSES +1F46A FE0E ; text style; # (6.0) FAMILY +1F46A FE0F ; emoji style; # (6.0) FAMILY +1F47D FE0E ; text style; # (6.0) EXTRATERRESTRIAL ALIEN +1F47D FE0F ; emoji style; # (6.0) EXTRATERRESTRIAL ALIEN +1F4A3 FE0E ; text style; # (6.0) BOMB +1F4A3 FE0F ; emoji style; # (6.0) BOMB +1F4B0 FE0E ; text style; # (6.0) MONEY BAG +1F4B0 FE0F ; emoji style; # (6.0) MONEY BAG +1F4B3 FE0E ; text style; # (6.0) CREDIT CARD +1F4B3 FE0F ; emoji style; # (6.0) CREDIT CARD +1F4BB FE0E ; text style; # (6.0) PERSONAL COMPUTER +1F4BB FE0F ; emoji style; # (6.0) PERSONAL COMPUTER +1F4BF FE0E ; text style; # (6.0) OPTICAL DISC +1F4BF FE0F ; emoji style; # (6.0) OPTICAL DISC +1F4CB FE0E ; text style; # (6.0) CLIPBOARD +1F4CB FE0F ; emoji style; # (6.0) CLIPBOARD +1F4DA FE0E ; text style; # (6.0) BOOKS +1F4DA FE0F ; emoji style; # (6.0) BOOKS +1F4DF FE0E ; text style; # (6.0) PAGER +1F4DF FE0F ; emoji style; # (6.0) PAGER +1F4E4 FE0E ; text style; # (6.0) OUTBOX TRAY +1F4E4 FE0F ; emoji style; # (6.0) OUTBOX TRAY +1F4E5 FE0E ; text style; # (6.0) INBOX TRAY +1F4E5 FE0F ; emoji style; # (6.0) INBOX TRAY +1F4E6 FE0E ; text style; # (6.0) PACKAGE +1F4E6 FE0F ; emoji style; # (6.0) PACKAGE +1F4EA FE0E ; text style; # (6.0) CLOSED MAILBOX WITH LOWERED FLAG +1F4EA FE0F ; emoji style; # (6.0) CLOSED MAILBOX WITH LOWERED FLAG +1F4EB FE0E ; text style; # (6.0) CLOSED MAILBOX WITH RAISED FLAG +1F4EB FE0F ; emoji style; # (6.0) CLOSED MAILBOX WITH RAISED FLAG +1F4EC FE0E ; text style; # (6.0) OPEN MAILBOX WITH RAISED FLAG +1F4EC FE0F ; emoji style; # (6.0) OPEN MAILBOX WITH RAISED FLAG +1F4ED FE0E ; text style; # (6.0) OPEN MAILBOX WITH LOWERED FLAG +1F4ED FE0F ; emoji style; # (6.0) OPEN MAILBOX WITH LOWERED FLAG +1F4F7 FE0E ; text style; # (6.0) CAMERA +1F4F7 FE0F ; emoji style; # (6.0) CAMERA +1F4F9 FE0E ; text style; # (6.0) VIDEO CAMERA +1F4F9 FE0F ; emoji style; # (6.0) VIDEO CAMERA +1F4FA FE0E ; text style; # (6.0) TELEVISION +1F4FA FE0F ; emoji style; # (6.0) TELEVISION +1F4FB FE0E ; text style; # (6.0) RADIO +1F4FB FE0F ; emoji style; # (6.0) RADIO +1F4FD FE0E ; text style; # (7.0) FILM PROJECTOR +1F4FD FE0F ; emoji style; # (7.0) FILM PROJECTOR +1F508 FE0E ; text style; # (6.0) SPEAKER +1F508 FE0F ; emoji style; # (6.0) SPEAKER +1F50D FE0E ; text style; # (6.0) LEFT-POINTING MAGNIFYING GLASS +1F50D FE0F ; emoji style; # (6.0) LEFT-POINTING MAGNIFYING GLASS +1F512 FE0E ; text style; # (6.0) LOCK +1F512 FE0F ; emoji style; # (6.0) LOCK +1F513 FE0E ; text style; # (6.0) OPEN LOCK +1F513 FE0F ; emoji style; # (6.0) OPEN LOCK +1F549 FE0E ; text style; # (7.0) OM SYMBOL +1F549 FE0F ; emoji style; # (7.0) OM SYMBOL +1F54A FE0E ; text style; # (7.0) DOVE OF PEACE +1F54A FE0F ; emoji style; # (7.0) DOVE OF PEACE +1F550 FE0E ; text style; # (6.0) CLOCK FACE ONE OCLOCK +1F550 FE0F ; emoji style; # (6.0) CLOCK FACE ONE OCLOCK +1F551 FE0E ; text style; # (6.0) CLOCK FACE TWO OCLOCK +1F551 FE0F ; emoji style; # (6.0) CLOCK FACE TWO OCLOCK +1F552 FE0E ; text style; # (6.0) CLOCK FACE THREE OCLOCK +1F552 FE0F ; emoji style; # (6.0) CLOCK FACE THREE OCLOCK +1F553 FE0E ; text style; # (6.0) CLOCK FACE FOUR OCLOCK +1F553 FE0F ; emoji style; # (6.0) CLOCK FACE FOUR OCLOCK +1F554 FE0E ; text style; # (6.0) CLOCK FACE FIVE OCLOCK +1F554 FE0F ; emoji style; # (6.0) CLOCK FACE FIVE OCLOCK +1F555 FE0E ; text style; # (6.0) CLOCK FACE SIX OCLOCK +1F555 FE0F ; emoji style; # (6.0) CLOCK FACE SIX OCLOCK +1F556 FE0E ; text style; # (6.0) CLOCK FACE SEVEN OCLOCK +1F556 FE0F ; emoji style; # (6.0) CLOCK FACE SEVEN OCLOCK +1F557 FE0E ; text style; # (6.0) CLOCK FACE EIGHT OCLOCK +1F557 FE0F ; emoji style; # (6.0) CLOCK FACE EIGHT OCLOCK +1F558 FE0E ; text style; # (6.0) CLOCK FACE NINE OCLOCK +1F558 FE0F ; emoji style; # (6.0) CLOCK FACE NINE OCLOCK +1F559 FE0E ; text style; # (6.0) CLOCK FACE TEN OCLOCK +1F559 FE0F ; emoji style; # (6.0) CLOCK FACE TEN OCLOCK +1F55A FE0E ; text style; # (6.0) CLOCK FACE ELEVEN OCLOCK +1F55A FE0F ; emoji style; # (6.0) CLOCK FACE ELEVEN OCLOCK +1F55B FE0E ; text style; # (6.0) CLOCK FACE TWELVE OCLOCK +1F55B FE0F ; emoji style; # (6.0) CLOCK FACE TWELVE OCLOCK +1F55C FE0E ; text style; # (6.0) CLOCK FACE ONE-THIRTY +1F55C FE0F ; emoji style; # (6.0) CLOCK FACE ONE-THIRTY +1F55D FE0E ; text style; # (6.0) CLOCK FACE TWO-THIRTY +1F55D FE0F ; emoji style; # (6.0) CLOCK FACE TWO-THIRTY +1F55E FE0E ; text style; # (6.0) CLOCK FACE THREE-THIRTY +1F55E FE0F ; emoji style; # (6.0) CLOCK FACE THREE-THIRTY +1F55F FE0E ; text style; # (6.0) CLOCK FACE FOUR-THIRTY +1F55F FE0F ; emoji style; # (6.0) CLOCK FACE FOUR-THIRTY +1F560 FE0E ; text style; # (6.0) CLOCK FACE FIVE-THIRTY +1F560 FE0F ; emoji style; # (6.0) CLOCK FACE FIVE-THIRTY +1F561 FE0E ; text style; # (6.0) CLOCK FACE SIX-THIRTY +1F561 FE0F ; emoji style; # (6.0) CLOCK FACE SIX-THIRTY +1F562 FE0E ; text style; # (6.0) CLOCK FACE SEVEN-THIRTY +1F562 FE0F ; emoji style; # (6.0) CLOCK FACE SEVEN-THIRTY +1F563 FE0E ; text style; # (6.0) CLOCK FACE EIGHT-THIRTY +1F563 FE0F ; emoji style; # (6.0) CLOCK FACE EIGHT-THIRTY +1F564 FE0E ; text style; # (6.0) CLOCK FACE NINE-THIRTY +1F564 FE0F ; emoji style; # (6.0) CLOCK FACE NINE-THIRTY +1F565 FE0E ; text style; # (6.0) CLOCK FACE TEN-THIRTY +1F565 FE0F ; emoji style; # (6.0) CLOCK FACE TEN-THIRTY +1F566 FE0E ; text style; # (6.0) CLOCK FACE ELEVEN-THIRTY +1F566 FE0F ; emoji style; # (6.0) CLOCK FACE ELEVEN-THIRTY +1F567 FE0E ; text style; # (6.0) CLOCK FACE TWELVE-THIRTY +1F567 FE0F ; emoji style; # (6.0) CLOCK FACE TWELVE-THIRTY +1F56F FE0E ; text style; # (7.0) CANDLE +1F56F FE0F ; emoji style; # (7.0) CANDLE +1F570 FE0E ; text style; # (7.0) MANTELPIECE CLOCK +1F570 FE0F ; emoji style; # (7.0) MANTELPIECE CLOCK +1F573 FE0E ; text style; # (7.0) HOLE +1F573 FE0F ; emoji style; # (7.0) HOLE +1F574 FE0E ; text style; # (7.0) MAN IN BUSINESS SUIT LEVITATING +1F574 FE0F ; emoji style; # (7.0) MAN IN BUSINESS SUIT LEVITATING +1F575 FE0E ; text style; # (7.0) SLEUTH OR SPY +1F575 FE0F ; emoji style; # (7.0) SLEUTH OR SPY +1F576 FE0E ; text style; # (7.0) DARK SUNGLASSES +1F576 FE0F ; emoji style; # (7.0) DARK SUNGLASSES +1F577 FE0E ; text style; # (7.0) SPIDER +1F577 FE0F ; emoji style; # (7.0) SPIDER +1F578 FE0E ; text style; # (7.0) SPIDER WEB +1F578 FE0F ; emoji style; # (7.0) SPIDER WEB +1F579 FE0E ; text style; # (7.0) JOYSTICK +1F579 FE0F ; emoji style; # (7.0) JOYSTICK +1F587 FE0E ; text style; # (7.0) LINKED PAPERCLIPS +1F587 FE0F ; emoji style; # (7.0) LINKED PAPERCLIPS +1F58A FE0E ; text style; # (7.0) LOWER LEFT BALLPOINT PEN +1F58A FE0F ; emoji style; # (7.0) LOWER LEFT BALLPOINT PEN +1F58B FE0E ; text style; # (7.0) LOWER LEFT FOUNTAIN PEN +1F58B FE0F ; emoji style; # (7.0) LOWER LEFT FOUNTAIN PEN +1F58C FE0E ; text style; # (7.0) LOWER LEFT PAINTBRUSH +1F58C FE0F ; emoji style; # (7.0) LOWER LEFT PAINTBRUSH +1F58D FE0E ; text style; # (7.0) LOWER LEFT CRAYON +1F58D FE0F ; emoji style; # (7.0) LOWER LEFT CRAYON +1F590 FE0E ; text style; # (7.0) RAISED HAND WITH FINGERS SPLAYED +1F590 FE0F ; emoji style; # (7.0) RAISED HAND WITH FINGERS SPLAYED +1F5A5 FE0E ; text style; # (7.0) DESKTOP COMPUTER +1F5A5 FE0F ; emoji style; # (7.0) DESKTOP COMPUTER +1F5A8 FE0E ; text style; # (7.0) PRINTER +1F5A8 FE0F ; emoji style; # (7.0) PRINTER +1F5B1 FE0E ; text style; # (7.0) THREE BUTTON MOUSE +1F5B1 FE0F ; emoji style; # (7.0) THREE BUTTON MOUSE +1F5B2 FE0E ; text style; # (7.0) TRACKBALL +1F5B2 FE0F ; emoji style; # (7.0) TRACKBALL +1F5BC FE0E ; text style; # (7.0) FRAME WITH PICTURE +1F5BC FE0F ; emoji style; # (7.0) FRAME WITH PICTURE +1F5C2 FE0E ; text style; # (7.0) CARD INDEX DIVIDERS +1F5C2 FE0F ; emoji style; # (7.0) CARD INDEX DIVIDERS +1F5C3 FE0E ; text style; # (7.0) CARD FILE BOX +1F5C3 FE0F ; emoji style; # (7.0) CARD FILE BOX +1F5C4 FE0E ; text style; # (7.0) FILE CABINET +1F5C4 FE0F ; emoji style; # (7.0) FILE CABINET +1F5D1 FE0E ; text style; # (7.0) WASTEBASKET +1F5D1 FE0F ; emoji style; # (7.0) WASTEBASKET +1F5D2 FE0E ; text style; # (7.0) SPIRAL NOTE PAD +1F5D2 FE0F ; emoji style; # (7.0) SPIRAL NOTE PAD +1F5D3 FE0E ; text style; # (7.0) SPIRAL CALENDAR PAD +1F5D3 FE0F ; emoji style; # (7.0) SPIRAL CALENDAR PAD +1F5DC FE0E ; text style; # (7.0) COMPRESSION +1F5DC FE0F ; emoji style; # (7.0) COMPRESSION +1F5DD FE0E ; text style; # (7.0) OLD KEY +1F5DD FE0F ; emoji style; # (7.0) OLD KEY +1F5DE FE0E ; text style; # (7.0) ROLLED-UP NEWSPAPER +1F5DE FE0F ; emoji style; # (7.0) ROLLED-UP NEWSPAPER +1F5E1 FE0E ; text style; # (7.0) DAGGER KNIFE +1F5E1 FE0F ; emoji style; # (7.0) DAGGER KNIFE +1F5E3 FE0E ; text style; # (7.0) SPEAKING HEAD IN SILHOUETTE +1F5E3 FE0F ; emoji style; # (7.0) SPEAKING HEAD IN SILHOUETTE +1F5E8 FE0E ; text style; # (7.0) LEFT SPEECH BUBBLE +1F5E8 FE0F ; emoji style; # (7.0) LEFT SPEECH BUBBLE +1F5EF FE0E ; text style; # (7.0) RIGHT ANGER BUBBLE +1F5EF FE0F ; emoji style; # (7.0) RIGHT ANGER BUBBLE +1F5F3 FE0E ; text style; # (7.0) BALLOT BOX WITH BALLOT +1F5F3 FE0F ; emoji style; # (7.0) BALLOT BOX WITH BALLOT +1F5FA FE0E ; text style; # (7.0) WORLD MAP +1F5FA FE0F ; emoji style; # (7.0) WORLD MAP +1F610 FE0E ; text style; # (6.0) NEUTRAL FACE +1F610 FE0F ; emoji style; # (6.0) NEUTRAL FACE +1F687 FE0E ; text style; # (6.0) METRO +1F687 FE0F ; emoji style; # (6.0) METRO +1F68D FE0E ; text style; # (6.0) ONCOMING BUS +1F68D FE0F ; emoji style; # (6.0) ONCOMING BUS +1F691 FE0E ; text style; # (6.0) AMBULANCE +1F691 FE0F ; emoji style; # (6.0) AMBULANCE +1F694 FE0E ; text style; # (6.0) ONCOMING POLICE CAR +1F694 FE0F ; emoji style; # (6.0) ONCOMING POLICE CAR +1F698 FE0E ; text style; # (6.0) ONCOMING AUTOMOBILE +1F698 FE0F ; emoji style; # (6.0) ONCOMING AUTOMOBILE +1F6AD FE0E ; text style; # (6.0) NO SMOKING SYMBOL +1F6AD FE0F ; emoji style; # (6.0) NO SMOKING SYMBOL +1F6B2 FE0E ; text style; # (6.0) BICYCLE +1F6B2 FE0F ; emoji style; # (6.0) BICYCLE +1F6B9 FE0E ; text style; # (6.0) MENS SYMBOL +1F6B9 FE0F ; emoji style; # (6.0) MENS SYMBOL +1F6BA FE0E ; text style; # (6.0) WOMENS SYMBOL +1F6BA FE0F ; emoji style; # (6.0) WOMENS SYMBOL +1F6BC FE0E ; text style; # (6.0) BABY SYMBOL +1F6BC FE0F ; emoji style; # (6.0) BABY SYMBOL +1F6CB FE0E ; text style; # (7.0) COUCH AND LAMP +1F6CB FE0F ; emoji style; # (7.0) COUCH AND LAMP +1F6CD FE0E ; text style; # (7.0) SHOPPING BAGS +1F6CD FE0F ; emoji style; # (7.0) SHOPPING BAGS +1F6CE FE0E ; text style; # (7.0) BELLHOP BELL +1F6CE FE0F ; emoji style; # (7.0) BELLHOP BELL +1F6CF FE0E ; text style; # (7.0) BED +1F6CF FE0F ; emoji style; # (7.0) BED +1F6E0 FE0E ; text style; # (7.0) HAMMER AND WRENCH +1F6E0 FE0F ; emoji style; # (7.0) HAMMER AND WRENCH +1F6E1 FE0E ; text style; # (7.0) SHIELD +1F6E1 FE0F ; emoji style; # (7.0) SHIELD +1F6E2 FE0E ; text style; # (7.0) OIL DRUM +1F6E2 FE0F ; emoji style; # (7.0) OIL DRUM +1F6E3 FE0E ; text style; # (7.0) MOTORWAY +1F6E3 FE0F ; emoji style; # (7.0) MOTORWAY +1F6E4 FE0E ; text style; # (7.0) RAILWAY TRACK +1F6E4 FE0F ; emoji style; # (7.0) RAILWAY TRACK +1F6E5 FE0E ; text style; # (7.0) MOTOR BOAT +1F6E5 FE0F ; emoji style; # (7.0) MOTOR BOAT +1F6E9 FE0E ; text style; # (7.0) SMALL AIRPLANE +1F6E9 FE0F ; emoji style; # (7.0) SMALL AIRPLANE +1F6F0 FE0E ; text style; # (7.0) SATELLITE +1F6F0 FE0F ; emoji style; # (7.0) SATELLITE +1F6F3 FE0E ; text style; # (7.0) PASSENGER SHIP +1F6F3 FE0F ; emoji style; # (7.0) PASSENGER SHIP + +#Total sequences: 371 + +#EOF diff --git a/internal/gen/trie.go b/internal/gen/trie.go index 484bdab..c2b173e 100644 --- a/internal/gen/trie.go +++ b/internal/gen/trie.go @@ -101,7 +101,7 @@ func WriteTrieGo(trie *triegen.Trie, outputPath string) error { // writeProperties writes the character properties definitions to the buffer. // It uses PropertyDefinitions from unicode.go as the single source of truth. func writeProperties(w io.Writer) { - fmt.Fprintf(w, "// property is an enum representing the properties of a character\n") + fmt.Fprintf(w, "// property is a bitmap representing the properties of a character\n") fmt.Fprintf(w, "type property uint8\n\n") fmt.Fprintf(w, "const (\n") @@ -110,7 +110,7 @@ func writeProperties(w io.Writer) { constName := "_" + prop.Name if i == 0 { - fmt.Fprintf(w, "%s property = iota + 1\n", constName) + fmt.Fprintf(w, "%s property = 1 << iota\n", constName) } else { fmt.Fprintf(w, "%s\n", constName) } diff --git a/internal/gen/unicode.go b/internal/gen/unicode.go index 59d1e32..6c9630c 100644 --- a/internal/gen/unicode.go +++ b/internal/gen/unicode.go @@ -18,6 +18,7 @@ type UnicodeData struct { EastAsianWidth map[rune]string // From EastAsianWidth.txt ExtendedPictographic map[rune]bool // From emoji-data.txt (Extended_Pictographic property) EmojiPresentation map[rune]bool // From emoji-data.txt (Emoji_Presentation property) + VS16Eligible map[rune]bool // From emoji-variation-sequences.txt (base chars with valid FE0F sequence) RegionalIndicator map[rune]bool // From emoji-data.txt (Regional Indicator symbols, range 1F1E6..1F1FF) ControlChars map[rune]bool // From Go stdlib CombiningMarks map[rune]bool // From Go stdlib (Mn, Me only - Mc excluded for proper width) @@ -39,17 +40,20 @@ var PropertyDefinitions = []PropertyDefinition{ {"Zero_Width", "Always 0 width, includes combining marks, control characters, non-printable, etc"}, {"Wide", "Always 2 wide (East Asian Wide F/W, Emoji, Regional Indicator)"}, {"East_Asian_Ambiguous", "Width depends on EastAsianWidth option"}, + {"VS16_Eligible", "Default width 1, but FE0F (VS16) requests emoji presentation (width 2)"}, } // these constants are used to build the property bitmap, internally. // the external properties are above. Keep them in the same order! const ( // ZWSP, ZWJ, ZWNJ, etc. - zero_Width property = iota + 1 + zero_Width property = 1 << iota // F, W (East Asian Wide), Emoji, Regional Indicator wide // A (East Asian Ambiguous) east_Asian_Ambiguous + // Valid base for emoji variation sequence with VS16 (FE0F) + vs16_Eligible ) // ParseUnicodeData downloads and parses all required Unicode data files @@ -58,6 +62,7 @@ func ParseUnicodeData() (*UnicodeData, error) { EastAsianWidth: make(map[rune]string), ExtendedPictographic: make(map[rune]bool), EmojiPresentation: make(map[rune]bool), + VS16Eligible: make(map[rune]bool), RegionalIndicator: make(map[rune]bool), ControlChars: make(map[rune]bool), CombiningMarks: make(map[rune]bool), @@ -91,6 +96,17 @@ func ParseUnicodeData() (*UnicodeData, error) { } } + variationFile := filepath.Join(dataDir, "emoji-variation-sequences.txt") + if err := downloadFile(fmt.Sprintf("https://unicode.org/Public/%s/ucd/emoji/emoji-variation-sequences.txt", unicodeVersion), variationFile); err != nil { + fmt.Printf("Warning: failed to download emoji-variation-sequences.txt: %v\n", err) + fmt.Println("Continuing without VS16 eligibility data...") + } else { + if err := parseEmojiVariationSequences(variationFile, data); err != nil { + fmt.Printf("Warning: failed to parse emoji-variation-sequences.txt: %v\n", err) + fmt.Println("Continuing without VS16 eligibility data...") + } + } + extractStdlibData(data) return data, nil @@ -277,6 +293,52 @@ func parseEmojiData(filename string, data *UnicodeData) error { return scanner.Err() } +// parseEmojiVariationSequences parses emoji-variation-sequences.txt and marks +// bases that have a valid emoji presentation sequence (base + FE0F). +func parseEmojiVariationSequences(filename string, data *UnicodeData) error { + file, err := os.Open(filename) + if err != nil { + return err + } + defer file.Close() + + scanner := bufio.NewScanner(file) + for scanner.Scan() { + line := strings.TrimSpace(scanner.Text()) + if line == "" || strings.HasPrefix(line, "#") { + continue + } + + parts := strings.Split(line, ";") + if len(parts) < 2 { + continue + } + + seq := strings.TrimSpace(parts[0]) + fields := strings.Fields(seq) + if len(fields) != 2 { + continue + } + + base, err := strconv.ParseInt(fields[0], 16, 32) + if err != nil { + continue + } + vs, err := strconv.ParseInt(fields[1], 16, 32) + if err != nil { + continue + } + + if rune(vs) != 0xFE0F { + continue + } + + data.VS16Eligible[rune(base)] = true + } + + return scanner.Err() +} + // extractStdlibData extracts character properties from Go's unicode package func extractStdlibData(data *UnicodeData) { // Extract control characters @@ -327,6 +389,8 @@ func extractRunesFromRangeTable(table *unicode.RangeTable, target map[rune]bool) } func buildPropertyBitmap(r rune, data *UnicodeData) property { + var props property + if data.CombiningMarks[r] { return zero_Width } @@ -345,23 +409,27 @@ func buildPropertyBitmap(r rune, data *UnicodeData) property { // Check for Regional Indicator before emoji if data.RegionalIndicator[r] { - return wide + props |= wide } if data.ExtendedPictographic[r] && data.EmojiPresentation[r] { - return wide + props |= wide + } + + if data.VS16Eligible[r] { + props |= vs16_Eligible } if eaw, exists := data.EastAsianWidth[r]; exists { switch eaw { case "F", "W": - return wide + props |= wide case "A": - return east_Asian_Ambiguous + props |= east_Asian_Ambiguous // H (Halfwidth), Na (Narrow), and N (Neutral) are not stored // as they all result in width 1 (default behavior) } } - return 0 + return props } diff --git a/trie.go b/trie.go index 1d3a983..d4df5ba 100644 --- a/trie.go +++ b/trie.go @@ -2,16 +2,18 @@ package displaywidth -// property is an enum representing the properties of a character +// property is a bitmap representing the properties of a character type property uint8 const ( // Always 0 width, includes combining marks, control characters, non-printable, etc - _Zero_Width property = iota + 1 + _Zero_Width property = 1 << iota // Always 2 wide (East Asian Wide F/W, Emoji, Regional Indicator) _Wide // Width depends on EastAsianWidth option _East_Asian_Ambiguous + // Default width 1, but FE0F (VS16) requests emoji presentation (width 2) + _VS16_Eligible ) // lookup returns the trie value for the first UTF-8 encoding in s and @@ -77,7 +79,7 @@ func lookup[T ~string | []byte](s T) (v uint8, sz int) { return 0, 1 } -// stringWidthTrie. Total size: 17664 bytes (17.25 KiB). Checksum: 220983462f26d765. +// stringWidthTrie. Total size: 18048 bytes (17.62 KiB). Checksum: 64ceb85d20dfc9f7. // type stringWidthTrie struct { } // func newStringWidthTrie(i int) *stringWidthTrie { @@ -92,10 +94,14 @@ func lookupValue(n uint32, b byte) uint8 { } } -// stringWidthValues: 246 blocks, 15744 entries, 15744 bytes +// stringWidthValues: 252 blocks, 16128 entries, 16128 bytes // The third block is the zero block. -var stringWidthValues = [15744]uint8{ +var stringWidthValues = [16128]uint8{ // Block 0x0, offset 0x0 + 0x23: 0x0008, + 0x2a: 0x0008, + 0x30: 0x0008, 0x31: 0x0008, 0x32: 0x0008, 0x33: 0x0008, 0x34: 0x0008, 0x35: 0x0008, + 0x36: 0x0008, 0x37: 0x0008, 0x38: 0x0008, 0x39: 0x0008, // Block 0x1, offset 0x40 // Block 0x2, offset 0x80 // Block 0x3, offset 0xc0 @@ -104,53 +110,53 @@ var stringWidthValues = [15744]uint8{ 0xcc: 0x0001, 0xcd: 0x0001, 0xce: 0x0001, 0xcf: 0x0001, 0xd0: 0x0001, 0xd1: 0x0001, 0xd2: 0x0001, 0xd3: 0x0001, 0xd4: 0x0001, 0xd5: 0x0001, 0xd6: 0x0001, 0xd7: 0x0001, 0xd8: 0x0001, 0xd9: 0x0001, 0xda: 0x0001, 0xdb: 0x0001, 0xdc: 0x0001, 0xdd: 0x0001, - 0xde: 0x0001, 0xdf: 0x0001, 0xe1: 0x0003, - 0xe4: 0x0003, 0xe7: 0x0003, 0xe8: 0x0003, - 0xea: 0x0003, 0xed: 0x0001, 0xee: 0x0003, - 0xf0: 0x0003, 0xf1: 0x0003, 0xf2: 0x0003, 0xf3: 0x0003, 0xf4: 0x0003, - 0xf6: 0x0003, 0xf7: 0x0003, 0xf8: 0x0003, 0xf9: 0x0003, 0xfa: 0x0003, - 0xfc: 0x0003, 0xfd: 0x0003, 0xfe: 0x0003, 0xff: 0x0003, + 0xde: 0x0001, 0xdf: 0x0001, 0xe1: 0x0004, + 0xe4: 0x0004, 0xe7: 0x0004, 0xe8: 0x0004, 0xe9: 0x0008, + 0xea: 0x0004, 0xed: 0x0001, 0xee: 0x000c, + 0xf0: 0x0004, 0xf1: 0x0004, 0xf2: 0x0004, 0xf3: 0x0004, 0xf4: 0x0004, + 0xf6: 0x0004, 0xf7: 0x0004, 0xf8: 0x0004, 0xf9: 0x0004, 0xfa: 0x0004, + 0xfc: 0x0004, 0xfd: 0x0004, 0xfe: 0x0004, 0xff: 0x0004, // Block 0x4, offset 0x100 - 0x106: 0x0003, - 0x110: 0x0003, - 0x117: 0x0003, - 0x118: 0x0003, - 0x11e: 0x0003, 0x11f: 0x0003, 0x120: 0x0003, 0x121: 0x0003, - 0x126: 0x0003, 0x128: 0x0003, 0x129: 0x0003, - 0x12a: 0x0003, 0x12c: 0x0003, 0x12d: 0x0003, - 0x130: 0x0003, 0x132: 0x0003, 0x133: 0x0003, - 0x137: 0x0003, 0x138: 0x0003, 0x139: 0x0003, 0x13a: 0x0003, - 0x13c: 0x0003, 0x13e: 0x0003, + 0x106: 0x0004, + 0x110: 0x0004, + 0x117: 0x0004, + 0x118: 0x0004, + 0x11e: 0x0004, 0x11f: 0x0004, 0x120: 0x0004, 0x121: 0x0004, + 0x126: 0x0004, 0x128: 0x0004, 0x129: 0x0004, + 0x12a: 0x0004, 0x12c: 0x0004, 0x12d: 0x0004, + 0x130: 0x0004, 0x132: 0x0004, 0x133: 0x0004, + 0x137: 0x0004, 0x138: 0x0004, 0x139: 0x0004, 0x13a: 0x0004, + 0x13c: 0x0004, 0x13e: 0x0004, // Block 0x5, offset 0x140 - 0x141: 0x0003, - 0x151: 0x0003, - 0x153: 0x0003, - 0x15b: 0x0003, - 0x166: 0x0003, 0x167: 0x0003, - 0x16b: 0x0003, - 0x171: 0x0003, 0x172: 0x0003, 0x173: 0x0003, - 0x178: 0x0003, - 0x17f: 0x0003, + 0x141: 0x0004, + 0x151: 0x0004, + 0x153: 0x0004, + 0x15b: 0x0004, + 0x166: 0x0004, 0x167: 0x0004, + 0x16b: 0x0004, + 0x171: 0x0004, 0x172: 0x0004, 0x173: 0x0004, + 0x178: 0x0004, + 0x17f: 0x0004, // Block 0x6, offset 0x180 - 0x180: 0x0003, 0x181: 0x0003, 0x182: 0x0003, 0x184: 0x0003, - 0x188: 0x0003, 0x189: 0x0003, 0x18a: 0x0003, 0x18b: 0x0003, - 0x18d: 0x0003, - 0x192: 0x0003, 0x193: 0x0003, - 0x1a6: 0x0003, 0x1a7: 0x0003, - 0x1ab: 0x0003, + 0x180: 0x0004, 0x181: 0x0004, 0x182: 0x0004, 0x184: 0x0004, + 0x188: 0x0004, 0x189: 0x0004, 0x18a: 0x0004, 0x18b: 0x0004, + 0x18d: 0x0004, + 0x192: 0x0004, 0x193: 0x0004, + 0x1a6: 0x0004, 0x1a7: 0x0004, + 0x1ab: 0x0004, // Block 0x7, offset 0x1c0 - 0x1ce: 0x0003, 0x1d0: 0x0003, - 0x1d2: 0x0003, 0x1d4: 0x0003, 0x1d6: 0x0003, - 0x1d8: 0x0003, 0x1da: 0x0003, 0x1dc: 0x0003, + 0x1ce: 0x0004, 0x1d0: 0x0004, + 0x1d2: 0x0004, 0x1d4: 0x0004, 0x1d6: 0x0004, + 0x1d8: 0x0004, 0x1da: 0x0004, 0x1dc: 0x0004, // Block 0x8, offset 0x200 - 0x211: 0x0003, - 0x221: 0x0003, + 0x211: 0x0004, + 0x221: 0x0004, // Block 0x9, offset 0x240 - 0x244: 0x0003, - 0x247: 0x0003, 0x249: 0x0003, 0x24a: 0x0003, 0x24b: 0x0003, - 0x24d: 0x0003, 0x250: 0x0003, - 0x258: 0x0003, 0x259: 0x0003, 0x25a: 0x0003, 0x25b: 0x0003, 0x25d: 0x0003, - 0x25f: 0x0003, + 0x244: 0x0004, + 0x247: 0x0004, 0x249: 0x0004, 0x24a: 0x0004, 0x24b: 0x0004, + 0x24d: 0x0004, 0x250: 0x0004, + 0x258: 0x0004, 0x259: 0x0004, 0x25a: 0x0004, 0x25b: 0x0004, 0x25d: 0x0004, + 0x25f: 0x0004, // Block 0xa, offset 0x280 0x280: 0x0001, 0x281: 0x0001, 0x282: 0x0001, 0x283: 0x0001, 0x284: 0x0001, 0x285: 0x0001, 0x286: 0x0001, 0x287: 0x0001, 0x288: 0x0001, 0x289: 0x0001, 0x28a: 0x0001, 0x28b: 0x0001, @@ -173,32 +179,32 @@ var stringWidthValues = [15744]uint8{ 0x2e4: 0x0001, 0x2e5: 0x0001, 0x2e6: 0x0001, 0x2e7: 0x0001, 0x2e8: 0x0001, 0x2e9: 0x0001, 0x2ea: 0x0001, 0x2eb: 0x0001, 0x2ec: 0x0001, 0x2ed: 0x0001, 0x2ee: 0x0001, 0x2ef: 0x0001, // Block 0xc, offset 0x300 - 0x311: 0x0003, - 0x312: 0x0003, 0x313: 0x0003, 0x314: 0x0003, 0x315: 0x0003, 0x316: 0x0003, 0x317: 0x0003, - 0x318: 0x0003, 0x319: 0x0003, 0x31a: 0x0003, 0x31b: 0x0003, 0x31c: 0x0003, 0x31d: 0x0003, - 0x31e: 0x0003, 0x31f: 0x0003, 0x320: 0x0003, 0x321: 0x0003, 0x323: 0x0003, - 0x324: 0x0003, 0x325: 0x0003, 0x326: 0x0003, 0x327: 0x0003, 0x328: 0x0003, 0x329: 0x0003, - 0x331: 0x0003, 0x332: 0x0003, 0x333: 0x0003, 0x334: 0x0003, 0x335: 0x0003, - 0x336: 0x0003, 0x337: 0x0003, 0x338: 0x0003, 0x339: 0x0003, 0x33a: 0x0003, 0x33b: 0x0003, - 0x33c: 0x0003, 0x33d: 0x0003, 0x33e: 0x0003, 0x33f: 0x0003, + 0x311: 0x0004, + 0x312: 0x0004, 0x313: 0x0004, 0x314: 0x0004, 0x315: 0x0004, 0x316: 0x0004, 0x317: 0x0004, + 0x318: 0x0004, 0x319: 0x0004, 0x31a: 0x0004, 0x31b: 0x0004, 0x31c: 0x0004, 0x31d: 0x0004, + 0x31e: 0x0004, 0x31f: 0x0004, 0x320: 0x0004, 0x321: 0x0004, 0x323: 0x0004, + 0x324: 0x0004, 0x325: 0x0004, 0x326: 0x0004, 0x327: 0x0004, 0x328: 0x0004, 0x329: 0x0004, + 0x331: 0x0004, 0x332: 0x0004, 0x333: 0x0004, 0x334: 0x0004, 0x335: 0x0004, + 0x336: 0x0004, 0x337: 0x0004, 0x338: 0x0004, 0x339: 0x0004, 0x33a: 0x0004, 0x33b: 0x0004, + 0x33c: 0x0004, 0x33d: 0x0004, 0x33e: 0x0004, 0x33f: 0x0004, // Block 0xd, offset 0x340 - 0x340: 0x0003, 0x341: 0x0003, 0x343: 0x0003, 0x344: 0x0003, 0x345: 0x0003, - 0x346: 0x0003, 0x347: 0x0003, 0x348: 0x0003, 0x349: 0x0003, + 0x340: 0x0004, 0x341: 0x0004, 0x343: 0x0004, 0x344: 0x0004, 0x345: 0x0004, + 0x346: 0x0004, 0x347: 0x0004, 0x348: 0x0004, 0x349: 0x0004, // Block 0xe, offset 0x380 - 0x381: 0x0003, - 0x390: 0x0003, 0x391: 0x0003, - 0x392: 0x0003, 0x393: 0x0003, 0x394: 0x0003, 0x395: 0x0003, 0x396: 0x0003, 0x397: 0x0003, - 0x398: 0x0003, 0x399: 0x0003, 0x39a: 0x0003, 0x39b: 0x0003, 0x39c: 0x0003, 0x39d: 0x0003, - 0x39e: 0x0003, 0x39f: 0x0003, 0x3a0: 0x0003, 0x3a1: 0x0003, 0x3a2: 0x0003, 0x3a3: 0x0003, - 0x3a4: 0x0003, 0x3a5: 0x0003, 0x3a6: 0x0003, 0x3a7: 0x0003, 0x3a8: 0x0003, 0x3a9: 0x0003, - 0x3aa: 0x0003, 0x3ab: 0x0003, 0x3ac: 0x0003, 0x3ad: 0x0003, 0x3ae: 0x0003, 0x3af: 0x0003, - 0x3b0: 0x0003, 0x3b1: 0x0003, 0x3b2: 0x0003, 0x3b3: 0x0003, 0x3b4: 0x0003, 0x3b5: 0x0003, - 0x3b6: 0x0003, 0x3b7: 0x0003, 0x3b8: 0x0003, 0x3b9: 0x0003, 0x3ba: 0x0003, 0x3bb: 0x0003, - 0x3bc: 0x0003, 0x3bd: 0x0003, 0x3be: 0x0003, 0x3bf: 0x0003, + 0x381: 0x0004, + 0x390: 0x0004, 0x391: 0x0004, + 0x392: 0x0004, 0x393: 0x0004, 0x394: 0x0004, 0x395: 0x0004, 0x396: 0x0004, 0x397: 0x0004, + 0x398: 0x0004, 0x399: 0x0004, 0x39a: 0x0004, 0x39b: 0x0004, 0x39c: 0x0004, 0x39d: 0x0004, + 0x39e: 0x0004, 0x39f: 0x0004, 0x3a0: 0x0004, 0x3a1: 0x0004, 0x3a2: 0x0004, 0x3a3: 0x0004, + 0x3a4: 0x0004, 0x3a5: 0x0004, 0x3a6: 0x0004, 0x3a7: 0x0004, 0x3a8: 0x0004, 0x3a9: 0x0004, + 0x3aa: 0x0004, 0x3ab: 0x0004, 0x3ac: 0x0004, 0x3ad: 0x0004, 0x3ae: 0x0004, 0x3af: 0x0004, + 0x3b0: 0x0004, 0x3b1: 0x0004, 0x3b2: 0x0004, 0x3b3: 0x0004, 0x3b4: 0x0004, 0x3b5: 0x0004, + 0x3b6: 0x0004, 0x3b7: 0x0004, 0x3b8: 0x0004, 0x3b9: 0x0004, 0x3ba: 0x0004, 0x3bb: 0x0004, + 0x3bc: 0x0004, 0x3bd: 0x0004, 0x3be: 0x0004, 0x3bf: 0x0004, // Block 0xf, offset 0x3c0 - 0x3c0: 0x0003, 0x3c1: 0x0003, 0x3c2: 0x0003, 0x3c3: 0x0003, 0x3c4: 0x0003, 0x3c5: 0x0003, - 0x3c6: 0x0003, 0x3c7: 0x0003, 0x3c8: 0x0003, 0x3c9: 0x0003, 0x3ca: 0x0003, 0x3cb: 0x0003, - 0x3cc: 0x0003, 0x3cd: 0x0003, 0x3ce: 0x0003, 0x3cf: 0x0003, 0x3d1: 0x0003, + 0x3c0: 0x0004, 0x3c1: 0x0004, 0x3c2: 0x0004, 0x3c3: 0x0004, 0x3c4: 0x0004, 0x3c5: 0x0004, + 0x3c6: 0x0004, 0x3c7: 0x0004, 0x3c8: 0x0004, 0x3c9: 0x0004, 0x3ca: 0x0004, 0x3cb: 0x0004, + 0x3cc: 0x0004, 0x3cd: 0x0004, 0x3ce: 0x0004, 0x3cf: 0x0004, 0x3d1: 0x0004, // Block 0x10, offset 0x400 0x403: 0x0001, 0x404: 0x0001, 0x405: 0x0001, 0x406: 0x0001, 0x407: 0x0001, 0x408: 0x0001, 0x409: 0x0001, @@ -495,24 +501,25 @@ var stringWidthValues = [15744]uint8{ 0x13b8: 0x0001, 0x13b9: 0x0001, // Block 0x4f, offset 0x13c0 0x13cb: 0x0001, - 0x13cc: 0x0001, 0x13cd: 0x0001, 0x13ce: 0x0001, 0x13cf: 0x0001, 0x13d0: 0x0003, - 0x13d3: 0x0003, 0x13d4: 0x0003, 0x13d5: 0x0003, 0x13d6: 0x0003, - 0x13d8: 0x0003, 0x13d9: 0x0003, 0x13dc: 0x0003, 0x13dd: 0x0003, - 0x13e0: 0x0003, 0x13e1: 0x0003, 0x13e2: 0x0003, - 0x13e4: 0x0003, 0x13e5: 0x0003, 0x13e6: 0x0003, 0x13e7: 0x0003, 0x13e8: 0x0001, 0x13e9: 0x0001, + 0x13cc: 0x0001, 0x13cd: 0x0001, 0x13ce: 0x0001, 0x13cf: 0x0001, 0x13d0: 0x0004, + 0x13d3: 0x0004, 0x13d4: 0x0004, 0x13d5: 0x0004, 0x13d6: 0x0004, + 0x13d8: 0x0004, 0x13d9: 0x0004, 0x13dc: 0x0004, 0x13dd: 0x0004, + 0x13e0: 0x0004, 0x13e1: 0x0004, 0x13e2: 0x0004, + 0x13e4: 0x0004, 0x13e5: 0x0004, 0x13e6: 0x0004, 0x13e7: 0x0004, 0x13e8: 0x0001, 0x13e9: 0x0001, 0x13ea: 0x0001, 0x13eb: 0x0001, 0x13ec: 0x0001, 0x13ed: 0x0001, 0x13ee: 0x0001, - 0x13f0: 0x0003, 0x13f2: 0x0003, 0x13f3: 0x0003, 0x13f5: 0x0003, - 0x13fb: 0x0003, - 0x13fe: 0x0003, + 0x13f0: 0x0004, 0x13f2: 0x0004, 0x13f3: 0x0004, 0x13f5: 0x0004, + 0x13fb: 0x0004, + 0x13fc: 0x0008, 0x13fe: 0x0004, // Block 0x50, offset 0x1400 + 0x1409: 0x0008, 0x1420: 0x0001, 0x1421: 0x0001, 0x1422: 0x0001, 0x1423: 0x0001, 0x1424: 0x0001, 0x1426: 0x0001, 0x1427: 0x0001, 0x1428: 0x0001, 0x1429: 0x0001, 0x142a: 0x0001, 0x142b: 0x0001, 0x142c: 0x0001, 0x142d: 0x0001, 0x142e: 0x0001, 0x142f: 0x0001, - 0x1434: 0x0003, - 0x143f: 0x0003, + 0x1434: 0x0004, + 0x143f: 0x0004, // Block 0x51, offset 0x1440 - 0x1441: 0x0003, 0x1442: 0x0003, 0x1443: 0x0003, 0x1444: 0x0003, - 0x146c: 0x0003, + 0x1441: 0x0004, 0x1442: 0x0004, 0x1443: 0x0004, 0x1444: 0x0004, + 0x146c: 0x0004, // Block 0x52, offset 0x1480 0x1490: 0x0001, 0x1491: 0x0001, 0x1492: 0x0001, 0x1493: 0x0001, 0x1494: 0x0001, 0x1495: 0x0001, 0x1496: 0x0001, 0x1497: 0x0001, @@ -522,252 +529,267 @@ var stringWidthValues = [15744]uint8{ 0x14aa: 0x0001, 0x14ab: 0x0001, 0x14ac: 0x0001, 0x14ad: 0x0001, 0x14ae: 0x0001, 0x14af: 0x0001, 0x14b0: 0x0001, // Block 0x53, offset 0x14c0 - 0x14c3: 0x0003, 0x14c5: 0x0003, - 0x14c9: 0x0003, - 0x14d3: 0x0003, 0x14d6: 0x0003, - 0x14e1: 0x0003, 0x14e2: 0x0003, - 0x14e6: 0x0003, - 0x14eb: 0x0003, + 0x14c3: 0x0004, 0x14c5: 0x0004, + 0x14c9: 0x0004, + 0x14d3: 0x0004, 0x14d6: 0x0004, + 0x14e1: 0x0004, 0x14e2: 0x000c, + 0x14e6: 0x0004, + 0x14eb: 0x0004, + 0x14f9: 0x0008, // Block 0x54, offset 0x1500 - 0x1513: 0x0003, 0x1514: 0x0003, - 0x151b: 0x0003, 0x151c: 0x0003, 0x151d: 0x0003, - 0x151e: 0x0003, 0x1520: 0x0003, 0x1521: 0x0003, 0x1522: 0x0003, 0x1523: 0x0003, - 0x1524: 0x0003, 0x1525: 0x0003, 0x1526: 0x0003, 0x1527: 0x0003, 0x1528: 0x0003, 0x1529: 0x0003, - 0x152a: 0x0003, 0x152b: 0x0003, - 0x1530: 0x0003, 0x1531: 0x0003, 0x1532: 0x0003, 0x1533: 0x0003, 0x1534: 0x0003, 0x1535: 0x0003, - 0x1536: 0x0003, 0x1537: 0x0003, 0x1538: 0x0003, 0x1539: 0x0003, + 0x1513: 0x0004, 0x1514: 0x0004, + 0x151b: 0x0004, 0x151c: 0x0004, 0x151d: 0x0004, + 0x151e: 0x0004, 0x1520: 0x0004, 0x1521: 0x0004, 0x1522: 0x0004, 0x1523: 0x0004, + 0x1524: 0x0004, 0x1525: 0x0004, 0x1526: 0x0004, 0x1527: 0x0004, 0x1528: 0x0004, 0x1529: 0x0004, + 0x152a: 0x0004, 0x152b: 0x0004, + 0x1530: 0x0004, 0x1531: 0x0004, 0x1532: 0x0004, 0x1533: 0x0004, 0x1534: 0x0004, 0x1535: 0x0004, + 0x1536: 0x0004, 0x1537: 0x0004, 0x1538: 0x0004, 0x1539: 0x0004, // Block 0x55, offset 0x1540 - 0x1549: 0x0003, - 0x1550: 0x0003, 0x1551: 0x0003, - 0x1552: 0x0003, 0x1553: 0x0003, 0x1554: 0x0003, 0x1555: 0x0003, 0x1556: 0x0003, 0x1557: 0x0003, - 0x1558: 0x0003, 0x1559: 0x0003, - 0x1578: 0x0003, 0x1579: 0x0003, + 0x1549: 0x0004, + 0x1550: 0x0004, 0x1551: 0x0004, + 0x1552: 0x0004, 0x1553: 0x0004, 0x1554: 0x000c, 0x1555: 0x000c, 0x1556: 0x000c, 0x1557: 0x000c, + 0x1558: 0x000c, 0x1559: 0x000c, + 0x1569: 0x0008, + 0x156a: 0x0008, + 0x1578: 0x0004, 0x1579: 0x0004, // Block 0x56, offset 0x1580 - 0x1592: 0x0003, 0x1594: 0x0003, - 0x15a7: 0x0003, + 0x1592: 0x0004, 0x1594: 0x0004, + 0x15a7: 0x0004, // Block 0x57, offset 0x15c0 - 0x15c0: 0x0003, 0x15c2: 0x0003, 0x15c3: 0x0003, - 0x15c7: 0x0003, 0x15c8: 0x0003, 0x15cb: 0x0003, - 0x15cf: 0x0003, 0x15d1: 0x0003, - 0x15d5: 0x0003, - 0x15da: 0x0003, 0x15dd: 0x0003, - 0x15de: 0x0003, 0x15df: 0x0003, 0x15e0: 0x0003, 0x15e3: 0x0003, - 0x15e5: 0x0003, 0x15e7: 0x0003, 0x15e8: 0x0003, 0x15e9: 0x0003, - 0x15ea: 0x0003, 0x15eb: 0x0003, 0x15ec: 0x0003, 0x15ee: 0x0003, - 0x15f4: 0x0003, 0x15f5: 0x0003, - 0x15f6: 0x0003, 0x15f7: 0x0003, - 0x15fc: 0x0003, 0x15fd: 0x0003, + 0x15c0: 0x0004, 0x15c2: 0x0004, 0x15c3: 0x0004, + 0x15c7: 0x0004, 0x15c8: 0x0004, 0x15cb: 0x0004, + 0x15cf: 0x0004, 0x15d1: 0x0004, + 0x15d5: 0x0004, + 0x15da: 0x0004, 0x15dd: 0x0004, + 0x15de: 0x0004, 0x15df: 0x0004, 0x15e0: 0x0004, 0x15e3: 0x0004, + 0x15e5: 0x0004, 0x15e7: 0x0004, 0x15e8: 0x0004, 0x15e9: 0x0004, + 0x15ea: 0x0004, 0x15eb: 0x0004, 0x15ec: 0x0004, 0x15ee: 0x0004, + 0x15f4: 0x0004, 0x15f5: 0x0004, + 0x15f6: 0x0004, 0x15f7: 0x0004, + 0x15fc: 0x0004, 0x15fd: 0x0004, // Block 0x58, offset 0x1600 - 0x1608: 0x0003, - 0x160c: 0x0003, - 0x1612: 0x0003, - 0x1620: 0x0003, 0x1621: 0x0003, - 0x1624: 0x0003, 0x1625: 0x0003, 0x1626: 0x0003, 0x1627: 0x0003, - 0x162a: 0x0003, 0x162b: 0x0003, 0x162e: 0x0003, 0x162f: 0x0003, + 0x1608: 0x0004, + 0x160c: 0x0004, + 0x1612: 0x0004, + 0x1620: 0x0004, 0x1621: 0x0004, + 0x1624: 0x0004, 0x1625: 0x0004, 0x1626: 0x0004, 0x1627: 0x0004, + 0x162a: 0x0004, 0x162b: 0x0004, 0x162e: 0x0004, 0x162f: 0x0004, // Block 0x59, offset 0x1640 - 0x1642: 0x0003, 0x1643: 0x0003, - 0x1646: 0x0003, 0x1647: 0x0003, - 0x1655: 0x0003, - 0x1659: 0x0003, - 0x1665: 0x0003, - 0x167f: 0x0003, + 0x1642: 0x0004, 0x1643: 0x0004, + 0x1646: 0x0004, 0x1647: 0x0004, + 0x1655: 0x0004, + 0x1659: 0x0004, + 0x1665: 0x0004, + 0x167f: 0x0004, // Block 0x5a, offset 0x1680 - 0x1692: 0x0003, - 0x169a: 0x0002, 0x169b: 0x0002, - 0x16a9: 0x0002, + 0x1692: 0x0004, + 0x169a: 0x000a, 0x169b: 0x000a, + 0x16a8: 0x0008, 0x16a9: 0x0002, 0x16aa: 0x0002, // Block 0x5b, offset 0x16c0 - 0x16e9: 0x0002, - 0x16ea: 0x0002, 0x16eb: 0x0002, 0x16ec: 0x0002, - 0x16f0: 0x0002, 0x16f3: 0x0002, + 0x16cf: 0x0008, + 0x16e9: 0x000a, + 0x16ea: 0x000a, 0x16eb: 0x000a, 0x16ec: 0x000a, 0x16ed: 0x0008, 0x16ee: 0x0008, 0x16ef: 0x0008, + 0x16f0: 0x000a, 0x16f1: 0x0008, 0x16f2: 0x0008, 0x16f3: 0x000a, + 0x16f8: 0x0008, 0x16f9: 0x0008, 0x16fa: 0x0008, // Block 0x5c, offset 0x1700 - 0x1720: 0x0003, 0x1721: 0x0003, 0x1722: 0x0003, 0x1723: 0x0003, - 0x1724: 0x0003, 0x1725: 0x0003, 0x1726: 0x0003, 0x1727: 0x0003, 0x1728: 0x0003, 0x1729: 0x0003, - 0x172a: 0x0003, 0x172b: 0x0003, 0x172c: 0x0003, 0x172d: 0x0003, 0x172e: 0x0003, 0x172f: 0x0003, - 0x1730: 0x0003, 0x1731: 0x0003, 0x1732: 0x0003, 0x1733: 0x0003, 0x1734: 0x0003, 0x1735: 0x0003, - 0x1736: 0x0003, 0x1737: 0x0003, 0x1738: 0x0003, 0x1739: 0x0003, 0x173a: 0x0003, 0x173b: 0x0003, - 0x173c: 0x0003, 0x173d: 0x0003, 0x173e: 0x0003, 0x173f: 0x0003, + 0x1720: 0x0004, 0x1721: 0x0004, 0x1722: 0x0004, 0x1723: 0x0004, + 0x1724: 0x0004, 0x1725: 0x0004, 0x1726: 0x0004, 0x1727: 0x0004, 0x1728: 0x0004, 0x1729: 0x0004, + 0x172a: 0x0004, 0x172b: 0x0004, 0x172c: 0x0004, 0x172d: 0x0004, 0x172e: 0x0004, 0x172f: 0x0004, + 0x1730: 0x0004, 0x1731: 0x0004, 0x1732: 0x0004, 0x1733: 0x0004, 0x1734: 0x0004, 0x1735: 0x0004, + 0x1736: 0x0004, 0x1737: 0x0004, 0x1738: 0x0004, 0x1739: 0x0004, 0x173a: 0x0004, 0x173b: 0x0004, + 0x173c: 0x0004, 0x173d: 0x0004, 0x173e: 0x0004, 0x173f: 0x0004, // Block 0x5d, offset 0x1740 - 0x1740: 0x0003, 0x1741: 0x0003, 0x1742: 0x0003, 0x1743: 0x0003, 0x1744: 0x0003, 0x1745: 0x0003, - 0x1746: 0x0003, 0x1747: 0x0003, 0x1748: 0x0003, 0x1749: 0x0003, 0x174a: 0x0003, 0x174b: 0x0003, - 0x174c: 0x0003, 0x174d: 0x0003, 0x174e: 0x0003, 0x174f: 0x0003, 0x1750: 0x0003, 0x1751: 0x0003, - 0x1752: 0x0003, 0x1753: 0x0003, 0x1754: 0x0003, 0x1755: 0x0003, 0x1756: 0x0003, 0x1757: 0x0003, - 0x1758: 0x0003, 0x1759: 0x0003, 0x175a: 0x0003, 0x175b: 0x0003, 0x175c: 0x0003, 0x175d: 0x0003, - 0x175e: 0x0003, 0x175f: 0x0003, 0x1760: 0x0003, 0x1761: 0x0003, 0x1762: 0x0003, 0x1763: 0x0003, - 0x1764: 0x0003, 0x1765: 0x0003, 0x1766: 0x0003, 0x1767: 0x0003, 0x1768: 0x0003, 0x1769: 0x0003, - 0x176a: 0x0003, 0x176b: 0x0003, 0x176c: 0x0003, 0x176d: 0x0003, 0x176e: 0x0003, 0x176f: 0x0003, - 0x1770: 0x0003, 0x1771: 0x0003, 0x1772: 0x0003, 0x1773: 0x0003, 0x1774: 0x0003, 0x1775: 0x0003, - 0x1776: 0x0003, 0x1777: 0x0003, 0x1778: 0x0003, 0x1779: 0x0003, 0x177a: 0x0003, 0x177b: 0x0003, - 0x177c: 0x0003, 0x177d: 0x0003, 0x177e: 0x0003, 0x177f: 0x0003, + 0x1740: 0x0004, 0x1741: 0x0004, 0x1742: 0x0004, 0x1743: 0x0004, 0x1744: 0x0004, 0x1745: 0x0004, + 0x1746: 0x0004, 0x1747: 0x0004, 0x1748: 0x0004, 0x1749: 0x0004, 0x174a: 0x0004, 0x174b: 0x0004, + 0x174c: 0x0004, 0x174d: 0x0004, 0x174e: 0x0004, 0x174f: 0x0004, 0x1750: 0x0004, 0x1751: 0x0004, + 0x1752: 0x0004, 0x1753: 0x0004, 0x1754: 0x0004, 0x1755: 0x0004, 0x1756: 0x0004, 0x1757: 0x0004, + 0x1758: 0x0004, 0x1759: 0x0004, 0x175a: 0x0004, 0x175b: 0x0004, 0x175c: 0x0004, 0x175d: 0x0004, + 0x175e: 0x0004, 0x175f: 0x0004, 0x1760: 0x0004, 0x1761: 0x0004, 0x1762: 0x0004, 0x1763: 0x0004, + 0x1764: 0x0004, 0x1765: 0x0004, 0x1766: 0x0004, 0x1767: 0x0004, 0x1768: 0x0004, 0x1769: 0x0004, + 0x176a: 0x0004, 0x176b: 0x0004, 0x176c: 0x0004, 0x176d: 0x0004, 0x176e: 0x0004, 0x176f: 0x0004, + 0x1770: 0x0004, 0x1771: 0x0004, 0x1772: 0x0004, 0x1773: 0x0004, 0x1774: 0x0004, 0x1775: 0x0004, + 0x1776: 0x0004, 0x1777: 0x0004, 0x1778: 0x0004, 0x1779: 0x0004, 0x177a: 0x0004, 0x177b: 0x0004, + 0x177c: 0x0004, 0x177d: 0x0004, 0x177e: 0x0004, 0x177f: 0x0004, // Block 0x5e, offset 0x1780 - 0x1780: 0x0003, 0x1781: 0x0003, 0x1782: 0x0003, 0x1783: 0x0003, 0x1784: 0x0003, 0x1785: 0x0003, - 0x1786: 0x0003, 0x1787: 0x0003, 0x1788: 0x0003, 0x1789: 0x0003, 0x178a: 0x0003, 0x178b: 0x0003, - 0x178c: 0x0003, 0x178d: 0x0003, 0x178e: 0x0003, 0x178f: 0x0003, 0x1790: 0x0003, 0x1791: 0x0003, - 0x1792: 0x0003, 0x1793: 0x0003, 0x1794: 0x0003, 0x1795: 0x0003, 0x1796: 0x0003, 0x1797: 0x0003, - 0x1798: 0x0003, 0x1799: 0x0003, 0x179a: 0x0003, 0x179b: 0x0003, 0x179c: 0x0003, 0x179d: 0x0003, - 0x179e: 0x0003, 0x179f: 0x0003, 0x17a0: 0x0003, 0x17a1: 0x0003, 0x17a2: 0x0003, 0x17a3: 0x0003, - 0x17a4: 0x0003, 0x17a5: 0x0003, 0x17a6: 0x0003, 0x17a7: 0x0003, 0x17a8: 0x0003, 0x17a9: 0x0003, - 0x17ab: 0x0003, 0x17ac: 0x0003, 0x17ad: 0x0003, 0x17ae: 0x0003, 0x17af: 0x0003, - 0x17b0: 0x0003, 0x17b1: 0x0003, 0x17b2: 0x0003, 0x17b3: 0x0003, 0x17b4: 0x0003, 0x17b5: 0x0003, - 0x17b6: 0x0003, 0x17b7: 0x0003, 0x17b8: 0x0003, 0x17b9: 0x0003, 0x17ba: 0x0003, 0x17bb: 0x0003, - 0x17bc: 0x0003, 0x17bd: 0x0003, 0x17be: 0x0003, 0x17bf: 0x0003, + 0x1780: 0x0004, 0x1781: 0x0004, 0x1782: 0x000c, 0x1783: 0x0004, 0x1784: 0x0004, 0x1785: 0x0004, + 0x1786: 0x0004, 0x1787: 0x0004, 0x1788: 0x0004, 0x1789: 0x0004, 0x178a: 0x0004, 0x178b: 0x0004, + 0x178c: 0x0004, 0x178d: 0x0004, 0x178e: 0x0004, 0x178f: 0x0004, 0x1790: 0x0004, 0x1791: 0x0004, + 0x1792: 0x0004, 0x1793: 0x0004, 0x1794: 0x0004, 0x1795: 0x0004, 0x1796: 0x0004, 0x1797: 0x0004, + 0x1798: 0x0004, 0x1799: 0x0004, 0x179a: 0x0004, 0x179b: 0x0004, 0x179c: 0x0004, 0x179d: 0x0004, + 0x179e: 0x0004, 0x179f: 0x0004, 0x17a0: 0x0004, 0x17a1: 0x0004, 0x17a2: 0x0004, 0x17a3: 0x0004, + 0x17a4: 0x0004, 0x17a5: 0x0004, 0x17a6: 0x0004, 0x17a7: 0x0004, 0x17a8: 0x0004, 0x17a9: 0x0004, + 0x17ab: 0x0004, 0x17ac: 0x0004, 0x17ad: 0x0004, 0x17ae: 0x0004, 0x17af: 0x0004, + 0x17b0: 0x0004, 0x17b1: 0x0004, 0x17b2: 0x0004, 0x17b3: 0x0004, 0x17b4: 0x0004, 0x17b5: 0x0004, + 0x17b6: 0x0004, 0x17b7: 0x0004, 0x17b8: 0x0004, 0x17b9: 0x0004, 0x17ba: 0x0004, 0x17bb: 0x0004, + 0x17bc: 0x0004, 0x17bd: 0x0004, 0x17be: 0x0004, 0x17bf: 0x0004, // Block 0x5f, offset 0x17c0 - 0x17c0: 0x0003, 0x17c1: 0x0003, 0x17c2: 0x0003, 0x17c3: 0x0003, 0x17c4: 0x0003, 0x17c5: 0x0003, - 0x17c6: 0x0003, 0x17c7: 0x0003, 0x17c8: 0x0003, 0x17c9: 0x0003, 0x17ca: 0x0003, 0x17cb: 0x0003, - 0x17d0: 0x0003, 0x17d1: 0x0003, - 0x17d2: 0x0003, 0x17d3: 0x0003, 0x17d4: 0x0003, 0x17d5: 0x0003, 0x17d6: 0x0003, 0x17d7: 0x0003, - 0x17d8: 0x0003, 0x17d9: 0x0003, 0x17da: 0x0003, 0x17db: 0x0003, 0x17dc: 0x0003, 0x17dd: 0x0003, - 0x17de: 0x0003, 0x17df: 0x0003, 0x17e0: 0x0003, 0x17e1: 0x0003, 0x17e2: 0x0003, 0x17e3: 0x0003, - 0x17e4: 0x0003, 0x17e5: 0x0003, 0x17e6: 0x0003, 0x17e7: 0x0003, 0x17e8: 0x0003, 0x17e9: 0x0003, - 0x17ea: 0x0003, 0x17eb: 0x0003, 0x17ec: 0x0003, 0x17ed: 0x0003, 0x17ee: 0x0003, 0x17ef: 0x0003, - 0x17f0: 0x0003, 0x17f1: 0x0003, 0x17f2: 0x0003, 0x17f3: 0x0003, + 0x17c0: 0x0004, 0x17c1: 0x0004, 0x17c2: 0x0004, 0x17c3: 0x0004, 0x17c4: 0x0004, 0x17c5: 0x0004, + 0x17c6: 0x0004, 0x17c7: 0x0004, 0x17c8: 0x0004, 0x17c9: 0x0004, 0x17ca: 0x0004, 0x17cb: 0x0004, + 0x17d0: 0x0004, 0x17d1: 0x0004, + 0x17d2: 0x0004, 0x17d3: 0x0004, 0x17d4: 0x0004, 0x17d5: 0x0004, 0x17d6: 0x0004, 0x17d7: 0x0004, + 0x17d8: 0x0004, 0x17d9: 0x0004, 0x17da: 0x0004, 0x17db: 0x0004, 0x17dc: 0x0004, 0x17dd: 0x0004, + 0x17de: 0x0004, 0x17df: 0x0004, 0x17e0: 0x0004, 0x17e1: 0x0004, 0x17e2: 0x0004, 0x17e3: 0x0004, + 0x17e4: 0x0004, 0x17e5: 0x0004, 0x17e6: 0x0004, 0x17e7: 0x0004, 0x17e8: 0x0004, 0x17e9: 0x0004, + 0x17ea: 0x0004, 0x17eb: 0x0004, 0x17ec: 0x0004, 0x17ed: 0x0004, 0x17ee: 0x0004, 0x17ef: 0x0004, + 0x17f0: 0x0004, 0x17f1: 0x0004, 0x17f2: 0x0004, 0x17f3: 0x0004, // Block 0x60, offset 0x1800 - 0x1800: 0x0003, 0x1801: 0x0003, 0x1802: 0x0003, 0x1803: 0x0003, 0x1804: 0x0003, 0x1805: 0x0003, - 0x1806: 0x0003, 0x1807: 0x0003, 0x1808: 0x0003, 0x1809: 0x0003, 0x180a: 0x0003, 0x180b: 0x0003, - 0x180c: 0x0003, 0x180d: 0x0003, 0x180e: 0x0003, 0x180f: 0x0003, - 0x1812: 0x0003, 0x1813: 0x0003, 0x1814: 0x0003, 0x1815: 0x0003, - 0x1820: 0x0003, 0x1821: 0x0003, 0x1823: 0x0003, - 0x1824: 0x0003, 0x1825: 0x0003, 0x1826: 0x0003, 0x1827: 0x0003, 0x1828: 0x0003, 0x1829: 0x0003, - 0x1832: 0x0003, 0x1833: 0x0003, - 0x1836: 0x0003, 0x1837: 0x0003, - 0x183c: 0x0003, 0x183d: 0x0003, + 0x1800: 0x0004, 0x1801: 0x0004, 0x1802: 0x0004, 0x1803: 0x0004, 0x1804: 0x0004, 0x1805: 0x0004, + 0x1806: 0x0004, 0x1807: 0x0004, 0x1808: 0x0004, 0x1809: 0x0004, 0x180a: 0x0004, 0x180b: 0x0004, + 0x180c: 0x0004, 0x180d: 0x0004, 0x180e: 0x0004, 0x180f: 0x0004, + 0x1812: 0x0004, 0x1813: 0x0004, 0x1814: 0x0004, 0x1815: 0x0004, + 0x1820: 0x0004, 0x1821: 0x0004, 0x1823: 0x0004, + 0x1824: 0x0004, 0x1825: 0x0004, 0x1826: 0x0004, 0x1827: 0x0004, 0x1828: 0x0004, 0x1829: 0x0004, + 0x182a: 0x0008, 0x182b: 0x0008, + 0x1832: 0x0004, 0x1833: 0x0004, + 0x1836: 0x000c, 0x1837: 0x0004, + 0x183c: 0x0004, 0x183d: 0x0004, // Block 0x61, offset 0x1840 - 0x1840: 0x0003, 0x1841: 0x0003, - 0x1846: 0x0003, 0x1847: 0x0003, 0x1848: 0x0003, 0x184b: 0x0003, - 0x184e: 0x0003, 0x184f: 0x0003, 0x1850: 0x0003, 0x1851: 0x0003, - 0x1862: 0x0003, 0x1863: 0x0003, - 0x1864: 0x0003, 0x1865: 0x0003, - 0x186f: 0x0003, - 0x187d: 0x0002, 0x187e: 0x0002, + 0x1840: 0x000c, 0x1841: 0x0004, + 0x1846: 0x0004, 0x1847: 0x0004, 0x1848: 0x0004, 0x184b: 0x0004, + 0x184e: 0x0004, 0x184f: 0x0004, 0x1850: 0x0004, 0x1851: 0x0004, + 0x1862: 0x0004, 0x1863: 0x0004, + 0x1864: 0x0004, 0x1865: 0x0004, + 0x186f: 0x0004, + 0x187b: 0x0008, + 0x187c: 0x0008, 0x187d: 0x000a, 0x187e: 0x000a, // Block 0x62, offset 0x1880 - 0x1885: 0x0003, - 0x1886: 0x0003, 0x1889: 0x0003, - 0x188e: 0x0003, 0x188f: 0x0003, - 0x1894: 0x0002, 0x1895: 0x0002, - 0x189c: 0x0003, - 0x189e: 0x0003, + 0x1880: 0x0008, 0x1881: 0x0008, 0x1882: 0x0008, 0x1883: 0x0008, 0x1884: 0x0008, 0x1885: 0x0004, + 0x1886: 0x0004, 0x1889: 0x0004, + 0x188e: 0x000c, 0x188f: 0x0004, 0x1891: 0x0008, + 0x1894: 0x000a, 0x1895: 0x000a, + 0x1898: 0x0008, 0x189c: 0x0004, 0x189d: 0x0008, + 0x189e: 0x0004, 0x18a0: 0x0008, 0x18a2: 0x0008, 0x18a3: 0x0008, + 0x18a6: 0x0008, + 0x18aa: 0x0008, 0x18ae: 0x0008, 0x18af: 0x0008, 0x18b0: 0x0002, 0x18b1: 0x0002, 0x18b2: 0x0002, 0x18b3: 0x0002, 0x18b4: 0x0002, 0x18b5: 0x0002, - 0x18b6: 0x0002, 0x18b7: 0x0002, + 0x18b6: 0x0002, 0x18b7: 0x0002, 0x18b8: 0x0008, 0x18b9: 0x0008, 0x18ba: 0x0008, // Block 0x63, offset 0x18c0 - 0x18c0: 0x0003, 0x18c2: 0x0003, - 0x18c8: 0x0002, 0x18c9: 0x0002, 0x18ca: 0x0002, 0x18cb: 0x0002, - 0x18cc: 0x0002, 0x18cd: 0x0002, 0x18ce: 0x0002, 0x18cf: 0x0002, 0x18d0: 0x0002, 0x18d1: 0x0002, - 0x18d2: 0x0002, 0x18d3: 0x0002, - 0x18e0: 0x0003, 0x18e1: 0x0003, 0x18e3: 0x0003, - 0x18e4: 0x0003, 0x18e5: 0x0003, 0x18e7: 0x0003, 0x18e8: 0x0003, 0x18e9: 0x0003, - 0x18ea: 0x0003, 0x18ec: 0x0003, 0x18ed: 0x0003, 0x18ef: 0x0003, - 0x18ff: 0x0002, + 0x18c0: 0x000c, 0x18c2: 0x000c, + 0x18c8: 0x000a, 0x18c9: 0x000a, 0x18ca: 0x000a, 0x18cb: 0x000a, + 0x18cc: 0x000a, 0x18cd: 0x000a, 0x18ce: 0x000a, 0x18cf: 0x000a, 0x18d0: 0x000a, 0x18d1: 0x000a, + 0x18d2: 0x000a, 0x18d3: 0x000a, + 0x18df: 0x0008, 0x18e0: 0x000c, 0x18e1: 0x0004, 0x18e3: 0x000c, + 0x18e4: 0x0004, 0x18e5: 0x000c, 0x18e6: 0x0008, 0x18e7: 0x0004, 0x18e8: 0x000c, 0x18e9: 0x0004, + 0x18ea: 0x0004, 0x18ec: 0x0004, 0x18ed: 0x0004, 0x18ef: 0x0004, + 0x18fb: 0x0008, + 0x18fe: 0x0008, 0x18ff: 0x000a, // Block 0x64, offset 0x1900 0x190a: 0x0002, 0x190b: 0x0002, 0x190c: 0x0002, 0x190d: 0x0002, 0x190e: 0x0002, 0x190f: 0x0002, - 0x1913: 0x0002, - 0x191e: 0x0003, 0x191f: 0x0003, 0x1921: 0x0002, - 0x192a: 0x0002, 0x192b: 0x0002, - 0x193d: 0x0002, 0x193e: 0x0002, 0x193f: 0x0003, + 0x1912: 0x0008, 0x1913: 0x000a, 0x1914: 0x0008, 0x1915: 0x0008, 0x1916: 0x0008, 0x1917: 0x0008, + 0x1919: 0x0008, 0x191b: 0x0008, 0x191c: 0x0008, + 0x191e: 0x0004, 0x191f: 0x0004, 0x1920: 0x0008, 0x1921: 0x000a, + 0x1927: 0x0008, + 0x192a: 0x000a, 0x192b: 0x000a, + 0x1930: 0x0008, 0x1931: 0x0008, + 0x193d: 0x000a, 0x193e: 0x000a, 0x193f: 0x0004, // Block 0x65, offset 0x1940 - 0x1944: 0x0002, 0x1945: 0x0002, - 0x1946: 0x0003, 0x1947: 0x0003, 0x1948: 0x0003, 0x1949: 0x0003, 0x194a: 0x0003, 0x194b: 0x0003, - 0x194c: 0x0003, 0x194d: 0x0003, 0x194e: 0x0002, 0x194f: 0x0003, 0x1950: 0x0003, 0x1951: 0x0003, - 0x1952: 0x0003, 0x1953: 0x0003, 0x1954: 0x0002, 0x1955: 0x0003, 0x1956: 0x0003, 0x1957: 0x0003, - 0x1958: 0x0003, 0x1959: 0x0003, 0x195a: 0x0003, 0x195b: 0x0003, 0x195c: 0x0003, 0x195d: 0x0003, - 0x195e: 0x0003, 0x195f: 0x0003, 0x1960: 0x0003, 0x1961: 0x0003, 0x1963: 0x0003, - 0x1968: 0x0003, 0x1969: 0x0003, - 0x196a: 0x0002, 0x196b: 0x0003, 0x196c: 0x0003, 0x196d: 0x0003, 0x196e: 0x0003, 0x196f: 0x0003, - 0x1970: 0x0003, 0x1971: 0x0003, 0x1972: 0x0002, 0x1973: 0x0002, 0x1974: 0x0003, 0x1975: 0x0002, - 0x1976: 0x0003, 0x1977: 0x0003, 0x1978: 0x0003, 0x1979: 0x0003, 0x197a: 0x0002, 0x197b: 0x0003, - 0x197c: 0x0003, 0x197d: 0x0002, 0x197e: 0x0003, 0x197f: 0x0003, + 0x1944: 0x000a, 0x1945: 0x000a, + 0x1946: 0x0004, 0x1947: 0x0004, 0x1948: 0x000c, 0x1949: 0x0004, 0x194a: 0x0004, 0x194b: 0x0004, + 0x194c: 0x0004, 0x194d: 0x0004, 0x194e: 0x000a, 0x194f: 0x000c, 0x1950: 0x0004, 0x1951: 0x000c, + 0x1952: 0x0004, 0x1953: 0x000c, 0x1954: 0x000a, 0x1955: 0x0004, 0x1956: 0x0004, 0x1957: 0x0004, + 0x1958: 0x0004, 0x1959: 0x0004, 0x195a: 0x0004, 0x195b: 0x0004, 0x195c: 0x0004, 0x195d: 0x0004, + 0x195e: 0x0004, 0x195f: 0x0004, 0x1960: 0x0004, 0x1961: 0x0004, 0x1963: 0x0004, + 0x1968: 0x0004, 0x1969: 0x000c, + 0x196a: 0x000a, 0x196b: 0x0004, 0x196c: 0x0004, 0x196d: 0x0004, 0x196e: 0x0004, 0x196f: 0x0004, + 0x1970: 0x000c, 0x1971: 0x000c, 0x1972: 0x000a, 0x1973: 0x000a, 0x1974: 0x000c, 0x1975: 0x000a, + 0x1976: 0x0004, 0x1977: 0x000c, 0x1978: 0x000c, 0x1979: 0x000c, 0x197a: 0x000a, 0x197b: 0x0004, + 0x197c: 0x0004, 0x197d: 0x000a, 0x197e: 0x0004, 0x197f: 0x0004, // Block 0x66, offset 0x1980 - 0x1985: 0x0002, - 0x198a: 0x0002, 0x198b: 0x0002, - 0x19a8: 0x0002, - 0x19bd: 0x0003, + 0x1982: 0x0008, 0x1985: 0x000a, + 0x1988: 0x0008, 0x1989: 0x0008, 0x198a: 0x000a, 0x198b: 0x000a, + 0x198c: 0x0008, 0x198d: 0x0008, 0x198f: 0x0008, + 0x1992: 0x0008, 0x1994: 0x0008, 0x1996: 0x0008, + 0x199d: 0x0008, + 0x19a1: 0x0008, + 0x19a8: 0x000a, + 0x19b3: 0x0008, 0x19b4: 0x0008, + 0x19bd: 0x0004, // Block 0x67, offset 0x19c0 - 0x19cc: 0x0002, 0x19ce: 0x0002, - 0x19d3: 0x0002, 0x19d4: 0x0002, 0x19d5: 0x0002, 0x19d7: 0x0002, - 0x19f6: 0x0003, 0x19f7: 0x0003, 0x19f8: 0x0003, 0x19f9: 0x0003, 0x19fa: 0x0003, 0x19fb: 0x0003, - 0x19fc: 0x0003, 0x19fd: 0x0003, 0x19fe: 0x0003, 0x19ff: 0x0003, + 0x19c4: 0x0008, + 0x19c7: 0x0008, + 0x19cc: 0x000a, 0x19ce: 0x000a, + 0x19d3: 0x000a, 0x19d4: 0x000a, 0x19d5: 0x000a, 0x19d7: 0x000a, + 0x19e3: 0x0008, + 0x19e4: 0x0008, + 0x19f6: 0x0004, 0x19f7: 0x0004, 0x19f8: 0x0004, 0x19f9: 0x0004, 0x19fa: 0x0004, 0x19fb: 0x0004, + 0x19fc: 0x0004, 0x19fd: 0x0004, 0x19fe: 0x0004, 0x19ff: 0x0004, // Block 0x68, offset 0x1a00 - 0x1a15: 0x0002, 0x1a16: 0x0002, 0x1a17: 0x0002, - 0x1a30: 0x0002, - 0x1a3f: 0x0002, + 0x1a15: 0x000a, 0x1a16: 0x000a, 0x1a17: 0x000a, + 0x1a21: 0x0008, + 0x1a30: 0x000a, + 0x1a3f: 0x000a, // Block 0x69, offset 0x1a40 - 0x1a5b: 0x0002, 0x1a5c: 0x0002, + 0x1a74: 0x0008, 0x1a75: 0x0008, // Block 0x6a, offset 0x1a80 - 0x1a90: 0x0002, - 0x1a95: 0x0002, 0x1a96: 0x0003, 0x1a97: 0x0003, - 0x1a98: 0x0003, 0x1a99: 0x0003, + 0x1a85: 0x0008, + 0x1a86: 0x0008, 0x1a87: 0x0008, + 0x1a9b: 0x000a, 0x1a9c: 0x000a, // Block 0x6b, offset 0x1ac0 - 0x1aef: 0x0001, - 0x1af0: 0x0001, 0x1af1: 0x0001, + 0x1ad0: 0x000a, + 0x1ad5: 0x000a, 0x1ad6: 0x0004, 0x1ad7: 0x0004, + 0x1ad8: 0x0004, 0x1ad9: 0x0004, // Block 0x6c, offset 0x1b00 - 0x1b3f: 0x0001, + 0x1b2f: 0x0001, + 0x1b30: 0x0001, 0x1b31: 0x0001, // Block 0x6d, offset 0x1b40 - 0x1b60: 0x0001, 0x1b61: 0x0001, 0x1b62: 0x0001, 0x1b63: 0x0001, - 0x1b64: 0x0001, 0x1b65: 0x0001, 0x1b66: 0x0001, 0x1b67: 0x0001, 0x1b68: 0x0001, 0x1b69: 0x0001, - 0x1b6a: 0x0001, 0x1b6b: 0x0001, 0x1b6c: 0x0001, 0x1b6d: 0x0001, 0x1b6e: 0x0001, 0x1b6f: 0x0001, - 0x1b70: 0x0001, 0x1b71: 0x0001, 0x1b72: 0x0001, 0x1b73: 0x0001, 0x1b74: 0x0001, 0x1b75: 0x0001, - 0x1b76: 0x0001, 0x1b77: 0x0001, 0x1b78: 0x0001, 0x1b79: 0x0001, 0x1b7a: 0x0001, 0x1b7b: 0x0001, - 0x1b7c: 0x0001, 0x1b7d: 0x0001, 0x1b7e: 0x0001, 0x1b7f: 0x0001, + 0x1b7f: 0x0001, // Block 0x6e, offset 0x1b80 - 0x1b80: 0x0002, 0x1b81: 0x0002, 0x1b82: 0x0002, 0x1b83: 0x0002, 0x1b84: 0x0002, 0x1b85: 0x0002, - 0x1b86: 0x0002, 0x1b87: 0x0002, 0x1b88: 0x0002, 0x1b89: 0x0002, 0x1b8a: 0x0002, 0x1b8b: 0x0002, - 0x1b8c: 0x0002, 0x1b8d: 0x0002, 0x1b8e: 0x0002, 0x1b8f: 0x0002, 0x1b90: 0x0002, 0x1b91: 0x0002, - 0x1b92: 0x0002, 0x1b93: 0x0002, 0x1b94: 0x0002, 0x1b95: 0x0002, 0x1b96: 0x0002, 0x1b97: 0x0002, - 0x1b98: 0x0002, 0x1b99: 0x0002, 0x1b9b: 0x0002, 0x1b9c: 0x0002, 0x1b9d: 0x0002, - 0x1b9e: 0x0002, 0x1b9f: 0x0002, 0x1ba0: 0x0002, 0x1ba1: 0x0002, 0x1ba2: 0x0002, 0x1ba3: 0x0002, - 0x1ba4: 0x0002, 0x1ba5: 0x0002, 0x1ba6: 0x0002, 0x1ba7: 0x0002, 0x1ba8: 0x0002, 0x1ba9: 0x0002, - 0x1baa: 0x0002, 0x1bab: 0x0002, 0x1bac: 0x0002, 0x1bad: 0x0002, 0x1bae: 0x0002, 0x1baf: 0x0002, - 0x1bb0: 0x0002, 0x1bb1: 0x0002, 0x1bb2: 0x0002, 0x1bb3: 0x0002, 0x1bb4: 0x0002, 0x1bb5: 0x0002, - 0x1bb6: 0x0002, 0x1bb7: 0x0002, 0x1bb8: 0x0002, 0x1bb9: 0x0002, 0x1bba: 0x0002, 0x1bbb: 0x0002, - 0x1bbc: 0x0002, 0x1bbd: 0x0002, 0x1bbe: 0x0002, 0x1bbf: 0x0002, + 0x1ba0: 0x0001, 0x1ba1: 0x0001, 0x1ba2: 0x0001, 0x1ba3: 0x0001, + 0x1ba4: 0x0001, 0x1ba5: 0x0001, 0x1ba6: 0x0001, 0x1ba7: 0x0001, 0x1ba8: 0x0001, 0x1ba9: 0x0001, + 0x1baa: 0x0001, 0x1bab: 0x0001, 0x1bac: 0x0001, 0x1bad: 0x0001, 0x1bae: 0x0001, 0x1baf: 0x0001, + 0x1bb0: 0x0001, 0x1bb1: 0x0001, 0x1bb2: 0x0001, 0x1bb3: 0x0001, 0x1bb4: 0x0001, 0x1bb5: 0x0001, + 0x1bb6: 0x0001, 0x1bb7: 0x0001, 0x1bb8: 0x0001, 0x1bb9: 0x0001, 0x1bba: 0x0001, 0x1bbb: 0x0001, + 0x1bbc: 0x0001, 0x1bbd: 0x0001, 0x1bbe: 0x0001, 0x1bbf: 0x0001, // Block 0x6f, offset 0x1bc0 0x1bc0: 0x0002, 0x1bc1: 0x0002, 0x1bc2: 0x0002, 0x1bc3: 0x0002, 0x1bc4: 0x0002, 0x1bc5: 0x0002, 0x1bc6: 0x0002, 0x1bc7: 0x0002, 0x1bc8: 0x0002, 0x1bc9: 0x0002, 0x1bca: 0x0002, 0x1bcb: 0x0002, 0x1bcc: 0x0002, 0x1bcd: 0x0002, 0x1bce: 0x0002, 0x1bcf: 0x0002, 0x1bd0: 0x0002, 0x1bd1: 0x0002, 0x1bd2: 0x0002, 0x1bd3: 0x0002, 0x1bd4: 0x0002, 0x1bd5: 0x0002, 0x1bd6: 0x0002, 0x1bd7: 0x0002, - 0x1bd8: 0x0002, 0x1bd9: 0x0002, 0x1bda: 0x0002, 0x1bdb: 0x0002, 0x1bdc: 0x0002, 0x1bdd: 0x0002, + 0x1bd8: 0x0002, 0x1bd9: 0x0002, 0x1bdb: 0x0002, 0x1bdc: 0x0002, 0x1bdd: 0x0002, 0x1bde: 0x0002, 0x1bdf: 0x0002, 0x1be0: 0x0002, 0x1be1: 0x0002, 0x1be2: 0x0002, 0x1be3: 0x0002, 0x1be4: 0x0002, 0x1be5: 0x0002, 0x1be6: 0x0002, 0x1be7: 0x0002, 0x1be8: 0x0002, 0x1be9: 0x0002, 0x1bea: 0x0002, 0x1beb: 0x0002, 0x1bec: 0x0002, 0x1bed: 0x0002, 0x1bee: 0x0002, 0x1bef: 0x0002, - 0x1bf0: 0x0002, 0x1bf1: 0x0002, 0x1bf2: 0x0002, 0x1bf3: 0x0002, + 0x1bf0: 0x0002, 0x1bf1: 0x0002, 0x1bf2: 0x0002, 0x1bf3: 0x0002, 0x1bf4: 0x0002, 0x1bf5: 0x0002, + 0x1bf6: 0x0002, 0x1bf7: 0x0002, 0x1bf8: 0x0002, 0x1bf9: 0x0002, 0x1bfa: 0x0002, 0x1bfb: 0x0002, + 0x1bfc: 0x0002, 0x1bfd: 0x0002, 0x1bfe: 0x0002, 0x1bff: 0x0002, // Block 0x70, offset 0x1c00 0x1c00: 0x0002, 0x1c01: 0x0002, 0x1c02: 0x0002, 0x1c03: 0x0002, 0x1c04: 0x0002, 0x1c05: 0x0002, 0x1c06: 0x0002, 0x1c07: 0x0002, 0x1c08: 0x0002, 0x1c09: 0x0002, 0x1c0a: 0x0002, 0x1c0b: 0x0002, 0x1c0c: 0x0002, 0x1c0d: 0x0002, 0x1c0e: 0x0002, 0x1c0f: 0x0002, 0x1c10: 0x0002, 0x1c11: 0x0002, - 0x1c12: 0x0002, 0x1c13: 0x0002, 0x1c14: 0x0002, 0x1c15: 0x0002, - 0x1c30: 0x0002, 0x1c31: 0x0002, 0x1c32: 0x0002, 0x1c33: 0x0002, 0x1c34: 0x0002, 0x1c35: 0x0002, - 0x1c36: 0x0002, 0x1c37: 0x0002, 0x1c38: 0x0002, 0x1c39: 0x0002, 0x1c3a: 0x0002, 0x1c3b: 0x0002, - 0x1c3c: 0x0002, 0x1c3d: 0x0002, 0x1c3e: 0x0002, 0x1c3f: 0x0002, + 0x1c12: 0x0002, 0x1c13: 0x0002, 0x1c14: 0x0002, 0x1c15: 0x0002, 0x1c16: 0x0002, 0x1c17: 0x0002, + 0x1c18: 0x0002, 0x1c19: 0x0002, 0x1c1a: 0x0002, 0x1c1b: 0x0002, 0x1c1c: 0x0002, 0x1c1d: 0x0002, + 0x1c1e: 0x0002, 0x1c1f: 0x0002, 0x1c20: 0x0002, 0x1c21: 0x0002, 0x1c22: 0x0002, 0x1c23: 0x0002, + 0x1c24: 0x0002, 0x1c25: 0x0002, 0x1c26: 0x0002, 0x1c27: 0x0002, 0x1c28: 0x0002, 0x1c29: 0x0002, + 0x1c2a: 0x0002, 0x1c2b: 0x0002, 0x1c2c: 0x0002, 0x1c2d: 0x0002, 0x1c2e: 0x0002, 0x1c2f: 0x0002, + 0x1c30: 0x0002, 0x1c31: 0x0002, 0x1c32: 0x0002, 0x1c33: 0x0002, // Block 0x71, offset 0x1c40 0x1c40: 0x0002, 0x1c41: 0x0002, 0x1c42: 0x0002, 0x1c43: 0x0002, 0x1c44: 0x0002, 0x1c45: 0x0002, 0x1c46: 0x0002, 0x1c47: 0x0002, 0x1c48: 0x0002, 0x1c49: 0x0002, 0x1c4a: 0x0002, 0x1c4b: 0x0002, 0x1c4c: 0x0002, 0x1c4d: 0x0002, 0x1c4e: 0x0002, 0x1c4f: 0x0002, 0x1c50: 0x0002, 0x1c51: 0x0002, - 0x1c52: 0x0002, 0x1c53: 0x0002, 0x1c54: 0x0002, 0x1c55: 0x0002, 0x1c56: 0x0002, 0x1c57: 0x0002, - 0x1c58: 0x0002, 0x1c59: 0x0002, 0x1c5a: 0x0002, 0x1c5b: 0x0002, 0x1c5c: 0x0002, 0x1c5d: 0x0002, - 0x1c5e: 0x0002, 0x1c5f: 0x0002, 0x1c60: 0x0002, 0x1c61: 0x0002, 0x1c62: 0x0002, 0x1c63: 0x0002, - 0x1c64: 0x0002, 0x1c65: 0x0002, 0x1c66: 0x0002, 0x1c67: 0x0002, 0x1c68: 0x0002, 0x1c69: 0x0002, - 0x1c6a: 0x0001, 0x1c6b: 0x0001, 0x1c6c: 0x0001, 0x1c6d: 0x0001, 0x1c6e: 0x0002, 0x1c6f: 0x0002, + 0x1c52: 0x0002, 0x1c53: 0x0002, 0x1c54: 0x0002, 0x1c55: 0x0002, 0x1c70: 0x0002, 0x1c71: 0x0002, 0x1c72: 0x0002, 0x1c73: 0x0002, 0x1c74: 0x0002, 0x1c75: 0x0002, 0x1c76: 0x0002, 0x1c77: 0x0002, 0x1c78: 0x0002, 0x1c79: 0x0002, 0x1c7a: 0x0002, 0x1c7b: 0x0002, - 0x1c7c: 0x0002, 0x1c7d: 0x0002, 0x1c7e: 0x0002, + 0x1c7c: 0x0002, 0x1c7d: 0x0002, 0x1c7e: 0x0002, 0x1c7f: 0x0002, // Block 0x72, offset 0x1c80 - 0x1c81: 0x0002, 0x1c82: 0x0002, 0x1c83: 0x0002, 0x1c84: 0x0002, 0x1c85: 0x0002, + 0x1c80: 0x0002, 0x1c81: 0x0002, 0x1c82: 0x0002, 0x1c83: 0x0002, 0x1c84: 0x0002, 0x1c85: 0x0002, 0x1c86: 0x0002, 0x1c87: 0x0002, 0x1c88: 0x0002, 0x1c89: 0x0002, 0x1c8a: 0x0002, 0x1c8b: 0x0002, 0x1c8c: 0x0002, 0x1c8d: 0x0002, 0x1c8e: 0x0002, 0x1c8f: 0x0002, 0x1c90: 0x0002, 0x1c91: 0x0002, 0x1c92: 0x0002, 0x1c93: 0x0002, 0x1c94: 0x0002, 0x1c95: 0x0002, 0x1c96: 0x0002, 0x1c97: 0x0002, 0x1c98: 0x0002, 0x1c99: 0x0002, 0x1c9a: 0x0002, 0x1c9b: 0x0002, 0x1c9c: 0x0002, 0x1c9d: 0x0002, 0x1c9e: 0x0002, 0x1c9f: 0x0002, 0x1ca0: 0x0002, 0x1ca1: 0x0002, 0x1ca2: 0x0002, 0x1ca3: 0x0002, 0x1ca4: 0x0002, 0x1ca5: 0x0002, 0x1ca6: 0x0002, 0x1ca7: 0x0002, 0x1ca8: 0x0002, 0x1ca9: 0x0002, - 0x1caa: 0x0002, 0x1cab: 0x0002, 0x1cac: 0x0002, 0x1cad: 0x0002, 0x1cae: 0x0002, 0x1caf: 0x0002, - 0x1cb0: 0x0002, 0x1cb1: 0x0002, 0x1cb2: 0x0002, 0x1cb3: 0x0002, 0x1cb4: 0x0002, 0x1cb5: 0x0002, + 0x1caa: 0x0001, 0x1cab: 0x0001, 0x1cac: 0x0001, 0x1cad: 0x0001, 0x1cae: 0x0002, 0x1caf: 0x0002, + 0x1cb0: 0x000a, 0x1cb1: 0x0002, 0x1cb2: 0x0002, 0x1cb3: 0x0002, 0x1cb4: 0x0002, 0x1cb5: 0x0002, 0x1cb6: 0x0002, 0x1cb7: 0x0002, 0x1cb8: 0x0002, 0x1cb9: 0x0002, 0x1cba: 0x0002, 0x1cbb: 0x0002, - 0x1cbc: 0x0002, 0x1cbd: 0x0002, 0x1cbe: 0x0002, 0x1cbf: 0x0002, + 0x1cbc: 0x0002, 0x1cbd: 0x000a, 0x1cbe: 0x0002, // Block 0x73, offset 0x1cc0 - 0x1cc0: 0x0002, 0x1cc1: 0x0002, 0x1cc2: 0x0002, 0x1cc3: 0x0002, 0x1cc4: 0x0002, 0x1cc5: 0x0002, + 0x1cc1: 0x0002, 0x1cc2: 0x0002, 0x1cc3: 0x0002, 0x1cc4: 0x0002, 0x1cc5: 0x0002, 0x1cc6: 0x0002, 0x1cc7: 0x0002, 0x1cc8: 0x0002, 0x1cc9: 0x0002, 0x1cca: 0x0002, 0x1ccb: 0x0002, 0x1ccc: 0x0002, 0x1ccd: 0x0002, 0x1cce: 0x0002, 0x1ccf: 0x0002, 0x1cd0: 0x0002, 0x1cd1: 0x0002, - 0x1cd2: 0x0002, 0x1cd3: 0x0002, 0x1cd4: 0x0002, 0x1cd5: 0x0002, 0x1cd6: 0x0002, - 0x1cd9: 0x0001, 0x1cda: 0x0001, 0x1cdb: 0x0002, 0x1cdc: 0x0002, 0x1cdd: 0x0002, + 0x1cd2: 0x0002, 0x1cd3: 0x0002, 0x1cd4: 0x0002, 0x1cd5: 0x0002, 0x1cd6: 0x0002, 0x1cd7: 0x0002, + 0x1cd8: 0x0002, 0x1cd9: 0x0002, 0x1cda: 0x0002, 0x1cdb: 0x0002, 0x1cdc: 0x0002, 0x1cdd: 0x0002, 0x1cde: 0x0002, 0x1cdf: 0x0002, 0x1ce0: 0x0002, 0x1ce1: 0x0002, 0x1ce2: 0x0002, 0x1ce3: 0x0002, 0x1ce4: 0x0002, 0x1ce5: 0x0002, 0x1ce6: 0x0002, 0x1ce7: 0x0002, 0x1ce8: 0x0002, 0x1ce9: 0x0002, 0x1cea: 0x0002, 0x1ceb: 0x0002, 0x1cec: 0x0002, 0x1ced: 0x0002, 0x1cee: 0x0002, 0x1cef: 0x0002, @@ -775,38 +797,38 @@ var stringWidthValues = [15744]uint8{ 0x1cf6: 0x0002, 0x1cf7: 0x0002, 0x1cf8: 0x0002, 0x1cf9: 0x0002, 0x1cfa: 0x0002, 0x1cfb: 0x0002, 0x1cfc: 0x0002, 0x1cfd: 0x0002, 0x1cfe: 0x0002, 0x1cff: 0x0002, // Block 0x74, offset 0x1d00 - 0x1d05: 0x0002, + 0x1d00: 0x0002, 0x1d01: 0x0002, 0x1d02: 0x0002, 0x1d03: 0x0002, 0x1d04: 0x0002, 0x1d05: 0x0002, 0x1d06: 0x0002, 0x1d07: 0x0002, 0x1d08: 0x0002, 0x1d09: 0x0002, 0x1d0a: 0x0002, 0x1d0b: 0x0002, 0x1d0c: 0x0002, 0x1d0d: 0x0002, 0x1d0e: 0x0002, 0x1d0f: 0x0002, 0x1d10: 0x0002, 0x1d11: 0x0002, - 0x1d12: 0x0002, 0x1d13: 0x0002, 0x1d14: 0x0002, 0x1d15: 0x0002, 0x1d16: 0x0002, 0x1d17: 0x0002, - 0x1d18: 0x0002, 0x1d19: 0x0002, 0x1d1a: 0x0002, 0x1d1b: 0x0002, 0x1d1c: 0x0002, 0x1d1d: 0x0002, + 0x1d12: 0x0002, 0x1d13: 0x0002, 0x1d14: 0x0002, 0x1d15: 0x0002, 0x1d16: 0x0002, + 0x1d19: 0x0001, 0x1d1a: 0x0001, 0x1d1b: 0x0002, 0x1d1c: 0x0002, 0x1d1d: 0x0002, 0x1d1e: 0x0002, 0x1d1f: 0x0002, 0x1d20: 0x0002, 0x1d21: 0x0002, 0x1d22: 0x0002, 0x1d23: 0x0002, 0x1d24: 0x0002, 0x1d25: 0x0002, 0x1d26: 0x0002, 0x1d27: 0x0002, 0x1d28: 0x0002, 0x1d29: 0x0002, 0x1d2a: 0x0002, 0x1d2b: 0x0002, 0x1d2c: 0x0002, 0x1d2d: 0x0002, 0x1d2e: 0x0002, 0x1d2f: 0x0002, - 0x1d31: 0x0002, 0x1d32: 0x0002, 0x1d33: 0x0002, 0x1d34: 0x0002, 0x1d35: 0x0002, + 0x1d30: 0x0002, 0x1d31: 0x0002, 0x1d32: 0x0002, 0x1d33: 0x0002, 0x1d34: 0x0002, 0x1d35: 0x0002, 0x1d36: 0x0002, 0x1d37: 0x0002, 0x1d38: 0x0002, 0x1d39: 0x0002, 0x1d3a: 0x0002, 0x1d3b: 0x0002, 0x1d3c: 0x0002, 0x1d3d: 0x0002, 0x1d3e: 0x0002, 0x1d3f: 0x0002, // Block 0x75, offset 0x1d40 - 0x1d40: 0x0002, 0x1d41: 0x0002, 0x1d42: 0x0002, 0x1d43: 0x0002, 0x1d44: 0x0002, 0x1d45: 0x0002, + 0x1d45: 0x0002, 0x1d46: 0x0002, 0x1d47: 0x0002, 0x1d48: 0x0002, 0x1d49: 0x0002, 0x1d4a: 0x0002, 0x1d4b: 0x0002, - 0x1d4c: 0x0002, 0x1d4d: 0x0002, 0x1d4e: 0x0002, 0x1d50: 0x0002, 0x1d51: 0x0002, + 0x1d4c: 0x0002, 0x1d4d: 0x0002, 0x1d4e: 0x0002, 0x1d4f: 0x0002, 0x1d50: 0x0002, 0x1d51: 0x0002, 0x1d52: 0x0002, 0x1d53: 0x0002, 0x1d54: 0x0002, 0x1d55: 0x0002, 0x1d56: 0x0002, 0x1d57: 0x0002, 0x1d58: 0x0002, 0x1d59: 0x0002, 0x1d5a: 0x0002, 0x1d5b: 0x0002, 0x1d5c: 0x0002, 0x1d5d: 0x0002, 0x1d5e: 0x0002, 0x1d5f: 0x0002, 0x1d60: 0x0002, 0x1d61: 0x0002, 0x1d62: 0x0002, 0x1d63: 0x0002, 0x1d64: 0x0002, 0x1d65: 0x0002, 0x1d66: 0x0002, 0x1d67: 0x0002, 0x1d68: 0x0002, 0x1d69: 0x0002, 0x1d6a: 0x0002, 0x1d6b: 0x0002, 0x1d6c: 0x0002, 0x1d6d: 0x0002, 0x1d6e: 0x0002, 0x1d6f: 0x0002, - 0x1d70: 0x0002, 0x1d71: 0x0002, 0x1d72: 0x0002, 0x1d73: 0x0002, 0x1d74: 0x0002, 0x1d75: 0x0002, + 0x1d71: 0x0002, 0x1d72: 0x0002, 0x1d73: 0x0002, 0x1d74: 0x0002, 0x1d75: 0x0002, 0x1d76: 0x0002, 0x1d77: 0x0002, 0x1d78: 0x0002, 0x1d79: 0x0002, 0x1d7a: 0x0002, 0x1d7b: 0x0002, 0x1d7c: 0x0002, 0x1d7d: 0x0002, 0x1d7e: 0x0002, 0x1d7f: 0x0002, // Block 0x76, offset 0x1d80 0x1d80: 0x0002, 0x1d81: 0x0002, 0x1d82: 0x0002, 0x1d83: 0x0002, 0x1d84: 0x0002, 0x1d85: 0x0002, 0x1d86: 0x0002, 0x1d87: 0x0002, 0x1d88: 0x0002, 0x1d89: 0x0002, 0x1d8a: 0x0002, 0x1d8b: 0x0002, - 0x1d8c: 0x0002, 0x1d8d: 0x0002, 0x1d8e: 0x0002, 0x1d8f: 0x0002, 0x1d90: 0x0002, 0x1d91: 0x0002, + 0x1d8c: 0x0002, 0x1d8d: 0x0002, 0x1d8e: 0x0002, 0x1d90: 0x0002, 0x1d91: 0x0002, 0x1d92: 0x0002, 0x1d93: 0x0002, 0x1d94: 0x0002, 0x1d95: 0x0002, 0x1d96: 0x0002, 0x1d97: 0x0002, 0x1d98: 0x0002, 0x1d99: 0x0002, 0x1d9a: 0x0002, 0x1d9b: 0x0002, 0x1d9c: 0x0002, 0x1d9d: 0x0002, 0x1d9e: 0x0002, 0x1d9f: 0x0002, 0x1da0: 0x0002, 0x1da1: 0x0002, 0x1da2: 0x0002, 0x1da3: 0x0002, - 0x1da4: 0x0002, 0x1da5: 0x0002, - 0x1daf: 0x0002, + 0x1da4: 0x0002, 0x1da5: 0x0002, 0x1da6: 0x0002, 0x1da7: 0x0002, 0x1da8: 0x0002, 0x1da9: 0x0002, + 0x1daa: 0x0002, 0x1dab: 0x0002, 0x1dac: 0x0002, 0x1dad: 0x0002, 0x1dae: 0x0002, 0x1daf: 0x0002, 0x1db0: 0x0002, 0x1db1: 0x0002, 0x1db2: 0x0002, 0x1db3: 0x0002, 0x1db4: 0x0002, 0x1db5: 0x0002, 0x1db6: 0x0002, 0x1db7: 0x0002, 0x1db8: 0x0002, 0x1db9: 0x0002, 0x1dba: 0x0002, 0x1dbb: 0x0002, 0x1dbc: 0x0002, 0x1dbd: 0x0002, 0x1dbe: 0x0002, 0x1dbf: 0x0002, @@ -816,19 +838,19 @@ var stringWidthValues = [15744]uint8{ 0x1dcc: 0x0002, 0x1dcd: 0x0002, 0x1dce: 0x0002, 0x1dcf: 0x0002, 0x1dd0: 0x0002, 0x1dd1: 0x0002, 0x1dd2: 0x0002, 0x1dd3: 0x0002, 0x1dd4: 0x0002, 0x1dd5: 0x0002, 0x1dd6: 0x0002, 0x1dd7: 0x0002, 0x1dd8: 0x0002, 0x1dd9: 0x0002, 0x1dda: 0x0002, 0x1ddb: 0x0002, 0x1ddc: 0x0002, 0x1ddd: 0x0002, - 0x1dde: 0x0002, 0x1de0: 0x0002, 0x1de1: 0x0002, 0x1de2: 0x0002, 0x1de3: 0x0002, - 0x1de4: 0x0002, 0x1de5: 0x0002, 0x1de6: 0x0002, 0x1de7: 0x0002, 0x1de8: 0x0002, 0x1de9: 0x0002, - 0x1dea: 0x0002, 0x1deb: 0x0002, 0x1dec: 0x0002, 0x1ded: 0x0002, 0x1dee: 0x0002, 0x1def: 0x0002, + 0x1dde: 0x0002, 0x1ddf: 0x0002, 0x1de0: 0x0002, 0x1de1: 0x0002, 0x1de2: 0x0002, 0x1de3: 0x0002, + 0x1de4: 0x0002, 0x1de5: 0x0002, + 0x1def: 0x0002, 0x1df0: 0x0002, 0x1df1: 0x0002, 0x1df2: 0x0002, 0x1df3: 0x0002, 0x1df4: 0x0002, 0x1df5: 0x0002, 0x1df6: 0x0002, 0x1df7: 0x0002, 0x1df8: 0x0002, 0x1df9: 0x0002, 0x1dfa: 0x0002, 0x1dfb: 0x0002, 0x1dfc: 0x0002, 0x1dfd: 0x0002, 0x1dfe: 0x0002, 0x1dff: 0x0002, // Block 0x78, offset 0x1e00 0x1e00: 0x0002, 0x1e01: 0x0002, 0x1e02: 0x0002, 0x1e03: 0x0002, 0x1e04: 0x0002, 0x1e05: 0x0002, - 0x1e06: 0x0002, 0x1e07: 0x0002, 0x1e08: 0x0003, 0x1e09: 0x0003, 0x1e0a: 0x0003, 0x1e0b: 0x0003, - 0x1e0c: 0x0003, 0x1e0d: 0x0003, 0x1e0e: 0x0003, 0x1e0f: 0x0003, 0x1e10: 0x0002, 0x1e11: 0x0002, + 0x1e06: 0x0002, 0x1e07: 0x0002, 0x1e08: 0x0002, 0x1e09: 0x0002, 0x1e0a: 0x0002, 0x1e0b: 0x0002, + 0x1e0c: 0x0002, 0x1e0d: 0x0002, 0x1e0e: 0x0002, 0x1e0f: 0x0002, 0x1e10: 0x0002, 0x1e11: 0x0002, 0x1e12: 0x0002, 0x1e13: 0x0002, 0x1e14: 0x0002, 0x1e15: 0x0002, 0x1e16: 0x0002, 0x1e17: 0x0002, 0x1e18: 0x0002, 0x1e19: 0x0002, 0x1e1a: 0x0002, 0x1e1b: 0x0002, 0x1e1c: 0x0002, 0x1e1d: 0x0002, - 0x1e1e: 0x0002, 0x1e1f: 0x0002, 0x1e20: 0x0002, 0x1e21: 0x0002, 0x1e22: 0x0002, 0x1e23: 0x0002, + 0x1e1e: 0x0002, 0x1e20: 0x0002, 0x1e21: 0x0002, 0x1e22: 0x0002, 0x1e23: 0x0002, 0x1e24: 0x0002, 0x1e25: 0x0002, 0x1e26: 0x0002, 0x1e27: 0x0002, 0x1e28: 0x0002, 0x1e29: 0x0002, 0x1e2a: 0x0002, 0x1e2b: 0x0002, 0x1e2c: 0x0002, 0x1e2d: 0x0002, 0x1e2e: 0x0002, 0x1e2f: 0x0002, 0x1e30: 0x0002, 0x1e31: 0x0002, 0x1e32: 0x0002, 0x1e33: 0x0002, 0x1e34: 0x0002, 0x1e35: 0x0002, @@ -836,8 +858,8 @@ var stringWidthValues = [15744]uint8{ 0x1e3c: 0x0002, 0x1e3d: 0x0002, 0x1e3e: 0x0002, 0x1e3f: 0x0002, // Block 0x79, offset 0x1e40 0x1e40: 0x0002, 0x1e41: 0x0002, 0x1e42: 0x0002, 0x1e43: 0x0002, 0x1e44: 0x0002, 0x1e45: 0x0002, - 0x1e46: 0x0002, 0x1e47: 0x0002, 0x1e48: 0x0002, 0x1e49: 0x0002, 0x1e4a: 0x0002, 0x1e4b: 0x0002, - 0x1e4c: 0x0002, 0x1e50: 0x0002, 0x1e51: 0x0002, + 0x1e46: 0x0002, 0x1e47: 0x0002, 0x1e48: 0x0004, 0x1e49: 0x0004, 0x1e4a: 0x0004, 0x1e4b: 0x0004, + 0x1e4c: 0x0004, 0x1e4d: 0x0004, 0x1e4e: 0x0004, 0x1e4f: 0x0004, 0x1e50: 0x0002, 0x1e51: 0x0002, 0x1e52: 0x0002, 0x1e53: 0x0002, 0x1e54: 0x0002, 0x1e55: 0x0002, 0x1e56: 0x0002, 0x1e57: 0x0002, 0x1e58: 0x0002, 0x1e59: 0x0002, 0x1e5a: 0x0002, 0x1e5b: 0x0002, 0x1e5c: 0x0002, 0x1e5d: 0x0002, 0x1e5e: 0x0002, 0x1e5f: 0x0002, 0x1e60: 0x0002, 0x1e61: 0x0002, 0x1e62: 0x0002, 0x1e63: 0x0002, @@ -848,683 +870,774 @@ var stringWidthValues = [15744]uint8{ 0x1e7c: 0x0002, 0x1e7d: 0x0002, 0x1e7e: 0x0002, 0x1e7f: 0x0002, // Block 0x7a, offset 0x1e80 0x1e80: 0x0002, 0x1e81: 0x0002, 0x1e82: 0x0002, 0x1e83: 0x0002, 0x1e84: 0x0002, 0x1e85: 0x0002, - 0x1e86: 0x0002, + 0x1e86: 0x0002, 0x1e87: 0x0002, 0x1e88: 0x0002, 0x1e89: 0x0002, 0x1e8a: 0x0002, 0x1e8b: 0x0002, + 0x1e8c: 0x0002, 0x1e8d: 0x0002, 0x1e8e: 0x0002, 0x1e8f: 0x0002, 0x1e90: 0x0002, 0x1e91: 0x0002, + 0x1e92: 0x0002, 0x1e93: 0x0002, 0x1e94: 0x0002, 0x1e95: 0x0002, 0x1e96: 0x0002, 0x1e97: 0x000a, + 0x1e98: 0x0002, 0x1e99: 0x000a, 0x1e9a: 0x0002, 0x1e9b: 0x0002, 0x1e9c: 0x0002, 0x1e9d: 0x0002, + 0x1e9e: 0x0002, 0x1e9f: 0x0002, 0x1ea0: 0x0002, 0x1ea1: 0x0002, 0x1ea2: 0x0002, 0x1ea3: 0x0002, + 0x1ea4: 0x0002, 0x1ea5: 0x0002, 0x1ea6: 0x0002, 0x1ea7: 0x0002, 0x1ea8: 0x0002, 0x1ea9: 0x0002, + 0x1eaa: 0x0002, 0x1eab: 0x0002, 0x1eac: 0x0002, 0x1ead: 0x0002, 0x1eae: 0x0002, 0x1eaf: 0x0002, + 0x1eb0: 0x0002, 0x1eb1: 0x0002, 0x1eb2: 0x0002, 0x1eb3: 0x0002, 0x1eb4: 0x0002, 0x1eb5: 0x0002, + 0x1eb6: 0x0002, 0x1eb7: 0x0002, 0x1eb8: 0x0002, 0x1eb9: 0x0002, 0x1eba: 0x0002, 0x1ebb: 0x0002, + 0x1ebc: 0x0002, 0x1ebd: 0x0002, 0x1ebe: 0x0002, 0x1ebf: 0x0002, // Block 0x7b, offset 0x1ec0 - 0x1eef: 0x0001, - 0x1ef0: 0x0001, 0x1ef1: 0x0001, 0x1ef2: 0x0001, 0x1ef4: 0x0001, 0x1ef5: 0x0001, - 0x1ef6: 0x0001, 0x1ef7: 0x0001, 0x1ef8: 0x0001, 0x1ef9: 0x0001, 0x1efa: 0x0001, 0x1efb: 0x0001, - 0x1efc: 0x0001, 0x1efd: 0x0001, + 0x1ec0: 0x0002, 0x1ec1: 0x0002, 0x1ec2: 0x0002, 0x1ec3: 0x0002, 0x1ec4: 0x0002, 0x1ec5: 0x0002, + 0x1ec6: 0x0002, 0x1ec7: 0x0002, 0x1ec8: 0x0002, 0x1ec9: 0x0002, 0x1eca: 0x0002, 0x1ecb: 0x0002, + 0x1ecc: 0x0002, 0x1ed0: 0x0002, 0x1ed1: 0x0002, + 0x1ed2: 0x0002, 0x1ed3: 0x0002, 0x1ed4: 0x0002, 0x1ed5: 0x0002, 0x1ed6: 0x0002, 0x1ed7: 0x0002, + 0x1ed8: 0x0002, 0x1ed9: 0x0002, 0x1eda: 0x0002, 0x1edb: 0x0002, 0x1edc: 0x0002, 0x1edd: 0x0002, + 0x1ede: 0x0002, 0x1edf: 0x0002, 0x1ee0: 0x0002, 0x1ee1: 0x0002, 0x1ee2: 0x0002, 0x1ee3: 0x0002, + 0x1ee4: 0x0002, 0x1ee5: 0x0002, 0x1ee6: 0x0002, 0x1ee7: 0x0002, 0x1ee8: 0x0002, 0x1ee9: 0x0002, + 0x1eea: 0x0002, 0x1eeb: 0x0002, 0x1eec: 0x0002, 0x1eed: 0x0002, 0x1eee: 0x0002, 0x1eef: 0x0002, + 0x1ef0: 0x0002, 0x1ef1: 0x0002, 0x1ef2: 0x0002, 0x1ef3: 0x0002, 0x1ef4: 0x0002, 0x1ef5: 0x0002, + 0x1ef6: 0x0002, 0x1ef7: 0x0002, 0x1ef8: 0x0002, 0x1ef9: 0x0002, 0x1efa: 0x0002, 0x1efb: 0x0002, + 0x1efc: 0x0002, 0x1efd: 0x0002, 0x1efe: 0x0002, 0x1eff: 0x0002, // Block 0x7c, offset 0x1f00 - 0x1f1e: 0x0001, 0x1f1f: 0x0001, + 0x1f00: 0x0002, 0x1f01: 0x0002, 0x1f02: 0x0002, 0x1f03: 0x0002, 0x1f04: 0x0002, 0x1f05: 0x0002, + 0x1f06: 0x0002, // Block 0x7d, offset 0x1f40 - 0x1f70: 0x0001, 0x1f71: 0x0001, + 0x1f6f: 0x0001, + 0x1f70: 0x0001, 0x1f71: 0x0001, 0x1f72: 0x0001, 0x1f74: 0x0001, 0x1f75: 0x0001, + 0x1f76: 0x0001, 0x1f77: 0x0001, 0x1f78: 0x0001, 0x1f79: 0x0001, 0x1f7a: 0x0001, 0x1f7b: 0x0001, + 0x1f7c: 0x0001, 0x1f7d: 0x0001, // Block 0x7e, offset 0x1f80 - 0x1f82: 0x0001, - 0x1f86: 0x0001, 0x1f8b: 0x0001, - 0x1fa5: 0x0001, 0x1fa6: 0x0001, - 0x1fac: 0x0001, + 0x1f9e: 0x0001, 0x1f9f: 0x0001, // Block 0x7f, offset 0x1fc0 - 0x1fc4: 0x0001, 0x1fc5: 0x0001, - 0x1fe0: 0x0001, 0x1fe1: 0x0001, 0x1fe2: 0x0001, 0x1fe3: 0x0001, - 0x1fe4: 0x0001, 0x1fe5: 0x0001, 0x1fe6: 0x0001, 0x1fe7: 0x0001, 0x1fe8: 0x0001, 0x1fe9: 0x0001, - 0x1fea: 0x0001, 0x1feb: 0x0001, 0x1fec: 0x0001, 0x1fed: 0x0001, 0x1fee: 0x0001, 0x1fef: 0x0001, 0x1ff0: 0x0001, 0x1ff1: 0x0001, - 0x1fff: 0x0001, // Block 0x80, offset 0x2000 - 0x2026: 0x0001, 0x2027: 0x0001, 0x2028: 0x0001, 0x2029: 0x0001, - 0x202a: 0x0001, 0x202b: 0x0001, 0x202c: 0x0001, 0x202d: 0x0001, + 0x2002: 0x0001, + 0x2006: 0x0001, 0x200b: 0x0001, + 0x2025: 0x0001, 0x2026: 0x0001, + 0x202c: 0x0001, // Block 0x81, offset 0x2040 - 0x2047: 0x0001, 0x2048: 0x0001, 0x2049: 0x0001, 0x204a: 0x0001, 0x204b: 0x0001, - 0x204c: 0x0001, 0x204d: 0x0001, 0x204e: 0x0001, 0x204f: 0x0001, 0x2050: 0x0001, 0x2051: 0x0001, - 0x2060: 0x0002, 0x2061: 0x0002, 0x2062: 0x0002, 0x2063: 0x0002, - 0x2064: 0x0002, 0x2065: 0x0002, 0x2066: 0x0002, 0x2067: 0x0002, 0x2068: 0x0002, 0x2069: 0x0002, - 0x206a: 0x0002, 0x206b: 0x0002, 0x206c: 0x0002, 0x206d: 0x0002, 0x206e: 0x0002, 0x206f: 0x0002, - 0x2070: 0x0002, 0x2071: 0x0002, 0x2072: 0x0002, 0x2073: 0x0002, 0x2074: 0x0002, 0x2075: 0x0002, - 0x2076: 0x0002, 0x2077: 0x0002, 0x2078: 0x0002, 0x2079: 0x0002, 0x207a: 0x0002, 0x207b: 0x0002, - 0x207c: 0x0002, + 0x2044: 0x0001, 0x2045: 0x0001, + 0x2060: 0x0001, 0x2061: 0x0001, 0x2062: 0x0001, 0x2063: 0x0001, + 0x2064: 0x0001, 0x2065: 0x0001, 0x2066: 0x0001, 0x2067: 0x0001, 0x2068: 0x0001, 0x2069: 0x0001, + 0x206a: 0x0001, 0x206b: 0x0001, 0x206c: 0x0001, 0x206d: 0x0001, 0x206e: 0x0001, 0x206f: 0x0001, + 0x2070: 0x0001, 0x2071: 0x0001, + 0x207f: 0x0001, // Block 0x82, offset 0x2080 - 0x2080: 0x0001, 0x2081: 0x0001, 0x2082: 0x0001, - 0x20b3: 0x0001, - 0x20b6: 0x0001, 0x20b7: 0x0001, 0x20b8: 0x0001, 0x20b9: 0x0001, - 0x20bc: 0x0001, 0x20bd: 0x0001, + 0x20a6: 0x0001, 0x20a7: 0x0001, 0x20a8: 0x0001, 0x20a9: 0x0001, + 0x20aa: 0x0001, 0x20ab: 0x0001, 0x20ac: 0x0001, 0x20ad: 0x0001, // Block 0x83, offset 0x20c0 - 0x20e5: 0x0001, + 0x20c7: 0x0001, 0x20c8: 0x0001, 0x20c9: 0x0001, 0x20ca: 0x0001, 0x20cb: 0x0001, + 0x20cc: 0x0001, 0x20cd: 0x0001, 0x20ce: 0x0001, 0x20cf: 0x0001, 0x20d0: 0x0001, 0x20d1: 0x0001, + 0x20e0: 0x0002, 0x20e1: 0x0002, 0x20e2: 0x0002, 0x20e3: 0x0002, + 0x20e4: 0x0002, 0x20e5: 0x0002, 0x20e6: 0x0002, 0x20e7: 0x0002, 0x20e8: 0x0002, 0x20e9: 0x0002, + 0x20ea: 0x0002, 0x20eb: 0x0002, 0x20ec: 0x0002, 0x20ed: 0x0002, 0x20ee: 0x0002, 0x20ef: 0x0002, + 0x20f0: 0x0002, 0x20f1: 0x0002, 0x20f2: 0x0002, 0x20f3: 0x0002, 0x20f4: 0x0002, 0x20f5: 0x0002, + 0x20f6: 0x0002, 0x20f7: 0x0002, 0x20f8: 0x0002, 0x20f9: 0x0002, 0x20fa: 0x0002, 0x20fb: 0x0002, + 0x20fc: 0x0002, // Block 0x84, offset 0x2100 - 0x2129: 0x0001, - 0x212a: 0x0001, 0x212b: 0x0001, 0x212c: 0x0001, 0x212d: 0x0001, 0x212e: 0x0001, - 0x2131: 0x0001, 0x2132: 0x0001, 0x2135: 0x0001, - 0x2136: 0x0001, + 0x2100: 0x0001, 0x2101: 0x0001, 0x2102: 0x0001, + 0x2133: 0x0001, + 0x2136: 0x0001, 0x2137: 0x0001, 0x2138: 0x0001, 0x2139: 0x0001, + 0x213c: 0x0001, 0x213d: 0x0001, // Block 0x85, offset 0x2140 - 0x2143: 0x0001, - 0x214c: 0x0001, - 0x217c: 0x0001, + 0x2165: 0x0001, // Block 0x86, offset 0x2180 - 0x21b0: 0x0001, 0x21b2: 0x0001, 0x21b3: 0x0001, 0x21b4: 0x0001, - 0x21b7: 0x0001, 0x21b8: 0x0001, - 0x21be: 0x0001, 0x21bf: 0x0001, + 0x21a9: 0x0001, + 0x21aa: 0x0001, 0x21ab: 0x0001, 0x21ac: 0x0001, 0x21ad: 0x0001, 0x21ae: 0x0001, + 0x21b1: 0x0001, 0x21b2: 0x0001, 0x21b5: 0x0001, + 0x21b6: 0x0001, // Block 0x87, offset 0x21c0 - 0x21c1: 0x0001, - 0x21ec: 0x0001, 0x21ed: 0x0001, - 0x21f6: 0x0001, + 0x21c3: 0x0001, + 0x21cc: 0x0001, + 0x21fc: 0x0001, // Block 0x88, offset 0x2200 - 0x2225: 0x0001, 0x2228: 0x0001, - 0x222d: 0x0001, + 0x2230: 0x0001, 0x2232: 0x0001, 0x2233: 0x0001, 0x2234: 0x0001, + 0x2237: 0x0001, 0x2238: 0x0001, + 0x223e: 0x0001, 0x223f: 0x0001, // Block 0x89, offset 0x2240 - 0x2240: 0x0002, 0x2241: 0x0002, 0x2242: 0x0002, 0x2243: 0x0002, 0x2244: 0x0002, 0x2245: 0x0002, - 0x2246: 0x0002, 0x2247: 0x0002, 0x2248: 0x0002, 0x2249: 0x0002, 0x224a: 0x0002, 0x224b: 0x0002, - 0x224c: 0x0002, 0x224d: 0x0002, 0x224e: 0x0002, 0x224f: 0x0002, 0x2250: 0x0002, 0x2251: 0x0002, - 0x2252: 0x0002, 0x2253: 0x0002, 0x2254: 0x0002, 0x2255: 0x0002, 0x2256: 0x0002, 0x2257: 0x0002, - 0x2258: 0x0002, 0x2259: 0x0002, 0x225a: 0x0002, 0x225b: 0x0002, 0x225c: 0x0002, 0x225d: 0x0002, - 0x225e: 0x0002, 0x225f: 0x0002, 0x2260: 0x0002, 0x2261: 0x0002, 0x2262: 0x0002, 0x2263: 0x0002, + 0x2241: 0x0001, + 0x226c: 0x0001, 0x226d: 0x0001, + 0x2276: 0x0001, // Block 0x8a, offset 0x2280 - 0x229e: 0x0001, + 0x22a5: 0x0001, 0x22a8: 0x0001, + 0x22ad: 0x0001, // Block 0x8b, offset 0x22c0 - 0x22c0: 0x0001, 0x22c1: 0x0001, 0x22c2: 0x0001, 0x22c3: 0x0001, 0x22c4: 0x0001, 0x22c5: 0x0001, - 0x22c6: 0x0001, 0x22c7: 0x0001, 0x22c8: 0x0001, 0x22c9: 0x0001, 0x22ca: 0x0001, 0x22cb: 0x0001, - 0x22cc: 0x0001, 0x22cd: 0x0001, 0x22ce: 0x0001, 0x22cf: 0x0001, 0x22d0: 0x0002, 0x22d1: 0x0002, + 0x22c0: 0x0002, 0x22c1: 0x0002, 0x22c2: 0x0002, 0x22c3: 0x0002, 0x22c4: 0x0002, 0x22c5: 0x0002, + 0x22c6: 0x0002, 0x22c7: 0x0002, 0x22c8: 0x0002, 0x22c9: 0x0002, 0x22ca: 0x0002, 0x22cb: 0x0002, + 0x22cc: 0x0002, 0x22cd: 0x0002, 0x22ce: 0x0002, 0x22cf: 0x0002, 0x22d0: 0x0002, 0x22d1: 0x0002, 0x22d2: 0x0002, 0x22d3: 0x0002, 0x22d4: 0x0002, 0x22d5: 0x0002, 0x22d6: 0x0002, 0x22d7: 0x0002, - 0x22d8: 0x0002, 0x22d9: 0x0002, - 0x22e0: 0x0001, 0x22e1: 0x0001, 0x22e2: 0x0001, 0x22e3: 0x0001, - 0x22e4: 0x0001, 0x22e5: 0x0001, 0x22e6: 0x0001, 0x22e7: 0x0001, 0x22e8: 0x0001, 0x22e9: 0x0001, - 0x22ea: 0x0001, 0x22eb: 0x0001, 0x22ec: 0x0001, 0x22ed: 0x0001, 0x22ee: 0x0001, 0x22ef: 0x0001, - 0x22f0: 0x0002, 0x22f1: 0x0002, 0x22f2: 0x0002, 0x22f3: 0x0002, 0x22f4: 0x0002, 0x22f5: 0x0002, - 0x22f6: 0x0002, 0x22f7: 0x0002, 0x22f8: 0x0002, 0x22f9: 0x0002, 0x22fa: 0x0002, 0x22fb: 0x0002, - 0x22fc: 0x0002, 0x22fd: 0x0002, 0x22fe: 0x0002, 0x22ff: 0x0002, + 0x22d8: 0x0002, 0x22d9: 0x0002, 0x22da: 0x0002, 0x22db: 0x0002, 0x22dc: 0x0002, 0x22dd: 0x0002, + 0x22de: 0x0002, 0x22df: 0x0002, 0x22e0: 0x0002, 0x22e1: 0x0002, 0x22e2: 0x0002, 0x22e3: 0x0002, // Block 0x8c, offset 0x2300 - 0x2300: 0x0002, 0x2301: 0x0002, 0x2302: 0x0002, 0x2303: 0x0002, 0x2304: 0x0002, 0x2305: 0x0002, - 0x2306: 0x0002, 0x2307: 0x0002, 0x2308: 0x0002, 0x2309: 0x0002, 0x230a: 0x0002, 0x230b: 0x0002, - 0x230c: 0x0002, 0x230d: 0x0002, 0x230e: 0x0002, 0x230f: 0x0002, 0x2310: 0x0002, 0x2311: 0x0002, - 0x2312: 0x0002, 0x2314: 0x0002, 0x2315: 0x0002, 0x2316: 0x0002, 0x2317: 0x0002, - 0x2318: 0x0002, 0x2319: 0x0002, 0x231a: 0x0002, 0x231b: 0x0002, 0x231c: 0x0002, 0x231d: 0x0002, - 0x231e: 0x0002, 0x231f: 0x0002, 0x2320: 0x0002, 0x2321: 0x0002, 0x2322: 0x0002, 0x2323: 0x0002, - 0x2324: 0x0002, 0x2325: 0x0002, 0x2326: 0x0002, 0x2328: 0x0002, 0x2329: 0x0002, - 0x232a: 0x0002, 0x232b: 0x0002, + 0x231e: 0x0001, // Block 0x8d, offset 0x2340 - 0x2340: 0x0002, 0x2341: 0x0002, 0x2342: 0x0002, 0x2343: 0x0002, 0x2344: 0x0002, 0x2345: 0x0002, - 0x2346: 0x0002, 0x2347: 0x0002, 0x2348: 0x0002, 0x2349: 0x0002, 0x234a: 0x0002, 0x234b: 0x0002, - 0x234c: 0x0002, 0x234d: 0x0002, 0x234e: 0x0002, 0x234f: 0x0002, 0x2350: 0x0002, 0x2351: 0x0002, + 0x2340: 0x0001, 0x2341: 0x0001, 0x2342: 0x0001, 0x2343: 0x0001, 0x2344: 0x0001, 0x2345: 0x0001, + 0x2346: 0x0001, 0x2347: 0x0001, 0x2348: 0x0001, 0x2349: 0x0001, 0x234a: 0x0001, 0x234b: 0x0001, + 0x234c: 0x0001, 0x234d: 0x0001, 0x234e: 0x0001, 0x234f: 0x0001, 0x2350: 0x0002, 0x2351: 0x0002, 0x2352: 0x0002, 0x2353: 0x0002, 0x2354: 0x0002, 0x2355: 0x0002, 0x2356: 0x0002, 0x2357: 0x0002, - 0x2358: 0x0002, 0x2359: 0x0002, 0x235a: 0x0002, 0x235b: 0x0002, 0x235c: 0x0002, 0x235d: 0x0002, - 0x235e: 0x0002, 0x235f: 0x0002, 0x2360: 0x0002, + 0x2358: 0x0002, 0x2359: 0x0002, + 0x2360: 0x0001, 0x2361: 0x0001, 0x2362: 0x0001, 0x2363: 0x0001, + 0x2364: 0x0001, 0x2365: 0x0001, 0x2366: 0x0001, 0x2367: 0x0001, 0x2368: 0x0001, 0x2369: 0x0001, + 0x236a: 0x0001, 0x236b: 0x0001, 0x236c: 0x0001, 0x236d: 0x0001, 0x236e: 0x0001, 0x236f: 0x0001, + 0x2370: 0x0002, 0x2371: 0x0002, 0x2372: 0x0002, 0x2373: 0x0002, 0x2374: 0x0002, 0x2375: 0x0002, + 0x2376: 0x0002, 0x2377: 0x0002, 0x2378: 0x0002, 0x2379: 0x0002, 0x237a: 0x0002, 0x237b: 0x0002, + 0x237c: 0x0002, 0x237d: 0x0002, 0x237e: 0x0002, 0x237f: 0x0002, // Block 0x8e, offset 0x2380 - 0x23a0: 0x0002, 0x23a1: 0x0002, 0x23a2: 0x0002, 0x23a3: 0x0002, - 0x23a4: 0x0002, 0x23a5: 0x0002, 0x23a6: 0x0002, - 0x23b9: 0x0001, 0x23ba: 0x0001, 0x23bb: 0x0001, - 0x23be: 0x0001, 0x23bf: 0x0001, + 0x2380: 0x0002, 0x2381: 0x0002, 0x2382: 0x0002, 0x2383: 0x0002, 0x2384: 0x0002, 0x2385: 0x0002, + 0x2386: 0x0002, 0x2387: 0x0002, 0x2388: 0x0002, 0x2389: 0x0002, 0x238a: 0x0002, 0x238b: 0x0002, + 0x238c: 0x0002, 0x238d: 0x0002, 0x238e: 0x0002, 0x238f: 0x0002, 0x2390: 0x0002, 0x2391: 0x0002, + 0x2392: 0x0002, 0x2394: 0x0002, 0x2395: 0x0002, 0x2396: 0x0002, 0x2397: 0x0002, + 0x2398: 0x0002, 0x2399: 0x0002, 0x239a: 0x0002, 0x239b: 0x0002, 0x239c: 0x0002, 0x239d: 0x0002, + 0x239e: 0x0002, 0x239f: 0x0002, 0x23a0: 0x0002, 0x23a1: 0x0002, 0x23a2: 0x0002, 0x23a3: 0x0002, + 0x23a4: 0x0002, 0x23a5: 0x0002, 0x23a6: 0x0002, 0x23a8: 0x0002, 0x23a9: 0x0002, + 0x23aa: 0x0002, 0x23ab: 0x0002, // Block 0x8f, offset 0x23c0 - 0x23fd: 0x0001, + 0x23c0: 0x0002, 0x23c1: 0x0002, 0x23c2: 0x0002, 0x23c3: 0x0002, 0x23c4: 0x0002, 0x23c5: 0x0002, + 0x23c6: 0x0002, 0x23c7: 0x0002, 0x23c8: 0x0002, 0x23c9: 0x0002, 0x23ca: 0x0002, 0x23cb: 0x0002, + 0x23cc: 0x0002, 0x23cd: 0x0002, 0x23ce: 0x0002, 0x23cf: 0x0002, 0x23d0: 0x0002, 0x23d1: 0x0002, + 0x23d2: 0x0002, 0x23d3: 0x0002, 0x23d4: 0x0002, 0x23d5: 0x0002, 0x23d6: 0x0002, 0x23d7: 0x0002, + 0x23d8: 0x0002, 0x23d9: 0x0002, 0x23da: 0x0002, 0x23db: 0x0002, 0x23dc: 0x0002, 0x23dd: 0x0002, + 0x23de: 0x0002, 0x23df: 0x0002, 0x23e0: 0x0002, // Block 0x90, offset 0x2400 - 0x2420: 0x0001, + 0x2420: 0x0002, 0x2421: 0x0002, 0x2422: 0x0002, 0x2423: 0x0002, + 0x2424: 0x0002, 0x2425: 0x0002, 0x2426: 0x0002, + 0x2439: 0x0001, 0x243a: 0x0001, 0x243b: 0x0001, + 0x243e: 0x0001, 0x243f: 0x0001, // Block 0x91, offset 0x2440 - 0x2476: 0x0001, 0x2477: 0x0001, 0x2478: 0x0001, 0x2479: 0x0001, 0x247a: 0x0001, + 0x247d: 0x0001, // Block 0x92, offset 0x2480 - 0x2481: 0x0001, 0x2482: 0x0001, 0x2483: 0x0001, 0x2485: 0x0001, - 0x2486: 0x0001, - 0x248c: 0x0001, 0x248d: 0x0001, 0x248e: 0x0001, 0x248f: 0x0001, - 0x24b8: 0x0001, 0x24b9: 0x0001, 0x24ba: 0x0001, - 0x24bf: 0x0001, + 0x24a0: 0x0001, // Block 0x93, offset 0x24c0 - 0x24e5: 0x0001, 0x24e6: 0x0001, + 0x24f6: 0x0001, 0x24f7: 0x0001, 0x24f8: 0x0001, 0x24f9: 0x0001, 0x24fa: 0x0001, // Block 0x94, offset 0x2500 - 0x2524: 0x0001, 0x2525: 0x0001, 0x2526: 0x0001, 0x2527: 0x0001, + 0x2501: 0x0001, 0x2502: 0x0001, 0x2503: 0x0001, 0x2505: 0x0001, + 0x2506: 0x0001, + 0x250c: 0x0001, 0x250d: 0x0001, 0x250e: 0x0001, 0x250f: 0x0001, + 0x2538: 0x0001, 0x2539: 0x0001, 0x253a: 0x0001, + 0x253f: 0x0001, // Block 0x95, offset 0x2540 - 0x256b: 0x0001, 0x256c: 0x0001, + 0x2565: 0x0001, 0x2566: 0x0001, // Block 0x96, offset 0x2580 - 0x25bd: 0x0001, 0x25be: 0x0001, 0x25bf: 0x0001, + 0x25a4: 0x0001, 0x25a5: 0x0001, 0x25a6: 0x0001, 0x25a7: 0x0001, // Block 0x97, offset 0x25c0 - 0x25c6: 0x0001, 0x25c7: 0x0001, 0x25c8: 0x0001, 0x25c9: 0x0001, 0x25ca: 0x0001, 0x25cb: 0x0001, - 0x25cc: 0x0001, 0x25cd: 0x0001, 0x25ce: 0x0001, 0x25cf: 0x0001, 0x25d0: 0x0001, + 0x25eb: 0x0001, 0x25ec: 0x0001, // Block 0x98, offset 0x2600 - 0x2602: 0x0001, 0x2603: 0x0001, 0x2604: 0x0001, 0x2605: 0x0001, + 0x263d: 0x0001, 0x263e: 0x0001, 0x263f: 0x0001, // Block 0x99, offset 0x2640 - 0x2641: 0x0001, - 0x2678: 0x0001, 0x2679: 0x0001, 0x267a: 0x0001, 0x267b: 0x0001, - 0x267c: 0x0001, 0x267d: 0x0001, 0x267e: 0x0001, 0x267f: 0x0001, + 0x2646: 0x0001, 0x2647: 0x0001, 0x2648: 0x0001, 0x2649: 0x0001, 0x264a: 0x0001, 0x264b: 0x0001, + 0x264c: 0x0001, 0x264d: 0x0001, 0x264e: 0x0001, 0x264f: 0x0001, 0x2650: 0x0001, // Block 0x9a, offset 0x2680 - 0x2680: 0x0001, 0x2681: 0x0001, 0x2682: 0x0001, 0x2683: 0x0001, 0x2684: 0x0001, 0x2685: 0x0001, - 0x2686: 0x0001, - 0x26b0: 0x0001, 0x26b3: 0x0001, 0x26b4: 0x0001, - 0x26bf: 0x0001, + 0x2682: 0x0001, 0x2683: 0x0001, 0x2684: 0x0001, 0x2685: 0x0001, // Block 0x9b, offset 0x26c0 - 0x26c0: 0x0001, 0x26c1: 0x0001, - 0x26f3: 0x0001, 0x26f4: 0x0001, 0x26f5: 0x0001, - 0x26f6: 0x0001, 0x26f9: 0x0001, 0x26fa: 0x0001, - 0x26fd: 0x0001, + 0x26c1: 0x0001, + 0x26f8: 0x0001, 0x26f9: 0x0001, 0x26fa: 0x0001, 0x26fb: 0x0001, + 0x26fc: 0x0001, 0x26fd: 0x0001, 0x26fe: 0x0001, 0x26ff: 0x0001, // Block 0x9c, offset 0x2700 - 0x2702: 0x0001, - 0x270d: 0x0001, + 0x2700: 0x0001, 0x2701: 0x0001, 0x2702: 0x0001, 0x2703: 0x0001, 0x2704: 0x0001, 0x2705: 0x0001, + 0x2706: 0x0001, + 0x2730: 0x0001, 0x2733: 0x0001, 0x2734: 0x0001, + 0x273f: 0x0001, // Block 0x9d, offset 0x2740 - 0x2740: 0x0001, 0x2741: 0x0001, 0x2742: 0x0001, - 0x2767: 0x0001, 0x2768: 0x0001, 0x2769: 0x0001, - 0x276a: 0x0001, 0x276b: 0x0001, 0x276d: 0x0001, 0x276e: 0x0001, 0x276f: 0x0001, - 0x2770: 0x0001, 0x2771: 0x0001, 0x2772: 0x0001, 0x2773: 0x0001, 0x2774: 0x0001, + 0x2740: 0x0001, 0x2741: 0x0001, + 0x2773: 0x0001, 0x2774: 0x0001, 0x2775: 0x0001, + 0x2776: 0x0001, 0x2779: 0x0001, 0x277a: 0x0001, + 0x277d: 0x0001, // Block 0x9e, offset 0x2780 - 0x27b3: 0x0001, + 0x2782: 0x0001, + 0x278d: 0x0001, // Block 0x9f, offset 0x27c0 - 0x27c0: 0x0001, 0x27c1: 0x0001, - 0x27f6: 0x0001, 0x27f7: 0x0001, 0x27f8: 0x0001, 0x27f9: 0x0001, 0x27fa: 0x0001, 0x27fb: 0x0001, - 0x27fc: 0x0001, 0x27fd: 0x0001, 0x27fe: 0x0001, + 0x27c0: 0x0001, 0x27c1: 0x0001, 0x27c2: 0x0001, + 0x27e7: 0x0001, 0x27e8: 0x0001, 0x27e9: 0x0001, + 0x27ea: 0x0001, 0x27eb: 0x0001, 0x27ed: 0x0001, 0x27ee: 0x0001, 0x27ef: 0x0001, + 0x27f0: 0x0001, 0x27f1: 0x0001, 0x27f2: 0x0001, 0x27f3: 0x0001, 0x27f4: 0x0001, // Block 0xa0, offset 0x2800 - 0x2809: 0x0001, 0x280a: 0x0001, 0x280b: 0x0001, - 0x280c: 0x0001, 0x280f: 0x0001, + 0x2833: 0x0001, // Block 0xa1, offset 0x2840 - 0x286f: 0x0001, - 0x2870: 0x0001, 0x2871: 0x0001, 0x2874: 0x0001, - 0x2876: 0x0001, 0x2877: 0x0001, - 0x287e: 0x0001, + 0x2840: 0x0001, 0x2841: 0x0001, + 0x2876: 0x0001, 0x2877: 0x0001, 0x2878: 0x0001, 0x2879: 0x0001, 0x287a: 0x0001, 0x287b: 0x0001, + 0x287c: 0x0001, 0x287d: 0x0001, 0x287e: 0x0001, // Block 0xa2, offset 0x2880 - 0x289f: 0x0001, 0x28a3: 0x0001, - 0x28a4: 0x0001, 0x28a5: 0x0001, 0x28a6: 0x0001, 0x28a7: 0x0001, 0x28a8: 0x0001, 0x28a9: 0x0001, - 0x28aa: 0x0001, + 0x2889: 0x0001, 0x288a: 0x0001, 0x288b: 0x0001, + 0x288c: 0x0001, 0x288f: 0x0001, // Block 0xa3, offset 0x28c0 - 0x28c0: 0x0001, - 0x28e6: 0x0001, 0x28e7: 0x0001, 0x28e8: 0x0001, 0x28e9: 0x0001, - 0x28ea: 0x0001, 0x28eb: 0x0001, 0x28ec: 0x0001, - 0x28f0: 0x0001, 0x28f1: 0x0001, 0x28f2: 0x0001, 0x28f3: 0x0001, 0x28f4: 0x0001, + 0x28ef: 0x0001, + 0x28f0: 0x0001, 0x28f1: 0x0001, 0x28f4: 0x0001, + 0x28f6: 0x0001, 0x28f7: 0x0001, + 0x28fe: 0x0001, // Block 0xa4, offset 0x2900 - 0x2938: 0x0001, 0x2939: 0x0001, 0x293a: 0x0001, 0x293b: 0x0001, - 0x293c: 0x0001, 0x293d: 0x0001, 0x293e: 0x0001, 0x293f: 0x0001, + 0x291f: 0x0001, 0x2923: 0x0001, + 0x2924: 0x0001, 0x2925: 0x0001, 0x2926: 0x0001, 0x2927: 0x0001, 0x2928: 0x0001, 0x2929: 0x0001, + 0x292a: 0x0001, // Block 0xa5, offset 0x2940 - 0x2942: 0x0001, 0x2943: 0x0001, 0x2944: 0x0001, - 0x2946: 0x0001, - 0x295e: 0x0001, + 0x2940: 0x0001, + 0x2966: 0x0001, 0x2967: 0x0001, 0x2968: 0x0001, 0x2969: 0x0001, + 0x296a: 0x0001, 0x296b: 0x0001, 0x296c: 0x0001, + 0x2970: 0x0001, 0x2971: 0x0001, 0x2972: 0x0001, 0x2973: 0x0001, 0x2974: 0x0001, // Block 0xa6, offset 0x2980 - 0x29b3: 0x0001, 0x29b4: 0x0001, 0x29b5: 0x0001, - 0x29b6: 0x0001, 0x29b7: 0x0001, 0x29b8: 0x0001, 0x29ba: 0x0001, - 0x29bf: 0x0001, + 0x29b8: 0x0001, 0x29b9: 0x0001, 0x29ba: 0x0001, 0x29bb: 0x0001, + 0x29bc: 0x0001, 0x29bd: 0x0001, 0x29be: 0x0001, 0x29bf: 0x0001, // Block 0xa7, offset 0x29c0 - 0x29c0: 0x0001, 0x29c2: 0x0001, 0x29c3: 0x0001, + 0x29c2: 0x0001, 0x29c3: 0x0001, 0x29c4: 0x0001, + 0x29c6: 0x0001, + 0x29de: 0x0001, // Block 0xa8, offset 0x2a00 - 0x2a32: 0x0001, 0x2a33: 0x0001, 0x2a34: 0x0001, 0x2a35: 0x0001, - 0x2a3c: 0x0001, 0x2a3d: 0x0001, 0x2a3f: 0x0001, + 0x2a33: 0x0001, 0x2a34: 0x0001, 0x2a35: 0x0001, + 0x2a36: 0x0001, 0x2a37: 0x0001, 0x2a38: 0x0001, 0x2a3a: 0x0001, + 0x2a3f: 0x0001, // Block 0xa9, offset 0x2a40 - 0x2a40: 0x0001, - 0x2a5c: 0x0001, 0x2a5d: 0x0001, + 0x2a40: 0x0001, 0x2a42: 0x0001, 0x2a43: 0x0001, // Block 0xaa, offset 0x2a80 - 0x2ab3: 0x0001, 0x2ab4: 0x0001, 0x2ab5: 0x0001, - 0x2ab6: 0x0001, 0x2ab7: 0x0001, 0x2ab8: 0x0001, 0x2ab9: 0x0001, 0x2aba: 0x0001, - 0x2abd: 0x0001, 0x2abf: 0x0001, + 0x2ab2: 0x0001, 0x2ab3: 0x0001, 0x2ab4: 0x0001, 0x2ab5: 0x0001, + 0x2abc: 0x0001, 0x2abd: 0x0001, 0x2abf: 0x0001, // Block 0xab, offset 0x2ac0 0x2ac0: 0x0001, + 0x2adc: 0x0001, 0x2add: 0x0001, // Block 0xac, offset 0x2b00 - 0x2b2b: 0x0001, 0x2b2d: 0x0001, - 0x2b30: 0x0001, 0x2b31: 0x0001, 0x2b32: 0x0001, 0x2b33: 0x0001, 0x2b34: 0x0001, 0x2b35: 0x0001, - 0x2b37: 0x0001, + 0x2b33: 0x0001, 0x2b34: 0x0001, 0x2b35: 0x0001, + 0x2b36: 0x0001, 0x2b37: 0x0001, 0x2b38: 0x0001, 0x2b39: 0x0001, 0x2b3a: 0x0001, + 0x2b3d: 0x0001, 0x2b3f: 0x0001, // Block 0xad, offset 0x2b40 - 0x2b5d: 0x0001, - 0x2b5e: 0x0001, 0x2b5f: 0x0001, 0x2b62: 0x0001, 0x2b63: 0x0001, - 0x2b64: 0x0001, 0x2b65: 0x0001, 0x2b67: 0x0001, 0x2b68: 0x0001, 0x2b69: 0x0001, - 0x2b6a: 0x0001, 0x2b6b: 0x0001, + 0x2b40: 0x0001, // Block 0xae, offset 0x2b80 - 0x2baf: 0x0001, + 0x2bab: 0x0001, 0x2bad: 0x0001, 0x2bb0: 0x0001, 0x2bb1: 0x0001, 0x2bb2: 0x0001, 0x2bb3: 0x0001, 0x2bb4: 0x0001, 0x2bb5: 0x0001, - 0x2bb6: 0x0001, 0x2bb7: 0x0001, 0x2bb9: 0x0001, 0x2bba: 0x0001, + 0x2bb7: 0x0001, // Block 0xaf, offset 0x2bc0 - 0x2bfb: 0x0001, - 0x2bfc: 0x0001, 0x2bfe: 0x0001, + 0x2bdd: 0x0001, + 0x2bde: 0x0001, 0x2bdf: 0x0001, 0x2be2: 0x0001, 0x2be3: 0x0001, + 0x2be4: 0x0001, 0x2be5: 0x0001, 0x2be7: 0x0001, 0x2be8: 0x0001, 0x2be9: 0x0001, + 0x2bea: 0x0001, 0x2beb: 0x0001, // Block 0xb0, offset 0x2c00 - 0x2c03: 0x0001, + 0x2c2f: 0x0001, + 0x2c30: 0x0001, 0x2c31: 0x0001, 0x2c32: 0x0001, 0x2c33: 0x0001, 0x2c34: 0x0001, 0x2c35: 0x0001, + 0x2c36: 0x0001, 0x2c37: 0x0001, 0x2c39: 0x0001, 0x2c3a: 0x0001, // Block 0xb1, offset 0x2c40 - 0x2c54: 0x0001, 0x2c55: 0x0001, 0x2c56: 0x0001, 0x2c57: 0x0001, - 0x2c5a: 0x0001, 0x2c5b: 0x0001, - 0x2c60: 0x0001, + 0x2c7b: 0x0001, + 0x2c7c: 0x0001, 0x2c7e: 0x0001, // Block 0xb2, offset 0x2c80 - 0x2c81: 0x0001, 0x2c82: 0x0001, 0x2c83: 0x0001, 0x2c84: 0x0001, 0x2c85: 0x0001, - 0x2c86: 0x0001, 0x2c87: 0x0001, 0x2c88: 0x0001, 0x2c89: 0x0001, 0x2c8a: 0x0001, - 0x2cb3: 0x0001, 0x2cb4: 0x0001, 0x2cb5: 0x0001, - 0x2cb6: 0x0001, 0x2cb7: 0x0001, 0x2cb8: 0x0001, 0x2cbb: 0x0001, - 0x2cbc: 0x0001, 0x2cbd: 0x0001, 0x2cbe: 0x0001, + 0x2c83: 0x0001, // Block 0xb3, offset 0x2cc0 - 0x2cc7: 0x0001, - 0x2cd1: 0x0001, - 0x2cd2: 0x0001, 0x2cd3: 0x0001, 0x2cd4: 0x0001, 0x2cd5: 0x0001, 0x2cd6: 0x0001, - 0x2cd9: 0x0001, 0x2cda: 0x0001, 0x2cdb: 0x0001, + 0x2cd4: 0x0001, 0x2cd5: 0x0001, 0x2cd6: 0x0001, 0x2cd7: 0x0001, + 0x2cda: 0x0001, 0x2cdb: 0x0001, + 0x2ce0: 0x0001, // Block 0xb4, offset 0x2d00 - 0x2d0a: 0x0001, 0x2d0b: 0x0001, - 0x2d0c: 0x0001, 0x2d0d: 0x0001, 0x2d0e: 0x0001, 0x2d0f: 0x0001, 0x2d10: 0x0001, 0x2d11: 0x0001, - 0x2d12: 0x0001, 0x2d13: 0x0001, 0x2d14: 0x0001, 0x2d15: 0x0001, 0x2d16: 0x0001, - 0x2d18: 0x0001, 0x2d19: 0x0001, + 0x2d01: 0x0001, 0x2d02: 0x0001, 0x2d03: 0x0001, 0x2d04: 0x0001, 0x2d05: 0x0001, + 0x2d06: 0x0001, 0x2d07: 0x0001, 0x2d08: 0x0001, 0x2d09: 0x0001, 0x2d0a: 0x0001, + 0x2d33: 0x0001, 0x2d34: 0x0001, 0x2d35: 0x0001, + 0x2d36: 0x0001, 0x2d37: 0x0001, 0x2d38: 0x0001, 0x2d3b: 0x0001, + 0x2d3c: 0x0001, 0x2d3d: 0x0001, 0x2d3e: 0x0001, // Block 0xb5, offset 0x2d40 - 0x2d70: 0x0001, 0x2d71: 0x0001, 0x2d72: 0x0001, 0x2d73: 0x0001, 0x2d74: 0x0001, 0x2d75: 0x0001, - 0x2d76: 0x0001, 0x2d78: 0x0001, 0x2d79: 0x0001, 0x2d7a: 0x0001, 0x2d7b: 0x0001, - 0x2d7c: 0x0001, 0x2d7d: 0x0001, 0x2d7f: 0x0001, + 0x2d47: 0x0001, + 0x2d51: 0x0001, + 0x2d52: 0x0001, 0x2d53: 0x0001, 0x2d54: 0x0001, 0x2d55: 0x0001, 0x2d56: 0x0001, + 0x2d59: 0x0001, 0x2d5a: 0x0001, 0x2d5b: 0x0001, // Block 0xb6, offset 0x2d80 - 0x2d92: 0x0001, 0x2d93: 0x0001, 0x2d94: 0x0001, 0x2d95: 0x0001, 0x2d96: 0x0001, 0x2d97: 0x0001, - 0x2d98: 0x0001, 0x2d99: 0x0001, 0x2d9a: 0x0001, 0x2d9b: 0x0001, 0x2d9c: 0x0001, 0x2d9d: 0x0001, - 0x2d9e: 0x0001, 0x2d9f: 0x0001, 0x2da0: 0x0001, 0x2da1: 0x0001, 0x2da2: 0x0001, 0x2da3: 0x0001, - 0x2da4: 0x0001, 0x2da5: 0x0001, 0x2da6: 0x0001, 0x2da7: 0x0001, - 0x2daa: 0x0001, 0x2dab: 0x0001, 0x2dac: 0x0001, 0x2dad: 0x0001, 0x2dae: 0x0001, 0x2daf: 0x0001, - 0x2db0: 0x0001, 0x2db2: 0x0001, 0x2db3: 0x0001, 0x2db5: 0x0001, - 0x2db6: 0x0001, + 0x2d8a: 0x0001, 0x2d8b: 0x0001, + 0x2d8c: 0x0001, 0x2d8d: 0x0001, 0x2d8e: 0x0001, 0x2d8f: 0x0001, 0x2d90: 0x0001, 0x2d91: 0x0001, + 0x2d92: 0x0001, 0x2d93: 0x0001, 0x2d94: 0x0001, 0x2d95: 0x0001, 0x2d96: 0x0001, + 0x2d98: 0x0001, 0x2d99: 0x0001, // Block 0xb7, offset 0x2dc0 - 0x2df1: 0x0001, 0x2df2: 0x0001, 0x2df3: 0x0001, 0x2df4: 0x0001, 0x2df5: 0x0001, - 0x2df6: 0x0001, 0x2dfa: 0x0001, + 0x2df0: 0x0001, 0x2df1: 0x0001, 0x2df2: 0x0001, 0x2df3: 0x0001, 0x2df4: 0x0001, 0x2df5: 0x0001, + 0x2df6: 0x0001, 0x2df8: 0x0001, 0x2df9: 0x0001, 0x2dfa: 0x0001, 0x2dfb: 0x0001, 0x2dfc: 0x0001, 0x2dfd: 0x0001, 0x2dff: 0x0001, // Block 0xb8, offset 0x2e00 - 0x2e00: 0x0001, 0x2e01: 0x0001, 0x2e02: 0x0001, 0x2e03: 0x0001, 0x2e04: 0x0001, 0x2e05: 0x0001, - 0x2e07: 0x0001, + 0x2e12: 0x0001, 0x2e13: 0x0001, 0x2e14: 0x0001, 0x2e15: 0x0001, 0x2e16: 0x0001, 0x2e17: 0x0001, + 0x2e18: 0x0001, 0x2e19: 0x0001, 0x2e1a: 0x0001, 0x2e1b: 0x0001, 0x2e1c: 0x0001, 0x2e1d: 0x0001, + 0x2e1e: 0x0001, 0x2e1f: 0x0001, 0x2e20: 0x0001, 0x2e21: 0x0001, 0x2e22: 0x0001, 0x2e23: 0x0001, + 0x2e24: 0x0001, 0x2e25: 0x0001, 0x2e26: 0x0001, 0x2e27: 0x0001, + 0x2e2a: 0x0001, 0x2e2b: 0x0001, 0x2e2c: 0x0001, 0x2e2d: 0x0001, 0x2e2e: 0x0001, 0x2e2f: 0x0001, + 0x2e30: 0x0001, 0x2e32: 0x0001, 0x2e33: 0x0001, 0x2e35: 0x0001, + 0x2e36: 0x0001, // Block 0xb9, offset 0x2e40 - 0x2e50: 0x0001, 0x2e51: 0x0001, - 0x2e55: 0x0001, 0x2e57: 0x0001, + 0x2e71: 0x0001, 0x2e72: 0x0001, 0x2e73: 0x0001, 0x2e74: 0x0001, 0x2e75: 0x0001, + 0x2e76: 0x0001, 0x2e7a: 0x0001, + 0x2e7c: 0x0001, 0x2e7d: 0x0001, 0x2e7f: 0x0001, // Block 0xba, offset 0x2e80 - 0x2eb3: 0x0001, 0x2eb4: 0x0001, + 0x2e80: 0x0001, 0x2e81: 0x0001, 0x2e82: 0x0001, 0x2e83: 0x0001, 0x2e84: 0x0001, 0x2e85: 0x0001, + 0x2e87: 0x0001, // Block 0xbb, offset 0x2ec0 - 0x2ec0: 0x0001, 0x2ec1: 0x0001, - 0x2ef6: 0x0001, 0x2ef7: 0x0001, 0x2ef8: 0x0001, 0x2ef9: 0x0001, 0x2efa: 0x0001, + 0x2ed0: 0x0001, 0x2ed1: 0x0001, + 0x2ed5: 0x0001, 0x2ed7: 0x0001, // Block 0xbc, offset 0x2f00 - 0x2f00: 0x0001, 0x2f02: 0x0001, + 0x2f33: 0x0001, 0x2f34: 0x0001, // Block 0xbd, offset 0x2f40 - 0x2f40: 0x0001, - 0x2f47: 0x0001, 0x2f48: 0x0001, 0x2f49: 0x0001, 0x2f4a: 0x0001, 0x2f4b: 0x0001, - 0x2f4c: 0x0001, 0x2f4d: 0x0001, 0x2f4e: 0x0001, 0x2f4f: 0x0001, 0x2f50: 0x0001, 0x2f51: 0x0001, - 0x2f52: 0x0001, 0x2f53: 0x0001, 0x2f54: 0x0001, 0x2f55: 0x0001, + 0x2f40: 0x0001, 0x2f41: 0x0001, + 0x2f76: 0x0001, 0x2f77: 0x0001, 0x2f78: 0x0001, 0x2f79: 0x0001, 0x2f7a: 0x0001, // Block 0xbe, offset 0x2f80 - 0x2fb0: 0x0001, 0x2fb1: 0x0001, 0x2fb2: 0x0001, 0x2fb3: 0x0001, 0x2fb4: 0x0001, + 0x2f80: 0x0001, 0x2f82: 0x0001, // Block 0xbf, offset 0x2fc0 - 0x2ff0: 0x0001, 0x2ff1: 0x0001, 0x2ff2: 0x0001, 0x2ff3: 0x0001, 0x2ff4: 0x0001, 0x2ff5: 0x0001, - 0x2ff6: 0x0001, + 0x2fc0: 0x0001, + 0x2fc7: 0x0001, 0x2fc8: 0x0001, 0x2fc9: 0x0001, 0x2fca: 0x0001, 0x2fcb: 0x0001, + 0x2fcc: 0x0001, 0x2fcd: 0x0001, 0x2fce: 0x0001, 0x2fcf: 0x0001, 0x2fd0: 0x0001, 0x2fd1: 0x0001, + 0x2fd2: 0x0001, 0x2fd3: 0x0001, 0x2fd4: 0x0001, 0x2fd5: 0x0001, // Block 0xc0, offset 0x3000 - 0x300f: 0x0001, + 0x3030: 0x0001, 0x3031: 0x0001, 0x3032: 0x0001, 0x3033: 0x0001, 0x3034: 0x0001, // Block 0xc1, offset 0x3040 - 0x304f: 0x0001, 0x3050: 0x0001, 0x3051: 0x0001, - 0x3052: 0x0001, + 0x3070: 0x0001, 0x3071: 0x0001, 0x3072: 0x0001, 0x3073: 0x0001, 0x3074: 0x0001, 0x3075: 0x0001, + 0x3076: 0x0001, // Block 0xc2, offset 0x3080 - 0x30a0: 0x0002, 0x30a1: 0x0002, 0x30a2: 0x0002, 0x30a3: 0x0002, - 0x30a4: 0x0001, - 0x30b0: 0x0002, 0x30b1: 0x0002, 0x30b2: 0x0002, 0x30b3: 0x0002, 0x30b4: 0x0002, 0x30b5: 0x0002, - 0x30b6: 0x0002, + 0x308f: 0x0001, // Block 0xc3, offset 0x30c0 - 0x30c0: 0x0002, 0x30c1: 0x0002, 0x30c2: 0x0002, 0x30c3: 0x0002, 0x30c4: 0x0002, 0x30c5: 0x0002, - 0x30c6: 0x0002, 0x30c7: 0x0002, 0x30c8: 0x0002, 0x30c9: 0x0002, 0x30ca: 0x0002, 0x30cb: 0x0002, - 0x30cc: 0x0002, 0x30cd: 0x0002, 0x30ce: 0x0002, 0x30cf: 0x0002, 0x30d0: 0x0002, 0x30d1: 0x0002, - 0x30d2: 0x0002, 0x30d3: 0x0002, 0x30d4: 0x0002, 0x30d5: 0x0002, - 0x30ff: 0x0002, + 0x30cf: 0x0001, 0x30d0: 0x0001, 0x30d1: 0x0001, + 0x30d2: 0x0001, // Block 0xc4, offset 0x3100 - 0x3100: 0x0002, 0x3101: 0x0002, 0x3102: 0x0002, 0x3103: 0x0002, 0x3104: 0x0002, 0x3105: 0x0002, - 0x3106: 0x0002, 0x3107: 0x0002, 0x3108: 0x0002, 0x3109: 0x0002, 0x310a: 0x0002, 0x310b: 0x0002, - 0x310c: 0x0002, 0x310d: 0x0002, 0x310e: 0x0002, 0x310f: 0x0002, 0x3110: 0x0002, 0x3111: 0x0002, - 0x3112: 0x0002, 0x3113: 0x0002, 0x3114: 0x0002, 0x3115: 0x0002, 0x3116: 0x0002, 0x3117: 0x0002, - 0x3118: 0x0002, 0x3119: 0x0002, 0x311a: 0x0002, 0x311b: 0x0002, 0x311c: 0x0002, 0x311d: 0x0002, - 0x311e: 0x0002, + 0x3120: 0x0002, 0x3121: 0x0002, 0x3122: 0x0002, 0x3123: 0x0002, + 0x3124: 0x0001, + 0x3130: 0x0002, 0x3131: 0x0002, 0x3132: 0x0002, 0x3133: 0x0002, 0x3134: 0x0002, 0x3135: 0x0002, + 0x3136: 0x0002, // Block 0xc5, offset 0x3140 0x3140: 0x0002, 0x3141: 0x0002, 0x3142: 0x0002, 0x3143: 0x0002, 0x3144: 0x0002, 0x3145: 0x0002, 0x3146: 0x0002, 0x3147: 0x0002, 0x3148: 0x0002, 0x3149: 0x0002, 0x314a: 0x0002, 0x314b: 0x0002, 0x314c: 0x0002, 0x314d: 0x0002, 0x314e: 0x0002, 0x314f: 0x0002, 0x3150: 0x0002, 0x3151: 0x0002, - 0x3152: 0x0002, 0x3153: 0x0002, 0x3154: 0x0002, 0x3155: 0x0002, 0x3156: 0x0002, 0x3157: 0x0002, - 0x3158: 0x0002, 0x3159: 0x0002, 0x315a: 0x0002, 0x315b: 0x0002, 0x315c: 0x0002, 0x315d: 0x0002, - 0x315e: 0x0002, 0x315f: 0x0002, 0x3160: 0x0002, 0x3161: 0x0002, 0x3162: 0x0002, 0x3163: 0x0002, - 0x3164: 0x0002, 0x3165: 0x0002, 0x3166: 0x0002, 0x3167: 0x0002, 0x3168: 0x0002, 0x3169: 0x0002, - 0x316a: 0x0002, 0x316b: 0x0002, 0x316c: 0x0002, 0x316d: 0x0002, 0x316e: 0x0002, 0x316f: 0x0002, - 0x3170: 0x0002, 0x3171: 0x0002, 0x3172: 0x0002, + 0x3152: 0x0002, 0x3153: 0x0002, 0x3154: 0x0002, 0x3155: 0x0002, + 0x317f: 0x0002, // Block 0xc6, offset 0x3180 - 0x31b0: 0x0002, 0x31b1: 0x0002, 0x31b2: 0x0002, 0x31b3: 0x0002, 0x31b5: 0x0002, - 0x31b6: 0x0002, 0x31b7: 0x0002, 0x31b8: 0x0002, 0x31b9: 0x0002, 0x31ba: 0x0002, 0x31bb: 0x0002, - 0x31bd: 0x0002, 0x31be: 0x0002, + 0x3180: 0x0002, 0x3181: 0x0002, 0x3182: 0x0002, 0x3183: 0x0002, 0x3184: 0x0002, 0x3185: 0x0002, + 0x3186: 0x0002, 0x3187: 0x0002, 0x3188: 0x0002, 0x3189: 0x0002, 0x318a: 0x0002, 0x318b: 0x0002, + 0x318c: 0x0002, 0x318d: 0x0002, 0x318e: 0x0002, 0x318f: 0x0002, 0x3190: 0x0002, 0x3191: 0x0002, + 0x3192: 0x0002, 0x3193: 0x0002, 0x3194: 0x0002, 0x3195: 0x0002, 0x3196: 0x0002, 0x3197: 0x0002, + 0x3198: 0x0002, 0x3199: 0x0002, 0x319a: 0x0002, 0x319b: 0x0002, 0x319c: 0x0002, 0x319d: 0x0002, + 0x319e: 0x0002, // Block 0xc7, offset 0x31c0 0x31c0: 0x0002, 0x31c1: 0x0002, 0x31c2: 0x0002, 0x31c3: 0x0002, 0x31c4: 0x0002, 0x31c5: 0x0002, 0x31c6: 0x0002, 0x31c7: 0x0002, 0x31c8: 0x0002, 0x31c9: 0x0002, 0x31ca: 0x0002, 0x31cb: 0x0002, 0x31cc: 0x0002, 0x31cd: 0x0002, 0x31ce: 0x0002, 0x31cf: 0x0002, 0x31d0: 0x0002, 0x31d1: 0x0002, 0x31d2: 0x0002, 0x31d3: 0x0002, 0x31d4: 0x0002, 0x31d5: 0x0002, 0x31d6: 0x0002, 0x31d7: 0x0002, 0x31d8: 0x0002, 0x31d9: 0x0002, 0x31da: 0x0002, 0x31db: 0x0002, 0x31dc: 0x0002, 0x31dd: 0x0002, - 0x31de: 0x0002, 0x31df: 0x0002, 0x31e0: 0x0002, 0x31e1: 0x0002, 0x31e2: 0x0002, - 0x31f2: 0x0002, + 0x31de: 0x0002, 0x31df: 0x0002, 0x31e0: 0x0002, 0x31e1: 0x0002, 0x31e2: 0x0002, 0x31e3: 0x0002, + 0x31e4: 0x0002, 0x31e5: 0x0002, 0x31e6: 0x0002, 0x31e7: 0x0002, 0x31e8: 0x0002, 0x31e9: 0x0002, + 0x31ea: 0x0002, 0x31eb: 0x0002, 0x31ec: 0x0002, 0x31ed: 0x0002, 0x31ee: 0x0002, 0x31ef: 0x0002, + 0x31f0: 0x0002, 0x31f1: 0x0002, 0x31f2: 0x0002, // Block 0xc8, offset 0x3200 - 0x3210: 0x0002, 0x3211: 0x0002, - 0x3212: 0x0002, 0x3215: 0x0002, - 0x3224: 0x0002, 0x3225: 0x0002, 0x3226: 0x0002, 0x3227: 0x0002, - 0x3230: 0x0002, 0x3231: 0x0002, 0x3232: 0x0002, 0x3233: 0x0002, 0x3234: 0x0002, 0x3235: 0x0002, + 0x3230: 0x0002, 0x3231: 0x0002, 0x3232: 0x0002, 0x3233: 0x0002, 0x3235: 0x0002, 0x3236: 0x0002, 0x3237: 0x0002, 0x3238: 0x0002, 0x3239: 0x0002, 0x323a: 0x0002, 0x323b: 0x0002, - 0x323c: 0x0002, 0x323d: 0x0002, 0x323e: 0x0002, 0x323f: 0x0002, + 0x323d: 0x0002, 0x323e: 0x0002, // Block 0xc9, offset 0x3240 0x3240: 0x0002, 0x3241: 0x0002, 0x3242: 0x0002, 0x3243: 0x0002, 0x3244: 0x0002, 0x3245: 0x0002, 0x3246: 0x0002, 0x3247: 0x0002, 0x3248: 0x0002, 0x3249: 0x0002, 0x324a: 0x0002, 0x324b: 0x0002, 0x324c: 0x0002, 0x324d: 0x0002, 0x324e: 0x0002, 0x324f: 0x0002, 0x3250: 0x0002, 0x3251: 0x0002, 0x3252: 0x0002, 0x3253: 0x0002, 0x3254: 0x0002, 0x3255: 0x0002, 0x3256: 0x0002, 0x3257: 0x0002, 0x3258: 0x0002, 0x3259: 0x0002, 0x325a: 0x0002, 0x325b: 0x0002, 0x325c: 0x0002, 0x325d: 0x0002, - 0x325e: 0x0002, 0x325f: 0x0002, 0x3260: 0x0002, 0x3261: 0x0002, 0x3262: 0x0002, 0x3263: 0x0002, - 0x3264: 0x0002, 0x3265: 0x0002, 0x3266: 0x0002, 0x3267: 0x0002, 0x3268: 0x0002, 0x3269: 0x0002, - 0x326a: 0x0002, 0x326b: 0x0002, 0x326c: 0x0002, 0x326d: 0x0002, 0x326e: 0x0002, 0x326f: 0x0002, - 0x3270: 0x0002, 0x3271: 0x0002, 0x3272: 0x0002, 0x3273: 0x0002, 0x3274: 0x0002, 0x3275: 0x0002, - 0x3276: 0x0002, 0x3277: 0x0002, 0x3278: 0x0002, 0x3279: 0x0002, 0x327a: 0x0002, 0x327b: 0x0002, + 0x325e: 0x0002, 0x325f: 0x0002, 0x3260: 0x0002, 0x3261: 0x0002, 0x3262: 0x0002, + 0x3272: 0x0002, // Block 0xca, offset 0x3280 - 0x329d: 0x0001, - 0x329e: 0x0001, 0x32a0: 0x0001, 0x32a1: 0x0001, 0x32a2: 0x0001, 0x32a3: 0x0001, + 0x3290: 0x0002, 0x3291: 0x0002, + 0x3292: 0x0002, 0x3295: 0x0002, + 0x32a4: 0x0002, 0x32a5: 0x0002, 0x32a6: 0x0002, 0x32a7: 0x0002, + 0x32b0: 0x0002, 0x32b1: 0x0002, 0x32b2: 0x0002, 0x32b3: 0x0002, 0x32b4: 0x0002, 0x32b5: 0x0002, + 0x32b6: 0x0002, 0x32b7: 0x0002, 0x32b8: 0x0002, 0x32b9: 0x0002, 0x32ba: 0x0002, 0x32bb: 0x0002, + 0x32bc: 0x0002, 0x32bd: 0x0002, 0x32be: 0x0002, 0x32bf: 0x0002, // Block 0xcb, offset 0x32c0 - 0x32c0: 0x0001, 0x32c1: 0x0001, 0x32c2: 0x0001, 0x32c3: 0x0001, 0x32c4: 0x0001, 0x32c5: 0x0001, - 0x32c6: 0x0001, 0x32c7: 0x0001, 0x32c8: 0x0001, 0x32c9: 0x0001, 0x32ca: 0x0001, 0x32cb: 0x0001, - 0x32cc: 0x0001, 0x32cd: 0x0001, 0x32ce: 0x0001, 0x32cf: 0x0001, 0x32d0: 0x0001, 0x32d1: 0x0001, - 0x32d2: 0x0001, 0x32d3: 0x0001, 0x32d4: 0x0001, 0x32d5: 0x0001, 0x32d6: 0x0001, 0x32d7: 0x0001, - 0x32d8: 0x0001, 0x32d9: 0x0001, 0x32da: 0x0001, 0x32db: 0x0001, 0x32dc: 0x0001, 0x32dd: 0x0001, - 0x32de: 0x0001, 0x32df: 0x0001, 0x32e0: 0x0001, 0x32e1: 0x0001, 0x32e2: 0x0001, 0x32e3: 0x0001, - 0x32e4: 0x0001, 0x32e5: 0x0001, 0x32e6: 0x0001, 0x32e7: 0x0001, 0x32e8: 0x0001, 0x32e9: 0x0001, - 0x32ea: 0x0001, 0x32eb: 0x0001, 0x32ec: 0x0001, 0x32ed: 0x0001, - 0x32f0: 0x0001, 0x32f1: 0x0001, 0x32f2: 0x0001, 0x32f3: 0x0001, 0x32f4: 0x0001, 0x32f5: 0x0001, - 0x32f6: 0x0001, 0x32f7: 0x0001, 0x32f8: 0x0001, 0x32f9: 0x0001, 0x32fa: 0x0001, 0x32fb: 0x0001, - 0x32fc: 0x0001, 0x32fd: 0x0001, 0x32fe: 0x0001, 0x32ff: 0x0001, + 0x32c0: 0x0002, 0x32c1: 0x0002, 0x32c2: 0x0002, 0x32c3: 0x0002, 0x32c4: 0x0002, 0x32c5: 0x0002, + 0x32c6: 0x0002, 0x32c7: 0x0002, 0x32c8: 0x0002, 0x32c9: 0x0002, 0x32ca: 0x0002, 0x32cb: 0x0002, + 0x32cc: 0x0002, 0x32cd: 0x0002, 0x32ce: 0x0002, 0x32cf: 0x0002, 0x32d0: 0x0002, 0x32d1: 0x0002, + 0x32d2: 0x0002, 0x32d3: 0x0002, 0x32d4: 0x0002, 0x32d5: 0x0002, 0x32d6: 0x0002, 0x32d7: 0x0002, + 0x32d8: 0x0002, 0x32d9: 0x0002, 0x32da: 0x0002, 0x32db: 0x0002, 0x32dc: 0x0002, 0x32dd: 0x0002, + 0x32de: 0x0002, 0x32df: 0x0002, 0x32e0: 0x0002, 0x32e1: 0x0002, 0x32e2: 0x0002, 0x32e3: 0x0002, + 0x32e4: 0x0002, 0x32e5: 0x0002, 0x32e6: 0x0002, 0x32e7: 0x0002, 0x32e8: 0x0002, 0x32e9: 0x0002, + 0x32ea: 0x0002, 0x32eb: 0x0002, 0x32ec: 0x0002, 0x32ed: 0x0002, 0x32ee: 0x0002, 0x32ef: 0x0002, + 0x32f0: 0x0002, 0x32f1: 0x0002, 0x32f2: 0x0002, 0x32f3: 0x0002, 0x32f4: 0x0002, 0x32f5: 0x0002, + 0x32f6: 0x0002, 0x32f7: 0x0002, 0x32f8: 0x0002, 0x32f9: 0x0002, 0x32fa: 0x0002, 0x32fb: 0x0002, // Block 0xcc, offset 0x3300 - 0x3300: 0x0001, 0x3301: 0x0001, 0x3302: 0x0001, 0x3303: 0x0001, 0x3304: 0x0001, 0x3305: 0x0001, - 0x3306: 0x0001, + 0x331d: 0x0001, + 0x331e: 0x0001, 0x3320: 0x0001, 0x3321: 0x0001, 0x3322: 0x0001, 0x3323: 0x0001, // Block 0xcd, offset 0x3340 - 0x3367: 0x0001, 0x3368: 0x0001, 0x3369: 0x0001, - 0x3373: 0x0001, 0x3374: 0x0001, 0x3375: 0x0001, + 0x3340: 0x0001, 0x3341: 0x0001, 0x3342: 0x0001, 0x3343: 0x0001, 0x3344: 0x0001, 0x3345: 0x0001, + 0x3346: 0x0001, 0x3347: 0x0001, 0x3348: 0x0001, 0x3349: 0x0001, 0x334a: 0x0001, 0x334b: 0x0001, + 0x334c: 0x0001, 0x334d: 0x0001, 0x334e: 0x0001, 0x334f: 0x0001, 0x3350: 0x0001, 0x3351: 0x0001, + 0x3352: 0x0001, 0x3353: 0x0001, 0x3354: 0x0001, 0x3355: 0x0001, 0x3356: 0x0001, 0x3357: 0x0001, + 0x3358: 0x0001, 0x3359: 0x0001, 0x335a: 0x0001, 0x335b: 0x0001, 0x335c: 0x0001, 0x335d: 0x0001, + 0x335e: 0x0001, 0x335f: 0x0001, 0x3360: 0x0001, 0x3361: 0x0001, 0x3362: 0x0001, 0x3363: 0x0001, + 0x3364: 0x0001, 0x3365: 0x0001, 0x3366: 0x0001, 0x3367: 0x0001, 0x3368: 0x0001, 0x3369: 0x0001, + 0x336a: 0x0001, 0x336b: 0x0001, 0x336c: 0x0001, 0x336d: 0x0001, + 0x3370: 0x0001, 0x3371: 0x0001, 0x3372: 0x0001, 0x3373: 0x0001, 0x3374: 0x0001, 0x3375: 0x0001, 0x3376: 0x0001, 0x3377: 0x0001, 0x3378: 0x0001, 0x3379: 0x0001, 0x337a: 0x0001, 0x337b: 0x0001, 0x337c: 0x0001, 0x337d: 0x0001, 0x337e: 0x0001, 0x337f: 0x0001, // Block 0xce, offset 0x3380 - 0x3380: 0x0001, 0x3381: 0x0001, 0x3382: 0x0001, 0x3385: 0x0001, - 0x3386: 0x0001, 0x3387: 0x0001, 0x3388: 0x0001, 0x3389: 0x0001, 0x338a: 0x0001, 0x338b: 0x0001, - 0x33aa: 0x0001, 0x33ab: 0x0001, 0x33ac: 0x0001, 0x33ad: 0x0001, + 0x3380: 0x0001, 0x3381: 0x0001, 0x3382: 0x0001, 0x3383: 0x0001, 0x3384: 0x0001, 0x3385: 0x0001, + 0x3386: 0x0001, // Block 0xcf, offset 0x33c0 - 0x33c2: 0x0001, 0x33c3: 0x0001, 0x33c4: 0x0001, + 0x33e7: 0x0001, 0x33e8: 0x0001, 0x33e9: 0x0001, + 0x33f3: 0x0001, 0x33f4: 0x0001, 0x33f5: 0x0001, + 0x33f6: 0x0001, 0x33f7: 0x0001, 0x33f8: 0x0001, 0x33f9: 0x0001, 0x33fa: 0x0001, 0x33fb: 0x0001, + 0x33fc: 0x0001, 0x33fd: 0x0001, 0x33fe: 0x0001, 0x33ff: 0x0001, // Block 0xd0, offset 0x3400 - 0x3400: 0x0002, 0x3401: 0x0002, 0x3402: 0x0002, 0x3403: 0x0002, 0x3404: 0x0002, 0x3405: 0x0002, - 0x3406: 0x0002, 0x3407: 0x0002, 0x3408: 0x0002, 0x3409: 0x0002, 0x340a: 0x0002, 0x340b: 0x0002, - 0x340c: 0x0002, 0x340d: 0x0002, 0x340e: 0x0002, 0x340f: 0x0002, 0x3410: 0x0002, 0x3411: 0x0002, - 0x3412: 0x0002, 0x3413: 0x0002, 0x3414: 0x0002, 0x3415: 0x0002, 0x3416: 0x0002, - 0x3420: 0x0002, 0x3421: 0x0002, 0x3422: 0x0002, 0x3423: 0x0002, - 0x3424: 0x0002, 0x3425: 0x0002, 0x3426: 0x0002, 0x3427: 0x0002, 0x3428: 0x0002, 0x3429: 0x0002, - 0x342a: 0x0002, 0x342b: 0x0002, 0x342c: 0x0002, 0x342d: 0x0002, 0x342e: 0x0002, 0x342f: 0x0002, - 0x3430: 0x0002, 0x3431: 0x0002, 0x3432: 0x0002, 0x3433: 0x0002, 0x3434: 0x0002, 0x3435: 0x0002, - 0x3436: 0x0002, + 0x3400: 0x0001, 0x3401: 0x0001, 0x3402: 0x0001, 0x3405: 0x0001, + 0x3406: 0x0001, 0x3407: 0x0001, 0x3408: 0x0001, 0x3409: 0x0001, 0x340a: 0x0001, 0x340b: 0x0001, + 0x342a: 0x0001, 0x342b: 0x0001, 0x342c: 0x0001, 0x342d: 0x0001, // Block 0xd1, offset 0x3440 - 0x3440: 0x0001, 0x3441: 0x0001, 0x3442: 0x0001, 0x3443: 0x0001, 0x3444: 0x0001, 0x3445: 0x0001, - 0x3446: 0x0001, 0x3447: 0x0001, 0x3448: 0x0001, 0x3449: 0x0001, 0x344a: 0x0001, 0x344b: 0x0001, - 0x344c: 0x0001, 0x344d: 0x0001, 0x344e: 0x0001, 0x344f: 0x0001, 0x3450: 0x0001, 0x3451: 0x0001, - 0x3452: 0x0001, 0x3453: 0x0001, 0x3454: 0x0001, 0x3455: 0x0001, 0x3456: 0x0001, 0x3457: 0x0001, - 0x3458: 0x0001, 0x3459: 0x0001, 0x345a: 0x0001, 0x345b: 0x0001, 0x345c: 0x0001, 0x345d: 0x0001, - 0x345e: 0x0001, 0x345f: 0x0001, 0x3460: 0x0001, 0x3461: 0x0001, 0x3462: 0x0001, 0x3463: 0x0001, - 0x3464: 0x0001, 0x3465: 0x0001, 0x3466: 0x0001, 0x3467: 0x0001, 0x3468: 0x0001, 0x3469: 0x0001, - 0x346a: 0x0001, 0x346b: 0x0001, 0x346c: 0x0001, 0x346d: 0x0001, 0x346e: 0x0001, 0x346f: 0x0001, - 0x3470: 0x0001, 0x3471: 0x0001, 0x3472: 0x0001, 0x3473: 0x0001, 0x3474: 0x0001, 0x3475: 0x0001, - 0x3476: 0x0001, 0x347b: 0x0001, - 0x347c: 0x0001, 0x347d: 0x0001, 0x347e: 0x0001, 0x347f: 0x0001, + 0x3442: 0x0001, 0x3443: 0x0001, 0x3444: 0x0001, // Block 0xd2, offset 0x3480 - 0x3480: 0x0001, 0x3481: 0x0001, 0x3482: 0x0001, 0x3483: 0x0001, 0x3484: 0x0001, 0x3485: 0x0001, - 0x3486: 0x0001, 0x3487: 0x0001, 0x3488: 0x0001, 0x3489: 0x0001, 0x348a: 0x0001, 0x348b: 0x0001, - 0x348c: 0x0001, 0x348d: 0x0001, 0x348e: 0x0001, 0x348f: 0x0001, 0x3490: 0x0001, 0x3491: 0x0001, - 0x3492: 0x0001, 0x3493: 0x0001, 0x3494: 0x0001, 0x3495: 0x0001, 0x3496: 0x0001, 0x3497: 0x0001, - 0x3498: 0x0001, 0x3499: 0x0001, 0x349a: 0x0001, 0x349b: 0x0001, 0x349c: 0x0001, 0x349d: 0x0001, - 0x349e: 0x0001, 0x349f: 0x0001, 0x34a0: 0x0001, 0x34a1: 0x0001, 0x34a2: 0x0001, 0x34a3: 0x0001, - 0x34a4: 0x0001, 0x34a5: 0x0001, 0x34a6: 0x0001, 0x34a7: 0x0001, 0x34a8: 0x0001, 0x34a9: 0x0001, - 0x34aa: 0x0001, 0x34ab: 0x0001, 0x34ac: 0x0001, - 0x34b5: 0x0001, + 0x3480: 0x0002, 0x3481: 0x0002, 0x3482: 0x0002, 0x3483: 0x0002, 0x3484: 0x0002, 0x3485: 0x0002, + 0x3486: 0x0002, 0x3487: 0x0002, 0x3488: 0x0002, 0x3489: 0x0002, 0x348a: 0x0002, 0x348b: 0x0002, + 0x348c: 0x0002, 0x348d: 0x0002, 0x348e: 0x0002, 0x348f: 0x0002, 0x3490: 0x0002, 0x3491: 0x0002, + 0x3492: 0x0002, 0x3493: 0x0002, 0x3494: 0x0002, 0x3495: 0x0002, 0x3496: 0x0002, + 0x34a0: 0x0002, 0x34a1: 0x0002, 0x34a2: 0x0002, 0x34a3: 0x0002, + 0x34a4: 0x0002, 0x34a5: 0x0002, 0x34a6: 0x0002, 0x34a7: 0x0002, 0x34a8: 0x0002, 0x34a9: 0x0002, + 0x34aa: 0x0002, 0x34ab: 0x0002, 0x34ac: 0x0002, 0x34ad: 0x0002, 0x34ae: 0x0002, 0x34af: 0x0002, + 0x34b0: 0x0002, 0x34b1: 0x0002, 0x34b2: 0x0002, 0x34b3: 0x0002, 0x34b4: 0x0002, 0x34b5: 0x0002, + 0x34b6: 0x0002, // Block 0xd3, offset 0x34c0 - 0x34c4: 0x0001, - 0x34db: 0x0001, 0x34dc: 0x0001, 0x34dd: 0x0001, - 0x34de: 0x0001, 0x34df: 0x0001, 0x34e1: 0x0001, 0x34e2: 0x0001, 0x34e3: 0x0001, + 0x34c0: 0x0001, 0x34c1: 0x0001, 0x34c2: 0x0001, 0x34c3: 0x0001, 0x34c4: 0x0001, 0x34c5: 0x0001, + 0x34c6: 0x0001, 0x34c7: 0x0001, 0x34c8: 0x0001, 0x34c9: 0x0001, 0x34ca: 0x0001, 0x34cb: 0x0001, + 0x34cc: 0x0001, 0x34cd: 0x0001, 0x34ce: 0x0001, 0x34cf: 0x0001, 0x34d0: 0x0001, 0x34d1: 0x0001, + 0x34d2: 0x0001, 0x34d3: 0x0001, 0x34d4: 0x0001, 0x34d5: 0x0001, 0x34d6: 0x0001, 0x34d7: 0x0001, + 0x34d8: 0x0001, 0x34d9: 0x0001, 0x34da: 0x0001, 0x34db: 0x0001, 0x34dc: 0x0001, 0x34dd: 0x0001, + 0x34de: 0x0001, 0x34df: 0x0001, 0x34e0: 0x0001, 0x34e1: 0x0001, 0x34e2: 0x0001, 0x34e3: 0x0001, 0x34e4: 0x0001, 0x34e5: 0x0001, 0x34e6: 0x0001, 0x34e7: 0x0001, 0x34e8: 0x0001, 0x34e9: 0x0001, 0x34ea: 0x0001, 0x34eb: 0x0001, 0x34ec: 0x0001, 0x34ed: 0x0001, 0x34ee: 0x0001, 0x34ef: 0x0001, + 0x34f0: 0x0001, 0x34f1: 0x0001, 0x34f2: 0x0001, 0x34f3: 0x0001, 0x34f4: 0x0001, 0x34f5: 0x0001, + 0x34f6: 0x0001, 0x34fb: 0x0001, + 0x34fc: 0x0001, 0x34fd: 0x0001, 0x34fe: 0x0001, 0x34ff: 0x0001, // Block 0xd4, offset 0x3500 0x3500: 0x0001, 0x3501: 0x0001, 0x3502: 0x0001, 0x3503: 0x0001, 0x3504: 0x0001, 0x3505: 0x0001, - 0x3506: 0x0001, 0x3508: 0x0001, 0x3509: 0x0001, 0x350a: 0x0001, 0x350b: 0x0001, + 0x3506: 0x0001, 0x3507: 0x0001, 0x3508: 0x0001, 0x3509: 0x0001, 0x350a: 0x0001, 0x350b: 0x0001, 0x350c: 0x0001, 0x350d: 0x0001, 0x350e: 0x0001, 0x350f: 0x0001, 0x3510: 0x0001, 0x3511: 0x0001, 0x3512: 0x0001, 0x3513: 0x0001, 0x3514: 0x0001, 0x3515: 0x0001, 0x3516: 0x0001, 0x3517: 0x0001, - 0x3518: 0x0001, 0x351b: 0x0001, 0x351c: 0x0001, 0x351d: 0x0001, - 0x351e: 0x0001, 0x351f: 0x0001, 0x3520: 0x0001, 0x3521: 0x0001, 0x3523: 0x0001, - 0x3524: 0x0001, 0x3526: 0x0001, 0x3527: 0x0001, 0x3528: 0x0001, 0x3529: 0x0001, - 0x352a: 0x0001, + 0x3518: 0x0001, 0x3519: 0x0001, 0x351a: 0x0001, 0x351b: 0x0001, 0x351c: 0x0001, 0x351d: 0x0001, + 0x351e: 0x0001, 0x351f: 0x0001, 0x3520: 0x0001, 0x3521: 0x0001, 0x3522: 0x0001, 0x3523: 0x0001, + 0x3524: 0x0001, 0x3525: 0x0001, 0x3526: 0x0001, 0x3527: 0x0001, 0x3528: 0x0001, 0x3529: 0x0001, + 0x352a: 0x0001, 0x352b: 0x0001, 0x352c: 0x0001, + 0x3535: 0x0001, // Block 0xd5, offset 0x3540 - 0x356e: 0x0001, + 0x3544: 0x0001, + 0x355b: 0x0001, 0x355c: 0x0001, 0x355d: 0x0001, + 0x355e: 0x0001, 0x355f: 0x0001, 0x3561: 0x0001, 0x3562: 0x0001, 0x3563: 0x0001, + 0x3564: 0x0001, 0x3565: 0x0001, 0x3566: 0x0001, 0x3567: 0x0001, 0x3568: 0x0001, 0x3569: 0x0001, + 0x356a: 0x0001, 0x356b: 0x0001, 0x356c: 0x0001, 0x356d: 0x0001, 0x356e: 0x0001, 0x356f: 0x0001, // Block 0xd6, offset 0x3580 - 0x35ac: 0x0001, 0x35ad: 0x0001, 0x35ae: 0x0001, 0x35af: 0x0001, + 0x3580: 0x0001, 0x3581: 0x0001, 0x3582: 0x0001, 0x3583: 0x0001, 0x3584: 0x0001, 0x3585: 0x0001, + 0x3586: 0x0001, 0x3588: 0x0001, 0x3589: 0x0001, 0x358a: 0x0001, 0x358b: 0x0001, + 0x358c: 0x0001, 0x358d: 0x0001, 0x358e: 0x0001, 0x358f: 0x0001, 0x3590: 0x0001, 0x3591: 0x0001, + 0x3592: 0x0001, 0x3593: 0x0001, 0x3594: 0x0001, 0x3595: 0x0001, 0x3596: 0x0001, 0x3597: 0x0001, + 0x3598: 0x0001, 0x359b: 0x0001, 0x359c: 0x0001, 0x359d: 0x0001, + 0x359e: 0x0001, 0x359f: 0x0001, 0x35a0: 0x0001, 0x35a1: 0x0001, 0x35a3: 0x0001, + 0x35a4: 0x0001, 0x35a6: 0x0001, 0x35a7: 0x0001, 0x35a8: 0x0001, 0x35a9: 0x0001, + 0x35aa: 0x0001, // Block 0xd7, offset 0x35c0 - 0x35d0: 0x0001, 0x35d1: 0x0001, - 0x35d2: 0x0001, 0x35d3: 0x0001, 0x35d4: 0x0001, 0x35d5: 0x0001, 0x35d6: 0x0001, + 0x35ee: 0x0001, // Block 0xd8, offset 0x3600 - 0x3604: 0x0001, 0x3605: 0x0001, - 0x3606: 0x0001, 0x3607: 0x0001, 0x3608: 0x0001, 0x3609: 0x0001, 0x360a: 0x0001, + 0x362c: 0x0001, 0x362d: 0x0001, 0x362e: 0x0001, 0x362f: 0x0001, // Block 0xd9, offset 0x3640 - 0x3644: 0x0002, + 0x3650: 0x0001, 0x3651: 0x0001, + 0x3652: 0x0001, 0x3653: 0x0001, 0x3654: 0x0001, 0x3655: 0x0001, 0x3656: 0x0001, // Block 0xda, offset 0x3680 - 0x368f: 0x0002, + 0x3684: 0x0001, 0x3685: 0x0001, + 0x3686: 0x0001, 0x3687: 0x0001, 0x3688: 0x0001, 0x3689: 0x0001, 0x368a: 0x0001, // Block 0xdb, offset 0x36c0 - 0x36c0: 0x0003, 0x36c1: 0x0003, 0x36c2: 0x0003, 0x36c3: 0x0003, 0x36c4: 0x0003, 0x36c5: 0x0003, - 0x36c6: 0x0003, 0x36c7: 0x0003, 0x36c8: 0x0003, 0x36c9: 0x0003, 0x36ca: 0x0003, - 0x36d0: 0x0003, 0x36d1: 0x0003, - 0x36d2: 0x0003, 0x36d3: 0x0003, 0x36d4: 0x0003, 0x36d5: 0x0003, 0x36d6: 0x0003, 0x36d7: 0x0003, - 0x36d8: 0x0003, 0x36d9: 0x0003, 0x36da: 0x0003, 0x36db: 0x0003, 0x36dc: 0x0003, 0x36dd: 0x0003, - 0x36de: 0x0003, 0x36df: 0x0003, 0x36e0: 0x0003, 0x36e1: 0x0003, 0x36e2: 0x0003, 0x36e3: 0x0003, - 0x36e4: 0x0003, 0x36e5: 0x0003, 0x36e6: 0x0003, 0x36e7: 0x0003, 0x36e8: 0x0003, 0x36e9: 0x0003, - 0x36ea: 0x0003, 0x36eb: 0x0003, 0x36ec: 0x0003, 0x36ed: 0x0003, - 0x36f0: 0x0003, 0x36f1: 0x0003, 0x36f2: 0x0003, 0x36f3: 0x0003, 0x36f4: 0x0003, 0x36f5: 0x0003, - 0x36f6: 0x0003, 0x36f7: 0x0003, 0x36f8: 0x0003, 0x36f9: 0x0003, 0x36fa: 0x0003, 0x36fb: 0x0003, - 0x36fc: 0x0003, 0x36fd: 0x0003, 0x36fe: 0x0003, 0x36ff: 0x0003, + 0x36c4: 0x000a, // Block 0xdc, offset 0x3700 - 0x3700: 0x0003, 0x3701: 0x0003, 0x3702: 0x0003, 0x3703: 0x0003, 0x3704: 0x0003, 0x3705: 0x0003, - 0x3706: 0x0003, 0x3707: 0x0003, 0x3708: 0x0003, 0x3709: 0x0003, 0x370a: 0x0003, 0x370b: 0x0003, - 0x370c: 0x0003, 0x370d: 0x0003, 0x370e: 0x0003, 0x370f: 0x0003, 0x3710: 0x0003, 0x3711: 0x0003, - 0x3712: 0x0003, 0x3713: 0x0003, 0x3714: 0x0003, 0x3715: 0x0003, 0x3716: 0x0003, 0x3717: 0x0003, - 0x3718: 0x0003, 0x3719: 0x0003, 0x371a: 0x0003, 0x371b: 0x0003, 0x371c: 0x0003, 0x371d: 0x0003, - 0x371e: 0x0003, 0x371f: 0x0003, 0x3720: 0x0003, 0x3721: 0x0003, 0x3722: 0x0003, 0x3723: 0x0003, - 0x3724: 0x0003, 0x3725: 0x0003, 0x3726: 0x0003, 0x3727: 0x0003, 0x3728: 0x0003, 0x3729: 0x0003, - 0x3730: 0x0003, 0x3731: 0x0003, 0x3732: 0x0003, 0x3733: 0x0003, 0x3734: 0x0003, 0x3735: 0x0003, - 0x3736: 0x0003, 0x3737: 0x0003, 0x3738: 0x0003, 0x3739: 0x0003, 0x373a: 0x0003, 0x373b: 0x0003, - 0x373c: 0x0003, 0x373d: 0x0003, 0x373e: 0x0003, 0x373f: 0x0003, + 0x370f: 0x0002, // Block 0xdd, offset 0x3740 - 0x3740: 0x0003, 0x3741: 0x0003, 0x3742: 0x0003, 0x3743: 0x0003, 0x3744: 0x0003, 0x3745: 0x0003, - 0x3746: 0x0003, 0x3747: 0x0003, 0x3748: 0x0003, 0x3749: 0x0003, 0x374a: 0x0003, 0x374b: 0x0003, - 0x374c: 0x0003, 0x374d: 0x0003, 0x374e: 0x0002, 0x374f: 0x0003, 0x3750: 0x0003, 0x3751: 0x0002, - 0x3752: 0x0002, 0x3753: 0x0002, 0x3754: 0x0002, 0x3755: 0x0002, 0x3756: 0x0002, 0x3757: 0x0002, - 0x3758: 0x0002, 0x3759: 0x0002, 0x375a: 0x0002, 0x375b: 0x0003, 0x375c: 0x0003, 0x375d: 0x0003, - 0x375e: 0x0003, 0x375f: 0x0003, 0x3760: 0x0003, 0x3761: 0x0003, 0x3762: 0x0003, 0x3763: 0x0003, - 0x3764: 0x0003, 0x3765: 0x0003, 0x3766: 0x0003, 0x3767: 0x0003, 0x3768: 0x0003, 0x3769: 0x0003, - 0x376a: 0x0003, 0x376b: 0x0003, 0x376c: 0x0003, + 0x3740: 0x0004, 0x3741: 0x0004, 0x3742: 0x0004, 0x3743: 0x0004, 0x3744: 0x0004, 0x3745: 0x0004, + 0x3746: 0x0004, 0x3747: 0x0004, 0x3748: 0x0004, 0x3749: 0x0004, 0x374a: 0x0004, + 0x3750: 0x0004, 0x3751: 0x0004, + 0x3752: 0x0004, 0x3753: 0x0004, 0x3754: 0x0004, 0x3755: 0x0004, 0x3756: 0x0004, 0x3757: 0x0004, + 0x3758: 0x0004, 0x3759: 0x0004, 0x375a: 0x0004, 0x375b: 0x0004, 0x375c: 0x0004, 0x375d: 0x0004, + 0x375e: 0x0004, 0x375f: 0x0004, 0x3760: 0x0004, 0x3761: 0x0004, 0x3762: 0x0004, 0x3763: 0x0004, + 0x3764: 0x0004, 0x3765: 0x0004, 0x3766: 0x0004, 0x3767: 0x0004, 0x3768: 0x0004, 0x3769: 0x0004, + 0x376a: 0x0004, 0x376b: 0x0004, 0x376c: 0x0004, 0x376d: 0x0004, + 0x3770: 0x0004, 0x3771: 0x0004, 0x3772: 0x0004, 0x3773: 0x0004, 0x3774: 0x0004, 0x3775: 0x0004, + 0x3776: 0x0004, 0x3777: 0x0004, 0x3778: 0x0004, 0x3779: 0x0004, 0x377a: 0x0004, 0x377b: 0x0004, + 0x377c: 0x0004, 0x377d: 0x0004, 0x377e: 0x0004, 0x377f: 0x0004, // Block 0xde, offset 0x3780 - 0x37a6: 0x0002, 0x37a7: 0x0002, 0x37a8: 0x0002, 0x37a9: 0x0002, - 0x37aa: 0x0002, 0x37ab: 0x0002, 0x37ac: 0x0002, 0x37ad: 0x0002, 0x37ae: 0x0002, 0x37af: 0x0002, - 0x37b0: 0x0002, 0x37b1: 0x0002, 0x37b2: 0x0002, 0x37b3: 0x0002, 0x37b4: 0x0002, 0x37b5: 0x0002, - 0x37b6: 0x0002, 0x37b7: 0x0002, 0x37b8: 0x0002, 0x37b9: 0x0002, 0x37ba: 0x0002, 0x37bb: 0x0002, - 0x37bc: 0x0002, 0x37bd: 0x0002, 0x37be: 0x0002, 0x37bf: 0x0002, + 0x3780: 0x0004, 0x3781: 0x0004, 0x3782: 0x0004, 0x3783: 0x0004, 0x3784: 0x0004, 0x3785: 0x0004, + 0x3786: 0x0004, 0x3787: 0x0004, 0x3788: 0x0004, 0x3789: 0x0004, 0x378a: 0x0004, 0x378b: 0x0004, + 0x378c: 0x0004, 0x378d: 0x0004, 0x378e: 0x0004, 0x378f: 0x0004, 0x3790: 0x0004, 0x3791: 0x0004, + 0x3792: 0x0004, 0x3793: 0x0004, 0x3794: 0x0004, 0x3795: 0x0004, 0x3796: 0x0004, 0x3797: 0x0004, + 0x3798: 0x0004, 0x3799: 0x0004, 0x379a: 0x0004, 0x379b: 0x0004, 0x379c: 0x0004, 0x379d: 0x0004, + 0x379e: 0x0004, 0x379f: 0x0004, 0x37a0: 0x0004, 0x37a1: 0x0004, 0x37a2: 0x0004, 0x37a3: 0x0004, + 0x37a4: 0x0004, 0x37a5: 0x0004, 0x37a6: 0x0004, 0x37a7: 0x0004, 0x37a8: 0x0004, 0x37a9: 0x0004, + 0x37b0: 0x000c, 0x37b1: 0x000c, 0x37b2: 0x0004, 0x37b3: 0x0004, 0x37b4: 0x0004, 0x37b5: 0x0004, + 0x37b6: 0x0004, 0x37b7: 0x0004, 0x37b8: 0x0004, 0x37b9: 0x0004, 0x37ba: 0x0004, 0x37bb: 0x0004, + 0x37bc: 0x0004, 0x37bd: 0x0004, 0x37be: 0x000c, 0x37bf: 0x000c, // Block 0xdf, offset 0x37c0 - 0x37c0: 0x0002, 0x37c1: 0x0002, 0x37c2: 0x0002, - 0x37d0: 0x0002, 0x37d1: 0x0002, + 0x37c0: 0x0004, 0x37c1: 0x0004, 0x37c2: 0x0004, 0x37c3: 0x0004, 0x37c4: 0x0004, 0x37c5: 0x0004, + 0x37c6: 0x0004, 0x37c7: 0x0004, 0x37c8: 0x0004, 0x37c9: 0x0004, 0x37ca: 0x0004, 0x37cb: 0x0004, + 0x37cc: 0x0004, 0x37cd: 0x0004, 0x37ce: 0x0002, 0x37cf: 0x0004, 0x37d0: 0x0004, 0x37d1: 0x0002, 0x37d2: 0x0002, 0x37d3: 0x0002, 0x37d4: 0x0002, 0x37d5: 0x0002, 0x37d6: 0x0002, 0x37d7: 0x0002, - 0x37d8: 0x0002, 0x37d9: 0x0002, 0x37da: 0x0002, 0x37db: 0x0002, 0x37dc: 0x0002, 0x37dd: 0x0002, - 0x37de: 0x0002, 0x37df: 0x0002, 0x37e0: 0x0002, 0x37e1: 0x0002, 0x37e2: 0x0002, 0x37e3: 0x0002, - 0x37e4: 0x0002, 0x37e5: 0x0002, 0x37e6: 0x0002, 0x37e7: 0x0002, 0x37e8: 0x0002, 0x37e9: 0x0002, - 0x37ea: 0x0002, 0x37eb: 0x0002, 0x37ec: 0x0002, 0x37ed: 0x0002, 0x37ee: 0x0002, 0x37ef: 0x0002, - 0x37f0: 0x0002, 0x37f1: 0x0002, 0x37f2: 0x0002, 0x37f3: 0x0002, 0x37f4: 0x0002, 0x37f5: 0x0002, - 0x37f6: 0x0002, 0x37f7: 0x0002, 0x37f8: 0x0002, 0x37f9: 0x0002, 0x37fa: 0x0002, 0x37fb: 0x0002, + 0x37d8: 0x0002, 0x37d9: 0x0002, 0x37da: 0x0002, 0x37db: 0x0004, 0x37dc: 0x0004, 0x37dd: 0x0004, + 0x37de: 0x0004, 0x37df: 0x0004, 0x37e0: 0x0004, 0x37e1: 0x0004, 0x37e2: 0x0004, 0x37e3: 0x0004, + 0x37e4: 0x0004, 0x37e5: 0x0004, 0x37e6: 0x0004, 0x37e7: 0x0004, 0x37e8: 0x0004, 0x37e9: 0x0004, + 0x37ea: 0x0004, 0x37eb: 0x0004, 0x37ec: 0x0004, // Block 0xe0, offset 0x3800 - 0x3800: 0x0002, 0x3801: 0x0002, 0x3802: 0x0002, 0x3803: 0x0002, 0x3804: 0x0002, 0x3805: 0x0002, - 0x3806: 0x0002, 0x3807: 0x0002, 0x3808: 0x0002, - 0x3810: 0x0002, 0x3811: 0x0002, - 0x3820: 0x0002, 0x3821: 0x0002, 0x3822: 0x0002, 0x3823: 0x0002, - 0x3824: 0x0002, 0x3825: 0x0002, + 0x3826: 0x0002, 0x3827: 0x0002, 0x3828: 0x0002, 0x3829: 0x0002, + 0x382a: 0x0002, 0x382b: 0x0002, 0x382c: 0x0002, 0x382d: 0x0002, 0x382e: 0x0002, 0x382f: 0x0002, + 0x3830: 0x0002, 0x3831: 0x0002, 0x3832: 0x0002, 0x3833: 0x0002, 0x3834: 0x0002, 0x3835: 0x0002, + 0x3836: 0x0002, 0x3837: 0x0002, 0x3838: 0x0002, 0x3839: 0x0002, 0x383a: 0x0002, 0x383b: 0x0002, + 0x383c: 0x0002, 0x383d: 0x0002, 0x383e: 0x0002, 0x383f: 0x0002, // Block 0xe1, offset 0x3840 - 0x3840: 0x0002, 0x3841: 0x0002, 0x3842: 0x0002, 0x3843: 0x0002, 0x3844: 0x0002, 0x3845: 0x0002, - 0x3846: 0x0002, 0x3847: 0x0002, 0x3848: 0x0002, 0x3849: 0x0002, 0x384a: 0x0002, 0x384b: 0x0002, - 0x384c: 0x0002, 0x384d: 0x0002, 0x384e: 0x0002, 0x384f: 0x0002, 0x3850: 0x0002, 0x3851: 0x0002, + 0x3840: 0x0002, 0x3841: 0x0002, 0x3842: 0x000a, + 0x3850: 0x0002, 0x3851: 0x0002, 0x3852: 0x0002, 0x3853: 0x0002, 0x3854: 0x0002, 0x3855: 0x0002, 0x3856: 0x0002, 0x3857: 0x0002, - 0x3858: 0x0002, 0x3859: 0x0002, 0x385a: 0x0002, 0x385b: 0x0002, 0x385c: 0x0002, 0x385d: 0x0002, - 0x385e: 0x0002, 0x385f: 0x0002, 0x3860: 0x0002, - 0x386d: 0x0002, 0x386e: 0x0002, 0x386f: 0x0002, + 0x3858: 0x0002, 0x3859: 0x0002, 0x385a: 0x000a, 0x385b: 0x0002, 0x385c: 0x0002, 0x385d: 0x0002, + 0x385e: 0x0002, 0x385f: 0x0002, 0x3860: 0x0002, 0x3861: 0x0002, 0x3862: 0x0002, 0x3863: 0x0002, + 0x3864: 0x0002, 0x3865: 0x0002, 0x3866: 0x0002, 0x3867: 0x0002, 0x3868: 0x0002, 0x3869: 0x0002, + 0x386a: 0x0002, 0x386b: 0x0002, 0x386c: 0x0002, 0x386d: 0x0002, 0x386e: 0x0002, 0x386f: 0x000a, 0x3870: 0x0002, 0x3871: 0x0002, 0x3872: 0x0002, 0x3873: 0x0002, 0x3874: 0x0002, 0x3875: 0x0002, - 0x3877: 0x0002, 0x3878: 0x0002, 0x3879: 0x0002, 0x387a: 0x0002, 0x387b: 0x0002, - 0x387c: 0x0002, 0x387d: 0x0002, 0x387e: 0x0002, 0x387f: 0x0002, + 0x3876: 0x0002, 0x3877: 0x000a, 0x3878: 0x0002, 0x3879: 0x0002, 0x387a: 0x0002, 0x387b: 0x0002, // Block 0xe2, offset 0x3880 0x3880: 0x0002, 0x3881: 0x0002, 0x3882: 0x0002, 0x3883: 0x0002, 0x3884: 0x0002, 0x3885: 0x0002, - 0x3886: 0x0002, 0x3887: 0x0002, 0x3888: 0x0002, 0x3889: 0x0002, 0x388a: 0x0002, 0x388b: 0x0002, - 0x388c: 0x0002, 0x388d: 0x0002, 0x388e: 0x0002, 0x388f: 0x0002, 0x3890: 0x0002, 0x3891: 0x0002, - 0x3892: 0x0002, 0x3893: 0x0002, 0x3894: 0x0002, 0x3895: 0x0002, 0x3896: 0x0002, 0x3897: 0x0002, - 0x3898: 0x0002, 0x3899: 0x0002, 0x389a: 0x0002, 0x389b: 0x0002, 0x389c: 0x0002, 0x389d: 0x0002, - 0x389e: 0x0002, 0x389f: 0x0002, 0x38a0: 0x0002, 0x38a1: 0x0002, 0x38a2: 0x0002, 0x38a3: 0x0002, - 0x38a4: 0x0002, 0x38a5: 0x0002, 0x38a6: 0x0002, 0x38a7: 0x0002, 0x38a8: 0x0002, 0x38a9: 0x0002, - 0x38aa: 0x0002, 0x38ab: 0x0002, 0x38ac: 0x0002, 0x38ad: 0x0002, 0x38ae: 0x0002, 0x38af: 0x0002, - 0x38b0: 0x0002, 0x38b1: 0x0002, 0x38b2: 0x0002, 0x38b3: 0x0002, 0x38b4: 0x0002, 0x38b5: 0x0002, - 0x38b6: 0x0002, 0x38b7: 0x0002, 0x38b8: 0x0002, 0x38b9: 0x0002, 0x38ba: 0x0002, 0x38bb: 0x0002, - 0x38bc: 0x0002, 0x38be: 0x0002, 0x38bf: 0x0002, + 0x3886: 0x0002, 0x3887: 0x0002, 0x3888: 0x0002, + 0x3890: 0x0002, 0x3891: 0x0002, + 0x38a0: 0x0002, 0x38a1: 0x0002, 0x38a2: 0x0002, 0x38a3: 0x0002, + 0x38a4: 0x0002, 0x38a5: 0x0002, // Block 0xe3, offset 0x38c0 0x38c0: 0x0002, 0x38c1: 0x0002, 0x38c2: 0x0002, 0x38c3: 0x0002, 0x38c4: 0x0002, 0x38c5: 0x0002, 0x38c6: 0x0002, 0x38c7: 0x0002, 0x38c8: 0x0002, 0x38c9: 0x0002, 0x38ca: 0x0002, 0x38cb: 0x0002, - 0x38cc: 0x0002, 0x38cd: 0x0002, 0x38ce: 0x0002, 0x38cf: 0x0002, 0x38d0: 0x0002, 0x38d1: 0x0002, - 0x38d2: 0x0002, 0x38d3: 0x0002, - 0x38e0: 0x0002, 0x38e1: 0x0002, 0x38e2: 0x0002, 0x38e3: 0x0002, - 0x38e4: 0x0002, 0x38e5: 0x0002, 0x38e6: 0x0002, 0x38e7: 0x0002, 0x38e8: 0x0002, 0x38e9: 0x0002, - 0x38ea: 0x0002, 0x38eb: 0x0002, 0x38ec: 0x0002, 0x38ed: 0x0002, 0x38ee: 0x0002, 0x38ef: 0x0002, + 0x38cc: 0x0002, 0x38cd: 0x000a, 0x38ce: 0x000a, 0x38cf: 0x000a, 0x38d0: 0x0002, 0x38d1: 0x0002, + 0x38d2: 0x0002, 0x38d3: 0x0002, 0x38d4: 0x0002, 0x38d5: 0x000a, 0x38d6: 0x0002, 0x38d7: 0x0002, + 0x38d8: 0x0002, 0x38d9: 0x0002, 0x38da: 0x0002, 0x38db: 0x0002, 0x38dc: 0x000a, 0x38dd: 0x0002, + 0x38de: 0x0002, 0x38df: 0x0002, 0x38e0: 0x0002, 0x38e1: 0x0008, + 0x38e4: 0x0008, 0x38e5: 0x0008, 0x38e6: 0x0008, 0x38e7: 0x0008, 0x38e8: 0x0008, 0x38e9: 0x0008, + 0x38ea: 0x0008, 0x38eb: 0x0008, 0x38ec: 0x0008, 0x38ed: 0x0002, 0x38ee: 0x0002, 0x38ef: 0x0002, 0x38f0: 0x0002, 0x38f1: 0x0002, 0x38f2: 0x0002, 0x38f3: 0x0002, 0x38f4: 0x0002, 0x38f5: 0x0002, - 0x38f6: 0x0002, 0x38f7: 0x0002, 0x38f8: 0x0002, 0x38f9: 0x0002, 0x38fa: 0x0002, 0x38fb: 0x0002, + 0x38f6: 0x0008, 0x38f7: 0x0002, 0x38f8: 0x0002, 0x38f9: 0x0002, 0x38fa: 0x0002, 0x38fb: 0x0002, 0x38fc: 0x0002, 0x38fd: 0x0002, 0x38fe: 0x0002, 0x38ff: 0x0002, // Block 0xe4, offset 0x3900 0x3900: 0x0002, 0x3901: 0x0002, 0x3902: 0x0002, 0x3903: 0x0002, 0x3904: 0x0002, 0x3905: 0x0002, - 0x3906: 0x0002, 0x3907: 0x0002, 0x3908: 0x0002, 0x3909: 0x0002, 0x390a: 0x0002, - 0x390f: 0x0002, 0x3910: 0x0002, 0x3911: 0x0002, - 0x3912: 0x0002, 0x3913: 0x0002, - 0x3920: 0x0002, 0x3921: 0x0002, 0x3922: 0x0002, 0x3923: 0x0002, + 0x3906: 0x0002, 0x3907: 0x0002, 0x3908: 0x0002, 0x3909: 0x0002, 0x390a: 0x0002, 0x390b: 0x0002, + 0x390c: 0x0002, 0x390d: 0x0002, 0x390e: 0x0002, 0x390f: 0x0002, 0x3910: 0x0002, 0x3911: 0x0002, + 0x3912: 0x0002, 0x3913: 0x0002, 0x3914: 0x0002, 0x3915: 0x0002, 0x3916: 0x0002, 0x3917: 0x0002, + 0x3918: 0x0002, 0x3919: 0x0002, 0x391a: 0x0002, 0x391b: 0x0002, 0x391c: 0x0002, 0x391d: 0x0002, + 0x391e: 0x0002, 0x391f: 0x0002, 0x3920: 0x0002, 0x3921: 0x0002, 0x3922: 0x0002, 0x3923: 0x0002, 0x3924: 0x0002, 0x3925: 0x0002, 0x3926: 0x0002, 0x3927: 0x0002, 0x3928: 0x0002, 0x3929: 0x0002, 0x392a: 0x0002, 0x392b: 0x0002, 0x392c: 0x0002, 0x392d: 0x0002, 0x392e: 0x0002, 0x392f: 0x0002, - 0x3930: 0x0002, 0x3934: 0x0002, - 0x3938: 0x0002, 0x3939: 0x0002, 0x393a: 0x0002, 0x393b: 0x0002, - 0x393c: 0x0002, 0x393d: 0x0002, 0x393e: 0x0002, 0x393f: 0x0002, + 0x3930: 0x0002, 0x3931: 0x0002, 0x3932: 0x0002, 0x3933: 0x0002, 0x3934: 0x0002, 0x3935: 0x0002, + 0x3936: 0x0002, 0x3937: 0x0002, 0x3938: 0x000a, 0x3939: 0x0002, 0x393a: 0x0002, 0x393b: 0x0002, + 0x393c: 0x0002, 0x393d: 0x0008, 0x393e: 0x0002, 0x393f: 0x0002, // Block 0xe5, offset 0x3940 0x3940: 0x0002, 0x3941: 0x0002, 0x3942: 0x0002, 0x3943: 0x0002, 0x3944: 0x0002, 0x3945: 0x0002, 0x3946: 0x0002, 0x3947: 0x0002, 0x3948: 0x0002, 0x3949: 0x0002, 0x394a: 0x0002, 0x394b: 0x0002, 0x394c: 0x0002, 0x394d: 0x0002, 0x394e: 0x0002, 0x394f: 0x0002, 0x3950: 0x0002, 0x3951: 0x0002, - 0x3952: 0x0002, 0x3953: 0x0002, 0x3954: 0x0002, 0x3955: 0x0002, 0x3956: 0x0002, 0x3957: 0x0002, - 0x3958: 0x0002, 0x3959: 0x0002, 0x395a: 0x0002, 0x395b: 0x0002, 0x395c: 0x0002, 0x395d: 0x0002, - 0x395e: 0x0002, 0x395f: 0x0002, 0x3960: 0x0002, 0x3961: 0x0002, 0x3962: 0x0002, 0x3963: 0x0002, - 0x3964: 0x0002, 0x3965: 0x0002, 0x3966: 0x0002, 0x3967: 0x0002, 0x3968: 0x0002, 0x3969: 0x0002, - 0x396a: 0x0002, 0x396b: 0x0002, 0x396c: 0x0002, 0x396d: 0x0002, 0x396e: 0x0002, 0x396f: 0x0002, + 0x3952: 0x0002, 0x3953: 0x000a, 0x3956: 0x0008, 0x3957: 0x0008, + 0x3959: 0x0008, 0x395a: 0x0008, 0x395b: 0x0008, + 0x395e: 0x0008, 0x395f: 0x0008, 0x3960: 0x0002, 0x3961: 0x0002, 0x3962: 0x0002, 0x3963: 0x0002, + 0x3964: 0x0002, 0x3965: 0x0002, 0x3966: 0x0002, 0x3967: 0x000a, 0x3968: 0x0002, 0x3969: 0x0002, + 0x396a: 0x0002, 0x396b: 0x0002, 0x396c: 0x000a, 0x396d: 0x000a, 0x396e: 0x000a, 0x396f: 0x0002, 0x3970: 0x0002, 0x3971: 0x0002, 0x3972: 0x0002, 0x3973: 0x0002, 0x3974: 0x0002, 0x3975: 0x0002, 0x3976: 0x0002, 0x3977: 0x0002, 0x3978: 0x0002, 0x3979: 0x0002, 0x397a: 0x0002, 0x397b: 0x0002, - 0x397c: 0x0002, 0x397d: 0x0002, 0x397e: 0x0002, + 0x397c: 0x0002, 0x397d: 0x0002, 0x397e: 0x0002, 0x397f: 0x0002, // Block 0xe6, offset 0x3980 - 0x3980: 0x0002, 0x3982: 0x0002, 0x3983: 0x0002, 0x3984: 0x0002, 0x3985: 0x0002, - 0x3986: 0x0002, 0x3987: 0x0002, 0x3988: 0x0002, 0x3989: 0x0002, 0x398a: 0x0002, 0x398b: 0x0002, - 0x398c: 0x0002, 0x398d: 0x0002, 0x398e: 0x0002, 0x398f: 0x0002, 0x3990: 0x0002, 0x3991: 0x0002, - 0x3992: 0x0002, 0x3993: 0x0002, 0x3994: 0x0002, 0x3995: 0x0002, 0x3996: 0x0002, 0x3997: 0x0002, - 0x3998: 0x0002, 0x3999: 0x0002, 0x399a: 0x0002, 0x399b: 0x0002, 0x399c: 0x0002, 0x399d: 0x0002, - 0x399e: 0x0002, 0x399f: 0x0002, 0x39a0: 0x0002, 0x39a1: 0x0002, 0x39a2: 0x0002, 0x39a3: 0x0002, + 0x3980: 0x0002, 0x3981: 0x0002, 0x3982: 0x000a, 0x3983: 0x0002, 0x3984: 0x000a, 0x3985: 0x0002, + 0x3986: 0x000a, 0x3987: 0x0002, 0x3988: 0x0002, 0x3989: 0x0002, 0x398a: 0x000a, 0x398b: 0x0008, + 0x398c: 0x0008, 0x398d: 0x0008, 0x398e: 0x0008, 0x398f: 0x0002, 0x3990: 0x0002, 0x3991: 0x0002, + 0x3992: 0x0002, 0x3993: 0x0002, 0x3994: 0x0008, 0x3995: 0x0008, 0x3996: 0x0008, 0x3997: 0x0008, + 0x3998: 0x0008, 0x3999: 0x0008, 0x399a: 0x0008, 0x399b: 0x0008, 0x399c: 0x0008, 0x399d: 0x0008, + 0x399e: 0x0008, 0x399f: 0x0008, 0x39a0: 0x000a, 0x39a1: 0x0002, 0x39a2: 0x0002, 0x39a3: 0x0002, 0x39a4: 0x0002, 0x39a5: 0x0002, 0x39a6: 0x0002, 0x39a7: 0x0002, 0x39a8: 0x0002, 0x39a9: 0x0002, - 0x39aa: 0x0002, 0x39ab: 0x0002, 0x39ac: 0x0002, 0x39ad: 0x0002, 0x39ae: 0x0002, 0x39af: 0x0002, - 0x39b0: 0x0002, 0x39b1: 0x0002, 0x39b2: 0x0002, 0x39b3: 0x0002, 0x39b4: 0x0002, 0x39b5: 0x0002, - 0x39b6: 0x0002, 0x39b7: 0x0002, 0x39b8: 0x0002, 0x39b9: 0x0002, 0x39ba: 0x0002, 0x39bb: 0x0002, + 0x39aa: 0x0002, 0x39ab: 0x0002, 0x39ac: 0x0002, 0x39ad: 0x000a, 0x39ae: 0x0002, 0x39af: 0x0002, + 0x39b0: 0x0002, 0x39b3: 0x0008, 0x39b4: 0x0002, 0x39b5: 0x0008, + 0x39b7: 0x0008, 0x39b8: 0x0002, 0x39b9: 0x0002, 0x39ba: 0x0002, 0x39bb: 0x0002, 0x39bc: 0x0002, 0x39bd: 0x0002, 0x39be: 0x0002, 0x39bf: 0x0002, // Block 0xe7, offset 0x39c0 0x39c0: 0x0002, 0x39c1: 0x0002, 0x39c2: 0x0002, 0x39c3: 0x0002, 0x39c4: 0x0002, 0x39c5: 0x0002, - 0x39c6: 0x0002, 0x39c7: 0x0002, 0x39c8: 0x0002, 0x39c9: 0x0002, 0x39ca: 0x0002, 0x39cb: 0x0002, + 0x39c6: 0x0002, 0x39c7: 0x0002, 0x39c8: 0x000a, 0x39c9: 0x0002, 0x39ca: 0x0002, 0x39cb: 0x0002, 0x39cc: 0x0002, 0x39cd: 0x0002, 0x39ce: 0x0002, 0x39cf: 0x0002, 0x39d0: 0x0002, 0x39d1: 0x0002, - 0x39d2: 0x0002, 0x39d3: 0x0002, 0x39d4: 0x0002, 0x39d5: 0x0002, 0x39d6: 0x0002, 0x39d7: 0x0002, + 0x39d2: 0x0002, 0x39d3: 0x0002, 0x39d4: 0x0002, 0x39d5: 0x000a, 0x39d6: 0x0002, 0x39d7: 0x0002, 0x39d8: 0x0002, 0x39d9: 0x0002, 0x39da: 0x0002, 0x39db: 0x0002, 0x39dc: 0x0002, 0x39dd: 0x0002, - 0x39de: 0x0002, 0x39df: 0x0002, 0x39e0: 0x0002, 0x39e1: 0x0002, 0x39e2: 0x0002, 0x39e3: 0x0002, - 0x39e4: 0x0002, 0x39e5: 0x0002, 0x39e6: 0x0002, 0x39e7: 0x0002, 0x39e8: 0x0002, 0x39e9: 0x0002, + 0x39de: 0x0002, 0x39df: 0x000a, 0x39e0: 0x0002, 0x39e1: 0x0002, 0x39e2: 0x0002, 0x39e3: 0x0002, + 0x39e4: 0x0002, 0x39e5: 0x0002, 0x39e6: 0x000a, 0x39e7: 0x0002, 0x39e8: 0x0002, 0x39e9: 0x0002, 0x39ea: 0x0002, 0x39eb: 0x0002, 0x39ec: 0x0002, 0x39ed: 0x0002, 0x39ee: 0x0002, 0x39ef: 0x0002, 0x39f0: 0x0002, 0x39f1: 0x0002, 0x39f2: 0x0002, 0x39f3: 0x0002, 0x39f4: 0x0002, 0x39f5: 0x0002, 0x39f6: 0x0002, 0x39f7: 0x0002, 0x39f8: 0x0002, 0x39f9: 0x0002, 0x39fa: 0x0002, 0x39fb: 0x0002, - 0x39fc: 0x0002, 0x39ff: 0x0002, + 0x39fc: 0x0002, 0x39fd: 0x0002, 0x39fe: 0x0002, 0x39ff: 0x0008, // Block 0xe8, offset 0x3a00 - 0x3a00: 0x0002, 0x3a01: 0x0002, 0x3a02: 0x0002, 0x3a03: 0x0002, 0x3a04: 0x0002, 0x3a05: 0x0002, - 0x3a06: 0x0002, 0x3a07: 0x0002, 0x3a08: 0x0002, 0x3a09: 0x0002, 0x3a0a: 0x0002, 0x3a0b: 0x0002, - 0x3a0c: 0x0002, 0x3a0d: 0x0002, 0x3a0e: 0x0002, 0x3a0f: 0x0002, 0x3a10: 0x0002, 0x3a11: 0x0002, - 0x3a12: 0x0002, 0x3a13: 0x0002, 0x3a14: 0x0002, 0x3a15: 0x0002, 0x3a16: 0x0002, 0x3a17: 0x0002, + 0x3a00: 0x0002, 0x3a01: 0x0008, 0x3a02: 0x000a, 0x3a03: 0x0002, 0x3a04: 0x0002, 0x3a05: 0x0002, + 0x3a06: 0x000a, 0x3a07: 0x000a, 0x3a08: 0x000a, 0x3a09: 0x000a, 0x3a0a: 0x0002, 0x3a0b: 0x0002, + 0x3a0c: 0x0002, 0x3a0d: 0x000a, 0x3a0e: 0x000a, 0x3a0f: 0x0002, 0x3a10: 0x0002, 0x3a11: 0x0002, + 0x3a12: 0x0002, 0x3a13: 0x000a, 0x3a14: 0x0002, 0x3a15: 0x0002, 0x3a16: 0x0002, 0x3a17: 0x0002, 0x3a18: 0x0002, 0x3a19: 0x0002, 0x3a1a: 0x0002, 0x3a1b: 0x0002, 0x3a1c: 0x0002, 0x3a1d: 0x0002, 0x3a1e: 0x0002, 0x3a1f: 0x0002, 0x3a20: 0x0002, 0x3a21: 0x0002, 0x3a22: 0x0002, 0x3a23: 0x0002, 0x3a24: 0x0002, 0x3a25: 0x0002, 0x3a26: 0x0002, 0x3a27: 0x0002, 0x3a28: 0x0002, 0x3a29: 0x0002, - 0x3a2a: 0x0002, 0x3a2b: 0x0002, 0x3a2c: 0x0002, 0x3a2d: 0x0002, 0x3a2e: 0x0002, 0x3a2f: 0x0002, + 0x3a2a: 0x000a, 0x3a2b: 0x0002, 0x3a2c: 0x0002, 0x3a2d: 0x0002, 0x3a2e: 0x0002, 0x3a2f: 0x0002, 0x3a30: 0x0002, 0x3a31: 0x0002, 0x3a32: 0x0002, 0x3a33: 0x0002, 0x3a34: 0x0002, 0x3a35: 0x0002, 0x3a36: 0x0002, 0x3a37: 0x0002, 0x3a38: 0x0002, 0x3a39: 0x0002, 0x3a3a: 0x0002, 0x3a3b: 0x0002, - 0x3a3c: 0x0002, 0x3a3d: 0x0002, + 0x3a3c: 0x0002, 0x3a3d: 0x000a, 0x3a3e: 0x0002, 0x3a3f: 0x0002, // Block 0xe9, offset 0x3a40 - 0x3a4b: 0x0002, - 0x3a4c: 0x0002, 0x3a4d: 0x0002, 0x3a4e: 0x0002, 0x3a50: 0x0002, 0x3a51: 0x0002, + 0x3a40: 0x0002, 0x3a41: 0x0002, 0x3a42: 0x0002, 0x3a43: 0x0002, 0x3a44: 0x0002, 0x3a45: 0x0002, + 0x3a46: 0x0002, 0x3a47: 0x0002, 0x3a48: 0x0002, 0x3a49: 0x0002, 0x3a4a: 0x0002, 0x3a4b: 0x0002, + 0x3a4c: 0x0002, 0x3a4d: 0x0002, 0x3a4e: 0x0002, 0x3a4f: 0x0002, 0x3a50: 0x0002, 0x3a51: 0x0002, 0x3a52: 0x0002, 0x3a53: 0x0002, 0x3a54: 0x0002, 0x3a55: 0x0002, 0x3a56: 0x0002, 0x3a57: 0x0002, 0x3a58: 0x0002, 0x3a59: 0x0002, 0x3a5a: 0x0002, 0x3a5b: 0x0002, 0x3a5c: 0x0002, 0x3a5d: 0x0002, - 0x3a5e: 0x0002, 0x3a5f: 0x0002, 0x3a60: 0x0002, 0x3a61: 0x0002, 0x3a62: 0x0002, 0x3a63: 0x0002, - 0x3a64: 0x0002, 0x3a65: 0x0002, 0x3a66: 0x0002, 0x3a67: 0x0002, - 0x3a7a: 0x0002, + 0x3a5e: 0x0002, 0x3a5f: 0x0002, 0x3a60: 0x0002, 0x3a61: 0x0002, 0x3a62: 0x0002, 0x3a63: 0x000a, + 0x3a64: 0x0002, 0x3a65: 0x0002, 0x3a66: 0x0002, 0x3a67: 0x0002, 0x3a68: 0x0002, 0x3a69: 0x0002, + 0x3a6a: 0x0002, 0x3a6b: 0x0002, 0x3a6c: 0x0002, 0x3a6d: 0x0002, 0x3a6e: 0x0002, 0x3a6f: 0x0002, + 0x3a70: 0x000a, 0x3a71: 0x0002, 0x3a72: 0x0002, 0x3a73: 0x000a, 0x3a74: 0x0002, 0x3a75: 0x0002, + 0x3a76: 0x0002, 0x3a77: 0x0002, 0x3a78: 0x0002, 0x3a79: 0x0002, 0x3a7a: 0x0002, 0x3a7b: 0x000a, + 0x3a7c: 0x0002, 0x3a7d: 0x0002, 0x3a7e: 0x0002, 0x3a7f: 0x000a, // Block 0xea, offset 0x3a80 - 0x3a95: 0x0002, 0x3a96: 0x0002, - 0x3aa4: 0x0002, + 0x3a80: 0x0002, 0x3a81: 0x0002, 0x3a82: 0x0002, 0x3a83: 0x0002, 0x3a84: 0x0002, 0x3a85: 0x0002, + 0x3a86: 0x0002, 0x3a87: 0x0002, 0x3a88: 0x0002, 0x3a89: 0x0002, 0x3a8a: 0x0002, 0x3a8b: 0x000a, + 0x3a8c: 0x0002, 0x3a8d: 0x0002, 0x3a8e: 0x0002, 0x3a8f: 0x0002, 0x3a90: 0x0002, 0x3a91: 0x0002, + 0x3a92: 0x0002, 0x3a93: 0x0002, 0x3a94: 0x0002, 0x3a95: 0x0002, 0x3a96: 0x0002, 0x3a97: 0x0002, + 0x3a98: 0x0002, 0x3a99: 0x0002, 0x3a9a: 0x000a, 0x3a9b: 0x0002, 0x3a9c: 0x0002, 0x3a9d: 0x0002, + 0x3a9e: 0x0002, 0x3a9f: 0x000a, 0x3aa0: 0x0002, 0x3aa1: 0x0002, 0x3aa2: 0x0002, 0x3aa3: 0x0002, + 0x3aa4: 0x000a, 0x3aa5: 0x000a, 0x3aa6: 0x000a, 0x3aa7: 0x0002, 0x3aa8: 0x0002, 0x3aa9: 0x0002, + 0x3aaa: 0x000a, 0x3aab: 0x000a, 0x3aac: 0x000a, 0x3aad: 0x000a, 0x3aae: 0x0002, 0x3aaf: 0x0002, + 0x3ab0: 0x0002, 0x3ab1: 0x0002, 0x3ab2: 0x0002, 0x3ab3: 0x0002, 0x3ab4: 0x0002, 0x3ab5: 0x0002, + 0x3ab6: 0x0002, 0x3ab7: 0x000a, 0x3ab8: 0x0002, 0x3ab9: 0x000a, 0x3aba: 0x000a, 0x3abb: 0x000a, + 0x3abc: 0x0002, 0x3abd: 0x0008, 0x3abf: 0x0002, // Block 0xeb, offset 0x3ac0 - 0x3afb: 0x0002, - 0x3afc: 0x0002, 0x3afd: 0x0002, 0x3afe: 0x0002, 0x3aff: 0x0002, + 0x3ac0: 0x0002, 0x3ac1: 0x0002, 0x3ac2: 0x0002, 0x3ac3: 0x0002, 0x3ac4: 0x0002, 0x3ac5: 0x0002, + 0x3ac6: 0x0002, 0x3ac7: 0x0002, 0x3ac8: 0x000a, 0x3ac9: 0x0002, 0x3aca: 0x0002, 0x3acb: 0x0002, + 0x3acc: 0x0002, 0x3acd: 0x000a, 0x3ace: 0x0002, 0x3acf: 0x0002, 0x3ad0: 0x0002, 0x3ad1: 0x0002, + 0x3ad2: 0x000a, 0x3ad3: 0x000a, 0x3ad4: 0x0002, 0x3ad5: 0x0002, 0x3ad6: 0x0002, 0x3ad7: 0x0002, + 0x3ad8: 0x0002, 0x3ad9: 0x0002, 0x3ada: 0x0002, 0x3adb: 0x0002, 0x3adc: 0x0002, 0x3add: 0x0002, + 0x3ade: 0x0002, 0x3adf: 0x0002, 0x3ae0: 0x0002, 0x3ae1: 0x0002, 0x3ae2: 0x0002, 0x3ae3: 0x0002, + 0x3ae4: 0x0002, 0x3ae5: 0x0002, 0x3ae6: 0x0002, 0x3ae7: 0x0002, 0x3ae8: 0x0002, 0x3ae9: 0x0002, + 0x3aea: 0x0002, 0x3aeb: 0x0002, 0x3aec: 0x0002, 0x3aed: 0x0002, 0x3aee: 0x0002, 0x3aef: 0x0002, + 0x3af0: 0x0002, 0x3af1: 0x0002, 0x3af2: 0x0002, 0x3af3: 0x0002, 0x3af4: 0x0002, 0x3af5: 0x0002, + 0x3af6: 0x0002, 0x3af7: 0x0002, 0x3af8: 0x0002, 0x3af9: 0x0002, 0x3afa: 0x0002, 0x3afb: 0x0002, + 0x3afc: 0x0002, 0x3afd: 0x0002, // Block 0xec, offset 0x3b00 - 0x3b00: 0x0002, 0x3b01: 0x0002, 0x3b02: 0x0002, 0x3b03: 0x0002, 0x3b04: 0x0002, 0x3b05: 0x0002, - 0x3b06: 0x0002, 0x3b07: 0x0002, 0x3b08: 0x0002, 0x3b09: 0x0002, 0x3b0a: 0x0002, 0x3b0b: 0x0002, - 0x3b0c: 0x0002, 0x3b0d: 0x0002, 0x3b0e: 0x0002, 0x3b0f: 0x0002, + 0x3b09: 0x0008, 0x3b0a: 0x0008, 0x3b0b: 0x0002, + 0x3b0c: 0x0002, 0x3b0d: 0x0002, 0x3b0e: 0x0002, 0x3b10: 0x000a, 0x3b11: 0x000a, + 0x3b12: 0x000a, 0x3b13: 0x000a, 0x3b14: 0x000a, 0x3b15: 0x000a, 0x3b16: 0x000a, 0x3b17: 0x000a, + 0x3b18: 0x000a, 0x3b19: 0x000a, 0x3b1a: 0x000a, 0x3b1b: 0x000a, 0x3b1c: 0x000a, 0x3b1d: 0x000a, + 0x3b1e: 0x000a, 0x3b1f: 0x000a, 0x3b20: 0x000a, 0x3b21: 0x000a, 0x3b22: 0x000a, 0x3b23: 0x000a, + 0x3b24: 0x000a, 0x3b25: 0x000a, 0x3b26: 0x000a, 0x3b27: 0x000a, + 0x3b2f: 0x0008, + 0x3b30: 0x0008, 0x3b33: 0x0008, 0x3b34: 0x0008, 0x3b35: 0x0008, + 0x3b36: 0x0008, 0x3b37: 0x0008, 0x3b38: 0x0008, 0x3b39: 0x0008, 0x3b3a: 0x0002, // Block 0xed, offset 0x3b40 - 0x3b40: 0x0002, 0x3b41: 0x0002, 0x3b42: 0x0002, 0x3b43: 0x0002, 0x3b44: 0x0002, 0x3b45: 0x0002, - 0x3b4c: 0x0002, 0x3b50: 0x0002, 0x3b51: 0x0002, - 0x3b52: 0x0002, 0x3b55: 0x0002, 0x3b56: 0x0002, 0x3b57: 0x0002, - 0x3b58: 0x0002, 0x3b5c: 0x0002, 0x3b5d: 0x0002, - 0x3b5e: 0x0002, 0x3b5f: 0x0002, - 0x3b6b: 0x0002, 0x3b6c: 0x0002, - 0x3b74: 0x0002, 0x3b75: 0x0002, - 0x3b76: 0x0002, 0x3b77: 0x0002, 0x3b78: 0x0002, 0x3b79: 0x0002, 0x3b7a: 0x0002, 0x3b7b: 0x0002, - 0x3b7c: 0x0002, + 0x3b47: 0x0008, 0x3b4a: 0x0008, 0x3b4b: 0x0008, + 0x3b4c: 0x0008, 0x3b4d: 0x0008, 0x3b50: 0x0008, + 0x3b55: 0x0002, 0x3b56: 0x0002, + 0x3b64: 0x0002, 0x3b65: 0x0008, 0x3b68: 0x0008, + 0x3b71: 0x0008, 0x3b72: 0x0008, + 0x3b7c: 0x0008, // Block 0xee, offset 0x3b80 - 0x3ba0: 0x0002, 0x3ba1: 0x0002, 0x3ba2: 0x0002, 0x3ba3: 0x0002, - 0x3ba4: 0x0002, 0x3ba5: 0x0002, 0x3ba6: 0x0002, 0x3ba7: 0x0002, 0x3ba8: 0x0002, 0x3ba9: 0x0002, - 0x3baa: 0x0002, 0x3bab: 0x0002, - 0x3bb0: 0x0002, + 0x3b82: 0x0008, 0x3b83: 0x0008, 0x3b84: 0x0008, + 0x3b91: 0x0008, + 0x3b92: 0x0008, 0x3b93: 0x0008, + 0x3b9c: 0x0008, 0x3b9d: 0x0008, + 0x3b9e: 0x0008, 0x3ba1: 0x0008, 0x3ba3: 0x0008, + 0x3ba8: 0x0008, + 0x3baf: 0x0008, + 0x3bb3: 0x0008, + 0x3bba: 0x0008, 0x3bbb: 0x0002, + 0x3bbc: 0x0002, 0x3bbd: 0x0002, 0x3bbe: 0x0002, 0x3bbf: 0x0002, // Block 0xef, offset 0x3bc0 - 0x3bcc: 0x0002, 0x3bcd: 0x0002, 0x3bce: 0x0002, 0x3bcf: 0x0002, 0x3bd0: 0x0002, 0x3bd1: 0x0002, + 0x3bc0: 0x0002, 0x3bc1: 0x0002, 0x3bc2: 0x0002, 0x3bc3: 0x0002, 0x3bc4: 0x0002, 0x3bc5: 0x0002, + 0x3bc6: 0x0002, 0x3bc7: 0x0002, 0x3bc8: 0x0002, 0x3bc9: 0x0002, 0x3bca: 0x0002, 0x3bcb: 0x0002, + 0x3bcc: 0x0002, 0x3bcd: 0x0002, 0x3bce: 0x0002, 0x3bcf: 0x0002, 0x3bd0: 0x000a, 0x3bd1: 0x0002, 0x3bd2: 0x0002, 0x3bd3: 0x0002, 0x3bd4: 0x0002, 0x3bd5: 0x0002, 0x3bd6: 0x0002, 0x3bd7: 0x0002, 0x3bd8: 0x0002, 0x3bd9: 0x0002, 0x3bda: 0x0002, 0x3bdb: 0x0002, 0x3bdc: 0x0002, 0x3bdd: 0x0002, 0x3bde: 0x0002, 0x3bdf: 0x0002, 0x3be0: 0x0002, 0x3be1: 0x0002, 0x3be2: 0x0002, 0x3be3: 0x0002, 0x3be4: 0x0002, 0x3be5: 0x0002, 0x3be6: 0x0002, 0x3be7: 0x0002, 0x3be8: 0x0002, 0x3be9: 0x0002, 0x3bea: 0x0002, 0x3beb: 0x0002, 0x3bec: 0x0002, 0x3bed: 0x0002, 0x3bee: 0x0002, 0x3bef: 0x0002, 0x3bf0: 0x0002, 0x3bf1: 0x0002, 0x3bf2: 0x0002, 0x3bf3: 0x0002, 0x3bf4: 0x0002, 0x3bf5: 0x0002, - 0x3bf6: 0x0002, 0x3bf7: 0x0002, 0x3bf8: 0x0002, 0x3bf9: 0x0002, 0x3bfa: 0x0002, + 0x3bf6: 0x0002, 0x3bf7: 0x0002, 0x3bf8: 0x0002, 0x3bf9: 0x0002, 0x3bfa: 0x0002, 0x3bfb: 0x0002, 0x3bfc: 0x0002, 0x3bfd: 0x0002, 0x3bfe: 0x0002, 0x3bff: 0x0002, // Block 0xf0, offset 0x3c00 0x3c00: 0x0002, 0x3c01: 0x0002, 0x3c02: 0x0002, 0x3c03: 0x0002, 0x3c04: 0x0002, 0x3c05: 0x0002, - 0x3c07: 0x0002, 0x3c08: 0x0002, 0x3c09: 0x0002, 0x3c0a: 0x0002, 0x3c0b: 0x0002, - 0x3c0c: 0x0002, 0x3c0d: 0x0002, 0x3c0e: 0x0002, 0x3c0f: 0x0002, 0x3c10: 0x0002, 0x3c11: 0x0002, - 0x3c12: 0x0002, 0x3c13: 0x0002, 0x3c14: 0x0002, 0x3c15: 0x0002, 0x3c16: 0x0002, 0x3c17: 0x0002, - 0x3c18: 0x0002, 0x3c19: 0x0002, 0x3c1a: 0x0002, 0x3c1b: 0x0002, 0x3c1c: 0x0002, 0x3c1d: 0x0002, - 0x3c1e: 0x0002, 0x3c1f: 0x0002, 0x3c20: 0x0002, 0x3c21: 0x0002, 0x3c22: 0x0002, 0x3c23: 0x0002, - 0x3c24: 0x0002, 0x3c25: 0x0002, 0x3c26: 0x0002, 0x3c27: 0x0002, 0x3c28: 0x0002, 0x3c29: 0x0002, - 0x3c2a: 0x0002, 0x3c2b: 0x0002, 0x3c2c: 0x0002, 0x3c2d: 0x0002, 0x3c2e: 0x0002, 0x3c2f: 0x0002, - 0x3c30: 0x0002, 0x3c31: 0x0002, 0x3c32: 0x0002, 0x3c33: 0x0002, 0x3c34: 0x0002, 0x3c35: 0x0002, - 0x3c36: 0x0002, 0x3c37: 0x0002, 0x3c38: 0x0002, 0x3c39: 0x0002, 0x3c3a: 0x0002, 0x3c3b: 0x0002, - 0x3c3c: 0x0002, 0x3c3d: 0x0002, 0x3c3e: 0x0002, 0x3c3f: 0x0002, + 0x3c06: 0x0002, 0x3c07: 0x0002, 0x3c08: 0x0002, 0x3c09: 0x0002, 0x3c0a: 0x0002, 0x3c0b: 0x0002, + 0x3c0c: 0x0002, 0x3c0d: 0x0002, 0x3c0e: 0x0002, 0x3c0f: 0x0002, // Block 0xf1, offset 0x3c40 - 0x3c70: 0x0002, 0x3c71: 0x0002, 0x3c72: 0x0002, 0x3c73: 0x0002, 0x3c74: 0x0002, 0x3c75: 0x0002, - 0x3c76: 0x0002, 0x3c77: 0x0002, 0x3c78: 0x0002, 0x3c79: 0x0002, 0x3c7a: 0x0002, 0x3c7b: 0x0002, - 0x3c7c: 0x0002, + 0x3c40: 0x0002, 0x3c41: 0x0002, 0x3c42: 0x0002, 0x3c43: 0x0002, 0x3c44: 0x0002, 0x3c45: 0x0002, + 0x3c46: 0x0002, 0x3c47: 0x000a, 0x3c48: 0x0002, 0x3c49: 0x0002, 0x3c4a: 0x0002, 0x3c4b: 0x0002, + 0x3c4c: 0x0002, 0x3c4d: 0x000a, 0x3c4e: 0x0002, 0x3c4f: 0x0002, 0x3c50: 0x0002, 0x3c51: 0x000a, + 0x3c52: 0x0002, 0x3c53: 0x0002, 0x3c54: 0x000a, 0x3c55: 0x0002, 0x3c56: 0x0002, 0x3c57: 0x0002, + 0x3c58: 0x000a, 0x3c59: 0x0002, 0x3c5a: 0x0002, 0x3c5b: 0x0002, 0x3c5c: 0x0002, 0x3c5d: 0x0002, + 0x3c5e: 0x0002, 0x3c5f: 0x0002, 0x3c60: 0x0002, 0x3c61: 0x0002, 0x3c62: 0x0002, 0x3c63: 0x0002, + 0x3c64: 0x0002, 0x3c65: 0x0002, 0x3c66: 0x0002, 0x3c67: 0x0002, 0x3c68: 0x0002, 0x3c69: 0x0002, + 0x3c6a: 0x0002, 0x3c6b: 0x0002, 0x3c6c: 0x0002, 0x3c6d: 0x000a, 0x3c6e: 0x0002, 0x3c6f: 0x0002, + 0x3c70: 0x0002, 0x3c71: 0x0002, 0x3c72: 0x000a, 0x3c73: 0x0002, 0x3c74: 0x0002, 0x3c75: 0x0002, + 0x3c76: 0x0002, 0x3c77: 0x0002, 0x3c78: 0x0002, 0x3c79: 0x000a, 0x3c7a: 0x000a, 0x3c7b: 0x0002, + 0x3c7c: 0x000a, 0x3c7d: 0x0002, 0x3c7e: 0x0002, 0x3c7f: 0x0002, // Block 0xf2, offset 0x3c80 0x3c80: 0x0002, 0x3c81: 0x0002, 0x3c82: 0x0002, 0x3c83: 0x0002, 0x3c84: 0x0002, 0x3c85: 0x0002, - 0x3c86: 0x0002, 0x3c87: 0x0002, 0x3c88: 0x0002, 0x3c89: 0x0002, 0x3c8a: 0x0002, - 0x3c8e: 0x0002, 0x3c8f: 0x0002, 0x3c90: 0x0002, 0x3c91: 0x0002, - 0x3c92: 0x0002, 0x3c93: 0x0002, 0x3c94: 0x0002, 0x3c95: 0x0002, 0x3c96: 0x0002, 0x3c97: 0x0002, - 0x3c98: 0x0002, 0x3c99: 0x0002, 0x3c9a: 0x0002, 0x3c9b: 0x0002, 0x3c9c: 0x0002, 0x3c9d: 0x0002, - 0x3c9e: 0x0002, 0x3c9f: 0x0002, 0x3ca0: 0x0002, 0x3ca1: 0x0002, 0x3ca2: 0x0002, 0x3ca3: 0x0002, - 0x3ca4: 0x0002, 0x3ca5: 0x0002, 0x3ca6: 0x0002, 0x3ca7: 0x0002, 0x3ca8: 0x0002, 0x3ca9: 0x0002, - 0x3caa: 0x0002, 0x3cab: 0x0002, 0x3cac: 0x0002, 0x3cad: 0x0002, 0x3cae: 0x0002, 0x3caf: 0x0002, - 0x3cb0: 0x0002, 0x3cb1: 0x0002, 0x3cb2: 0x0002, 0x3cb3: 0x0002, 0x3cb4: 0x0002, 0x3cb5: 0x0002, + 0x3c8b: 0x0008, + 0x3c8c: 0x0002, 0x3c8d: 0x0008, 0x3c8e: 0x0008, 0x3c8f: 0x0008, 0x3c90: 0x0002, 0x3c91: 0x0002, + 0x3c92: 0x0002, 0x3c95: 0x0002, 0x3c96: 0x0002, 0x3c97: 0x0002, + 0x3c98: 0x0002, 0x3c9c: 0x0002, 0x3c9d: 0x0002, + 0x3c9e: 0x0002, 0x3c9f: 0x0002, 0x3ca0: 0x0008, 0x3ca1: 0x0008, 0x3ca2: 0x0008, 0x3ca3: 0x0008, + 0x3ca4: 0x0008, 0x3ca5: 0x0008, 0x3ca9: 0x0008, + 0x3cab: 0x0002, 0x3cac: 0x0002, + 0x3cb0: 0x0008, 0x3cb3: 0x0008, 0x3cb4: 0x0002, 0x3cb5: 0x0002, 0x3cb6: 0x0002, 0x3cb7: 0x0002, 0x3cb8: 0x0002, 0x3cb9: 0x0002, 0x3cba: 0x0002, 0x3cbb: 0x0002, - 0x3cbc: 0x0002, 0x3cbd: 0x0002, 0x3cbe: 0x0002, 0x3cbf: 0x0002, + 0x3cbc: 0x0002, // Block 0xf3, offset 0x3cc0 - 0x3cc0: 0x0002, 0x3cc1: 0x0002, 0x3cc2: 0x0002, 0x3cc3: 0x0002, 0x3cc4: 0x0002, 0x3cc5: 0x0002, - 0x3cc6: 0x0002, 0x3cc8: 0x0002, - 0x3ccd: 0x0002, 0x3cce: 0x0002, 0x3ccf: 0x0002, 0x3cd0: 0x0002, 0x3cd1: 0x0002, - 0x3cd2: 0x0002, 0x3cd3: 0x0002, 0x3cd4: 0x0002, 0x3cd5: 0x0002, 0x3cd6: 0x0002, 0x3cd7: 0x0002, - 0x3cd8: 0x0002, 0x3cd9: 0x0002, 0x3cda: 0x0002, 0x3cdb: 0x0002, 0x3cdc: 0x0002, - 0x3cdf: 0x0002, 0x3ce0: 0x0002, 0x3ce1: 0x0002, 0x3ce2: 0x0002, 0x3ce3: 0x0002, + 0x3ce0: 0x0002, 0x3ce1: 0x0002, 0x3ce2: 0x0002, 0x3ce3: 0x0002, 0x3ce4: 0x0002, 0x3ce5: 0x0002, 0x3ce6: 0x0002, 0x3ce7: 0x0002, 0x3ce8: 0x0002, 0x3ce9: 0x0002, - 0x3cea: 0x0002, 0x3cef: 0x0002, - 0x3cf0: 0x0002, 0x3cf1: 0x0002, 0x3cf2: 0x0002, 0x3cf3: 0x0002, 0x3cf4: 0x0002, 0x3cf5: 0x0002, - 0x3cf6: 0x0002, 0x3cf7: 0x0002, 0x3cf8: 0x0002, + 0x3cea: 0x0002, 0x3ceb: 0x0002, + 0x3cf0: 0x0002, // Block 0xf4, offset 0x3d00 - 0x3d01: 0x0001, - 0x3d20: 0x0001, 0x3d21: 0x0001, 0x3d22: 0x0001, 0x3d23: 0x0001, - 0x3d24: 0x0001, 0x3d25: 0x0001, 0x3d26: 0x0001, 0x3d27: 0x0001, 0x3d28: 0x0001, 0x3d29: 0x0001, - 0x3d2a: 0x0001, 0x3d2b: 0x0001, 0x3d2c: 0x0001, 0x3d2d: 0x0001, 0x3d2e: 0x0001, 0x3d2f: 0x0001, - 0x3d30: 0x0001, 0x3d31: 0x0001, 0x3d32: 0x0001, 0x3d33: 0x0001, 0x3d34: 0x0001, 0x3d35: 0x0001, - 0x3d36: 0x0001, 0x3d37: 0x0001, 0x3d38: 0x0001, 0x3d39: 0x0001, 0x3d3a: 0x0001, 0x3d3b: 0x0001, - 0x3d3c: 0x0001, 0x3d3d: 0x0001, 0x3d3e: 0x0001, 0x3d3f: 0x0001, + 0x3d0c: 0x0002, 0x3d0d: 0x0002, 0x3d0e: 0x0002, 0x3d0f: 0x0002, 0x3d10: 0x0002, 0x3d11: 0x0002, + 0x3d12: 0x0002, 0x3d13: 0x0002, 0x3d14: 0x0002, 0x3d15: 0x0002, 0x3d16: 0x0002, 0x3d17: 0x0002, + 0x3d18: 0x0002, 0x3d19: 0x0002, 0x3d1a: 0x0002, 0x3d1b: 0x0002, 0x3d1c: 0x0002, 0x3d1d: 0x0002, + 0x3d1e: 0x0002, 0x3d1f: 0x0002, 0x3d20: 0x0002, 0x3d21: 0x0002, 0x3d22: 0x0002, 0x3d23: 0x0002, + 0x3d24: 0x0002, 0x3d25: 0x0002, 0x3d26: 0x0002, 0x3d27: 0x0002, 0x3d28: 0x0002, 0x3d29: 0x0002, + 0x3d2a: 0x0002, 0x3d2b: 0x0002, 0x3d2c: 0x0002, 0x3d2d: 0x0002, 0x3d2e: 0x0002, 0x3d2f: 0x0002, + 0x3d30: 0x0002, 0x3d31: 0x0002, 0x3d32: 0x0002, 0x3d33: 0x0002, 0x3d34: 0x0002, 0x3d35: 0x0002, + 0x3d36: 0x0002, 0x3d37: 0x0002, 0x3d38: 0x0002, 0x3d39: 0x0002, 0x3d3a: 0x0002, + 0x3d3c: 0x0002, 0x3d3d: 0x0002, 0x3d3e: 0x0002, 0x3d3f: 0x0002, // Block 0xf5, offset 0x3d40 - 0x3d40: 0x0003, 0x3d41: 0x0003, 0x3d42: 0x0003, 0x3d43: 0x0003, 0x3d44: 0x0003, 0x3d45: 0x0003, - 0x3d46: 0x0003, 0x3d47: 0x0003, 0x3d48: 0x0003, 0x3d49: 0x0003, 0x3d4a: 0x0003, 0x3d4b: 0x0003, - 0x3d4c: 0x0003, 0x3d4d: 0x0003, 0x3d4e: 0x0003, 0x3d4f: 0x0003, 0x3d50: 0x0003, 0x3d51: 0x0003, - 0x3d52: 0x0003, 0x3d53: 0x0003, 0x3d54: 0x0003, 0x3d55: 0x0003, 0x3d56: 0x0003, 0x3d57: 0x0003, - 0x3d58: 0x0003, 0x3d59: 0x0003, 0x3d5a: 0x0003, 0x3d5b: 0x0003, 0x3d5c: 0x0003, 0x3d5d: 0x0003, - 0x3d5e: 0x0003, 0x3d5f: 0x0003, 0x3d60: 0x0003, 0x3d61: 0x0003, 0x3d62: 0x0003, 0x3d63: 0x0003, - 0x3d64: 0x0003, 0x3d65: 0x0003, 0x3d66: 0x0003, 0x3d67: 0x0003, 0x3d68: 0x0003, 0x3d69: 0x0003, - 0x3d6a: 0x0003, 0x3d6b: 0x0003, 0x3d6c: 0x0003, 0x3d6d: 0x0003, 0x3d6e: 0x0003, 0x3d6f: 0x0003, - 0x3d70: 0x0003, 0x3d71: 0x0003, 0x3d72: 0x0003, 0x3d73: 0x0003, 0x3d74: 0x0003, 0x3d75: 0x0003, - 0x3d76: 0x0003, 0x3d77: 0x0003, 0x3d78: 0x0003, 0x3d79: 0x0003, 0x3d7a: 0x0003, 0x3d7b: 0x0003, - 0x3d7c: 0x0003, 0x3d7d: 0x0003, + 0x3d40: 0x0002, 0x3d41: 0x0002, 0x3d42: 0x0002, 0x3d43: 0x0002, 0x3d44: 0x0002, 0x3d45: 0x0002, + 0x3d47: 0x0002, 0x3d48: 0x0002, 0x3d49: 0x0002, 0x3d4a: 0x0002, 0x3d4b: 0x0002, + 0x3d4c: 0x0002, 0x3d4d: 0x0002, 0x3d4e: 0x0002, 0x3d4f: 0x0002, 0x3d50: 0x0002, 0x3d51: 0x0002, + 0x3d52: 0x0002, 0x3d53: 0x0002, 0x3d54: 0x0002, 0x3d55: 0x0002, 0x3d56: 0x0002, 0x3d57: 0x0002, + 0x3d58: 0x0002, 0x3d59: 0x0002, 0x3d5a: 0x0002, 0x3d5b: 0x0002, 0x3d5c: 0x0002, 0x3d5d: 0x0002, + 0x3d5e: 0x0002, 0x3d5f: 0x0002, 0x3d60: 0x0002, 0x3d61: 0x0002, 0x3d62: 0x0002, 0x3d63: 0x0002, + 0x3d64: 0x0002, 0x3d65: 0x0002, 0x3d66: 0x0002, 0x3d67: 0x0002, 0x3d68: 0x0002, 0x3d69: 0x0002, + 0x3d6a: 0x0002, 0x3d6b: 0x0002, 0x3d6c: 0x0002, 0x3d6d: 0x0002, 0x3d6e: 0x0002, 0x3d6f: 0x0002, + 0x3d70: 0x0002, 0x3d71: 0x0002, 0x3d72: 0x0002, 0x3d73: 0x0002, 0x3d74: 0x0002, 0x3d75: 0x0002, + 0x3d76: 0x0002, 0x3d77: 0x0002, 0x3d78: 0x0002, 0x3d79: 0x0002, 0x3d7a: 0x0002, 0x3d7b: 0x0002, + 0x3d7c: 0x0002, 0x3d7d: 0x0002, 0x3d7e: 0x0002, 0x3d7f: 0x0002, + // Block 0xf6, offset 0x3d80 + 0x3db0: 0x0002, 0x3db1: 0x0002, 0x3db2: 0x0002, 0x3db3: 0x0002, 0x3db4: 0x0002, 0x3db5: 0x0002, + 0x3db6: 0x0002, 0x3db7: 0x0002, 0x3db8: 0x0002, 0x3db9: 0x0002, 0x3dba: 0x0002, 0x3dbb: 0x0002, + 0x3dbc: 0x0002, + // Block 0xf7, offset 0x3dc0 + 0x3dc0: 0x0002, 0x3dc1: 0x0002, 0x3dc2: 0x0002, 0x3dc3: 0x0002, 0x3dc4: 0x0002, 0x3dc5: 0x0002, + 0x3dc6: 0x0002, 0x3dc7: 0x0002, 0x3dc8: 0x0002, 0x3dc9: 0x0002, 0x3dca: 0x0002, + 0x3dce: 0x0002, 0x3dcf: 0x0002, 0x3dd0: 0x0002, 0x3dd1: 0x0002, + 0x3dd2: 0x0002, 0x3dd3: 0x0002, 0x3dd4: 0x0002, 0x3dd5: 0x0002, 0x3dd6: 0x0002, 0x3dd7: 0x0002, + 0x3dd8: 0x0002, 0x3dd9: 0x0002, 0x3dda: 0x0002, 0x3ddb: 0x0002, 0x3ddc: 0x0002, 0x3ddd: 0x0002, + 0x3dde: 0x0002, 0x3ddf: 0x0002, 0x3de0: 0x0002, 0x3de1: 0x0002, 0x3de2: 0x0002, 0x3de3: 0x0002, + 0x3de4: 0x0002, 0x3de5: 0x0002, 0x3de6: 0x0002, 0x3de7: 0x0002, 0x3de8: 0x0002, 0x3de9: 0x0002, + 0x3dea: 0x0002, 0x3deb: 0x0002, 0x3dec: 0x0002, 0x3ded: 0x0002, 0x3dee: 0x0002, 0x3def: 0x0002, + 0x3df0: 0x0002, 0x3df1: 0x0002, 0x3df2: 0x0002, 0x3df3: 0x0002, 0x3df4: 0x0002, 0x3df5: 0x0002, + 0x3df6: 0x0002, 0x3df7: 0x0002, 0x3df8: 0x0002, 0x3df9: 0x0002, 0x3dfa: 0x0002, 0x3dfb: 0x0002, + 0x3dfc: 0x0002, 0x3dfd: 0x0002, 0x3dfe: 0x0002, 0x3dff: 0x0002, + // Block 0xf8, offset 0x3e00 + 0x3e00: 0x0002, 0x3e01: 0x0002, 0x3e02: 0x0002, 0x3e03: 0x0002, 0x3e04: 0x0002, 0x3e05: 0x0002, + 0x3e06: 0x0002, 0x3e08: 0x0002, + 0x3e0d: 0x0002, 0x3e0e: 0x0002, 0x3e0f: 0x0002, 0x3e10: 0x0002, 0x3e11: 0x0002, + 0x3e12: 0x0002, 0x3e13: 0x0002, 0x3e14: 0x0002, 0x3e15: 0x0002, 0x3e16: 0x0002, 0x3e17: 0x0002, + 0x3e18: 0x0002, 0x3e19: 0x0002, 0x3e1a: 0x0002, 0x3e1b: 0x0002, 0x3e1c: 0x0002, + 0x3e1f: 0x0002, 0x3e20: 0x0002, 0x3e21: 0x0002, 0x3e22: 0x0002, 0x3e23: 0x0002, + 0x3e24: 0x0002, 0x3e25: 0x0002, 0x3e26: 0x0002, 0x3e27: 0x0002, 0x3e28: 0x0002, 0x3e29: 0x0002, + 0x3e2a: 0x0002, 0x3e2f: 0x0002, + 0x3e30: 0x0002, 0x3e31: 0x0002, 0x3e32: 0x0002, 0x3e33: 0x0002, 0x3e34: 0x0002, 0x3e35: 0x0002, + 0x3e36: 0x0002, 0x3e37: 0x0002, 0x3e38: 0x0002, + // Block 0xf9, offset 0x3e40 + 0x3e40: 0x0002, 0x3e41: 0x0002, 0x3e42: 0x0002, 0x3e43: 0x0002, 0x3e44: 0x0002, 0x3e45: 0x0002, + 0x3e46: 0x0002, 0x3e47: 0x0002, 0x3e48: 0x0002, 0x3e49: 0x0002, 0x3e4a: 0x0002, 0x3e4b: 0x0002, + 0x3e4c: 0x0002, 0x3e4d: 0x0002, 0x3e4e: 0x0002, 0x3e4f: 0x0002, 0x3e50: 0x0002, 0x3e51: 0x0002, + 0x3e52: 0x0002, 0x3e53: 0x0002, 0x3e54: 0x0002, 0x3e55: 0x0002, 0x3e56: 0x0002, 0x3e57: 0x0002, + 0x3e58: 0x0002, 0x3e59: 0x0002, 0x3e5a: 0x0002, 0x3e5b: 0x0002, 0x3e5c: 0x0002, 0x3e5d: 0x0002, + 0x3e5e: 0x0002, 0x3e5f: 0x0002, 0x3e60: 0x0002, 0x3e61: 0x0002, 0x3e62: 0x0002, 0x3e63: 0x0002, + 0x3e64: 0x0002, 0x3e65: 0x0002, 0x3e66: 0x0002, 0x3e67: 0x0002, 0x3e68: 0x0002, 0x3e69: 0x0002, + 0x3e6a: 0x0002, 0x3e6b: 0x0002, 0x3e6c: 0x0002, 0x3e6d: 0x0002, 0x3e6e: 0x0002, 0x3e6f: 0x0002, + 0x3e70: 0x0002, 0x3e71: 0x0002, 0x3e72: 0x0002, 0x3e73: 0x0002, 0x3e74: 0x0002, 0x3e75: 0x0002, + 0x3e76: 0x0002, 0x3e77: 0x0002, 0x3e78: 0x0002, 0x3e79: 0x0002, 0x3e7a: 0x0002, 0x3e7b: 0x0002, + 0x3e7c: 0x0002, 0x3e7d: 0x0002, + // Block 0xfa, offset 0x3e80 + 0x3e81: 0x0001, + 0x3ea0: 0x0001, 0x3ea1: 0x0001, 0x3ea2: 0x0001, 0x3ea3: 0x0001, + 0x3ea4: 0x0001, 0x3ea5: 0x0001, 0x3ea6: 0x0001, 0x3ea7: 0x0001, 0x3ea8: 0x0001, 0x3ea9: 0x0001, + 0x3eaa: 0x0001, 0x3eab: 0x0001, 0x3eac: 0x0001, 0x3ead: 0x0001, 0x3eae: 0x0001, 0x3eaf: 0x0001, + 0x3eb0: 0x0001, 0x3eb1: 0x0001, 0x3eb2: 0x0001, 0x3eb3: 0x0001, 0x3eb4: 0x0001, 0x3eb5: 0x0001, + 0x3eb6: 0x0001, 0x3eb7: 0x0001, 0x3eb8: 0x0001, 0x3eb9: 0x0001, 0x3eba: 0x0001, 0x3ebb: 0x0001, + 0x3ebc: 0x0001, 0x3ebd: 0x0001, 0x3ebe: 0x0001, 0x3ebf: 0x0001, + // Block 0xfb, offset 0x3ec0 + 0x3ec0: 0x0004, 0x3ec1: 0x0004, 0x3ec2: 0x0004, 0x3ec3: 0x0004, 0x3ec4: 0x0004, 0x3ec5: 0x0004, + 0x3ec6: 0x0004, 0x3ec7: 0x0004, 0x3ec8: 0x0004, 0x3ec9: 0x0004, 0x3eca: 0x0004, 0x3ecb: 0x0004, + 0x3ecc: 0x0004, 0x3ecd: 0x0004, 0x3ece: 0x0004, 0x3ecf: 0x0004, 0x3ed0: 0x0004, 0x3ed1: 0x0004, + 0x3ed2: 0x0004, 0x3ed3: 0x0004, 0x3ed4: 0x0004, 0x3ed5: 0x0004, 0x3ed6: 0x0004, 0x3ed7: 0x0004, + 0x3ed8: 0x0004, 0x3ed9: 0x0004, 0x3eda: 0x0004, 0x3edb: 0x0004, 0x3edc: 0x0004, 0x3edd: 0x0004, + 0x3ede: 0x0004, 0x3edf: 0x0004, 0x3ee0: 0x0004, 0x3ee1: 0x0004, 0x3ee2: 0x0004, 0x3ee3: 0x0004, + 0x3ee4: 0x0004, 0x3ee5: 0x0004, 0x3ee6: 0x0004, 0x3ee7: 0x0004, 0x3ee8: 0x0004, 0x3ee9: 0x0004, + 0x3eea: 0x0004, 0x3eeb: 0x0004, 0x3eec: 0x0004, 0x3eed: 0x0004, 0x3eee: 0x0004, 0x3eef: 0x0004, + 0x3ef0: 0x0004, 0x3ef1: 0x0004, 0x3ef2: 0x0004, 0x3ef3: 0x0004, 0x3ef4: 0x0004, 0x3ef5: 0x0004, + 0x3ef6: 0x0004, 0x3ef7: 0x0004, 0x3ef8: 0x0004, 0x3ef9: 0x0004, 0x3efa: 0x0004, 0x3efb: 0x0004, + 0x3efc: 0x0004, 0x3efd: 0x0004, } // stringWidthIndex: 30 blocks, 1920 entries, 1920 bytes @@ -1558,12 +1671,13 @@ var stringWidthIndex = [1920]uint8{ 0x188: 0x55, 0x189: 0x56, 0x18a: 0x57, 0x18c: 0x58, 0x18f: 0x59, 0x191: 0x5a, 0x192: 0x5b, 0x193: 0x5c, 0x194: 0x5b, 0x195: 0x5d, 0x196: 0x5e, 0x197: 0x5f, 0x198: 0x60, 0x199: 0x61, 0x19a: 0x62, 0x19b: 0x63, 0x19c: 0x64, 0x19d: 0x65, 0x19e: 0x66, - 0x1ac: 0x67, 0x1ad: 0x68, - 0x1b3: 0x69, 0x1b5: 0x6a, 0x1b7: 0x6b, - 0x1ba: 0x6c, 0x1bb: 0x6d, 0x1bc: 0x39, 0x1bd: 0x39, 0x1be: 0x39, 0x1bf: 0x6e, + 0x1a4: 0x67, + 0x1ac: 0x68, 0x1ad: 0x69, + 0x1b3: 0x6a, 0x1b5: 0x6b, 0x1b7: 0x6c, + 0x1ba: 0x6d, 0x1bb: 0x6e, 0x1bc: 0x39, 0x1bd: 0x39, 0x1be: 0x39, 0x1bf: 0x6f, // Block 0x7, offset 0x1c0 - 0x1c0: 0x6f, 0x1c1: 0x70, 0x1c2: 0x71, 0x1c3: 0x39, 0x1c4: 0x72, 0x1c5: 0x39, 0x1c6: 0x73, 0x1c7: 0x74, - 0x1c8: 0x75, 0x1c9: 0x76, 0x1ca: 0x39, 0x1cb: 0x39, 0x1cc: 0x39, 0x1cd: 0x39, 0x1ce: 0x39, 0x1cf: 0x39, + 0x1c0: 0x70, 0x1c1: 0x71, 0x1c2: 0x72, 0x1c3: 0x39, 0x1c4: 0x73, 0x1c5: 0x39, 0x1c6: 0x74, 0x1c7: 0x75, + 0x1c8: 0x76, 0x1c9: 0x77, 0x1ca: 0x78, 0x1cb: 0x39, 0x1cc: 0x39, 0x1cd: 0x39, 0x1ce: 0x39, 0x1cf: 0x39, 0x1d0: 0x39, 0x1d1: 0x39, 0x1d2: 0x39, 0x1d3: 0x39, 0x1d4: 0x39, 0x1d5: 0x39, 0x1d6: 0x39, 0x1d7: 0x39, 0x1d8: 0x39, 0x1d9: 0x39, 0x1da: 0x39, 0x1db: 0x39, 0x1dc: 0x39, 0x1dd: 0x39, 0x1de: 0x39, 0x1df: 0x39, 0x1e0: 0x39, 0x1e1: 0x39, 0x1e2: 0x39, 0x1e3: 0x39, 0x1e4: 0x39, 0x1e5: 0x39, 0x1e6: 0x39, 0x1e7: 0x39, @@ -1582,17 +1696,17 @@ var stringWidthIndex = [1920]uint8{ // Block 0x9, offset 0x240 0x240: 0x39, 0x241: 0x39, 0x242: 0x39, 0x243: 0x39, 0x244: 0x39, 0x245: 0x39, 0x246: 0x39, 0x247: 0x39, 0x248: 0x39, 0x249: 0x39, 0x24a: 0x39, 0x24b: 0x39, 0x24c: 0x39, 0x24d: 0x39, 0x24e: 0x39, 0x24f: 0x39, - 0x250: 0x39, 0x251: 0x39, 0x252: 0x77, 0x253: 0x78, - 0x259: 0x79, 0x25a: 0x7a, 0x25b: 0x7b, - 0x260: 0x7c, 0x263: 0x7d, 0x264: 0x7e, 0x265: 0x7f, 0x266: 0x80, 0x267: 0x81, - 0x268: 0x82, 0x269: 0x83, 0x26a: 0x84, 0x26b: 0x85, 0x26f: 0x86, + 0x250: 0x39, 0x251: 0x39, 0x252: 0x79, 0x253: 0x7a, + 0x259: 0x7b, 0x25a: 0x7c, 0x25b: 0x7d, + 0x260: 0x7e, 0x263: 0x7f, 0x264: 0x80, 0x265: 0x81, 0x266: 0x82, 0x267: 0x83, + 0x268: 0x84, 0x269: 0x85, 0x26a: 0x86, 0x26b: 0x87, 0x26f: 0x88, 0x270: 0x39, 0x271: 0x39, 0x272: 0x39, 0x273: 0x39, 0x274: 0x39, 0x275: 0x39, 0x276: 0x39, 0x277: 0x39, 0x278: 0x39, 0x279: 0x39, 0x27a: 0x39, 0x27b: 0x39, 0x27c: 0x39, 0x27d: 0x39, 0x27e: 0x39, 0x27f: 0x39, // Block 0xa, offset 0x280 0x280: 0x39, 0x281: 0x39, 0x282: 0x39, 0x283: 0x39, 0x284: 0x39, 0x285: 0x39, 0x286: 0x39, 0x287: 0x39, 0x288: 0x39, 0x289: 0x39, 0x28a: 0x39, 0x28b: 0x39, 0x28c: 0x39, 0x28d: 0x39, 0x28e: 0x39, 0x28f: 0x39, 0x290: 0x39, 0x291: 0x39, 0x292: 0x39, 0x293: 0x39, 0x294: 0x39, 0x295: 0x39, 0x296: 0x39, 0x297: 0x39, - 0x298: 0x39, 0x299: 0x39, 0x29a: 0x39, 0x29b: 0x39, 0x29c: 0x39, 0x29d: 0x39, 0x29e: 0x87, + 0x298: 0x39, 0x299: 0x39, 0x29a: 0x39, 0x29b: 0x39, 0x29c: 0x39, 0x29d: 0x39, 0x29e: 0x89, // Block 0xb, offset 0x2c0 0x2c0: 0x5b, 0x2c1: 0x5b, 0x2c2: 0x5b, 0x2c3: 0x5b, 0x2c4: 0x5b, 0x2c5: 0x5b, 0x2c6: 0x5b, 0x2c7: 0x5b, 0x2c8: 0x5b, 0x2c9: 0x5b, 0x2ca: 0x5b, 0x2cb: 0x5b, 0x2cc: 0x5b, 0x2cd: 0x5b, 0x2ce: 0x5b, 0x2cf: 0x5b, @@ -1608,28 +1722,28 @@ var stringWidthIndex = [1920]uint8{ 0x310: 0x5b, 0x311: 0x5b, 0x312: 0x5b, 0x313: 0x5b, 0x314: 0x5b, 0x315: 0x5b, 0x316: 0x5b, 0x317: 0x5b, 0x318: 0x5b, 0x319: 0x5b, 0x31a: 0x5b, 0x31b: 0x5b, 0x31c: 0x5b, 0x31d: 0x5b, 0x31e: 0x5b, 0x31f: 0x5b, 0x320: 0x5b, 0x321: 0x5b, 0x322: 0x5b, 0x323: 0x5b, 0x324: 0x39, 0x325: 0x39, 0x326: 0x39, 0x327: 0x39, - 0x328: 0x39, 0x329: 0x39, 0x32a: 0x39, 0x32b: 0x39, 0x32c: 0x88, - 0x338: 0x89, 0x339: 0x8a, 0x33b: 0x6a, 0x33c: 0x70, 0x33d: 0x8b, 0x33f: 0x8c, + 0x328: 0x39, 0x329: 0x39, 0x32a: 0x39, 0x32b: 0x39, 0x32c: 0x8a, + 0x338: 0x8b, 0x339: 0x8c, 0x33b: 0x6b, 0x33c: 0x71, 0x33d: 0x8d, 0x33f: 0x8e, // Block 0xd, offset 0x340 - 0x347: 0x8d, - 0x34b: 0x8e, 0x34d: 0x8f, - 0x368: 0x90, 0x36b: 0x91, - 0x374: 0x92, - 0x37a: 0x93, 0x37b: 0x94, 0x37d: 0x95, 0x37e: 0x96, + 0x347: 0x8f, + 0x34b: 0x90, 0x34d: 0x91, + 0x368: 0x92, 0x36b: 0x93, + 0x374: 0x94, + 0x37a: 0x95, 0x37b: 0x96, 0x37d: 0x97, 0x37e: 0x98, // Block 0xe, offset 0x380 - 0x380: 0x97, 0x381: 0x98, 0x382: 0x99, 0x383: 0x9a, 0x384: 0x9b, 0x385: 0x9c, 0x386: 0x9d, 0x387: 0x9e, - 0x388: 0x9f, 0x389: 0x2c, 0x38b: 0xa0, 0x38c: 0x2a, 0x38d: 0xa1, - 0x390: 0xa2, 0x391: 0xa3, 0x392: 0xa4, 0x393: 0xa5, 0x396: 0xa6, 0x397: 0xa7, - 0x398: 0xa8, 0x399: 0xa9, 0x39a: 0xaa, 0x39c: 0xab, - 0x3a0: 0xac, 0x3a4: 0xad, 0x3a5: 0xae, 0x3a7: 0xaf, - 0x3a8: 0xb0, 0x3a9: 0xb1, 0x3aa: 0xb2, - 0x3b0: 0xb3, 0x3b2: 0xb4, 0x3b4: 0xb5, 0x3b5: 0xb6, 0x3b6: 0xb7, - 0x3bb: 0xb8, 0x3bc: 0xb9, 0x3bd: 0xba, + 0x380: 0x99, 0x381: 0x9a, 0x382: 0x9b, 0x383: 0x9c, 0x384: 0x9d, 0x385: 0x9e, 0x386: 0x9f, 0x387: 0xa0, + 0x388: 0xa1, 0x389: 0x2c, 0x38b: 0xa2, 0x38c: 0x2a, 0x38d: 0xa3, + 0x390: 0xa4, 0x391: 0xa5, 0x392: 0xa6, 0x393: 0xa7, 0x396: 0xa8, 0x397: 0xa9, + 0x398: 0xaa, 0x399: 0xab, 0x39a: 0xac, 0x39c: 0xad, + 0x3a0: 0xae, 0x3a4: 0xaf, 0x3a5: 0xb0, 0x3a7: 0xb1, + 0x3a8: 0xb2, 0x3a9: 0xb3, 0x3aa: 0xb4, + 0x3b0: 0xb5, 0x3b2: 0xb6, 0x3b4: 0xb7, 0x3b5: 0xb8, 0x3b6: 0xb9, + 0x3bb: 0xba, 0x3bc: 0xbb, 0x3bd: 0xbc, // Block 0xf, offset 0x3c0 - 0x3d0: 0x45, 0x3d1: 0xbb, + 0x3d0: 0x45, 0x3d1: 0xbd, // Block 0x10, offset 0x400 - 0x42b: 0xbc, 0x42c: 0xbd, - 0x43d: 0xbe, 0x43e: 0xbf, 0x43f: 0xc0, + 0x42b: 0xbe, 0x42c: 0xbf, + 0x43d: 0xc0, 0x43e: 0xc1, 0x43f: 0xc2, // Block 0x11, offset 0x440 0x440: 0x39, 0x441: 0x39, 0x442: 0x39, 0x443: 0x39, 0x444: 0x39, 0x445: 0x39, 0x446: 0x39, 0x447: 0x39, 0x448: 0x39, 0x449: 0x39, 0x44a: 0x39, 0x44b: 0x39, 0x44c: 0x39, 0x44d: 0x39, 0x44e: 0x39, 0x44f: 0x39, @@ -1637,31 +1751,31 @@ var stringWidthIndex = [1920]uint8{ 0x458: 0x39, 0x459: 0x39, 0x45a: 0x39, 0x45b: 0x39, 0x45c: 0x39, 0x45d: 0x39, 0x45e: 0x39, 0x45f: 0x39, 0x460: 0x39, 0x461: 0x39, 0x462: 0x39, 0x463: 0x39, 0x464: 0x39, 0x465: 0x39, 0x466: 0x39, 0x467: 0x39, 0x468: 0x39, 0x469: 0x39, 0x46a: 0x39, 0x46b: 0x39, 0x46c: 0x39, 0x46d: 0x39, 0x46e: 0x39, 0x46f: 0x39, - 0x470: 0x39, 0x471: 0x39, 0x472: 0x39, 0x473: 0xc1, 0x474: 0xc2, 0x476: 0x39, 0x477: 0xc3, + 0x470: 0x39, 0x471: 0x39, 0x472: 0x39, 0x473: 0xc3, 0x474: 0xc4, 0x476: 0x39, 0x477: 0xc5, // Block 0x12, offset 0x480 - 0x4bf: 0xc4, + 0x4bf: 0xc6, // Block 0x13, offset 0x4c0 - 0x4c0: 0x39, 0x4c1: 0x39, 0x4c2: 0x39, 0x4c3: 0x39, 0x4c4: 0xc5, 0x4c5: 0xc6, 0x4c6: 0x39, 0x4c7: 0x39, - 0x4c8: 0x39, 0x4c9: 0x39, 0x4ca: 0x39, 0x4cb: 0xc7, - 0x4f2: 0xc8, + 0x4c0: 0x39, 0x4c1: 0x39, 0x4c2: 0x39, 0x4c3: 0x39, 0x4c4: 0xc7, 0x4c5: 0xc8, 0x4c6: 0x39, 0x4c7: 0x39, + 0x4c8: 0x39, 0x4c9: 0x39, 0x4ca: 0x39, 0x4cb: 0xc9, + 0x4f2: 0xca, // Block 0x14, offset 0x500 - 0x53c: 0xc9, 0x53d: 0xca, + 0x53c: 0xcb, 0x53d: 0xcc, // Block 0x15, offset 0x540 - 0x545: 0xcb, 0x546: 0xcc, - 0x549: 0xcd, 0x54c: 0x39, 0x54d: 0xce, - 0x568: 0xcf, 0x569: 0xd0, 0x56a: 0xd1, + 0x545: 0xcd, 0x546: 0xce, + 0x549: 0xcf, 0x54c: 0x39, 0x54d: 0xd0, + 0x568: 0xd1, 0x569: 0xd2, 0x56a: 0xd3, // Block 0x16, offset 0x580 - 0x580: 0xd2, 0x582: 0xbe, 0x584: 0xbd, - 0x58a: 0xd3, 0x58b: 0xd4, - 0x593: 0xd4, - 0x5a3: 0xd5, 0x5a5: 0xd6, + 0x580: 0xd4, 0x582: 0xc0, 0x584: 0xbf, + 0x58a: 0xd5, 0x58b: 0xd6, + 0x593: 0xd6, + 0x5a3: 0xd7, 0x5a5: 0xd8, // Block 0x17, offset 0x5c0 - 0x5c0: 0xd7, 0x5c3: 0xd8, 0x5c4: 0xd9, 0x5c5: 0xda, 0x5c6: 0xdb, 0x5c7: 0xdc, - 0x5c8: 0xdd, 0x5c9: 0xde, 0x5cc: 0xdf, 0x5cd: 0xe0, 0x5ce: 0xe1, 0x5cf: 0xe2, - 0x5d0: 0xe3, 0x5d1: 0xe4, 0x5d2: 0x39, 0x5d3: 0xe5, 0x5d4: 0xe6, 0x5d5: 0xe7, 0x5d6: 0xe8, 0x5d7: 0xe9, - 0x5d8: 0x39, 0x5d9: 0xea, 0x5da: 0x39, 0x5db: 0xeb, 0x5df: 0xec, - 0x5e4: 0xed, 0x5e5: 0xee, 0x5e6: 0x39, 0x5e7: 0x39, - 0x5e9: 0xef, 0x5ea: 0xf0, 0x5eb: 0xf1, + 0x5c0: 0xd9, 0x5c3: 0xda, 0x5c4: 0xdb, 0x5c5: 0xdc, 0x5c6: 0xdd, 0x5c7: 0xde, + 0x5c8: 0xdf, 0x5c9: 0xe0, 0x5cc: 0xe1, 0x5cd: 0xe2, 0x5ce: 0xe3, 0x5cf: 0xe4, + 0x5d0: 0xe5, 0x5d1: 0xe6, 0x5d2: 0xe7, 0x5d3: 0xe8, 0x5d4: 0xe9, 0x5d5: 0xea, 0x5d6: 0xeb, 0x5d7: 0xec, + 0x5d8: 0xed, 0x5d9: 0xee, 0x5da: 0xef, 0x5db: 0xf0, 0x5df: 0xf1, + 0x5e4: 0xf2, 0x5e5: 0xf3, 0x5e6: 0x39, 0x5e7: 0x39, + 0x5e9: 0xf4, 0x5ea: 0xf5, 0x5eb: 0xf6, // Block 0x18, offset 0x600 0x600: 0x39, 0x601: 0x39, 0x602: 0x39, 0x603: 0x39, 0x604: 0x39, 0x605: 0x39, 0x606: 0x39, 0x607: 0x39, 0x608: 0x39, 0x609: 0x39, 0x60a: 0x39, 0x60b: 0x39, 0x60c: 0x39, 0x60d: 0x39, 0x60e: 0x39, 0x60f: 0x39, @@ -1670,7 +1784,7 @@ var stringWidthIndex = [1920]uint8{ 0x620: 0x39, 0x621: 0x39, 0x622: 0x39, 0x623: 0x39, 0x624: 0x39, 0x625: 0x39, 0x626: 0x39, 0x627: 0x39, 0x628: 0x39, 0x629: 0x39, 0x62a: 0x39, 0x62b: 0x39, 0x62c: 0x39, 0x62d: 0x39, 0x62e: 0x39, 0x62f: 0x39, 0x630: 0x39, 0x631: 0x39, 0x632: 0x39, 0x633: 0x39, 0x634: 0x39, 0x635: 0x39, 0x636: 0x39, 0x637: 0x39, - 0x638: 0x39, 0x639: 0x39, 0x63a: 0x39, 0x63b: 0x39, 0x63c: 0x39, 0x63d: 0x39, 0x63e: 0x39, 0x63f: 0xe6, + 0x638: 0x39, 0x639: 0x39, 0x63a: 0x39, 0x63b: 0x39, 0x63c: 0x39, 0x63d: 0x39, 0x63e: 0x39, 0x63f: 0xf7, // Block 0x19, offset 0x640 0x650: 0x0b, 0x651: 0x0c, 0x653: 0x0d, 0x656: 0x0e, 0x657: 0x06, 0x658: 0x0f, 0x65a: 0x10, 0x65b: 0x11, 0x65c: 0x12, 0x65d: 0x13, 0x65e: 0x14, 0x65f: 0x15, @@ -1679,7 +1793,7 @@ var stringWidthIndex = [1920]uint8{ 0x670: 0x06, 0x671: 0x06, 0x672: 0x06, 0x673: 0x06, 0x674: 0x06, 0x675: 0x06, 0x676: 0x06, 0x677: 0x06, 0x678: 0x06, 0x679: 0x06, 0x67a: 0x06, 0x67b: 0x06, 0x67c: 0x06, 0x67d: 0x06, 0x67e: 0x06, 0x67f: 0x16, // Block 0x1a, offset 0x680 - 0x680: 0xf2, 0x681: 0x08, 0x684: 0x08, 0x685: 0x08, 0x686: 0x08, 0x687: 0x09, + 0x680: 0xf8, 0x681: 0x08, 0x684: 0x08, 0x685: 0x08, 0x686: 0x08, 0x687: 0x09, // Block 0x1b, offset 0x6c0 0x6c0: 0x5b, 0x6c1: 0x5b, 0x6c2: 0x5b, 0x6c3: 0x5b, 0x6c4: 0x5b, 0x6c5: 0x5b, 0x6c6: 0x5b, 0x6c7: 0x5b, 0x6c8: 0x5b, 0x6c9: 0x5b, 0x6ca: 0x5b, 0x6cb: 0x5b, 0x6cc: 0x5b, 0x6cd: 0x5b, 0x6ce: 0x5b, 0x6cf: 0x5b, @@ -1688,7 +1802,7 @@ var stringWidthIndex = [1920]uint8{ 0x6e0: 0x5b, 0x6e1: 0x5b, 0x6e2: 0x5b, 0x6e3: 0x5b, 0x6e4: 0x5b, 0x6e5: 0x5b, 0x6e6: 0x5b, 0x6e7: 0x5b, 0x6e8: 0x5b, 0x6e9: 0x5b, 0x6ea: 0x5b, 0x6eb: 0x5b, 0x6ec: 0x5b, 0x6ed: 0x5b, 0x6ee: 0x5b, 0x6ef: 0x5b, 0x6f0: 0x5b, 0x6f1: 0x5b, 0x6f2: 0x5b, 0x6f3: 0x5b, 0x6f4: 0x5b, 0x6f5: 0x5b, 0x6f6: 0x5b, 0x6f7: 0x5b, - 0x6f8: 0x5b, 0x6f9: 0x5b, 0x6fa: 0x5b, 0x6fb: 0x5b, 0x6fc: 0x5b, 0x6fd: 0x5b, 0x6fe: 0x5b, 0x6ff: 0xf3, + 0x6f8: 0x5b, 0x6f9: 0x5b, 0x6fa: 0x5b, 0x6fb: 0x5b, 0x6fc: 0x5b, 0x6fd: 0x5b, 0x6fe: 0x5b, 0x6ff: 0xf9, // Block 0x1c, offset 0x700 0x720: 0x18, 0x730: 0x09, 0x731: 0x09, 0x732: 0x09, 0x733: 0x09, 0x734: 0x09, 0x735: 0x09, 0x736: 0x09, 0x737: 0x09, diff --git a/width.go b/width.go index f6e0ab7..978432f 100644 --- a/width.go +++ b/width.go @@ -171,26 +171,26 @@ func graphemeWidth[T ~string | []byte](s T, options Options) int { p, sz := lookup(s) prop := property(p) - // Variation Selector 16 (VS16) requests emoji presentation - if prop != _Wide && sz > 0 && len(s) >= sz+3 { - vs := s[sz : sz+3] - if isVS16(vs) { - prop = _Wide - } - // VS15 (0x8E) requests text presentation but does not affect width, - // in my reading of Unicode TR51. Falls through to return the base - // character's property. + if is(prop, _Zero_Width) { + return 0 + } + + if is(prop, _Wide) { + return 2 } - if options.EastAsianWidth && prop == _East_Asian_Ambiguous { - prop = _Wide + // Variation Selector 16 (VS16) requests emoji presentation only for + // bases that have a valid emoji variation sequence (encoded as + // _VS16_Eligible in generated trie data). + if is(prop, _VS16_Eligible) && sz > 0 && len(s) >= sz+3 && isVS16(s[sz:sz+3]) { + return 2 } - if prop > upperBound { - prop = _Default + if options.EastAsianWidth && is(prop, _East_Asian_Ambiguous) { + return 2 } - return propertyWidths[prop] + return 1 } func asciiWidth(b byte) int { @@ -228,12 +228,6 @@ func isVS16[T ~string | []byte](s T) bool { return s[0] == 0xEF && s[1] == 0xB8 && s[2] == 0x8F } -// propertyWidths is a jump table of sorts, instead of a switch -var propertyWidths = [4]int{ - _Default: 1, - _Zero_Width: 0, - _Wide: 2, - _East_Asian_Ambiguous: 1, +func is(props, flag property) bool { + return props&flag != 0 } - -const upperBound = property(len(propertyWidths) - 1) diff --git a/width_test.go b/width_test.go index bcf5a9d..bbc9e0e 100644 --- a/width_test.go +++ b/width_test.go @@ -864,8 +864,9 @@ func TestTR51Conformance(t *testing.T) { } }) - t.Run("C3: VS16 forces emoji presentation", func(t *testing.T) { - // VS16 (U+FE0F) should force emoji presentation (width 2) even for text-presentation characters + t.Run("C3: VS16 forces emoji presentation for valid bases", func(t *testing.T) { + // VS16 (U+FE0F) should force emoji presentation (width 2) + // for characters that have valid emoji variation sequences. textWithVS16 := []string{ "\u2721\uFE0F", // ✡️ star of David with VS16 "\u2692\uFE0F", // ⚒️ hammer and pick with VS16 @@ -876,7 +877,46 @@ func TestTR51Conformance(t *testing.T) { for _, s := range textWithVS16 { got := String(s) if got != 2 { - t.Errorf("String(%q) with VS16 = %d, want 2 (VS16 should force emoji presentation)", s, got) + t.Errorf("String(%q) with VS16 = %d, want 2 (valid VS16 sequence should force emoji presentation)", s, got) + } + } + }) + + t.Run("C4: VS16 is ignored for invalid bases", func(t *testing.T) { + invalidVS16 := []struct { + base string + with string + }{ + {"a", "a\uFE0F"}, + {"ⓜ", "ⓜ\uFE0F"}, + } + + for _, tc := range invalidVS16 { + baseWidth := String(tc.base) + withVS16Width := String(tc.with) + if withVS16Width != baseWidth { + t.Errorf("String(%q) with VS16 = %d, want %d (invalid VS16 sequence should be ignored)", tc.with, withVS16Width, baseWidth) + } + } + }) + + t.Run("C5: later VS16 in ZWJ sequences still yields emoji width", func(t *testing.T) { + // These sequences place FE0F later in the grapheme cluster (not + // immediately after the first code point). They are valid RGI ZWJ + // sequences and should still have width 2. + tests := []struct { + sequence string + desc string + }{ + {"\u26F9\U0001F3FB\u200D\u2642\uFE0F", "man bouncing ball: light skin tone (⛹🏻‍♂️)"}, + {"\U0001F3CB\U0001F3FD\u200D\u2640\uFE0F", "woman lifting weights: medium skin tone (🏋🏽‍♀️)"}, + {"\U0001F575\U0001F3FF\u200D\u2642\uFE0F", "man detective: dark skin tone (🕵🏿‍♂️)"}, + } + + for _, tt := range tests { + got := String(tt.sequence) + if got != 2 { + t.Errorf("String(%q) = %d, want 2 (%s)", tt.sequence, got, tt.desc) } } }) From 80d248962c7b2bebc798fda581caa35df255e726 Mon Sep 17 00:00:00 2001 From: Matt Sherman Date: Sat, 16 May 2026 18:54:06 -0400 Subject: [PATCH 02/10] handle later VS16 --- width.go | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/width.go b/width.go index 978432f..2a7966a 100644 --- a/width.go +++ b/width.go @@ -185,6 +185,9 @@ func graphemeWidth[T ~string | []byte](s T, options Options) int { if is(prop, _VS16_Eligible) && sz > 0 && len(s) >= sz+3 && isVS16(s[sz:sz+3]) { return 2 } + if hasEligibleVS16Pair(s, sz+1) { + return 2 + } if options.EastAsianWidth && is(prop, _East_Asian_Ambiguous) { return 2 @@ -228,6 +231,44 @@ func isVS16[T ~string | []byte](s T) bool { return s[0] == 0xEF && s[1] == 0xB8 && s[2] == 0x8F } +// hasEligibleVS16Pair returns true if the grapheme contains any local +// pair where the base has _VS16_Eligible in trie data. +// It operates on UTF-8 bytes directly (no rune decoding). +func hasEligibleVS16Pair[T ~string | []byte](s T, start int) bool { + if len(s) < 6 { // shortest useful pattern is 1-byte base + FE0F (3 bytes), plus context + return false + } + if start < 0 { + start = 0 + } + for i := start; i+2 < len(s); i++ { + if !isVS16(s[i:]) { + continue + } + if i == 0 { + continue + } + + // Walk back to the start byte of the rune immediately before FE0F. + j := i - 1 + for j > 0 && (s[j]&0xC0) == 0x80 { + j-- + } + + p, rsz := lookup(s[j:]) + if rsz == 0 || j+rsz != i { + // Not an immediate local pair (or invalid UTF-8 boundary). + continue + } + if is(property(p), _VS16_Eligible) { + return true + } + // Skip FE0F bytes; next potential pair starts after them. + i += 2 + } + return false +} + func is(props, flag property) bool { return props&flag != 0 } From 079671be1472df91fe578325cd224da069c538c7 Mon Sep 17 00:00:00 2001 From: Matt Sherman Date: Sun, 17 May 2026 10:56:27 -0400 Subject: [PATCH 03/10] fuzz and fix for hasEligibleVS16Pair --- fuzz_test.go | 72 ++++++++++++++++++++++++++++++++++++++++++++++++++++ width.go | 2 +- 2 files changed, 73 insertions(+), 1 deletion(-) diff --git a/fuzz_test.go b/fuzz_test.go index e076a3a..ac4e62e 100644 --- a/fuzz_test.go +++ b/fuzz_test.go @@ -443,3 +443,75 @@ func FuzzControlSequences(f *testing.F) { } }) } + +// FuzzHasEligibleVS16Pair fuzzes byte-level VS16 detection against +// a slower UTF-8-decoding reference implementation. +func FuzzHasEligibleVS16Pair(f *testing.F) { + if testing.Short() { + f.Skip("skipping fuzz test in short mode") + } + + seeds := []string{ + "", + "a", + "a\uFE0F", // invalid VS16 base + "✡\uFE0F", // valid immediate VS16 pair + "👩‍❤️‍👨", // later VS16 in ZWJ sequence + "\u26F9\U0001F3FB\u200D\u2642\uFE0F", // later VS16 in skin-tone+gender sequence + "\xff\xfe\xfd", // invalid UTF-8 + } + for _, s := range seeds { + f.Add([]byte(s), uint16(0)) + f.Add([]byte(s), uint16(1)) + f.Add([]byte(s), uint16(7)) + } + + f.Fuzz(func(t *testing.T, text []byte, startSeed uint16) { + // Exercise a range that includes in-bounds and out-of-bounds starts. + start := int(startSeed) + if len(text) > 0 { + start %= (len(text) + 3) + } + + gotBytes := hasEligibleVS16Pair(text, start) + gotString := hasEligibleVS16Pair(string(text), start) + if gotBytes != gotString { + t.Errorf("hasEligibleVS16Pair bytes/string mismatch for %q start=%d: %v != %v", text, start, gotBytes, gotString) + } + + want := hasEligibleVS16PairReference(text, start) + if gotBytes != want { + t.Errorf("hasEligibleVS16Pair(%q, start=%d) = %v, want %v", text, start, gotBytes, want) + } + }) +} + +func hasEligibleVS16PairReference(b []byte, start int) bool { + if len(b) == 0 || start >= len(b) { + return false + } + if start < 0 { + start = 0 + } + + i := 0 + prevStart := -1 + for i < len(b) { + r, sz := utf8.DecodeRune(b[i:]) + if sz <= 0 { + break + } + + if i >= start && r == '\uFE0F' && prevStart >= 0 { + p, rsz := lookup(b[prevStart:]) + if rsz > 0 && prevStart+rsz == i && is(property(p), _VS16_Eligible) { + return true + } + } + + prevStart = i + i += sz + } + + return false +} diff --git a/width.go b/width.go index 2a7966a..63b3cc0 100644 --- a/width.go +++ b/width.go @@ -235,7 +235,7 @@ func isVS16[T ~string | []byte](s T) bool { // pair where the base has _VS16_Eligible in trie data. // It operates on UTF-8 bytes directly (no rune decoding). func hasEligibleVS16Pair[T ~string | []byte](s T, start int) bool { - if len(s) < 6 { // shortest useful pattern is 1-byte base + FE0F (3 bytes), plus context + if len(s) < 4 { // shortest useful pattern is 1-byte base + FE0F (3 bytes) return false } if start < 0 { From c7571d361580f8d0c69f4ed5d85a9de82e5b52e4 Mon Sep 17 00:00:00 2001 From: Matt Sherman Date: Sun, 17 May 2026 12:29:05 -0400 Subject: [PATCH 04/10] use IndexByte in hasEligibleVS16Pair Skip directly to each 0xEF candidate instead of scanning byte-by-byte. Loops past non-FE0F candidates (FE0E, fullwidth forms, etc.) so we still find a valid pair later in the cluster. Add C6 conformance test and fuzz seeds for the FE0E/FE20 patterns that motivated the change. ~1% improvement on String_Mixed/EastAsian/Emoji benchmarks. --- fuzz_test.go | 12 +++++++----- width.go | 52 ++++++++++++++++++++++++++++++++------------------- width_test.go | 23 +++++++++++++++++++++++ 3 files changed, 63 insertions(+), 24 deletions(-) diff --git a/fuzz_test.go b/fuzz_test.go index ac4e62e..8b9f04e 100644 --- a/fuzz_test.go +++ b/fuzz_test.go @@ -454,11 +454,13 @@ func FuzzHasEligibleVS16Pair(f *testing.F) { seeds := []string{ "", "a", - "a\uFE0F", // invalid VS16 base - "✡\uFE0F", // valid immediate VS16 pair - "👩‍❤️‍👨", // later VS16 in ZWJ sequence - "\u26F9\U0001F3FB\u200D\u2642\uFE0F", // later VS16 in skin-tone+gender sequence - "\xff\xfe\xfd", // invalid UTF-8 + "a\uFE0F", // invalid VS16 base + "✡\uFE0F", // valid immediate VS16 pair + "👩‍❤️‍👨", // later VS16 in ZWJ sequence + "\u26F9\U0001F3FB\u200D\u2642\uFE0F", // later VS16 in skin-tone+gender sequence + "\u26F9\u0301\uFE0E\u200D\u2660\uFE0F", // non-FE0F 0xEF (FE0E) before the real FE0F + "\u26F9\uFE20\u200D\u2660\uFE0F", // non-FE0F 0xEF (FE20) before the real FE0F + "\xff\xfe\xfd", // invalid UTF-8 } for _, s := range seeds { f.Add([]byte(s), uint16(0)) diff --git a/width.go b/width.go index 63b3cc0..c2aae10 100644 --- a/width.go +++ b/width.go @@ -1,6 +1,8 @@ package displaywidth import ( + "bytes" + "strings" "unicode/utf8" "github.com/clipperhouse/uax29/v2/graphemes" @@ -231,44 +233,56 @@ func isVS16[T ~string | []byte](s T) bool { return s[0] == 0xEF && s[1] == 0xB8 && s[2] == 0x8F } -// hasEligibleVS16Pair returns true if the grapheme contains any local -// pair where the base has _VS16_Eligible in trie data. -// It operates on UTF-8 bytes directly (no rune decoding). +// hasEligibleVS16Pair returns true if the byte range starting at start +// contains a base+FE0F pair where the base has _VS16_Eligible in trie +// data. It uses IndexByte to skip directly to each 0xEF candidate and +// only loops past candidates that aren't FE0F (e.g. FE0E, fullwidth +// forms) or whose preceding rune is not eligible. func hasEligibleVS16Pair[T ~string | []byte](s T, start int) bool { - if len(s) < 4 { // shortest useful pattern is 1-byte base + FE0F (3 bytes) - return false - } if start < 0 { start = 0 } - for i := start; i+2 < len(s); i++ { - if !isVS16(s[i:]) { - continue + // 4 = minimum 1-byte base + 3-byte FE0F. + if len(s) < 4 { + return false + } + for start+2 < len(s) { + idx := indexByteG(s[start:], 0xEF) + if idx < 0 { + return false + } + i := start + idx + if i+2 >= len(s) { + return false } - if i == 0 { + if !isVS16(s[i:]) || i == 0 { + start = i + 1 continue } - // Walk back to the start byte of the rune immediately before FE0F. j := i - 1 for j > 0 && (s[j]&0xC0) == 0x80 { j-- } - p, rsz := lookup(s[j:]) - if rsz == 0 || j+rsz != i { - // Not an immediate local pair (or invalid UTF-8 boundary). - continue - } - if is(property(p), _VS16_Eligible) { + if rsz > 0 && j+rsz == i && is(property(p), _VS16_Eligible) { return true } - // Skip FE0F bytes; next potential pair starts after them. - i += 2 + start = i + 3 } return false } +func indexByteG[T ~string | []byte](s T, b byte) int { + switch v := any(s).(type) { + case string: + return strings.IndexByte(v, b) + case []byte: + return bytes.IndexByte(v, b) + } + return -1 +} + func is(props, flag property) bool { return props&flag != 0 } diff --git a/width_test.go b/width_test.go index bbc9e0e..fdb5f10 100644 --- a/width_test.go +++ b/width_test.go @@ -921,6 +921,29 @@ func TestTR51Conformance(t *testing.T) { } }) + t.Run("C6: non-FE0F 0xEF before a valid FE0F pair", func(t *testing.T) { + // 0xEF is the UTF-8 lead byte for U+F000..U+FFFF, so many runes + // other than FE0F start with it (FE0E, fullwidth forms, etc.). + // VS16 detection must keep looking past such candidates rather + // than stop at the first 0xEF byte. These are all single + // grapheme clusters with a valid pair + // later in the cluster, preceded by a non-FE0F 0xEF rune. + tests := []struct { + sequence string + desc string + }{ + {"\u26F9\u0301\uFE0E\u200D\u2660\uFE0F", "FE0E before the real FE0F (extend + ZWJ + spade)"}, + {"\u26F9\uFE20\u200D\u2660\uFE0F", "FE20 (combining half mark) before the real FE0F"}, + } + + for _, tt := range tests { + got := String(tt.sequence) + if got != 2 { + t.Errorf("String(%q) = %d, want 2 (%s)", tt.sequence, got, tt.desc) + } + } + }) + t.Run("ED-16: ZWJ Sequences treated as single grapheme", func(t *testing.T) { // ZWJ sequences should be treated as a single grapheme cluster by the grapheme tokenizer // and should have width 2 (since they display as a single emoji image) From 52119ba8509daf74ba50d477360a4b3ec8b4fd56 Mon Sep 17 00:00:00 2001 From: Matt Sherman Date: Sun, 17 May 2026 13:32:01 -0400 Subject: [PATCH 05/10] bad parse should error --- internal/gen/unicode.go | 29 ++++++----- internal/gen/unicode_parse_test.go | 77 ++++++++++++++++++++++++++++++ 2 files changed, 95 insertions(+), 11 deletions(-) create mode 100644 internal/gen/unicode_parse_test.go diff --git a/internal/gen/unicode.go b/internal/gen/unicode.go index 6c9630c..8c658d3 100644 --- a/internal/gen/unicode.go +++ b/internal/gen/unicode.go @@ -98,13 +98,10 @@ func ParseUnicodeData() (*UnicodeData, error) { variationFile := filepath.Join(dataDir, "emoji-variation-sequences.txt") if err := downloadFile(fmt.Sprintf("https://unicode.org/Public/%s/ucd/emoji/emoji-variation-sequences.txt", unicodeVersion), variationFile); err != nil { - fmt.Printf("Warning: failed to download emoji-variation-sequences.txt: %v\n", err) - fmt.Println("Continuing without VS16 eligibility data...") - } else { - if err := parseEmojiVariationSequences(variationFile, data); err != nil { - fmt.Printf("Warning: failed to parse emoji-variation-sequences.txt: %v\n", err) - fmt.Println("Continuing without VS16 eligibility data...") - } + return nil, fmt.Errorf("failed to download emoji-variation-sequences.txt: %v", err) + } + if err := parseEmojiVariationSequences(variationFile, data); err != nil { + return nil, fmt.Errorf("failed to parse emoji-variation-sequences.txt: %v", err) } extractStdlibData(data) @@ -295,6 +292,12 @@ func parseEmojiData(filename string, data *UnicodeData) error { // parseEmojiVariationSequences parses emoji-variation-sequences.txt and marks // bases that have a valid emoji presentation sequence (base + FE0F). +// +// Any non-blank, non-comment line that does not match the expected +// " ;