diff --git a/python/gen/com/jetbrains/python/lexer/_PythonLexer.java b/python/gen/com/jetbrains/python/lexer/_PythonLexer.java index 2513e5ad5254..9940a45ed095 100644 --- a/python/gen/com/jetbrains/python/lexer/_PythonLexer.java +++ b/python/gen/com/jetbrains/python/lexer/_PythonLexer.java @@ -190,31 +190,30 @@ class _PythonLexer implements FlexLexerEx { "\1\25\20\3\1\26\1\27\1\30\1\31\1\32\1\33"+ "\1\34\1\35\1\36\1\37\1\40\1\41\1\42\2\43"+ "\1\44\2\45\1\46\1\3\2\47\1\22\3\3\1\50"+ - "\1\51\1\1\1\51\1\52\1\53\1\3\2\54\1\55"+ + "\1\51\1\50\1\51\1\52\1\53\1\3\2\54\1\55"+ "\1\56\1\57\1\60\1\61\1\62\1\63\1\64\1\65"+ - "\3\3\1\50\1\1\1\52\1\66\1\2\5\0\1\2"+ - "\1\67\1\0\1\70\1\0\1\3\1\67\1\71\1\72"+ - "\3\7\1\73\3\7\1\3\2\74\1\75\1\76\15\3"+ - "\1\77\1\100\1\101\1\102\10\3\1\103\1\104\1\105"+ - "\1\106\1\107\1\110\1\111\1\112\1\113\1\114\1\115"+ - "\1\116\1\117\1\120\1\121\1\0\3\45\1\122\3\45"+ - "\1\3\6\47\2\0\1\123\1\3\2\0\1\51\1\124"+ - "\1\50\1\51\1\3\7\54\1\57\1\3\1\0\1\50"+ - "\1\0\1\2\1\0\1\2\1\0\1\2\1\0\1\67"+ - "\1\0\1\3\1\0\1\7\1\125\1\126\1\0\1\125"+ - "\1\3\2\0\1\127\1\3\1\130\1\131\1\132\5\3"+ - "\1\133\6\3\1\134\5\3\1\135\1\136\1\137\1\140"+ - "\1\0\1\45\1\141\1\142\1\0\1\141\1\3\1\47"+ - "\2\143\1\51\1\3\2\54\1\144\1\50\1\0\2\145"+ - "\1\0\1\3\1\74\1\3\1\146\1\147\10\3\1\150"+ - "\1\3\1\151\3\3\1\0\2\142\13\0\2\3\1\152"+ - "\1\3\1\153\1\154\4\3\1\155\1\3\1\156\7\0"+ - "\1\125\1\157\1\160\1\161\1\3\1\162\1\163\1\3"+ - "\1\164\1\141\1\143\1\144\1\145\1\0\1\165\1\3"+ - "\1\166\1\167"; + "\3\3\2\50\1\52\1\66\1\2\5\0\1\2\1\67"+ + "\1\0\1\70\1\0\1\3\1\67\1\71\1\72\3\7"+ + "\1\73\3\7\1\3\2\74\1\75\1\76\15\3\1\77"+ + "\1\100\1\101\1\102\10\3\1\103\1\104\1\105\1\106"+ + "\1\107\1\110\1\111\1\112\1\113\1\114\1\115\1\116"+ + "\1\117\1\120\1\121\1\0\3\45\1\122\3\45\1\3"+ + "\6\47\2\0\1\123\1\3\2\0\1\51\1\50\1\51"+ + "\1\3\7\54\1\57\1\3\1\0\1\50\1\0\1\2"+ + "\1\0\1\2\1\0\1\2\1\0\1\67\1\0\1\3"+ + "\1\0\1\7\1\124\1\125\1\0\1\124\1\3\2\0"+ + "\1\126\1\3\1\127\1\130\1\131\5\3\1\132\6\3"+ + "\1\133\5\3\1\134\1\135\1\136\1\137\1\0\1\45"+ + "\1\140\1\141\1\0\1\140\1\3\1\47\2\142\1\51"+ + "\1\3\2\54\1\143\1\50\1\0\2\144\1\0\1\3"+ + "\1\74\1\3\1\145\1\146\10\3\1\147\1\3\1\150"+ + "\3\3\1\0\2\141\13\0\2\3\1\151\1\3\1\152"+ + "\1\153\4\3\1\154\1\3\1\155\7\0\1\124\1\156"+ + "\1\157\1\160\1\3\1\161\1\162\1\3\1\163\1\140"+ + "\1\142\1\143\1\144\1\0\1\164\1\3\1\165\1\166"; private static int [] zzUnpackAction() { - int [] result = new int[340]; + int [] result = new int[339]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; @@ -262,29 +261,29 @@ class _PythonLexer implements FlexLexerEx { "\0\u01c8\0\u01c8\0\u218c\0\u01c8\0\u01c8\0\u21d8\0\u2224\0\u2270"+ "\0\u22bc\0\u2308\0\u01c8\0\u2354\0\u23a0\0\u23ec\0\u2438\0\u2484"+ "\0\u24d0\0\u251c\0\u2568\0\u25b4\0\u2600\0\u264c\0\u0f70\0\u01c8"+ - "\0\u2698\0\u26e4\0\u11d0\0\u2730\0\u01c8\0\u277c\0\u27c8\0\u2814"+ - "\0\u2860\0\u28ac\0\u24d0\0\u28f8\0\u2944\0\u2990\0\u29dc\0\u2a28"+ - "\0\u2a74\0\u2ac0\0\u2b0c\0\u2b58\0\u2ba4\0\u2bf0\0\u2c3c\0\u2c88"+ - "\0\u2cd4\0\u2d20\0\u2d6c\0\u2db8\0\u2e04\0\u0390\0\u2e50\0\u2e9c"+ - "\0\u01c8\0\u2e50\0\u2ee8\0\u2f34\0\u2f80\0\u2fcc\0\u02ac\0\u3018"+ - "\0\u02ac\0\u02ac\0\u02ac\0\u3064\0\u30b0\0\u30fc\0\u3148\0\u3194"+ - "\0\u02ac\0\u31e0\0\u322c\0\u3278\0\u32c4\0\u3310\0\u335c\0\u02ac"+ - "\0\u33a8\0\u33f4\0\u3440\0\u348c\0\u34d8\0\u01c8\0\u01c8\0\u01c8"+ - "\0\u01c8\0\u3524\0\u3570\0\u35bc\0\u01c8\0\u3570\0\u3608\0\u3654"+ - "\0\u01c8\0\u36a0\0\u36ec\0\u01c8\0\u3738\0\u2600\0\u01c8\0\u3784"+ - "\0\u37d0\0\u381c\0\u3868\0\u38b4\0\u3900\0\u394c\0\u01c8\0\u3998"+ - "\0\u02ac\0\u02ac\0\u39e4\0\u3a30\0\u3a7c\0\u3ac8\0\u3b14\0\u3b60"+ - "\0\u3bac\0\u3bf8\0\u02ac\0\u3c44\0\u02ac\0\u3c90\0\u3cdc\0\u3d28"+ - "\0\u3d74\0\u3dc0\0\u3e0c\0\u3e58\0\u3ea4\0\u3ef0\0\u3f3c\0\u3f88"+ - "\0\u3fd4\0\u4020\0\u406c\0\u3868\0\u38b4\0\u40b8\0\u4104\0\u4150"+ - "\0\u02ac\0\u419c\0\u02ac\0\u02ac\0\u41e8\0\u4234\0\u4280\0\u42cc"+ - "\0\u02ac\0\u4318\0\u02ac\0\u4364\0\u3dc0\0\u3e0c\0\u43b0\0\u43fc"+ - "\0\u4448\0\u4494\0\u44e0\0\u02ac\0\u02ac\0\u02ac\0\u452c\0\u02ac"+ - "\0\u02ac\0\u4578\0\u02ac\0\u3570\0\u01c8\0\u01c8\0\u01c8\0\u44e0"+ - "\0\u01c8\0\u45c4\0\u02ac\0\u02ac"; + "\0\u2698\0\u1138\0\u11d0\0\u26e4\0\u2730\0\u277c\0\u27c8\0\u2814"+ + "\0\u2860\0\u24d0\0\u28ac\0\u28f8\0\u2944\0\u2990\0\u29dc\0\u2a28"+ + "\0\u147c\0\u2a74\0\u2ac0\0\u2b0c\0\u2b58\0\u2ba4\0\u2bf0\0\u2c3c"+ + "\0\u2c88\0\u2cd4\0\u2d20\0\u2d6c\0\u0390\0\u2db8\0\u2e04\0\u01c8"+ + "\0\u2db8\0\u2e50\0\u2e9c\0\u2ee8\0\u2f34\0\u02ac\0\u2f80\0\u02ac"+ + "\0\u02ac\0\u02ac\0\u2fcc\0\u3018\0\u3064\0\u30b0\0\u30fc\0\u02ac"+ + "\0\u3148\0\u3194\0\u31e0\0\u322c\0\u3278\0\u32c4\0\u02ac\0\u3310"+ + "\0\u335c\0\u33a8\0\u33f4\0\u3440\0\u01c8\0\u01c8\0\u01c8\0\u01c8"+ + "\0\u348c\0\u34d8\0\u3524\0\u01c8\0\u34d8\0\u3570\0\u35bc\0\u01c8"+ + "\0\u3608\0\u3654\0\u01c8\0\u36a0\0\u2600\0\u01c8\0\u36ec\0\u3738"+ + "\0\u3784\0\u37d0\0\u381c\0\u3868\0\u38b4\0\u01c8\0\u3900\0\u02ac"+ + "\0\u02ac\0\u394c\0\u3998\0\u39e4\0\u3a30\0\u3a7c\0\u3ac8\0\u3b14"+ + "\0\u3b60\0\u02ac\0\u3bac\0\u02ac\0\u3bf8\0\u3c44\0\u3c90\0\u3cdc"+ + "\0\u3d28\0\u3d74\0\u3dc0\0\u3e0c\0\u3e58\0\u3ea4\0\u3ef0\0\u3f3c"+ + "\0\u3f88\0\u3fd4\0\u37d0\0\u381c\0\u4020\0\u406c\0\u40b8\0\u02ac"+ + "\0\u4104\0\u02ac\0\u02ac\0\u4150\0\u419c\0\u41e8\0\u4234\0\u02ac"+ + "\0\u4280\0\u02ac\0\u42cc\0\u3d28\0\u3d74\0\u4318\0\u4364\0\u43b0"+ + "\0\u43fc\0\u4448\0\u02ac\0\u02ac\0\u02ac\0\u4494\0\u02ac\0\u02ac"+ + "\0\u44e0\0\u02ac\0\u34d8\0\u01c8\0\u01c8\0\u01c8\0\u4448\0\u01c8"+ + "\0\u452c\0\u02ac\0\u02ac"; private static int [] zzUnpackRowMap() { - int [] result = new int[340]; + int [] result = new int[339]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; @@ -425,264 +424,263 @@ class _PythonLexer implements FlexLexerEx { "\14\0\5\12\1\257\1\12\1\257\1\12\1\257\1\211"+ "\1\212\1\12\1\257\1\22\7\12\16\0\14\113\1\0"+ "\10\113\1\0\1\272\1\0\1\113\1\273\5\113\1\0"+ - "\54\113\25\0\1\274\66\0\31\113\2\275\1\276\60\113"+ - "\27\0\1\277\115\0\1\113\63\0\10\12\1\300\1\12"+ - "\2\0\2\12\1\0\1\12\1\0\1\12\2\300\1\122"+ - "\1\0\1\301\1\22\2\0\1\12\14\0\5\12\1\300"+ - "\1\12\1\300\1\12\1\300\3\12\1\300\1\22\7\12"+ - "\16\0\14\302\1\0\10\302\1\303\1\304\10\302\1\0"+ - "\54\302\14\305\1\0\11\305\1\306\1\307\7\305\1\0"+ - "\54\305\14\310\1\0\10\310\1\0\1\310\1\0\2\310"+ - "\1\0\1\310\1\0\1\310\1\175\1\0\4\310\2\0"+ - "\46\310\1\0\10\12\1\300\1\12\2\0\2\12\1\0"+ - "\1\12\1\0\1\12\2\300\1\122\1\0\1\301\1\22"+ - "\2\0\1\12\14\0\1\205\3\12\1\206\1\300\1\12"+ - "\1\300\1\12\1\300\3\12\1\300\1\22\7\12\17\0"+ - "\10\12\1\300\1\12\2\0\2\12\1\0\1\12\1\0"+ - "\1\12\2\300\1\122\1\0\1\301\1\22\2\0\1\12"+ - "\14\0\5\12\1\311\1\12\1\300\1\12\1\300\3\12"+ - "\1\300\1\22\7\12\17\0\10\12\1\300\1\12\2\0"+ - "\2\12\1\0\1\12\1\0\1\12\2\300\1\122\1\0"+ - "\1\301\1\22\2\0\1\12\14\0\5\12\1\300\1\12"+ - "\1\300\1\12\1\300\1\211\1\212\1\12\1\300\1\22"+ - "\7\12\16\0\14\140\1\0\10\140\1\0\1\312\1\0"+ - "\1\140\2\0\4\140\1\0\105\140\2\275\1\313\60\140"+ + "\54\113\25\0\1\274\66\0\31\113\2\0\1\275\60\113"+ + "\27\0\1\276\115\0\1\113\63\0\10\12\1\277\1\12"+ + "\2\0\2\12\1\0\1\12\1\0\1\12\2\277\1\122"+ + "\1\0\1\300\1\22\2\0\1\12\14\0\5\12\1\277"+ + "\1\12\1\277\1\12\1\277\3\12\1\277\1\22\7\12"+ + "\16\0\14\301\1\0\10\301\1\302\1\303\10\301\1\0"+ + "\54\301\14\304\1\0\11\304\1\305\1\306\7\304\1\0"+ + "\54\304\14\307\1\0\10\307\1\0\1\307\1\0\2\307"+ + "\1\0\1\307\1\0\1\307\1\175\1\0\4\307\2\0"+ + "\46\307\1\0\10\12\1\277\1\12\2\0\2\12\1\0"+ + "\1\12\1\0\1\12\2\277\1\122\1\0\1\300\1\22"+ + "\2\0\1\12\14\0\1\205\3\12\1\206\1\277\1\12"+ + "\1\277\1\12\1\277\3\12\1\277\1\22\7\12\17\0"+ + "\10\12\1\277\1\12\2\0\2\12\1\0\1\12\1\0"+ + "\1\12\2\277\1\122\1\0\1\300\1\22\2\0\1\12"+ + "\14\0\5\12\1\310\1\12\1\277\1\12\1\277\3\12"+ + "\1\277\1\22\7\12\17\0\10\12\1\277\1\12\2\0"+ + "\2\12\1\0\1\12\1\0\1\12\2\277\1\122\1\0"+ + "\1\300\1\22\2\0\1\12\14\0\5\12\1\277\1\12"+ + "\1\277\1\12\1\277\1\211\1\212\1\12\1\277\1\22"+ + "\7\12\16\0\14\140\1\0\10\140\1\0\1\311\1\0"+ + "\1\140\2\0\4\140\1\0\105\140\2\0\1\312\60\140"+ "\1\0\1\144\1\145\1\144\1\0\1\144\1\0\1\147"+ "\2\0\1\152\4\0\1\153\1\154\1\0\1\155\31\0"+ "\1\154\5\0\1\152\32\0\3\145\1\0\1\145\1\0"+ - "\1\314\7\0\1\153\1\154\1\0\1\155\31\0\1\154"+ - "\40\0\5\315\1\0\1\316\1\0\1\315\6\0\1\315"+ - "\2\0\1\315\4\0\1\315\17\0\1\315\1\0\1\315"+ - "\1\0\1\315\2\0\1\315\1\0\1\315\4\0\1\315"+ - "\26\0\1\144\1\145\1\144\1\0\1\144\107\0\1\317"+ - "\1\0\1\317\1\0\1\317\1\0\1\320\105\0\1\321"+ - "\3\0\1\321\1\0\1\322\105\0\3\160\1\0\1\160"+ - "\12\0\1\154\1\0\1\155\31\0\1\154\40\0\3\323"+ - "\1\0\1\323\13\0\1\324\54\0\1\324\16\0\3\11"+ - "\1\0\1\11\107\0\10\12\1\325\1\12\2\0\2\12"+ - "\1\0\1\12\1\0\1\12\2\325\1\17\1\0\1\21"+ - "\1\22\2\0\1\12\14\0\5\12\1\325\1\12\1\325"+ - "\1\12\1\325\3\12\1\325\1\22\7\12\17\0\3\160"+ - "\1\0\1\160\1\0\1\326\10\0\1\154\1\0\1\155"+ - "\31\0\1\154\37\0\14\163\1\0\10\163\1\327\1\165"+ - "\10\163\1\166\54\163\25\0\1\330\1\331\5\0\1\332"+ - "\2\0\1\166\5\0\1\332\1\0\1\166\44\0\114\163"+ - "\14\167\1\0\11\167\1\170\1\327\7\167\1\166\170\167"+ - "\26\0\1\331\1\333\4\0\1\332\2\0\1\166\5\0"+ - "\1\332\1\0\1\166\45\0\10\12\1\334\1\12\2\0"+ - "\2\12\1\0\1\12\1\0\1\12\2\334\1\173\1\0"+ - "\1\174\1\12\2\0\1\12\14\0\5\12\1\334\1\12"+ - "\1\334\1\12\1\334\3\12\1\334\10\12\43\0\1\335"+ - "\115\0\1\336\65\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\313\7\0\1\153\1\154\1\0\1\155\31\0\1\154"+ + "\40\0\5\314\1\0\1\315\1\0\1\314\6\0\1\314"+ + "\2\0\1\314\4\0\1\314\17\0\1\314\1\0\1\314"+ + "\1\0\1\314\2\0\1\314\1\0\1\314\4\0\1\314"+ + "\26\0\1\144\1\145\1\144\1\0\1\144\107\0\1\316"+ + "\1\0\1\316\1\0\1\316\1\0\1\317\105\0\1\320"+ + "\3\0\1\320\1\0\1\321\105\0\3\160\1\0\1\160"+ + "\12\0\1\154\1\0\1\155\31\0\1\154\40\0\3\322"+ + "\1\0\1\322\13\0\1\323\54\0\1\323\16\0\3\11"+ + "\1\0\1\11\107\0\10\12\1\324\1\12\2\0\2\12"+ + "\1\0\1\12\1\0\1\12\2\324\1\17\1\0\1\21"+ + "\1\22\2\0\1\12\14\0\5\12\1\324\1\12\1\324"+ + "\1\12\1\324\3\12\1\324\1\22\7\12\17\0\3\160"+ + "\1\0\1\160\1\0\1\325\10\0\1\154\1\0\1\155"+ + "\31\0\1\154\37\0\14\163\1\0\10\163\1\326\1\165"+ + "\10\163\1\166\54\163\25\0\1\327\1\330\5\0\1\331"+ + "\2\0\1\166\5\0\1\331\1\0\1\166\44\0\114\163"+ + "\14\167\1\0\11\167\1\170\1\326\7\167\1\166\170\167"+ + "\26\0\1\330\1\332\4\0\1\331\2\0\1\166\5\0"+ + "\1\331\1\0\1\166\45\0\10\12\1\333\1\12\2\0"+ + "\2\12\1\0\1\12\1\0\1\12\2\333\1\173\1\0"+ + "\1\174\1\12\2\0\1\12\14\0\5\12\1\333\1\12"+ + "\1\333\1\12\1\333\3\12\1\333\10\12\43\0\1\334"+ + "\115\0\1\335\65\0\12\12\2\0\2\12\1\0\1\12"+ "\1\0\3\12\3\0\1\12\2\0\1\12\14\0\2\12"+ - "\1\337\23\12\17\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\336\23\12\17\0\12\12\2\0\2\12\1\0\1\12"+ "\1\0\3\12\3\0\1\12\2\0\1\12\14\0\3\12"+ - "\1\340\22\12\17\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\337\22\12\17\0\12\12\2\0\2\12\1\0\1\12"+ "\1\0\3\12\3\0\1\12\2\0\1\12\14\0\6\12"+ - "\1\341\17\12\17\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\340\17\12\17\0\12\12\2\0\2\12\1\0\1\12"+ "\1\0\3\12\3\0\1\12\2\0\1\12\14\0\12\12"+ - "\1\342\3\12\1\343\7\12\17\0\12\12\2\0\2\12"+ + "\1\341\3\12\1\342\7\12\17\0\12\12\2\0\2\12"+ "\1\0\1\12\1\0\3\12\3\0\1\12\2\0\1\12"+ - "\14\0\3\12\1\344\10\12\1\345\11\12\17\0\12\12"+ + "\14\0\3\12\1\343\10\12\1\344\11\12\17\0\12\12"+ "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ - "\2\0\1\12\14\0\11\12\1\346\14\12\17\0\12\12"+ + "\2\0\1\12\14\0\11\12\1\345\14\12\17\0\12\12"+ "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ - "\2\0\1\12\14\0\14\12\1\347\11\12\17\0\12\12"+ + "\2\0\1\12\14\0\14\12\1\346\11\12\17\0\12\12"+ "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ - "\2\0\1\12\14\0\6\12\1\350\17\12\17\0\12\12"+ + "\2\0\1\12\14\0\6\12\1\347\17\12\17\0\12\12"+ "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ - "\2\0\1\12\14\0\21\12\1\351\4\12\17\0\10\12"+ - "\1\325\1\12\2\0\2\12\1\0\1\12\1\0\1\12"+ - "\2\325\1\17\1\0\1\21\1\22\2\0\1\12\14\0"+ - "\4\12\1\352\1\325\1\12\1\325\1\12\1\325\3\12"+ - "\1\325\1\22\7\12\17\0\12\12\2\0\2\12\1\0"+ + "\2\0\1\12\14\0\21\12\1\350\4\12\17\0\10\12"+ + "\1\324\1\12\2\0\2\12\1\0\1\12\1\0\1\12"+ + "\2\324\1\17\1\0\1\21\1\22\2\0\1\12\14\0"+ + "\4\12\1\351\1\324\1\12\1\324\1\12\1\324\3\12"+ + "\1\324\1\22\7\12\17\0\12\12\2\0\2\12\1\0"+ "\1\12\1\0\3\12\3\0\1\12\2\0\1\12\14\0"+ - "\1\353\25\12\17\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\352\25\12\17\0\12\12\2\0\2\12\1\0\1\12"+ "\1\0\3\12\3\0\1\12\2\0\1\12\14\0\1\12"+ - "\1\354\24\12\17\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\353\24\12\17\0\12\12\2\0\2\12\1\0\1\12"+ "\1\0\3\12\3\0\1\12\2\0\1\12\14\0\22\12"+ - "\1\355\3\12\17\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\354\3\12\17\0\12\12\2\0\2\12\1\0\1\12"+ "\1\0\3\12\3\0\1\12\2\0\1\12\14\0\20\12"+ - "\1\356\5\12\17\0\10\12\1\334\1\12\2\0\2\12"+ - "\1\0\1\12\1\0\1\12\2\334\1\173\1\0\1\174"+ - "\1\12\2\0\1\12\14\0\5\12\1\334\1\12\1\334"+ - "\1\12\1\334\1\12\1\357\1\12\1\334\10\12\17\0"+ + "\1\355\5\12\17\0\10\12\1\333\1\12\2\0\2\12"+ + "\1\0\1\12\1\0\1\12\2\333\1\173\1\0\1\174"+ + "\1\12\2\0\1\12\14\0\5\12\1\333\1\12\1\333"+ + "\1\12\1\333\1\12\1\356\1\12\1\333\10\12\17\0"+ "\12\12\2\0\2\12\1\0\1\12\1\0\3\12\3\0"+ - "\1\12\2\0\1\12\14\0\5\12\1\360\20\12\17\0"+ + "\1\12\2\0\1\12\14\0\5\12\1\357\20\12\17\0"+ "\12\12\2\0\2\12\1\0\1\12\1\0\3\12\3\0"+ - "\1\12\2\0\1\12\14\0\1\12\1\361\24\12\17\0"+ + "\1\12\2\0\1\12\14\0\1\12\1\360\24\12\17\0"+ "\12\12\2\0\2\12\1\0\1\12\1\0\3\12\3\0"+ - "\1\12\2\0\1\12\14\0\3\12\1\362\22\12\17\0"+ + "\1\12\2\0\1\12\14\0\3\12\1\361\22\12\17\0"+ "\12\12\2\0\2\12\1\0\1\12\1\0\3\12\3\0"+ - "\1\12\2\0\1\12\14\0\4\12\1\363\21\12\17\0"+ + "\1\12\2\0\1\12\14\0\4\12\1\362\21\12\17\0"+ "\12\12\2\0\2\12\1\0\1\12\1\0\3\12\3\0"+ - "\1\12\2\0\1\12\14\0\13\12\1\364\12\12\17\0"+ + "\1\12\2\0\1\12\14\0\13\12\1\363\12\12\17\0"+ "\12\12\2\0\2\12\1\0\1\12\1\0\3\12\3\0"+ - "\1\12\2\0\1\12\14\0\14\12\1\365\11\12\54\0"+ - "\1\366\113\0\1\367\113\0\1\370\113\0\1\371\66\0"+ - "\1\372\11\0\2\372\1\101\1\0\1\102\25\0\1\372"+ - "\1\0\1\372\1\0\1\372\3\0\1\372\26\0\14\250"+ - "\1\0\10\250\1\373\1\252\10\250\1\253\54\250\25\0"+ - "\1\374\1\375\5\0\1\376\2\0\1\253\5\0\1\376"+ + "\1\12\2\0\1\12\14\0\14\12\1\364\11\12\54\0"+ + "\1\365\113\0\1\366\113\0\1\367\113\0\1\370\66\0"+ + "\1\371\11\0\2\371\1\101\1\0\1\102\25\0\1\371"+ + "\1\0\1\371\1\0\1\371\3\0\1\371\26\0\14\250"+ + "\1\0\10\250\1\372\1\252\10\250\1\253\54\250\25\0"+ + "\1\373\1\374\5\0\1\375\2\0\1\253\5\0\1\375"+ "\1\0\1\253\44\0\114\250\14\254\1\0\11\254\1\255"+ - "\1\373\7\254\1\253\170\254\26\0\1\375\1\377\4\0"+ - "\1\376\2\0\1\253\5\0\1\376\1\0\1\253\45\0"+ - "\10\12\1\u0100\1\12\2\0\2\12\1\0\1\12\1\0"+ - "\1\12\2\u0100\1\105\1\0\1\106\1\22\2\0\1\12"+ - "\14\0\5\12\1\u0100\1\12\1\u0100\1\12\1\u0100\3\12"+ - "\1\u0100\1\22\7\12\16\0\14\260\1\0\10\260\1\u0101"+ - "\1\262\10\260\1\0\54\260\25\0\1\u0102\66\0\114\260"+ - "\14\263\1\0\11\263\1\264\1\u0101\7\263\1\0\170\263"+ - "\27\0\1\u0103\64\0\14\266\1\0\22\266\1\270\54\266"+ - "\1\0\10\12\1\u0100\1\12\2\0\2\12\1\0\1\12"+ - "\1\0\1\12\2\u0100\1\105\1\0\1\106\1\22\2\0"+ - "\1\12\14\0\4\12\1\352\1\u0100\1\12\1\u0100\1\12"+ - "\1\u0100\3\12\1\u0100\1\22\7\12\16\0\31\113\2\0"+ - "\1\276\60\113\25\0\1\u0104\66\0\14\113\1\0\10\113"+ - "\1\0\1\272\1\0\1\113\1\276\5\113\1\0\54\113"+ - "\27\0\1\u0104\65\0\10\12\1\u0105\1\12\2\0\2\12"+ - "\1\0\1\12\1\0\1\12\2\u0105\1\122\1\0\1\301"+ - "\1\22\2\0\1\12\14\0\5\12\1\u0105\1\12\1\u0105"+ - "\1\12\1\u0105\3\12\1\u0105\1\22\7\12\16\0\14\305"+ - "\1\0\11\305\1\306\1\u0106\7\305\1\0\54\305\14\302"+ - "\1\0\10\302\1\u0107\1\304\10\302\1\0\170\302\14\305"+ - "\1\0\11\305\1\306\1\u0107\7\305\1\0\170\305\27\0"+ - "\1\u0108\64\0\14\310\1\0\10\310\1\0\1\310\1\0"+ - "\2\310\1\0\1\310\1\0\1\310\2\0\4\310\2\0"+ - "\46\310\1\0\10\12\1\u0105\1\12\2\0\2\12\1\0"+ - "\1\12\1\0\1\12\2\u0105\1\122\1\0\1\301\1\22"+ - "\2\0\1\12\14\0\4\12\1\352\1\u0105\1\12\1\u0105"+ - "\1\12\1\u0105\3\12\1\u0105\1\22\7\12\16\0\31\140"+ - "\2\0\1\313\74\140\1\0\10\140\1\0\1\312\1\0"+ - "\1\140\1\u0109\1\0\4\140\1\0\54\140\1\0\3\145"+ - "\1\0\1\145\107\0\5\315\1\0\1\316\1\0\1\315"+ - "\1\152\5\0\1\315\2\0\1\315\4\0\1\315\17\0"+ - "\1\315\1\0\1\315\1\0\1\315\2\0\1\315\1\0"+ - "\1\315\1\152\3\0\1\315\26\0\5\315\3\0\1\315"+ - "\6\0\1\315\2\0\1\315\4\0\1\315\17\0\1\315"+ - "\1\0\1\315\1\0\1\315\2\0\1\315\1\0\1\315"+ - "\4\0\1\315\26\0\1\317\1\0\1\317\1\0\1\317"+ - "\1\0\1\320\2\0\1\152\47\0\1\152\32\0\1\317"+ - "\1\0\1\317\1\0\1\317\107\0\1\321\3\0\1\321"+ - "\1\0\1\322\2\0\1\152\47\0\1\152\32\0\1\321"+ - "\3\0\1\321\107\0\3\323\1\0\1\323\1\0\1\324"+ - "\12\0\1\155\72\0\3\323\1\0\1\323\107\0\12\12"+ + "\1\372\7\254\1\253\170\254\26\0\1\374\1\376\4\0"+ + "\1\375\2\0\1\253\5\0\1\375\1\0\1\253\45\0"+ + "\10\12\1\377\1\12\2\0\2\12\1\0\1\12\1\0"+ + "\1\12\2\377\1\105\1\0\1\106\1\22\2\0\1\12"+ + "\14\0\5\12\1\377\1\12\1\377\1\12\1\377\3\12"+ + "\1\377\1\22\7\12\16\0\14\260\1\0\10\260\1\u0100"+ + "\1\262\10\260\1\0\54\260\25\0\1\u0101\66\0\114\260"+ + "\14\263\1\0\11\263\1\264\1\u0100\7\263\1\0\170\263"+ + "\27\0\1\u0102\64\0\14\266\1\0\22\266\1\270\54\266"+ + "\1\0\10\12\1\377\1\12\2\0\2\12\1\0\1\12"+ + "\1\0\1\12\2\377\1\105\1\0\1\106\1\22\2\0"+ + "\1\12\14\0\4\12\1\351\1\377\1\12\1\377\1\12"+ + "\1\377\3\12\1\377\1\22\7\12\43\0\1\u0103\66\0"+ + "\14\113\1\0\10\113\1\0\1\272\1\0\1\113\1\275"+ + "\5\113\1\0\54\113\27\0\1\u0103\65\0\10\12\1\u0104"+ + "\1\12\2\0\2\12\1\0\1\12\1\0\1\12\2\u0104"+ + "\1\122\1\0\1\300\1\22\2\0\1\12\14\0\5\12"+ + "\1\u0104\1\12\1\u0104\1\12\1\u0104\3\12\1\u0104\1\22"+ + "\7\12\16\0\14\304\1\0\11\304\1\305\1\u0105\7\304"+ + "\1\0\54\304\14\301\1\0\10\301\1\u0106\1\303\10\301"+ + "\1\0\170\301\14\304\1\0\11\304\1\305\1\u0106\7\304"+ + "\1\0\170\304\27\0\1\u0107\64\0\14\307\1\0\10\307"+ + "\1\0\1\307\1\0\2\307\1\0\1\307\1\0\1\307"+ + "\2\0\4\307\2\0\46\307\1\0\10\12\1\u0104\1\12"+ + "\2\0\2\12\1\0\1\12\1\0\1\12\2\u0104\1\122"+ + "\1\0\1\300\1\22\2\0\1\12\14\0\4\12\1\351"+ + "\1\u0104\1\12\1\u0104\1\12\1\u0104\3\12\1\u0104\1\22"+ + "\7\12\16\0\14\140\1\0\10\140\1\0\1\311\1\0"+ + "\1\140\1\u0108\1\0\4\140\1\0\54\140\1\0\3\145"+ + "\1\0\1\145\107\0\5\314\1\0\1\315\1\0\1\314"+ + "\1\152\5\0\1\314\2\0\1\314\4\0\1\314\17\0"+ + "\1\314\1\0\1\314\1\0\1\314\2\0\1\314\1\0"+ + "\1\314\1\152\3\0\1\314\26\0\5\314\3\0\1\314"+ + "\6\0\1\314\2\0\1\314\4\0\1\314\17\0\1\314"+ + "\1\0\1\314\1\0\1\314\2\0\1\314\1\0\1\314"+ + "\4\0\1\314\26\0\1\316\1\0\1\316\1\0\1\316"+ + "\1\0\1\317\2\0\1\152\47\0\1\152\32\0\1\316"+ + "\1\0\1\316\1\0\1\316\107\0\1\320\3\0\1\320"+ + "\1\0\1\321\2\0\1\152\47\0\1\152\32\0\1\320"+ + "\3\0\1\320\107\0\3\322\1\0\1\322\1\0\1\323"+ + "\12\0\1\155\72\0\3\322\1\0\1\322\107\0\12\12"+ "\2\0\2\12\1\0\1\12\1\0\3\12\1\17\1\0"+ "\1\21\1\22\2\0\1\12\14\0\16\12\1\22\7\12"+ - "\44\0\1\331\5\0\1\332\2\0\1\166\5\0\1\332"+ - "\1\0\1\166\44\0\25\330\1\u010a\1\u010b\65\330\26\333"+ - "\1\u010c\1\u010d\64\333\1\0\10\12\1\u010e\1\12\2\0"+ - "\2\12\1\0\1\12\1\0\1\12\2\u010e\1\173\1\0"+ - "\1\174\1\12\2\0\1\12\14\0\5\12\1\u010e\1\12"+ - "\1\u010e\1\12\1\u010e\3\12\1\u010e\10\12\43\0\1\u010f"+ - "\115\0\1\u010f\65\0\12\12\2\0\2\12\1\0\1\12"+ + "\44\0\1\330\5\0\1\331\2\0\1\166\5\0\1\331"+ + "\1\0\1\166\44\0\25\327\1\u0109\1\u010a\65\327\26\332"+ + "\1\u010b\1\u010c\64\332\1\0\10\12\1\u010d\1\12\2\0"+ + "\2\12\1\0\1\12\1\0\1\12\2\u010d\1\173\1\0"+ + "\1\174\1\12\2\0\1\12\14\0\5\12\1\u010d\1\12"+ + "\1\u010d\1\12\1\u010d\3\12\1\u010d\10\12\43\0\1\u010e"+ + "\115\0\1\u010e\65\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\0\3\12\3\0\1\12\2\0\1\12\14\0\4\12"+ + "\1\u010f\21\12\17\0\12\12\2\0\2\12\1\0\1\12"+ "\1\0\3\12\3\0\1\12\2\0\1\12\14\0\4\12"+ "\1\u0110\21\12\17\0\12\12\2\0\2\12\1\0\1\12"+ - "\1\0\3\12\3\0\1\12\2\0\1\12\14\0\4\12"+ - "\1\u0111\21\12\17\0\12\12\2\0\2\12\1\0\1\12"+ "\1\0\3\12\3\0\1\12\2\0\1\12\14\0\16\12"+ - "\1\u0112\7\12\17\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\u0111\7\12\17\0\12\12\2\0\2\12\1\0\1\12"+ "\1\0\3\12\3\0\1\12\2\0\1\12\14\0\4\12"+ - "\1\u0113\21\12\17\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\u0112\21\12\17\0\12\12\2\0\2\12\1\0\1\12"+ "\1\0\3\12\3\0\1\12\2\0\1\12\14\0\3\12"+ - "\1\u0114\22\12\17\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\u0113\22\12\17\0\12\12\2\0\2\12\1\0\1\12"+ "\1\0\3\12\3\0\1\12\2\0\1\12\14\0\15\12"+ - "\1\u0115\10\12\17\0\12\12\2\0\2\12\1\0\1\12"+ - "\1\0\3\12\3\0\1\12\2\0\1\12\14\0\1\u0116"+ + "\1\u0114\10\12\17\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\0\3\12\3\0\1\12\2\0\1\12\14\0\1\u0115"+ "\25\12\17\0\12\12\2\0\2\12\1\0\1\12\1\0"+ - "\3\12\3\0\1\12\2\0\1\12\14\0\3\12\1\u0117"+ + "\3\12\3\0\1\12\2\0\1\12\14\0\3\12\1\u0116"+ "\22\12\17\0\12\12\2\0\2\12\1\0\1\12\1\0"+ - "\3\12\3\0\1\12\2\0\1\12\14\0\6\12\1\u0118"+ + "\3\12\3\0\1\12\2\0\1\12\14\0\6\12\1\u0117"+ "\17\12\17\0\12\12\2\0\2\12\1\0\1\12\1\0"+ - "\3\12\3\0\1\12\2\0\1\12\14\0\7\12\1\u0119"+ + "\3\12\3\0\1\12\2\0\1\12\14\0\7\12\1\u0118"+ "\16\12\17\0\12\12\2\0\2\12\1\0\1\12\1\0"+ - "\3\12\3\0\1\12\2\0\1\12\14\0\13\12\1\u011a"+ + "\3\12\3\0\1\12\2\0\1\12\14\0\13\12\1\u0119"+ "\12\12\17\0\12\12\2\0\2\12\1\0\1\12\1\0"+ - "\3\12\3\0\1\12\2\0\1\12\14\0\22\12\1\u011b"+ + "\3\12\3\0\1\12\2\0\1\12\14\0\22\12\1\u011a"+ "\3\12\17\0\12\12\2\0\2\12\1\0\1\12\1\0"+ - "\3\12\3\0\1\12\2\0\1\12\14\0\1\u011c\25\12"+ + "\3\12\3\0\1\12\2\0\1\12\14\0\1\u011b\25\12"+ "\17\0\12\12\2\0\2\12\1\0\1\12\1\0\3\12"+ - "\3\0\1\12\2\0\1\12\14\0\3\12\1\u011d\22\12"+ + "\3\0\1\12\2\0\1\12\14\0\3\12\1\u011c\22\12"+ "\17\0\12\12\2\0\2\12\1\0\1\12\1\0\3\12"+ - "\3\0\1\12\2\0\1\12\14\0\12\12\1\u011e\13\12"+ + "\3\0\1\12\2\0\1\12\14\0\12\12\1\u011d\13\12"+ "\17\0\12\12\2\0\2\12\1\0\1\12\1\0\3\12"+ - "\3\0\1\12\2\0\1\12\14\0\7\12\1\u011f\16\12"+ + "\3\0\1\12\2\0\1\12\14\0\7\12\1\u011e\16\12"+ "\17\0\12\12\2\0\2\12\1\0\1\12\1\0\3\12"+ - "\3\0\1\12\2\0\1\12\14\0\12\12\1\u0120\13\12"+ - "\43\0\1\101\1\0\1\102\112\0\1\375\5\0\1\376"+ - "\2\0\1\253\5\0\1\376\1\0\1\253\44\0\25\374"+ - "\1\u0121\1\u0122\65\374\26\377\1\u0123\1\u0124\64\377\1\0"+ + "\3\0\1\12\2\0\1\12\14\0\12\12\1\u011f\13\12"+ + "\43\0\1\101\1\0\1\102\112\0\1\374\5\0\1\375"+ + "\2\0\1\253\5\0\1\375\1\0\1\253\44\0\25\373"+ + "\1\u0120\1\u0121\65\373\26\376\1\u0122\1\u0123\64\376\1\0"+ "\12\12\2\0\2\12\1\0\1\12\1\0\3\12\1\105"+ "\1\0\1\106\1\22\2\0\1\12\14\0\16\12\1\22"+ - "\7\12\16\0\25\u0102\1\u0125\1\u0126\65\u0102\26\u0103\1\u0127"+ - "\1\u0128\64\u0103\1\0\12\12\2\0\2\12\1\0\1\12"+ - "\1\0\3\12\1\122\1\0\1\301\1\22\2\0\1\12"+ - "\14\0\16\12\1\22\7\12\16\0\26\u0108\1\u0129\1\u012a"+ - "\64\u0108\1\140\12\u0109\1\140\1\0\2\u0109\1\140\1\u0109"+ - "\1\140\3\u0109\1\0\1\312\1\0\1\u0109\1\0\1\140"+ - "\2\u0109\2\140\1\0\10\140\26\u0109\16\140\25\330\1\u012b"+ - "\1\u012c\201\330\142\333\1\u012d\1\u012e\64\333\1\0\12\12"+ + "\7\12\16\0\25\u0101\1\u0124\1\u0125\65\u0101\26\u0102\1\u0126"+ + "\1\u0127\64\u0102\1\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\0\3\12\1\122\1\0\1\300\1\22\2\0\1\12"+ + "\14\0\16\12\1\22\7\12\16\0\26\u0107\1\u0128\1\u0129"+ + "\64\u0107\1\140\12\u0108\1\140\1\0\2\u0108\1\140\1\u0108"+ + "\1\140\3\u0108\1\0\1\311\1\0\1\u0108\1\0\1\140"+ + "\2\u0108\2\140\1\0\10\140\26\u0108\16\140\25\327\1\u012a"+ + "\1\u012b\201\327\142\332\1\u012c\1\u012d\64\332\1\0\12\12"+ "\2\0\2\12\1\0\1\12\1\0\3\12\1\173\1\0"+ "\1\174\1\12\2\0\1\12\14\0\26\12\17\0\12\12"+ "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ - "\2\0\1\12\14\0\5\12\1\u012f\20\12\17\0\12\12"+ + "\2\0\1\12\14\0\5\12\1\u012e\20\12\17\0\12\12"+ "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ - "\2\0\1\12\14\0\20\12\1\u0130\5\12\17\0\12\12"+ + "\2\0\1\12\14\0\20\12\1\u012f\5\12\17\0\12\12"+ "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ - "\2\0\1\12\14\0\4\12\1\u0131\21\12\17\0\12\12"+ + "\2\0\1\12\14\0\4\12\1\u0130\21\12\17\0\12\12"+ "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ - "\2\0\1\12\14\0\5\12\1\u0132\20\12\17\0\12\12"+ + "\2\0\1\12\14\0\5\12\1\u0131\20\12\17\0\12\12"+ "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ - "\2\0\1\12\14\0\10\12\1\u0133\15\12\17\0\12\12"+ + "\2\0\1\12\14\0\10\12\1\u0132\15\12\17\0\12\12"+ "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ - "\2\0\1\12\14\0\3\12\1\u0134\22\12\17\0\12\12"+ + "\2\0\1\12\14\0\3\12\1\u0133\22\12\17\0\12\12"+ "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ - "\2\0\1\12\14\0\14\12\1\u0135\11\12\17\0\12\12"+ + "\2\0\1\12\14\0\14\12\1\u0134\11\12\17\0\12\12"+ "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ - "\2\0\1\12\14\0\2\12\1\u0136\23\12\17\0\12\12"+ + "\2\0\1\12\14\0\2\12\1\u0135\23\12\17\0\12\12"+ "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ - "\2\0\1\12\14\0\5\12\1\u0137\20\12\17\0\12\12"+ + "\2\0\1\12\14\0\5\12\1\u0136\20\12\17\0\12\12"+ "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ - "\2\0\1\12\14\0\12\12\1\u0138\13\12\17\0\12\12"+ + "\2\0\1\12\14\0\12\12\1\u0137\13\12\17\0\12\12"+ "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ - "\2\0\1\12\14\0\2\12\1\u0139\23\12\17\0\12\12"+ + "\2\0\1\12\14\0\2\12\1\u0138\23\12\17\0\12\12"+ "\2\0\2\12\1\0\1\12\1\0\3\12\3\0\1\12"+ - "\2\0\1\12\14\0\1\u013a\25\12\17\0\12\12\2\0"+ + "\2\0\1\12\14\0\1\u0139\25\12\17\0\12\12\2\0"+ "\2\12\1\0\1\12\1\0\3\12\3\0\1\12\2\0"+ - "\1\12\14\0\4\12\1\u013b\21\12\16\0\25\374\1\u013c"+ - "\1\u013d\201\374\142\377\1\u013e\1\u013f\64\377\25\u0102\1\u0140"+ - "\1\u0126\201\u0102\142\u0103\1\u0127\1\u0141\64\u0103\142\u0108\1\u0129"+ - "\1\u0142\64\u0108\25\330\1\u0143\1\u012c\65\330\26\333\1\u012d"+ - "\1\u0143\64\333\1\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\12\14\0\4\12\1\u013a\21\12\16\0\25\373\1\u013b"+ + "\1\u013c\201\373\142\376\1\u013d\1\u013e\64\376\25\u0101\1\u013f"+ + "\1\u0125\201\u0101\142\u0102\1\u0126\1\u0140\64\u0102\142\u0107\1\u0128"+ + "\1\u0141\64\u0107\25\327\1\u0142\1\u012b\65\327\26\332\1\u012c"+ + "\1\u0142\64\332\1\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\0\3\12\3\0\1\12\2\0\1\12\14\0\6\12"+ + "\1\u0143\17\12\17\0\12\12\2\0\2\12\1\0\1\12"+ "\1\0\3\12\3\0\1\12\2\0\1\12\14\0\6\12"+ "\1\u0144\17\12\17\0\12\12\2\0\2\12\1\0\1\12"+ - "\1\0\3\12\3\0\1\12\2\0\1\12\14\0\6\12"+ - "\1\u0145\17\12\17\0\12\12\2\0\2\12\1\0\1\12"+ + "\1\0\3\12\3\0\1\12\2\0\1\12\14\0\1\12"+ + "\1\u0145\24\12\17\0\12\12\2\0\2\12\1\0\1\12"+ "\1\0\3\12\3\0\1\12\2\0\1\12\14\0\1\12"+ "\1\u0146\24\12\17\0\12\12\2\0\2\12\1\0\1\12"+ - "\1\0\3\12\3\0\1\12\2\0\1\12\14\0\1\12"+ - "\1\u0147\24\12\17\0\12\12\2\0\2\12\1\0\1\12"+ - "\1\0\3\12\3\0\1\12\2\0\1\12\14\0\1\u0148"+ + "\1\0\3\12\3\0\1\12\2\0\1\12\14\0\1\u0147"+ "\25\12\17\0\12\12\2\0\2\12\1\0\1\12\1\0"+ - "\3\12\3\0\1\12\2\0\1\12\14\0\6\12\1\u0149"+ + "\3\12\3\0\1\12\2\0\1\12\14\0\6\12\1\u0148"+ "\17\12\17\0\12\12\2\0\2\12\1\0\1\12\1\0"+ - "\3\12\3\0\1\12\2\0\1\12\14\0\12\12\1\u014a"+ + "\3\12\3\0\1\12\2\0\1\12\14\0\12\12\1\u0149"+ "\13\12\17\0\12\12\2\0\2\12\1\0\1\12\1\0"+ - "\3\12\3\0\1\12\2\0\1\12\14\0\12\12\1\u014b"+ - "\13\12\16\0\25\374\1\u014c\1\u013d\65\374\26\377\1\u013e"+ - "\1\u014c\64\377\25\u0102\1\u014d\1\u0126\65\u0102\26\u0103\1\u0127"+ - "\1\u014d\64\u0103\26\u0108\1\u0129\1\u014e\64\u0108\26\0\1\u014f"+ - "\5\0\1\u0150\2\0\1\u0151\5\0\1\u0150\1\0\1\u0151"+ + "\3\12\3\0\1\12\2\0\1\12\14\0\12\12\1\u014a"+ + "\13\12\16\0\25\373\1\u014b\1\u013c\65\373\26\376\1\u013d"+ + "\1\u014b\64\376\25\u0101\1\u014c\1\u0125\65\u0101\26\u0102\1\u0126"+ + "\1\u014c\64\u0102\26\u0107\1\u0128\1\u014d\64\u0107\26\0\1\u014e"+ + "\5\0\1\u014f\2\0\1\u0150\5\0\1\u014f\1\0\1\u0150"+ "\45\0\12\12\2\0\2\12\1\0\1\12\1\0\3\12"+ - "\3\0\1\12\2\0\1\12\14\0\15\12\1\u0152\10\12"+ + "\3\0\1\12\2\0\1\12\14\0\15\12\1\u0151\10\12"+ "\17\0\12\12\2\0\2\12\1\0\1\12\1\0\3\12"+ - "\3\0\1\12\2\0\1\12\14\0\21\12\1\u0153\4\12"+ + "\3\0\1\12\2\0\1\12\14\0\21\12\1\u0152\4\12"+ "\17\0\12\12\2\0\2\12\1\0\1\12\1\0\3\12"+ - "\3\0\1\12\2\0\1\12\14\0\4\12\1\u0154\21\12"+ + "\3\0\1\12\2\0\1\12\14\0\4\12\1\u0153\21\12"+ "\16\0"; private static int [] zzUnpackTrans() { - int [] result = new int[17936]; + int [] result = new int[17784]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; @@ -726,16 +724,16 @@ class _PythonLexer implements FlexLexerEx { "\1\0\1\11\1\0\2\1\2\11\3\1\1\11\6\1"+ "\2\11\31\1\2\11\1\1\2\11\1\1\5\11\1\1"+ "\2\11\1\1\1\0\3\1\1\11\12\1\2\0\1\11"+ - "\1\1\2\0\1\1\1\11\14\1\1\0\1\1\1\0"+ + "\1\1\2\0\15\1\1\0\1\1\1\0\1\1\1\0"+ "\1\1\1\0\1\1\1\0\1\1\1\0\1\1\1\0"+ - "\1\1\1\0\2\1\1\11\1\0\2\1\2\0\27\1"+ - "\4\11\1\0\2\1\1\11\1\0\2\1\1\11\2\1"+ - "\1\11\2\1\1\11\2\1\1\0\2\1\1\0\1\1"+ - "\1\11\21\1\1\0\2\1\13\0\15\1\7\0\12\1"+ - "\3\11\1\0\1\11\3\1"; + "\2\1\1\11\1\0\2\1\2\0\27\1\4\11\1\0"+ + "\2\1\1\11\1\0\2\1\1\11\2\1\1\11\2\1"+ + "\1\11\2\1\1\0\2\1\1\0\1\1\1\11\21\1"+ + "\1\0\2\1\13\0\15\1\7\0\12\1\3\11\1\0"+ + "\1\11\3\1"; private static int [] zzUnpackAttribute() { - int [] result = new int[340]; + int [] result = new int[339]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; @@ -1051,605 +1049,600 @@ return yylength()-s.length(); { return PyTokenTypes.BAD_CHARACTER; } // fall through - case 120: break; + case 119: break; case 2: { return PyTokenTypes.INTEGER_LITERAL; } // fall through - case 121: break; + case 120: break; case 3: { return PyTokenTypes.IDENTIFIER; } // fall through - case 122: break; + case 121: break; case 4: { if (zzCurrentPos == 0) yybegin(PENDING_DOCSTRING); return PyTokenTypes.END_OF_LINE_COMMENT; } // fall through - case 123: break; + case 122: break; case 5: { return PyTokenTypes.DOT; } // fall through - case 124: break; + case 123: break; case 6: { return PyTokenTypes.MINUS; } // fall through - case 125: break; + case 124: break; case 7: { if (zzInput == YYEOF && zzStartRead == 0) return PyTokenTypes.DOCSTRING; else return PyTokenTypes.SINGLE_QUOTED_STRING; } // fall through - case 126: break; + case 125: break; case 8: { return PyTokenTypes.BACKSLASH; } // fall through - case 127: break; + case 126: break; case 9: { return PyTokenTypes.LBRACE; } // fall through - case 128: break; + case 127: break; case 10: { return PyTokenTypes.RBRACE; } // fall through - case 129: break; + case 128: break; case 11: { return PyTokenTypes.SPACE; } // fall through - case 130: break; + case 129: break; case 12: { return PyTokenTypes.EQ; } // fall through - case 131: break; + case 130: break; case 13: { if (zzCurrentPos == 0) yybegin(PENDING_DOCSTRING); return PyTokenTypes.LINE_BREAK; } // fall through - case 132: break; + case 131: break; case 14: { return PyTokenTypes.LPAR; } // fall through - case 133: break; + case 132: break; case 15: { return PyTokenTypes.RPAR; } // fall through - case 134: break; + case 133: break; case 16: { return PyTokenTypes.LBRACKET; } // fall through - case 135: break; + case 134: break; case 17: { return PyTokenTypes.RBRACKET; } // fall through - case 136: break; + case 135: break; case 18: { return PyTokenTypes.COLON; } // fall through - case 137: break; + case 136: break; case 19: { return PyTokenTypes.TAB; } // fall through - case 138: break; + case 137: break; case 20: { return PyTokenTypes.FORMFEED; } // fall through - case 139: break; + case 138: break; case 21: { return PyTokenTypes.SEMICOLON; } // fall through - case 140: break; + case 139: break; case 22: { return PyTokenTypes.PLUS; } // fall through - case 141: break; + case 140: break; case 23: { return PyTokenTypes.MULT; } // fall through - case 142: break; + case 141: break; case 24: { return PyTokenTypes.AT; } // fall through - case 143: break; + case 142: break; case 25: { return PyTokenTypes.DIV; } // fall through - case 144: break; + case 143: break; case 26: { return PyTokenTypes.PERC; } // fall through - case 145: break; + case 144: break; case 27: { return PyTokenTypes.AND; } // fall through - case 146: break; + case 145: break; case 28: { return PyTokenTypes.OR; } // fall through - case 147: break; + case 146: break; case 29: { return PyTokenTypes.XOR; } // fall through - case 148: break; + case 147: break; case 30: { return PyTokenTypes.GT; } // fall through - case 149: break; + case 148: break; case 31: { return PyTokenTypes.LT; } // fall through - case 150: break; + case 149: break; case 32: { return PyTokenTypes.TILDE; } // fall through - case 151: break; + case 150: break; case 33: { return PyTokenTypes.COMMA; } // fall through - case 152: break; + case 151: break; case 34: { return PyTokenTypes.TICK; } // fall through - case 153: break; + case 152: break; case 35: { yypushback(1); yybegin(YYINITIAL); } // fall through - case 154: break; + case 153: break; case 36: { return PyTokenTypes.END_OF_LINE_COMMENT; } // fall through - case 155: break; + case 154: break; case 37: { if (zzInput == YYEOF) return PyTokenTypes.DOCSTRING; else yybegin(YYINITIAL); return PyTokenTypes.SINGLE_QUOTED_STRING; } // fall through - case 156: break; + case 155: break; case 38: { return PyTokenTypes.LINE_BREAK; } // fall through - case 157: break; + case 156: break; case 39: { return PyTokenTypes.SINGLE_QUOTED_STRING; } // fall through - case 158: break; + case 157: break; case 40: { return PyTokenTypes.FSTRING_TEXT; } // fall through - case 159: break; + case 158: break; case 41: { return fStringHelper.handleFStringEnd(); } // fall through - case 160: break; + case 159: break; case 42: { return fStringHelper.handleFragmentStart(); } // fall through - case 161: break; + case 160: break; case 43: { return fStringHelper.handleLineBreakInLiteralText(); } // fall through - case 162: break; + case 161: break; case 44: { return fStringHelper.handleStringLiteral(PyTokenTypes.SINGLE_QUOTED_STRING); } // fall through - case 163: break; + case 162: break; case 45: { return fStringHelper.handleLeftBracketInFragment(PyTokenTypes.LBRACE); } // fall through - case 164: break; + case 163: break; case 46: { return fStringHelper.handleRightBracketInFragment(PyTokenTypes.RBRACE); } // fall through - case 165: break; + case 164: break; case 47: { return PyTokenTypes.FSTRING_FRAGMENT_TYPE_CONVERSION; } // fall through - case 166: break; + case 165: break; case 48: { return fStringHelper.handleLineBreakInFragment(); } // fall through - case 167: break; + case 166: break; case 49: { return fStringHelper.handleLeftBracketInFragment(PyTokenTypes.LPAR); } // fall through - case 168: break; + case 167: break; case 50: { return fStringHelper.handleRightBracketInFragment(PyTokenTypes.RPAR); } // fall through - case 169: break; + case 168: break; case 51: { return fStringHelper.handleLeftBracketInFragment(PyTokenTypes.LBRACKET); } // fall through - case 170: break; + case 169: break; case 52: { return fStringHelper.handleRightBracketInFragment(PyTokenTypes.RBRACKET); } // fall through - case 171: break; + case 170: break; case 53: { return fStringHelper.handleColonInFragment(); } // fall through - case 172: break; + case 171: break; case 54: { return fStringHelper.handleFragmentEnd(); } // fall through - case 173: break; + case 172: break; case 55: { return PyTokenTypes.FLOAT_LITERAL; } // fall through - case 174: break; + case 173: break; case 56: { return PyTokenTypes.IMAGINARY_LITERAL; } // fall through - case 175: break; + case 174: break; case 57: { return PyTokenTypes.MINUSEQ; } // fall through - case 176: break; + case 175: break; case 58: { return PyTokenTypes.RARROW; } // fall through - case 177: break; + case 176: break; case 59: { yypushback(getSpaceLength(yytext())); if (zzCurrentPos != 0) return PyTokenTypes.SINGLE_QUOTED_STRING; return PyTokenTypes.DOCSTRING; } // fall through - case 178: break; + case 177: break; case 60: { return fStringHelper.handleFStringStart(); } // fall through - case 179: break; + case 178: break; case 61: { return PyTokenTypes.NE; } // fall through - case 180: break; + case 179: break; case 62: { return PyTokenTypes.EQEQ; } // fall through - case 181: break; + case 180: break; case 63: { return PyTokenTypes.OR_KEYWORD; } // fall through - case 182: break; + case 181: break; case 64: { return PyTokenTypes.IN_KEYWORD; } // fall through - case 183: break; + case 182: break; case 65: { return PyTokenTypes.IS_KEYWORD; } // fall through - case 184: break; + case 183: break; case 66: { return PyTokenTypes.IF_KEYWORD; } // fall through - case 185: break; + case 184: break; case 67: { return PyTokenTypes.PLUSEQ; } // fall through - case 186: break; + case 185: break; case 68: { return PyTokenTypes.MULTEQ; } // fall through - case 187: break; + case 186: break; case 69: { return PyTokenTypes.EXP; } // fall through - case 188: break; + case 187: break; case 70: { return PyTokenTypes.ATEQ; } // fall through - case 189: break; + case 188: break; case 71: { return PyTokenTypes.DIVEQ; } // fall through - case 190: break; + case 189: break; case 72: { return PyTokenTypes.FLOORDIV; } // fall through - case 191: break; + case 190: break; case 73: { return PyTokenTypes.PERCEQ; } // fall through - case 192: break; + case 191: break; case 74: { return PyTokenTypes.ANDEQ; } // fall through - case 193: break; + case 192: break; case 75: { return PyTokenTypes.OREQ; } // fall through - case 194: break; + case 193: break; case 76: { return PyTokenTypes.XOREQ; } // fall through - case 195: break; + case 194: break; case 77: { return PyTokenTypes.GE; } // fall through - case 196: break; + case 195: break; case 78: { return PyTokenTypes.GTGT; } // fall through - case 197: break; + case 196: break; case 79: { return PyTokenTypes.LE; } // fall through - case 198: break; + case 197: break; case 80: { return PyTokenTypes.NE_OLD; } // fall through - case 199: break; + case 198: break; case 81: { return PyTokenTypes.LTLT; } // fall through - case 200: break; + case 199: break; case 82: { yypushback(getSpaceLength(yytext())); yybegin(YYINITIAL); return PyTokenTypes.DOCSTRING; } // fall through - case 201: break; + case 200: break; case 83: { yypushback(yylength()-1); yybegin(PENDING_DOCSTRING); return PyTokenTypes.COLON; } // fall through - case 202: break; + case 201: break; case 84: - { yypushback(1); return PyTokenTypes.FSTRING_TEXT; - } - // fall through - case 203: break; - case 85: { if (zzInput == YYEOF && zzStartRead == 0) return PyTokenTypes.DOCSTRING; else return PyTokenTypes.TRIPLE_QUOTED_STRING; } // fall through - case 204: break; - case 86: + case 202: break; + case 85: { yypushback(getSpaceLength(yytext())); if (zzCurrentPos != 0) return PyTokenTypes.SINGLE_QUOTED_STRING; yybegin(PENDING_DOCSTRING); return PyTokenTypes.DOCSTRING; } // fall through - case 205: break; - case 87: + case 203: break; + case 86: { return PyTokenTypes.AND_KEYWORD; } // fall through - case 206: break; - case 88: + case 204: break; + case 87: { return PyTokenTypes.NOT_KEYWORD; } // fall through - case 207: break; - case 89: + case 205: break; + case 88: { return PyTokenTypes.DEL_KEYWORD; } // fall through - case 208: break; - case 90: + case 206: break; + case 89: { yybegin(IN_DOCSTRING_OWNER); return PyTokenTypes.DEF_KEYWORD; } // fall through - case 209: break; - case 91: + case 207: break; + case 90: { return PyTokenTypes.TRY_KEYWORD; } // fall through - case 210: break; - case 92: + case 208: break; + case 91: { return PyTokenTypes.FOR_KEYWORD; } // fall through - case 211: break; - case 93: + case 209: break; + case 92: { return PyTokenTypes.EXPEQ; } // fall through - case 212: break; - case 94: + case 210: break; + case 93: { return PyTokenTypes.FLOORDIVEQ; } // fall through - case 213: break; - case 95: + case 211: break; + case 94: { return PyTokenTypes.GTGTEQ; } // fall through - case 214: break; - case 96: + case 212: break; + case 95: { return PyTokenTypes.LTLTEQ; } // fall through - case 215: break; - case 97: + case 213: break; + case 96: { if (zzInput == YYEOF) return PyTokenTypes.DOCSTRING; else yybegin(YYINITIAL); return PyTokenTypes.TRIPLE_QUOTED_STRING; } // fall through - case 216: break; - case 98: + case 214: break; + case 97: { yypushback(getSpaceLength(yytext())); return PyTokenTypes.DOCSTRING; } // fall through - case 217: break; - case 99: + case 215: break; + case 98: { return PyTokenTypes.TRIPLE_QUOTED_STRING; } // fall through - case 218: break; - case 100: + case 216: break; + case 99: { return fStringHelper.handleStringLiteral(PyTokenTypes.TRIPLE_QUOTED_STRING); } // fall through - case 219: break; - case 101: + case 217: break; + case 100: { yypushback(getSpaceLength(yytext())); if (zzCurrentPos != 0) return PyTokenTypes.TRIPLE_QUOTED_STRING; yybegin(PENDING_DOCSTRING); return PyTokenTypes.DOCSTRING; } // fall through - case 220: break; - case 102: + case 218: break; + case 101: { return PyTokenTypes.ELSE_KEYWORD; } // fall through - case 221: break; - case 103: + case 219: break; + case 102: { return PyTokenTypes.ELIF_KEYWORD; } // fall through - case 222: break; - case 104: + case 220: break; + case 103: { return PyTokenTypes.FROM_KEYWORD; } // fall through - case 223: break; - case 105: + case 221: break; + case 104: { return PyTokenTypes.PASS_KEYWORD; } // fall through - case 224: break; - case 106: + case 222: break; + case 105: { return PyTokenTypes.RAISE_KEYWORD; } // fall through - case 225: break; - case 107: + case 223: break; + case 106: { return PyTokenTypes.BREAK_KEYWORD; } // fall through - case 226: break; - case 108: + case 224: break; + case 107: { yybegin(IN_DOCSTRING_OWNER); return PyTokenTypes.CLASS_KEYWORD; } // fall through - case 227: break; - case 109: + case 225: break; + case 108: { return PyTokenTypes.YIELD_KEYWORD; } // fall through - case 228: break; - case 110: + case 226: break; + case 109: { return PyTokenTypes.WHILE_KEYWORD; } // fall through - case 229: break; - case 111: + case 227: break; + case 110: { return PyTokenTypes.ASSERT_KEYWORD; } // fall through - case 230: break; - case 112: + case 228: break; + case 111: { return PyTokenTypes.EXCEPT_KEYWORD; } // fall through - case 231: break; - case 113: + case 229: break; + case 112: { return PyTokenTypes.RETURN_KEYWORD; } // fall through - case 232: break; - case 114: + case 230: break; + case 113: { return PyTokenTypes.LAMBDA_KEYWORD; } // fall through - case 233: break; - case 115: + case 231: break; + case 114: { return PyTokenTypes.IMPORT_KEYWORD; } // fall through - case 234: break; - case 116: + case 232: break; + case 115: { return PyTokenTypes.GLOBAL_KEYWORD; } // fall through - case 235: break; - case 117: + case 233: break; + case 116: { yypushback(getSpaceLength(yytext())); if (zzCurrentPos != 0) return PyTokenTypes.TRIPLE_QUOTED_STRING; return PyTokenTypes.DOCSTRING; } // fall through - case 236: break; - case 118: + case 234: break; + case 117: { return PyTokenTypes.FINALLY_KEYWORD; } // fall through - case 237: break; - case 119: + case 235: break; + case 118: { return PyTokenTypes.CONTINUE_KEYWORD; } // fall through - case 238: break; + case 236: break; default: zzScanError(ZZ_NO_MATCH); } diff --git a/python/src/com/jetbrains/python/lexer/Python.flex b/python/src/com/jetbrains/python/lexer/Python.flex index a8f3000e4532..9d87b17a6e57 100644 --- a/python/src/com/jetbrains/python/lexer/Python.flex +++ b/python/src/com/jetbrains/python/lexer/Python.flex @@ -73,7 +73,6 @@ FSTRING_START = {FSTRING_PREFIX} (\"\"\"|'''|\"|') FSTRING_QUOTES = (\"{1,3}|'{1,3}) FSTRING_ESCAPED_LBRACE = "{{" FSTRING_ESCAPE_SEQUENCE = \\[^{}\r\n] -BACKSLASH_ESCAPED_BRACES = "\\{" | "\\}" // TODO report it in annotation //FSTRING_ESCAPED_RBRACE = "}}" NAMED_UNICODE_ESCAPE = \\N\{[\w ]*\}? @@ -103,10 +102,11 @@ return yylength()-s.length(); { {FSTRING_TEXT_NO_QUOTES} { return PyTokenTypes.FSTRING_TEXT; } + "\\" { return PyTokenTypes.FSTRING_TEXT; } [\n] { return fStringHelper.handleLineBreakInLiteralText(); } - {BACKSLASH_ESCAPED_BRACES} { yypushback(1); return PyTokenTypes.FSTRING_TEXT; } {FSTRING_QUOTES} { return fStringHelper.handleFStringEnd(); } "{" { return fStringHelper.handleFragmentStart(); } + [^] { return PyTokenTypes.BAD_CHARACTER; } } @@ -135,13 +135,12 @@ return yylength()-s.length(); { {FSTRING_FORMAT_TEXT_NO_QUOTES} { return PyTokenTypes.FSTRING_TEXT; } + "\\" { return PyTokenTypes.FSTRING_TEXT; } [\n] { return fStringHelper.handleLineBreakInLiteralText(); } - {BACKSLASH_ESCAPED_BRACES} { yypushback(1); return PyTokenTypes.FSTRING_TEXT; } + {FSTRING_QUOTES} { return fStringHelper.handleFStringEnd(); } "{" { return fStringHelper.handleFragmentStart(); } "}" { return fStringHelper.handleFragmentEnd(); } - // format part of a fragment can contain opening quotes - {FSTRING_QUOTES} { return fStringHelper.handleFStringEnd(); } [^] { return PyTokenTypes.BAD_CHARACTER; } } diff --git a/python/testData/psi/UnterminatedFStringWithTrailingBackslashInFormatPart.txt b/python/testData/psi/UnterminatedFStringWithTrailingBackslashInFormatPart.txt index 787500671d2f..2e581960c94e 100644 --- a/python/testData/psi/UnterminatedFStringWithTrailingBackslashInFormatPart.txt +++ b/python/testData/psi/UnterminatedFStringWithTrailingBackslashInFormatPart.txt @@ -5,7 +5,7 @@ PyFile:UnterminatedFStringWithTrailingBackslashInFormatPart.py PsiWhiteSpace(' ') PsiElement(Py:EQ)('=') PsiWhiteSpace(' ') - PyStringLiteralExpression: {42: + PyStringLiteralExpression: {42:\ PyFormattedStringNode PsiElement(Py:FSTRING_START)('f'') PyFStringFragment @@ -14,8 +14,8 @@ PyFile:UnterminatedFStringWithTrailingBackslashInFormatPart.py PsiElement(Py:INTEGER_LITERAL)('42') PyFStringFragmentFormatPart PsiElement(Py:FSTRING_FRAGMENT_FORMAT_START)(':') + PsiElement(Py:FSTRING_TEXT)('\') PsiErrorElement:} expected - PsiElement(BAD_CHARACTER)('\') - PsiErrorElement:Statement expected, found BAD_CHARACTER - \ No newline at end of file + PsiErrorElement:' expected + \ No newline at end of file diff --git a/python/testData/psi/UnterminatedFStringWithTrailingBackslashInLiteralPart.txt b/python/testData/psi/UnterminatedFStringWithTrailingBackslashInLiteralPart.txt index d437bd86c2aa..869c9fc5b1e0 100644 --- a/python/testData/psi/UnterminatedFStringWithTrailingBackslashInLiteralPart.txt +++ b/python/testData/psi/UnterminatedFStringWithTrailingBackslashInLiteralPart.txt @@ -5,11 +5,9 @@ PyFile:UnterminatedFStringWithTrailingBackslashInLiteralPart.py PsiWhiteSpace(' ') PsiElement(Py:EQ)('=') PsiWhiteSpace(' ') - PyStringLiteralExpression: + PyStringLiteralExpression: \ PyFormattedStringNode PsiElement(Py:FSTRING_START)('f'') - PsiErrorElement:unexpected f-string token - - PsiElement(BAD_CHARACTER)('\') - PsiErrorElement:Statement expected, found BAD_CHARACTER - \ No newline at end of file + PsiElement(Py:FSTRING_TEXT)('\') + PsiErrorElement:' expected + \ No newline at end of file