[subset] support option --layout-features
diff --git a/src/hb-subset-input.cc b/src/hb-subset-input.cc
index ccaddab..473b728 100644
--- a/src/hb-subset-input.cc
+++ b/src/hb-subset-input.cc
@@ -48,12 +48,14 @@
   hb_set_add_range (input->name_ids, 0, 6);
   input->name_languages = hb_set_create ();
   hb_set_add (input->name_languages, 0x0409);
+  input->layout_features = hb_set_create ();
   input->drop_tables = hb_set_create ();
   input->drop_hints = false;
   input->desubroutinize = false;
   input->retain_gids = false;
   input->name_legacy = false;
   input->overlaps_flag = false;
+  input->retain_all_layout_features = false;
 
   hb_tag_t default_drop_tables[] = {
     // Layout disabled by default
@@ -82,6 +84,94 @@
 
   input->drop_tables->add_array (default_drop_tables, ARRAY_LENGTH (default_drop_tables));
 
+  //copied from _layout_features_groups in fonttools
+  hb_tag_t default_layout_features[] = {
+    // default shaper
+    // common
+    HB_TAG ('r', 'v', 'r', 'n'),
+    HB_TAG ('c', 'c', 'm', 'p'),
+    HB_TAG ('l', 'i', 'g', 'a'),
+    HB_TAG ('l', 'o', 'c', 'l'),
+    HB_TAG ('m', 'a', 'r', 'k'),
+    HB_TAG ('m', 'k', 'm', 'k'),
+    HB_TAG ('r', 'l', 'i', 'g'),
+
+    //fractions
+    HB_TAG ('f', 'r', 'a', 'c'),
+    HB_TAG ('n', 'u', 'm', 'r'),
+    HB_TAG ('d', 'n', 'o', 'm'),
+
+    //horizontal
+    HB_TAG ('c', 'a', 'l', 't'),
+    HB_TAG ('c', 'l', 'i', 'g'),
+    HB_TAG ('c', 'u', 'r', 's'),
+    HB_TAG ('k', 'e', 'r', 'n'),
+    HB_TAG ('r', 'c', 'l', 't'),
+
+    //vertical
+    HB_TAG ('v', 'a', 'l', 't'),
+    HB_TAG ('v', 'e', 'r', 't'),
+    HB_TAG ('v', 'k', 'r', 'n'),
+    HB_TAG ('v', 'p', 'a', 'l'),
+    HB_TAG ('v', 'r', 't', '2'),
+
+    //ltr
+    HB_TAG ('l', 't', 'r', 'a'),
+    HB_TAG ('l', 't', 'r', 'm'),
+
+    //rtl
+    HB_TAG ('r', 't', 'l', 'a'),
+    HB_TAG ('r', 't', 'l', 'm'),
+
+    //Complex shapers
+    //arabic
+    HB_TAG ('i', 'n', 'i', 't'),
+    HB_TAG ('m', 'e', 'd', 'i'),
+    HB_TAG ('f', 'i', 'n', 'a'),
+    HB_TAG ('i', 's', 'o', 'l'),
+    HB_TAG ('m', 'e', 'd', '2'),
+    HB_TAG ('f', 'i', 'n', '2'),
+    HB_TAG ('f', 'i', 'n', '3'),
+    HB_TAG ('c', 's', 'w', 'h'),
+    HB_TAG ('m', 's', 'e', 't'),
+    HB_TAG ('s', 't', 'c', 'h'),
+
+    //hangul
+    HB_TAG ('l', 'j', 'm', 'o'),
+    HB_TAG ('v', 'j', 'm', 'o'),
+    HB_TAG ('t', 'j', 'm', 'o'),
+
+    //tibetan
+    HB_TAG ('a', 'b', 'v', 's'),
+    HB_TAG ('b', 'l', 'w', 's'),
+    HB_TAG ('a', 'b', 'v', 'm'),
+    HB_TAG ('b', 'l', 'w', 'm'),
+
+    //indic
+    HB_TAG ('n', 'u', 'k', 't'),
+    HB_TAG ('a', 'k', 'h', 'n'),
+    HB_TAG ('r', 'p', 'h', 'f'),
+    HB_TAG ('r', 'k', 'r', 'f'),
+    HB_TAG ('p', 'r', 'e', 'f'),
+    HB_TAG ('b', 'l', 'w', 'f'),
+    HB_TAG ('h', 'a', 'l', 'f'),
+    HB_TAG ('a', 'b', 'v', 'f'),
+    HB_TAG ('p', 's', 't', 'f'),
+    HB_TAG ('c', 'f', 'a', 'r'),
+    HB_TAG ('v', 'a', 't', 'u'),
+    HB_TAG ('c', 'j', 'c', 't'),
+    HB_TAG ('i', 'n', 'i', 't'),
+    HB_TAG ('p', 'r', 'e', 's'),
+    HB_TAG ('a', 'b', 'v', 's'),
+    HB_TAG ('b', 'l', 'w', 's'),
+    HB_TAG ('p', 's', 't', 's'),
+    HB_TAG ('h', 'a', 'l', 'n'),
+    HB_TAG ('d', 'i', 's', 't'),
+    HB_TAG ('a', 'b', 'v', 'm'),
+    HB_TAG ('b', 'l', 'w', 'm'),
+  };
+
+  input->layout_features->add_array (default_layout_features, ARRAY_LENGTH (default_layout_features));
   return input;
 }
 
@@ -117,6 +207,7 @@
   hb_set_destroy (subset_input->name_ids);
   hb_set_destroy (subset_input->name_languages);
   hb_set_destroy (subset_input->drop_tables);
+  hb_set_destroy (subset_input->layout_features);
 
   free (subset_input);
 }
diff --git a/src/hb-subset-input.hh b/src/hb-subset-input.hh
index 5dff9d2..36ab226 100644
--- a/src/hb-subset-input.hh
+++ b/src/hb-subset-input.hh
@@ -43,12 +43,14 @@
   hb_set_t *name_ids;
   hb_set_t *name_languages;
   hb_set_t *drop_tables;
+  hb_set_t *layout_features;
 
   bool drop_hints;
   bool desubroutinize;
   bool retain_gids;
   bool name_legacy;
   bool overlaps_flag;
+  bool retain_all_layout_features;
   /* TODO
    *
    * features
diff --git a/src/hb-subset-plan.cc b/src/hb-subset-plan.cc
index 1cacd7a..56d66e1 100644
--- a/src/hb-subset-plan.cc
+++ b/src/hb-subset-plan.cc
@@ -85,88 +85,96 @@
 }
 
 #ifndef HB_NO_SUBSET_LAYOUT
-static inline void
-_gsub_closure_glyphs_lookups_features (hb_face_t *face,
-				       hb_set_t *gids_to_retain,
-				       hb_map_t *gsub_lookups,
-				       hb_map_t *gsub_features,
-				       script_langsys_map *gsub_langsys)
+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 */);
+
+static void _collect_subset_layout (hb_face_t            *face,
+				    hb_tag_t              table_tag,
+				    const hb_set_t       *layout_features_to_retain,
+				    bool                  retain_all_features,
+				    layout_collect_func_t layout_collect_func,
+				    hb_set_t             *lookup_indices /* OUT */)
 {
+  if (retain_all_features)
+  {
+    layout_collect_func (face,
+			 table_tag,
+			 nullptr,
+			 nullptr,
+			 nullptr,
+			 lookup_indices);
+    return;
+  }
+
+  if (hb_set_is_empty (layout_features_to_retain)) return;
+  unsigned num = layout_features_to_retain->get_population () + 1;
+  hb_tag_t *features = (hb_tag_t *) malloc (num * sizeof (hb_tag_t));
+  if (!features) return;
+
+  unsigned i = 0;
+  for (hb_tag_t f : layout_features_to_retain->iter ())
+    features[i++] = f;
+
+  features[i] = 0;
+  
+  layout_collect_func (face,
+		       table_tag,
+		       nullptr,
+		       nullptr,
+		       features,
+		       lookup_indices);
+
+  free (features);
+}
+
+template <typename T>
+static inline void
+_closure_glyphs_lookups_features (hb_face_t          *face,
+				  hb_set_t           *gids_to_retain,
+				  const hb_set_t     *layout_features_to_retain,
+				  bool                retain_all_features,
+				  hb_map_t           *lookups,
+				  hb_map_t           *features,
+				  script_langsys_map *langsys_map)
+{
+  hb_blob_ptr_t<T> table = hb_sanitize_context_t ().reference_table<T> (face);
+  hb_tag_t table_tag = table->tableTag;
   hb_set_t lookup_indices;
-  hb_ot_layout_collect_lookups (face,
-				HB_OT_TAG_GSUB,
-				nullptr,
-				nullptr,
-				nullptr,
-				&lookup_indices);
-  hb_ot_layout_lookups_substitute_closure (face,
-					   &lookup_indices,
-					   gids_to_retain);
-  hb_blob_ptr_t<OT::GSUB> gsub = hb_sanitize_context_t ().reference_table<OT::GSUB> (face);
-  gsub->closure_lookups (face,
-			 gids_to_retain,
+  _collect_subset_layout (face,
+			  table_tag,
+			  layout_features_to_retain,
+			  retain_all_features,
+			  hb_ot_layout_collect_lookups,
+			  &lookup_indices);
+
+  if (table_tag == HB_OT_TAG_GSUB)
+    hb_ot_layout_lookups_substitute_closure (face,
+					    &lookup_indices,
+					     gids_to_retain);
+  table->closure_lookups (face,
+			  gids_to_retain,
 			 &lookup_indices);
-  _remap_indexes (&lookup_indices, gsub_lookups);
+  _remap_indexes (&lookup_indices, lookups);
 
   // Collect and prune features
   hb_set_t feature_indices;
-  hb_ot_layout_collect_features (face,
-                                 HB_OT_TAG_GSUB,
-                                 nullptr,
-                                 nullptr,
-                                 nullptr,
-                                 &feature_indices);
+  _collect_subset_layout (face,
+			  table_tag,
+			  layout_features_to_retain,
+			  retain_all_features,
+			  hb_ot_layout_collect_features,
+			  &feature_indices);
 
-  gsub->prune_features (gsub_lookups, &feature_indices);
+  table->prune_features (lookups, &feature_indices);
   hb_map_t duplicate_feature_map;
-  gsub->find_duplicate_features (gsub_lookups, &feature_indices, &duplicate_feature_map);
+  table->find_duplicate_features (lookups, &feature_indices, &duplicate_feature_map);
 
   feature_indices.clear ();
-  gsub->prune_langsys (&duplicate_feature_map, gsub_langsys, &feature_indices);
-  _remap_indexes (&feature_indices, gsub_features);
+  table->prune_langsys (&duplicate_feature_map, langsys_map, &feature_indices);
+  _remap_indexes (&feature_indices, features);
 
-  gsub.destroy ();
+  table.destroy ();
 }
 
-static inline void
-_gpos_closure_lookups_features (hb_face_t      *face,
-				const hb_set_t *gids_to_retain,
-				hb_map_t       *gpos_lookups,
-				hb_map_t       *gpos_features,
-				script_langsys_map *gpos_langsys)
-{
-  hb_set_t lookup_indices;
-  hb_ot_layout_collect_lookups (face,
-				HB_OT_TAG_GPOS,
-				nullptr,
-				nullptr,
-				nullptr,
-				&lookup_indices);
-  hb_blob_ptr_t<OT::GPOS> gpos = hb_sanitize_context_t ().reference_table<OT::GPOS> (face);
-  gpos->closure_lookups (face,
-			 gids_to_retain,
-			 &lookup_indices);
-  _remap_indexes (&lookup_indices, gpos_lookups);
-
-  // Collect and prune features
-  hb_set_t feature_indices;
-  hb_ot_layout_collect_features (face,
-                                 HB_OT_TAG_GPOS,
-                                 nullptr,
-                                 nullptr,
-                                 nullptr,
-                                 &feature_indices);
-
-  gpos->prune_features (gpos_lookups, &feature_indices);
-  hb_map_t duplicate_feature_map;
-  gpos->find_duplicate_features (gpos_lookups, &feature_indices, &duplicate_feature_map);
-
-  feature_indices.clear ();
-  gpos->prune_langsys (&duplicate_feature_map, gpos_langsys, &feature_indices);
-  _remap_indexes (&feature_indices, gpos_features);
-
-  gpos.destroy ();
-}
 #endif
 
 #ifndef HB_NO_VAR
@@ -265,10 +273,10 @@
 #ifndef HB_NO_SUBSET_LAYOUT
   if (close_over_gsub)
     // closure all glyphs/lookups/features needed for GSUB substitutions.
-    _gsub_closure_glyphs_lookups_features (plan->source, plan->_glyphset_gsub, plan->gsub_lookups, plan->gsub_features, plan->gsub_langsys);
+    _closure_glyphs_lookups_features<OT::GSUB> (plan->source, plan->_glyphset_gsub, plan->layout_features, plan->retain_all_layout_features, plan->gsub_lookups, plan->gsub_features, plan->gsub_langsys);
 
   if (close_over_gpos)
-    _gpos_closure_lookups_features (plan->source, plan->_glyphset_gsub, plan->gpos_lookups, plan->gpos_features, plan->gpos_langsys);
+    _closure_glyphs_lookups_features<OT::GPOS> (plan->source, plan->_glyphset_gsub, plan->layout_features, plan->retain_all_layout_features, plan->gpos_lookups, plan->gpos_features, plan->gpos_langsys);
 #endif
   _remove_invalid_gids (plan->_glyphset_gsub, plan->source->get_num_glyphs ());
 
@@ -393,10 +401,12 @@
   plan->retain_gids = input->retain_gids;
   plan->name_legacy = input->name_legacy;
   plan->overlaps_flag = input->overlaps_flag;
+  plan->retain_all_layout_features = input->retain_all_layout_features;
   plan->unicodes = hb_set_create ();
   plan->name_ids = hb_set_reference (input->name_ids);
   _nameid_closure (face, plan->name_ids);
   plan->name_languages = hb_set_reference (input->name_languages);
+  plan->layout_features = hb_set_reference (input->layout_features);
   plan->glyphs_requested = hb_set_reference (input->glyphs);
   plan->drop_tables = hb_set_reference (input->drop_tables);
   plan->source = hb_face_reference (face);
@@ -456,6 +466,7 @@
   hb_set_destroy (plan->unicodes);
   hb_set_destroy (plan->name_ids);
   hb_set_destroy (plan->name_languages);
+  hb_set_destroy (plan->layout_features);
   hb_set_destroy (plan->glyphs_requested);
   hb_set_destroy (plan->drop_tables);
   hb_face_destroy (plan->source);
diff --git a/src/hb-subset-plan.hh b/src/hb-subset-plan.hh
index 132beb0..fe3b13b 100644
--- a/src/hb-subset-plan.hh
+++ b/src/hb-subset-plan.hh
@@ -45,6 +45,7 @@
   bool retain_gids : 1;
   bool name_legacy : 1;
   bool overlaps_flag : 1;
+  bool retain_all_layout_features : 1;
 
   // For each cp that we'd like to retain maps to the corresponding gid.
   hb_set_t *unicodes;
@@ -55,6 +56,9 @@
   // name_languages we would like to retain
   hb_set_t *name_languages;
 
+  //layout features which will be preserved
+  hb_set_t *layout_features;
+
   //glyph ids requested to retain
   hb_set_t *glyphs_requested;
 
diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.default.61,62,63.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.default.61,62,63.ttf
index 163ebcb..9c6b70f 100644
--- a/test/subset/data/expected/basics/Comfortaa-Regular-new.default.61,62,63.ttf
+++ b/test/subset/data/expected/basics/Comfortaa-Regular-new.default.61,62,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.default.61,63.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.default.61,63.ttf
index 867ddfc..3f139a6 100644
--- a/test/subset/data/expected/basics/Comfortaa-Regular-new.default.61,63.ttf
+++ b/test/subset/data/expected/basics/Comfortaa-Regular-new.default.61,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.default.61.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.default.61.ttf
index 76ad2fa..4d931ad 100644
--- a/test/subset/data/expected/basics/Comfortaa-Regular-new.default.61.ttf
+++ b/test/subset/data/expected/basics/Comfortaa-Regular-new.default.61.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.default.retain-all-codepoint.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.default.retain-all-codepoint.ttf
index a6100c7..0db4b2a 100644
--- a/test/subset/data/expected/basics/Comfortaa-Regular-new.default.retain-all-codepoint.ttf
+++ b/test/subset/data/expected/basics/Comfortaa-Regular-new.default.retain-all-codepoint.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints-retain-gids.61,62,63.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints-retain-gids.61,62,63.ttf
index 732414d..33d61d1 100644
--- a/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints-retain-gids.61,62,63.ttf
+++ b/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints-retain-gids.61,62,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints-retain-gids.61,63.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints-retain-gids.61,63.ttf
index ac22848..89cf933 100644
--- a/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints-retain-gids.61,63.ttf
+++ b/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints-retain-gids.61,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints-retain-gids.61.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints-retain-gids.61.ttf
index 88e2656..a5af7e2 100644
--- a/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints-retain-gids.61.ttf
+++ b/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints-retain-gids.61.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints-retain-gids.retain-all-codepoint.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints-retain-gids.retain-all-codepoint.ttf
index ce8fd88..829eadf 100644
--- a/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints-retain-gids.retain-all-codepoint.ttf
+++ b/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints-retain-gids.retain-all-codepoint.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints.61,62,63.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints.61,62,63.ttf
index 5339897..4d2b38b 100644
--- a/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints.61,62,63.ttf
+++ b/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints.61,62,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints.61,63.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints.61,63.ttf
index ac861aa..4574849 100644
--- a/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints.61,63.ttf
+++ b/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints.61,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints.61.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints.61.ttf
index d2d1881..39a58bc 100644
--- a/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints.61.ttf
+++ b/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints.61.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints.retain-all-codepoint.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints.retain-all-codepoint.ttf
index 102f5c6..aa40cb5 100644
--- a/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints.retain-all-codepoint.ttf
+++ b/test/subset/data/expected/basics/Comfortaa-Regular-new.drop-hints.retain-all-codepoint.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.gids.61,62,63.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.gids.61,62,63.ttf
index 7ec6a0d..f649101 100644
--- a/test/subset/data/expected/basics/Comfortaa-Regular-new.gids.61,62,63.ttf
+++ b/test/subset/data/expected/basics/Comfortaa-Regular-new.gids.61,62,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.gids.61,63.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.gids.61,63.ttf
index 7160f0f..d1c12a8 100644
--- a/test/subset/data/expected/basics/Comfortaa-Regular-new.gids.61,63.ttf
+++ b/test/subset/data/expected/basics/Comfortaa-Regular-new.gids.61,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.gids.61.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.gids.61.ttf
index 69c08d9..1eb5ecf 100644
--- a/test/subset/data/expected/basics/Comfortaa-Regular-new.gids.61.ttf
+++ b/test/subset/data/expected/basics/Comfortaa-Regular-new.gids.61.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.gids.62.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.gids.62.ttf
index bed9897..2fc09ae 100644
--- a/test/subset/data/expected/basics/Comfortaa-Regular-new.gids.62.ttf
+++ b/test/subset/data/expected/basics/Comfortaa-Regular-new.gids.62.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.gids.63.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.gids.63.ttf
index 29be22f..e2bafcd 100644
--- a/test/subset/data/expected/basics/Comfortaa-Regular-new.gids.63.ttf
+++ b/test/subset/data/expected/basics/Comfortaa-Regular-new.gids.63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.gids.retain-all-codepoint.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.gids.retain-all-codepoint.ttf
index a6100c7..0db4b2a 100644
--- a/test/subset/data/expected/basics/Comfortaa-Regular-new.gids.retain-all-codepoint.ttf
+++ b/test/subset/data/expected/basics/Comfortaa-Regular-new.gids.retain-all-codepoint.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.keep-all-layout-features.61,62,63.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.keep-all-layout-features.61,62,63.ttf
new file mode 100644
index 0000000..163ebcb
--- /dev/null
+++ b/test/subset/data/expected/basics/Comfortaa-Regular-new.keep-all-layout-features.61,62,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.keep-all-layout-features.61,63.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.keep-all-layout-features.61,63.ttf
new file mode 100644
index 0000000..867ddfc
--- /dev/null
+++ b/test/subset/data/expected/basics/Comfortaa-Regular-new.keep-all-layout-features.61,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.keep-all-layout-features.61.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.keep-all-layout-features.61.ttf
new file mode 100644
index 0000000..76ad2fa
--- /dev/null
+++ b/test/subset/data/expected/basics/Comfortaa-Regular-new.keep-all-layout-features.61.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.keep-all-layout-features.62.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.keep-all-layout-features.62.ttf
new file mode 100644
index 0000000..0f95a1e
--- /dev/null
+++ b/test/subset/data/expected/basics/Comfortaa-Regular-new.keep-all-layout-features.62.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.keep-all-layout-features.63.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.keep-all-layout-features.63.ttf
new file mode 100644
index 0000000..23a8777
--- /dev/null
+++ b/test/subset/data/expected/basics/Comfortaa-Regular-new.keep-all-layout-features.63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.keep-all-layout-features.retain-all-codepoint.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.keep-all-layout-features.retain-all-codepoint.ttf
new file mode 100644
index 0000000..a6100c7
--- /dev/null
+++ b/test/subset/data/expected/basics/Comfortaa-Regular-new.keep-all-layout-features.retain-all-codepoint.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.layout-features.61,62,63.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.layout-features.61,62,63.ttf
new file mode 100644
index 0000000..9c6b70f
--- /dev/null
+++ b/test/subset/data/expected/basics/Comfortaa-Regular-new.layout-features.61,62,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.layout-features.61,63.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.layout-features.61,63.ttf
new file mode 100644
index 0000000..3f139a6
--- /dev/null
+++ b/test/subset/data/expected/basics/Comfortaa-Regular-new.layout-features.61,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.layout-features.61.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.layout-features.61.ttf
new file mode 100644
index 0000000..4d931ad
--- /dev/null
+++ b/test/subset/data/expected/basics/Comfortaa-Regular-new.layout-features.61.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.layout-features.62.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.layout-features.62.ttf
new file mode 100644
index 0000000..0f95a1e
--- /dev/null
+++ b/test/subset/data/expected/basics/Comfortaa-Regular-new.layout-features.62.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.layout-features.63.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.layout-features.63.ttf
new file mode 100644
index 0000000..23a8777
--- /dev/null
+++ b/test/subset/data/expected/basics/Comfortaa-Regular-new.layout-features.63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.layout-features.retain-all-codepoint.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.layout-features.retain-all-codepoint.ttf
new file mode 100644
index 0000000..7727d48
--- /dev/null
+++ b/test/subset/data/expected/basics/Comfortaa-Regular-new.layout-features.retain-all-codepoint.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.61,62,63.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.61,62,63.ttf
index 4c48512..e71b46a 100644
--- a/test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.61,62,63.ttf
+++ b/test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.61,62,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.61,63.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.61,63.ttf
index dd8d99b..186e968 100644
--- a/test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.61,63.ttf
+++ b/test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.61,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.61.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.61.ttf
index 019bc11..ea9e872 100644
--- a/test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.61.ttf
+++ b/test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.61.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.retain-all-codepoint.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.retain-all-codepoint.ttf
index 4a172ab..20eafb3 100644
--- a/test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.retain-all-codepoint.ttf
+++ b/test/subset/data/expected/basics/Comfortaa-Regular-new.name-ids.retain-all-codepoint.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.name-languages.61,62,63.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.name-languages.61,62,63.ttf
index 163ebcb..9c6b70f 100644
--- a/test/subset/data/expected/basics/Comfortaa-Regular-new.name-languages.61,62,63.ttf
+++ b/test/subset/data/expected/basics/Comfortaa-Regular-new.name-languages.61,62,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.name-languages.61,63.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.name-languages.61,63.ttf
index 867ddfc..3f139a6 100644
--- a/test/subset/data/expected/basics/Comfortaa-Regular-new.name-languages.61,63.ttf
+++ b/test/subset/data/expected/basics/Comfortaa-Regular-new.name-languages.61,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.name-languages.61.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.name-languages.61.ttf
index 76ad2fa..4d931ad 100644
--- a/test/subset/data/expected/basics/Comfortaa-Regular-new.name-languages.61.ttf
+++ b/test/subset/data/expected/basics/Comfortaa-Regular-new.name-languages.61.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.name-languages.retain-all-codepoint.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.name-languages.retain-all-codepoint.ttf
index a6100c7..0db4b2a 100644
--- a/test/subset/data/expected/basics/Comfortaa-Regular-new.name-languages.retain-all-codepoint.ttf
+++ b/test/subset/data/expected/basics/Comfortaa-Regular-new.name-languages.retain-all-codepoint.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.name-legacy.61,62,63.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.name-legacy.61,62,63.ttf
index 163ebcb..9c6b70f 100644
--- a/test/subset/data/expected/basics/Comfortaa-Regular-new.name-legacy.61,62,63.ttf
+++ b/test/subset/data/expected/basics/Comfortaa-Regular-new.name-legacy.61,62,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.name-legacy.61,63.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.name-legacy.61,63.ttf
index 867ddfc..3f139a6 100644
--- a/test/subset/data/expected/basics/Comfortaa-Regular-new.name-legacy.61,63.ttf
+++ b/test/subset/data/expected/basics/Comfortaa-Regular-new.name-legacy.61,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.name-legacy.61.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.name-legacy.61.ttf
index 76ad2fa..4d931ad 100644
--- a/test/subset/data/expected/basics/Comfortaa-Regular-new.name-legacy.61.ttf
+++ b/test/subset/data/expected/basics/Comfortaa-Regular-new.name-legacy.61.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.name-legacy.retain-all-codepoint.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.name-legacy.retain-all-codepoint.ttf
index a6100c7..0db4b2a 100644
--- a/test/subset/data/expected/basics/Comfortaa-Regular-new.name-legacy.retain-all-codepoint.ttf
+++ b/test/subset/data/expected/basics/Comfortaa-Regular-new.name-legacy.retain-all-codepoint.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids.61,62,63.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids.61,62,63.ttf
index a6b3aa1..a6bc5c7 100644
--- a/test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids.61,62,63.ttf
+++ b/test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids.61,62,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids.61,63.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids.61,63.ttf
index c4262e5..9720d1c 100644
--- a/test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids.61,63.ttf
+++ b/test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids.61,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids.61.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids.61.ttf
index 5788020..1068b7f 100644
--- a/test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids.61.ttf
+++ b/test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids.61.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids.retain-all-codepoint.ttf b/test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids.retain-all-codepoint.ttf
index a1733e0..6a94355 100644
--- a/test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids.retain-all-codepoint.ttf
+++ b/test/subset/data/expected/basics/Comfortaa-Regular-new.retain-gids.retain-all-codepoint.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.keep-all-layout-features.61,62,63.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.keep-all-layout-features.61,62,63.ttf
new file mode 100644
index 0000000..dbed582
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.keep-all-layout-features.61,62,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.keep-all-layout-features.61,63.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.keep-all-layout-features.61,63.ttf
new file mode 100644
index 0000000..5913420
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.keep-all-layout-features.61,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.keep-all-layout-features.61.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.keep-all-layout-features.61.ttf
new file mode 100644
index 0000000..3635f68
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.keep-all-layout-features.61.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.keep-all-layout-features.62.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.keep-all-layout-features.62.ttf
new file mode 100644
index 0000000..91fcad8
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.keep-all-layout-features.62.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.keep-all-layout-features.63.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.keep-all-layout-features.63.ttf
new file mode 100644
index 0000000..737cbdc
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.keep-all-layout-features.63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.keep-all-layout-features.retain-all-codepoint.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.keep-all-layout-features.retain-all-codepoint.ttf
new file mode 100644
index 0000000..9744bc3
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.keep-all-layout-features.retain-all-codepoint.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.layout-features.61,62,63.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.layout-features.61,62,63.ttf
new file mode 100644
index 0000000..dbed582
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.layout-features.61,62,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.layout-features.61,63.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.layout-features.61,63.ttf
new file mode 100644
index 0000000..5913420
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.layout-features.61,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.layout-features.61.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.layout-features.61.ttf
new file mode 100644
index 0000000..3635f68
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.layout-features.61.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.layout-features.62.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.layout-features.62.ttf
new file mode 100644
index 0000000..91fcad8
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.layout-features.62.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.layout-features.63.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.layout-features.63.ttf
new file mode 100644
index 0000000..737cbdc
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.layout-features.63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.layout-features.retain-all-codepoint.ttf b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.layout-features.retain-all-codepoint.ttf
new file mode 100644
index 0000000..9744bc3
--- /dev/null
+++ b/test/subset/data/expected/basics/NanumMyeongjo-Regular-subset.layout-features.retain-all-codepoint.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Roboto-Regular.abc.keep-all-layout-features.61,62,63.ttf b/test/subset/data/expected/basics/Roboto-Regular.abc.keep-all-layout-features.61,62,63.ttf
new file mode 100644
index 0000000..712674f
--- /dev/null
+++ b/test/subset/data/expected/basics/Roboto-Regular.abc.keep-all-layout-features.61,62,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Roboto-Regular.abc.keep-all-layout-features.61,63.ttf b/test/subset/data/expected/basics/Roboto-Regular.abc.keep-all-layout-features.61,63.ttf
new file mode 100644
index 0000000..f4b4a08
--- /dev/null
+++ b/test/subset/data/expected/basics/Roboto-Regular.abc.keep-all-layout-features.61,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Roboto-Regular.abc.keep-all-layout-features.61.ttf b/test/subset/data/expected/basics/Roboto-Regular.abc.keep-all-layout-features.61.ttf
new file mode 100644
index 0000000..60e3c5c
--- /dev/null
+++ b/test/subset/data/expected/basics/Roboto-Regular.abc.keep-all-layout-features.61.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Roboto-Regular.abc.keep-all-layout-features.62.ttf b/test/subset/data/expected/basics/Roboto-Regular.abc.keep-all-layout-features.62.ttf
new file mode 100644
index 0000000..a2916f8
--- /dev/null
+++ b/test/subset/data/expected/basics/Roboto-Regular.abc.keep-all-layout-features.62.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Roboto-Regular.abc.keep-all-layout-features.63.ttf b/test/subset/data/expected/basics/Roboto-Regular.abc.keep-all-layout-features.63.ttf
new file mode 100644
index 0000000..e3964f8
--- /dev/null
+++ b/test/subset/data/expected/basics/Roboto-Regular.abc.keep-all-layout-features.63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Roboto-Regular.abc.keep-all-layout-features.retain-all-codepoint.ttf b/test/subset/data/expected/basics/Roboto-Regular.abc.keep-all-layout-features.retain-all-codepoint.ttf
new file mode 100644
index 0000000..712674f
--- /dev/null
+++ b/test/subset/data/expected/basics/Roboto-Regular.abc.keep-all-layout-features.retain-all-codepoint.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Roboto-Regular.abc.layout-features.61,62,63.ttf b/test/subset/data/expected/basics/Roboto-Regular.abc.layout-features.61,62,63.ttf
new file mode 100644
index 0000000..712674f
--- /dev/null
+++ b/test/subset/data/expected/basics/Roboto-Regular.abc.layout-features.61,62,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Roboto-Regular.abc.layout-features.61,63.ttf b/test/subset/data/expected/basics/Roboto-Regular.abc.layout-features.61,63.ttf
new file mode 100644
index 0000000..f4b4a08
--- /dev/null
+++ b/test/subset/data/expected/basics/Roboto-Regular.abc.layout-features.61,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Roboto-Regular.abc.layout-features.61.ttf b/test/subset/data/expected/basics/Roboto-Regular.abc.layout-features.61.ttf
new file mode 100644
index 0000000..60e3c5c
--- /dev/null
+++ b/test/subset/data/expected/basics/Roboto-Regular.abc.layout-features.61.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Roboto-Regular.abc.layout-features.62.ttf b/test/subset/data/expected/basics/Roboto-Regular.abc.layout-features.62.ttf
new file mode 100644
index 0000000..a2916f8
--- /dev/null
+++ b/test/subset/data/expected/basics/Roboto-Regular.abc.layout-features.62.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Roboto-Regular.abc.layout-features.63.ttf b/test/subset/data/expected/basics/Roboto-Regular.abc.layout-features.63.ttf
new file mode 100644
index 0000000..e3964f8
--- /dev/null
+++ b/test/subset/data/expected/basics/Roboto-Regular.abc.layout-features.63.ttf
Binary files differ
diff --git a/test/subset/data/expected/basics/Roboto-Regular.abc.layout-features.retain-all-codepoint.ttf b/test/subset/data/expected/basics/Roboto-Regular.abc.layout-features.retain-all-codepoint.ttf
new file mode 100644
index 0000000..712674f
--- /dev/null
+++ b/test/subset/data/expected/basics/Roboto-Regular.abc.layout-features.retain-all-codepoint.ttf
Binary files differ
diff --git a/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.default.1FC,21,41,20,62,63.otf b/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.default.1FC,21,41,20,62,63.otf
index 36b2980..b548508 100644
--- a/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.default.1FC,21,41,20,62,63.otf
+++ b/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.default.1FC,21,41,20,62,63.otf
Binary files differ
diff --git a/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.default.61,62,63.otf b/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.default.61,62,63.otf
index c4c49ad..490061d 100644
--- a/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.default.61,62,63.otf
+++ b/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.default.61,62,63.otf
Binary files differ
diff --git a/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.default.D7,D8,D9,DA,DE.otf b/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.default.D7,D8,D9,DA,DE.otf
index be1e1d7..3043a3d 100644
--- a/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.default.D7,D8,D9,DA,DE.otf
+++ b/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.default.D7,D8,D9,DA,DE.otf
Binary files differ
diff --git a/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.desubroutinize-retain-gids.1FC,21,41,20,62,63.otf b/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.desubroutinize-retain-gids.1FC,21,41,20,62,63.otf
index f6d90c1..07bef39 100644
--- a/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.desubroutinize-retain-gids.1FC,21,41,20,62,63.otf
+++ b/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.desubroutinize-retain-gids.1FC,21,41,20,62,63.otf
Binary files differ
diff --git a/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.desubroutinize-retain-gids.61,62,63.otf b/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.desubroutinize-retain-gids.61,62,63.otf
index dd41df1..1a8e607 100644
--- a/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.desubroutinize-retain-gids.61,62,63.otf
+++ b/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.desubroutinize-retain-gids.61,62,63.otf
Binary files differ
diff --git a/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.desubroutinize-retain-gids.D7,D8,D9,DA,DE.otf b/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.desubroutinize-retain-gids.D7,D8,D9,DA,DE.otf
index 0f59d85..8f12c8d 100644
--- a/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.desubroutinize-retain-gids.D7,D8,D9,DA,DE.otf
+++ b/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.desubroutinize-retain-gids.D7,D8,D9,DA,DE.otf
Binary files differ
diff --git a/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.desubroutinize.1FC,21,41,20,62,63.otf b/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.desubroutinize.1FC,21,41,20,62,63.otf
index da612a0..42d42a1 100644
--- a/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.desubroutinize.1FC,21,41,20,62,63.otf
+++ b/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.desubroutinize.1FC,21,41,20,62,63.otf
Binary files differ
diff --git a/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.desubroutinize.61,62,63.otf b/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.desubroutinize.61,62,63.otf
index f65ae31..7e4f67a 100644
--- a/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.desubroutinize.61,62,63.otf
+++ b/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.desubroutinize.61,62,63.otf
Binary files differ
diff --git a/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.desubroutinize.D7,D8,D9,DA,DE.otf b/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.desubroutinize.D7,D8,D9,DA,DE.otf
index 41ea530..52137b2 100644
--- a/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.desubroutinize.D7,D8,D9,DA,DE.otf
+++ b/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.desubroutinize.D7,D8,D9,DA,DE.otf
Binary files differ
diff --git a/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints-desubroutinize-retain-gids.1FC,21,41,20,62,63.otf b/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints-desubroutinize-retain-gids.1FC,21,41,20,62,63.otf
index a62bcc8..7d0665c 100644
--- a/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints-desubroutinize-retain-gids.1FC,21,41,20,62,63.otf
+++ b/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints-desubroutinize-retain-gids.1FC,21,41,20,62,63.otf
Binary files differ
diff --git a/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints-desubroutinize-retain-gids.61,62,63.otf b/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints-desubroutinize-retain-gids.61,62,63.otf
index d57a8f0..6f7d42c 100644
--- a/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints-desubroutinize-retain-gids.61,62,63.otf
+++ b/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints-desubroutinize-retain-gids.61,62,63.otf
Binary files differ
diff --git a/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints-desubroutinize-retain-gids.D7,D8,D9,DA,DE.otf b/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints-desubroutinize-retain-gids.D7,D8,D9,DA,DE.otf
index 3d64538..e091893 100644
--- a/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints-desubroutinize-retain-gids.D7,D8,D9,DA,DE.otf
+++ b/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints-desubroutinize-retain-gids.D7,D8,D9,DA,DE.otf
Binary files differ
diff --git a/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints-desubroutinize.1FC,21,41,20,62,63.otf b/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints-desubroutinize.1FC,21,41,20,62,63.otf
index 2983951..6da4663 100644
--- a/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints-desubroutinize.1FC,21,41,20,62,63.otf
+++ b/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints-desubroutinize.1FC,21,41,20,62,63.otf
Binary files differ
diff --git a/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints-desubroutinize.61,62,63.otf b/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints-desubroutinize.61,62,63.otf
index baaae1d..e4e7b46 100644
--- a/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints-desubroutinize.61,62,63.otf
+++ b/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints-desubroutinize.61,62,63.otf
Binary files differ
diff --git a/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints-desubroutinize.D7,D8,D9,DA,DE.otf b/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints-desubroutinize.D7,D8,D9,DA,DE.otf
index 4dbbaa3..4ce677e 100644
--- a/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints-desubroutinize.D7,D8,D9,DA,DE.otf
+++ b/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints-desubroutinize.D7,D8,D9,DA,DE.otf
Binary files differ
diff --git a/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints-retain-gids.1FC,21,41,20,62,63.otf b/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints-retain-gids.1FC,21,41,20,62,63.otf
index cfa140f..a356293 100644
--- a/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints-retain-gids.1FC,21,41,20,62,63.otf
+++ b/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints-retain-gids.1FC,21,41,20,62,63.otf
Binary files differ
diff --git a/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints-retain-gids.61,62,63.otf b/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints-retain-gids.61,62,63.otf
index 054f32f..5b24731 100644
--- a/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints-retain-gids.61,62,63.otf
+++ b/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints-retain-gids.61,62,63.otf
Binary files differ
diff --git a/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints-retain-gids.D7,D8,D9,DA,DE.otf b/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints-retain-gids.D7,D8,D9,DA,DE.otf
index cd7fbc0..ce53b92 100644
--- a/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints-retain-gids.D7,D8,D9,DA,DE.otf
+++ b/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints-retain-gids.D7,D8,D9,DA,DE.otf
Binary files differ
diff --git a/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints.1FC,21,41,20,62,63.otf b/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints.1FC,21,41,20,62,63.otf
index c600cd3..54fb440 100644
--- a/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints.1FC,21,41,20,62,63.otf
+++ b/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints.1FC,21,41,20,62,63.otf
Binary files differ
diff --git a/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints.61,62,63.otf b/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints.61,62,63.otf
index 6900288..7a7aa04 100644
--- a/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints.61,62,63.otf
+++ b/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints.61,62,63.otf
Binary files differ
diff --git a/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints.D7,D8,D9,DA,DE.otf b/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints.D7,D8,D9,DA,DE.otf
index 03785e1..e4ace2d 100644
--- a/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints.D7,D8,D9,DA,DE.otf
+++ b/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.drop-hints.D7,D8,D9,DA,DE.otf
Binary files differ
diff --git a/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.retain-gids.1FC,21,41,20,62,63.otf b/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.retain-gids.1FC,21,41,20,62,63.otf
index cfbe2ef..54ac396 100644
--- a/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.retain-gids.1FC,21,41,20,62,63.otf
+++ b/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.retain-gids.1FC,21,41,20,62,63.otf
Binary files differ
diff --git a/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.retain-gids.61,62,63.otf b/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.retain-gids.61,62,63.otf
index b5111f1..42b501f 100644
--- a/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.retain-gids.61,62,63.otf
+++ b/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.retain-gids.61,62,63.otf
Binary files differ
diff --git a/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.retain-gids.D7,D8,D9,DA,DE.otf b/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.retain-gids.D7,D8,D9,DA,DE.otf
index fc34389..4fc733a 100644
--- a/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.retain-gids.D7,D8,D9,DA,DE.otf
+++ b/test/subset/data/expected/cff-full-font/SourceSansPro-Regular.retain-gids.D7,D8,D9,DA,DE.otf
Binary files differ
diff --git a/test/subset/data/expected/full-font/Roboto-Regular.default.1FC,21,41,20,62,63.ttf b/test/subset/data/expected/full-font/Roboto-Regular.default.1FC,21,41,20,62,63.ttf
index e644241..63cbe61 100644
--- a/test/subset/data/expected/full-font/Roboto-Regular.default.1FC,21,41,20,62,63.ttf
+++ b/test/subset/data/expected/full-font/Roboto-Regular.default.1FC,21,41,20,62,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/full-font/Roboto-Regular.default.61,62,63.ttf b/test/subset/data/expected/full-font/Roboto-Regular.default.61,62,63.ttf
index 32340c4..57fc022 100644
--- a/test/subset/data/expected/full-font/Roboto-Regular.default.61,62,63.ttf
+++ b/test/subset/data/expected/full-font/Roboto-Regular.default.61,62,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/full-font/Roboto-Regular.default.D7,D8,D9,DA,DE.ttf b/test/subset/data/expected/full-font/Roboto-Regular.default.D7,D8,D9,DA,DE.ttf
index 97863b6..f5adaef 100644
--- a/test/subset/data/expected/full-font/Roboto-Regular.default.D7,D8,D9,DA,DE.ttf
+++ b/test/subset/data/expected/full-font/Roboto-Regular.default.D7,D8,D9,DA,DE.ttf
Binary files differ
diff --git a/test/subset/data/expected/full-font/Roboto-Regular.drop-hints.1FC,21,41,20,62,63.ttf b/test/subset/data/expected/full-font/Roboto-Regular.drop-hints.1FC,21,41,20,62,63.ttf
index c51a5e4..4ee0e5c 100644
--- a/test/subset/data/expected/full-font/Roboto-Regular.drop-hints.1FC,21,41,20,62,63.ttf
+++ b/test/subset/data/expected/full-font/Roboto-Regular.drop-hints.1FC,21,41,20,62,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/full-font/Roboto-Regular.drop-hints.61,62,63.ttf b/test/subset/data/expected/full-font/Roboto-Regular.drop-hints.61,62,63.ttf
index 38cb8f7..ff10e0e 100644
--- a/test/subset/data/expected/full-font/Roboto-Regular.drop-hints.61,62,63.ttf
+++ b/test/subset/data/expected/full-font/Roboto-Regular.drop-hints.61,62,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/full-font/Roboto-Regular.drop-hints.D7,D8,D9,DA,DE.ttf b/test/subset/data/expected/full-font/Roboto-Regular.drop-hints.D7,D8,D9,DA,DE.ttf
index 8c7a341..2ec9e5b 100644
--- a/test/subset/data/expected/full-font/Roboto-Regular.drop-hints.D7,D8,D9,DA,DE.ttf
+++ b/test/subset/data/expected/full-font/Roboto-Regular.drop-hints.D7,D8,D9,DA,DE.ttf
Binary files differ
diff --git a/test/subset/data/expected/full-font/SourceSerifVariable-Roman.default.1FC,21,41,20,62,63.ttf b/test/subset/data/expected/full-font/SourceSerifVariable-Roman.default.1FC,21,41,20,62,63.ttf
index a8c7e64..f871dcf 100644
--- a/test/subset/data/expected/full-font/SourceSerifVariable-Roman.default.1FC,21,41,20,62,63.ttf
+++ b/test/subset/data/expected/full-font/SourceSerifVariable-Roman.default.1FC,21,41,20,62,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/full-font/SourceSerifVariable-Roman.default.61,62,63.ttf b/test/subset/data/expected/full-font/SourceSerifVariable-Roman.default.61,62,63.ttf
index 36825cc..1d0d6eb 100644
--- a/test/subset/data/expected/full-font/SourceSerifVariable-Roman.default.61,62,63.ttf
+++ b/test/subset/data/expected/full-font/SourceSerifVariable-Roman.default.61,62,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/full-font/SourceSerifVariable-Roman.default.D7,D8,D9,DA,DE.ttf b/test/subset/data/expected/full-font/SourceSerifVariable-Roman.default.D7,D8,D9,DA,DE.ttf
index 34cb87a..72f5a11 100644
--- a/test/subset/data/expected/full-font/SourceSerifVariable-Roman.default.D7,D8,D9,DA,DE.ttf
+++ b/test/subset/data/expected/full-font/SourceSerifVariable-Roman.default.D7,D8,D9,DA,DE.ttf
Binary files differ
diff --git a/test/subset/data/expected/full-font/SourceSerifVariable-Roman.drop-hints.1FC,21,41,20,62,63.ttf b/test/subset/data/expected/full-font/SourceSerifVariable-Roman.drop-hints.1FC,21,41,20,62,63.ttf
index 7fe00ab..df354f5 100644
--- a/test/subset/data/expected/full-font/SourceSerifVariable-Roman.drop-hints.1FC,21,41,20,62,63.ttf
+++ b/test/subset/data/expected/full-font/SourceSerifVariable-Roman.drop-hints.1FC,21,41,20,62,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/full-font/SourceSerifVariable-Roman.drop-hints.61,62,63.ttf b/test/subset/data/expected/full-font/SourceSerifVariable-Roman.drop-hints.61,62,63.ttf
index 36825cc..1d0d6eb 100644
--- a/test/subset/data/expected/full-font/SourceSerifVariable-Roman.drop-hints.61,62,63.ttf
+++ b/test/subset/data/expected/full-font/SourceSerifVariable-Roman.drop-hints.61,62,63.ttf
Binary files differ
diff --git a/test/subset/data/expected/full-font/SourceSerifVariable-Roman.drop-hints.D7,D8,D9,DA,DE.ttf b/test/subset/data/expected/full-font/SourceSerifVariable-Roman.drop-hints.D7,D8,D9,DA,DE.ttf
index 34cb87a..72f5a11 100644
--- a/test/subset/data/expected/full-font/SourceSerifVariable-Roman.drop-hints.D7,D8,D9,DA,DE.ttf
+++ b/test/subset/data/expected/full-font/SourceSerifVariable-Roman.drop-hints.D7,D8,D9,DA,DE.ttf
Binary files differ
diff --git a/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.default.41,42,43.otf b/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.default.41,42,43.otf
index b1a0b3c..1381f88 100644
--- a/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.default.41,42,43.otf
+++ b/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.default.41,42,43.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.default.41,42.otf b/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.default.41,42.otf
index b070e2b..761a65e 100644
--- a/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.default.41,42.otf
+++ b/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.default.41,42.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.default.retain-all-codepoint.otf b/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.default.retain-all-codepoint.otf
index 6354eff..b8f6ea7 100644
--- a/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.default.retain-all-codepoint.otf
+++ b/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.default.retain-all-codepoint.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.retain-gids.41,42,43.otf b/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.retain-gids.41,42,43.otf
index 41f4ff4..21bc234 100644
--- a/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.retain-gids.41,42,43.otf
+++ b/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.retain-gids.41,42,43.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.retain-gids.41,42.otf b/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.retain-gids.41,42.otf
index 67e87dc..67b0d99 100644
--- a/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.retain-gids.41,42.otf
+++ b/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.retain-gids.41,42.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.retain-gids.retain-all-codepoint.otf b/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.retain-gids.retain-all-codepoint.otf
index 6354eff..b8f6ea7 100644
--- a/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.retain-gids.retain-all-codepoint.otf
+++ b/test/subset/data/expected/layout.context/gpos_context1_multiple_subrules_f1.retain-gids.retain-all-codepoint.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.default.41,42,43.otf b/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.default.41,42,43.otf
index 3deac41..b71f54c 100644
--- a/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.default.41,42,43.otf
+++ b/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.default.41,42,43.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.default.41,42.otf b/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.default.41,42.otf
index 5f0ded3..d0ce4a3 100644
--- a/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.default.41,42.otf
+++ b/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.default.41,42.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.default.retain-all-codepoint.otf b/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.default.retain-all-codepoint.otf
index 0691569..4a992b8 100644
--- a/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.default.retain-all-codepoint.otf
+++ b/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.default.retain-all-codepoint.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.retain-gids.41,42,43.otf b/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.retain-gids.41,42,43.otf
index 520a373..8cc2769 100644
--- a/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.retain-gids.41,42,43.otf
+++ b/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.retain-gids.41,42,43.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.retain-gids.41,42.otf b/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.retain-gids.41,42.otf
index b9e8c99..1a8d71a 100644
--- a/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.retain-gids.41,42.otf
+++ b/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.retain-gids.41,42.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.retain-gids.retain-all-codepoint.otf b/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.retain-gids.retain-all-codepoint.otf
index 0691569..4a992b8 100644
--- a/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.retain-gids.retain-all-codepoint.otf
+++ b/test/subset/data/expected/layout.context/gpos_context2_multiple_subrules_f1.retain-gids.retain-all-codepoint.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.context/gpos_context3_simple_f1.default.41,42,43.otf b/test/subset/data/expected/layout.context/gpos_context3_simple_f1.default.41,42,43.otf
index 7c11995..d6166c0 100644
--- a/test/subset/data/expected/layout.context/gpos_context3_simple_f1.default.41,42,43.otf
+++ b/test/subset/data/expected/layout.context/gpos_context3_simple_f1.default.41,42,43.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.context/gpos_context3_simple_f1.default.retain-all-codepoint.otf b/test/subset/data/expected/layout.context/gpos_context3_simple_f1.default.retain-all-codepoint.otf
index 684e991..77c2358 100644
--- a/test/subset/data/expected/layout.context/gpos_context3_simple_f1.default.retain-all-codepoint.otf
+++ b/test/subset/data/expected/layout.context/gpos_context3_simple_f1.default.retain-all-codepoint.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.context/gpos_context3_simple_f1.retain-gids.41,42,43.otf b/test/subset/data/expected/layout.context/gpos_context3_simple_f1.retain-gids.41,42,43.otf
index ab85997..1422fa0 100644
--- a/test/subset/data/expected/layout.context/gpos_context3_simple_f1.retain-gids.41,42,43.otf
+++ b/test/subset/data/expected/layout.context/gpos_context3_simple_f1.retain-gids.41,42,43.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.context/gpos_context3_simple_f1.retain-gids.retain-all-codepoint.otf b/test/subset/data/expected/layout.context/gpos_context3_simple_f1.retain-gids.retain-all-codepoint.otf
index 684e991..77c2358 100644
--- a/test/subset/data/expected/layout.context/gpos_context3_simple_f1.retain-gids.retain-all-codepoint.otf
+++ b/test/subset/data/expected/layout.context/gpos_context3_simple_f1.retain-gids.retain-all-codepoint.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.default.41,42,43,57.otf b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.default.41,42,43,57.otf
index 574824a..81de55d 100644
--- a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.default.41,42,43,57.otf
+++ b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.default.41,42,43,57.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.default.41,42,43.otf b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.default.41,42,43.otf
index d946c63..d5f0aa4 100644
--- a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.default.41,42,43.otf
+++ b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.default.41,42,43.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.default.41,42.otf b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.default.41,42.otf
index aa13f11..5ac74e1 100644
--- a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.default.41,42.otf
+++ b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.default.41,42.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.default.41,56,57.otf b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.default.41,56,57.otf
index eb57e40..c828f55 100644
--- a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.default.41,56,57.otf
+++ b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.default.41,56,57.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.default.41.otf b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.default.41.otf
index 8c351f7..1ec8c55 100644
--- a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.default.41.otf
+++ b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.default.41.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.default.42,57.otf b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.default.42,57.otf
index 7cc801a..5df4524 100644
--- a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.default.42,57.otf
+++ b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.default.42,57.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.drop-hints.41,42,43,57.otf b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.drop-hints.41,42,43,57.otf
index 9bd8d65..53a5e58 100644
--- a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.drop-hints.41,42,43,57.otf
+++ b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.drop-hints.41,42,43,57.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.drop-hints.41,42,43.otf b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.drop-hints.41,42,43.otf
index 08f5472..035fbbe 100644
--- a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.drop-hints.41,42,43.otf
+++ b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.drop-hints.41,42,43.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.drop-hints.41,42.otf b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.drop-hints.41,42.otf
index f51c9c0..c4430ed 100644
--- a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.drop-hints.41,42.otf
+++ b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.drop-hints.41,42.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.drop-hints.41,56,57.otf b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.drop-hints.41,56,57.otf
index 97d8503..c3cb256 100644
--- a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.drop-hints.41,56,57.otf
+++ b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.drop-hints.41,56,57.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.drop-hints.41.otf b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.drop-hints.41.otf
index 3a8ea59..0554052 100644
--- a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.drop-hints.41.otf
+++ b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.drop-hints.41.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.drop-hints.42,57.otf b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.drop-hints.42,57.otf
index 88abc1c..01311b2 100644
--- a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.drop-hints.42,57.otf
+++ b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.drop-hints.42,57.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.keep-gdef-gpos.41,42,43,57.otf b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.keep-gdef-gpos.41,42,43,57.otf
index 574824a..81de55d 100644
--- a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.keep-gdef-gpos.41,42,43,57.otf
+++ b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.keep-gdef-gpos.41,42,43,57.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.keep-gdef-gpos.41,42,43.otf b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.keep-gdef-gpos.41,42,43.otf
index d946c63..d5f0aa4 100644
--- a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.keep-gdef-gpos.41,42,43.otf
+++ b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.keep-gdef-gpos.41,42,43.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.keep-gdef-gpos.41,42.otf b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.keep-gdef-gpos.41,42.otf
index aa13f11..5ac74e1 100644
--- a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.keep-gdef-gpos.41,42.otf
+++ b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.keep-gdef-gpos.41,42.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.keep-gdef-gpos.41,56,57.otf b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.keep-gdef-gpos.41,56,57.otf
index eb57e40..c828f55 100644
--- a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.keep-gdef-gpos.41,56,57.otf
+++ b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.keep-gdef-gpos.41,56,57.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.keep-gdef-gpos.41.otf b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.keep-gdef-gpos.41.otf
index 8c351f7..1ec8c55 100644
--- a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.keep-gdef-gpos.41.otf
+++ b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.keep-gdef-gpos.41.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.keep-gdef-gpos.42,57.otf b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.keep-gdef-gpos.42,57.otf
index 7cc801a..5df4524 100644
--- a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.keep-gdef-gpos.42,57.otf
+++ b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.keep-gdef-gpos.42,57.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gdef/Roboto-Regular.default.41,42,43.ttf b/test/subset/data/expected/layout.gdef/Roboto-Regular.default.41,42,43.ttf
index a4a5df1..af99a82 100644
--- a/test/subset/data/expected/layout.gdef/Roboto-Regular.default.41,42,43.ttf
+++ b/test/subset/data/expected/layout.gdef/Roboto-Regular.default.41,42,43.ttf
Binary files differ
diff --git a/test/subset/data/expected/layout.gdef/Roboto-Regular.drop-hints.41,42,43.ttf b/test/subset/data/expected/layout.gdef/Roboto-Regular.drop-hints.41,42,43.ttf
index 762edc7..db31582 100644
--- a/test/subset/data/expected/layout.gdef/Roboto-Regular.drop-hints.41,42,43.ttf
+++ b/test/subset/data/expected/layout.gdef/Roboto-Regular.drop-hints.41,42,43.ttf
Binary files differ
diff --git a/test/subset/data/expected/layout.gdef/Roboto-Regular.keep-gdef-gpos.41,42,43.ttf b/test/subset/data/expected/layout.gdef/Roboto-Regular.keep-gdef-gpos.41,42,43.ttf
index a4a5df1..af99a82 100644
--- a/test/subset/data/expected/layout.gdef/Roboto-Regular.keep-gdef-gpos.41,42,43.ttf
+++ b/test/subset/data/expected/layout.gdef/Roboto-Regular.keep-gdef-gpos.41,42,43.ttf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos/gpos1_2_font.default.41,43.otf b/test/subset/data/expected/layout.gpos/gpos1_2_font.default.41,43.otf
index 5277309..a8dfffd 100644
--- a/test/subset/data/expected/layout.gpos/gpos1_2_font.default.41,43.otf
+++ b/test/subset/data/expected/layout.gpos/gpos1_2_font.default.41,43.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos/gpos1_2_font.default.41,46.otf b/test/subset/data/expected/layout.gpos/gpos1_2_font.default.41,46.otf
index 5a74887..791a9a8 100644
--- a/test/subset/data/expected/layout.gpos/gpos1_2_font.default.41,46.otf
+++ b/test/subset/data/expected/layout.gpos/gpos1_2_font.default.41,46.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos/gpos1_2_font.default.41.otf b/test/subset/data/expected/layout.gpos/gpos1_2_font.default.41.otf
index 1caeeab..83c0771 100644
--- a/test/subset/data/expected/layout.gpos/gpos1_2_font.default.41.otf
+++ b/test/subset/data/expected/layout.gpos/gpos1_2_font.default.41.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos/gpos1_2_font.default.43,46.otf b/test/subset/data/expected/layout.gpos/gpos1_2_font.default.43,46.otf
index c429dc9..e0cf952 100644
--- a/test/subset/data/expected/layout.gpos/gpos1_2_font.default.43,46.otf
+++ b/test/subset/data/expected/layout.gpos/gpos1_2_font.default.43,46.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos/gpos1_2_font.default.retain-all-codepoint.otf b/test/subset/data/expected/layout.gpos/gpos1_2_font.default.retain-all-codepoint.otf
index 2d6962b..87be9ac 100644
--- a/test/subset/data/expected/layout.gpos/gpos1_2_font.default.retain-all-codepoint.otf
+++ b/test/subset/data/expected/layout.gpos/gpos1_2_font.default.retain-all-codepoint.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos/gpos1_2_font.retain-gids.41,43.otf b/test/subset/data/expected/layout.gpos/gpos1_2_font.retain-gids.41,43.otf
index 6b2879f..c40db8e 100644
--- a/test/subset/data/expected/layout.gpos/gpos1_2_font.retain-gids.41,43.otf
+++ b/test/subset/data/expected/layout.gpos/gpos1_2_font.retain-gids.41,43.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos/gpos1_2_font.retain-gids.41,46.otf b/test/subset/data/expected/layout.gpos/gpos1_2_font.retain-gids.41,46.otf
index eebb3e1..bf19981 100644
--- a/test/subset/data/expected/layout.gpos/gpos1_2_font.retain-gids.41,46.otf
+++ b/test/subset/data/expected/layout.gpos/gpos1_2_font.retain-gids.41,46.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos/gpos1_2_font.retain-gids.41.otf b/test/subset/data/expected/layout.gpos/gpos1_2_font.retain-gids.41.otf
index e56bbf4..84cdca6 100644
--- a/test/subset/data/expected/layout.gpos/gpos1_2_font.retain-gids.41.otf
+++ b/test/subset/data/expected/layout.gpos/gpos1_2_font.retain-gids.41.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos/gpos1_2_font.retain-gids.43,46.otf b/test/subset/data/expected/layout.gpos/gpos1_2_font.retain-gids.43,46.otf
index c271bde..7d9bed2 100644
--- a/test/subset/data/expected/layout.gpos/gpos1_2_font.retain-gids.43,46.otf
+++ b/test/subset/data/expected/layout.gpos/gpos1_2_font.retain-gids.43,46.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos/gpos1_2_font.retain-gids.retain-all-codepoint.otf b/test/subset/data/expected/layout.gpos/gpos1_2_font.retain-gids.retain-all-codepoint.otf
index 2d6962b..87be9ac 100644
--- a/test/subset/data/expected/layout.gpos/gpos1_2_font.retain-gids.retain-all-codepoint.otf
+++ b/test/subset/data/expected/layout.gpos/gpos1_2_font.retain-gids.retain-all-codepoint.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos2/gpos2_1_font7.default.21,23,25.otf b/test/subset/data/expected/layout.gpos2/gpos2_1_font7.default.21,23,25.otf
index 47fea1a..42b13de 100644
--- a/test/subset/data/expected/layout.gpos2/gpos2_1_font7.default.21,23,25.otf
+++ b/test/subset/data/expected/layout.gpos2/gpos2_1_font7.default.21,23,25.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos2/gpos2_1_font7.default.21,23.otf b/test/subset/data/expected/layout.gpos2/gpos2_1_font7.default.21,23.otf
index 99e813f..54aa03b 100644
--- a/test/subset/data/expected/layout.gpos2/gpos2_1_font7.default.21,23.otf
+++ b/test/subset/data/expected/layout.gpos2/gpos2_1_font7.default.21,23.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos2/gpos2_1_font7.default.retain-all-codepoint.otf b/test/subset/data/expected/layout.gpos2/gpos2_1_font7.default.retain-all-codepoint.otf
index 8f18b89..4354aa7 100644
--- a/test/subset/data/expected/layout.gpos2/gpos2_1_font7.default.retain-all-codepoint.otf
+++ b/test/subset/data/expected/layout.gpos2/gpos2_1_font7.default.retain-all-codepoint.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos2/gpos2_1_font7.retain-gids.21,23,25.otf b/test/subset/data/expected/layout.gpos2/gpos2_1_font7.retain-gids.21,23,25.otf
index 49039fe..10dff4c 100644
--- a/test/subset/data/expected/layout.gpos2/gpos2_1_font7.retain-gids.21,23,25.otf
+++ b/test/subset/data/expected/layout.gpos2/gpos2_1_font7.retain-gids.21,23,25.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos2/gpos2_1_font7.retain-gids.21,23.otf b/test/subset/data/expected/layout.gpos2/gpos2_1_font7.retain-gids.21,23.otf
index 68cb0ec..ccc86c8 100644
--- a/test/subset/data/expected/layout.gpos2/gpos2_1_font7.retain-gids.21,23.otf
+++ b/test/subset/data/expected/layout.gpos2/gpos2_1_font7.retain-gids.21,23.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos2/gpos2_1_font7.retain-gids.retain-all-codepoint.otf b/test/subset/data/expected/layout.gpos2/gpos2_1_font7.retain-gids.retain-all-codepoint.otf
index 8f18b89..4354aa7 100644
--- a/test/subset/data/expected/layout.gpos2/gpos2_1_font7.retain-gids.retain-all-codepoint.otf
+++ b/test/subset/data/expected/layout.gpos2/gpos2_1_font7.retain-gids.retain-all-codepoint.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos2/gpos2_2_font5.default.21,23,25.otf b/test/subset/data/expected/layout.gpos2/gpos2_2_font5.default.21,23,25.otf
index f227d5a..4904307 100644
--- a/test/subset/data/expected/layout.gpos2/gpos2_2_font5.default.21,23,25.otf
+++ b/test/subset/data/expected/layout.gpos2/gpos2_2_font5.default.21,23,25.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos2/gpos2_2_font5.default.21,23.otf b/test/subset/data/expected/layout.gpos2/gpos2_2_font5.default.21,23.otf
index a785d49..b3306fc 100644
--- a/test/subset/data/expected/layout.gpos2/gpos2_2_font5.default.21,23.otf
+++ b/test/subset/data/expected/layout.gpos2/gpos2_2_font5.default.21,23.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos2/gpos2_2_font5.default.retain-all-codepoint.otf b/test/subset/data/expected/layout.gpos2/gpos2_2_font5.default.retain-all-codepoint.otf
index aebc396..1098f7c 100644
--- a/test/subset/data/expected/layout.gpos2/gpos2_2_font5.default.retain-all-codepoint.otf
+++ b/test/subset/data/expected/layout.gpos2/gpos2_2_font5.default.retain-all-codepoint.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos2/gpos2_2_font5.retain-gids.21,23,25.otf b/test/subset/data/expected/layout.gpos2/gpos2_2_font5.retain-gids.21,23,25.otf
index 77c408c..03c56c4 100644
--- a/test/subset/data/expected/layout.gpos2/gpos2_2_font5.retain-gids.21,23,25.otf
+++ b/test/subset/data/expected/layout.gpos2/gpos2_2_font5.retain-gids.21,23,25.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos2/gpos2_2_font5.retain-gids.21,23.otf b/test/subset/data/expected/layout.gpos2/gpos2_2_font5.retain-gids.21,23.otf
index 9abdd32..2c86996 100644
--- a/test/subset/data/expected/layout.gpos2/gpos2_2_font5.retain-gids.21,23.otf
+++ b/test/subset/data/expected/layout.gpos2/gpos2_2_font5.retain-gids.21,23.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos2/gpos2_2_font5.retain-gids.retain-all-codepoint.otf b/test/subset/data/expected/layout.gpos2/gpos2_2_font5.retain-gids.retain-all-codepoint.otf
index aebc396..1098f7c 100644
--- a/test/subset/data/expected/layout.gpos2/gpos2_2_font5.retain-gids.retain-all-codepoint.otf
+++ b/test/subset/data/expected/layout.gpos2/gpos2_2_font5.retain-gids.retain-all-codepoint.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos3/gpos3_font3.default.28,29.otf b/test/subset/data/expected/layout.gpos3/gpos3_font3.default.28,29.otf
index f3ca19a..184d5cb 100644
--- a/test/subset/data/expected/layout.gpos3/gpos3_font3.default.28,29.otf
+++ b/test/subset/data/expected/layout.gpos3/gpos3_font3.default.28,29.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos3/gpos3_font3.default.28,2B.otf b/test/subset/data/expected/layout.gpos3/gpos3_font3.default.28,2B.otf
index 2a8114a..1f5e983 100644
--- a/test/subset/data/expected/layout.gpos3/gpos3_font3.default.28,2B.otf
+++ b/test/subset/data/expected/layout.gpos3/gpos3_font3.default.28,2B.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos3/gpos3_font3.default.29,2B.otf b/test/subset/data/expected/layout.gpos3/gpos3_font3.default.29,2B.otf
index 1426d50..adf2d0a 100644
--- a/test/subset/data/expected/layout.gpos3/gpos3_font3.default.29,2B.otf
+++ b/test/subset/data/expected/layout.gpos3/gpos3_font3.default.29,2B.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos3/gpos3_font3.default.retain-all-codepoint.otf b/test/subset/data/expected/layout.gpos3/gpos3_font3.default.retain-all-codepoint.otf
index 8dbc820..3bc9b87 100644
--- a/test/subset/data/expected/layout.gpos3/gpos3_font3.default.retain-all-codepoint.otf
+++ b/test/subset/data/expected/layout.gpos3/gpos3_font3.default.retain-all-codepoint.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos3/gpos3_font3.retain-gids.28,29.otf b/test/subset/data/expected/layout.gpos3/gpos3_font3.retain-gids.28,29.otf
index 17aa6d8..bd02afe 100644
--- a/test/subset/data/expected/layout.gpos3/gpos3_font3.retain-gids.28,29.otf
+++ b/test/subset/data/expected/layout.gpos3/gpos3_font3.retain-gids.28,29.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos3/gpos3_font3.retain-gids.28,2B.otf b/test/subset/data/expected/layout.gpos3/gpos3_font3.retain-gids.28,2B.otf
index 9e6f2eb..8560816 100644
--- a/test/subset/data/expected/layout.gpos3/gpos3_font3.retain-gids.28,2B.otf
+++ b/test/subset/data/expected/layout.gpos3/gpos3_font3.retain-gids.28,2B.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos3/gpos3_font3.retain-gids.29,2B.otf b/test/subset/data/expected/layout.gpos3/gpos3_font3.retain-gids.29,2B.otf
index 0187ed7..dea73b7 100644
--- a/test/subset/data/expected/layout.gpos3/gpos3_font3.retain-gids.29,2B.otf
+++ b/test/subset/data/expected/layout.gpos3/gpos3_font3.retain-gids.29,2B.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos3/gpos3_font3.retain-gids.retain-all-codepoint.otf b/test/subset/data/expected/layout.gpos3/gpos3_font3.retain-gids.retain-all-codepoint.otf
index 8dbc820..3bc9b87 100644
--- a/test/subset/data/expected/layout.gpos3/gpos3_font3.retain-gids.retain-all-codepoint.otf
+++ b/test/subset/data/expected/layout.gpos3/gpos3_font3.retain-gids.retain-all-codepoint.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.default.41,42,43,44.otf b/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.default.41,42,43,44.otf
index 5447973..dafff20 100644
--- a/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.default.41,42,43,44.otf
+++ b/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.default.41,42,43,44.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.default.41,42,43,45.otf b/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.default.41,42,43,45.otf
index e6c891b..2fa69c9 100644
--- a/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.default.41,42,43,45.otf
+++ b/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.default.41,42,43,45.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.default.41,42,43.otf b/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.default.41,42,43.otf
index 127f798..5721885 100644
--- a/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.default.41,42,43.otf
+++ b/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.default.41,42,43.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.default.41,43,44,45,46.otf b/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.default.41,43,44,45,46.otf
index 5f47542..1021815 100644
--- a/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.default.41,43,44,45,46.otf
+++ b/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.default.41,43,44,45,46.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.default.41,43,44.otf b/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.default.41,43,44.otf
index 8fe4d63..0763638 100644
--- a/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.default.41,43,44.otf
+++ b/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.default.41,43,44.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.default.41,43,45.otf b/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.default.41,43,45.otf
index 147ed57..e1bbdf5 100644
--- a/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.default.41,43,45.otf
+++ b/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.default.41,43,45.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.default.41,43.otf b/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.default.41,43.otf
index 1b0f243..f4e2b3b 100644
--- a/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.default.41,43.otf
+++ b/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.default.41,43.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.default.retain-all-codepoint.otf b/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.default.retain-all-codepoint.otf
index 3765d20..bc25cb8 100644
--- a/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.default.retain-all-codepoint.otf
+++ b/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.default.retain-all-codepoint.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.retain-gids.41,42,43,44.otf b/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.retain-gids.41,42,43,44.otf
index 1c2e5a4..1f00f43 100644
--- a/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.retain-gids.41,42,43,44.otf
+++ b/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.retain-gids.41,42,43,44.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.retain-gids.41,42,43,45.otf b/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.retain-gids.41,42,43,45.otf
index 2fed45d..0b3d17d 100644
--- a/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.retain-gids.41,42,43,45.otf
+++ b/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.retain-gids.41,42,43,45.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.retain-gids.41,42,43.otf b/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.retain-gids.41,42,43.otf
index 0007615..cfd5f1e 100644
--- a/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.retain-gids.41,42,43.otf
+++ b/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.retain-gids.41,42,43.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.retain-gids.41,43,44,45,46.otf b/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.retain-gids.41,43,44,45,46.otf
index 73315f3..8a0e974 100644
--- a/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.retain-gids.41,43,44,45,46.otf
+++ b/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.retain-gids.41,43,44,45,46.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.retain-gids.41,43,44.otf b/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.retain-gids.41,43,44.otf
index 4005a0d..798f561 100644
--- a/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.retain-gids.41,43,44.otf
+++ b/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.retain-gids.41,43,44.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.retain-gids.41,43,45.otf b/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.retain-gids.41,43,45.otf
index c9f261c..73b0155 100644
--- a/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.retain-gids.41,43,45.otf
+++ b/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.retain-gids.41,43,45.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.retain-gids.41,43.otf b/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.retain-gids.41,43.otf
index 9ed6a9b..65a3231 100644
--- a/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.retain-gids.41,43.otf
+++ b/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.retain-gids.41,43.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.retain-gids.retain-all-codepoint.otf b/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.retain-gids.retain-all-codepoint.otf
index 3765d20..bc25cb8 100644
--- a/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.retain-gids.retain-all-codepoint.otf
+++ b/test/subset/data/expected/layout.gpos4/gpos4_multiple_anchors_1.retain-gids.retain-all-codepoint.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos5/gpos5_font1.default.41,42,43,44.otf b/test/subset/data/expected/layout.gpos5/gpos5_font1.default.41,42,43,44.otf
index 3749d35..9b3e75d 100644
--- a/test/subset/data/expected/layout.gpos5/gpos5_font1.default.41,42,43,44.otf
+++ b/test/subset/data/expected/layout.gpos5/gpos5_font1.default.41,42,43,44.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos5/gpos5_font1.default.41,42,43,45.otf b/test/subset/data/expected/layout.gpos5/gpos5_font1.default.41,42,43,45.otf
index 5d4fcee..38d95cb 100644
--- a/test/subset/data/expected/layout.gpos5/gpos5_font1.default.41,42,43,45.otf
+++ b/test/subset/data/expected/layout.gpos5/gpos5_font1.default.41,42,43,45.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos5/gpos5_font1.default.41,42,43.otf b/test/subset/data/expected/layout.gpos5/gpos5_font1.default.41,42,43.otf
index 54fc068..d17d9d8 100644
--- a/test/subset/data/expected/layout.gpos5/gpos5_font1.default.41,42,43.otf
+++ b/test/subset/data/expected/layout.gpos5/gpos5_font1.default.41,42,43.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos5/gpos5_font1.default.41,42,44.otf b/test/subset/data/expected/layout.gpos5/gpos5_font1.default.41,42,44.otf
index d4c95a6..5607d82 100644
--- a/test/subset/data/expected/layout.gpos5/gpos5_font1.default.41,42,44.otf
+++ b/test/subset/data/expected/layout.gpos5/gpos5_font1.default.41,42,44.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos5/gpos5_font1.default.41,42,45.otf b/test/subset/data/expected/layout.gpos5/gpos5_font1.default.41,42,45.otf
index 656792d..1297db2 100644
--- a/test/subset/data/expected/layout.gpos5/gpos5_font1.default.41,42,45.otf
+++ b/test/subset/data/expected/layout.gpos5/gpos5_font1.default.41,42,45.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos5/gpos5_font1.default.41,42.otf b/test/subset/data/expected/layout.gpos5/gpos5_font1.default.41,42.otf
index cc2f5f7..c016e21 100644
--- a/test/subset/data/expected/layout.gpos5/gpos5_font1.default.41,42.otf
+++ b/test/subset/data/expected/layout.gpos5/gpos5_font1.default.41,42.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos5/gpos5_font1.default.retain-all-codepoint.otf b/test/subset/data/expected/layout.gpos5/gpos5_font1.default.retain-all-codepoint.otf
index 2a82c60..65ee41a 100644
--- a/test/subset/data/expected/layout.gpos5/gpos5_font1.default.retain-all-codepoint.otf
+++ b/test/subset/data/expected/layout.gpos5/gpos5_font1.default.retain-all-codepoint.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos5/gpos5_font1.retain-gids.41,42,43,44.otf b/test/subset/data/expected/layout.gpos5/gpos5_font1.retain-gids.41,42,43,44.otf
index 13a1fb7..db0e80c 100644
--- a/test/subset/data/expected/layout.gpos5/gpos5_font1.retain-gids.41,42,43,44.otf
+++ b/test/subset/data/expected/layout.gpos5/gpos5_font1.retain-gids.41,42,43,44.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos5/gpos5_font1.retain-gids.41,42,43,45.otf b/test/subset/data/expected/layout.gpos5/gpos5_font1.retain-gids.41,42,43,45.otf
index 5153358..f751202 100644
--- a/test/subset/data/expected/layout.gpos5/gpos5_font1.retain-gids.41,42,43,45.otf
+++ b/test/subset/data/expected/layout.gpos5/gpos5_font1.retain-gids.41,42,43,45.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos5/gpos5_font1.retain-gids.41,42,43.otf b/test/subset/data/expected/layout.gpos5/gpos5_font1.retain-gids.41,42,43.otf
index b7a0bc6..513f331 100644
--- a/test/subset/data/expected/layout.gpos5/gpos5_font1.retain-gids.41,42,43.otf
+++ b/test/subset/data/expected/layout.gpos5/gpos5_font1.retain-gids.41,42,43.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos5/gpos5_font1.retain-gids.41,42,44.otf b/test/subset/data/expected/layout.gpos5/gpos5_font1.retain-gids.41,42,44.otf
index bb7d74b..14f79e3 100644
--- a/test/subset/data/expected/layout.gpos5/gpos5_font1.retain-gids.41,42,44.otf
+++ b/test/subset/data/expected/layout.gpos5/gpos5_font1.retain-gids.41,42,44.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos5/gpos5_font1.retain-gids.41,42,45.otf b/test/subset/data/expected/layout.gpos5/gpos5_font1.retain-gids.41,42,45.otf
index 0da7880..5b8c588 100644
--- a/test/subset/data/expected/layout.gpos5/gpos5_font1.retain-gids.41,42,45.otf
+++ b/test/subset/data/expected/layout.gpos5/gpos5_font1.retain-gids.41,42,45.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos5/gpos5_font1.retain-gids.41,42.otf b/test/subset/data/expected/layout.gpos5/gpos5_font1.retain-gids.41,42.otf
index 9b6e158..eb2937a 100644
--- a/test/subset/data/expected/layout.gpos5/gpos5_font1.retain-gids.41,42.otf
+++ b/test/subset/data/expected/layout.gpos5/gpos5_font1.retain-gids.41,42.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos5/gpos5_font1.retain-gids.retain-all-codepoint.otf b/test/subset/data/expected/layout.gpos5/gpos5_font1.retain-gids.retain-all-codepoint.otf
index 2a82c60..65ee41a 100644
--- a/test/subset/data/expected/layout.gpos5/gpos5_font1.retain-gids.retain-all-codepoint.otf
+++ b/test/subset/data/expected/layout.gpos5/gpos5_font1.retain-gids.retain-all-codepoint.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos6/gpos6_font1.default.41,42,43,44.otf b/test/subset/data/expected/layout.gpos6/gpos6_font1.default.41,42,43,44.otf
index 106c55a..ae9cd42 100644
--- a/test/subset/data/expected/layout.gpos6/gpos6_font1.default.41,42,43,44.otf
+++ b/test/subset/data/expected/layout.gpos6/gpos6_font1.default.41,42,43,44.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos6/gpos6_font1.default.41,42,43,45.otf b/test/subset/data/expected/layout.gpos6/gpos6_font1.default.41,42,43,45.otf
index ba37625..79487dc 100644
--- a/test/subset/data/expected/layout.gpos6/gpos6_font1.default.41,42,43,45.otf
+++ b/test/subset/data/expected/layout.gpos6/gpos6_font1.default.41,42,43,45.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos6/gpos6_font1.default.41,42,43.otf b/test/subset/data/expected/layout.gpos6/gpos6_font1.default.41,42,43.otf
index 8a6aa87..69a5df2 100644
--- a/test/subset/data/expected/layout.gpos6/gpos6_font1.default.41,42,43.otf
+++ b/test/subset/data/expected/layout.gpos6/gpos6_font1.default.41,42,43.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos6/gpos6_font1.default.41,43,44,45,46.otf b/test/subset/data/expected/layout.gpos6/gpos6_font1.default.41,43,44,45,46.otf
index 09e27e6..61258b5 100644
--- a/test/subset/data/expected/layout.gpos6/gpos6_font1.default.41,43,44,45,46.otf
+++ b/test/subset/data/expected/layout.gpos6/gpos6_font1.default.41,43,44,45,46.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos6/gpos6_font1.default.41,43,44.otf b/test/subset/data/expected/layout.gpos6/gpos6_font1.default.41,43,44.otf
index 48e8928..e77361a 100644
--- a/test/subset/data/expected/layout.gpos6/gpos6_font1.default.41,43,44.otf
+++ b/test/subset/data/expected/layout.gpos6/gpos6_font1.default.41,43,44.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos6/gpos6_font1.default.41,43,45.otf b/test/subset/data/expected/layout.gpos6/gpos6_font1.default.41,43,45.otf
index e4656fe..ebce489 100644
--- a/test/subset/data/expected/layout.gpos6/gpos6_font1.default.41,43,45.otf
+++ b/test/subset/data/expected/layout.gpos6/gpos6_font1.default.41,43,45.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos6/gpos6_font1.default.41,43.otf b/test/subset/data/expected/layout.gpos6/gpos6_font1.default.41,43.otf
index 5527d9f..82414b8 100644
--- a/test/subset/data/expected/layout.gpos6/gpos6_font1.default.41,43.otf
+++ b/test/subset/data/expected/layout.gpos6/gpos6_font1.default.41,43.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos6/gpos6_font1.default.retain-all-codepoint.otf b/test/subset/data/expected/layout.gpos6/gpos6_font1.default.retain-all-codepoint.otf
index 0feba1b..e8e961e 100644
--- a/test/subset/data/expected/layout.gpos6/gpos6_font1.default.retain-all-codepoint.otf
+++ b/test/subset/data/expected/layout.gpos6/gpos6_font1.default.retain-all-codepoint.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos6/gpos6_font1.retain-gids.41,42,43,44.otf b/test/subset/data/expected/layout.gpos6/gpos6_font1.retain-gids.41,42,43,44.otf
index 92d1e28..e3ea59f 100644
--- a/test/subset/data/expected/layout.gpos6/gpos6_font1.retain-gids.41,42,43,44.otf
+++ b/test/subset/data/expected/layout.gpos6/gpos6_font1.retain-gids.41,42,43,44.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos6/gpos6_font1.retain-gids.41,42,43,45.otf b/test/subset/data/expected/layout.gpos6/gpos6_font1.retain-gids.41,42,43,45.otf
index 28d5cb4..d076404 100644
--- a/test/subset/data/expected/layout.gpos6/gpos6_font1.retain-gids.41,42,43,45.otf
+++ b/test/subset/data/expected/layout.gpos6/gpos6_font1.retain-gids.41,42,43,45.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos6/gpos6_font1.retain-gids.41,42,43.otf b/test/subset/data/expected/layout.gpos6/gpos6_font1.retain-gids.41,42,43.otf
index 7d58a98..7117c66 100644
--- a/test/subset/data/expected/layout.gpos6/gpos6_font1.retain-gids.41,42,43.otf
+++ b/test/subset/data/expected/layout.gpos6/gpos6_font1.retain-gids.41,42,43.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos6/gpos6_font1.retain-gids.41,43,44,45,46.otf b/test/subset/data/expected/layout.gpos6/gpos6_font1.retain-gids.41,43,44,45,46.otf
index d944ebf..82bd9c1 100644
--- a/test/subset/data/expected/layout.gpos6/gpos6_font1.retain-gids.41,43,44,45,46.otf
+++ b/test/subset/data/expected/layout.gpos6/gpos6_font1.retain-gids.41,43,44,45,46.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos6/gpos6_font1.retain-gids.41,43,44.otf b/test/subset/data/expected/layout.gpos6/gpos6_font1.retain-gids.41,43,44.otf
index 7dc3d62..5b925f2 100644
--- a/test/subset/data/expected/layout.gpos6/gpos6_font1.retain-gids.41,43,44.otf
+++ b/test/subset/data/expected/layout.gpos6/gpos6_font1.retain-gids.41,43,44.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos6/gpos6_font1.retain-gids.41,43,45.otf b/test/subset/data/expected/layout.gpos6/gpos6_font1.retain-gids.41,43,45.otf
index f7727d4..0257f0e 100644
--- a/test/subset/data/expected/layout.gpos6/gpos6_font1.retain-gids.41,43,45.otf
+++ b/test/subset/data/expected/layout.gpos6/gpos6_font1.retain-gids.41,43,45.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos6/gpos6_font1.retain-gids.41,43.otf b/test/subset/data/expected/layout.gpos6/gpos6_font1.retain-gids.41,43.otf
index 7e564d5..5f9272c 100644
--- a/test/subset/data/expected/layout.gpos6/gpos6_font1.retain-gids.41,43.otf
+++ b/test/subset/data/expected/layout.gpos6/gpos6_font1.retain-gids.41,43.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos6/gpos6_font1.retain-gids.retain-all-codepoint.otf b/test/subset/data/expected/layout.gpos6/gpos6_font1.retain-gids.retain-all-codepoint.otf
index 0feba1b..e8e961e 100644
--- a/test/subset/data/expected/layout.gpos6/gpos6_font1.retain-gids.retain-all-codepoint.otf
+++ b/test/subset/data/expected/layout.gpos6/gpos6_font1.retain-gids.retain-all-codepoint.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos8.amiri/Amiri-Regular.default.627,644,623,62D,644,627,645,2E.ttf b/test/subset/data/expected/layout.gpos8.amiri/Amiri-Regular.default.627,644,623,62D,644,627,645,2E.ttf
index 9862336..469f75a 100644
--- a/test/subset/data/expected/layout.gpos8.amiri/Amiri-Regular.default.627,644,623,62D,644,627,645,2E.ttf
+++ b/test/subset/data/expected/layout.gpos8.amiri/Amiri-Regular.default.627,644,623,62D,644,627,645,2E.ttf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos8.amiri/Amiri-Regular.default.627,644,62D,628.ttf b/test/subset/data/expected/layout.gpos8.amiri/Amiri-Regular.default.627,644,62D,628.ttf
index 00f7803..c7a17fa 100644
--- a/test/subset/data/expected/layout.gpos8.amiri/Amiri-Regular.default.627,644,62D,628.ttf
+++ b/test/subset/data/expected/layout.gpos8.amiri/Amiri-Regular.default.627,644,62D,628.ttf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos8.amiri/Amiri-Regular.default.627,644.ttf b/test/subset/data/expected/layout.gpos8.amiri/Amiri-Regular.default.627,644.ttf
index c153715..8f18a69 100644
--- a/test/subset/data/expected/layout.gpos8.amiri/Amiri-Regular.default.627,644.ttf
+++ b/test/subset/data/expected/layout.gpos8.amiri/Amiri-Regular.default.627,644.ttf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos8.amiri/Amiri-Regular.default.633,645,627,621,20,644,627.ttf b/test/subset/data/expected/layout.gpos8.amiri/Amiri-Regular.default.633,645,627,621,20,644,627.ttf
index 0e5dd57..639a594 100644
--- a/test/subset/data/expected/layout.gpos8.amiri/Amiri-Regular.default.633,645,627,621,20,644,627.ttf
+++ b/test/subset/data/expected/layout.gpos8.amiri/Amiri-Regular.default.633,645,627,621,20,644,627.ttf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos8.amiri/Amiri-Regular.default.63A,64A,631.ttf b/test/subset/data/expected/layout.gpos8.amiri/Amiri-Regular.default.63A,64A,631.ttf
index 7d27cb6..9471024 100644
--- a/test/subset/data/expected/layout.gpos8.amiri/Amiri-Regular.default.63A,64A,631.ttf
+++ b/test/subset/data/expected/layout.gpos8.amiri/Amiri-Regular.default.63A,64A,631.ttf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos8.amiri/Amiri-Regular.retain-gids.627,644,623,62D,644,627,645,2E.ttf b/test/subset/data/expected/layout.gpos8.amiri/Amiri-Regular.retain-gids.627,644,623,62D,644,627,645,2E.ttf
index 494dee0..2860e2b 100644
--- a/test/subset/data/expected/layout.gpos8.amiri/Amiri-Regular.retain-gids.627,644,623,62D,644,627,645,2E.ttf
+++ b/test/subset/data/expected/layout.gpos8.amiri/Amiri-Regular.retain-gids.627,644,623,62D,644,627,645,2E.ttf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos8.amiri/Amiri-Regular.retain-gids.627,644,62D,628.ttf b/test/subset/data/expected/layout.gpos8.amiri/Amiri-Regular.retain-gids.627,644,62D,628.ttf
index f4a1ce4..e0b91f6 100644
--- a/test/subset/data/expected/layout.gpos8.amiri/Amiri-Regular.retain-gids.627,644,62D,628.ttf
+++ b/test/subset/data/expected/layout.gpos8.amiri/Amiri-Regular.retain-gids.627,644,62D,628.ttf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos8.amiri/Amiri-Regular.retain-gids.627,644.ttf b/test/subset/data/expected/layout.gpos8.amiri/Amiri-Regular.retain-gids.627,644.ttf
index 45f1177..ec657ee 100644
--- a/test/subset/data/expected/layout.gpos8.amiri/Amiri-Regular.retain-gids.627,644.ttf
+++ b/test/subset/data/expected/layout.gpos8.amiri/Amiri-Regular.retain-gids.627,644.ttf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos8.amiri/Amiri-Regular.retain-gids.633,645,627,621,20,644,627.ttf b/test/subset/data/expected/layout.gpos8.amiri/Amiri-Regular.retain-gids.633,645,627,621,20,644,627.ttf
index 82976b0..d5d9604 100644
--- a/test/subset/data/expected/layout.gpos8.amiri/Amiri-Regular.retain-gids.633,645,627,621,20,644,627.ttf
+++ b/test/subset/data/expected/layout.gpos8.amiri/Amiri-Regular.retain-gids.633,645,627,621,20,644,627.ttf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos8.amiri/Amiri-Regular.retain-gids.63A,64A,631.ttf b/test/subset/data/expected/layout.gpos8.amiri/Amiri-Regular.retain-gids.63A,64A,631.ttf
index ebc2866..efe6567 100644
--- a/test/subset/data/expected/layout.gpos8.amiri/Amiri-Regular.retain-gids.63A,64A,631.ttf
+++ b/test/subset/data/expected/layout.gpos8.amiri/Amiri-Regular.retain-gids.63A,64A,631.ttf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos8/gpos_chaining1_multiple_subrules_f1.default.30,31,32,33.otf b/test/subset/data/expected/layout.gpos8/gpos_chaining1_multiple_subrules_f1.default.30,31,32,33.otf
index 34966da..7ec35bb 100644
--- a/test/subset/data/expected/layout.gpos8/gpos_chaining1_multiple_subrules_f1.default.30,31,32,33.otf
+++ b/test/subset/data/expected/layout.gpos8/gpos_chaining1_multiple_subrules_f1.default.30,31,32,33.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos8/gpos_chaining1_multiple_subrules_f1.default.retain-all-codepoint.otf b/test/subset/data/expected/layout.gpos8/gpos_chaining1_multiple_subrules_f1.default.retain-all-codepoint.otf
index aee1579..2447631 100644
--- a/test/subset/data/expected/layout.gpos8/gpos_chaining1_multiple_subrules_f1.default.retain-all-codepoint.otf
+++ b/test/subset/data/expected/layout.gpos8/gpos_chaining1_multiple_subrules_f1.default.retain-all-codepoint.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos8/gpos_chaining1_multiple_subrules_f1.retain-gids.30,31,32,33.otf b/test/subset/data/expected/layout.gpos8/gpos_chaining1_multiple_subrules_f1.retain-gids.30,31,32,33.otf
index 61f41df..03f6ebd 100644
--- a/test/subset/data/expected/layout.gpos8/gpos_chaining1_multiple_subrules_f1.retain-gids.30,31,32,33.otf
+++ b/test/subset/data/expected/layout.gpos8/gpos_chaining1_multiple_subrules_f1.retain-gids.30,31,32,33.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos8/gpos_chaining1_multiple_subrules_f1.retain-gids.retain-all-codepoint.otf b/test/subset/data/expected/layout.gpos8/gpos_chaining1_multiple_subrules_f1.retain-gids.retain-all-codepoint.otf
index aee1579..2447631 100644
--- a/test/subset/data/expected/layout.gpos8/gpos_chaining1_multiple_subrules_f1.retain-gids.retain-all-codepoint.otf
+++ b/test/subset/data/expected/layout.gpos8/gpos_chaining1_multiple_subrules_f1.retain-gids.retain-all-codepoint.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos8/gpos_chaining2_multiple_subrules_f1.default.30,31,32,33.otf b/test/subset/data/expected/layout.gpos8/gpos_chaining2_multiple_subrules_f1.default.30,31,32,33.otf
index 7130a4c..58f08c3 100644
--- a/test/subset/data/expected/layout.gpos8/gpos_chaining2_multiple_subrules_f1.default.30,31,32,33.otf
+++ b/test/subset/data/expected/layout.gpos8/gpos_chaining2_multiple_subrules_f1.default.30,31,32,33.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos8/gpos_chaining2_multiple_subrules_f1.default.retain-all-codepoint.otf b/test/subset/data/expected/layout.gpos8/gpos_chaining2_multiple_subrules_f1.default.retain-all-codepoint.otf
index 48b30c7..e9cdc45 100644
--- a/test/subset/data/expected/layout.gpos8/gpos_chaining2_multiple_subrules_f1.default.retain-all-codepoint.otf
+++ b/test/subset/data/expected/layout.gpos8/gpos_chaining2_multiple_subrules_f1.default.retain-all-codepoint.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos8/gpos_chaining2_multiple_subrules_f1.retain-gids.30,31,32,33.otf b/test/subset/data/expected/layout.gpos8/gpos_chaining2_multiple_subrules_f1.retain-gids.30,31,32,33.otf
index 4c3af13..bb21de8 100644
--- a/test/subset/data/expected/layout.gpos8/gpos_chaining2_multiple_subrules_f1.retain-gids.30,31,32,33.otf
+++ b/test/subset/data/expected/layout.gpos8/gpos_chaining2_multiple_subrules_f1.retain-gids.30,31,32,33.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos8/gpos_chaining2_multiple_subrules_f1.retain-gids.retain-all-codepoint.otf b/test/subset/data/expected/layout.gpos8/gpos_chaining2_multiple_subrules_f1.retain-gids.retain-all-codepoint.otf
index 48b30c7..e9cdc45 100644
--- a/test/subset/data/expected/layout.gpos8/gpos_chaining2_multiple_subrules_f1.retain-gids.retain-all-codepoint.otf
+++ b/test/subset/data/expected/layout.gpos8/gpos_chaining2_multiple_subrules_f1.retain-gids.retain-all-codepoint.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos8/gpos_chaining3_simple_f1.default.30,31,32,33.otf b/test/subset/data/expected/layout.gpos8/gpos_chaining3_simple_f1.default.30,31,32,33.otf
index 55f3f66..6a92162 100644
--- a/test/subset/data/expected/layout.gpos8/gpos_chaining3_simple_f1.default.30,31,32,33.otf
+++ b/test/subset/data/expected/layout.gpos8/gpos_chaining3_simple_f1.default.30,31,32,33.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos8/gpos_chaining3_simple_f1.default.retain-all-codepoint.otf b/test/subset/data/expected/layout.gpos8/gpos_chaining3_simple_f1.default.retain-all-codepoint.otf
index 2f0e4b9..7549566 100644
--- a/test/subset/data/expected/layout.gpos8/gpos_chaining3_simple_f1.default.retain-all-codepoint.otf
+++ b/test/subset/data/expected/layout.gpos8/gpos_chaining3_simple_f1.default.retain-all-codepoint.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos8/gpos_chaining3_simple_f1.retain-gids.30,31,32,33.otf b/test/subset/data/expected/layout.gpos8/gpos_chaining3_simple_f1.retain-gids.30,31,32,33.otf
index 9bc50e5..d23e613 100644
--- a/test/subset/data/expected/layout.gpos8/gpos_chaining3_simple_f1.retain-gids.30,31,32,33.otf
+++ b/test/subset/data/expected/layout.gpos8/gpos_chaining3_simple_f1.retain-gids.30,31,32,33.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos8/gpos_chaining3_simple_f1.retain-gids.retain-all-codepoint.otf b/test/subset/data/expected/layout.gpos8/gpos_chaining3_simple_f1.retain-gids.retain-all-codepoint.otf
index 2f0e4b9..7549566 100644
--- a/test/subset/data/expected/layout.gpos8/gpos_chaining3_simple_f1.retain-gids.retain-all-codepoint.otf
+++ b/test/subset/data/expected/layout.gpos8/gpos_chaining3_simple_f1.retain-gids.retain-all-codepoint.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos9/gpos9_font2.default.41,42.otf b/test/subset/data/expected/layout.gpos9/gpos9_font2.default.41,42.otf
index 4648486..cb5b909 100644
--- a/test/subset/data/expected/layout.gpos9/gpos9_font2.default.41,42.otf
+++ b/test/subset/data/expected/layout.gpos9/gpos9_font2.default.41,42.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos9/gpos9_font2.default.41.otf b/test/subset/data/expected/layout.gpos9/gpos9_font2.default.41.otf
index cd2c4c2..4dd9df5 100644
--- a/test/subset/data/expected/layout.gpos9/gpos9_font2.default.41.otf
+++ b/test/subset/data/expected/layout.gpos9/gpos9_font2.default.41.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos9/gpos9_font2.default.42.otf b/test/subset/data/expected/layout.gpos9/gpos9_font2.default.42.otf
index 09e20f8..13f1720 100644
--- a/test/subset/data/expected/layout.gpos9/gpos9_font2.default.42.otf
+++ b/test/subset/data/expected/layout.gpos9/gpos9_font2.default.42.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos9/gpos9_font2.retain-gids.41,42.otf b/test/subset/data/expected/layout.gpos9/gpos9_font2.retain-gids.41,42.otf
index 968dd37..3310714 100644
--- a/test/subset/data/expected/layout.gpos9/gpos9_font2.retain-gids.41,42.otf
+++ b/test/subset/data/expected/layout.gpos9/gpos9_font2.retain-gids.41,42.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos9/gpos9_font2.retain-gids.41.otf b/test/subset/data/expected/layout.gpos9/gpos9_font2.retain-gids.41.otf
index 842cf79..bfb62d7 100644
--- a/test/subset/data/expected/layout.gpos9/gpos9_font2.retain-gids.41.otf
+++ b/test/subset/data/expected/layout.gpos9/gpos9_font2.retain-gids.41.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gpos9/gpos9_font2.retain-gids.42.otf b/test/subset/data/expected/layout.gpos9/gpos9_font2.retain-gids.42.otf
index 5ef0589..3ad1eb4 100644
--- a/test/subset/data/expected/layout.gpos9/gpos9_font2.retain-gids.42.otf
+++ b/test/subset/data/expected/layout.gpos9/gpos9_font2.retain-gids.42.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.default.53A9,53F1.otf b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.default.53A9,53F1.otf
index 685c2c9..a00b0f9 100644
--- a/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.default.53A9,53F1.otf
+++ b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.default.53A9,53F1.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.default.53A9.otf b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.default.53A9.otf
index fc1f61b..1a0c52d 100644
--- a/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.default.53A9.otf
+++ b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.default.53A9.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.default.53F1.otf b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.default.53F1.otf
index 367edeb..ad984d8 100644
--- a/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.default.53F1.otf
+++ b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.default.53F1.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.default.retain-all-codepoint.otf b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.default.retain-all-codepoint.otf
index c55b233..7013db9 100644
--- a/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.default.retain-all-codepoint.otf
+++ b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.default.retain-all-codepoint.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.retain-gids.53A9,53F1.otf b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.retain-gids.53A9,53F1.otf
index 1d67ee4..3a8d104 100644
--- a/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.retain-gids.53A9,53F1.otf
+++ b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.retain-gids.53A9,53F1.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.retain-gids.53A9.otf b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.retain-gids.53A9.otf
index 31fc761..da6ca49 100644
--- a/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.retain-gids.53A9.otf
+++ b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.retain-gids.53A9.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.retain-gids.53F1.otf b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.retain-gids.53F1.otf
index 2fd89a4..9b2fdee 100644
--- a/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.retain-gids.53F1.otf
+++ b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.retain-gids.53F1.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.retain-gids.retain-all-codepoint.otf b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.retain-gids.retain-all-codepoint.otf
index e737ed1..1cbadaa 100644
--- a/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.retain-gids.retain-all-codepoint.otf
+++ b/test/subset/data/expected/layout.gsub3/gsub_alternate_substitution.retain-gids.retain-all-codepoint.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub5/gsub_context1_multiple_subrules_f2.default.41,42,43.otf b/test/subset/data/expected/layout.gsub5/gsub_context1_multiple_subrules_f2.default.41,42,43.otf
index e1a944d..181b8d8 100644
--- a/test/subset/data/expected/layout.gsub5/gsub_context1_multiple_subrules_f2.default.41,42,43.otf
+++ b/test/subset/data/expected/layout.gsub5/gsub_context1_multiple_subrules_f2.default.41,42,43.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub5/gsub_context1_multiple_subrules_f2.default.41,42.otf b/test/subset/data/expected/layout.gsub5/gsub_context1_multiple_subrules_f2.default.41,42.otf
index 73c0650..61a728f 100644
--- a/test/subset/data/expected/layout.gsub5/gsub_context1_multiple_subrules_f2.default.41,42.otf
+++ b/test/subset/data/expected/layout.gsub5/gsub_context1_multiple_subrules_f2.default.41,42.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub5/gsub_context1_multiple_subrules_f2.default.retain-all-codepoint.otf b/test/subset/data/expected/layout.gsub5/gsub_context1_multiple_subrules_f2.default.retain-all-codepoint.otf
index 817e5c4..41990d6 100644
--- a/test/subset/data/expected/layout.gsub5/gsub_context1_multiple_subrules_f2.default.retain-all-codepoint.otf
+++ b/test/subset/data/expected/layout.gsub5/gsub_context1_multiple_subrules_f2.default.retain-all-codepoint.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub5/gsub_context1_multiple_subrules_f2.retain-gids.41,42,43.otf b/test/subset/data/expected/layout.gsub5/gsub_context1_multiple_subrules_f2.retain-gids.41,42,43.otf
index a99ffb8..d0bf4de 100644
--- a/test/subset/data/expected/layout.gsub5/gsub_context1_multiple_subrules_f2.retain-gids.41,42,43.otf
+++ b/test/subset/data/expected/layout.gsub5/gsub_context1_multiple_subrules_f2.retain-gids.41,42,43.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub5/gsub_context1_multiple_subrules_f2.retain-gids.41,42.otf b/test/subset/data/expected/layout.gsub5/gsub_context1_multiple_subrules_f2.retain-gids.41,42.otf
index 6b020cd..74e62de 100644
--- a/test/subset/data/expected/layout.gsub5/gsub_context1_multiple_subrules_f2.retain-gids.41,42.otf
+++ b/test/subset/data/expected/layout.gsub5/gsub_context1_multiple_subrules_f2.retain-gids.41,42.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub5/gsub_context1_multiple_subrules_f2.retain-gids.retain-all-codepoint.otf b/test/subset/data/expected/layout.gsub5/gsub_context1_multiple_subrules_f2.retain-gids.retain-all-codepoint.otf
index 817e5c4..41990d6 100644
--- a/test/subset/data/expected/layout.gsub5/gsub_context1_multiple_subrules_f2.retain-gids.retain-all-codepoint.otf
+++ b/test/subset/data/expected/layout.gsub5/gsub_context1_multiple_subrules_f2.retain-gids.retain-all-codepoint.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.default.41,42,43.otf b/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.default.41,42,43.otf
index b115525..7ff642f 100644
--- a/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.default.41,42,43.otf
+++ b/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.default.41,42,43.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.default.41,42.otf b/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.default.41,42.otf
index 32437e4..6b91f4b 100644
--- a/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.default.41,42.otf
+++ b/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.default.41,42.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.default.retain-all-codepoint.otf b/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.default.retain-all-codepoint.otf
index a0ca58f..5f98832 100644
--- a/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.default.retain-all-codepoint.otf
+++ b/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.default.retain-all-codepoint.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.retain-gids.41,42,43.otf b/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.retain-gids.41,42,43.otf
index 14caacc..f675170 100644
--- a/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.retain-gids.41,42,43.otf
+++ b/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.retain-gids.41,42,43.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.retain-gids.41,42.otf b/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.retain-gids.41,42.otf
index c79a5bd..6bcfd4d 100644
--- a/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.retain-gids.41,42.otf
+++ b/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.retain-gids.41,42.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.retain-gids.retain-all-codepoint.otf b/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.retain-gids.retain-all-codepoint.otf
index a0ca58f..5f98832 100644
--- a/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.retain-gids.retain-all-codepoint.otf
+++ b/test/subset/data/expected/layout.gsub5/gsub_context2_multiple_subrules_f2.retain-gids.retain-all-codepoint.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub5/gsub_context3_successive_f1.default.retain-all-codepoint.otf b/test/subset/data/expected/layout.gsub5/gsub_context3_successive_f1.default.retain-all-codepoint.otf
index 1e4055a..060d8f2 100644
--- a/test/subset/data/expected/layout.gsub5/gsub_context3_successive_f1.default.retain-all-codepoint.otf
+++ b/test/subset/data/expected/layout.gsub5/gsub_context3_successive_f1.default.retain-all-codepoint.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub5/gsub_context3_successive_f1.retain-gids.retain-all-codepoint.otf b/test/subset/data/expected/layout.gsub5/gsub_context3_successive_f1.retain-gids.retain-all-codepoint.otf
index 1e4055a..060d8f2 100644
--- a/test/subset/data/expected/layout.gsub5/gsub_context3_successive_f1.retain-gids.retain-all-codepoint.otf
+++ b/test/subset/data/expected/layout.gsub5/gsub_context3_successive_f1.retain-gids.retain-all-codepoint.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub6/gsub_chaining1_multiple_subrules_f1.default.30,31,32,33.otf b/test/subset/data/expected/layout.gsub6/gsub_chaining1_multiple_subrules_f1.default.30,31,32,33.otf
index bdaa805..d324012 100644
--- a/test/subset/data/expected/layout.gsub6/gsub_chaining1_multiple_subrules_f1.default.30,31,32,33.otf
+++ b/test/subset/data/expected/layout.gsub6/gsub_chaining1_multiple_subrules_f1.default.30,31,32,33.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub6/gsub_chaining1_multiple_subrules_f1.default.retain-all-codepoint.otf b/test/subset/data/expected/layout.gsub6/gsub_chaining1_multiple_subrules_f1.default.retain-all-codepoint.otf
index 3e7ecef..ebf56f0 100644
--- a/test/subset/data/expected/layout.gsub6/gsub_chaining1_multiple_subrules_f1.default.retain-all-codepoint.otf
+++ b/test/subset/data/expected/layout.gsub6/gsub_chaining1_multiple_subrules_f1.default.retain-all-codepoint.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub6/gsub_chaining1_multiple_subrules_f1.retain-gids.30,31,32,33.otf b/test/subset/data/expected/layout.gsub6/gsub_chaining1_multiple_subrules_f1.retain-gids.30,31,32,33.otf
index e10d863..ef0e490 100644
--- a/test/subset/data/expected/layout.gsub6/gsub_chaining1_multiple_subrules_f1.retain-gids.30,31,32,33.otf
+++ b/test/subset/data/expected/layout.gsub6/gsub_chaining1_multiple_subrules_f1.retain-gids.30,31,32,33.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub6/gsub_chaining1_multiple_subrules_f1.retain-gids.retain-all-codepoint.otf b/test/subset/data/expected/layout.gsub6/gsub_chaining1_multiple_subrules_f1.retain-gids.retain-all-codepoint.otf
index 3e7ecef..ebf56f0 100644
--- a/test/subset/data/expected/layout.gsub6/gsub_chaining1_multiple_subrules_f1.retain-gids.retain-all-codepoint.otf
+++ b/test/subset/data/expected/layout.gsub6/gsub_chaining1_multiple_subrules_f1.retain-gids.retain-all-codepoint.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub6/gsub_chaining2_multiple_subrules_f1.default.30,31,32,33.otf b/test/subset/data/expected/layout.gsub6/gsub_chaining2_multiple_subrules_f1.default.30,31,32,33.otf
index a53b114..b94bf70 100644
--- a/test/subset/data/expected/layout.gsub6/gsub_chaining2_multiple_subrules_f1.default.30,31,32,33.otf
+++ b/test/subset/data/expected/layout.gsub6/gsub_chaining2_multiple_subrules_f1.default.30,31,32,33.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub6/gsub_chaining2_multiple_subrules_f1.default.retain-all-codepoint.otf b/test/subset/data/expected/layout.gsub6/gsub_chaining2_multiple_subrules_f1.default.retain-all-codepoint.otf
index 6b55fe6..e3dc20f 100644
--- a/test/subset/data/expected/layout.gsub6/gsub_chaining2_multiple_subrules_f1.default.retain-all-codepoint.otf
+++ b/test/subset/data/expected/layout.gsub6/gsub_chaining2_multiple_subrules_f1.default.retain-all-codepoint.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub6/gsub_chaining2_multiple_subrules_f1.retain-gids.30,31,32,33.otf b/test/subset/data/expected/layout.gsub6/gsub_chaining2_multiple_subrules_f1.retain-gids.30,31,32,33.otf
index 856249e..a83989b 100644
--- a/test/subset/data/expected/layout.gsub6/gsub_chaining2_multiple_subrules_f1.retain-gids.30,31,32,33.otf
+++ b/test/subset/data/expected/layout.gsub6/gsub_chaining2_multiple_subrules_f1.retain-gids.30,31,32,33.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub6/gsub_chaining2_multiple_subrules_f1.retain-gids.retain-all-codepoint.otf b/test/subset/data/expected/layout.gsub6/gsub_chaining2_multiple_subrules_f1.retain-gids.retain-all-codepoint.otf
index 6b55fe6..e3dc20f 100644
--- a/test/subset/data/expected/layout.gsub6/gsub_chaining2_multiple_subrules_f1.retain-gids.retain-all-codepoint.otf
+++ b/test/subset/data/expected/layout.gsub6/gsub_chaining2_multiple_subrules_f1.retain-gids.retain-all-codepoint.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub6/gsub_chaining3_simple_f2.default.30,31,32,33.otf b/test/subset/data/expected/layout.gsub6/gsub_chaining3_simple_f2.default.30,31,32,33.otf
index fbd9a44..f2b8f71 100644
--- a/test/subset/data/expected/layout.gsub6/gsub_chaining3_simple_f2.default.30,31,32,33.otf
+++ b/test/subset/data/expected/layout.gsub6/gsub_chaining3_simple_f2.default.30,31,32,33.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub6/gsub_chaining3_simple_f2.default.retain-all-codepoint.otf b/test/subset/data/expected/layout.gsub6/gsub_chaining3_simple_f2.default.retain-all-codepoint.otf
index 2af5abb..07286e3 100644
--- a/test/subset/data/expected/layout.gsub6/gsub_chaining3_simple_f2.default.retain-all-codepoint.otf
+++ b/test/subset/data/expected/layout.gsub6/gsub_chaining3_simple_f2.default.retain-all-codepoint.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub6/gsub_chaining3_simple_f2.retain-gids.30,31,32,33.otf b/test/subset/data/expected/layout.gsub6/gsub_chaining3_simple_f2.retain-gids.30,31,32,33.otf
index 2d08eb0..3b19106 100644
--- a/test/subset/data/expected/layout.gsub6/gsub_chaining3_simple_f2.retain-gids.30,31,32,33.otf
+++ b/test/subset/data/expected/layout.gsub6/gsub_chaining3_simple_f2.retain-gids.30,31,32,33.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub6/gsub_chaining3_simple_f2.retain-gids.retain-all-codepoint.otf b/test/subset/data/expected/layout.gsub6/gsub_chaining3_simple_f2.retain-gids.retain-all-codepoint.otf
index 2af5abb..07286e3 100644
--- a/test/subset/data/expected/layout.gsub6/gsub_chaining3_simple_f2.retain-gids.retain-all-codepoint.otf
+++ b/test/subset/data/expected/layout.gsub6/gsub_chaining3_simple_f2.retain-gids.retain-all-codepoint.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub8/gsub8_manually_created.default.41,42,43,44,45,46,47,48,49.otf b/test/subset/data/expected/layout.gsub8/gsub8_manually_created.default.41,42,43,44,45,46,47,48,49.otf
index 4e30f47..b2ec2d9 100644
--- a/test/subset/data/expected/layout.gsub8/gsub8_manually_created.default.41,42,43,44,45,46,47,48,49.otf
+++ b/test/subset/data/expected/layout.gsub8/gsub8_manually_created.default.41,42,43,44,45,46,47,48,49.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub8/gsub8_manually_created.default.41,42,43,44,45,46,47.otf b/test/subset/data/expected/layout.gsub8/gsub8_manually_created.default.41,42,43,44,45,46,47.otf
index 0f8ef5a..80f2c6e 100644
--- a/test/subset/data/expected/layout.gsub8/gsub8_manually_created.default.41,42,43,44,45,46,47.otf
+++ b/test/subset/data/expected/layout.gsub8/gsub8_manually_created.default.41,42,43,44,45,46,47.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub8/gsub8_manually_created.default.41,42,43,44,45,46,4D.otf b/test/subset/data/expected/layout.gsub8/gsub8_manually_created.default.41,42,43,44,45,46,4D.otf
index 7b18952..ac92afa 100644
--- a/test/subset/data/expected/layout.gsub8/gsub8_manually_created.default.41,42,43,44,45,46,4D.otf
+++ b/test/subset/data/expected/layout.gsub8/gsub8_manually_created.default.41,42,43,44,45,46,4D.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub8/gsub8_manually_created.default.41,42,43,44,45,46,51.otf b/test/subset/data/expected/layout.gsub8/gsub8_manually_created.default.41,42,43,44,45,46,51.otf
index f96a05a..3026119 100644
--- a/test/subset/data/expected/layout.gsub8/gsub8_manually_created.default.41,42,43,44,45,46,51.otf
+++ b/test/subset/data/expected/layout.gsub8/gsub8_manually_created.default.41,42,43,44,45,46,51.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub8/gsub8_manually_created.default.61.otf b/test/subset/data/expected/layout.gsub8/gsub8_manually_created.default.61.otf
index 6276498..1901302 100644
--- a/test/subset/data/expected/layout.gsub8/gsub8_manually_created.default.61.otf
+++ b/test/subset/data/expected/layout.gsub8/gsub8_manually_created.default.61.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub8/gsub8_manually_created.default.retain-all-codepoint.otf b/test/subset/data/expected/layout.gsub8/gsub8_manually_created.default.retain-all-codepoint.otf
index aae2b26..ac065e5 100644
--- a/test/subset/data/expected/layout.gsub8/gsub8_manually_created.default.retain-all-codepoint.otf
+++ b/test/subset/data/expected/layout.gsub8/gsub8_manually_created.default.retain-all-codepoint.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub8/gsub8_manually_created.retain-gids.41,42,43,44,45,46,47,48,49.otf b/test/subset/data/expected/layout.gsub8/gsub8_manually_created.retain-gids.41,42,43,44,45,46,47,48,49.otf
index 8495a4a..bf8e048 100644
--- a/test/subset/data/expected/layout.gsub8/gsub8_manually_created.retain-gids.41,42,43,44,45,46,47,48,49.otf
+++ b/test/subset/data/expected/layout.gsub8/gsub8_manually_created.retain-gids.41,42,43,44,45,46,47,48,49.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub8/gsub8_manually_created.retain-gids.41,42,43,44,45,46,47.otf b/test/subset/data/expected/layout.gsub8/gsub8_manually_created.retain-gids.41,42,43,44,45,46,47.otf
index 4838600..6af7f14 100644
--- a/test/subset/data/expected/layout.gsub8/gsub8_manually_created.retain-gids.41,42,43,44,45,46,47.otf
+++ b/test/subset/data/expected/layout.gsub8/gsub8_manually_created.retain-gids.41,42,43,44,45,46,47.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub8/gsub8_manually_created.retain-gids.41,42,43,44,45,46,4D.otf b/test/subset/data/expected/layout.gsub8/gsub8_manually_created.retain-gids.41,42,43,44,45,46,4D.otf
index 27982fd..e390914 100644
--- a/test/subset/data/expected/layout.gsub8/gsub8_manually_created.retain-gids.41,42,43,44,45,46,4D.otf
+++ b/test/subset/data/expected/layout.gsub8/gsub8_manually_created.retain-gids.41,42,43,44,45,46,4D.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub8/gsub8_manually_created.retain-gids.41,42,43,44,45,46,51.otf b/test/subset/data/expected/layout.gsub8/gsub8_manually_created.retain-gids.41,42,43,44,45,46,51.otf
index 87a06c0..de4ae1d 100644
--- a/test/subset/data/expected/layout.gsub8/gsub8_manually_created.retain-gids.41,42,43,44,45,46,51.otf
+++ b/test/subset/data/expected/layout.gsub8/gsub8_manually_created.retain-gids.41,42,43,44,45,46,51.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub8/gsub8_manually_created.retain-gids.61.otf b/test/subset/data/expected/layout.gsub8/gsub8_manually_created.retain-gids.61.otf
index eebf28c..2cbf8a6 100644
--- a/test/subset/data/expected/layout.gsub8/gsub8_manually_created.retain-gids.61.otf
+++ b/test/subset/data/expected/layout.gsub8/gsub8_manually_created.retain-gids.61.otf
Binary files differ
diff --git a/test/subset/data/expected/layout.gsub8/gsub8_manually_created.retain-gids.retain-all-codepoint.otf b/test/subset/data/expected/layout.gsub8/gsub8_manually_created.retain-gids.retain-all-codepoint.otf
index aae2b26..ac065e5 100644
--- a/test/subset/data/expected/layout.gsub8/gsub8_manually_created.retain-gids.retain-all-codepoint.otf
+++ b/test/subset/data/expected/layout.gsub8/gsub8_manually_created.retain-gids.retain-all-codepoint.otf
Binary files differ
diff --git a/test/subset/data/expected/layout/Roboto-Regular.smallcaps.default.41,42,43.ttf b/test/subset/data/expected/layout/Roboto-Regular.smallcaps.default.41,42,43.ttf
index 33aa3f7..7bcb2a2 100644
--- a/test/subset/data/expected/layout/Roboto-Regular.smallcaps.default.41,42,43.ttf
+++ b/test/subset/data/expected/layout/Roboto-Regular.smallcaps.default.41,42,43.ttf
Binary files differ
diff --git a/test/subset/data/expected/layout/Roboto-Regular.smallcaps.default.41,43.ttf b/test/subset/data/expected/layout/Roboto-Regular.smallcaps.default.41,43.ttf
index c207f09..ed1be23 100644
--- a/test/subset/data/expected/layout/Roboto-Regular.smallcaps.default.41,43.ttf
+++ b/test/subset/data/expected/layout/Roboto-Regular.smallcaps.default.41,43.ttf
Binary files differ
diff --git a/test/subset/data/expected/layout/Roboto-Regular.smallcaps.default.41.ttf b/test/subset/data/expected/layout/Roboto-Regular.smallcaps.default.41.ttf
index 70251b3..a3400b1 100644
--- a/test/subset/data/expected/layout/Roboto-Regular.smallcaps.default.41.ttf
+++ b/test/subset/data/expected/layout/Roboto-Regular.smallcaps.default.41.ttf
Binary files differ
diff --git a/test/subset/data/expected/layout/Roboto-Regular.smallcaps.default.43.ttf b/test/subset/data/expected/layout/Roboto-Regular.smallcaps.default.43.ttf
index 2109faf..7204e10 100644
--- a/test/subset/data/expected/layout/Roboto-Regular.smallcaps.default.43.ttf
+++ b/test/subset/data/expected/layout/Roboto-Regular.smallcaps.default.43.ttf
Binary files differ
diff --git a/test/subset/data/expected/layout/Roboto-Regular.smallcaps.default.CA,CB.ttf b/test/subset/data/expected/layout/Roboto-Regular.smallcaps.default.CA,CB.ttf
index 16c6d43..ea36c4b 100644
--- a/test/subset/data/expected/layout/Roboto-Regular.smallcaps.default.CA,CB.ttf
+++ b/test/subset/data/expected/layout/Roboto-Regular.smallcaps.default.CA,CB.ttf
Binary files differ
diff --git a/test/subset/data/expected/layout/Roboto-Regular.smallcaps.retain-gids.41,42,43.ttf b/test/subset/data/expected/layout/Roboto-Regular.smallcaps.retain-gids.41,42,43.ttf
index 95e055f..1d66529 100644
--- a/test/subset/data/expected/layout/Roboto-Regular.smallcaps.retain-gids.41,42,43.ttf
+++ b/test/subset/data/expected/layout/Roboto-Regular.smallcaps.retain-gids.41,42,43.ttf
Binary files differ
diff --git a/test/subset/data/expected/layout/Roboto-Regular.smallcaps.retain-gids.41,43.ttf b/test/subset/data/expected/layout/Roboto-Regular.smallcaps.retain-gids.41,43.ttf
index 1702a10..874c7a7 100644
--- a/test/subset/data/expected/layout/Roboto-Regular.smallcaps.retain-gids.41,43.ttf
+++ b/test/subset/data/expected/layout/Roboto-Regular.smallcaps.retain-gids.41,43.ttf
Binary files differ
diff --git a/test/subset/data/expected/layout/Roboto-Regular.smallcaps.retain-gids.41.ttf b/test/subset/data/expected/layout/Roboto-Regular.smallcaps.retain-gids.41.ttf
index c03e8cb..412a33d 100644
--- a/test/subset/data/expected/layout/Roboto-Regular.smallcaps.retain-gids.41.ttf
+++ b/test/subset/data/expected/layout/Roboto-Regular.smallcaps.retain-gids.41.ttf
Binary files differ
diff --git a/test/subset/data/expected/layout/Roboto-Regular.smallcaps.retain-gids.43.ttf b/test/subset/data/expected/layout/Roboto-Regular.smallcaps.retain-gids.43.ttf
index be5e6d9..d5048b0 100644
--- a/test/subset/data/expected/layout/Roboto-Regular.smallcaps.retain-gids.43.ttf
+++ b/test/subset/data/expected/layout/Roboto-Regular.smallcaps.retain-gids.43.ttf
Binary files differ
diff --git a/test/subset/data/expected/layout/Roboto-Regular.smallcaps.retain-gids.CA,CB.ttf b/test/subset/data/expected/layout/Roboto-Regular.smallcaps.retain-gids.CA,CB.ttf
index 9798bc4..ea16a3e 100644
--- a/test/subset/data/expected/layout/Roboto-Regular.smallcaps.retain-gids.CA,CB.ttf
+++ b/test/subset/data/expected/layout/Roboto-Regular.smallcaps.retain-gids.CA,CB.ttf
Binary files differ
diff --git a/test/subset/data/expected/variable/Fraunces.default.26,66,69,124,125.ttf b/test/subset/data/expected/variable/Fraunces.default.26,66,69,124,125.ttf
index 9d45fcb..bb96a67 100644
--- a/test/subset/data/expected/variable/Fraunces.default.26,66,69,124,125.ttf
+++ b/test/subset/data/expected/variable/Fraunces.default.26,66,69,124,125.ttf
Binary files differ
diff --git a/test/subset/data/expected/variable/Fraunces.default.61.ttf b/test/subset/data/expected/variable/Fraunces.default.61.ttf
index 381ef6d..3d401a5 100644
--- a/test/subset/data/expected/variable/Fraunces.default.61.ttf
+++ b/test/subset/data/expected/variable/Fraunces.default.61.ttf
Binary files differ
diff --git a/test/subset/data/profiles/keep-all-layout-features.txt b/test/subset/data/profiles/keep-all-layout-features.txt
new file mode 100644
index 0000000..97241e0
--- /dev/null
+++ b/test/subset/data/profiles/keep-all-layout-features.txt
@@ -0,0 +1 @@
+--layout-features=*
diff --git a/test/subset/data/profiles/layout-features.txt b/test/subset/data/profiles/layout-features.txt
new file mode 100644
index 0000000..15456e6
--- /dev/null
+++ b/test/subset/data/profiles/layout-features.txt
@@ -0,0 +1 @@
+--layout-features=kern,mark,liga
diff --git a/test/subset/data/tests/basics.tests b/test/subset/data/tests/basics.tests
index c5aa136..5a9818d 100644
--- a/test/subset/data/tests/basics.tests
+++ b/test/subset/data/tests/basics.tests
@@ -12,6 +12,8 @@
 name-languages.txt
 name-legacy.txt
 gids.txt
+layout-features.txt
+keep-all-layout-features.txt
 
 SUBSETS:
 abc
diff --git a/test/subset/generate-expected-outputs.py b/test/subset/generate-expected-outputs.py
index ec69bb6..593104a 100755
--- a/test/subset/generate-expected-outputs.py
+++ b/test/subset/generate-expected-outputs.py
@@ -17,7 +17,6 @@
 def generate_expected_output(input_file, unicodes, profile_flags, output_path):
 	args = ["fonttools", "subset", input_file]
 	args.extend(["--notdef-outline",
-		     "--layout-features=*",
 		     "--drop-tables+=DSIG",
 		     "--drop-tables-=sbix",
 		     "--unicodes=%s" % unicodes,
diff --git a/util/options-subset.cc b/util/options-subset.cc
index d3b063b..c177076 100644
--- a/util/options-subset.cc
+++ b/util/options-subset.cc
@@ -201,6 +201,52 @@
 }
 
 static gboolean
+parse_layout_features (const char *name,
+		       const char *arg,
+		       gpointer    data,
+		       GError    **error G_GNUC_UNUSED)
+{
+  subset_options_t *subset_opts = (subset_options_t *) data;
+  hb_set_t *layout_features = subset_opts->input->layout_features;
+
+  char last_name_char = name[strlen (name) - 1];
+
+  if (last_name_char != '+' && last_name_char != '-')
+    hb_set_clear (layout_features);
+
+  if (0 == strcmp (arg, "*"))
+  {
+    if (last_name_char == '-')
+      hb_set_clear (layout_features);
+    else
+      subset_opts->input->retain_all_layout_features = true;
+    return true;
+  }
+
+  char *s = strtok((char *) arg, ", ");
+  while (s)
+  {
+    if (strlen (s) > 4) // table tags are at most 4 bytes
+    {
+      g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE,
+                   "Failed parsing table tag values at: '%s'", s);
+      return false;
+    }
+
+    hb_tag_t tag = hb_tag_from_string (s, strlen (s));
+
+    if (last_name_char != '-')
+      hb_set_add (layout_features, tag);
+    else
+      hb_set_del (layout_features, tag);
+
+    s = strtok(nullptr, ", ");
+  }
+
+  return true;
+}
+
+static gboolean
 parse_drop_tables (const char *name,
 		   const char *arg,
 		   gpointer    data,
@@ -247,8 +293,15 @@
     {"gids", 0, 0, G_OPTION_ARG_CALLBACK,  (gpointer) &parse_gids,  "Specify glyph IDs or ranges to include in the subset", "list of comma/whitespace-separated int numbers or ranges"},
     {"desubroutinize", 0, 0, G_OPTION_ARG_NONE,  &this->input->desubroutinize,   "Remove CFF/CFF2 use of subroutines",   nullptr},
     {"name-IDs", 0, 0, G_OPTION_ARG_CALLBACK,  (gpointer) &parse_nameids,  "Subset specified nameids", "list of int numbers"},
+    {"name-IDs-", 0, 0, G_OPTION_ARG_CALLBACK,  (gpointer) &parse_nameids,  "Subset specified nameids", "list of int numbers"},
+    {"name-IDs+", 0, 0, G_OPTION_ARG_CALLBACK,  (gpointer) &parse_nameids,  "Subset specified nameids", "list of int numbers"},
     {"name-legacy", 0, 0, G_OPTION_ARG_NONE,  &this->input->name_legacy,   "Keep legacy (non-Unicode) 'name' table entries",   nullptr},
     {"name-languages", 0, 0, G_OPTION_ARG_CALLBACK,  (gpointer) &parse_name_languages,  "Subset nameRecords with specified language IDs", "list of int numbers"},
+    {"name-languages-", 0, 0, G_OPTION_ARG_CALLBACK,  (gpointer) &parse_name_languages,  "Subset nameRecords with specified language IDs", "list of int numbers"},
+    {"name-languages+", 0, 0, G_OPTION_ARG_CALLBACK,  (gpointer) &parse_name_languages,  "Subset nameRecords with specified language IDs", "list of int numbers"},
+    {"layout-features", 0, 0, G_OPTION_ARG_CALLBACK,  (gpointer) &parse_layout_features,  "Specify set of layout feature tags that will be preserved", "list of string table tags."},
+    {"layout-features+", 0, 0, G_OPTION_ARG_CALLBACK,  (gpointer) &parse_layout_features,  "Specify set of layout feature tags that will be preserved", "list of string table tags."},
+    {"layout-features-", 0, 0, G_OPTION_ARG_CALLBACK,  (gpointer) &parse_layout_features,  "Specify set of layout feature tags that will be preserved", "list of string table tags."},
     {"drop-tables", 0, 0, G_OPTION_ARG_CALLBACK,  (gpointer) &parse_drop_tables,  "Drop the specified tables.", "list of string table tags."},
     {"drop-tables+", 0, 0, G_OPTION_ARG_CALLBACK,  (gpointer) &parse_drop_tables,  "Drop the specified tables.", "list of string table tags."},
     {"drop-tables-", 0, 0, G_OPTION_ARG_CALLBACK,  (gpointer) &parse_drop_tables,  "Drop the specified tables.", "list of string table tags."},