From 9e6ac6cb2a6ba56ca6d1dce6a16b4711973bb68c Mon Sep 17 00:00:00 2001 From: "victor.petukhov" Date: Thu, 25 Oct 2018 18:54:07 +0300 Subject: [PATCH] Fix the lack of the handling of whitespace characters in the Kotlin lexer Affected characters are U+000B, U+000C, U+000D, U+0085, U+2028, U+2029 This problem reproduces with JFlex since 1.5.0: http://jflex.de/changelog.html#jflex-1.5.0-jan-21-2014 --- .../org/jetbrains/kotlin/lexer/Kotlin.flex | 6 +- .../org/jetbrains/kotlin/lexer/_JetLexer.java | 466 +++++++++--------- 2 files changed, 236 insertions(+), 236 deletions(-) diff --git a/compiler/psi/src/org/jetbrains/kotlin/lexer/Kotlin.flex b/compiler/psi/src/org/jetbrains/kotlin/lexer/Kotlin.flex index eaaeae3d06d..829fd77bd72 100644 --- a/compiler/psi/src/org/jetbrains/kotlin/lexer/Kotlin.flex +++ b/compiler/psi/src/org/jetbrains/kotlin/lexer/Kotlin.flex @@ -215,7 +215,7 @@ LONELY_BACKTICK=` } } - .|{WHITE_SPACE_CHAR} {} + [\s\S] {} } // Mere mortals @@ -314,7 +314,7 @@ LONELY_BACKTICK=` ">" { return KtTokens.GT ; } "?" { return KtTokens.QUEST ; } ":" { return KtTokens.COLON ; } -";;" { return KtTokens.DOUBLE_SEMICOLON;} +";;" { return KtTokens.DOUBLE_SEMICOLON;} ";" { return KtTokens.SEMICOLON ; } "=" { return KtTokens.EQ ; } "," { return KtTokens.COMMA ; } @@ -324,7 +324,7 @@ LONELY_BACKTICK=` {LONELY_BACKTICK} { pushState(UNMATCHED_BACKTICK); return TokenType.BAD_CHARACTER; } // error fallback -. { return TokenType.BAD_CHARACTER; } +[\s\S] { return TokenType.BAD_CHARACTER; } // error fallback for exclusive states . { return TokenType.BAD_CHARACTER; } diff --git a/compiler/psi/src/org/jetbrains/kotlin/lexer/_JetLexer.java b/compiler/psi/src/org/jetbrains/kotlin/lexer/_JetLexer.java index 6397888bf63..f9b3409758a 100644 --- a/compiler/psi/src/org/jetbrains/kotlin/lexer/_JetLexer.java +++ b/compiler/psi/src/org/jetbrains/kotlin/lexer/_JetLexer.java @@ -122,14 +122,14 @@ class _JetLexer implements FlexLexer { /* The ZZ_CMAP_A table has 3136 entries */ static final char ZZ_CMAP_A[] = zzUnpackCMap( - "\11\0\1\4\1\10\1\41\1\42\1\41\22\0\1\4\1\14\1\31\1\13\1\11\1\73\1\71\1\26"+ - "\1\77\1\100\1\40\1\66\1\102\1\25\1\22\1\12\1\15\11\1\1\74\1\101\1\67\1\64"+ - "\1\70\1\65\1\103\1\3\1\17\2\3\1\24\1\23\5\5\1\20\10\5\1\21\2\5\1\16\2\5\1"+ - "\75\1\27\1\76\1\0\1\2\1\7\1\46\1\57\1\53\1\63\1\45\1\52\1\56\1\34\1\35\1\60"+ - "\1\55\1\47\1\5\1\50\1\54\1\44\1\5\1\51\1\36\1\33\1\30\1\62\1\61\1\16\1\43"+ - "\1\5\1\32\1\72\1\37\7\0\1\41\24\0\1\5\12\0\1\5\4\0\1\5\5\0\27\5\1\0\12\5\4"+ - "\0\14\5\16\0\5\5\7\0\1\5\1\0\1\5\1\0\5\5\1\0\2\5\2\0\4\5\1\0\1\5\6\0\1\5\1"+ - "\0\3\5\1\0\1\5\1\0\4\5\1\0\23\5\1\0\13\5\10\0\6\5\1\0\26\5\2\0\1\5\6\0\10"+ + "\11\0\1\4\1\10\1\102\1\103\1\102\22\0\1\4\1\14\1\31\1\13\1\11\1\71\1\67\1"+ + "\26\1\75\1\76\1\40\1\64\1\100\1\25\1\22\1\12\1\15\11\1\1\72\1\77\1\65\1\62"+ + "\1\66\1\63\1\101\1\3\1\17\2\3\1\24\1\23\5\5\1\20\10\5\1\21\2\5\1\16\2\5\1"+ + "\73\1\27\1\74\1\0\1\2\1\7\1\44\1\55\1\51\1\61\1\43\1\50\1\54\1\34\1\35\1\56"+ + "\1\53\1\45\1\5\1\46\1\52\1\42\1\5\1\47\1\36\1\33\1\30\1\60\1\57\1\16\1\41"+ + "\1\5\1\32\1\70\1\37\7\0\1\102\24\0\1\5\12\0\1\5\4\0\1\5\5\0\27\5\1\0\12\5"+ + "\4\0\14\5\16\0\5\5\7\0\1\5\1\0\1\5\1\0\5\5\1\0\2\5\2\0\4\5\1\0\1\5\6\0\1\5"+ + "\1\0\3\5\1\0\1\5\1\0\4\5\1\0\23\5\1\0\13\5\10\0\6\5\1\0\26\5\2\0\1\5\6\0\10"+ "\5\10\0\13\5\5\0\3\5\15\0\12\6\4\0\6\5\1\0\1\5\17\0\2\5\7\0\2\5\12\6\3\5\2"+ "\0\2\5\1\0\16\5\15\0\11\5\13\0\1\5\16\0\12\6\6\5\4\0\2\5\4\0\1\5\5\0\6\5\4"+ "\0\1\5\11\0\1\5\3\0\1\5\7\0\11\5\7\0\5\5\1\0\10\5\6\0\26\5\3\0\1\5\2\0\1\5"+ @@ -148,7 +148,7 @@ class _JetLexer implements FlexLexer { "\0\15\5\2\0\1\5\1\0\10\5\7\0\15\5\1\0\6\5\23\0\1\5\4\0\1\5\3\0\5\5\2\0\22"+ "\5\1\0\1\5\5\0\17\5\1\0\16\5\2\0\5\5\13\0\14\5\13\0\1\5\15\0\7\5\7\0\16\5"+ "\15\0\2\5\12\6\3\0\3\5\11\0\4\5\1\0\4\5\3\0\2\5\11\0\10\5\1\0\1\5\1\0\1\5"+ - "\1\0\1\5\1\0\6\5\1\0\7\5\1\0\1\5\3\0\3\5\1\0\7\5\3\0\4\5\2\0\6\5\14\0\2\41"+ + "\1\0\1\5\1\0\6\5\1\0\7\5\1\0\1\5\3\0\3\5\1\0\7\5\3\0\4\5\2\0\6\5\14\0\2\102"+ "\7\0\1\5\15\0\1\5\2\0\1\5\4\0\1\5\2\0\12\5\1\0\1\5\3\0\5\5\6\0\1\5\1\0\1\5"+ "\1\0\1\5\1\0\4\5\1\0\13\5\2\0\4\5\5\0\5\5\4\0\1\5\4\0\2\5\13\0\5\5\6\0\4\5"+ "\3\0\2\5\14\0\10\5\7\0\10\5\1\0\7\5\6\0\2\5\12\0\5\5\5\0\2\5\3\0\7\5\6\0\3"+ @@ -278,245 +278,245 @@ class _JetLexer implements FlexLexer { "\1\7\1\10\2\11\1\12\1\11\1\7\1\13\1\12"+ "\1\14\1\15\1\16\1\17\1\20\4\11\1\21\2\11"+ "\1\22\1\23\1\7\1\11\1\24\1\25\1\26\1\11"+ - "\1\27\1\30\1\31\1\32\1\0\1\12\1\11\1\33"+ - "\1\34\1\35\1\11\1\36\1\37\1\40\1\41\1\42"+ - "\2\11\1\43\1\11\1\44\1\45\1\46\1\47\1\50"+ - "\1\51\1\52\1\53\1\54\1\55\1\56\1\57\1\60"+ - "\1\61\1\62\1\63\1\64\1\65\1\66\10\67\1\70"+ + "\1\27\1\30\1\31\1\32\1\11\1\33\1\34\1\35"+ + "\1\11\1\36\1\37\1\40\1\41\1\42\2\11\1\43"+ + "\1\11\1\44\1\45\1\46\1\47\1\50\1\51\1\52"+ + "\1\53\1\54\1\55\1\56\1\57\1\60\1\61\1\62"+ + "\1\63\1\64\1\65\1\66\1\7\1\12\10\67\1\70"+ "\1\71\15\67\1\72\1\67\1\73\62\67\1\74\1\71"+ "\15\67\1\74\1\67\1\75\52\67\2\7\2\76\1\7"+ "\1\76\1\7\1\77\1\0\5\7\4\76\1\7\2\76"+ - "\3\7\1\76\2\7\1\100\3\76\2\7\2\0\21\76"+ - "\20\7\12\101\1\102\25\101\1\103\1\0\42\101\1\7"+ - "\1\10\2\11\1\12\1\11\1\7\1\13\1\12\1\14"+ - "\1\15\1\16\1\17\1\20\4\11\1\21\2\11\1\22"+ - "\1\23\1\7\1\11\1\24\1\104\1\26\1\11\1\27"+ - "\1\30\1\105\1\32\1\0\1\12\1\11\1\33\1\34"+ - "\1\35\1\11\1\36\1\37\1\40\1\41\1\42\2\11"+ - "\1\43\1\11\1\44\1\45\1\46\1\47\1\50\1\51"+ - "\1\52\1\53\1\54\1\55\1\56\1\57\1\60\1\61"+ - "\1\62\1\63\1\64\1\65\1\66\105\0\2\10\12\0"+ - "\1\10\2\0\1\106\1\107\1\110\1\111\1\112\3\0"+ - "\1\107\14\0\1\112\1\0\1\106\2\0\1\111\32\0"+ - "\3\11\1\0\2\11\6\0\5\11\1\0\2\11\3\0"+ - "\1\11\2\0\4\11\4\0\21\11\24\0\1\12\3\0"+ - "\1\12\31\0\1\12\41\0\7\113\2\0\73\113\2\0"+ - "\2\114\1\0\1\114\1\0\1\115\6\0\4\114\1\0"+ - "\2\114\3\0\1\114\2\0\4\114\4\0\21\114\32\0"+ - "\1\116\25\0\1\117\23\0\1\120\33\0\1\121\124\0"+ - "\1\122\26\0\1\123\20\0\2\124\12\0\1\124\1\125"+ - "\1\126\1\106\1\107\1\110\1\111\1\112\3\0\1\107"+ - "\14\0\1\112\1\0\1\106\2\0\1\111\4\0\1\126"+ - "\25\0\1\127\13\0\1\127\4\0\1\130\106\0\1\131"+ - "\36\0\1\132\3\0\1\133\13\0\10\23\1\0\15\23"+ - "\1\134\1\135\54\23\31\0\1\136\53\0\3\11\1\0"+ - "\2\11\6\0\5\11\1\0\2\11\3\0\1\11\2\0"+ - "\1\11\1\137\2\11\4\0\1\140\5\11\1\141\12\11"+ - "\21\0\3\11\1\0\2\11\6\0\5\11\1\0\2\11"+ - "\3\0\1\11\2\0\3\11\1\142\4\0\5\11\1\143"+ - "\1\11\1\144\11\11\21\0\3\11\1\0\2\11\6\0"+ - "\5\11\1\0\2\11\3\0\1\145\2\0\4\11\4\0"+ - "\21\11\104\0\1\146\20\0\3\11\1\0\2\11\6\0"+ - "\5\11\1\0\2\11\3\0\1\11\2\0\4\11\4\0"+ - "\3\11\1\147\15\11\21\0\3\11\1\0\2\11\6\0"+ - "\5\11\1\0\2\11\3\0\1\11\2\0\4\11\4\0"+ - "\4\11\1\150\14\11\21\0\3\11\1\0\2\11\6\0"+ - "\5\11\1\0\2\11\3\0\1\11\2\0\3\11\1\151"+ - "\4\0\21\11\21\0\3\11\1\0\2\11\6\0\5\11"+ - "\1\0\2\11\3\0\1\152\2\0\4\11\4\0\21\11"+ - "\21\0\3\11\1\0\2\11\6\0\5\11\1\0\2\11"+ - "\3\0\1\11\2\0\4\11\4\0\2\11\1\153\16\11"+ - "\21\0\3\11\1\0\2\11\6\0\5\11\1\0\2\11"+ - "\3\0\1\154\2\0\4\11\4\0\3\11\1\155\5\11"+ - "\1\156\7\11\21\0\3\11\1\0\2\11\6\0\5\11"+ - "\1\0\2\11\3\0\1\11\2\0\4\11\4\0\4\11"+ - "\1\157\4\11\1\160\7\11\21\0\3\11\1\0\2\11"+ - "\6\0\5\11\1\0\2\11\3\0\1\11\2\0\4\11"+ - "\4\0\14\11\1\161\4\11\21\0\3\11\1\0\2\11"+ - "\6\0\5\11\1\0\2\11\3\0\1\11\2\0\4\11"+ - "\4\0\6\11\1\162\12\11\21\0\3\11\1\0\2\11"+ - "\6\0\5\11\1\0\2\11\3\0\1\11\2\0\1\11"+ - "\1\163\2\11\4\0\21\11\21\0\3\11\1\0\2\11"+ - "\6\0\5\11\1\0\2\11\3\0\1\11\2\0\4\11"+ - "\4\0\3\11\1\164\15\11\21\0\3\11\1\0\2\11"+ - "\6\0\5\11\1\0\2\11\3\0\1\11\2\0\4\11"+ - "\4\0\11\11\1\165\7\11\104\0\1\166\3\0\1\167"+ - "\77\0\1\170\1\0\1\171\101\0\1\172\103\0\1\173"+ - "\110\0\1\174\104\0\1\175\75\0\1\176\113\0\1\177"+ - "\110\0\1\200\2\0\10\67\2\0\15\67\1\0\1\67"+ - "\1\0\52\67\2\0\2\201\1\0\1\201\1\0\1\202"+ - "\6\0\4\201\1\0\2\201\3\0\1\201\1\0\1\203"+ - "\4\201\4\0\21\201\20\0\10\204\1\0\17\204\1\205"+ - "\53\204\31\0\1\206\53\0\3\76\1\0\2\76\6\0"+ - "\5\76\1\0\2\76\3\0\1\76\2\0\4\76\4\0"+ - "\21\76\20\0\7\207\2\0\73\207\1\0\3\76\1\0"+ - "\2\76\6\0\5\76\1\0\2\76\3\0\1\76\2\0"+ - "\1\76\1\210\2\76\4\0\21\76\60\0\1\211\55\0"+ - "\1\212\113\0\1\213\101\0\1\106\1\0\1\213\24\0"+ - "\1\106\35\0\1\127\13\0\1\127\4\0\1\214\62\0"+ - "\2\215\12\0\1\215\5\0\1\111\1\0\1\215\24\0"+ - "\1\111\13\0\1\215\15\0\7\113\1\216\1\0\73\113"+ - "\1\0\3\114\1\0\2\114\6\0\5\114\1\0\2\114"+ - "\3\0\1\114\2\0\4\114\4\0\21\114\20\0\7\217"+ - "\2\0\73\217\10\116\1\0\73\116\40\0\1\220\43\0"+ - "\10\121\1\0\73\121\36\0\1\221\11\0\1\222\117\0"+ - "\1\223\20\0\2\124\12\0\1\124\4\0\1\224\1\111"+ - "\1\112\20\0\1\112\4\0\1\111\32\0\3\125\11\0"+ - "\1\125\1\0\1\125\1\106\1\107\1\213\2\125\3\0"+ - "\1\107\14\0\2\125\1\106\2\0\2\125\3\0\1\125"+ - "\3\0\1\125\21\0\2\126\12\0\1\126\2\0\1\106"+ - "\1\107\1\213\5\0\1\107\16\0\1\106\35\0\2\127"+ - "\12\0\1\127\5\0\1\111\1\112\20\0\1\112\4\0"+ - "\1\111\53\0\1\225\61\0\10\23\1\0\73\23\31\0"+ - "\1\226\53\0\3\11\1\0\2\11\6\0\5\11\1\0"+ - "\2\11\3\0\1\11\2\0\2\11\1\227\1\11\4\0"+ - "\6\11\1\230\12\11\21\0\3\11\1\0\2\11\6\0"+ - "\5\11\1\0\2\11\3\0\1\11\2\0\4\11\4\0"+ - "\1\11\1\231\17\11\21\0\3\11\1\0\2\11\6\0"+ - "\5\11\1\0\2\11\3\0\1\232\2\0\4\11\4\0"+ - "\1\233\20\11\21\0\3\11\1\0\2\11\6\0\5\11"+ - "\1\0\2\11\3\0\1\11\2\0\1\234\3\11\4\0"+ - "\21\11\21\0\3\11\1\0\2\11\6\0\5\11\1\0"+ - "\2\11\3\0\1\11\2\0\4\11\4\0\1\11\1\235"+ - "\17\11\21\0\3\11\1\0\2\11\6\0\5\11\1\0"+ - "\2\11\3\0\1\11\2\0\4\11\4\0\10\11\1\236"+ - "\10\11\21\0\3\11\1\0\2\11\6\0\5\11\1\0"+ - "\2\11\3\0\1\11\2\0\3\11\1\237\4\0\21\11"+ - "\21\0\3\11\1\0\2\11\6\0\5\11\1\0\2\11"+ - "\3\0\1\11\2\0\4\11\4\0\21\11\1\0\1\240"+ - "\17\0\3\11\1\0\2\11\6\0\5\11\1\0\2\11"+ - "\3\0\1\11\2\0\4\11\4\0\4\11\1\241\14\11"+ - "\21\0\3\11\1\0\2\11\6\0\5\11\1\0\2\11"+ - "\3\0\1\11\2\0\1\242\3\11\4\0\21\11\21\0"+ - "\3\11\1\0\2\11\6\0\5\11\1\0\2\11\3\0"+ - "\1\11\2\0\4\11\4\0\5\11\1\243\13\11\21\0"+ - "\3\11\1\0\2\11\6\0\5\11\1\0\2\11\3\0"+ - "\1\11\2\0\4\11\4\0\4\11\1\244\14\11\21\0"+ - "\3\11\1\0\2\11\6\0\5\11\1\0\2\11\3\0"+ - "\1\11\2\0\4\11\4\0\6\11\1\245\12\11\21\0"+ - "\3\11\1\0\2\11\6\0\5\11\1\0\2\11\3\0"+ - "\1\11\2\0\4\11\4\0\3\11\1\246\15\11\21\0"+ - "\3\11\1\0\2\11\6\0\5\11\1\0\2\11\3\0"+ - "\1\11\2\0\4\11\4\0\5\11\1\247\13\11\21\0"+ - "\3\11\1\0\2\11\6\0\5\11\1\0\2\11\3\0"+ - "\1\11\2\0\4\11\4\0\15\11\1\250\3\11\21\0"+ - "\3\11\1\0\2\11\6\0\5\11\1\0\2\11\3\0"+ - "\1\11\2\0\4\11\4\0\2\11\1\251\16\11\21\0"+ - "\3\11\1\0\2\11\6\0\5\11\1\0\2\11\3\0"+ - "\1\11\2\0\2\11\1\252\1\11\4\0\2\11\1\253"+ - "\16\11\21\0\3\11\1\0\2\11\6\0\5\11\1\0"+ - "\2\11\3\0\1\11\2\0\4\11\4\0\4\11\1\254"+ - "\1\11\1\255\12\11\104\0\1\256\20\0\3\201\1\0"+ - "\2\201\6\0\5\201\1\0\2\201\3\0\1\201\2\0"+ - "\4\201\4\0\21\201\20\0\7\257\2\0\73\257\1\0"+ - "\1\260\1\0\1\260\11\0\1\260\1\0\1\260\3\0"+ - "\2\260\20\0\2\260\3\0\2\260\3\0\1\260\3\0"+ - "\1\260\51\0\1\261\52\0\7\207\1\262\1\0\73\207"+ - "\1\0\3\76\1\0\2\76\6\0\5\76\1\0\2\76"+ - "\3\0\1\76\2\0\2\76\1\263\1\76\4\0\21\76"+ - "\42\0\1\214\62\0\2\215\12\0\1\215\5\0\1\111"+ - "\26\0\1\111\31\0\7\217\1\264\1\0\73\217\12\0"+ - "\1\265\72\0\3\266\1\0\2\266\6\0\5\266\1\0"+ - "\2\266\3\0\1\266\2\0\4\266\4\0\21\266\21\0"+ - "\1\127\13\0\1\127\67\0\3\11\1\0\2\11\6\0"+ - "\5\11\1\0\2\11\3\0\1\11\2\0\3\11\1\267"+ - "\4\0\21\11\21\0\3\11\1\0\2\11\6\0\5\11"+ - "\1\0\2\11\3\0\1\11\2\0\4\11\4\0\11\11"+ - "\1\270\7\11\21\0\3\11\1\0\2\11\6\0\5\11"+ - "\1\0\2\11\3\0\1\11\2\0\4\11\4\0\2\11"+ - "\1\271\16\11\21\0\3\11\1\0\2\11\6\0\5\11"+ - "\1\0\2\11\3\0\1\11\2\0\4\11\4\0\2\11"+ - "\1\272\16\11\21\0\3\11\1\0\2\11\6\0\5\11"+ - "\1\0\2\11\3\0\1\11\2\0\4\11\4\0\2\11"+ - "\1\273\16\11\21\0\3\11\1\0\2\11\6\0\5\11"+ - "\1\0\2\11\3\0\1\11\2\0\4\11\4\0\2\11"+ - "\1\274\16\11\21\0\3\11\1\0\2\11\6\0\5\11"+ - "\1\0\2\11\3\0\1\11\2\0\4\11\4\0\12\11"+ - "\1\275\6\11\21\0\3\11\1\0\2\11\6\0\5\11"+ - "\1\0\2\11\3\0\1\11\2\0\4\11\4\0\2\11"+ - "\1\276\16\11\21\0\3\11\1\0\2\11\6\0\5\11"+ - "\1\0\2\11\3\0\1\11\2\0\4\11\4\0\4\11"+ - "\1\277\14\11\21\0\3\11\1\0\2\11\6\0\5\11"+ - "\1\0\2\11\3\0\1\300\2\0\4\11\4\0\21\11"+ - "\21\0\3\11\1\0\2\11\6\0\5\11\1\0\2\11"+ - "\3\0\1\11\2\0\3\11\1\301\4\0\21\11\21\0"+ - "\3\11\1\0\2\11\6\0\5\11\1\0\2\11\3\0"+ - "\1\11\2\0\3\11\1\302\4\0\21\11\21\0\3\11"+ + "\3\7\1\76\2\7\1\100\3\76\2\7\21\76\20\7"+ + "\2\0\12\101\1\102\25\101\1\103\43\101\1\7\1\10"+ + "\2\11\1\12\1\11\1\7\1\13\1\12\1\14\1\15"+ + "\1\16\1\17\1\20\4\11\1\21\2\11\1\22\1\23"+ + "\1\7\1\11\1\24\1\104\1\26\1\11\1\27\1\30"+ + "\1\105\1\32\1\11\1\33\1\34\1\35\1\11\1\36"+ + "\1\37\1\40\1\41\1\42\2\11\1\43\1\11\1\44"+ + "\1\45\1\46\1\47\1\50\1\51\1\52\1\53\1\54"+ + "\1\55\1\56\1\57\1\60\1\61\1\62\1\63\1\64"+ + "\1\65\1\66\1\7\1\12\105\0\2\10\12\0\1\10"+ + "\2\0\1\106\1\107\1\110\1\111\1\112\3\0\1\107"+ + "\12\0\1\112\1\0\1\106\2\0\1\111\34\0\3\11"+ "\1\0\2\11\6\0\5\11\1\0\2\11\3\0\1\11"+ - "\2\0\1\303\3\11\4\0\21\11\21\0\3\11\1\0"+ - "\2\11\6\0\5\11\1\0\2\11\3\0\1\11\2\0"+ - "\4\11\4\0\2\11\1\304\16\11\21\0\3\11\1\0"+ - "\2\11\6\0\5\11\1\0\2\11\3\0\1\11\2\0"+ - "\4\11\4\0\3\11\1\305\15\11\21\0\3\11\1\0"+ - "\2\11\6\0\5\11\1\0\2\11\3\0\1\11\2\0"+ - "\4\11\4\0\4\11\1\306\14\11\21\0\3\11\1\0"+ - "\2\11\6\0\5\11\1\0\2\11\3\0\1\11\2\0"+ - "\4\11\4\0\5\11\1\307\13\11\20\0\7\257\1\310"+ - "\1\0\73\257\1\0\1\311\1\0\1\311\11\0\1\311"+ - "\1\0\1\311\3\0\2\311\20\0\2\311\3\0\2\311"+ - "\3\0\1\311\3\0\1\311\21\0\3\76\1\0\2\76"+ - "\6\0\5\76\1\0\2\76\3\0\1\76\2\0\3\76"+ - "\1\312\4\0\21\76\21\0\3\11\1\0\2\11\6\0"+ - "\5\11\1\0\2\11\3\0\1\11\2\0\4\11\4\0"+ - "\16\11\1\313\2\11\21\0\3\11\1\0\2\11\6\0"+ - "\5\11\1\0\2\11\3\0\1\11\2\0\4\11\4\0"+ - "\3\11\1\314\5\11\1\315\7\11\21\0\3\11\1\0"+ - "\2\11\6\0\5\11\1\0\2\11\3\0\1\11\2\0"+ - "\4\11\4\0\6\11\1\316\12\11\21\0\3\11\1\0"+ - "\2\11\6\0\5\11\1\0\2\11\3\0\1\11\2\0"+ - "\4\11\4\0\6\11\1\317\12\11\21\0\3\11\1\0"+ - "\2\11\6\0\5\11\1\0\2\11\3\0\1\11\2\0"+ - "\4\11\4\0\3\11\1\320\15\11\21\0\3\11\1\0"+ - "\2\11\6\0\5\11\1\0\2\11\3\0\1\11\2\0"+ - "\4\11\4\0\6\11\1\321\12\11\21\0\3\11\1\0"+ - "\2\11\6\0\5\11\1\0\2\11\3\0\1\11\2\0"+ - "\4\11\4\0\2\11\1\322\16\11\21\0\3\11\1\0"+ - "\2\11\6\0\5\11\1\0\2\11\3\0\1\11\2\0"+ - "\3\11\1\323\4\0\21\11\21\0\3\11\1\0\2\11"+ - "\6\0\5\11\1\0\2\11\3\0\1\11\2\0\2\11"+ - "\1\324\1\11\4\0\21\11\21\0\3\11\1\0\2\11"+ - "\6\0\5\11\1\0\2\11\3\0\1\11\2\0\4\11"+ - "\4\0\10\11\1\325\10\11\21\0\3\11\1\0\2\11"+ - "\6\0\5\11\1\0\2\11\3\0\1\11\2\0\4\11"+ - "\4\0\12\11\1\326\6\11\21\0\3\11\1\0\2\11"+ - "\6\0\5\11\1\0\2\11\3\0\1\11\2\0\4\11"+ - "\4\0\2\11\1\327\16\11\21\0\1\330\1\0\1\330"+ - "\11\0\1\330\1\0\1\330\3\0\2\330\20\0\2\330"+ - "\3\0\2\330\3\0\1\330\3\0\1\330\21\0\3\11"+ + "\2\0\4\11\2\0\21\11\26\0\1\12\3\0\1\12"+ + "\72\0\1\12\7\113\2\0\73\113\2\0\2\114\1\0"+ + "\1\114\1\0\1\115\6\0\4\114\1\0\2\114\3\0"+ + "\1\114\2\0\4\114\2\0\21\114\34\0\1\116\25\0"+ + "\1\117\21\0\1\120\35\0\1\121\124\0\1\122\24\0"+ + "\1\123\22\0\2\124\12\0\1\124\1\125\1\126\1\106"+ + "\1\107\1\110\1\111\1\112\3\0\1\107\12\0\1\112"+ + "\1\0\1\106\2\0\1\111\4\0\1\126\27\0\1\127"+ + "\13\0\1\127\4\0\1\130\106\0\1\131\34\0\1\132"+ + "\3\0\1\133\15\0\10\23\1\0\15\23\1\134\1\135"+ + "\54\23\31\0\1\136\53\0\3\11\1\0\2\11\6\0"+ + "\5\11\1\0\2\11\3\0\1\11\2\0\1\11\1\137"+ + "\2\11\2\0\1\140\5\11\1\141\12\11\23\0\3\11"+ "\1\0\2\11\6\0\5\11\1\0\2\11\3\0\1\11"+ - "\2\0\4\11\4\0\4\11\1\331\14\11\21\0\3\11"+ + "\2\0\3\11\1\142\2\0\5\11\1\143\1\11\1\144"+ + "\11\11\23\0\3\11\1\0\2\11\6\0\5\11\1\0"+ + "\2\11\3\0\1\145\2\0\4\11\2\0\21\11\104\0"+ + "\1\146\22\0\3\11\1\0\2\11\6\0\5\11\1\0"+ + "\2\11\3\0\1\11\2\0\4\11\2\0\3\11\1\147"+ + "\15\11\23\0\3\11\1\0\2\11\6\0\5\11\1\0"+ + "\2\11\3\0\1\11\2\0\4\11\2\0\4\11\1\150"+ + "\14\11\23\0\3\11\1\0\2\11\6\0\5\11\1\0"+ + "\2\11\3\0\1\11\2\0\3\11\1\151\2\0\21\11"+ + "\23\0\3\11\1\0\2\11\6\0\5\11\1\0\2\11"+ + "\3\0\1\152\2\0\4\11\2\0\21\11\23\0\3\11"+ "\1\0\2\11\6\0\5\11\1\0\2\11\3\0\1\11"+ - "\2\0\4\11\4\0\7\11\1\332\11\11\21\0\3\11"+ - "\1\0\2\11\6\0\5\11\1\0\2\11\3\0\1\11"+ - "\2\0\4\11\4\0\7\11\1\333\11\11\21\0\3\11"+ - "\1\0\2\11\6\0\5\11\1\0\2\11\3\0\1\11"+ - "\2\0\4\11\4\0\13\11\1\334\5\11\21\0\3\11"+ - "\1\0\2\11\6\0\5\11\1\0\2\11\3\0\1\11"+ - "\2\0\4\11\4\0\5\11\1\335\13\11\21\0\3\11"+ - "\1\0\2\11\6\0\5\11\1\0\2\11\3\0\1\11"+ - "\2\0\4\11\4\0\5\11\1\336\13\11\21\0\3\11"+ - "\1\0\2\11\6\0\5\11\1\0\2\11\3\0\1\11"+ - "\2\0\1\337\3\11\4\0\21\11\21\0\1\204\1\0"+ - "\1\204\11\0\1\204\1\0\1\204\3\0\2\204\20\0"+ - "\2\204\3\0\2\204\3\0\1\204\3\0\1\204\21\0"+ + "\2\0\4\11\2\0\2\11\1\153\16\11\23\0\3\11"+ + "\1\0\2\11\6\0\5\11\1\0\2\11\3\0\1\154"+ + "\2\0\4\11\2\0\3\11\1\155\5\11\1\156\7\11"+ + "\23\0\3\11\1\0\2\11\6\0\5\11\1\0\2\11"+ + "\3\0\1\11\2\0\4\11\2\0\4\11\1\157\4\11"+ + "\1\160\7\11\23\0\3\11\1\0\2\11\6\0\5\11"+ + "\1\0\2\11\3\0\1\11\2\0\4\11\2\0\14\11"+ + "\1\161\4\11\23\0\3\11\1\0\2\11\6\0\5\11"+ + "\1\0\2\11\3\0\1\11\2\0\4\11\2\0\6\11"+ + "\1\162\12\11\23\0\3\11\1\0\2\11\6\0\5\11"+ + "\1\0\2\11\3\0\1\11\2\0\1\11\1\163\2\11"+ + "\2\0\21\11\23\0\3\11\1\0\2\11\6\0\5\11"+ + "\1\0\2\11\3\0\1\11\2\0\4\11\2\0\3\11"+ + "\1\164\15\11\23\0\3\11\1\0\2\11\6\0\5\11"+ + "\1\0\2\11\3\0\1\11\2\0\4\11\2\0\11\11"+ + "\1\165\7\11\104\0\1\166\3\0\1\167\77\0\1\170"+ + "\1\0\1\171\101\0\1\172\103\0\1\173\110\0\1\174"+ + "\104\0\1\175\75\0\1\176\113\0\1\177\110\0\1\200"+ + "\4\0\10\67\2\0\15\67\1\0\1\67\1\0\52\67"+ + "\2\0\2\201\1\0\1\201\1\0\1\202\6\0\4\201"+ + "\1\0\2\201\3\0\1\201\1\0\1\203\4\201\2\0"+ + "\21\201\22\0\10\204\1\0\17\204\1\205\53\204\31\0"+ + "\1\206\53\0\3\76\1\0\2\76\6\0\5\76\1\0"+ + "\2\76\3\0\1\76\2\0\4\76\2\0\21\76\22\0"+ + "\7\207\2\0\73\207\1\0\3\76\1\0\2\76\6\0"+ + "\5\76\1\0\2\76\3\0\1\76\2\0\1\76\1\210"+ + "\2\76\2\0\21\76\62\0\1\211\55\0\1\212\113\0"+ + "\1\213\101\0\1\106\1\0\1\213\22\0\1\106\37\0"+ + "\1\127\13\0\1\127\4\0\1\214\62\0\2\215\12\0"+ + "\1\215\5\0\1\111\1\0\1\215\22\0\1\111\13\0"+ + "\1\215\17\0\7\113\1\216\1\0\73\113\1\0\3\114"+ + "\1\0\2\114\6\0\5\114\1\0\2\114\3\0\1\114"+ + "\2\0\4\114\2\0\21\114\22\0\7\217\2\0\73\217"+ + "\10\116\1\0\73\116\40\0\1\220\43\0\10\121\1\0"+ + "\73\121\36\0\1\221\7\0\1\222\117\0\1\223\22\0"+ + "\2\124\12\0\1\124\4\0\1\224\1\111\1\112\16\0"+ + "\1\112\4\0\1\111\34\0\3\125\11\0\1\125\1\0"+ + "\1\125\1\106\1\107\1\213\2\125\3\0\1\107\12\0"+ + "\2\125\1\106\2\0\2\125\3\0\1\125\3\0\1\125"+ + "\23\0\2\126\12\0\1\126\2\0\1\106\1\107\1\213"+ + "\5\0\1\107\14\0\1\106\37\0\2\127\12\0\1\127"+ + "\5\0\1\111\1\112\16\0\1\112\4\0\1\111\55\0"+ + "\1\225\61\0\10\23\1\0\73\23\31\0\1\226\53\0"+ "\3\11\1\0\2\11\6\0\5\11\1\0\2\11\3\0"+ - "\1\11\2\0\2\11\1\340\1\11\4\0\21\11\21\0"+ + "\1\11\2\0\2\11\1\227\1\11\2\0\6\11\1\230"+ + "\12\11\23\0\3\11\1\0\2\11\6\0\5\11\1\0"+ + "\2\11\3\0\1\11\2\0\4\11\2\0\1\11\1\231"+ + "\17\11\23\0\3\11\1\0\2\11\6\0\5\11\1\0"+ + "\2\11\3\0\1\232\2\0\4\11\2\0\1\233\20\11"+ + "\23\0\3\11\1\0\2\11\6\0\5\11\1\0\2\11"+ + "\3\0\1\11\2\0\1\234\3\11\2\0\21\11\23\0"+ "\3\11\1\0\2\11\6\0\5\11\1\0\2\11\3\0"+ - "\1\11\2\0\4\11\4\0\3\11\1\341\15\11\21\0"+ + "\1\11\2\0\4\11\2\0\1\11\1\235\17\11\23\0"+ "\3\11\1\0\2\11\6\0\5\11\1\0\2\11\3\0"+ - "\1\11\2\0\4\11\4\0\2\11\1\342\16\11\21\0"+ + "\1\11\2\0\4\11\2\0\10\11\1\236\10\11\23\0"+ "\3\11\1\0\2\11\6\0\5\11\1\0\2\11\3\0"+ - "\1\343\2\0\4\11\4\0\21\11\21\0\3\11\1\0"+ + "\1\11\2\0\3\11\1\237\2\0\21\11\23\0\3\11"+ + "\1\0\2\11\6\0\5\11\1\0\2\11\3\0\1\11"+ + "\2\0\4\11\2\0\21\11\1\0\1\240\21\0\3\11"+ + "\1\0\2\11\6\0\5\11\1\0\2\11\3\0\1\11"+ + "\2\0\4\11\2\0\4\11\1\241\14\11\23\0\3\11"+ + "\1\0\2\11\6\0\5\11\1\0\2\11\3\0\1\11"+ + "\2\0\1\242\3\11\2\0\21\11\23\0\3\11\1\0"+ "\2\11\6\0\5\11\1\0\2\11\3\0\1\11\2\0"+ - "\4\11\4\0\3\11\1\344\15\11\21\0\3\11\1\0"+ + "\4\11\2\0\5\11\1\243\13\11\23\0\3\11\1\0"+ "\2\11\6\0\5\11\1\0\2\11\3\0\1\11\2\0"+ - "\4\11\4\0\10\11\1\345\10\11\21\0\3\11\1\0"+ + "\4\11\2\0\4\11\1\244\14\11\23\0\3\11\1\0"+ "\2\11\6\0\5\11\1\0\2\11\3\0\1\11\2\0"+ - "\4\11\4\0\2\11\1\346\16\11\21\0\3\11\1\0"+ + "\4\11\2\0\6\11\1\245\12\11\23\0\3\11\1\0"+ "\2\11\6\0\5\11\1\0\2\11\3\0\1\11\2\0"+ - "\3\11\1\347\4\0\21\11\21\0\3\11\1\0\2\11"+ + "\4\11\2\0\3\11\1\246\15\11\23\0\3\11\1\0"+ + "\2\11\6\0\5\11\1\0\2\11\3\0\1\11\2\0"+ + "\4\11\2\0\5\11\1\247\13\11\23\0\3\11\1\0"+ + "\2\11\6\0\5\11\1\0\2\11\3\0\1\11\2\0"+ + "\4\11\2\0\15\11\1\250\3\11\23\0\3\11\1\0"+ + "\2\11\6\0\5\11\1\0\2\11\3\0\1\11\2\0"+ + "\4\11\2\0\2\11\1\251\16\11\23\0\3\11\1\0"+ + "\2\11\6\0\5\11\1\0\2\11\3\0\1\11\2\0"+ + "\2\11\1\252\1\11\2\0\2\11\1\253\16\11\23\0"+ + "\3\11\1\0\2\11\6\0\5\11\1\0\2\11\3\0"+ + "\1\11\2\0\4\11\2\0\4\11\1\254\1\11\1\255"+ + "\12\11\104\0\1\256\22\0\3\201\1\0\2\201\6\0"+ + "\5\201\1\0\2\201\3\0\1\201\2\0\4\201\2\0"+ + "\21\201\22\0\7\257\2\0\73\257\1\0\1\260\1\0"+ + "\1\260\11\0\1\260\1\0\1\260\3\0\2\260\16\0"+ + "\2\260\3\0\2\260\3\0\1\260\3\0\1\260\53\0"+ + "\1\261\52\0\7\207\1\262\1\0\73\207\1\0\3\76"+ + "\1\0\2\76\6\0\5\76\1\0\2\76\3\0\1\76"+ + "\2\0\2\76\1\263\1\76\2\0\21\76\44\0\1\214"+ + "\62\0\2\215\12\0\1\215\5\0\1\111\24\0\1\111"+ + "\33\0\7\217\1\264\1\0\73\217\12\0\1\265\72\0"+ + "\3\266\1\0\2\266\6\0\5\266\1\0\2\266\3\0"+ + "\1\266\2\0\4\266\2\0\21\266\23\0\1\127\13\0"+ + "\1\127\67\0\3\11\1\0\2\11\6\0\5\11\1\0"+ + "\2\11\3\0\1\11\2\0\3\11\1\267\2\0\21\11"+ + "\23\0\3\11\1\0\2\11\6\0\5\11\1\0\2\11"+ + "\3\0\1\11\2\0\4\11\2\0\11\11\1\270\7\11"+ + "\23\0\3\11\1\0\2\11\6\0\5\11\1\0\2\11"+ + "\3\0\1\11\2\0\4\11\2\0\2\11\1\271\16\11"+ + "\23\0\3\11\1\0\2\11\6\0\5\11\1\0\2\11"+ + "\3\0\1\11\2\0\4\11\2\0\2\11\1\272\16\11"+ + "\23\0\3\11\1\0\2\11\6\0\5\11\1\0\2\11"+ + "\3\0\1\11\2\0\4\11\2\0\2\11\1\273\16\11"+ + "\23\0\3\11\1\0\2\11\6\0\5\11\1\0\2\11"+ + "\3\0\1\11\2\0\4\11\2\0\2\11\1\274\16\11"+ + "\23\0\3\11\1\0\2\11\6\0\5\11\1\0\2\11"+ + "\3\0\1\11\2\0\4\11\2\0\12\11\1\275\6\11"+ + "\23\0\3\11\1\0\2\11\6\0\5\11\1\0\2\11"+ + "\3\0\1\11\2\0\4\11\2\0\2\11\1\276\16\11"+ + "\23\0\3\11\1\0\2\11\6\0\5\11\1\0\2\11"+ + "\3\0\1\11\2\0\4\11\2\0\4\11\1\277\14\11"+ + "\23\0\3\11\1\0\2\11\6\0\5\11\1\0\2\11"+ + "\3\0\1\300\2\0\4\11\2\0\21\11\23\0\3\11"+ + "\1\0\2\11\6\0\5\11\1\0\2\11\3\0\1\11"+ + "\2\0\3\11\1\301\2\0\21\11\23\0\3\11\1\0"+ + "\2\11\6\0\5\11\1\0\2\11\3\0\1\11\2\0"+ + "\3\11\1\302\2\0\21\11\23\0\3\11\1\0\2\11"+ + "\6\0\5\11\1\0\2\11\3\0\1\11\2\0\1\303"+ + "\3\11\2\0\21\11\23\0\3\11\1\0\2\11\6\0"+ + "\5\11\1\0\2\11\3\0\1\11\2\0\4\11\2\0"+ + "\2\11\1\304\16\11\23\0\3\11\1\0\2\11\6\0"+ + "\5\11\1\0\2\11\3\0\1\11\2\0\4\11\2\0"+ + "\3\11\1\305\15\11\23\0\3\11\1\0\2\11\6\0"+ + "\5\11\1\0\2\11\3\0\1\11\2\0\4\11\2\0"+ + "\4\11\1\306\14\11\23\0\3\11\1\0\2\11\6\0"+ + "\5\11\1\0\2\11\3\0\1\11\2\0\4\11\2\0"+ + "\5\11\1\307\13\11\22\0\7\257\1\310\1\0\73\257"+ + "\1\0\1\311\1\0\1\311\11\0\1\311\1\0\1\311"+ + "\3\0\2\311\16\0\2\311\3\0\2\311\3\0\1\311"+ + "\3\0\1\311\23\0\3\76\1\0\2\76\6\0\5\76"+ + "\1\0\2\76\3\0\1\76\2\0\3\76\1\312\2\0"+ + "\21\76\23\0\3\11\1\0\2\11\6\0\5\11\1\0"+ + "\2\11\3\0\1\11\2\0\4\11\2\0\16\11\1\313"+ + "\2\11\23\0\3\11\1\0\2\11\6\0\5\11\1\0"+ + "\2\11\3\0\1\11\2\0\4\11\2\0\3\11\1\314"+ + "\5\11\1\315\7\11\23\0\3\11\1\0\2\11\6\0"+ + "\5\11\1\0\2\11\3\0\1\11\2\0\4\11\2\0"+ + "\6\11\1\316\12\11\23\0\3\11\1\0\2\11\6\0"+ + "\5\11\1\0\2\11\3\0\1\11\2\0\4\11\2\0"+ + "\6\11\1\317\12\11\23\0\3\11\1\0\2\11\6\0"+ + "\5\11\1\0\2\11\3\0\1\11\2\0\4\11\2\0"+ + "\3\11\1\320\15\11\23\0\3\11\1\0\2\11\6\0"+ + "\5\11\1\0\2\11\3\0\1\11\2\0\4\11\2\0"+ + "\6\11\1\321\12\11\23\0\3\11\1\0\2\11\6\0"+ + "\5\11\1\0\2\11\3\0\1\11\2\0\4\11\2\0"+ + "\2\11\1\322\16\11\23\0\3\11\1\0\2\11\6\0"+ + "\5\11\1\0\2\11\3\0\1\11\2\0\3\11\1\323"+ + "\2\0\21\11\23\0\3\11\1\0\2\11\6\0\5\11"+ + "\1\0\2\11\3\0\1\11\2\0\2\11\1\324\1\11"+ + "\2\0\21\11\23\0\3\11\1\0\2\11\6\0\5\11"+ + "\1\0\2\11\3\0\1\11\2\0\4\11\2\0\10\11"+ + "\1\325\10\11\23\0\3\11\1\0\2\11\6\0\5\11"+ + "\1\0\2\11\3\0\1\11\2\0\4\11\2\0\12\11"+ + "\1\326\6\11\23\0\3\11\1\0\2\11\6\0\5\11"+ + "\1\0\2\11\3\0\1\11\2\0\4\11\2\0\2\11"+ + "\1\327\16\11\23\0\1\330\1\0\1\330\11\0\1\330"+ + "\1\0\1\330\3\0\2\330\16\0\2\330\3\0\2\330"+ + "\3\0\1\330\3\0\1\330\23\0\3\11\1\0\2\11"+ "\6\0\5\11\1\0\2\11\3\0\1\11\2\0\4\11"+ - "\4\0\2\11\1\350\16\11\20\0"; + "\2\0\4\11\1\331\14\11\23\0\3\11\1\0\2\11"+ + "\6\0\5\11\1\0\2\11\3\0\1\11\2\0\4\11"+ + "\2\0\7\11\1\332\11\11\23\0\3\11\1\0\2\11"+ + "\6\0\5\11\1\0\2\11\3\0\1\11\2\0\4\11"+ + "\2\0\7\11\1\333\11\11\23\0\3\11\1\0\2\11"+ + "\6\0\5\11\1\0\2\11\3\0\1\11\2\0\4\11"+ + "\2\0\13\11\1\334\5\11\23\0\3\11\1\0\2\11"+ + "\6\0\5\11\1\0\2\11\3\0\1\11\2\0\4\11"+ + "\2\0\5\11\1\335\13\11\23\0\3\11\1\0\2\11"+ + "\6\0\5\11\1\0\2\11\3\0\1\11\2\0\4\11"+ + "\2\0\5\11\1\336\13\11\23\0\3\11\1\0\2\11"+ + "\6\0\5\11\1\0\2\11\3\0\1\11\2\0\1\337"+ + "\3\11\2\0\21\11\23\0\1\204\1\0\1\204\11\0"+ + "\1\204\1\0\1\204\3\0\2\204\16\0\2\204\3\0"+ + "\2\204\3\0\1\204\3\0\1\204\23\0\3\11\1\0"+ + "\2\11\6\0\5\11\1\0\2\11\3\0\1\11\2\0"+ + "\2\11\1\340\1\11\2\0\21\11\23\0\3\11\1\0"+ + "\2\11\6\0\5\11\1\0\2\11\3\0\1\11\2\0"+ + "\4\11\2\0\3\11\1\341\15\11\23\0\3\11\1\0"+ + "\2\11\6\0\5\11\1\0\2\11\3\0\1\11\2\0"+ + "\4\11\2\0\2\11\1\342\16\11\23\0\3\11\1\0"+ + "\2\11\6\0\5\11\1\0\2\11\3\0\1\343\2\0"+ + "\4\11\2\0\21\11\23\0\3\11\1\0\2\11\6\0"+ + "\5\11\1\0\2\11\3\0\1\11\2\0\4\11\2\0"+ + "\3\11\1\344\15\11\23\0\3\11\1\0\2\11\6\0"+ + "\5\11\1\0\2\11\3\0\1\11\2\0\4\11\2\0"+ + "\10\11\1\345\10\11\23\0\3\11\1\0\2\11\6\0"+ + "\5\11\1\0\2\11\3\0\1\11\2\0\4\11\2\0"+ + "\2\11\1\346\16\11\23\0\3\11\1\0\2\11\6\0"+ + "\5\11\1\0\2\11\3\0\1\11\2\0\3\11\1\347"+ + "\2\0\21\11\23\0\3\11\1\0\2\11\6\0\5\11"+ + "\1\0\2\11\3\0\1\11\2\0\4\11\2\0\2\11"+ + "\1\350\16\11\22\0"; private static int [] zzUnpackTrans() { int [] result = new int[10540];