Repository: VKCOM/noverify
Pull request #636 (2020-08-06 08:04:14)

parser: added support of array unpack (...$arr) by parser


Patch:
diff --git a/src/php/parser/node/expr/n_array_item.go b/src/php/parser/node/expr/n_array_item.go
index 0375d31..ef68ed0 100644
--- a/src/php/parser/node/expr/n_array_item.go
+++ b/src/php/parser/node/expr/n_array_item.go
@@ -13,14 +13,16 @@ type ArrayItem struct {
 	Position     *position.Position
 	Key          node.Node
 	Val          node.Node
+	Unpack       bool
 }
 
 // NewArrayItem node constructor
-func NewArrayItem(Key node.Node, Val node.Node) *ArrayItem {
+func NewArrayItem(Key node.Node, Val node.Node, Unpack bool) *ArrayItem {
 	return &ArrayItem{
 		FreeFloating: nil,
 		Key:          Key,
 		Val:          Val,
+		Unpack:       Unpack,
 	}
 }
 
diff --git a/src/php/parser/php7/php7.go b/src/php/parser/php7/php7.go
index 5a9e605..25a86e5 100644
--- a/src/php/parser/php7/php7.go
+++ b/src/php/parser/php7/php7.go
@@ -357,7 +357,7 @@ const yyEofCode = 1
 const yyErrCode = 2
 const yyInitialStackSize = 16
 
-//line php7.y:5674
+//line php7.y:5685
 
 //line yacctab:1
 var yyExca = [...]int{
@@ -386,338 +386,354 @@ var yyExca = [...]int{
 	-1, 109,
 	79, 389,
 	-2, 418,
-	-1, 232,
+	-1, 233,
 	58, 426,
 	79, 426,
 	144, 426,
 	150, 426,
 	-2, 315,
-	-1, 235,
+	-1, 236,
 	148, 431,
 	-2, 428,
-	-1, 238,
+	-1, 239,
 	58, 426,
 	79, 426,
 	144, 426,
 	150, 426,
 	-2, 317,
-	-1, 357,
+	-1, 358,
 	116, 0,
 	136, 0,
 	137, 0,
 	138, 0,
 	139, 0,
 	-2, 339,
-	-1, 358,
+	-1, 359,
 	116, 0,
 	136, 0,
 	137, 0,
 	138, 0,
 	139, 0,
 	-2, 340,
-	-1, 359,
+	-1, 360,
 	116, 0,
 	136, 0,
 	137, 0,
 	138, 0,
 	139, 0,
 	-2, 341,
-	-1, 360,
+	-1, 361,
 	116, 0,
 	136, 0,
 	137, 0,
 	138, 0,
 	139, 0,
 	-2, 342,
-	-1, 361,
+	-1, 362,
 	140, 0,
 	141, 0,
 	167, 0,
 	168, 0,
 	-2, 343,
-	-1, 362,
+	-1, 363,
 	140, 0,
 	141, 0,
 	167, 0,
 	168, 0,
 	-2, 344,
-	-1, 363,
+	-1, 364,
 	140, 0,
 	141, 0,
 	167, 0,
 	168, 0,
 	-2, 345,
-	-1, 364,
+	-1, 365,
 	140, 0,
 	141, 0,
 	167, 0,
 	168, 0,
 	-2, 346,
-	-1, 365,
+	-1, 366,
 	116, 0,
 	136, 0,
 	137, 0,
 	138, 0,
 	139, 0,
 	-2, 347,
-	-1, 372,
+	-1, 373,
 	149, 164,
 	160, 164,
 	-2, 426,
-	-1, 417,
+	-1, 418,
 	149, 466,
 	151, 466,
 	160, 466,
 	-2, 426,
-	-1, 421,
+	-1, 423,
 	58, 427,
 	79, 427,
 	144, 427,
 	148, 430,
 	150, 427,
 	-2, 349,
-	-1, 435,
+	-1, 437,
 	148, 452,
 	-2, 419,
-	-1, 436,
+	-1, 438,
 	148, 454,
 	-2, 444,
-	-1, 516,
+	-1, 518,
 	148, 452,
 	-2, 420,
-	-1, 517,
+	-1, 519,
 	148, 454,
 	-2, 445,
-	-1, 534,
+	-1, 536,
 	149, 214,
 	-2, 219,
-	-1, 576,
+	-1, 578,
 	149, 214,
 	-2, 219,
-	-1, 601,
+	-1, 603,
 	148, 430,
 	-2, 427,
-	-1, 667,
+	-1, 669,
 	149, 184,
 	-2, 426,
-	-1, 675,
+	-1, 677,
 	149, 214,
 	-2, 219,
-	-1, 691,
+	-1, 693,
 	149, 465,
 	151, 465,
 	160, 465,
 	-2, 426,
-	-1, 728,
+	-1, 730,
 	149, 185,
 	-2, 426,
-	-1, 744,
+	-1, 746,
 	37, 269,
 	39, 269,
 	-2, 266,
-	-1, 758,
+	-1, 760,
 	94, 209,
 	95, 209,
 	96, 209,
 	-2, 0,
-	-1, 787,
+	-1, 789,
 	149, 184,
 	-2, 426,
-	-1, 789,
+	-1, 791,
 	149, 187,
 	-2, 400,
-	-1, 804,
+	-1, 806,
 	94, 210,
 	95, 210,
 	96, 210,
 	-2, 0,
-	-1, 854,
+	-1, 856,
 	31, 200,
 	32, 200,
 	33, 200,
 	145, 200,
 	-2, 0,
-	-1, 886,
+	-1, 888,
 	29, 77,
 	-2, 81,
-	-1, 891,
+	-1, 893,
 	31, 199,
 	32, 199,
 	33, 199,
 	145, 199,
 	-2, 0,
-	-1, 919,
+	-1, 921,
 	149, 214,
 	-2, 219,
 }
 
 const yyPrivate = 57344
 
-const yyLast = 7764
+const yyLast = 7766
 
 var yyAct = [...]int{
-	28, 132, 763, 629, 841, 878, 864, 583, 440, 746,
-	840, 109, 783, 818, 191, 837, 633, 680, 113, 632,
-	666, 128, 140, 140, 140, 710, 648, 153, 379, 570,
-	117, 123, 631, 647, 224, 188, 326, 578, 634, 538,
-	371, 527, 381, 226, 317, 721, 152, 5, 321, 320,
-	409, 9, 8, 228, 231, 145, 81, 239, 240, 241,
-	242, 243, 149, 134, 244, 245, 246, 247, 248, 249,
-	250, 319, 253, 2, 7, 261, 262, 263, 139, 318,
-	257, 85, 6, 130, 127, 519, 518, 434, 874, 871,
-	276, 277, 267, 279, 280, 129, 848, 689, 272, 858,
-	595, 142, 143, 845, 337, 844, 410, 83, 107, 313,
-	107, 233, 233, 897, 872, 868, 573, 547, 338, 682,
-	682, 286, 769, 714, 898, 704, 641, 312, 873, 869,
-	335, 306, 339, 294, 323, 296, 235, 235, 328, 329,
-	303, 626, 571, 309, 336, 107, 310, 562, 415, 865,
-	325, 192, 706, 789, 698, 181, 340, 341, 342, 343,
-	344, 345, 346, 347, 348, 349, 350, 351, 352, 353,
-	354, 355, 356, 357, 358, 359, 360, 361, 362, 363,
-	364, 365, 694, 367, 369, 333, 373, 311, 305, 375,
-	44, 615, 299, 272, 269, 289, 291, 167, 80, 334,
-	602, 312, 306, 590, 391, 393, 394, 395, 396, 397,
-	398, 399, 400, 401, 402, 403, 404, 405, 165, 164,
-	406, 140, 408, 146, 228, 383, 523, 181, 166, 168,
-	169, 414, 428, 163, 605, 419, 608, 606, 228, 264,
-	411, 233, 287, 119, 387, 232, 238, 524, 859, 611,
-	930, 893, 826, 140, 612, 108, 825, 108, 413, 816,
-	429, 222, 119, 805, 107, 140, 235, 793, 736, 167,
-	435, 516, 420, 726, 366, 528, 529, 708, 703, 530,
-	701, 693, 374, 664, 653, 273, 233, 643, 535, 269,
-	866, 539, 108, 228, 636, 637, 603, 594, 295, 407,
-	166, 168, 169, 919, 833, 271, 791, 288, 820, 819,
-	764, 235, 522, 136, 557, 729, 114, 233, 521, 692,
-	675, 290, 756, 549, 427, 552, 310, 541, 576, 560,
-	661, 422, 136, 662, 390, 114, 424, 425, 566, 558,
-	153, 534, 235, 433, 5, 418, 388, 221, 9, 8,
-	386, 236, 292, 220, 515, 278, 275, 274, 525, 252,
-	223, 181, 424, 219, 425, 425, 424, 186, 185, 569,
-	184, 7, 544, 138, 137, 372, 133, 115, 607, 6,
-	273, 293, 934, 190, 933, 635, 567, 585, 925, 586,
-	564, 550, 587, 588, 580, 908, 556, 584, 849, 565,
-	778, 779, 907, 167, 170, 171, 892, 575, 778, 779,
-	855, 108, 593, 582, 827, 822, 228, 597, 815, 228,
-	417, 412, 775, 577, 165, 164, 757, 157, 159, 158,
-	181, 725, 724, 614, 166, 168, 169, 722, 617, 163,
-	720, 119, 298, 107, 297, 717, 561, 546, 543, 389,
-	377, 431, 258, 600, 183, 180, 332, 426, 331, 596,
-	330, 300, 814, 811, 436, 517, 806, 771, 542, 119,
-	155, 156, 167, 170, 171, 172, 173, 174, 175, 177,
-	179, 743, 613, 542, 745, 820, 819, 542, 542, 913,
-	862, 182, 161, 165, 164, 592, 861, 807, 796, 792,
-	160, 738, 162, 166, 168, 169, 176, 178, 163, 681,
-	581, 136, 423, 821, 114, 187, 181, 259, 260, 77,
-	616, 777, 140, 621, 167, 256, 122, 198, 199, 193,
-	236, 767, 119, 146, 116, 750, 751, 752, 749, 748,
-	747, 642, 116, 308, 293, 148, 638, 750, 751, 752,
-	749, 748, 747, 119, 911, 308, 625, 308, 167, 119,
-	308, 657, 328, 659, 200, 202, 201, 640, 624, 663,
-	552, 308, 552, 310, 622, 649, 78, 79, 520, 119,
-	676, 887, 533, 266, 265, 258, 652, 679, 638, 5,
-	108, 584, 847, 9, 8, 727, 690, 293, 658, 795,
-	620, 618, 712, 118, 655, 551, 125, 678, 126, 646,
-	579, 555, 665, 696, 548, 677, 7, 651, 672, 382,
-	385, 645, 553, 136, 6, 307, 114, 528, 233, 233,
-	283, 284, 304, 909, 686, 910, 258, 119, 258, 107,
-	150, 426, 539, 426, 119, 112, 324, 638, 302, 531,
-	259, 260, 124, 235, 235, 233, 733, 734, 718, 135,
-	106, 148, 700, 695, 552, 135, 106, 711, 702, 552,
-	552, 228, 715, 649, 707, 731, 46, 713, 258, 735,
-	235, 709, 119, 281, 800, 716, 799, 638, 111, 758,
-	759, 838, 899, 228, 754, 636, 637, 810, 150, 753,
-	532, 259, 260, 259, 260, 730, 737, 136, 723, 125,
-	114, 126, 119, 609, 136, 194, 638, 114, 131, 619,
-	554, 328, 412, 623, 542, 233, 236, 760, 755, 762,
-	228, 552, 650, 552, 711, 380, 649, 765, 770, 258,
-	768, 772, 282, 259, 260, 121, 773, 258, 786, 378,
-	235, 801, 285, 638, 802, 584, 797, 776, 804, 197,
-	196, 798, 372, 667, 788, 1, 195, 258, 780, 189,
-	782, 784, 255, 630, 537, 234, 638, 237, 526, 817,
-	863, 809, 370, 877, 233, 147, 108, 824, 552, 691,
-	836, 812, 808, 144, 830, 327, 831, 832, 151, 839,
-	813, 674, 828, 829, 259, 260, 823, 778, 779, 235,
-	254, 38, 259, 260, 834, 842, 781, 778, 779, 741,
-	854, 744, 742, 225, 794, 846, 384, 654, 850, 932,
-	660, 853, 259, 260, 843, 227, 43, 42, 857, 16,
-	15, 604, 270, 49, 48, 110, 50, 875, 888, 889,
-	884, 84, 82, 72, 890, 891, 251, 883, 62, 728,
-	268, 851, 61, 895, 896, 882, 881, 870, 880, 879,
-	784, 894, 901, 740, 45, 903, 732, 217, 218, 671,
-	314, 120, 884, 906, 902, 900, 301, 3, 439, 883,
-	204, 205, 206, 207, 208, 209, 210, 211, 212, 213,
-	214, 215, 216, 766, 904, 916, 705, 0, 0, 0,
-	0, 0, 0, 0, 0, 926, 924, 920, 787, 922,
-	923, 584, 0, 927, 0, 0, 0, 0, 928, 0,
-	917, 638, 918, 931, 203, 4, 935, 89, 90, 70,
-	47, 94, 95, 36, 0, 107, 0, 27, 0, 0,
+	28, 132, 765, 631, 843, 880, 866, 585, 442, 748,
+	842, 109, 785, 820, 191, 839, 635, 682, 113, 634,
+	668, 128, 140, 140, 140, 712, 650, 153, 380, 572,
+	117, 123, 633, 649, 224, 188, 327, 580, 540, 529,
+	636, 410, 372, 521, 318, 723, 226, 5, 322, 81,
+	382, 9, 321, 228, 232, 8, 85, 240, 241, 242,
+	243, 244, 152, 134, 245, 246, 247, 248, 249, 250,
+	251, 320, 254, 149, 7, 262, 263, 264, 319, 145,
+	2, 6, 130, 127, 139, 520, 436, 268, 129, 876,
+	277, 278, 873, 280, 281, 850, 691, 597, 273, 258,
+	83, 860, 338, 314, 234, 234, 899, 142, 143, 874,
+	870, 236, 236, 847, 411, 846, 107, 900, 549, 575,
+	684, 287, 339, 875, 871, 771, 716, 336, 334, 684,
+	313, 312, 307, 295, 324, 297, 340, 306, 329, 330,
+	304, 337, 335, 310, 706, 313, 311, 643, 628, 573,
+	326, 307, 564, 290, 292, 181, 341, 342, 343, 344,
+	345, 346, 347, 348, 349, 350, 351, 352, 353, 354,
+	355, 356, 357, 358, 359, 360, 361, 362, 363, 364,
+	365, 366, 416, 368, 370, 192, 374, 270, 708, 376,
+	44, 791, 222, 273, 119, 107, 107, 167, 700, 300,
+	607, 696, 610, 608, 392, 394, 395, 396, 397, 398,
+	399, 400, 401, 402, 403, 404, 405, 406, 165, 164,
+	407, 140, 409, 181, 228, 384, 867, 107, 166, 168,
+	169, 419, 617, 163, 234, 604, 421, 272, 613, 228,
+	119, 236, 107, 614, 388, 233, 239, 592, 412, 415,
+	861, 265, 932, 921, 140, 895, 430, 828, 414, 181,
+	827, 431, 818, 108, 136, 167, 140, 114, 807, 367,
+	795, 437, 518, 422, 80, 375, 530, 531, 221, 234,
+	532, 835, 270, 237, 220, 525, 236, 738, 728, 537,
+	710, 705, 541, 703, 228, 119, 166, 168, 169, 146,
+	695, 167, 170, 171, 666, 408, 526, 655, 177, 179,
+	136, 234, 645, 114, 605, 559, 596, 793, 236, 296,
+	822, 821, 165, 164, 551, 731, 554, 311, 543, 237,
+	694, 927, 166, 168, 169, 176, 178, 163, 424, 568,
+	677, 153, 108, 108, 609, 5, 638, 639, 429, 9,
+	435, 291, 663, 8, 517, 664, 426, 427, 527, 288,
+	578, 274, 425, 910, 562, 136, 560, 868, 114, 536,
+	571, 524, 7, 420, 108, 373, 389, 523, 294, 6,
+	546, 387, 426, 289, 427, 427, 426, 293, 587, 108,
+	588, 552, 279, 589, 590, 582, 558, 276, 586, 275,
+	253, 223, 219, 569, 186, 185, 184, 138, 577, 137,
+	133, 567, 115, 595, 584, 566, 766, 228, 599, 758,
+	418, 228, 391, 157, 159, 158, 181, 936, 190, 935,
+	909, 851, 579, 780, 781, 616, 894, 637, 857, 299,
+	619, 298, 181, 780, 781, 829, 824, 817, 777, 759,
+	183, 180, 433, 727, 594, 602, 274, 726, 724, 722,
+	719, 563, 548, 598, 545, 390, 155, 156, 167, 170,
+	171, 172, 173, 174, 175, 177, 179, 378, 333, 332,
+	618, 822, 821, 331, 167, 170, 171, 182, 161, 165,
+	164, 301, 816, 119, 813, 808, 160, 413, 162, 166,
+	168, 169, 176, 178, 163, 165, 164, 773, 615, 544,
+	915, 544, 544, 217, 218, 166, 168, 169, 864, 863,
+	163, 544, 809, 798, 140, 623, 204, 205, 206, 207,
+	208, 209, 210, 211, 212, 213, 214, 215, 216, 794,
+	740, 438, 519, 644, 683, 167, 823, 583, 640, 187,
+	198, 199, 181, 257, 122, 77, 779, 193, 627, 769,
+	116, 620, 119, 659, 329, 661, 116, 624, 309, 642,
+	203, 665, 554, 294, 554, 311, 913, 651, 626, 309,
+	309, 148, 678, 745, 522, 267, 747, 259, 654, 681,
+	640, 5, 428, 586, 167, 9, 266, 119, 692, 8,
+	660, 200, 202, 201, 78, 79, 657, 119, 622, 680,
+	146, 309, 119, 638, 639, 698, 667, 679, 7, 849,
+	674, 729, 294, 234, 234, 6, 581, 118, 259, 530,
+	236, 236, 136, 648, 557, 114, 688, 752, 753, 754,
+	751, 750, 749, 714, 541, 653, 647, 383, 309, 640,
+	234, 386, 260, 261, 911, 555, 797, 236, 284, 285,
+	720, 119, 735, 736, 702, 550, 554, 136, 704, 713,
+	114, 554, 554, 228, 717, 651, 303, 733, 709, 715,
+	553, 737, 711, 889, 802, 305, 801, 718, 125, 640,
+	126, 760, 761, 260, 261, 228, 756, 148, 119, 119,
+	107, 755, 308, 135, 106, 46, 112, 732, 739, 912,
+	725, 752, 753, 754, 751, 750, 749, 535, 640, 259,
+	234, 325, 697, 329, 428, 840, 125, 236, 126, 762,
+	757, 764, 228, 554, 124, 554, 713, 901, 651, 767,
+	772, 812, 770, 774, 194, 150, 259, 119, 775, 111,
+	788, 428, 1, 803, 259, 640, 804, 586, 799, 778,
+	806, 611, 652, 800, 373, 669, 790, 632, 136, 259,
+	782, 114, 784, 786, 286, 121, 131, 259, 640, 234,
+	556, 819, 282, 811, 260, 261, 236, 237, 150, 826,
+	554, 693, 544, 814, 810, 381, 832, 621, 833, 834,
+	413, 625, 815, 539, 379, 831, 825, 780, 781, 197,
+	534, 260, 261, 135, 106, 196, 836, 844, 533, 260,
+	261, 528, 856, 259, 783, 780, 781, 848, 256, 195,
+	189, 865, 371, 855, 260, 261, 235, 879, 238, 147,
+	859, 283, 260, 261, 838, 144, 328, 108, 151, 877,
+	890, 891, 886, 841, 676, 830, 892, 893, 255, 885,
+	38, 730, 743, 853, 746, 897, 898, 744, 225, 872,
+	796, 385, 786, 896, 903, 656, 852, 905, 934, 662,
+	845, 227, 43, 42, 886, 908, 904, 902, 260, 261,
+	16, 885, 15, 606, 271, 49, 48, 110, 50, 84,
+	82, 72, 252, 62, 269, 61, 906, 918, 884, 883,
+	882, 881, 742, 45, 734, 673, 315, 928, 926, 922,
+	789, 924, 925, 586, 120, 929, 302, 3, 441, 768,
+	930, 707, 919, 640, 920, 933, 0, 4, 937, 89,
+	90, 70, 47, 94, 95, 36, 0, 107, 0, 27,
+	0, 0, 0, 112, 26, 18, 17, 0, 19, 0,
+	30, 0, 31, 0, 0, 20, 0, 0, 0, 21,
+	22, 35, 37, 106, 13, 23, 33, 0, 0, 34,
+	12, 0, 24, 0, 29, 87, 88, 10, 39, 40,
+	41, 0, 0, 0, 0, 51, 111, 0, 103, 99,
+	100, 101, 96, 97, 745, 0, 0, 747, 0, 0,
+	104, 0, 0, 0, 0, 11, 102, 98, 114, 0,
+	91, 92, 93, 0, 0, 0, 0, 86, 53, 0,
+	0, 0, 74, 75, 25, 78, 79, 0, 0, 0,
+	54, 55, 76, 63, 64, 65, 66, 67, 68, 69,
+	0, 0, 0, 0, 0, 0, 0, 0, 752, 753,
+	754, 751, 750, 749, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 105, 73, 14,
+	646, 32, 0, 60, 0, 52, 0, 0, 0, 57,
+	56, 58, 59, 71, 108, 4, 0, 89, 90, 70,
+	47, 94, 95, 36, 869, 107, 0, 27, 0, 0,
 	0, 112, 26, 18, 17, 0, 19, 0, 30, 0,
 	31, 0, 0, 20, 0, 0, 0, 21, 22, 35,
 	37, 106, 13, 23, 33, 0, 0, 34, 12, 0,
 	24, 0, 29, 87, 88, 10, 39, 40, 41, 0,
 	0, 0, 0, 51, 111, 0, 103, 99, 100, 101,
-	96, 97, 743, 0, 0, 745, 0, 0, 104, 0,
+	96, 97, 745, 0, 0, 747, 0, 0, 104, 0,
 	0, 0, 0, 11, 102, 98, 114, 0, 91, 92,
 	93, 0, 0, 0, 0, 86, 53, 0, 0, 0,
 	74, 75, 25, 78, 79, 0, 0, 0, 54, 55,
 	76, 63, 64, 65, 66, 67, 68, 69, 0, 0,
-	0, 0, 0, 0, 0, 0, 750, 751, 752, 749,
-	748, 747, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 105, 73, 14, 644, 32,
+	0, 0, 0, 0, 0, 0, 752, 753, 754, 751,
+	750, 749, 0, 0, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 105, 73, 14, 547, 32,
 	0, 60, 0, 52, 0, 0, 0, 57, 56, 58,
 	59, 71, 108, 4, 0, 89, 90, 70, 47, 94,
-	95, 36, 867, 107, 0, 27, 0, 0, 0, 112,
+	95, 36, 837, 107, 0, 27, 0, 0, 0, 112,
 	26, 18, 17, 0, 19, 0, 30, 0, 31, 0,
 	0, 20, 0, 0, 0, 21, 22, 35, 37, 106,
 	13, 23, 33, 0, 0, 34, 12, 0, 24, 0,
 	29, 87, 88, 10, 39, 40, 41, 0, 0, 0,
 	0, 51, 111, 0, 103, 99, 100, 101, 96, 97,
-	743, 0, 0, 745, 0, 0, 104, 0, 0, 0,
+	745, 0, 0, 747, 0, 0, 104, 0, 0, 0,
 	0, 11, 102, 98, 114, 0, 91, 92, 93, 0,
 	0, 0, 0, 86, 53, 0, 0, 0, 74, 75,
 	25, 78, 79, 0, 0, 0, 54, 55, 76, 63,
 	64, 65, 66, 67, 68, 69, 0, 0, 0, 0,
-	0, 0, 0, 0, 750, 751, 752, 749, 748, 747,
+	0, 0, 0, 0, 752, 753, 754, 751, 750, 749,
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 105, 73, 14, 545, 32, 0, 60,
+	0, 0, 0, 105, 73, 14, 0, 32, 0, 60,
 	0, 52, 0, 0, 0, 57, 56, 58, 59, 71,
-	108, 4, 0, 89, 90, 70, 47, 94, 95, 36,
-	835, 107, 0, 27, 0, 0, 0, 112, 26, 18,
+	108, 317, 0, 89, 90, 70, 47, 94, 95, 36,
+	805, 107, 0, 27, 0, 0, 0, 112, 26, 18,
 	17, 0, 19, 0, 30, 0, 31, 0, 0, 20,
-	0, 0, 0, 21, 22, 35, 37, 106, 13, 23,
-	33, 0, 0, 34, 12, 0, 24, 0, 29, 87,
-	88, 10, 39, 40, 41, 0, 0, 0, 0, 51,
-	111, 0, 103, 99, 100, 101, 96, 97, 743, 0,
-	0, 745, 0, 0, 104, 0, 0, 0, 0, 11,
+	0, 0, 0, 21, 22, 35, 37, 106, 0, 23,
+	33, 0, 0, 34, 0, 0, 24, 0, 29, 87,
+	88, 323, 39, 40, 41, 0, 0, 0, 0, 51,
+	111, 0, 103, 99, 100, 101, 96, 97, 745, 0,
+	0, 747, 0, 0, 104, 0, 0, 0, 0, 136,
 	102, 98, 114, 0, 91, 92, 93, 0, 0, 0,
 	0, 86, 53, 0, 0, 0, 74, 75, 25, 78,
 	79, 0, 0, 0, 54, 55, 76, 63, 64, 65,
 	66, 67, 68, 69, 0, 0, 0, 0, 0, 0,
-	0, 0, 750, 751, 752, 749, 748, 747, 0, 0,
+	0, 0, 752, 753, 754, 751, 750, 749, 0, 0,
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 105, 73, 14, 0, 32, 0, 60, 0, 52,
-	0, 0, 0, 57, 56, 58, 59, 71, 108, 316,
-	0, 89, 90, 70, 47, 94, 95, 36, 803, 107,
+	0, 105, 73, 14, 938, 32, 0, 60, 0, 52,
+	0, 0, 0, 57, 56, 58, 59, 71, 108, 317,
+	0, 89, 90, 70, 47, 94, 95, 36, 741, 107,
 	0, 27, 0, 0, 0, 112, 26, 18, 17, 0,
 	19, 0, 30, 0, 31, 0, 0, 20, 0, 0,
 	0, 21, 22, 35, 37, 106, 0, 23, 33, 0,
-	0, 34, 0, 0, 24, 0, 29, 87, 88, 322,
+	0, 34, 0, 0, 24, 0, 29, 87, 88, 323,
 	39, 40, 41, 0, 0, 0, 0, 51, 111, 0,
-	103, 99, 100, 101, 96, 97, 743, 0, 0, 745,
+	103, 99, 100, 101, 96, 97, 0, 0, 0, 0,
 	0, 0, 104, 0, 0, 0, 0, 136, 102, 98,
 	114, 0, 91, 92, 93, 0, 0, 0, 0, 86,
 	53, 0, 0, 0, 74, 75, 25, 78, 79, 0,
 	0, 0, 54, 55, 76, 63, 64, 65, 66, 67,
 	68, 69, 0, 0, 0, 0, 0, 0, 0, 0,
-	750, 751, 752, 749, 748, 747, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 105,
-	73, 14, 936, 32, 0, 60, 0, 52, 0, 0,
-	0, 57, 56, 58, 59, 71, 108, 316, 0, 89,
-	90, 70, 47, 94, 95, 36, 739, 107, 0, 27,
+	73, 14, 931, 32, 0, 60, 0, 52, 0, 0,
+	0, 57, 56, 58, 59, 71, 108, 317, 0, 89,
+	90, 70, 47, 94, 95, 36, 0, 107, 0, 27,
 	0, 0, 0, 112, 26, 18, 17, 0, 19, 0,
 	30, 0, 31, 0, 0, 20, 0, 0, 0, 21,
 	22, 35, 37, 106, 0, 23, 33, 0, 0, 34,
-	0, 0, 24, 0, 29, 87, 88, 322, 39, 40,
+	0, 0, 24, 0, 29, 87, 88, 323, 39, 40,
 	41, 0, 0, 0, 0, 51, 111, 0, 103, 99,
 	100, 101, 96, 97, 0, 0, 0, 0, 0, 0,
 	104, 0, 0, 0, 0, 136, 102, 98, 114, 0,
@@ -727,13 +743,13 @@ var yyAct = [...]int{
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 	0, 0, 0, 0, 0, 0, 0, 105, 73, 14,
-	929, 32, 0, 60, 0, 52, 0, 0, 0, 57,
-	56, 58, 59, 71, 108, 316, 0, 89, 90, 70,
+	917, 32, 0, 60, 0, 52, 0, 0, 0, 57,
+	56, 58, 59, 71, 108, 317, 0, 89, 90, 70,
 	47, 94, 95, 36, 0, 107, 0, 27, 0, 0,
 	0, 112, 26, 18, 17, 0, 19, 0, 30, 0,
 	31, 0, 0, 20, 0, 0, 0, 21, 22, 35,
 	37, 106, 0, 23, 33, 0, 0, 34, 0, 0,
-	24, 0, 29, 87, 88, 322, 39, 40, 41, 0,
+	24, 0, 29, 87, 88, 323, 39, 40, 41, 0,
 	0, 0, 0, 51, 111, 0, 103, 99, 100, 101,
 	96, 97, 0, 0, 0, 0, 0, 0, 104, 0,
 	0, 0, 0, 136, 102, 98, 114, 0, 91, 92,
@@ -742,14 +758,14 @@ var yyAct = [...]int{
 	76, 63, 64, 65, 66, 67, 68, 69, 0, 0,
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 105, 73, 14, 915, 32,
+	0, 0, 0, 0, 0, 105, 73, 14, 916, 32,
 	0, 60, 0, 52, 0, 0, 0, 57, 56, 58,
-	59, 71, 108, 316, 0, 89, 90, 70, 47, 94,
+	59, 71, 108, 317, 0, 89, 90, 70, 47, 94,
 	95, 36, 0, 107, 0, 27, 0, 0, 0, 112,
-	26, 18, 17, 0, 19, 0, 30, 0, 31, 0,
+	26, 18, 17, 0, 19, 914, 30, 0, 31, 0,
 	0, 20, 0, 0, 0, 21, 22, 35, 37, 106,
 	0, 23, 33, 0, 0, 34, 0, 0, 24, 0,
-	29, 87, 88, 322, 39, 40, 41, 0, 0, 0,
+	29, 87, 88, 323, 39, 40, 41, 0, 0, 0,
 	0, 51, 111, 0, 103, 99, 100, 101, 96, 97,
 	0, 0, 0, 0, 0, 0, 104, 0, 0, 0,
 	0, 136, 102, 98, 114, 0, 91, 92, 93, 0,
@@ -758,14 +774,14 @@ var yyAct = [...]int{
 	64, 65, 66, 67, 68, 69, 0, 0, 0, 0,
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 105, 73, 14, 914, 32, 0, 60,
+	0, 0, 0, 105, 73, 14, 0, 32, 0, 60,
 	0, 52, 0, 0, 0, 57, 56, 58, 59, 71,
-	108, 316, 0, 89, 90, 70, 47, 94, 95, 36,
+	108, 317, 0, 89, 90, 70, 47, 94, 95, 36,
 	0, 107, 0, 27, 0, 0, 0, 112, 26, 18,
-	17, 0, 19, 912, 30, 0, 31, 0, 0, 20,
+	17, 0, 19, 0, 30, 0, 31, 0, 0, 20,
 	0, 0, 0, 21, 22, 35, 37, 106, 0, 23,
 	33, 0, 0, 34, 0, 0, 24, 0, 29, 87,
-	88, 322, 39, 40, 41, 0, 0, 0, 0, 51,
+	88, 323, 39, 40, 41, 0, 0, 0, 0, 51,
 	111, 0, 103, 99, 100, 101, 96, 97, 0, 0,
 	0, 0, 0, 0, 104, 0, 0, 0, 0, 136,
 	102, 98, 114, 0, 91, 92, 93, 0, 0, 0,
@@ -774,13 +790,13 @@ var yyAct = [...]int{
 	66, 67, 68, 69, 0, 0, 0, 0, 0, 0,
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 105, 73, 14, 0, 32, 0, 60, 0, 52,
-	0, 0, 0, 57, 56, 58, 59, 71, 108, 316,
+	0, 105, 73, 14, 862, 32, 0, 60, 0, 52,
+	0, 0, 0, 57, 56, 58, 59, 71, 108, 317,
 	0, 89, 90, 70, 47, 94, 95, 36, 0, 107,
 	0, 27, 0, 0, 0, 112, 26, 18, 17, 0,
-	19, 0, 30, 0, 31, 0, 0, 20, 0, 0,
+	19, 0, 30, 858, 31, 0, 0, 20, 0, 0,
 	0, 21, 22, 35, 37, 106, 0, 23, 33, 0,
-	0, 34, 0, 0, 24, 0, 29, 87, 88, 322,
+	0, 34, 0, 0, 24, 0, 29, 87, 88, 323,
 	39, 40, 41, 0, 0, 0, 0, 51, 111, 0,
 	103, 99, 100, 101, 96, 97, 0, 0, 0, 0,
 	0, 0, 104, 0, 0, 0, 0, 136, 102, 98,
@@ -790,13 +806,13 @@ var yyAct = [...]int{
 	68, 69, 0, 0, 0, 0, 0, 0, 0, 0,
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 105,
-	73, 14, 860, 32, 0, 60, 0, 52, 0, 0,
-	0, 57, 56, 58, 59, 71, 108, 316, 0, 89,
+	73, 14, 0, 32, 0, 60, 0, 52, 0, 0,
+	0, 57, 56, 58, 59, 71, 108, 317, 0, 89,
 	90, 70, 47, 94, 95, 36, 0, 107, 0, 27,
 	0, 0, 0, 112, 26, 18, 17, 0, 19, 0,
-	30, 856, 31, 0, 0, 20, 0, 0, 0, 21,
+	30, 0, 31, 792, 0, 20, 0, 0, 0, 21,
 	22, 35, 37, 106, 0, 23, 33, 0, 0, 34,
-	0, 0, 24, 0, 29, 87, 88, 322, 39, 40,
+	0, 0, 24, 0, 29, 87, 88, 323, 39, 40,
 	41, 0, 0, 0, 0, 51, 111, 0, 103, 99,
 	100, 101, 96, 97, 0, 0, 0, 0, 0, 0,
 	104, 0, 0, 0, 0, 136, 102, 98, 114, 0,
@@ -807,12 +823,12 @@ var yyAct = [...]int{
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 	0, 0, 0, 0, 0, 0, 0, 105, 73, 14,
 	0, 32, 0, 60, 0, 52, 0, 0, 0, 57,
-	56, 58, 59, 71, 108, 316, 0, 89, 90, 70,
+	56, 58, 59, 71, 108, 317, 0, 89, 90, 70,
 	47, 94, 95, 36, 0, 107, 0, 27, 0, 0,
-	0, 112, 26, 18, 17, 0, 19, 0, 30, 0,
-	31, 790, 0, 20, 0, 0, 0, 21, 22, 35,
+	0, 112, 26, 18, 17, 776, 19, 0, 30, 0,
+	31, 0, 0, 20, 0, 0, 0, 21, 22, 35,
 	37, 106, 0, 23, 33, 0, 0, 34, 0, 0,
-	24, 0, 29, 87, 88, 322, 39, 40, 41, 0,
+	24, 0, 29, 87, 88, 323, 39, 40, 41, 0,
 	0, 0, 0, 51, 111, 0, 103, 99, 100, 101,
 	96, 97, 0, 0, 0, 0, 0, 0, 104, 0,
 	0, 0, 0, 136, 102, 98, 114, 0, 91, 92,
@@ -823,43 +839,43 @@ var yyAct = [...]int{
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 	0, 0, 0, 0, 0, 105, 73, 14, 0, 32,
 	0, 60, 0, 52, 0, 0, 0, 57, 56, 58,
-	59, 71, 108, 316, 0, 89, 90, 70, 47, 94,
+	59, 71, 108, 317, 0, 89, 90, 70, 47, 94,
 	95, 36, 0, 107, 0, 27, 0, 0, 0, 112,
-	26, 18, 17, 774, 19, 0, 30, 0, 31, 0,
+	26, 18, 17, 0, 19, 0, 30, 0, 31, 0,
 	0, 20, 0, 0, 0, 21, 22, 35, 37, 106,
 	0, 23, 33, 0, 0, 34, 0, 0, 24, 0,
-	29, 87, 88, 322, 39, 40, 41, 0, 0, 0,
+	29, 87, 88, 323, 39, 40, 41, 0, 0, 0,
 	0, 51, 111, 0, 103, 99, 100, 101, 96, 97,
 	0, 0, 0, 0, 0, 0, 104, 0, 0, 0,
 	0, 136, 102, 98, 114, 0, 91, 92, 93, 0,
-	0, 0, 0, 86, 53, 0, 0, 0, 74, 75,
+	0, 0, 0, 86, 53, 0, 0, 687, 74, 75,
 	25, 78, 79, 0, 0, 0, 54, 55, 76, 63,
 	64, 65, 66, 67, 68, 69, 0, 0, 0, 0,
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 	0, 0, 0, 105, 73, 14, 0, 32, 0, 60,
 	0, 52, 0, 0, 0, 57, 56, 58, 59, 71,
-	108, 316, 0, 89, 90, 70, 47, 94, 95, 36,
+	108, 317, 0, 89, 90, 70, 47, 94, 95, 36,
 	0, 107, 0, 27, 0, 0, 0, 112, 26, 18,
 	17, 0, 19, 0, 30, 0, 31, 0, 0, 20,
 	0, 0, 0, 21, 22, 35, 37, 106, 0, 23,
 	33, 0, 0, 34, 0, 0, 24, 0, 29, 87,
-	88, 322, 39, 40, 41, 0, 0, 0, 0, 51,
+	88, 323, 39, 40, 41, 0, 0, 0, 0, 51,
 	111, 0, 103, 99, 100, 101, 96, 97, 0, 0,
 	0, 0, 0, 0, 104, 0, 0, 0, 0, 136,
 	102, 98, 114, 0, 91, 92, 93, 0, 0, 0,
-	0, 86, 53, 0, 0, 685, 74, 75, 25, 78,
+	0, 86, 53, 0, 0, 0, 74, 75, 25, 78,
 	79, 0, 0, 0, 54, 55, 76, 63, 64, 65,
 	66, 67, 68, 69, 0, 0, 0, 0, 0, 0,
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 105, 73, 14, 0, 32, 0, 60, 0, 52,
-	0, 0, 0, 57, 56, 58, 59, 71, 108, 316,
+	0, 105, 73, 14, 576, 32, 0, 60, 0, 52,
+	0, 0, 0, 57, 56, 58, 59, 71, 108, 317,
 	0, 89, 90, 70, 47, 94, 95, 36, 0, 107,
 	0, 27, 0, 0, 0, 112, 26, 18, 17, 0,
 	19, 0, 30, 0, 31, 0, 0, 20, 0, 0,
 	0, 21, 22, 35, 37, 106, 0, 23, 33, 0,
-	0, 34, 0, 0, 24, 0, 29, 87, 88, 322,
+	0, 34, 0, 0, 24, 0, 29, 87, 88, 323,
 	39, 40, 41, 0, 0, 0, 0, 51, 111, 0,
 	103, 99, 100, 101, 96, 97, 0, 0, 0, 0,
 	0, 0, 104, 0, 0, 0, 0, 136, 102, 98,
@@ -869,13 +885,13 @@ var yyAct = [...]int{
 	68, 69, 0, 0, 0, 0, 0, 0, 0, 0,
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 105,
-	73, 14, 574, 32, 0, 60, 0, 52, 0, 0,
-	0, 57, 56, 58, 59, 71, 108, 316, 0, 89,
+	73, 14, 316, 32, 0, 60, 0, 52, 0, 0,
+	0, 57, 56, 58, 59, 71, 108, 317, 0, 89,
 	90, 70, 47, 94, 95, 36, 0, 107, 0, 27,
 	0, 0, 0, 112, 26, 18, 17, 0, 19, 0,
 	30, 0, 31, 0, 0, 20, 0, 0, 0, 21,
 	22, 35, 37, 106, 0, 23, 33, 0, 0, 34,
-	0, 0, 24, 0, 29, 87, 88, 322, 39, 40,
+	0, 0, 24, 0, 29, 87, 88, 323, 39, 40,
 	41, 0, 0, 0, 0, 51, 111, 0, 103, 99,
 	100, 101, 96, 97, 0, 0, 0, 0, 0, 0,
 	104, 0, 0, 0, 0, 136, 102, 98, 114, 0,
@@ -885,71 +901,24 @@ var yyAct = [...]int{
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 	0, 0, 0, 0, 0, 0, 0, 105, 73, 14,
-	315, 32, 0, 60, 0, 52, 0, 0, 0, 57,
-	56, 58, 59, 71, 108, 316, 0, 89, 90, 70,
-	47, 94, 95, 36, 0, 107, 0, 27, 0, 0,
-	0, 112, 26, 18, 17, 0, 19, 0, 30, 0,
-	31, 0, 0, 20, 0, 0, 0, 21, 22, 35,
-	37, 106, 0, 23, 33, 0, 0, 34, 0, 0,
-	24, 0, 29, 87, 88, 322, 39, 40, 41, 0,
-	0, 0, 0, 51, 111, 0, 103, 99, 100, 101,
-	96, 97, 0, 0, 0, 0, 0, 0, 104, 0,
-	0, 0, 0, 136, 102, 98, 114, 0, 91, 92,
-	93, 0, 0, 0, 0, 86, 53, 0, 0, 0,
-	74, 75, 25, 78, 79, 0, 0, 0, 54, 55,
-	76, 63, 64, 65, 66, 67, 68, 69, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 105, 73, 14, 0, 32,
-	0, 60, 0, 52, 0, 0, 0, 57, 56, 58,
-	59, 71, 108, 447, 448, 458, 459, 0, 0, 438,
-	0, 107, 0, 0, 0, 0, 0, 0, 463, 464,
-	465, 466, 467, 468, 469, 470, 471, 472, 473, 493,
-	494, 495, 496, 497, 485, 486, 487, 514, 488, 489,
-	474, 475, 476, 477, 478, 479, 480, 481, 482, 483,
-	484, 0, 505, 503, 504, 500, 501, 0, 0, 492,
-	498, 499, 506, 507, 509, 508, 510, 511, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 502,
-	513, 512, 0, 0, 449, 450, 451, 452, 453, 454,
-	455, 456, 457, 460, 461, 462, 490, 491, 441, 442,
-	443, 444, 445, 446, 89, 90, 70, 47, 94, 95,
-	36, 0, 107, 0, 27, 0, 0, 0, 112, 26,
-	18, 17, 0, 19, 0, 30, 0, 31, 0, 0,
-	20, 0, 0, 0, 21, 22, 35, 135, 106, 0,
-	23, 33, 0, 437, 34, 0, 0, 24, 0, 29,
-	87, 88, 181, 0, 0, 0, 0, 0, 108, 0,
-	51, 111, 0, 103, 99, 100, 101, 96, 97, 0,
-	0, 0, 0, 0, 0, 104, 0, 0, 0, 0,
-	136, 102, 98, 114, 0, 91, 92, 93, 0, 0,
-	0, 0, 86, 53, 167, 170, 171, 74, 75, 25,
-	0, 177, 179, 0, 0, 54, 55, 76, 63, 64,
-	65, 66, 67, 68, 69, 165, 164, 0, 0, 0,
-	0, 0, 0, 0, 0, 166, 168, 169, 176, 178,
-	163, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 105, 73, 14, 0, 32, 785, 60, 0,
-	52, 0, 0, 0, 57, 56, 58, 59, 71, 108,
-	89, 90, 70, 47, 94, 95, 36, 0, 107, 0,
-	27, 0, 0, 0, 112, 26, 18, 17, 0, 19,
-	0, 30, 0, 31, 0, 0, 20, 0, 0, 0,
-	21, 22, 35, 135, 106, 0, 23, 33, 0, 0,
-	34, 0, 0, 24, 0, 29, 87, 88, 0, 0,
-	0, 0, 0, 0, 0, 0, 51, 111, 0, 103,
-	99, 100, 101, 96, 97, 0, 0, 0, 0, 0,
-	0, 104, 0, 0, 0, 0, 136, 102, 98, 114,
-	0, 91, 92, 93, 0, 0, 0, 0, 86, 53,
-	0, 0, 0, 74, 75, 25, 0, 0, 0, 0,
-	0, 54, 55, 76, 63, 64, 65, 66, 67, 68,
-	69, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+	0, 32, 0, 60, 0, 52, 0, 0, 0, 57,
+	56, 58, 59, 71, 108, 449, 450, 460, 461, 0,
+	0, 440, 0, 107, 0, 0, 0, 0, 0, 0,
+	465, 466, 467, 468, 469, 470, 471, 472, 473, 474,
+	475, 495, 496, 497, 498, 499, 487, 488, 489, 516,
+	490, 491, 476, 477, 478, 479, 480, 481, 482, 483,
+	484, 485, 486, 0, 507, 505, 506, 502, 503, 0,
+	0, 494, 500, 501, 508, 509, 511, 510, 512, 513,
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 105, 73,
-	14, 0, 32, 852, 60, 0, 52, 0, 0, 0,
-	57, 56, 58, 59, 71, 108, 89, 90, 70, 47,
+	0, 504, 515, 514, 0, 0, 451, 452, 453, 454,
+	455, 456, 457, 458, 459, 462, 463, 464, 492, 493,
+	443, 444, 445, 446, 447, 448, 89, 90, 70, 47,
 	94, 95, 36, 0, 107, 0, 27, 0, 0, 0,
 	112, 26, 18, 17, 0, 19, 0, 30, 0, 31,
 	0, 0, 20, 0, 0, 0, 21, 22, 35, 135,
-	106, 0, 23, 33, 0, 0, 34, 0, 0, 24,
+	106, 0, 23, 33, 0, 439, 34, 0, 0, 24,
 	0, 29, 87, 88, 0, 0, 0, 0, 0, 0,
-	0, 0, 51, 111, 0, 103, 99, 100, 101, 96,
+	108, 0, 51, 111, 0, 103, 99, 100, 101, 96,
 	97, 0, 0, 0, 0, 0, 0, 104, 0, 0,
 	0, 0, 136, 102, 98, 114, 0, 91, 92, 93,
 	0, 0, 0, 0, 86, 53, 0, 0, 0, 74,
@@ -957,7 +926,7 @@ var yyAct = [...]int{
 	63, 64, 65, 66, 67, 68, 69, 0, 0, 0,
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 105, 73, 14, 0, 32, 687,
+	0, 0, 0, 0, 105, 73, 14, 0, 32, 787,
 	60, 0, 52, 0, 0, 0, 57, 56, 58, 59,
 	71, 108, 89, 90, 70, 47, 94, 95, 36, 0,
 	107, 0, 27, 0, 0, 0, 112, 26, 18, 17,
@@ -973,7 +942,7 @@ var yyAct = [...]int{
 	67, 68, 69, 0, 0, 0, 0, 0, 0, 0,
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	105, 73, 14, 0, 32, 673, 60, 0, 52, 0,
+	105, 73, 14, 0, 32, 854, 60, 0, 52, 0,
 	0, 0, 57, 56, 58, 59, 71, 108, 89, 90,
 	70, 47, 94, 95, 36, 0, 107, 0, 27, 0,
 	0, 0, 112, 26, 18, 17, 0, 19, 0, 30,
@@ -989,7 +958,7 @@ var yyAct = [...]int{
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 	0, 0, 0, 0, 0, 0, 105, 73, 14, 0,
-	32, 656, 60, 0, 52, 0, 0, 0, 57, 56,
+	32, 689, 60, 0, 52, 0, 0, 0, 57, 56,
 	58, 59, 71, 108, 89, 90, 70, 47, 94, 95,
 	36, 0, 107, 0, 27, 0, 0, 0, 112, 26,
 	18, 17, 0, 19, 0, 30, 0, 31, 0, 0,
@@ -1004,62 +973,116 @@ var yyAct = [...]int{
 	65, 66, 67, 68, 69, 0, 0, 0, 0, 0,
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 105, 73, 14, 0, 32, 0, 60, 0,
+	0, 0, 105, 73, 14, 0, 32, 675, 60, 0,
 	52, 0, 0, 0, 57, 56, 58, 59, 71, 108,
-	447, 448, 458, 459, 0, 0, 886, 0, 0, 0,
-	0, 0, 0, 0, 0, 463, 464, 465, 466, 467,
-	468, 469, 470, 471, 472, 473, 493, 494, 495, 496,
-	497, 485, 486, 487, 514, 488, 489, 474, 475, 476,
-	477, 478, 479, 480, 481, 482, 483, 484, 0, 505,
-	503, 504, 500, 501, 0, 0, 492, 498, 499, 506,
-	507, 509, 508, 510, 511, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 885, 513, 512, 114,
-	0, 449, 450, 451, 452, 453, 454, 455, 456, 457,
-	460, 461, 462, 490, 491, 441, 442, 443, 444, 445,
-	446, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+	89, 90, 70, 47, 94, 95, 36, 0, 107, 0,
+	27, 0, 0, 0, 112, 26, 18, 17, 0, 19,
+	0, 30, 0, 31, 0, 0, 20, 0, 0, 0,
+	21, 22, 35, 135, 106, 0, 23, 33, 0, 0,
+	34, 0, 0, 24, 0, 29, 87, 88, 0, 0,
+	0, 0, 0, 0, 0, 0, 51, 111, 0, 103,
+	99, 100, 101, 96, 97, 0, 0, 0, 0, 0,
+	0, 104, 0, 0, 0, 0, 136, 102, 98, 114,
+	0, 91, 92, 93, 0, 0, 0, 0, 86, 53,
+	0, 0, 0, 74, 75, 25, 0, 0, 0, 0,
+	0, 54, 55, 76, 63, 64, 65, 66, 67, 68,
+	69, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 0, 105, 73,
+	14, 0, 32, 658, 60, 0, 52, 0, 0, 0,
+	57, 56, 58, 59, 71, 108, 89, 90, 70, 47,
+	94, 95, 36, 0, 107, 0, 27, 0, 0, 0,
+	112, 26, 18, 17, 0, 19, 0, 30, 0, 31,
+	0, 0, 20, 0, 0, 0, 21, 22, 35, 135,
+	106, 0, 23, 33, 0, 0, 34, 0, 0, 24,
+	0, 29, 87, 88, 0, 0, 0, 0, 0, 0,
+	0, 0, 51, 111, 0, 103, 99, 100, 101, 96,
+	97, 0, 0, 0, 0, 0, 0, 104, 0, 0,
+	0, 0, 136, 102, 98, 114, 0, 91, 92, 93,
+	0, 0, 0, 0, 86, 53, 0, 0, 0, 74,
+	75, 25, 0, 0, 0, 0, 0, 54, 55, 76,
+	63, 64, 65, 66, 67, 68, 69, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 105, 73, 14, 0, 32, 0,
+	60, 0, 52, 0, 0, 0, 57, 56, 58, 59,
+	71, 108, 449, 450, 460, 461, 0, 0, 888, 0,
+	0, 0, 0, 0, 0, 0, 0, 465, 466, 467,
+	468, 469, 470, 471, 472, 473, 474, 475, 495, 496,
+	497, 498, 499, 487, 488, 489, 516, 490, 491, 476,
+	477, 478, 479, 480, 481, 482, 483, 484, 485, 486,
+	0, 507, 505, 506, 502, 503, 0, 0, 494, 500,
+	501, 508, 509, 511, 510, 512, 513, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 0, 887, 515,
+	514, 114, 0, 451, 452, 453, 454, 455, 456, 457,
+	458, 459, 462, 463, 464, 492, 493, 443, 444, 445,
+	446, 447, 448, 0, 0, 0, 0, 0, 0, 0,
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 447, 448, 458,
-	459, 0, 0, 886, 0, 0, 0, 0, 0, 0,
-	0, 905, 463, 464, 465, 466, 467, 468, 469, 470,
-	471, 472, 473, 493, 494, 495, 496, 497, 485, 486,
-	487, 514, 488, 489, 474, 475, 476, 477, 478, 479,
-	480, 481, 482, 483, 484, 0, 505, 503, 504, 500,
-	501, 0, 0, 492, 498, 499, 506, 507, 509, 508,
-	510, 511, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 885, 513, 512, 114, 0, 449, 450,
-	451, 452, 453, 454, 455, 456, 457, 460, 461, 462,
-	490, 491, 441, 442, 443, 444, 445, 446, 89, 90,
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 449,
+	450, 460, 461, 0, 0, 888, 0, 0, 0, 0,
+	0, 0, 0, 907, 465, 466, 467, 468, 469, 470,
+	471, 472, 473, 474, 475, 495, 496, 497, 498, 499,
+	487, 488, 489, 516, 490, 491, 476, 477, 478, 479,
+	480, 481, 482, 483, 484, 485, 486, 0, 507, 505,
+	506, 502, 503, 0, 0, 494, 500, 501, 508, 509,
+	511, 510, 512, 513, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 887, 515, 514, 114, 0,
+	451, 452, 453, 454, 455, 456, 457, 458, 459, 462,
+	463, 464, 492, 493, 443, 444, 445, 446, 447, 448,
+	89, 90, 70, 0, 94, 95, 119, 0, 107, 0,
+	0, 0, 0, 0, 112, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 135, 106, 0, 0, 0, 0, 0,
+	878, 0, 0, 0, 0, 0, 87, 88, 0, 0,
+	0, 0, 0, 0, 0, 0, 231, 111, 0, 103,
+	99, 100, 101, 96, 97, 0, 0, 0, 0, 0,
+	0, 104, 0, 0, 0, 0, 136, 102, 98, 114,
+	230, 91, 92, 93, 0, 0, 0, 0, 86, 53,
+	0, 0, 0, 74, 75, 141, 0, 0, 0, 0,
+	0, 54, 55, 76, 63, 64, 65, 66, 67, 68,
+	69, 0, 0, 0, 89, 90, 70, 0, 94, 95,
+	119, 0, 107, 0, 0, 0, 0, 0, 112, 0,
+	0, 0, 0, 0, 0, 0, 0, 0, 105, 73,
+	0, 0, 0, 0, 60, 0, 52, 135, 106, 229,
+	57, 56, 58, 59, 71, 108, 0, 0, 0, 0,
+	87, 88, 0, 0, 0, 0, 0, 0, 0, 0,
+	51, 111, 0, 103, 99, 100, 101, 96, 97, 0,
+	0, 0, 0, 0, 0, 104, 0, 0, 0, 0,
+	136, 102, 98, 114, 542, 91, 92, 93, 0, 0,
+	0, 0, 86, 53, 0, 0, 0, 74, 75, 141,
+	0, 0, 0, 0, 0, 54, 55, 76, 63, 64,
+	65, 66, 67, 68, 69, 0, 0, 0, 89, 90,
 	70, 0, 94, 95, 119, 0, 107, 0, 0, 0,
 	0, 0, 112, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 135, 106, 0, 0, 0, 0, 0, 876, 0,
+	0, 0, 105, 73, 0, 0, 0, 0, 60, 538,
+	52, 135, 106, 0, 57, 56, 58, 59, 71, 108,
 	0, 0, 0, 0, 87, 88, 0, 0, 0, 0,
 	0, 0, 0, 0, 51, 111, 0, 103, 99, 100,
 	101, 96, 97, 0, 0, 0, 0, 0, 0, 104,
-	0, 0, 0, 0, 136, 102, 98, 114, 540, 91,
+	0, 0, 0, 0, 136, 102, 98, 114, 542, 91,
 	92, 93, 0, 0, 0, 0, 86, 53, 0, 0,
 	0, 74, 75, 141, 0, 0, 0, 0, 0, 54,
 	55, 76, 63, 64, 65, 66, 67, 68, 69, 0,
 	0, 0, 89, 90, 70, 0, 94, 95, 119, 0,
 	107, 0, 0, 0, 0, 0, 112, 0, 0, 0,
 	0, 0, 0, 0, 0, 0, 105, 73, 0, 0,
-	0, 0, 60, 536, 52, 135, 106, 0, 57, 56,
+	0, 0, 60, 0, 52, 135, 106, 0, 57, 56,
 	58, 59, 71, 108, 0, 0, 0, 0, 87, 88,
-	0, 0, 0, 0, 0, 0, 0, 0, 230, 111,
+	0, 0, 0, 0, 0, 0, 0, 0, 601, 111,
 	0, 103, 99, 100, 101, 96, 97, 0, 0, 0,
 	0, 0, 0, 104, 0, 0, 0, 0, 136, 102,
 	98, 114, 0, 91, 92, 93, 0, 0, 0, 0,
 	86, 53, 0, 0, 0, 74, 75, 141, 0, 0,
 	0, 0, 0, 54, 55, 76, 63, 64, 65, 66,
 	67, 68, 69, 0, 0, 0, 89, 90, 70, 0,
-	94, 95, 119, 0, 107, 0, 0, 0, 0, 0,
+	94, 95, 119, 432, 107, 0, 0, 0, 0, 0,
 	112, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 	105, 73, 0, 0, 0, 0, 60, 0, 52, 135,
-	106, 229, 57, 56, 58, 59, 71, 108, 0, 0,
+	106, 600, 57, 56, 58, 59, 71, 108, 0, 0,
 	0, 0, 87, 88, 0, 0, 0, 0, 0, 0,
 	0, 0, 51, 111, 0, 103, 99, 100, 101, 96,
 	97, 0, 0, 0, 0, 0, 0, 104, 0, 0,
-	0, 0, 136, 102, 98, 114, 540, 91, 92, 93,
+	0, 0, 136, 102, 98, 114, 0, 91, 92, 93,
 	0, 0, 0, 0, 86, 53, 0, 0, 0, 74,
 	75, 141, 0, 0, 0, 0, 0, 54, 55, 76,
 	63, 64, 65, 66, 67, 68, 69, 0, 0, 0,
@@ -1068,16 +1091,16 @@ var yyAct = [...]int{
 	0, 0, 0, 0, 105, 73, 0, 0, 0, 0,
 	60, 0, 52, 135, 106, 0, 57, 56, 58, 59,
 	71, 108, 0, 0, 0, 0, 87, 88, 0, 0,
-	0, 0, 0, 0, 0, 0, 599, 111, 0, 103,
+	0, 0, 0, 0, 0, 0, 51, 111, 0, 103,
 	99, 100, 101, 96, 97, 0, 0, 0, 0, 0,
 	0, 104, 0, 0, 0, 0, 136, 102, 98, 114,
 	0, 91, 92, 93, 0, 0, 0, 0, 86, 53,
 	0, 0, 0, 74, 75, 141, 0, 0, 0, 0,
 	0, 54, 55, 76, 63, 64, 65, 66, 67, 68,
 	69, 0, 0, 0, 89, 90, 70, 0, 94, 95,
-	119, 430, 107, 0, 0, 0, 0, 0, 112, 0,
+	119, 0, 107, 0, 0, 0, 0, 0, 112, 0,
 	0, 0, 0, 0, 0, 0, 0, 0, 105, 73,
-	0, 0, 0, 0, 60, 0, 52, 135, 106, 598,
+	0, 0, 0, 0, 60, 0, 52, 135, 106, 393,
 	57, 56, 58, 59, 71, 108, 0, 0, 0, 0,
 	87, 88, 0, 0, 0, 0, 0, 0, 0, 0,
 	51, 111, 0, 103, 99, 100, 101, 96, 97, 0,
@@ -1088,7 +1111,7 @@ var yyAct = [...]int{
 	65, 66, 67, 68, 69, 0, 0, 0, 89, 90,
 	70, 0, 94, 95, 119, 0, 107, 0, 0, 0,
 	0, 0, 112, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 105, 73, 0, 0, 0, 0, 60, 0,
+	0, 0, 105, 73, 0, 0, 0, 369, 60, 0,
 	52, 135, 106, 0, 57, 56, 58, 59, 71, 108,
 	0, 0, 0, 0, 87, 88, 0, 0, 0, 0,
 	0, 0, 0, 0, 51, 111, 0, 103, 99, 100,
@@ -1097,43 +1120,26 @@ var yyAct = [...]int{
 	92, 93, 0, 0, 0, 0, 86, 53, 0, 0,
 	0, 74, 75, 141, 0, 0, 0, 0, 0, 54,
 	55, 76, 63, 64, 65, 66, 67, 68, 69, 0,
-	0, 0, 89, 90, 70, 0, 94, 95, 119, 0,
-	107, 0, 0, 0, 0, 0, 112, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 105, 73, 0, 0,
-	0, 0, 60, 0, 52, 135, 106, 392, 57, 56,
-	58, 59, 71, 108, 0, 0, 0, 0, 87, 88,
-	0, 0, 0, 0, 0, 0, 0, 0, 51, 111,
-	0, 103, 99, 100, 101, 96, 97, 0, 0, 0,
-	0, 0, 0, 104, 0, 0, 0, 0, 136, 102,
-	98, 114, 0, 91, 92, 93, 0, 0, 0, 0,
-	86, 53, 0, 0, 0, 74, 75, 141, 0, 0,
-	0, 0, 0, 54, 55, 76, 63, 64, 65, 66,
-	67, 68, 69, 0, 0, 0, 89, 90, 70, 0,
-	94, 95, 119, 0, 107, 0, 0, 0, 0, 0,
-	112, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	105, 73, 0, 0, 0, 368, 60, 0, 52, 135,
-	106, 0, 57, 56, 58, 59, 71, 108, 0, 0,
-	0, 0, 87, 88, 0, 0, 0, 0, 0, 0,
-	0, 0, 51, 111, 0, 103, 99, 100, 101, 96,
-	97, 0, 0, 0, 0, 0, 0, 104, 0, 0,
-	0, 0, 136, 102, 98, 114, 0, 91, 92, 93,
-	0, 0, 0, 0, 86, 53, 0, 0, 0, 74,
-	75, 141, 0, 0, 0, 0, 0, 54, 55, 76,
-	63, 64, 65, 66, 67, 68, 69, 0, 0, 157,
-	159, 158, 181, 0, 0, 0, 0, 0, 0, 0,
+	0, 157, 159, 158, 181, 0, 0, 0, 0, 0,
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 105, 73, 183, 180, 0, 0,
-	60, 0, 52, 0, 0, 0, 57, 56, 58, 59,
-	71, 108, 155, 156, 167, 170, 171, 172, 173, 174,
-	175, 177, 179, 0, 157, 159, 158, 181, 0, 0,
-	0, 0, 761, 182, 161, 165, 164, 0, 0, 0,
-	0, 0, 160, 0, 162, 166, 168, 169, 176, 178,
-	163, 183, 180, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 155, 156, 167,
-	170, 171, 172, 173, 174, 175, 177, 179, 0, 157,
-	159, 158, 181, 0, 0, 719, 0, 0, 182, 161,
-	165, 164, 0, 0, 0, 0, 0, 160, 0, 162,
-	166, 168, 169, 176, 178, 163, 183, 180, 0, 0,
+	0, 0, 0, 0, 0, 0, 105, 73, 183, 180,
+	0, 0, 60, 0, 52, 0, 0, 0, 57, 56,
+	58, 59, 71, 108, 155, 156, 167, 170, 171, 172,
+	173, 174, 175, 177, 179, 0, 157, 159, 158, 181,
+	0, 0, 0, 0, 763, 182, 161, 165, 164, 0,
+	0, 0, 0, 0, 160, 0, 162, 166, 168, 169,
+	176, 178, 163, 183, 180, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 155,
+	156, 167, 170, 171, 172, 173, 174, 175, 177, 179,
+	0, 157, 159, 158, 181, 0, 0, 721, 0, 0,
+	182, 161, 165, 164, 0, 0, 0, 0, 0, 160,
+	0, 162, 166, 168, 169, 176, 178, 163, 183, 180,
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 155, 156, 167, 170, 171, 172,
+	173, 174, 175, 177, 179, 0, 0, 0, 701, 157,
+	159, 158, 181, 0, 0, 182, 161, 165, 164, 0,
+	0, 0, 0, 0, 160, 0, 162, 166, 168, 169,
+	176, 178, 163, 0, 0, 0, 183, 180, 0, 0,
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 	0, 0, 155, 156, 167, 170, 171, 172, 173, 174,
 	175, 177, 179, 0, 0, 0, 699, 157, 159, 158,
@@ -1142,66 +1148,89 @@ var yyAct = [...]int{
 	163, 0, 0, 0, 183, 180, 0, 0, 0, 0,
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 	155, 156, 167, 170, 171, 172, 173, 174, 175, 177,
-	179, 0, 0, 0, 697, 157, 159, 158, 181, 0,
+	179, 0, 0, 0, 690, 157, 159, 158, 181, 0,
 	0, 182, 161, 165, 164, 0, 0, 0, 0, 0,
 	160, 0, 162, 166, 168, 169, 176, 178, 163, 0,
 	0, 0, 183, 180, 0, 0, 0, 0, 0, 0,
 	0, 0, 0, 0, 0, 0, 0, 0, 155, 156,
 	167, 170, 171, 172, 173, 174, 175, 177, 179, 0,
-	0, 0, 688, 157, 159, 158, 181, 0, 0, 182,
+	157, 159, 158, 181, 0, 0, 686, 0, 0, 182,
+	161, 165, 164, 0, 0, 0, 0, 0, 160, 0,
+	162, 166, 168, 169, 176, 178, 163, 183, 180, 0,
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 155, 156, 167, 170, 171, 172, 173,
+	174, 175, 177, 179, 0, 157, 159, 158, 181, 0,
+	0, 685, 0, 0, 182, 161, 165, 164, 0, 0,
+	0, 0, 0, 160, 0, 162, 166, 168, 169, 176,
+	178, 163, 183, 180, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 0, 155, 156,
+	167, 170, 171, 172, 173, 174, 175, 177, 179, 0,
+	0, 0, 641, 157, 159, 158, 181, 0, 0, 182,
 	161, 165, 164, 0, 0, 0, 0, 0, 160, 0,
 	162, 166, 168, 169, 176, 178, 163, 0, 0, 0,
 	183, 180, 0, 0, 0, 0, 0, 0, 0, 0,
 	0, 0, 0, 0, 0, 0, 155, 156, 167, 170,
 	171, 172, 173, 174, 175, 177, 179, 0, 157, 159,
-	158, 181, 0, 0, 684, 0, 0, 182, 161, 165,
+	158, 181, 0, 0, 630, 0, 0, 182, 161, 165,
 	164, 0, 0, 0, 0, 0, 160, 0, 162, 166,
 	168, 169, 176, 178, 163, 183, 180, 0, 0, 0,
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 	0, 155, 156, 167, 170, 171, 172, 173, 174, 175,
-	177, 179, 0, 157, 159, 158, 181, 0, 0, 683,
+	177, 179, 0, 157, 159, 158, 181, 0, 0, 629,
 	0, 0, 182, 161, 165, 164, 0, 0, 0, 0,
 	0, 160, 0, 162, 166, 168, 169, 176, 178, 163,
 	183, 180, 0, 0, 0, 0, 0, 0, 0, 0,
 	0, 0, 0, 0, 0, 0, 155, 156, 167, 170,
 	171, 172, 173, 174, 175, 177, 179, 0, 0, 0,
-	639, 157, 159, 158, 181, 0, 0, 182, 161, 165,
+	612, 157, 159, 158, 181, 0, 0, 182, 161, 165,
 	164, 0, 0, 0, 0, 0, 160, 0, 162, 166,
 	168, 169, 176, 178, 163, 0, 0, 0, 183, 180,
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 	0, 0, 0, 0, 155, 156, 167, 170, 171, 172,
 	173, 174, 175, 177, 179, 0, 157, 159, 158, 181,
-	0, 0, 628, 0, 0, 182, 161, 165, 164, 0,
+	0, 0, 603, 0, 0, 182, 161, 165, 164, 0,
 	0, 0, 0, 0, 160, 0, 162, 166, 168, 169,
 	176, 178, 163, 183, 180, 0, 0, 0, 0, 0,
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 155,
 	156, 167, 170, 171, 172, 173, 174, 175, 177, 179,
-	0, 157, 159, 158, 181, 0, 0, 627, 0, 0,
+	574, 0, 0, 593, 157, 159, 158, 181, 0, 0,
 	182, 161, 165, 164, 0, 0, 0, 0, 0, 160,
-	0, 162, 166, 168, 169, 176, 178, 163, 183, 180,
+	0, 162, 166, 168, 169, 176, 178, 163, 0, 0,
+	0, 183, 180, 0, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 155, 156, 167,
+	170, 171, 172, 173, 174, 175, 177, 179, 0, 157,
+	159, 158, 181, 0, 0, 591, 0, 0, 182, 161,
+	165, 164, 0, 0, 0, 0, 0, 160, 0, 162,
+	166, 168, 169, 176, 178, 163, 183, 180, 0, 0,
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 155, 156, 167, 170, 171, 172,
-	173, 174, 175, 177, 179, 0, 0, 0, 610, 157,
-	159, 158, 181, 0, 0, 182, 161, 165, 164, 0,
-	0, 0, 0, 0, 160, 0, 162, 166, 168, 169,
-	176, 178, 163, 0, 0, 0, 183, 180, 0, 0,
+	0, 0, 155, 156, 167, 170, 171, 172, 173, 174,
+	175, 177, 179, 0, 157, 159, 158, 181, 0, 0,
+	0, 0, 0, 182, 161, 165, 164, 0, 0, 0,
+	0, 0, 160, 0, 162, 166, 168, 169, 176, 178,
+	163, 183, 180, 0, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 155, 156, 167,
+	170, 171, 172, 173, 174, 175, 177, 179, 0, 157,
+	159, 158, 181, 570, 0, 0, 0, 0, 182, 161,
+	165, 164, 0, 0, 0, 0, 0, 160, 0, 162,
+	166, 168, 169, 176, 178, 163, 183, 180, 0, 0,
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 	0, 0, 155, 156, 167, 170, 171, 172, 173, 174,
 	175, 177, 179, 0, 157, 159, 158, 181, 0, 0,
-	601, 0, 0, 182, 161, 165, 164, 0, 0, 0,
+	565, 0, 0, 182, 161, 165, 164, 0, 0, 0,
 	0, 0, 160, 0, 162, 166, 168, 169, 176, 178,
 	163, 183, 180, 0, 0, 0, 0, 0, 0, 0,
 	0, 0, 0, 0, 0, 0, 0, 155, 156, 167,
-	170, 171, 172, 173, 174, 175, 177, 179, 572, 0,
-	0, 591, 157, 159, 158, 181, 0, 0, 182, 161,
+	170, 171, 172, 173, 174, 175, 177, 179, 0, 157,
+	159, 158, 181, 0, 0, 561, 0, 0, 182, 161,
 	165, 164, 0, 0, 0, 0, 0, 160, 0, 162,
-	166, 168, 169, 176, 178, 163, 0, 0, 0, 183,
-	180, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 155, 156, 167, 170, 171,
-	172, 173, 174, 175, 177, 179, 0, 157, 159, 158,
-	181, 0, 0, 589, 0, 0, 182, 161, 165, 164,
-	0, 0, 0, 0, 0, 160, 0, 162, 166, 168,
-	169, 176, 178, 163, 183, 180, 0, 0, 0, 0,
+	166, 168, 169, 176, 178, 163, 183, 180, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 0, 417, 0,
+	0, 0, 155, 156, 167, 170, 171, 172, 173, 174,
+	175, 177, 179, 0, 0, 0, 0, 0, 0, 0,
+	423, 0, 0, 182, 161, 165, 164, 157, 159, 158,
+	181, 0, 160, 0, 162, 166, 168, 169, 176, 178,
+	163, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 183, 180, 0, 0, 0, 0,
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 	155, 156, 167, 170, 171, 172, 173, 174, 175, 177,
 	179, 0, 157, 159, 158, 181, 0, 0, 0, 0,
@@ -1209,177 +1238,148 @@ var yyAct = [...]int{
 	160, 0, 162, 166, 168, 169, 176, 178, 163, 183,
 	180, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 	0, 0, 0, 0, 0, 155, 156, 167, 170, 171,
-	172, 173, 174, 175, 177, 179, 0, 157, 159, 158,
-	181, 568, 0, 0, 0, 0, 182, 161, 165, 164,
+	172, 173, 174, 175, 177, 179, 0, 0, 0, 0,
+	377, 157, 159, 158, 181, 0, 182, 161, 165, 164,
 	0, 0, 0, 0, 0, 160, 0, 162, 166, 168,
-	169, 176, 178, 163, 183, 180, 0, 0, 0, 0,
+	169, 176, 178, 163, 0, 0, 0, 0, 183, 180,
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	155, 156, 167, 170, 171, 172, 173, 174, 175, 177,
-	179, 0, 157, 159, 158, 181, 0, 0, 563, 0,
-	0, 182, 161, 165, 164, 0, 0, 0, 0, 0,
-	160, 0, 162, 166, 168, 169, 176, 178, 163, 183,
-	180, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 155, 156, 167, 170, 171,
-	172, 173, 174, 175, 177, 179, 0, 157, 159, 158,
-	181, 0, 0, 559, 0, 0, 182, 161, 165, 164,
-	0, 0, 0, 0, 0, 160, 0, 162, 166, 168,
-	169, 176, 178, 163, 183, 180, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 416, 0, 0, 0,
-	155, 156, 167, 170, 171, 172, 173, 174, 175, 177,
-	179, 0, 0, 0, 0, 0, 0, 0, 421, 0,
-	0, 182, 161, 165, 164, 157, 159, 158, 181, 0,
-	160, 0, 162, 166, 168, 169, 176, 178, 163, 0,
+	0, 0, 0, 0, 155, 156, 167, 170, 171, 172,
+	173, 174, 175, 177, 179, 0, 0, 0, 0, 154,
+	157, 159, 158, 181, 0, 182, 161, 165, 164, 0,
+	0, 0, 0, 0, 160, 0, 162, 166, 168, 169,
+	176, 178, 163, 0, 0, 0, 0, 183, 180, 0,
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 183, 180, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 155, 156, 167, 170, 171, 172, 173,
+	174, 175, 177, 179, 0, 0, 159, 158, 181, 0,
+	0, 0, 0, 0, 182, 161, 165, 164, 0, 0,
+	0, 0, 0, 160, 0, 162, 166, 168, 169, 176,
+	178, 163, 183, 180, 0, 0, 0, 0, 0, 0,
 	0, 0, 0, 0, 0, 0, 0, 0, 155, 156,
 	167, 170, 171, 172, 173, 174, 175, 177, 179, 0,
-	157, 159, 158, 181, 0, 0, 0, 0, 0, 182,
+	0, 0, 158, 181, 0, 0, 0, 0, 0, 182,
 	161, 165, 164, 0, 0, 0, 0, 0, 160, 0,
-	162, 166, 168, 169, 176, 178, 163, 183, 180, 0,
+	162, 166, 168, 169, 176, 178, 163, 183, 180, 434,
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 	0, 0, 0, 155, 156, 167, 170, 171, 172, 173,
-	174, 175, 177, 179, 0, 0, 0, 0, 376, 157,
-	159, 158, 181, 0, 182, 161, 165, 164, 0, 0,
+	174, 175, 177, 179, 0, 0, 0, 0, 0, 0,
+	0, 181, 0, 0, 182, 161, 165, 164, 0, 0,
 	0, 0, 0, 160, 0, 162, 166, 168, 169, 176,
-	178, 163, 0, 0, 0, 0, 183, 180, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 155, 156, 167, 170, 171, 172, 173, 174,
-	175, 177, 179, 0, 0, 0, 0, 154, 157, 159,
-	158, 181, 0, 182, 161, 165, 164, 0, 0, 0,
-	0, 0, 160, 0, 162, 166, 168, 169, 176, 178,
-	163, 0, 0, 0, 0, 183, 180, 0, 0, 0,
+	178, 163, 0, 0, 0, 183, 180, 0, 0, 0,
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 	0, 155, 156, 167, 170, 171, 172, 173, 174, 175,
-	177, 179, 0, 0, 159, 158, 181, 0, 0, 0,
+	177, 179, 0, 0, 0, 0, 181, 0, 0, 0,
 	0, 0, 182, 161, 165, 164, 0, 0, 0, 0,
 	0, 160, 0, 162, 166, 168, 169, 176, 178, 163,
 	183, 180, 0, 0, 0, 0, 0, 0, 0, 0,
 	0, 0, 0, 0, 0, 0, 155, 156, 167, 170,
 	171, 172, 173, 174, 175, 177, 179, 0, 0, 0,
-	158, 181, 0, 0, 0, 0, 0, 182, 161, 165,
+	0, 181, 0, 0, 0, 0, 0, 182, 161, 165,
 	164, 0, 0, 0, 0, 0, 160, 0, 162, 166,
-	168, 169, 176, 178, 163, 183, 180, 432, 0, 0,
+	168, 169, 176, 178, 163, 183, 180, 0, 0, 0,
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 	0, 155, 156, 167, 170, 171, 172, 173, 174, 175,
-	177, 179, 0, 0, 0, 0, 0, 0, 0, 181,
-	0, 0, 182, 161, 165, 164, 0, 0, 0, 0,
+	177, 179, 0, 0, 0, 181, 0, 0, 0, 0,
+	0, 0, 0, 161, 165, 164, 0, 0, 0, 0,
 	0, 160, 0, 162, 166, 168, 169, 176, 178, 163,
-	0, 0, 0, 183, 180, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 155,
-	156, 167, 170, 171, 172, 173, 174, 175, 177, 179,
-	0, 0, 0, 0, 181, 0, 0, 0, 0, 0,
-	182, 161, 165, 164, 0, 0, 0, 0, 0, 160,
-	0, 162, 166, 168, 169, 176, 178, 163, 183, 180,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 155, 156, 167, 170, 171, 172,
-	173, 174, 175, 177, 179, 0, 0, 0, 0, 181,
-	0, 0, 0, 0, 0, 182, 161, 165, 164, 0,
-	0, 0, 0, 0, 160, 0, 162, 166, 168, 169,
-	176, 178, 163, 183, 180, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 155,
-	156, 167, 170, 171, 172, 173, 174, 175, 177, 179,
-	0, 0, 0, 181, 0, 0, 0, 0, 0, 0,
-	0, 161, 165, 164, 0, 0, 0, 0, 0, 160,
-	0, 162, 166, 168, 169, 176, 178, 163, 180, 0,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 181, 156, 167, 170, 171, 172, 173,
-	174, 175, 177, 179, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 161, 165, 164, 180, 0,
-	0, 0, 0, 160, 0, 162, 166, 168, 169, 176,
-	178, 163, 0, 181, 0, 167, 170, 171, 172, 173,
-	174, 175, 177, 179, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 161, 165, 164, 180, 0,
-	0, 0, 0, 160, 0, 162, 166, 168, 169, 176,
-	178, 163, 0, 181, 0, 167, 170, 171, 172, 173,
-	174, 175, 177, 179, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 161, 165, 164, 180, 0,
-	0, 0, 0, 0, 0, 162, 166, 168, 169, 176,
-	178, 163, 0, 181, 0, 167, 170, 171, 172, 173,
-	174, 175, 177, 179, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 161, 165, 164, 180, 0,
-	0, 0, 0, 0, 0, 0, 166, 168, 169, 176,
-	178, 163, 0, 0, 0, 167, 170, 171, 172, 173,
-	174, 175, 177, 179, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 0, 0, 165, 164, 447, 448,
-	458, 459, 0, 0, 438, 0, 166, 168, 169, 176,
-	178, 163, 0, 463, 464, 465, 466, 467, 468, 469,
-	470, 471, 472, 473, 493, 494, 495, 496, 497, 485,
-	486, 487, 514, 488, 489, 474, 475, 476, 477, 478,
-	479, 480, 481, 482, 483, 484, 0, 505, 503, 504,
-	500, 501, 0, 0, 492, 498, 499, 506, 507, 509,
-	508, 510, 511, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 502, 513, 512, 0, 0, 449,
-	450, 451, 452, 453, 454, 455, 456, 457, 460, 461,
-	462, 490, 491, 441, 442, 443, 444, 445, 446, 447,
-	448, 458, 459, 0, 0, 921, 0, 0, 0, 0,
-	0, 0, 0, 0, 463, 464, 465, 466, 467, 468,
-	469, 470, 471, 472, 473, 493, 494, 495, 496, 497,
-	485, 486, 487, 514, 488, 489, 474, 475, 476, 477,
-	478, 479, 480, 481, 482, 483, 484, 0, 505, 503,
-	504, 500, 501, 0, 0, 492, 498, 499, 506, 507,
-	509, 508, 510, 511, 119, 0, 107, 0, 0, 0,
-	0, 0, 112, 0, 0, 502, 513, 512, 0, 0,
-	449, 450, 451, 452, 453, 454, 455, 456, 457, 460,
-	461, 462, 490, 491, 750, 751, 752, 749, 748, 747,
-	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 669, 111, 0, 0, 0, 0,
+	180, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 181, 156, 167, 170, 171,
+	172, 173, 174, 175, 177, 179, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 161, 165, 164,
+	180, 0, 0, 0, 0, 160, 0, 162, 166, 168,
+	169, 176, 178, 163, 0, 181, 0, 167, 170, 171,
+	172, 173, 174, 175, 177, 179, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 161, 165, 164,
+	180, 0, 0, 0, 0, 160, 0, 162, 166, 168,
+	169, 176, 178, 163, 0, 181, 0, 167, 170, 171,
+	172, 173, 174, 175, 177, 179, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 161, 165, 164,
+	180, 0, 0, 0, 0, 0, 0, 162, 166, 168,
+	169, 176, 178, 163, 0, 181, 0, 167, 170, 171,
+	172, 173, 174, 175, 177, 179, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 161, 165, 164,
+	180, 0, 0, 0, 0, 0, 0, 0, 166, 168,
+	169, 176, 178, 163, 0, 0, 0, 167, 170, 171,
+	172, 173, 174, 175, 177, 179, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 0, 165, 164,
+	449, 450, 460, 461, 0, 0, 440, 0, 166, 168,
+	169, 176, 178, 163, 0, 465, 466, 467, 468, 469,
+	470, 471, 472, 473, 474, 475, 495, 496, 497, 498,
+	499, 487, 488, 489, 516, 490, 491, 476, 477, 478,
+	479, 480, 481, 482, 483, 484, 485, 486, 0, 507,
+	505, 506, 502, 503, 0, 0, 494, 500, 501, 508,
+	509, 511, 510, 512, 513, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 504, 515, 514, 0,
+	0, 451, 452, 453, 454, 455, 456, 457, 458, 459,
+	462, 463, 464, 492, 493, 443, 444, 445, 446, 447,
+	448, 449, 450, 460, 461, 0, 0, 923, 0, 0,
+	0, 0, 0, 0, 0, 0, 465, 466, 467, 468,
+	469, 470, 471, 472, 473, 474, 475, 495, 496, 497,
+	498, 499, 487, 488, 489, 516, 490, 491, 476, 477,
+	478, 479, 480, 481, 482, 483, 484, 485, 486, 0,
+	507, 505, 506, 502, 503, 0, 0, 494, 500, 501,
+	508, 509, 511, 510, 512, 513, 119, 0, 107, 0,
+	0, 0, 0, 0, 112, 0, 0, 504, 515, 514,
+	0, 0, 451, 452, 453, 454, 455, 456, 457, 458,
+	459, 462, 463, 464, 492, 493, 752, 753, 754, 751,
+	750, 749, 0, 0, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 671, 111, 0, 0,
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 0, 136, 0, 0, 114, 0, 0,
+	0, 0, 0, 0, 0, 0, 136, 0, 0, 114,
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 0, 236, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 237, 0, 0, 0, 0,
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-	0, 0, 234, 0, 670, 0, 0, 668, 0, 0,
-	0, 0, 0, 108,
+	0, 0, 0, 0, 235, 0, 672, 0, 0, 670,
+	0, 0, 0, 0, 0, 108,
 }
 
 var yyPact = [...]int{
-	-1000, -1000, 1249, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-	229, 459, 569, 708, -1000, -1000, -1000, 228, 4340, 226,
-	225, 5522, 5522, 5522, 133, 628, 5522, -1000, 6741, 222,
-	220, 219, -1000, 371, 5522, 759, 236, -2, 476, 756,
-	750, 749, 433, 470, 772, -1000, -1000, 215, -1000, -1000,
-	203, 212, 4838, 5522, 627, 627, 5522, 5522, 5522, 5522,
-	5522, -1000, -1000, 5522, 5522, 5522, 5522, 5522, 5522, 5522,
-	211, 5522, -1000, 755, 5522, 5522, 5522, -1000, -1000, -1000,
-	-1000, 89, -1000, 505, 504, -1000, 252, 209, 208, 5522,
-	5522, 207, 5522, 5522, -1000, -1000, -1000, -1000, -1000, -1000,
-	-1000, -1000, -1000, -1000, 666, 735, -2, -1000, 98, 173,
-	173, 204, -1000, 461, 702, 149, 702, 298, -1000, -1000,
-	315, 549, 42, 542, 702, -1000, -1000, -1000, -1000, 41,
-	-1000, -53, 3145, 5522, 625, -2, 451, 5522, 5522, 314,
-	6800, 622, 312, 310, 39, -1000, -1000, -16, -1000, -1000,
-	-58, -28, -1000, 6800, -1000, 5522, 5522, 5522, 5522, 5522,
-	5522, 5522, 5522, 5522, 5522, 5522, 5522, 5522, 5522, 5522,
-	5522, 5522, 5522, 5522, 5522, 5522, 5522, 5522, 5522, 5522,
-	5522, 431, 5408, 5522, 627, 5522, 708, -1000, 6682, 304,
-	-1000, 739, -1000, 725, -1000, 563, -1000, 564, 202, 4340,
-	198, 303, 187, 5294, 5522, 5522, 5522, 5522, 5522, 5522,
-	5522, 5522, 5522, 5522, 5522, 5522, 5522, -1000, -1000, 5522,
-	5522, 5522, 96, 4838, 80, -12, -1000, -1000, 6627, 627,
-	197, -1000, -1000, 89, 5522, -1000, -1000, 4838, -1000, 391,
-	391, 425, 391, 6559, 391, 391, 391, 391, 391, 391,
-	391, -1000, 5522, 391, 369, 727, 626, -1000, 174, 5180,
-	627, 7023, 6968, 7023, 5522, 3459, 3459, 173, -1000, 499,
-	168, 173, -1000, -1000, 5522, 5522, 6800, 6800, 5522, 6800,
-	6800, 573, -1000, 624, 440, 727, 193, 5522, -1000, -1000,
-	4724, -1000, 4838, 714, 461, 302, 461, -1000, -1000, 1091,
-	-1000, 301, -29, 531, 702, -1000, 522, 478, 710, 528,
-	-1000, -1000, 708, 5522, -1000, -1000, -1000, -1000, -1000, -1000,
-	-1000, -1000, 191, 6504, 181, -1000, 300, -13, 6800, 6449,
-	-1000, -1000, -1000, -1000, 133, -1000, 686, 5522, -1000, 5522,
-	7132, 7172, 6855, 7023, 6910, 7212, 7292, 7252, 136, 136,
-	136, 425, 391, 425, 425, 64, 64, 3521, 3521, 3521,
-	3521, 270, 270, 270, 270, 3521, -1000, 6394, 5522, 7078,
-	-18, -1000, -1000, 6339, -33, 2987, -1000, -1000, -1000, 180,
-	563, 553, 543, 366, -1000, 543, 5522, -1000, 5522, -1000,
-	-1000, 7023, 5522, 7023, 7023, 7023, 7023, 7023, 7023, 7023,
-	7023, 7023, 7023, 7023, 7023, 7023, 6284, 52, 6226, 173,
-	-1000, 5522, -1000, 148, -62, 4838, 5066, -1000, 4838, 6171,
-	49, -1000, 147, -1000, -1000, -1000, -1000, 224, 703, 6113,
-	104, 337, 5522, 40, 173, -1000, -1000, 5522, -1000, -1000,
+	-1000, -1000, 1251, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
+	264, 483, 651, 766, -1000, -1000, -1000, 262, 4342, 261,
+	259, 5524, 5524, 5524, 183, 776, 5524, -1000, 6743, 258,
+	257, 256, -1000, 405, 5524, 820, 281, 32, 504, 819,
+	805, 799, 456, 507, 408, -1000, -1000, 254, -1000, -1000,
+	134, 253, 4726, 5524, 688, 688, 5524, 5524, 5524, 5524,
+	5524, -1000, -1000, 5524, 5524, 5524, 5524, 5524, 5524, 5524,
+	252, 5524, -1000, 811, 5524, 5524, 5524, -1000, -1000, -1000,
+	-1000, 101, -1000, 517, 506, -1000, 184, 251, 249, 5524,
+	5524, 244, 5524, 5524, -1000, -1000, -1000, -1000, -1000, -1000,
+	-1000, -1000, -1000, -1000, 765, 757, 32, -1000, 215, 203,
+	203, 239, -1000, 490, 737, 170, 737, 295, -1000, -1000,
+	345, 602, -9, 619, 737, -1000, -1000, -1000, -1000, -15,
+	-1000, -59, 3147, 5524, 700, 32, 477, 5524, 5524, 337,
+	6802, 666, 333, 332, -18, -1000, -1000, -19, -1000, -1000,
+	-60, -24, -1000, 6802, -1000, 5524, 5524, 5524, 5524, 5524,
+	5524, 5524, 5524, 5524, 5524, 5524, 5524, 5524, 5524, 5524,
+	5524, 5524, 5524, 5524, 5524, 5524, 5524, 5524, 5524, 5524,
+	5524, 230, 5410, 5524, 688, 5524, 766, -1000, 6684, 331,
+	-1000, 794, -1000, 785, -1000, 591, -1000, 595, 233, 4342,
+	228, 319, 275, 5296, 5524, 5524, 5524, 5524, 5524, 5524,
+	5524, 5524, 5524, 5524, 5524, 5524, 5524, -1000, -1000, 5524,
+	5524, 5524, 104, 4726, 98, 22, -1000, -1000, 6629, 688,
+	5524, 225, -1000, -1000, 101, 5524, -1000, -1000, 4726, -1000,
+	412, 412, 461, 412, 6561, 412, 412, 412, 412, 412,
+	412, 412, -1000, 5524, 412, 219, 616, 707, -1000, 198,
+	5182, 688, 7025, 6970, 7025, 5524, 3461, 3461, 203, -1000,
+	505, 227, 203, -1000, -1000, 5524, 5524, 6802, 6802, 5524,
+	6802, 6802, 742, -1000, 734, 575, 616, 221, 5524, -1000,
+	-1000, 4840, -1000, 4726, 782, 490, 318, 490, -1000, -1000,
+	1093, -1000, 316, -28, 582, 737, -1000, 597, 511, 770,
+	551, -1000, -1000, 766, 5524, -1000, -1000, -1000, -1000, -1000,
+	-1000, -1000, -1000, 218, 6506, 216, -1000, 315, -8, 6802,
+	6451, -1000, -1000, -1000, -1000, 183, -1000, 733, 5524, -1000,
+	5524, 7134, 7174, 6857, 7025, 6912, 7214, 7294, 7254, 132,
+	132, 132, 461, 412, 461, 461, 64, 64, 168, 168,
+	168, 168, 351, 351, 351, 351, 168, -1000, 6396, 5524,
+	7080, -11, -1000, -1000, 6341, -30, 2989, -1000, -1000, -1000,
+	212, 591, 569, 587, 403, -1000, 587, 5524, -1000, 5524,
+	-1000, -1000, 7025, 5524, 7025, 7025, 7025, 7025, 7025, 7025,
+	7025, 7025, 7025, 7025, 7025, 7025, 7025, 6286, 96, 6228,
+	203, -1000, 5524, -1000, 167, -65, 4726, 5068, -1000, 6802,
+	4726, 6173, 84, -1000, 165, -1000, -1000, -1000, -1000, 190,
+	751, 6115, 93, 363, 5524, 81, 203, -1000, -1000, 5524,
 	-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
 	-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
 	-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
@@ -1387,65 +1387,65 @@ var yyPact = [...]int{
 	-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
 	-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
 	-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-	-1000, -1000, -1000, -1000, -1000, 173, -1000, -1000, -1000, -1000,
-	133, 5522, 5522, 96, 133, 563, -19, -1000, 6800, 6058,
-	6003, -1000, -1000, -1000, 233, 5945, -1000, -34, -1000, 6800,
-	5522, 138, -1000, -1000, 933, -1000, -1000, -1000, 477, 526,
-	-1000, 702, 514, 672, -1000, 473, -1000, 6800, 135, 4184,
-	5522, 5522, 5522, 186, -1000, -1000, 6800, -1000, 5522, 7078,
-	134, 627, 7604, 4028, -1000, 172, 233, 553, -1000, 543,
-	-1000, -1000, 365, -40, -1000, 5890, 5835, 2829, 7292, 3872,
-	-1000, -1000, -1000, 5777, -65, 5522, -1000, 6800, 627, 171,
-	132, -1000, -1000, -1000, 31, -1000, -1000, 650, -1000, -1000,
-	-1000, -1000, 5522, -1000, 7023, -1000, -1000, 5719, -1000, -1000,
-	3, 5661, -1000, -1000, 553, 131, 5522, -1000, -1000, 129,
-	-35, -1000, -1, -1000, -1000, 634, -1000, -1000, -1000, -1000,
-	128, 4952, 6800, -1000, -1000, 702, 458, -37, -1000, -1000,
-	702, 672, -1000, 299, -1000, -1000, -1000, 5606, 294, 6800,
-	-1000, 291, 286, 7078, 285, -1000, 124, 536, 627, 167,
-	4838, -1000, -1000, -1000, 614, 233, 119, -1000, 357, -40,
-	1431, -1000, 543, 4340, 175, 280, -1000, -1000, -1000, 5522,
-	7023, -1000, 4838, -65, -1000, -1000, 5551, -1000, -1000, -1000,
-	-1000, -1000, -1000, 163, 233, 447, -1000, -1000, -1000, -1000,
-	-38, -1000, 702, 322, 672, -1000, -37, -1000, 2671, 276,
-	5522, 376, -1000, 785, -1000, -1000, 3560, 7604, -1000, 4838,
-	2, 2513, -1000, 158, 355, 118, 554, 354, -1000, -1000,
-	-1000, 233, 647, 543, 448, -1000, -1000, -1000, -1000, -1000,
-	-1000, -1000, -1000, 1273, -1000, -1000, -1000, -1000, 3303, 7023,
-	114, 321, 353, -1000, 233, -1000, 685, -1000, 318, 702,
-	-38, -1000, -1000, 317, 272, -1000, 110, -1000, 5522, 162,
-	368, 269, 775, -1000, -1000, -1000, 107, -1000, 103, -1000,
-	268, 543, -1000, 163, 163, 156, -1000, 1115, 679, 7444,
-	-2, -41, -1000, -1000, 3303, -65, -1000, -1000, 533, -1000,
-	-66, -1000, -1000, 253, -1000, -1000, 3716, 339, -1000, -1000,
-	-1000, -1000, -1000, 264, 2355, 3560, -1000, -1000, 87, -1000,
-	2197, 352, 346, 137, 957, -1000, -31, -1000, -73, -32,
-	-1000, -74, 7444, -1000, -1000, 4623, 436, 5522, 5522, -1000,
-	-1000, -1000, -1000, -1000, 3303, -1000, 260, -1000, 102, 543,
-	-1000, -1000, -1000, -36, -1000, -1000, 680, -1000, -1000, 679,
-	-1000, 5522, -1000, 7444, 5522, -1000, -1000, 4496, -1000, 256,
-	249, 587, 606, 475, -1000, 451, -1000, -1000, 7023, 6800,
-	2039, 3303, -1000, 345, -1000, 1881, 1723, -1000, 137, -1000,
-	-1000, 6800, -1000, 6800, 155, -1000, -1000, -1000, -1000, 543,
-	7545, 7444, 242, -1000, -1000, -1000, -1000, -1000, -1000, 233,
-	-40, -1000, -1000, 7444, -1000, -1000, 1565, 101, -1000, -1000,
-	163, 238, -1000, -1000, -1000, 1407, -1000,
+	-1000, -1000, -1000, -1000, -1000, -1000, -1000, 203, -1000, -1000,
+	-1000, -1000, 183, 5524, 5524, 104, 183, 591, -12, -1000,
+	6802, 6060, 6005, -1000, -1000, -1000, 285, 5947, -1000, -13,
+	-1000, 6802, 5524, 163, -1000, -1000, 935, -1000, -1000, -1000,
+	502, 550, -1000, 737, 539, 689, -1000, 501, -1000, 6802,
+	158, 4186, 5524, 5524, 5524, 208, -1000, -1000, 6802, -1000,
+	5524, 7080, 155, 688, 7606, 4030, -1000, 192, 285, 569,
+	-1000, 587, -1000, -1000, 400, -40, -1000, 5892, 5837, 2831,
+	7294, 3874, -1000, -1000, -1000, 5779, -66, 5524, -1000, 6802,
+	688, 182, 151, -1000, -1000, -1000, 50, -1000, -1000, 709,
+	-1000, -1000, -1000, -1000, 5524, -1000, 7025, -1000, -1000, 5721,
+	-1000, -1000, 47, 5663, -1000, -1000, 569, 144, 5524, -1000,
+	-1000, 142, -16, -1000, 35, -1000, -1000, 552, -1000, -1000,
+	-1000, -1000, 141, 4954, 6802, -1000, -1000, 737, 499, -34,
+	-1000, -1000, 737, 689, -1000, 314, -1000, -1000, -1000, 5608,
+	313, 6802, -1000, 312, 311, 7080, 307, -1000, 139, 562,
+	688, 177, 4726, -1000, -1000, -1000, 620, 285, 138, -1000,
+	396, -40, 1433, -1000, 587, 4342, 272, 303, -1000, -1000,
+	-1000, 5524, 7025, -1000, 4726, -66, -1000, -1000, 5553, -1000,
+	-1000, -1000, -1000, -1000, -1000, 269, 285, 475, -1000, -1000,
+	-1000, -1000, -35, -1000, 737, 362, 689, -1000, -34, -1000,
+	2673, 302, 5524, 411, -1000, 793, -1000, -1000, 3562, 7606,
+	-1000, 4726, 40, 2515, -1000, 169, 395, 121, 611, 379,
+	-1000, -1000, -1000, 285, 647, 587, 612, -1000, -1000, -1000,
+	-1000, -1000, -1000, -1000, -1000, 1275, -1000, -1000, -1000, -1000,
+	3305, 7025, 119, 350, 378, -1000, 285, -1000, 729, -1000,
+	349, 737, -35, -1000, -1000, 347, 301, -1000, 113, -1000,
+	5524, 174, 401, 300, 775, -1000, -1000, -1000, 111, -1000,
+	108, -1000, 299, 587, -1000, 269, 269, 133, -1000, 1117,
+	713, 7446, 32, -31, -1000, -1000, 3305, -66, -1000, -1000,
+	560, -1000, -67, -1000, -1000, 286, -1000, -1000, 3718, 335,
+	-1000, -1000, -1000, -1000, -1000, 292, 2357, 3562, -1000, -1000,
+	89, -1000, 2199, 375, 374, 214, 959, -1000, -36, -1000,
+	-70, -37, -1000, -73, 7446, -1000, -1000, 4625, 538, 5524,
+	5524, -1000, -1000, -1000, -1000, -1000, 3305, -1000, 290, -1000,
+	106, 587, -1000, -1000, -1000, -43, -1000, -1000, 725, -1000,
+	-1000, 713, -1000, 5524, -1000, 7446, 5524, -1000, -1000, 4498,
+	-1000, 284, 217, 608, 680, 497, -1000, 477, -1000, -1000,
+	7025, 6802, 2041, 3305, -1000, 366, -1000, 1883, 1725, -1000,
+	214, -1000, -1000, 6802, -1000, 6802, 105, -1000, -1000, -1000,
+	-1000, 587, 7547, 7446, 185, -1000, -1000, -1000, -1000, -1000,
+	-1000, 285, -40, -1000, -1000, 7446, -1000, -1000, 1567, 103,
+	-1000, -1000, 269, 283, -1000, -1000, -1000, 1409, -1000,
 }
 
 var yyPgo = [...]int{
-	0, 906, 903, 14, 8, 888, 4, 29, 13, 887,
-	11, 44, 79, 71, 49, 48, 886, 26, 881, 84,
-	21, 83, 880, 0, 78, 879, 876, 40, 190, 32,
-	19, 39, 874, 55, 62, 873, 5, 869, 868, 866,
-	865, 15, 46, 862, 860, 107, 92, 198, 858, 856,
-	853, 6, 852, 87, 50, 851, 81, 56, 846, 845,
-	844, 843, 842, 80, 841, 840, 839, 837, 10, 836,
-	835, 43, 41, 38, 2, 16, 676, 85, 86, 834,
-	830, 829, 12, 828, 827, 519, 42, 37, 826, 824,
-	9, 732, 20, 34, 823, 822, 821, 819, 811, 525,
-	810, 18, 802, 801, 799, 95, 798, 36, 795, 793,
-	25, 33, 790, 785, 45, 783, 782, 526, 780, 778,
-	774, 73, 1, 3, 773, 17, 7, 28, 765,
+	0, 931, 929, 14, 8, 928, 4, 29, 13, 927,
+	11, 44, 78, 71, 52, 48, 926, 26, 924, 83,
+	21, 82, 916, 0, 84, 915, 914, 42, 190, 32,
+	19, 38, 913, 79, 73, 912, 5, 911, 910, 909,
+	908, 15, 62, 905, 904, 100, 87, 274, 903, 902,
+	901, 6, 900, 86, 41, 899, 56, 49, 898, 897,
+	896, 895, 894, 99, 893, 892, 890, 883, 10, 882,
+	881, 46, 39, 40, 2, 16, 705, 43, 85, 880,
+	879, 878, 12, 876, 875, 555, 50, 37, 871, 870,
+	9, 762, 20, 34, 868, 867, 864, 862, 860, 553,
+	858, 18, 855, 854, 853, 88, 848, 36, 846, 845,
+	25, 33, 844, 839, 45, 837, 832, 554, 831, 821,
+	803, 80, 1, 3, 767, 17, 7, 28, 752,
 }
 
 var yyR1 = [...]int{
@@ -1495,10 +1495,10 @@ var yyR1 = [...]int{
 	59, 59, 60, 60, 60, 60, 60, 60, 28, 28,
 	28, 47, 47, 47, 61, 61, 62, 62, 62, 62,
 	62, 62, 53, 53, 53, 54, 54, 54, 93, 71,
-	71, 94, 94, 70, 70, 70, 70, 70, 70, 99,
-	99, 99, 99, 63, 63, 63, 63, 63, 63, 63,
-	64, 64, 64, 64, 48, 48, 48, 48, 48, 48,
-	48, 119, 119, 72,
+	71, 94, 94, 70, 70, 70, 70, 70, 70, 70,
+	99, 99, 99, 99, 63, 63, 63, 63, 63, 63,
+	63, 64, 64, 64, 64, 48, 48, 48, 48, 48,
+	48, 48, 119, 119, 72,
 }
 
 var yyR2 = [...]int{
@@ -1548,10 +1548,10 @@ var yyR2 = [...]int{
 	3, 1, 1, 4, 4, 4, 4, 1, 1, 1,
 	3, 1, 4, 2, 3, 3, 1, 4, 4, 3,
 	3, 3, 1, 3, 1, 1, 3, 1, 1, 0,
-	1, 3, 1, 3, 1, 4, 2, 6, 4, 2,
-	2, 1, 2, 1, 4, 3, 3, 3, 6, 3,
-	1, 1, 2, 1, 5, 4, 2, 2, 4, 2,
-	2, 1, 3, 1,
+	1, 3, 1, 3, 1, 4, 2, 2, 6, 4,
+	2, 2, 1, 2, 1, 4, 3, 3, 3, 6,
+	3, 1, 1, 2, 1, 5, 4, 2, 2, 4,
+	2, 2, 1, 3, 1,
 }
 
 var yyChk = [...]int{
@@ -1578,77 +1578,77 @@ var yyChk = [...]int{
 	94, 96, 95, 162, 118, 119, 120, 121, 122, 123,
 	124, 125, 126, 127, 128, 129, 130, 105, 106, 148,
 	150, 144, 58, 148, -93, -94, -71, -70, -23, 153,
-	60, -23, -28, -57, 148, -56, 99, 150, -28, -23,
-	-23, -23, -23, -23, -23, -23, -23, -23, -23, -23,
-	-23, -49, 148, -23, -100, 17, -99, -63, 12, 77,
-	78, -23, -23, -23, 150, 79, 79, -46, -44, -45,
-	-62, 53, -10, -47, 148, 148, -23, -23, 148, -23,
-	-23, 17, 76, -99, -99, 17, -3, 144, -47, -77,
-	148, -77, 148, 83, -101, 149, -101, 146, 144, -121,
-	146, -16, -117, -101, 83, 146, 160, 83, 29, -101,
-	-20, 146, 160, 162, -22, 145, 2, -11, -12, -13,
-	-14, -15, 52, -23, 21, -3, -107, -108, -23, -23,
-	146, 146, 146, 146, 160, 146, 160, 162, 146, 160,
+	84, 60, -23, -28, -57, 148, -56, 99, 150, -28,
 	-23, -23, -23, -23, -23, -23, -23, -23, -23, -23,
+	-23, -23, -49, 148, -23, -100, 17, -99, -63, 12,
+	77, 78, -23, -23, -23, 150, 79, 79, -46, -44,
+	-45, -62, 53, -10, -47, 148, 148, -23, -23, 148,
+	-23, -23, 17, 76, -99, -99, 17, -3, 144, -47,
+	-77, 148, -77, 148, 83, -101, 149, -101, 146, 144,
+	-121, 146, -16, -117, -101, 83, 146, 160, 83, 29,
+	-101, -20, 146, 160, 162, -22, 145, 2, -11, -12,
+	-13, -14, -15, 52, -23, 21, -3, -107, -108, -23,
+	-23, 146, 146, 146, 146, 160, 146, 160, 162, 146,
+	160, -23, -23, -23, -23, -23, -23, -23, -23, -23,
 	-23, -23, -23, -23, -23, -23, -23, -23, -23, -23,
-	-23, -23, -23, -23, -23, -23, -46, -23, 147, -23,
-	-116, -27, -28, -23, -105, -122, 146, 146, 10, -127,
-	10, -86, 56, -127, -88, 56, 148, -11, 148, 146,
-	147, -23, 153, -23, -23, -23, -23, -23, -23, -23,
-	-23, -23, -23, -23, -23, -23, -23, -24, -23, -54,
-	10, 144, -47, -93, 151, 160, 59, -28, 148, -23,
-	-93, 149, -24, 143, -63, -63, 17, 150, 58, -23,
-	11, -28, 59, -24, -53, -6, -47, 144, 10, -5,
-	-4, 99, 100, 101, 102, 103, 104, 4, 5, 85,
-	86, 87, 88, 89, 90, 91, 92, 93, 6, 7,
-	94, 95, 96, 19, 20, 21, 22, 23, 24, 25,
-	26, 27, 28, 29, 41, 42, 43, 44, 45, 46,
-	47, 48, 49, 50, 51, 35, 36, 37, 39, 40,
-	97, 98, 60, 30, 31, 32, 33, 34, 61, 62,
-	56, 57, 80, 54, 55, 53, 63, 64, 66, 65,
-	67, 68, 82, 81, 38, -53, -6, -47, -78, -77,
-	79, 150, 144, 58, 79, -78, -119, -72, -23, -23,
-	-23, 76, 76, 142, 148, -23, 149, -120, -31, -23,
-	84, -93, 10, 146, -121, 145, 146, 146, 83, -101,
-	-19, 83, -101, 144, 10, 83, -21, -23, 148, 149,
-	148, 146, 160, 149, -33, -34, -23, -42, 147, -23,
-	-7, 160, 29, 149, 145, -127, 148, -86, -87, 57,
-	-10, 144, -127, -126, -10, -23, -23, -122, -23, 149,
-	151, 145, -77, -23, 149, 162, -71, -23, 153, 60,
-	-93, 149, 151, 149, -64, 10, 13, 154, 12, 10,
-	145, 145, 150, 145, -23, 151, -77, -23, -77, -47,
-	-24, -23, -54, -47, -86, -7, 160, 149, 149, -123,
-	-124, -29, -30, -75, -73, 152, 61, 62, -10, 145,
-	-7, 160, -23, 149, 145, 144, 83, -111, -17, -20,
-	-91, 144, -127, 149, -84, -11, 147, -23, -107, -23,
-	-80, 144, 147, -23, 149, -27, -92, -28, 153, 60,
-	150, -25, -11, 147, -103, 148, -123, -87, -127, -126,
-	-125, 144, 160, 149, 149, 96, -11, 147, 145, 162,
-	-23, -28, 148, 149, 151, 13, -23, 145, 151, 145,
-	-87, 149, -72, 149, 160, -1, 153, -73, 149, -31,
-	-110, -20, 144, -7, 160, -20, -111, 146, -122, 149,
-	146, -114, 146, -114, 146, 146, 149, 59, -28, 148,
-	-93, -122, -26, 42, 43, -123, 149, -127, 144, 145,
-	-35, -97, -95, 45, -96, 48, -90, 104, 103, 102,
-	99, 100, 101, -125, -10, -11, 147, 146, -122, -23,
-	-93, 151, -127, -74, 147, -29, -2, 84, -7, 160,
-	-110, 145, -17, -7, 22, 146, -107, 145, 32, 33,
-	-114, 31, -114, -82, -11, 147, -92, -28, -93, 151,
-	28, 148, 144, 149, -89, 45, 144, -125, -30, 39,
-	37, -126, -90, 145, -122, 149, 145, 144, -127, -75,
-	12, 145, -20, -7, 145, 146, 149, -23, -8, 147,
-	146, 145, 146, 31, -122, 149, 149, 146, -102, -10,
-	-122, -74, -74, 148, -125, 145, -112, -41, 12, -104,
-	-68, -6, -3, -79, 146, 144, -125, 59, 162, 145,
-	-83, -11, 147, -8, -122, 146, 26, -82, 12, 161,
-	145, 144, 144, -118, -51, 12, 153, 145, 146, 160,
-	-127, 162, 146, 160, 162, -6, 145, -115, -36, -37,
-	-38, -39, -40, -10, -6, 80, 10, 145, -23, -23,
-	-122, -122, 146, 149, -10, -122, -122, 149, 160, 12,
-	-41, -23, -68, -23, -127, 145, -36, 146, 146, 46,
-	29, 79, 24, 144, 145, 145, -51, -127, -127, 148,
-	-126, 10, -4, -90, -6, 146, -122, -123, -6, 145,
-	149, -74, -81, 146, 144, -122, 145,
+	-23, -23, -23, -23, -23, -23, -23, -46, -23, 147,
+	-23, -116, -27, -28, -23, -105, -122, 146, 146, 10,
+	-127, 10, -86, 56, -127, -88, 56, 148, -11, 148,
+	146, 147, -23, 153, -23, -23, -23, -23, -23, -23,
+	-23, -23, -23, -23, -23, -23, -23, -23, -24, -23,
+	-54, 10, 144, -47, -93, 151, 160, 59, -28, -23,
+	148, -23, -93, 149, -24, 143, -63, -63, 17, 150,
+	58, -23, 11, -28, 59, -24, -53, -6, -47, 144,
+	10, -5, -4, 99, 100, 101, 102, 103, 104, 4,
+	5, 85, 86, 87, 88, 89, 90, 91, 92, 93,
+	6, 7, 94, 95, 96, 19, 20, 21, 22, 23,
+	24, 25, 26, 27, 28, 29, 41, 42, 43, 44,
+	45, 46, 47, 48, 49, 50, 51, 35, 36, 37,
+	39, 40, 97, 98, 60, 30, 31, 32, 33, 34,
+	61, 62, 56, 57, 80, 54, 55, 53, 63, 64,
+	66, 65, 67, 68, 82, 81, 38, -53, -6, -47,
+	-78, -77, 79, 150, 144, 58, 79, -78, -119, -72,
+	-23, -23, -23, 76, 76, 142, 148, -23, 149, -120,
+	-31, -23, 84, -93, 10, 146, -121, 145, 146, 146,
+	83, -101, -19, 83, -101, 144, 10, 83, -21, -23,
+	148, 149, 148, 146, 160, 149, -33, -34, -23, -42,
+	147, -23, -7, 160, 29, 149, 145, -127, 148, -86,
+	-87, 57, -10, 144, -127, -126, -10, -23, -23, -122,
+	-23, 149, 151, 145, -77, -23, 149, 162, -71, -23,
+	153, 60, -93, 149, 151, 149, -64, 10, 13, 154,
+	12, 10, 145, 145, 150, 145, -23, 151, -77, -23,
+	-77, -47, -24, -23, -54, -47, -86, -7, 160, 149,
+	149, -123, -124, -29, -30, -75, -73, 152, 61, 62,
+	-10, 145, -7, 160, -23, 149, 145, 144, 83, -111,
+	-17, -20, -91, 144, -127, 149, -84, -11, 147, -23,
+	-107, -23, -80, 144, 147, -23, 149, -27, -92, -28,
+	153, 60, 150, -25, -11, 147, -103, 148, -123, -87,
+	-127, -126, -125, 144, 160, 149, 149, 96, -11, 147,
+	145, 162, -23, -28, 148, 149, 151, 13, -23, 145,
+	151, 145, -87, 149, -72, 149, 160, -1, 153, -73,
+	149, -31, -110, -20, 144, -7, 160, -20, -111, 146,
+	-122, 149, 146, -114, 146, -114, 146, 146, 149, 59,
+	-28, 148, -93, -122, -26, 42, 43, -123, 149, -127,
+	144, 145, -35, -97, -95, 45, -96, 48, -90, 104,
+	103, 102, 99, 100, 101, -125, -10, -11, 147, 146,
+	-122, -23, -93, 151, -127, -74, 147, -29, -2, 84,
+	-7, 160, -110, 145, -17, -7, 22, 146, -107, 145,
+	32, 33, -114, 31, -114, -82, -11, 147, -92, -28,
+	-93, 151, 28, 148, 144, 149, -89, 45, 144, -125,
+	-30, 39, 37, -126, -90, 145, -122, 149, 145, 144,
+	-127, -75, 12, 145, -20, -7, 145, 146, 149, -23,
+	-8, 147, 146, 145, 146, 31, -122, 149, 149, 146,
+	-102, -10, -122, -74, -74, 148, -125, 145, -112, -41,
+	12, -104, -68, -6, -3, -79, 146, 144, -125, 59,
+	162, 145, -83, -11, 147, -8, -122, 146, 26, -82,
+	12, 161, 145, 144, 144, -118, -51, 12, 153, 145,
+	146, 160, -127, 162, 146, 160, 162, -6, 145, -115,
+	-36, -37, -38, -39, -40, -10, -6, 80, 10, 145,
+	-23, -23, -122, -122, 146, 149, -10, -122, -122, 149,
+	160, 12, -41, -23, -68, -23, -127, 145, -36, 146,
+	146, 46, 29, 79, 24, 144, 145, 145, -51, -127,
+	-127, 148, -126, 10, -4, -90, -6, 146, -122, -123,
+	-6, 145, 149, -74, -81, 146, 144, -122, 145,
 }
 
 var yyDef = [...]int{
@@ -1675,77 +1675,77 @@ var yyDef = [...]int{
 	0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 	0, 0, 0, 0, 0, 0, 0, 314, 316, 0,
 	423, 0, 0, 459, 0, 458, 462, 460, 464, 0,
-	0, 300, -2, 0, 0, -2, 388, 459, -2, 335,
-	336, 337, 338, 0, 355, 356, 357, 358, 359, 360,
-	361, 362, 423, 363, 0, 395, 396, 471, 473, 0,
-	0, 366, 368, 370, 423, 0, 0, 397, 295, 390,
-	391, 397, 389, 446, 0, 0, 486, 487, 0, 489,
-	490, 0, 413, 0, 0, 0, 0, 0, 443, 384,
-	0, 387, 459, 0, 85, 0, 84, 93, 80, 0,
-	96, 0, 0, 117, 0, 98, 0, 0, 0, 117,
-	120, 100, 0, 0, 123, 132, 125, 126, 127, 128,
-	129, 130, 0, 0, 0, 375, 0, 290, 292, 0,
-	139, 140, 141, 142, 0, 143, 0, 0, 144, 0,
-	318, 319, 320, 321, 322, 323, 324, 325, 326, 327,
-	328, 329, 330, 331, 332, 333, 334, -2, -2, -2,
-	-2, -2, -2, -2, -2, -2, 348, 0, 0, 353,
-	107, 162, -2, 0, 0, 0, 153, 154, 375, 0,
-	178, 182, 0, 0, 375, 0, 0, 208, 0, 211,
-	124, 298, 0, 301, 302, 303, 304, 305, 306, 307,
-	308, 309, 310, 311, 312, 313, 0, 0, 0, 440,
-	455, 0, 457, 0, 400, 459, 0, -2, 459, 0,
-	0, -2, 0, 365, 472, 469, 470, 0, 0, 0,
-	0, 426, 0, 0, 0, -2, -2, 0, 77, 78,
-	70, 71, 72, 73, 74, 75, 76, 2, 3, 4,
-	5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
-	15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
-	25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
-	35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
-	45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
-	55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
-	65, 66, 67, 68, 69, 0, -2, -2, 294, 398,
-	0, 423, 0, 0, 0, 178, 107, 491, 493, 0,
-	0, 412, 415, 414, -2, 0, 228, 107, 230, 232,
-	0, 0, 82, 92, 0, 95, 97, 99, 0, 117,
-	113, 0, 117, 0, 118, 0, 121, 375, 0, 0,
-	0, 289, 0, 0, 234, 237, 240, 286, 0, 352,
-	0, 108, 0, 0, 156, 0, -2, 182, 375, 0,
-	179, 242, 0, 181, 247, 0, 0, 0, 299, 0,
-	433, 435, 436, 0, 0, 0, 461, 463, 0, 0,
-	0, -2, 400, 393, 0, 480, 481, 0, 483, 475,
-	476, 477, 0, 479, 369, 434, 385, 0, 386, 450,
-	0, 0, 449, 451, 182, 0, 108, 485, 488, 0,
-	213, 215, 166, 220, 221, 0, 223, 224, 225, 442,
-	0, 108, 233, 399, 94, 0, 0, 107, 110, 115,
-	0, 0, 285, 0, 135, 203, 124, 0, 0, 291,
-	138, 198, 198, 351, 0, 163, 0, -2, 0, 0,
-	459, 150, 192, 124, 160, -2, 0, 375, 0, 183,
-	268, 242, 0, 0, 0, 0, 205, 124, 456, 0,
-	297, -2, 459, 468, 474, 482, 0, 453, 447, 448,
-	375, 484, 492, 226, 219, 168, 167, 222, 229, 231,
-	107, 112, 0, 0, 108, 116, 107, 131, 0, 0,
-	289, 0, 198, 0, 198, 147, 0, 0, -2, 459,
-	0, 0, 152, 0, 0, 0, 378, 0, 242, 176,
-	241, 219, 0, 0, -2, 267, 270, 272, 273, 274,
-	275, 276, 277, 268, 248, 206, 124, 212, -2, 296,
-	0, 0, 0, 375, 0, 216, 0, 169, 0, 108,
-	107, 105, 109, 0, 0, 136, 0, 194, 0, 0,
-	0, 0, 0, 148, 190, 124, 0, -2, 0, -2,
-	0, 0, 124, 226, 226, 0, 242, 268, 0, 0,
-	376, 0, 271, 177, -2, 467, 478, 242, 0, 227,
-	217, 103, 111, 0, 106, 204, 0, 0, 124, 201,
-	202, 195, 196, 0, 0, 0, 186, 193, 0, 158,
-	0, 0, 0, 0, 268, 171, 0, 279, 375, 0,
-	283, 0, 0, 245, 249, 0, 268, 0, 0, 104,
-	137, 188, 124, 124, -2, 197, 0, 149, 0, 0,
-	161, 124, 124, 0, 381, 382, 0, 170, 243, 0,
-	280, 0, 244, 0, 0, 375, 250, 0, 252, 0,
-	0, 262, 0, 0, 261, 57, -2, 293, 374, 218,
-	0, -2, 191, 0, 159, 0, 0, 379, 0, 383,
-	278, 375, 282, 375, 0, 251, 253, 254, 255, 0,
-	0, 0, 0, 124, 165, 373, 380, 281, 284, -2,
-	256, 257, 258, 260, 263, 189, 0, 0, 259, 157,
-	226, 0, 246, 264, 124, 0, 265,
+	0, 0, 300, -2, 0, 0, -2, 388, 459, -2,
+	335, 336, 337, 338, 0, 355, 356, 357, 358, 359,
+	360, 361, 362, 423, 363, 0, 395, 396, 472, 474,
+	0, 0, 366, 368, 370, 423, 0, 0, 397, 295,
+	390, 391, 397, 389, 446, 0, 0, 487, 488, 0,
+	490, 491, 0, 413, 0, 0, 0, 0, 0, 443,
+	384, 0, 387, 459, 0, 85, 0, 84, 93, 80,
+	0, 96, 0, 0, 117, 0, 98, 0, 0, 0,
+	117, 120, 100, 0, 0, 123, 132, 125, 126, 127,
+	128, 129, 130, 0, 0, 0, 375, 0, 290, 292,
+	0, 139, 140, 141, 142, 0, 143, 0, 0, 144,
+	0, 318, 319, 320, 321, 322, 323, 324, 325, 326,
+	327, 328, 329, 330, 331, 332, 333, 334, -2, -2,
+	-2, -2, -2, -2, -2, -2, -2, 348, 0, 0,
+	353, 107, 162, -2, 0, 0, 0, 153, 154, 375,
+	0, 178, 182, 0, 0, 375, 0, 0, 208, 0,
+	211, 124, 298, 0, 301, 302, 303, 304, 305, 306,
+	307, 308, 309, 310, 311, 312, 313, 0, 0, 0,
+	440, 455, 0, 457, 0, 400, 459, 0, -2, 467,
+	459, 0, 0, -2, 0, 365, 473, 470, 471, 0,
+	0, 0, 0, 426, 0, 0, 0, -2, -2, 0,
+	77, 78, 70, 71, 72, 73, 74, 75, 76, 2,
+	3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
+	13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
+	23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
+	33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
+	43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+	53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
+	63, 64, 65, 66, 67, 68, 69, 0, -2, -2,
+	294, 398, 0, 423, 0, 0, 0, 178, 107, 492,
+	494, 0, 0, 412, 415, 414, -2, 0, 228, 107,
+	230, 232, 0, 0, 82, 92, 0, 95, 97, 99,
+	0, 117, 113, 0, 117, 0, 118, 0, 121, 375,
+	0, 0, 0, 289, 0, 0, 234, 237, 240, 286,
+	0, 352, 0, 108, 0, 0, 156, 0, -2, 182,
+	375, 0, 179, 242, 0, 181, 247, 0, 0, 0,
+	299, 0, 433, 435, 436, 0, 0, 0, 461, 463,
+	0, 0, 0, -2, 400, 393, 0, 481, 482, 0,
+	484, 476, 477, 478, 0, 480, 369, 434, 385, 0,
+	386, 450, 0, 0, 449, 451, 182, 0, 108, 486,
+	489, 0, 213, 215, 166, 220, 221, 0, 223, 224,
+	225, 442, 0, 108, 233, 399, 94, 0, 0, 107,
+	110, 115, 0, 0, 285, 0, 135, 203, 124, 0,
+	0, 291, 138, 198, 198, 351, 0, 163, 0, -2,
+	0, 0, 459, 150, 192, 124, 160, -2, 0, 375,
+	0, 183, 268, 242, 0, 0, 0, 0, 205, 124,
+	456, 0, 297, -2, 459, 469, 475, 483, 0, 453,
+	447, 448, 375, 485, 493, 226, 219, 168, 167, 222,
+	229, 231, 107, 112, 0, 0, 108, 116, 107, 131,
+	0, 0, 289, 0, 198, 0, 198, 147, 0, 0,
+	-2, 459, 0, 0, 152, 0, 0, 0, 378, 0,
+	242, 176, 241, 219, 0, 0, -2, 267, 270, 272,
+	273, 274, 275, 276, 277, 268, 248, 206, 124, 212,
+	-2, 296, 0, 0, 0, 375, 0, 216, 0, 169,
+	0, 108, 107, 105, 109, 0, 0, 136, 0, 194,
+	0, 0, 0, 0, 0, 148, 190, 124, 0, -2,
+	0, -2, 0, 0, 124, 226, 226, 0, 242, 268,
+	0, 0, 376, 0, 271, 177, -2, 468, 479, 242,
+	0, 227, 217, 103, 111, 0, 106, 204, 0, 0,
+	124, 201, 202, 195, 196, 0, 0, 0, 186, 193,
+	0, 158, 0, 0, 0, 0, 268, 171, 0, 279,
+	375, 0, 283, 0, 0, 245, 249, 0, 268, 0,
+	0, 104, 137, 188, 124, 124, -2, 197, 0, 149,
+	0, 0, 161, 124, 124, 0, 381, 382, 0, 170,
+	243, 0, 280, 0, 244, 0, 0, 375, 250, 0,
+	252, 0, 0, 262, 0, 0, 261, 57, -2, 293,
+	374, 218, 0, -2, 191, 0, 159, 0, 0, 379,
+	0, 383, 278, 375, 282, 375, 0, 251, 253, 254,
+	255, 0, 0, 0, 0, 124, 165, 373, 380, 281,
+	284, -2, 256, 257, 258, 260, 263, 189, 0, 0,
+	259, 157, 226, 0, 246, 264, 124, 0, 265,
 }
 
 var yyTok1 = [...]int{
@@ -7874,7 +7874,7 @@ yydefault:
 		yyDollar = yyS[yypt-0 : yypt+1]
 //line php7.y:5192
 		{
-			yyVAL.node = expr.NewArrayItem(nil, nil)
+			yyVAL.node = expr.NewArrayItem(nil, nil, false)
 
 			yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
 		}
@@ -7891,7 +7891,7 @@ yydefault:
 //line php7.y:5207
 		{
 			if len(yyDollar[1].arrayItems) == 0 {
-				yyDollar[1].arrayItems = []*expr.ArrayItem{expr.NewArrayItem(nil, nil)}
+				yyDollar[1].arrayItems = []*expr.ArrayItem{expr.NewArrayItem(nil, nil, false)}
 			}
 
 			yyVAL.arrayItems = append(yyDollar[1].arrayItems, yyDollar[3].node.(*expr.ArrayItem))
@@ -7921,7 +7921,7 @@ yydefault:
 		yyDollar = yyS[yypt-3 : yypt+1]
 //line php7.y:5237
 		{
-			yyVAL.node = expr.NewArrayItem(yyDollar[1].node, yyDollar[3].node)
+			yyVAL.node = expr.NewArrayItem(yyDollar[1].node, yyDollar[3].node, false)
 
 			// save position
 			yyVAL.node.SetPosition(yylex.(*Parser).positionBuilder.NewNodesPosition(yyDollar[1].node, yyDollar[3].node))
@@ -7936,7 +7936,7 @@ yydefault:
 		yyDollar = yyS[yypt-1 : yypt+1]
 //line php7.y:5250
 		{
-			yyVAL.node = expr.NewArrayItem(nil, yyDollar[1].node)
+			yyVAL.node = expr.NewArrayItem(nil, yyDollar[1].node, false)
 
 			// save position
 			yyVAL.node.SetPosition(yylex.(*Parser).positionBuilder.NewNodePosition(yyDollar[1].node))
@@ -7951,7 +7951,7 @@ yydefault:
 //line php7.y:5262
 		{
 			reference := expr.NewReference(yyDollar[4].node)
-			yyVAL.node = expr.NewArrayItem(yyDollar[1].node, reference)
+			yyVAL.node = expr.NewArrayItem(yyDollar[1].node, reference, false)
 
 			// save position
 			yyVAL.node.SetPosition(yylex.(*Parser).positionBuilder.NewNodesPosition(yyDollar[1].node, yyDollar[4].node))
@@ -7969,7 +7969,7 @@ yydefault:
 //line php7.y:5278
 		{
 			reference := expr.NewReference(yyDollar[2].node)
-			yyVAL.node = expr.NewArrayItem(nil, reference)
+			yyVAL.node = expr.NewArrayItem(nil, reference, false)
 
 			// save position
 			yyVAL.node.SetPosition(yylex.(*Parser).positionBuilder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node))
@@ -7981,12 +7981,25 @@ yydefault:
 			yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
 		}
 	case 467:
-		yyDollar = yyS[yypt-6 : yypt+1]
+		yyDollar = yyS[yypt-2 : yypt+1]
 //line php7.y:5292
+		{
+			yyVAL.node = expr.NewArrayItem(nil, yyDollar[2].node, true)
+
+			// save position
+			yyVAL.node.SetPosition(yylex.(*Parser).positionBuilder.NewTokenNodePosition(yyDollar[1].token, yyDollar[2].node))
+
+			// save comments
+			yylex.(*Parser).setFreeFloating(yyVAL.node, freefloating.Start, yyDollar[1].token.FreeFloating)
+			yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
+		}
+	case 468:
+		yyDollar = yyS[yypt-6 : yypt+1]
+//line php7.y:5303
 		{
 			// TODO: Cannot use list() as standalone expression
 			listNode := expr.NewList(yyDollar[5].arrayItems)
-			yyVAL.node = expr.NewArrayItem(yyDollar[1].node, listNode)
+			yyVAL.node = expr.NewArrayItem(yyDollar[1].node, listNode, false)
 
 			// save position
 			listNode.SetPosition(yylex.(*Parser).positionBuilder.NewTokensPosition(yyDollar[3].token, yyDollar[6].token))
@@ -8001,13 +8014,13 @@ yydefault:
 
 			yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
 		}
-	case 468:
+	case 469:
 		yyDollar = yyS[yypt-4 : yypt+1]
-//line php7.y:5311
+//line php7.y:5322
 		{
 			// TODO: Cannot use list() as standalone expression
 			listNode := expr.NewList(yyDollar[3].arrayItems)
-			yyVAL.node = expr.NewArrayItem(nil, listNode)
+			yyVAL.node = expr.NewArrayItem(nil, listNode, false)
 
 			// save position
 			listNode.SetPosition(yylex.(*Parser).positionBuilder.NewTokensPosition(yyDollar[1].token, yyDollar[4].token))
@@ -8020,17 +8033,17 @@ yydefault:
 
 			yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
 		}
-	case 469:
+	case 470:
 		yyDollar = yyS[yypt-2 : yypt+1]
-//line php7.y:5331
+//line php7.y:5342
 		{
 			yyVAL.list = append(yyDollar[1].list, yyDollar[2].node)
 
 			yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
 		}
-	case 470:
+	case 471:
 		yyDollar = yyS[yypt-2 : yypt+1]
-//line php7.y:5337
+//line php7.y:5348
 		{
 			encapsed := scalar.NewEncapsedStringPart(yyDollar[2].token.Value)
 			yyVAL.list = append(yyDollar[1].list, encapsed)
@@ -8043,17 +8056,17 @@ yydefault:
 
 			yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
 		}
-	case 471:
+	case 472:
 		yyDollar = yyS[yypt-1 : yypt+1]
-//line php7.y:5350
+//line php7.y:5361
 		{
 			yyVAL.list = []node.Node{yyDollar[1].node}
 
 			yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
 		}
-	case 472:
+	case 473:
 		yyDollar = yyS[yypt-2 : yypt+1]
-//line php7.y:5356
+//line php7.y:5367
 		{
 			encapsed := scalar.NewEncapsedStringPart(yyDollar[1].token.Value)
 			yyVAL.list = []node.Node{encapsed, yyDollar[2].node}
@@ -8066,9 +8079,9 @@ yydefault:
 
 			yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
 		}
-	case 473:
+	case 474:
 		yyDollar = yyS[yypt-1 : yypt+1]
-//line php7.y:5372
+//line php7.y:5383
 		{
 			yyVAL.node = node.NewSimpleVar(strings.TrimLeftFunc(yyDollar[1].token.Value, isDollar))
 
@@ -8081,9 +8094,9 @@ yydefault:
 
 			yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
 		}
-	case 474:
+	case 475:
 		yyDollar = yyS[yypt-4 : yypt+1]
-//line php7.y:5385
+//line php7.y:5396
 		{
 			variable := node.NewSimpleVar(strings.TrimLeftFunc(yyDollar[1].token.Value, isDollar))
 			yyVAL.node = expr.NewArrayDimFetch(variable, yyDollar[3].node)
@@ -8099,9 +8112,9 @@ yydefault:
 
 			yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
 		}
-	case 475:
+	case 476:
 		yyDollar = yyS[yypt-3 : yypt+1]
-//line php7.y:5401
+//line php7.y:5412
 		{
 			variable := node.NewSimpleVar(strings.TrimLeftFunc(yyDollar[1].token.Value, isDollar))
 			fetch := node.NewIdentifier(yyDollar[3].token.Value)
@@ -8119,9 +8132,9 @@ yydefault:
 
 			yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
 		}
-	case 476:
+	case 477:
 		yyDollar = yyS[yypt-3 : yypt+1]
-//line php7.y:5419
+//line php7.y:5430
 		{
 			variable := node.NewVar(yyDollar[2].node)
 
@@ -8136,9 +8149,9 @@ yydefault:
 
 			yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
 		}
-	case 477:
+	case 478:
 		yyDollar = yyS[yypt-3 : yypt+1]
-//line php7.y:5434
+//line php7.y:5445
 		{
 			variable := node.NewSimpleVar(yyDollar[2].token.Value)
 
@@ -8153,9 +8166,9 @@ yydefault:
 
 			yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
 		}
-	case 478:
+	case 479:
 		yyDollar = yyS[yypt-6 : yypt+1]
-//line php7.y:5449
+//line php7.y:5460
 		{
 			variable := node.NewSimpleVar(yyDollar[2].token.Value)
 			yyVAL.node = expr.NewArrayDimFetch(variable, yyDollar[4].node)
@@ -8172,9 +8185,9 @@ yydefault:
 
 			yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
 		}
-	case 479:
+	case 480:
 		yyDollar = yyS[yypt-3 : yypt+1]
-//line php7.y:5466
+//line php7.y:5477
 		{
 			yyVAL.node = yyDollar[2].node
 
@@ -8184,9 +8197,9 @@ yydefault:
 
 			yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
 		}
-	case 480:
+	case 481:
 		yyDollar = yyS[yypt-1 : yypt+1]
-//line php7.y:5479
+//line php7.y:5490
 		{
 			yyVAL.node = scalar.NewString(yyDollar[1].token.Value)
 
@@ -8198,9 +8211,9 @@ yydefault:
 
 			yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
 		}
-	case 481:
+	case 482:
 		yyDollar = yyS[yypt-1 : yypt+1]
-//line php7.y:5491
+//line php7.y:5502
 		{
 			// TODO: add option to handle 64 bit integer
 			if _, err := strconv.Atoi(yyDollar[1].token.Value); err == nil {
@@ -8217,9 +8230,9 @@ yydefault:
 
 			yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
 		}
-	case 482:
+	case 483:
 		yyDollar = yyS[yypt-2 : yypt+1]
-//line php7.y:5508
+//line php7.y:5519
 		{
 			var lnumber *scalar.Lnumber
 			// TODO: add option to handle 64 bit integer
@@ -8245,9 +8258,9 @@ yydefault:
 
 			yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
 		}
-	case 483:
+	case 484:
 		yyDollar = yyS[yypt-1 : yypt+1]
-//line php7.y:5534
+//line php7.y:5545
 		{
 			yyVAL.node = node.NewSimpleVar(strings.TrimLeftFunc(yyDollar[1].token.Value, isDollar))
 
@@ -8260,9 +8273,9 @@ yydefault:
 
 			yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
 		}
-	case 484:
+	case 485:
 		yyDollar = yyS[yypt-5 : yypt+1]
-//line php7.y:5550
+//line php7.y:5561
 		{
 			yyVAL.node = expr.NewIsset(yyDollar[3].list)
 
@@ -8280,9 +8293,9 @@ yydefault:
 
 			yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
 		}
-	case 485:
+	case 486:
 		yyDollar = yyS[yypt-4 : yypt+1]
-//line php7.y:5568
+//line php7.y:5579
 		{
 			yyVAL.node = expr.NewEmpty(yyDollar[3].node)
 
@@ -8296,9 +8309,9 @@ yydefault:
 
 			yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
 		}
-	case 486:
+	case 487:
 		yyDollar = yyS[yypt-2 : yypt+1]
-//line php7.y:5582
+//line php7.y:5593
 		{
 			yyVAL.node = expr.NewInclude(yyDollar[2].node)
 
@@ -8310,9 +8323,9 @@ yydefault:
 
 			yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
 		}
-	case 487:
+	case 488:
 		yyDollar = yyS[yypt-2 : yypt+1]
-//line php7.y:5594
+//line php7.y:5605
 		{
 			yyVAL.node = expr.NewIncludeOnce(yyDollar[2].node)
 
@@ -8324,9 +8337,9 @@ yydefault:
 
 			yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
 		}
-	case 488:
+	case 489:
 		yyDollar = yyS[yypt-4 : yypt+1]
-//line php7.y:5606
+//line php7.y:5617
 		{
 			yyVAL.node = expr.NewEval(yyDollar[3].node)
 
@@ -8340,9 +8353,9 @@ yydefault:
 
 			yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
 		}
-	case 489:
+	case 490:
 		yyDollar = yyS[yypt-2 : yypt+1]
-//line php7.y:5620
+//line php7.y:5631
 		{
 			yyVAL.node = expr.NewRequire(yyDollar[2].node)
 
@@ -8354,9 +8367,9 @@ yydefault:
 
 			yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
 		}
-	case 490:
+	case 491:
 		yyDollar = yyS[yypt-2 : yypt+1]
-//line php7.y:5632
+//line php7.y:5643
 		{
 			yyVAL.node = expr.NewRequireOnce(yyDollar[2].node)
 
@@ -8368,17 +8381,17 @@ yydefault:
 
 			yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
 		}
-	case 491:
+	case 492:
 		yyDollar = yyS[yypt-1 : yypt+1]
-//line php7.y:5647
+//line php7.y:5658
 		{
 			yyVAL.list = []node.Node{yyDollar[1].node}
 
 			yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
 		}
-	case 492:
+	case 493:
 		yyDollar = yyS[yypt-3 : yypt+1]
-//line php7.y:5653
+//line php7.y:5664
 		{
 			yyVAL.list = append(yyDollar[1].list, yyDollar[3].node)
 
@@ -8387,9 +8400,9 @@ yydefault:
 
 			yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
 		}
-	case 493:
+	case 494:
 		yyDollar = yyS[yypt-1 : yypt+1]
-//line php7.y:5665
+//line php7.y:5676
 		{
 			yyVAL.node = yyDollar[1].node
 
diff --git a/src/php/parser/php7/php7.y b/src/php/parser/php7/php7.y
index 031ea15..da188a2 100644
--- a/src/php/parser/php7/php7.y
+++ b/src/php/parser/php7/php7.y
@@ -5190,7 +5190,7 @@ array_pair_list:
 possible_array_pair:
         /* empty */
             {
-                $$ = expr.NewArrayItem(nil, nil)
+                $$ = expr.NewArrayItem(nil, nil, false)
 
                 yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
             }
@@ -5206,7 +5206,7 @@ non_empty_array_pair_list:
         non_empty_array_pair_list ',' possible_array_pair
             {
                 if len($1) == 0 {
-                    $1 = []*expr.ArrayItem{expr.NewArrayItem(nil, nil)}
+                    $1 = []*expr.ArrayItem{expr.NewArrayItem(nil, nil, false)}
                 }
 
                 $$ = append($1, $3.(*expr.ArrayItem))
@@ -5235,7 +5235,7 @@ non_empty_array_pair_list:
 array_pair:
         expr T_DOUBLE_ARROW expr
             {
-                $$ = expr.NewArrayItem($1, $3)
+                $$ = expr.NewArrayItem($1, $3, false)
 
                 // save position
                 $$.SetPosition(yylex.(*Parser).positionBuilder.NewNodesPosition($1, $3))
@@ -5248,7 +5248,7 @@ array_pair:
             }
     |   expr
             {
-                $$ = expr.NewArrayItem(nil, $1)
+                $$ = expr.NewArrayItem(nil, $1, false)
 
                 // save position
                 $$.SetPosition(yylex.(*Parser).positionBuilder.NewNodePosition($1))
@@ -5261,7 +5261,7 @@ array_pair:
     |   expr T_DOUBLE_ARROW '&' variable
             {
                 reference := expr.NewReference($4)
-                $$ = expr.NewArrayItem($1, reference)
+                $$ = expr.NewArrayItem($1, reference, false)
 
                 // save position
                 $$.SetPosition(yylex.(*Parser).positionBuilder.NewNodesPosition($1, $4))
@@ -5277,7 +5277,7 @@ array_pair:
     |   '&' variable
             {
                 reference := expr.NewReference($2)
-                $$ = expr.NewArrayItem(nil, reference)
+                $$ = expr.NewArrayItem(nil, reference, false)
 
                 // save position
                 $$.SetPosition(yylex.(*Parser).positionBuilder.NewTokenNodePosition($1, $2))
@@ -5286,13 +5286,24 @@ array_pair:
                 // save comments
                 yylex.(*Parser).setFreeFloating($$, freefloating.Start, $1.FreeFloating)
 
+                yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
+            }
+    |   T_ELLIPSIS expr
+            {
+                $$ = expr.NewArrayItem(nil, $2, true)
+
+                // save position
+                $$.SetPosition(yylex.(*Parser).positionBuilder.NewTokenNodePosition($1, $2))
+
+                // save comments
+                yylex.(*Parser).setFreeFloating($$, freefloating.Start, $1.FreeFloating)
                 yylex.(*Parser).returnTokenToPool(yyDollar, &yyVAL)
             }
     |   expr T_DOUBLE_ARROW T_LIST '(' array_pair_list ')'
             {
                 // TODO: Cannot use list() as standalone expression
                 listNode := expr.NewList($5)
-                $$ = expr.NewArrayItem($1, listNode)
+                $$ = expr.NewArrayItem($1, listNode, false)
 
                 // save position
                 listNode.SetPosition(yylex.(*Parser).positionBuilder.NewTokensPosition($3, $6))
@@ -5311,7 +5322,7 @@ array_pair:
             {
                 // TODO: Cannot use list() as standalone expression
                 listNode := expr.NewList($3)
-                $$ = expr.NewArrayItem(nil, listNode)
+                $$ = expr.NewArrayItem(nil, listNode, false)
 
                 // save position
                 listNode.SetPosition(yylex.(*Parser).positionBuilder.NewTokensPosition($1, $4))
diff --git a/src/php/parser/printer/printer.go b/src/php/parser/printer/printer.go
index 2711bbf..3069e4e 100644
--- a/src/php/parser/printer/printer.go
+++ b/src/php/parser/printer/printer.go
@@ -1309,6 +1309,10 @@ func (p *Printer) printExprArrayItem(n node.Node) {
 	nn := n.(*expr.ArrayItem)
 	p.printFreeFloating(nn, freefloating.Start)
 
+	if nn.Unpack {
+		io.WriteString(p.w, "...")
+	}
+
 	if nn.Key != nil {
 		p.Print(nn.Key)
 		p.printFreeFloating(nn, freefloating.Expr)


Test patch:
diff --git a/src/php/parser/node/expr/t_array_test.go b/src/php/parser/node/expr/t_array_test.go
index 6fd094c..ee11f84 100644
--- a/src/php/parser/node/expr/t_array_test.go
+++ b/src/php/parser/node/expr/t_array_test.go
@@ -194,3 +194,59 @@ func TestArrayItems(t *testing.T) {
 	actual := php7parser.GetRootNode()
 	assert.DeepEqual(t, expected, actual)
 }
+
+func TestArrayItemUnpack(t *testing.T) {
+	src := `<? array(...$b);`
+
+	expected := &node.Root{
+		Position: &position.Position{
+			StartLine: 1,
+			EndLine:   1,
+			StartPos:  3,
+			EndPos:    16,
+		},
+		Stmts: []node.Node{
+			&stmt.Expression{
+				Position: &position.Position{
+					StartLine: 1,
+					EndLine:   1,
+					StartPos:  3,
+					EndPos:    16,
+				},
+				Expr: &expr.Array{
+					Position: &position.Position{
+						StartLine: 1,
+						EndLine:   1,
+						StartPos:  3,
+						EndPos:    15,
+					},
+					Items: []*expr.ArrayItem{
+						{
+							Position: &position.Position{
+								StartLine: 1,
+								EndLine:   1,
+								StartPos:  9,
+								EndPos:    14,
+							},
+							Unpack: true,
+							Val: &node.SimpleVar{
+								Position: &position.Position{
+									StartLine: 1,
+									EndLine:   1,
+									StartPos:  12,
+									EndPos:    14,
+								},
+								Name: "b",
+							},
+						},
+					},
+				},
+			},
+		},
+	}
+
+	php7parser := php7.NewParser([]byte(src))
+	php7parser.Parse()
+	actual := php7parser.GetRootNode()
+	assert.DeepEqual(t, expected, actual)
+}
diff --git a/src/php/parser/printer/printer_parsed_php7_test.go b/src/php/parser/printer/printer_parsed_php7_test.go
index 5ff1bf5..12d7bab 100644
--- a/src/php/parser/printer/printer_parsed_php7_test.go
+++ b/src/php/parser/printer/printer_parsed_php7_test.go
@@ -384,6 +384,7 @@ func TestParseAndPrintArrayItem(t *testing.T) {
 		$world ,
 		& $world ,
 		'Hello' => $world ,
+		... $unpack
 	] ;
 	`
 
diff --git a/src/php/parser/printer/printer_test.go b/src/php/parser/printer/printer_test.go
index 666887d..b85b4b4 100644
--- a/src/php/parser/printer/printer_test.go
+++ b/src/php/parser/printer/printer_test.go
@@ -1345,6 +1345,25 @@ func TestPrinterPrintExprArrayItem(t *testing.T) {
 	}
 }
 
+func TestPrinterPrintExprArrayItemUnpack(t *testing.T) {
+	o := bytes.NewBufferString("")
+
+	p := printer.NewPrinter(o)
+	p.Print(&expr.ArrayItem{
+		Unpack: true,
+		Val: &node.SimpleVar{
+			Name: "world",
+		},
+	})
+
+	expected := `...$world`
+	actual := o.String()
+
+	if expected != actual {
+		t.Errorf("\nexpected: %s\ngot: %s\n", expected, actual)
+	}
+}
+
 func TestPrinterPrintExprArray(t *testing.T) {
 	o := bytes.NewBufferString("")