diff --git a/rewrite-hcl/src/main/antlr/HCLLexer.g4 b/rewrite-hcl/src/main/antlr/HCLLexer.g4 index 1df9f4de658..474d5a9babf 100644 --- a/rewrite-hcl/src/main/antlr/HCLLexer.g4 +++ b/rewrite-hcl/src/main/antlr/HCLLexer.g4 @@ -142,8 +142,10 @@ TemplateStringLiteral TemplateStringLiteralChar : ~[\n\r%$"] - | '$' ~[{] - | '%' ~[{] + | '$' '$' + | '$' {_input.LA(1) != '{'}? + | '%' '%' + | '%' {_input.LA(1) != '{'}? | EscapeSequence ; diff --git a/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLLexer.interp b/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLLexer.interp index b4a9ee4bed1..b210722ef06 100644 --- a/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLLexer.interp +++ b/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLLexer.interp @@ -169,4 +169,4 @@ HEREDOC_PREAMBLE HEREDOC atn: -[4, 0, 47, 442, 6, -1, 6, -1, 6, -1, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 1, 0, 1, 0, 1, 0, 5, 0, 124, 8, 0, 10, 0, 12, 0, 127, 9, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 5, 1, 138, 8, 1, 10, 1, 12, 1, 141, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 3, 7, 165, 8, 7, 1, 8, 1, 8, 1, 8, 5, 8, 170, 8, 8, 10, 8, 12, 8, 173, 9, 8, 1, 9, 4, 9, 176, 8, 9, 11, 9, 12, 9, 177, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 5, 10, 186, 8, 10, 10, 10, 12, 10, 189, 9, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 3, 11, 199, 8, 11, 1, 11, 5, 11, 202, 8, 11, 10, 11, 12, 11, 205, 9, 11, 1, 11, 3, 11, 208, 8, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 3, 13, 220, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 3, 14, 226, 8, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 246, 8, 15, 1, 16, 1, 16, 1, 17, 4, 17, 251, 8, 17, 11, 17, 12, 17, 252, 1, 17, 1, 17, 5, 17, 257, 8, 17, 10, 17, 12, 17, 260, 9, 17, 1, 17, 3, 17, 263, 8, 17, 1, 17, 4, 17, 266, 8, 17, 11, 17, 12, 17, 267, 1, 17, 1, 17, 4, 17, 272, 8, 17, 11, 17, 12, 17, 273, 3, 17, 276, 8, 17, 1, 18, 1, 18, 3, 18, 280, 8, 18, 1, 18, 4, 18, 283, 8, 18, 11, 18, 12, 18, 284, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 3, 19, 296, 8, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 311, 8, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 27, 1, 27, 1, 28, 1, 28, 1, 29, 1, 29, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 34, 1, 34, 1, 35, 1, 35, 1, 36, 1, 36, 1, 37, 1, 37, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 4, 49, 382, 8, 49, 11, 49, 12, 49, 383, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 3, 50, 392, 8, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 5, 53, 407, 8, 53, 10, 53, 12, 53, 410, 9, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 4, 56, 429, 8, 56, 11, 56, 12, 56, 430, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 3, 57, 441, 8, 57, 1, 187, 0, 58, 4, 1, 6, 2, 8, 3, 10, 4, 12, 5, 14, 6, 16, 7, 18, 0, 20, 8, 22, 9, 24, 10, 26, 11, 28, 12, 30, 0, 32, 0, 34, 0, 36, 0, 38, 13, 40, 0, 42, 14, 44, 15, 46, 16, 48, 17, 50, 18, 52, 19, 54, 20, 56, 21, 58, 22, 60, 23, 62, 24, 64, 25, 66, 26, 68, 27, 70, 28, 72, 29, 74, 30, 76, 31, 78, 32, 80, 33, 82, 34, 84, 35, 86, 36, 88, 37, 90, 38, 92, 39, 94, 40, 96, 41, 98, 42, 100, 43, 102, 44, 104, 45, 106, 0, 108, 0, 110, 0, 112, 0, 114, 0, 116, 46, 118, 47, 4, 0, 1, 2, 3, 14, 4, 0, 10, 10, 13, 13, 34, 34, 36, 37, 3, 0, 9, 9, 12, 13, 32, 32, 2, 0, 10, 10, 13, 13, 1, 0, 48, 57, 4, 0, 36, 36, 65, 90, 95, 95, 97, 122, 2, 0, 0, 127, 55296, 56319, 1, 0, 55296, 56319, 1, 0, 56320, 57343, 5, 0, 34, 34, 92, 92, 110, 110, 114, 114, 116, 116, 3, 0, 48, 57, 65, 70, 97, 102, 2, 0, 69, 69, 101, 101, 2, 0, 43, 43, 45, 45, 1, 0, 123, 123, 3, 0, 10, 10, 13, 13, 36, 37, 470, 0, 4, 1, 0, 0, 0, 0, 6, 1, 0, 0, 0, 0, 8, 1, 0, 0, 0, 0, 10, 1, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 14, 1, 0, 0, 0, 0, 16, 1, 0, 0, 0, 0, 20, 1, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 24, 1, 0, 0, 0, 0, 26, 1, 0, 0, 0, 0, 28, 1, 0, 0, 0, 0, 38, 1, 0, 0, 0, 0, 42, 1, 0, 0, 0, 0, 44, 1, 0, 0, 0, 0, 46, 1, 0, 0, 0, 0, 48, 1, 0, 0, 0, 0, 50, 1, 0, 0, 0, 0, 52, 1, 0, 0, 0, 0, 54, 1, 0, 0, 0, 0, 56, 1, 0, 0, 0, 0, 58, 1, 0, 0, 0, 0, 60, 1, 0, 0, 0, 0, 62, 1, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 66, 1, 0, 0, 0, 0, 68, 1, 0, 0, 0, 0, 70, 1, 0, 0, 0, 0, 72, 1, 0, 0, 0, 0, 74, 1, 0, 0, 0, 0, 76, 1, 0, 0, 0, 0, 78, 1, 0, 0, 0, 0, 80, 1, 0, 0, 0, 0, 82, 1, 0, 0, 0, 0, 84, 1, 0, 0, 0, 0, 86, 1, 0, 0, 0, 0, 88, 1, 0, 0, 0, 0, 90, 1, 0, 0, 0, 0, 92, 1, 0, 0, 0, 0, 94, 1, 0, 0, 0, 0, 96, 1, 0, 0, 0, 0, 98, 1, 0, 0, 0, 1, 100, 1, 0, 0, 0, 1, 102, 1, 0, 0, 0, 1, 104, 1, 0, 0, 0, 1, 106, 1, 0, 0, 0, 2, 108, 1, 0, 0, 0, 2, 110, 1, 0, 0, 0, 3, 112, 1, 0, 0, 0, 3, 114, 1, 0, 0, 0, 3, 116, 1, 0, 0, 0, 3, 118, 1, 0, 0, 0, 4, 120, 1, 0, 0, 0, 6, 134, 1, 0, 0, 0, 8, 148, 1, 0, 0, 0, 10, 151, 1, 0, 0, 0, 12, 154, 1, 0, 0, 0, 14, 157, 1, 0, 0, 0, 16, 160, 1, 0, 0, 0, 18, 164, 1, 0, 0, 0, 20, 166, 1, 0, 0, 0, 22, 175, 1, 0, 0, 0, 24, 181, 1, 0, 0, 0, 26, 198, 1, 0, 0, 0, 28, 213, 1, 0, 0, 0, 30, 219, 1, 0, 0, 0, 32, 225, 1, 0, 0, 0, 34, 245, 1, 0, 0, 0, 36, 247, 1, 0, 0, 0, 38, 275, 1, 0, 0, 0, 40, 277, 1, 0, 0, 0, 42, 295, 1, 0, 0, 0, 44, 297, 1, 0, 0, 0, 46, 301, 1, 0, 0, 0, 48, 306, 1, 0, 0, 0, 50, 314, 1, 0, 0, 0, 52, 316, 1, 0, 0, 0, 54, 319, 1, 0, 0, 0, 56, 322, 1, 0, 0, 0, 58, 324, 1, 0, 0, 0, 60, 326, 1, 0, 0, 0, 62, 328, 1, 0, 0, 0, 64, 330, 1, 0, 0, 0, 66, 332, 1, 0, 0, 0, 68, 335, 1, 0, 0, 0, 70, 338, 1, 0, 0, 0, 72, 340, 1, 0, 0, 0, 74, 342, 1, 0, 0, 0, 76, 344, 1, 0, 0, 0, 78, 346, 1, 0, 0, 0, 80, 348, 1, 0, 0, 0, 82, 350, 1, 0, 0, 0, 84, 353, 1, 0, 0, 0, 86, 355, 1, 0, 0, 0, 88, 357, 1, 0, 0, 0, 90, 360, 1, 0, 0, 0, 92, 363, 1, 0, 0, 0, 94, 365, 1, 0, 0, 0, 96, 367, 1, 0, 0, 0, 98, 371, 1, 0, 0, 0, 100, 373, 1, 0, 0, 0, 102, 381, 1, 0, 0, 0, 104, 391, 1, 0, 0, 0, 106, 393, 1, 0, 0, 0, 108, 398, 1, 0, 0, 0, 110, 403, 1, 0, 0, 0, 112, 415, 1, 0, 0, 0, 114, 419, 1, 0, 0, 0, 116, 428, 1, 0, 0, 0, 118, 440, 1, 0, 0, 0, 120, 125, 5, 123, 0, 0, 121, 124, 3, 22, 9, 0, 122, 124, 3, 28, 12, 0, 123, 121, 1, 0, 0, 0, 123, 122, 1, 0, 0, 0, 124, 127, 1, 0, 0, 0, 125, 123, 1, 0, 0, 0, 125, 126, 1, 0, 0, 0, 126, 128, 1, 0, 0, 0, 127, 125, 1, 0, 0, 0, 128, 129, 5, 102, 0, 0, 129, 130, 5, 111, 0, 0, 130, 131, 5, 114, 0, 0, 131, 132, 1, 0, 0, 0, 132, 133, 3, 22, 9, 0, 133, 5, 1, 0, 0, 0, 134, 139, 5, 91, 0, 0, 135, 138, 3, 22, 9, 0, 136, 138, 3, 28, 12, 0, 137, 135, 1, 0, 0, 0, 137, 136, 1, 0, 0, 0, 138, 141, 1, 0, 0, 0, 139, 137, 1, 0, 0, 0, 139, 140, 1, 0, 0, 0, 140, 142, 1, 0, 0, 0, 141, 139, 1, 0, 0, 0, 142, 143, 5, 102, 0, 0, 143, 144, 5, 111, 0, 0, 144, 145, 5, 114, 0, 0, 145, 146, 1, 0, 0, 0, 146, 147, 3, 22, 9, 0, 147, 7, 1, 0, 0, 0, 148, 149, 5, 105, 0, 0, 149, 150, 5, 102, 0, 0, 150, 9, 1, 0, 0, 0, 151, 152, 5, 105, 0, 0, 152, 153, 5, 110, 0, 0, 153, 11, 1, 0, 0, 0, 154, 155, 5, 123, 0, 0, 155, 156, 6, 4, 0, 0, 156, 13, 1, 0, 0, 0, 157, 158, 5, 125, 0, 0, 158, 159, 6, 5, 1, 0, 159, 15, 1, 0, 0, 0, 160, 161, 5, 61, 0, 0, 161, 17, 1, 0, 0, 0, 162, 165, 8, 0, 0, 0, 163, 165, 3, 34, 15, 0, 164, 162, 1, 0, 0, 0, 164, 163, 1, 0, 0, 0, 165, 19, 1, 0, 0, 0, 166, 171, 3, 32, 14, 0, 167, 170, 3, 30, 13, 0, 168, 170, 5, 45, 0, 0, 169, 167, 1, 0, 0, 0, 169, 168, 1, 0, 0, 0, 170, 173, 1, 0, 0, 0, 171, 169, 1, 0, 0, 0, 171, 172, 1, 0, 0, 0, 172, 21, 1, 0, 0, 0, 173, 171, 1, 0, 0, 0, 174, 176, 7, 1, 0, 0, 175, 174, 1, 0, 0, 0, 176, 177, 1, 0, 0, 0, 177, 175, 1, 0, 0, 0, 177, 178, 1, 0, 0, 0, 178, 179, 1, 0, 0, 0, 179, 180, 6, 9, 2, 0, 180, 23, 1, 0, 0, 0, 181, 182, 5, 47, 0, 0, 182, 183, 5, 42, 0, 0, 183, 187, 1, 0, 0, 0, 184, 186, 9, 0, 0, 0, 185, 184, 1, 0, 0, 0, 186, 189, 1, 0, 0, 0, 187, 188, 1, 0, 0, 0, 187, 185, 1, 0, 0, 0, 188, 190, 1, 0, 0, 0, 189, 187, 1, 0, 0, 0, 190, 191, 5, 42, 0, 0, 191, 192, 5, 47, 0, 0, 192, 193, 1, 0, 0, 0, 193, 194, 6, 10, 2, 0, 194, 25, 1, 0, 0, 0, 195, 196, 5, 47, 0, 0, 196, 199, 5, 47, 0, 0, 197, 199, 5, 35, 0, 0, 198, 195, 1, 0, 0, 0, 198, 197, 1, 0, 0, 0, 199, 203, 1, 0, 0, 0, 200, 202, 8, 2, 0, 0, 201, 200, 1, 0, 0, 0, 202, 205, 1, 0, 0, 0, 203, 201, 1, 0, 0, 0, 203, 204, 1, 0, 0, 0, 204, 207, 1, 0, 0, 0, 205, 203, 1, 0, 0, 0, 206, 208, 5, 13, 0, 0, 207, 206, 1, 0, 0, 0, 207, 208, 1, 0, 0, 0, 208, 209, 1, 0, 0, 0, 209, 210, 5, 10, 0, 0, 210, 211, 1, 0, 0, 0, 211, 212, 6, 11, 2, 0, 212, 27, 1, 0, 0, 0, 213, 214, 5, 10, 0, 0, 214, 215, 1, 0, 0, 0, 215, 216, 6, 12, 2, 0, 216, 29, 1, 0, 0, 0, 217, 220, 3, 32, 14, 0, 218, 220, 7, 3, 0, 0, 219, 217, 1, 0, 0, 0, 219, 218, 1, 0, 0, 0, 220, 31, 1, 0, 0, 0, 221, 226, 7, 4, 0, 0, 222, 226, 8, 5, 0, 0, 223, 224, 7, 6, 0, 0, 224, 226, 7, 7, 0, 0, 225, 221, 1, 0, 0, 0, 225, 222, 1, 0, 0, 0, 225, 223, 1, 0, 0, 0, 226, 33, 1, 0, 0, 0, 227, 228, 5, 92, 0, 0, 228, 246, 7, 8, 0, 0, 229, 230, 5, 92, 0, 0, 230, 231, 3, 36, 16, 0, 231, 232, 3, 36, 16, 0, 232, 233, 3, 36, 16, 0, 233, 234, 3, 36, 16, 0, 234, 246, 1, 0, 0, 0, 235, 236, 5, 92, 0, 0, 236, 237, 3, 36, 16, 0, 237, 238, 3, 36, 16, 0, 238, 239, 3, 36, 16, 0, 239, 240, 3, 36, 16, 0, 240, 241, 3, 36, 16, 0, 241, 242, 3, 36, 16, 0, 242, 243, 3, 36, 16, 0, 243, 244, 3, 36, 16, 0, 244, 246, 1, 0, 0, 0, 245, 227, 1, 0, 0, 0, 245, 229, 1, 0, 0, 0, 245, 235, 1, 0, 0, 0, 246, 35, 1, 0, 0, 0, 247, 248, 7, 9, 0, 0, 248, 37, 1, 0, 0, 0, 249, 251, 7, 3, 0, 0, 250, 249, 1, 0, 0, 0, 251, 252, 1, 0, 0, 0, 252, 250, 1, 0, 0, 0, 252, 253, 1, 0, 0, 0, 253, 254, 1, 0, 0, 0, 254, 258, 5, 46, 0, 0, 255, 257, 7, 3, 0, 0, 256, 255, 1, 0, 0, 0, 257, 260, 1, 0, 0, 0, 258, 256, 1, 0, 0, 0, 258, 259, 1, 0, 0, 0, 259, 262, 1, 0, 0, 0, 260, 258, 1, 0, 0, 0, 261, 263, 3, 40, 18, 0, 262, 261, 1, 0, 0, 0, 262, 263, 1, 0, 0, 0, 263, 276, 1, 0, 0, 0, 264, 266, 7, 3, 0, 0, 265, 264, 1, 0, 0, 0, 266, 267, 1, 0, 0, 0, 267, 265, 1, 0, 0, 0, 267, 268, 1, 0, 0, 0, 268, 269, 1, 0, 0, 0, 269, 276, 3, 40, 18, 0, 270, 272, 7, 3, 0, 0, 271, 270, 1, 0, 0, 0, 272, 273, 1, 0, 0, 0, 273, 271, 1, 0, 0, 0, 273, 274, 1, 0, 0, 0, 274, 276, 1, 0, 0, 0, 275, 250, 1, 0, 0, 0, 275, 265, 1, 0, 0, 0, 275, 271, 1, 0, 0, 0, 276, 39, 1, 0, 0, 0, 277, 279, 7, 10, 0, 0, 278, 280, 7, 11, 0, 0, 279, 278, 1, 0, 0, 0, 279, 280, 1, 0, 0, 0, 280, 282, 1, 0, 0, 0, 281, 283, 7, 3, 0, 0, 282, 281, 1, 0, 0, 0, 283, 284, 1, 0, 0, 0, 284, 282, 1, 0, 0, 0, 284, 285, 1, 0, 0, 0, 285, 41, 1, 0, 0, 0, 286, 287, 5, 116, 0, 0, 287, 288, 5, 114, 0, 0, 288, 289, 5, 117, 0, 0, 289, 296, 5, 101, 0, 0, 290, 291, 5, 102, 0, 0, 291, 292, 5, 97, 0, 0, 292, 293, 5, 108, 0, 0, 293, 294, 5, 115, 0, 0, 294, 296, 5, 101, 0, 0, 295, 286, 1, 0, 0, 0, 295, 290, 1, 0, 0, 0, 296, 43, 1, 0, 0, 0, 297, 298, 5, 34, 0, 0, 298, 299, 1, 0, 0, 0, 299, 300, 6, 20, 3, 0, 300, 45, 1, 0, 0, 0, 301, 302, 5, 110, 0, 0, 302, 303, 5, 117, 0, 0, 303, 304, 5, 108, 0, 0, 304, 305, 5, 108, 0, 0, 305, 47, 1, 0, 0, 0, 306, 307, 5, 60, 0, 0, 307, 308, 5, 60, 0, 0, 308, 310, 1, 0, 0, 0, 309, 311, 5, 45, 0, 0, 310, 309, 1, 0, 0, 0, 310, 311, 1, 0, 0, 0, 311, 312, 1, 0, 0, 0, 312, 313, 6, 22, 4, 0, 313, 49, 1, 0, 0, 0, 314, 315, 5, 43, 0, 0, 315, 51, 1, 0, 0, 0, 316, 317, 5, 38, 0, 0, 317, 318, 5, 38, 0, 0, 318, 53, 1, 0, 0, 0, 319, 320, 5, 61, 0, 0, 320, 321, 5, 61, 0, 0, 321, 55, 1, 0, 0, 0, 322, 323, 5, 60, 0, 0, 323, 57, 1, 0, 0, 0, 324, 325, 5, 58, 0, 0, 325, 59, 1, 0, 0, 0, 326, 327, 5, 91, 0, 0, 327, 61, 1, 0, 0, 0, 328, 329, 5, 40, 0, 0, 329, 63, 1, 0, 0, 0, 330, 331, 5, 45, 0, 0, 331, 65, 1, 0, 0, 0, 332, 333, 5, 124, 0, 0, 333, 334, 5, 124, 0, 0, 334, 67, 1, 0, 0, 0, 335, 336, 5, 33, 0, 0, 336, 337, 5, 61, 0, 0, 337, 69, 1, 0, 0, 0, 338, 339, 5, 62, 0, 0, 339, 71, 1, 0, 0, 0, 340, 341, 5, 63, 0, 0, 341, 73, 1, 0, 0, 0, 342, 343, 5, 93, 0, 0, 343, 75, 1, 0, 0, 0, 344, 345, 5, 41, 0, 0, 345, 77, 1, 0, 0, 0, 346, 347, 5, 42, 0, 0, 347, 79, 1, 0, 0, 0, 348, 349, 5, 33, 0, 0, 349, 81, 1, 0, 0, 0, 350, 351, 5, 60, 0, 0, 351, 352, 5, 61, 0, 0, 352, 83, 1, 0, 0, 0, 353, 354, 5, 46, 0, 0, 354, 85, 1, 0, 0, 0, 355, 356, 5, 47, 0, 0, 356, 87, 1, 0, 0, 0, 357, 358, 5, 62, 0, 0, 358, 359, 5, 61, 0, 0, 359, 89, 1, 0, 0, 0, 360, 361, 5, 61, 0, 0, 361, 362, 5, 62, 0, 0, 362, 91, 1, 0, 0, 0, 363, 364, 5, 44, 0, 0, 364, 93, 1, 0, 0, 0, 365, 366, 5, 37, 0, 0, 366, 95, 1, 0, 0, 0, 367, 368, 5, 46, 0, 0, 368, 369, 5, 46, 0, 0, 369, 370, 5, 46, 0, 0, 370, 97, 1, 0, 0, 0, 371, 372, 5, 126, 0, 0, 372, 99, 1, 0, 0, 0, 373, 374, 5, 36, 0, 0, 374, 375, 5, 123, 0, 0, 375, 376, 1, 0, 0, 0, 376, 377, 6, 48, 5, 0, 377, 378, 1, 0, 0, 0, 378, 379, 6, 48, 6, 0, 379, 101, 1, 0, 0, 0, 380, 382, 3, 104, 50, 0, 381, 380, 1, 0, 0, 0, 382, 383, 1, 0, 0, 0, 383, 381, 1, 0, 0, 0, 383, 384, 1, 0, 0, 0, 384, 103, 1, 0, 0, 0, 385, 392, 8, 0, 0, 0, 386, 387, 5, 36, 0, 0, 387, 392, 8, 12, 0, 0, 388, 389, 5, 37, 0, 0, 389, 392, 8, 12, 0, 0, 390, 392, 3, 34, 15, 0, 391, 385, 1, 0, 0, 0, 391, 386, 1, 0, 0, 0, 391, 388, 1, 0, 0, 0, 391, 390, 1, 0, 0, 0, 392, 105, 1, 0, 0, 0, 393, 394, 5, 34, 0, 0, 394, 395, 1, 0, 0, 0, 395, 396, 6, 51, 7, 0, 396, 397, 6, 51, 8, 0, 397, 107, 1, 0, 0, 0, 398, 399, 5, 10, 0, 0, 399, 400, 1, 0, 0, 0, 400, 401, 6, 52, 9, 0, 401, 402, 6, 52, 10, 0, 402, 109, 1, 0, 0, 0, 403, 408, 3, 32, 14, 0, 404, 407, 3, 30, 13, 0, 405, 407, 5, 45, 0, 0, 406, 404, 1, 0, 0, 0, 406, 405, 1, 0, 0, 0, 407, 410, 1, 0, 0, 0, 408, 406, 1, 0, 0, 0, 408, 409, 1, 0, 0, 0, 409, 411, 1, 0, 0, 0, 410, 408, 1, 0, 0, 0, 411, 412, 6, 53, 11, 0, 412, 413, 1, 0, 0, 0, 413, 414, 6, 53, 12, 0, 414, 111, 1, 0, 0, 0, 415, 416, 5, 10, 0, 0, 416, 417, 1, 0, 0, 0, 417, 418, 6, 54, 9, 0, 418, 113, 1, 0, 0, 0, 419, 420, 5, 36, 0, 0, 420, 421, 5, 123, 0, 0, 421, 422, 1, 0, 0, 0, 422, 423, 6, 55, 13, 0, 423, 424, 1, 0, 0, 0, 424, 425, 6, 55, 14, 0, 425, 426, 6, 55, 6, 0, 426, 115, 1, 0, 0, 0, 427, 429, 3, 118, 57, 0, 428, 427, 1, 0, 0, 0, 429, 430, 1, 0, 0, 0, 430, 428, 1, 0, 0, 0, 430, 431, 1, 0, 0, 0, 431, 432, 1, 0, 0, 0, 432, 433, 6, 56, 15, 0, 433, 117, 1, 0, 0, 0, 434, 441, 8, 13, 0, 0, 435, 436, 5, 36, 0, 0, 436, 441, 8, 12, 0, 0, 437, 438, 5, 37, 0, 0, 438, 441, 8, 12, 0, 0, 439, 441, 3, 34, 15, 0, 440, 434, 1, 0, 0, 0, 440, 435, 1, 0, 0, 0, 440, 437, 1, 0, 0, 0, 440, 439, 1, 0, 0, 0, 441, 119, 1, 0, 0, 0, 35, 0, 1, 2, 3, 123, 125, 137, 139, 164, 169, 171, 177, 187, 198, 203, 207, 219, 225, 245, 252, 258, 262, 267, 273, 275, 279, 284, 295, 310, 383, 391, 406, 408, 430, 440, 16, 1, 4, 0, 1, 5, 1, 0, 1, 0, 5, 1, 0, 5, 2, 0, 1, 48, 2, 5, 0, 0, 7, 15, 0, 4, 0, 0, 7, 12, 0, 2, 3, 0, 1, 53, 3, 7, 8, 0, 1, 55, 4, 7, 43, 0, 1, 56, 5] \ No newline at end of file +[4, 0, 47, 446, 6, -1, 6, -1, 6, -1, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 2, 38, 7, 38, 2, 39, 7, 39, 2, 40, 7, 40, 2, 41, 7, 41, 2, 42, 7, 42, 2, 43, 7, 43, 2, 44, 7, 44, 2, 45, 7, 45, 2, 46, 7, 46, 2, 47, 7, 47, 2, 48, 7, 48, 2, 49, 7, 49, 2, 50, 7, 50, 2, 51, 7, 51, 2, 52, 7, 52, 2, 53, 7, 53, 2, 54, 7, 54, 2, 55, 7, 55, 2, 56, 7, 56, 2, 57, 7, 57, 1, 0, 1, 0, 1, 0, 5, 0, 124, 8, 0, 10, 0, 12, 0, 127, 9, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 5, 1, 138, 8, 1, 10, 1, 12, 1, 141, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 3, 7, 165, 8, 7, 1, 8, 1, 8, 1, 8, 5, 8, 170, 8, 8, 10, 8, 12, 8, 173, 9, 8, 1, 9, 4, 9, 176, 8, 9, 11, 9, 12, 9, 177, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 1, 10, 5, 10, 186, 8, 10, 10, 10, 12, 10, 189, 9, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 3, 11, 199, 8, 11, 1, 11, 5, 11, 202, 8, 11, 10, 11, 12, 11, 205, 9, 11, 1, 11, 3, 11, 208, 8, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 3, 13, 220, 8, 13, 1, 14, 1, 14, 1, 14, 1, 14, 3, 14, 226, 8, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 3, 15, 246, 8, 15, 1, 16, 1, 16, 1, 17, 4, 17, 251, 8, 17, 11, 17, 12, 17, 252, 1, 17, 1, 17, 5, 17, 257, 8, 17, 10, 17, 12, 17, 260, 9, 17, 1, 17, 3, 17, 263, 8, 17, 1, 17, 4, 17, 266, 8, 17, 11, 17, 12, 17, 267, 1, 17, 1, 17, 4, 17, 272, 8, 17, 11, 17, 12, 17, 273, 3, 17, 276, 8, 17, 1, 18, 1, 18, 3, 18, 280, 8, 18, 1, 18, 4, 18, 283, 8, 18, 11, 18, 12, 18, 284, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 1, 19, 3, 19, 296, 8, 19, 1, 20, 1, 20, 1, 20, 1, 20, 1, 21, 1, 21, 1, 21, 1, 21, 1, 21, 1, 22, 1, 22, 1, 22, 1, 22, 3, 22, 311, 8, 22, 1, 22, 1, 22, 1, 23, 1, 23, 1, 24, 1, 24, 1, 24, 1, 25, 1, 25, 1, 25, 1, 26, 1, 26, 1, 27, 1, 27, 1, 28, 1, 28, 1, 29, 1, 29, 1, 30, 1, 30, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 32, 1, 33, 1, 33, 1, 34, 1, 34, 1, 35, 1, 35, 1, 36, 1, 36, 1, 37, 1, 37, 1, 38, 1, 38, 1, 39, 1, 39, 1, 39, 1, 40, 1, 40, 1, 41, 1, 41, 1, 42, 1, 42, 1, 42, 1, 43, 1, 43, 1, 43, 1, 44, 1, 44, 1, 45, 1, 45, 1, 46, 1, 46, 1, 46, 1, 46, 1, 47, 1, 47, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 48, 1, 49, 4, 49, 382, 8, 49, 11, 49, 12, 49, 383, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 1, 50, 3, 50, 396, 8, 50, 1, 51, 1, 51, 1, 51, 1, 51, 1, 51, 1, 52, 1, 52, 1, 52, 1, 52, 1, 52, 1, 53, 1, 53, 1, 53, 5, 53, 411, 8, 53, 10, 53, 12, 53, 414, 9, 53, 1, 53, 1, 53, 1, 53, 1, 53, 1, 54, 1, 54, 1, 54, 1, 54, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 55, 1, 56, 4, 56, 433, 8, 56, 11, 56, 12, 56, 434, 1, 56, 1, 56, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 1, 57, 3, 57, 445, 8, 57, 1, 187, 0, 58, 4, 1, 6, 2, 8, 3, 10, 4, 12, 5, 14, 6, 16, 7, 18, 0, 20, 8, 22, 9, 24, 10, 26, 11, 28, 12, 30, 0, 32, 0, 34, 0, 36, 0, 38, 13, 40, 0, 42, 14, 44, 15, 46, 16, 48, 17, 50, 18, 52, 19, 54, 20, 56, 21, 58, 22, 60, 23, 62, 24, 64, 25, 66, 26, 68, 27, 70, 28, 72, 29, 74, 30, 76, 31, 78, 32, 80, 33, 82, 34, 84, 35, 86, 36, 88, 37, 90, 38, 92, 39, 94, 40, 96, 41, 98, 42, 100, 43, 102, 44, 104, 45, 106, 0, 108, 0, 110, 0, 112, 0, 114, 0, 116, 46, 118, 47, 4, 0, 1, 2, 3, 14, 4, 0, 10, 10, 13, 13, 34, 34, 36, 37, 3, 0, 9, 9, 12, 13, 32, 32, 2, 0, 10, 10, 13, 13, 1, 0, 48, 57, 4, 0, 36, 36, 65, 90, 95, 95, 97, 122, 2, 0, 0, 127, 55296, 56319, 1, 0, 55296, 56319, 1, 0, 56320, 57343, 5, 0, 34, 34, 92, 92, 110, 110, 114, 114, 116, 116, 3, 0, 48, 57, 65, 70, 97, 102, 2, 0, 69, 69, 101, 101, 2, 0, 43, 43, 45, 45, 3, 0, 10, 10, 13, 13, 36, 37, 1, 0, 123, 123, 476, 0, 4, 1, 0, 0, 0, 0, 6, 1, 0, 0, 0, 0, 8, 1, 0, 0, 0, 0, 10, 1, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 14, 1, 0, 0, 0, 0, 16, 1, 0, 0, 0, 0, 20, 1, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 24, 1, 0, 0, 0, 0, 26, 1, 0, 0, 0, 0, 28, 1, 0, 0, 0, 0, 38, 1, 0, 0, 0, 0, 42, 1, 0, 0, 0, 0, 44, 1, 0, 0, 0, 0, 46, 1, 0, 0, 0, 0, 48, 1, 0, 0, 0, 0, 50, 1, 0, 0, 0, 0, 52, 1, 0, 0, 0, 0, 54, 1, 0, 0, 0, 0, 56, 1, 0, 0, 0, 0, 58, 1, 0, 0, 0, 0, 60, 1, 0, 0, 0, 0, 62, 1, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 66, 1, 0, 0, 0, 0, 68, 1, 0, 0, 0, 0, 70, 1, 0, 0, 0, 0, 72, 1, 0, 0, 0, 0, 74, 1, 0, 0, 0, 0, 76, 1, 0, 0, 0, 0, 78, 1, 0, 0, 0, 0, 80, 1, 0, 0, 0, 0, 82, 1, 0, 0, 0, 0, 84, 1, 0, 0, 0, 0, 86, 1, 0, 0, 0, 0, 88, 1, 0, 0, 0, 0, 90, 1, 0, 0, 0, 0, 92, 1, 0, 0, 0, 0, 94, 1, 0, 0, 0, 0, 96, 1, 0, 0, 0, 0, 98, 1, 0, 0, 0, 1, 100, 1, 0, 0, 0, 1, 102, 1, 0, 0, 0, 1, 104, 1, 0, 0, 0, 1, 106, 1, 0, 0, 0, 2, 108, 1, 0, 0, 0, 2, 110, 1, 0, 0, 0, 3, 112, 1, 0, 0, 0, 3, 114, 1, 0, 0, 0, 3, 116, 1, 0, 0, 0, 3, 118, 1, 0, 0, 0, 4, 120, 1, 0, 0, 0, 6, 134, 1, 0, 0, 0, 8, 148, 1, 0, 0, 0, 10, 151, 1, 0, 0, 0, 12, 154, 1, 0, 0, 0, 14, 157, 1, 0, 0, 0, 16, 160, 1, 0, 0, 0, 18, 164, 1, 0, 0, 0, 20, 166, 1, 0, 0, 0, 22, 175, 1, 0, 0, 0, 24, 181, 1, 0, 0, 0, 26, 198, 1, 0, 0, 0, 28, 213, 1, 0, 0, 0, 30, 219, 1, 0, 0, 0, 32, 225, 1, 0, 0, 0, 34, 245, 1, 0, 0, 0, 36, 247, 1, 0, 0, 0, 38, 275, 1, 0, 0, 0, 40, 277, 1, 0, 0, 0, 42, 295, 1, 0, 0, 0, 44, 297, 1, 0, 0, 0, 46, 301, 1, 0, 0, 0, 48, 306, 1, 0, 0, 0, 50, 314, 1, 0, 0, 0, 52, 316, 1, 0, 0, 0, 54, 319, 1, 0, 0, 0, 56, 322, 1, 0, 0, 0, 58, 324, 1, 0, 0, 0, 60, 326, 1, 0, 0, 0, 62, 328, 1, 0, 0, 0, 64, 330, 1, 0, 0, 0, 66, 332, 1, 0, 0, 0, 68, 335, 1, 0, 0, 0, 70, 338, 1, 0, 0, 0, 72, 340, 1, 0, 0, 0, 74, 342, 1, 0, 0, 0, 76, 344, 1, 0, 0, 0, 78, 346, 1, 0, 0, 0, 80, 348, 1, 0, 0, 0, 82, 350, 1, 0, 0, 0, 84, 353, 1, 0, 0, 0, 86, 355, 1, 0, 0, 0, 88, 357, 1, 0, 0, 0, 90, 360, 1, 0, 0, 0, 92, 363, 1, 0, 0, 0, 94, 365, 1, 0, 0, 0, 96, 367, 1, 0, 0, 0, 98, 371, 1, 0, 0, 0, 100, 373, 1, 0, 0, 0, 102, 381, 1, 0, 0, 0, 104, 395, 1, 0, 0, 0, 106, 397, 1, 0, 0, 0, 108, 402, 1, 0, 0, 0, 110, 407, 1, 0, 0, 0, 112, 419, 1, 0, 0, 0, 114, 423, 1, 0, 0, 0, 116, 432, 1, 0, 0, 0, 118, 444, 1, 0, 0, 0, 120, 125, 5, 123, 0, 0, 121, 124, 3, 22, 9, 0, 122, 124, 3, 28, 12, 0, 123, 121, 1, 0, 0, 0, 123, 122, 1, 0, 0, 0, 124, 127, 1, 0, 0, 0, 125, 123, 1, 0, 0, 0, 125, 126, 1, 0, 0, 0, 126, 128, 1, 0, 0, 0, 127, 125, 1, 0, 0, 0, 128, 129, 5, 102, 0, 0, 129, 130, 5, 111, 0, 0, 130, 131, 5, 114, 0, 0, 131, 132, 1, 0, 0, 0, 132, 133, 3, 22, 9, 0, 133, 5, 1, 0, 0, 0, 134, 139, 5, 91, 0, 0, 135, 138, 3, 22, 9, 0, 136, 138, 3, 28, 12, 0, 137, 135, 1, 0, 0, 0, 137, 136, 1, 0, 0, 0, 138, 141, 1, 0, 0, 0, 139, 137, 1, 0, 0, 0, 139, 140, 1, 0, 0, 0, 140, 142, 1, 0, 0, 0, 141, 139, 1, 0, 0, 0, 142, 143, 5, 102, 0, 0, 143, 144, 5, 111, 0, 0, 144, 145, 5, 114, 0, 0, 145, 146, 1, 0, 0, 0, 146, 147, 3, 22, 9, 0, 147, 7, 1, 0, 0, 0, 148, 149, 5, 105, 0, 0, 149, 150, 5, 102, 0, 0, 150, 9, 1, 0, 0, 0, 151, 152, 5, 105, 0, 0, 152, 153, 5, 110, 0, 0, 153, 11, 1, 0, 0, 0, 154, 155, 5, 123, 0, 0, 155, 156, 6, 4, 0, 0, 156, 13, 1, 0, 0, 0, 157, 158, 5, 125, 0, 0, 158, 159, 6, 5, 1, 0, 159, 15, 1, 0, 0, 0, 160, 161, 5, 61, 0, 0, 161, 17, 1, 0, 0, 0, 162, 165, 8, 0, 0, 0, 163, 165, 3, 34, 15, 0, 164, 162, 1, 0, 0, 0, 164, 163, 1, 0, 0, 0, 165, 19, 1, 0, 0, 0, 166, 171, 3, 32, 14, 0, 167, 170, 3, 30, 13, 0, 168, 170, 5, 45, 0, 0, 169, 167, 1, 0, 0, 0, 169, 168, 1, 0, 0, 0, 170, 173, 1, 0, 0, 0, 171, 169, 1, 0, 0, 0, 171, 172, 1, 0, 0, 0, 172, 21, 1, 0, 0, 0, 173, 171, 1, 0, 0, 0, 174, 176, 7, 1, 0, 0, 175, 174, 1, 0, 0, 0, 176, 177, 1, 0, 0, 0, 177, 175, 1, 0, 0, 0, 177, 178, 1, 0, 0, 0, 178, 179, 1, 0, 0, 0, 179, 180, 6, 9, 2, 0, 180, 23, 1, 0, 0, 0, 181, 182, 5, 47, 0, 0, 182, 183, 5, 42, 0, 0, 183, 187, 1, 0, 0, 0, 184, 186, 9, 0, 0, 0, 185, 184, 1, 0, 0, 0, 186, 189, 1, 0, 0, 0, 187, 188, 1, 0, 0, 0, 187, 185, 1, 0, 0, 0, 188, 190, 1, 0, 0, 0, 189, 187, 1, 0, 0, 0, 190, 191, 5, 42, 0, 0, 191, 192, 5, 47, 0, 0, 192, 193, 1, 0, 0, 0, 193, 194, 6, 10, 2, 0, 194, 25, 1, 0, 0, 0, 195, 196, 5, 47, 0, 0, 196, 199, 5, 47, 0, 0, 197, 199, 5, 35, 0, 0, 198, 195, 1, 0, 0, 0, 198, 197, 1, 0, 0, 0, 199, 203, 1, 0, 0, 0, 200, 202, 8, 2, 0, 0, 201, 200, 1, 0, 0, 0, 202, 205, 1, 0, 0, 0, 203, 201, 1, 0, 0, 0, 203, 204, 1, 0, 0, 0, 204, 207, 1, 0, 0, 0, 205, 203, 1, 0, 0, 0, 206, 208, 5, 13, 0, 0, 207, 206, 1, 0, 0, 0, 207, 208, 1, 0, 0, 0, 208, 209, 1, 0, 0, 0, 209, 210, 5, 10, 0, 0, 210, 211, 1, 0, 0, 0, 211, 212, 6, 11, 2, 0, 212, 27, 1, 0, 0, 0, 213, 214, 5, 10, 0, 0, 214, 215, 1, 0, 0, 0, 215, 216, 6, 12, 2, 0, 216, 29, 1, 0, 0, 0, 217, 220, 3, 32, 14, 0, 218, 220, 7, 3, 0, 0, 219, 217, 1, 0, 0, 0, 219, 218, 1, 0, 0, 0, 220, 31, 1, 0, 0, 0, 221, 226, 7, 4, 0, 0, 222, 226, 8, 5, 0, 0, 223, 224, 7, 6, 0, 0, 224, 226, 7, 7, 0, 0, 225, 221, 1, 0, 0, 0, 225, 222, 1, 0, 0, 0, 225, 223, 1, 0, 0, 0, 226, 33, 1, 0, 0, 0, 227, 228, 5, 92, 0, 0, 228, 246, 7, 8, 0, 0, 229, 230, 5, 92, 0, 0, 230, 231, 3, 36, 16, 0, 231, 232, 3, 36, 16, 0, 232, 233, 3, 36, 16, 0, 233, 234, 3, 36, 16, 0, 234, 246, 1, 0, 0, 0, 235, 236, 5, 92, 0, 0, 236, 237, 3, 36, 16, 0, 237, 238, 3, 36, 16, 0, 238, 239, 3, 36, 16, 0, 239, 240, 3, 36, 16, 0, 240, 241, 3, 36, 16, 0, 241, 242, 3, 36, 16, 0, 242, 243, 3, 36, 16, 0, 243, 244, 3, 36, 16, 0, 244, 246, 1, 0, 0, 0, 245, 227, 1, 0, 0, 0, 245, 229, 1, 0, 0, 0, 245, 235, 1, 0, 0, 0, 246, 35, 1, 0, 0, 0, 247, 248, 7, 9, 0, 0, 248, 37, 1, 0, 0, 0, 249, 251, 7, 3, 0, 0, 250, 249, 1, 0, 0, 0, 251, 252, 1, 0, 0, 0, 252, 250, 1, 0, 0, 0, 252, 253, 1, 0, 0, 0, 253, 254, 1, 0, 0, 0, 254, 258, 5, 46, 0, 0, 255, 257, 7, 3, 0, 0, 256, 255, 1, 0, 0, 0, 257, 260, 1, 0, 0, 0, 258, 256, 1, 0, 0, 0, 258, 259, 1, 0, 0, 0, 259, 262, 1, 0, 0, 0, 260, 258, 1, 0, 0, 0, 261, 263, 3, 40, 18, 0, 262, 261, 1, 0, 0, 0, 262, 263, 1, 0, 0, 0, 263, 276, 1, 0, 0, 0, 264, 266, 7, 3, 0, 0, 265, 264, 1, 0, 0, 0, 266, 267, 1, 0, 0, 0, 267, 265, 1, 0, 0, 0, 267, 268, 1, 0, 0, 0, 268, 269, 1, 0, 0, 0, 269, 276, 3, 40, 18, 0, 270, 272, 7, 3, 0, 0, 271, 270, 1, 0, 0, 0, 272, 273, 1, 0, 0, 0, 273, 271, 1, 0, 0, 0, 273, 274, 1, 0, 0, 0, 274, 276, 1, 0, 0, 0, 275, 250, 1, 0, 0, 0, 275, 265, 1, 0, 0, 0, 275, 271, 1, 0, 0, 0, 276, 39, 1, 0, 0, 0, 277, 279, 7, 10, 0, 0, 278, 280, 7, 11, 0, 0, 279, 278, 1, 0, 0, 0, 279, 280, 1, 0, 0, 0, 280, 282, 1, 0, 0, 0, 281, 283, 7, 3, 0, 0, 282, 281, 1, 0, 0, 0, 283, 284, 1, 0, 0, 0, 284, 282, 1, 0, 0, 0, 284, 285, 1, 0, 0, 0, 285, 41, 1, 0, 0, 0, 286, 287, 5, 116, 0, 0, 287, 288, 5, 114, 0, 0, 288, 289, 5, 117, 0, 0, 289, 296, 5, 101, 0, 0, 290, 291, 5, 102, 0, 0, 291, 292, 5, 97, 0, 0, 292, 293, 5, 108, 0, 0, 293, 294, 5, 115, 0, 0, 294, 296, 5, 101, 0, 0, 295, 286, 1, 0, 0, 0, 295, 290, 1, 0, 0, 0, 296, 43, 1, 0, 0, 0, 297, 298, 5, 34, 0, 0, 298, 299, 1, 0, 0, 0, 299, 300, 6, 20, 3, 0, 300, 45, 1, 0, 0, 0, 301, 302, 5, 110, 0, 0, 302, 303, 5, 117, 0, 0, 303, 304, 5, 108, 0, 0, 304, 305, 5, 108, 0, 0, 305, 47, 1, 0, 0, 0, 306, 307, 5, 60, 0, 0, 307, 308, 5, 60, 0, 0, 308, 310, 1, 0, 0, 0, 309, 311, 5, 45, 0, 0, 310, 309, 1, 0, 0, 0, 310, 311, 1, 0, 0, 0, 311, 312, 1, 0, 0, 0, 312, 313, 6, 22, 4, 0, 313, 49, 1, 0, 0, 0, 314, 315, 5, 43, 0, 0, 315, 51, 1, 0, 0, 0, 316, 317, 5, 38, 0, 0, 317, 318, 5, 38, 0, 0, 318, 53, 1, 0, 0, 0, 319, 320, 5, 61, 0, 0, 320, 321, 5, 61, 0, 0, 321, 55, 1, 0, 0, 0, 322, 323, 5, 60, 0, 0, 323, 57, 1, 0, 0, 0, 324, 325, 5, 58, 0, 0, 325, 59, 1, 0, 0, 0, 326, 327, 5, 91, 0, 0, 327, 61, 1, 0, 0, 0, 328, 329, 5, 40, 0, 0, 329, 63, 1, 0, 0, 0, 330, 331, 5, 45, 0, 0, 331, 65, 1, 0, 0, 0, 332, 333, 5, 124, 0, 0, 333, 334, 5, 124, 0, 0, 334, 67, 1, 0, 0, 0, 335, 336, 5, 33, 0, 0, 336, 337, 5, 61, 0, 0, 337, 69, 1, 0, 0, 0, 338, 339, 5, 62, 0, 0, 339, 71, 1, 0, 0, 0, 340, 341, 5, 63, 0, 0, 341, 73, 1, 0, 0, 0, 342, 343, 5, 93, 0, 0, 343, 75, 1, 0, 0, 0, 344, 345, 5, 41, 0, 0, 345, 77, 1, 0, 0, 0, 346, 347, 5, 42, 0, 0, 347, 79, 1, 0, 0, 0, 348, 349, 5, 33, 0, 0, 349, 81, 1, 0, 0, 0, 350, 351, 5, 60, 0, 0, 351, 352, 5, 61, 0, 0, 352, 83, 1, 0, 0, 0, 353, 354, 5, 46, 0, 0, 354, 85, 1, 0, 0, 0, 355, 356, 5, 47, 0, 0, 356, 87, 1, 0, 0, 0, 357, 358, 5, 62, 0, 0, 358, 359, 5, 61, 0, 0, 359, 89, 1, 0, 0, 0, 360, 361, 5, 61, 0, 0, 361, 362, 5, 62, 0, 0, 362, 91, 1, 0, 0, 0, 363, 364, 5, 44, 0, 0, 364, 93, 1, 0, 0, 0, 365, 366, 5, 37, 0, 0, 366, 95, 1, 0, 0, 0, 367, 368, 5, 46, 0, 0, 368, 369, 5, 46, 0, 0, 369, 370, 5, 46, 0, 0, 370, 97, 1, 0, 0, 0, 371, 372, 5, 126, 0, 0, 372, 99, 1, 0, 0, 0, 373, 374, 5, 36, 0, 0, 374, 375, 5, 123, 0, 0, 375, 376, 1, 0, 0, 0, 376, 377, 6, 48, 5, 0, 377, 378, 1, 0, 0, 0, 378, 379, 6, 48, 6, 0, 379, 101, 1, 0, 0, 0, 380, 382, 3, 104, 50, 0, 381, 380, 1, 0, 0, 0, 382, 383, 1, 0, 0, 0, 383, 381, 1, 0, 0, 0, 383, 384, 1, 0, 0, 0, 384, 103, 1, 0, 0, 0, 385, 396, 8, 0, 0, 0, 386, 387, 5, 36, 0, 0, 387, 396, 5, 36, 0, 0, 388, 389, 5, 36, 0, 0, 389, 396, 4, 50, 0, 0, 390, 391, 5, 37, 0, 0, 391, 396, 5, 37, 0, 0, 392, 393, 5, 37, 0, 0, 393, 396, 4, 50, 1, 0, 394, 396, 3, 34, 15, 0, 395, 385, 1, 0, 0, 0, 395, 386, 1, 0, 0, 0, 395, 388, 1, 0, 0, 0, 395, 390, 1, 0, 0, 0, 395, 392, 1, 0, 0, 0, 395, 394, 1, 0, 0, 0, 396, 105, 1, 0, 0, 0, 397, 398, 5, 34, 0, 0, 398, 399, 1, 0, 0, 0, 399, 400, 6, 51, 7, 0, 400, 401, 6, 51, 8, 0, 401, 107, 1, 0, 0, 0, 402, 403, 5, 10, 0, 0, 403, 404, 1, 0, 0, 0, 404, 405, 6, 52, 9, 0, 405, 406, 6, 52, 10, 0, 406, 109, 1, 0, 0, 0, 407, 412, 3, 32, 14, 0, 408, 411, 3, 30, 13, 0, 409, 411, 5, 45, 0, 0, 410, 408, 1, 0, 0, 0, 410, 409, 1, 0, 0, 0, 411, 414, 1, 0, 0, 0, 412, 410, 1, 0, 0, 0, 412, 413, 1, 0, 0, 0, 413, 415, 1, 0, 0, 0, 414, 412, 1, 0, 0, 0, 415, 416, 6, 53, 11, 0, 416, 417, 1, 0, 0, 0, 417, 418, 6, 53, 12, 0, 418, 111, 1, 0, 0, 0, 419, 420, 5, 10, 0, 0, 420, 421, 1, 0, 0, 0, 421, 422, 6, 54, 9, 0, 422, 113, 1, 0, 0, 0, 423, 424, 5, 36, 0, 0, 424, 425, 5, 123, 0, 0, 425, 426, 1, 0, 0, 0, 426, 427, 6, 55, 13, 0, 427, 428, 1, 0, 0, 0, 428, 429, 6, 55, 14, 0, 429, 430, 6, 55, 6, 0, 430, 115, 1, 0, 0, 0, 431, 433, 3, 118, 57, 0, 432, 431, 1, 0, 0, 0, 433, 434, 1, 0, 0, 0, 434, 432, 1, 0, 0, 0, 434, 435, 1, 0, 0, 0, 435, 436, 1, 0, 0, 0, 436, 437, 6, 56, 15, 0, 437, 117, 1, 0, 0, 0, 438, 445, 8, 12, 0, 0, 439, 440, 5, 36, 0, 0, 440, 445, 8, 13, 0, 0, 441, 442, 5, 37, 0, 0, 442, 445, 8, 13, 0, 0, 443, 445, 3, 34, 15, 0, 444, 438, 1, 0, 0, 0, 444, 439, 1, 0, 0, 0, 444, 441, 1, 0, 0, 0, 444, 443, 1, 0, 0, 0, 445, 119, 1, 0, 0, 0, 35, 0, 1, 2, 3, 123, 125, 137, 139, 164, 169, 171, 177, 187, 198, 203, 207, 219, 225, 245, 252, 258, 262, 267, 273, 275, 279, 284, 295, 310, 383, 395, 410, 412, 434, 444, 16, 1, 4, 0, 1, 5, 1, 0, 1, 0, 5, 1, 0, 5, 2, 0, 1, 48, 2, 5, 0, 0, 7, 15, 0, 4, 0, 0, 7, 12, 0, 2, 3, 0, 1, 53, 3, 7, 8, 0, 1, 55, 4, 7, 43, 0, 1, 56, 5] \ No newline at end of file diff --git a/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLLexer.java b/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLLexer.java index 838bbfe0327..b31ec8e667b 100644 --- a/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLLexer.java +++ b/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLLexer.java @@ -1,5 +1,5 @@ /* - * Copyright 2023 the original author or authors. + * Copyright 2024 the original author or authors. *

* Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -238,9 +238,26 @@ private void HTemplateLiteral_action(RuleContext _localctx, int actionIndex) { break; } } + @Override + public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) { + switch (ruleIndex) { + case 50: + return TemplateStringLiteralChar_sempred((RuleContext)_localctx, predIndex); + } + return true; + } + private boolean TemplateStringLiteralChar_sempred(RuleContext _localctx, int predIndex) { + switch (predIndex) { + case 0: + return _input.LA(1) != '{'; + case 1: + return _input.LA(1) != '{'; + } + return true; + } public static final String _serializedATN = - "\u0004\u0000/\u01ba\u0006\uffff\uffff\u0006\uffff\uffff\u0006\uffff\uffff"+ + "\u0004\u0000/\u01be\u0006\uffff\uffff\u0006\uffff\uffff\u0006\uffff\uffff"+ "\u0006\uffff\uffff\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001\u0002"+ "\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004\u0002"+ "\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002\u0007\u0007\u0007\u0002"+ @@ -296,242 +313,245 @@ private void HTemplateLiteral_action(RuleContext _localctx, int actionIndex) { "+\u0001+\u0001+\u0001,\u0001,\u0001-\u0001-\u0001.\u0001.\u0001.\u0001"+ ".\u0001/\u0001/\u00010\u00010\u00010\u00010\u00010\u00010\u00010\u0001"+ "1\u00041\u017e\b1\u000b1\f1\u017f\u00012\u00012\u00012\u00012\u00012\u0001"+ - "2\u00032\u0188\b2\u00013\u00013\u00013\u00013\u00013\u00014\u00014\u0001"+ - "4\u00014\u00014\u00015\u00015\u00015\u00055\u0197\b5\n5\f5\u019a\t5\u0001"+ - "5\u00015\u00015\u00015\u00016\u00016\u00016\u00016\u00017\u00017\u0001"+ - "7\u00017\u00017\u00017\u00017\u00017\u00018\u00048\u01ad\b8\u000b8\f8"+ - "\u01ae\u00018\u00018\u00019\u00019\u00019\u00019\u00019\u00019\u00039"+ - "\u01b9\b9\u0001\u00bb\u0000:\u0004\u0001\u0006\u0002\b\u0003\n\u0004\f"+ - "\u0005\u000e\u0006\u0010\u0007\u0012\u0000\u0014\b\u0016\t\u0018\n\u001a"+ - "\u000b\u001c\f\u001e\u0000 \u0000\"\u0000$\u0000&\r(\u0000*\u000e,\u000f"+ - ".\u00100\u00112\u00124\u00136\u00148\u0015:\u0016<\u0017>\u0018@\u0019"+ - "B\u001aD\u001bF\u001cH\u001dJ\u001eL\u001fN P!R\"T#V$X%Z&\\\'^(`)b*d+"+ - "f,h-j\u0000l\u0000n\u0000p\u0000r\u0000t.v/\u0004\u0000\u0001\u0002\u0003"+ - "\u000e\u0004\u0000\n\n\r\r\"\"$%\u0003\u0000\t\t\f\r \u0002\u0000\n\n"+ - "\r\r\u0001\u000009\u0004\u0000$$AZ__az\u0002\u0000\u0000\u007f\u8000\ud800"+ - "\u8000\udbff\u0001\u0000\u8000\ud800\u8000\udbff\u0001\u0000\u8000\udc00"+ - "\u8000\udfff\u0005\u0000\"\"\\\\nnrrtt\u0003\u000009AFaf\u0002\u0000E"+ - "Eee\u0002\u0000++--\u0001\u0000{{\u0003\u0000\n\n\r\r$%\u01d6\u0000\u0004"+ - "\u0001\u0000\u0000\u0000\u0000\u0006\u0001\u0000\u0000\u0000\u0000\b\u0001"+ - "\u0000\u0000\u0000\u0000\n\u0001\u0000\u0000\u0000\u0000\f\u0001\u0000"+ - "\u0000\u0000\u0000\u000e\u0001\u0000\u0000\u0000\u0000\u0010\u0001\u0000"+ - "\u0000\u0000\u0000\u0014\u0001\u0000\u0000\u0000\u0000\u0016\u0001\u0000"+ - "\u0000\u0000\u0000\u0018\u0001\u0000\u0000\u0000\u0000\u001a\u0001\u0000"+ - "\u0000\u0000\u0000\u001c\u0001\u0000\u0000\u0000\u0000&\u0001\u0000\u0000"+ - "\u0000\u0000*\u0001\u0000\u0000\u0000\u0000,\u0001\u0000\u0000\u0000\u0000"+ - ".\u0001\u0000\u0000\u0000\u00000\u0001\u0000\u0000\u0000\u00002\u0001"+ - "\u0000\u0000\u0000\u00004\u0001\u0000\u0000\u0000\u00006\u0001\u0000\u0000"+ - "\u0000\u00008\u0001\u0000\u0000\u0000\u0000:\u0001\u0000\u0000\u0000\u0000"+ - "<\u0001\u0000\u0000\u0000\u0000>\u0001\u0000\u0000\u0000\u0000@\u0001"+ - "\u0000\u0000\u0000\u0000B\u0001\u0000\u0000\u0000\u0000D\u0001\u0000\u0000"+ - "\u0000\u0000F\u0001\u0000\u0000\u0000\u0000H\u0001\u0000\u0000\u0000\u0000"+ - "J\u0001\u0000\u0000\u0000\u0000L\u0001\u0000\u0000\u0000\u0000N\u0001"+ - "\u0000\u0000\u0000\u0000P\u0001\u0000\u0000\u0000\u0000R\u0001\u0000\u0000"+ - "\u0000\u0000T\u0001\u0000\u0000\u0000\u0000V\u0001\u0000\u0000\u0000\u0000"+ - "X\u0001\u0000\u0000\u0000\u0000Z\u0001\u0000\u0000\u0000\u0000\\\u0001"+ - "\u0000\u0000\u0000\u0000^\u0001\u0000\u0000\u0000\u0000`\u0001\u0000\u0000"+ - "\u0000\u0000b\u0001\u0000\u0000\u0000\u0001d\u0001\u0000\u0000\u0000\u0001"+ - "f\u0001\u0000\u0000\u0000\u0001h\u0001\u0000\u0000\u0000\u0001j\u0001"+ - "\u0000\u0000\u0000\u0002l\u0001\u0000\u0000\u0000\u0002n\u0001\u0000\u0000"+ - "\u0000\u0003p\u0001\u0000\u0000\u0000\u0003r\u0001\u0000\u0000\u0000\u0003"+ - "t\u0001\u0000\u0000\u0000\u0003v\u0001\u0000\u0000\u0000\u0004x\u0001"+ - "\u0000\u0000\u0000\u0006\u0086\u0001\u0000\u0000\u0000\b\u0094\u0001\u0000"+ - "\u0000\u0000\n\u0097\u0001\u0000\u0000\u0000\f\u009a\u0001\u0000\u0000"+ - "\u0000\u000e\u009d\u0001\u0000\u0000\u0000\u0010\u00a0\u0001\u0000\u0000"+ - "\u0000\u0012\u00a4\u0001\u0000\u0000\u0000\u0014\u00a6\u0001\u0000\u0000"+ - "\u0000\u0016\u00af\u0001\u0000\u0000\u0000\u0018\u00b5\u0001\u0000\u0000"+ - "\u0000\u001a\u00c6\u0001\u0000\u0000\u0000\u001c\u00d5\u0001\u0000\u0000"+ - "\u0000\u001e\u00db\u0001\u0000\u0000\u0000 \u00e1\u0001\u0000\u0000\u0000"+ - "\"\u00f5\u0001\u0000\u0000\u0000$\u00f7\u0001\u0000\u0000\u0000&\u0113"+ - "\u0001\u0000\u0000\u0000(\u0115\u0001\u0000\u0000\u0000*\u0127\u0001\u0000"+ - "\u0000\u0000,\u0129\u0001\u0000\u0000\u0000.\u012d\u0001\u0000\u0000\u0000"+ - "0\u0132\u0001\u0000\u0000\u00002\u013a\u0001\u0000\u0000\u00004\u013c"+ - "\u0001\u0000\u0000\u00006\u013f\u0001\u0000\u0000\u00008\u0142\u0001\u0000"+ - "\u0000\u0000:\u0144\u0001\u0000\u0000\u0000<\u0146\u0001\u0000\u0000\u0000"+ - ">\u0148\u0001\u0000\u0000\u0000@\u014a\u0001\u0000\u0000\u0000B\u014c"+ - "\u0001\u0000\u0000\u0000D\u014f\u0001\u0000\u0000\u0000F\u0152\u0001\u0000"+ - "\u0000\u0000H\u0154\u0001\u0000\u0000\u0000J\u0156\u0001\u0000\u0000\u0000"+ - "L\u0158\u0001\u0000\u0000\u0000N\u015a\u0001\u0000\u0000\u0000P\u015c"+ - "\u0001\u0000\u0000\u0000R\u015e\u0001\u0000\u0000\u0000T\u0161\u0001\u0000"+ - "\u0000\u0000V\u0163\u0001\u0000\u0000\u0000X\u0165\u0001\u0000\u0000\u0000"+ - "Z\u0168\u0001\u0000\u0000\u0000\\\u016b\u0001\u0000\u0000\u0000^\u016d"+ - "\u0001\u0000\u0000\u0000`\u016f\u0001\u0000\u0000\u0000b\u0173\u0001\u0000"+ - "\u0000\u0000d\u0175\u0001\u0000\u0000\u0000f\u017d\u0001\u0000\u0000\u0000"+ - "h\u0187\u0001\u0000\u0000\u0000j\u0189\u0001\u0000\u0000\u0000l\u018e"+ - "\u0001\u0000\u0000\u0000n\u0193\u0001\u0000\u0000\u0000p\u019f\u0001\u0000"+ - "\u0000\u0000r\u01a3\u0001\u0000\u0000\u0000t\u01ac\u0001\u0000\u0000\u0000"+ - "v\u01b8\u0001\u0000\u0000\u0000x}\u0005{\u0000\u0000y|\u0003\u0016\t\u0000"+ - "z|\u0003\u001c\f\u0000{y\u0001\u0000\u0000\u0000{z\u0001\u0000\u0000\u0000"+ - "|\u007f\u0001\u0000\u0000\u0000}{\u0001\u0000\u0000\u0000}~\u0001\u0000"+ - "\u0000\u0000~\u0080\u0001\u0000\u0000\u0000\u007f}\u0001\u0000\u0000\u0000"+ - "\u0080\u0081\u0005f\u0000\u0000\u0081\u0082\u0005o\u0000\u0000\u0082\u0083"+ - "\u0005r\u0000\u0000\u0083\u0084\u0001\u0000\u0000\u0000\u0084\u0085\u0003"+ - "\u0016\t\u0000\u0085\u0005\u0001\u0000\u0000\u0000\u0086\u008b\u0005["+ - "\u0000\u0000\u0087\u008a\u0003\u0016\t\u0000\u0088\u008a\u0003\u001c\f"+ - "\u0000\u0089\u0087\u0001\u0000\u0000\u0000\u0089\u0088\u0001\u0000\u0000"+ - "\u0000\u008a\u008d\u0001\u0000\u0000\u0000\u008b\u0089\u0001\u0000\u0000"+ - "\u0000\u008b\u008c\u0001\u0000\u0000\u0000\u008c\u008e\u0001\u0000\u0000"+ - "\u0000\u008d\u008b\u0001\u0000\u0000\u0000\u008e\u008f\u0005f\u0000\u0000"+ - "\u008f\u0090\u0005o\u0000\u0000\u0090\u0091\u0005r\u0000\u0000\u0091\u0092"+ - "\u0001\u0000\u0000\u0000\u0092\u0093\u0003\u0016\t\u0000\u0093\u0007\u0001"+ - "\u0000\u0000\u0000\u0094\u0095\u0005i\u0000\u0000\u0095\u0096\u0005f\u0000"+ - "\u0000\u0096\t\u0001\u0000\u0000\u0000\u0097\u0098\u0005i\u0000\u0000"+ - "\u0098\u0099\u0005n\u0000\u0000\u0099\u000b\u0001\u0000\u0000\u0000\u009a"+ - "\u009b\u0005{\u0000\u0000\u009b\u009c\u0006\u0004\u0000\u0000\u009c\r"+ - "\u0001\u0000\u0000\u0000\u009d\u009e\u0005}\u0000\u0000\u009e\u009f\u0006"+ - "\u0005\u0001\u0000\u009f\u000f\u0001\u0000\u0000\u0000\u00a0\u00a1\u0005"+ - "=\u0000\u0000\u00a1\u0011\u0001\u0000\u0000\u0000\u00a2\u00a5\b\u0000"+ - "\u0000\u0000\u00a3\u00a5\u0003\"\u000f\u0000\u00a4\u00a2\u0001\u0000\u0000"+ - "\u0000\u00a4\u00a3\u0001\u0000\u0000\u0000\u00a5\u0013\u0001\u0000\u0000"+ - "\u0000\u00a6\u00ab\u0003 \u000e\u0000\u00a7\u00aa\u0003\u001e\r\u0000"+ - "\u00a8\u00aa\u0005-\u0000\u0000\u00a9\u00a7\u0001\u0000\u0000\u0000\u00a9"+ - "\u00a8\u0001\u0000\u0000\u0000\u00aa\u00ad\u0001\u0000\u0000\u0000\u00ab"+ - "\u00a9\u0001\u0000\u0000\u0000\u00ab\u00ac\u0001\u0000\u0000\u0000\u00ac"+ - "\u0015\u0001\u0000\u0000\u0000\u00ad\u00ab\u0001\u0000\u0000\u0000\u00ae"+ - "\u00b0\u0007\u0001\u0000\u0000\u00af\u00ae\u0001\u0000\u0000\u0000\u00b0"+ - "\u00b1\u0001\u0000\u0000\u0000\u00b1\u00af\u0001\u0000\u0000\u0000\u00b1"+ - "\u00b2\u0001\u0000\u0000\u0000\u00b2\u00b3\u0001\u0000\u0000\u0000\u00b3"+ - "\u00b4\u0006\t\u0002\u0000\u00b4\u0017\u0001\u0000\u0000\u0000\u00b5\u00b6"+ - "\u0005/\u0000\u0000\u00b6\u00b7\u0005*\u0000\u0000\u00b7\u00bb\u0001\u0000"+ - "\u0000\u0000\u00b8\u00ba\t\u0000\u0000\u0000\u00b9\u00b8\u0001\u0000\u0000"+ - "\u0000\u00ba\u00bd\u0001\u0000\u0000\u0000\u00bb\u00bc\u0001\u0000\u0000"+ - "\u0000\u00bb\u00b9\u0001\u0000\u0000\u0000\u00bc\u00be\u0001\u0000\u0000"+ - "\u0000\u00bd\u00bb\u0001\u0000\u0000\u0000\u00be\u00bf\u0005*\u0000\u0000"+ - "\u00bf\u00c0\u0005/\u0000\u0000\u00c0\u00c1\u0001\u0000\u0000\u0000\u00c1"+ - "\u00c2\u0006\n\u0002\u0000\u00c2\u0019\u0001\u0000\u0000\u0000\u00c3\u00c4"+ - "\u0005/\u0000\u0000\u00c4\u00c7\u0005/\u0000\u0000\u00c5\u00c7\u0005#"+ - "\u0000\u0000\u00c6\u00c3\u0001\u0000\u0000\u0000\u00c6\u00c5\u0001\u0000"+ - "\u0000\u0000\u00c7\u00cb\u0001\u0000\u0000\u0000\u00c8\u00ca\b\u0002\u0000"+ - "\u0000\u00c9\u00c8\u0001\u0000\u0000\u0000\u00ca\u00cd\u0001\u0000\u0000"+ - "\u0000\u00cb\u00c9\u0001\u0000\u0000\u0000\u00cb\u00cc\u0001\u0000\u0000"+ - "\u0000\u00cc\u00cf\u0001\u0000\u0000\u0000\u00cd\u00cb\u0001\u0000\u0000"+ - "\u0000\u00ce\u00d0\u0005\r\u0000\u0000\u00cf\u00ce\u0001\u0000\u0000\u0000"+ - "\u00cf\u00d0\u0001\u0000\u0000\u0000\u00d0\u00d1\u0001\u0000\u0000\u0000"+ - "\u00d1\u00d2\u0005\n\u0000\u0000\u00d2\u00d3\u0001\u0000\u0000\u0000\u00d3"+ - "\u00d4\u0006\u000b\u0002\u0000\u00d4\u001b\u0001\u0000\u0000\u0000\u00d5"+ - "\u00d6\u0005\n\u0000\u0000\u00d6\u00d7\u0001\u0000\u0000\u0000\u00d7\u00d8"+ - "\u0006\f\u0002\u0000\u00d8\u001d\u0001\u0000\u0000\u0000\u00d9\u00dc\u0003"+ - " \u000e\u0000\u00da\u00dc\u0007\u0003\u0000\u0000\u00db\u00d9\u0001\u0000"+ - "\u0000\u0000\u00db\u00da\u0001\u0000\u0000\u0000\u00dc\u001f\u0001\u0000"+ - "\u0000\u0000\u00dd\u00e2\u0007\u0004\u0000\u0000\u00de\u00e2\b\u0005\u0000"+ - "\u0000\u00df\u00e0\u0007\u0006\u0000\u0000\u00e0\u00e2\u0007\u0007\u0000"+ - "\u0000\u00e1\u00dd\u0001\u0000\u0000\u0000\u00e1\u00de\u0001\u0000\u0000"+ - "\u0000\u00e1\u00df\u0001\u0000\u0000\u0000\u00e2!\u0001\u0000\u0000\u0000"+ - "\u00e3\u00e4\u0005\\\u0000\u0000\u00e4\u00f6\u0007\b\u0000\u0000\u00e5"+ - "\u00e6\u0005\\\u0000\u0000\u00e6\u00e7\u0003$\u0010\u0000\u00e7\u00e8"+ - "\u0003$\u0010\u0000\u00e8\u00e9\u0003$\u0010\u0000\u00e9\u00ea\u0003$"+ - "\u0010\u0000\u00ea\u00f6\u0001\u0000\u0000\u0000\u00eb\u00ec\u0005\\\u0000"+ - "\u0000\u00ec\u00ed\u0003$\u0010\u0000\u00ed\u00ee\u0003$\u0010\u0000\u00ee"+ - "\u00ef\u0003$\u0010\u0000\u00ef\u00f0\u0003$\u0010\u0000\u00f0\u00f1\u0003"+ - "$\u0010\u0000\u00f1\u00f2\u0003$\u0010\u0000\u00f2\u00f3\u0003$\u0010"+ - "\u0000\u00f3\u00f4\u0003$\u0010\u0000\u00f4\u00f6\u0001\u0000\u0000\u0000"+ - "\u00f5\u00e3\u0001\u0000\u0000\u0000\u00f5\u00e5\u0001\u0000\u0000\u0000"+ - "\u00f5\u00eb\u0001\u0000\u0000\u0000\u00f6#\u0001\u0000\u0000\u0000\u00f7"+ - "\u00f8\u0007\t\u0000\u0000\u00f8%\u0001\u0000\u0000\u0000\u00f9\u00fb"+ - "\u0007\u0003\u0000\u0000\u00fa\u00f9\u0001\u0000\u0000\u0000\u00fb\u00fc"+ - "\u0001\u0000\u0000\u0000\u00fc\u00fa\u0001\u0000\u0000\u0000\u00fc\u00fd"+ - "\u0001\u0000\u0000\u0000\u00fd\u00fe\u0001\u0000\u0000\u0000\u00fe\u0102"+ - "\u0005.\u0000\u0000\u00ff\u0101\u0007\u0003\u0000\u0000\u0100\u00ff\u0001"+ - "\u0000\u0000\u0000\u0101\u0104\u0001\u0000\u0000\u0000\u0102\u0100\u0001"+ - "\u0000\u0000\u0000\u0102\u0103\u0001\u0000\u0000\u0000\u0103\u0106\u0001"+ - "\u0000\u0000\u0000\u0104\u0102\u0001\u0000\u0000\u0000\u0105\u0107\u0003"+ - "(\u0012\u0000\u0106\u0105\u0001\u0000\u0000\u0000\u0106\u0107\u0001\u0000"+ - "\u0000\u0000\u0107\u0114\u0001\u0000\u0000\u0000\u0108\u010a\u0007\u0003"+ - "\u0000\u0000\u0109\u0108\u0001\u0000\u0000\u0000\u010a\u010b\u0001\u0000"+ - "\u0000\u0000\u010b\u0109\u0001\u0000\u0000\u0000\u010b\u010c\u0001\u0000"+ - "\u0000\u0000\u010c\u010d\u0001\u0000\u0000\u0000\u010d\u0114\u0003(\u0012"+ - "\u0000\u010e\u0110\u0007\u0003\u0000\u0000\u010f\u010e\u0001\u0000\u0000"+ - "\u0000\u0110\u0111\u0001\u0000\u0000\u0000\u0111\u010f\u0001\u0000\u0000"+ - "\u0000\u0111\u0112\u0001\u0000\u0000\u0000\u0112\u0114\u0001\u0000\u0000"+ - "\u0000\u0113\u00fa\u0001\u0000\u0000\u0000\u0113\u0109\u0001\u0000\u0000"+ - "\u0000\u0113\u010f\u0001\u0000\u0000\u0000\u0114\'\u0001\u0000\u0000\u0000"+ - "\u0115\u0117\u0007\n\u0000\u0000\u0116\u0118\u0007\u000b\u0000\u0000\u0117"+ - "\u0116\u0001\u0000\u0000\u0000\u0117\u0118\u0001\u0000\u0000\u0000\u0118"+ - "\u011a\u0001\u0000\u0000\u0000\u0119\u011b\u0007\u0003\u0000\u0000\u011a"+ - "\u0119\u0001\u0000\u0000\u0000\u011b\u011c\u0001\u0000\u0000\u0000\u011c"+ - "\u011a\u0001\u0000\u0000\u0000\u011c\u011d\u0001\u0000\u0000\u0000\u011d"+ - ")\u0001\u0000\u0000\u0000\u011e\u011f\u0005t\u0000\u0000\u011f\u0120\u0005"+ - "r\u0000\u0000\u0120\u0121\u0005u\u0000\u0000\u0121\u0128\u0005e\u0000"+ - "\u0000\u0122\u0123\u0005f\u0000\u0000\u0123\u0124\u0005a\u0000\u0000\u0124"+ - "\u0125\u0005l\u0000\u0000\u0125\u0126\u0005s\u0000\u0000\u0126\u0128\u0005"+ - "e\u0000\u0000\u0127\u011e\u0001\u0000\u0000\u0000\u0127\u0122\u0001\u0000"+ - "\u0000\u0000\u0128+\u0001\u0000\u0000\u0000\u0129\u012a\u0005\"\u0000"+ - "\u0000\u012a\u012b\u0001\u0000\u0000\u0000\u012b\u012c\u0006\u0014\u0003"+ - "\u0000\u012c-\u0001\u0000\u0000\u0000\u012d\u012e\u0005n\u0000\u0000\u012e"+ - "\u012f\u0005u\u0000\u0000\u012f\u0130\u0005l\u0000\u0000\u0130\u0131\u0005"+ - "l\u0000\u0000\u0131/\u0001\u0000\u0000\u0000\u0132\u0133\u0005<\u0000"+ - "\u0000\u0133\u0134\u0005<\u0000\u0000\u0134\u0136\u0001\u0000\u0000\u0000"+ - "\u0135\u0137\u0005-\u0000\u0000\u0136\u0135\u0001\u0000\u0000\u0000\u0136"+ - "\u0137\u0001\u0000\u0000\u0000\u0137\u0138\u0001\u0000\u0000\u0000\u0138"+ - "\u0139\u0006\u0016\u0004\u0000\u01391\u0001\u0000\u0000\u0000\u013a\u013b"+ - "\u0005+\u0000\u0000\u013b3\u0001\u0000\u0000\u0000\u013c\u013d\u0005&"+ - "\u0000\u0000\u013d\u013e\u0005&\u0000\u0000\u013e5\u0001\u0000\u0000\u0000"+ - "\u013f\u0140\u0005=\u0000\u0000\u0140\u0141\u0005=\u0000\u0000\u01417"+ - "\u0001\u0000\u0000\u0000\u0142\u0143\u0005<\u0000\u0000\u01439\u0001\u0000"+ - "\u0000\u0000\u0144\u0145\u0005:\u0000\u0000\u0145;\u0001\u0000\u0000\u0000"+ - "\u0146\u0147\u0005[\u0000\u0000\u0147=\u0001\u0000\u0000\u0000\u0148\u0149"+ - "\u0005(\u0000\u0000\u0149?\u0001\u0000\u0000\u0000\u014a\u014b\u0005-"+ - "\u0000\u0000\u014bA\u0001\u0000\u0000\u0000\u014c\u014d\u0005|\u0000\u0000"+ - "\u014d\u014e\u0005|\u0000\u0000\u014eC\u0001\u0000\u0000\u0000\u014f\u0150"+ - "\u0005!\u0000\u0000\u0150\u0151\u0005=\u0000\u0000\u0151E\u0001\u0000"+ - "\u0000\u0000\u0152\u0153\u0005>\u0000\u0000\u0153G\u0001\u0000\u0000\u0000"+ - "\u0154\u0155\u0005?\u0000\u0000\u0155I\u0001\u0000\u0000\u0000\u0156\u0157"+ - "\u0005]\u0000\u0000\u0157K\u0001\u0000\u0000\u0000\u0158\u0159\u0005)"+ - "\u0000\u0000\u0159M\u0001\u0000\u0000\u0000\u015a\u015b\u0005*\u0000\u0000"+ - "\u015bO\u0001\u0000\u0000\u0000\u015c\u015d\u0005!\u0000\u0000\u015dQ"+ - "\u0001\u0000\u0000\u0000\u015e\u015f\u0005<\u0000\u0000\u015f\u0160\u0005"+ - "=\u0000\u0000\u0160S\u0001\u0000\u0000\u0000\u0161\u0162\u0005.\u0000"+ - "\u0000\u0162U\u0001\u0000\u0000\u0000\u0163\u0164\u0005/\u0000\u0000\u0164"+ - "W\u0001\u0000\u0000\u0000\u0165\u0166\u0005>\u0000\u0000\u0166\u0167\u0005"+ - "=\u0000\u0000\u0167Y\u0001\u0000\u0000\u0000\u0168\u0169\u0005=\u0000"+ - "\u0000\u0169\u016a\u0005>\u0000\u0000\u016a[\u0001\u0000\u0000\u0000\u016b"+ - "\u016c\u0005,\u0000\u0000\u016c]\u0001\u0000\u0000\u0000\u016d\u016e\u0005"+ - "%\u0000\u0000\u016e_\u0001\u0000\u0000\u0000\u016f\u0170\u0005.\u0000"+ - "\u0000\u0170\u0171\u0005.\u0000\u0000\u0171\u0172\u0005.\u0000\u0000\u0172"+ - "a\u0001\u0000\u0000\u0000\u0173\u0174\u0005~\u0000\u0000\u0174c\u0001"+ - "\u0000\u0000\u0000\u0175\u0176\u0005$\u0000\u0000\u0176\u0177\u0005{\u0000"+ - "\u0000\u0177\u0178\u0001\u0000\u0000\u0000\u0178\u0179\u00060\u0005\u0000"+ - "\u0179\u017a\u0001\u0000\u0000\u0000\u017a\u017b\u00060\u0006\u0000\u017b"+ - "e\u0001\u0000\u0000\u0000\u017c\u017e\u0003h2\u0000\u017d\u017c\u0001"+ - "\u0000\u0000\u0000\u017e\u017f\u0001\u0000\u0000\u0000\u017f\u017d\u0001"+ - "\u0000\u0000\u0000\u017f\u0180\u0001\u0000\u0000\u0000\u0180g\u0001\u0000"+ - "\u0000\u0000\u0181\u0188\b\u0000\u0000\u0000\u0182\u0183\u0005$\u0000"+ - "\u0000\u0183\u0188\b\f\u0000\u0000\u0184\u0185\u0005%\u0000\u0000\u0185"+ - "\u0188\b\f\u0000\u0000\u0186\u0188\u0003\"\u000f\u0000\u0187\u0181\u0001"+ - "\u0000\u0000\u0000\u0187\u0182\u0001\u0000\u0000\u0000\u0187\u0184\u0001"+ - "\u0000\u0000\u0000\u0187\u0186\u0001\u0000\u0000\u0000\u0188i\u0001\u0000"+ - "\u0000\u0000\u0189\u018a\u0005\"\u0000\u0000\u018a\u018b\u0001\u0000\u0000"+ - "\u0000\u018b\u018c\u00063\u0007\u0000\u018c\u018d\u00063\b\u0000\u018d"+ - "k\u0001\u0000\u0000\u0000\u018e\u018f\u0005\n\u0000\u0000\u018f\u0190"+ - "\u0001\u0000\u0000\u0000\u0190\u0191\u00064\t\u0000\u0191\u0192\u0006"+ - "4\n\u0000\u0192m\u0001\u0000\u0000\u0000\u0193\u0198\u0003 \u000e\u0000"+ - "\u0194\u0197\u0003\u001e\r\u0000\u0195\u0197\u0005-\u0000\u0000\u0196"+ - "\u0194\u0001\u0000\u0000\u0000\u0196\u0195\u0001\u0000\u0000\u0000\u0197"+ - "\u019a\u0001\u0000\u0000\u0000\u0198\u0196\u0001\u0000\u0000\u0000\u0198"+ - "\u0199\u0001\u0000\u0000\u0000\u0199\u019b\u0001\u0000\u0000\u0000\u019a"+ - "\u0198\u0001\u0000\u0000\u0000\u019b\u019c\u00065\u000b\u0000\u019c\u019d"+ - "\u0001\u0000\u0000\u0000\u019d\u019e\u00065\f\u0000\u019eo\u0001\u0000"+ - "\u0000\u0000\u019f\u01a0\u0005\n\u0000\u0000\u01a0\u01a1\u0001\u0000\u0000"+ - "\u0000\u01a1\u01a2\u00066\t\u0000\u01a2q\u0001\u0000\u0000\u0000\u01a3"+ - "\u01a4\u0005$\u0000\u0000\u01a4\u01a5\u0005{\u0000\u0000\u01a5\u01a6\u0001"+ - "\u0000\u0000\u0000\u01a6\u01a7\u00067\r\u0000\u01a7\u01a8\u0001\u0000"+ - "\u0000\u0000\u01a8\u01a9\u00067\u000e\u0000\u01a9\u01aa\u00067\u0006\u0000"+ - "\u01aas\u0001\u0000\u0000\u0000\u01ab\u01ad\u0003v9\u0000\u01ac\u01ab"+ - "\u0001\u0000\u0000\u0000\u01ad\u01ae\u0001\u0000\u0000\u0000\u01ae\u01ac"+ - "\u0001\u0000\u0000\u0000\u01ae\u01af\u0001\u0000\u0000\u0000\u01af\u01b0"+ - "\u0001\u0000\u0000\u0000\u01b0\u01b1\u00068\u000f\u0000\u01b1u\u0001\u0000"+ - "\u0000\u0000\u01b2\u01b9\b\r\u0000\u0000\u01b3\u01b4\u0005$\u0000\u0000"+ - "\u01b4\u01b9\b\f\u0000\u0000\u01b5\u01b6\u0005%\u0000\u0000\u01b6\u01b9"+ - "\b\f\u0000\u0000\u01b7\u01b9\u0003\"\u000f\u0000\u01b8\u01b2\u0001\u0000"+ - "\u0000\u0000\u01b8\u01b3\u0001\u0000\u0000\u0000\u01b8\u01b5\u0001\u0000"+ - "\u0000\u0000\u01b8\u01b7\u0001\u0000\u0000\u0000\u01b9w\u0001\u0000\u0000"+ - "\u0000#\u0000\u0001\u0002\u0003{}\u0089\u008b\u00a4\u00a9\u00ab\u00b1"+ - "\u00bb\u00c6\u00cb\u00cf\u00db\u00e1\u00f5\u00fc\u0102\u0106\u010b\u0111"+ - "\u0113\u0117\u011c\u0127\u0136\u017f\u0187\u0196\u0198\u01ae\u01b8\u0010"+ - "\u0001\u0004\u0000\u0001\u0005\u0001\u0000\u0001\u0000\u0005\u0001\u0000"+ - "\u0005\u0002\u0000\u00010\u0002\u0005\u0000\u0000\u0007\u000f\u0000\u0004"+ - "\u0000\u0000\u0007\f\u0000\u0002\u0003\u0000\u00015\u0003\u0007\b\u0000"+ - "\u00017\u0004\u0007+\u0000\u00018\u0005"; + "2\u00012\u00012\u00012\u00012\u00032\u018c\b2\u00013\u00013\u00013\u0001"+ + "3\u00013\u00014\u00014\u00014\u00014\u00014\u00015\u00015\u00015\u0005"+ + "5\u019b\b5\n5\f5\u019e\t5\u00015\u00015\u00015\u00015\u00016\u00016\u0001"+ + "6\u00016\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u0001"+ + "8\u00048\u01b1\b8\u000b8\f8\u01b2\u00018\u00018\u00019\u00019\u00019\u0001"+ + "9\u00019\u00019\u00039\u01bd\b9\u0001\u00bb\u0000:\u0004\u0001\u0006\u0002"+ + "\b\u0003\n\u0004\f\u0005\u000e\u0006\u0010\u0007\u0012\u0000\u0014\b\u0016"+ + "\t\u0018\n\u001a\u000b\u001c\f\u001e\u0000 \u0000\"\u0000$\u0000&\r(\u0000"+ + "*\u000e,\u000f.\u00100\u00112\u00124\u00136\u00148\u0015:\u0016<\u0017"+ + ">\u0018@\u0019B\u001aD\u001bF\u001cH\u001dJ\u001eL\u001fN P!R\"T#V$X%"+ + "Z&\\\'^(`)b*d+f,h-j\u0000l\u0000n\u0000p\u0000r\u0000t.v/\u0004\u0000"+ + "\u0001\u0002\u0003\u000e\u0004\u0000\n\n\r\r\"\"$%\u0003\u0000\t\t\f\r"+ + " \u0002\u0000\n\n\r\r\u0001\u000009\u0004\u0000$$AZ__az\u0002\u0000\u0000"+ + "\u007f\u8000\ud800\u8000\udbff\u0001\u0000\u8000\ud800\u8000\udbff\u0001"+ + "\u0000\u8000\udc00\u8000\udfff\u0005\u0000\"\"\\\\nnrrtt\u0003\u00000"+ + "9AFaf\u0002\u0000EEee\u0002\u0000++--\u0003\u0000\n\n\r\r$%\u0001\u0000"+ + "{{\u01dc\u0000\u0004\u0001\u0000\u0000\u0000\u0000\u0006\u0001\u0000\u0000"+ + "\u0000\u0000\b\u0001\u0000\u0000\u0000\u0000\n\u0001\u0000\u0000\u0000"+ + "\u0000\f\u0001\u0000\u0000\u0000\u0000\u000e\u0001\u0000\u0000\u0000\u0000"+ + "\u0010\u0001\u0000\u0000\u0000\u0000\u0014\u0001\u0000\u0000\u0000\u0000"+ + "\u0016\u0001\u0000\u0000\u0000\u0000\u0018\u0001\u0000\u0000\u0000\u0000"+ + "\u001a\u0001\u0000\u0000\u0000\u0000\u001c\u0001\u0000\u0000\u0000\u0000"+ + "&\u0001\u0000\u0000\u0000\u0000*\u0001\u0000\u0000\u0000\u0000,\u0001"+ + "\u0000\u0000\u0000\u0000.\u0001\u0000\u0000\u0000\u00000\u0001\u0000\u0000"+ + "\u0000\u00002\u0001\u0000\u0000\u0000\u00004\u0001\u0000\u0000\u0000\u0000"+ + "6\u0001\u0000\u0000\u0000\u00008\u0001\u0000\u0000\u0000\u0000:\u0001"+ + "\u0000\u0000\u0000\u0000<\u0001\u0000\u0000\u0000\u0000>\u0001\u0000\u0000"+ + "\u0000\u0000@\u0001\u0000\u0000\u0000\u0000B\u0001\u0000\u0000\u0000\u0000"+ + "D\u0001\u0000\u0000\u0000\u0000F\u0001\u0000\u0000\u0000\u0000H\u0001"+ + "\u0000\u0000\u0000\u0000J\u0001\u0000\u0000\u0000\u0000L\u0001\u0000\u0000"+ + "\u0000\u0000N\u0001\u0000\u0000\u0000\u0000P\u0001\u0000\u0000\u0000\u0000"+ + "R\u0001\u0000\u0000\u0000\u0000T\u0001\u0000\u0000\u0000\u0000V\u0001"+ + "\u0000\u0000\u0000\u0000X\u0001\u0000\u0000\u0000\u0000Z\u0001\u0000\u0000"+ + "\u0000\u0000\\\u0001\u0000\u0000\u0000\u0000^\u0001\u0000\u0000\u0000"+ + "\u0000`\u0001\u0000\u0000\u0000\u0000b\u0001\u0000\u0000\u0000\u0001d"+ + "\u0001\u0000\u0000\u0000\u0001f\u0001\u0000\u0000\u0000\u0001h\u0001\u0000"+ + "\u0000\u0000\u0001j\u0001\u0000\u0000\u0000\u0002l\u0001\u0000\u0000\u0000"+ + "\u0002n\u0001\u0000\u0000\u0000\u0003p\u0001\u0000\u0000\u0000\u0003r"+ + "\u0001\u0000\u0000\u0000\u0003t\u0001\u0000\u0000\u0000\u0003v\u0001\u0000"+ + "\u0000\u0000\u0004x\u0001\u0000\u0000\u0000\u0006\u0086\u0001\u0000\u0000"+ + "\u0000\b\u0094\u0001\u0000\u0000\u0000\n\u0097\u0001\u0000\u0000\u0000"+ + "\f\u009a\u0001\u0000\u0000\u0000\u000e\u009d\u0001\u0000\u0000\u0000\u0010"+ + "\u00a0\u0001\u0000\u0000\u0000\u0012\u00a4\u0001\u0000\u0000\u0000\u0014"+ + "\u00a6\u0001\u0000\u0000\u0000\u0016\u00af\u0001\u0000\u0000\u0000\u0018"+ + "\u00b5\u0001\u0000\u0000\u0000\u001a\u00c6\u0001\u0000\u0000\u0000\u001c"+ + "\u00d5\u0001\u0000\u0000\u0000\u001e\u00db\u0001\u0000\u0000\u0000 \u00e1"+ + "\u0001\u0000\u0000\u0000\"\u00f5\u0001\u0000\u0000\u0000$\u00f7\u0001"+ + "\u0000\u0000\u0000&\u0113\u0001\u0000\u0000\u0000(\u0115\u0001\u0000\u0000"+ + "\u0000*\u0127\u0001\u0000\u0000\u0000,\u0129\u0001\u0000\u0000\u0000."+ + "\u012d\u0001\u0000\u0000\u00000\u0132\u0001\u0000\u0000\u00002\u013a\u0001"+ + "\u0000\u0000\u00004\u013c\u0001\u0000\u0000\u00006\u013f\u0001\u0000\u0000"+ + "\u00008\u0142\u0001\u0000\u0000\u0000:\u0144\u0001\u0000\u0000\u0000<"+ + "\u0146\u0001\u0000\u0000\u0000>\u0148\u0001\u0000\u0000\u0000@\u014a\u0001"+ + "\u0000\u0000\u0000B\u014c\u0001\u0000\u0000\u0000D\u014f\u0001\u0000\u0000"+ + "\u0000F\u0152\u0001\u0000\u0000\u0000H\u0154\u0001\u0000\u0000\u0000J"+ + "\u0156\u0001\u0000\u0000\u0000L\u0158\u0001\u0000\u0000\u0000N\u015a\u0001"+ + "\u0000\u0000\u0000P\u015c\u0001\u0000\u0000\u0000R\u015e\u0001\u0000\u0000"+ + "\u0000T\u0161\u0001\u0000\u0000\u0000V\u0163\u0001\u0000\u0000\u0000X"+ + "\u0165\u0001\u0000\u0000\u0000Z\u0168\u0001\u0000\u0000\u0000\\\u016b"+ + "\u0001\u0000\u0000\u0000^\u016d\u0001\u0000\u0000\u0000`\u016f\u0001\u0000"+ + "\u0000\u0000b\u0173\u0001\u0000\u0000\u0000d\u0175\u0001\u0000\u0000\u0000"+ + "f\u017d\u0001\u0000\u0000\u0000h\u018b\u0001\u0000\u0000\u0000j\u018d"+ + "\u0001\u0000\u0000\u0000l\u0192\u0001\u0000\u0000\u0000n\u0197\u0001\u0000"+ + "\u0000\u0000p\u01a3\u0001\u0000\u0000\u0000r\u01a7\u0001\u0000\u0000\u0000"+ + "t\u01b0\u0001\u0000\u0000\u0000v\u01bc\u0001\u0000\u0000\u0000x}\u0005"+ + "{\u0000\u0000y|\u0003\u0016\t\u0000z|\u0003\u001c\f\u0000{y\u0001\u0000"+ + "\u0000\u0000{z\u0001\u0000\u0000\u0000|\u007f\u0001\u0000\u0000\u0000"+ + "}{\u0001\u0000\u0000\u0000}~\u0001\u0000\u0000\u0000~\u0080\u0001\u0000"+ + "\u0000\u0000\u007f}\u0001\u0000\u0000\u0000\u0080\u0081\u0005f\u0000\u0000"+ + "\u0081\u0082\u0005o\u0000\u0000\u0082\u0083\u0005r\u0000\u0000\u0083\u0084"+ + "\u0001\u0000\u0000\u0000\u0084\u0085\u0003\u0016\t\u0000\u0085\u0005\u0001"+ + "\u0000\u0000\u0000\u0086\u008b\u0005[\u0000\u0000\u0087\u008a\u0003\u0016"+ + "\t\u0000\u0088\u008a\u0003\u001c\f\u0000\u0089\u0087\u0001\u0000\u0000"+ + "\u0000\u0089\u0088\u0001\u0000\u0000\u0000\u008a\u008d\u0001\u0000\u0000"+ + "\u0000\u008b\u0089\u0001\u0000\u0000\u0000\u008b\u008c\u0001\u0000\u0000"+ + "\u0000\u008c\u008e\u0001\u0000\u0000\u0000\u008d\u008b\u0001\u0000\u0000"+ + "\u0000\u008e\u008f\u0005f\u0000\u0000\u008f\u0090\u0005o\u0000\u0000\u0090"+ + "\u0091\u0005r\u0000\u0000\u0091\u0092\u0001\u0000\u0000\u0000\u0092\u0093"+ + "\u0003\u0016\t\u0000\u0093\u0007\u0001\u0000\u0000\u0000\u0094\u0095\u0005"+ + "i\u0000\u0000\u0095\u0096\u0005f\u0000\u0000\u0096\t\u0001\u0000\u0000"+ + "\u0000\u0097\u0098\u0005i\u0000\u0000\u0098\u0099\u0005n\u0000\u0000\u0099"+ + "\u000b\u0001\u0000\u0000\u0000\u009a\u009b\u0005{\u0000\u0000\u009b\u009c"+ + "\u0006\u0004\u0000\u0000\u009c\r\u0001\u0000\u0000\u0000\u009d\u009e\u0005"+ + "}\u0000\u0000\u009e\u009f\u0006\u0005\u0001\u0000\u009f\u000f\u0001\u0000"+ + "\u0000\u0000\u00a0\u00a1\u0005=\u0000\u0000\u00a1\u0011\u0001\u0000\u0000"+ + "\u0000\u00a2\u00a5\b\u0000\u0000\u0000\u00a3\u00a5\u0003\"\u000f\u0000"+ + "\u00a4\u00a2\u0001\u0000\u0000\u0000\u00a4\u00a3\u0001\u0000\u0000\u0000"+ + "\u00a5\u0013\u0001\u0000\u0000\u0000\u00a6\u00ab\u0003 \u000e\u0000\u00a7"+ + "\u00aa\u0003\u001e\r\u0000\u00a8\u00aa\u0005-\u0000\u0000\u00a9\u00a7"+ + "\u0001\u0000\u0000\u0000\u00a9\u00a8\u0001\u0000\u0000\u0000\u00aa\u00ad"+ + "\u0001\u0000\u0000\u0000\u00ab\u00a9\u0001\u0000\u0000\u0000\u00ab\u00ac"+ + "\u0001\u0000\u0000\u0000\u00ac\u0015\u0001\u0000\u0000\u0000\u00ad\u00ab"+ + "\u0001\u0000\u0000\u0000\u00ae\u00b0\u0007\u0001\u0000\u0000\u00af\u00ae"+ + "\u0001\u0000\u0000\u0000\u00b0\u00b1\u0001\u0000\u0000\u0000\u00b1\u00af"+ + "\u0001\u0000\u0000\u0000\u00b1\u00b2\u0001\u0000\u0000\u0000\u00b2\u00b3"+ + "\u0001\u0000\u0000\u0000\u00b3\u00b4\u0006\t\u0002\u0000\u00b4\u0017\u0001"+ + "\u0000\u0000\u0000\u00b5\u00b6\u0005/\u0000\u0000\u00b6\u00b7\u0005*\u0000"+ + "\u0000\u00b7\u00bb\u0001\u0000\u0000\u0000\u00b8\u00ba\t\u0000\u0000\u0000"+ + "\u00b9\u00b8\u0001\u0000\u0000\u0000\u00ba\u00bd\u0001\u0000\u0000\u0000"+ + "\u00bb\u00bc\u0001\u0000\u0000\u0000\u00bb\u00b9\u0001\u0000\u0000\u0000"+ + "\u00bc\u00be\u0001\u0000\u0000\u0000\u00bd\u00bb\u0001\u0000\u0000\u0000"+ + "\u00be\u00bf\u0005*\u0000\u0000\u00bf\u00c0\u0005/\u0000\u0000\u00c0\u00c1"+ + "\u0001\u0000\u0000\u0000\u00c1\u00c2\u0006\n\u0002\u0000\u00c2\u0019\u0001"+ + "\u0000\u0000\u0000\u00c3\u00c4\u0005/\u0000\u0000\u00c4\u00c7\u0005/\u0000"+ + "\u0000\u00c5\u00c7\u0005#\u0000\u0000\u00c6\u00c3\u0001\u0000\u0000\u0000"+ + "\u00c6\u00c5\u0001\u0000\u0000\u0000\u00c7\u00cb\u0001\u0000\u0000\u0000"+ + "\u00c8\u00ca\b\u0002\u0000\u0000\u00c9\u00c8\u0001\u0000\u0000\u0000\u00ca"+ + "\u00cd\u0001\u0000\u0000\u0000\u00cb\u00c9\u0001\u0000\u0000\u0000\u00cb"+ + "\u00cc\u0001\u0000\u0000\u0000\u00cc\u00cf\u0001\u0000\u0000\u0000\u00cd"+ + "\u00cb\u0001\u0000\u0000\u0000\u00ce\u00d0\u0005\r\u0000\u0000\u00cf\u00ce"+ + "\u0001\u0000\u0000\u0000\u00cf\u00d0\u0001\u0000\u0000\u0000\u00d0\u00d1"+ + "\u0001\u0000\u0000\u0000\u00d1\u00d2\u0005\n\u0000\u0000\u00d2\u00d3\u0001"+ + "\u0000\u0000\u0000\u00d3\u00d4\u0006\u000b\u0002\u0000\u00d4\u001b\u0001"+ + "\u0000\u0000\u0000\u00d5\u00d6\u0005\n\u0000\u0000\u00d6\u00d7\u0001\u0000"+ + "\u0000\u0000\u00d7\u00d8\u0006\f\u0002\u0000\u00d8\u001d\u0001\u0000\u0000"+ + "\u0000\u00d9\u00dc\u0003 \u000e\u0000\u00da\u00dc\u0007\u0003\u0000\u0000"+ + "\u00db\u00d9\u0001\u0000\u0000\u0000\u00db\u00da\u0001\u0000\u0000\u0000"+ + "\u00dc\u001f\u0001\u0000\u0000\u0000\u00dd\u00e2\u0007\u0004\u0000\u0000"+ + "\u00de\u00e2\b\u0005\u0000\u0000\u00df\u00e0\u0007\u0006\u0000\u0000\u00e0"+ + "\u00e2\u0007\u0007\u0000\u0000\u00e1\u00dd\u0001\u0000\u0000\u0000\u00e1"+ + "\u00de\u0001\u0000\u0000\u0000\u00e1\u00df\u0001\u0000\u0000\u0000\u00e2"+ + "!\u0001\u0000\u0000\u0000\u00e3\u00e4\u0005\\\u0000\u0000\u00e4\u00f6"+ + "\u0007\b\u0000\u0000\u00e5\u00e6\u0005\\\u0000\u0000\u00e6\u00e7\u0003"+ + "$\u0010\u0000\u00e7\u00e8\u0003$\u0010\u0000\u00e8\u00e9\u0003$\u0010"+ + "\u0000\u00e9\u00ea\u0003$\u0010\u0000\u00ea\u00f6\u0001\u0000\u0000\u0000"+ + "\u00eb\u00ec\u0005\\\u0000\u0000\u00ec\u00ed\u0003$\u0010\u0000\u00ed"+ + "\u00ee\u0003$\u0010\u0000\u00ee\u00ef\u0003$\u0010\u0000\u00ef\u00f0\u0003"+ + "$\u0010\u0000\u00f0\u00f1\u0003$\u0010\u0000\u00f1\u00f2\u0003$\u0010"+ + "\u0000\u00f2\u00f3\u0003$\u0010\u0000\u00f3\u00f4\u0003$\u0010\u0000\u00f4"+ + "\u00f6\u0001\u0000\u0000\u0000\u00f5\u00e3\u0001\u0000\u0000\u0000\u00f5"+ + "\u00e5\u0001\u0000\u0000\u0000\u00f5\u00eb\u0001\u0000\u0000\u0000\u00f6"+ + "#\u0001\u0000\u0000\u0000\u00f7\u00f8\u0007\t\u0000\u0000\u00f8%\u0001"+ + "\u0000\u0000\u0000\u00f9\u00fb\u0007\u0003\u0000\u0000\u00fa\u00f9\u0001"+ + "\u0000\u0000\u0000\u00fb\u00fc\u0001\u0000\u0000\u0000\u00fc\u00fa\u0001"+ + "\u0000\u0000\u0000\u00fc\u00fd\u0001\u0000\u0000\u0000\u00fd\u00fe\u0001"+ + "\u0000\u0000\u0000\u00fe\u0102\u0005.\u0000\u0000\u00ff\u0101\u0007\u0003"+ + "\u0000\u0000\u0100\u00ff\u0001\u0000\u0000\u0000\u0101\u0104\u0001\u0000"+ + "\u0000\u0000\u0102\u0100\u0001\u0000\u0000\u0000\u0102\u0103\u0001\u0000"+ + "\u0000\u0000\u0103\u0106\u0001\u0000\u0000\u0000\u0104\u0102\u0001\u0000"+ + "\u0000\u0000\u0105\u0107\u0003(\u0012\u0000\u0106\u0105\u0001\u0000\u0000"+ + "\u0000\u0106\u0107\u0001\u0000\u0000\u0000\u0107\u0114\u0001\u0000\u0000"+ + "\u0000\u0108\u010a\u0007\u0003\u0000\u0000\u0109\u0108\u0001\u0000\u0000"+ + "\u0000\u010a\u010b\u0001\u0000\u0000\u0000\u010b\u0109\u0001\u0000\u0000"+ + "\u0000\u010b\u010c\u0001\u0000\u0000\u0000\u010c\u010d\u0001\u0000\u0000"+ + "\u0000\u010d\u0114\u0003(\u0012\u0000\u010e\u0110\u0007\u0003\u0000\u0000"+ + "\u010f\u010e\u0001\u0000\u0000\u0000\u0110\u0111\u0001\u0000\u0000\u0000"+ + "\u0111\u010f\u0001\u0000\u0000\u0000\u0111\u0112\u0001\u0000\u0000\u0000"+ + "\u0112\u0114\u0001\u0000\u0000\u0000\u0113\u00fa\u0001\u0000\u0000\u0000"+ + "\u0113\u0109\u0001\u0000\u0000\u0000\u0113\u010f\u0001\u0000\u0000\u0000"+ + "\u0114\'\u0001\u0000\u0000\u0000\u0115\u0117\u0007\n\u0000\u0000\u0116"+ + "\u0118\u0007\u000b\u0000\u0000\u0117\u0116\u0001\u0000\u0000\u0000\u0117"+ + "\u0118\u0001\u0000\u0000\u0000\u0118\u011a\u0001\u0000\u0000\u0000\u0119"+ + "\u011b\u0007\u0003\u0000\u0000\u011a\u0119\u0001\u0000\u0000\u0000\u011b"+ + "\u011c\u0001\u0000\u0000\u0000\u011c\u011a\u0001\u0000\u0000\u0000\u011c"+ + "\u011d\u0001\u0000\u0000\u0000\u011d)\u0001\u0000\u0000\u0000\u011e\u011f"+ + "\u0005t\u0000\u0000\u011f\u0120\u0005r\u0000\u0000\u0120\u0121\u0005u"+ + "\u0000\u0000\u0121\u0128\u0005e\u0000\u0000\u0122\u0123\u0005f\u0000\u0000"+ + "\u0123\u0124\u0005a\u0000\u0000\u0124\u0125\u0005l\u0000\u0000\u0125\u0126"+ + "\u0005s\u0000\u0000\u0126\u0128\u0005e\u0000\u0000\u0127\u011e\u0001\u0000"+ + "\u0000\u0000\u0127\u0122\u0001\u0000\u0000\u0000\u0128+\u0001\u0000\u0000"+ + "\u0000\u0129\u012a\u0005\"\u0000\u0000\u012a\u012b\u0001\u0000\u0000\u0000"+ + "\u012b\u012c\u0006\u0014\u0003\u0000\u012c-\u0001\u0000\u0000\u0000\u012d"+ + "\u012e\u0005n\u0000\u0000\u012e\u012f\u0005u\u0000\u0000\u012f\u0130\u0005"+ + "l\u0000\u0000\u0130\u0131\u0005l\u0000\u0000\u0131/\u0001\u0000\u0000"+ + "\u0000\u0132\u0133\u0005<\u0000\u0000\u0133\u0134\u0005<\u0000\u0000\u0134"+ + "\u0136\u0001\u0000\u0000\u0000\u0135\u0137\u0005-\u0000\u0000\u0136\u0135"+ + "\u0001\u0000\u0000\u0000\u0136\u0137\u0001\u0000\u0000\u0000\u0137\u0138"+ + "\u0001\u0000\u0000\u0000\u0138\u0139\u0006\u0016\u0004\u0000\u01391\u0001"+ + "\u0000\u0000\u0000\u013a\u013b\u0005+\u0000\u0000\u013b3\u0001\u0000\u0000"+ + "\u0000\u013c\u013d\u0005&\u0000\u0000\u013d\u013e\u0005&\u0000\u0000\u013e"+ + "5\u0001\u0000\u0000\u0000\u013f\u0140\u0005=\u0000\u0000\u0140\u0141\u0005"+ + "=\u0000\u0000\u01417\u0001\u0000\u0000\u0000\u0142\u0143\u0005<\u0000"+ + "\u0000\u01439\u0001\u0000\u0000\u0000\u0144\u0145\u0005:\u0000\u0000\u0145"+ + ";\u0001\u0000\u0000\u0000\u0146\u0147\u0005[\u0000\u0000\u0147=\u0001"+ + "\u0000\u0000\u0000\u0148\u0149\u0005(\u0000\u0000\u0149?\u0001\u0000\u0000"+ + "\u0000\u014a\u014b\u0005-\u0000\u0000\u014bA\u0001\u0000\u0000\u0000\u014c"+ + "\u014d\u0005|\u0000\u0000\u014d\u014e\u0005|\u0000\u0000\u014eC\u0001"+ + "\u0000\u0000\u0000\u014f\u0150\u0005!\u0000\u0000\u0150\u0151\u0005=\u0000"+ + "\u0000\u0151E\u0001\u0000\u0000\u0000\u0152\u0153\u0005>\u0000\u0000\u0153"+ + "G\u0001\u0000\u0000\u0000\u0154\u0155\u0005?\u0000\u0000\u0155I\u0001"+ + "\u0000\u0000\u0000\u0156\u0157\u0005]\u0000\u0000\u0157K\u0001\u0000\u0000"+ + "\u0000\u0158\u0159\u0005)\u0000\u0000\u0159M\u0001\u0000\u0000\u0000\u015a"+ + "\u015b\u0005*\u0000\u0000\u015bO\u0001\u0000\u0000\u0000\u015c\u015d\u0005"+ + "!\u0000\u0000\u015dQ\u0001\u0000\u0000\u0000\u015e\u015f\u0005<\u0000"+ + "\u0000\u015f\u0160\u0005=\u0000\u0000\u0160S\u0001\u0000\u0000\u0000\u0161"+ + "\u0162\u0005.\u0000\u0000\u0162U\u0001\u0000\u0000\u0000\u0163\u0164\u0005"+ + "/\u0000\u0000\u0164W\u0001\u0000\u0000\u0000\u0165\u0166\u0005>\u0000"+ + "\u0000\u0166\u0167\u0005=\u0000\u0000\u0167Y\u0001\u0000\u0000\u0000\u0168"+ + "\u0169\u0005=\u0000\u0000\u0169\u016a\u0005>\u0000\u0000\u016a[\u0001"+ + "\u0000\u0000\u0000\u016b\u016c\u0005,\u0000\u0000\u016c]\u0001\u0000\u0000"+ + "\u0000\u016d\u016e\u0005%\u0000\u0000\u016e_\u0001\u0000\u0000\u0000\u016f"+ + "\u0170\u0005.\u0000\u0000\u0170\u0171\u0005.\u0000\u0000\u0171\u0172\u0005"+ + ".\u0000\u0000\u0172a\u0001\u0000\u0000\u0000\u0173\u0174\u0005~\u0000"+ + "\u0000\u0174c\u0001\u0000\u0000\u0000\u0175\u0176\u0005$\u0000\u0000\u0176"+ + "\u0177\u0005{\u0000\u0000\u0177\u0178\u0001\u0000\u0000\u0000\u0178\u0179"+ + "\u00060\u0005\u0000\u0179\u017a\u0001\u0000\u0000\u0000\u017a\u017b\u0006"+ + "0\u0006\u0000\u017be\u0001\u0000\u0000\u0000\u017c\u017e\u0003h2\u0000"+ + "\u017d\u017c\u0001\u0000\u0000\u0000\u017e\u017f\u0001\u0000\u0000\u0000"+ + "\u017f\u017d\u0001\u0000\u0000\u0000\u017f\u0180\u0001\u0000\u0000\u0000"+ + "\u0180g\u0001\u0000\u0000\u0000\u0181\u018c\b\u0000\u0000\u0000\u0182"+ + "\u0183\u0005$\u0000\u0000\u0183\u018c\u0005$\u0000\u0000\u0184\u0185\u0005"+ + "$\u0000\u0000\u0185\u018c\u00042\u0000\u0000\u0186\u0187\u0005%\u0000"+ + "\u0000\u0187\u018c\u0005%\u0000\u0000\u0188\u0189\u0005%\u0000\u0000\u0189"+ + "\u018c\u00042\u0001\u0000\u018a\u018c\u0003\"\u000f\u0000\u018b\u0181"+ + "\u0001\u0000\u0000\u0000\u018b\u0182\u0001\u0000\u0000\u0000\u018b\u0184"+ + "\u0001\u0000\u0000\u0000\u018b\u0186\u0001\u0000\u0000\u0000\u018b\u0188"+ + "\u0001\u0000\u0000\u0000\u018b\u018a\u0001\u0000\u0000\u0000\u018ci\u0001"+ + "\u0000\u0000\u0000\u018d\u018e\u0005\"\u0000\u0000\u018e\u018f\u0001\u0000"+ + "\u0000\u0000\u018f\u0190\u00063\u0007\u0000\u0190\u0191\u00063\b\u0000"+ + "\u0191k\u0001\u0000\u0000\u0000\u0192\u0193\u0005\n\u0000\u0000\u0193"+ + "\u0194\u0001\u0000\u0000\u0000\u0194\u0195\u00064\t\u0000\u0195\u0196"+ + "\u00064\n\u0000\u0196m\u0001\u0000\u0000\u0000\u0197\u019c\u0003 \u000e"+ + "\u0000\u0198\u019b\u0003\u001e\r\u0000\u0199\u019b\u0005-\u0000\u0000"+ + "\u019a\u0198\u0001\u0000\u0000\u0000\u019a\u0199\u0001\u0000\u0000\u0000"+ + "\u019b\u019e\u0001\u0000\u0000\u0000\u019c\u019a\u0001\u0000\u0000\u0000"+ + "\u019c\u019d\u0001\u0000\u0000\u0000\u019d\u019f\u0001\u0000\u0000\u0000"+ + "\u019e\u019c\u0001\u0000\u0000\u0000\u019f\u01a0\u00065\u000b\u0000\u01a0"+ + "\u01a1\u0001\u0000\u0000\u0000\u01a1\u01a2\u00065\f\u0000\u01a2o\u0001"+ + "\u0000\u0000\u0000\u01a3\u01a4\u0005\n\u0000\u0000\u01a4\u01a5\u0001\u0000"+ + "\u0000\u0000\u01a5\u01a6\u00066\t\u0000\u01a6q\u0001\u0000\u0000\u0000"+ + "\u01a7\u01a8\u0005$\u0000\u0000\u01a8\u01a9\u0005{\u0000\u0000\u01a9\u01aa"+ + "\u0001\u0000\u0000\u0000\u01aa\u01ab\u00067\r\u0000\u01ab\u01ac\u0001"+ + "\u0000\u0000\u0000\u01ac\u01ad\u00067\u000e\u0000\u01ad\u01ae\u00067\u0006"+ + "\u0000\u01aes\u0001\u0000\u0000\u0000\u01af\u01b1\u0003v9\u0000\u01b0"+ + "\u01af\u0001\u0000\u0000\u0000\u01b1\u01b2\u0001\u0000\u0000\u0000\u01b2"+ + "\u01b0\u0001\u0000\u0000\u0000\u01b2\u01b3\u0001\u0000\u0000\u0000\u01b3"+ + "\u01b4\u0001\u0000\u0000\u0000\u01b4\u01b5\u00068\u000f\u0000\u01b5u\u0001"+ + "\u0000\u0000\u0000\u01b6\u01bd\b\f\u0000\u0000\u01b7\u01b8\u0005$\u0000"+ + "\u0000\u01b8\u01bd\b\r\u0000\u0000\u01b9\u01ba\u0005%\u0000\u0000\u01ba"+ + "\u01bd\b\r\u0000\u0000\u01bb\u01bd\u0003\"\u000f\u0000\u01bc\u01b6\u0001"+ + "\u0000\u0000\u0000\u01bc\u01b7\u0001\u0000\u0000\u0000\u01bc\u01b9\u0001"+ + "\u0000\u0000\u0000\u01bc\u01bb\u0001\u0000\u0000\u0000\u01bdw\u0001\u0000"+ + "\u0000\u0000#\u0000\u0001\u0002\u0003{}\u0089\u008b\u00a4\u00a9\u00ab"+ + "\u00b1\u00bb\u00c6\u00cb\u00cf\u00db\u00e1\u00f5\u00fc\u0102\u0106\u010b"+ + "\u0111\u0113\u0117\u011c\u0127\u0136\u017f\u018b\u019a\u019c\u01b2\u01bc"+ + "\u0010\u0001\u0004\u0000\u0001\u0005\u0001\u0000\u0001\u0000\u0005\u0001"+ + "\u0000\u0005\u0002\u0000\u00010\u0002\u0005\u0000\u0000\u0007\u000f\u0000"+ + "\u0004\u0000\u0000\u0007\f\u0000\u0002\u0003\u0000\u00015\u0003\u0007"+ + "\b\u0000\u00017\u0004\u0007+\u0000\u00018\u0005"; public static final ATN _ATN = new ATNDeserializer().deserialize(_serializedATN.toCharArray()); static { diff --git a/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLParser.java b/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLParser.java index 61f365cdc95..57f3ac08fee 100644 --- a/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLParser.java +++ b/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLParser.java @@ -1,5 +1,5 @@ /* - * Copyright 2023 the original author or authors. + * Copyright 2024 the original author or authors. *

* Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -3240,8 +3240,8 @@ public final TemplateInterpolationContext templateInterpolation() throws Recogni return _localctx; } - @Override - public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) { + @Override + public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) { switch (ruleIndex) { case 6: return expression_sempred((ExpressionContext)_localctx, predIndex); diff --git a/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLParserBaseListener.java b/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLParserBaseListener.java index f3da2ddd19d..dbdd45be121 100644 --- a/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLParserBaseListener.java +++ b/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLParserBaseListener.java @@ -1,5 +1,5 @@ /* - * Copyright 2023 the original author or authors. + * Copyright 2024 the original author or authors. *

* Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLParserBaseVisitor.java b/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLParserBaseVisitor.java index 426b7754d82..fb7e701455a 100644 --- a/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLParserBaseVisitor.java +++ b/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLParserBaseVisitor.java @@ -1,5 +1,5 @@ /* - * Copyright 2023 the original author or authors. + * Copyright 2024 the original author or authors. *

* Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLParserListener.java b/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLParserListener.java index ac1ead622da..fde58c5b522 100644 --- a/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLParserListener.java +++ b/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLParserListener.java @@ -1,5 +1,5 @@ /* - * Copyright 2023 the original author or authors. + * Copyright 2024 the original author or authors. *

* Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLParserVisitor.java b/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLParserVisitor.java index 2d74150d48b..4d9f7ee6d32 100644 --- a/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLParserVisitor.java +++ b/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/HCLParserVisitor.java @@ -1,5 +1,5 @@ /* - * Copyright 2023 the original author or authors. + * Copyright 2024 the original author or authors. *

* Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/JsonPathLexer.java b/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/JsonPathLexer.java index bf35152a0c1..54b01b27054 100644 --- a/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/JsonPathLexer.java +++ b/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/JsonPathLexer.java @@ -1,5 +1,5 @@ /* - * Copyright 2023 the original author or authors. + * Copyright 2024 the original author or authors. *

* Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/JsonPathParser.java b/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/JsonPathParser.java index 11c42d9e588..fdd8f4faa89 100644 --- a/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/JsonPathParser.java +++ b/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/JsonPathParser.java @@ -1,5 +1,5 @@ /* - * Copyright 2023 the original author or authors. + * Copyright 2024 the original author or authors. *

* Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -1509,8 +1509,8 @@ public final IndexesContext indexes() throws RecognitionException { return _localctx; } - @Override - public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) { + @Override + public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) { switch (ruleIndex) { case 7: return binaryExpression_sempred((BinaryExpressionContext)_localctx, predIndex); diff --git a/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/JsonPathParserBaseListener.java b/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/JsonPathParserBaseListener.java index 72dd078b9ae..024b82f697e 100644 --- a/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/JsonPathParserBaseListener.java +++ b/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/JsonPathParserBaseListener.java @@ -1,5 +1,5 @@ /* - * Copyright 2023 the original author or authors. + * Copyright 2024 the original author or authors. *

* Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/JsonPathParserBaseVisitor.java b/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/JsonPathParserBaseVisitor.java index 2564cabb349..b8de4dc8962 100644 --- a/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/JsonPathParserBaseVisitor.java +++ b/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/JsonPathParserBaseVisitor.java @@ -1,5 +1,5 @@ /* - * Copyright 2023 the original author or authors. + * Copyright 2024 the original author or authors. *

* Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/JsonPathParserListener.java b/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/JsonPathParserListener.java index ebd084b9de3..dac28047fb4 100644 --- a/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/JsonPathParserListener.java +++ b/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/JsonPathParserListener.java @@ -1,5 +1,5 @@ /* - * Copyright 2023 the original author or authors. + * Copyright 2024 the original author or authors. *

* Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/JsonPathParserVisitor.java b/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/JsonPathParserVisitor.java index c9737954aee..c4d008aeacf 100644 --- a/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/JsonPathParserVisitor.java +++ b/rewrite-hcl/src/main/java/org/openrewrite/hcl/internal/grammar/JsonPathParserVisitor.java @@ -1,5 +1,5 @@ /* - * Copyright 2023 the original author or authors. + * Copyright 2024 the original author or authors. *

* Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/rewrite-hcl/src/test/java/org/openrewrite/hcl/tree/HclStringTest.java b/rewrite-hcl/src/test/java/org/openrewrite/hcl/tree/HclStringTest.java index 6bbf0613a97..19bbf88d8f9 100644 --- a/rewrite-hcl/src/test/java/org/openrewrite/hcl/tree/HclStringTest.java +++ b/rewrite-hcl/src/test/java/org/openrewrite/hcl/tree/HclStringTest.java @@ -39,7 +39,22 @@ void quoteEscaping() { ); } - @ExpectedToFail + @Test + void escapingTheDollarSign() { + // https://github.com/hashicorp/hcl2/blob/master/hcl/hclsyntax/spec.md#template-literals + // The interpolation and directive introductions are escaped by doubling their leading characters. The ${ + // sequence is escaped as $${ and the %{ sequence is escaped as %%{. + rewriteRun( + hcl( + """ + locals { + something = "Not a template/expression, just escaping $${somethingElse}." + } + """ + ) + ); + } + @Issue("https://github.com/openrewrite/rewrite/issues/4613") @Test void trailingDollarSign() {