From 12ce28e26562c680bf2ae631c8c6135370222bbb Mon Sep 17 00:00:00 2001 From: Simon Wisselink Date: Sun, 15 Feb 2026 14:44:48 +0100 Subject: Regex matches operator (#1169) * Regex matches operator support --- src/Lexer/TemplateLexer.php | 82 +- src/Lexer/TemplateLexer.plex | 5 + src/Parser/TemplateParser.php | 2251 ++++++++++---------- src/Parser/TemplateParser.y | 9 + .../ValueTests/Operators/MatchesOperatorTest.php | 118 + 5 files changed, 1327 insertions(+), 1138 deletions(-) create mode 100644 tests/UnitTests/TemplateSource/ValueTests/Operators/MatchesOperatorTest.php diff --git a/src/Lexer/TemplateLexer.php b/src/Lexer/TemplateLexer.php index 2e7f3305..8c28448e 100644 --- a/src/Lexer/TemplateLexer.php +++ b/src/Lexer/TemplateLexer.php @@ -160,6 +160,7 @@ class TemplateLexer 'LOGOP' => '"<", "==" ... logical operator', 'TLOGOP' => '"lt", "eq" ... logical operator; "is div by" ... if condition', 'SCOND' => '"is even" ... if condition', + 'MATCHES' => '"matches" regex operator', ); /** @@ -567,7 +568,7 @@ class TemplateLexer public function yylex3() { if (!isset($this->yy_global_pattern3)) { - $this->yy_global_pattern3 = $this->replace("/\G(\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal)|\G([\"])|\G('[^'\\\\]*(?:\\\\.[^'\\\\]*)*')|\G([$][0-9]*[a-zA-Z_]\\w*)|\G([$])|\G(\\s+is\\s+(not\\s+)?in\\s+)|\G(\\s+as\\s+)|\G(\\s+to\\s+)|\G(\\s+step\\s+)|\G(\\s+instanceof\\s+)|\G(\\s*([!=][=]{1,2}|[<][=>]?|[>][=]?|[&|]{2})\\s*)|\G(\\s+(eq|ne|neq|gt|ge|gte|lt|le|lte|mod|and|or|xor)\\s+)|\G(\\s+is\\s+(not\\s+)?(odd|even|div)\\s+by\\s+)|\G(\\s+is\\s+(not\\s+)?(odd|even))|\G([!]\\s*|not\\s+)|\G([(](int(eger)?|bool(ean)?|float|double|real|string|binary|array|object)[)]\\s*)|\G(\\s*[(]\\s*)|\G(\\s*[)])|\G(\\[\\s*)|\G(\\s*\\])|\G(\\s*[-][>]\\s*)|\G(\\s*[=][>]\\s*)|\G(\\s*[=]\\s*)|\G(([+]|[-]){2})|\G(\\s*([+]|[-])\\s*)|\G(\\s*([*]{1,2}|[%\/^&]|[<>]{2})\\s*)|\G([@])|\G(array\\s*[(]\\s*)|\G([#])|\G(\\s+[0-9]*[a-zA-Z_][a-zA-Z0-9_\-:]*\\s*[=]\\s*)|\G(([0-9]*[a-zA-Z_]\\w*)?(\\\\[0-9]*[a-zA-Z_]\\w*)+)|\G([0-9]*[a-zA-Z_]\\w*)|\G(\\d+)|\G([`])|\G([|][@]?)|\G([.])|\G(\\s*[,]\\s*)|\G(\\s*[;]\\s*)|\G([:]{2})|\G(\\s*[:]\\s*)|\G(\\s*[?]\\s*)|\G(0[xX][0-9a-fA-F]+)|\G(\\s+)|\G([\S\s])/isS"); + $this->yy_global_pattern3 = $this->replace("/\G(\\s*SMARTYrdel)|\G((SMARTYldel)SMARTYal)|\G([\"])|\G('[^'\\\\]*(?:\\\\.[^'\\\\]*)*')|\G([$][0-9]*[a-zA-Z_]\\w*)|\G([$])|\G(\\s+is\\s+(not\\s+)?in\\s+)|\G(\\s+matches\\s+)|\G(\\s+as\\s+)|\G(\\s+to\\s+)|\G(\\s+step\\s+)|\G(\\s+instanceof\\s+)|\G(\\s*([!=][=]{1,2}|[<][=>]?|[>][=]?|[&|]{2})\\s*)|\G(\\s+(eq|ne|neq|gt|ge|gte|lt|le|lte|mod|and|or|xor)\\s+)|\G(\\s+is\\s+(not\\s+)?(odd|even|div)\\s+by\\s+)|\G(\\s+is\\s+(not\\s+)?(odd|even))|\G([!]\\s*|not\\s+)|\G([(](int(eger)?|bool(ean)?|float|double|real|string|binary|array|object)[)]\\s*)|\G(\\s*[(]\\s*)|\G(\\s*[)])|\G(\\[\\s*)|\G(\\s*\\])|\G(\\s*[-][>]\\s*)|\G(\\s*[=][>]\\s*)|\G(\\s*[=]\\s*)|\G(([+]|[-]){2})|\G(\\s*([+]|[-])\\s*)|\G(\\s*([*]{1,2}|[%\/^&]|[<>]{2})\\s*)|\G([@])|\G(array\\s*[(]\\s*)|\G([#])|\G(\\s+[0-9]*[a-zA-Z_][a-zA-Z0-9_\-:]*\\s*[=]\\s*)|\G(([0-9]*[a-zA-Z_]\\w*)?(\\\\[0-9]*[a-zA-Z_]\\w*)+)|\G([0-9]*[a-zA-Z_]\\w*)|\G(\\d+)|\G([`])|\G([|][@]?)|\G([.])|\G(\\s*[,]\\s*)|\G(\\s*[;]\\s*)|\G([:]{2})|\G(\\s*[:]\\s*)|\G(\\s*[?]\\s*)|\G(0[xX][0-9a-fA-F]+)|\G(\\s+)|\G([\S\s])/isS"); } if (!isset($this->dataLength)) { $this->dataLength = strlen($this->data); @@ -662,119 +663,124 @@ class TemplateLexer public function yy_r3_10() { - $this->token = \Smarty\Parser\TemplateParser::TP_AS; + $this->token = \Smarty\Parser\TemplateParser::TP_MATCHES; } public function yy_r3_11() { - $this->token = \Smarty\Parser\TemplateParser::TP_TO; + $this->token = \Smarty\Parser\TemplateParser::TP_AS; } public function yy_r3_12() { - $this->token = \Smarty\Parser\TemplateParser::TP_STEP; + $this->token = \Smarty\Parser\TemplateParser::TP_TO; } public function yy_r3_13() { - $this->token = \Smarty\Parser\TemplateParser::TP_INSTANCEOF; + $this->token = \Smarty\Parser\TemplateParser::TP_STEP; } public function yy_r3_14() + { + + $this->token = \Smarty\Parser\TemplateParser::TP_INSTANCEOF; + } + public function yy_r3_15() { $this->token = \Smarty\Parser\TemplateParser::TP_LOGOP; } - public function yy_r3_16() + public function yy_r3_17() { $this->token = \Smarty\Parser\TemplateParser::TP_SLOGOP; } - public function yy_r3_18() + public function yy_r3_19() { $this->token = \Smarty\Parser\TemplateParser::TP_TLOGOP; } - public function yy_r3_21() + public function yy_r3_22() { $this->token = \Smarty\Parser\TemplateParser::TP_SINGLECOND; } - public function yy_r3_24() + public function yy_r3_25() { $this->token = \Smarty\Parser\TemplateParser::TP_NOT; } - public function yy_r3_25() + public function yy_r3_26() { $this->token = \Smarty\Parser\TemplateParser::TP_TYPECAST; } - public function yy_r3_29() + public function yy_r3_30() { $this->token = \Smarty\Parser\TemplateParser::TP_OPENP; } - public function yy_r3_30() + public function yy_r3_31() { $this->token = \Smarty\Parser\TemplateParser::TP_CLOSEP; } - public function yy_r3_31() + public function yy_r3_32() { $this->token = \Smarty\Parser\TemplateParser::TP_OPENB; } - public function yy_r3_32() + public function yy_r3_33() { $this->token = \Smarty\Parser\TemplateParser::TP_CLOSEB; } - public function yy_r3_33() + public function yy_r3_34() { $this->token = \Smarty\Parser\TemplateParser::TP_PTR; } - public function yy_r3_34() + public function yy_r3_35() { $this->token = \Smarty\Parser\TemplateParser::TP_APTR; } - public function yy_r3_35() + public function yy_r3_36() { $this->token = \Smarty\Parser\TemplateParser::TP_EQUAL; } - public function yy_r3_36() + public function yy_r3_37() { $this->token = \Smarty\Parser\TemplateParser::TP_INCDEC; } - public function yy_r3_38() + public function yy_r3_39() { $this->token = \Smarty\Parser\TemplateParser::TP_UNIMATH; } - public function yy_r3_40() + public function yy_r3_41() { $this->token = \Smarty\Parser\TemplateParser::TP_MATH; } - public function yy_r3_42() + public function yy_r3_43() { $this->token = \Smarty\Parser\TemplateParser::TP_AT; } - public function yy_r3_43() + public function yy_r3_44() { $this->token = \Smarty\Parser\TemplateParser::TP_ARRAYOPEN; } - public function yy_r3_44() + public function yy_r3_45() { $this->token = \Smarty\Parser\TemplateParser::TP_HATCH; } - public function yy_r3_45() + public function yy_r3_46() { // resolve conflicts with shorttag and right_delimiter starting with '=' @@ -786,73 +792,73 @@ class TemplateLexer $this->token = \Smarty\Parser\TemplateParser::TP_ATTR; } } - public function yy_r3_46() + public function yy_r3_47() { $this->token = \Smarty\Parser\TemplateParser::TP_NAMESPACE; } - public function yy_r3_49() + public function yy_r3_50() { $this->token = \Smarty\Parser\TemplateParser::TP_ID; } - public function yy_r3_50() + public function yy_r3_51() { $this->token = \Smarty\Parser\TemplateParser::TP_INTEGER; } - public function yy_r3_51() + public function yy_r3_52() { $this->token = \Smarty\Parser\TemplateParser::TP_BACKTICK; $this->yypopstate(); } - public function yy_r3_52() + public function yy_r3_53() { $this->token = \Smarty\Parser\TemplateParser::TP_VERT; } - public function yy_r3_53() + public function yy_r3_54() { $this->token = \Smarty\Parser\TemplateParser::TP_DOT; } - public function yy_r3_54() + public function yy_r3_55() { $this->token = \Smarty\Parser\TemplateParser::TP_COMMA; } - public function yy_r3_55() + public function yy_r3_56() { $this->token = \Smarty\Parser\TemplateParser::TP_SEMICOLON; } - public function yy_r3_56() + public function yy_r3_57() { $this->token = \Smarty\Parser\TemplateParser::TP_DOUBLECOLON; } - public function yy_r3_57() + public function yy_r3_58() { $this->token = \Smarty\Parser\TemplateParser::TP_COLON; } - public function yy_r3_58() + public function yy_r3_59() { $this->token = \Smarty\Parser\TemplateParser::TP_QMARK; } - public function yy_r3_59() + public function yy_r3_60() { $this->token = \Smarty\Parser\TemplateParser::TP_HEX; } - public function yy_r3_60() + public function yy_r3_61() { $this->token = \Smarty\Parser\TemplateParser::TP_SPACE; } - public function yy_r3_61() + public function yy_r3_62() { $this->token = \Smarty\Parser\TemplateParser::TP_TEXT; diff --git a/src/Lexer/TemplateLexer.plex b/src/Lexer/TemplateLexer.plex index 282a99cf..c3d01600 100644 --- a/src/Lexer/TemplateLexer.plex +++ b/src/Lexer/TemplateLexer.plex @@ -160,6 +160,7 @@ class TemplateLexer 'LOGOP' => '"<", "==" ... logical operator', 'TLOGOP' => '"lt", "eq" ... logical operator; "is div by" ... if condition', 'SCOND' => '"is even" ... if condition', + 'MATCHES' => '"matches" regex operator', ); /** @@ -325,6 +326,7 @@ class TemplateLexer tlop = ~\s+is\s+(not\s+)?(odd|even|div)\s+by\s+~ scond = ~\s+is\s+(not\s+)?(odd|even)~ isin = ~\s+is\s+(not\s+)?in\s+~ + matches = ~\s+matches\s+~ as = ~\s+as\s+~ to = ~\s+to\s+~ step = ~\s+step\s+~ @@ -469,6 +471,9 @@ class TemplateLexer isin { $this->token = \Smarty\Parser\TemplateParser::TP_ISIN; } + matches { + $this->token = \Smarty\Parser\TemplateParser::TP_MATCHES; + } as { $this->token = \Smarty\Parser\TemplateParser::TP_AS; } diff --git a/src/Parser/TemplateParser.php b/src/Parser/TemplateParser.php index 1f47e3d4..4a769ea8 100644 --- a/src/Parser/TemplateParser.php +++ b/src/Parser/TemplateParser.php @@ -260,675 +260,710 @@ class TemplateParser const TP_SLOGOP = 54; const TP_TLOGOP = 55; const TP_SINGLECOND = 56; - const TP_ARRAYOPEN = 57; - const TP_QUOTE = 58; - const TP_BACKTICK = 59; - const YY_NO_ACTION = 546; - const YY_ACCEPT_ACTION = 545; - const YY_ERROR_ACTION = 544; - - const YY_SZ_ACTTAB = 2564; + const TP_MATCHES = 57; + const TP_ARRAYOPEN = 58; + const TP_QUOTE = 59; + const TP_BACKTICK = 60; + const YY_NO_ACTION = 551; + const YY_ACCEPT_ACTION = 550; + const YY_ERROR_ACTION = 549; + + const YY_SZ_ACTTAB = 2726; public static $yy_action = array( - 33, 103, 271, 308, 180, 202, 307, 249, 250, 251, - 1, 266, 139, 202, 204, 363, 6, 87, 248, 224, - 218, 363, 113, 316, 402, 218, 219, 263, 220, 222, - 226, 402, 21, 402, 49, 44, 402, 32, 45, 46, - 280, 228, 402, 284, 402, 205, 402, 53, 4, 140, - 304, 233, 177, 103, 227, 5, 54, 249, 250, 251, - 1, 20, 136, 194, 195, 273, 6, 87, 14, 224, - 312, 29, 113, 231, 15, 160, 219, 263, 220, 141, - 210, 274, 21, 186, 53, 44, 13, 304, 45, 46, - 280, 228, 150, 237, 154, 205, 259, 53, 4, 330, - 304, 304, 258, 255, 144, 5, 54, 249, 250, 251, - 1, 304, 101, 396, 86, 238, 6, 87, 3, 224, - 103, 259, 113, 17, 97, 396, 219, 263, 220, 339, - 226, 396, 21, 153, 448, 44, 202, 40, 45, 46, - 280, 228, 304, 284, 202, 205, 448, 53, 4, 116, - 304, 47, 22, 287, 41, 5, 54, 249, 250, 251, - 1, 140, 138, 269, 204, 513, 6, 87, 14, 224, - 545, 100, 113, 152, 15, 448, 219, 263, 220, 107, - 226, 153, 21, 258, 235, 44, 143, 448, 45, 46, - 280, 228, 327, 284, 270, 205, 53, 53, 4, 304, - 304, 202, 259, 363, 323, 5, 54, 249, 250, 251, - 1, 266, 138, 364, 196, 363, 6, 87, 306, 224, - 103, 363, 113, 145, 304, 364, 219, 263, 220, 202, - 226, 364, 21, 258, 49, 44, 18, 174, 45, 46, - 280, 228, 15, 284, 37, 205, 103, 53, 4, 116, - 304, 179, 159, 307, 259, 5, 54, 249, 250, 251, - 1, 155, 137, 239, 204, 94, 6, 87, 186, 224, - 340, 258, 113, 108, 239, 116, 219, 263, 220, 293, - 226, 240, 11, 259, 108, 44, 142, 286, 45, 46, - 280, 228, 172, 284, 156, 205, 186, 53, 4, 131, - 304, 182, 331, 307, 258, 5, 54, 249, 250, 251, - 1, 157, 138, 266, 191, 95, 6, 87, 26, 224, - 257, 258, 113, 186, 262, 448, 219, 263, 220, 185, - 215, 178, 21, 229, 112, 44, 49, 448, 45, 46, - 280, 228, 148, 284, 158, 205, 186, 53, 4, 90, - 304, 314, 258, 292, 258, 5, 54, 249, 250, 251, - 1, 179, 138, 307, 189, 131, 6, 87, 261, 224, - 175, 19, 113, 147, 168, 260, 219, 263, 220, 185, - 226, 266, 21, 108, 258, 44, 202, 23, 45, 46, - 280, 228, 171, 284, 91, 205, 36, 53, 4, 271, - 304, 186, 258, 161, 49, 5, 54, 249, 250, 251, - 1, 325, 138, 181, 204, 307, 6, 87, 484, 224, - 202, 484, 113, 165, 468, 484, 219, 263, 220, 141, - 190, 468, 21, 216, 199, 44, 13, 337, 45, 46, - 280, 228, 468, 284, 167, 205, 25, 53, 4, 468, - 304, 42, 43, 288, 12, 5, 54, 249, 250, 251, - 1, 28, 140, 183, 204, 247, 6, 87, 295, 296, - 297, 298, 113, 266, 313, 304, 219, 263, 220, 16, - 226, 185, 21, 7, 40, 48, 246, 247, 45, 46, - 280, 228, 96, 284, 8, 205, 49, 53, 4, 265, - 304, 42, 43, 288, 12, 5, 54, 249, 250, 251, - 1, 24, 140, 305, 204, 262, 6, 87, 295, 296, - 297, 298, 113, 316, 448, 218, 219, 263, 220, 92, - 226, 221, 21, 301, 449, 44, 448, 10, 45, 46, - 280, 228, 9, 284, 319, 205, 449, 53, 4, 117, - 304, 130, 35, 9, 234, 5, 54, 290, 217, 218, - 254, 102, 93, 110, 245, 193, 104, 85, 200, 89, - 318, 322, 102, 162, 98, 275, 276, 302, 300, 303, - 227, 252, 283, 206, 285, 34, 291, 99, 302, 300, - 303, 227, 290, 217, 218, 254, 239, 93, 110, 326, - 192, 104, 60, 241, 201, 173, 108, 102, 184, 176, - 275, 276, 130, 163, 253, 268, 114, 283, 206, 285, - 264, 291, 102, 302, 300, 303, 290, 122, 218, 256, - 272, 115, 110, 267, 193, 104, 85, 202, 302, 300, - 303, 102, 202, 261, 275, 276, 19, 279, 227, 398, - 260, 283, 206, 285, 395, 291, 277, 302, 300, 303, - 290, 398, 218, 7, 202, 115, 395, 398, 203, 120, - 72, 450, 395, 450, 261, 102, 367, 19, 275, 276, - 232, 260, 230, 281, 282, 283, 206, 285, 14, 291, - 14, 302, 300, 303, 15, 299, 15, 448, 290, 452, - 218, 452, 88, 115, 209, 321, 203, 120, 72, 448, - 24, 164, 332, 102, 236, 328, 275, 276, 166, 261, - 338, 329, 19, 283, 206, 285, 260, 291, 37, 302, - 300, 303, 484, 38, 341, 484, 290, 317, 218, 484, - 317, 109, 208, 321, 203, 123, 51, 317, 121, 317, - 317, 102, 317, 317, 275, 276, 317, 317, 223, 317, - 317, 283, 206, 285, 317, 291, 317, 302, 300, 303, - 290, 484, 218, 317, 317, 115, 317, 317, 203, 123, - 67, 317, 317, 317, 317, 102, 317, 317, 275, 276, - 317, 317, 317, 317, 317, 283, 206, 285, 317, 291, - 317, 302, 300, 303, 290, 317, 218, 317, 317, 115, - 317, 214, 203, 123, 67, 317, 317, 317, 317, 102, - 317, 317, 275, 276, 317, 317, 317, 317, 317, 283, - 206, 285, 317, 291, 317, 302, 300, 303, 290, 317, - 218, 317, 317, 115, 317, 207, 203, 120, 72, 317, - 317, 317, 317, 102, 317, 317, 275, 276, 317, 317, - 317, 317, 317, 283, 206, 285, 317, 291, 317, 302, - 300, 303, 290, 317, 218, 317, 317, 115, 317, 317, - 203, 123, 78, 320, 317, 317, 317, 102, 317, 317, - 275, 276, 317, 317, 317, 317, 317, 283, 206, 285, - 317, 291, 211, 213, 300, 303, 290, 317, 218, 317, - 317, 109, 317, 317, 203, 123, 58, 317, 240, 317, - 317, 102, 317, 317, 275, 276, 317, 317, 317, 317, - 317, 283, 206, 285, 317, 291, 317, 302, 300, 303, - 290, 317, 218, 317, 317, 115, 317, 317, 203, 119, - 64, 317, 317, 317, 317, 102, 317, 317, 275, 276, - 317, 317, 317, 317, 317, 283, 206, 285, 317, 291, - 317, 302, 300, 303, 290, 317, 218, 317, 317, 115, - 317, 317, 198, 118, 59, 317, 317, 317, 317, 102, - 317, 317, 275, 276, 317, 317, 317, 317, 317, 283, - 206, 285, 317, 291, 317, 302, 300, 303, 290, 317, - 218, 317, 317, 115, 317, 317, 203, 105, 84, 317, - 317, 317, 317, 102, 317, 317, 275, 276, 317, 317, - 317, 317, 317, 283, 206, 285, 317, 291, 317, 302, - 300, 303, 290, 317, 218, 317, 317, 115, 317, 317, - 203, 106, 83, 317, 317, 317, 317, 102, 317, 317, - 275, 276, 317, 317, 317, 317, 317, 283, 206, 285, - 317, 291, 317, 302, 300, 303, 290, 317, 218, 317, - 317, 115, 317, 317, 203, 123, 55, 317, 317, 317, - 317, 102, 317, 317, 275, 276, 317, 317, 317, 317, - 317, 283, 206, 285, 317, 291, 317, 302, 300, 303, - 290, 317, 218, 317, 317, 115, 317, 317, 203, 123, - 66, 317, 317, 317, 317, 102, 317, 317, 275, 276, - 317, 317, 317, 317, 317, 283, 206, 285, 317, 291, - 317, 302, 300, 303, 290, 317, 218, 317, 317, 115, - 317, 317, 203, 105, 56, 317, 317, 317, 317, 102, - 317, 317, 275, 276, 317, 317, 317, 317, 317, 283, - 206, 285, 317, 291, 317, 302, 300, 303, 290, 317, - 218, 317, 317, 115, 317, 317, 203, 123, 65, 317, - 317, 317, 317, 102, 317, 317, 275, 276, 317, 317, - 317, 317, 317, 283, 206, 285, 317, 291, 317, 302, - 300, 303, 290, 317, 218, 317, 317, 115, 317, 317, - 203, 123, 57, 317, 317, 317, 317, 102, 317, 317, - 275, 276, 317, 317, 317, 317, 317, 283, 206, 285, - 317, 291, 317, 302, 300, 303, 290, 317, 218, 317, - 317, 115, 317, 317, 203, 123, 58, 317, 317, 317, - 317, 102, 317, 317, 275, 276, 317, 317, 317, 317, - 317, 283, 206, 285, 317, 291, 317, 302, 300, 303, - 290, 317, 218, 317, 317, 115, 317, 317, 203, 123, - 68, 317, 317, 317, 317, 102, 317, 317, 275, 276, - 317, 317, 317, 317, 317, 283, 206, 285, 317, 291, - 317, 302, 300, 303, 290, 317, 218, 317, 317, 115, - 317, 317, 203, 123, 69, 317, 317, 317, 317, 102, - 317, 317, 275, 276, 317, 317, 317, 317, 317, 283, - 206, 285, 317, 291, 317, 302, 300, 303, 290, 317, - 218, 317, 317, 115, 317, 317, 203, 123, 70, 317, - 317, 317, 317, 102, 317, 317, 275, 276, 317, 317, - 317, 317, 317, 283, 206, 285, 317, 291, 317, 302, - 300, 303, 290, 317, 218, 317, 317, 115, 317, 317, - 203, 123, 71, 317, 317, 317, 317, 102, 317, 317, - 275, 276, 317, 317, 317, 317, 317, 283, 206, 285, - 317, 291, 317, 302, 300, 303, 290, 317, 218, 317, - 317, 115, 317, 317, 203, 123, 73, 317, 317, 317, - 317, 102, 317, 317, 275, 276, 317, 317, 317, 317, - 317, 283, 206, 285, 317, 291, 317, 302, 300, 303, - 290, 317, 218, 317, 317, 115, 317, 317, 197, 123, - 61, 317, 317, 317, 317, 102, 317, 317, 275, 276, - 317, 317, 317, 317, 317, 283, 206, 285, 317, 291, - 317, 302, 300, 303, 290, 317, 218, 317, 317, 115, - 317, 317, 203, 123, 62, 317, 317, 317, 317, 102, - 317, 317, 275, 276, 317, 317, 317, 317, 317, 283, - 206, 285, 317, 291, 317, 302, 300, 303, 290, 317, - 218, 317, 317, 115, 317, 317, 203, 123, 63, 317, - 317, 317, 317, 102, 317, 317, 275, 276, 317, 317, - 317, 317, 317, 283, 206, 285, 317, 291, 317, 302, - 300, 303, 290, 317, 218, 317, 317, 115, 317, 317, - 203, 123, 74, 317, 317, 317, 317, 102, 317, 317, - 275, 276, 317, 317, 317, 317, 317, 283, 206, 285, - 317, 291, 317, 302, 300, 303, 290, 317, 218, 317, - 317, 115, 317, 317, 203, 123, 75, 317, 317, 317, - 317, 102, 317, 317, 275, 276, 317, 317, 317, 317, - 317, 283, 206, 285, 317, 291, 317, 302, 300, 303, - 290, 317, 218, 317, 317, 115, 317, 317, 203, 123, - 76, 317, 317, 317, 317, 102, 317, 317, 275, 276, - 317, 317, 317, 317, 317, 283, 206, 285, 317, 291, - 317, 302, 300, 303, 290, 317, 218, 317, 317, 115, - 317, 317, 203, 123, 77, 317, 317, 317, 317, 102, - 317, 317, 275, 276, 317, 317, 317, 317, 317, 283, - 206, 285, 317, 291, 317, 302, 300, 303, 290, 317, - 218, 317, 317, 115, 317, 317, 203, 123, 79, 317, - 317, 317, 317, 102, 317, 317, 275, 276, 317, 317, - 317, 317, 317, 283, 206, 285, 317, 291, 317, 212, - 300, 303, 290, 317, 218, 317, 317, 115, 317, 317, - 203, 123, 80, 317, 317, 317, 317, 102, 317, 317, - 275, 276, 317, 317, 317, 317, 317, 283, 206, 285, - 317, 291, 317, 302, 300, 303, 290, 317, 218, 317, - 317, 115, 317, 317, 203, 123, 81, 317, 317, 317, - 317, 102, 317, 317, 275, 276, 317, 317, 317, 317, - 317, 283, 206, 285, 317, 291, 317, 302, 300, 303, - 290, 317, 218, 317, 317, 115, 317, 317, 203, 123, - 82, 317, 317, 317, 317, 102, 317, 317, 275, 276, - 317, 317, 317, 317, 317, 283, 206, 285, 317, 291, - 317, 302, 300, 303, 290, 317, 218, 317, 317, 115, - 317, 317, 203, 123, 50, 317, 317, 317, 317, 102, - 317, 317, 275, 276, 317, 317, 317, 317, 317, 283, - 206, 285, 317, 291, 317, 302, 300, 303, 290, 317, - 218, 317, 317, 115, 317, 317, 203, 123, 52, 317, - 317, 317, 317, 102, 317, 317, 275, 276, 317, 317, - 317, 317, 317, 283, 206, 285, 317, 291, 317, 302, - 300, 303, 290, 317, 218, 169, 317, 115, 317, 317, - 203, 135, 317, 317, 317, 258, 317, 102, 47, 22, - 287, 41, 317, 317, 317, 317, 335, 283, 206, 285, - 317, 291, 317, 302, 300, 303, 290, 317, 218, 146, - 317, 115, 317, 317, 203, 129, 317, 317, 317, 258, - 317, 102, 47, 22, 287, 41, 317, 317, 317, 317, - 289, 283, 206, 285, 317, 291, 317, 302, 300, 303, - 249, 250, 251, 2, 317, 315, 317, 317, 317, 6, - 87, 317, 317, 317, 317, 113, 317, 14, 317, 219, - 263, 220, 317, 15, 39, 317, 14, 317, 42, 43, - 288, 12, 15, 317, 317, 317, 317, 42, 43, 288, - 12, 317, 317, 317, 317, 295, 296, 297, 298, 310, - 27, 317, 317, 317, 295, 296, 297, 298, 317, 249, - 250, 251, 2, 317, 315, 317, 111, 317, 6, 87, - 317, 317, 317, 317, 113, 317, 317, 149, 219, 263, - 220, 317, 42, 43, 288, 12, 317, 42, 43, 288, - 12, 317, 317, 317, 317, 317, 317, 317, 317, 295, - 296, 297, 298, 317, 295, 296, 297, 298, 311, 27, - 317, 317, 242, 243, 244, 134, 225, 317, 249, 250, - 251, 1, 317, 484, 317, 317, 484, 6, 87, 3, - 484, 468, 317, 113, 317, 278, 317, 219, 263, 220, - 290, 317, 218, 317, 317, 115, 317, 317, 203, 133, - 317, 317, 317, 317, 317, 102, 317, 468, 317, 317, - 468, 317, 484, 317, 468, 283, 206, 285, 317, 291, - 317, 302, 300, 303, 317, 290, 317, 218, 170, 317, - 115, 317, 317, 203, 124, 317, 317, 317, 258, 317, - 102, 47, 22, 287, 41, 317, 317, 317, 317, 317, - 283, 206, 285, 317, 291, 317, 302, 300, 303, 317, - 317, 290, 317, 218, 317, 317, 115, 317, 317, 203, - 125, 317, 317, 317, 317, 317, 102, 317, 317, 317, - 317, 317, 317, 317, 317, 317, 283, 206, 285, 317, - 291, 317, 302, 300, 303, 317, 290, 317, 218, 317, - 317, 115, 317, 317, 203, 126, 317, 317, 317, 317, - 317, 102, 317, 317, 317, 317, 317, 317, 317, 317, - 317, 283, 206, 285, 317, 291, 317, 302, 300, 303, - 317, 317, 290, 317, 218, 317, 317, 115, 317, 317, - 203, 127, 317, 317, 317, 317, 317, 102, 317, 317, - 317, 317, 317, 317, 317, 317, 317, 283, 206, 285, - 317, 291, 317, 302, 300, 303, 317, 290, 317, 218, - 317, 317, 115, 317, 317, 203, 128, 317, 317, 317, - 317, 317, 102, 317, 317, 317, 317, 317, 317, 317, - 317, 317, 283, 206, 285, 317, 291, 317, 302, 300, - 303, 317, 317, 290, 317, 218, 225, 317, 115, 317, - 317, 203, 132, 484, 317, 317, 484, 317, 102, 317, - 484, 468, 317, 317, 317, 278, 317, 317, 283, 206, - 285, 317, 291, 317, 302, 300, 303, 317, 317, 411, - 317, 317, 317, 317, 317, 317, 317, 468, 317, 317, - 468, 317, 484, 225, 468, 294, 317, 317, 317, 317, - 484, 317, 317, 484, 317, 317, 36, 484, 468, 317, - 225, 448, 278, 411, 411, 411, 411, 484, 317, 317, - 484, 317, 317, 448, 484, 468, 317, 317, 30, 278, - 411, 411, 411, 411, 468, 484, 317, 468, 484, 484, - 317, 468, 484, 468, 317, 317, 317, 278, 317, 317, - 317, 468, 317, 317, 468, 334, 484, 317, 468, 317, - 317, 317, 317, 317, 333, 42, 43, 288, 12, 468, - 317, 317, 468, 317, 484, 317, 468, 317, 42, 43, - 288, 12, 295, 296, 297, 298, 309, 317, 42, 43, - 288, 12, 187, 317, 317, 295, 296, 297, 298, 188, - 317, 317, 317, 324, 317, 295, 296, 297, 298, 42, - 43, 288, 12, 31, 317, 42, 43, 288, 12, 317, - 336, 317, 42, 43, 288, 12, 295, 296, 297, 298, - 317, 317, 295, 296, 297, 298, 317, 317, 317, 295, - 296, 297, 298, 42, 43, 288, 12, 42, 43, 288, - 12, 484, 317, 317, 484, 317, 317, 317, 484, 468, - 295, 296, 297, 298, 295, 296, 297, 298, 317, 317, - 317, 261, 317, 317, 19, 317, 317, 317, 260, 317, - 317, 317, 317, 317, 317, 468, 317, 14, 468, 151, - 484, 317, 468, 15, + 31, 47, 22, 289, 41, 14, 48, 251, 252, 253, + 1, 15, 141, 241, 206, 204, 6, 88, 204, 226, + 243, 203, 114, 109, 405, 204, 221, 265, 222, 104, + 228, 405, 21, 405, 224, 44, 405, 30, 45, 46, + 282, 230, 405, 286, 405, 207, 405, 54, 4, 14, + 302, 184, 334, 310, 229, 15, 5, 86, 251, 252, + 253, 1, 104, 138, 399, 197, 240, 6, 88, 517, + 226, 550, 101, 114, 152, 257, 399, 221, 265, 222, + 143, 212, 399, 21, 260, 452, 44, 13, 143, 45, + 46, 282, 230, 204, 239, 13, 207, 452, 54, 4, + 333, 302, 204, 40, 261, 367, 155, 5, 86, 251, + 252, 253, 1, 142, 102, 271, 87, 367, 6, 88, + 309, 226, 155, 367, 114, 319, 16, 220, 221, 265, + 222, 273, 228, 182, 21, 310, 142, 44, 235, 97, + 45, 46, 282, 230, 174, 286, 272, 207, 54, 54, + 4, 302, 302, 250, 181, 220, 310, 179, 5, 86, + 251, 252, 253, 1, 20, 140, 196, 206, 275, 6, + 88, 54, 226, 315, 302, 114, 188, 264, 452, 221, + 265, 222, 204, 228, 276, 21, 146, 237, 44, 188, + 452, 45, 46, 282, 230, 330, 286, 3, 207, 104, + 54, 4, 145, 302, 302, 288, 98, 311, 25, 5, + 86, 251, 252, 253, 1, 268, 140, 133, 198, 366, + 6, 88, 26, 226, 302, 366, 114, 108, 117, 452, + 221, 265, 222, 33, 228, 233, 21, 162, 53, 44, + 302, 452, 45, 46, 282, 230, 104, 286, 37, 207, + 104, 54, 4, 326, 302, 156, 204, 261, 366, 144, + 5, 86, 251, 252, 253, 1, 268, 139, 401, 206, + 366, 6, 88, 302, 226, 117, 366, 114, 154, 117, + 401, 221, 265, 222, 259, 228, 401, 11, 260, 53, + 44, 204, 24, 45, 46, 282, 230, 204, 286, 161, + 207, 261, 54, 4, 181, 302, 310, 158, 261, 398, + 261, 5, 86, 251, 252, 253, 1, 260, 140, 160, + 193, 398, 6, 88, 36, 226, 273, 398, 114, 260, + 241, 113, 221, 265, 222, 91, 217, 343, 21, 340, + 109, 44, 18, 187, 45, 46, 282, 230, 15, 286, + 241, 207, 472, 54, 4, 187, 302, 242, 268, 472, + 109, 176, 5, 86, 251, 252, 253, 1, 32, 140, + 147, 191, 92, 6, 88, 263, 226, 302, 19, 114, + 260, 53, 262, 221, 265, 222, 163, 228, 328, 21, + 7, 149, 44, 188, 204, 45, 46, 282, 230, 150, + 286, 109, 207, 167, 54, 4, 268, 302, 180, 260, + 231, 170, 472, 5, 86, 251, 252, 253, 1, 472, + 140, 260, 206, 9, 6, 88, 183, 226, 310, 53, + 114, 319, 169, 220, 221, 265, 222, 185, 192, 249, + 21, 325, 294, 44, 295, 317, 45, 46, 282, 230, + 173, 286, 187, 207, 133, 54, 4, 34, 302, 100, + 260, 177, 218, 201, 5, 86, 251, 252, 253, 1, + 23, 142, 303, 206, 40, 6, 88, 488, 90, 321, + 488, 114, 17, 264, 488, 221, 265, 222, 342, 228, + 268, 21, 8, 188, 49, 248, 249, 45, 46, 282, + 230, 267, 286, 9, 207, 322, 54, 4, 93, 302, + 299, 452, 454, 53, 454, 5, 86, 251, 252, 253, + 1, 202, 142, 452, 206, 157, 6, 88, 456, 95, + 456, 453, 114, 223, 10, 260, 221, 265, 222, 229, + 228, 99, 21, 453, 175, 44, 118, 329, 45, 46, + 282, 230, 23, 286, 335, 207, 178, 54, 4, 247, + 302, 188, 164, 35, 165, 186, 5, 86, 254, 292, + 219, 220, 256, 255, 94, 111, 279, 195, 105, 85, + 115, 266, 123, 274, 103, 281, 229, 277, 278, 283, + 159, 229, 7, 284, 96, 285, 208, 287, 297, 293, + 260, 300, 298, 301, 292, 219, 220, 256, 89, 94, + 111, 238, 194, 105, 60, 341, 37, 166, 344, 103, + 168, 331, 277, 278, 38, 332, 188, 321, 321, 321, + 285, 208, 287, 321, 293, 321, 300, 298, 301, 292, + 321, 220, 258, 321, 116, 111, 321, 195, 105, 85, + 321, 321, 263, 321, 103, 19, 321, 277, 278, 262, + 321, 321, 321, 321, 321, 285, 208, 287, 321, 293, + 321, 300, 298, 301, 292, 321, 220, 321, 112, 116, + 321, 321, 205, 121, 72, 321, 321, 321, 321, 103, + 321, 232, 277, 278, 42, 43, 290, 12, 321, 321, + 285, 208, 287, 321, 293, 321, 300, 298, 301, 321, + 321, 304, 305, 306, 307, 308, 292, 321, 220, 211, + 324, 116, 321, 321, 205, 121, 72, 14, 321, 488, + 321, 103, 488, 15, 277, 278, 488, 472, 42, 43, + 290, 12, 285, 208, 287, 321, 293, 321, 300, 298, + 301, 321, 321, 321, 321, 304, 305, 306, 307, 308, + 321, 210, 324, 472, 321, 321, 472, 292, 488, 220, + 472, 321, 110, 321, 321, 205, 124, 51, 321, 122, + 263, 321, 103, 19, 321, 277, 278, 262, 321, 321, + 321, 321, 321, 285, 208, 287, 321, 293, 321, 300, + 298, 301, 292, 321, 220, 321, 321, 116, 321, 321, + 205, 124, 67, 132, 321, 321, 236, 103, 321, 225, + 277, 278, 321, 103, 321, 321, 321, 321, 285, 208, + 287, 321, 293, 321, 300, 298, 301, 321, 321, 321, + 300, 298, 301, 292, 216, 220, 321, 321, 116, 321, + 321, 205, 124, 67, 321, 321, 321, 321, 103, 321, + 321, 277, 278, 321, 321, 321, 321, 321, 321, 285, + 208, 287, 321, 293, 321, 300, 298, 301, 292, 321, + 220, 321, 321, 116, 321, 209, 205, 121, 72, 321, + 321, 321, 321, 103, 321, 488, 277, 278, 488, 321, + 321, 321, 488, 321, 285, 208, 287, 321, 293, 321, + 300, 298, 301, 321, 321, 321, 321, 321, 292, 321, + 220, 321, 321, 116, 323, 321, 205, 124, 78, 321, + 321, 321, 321, 103, 488, 321, 277, 278, 321, 321, + 321, 321, 321, 321, 285, 208, 287, 321, 293, 213, + 215, 298, 301, 292, 321, 220, 321, 321, 110, 321, + 321, 205, 124, 58, 321, 242, 321, 321, 103, 321, + 321, 277, 278, 321, 321, 263, 321, 321, 19, 285, + 208, 287, 262, 293, 321, 300, 298, 301, 321, 321, + 292, 14, 220, 153, 321, 116, 321, 15, 205, 120, + 62, 321, 321, 321, 321, 103, 321, 321, 277, 278, + 321, 321, 321, 321, 321, 321, 285, 208, 287, 321, + 293, 321, 300, 298, 301, 292, 321, 220, 321, 321, + 116, 321, 321, 200, 119, 59, 321, 321, 321, 321, + 103, 321, 321, 277, 278, 321, 321, 321, 321, 321, + 321, 285, 208, 287, 321, 293, 321, 300, 298, 301, + 321, 321, 292, 321, 220, 321, 321, 116, 321, 321, + 205, 106, 84, 321, 321, 321, 321, 103, 321, 321, + 277, 278, 321, 321, 321, 321, 321, 321, 285, 208, + 287, 321, 293, 321, 300, 298, 301, 292, 321, 220, + 321, 321, 116, 321, 321, 205, 107, 83, 321, 321, + 321, 321, 103, 321, 321, 277, 278, 321, 321, 321, + 321, 321, 321, 285, 208, 287, 321, 293, 321, 300, + 298, 301, 321, 321, 292, 321, 220, 321, 321, 116, + 321, 321, 205, 124, 55, 321, 321, 321, 321, 103, + 321, 321, 277, 278, 321, 321, 321, 321, 321, 321, + 285, 208, 287, 321, 293, 321, 300, 298, 301, 292, + 321, 220, 321, 321, 116, 321, 321, 205, 124, 66, + 321, 321, 321, 321, 103, 321, 321, 277, 278, 321, + 321, 321, 321, 321, 321, 285, 208, 287, 321, 293, + 321, 300, 298, 301, 321, 321, 292, 321, 220, 321, + 321, 116, 321, 321, 205, 106, 56, 321, 321, 321, + 321, 103, 321, 321, 277, 278, 321, 321, 321, 321, + 321, 321, 285, 208, 287, 321, 293, 321, 300, 298, + 301, 292, 321, 220, 321, 321, 116, 321, 321, 205, + 124, 65, 321, 321, 321, 321, 103, 321, 321, 277, + 278, 321, 321, 321, 321, 321, 321, 285, 208, 287, + 321, 293, 321, 300, 298, 301, 321, 321, 292, 321, + 220, 321, 321, 116, 321, 321, 205, 124, 57, 321, + 321, 321, 321, 103, 321, 321, 277, 278, 321, 321, + 321, 321, 321, 321, 285, 208, 287, 321, 293, 321, + 300, 298, 301, 292, 321, 220, 321, 321, 116, 321, + 321, 205, 124, 58, 321, 321, 321, 321, 103, 321, + 321, 277, 278, 321, 321, 321, 321, 321, 321, 285, + 208, 287, 321, 293, 321, 300, 298, 301, 321, 321, + 292, 321, 220, 321, 321, 116, 321, 321, 205, 124, + 68, 321, 321, 321, 321, 103, 321, 321, 277, 278, + 321, 321, 321, 321, 321, 321, 285, 208, 287, 321, + 293, 321, 300, 298, 301, 292, 321, 220, 321, 321, + 116, 321, 321, 205, 124, 69, 321, 321, 321, 321, + 103, 321, 321, 277, 278, 321, 321, 321, 321, 321, + 321, 285, 208, 287, 321, 293, 321, 300, 298, 301, + 321, 321, 292, 321, 220, 321, 321, 116, 321, 321, + 205, 124, 70, 321, 321, 321, 321, 103, 321, 321, + 277, 278, 321, 321, 321, 321, 321, 321, 285, 208, + 287, 321, 293, 321, 300, 298, 301, 292, 321, 220, + 321, 321, 116, 321, 321, 205, 124, 71, 321, 321, + 321, 321, 103, 321, 321, 277, 278, 321, 321, 321, + 321, 321, 321, 285, 208, 287, 321, 293, 321, 300, + 298, 301, 321, 321, 292, 321, 220, 321, 321, 116, + 321, 321, 205, 124, 73, 321, 321, 321, 321, 103, + 321, 321, 277, 278, 321, 321, 321, 321, 321, 321, + 285, 208, 287, 321, 293, 321, 300, 298, 301, 292, + 321, 220, 321, 321, 116, 321, 321, 199, 124, 61, + 321, 321, 321, 321, 103, 321, 321, 277, 278, 321, + 321, 321, 321, 321, 321, 285, 208, 287, 321, 293, + 321, 300, 298, 301, 321, 321, 292, 321, 220, 321, + 321, 116, 321, 321, 205, 124, 74, 321, 321, 321, + 321, 103, 321, 321, 277, 278, 321, 321, 321, 321, + 321, 321, 285, 208, 287, 321, 293, 321, 300, 298, + 301, 292, 321, 220, 321, 321, 116, 321, 321, 205, + 124, 75, 321, 321, 321, 321, 103, 321, 321, 277, + 278, 321, 321, 321, 321, 321, 321, 285, 208, 287, + 321, 293, 321, 300, 298, 301, 321, 321, 292, 321, + 220, 321, 321, 116, 321, 321, 205, 124, 76, 321, + 321, 321, 321, 103, 321, 321, 277, 278, 321, 321, + 321, 321, 321, 321, 285, 208, 287, 321, 293, 321, + 300, 298, 301, 292, 321, 220, 321, 321, 116, 321, + 321, 205, 124, 77, 321, 321, 321, 321, 103, 321, + 321, 277, 278, 321, 321, 321, 321, 321, 321, 285, + 208, 287, 321, 293, 321, 300, 298, 301, 321, 321, + 292, 321, 220, 321, 321, 116, 321, 321, 205, 124, + 63, 321, 321, 321, 321, 103, 321, 321, 277, 278, + 321, 321, 321, 321, 321, 321, 285, 208, 287, 321, + 293, 321, 300, 298, 301, 292, 321, 220, 321, 321, + 116, 321, 321, 205, 124, 64, 321, 321, 321, 321, + 103, 321, 321, 277, 278, 321, 321, 321, 321, 321, + 321, 285, 208, 287, 321, 293, 321, 300, 298, 301, + 321, 321, 292, 321, 220, 321, 321, 116, 321, 321, + 205, 124, 79, 321, 321, 321, 321, 103, 321, 321, + 277, 278, 321, 321, 321, 321, 321, 321, 285, 208, + 287, 321, 293, 321, 214, 298, 301, 292, 321, 220, + 321, 321, 116, 321, 321, 205, 124, 80, 321, 321, + 321, 321, 103, 321, 321, 277, 278, 321, 321, 321, + 321, 321, 321, 285, 208, 287, 321, 293, 321, 300, + 298, 301, 321, 321, 292, 321, 220, 321, 321, 116, + 321, 321, 205, 124, 81, 321, 321, 321, 321, 103, + 321, 321, 277, 278, 321, 321, 321, 321, 321, 321, + 285, 208, 287, 321, 293, 321, 300, 298, 301, 292, + 321, 220, 321, 321, 116, 321, 321, 205, 124, 82, + 321, 321, 321, 321, 103, 321, 321, 277, 278, 321, + 321, 321, 321, 321, 321, 285, 208, 287, 321, 293, + 321, 300, 298, 301, 321, 321, 292, 321, 220, 321, + 321, 116, 321, 321, 205, 124, 50, 321, 321, 321, + 321, 103, 321, 321, 277, 278, 321, 321, 321, 321, + 321, 321, 285, 208, 287, 321, 293, 321, 300, 298, + 301, 292, 321, 220, 321, 321, 116, 321, 321, 205, + 124, 52, 321, 321, 321, 321, 103, 321, 321, 277, + 278, 321, 321, 321, 321, 321, 321, 285, 208, 287, + 321, 293, 321, 300, 298, 301, 321, 321, 292, 321, + 220, 321, 321, 116, 321, 321, 205, 137, 321, 321, + 321, 321, 292, 103, 220, 321, 321, 116, 321, 321, + 205, 130, 338, 321, 285, 208, 287, 103, 293, 321, + 300, 298, 301, 321, 321, 321, 291, 321, 285, 208, + 287, 321, 293, 320, 300, 298, 301, 321, 321, 251, + 252, 253, 2, 321, 318, 321, 321, 321, 6, 88, + 321, 321, 321, 321, 114, 321, 321, 151, 221, 265, + 222, 321, 321, 321, 39, 321, 14, 42, 43, 290, + 12, 321, 15, 321, 321, 321, 321, 42, 43, 290, + 12, 321, 321, 321, 304, 305, 306, 307, 308, 313, + 27, 321, 321, 320, 304, 305, 306, 307, 308, 251, + 252, 253, 2, 321, 318, 321, 321, 321, 6, 88, + 263, 321, 321, 19, 114, 321, 321, 262, 221, 265, + 222, 336, 42, 43, 290, 12, 14, 42, 43, 290, + 12, 321, 15, 321, 321, 321, 321, 321, 321, 304, + 305, 306, 307, 308, 304, 305, 306, 307, 308, 314, + 27, 316, 321, 244, 245, 246, 136, 227, 321, 251, + 252, 253, 1, 321, 488, 321, 321, 488, 6, 88, + 3, 488, 472, 321, 114, 321, 280, 321, 221, 265, + 222, 292, 321, 220, 321, 321, 116, 321, 321, 205, + 135, 321, 321, 321, 321, 321, 103, 321, 472, 321, + 321, 472, 321, 488, 321, 472, 321, 285, 208, 287, + 321, 293, 321, 300, 298, 301, 321, 292, 321, 220, + 171, 321, 116, 321, 321, 205, 125, 321, 321, 321, + 260, 321, 103, 47, 22, 289, 41, 321, 48, 321, + 321, 321, 321, 285, 208, 287, 321, 293, 321, 300, + 298, 301, 321, 292, 321, 220, 321, 148, 116, 321, + 321, 205, 126, 321, 321, 321, 321, 260, 103, 321, + 47, 22, 289, 41, 321, 48, 321, 321, 321, 285, + 208, 287, 321, 293, 321, 300, 298, 301, 321, 292, + 321, 220, 321, 172, 116, 321, 321, 205, 127, 321, + 321, 321, 321, 260, 103, 321, 47, 22, 289, 41, + 132, 48, 321, 270, 321, 285, 208, 287, 321, 293, + 103, 300, 298, 301, 321, 292, 321, 220, 321, 321, + 116, 321, 269, 205, 128, 321, 321, 300, 298, 301, + 103, 321, 321, 321, 321, 321, 321, 321, 321, 321, + 321, 285, 208, 287, 321, 293, 321, 300, 298, 301, + 321, 292, 321, 220, 321, 321, 116, 321, 321, 205, + 129, 321, 321, 321, 321, 321, 103, 321, 321, 321, + 321, 321, 321, 321, 321, 321, 321, 285, 208, 287, + 321, 293, 321, 300, 298, 301, 321, 292, 321, 220, + 321, 321, 116, 321, 204, 205, 131, 321, 321, 321, + 321, 321, 103, 321, 321, 321, 370, 321, 321, 321, + 234, 321, 321, 285, 208, 287, 321, 293, 14, 300, + 298, 301, 321, 292, 15, 220, 414, 452, 116, 321, + 321, 205, 134, 321, 321, 321, 321, 321, 103, 452, + 321, 321, 321, 321, 321, 321, 321, 321, 321, 285, + 208, 287, 321, 293, 321, 300, 298, 301, 452, 321, + 414, 414, 414, 414, 321, 321, 321, 321, 321, 321, + 452, 321, 321, 321, 321, 321, 321, 414, 414, 414, + 414, 414, 227, 321, 321, 321, 321, 321, 321, 488, + 321, 321, 488, 321, 321, 227, 488, 472, 321, 321, + 321, 280, 488, 321, 321, 488, 321, 321, 36, 488, + 472, 321, 321, 321, 280, 321, 321, 321, 321, 321, + 321, 321, 337, 472, 321, 321, 472, 321, 488, 321, + 472, 296, 321, 321, 321, 321, 472, 321, 321, 472, + 321, 488, 321, 472, 29, 42, 43, 290, 12, 321, + 312, 321, 321, 321, 321, 321, 321, 321, 321, 321, + 321, 321, 304, 305, 306, 307, 308, 42, 43, 290, + 12, 321, 321, 42, 43, 290, 12, 189, 42, 43, + 290, 12, 327, 190, 304, 305, 306, 307, 308, 339, + 304, 305, 306, 307, 308, 304, 305, 306, 307, 308, + 42, 43, 290, 12, 321, 321, 42, 43, 290, 12, + 321, 321, 42, 43, 290, 12, 321, 304, 305, 306, + 307, 308, 321, 304, 305, 306, 307, 308, 227, 304, + 305, 306, 307, 308, 28, 488, 321, 321, 488, 321, + 321, 488, 488, 472, 488, 321, 321, 280, 488, 472, + 321, 321, 321, 280, 321, 321, 321, 321, 321, 321, + 321, 321, 321, 321, 321, 321, 321, 321, 321, 472, + 321, 321, 472, 321, 488, 472, 472, 321, 472, 321, + 488, 321, 472, 321, 42, 43, 290, 12, 321, 321, + 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, + 321, 304, 305, 306, 307, 308, ); public static $yy_lookahead = array( - 2, 17, 100, 13, 102, 1, 104, 9, 10, 11, - 12, 21, 14, 1, 16, 25, 18, 19, 65, 21, - 67, 31, 24, 65, 13, 67, 28, 29, 30, 17, - 32, 20, 34, 22, 44, 37, 25, 39, 40, 41, - 42, 43, 31, 45, 33, 47, 35, 49, 50, 14, - 52, 16, 76, 17, 43, 57, 58, 9, 10, 11, - 12, 12, 14, 14, 16, 16, 18, 19, 25, 21, - 112, 12, 24, 14, 31, 16, 28, 29, 30, 43, - 32, 32, 34, 107, 49, 37, 50, 52, 40, 41, - 42, 43, 72, 45, 99, 47, 101, 49, 50, 51, - 52, 52, 82, 69, 14, 57, 58, 9, 10, 11, - 12, 52, 14, 13, 16, 15, 18, 19, 15, 21, - 17, 101, 24, 15, 34, 25, 28, 29, 30, 21, - 32, 31, 34, 99, 34, 37, 1, 2, 40, 41, - 42, 43, 52, 45, 1, 47, 46, 49, 50, 46, - 52, 85, 86, 87, 88, 57, 58, 9, 10, 11, - 12, 14, 14, 16, 16, 1, 18, 19, 25, 21, - 61, 62, 24, 72, 31, 34, 28, 29, 30, 80, - 32, 99, 34, 82, 43, 37, 14, 46, 40, 41, - 42, 43, 51, 45, 47, 47, 49, 49, 50, 52, - 52, 1, 101, 13, 105, 57, 58, 9, 10, 11, - 12, 21, 14, 13, 16, 25, 18, 19, 69, 21, - 17, 31, 24, 72, 52, 25, 28, 29, 30, 1, - 32, 31, 34, 82, 44, 37, 25, 76, 40, 41, - 42, 43, 31, 45, 15, 47, 17, 49, 50, 46, - 52, 102, 99, 104, 101, 57, 58, 9, 10, 11, - 12, 72, 14, 70, 16, 76, 18, 19, 107, 21, - 77, 82, 24, 80, 70, 46, 28, 29, 30, 51, - 32, 77, 34, 101, 80, 37, 80, 93, 40, 41, - 42, 43, 76, 45, 72, 47, 107, 49, 50, 105, - 52, 102, 103, 104, 82, 57, 58, 9, 10, 11, - 12, 72, 14, 21, 16, 76, 18, 19, 27, 21, - 82, 82, 24, 107, 108, 34, 28, 29, 30, 107, - 32, 14, 34, 16, 79, 37, 44, 46, 40, 41, - 42, 43, 72, 45, 72, 47, 107, 49, 50, 80, - 52, 59, 82, 93, 82, 57, 58, 9, 10, 11, - 12, 102, 14, 104, 16, 105, 18, 19, 9, 21, - 76, 12, 24, 70, 72, 16, 28, 29, 30, 107, - 32, 21, 34, 80, 82, 37, 1, 2, 40, 41, - 42, 43, 72, 45, 80, 47, 15, 49, 50, 100, - 52, 107, 82, 99, 44, 57, 58, 9, 10, 11, - 12, 51, 14, 102, 16, 104, 18, 19, 9, 21, - 1, 12, 24, 99, 43, 16, 28, 29, 30, 43, - 32, 50, 34, 63, 64, 37, 50, 14, 40, 41, - 42, 43, 43, 45, 99, 47, 27, 49, 50, 50, - 52, 36, 37, 38, 39, 57, 58, 9, 10, 11, - 12, 12, 14, 6, 16, 8, 18, 19, 53, 54, - 55, 56, 24, 21, 59, 52, 28, 29, 30, 20, - 32, 107, 34, 34, 2, 37, 7, 8, 40, 41, - 42, 43, 33, 45, 34, 47, 44, 49, 50, 16, - 52, 36, 37, 38, 39, 57, 58, 9, 10, 11, - 12, 33, 14, 35, 16, 108, 18, 19, 53, 54, - 55, 56, 24, 65, 34, 67, 28, 29, 30, 99, - 32, 48, 34, 104, 34, 37, 46, 34, 40, 41, - 42, 43, 33, 45, 35, 47, 46, 49, 50, 46, - 52, 70, 15, 33, 73, 57, 58, 65, 66, 67, - 68, 80, 70, 71, 7, 73, 74, 75, 64, 111, - 112, 51, 80, 99, 81, 83, 84, 96, 97, 98, - 43, 13, 90, 91, 92, 33, 94, 35, 96, 97, - 98, 43, 65, 66, 67, 68, 70, 70, 71, 51, - 73, 74, 75, 77, 78, 81, 80, 80, 16, 81, - 83, 84, 70, 99, 13, 73, 16, 90, 91, 92, - 16, 94, 80, 96, 97, 98, 65, 16, 67, 68, - 16, 70, 71, 91, 73, 74, 75, 1, 96, 97, - 98, 80, 1, 9, 83, 84, 12, 16, 43, 13, - 16, 90, 91, 92, 13, 94, 14, 96, 97, 98, - 65, 25, 67, 34, 1, 70, 25, 31, 73, 74, - 75, 33, 31, 35, 9, 80, 13, 12, 83, 84, - 17, 16, 48, 32, 32, 90, 91, 92, 25, 94, - 25, 96, 97, 98, 31, 16, 31, 34, 65, 33, - 67, 35, 16, 70, 109, 110, 73, 74, 75, 46, - 33, 49, 35, 80, 16, 51, 83, 84, 49, 9, - 16, 51, 12, 90, 91, 92, 16, 94, 15, 96, - 97, 98, 9, 22, 35, 12, 65, 113, 67, 16, - 113, 70, 109, 110, 73, 74, 75, 113, 77, 113, - 113, 80, 113, 113, 83, 84, 113, 113, 48, 113, - 113, 90, 91, 92, 113, 94, 113, 96, 97, 98, - 65, 48, 67, 113, 113, 70, 113, 113, 73, 74, - 75, 113, 113, 113, 113, 80, 113, 113, 83, 84, - 113, 113, 113, 113, 113, 90, 91, 92, 113, 94, - 113, 96, 97, 98, 65, 113, 67, 113, 113, 70, - 113, 106, 73, 74, 75, 113, 113, 113, 113, 80, - 113, 113, 83, 84, 113, 113, 113, 113, 113, 90, - 91, 92, 113, 94, 113, 96, 97, 98, 65, 113, - 67, 113, 113, 70, 113, 106, 73, 74, 75, 113, - 113, 113, 113, 80, 113, 113, 83, 84, 113, 113, - 113, 113, 113, 90, 91, 92, 113, 94, 113, 96, - 97, 98, 65, 113, 67, 113, 113, 70, 113, 113, - 73, 74, 75, 110, 113, 113, 113, 80, 113, 113, - 83, 84, 113, 113, 113, 113, 113, 90, 91, 92, - 113, 94, 95, 96, 97, 98, 65, 113, 67, 113, - 113, 70, 113, 113, 73, 74, 75, 113, 77, 113, - 113, 80, 113, 113, 83, 84, 113, 113, 113, 113, - 113, 90, 91, 92, 113, 94, 113, 96, 97, 98, - 65, 113, 67, 113, 113, 70, 113, 113, 73, 74, - 75, 113, 113, 113, 113, 80, 113, 113, 83, 84, - 113, 113, 113, 113, 113, 90, 91, 92, 113, 94, - 113, 96, 97, 98, 65, 113, 67, 113, 113, 70, - 113, 113, 73, 74, 75, 113, 113, 113, 113, 80, - 113, 113, 83, 84, 113, 113, 113, 113, 113, 90, - 91, 92, 113, 94, 113, 96, 97, 98, 65, 113, - 67, 113, 113, 70, 113, 113, 73, 74, 75, 113, - 113, 113, 113, 80, 113, 113, 83, 84, 113, 113, - 113, 113, 113, 90, 91, 92, 113, 94, 113, 96, - 97, 98, 65, 113, 67, 113, 113, 70, 113, 113, - 73, 74, 75, 113, 113, 113, 113, 80, 113, 113, - 83, 84, 113, 113, 113, 113, 113, 90, 91, 92, - 113, 94, 113, 96, 97, 98, 65, 113, 67, 113, - 113, 70, 113, 113, 73, 74, 75, 113, 113, 113, - 113, 80, 113, 113, 83, 84, 113, 113, 113, 113, - 113, 90, 91, 92, 113, 94, 113, 96, 97, 98, - 65, 113, 67, 113, 113, 70, 113, 113, 73, 74, - 75, 113, 113, 113, 113, 80, 113, 113, 83, 84, - 113, 113, 113, 113, 113, 90, 91, 92, 113, 94, - 113, 96, 97, 98, 65, 113, 67, 113, 113, 70, - 113, 113, 73, 74, 75, 113, 113, 113, 113, 80, - 113, 113, 83, 84, 113, 113, 113, 113, 113, 90, - 91, 92, 113, 94, 113, 96, 97, 98, 65, 113, - 67, 113, 113, 70, 113, 113, 73, 74, 75, 113, - 113, 113, 113, 80, 113, 113, 83, 84, 113, 113, - 113, 113, 113, 90, 91, 92, 113, 94, 113, 96, - 97, 98, 65, 113, 67, 113, 113, 70, 113, 113, - 73, 74, 75, 113, 113, 113, 113, 80, 113, 113, - 83, 84, 113, 113, 113, 113, 113, 90, 91, 92, - 113, 94, 113, 96, 97, 98, 65, 113, 67, 113, - 113, 70, 113, 113, 73, 74, 75, 113, 113, 113, - 113, 80, 113, 113, 83, 84, 113, 113, 113, 113, - 113, 90, 91, 92, 113, 94, 113, 96, 97, 98, - 65, 113, 67, 113, 113, 70, 113, 113, 73, 74, - 75, 113, 113, 113, 113, 80, 113, 113, 83, 84, - 113, 113, 113, 113, 113, 90, 91, 92, 113, 94, - 113, 96, 97, 98, 65, 113, 67, 113, 113, 70, - 113, 113, 73, 74, 75, 113, 113, 113, 113, 80, - 113, 113, 83, 84, 113, 113, 113, 113, 113, 90, - 91, 92, 113, 94, 113, 96, 97, 98, 65, 113, - 67, 113, 113, 70, 113, 113, 73, 74, 75, 113, - 113, 113, 113, 80, 113, 113, 83, 84, 113, 113, - 113, 113, 113, 90, 91, 92, 113, 94, 113, 96, - 97, 98, 65, 113, 67, 113, 113, 70, 113, 113, - 73, 74, 75, 113, 113, 113, 113, 80, 113, 113, - 83, 84, 113, 113, 113, 113, 113, 90, 91, 92, - 113, 94, 113, 96, 97, 98, 65, 113, 67, 113, - 113, 70, 113, 113, 73, 74, 75, 113, 113, 113, - 113, 80, 113, 113, 83, 84, 113, 113, 113, 113, - 113, 90, 91, 92, 113, 94, 113, 96, 97, 98, - 65, 113, 67, 113, 113, 70, 113, 113, 73, 74, - 75, 113, 113, 113, 113, 80, 113, 113, 83, 84, - 113, 113, 113, 113, 113, 90, 91, 92, 113, 94, - 113, 96, 97, 98, 65, 113, 67, 113, 113, 70, - 113, 113, 73, 74, 75, 113, 113, 113, 113, 80, - 113, 113, 83, 84, 113, 113, 113, 113, 113, 90, - 91, 92, 113, 94, 113, 96, 97, 98, 65, 113, - 67, 113, 113, 70, 113, 113, 73, 74, 75, 113, - 113, 113, 113, 80, 113, 113, 83, 84, 113, 113, - 113, 113, 113, 90, 91, 92, 113, 94, 113, 96, - 97, 98, 65, 113, 67, 113, 113, 70, 113, 113, - 73, 74, 75, 113, 113, 113, 113, 80, 113, 113, - 83, 84, 113, 113, 113, 113, 113, 90, 91, 92, - 113, 94, 113, 96, 97, 98, 65, 113, 67, 113, - 113, 70, 113, 113, 73, 74, 75, 113, 113, 113, - 113, 80, 113, 113, 83, 84, 113, 113, 113, 113, - 113, 90, 91, 92, 113, 94, 113, 96, 97, 98, - 65, 113, 67, 113, 113, 70, 113, 113, 73, 74, - 75, 113, 113, 113, 113, 80, 113, 113, 83, 84, - 113, 113, 113, 113, 113, 90, 91, 92, 113, 94, - 113, 96, 97, 98, 65, 113, 67, 113, 113, 70, - 113, 113, 73, 74, 75, 113, 113, 113, 113, 80, - 113, 113, 83, 84, 113, 113, 113, 113, 113, 90, - 91, 92, 113, 94, 113, 96, 97, 98, 65, 113, - 67, 113, 113, 70, 113, 113, 73, 74, 75, 113, - 113, 113, 113, 80, 113, 113, 83, 84, 113, 113, - 113, 113, 113, 90, 91, 92, 113, 94, 113, 96, - 97, 98, 65, 113, 67, 113, 113, 70, 113, 113, - 73, 74, 75, 113, 113, 113, 113, 80, 113, 113, - 83, 84, 113, 113, 113, 113, 113, 90, 91, 92, - 113, 94, 113, 96, 97, 98, 65, 113, 67, 113, - 113, 70, 113, 113, 73, 74, 75, 113, 113, 113, - 113, 80, 113, 113, 83, 84, 113, 113, 113, 113, - 113, 90, 91, 92, 113, 94, 113, 96, 97, 98, - 65, 113, 67, 113, 113, 70, 113, 113, 73, 74, - 75, 113, 113, 113, 113, 80, 113, 113, 83, 84, - 113, 113, 113, 113, 113, 90, 91, 92, 113, 94, - 113, 96, 97, 98, 65, 113, 67, 113, 113, 70, - 113, 113, 73, 74, 75, 113, 113, 113, 113, 80, - 113, 113, 83, 84, 113, 113, 113, 113, 113, 90, - 91, 92, 113, 94, 113, 96, 97, 98, 65, 113, - 67, 113, 113, 70, 113, 113, 73, 74, 75, 113, - 113, 113, 113, 80, 113, 113, 83, 84, 113, 113, - 113, 113, 113, 90, 91, 92, 113, 94, 113, 96, - 97, 98, 65, 113, 67, 72, 113, 70, 113, 113, - 73, 74, 113, 113, 113, 82, 113, 80, 85, 86, - 87, 88, 113, 113, 113, 113, 89, 90, 91, 92, - 113, 94, 113, 96, 97, 98, 65, 113, 67, 72, - 113, 70, 113, 113, 73, 74, 113, 113, 113, 82, - 113, 80, 85, 86, 87, 88, 113, 113, 113, 113, - 89, 90, 91, 92, 3, 94, 113, 96, 97, 98, - 9, 10, 11, 12, 113, 14, 113, 113, 113, 18, - 19, 113, 113, 113, 113, 24, 113, 25, 113, 28, - 29, 30, 113, 31, 23, 113, 25, 113, 36, 37, - 38, 39, 31, 113, 113, 113, 113, 36, 37, 38, - 39, 113, 113, 113, 113, 53, 54, 55, 56, 58, - 59, 113, 113, 3, 53, 54, 55, 56, 113, 9, - 10, 11, 12, 113, 14, 113, 20, 113, 18, 19, - 113, 113, 113, 113, 24, 113, 113, 26, 28, 29, - 30, 113, 36, 37, 38, 39, 113, 36, 37, 38, - 39, 113, 113, 113, 113, 113, 113, 113, 113, 53, - 54, 55, 56, 113, 53, 54, 55, 56, 58, 59, - 113, 113, 3, 4, 5, 6, 2, 113, 9, 10, - 11, 12, 113, 9, 113, 113, 12, 18, 19, 15, - 16, 17, 113, 24, 113, 21, 113, 28, 29, 30, - 65, 113, 67, 113, 113, 70, 113, 113, 73, 74, - 113, 113, 113, 113, 113, 80, 113, 43, 113, 113, - 46, 113, 48, 113, 50, 90, 91, 92, 113, 94, - 113, 96, 97, 98, 113, 65, 113, 67, 72, 113, - 70, 113, 113, 73, 74, 113, 113, 113, 82, 113, - 80, 85, 86, 87, 88, 113, 113, 113, 113, 113, - 90, 91, 92, 113, 94, 113, 96, 97, 98, 113, - 113, 65, 113, 67, 113, 113, 70, 113, 113, 73, - 74, 113, 113, 113, 113, 113, 80, 113, 113, 113, - 113, 113, 113, 113, 113, 113, 90, 91, 92, 113, - 94, 113, 96, 97, 98, 113, 65, 113, 67, 113, - 113, 70, 113, 113, 73, 74, 113, 113, 113, 113, - 113, 80, 113, 113, 113, 113, 113, 113, 113, 113, - 113, 90, 91, 92, 113, 94, 113, 96, 97, 98, - 113, 113, 65, 113, 67, 113, 113, 70, 113, 113, - 73, 74, 113, 113, 113, 113, 113, 80, 113, 113, - 113, 113, 113, 113, 113, 113, 113, 90, 91, 92, - 113, 94, 113, 96, 97, 98, 113, 65, 113, 67, - 113, 113, 70, 113, 113, 73, 74, 113, 113, 113, - 113, 113, 80, 113, 113, 113, 113, 113, 113, 113, - 113, 113, 90, 91, 92, 113, 94, 113, 96, 97, - 98, 113, 113, 65, 113, 67, 2, 113, 70, 113, - 113, 73, 74, 9, 113, 113, 12, 113, 80, 113, - 16, 17, 113, 113, 113, 21, 113, 113, 90, 91, - 92, 113, 94, 113, 96, 97, 98, 113, 113, 2, - 113, 113, 113, 113, 113, 113, 113, 43, 113, 113, - 46, 113, 48, 2, 50, 51, 113, 113, 113, 113, - 9, 113, 113, 12, 113, 113, 15, 16, 17, 113, - 2, 34, 21, 36, 37, 38, 39, 9, 113, 113, - 12, 113, 113, 46, 16, 17, 113, 113, 2, 21, - 53, 54, 55, 56, 43, 9, 113, 46, 12, 48, - 113, 50, 16, 17, 113, 113, 113, 21, 113, 113, - 113, 43, 113, 113, 46, 13, 48, 113, 50, 113, - 113, 113, 113, 113, 35, 36, 37, 38, 39, 43, - 113, 113, 46, 113, 48, 113, 50, 113, 36, 37, - 38, 39, 53, 54, 55, 56, 13, 113, 36, 37, - 38, 39, 13, 113, 113, 53, 54, 55, 56, 13, - 113, 113, 113, 51, 113, 53, 54, 55, 56, 36, - 37, 38, 39, 2, 113, 36, 37, 38, 39, 113, - 13, 113, 36, 37, 38, 39, 53, 54, 55, 56, - 113, 113, 53, 54, 55, 56, 113, 113, 113, 53, - 54, 55, 56, 36, 37, 38, 39, 36, 37, 38, - 39, 9, 113, 113, 12, 113, 113, 113, 16, 17, - 53, 54, 55, 56, 53, 54, 55, 56, 113, 113, - 113, 9, 113, 113, 12, 113, 113, 113, 16, 113, - 113, 113, 113, 113, 113, 43, 113, 25, 46, 27, - 48, 113, 50, 31, + 2, 86, 87, 88, 89, 25, 91, 9, 10, 11, + 12, 31, 14, 71, 16, 1, 18, 19, 1, 21, + 78, 79, 24, 81, 13, 1, 28, 29, 30, 17, + 32, 20, 34, 22, 17, 37, 25, 39, 40, 41, + 42, 43, 31, 45, 33, 47, 35, 49, 50, 25, + 52, 104, 105, 106, 43, 31, 58, 59, 9, 10, + 11, 12, 17, 14, 13, 16, 15, 18, 19, 1, + 21, 62, 63, 24, 73, 70, 25, 28, 29, 30, + 43, 32, 31, 34, 83, 34, 37, 50, 43, 40, + 41, 42, 43, 1, 45, 50, 47, 46, 49, 50, + 51, 52, 1, 2, 103, 13, 101, 58, 59, 9, + 10, 11, 12, 14, 14, 16, 16, 25, 18, 19, + 70, 21, 101, 31, 24, 66, 20, 68, 28, 29, + 30, 102, 32, 104, 34, 106, 14, 37, 16, 33, + 40, 41, 42, 43, 77, 45, 47, 47, 49, 49, + 50, 52, 52, 66, 104, 68, 106, 77, 58, 59, + 9, 10, 11, 12, 12, 14, 14, 16, 16, 18, + 19, 49, 21, 114, 52, 24, 109, 110, 34, 28, + 29, 30, 1, 32, 32, 34, 14, 43, 37, 109, + 46, 40, 41, 42, 43, 51, 45, 15, 47, 17, + 49, 50, 14, 52, 52, 95, 34, 13, 27, 58, + 59, 9, 10, 11, 12, 21, 14, 107, 16, 25, + 18, 19, 27, 21, 52, 31, 24, 81, 46, 34, + 28, 29, 30, 12, 32, 14, 34, 16, 44, 37, + 52, 46, 40, 41, 42, 43, 17, 45, 15, 47, + 17, 49, 50, 107, 52, 101, 1, 103, 13, 81, + 58, 59, 9, 10, 11, 12, 21, 14, 13, 16, + 25, 18, 19, 52, 21, 46, 31, 24, 73, 46, + 25, 28, 29, 30, 83, 32, 31, 34, 83, 44, + 37, 1, 2, 40, 41, 42, 43, 1, 45, 101, + 47, 103, 49, 50, 104, 52, 106, 73, 103, 13, + 103, 58, 59, 9, 10, 11, 12, 83, 14, 73, + 16, 25, 18, 19, 15, 21, 102, 31, 24, 83, + 71, 80, 28, 29, 30, 81, 32, 78, 34, 14, + 81, 37, 25, 109, 40, 41, 42, 43, 31, 45, + 71, 47, 43, 49, 50, 109, 52, 78, 21, 50, + 81, 77, 58, 59, 9, 10, 11, 12, 12, 14, + 73, 16, 81, 18, 19, 9, 21, 52, 12, 24, + 83, 44, 16, 28, 29, 30, 101, 32, 51, 34, + 34, 71, 37, 109, 1, 40, 41, 42, 43, 73, + 45, 81, 47, 101, 49, 50, 21, 52, 14, 83, + 16, 73, 43, 58, 59, 9, 10, 11, 12, 50, + 14, 83, 16, 33, 18, 19, 104, 21, 106, 44, + 24, 66, 101, 68, 28, 29, 30, 6, 32, 8, + 34, 51, 95, 37, 51, 60, 40, 41, 42, 43, + 73, 45, 109, 47, 107, 49, 50, 33, 52, 35, + 83, 77, 64, 65, 58, 59, 9, 10, 11, 12, + 33, 14, 35, 16, 2, 18, 19, 9, 113, 114, + 12, 24, 15, 110, 16, 28, 29, 30, 21, 32, + 21, 34, 34, 109, 37, 7, 8, 40, 41, 42, + 43, 16, 45, 33, 47, 35, 49, 50, 101, 52, + 106, 34, 33, 44, 35, 58, 59, 9, 10, 11, + 12, 65, 14, 46, 16, 73, 18, 19, 33, 77, + 35, 34, 24, 48, 34, 83, 28, 29, 30, 43, + 32, 82, 34, 46, 82, 37, 46, 51, 40, 41, + 42, 43, 33, 45, 35, 47, 82, 49, 50, 7, + 52, 109, 101, 15, 101, 16, 58, 59, 13, 66, + 67, 68, 69, 13, 71, 72, 14, 74, 75, 76, + 16, 16, 16, 16, 81, 16, 43, 84, 85, 32, + 73, 43, 34, 32, 77, 92, 93, 94, 16, 96, + 83, 98, 99, 100, 66, 67, 68, 69, 16, 71, + 72, 16, 74, 75, 76, 16, 15, 49, 35, 81, + 49, 51, 84, 85, 22, 51, 109, 115, 115, 115, + 92, 93, 94, 115, 96, 115, 98, 99, 100, 66, + 115, 68, 69, 115, 71, 72, 115, 74, 75, 76, + 115, 115, 9, 115, 81, 12, 115, 84, 85, 16, + 115, 115, 115, 115, 115, 92, 93, 94, 115, 96, + 115, 98, 99, 100, 66, 115, 68, 115, 20, 71, + 115, 115, 74, 75, 76, 115, 115, 115, 115, 81, + 115, 48, 84, 85, 36, 37, 38, 39, 115, 115, + 92, 93, 94, 115, 96, 115, 98, 99, 100, 115, + 115, 53, 54, 55, 56, 57, 66, 115, 68, 111, + 112, 71, 115, 115, 74, 75, 76, 25, 115, 9, + 115, 81, 12, 31, 84, 85, 16, 17, 36, 37, + 38, 39, 92, 93, 94, 115, 96, 115, 98, 99, + 100, 115, 115, 115, 115, 53, 54, 55, 56, 57, + 115, 111, 112, 43, 115, 115, 46, 66, 48, 68, + 50, 115, 71, 115, 115, 74, 75, 76, 115, 78, + 9, 115, 81, 12, 115, 84, 85, 16, 115, 115, + 115, 115, 115, 92, 93, 94, 115, 96, 115, 98, + 99, 100, 66, 115, 68, 115, 115, 71, 115, 115, + 74, 75, 76, 71, 115, 115, 74, 81, 115, 48, + 84, 85, 115, 81, 115, 115, 115, 115, 92, 93, + 94, 115, 96, 115, 98, 99, 100, 115, 115, 115, + 98, 99, 100, 66, 108, 68, 115, 115, 71, 115, + 115, 74, 75, 76, 115, 115, 115, 115, 81, 115, + 115, 84, 85, 115, 115, 115, 115, 115, 115, 92, + 93, 94, 115, 96, 115, 98, 99, 100, 66, 115, + 68, 115, 115, 71, 115, 108, 74, 75, 76, 115, + 115, 115, 115, 81, 115, 9, 84, 85, 12, 115, + 115, 115, 16, 115, 92, 93, 94, 115, 96, 115, + 98, 99, 100, 115, 115, 115, 115, 115, 66, 115, + 68, 115, 115, 71, 112, 115, 74, 75, 76, 115, + 115, 115, 115, 81, 48, 115, 84, 85, 115, 115, + 115, 115, 115, 115, 92, 93, 94, 115, 96, 97, + 98, 99, 100, 66, 115, 68, 115, 115, 71, 115, + 115, 74, 75, 76, 115, 78, 115, 115, 81, 115, + 115, 84, 85, 115, 115, 9, 115, 115, 12, 92, + 93, 94, 16, 96, 115, 98, 99, 100, 115, 115, + 66, 25, 68, 27, 115, 71, 115, 31, 74, 75, + 76, 115, 115, 115, 115, 81, 115, 115, 84, 85, + 115, 115, 115, 115, 115, 115, 92, 93, 94, 115, + 96, 115, 98, 99, 100, 66, 115, 68, 115, 115, + 71, 115, 115, 74, 75, 76, 115, 115, 115, 115, + 81, 115, 115, 84, 85, 115, 115, 115, 115, 115, + 115, 92, 93, 94, 115, 96, 115, 98, 99, 100, + 115, 115, 66, 115, 68, 115, 115, 71, 115, 115, + 74, 75, 76, 115, 115, 115, 115, 81, 115, 115, + 84, 85, 115, 115, 115, 115, 115, 115, 92, 93, + 94, 115, 96, 115, 98, 99, 100, 66, 115, 68, + 115, 115, 71, 115, 115, 74, 75, 76, 115, 115, + 115, 115, 81, 115, 115, 84, 85, 115, 115, 115, + 115, 115, 115, 92, 93, 94, 115, 96, 115, 98, + 99, 100, 115, 115, 66, 115, 68, 115, 115, 71, + 115, 115, 74, 75, 76, 115, 115, 115, 115, 81, + 115, 115, 84, 85, 115, 115, 115, 115, 115, 115, + 92, 93, 94, 115, 96, 115, 98, 99, 100, 66, + 115, 68, 115, 115, 71, 115, 115, 74, 75, 76, + 115, 115, 115, 115, 81, 115, 115, 84, 85, 115, + 115, 115, 115, 115, 115, 92, 93, 94, 115, 96, + 115, 98, 99, 100, 115, 115, 66, 115, 68, 115, + 115, 71, 115, 115, 74, 75, 76, 115, 115, 115, + 115, 81, 115, 115, 84, 85, 115, 115, 115, 115, + 115, 115, 92, 93, 94, 115, 96, 115, 98, 99, + 100, 66, 115, 68, 115, 115, 71, 115, 115, 74, + 75, 76, 115, 115, 115, 115, 81, 115, 115, 84, + 85, 115, 115, 115, 115, 115, 115, 92, 93, 94, + 115, 96, 115, 98, 99, 100, 115, 115, 66, 115, + 68, 115, 115, 71, 115, 115, 74, 75, 76, 115, + 115, 115, 115, 81, 115, 115, 84, 85, 115, 115, + 115, 115, 115, 115, 92, 93, 94, 115, 96, 115, + 98, 99, 100, 66, 115, 68, 115, 115, 71, 115, + 115, 74, 75, 76, 115, 115, 115, 115, 81, 115, + 115, 84, 85, 115, 115, 115, 115, 115, 115, 92, + 93, 94, 115, 96, 115, 98, 99, 100, 115, 115, + 66, 115, 68, 115, 115, 71, 115, 115, 74, 75, + 76, 115, 115, 115, 115, 81, 115, 115, 84, 85, + 115, 115, 115, 115, 115, 115, 92, 93, 94, 115, + 96, 115, 98, 99, 100, 66, 115, 68, 115, 115, + 71, 115, 115, 74, 75, 76, 115, 115, 115, 115, + 81, 115, 115, 84, 85, 115, 115, 115, 115, 115, + 115, 92, 93, 94, 115, 96, 115, 98, 99, 100, + 115, 115, 66, 115, 68, 115, 115, 71, 115, 115, + 74, 75, 76, 115, 115, 115, 115, 81, 115, 115, + 84, 85, 115, 115, 115, 115, 115, 115, 92, 93, + 94, 115, 96, 115, 98, 99, 100, 66, 115, 68, + 115, 115, 71, 115, 115, 74, 75, 76, 115, 115, + 115, 115, 81, 115, 115, 84, 85, 115, 115, 115, + 115, 115, 115, 92, 93, 94, 115, 96, 115, 98, + 99, 100, 115, 115, 66, 115, 68, 115, 115, 71, + 115, 115, 74, 75, 76, 115, 115, 115, 115, 81, + 115, 115, 84, 85, 115, 115, 115, 115, 115, 115, + 92, 93, 94, 115, 96, 115, 98, 99, 100, 66, + 115, 68, 115, 115, 71, 115, 115, 74, 75, 76, + 115, 115, 115, 115, 81, 115, 115, 84, 85, 115, + 115, 115, 115, 115, 115, 92, 93, 94, 115, 96, + 115, 98, 99, 100, 115, 115, 66, 115, 68, 115, + 115, 71, 115, 115, 74, 75, 76, 115, 115, 115, + 115, 81, 115, 115, 84, 85, 115, 115, 115, 115, + 115, 115, 92, 93, 94, 115, 96, 115, 98, 99, + 100, 66, 115, 68, 115, 115, 71, 115, 115, 74, + 75, 76, 115, 115, 115, 115, 81, 115, 115, 84, + 85, 115, 115, 115, 115, 115, 115, 92, 93, 94, + 115, 96, 115, 98, 99, 100, 115, 115, 66, 115, + 68, 115, 115, 71, 115, 115, 74, 75, 76, 115, + 115, 115, 115, 81, 115, 115, 84, 85, 115, 115, + 115, 115, 115, 115, 92, 93, 94, 115, 96, 115, + 98, 99, 100, 66, 115, 68, 115, 115, 71, 115, + 115, 74, 75, 76, 115, 115, 115, 115, 81, 115, + 115, 84, 85, 115, 115, 115, 115, 115, 115, 92, + 93, 94, 115, 96, 115, 98, 99, 100, 115, 115, + 66, 115, 68, 115, 115, 71, 115, 115, 74, 75, + 76, 115, 115, 115, 115, 81, 115, 115, 84, 85, + 115, 115, 115, 115, 115, 115, 92, 93, 94, 115, + 96, 115, 98, 99, 100, 66, 115, 68, 115, 115, + 71, 115, 115, 74, 75, 76, 115, 115, 115, 115, + 81, 115, 115, 84, 85, 115, 115, 115, 115, 115, + 115, 92, 93, 94, 115, 96, 115, 98, 99, 100, + 115, 115, 66, 115, 68, 115, 115, 71, 115, 115, + 74, 75, 76, 115, 115, 115, 115, 81, 115, 115, + 84, 85, 115, 115, 115, 115, 115, 115, 92, 93, + 94, 115, 96, 115, 98, 99, 100, 66, 115, 68, + 115, 115, 71, 115, 115, 74, 75, 76, 115, 115, + 115, 115, 81, 115, 115, 84, 85, 115, 115, 115, + 115, 115, 115, 92, 93, 94, 115, 96, 115, 98, + 99, 100, 115, 115, 66, 115, 68, 115, 115, 71, + 115, 115, 74, 75, 76, 115, 115, 115, 115, 81, + 115, 115, 84, 85, 115, 115, 115, 115, 115, 115, + 92, 93, 94, 115, 96, 115, 98, 99, 100, 66, + 115, 68, 115, 115, 71, 115, 115, 74, 75, 76, + 115, 115, 115, 115, 81, 115, 115, 84, 85, 115, + 115, 115, 115, 115, 115, 92, 93, 94, 115, 96, + 115, 98, 99, 100, 115, 115, 66, 115, 68, 115, + 115, 71, 115, 115, 74, 75, 76, 115, 115, 115, + 115, 81, 115, 115, 84, 85, 115, 115, 115, 115, + 115, 115, 92, 93, 94, 115, 96, 115, 98, 99, + 100, 66, 115, 68, 115, 115, 71, 115, 115, 74, + 75, 76, 115, 115, 115, 115, 81, 115, 115, 84, + 85, 115, 115, 115, 115, 115, 115, 92, 93, 94, + 115, 96, 115, 98, 99, 100, 115, 115, 66, 115, + 68, 115, 115, 71, 115, 115, 74, 75, 115, 115, + 115, 115, 66, 81, 68, 115, 115, 71, 115, 115, + 74, 75, 90, 115, 92, 93, 94, 81, 96, 115, + 98, 99, 100, 115, 115, 115, 90, 115, 92, 93, + 94, 115, 96, 3, 98, 99, 100, 115, 115, 9, + 10, 11, 12, 115, 14, 115, 115, 115, 18, 19, + 115, 115, 115, 115, 24, 115, 115, 26, 28, 29, + 30, 115, 115, 115, 23, 115, 25, 36, 37, 38, + 39, 115, 31, 115, 115, 115, 115, 36, 37, 38, + 39, 115, 115, 115, 53, 54, 55, 56, 57, 59, + 60, 115, 115, 3, 53, 54, 55, 56, 57, 9, + 10, 11, 12, 115, 14, 115, 115, 115, 18, 19, + 9, 115, 115, 12, 24, 115, 115, 16, 28, 29, + 30, 35, 36, 37, 38, 39, 25, 36, 37, 38, + 39, 115, 31, 115, 115, 115, 115, 115, 115, 53, + 54, 55, 56, 57, 53, 54, 55, 56, 57, 59, + 60, 60, 115, 3, 4, 5, 6, 2, 115, 9, + 10, 11, 12, 115, 9, 115, 115, 12, 18, 19, + 15, 16, 17, 115, 24, 115, 21, 115, 28, 29, + 30, 66, 115, 68, 115, 115, 71, 115, 115, 74, + 75, 115, 115, 115, 115, 115, 81, 115, 43, 115, + 115, 46, 115, 48, 115, 50, 115, 92, 93, 94, + 115, 96, 115, 98, 99, 100, 115, 66, 115, 68, + 73, 115, 71, 115, 115, 74, 75, 115, 115, 115, + 83, 115, 81, 86, 87, 88, 89, 115, 91, 115, + 115, 115, 115, 92, 93, 94, 115, 96, 115, 98, + 99, 100, 115, 66, 115, 68, 115, 73, 71, 115, + 115, 74, 75, 115, 115, 115, 115, 83, 81, 115, + 86, 87, 88, 89, 115, 91, 115, 115, 115, 92, + 93, 94, 115, 96, 115, 98, 99, 100, 115, 66, + 115, 68, 115, 73, 71, 115, 115, 74, 75, 115, + 115, 115, 115, 83, 81, 115, 86, 87, 88, 89, + 71, 91, 115, 74, 115, 92, 93, 94, 115, 96, + 81, 98, 99, 100, 115, 66, 115, 68, 115, 115, + 71, 115, 93, 74, 75, 115, 115, 98, 99, 100, + 81, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 92, 93, 94, 115, 96, 115, 98, 99, 100, + 115, 66, 115, 68, 115, 115, 71, 115, 115, 74, + 75, 115, 115, 115, 115, 115, 81, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 92, 93, 94, + 115, 96, 115, 98, 99, 100, 115, 66, 115, 68, + 115, 115, 71, 115, 1, 74, 75, 115, 115, 115, + 115, 115, 81, 115, 115, 115, 13, 115, 115, 115, + 17, 115, 115, 92, 93, 94, 115, 96, 25, 98, + 99, 100, 115, 66, 31, 68, 2, 34, 71, 115, + 115, 74, 75, 115, 115, 115, 115, 115, 81, 46, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 92, + 93, 94, 115, 96, 115, 98, 99, 100, 34, 115, + 36, 37, 38, 39, 115, 115, 115, 115, 115, 115, + 46, 115, 115, 115, 115, 115, 115, 53, 54, 55, + 56, 57, 2, 115, 115, 115, 115, 115, 115, 9, + 115, 115, 12, 115, 115, 2, 16, 17, 115, 115, + 115, 21, 9, 115, 115, 12, 115, 115, 15, 16, + 17, 115, 115, 115, 21, 115, 115, 115, 115, 115, + 115, 115, 13, 43, 115, 115, 46, 115, 48, 115, + 50, 51, 115, 115, 115, 115, 43, 115, 115, 46, + 115, 48, 115, 50, 2, 36, 37, 38, 39, 115, + 13, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 115, 53, 54, 55, 56, 57, 36, 37, 38, + 39, 115, 115, 36, 37, 38, 39, 13, 36, 37, + 38, 39, 51, 13, 53, 54, 55, 56, 57, 13, + 53, 54, 55, 56, 57, 53, 54, 55, 56, 57, + 36, 37, 38, 39, 115, 115, 36, 37, 38, 39, + 115, 115, 36, 37, 38, 39, 115, 53, 54, 55, + 56, 57, 115, 53, 54, 55, 56, 57, 2, 53, + 54, 55, 56, 57, 2, 9, 115, 115, 12, 115, + 115, 9, 16, 17, 12, 115, 115, 21, 16, 17, + 115, 115, 115, 21, 115, 115, 115, 115, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 43, + 115, 115, 46, 115, 48, 43, 50, 115, 46, 115, + 48, 115, 50, 115, 36, 37, 38, 39, 115, 115, + 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, + 115, 53, 54, 55, 56, 57, ); - const YY_SHIFT_USE_DFLT = -17; - const YY_SHIFT_MAX = 241; + const YY_SHIFT_USE_DFLT = -21; + const YY_SHIFT_MAX = 243; public static $yy_shift_ofst = array( - -17, 98, 98, 148, 198, 198, 248, 148, 148, 198, - 148, 248, -2, 48, 298, 148, 148, 148, 298, 148, - 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, - 348, 148, 148, 148, 148, 148, 398, 148, 148, 148, - 448, 498, 498, 498, 498, 498, 498, 498, 498, 147, - 1961, 1952, 1952, 35, 1951, 2006, 2011, 2412, 2399, 2422, - 2443, 415, 2449, 2456, 2481, 2477, 465, 465, 465, 465, - 465, 465, 465, 465, 465, 465, 465, 465, 465, 465, - 465, 465, 465, 465, 465, 465, 663, 90, 143, 2010, - 2532, 665, 36, 103, 143, 143, 90, 90, 135, -16, - 2069, 2074, 634, 59, 200, 636, 641, 359, 359, 229, - 43, 172, 43, 211, 12, 203, 317, 317, 228, 385, - 419, 43, 4, 4, 4, 4, 4, 4, 4, 4, - -16, -16, 164, 4, -17, -17, 2314, 2361, 2378, 2396, - 2512, 49, 710, 409, 381, 43, 43, 108, 43, 423, - 43, 423, 43, 386, 386, 43, 43, 43, 43, 386, - 449, 386, 386, 386, 399, 386, 399, 386, 43, 43, - 43, 43, 4, 482, 4, 4, 482, 4, 460, -16, - -16, -16, -16, -17, -17, -17, -17, -17, -17, 2347, - 11, 100, -10, 190, 723, 141, 291, 292, 360, 457, - 479, 459, 483, 452, 490, 500, 503, 478, 509, 520, - 548, 552, 638, 666, 677, 537, 557, 568, 601, 592, - 600, 604, 611, 614, 642, 631, 605, 651, 652, 629, - 679, 460, 686, 662, 669, 698, 664, 670, 704, 713, - 699, 711, + -21, 100, 100, 151, 202, 202, 253, 151, 151, 202, + 151, 253, -2, 49, 304, 151, 151, 151, 304, 151, + 151, 151, 151, 151, 151, 151, 151, 151, 355, 151, + 151, 151, 151, 151, 151, 151, 406, 151, 151, 151, + 457, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 2051, 702, 702, 99, 122, 658, 2041, 2529, 2096, 2551, + 2557, 2101, 2562, 2584, 2590, 2596, 2668, 2668, 2668, 2668, + 2668, 2668, 2668, 2668, 2668, 2668, 2668, 2668, 2668, 2668, + 2668, 2668, 2668, 2668, 2668, 2668, 2040, 2413, 172, 24, + 2100, 966, 2111, 45, 182, 24, 24, 172, 172, 101, + 12, 2160, 2165, 643, 221, 92, 255, 296, 366, 366, + 233, -20, 188, -20, 317, 17, 229, 394, 394, 393, + 290, 181, -20, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 12, 12, 68, 14, -21, -21, 2500, 2513, + 2646, 2652, 720, 152, 771, 468, 309, -20, -20, 467, + -20, 325, -20, 325, -20, 37, 37, -20, -20, -20, + -20, 37, 356, 37, 37, 37, 369, 37, 369, 37, + -20, -20, -20, -20, 14, 472, 14, 14, 472, 14, + 458, 12, 12, 12, 12, -21, -21, -21, -21, -21, + -21, 2444, 11, 51, 194, 245, 886, 144, 195, 385, + 337, 431, 488, 106, 485, 469, 477, 497, 500, 437, + 470, 390, 496, 424, 479, 495, 519, 548, 552, 555, + 560, 549, 564, 565, 566, 567, 562, 569, 543, 557, + 561, 558, 582, 458, 592, 568, 571, 595, 570, 574, + 599, 601, 583, 602, ); - const YY_REDUCE_USE_DFLT = -99; - const YY_REDUCE_MAX = 188; + const YY_REDUCE_USE_DFLT = -86; + const YY_REDUCE_MAX = 190; public static $yy_reduce_ofst = array( - 109, 492, 527, 561, 595, 633, 671, 705, 739, 773, - 807, 841, 875, 909, 943, 977, 1011, 1045, 1079, 1113, - 1147, 1181, 1215, 1249, 1283, 1317, 1351, 1385, 1419, 1453, - 1487, 1521, 1555, 1589, 1623, 1657, 1691, 1725, 1759, 1793, - 1827, 1861, 2035, 2070, 2106, 2141, 2177, 2212, 2248, 542, - 1823, 1857, 2066, 481, 458, 66, 66, 66, 66, 66, - 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, - 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, - 66, 66, 66, 66, 66, 66, 189, 526, 239, -42, - 20, 101, -98, 149, 222, 272, 193, 204, 216, 199, - -47, 34, -5, 99, -24, -24, -24, 153, -5, 259, - 151, 303, 270, 302, 161, 259, 194, 260, -24, -24, - -24, 320, 294, -24, -24, -24, -24, -24, -24, -24, - 259, 311, -24, -24, 370, -24, 82, 82, 82, 82, - 82, 206, 182, 82, 82, 238, 238, 255, 238, 269, - 238, 314, 238, 299, 299, 238, 238, 238, 238, 299, - 304, 299, 299, 299, 324, 299, 345, 299, 238, 238, - 238, 238, 374, 407, 374, 374, 407, 374, 430, 429, - 429, 429, 429, 504, 493, 524, 528, 474, 514, + 9, 503, 538, 573, 608, 650, 701, 736, 777, 812, + 852, 887, 924, 959, 996, 1031, 1068, 1103, 1140, 1175, + 1212, 1247, 1284, 1319, 1356, 1391, 1428, 1463, 1500, 1535, + 1572, 1607, 1644, 1679, 1716, 1751, 1788, 1823, 1860, 1895, + 1932, 1946, 2125, 2161, 2197, 2233, 2269, 2305, 2341, 2377, + 2157, 2194, 2230, 2249, 742, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, -85, -85, -85, -85, + -85, -85, -85, -85, -85, -85, 365, 452, -58, 517, + 59, 1, 205, 29, 50, 234, 246, 259, 279, 67, + -53, 87, 5, 154, 146, 80, 80, 80, 198, 154, + 200, 297, 320, 326, 338, 284, 200, 110, 347, 80, + 80, 80, 377, 384, 80, 80, 80, 80, 80, 80, + 80, 80, 200, 322, 80, 80, 398, 80, 21, 21, + 21, 21, 21, 178, 207, 21, 21, 201, 201, 251, + 201, 254, 201, 291, 201, 224, 224, 201, 201, 201, + 201, 224, 285, 224, 224, 224, 302, 224, 331, 224, + 201, 201, 201, 201, 343, 373, 343, 343, 373, 343, + 407, 404, 404, 404, 404, 456, 459, 462, 474, 461, + 463, ); public static $yyExpectedTokens = array( array(), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(2, 9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 39, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 51, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), - array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 57, 58, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(2, 9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 39, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 51, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 21, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(9, 10, 11, 12, 14, 16, 18, 19, 24, 28, 29, 30, 32, 34, 37, 40, 41, 42, 43, 45, 47, 49, 50, 52, 58, 59, ), + array(23, 25, 31, 36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(25, 31, 36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(25, 31, 36, 37, 38, 39, 53, 54, 55, 56, 57, ), array(14, 16, 47, 49, 52, ), - array(23, 25, 31, 36, 37, 38, 39, 53, 54, 55, 56, ), - array(25, 31, 36, 37, 38, 39, 53, 54, 55, 56, ), - array(25, 31, 36, 37, 38, 39, 53, 54, 55, 56, ), array(14, 16, 49, 52, ), - array(3, 9, 10, 11, 12, 14, 18, 19, 24, 28, 29, 30, 58, 59, ), - array(20, 36, 37, 38, 39, 53, 54, 55, 56, ), - array(26, 36, 37, 38, 39, 53, 54, 55, 56, ), - array(13, 36, 37, 38, 39, 53, 54, 55, 56, ), - array(35, 36, 37, 38, 39, 53, 54, 55, 56, ), - array(36, 37, 38, 39, 51, 53, 54, 55, 56, ), - array(13, 36, 37, 38, 39, 53, 54, 55, 56, ), - array(36, 37, 38, 39, 53, 54, 55, 56, 59, ), - array(13, 36, 37, 38, 39, 53, 54, 55, 56, ), - array(13, 36, 37, 38, 39, 53, 54, 55, 56, ), - array(2, 36, 37, 38, 39, 53, 54, 55, 56, ), - array(13, 36, 37, 38, 39, 53, 54, 55, 56, ), - array(36, 37, 38, 39, 53, 54, 55, 56, ), - array(36, 37, 38, 39, 53, 54, 55, 56, ), - array(36, 37, 38, 39, 53, 54, 55, 56, ), - array(36, 37, 38, 39, 53, 54, 55, 56, ), - array(36, 37, 38, 39, 53, 54, 55, 56, ), - array(36, 37, 38, 39, 53, 54, 55, 56, ), - array(36, 37, 38, 39, 53, 54, 55, 56, ), - array(36, 37, 38, 39, 53, 54, 55, 56, ), - array(36, 37, 38, 39, 53, 54, 55, 56, ), - array(36, 37, 38, 39, 53, 54, 55, 56, ), - array(36, 37, 38, 39, 53, 54, 55, 56, ), - array(36, 37, 38, 39, 53, 54, 55, 56, ), - array(36, 37, 38, 39, 53, 54, 55, 56, ), - array(36, 37, 38, 39, 53, 54, 55, 56, ), - array(36, 37, 38, 39, 53, 54, 55, 56, ), - array(36, 37, 38, 39, 53, 54, 55, 56, ), - array(36, 37, 38, 39, 53, 54, 55, 56, ), - array(36, 37, 38, 39, 53, 54, 55, 56, ), - array(36, 37, 38, 39, 53, 54, 55, 56, ), - array(36, 37, 38, 39, 53, 54, 55, 56, ), + array(20, 36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(26, 36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(13, 36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(35, 36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(36, 37, 38, 39, 51, 53, 54, 55, 56, 57, ), + array(13, 36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(36, 37, 38, 39, 53, 54, 55, 56, 57, 60, ), + array(2, 36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(13, 36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(13, 36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(13, 36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(36, 37, 38, 39, 53, 54, 55, 56, 57, ), + array(3, 9, 10, 11, 12, 14, 18, 19, 24, 28, 29, 30, 59, 60, ), array(1, 13, 17, 25, 31, 34, 46, ), array(14, 34, 52, ), array(1, 25, 31, ), - array(3, 9, 10, 11, 12, 14, 18, 19, 24, 28, 29, 30, 58, 59, ), + array(3, 9, 10, 11, 12, 14, 18, 19, 24, 28, 29, 30, 59, 60, ), array(9, 12, 16, 25, 27, 31, ), array(9, 12, 16, 25, 31, ), array(17, 43, 50, ), @@ -969,6 +1004,7 @@ public static $yy_action = array( array(1, ), array(1, ), array(1, ), + array(1, ), array(17, ), array(17, ), array(1, ), @@ -1028,7 +1064,7 @@ public static $yy_action = array( array(), array(), array(), - array(2, 34, 36, 37, 38, 39, 46, 53, 54, 55, 56, ), + array(2, 34, 36, 37, 38, 39, 46, 53, 54, 55, 56, 57, ), array(13, 20, 22, 25, 31, 33, 35, 43, ), array(13, 15, 25, 31, 34, 46, ), array(13, 21, 25, 31, 44, ), @@ -1036,7 +1072,7 @@ public static $yy_action = array( array(9, 12, 16, 48, ), array(34, 43, 46, 51, ), array(27, 34, 46, ), - array(21, 44, 59, ), + array(21, 44, 60, ), array(21, 44, 51, ), array(6, 8, ), array(7, 8, ), @@ -1181,49 +1217,50 @@ public static $yy_action = array( array(), array(), array(), + array(), ); public static $yy_default = array( - 352, 544, 544, 544, 529, 529, 544, 505, 505, 528, - 454, 544, 544, 544, 544, 544, 544, 544, 544, 544, - 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, - 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, - 544, 544, 544, 544, 544, 544, 544, 544, 544, 544, - 392, 371, 392, 544, 544, 544, 397, 544, 544, 544, - 365, 544, 544, 544, 544, 544, 376, 504, 415, 422, - 503, 530, 532, 531, 421, 423, 420, 424, 453, 451, - 399, 403, 404, 394, 397, 365, 435, 544, 392, 544, - 392, 392, 518, 456, 392, 392, 544, 544, 383, 491, - 342, 455, 468, 544, 406, 406, 406, 468, 468, 456, - 392, 544, 392, 392, 386, 456, 544, 544, 406, 406, - 406, 373, 388, 406, 413, 426, 427, 428, 414, 419, - 456, 515, 426, 412, 350, 512, 455, 455, 455, 455, - 455, 544, 470, 468, 484, 362, 372, 544, 375, 544, - 380, 544, 381, 465, 466, 366, 368, 369, 370, 496, - 468, 495, 498, 497, 459, 460, 461, 462, 382, 378, - 379, 374, 384, 506, 387, 389, 507, 444, 468, 490, - 519, 516, 492, 350, 511, 511, 511, 468, 468, 435, - 431, 435, 425, 425, 469, 435, 435, 425, 425, 348, - 544, 544, 544, 425, 435, 445, 544, 544, 544, 544, - 431, 544, 463, 463, 544, 431, 544, 544, 544, 544, - 544, 544, 544, 544, 544, 544, 431, 433, 544, 517, - 544, 484, 544, 544, 544, 544, 544, 440, 544, 544, - 544, 400, 343, 344, 345, 346, 347, 349, 351, 353, - 354, 355, 356, 357, 358, 359, 361, 390, 391, 486, - 487, 488, 510, 385, 508, 509, 429, 438, 439, 448, - 449, 467, 471, 472, 473, 407, 408, 409, 410, 411, - 430, 432, 434, 436, 440, 441, 442, 416, 417, 418, - 443, 446, 447, 481, 479, 520, 521, 522, 523, 457, - 458, 494, 463, 464, 485, 502, 360, 493, 540, 541, - 533, 534, 535, 538, 537, 539, 542, 543, 536, 525, - 527, 526, 524, 499, 482, 480, 478, 475, 476, 477, - 483, 500, 501, 437, 474, 514, 489, 484, 393, 377, - 401, 405, + 355, 549, 549, 549, 534, 534, 549, 509, 509, 533, + 458, 549, 549, 549, 549, 549, 549, 549, 549, 549, + 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, + 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, + 549, 549, 549, 549, 549, 549, 549, 549, 549, 549, + 395, 374, 395, 549, 549, 549, 400, 549, 549, 549, + 368, 549, 549, 549, 549, 549, 379, 508, 418, 507, + 426, 535, 537, 536, 425, 427, 424, 428, 457, 455, + 402, 406, 407, 397, 400, 368, 549, 439, 549, 395, + 549, 395, 395, 522, 460, 395, 395, 549, 549, 386, + 495, 345, 459, 472, 549, 409, 409, 409, 472, 472, + 460, 395, 549, 395, 395, 389, 460, 549, 549, 409, + 409, 409, 376, 391, 409, 416, 430, 431, 432, 417, + 422, 423, 460, 519, 430, 415, 353, 516, 459, 459, + 459, 459, 459, 549, 474, 472, 488, 365, 375, 549, + 378, 549, 383, 549, 384, 469, 470, 369, 371, 372, + 373, 500, 472, 499, 502, 501, 463, 464, 465, 466, + 385, 381, 382, 377, 387, 510, 390, 392, 511, 448, + 472, 494, 523, 520, 496, 353, 515, 515, 515, 472, + 472, 439, 435, 439, 429, 429, 473, 439, 439, 429, + 429, 351, 549, 549, 549, 429, 439, 449, 549, 549, + 549, 549, 435, 549, 467, 467, 549, 435, 549, 549, + 549, 549, 549, 549, 549, 549, 549, 549, 435, 437, + 549, 521, 549, 488, 549, 549, 549, 549, 549, 444, + 549, 549, 549, 403, 346, 347, 348, 349, 350, 352, + 354, 356, 357, 358, 359, 360, 361, 362, 364, 393, + 394, 490, 491, 492, 514, 388, 512, 513, 433, 442, + 443, 452, 453, 471, 475, 476, 477, 410, 411, 412, + 413, 414, 434, 436, 438, 440, 444, 445, 446, 419, + 420, 421, 447, 450, 451, 485, 483, 461, 462, 498, + 467, 468, 489, 506, 524, 525, 526, 527, 528, 363, + 497, 545, 546, 538, 539, 540, 543, 542, 544, 547, + 548, 541, 530, 532, 531, 529, 503, 486, 484, 482, + 479, 480, 481, 487, 504, 505, 441, 478, 518, 493, + 488, 396, 380, 404, 408, ); - const YYNOCODE = 114; + const YYNOCODE = 116; const YYSTACKDEPTH = 500; - const YYNSTATE = 342; - const YYNRULE = 202; - const YYERRORSYMBOL = 60; + const YYNSTATE = 345; + const YYNRULE = 204; + const YYERRORSYMBOL = 61; const YYERRSYMDT = 'yy0'; const YYFALLBACK = 0; public static $yyFallback = array( @@ -1266,21 +1303,21 @@ public static $yy_action = array( 'INSTANCEOF', 'SINGLEQUOTESTRING', 'DOUBLECOLON', 'NAMESPACE', 'AT', 'HATCH', 'OPENB', 'CLOSEB', 'DOLLAR', 'LOGOP', 'SLOGOP', 'TLOGOP', - 'SINGLECOND', 'ARRAYOPEN', 'QUOTE', 'BACKTICK', - 'error', 'start', 'template', 'literal_e2', - 'literal_e1', 'smartytag', 'tagbody', 'tag', - 'outattr', 'eqoutattr', 'varindexed', 'output', - 'attributes', 'variablevalue', 'value', 'expr', - 'modifierlist', 'statement', 'statements', 'foraction', - 'varvar', 'modparameters', 'attribute', 'nullcoalescing', - 'ternary', 'tlop', 'lop', 'scond', - 'isin', 'array', 'function', 'ns1', - 'doublequoted_with_quotes', 'static_class_access', 'arraydef', 'variablelist', - 'variable', 'object', 'configvariable', 'arrayindex', - 'indexdef', 'varvarele', 'objectchain', 'optobjectchain', - 'objectelement', 'method', 'params', 'modifier', - 'modparameter', 'arrayelements', 'arrayelement', 'doublequoted', - 'doublequotedcontent', + 'SINGLECOND', 'MATCHES', 'ARRAYOPEN', 'QUOTE', + 'BACKTICK', 'error', 'start', 'template', + 'literal_e2', 'literal_e1', 'smartytag', 'tagbody', + 'tag', 'outattr', 'eqoutattr', 'varindexed', + 'output', 'attributes', 'variablevalue', 'value', + 'expr', 'modifierlist', 'statement', 'statements', + 'foraction', 'varvar', 'modparameters', 'attribute', + 'nullcoalescing', 'ternary', 'tlop', 'lop', + 'scond', 'isin', 'array', 'matchop', + 'function', 'ns1', 'doublequoted_with_quotes', 'static_class_access', + 'arraydef', 'variablelist', 'variable', 'object', + 'configvariable', 'arrayindex', 'indexdef', 'varvarele', + 'objectchain', 'optobjectchain', 'objectelement', 'method', + 'params', 'modifier', 'modparameter', 'arrayelements', + 'arrayelement', 'doublequoted', 'doublequotedcontent', ); public static $yyRuleName = array( @@ -1362,6 +1399,7 @@ public static $yy_action = array( 'isin ::= ISIN', 'expr ::= expr isin array', 'expr ::= expr isin value', + 'expr ::= expr matchop value', 'nullcoalescing ::= expr QMARK QMARK expr', 'ternary ::= expr QMARK DOLLARID COLON expr', 'ternary ::= expr QMARK value COLON expr', @@ -1466,6 +1504,7 @@ public static $yy_action = array( 'lop ::= SLOGOP', 'tlop ::= TLOGOP', 'scond ::= SINGLECOND', + 'matchop ::= MATCHES', 'arraydef ::= OPENB arrayelements CLOSEB', 'arraydef ::= ARRAYOPEN arrayelements CLOSEP', 'arrayelements ::= arrayelement', @@ -1801,208 +1840,210 @@ public static $yy_action = array( } public static $yyRuleInfo = array( - array( 0 => 61, 1 => 1 ), - array( 0 => 62, 1 => 2 ), - array( 0 => 62, 1 => 2 ), - array( 0 => 62, 1 => 2 ), - array( 0 => 62, 1 => 4 ), + array( 0 => 62, 1 => 1 ), + array( 0 => 63, 1 => 2 ), + array( 0 => 63, 1 => 2 ), + array( 0 => 63, 1 => 2 ), array( 0 => 63, 1 => 4 ), - array( 0 => 63, 1 => 1 ), - array( 0 => 64, 1 => 2 ), - array( 0 => 64, 1 => 0 ), - array( 0 => 62, 1 => 2 ), - array( 0 => 62, 1 => 0 ), - array( 0 => 65, 1 => 1 ), - array( 0 => 65, 1 => 1 ), - array( 0 => 65, 1 => 1 ), - array( 0 => 65, 1 => 3 ), + array( 0 => 64, 1 => 4 ), + array( 0 => 64, 1 => 1 ), array( 0 => 65, 1 => 2 ), + array( 0 => 65, 1 => 0 ), + array( 0 => 63, 1 => 2 ), + array( 0 => 63, 1 => 0 ), array( 0 => 66, 1 => 1 ), + array( 0 => 66, 1 => 1 ), + array( 0 => 66, 1 => 1 ), + array( 0 => 66, 1 => 3 ), array( 0 => 66, 1 => 2 ), - array( 0 => 66, 1 => 2 ), - array( 0 => 69, 1 => 2 ), - array( 0 => 68, 1 => 2 ), - array( 0 => 71, 1 => 1 ), - array( 0 => 71, 1 => 1 ), - array( 0 => 71, 1 => 1 ), - array( 0 => 67, 1 => 3 ), - array( 0 => 67, 1 => 2 ), - array( 0 => 67, 1 => 4 ), - array( 0 => 67, 1 => 5 ), - array( 0 => 67, 1 => 6 ), - array( 0 => 67, 1 => 2 ), - array( 0 => 67, 1 => 3 ), + array( 0 => 67, 1 => 1 ), array( 0 => 67, 1 => 2 ), - array( 0 => 67, 1 => 3 ), - array( 0 => 67, 1 => 8 ), - array( 0 => 79, 1 => 2 ), - array( 0 => 79, 1 => 1 ), - array( 0 => 67, 1 => 5 ), - array( 0 => 67, 1 => 7 ), - array( 0 => 67, 1 => 6 ), - array( 0 => 67, 1 => 8 ), - array( 0 => 67, 1 => 2 ), - array( 0 => 67, 1 => 3 ), - array( 0 => 67, 1 => 4 ), - array( 0 => 65, 1 => 1 ), array( 0 => 67, 1 => 2 ), - array( 0 => 67, 1 => 3 ), - array( 0 => 67, 1 => 4 ), - array( 0 => 67, 1 => 5 ), - array( 0 => 72, 1 => 2 ), + array( 0 => 70, 1 => 2 ), + array( 0 => 69, 1 => 2 ), array( 0 => 72, 1 => 1 ), - array( 0 => 72, 1 => 0 ), - array( 0 => 82, 1 => 4 ), - array( 0 => 82, 1 => 2 ), - array( 0 => 82, 1 => 2 ), - array( 0 => 82, 1 => 2 ), - array( 0 => 82, 1 => 2 ), - array( 0 => 82, 1 => 2 ), - array( 0 => 82, 1 => 4 ), - array( 0 => 78, 1 => 1 ), + array( 0 => 72, 1 => 1 ), + array( 0 => 72, 1 => 1 ), + array( 0 => 68, 1 => 3 ), + array( 0 => 68, 1 => 2 ), + array( 0 => 68, 1 => 4 ), + array( 0 => 68, 1 => 5 ), + array( 0 => 68, 1 => 6 ), + array( 0 => 68, 1 => 2 ), + array( 0 => 68, 1 => 3 ), + array( 0 => 68, 1 => 2 ), + array( 0 => 68, 1 => 3 ), + array( 0 => 68, 1 => 8 ), + array( 0 => 80, 1 => 2 ), + array( 0 => 80, 1 => 1 ), + array( 0 => 68, 1 => 5 ), + array( 0 => 68, 1 => 7 ), + array( 0 => 68, 1 => 6 ), + array( 0 => 68, 1 => 8 ), + array( 0 => 68, 1 => 2 ), + array( 0 => 68, 1 => 3 ), + array( 0 => 68, 1 => 4 ), + array( 0 => 66, 1 => 1 ), + array( 0 => 68, 1 => 2 ), + array( 0 => 68, 1 => 3 ), + array( 0 => 68, 1 => 4 ), + array( 0 => 68, 1 => 5 ), + array( 0 => 73, 1 => 2 ), + array( 0 => 73, 1 => 1 ), + array( 0 => 73, 1 => 0 ), + array( 0 => 83, 1 => 4 ), + array( 0 => 83, 1 => 2 ), + array( 0 => 83, 1 => 2 ), + array( 0 => 83, 1 => 2 ), + array( 0 => 83, 1 => 2 ), + array( 0 => 83, 1 => 2 ), + array( 0 => 83, 1 => 4 ), + array( 0 => 79, 1 => 1 ), + array( 0 => 79, 1 => 3 ), array( 0 => 78, 1 => 3 ), - array( 0 => 77, 1 => 3 ), - array( 0 => 77, 1 => 3 ), - array( 0 => 77, 1 => 3 ), - array( 0 => 77, 1 => 3 ), + array( 0 => 78, 1 => 3 ), + array( 0 => 78, 1 => 3 ), + array( 0 => 78, 1 => 3 ), + array( 0 => 76, 1 => 1 ), + array( 0 => 76, 1 => 1 ), + array( 0 => 76, 1 => 1 ), + array( 0 => 76, 1 => 2 ), + array( 0 => 76, 1 => 2 ), + array( 0 => 76, 1 => 3 ), + array( 0 => 76, 1 => 3 ), + array( 0 => 76, 1 => 3 ), + array( 0 => 76, 1 => 3 ), + array( 0 => 76, 1 => 3 ), + array( 0 => 76, 1 => 2 ), + array( 0 => 89, 1 => 1 ), + array( 0 => 76, 1 => 3 ), + array( 0 => 76, 1 => 3 ), + array( 0 => 76, 1 => 3 ), + array( 0 => 84, 1 => 4 ), + array( 0 => 85, 1 => 5 ), + array( 0 => 85, 1 => 5 ), + array( 0 => 85, 1 => 5 ), + array( 0 => 85, 1 => 4 ), array( 0 => 75, 1 => 1 ), + array( 0 => 75, 1 => 2 ), + array( 0 => 75, 1 => 2 ), + array( 0 => 75, 1 => 2 ), + array( 0 => 75, 1 => 2 ), array( 0 => 75, 1 => 1 ), array( 0 => 75, 1 => 1 ), + array( 0 => 75, 1 => 3 ), array( 0 => 75, 1 => 2 ), array( 0 => 75, 1 => 2 ), + array( 0 => 75, 1 => 1 ), + array( 0 => 75, 1 => 1 ), array( 0 => 75, 1 => 3 ), array( 0 => 75, 1 => 3 ), array( 0 => 75, 1 => 3 ), + array( 0 => 75, 1 => 1 ), + array( 0 => 75, 1 => 1 ), array( 0 => 75, 1 => 3 ), - array( 0 => 75, 1 => 3 ), + array( 0 => 75, 1 => 1 ), array( 0 => 75, 1 => 2 ), - array( 0 => 88, 1 => 1 ), - array( 0 => 75, 1 => 3 ), + array( 0 => 75, 1 => 1 ), + array( 0 => 75, 1 => 1 ), array( 0 => 75, 1 => 3 ), - array( 0 => 83, 1 => 4 ), - array( 0 => 84, 1 => 5 ), - array( 0 => 84, 1 => 5 ), - array( 0 => 84, 1 => 5 ), - array( 0 => 84, 1 => 4 ), - array( 0 => 74, 1 => 1 ), - array( 0 => 74, 1 => 2 ), - array( 0 => 74, 1 => 2 ), - array( 0 => 74, 1 => 2 ), - array( 0 => 74, 1 => 2 ), - array( 0 => 74, 1 => 1 ), - array( 0 => 74, 1 => 1 ), - array( 0 => 74, 1 => 3 ), - array( 0 => 74, 1 => 2 ), - array( 0 => 74, 1 => 2 ), - array( 0 => 74, 1 => 1 ), - array( 0 => 74, 1 => 1 ), - array( 0 => 74, 1 => 3 ), - array( 0 => 74, 1 => 3 ), - array( 0 => 74, 1 => 3 ), - array( 0 => 74, 1 => 1 ), - array( 0 => 74, 1 => 1 ), - array( 0 => 74, 1 => 3 ), - array( 0 => 74, 1 => 1 ), - array( 0 => 74, 1 => 2 ), - array( 0 => 74, 1 => 1 ), - array( 0 => 74, 1 => 1 ), - array( 0 => 74, 1 => 3 ), - array( 0 => 91, 1 => 1 ), - array( 0 => 91, 1 => 1 ), - array( 0 => 95, 1 => 3 ), - array( 0 => 95, 1 => 3 ), - array( 0 => 95, 1 => 1 ), - array( 0 => 95, 1 => 1 ), - array( 0 => 95, 1 => 0 ), - array( 0 => 96, 1 => 1 ), - array( 0 => 96, 1 => 1 ), - array( 0 => 96, 1 => 3 ), - array( 0 => 96, 1 => 1 ), - array( 0 => 98, 1 => 3 ), - array( 0 => 98, 1 => 4 ), + array( 0 => 93, 1 => 1 ), + array( 0 => 93, 1 => 1 ), + array( 0 => 97, 1 => 3 ), + array( 0 => 97, 1 => 3 ), + array( 0 => 97, 1 => 1 ), + array( 0 => 97, 1 => 1 ), + array( 0 => 97, 1 => 0 ), + array( 0 => 98, 1 => 1 ), + array( 0 => 98, 1 => 1 ), array( 0 => 98, 1 => 3 ), - array( 0 => 98, 1 => 4 ), - array( 0 => 73, 1 => 1 ), - array( 0 => 73, 1 => 1 ), - array( 0 => 70, 1 => 2 ), - array( 0 => 70, 1 => 2 ), - array( 0 => 99, 1 => 2 ), - array( 0 => 99, 1 => 0 ), - array( 0 => 100, 1 => 2 ), - array( 0 => 100, 1 => 2 ), - array( 0 => 100, 1 => 4 ), - array( 0 => 100, 1 => 2 ), - array( 0 => 100, 1 => 2 ), - array( 0 => 100, 1 => 4 ), - array( 0 => 100, 1 => 3 ), - array( 0 => 100, 1 => 5 ), - array( 0 => 100, 1 => 3 ), - array( 0 => 100, 1 => 3 ), - array( 0 => 100, 1 => 3 ), - array( 0 => 100, 1 => 3 ), + array( 0 => 98, 1 => 1 ), array( 0 => 100, 1 => 3 ), + array( 0 => 100, 1 => 4 ), array( 0 => 100, 1 => 3 ), - array( 0 => 100, 1 => 2 ), - array( 0 => 80, 1 => 1 ), - array( 0 => 80, 1 => 1 ), - array( 0 => 80, 1 => 2 ), - array( 0 => 101, 1 => 1 ), - array( 0 => 101, 1 => 1 ), - array( 0 => 101, 1 => 3 ), - array( 0 => 97, 1 => 2 ), - array( 0 => 103, 1 => 0 ), - array( 0 => 103, 1 => 1 ), - array( 0 => 102, 1 => 1 ), + array( 0 => 100, 1 => 4 ), + array( 0 => 74, 1 => 1 ), + array( 0 => 74, 1 => 1 ), + array( 0 => 71, 1 => 2 ), + array( 0 => 71, 1 => 2 ), + array( 0 => 101, 1 => 2 ), + array( 0 => 101, 1 => 0 ), array( 0 => 102, 1 => 2 ), - array( 0 => 104, 1 => 3 ), - array( 0 => 104, 1 => 3 ), - array( 0 => 104, 1 => 5 ), - array( 0 => 104, 1 => 6 ), + array( 0 => 102, 1 => 2 ), + array( 0 => 102, 1 => 4 ), + array( 0 => 102, 1 => 2 ), + array( 0 => 102, 1 => 2 ), + array( 0 => 102, 1 => 4 ), + array( 0 => 102, 1 => 3 ), + array( 0 => 102, 1 => 5 ), + array( 0 => 102, 1 => 3 ), + array( 0 => 102, 1 => 3 ), + array( 0 => 102, 1 => 3 ), + array( 0 => 102, 1 => 3 ), + array( 0 => 102, 1 => 3 ), + array( 0 => 102, 1 => 3 ), + array( 0 => 102, 1 => 2 ), + array( 0 => 81, 1 => 1 ), + array( 0 => 81, 1 => 1 ), + array( 0 => 81, 1 => 2 ), + array( 0 => 103, 1 => 1 ), + array( 0 => 103, 1 => 1 ), + array( 0 => 103, 1 => 3 ), + array( 0 => 99, 1 => 2 ), + array( 0 => 105, 1 => 0 ), + array( 0 => 105, 1 => 1 ), + array( 0 => 104, 1 => 1 ), array( 0 => 104, 1 => 2 ), - array( 0 => 90, 1 => 5 ), - array( 0 => 105, 1 => 4 ), - array( 0 => 105, 1 => 4 ), array( 0 => 106, 1 => 3 ), - array( 0 => 106, 1 => 1 ), - array( 0 => 106, 1 => 0 ), - array( 0 => 76, 1 => 3 ), - array( 0 => 76, 1 => 2 ), - array( 0 => 107, 1 => 3 ), - array( 0 => 107, 1 => 2 ), - array( 0 => 81, 1 => 2 ), - array( 0 => 81, 1 => 0 ), - array( 0 => 108, 1 => 2 ), + array( 0 => 106, 1 => 3 ), + array( 0 => 106, 1 => 5 ), + array( 0 => 106, 1 => 6 ), + array( 0 => 106, 1 => 2 ), + array( 0 => 92, 1 => 5 ), + array( 0 => 107, 1 => 4 ), + array( 0 => 107, 1 => 4 ), array( 0 => 108, 1 => 3 ), - array( 0 => 108, 1 => 2 ), - array( 0 => 93, 1 => 1 ), - array( 0 => 93, 1 => 2 ), - array( 0 => 93, 1 => 1 ), - array( 0 => 93, 1 => 2 ), - array( 0 => 93, 1 => 3 ), - array( 0 => 86, 1 => 1 ), - array( 0 => 86, 1 => 1 ), - array( 0 => 85, 1 => 1 ), - array( 0 => 87, 1 => 1 ), - array( 0 => 94, 1 => 3 ), - array( 0 => 94, 1 => 3 ), - array( 0 => 109, 1 => 1 ), + array( 0 => 108, 1 => 1 ), + array( 0 => 108, 1 => 0 ), + array( 0 => 77, 1 => 3 ), + array( 0 => 77, 1 => 2 ), array( 0 => 109, 1 => 3 ), array( 0 => 109, 1 => 2 ), - array( 0 => 109, 1 => 0 ), - array( 0 => 110, 1 => 3 ), + array( 0 => 82, 1 => 2 ), + array( 0 => 82, 1 => 0 ), + array( 0 => 110, 1 => 2 ), array( 0 => 110, 1 => 3 ), - array( 0 => 110, 1 => 1 ), - array( 0 => 92, 1 => 2 ), - array( 0 => 92, 1 => 3 ), - array( 0 => 111, 1 => 2 ), + array( 0 => 110, 1 => 2 ), + array( 0 => 95, 1 => 1 ), + array( 0 => 95, 1 => 2 ), + array( 0 => 95, 1 => 1 ), + array( 0 => 95, 1 => 2 ), + array( 0 => 95, 1 => 3 ), + array( 0 => 87, 1 => 1 ), + array( 0 => 87, 1 => 1 ), + array( 0 => 86, 1 => 1 ), + array( 0 => 88, 1 => 1 ), + array( 0 => 91, 1 => 1 ), + array( 0 => 96, 1 => 3 ), + array( 0 => 96, 1 => 3 ), array( 0 => 111, 1 => 1 ), + array( 0 => 111, 1 => 3 ), + array( 0 => 111, 1 => 2 ), + array( 0 => 111, 1 => 0 ), array( 0 => 112, 1 => 3 ), array( 0 => 112, 1 => 3 ), array( 0 => 112, 1 => 1 ), - array( 0 => 112, 1 => 3 ), - array( 0 => 112, 1 => 3 ), - array( 0 => 112, 1 => 1 ), - array( 0 => 112, 1 => 1 ), + array( 0 => 94, 1 => 2 ), + array( 0 => 94, 1 => 3 ), + array( 0 => 113, 1 => 2 ), + array( 0 => 113, 1 => 1 ), + array( 0 => 114, 1 => 3 ), + array( 0 => 114, 1 => 3 ), + array( 0 => 114, 1 => 1 ), + array( 0 => 114, 1 => 3 ), + array( 0 => 114, 1 => 3 ), + array( 0 => 114, 1 => 1 ), + array( 0 => 114, 1 => 1 ), ); public static $yyReduceMap = array( @@ -2022,22 +2063,22 @@ public static $yy_action = array( 64 => 6, 65 => 6, 66 => 6, - 83 => 6, - 88 => 6, + 84 => 6, 89 => 6, - 94 => 6, - 98 => 6, + 90 => 6, + 95 => 6, 99 => 6, - 103 => 6, + 100 => 6, 104 => 6, - 106 => 6, - 122 => 6, - 150 => 6, - 184 => 6, - 190 => 6, + 105 => 6, + 107 => 6, + 123 => 6, + 151 => 6, + 186 => 6, + 192 => 6, 7 => 7, 8 => 8, - 149 => 8, + 150 => 8, 9 => 9, 11 => 11, 12 => 12, @@ -2075,21 +2116,21 @@ public static $yy_action = array( 48 => 48, 49 => 49, 58 => 49, - 110 => 49, 111 => 49, - 162 => 49, - 166 => 49, - 170 => 49, - 172 => 49, + 112 => 49, + 163 => 49, + 167 => 49, + 171 => 49, + 173 => 49, 50 => 50, - 112 => 50, - 163 => 50, - 169 => 50, + 113 => 50, + 164 => 50, + 170 => 50, 51 => 51, 52 => 52, 53 => 52, 54 => 54, - 145 => 54, + 146 => 54, 57 => 57, 59 => 59, 60 => 60, @@ -2110,29 +2151,29 @@ public static $yy_action = array( 78 => 78, 79 => 79, 80 => 80, - 81 => 80, - 82 => 82, - 84 => 84, - 86 => 84, - 87 => 84, - 125 => 84, + 81 => 81, + 82 => 81, + 83 => 83, 85 => 85, - 90 => 90, + 87 => 85, + 88 => 85, + 126 => 85, + 86 => 86, 91 => 91, 92 => 92, 93 => 93, - 95 => 95, + 94 => 94, 96 => 96, - 97 => 96, - 100 => 100, + 97 => 97, + 98 => 97, 101 => 101, 102 => 102, - 105 => 105, - 107 => 107, + 103 => 103, + 106 => 106, 108 => 108, - 109 => 108, - 161 => 108, - 113 => 113, + 109 => 109, + 110 => 109, + 162 => 109, 114 => 114, 115 => 115, 116 => 116, @@ -2141,33 +2182,33 @@ public static $yy_action = array( 119 => 119, 120 => 120, 121 => 121, - 123 => 123, + 122 => 122, 124 => 124, - 126 => 126, - 187 => 126, + 125 => 125, 127 => 127, + 189 => 127, 128 => 128, 129 => 129, 130 => 130, 131 => 131, 132 => 132, - 140 => 132, 133 => 133, + 141 => 133, 134 => 134, 135 => 135, - 136 => 135, - 138 => 135, - 139 => 135, - 137 => 137, - 141 => 141, + 136 => 136, + 137 => 136, + 139 => 136, + 140 => 136, + 138 => 138, 142 => 142, 143 => 143, - 191 => 143, 144 => 144, - 146 => 146, + 193 => 144, + 145 => 145, 147 => 147, 148 => 148, - 151 => 151, + 149 => 149, 152 => 152, 153 => 153, 154 => 154, @@ -2177,12 +2218,12 @@ public static $yy_action = array( 158 => 158, 159 => 159, 160 => 160, - 164 => 164, + 161 => 161, 165 => 165, - 167 => 167, + 166 => 166, 168 => 168, - 171 => 171, - 173 => 173, + 169 => 169, + 172 => 172, 174 => 174, 175 => 175, 176 => 176, @@ -2192,21 +2233,23 @@ public static $yy_action = array( 180 => 180, 181 => 181, 182 => 182, - 183 => 182, - 185 => 185, - 186 => 186, + 183 => 183, + 184 => 184, + 185 => 184, + 187 => 187, 188 => 188, - 189 => 189, - 192 => 192, - 193 => 193, + 190 => 190, + 191 => 191, 194 => 194, 195 => 195, - 198 => 195, 196 => 196, - 199 => 196, 197 => 197, - 200 => 200, - 201 => 201, + 200 => 197, + 198 => 198, + 201 => 198, + 199 => 199, + 202 => 202, + 203 => 203, ); // line 245 "src/Parser/TemplateParser.y" public function yy_r0(){ @@ -2548,43 +2591,47 @@ public static $yy_action = array( } // line 685 "src/Parser/TemplateParser.y" public function yy_r78(){ - $this->_retvalue = $this->yystack[$this->yyidx + -3]->minor.' ?? '.$this->yystack[$this->yyidx + 0]->minor; + $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor . $this->yystack[$this->yyidx + 0]->minor . ',' . $this->yystack[$this->yyidx + -2]->minor . ') '; } -// line 692 "src/Parser/TemplateParser.y" +// line 690 "src/Parser/TemplateParser.y" public function yy_r79(){ - $this->compiler->triggerTagNoCache(substr($this->yystack[$this->yyidx + -2]->minor,1)); - $this->_retvalue = $this->yystack[$this->yyidx + -4]->minor.' ? $_smarty_tpl->getValue(\''.substr($this->yystack[$this->yyidx + -2]->minor,1).'\') : '.$this->yystack[$this->yyidx + 0]->minor; + $this->_retvalue = $this->yystack[$this->yyidx + -3]->minor.' ?? '.$this->yystack[$this->yyidx + 0]->minor; } // line 697 "src/Parser/TemplateParser.y" public function yy_r80(){ + $this->compiler->triggerTagNoCache(substr($this->yystack[$this->yyidx + -2]->minor,1)); + $this->_retvalue = $this->yystack[$this->yyidx + -4]->minor.' ? $_smarty_tpl->getValue(\''.substr($this->yystack[$this->yyidx + -2]->minor,1).'\') : '.$this->yystack[$this->yyidx + 0]->minor; + } +// line 702 "src/Parser/TemplateParser.y" + public function yy_r81(){ $this->_retvalue = $this->yystack[$this->yyidx + -4]->minor.' ? '.$this->yystack[$this->yyidx + -2]->minor.' : '.$this->yystack[$this->yyidx + 0]->minor; } -// line 706 "src/Parser/TemplateParser.y" - public function yy_r82(){ +// line 711 "src/Parser/TemplateParser.y" + public function yy_r83(){ $this->_retvalue = $this->yystack[$this->yyidx + -3]->minor.' ?: '.$this->yystack[$this->yyidx + 0]->minor; } -// line 716 "src/Parser/TemplateParser.y" - public function yy_r84(){ - $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; - } // line 721 "src/Parser/TemplateParser.y" public function yy_r85(){ - $this->_retvalue = '!'.$this->yystack[$this->yyidx + 0]->minor; + $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; } -// line 742 "src/Parser/TemplateParser.y" - public function yy_r90(){ - $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'.'.$this->yystack[$this->yyidx + 0]->minor; +// line 726 "src/Parser/TemplateParser.y" + public function yy_r86(){ + $this->_retvalue = '!'.$this->yystack[$this->yyidx + 0]->minor; } -// line 746 "src/Parser/TemplateParser.y" +// line 747 "src/Parser/TemplateParser.y" public function yy_r91(){ - $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.'.'; + $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'.'.$this->yystack[$this->yyidx + 0]->minor; } -// line 750 "src/Parser/TemplateParser.y" +// line 751 "src/Parser/TemplateParser.y" public function yy_r92(){ - $this->_retvalue = '.'.$this->yystack[$this->yyidx + 0]->minor; + $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.'.'; } // line 755 "src/Parser/TemplateParser.y" public function yy_r93(){ + $this->_retvalue = '.'.$this->yystack[$this->yyidx + 0]->minor; + } +// line 760 "src/Parser/TemplateParser.y" + public function yy_r94(){ if (defined($this->yystack[$this->yyidx + 0]->minor)) { if ($this->security) { $this->security->isTrustedConstant($this->yystack[$this->yyidx + 0]->minor, $this->compiler); @@ -2594,16 +2641,16 @@ public static $yy_action = array( $this->_retvalue = '\''.$this->yystack[$this->yyidx + 0]->minor.'\''; } } -// line 772 "src/Parser/TemplateParser.y" - public function yy_r95(){ +// line 777 "src/Parser/TemplateParser.y" + public function yy_r96(){ $this->_retvalue = '('. $this->yystack[$this->yyidx + -1]->minor .')'; } -// line 776 "src/Parser/TemplateParser.y" - public function yy_r96(){ +// line 781 "src/Parser/TemplateParser.y" + public function yy_r97(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; } -// line 794 "src/Parser/TemplateParser.y" - public function yy_r100(){ +// line 799 "src/Parser/TemplateParser.y" + public function yy_r101(){ if ($this->security && $this->security->static_classes !== array()) { $this->compiler->trigger_template_error('dynamic static class not allowed by security setting'); } @@ -2616,19 +2663,19 @@ public static $yy_action = array( } $this->_retvalue = $prefixVar .'::'.$this->yystack[$this->yyidx + 0]->minor[0].$this->yystack[$this->yyidx + 0]->minor[1]; } -// line 809 "src/Parser/TemplateParser.y" - public function yy_r101(){ +// line 814 "src/Parser/TemplateParser.y" + public function yy_r102(){ $prefixVar = $this->compiler->getNewPrefixVariable(); $tmp = $this->compiler->appendCode('', (string) $this->yystack[$this->yyidx + 0]->minor); $this->compiler->appendPrefixCode($this->compiler->appendCode($tmp, "")); $this->_retvalue = $prefixVar; } -// line 816 "src/Parser/TemplateParser.y" - public function yy_r102(){ +// line 821 "src/Parser/TemplateParser.y" + public function yy_r103(){ $this->_retvalue = $this->compiler->compileModifier($this->yystack[$this->yyidx + 0]->minor, $this->yystack[$this->yyidx + -1]->minor); } -// line 829 "src/Parser/TemplateParser.y" - public function yy_r105(){ +// line 834 "src/Parser/TemplateParser.y" + public function yy_r106(){ if (!in_array(strtolower($this->yystack[$this->yyidx + -2]->minor), array('self', 'parent')) && (!$this->security || $this->security->isTrustedStaticClassAccess($this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + 0]->minor, $this->compiler))) { if (isset($this->smarty->registered_classes[$this->yystack[$this->yyidx + -2]->minor])) { $this->_retvalue = $this->smarty->registered_classes[$this->yystack[$this->yyidx + -2]->minor].'::'.$this->yystack[$this->yyidx + 0]->minor[0].$this->yystack[$this->yyidx + 0]->minor[1]; @@ -2639,21 +2686,21 @@ public static $yy_action = array( $this->compiler->trigger_template_error ('static class \''.$this->yystack[$this->yyidx + -2]->minor.'\' is undefined or not allowed by security setting'); } } -// line 848 "src/Parser/TemplateParser.y" - public function yy_r107(){ +// line 853 "src/Parser/TemplateParser.y" + public function yy_r108(){ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; } -// line 856 "src/Parser/TemplateParser.y" - public function yy_r108(){ +// line 861 "src/Parser/TemplateParser.y" + public function yy_r109(){ $this->_retvalue = array_merge($this->yystack[$this->yyidx + -2]->minor,array($this->yystack[$this->yyidx + 0]->minor)); } -// line 883 "src/Parser/TemplateParser.y" - public function yy_r113(){ +// line 888 "src/Parser/TemplateParser.y" + public function yy_r114(){ $this->compiler->triggerTagNoCache(substr($this->yystack[$this->yyidx + 0]->minor,1)); $this->_retvalue = array('$_smarty_tpl->hasVariable(\''.substr($this->yystack[$this->yyidx + 0]->minor,1).'\')','$_smarty_tpl->getValue(\''.substr($this->yystack[$this->yyidx + 0]->minor,1).'\')'); } -// line 887 "src/Parser/TemplateParser.y" - public function yy_r114(){ +// line 892 "src/Parser/TemplateParser.y" + public function yy_r115(){ if ($this->yystack[$this->yyidx + 0]->minor['var'] === '\'smarty\'') { $smarty_var = (new \Smarty\Compile\SpecialVariableCompiler())->compile(array(),$this->compiler,$this->yystack[$this->yyidx + 0]->minor['smarty_internal_index']); $this->_retvalue = array('true', $smarty_var); @@ -2665,118 +2712,118 @@ public static $yy_action = array( $this->_retvalue = array('true', '$_smarty_tpl->getValue(' . $this->yystack[$this->yyidx + 0]->minor['var'] . ')'.$this->yystack[$this->yyidx + 0]->minor['smarty_internal_index']); } } -// line 901 "src/Parser/TemplateParser.y" - public function yy_r115(){ - $this->_retvalue = array('true', '$_smarty_tpl->getVariable('. $this->yystack[$this->yyidx + -2]->minor .')->'.$this->yystack[$this->yyidx + 0]->minor); - } // line 906 "src/Parser/TemplateParser.y" public function yy_r116(){ - $this->_retvalue = array('true', $this->yystack[$this->yyidx + 0]->minor); + $this->_retvalue = array('true', '$_smarty_tpl->getVariable('. $this->yystack[$this->yyidx + -2]->minor .')->'.$this->yystack[$this->yyidx + 0]->minor); } // line 911 "src/Parser/TemplateParser.y" public function yy_r117(){ - $this->_retvalue = $this->compiler->compileConfigVariable('\'' . $this->yystack[$this->yyidx + -1]->minor . '\''); + $this->_retvalue = array('true', $this->yystack[$this->yyidx + 0]->minor); } -// line 915 "src/Parser/TemplateParser.y" +// line 916 "src/Parser/TemplateParser.y" public function yy_r118(){ - $this->_retvalue = '(is_array($tmp = ' . $this->compiler->compileConfigVariable('\'' . $this->yystack[$this->yyidx + -2]->minor . '\'') . ') ? $tmp'.$this->yystack[$this->yyidx + 0]->minor.' :null)'; + $this->_retvalue = $this->compiler->compileConfigVariable('\'' . $this->yystack[$this->yyidx + -1]->minor . '\''); } -// line 919 "src/Parser/TemplateParser.y" +// line 920 "src/Parser/TemplateParser.y" public function yy_r119(){ - $this->_retvalue = $this->compiler->compileConfigVariable($this->yystack[$this->yyidx + -1]->minor); + $this->_retvalue = '(is_array($tmp = ' . $this->compiler->compileConfigVariable('\'' . $this->yystack[$this->yyidx + -2]->minor . '\'') . ') ? $tmp'.$this->yystack[$this->yyidx + 0]->minor.' :null)'; } -// line 923 "src/Parser/TemplateParser.y" +// line 924 "src/Parser/TemplateParser.y" public function yy_r120(){ - $this->_retvalue = '(is_array($tmp = ' . $this->compiler->compileConfigVariable($this->yystack[$this->yyidx + -2]->minor) . ') ? $tmp'.$this->yystack[$this->yyidx + 0]->minor.' : null)'; + $this->_retvalue = $this->compiler->compileConfigVariable($this->yystack[$this->yyidx + -1]->minor); } -// line 927 "src/Parser/TemplateParser.y" +// line 928 "src/Parser/TemplateParser.y" public function yy_r121(){ + $this->_retvalue = '(is_array($tmp = ' . $this->compiler->compileConfigVariable($this->yystack[$this->yyidx + -2]->minor) . ') ? $tmp'.$this->yystack[$this->yyidx + 0]->minor.' : null)'; + } +// line 932 "src/Parser/TemplateParser.y" + public function yy_r122(){ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor[1]; } -// line 935 "src/Parser/TemplateParser.y" - public function yy_r123(){ +// line 940 "src/Parser/TemplateParser.y" + public function yy_r124(){ $this->_retvalue = array('var'=>'\''.substr($this->yystack[$this->yyidx + -1]->minor,1).'\'', 'smarty_internal_index'=>$this->yystack[$this->yyidx + 0]->minor); } -// line 938 "src/Parser/TemplateParser.y" - public function yy_r124(){ +// line 943 "src/Parser/TemplateParser.y" + public function yy_r125(){ $this->_retvalue = array('var'=>$this->yystack[$this->yyidx + -1]->minor, 'smarty_internal_index'=>$this->yystack[$this->yyidx + 0]->minor); } -// line 951 "src/Parser/TemplateParser.y" - public function yy_r126(){ +// line 956 "src/Parser/TemplateParser.y" + public function yy_r127(){ return; } -// line 957 "src/Parser/TemplateParser.y" - public function yy_r127(){ +// line 962 "src/Parser/TemplateParser.y" + public function yy_r128(){ $this->compiler->triggerTagNoCache(substr($this->yystack[$this->yyidx + 0]->minor,1)); $this->_retvalue = '[$_smarty_tpl->getValue(\''.substr($this->yystack[$this->yyidx + 0]->minor,1).'\')]'; } -// line 961 "src/Parser/TemplateParser.y" - public function yy_r128(){ - $this->compiler->triggerTagNoCache($this->yystack[$this->yyidx + 0]->minor); - $this->_retvalue = '[$_smarty_tpl->getValue(' . $this->yystack[$this->yyidx + 0]->minor . ')]'; - } // line 966 "src/Parser/TemplateParser.y" public function yy_r129(){ - $this->compiler->triggerTagNoCache($this->yystack[$this->yyidx + -2]->minor); - $this->_retvalue = '[$_smarty_tpl->getValue(' . $this->yystack[$this->yyidx + -2]->minor . ')->'.$this->yystack[$this->yyidx + 0]->minor.']'; + $this->compiler->triggerTagNoCache($this->yystack[$this->yyidx + 0]->minor); + $this->_retvalue = '[$_smarty_tpl->getValue(' . $this->yystack[$this->yyidx + 0]->minor . ')]'; } // line 971 "src/Parser/TemplateParser.y" public function yy_r130(){ - $this->_retvalue = '[\''. $this->yystack[$this->yyidx + 0]->minor .'\']'; + $this->compiler->triggerTagNoCache($this->yystack[$this->yyidx + -2]->minor); + $this->_retvalue = '[$_smarty_tpl->getValue(' . $this->yystack[$this->yyidx + -2]->minor . ')->'.$this->yystack[$this->yyidx + 0]->minor.']'; } -// line 975 "src/Parser/TemplateParser.y" +// line 976 "src/Parser/TemplateParser.y" public function yy_r131(){ - $this->_retvalue = '['. $this->yystack[$this->yyidx + 0]->minor .']'; + $this->_retvalue = '[\''. $this->yystack[$this->yyidx + 0]->minor .'\']'; } // line 980 "src/Parser/TemplateParser.y" public function yy_r132(){ - $this->_retvalue = '['. $this->yystack[$this->yyidx + -1]->minor .']'; + $this->_retvalue = '['. $this->yystack[$this->yyidx + 0]->minor .']'; } // line 985 "src/Parser/TemplateParser.y" public function yy_r133(){ - $this->_retvalue = '['.(new \Smarty\Compile\SpecialVariableCompiler())->compile(array(),$this->compiler,'[\'section\'][\''.$this->yystack[$this->yyidx + -1]->minor.'\'][\'index\']').']'; + $this->_retvalue = '['. $this->yystack[$this->yyidx + -1]->minor .']'; } -// line 989 "src/Parser/TemplateParser.y" +// line 990 "src/Parser/TemplateParser.y" public function yy_r134(){ - $this->_retvalue = '['.(new \Smarty\Compile\SpecialVariableCompiler())->compile(array(),$this->compiler,'[\'section\'][\''.$this->yystack[$this->yyidx + -3]->minor.'\'][\''.$this->yystack[$this->yyidx + -1]->minor.'\']').']'; + $this->_retvalue = '['.(new \Smarty\Compile\SpecialVariableCompiler())->compile(array(),$this->compiler,'[\'section\'][\''.$this->yystack[$this->yyidx + -1]->minor.'\'][\'index\']').']'; } -// line 992 "src/Parser/TemplateParser.y" +// line 994 "src/Parser/TemplateParser.y" public function yy_r135(){ + $this->_retvalue = '['.(new \Smarty\Compile\SpecialVariableCompiler())->compile(array(),$this->compiler,'[\'section\'][\''.$this->yystack[$this->yyidx + -3]->minor.'\'][\''.$this->yystack[$this->yyidx + -1]->minor.'\']').']'; + } +// line 997 "src/Parser/TemplateParser.y" + public function yy_r136(){ $this->_retvalue = '['.$this->yystack[$this->yyidx + -1]->minor.']'; } -// line 998 "src/Parser/TemplateParser.y" - public function yy_r137(){ +// line 1003 "src/Parser/TemplateParser.y" + public function yy_r138(){ $this->compiler->triggerTagNoCache(substr($this->yystack[$this->yyidx + -1]->minor,1)); $this->_retvalue = '[$_smarty_tpl->getValue(\''.substr($this->yystack[$this->yyidx + -1]->minor,1).'\')]'; } -// line 1015 "src/Parser/TemplateParser.y" - public function yy_r141(){ - $this->_retvalue = '[]'; - } -// line 1025 "src/Parser/TemplateParser.y" +// line 1020 "src/Parser/TemplateParser.y" public function yy_r142(){ - $this->_retvalue = '\''.substr($this->yystack[$this->yyidx + 0]->minor,1).'\''; + $this->_retvalue = '[]'; } -// line 1029 "src/Parser/TemplateParser.y" +// line 1030 "src/Parser/TemplateParser.y" public function yy_r143(){ - $this->_retvalue = '\'\''; + $this->_retvalue = '\''.substr($this->yystack[$this->yyidx + 0]->minor,1).'\''; } // line 1034 "src/Parser/TemplateParser.y" public function yy_r144(){ + $this->_retvalue = '\'\''; + } +// line 1039 "src/Parser/TemplateParser.y" + public function yy_r145(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.'.'.$this->yystack[$this->yyidx + 0]->minor; } -// line 1042 "src/Parser/TemplateParser.y" - public function yy_r146(){ +// line 1047 "src/Parser/TemplateParser.y" + public function yy_r147(){ $var = trim(substr($this->yystack[$this->yyidx + 0]->minor, $this->compiler->getLdelLength(), -$this->compiler->getRdelLength()), ' $'); $this->compiler->triggerTagNoCache($var); $this->_retvalue = '$_smarty_tpl->getValue(\''.$var.'\')'; } -// line 1049 "src/Parser/TemplateParser.y" - public function yy_r147(){ +// line 1054 "src/Parser/TemplateParser.y" + public function yy_r148(){ $this->_retvalue = '('.$this->yystack[$this->yyidx + -1]->minor.')'; } -// line 1056 "src/Parser/TemplateParser.y" - public function yy_r148(){ +// line 1061 "src/Parser/TemplateParser.y" + public function yy_r149(){ if ($this->yystack[$this->yyidx + -1]->minor['var'] === '\'smarty\'') { $this->_retvalue = (new \Smarty\Compile\SpecialVariableCompiler())->compile(array(),$this->compiler,$this->yystack[$this->yyidx + -1]->minor['smarty_internal_index']).$this->yystack[$this->yyidx + 0]->minor; } else { @@ -2784,49 +2831,49 @@ public static $yy_action = array( $this->_retvalue = '$_smarty_tpl->getValue(' . $this->yystack[$this->yyidx + -1]->minor['var'] . ')'.$this->yystack[$this->yyidx + -1]->minor['smarty_internal_index'].$this->yystack[$this->yyidx + 0]->minor; } } -// line 1076 "src/Parser/TemplateParser.y" - public function yy_r151(){ - $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; - } // line 1081 "src/Parser/TemplateParser.y" public function yy_r152(){ - $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; + $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor; } // line 1086 "src/Parser/TemplateParser.y" public function yy_r153(){ + $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; + } +// line 1091 "src/Parser/TemplateParser.y" + public function yy_r154(){ if ($this->security && substr($this->yystack[$this->yyidx + -1]->minor,0,1) === '_') { $this->compiler->trigger_template_error (self::ERR1); } $this->_retvalue = '->'.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor; } -// line 1093 "src/Parser/TemplateParser.y" - public function yy_r154(){ +// line 1098 "src/Parser/TemplateParser.y" + public function yy_r155(){ if ($this->security) { $this->compiler->trigger_template_error (self::ERR2); } $this->compiler->triggerTagNoCache($this->yystack[$this->yyidx + -1]->minor); $this->_retvalue = '->{$_smarty_tpl->getValue(' . $this->yystack[$this->yyidx + -1]->minor . ')'.$this->yystack[$this->yyidx + 0]->minor.'}'; } -// line 1101 "src/Parser/TemplateParser.y" - public function yy_r155(){ +// line 1106 "src/Parser/TemplateParser.y" + public function yy_r156(){ if ($this->security) { $this->compiler->trigger_template_error (self::ERR2); } $this->_retvalue = '->{'.$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + 0]->minor.'}'; } -// line 1108 "src/Parser/TemplateParser.y" - public function yy_r156(){ +// line 1113 "src/Parser/TemplateParser.y" + public function yy_r157(){ if ($this->security) { $this->compiler->trigger_template_error (self::ERR2); } $this->_retvalue = '->{\''.$this->yystack[$this->yyidx + -4]->minor.'\'.'.$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + 0]->minor.'}'; } -// line 1116 "src/Parser/TemplateParser.y" - public function yy_r157(){ +// line 1121 "src/Parser/TemplateParser.y" + public function yy_r158(){ $this->_retvalue = '->'.$this->yystack[$this->yyidx + 0]->minor; } -// line 1124 "src/Parser/TemplateParser.y" - public function yy_r158(){ +// line 1129 "src/Parser/TemplateParser.y" + public function yy_r159(){ if ($this->yystack[$this->yyidx + -4]->minor == 'isset') { $this->_retvalue = '(true'; @@ -2862,15 +2909,15 @@ public static $yy_action = array( $this->_retvalue = $this->compiler->compileModifierInExpression($this->yystack[$this->yyidx + -4]->minor, $p) . $this->yystack[$this->yyidx + 0]->minor; } } -// line 1165 "src/Parser/TemplateParser.y" - public function yy_r159(){ +// line 1170 "src/Parser/TemplateParser.y" + public function yy_r160(){ if ($this->security && substr($this->yystack[$this->yyidx + -3]->minor,0,1) === '_') { $this->compiler->trigger_template_error (self::ERR1); } $this->_retvalue = $this->yystack[$this->yyidx + -3]->minor . '('. implode(',',$this->yystack[$this->yyidx + -1]->minor) .')'; } -// line 1172 "src/Parser/TemplateParser.y" - public function yy_r160(){ +// line 1177 "src/Parser/TemplateParser.y" + public function yy_r161(){ if ($this->security) { $this->compiler->trigger_template_error (self::ERR2); } @@ -2879,52 +2926,52 @@ public static $yy_action = array( $this->compiler->appendPrefixCode("getValue('".substr($this->yystack[$this->yyidx + -3]->minor,1).'\')'.';?>'); $this->_retvalue = $prefixVar .'('. implode(',',$this->yystack[$this->yyidx + -1]->minor) .')'; } -// line 1201 "src/Parser/TemplateParser.y" - public function yy_r164(){ +// line 1206 "src/Parser/TemplateParser.y" + public function yy_r165(){ $this->_retvalue = array_merge($this->yystack[$this->yyidx + -2]->minor,array(array_merge($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor))); } -// line 1205 "src/Parser/TemplateParser.y" - public function yy_r165(){ +// line 1210 "src/Parser/TemplateParser.y" + public function yy_r166(){ $this->_retvalue = array(array_merge($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor)); } -// line 1213 "src/Parser/TemplateParser.y" - public function yy_r167(){ +// line 1218 "src/Parser/TemplateParser.y" + public function yy_r168(){ $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor); } -// line 1221 "src/Parser/TemplateParser.y" - public function yy_r168(){ +// line 1226 "src/Parser/TemplateParser.y" + public function yy_r169(){ $this->_retvalue = array_merge($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor); } -// line 1234 "src/Parser/TemplateParser.y" - public function yy_r171(){ +// line 1239 "src/Parser/TemplateParser.y" + public function yy_r172(){ $this->_retvalue = array(trim($this->yystack[$this->yyidx + -1]->minor).$this->yystack[$this->yyidx + 0]->minor); } -// line 1243 "src/Parser/TemplateParser.y" - public function yy_r173(){ - $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor, '', 'method'); - } // line 1248 "src/Parser/TemplateParser.y" public function yy_r174(){ - $this->_retvalue = array($this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + 0]->minor, 'method'); + $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor, '', 'method'); } // line 1253 "src/Parser/TemplateParser.y" public function yy_r175(){ - $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor, ''); + $this->_retvalue = array($this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + 0]->minor, 'method'); } // line 1258 "src/Parser/TemplateParser.y" public function yy_r176(){ - $this->_retvalue = array($this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + 0]->minor, 'property'); + $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor, ''); } // line 1263 "src/Parser/TemplateParser.y" public function yy_r177(){ - $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor, 'property'); + $this->_retvalue = array($this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + 0]->minor, 'property'); } -// line 1269 "src/Parser/TemplateParser.y" +// line 1268 "src/Parser/TemplateParser.y" public function yy_r178(){ - $this->_retvalue = ' '. trim($this->yystack[$this->yyidx + 0]->minor) . ' '; + $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor, 'property'); } -// line 1273 "src/Parser/TemplateParser.y" +// line 1274 "src/Parser/TemplateParser.y" public function yy_r179(){ + $this->_retvalue = ' '. trim($this->yystack[$this->yyidx + 0]->minor) . ' '; + } +// line 1278 "src/Parser/TemplateParser.y" + public function yy_r180(){ static $lops = array( 'eq' => ' == ', 'ne' => ' != ', @@ -2943,8 +2990,8 @@ public static $yy_action = array( $op = strtolower(preg_replace('/\s*/', '', $this->yystack[$this->yyidx + 0]->minor)); $this->_retvalue = $lops[$op]; } -// line 1292 "src/Parser/TemplateParser.y" - public function yy_r180(){ +// line 1297 "src/Parser/TemplateParser.y" + public function yy_r181(){ static $tlops = array( 'isdivby' => array('op' => ' % ', 'pre' => '!('), 'isnotdivby' => array('op' => ' % ', 'pre' => '('), @@ -2956,8 +3003,8 @@ public static $yy_action = array( $op = strtolower(preg_replace('/\s*/', '', $this->yystack[$this->yyidx + 0]->minor)); $this->_retvalue = $tlops[$op]; } -// line 1305 "src/Parser/TemplateParser.y" - public function yy_r181(){ +// line 1310 "src/Parser/TemplateParser.y" + public function yy_r182(){ static $scond = array ( 'iseven' => '!(1 & ', 'isnoteven' => '(1 & ', @@ -2967,58 +3014,62 @@ public static $yy_action = array( $op = strtolower(str_replace(' ', '', $this->yystack[$this->yyidx + 0]->minor)); $this->_retvalue = $scond[$op]; } -// line 1319 "src/Parser/TemplateParser.y" - public function yy_r182(){ +// line 1321 "src/Parser/TemplateParser.y" + public function yy_r183(){ + $this->_retvalue = 'preg_match('; + } +// line 1328 "src/Parser/TemplateParser.y" + public function yy_r184(){ $this->_retvalue = 'array('.$this->yystack[$this->yyidx + -1]->minor.')'; } -// line 1330 "src/Parser/TemplateParser.y" - public function yy_r185(){ +// line 1339 "src/Parser/TemplateParser.y" + public function yy_r187(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.','.$this->yystack[$this->yyidx + 0]->minor; } -// line 1334 "src/Parser/TemplateParser.y" - public function yy_r186(){ +// line 1343 "src/Parser/TemplateParser.y" + public function yy_r188(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.','; } -// line 1342 "src/Parser/TemplateParser.y" - public function yy_r188(){ +// line 1351 "src/Parser/TemplateParser.y" + public function yy_r190(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'=>'.$this->yystack[$this->yyidx + 0]->minor; } -// line 1346 "src/Parser/TemplateParser.y" - public function yy_r189(){ +// line 1355 "src/Parser/TemplateParser.y" + public function yy_r191(){ $this->_retvalue = '\''.$this->yystack[$this->yyidx + -2]->minor.'\'=>'.$this->yystack[$this->yyidx + 0]->minor; } -// line 1362 "src/Parser/TemplateParser.y" - public function yy_r192(){ +// line 1371 "src/Parser/TemplateParser.y" + public function yy_r194(){ $this->compiler->leaveDoubleQuote(); $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor->to_smarty_php($this); } -// line 1368 "src/Parser/TemplateParser.y" - public function yy_r193(){ +// line 1377 "src/Parser/TemplateParser.y" + public function yy_r195(){ $this->yystack[$this->yyidx + -1]->minor->append_subtree($this, $this->yystack[$this->yyidx + 0]->minor); $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor; } -// line 1373 "src/Parser/TemplateParser.y" - public function yy_r194(){ +// line 1382 "src/Parser/TemplateParser.y" + public function yy_r196(){ $this->_retvalue = new Dq($this, $this->yystack[$this->yyidx + 0]->minor); } -// line 1377 "src/Parser/TemplateParser.y" - public function yy_r195(){ +// line 1386 "src/Parser/TemplateParser.y" + public function yy_r197(){ $this->_retvalue = new Code('(string)'.$this->yystack[$this->yyidx + -1]->minor); } -// line 1381 "src/Parser/TemplateParser.y" - public function yy_r196(){ +// line 1390 "src/Parser/TemplateParser.y" + public function yy_r198(){ $this->_retvalue = new Code('(string)('.$this->yystack[$this->yyidx + -1]->minor.')'); } -// line 1385 "src/Parser/TemplateParser.y" - public function yy_r197(){ +// line 1394 "src/Parser/TemplateParser.y" + public function yy_r199(){ $this->_retvalue = new Code('(string)$_smarty_tpl->getValue(\''. substr($this->yystack[$this->yyidx + 0]->minor,1) .'\')'); } -// line 1397 "src/Parser/TemplateParser.y" - public function yy_r200(){ +// line 1406 "src/Parser/TemplateParser.y" + public function yy_r202(){ $this->_retvalue = new Tag($this, $this->yystack[$this->yyidx + 0]->minor); } -// line 1401 "src/Parser/TemplateParser.y" - public function yy_r201(){ +// line 1410 "src/Parser/TemplateParser.y" + public function yy_r203(){ $this->_retvalue = new DqContent($this->yystack[$this->yyidx + 0]->minor); } diff --git a/src/Parser/TemplateParser.y b/src/Parser/TemplateParser.y index 7ca4a252..e802fa3b 100644 --- a/src/Parser/TemplateParser.y +++ b/src/Parser/TemplateParser.y @@ -681,6 +681,11 @@ expr(res) ::= expr(e1) isin(c) value(v). { res = c . e1.',(array)'.v.')'; } + // regex matching + expr(res) ::= expr(e1) matchop(c) value(e2). { + res = c . e2 . ',' . e1 . ') '; +} + // null coalescing nullcoalescing(res) ::= expr(v) QMARK QMARK expr(e2). { res = v.' ?? '.e2; @@ -1313,6 +1318,10 @@ scond(res) ::= SINGLECOND(o). { res = $scond[$op]; } +matchop(res) ::= MATCHES(o). { + res = 'preg_match('; +} + // // ARRAY element assignment // diff --git a/tests/UnitTests/TemplateSource/ValueTests/Operators/MatchesOperatorTest.php b/tests/UnitTests/TemplateSource/ValueTests/Operators/MatchesOperatorTest.php new file mode 100644 index 00000000..206b67ce --- /dev/null +++ b/tests/UnitTests/TemplateSource/ValueTests/Operators/MatchesOperatorTest.php @@ -0,0 +1,118 @@ +setUpSmarty(__DIR__); + } + + public function testInit() + { + $this->cleanDirs(); + } + + /** + * Test basic regex matching functionality + */ + public function testBasicMatches() { + // Test string matching pattern + $this->assertEquals('Match!', $this->smarty->fetch('string:{if "hello" matches "/^[a-z]+$/"}Match!{else}No match{/if}')); + + // Test no match + $this->assertEquals('No match', $this->smarty->fetch('string:{if "123" matches "/^[a-z]+$/"}Match!{else}No match{/if}')); + + // Test with variables + $this->smarty->assign('name', 'hello'); + $this->smarty->assign('pattern', '/^[a-z]+$/'); + $this->assertEquals('Match!', $this->smarty->fetch('string:{if $name matches $pattern}Match!{else}No match{/if}')); + + // Test no match with variables + $this->smarty->assign('number', '123'); + $this->assertEquals('No match', $this->smarty->fetch('string:{if $number matches $pattern}Match!{else}No match{/if}')); + } + + /** + * Test different regex patterns + */ + public function testDifferentPatterns() { + // Test numeric pattern + $this->assertEquals('Match!', $this->smarty->fetch('string:{if "123" matches "/^[0-9]+$/"}Match!{else}No match{/if}')); + + // Test email pattern + $this->assertEquals('Match!', $this->smarty->fetch('string:{if "test@example.com" matches "/^[^@]+@[^@]+\.[^@]+$/"}Match!{else}No match{/if}')); + + // Test case insensitive pattern + $this->assertEquals('Match!', $this->smarty->fetch('string:{if "Hello" matches "/hello/i"}Match!{else}No match{/if}')); + + // Test pattern with special characters + $this->assertEquals('Match!', $this->smarty->fetch('string:{if "hello-world" matches "/^[a-z-]+$/"}Match!{else}No match{/if}')); + } + + /** + * Test regex patterns with modifiers + */ + public function testPatternModifiers() { + // Test case insensitive modifier + $this->assertEquals('Match!', $this->smarty->fetch('string:{if "HELLO" matches "/hello/i"}Match!{else}No match{/if}')); + + // Test multiline modifier + $this->assertEquals('Match!', $this->smarty->fetch('string:{if "hello\nworld" matches "/world$/m"}Match!{else}No match{/if}')); + + // Test dotall modifier + $this->assertEquals('Match!', $this->smarty->fetch('string:{if "hello\nworld" matches "/hello.world/s"}Match!{else}No match{/if}')); + } + + /** + * Test complex expressions with matches operator + */ + public function testComplexExpressions() { + // Test with logical AND + $this->smarty->assign('name', 'hello'); + $this->smarty->assign('pattern', '/^[a-z]+$/'); + $this->smarty->assign('length', 5); + $this->assertEquals('Valid!', $this->smarty->fetch('string:{if $name matches $pattern && $length > 3}Valid!{else}Invalid{/if}')); + + // Test with logical OR + $this->assertEquals('Valid!', $this->smarty->fetch('string:{if $name matches $pattern || $length < 3}Valid!{else}Invalid{/if}')); + + // Test in elseif + $this->assertEquals('ElseIf!', $this->smarty->fetch('string:{if $name matches "/^[0-9]+$/"}No{elseif $name matches $pattern}ElseIf!{else}Else{/if}')); + + // Test in while loop condition (should work with constant patterns) + $result = $this->smarty->fetch('string:{assign var="i" value=0}{while $i < 2 && "test" matches "/test/"}{$i}{assign var="i" value=$i+1}{/while}'); + $this->assertEquals('01', $result); + } + + /** + * Test edge cases and error handling + */ + public function testEdgeCases() { + // Test with empty string + $this->assertEquals('No match', $this->smarty->fetch('string:{if "" matches "/.+/"}Match!{else}No match{/if}')); + + // Test with complex pattern + $this->assertEquals('Match!', $this->smarty->fetch('string:{if "abc123" matches "/^[a-z]+[0-9]+$/"}Match!{else}No match{/if}')); + + // Test with single character pattern + $this->assertEquals('Match!', $this->smarty->fetch('string:{if "a" matches "/a/"}Match!{else}No match{/if}')); + } + + /** + * Test that invalid patterns still work (they will cause PHP warnings but not break the template) + * Note: This test is commented out because invalid patterns cause PHP warnings that fail the test + * In production, invalid patterns would cause warnings but the template would still execute + */ + /* + public function testInvalidPatterns() { + // This will cause a PHP warning but should not break the template execution + $this->smarty->assign('invalid_pattern', 'not-a-valid-pattern'); + $this->smarty->assign('name', 'hello'); + + // The template should execute and reach the else branch due to the invalid pattern + $result = $this->smarty->fetch('string:{if $name matches $invalid_pattern}Match!{else}No match{/if}'); + $this->assertEquals('No match', $result); + } + */ +} \ No newline at end of file -- cgit v1.3