Merge pull request #3810 from ankith26/main

[cmake] Generate pkg-config .pc files
diff --git a/src/hb-ot-layout-gsubgpos.hh b/src/hb-ot-layout-gsubgpos.hh
index c77ec12..c15a42b 100644
--- a/src/hb-ot-layout-gsubgpos.hh
+++ b/src/hb-ot-layout-gsubgpos.hh
@@ -4261,6 +4261,7 @@
   }
 
   void prune_langsys (const hb_map_t *duplicate_feature_map,
+                      const hb_set_t *layout_scripts,
                       hb_hashmap_t<unsigned, hb::unique_ptr<hb_set_t>> *script_langsys_map,
                       hb_set_t       *new_feature_indexes /* OUT */) const
   {
@@ -4269,6 +4270,8 @@
     unsigned count = get_script_count ();
     for (unsigned script_index = 0; script_index < count; script_index++)
     {
+      const Tag& tag = get_script_tag (script_index);
+      if (!layout_scripts->has (tag)) continue;
       const Script& s = get_script (script_index);
       s.prune_langsys (&c, script_index);
     }
diff --git a/src/hb-ot-shaper-use-machine.hh b/src/hb-ot-shaper-use-machine.hh
index 65e65ff..41e8a34 100644
--- a/src/hb-ot-shaper-use-machine.hh
+++ b/src/hb-ot-shaper-use-machine.hh
@@ -99,521 +99,667 @@
 
 #line 101 "hb-ot-shaper-use-machine.hh"
 static const unsigned char _use_syllable_machine_trans_keys[] = {
-	0u, 53u, 11u, 53u, 11u, 53u, 1u, 53u, 23u, 48u, 24u, 47u, 25u, 47u, 26u, 47u, 
-	45u, 46u, 46u, 46u, 24u, 48u, 24u, 48u, 24u, 48u, 1u, 1u, 24u, 48u, 22u, 53u, 
-	23u, 53u, 23u, 53u, 23u, 53u, 12u, 53u, 23u, 53u, 12u, 53u, 12u, 53u, 12u, 53u, 
-	11u, 53u, 1u, 1u, 1u, 48u, 11u, 53u, 41u, 42u, 42u, 42u, 11u, 53u, 11u, 53u, 
-	1u, 53u, 23u, 48u, 24u, 47u, 25u, 47u, 26u, 47u, 45u, 46u, 46u, 46u, 24u, 48u, 
-	24u, 48u, 24u, 48u, 1u, 1u, 24u, 48u, 22u, 53u, 23u, 53u, 23u, 53u, 23u, 53u, 
-	12u, 53u, 23u, 53u, 12u, 53u, 12u, 53u, 12u, 53u, 11u, 53u, 1u, 1u, 1u, 48u, 
-	13u, 13u, 4u, 4u, 11u, 53u, 11u, 53u, 1u, 53u, 23u, 48u, 24u, 47u, 25u, 47u, 
-	26u, 47u, 45u, 46u, 46u, 46u, 24u, 48u, 24u, 48u, 24u, 48u, 1u, 1u, 24u, 48u, 
-	22u, 53u, 23u, 53u, 23u, 53u, 23u, 53u, 12u, 53u, 23u, 53u, 12u, 53u, 12u, 53u, 
-	12u, 53u, 11u, 53u, 1u, 1u, 1u, 48u, 11u, 53u, 11u, 53u, 1u, 53u, 23u, 48u, 
-	24u, 47u, 25u, 47u, 26u, 47u, 45u, 46u, 46u, 46u, 24u, 48u, 24u, 48u, 24u, 48u, 
-	1u, 1u, 24u, 48u, 22u, 53u, 23u, 53u, 23u, 53u, 23u, 53u, 12u, 53u, 23u, 53u, 
-	12u, 53u, 12u, 53u, 12u, 53u, 11u, 53u, 1u, 1u, 1u, 48u, 4u, 4u, 13u, 13u, 
-	1u, 53u, 11u, 53u, 41u, 42u, 42u, 42u, 1u, 5u, 50u, 52u, 49u, 52u, 49u, 51u, 
-	0
+	0u, 53u, 11u, 53u, 11u, 53u, 1u, 53u, 14u, 48u, 14u, 47u, 14u, 47u, 14u, 47u, 
+	14u, 46u, 14u, 46u, 14u, 14u, 14u, 48u, 14u, 48u, 14u, 48u, 1u, 14u, 14u, 48u, 
+	14u, 53u, 14u, 53u, 14u, 53u, 14u, 53u, 12u, 53u, 14u, 53u, 12u, 53u, 12u, 53u, 
+	12u, 53u, 11u, 53u, 1u, 14u, 1u, 48u, 11u, 53u, 14u, 42u, 14u, 42u, 11u, 53u, 
+	11u, 53u, 1u, 53u, 14u, 48u, 14u, 47u, 14u, 47u, 14u, 47u, 14u, 46u, 14u, 46u, 
+	14u, 14u, 14u, 48u, 14u, 48u, 14u, 48u, 1u, 14u, 14u, 48u, 14u, 53u, 14u, 53u, 
+	14u, 53u, 14u, 53u, 12u, 53u, 14u, 53u, 12u, 53u, 12u, 53u, 12u, 53u, 11u, 53u, 
+	1u, 14u, 1u, 14u, 1u, 48u, 13u, 14u, 4u, 14u, 11u, 53u, 11u, 53u, 1u, 53u, 
+	14u, 48u, 14u, 47u, 14u, 47u, 14u, 47u, 14u, 46u, 14u, 46u, 14u, 14u, 14u, 48u, 
+	14u, 48u, 14u, 48u, 1u, 14u, 14u, 48u, 14u, 53u, 14u, 53u, 14u, 53u, 14u, 53u, 
+	12u, 53u, 14u, 53u, 12u, 53u, 12u, 53u, 12u, 53u, 11u, 53u, 1u, 14u, 1u, 14u, 
+	1u, 48u, 11u, 53u, 11u, 53u, 1u, 53u, 14u, 48u, 14u, 47u, 14u, 47u, 14u, 47u, 
+	14u, 46u, 14u, 46u, 14u, 14u, 14u, 48u, 14u, 48u, 14u, 48u, 1u, 14u, 14u, 48u, 
+	14u, 53u, 14u, 53u, 14u, 53u, 14u, 53u, 12u, 53u, 14u, 53u, 12u, 53u, 12u, 53u, 
+	12u, 53u, 11u, 53u, 1u, 14u, 1u, 48u, 4u, 14u, 13u, 14u, 1u, 53u, 11u, 53u, 
+	14u, 42u, 14u, 42u, 1u, 5u, 14u, 52u, 14u, 52u, 14u, 51u, 0
 };
 
 static const char _use_syllable_machine_key_spans[] = {
-	54, 43, 43, 53, 26, 24, 23, 22, 
-	2, 1, 25, 25, 25, 1, 25, 32, 
-	31, 31, 31, 42, 31, 42, 42, 42, 
-	43, 1, 48, 43, 2, 1, 43, 43, 
-	53, 26, 24, 23, 22, 2, 1, 25, 
-	25, 25, 1, 25, 32, 31, 31, 31, 
-	42, 31, 42, 42, 42, 43, 1, 48, 
-	1, 1, 43, 43, 53, 26, 24, 23, 
-	22, 2, 1, 25, 25, 25, 1, 25, 
-	32, 31, 31, 31, 42, 31, 42, 42, 
-	42, 43, 1, 48, 43, 43, 53, 26, 
-	24, 23, 22, 2, 1, 25, 25, 25, 
-	1, 25, 32, 31, 31, 31, 42, 31, 
-	42, 42, 42, 43, 1, 48, 1, 1, 
-	53, 43, 2, 1, 5, 3, 4, 3
+	54, 43, 43, 53, 35, 34, 34, 34, 
+	33, 33, 1, 35, 35, 35, 14, 35, 
+	40, 40, 40, 40, 42, 40, 42, 42, 
+	42, 43, 14, 48, 43, 29, 29, 43, 
+	43, 53, 35, 34, 34, 34, 33, 33, 
+	1, 35, 35, 35, 14, 35, 40, 40, 
+	40, 40, 42, 40, 42, 42, 42, 43, 
+	14, 14, 48, 2, 11, 43, 43, 53, 
+	35, 34, 34, 34, 33, 33, 1, 35, 
+	35, 35, 14, 35, 40, 40, 40, 40, 
+	42, 40, 42, 42, 42, 43, 14, 14, 
+	48, 43, 43, 53, 35, 34, 34, 34, 
+	33, 33, 1, 35, 35, 35, 14, 35, 
+	40, 40, 40, 40, 42, 40, 42, 42, 
+	42, 43, 14, 48, 11, 2, 53, 43, 
+	29, 29, 5, 39, 39, 38
 };
 
 static const short _use_syllable_machine_index_offsets[] = {
-	0, 55, 99, 143, 197, 224, 249, 273, 
-	296, 299, 301, 327, 353, 379, 381, 407, 
-	440, 472, 504, 536, 579, 611, 654, 697, 
-	740, 784, 786, 835, 879, 882, 884, 928, 
-	972, 1026, 1053, 1078, 1102, 1125, 1128, 1130, 
-	1156, 1182, 1208, 1210, 1236, 1269, 1301, 1333, 
-	1365, 1408, 1440, 1483, 1526, 1569, 1613, 1615, 
-	1664, 1666, 1668, 1712, 1756, 1810, 1837, 1862, 
-	1886, 1909, 1912, 1914, 1940, 1966, 1992, 1994, 
-	2020, 2053, 2085, 2117, 2149, 2192, 2224, 2267, 
-	2310, 2353, 2397, 2399, 2448, 2492, 2536, 2590, 
-	2617, 2642, 2666, 2689, 2692, 2694, 2720, 2746, 
-	2772, 2774, 2800, 2833, 2865, 2897, 2929, 2972, 
-	3004, 3047, 3090, 3133, 3177, 3179, 3228, 3230, 
-	3232, 3286, 3330, 3333, 3335, 3341, 3345, 3350
+	0, 55, 99, 143, 197, 233, 268, 303, 
+	338, 372, 406, 408, 444, 480, 516, 531, 
+	567, 608, 649, 690, 731, 774, 815, 858, 
+	901, 944, 988, 1003, 1052, 1096, 1126, 1156, 
+	1200, 1244, 1298, 1334, 1369, 1404, 1439, 1473, 
+	1507, 1509, 1545, 1581, 1617, 1632, 1668, 1709, 
+	1750, 1791, 1832, 1875, 1916, 1959, 2002, 2045, 
+	2089, 2104, 2119, 2168, 2171, 2183, 2227, 2271, 
+	2325, 2361, 2396, 2431, 2466, 2500, 2534, 2536, 
+	2572, 2608, 2644, 2659, 2695, 2736, 2777, 2818, 
+	2859, 2902, 2943, 2986, 3029, 3072, 3116, 3131, 
+	3146, 3195, 3239, 3283, 3337, 3373, 3408, 3443, 
+	3478, 3512, 3546, 3548, 3584, 3620, 3656, 3671, 
+	3707, 3748, 3789, 3830, 3871, 3914, 3955, 3998, 
+	4041, 4084, 4128, 4143, 4192, 4204, 4207, 4261, 
+	4305, 4335, 4365, 4371, 4411, 4451
 };
 
 static const unsigned char _use_syllable_machine_indicies[] = {
 	0, 1, 2, 2, 3, 4, 2, 2, 
-	2, 2, 2, 5, 6, 7, 2, 2, 
-	2, 2, 8, 2, 2, 2, 9, 10, 
-	11, 12, 13, 14, 15, 16, 17, 18, 
-	19, 20, 21, 22, 2, 23, 24, 25, 
-	2, 26, 27, 28, 29, 30, 31, 32, 
-	29, 33, 2, 34, 2, 35, 2, 37, 
-	38, 36, 36, 36, 36, 36, 36, 36, 
-	36, 36, 39, 40, 41, 42, 43, 44, 
-	45, 46, 47, 48, 49, 50, 51, 52, 
-	36, 53, 54, 55, 36, 56, 57, 36, 
-	58, 59, 60, 61, 58, 36, 36, 36, 
-	36, 62, 36, 37, 38, 36, 36, 36, 
-	36, 36, 36, 36, 36, 36, 39, 40, 
-	41, 42, 43, 44, 45, 46, 47, 49, 
-	49, 50, 51, 52, 36, 53, 54, 55, 
-	36, 36, 36, 36, 58, 59, 60, 61, 
-	58, 36, 36, 36, 36, 62, 36, 37, 
-	36, 36, 36, 36, 36, 36, 36, 36, 
-	36, 36, 36, 36, 36, 36, 36, 36, 
-	36, 36, 36, 36, 36, 40, 41, 42, 
-	43, 36, 36, 36, 36, 36, 36, 36, 
-	36, 36, 36, 53, 54, 55, 36, 36, 
-	36, 36, 36, 59, 60, 61, 63, 36, 
-	36, 36, 36, 40, 36, 40, 41, 42, 
-	43, 36, 36, 36, 36, 36, 36, 36, 
-	36, 36, 36, 53, 54, 55, 36, 36, 
-	36, 36, 36, 59, 60, 61, 63, 36, 
-	41, 42, 43, 36, 36, 36, 36, 36, 
-	36, 36, 36, 36, 36, 36, 36, 36, 
-	36, 36, 36, 36, 36, 59, 60, 61, 
-	36, 42, 43, 36, 36, 36, 36, 36, 
-	36, 36, 36, 36, 36, 36, 36, 36, 
-	36, 36, 36, 36, 36, 59, 60, 61, 
-	36, 43, 36, 36, 36, 36, 36, 36, 
-	36, 36, 36, 36, 36, 36, 36, 36, 
-	36, 36, 36, 36, 59, 60, 61, 36, 
-	59, 60, 36, 60, 36, 41, 42, 43, 
-	36, 36, 36, 36, 36, 36, 36, 36, 
-	36, 36, 53, 54, 55, 36, 36, 36, 
-	36, 36, 59, 60, 61, 63, 36, 41, 
-	42, 43, 36, 36, 36, 36, 36, 36, 
-	36, 36, 36, 36, 36, 54, 55, 36, 
-	36, 36, 36, 36, 59, 60, 61, 63, 
-	36, 41, 42, 43, 36, 36, 36, 36, 
-	36, 36, 36, 36, 36, 36, 36, 36, 
-	55, 36, 36, 36, 36, 36, 59, 60, 
-	61, 63, 36, 64, 36, 41, 42, 43, 
-	36, 36, 36, 36, 36, 36, 36, 36, 
-	36, 36, 36, 36, 36, 36, 36, 36, 
-	36, 36, 59, 60, 61, 63, 36, 39, 
-	40, 41, 42, 43, 36, 36, 36, 36, 
-	36, 36, 50, 51, 52, 36, 53, 54, 
-	55, 36, 36, 36, 36, 36, 59, 60, 
-	61, 63, 36, 36, 36, 36, 40, 36, 
-	40, 41, 42, 43, 36, 36, 36, 36, 
-	36, 36, 50, 51, 52, 36, 53, 54, 
-	55, 36, 36, 36, 36, 36, 59, 60, 
-	61, 63, 36, 36, 36, 36, 40, 36, 
-	40, 41, 42, 43, 36, 36, 36, 36, 
-	36, 36, 36, 51, 52, 36, 53, 54, 
-	55, 36, 36, 36, 36, 36, 59, 60, 
-	61, 63, 36, 36, 36, 36, 40, 36, 
-	40, 41, 42, 43, 36, 36, 36, 36, 
-	36, 36, 36, 36, 52, 36, 53, 54, 
-	55, 36, 36, 36, 36, 36, 59, 60, 
-	61, 63, 36, 36, 36, 36, 40, 36, 
-	65, 36, 36, 36, 36, 36, 36, 36, 
-	36, 36, 39, 40, 41, 42, 43, 36, 
-	45, 46, 36, 36, 36, 50, 51, 52, 
-	36, 53, 54, 55, 36, 36, 36, 36, 
-	36, 59, 60, 61, 63, 36, 36, 36, 
-	36, 40, 36, 40, 41, 42, 43, 36, 
-	36, 36, 36, 36, 36, 36, 36, 36, 
-	36, 53, 54, 55, 36, 36, 36, 36, 
-	36, 59, 60, 61, 63, 36, 36, 36, 
-	36, 40, 36, 65, 36, 36, 36, 36, 
-	36, 36, 36, 36, 36, 39, 40, 41, 
-	42, 43, 36, 36, 46, 36, 36, 36, 
-	50, 51, 52, 36, 53, 54, 55, 36, 
-	36, 36, 36, 36, 59, 60, 61, 63, 
-	36, 36, 36, 36, 40, 36, 65, 36, 
-	36, 36, 36, 36, 36, 36, 36, 36, 
-	39, 40, 41, 42, 43, 36, 36, 36, 
-	36, 36, 36, 50, 51, 52, 36, 53, 
-	54, 55, 36, 36, 36, 36, 36, 59, 
-	60, 61, 63, 36, 36, 36, 36, 40, 
-	36, 65, 36, 36, 36, 36, 36, 36, 
-	36, 36, 36, 39, 40, 41, 42, 43, 
-	44, 45, 46, 36, 36, 36, 50, 51, 
-	52, 36, 53, 54, 55, 36, 36, 36, 
-	36, 36, 59, 60, 61, 63, 36, 36, 
-	36, 36, 40, 36, 37, 38, 36, 36, 
-	36, 36, 36, 36, 36, 36, 36, 39, 
-	40, 41, 42, 43, 44, 45, 46, 47, 
-	36, 49, 50, 51, 52, 36, 53, 54, 
-	55, 36, 36, 36, 36, 58, 59, 60, 
-	61, 58, 36, 36, 36, 36, 62, 36, 
-	37, 36, 37, 36, 36, 36, 36, 36, 
-	36, 36, 36, 36, 36, 36, 36, 36, 
-	36, 36, 36, 36, 36, 36, 36, 36, 
-	40, 41, 42, 43, 36, 36, 36, 36, 
-	36, 36, 36, 36, 36, 36, 53, 54, 
-	55, 36, 36, 36, 36, 36, 59, 60, 
-	61, 63, 36, 37, 38, 36, 36, 36, 
-	36, 36, 36, 36, 36, 36, 39, 40, 
-	41, 42, 43, 44, 45, 46, 47, 48, 
-	49, 50, 51, 52, 36, 53, 54, 55, 
-	36, 36, 36, 36, 58, 59, 60, 61, 
-	58, 36, 36, 36, 36, 62, 36, 56, 
-	57, 36, 57, 36, 67, 68, 66, 66, 
-	66, 66, 66, 66, 66, 66, 66, 69, 
-	70, 71, 72, 73, 74, 75, 76, 77, 
-	1, 78, 79, 80, 81, 66, 82, 83, 
-	84, 66, 66, 66, 66, 85, 86, 87, 
-	88, 89, 66, 66, 66, 66, 90, 66, 
-	67, 68, 66, 66, 66, 66, 66, 66, 
-	66, 66, 66, 69, 70, 71, 72, 73, 
-	74, 75, 76, 77, 78, 78, 79, 80, 
-	81, 66, 82, 83, 84, 66, 66, 66, 
-	66, 85, 86, 87, 88, 89, 66, 66, 
-	66, 66, 90, 66, 67, 66, 66, 66, 
-	66, 66, 66, 66, 66, 66, 66, 66, 
-	66, 66, 66, 66, 66, 66, 66, 66, 
-	66, 66, 70, 71, 72, 73, 66, 66, 
-	66, 66, 66, 66, 66, 66, 66, 66, 
-	82, 83, 84, 66, 66, 66, 66, 66, 
-	86, 87, 88, 91, 66, 66, 66, 66, 
-	70, 66, 70, 71, 72, 73, 66, 66, 
-	66, 66, 66, 66, 66, 66, 66, 66, 
-	82, 83, 84, 66, 66, 66, 66, 66, 
-	86, 87, 88, 91, 66, 71, 72, 73, 
-	66, 66, 66, 66, 66, 66, 66, 66, 
-	66, 66, 66, 66, 66, 66, 66, 66, 
-	66, 66, 86, 87, 88, 66, 72, 73, 
-	66, 66, 66, 66, 66, 66, 66, 66, 
-	66, 66, 66, 66, 66, 66, 66, 66, 
-	66, 66, 86, 87, 88, 66, 73, 66, 
-	66, 66, 66, 66, 66, 66, 66, 66, 
-	66, 66, 66, 66, 66, 66, 66, 66, 
-	66, 86, 87, 88, 66, 86, 87, 66, 
-	87, 66, 71, 72, 73, 66, 66, 66, 
-	66, 66, 66, 66, 66, 66, 66, 82, 
-	83, 84, 66, 66, 66, 66, 66, 86, 
-	87, 88, 91, 66, 71, 72, 73, 66, 
-	66, 66, 66, 66, 66, 66, 66, 66, 
-	66, 66, 83, 84, 66, 66, 66, 66, 
-	66, 86, 87, 88, 91, 66, 71, 72, 
-	73, 66, 66, 66, 66, 66, 66, 66, 
-	66, 66, 66, 66, 66, 84, 66, 66, 
-	66, 66, 66, 86, 87, 88, 91, 66, 
-	93, 92, 71, 72, 73, 66, 66, 66, 
-	66, 66, 66, 66, 66, 66, 66, 66, 
-	66, 66, 66, 66, 66, 66, 66, 86, 
-	87, 88, 91, 66, 69, 70, 71, 72, 
-	73, 66, 66, 66, 66, 66, 66, 79, 
-	80, 81, 66, 82, 83, 84, 66, 66, 
-	66, 66, 66, 86, 87, 88, 91, 66, 
-	66, 66, 66, 70, 66, 70, 71, 72, 
-	73, 66, 66, 66, 66, 66, 66, 79, 
-	80, 81, 66, 82, 83, 84, 66, 66, 
-	66, 66, 66, 86, 87, 88, 91, 66, 
-	66, 66, 66, 70, 66, 70, 71, 72, 
-	73, 66, 66, 66, 66, 66, 66, 66, 
-	80, 81, 66, 82, 83, 84, 66, 66, 
-	66, 66, 66, 86, 87, 88, 91, 66, 
-	66, 66, 66, 70, 66, 70, 71, 72, 
-	73, 66, 66, 66, 66, 66, 66, 66, 
-	66, 81, 66, 82, 83, 84, 66, 66, 
-	66, 66, 66, 86, 87, 88, 91, 66, 
-	66, 66, 66, 70, 66, 94, 66, 66, 
-	66, 66, 66, 66, 66, 66, 66, 69, 
-	70, 71, 72, 73, 66, 75, 76, 66, 
-	66, 66, 79, 80, 81, 66, 82, 83, 
-	84, 66, 66, 66, 66, 66, 86, 87, 
-	88, 91, 66, 66, 66, 66, 70, 66, 
-	70, 71, 72, 73, 66, 66, 66, 66, 
-	66, 66, 66, 66, 66, 66, 82, 83, 
-	84, 66, 66, 66, 66, 66, 86, 87, 
-	88, 91, 66, 66, 66, 66, 70, 66, 
-	94, 66, 66, 66, 66, 66, 66, 66, 
-	66, 66, 69, 70, 71, 72, 73, 66, 
-	66, 76, 66, 66, 66, 79, 80, 81, 
-	66, 82, 83, 84, 66, 66, 66, 66, 
-	66, 86, 87, 88, 91, 66, 66, 66, 
-	66, 70, 66, 94, 66, 66, 66, 66, 
-	66, 66, 66, 66, 66, 69, 70, 71, 
-	72, 73, 66, 66, 66, 66, 66, 66, 
-	79, 80, 81, 66, 82, 83, 84, 66, 
-	66, 66, 66, 66, 86, 87, 88, 91, 
-	66, 66, 66, 66, 70, 66, 94, 66, 
-	66, 66, 66, 66, 66, 66, 66, 66, 
-	69, 70, 71, 72, 73, 74, 75, 76, 
-	66, 66, 66, 79, 80, 81, 66, 82, 
-	83, 84, 66, 66, 66, 66, 66, 86, 
-	87, 88, 91, 66, 66, 66, 66, 70, 
-	66, 67, 68, 66, 66, 66, 66, 66, 
-	66, 66, 66, 66, 69, 70, 71, 72, 
-	73, 74, 75, 76, 77, 66, 78, 79, 
-	80, 81, 66, 82, 83, 84, 66, 66, 
-	66, 66, 85, 86, 87, 88, 89, 66, 
-	66, 66, 66, 90, 66, 67, 95, 67, 
-	66, 66, 66, 66, 66, 66, 66, 66, 
-	66, 66, 66, 66, 66, 66, 66, 66, 
-	66, 66, 66, 66, 66, 70, 71, 72, 
-	73, 66, 66, 66, 66, 66, 66, 66, 
-	66, 66, 66, 82, 83, 84, 66, 66, 
-	66, 66, 66, 86, 87, 88, 91, 66, 
-	97, 96, 3, 98, 99, 100, 66, 66, 
-	66, 66, 66, 66, 66, 66, 66, 101, 
-	102, 103, 104, 105, 106, 107, 108, 109, 
-	110, 111, 112, 113, 114, 66, 115, 116, 
-	117, 66, 56, 57, 66, 118, 119, 120, 
-	88, 121, 66, 66, 66, 66, 122, 66, 
-	99, 100, 66, 66, 66, 66, 66, 66, 
-	66, 66, 66, 101, 102, 103, 104, 105, 
-	106, 107, 108, 109, 111, 111, 112, 113, 
-	114, 66, 115, 116, 117, 66, 66, 66, 
-	66, 118, 119, 120, 88, 121, 66, 66, 
-	66, 66, 122, 66, 99, 66, 66, 66, 
-	66, 66, 66, 66, 66, 66, 66, 66, 
-	66, 66, 66, 66, 66, 66, 66, 66, 
-	66, 66, 102, 103, 104, 105, 66, 66, 
-	66, 66, 66, 66, 66, 66, 66, 66, 
-	115, 116, 117, 66, 66, 66, 66, 66, 
-	119, 120, 88, 123, 66, 66, 66, 66, 
-	102, 66, 102, 103, 104, 105, 66, 66, 
-	66, 66, 66, 66, 66, 66, 66, 66, 
-	115, 116, 117, 66, 66, 66, 66, 66, 
-	119, 120, 88, 123, 66, 103, 104, 105, 
-	66, 66, 66, 66, 66, 66, 66, 66, 
-	66, 66, 66, 66, 66, 66, 66, 66, 
-	66, 66, 119, 120, 88, 66, 104, 105, 
-	66, 66, 66, 66, 66, 66, 66, 66, 
-	66, 66, 66, 66, 66, 66, 66, 66, 
-	66, 66, 119, 120, 88, 66, 105, 66, 
-	66, 66, 66, 66, 66, 66, 66, 66, 
-	66, 66, 66, 66, 66, 66, 66, 66, 
-	66, 119, 120, 88, 66, 119, 120, 66, 
-	120, 66, 103, 104, 105, 66, 66, 66, 
-	66, 66, 66, 66, 66, 66, 66, 115, 
-	116, 117, 66, 66, 66, 66, 66, 119, 
-	120, 88, 123, 66, 103, 104, 105, 66, 
-	66, 66, 66, 66, 66, 66, 66, 66, 
-	66, 66, 116, 117, 66, 66, 66, 66, 
-	66, 119, 120, 88, 123, 66, 103, 104, 
-	105, 66, 66, 66, 66, 66, 66, 66, 
-	66, 66, 66, 66, 66, 117, 66, 66, 
-	66, 66, 66, 119, 120, 88, 123, 66, 
-	124, 92, 103, 104, 105, 66, 66, 66, 
-	66, 66, 66, 66, 66, 66, 66, 66, 
-	66, 66, 66, 66, 66, 66, 66, 119, 
-	120, 88, 123, 66, 101, 102, 103, 104, 
-	105, 66, 66, 66, 66, 66, 66, 112, 
-	113, 114, 66, 115, 116, 117, 66, 66, 
-	66, 66, 66, 119, 120, 88, 123, 66, 
-	66, 66, 66, 102, 66, 102, 103, 104, 
-	105, 66, 66, 66, 66, 66, 66, 112, 
-	113, 114, 66, 115, 116, 117, 66, 66, 
-	66, 66, 66, 119, 120, 88, 123, 66, 
-	66, 66, 66, 102, 66, 102, 103, 104, 
-	105, 66, 66, 66, 66, 66, 66, 66, 
-	113, 114, 66, 115, 116, 117, 66, 66, 
-	66, 66, 66, 119, 120, 88, 123, 66, 
-	66, 66, 66, 102, 66, 102, 103, 104, 
-	105, 66, 66, 66, 66, 66, 66, 66, 
-	66, 114, 66, 115, 116, 117, 66, 66, 
-	66, 66, 66, 119, 120, 88, 123, 66, 
-	66, 66, 66, 102, 66, 125, 66, 66, 
-	66, 66, 66, 66, 66, 66, 66, 101, 
-	102, 103, 104, 105, 66, 107, 108, 66, 
-	66, 66, 112, 113, 114, 66, 115, 116, 
-	117, 66, 66, 66, 66, 66, 119, 120, 
-	88, 123, 66, 66, 66, 66, 102, 66, 
-	102, 103, 104, 105, 66, 66, 66, 66, 
-	66, 66, 66, 66, 66, 66, 115, 116, 
-	117, 66, 66, 66, 66, 66, 119, 120, 
-	88, 123, 66, 66, 66, 66, 102, 66, 
-	125, 66, 66, 66, 66, 66, 66, 66, 
-	66, 66, 101, 102, 103, 104, 105, 66, 
-	66, 108, 66, 66, 66, 112, 113, 114, 
-	66, 115, 116, 117, 66, 66, 66, 66, 
-	66, 119, 120, 88, 123, 66, 66, 66, 
-	66, 102, 66, 125, 66, 66, 66, 66, 
-	66, 66, 66, 66, 66, 101, 102, 103, 
-	104, 105, 66, 66, 66, 66, 66, 66, 
-	112, 113, 114, 66, 115, 116, 117, 66, 
-	66, 66, 66, 66, 119, 120, 88, 123, 
-	66, 66, 66, 66, 102, 66, 125, 66, 
-	66, 66, 66, 66, 66, 66, 66, 66, 
-	101, 102, 103, 104, 105, 106, 107, 108, 
-	66, 66, 66, 112, 113, 114, 66, 115, 
-	116, 117, 66, 66, 66, 66, 66, 119, 
-	120, 88, 123, 66, 66, 66, 66, 102, 
-	66, 99, 100, 66, 66, 66, 66, 66, 
-	66, 66, 66, 66, 101, 102, 103, 104, 
-	105, 106, 107, 108, 109, 66, 111, 112, 
-	113, 114, 66, 115, 116, 117, 66, 66, 
-	66, 66, 118, 119, 120, 88, 121, 66, 
-	66, 66, 66, 122, 66, 99, 95, 99, 
-	66, 66, 66, 66, 66, 66, 66, 66, 
-	66, 66, 66, 66, 66, 66, 66, 66, 
-	66, 66, 66, 66, 66, 102, 103, 104, 
-	105, 66, 66, 66, 66, 66, 66, 66, 
-	66, 66, 66, 115, 116, 117, 66, 66, 
-	66, 66, 66, 119, 120, 88, 123, 66, 
-	99, 100, 66, 66, 66, 66, 66, 66, 
-	66, 66, 66, 101, 102, 103, 104, 105, 
-	106, 107, 108, 109, 110, 111, 112, 113, 
-	114, 66, 115, 116, 117, 66, 66, 66, 
-	66, 118, 119, 120, 88, 121, 66, 66, 
-	66, 66, 122, 66, 5, 6, 126, 126, 
-	126, 126, 126, 126, 126, 126, 126, 9, 
-	10, 11, 12, 13, 14, 15, 16, 17, 
-	19, 19, 20, 21, 22, 126, 23, 24, 
-	25, 126, 126, 126, 126, 29, 30, 31, 
-	32, 29, 126, 126, 126, 126, 35, 126, 
-	5, 126, 126, 126, 126, 126, 126, 126, 
-	126, 126, 126, 126, 126, 126, 126, 126, 
-	126, 126, 126, 126, 126, 126, 10, 11, 
-	12, 13, 126, 126, 126, 126, 126, 126, 
-	126, 126, 126, 126, 23, 24, 25, 126, 
-	126, 126, 126, 126, 30, 31, 32, 127, 
-	126, 126, 126, 126, 10, 126, 10, 11, 
-	12, 13, 126, 126, 126, 126, 126, 126, 
-	126, 126, 126, 126, 23, 24, 25, 126, 
-	126, 126, 126, 126, 30, 31, 32, 127, 
-	126, 11, 12, 13, 126, 126, 126, 126, 
-	126, 126, 126, 126, 126, 126, 126, 126, 
-	126, 126, 126, 126, 126, 126, 30, 31, 
-	32, 126, 12, 13, 126, 126, 126, 126, 
-	126, 126, 126, 126, 126, 126, 126, 126, 
-	126, 126, 126, 126, 126, 126, 30, 31, 
-	32, 126, 13, 126, 126, 126, 126, 126, 
-	126, 126, 126, 126, 126, 126, 126, 126, 
-	126, 126, 126, 126, 126, 30, 31, 32, 
-	126, 30, 31, 126, 31, 126, 11, 12, 
-	13, 126, 126, 126, 126, 126, 126, 126, 
-	126, 126, 126, 23, 24, 25, 126, 126, 
-	126, 126, 126, 30, 31, 32, 127, 126, 
-	11, 12, 13, 126, 126, 126, 126, 126, 
-	126, 126, 126, 126, 126, 126, 24, 25, 
-	126, 126, 126, 126, 126, 30, 31, 32, 
-	127, 126, 11, 12, 13, 126, 126, 126, 
-	126, 126, 126, 126, 126, 126, 126, 126, 
-	126, 25, 126, 126, 126, 126, 126, 30, 
-	31, 32, 127, 126, 128, 126, 11, 12, 
-	13, 126, 126, 126, 126, 126, 126, 126, 
-	126, 126, 126, 126, 126, 126, 126, 126, 
-	126, 126, 126, 30, 31, 32, 127, 126, 
-	9, 10, 11, 12, 13, 126, 126, 126, 
-	126, 126, 126, 20, 21, 22, 126, 23, 
-	24, 25, 126, 126, 126, 126, 126, 30, 
-	31, 32, 127, 126, 126, 126, 126, 10, 
-	126, 10, 11, 12, 13, 126, 126, 126, 
-	126, 126, 126, 20, 21, 22, 126, 23, 
-	24, 25, 126, 126, 126, 126, 126, 30, 
-	31, 32, 127, 126, 126, 126, 126, 10, 
-	126, 10, 11, 12, 13, 126, 126, 126, 
-	126, 126, 126, 126, 21, 22, 126, 23, 
-	24, 25, 126, 126, 126, 126, 126, 30, 
-	31, 32, 127, 126, 126, 126, 126, 10, 
-	126, 10, 11, 12, 13, 126, 126, 126, 
-	126, 126, 126, 126, 126, 22, 126, 23, 
-	24, 25, 126, 126, 126, 126, 126, 30, 
-	31, 32, 127, 126, 126, 126, 126, 10, 
-	126, 129, 126, 126, 126, 126, 126, 126, 
-	126, 126, 126, 9, 10, 11, 12, 13, 
-	126, 15, 16, 126, 126, 126, 20, 21, 
-	22, 126, 23, 24, 25, 126, 126, 126, 
-	126, 126, 30, 31, 32, 127, 126, 126, 
-	126, 126, 10, 126, 10, 11, 12, 13, 
-	126, 126, 126, 126, 126, 126, 126, 126, 
-	126, 126, 23, 24, 25, 126, 126, 126, 
-	126, 126, 30, 31, 32, 127, 126, 126, 
-	126, 126, 10, 126, 129, 126, 126, 126, 
-	126, 126, 126, 126, 126, 126, 9, 10, 
-	11, 12, 13, 126, 126, 16, 126, 126, 
-	126, 20, 21, 22, 126, 23, 24, 25, 
-	126, 126, 126, 126, 126, 30, 31, 32, 
-	127, 126, 126, 126, 126, 10, 126, 129, 
-	126, 126, 126, 126, 126, 126, 126, 126, 
-	126, 9, 10, 11, 12, 13, 126, 126, 
-	126, 126, 126, 126, 20, 21, 22, 126, 
-	23, 24, 25, 126, 126, 126, 126, 126, 
-	30, 31, 32, 127, 126, 126, 126, 126, 
-	10, 126, 129, 126, 126, 126, 126, 126, 
-	126, 126, 126, 126, 9, 10, 11, 12, 
-	13, 14, 15, 16, 126, 126, 126, 20, 
-	21, 22, 126, 23, 24, 25, 126, 126, 
-	126, 126, 126, 30, 31, 32, 127, 126, 
-	126, 126, 126, 10, 126, 5, 6, 126, 
-	126, 126, 126, 126, 126, 126, 126, 126, 
-	9, 10, 11, 12, 13, 14, 15, 16, 
-	17, 126, 19, 20, 21, 22, 126, 23, 
-	24, 25, 126, 126, 126, 126, 29, 30, 
-	31, 32, 29, 126, 126, 126, 126, 35, 
-	126, 5, 126, 5, 126, 126, 126, 126, 
-	126, 126, 126, 126, 126, 126, 126, 126, 
-	126, 126, 126, 126, 126, 126, 126, 126, 
-	126, 10, 11, 12, 13, 126, 126, 126, 
-	126, 126, 126, 126, 126, 126, 126, 23, 
-	24, 25, 126, 126, 126, 126, 126, 30, 
-	31, 32, 127, 126, 130, 126, 7, 126, 
-	1, 126, 126, 126, 1, 126, 126, 126, 
-	126, 126, 5, 6, 7, 126, 126, 126, 
-	126, 126, 126, 126, 126, 9, 10, 11, 
+	2, 2, 2, 5, 6, 7, 8, 2, 
+	2, 2, 9, 2, 2, 2, 10, 11, 
 	12, 13, 14, 15, 16, 17, 18, 19, 
-	20, 21, 22, 126, 23, 24, 25, 126, 
-	26, 27, 126, 29, 30, 31, 32, 29, 
-	126, 126, 126, 126, 35, 126, 5, 6, 
-	126, 126, 126, 126, 126, 126, 126, 126, 
-	126, 9, 10, 11, 12, 13, 14, 15, 
-	16, 17, 18, 19, 20, 21, 22, 126, 
-	23, 24, 25, 126, 126, 126, 126, 29, 
-	30, 31, 32, 29, 126, 126, 126, 126, 
-	35, 126, 26, 27, 126, 27, 126, 1, 
-	131, 131, 131, 1, 131, 133, 132, 33, 
-	132, 33, 133, 132, 133, 132, 33, 132, 
-	34, 132, 0
+	20, 21, 22, 23, 2, 24, 25, 26, 
+	2, 27, 28, 29, 30, 31, 32, 33, 
+	30, 34, 2, 35, 2, 36, 2, 38, 
+	39, 37, 40, 37, 37, 37, 37, 37, 
+	37, 37, 41, 42, 43, 44, 45, 46, 
+	47, 48, 49, 50, 51, 52, 53, 54, 
+	37, 55, 56, 57, 37, 58, 59, 37, 
+	60, 61, 62, 63, 60, 37, 37, 37, 
+	37, 64, 37, 38, 39, 37, 40, 37, 
+	37, 37, 37, 37, 37, 37, 41, 42, 
+	43, 44, 45, 46, 47, 48, 49, 51, 
+	51, 52, 53, 54, 37, 55, 56, 57, 
+	37, 37, 37, 37, 60, 61, 62, 63, 
+	60, 37, 37, 37, 37, 64, 37, 38, 
+	37, 37, 37, 37, 37, 37, 37, 37, 
+	37, 37, 37, 37, 40, 37, 37, 37, 
+	37, 37, 37, 37, 37, 42, 43, 44, 
+	45, 37, 37, 37, 37, 37, 37, 37, 
+	37, 37, 37, 55, 56, 57, 37, 37, 
+	37, 37, 37, 61, 62, 63, 65, 37, 
+	37, 37, 37, 42, 37, 40, 37, 37, 
+	37, 37, 37, 37, 37, 37, 42, 43, 
+	44, 45, 37, 37, 37, 37, 37, 37, 
+	37, 37, 37, 37, 55, 56, 57, 37, 
+	37, 37, 37, 37, 61, 62, 63, 65, 
+	37, 40, 37, 37, 37, 37, 37, 37, 
+	37, 37, 37, 43, 44, 45, 37, 37, 
+	37, 37, 37, 37, 37, 37, 37, 37, 
+	37, 37, 37, 37, 37, 37, 37, 37, 
+	61, 62, 63, 37, 40, 37, 37, 37, 
+	37, 37, 37, 37, 37, 37, 37, 44, 
+	45, 37, 37, 37, 37, 37, 37, 37, 
+	37, 37, 37, 37, 37, 37, 37, 37, 
+	37, 37, 37, 61, 62, 63, 37, 40, 
+	37, 37, 37, 37, 37, 37, 37, 37, 
+	37, 37, 37, 45, 37, 37, 37, 37, 
+	37, 37, 37, 37, 37, 37, 37, 37, 
+	37, 37, 37, 37, 37, 37, 61, 62, 
+	63, 37, 40, 37, 37, 37, 37, 37, 
+	37, 37, 37, 37, 37, 37, 37, 37, 
+	37, 37, 37, 37, 37, 37, 37, 37, 
+	37, 37, 37, 37, 37, 37, 37, 37, 
+	37, 61, 62, 37, 40, 37, 37, 37, 
+	37, 37, 37, 37, 37, 37, 37, 37, 
+	37, 37, 37, 37, 37, 37, 37, 37, 
+	37, 37, 37, 37, 37, 37, 37, 37, 
+	37, 37, 37, 37, 62, 37, 40, 37, 
+	40, 37, 37, 37, 37, 37, 37, 37, 
+	37, 37, 43, 44, 45, 37, 37, 37, 
+	37, 37, 37, 37, 37, 37, 37, 55, 
+	56, 57, 37, 37, 37, 37, 37, 61, 
+	62, 63, 65, 37, 40, 37, 37, 37, 
+	37, 37, 37, 37, 37, 37, 43, 44, 
+	45, 37, 37, 37, 37, 37, 37, 37, 
+	37, 37, 37, 37, 56, 57, 37, 37, 
+	37, 37, 37, 61, 62, 63, 65, 37, 
+	40, 37, 37, 37, 37, 37, 37, 37, 
+	37, 37, 43, 44, 45, 37, 37, 37, 
+	37, 37, 37, 37, 37, 37, 37, 37, 
+	37, 57, 37, 37, 37, 37, 37, 61, 
+	62, 63, 65, 37, 66, 37, 37, 37, 
+	37, 37, 37, 37, 37, 37, 37, 37, 
+	37, 40, 37, 40, 37, 37, 37, 37, 
+	37, 37, 37, 37, 37, 43, 44, 45, 
+	37, 37, 37, 37, 37, 37, 37, 37, 
+	37, 37, 37, 37, 37, 37, 37, 37, 
+	37, 37, 61, 62, 63, 65, 37, 40, 
+	37, 37, 37, 37, 37, 37, 37, 41, 
+	42, 43, 44, 45, 37, 37, 37, 37, 
+	37, 37, 52, 53, 54, 37, 55, 56, 
+	57, 37, 37, 37, 37, 37, 61, 62, 
+	63, 65, 37, 37, 37, 37, 42, 37, 
+	40, 37, 37, 37, 37, 37, 37, 37, 
+	37, 42, 43, 44, 45, 37, 37, 37, 
+	37, 37, 37, 52, 53, 54, 37, 55, 
+	56, 57, 37, 37, 37, 37, 37, 61, 
+	62, 63, 65, 37, 37, 37, 37, 42, 
+	37, 40, 37, 37, 37, 37, 37, 37, 
+	37, 37, 42, 43, 44, 45, 37, 37, 
+	37, 37, 37, 37, 37, 53, 54, 37, 
+	55, 56, 57, 37, 37, 37, 37, 37, 
+	61, 62, 63, 65, 37, 37, 37, 37, 
+	42, 37, 40, 37, 37, 37, 37, 37, 
+	37, 37, 37, 42, 43, 44, 45, 37, 
+	37, 37, 37, 37, 37, 37, 37, 54, 
+	37, 55, 56, 57, 37, 37, 37, 37, 
+	37, 61, 62, 63, 65, 37, 37, 37, 
+	37, 42, 37, 67, 37, 40, 37, 37, 
+	37, 37, 37, 37, 37, 41, 42, 43, 
+	44, 45, 37, 47, 48, 37, 37, 37, 
+	52, 53, 54, 37, 55, 56, 57, 37, 
+	37, 37, 37, 37, 61, 62, 63, 65, 
+	37, 37, 37, 37, 42, 37, 40, 37, 
+	37, 37, 37, 37, 37, 37, 37, 42, 
+	43, 44, 45, 37, 37, 37, 37, 37, 
+	37, 37, 37, 37, 37, 55, 56, 57, 
+	37, 37, 37, 37, 37, 61, 62, 63, 
+	65, 37, 37, 37, 37, 42, 37, 67, 
+	37, 40, 37, 37, 37, 37, 37, 37, 
+	37, 41, 42, 43, 44, 45, 37, 37, 
+	48, 37, 37, 37, 52, 53, 54, 37, 
+	55, 56, 57, 37, 37, 37, 37, 37, 
+	61, 62, 63, 65, 37, 37, 37, 37, 
+	42, 37, 67, 37, 40, 37, 37, 37, 
+	37, 37, 37, 37, 41, 42, 43, 44, 
+	45, 37, 37, 37, 37, 37, 37, 52, 
+	53, 54, 37, 55, 56, 57, 37, 37, 
+	37, 37, 37, 61, 62, 63, 65, 37, 
+	37, 37, 37, 42, 37, 67, 37, 40, 
+	37, 37, 37, 37, 37, 37, 37, 41, 
+	42, 43, 44, 45, 46, 47, 48, 37, 
+	37, 37, 52, 53, 54, 37, 55, 56, 
+	57, 37, 37, 37, 37, 37, 61, 62, 
+	63, 65, 37, 37, 37, 37, 42, 37, 
+	38, 39, 37, 40, 37, 37, 37, 37, 
+	37, 37, 37, 41, 42, 43, 44, 45, 
+	46, 47, 48, 49, 37, 51, 52, 53, 
+	54, 37, 55, 56, 57, 37, 37, 37, 
+	37, 60, 61, 62, 63, 60, 37, 37, 
+	37, 37, 64, 37, 38, 37, 37, 37, 
+	37, 37, 37, 37, 37, 37, 37, 37, 
+	37, 40, 37, 38, 37, 37, 37, 37, 
+	37, 37, 37, 37, 37, 37, 37, 37, 
+	40, 37, 37, 37, 37, 37, 37, 37, 
+	37, 42, 43, 44, 45, 37, 37, 37, 
+	37, 37, 37, 37, 37, 37, 37, 55, 
+	56, 57, 37, 37, 37, 37, 37, 61, 
+	62, 63, 65, 37, 38, 39, 37, 40, 
+	37, 37, 37, 37, 37, 37, 37, 41, 
+	42, 43, 44, 45, 46, 47, 48, 49, 
+	50, 51, 52, 53, 54, 37, 55, 56, 
+	57, 37, 37, 37, 37, 60, 61, 62, 
+	63, 60, 37, 37, 37, 37, 64, 37, 
+	40, 37, 37, 37, 37, 37, 37, 37, 
+	37, 37, 37, 37, 37, 37, 37, 37, 
+	37, 37, 37, 37, 37, 37, 37, 37, 
+	37, 37, 37, 58, 59, 37, 40, 37, 
+	37, 37, 37, 37, 37, 37, 37, 37, 
+	37, 37, 37, 37, 37, 37, 37, 37, 
+	37, 37, 37, 37, 37, 37, 37, 37, 
+	37, 37, 59, 37, 69, 70, 68, 71, 
+	68, 68, 68, 68, 68, 68, 68, 72, 
+	73, 74, 75, 76, 77, 78, 79, 80, 
+	1, 81, 82, 83, 84, 68, 85, 86, 
+	87, 68, 68, 68, 68, 88, 89, 90, 
+	91, 92, 68, 68, 68, 68, 93, 68, 
+	69, 70, 68, 71, 68, 68, 68, 68, 
+	68, 68, 68, 72, 73, 74, 75, 76, 
+	77, 78, 79, 80, 81, 81, 82, 83, 
+	84, 68, 85, 86, 87, 68, 68, 68, 
+	68, 88, 89, 90, 91, 92, 68, 68, 
+	68, 68, 93, 68, 69, 68, 68, 68, 
+	68, 68, 68, 68, 68, 68, 68, 68, 
+	68, 71, 68, 68, 68, 68, 68, 68, 
+	68, 68, 73, 74, 75, 76, 68, 68, 
+	68, 68, 68, 68, 68, 68, 68, 68, 
+	85, 86, 87, 68, 68, 68, 68, 68, 
+	89, 90, 91, 94, 68, 68, 68, 68, 
+	73, 68, 71, 68, 68, 68, 68, 68, 
+	68, 68, 68, 73, 74, 75, 76, 68, 
+	68, 68, 68, 68, 68, 68, 68, 68, 
+	68, 85, 86, 87, 68, 68, 68, 68, 
+	68, 89, 90, 91, 94, 68, 71, 68, 
+	68, 68, 68, 68, 68, 68, 68, 68, 
+	74, 75, 76, 68, 68, 68, 68, 68, 
+	68, 68, 68, 68, 68, 68, 68, 68, 
+	68, 68, 68, 68, 68, 89, 90, 91, 
+	68, 71, 68, 68, 68, 68, 68, 68, 
+	68, 68, 68, 68, 75, 76, 68, 68, 
+	68, 68, 68, 68, 68, 68, 68, 68, 
+	68, 68, 68, 68, 68, 68, 68, 68, 
+	89, 90, 91, 68, 71, 68, 68, 68, 
+	68, 68, 68, 68, 68, 68, 68, 68, 
+	76, 68, 68, 68, 68, 68, 68, 68, 
+	68, 68, 68, 68, 68, 68, 68, 68, 
+	68, 68, 68, 89, 90, 91, 68, 71, 
+	68, 68, 68, 68, 68, 68, 68, 68, 
+	68, 68, 68, 68, 68, 68, 68, 68, 
+	68, 68, 68, 68, 68, 68, 68, 68, 
+	68, 68, 68, 68, 68, 68, 89, 90, 
+	68, 71, 68, 68, 68, 68, 68, 68, 
+	68, 68, 68, 68, 68, 68, 68, 68, 
+	68, 68, 68, 68, 68, 68, 68, 68, 
+	68, 68, 68, 68, 68, 68, 68, 68, 
+	68, 90, 68, 71, 68, 71, 68, 68, 
+	68, 68, 68, 68, 68, 68, 68, 74, 
+	75, 76, 68, 68, 68, 68, 68, 68, 
+	68, 68, 68, 68, 85, 86, 87, 68, 
+	68, 68, 68, 68, 89, 90, 91, 94, 
+	68, 71, 68, 68, 68, 68, 68, 68, 
+	68, 68, 68, 74, 75, 76, 68, 68, 
+	68, 68, 68, 68, 68, 68, 68, 68, 
+	68, 86, 87, 68, 68, 68, 68, 68, 
+	89, 90, 91, 94, 68, 71, 68, 68, 
+	68, 68, 68, 68, 68, 68, 68, 74, 
+	75, 76, 68, 68, 68, 68, 68, 68, 
+	68, 68, 68, 68, 68, 68, 87, 68, 
+	68, 68, 68, 68, 89, 90, 91, 94, 
+	68, 96, 95, 95, 95, 95, 95, 95, 
+	95, 95, 95, 95, 95, 95, 97, 95, 
+	71, 68, 68, 68, 68, 68, 68, 68, 
+	68, 68, 74, 75, 76, 68, 68, 68, 
+	68, 68, 68, 68, 68, 68, 68, 68, 
+	68, 68, 68, 68, 68, 68, 68, 89, 
+	90, 91, 94, 68, 71, 68, 68, 68, 
+	68, 68, 68, 68, 72, 73, 74, 75, 
+	76, 68, 68, 68, 68, 68, 68, 82, 
+	83, 84, 68, 85, 86, 87, 68, 68, 
+	68, 68, 68, 89, 90, 91, 94, 68, 
+	68, 68, 68, 73, 68, 71, 68, 68, 
+	68, 68, 68, 68, 68, 68, 73, 74, 
+	75, 76, 68, 68, 68, 68, 68, 68, 
+	82, 83, 84, 68, 85, 86, 87, 68, 
+	68, 68, 68, 68, 89, 90, 91, 94, 
+	68, 68, 68, 68, 73, 68, 71, 68, 
+	68, 68, 68, 68, 68, 68, 68, 73, 
+	74, 75, 76, 68, 68, 68, 68, 68, 
+	68, 68, 83, 84, 68, 85, 86, 87, 
+	68, 68, 68, 68, 68, 89, 90, 91, 
+	94, 68, 68, 68, 68, 73, 68, 71, 
+	68, 68, 68, 68, 68, 68, 68, 68, 
+	73, 74, 75, 76, 68, 68, 68, 68, 
+	68, 68, 68, 68, 84, 68, 85, 86, 
+	87, 68, 68, 68, 68, 68, 89, 90, 
+	91, 94, 68, 68, 68, 68, 73, 68, 
+	98, 68, 71, 68, 68, 68, 68, 68, 
+	68, 68, 72, 73, 74, 75, 76, 68, 
+	78, 79, 68, 68, 68, 82, 83, 84, 
+	68, 85, 86, 87, 68, 68, 68, 68, 
+	68, 89, 90, 91, 94, 68, 68, 68, 
+	68, 73, 68, 71, 68, 68, 68, 68, 
+	68, 68, 68, 68, 73, 74, 75, 76, 
+	68, 68, 68, 68, 68, 68, 68, 68, 
+	68, 68, 85, 86, 87, 68, 68, 68, 
+	68, 68, 89, 90, 91, 94, 68, 68, 
+	68, 68, 73, 68, 98, 68, 71, 68, 
+	68, 68, 68, 68, 68, 68, 72, 73, 
+	74, 75, 76, 68, 68, 79, 68, 68, 
+	68, 82, 83, 84, 68, 85, 86, 87, 
+	68, 68, 68, 68, 68, 89, 90, 91, 
+	94, 68, 68, 68, 68, 73, 68, 98, 
+	68, 71, 68, 68, 68, 68, 68, 68, 
+	68, 72, 73, 74, 75, 76, 68, 68, 
+	68, 68, 68, 68, 82, 83, 84, 68, 
+	85, 86, 87, 68, 68, 68, 68, 68, 
+	89, 90, 91, 94, 68, 68, 68, 68, 
+	73, 68, 98, 68, 71, 68, 68, 68, 
+	68, 68, 68, 68, 72, 73, 74, 75, 
+	76, 77, 78, 79, 68, 68, 68, 82, 
+	83, 84, 68, 85, 86, 87, 68, 68, 
+	68, 68, 68, 89, 90, 91, 94, 68, 
+	68, 68, 68, 73, 68, 69, 70, 68, 
+	71, 68, 68, 68, 68, 68, 68, 68, 
+	72, 73, 74, 75, 76, 77, 78, 79, 
+	80, 68, 81, 82, 83, 84, 68, 85, 
+	86, 87, 68, 68, 68, 68, 88, 89, 
+	90, 91, 92, 68, 68, 68, 68, 93, 
+	68, 69, 99, 99, 99, 99, 99, 99, 
+	99, 99, 99, 99, 99, 99, 100, 99, 
+	69, 95, 95, 95, 95, 95, 95, 95, 
+	95, 95, 95, 95, 95, 97, 95, 69, 
+	68, 68, 68, 68, 68, 68, 68, 68, 
+	68, 68, 68, 68, 71, 68, 68, 68, 
+	68, 68, 68, 68, 68, 73, 74, 75, 
+	76, 68, 68, 68, 68, 68, 68, 68, 
+	68, 68, 68, 85, 86, 87, 68, 68, 
+	68, 68, 68, 89, 90, 91, 94, 68, 
+	102, 103, 101, 3, 104, 104, 104, 104, 
+	104, 104, 104, 104, 104, 105, 104, 106, 
+	107, 68, 71, 68, 68, 68, 68, 68, 
+	68, 68, 108, 109, 110, 111, 112, 113, 
+	114, 115, 116, 117, 118, 119, 120, 121, 
+	68, 122, 123, 124, 68, 58, 59, 68, 
+	125, 126, 127, 128, 129, 68, 68, 68, 
+	68, 130, 68, 106, 107, 68, 71, 68, 
+	68, 68, 68, 68, 68, 68, 108, 109, 
+	110, 111, 112, 113, 114, 115, 116, 118, 
+	118, 119, 120, 121, 68, 122, 123, 124, 
+	68, 68, 68, 68, 125, 126, 127, 128, 
+	129, 68, 68, 68, 68, 130, 68, 106, 
+	68, 68, 68, 68, 68, 68, 68, 68, 
+	68, 68, 68, 68, 71, 68, 68, 68, 
+	68, 68, 68, 68, 68, 109, 110, 111, 
+	112, 68, 68, 68, 68, 68, 68, 68, 
+	68, 68, 68, 122, 123, 124, 68, 68, 
+	68, 68, 68, 126, 127, 128, 131, 68, 
+	68, 68, 68, 109, 68, 71, 68, 68, 
+	68, 68, 68, 68, 68, 68, 109, 110, 
+	111, 112, 68, 68, 68, 68, 68, 68, 
+	68, 68, 68, 68, 122, 123, 124, 68, 
+	68, 68, 68, 68, 126, 127, 128, 131, 
+	68, 71, 68, 68, 68, 68, 68, 68, 
+	68, 68, 68, 110, 111, 112, 68, 68, 
+	68, 68, 68, 68, 68, 68, 68, 68, 
+	68, 68, 68, 68, 68, 68, 68, 68, 
+	126, 127, 128, 68, 71, 68, 68, 68, 
+	68, 68, 68, 68, 68, 68, 68, 111, 
+	112, 68, 68, 68, 68, 68, 68, 68, 
+	68, 68, 68, 68, 68, 68, 68, 68, 
+	68, 68, 68, 126, 127, 128, 68, 71, 
+	68, 68, 68, 68, 68, 68, 68, 68, 
+	68, 68, 68, 112, 68, 68, 68, 68, 
+	68, 68, 68, 68, 68, 68, 68, 68, 
+	68, 68, 68, 68, 68, 68, 126, 127, 
+	128, 68, 71, 68, 68, 68, 68, 68, 
+	68, 68, 68, 68, 68, 68, 68, 68, 
+	68, 68, 68, 68, 68, 68, 68, 68, 
+	68, 68, 68, 68, 68, 68, 68, 68, 
+	68, 126, 127, 68, 71, 68, 68, 68, 
+	68, 68, 68, 68, 68, 68, 68, 68, 
+	68, 68, 68, 68, 68, 68, 68, 68, 
+	68, 68, 68, 68, 68, 68, 68, 68, 
+	68, 68, 68, 68, 127, 68, 71, 68, 
+	71, 68, 68, 68, 68, 68, 68, 68, 
+	68, 68, 110, 111, 112, 68, 68, 68, 
+	68, 68, 68, 68, 68, 68, 68, 122, 
+	123, 124, 68, 68, 68, 68, 68, 126, 
+	127, 128, 131, 68, 71, 68, 68, 68, 
+	68, 68, 68, 68, 68, 68, 110, 111, 
+	112, 68, 68, 68, 68, 68, 68, 68, 
+	68, 68, 68, 68, 123, 124, 68, 68, 
+	68, 68, 68, 126, 127, 128, 131, 68, 
+	71, 68, 68, 68, 68, 68, 68, 68, 
+	68, 68, 110, 111, 112, 68, 68, 68, 
+	68, 68, 68, 68, 68, 68, 68, 68, 
+	68, 124, 68, 68, 68, 68, 68, 126, 
+	127, 128, 131, 68, 132, 95, 95, 95, 
+	95, 95, 95, 95, 95, 95, 95, 95, 
+	95, 97, 95, 71, 68, 68, 68, 68, 
+	68, 68, 68, 68, 68, 110, 111, 112, 
+	68, 68, 68, 68, 68, 68, 68, 68, 
+	68, 68, 68, 68, 68, 68, 68, 68, 
+	68, 68, 126, 127, 128, 131, 68, 71, 
+	68, 68, 68, 68, 68, 68, 68, 108, 
+	109, 110, 111, 112, 68, 68, 68, 68, 
+	68, 68, 119, 120, 121, 68, 122, 123, 
+	124, 68, 68, 68, 68, 68, 126, 127, 
+	128, 131, 68, 68, 68, 68, 109, 68, 
+	71, 68, 68, 68, 68, 68, 68, 68, 
+	68, 109, 110, 111, 112, 68, 68, 68, 
+	68, 68, 68, 119, 120, 121, 68, 122, 
+	123, 124, 68, 68, 68, 68, 68, 126, 
+	127, 128, 131, 68, 68, 68, 68, 109, 
+	68, 71, 68, 68, 68, 68, 68, 68, 
+	68, 68, 109, 110, 111, 112, 68, 68, 
+	68, 68, 68, 68, 68, 120, 121, 68, 
+	122, 123, 124, 68, 68, 68, 68, 68, 
+	126, 127, 128, 131, 68, 68, 68, 68, 
+	109, 68, 71, 68, 68, 68, 68, 68, 
+	68, 68, 68, 109, 110, 111, 112, 68, 
+	68, 68, 68, 68, 68, 68, 68, 121, 
+	68, 122, 123, 124, 68, 68, 68, 68, 
+	68, 126, 127, 128, 131, 68, 68, 68, 
+	68, 109, 68, 133, 68, 71, 68, 68, 
+	68, 68, 68, 68, 68, 108, 109, 110, 
+	111, 112, 68, 114, 115, 68, 68, 68, 
+	119, 120, 121, 68, 122, 123, 124, 68, 
+	68, 68, 68, 68, 126, 127, 128, 131, 
+	68, 68, 68, 68, 109, 68, 71, 68, 
+	68, 68, 68, 68, 68, 68, 68, 109, 
+	110, 111, 112, 68, 68, 68, 68, 68, 
+	68, 68, 68, 68, 68, 122, 123, 124, 
+	68, 68, 68, 68, 68, 126, 127, 128, 
+	131, 68, 68, 68, 68, 109, 68, 133, 
+	68, 71, 68, 68, 68, 68, 68, 68, 
+	68, 108, 109, 110, 111, 112, 68, 68, 
+	115, 68, 68, 68, 119, 120, 121, 68, 
+	122, 123, 124, 68, 68, 68, 68, 68, 
+	126, 127, 128, 131, 68, 68, 68, 68, 
+	109, 68, 133, 68, 71, 68, 68, 68, 
+	68, 68, 68, 68, 108, 109, 110, 111, 
+	112, 68, 68, 68, 68, 68, 68, 119, 
+	120, 121, 68, 122, 123, 124, 68, 68, 
+	68, 68, 68, 126, 127, 128, 131, 68, 
+	68, 68, 68, 109, 68, 133, 68, 71, 
+	68, 68, 68, 68, 68, 68, 68, 108, 
+	109, 110, 111, 112, 113, 114, 115, 68, 
+	68, 68, 119, 120, 121, 68, 122, 123, 
+	124, 68, 68, 68, 68, 68, 126, 127, 
+	128, 131, 68, 68, 68, 68, 109, 68, 
+	106, 107, 68, 71, 68, 68, 68, 68, 
+	68, 68, 68, 108, 109, 110, 111, 112, 
+	113, 114, 115, 116, 68, 118, 119, 120, 
+	121, 68, 122, 123, 124, 68, 68, 68, 
+	68, 125, 126, 127, 128, 129, 68, 68, 
+	68, 68, 130, 68, 106, 99, 99, 99, 
+	99, 99, 99, 99, 99, 99, 99, 99, 
+	99, 100, 99, 106, 95, 95, 95, 95, 
+	95, 95, 95, 95, 95, 95, 95, 95, 
+	97, 95, 106, 68, 68, 68, 68, 68, 
+	68, 68, 68, 68, 68, 68, 68, 71, 
+	68, 68, 68, 68, 68, 68, 68, 68, 
+	109, 110, 111, 112, 68, 68, 68, 68, 
+	68, 68, 68, 68, 68, 68, 122, 123, 
+	124, 68, 68, 68, 68, 68, 126, 127, 
+	128, 131, 68, 106, 107, 68, 71, 68, 
+	68, 68, 68, 68, 68, 68, 108, 109, 
+	110, 111, 112, 113, 114, 115, 116, 117, 
+	118, 119, 120, 121, 68, 122, 123, 124, 
+	68, 68, 68, 68, 125, 126, 127, 128, 
+	129, 68, 68, 68, 68, 130, 68, 5, 
+	6, 134, 8, 134, 134, 134, 134, 134, 
+	134, 134, 10, 11, 12, 13, 14, 15, 
+	16, 17, 18, 20, 20, 21, 22, 23, 
+	134, 24, 25, 26, 134, 134, 134, 134, 
+	30, 31, 32, 33, 30, 134, 134, 134, 
+	134, 36, 134, 5, 134, 134, 134, 134, 
+	134, 134, 134, 134, 134, 134, 134, 134, 
+	8, 134, 134, 134, 134, 134, 134, 134, 
+	134, 11, 12, 13, 14, 134, 134, 134, 
+	134, 134, 134, 134, 134, 134, 134, 24, 
+	25, 26, 134, 134, 134, 134, 134, 31, 
+	32, 33, 135, 134, 134, 134, 134, 11, 
+	134, 8, 134, 134, 134, 134, 134, 134, 
+	134, 134, 11, 12, 13, 14, 134, 134, 
+	134, 134, 134, 134, 134, 134, 134, 134, 
+	24, 25, 26, 134, 134, 134, 134, 134, 
+	31, 32, 33, 135, 134, 8, 134, 134, 
+	134, 134, 134, 134, 134, 134, 134, 12, 
+	13, 14, 134, 134, 134, 134, 134, 134, 
+	134, 134, 134, 134, 134, 134, 134, 134, 
+	134, 134, 134, 134, 31, 32, 33, 134, 
+	8, 134, 134, 134, 134, 134, 134, 134, 
+	134, 134, 134, 13, 14, 134, 134, 134, 
+	134, 134, 134, 134, 134, 134, 134, 134, 
+	134, 134, 134, 134, 134, 134, 134, 31, 
+	32, 33, 134, 8, 134, 134, 134, 134, 
+	134, 134, 134, 134, 134, 134, 134, 14, 
+	134, 134, 134, 134, 134, 134, 134, 134, 
+	134, 134, 134, 134, 134, 134, 134, 134, 
+	134, 134, 31, 32, 33, 134, 8, 134, 
+	134, 134, 134, 134, 134, 134, 134, 134, 
+	134, 134, 134, 134, 134, 134, 134, 134, 
+	134, 134, 134, 134, 134, 134, 134, 134, 
+	134, 134, 134, 134, 134, 31, 32, 134, 
+	8, 134, 134, 134, 134, 134, 134, 134, 
+	134, 134, 134, 134, 134, 134, 134, 134, 
+	134, 134, 134, 134, 134, 134, 134, 134, 
+	134, 134, 134, 134, 134, 134, 134, 134, 
+	32, 134, 8, 134, 8, 134, 134, 134, 
+	134, 134, 134, 134, 134, 134, 12, 13, 
+	14, 134, 134, 134, 134, 134, 134, 134, 
+	134, 134, 134, 24, 25, 26, 134, 134, 
+	134, 134, 134, 31, 32, 33, 135, 134, 
+	8, 134, 134, 134, 134, 134, 134, 134, 
+	134, 134, 12, 13, 14, 134, 134, 134, 
+	134, 134, 134, 134, 134, 134, 134, 134, 
+	25, 26, 134, 134, 134, 134, 134, 31, 
+	32, 33, 135, 134, 8, 134, 134, 134, 
+	134, 134, 134, 134, 134, 134, 12, 13, 
+	14, 134, 134, 134, 134, 134, 134, 134, 
+	134, 134, 134, 134, 134, 26, 134, 134, 
+	134, 134, 134, 31, 32, 33, 135, 134, 
+	136, 134, 134, 134, 134, 134, 134, 134, 
+	134, 134, 134, 134, 134, 8, 134, 8, 
+	134, 134, 134, 134, 134, 134, 134, 134, 
+	134, 12, 13, 14, 134, 134, 134, 134, 
+	134, 134, 134, 134, 134, 134, 134, 134, 
+	134, 134, 134, 134, 134, 134, 31, 32, 
+	33, 135, 134, 8, 134, 134, 134, 134, 
+	134, 134, 134, 10, 11, 12, 13, 14, 
+	134, 134, 134, 134, 134, 134, 21, 22, 
+	23, 134, 24, 25, 26, 134, 134, 134, 
+	134, 134, 31, 32, 33, 135, 134, 134, 
+	134, 134, 11, 134, 8, 134, 134, 134, 
+	134, 134, 134, 134, 134, 11, 12, 13, 
+	14, 134, 134, 134, 134, 134, 134, 21, 
+	22, 23, 134, 24, 25, 26, 134, 134, 
+	134, 134, 134, 31, 32, 33, 135, 134, 
+	134, 134, 134, 11, 134, 8, 134, 134, 
+	134, 134, 134, 134, 134, 134, 11, 12, 
+	13, 14, 134, 134, 134, 134, 134, 134, 
+	134, 22, 23, 134, 24, 25, 26, 134, 
+	134, 134, 134, 134, 31, 32, 33, 135, 
+	134, 134, 134, 134, 11, 134, 8, 134, 
+	134, 134, 134, 134, 134, 134, 134, 11, 
+	12, 13, 14, 134, 134, 134, 134, 134, 
+	134, 134, 134, 23, 134, 24, 25, 26, 
+	134, 134, 134, 134, 134, 31, 32, 33, 
+	135, 134, 134, 134, 134, 11, 134, 137, 
+	134, 8, 134, 134, 134, 134, 134, 134, 
+	134, 10, 11, 12, 13, 14, 134, 16, 
+	17, 134, 134, 134, 21, 22, 23, 134, 
+	24, 25, 26, 134, 134, 134, 134, 134, 
+	31, 32, 33, 135, 134, 134, 134, 134, 
+	11, 134, 8, 134, 134, 134, 134, 134, 
+	134, 134, 134, 11, 12, 13, 14, 134, 
+	134, 134, 134, 134, 134, 134, 134, 134, 
+	134, 24, 25, 26, 134, 134, 134, 134, 
+	134, 31, 32, 33, 135, 134, 134, 134, 
+	134, 11, 134, 137, 134, 8, 134, 134, 
+	134, 134, 134, 134, 134, 10, 11, 12, 
+	13, 14, 134, 134, 17, 134, 134, 134, 
+	21, 22, 23, 134, 24, 25, 26, 134, 
+	134, 134, 134, 134, 31, 32, 33, 135, 
+	134, 134, 134, 134, 11, 134, 137, 134, 
+	8, 134, 134, 134, 134, 134, 134, 134, 
+	10, 11, 12, 13, 14, 134, 134, 134, 
+	134, 134, 134, 21, 22, 23, 134, 24, 
+	25, 26, 134, 134, 134, 134, 134, 31, 
+	32, 33, 135, 134, 134, 134, 134, 11, 
+	134, 137, 134, 8, 134, 134, 134, 134, 
+	134, 134, 134, 10, 11, 12, 13, 14, 
+	15, 16, 17, 134, 134, 134, 21, 22, 
+	23, 134, 24, 25, 26, 134, 134, 134, 
+	134, 134, 31, 32, 33, 135, 134, 134, 
+	134, 134, 11, 134, 5, 6, 134, 8, 
+	134, 134, 134, 134, 134, 134, 134, 10, 
+	11, 12, 13, 14, 15, 16, 17, 18, 
+	134, 20, 21, 22, 23, 134, 24, 25, 
+	26, 134, 134, 134, 134, 30, 31, 32, 
+	33, 30, 134, 134, 134, 134, 36, 134, 
+	5, 134, 134, 134, 134, 134, 134, 134, 
+	134, 134, 134, 134, 134, 8, 134, 5, 
+	134, 134, 134, 134, 134, 134, 134, 134, 
+	134, 134, 134, 134, 8, 134, 134, 134, 
+	134, 134, 134, 134, 134, 11, 12, 13, 
+	14, 134, 134, 134, 134, 134, 134, 134, 
+	134, 134, 134, 24, 25, 26, 134, 134, 
+	134, 134, 134, 31, 32, 33, 135, 134, 
+	138, 134, 134, 134, 134, 134, 134, 134, 
+	134, 134, 8, 134, 7, 8, 134, 1, 
+	134, 134, 134, 1, 134, 134, 134, 134, 
+	134, 5, 6, 7, 8, 134, 134, 134, 
+	134, 134, 134, 134, 10, 11, 12, 13, 
+	14, 15, 16, 17, 18, 19, 20, 21, 
+	22, 23, 134, 24, 25, 26, 134, 27, 
+	28, 134, 30, 31, 32, 33, 30, 134, 
+	134, 134, 134, 36, 134, 5, 6, 134, 
+	8, 134, 134, 134, 134, 134, 134, 134, 
+	10, 11, 12, 13, 14, 15, 16, 17, 
+	18, 19, 20, 21, 22, 23, 134, 24, 
+	25, 26, 134, 134, 134, 134, 30, 31, 
+	32, 33, 30, 134, 134, 134, 134, 36, 
+	134, 8, 134, 134, 134, 134, 134, 134, 
+	134, 134, 134, 134, 134, 134, 134, 134, 
+	134, 134, 134, 134, 134, 134, 134, 134, 
+	134, 134, 134, 134, 27, 28, 134, 8, 
+	134, 134, 134, 134, 134, 134, 134, 134, 
+	134, 134, 134, 134, 134, 134, 134, 134, 
+	134, 134, 134, 134, 134, 134, 134, 134, 
+	134, 134, 134, 28, 134, 1, 139, 139, 
+	139, 1, 139, 141, 140, 140, 140, 140, 
+	140, 140, 140, 140, 140, 140, 140, 140, 
+	140, 140, 140, 140, 140, 140, 140, 140, 
+	140, 140, 140, 140, 140, 140, 140, 140, 
+	140, 140, 140, 140, 140, 140, 140, 142, 
+	140, 34, 140, 141, 140, 140, 140, 140, 
+	140, 140, 140, 140, 140, 140, 140, 140, 
+	140, 140, 140, 140, 140, 140, 140, 140, 
+	140, 140, 140, 140, 140, 140, 140, 140, 
+	140, 140, 140, 140, 140, 140, 34, 142, 
+	140, 142, 140, 141, 140, 140, 140, 140, 
+	140, 140, 140, 140, 140, 140, 140, 140, 
+	140, 140, 140, 140, 140, 140, 140, 140, 
+	140, 140, 140, 140, 140, 140, 140, 140, 
+	140, 140, 140, 140, 140, 140, 34, 140, 
+	35, 140, 0
 };
 
 static const char _use_syllable_machine_trans_targs[] = {
-	1, 30, 0, 56, 58, 85, 86, 110, 
-	112, 98, 87, 88, 89, 90, 102, 104, 
-	105, 106, 113, 107, 99, 100, 101, 93, 
-	94, 95, 114, 115, 116, 108, 91, 92, 
-	0, 117, 119, 109, 0, 2, 3, 15, 
-	4, 5, 6, 7, 19, 21, 22, 23, 
-	27, 24, 16, 17, 18, 10, 11, 12, 
-	28, 29, 25, 8, 9, 0, 26, 13, 
-	14, 20, 0, 31, 32, 44, 33, 34, 
-	35, 36, 48, 50, 51, 52, 53, 45, 
-	46, 47, 39, 40, 41, 54, 37, 38, 
-	0, 54, 55, 42, 0, 43, 49, 0, 
-	0, 57, 0, 59, 60, 72, 61, 62, 
-	63, 64, 76, 78, 79, 80, 84, 81, 
-	73, 74, 75, 67, 68, 69, 82, 65, 
-	66, 82, 83, 70, 71, 77, 0, 96, 
-	97, 103, 111, 0, 0, 118
+	1, 31, 0, 59, 61, 90, 91, 116, 
+	0, 118, 104, 92, 93, 94, 95, 108, 
+	110, 111, 112, 119, 113, 105, 106, 107, 
+	99, 100, 101, 120, 121, 122, 114, 96, 
+	97, 98, 123, 125, 115, 0, 2, 3, 
+	0, 16, 4, 5, 6, 7, 20, 22, 
+	23, 24, 28, 25, 17, 18, 19, 11, 
+	12, 13, 29, 30, 26, 8, 9, 10, 
+	27, 14, 15, 21, 0, 32, 33, 0, 
+	46, 34, 35, 36, 37, 50, 52, 53, 
+	54, 55, 47, 48, 49, 41, 42, 43, 
+	56, 38, 39, 40, 57, 58, 44, 0, 
+	45, 0, 51, 0, 0, 0, 60, 0, 
+	0, 0, 62, 63, 76, 64, 65, 66, 
+	67, 80, 82, 83, 84, 89, 85, 77, 
+	78, 79, 71, 72, 73, 86, 68, 69, 
+	70, 87, 88, 74, 75, 81, 0, 102, 
+	103, 109, 117, 0, 0, 0, 124
 };
 
 static const char _use_syllable_machine_trans_actions[] = {
 	0, 0, 3, 0, 0, 0, 0, 0, 
+	4, 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, 
-	4, 0, 0, 0, 5, 0, 0, 0, 
+	0, 0, 0, 0, 0, 5, 0, 0, 
+	6, 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, 6, 0, 0, 
-	0, 0, 7, 0, 0, 0, 0, 0, 
+	0, 0, 0, 0, 7, 0, 0, 8, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
-	0, 0, 0, 0, 0, 8, 0, 0, 
-	9, 10, 0, 0, 11, 0, 0, 12, 
-	13, 0, 14, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
-	0, 0, 0, 0, 0, 0, 8, 0, 
-	0, 10, 0, 0, 0, 0, 15, 0, 
-	0, 0, 0, 16, 17, 0
+	0, 0, 0, 0, 0, 0, 0, 9, 
+	0, 10, 0, 11, 12, 13, 0, 14, 
+	15, 16, 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, 17, 0, 
+	0, 0, 0, 18, 19, 20, 0
 };
 
 static const char _use_syllable_machine_to_state_actions[] = {
@@ -631,7 +777,8 @@
 	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
 };
 
 static const char _use_syllable_machine_from_state_actions[] = {
@@ -649,25 +796,27 @@
 	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
 };
 
 static const short _use_syllable_machine_eof_trans[] = {
-	0, 37, 37, 37, 37, 37, 37, 37, 
-	37, 37, 37, 37, 37, 37, 37, 37, 
-	37, 37, 37, 37, 37, 37, 37, 37, 
-	37, 37, 37, 37, 37, 37, 67, 67, 
-	67, 67, 67, 67, 67, 67, 67, 67, 
-	67, 67, 93, 67, 67, 67, 67, 67, 
-	67, 67, 67, 67, 67, 67, 96, 67, 
-	97, 99, 67, 67, 67, 67, 67, 67, 
-	67, 67, 67, 67, 67, 67, 93, 67, 
-	67, 67, 67, 67, 67, 67, 67, 67, 
-	67, 67, 96, 67, 67, 127, 127, 127, 
-	127, 127, 127, 127, 127, 127, 127, 127, 
-	127, 127, 127, 127, 127, 127, 127, 127, 
-	127, 127, 127, 127, 127, 127, 127, 127, 
-	127, 127, 127, 127, 132, 133, 133, 133
+	0, 38, 38, 38, 38, 38, 38, 38, 
+	38, 38, 38, 38, 38, 38, 38, 38, 
+	38, 38, 38, 38, 38, 38, 38, 38, 
+	38, 38, 38, 38, 38, 38, 38, 69, 
+	69, 69, 69, 69, 69, 69, 69, 69, 
+	69, 69, 69, 69, 96, 69, 69, 69, 
+	69, 69, 69, 69, 69, 69, 69, 69, 
+	100, 96, 69, 102, 105, 69, 69, 69, 
+	69, 69, 69, 69, 69, 69, 69, 69, 
+	69, 69, 96, 69, 69, 69, 69, 69, 
+	69, 69, 69, 69, 69, 69, 100, 96, 
+	69, 69, 135, 135, 135, 135, 135, 135, 
+	135, 135, 135, 135, 135, 135, 135, 135, 
+	135, 135, 135, 135, 135, 135, 135, 135, 
+	135, 135, 135, 135, 135, 135, 135, 135, 
+	135, 135, 140, 141, 141, 141
 };
 
 static const int use_syllable_machine_start = 0;
@@ -780,7 +929,7 @@
   unsigned int act HB_UNUSED;
   int cs;
   
-#line 784 "hb-ot-shaper-use-machine.hh"
+#line 933 "hb-ot-shaper-use-machine.hh"
 	{
 	cs = use_syllable_machine_start;
 	ts = 0;
@@ -793,7 +942,7 @@
 
   unsigned int syllable_serial = 1;
   
-#line 797 "hb-ot-shaper-use-machine.hh"
+#line 946 "hb-ot-shaper-use-machine.hh"
 	{
 	int _slen;
 	int _trans;
@@ -807,7 +956,7 @@
 #line 1 "NONE"
 	{ts = p;}
 	break;
-#line 811 "hb-ot-shaper-use-machine.hh"
+#line 960 "hb-ot-shaper-use-machine.hh"
 	}
 
 	_keys = _use_syllable_machine_trans_keys + (cs<<1);
@@ -825,14 +974,34 @@
 		goto _again;
 
 	switch ( _use_syllable_machine_trans_actions[_trans] ) {
-	case 9:
+	case 12:
+#line 170 "hb-ot-shaper-use-machine.rl"
+	{te = p+1;{ found_syllable (use_virama_terminated_cluster); }}
+	break;
+	case 10:
+#line 171 "hb-ot-shaper-use-machine.rl"
+	{te = p+1;{ found_syllable (use_sakot_terminated_cluster); }}
+	break;
+	case 8:
 #line 172 "hb-ot-shaper-use-machine.rl"
 	{te = p+1;{ found_syllable (use_standard_cluster); }}
 	break;
+	case 16:
+#line 173 "hb-ot-shaper-use-machine.rl"
+	{te = p+1;{ found_syllable (use_number_joiner_terminated_cluster); }}
+	break;
+	case 14:
+#line 174 "hb-ot-shaper-use-machine.rl"
+	{te = p+1;{ found_syllable (use_numeral_cluster); }}
+	break;
 	case 6:
 #line 175 "hb-ot-shaper-use-machine.rl"
 	{te = p+1;{ found_syllable (use_symbol_cluster); }}
 	break;
+	case 20:
+#line 176 "hb-ot-shaper-use-machine.rl"
+	{te = p+1;{ found_syllable (use_hieroglyph_cluster); }}
+	break;
 	case 4:
 #line 177 "hb-ot-shaper-use-machine.rl"
 	{te = p+1;{ found_syllable (use_broken_cluster); buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE; }}
@@ -842,6 +1011,10 @@
 	{te = p+1;{ found_syllable (use_non_cluster); }}
 	break;
 	case 11:
+#line 170 "hb-ot-shaper-use-machine.rl"
+	{te = p;p--;{ found_syllable (use_virama_terminated_cluster); }}
+	break;
+	case 9:
 #line 171 "hb-ot-shaper-use-machine.rl"
 	{te = p;p--;{ found_syllable (use_sakot_terminated_cluster); }}
 	break;
@@ -849,7 +1022,7 @@
 #line 172 "hb-ot-shaper-use-machine.rl"
 	{te = p;p--;{ found_syllable (use_standard_cluster); }}
 	break;
-	case 14:
+	case 15:
 #line 173 "hb-ot-shaper-use-machine.rl"
 	{te = p;p--;{ found_syllable (use_number_joiner_terminated_cluster); }}
 	break;
@@ -861,43 +1034,19 @@
 #line 175 "hb-ot-shaper-use-machine.rl"
 	{te = p;p--;{ found_syllable (use_symbol_cluster); }}
 	break;
-	case 17:
+	case 19:
 #line 176 "hb-ot-shaper-use-machine.rl"
 	{te = p;p--;{ found_syllable (use_hieroglyph_cluster); }}
 	break;
-	case 15:
+	case 17:
 #line 177 "hb-ot-shaper-use-machine.rl"
 	{te = p;p--;{ found_syllable (use_broken_cluster); buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE; }}
 	break;
-	case 16:
+	case 18:
 #line 178 "hb-ot-shaper-use-machine.rl"
 	{te = p;p--;{ found_syllable (use_non_cluster); }}
 	break;
-	case 12:
-#line 1 "NONE"
-	{	switch( act ) {
-	case 1:
-	{{p = ((te))-1;} found_syllable (use_virama_terminated_cluster); }
-	break;
-	case 2:
-	{{p = ((te))-1;} found_syllable (use_sakot_terminated_cluster); }
-	break;
-	}
-	}
-	break;
-	case 8:
-#line 1 "NONE"
-	{te = p+1;}
-#line 170 "hb-ot-shaper-use-machine.rl"
-	{act = 1;}
-	break;
-	case 10:
-#line 1 "NONE"
-	{te = p+1;}
-#line 171 "hb-ot-shaper-use-machine.rl"
-	{act = 2;}
-	break;
-#line 901 "hb-ot-shaper-use-machine.hh"
+#line 1050 "hb-ot-shaper-use-machine.hh"
 	}
 
 _again:
@@ -906,7 +1055,7 @@
 #line 1 "NONE"
 	{ts = 0;}
 	break;
-#line 910 "hb-ot-shaper-use-machine.hh"
+#line 1059 "hb-ot-shaper-use-machine.hh"
 	}
 
 	if ( ++p != pe )
diff --git a/src/hb-ot-shaper-use-machine.rl b/src/hb-ot-shaper-use-machine.rl
index 4bb3784..9f22057 100644
--- a/src/hb-ot-shaper-use-machine.rl
+++ b/src/hb-ot-shaper-use-machine.rl
@@ -167,14 +167,14 @@
 other = any;
 
 main := |*
-	virama_terminated_cluster		=> { found_syllable (use_virama_terminated_cluster); };
-	sakot_terminated_cluster		=> { found_syllable (use_sakot_terminated_cluster); };
-	standard_cluster			=> { found_syllable (use_standard_cluster); };
-	number_joiner_terminated_cluster	=> { found_syllable (use_number_joiner_terminated_cluster); };
-	numeral_cluster				=> { found_syllable (use_numeral_cluster); };
-	symbol_cluster				=> { found_syllable (use_symbol_cluster); };
-	hieroglyph_cluster			=> { found_syllable (use_hieroglyph_cluster); };
-	broken_cluster				=> { found_syllable (use_broken_cluster); buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE; };
+	virama_terminated_cluster ZWNJ?		=> { found_syllable (use_virama_terminated_cluster); };
+	sakot_terminated_cluster ZWNJ?		=> { found_syllable (use_sakot_terminated_cluster); };
+	standard_cluster ZWNJ?			=> { found_syllable (use_standard_cluster); };
+	number_joiner_terminated_cluster ZWNJ?	=> { found_syllable (use_number_joiner_terminated_cluster); };
+	numeral_cluster ZWNJ?			=> { found_syllable (use_numeral_cluster); };
+	symbol_cluster ZWNJ?			=> { found_syllable (use_symbol_cluster); };
+	hieroglyph_cluster ZWNJ?		=> { found_syllable (use_hieroglyph_cluster); };
+	broken_cluster ZWNJ?			=> { found_syllable (use_broken_cluster); buffer->scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE; };
 	other					=> { found_syllable (use_non_cluster); };
 *|;
 
diff --git a/src/hb-subset-plan.cc b/src/hb-subset-plan.cc
index c34f672..079ab8b 100644
--- a/src/hb-subset-plan.cc
+++ b/src/hb-subset-plan.cc
@@ -89,8 +89,6 @@
 }
 
 #ifndef HB_NO_SUBSET_LAYOUT
-typedef void (*layout_collect_func_t) (hb_face_t *face, hb_tag_t table_tag, const hb_tag_t *scripts, const hb_tag_t *languages, const hb_tag_t *features, hb_set_t *lookup_indexes /* OUT */);
-
 
 /*
  * Removes all tags from 'tags' that are not in filter. Additionally eliminates any duplicates.
@@ -130,8 +128,8 @@
 template <typename T>
 static void _collect_layout_indices (hb_subset_plan_t     *plan,
                                      const T&              table,
-                                     layout_collect_func_t layout_collect_func,
-                                     hb_set_t		  *indices /* OUT */)
+                                     hb_set_t		  *lookup_indices, /* OUT */
+                                     hb_set_t		  *feature_indices /* OUT */)
 {
   unsigned num_features = table.get_feature_count ();
   hb_vector_t<hb_tag_t> features;
@@ -149,12 +147,23 @@
       || !plan->check_success (!scripts.in_error ()) || !scripts)
     return;
 
-  layout_collect_func (plan->source,
-                       T::tableTag,
-                       retain_all_scripts ? nullptr : scripts.arrayZ,
-		       nullptr,
-		       retain_all_features ? nullptr : features.arrayZ,
-		       indices);
+  hb_ot_layout_collect_features (plan->source,
+                                 T::tableTag,
+                                 retain_all_scripts ? nullptr : scripts.arrayZ,
+                                 nullptr,
+                                 retain_all_features ? nullptr : features.arrayZ,
+                                 feature_indices);
+
+  for (unsigned feature_index : *feature_indices)
+  {
+    //TODO: replace HB_OT_LAYOUT_NO_VARIATIONS_INDEX with variation_index for
+    //instancing
+    const OT::Feature &f = table.get_feature_variation (feature_index, HB_OT_LAYOUT_NO_VARIATIONS_INDEX);
+    f.add_lookup_indexes_to (lookup_indices);
+  }
+
+  //TODO: update for instancing: only collect lookups from feature_indexes that have no variations
+  table.feature_variation_collect_lookups (feature_indices, lookup_indices);
 }
 
 
@@ -232,11 +241,11 @@
 {
   hb_blob_ptr_t<T> table = plan->source_table<T> ();
   hb_tag_t table_tag = table->tableTag;
-  hb_set_t lookup_indices;
+  hb_set_t lookup_indices, feature_indices;
   _collect_layout_indices<T> (plan,
                               *table,
-                              hb_ot_layout_collect_lookups,
-                              &lookup_indices);
+                              &lookup_indices,
+                              &feature_indices);
 
   if (table_tag == HB_OT_TAG_GSUB)
     hb_ot_layout_lookups_substitute_closure (plan->source,
@@ -247,19 +256,13 @@
                           &lookup_indices);
   _remap_indexes (&lookup_indices, lookups);
 
-  // Collect and prune features
-  hb_set_t feature_indices;
-  _collect_layout_indices<T> (plan,
-                              *table,
-                              hb_ot_layout_collect_features,
-                              &feature_indices);
-
+  // prune features
   table->prune_features (lookups, &feature_indices);
   hb_map_t duplicate_feature_map;
   _GSUBGPOS_find_duplicate_features (*table, lookups, &feature_indices, &duplicate_feature_map);
 
   feature_indices.clear ();
-  table->prune_langsys (&duplicate_feature_map, langsys_map, &feature_indices);
+  table->prune_langsys (&duplicate_feature_map, plan->layout_scripts, langsys_map, &feature_indices);
   _remap_indexes (&feature_indices, features);
 
   table.destroy ();
diff --git a/test/shape/data/in-house/fonts/a56745bac8449d0ad94918b2bb5930716ba02fe3.ttf b/test/shape/data/in-house/fonts/a56745bac8449d0ad94918b2bb5930716ba02fe3.ttf
new file mode 100644
index 0000000..31f8731
--- /dev/null
+++ b/test/shape/data/in-house/fonts/a56745bac8449d0ad94918b2bb5930716ba02fe3.ttf
Binary files differ
diff --git a/test/shape/data/in-house/tests/use-syllable.tests b/test/shape/data/in-house/tests/use-syllable.tests
index 2d63109..e7cec5f 100644
--- a/test/shape/data/in-house/tests/use-syllable.tests
+++ b/test/shape/data/in-house/tests/use-syllable.tests
@@ -21,3 +21,4 @@
 ../fonts/e68a88939e0f06e34d2bc911f09b70890289c8fd.ttf;;U+AA00,U+200C,U+AA34;[raMedial_cham_pre=0+400|a_cham=0+1121]
 ../fonts/2a670df15b73a5dc75a5cc491bde5ac93c5077dc.ttf;;U+11124,U+200D,U+11127;[u11124=0+514|u11127=0+0]
 ../fonts/2a670df15b73a5dc75a5cc491bde5ac93c5077dc.ttf;;U+11124,U+2060,U+11127;[u11124=0+514|uni25CC=1+547|u11127=1+0]
+../fonts/a56745bac8449d0ad94918b2bb5930716ba02fe3.ttf;;U+1142C,U+11442,U+200C,U+1142E;[u1142C=0+547|u11442=0+0|u1142E=3+547]