New Upstream Release - fontmake

Ready changes

Summary

Merged new upstream version: 3.5.1 (was: 2.4.1).

Diff

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 8801544..b68e7a4 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -27,7 +27,7 @@ jobs:
     if: "! contains(toJSON(github.event.commits.*.message), '[skip ci]')"
     strategy:
       matrix:
-        python-version: [3.6, 3.7, 3.8, 3.9, "pypy-3.7"]
+        python-version: [3.7, 3.8, 3.9, "3.10", "pypy-3.7"]
         platform: [ubuntu-latest, windows-latest]
         exclude:
           - platform: windows-latest
@@ -51,6 +51,8 @@ jobs:
         flags: unittests
         name: codecov-umbrella
         fail_ci_if_error: true
+        # see https://github.com/codecov/codecov-action/issues/557
+        token: ${{ secrets.CODECOV_TOKEN }}
   deploy:
     # only run if the commit is tagged...
     if: startsWith(github.ref, 'refs/tags/v')
diff --git a/.gitignore b/.gitignore
index 78b51a3..9ee4173 100644
--- a/.gitignore
+++ b/.gitignore
@@ -49,6 +49,7 @@ coverage.xml
 *.cover
 .hypothesis/
 .pytest_cache/
+tests/data/test.fea
 
 # Translations
 *.mo
diff --git a/Lib/fontmake/__main__.py b/Lib/fontmake/__main__.py
index b686590..a3bde8f 100644
--- a/Lib/fontmake/__main__.py
+++ b/Lib/fontmake/__main__.py
@@ -13,10 +13,14 @@
 # limitations under the License.
 
 import logging
+import os
 import sys
 from argparse import ArgumentParser, FileType
+from collections import namedtuple
 from contextlib import contextmanager
+from textwrap import dedent
 
+from fontTools.misc.loggingTools import configLogger
 from ufo2ft import CFFOptimization
 from ufo2ft.featureWriters import loadFeatureWriterFromString
 from ufo2ft.filters import loadFilterFromString
@@ -28,11 +32,23 @@ from fontmake.font_project import INTERPOLATABLE_OUTPUTS, FontProject
 
 def _loadPlugins(parser, specs, from_string_func, parser_error_message):
     plugins = []
+    seen_ellipsis = False
     for s in specs:
         if s == "None":
             # magic value that means "don't write any features or don't apply
             # any filters!"
             return []
+        elif s == "...":
+            if seen_ellipsis:
+                parser.error(
+                    parser_error_message.format(
+                        "ValueError", "'...' can only be provided once"
+                    )
+                )
+            seen_ellipsis = True
+            plugins.append(...)
+            continue
+
         try:
             plugins.append(from_string_func(s))
         except Exception as e:
@@ -78,6 +94,69 @@ def exclude_args(parser, args, excluded_args, target, positive=True):
         del args[argname]
 
 
+_ParsedInputs = namedtuple(
+    "_ParsedInputs",
+    [
+        "glyphs_path",
+        "ufo_paths",
+        "designspace_path",
+        "format_name",
+    ],
+)
+
+
+def parse_mutually_exclusive_inputs(parser, args):
+    glyphs_path = args.pop("glyphs_path")
+    ufo_paths = args.pop("ufo_paths") or []
+    designspace_path = args.pop("mm_designspace")
+    posargs = args.pop("posargs")
+
+    # assert input -flags are already mutually exclusive via argparse
+    assert sum(bool(p) for p in (glyphs_path, ufo_paths, designspace_path)) <= 1
+
+    input_flag = (
+        "g" if glyphs_path else "m" if designspace_path else "u" if ufo_paths else None
+    )
+    if input_flag and posargs:
+        parser.error(
+            f"argument -{input_flag} not allowed with positional input args: "
+            f"{' '.join(posargs)}"
+        )
+
+    for filename in posargs:
+        if filename.endswith(".glyphs") or filename.endswith(".glyphspackage"):
+            if glyphs_path:
+                parser.error("Only one *.glyphs source file is allowed")
+            glyphs_path = filename
+        elif filename.endswith(".designspace"):
+            if designspace_path:
+                parser.error("Only one *.designspace source file is allowed")
+            designspace_path = filename
+        elif (filename.endswith(".ufo") and os.path.isdir(filename)) or (
+            filename.endswith(".ufoz") and os.path.isfile(filename)
+        ):
+            ufo_paths.append(filename)
+        else:
+            parser.error(f"Unknown input file extension: '{filename}'")
+
+    count = sum(bool(p) for p in (glyphs_path, ufo_paths, designspace_path))
+    if count == 0:
+        parser.error("No input files specified")
+    elif count > 1:
+        parser.error(f"Expected 1, got {count} different types of inputs files")
+
+    format_name = (
+        "Glyphs" if glyphs_path else "designspace" if designspace_path else "UFO"
+    ) + " source"
+
+    return _ParsedInputs(
+        glyphs_path,
+        ufo_paths,
+        designspace_path,
+        format_name,
+    )
+
+
 @contextmanager
 def _make_tempdirs(parser, args):
     output = args["output"]
@@ -103,14 +182,29 @@ def _make_tempdirs(parser, args):
             shutil.rmtree(td)
 
 
+def _configure_logging(level=None, timing=False):
+    fmt = "%(levelname)s:%(name)s:%(message)s"
+    if level is not None:
+        # NOTE: configuring the root logger with basicConfig should be done only once,
+        # preferably from inside main(); calling subsequent times has no effect.
+        logging.basicConfig(level=level, format=fmt)
+    # fontTools.subset's logger is too chatty, we set it to WARNING
+    logging.getLogger("fontTools.subset").setLevel(logging.WARNING)
+    if timing:
+        # timing-related DEBUG messages get a separate configuration so we
+        # can enable them without needing to lower the global verbosity level
+        configLogger(logger="fontmake.timer", level=logging.DEBUG, format=fmt)
+        configLogger(logger="ufo2ft.timer", level=logging.DEBUG, format=fmt)
+
+
 def main(args=None):
     parser = ArgumentParser()
     parser.add_argument("--version", action="version", version=__version__)
     inputGroup = parser.add_argument_group(
-        title="Input arguments",
+        title="Input arguments (flags)",
         description="The following arguments are mutually exclusive (pick only one):",
     )
-    xInputGroup = inputGroup.add_mutually_exclusive_group(required=True)
+    xInputGroup = inputGroup.add_mutually_exclusive_group()
     xInputGroup.add_argument(
         "-g", "--glyphs-path", metavar="GLYPHS", help="Path to .glyphs source file"
     )
@@ -127,6 +221,16 @@ def main(args=None):
         metavar="DESIGNSPACE",
         help="Path to .designspace file",
     )
+    positionalInputs = parser.add_argument_group(
+        title="Input arguments (positonal)",
+        description="Alternatively, guess source format from filename extension",
+    )
+    positionalInputs.add_argument(
+        "posargs",
+        nargs="*",
+        metavar="INPUTS",
+        help="Either one *.designspace or *.glyphs file, or one or more *.ufo",
+    )
 
     outputGroup = parser.add_argument_group(title="Output arguments")
     outputGroup.add_argument(
@@ -153,7 +257,7 @@ def main(args=None):
         "--output-path",
         default=None,
         help="Output font file path. Only valid when the output is a single "
-        "file (e.g. input is a single UFO or output is variable font)",
+        "file (e.g. input is a single UFO or output is a single variable font)",
     )
     outputSubGroup.add_argument(
         "--output-dir",
@@ -175,6 +279,24 @@ def main(args=None):
         'E.g.: -i "Noto Sans Bold"; or -i ".* UI Condensed". '
         "(for Glyphs or MutatorMath sources only). ",
     )
+    outputGroup.add_argument(
+        "--variable-fonts",
+        nargs="?",
+        default=".*",
+        const=True,
+        metavar="VARIABLE_FONT_FILENAME",
+        help=dedent(
+            """\
+            Filter the list of variable fonts produced from the input
+            Designspace file. By default all listed variable fonts are
+            generated. To generate a specific variable font (or variable fonts)
+            that match a given "filename" attribute, you can pass as argument
+            the full filename or a regular expression. E.g.: --variable-fonts
+            "MyFontVF_WeightOnly.ttf"; or --variable-fonts
+            "MyFontVFItalic_.*.ttf".
+        """
+        ),
+    )
     outputGroup.add_argument(
         "--use-mutatormath",
         action="store_true",
@@ -232,6 +354,24 @@ def main(args=None):
         help="Enable ufoLib validation on reading/writing UFO files. It is "
         "disabled by default",
     )
+    compatibilityGroup = outputGroup.add_mutually_exclusive_group()
+    compatibilityGroup.add_argument(
+        "--check-compatibility",
+        action="store_true",
+        default=None,
+        help="Check if the source files are interpolatable. It is "
+        "disabled by default, but enabled when building variable fonts "
+        "or what the 'Enforce Compatibility Check' custom parameter is "
+        "set on a Glyphs file",
+    )
+    compatibilityGroup.add_argument(
+        "--no-check-compatibility",
+        action="store_false",
+        default=None,
+        dest="check_compatibility",
+        help="Turns off the compatibility checker even when building variable fonts",
+    )
+
     outputGroup.add_argument(
         "--expand-features-to-instances",
         action="store_true",
@@ -240,12 +380,28 @@ def main(args=None):
         "interpolating. Use if you share feature files of masters in "
         "external files, as instances can end up elsewhere.",
     )
+    outputGroup.add_argument(
+        "--fea-include-dir",
+        default=None,
+        help="Overrides the default directory where to search for included "
+        "feature files with relative paths. This only works when the input is a "
+        "Designspace or UFOs, not from Glyphs at the moment.",
+    )
     outputGroup.add_argument(
         "--no-generate-GDEF",
         dest="generate_GDEF",
         action="store_false",
         help="Do not auto-generate a GDEF table, but keep an existing one intact.",
     )
+    outputGroup.add_argument(
+        "--save-ufo-as-zip",
+        dest="ufo_structure",
+        action="store_const",
+        const="zip",
+        default="package",
+        help="Save UFOs as .ufoz format. Only valid when generating UFO masters "
+        "from glyphs source or interpolating UFO instances.",
+    )
 
     contourGroup = parser.add_argument_group(title="Handling of contours")
     contourGroup.add_argument(
@@ -290,8 +446,18 @@ def main(args=None):
         "-a",
         "--autohint",
         nargs="?",
-        const="",
-        help="Run ttfautohint. Can provide arguments, quoted",
+        const=True,  # without args means run ttfautohint with default options
+        help="Run ttfautohint. Can provide arguments, quoted. By default, ttfautohint "
+        "is run if the (.glyphs) source contains a 'TTFAutohint options' instance "
+        "custom parameter. This option overrides that. See --no-autohint to disable.",
+    )
+    contourGroup.add_argument(
+        "-A",
+        "--no-autohint",
+        dest="autohint",
+        action="store_false",
+        help="Do not run ttfautohint, even if source contains a 'TTFAutohint options' "
+        "custom parameter",
     )
     contourGroup.add_argument(
         "--cff-round-tolerance",
@@ -335,7 +501,8 @@ def main(args=None):
         "the given keyword arguments. The class and module names are "
         "separated by '::'. The option can be repeated multiple times "
         "for each filter class. The option overrides the filters specified "
-        "in the UFO lib.",
+        "in the UFO lib. You can use an ellipsis --filter='...' to keep the "
+        "latter and insert additional --filter(s), either before or after it.",
     )
 
     layoutGroup = parser.add_argument_group(title="Handling of OpenType Layout")
@@ -359,7 +526,9 @@ def main(args=None):
         "separated by '::'. The option can be repeated multiple times "
         "for each writer class. A special value of 'None' will disable "
         "all automatic feature generation. The option overrides both the "
-        "default ufo2ft writers and those specified in the UFO lib.",
+        "default ufo2ft writers and those specified in the UFO lib. "
+        "You can use ellipsis --feature-writer='...' to keep the latter and "
+        "insert additional --feature-writer(s) either before or after those.",
     )
     layoutGroup.add_argument(
         "--debug-feature-file",
@@ -425,8 +594,12 @@ def main(args=None):
         help="Configure the logger verbosity level. Choose between: "
         "%(choices)s. Default: INFO",
     )
+
     args = vars(parser.parse_args(args))
 
+    level = args.pop("verbose")
+    _configure_logging(level, timing=args.pop("timing"))
+
     specs = args.pop("feature_writer_specs")
     if specs is not None:
         args["feature_writers"] = _loadFeatureWriters(parser, specs)
@@ -435,15 +608,10 @@ def main(args=None):
     if specs is not None:
         args["filters"] = _loadFilters(parser, specs)
 
-    glyphs_path = args.pop("glyphs_path")
-    ufo_paths = args.pop("ufo_paths")
-    designspace_path = args.pop("mm_designspace")
-    input_format = (
-        "Glyphs" if glyphs_path else "designspace" if designspace_path else "UFO"
-    ) + " source"
+    inputs = parse_mutually_exclusive_inputs(parser, args)
 
     if INTERPOLATABLE_OUTPUTS.intersection(args["output"]):
-        if not (glyphs_path or designspace_path):
+        if not (inputs.glyphs_path or inputs.designspace_path):
             parser.error("Glyphs or designspace source required for variable font")
         exclude_args(
             parser,
@@ -457,7 +625,13 @@ def main(args=None):
             "variable output",
         )
     else:
-        exclude_args(parser, args, ["optimize_gvar"], "static output", positive=False)
+        exclude_args(
+            parser,
+            args,
+            ["variable_fonts", "optimize_gvar"],
+            "static output",
+            positive=False,
+        )
 
     if args.get("use_mutatormath"):
         for module in ("defcon", "mutatorMath"):
@@ -469,17 +643,17 @@ def main(args=None):
                     "[mutatormath] extra"
                 )
 
-    PRINT_TRACEBACK = args.get("verbose", "INFO") == "DEBUG"
+    PRINT_TRACEBACK = level == "DEBUG"
     try:
-        project = FontProject(
-            timing=args.pop("timing"),
-            verbose=args.pop("verbose"),
-            validate_ufo=args.pop("validate_ufo"),
-        )
+        project = FontProject(validate_ufo=args.pop("validate_ufo"))
+
+        if inputs.glyphs_path:
+            # we don't support customizing include directory for .glyphs input
+            # for Glyphs.app does not either.
+            exclude_args(parser, args, ["fea_include_dir"], inputs.format_name)
 
-        if glyphs_path:
             with _make_tempdirs(parser, args):
-                project.run_from_glyphs(glyphs_path, **args)
+                project.run_from_glyphs(inputs.glyphs_path, **args)
             return
 
         exclude_args(
@@ -492,13 +666,13 @@ def main(args=None):
                 "master_dir",
                 "instance_dir",
             ],
-            input_format,
+            inputs.format_name,
         )
         exclude_args(
-            parser, args, ["write_skipexportglyphs"], input_format, positive=False
+            parser, args, ["write_skipexportglyphs"], inputs.format_name, positive=False
         )
-        if designspace_path:
-            project.run_from_designspace(designspace_path, **args)
+        if inputs.designspace_path:
+            project.run_from_designspace(inputs.designspace_path, **args)
             return
 
         exclude_args(
@@ -506,15 +680,18 @@ def main(args=None):
             args,
             [
                 "interpolate",
+                "variable_fonts",
                 "use_mutatormath",
                 "interpolate_binary_layout",
                 "round_instances",
                 "expand_features_to_instances",
+                "check_compatibility",
             ],
-            input_format,
+            inputs.format_name,
         )
+        args.pop("ufo_structure", None)  # unused for UFO output
         project.run_from_ufos(
-            ufo_paths, is_instance=args.pop("masters_as_instances"), **args
+            inputs.ufo_paths, is_instance=args.pop("masters_as_instances"), **args
         )
     except FontmakeError as e:
         if PRINT_TRACEBACK:
diff --git a/Lib/fontmake/compatibility.py b/Lib/fontmake/compatibility.py
new file mode 100644
index 0000000..8a164ce
--- /dev/null
+++ b/Lib/fontmake/compatibility.py
@@ -0,0 +1,84 @@
+import logging
+
+logger = logging.getLogger(__name__)
+
+
+class Context:
+    def __init__(self, checker, newcontext):
+        self.checker = checker
+        self.newcontext = newcontext
+
+    def __enter__(self):
+        self.checker.context.append(self.newcontext)
+
+    def __exit__(self, type, value, traceback):
+        self.checker.context.pop()
+
+
+class CompatibilityChecker:
+    def __init__(self, fonts):
+        self.errors = []
+        self.context = []
+        self.okay = True
+        self.fonts = fonts
+
+    def check(self):
+        first = self.fonts[0]
+        skip_export_glyphs = set(first.lib.get("public.skipExportGlyphs", ()))
+        for glyph in first.keys():
+            if glyph in skip_export_glyphs:
+                continue
+            self.current_fonts = [font for font in self.fonts if glyph in font]
+            glyphs = [font[glyph] for font in self.current_fonts]
+            with Context(self, f"glyph {glyph}"):
+                self.check_glyph(glyphs)
+        return self.okay
+
+    def check_glyph(self, glyphs):
+        if self.ensure_all_same(len, glyphs, "number of contours"):
+            for ix, contours in enumerate(zip(*glyphs)):
+                with Context(self, f"contour {ix}"):
+                    self.check_contours(contours)
+
+        anchors = [g.anchors for g in glyphs]
+        self.ensure_all_same(
+            lambda anchors: '"' + (", ".join(sorted(a.name for a in anchors))) + '"',
+            anchors,
+            "anchors",
+        )
+
+        components = [g.components for g in glyphs]
+        if self.ensure_all_same(len, components, "number of components"):
+            for ix, component in enumerate(zip(*components)):
+                with Context(self, f"component {ix}"):
+                    self.ensure_all_same(lambda c: c.baseGlyph, component, "base glyph")
+
+    def check_contours(self, contours):
+        if not self.ensure_all_same(len, contours, "number of points"):
+            return
+        for ix, point in enumerate(zip(*contours)):
+            with Context(self, f"point {ix}"):
+                self.ensure_all_same(lambda x: x.type, point, "point type")
+
+    def ensure_all_same(self, func, objs, what):
+        values = {}
+        context = ", ".join(self.context)
+        for obj, font in zip(objs, self.current_fonts):
+            values.setdefault(func(obj), []).append(self._name_for(font))
+        if len(values) < 2:
+            logger.debug(f"All fonts had same {what} in {context}")
+            return True
+        logger.error(f"Fonts had differing {what} in {context}:")
+        debug_enabled = logger.isEnabledFor(logging.DEBUG)
+        for value, fonts in values.items():
+            if debug_enabled or len(fonts) <= 6:
+                key = ", ".join(fonts)
+            else:
+                key = f"{len(fonts)} fonts"
+            logger.error(f" * {key} had {value}")
+        self.okay = False
+        return False
+
+    def _name_for(self, font):
+        names = list(filter(None, [font.info.familyName, font.info.styleName]))
+        return " ".join(names)
diff --git a/Lib/fontmake/errors.py b/Lib/fontmake/errors.py
index 02af1d4..2f8d6a5 100644
--- a/Lib/fontmake/errors.py
+++ b/Lib/fontmake/errors.py
@@ -45,10 +45,5 @@ class FontmakeError(Exception):
 class TTFAError(FontmakeError):
     def __init__(self, exitcode, source_file):
         self.exitcode = exitcode
-        self.source_trail = source_file
-
-    def __str__(self):
-        return (
-            f"ttfautohint failed for '{str(_try_relative_path(self.source_trail))}': "
-            f"error code {str(self.exitcode)}."
-        )
+        self.msg = f"ttfautohint failed with error code {str(self.exitcode)}"
+        self.source_trail = [source_file]
diff --git a/Lib/fontmake/font_project.py b/Lib/fontmake/font_project.py
index c34694e..246171b 100644
--- a/Lib/fontmake/font_project.py
+++ b/Lib/fontmake/font_project.py
@@ -12,6 +12,8 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+from __future__ import annotations
+
 import glob
 import logging
 import math
@@ -21,6 +23,7 @@ import tempfile
 from collections import OrderedDict
 from contextlib import contextmanager
 from functools import partial
+from pathlib import Path
 from re import fullmatch
 
 import attr
@@ -28,7 +31,8 @@ import ufo2ft
 import ufo2ft.errors
 import ufoLib2
 from fontTools import designspaceLib
-from fontTools.misc.loggingTools import Timer, configLogger
+from fontTools.designspaceLib.split import splitInterpolable
+from fontTools.misc.loggingTools import Timer
 from fontTools.misc.plistlib import load as readPlist
 from fontTools.ttLib import TTFont
 from fontTools.varLib.interpolate_layout import interpolate_layout
@@ -39,6 +43,7 @@ from ufo2ft.filters import FILTERS_KEY, loadFilters
 from ufo2ft.util import makeOfficialGlyphOrder
 
 from fontmake import instantiator
+from fontmake.compatibility import CompatibilityChecker
 from fontmake.errors import FontmakeError, TTFAError
 from fontmake.ttfautohint import ttfautohint
 
@@ -49,16 +54,25 @@ PUBLIC_PREFIX = "public."
 GLYPHS_PREFIX = "com.schriftgestaltung."
 # for glyphsLib < 2.3.0
 KEEP_GLYPHS_OLD_KEY = GLYPHS_PREFIX + "Keep Glyphs"
+REMOVE_GLYPHS_OLD_KEY = GLYPHS_PREFIX + "Remove Glyphs"
 # for glyphsLib >= 2.3.0
 KEEP_GLYPHS_NEW_KEY = (
     GLYPHS_PREFIX + "customParameter.InstanceDescriptorAsGSInstance.Keep Glyphs"
 )
+REMOVE_GLYPHS_NEW_KEY = (
+    GLYPHS_PREFIX + "customParameter.InstanceDescriptorAsGSInstance.Remove Glyphs"
+)
 GLYPH_EXPORT_KEY = GLYPHS_PREFIX + "Glyphs.Export"
+COMPAT_CHECK_KEY = GLYPHS_PREFIX + "customParameter.GSFont.Enforce Compatibility Check"
 
 INTERPOLATABLE_OUTPUTS = frozenset(
     ["ttf-interpolatable", "otf-interpolatable", "variable", "variable-cff2"]
 )
 
+AUTOHINTING_PARAMETERS = (
+    GLYPHS_PREFIX + "customParameter.InstanceDescriptorAsGSInstance.TTFAutohint options"
+)
+
 
 @contextmanager
 def temporarily_disabling_axis_maps(designspace_path):
@@ -102,14 +116,42 @@ def temporarily_disabling_axis_maps(designspace_path):
         os.remove(temp_designspace_path)
 
 
+def needs_subsetting(ufo):
+    if KEEP_GLYPHS_OLD_KEY in ufo.lib or KEEP_GLYPHS_NEW_KEY in ufo.lib:
+        return True
+    if REMOVE_GLYPHS_OLD_KEY in ufo.lib or REMOVE_GLYPHS_NEW_KEY in ufo.lib:
+        return True
+    if any(glyph.lib.get(GLYPH_EXPORT_KEY, True) is False for glyph in ufo):
+        return True
+    return False
+
+
 class FontProject:
     """Provides methods for building fonts."""
 
-    def __init__(self, timing=False, verbose="INFO", validate_ufo=False):
-        logging.basicConfig(level=getattr(logging, verbose.upper()))
-        logging.getLogger("fontTools.subset").setLevel(logging.WARNING)
-        if timing:
-            configLogger(logger=timer.logger, level=logging.DEBUG)
+    def __init__(
+        self,
+        timing=None,  # deprecated
+        verbose=None,  # deprecated
+        validate_ufo=False,
+    ):
+        if verbose is not None or timing is not None:
+            from warnings import warn
+
+            from fontmake.__main__ import _configure_logging
+
+            warn(
+                "The 'verbose'/'timing' arguments are deprecated. "
+                "Logging configuration is global and should not be "
+                "specified in the FontProject constructor. "
+                "Use the logging API to configure fontmake's loggers "
+                "for your application. E.g. fontmake main() function "
+                "uses logging.basicConfig().",
+                UserWarning,
+                stacklevel=2,
+            )
+
+            _configure_logging(verbose, timing)
 
         logger.debug(
             "ufoLib UFO validation is %s", "enabled" if validate_ufo else "disabled"
@@ -122,9 +164,14 @@ class FontProject:
         except Exception as e:
             raise FontmakeError("Reading UFO source failed", path) from e
 
-    def save_ufo_as(self, font, path):
+    def save_ufo_as(self, font, path, ufo_structure="package"):
         try:
-            font.save(path, overwrite=True, validate=self.validate_ufo)
+            font.save(
+                path,
+                overwrite=True,
+                validate=self.validate_ufo,
+                structure=ufo_structure,
+            )
         except Exception as e:
             raise FontmakeError("Writing UFO source failed", path) from e
 
@@ -139,6 +186,7 @@ class FontProject:
         mti_source=None,
         write_skipexportglyphs=True,
         generate_GDEF=True,
+        ufo_structure="package",
     ):
         """Build UFOs and MutatorMath designspace from Glyphs source."""
         import glyphsLib
@@ -149,22 +197,28 @@ class FontProject:
             os.mkdir(master_dir)
         if instance_dir is None:
             instance_dir = self._output_dir("ufo", is_instance=True)
-        if not os.path.isdir(instance_dir):
-            os.mkdir(instance_dir)
-
-        try:
-            font = glyphsLib.GSFont(glyphs_path)
-        except Exception as e:
-            raise FontmakeError("Loading Glyphs file failed", glyphs_path) from e
 
         if designspace_path is not None:
             designspace_dir = os.path.dirname(designspace_path)
         else:
             designspace_dir = master_dir
-        if os.path.isabs(instance_dir):
-            # glyphsLib.to_designspace expects instance_dir to be relative
+        # glyphsLib.to_designspace expects instance_dir to be relative to the
+        # designspace's own directory
+        try:
             instance_dir = os.path.relpath(instance_dir, designspace_dir)
-            assert not os.path.isabs(instance_dir)
+        except ValueError as e:
+            raise FontmakeError(
+                "Can't make instance_dir path relative to designspace. "
+                "If on Windows, please make sure that --instance-dir, "
+                "--master-dir and --designspace-path are on the same mount drive "
+                "(e.g. C: or D:)",
+                glyphs_path,
+            ) from e
+
+        try:
+            font = glyphsLib.load(glyphs_path)
+        except Exception as e:
+            raise FontmakeError("Loading Glyphs file failed", glyphs_path) from e
 
         designspace = glyphsLib.to_designspace(
             font,
@@ -173,6 +227,8 @@ class FontProject:
             write_skipexportglyphs=write_skipexportglyphs,
             ufo_module=ufoLib2,
             generate_GDEF=generate_GDEF,
+            store_editor_state=False,
+            minimal=True,
         )
 
         masters = {}
@@ -195,7 +251,7 @@ class FontProject:
             self.add_mti_features_to_master_ufos(mti_source, masters)
 
         for ufo_path, ufo in masters.items():
-            self.save_ufo_as(ufo, ufo_path)
+            self.save_ufo_as(ufo, ufo_path, ufo_structure)
 
         return designspace_path
 
@@ -253,12 +309,11 @@ class FontProject:
         feature_writers=None,
         cff_round_tolerance=None,
         debug_feature_file=None,
+        fea_include_dir=None,
         flatten_components=False,
         filters=None,
         **kwargs,
     ):
-        designspace = self._load_designspace_sources(designspace)
-
         if ttf:
             return ufo2ft.compileInterpolatableTTFsFromDS(
                 designspace,
@@ -267,6 +322,7 @@ class FontProject:
                 cubicConversionError=conversion_error,
                 featureWriters=feature_writers,
                 debugFeatureFile=debug_feature_file,
+                feaIncludeDir=fea_include_dir,
                 filters=filters,
                 flattenComponents=flatten_components,
                 inplace=True,
@@ -278,6 +334,7 @@ class FontProject:
                 roundTolerance=cff_round_tolerance,
                 featureWriters=feature_writers,
                 debugFeatureFile=debug_feature_file,
+                feaIncludeDir=fea_include_dir,
                 filters=filters,
                 inplace=True,
             )
@@ -294,9 +351,10 @@ class FontProject:
         """
         return self._build_interpolatable_masters(designspace, ttf=False, **kwargs)
 
-    def build_variable_font(
+    def build_variable_fonts(
         self,
-        designspace,
+        designspace: designspaceLib.DesignSpaceDocument,
+        variable_fonts: str = ".*",
         output_path=None,
         output_dir=None,
         ttf=True,
@@ -308,27 +366,58 @@ class FontProject:
         feature_writers=None,
         cff_round_tolerance=None,
         debug_feature_file=None,
+        fea_include_dir=None,
         flatten_components=False,
         filters=None,
         **kwargs,
     ):
-        """Build OpenType variable font from masters in a designspace."""
+        """Build OpenType variable fonts from masters in a designspace."""
         assert not (output_path and output_dir), "mutually exclusive args"
-        designspace = self._load_designspace_sources(designspace)
 
-        if output_path is None:
-            output_path = (
-                os.path.splitext(os.path.basename(designspace.path))[0] + "-VF"
+        vfs_in_document = designspace.getVariableFonts()
+        if not vfs_in_document:
+            logger.warning(
+                "No variable fonts in given designspace %s", designspace.path
             )
-            ext = "ttf" if ttf else "otf"
-            output_path = self._output_path(
-                output_path, ext, is_variable=True, output_dir=output_dir
+            return {}
+
+        vfs_to_build = []
+        for vf in vfs_in_document:
+            # Skip variable fonts that do not match the user's inclusion regex if given.
+            if not fullmatch(variable_fonts, vf.name):
+                continue
+            vfs_to_build.append(vf)
+
+        if not vfs_to_build:
+            logger.warning("No variable fonts matching %s", variable_fonts)
+            return {}
+
+        if len(vfs_to_build) > 1 and output_path:
+            raise FontmakeError(
+                "can't specify output path because there are several VFs to build",
+                designspace.path,
             )
 
-        logger.info("Building variable font " + output_path)
+        vf_name_to_output_path = {}
+        if len(vfs_to_build) == 1 and output_path is not None:
+            vf_name_to_output_path[vfs_to_build[0].name] = output_path
+        else:
+            for vf in vfs_to_build:
+                ext = "ttf" if ttf else "otf"
+                font_name = vf.name
+                if vf.filename is not None:
+                    font_name = Path(vf.filename).stem
+                output_path = self._output_path(
+                    font_name, ext, is_variable=True, output_dir=output_dir
+                )
+                vf_name_to_output_path[vf.name] = output_path
+
+        logger.info(
+            "Building variable fonts " + ", ".join(vf_name_to_output_path.values())
+        )
 
         if ttf:
-            font = ufo2ft.compileVariableTTF(
+            fonts = ufo2ft.compileVariableTTFs(
                 designspace,
                 featureWriters=feature_writers,
                 useProductionNames=use_production_names,
@@ -337,22 +426,27 @@ class FontProject:
                 optimizeGvar=optimize_gvar,
                 flattenComponents=flatten_components,
                 debugFeatureFile=debug_feature_file,
+                feaIncludeDir=fea_include_dir,
                 filters=filters,
                 inplace=True,
+                variableFontNames=list(vf_name_to_output_path),
             )
         else:
-            font = ufo2ft.compileVariableCFF2(
+            fonts = ufo2ft.compileVariableCFF2s(
                 designspace,
                 featureWriters=feature_writers,
                 useProductionNames=use_production_names,
                 roundTolerance=cff_round_tolerance,
                 debugFeatureFile=debug_feature_file,
+                feaIncludeDir=fea_include_dir,
                 optimizeCFF=optimize_cff,
                 filters=filters,
                 inplace=True,
+                variableFontNames=list(vf_name_to_output_path),
             )
 
-        font.save(output_path)
+        for name, font in fonts.items():
+            font.save(vf_name_to_output_path[name])
 
     def _iter_compile(self, ufos, ttf=False, debugFeatureFile=None, **kwargs):
         # generator function that calls ufo2ft compiler for each ufo and
@@ -412,6 +506,7 @@ class FontProject:
         flatten_components=False,
         filters=None,
         generate_GDEF=True,
+        fea_include_dir=None,
     ):
         """Build OpenType binaries from UFOs.
 
@@ -419,8 +514,13 @@ class FontProject:
             ufos: Font objects to compile.
             ttf: If True, build fonts with TrueType outlines and .ttf extension.
             is_instance: If output fonts are instances, for generating paths.
-            autohint: Parameters to provide to ttfautohint. If not provided, the
-                autohinting step is skipped.
+            autohint (Union[bool, None, str]): Parameters to provide to ttfautohint.
+                If set to None (default), the UFO lib is scanned for autohinting parameters.
+                If nothing is found, the autohinting step is skipped. The lib key is
+                "com.schriftgestaltung.customParameter.InstanceDescriptorAsGSInstance.TTFAutohint options".
+                If set to False, then no autohinting takes place whether or not the
+                source specifies 'TTFAutohint options'. If True, it runs ttfautohint
+                with no additional options.
             subset: Whether to subset the output according to data in the UFOs.
                 If not provided, also determined by flags in the UFOs.
             use_production_names: Whether to use production glyph names in the
@@ -462,7 +562,7 @@ class FontProject:
                 pre-filters or post-filters, called before or after the default
                 filters. The default filters are format specific and some can
                 be disabled with other arguments.
-        """
+        """  # noqa: B950
         assert not (output_path and output_dir), "mutually exclusive args"
 
         if output_path is not None and len(ufos) > 1:
@@ -509,6 +609,7 @@ class FontProject:
             cubicConversionError=conversion_error,
             featureWriters=feature_writers,
             debugFeatureFile=debug_feature_file,
+            feaIncludeDir=fea_include_dir,
             cffVersion=cff_version,
             subroutinizer=subroutinizer,
             flattenComponents=flatten_components,
@@ -516,8 +617,6 @@ class FontProject:
             inplace=True,  # avoid extra copy
         )
 
-        do_autohint = ttf and autohint is not None
-
         for font, ufo in zip(fonts, ufos):
             if interpolate_layout_from is not None:
                 master_locations, instance_locations = self._designspace_locations(
@@ -534,7 +633,22 @@ class FontProject:
                 if "GSUB" in gsub_src:
                     font["GSUB"] = gsub_src["GSUB"]
 
-            if do_autohint:
+            # Decide on autohinting and its parameters
+            autohint_thisfont = (
+                (
+                    None
+                    if autohint is False
+                    else ""  # use default options if autohint=True
+                    if autohint is True
+                    else autohint
+                    if autohint is not None
+                    else ufo.lib.get(AUTOHINTING_PARAMETERS)
+                )
+                if ttf
+                else None
+            )
+
+            if autohint_thisfont is not None:
                 # if we are autohinting, we save the unhinted font to a
                 # temporary path, and the hinted one to the final destination
                 fd, otf_path = tempfile.mkstemp("." + ext)
@@ -554,13 +668,10 @@ class FontProject:
             # None (default), we check the presence of custom parameters
             if subset is False:
                 pass
-            elif subset is True or (
-                (KEEP_GLYPHS_OLD_KEY in ufo.lib or KEEP_GLYPHS_NEW_KEY in ufo.lib)
-                or any(glyph.lib.get(GLYPH_EXPORT_KEY, True) is False for glyph in ufo)
-            ):
+            elif subset is True or needs_subsetting(ufo):
                 self.subset_otf_from_ufo(otf_path, ufo)
 
-            if not do_autohint:
+            if autohint_thisfont is None:
                 continue
 
             if output_path is not None:
@@ -570,7 +681,8 @@ class FontProject:
                     ufo, ext, is_instance, autohinted=True, output_dir=output_dir
                 )
             try:
-                ttfautohint(otf_path, hinted_otf_path, args=autohint)
+                logger.info("Autohinting %s", hinted_otf_path)
+                ttfautohint(otf_path, hinted_otf_path, args=autohint_thisfont)
             except TTFAError:
                 # copy unhinted font to destination before re-raising error
                 shutil.copyfile(otf_path, hinted_otf_path)
@@ -605,10 +717,10 @@ class FontProject:
         designspace.write(designspace_path)
 
     def subset_otf_from_ufo(self, otf_path, ufo):
-        """Subset a font using "Keep Glyphs" custom parameter and export flags as set
-        by glyphsLib.
+        """Subset a font using "Keep Glyphs"/"Remove Glyphs" custom parameters,
+        and export flags as set by glyphsLib.
 
-        "Export Glyphs" and "Remove Glyphs" are currently not supported:
+        "Export Glyphs" is currently not supported:
         https://github.com/googlei18n/glyphsLib/issues/295.
         """
         from fontTools import subset
@@ -635,11 +747,22 @@ class FontProject:
         else:
             keep_glyphs = None
 
+        for key in (REMOVE_GLYPHS_NEW_KEY, REMOVE_GLYPHS_OLD_KEY):
+            remove_glyphs_list = ufo.lib.get(key)
+            if remove_glyphs_list is not None:
+                remove_glyphs = set(remove_glyphs_list)
+                break
+        else:
+            remove_glyphs = None
+
         include = []
         for source_name, binary_name in zip(ufo_order, ot_order):
             if keep_glyphs and source_name not in keep_glyphs:
                 continue
 
+            if remove_glyphs and source_name in remove_glyphs:
+                continue
+
             if source_name in ufo:
                 exported = ufo[source_name].lib.get(GLYPH_EXPORT_KEY, True)
                 if not exported:
@@ -706,9 +829,16 @@ class FontProject:
             mti_source=mti_source,
             write_skipexportglyphs=write_skipexportglyphs,
             generate_GDEF=generate_GDEF,
+            ufo_structure=kwargs.get("ufo_structure"),
         )
+        # 'include' statements in features.fea should be resolved relative to
+        # the input .glyphs path, like Glyphs.app would do, and not relative
+        # to the UFOs that are generated by glyphsLib.
+        fea_include_dir = os.path.dirname(glyphs_path)
         try:
-            self.run_from_designspace(designspace_path, **kwargs)
+            self.run_from_designspace(
+                designspace_path, fea_include_dir=fea_include_dir, **kwargs
+            )
         except FontmakeError as e:
             e.source_trail.append(glyphs_path)
             raise
@@ -719,6 +849,8 @@ class FontProject:
         include=None,
         round_instances=False,
         expand_features_to_instances=False,
+        fea_include_dir=None,
+        ufo_structure="package",
     ):
         """Interpolate master UFOs with Instantiator and return instance UFOs.
 
@@ -749,56 +881,60 @@ class FontProject:
         except Exception as e:
             raise FontmakeError("Reading Designspace failed", designspace.path) from e
 
-        try:
-            generator = instantiator.Instantiator.from_designspace(
-                designspace, round_geometry=round_instances
-            )
-        except instantiator.InstantiatorError as e:
-            raise FontmakeError(
-                "Preparing the Designspace for interpolation failed", designspace.path
-            ) from e
-
-        if expand_features_to_instances:
-            logger.debug("Expanding features to instance UFOs")
-            fea_txt = parseLayoutFeatures(designspace.default.font).asFea()
-            generator = attr.evolve(generator, copy_feature_text=fea_txt)
-
-        for instance in designspace.instances:
-            # Skip instances that have been set to non-export in Glyphs, stored as the
-            # instance's `com.schriftgestaltung.export` lib key.
-            if not instance.lib.get("com.schriftgestaltung.export", True):
-                continue
-
-            # Skip instances that do not match the user's inclusion regex if given.
-            if include is not None and not fullmatch(include, instance.name):
-                continue
-
-            logger.info(f'Generating instance UFO for "{instance.name}"')
-
+        for _location, subDoc in splitInterpolable(designspace):
             try:
-                instance.font = generator.generate_instance(instance)
+                generator = instantiator.Instantiator.from_designspace(
+                    subDoc, round_geometry=round_instances
+                )
             except instantiator.InstantiatorError as e:
                 raise FontmakeError(
-                    f"Interpolating instance '{instance.styleName}' failed.",
+                    "Preparing the Designspace for interpolation failed",
                     designspace.path,
                 ) from e
 
-            apply_instance_data_to_ufo(instance.font, instance, designspace)
+            if expand_features_to_instances:
+                logger.debug("Expanding features to instance UFOs")
+                fea_txt = parseLayoutFeatures(
+                    subDoc.default.font, includeDir=fea_include_dir
+                ).asFea()
+                generator = attr.evolve(generator, copy_feature_text=fea_txt)
+
+            for instance in subDoc.instances:
+                # Skip instances that have been set to non-export in Glyphs, stored as the
+                # instance's `com.schriftgestaltung.export` lib key.
+                if not instance.lib.get("com.schriftgestaltung.export", True):
+                    continue
 
-            # TODO: Making filenames up on the spot is complicated, ideally don't save
-            # anything if filename is not set, but make something up when "ufo" is in
-            # output formats, but also consider output_path.
-            if instance.filename is None:
-                raise ValueError(
-                    "It is currently required that instances have filenames set."
+                # Skip instances that do not match the user's inclusion regex if given.
+                if include is not None and not fullmatch(include, instance.name):
+                    continue
+
+                logger.info(f'Generating instance UFO for "{instance.name}"')
+
+                try:
+                    instance.font = generator.generate_instance(instance)
+                except instantiator.InstantiatorError as e:
+                    raise FontmakeError(
+                        f"Interpolating instance '{instance.styleName}' failed.",
+                        designspace.path,
+                    ) from e
+
+                apply_instance_data_to_ufo(instance.font, instance, subDoc)
+
+                # TODO: Making filenames up on the spot is complicated, ideally don't save
+                # anything if filename is not set, but make something up when "ufo" is in
+                # output formats, but also consider output_path.
+                if instance.filename is None:
+                    raise ValueError(
+                        "It is currently required that instances have filenames set."
+                    )
+                ufo_path = os.path.join(
+                    os.path.dirname(designspace.path), instance.filename
                 )
-            ufo_path = os.path.join(
-                os.path.dirname(designspace.path), instance.filename
-            )
-            os.makedirs(os.path.dirname(ufo_path), exist_ok=True)
-            self.save_ufo_as(instance.font, ufo_path)
+                os.makedirs(os.path.dirname(ufo_path), exist_ok=True)
+                self.save_ufo_as(instance.font, ufo_path, ufo_structure)
 
-            yield instance.font
+                yield instance.font
 
     def interpolate_instance_ufos_mutatormath(
         self,
@@ -806,6 +942,7 @@ class FontProject:
         include=None,
         round_instances=False,
         expand_features_to_instances=False,
+        fea_include_dir=None,
     ):
         """Interpolate master UFOs with MutatorMath and return instance UFOs.
 
@@ -868,7 +1005,9 @@ class FontProject:
                 raise ValueError("No source is designated as the master for features.")
             else:
                 master_source_font = builder.sources[master_source.name][0]
-                master_source_features = parseLayoutFeatures(master_source_font).asFea()
+                master_source_features = parseLayoutFeatures(
+                    master_source_font, includeDir=fea_include_dir
+                ).asFea()
                 for instance_ufo in instance_ufos:
                     instance_ufo.features.text = master_source_features
                     instance_ufo.save()
@@ -880,6 +1019,7 @@ class FontProject:
         designspace_path,
         output=(),
         interpolate=False,
+        variable_fonts: str = ".*",
         masters_as_instances=False,
         interpolate_binary_layout=False,
         round_instances=False,
@@ -887,6 +1027,7 @@ class FontProject:
         filters=None,
         expand_features_to_instances=False,
         use_mutatormath=False,
+        check_compatibility=None,
         **kwargs,
     ):
         """Run toolchain from a DesignSpace document to produce either static
@@ -899,6 +1040,11 @@ class FontProject:
                 match given name. The string is compiled into a regular
                 expression and matched against the "name" attribute of
                 designspace instances using `re.fullmatch`.
+            variable_fonts: if True output all variable fonts, otherwise if the
+                value is a string, only build variable fonts that match the
+                given filename. As above, the string is compiled into a regular
+                expression and matched against the "filename" attribute of
+                designspace variable fonts using `re.fullmatch`.
             masters_as_instances: If True, output master fonts as instances.
             interpolate_binary_layout: Interpolate layout tables from compiled
                 master binaries.
@@ -931,6 +1077,8 @@ class FontProject:
         except Exception as e:
             raise FontmakeError("Reading Designspace failed", designspace_path) from e
 
+        designspace = self._load_designspace_sources(designspace)
+
         # if no --feature-writers option was passed, check in the designspace's
         # <lib> element if user supplied a custom featureWriters configuration;
         # if so, use that for all the UFOs built from this designspace
@@ -941,6 +1089,25 @@ class FontProject:
             preFilters, postFilters = loadFilters(designspace)
             filters = preFilters + postFilters
 
+        # Since Designspace version 5, one designspace file can have discrete
+        # axes (that do not interpolate) and thus only some sub-spaces are
+        # actually compatible for interpolation.
+        for discrete_location, subDoc in splitInterpolable(designspace):
+            # glyphsLib currently stores this custom parameter on the fonts,
+            # not the designspace, so we check if it exists in any font's lib.
+            source_fonts = [source.font for source in subDoc.sources]
+            explicit_check = any(
+                font.lib.get(COMPAT_CHECK_KEY, False) for font in source_fonts
+            )
+            if check_compatibility is not False and (
+                interp_outputs or check_compatibility or explicit_check
+            ):
+                if not CompatibilityChecker(source_fonts).check():
+                    message = "Compatibility check failed"
+                    if discrete_location:
+                        message += f" in interpolable sub-space at {discrete_location}"
+                    raise FontmakeError(message, designspace.path)
+
         try:
             if static_outputs:
                 self._run_from_designspace_static(
@@ -960,6 +1127,7 @@ class FontProject:
                 self._run_from_designspace_interpolatable(
                     designspace,
                     outputs=interp_outputs,
+                    variable_fonts=variable_fonts,
                     feature_writers=feature_writers,
                     filters=filters,
                     **kwargs,
@@ -985,7 +1153,9 @@ class FontProject:
         round_instances=False,
         feature_writers=None,
         expand_features_to_instances=False,
+        fea_include_dir=None,
         use_mutatormath=False,
+        ufo_structure="package",
         **kwargs,
     ):
         ufos = []
@@ -1000,6 +1170,7 @@ class FontProject:
                         include=pattern,
                         round_instances=round_instances,
                         expand_features_to_instances=expand_features_to_instances,
+                        fea_include_dir=fea_include_dir,
                     )
                 )
             else:
@@ -1009,6 +1180,8 @@ class FontProject:
                         include=pattern,
                         round_instances=round_instances,
                         expand_features_to_instances=expand_features_to_instances,
+                        fea_include_dir=fea_include_dir,
+                        ufo_structure=ufo_structure,
                     )
                 )
 
@@ -1016,6 +1189,9 @@ class FontProject:
             interpolate_layout_from = interpolate_layout_dir = None
         else:
             interpolate_layout_from = designspace
+            # Unload UFO fonts, we will reload them as binary
+            for s in interpolate_layout_from.sources:
+                s.font = None
             if isinstance(interpolate_binary_layout, str):
                 interpolate_layout_dir = interpolate_binary_layout
             else:
@@ -1028,17 +1204,28 @@ class FontProject:
             interpolate_layout_from=interpolate_layout_from,
             interpolate_layout_dir=interpolate_layout_dir,
             feature_writers=feature_writers,
+            fea_include_dir=fea_include_dir,
             **kwargs,
         )
 
     def _run_from_designspace_interpolatable(
-        self, designspace, outputs, output_path=None, output_dir=None, **kwargs
+        self,
+        designspace,
+        outputs,
+        variable_fonts: str = ".*",
+        output_path=None,
+        output_dir=None,
+        **kwargs,
     ):
         ttf_designspace = otf_designspace = None
 
         if "variable" in outputs:
-            self.build_variable_font(
-                designspace, output_path=output_path, output_dir=output_dir, **kwargs
+            self.build_variable_fonts(
+                designspace,
+                variable_fonts=variable_fonts,
+                output_path=output_path,
+                output_dir=output_dir,
+                **kwargs,
             )
 
         if "ttf-interpolatable" in outputs:
@@ -1046,8 +1233,9 @@ class FontProject:
             self._save_interpolatable_fonts(ttf_designspace, output_dir, ttf=True)
 
         if "variable-cff2" in outputs:
-            self.build_variable_font(
+            self.build_variable_fonts(
                 designspace,
+                variable_fonts=variable_fonts,
                 output_path=output_path,
                 output_dir=output_dir,
                 ttf=False,
diff --git a/Lib/fontmake/instantiator.py b/Lib/fontmake/instantiator.py
index a7eb8a3..e5d522c 100644
--- a/Lib/fontmake/instantiator.py
+++ b/Lib/fontmake/instantiator.py
@@ -203,6 +203,14 @@ class Instantiator:
         if designspace.default is None:
             raise InstantiatorError(_error_msg_no_default(designspace))
 
+        if any(hasattr(axis, "values") for axis in designspace.axes):
+            raise InstantiatorError(
+                "The given designspace has one or more discrete (= non-interpolating) "
+                "axes. You should split this designspace into smaller interpolating "
+                "spaces and use the Instantiator on each. See the method "
+                "`fontTools.designspaceLib.split.splitInterpolable()`"
+            )
+
         if any(anisotropic(instance.location) for instance in designspace.instances):
             raise InstantiatorError(
                 "The Designspace contains anisotropic instance locations, which are "
@@ -595,7 +603,7 @@ def collect_glyph_masters(
             source.location, axis_bounds
         )
         locations_and_masters.append(
-            (normalized_location, fontMath.MathGlyph(source_glyph))
+            (normalized_location, fontMath.MathGlyph(source_glyph, strict=True))
         )
 
     # Filter out empty glyphs if the default glyph is not empty.
diff --git a/Lib/fontmake/ttfautohint.py b/Lib/fontmake/ttfautohint.py
index 7069d41..90bc508 100644
--- a/Lib/fontmake/ttfautohint.py
+++ b/Lib/fontmake/ttfautohint.py
@@ -13,11 +13,26 @@
 # limitations under the License.
 
 
+import shutil
 import subprocess
+import sys
+from typing import List, Optional
 
 from fontmake.errors import FontmakeError, TTFAError
 
 
+def _which_ttfautohint() -> Optional[List[str]]:
+    # First check if ttfautohint-py is installed, else try to find the standalone
+    # ttfautohint command-line tool, or None if neither is found.
+    try:
+        import ttfautohint  # noqa: F401
+    except ImportError:
+        ttfautohint_path = shutil.which("ttfautohint")
+        return [ttfautohint_path] if ttfautohint_path else None
+    else:
+        return [sys.executable, "-m", "ttfautohint"]
+
+
 def ttfautohint(in_file, out_file, args=None, **kwargs):
     """Thin wrapper around the ttfautohint command line tool.
 
@@ -25,14 +40,19 @@ def ttfautohint(in_file, out_file, args=None, **kwargs):
     Python keyword arguments.
     """
 
-    arg_list = ["ttfautohint"]
     file_args = [in_file, out_file]
 
+    ttfautohint = _which_ttfautohint()
+    if ttfautohint is None:
+        raise FontmakeError(
+            "ttfautohint not found; try `pip install ttfautohint-py`", in_file
+        )
+
     if args is not None:
         if kwargs:
             raise TypeError("Should not provide both cmd args and kwargs.")
         try:
-            rv = subprocess.call(arg_list + args.split() + file_args)
+            rv = subprocess.call(ttfautohint + args.split() + file_args)
         except OSError as e:
             raise FontmakeError(
                 "Could not launch ttfautohint (is it installed?)", in_file
@@ -70,6 +90,7 @@ def ttfautohint(in_file, out_file, args=None, **kwargs):
         "x_height_snapping_exceptions",
     )
 
+    arg_list = []
     for option in boolean_options:
         if kwargs.pop(option, False):
             arg_list.append("--" + option.replace("_", "-"))
@@ -82,6 +103,6 @@ def ttfautohint(in_file, out_file, args=None, **kwargs):
     if kwargs:
         raise TypeError("Unexpected argument(s): " + ", ".join(kwargs.keys()))
 
-    rv = subprocess.call(arg_list + file_args)
+    rv = subprocess.call(ttfautohint + arg_list + file_args)
     if rv != 0:
         raise TTFAError(rv, in_file)
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..abc2908
--- /dev/null
+++ b/README.md
@@ -0,0 +1,132 @@
+![GitHub Actions Build Status][] ![Python Versions][] [![PyPI
+Version][]][1]
+
+# fontmake
+
+`fontmake` compiles fonts from various sources (`.glyphs`, `.ufo`, `designspace`) into binaries (`.otf`, `.ttf`). You can use it to create static instances and variable fonts.
+
+## Installation
+
+Fontmake requires Python 3.7 or later.
+
+Releases are available on [PyPI][] and can be installed with [pip][].
+
+``` bash
+pip3 install fontmake
+```
+
+Use the `-U`, `--upgrade` option to update fontmake and its dependencies
+to the newest available release:
+
+``` bash
+pip3 install -U fontmake
+```
+
+## Basic Usage
+
+After installation, you will be able to use the `fontmake` executable.
+
+For example, to compile a variable font from a Glyphs source file, use:
+
+``` bash
+fontmake MyFont.glyphs -o variable
+```
+
+The most important command line arguments to the `fontmake` executable are the required input, specified either as positional argument or using one of `-g`/`-u`/`-m` flags, and the optional `-o` flag, which chooses the output file format.
+
+### Source file format options
+
+There are two ways to specify the source file or files:
+
+One can either use the following, mutually exclusive, flags:
+* `-g filename.glyphs`: Converts a Glyphs source file to binary.
+* `-u filename.ufo ...`: Converts one or more UFO files to binary.
+* `-m filename.designspace`: Converts a Designspace file to binary. (The `-m` is for `mutatormath`, an old Python library for handling designspaces.)
+
+Alternatively, one can specify the input(s) as positional arguments without the flag, letting fontmake infer the source format from the file extension: e.g. ``fontmake MyFont.designspace``, etc.
+
+Note: if the positional arguments are preceded by an option that takes one or more arguments, you need to use the special `--` separator to mark all following
+arguments as positional (non-options), otherwise the parser gets confused. E.g., the `-i` option takes zero or one arguments (see futher below for details); without `--`, argparse thinks you didn't provide any inputs:
+
+```bash
+fontmake -i -- MyFont.designspace
+```
+
+Exactly one type of input can/must be specified, using either approaches.
+
+### Output file format options
+
+You may provide one or more output file formats after the `-o` option. For example, `-o otf ttf` creates OTF and TTF binary font files for each master in your input file.
+
+The following output file formats are available:
+
+* `otf`: Per-master OTF (CFF-outline) binaries. Placed in the `master_otf/` directory.
+* `ttf`: Per-master TTF (TrueType-outline) binaries. Placed in the `master_ttf/` directory.
+* `otf-cff2`: Per-master OTF binaries with CFF2 outlines. Placed in the `master_otf/` directory.
+* `variable`: A TrueType variable font. Placed in the `variable_ttf/` directory.
+* `variable-cff2`: A variable font with CFF2 outlines. Placed in the `variable_otf/` directory.
+
+The following output file formats are also available, but are generally used internally by fontmake as an intermediate step to one of the above outputs:
+
+* `otf-interpolatable`: OTF binaries suitable for merging into a variable font. Placed in the `master_otf_interpolatable/` directory. (These differ from `otf` in that the outlines are unoptimized.)
+* `ttf-interpolatable`: TTF binaries suitable for merging into a variable font. Placed in the `master_ttf_interpolatable/` directory. (The outlines are converted to quadratic curves in an interpolation-compatible way.)
+* `ufo`: Glyphs sources can be converted to UFO. Placed in the `master_ufo/` directory.
+
+If no format option is specified, the default is `-o otf ttf`.
+
+### Other important command line options
+
+* `-i` (Interpolate instances): Having per-master binaries is not always what you expect; if you have defined instances ("exports") in your Glyphs file, they will *not* be generated by default. To generate them, pass the `-i` flag, which interpolates static instances, and places them in the `instance_ttf/` or `instance_otf/` directory as appropriate.
+
+* `--output-dir <some_directory>`: Places all output in the given directory, instead of the per-format directories mentioned above.
+
+* `--output-path <filename>`: This is only valid if the output is a single binary file, and writes the output to the given filename.
+
+* `-f` (Flatten components): Ensures that any glyphs which contain components which *themselves* contain components are decomposed to a single level. This is recommended as certain rendering environments do not correctly handle nested components - see [this link](https://github.com/googlefonts/fontbakery/issues/2961) for more details.
+
+## Advanced Usage
+
+See [`USAGE.md`](USAGE.md).
+
+## Troubleshooting
+
+See [`TROUBLESHOOTING.md`](TROUBLESHOOTING.md).
+
+## Developers
+
+Developers can get the latest version of `fontmake` by cloning the git repository:
+
+``` bash
+git clone https://github.com/googlefonts/fontmake
+cd fontmake
+pip install .
+```
+
+Developers who want to quickly test changes to the source code without re-installing can use the "--editable" option when installing from a local source checkout:
+
+``` bash
+pip install -e .
+```
+
+It is recommended to install fontmake inside a virtual environment to
+prevent conflicts between its dependencies and other modules installed
+globally.
+
+You could also use the [pipx][] tool to automate the
+installation/upgrade of python apps like fontmake in isolated
+environments.
+
+### Releasing a New Version
+
+0. Commit and push your final changes for the new version.
+1. Create an annotated Git tag of the version number, with a prepended "v", like so: `git tag -a v3.1.1`
+2. Write the release notes into the tag message. They will show up as release notes on the release page in GitHub.
+3. Push the tag like so: `git push origin v3.1.1`, where `origin` is the name of the usual remote you want to push the version to.
+
+  [GitHub Actions Build Status]: https://github.com/googlefonts/fontmake/workflows/Test%20+%20Deploy/badge.svg
+  [Python Versions]: https://img.shields.io/badge/python-3.7-blue.svg
+  [PyPI Version]: https://img.shields.io/pypi/v/fontmake.svg
+  [1]: https://pypi.org/project/fontmake/
+  [PyPI]: https://pypi.org/project/fontmake
+  [pip]: https://pip.pypa.io
+  [pipx]: https://github.com/pipxproject/pipx
diff --git a/README.rst b/README.rst
deleted file mode 100644
index 83a6801..0000000
--- a/README.rst
+++ /dev/null
@@ -1,76 +0,0 @@
-|GitHub Actions Build Status| |Python Versions| |PyPI Version|
-
-fontmake
-========
-
-This library provides a wrapper for several other Python libraries which
-together compile fonts from various sources (.glyphs, .ufo) into
-binaries (.otf, .ttf).
-
-
-Installation
-~~~~~~~~~~~~
-
-Fontmake requires Python 3.6 or later.
-
-Releases are available on `PyPI`_ and can be installed with `pip`_.
-
-.. code:: bash
-
-    pip install fontmake
-
-Use the ``-U``, ``--upgrade`` option to update fontmake and its dependencies
-to the newest available release:
-
-.. code:: bash
-
-    pip install -U fontmake
-
-Alternatively, you can download the git repository and install from source:
-
-.. code:: bash
-
-    git clone https://github.com/googlefonts/fontmake
-    cd fontmake
-    pip install .
-
-Developers who want to quickly test changes to the source code without
-re-installing, can use the "--editable" option when installing from a local
-source checkout:
-
-.. code:: bash
-
-    pip install -e .
-
-It is recommended to install fontmake inside a "virtual environment" to prevent
-conflicts between its dependencies and other modules installed globally.
-
-You could also use the `pipx`_ tool to automate the installation/upgrade of
-python apps like fontmake in isolated environments.
-
-Usage
-~~~~~
-
-After installation, you can use the ``fontmake`` console script. For example:
-
-.. code:: bash
-
-    fontmake -g MyFont.glyphs  # outputs binary font files for masters only
-
-Use ``fontmake -h`` to see options for specifying different types of input and
-output.
-
-You can also use fontmake as a module to run intermediate steps in the build
-process, via methods of the ``fontmake.font_project.FontProject`` class.
-
-.. _virtualenv: https://virtualenv.pypa.io
-.. _venv: https://docs.python.org/3/library/venv.html
-.. _pip: https://pip.pypa.io
-.. _pip documentation: https://pip.readthedocs.io/en/stable/user_guide/#requirements-files
-.. _PyPI: https://pypi.org/project/fontmake
-.. _Github releases: https://github.com/googlefonts/fontmake/releases
-.. _pipx: https://github.com/pipxproject/pipx
-.. |GitHub Actions Build Status| image:: https://github.com/googlefonts/fontmake/workflows/Test%20+%20Deploy/badge.svg
-.. |Python Versions| image:: https://img.shields.io/badge/python-3.6-blue.svg
-.. |PyPI Version| image:: https://img.shields.io/pypi/v/fontmake.svg
-   :target: https://pypi.org/project/fontmake/
diff --git a/TROUBLESHOOTING.md b/TROUBLESHOOTING.md
new file mode 100644
index 0000000..45136d6
--- /dev/null
+++ b/TROUBLESHOOTING.md
@@ -0,0 +1,27 @@
+# Troubleshooting
+
+Sometimes things go wrong with `fontmake`, and you will need to track down what happened. In such circumstances, it is best to remember that `fontmake` itself does not actually do very much; its job is merely to orchestrate calls to different Python libraries which perform the compilation steps. So:
+
+* If something goes wrong with converting Glyphs files to `.designspace` and `.ufo` files, that's probably a problem with [`glyphsLib`](https://github.com/googlefonts/glyphsLib).
+* Run pre-processing filters:
+  * If something goes wrong converting cubics to quadratics, that's probably a problem with [`cu2qu`](https://github.com/googlefonts/cu2qu).
+  * If something goes wrong when decomposing mixed glyphs, that's probably a problem with [`ufo2ft.filters.decomposeComponents`](https://github.com/googlefonts/ufo2ft/blob/main/Lib/ufo2ft/filters/decomposeComponents.py).
+  * If something goes wrong when removing overlaps, that's probably a problem with [`booleanOperations`](https://github.com/typemytype/booleanOperations)
+* Anything else that goes wrong is probably a problem with [`ufo2ft`](https://github.com/googlefonts/ufo2ft), except...
+* ...if something goes wrong when compiling multiple files into a variable font, that's probably a problem with [`fontTools.varLib`](https://github.com/fonttools/fonttools/tree/main/Lib/fontTools/varLib).
+
+In other words, any problems you experience are generally *not* problems with `fontmake`. But it's important to know at which point things went wrong, and which Python library was handling your font at the time.
+
+To do this, you can follow the following troubleshooting steps: 
+
+## Troubleshooting steps
+
+* If your design source is a Glyphs file, the first step that `fontmake` will peform is to using `glyphsLib` to convert the file to masters + designspace and place them in the `master_ufo` directory. So a good start is to inspect the files in this directory and make sure that they look the way you would expect them to look. Pay particular attention to the axis ranges of multiple-axis fonts and the positions of masters and instances on these axes in the `.designspace` file. If this is correct, you can use `fontmake -m` on the `.designspace` file to skip the Glyphs conversion step on subsequent runs.
+
+*  Once you have UFO files (or if you started with them in the first place), it can be helpful to pass the `--validate-ufo` flag to `fontmake` to check that the UFO files are valid and correct.
+
+*  Next, if you receive an error from `fontmake`, you can get the full traceback by changing the log level by passing the `--verbose DEBUG` flag. Please pass this flag before filing any issues - although often the full traceback will point you to the source of the problem!
+
+* Finally, you can debug the operation of the feature writers by passing the `--debug-feature-file <file>` flag. This will cause `fontmake` to write out the generated feature file to a known filename, allowing you to inspect the file afterwards and check that it is as expected.
+
+If none of these steps are helpful, please file an issue in the `fontmake` repository, or in the repository of the Python library responsible for the problem.
diff --git a/USAGE.md b/USAGE.md
new file mode 100644
index 0000000..9e8133d
--- /dev/null
+++ b/USAGE.md
@@ -0,0 +1,198 @@
+# Advanced Usage
+
+This guide assumes that you have read the basic instructions in `README.md`.
+
+## Functional overview
+
+`fontmake` has many more options than the basic ones outlined in `README.md`.
+These options customize various elements of the font compilation process, and so
+to understand the options, it helps to understand the general outline of the
+process by which `fontmake` creates binary fonts.
+
+Here are the basic operations:
+
+* Convert Glyphs file to `.designspace` and `.ufo` files.
+* Run pre-processing filters. (Convert cubics to quadratics for TTF outlines, decompose mixed glyphs, remove overlaps, etc.)
+* Generate explicit feature files. (Turn anchor and kerning information in source file into Adobe feature file syntax, so that it can be compiled into OpenType layout.)
+* Create outlines.
+* Build OpenType tables.
+* Run post-processing filters. (Rename glyphs to production names.)
+
+For most people, the default settings will produce optimal results, but in some situations you may wish to alter the default operation.
+
+## General options
+
+* `--no-production-names`: By default, `fontmake` renames the glyphs in the output binary font file during post-processing based on the value of the `public.postscriptNames` lib key in the UFO file. (In the case of Glyphs source files, conversion to UFO populates this lib key with the production names from the Glyphs file.) Any encoded glyphs without production names are renamed to `uniXXXX` based on their Unicode code point, unencoded ligature glyphs are renamed based on the production names of their components, and other unencoded glyphs are not renamed. The `--no-production-names` flag suppresses all glyph renaming.
+
+* `-a`/`-a "<arguments>"`: Run ttfautohint on TrueType output binary font files. If any arguments are provided in a quoted string, these are passed to the `ttfautohint` binary.
+
+* `--mti-source <plist>`: Instead of generating feature files from the design sources, this takes an external plist file which links masters to Monotype FontDame feature definition files. You may safely ignore this option unless you are compiling Monotype-supplied font sources for the Noto project.
+
+## Options for Glyphs sources
+
+* `--no-write-skipexportglyphs`: When converting the Glyphs sources to UFO, all glyphs, even glyphs not set to be exported into the font, are converted to UFO format. Glyphs which are set as unexported are listed in the `public.skipExportGlyphs` lib key of the UFO and designspace files. Before this key was standardized by UFO, older versions of `fontmake` would use a private lib key, `com.schriftgestaltung.Glyphs.Export` instead. If you are managing a workflow which tracks files created by an older version of `fontmake`, you may wish to use this flag to use the older lib key and maintain compatibility with those files.
+
+* `--instance-dir <path>`: When generating static instances from Glyphs sources with the `-i` flag, `fontmake` writes UFO files representing the instances to the `instance_ufo` directory by default before compiling them to binary. This flag directs `fontmake` to write these temporary UFO files to another directory. If you pass the special value `{tmp}`, `fontmake` uses a temporary directory which it removes after processing.
+
+* `--master-dir <path>`: Similarly, this specifies the directory to be used when writing UFO files representing the font masters.
+
+* `--designspace-path <path>`: When converting the masters to UFO, `fontmake` also creates a Designspace file in the `master_ufo` directory. This option specifies the path where the Designspace file should be written.
+
+* `--family-name <family name>`: When this flag is provided, the masters are given the family name supplied, and only instances containing that family name are exported. For example, you can use this to create multiple optical-size-specific subfamilies from a single Glyphs file; `--family-name "MyFont 12pt"` will set the family name to `MyFont 12pt` and only export the instances which contain `MyFont 12pt` in the `familyName` custom parameter of the instance definition.
+
+* `--subset` / `--no-subset`: By default, `fontmake` determines whether or not to subset an instance based on the presence or absence of "Keep Glyphs" custom parameter on the instance. To turn off subsetting despite the presence of a "Keep Glyphs" custom parameter, use the `--no-subset` flag.
+
+## Options for TrueType outlines
+
+* `--keep-overlaps`: By default, `fontmake` performs overlap removal on TrueType outlines, except when producing interpolatable or variable fonts. This flag directs `fontmake` to skip the overlap removal preprocessing step.
+
+* `--overlaps-backend booleanOperations|pathops`: Chooses the library for overlap removal. Skia's pathops library is faster but requires an additional library to be installed, and also appears to [fail on some glyphs](https://github.com/google/fonts/issues/3365), hence the default is the `booleanOperations` library.
+
+* `--no-optimize-gvar`: When compiling a variable font, the variation information is stored in a table called the `gvar` table inside the binary. OpenType allows fonts to omit some variations in the outlines if the variation information can be inferred from the surrounding points - for example, points along a line will often change at a rate determined by the average of the variations of their neighbours. Omitting variations for such points makes the font size smaller, so `fontmake` performs this optimization by default: this is called "Interpolation of Untouched Points", or IUP. This flag turns off the IUP optimization.
+
+* `--keep-direction`: Generally speaking, filled outlines in a TrueType font should have their points arranged in clockwise order and counter outlines should have their points in anti-clockwise order; design tools tend to order contours the other way around, so `fontmake` reverses the outlines when generating TrueType fonts. This flag keeps the outline direction as specified in the font source.
+
+* `--conversion-error ERROR`: When TrueType outlines are converted to binary, the curves are converted from cubic Béziers in the design sources to quadratic Bézier splines. However, as this conversion involves a degree reduction, it is not completely accurate, and hence the quadratic curves approximate the cubic originals. This flag controls the maximum permissible error, measured in ems. the default is 0.001, or one unit at 1000upm. Larger values will result in smaller font sizes, particularly for CJK fonts, but at the cost of fidelity to the original curves.
+
+* `--no-generate-GDEF`: As part of generating explicit feature files, `fontmake` uses the glyph categories in the source file to create a `table GDEF { ... } GDEF;` statement in the generated feature file; this is then compiled into the `GDEF` table of the font binaries. However, if the feature file in your source *also* contains a `table GDEF` statement, the font will fail to compile. In this case, you can add the `--no-generate-GDEF` flag to turn off writing an additional `table GDEF` statement in the generated feature file.
+
+## Options for CFF outlines
+
+* `--cff-round-tolerance FLOAT`: Controls the way that point coordinates are rounded in the CFF table. The default value of 0.5 rounds points to the nearest integer. Setting this value to 0 disables all coordinate rouding.
+
+* `--optimize-cff VALUE`: By default, the CFF table is compressed in two ways: in *specialization*, drawing operations are chosen which most efficiently express the contour. For example, where there is a horizontal line, it is more efficient to use the specialized `hlineto` drawing operator instead of the more general `lineto` operator, as the `lineto` operator takes two parameters (`dx dy`) and `dy` will always be zero in the case of horizontal lines, whereas `hlineto` only takes a `dx` parameter.
+
+Additionally, there is *subroutinization*, which places common sequences of operations into subroutines; this is somewhat similar to components, but at a lower level - for example, a stem with a serif which occurs in multiple glyphs might be subroutinized.
+
+This flag controls the degree of compression: 0 disables all optimizations; 1 applies specialization but disables subroutinization; and 2, the default, applies both specialization and subroutinization. You may want this flag if you are debugging CFF tables and want to compare the drawing operators more directly against the source outlines.
+
+* `--subroutinizer compreffor|cffsubr`: The work of CFF subroutinization, as described above, is one of the many things in `fontmake` that are outsourced to a separate Python library. The two libraries used are `compreffor` (the default for CFF1 - indeed, it only supports CFF1) and `cffsubr` (the default for CFF2). If you want to see whether `cffsubr` compresses the font better, you can use this flag to change the library used for subroutinization.
+
+## Options for instance generation
+
+* `-i <instance name>`: `-i` was introduced in the Basic Usage section for interpolating masters and generating instances. The flag may also be followed by an argument which is a string or regular expression; if this is provided, then only those instances which match the string will be generated. For example,`-i "Noto Sans Bold"`; `-i ".* UI Condensed"`.
+
+* `--use-mutatormath`: When generating instances from a designspace file, there are (again) two possible Python libraries which perform the interpolation: fontmake's internal `instantiator` module, and `mutatormath`. `instantiator` is a deliberately minimal implementation which works in most cases, but it does not support extrapolation (instances whose coordinates are placed outside of the range of the masters) or anisotropic locations (axes which have different degrees of variation on the X axis to the Y axis; these are not possible in OpenType variable fonts, but can be used to generate static instances in Fontlab VI and some Robofont extensions).
+
+* `-M`, `--masters-as-instances`: This flag causes `fontmake` to also create instance binaries for each master defined in the font, even if they are not explicitly exported as instances by default.
+
+* `--round-instances`: This option rounds glyph outlines when generating instances. (XXX Surely they're rounded to ints when they're written to the `glyf` table anyway. What does this actually do?)
+
+* `--expand-features-to-instances`: If any feature files within the design sources contain `include()` statements, and these statements contain a relative path, instances may fail to build because they are being compiled in a different directory to the original where the included feature files cannot be found. In that case, you should use this flag to expand all the `include()` statements before the instance is compiled. We know that you shouldn't have to do this by hand, and we will make it the default one day.
+
+* `--interpolate-binary-layout <directory>`: When `fontmake` generates instances, it creates a feature file for each master using feature writers, but it also creates an *interpolated* feature file using feature writers for static instances. But while feature writers can interpolate kerning and anchor positions, they do *not* interpolate explicit `pos` statements given in the source feature files - nor do they interpolate layout rules expressed in MonoType FontDame format. (See the `--mti-source` option.) In order to perform this interpolation, `fontmake` needs to build the binary master files and interpolate the GPOS tables directly, rather than the textual representation of layout rules. Hence, if you have explicit `pos` statements in the feature files of your masters and you need these to interpolate in instances, use this flag.
+
+## Outline Filtering
+
+As mentioned in the functional overview, `fontmake` has two "filtering" passes, a "preprocessing" pass on the UFO files which converts cubics to quadratics for TTF glyphs, removes overlaps, and so on, and a "postprocessing" pass on the output binary files. It is possible to add your own filters into this pipeline to further customize the font building process, and to achieve custom effects similar to Glyphs export filters.
+
+This can be done in two ways: either by writing, manually or automatically, entries into a `lib` key (`com.github.googlei18n.ufo2ft.filters`) in the `.designspace` or UFO file, or on the command line. For example, when converting from Glyphs to UFO, `fontmake` (via the `glyphsLib` library) adds the following entry to the UFO `lib.plist`:
+
+```xml
+    <key>com.github.googlei18n.ufo2ft.filters</key>
+    <array>
+      <dict>
+        <key>name</key>
+        <string>eraseOpenCorners</string>
+        <key>namespace</key>
+        <string>glyphsLib.filters</string>
+        <key>pre</key>
+        <true/>
+      </dict>
+    </array>
+```
+
+This calls the `EraseOpenCornersFilter` class from the Python module `glyphsLib.filters.eraseOpenCorners` as part of the `pre`-processing step, which converts any external open corners in the glyph outlines into plain corners.
+
+Any Python class inheriting from [`ufo2ft.filters.BaseFilter`](https://github.com/googlefonts/ufo2ft/blob/main/Lib/ufo2ft/filters/base.py) can be used as a filter, although the `namespace` must be provided, as in this case. Filters available through the `ufo2ft` library do not require a `namespace` key, as this library is the default source of filters. Filters can be further customized through optional arguments, as described below.
+
+To apply filters via a command-line, use the `--filter` argument with the following syntax: `--filter "python.package::ClassName(argument,argument)`; add the pseudo-argument `pre=True` to run the filter as a preprocessing step. For example, to use the `ufostroker` library to apply "noodling" effects to open paths in a source font, use `--filter 'ufostroker::StrokeFilter(Width=50,pre=True)`.
+
+### Included filters
+
+The `ufo2ft` library provides some default filters described below. Most of the filters are called automatically as part of `fontmake`'s ordinary pipeline, but some can be added manually. The filters are run in the following order:
+
+* (Any manually added pre-filters are called first.)
+
+* `ExplodeColorLayerGlyphs`: Called automatically to create glyphs out of color layers when constructing a `COLR` font with `colorPalettes` and `colorLayerMapping` lib keys.
+
+* `DecomposeComponents`: Called automatically when producing OTF outlines, and called on glyphs which have components *and* outlines when producing TTF binaries.
+
+* `FlattenComponents`: Called automatically to flatten nested components when the `-f` flag is passed to `fontmake`.
+
+* `RemoveOverlaps`: Called automatically to remove overlaps.
+
+* `CubicToQuadratic`: Called automatically when producing TTF binaries.
+
+* (Any manually added post-filters are called last.)
+
+Other filters available as part of `ufo2ft` are:
+
+* `DecomposeTransformedComponents`: Decomposes any components which have a non-identity transformation matrix (i.e. which are translated or scaled). For example, a `u` glyph from an `n` component flipped horizontally. Fonts constructed in this way can have rasterizing and hinting errors (see [here](https://github.com/googlefonts/fontmake/issues/253) and [here](https://github.com/googlefonts/fontbakery/issues/2011)). To fix fonts with these errors, add `--filter DecomposeTransformedComponentsFilter` to the `fontmake` command line.
+
+* `PropagateAnchors`: Creates additional anchors for composite glyphs based on the anchors of their components.
+
+* `SortContours`: Sorts the contours based on their bounding box size. Can be added manually to alleviate overlap removal bugs, but must be manually placed in the UFO lib so that it is executed between `DecomposeComponents` and `RemoveOverlaps`.
+
+* `Transformations`: Similar to the Glyphs "Transformations" filter, this allows for outlines to be scaled, translated or transformed on export. For example, to scale down and raise up the glyphs "A" and "B" of a font, add this to the lib file:
+
+```xml
+    <key>com.github.googlei18n.ufo2ft.filters</key>
+    <array>
+      <dict>
+        <key>name</key>
+        <string>transformations</string>
+        <key>kwargs</key>
+        <dict>
+            <key>OffsetX</key>
+            <integer>0</integer>
+            <key>OffsetY</key>
+            <integer>150</integer>
+            <key>ScaleX</key>
+            <integer>75</integer>
+            <key>ScaleY</key>
+            <integer>75</integer>
+        </dict>
+        <key>include</key>
+        <array>
+            <string>A</string>
+            <string>B</string>
+        </array>
+      </dict>
+    </array>
+```
+
+## Feature writing
+
+In a similar vein to the filter classes, `fontmake` allows you to customize the way that kerning and anchor rules in the font sources are turned into explicit rules in the autogenerated feature file. These generated rules are written by classes called feature writers. The feature writers can also be customized with a lib key, `com.github.googlei18n.ufo2ft.featureWriters`.
+
+For example, all feature writers take the `mode` option, which takes either the value `append` or `skip`. The default is `skip`, which will skip writing the feature if the feature is already explicitly present in the design sources' features file.
+
+> However, note that even in `skip` mode, if the existing feature code contains the magic string `# Automatic Code`, the feature code generated by fontmake will be inserted into the feature file at the location of the comment.
+
+To change this to `append` for the kern feature writer (i.e. to add generated kerning rules from the kerning table onto the end of the manually supplied `kern` feature), you would add the following lib key:
+
+```xml
+    <key>com.github.googlei18n.ufo2ft.featureWriters</key>
+    <array>
+        <dict>
+            <key>class</key>
+            <string>KernFeatureWriter</string>
+            <key>options</key>
+            <dict>
+                <key>mode</key>
+                <string>append</string>
+            </dict>
+        </dict>
+    </array>
+```
+
+There is also a `--feature-writer` option, analogous to `--filters`, allowing you to load custom feature writers on the command line. The special value `--feature-writer "None"` disables all automatic feature generation.
+
+`ufo2ft` provides three feature writer classes:
+
+* `GdefFeatureWriter` generates the `table GDEF { } GDEF;` statement, based on the categories of the glyphs (stored in the `public.openTypeCategories` lib key of the source font) and ligature caret anchors (anchors starting with `caret_` or `vcaret_`). It has no customizable parameters. It can be disabled with the `--no-generate-GDEF` flag.
+
+* `KernFeatureWriter` generates kerning features (or, for certain complex scripts, `dist` features) based on the kerning information in the design sources. It has two optional parameters in addition to `mode`: `ignoreMarks`, which defaults to `True`, will emit an `LookupFlag IgnoreMarks` in the generated `kern` feature; setting this to `False` will generate kern rules which do not ignore mark glyphs. Additionally, `quantization` can be set to an integer value to round the kern rules to the nearest multiple of its value, which can help with compressing the tables.
+
+* `MarkFeatureWriter` generates `mark` and `mkmk` features based on the anchor information in the design sources. It has one optional parameter, `quantization`, which rounds the anchor positions to the nearest multiple of its value, which makes anchors more likely to be shared in the `GPOS` table, potentially reducing its size at the expense of some fidelity.
diff --git a/build_pyz.sh b/build_pyz.sh
index 8e25446..446f0f5 100755
--- a/build_pyz.sh
+++ b/build_pyz.sh
@@ -6,7 +6,7 @@ set -x
 HERE="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
 
 PLATFORMS=(manylinux1_x86_64 macosx_10_6_intel win32 win_amd64)
-PYTHON_VERSIONS=(3.6 3.7 3.8)
+PYTHON_VERSIONS=(3.7 3.8 3.9)
 FONTMAKE_VERSION="$(python setup.py --version)"
 
 FONTMAKE_WHEEL="${HERE}/dist/fontmake-${FONTMAKE_VERSION}-py3-none-any.whl"
diff --git a/debian/changelog b/debian/changelog
index e88d80b..f150af0 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,10 @@
+fontmake (3.5.1-1) UNRELEASED; urgency=low
+
+  * New upstream release.
+  * Drop patch do-not-use-glyphs-private-attr.patch, present upstream.
+
+ -- Debian Janitor <janitor@jelmer.uk>  Sat, 25 Feb 2023 16:31:07 -0000
+
 fontmake (2.4.1-2) unstable; urgency=medium
 
   * Team Upload.
diff --git a/debian/patches/do-not-use-glyphs-private-attr.patch b/debian/patches/do-not-use-glyphs-private-attr.patch
deleted file mode 100644
index 7547357..0000000
--- a/debian/patches/do-not-use-glyphs-private-attr.patch
+++ /dev/null
@@ -1,64 +0,0 @@
-commit f2ca4dc67f6b2535724758befff5e83ba7fd0a2e
-Author: Cosimo Lupo <clupo@google.com>
-Date:   Fri Oct 28 13:25:06 2022 -0700
-
-    tests: don't try access private TTGlyphSet._glyph attribute
-    
-    it's no longer there in latest fonttools
-
---- a/tests/test_main.py
-+++ b/tests/test_main.py
-@@ -28,14 +28,15 @@
- 
-     test_output_ttf = fontTools.ttLib.TTFont(tmp_path / "MyFont-Regular.ttf")
-     assert test_output_ttf["OS/2"].usWeightClass == 400
--    glyph = test_output_ttf.getGlyphSet()["l"]._glyph
-+    glyph = test_output_ttf["glyf"]["l"]
-     assert glyph.xMin == 50
-     assert glyph.xMax == 170
- 
-     test_output_otf = fontTools.ttLib.TTFont(tmp_path / "MyFont-Regular.otf")
-     assert test_output_otf["OS/2"].usWeightClass == 400
-     glyph_set = test_output_otf.getGlyphSet()
--    glyph = glyph_set["l"]._glyph
-+    charstrings = list(test_output_otf["CFF "].cff.values())[0].CharStrings
-+    glyph = charstrings["l"]
-     x_min, _, x_max, _ = glyph.calcBounds(glyph_set)
-     assert x_min == 50
-     assert x_max == 170
-@@ -62,14 +63,15 @@
- 
-     test_output_ttf = fontTools.ttLib.TTFont(tmp_path / "MyFont-Regular.ttf")
-     assert test_output_ttf["OS/2"].usWeightClass == 400
--    glyph = test_output_ttf.getGlyphSet()["l"]._glyph
-+    glyph = test_output_ttf["glyf"]["l"]
-     assert glyph.xMin == 50
-     assert glyph.xMax == 170
- 
-     test_output_otf = fontTools.ttLib.TTFont(tmp_path / "MyFont-Regular.otf")
-     assert test_output_otf["OS/2"].usWeightClass == 400
-     glyph_set = test_output_otf.getGlyphSet()
--    glyph = glyph_set["l"]._glyph
-+    charstrings = list(test_output_otf["CFF "].cff.values())[0].CharStrings
-+    glyph = charstrings["l"]
-     x_min, _, x_max, _ = glyph.calcBounds(glyph_set)
-     assert x_min == 50
-     assert x_max == 170
-@@ -119,14 +121,15 @@
- 
-     test_output_ttf = fontTools.ttLib.TTFont(tmp_path / "MyFont-Regular.ttf")
-     assert test_output_ttf["OS/2"].usWeightClass == 400
--    glyph = test_output_ttf.getGlyphSet()["l"]._glyph
-+    glyph = test_output_ttf["glyf"]["l"]
-     assert glyph.xMin == 50
-     assert glyph.xMax == 170
- 
-     test_output_otf = fontTools.ttLib.TTFont(tmp_path / "MyFont-Regular.otf")
-     assert test_output_otf["OS/2"].usWeightClass == 400
-     glyph_set = test_output_otf.getGlyphSet()
--    glyph = glyph_set["l"]._glyph
-+    charstrings = list(test_output_otf["CFF "].cff.values())[0].CharStrings
-+    glyph = charstrings["l"]
-     x_min, _, x_max, _ = glyph.calcBounds(glyph_set)
-     assert x_min == 50
-     assert x_max == 170
diff --git a/debian/patches/series b/debian/patches/series
index d55b1af..e69de29 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1 +0,0 @@
-do-not-use-glyphs-private-attr.patch
diff --git a/requirements.txt b/requirements.txt
index d245859..d9b41ca 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,14 +1,15 @@
-fonttools[unicode,ufo,lxml]==4.22.0 ; platform_python_implementation == 'CPython'
-fonttools[unicode,ufo]==4.22.0 ; platform_python_implementation != 'CPython'
+fonttools[unicode,ufo,lxml]==4.38.0; platform_python_implementation == 'CPython'
+fonttools[unicode,ufo]==4.38.0; platform_python_implementation != 'CPython'
 cu2qu==1.6.7.post1
-glyphsLib==5.3.2
-ufo2ft[pathops]==2.21.0
+glyphsLib==6.1.0
+ufo2ft==2.29.0
 MutatorMath==3.0.1
-fontMath==0.6.0
-defcon[lxml]==0.8.1 ; platform_python_implementation == 'CPython'
-defcon==0.8.1 ; platform_python_implementation != 'CPython'
+fontMath==0.9.3
+defcon[lxml]==0.10.2; platform_python_implementation == 'CPython'
+defcon==0.10.2; platform_python_implementation != 'CPython'
 booleanOperations==0.9.0
-ufoLib2==0.8.0
-attrs==20.3.0
-cffsubr==0.2.8
-compreffor==0.5.1
+ufoLib2==0.13.1
+attrs==22.1.0
+cffsubr==0.2.9.post1
+compreffor==0.5.2
+ttfautohint-py==0.5.1
diff --git a/setup.py b/setup.py
index 3ff8574..51ff2f9 100644
--- a/setup.py
+++ b/setup.py
@@ -24,9 +24,21 @@ site.ENABLE_USER_SITE = "--user" in sys.argv[1:]
 needs_wheel = {"bdist_wheel"}.intersection(sys.argv)
 wheel = ["wheel"] if needs_wheel else []
 
-with open("README.rst", "r", encoding="utf-8") as f:
+with open("README.md", "r", encoding="utf-8") as f:
     long_description = f.read()
 
+extras_require = {
+    "pathops": ["skia-pathops>=0.3.0"],
+    # this is now default; kept here for backward compatibility
+    "lxml": [
+        # "lxml>=4.2.4",
+    ],
+    "mutatormath": ["MutatorMath>=2.1.2"],
+    "autohint": ["ttfautohint-py>=0.5.0"],
+}
+# use a special 'all' key as shorthand to includes all the extra dependencies
+extras_require["all"] = sum(extras_require.values(), [])
+
 setup(
     name="fontmake",
     use_scm_version={"write_to": "Lib/fontmake/_version.py"},
@@ -34,30 +46,24 @@ setup(
         "Compile fonts from sources (UFO, Glyphs) to binary (OpenType, TrueType)."
     ),
     long_description=long_description,
+    long_description_content_type="text/markdown",
     url="https://github.com/googlei18n/fontmake",
     license="Apache Software License 2.0",
     packages=find_packages("Lib"),
     package_dir={"": "Lib"},
     entry_points={"console_scripts": ["fontmake = fontmake.__main__:main"]},
     setup_requires=wheel + ["setuptools_scm"],
-    python_requires=">=3.6",
+    python_requires=">=3.7",
     install_requires=[
-        "fonttools[ufo,lxml,unicode]>=4.21.1 ; platform_python_implementation == 'CPython'",
-        "fonttools[ufo,unicode]>=4.21.1 ; platform_python_implementation != 'CPython'",
-        "glyphsLib>=5.3.2",
-        "ufo2ft[compreffor]>=2.20.0",
-        "fontMath>=0.6.0",
-        "ufoLib2>=0.8.0",
+        "fonttools[ufo,lxml,unicode]>=4.38.0 ; implementation_name == 'cpython'",
+        "fonttools[ufo,unicode]>=4.38.0 ; implementation_name != 'cpython'",
+        "glyphsLib>=6.1.0",
+        "ufo2ft[compreffor]>=2.29.0",
+        "fontMath>=0.9.3",
+        "ufoLib2>=0.13.0",
         "attrs>=19",
     ],
-    extras_require={
-        "pathops": ["skia-pathops>=0.3.0"],
-        # this is now default; kept here for backward compatibility
-        "lxml": [
-            # "lxml>=4.2.4",
-        ],
-        "mutatormath": ["MutatorMath>=2.1.2"],
-    },
+    extras_require=extras_require,
     classifiers=[
         "Development Status :: 4 - Beta",
         "Environment :: Console",
diff --git a/tests/data/AutohintingTest/Padyakke.glyphs b/tests/data/AutohintingTest/Padyakke.glyphs
new file mode 100644
index 0000000..32e6423
--- /dev/null
+++ b/tests/data/AutohintingTest/Padyakke.glyphs
@@ -0,0 +1,8449 @@
+{
+.appVersion = "3091";
+copyright = "Copyright 2015 The Padyakke Project Authors (https://github.com/DunwichType/Padyakke_Libre)";
+customParameters = (
+{
+name = DisableAllAutomaticBehaviour;
+value = 1;
+},
+{
+name = fsType;
+value = (
+);
+},
+{
+name = "Use Typo Metrics";
+value = 1;
+},
+{
+name = license;
+value = "This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is available with a FAQ at: http://scripts.sil.org/OFL";
+},
+{
+name = licenseURL;
+value = "http://scripts.sil.org/OFL";
+},
+{
+name = trademark;
+value = "Padyakke is a trademark of Dunwich Type Founders.";
+},
+{
+name = note;
+value = "Conjunct Size: scale width to 98.3%";
+}
+);
+date = "2015-09-17 23:00:20 +0000";
+designer = "James Puckett";
+designerURL = "http://www.dunwichtype.com";
+disablesNiceNames = 1;
+familyName = "Padyakke Expanded One";
+fontMaster = (
+{
+alignmentZones = (
+"{520, 25}",
+"{405, 20}",
+"{357, 25}",
+"{0, -25}",
+"{-165, -5}"
+);
+ascender = 907;
+capHeight = 520;
+customParameters = (
+{
+name = TTFStems;
+value = (
+{
+horizontal = 0;
+name = Horizontals;
+width = 22;
+}
+);
+},
+{
+name = typoAscender;
+value = 813;
+},
+{
+name = typoDescender;
+value = 628;
+},
+{
+name = typoLineGap;
+value = 0;
+},
+{
+name = hheaAscender;
+value = 813;
+},
+{
+name = hheaDescender;
+value = 628;
+},
+{
+name = hheaLineGap;
+value = 0;
+},
+{
+name = winAscent;
+value = 843;
+},
+{
+name = winDescent;
+value = 628;
+}
+);
+descender = -368;
+guideLines = (
+{
+position = "{10, 555}";
+},
+{
+position = "{10, 405}";
+},
+{
+position = "{10, 383}";
+},
+{
+position = "{10, -368}";
+},
+{
+angle = 180;
+position = "{13, 70}";
+},
+{
+position = "{10, 4}";
+},
+{
+position = "{10, 417}";
+},
+{
+position = "{20, -90}";
+},
+{
+position = "{10, -21}";
+},
+{
+position = "{10, -288}";
+},
+{
+position = "{805, 672}";
+},
+{
+position = "{10, 383}";
+},
+{
+position = "{-50, -504}";
+},
+{
+position = "{-192, -523}";
+},
+{
+position = "{10, 318}";
+},
+{
+position = "{10, 318}";
+},
+{
+position = "{10, 383}";
+},
+{
+position = "{10, 383}";
+}
+);
+horizontalStems = (
+23
+);
+id = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+userData = {
+GSOffsetHorizontal = -1;
+GSOffsetProportional = 1;
+GSOffsetVertical = -12;
+};
+verticalStems = (
+23
+);
+weight = Light;
+xHeight = 357;
+}
+);
+glyphs = (
+{
+color = 0;
+glyphname = A;
+lastChange = "2016-05-06 20:28:43 +0000";
+layers = (
+{
+anchors = (
+{
+name = bottom;
+position = "{514, 0}";
+},
+{
+name = hook;
+position = "{603, 585}";
+},
+{
+name = ogonek;
+position = "{878, 0}";
+},
+{
+name = top;
+position = "{512, 520}";
+}
+);
+hints = (
+{
+horizontal = 1;
+origin = "{1, 3}";
+target = "{1, 2}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{2, 3}";
+target = "{2, 2}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{4, 2}";
+target = "{4, 3}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{1, 2}";
+target = "{1, 1}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{1, 2}";
+target = "{3, 2}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{1, 2}";
+target = "{3, 1}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{1, 3}";
+target = "{3, 3}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{4, 3}";
+target = "{4, 0}";
+type = Align;
+}
+);
+layerId = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+paths = (
+{
+closed = 1;
+nodes = (
+"180 14 LINE",
+"515 502 LINE",
+"511 502 LINE",
+"847 14 LINE",
+"875 14 LINE",
+"531 510 LINE",
+"493 510 LINE",
+"150 14 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"334 0 LINE",
+"334 23 LINE",
+"-5 23 LINE",
+"-5 0 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"731 199 LINE",
+"715 222 LINE",
+"309 222 LINE",
+"290 199 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"1030 0 LINE",
+"1030 23 LINE",
+"691 23 LINE",
+"691 0 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"700 497 LINE",
+"700 520 LINE",
+"324 520 LINE",
+"324 497 LINE"
+);
+}
+);
+width = 1025;
+}
+);
+leftKerningGroup = A;
+rightKerningGroup = A;
+unicode = 0041;
+},
+{
+color = 0;
+glyphname = B;
+lastChange = "2022-01-28 13:38:36 +0000";
+layers = (
+{
+anchors = (
+{
+name = bottom;
+position = "{462, 0}";
+},
+{
+name = top;
+position = "{462, 520}";
+}
+);
+hints = (
+{
+horizontal = 1;
+origin = "{0, 33}";
+target = "{0, 32}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 14}";
+target = "{0, 15}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 15}";
+target = "{1, 1}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{0, 32}";
+target = "{1, 0}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{0, 24}";
+target = "{0, 23}";
+type = TTStem;
+options = 4;
+}
+);
+layerId = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+paths = (
+{
+closed = 1;
+nodes = (
+"674 0 LINE SMOOTH",
+"791 0 OFFCURVE",
+"862 45 OFFCURVE",
+"862 136 CURVE SMOOTH",
+"862 231 OFFCURVE",
+"781 270 OFFCURVE",
+"665 270 CURVE",
+"665 262 LINE",
+"775 262 OFFCURVE",
+"828 315 OFFCURVE",
+"828 391 CURVE SMOOTH",
+"828 469 OFFCURVE",
+"769 520 OFFCURVE",
+"667 520 CURVE SMOOTH",
+"56 520 LINE",
+"56 496 LINE",
+"665 496 LINE SMOOTH",
+"744 496 OFFCURVE",
+"803 465 OFFCURVE",
+"803 391 CURVE SMOOTH",
+"803 316 OFFCURVE",
+"745 279 OFFCURVE",
+"661 279 CURVE SMOOTH",
+"255 279 LINE",
+"255 255 LINE",
+"656 254 LINE SMOOTH",
+"756 254 OFFCURVE",
+"837 222 OFFCURVE",
+"837 136 CURVE SMOOTH",
+"837 55 OFFCURVE",
+"769 23 OFFCURVE",
+"667 23 CURVE SMOOTH",
+"56 23 LINE",
+"56 0 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"264 14 LINE",
+"264 509 LINE",
+"239 509 LINE",
+"239 14 LINE"
+);
+}
+);
+width = 962;
+}
+);
+leftKerningGroup = H;
+leftMetricsKey = "=H";
+rightKerningGroup = B;
+unicode = 0042;
+},
+{
+color = 0;
+glyphname = C;
+lastChange = "2022-01-28 13:38:36 +0000";
+layers = (
+{
+anchors = (
+{
+name = bottom;
+position = "{431, -11}";
+},
+{
+name = top;
+position = "{440, 531}";
+}
+);
+hints = (
+{
+horizontal = 1;
+origin = "{0, 29}";
+target = "{0, 6}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 23}";
+target = "{0, 12}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 18}";
+type = Anchor;
+},
+{
+horizontal = 1;
+origin = "{0, 15}";
+type = Anchor;
+}
+);
+layerId = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+paths = (
+{
+closed = 1;
+nodes = (
+"645 -11 OFFCURVE",
+"752 85 OFFCURVE",
+"800 168 CURVE",
+"779 181 LINE",
+"739 107 OFFCURVE",
+"630 13 OFFCURVE",
+"431 13 CURVE SMOOTH",
+"249 13 OFFCURVE",
+"100 106 OFFCURVE",
+"100 260 CURVE SMOOTH",
+"100 415 OFFCURVE",
+"255 507 OFFCURVE",
+"440 507 CURVE SMOOTH",
+"577 507 OFFCURVE",
+"694 461 OFFCURVE",
+"785 330 CURVE",
+"797 332 LINE",
+"797 520 LINE",
+"773 520 LINE",
+"773 361 LINE",
+"785 361 LINE",
+"716 461 OFFCURVE",
+"600 531 OFFCURVE",
+"440 531 CURVE SMOOTH",
+"246 531 OFFCURVE",
+"75 432 OFFCURVE",
+"75 260 CURVE SMOOTH",
+"75 89 OFFCURVE",
+"240 -11 OFFCURVE",
+"431 -11 CURVE SMOOTH"
+);
+}
+);
+width = 890;
+}
+);
+leftKerningGroup = O;
+leftMetricsKey = "=O";
+rightKerningGroup = C;
+unicode = 0043;
+},
+{
+color = 0;
+glyphname = D;
+lastChange = "2022-01-28 13:38:36 +0000";
+layers = (
+{
+anchors = (
+{
+name = bottom;
+position = "{481, 0}";
+},
+{
+name = center;
+position = "{481, 245}";
+},
+{
+name = top;
+position = "{481, 520}";
+}
+);
+hints = (
+{
+horizontal = 1;
+origin = "{0, 17}";
+target = "{0, 16}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 7}";
+target = "{0, 8}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 8}";
+target = "{1, 1}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{0, 16}";
+target = "{1, 0}";
+type = Align;
+}
+);
+layerId = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+paths = (
+{
+closed = 1;
+nodes = (
+"545 0 LINE SMOOTH",
+"750 0 OFFCURVE",
+"890 85 OFFCURVE",
+"890 260 CURVE SMOOTH",
+"890 435 OFFCURVE",
+"750 520 OFFCURVE",
+"545 520 CURVE SMOOTH",
+"56 520 LINE",
+"56 496 LINE",
+"545 496 LINE SMOOTH",
+"740 496 OFFCURVE",
+"865 418 OFFCURVE",
+"865 260 CURVE SMOOTH",
+"865 102 OFFCURVE",
+"740 23 OFFCURVE",
+"545 23 CURVE SMOOTH",
+"56 23 LINE",
+"56 0 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"264 14 LINE",
+"264 507 LINE",
+"239 507 LINE",
+"239 14 LINE"
+);
+}
+);
+width = 965;
+}
+);
+leftKerningGroup = H;
+leftMetricsKey = "=H";
+rightKerningGroup = O;
+rightMetricsKey = "=O";
+unicode = 0044;
+},
+{
+color = 0;
+glyphname = E;
+lastChange = "2022-01-28 13:38:36 +0000";
+layers = (
+{
+anchors = (
+{
+name = bottom;
+position = "{501, 0}";
+},
+{
+name = ogonek;
+position = "{862, 0}";
+},
+{
+name = top;
+position = "{530, 520}";
+}
+);
+guideLines = (
+{
+angle = 90;
+position = "{862, 183}";
+}
+);
+hints = (
+{
+horizontal = 1;
+origin = "{0, 5}";
+target = "{0, 4}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{4, 2}";
+target = "{4, 3}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{4, 3}";
+target = "{1, 1}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{0, 4}";
+target = "{1, 0}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{0, 4}";
+target = "{4, 2}";
+other1 = "{2, 2}";
+type = Interpolate;
+},
+{
+horizontal = 1;
+origin = "{2, 2}";
+target = "{2, 3}";
+type = TTStem;
+options = 4;
+}
+);
+layerId = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+paths = (
+{
+closed = 1;
+nodes = (
+"862 0 LINE",
+"862 183 LINE",
+"838 183 LINE",
+"838 23 LINE",
+"56 23 LINE",
+"56 0 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"264 14 LINE",
+"264 507 LINE",
+"239 507 LINE",
+"239 14 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"584 261 LINE",
+"584 284 LINE",
+"260 284 LINE",
+"260 261 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"597 153 LINE",
+"597 392 LINE",
+"572 392 LINE",
+"572 153 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"862 337 LINE",
+"862 520 LINE",
+"56 520 LINE",
+"56 496 LINE",
+"837 496 LINE",
+"837 337 LINE"
+);
+}
+);
+width = 972;
+}
+);
+leftKerningGroup = H;
+leftMetricsKey = "=H";
+rightKerningGroup = E;
+unicode = 0045;
+},
+{
+color = 0;
+glyphname = F;
+lastChange = "2022-01-28 13:38:36 +0000";
+layers = (
+{
+anchors = (
+{
+name = bottom;
+position = "{449, 0}";
+},
+{
+name = top;
+position = "{449, 520}";
+}
+);
+hints = (
+{
+horizontal = 1;
+origin = "{1, 3}";
+target = "{1, 2}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 2}";
+target = "{0, 3}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 3}";
+target = "{2, 1}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{1, 2}";
+target = "{2, 0}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{1, 2}";
+target = "{0, 2}";
+other1 = "{3, 2}";
+type = Interpolate;
+},
+{
+horizontal = 1;
+origin = "{3, 2}";
+target = "{3, 3}";
+type = TTStem;
+options = 4;
+}
+);
+layerId = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+paths = (
+{
+closed = 1;
+nodes = (
+"812 337 LINE",
+"812 520 LINE",
+"56 520 LINE",
+"56 496 LINE",
+"788 496 LINE",
+"788 337 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"456 0 LINE",
+"456 23 LINE",
+"56 23 LINE",
+"56 0 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"264 14 LINE",
+"264 507 LINE",
+"239 507 LINE",
+"239 14 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"553 240 LINE",
+"553 264 LINE",
+"260 264 LINE",
+"260 240 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"566 132 LINE",
+"566 371 LINE",
+"541 371 LINE",
+"541 132 LINE"
+);
+}
+);
+width = 887;
+}
+);
+leftKerningGroup = H;
+leftMetricsKey = "=H";
+rightKerningGroup = F;
+unicode = 0046;
+},
+{
+color = 0;
+glyphname = G;
+lastChange = "2022-01-28 13:38:36 +0000";
+layers = (
+{
+anchors = (
+{
+name = bottom;
+position = "{440, -11}";
+},
+{
+name = top;
+position = "{440, 531}";
+}
+);
+hints = (
+{
+horizontal = 1;
+origin = "{0, 33}";
+target = "{0, 10}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 5}";
+target = "{0, 4}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 27}";
+target = "{0, 16}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 22}";
+type = Anchor;
+},
+{
+horizontal = 1;
+origin = "{0, 19}";
+type = Anchor;
+}
+);
+layerId = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+paths = (
+{
+closed = 1;
+nodes = (
+"578 -10 OFFCURVE",
+"707 33 OFFCURVE",
+"801 104 CURVE",
+"801 255 LINE",
+"436 255 LINE",
+"436 231 LINE",
+"776 231 LINE",
+"776 116 LINE",
+"685 53 OFFCURVE",
+"567 14 OFFCURVE",
+"436 14 CURVE SMOOTH",
+"255 14 OFFCURVE",
+"105 107 OFFCURVE",
+"105 259 CURVE SMOOTH",
+"105 414 OFFCURVE",
+"259 507 OFFCURVE",
+"444 507 CURVE SMOOTH",
+"582 507 OFFCURVE",
+"700 461 OFFCURVE",
+"790 330 CURVE",
+"801 331 LINE",
+"801 520 LINE",
+"778 520 LINE",
+"778 361 LINE",
+"790 361 LINE",
+"720 461 OFFCURVE",
+"606 531 OFFCURVE",
+"444 531 CURVE SMOOTH",
+"251 531 OFFCURVE",
+"80 431 OFFCURVE",
+"80 259 CURVE SMOOTH",
+"80 89 OFFCURVE",
+"244 -10 OFFCURVE",
+"436 -10 CURVE SMOOTH"
+);
+}
+);
+width = 904;
+}
+);
+leftKerningGroup = O;
+rightKerningGroup = G;
+unicode = 0047;
+},
+{
+color = 0;
+glyphname = H;
+lastChange = "2022-01-28 13:38:36 +0000";
+layers = (
+{
+anchors = (
+{
+name = bottom;
+position = "{565, 0}";
+},
+{
+name = center;
+position = "{565, 265}";
+},
+{
+name = top;
+position = "{565, 520}";
+}
+);
+hints = (
+{
+horizontal = 1;
+origin = "{1, 3}";
+target = "{1, 2}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 3}";
+target = "{0, 2}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{3, 2}";
+target = "{3, 3}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{3, 3}";
+target = "{6, 3}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{6, 2}";
+target = "{3, 2}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{1, 2}";
+target = "{4, 2}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{3, 3}";
+target = "{3, 0}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{3, 3}";
+target = "{6, 0}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{1, 2}";
+target = "{4, 1}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{1, 2}";
+target = "{1, 1}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{1, 3}";
+target = "{4, 3}";
+type = Align;
+}
+);
+layerId = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+paths = (
+{
+closed = 1;
+nodes = (
+"875 252 LINE",
+"875 276 LINE",
+"258 276 LINE",
+"258 252 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"444 0 LINE",
+"444 23 LINE",
+"56 23 LINE",
+"56 0 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"263 11 LINE",
+"263 507 LINE",
+"238 507 LINE",
+"238 11 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"444 496 LINE",
+"444 520 LINE",
+"56 520 LINE",
+"56 496 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"1076 0 LINE",
+"1076 23 LINE",
+"686 23 LINE",
+"686 0 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"894 14 LINE",
+"894 509 LINE",
+"869 509 LINE",
+"869 14 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"1076 496 LINE",
+"1076 520 LINE",
+"686 520 LINE",
+"686 496 LINE"
+);
+}
+);
+width = 1132;
+}
+);
+leftKerningGroup = H;
+rightKerningGroup = H;
+unicode = 0048;
+},
+{
+color = 0;
+glyphname = I;
+lastChange = "2022-01-28 13:38:36 +0000";
+layers = (
+{
+anchors = (
+{
+name = bottom;
+position = "{251, 0}";
+},
+{
+name = ogonek;
+position = "{259, 0}";
+},
+{
+name = top;
+position = "{251, 520}";
+}
+);
+hints = (
+{
+horizontal = 1;
+origin = "{1, 3}";
+target = "{1, 2}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{2, 2}";
+target = "{2, 3}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{2, 3}";
+target = "{2, 0}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{1, 2}";
+target = "{1, 1}";
+type = Align;
+}
+);
+layerId = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+paths = (
+{
+closed = 1;
+nodes = (
+"264 14 LINE",
+"264 507 LINE",
+"239 507 LINE",
+"239 14 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"445 0 LINE",
+"445 23 LINE",
+"56 23 LINE",
+"56 0 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"445 496 LINE",
+"445 520 LINE",
+"56 520 LINE",
+"56 496 LINE"
+);
+}
+);
+width = 501;
+}
+);
+leftKerningGroup = H;
+leftMetricsKey = "=H";
+rightKerningGroup = H;
+rightMetricsKey = "=H";
+unicode = 0049;
+},
+{
+color = 0;
+glyphname = J;
+lastChange = "2022-01-28 13:38:36 +0000";
+layers = (
+{
+anchors = (
+{
+name = bottom;
+position = "{248, -11}";
+},
+{
+name = top;
+position = "{434, 520}";
+}
+);
+hints = (
+{
+horizontal = 1;
+origin = "{0, 15}";
+target = "{0, 8}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{1, 2}";
+target = "{1, 3}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{1, 3}";
+target = "{0, 3}";
+type = Align;
+}
+);
+layerId = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+paths = (
+{
+closed = 1;
+nodes = (
+"381 -10 OFFCURVE",
+"471 65 OFFCURVE",
+"471 186 CURVE SMOOTH",
+"471 507 LINE",
+"446 507 LINE",
+"446 186 LINE SMOOTH",
+"446 68 OFFCURVE",
+"356 14 OFFCURVE",
+"249 14 CURVE SMOOTH",
+"149 14 OFFCURVE",
+"77 72 OFFCURVE",
+"36 127 CURVE",
+"20 111 LINE",
+"59 55 OFFCURVE",
+"131 -10 OFFCURVE",
+"249 -10 CURVE SMOOTH"
+);
+},
+{
+closed = 1;
+nodes = (
+"653 496 LINE",
+"653 520 LINE",
+"206 520 LINE",
+"206 496 LINE"
+);
+}
+);
+width = 653;
+}
+);
+leftKerningGroup = J;
+rightKerningGroup = U;
+rightMetricsKey = "=U";
+unicode = 004A;
+},
+{
+color = 0;
+glyphname = K;
+lastChange = "2022-01-28 13:38:36 +0000";
+layers = (
+{
+anchors = (
+{
+name = bottom;
+position = "{525, 0}";
+},
+{
+name = top;
+position = "{525, 520}";
+}
+);
+hints = (
+{
+horizontal = 1;
+origin = "{1, 3}";
+target = "{1, 2}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{5, 2}";
+target = "{5, 3}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{5, 3}";
+target = "{2, 1}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{1, 2}";
+target = "{2, 0}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{0, 3}";
+target = "{0, 2}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{6, 2}";
+target = "{6, 3}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{6, 3}";
+target = "{6, 0}";
+type = Align;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{3, 3}";
+target = "{3, 2}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{3, 2}";
+target = "{3, 1}";
+type = Align;
+options = 4;
+}
+);
+layerId = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+paths = (
+{
+closed = 1;
+nodes = (
+"825 507 LINE",
+"785 507 LINE",
+"250 156 LINE",
+"250 130 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"445 0 LINE",
+"445 23 LINE",
+"56 23 LINE",
+"56 0 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"264 14 LINE",
+"264 507 LINE",
+"239 507 LINE",
+"239 14 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"962 0 LINE",
+"962 23 LINE",
+"610 23 LINE",
+"610 0 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"831 10 LINE",
+"481 294 LINE",
+"465 278 LINE",
+"795 10 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"445 496 LINE",
+"445 520 LINE",
+"56 520 LINE",
+"56 496 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"952 496 LINE",
+"952 520 LINE",
+"600 520 LINE",
+"600 496 LINE"
+);
+}
+);
+width = 998;
+}
+);
+leftKerningGroup = H;
+leftMetricsKey = "=H";
+rightKerningGroup = X;
+unicode = 004B;
+},
+{
+color = 0;
+glyphname = L;
+lastChange = "2022-01-28 13:38:36 +0000";
+layers = (
+{
+anchors = (
+{
+name = bottom;
+position = "{449, 0}";
+},
+{
+name = center;
+position = "{442, 245}";
+},
+{
+name = top;
+position = "{250, 520}";
+},
+{
+name = topright;
+position = "{449, 339}";
+}
+);
+hints = (
+{
+horizontal = 1;
+origin = "{2, 2}";
+target = "{2, 3}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 5}";
+target = "{0, 4}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{2, 3}";
+target = "{1, 1}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{0, 4}";
+target = "{1, 0}";
+type = Align;
+}
+);
+layerId = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+paths = (
+{
+closed = 1;
+nodes = (
+"790 0 LINE",
+"790 183 LINE",
+"765 183 LINE",
+"765 23 LINE",
+"56 23 LINE",
+"56 0 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"264 14 LINE",
+"264 507 LINE",
+"239 507 LINE",
+"239 14 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"445 496 LINE",
+"445 520 LINE",
+"56 520 LINE",
+"56 496 LINE"
+);
+}
+);
+width = 840;
+}
+);
+leftKerningGroup = H;
+leftMetricsKey = "=H";
+rightKerningGroup = L;
+unicode = 004C;
+},
+{
+color = 0;
+glyphname = M;
+lastChange = "2022-01-28 13:38:36 +0000";
+layers = (
+{
+anchors = (
+{
+name = bottom;
+position = "{634, 0}";
+},
+{
+name = top;
+position = "{619, 485}";
+}
+);
+background = {
+paths = (
+{
+closed = 1;
+nodes = (
+"622 -11 LINE",
+"630 14 LINE",
+"264 520 LINE",
+"232 520 LINE",
+"616 -11 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"414 0 LINE",
+"414 23 LINE",
+"56 23 LINE",
+"56 0 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"264 11 LINE",
+"264 453 LINE",
+"264 520 LINE",
+"239 520 LINE",
+"239 11 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"264 496 LINE",
+"264 520 LINE",
+"56 520 LINE",
+"56 496 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"1182 0 LINE",
+"1182 23 LINE",
+"825 23 LINE",
+"825 0 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"622 -11 LINE",
+"1007 520 LINE",
+"975 520 LINE",
+"611 14 LINE",
+"617 -11 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"1000 11 LINE",
+"1000 520 LINE",
+"975 520 LINE",
+"975 453 LINE",
+"975 11 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"1182 496 LINE",
+"1182 520 LINE",
+"975 520 LINE",
+"975 496 LINE"
+);
+}
+);
+};
+hints = (
+{
+horizontal = 1;
+origin = "{0, 9}";
+target = "{0, 8}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 4}";
+target = "{0, 5}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 14}";
+type = Anchor;
+},
+{
+horizontal = 1;
+origin = "{0, 5}";
+target = "{0, 6}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{0, 1}";
+target = "{0, 4}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{0, 5}";
+target = "{0, 23}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{0, 8}";
+target = "{0, 12}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{0, 8}";
+target = "{0, 18}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{0, 8}";
+target = "{0, 22}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{0, 9}";
+target = "{0, 19}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{0, 5}";
+target = "{0, 13}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{0, 5}";
+target = "{0, 16}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{0, 14}";
+target = "{0, 2}";
+type = Align;
+options = 4;
+}
+);
+layerId = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+paths = (
+{
+closed = 1;
+nodes = (
+"1182 520 LINE",
+"975 520 LINE",
+"620 27 LINE",
+"264 520 LINE",
+"56 520 LINE",
+"56 496 LINE",
+"239 496 LINE",
+"239 23 LINE",
+"56 23 LINE",
+"56 0 LINE",
+"414 0 LINE",
+"414 23 LINE",
+"264 23 LINE",
+"264 476 LINE",
+"616 -11 LINE",
+"622 -11 LINE",
+"975 476 LINE",
+"975 23 LINE",
+"825 23 LINE",
+"825 0 LINE",
+"1182 0 LINE",
+"1182 23 LINE",
+"1000 23 LINE",
+"1000 496 LINE",
+"1182 496 LINE"
+);
+}
+);
+width = 1238;
+}
+);
+leftKerningGroup = H;
+leftMetricsKey = "=H";
+rightKerningGroup = H;
+rightMetricsKey = "=H";
+unicode = 004D;
+},
+{
+color = 0;
+glyphname = N;
+lastChange = "2022-01-28 13:38:36 +0000";
+layers = (
+{
+anchors = (
+{
+name = bottom;
+position = "{622, 11}";
+},
+{
+name = top;
+position = "{522, 509}";
+}
+);
+hints = (
+{
+horizontal = 1;
+origin = "{0, 10}";
+target = "{0, 9}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 5}";
+target = "{0, 6}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 15}";
+type = Anchor;
+},
+{
+horizontal = 1;
+origin = "{0, 6}";
+target = "{0, 1}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{0, 5}";
+target = "{0, 0}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{0, 9}";
+target = "{0, 13}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{0, 6}";
+target = "{0, 14}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{0, 15}";
+target = "{0, 3}";
+type = Align;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 6}";
+target = "{0, 17}";
+type = Align;
+}
+);
+layerId = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+paths = (
+{
+closed = 1;
+nodes = (
+"703 520 LINE",
+"703 496 LINE",
+"885 496 LINE",
+"885 43 LINE",
+"264 520 LINE",
+"56 520 LINE",
+"56 496 LINE",
+"239 496 LINE",
+"239 23 LINE",
+"56 23 LINE",
+"56 0 LINE",
+"445 0 LINE",
+"445 23 LINE",
+"264 23 LINE",
+"264 486 LINE",
+"906 -5 LINE",
+"910 -5 LINE",
+"910 496 LINE",
+"1092 496 LINE",
+"1092 520 LINE"
+);
+}
+);
+width = 1107;
+}
+);
+leftKerningGroup = H;
+leftMetricsKey = "=H";
+rightKerningGroup = N;
+unicode = 004E;
+},
+{
+color = 0;
+glyphname = O;
+lastChange = "2022-01-28 13:38:36 +0000";
+layers = (
+{
+anchors = (
+{
+name = bottom;
+position = "{459, -11}";
+},
+{
+name = center;
+position = "{459, 252}";
+},
+{
+name = ogonek;
+position = "{460, 0}";
+},
+{
+name = top;
+position = "{459, 531}";
+},
+{
+name = topright;
+position = "{891, 490}";
+}
+);
+hints = (
+{
+horizontal = 1;
+origin = "{0, 11}";
+target = "{1, 11}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 5}";
+target = "{1, 5}";
+type = TTStem;
+options = 4;
+}
+);
+layerId = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+paths = (
+{
+closed = 1;
+nodes = (
+"675 -10 OFFCURVE",
+"841 89 OFFCURVE",
+"841 260 CURVE SMOOTH",
+"841 431 OFFCURVE",
+"675 531 OFFCURVE",
+"459 531 CURVE SMOOTH",
+"242 531 OFFCURVE",
+"75 431 OFFCURVE",
+"75 260 CURVE SMOOTH",
+"75 89 OFFCURVE",
+"242 -10 OFFCURVE",
+"459 -10 CURVE SMOOTH"
+);
+},
+{
+closed = 1;
+nodes = (
+"252 14 OFFCURVE",
+"100 106 OFFCURVE",
+"100 260 CURVE SMOOTH",
+"100 415 OFFCURVE",
+"252 507 OFFCURVE",
+"459 507 CURVE SMOOTH",
+"664 507 OFFCURVE",
+"816 415 OFFCURVE",
+"816 260 CURVE SMOOTH",
+"816 106 OFFCURVE",
+"664 14 OFFCURVE",
+"459 14 CURVE SMOOTH"
+);
+}
+);
+width = 916;
+}
+);
+leftKerningGroup = O;
+rightKerningGroup = O;
+unicode = 004F;
+},
+{
+color = 0;
+glyphname = P;
+lastChange = "2022-01-28 13:38:36 +0000";
+layers = (
+{
+anchors = (
+{
+name = bottom;
+position = "{251, 0}";
+},
+{
+name = top;
+position = "{462, 520}";
+}
+);
+hints = (
+{
+horizontal = 1;
+origin = "{1, 3}";
+target = "{1, 2}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 17}";
+target = "{0, 16}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 7}";
+target = "{0, 8}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 8}";
+target = "{2, 1}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{1, 2}";
+target = "{2, 0}";
+type = Align;
+}
+);
+layerId = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+paths = (
+{
+closed = 1;
+nodes = (
+"694 214 LINE SMOOTH",
+"807 214 OFFCURVE",
+"875 278 OFFCURVE",
+"875 365 CURVE SMOOTH",
+"875 461 OFFCURVE",
+"805 520 OFFCURVE",
+"694 520 CURVE SMOOTH",
+"56 520 LINE",
+"56 496 LINE",
+"701 496 LINE SMOOTH",
+"791 496 OFFCURVE",
+"850 445 OFFCURVE",
+"850 365 CURVE SMOOTH",
+"850 287 OFFCURVE",
+"787 237 OFFCURVE",
+"701 237 CURVE SMOOTH",
+"251 237 LINE",
+"251 214 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"456 0 LINE",
+"456 23 LINE",
+"56 23 LINE",
+"56 0 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"264 14 LINE",
+"264 507 LINE",
+"239 507 LINE",
+"239 14 LINE"
+);
+}
+);
+width = 935;
+}
+);
+leftKerningGroup = H;
+leftMetricsKey = "=H";
+rightKerningGroup = P;
+unicode = 0050;
+},
+{
+color = 0;
+glyphname = Q;
+lastChange = "2022-01-28 13:38:36 +0000";
+layers = (
+{
+anchors = (
+{
+name = bottom;
+position = "{459, -11}";
+},
+{
+name = top;
+position = "{459, 531}";
+}
+);
+background = {
+paths = (
+{
+closed = 1;
+nodes = (
+"675 -10 OFFCURVE",
+"841 89 OFFCURVE",
+"841 260 CURVE SMOOTH",
+"841 431 OFFCURVE",
+"675 531 OFFCURVE",
+"459 531 CURVE SMOOTH",
+"242 531 OFFCURVE",
+"75 431 OFFCURVE",
+"75 260 CURVE SMOOTH",
+"75 89 OFFCURVE",
+"242 -10 OFFCURVE",
+"459 -10 CURVE SMOOTH"
+);
+},
+{
+closed = 1;
+nodes = (
+"828 -158 OFFCURVE",
+"891 -99 OFFCURVE",
+"902 -14 CURVE",
+"880 -9 LINE",
+"869 -86 OFFCURVE",
+"814 -135 OFFCURVE",
+"736 -135 CURVE SMOOTH",
+"659 -135 OFFCURVE",
+"602 -80 OFFCURVE",
+"534 2 CURVE SMOOTH",
+"515 23 LINE SMOOTH",
+"422 134 OFFCURVE",
+"356 224 OFFCURVE",
+"180 224 CURVE SMOOTH",
+"99 224 LINE",
+"99 200 LINE",
+"180 200 LINE SMOOTH",
+"341 200 OFFCURVE",
+"409 114 OFFCURVE",
+"490 17 CURVE SMOOTH",
+"503 1 LINE SMOOTH",
+"586 -99 OFFCURVE",
+"644 -158 OFFCURVE",
+"736 -158 CURVE SMOOTH"
+);
+},
+{
+closed = 1;
+nodes = (
+"252 14 OFFCURVE",
+"100 106 OFFCURVE",
+"100 260 CURVE SMOOTH",
+"100 415 OFFCURVE",
+"252 507 OFFCURVE",
+"459 507 CURVE SMOOTH",
+"664 507 OFFCURVE",
+"816 415 OFFCURVE",
+"816 260 CURVE SMOOTH",
+"816 106 OFFCURVE",
+"664 14 OFFCURVE",
+"459 14 CURVE SMOOTH"
+);
+}
+);
+};
+hints = (
+{
+horizontal = 1;
+origin = "{0, 21}";
+target = "{0, 2}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 17}";
+target = "{2, 4}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{2, 7}";
+target = "{1, 9}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 11}";
+target = "{1, 15}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 24}";
+type = Anchor;
+},
+{
+horizontal = 1;
+origin = "{2, 4}";
+target = "{2, 3}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{2, 3}";
+target = "{1, 5}";
+type = Align;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 17}";
+target = "{0, 5}";
+type = Align;
+}
+);
+layerId = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+paths = (
+{
+closed = 1;
+nodes = (
+"869 -86 OFFCURVE",
+"814 -135 OFFCURVE",
+"736 -135 CURVE SMOOTH",
+"661 -135 OFFCURVE",
+"605 -83 OFFCURVE",
+"540 -5 CURVE",
+"715 17 OFFCURVE",
+"841 111 OFFCURVE",
+"841 260 CURVE SMOOTH",
+"841 431 OFFCURVE",
+"675 531 OFFCURVE",
+"459 531 CURVE SMOOTH",
+"242 531 OFFCURVE",
+"75 431 OFFCURVE",
+"75 260 CURVE SMOOTH",
+"75 89 OFFCURVE",
+"242 -10 OFFCURVE",
+"459 -10 CURVE",
+"511 -8 LINE",
+"590 -103 OFFCURVE",
+"647 -158 OFFCURVE",
+"736 -158 CURVE SMOOTH",
+"828 -158 OFFCURVE",
+"891 -99 OFFCURVE",
+"902 -14 CURVE",
+"880 -9 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"664 507 OFFCURVE",
+"816 415 OFFCURVE",
+"816 260 CURVE SMOOTH",
+"816 122 OFFCURVE",
+"694 34 OFFCURVE",
+"521 17 CURVE",
+"421 135 OFFCURVE",
+"355 224 OFFCURVE",
+"180 224 CURVE SMOOTH",
+"103 224 LINE",
+"101 236 OFFCURVE",
+"100 248 OFFCURVE",
+"100 260 CURVE SMOOTH",
+"100 415 OFFCURVE",
+"252 507 OFFCURVE",
+"459 507 CURVE SMOOTH"
+);
+},
+{
+closed = 1;
+nodes = (
+"180 200 LINE SMOOTH",
+"340 200 OFFCURVE",
+"408 116 OFFCURVE",
+"492 15 CURVE",
+"459 14 LINE",
+"280 14 OFFCURVE",
+"143 82 OFFCURVE",
+"108 200 CURVE"
+);
+}
+);
+width = 917;
+}
+);
+leftKerningGroup = O;
+leftMetricsKey = "=O";
+rightKerningGroup = O;
+unicode = 0051;
+},
+{
+color = 0;
+glyphname = R;
+lastChange = "2022-01-28 13:38:36 +0000";
+layers = (
+{
+anchors = (
+{
+name = bottom;
+position = "{565, 0}";
+},
+{
+name = top;
+position = "{525, 520}";
+}
+);
+background = {
+paths = (
+{
+closed = 1;
+nodes = (
+"717 241 LINE SMOOTH",
+"841 241 OFFCURVE",
+"900 309 OFFCURVE",
+"900 378 CURVE SMOOTH",
+"900 457 OFFCURVE",
+"841 520 OFFCURVE",
+"717 520 CURVE SMOOTH",
+"56 520 LINE",
+"56 496 LINE",
+"717 496 LINE SMOOTH",
+"826 496 OFFCURVE",
+"875 441 OFFCURVE",
+"875 378 CURVE SMOOTH",
+"875 317 OFFCURVE",
+"824 264 OFFCURVE",
+"717 264 CURVE SMOOTH",
+"258 264 LINE",
+"258 241 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"445 0 LINE",
+"445 24 LINE",
+"56 23 LINE",
+"56 -1 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"264 13 LINE",
+"264 507 LINE",
+"239 507 LINE",
+"239 13 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"950 -10 OFFCURVE",
+"1012 64 OFFCURVE",
+"1012 155 CURVE SMOOTH",
+"1012 176 LINE",
+"987 176 LINE",
+"987 155 LINE SMOOTH",
+"987 75 OFFCURVE",
+"931 13 OFFCURVE",
+"855 13 CURVE SMOOTH",
+"775 13 OFFCURVE",
+"734 67 OFFCURVE",
+"675 139 CURVE SMOOTH",
+"603 227 OFFCURVE",
+"568 253 OFFCURVE",
+"460 253 CURVE SMOOTH",
+"258 253 LINE",
+"258 239 LINE",
+"472 239 LINE SMOOTH",
+"556 239 OFFCURVE",
+"595 201 OFFCURVE",
+"655 125 CURVE SMOOTH",
+"715 49 OFFCURVE",
+"765 -10 OFFCURVE",
+"855 -10 CURVE SMOOTH"
+);
+}
+);
+};
+hints = (
+{
+horizontal = 1;
+origin = "{0, 23}";
+target = "{0, 24}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{1, 3}";
+target = "{1, 2}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 32}";
+target = "{0, 33}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 24}";
+target = "{2, 1}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{1, 2}";
+target = "{1, 1}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{0, 40}";
+target = "{0, 8}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 33}";
+target = "{0, 15}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{0, 37}";
+target = "{0, 11}";
+type = Align;
+options = 4;
+}
+);
+layerId = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+paths = (
+{
+closed = 1;
+nodes = (
+"950 -10 OFFCURVE",
+"1012 64 OFFCURVE",
+"1012 155 CURVE SMOOTH",
+"1012 176 LINE",
+"987 176 LINE",
+"987 155 LINE SMOOTH",
+"987 75 OFFCURVE",
+"932 14 OFFCURVE",
+"855 14 CURVE SMOOTH",
+"775 14 OFFCURVE",
+"735 67 OFFCURVE",
+"675 139 CURVE SMOOTH",
+"622 203 OFFCURVE",
+"590 234 OFFCURVE",
+"535 246 CURVE",
+"535 241 LINE",
+"717 241 LINE SMOOTH",
+"841 241 OFFCURVE",
+"901 309 OFFCURVE",
+"901 378 CURVE SMOOTH",
+"901 457 OFFCURVE",
+"841 520 OFFCURVE",
+"717 520 CURVE SMOOTH",
+"56 520 LINE",
+"56 496 LINE",
+"717 496 LINE SMOOTH",
+"826 496 OFFCURVE",
+"875 441 OFFCURVE",
+"875 378 CURVE SMOOTH",
+"875 317 OFFCURVE",
+"824 264 OFFCURVE",
+"717 264 CURVE SMOOTH",
+"258 264 LINE",
+"258 240 LINE",
+"472 240 LINE SMOOTH",
+"556 240 OFFCURVE",
+"595 201 OFFCURVE",
+"655 125 CURVE SMOOTH",
+"714 49 OFFCURVE",
+"766 -10 OFFCURVE",
+"855 -10 CURVE SMOOTH"
+);
+},
+{
+closed = 1;
+nodes = (
+"445 0 LINE",
+"445 24 LINE",
+"56 23 LINE",
+"56 -1 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"264 14 LINE",
+"264 507 LINE",
+"239 507 LINE",
+"239 14 LINE"
+);
+}
+);
+width = 1046;
+}
+);
+leftKerningGroup = H;
+leftMetricsKey = "=H";
+rightKerningGroup = R;
+unicode = 0052;
+},
+{
+color = 0;
+glyphname = S;
+lastChange = "2022-01-28 13:38:36 +0000";
+layers = (
+{
+anchors = (
+{
+name = bottom;
+position = "{470, -11}";
+},
+{
+name = top;
+position = "{450, 531}";
+}
+);
+hints = (
+{
+horizontal = 1;
+origin = "{0, 45}";
+target = "{0, 34}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 22}";
+target = "{0, 11}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 17}";
+type = Anchor;
+},
+{
+horizontal = 1;
+origin = "{0, 39}";
+type = Anchor;
+},
+{
+horizontal = 1;
+origin = "{0, 34}";
+target = "{0, 22}";
+other1 = "{0, 5}";
+type = Interpolate;
+},
+{
+horizontal = 1;
+origin = "{0, 5}";
+target = "{0, 28}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 14}";
+type = Anchor;
+}
+);
+layerId = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+paths = (
+{
+closed = 1;
+nodes = (
+"674 -10 OFFCURVE",
+"777 34 OFFCURVE",
+"777 124 CURVE SMOOTH",
+"777 218 OFFCURVE",
+"680 249 OFFCURVE",
+"440 268 CURVE SMOOTH",
+"217 286 OFFCURVE",
+"142 316 OFFCURVE",
+"142 386 CURVE SMOOTH",
+"142 468 OFFCURVE",
+"233 507 OFFCURVE",
+"372 507 CURVE SMOOTH",
+"540 507 OFFCURVE",
+"650 444 OFFCURVE",
+"736 344 CURVE",
+"742 346 LINE",
+"742 520 LINE",
+"719 520 LINE",
+"719 378 LINE",
+"734 378 LINE",
+"666 453 OFFCURVE",
+"559 531 OFFCURVE",
+"374 531 CURVE SMOOTH",
+"211 531 OFFCURVE",
+"117 480 OFFCURVE",
+"117 386 CURVE SMOOTH",
+"117 305 OFFCURVE",
+"194 261 OFFCURVE",
+"440 244 CURVE SMOOTH",
+"666 228 OFFCURVE",
+"753 201 OFFCURVE",
+"753 124 CURVE SMOOTH",
+"753 47 OFFCURVE",
+"657 14 OFFCURVE",
+"534 14 CURVE SMOOTH",
+"384 14 OFFCURVE",
+"211 74 OFFCURVE",
+"121 177 CURVE",
+"115 175 LINE",
+"115 0 LINE",
+"139 0 LINE",
+"139 140 LINE",
+"124 140 LINE",
+"196 65 OFFCURVE",
+"360 -10 OFFCURVE",
+"532 -10 CURVE SMOOTH"
+);
+}
+);
+width = 867;
+}
+);
+leftKerningGroup = S;
+rightKerningGroup = S;
+unicode = 0053;
+},
+{
+color = 0;
+glyphname = T;
+lastChange = "2022-01-28 13:38:36 +0000";
+layers = (
+{
+anchors = (
+{
+name = bottom;
+position = "{450, 0}";
+},
+{
+name = center;
+position = "{450, 252}";
+},
+{
+name = top;
+position = "{450, 520}";
+}
+);
+hints = (
+{
+horizontal = 1;
+origin = "{1, 3}";
+target = "{1, 2}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 6}";
+target = "{0, 1}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 1}";
+target = "{2, 1}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{0, 7}";
+target = "{0, 3}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{1, 2}";
+target = "{2, 0}";
+type = Align;
+}
+);
+layerId = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+paths = (
+{
+closed = 1;
+nodes = (
+"89 337 LINE",
+"89 497 LINE",
+"811 497 LINE",
+"811 337 LINE",
+"836 337 LINE",
+"836 520 LINE",
+"64 520 LINE",
+"64 337 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"655 0 LINE",
+"655 23 LINE",
+"246 23 LINE",
+"246 0 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"463 14 LINE",
+"463 507 LINE",
+"438 507 LINE",
+"438 14 LINE"
+);
+}
+);
+width = 900;
+}
+);
+leftKerningGroup = T;
+rightKerningGroup = T;
+unicode = 0054;
+},
+{
+color = 0;
+glyphname = U;
+lastChange = "2022-01-28 13:38:36 +0000";
+layers = (
+{
+anchors = (
+{
+name = bottom;
+position = "{501, -11}";
+},
+{
+name = ogonek;
+position = "{501, -11}";
+},
+{
+name = top;
+position = "{501, 509}";
+},
+{
+name = topright;
+position = "{1001, 520}";
+}
+);
+hints = (
+{
+horizontal = 1;
+origin = "{0, 17}";
+target = "{0, 8}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{1, 2}";
+target = "{1, 3}";
+type = TTStem;
+options = 4;
+},
+{
+place = "{182, 24}";
+type = Stem;
+},
+{
+place = "{795.5, 23.5}";
+type = Stem;
+},
+{
+horizontal = 1;
+origin = "{1, 2}";
+target = "{2, 2}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{1, 3}";
+target = "{0, 12}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{1, 3}";
+target = "{2, 3}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{1, 3}";
+target = "{0, 3}";
+type = Align;
+}
+);
+layerId = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+paths = (
+{
+closed = 1;
+nodes = (
+"694 -11 OFFCURVE",
+"819 79 OFFCURVE",
+"819 254 CURVE SMOOTH",
+"819 507 LINE",
+"797 507 LINE",
+"794 241 LINE SMOOTH",
+"793 89 OFFCURVE",
+"675 13 OFFCURVE",
+"501 13 CURVE SMOOTH",
+"326 13 OFFCURVE",
+"208 89 OFFCURVE",
+"207 243 CURVE SMOOTH",
+"205 507 LINE",
+"182 507 LINE",
+"182 254 LINE SMOOTH",
+"182 79 OFFCURVE",
+"309 -11 OFFCURVE",
+"501 -11 CURVE SMOOTH"
+);
+},
+{
+closed = 1;
+nodes = (
+"386 496 LINE",
+"386 520 LINE",
+"0 520 LINE",
+"0 496 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"1001 496 LINE",
+"1001 520 LINE",
+"615 520 LINE",
+"615 496 LINE"
+);
+}
+);
+width = 1001;
+}
+);
+leftKerningGroup = U;
+rightKerningGroup = U;
+unicode = 0055;
+},
+{
+color = 0;
+glyphname = V;
+lastChange = "2022-01-28 13:38:36 +0000";
+layers = (
+{
+anchors = (
+{
+name = bottom;
+position = "{469, -11}";
+},
+{
+name = top;
+position = "{469, 485}";
+}
+);
+hints = (
+{
+horizontal = 1;
+origin = "{2, 6}";
+type = Anchor;
+},
+{
+horizontal = 1;
+origin = "{0, 0}";
+target = "{0, 1}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 1}";
+target = "{0, 2}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{0, 1}";
+target = "{1, 1}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{0, 1}";
+target = "{2, 1}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{0, 0}";
+target = "{1, 0}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{2, 6}";
+target = "{2, 3}";
+type = Align;
+options = 4;
+}
+);
+layerId = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+paths = (
+{
+closed = 1;
+nodes = (
+"-5 520 LINE",
+"-5 496 LINE",
+"332 496 LINE",
+"332 520 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"605 520 LINE",
+"605 496 LINE",
+"941 496 LINE",
+"941 520 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"471 -11 LINE",
+"787 507 LINE",
+"759 507 LINE",
+"469 30 LINE",
+"181 507 LINE",
+"150 507 LINE",
+"465 -11 LINE"
+);
+}
+);
+width = 936;
+}
+);
+leftKerningGroup = V;
+rightKerningGroup = V;
+unicode = 0056;
+},
+{
+color = 0;
+glyphname = W;
+lastChange = "2022-01-28 13:38:36 +0000";
+layers = (
+{
+anchors = (
+{
+name = bottom;
+position = "{606, 11}";
+},
+{
+name = top;
+position = "{606, 520}";
+}
+);
+hints = (
+{
+horizontal = 1;
+origin = "{0, 13}";
+type = Anchor;
+},
+{
+horizontal = 1;
+origin = "{0, 10}";
+target = "{0, 11}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 11}";
+target = "{0, 7}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{0, 16}";
+type = Anchor;
+},
+{
+horizontal = 1;
+origin = "{0, 13}";
+target = "{0, 6}";
+type = Align;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 16}";
+target = "{0, 3}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{0, 5}";
+type = Anchor;
+},
+{
+horizontal = 1;
+origin = "{0, 5}";
+target = "{0, 15}";
+type = Align;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 0}";
+target = "{0, 1}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 1}";
+target = "{0, 18}";
+type = Align;
+options = 4;
+}
+);
+layerId = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+paths = (
+{
+closed = 1;
+nodes = (
+"881 520 LINE",
+"881 496 LINE",
+"1028 496 LINE",
+"841 39 LINE",
+"611 507 LINE",
+"603 507 LINE",
+"372 40 LINE",
+"185 496 LINE",
+"332 496 LINE",
+"332 520 LINE",
+"-5 520 LINE",
+"-5 496 LINE",
+"156 496 LINE",
+"365 -10 LINE",
+"374 -10 LINE",
+"607 457 LINE",
+"837 -10 LINE",
+"844 -10 LINE",
+"1055 496 LINE",
+"1217 496 LINE",
+"1217 520 LINE"
+);
+}
+);
+width = 1212;
+}
+);
+leftKerningGroup = V;
+rightKerningGroup = V;
+unicode = 0057;
+},
+{
+color = 0;
+glyphname = X;
+lastChange = "2022-01-28 13:38:36 +0000";
+layers = (
+{
+anchors = (
+{
+name = bottom;
+position = "{475, 11}";
+},
+{
+name = top;
+position = "{475, 509}";
+}
+);
+hints = (
+{
+horizontal = 1;
+origin = "{0, 15}";
+target = "{0, 14}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 9}";
+target = "{0, 10}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 10}";
+target = "{0, 6}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{0, 14}";
+target = "{0, 18}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{0, 19}";
+target = "{0, 5}";
+type = Align;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 2}";
+target = "{0, 3}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 3}";
+target = "{0, 0}";
+type = Align;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 22}";
+target = "{0, 21}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 21}";
+target = "{0, 24}";
+type = Align;
+options = 4;
+}
+);
+layerId = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+paths = (
+{
+closed = 1;
+nodes = (
+"906 496 LINE",
+"906 520 LINE",
+"569 520 LINE",
+"569 496 LINE",
+"727 496 LINE",
+"477 268 LINE",
+"227 496 LINE",
+"382 496 LINE",
+"382 520 LINE",
+"45 520 LINE",
+"45 496 LINE",
+"189 496 LINE",
+"457 253 LINE",
+"206 23 LINE",
+"45 23 LINE",
+"45 0 LINE",
+"381 0 LINE",
+"381 23 LINE",
+"241 23 LINE",
+"475 238 LINE",
+"709 23 LINE",
+"569 23 LINE",
+"569 0 LINE",
+"906 0 LINE",
+"906 23 LINE",
+"747 23 LINE",
+"494 253 LINE",
+"762 496 LINE"
+);
+}
+);
+width = 951;
+}
+);
+leftKerningGroup = X;
+rightKerningGroup = X;
+unicode = 0058;
+},
+{
+color = 0;
+glyphname = Y;
+lastChange = "2022-01-28 13:38:36 +0000";
+layers = (
+{
+anchors = (
+{
+name = bottom;
+position = "{460, 0}";
+},
+{
+name = top;
+position = "{460, 509}";
+}
+);
+hints = (
+{
+horizontal = 1;
+origin = "{0, 15}";
+target = "{0, 14}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 9}";
+target = "{0, 10}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 10}";
+target = "{0, 6}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{0, 10}";
+target = "{0, 3}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{0, 10}";
+target = "{0, 20}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{0, 12}";
+target = "{0, 19}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{0, 12}";
+target = "{0, 5}";
+type = Align;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 14}";
+target = "{0, 18}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{0, 9}";
+target = "{0, 2}";
+type = Align;
+}
+);
+layerId = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+paths = (
+{
+closed = 1;
+nodes = (
+"916 496 LINE",
+"916 520 LINE",
+"580 520 LINE",
+"580 496 LINE",
+"719 496 LINE",
+"461 206 LINE",
+"203 496 LINE",
+"342 496 LINE",
+"342 520 LINE",
+"5 520 LINE",
+"5 496 LINE",
+"167 496 LINE",
+"449 180 LINE",
+"449 23 LINE",
+"266 23 LINE",
+"266 0 LINE",
+"656 0 LINE",
+"656 23 LINE",
+"474 23 LINE",
+"474 184 LINE",
+"753 496 LINE"
+);
+}
+);
+width = 920;
+}
+);
+leftKerningGroup = V;
+rightKerningGroup = V;
+unicode = 0059;
+},
+{
+color = 0;
+glyphname = Z;
+lastChange = "2022-01-28 13:38:36 +0000";
+layers = (
+{
+anchors = (
+{
+name = bottom;
+position = "{434, 0}";
+},
+{
+name = top;
+position = "{434, 520}";
+}
+);
+background = {
+paths = (
+{
+closed = 1;
+nodes = (
+"764 0 LINE",
+"764 183 LINE",
+"739 183 LINE",
+"739 23 LINE",
+"178 23 LINE SMOOTH",
+"165 23 OFFCURVE",
+"155 20 OFFCURVE",
+"149 19 CURVE",
+"149 20 LINE",
+"155 22 OFFCURVE",
+"164 26 OFFCURVE",
+"174 33 CURVE SMOOTH",
+"760 507 LINE",
+"760 520 LINE",
+"105 520 LINE",
+"105 337 LINE",
+"130 337 LINE",
+"130 497 LINE",
+"687 497 LINE SMOOTH",
+"703 497 OFFCURVE",
+"716 500 OFFCURVE",
+"720 501 CURVE",
+"720 500 LINE",
+"716 500 OFFCURVE",
+"705 493 OFFCURVE",
+"694 484 CURVE SMOOTH",
+"108 14 LINE",
+"108 0 LINE"
+);
+}
+);
+};
+hints = (
+{
+horizontal = 1;
+origin = "{0, 13}";
+target = "{0, 4}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 7}";
+target = "{0, 10}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 8}";
+type = Anchor;
+},
+{
+horizontal = 1;
+origin = "{0, 1}";
+type = Anchor;
+},
+{
+horizontal = 1;
+origin = "{0, 11}";
+target = "{0, 5}";
+type = Align;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 10}";
+target = "{0, 11}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{0, 4}";
+target = "{0, 12}";
+type = Align;
+options = 4;
+}
+);
+layerId = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+paths = (
+{
+closed = 1;
+nodes = (
+"764 0 LINE",
+"764 183 LINE",
+"739 183 LINE",
+"739 23 LINE",
+"162 23 LINE",
+"760 507 LINE",
+"760 520 LINE",
+"105 520 LINE",
+"105 337 LINE",
+"130 337 LINE",
+"130 497 LINE",
+"710 497 LINE",
+"108 14 LINE",
+"108 0 LINE"
+);
+}
+);
+width = 864;
+}
+);
+leftKerningGroup = Z;
+rightKerningGroup = Z;
+unicode = 005A;
+},
+{
+color = 0;
+glyphname = a;
+lastChange = "2022-01-28 13:38:36 +0000";
+layers = (
+{
+anchors = (
+{
+name = bottom;
+position = "{287, -10}";
+},
+{
+name = ogonek;
+position = "{769, 7}";
+},
+{
+name = top;
+position = "{384, 367}";
+}
+);
+hints = (
+{
+horizontal = 1;
+origin = "{1, 25}";
+target = "{1, 6}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{1, 12}";
+target = "{1, 19}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 13}";
+target = "{0, 20}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 27}";
+target = "{0, 6}";
+type = TTStem;
+options = 4;
+}
+);
+layerId = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+paths = (
+{
+closed = 1;
+nodes = (
+"741 -10 OFFCURVE",
+"769 2 OFFCURVE",
+"792 19 CURVE",
+"779 38 LINE",
+"760 22 OFFCURVE",
+"739 14 OFFCURVE",
+"711 14 CURVE SMOOTH",
+"678 14 OFFCURVE",
+"647 39 OFFCURVE",
+"647 93 CURVE SMOOTH",
+"647 197 LINE SMOOTH",
+"647 297 OFFCURVE",
+"572 367 OFFCURVE",
+"415 367 CURVE SMOOTH",
+"315 367 OFFCURVE",
+"214 346 OFFCURVE",
+"105 310 CURVE",
+"111 286 LINE",
+"215 318 OFFCURVE",
+"311 343 OFFCURVE",
+"415 343 CURVE SMOOTH",
+"559 343 OFFCURVE",
+"622 281 OFFCURVE",
+"622 197 CURVE SMOOTH",
+"622 93 LINE SMOOTH",
+"622 28 OFFCURVE",
+"659 -10 OFFCURVE",
+"710 -10 CURVE SMOOTH"
+);
+},
+{
+closed = 1;
+nodes = (
+"397 -10 OFFCURVE",
+"525 20 OFFCURVE",
+"634 76 CURVE",
+"634 99 LINE",
+"519 44 OFFCURVE",
+"395 14 OFFCURVE",
+"287 14 CURVE SMOOTH",
+"177 14 OFFCURVE",
+"115 43 OFFCURVE",
+"115 96 CURVE SMOOTH",
+"115 152 OFFCURVE",
+"196 186 OFFCURVE",
+"328 186 CURVE SMOOTH",
+"442 186 OFFCURVE",
+"549 171 OFFCURVE",
+"634 153 CURVE",
+"634 174 LINE",
+"549 192 OFFCURVE",
+"449 209 OFFCURVE",
+"328 209 CURVE SMOOTH",
+"180 209 OFFCURVE",
+"90 168 OFFCURVE",
+"90 94 CURVE SMOOTH",
+"90 28 OFFCURVE",
+"161 -10 OFFCURVE",
+"287 -10 CURVE SMOOTH"
+);
+}
+);
+width = 805;
+}
+);
+leftKerningGroup = a;
+rightKerningGroup = n;
+unicode = 0061;
+},
+{
+color = 0;
+glyphname = b;
+lastChange = "2022-01-28 13:38:36 +0000";
+layers = (
+{
+anchors = (
+{
+name = bottom;
+position = "{442, -11}";
+},
+{
+name = top;
+position = "{442, 366}";
+}
+);
+hints = (
+{
+horizontal = 1;
+origin = "{0, 25}";
+target = "{0, 18}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 5}";
+target = "{0, 12}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{2, 2}";
+target = "{2, 3}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{1, 4}";
+type = Anchor;
+}
+);
+layerId = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+paths = (
+{
+closed = 1;
+nodes = (
+"640 -11 OFFCURVE",
+"780 67 OFFCURVE",
+"780 195 CURVE SMOOTH",
+"780 303 OFFCURVE",
+"684 366 OFFCURVE",
+"541 366 CURVE SMOOTH",
+"411 366 OFFCURVE",
+"290 303 OFFCURVE",
+"174 219 CURVE",
+"174 196 LINE",
+"299 283 OFFCURVE",
+"427 343 OFFCURVE",
+"541 343 CURVE SMOOTH",
+"675 343 OFFCURVE",
+"755 283 OFFCURVE",
+"755 195 CURVE SMOOTH",
+"755 85 OFFCURVE",
+"628 11 OFFCURVE",
+"476 13 CURVE SMOOTH",
+"357 11 OFFCURVE",
+"244 55 OFFCURVE",
+"170 95 CURVE",
+"170 74 LINE",
+"242 32 OFFCURVE",
+"347 -11 OFFCURVE",
+"476 -11 CURVE SMOOTH"
+);
+},
+{
+closed = 1;
+nodes = (
+"180 0 LINE",
+"186 74 LINE",
+"186 520 LINE",
+"161 520 LINE",
+"161 0 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"178 496 LINE",
+"178 520 LINE",
+"-20 520 LINE",
+"-20 496 LINE"
+);
+}
+);
+width = 860;
+}
+);
+leftKerningGroup = b;
+rightKerningGroup = o;
+rightMetricsKey = "=o";
+unicode = 0062;
+},
+{
+color = 0;
+glyphname = c;
+lastChange = "2022-01-28 13:38:36 +0000";
+layers = (
+{
+anchors = (
+{
+name = bottom;
+position = "{366, -11}";
+},
+{
+name = top;
+position = "{377, 366}";
+}
+);
+hints = (
+{
+horizontal = 1;
+origin = "{0, 29}";
+target = "{0, 6}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 23}";
+target = "{0, 12}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 18}";
+type = Anchor;
+}
+);
+layerId = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+paths = (
+{
+closed = 1;
+nodes = (
+"500 -11 OFFCURVE",
+"600 33 OFFCURVE",
+"678 96 CURVE",
+"664 114 LINE",
+"590 56 OFFCURVE",
+"490 12 OFFCURVE",
+"365 13 CURVE SMOOTH",
+"218 14 OFFCURVE",
+"105 78 OFFCURVE",
+"105 172 CURVE SMOOTH",
+"105 286 OFFCURVE",
+"242 343 OFFCURVE",
+"375 343 CURVE SMOOTH",
+"484 343 OFFCURVE",
+"600 306 OFFCURVE",
+"666 220 CURVE",
+"672 221 LINE",
+"672 357 LINE",
+"649 357 LINE",
+"649 257 LINE",
+"661 252 LINE",
+"610 315 OFFCURVE",
+"501 366 OFFCURVE",
+"377 366 CURVE SMOOTH",
+"232 368 OFFCURVE",
+"80 303 OFFCURVE",
+"80 172 CURVE SMOOTH",
+"80 58 OFFCURVE",
+"208 -11 OFFCURVE",
+"365 -11 CURVE SMOOTH"
+);
+}
+);
+width = 774;
+}
+);
+leftKerningGroup = o;
+leftMetricsKey = "=o";
+rightKerningGroup = c;
+unicode = 0063;
+},
+{
+color = 0;
+glyphname = d;
+lastChange = "2022-01-28 13:38:36 +0000";
+layers = (
+{
+anchors = (
+{
+name = bottom;
+position = "{425, -11}";
+},
+{
+name = center;
+position = "{425, 180}";
+},
+{
+name = top;
+position = "{425, 366}";
+},
+{
+name = topright;
+position = "{741, 339}";
+}
+);
+hints = (
+{
+horizontal = 1;
+origin = "{1, 15}";
+target = "{1, 6}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 19}";
+target = "{0, 12}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{2, 2}";
+target = "{2, 3}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 25}";
+target = "{0, 6}";
+type = TTStem;
+options = 4;
+}
+);
+layerId = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+paths = (
+{
+closed = 1;
+nodes = (
+"449 -11 OFFCURVE",
+"570 53 OFFCURVE",
+"686 136 CURVE",
+"686 161 LINE",
+"561 74 OFFCURVE",
+"432 13 OFFCURVE",
+"318 13 CURVE SMOOTH",
+"185 13 OFFCURVE",
+"105 74 OFFCURVE",
+"105 161 CURVE SMOOTH",
+"105 271 OFFCURVE",
+"231 343 OFFCURVE",
+"384 343 CURVE SMOOTH",
+"502 343 OFFCURVE",
+"615 300 OFFCURVE",
+"690 260 CURVE",
+"690 283 LINE",
+"617 324 OFFCURVE",
+"512 366 OFFCURVE",
+"384 366 CURVE SMOOTH",
+"220 366 OFFCURVE",
+"80 290 OFFCURVE",
+"80 161 CURVE SMOOTH",
+"80 53 OFFCURVE",
+"175 -11 OFFCURVE",
+"318 -11 CURVE SMOOTH"
+);
+},
+{
+closed = 1;
+nodes = (
+"792 -10 OFFCURVE",
+"819 2 OFFCURVE",
+"844 19 CURVE",
+"834 39 LINE",
+"810 22 OFFCURVE",
+"790 14 OFFCURVE",
+"762 14 CURVE SMOOTH",
+"730 14 OFFCURVE",
+"699 39 OFFCURVE",
+"699 94 CURVE SMOOTH",
+"699 520 LINE",
+"674 520 LINE",
+"674 94 LINE SMOOTH",
+"674 28 OFFCURVE",
+"710 -10 OFFCURVE",
+"761 -10 CURVE SMOOTH"
+);
+},
+{
+closed = 1;
+nodes = (
+"690 497 LINE",
+"690 520 LINE",
+"491 520 LINE",
+"491 497 LINE"
+);
+}
+);
+width = 904;
+}
+);
+leftKerningGroup = o;
+leftMetricsKey = "=o";
+rightKerningGroup = l;
+unicode = 0064;
+},
+{
+color = 0;
+glyphname = e;
+lastChange = "2022-01-28 13:38:36 +0000";
+layers = (
+{
+anchors = (
+{
+name = bottom;
+position = "{370, -11}";
+},
+{
+name = ogonek;
+position = "{666, 69}";
+},
+{
+name = top;
+position = "{376, 366}";
+}
+);
+hints = (
+{
+horizontal = 1;
+origin = "{0, 37}";
+target = "{0, 6}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 25}";
+target = "{0, 18}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 31}";
+target = "{0, 12}";
+type = TTStem;
+options = 4;
+}
+);
+layerId = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+paths = (
+{
+closed = 1;
+nodes = (
+"506 -11 OFFCURVE",
+"590 22 OFFCURVE",
+"666 69 CURVE",
+"655 89 LINE",
+"581 43 OFFCURVE",
+"494 11 OFFCURVE",
+"370 13 CURVE SMOOTH",
+"218 14 OFFCURVE",
+"105 77 OFFCURVE",
+"105 171 CURVE SMOOTH",
+"105 280 OFFCURVE",
+"252 343 OFFCURVE",
+"400 343 CURVE SMOOTH",
+"540 343 OFFCURVE",
+"627 309 OFFCURVE",
+"627 250 CURVE SMOOTH",
+"627 186 OFFCURVE",
+"534 164 OFFCURVE",
+"414 164 CURVE SMOOTH",
+"305 164 OFFCURVE",
+"205 181 OFFCURVE",
+"99 217 CURVE",
+"100 196 LINE",
+"205 160 OFFCURVE",
+"305 140 OFFCURVE",
+"414 140 CURVE SMOOTH",
+"549 140 OFFCURVE",
+"652 172 OFFCURVE",
+"652 250 CURVE SMOOTH",
+"652 324 OFFCURVE",
+"551 366 OFFCURVE",
+"400 366 CURVE SMOOTH",
+"240 366 OFFCURVE",
+"80 297 OFFCURVE",
+"80 171 CURVE SMOOTH",
+"80 57 OFFCURVE",
+"208 -11 OFFCURVE",
+"370 -11 CURVE SMOOTH"
+);
+}
+);
+width = 751;
+}
+);
+leftKerningGroup = o;
+leftMetricsKey = "=o";
+rightKerningGroup = e;
+unicode = 0065;
+},
+{
+color = 0;
+glyphname = f;
+lastChange = "2022-01-28 13:38:36 +0000";
+layers = (
+{
+hints = (
+{
+horizontal = 1;
+origin = "{1, 3}";
+target = "{1, 2}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{2, 2}";
+target = "{2, 3}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 4}";
+target = "{0, 11}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{2, 2}";
+target = "{2, 1}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{2, 3}";
+target = "{2, 0}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{1, 2}";
+target = "{1, 1}";
+type = Align;
+}
+);
+layerId = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+paths = (
+{
+closed = 1;
+nodes = (
+"235 10 LINE",
+"235 389 LINE SMOOTH",
+"235 485 OFFCURVE",
+"277 532 OFFCURVE",
+"374 532 CURVE SMOOTH",
+"431 532 OFFCURVE",
+"496 517 OFFCURVE",
+"547 497 CURVE",
+"555 520 LINE",
+"505 536 OFFCURVE",
+"440 556 OFFCURVE",
+"375 556 CURVE SMOOTH",
+"260 556 OFFCURVE",
+"210 494 OFFCURVE",
+"210 386 CURVE SMOOTH",
+"210 10 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"442 0 LINE",
+"442 23 LINE",
+"50 23 LINE",
+"50 0 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"459 334 LINE",
+"459 357 LINE",
+"50 357 LINE",
+"50 334 LINE"
+);
+}
+);
+width = 555;
+}
+);
+leftKerningGroup = n;
+leftMetricsKey = "=n";
+rightKerningGroup = f;
+unicode = 0066;
+},
+{
+color = 0;
+glyphname = g;
+lastChange = "2022-01-28 13:38:36 +0000";
+layers = (
+{
+anchors = (
+{
+name = bottom;
+position = "{367, -175}";
+},
+{
+name = top;
+position = "{376, 377}";
+}
+);
+hints = (
+{
+horizontal = 1;
+origin = "{0, 43}";
+target = "{0, 30}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 21}";
+target = "{0, 8}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 24}";
+target = "{0, 5}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{1, 11}";
+target = "{2, 11}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{1, 5}";
+target = "{2, 5}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{3, 2}";
+target = "{3, 3}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 36}";
+target = "{0, 37}";
+type = Align;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 14}";
+target = "{0, 15}";
+type = Align;
+options = 4;
+}
+);
+layerId = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+paths = (
+{
+closed = 1;
+nodes = (
+"543 -165 OFFCURVE",
+"691 -121 OFFCURVE",
+"691 -30 CURVE SMOOTH",
+"691 31 OFFCURVE",
+"631 59 OFFCURVE",
+"555 59 CURVE SMOOTH",
+"480 59 OFFCURVE",
+"315 26 OFFCURVE",
+"239 26 CURVE SMOOTH",
+"134 26 OFFCURVE",
+"101 64 OFFCURVE",
+"101 94 CURVE SMOOTH",
+"101 136 OFFCURVE",
+"149 159 OFFCURVE",
+"183 171 CURVE",
+"164 180 LINE",
+"130 170 OFFCURVE",
+"78 141 OFFCURVE",
+"78 91 CURVE SMOOTH",
+"78 56 OFFCURVE",
+"108 5 OFFCURVE",
+"236 5 CURVE SMOOTH",
+"316 5 OFFCURVE",
+"475 36 OFFCURVE",
+"555 36 CURVE SMOOTH",
+"620 36 OFFCURVE",
+"666 17 OFFCURVE",
+"666 -30 CURVE SMOOTH",
+"666 -107 OFFCURVE",
+"528 -142 OFFCURVE",
+"349 -142 CURVE SMOOTH",
+"166 -142 OFFCURVE",
+"95 -100 OFFCURVE",
+"95 -46 CURVE SMOOTH",
+"95 -14 OFFCURVE",
+"121 14 OFFCURVE",
+"155 25 CURVE",
+"136 34 LINE",
+"109 24 OFFCURVE",
+"70 -7 OFFCURVE",
+"70 -49 CURVE SMOOTH",
+"70 -115 OFFCURVE",
+"152 -165 OFFCURVE",
+"350 -165 CURVE SMOOTH"
+);
+},
+{
+closed = 1;
+nodes = (
+"512 108 OFFCURVE",
+"630 149 OFFCURVE",
+"630 239 CURVE SMOOTH",
+"630 327 OFFCURVE",
+"512 367 OFFCURVE",
+"376 367 CURVE SMOOTH",
+"241 367 OFFCURVE",
+"124 327 OFFCURVE",
+"124 239 CURVE SMOOTH",
+"124 149 OFFCURVE",
+"241 106 OFFCURVE",
+"376 108 CURVE SMOOTH"
+);
+},
+{
+closed = 1;
+nodes = (
+"253 132 OFFCURVE",
+"149 168 OFFCURVE",
+"149 239 CURVE SMOOTH",
+"149 310 OFFCURVE",
+"253 343 OFFCURVE",
+"376 343 CURVE SMOOTH",
+"501 343 OFFCURVE",
+"605 310 OFFCURVE",
+"605 239 CURVE SMOOTH",
+"605 168 OFFCURVE",
+"501 132 OFFCURVE",
+"376 132 CURVE SMOOTH"
+);
+},
+{
+closed = 1;
+nodes = (
+"585 390 OFFCURVE",
+"631 418 OFFCURVE",
+"689 421 CURVE",
+"689 446 LINE",
+"624 443 OFFCURVE",
+"570 401 OFFCURVE",
+"556 325 CURVE",
+"567 309 LINE"
+);
+}
+);
+width = 756;
+}
+);
+leftKerningGroup = o;
+rightKerningGroup = o;
+unicode = 0067;
+},
+{
+color = 0;
+glyphname = h;
+lastChange = "2022-01-28 13:38:36 +0000";
+layers = (
+{
+anchors = (
+{
+name = bottom;
+position = "{485, 0}";
+},
+{
+name = center;
+position = "{519, 180}";
+},
+{
+name = top;
+position = "{519, 366}";
+}
+);
+hints = (
+{
+horizontal = 1;
+origin = "{1, 3}";
+target = "{1, 2}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 4}";
+target = "{0, 11}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{2, 2}";
+target = "{2, 3}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{1, 2}";
+target = "{2, 0}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{1, 2}";
+target = "{3, 2}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{1, 2}";
+target = "{0, 0}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{1, 3}";
+target = "{3, 3}";
+type = Align;
+}
+);
+layerId = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+paths = (
+{
+closed = 1;
+nodes = (
+"752 15 LINE",
+"752 135 LINE SMOOTH",
+"752 257 OFFCURVE",
+"703 366 OFFCURVE",
+"547 366 CURVE SMOOTH",
+"411 366 OFFCURVE",
+"289 264 OFFCURVE",
+"224 211 CURVE",
+"224 188 LINE",
+"289 239 OFFCURVE",
+"411 343 OFFCURVE",
+"547 343 CURVE SMOOTH",
+"694 343 OFFCURVE",
+"727 236 OFFCURVE",
+"727 135 CURVE SMOOTH",
+"727 15 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"397 0 LINE",
+"397 23 LINE",
+"30 23 LINE",
+"30 0 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"239 15 LINE",
+"239 520 LINE",
+"31 520 LINE",
+"31 496 LINE",
+"214 496 LINE",
+"214 15 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"925 0 LINE",
+"925 23 LINE",
+"567 23 LINE",
+"567 0 LINE"
+);
+}
+);
+width = 938;
+}
+);
+leftKerningGroup = h;
+rightKerningGroup = n;
+rightMetricsKey = "=n";
+unicode = 0068;
+},
+{
+color = 0;
+glyphname = i;
+lastChange = "2022-01-28 13:38:36 +0000";
+layers = (
+{
+background = {
+paths = (
+{
+closed = 1;
+nodes = (
+"265 470 OFFCURVE",
+"281 483 OFFCURVE",
+"281 500 CURVE SMOOTH",
+"281 518 OFFCURVE",
+"265 531 OFFCURVE",
+"234 531 CURVE SMOOTH",
+"205 531 OFFCURVE",
+"186 518 OFFCURVE",
+"186 500 CURVE SMOOTH",
+"186 483 OFFCURVE",
+"205 470 OFFCURVE",
+"234 470 CURVE SMOOTH"
+);
+}
+);
+};
+components = (
+{
+name = idotless;
+},
+{
+name = dotaccentcomb;
+}
+);
+layerId = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+width = 0;
+}
+);
+leftKerningGroup = n;
+leftMetricsKey = "=n";
+rightKerningGroup = u;
+unicode = 0069;
+},
+{
+color = 0;
+glyphname = j;
+lastChange = "2022-01-28 13:38:36 +0000";
+layers = (
+{
+background = {
+components = (
+{
+name = jdotless;
+}
+);
+paths = (
+{
+closed = 1;
+nodes = (
+"278 469 OFFCURVE",
+"294 482 OFFCURVE",
+"294 500 CURVE SMOOTH",
+"294 517 OFFCURVE",
+"278 531 OFFCURVE",
+"247 531 CURVE SMOOTH",
+"217 531 OFFCURVE",
+"199 517 OFFCURVE",
+"199 500 CURVE SMOOTH",
+"199 482 OFFCURVE",
+"217 469 OFFCURVE",
+"247 469 CURVE SMOOTH"
+);
+}
+);
+};
+components = (
+{
+alignment = -1;
+name = jdotless;
+},
+{
+alignment = -1;
+name = dotaccentcomb;
+transform = "{1, 0, 0, 1, 120, -163}";
+}
+);
+hints = (
+{
+horizontal = 1;
+place = "{-180, 23}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+place = "{357, -23}";
+type = TTStem;
+options = 4;
+}
+);
+layerId = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+width = 419;
+}
+);
+leftKerningGroup = p;
+rightKerningGroup = j;
+unicode = 006A;
+},
+{
+color = 0;
+glyphname = k;
+lastChange = "2022-01-28 13:38:36 +0000";
+layers = (
+{
+anchors = (
+{
+name = bottom;
+position = "{474, 0}";
+},
+{
+name = top;
+position = "{474, 366}";
+}
+);
+hints = (
+{
+horizontal = 1;
+origin = "{4, 13}";
+target = "{4, 6}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 25}";
+target = "{0, 18}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 5}";
+target = "{0, 12}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{3, 2}";
+target = "{3, 3}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{1, 3}";
+target = "{1, 2}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{1, 2}";
+target = "{1, 1}";
+type = Align;
+}
+);
+layerId = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+paths = (
+{
+closed = 1;
+nodes = (
+"645 134 OFFCURVE",
+"756 177 OFFCURVE",
+"756 264 CURVE SMOOTH",
+"756 328 OFFCURVE",
+"690 366 OFFCURVE",
+"582 366 CURVE SMOOTH",
+"465 366 OFFCURVE",
+"340 311 OFFCURVE",
+"224 232 CURVE",
+"224 211 LINE",
+"340 288 OFFCURVE",
+"462 343 OFFCURVE",
+"577 343 CURVE SMOOTH",
+"672 343 OFFCURVE",
+"731 317 OFFCURVE",
+"731 262 CURVE SMOOTH",
+"731 194 OFFCURVE",
+"624 158 OFFCURVE",
+"472 158 CURVE SMOOTH",
+"381 158 OFFCURVE",
+"266 171 OFFCURVE",
+"222 177 CURVE",
+"220 160 LINE",
+"266 151 OFFCURVE",
+"366 134 OFFCURVE",
+"469 134 CURVE SMOOTH"
+);
+},
+{
+closed = 1;
+nodes = (
+"419 0 LINE",
+"419 23 LINE",
+"30 23 LINE",
+"30 0 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"236 0 LINE",
+"236 520 LINE",
+"211 520 LINE",
+"211 0 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"236 496 LINE",
+"236 520 LINE",
+"30 520 LINE",
+"30 496 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"764 -20 OFFCURVE",
+"816 31 OFFCURVE",
+"830 99 CURVE",
+"809 104 LINE",
+"795 38 OFFCURVE",
+"744 4 OFFCURVE",
+"685 4 CURVE SMOOTH",
+"603 4 OFFCURVE",
+"553 59 OFFCURVE",
+"481 151 CURVE",
+"456 151 LINE",
+"520 57 OFFCURVE",
+"592 -20 OFFCURVE",
+"684 -20 CURVE SMOOTH"
+);
+}
+);
+width = 890;
+}
+);
+leftKerningGroup = h;
+leftMetricsKey = "=h";
+rightKerningGroup = k;
+unicode = 006B;
+},
+{
+color = 0;
+glyphname = l;
+lastChange = "2022-01-28 13:38:36 +0000";
+layers = (
+{
+anchors = (
+{
+name = bottom;
+position = "{225, 0}";
+},
+{
+name = center;
+position = "{225, 283}";
+},
+{
+name = top;
+position = "{225, 520}";
+},
+{
+name = topright;
+position = "{280, 337}";
+}
+);
+hints = (
+{
+horizontal = 1;
+origin = "{1, 3}";
+target = "{1, 2}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{2, 2}";
+target = "{2, 3}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{1, 2}";
+target = "{0, 0}";
+type = Align;
+}
+);
+layerId = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+paths = (
+{
+closed = 1;
+nodes = (
+"236 20 LINE",
+"236 520 LINE",
+"211 520 LINE",
+"211 20 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"419 0 LINE",
+"419 23 LINE",
+"30 23 LINE",
+"30 0 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"236 496 LINE",
+"236 520 LINE",
+"30 520 LINE",
+"30 496 LINE"
+);
+}
+);
+width = 448;
+}
+);
+leftKerningGroup = h;
+leftMetricsKey = "=h";
+rightKerningGroup = l;
+rightMetricsKey = "=i";
+unicode = 006C;
+},
+{
+color = 0;
+glyphname = m;
+lastChange = "2022-01-28 13:38:36 +0000";
+layers = (
+{
+anchors = (
+{
+name = bottom;
+position = "{653, 0}";
+},
+{
+name = top;
+position = "{668, 351}";
+}
+);
+hints = (
+{
+horizontal = 1;
+origin = "{2, 3}";
+target = "{2, 2}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 2}";
+target = "{0, 3}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{3, 4}";
+target = "{3, 11}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{3, 4}";
+target = "{5, 4}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{3, 11}";
+target = "{5, 11}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{3, 7}";
+target = "{5, 7}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{5, 8}";
+target = "{3, 8}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{2, 2}";
+target = "{1, 0}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{2, 2}";
+target = "{4, 2}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{2, 2}";
+target = "{3, 0}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{2, 2}";
+target = "{6, 2}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{2, 2}";
+target = "{5, 0}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{6, 3}";
+target = "{2, 3}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{2, 3}";
+target = "{4, 3}";
+type = Align;
+}
+);
+layerId = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+paths = (
+{
+closed = 1;
+nodes = (
+"257 334 LINE",
+"257 357 LINE",
+"50 357 LINE",
+"50 334 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"257 16 LINE",
+"257 357 LINE",
+"232 357 LINE",
+"232 16 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"392 0 LINE",
+"392 23 LINE",
+"50 23 LINE",
+"50 0 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"660 16 LINE",
+"660 156 LINE SMOOTH",
+"660 278 OFFCURVE",
+"622 367 OFFCURVE",
+"493 367 CURVE SMOOTH",
+"385 367 OFFCURVE",
+"299 290 OFFCURVE",
+"244 211 CURVE",
+"244 188 LINE",
+"314 268 OFFCURVE",
+"385 343 OFFCURVE",
+"493 343 CURVE SMOOTH",
+"611 343 OFFCURVE",
+"636 258 OFFCURVE",
+"636 156 CURVE SMOOTH",
+"636 16 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"795 0 LINE",
+"795 23 LINE",
+"501 23 LINE",
+"501 0 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"1065 16 LINE",
+"1065 156 LINE SMOOTH",
+"1065 278 OFFCURVE",
+"1025 367 OFFCURVE",
+"897 367 CURVE SMOOTH",
+"789 367 OFFCURVE",
+"702 290 OFFCURVE",
+"647 211 CURVE",
+"647 188 LINE",
+"716 268 OFFCURVE",
+"789 343 OFFCURVE",
+"897 343 CURVE SMOOTH",
+"1016 343 OFFCURVE",
+"1040 258 OFFCURVE",
+"1040 156 CURVE SMOOTH",
+"1040 16 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"1247 0 LINE",
+"1247 23 LINE",
+"905 23 LINE",
+"905 0 LINE"
+);
+}
+);
+width = 1260;
+}
+);
+leftKerningGroup = n;
+leftMetricsKey = "=n";
+rightKerningGroup = n;
+rightMetricsKey = "=n";
+unicode = 006D;
+},
+{
+color = 0;
+glyphname = n;
+lastChange = "2022-01-28 13:38:36 +0000";
+layers = (
+{
+anchors = (
+{
+name = bottom;
+position = "{506, 0}";
+},
+{
+name = top;
+position = "{519, 366}";
+}
+);
+hints = (
+{
+horizontal = 1;
+origin = "{1, 3}";
+target = "{1, 2}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{3, 2}";
+target = "{3, 3}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 4}";
+target = "{0, 11}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{1, 2}";
+target = "{2, 0}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{1, 2}";
+target = "{4, 2}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{1, 2}";
+target = "{0, 0}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{4, 3}";
+target = "{1, 3}";
+type = Align;
+}
+);
+layerId = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+paths = (
+{
+closed = 1;
+nodes = (
+"772 20 LINE",
+"772 135 LINE SMOOTH",
+"772 257 OFFCURVE",
+"724 366 OFFCURVE",
+"567 366 CURVE SMOOTH",
+"431 366 OFFCURVE",
+"309 264 OFFCURVE",
+"244 211 CURVE",
+"244 188 LINE",
+"309 239 OFFCURVE",
+"431 343 OFFCURVE",
+"567 343 CURVE SMOOTH",
+"714 343 OFFCURVE",
+"747 236 OFFCURVE",
+"747 135 CURVE SMOOTH",
+"747 20 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"417 0 LINE",
+"417 23 LINE",
+"50 23 LINE",
+"50 0 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"257 20 LINE",
+"257 357 LINE",
+"232 357 LINE",
+"232 20 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"257 334 LINE",
+"257 357 LINE",
+"50 357 LINE",
+"50 334 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"944 0 LINE",
+"944 23 LINE",
+"587 23 LINE",
+"587 0 LINE"
+);
+}
+);
+width = 957;
+}
+);
+leftKerningGroup = n;
+rightKerningGroup = n;
+unicode = 006E;
+},
+{
+color = 0;
+glyphname = o;
+lastChange = "2022-01-28 13:38:36 +0000";
+layers = (
+{
+anchors = (
+{
+name = bottom;
+position = "{399, -11}";
+},
+{
+name = center;
+position = "{400, 180}";
+},
+{
+name = ogonek;
+position = "{399, -10}";
+},
+{
+name = top;
+position = "{400, 366}";
+},
+{
+name = topright;
+position = "{769, 357}";
+}
+);
+guideLines = (
+{
+position = "{221, 365}";
+},
+{
+position = "{221, -11}";
+}
+);
+hints = (
+{
+horizontal = 1;
+origin = "{0, 11}";
+target = "{1, 11}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 5}";
+target = "{1, 5}";
+type = TTStem;
+options = 4;
+}
+);
+layerId = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+paths = (
+{
+closed = 1;
+nodes = (
+"578 -11 OFFCURVE",
+"719 59 OFFCURVE",
+"719 179 CURVE SMOOTH",
+"719 301 OFFCURVE",
+"578 366 OFFCURVE",
+"399 366 CURVE SMOOTH",
+"221 365 OFFCURVE",
+"80 301 OFFCURVE",
+"80 179 CURVE SMOOTH",
+"80 59 OFFCURVE",
+"221 -11 OFFCURVE",
+"399 -11 CURVE SMOOTH"
+);
+},
+{
+closed = 1;
+nodes = (
+"232 13 OFFCURVE",
+"105 75 OFFCURVE",
+"105 179 CURVE SMOOTH",
+"105 284 OFFCURVE",
+"232 341 OFFCURVE",
+"399 342 CURVE SMOOTH",
+"567 342 OFFCURVE",
+"694 284 OFFCURVE",
+"694 179 CURVE SMOOTH",
+"694 75 OFFCURVE",
+"567 13 OFFCURVE",
+"399 13 CURVE SMOOTH"
+);
+}
+);
+width = 799;
+}
+);
+leftKerningGroup = o;
+rightKerningGroup = o;
+unicode = 006F;
+},
+{
+color = 0;
+glyphname = p;
+lastChange = "2022-01-28 13:38:36 +0000";
+layers = (
+{
+anchors = (
+{
+name = bottom;
+position = "{459, -11}";
+},
+{
+name = top;
+position = "{459, 366}";
+}
+);
+hints = (
+{
+horizontal = 1;
+origin = "{1, 3}";
+target = "{1, 2}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 25}";
+target = "{0, 18}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 5}";
+target = "{0, 12}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{3, 2}";
+target = "{3, 3}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{1, 2}";
+target = "{2, 0}";
+type = Align;
+}
+);
+layerId = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+paths = (
+{
+closed = 1;
+nodes = (
+"690 -11 OFFCURVE",
+"830 67 OFFCURVE",
+"830 195 CURVE SMOOTH",
+"830 303 OFFCURVE",
+"735 366 OFFCURVE",
+"591 366 CURVE SMOOTH",
+"461 366 OFFCURVE",
+"340 303 OFFCURVE",
+"224 219 CURVE",
+"224 196 LINE",
+"349 283 OFFCURVE",
+"477 343 OFFCURVE",
+"591 343 CURVE SMOOTH",
+"725 343 OFFCURVE",
+"805 283 OFFCURVE",
+"805 195 CURVE SMOOTH",
+"805 85 OFFCURVE",
+"678 11 OFFCURVE",
+"526 13 CURVE SMOOTH",
+"407 11 OFFCURVE",
+"294 55 OFFCURVE",
+"220 95 CURVE",
+"220 74 LINE",
+"292 32 OFFCURVE",
+"397 -11 OFFCURVE",
+"526 -11 CURVE SMOOTH"
+);
+},
+{
+closed = 1;
+nodes = (
+"428 -165 LINE",
+"428 -142 LINE",
+"30 -142 LINE",
+"30 -165 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"236 -147 LINE",
+"236 357 LINE",
+"211 357 LINE",
+"211 -147 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"236 334 LINE",
+"236 357 LINE",
+"30 357 LINE",
+"30 334 LINE"
+);
+}
+);
+width = 910;
+}
+);
+leftKerningGroup = p;
+rightKerningGroup = o;
+rightMetricsKey = "=o";
+unicode = 0070;
+},
+{
+color = 0;
+glyphname = q;
+lastChange = "2022-01-28 13:38:36 +0000";
+layers = (
+{
+anchors = (
+{
+name = bottom;
+position = "{382, -11}";
+},
+{
+name = center;
+position = "{382, 180}";
+},
+{
+name = top;
+position = "{382, 366}";
+}
+);
+background = {
+paths = (
+{
+closed = 1;
+nodes = (
+"449 -11 OFFCURVE",
+"570 53 OFFCURVE",
+"686 136 CURVE",
+"686 161 LINE",
+"561 74 OFFCURVE",
+"432 13 OFFCURVE",
+"318 13 CURVE SMOOTH",
+"185 13 OFFCURVE",
+"105 74 OFFCURVE",
+"105 161 CURVE SMOOTH",
+"105 271 OFFCURVE",
+"231 343 OFFCURVE",
+"384 343 CURVE SMOOTH",
+"526 343 OFFCURVE",
+"701 284 OFFCURVE",
+"831 224 CURVE",
+"831 249 LINE",
+"702 310 OFFCURVE",
+"537 367 OFFCURVE",
+"384 366 CURVE SMOOTH",
+"220 366 OFFCURVE",
+"80 290 OFFCURVE",
+"80 161 CURVE SMOOTH",
+"80 53 OFFCURVE",
+"175 -11 OFFCURVE",
+"318 -11 CURVE SMOOTH"
+);
+},
+{
+closed = 1;
+nodes = (
+"881 -165 LINE",
+"881 -142 LINE",
+"481 -142 LINE",
+"481 -165 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"699 -150 LINE",
+"699 368 LINE",
+"686 368 LINE",
+"674 301 LINE",
+"674 -150 LINE"
+);
+}
+);
+};
+hints = (
+{
+horizontal = 1;
+origin = "{0, 25}";
+target = "{0, 24}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 19}";
+target = "{1, 12}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 13}";
+target = "{1, 5}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 24}";
+target = "{0, 28}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{0, 8}";
+type = Anchor;
+},
+{
+horizontal = 1;
+origin = "{0, 3}";
+target = "{0, 4}";
+type = TTStem;
+options = 4;
+}
+);
+layerId = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+paths = (
+{
+closed = 1;
+nodes = (
+"699 278 LINE",
+"746 261 OFFCURVE",
+"791 243 OFFCURVE",
+"831 224 CURVE",
+"831 249 LINE",
+"790 268 OFFCURVE",
+"746 287 OFFCURVE",
+"699 304 CURVE",
+"699 368 LINE",
+"686 368 LINE",
+"676 312 LINE",
+"582 344 OFFCURVE",
+"481 367 OFFCURVE",
+"384 366 CURVE SMOOTH",
+"220 366 OFFCURVE",
+"80 290 OFFCURVE",
+"80 161 CURVE SMOOTH",
+"80 53 OFFCURVE",
+"175 -11 OFFCURVE",
+"318 -11 CURVE SMOOTH",
+"444 -11 OFFCURVE",
+"562 49 OFFCURVE",
+"674 127 CURVE",
+"674 -142 LINE",
+"481 -142 LINE",
+"481 -165 LINE",
+"881 -165 LINE",
+"881 -142 LINE",
+"699 -142 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"185 13 OFFCURVE",
+"105 74 OFFCURVE",
+"105 161 CURVE SMOOTH",
+"105 271 OFFCURVE",
+"231 343 OFFCURVE",
+"384 343 CURVE SMOOTH",
+"474 343 OFFCURVE",
+"577 319 OFFCURVE",
+"674 287 CURVE",
+"674 153 LINE",
+"553 70 OFFCURVE",
+"428 13 OFFCURVE",
+"318 13 CURVE SMOOTH"
+);
+}
+);
+width = 906;
+}
+);
+leftKerningGroup = o;
+leftMetricsKey = "=o";
+rightKerningGroup = q;
+unicode = 0071;
+},
+{
+color = 0;
+glyphname = r;
+lastChange = "2022-01-28 13:38:36 +0000";
+layers = (
+{
+anchors = (
+{
+name = bottom;
+position = "{243, 0}";
+},
+{
+name = top;
+position = "{356, 357}";
+}
+);
+hints = (
+{
+horizontal = 1;
+origin = "{1, 3}";
+target = "{1, 2}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 6}";
+target = "{0, 2}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{3, 2}";
+target = "{3, 3}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{1, 2}";
+target = "{1, 1}";
+type = Align;
+}
+);
+layerId = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+paths = (
+{
+closed = 1;
+nodes = (
+"376 286 OFFCURVE",
+"498 343 OFFCURVE",
+"625 343 CURVE",
+"625 219 LINE",
+"650 219 LINE",
+"650 366 LINE",
+"625 367 LINE",
+"482 367 OFFCURVE",
+"366 305 OFFCURVE",
+"244 211 CURVE",
+"244 188 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"440 0 LINE",
+"440 23 LINE",
+"50 23 LINE",
+"50 0 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"257 10 LINE",
+"257 357 LINE",
+"232 357 LINE",
+"232 10 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"257 334 LINE",
+"257 357 LINE",
+"50 357 LINE",
+"50 334 LINE"
+);
+}
+);
+width = 725;
+}
+);
+leftKerningGroup = n;
+leftMetricsKey = "=n";
+rightKerningGroup = r;
+unicode = 0072;
+},
+{
+color = 0;
+glyphname = s;
+lastChange = "2022-01-28 13:38:36 +0000";
+layers = (
+{
+anchors = (
+{
+name = bottom;
+position = "{410, -10}";
+},
+{
+name = top;
+position = "{370, 367}";
+}
+);
+hints = (
+{
+horizontal = 1;
+origin = "{0, 43}";
+target = "{0, 33}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 21}";
+target = "{0, 11}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 16}";
+type = Anchor;
+},
+{
+horizontal = 1;
+origin = "{0, 37}";
+type = Anchor;
+},
+{
+horizontal = 1;
+origin = "{0, 33}";
+target = "{0, 21}";
+other1 = "{0, 5}";
+type = Interpolate;
+},
+{
+horizontal = 1;
+origin = "{0, 5}";
+target = "{0, 27}";
+type = TTStem;
+options = 4;
+}
+);
+layerId = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+paths = (
+{
+closed = 1;
+nodes = (
+"552 -10 OFFCURVE",
+"639 19 OFFCURVE",
+"639 86 CURVE SMOOTH",
+"639 158 OFFCURVE",
+"553 177 OFFCURVE",
+"364 189 CURVE SMOOTH",
+"190 199 OFFCURVE",
+"126 222 OFFCURVE",
+"126 268 CURVE SMOOTH",
+"126 318 OFFCURVE",
+"197 345 OFFCURVE",
+"315 345 CURVE SMOOTH",
+"440 345 OFFCURVE",
+"550 306 OFFCURVE",
+"622 220 CURVE",
+"622 357 LINE",
+"599 357 LINE",
+"599 257 LINE",
+"615 250 LINE",
+"566 314 OFFCURVE",
+"457 367 OFFCURVE",
+"319 367 CURVE SMOOTH",
+"168 367 OFFCURVE",
+"102 327 OFFCURVE",
+"102 267 CURVE SMOOTH",
+"102 205 OFFCURVE",
+"180 174 OFFCURVE",
+"364 164 CURVE SMOOTH",
+"547 153 OFFCURVE",
+"615 136 OFFCURVE",
+"615 85 CURVE SMOOTH",
+"615 27 OFFCURVE",
+"518 12 OFFCURVE",
+"414 12 CURVE SMOOTH",
+"292 12 OFFCURVE",
+"164 50 OFFCURVE",
+"95 136 CURVE",
+"95 0 LINE",
+"118 0 LINE",
+"118 99 LINE",
+"101 106 LINE",
+"149 43 OFFCURVE",
+"270 -10 OFFCURVE",
+"409 -10 CURVE SMOOTH"
+);
+}
+);
+width = 744;
+}
+);
+leftKerningGroup = s;
+rightKerningGroup = s;
+unicode = 0073;
+},
+{
+color = 0;
+glyphname = t;
+lastChange = "2022-01-28 13:38:36 +0000";
+layers = (
+{
+anchors = (
+{
+name = bottom;
+position = "{261, -11}";
+},
+{
+name = center;
+position = "{180, 124}";
+},
+{
+name = top;
+position = "{180, 456}";
+},
+{
+name = topright;
+position = "{228, 452}";
+}
+);
+background = {
+paths = (
+{
+closed = 1;
+nodes = (
+"356 -11 OFFCURVE",
+"420 13 OFFCURVE",
+"464 34 CURVE",
+"453 55 LINE",
+"412 34 OFFCURVE",
+"353 12 OFFCURVE",
+"284 12 CURVE SMOOTH",
+"222 12 OFFCURVE",
+"180 41 OFFCURVE",
+"180 123 CURVE",
+"180 456 LINE",
+"155 456 LINE",
+"155 123 LINE",
+"155 26 OFFCURVE",
+"205 -11 OFFCURVE",
+"286 -11 CURVE SMOOTH"
+);
+},
+{
+closed = 1;
+nodes = (
+"418 333 LINE",
+"418 357 LINE",
+"25 357 LINE",
+"25 333 LINE"
+);
+}
+);
+};
+hints = (
+{
+horizontal = 1;
+origin = "{0, 15}";
+target = "{0, 6}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{1, 2}";
+target = "{1, 3}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{1, 2}";
+target = "{1, 1}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{1, 3}";
+target = "{1, 0}";
+type = Align;
+}
+);
+layerId = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+paths = (
+{
+closed = 1;
+nodes = (
+"356 -11 OFFCURVE",
+"420 14 OFFCURVE",
+"464 34 CURVE",
+"453 55 LINE",
+"412 34 OFFCURVE",
+"353 13 OFFCURVE",
+"284 13 CURVE SMOOTH",
+"222 13 OFFCURVE",
+"180 41 OFFCURVE",
+"180 124 CURVE SMOOTH",
+"180 456 LINE",
+"155 456 LINE",
+"155 124 LINE SMOOTH",
+"155 27 OFFCURVE",
+"205 -11 OFFCURVE",
+"286 -11 CURVE SMOOTH"
+);
+},
+{
+closed = 1;
+nodes = (
+"418 333 LINE",
+"418 357 LINE",
+"25 357 LINE",
+"25 333 LINE"
+);
+}
+);
+width = 524;
+}
+);
+leftKerningGroup = t;
+rightKerningGroup = t;
+unicode = 0074;
+},
+{
+color = 0;
+glyphname = u;
+lastChange = "2022-01-28 13:38:36 +0000";
+layers = (
+{
+anchors = (
+{
+name = bottom;
+position = "{381, -11}";
+},
+{
+name = ogonek;
+position = "{850, 19}";
+},
+{
+name = top;
+position = "{424, 357}";
+},
+{
+name = topright;
+position = "{825, 357}";
+}
+);
+hints = (
+{
+horizontal = 1;
+origin = "{2, 15}";
+target = "{2, 6}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{1, 2}";
+target = "{1, 3}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 15}";
+target = "{0, 6}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{3, 2}";
+target = "{1, 2}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{1, 3}";
+target = "{3, 3}";
+type = Align;
+}
+);
+layerId = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+paths = (
+{
+closed = 1;
+nodes = (
+"495 -11 OFFCURVE",
+"590 40 OFFCURVE",
+"691 89 CURVE",
+"691 111 LINE",
+"590 61 OFFCURVE",
+"481 13 OFFCURVE",
+"381 13 CURVE SMOOTH",
+"271 14 OFFCURVE",
+"210 60 OFFCURVE",
+"210 165 CURVE SMOOTH",
+"210 357 LINE",
+"185 357 LINE",
+"185 165 LINE SMOOTH",
+"185 39 OFFCURVE",
+"261 -11 OFFCURVE",
+"381 -11 CURVE SMOOTH"
+);
+},
+{
+closed = 1;
+nodes = (
+"197 334 LINE",
+"197 357 LINE",
+"14 357 LINE",
+"14 334 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"800 -10 OFFCURVE",
+"825 2 OFFCURVE",
+"850 19 CURVE",
+"841 39 LINE",
+"817 22 OFFCURVE",
+"795 14 OFFCURVE",
+"769 14 CURVE SMOOTH",
+"736 14 OFFCURVE",
+"705 39 OFFCURVE",
+"705 94 CURVE SMOOTH",
+"705 357 LINE",
+"680 357 LINE",
+"680 94 LINE SMOOTH",
+"680 28 OFFCURVE",
+"717 -10 OFFCURVE",
+"767 -10 CURVE SMOOTH"
+);
+},
+{
+closed = 1;
+nodes = (
+"697 334 LINE",
+"697 357 LINE",
+"519 357 LINE",
+"519 334 LINE"
+);
+}
+);
+width = 910;
+}
+);
+leftKerningGroup = u;
+rightKerningGroup = u;
+rightMetricsKey = "=d";
+unicode = 0075;
+},
+{
+color = 0;
+glyphname = v;
+lastChange = "2022-01-28 13:38:36 +0000";
+layers = (
+{
+anchors = (
+{
+name = bottom;
+position = "{375, -11}";
+},
+{
+name = top;
+position = "{375, 357}";
+}
+);
+hints = (
+{
+horizontal = 1;
+origin = "{1, 2}";
+target = "{1, 3}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{1, 2}";
+target = "{2, 2}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{1, 3}";
+target = "{2, 3}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{1, 3}";
+target = "{1, 0}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{1, 3}";
+target = "{2, 0}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{0, 6}";
+type = Anchor;
+},
+{
+horizontal = 1;
+origin = "{0, 6}";
+target = "{0, 3}";
+type = Align;
+options = 4;
+}
+);
+layerId = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+paths = (
+{
+closed = 1;
+nodes = (
+"377 -11 LINE",
+"635 349 LINE",
+"609 349 LINE",
+"375 23 LINE",
+"142 349 LINE",
+"111 349 LINE",
+"371 -11 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"274 334 LINE",
+"274 357 LINE",
+"0 357 LINE",
+"0 334 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"753 334 LINE",
+"753 357 LINE",
+"480 357 LINE",
+"480 334 LINE"
+);
+}
+);
+width = 753;
+}
+);
+leftKerningGroup = v;
+rightKerningGroup = v;
+unicode = 0076;
+},
+{
+color = 0;
+glyphname = w;
+lastChange = "2022-01-28 13:38:36 +0000";
+layers = (
+{
+anchors = (
+{
+name = bottom;
+position = "{486, 0}";
+},
+{
+name = top;
+position = "{486, 357}";
+}
+);
+hints = (
+{
+horizontal = 1;
+origin = "{0, 13}";
+type = Anchor;
+},
+{
+horizontal = 1;
+origin = "{0, 10}";
+target = "{0, 11}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 14}";
+target = "{0, 16}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{0, 14}";
+target = "{0, 6}";
+type = Align;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 16}";
+target = "{0, 3}";
+type = Align;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 11}";
+target = "{0, 1}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{0, 11}";
+target = "{0, 18}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{0, 11}";
+target = "{0, 7}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{0, 10}";
+target = "{0, 0}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{0, 5}";
+type = Anchor;
+},
+{
+horizontal = 1;
+origin = "{0, 5}";
+target = "{0, 15}";
+type = Align;
+options = 4;
+}
+);
+layerId = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+paths = (
+{
+closed = 1;
+nodes = (
+"697 357 LINE",
+"697 334 LINE",
+"818 334 LINE",
+"674 27 LINE",
+"490 349 LINE",
+"484 349 LINE",
+"301 29 LINE",
+"156 334 LINE",
+"278 334 LINE",
+"278 357 LINE",
+"5 357 LINE",
+"5 334 LINE",
+"129 334 LINE",
+"295 -10 LINE",
+"301 -10 LINE",
+"485 311 LINE",
+"670 -10 LINE",
+"676 -10 LINE",
+"843 334 LINE",
+"972 334 LINE",
+"972 357 LINE"
+);
+}
+);
+width = 976;
+}
+);
+leftKerningGroup = v;
+rightKerningGroup = v;
+unicode = 0077;
+},
+{
+color = 0;
+glyphname = x;
+lastChange = "2022-01-28 13:38:36 +0000";
+layers = (
+{
+anchors = (
+{
+name = bottom;
+position = "{421, 0}";
+},
+{
+name = top;
+position = "{424, 357}";
+}
+);
+hints = (
+{
+horizontal = 1;
+origin = "{0, 15}";
+target = "{0, 14}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 9}";
+target = "{0, 10}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 10}";
+target = "{0, 6}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{0, 14}";
+target = "{0, 18}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{0, 19}";
+target = "{0, 5}";
+type = Align;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 2}";
+target = "{0, 3}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 3}";
+target = "{0, 27}";
+type = Align;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 22}";
+target = "{0, 21}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 21}";
+target = "{0, 25}";
+type = Align;
+options = 4;
+}
+);
+layerId = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+paths = (
+{
+closed = 1;
+nodes = (
+"785 334 LINE",
+"785 357 LINE",
+"476 357 LINE",
+"476 334 LINE",
+"637 334 LINE",
+"422 191 LINE",
+"206 334 LINE",
+"364 334 LINE",
+"364 357 LINE",
+"55 357 LINE",
+"55 334 LINE",
+"165 334 LINE",
+"401 179 LINE",
+"165 23 LINE",
+"55 23 LINE",
+"55 0 LINE",
+"364 0 LINE",
+"364 23 LINE",
+"201 23 LINE",
+"418 168 LINE",
+"635 23 LINE",
+"476 23 LINE",
+"476 0 LINE",
+"785 0 LINE",
+"785 23 LINE",
+"676 23 LINE",
+"439 180 LINE",
+"672 334 LINE"
+);
+}
+);
+width = 840;
+}
+);
+leftKerningGroup = x;
+rightKerningGroup = x;
+unicode = 0078;
+},
+{
+color = 0;
+glyphname = y;
+lastChange = "2022-01-28 13:38:36 +0000";
+layers = (
+{
+anchors = (
+{
+name = bottom;
+position = "{381, 0}";
+},
+{
+name = top;
+position = "{381, 357}";
+}
+);
+hints = (
+{
+horizontal = 1;
+origin = "{0, 15}";
+target = "{0, 8}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{2, 2}";
+target = "{2, 3}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{2, 2}";
+target = "{3, 2}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{2, 3}";
+target = "{2, 0}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{2, 3}";
+target = "{3, 3}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{2, 3}";
+target = "{3, 0}";
+type = Align;
+},
+{
+horizontal = 1;
+origin = "{1, 0}";
+target = "{1, 3}";
+type = Align;
+options = 4;
+}
+);
+layerId = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+paths = (
+{
+closed = 1;
+nodes = (
+"277 -180 OFFCURVE",
+"334 -124 OFFCURVE",
+"381 -49 CURVE SMOOTH",
+"631 343 LINE",
+"603 343 LINE",
+"353 -49 LINE SMOOTH",
+"309 -117 OFFCURVE",
+"261 -157 OFFCURVE",
+"191 -157 CURVE SMOOTH",
+"135 -157 OFFCURVE",
+"93 -140 OFFCURVE",
+"43 -116 CURVE",
+"35 -139 LINE",
+"86 -160 OFFCURVE",
+"126 -180 OFFCURVE",
+"190 -180 CURVE SMOOTH"
+);
+},
+{
+closed = 1;
+nodes = (
+"387 -10 LINE",
+"146 349 LINE",
+"118 349 LINE",
+"372 -34 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"278 334 LINE",
+"278 357 LINE",
+"5 357 LINE",
+"5 334 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"752 334 LINE",
+"752 357 LINE",
+"480 357 LINE",
+"480 334 LINE"
+);
+}
+);
+width = 762;
+}
+);
+leftKerningGroup = v;
+rightKerningGroup = v;
+unicode = 0079;
+},
+{
+color = 0;
+glyphname = z;
+lastChange = "2022-01-28 13:38:36 +0000";
+layers = (
+{
+anchors = (
+{
+name = bottom;
+position = "{386, -11}";
+},
+{
+name = top;
+position = "{426, 366}";
+}
+);
+background = {
+paths = (
+{
+closed = 1;
+nodes = (
+"611 258 OFFCURVE",
+"499 227 OFFCURVE",
+"381 190 CURVE SMOOTH",
+"269 155 OFFCURVE",
+"155 116 OFFCURVE",
+"100 1 CURVE",
+"121 -10 LINE",
+"174 96 OFFCURVE",
+"280 136 OFFCURVE",
+"385 170 CURVE SMOOTH",
+"509 209 OFFCURVE",
+"632 240 OFFCURVE",
+"669 358 CURVE",
+"647 366 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"635 -11 OFFCURVE",
+"692 41 OFFCURVE",
+"706 121 CURVE",
+"682 125 LINE",
+"669 47 OFFCURVE",
+"605 13 OFFCURVE",
+"522 13 CURVE SMOOTH",
+"435 13 OFFCURVE",
+"328 52 OFFCURVE",
+"200 105 CURVE",
+"184 90 LINE",
+"315 35 OFFCURVE",
+"424 -11 OFFCURVE",
+"522 -11 CURVE SMOOTH"
+);
+},
+{
+closed = 1;
+nodes = (
+"136 218 LINE",
+"136 344 LINE",
+"352 344 OFFCURVE",
+"470 290 OFFCURVE",
+"585 250 CURVE",
+"594 269 LINE",
+"478 310 OFFCURVE",
+"368 366 OFFCURVE",
+"136 366 CURVE SMOOTH",
+"111 366 LINE",
+"111 218 LINE"
+);
+}
+);
+};
+hints = (
+{
+horizontal = 1;
+origin = "{0, 18}";
+target = "{0, 22}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 38}";
+target = "{0, 2}";
+type = TTStem;
+options = 4;
+},
+{
+horizontal = 1;
+origin = "{0, 31}";
+type = Anchor;
+},
+{
+horizontal = 1;
+origin = "{0, 18}";
+target = "{0, 2}";
+other1 = "{0, 28}";
+type = Interpolate;
+},
+{
+horizontal = 1;
+origin = "{0, 28}";
+target = "{0, 8}";
+type = Align;
+options = 4;
+}
+);
+layerId = "034236B8-3FA8-43DA-9EDA-EFF269A687EC";
+paths = (
+{
+closed = 1;
+nodes = (
+"669 47 OFFCURVE",
+"605 13 OFFCURVE",
+"522 13 CURVE SMOOTH",
+"439 13 OFFCURVE",
+"338 48 OFFCURVE",
+"218 97 CURVE",
+"268 130 OFFCURVE",
+"327 151 OFFCURVE",
+"385 170 CURVE SMOOTH",
+"509 209 OFFCURVE",
+"632 240 OFFCURVE",
+"669 358 CURVE",
+"647 366 LINE",
+"634 326 OFFCURVE",
+"610 297 OFFCURVE",
+"580 274 CURVE",
+"469 314 OFFCURVE",
+"359 366 OFFCURVE",
+"136 366 CURVE SMOOTH",
+"111 366 LINE",
+"111 218 LINE",
+"136 218 LINE",
+"136 344 LINE",
+"336 344 OFFCURVE",
+"451 298 OFFCURVE",
+"559 259 CURVE",
+"509 229 OFFCURVE",
+"446 210 OFFCURVE",
+"381 190 CURVE SMOOTH",
+"269 155 OFFCURVE",
+"155 116 OFFCURVE",
+"100 1 CURVE",
+"121 -10 LINE",
+"141 29 OFFCURVE",
+"168 59 OFFCURVE",
+"199 84 CURVE",
+"323 32 OFFCURVE",
+"428 -11 OFFCURVE",
+"522 -11 CURVE SMOOTH",
+"635 -11 OFFCURVE",
+"692 41 OFFCURVE",
+"706 121 CURVE",
+"682 125 LINE"
+);
+}
+);
+width = 766;
+}
+);
+leftKerningGroup = z;
+rightKerningGroup = z;
+unicode = 007A;
+}
+);
+instances = (
+{
+customParameters = (
+{
+name = "TTFAutohint options";
+value = "--hinting-range-min=14 --hinting-range-max=48 --fallback-stem-width=24 --stem-width-mode=qss";
+}
+);
+instanceInterpolations = {
+"034236B8-3FA8-43DA-9EDA-EFF269A687EC" = 1;
+};
+name = Regular;
+}
+);
+kerning = {
+"034236B8-3FA8-43DA-9EDA-EFF269A687EC" = {
+"@MMK_L_A" = {
+"@MMK_R_A" = -45;
+"@MMK_R_AE" = -75;
+"@MMK_R_H" = -20;
+"@MMK_R_J" = -10;
+"@MMK_R_O" = -25;
+"@MMK_R_S" = -10;
+"@MMK_R_T" = -45;
+"@MMK_R_U" = -60;
+"@MMK_R_V" = -85;
+"@MMK_R_X" = -35;
+"@MMK_R_Z" = -25;
+"@MMK_R_a" = -15;
+"@MMK_R_asterisk" = -70;
+"@MMK_R_at" = -10;
+"@MMK_R_b" = -15;
+"@MMK_R_backslash" = -70;
+"@MMK_R_colon" = -20;
+"@MMK_R_f" = -40;
+"@MMK_R_guillemotleft" = -20;
+"@MMK_R_hyphen" = -20;
+"@MMK_R_n" = -15;
+"@MMK_R_o" = -15;
+"@MMK_R_p" = -15;
+"@MMK_R_paragraph" = -50;
+"@MMK_R_period" = 40;
+"@MMK_R_question" = -20;
+"@MMK_R_questiondown" = 10;
+"@MMK_R_quotedblleft" = -135;
+"@MMK_R_s" = -15;
+"@MMK_R_section" = -20;
+"@MMK_R_slash" = 30;
+"@MMK_R_t" = -35;
+"@MMK_R_u" = -15;
+"@MMK_R_v" = -55;
+"@MMK_R_x" = -35;
+"@MMK_R_z" = -20;
+};
+"@MMK_L_B" = {
+"@MMK_R_AE" = -35;
+"@MMK_R_T" = -20;
+"@MMK_R_U" = -10;
+"@MMK_R_V" = -30;
+"@MMK_R_Z" = -10;
+"@MMK_R_ampersand" = 10;
+"@MMK_R_asterisk" = -15;
+"@MMK_R_backslash" = -15;
+"@MMK_R_hyphen" = 15;
+"@MMK_R_z" = -10;
+};
+"@MMK_L_C" = {
+"@MMK_R_A" = -30;
+"@MMK_R_AE" = -55;
+"@MMK_R_T" = -15;
+"@MMK_R_U" = -10;
+"@MMK_R_V" = -20;
+"@MMK_R_Z" = -15;
+"@MMK_R_a" = -15;
+"@MMK_R_backslash" = 20;
+"@MMK_R_colon" = -10;
+"@MMK_R_hyphen" = 15;
+"@MMK_R_period" = -30;
+"@MMK_R_question" = -10;
+"@MMK_R_v" = 10;
+"@MMK_R_x" = -10;
+"@MMK_R_z" = -25;
+};
+"@MMK_L_E" = {
+"@MMK_R_A" = -15;
+"@MMK_R_AE" = -30;
+"@MMK_R_S" = -10;
+"@MMK_R_T" = -10;
+"@MMK_R_V" = -10;
+"@MMK_R_Z" = -15;
+"@MMK_R_hyphen" = 10;
+"@MMK_R_paragraph" = -15;
+"@MMK_R_v" = -10;
+"@MMK_R_z" = -10;
+};
+"@MMK_L_F" = {
+"@MMK_R_A" = -55;
+"@MMK_R_AE" = -75;
+"@MMK_R_a" = -20;
+"@MMK_R_ampersand" = -35;
+"@MMK_R_asterisk" = 20;
+"@MMK_R_at" = -15;
+"@MMK_R_backslash" = 30;
+"@MMK_R_colon" = -10;
+"@MMK_R_exclam" = 10;
+"@MMK_R_guillemotleft" = -10;
+"@MMK_R_hyphen" = -30;
+"@MMK_R_n" = -10;
+"@MMK_R_o" = -30;
+"@MMK_R_p" = -10;
+"@MMK_R_period" = -70;
+"@MMK_R_questiondown" = -20;
+"@MMK_R_quotedblleft" = 35;
+"@MMK_R_s" = -20;
+"@MMK_R_section" = -10;
+"@MMK_R_t" = -10;
+"@MMK_R_v" = -10;
+"@MMK_R_x" = -25;
+"@MMK_R_z" = -35;
+};
+"@MMK_L_G" = {
+"@MMK_R_a" = 10;
+"@MMK_R_ampersand" = -10;
+"@MMK_R_b" = 10;
+"@MMK_R_backslash" = 30;
+"@MMK_R_braceleft" = 20;
+"@MMK_R_colon" = 10;
+"@MMK_R_exclam" = 10;
+"@MMK_R_f" = 20;
+"@MMK_R_guillemetright" = 15;
+"@MMK_R_guillemotleft" = 30;
+"@MMK_R_hyphen" = 25;
+"@MMK_R_period" = -15;
+"@MMK_R_questiondown" = 10;
+"@MMK_R_quotedblleft" = 10;
+"@MMK_R_t" = 30;
+"@MMK_R_u" = 30;
+"@MMK_R_v" = 40;
+"@MMK_R_x" = -10;
+"@MMK_R_z" = -10;
+};
+"@MMK_L_H" = {
+"@MMK_R_A" = -20;
+"@MMK_R_AE" = -40;
+"@MMK_R_V" = -10;
+"@MMK_R_backslash" = 10;
+"@MMK_R_colon" = -20;
+"@MMK_R_o" = -20;
+"@MMK_R_parenright" = 20;
+"@MMK_R_question" = 10;
+"@MMK_R_z" = -15;
+};
+"@MMK_L_L" = {
+"@MMK_R_AE" = -10;
+"@MMK_R_S" = -20;
+"@MMK_R_T" = -45;
+"@MMK_R_U" = -25;
+"@MMK_R_V" = -75;
+"@MMK_R_X" = -10;
+"@MMK_R_Z" = -25;
+"@MMK_R_a" = -10;
+"@MMK_R_asterisk" = -50;
+"@MMK_R_b" = -20;
+"@MMK_R_backslash" = -45;
+"@MMK_R_hyphen" = 15;
+"@MMK_R_p" = -25;
+"@MMK_R_paragraph" = -40;
+"@MMK_R_parenright" = -10;
+"@MMK_R_question" = -20;
+"@MMK_R_questiondown" = 10;
+"@MMK_R_quotedblleft" = -70;
+"@MMK_R_section" = -10;
+"@MMK_R_t" = -10;
+"@MMK_R_u" = -10;
+"@MMK_R_v" = -30;
+"@MMK_R_x" = -25;
+"@MMK_R_z" = -30;
+};
+"@MMK_L_N" = {
+"@MMK_R_A" = -40;
+"@MMK_R_AE" = -55;
+"@MMK_R_J" = -15;
+"@MMK_R_U" = -20;
+"@MMK_R_V" = -30;
+"@MMK_R_X" = -15;
+"@MMK_R_Z" = -10;
+"@MMK_R_a" = -20;
+"@MMK_R_ampersand" = -15;
+"@MMK_R_asterisk" = 20;
+"@MMK_R_at" = -15;
+"@MMK_R_b" = -15;
+"@MMK_R_backslash" = 40;
+"@MMK_R_colon" = -35;
+"@MMK_R_n" = -10;
+"@MMK_R_o" = -35;
+"@MMK_R_p" = -15;
+"@MMK_R_period" = -50;
+"@MMK_R_quotedblleft" = 35;
+"@MMK_R_s" = -15;
+"@MMK_R_t" = -15;
+"@MMK_R_u" = -15;
+"@MMK_R_underscore" = -60;
+"@MMK_R_v" = -20;
+"@MMK_R_x" = -15;
+"@MMK_R_z" = -35;
+};
+"@MMK_L_O" = {
+"@MMK_R_A" = -25;
+"@MMK_R_AE" = -40;
+"@MMK_R_J" = -10;
+"@MMK_R_U" = -10;
+"@MMK_R_V" = -15;
+"@MMK_R_X" = -10;
+"@MMK_R_Z" = -10;
+"@MMK_R_a" = 10;
+"@MMK_R_ampersand" = 25;
+"@MMK_R_asterisk" = -10;
+"@MMK_R_b" = 10;
+"@MMK_R_guillemotleft" = 10;
+"@MMK_R_hyphen" = 20;
+"@MMK_R_o" = 10;
+"@MMK_R_paragraph" = 15;
+"@MMK_R_parenright" = -10;
+"@MMK_R_period" = -30;
+"@MMK_R_question" = -10;
+"@MMK_R_quotedblleft" = -30;
+"@MMK_R_section" = 15;
+"@MMK_R_three.numr" = -10;
+"@MMK_R_u" = 20;
+"@MMK_R_v" = 15;
+};
+"@MMK_L_P" = {
+"@MMK_R_A" = -30;
+"@MMK_R_AE" = -70;
+"@MMK_R_J" = -10;
+"@MMK_R_O" = 20;
+"@MMK_R_S" = 10;
+"@MMK_R_T" = 10;
+"@MMK_R_V" = 10;
+"@MMK_R_ampersand" = -20;
+"@MMK_R_b" = 20;
+"@MMK_R_backslash" = 10;
+"@MMK_R_exclam" = 20;
+"@MMK_R_paragraph" = 15;
+"@MMK_R_period" = -30;
+"@MMK_R_t" = 20;
+"@MMK_R_u" = 25;
+"@MMK_R_underscore" = -40;
+"@MMK_R_v" = 30;
+};
+"@MMK_L_R" = {
+"@MMK_R_AE" = -25;
+"@MMK_R_J" = -10;
+"@MMK_R_S" = -10;
+"@MMK_R_T" = -35;
+"@MMK_R_U" = -10;
+"@MMK_R_V" = -40;
+"@MMK_R_X" = -10;
+"@MMK_R_a" = 10;
+"@MMK_R_ampersand" = 30;
+"@MMK_R_asterisk" = -30;
+"@MMK_R_at" = 25;
+"@MMK_R_b" = 15;
+"@MMK_R_colon" = 10;
+"@MMK_R_exclam" = 20;
+"@MMK_R_guillemotleft" = 40;
+"@MMK_R_guillemotright" = 20;
+"@MMK_R_hyphen" = 30;
+"@MMK_R_n" = 20;
+"@MMK_R_o" = 10;
+"@MMK_R_period" = 10;
+"@MMK_R_questiondown" = 25;
+"@MMK_R_quotedblleft" = -30;
+"@MMK_R_section" = -10;
+"@MMK_R_slash" = 25;
+"@MMK_R_t" = 15;
+"@MMK_R_u" = 20;
+"@MMK_R_underscore" = 20;
+};
+"@MMK_L_S" = {
+"@MMK_R_A" = -10;
+"@MMK_R_AE" = -15;
+"@MMK_R_J" = 10;
+"@MMK_R_S" = -10;
+"@MMK_R_T" = -10;
+"@MMK_R_U" = -10;
+"@MMK_R_V" = -25;
+"@MMK_R_ampersand" = 15;
+"@MMK_R_at" = 15;
+"@MMK_R_backslash" = 10;
+"@MMK_R_hyphen" = 30;
+"@MMK_R_paragraph" = -10;
+"@MMK_R_period" = -10;
+"@MMK_R_quotedblleft" = -15;
+"@MMK_R_slash" = 10;
+"@MMK_R_v" = 10;
+"@MMK_R_z" = -15;
+};
+"@MMK_L_T" = {
+"@MMK_R_A" = -45;
+"@MMK_R_AE" = -65;
+"@MMK_R_S" = -10;
+"@MMK_R_T" = -10;
+"@MMK_R_a" = -25;
+"@MMK_R_ampersand" = -20;
+"@MMK_R_at" = -20;
+"@MMK_R_colon" = -30;
+"@MMK_R_f" = -15;
+"@MMK_R_guillemotleft" = -20;
+"@MMK_R_hyphen" = -15;
+"@MMK_R_o" = -40;
+"@MMK_R_p" = -10;
+"@MMK_R_period" = -65;
+"@MMK_R_question" = -10;
+"@MMK_R_questiondown" = -20;
+"@MMK_R_s" = -20;
+"@MMK_R_section" = -20;
+"@MMK_R_slash" = -35;
+"@MMK_R_u" = -10;
+"@MMK_R_x" = -15;
+"@MMK_R_z" = -15;
+};
+"@MMK_L_Thorn" = {
+"@MMK_R_O" = 35;
+"@MMK_R_V" = -35;
+"@MMK_R_X" = -30;
+"@MMK_R_b" = 10;
+"@MMK_R_hyphen" = 35;
+"@MMK_R_n" = 10;
+"@MMK_R_o" = 20;
+"@MMK_R_p" = 10;
+"@MMK_R_u" = 40;
+"@MMK_R_v" = 15;
+};
+"@MMK_L_U" = {
+"@MMK_R_A" = -60;
+"@MMK_R_AE" = -85;
+"@MMK_R_J" = -20;
+"@MMK_R_O" = -10;
+"@MMK_R_S" = -10;
+"@MMK_R_U" = -20;
+"@MMK_R_V" = -20;
+"@MMK_R_Z" = -10;
+"@MMK_R_a" = -15;
+"@MMK_R_ampersand" = -15;
+"@MMK_R_asterisk" = 30;
+"@MMK_R_at" = -10;
+"@MMK_R_b" = -15;
+"@MMK_R_backslash" = 50;
+"@MMK_R_colon" = -30;
+"@MMK_R_f" = -10;
+"@MMK_R_hyphen" = -20;
+"@MMK_R_o" = -40;
+"@MMK_R_parenright" = 20;
+"@MMK_R_period" = -30;
+"@MMK_R_s" = -15;
+"@MMK_R_section" = -25;
+"@MMK_R_slash" = -50;
+"@MMK_R_underscore" = -75;
+"@MMK_R_v" = -10;
+"@MMK_R_x" = -25;
+"@MMK_R_z" = -30;
+};
+"@MMK_L_V" = {
+"@MMK_R_A" = -85;
+"@MMK_R_AE" = -105;
+"@MMK_R_H" = -10;
+"@MMK_R_J" = -20;
+"@MMK_R_O" = -15;
+"@MMK_R_S" = -15;
+"@MMK_R_U" = -20;
+"@MMK_R_V" = -50;
+"@MMK_R_X" = -10;
+"@MMK_R_a" = -50;
+"@MMK_R_ampersand" = -60;
+"@MMK_R_asterisk" = 30;
+"@MMK_R_at" = -35;
+"@MMK_R_b" = -25;
+"@MMK_R_backslash" = 60;
+"@MMK_R_braceleft" = -20;
+"@MMK_R_colon" = -50;
+"@MMK_R_exclam" = 20;
+"@MMK_R_f" = -15;
+"@MMK_R_guillemotleft" = -60;
+"@MMK_R_hyphen" = -40;
+"@MMK_R_n" = -35;
+"@MMK_R_o" = -55;
+"@MMK_R_p" = -10;
+"@MMK_R_parenright" = -10;
+"@MMK_R_period" = -75;
+"@MMK_R_question" = 20;
+"@MMK_R_questiondown" = -30;
+"@MMK_R_quotedblleft" = 20;
+"@MMK_R_s" = -55;
+"@MMK_R_section" = -20;
+"@MMK_R_slash" = -65;
+"@MMK_R_u" = -10;
+"@MMK_R_underscore" = -80;
+"@MMK_R_v" = -20;
+"@MMK_R_x" = -35;
+"@MMK_R_z" = -35;
+};
+"@MMK_L_X" = {
+"@MMK_R_A" = -35;
+"@MMK_R_AE" = -75;
+"@MMK_R_U" = -10;
+"@MMK_R_V" = -10;
+"@MMK_R_asterisk" = 10;
+"@MMK_R_backslash" = 10;
+"@MMK_R_guillemotleft" = -10;
+"@MMK_R_hyphen" = -15;
+"@MMK_R_o" = -10;
+"@MMK_R_parenright" = 20;
+"@MMK_R_question" = 20;
+"@MMK_R_questiondown" = 10;
+"@MMK_R_quotedblleft" = 10;
+"@MMK_R_slash" = 10;
+"@MMK_R_u" = -10;
+"@MMK_R_x" = -10;
+"@MMK_R_z" = -15;
+};
+"@MMK_L_Z" = {
+"@MMK_R_A" = -20;
+"@MMK_R_AE" = -40;
+"@MMK_R_H" = -10;
+"@MMK_R_J" = 10;
+"@MMK_R_S" = -10;
+"@MMK_R_T" = -20;
+"@MMK_R_U" = -10;
+"@MMK_R_V" = -15;
+"@MMK_R_Z" = -10;
+"@MMK_R_a" = -10;
+"@MMK_R_b" = -10;
+"@MMK_R_guillemotleft" = 10;
+"@MMK_R_o" = -10;
+"@MMK_R_paragraph" = -40;
+"@MMK_R_question" = -10;
+"@MMK_R_questiondown" = 10;
+"@MMK_R_s" = -10;
+"@MMK_R_section" = -20;
+"@MMK_R_u" = 10;
+"@MMK_R_v" = -10;
+"@MMK_R_z" = -25;
+};
+"@MMK_L_ampersand" = {
+"@MMK_R_A" = -35;
+"@MMK_R_AE" = -55;
+"@MMK_R_J" = -20;
+"@MMK_R_S" = -10;
+"@MMK_R_T" = -30;
+"@MMK_R_U" = -25;
+"@MMK_R_V" = -80;
+"@MMK_R_X" = 10;
+"@MMK_R_Z" = -10;
+"@MMK_R_a" = -15;
+"@MMK_R_b" = -10;
+"@MMK_R_four" = 10;
+"@MMK_R_nine" = -10;
+"@MMK_R_p" = 15;
+"@MMK_R_s" = -10;
+"@MMK_R_seven" = -30;
+"@MMK_R_three" = -10;
+"@MMK_R_two" = -10;
+"@MMK_R_v" = -10;
+"@MMK_R_x" = -10;
+"@MMK_R_z" = -15;
+};
+"@MMK_L_asterisk" = {
+"@MMK_R_A" = -70;
+"@MMK_R_AE" = -120;
+"@MMK_R_J" = -50;
+"@MMK_R_O" = -10;
+"@MMK_R_U" = 30;
+"@MMK_R_V" = 30;
+"@MMK_R_X" = 10;
+"@MMK_R_a" = -10;
+"@MMK_R_b" = 80;
+"@MMK_R_four" = -30;
+"@MMK_R_o" = -20;
+"@MMK_R_s" = -10;
+"@MMK_R_seven" = 20;
+"@MMK_R_u" = 35;
+"@MMK_R_v" = 30;
+"@MMK_R_z" = 10;
+};
+"@MMK_L_at" = {
+"@MMK_R_A" = -40;
+"@MMK_R_AE" = -60;
+"@MMK_R_J" = -10;
+"@MMK_R_S" = -10;
+"@MMK_R_T" = -20;
+"@MMK_R_U" = -20;
+"@MMK_R_V" = -40;
+"@MMK_R_b" = -10;
+"@MMK_R_four" = 10;
+"@MMK_R_seven" = -10;
+"@MMK_R_v" = 20;
+};
+"@MMK_L_backslash" = {
+"@MMK_R_A" = 30;
+"@MMK_R_AE" = 30;
+"@MMK_R_T" = -35;
+"@MMK_R_U" = -20;
+"@MMK_R_V" = -65;
+"@MMK_R_X" = 10;
+"@MMK_R_b" = 20;
+"@MMK_R_four" = 15;
+"@MMK_R_seven" = -20;
+"@MMK_R_two" = 50;
+"@MMK_R_v" = -10;
+"@MMK_R_x" = 10;
+"@MMK_R_z" = 15;
+};
+"@MMK_L_braceleft" = {
+};
+"@MMK_L_braceright" = {
+"@MMK_R_V" = -20;
+"@MMK_R_Z" = -10;
+"@MMK_R_v" = -10;
+};
+"@MMK_L_bracketleft" = {
+};
+"@MMK_L_c" = {
+"@MMK_R_A" = -30;
+"@MMK_R_AE" = -45;
+"@MMK_R_H" = -30;
+"@MMK_R_J" = -15;
+"@MMK_R_S" = -20;
+"@MMK_R_T" = -45;
+"@MMK_R_U" = -35;
+"@MMK_R_V" = -55;
+"@MMK_R_X" = -40;
+"@MMK_R_Z" = -20;
+"@MMK_R_ampersand" = -10;
+"@MMK_R_at" = -10;
+"@MMK_R_backslash" = -20;
+"@MMK_R_braceleft" = -10;
+"@MMK_R_guillemotright" = -10;
+"@MMK_R_period" = -20;
+"@MMK_R_questiondown" = 15;
+"@MMK_R_section" = -10;
+"@MMK_R_two" = -10;
+"@MMK_R_x" = -15;
+"@MMK_R_z" = -20;
+};
+"@MMK_L_colon" = {
+"@MMK_R_A" = -20;
+"@MMK_R_AE" = -20;
+"@MMK_R_O" = -15;
+"@MMK_R_T" = -30;
+"@MMK_R_V" = -50;
+"@MMK_R_Z" = -15;
+"@MMK_R_o" = -10;
+"@MMK_R_two" = 10;
+"@MMK_R_u" = 10;
+"@MMK_R_x" = 10;
+};
+"@MMK_L_e" = {
+"@MMK_R_a" = -10;
+"@MMK_R_asterisk" = -20;
+"@MMK_R_b" = -15;
+"@MMK_R_backslash" = -30;
+"@MMK_R_braceleft" = -10;
+"@MMK_R_h" = -10;
+"@MMK_R_n" = -10;
+"@MMK_R_paragraph" = -10;
+"@MMK_R_parenright" = -15;
+"@MMK_R_period" = -10;
+"@MMK_R_quotedblleft" = -10;
+"@MMK_R_v" = -10;
+"@MMK_R_x" = -15;
+"@MMK_R_z" = -15;
+};
+"@MMK_L_eight" = {
+"@MMK_R_ampersand" = 20;
+"@MMK_R_eight" = -15;
+"@MMK_R_hyphen" = 25;
+"@MMK_R_nine" = -20;
+"@MMK_R_period" = -20;
+"@MMK_R_questiondown" = 10;
+"@MMK_R_quotedblleft" = -15;
+"@MMK_R_three" = -15;
+"@MMK_R_three.numr" = -10;
+"@MMK_R_two" = -15;
+"@MMK_R_zero" = -10;
+};
+"@MMK_L_exclam" = {
+"@MMK_R_J" = 20;
+"@MMK_R_V" = 20;
+"@MMK_R_b" = 30;
+"@MMK_R_nine" = 20;
+"@MMK_R_two" = 20;
+"@MMK_R_u" = 15;
+};
+"@MMK_L_f" = {
+"@MMK_R_A" = -30;
+"@MMK_R_AE" = -55;
+"@MMK_R_J" = -20;
+"@MMK_R_O" = 30;
+"@MMK_R_S" = 10;
+"@MMK_R_T" = 30;
+"@MMK_R_V" = 10;
+"@MMK_R_X" = 20;
+"@MMK_R_Z" = 20;
+"@MMK_R_ampersand" = -10;
+"@MMK_R_asterisk" = 60;
+"@MMK_R_b" = 20;
+"@MMK_R_backslash" = 70;
+"@MMK_R_braceleft" = 30;
+"@MMK_R_guillemotleft" = -10;
+"@MMK_R_hyphen" = -10;
+"@MMK_R_paragraph" = 40;
+"@MMK_R_parenleft" = 10;
+"@MMK_R_parenright" = 70;
+"@MMK_R_period" = -20;
+"@MMK_R_question" = 40;
+"@MMK_R_quotedblleft" = 50;
+};
+"@MMK_L_five" = {
+"@MMK_R_ampersand" = 20;
+"@MMK_R_asterisk" = 10;
+"@MMK_R_at" = 10;
+"@MMK_R_eight" = -15;
+"@MMK_R_hyphen" = 25;
+"@MMK_R_nine" = -15;
+"@MMK_R_o" = -10;
+"@MMK_R_period" = -20;
+"@MMK_R_quotedblleft" = -10;
+"@MMK_R_two" = -15;
+"@MMK_R_zero" = -10;
+};
+"@MMK_L_four" = {
+"@MMK_R_ampersand" = 20;
+"@MMK_R_asterisk" = -10;
+"@MMK_R_at" = 15;
+"@MMK_R_exclam" = 20;
+"@MMK_R_guillemotleft" = 30;
+"@MMK_R_hyphen" = 30;
+"@MMK_R_nine" = -10;
+"@MMK_R_numbersign" = 35;
+"@MMK_R_questiondown" = 30;
+"@MMK_R_quotedblleft" = -10;
+"@MMK_R_three" = -10;
+"@MMK_R_two" = -10;
+};
+"@MMK_L_fraction" = {
+"@MMK_R_four.dnom" = -70;
+"@MMK_R_two.dnom" = -20;
+};
+"@MMK_L_guillemetright" = {
+"@MMK_R_A" = -20;
+"@MMK_R_AE" = -30;
+"@MMK_R_O" = 10;
+"@MMK_R_V" = -60;
+"@MMK_R_X" = -10;
+};
+"@MMK_L_guillemotleft" = {
+"@MMK_R_V" = -40;
+"@MMK_R_X" = -10;
+"@MMK_R_a" = -10;
+"@MMK_R_b" = -10;
+"@MMK_R_four" = 10;
+"@MMK_R_three" = -10;
+"@MMK_R_two" = -10;
+"@MMK_R_v" = -20;
+"@MMK_R_z" = -10;
+};
+"@MMK_L_guillemotright" = {
+"@MMK_R_J" = -30;
+"@MMK_R_O" = 10;
+"@MMK_R_T" = -20;
+"@MMK_R_V" = -20;
+"@MMK_R_X" = -10;
+"@MMK_R_b" = -15;
+"@MMK_R_four" = 30;
+"@MMK_R_o" = 20;
+"@MMK_R_seven" = -15;
+"@MMK_R_v" = -10;
+"@MMK_R_x" = 20;
+"@MMK_R_z" = 10;
+};
+"@MMK_L_hyphen" = {
+"@MMK_R_A" = -20;
+"@MMK_R_AE" = -40;
+"@MMK_R_O" = 20;
+"@MMK_R_S" = 30;
+"@MMK_R_T" = -15;
+"@MMK_R_U" = -20;
+"@MMK_R_V" = -40;
+"@MMK_R_X" = -15;
+"@MMK_R_a" = 30;
+"@MMK_R_eight" = 25;
+"@MMK_R_four" = 50;
+"@MMK_R_knBA" = 15;
+"@MMK_R_knKA" = -20;
+"@MMK_R_knLA" = 10;
+"@MMK_R_knLLA" = 5;
+"@MMK_R_knPA" = 15;
+"@MMK_R_knSHA" = 10;
+"@MMK_R_knTA" = -20;
+"@MMK_R_knvE" = 10;
+"@MMK_R_knvL" = 20;
+"@MMK_R_knvR" = -10;
+"@MMK_R_nine" = 25;
+"@MMK_R_o" = 25;
+"@MMK_R_s" = 15;
+"@MMK_R_two" = -10;
+"@MMK_R_u" = 10;
+"@MMK_R_x" = 10;
+"@MMK_R_z" = 10;
+"@MMK_R_zero" = 40;
+};
+"@MMK_L_j" = {
+"@MMK_R_A" = -40;
+"@MMK_R_AE" = -55;
+"@MMK_R_J" = -20;
+"@MMK_R_O" = -15;
+"@MMK_R_S" = -30;
+"@MMK_R_T" = -30;
+"@MMK_R_V" = -55;
+"@MMK_R_X" = -10;
+"@MMK_R_Z" = -15;
+"@MMK_R_a" = -10;
+"@MMK_R_ampersand" = -20;
+"@MMK_R_asterisk" = -10;
+"@MMK_R_at" = -15;
+"@MMK_R_colon" = -15;
+"@MMK_R_guillemotleft" = -25;
+"@MMK_R_guillemotright" = -10;
+"@MMK_R_o" = -15;
+"@MMK_R_p" = -15;
+"@MMK_R_paragraph" = -20;
+"@MMK_R_period" = -25;
+"@MMK_R_question" = -20;
+"@MMK_R_questiondown" = -50;
+"@MMK_R_quotedblleft" = -40;
+"@MMK_R_s" = -10;
+"@MMK_R_section" = -15;
+"@MMK_R_u" = -15;
+"@MMK_R_v" = -20;
+"@MMK_R_x" = -20;
+"@MMK_R_z" = -20;
+};
+"@MMK_L_k" = {
+"@MMK_R_A" = -30;
+"@MMK_R_AE" = -45;
+"@MMK_R_H" = -30;
+"@MMK_R_J" = -30;
+"@MMK_R_S" = -25;
+"@MMK_R_T" = -40;
+"@MMK_R_U" = -35;
+"@MMK_R_V" = -95;
+"@MMK_R_X" = -30;
+"@MMK_R_Z" = -20;
+"@MMK_R_asterisk" = -30;
+"@MMK_R_backslash" = -30;
+"@MMK_R_braceleft" = -10;
+"@MMK_R_colon" = -20;
+"@MMK_R_guillemotright" = -10;
+"@MMK_R_hyphen" = 20;
+"@MMK_R_paragraph" = -40;
+"@MMK_R_question" = -10;
+"@MMK_R_questiondown" = 20;
+"@MMK_R_quotedblleft" = -20;
+"@MMK_R_slash" = 20;
+"@MMK_R_v" = -10;
+"@MMK_R_x" = -10;
+"@MMK_R_z" = -20;
+};
+"@MMK_L_knBA" = {
+"@MMK_R_asterisk" = -55;
+"@MMK_R_knKA" = -5;
+"@MMK_R_period" = -20;
+"@MMK_R_question" = -30;
+"@MMK_R_quotedbl" = -70;
+"@MMK_R_quotedblleft" = -65;
+"@MMK_R_slash" = -45;
+};
+"@MMK_L_knBI" = {
+"@MMK_R_period" = -25;
+"@MMK_R_quotedbl" = -50;
+"@MMK_R_quotedblleft" = -35;
+"@MMK_R_slash" = -35;
+};
+"@MMK_L_knCA" = {
+"@MMK_R_exclam" = 5;
+"@MMK_R_hyphen" = -40;
+"@MMK_R_knGA" = -10;
+"@MMK_R_knKHA" = -25;
+"@MMK_R_knLA" = 10;
+"@MMK_R_knLLLA" = -10;
+"@MMK_R_knNNA" = -10;
+"@MMK_R_knvE" = -25;
+"@MMK_R_period" = -95;
+"@MMK_R_quotedblleft" = 5;
+"@MMK_R_slash" = -50;
+};
+"@MMK_L_knDA" = {
+"@MMK_R_asterisk" = 5;
+"@MMK_R_colon" = -5;
+"@MMK_R_knRA" = -10;
+"@MMK_R_parenright" = 15;
+"@MMK_R_period" = -20;
+"@MMK_R_slash" = -45;
+};
+"@MMK_L_knDAc2" = {
+"@MMK_R_braceright" = 180;
+"@MMK_R_bracketright" = 150;
+"@MMK_R_knBAc2.following" = 260;
+"@MMK_R_knDAc2.following" = 240;
+"@MMK_R_knKAc2.following" = 220;
+"@MMK_R_knLAc2.following" = 260;
+"@MMK_R_knLLLAc2.following" = 260;
+"@MMK_R_knPAc2.following" = 205;
+"@MMK_R_knTTHAc2.following" = 225;
+"@MMK_R_knmvR.following" = 260;
+"@MMK_R_parenright" = 170;
+"@MMK_R_slash" = 110;
+"@MMK_R_underscore" = 185;
+};
+"@MMK_L_knDAc2.following" = {
+"@MMK_R_asterisk" = -284;
+"@MMK_R_colon" = -197;
+"@MMK_R_exclam" = -205;
+"@MMK_R_hyphen" = -115;
+"@MMK_R_knBA" = -260;
+"@MMK_R_knDA" = -260;
+"@MMK_R_knGA" = -260;
+"@MMK_R_knH" = -260;
+"@MMK_R_knI" = -260;
+"@MMK_R_knKA" = -310;
+"@MMK_R_knKHA" = -260;
+"@MMK_R_knLA" = -260;
+"@MMK_R_knLLA" = -260;
+"@MMK_R_knLLLA" = -260;
+"@MMK_R_knNA" = -260;
+"@MMK_R_knNNA" = -260;
+"@MMK_R_knPA" = -260;
+"@MMK_R_knPA.alt" = -260;
+"@MMK_R_knRA" = -260;
+"@MMK_R_knSHA" = -260;
+"@MMK_R_knTA" = -260;
+"@MMK_R_knYA" = -260;
+"@MMK_R_knvE" = -260;
+"@MMK_R_knvL" = -260;
+"@MMK_R_knvR" = -260;
+"@MMK_R_parenright" = -87;
+"@MMK_R_period" = -195;
+"@MMK_R_question" = -195;
+"@MMK_R_quotedbl" = -250;
+"@MMK_R_quotedblleft" = -185;
+"@MMK_R_slash" = -130;
+"@MMK_R_underscore" = -5;
+};
+"@MMK_L_knDI" = {
+"@MMK_R_knDA" = 0;
+};
+"@MMK_L_knGA" = {
+"@MMK_R_exclam" = 5;
+"@MMK_R_knH" = 5;
+"@MMK_R_knKA" = -10;
+"@MMK_R_knNA" = 5;
+"@MMK_R_knSHA" = 25;
+"@MMK_R_knTA" = 15;
+"@MMK_R_parenright" = 15;
+"@MMK_R_slash" = -15;
+};
+"@MMK_L_knGHA" = {
+"@MMK_R_asterisk" = -30;
+"@MMK_R_colon" = 10;
+"@MMK_R_hyphen" = 20;
+"@MMK_R_knLA" = 35;
+"@MMK_R_knPA" = 5;
+"@MMK_R_knTA" = 15;
+"@MMK_R_knvE" = -15;
+"@MMK_R_parenright" = -30;
+"@MMK_R_period" = -150;
+"@MMK_R_question" = -20;
+"@MMK_R_quotedbl" = -30;
+"@MMK_R_quotedblleft" = -30;
+"@MMK_R_slash" = -70;
+"@MMK_R_underscore" = -180;
+};
+"@MMK_L_knH" = {
+"@MMK_R_asterisk" = 10;
+"@MMK_R_knLA" = -5;
+"@MMK_R_knRA" = -5;
+"@MMK_R_knvL" = -5;
+"@MMK_R_parenright" = 15;
+"@MMK_R_period" = -30;
+"@MMK_R_question" = -10;
+"@MMK_R_slash" = -35;
+};
+"@MMK_L_knJAc2" = {
+"@MMK_R_braceright" = 90;
+"@MMK_R_knBAc2.following" = 163;
+"@MMK_R_knDAc2.following" = 163;
+"@MMK_R_knKAc2.following" = 163;
+"@MMK_R_knLAc2.following" = 163;
+"@MMK_R_knLLLAc2.following" = 163;
+"@MMK_R_knPAc2.following" = 150;
+"@MMK_R_knTTHAc2.following" = 155;
+"@MMK_R_knmvR.following" = 163;
+"@MMK_R_period" = 100;
+"@MMK_R_slash" = 60;
+};
+"@MMK_L_knJAc2.following" = {
+"@MMK_R_bracketright" = -30;
+"@MMK_R_exclam" = -120;
+"@MMK_R_hyphen" = -115;
+"@MMK_R_knBA" = -163;
+"@MMK_R_knDA" = -163;
+"@MMK_R_knGA" = -163;
+"@MMK_R_knH" = -163;
+"@MMK_R_knI" = -163;
+"@MMK_R_knKA" = -340;
+"@MMK_R_knKHA" = -163;
+"@MMK_R_knLA" = -163;
+"@MMK_R_knLLA" = -163;
+"@MMK_R_knLLLA" = -163;
+"@MMK_R_knNA" = -163;
+"@MMK_R_knNNA" = -163;
+"@MMK_R_knPA" = -163;
+"@MMK_R_knPA.alt" = -163;
+"@MMK_R_knRA" = -163;
+"@MMK_R_knSHA" = -163;
+"@MMK_R_knTA" = -163;
+"@MMK_R_knYA" = -163;
+"@MMK_R_knvE" = -163;
+"@MMK_R_knvL" = -163;
+"@MMK_R_knvR" = -163;
+"@MMK_R_question" = -195;
+"@MMK_R_quotedbl" = -240;
+"@MMK_R_quotedblleft" = -280;
+"@MMK_R_slash" = -85;
+};
+"@MMK_L_knKA" = {
+"@MMK_R_asterisk" = 15;
+"@MMK_R_braceright" = 5;
+"@MMK_R_bracketright" = 5;
+"@MMK_R_exclam" = 15;
+"@MMK_R_hyphen" = -20;
+"@MMK_R_knKHA" = -10;
+"@MMK_R_knLA" = 25;
+"@MMK_R_knTA" = 15;
+"@MMK_R_knvE" = -15;
+"@MMK_R_parenright" = 15;
+"@MMK_R_period" = -105;
+"@MMK_R_question" = 10;
+"@MMK_R_quotedbl" = 25;
+"@MMK_R_quotedblleft" = 25;
+"@MMK_R_slash" = -35;
+"@MMK_R_underscore" = -50;
+};
+"@MMK_L_knKAc2" = {
+"@MMK_R_braceright" = 300;
+"@MMK_R_bracketright" = 150;
+"@MMK_R_exclam" = 30;
+"@MMK_R_knBAc2.following" = 306;
+"@MMK_R_knDAc2.following" = 306;
+"@MMK_R_knKAc2.following" = 306;
+"@MMK_R_knKHA" = 50;
+"@MMK_R_knLAc2.following" = 306;
+"@MMK_R_knLLLAc2.following" = 306;
+"@MMK_R_knPAc2.following" = 306;
+"@MMK_R_knSHA" = 25;
+"@MMK_R_knTTHAc2.following" = 306;
+"@MMK_R_knmvR.following" = 306;
+"@MMK_R_knvR" = 15;
+"@MMK_R_parenright" = 125;
+"@MMK_R_period" = 95;
+"@MMK_R_slash" = 100;
+"@MMK_R_underscore" = 216;
+};
+"@MMK_L_knKAc2.following" = {
+"@MMK_R_asterisk" = -348;
+"@MMK_R_bracketright" = -50;
+"@MMK_R_colon" = -215;
+"@MMK_R_exclam" = -245;
+"@MMK_R_hyphen" = -120;
+"@MMK_R_knBA" = -305;
+"@MMK_R_knDA" = -305;
+"@MMK_R_knGA" = -305;
+"@MMK_R_knH" = -305;
+"@MMK_R_knI" = -305;
+"@MMK_R_knKA" = -385;
+"@MMK_R_knKHA" = -250;
+"@MMK_R_knLA" = -305;
+"@MMK_R_knLLA" = -305;
+"@MMK_R_knLLLA" = -305;
+"@MMK_R_knNNA" = -305;
+"@MMK_R_knPA" = -305;
+"@MMK_R_knPA.alt" = -305;
+"@MMK_R_knRA" = -305;
+"@MMK_R_knSHA" = -305;
+"@MMK_R_knTA" = -305;
+"@MMK_R_knYA" = -305;
+"@MMK_R_knvE" = -305;
+"@MMK_R_knvL" = -305;
+"@MMK_R_knvR" = -305;
+"@MMK_R_parenright" = -182;
+"@MMK_R_period" = -170;
+"@MMK_R_question" = -260;
+"@MMK_R_quotedbl" = -250;
+"@MMK_R_quotedblleft" = -215;
+"@MMK_R_slash" = -210;
+};
+"@MMK_L_knLA" = {
+"@MMK_R_knBA" = -5;
+"@MMK_R_knKHA" = -25;
+"@MMK_R_knTA" = 10;
+"@MMK_R_knvE" = -40;
+"@MMK_R_period" = -30;
+"@MMK_R_quotedbl" = -55;
+"@MMK_R_quotedblleft" = -55;
+"@MMK_R_slash" = -30;
+};
+"@MMK_L_knLAc2" = {
+"@MMK_R_braceright" = 150;
+"@MMK_R_bracketright" = 175;
+"@MMK_R_exclam" = -15;
+"@MMK_R_knBAc2.following" = 173;
+"@MMK_R_knDAc2.following" = 173;
+"@MMK_R_knKAc2.following" = 173;
+"@MMK_R_knLAc2.following" = 173;
+"@MMK_R_knLLLAc2.following" = 173;
+"@MMK_R_knPAc2.following" = 125;
+"@MMK_R_knTTHAc2.following" = 173;
+"@MMK_R_knmvR.following" = 173;
+"@MMK_R_parenright" = 120;
+"@MMK_R_slash" = 130;
+"@MMK_R_underscore" = 155;
+};
+"@MMK_L_knLAc2.following" = {
+"@MMK_R_asterisk" = -267;
+"@MMK_R_colon" = -148;
+"@MMK_R_exclam" = -175;
+"@MMK_R_hyphen" = -100;
+"@MMK_R_knBA" = -327;
+"@MMK_R_knDA" = -327;
+"@MMK_R_knGA" = -327;
+"@MMK_R_knH" = -327;
+"@MMK_R_knI" = -327;
+"@MMK_R_knKA" = -330;
+"@MMK_R_knKHA" = -327;
+"@MMK_R_knLA" = -327;
+"@MMK_R_knLLA" = -327;
+"@MMK_R_knLLLA" = -327;
+"@MMK_R_knNA" = -327;
+"@MMK_R_knNNA" = -327;
+"@MMK_R_knPA" = -327;
+"@MMK_R_knPA.alt" = -327;
+"@MMK_R_knRA" = -327;
+"@MMK_R_knSHA" = -327;
+"@MMK_R_knTA" = -327;
+"@MMK_R_knYA" = -327;
+"@MMK_R_knvE" = -327;
+"@MMK_R_knvL" = -327;
+"@MMK_R_knvR" = -327;
+"@MMK_R_parenright" = -55;
+"@MMK_R_period" = -145;
+"@MMK_R_question" = -200;
+"@MMK_R_quotedbl" = -270;
+"@MMK_R_quotedblleft" = -155;
+"@MMK_R_slash" = -70;
+"@MMK_R_underscore" = 15;
+};
+"@MMK_L_knLLA" = {
+"@MMK_R_asterisk" = 10;
+"@MMK_R_hyphen" = -50;
+"@MMK_R_knKA" = -25;
+"@MMK_R_knPA.alt" = -65;
+"@MMK_R_knSHA" = -17;
+"@MMK_R_period" = -160;
+"@MMK_R_quotedbl" = 10;
+"@MMK_R_quotedblleft" = 5;
+"@MMK_R_slash" = -60;
+"@MMK_R_underscore" = -95;
+};
+"@MMK_L_knLLLA" = {
+"@MMK_R_asterisk" = -25;
+"@MMK_R_knNA" = 10;
+"@MMK_R_knSHA" = 25;
+"@MMK_R_period" = -30;
+"@MMK_R_quotedbl" = -55;
+"@MMK_R_quotedblleft" = -35;
+"@MMK_R_slash" = -40;
+};
+"@MMK_L_knLLLAc2" = {
+"@MMK_R_braceright" = 150;
+"@MMK_R_bracketright" = 170;
+"@MMK_R_colon" = 50;
+"@MMK_R_exclam" = 70;
+"@MMK_R_hyphen" = -22;
+"@MMK_R_knBA" = 40;
+"@MMK_R_knBAc2.following" = 195;
+"@MMK_R_knDAc2.following" = 195;
+"@MMK_R_knGA" = 55;
+"@MMK_R_knKAc2.following" = 195;
+"@MMK_R_knKHA" = 100;
+"@MMK_R_knLAc2.following" = 195;
+"@MMK_R_knLLLAc2.following" = 195;
+"@MMK_R_knNA" = 25;
+"@MMK_R_knNNA" = 35;
+"@MMK_R_knPA" = 45;
+"@MMK_R_knPA.alt" = 30;
+"@MMK_R_knPAc2.following" = 195;
+"@MMK_R_knSHA" = 50;
+"@MMK_R_knTA" = 35;
+"@MMK_R_knTTHAc2.following" = 195;
+"@MMK_R_knmvR.following" = 195;
+"@MMK_R_knvR" = 35;
+"@MMK_R_parenright" = 140;
+"@MMK_R_period" = 150;
+"@MMK_R_quotedbl" = -22;
+"@MMK_R_quotedblleft" = -22;
+"@MMK_R_slash" = 135;
+"@MMK_R_underscore" = 170;
+};
+"@MMK_L_knLLLAc2.following" = {
+"@MMK_R_asterisk" = -271;
+"@MMK_R_colon" = -153;
+"@MMK_R_exclam" = -155;
+"@MMK_R_hyphen" = -105;
+"@MMK_R_knBA" = -207;
+"@MMK_R_knDA" = -207;
+"@MMK_R_knGA" = -207;
+"@MMK_R_knH" = -207;
+"@MMK_R_knI" = -207;
+"@MMK_R_knKA" = -250;
+"@MMK_R_knKHA" = -207;
+"@MMK_R_knLA" = -207;
+"@MMK_R_knLLA" = -207;
+"@MMK_R_knLLLA" = -207;
+"@MMK_R_knNA" = -207;
+"@MMK_R_knNNA" = -207;
+"@MMK_R_knPA" = -207;
+"@MMK_R_knPA.alt" = -207;
+"@MMK_R_knRA" = -207;
+"@MMK_R_knSHA" = -207;
+"@MMK_R_knTA" = -207;
+"@MMK_R_knYA" = -207;
+"@MMK_R_knvE" = -207;
+"@MMK_R_knvL" = -207;
+"@MMK_R_knvR" = -207;
+"@MMK_R_parenright" = -65;
+"@MMK_R_period" = -145;
+"@MMK_R_question" = -185;
+"@MMK_R_quotedbl" = -275;
+"@MMK_R_quotedblleft" = -175;
+"@MMK_R_slash" = -70;
+};
+"@MMK_L_knLengthmark" = {
+"@MMK_R_hyphen" = -20;
+"@MMK_R_knKA" = -10;
+"@MMK_R_knLA" = 25;
+"@MMK_R_knPA.alt" = -20;
+"@MMK_R_knSHA" = -5;
+"@MMK_R_knTA" = -10;
+"@MMK_R_knvE" = -15;
+"@MMK_R_period" = -10;
+"@MMK_R_quotedbl" = 10;
+"@MMK_R_slash" = -30;
+};
+"@MMK_L_knPA" = {
+"@MMK_R_asterisk" = 5;
+"@MMK_R_knJHAc2" = 10;
+"@MMK_R_knLA" = -10;
+"@MMK_R_knLLLAc2" = 10;
+"@MMK_R_parenright" = 10;
+"@MMK_R_period" = -25;
+"@MMK_R_slash" = -50;
+};
+"@MMK_L_knPA.alt" = {
+"@MMK_R_knI" = -10;
+"@MMK_R_period" = -20;
+"@MMK_R_question" = -20;
+"@MMK_R_quotedbl" = -80;
+"@MMK_R_quotedblleft" = -100;
+"@MMK_R_slash" = -35;
+};
+"@MMK_L_knPAc2" = {
+"@MMK_R_braceright" = 130;
+"@MMK_R_bracketright" = 140;
+"@MMK_R_exclam" = 35;
+"@MMK_R_knBA" = 20;
+"@MMK_R_knBAc2.following" = 135;
+"@MMK_R_knDAc2.following" = 135;
+"@MMK_R_knGA" = 25;
+"@MMK_R_knKAc2.following" = 115;
+"@MMK_R_knKHA" = 75;
+"@MMK_R_knLAc2.following" = 140;
+"@MMK_R_knLLLAc2.following" = 140;
+"@MMK_R_knNNA" = 20;
+"@MMK_R_knPA" = 30;
+"@MMK_R_knPA.alt" = 25;
+"@MMK_R_knPAc2.following" = 105;
+"@MMK_R_knSHA" = 50;
+"@MMK_R_knTTHAc2.following" = 135;
+"@MMK_R_knmvR.following" = 162;
+"@MMK_R_knvR" = 20;
+"@MMK_R_parenright" = 100;
+"@MMK_R_period" = 100;
+"@MMK_R_slash" = 100;
+"@MMK_R_underscore" = 165;
+};
+"@MMK_L_knPAc2.following" = {
+"@MMK_R_asterisk" = -285;
+"@MMK_R_colon" = -120;
+"@MMK_R_exclam" = -75;
+"@MMK_R_hyphen" = -120;
+"@MMK_R_knBA" = -125;
+"@MMK_R_knDA" = -157;
+"@MMK_R_knGA" = -130;
+"@MMK_R_knH" = -135;
+"@MMK_R_knI" = -215;
+"@MMK_R_knKA" = -237;
+"@MMK_R_knKHA" = -100;
+"@MMK_R_knLA" = -157;
+"@MMK_R_knLLA" = -135;
+"@MMK_R_knLLLA" = -157;
+"@MMK_R_knNA" = -135;
+"@MMK_R_knNNA" = -135;
+"@MMK_R_knPA" = -135;
+"@MMK_R_knPA.alt" = -135;
+"@MMK_R_knRA" = -157;
+"@MMK_R_knSHA" = -125;
+"@MMK_R_knTA" = -135;
+"@MMK_R_knYA" = -150;
+"@MMK_R_knvE" = -135;
+"@MMK_R_knvL" = -220;
+"@MMK_R_knvR" = -115;
+"@MMK_R_parenright" = -50;
+"@MMK_R_period" = -30;
+"@MMK_R_question" = -160;
+"@MMK_R_quotedbl" = -290;
+"@MMK_R_quotedblleft" = -190;
+"@MMK_R_slash" = -50;
+"@MMK_R_underscore" = 25;
+};
+"@MMK_L_knRA" = {
+"@MMK_R_parenright" = 15;
+"@MMK_R_period" = -35;
+"@MMK_R_slash" = -30;
+};
+"@MMK_L_knRRE" = {
+"@MMK_R_hyphen" = -50;
+"@MMK_R_knGA" = -15;
+"@MMK_R_knKA" = -60;
+"@MMK_R_knLLA" = 25;
+"@MMK_R_knPA.alt" = -100;
+"@MMK_R_knSHA" = -10;
+"@MMK_R_knvE" = -55;
+"@MMK_R_knvL" = -10;
+"@MMK_R_period" = -121;
+"@MMK_R_quotedblleft" = 25;
+};
+"@MMK_L_knSHA" = {
+"@MMK_R_asterisk" = 5;
+"@MMK_R_parenright" = 15;
+"@MMK_R_period" = -45;
+"@MMK_R_quotedbl" = -90;
+"@MMK_R_quotedblleft" = 10;
+"@MMK_R_slash" = -50;
+};
+"@MMK_L_knTA" = {
+"@MMK_R_knKA" = -20;
+"@MMK_R_knLA" = -5;
+"@MMK_R_knNNA" = -5;
+"@MMK_R_knTA" = 15;
+"@MMK_R_parenright" = 15;
+"@MMK_R_period" = -20;
+"@MMK_R_slash" = -45;
+"@MMK_R_underscore" = -15;
+};
+"@MMK_L_knVU" = {
+"@MMK_R_knBAc2" = 320;
+"@MMK_R_knDAc2" = 200;
+"@MMK_R_knJHAc2" = 320;
+"@MMK_R_knKAc2" = 100;
+"@MMK_R_knLAc2" = 350;
+"@MMK_R_knLLLAc2" = 325;
+"@MMK_R_knPAc2" = 125;
+"@MMK_R_question" = -20;
+};
+"@MMK_L_knVirama" = {
+"@MMK_R_exclam" = 50;
+"@MMK_R_knBA" = -20;
+"@MMK_R_knH" = -5;
+"@MMK_R_knI" = 5;
+"@MMK_R_knKHA" = -30;
+"@MMK_R_knLA" = 7;
+"@MMK_R_knLLA" = 25;
+"@MMK_R_knLLLA" = -15;
+"@MMK_R_knNNA" = -15;
+"@MMK_R_knPA" = 10;
+"@MMK_R_knTA" = 20;
+"@MMK_R_knYA" = -10;
+"@MMK_R_knvE" = -55;
+"@MMK_R_parenright" = 25;
+"@MMK_R_period" = -130;
+"@MMK_R_question" = 35;
+"@MMK_R_quotedbl" = 40;
+"@MMK_R_quotedblleft" = 50;
+"@MMK_R_slash" = -30;
+};
+"@MMK_L_knZero" = {
+"@MMK_R_numbersign" = -20;
+"@MMK_R_parenright" = -5;
+"@MMK_R_period" = -20;
+"@MMK_R_quotedbl" = -40;
+"@MMK_R_quotedblleft" = -20;
+"@MMK_R_slash" = -30;
+};
+"@MMK_L_knmAA" = {
+"@MMK_R_period" = -30;
+"@MMK_R_quotedbl" = -55;
+"@MMK_R_quotedblleft" = -40;
+"@MMK_R_slash" = -60;
+};
+"@MMK_L_knmAU" = {
+"@MMK_R_hyphen" = -10;
+"@MMK_R_knLA" = 15;
+"@MMK_R_knLLA" = 20;
+"@MMK_R_knPA.alt" = -50;
+"@MMK_R_knSHA" = -15;
+"@MMK_R_knTA" = 10;
+"@MMK_R_knvE" = -40;
+"@MMK_R_period" = -155;
+"@MMK_R_slash" = -55;
+};
+"@MMK_L_knmU" = {
+"@MMK_R_asterisk" = -45;
+"@MMK_R_exclam" = -10;
+"@MMK_R_knKA" = -5;
+"@MMK_R_knvL" = -15;
+"@MMK_R_period" = -25;
+"@MMK_R_question" = -30;
+"@MMK_R_quotedbl" = -55;
+"@MMK_R_quotedblleft" = -55;
+"@MMK_R_slash" = -40;
+"@MMK_R_underscore" = -40;
+};
+"@MMK_L_knmUU" = {
+"@MMK_R_asterisk" = -55;
+"@MMK_R_period" = -20;
+"@MMK_R_question" = -45;
+"@MMK_R_quotedbl" = -65;
+"@MMK_R_quotedblleft" = -60;
+"@MMK_R_slash" = -55;
+};
+"@MMK_L_knvE" = {
+"@MMK_R_period" = -30;
+"@MMK_R_question" = -25;
+"@MMK_R_quotedbl" = -70;
+"@MMK_R_quotedblleft" = -70;
+"@MMK_R_slash" = -40;
+};
+"@MMK_L_knvO" = {
+"@MMK_R_asterisk" = -55;
+"@MMK_R_colon" = -5;
+"@MMK_R_knvL" = -15;
+"@MMK_R_period" = -20;
+"@MMK_R_question" = -20;
+"@MMK_R_quotedbl" = -50;
+"@MMK_R_quotedblleft" = -80;
+"@MMK_R_slash" = -50;
+};
+"@MMK_L_l" = {
+"@MMK_R_A" = -40;
+"@MMK_R_AE" = -55;
+"@MMK_R_J" = -20;
+"@MMK_R_O" = -10;
+"@MMK_R_S" = -25;
+"@MMK_R_T" = -35;
+"@MMK_R_U" = -15;
+"@MMK_R_V" = -60;
+"@MMK_R_X" = -25;
+"@MMK_R_Z" = -15;
+"@MMK_R_asterisk" = -15;
+"@MMK_R_backslash" = -30;
+"@MMK_R_n" = -10;
+"@MMK_R_o" = -15;
+"@MMK_R_p" = -15;
+"@MMK_R_paragraph" = -25;
+"@MMK_R_period" = -10;
+"@MMK_R_question" = -40;
+"@MMK_R_quotedblleft" = -20;
+"@MMK_R_s" = -15;
+"@MMK_R_section" = -10;
+"@MMK_R_t" = -10;
+"@MMK_R_v" = -20;
+"@MMK_R_x" = -25;
+"@MMK_R_z" = -30;
+};
+"@MMK_L_n" = {
+"@MMK_R_A" = -20;
+"@MMK_R_AE" = -40;
+"@MMK_R_H" = -35;
+"@MMK_R_J" = -15;
+"@MMK_R_S" = -15;
+"@MMK_R_T" = -55;
+"@MMK_R_U" = -50;
+"@MMK_R_V" = -100;
+"@MMK_R_X" = -65;
+"@MMK_R_Z" = -15;
+"@MMK_R_asterisk" = -55;
+"@MMK_R_b" = -10;
+"@MMK_R_backslash" = -60;
+"@MMK_R_guillemotright" = 20;
+"@MMK_R_h" = -15;
+"@MMK_R_o" = -10;
+"@MMK_R_p" = -10;
+"@MMK_R_paragraph" = -20;
+"@MMK_R_period" = 25;
+"@MMK_R_question" = -20;
+"@MMK_R_quotedblleft" = -70;
+"@MMK_R_slash" = 40;
+"@MMK_R_v" = -50;
+"@MMK_R_x" = -50;
+"@MMK_R_z" = -15;
+};
+"@MMK_L_numbersign" = {
+"@MMK_R_knBA" = -5;
+"@MMK_R_knLLA" = 25;
+"@MMK_R_knvE" = -35;
+"@MMK_R_seven" = 20;
+};
+"@MMK_L_o" = {
+"@MMK_R_A" = -15;
+"@MMK_R_AE" = -25;
+"@MMK_R_H" = -20;
+"@MMK_R_S" = -15;
+"@MMK_R_T" = -40;
+"@MMK_R_U" = -30;
+"@MMK_R_V" = -55;
+"@MMK_R_X" = -10;
+"@MMK_R_Z" = -20;
+"@MMK_R_asterisk" = -20;
+"@MMK_R_b" = -10;
+"@MMK_R_backslash" = -30;
+"@MMK_R_colon" = -10;
+"@MMK_R_guillemotleft" = 20;
+"@MMK_R_guillemotright" = 15;
+"@MMK_R_hyphen" = 25;
+"@MMK_R_parenright" = -10;
+"@MMK_R_period" = -15;
+"@MMK_R_question" = -10;
+"@MMK_R_quotedblleft" = -30;
+"@MMK_R_underscore" = -40;
+"@MMK_R_x" = -10;
+"@MMK_R_z" = -15;
+};
+"@MMK_L_one" = {
+"@MMK_R_colon" = -10;
+"@MMK_R_currency" = -10;
+"@MMK_R_percent" = -10;
+"@MMK_R_quotedblleft" = -35;
+"@MMK_R_seven" = -10;
+"@MMK_R_yen" = -10;
+};
+"@MMK_L_one.numr" = {
+"@MMK_R_five" = 10;
+"@MMK_R_four" = 40;
+"@MMK_R_fraction" = 30;
+"@MMK_R_three" = 25;
+"@MMK_R_two" = 25;
+"@MMK_R_zero" = 10;
+};
+"@MMK_L_paragraph" = {
+"@MMK_R_two" = 10;
+"@MMK_R_z" = -15;
+};
+"@MMK_L_parenleft" = {
+"@MMK_R_J" = -20;
+"@MMK_R_O" = -10;
+"@MMK_R_U" = 20;
+"@MMK_R_V" = -10;
+"@MMK_R_X" = 20;
+"@MMK_R_b" = 30;
+"@MMK_R_four" = -10;
+"@MMK_R_knLA" = -15;
+"@MMK_R_knLLA" = -10;
+"@MMK_R_knPA.alt" = -20;
+"@MMK_R_knTA" = -10;
+"@MMK_R_knZero" = -5;
+"@MMK_R_knvE" = -7;
+"@MMK_R_n" = 10;
+"@MMK_R_o" = -10;
+"@MMK_R_v" = -10;
+"@MMK_R_zero" = -15;
+};
+"@MMK_L_percent" = {
+"@MMK_R_seven" = -10;
+};
+"@MMK_L_period" = {
+"@MMK_R_A" = 40;
+"@MMK_R_AE" = 40;
+"@MMK_R_J" = 20;
+"@MMK_R_O" = -30;
+"@MMK_R_S" = -10;
+"@MMK_R_T" = -65;
+"@MMK_R_U" = -30;
+"@MMK_R_V" = -75;
+"@MMK_R_X" = 10;
+"@MMK_R_Z" = -10;
+"@MMK_R_a" = -35;
+"@MMK_R_b" = -50;
+"@MMK_R_eight" = -20;
+"@MMK_R_knDA" = -20;
+"@MMK_R_knH" = -30;
+"@MMK_R_knKA" = -105;
+"@MMK_R_knKHA" = 15;
+"@MMK_R_knLA" = -35;
+"@MMK_R_knLLA" = -115;
+"@MMK_R_knLLLA" = -30;
+"@MMK_R_knNA" = -15;
+"@MMK_R_knPA" = -10;
+"@MMK_R_knRA" = -35;
+"@MMK_R_knSHA" = 10;
+"@MMK_R_knYA" = -30;
+"@MMK_R_knZero" = -20;
+"@MMK_R_knvL" = -50;
+"@MMK_R_nine" = -15;
+"@MMK_R_o" = -15;
+"@MMK_R_quotedblleft" = -40;
+"@MMK_R_seven" = -40;
+"@MMK_R_two" = 20;
+"@MMK_R_u" = -45;
+"@MMK_R_v" = -65;
+"@MMK_R_z" = -30;
+"@MMK_R_zero" = -35;
+};
+"@MMK_L_q" = {
+"@MMK_R_A" = -45;
+"@MMK_R_AE" = -55;
+"@MMK_R_J" = -25;
+"@MMK_R_O" = -15;
+"@MMK_R_S" = -20;
+"@MMK_R_T" = -40;
+"@MMK_R_V" = -85;
+"@MMK_R_X" = -40;
+"@MMK_R_Z" = -25;
+"@MMK_R_asterisk" = -10;
+"@MMK_R_b" = -10;
+"@MMK_R_braceleft" = 20;
+"@MMK_R_guillemotright" = 10;
+"@MMK_R_h" = -10;
+"@MMK_R_paragraph" = -10;
+"@MMK_R_parenright" = 20;
+"@MMK_R_period" = -10;
+"@MMK_R_question" = 10;
+"@MMK_R_quotedblleft" = -30;
+"@MMK_R_s" = -10;
+"@MMK_R_slash" = 20;
+"@MMK_R_u" = -10;
+"@MMK_R_underscore" = 50;
+"@MMK_R_v" = -15;
+"@MMK_R_z" = -15;
+};
+"@MMK_L_question" = {
+"@MMK_R_A" = -40;
+"@MMK_R_AE" = -60;
+"@MMK_R_J" = -20;
+"@MMK_R_a" = -10;
+"@MMK_R_b" = 10;
+"@MMK_R_o" = -10;
+"@MMK_R_seven" = 20;
+"@MMK_R_three" = 10;
+"@MMK_R_u" = 30;
+"@MMK_R_v" = 20;
+};
+"@MMK_L_questiondown" = {
+"@MMK_R_A" = 30;
+"@MMK_R_AE" = 20;
+"@MMK_R_J" = -10;
+"@MMK_R_O" = -10;
+"@MMK_R_S" = -10;
+"@MMK_R_T" = -30;
+"@MMK_R_V" = -40;
+"@MMK_R_X" = 15;
+"@MMK_R_Z" = -10;
+"@MMK_R_a" = -15;
+"@MMK_R_o" = -15;
+"@MMK_R_s" = -10;
+"@MMK_R_z" = -15;
+};
+"@MMK_L_quotedbl" = {
+"@MMK_R_knBA" = -70;
+"@MMK_R_knDA" = -25;
+"@MMK_R_knGA" = -15;
+"@MMK_R_knH" = -5;
+"@MMK_R_knKA" = -15;
+"@MMK_R_knKHA" = -110;
+"@MMK_R_knLA" = -45;
+"@MMK_R_knLLLA" = -60;
+"@MMK_R_knNNA" = -40;
+"@MMK_R_knPA.alt" = -170;
+"@MMK_R_knRA" = -25;
+"@MMK_R_knSHA" = -20;
+"@MMK_R_knYA" = -60;
+"@MMK_R_knZero" = -40;
+"@MMK_R_knvE" = -105;
+"@MMK_R_knvL" = -35;
+"@MMK_R_knvR" = -25;
+};
+"@MMK_L_quotedblleft" = {
+"@MMK_R_A" = -135;
+"@MMK_R_AE" = -150;
+"@MMK_R_J" = -60;
+"@MMK_R_O" = -30;
+"@MMK_R_S" = -20;
+"@MMK_R_U" = 35;
+"@MMK_R_V" = 10;
+"@MMK_R_X" = 10;
+"@MMK_R_Z" = -20;
+"@MMK_R_a" = -15;
+"@MMK_R_b" = 110;
+"@MMK_R_eight" = -15;
+"@MMK_R_four" = -25;
+"@MMK_R_knBA" = -50;
+"@MMK_R_knGA" = -10;
+"@MMK_R_knKHA" = -80;
+"@MMK_R_knLA" = -45;
+"@MMK_R_knLLA" = -10;
+"@MMK_R_knLLLA" = -20;
+"@MMK_R_knNNA" = -35;
+"@MMK_R_knPA.alt" = -80;
+"@MMK_R_knRA" = -7;
+"@MMK_R_knTA" = 10;
+"@MMK_R_knYA" = -55;
+"@MMK_R_knZero" = -20;
+"@MMK_R_knvE" = -80;
+"@MMK_R_knvL" = -35;
+"@MMK_R_knvR" = -15;
+"@MMK_R_o" = -30;
+"@MMK_R_period" = -40;
+"@MMK_R_s" = -20;
+"@MMK_R_seven" = 15;
+"@MMK_R_three" = -10;
+"@MMK_R_u" = 40;
+"@MMK_R_v" = 50;
+"@MMK_R_x" = 10;
+"@MMK_R_zero" = -30;
+};
+"@MMK_L_r" = {
+"@MMK_R_A" = -45;
+"@MMK_R_AE" = -60;
+"@MMK_R_H" = -10;
+"@MMK_R_J" = -35;
+"@MMK_R_S" = -15;
+"@MMK_R_T" = -15;
+"@MMK_R_U" = -15;
+"@MMK_R_V" = -35;
+"@MMK_R_X" = -25;
+"@MMK_R_Z" = -10;
+"@MMK_R_ampersand" = -15;
+"@MMK_R_backslash" = -10;
+"@MMK_R_guillemotright" = -10;
+"@MMK_R_o" = -30;
+"@MMK_R_parenright" = -20;
+"@MMK_R_period" = -35;
+"@MMK_R_x" = -10;
+"@MMK_R_z" = -15;
+};
+"@MMK_L_s" = {
+"@MMK_R_A" = -25;
+"@MMK_R_AE" = -40;
+"@MMK_R_H" = -25;
+"@MMK_R_J" = -15;
+"@MMK_R_S" = -10;
+"@MMK_R_T" = -35;
+"@MMK_R_U" = -45;
+"@MMK_R_V" = -65;
+"@MMK_R_X" = -30;
+"@MMK_R_Z" = -35;
+"@MMK_R_ampersand" = -10;
+"@MMK_R_b" = -10;
+"@MMK_R_backslash" = -20;
+"@MMK_R_hyphen" = 10;
+"@MMK_R_parenright" = -10;
+"@MMK_R_questiondown" = 10;
+"@MMK_R_v" = -10;
+"@MMK_R_x" = -15;
+"@MMK_R_z" = -15;
+};
+"@MMK_L_section" = {
+"@MMK_R_A" = -10;
+"@MMK_R_AE" = -15;
+"@MMK_R_T" = -30;
+"@MMK_R_U" = -30;
+"@MMK_R_V" = -40;
+"@MMK_R_a" = -10;
+"@MMK_R_v" = -15;
+"@MMK_R_z" = -10;
+};
+"@MMK_L_seven" = {
+"@MMK_R_ampersand" = -30;
+"@MMK_R_asterisk" = 40;
+"@MMK_R_at" = -20;
+"@MMK_R_backslash" = 25;
+"@MMK_R_colon" = -15;
+"@MMK_R_dollar" = -20;
+"@MMK_R_eight" = -20;
+"@MMK_R_four" = -25;
+"@MMK_R_guillemotleft" = -10;
+"@MMK_R_hyphen" = -15;
+"@MMK_R_o" = -20;
+"@MMK_R_one" = -10;
+"@MMK_R_one.numr" = 10;
+"@MMK_R_paragraph" = 15;
+"@MMK_R_parenright" = -15;
+"@MMK_R_period" = -75;
+"@MMK_R_questiondown" = -30;
+"@MMK_R_quotedblleft" = 40;
+"@MMK_R_section" = -10;
+"@MMK_R_slash" = -20;
+"@MMK_R_sterling" = -20;
+"@MMK_R_three.numr" = 10;
+"@MMK_R_two" = -15;
+"@MMK_R_underscore" = -40;
+"@MMK_R_yen" = 40;
+"@MMK_R_zero" = -10;
+};
+"@MMK_L_six" = {
+"@MMK_R_ampersand" = 20;
+"@MMK_R_eight" = -10;
+"@MMK_R_exclam" = 20;
+"@MMK_R_hyphen" = 25;
+"@MMK_R_nine" = -15;
+"@MMK_R_period" = -15;
+"@MMK_R_questiondown" = 20;
+"@MMK_R_quotedblleft" = -10;
+"@MMK_R_three" = -10;
+"@MMK_R_two" = -10;
+};
+"@MMK_L_slash" = {
+"@MMK_R_A" = -70;
+"@MMK_R_AE" = -85;
+"@MMK_R_U" = 50;
+"@MMK_R_V" = 60;
+"@MMK_R_a" = -40;
+"@MMK_R_four" = -20;
+"@MMK_R_knBA" = -60;
+"@MMK_R_knDA" = -55;
+"@MMK_R_knGA" = -30;
+"@MMK_R_knH" = -70;
+"@MMK_R_knKA" = -30;
+"@MMK_R_knKHA" = -85;
+"@MMK_R_knLA" = -60;
+"@MMK_R_knLLA" = -10;
+"@MMK_R_knLLLA" = -70;
+"@MMK_R_knNA" = -55;
+"@MMK_R_knNNA" = -80;
+"@MMK_R_knPA" = -50;
+"@MMK_R_knPA.alt" = -100;
+"@MMK_R_knRA" = -50;
+"@MMK_R_knSHA" = -35;
+"@MMK_R_knTA" = -50;
+"@MMK_R_knYA" = -100;
+"@MMK_R_knZero" = -65;
+"@MMK_R_knvE" = -110;
+"@MMK_R_knvL" = -60;
+"@MMK_R_knvR" = -75;
+"@MMK_R_seven" = 10;
+"@MMK_R_slash" = -150;
+"@MMK_R_v" = 15;
+};
+"@MMK_L_sterling" = {
+"@MMK_R_eight" = -10;
+"@MMK_R_seven" = 10;
+"@MMK_R_zero" = -10;
+};
+"@MMK_L_t" = {
+"@MMK_R_A" = -30;
+"@MMK_R_AE" = -40;
+"@MMK_R_H" = -20;
+"@MMK_R_O" = -15;
+"@MMK_R_S" = -10;
+"@MMK_R_T" = -45;
+"@MMK_R_U" = -20;
+"@MMK_R_V" = -40;
+"@MMK_R_X" = -20;
+"@MMK_R_Z" = -20;
+"@MMK_R_a" = -10;
+"@MMK_R_asterisk" = -20;
+"@MMK_R_backslash" = -20;
+"@MMK_R_braceleft" = -10;
+"@MMK_R_guillemotleft" = -15;
+"@MMK_R_hyphen" = -10;
+"@MMK_R_o" = -10;
+"@MMK_R_p" = -10;
+"@MMK_R_paragraph" = -20;
+"@MMK_R_parenright" = -10;
+"@MMK_R_period" = -20;
+"@MMK_R_quotedblleft" = -30;
+"@MMK_R_section" = -20;
+"@MMK_R_v" = -20;
+"@MMK_R_x" = -15;
+"@MMK_R_z" = -10;
+};
+"@MMK_L_two" = {
+"@MMK_R_ampersand" = -10;
+"@MMK_R_asterisk" = -10;
+"@MMK_R_dollar" = -20;
+"@MMK_R_eight" = -20;
+"@MMK_R_guillemotleft" = 20;
+"@MMK_R_hyphen" = 20;
+"@MMK_R_nine" = -25;
+"@MMK_R_o" = -10;
+"@MMK_R_parenright" = -10;
+"@MMK_R_question" = -15;
+"@MMK_R_quotedblleft" = -10;
+"@MMK_R_sterling" = -20;
+"@MMK_R_three" = -15;
+"@MMK_R_two" = -10;
+"@MMK_R_zero" = -10;
+};
+"@MMK_L_u" = {
+"@MMK_R_A" = -40;
+"@MMK_R_AE" = -55;
+"@MMK_R_J" = -20;
+"@MMK_R_O" = -10;
+"@MMK_R_S" = -25;
+"@MMK_R_T" = -55;
+"@MMK_R_U" = -15;
+"@MMK_R_V" = -90;
+"@MMK_R_X" = -25;
+"@MMK_R_Z" = -25;
+"@MMK_R_asterisk" = -25;
+"@MMK_R_b" = -15;
+"@MMK_R_backslash" = -50;
+"@MMK_R_n" = -10;
+"@MMK_R_o" = -15;
+"@MMK_R_p" = -15;
+"@MMK_R_paragraph" = -25;
+"@MMK_R_period" = -25;
+"@MMK_R_quotedblleft" = -40;
+"@MMK_R_s" = -15;
+"@MMK_R_section" = -10;
+"@MMK_R_t" = -10;
+"@MMK_R_v" = -20;
+"@MMK_R_x" = -25;
+"@MMK_R_z" = -30;
+};
+"@MMK_L_underscore" = {
+"@MMK_R_U" = -75;
+"@MMK_R_V" = -80;
+"@MMK_R_a" = -20;
+"@MMK_R_four" = -40;
+"@MMK_R_knKA" = -50;
+"@MMK_R_knLLA" = -40;
+"@MMK_R_knvL" = -75;
+"@MMK_R_o" = -40;
+"@MMK_R_seven" = -40;
+"@MMK_R_two" = 20;
+"@MMK_R_u" = -60;
+};
+"@MMK_L_v" = {
+"@MMK_R_A" = -55;
+"@MMK_R_AE" = -70;
+"@MMK_R_J" = -15;
+"@MMK_R_O" = 15;
+"@MMK_R_U" = -10;
+"@MMK_R_V" = -20;
+"@MMK_R_X" = -25;
+"@MMK_R_ampersand" = -10;
+"@MMK_R_asterisk" = 30;
+"@MMK_R_backslash" = 15;
+"@MMK_R_guillemotright" = 20;
+"@MMK_R_h" = -10;
+"@MMK_R_p" = -15;
+"@MMK_R_paragraph" = 50;
+"@MMK_R_parenright" = -10;
+"@MMK_R_period" = -55;
+"@MMK_R_questiondown" = -10;
+"@MMK_R_quotedblleft" = 50;
+"@MMK_R_v" = -10;
+"@MMK_R_z" = 10;
+};
+"@MMK_L_x" = {
+"@MMK_R_A" = -35;
+"@MMK_R_AE" = -50;
+"@MMK_R_H" = -10;
+"@MMK_R_J" = -15;
+"@MMK_R_T" = -15;
+"@MMK_R_U" = -25;
+"@MMK_R_V" = -35;
+"@MMK_R_asterisk" = 50;
+"@MMK_R_at" = 10;
+"@MMK_R_hyphen" = 10;
+"@MMK_R_p" = 10;
+"@MMK_R_paragraph" = 10;
+"@MMK_R_questiondown" = 15;
+"@MMK_R_quotedblleft" = 30;
+"@MMK_R_t" = -10;
+"@MMK_R_v" = -20;
+"@MMK_R_x" = -10;
+};
+"@MMK_L_yen" = {
+"@MMK_R_seven" = 20;
+};
+"@MMK_L_z" = {
+"@MMK_R_A" = -30;
+"@MMK_R_AE" = -40;
+"@MMK_R_H" = -20;
+"@MMK_R_J" = -10;
+"@MMK_R_S" = -10;
+"@MMK_R_T" = -35;
+"@MMK_R_U" = -25;
+"@MMK_R_V" = -80;
+"@MMK_R_X" = -30;
+"@MMK_R_Z" = -40;
+"@MMK_R_ampersand" = 10;
+"@MMK_R_b" = -10;
+"@MMK_R_backslash" = -30;
+"@MMK_R_braceleft" = -15;
+"@MMK_R_guillemotleft" = 10;
+"@MMK_R_hyphen" = 25;
+"@MMK_R_paragraph" = -10;
+"@MMK_R_s" = -15;
+"@MMK_R_v" = -15;
+"@MMK_R_x" = -10;
+"@MMK_R_z" = -10;
+};
+"@MMK_L_zero" = {
+"@MMK_R_ampersand" = 15;
+"@MMK_R_eight" = -10;
+"@MMK_R_hyphen" = 40;
+"@MMK_R_parenright" = -15;
+"@MMK_R_period" = -35;
+"@MMK_R_quotedblleft" = -30;
+"@MMK_R_seven" = -10;
+"@MMK_R_three.numr" = -10;
+"@MMK_R_two" = -10;
+};
+};
+};
+manufacturer = "Dunwich Type Founders";
+manufacturerURL = "http://www.dunwichtype.com";
+unitsPerEm = 1000;
+userData = {
+GSDimensionPlugin.Dimensions = {
+"034236B8-3FA8-43DA-9EDA-EFF269A687EC" = {
+HV = " ";
+};
+};
+};
+versionMajor = 1;
+versionMinor = 402;
+}
diff --git a/tests/data/GlyphsUnitTestSans3.glyphspackage/fontinfo.plist b/tests/data/GlyphsUnitTestSans3.glyphspackage/fontinfo.plist
new file mode 100644
index 0000000..03fdd7a
--- /dev/null
+++ b/tests/data/GlyphsUnitTestSans3.glyphspackage/fontinfo.plist
@@ -0,0 +1,1540 @@
+{
+.appVersion = "3039";
+.formatVersion = 3;
+axes = (
+{
+name = Weight;
+tag = wght;
+}
+);
+classes = (
+{
+code = A;
+name = c2sc_source;
+},
+{
+code = a.sc;
+name = c2sc_target;
+},
+{
+code = "";
+name = numbers;
+},
+{
+code = a;
+name = smcp_source;
+},
+{
+code = a.sc;
+name = smcp_target;
+}
+);
+date = "2015-06-08 08:53:00 +0000";
+familyName = "Glyphs Unit Test Sans";
+featurePrefixes = (
+{
+code = "# Dancing Shoes 0.1.4 OpenType feature code generator by Yanone, Copyright 2009
+# Code generated for AFDKO version 2.5
+
+
+languagesystem DFLT dflt; # Default, Default
+languagesystem latn dflt; # Latin, Default
+
+
+
+
+";
+name = Languagesystems;
+}
+);
+features = (
+{
+automatic = 1;
+code = "feature c2sc;
+feature smcp;
+";
+tag = aalt;
+},
+{
+code = "# Small Capitals From Capitals
+
+    sub @c2sc_source by @c2sc_target; ";
+tag = c2sc;
+},
+{
+code = "# Small Capitals
+
+    sub @smcp_source by @smcp_target; ";
+tag = smcp;
+}
+);
+fontMaster = (
+{
+axesValues = (
+17
+);
+customParameters = (
+{
+name = TTFStems;
+value = (
+{
+horizontal = 1;
+name = Thin;
+width = 16;
+},
+{
+horizontal = 1;
+name = Lowercase;
+width = 16;
+},
+{
+horizontal = 1;
+name = Uppercase;
+width = 18;
+}
+);
+}
+);
+guides = (
+{
+pos = (-113,574);
+},
+{
+pos = (524,141);
+},
+{
+pos = (-113,765);
+},
+{
+pos = (524,-122);
+}
+);
+iconName = Light;
+id = "C4872ECA-A3A9-40AB-960A-1DB2202F16DE";
+metricValues = (
+{
+over = 10;
+pos = 800;
+},
+{
+over = 10;
+pos = 700;
+},
+{
+over = 10;
+pos = 470;
+},
+{
+over = -10;
+},
+{
+over = -10;
+pos = -200;
+}
+);
+name = Light;
+stemValues = (
+16,
+16,
+18,
+17,
+19
+);
+userData = {
+GSOffsetHorizontal = 9;
+GSOffsetMakeStroke = 1;
+GSOffsetVertical = 9;
+GSRoughenHorizontal = 15;
+GSRoughenSegmentLength = 15;
+GSRoughenVertical = 10;
+com.schriftgestaltung.Glyphs.ufoData = {
+customBinaryData = <746865206279746573>;
+};
+noodleExtremesAndInflections = 1;
+noodleRemoveOverlap = 0;
+noodleThickness = "106.0";
+};
+},
+{
+axesValues = (
+90
+);
+customParameters = (
+{
+name = TTFStems;
+value = (
+{
+horizontal = 1;
+name = Thin;
+width = 80;
+},
+{
+horizontal = 1;
+name = Lowercase;
+width = 88;
+},
+{
+horizontal = 1;
+name = Uppercase;
+width = 91;
+}
+);
+}
+);
+guides = (
+{
+pos = (-126,593);
+},
+{
+locked = 1;
+pos = (-126,90);
+},
+{
+pos = (-113,773);
+},
+{
+pos = (524,-133);
+},
+{
+pos = (-126,321);
+},
+{
+pos = (-113,959);
+}
+);
+id = "3E7589AA-8194-470F-8E2F-13C1C581BE24";
+metricValues = (
+{
+over = 12;
+pos = 800;
+},
+{
+over = 12;
+pos = 700;
+},
+{
+over = 12;
+pos = 480;
+},
+{
+over = -12;
+},
+{
+over = -12;
+pos = -200;
+}
+);
+name = Regular;
+stemValues = (
+80,
+88,
+91,
+90,
+93
+);
+userData = {
+GSOffsetHorizontal = 45;
+GSOffsetMakeStroke = 1;
+GSOffsetVertical = 44;
+GSRoughenHorizontal = 15;
+GSRoughenSegmentLength = 15;
+GSRoughenVertical = 10;
+};
+},
+{
+axesValues = (
+220
+);
+customParameters = (
+{
+name = TTFStems;
+value = (
+{
+horizontal = 1;
+name = Thin;
+width = 108;
+},
+{
+horizontal = 1;
+name = Lowercase;
+width = 210;
+},
+{
+horizontal = 1;
+name = Uppercase;
+width = 215;
+}
+);
+}
+);
+guides = (
+{
+pos = (10,660);
+},
+{
+pos = (524,44);
+},
+{
+pos = (-113,800);
+},
+{
+pos = (524,-200);
+},
+{
+pos = (998,-212);
+}
+);
+iconName = Bold;
+id = "BFFFD157-90D3-4B85-B99D-9A2F366F03CA";
+metricValues = (
+{
+over = 15;
+pos = 800;
+},
+{
+over = 15;
+pos = 700;
+},
+{
+over = 15;
+pos = 490;
+},
+{
+over = -15;
+},
+{
+over = -15;
+pos = -200;
+}
+);
+name = Bold;
+stemValues = (
+108,
+210,
+215,
+220,
+225
+);
+userData = {
+GSOffsetHorizontal = 115;
+GSOffsetMakeStroke = 1;
+GSOffsetProportional = 1;
+GSOffsetVertical = 10;
+};
+}
+);
+instances = (
+{
+axesValues = (
+17
+);
+instanceInterpolations = {
+"C4872ECA-A3A9-40AB-960A-1DB2202F16DE" = 1;
+};
+manualInterpolation = 1;
+name = Thin;
+weightClass = 100;
+},
+{
+axesValues = (
+30
+);
+instanceInterpolations = {
+"3E7589AA-8194-470F-8E2F-13C1C581BE24" = 0.17808;
+"C4872ECA-A3A9-40AB-960A-1DB2202F16DE" = 0.82192;
+};
+name = "Extra Light";
+weightClass = 200;
+},
+{
+axesValues = (
+55
+);
+instanceInterpolations = {
+"3E7589AA-8194-470F-8E2F-13C1C581BE24" = 0.52055;
+"C4872ECA-A3A9-40AB-960A-1DB2202F16DE" = 0.47945;
+};
+name = Light;
+weightClass = 300;
+},
+{
+axesValues = (
+90
+);
+instanceInterpolations = {
+"3E7589AA-8194-470F-8E2F-13C1C581BE24" = 1;
+};
+name = Regular;
+},
+{
+axesValues = (
+133
+);
+instanceInterpolations = {
+"3E7589AA-8194-470F-8E2F-13C1C581BE24" = 0.66923;
+"BFFFD157-90D3-4B85-B99D-9A2F366F03CA" = 0.33077;
+};
+name = Medium;
+weightClass = 500;
+},
+{
+axesValues = (
+179
+);
+instanceInterpolations = {
+"3E7589AA-8194-470F-8E2F-13C1C581BE24" = 0.31538;
+"BFFFD157-90D3-4B85-B99D-9A2F366F03CA" = 0.68462;
+};
+name = Bold;
+weightClass = 700;
+},
+{
+axesValues = (
+220
+);
+instanceInterpolations = {
+"BFFFD157-90D3-4B85-B99D-9A2F366F03CA" = 1;
+};
+name = Black;
+weightClass = 900;
+},
+{
+axesValues = (
+75
+);
+instanceInterpolations = {
+"3E7589AA-8194-470F-8E2F-13C1C581BE24" = 0.79452;
+"C4872ECA-A3A9-40AB-960A-1DB2202F16DE" = 0.20548;
+};
+name = Web;
+weightClass = 357;
+}
+);
+kerningLTR = {
+"C4872ECA-A3A9-40AB-960A-1DB2202F16DE" = {
+"@MMK_L_A" = {
+"@MMK_R_J" = -30;
+"@MMK_R_O" = -20;
+"@MMK_R_T" = -100;
+"@MMK_R_U" = -20;
+"@MMK_R_V" = -10;
+"@MMK_R_Y" = -40;
+"@MMK_R_o" = -10;
+"@MMK_R_quote" = -60;
+"@MMK_R_quoteright" = -60;
+"@MMK_R_t" = -30;
+"@MMK_R_u" = -20;
+"@MMK_R_v" = -20;
+"@MMK_R_w" = -20;
+"@MMK_R_y" = -20;
+};
+"@MMK_L_B" = {
+"@MMK_R_T" = -50;
+"@MMK_R_V" = -30;
+"@MMK_R_Y" = -40;
+"@MMK_R_v" = -10;
+};
+"@MMK_L_C" = {
+"@MMK_R_O" = -20;
+"@MMK_R_o" = -10;
+};
+"@MMK_L_E" = {
+"@MMK_R_O" = -20;
+"@MMK_R_V" = -20;
+"@MMK_R_Y" = -20;
+};
+"@MMK_L_F" = {
+"@MMK_R_A" = -60;
+"@MMK_R_O" = -30;
+"@MMK_R_a" = -50;
+"@MMK_R_o" = -50;
+};
+"@MMK_L_K" = {
+"@MMK_R_O" = -30;
+"@MMK_R_a" = -30;
+"@MMK_R_o" = -30;
+"@MMK_R_v" = -30;
+"@MMK_R_y" = -20;
+};
+"@MMK_L_L" = {
+"@MMK_R_O" = -70;
+"@MMK_R_T" = -110;
+"@MMK_R_U" = -20;
+"@MMK_R_V" = -90;
+"@MMK_R_Y" = -110;
+"@MMK_R_a" = -20;
+"@MMK_R_o" = -20;
+"@MMK_R_quote" = -80;
+"@MMK_R_quoteright" = -80;
+"@MMK_R_t" = -40;
+"@MMK_R_u" = -20;
+"@MMK_R_v" = -70;
+};
+"@MMK_L_M" = {
+"@MMK_R_O" = -20;
+"@MMK_R_T" = -40;
+"@MMK_R_V" = -20;
+"@MMK_R_Y" = -30;
+"@MMK_R_o" = -10;
+"@MMK_R_v" = -20;
+};
+"@MMK_L_O" = {
+"@MMK_R_A" = -20;
+"@MMK_R_J" = -30;
+"@MMK_R_M" = -20;
+"@MMK_R_T" = -60;
+"@MMK_R_V" = -10;
+"@MMK_R_X" = -30;
+"@MMK_R_Y" = -20;
+"@MMK_R_Z" = -40;
+"@MMK_R_quoteright" = -20;
+};
+"@MMK_L_P" = {
+"@MMK_R_A" = -40;
+"@MMK_R_V" = -10;
+"@MMK_R_Y" = -20;
+"@MMK_R_a" = -20;
+"@MMK_R_o" = -20;
+"@MMK_R_s" = -10;
+};
+"@MMK_L_R" = {
+"@MMK_R_O" = -20;
+"@MMK_R_T" = -30;
+"@MMK_R_V" = -20;
+"@MMK_R_Y" = -30;
+"@MMK_R_a" = -30;
+"@MMK_R_o" = -30;
+"@MMK_R_u" = -10;
+"@MMK_R_v" = -20;
+"@MMK_R_y" = -20;
+};
+"@MMK_L_S" = {
+"@MMK_R_T" = -20;
+"@MMK_R_V" = -20;
+};
+"@MMK_L_T" = {
+"@MMK_R_A" = -100;
+"@MMK_R_M" = -50;
+"@MMK_R_O" = -60;
+"@MMK_R_S" = -40;
+"@MMK_R_a" = -130;
+"@MMK_R_h" = -70;
+"@MMK_R_n" = -80;
+"@MMK_R_o" = -140;
+"@MMK_R_s" = -120;
+"@MMK_R_v" = -100;
+"@MMK_R_w" = -100;
+"@MMK_R_y" = -90;
+};
+"@MMK_L_U" = {
+"@MMK_R_A" = -20;
+};
+"@MMK_L_V" = {
+"@MMK_R_A" = -10;
+"@MMK_R_M" = -20;
+"@MMK_R_O" = -10;
+"@MMK_R_S" = -20;
+"@MMK_R_a" = -60;
+"@MMK_R_o" = -60;
+};
+"@MMK_L_W" = {
+"@MMK_R_o" = -50;
+};
+"@MMK_L_X" = {
+"@MMK_R_O" = -30;
+"@MMK_R_o" = -30;
+};
+"@MMK_L_Y" = {
+"@MMK_R_A" = -40;
+"@MMK_R_M" = -30;
+"@MMK_R_O" = -20;
+"@MMK_R_a" = -90;
+"@MMK_R_o" = -80;
+};
+"@MMK_L_Z" = {
+"@MMK_R_O" = -30;
+"@MMK_R_a" = -50;
+"@MMK_R_o" = -50;
+"@MMK_R_u" = -30;
+};
+"@MMK_L_a" = {
+"@MMK_R_T" = -120;
+"@MMK_R_V" = -50;
+"@MMK_R_Y" = -70;
+"@MMK_R_Z" = -20;
+};
+"@MMK_L_c" = {
+"@MMK_R_o" = -10;
+};
+"@MMK_L_comma" = {
+"@MMK_R_four" = -70;
+"@MMK_R_seven" = -100;
+"@MMK_R_six" = -30;
+"@MMK_R_space" = -50;
+"@MMK_R_y" = 30;
+"@MMK_R_zero" = -70;
+};
+"@MMK_L_e" = {
+"@MMK_R_T" = -140;
+"@MMK_R_V" = -60;
+"@MMK_R_W" = -50;
+"@MMK_R_X" = -10;
+"@MMK_R_Y" = -80;
+"@MMK_R_Z" = -20;
+"@MMK_R_a" = -15;
+"@MMK_R_f" = -10;
+"@MMK_R_quoteright" = -20;
+"@MMK_R_t" = -10;
+"@MMK_R_v" = -10;
+"@MMK_R_y" = -10;
+"@MMK_R_z" = 0;
+};
+"@MMK_L_eight" = {
+"@MMK_R_quote" = -10;
+};
+"@MMK_L_f" = {
+"@MMK_R_a" = -30;
+"@MMK_R_g" = -40;
+"@MMK_R_o" = -30;
+"@MMK_R_quote" = 110;
+"@MMK_R_quoteright" = 80;
+};
+"@MMK_L_five" = {
+"@MMK_R_quote" = -20;
+"@MMK_R_seven" = -30;
+};
+"@MMK_L_four" = {
+"@MMK_R_comma" = -60;
+"@MMK_R_five" = -20;
+"@MMK_R_nine" = -20;
+"@MMK_R_one" = -20;
+"@MMK_R_quote" = -60;
+"@MMK_R_seven" = -50;
+"@MMK_R_two" = -20;
+};
+"@MMK_L_g" = {
+"@MMK_R_quote" = 30;
+"@MMK_R_quoteright" = 40;
+};
+"@MMK_L_i" = {
+"@MMK_R_quoteright" = 30;
+};
+"@MMK_L_j" = {
+"@MMK_R_quoteright" = 30;
+};
+"@MMK_L_k" = {
+"@MMK_R_a" = -10;
+"@MMK_R_quoteright" = 10;
+};
+"@MMK_L_n" = {
+"@MMK_R_T" = -90;
+"@MMK_R_quote" = -30;
+"@MMK_R_v" = -10;
+};
+"@MMK_L_nine" = {
+"@MMK_R_comma" = -70;
+"@MMK_R_two" = -30;
+};
+"@MMK_L_o" = {
+"@MMK_R_A" = -10;
+"@MMK_R_J" = -20;
+"@MMK_R_T" = -140;
+"@MMK_R_V" = -60;
+"@MMK_R_W" = -50;
+"@MMK_R_X" = -30;
+"@MMK_R_Y" = -80;
+"@MMK_R_Z" = -40;
+"@MMK_R_f" = -10;
+"@MMK_R_j" = -15;
+"@MMK_R_quote" = -20;
+"@MMK_R_quoteright" = -20;
+"@MMK_R_t" = -10;
+"@MMK_R_v" = -20;
+"@MMK_R_x" = -20;
+"@MMK_R_y" = -10;
+"@MMK_R_z" = -10;
+};
+"@MMK_L_one" = {
+"@MMK_R_quote" = -40;
+"@MMK_R_seven" = -30;
+"@MMK_R_six" = -20;
+"@MMK_R_zero" = -20;
+};
+"@MMK_L_quote" = {
+"@MMK_R_A" = -60;
+"@MMK_R_eight" = -20;
+"@MMK_R_f" = 60;
+"@MMK_R_four" = -80;
+"@MMK_R_g" = -60;
+"@MMK_R_o" = -20;
+"@MMK_R_s" = -40;
+"@MMK_R_seven" = 20;
+"@MMK_R_six" = -20;
+"@MMK_R_t" = 60;
+"@MMK_R_zero" = -20;
+};
+"@MMK_L_quoteright" = {
+"@MMK_R_A" = -60;
+"@MMK_R_O" = -30;
+"@MMK_R_f" = 20;
+"@MMK_R_g" = -60;
+"@MMK_R_i" = 30;
+"@MMK_R_j" = 30;
+"@MMK_R_o" = -40;
+"@MMK_R_s" = -70;
+"@MMK_R_t" = 40;
+};
+"@MMK_L_r" = {
+"@MMK_R_a" = -20;
+"@MMK_R_g" = -30;
+"@MMK_R_o" = -20;
+"@MMK_R_quote" = 50;
+"@MMK_R_quoteright" = 30;
+"@MMK_R_s" = -10;
+};
+"@MMK_L_s" = {
+"@MMK_R_T" = -120;
+"@MMK_R_quoteright" = 0;
+"@MMK_R_v" = -10;
+};
+"@MMK_L_seven" = {
+"@MMK_R_comma" = -90;
+"@MMK_R_four" = -30;
+"@MMK_R_one" = 30;
+"@MMK_R_quote" = 20;
+"@MMK_R_six" = -20;
+"@MMK_R_zero" = -20;
+};
+"@MMK_L_six" = {
+"@MMK_R_nine" = -20;
+"@MMK_R_quote" = -20;
+"@MMK_R_seven" = -20;
+};
+"@MMK_L_t" = {
+"@MMK_R_a" = -20;
+"@MMK_R_o" = -20;
+"@MMK_R_quote" = 20;
+"@MMK_R_quoteright" = 30;
+};
+"@MMK_L_three" = {
+"@MMK_R_seven" = -20;
+};
+"@MMK_L_two" = {
+"@MMK_R_four" = -20;
+"@MMK_R_seven" = -10;
+};
+"@MMK_L_v" = {
+"@MMK_R_A" = -20;
+"@MMK_R_T" = -100;
+"@MMK_R_a" = -20;
+"@MMK_R_g" = -30;
+"@MMK_R_o" = -20;
+"@MMK_R_s" = -25;
+};
+"@MMK_L_w" = {
+"@MMK_R_A" = -20;
+"@MMK_R_T" = -100;
+};
+"@MMK_L_x" = {
+"@MMK_R_o" = -20;
+};
+"@MMK_L_y" = {
+"@MMK_R_A" = -10;
+"@MMK_R_T" = -90;
+"@MMK_R_a" = -15;
+"@MMK_R_comma" = -50;
+"@MMK_R_g" = -20;
+"@MMK_R_o" = -10;
+};
+"@MMK_L_z" = {
+"@MMK_R_o" = -10;
+};
+"@MMK_L_zero" = {
+"@MMK_R_comma" = -60;
+"@MMK_R_quote" = -20;
+};
+};
+"3E7589AA-8194-470F-8E2F-13C1C581BE24" = {
+"@MMK_L_A" = {
+"@MMK_R_J" = -20;
+"@MMK_R_O" = -30;
+"@MMK_R_T" = -80;
+"@MMK_R_U" = -20;
+"@MMK_R_V" = -50;
+"@MMK_R_Y" = -70;
+"@MMK_R_o" = -20;
+"@MMK_R_quote" = -60;
+"@MMK_R_quoteright" = -60;
+"@MMK_R_t" = -30;
+"@MMK_R_u" = -20;
+"@MMK_R_v" = -40;
+"@MMK_R_w" = -30;
+"@MMK_R_y" = -30;
+};
+"@MMK_L_B" = {
+"@MMK_R_T" = -30;
+"@MMK_R_V" = -20;
+"@MMK_R_Y" = -50;
+"@MMK_R_v" = -10;
+};
+"@MMK_L_C" = {
+"@MMK_R_O" = -30;
+"@MMK_R_o" = -10;
+"@MMK_R_quoteright" = 20;
+};
+"@MMK_L_E" = {
+"@MMK_R_O" = -10;
+"@MMK_R_V" = -20;
+"@MMK_R_Y" = -20;
+};
+"@MMK_L_F" = {
+"@MMK_R_A" = -40;
+"@MMK_R_O" = -20;
+"@MMK_R_a" = -50;
+"@MMK_R_o" = -40;
+};
+"@MMK_L_K" = {
+"@MMK_R_O" = -40;
+"@MMK_R_a" = -40;
+"@MMK_R_o" = -45;
+"@MMK_R_v" = -40;
+"@MMK_R_y" = -30;
+};
+"@MMK_L_L" = {
+"@MMK_R_O" = -40;
+"@MMK_R_T" = -130;
+"@MMK_R_U" = -30;
+"@MMK_R_V" = -80;
+"@MMK_R_Y" = -120;
+"@MMK_R_a" = -20;
+"@MMK_R_o" = -20;
+"@MMK_R_quote" = -100;
+"@MMK_R_quoteright" = -120;
+"@MMK_R_t" = -30;
+"@MMK_R_u" = -20;
+"@MMK_R_v" = -60;
+};
+"@MMK_L_M" = {
+"@MMK_R_O" = -20;
+"@MMK_R_T" = -30;
+"@MMK_R_V" = -20;
+"@MMK_R_Y" = -30;
+"@MMK_R_o" = -20;
+"@MMK_R_t" = -20;
+"@MMK_R_v" = -20;
+};
+"@MMK_L_O" = {
+"@MMK_R_A" = -40;
+"@MMK_R_J" = -20;
+"@MMK_R_M" = -20;
+"@MMK_R_T" = -50;
+"@MMK_R_V" = -20;
+"@MMK_R_X" = -40;
+"@MMK_R_Y" = -40;
+"@MMK_R_Z" = -30;
+"@MMK_R_quoteright" = -20;
+};
+"@MMK_L_P" = {
+"@MMK_R_A" = -50;
+"@MMK_R_V" = -10;
+"@MMK_R_Y" = -20;
+"@MMK_R_a" = -20;
+"@MMK_R_o" = -30;
+};
+"@MMK_L_R" = {
+"@MMK_R_O" = -20;
+"@MMK_R_T" = -30;
+"@MMK_R_U" = -10;
+"@MMK_R_V" = -30;
+"@MMK_R_Y" = -40;
+"@MMK_R_a" = -30;
+"@MMK_R_o" = -30;
+"@MMK_R_u" = -10;
+"@MMK_R_v" = -20;
+"@MMK_R_y" = -20;
+};
+"@MMK_L_S" = {
+"@MMK_R_V" = -20;
+};
+"@MMK_L_T" = {
+"@MMK_R_A" = -80;
+"@MMK_R_M" = -30;
+"@MMK_R_O" = -50;
+"@MMK_R_S" = -30;
+"@MMK_R_a" = -120;
+"@MMK_R_h" = -40;
+"@MMK_R_n" = -90;
+"@MMK_R_o" = -130;
+"@MMK_R_quote" = 40;
+"@MMK_R_quoteright" = 40;
+"@MMK_R_s" = -130;
+"@MMK_R_v" = -70;
+"@MMK_R_w" = -70;
+"@MMK_R_y" = -70;
+};
+"@MMK_L_U" = {
+"@MMK_R_A" = -20;
+};
+"@MMK_L_V" = {
+"@MMK_R_A" = -50;
+"@MMK_R_M" = -20;
+"@MMK_R_O" = -20;
+"@MMK_R_S" = -30;
+"@MMK_R_a" = -80;
+"@MMK_R_o" = -70;
+};
+"@MMK_L_W" = {
+"@MMK_R_a" = -30;
+"@MMK_R_o" = -50;
+};
+"@MMK_L_X" = {
+"@MMK_R_O" = -40;
+"@MMK_R_a" = -40;
+"@MMK_R_o" = -50;
+};
+"@MMK_L_Y" = {
+"@MMK_R_A" = -70;
+"@MMK_R_M" = -30;
+"@MMK_R_O" = -40;
+"@MMK_R_a" = -100;
+"@MMK_R_o" = -110;
+};
+"@MMK_L_Z" = {
+"@MMK_R_O" = -30;
+"@MMK_R_a" = -50;
+"@MMK_R_o" = -50;
+"@MMK_R_u" = -30;
+};
+"@MMK_L_a" = {
+"@MMK_R_T" = -120;
+"@MMK_R_V" = -70;
+"@MMK_R_W" = -30;
+"@MMK_R_X" = -20;
+"@MMK_R_Y" = -110;
+"@MMK_R_Z" = -20;
+"@MMK_R_quote" = -30;
+};
+"@MMK_L_c" = {
+"@MMK_R_o" = -20;
+};
+"@MMK_L_comma" = {
+"@MMK_R_four" = -20;
+"@MMK_R_seven" = -100;
+"@MMK_R_space" = -40;
+"@MMK_R_y" = 30;
+"@MMK_R_zero" = -50;
+};
+"@MMK_L_e" = {
+"@MMK_R_T" = -130;
+"@MMK_R_V" = -70;
+"@MMK_R_W" = -40;
+"@MMK_R_X" = -50;
+"@MMK_R_Y" = -110;
+"@MMK_R_Z" = -30;
+"@MMK_R_a" = -10;
+"@MMK_R_f" = -10;
+"@MMK_R_quote" = -30;
+"@MMK_R_quoteright" = -30;
+"@MMK_R_v" = -10;
+"@MMK_R_x" = -20;
+"@MMK_R_z" = -6;
+};
+"@MMK_L_eight" = {
+"@MMK_R_quote" = -20;
+"@MMK_R_seven" = -10;
+};
+"@MMK_L_f" = {
+"@MMK_R_a" = -20;
+"@MMK_R_g" = -30;
+"@MMK_R_o" = -25;
+"@MMK_R_quote" = 70;
+"@MMK_R_quoteright" = 70;
+};
+"@MMK_L_five" = {
+"@MMK_R_quote" = 10;
+};
+"@MMK_L_four" = {
+"@MMK_R_one" = -10;
+"@MMK_R_quote" = -50;
+"@MMK_R_seven" = -50;
+"@MMK_R_three" = -10;
+"@MMK_R_two" = -10;
+};
+"@MMK_L_g" = {
+"@MMK_R_a" = -20;
+"@MMK_R_quoteright" = 30;
+"@MMK_R_y" = 20;
+};
+"@MMK_L_i" = {
+"@MMK_R_quoteright" = 30;
+};
+"@MMK_L_j" = {
+"@MMK_R_quoteright" = 30;
+};
+"@MMK_L_k" = {
+"@MMK_R_a" = -20;
+"@MMK_R_o" = -10;
+"@MMK_R_quote" = 20;
+"@MMK_R_quoteright" = 20;
+"@MMK_R_v" = -10;
+};
+"@MMK_L_l" = {
+"@MMK_R_quoteright" = -40;
+};
+"@MMK_L_n" = {
+"@MMK_R_T" = -80;
+"@MMK_R_quote" = -20;
+"@MMK_R_v" = -15;
+};
+"@MMK_L_nine" = {
+"@MMK_R_comma" = -50;
+"@MMK_R_two" = -20;
+};
+"@MMK_L_o" = {
+"@MMK_R_A" = -20;
+"@MMK_R_J" = -20;
+"@MMK_R_M" = -20;
+"@MMK_R_T" = -130;
+"@MMK_R_V" = -70;
+"@MMK_R_W" = -40;
+"@MMK_R_X" = -50;
+"@MMK_R_Y" = -110;
+"@MMK_R_Z" = -20;
+"@MMK_R_f" = -10;
+"@MMK_R_j" = -15;
+"@MMK_R_quote" = -40;
+"@MMK_R_quoteright" = -20;
+"@MMK_R_v" = -20;
+"@MMK_R_x" = -30;
+"@MMK_R_y" = -25;
+"@MMK_R_z" = -10;
+};
+"@MMK_L_one" = {
+"@MMK_R_four" = -20;
+"@MMK_R_quote" = -60;
+"@MMK_R_seven" = -20;
+"@MMK_R_six" = -20;
+"@MMK_R_zero" = -20;
+};
+"@MMK_L_quote" = {
+"@MMK_R_A" = -60;
+"@MMK_R_J" = -20;
+"@MMK_R_T" = 40;
+"@MMK_R_a" = -20;
+"@MMK_R_eight" = -20;
+"@MMK_R_f" = 30;
+"@MMK_R_five" = 20;
+"@MMK_R_four" = -80;
+"@MMK_R_g" = -60;
+"@MMK_R_h" = 20;
+"@MMK_R_o" = -40;
+"@MMK_R_s" = -40;
+"@MMK_R_seven" = 20;
+"@MMK_R_t" = 40;
+"@MMK_R_v" = 20;
+"@MMK_R_w" = 20;
+"@MMK_R_y" = 20;
+"@MMK_R_zero" = -20;
+};
+"@MMK_L_quoteright" = {
+"@MMK_R_A" = -60;
+"@MMK_R_O" = -20;
+"@MMK_R_T" = 40;
+"@MMK_R_a" = -10;
+"@MMK_R_f" = 20;
+"@MMK_R_g" = -50;
+"@MMK_R_i" = 30;
+"@MMK_R_j" = 30;
+"@MMK_R_o" = -40;
+"@MMK_R_s" = -40;
+"@MMK_R_t" = 50;
+};
+"@MMK_L_r" = {
+"@MMK_R_a" = -30;
+"@MMK_R_g" = -25;
+"@MMK_R_o" = -20;
+"@MMK_R_quote" = 20;
+"@MMK_R_quoteright" = 20;
+"@MMK_R_s" = -10;
+};
+"@MMK_L_s" = {
+"@MMK_R_T" = -110;
+"@MMK_R_quoteright" = 0;
+"@MMK_R_v" = -10;
+};
+"@MMK_L_seven" = {
+"@MMK_R_comma" = -80;
+"@MMK_R_four" = -40;
+"@MMK_R_one" = 20;
+"@MMK_R_quote" = 20;
+"@MMK_R_three" = 10;
+"@MMK_R_zero" = -20;
+};
+"@MMK_L_six" = {
+"@MMK_R_quote" = -20;
+};
+"@MMK_L_t" = {
+"@MMK_R_a" = -10;
+"@MMK_R_quote" = 40;
+"@MMK_R_quoteright" = 30;
+};
+"@MMK_L_three" = {
+"@MMK_R_seven" = -20;
+};
+"@MMK_L_two" = {
+"@MMK_R_seven" = -20;
+};
+"@MMK_L_v" = {
+"@MMK_R_A" = -30;
+"@MMK_R_M" = -20;
+"@MMK_R_T" = -70;
+"@MMK_R_a" = -20;
+"@MMK_R_g" = -40;
+"@MMK_R_o" = -20;
+"@MMK_R_quote" = 20;
+"@MMK_R_s" = -20;
+};
+"@MMK_L_w" = {
+"@MMK_R_A" = -30;
+"@MMK_R_T" = -70;
+"@MMK_R_quote" = 20;
+};
+"@MMK_L_x" = {
+"@MMK_R_o" = -30;
+};
+"@MMK_L_y" = {
+"@MMK_R_A" = -40;
+"@MMK_R_T" = -60;
+"@MMK_R_a" = -20;
+"@MMK_R_comma" = -60;
+"@MMK_R_g" = -30;
+"@MMK_R_o" = -10;
+"@MMK_R_quote" = 20;
+};
+"@MMK_L_z" = {
+"@MMK_R_o" = -10;
+};
+"@MMK_L_zero" = {
+"@MMK_R_comma" = -30;
+"@MMK_R_quote" = -20;
+};
+};
+"BFFFD157-90D3-4B85-B99D-9A2F366F03CA" = {
+"@MMK_L_A" = {
+"@MMK_R_J" = -10;
+"@MMK_R_O" = -40;
+"@MMK_R_T" = -80;
+"@MMK_R_U" = -40;
+"@MMK_R_V" = -70;
+"@MMK_R_Y" = -100;
+"@MMK_R_o" = -30;
+"@MMK_R_quote" = -60;
+"@MMK_R_quoteright" = -50;
+"@MMK_R_t" = -60;
+"@MMK_R_u" = -30;
+"@MMK_R_v" = -50;
+"@MMK_R_w" = -40;
+"@MMK_R_y" = -40;
+};
+"@MMK_L_B" = {
+"@MMK_R_T" = -20;
+"@MMK_R_V" = -30;
+"@MMK_R_Y" = -50;
+"@MMK_R_v" = -10;
+"@MMK_R_y" = -10;
+};
+"@MMK_L_C" = {
+"@MMK_R_O" = -30;
+"@MMK_R_o" = -10;
+"@MMK_R_quoteright" = 10;
+};
+"@MMK_L_E" = {
+"@MMK_R_O" = -10;
+"@MMK_R_V" = -10;
+"@MMK_R_Y" = -20;
+};
+"@MMK_L_F" = {
+"@MMK_R_A" = -50;
+"@MMK_R_O" = -10;
+"@MMK_R_a" = -20;
+"@MMK_R_o" = -15;
+};
+"@MMK_L_K" = {
+"@MMK_R_O" = -40;
+"@MMK_R_a" = -20;
+"@MMK_R_o" = -50;
+"@MMK_R_v" = -60;
+"@MMK_R_y" = -50;
+};
+"@MMK_L_L" = {
+"@MMK_R_O" = -20;
+"@MMK_R_T" = -110;
+"@MMK_R_U" = -20;
+"@MMK_R_V" = -80;
+"@MMK_R_Y" = -140;
+"@MMK_R_quote" = -70;
+"@MMK_R_quoteright" = -70;
+"@MMK_R_t" = -20;
+"@MMK_R_v" = -40;
+};
+"@MMK_L_M" = {
+"@MMK_R_O" = -30;
+"@MMK_R_T" = -50;
+"@MMK_R_V" = -50;
+"@MMK_R_Y" = -70;
+"@MMK_R_o" = -30;
+"@MMK_R_t" = -40;
+"@MMK_R_v" = -40;
+"@MMK_R_y" = -40;
+};
+"@MMK_L_O" = {
+"@MMK_R_A" = -40;
+"@MMK_R_J" = -20;
+"@MMK_R_M" = -30;
+"@MMK_R_T" = -40;
+"@MMK_R_V" = -50;
+"@MMK_R_X" = -50;
+"@MMK_R_Y" = -70;
+"@MMK_R_Z" = -20;
+};
+"@MMK_L_P" = {
+"@MMK_R_A" = -50;
+"@MMK_R_V" = -20;
+"@MMK_R_Y" = -50;
+"@MMK_R_a" = -20;
+"@MMK_R_o" = -20;
+};
+"@MMK_L_R" = {
+"@MMK_R_O" = -20;
+"@MMK_R_T" = -20;
+"@MMK_R_U" = -10;
+"@MMK_R_V" = -30;
+"@MMK_R_Y" = -50;
+"@MMK_R_a" = -20;
+"@MMK_R_o" = -20;
+"@MMK_R_v" = -20;
+"@MMK_R_y" = -20;
+};
+"@MMK_L_T" = {
+"@MMK_R_A" = -80;
+"@MMK_R_M" = -50;
+"@MMK_R_O" = -40;
+"@MMK_R_S" = -20;
+"@MMK_R_a" = -60;
+"@MMK_R_h" = -10;
+"@MMK_R_n" = -20;
+"@MMK_R_o" = -100;
+"@MMK_R_quote" = 30;
+"@MMK_R_s" = -60;
+"@MMK_R_v" = -20;
+"@MMK_R_w" = -20;
+};
+"@MMK_L_U" = {
+"@MMK_R_A" = -40;
+};
+"@MMK_L_V" = {
+"@MMK_R_A" = -70;
+"@MMK_R_M" = -50;
+"@MMK_R_O" = -40;
+"@MMK_R_S" = -20;
+"@MMK_R_a" = -60;
+"@MMK_R_o" = -70;
+"@MMK_R_quote" = 20;
+};
+"@MMK_L_W" = {
+"@MMK_R_o" = -40;
+"@MMK_R_quote" = 20;
+};
+"@MMK_L_X" = {
+"@MMK_R_O" = -50;
+"@MMK_R_a" = -30;
+"@MMK_R_o" = -50;
+};
+"@MMK_L_Y" = {
+"@MMK_R_A" = -100;
+"@MMK_R_M" = -70;
+"@MMK_R_O" = -70;
+"@MMK_R_a" = -100;
+"@MMK_R_o" = -120;
+};
+"@MMK_L_Z" = {
+"@MMK_R_O" = -20;
+"@MMK_R_a" = -10;
+"@MMK_R_o" = -20;
+"@MMK_R_u" = -20;
+};
+"@MMK_L_a" = {
+"@MMK_R_T" = -40;
+"@MMK_R_V" = -60;
+"@MMK_R_X" = -20;
+"@MMK_R_Y" = -120;
+"@MMK_R_t" = -10;
+"@MMK_R_v" = -10;
+"@MMK_R_y" = -10;
+};
+"@MMK_L_c" = {
+"@MMK_R_o" = -15;
+};
+"@MMK_L_comma" = {
+"@MMK_R_seven" = -110;
+"@MMK_R_space" = -30;
+"@MMK_R_zero" = -20;
+};
+"@MMK_L_e" = {
+"@MMK_R_T" = -100;
+"@MMK_R_V" = -70;
+"@MMK_R_W" = -40;
+"@MMK_R_X" = -30;
+"@MMK_R_Y" = -120;
+"@MMK_R_a" = -15;
+"@MMK_R_f" = -10;
+"@MMK_R_quote" = 0;
+"@MMK_R_v" = -20;
+"@MMK_R_x" = -20;
+"@MMK_R_y" = -20;
+};
+"@MMK_L_eight" = {
+"@MMK_R_quote" = -10;
+"@MMK_R_seven" = -20;
+};
+"@MMK_L_f" = {
+"@MMK_R_a" = -10;
+"@MMK_R_g" = -20;
+"@MMK_R_o" = -10;
+"@MMK_R_quote" = 40;
+"@MMK_R_quoteright" = 70;
+};
+"@MMK_L_five" = {
+"@MMK_R_nine" = -10;
+"@MMK_R_seven" = -10;
+};
+"@MMK_L_four" = {
+"@MMK_R_quote" = -20;
+"@MMK_R_seven" = -30;
+};
+"@MMK_L_g" = {
+"@MMK_R_a" = -10;
+"@MMK_R_o" = -10;
+"@MMK_R_quote" = 20;
+"@MMK_R_quoteright" = 30;
+"@MMK_R_y" = 10;
+};
+"@MMK_L_i" = {
+"@MMK_R_quoteright" = 60;
+};
+"@MMK_L_j" = {
+"@MMK_R_quoteright" = 40;
+};
+"@MMK_L_k" = {
+"@MMK_R_a" = -15;
+"@MMK_R_o" = -25;
+"@MMK_R_quoteright" = 20;
+};
+"@MMK_L_l" = {
+"@MMK_R_quoteright" = 20;
+};
+"@MMK_L_n" = {
+"@MMK_R_T" = -30;
+"@MMK_R_quote" = -20;
+"@MMK_R_v" = -10;
+};
+"@MMK_L_nine" = {
+"@MMK_R_comma" = -20;
+"@MMK_R_seven" = -10;
+};
+"@MMK_L_o" = {
+"@MMK_R_A" = -30;
+"@MMK_R_J" = -20;
+"@MMK_R_M" = -30;
+"@MMK_R_T" = -100;
+"@MMK_R_V" = -70;
+"@MMK_R_W" = -40;
+"@MMK_R_X" = -50;
+"@MMK_R_Y" = -120;
+"@MMK_R_Z" = -10;
+"@MMK_R_f" = -10;
+"@MMK_R_j" = -20;
+"@MMK_R_quote" = -20;
+"@MMK_R_quoteright" = 0;
+"@MMK_R_t" = -10;
+"@MMK_R_v" = -30;
+"@MMK_R_x" = -35;
+"@MMK_R_y" = -20;
+"@MMK_R_z" = -10;
+};
+"@MMK_L_one" = {
+"@MMK_R_quote" = -50;
+"@MMK_R_seven" = -40;
+"@MMK_R_zero" = -20;
+};
+"@MMK_L_quote" = {
+"@MMK_R_A" = -70;
+"@MMK_R_T" = 30;
+"@MMK_R_V" = 20;
+"@MMK_R_W" = 20;
+"@MMK_R_eight" = -10;
+"@MMK_R_f" = 20;
+"@MMK_R_four" = -20;
+"@MMK_R_g" = -20;
+"@MMK_R_h" = 10;
+"@MMK_R_o" = -20;
+"@MMK_R_seven" = 20;
+"@MMK_R_six" = -20;
+"@MMK_R_t" = 20;
+"@MMK_R_zero" = -20;
+};
+"@MMK_L_quoteright" = {
+"@MMK_R_A" = -70;
+"@MMK_R_O" = -30;
+"@MMK_R_a" = -20;
+"@MMK_R_g" = -40;
+"@MMK_R_h" = 20;
+"@MMK_R_i" = 30;
+"@MMK_R_j" = 20;
+"@MMK_R_o" = -50;
+"@MMK_R_s" = -30;
+"@MMK_R_t" = 10;
+};
+"@MMK_L_r" = {
+"@MMK_R_a" = -10;
+"@MMK_R_g" = -10;
+"@MMK_R_o" = -5;
+"@MMK_R_quoteright" = 20;
+"@MMK_R_s" = -10;
+};
+"@MMK_L_seven" = {
+"@MMK_R_comma" = -60;
+"@MMK_R_four" = -30;
+"@MMK_R_one" = 20;
+"@MMK_R_quote" = 20;
+"@MMK_R_six" = -20;
+};
+"@MMK_L_six" = {
+"@MMK_R_nine" = -20;
+"@MMK_R_quote" = -20;
+"@MMK_R_seven" = -20;
+};
+"@MMK_L_t" = {
+"@MMK_R_a" = -10;
+"@MMK_R_o" = -5;
+"@MMK_R_quote" = 20;
+"@MMK_R_quoteright" = 30;
+};
+"@MMK_L_three" = {
+"@MMK_R_seven" = -30;
+};
+"@MMK_L_two" = {
+"@MMK_R_seven" = -20;
+};
+"@MMK_L_v" = {
+"@MMK_R_A" = -50;
+"@MMK_R_M" = -40;
+"@MMK_R_T" = -20;
+"@MMK_R_g" = -35;
+"@MMK_R_o" = -30;
+"@MMK_R_s" = -25;
+};
+"@MMK_L_w" = {
+"@MMK_R_A" = -40;
+"@MMK_R_T" = -20;
+};
+"@MMK_L_x" = {
+"@MMK_R_o" = -35;
+};
+"@MMK_L_y" = {
+"@MMK_R_A" = -60;
+"@MMK_R_M" = -40;
+"@MMK_R_comma" = -40;
+"@MMK_R_g" = -30;
+"@MMK_R_o" = 0;
+};
+"@MMK_L_z" = {
+"@MMK_R_o" = -10;
+};
+"@MMK_L_zero" = {
+"@MMK_R_comma" = -20;
+"@MMK_R_quote" = -20;
+"@MMK_R_two" = -10;
+};
+};
+};
+metrics = (
+{
+type = ascender;
+},
+{
+type = "cap height";
+},
+{
+filter = "category == \"letter\"";
+type = "x-height";
+},
+{
+type = baseline;
+},
+{
+type = descender;
+}
+);
+note = "Bla bla";
+stems = (
+{
+horizontal = 1;
+name = hStem0;
+},
+{
+horizontal = 1;
+name = hStem1;
+},
+{
+horizontal = 1;
+name = hStem2;
+},
+{
+name = vStem0;
+},
+{
+name = vStem1;
+}
+);
+unitsPerEm = 1000;
+userData = {
+AsteriskParameters = {
+"253E7231-480D-4F8E-8754-50FC8575C08E" = (
+"754",
+"30",
+7,
+51,
+"80",
+"50"
+);
+};
+GSDimensionPlugin.Dimensions = {
+"3E7589AA-8194-470F-8E2F-13C1C581BE24" = {
+HH = 91;
+HV = 93;
+OH = 91;
+OV = 93;
+arAlef = 86;
+arBar = 92;
+nV = 90;
+oH = 88;
+};
+"BFFFD157-90D3-4B85-B99D-9A2F366F03CA" = {
+HH = 215;
+HV = 225;
+nV = 220;
+oH = 210;
+};
+"C4872ECA-A3A9-40AB-960A-1DB2202F16DE" = {
+HH = 18;
+HV = 19;
+nV = 17;
+oH = 16;
+};
+};
+uniTestValue = def;
+};
+versionMajor = 1;
+versionMinor = 0;
+}
diff --git a/tests/data/GlyphsUnitTestSans3.glyphspackage/glyphs/A_.glyph b/tests/data/GlyphsUnitTestSans3.glyphspackage/glyphs/A_.glyph
new file mode 100644
index 0000000..8dbe5ba
--- /dev/null
+++ b/tests/data/GlyphsUnitTestSans3.glyphspackage/glyphs/A_.glyph
@@ -0,0 +1,193 @@
+{
+category = "";
+color = (120,220,20,4);
+glyphname = A;
+kernLeft = A;
+kernRight = A;
+layers = (
+{
+anchors = (
+{
+name = bottom;
+pos = (377,0);
+},
+{
+name = ogonek;
+pos = (678,10);
+},
+{
+name = top;
+pos = (377,700);
+}
+);
+background = {
+shapes = (
+{
+closed = 1;
+nodes = (
+(566.99,700,l),
+(191,700,l),
+(24,0,l),
+(270,0,l),
+(364,470,l),
+(379,470,l),
+(477,0,l),
+(733,0,l)
+);
+}
+);
+};
+layerId = "BFFFD157-90D3-4B85-B99D-9A2F366F03CA";
+shapes = (
+{
+closed = 1;
+nodes = (
+(555,700,l),
+(205,700,l),
+(20,0,l),
+(253,0,l),
+(356,470,l),
+(385,470,l),
+(491,0,l),
+(733,0,l)
+);
+},
+{
+closed = 1;
+nodes = (
+(162,268,l),
+(154,103,l),
+(596,103,l),
+(600,268,l)
+);
+}
+);
+width = 753;
+},
+{
+anchors = (
+{
+name = bottom;
+pos = (329,0);
+},
+{
+name = ogonek;
+pos = (591,10);
+},
+{
+name = top;
+pos = (329,700);
+}
+);
+hints = (
+{
+horizontal = 1;
+origin = (1,1);
+target = (1,0);
+type = Stem;
+},
+{
+horizontal = 1;
+origin = (0,1);
+target = (0,4);
+type = Stem;
+}
+);
+layerId = "3E7589AA-8194-470F-8E2F-13C1C581BE24";
+shapes = (
+{
+closed = 1;
+nodes = (
+(412,700,l),
+(248,700,l),
+(40,0,l),
+(134,0,l),
+(313,610,l),
+(342,610,l),
+(521,0,l),
+(617,0,l)
+);
+},
+{
+closed = 1;
+nodes = (
+(150,269,l),
+(148,178,l),
+(510,178,l),
+(514,269,l)
+);
+}
+);
+width = 657;
+},
+{
+anchors = (
+{
+name = bottom;
+pos = (297,0);
+},
+{
+name = ogonek;
+pos = (548,0);
+},
+{
+name = top;
+pos = (297,700);
+}
+);
+background = {
+shapes = (
+{
+closed = 1;
+nodes = (
+(133,253,l),
+(134,215,l),
+(451,215,l),
+(455,253,l)
+);
+}
+);
+};
+backgroundImage = {
+imagePath = A.jpg;
+};
+guides = (
+{
+angle = 71.7587;
+pos = (45,0);
+}
+);
+layerId = "C4872ECA-A3A9-40AB-960A-1DB2202F16DE";
+shapes = (
+{
+closed = 1;
+nodes = (
+(321,700,l,{
+name = "Hello World";
+}),
+(275,700,l),
+(45,0,l),
+(65,0,l),
+(289,679,l),
+(307,679,l),
+(527,0,l),
+(548,0,l)
+);
+},
+{
+closed = 1;
+nodes = (
+(128,225,l),
+(123,207,l),
+(472,207,l),
+(467,225,l)
+);
+}
+);
+width = 593;
+}
+);
+script = "";
+subCategory = "";
+unicode = 65;
+}
diff --git a/tests/data/GlyphsUnitTestSans3.glyphspackage/glyphs/A_dieresis.glyph b/tests/data/GlyphsUnitTestSans3.glyphspackage/glyphs/A_dieresis.glyph
new file mode 100644
index 0000000..a4bccde
--- /dev/null
+++ b/tests/data/GlyphsUnitTestSans3.glyphspackage/glyphs/A_dieresis.glyph
@@ -0,0 +1,45 @@
+{
+glyphname = Adieresis;
+layers = (
+{
+layerId = "C4872ECA-A3A9-40AB-960A-1DB2202F16DE";
+shapes = (
+{
+ref = A;
+},
+{
+pos = (110,230);
+ref = dieresis;
+}
+);
+width = 593;
+},
+{
+layerId = "3E7589AA-8194-470F-8E2F-13C1C581BE24";
+shapes = (
+{
+ref = A;
+},
+{
+pos = (128,220);
+ref = dieresis;
+}
+);
+width = 657;
+},
+{
+layerId = "BFFFD157-90D3-4B85-B99D-9A2F366F03CA";
+shapes = (
+{
+ref = A;
+},
+{
+pos = (110,210);
+ref = dieresis;
+}
+);
+width = 753;
+}
+);
+unicode = 196;
+}
diff --git a/tests/data/GlyphsUnitTestSans3.glyphspackage/glyphs/_part.shoulder.glyph b/tests/data/GlyphsUnitTestSans3.glyphspackage/glyphs/_part.shoulder.glyph
new file mode 100644
index 0000000..ec98a4e
--- /dev/null
+++ b/tests/data/GlyphsUnitTestSans3.glyphspackage/glyphs/_part.shoulder.glyph
@@ -0,0 +1,412 @@
+{
+export = 0;
+glyphname = _part.shoulder;
+layers = (
+{
+anchors = (
+{
+name = _connect;
+pos = (117,0);
+},
+{
+name = connect;
+pos = (411,0);
+}
+);
+layerId = "C4872ECA-A3A9-40AB-960A-1DB2202F16DE";
+partSelection = {
+crotchDepth = 2;
+shoulderWidth = 2;
+};
+shapes = (
+{
+closed = 1;
+nodes = (
+(117,266,l),
+(117,410,o),
+(173,463,o),
+(262,463,cs),
+(322,463,o),
+(365,437,o),
+(394,408,c),
+(394,0,l),
+(411,0,l),
+(411,414,l),
+(377,450,o),
+(333,479,o),
+(262,479,cs),
+(169,479,o),
+(132,429,o),
+(121,384,c),
+(102,384,l)
+);
+}
+);
+width = 501;
+},
+{
+anchors = (
+{
+name = _connect;
+pos = (167,0);
+},
+{
+name = connect;
+pos = (455,0);
+}
+);
+layerId = "3E7589AA-8194-470F-8E2F-13C1C581BE24";
+partSelection = {
+crotchDepth = 2;
+shoulderWidth = 2;
+};
+shapes = (
+{
+closed = 1;
+nodes = (
+(167,246,l),
+(167,355,o),
+(203,402,o),
+(277,402,cs),
+(315,402,o),
+(345,390,o),
+(365,370,c),
+(365,0,l),
+(455,0,l),
+(455,423,l),
+(425,452,o),
+(380,490,o),
+(294,490,cs),
+(205,490,o),
+(170,452,o),
+(155,409,c),
+(131,409,l)
+);
+}
+);
+width = 528;
+},
+{
+anchors = (
+{
+name = _connect;
+pos = (250,0);
+},
+{
+name = connect;
+pos = (530,0);
+}
+);
+layerId = "BFFFD157-90D3-4B85-B99D-9A2F366F03CA";
+partSelection = {
+crotchDepth = 2;
+shoulderWidth = 2;
+};
+shapes = (
+{
+closed = 1;
+nodes = (
+(250,229,l),
+(250,268,o),
+(259,283,o),
+(284,283,cs),
+(295,283,o),
+(304,280,o),
+(310,276,c),
+(310,0,l),
+(530,0,l),
+(530,448,l),
+(490,478,o),
+(430,501,o),
+(357,501,cs),
+(259,501,o),
+(209,461,o),
+(188,401,c),
+(162,401,l)
+);
+}
+);
+width = 560;
+},
+{
+anchors = (
+{
+name = _connect;
+pos = (117,0);
+},
+{
+name = connect;
+pos = (381,0);
+}
+);
+associatedMasterId = "C4872ECA-A3A9-40AB-960A-1DB2202F16DE";
+layerId = "50EFFDD5-7E17-4ADC-BBC9-E16AAD6631DE";
+name = NarrowShoulder;
+partSelection = {
+crotchDepth = 2;
+shoulderWidth = 1;
+};
+shapes = (
+{
+closed = 1;
+nodes = (
+(117,266,l),
+(117,410,o),
+(173,463,o),
+(252,463,cs),
+(292,463,o),
+(335,437,o),
+(364,408,c),
+(364,0,l),
+(381,0,l),
+(381,414,l),
+(347,450,o),
+(303,479,o),
+(252,479,cs),
+(169,479,o),
+(132,429,o),
+(121,384,c),
+(102,384,l)
+);
+}
+);
+width = 501;
+},
+{
+anchors = (
+{
+name = _connect;
+pos = (117,0);
+},
+{
+name = connect;
+pos = (411,0);
+}
+);
+associatedMasterId = "C4872ECA-A3A9-40AB-960A-1DB2202F16DE";
+layerId = "7C8F98EE-D140-44D5-86AE-E00A730464C0";
+name = LowCrotch;
+partSelection = {
+crotchDepth = 1;
+shoulderWidth = 2;
+};
+shapes = (
+{
+closed = 1;
+nodes = (
+(117,236,l),
+(117,410,o),
+(173,463,o),
+(262,463,cs),
+(322,463,o),
+(365,437,o),
+(394,408,c),
+(394,0,l),
+(411,0,l),
+(411,414,l),
+(377,450,o),
+(333,479,o),
+(262,479,cs),
+(169,479,o),
+(132,429,o),
+(121,354,c),
+(102,354,l)
+);
+}
+);
+width = 501;
+},
+{
+anchors = (
+{
+name = _connect;
+pos = (167,0);
+},
+{
+name = connect;
+pos = (425,0);
+}
+);
+associatedMasterId = "3E7589AA-8194-470F-8E2F-13C1C581BE24";
+layerId = "595FDB8C-ED41-486A-B76A-0FEFEF8BCDD1";
+name = NarrowShoulder;
+partSelection = {
+crotchDepth = 2;
+shoulderWidth = 1;
+};
+shapes = (
+{
+closed = 1;
+nodes = (
+(167,246,l),
+(167,355,o),
+(203,402,o),
+(257,402,cs),
+(285,402,o),
+(315,390,o),
+(335,370,c),
+(335,0,l),
+(425,0,l),
+(425,423,l),
+(395,452,o),
+(350,490,o),
+(274,490,cs),
+(205,490,o),
+(170,452,o),
+(155,409,c),
+(131,409,l)
+);
+}
+);
+width = 528;
+},
+{
+anchors = (
+{
+name = _connect;
+pos = (167,0);
+},
+{
+name = connect;
+pos = (455,0);
+}
+);
+associatedMasterId = "3E7589AA-8194-470F-8E2F-13C1C581BE24";
+layerId = "65575EEB-523C-4A39-985D-FB9ACFE951AF";
+name = LowCrotch;
+partSelection = {
+crotchDepth = 1;
+shoulderWidth = 2;
+};
+shapes = (
+{
+closed = 1;
+nodes = (
+(167,216,l),
+(167,325,o),
+(203,402,o),
+(277,402,cs),
+(315,402,o),
+(345,390,o),
+(365,370,c),
+(365,0,l),
+(455,0,l),
+(455,423,l),
+(425,452,o),
+(380,490,o),
+(294,490,cs),
+(205,490,o),
+(170,452,o),
+(155,379,c),
+(131,379,l)
+);
+}
+);
+width = 528;
+},
+{
+anchors = (
+{
+name = _connect;
+pos = (250,0);
+},
+{
+name = connect;
+pos = (520,0);
+}
+);
+associatedMasterId = "BFFFD157-90D3-4B85-B99D-9A2F366F03CA";
+layerId = "D607B100-382C-478B-A297-2EF174C3A363";
+name = NarrowShoulder;
+partSelection = {
+crotchDepth = 2;
+shoulderWidth = 1;
+};
+shapes = (
+{
+closed = 1;
+nodes = (
+(250,229,l),
+(250,268,o),
+(259,283,o),
+(274,283,cs),
+(285,283,o),
+(294,280,o),
+(300,276,c),
+(300,0,l),
+(520,0,l),
+(520,448,l),
+(480,478,o),
+(420,501,o),
+(347,501,cs),
+(259,501,o),
+(209,461,o),
+(188,401,c),
+(162,401,l)
+);
+}
+);
+width = 560;
+},
+{
+anchors = (
+{
+name = _connect;
+pos = (250,0);
+},
+{
+name = connect;
+pos = (530,0);
+}
+);
+associatedMasterId = "BFFFD157-90D3-4B85-B99D-9A2F366F03CA";
+layerId = "BA4F7DF9-9552-48BB-A5B8-E2D21D8D086E";
+name = LowCrotch;
+partSelection = {
+crotchDepth = 1;
+shoulderWidth = 2;
+};
+shapes = (
+{
+closed = 1;
+nodes = (
+(250,199,l),
+(250,251,o),
+(259,283,o),
+(284,283,cs),
+(295,283,o),
+(304,280,o),
+(310,276,c),
+(310,0,l),
+(530,0,l),
+(530,448,l),
+(490,478,o),
+(430,501,o),
+(357,501,cs),
+(259,501,o),
+(209,461,o),
+(188,371,c),
+(162,371,l)
+);
+}
+);
+width = 560;
+}
+);
+partsSettings = (
+{
+bottomName = Low;
+bottomValue = -100;
+name = crotchDepth;
+topName = High;
+topValue = 0;
+},
+{
+bottomName = Low;
+bottomValue = 0;
+name = shoulderWidth;
+topName = High;
+topValue = 100;
+}
+);
+}
diff --git a/tests/data/GlyphsUnitTestSans3.glyphspackage/glyphs/_part.stem.glyph b/tests/data/GlyphsUnitTestSans3.glyphspackage/glyphs/_part.stem.glyph
new file mode 100644
index 0000000..062f498
--- /dev/null
+++ b/tests/data/GlyphsUnitTestSans3.glyphspackage/glyphs/_part.stem.glyph
@@ -0,0 +1,215 @@
+{
+export = 0;
+glyphname = _part.stem;
+layers = (
+{
+anchors = (
+{
+name = connect;
+pos = (117,0);
+}
+);
+layerId = "C4872ECA-A3A9-40AB-960A-1DB2202F16DE";
+partSelection = {
+height = 1;
+};
+shapes = (
+{
+closed = 1;
+nodes = (
+(119,368,l),
+(115,470,l),
+(100,470,l),
+(100,0,l),
+(117,0,l),
+(117,306,l)
+);
+}
+);
+width = 600;
+},
+{
+anchors = (
+{
+name = connect;
+pos = (167,0);
+}
+);
+layerId = "3E7589AA-8194-470F-8E2F-13C1C581BE24";
+partSelection = {
+height = 1;
+};
+shapes = (
+{
+closed = 1;
+nodes = (
+(149,393,l),
+(139,480,l),
+(77,480,l),
+(77,0,l),
+(167,0,l),
+(167,286,l)
+);
+}
+);
+width = 600;
+},
+{
+anchors = (
+{
+name = connect;
+pos = (250,0);
+}
+);
+layerId = "BFFFD157-90D3-4B85-B99D-9A2F366F03CA";
+partSelection = {
+height = 1;
+};
+shapes = (
+{
+closed = 1;
+nodes = (
+(181,385,l),
+(162,490,l),
+(30,490,l),
+(30,0,l),
+(250,0,l),
+(250,256,l)
+);
+}
+);
+width = 600;
+},
+{
+anchors = (
+{
+name = connect;
+pos = (117,0);
+}
+);
+associatedMasterId = "C4872ECA-A3A9-40AB-960A-1DB2202F16DE";
+layerId = "0D68D3E9-A0B2-4D78-A161-EB65D8511F0A";
+name = TallStem;
+partSelection = {
+height = 2;
+};
+shapes = (
+{
+closed = 1;
+nodes = (
+(117,368,l),
+(117,800,l),
+(100,800,l),
+(100,0,l),
+(117,0,l),
+(117,306,l)
+);
+}
+);
+width = 600;
+},
+{
+anchors = (
+{
+name = connect;
+pos = (167,0);
+}
+);
+associatedMasterId = "3E7589AA-8194-470F-8E2F-13C1C581BE24";
+layerId = "3E1733D9-3B83-4E6A-B1E9-6381BBE1BD3A";
+name = TallStem;
+partSelection = {
+height = 2;
+};
+shapes = (
+{
+closed = 1;
+nodes = (
+(167,393,l),
+(167,800,l),
+(77,800,l),
+(77,0,l),
+(167,0,l),
+(167,286,l)
+);
+}
+);
+width = 600;
+},
+{
+anchors = (
+{
+name = connect;
+pos = (250,0);
+}
+);
+associatedMasterId = "BFFFD157-90D3-4B85-B99D-9A2F366F03CA";
+layerId = "FD65D427-9013-43E2-9F74-398D99AA4763";
+name = TallStem;
+partSelection = {
+height = 2;
+};
+shapes = (
+{
+closed = 1;
+nodes = (
+(250,385,l),
+(250,800,l),
+(30,800,l),
+(30,0,l),
+(250,0,l),
+(250,256,l)
+);
+}
+);
+userData = {
+com.typemytype.robofont.layerData = {
+"Regular Nov 6 15, 18:44" = {
+anchors = (
+);
+components = (
+{
+baseGlyph = tmA;
+transformation = (
+1,
+0,
+0,
+1,
+0,
+0
+);
+}
+);
+contours = (
+{
+points = (
+{
+smooth = 0;
+x = 2570;
+y = -907;
+}
+);
+}
+);
+lib = {
+};
+name = tmAA;
+unicodes = (
+);
+width = 3047;
+};
+};
+};
+width = 600;
+}
+);
+partsSettings = (
+{
+bottomName = Low;
+bottomValue = 0;
+name = height;
+topName = High;
+topValue = 100;
+}
+);
+}
diff --git a/tests/data/GlyphsUnitTestSans3.glyphspackage/glyphs/a.glyph b/tests/data/GlyphsUnitTestSans3.glyphspackage/glyphs/a.glyph
new file mode 100644
index 0000000..85f3ac2
--- /dev/null
+++ b/tests/data/GlyphsUnitTestSans3.glyphspackage/glyphs/a.glyph
@@ -0,0 +1,532 @@
+{
+glyphname = a;
+kernLeft = a;
+kernRight = a;
+layers = (
+{
+anchors = (
+{
+name = bottom;
+pos = (184,0);
+},
+{
+name = ogonek;
+pos = (488,0);
+},
+{
+name = top;
+pos = (258,490);
+}
+);
+background = {
+shapes = (
+{
+closed = 1;
+nodes = (
+(268,153,ls),
+(268,123,o),
+(254,113,o),
+(236,113,cs),
+(214,113,o),
+(205,127,o),
+(205,143,cs),
+(205,155,o),
+(210,164,o),
+(218,170,cs),
+(233,181,o),
+(254,182,o),
+(275,182,c),
+(295,289,l),
+(203,289,o),
+(123,277,o),
+(72,240,cs),
+(40,216,o),
+(21,182,o),
+(21,133,cs),
+(21,49,o),
+(75,-8,o),
+(184,-8,cs),
+(260,-8,o),
+(301,16,o),
+(322,49,c),
+(309,57,l),
+(336,0,l),
+(488,0,l),
+(488,454,l),
+(437,484,o),
+(354,505,o),
+(255,505,cs),
+(167,505,o),
+(86,489,o),
+(25,461,c),
+(56,298,l),
+(90,311,o),
+(134,322,o),
+(194,322,cs),
+(225,322,o),
+(270,319,o),
+(308,305,c),
+(268,392,l)
+);
+}
+);
+};
+layerId = "BFFFD157-90D3-4B85-B99D-9A2F366F03CA";
+shapes = (
+{
+closed = 1;
+nodes = (
+(268,153,ls),
+(268,123,o),
+(254,113,o),
+(236,113,cs),
+(214,113,o),
+(205,127,o),
+(205,143,cs),
+(205,155,o),
+(210,164,o),
+(218,170,cs),
+(233,181,o),
+(254,182,o),
+(275,182,c),
+(295,289,l),
+(203,289,o),
+(123,277,o),
+(72,240,cs),
+(40,216,o),
+(21,182,o),
+(21,133,cs),
+(21,49,o),
+(75,-8,o),
+(184,-8,cs),
+(250,-8,o),
+(288,12,o),
+(310,44,c),
+(320,44,l),
+(336,0,l),
+(488,0,l),
+(488,454,l),
+(437,484,o),
+(354,505,o),
+(255,505,cs),
+(167,505,o),
+(86,489,o),
+(25,461,c),
+(56,298,l),
+(90,311,o),
+(134,322,o),
+(194,322,cs),
+(225,322,o),
+(270,319,o),
+(308,305,c),
+(268,392,l)
+);
+}
+);
+width = 518;
+},
+{
+anchors = (
+{
+name = bottom;
+pos = (218,0);
+},
+{
+name = ogonek;
+pos = (423,0);
+},
+{
+name = top;
+pos = (248,480);
+}
+);
+annotations = (
+{
+pos = (427,535);
+text = "This is a text annotation";
+type = Text;
+},
+{
+angle = 41.22902;
+pos = (436,446);
+type = Arrow;
+},
+{
+pos = (334.937,407.08);
+type = Circle;
+width = 65.05341;
+},
+{
+pos = (301,49);
+type = Plus;
+},
+{
+pos = (372,172);
+type = Minus;
+}
+);
+background = {
+shapes = (
+{
+closed = 1;
+nodes = (
+(333,176,ls),
+(333,119,o),
+(309,69,o),
+(231,69,cs),
+(170,69,o),
+(153,99,o),
+(153,127,cs),
+(153,152,o),
+(166,169,o),
+(183,179,cs),
+(219,201,o),
+(284,204,o),
+(338,204,c),
+(338,282,l),
+(249,282,o),
+(193,276,o),
+(142,251,cs),
+(94,227,o),
+(65,184,o),
+(65,124,cs),
+(65,41,o),
+(119,-11,o),
+(215,-11,cs),
+(283,-11,o),
+(325,14,o),
+(352,56,c),
+(330,67,l),
+(346,0,l),
+(423,0,l),
+(423,435,l),
+(383,468,o),
+(317,492,o),
+(237,492,cs),
+(172,492,o),
+(117,476,o),
+(72,460,c),
+(86,371,l),
+(122,387,o),
+(167,400,o),
+(226,400,cs),
+(263,400,o),
+(312,395,o),
+(353,361,c),
+(333,454,l)
+);
+}
+);
+};
+layerId = "3E7589AA-8194-470F-8E2F-13C1C581BE24";
+shapes = (
+{
+closed = 1;
+nodes = (
+(333,176,ls),
+(333,119,o),
+(309,69,o),
+(231,69,cs),
+(170,69,o),
+(153,99,o),
+(153,127,cs),
+(153,152,o),
+(166,169,o),
+(183,179,cs),
+(219,200,o),
+(284,204,o),
+(338,204,c),
+(338,282,l),
+(249,282,o),
+(193,276,o),
+(142,251,cs),
+(94,227,o),
+(65,185,o),
+(65,125,cs),
+(65,42,o),
+(119,-11,o),
+(215,-11,cs),
+(277,-11,o),
+(310,11,o),
+(330,41,c),
+(338,41,l),
+(346,0,l),
+(423,0,l),
+(423,435,l),
+(383,468,o),
+(316,492,o),
+(232,492,cs),
+(171,492,o),
+(116,479,o),
+(72,460,c),
+(86,371,l),
+(122,388,o),
+(166,400,o),
+(225,400,cs),
+(262,400,o),
+(312,395,o),
+(353,361,c),
+(333,454,l)
+);
+}
+);
+width = 496;
+},
+{
+anchors = (
+{
+name = bottom;
+pos = (218,0);
+},
+{
+name = ogonek;
+pos = (369,0);
+},
+{
+name = top;
+pos = (226,471);
+}
+);
+background = {
+shapes = (
+{
+closed = 1;
+nodes = (
+(352,147,ls),
+(352,68,o),
+(314,7,o),
+(212,7,cs),
+(132,7,o),
+(97,47,o),
+(97,105,cs),
+(97,136,o),
+(107,160,o),
+(125,178,cs),
+(166,219,o),
+(249,224,o),
+(355,224,c),
+(355,241,l),
+(245,241,o),
+(158,233,o),
+(113,190,cs),
+(92,169,o),
+(80,141,o),
+(80,105,cs),
+(80,39,o),
+(119,-10,o),
+(212,-10,cs),
+(281,-10,o),
+(336,15,o),
+(357,83,c),
+(351,91,l),
+(354,0,l),
+(369,0,l),
+(369,428,l),
+(333,460,o),
+(291,480,o),
+(224,480,cs),
+(163,480,o),
+(116,462,o),
+(82,438,c),
+(87,423,l),
+(123,448,o),
+(167,463,o),
+(224,463,cs),
+(284,463,o),
+(323,445,o),
+(355,417,c),
+(352,429,l)
+);
+}
+);
+};
+layerId = "C4872ECA-A3A9-40AB-960A-1DB2202F16DE";
+shapes = (
+{
+closed = 1;
+nodes = (
+(352,147,ls,{
+name = Hello;
+rememberToMakeCoffee = "1";
+}),
+(352,68,o),
+(314,7,o),
+(212,7,cs),
+(132,7,o),
+(97,47,o),
+(97,105,cs),
+(97,136,o),
+(107,160,o),
+(125,178,cs),
+(166,219,o),
+(249,224,o),
+(355,224,c),
+(355,241,l),
+(245,241,o),
+(158,233,o),
+(113,190,cs),
+(92,169,o),
+(80,141,o),
+(80,105,cs),
+(80,39,o),
+(119,-10,o),
+(212,-10,cs),
+(283,-10,o),
+(334,18,o),
+(349,68,c),
+(352,68,l),
+(354,0,l),
+(369,0,l),
+(369,428,l),
+(333,460,o),
+(291,480,o),
+(224,480,cs),
+(163,480,o),
+(116,462,o),
+(82,438,c),
+(87,423,l),
+(123,448,o),
+(167,463,o),
+(224,463,cs),
+(284,463,o),
+(323,445,o),
+(355,417,c),
+(352,429,l)
+);
+}
+);
+width = 456;
+},
+{
+anchors = (
+{
+name = bottom;
+pos = (189,0);
+},
+{
+name = ogonek;
+pos = (446,0);
+},
+{
+name = top;
+pos = (237,485);
+}
+);
+associatedMasterId = "3E7589AA-8194-470F-8E2F-13C1C581BE24";
+attr = {
+coordinates = (
+155
+);
+};
+background = {
+shapes = (
+{
+closed = 1;
+nodes = (
+(291,164,ls),
+(291,129,o),
+(272,107,o),
+(224,107,cs),
+(182,107,o),
+(169,123,o),
+(169,140,cs),
+(169,155,o),
+(178,165,o),
+(191,172,cs),
+(216,185,o),
+(259,186,o),
+(297,186,c),
+(306,298,l),
+(216,294,o),
+(148,288,o),
+(97,255,cs),
+(58,230,o),
+(34,187,o),
+(34,130,cs),
+(34,40,o),
+(87,-10,o),
+(190,-10,cs),
+(262,-10,o),
+(303,15,o),
+(327,53,c),
+(310,62,l),
+(331,0,l),
+(446,0,l),
+(446,445,l),
+(400,476,o),
+(326,499,o),
+(236,499,cs),
+(160,499,o),
+(92,483,o),
+(39,461,c),
+(61,329,l),
+(96,343,o),
+(141,355,o),
+(200,355,cs),
+(234,355,o),
+(281,351,o),
+(321,327,c),
+(291,423,l)
+);
+}
+);
+};
+layerId = "1FA54028-AD2E-4209-AA7B-72DF2DF16264";
+name = "{155, 100}";
+shapes = (
+{
+closed = 1;
+nodes = (
+(301,174,ls),
+(301,129,o),
+(272,107,o),
+(224,107,cs),
+(182,107,o),
+(169,123,o),
+(169,140,cs),
+(169,155,o),
+(178,165,o),
+(191,172,cs),
+(216,185,o),
+(259,186,o),
+(307,186,c),
+(306,298,l),
+(216,294,o),
+(148,288,o),
+(97,255,cs),
+(58,230,o),
+(34,190,o),
+(34,132,cs),
+(34,47,o),
+(81,-10,o),
+(190,-10,cs),
+(252,-10,o),
+(297,8,o),
+(320,42,c),
+(329,42,l),
+(341,0,l),
+(446,0,l),
+(446,445,l),
+(400,476,o),
+(326,499,o),
+(236,499,cs),
+(160,499,o),
+(92,483,o),
+(39,461,c),
+(61,329,l),
+(96,343,o),
+(141,355,o),
+(200,355,cs),
+(234,355,o),
+(281,351,o),
+(321,327,c),
+(301,423,l)
+);
+}
+);
+width = 496;
+}
+);
+metricRight = m;
+unicode = 97;
+}
diff --git a/tests/data/GlyphsUnitTestSans3.glyphspackage/glyphs/a.sc.glyph b/tests/data/GlyphsUnitTestSans3.glyphspackage/glyphs/a.sc.glyph
new file mode 100644
index 0000000..52b2d53
--- /dev/null
+++ b/tests/data/GlyphsUnitTestSans3.glyphspackage/glyphs/a.sc.glyph
@@ -0,0 +1,135 @@
+{
+color = 10;
+glyphname = a.sc;
+kernLeft = A.sc;
+kernRight = A.sc;
+layers = (
+{
+anchors = (
+{
+name = bottom;
+pos = (307,0);
+},
+{
+name = ogonek;
+pos = (608,0);
+},
+{
+name = top;
+pos = (307,552);
+}
+);
+layerId = "BFFFD157-90D3-4B85-B99D-9A2F366F03CA";
+shapes = (
+{
+closed = 1;
+nodes = (
+(461,552,l),
+(158,552,l),
+(5,0,l),
+(208,0,l),
+(289,351,l),
+(312,351,l),
+(395,0,l),
+(608,0,l)
+);
+},
+{
+closed = 1;
+nodes = (
+(122,234,l),
+(115,65,l),
+(495,65,l),
+(498,234,l)
+);
+}
+);
+width = 613;
+},
+{
+anchors = (
+{
+name = bottom;
+pos = (268,0);
+},
+{
+name = ogonek;
+pos = (511,0);
+},
+{
+name = top;
+pos = (268,540);
+}
+);
+layerId = "3E7589AA-8194-470F-8E2F-13C1C581BE24";
+shapes = (
+{
+closed = 1;
+nodes = (
+(357,540,l),
+(191,540,l),
+(24,0,l),
+(119,0,l),
+(255,448,l),
+(277,448,l),
+(414,0,l),
+(511,0,l)
+);
+},
+{
+closed = 1;
+nodes = (
+(114,208,l),
+(111,125,l),
+(424,125,l),
+(427,208,l)
+);
+}
+);
+width = 535;
+},
+{
+anchors = (
+{
+name = bottom;
+pos = (240,0);
+},
+{
+name = ogonek;
+pos = (445,0);
+},
+{
+name = top;
+pos = (240,528);
+}
+);
+layerId = "C4872ECA-A3A9-40AB-960A-1DB2202F16DE";
+shapes = (
+{
+closed = 1;
+nodes = (
+(252,528,l),
+(228,528,l),
+(33,0,l),
+(41,0,l),
+(234,519,l),
+(247,519,l),
+(437,0,l),
+(445,0,l)
+);
+},
+{
+closed = 1;
+nodes = (
+(99,167,l),
+(95,159,l),
+(384,159,l),
+(380,167,l)
+);
+}
+);
+width = 478;
+}
+);
+metricRight = "=|";
+}
diff --git a/tests/data/GlyphsUnitTestSans3.glyphspackage/glyphs/adieresis.glyph b/tests/data/GlyphsUnitTestSans3.glyphspackage/glyphs/adieresis.glyph
new file mode 100644
index 0000000..dcb0ff7
--- /dev/null
+++ b/tests/data/GlyphsUnitTestSans3.glyphspackage/glyphs/adieresis.glyph
@@ -0,0 +1,45 @@
+{
+glyphname = adieresis;
+layers = (
+{
+layerId = "C4872ECA-A3A9-40AB-960A-1DB2202F16DE";
+shapes = (
+{
+ref = a;
+},
+{
+pos = (39,1);
+ref = dieresis;
+}
+);
+width = 456;
+},
+{
+layerId = "3E7589AA-8194-470F-8E2F-13C1C581BE24";
+shapes = (
+{
+ref = a;
+},
+{
+pos = (47,0);
+ref = dieresis;
+}
+);
+width = 496;
+},
+{
+layerId = "BFFFD157-90D3-4B85-B99D-9A2F366F03CA";
+shapes = (
+{
+ref = a;
+},
+{
+pos = (-9,0);
+ref = dieresis;
+}
+);
+width = 518;
+}
+);
+unicode = 228;
+}
diff --git a/tests/data/GlyphsUnitTestSans3.glyphspackage/glyphs/dieresis.glyph b/tests/data/GlyphsUnitTestSans3.glyphspackage/glyphs/dieresis.glyph
new file mode 100644
index 0000000..0363dec
--- /dev/null
+++ b/tests/data/GlyphsUnitTestSans3.glyphspackage/glyphs/dieresis.glyph
@@ -0,0 +1,108 @@
+{
+glyphname = dieresis;
+layers = (
+{
+anchors = (
+{
+name = _top;
+pos = (187,470);
+},
+{
+name = top;
+pos = (188,650);
+}
+);
+layerId = "C4872ECA-A3A9-40AB-960A-1DB2202F16DE";
+shapes = (
+{
+closed = 1;
+nodes = (
+(261,650,l),
+(261,621,l),
+(289,621,l),
+(289,650,l)
+);
+},
+{
+closed = 1;
+nodes = (
+(88,650,l),
+(88,621,l),
+(116,621,l),
+(116,650,l)
+);
+}
+);
+width = 600;
+},
+{
+anchors = (
+{
+name = _top;
+pos = (201,480);
+},
+{
+name = top;
+pos = (201,700);
+}
+);
+layerId = "3E7589AA-8194-470F-8E2F-13C1C581BE24";
+shapes = (
+{
+closed = 1;
+nodes = (
+(252,700,l),
+(252,601,l),
+(349,601,l),
+(349,700,l)
+);
+},
+{
+closed = 1;
+nodes = (
+(52,700,l),
+(52,601,l),
+(149,601,l),
+(149,700,l)
+);
+}
+);
+width = 600;
+},
+{
+anchors = (
+{
+name = _top;
+pos = (267,490);
+},
+{
+name = top;
+pos = (267,740);
+}
+);
+layerId = "BFFFD157-90D3-4B85-B99D-9A2F366F03CA";
+shapes = (
+{
+closed = 1;
+nodes = (
+(298,735,l),
+(298,547,l),
+(482,547,l),
+(482,735,l)
+);
+},
+{
+closed = 1;
+nodes = (
+(48,735,l),
+(48,547,l),
+(232,547,l),
+(232,735,l)
+);
+}
+);
+width = 600;
+}
+);
+unicode = 168;
+}
diff --git a/tests/data/GlyphsUnitTestSans3.glyphspackage/glyphs/h.glyph b/tests/data/GlyphsUnitTestSans3.glyphspackage/glyphs/h.glyph
new file mode 100644
index 0000000..cbcf38a
--- /dev/null
+++ b/tests/data/GlyphsUnitTestSans3.glyphspackage/glyphs/h.glyph
@@ -0,0 +1,68 @@
+{
+glyphname = h;
+layers = (
+{
+layerId = "C4872ECA-A3A9-40AB-960A-1DB2202F16DE";
+shapes = (
+{
+alignment = -1;
+piece = {
+height = 100;
+};
+ref = _part.stem;
+},
+{
+alignment = -1;
+piece = {
+crotchDepth = -80.20097;
+};
+ref = _part.shoulder;
+}
+);
+width = 511;
+},
+{
+layerId = "3E7589AA-8194-470F-8E2F-13C1C581BE24";
+shapes = (
+{
+alignment = -1;
+piece = {
+height = 100;
+};
+ref = _part.stem;
+},
+{
+alignment = -1;
+piece = {
+crotchDepth = -80.20097;
+};
+ref = _part.shoulder;
+}
+);
+width = 532;
+},
+{
+layerId = "BFFFD157-90D3-4B85-B99D-9A2F366F03CA";
+shapes = (
+{
+alignment = -1;
+piece = {
+height = 100;
+};
+ref = _part.stem;
+},
+{
+alignment = -1;
+piece = {
+crotchDepth = -80.20097;
+};
+ref = _part.shoulder;
+}
+);
+width = 560;
+}
+);
+metricLeft = m;
+metricRight = m;
+unicode = 104;
+}
diff --git a/tests/data/GlyphsUnitTestSans3.glyphspackage/glyphs/m.glyph b/tests/data/GlyphsUnitTestSans3.glyphspackage/glyphs/m.glyph
new file mode 100644
index 0000000..d3abe78
--- /dev/null
+++ b/tests/data/GlyphsUnitTestSans3.glyphspackage/glyphs/m.glyph
@@ -0,0 +1,81 @@
+{
+glyphname = m;
+layers = (
+{
+layerId = "C4872ECA-A3A9-40AB-960A-1DB2202F16DE";
+shapes = (
+{
+alignment = -1;
+ref = _part.stem;
+},
+{
+alignment = -1;
+piece = {
+shoulderWidth = 0;
+};
+ref = _part.shoulder;
+},
+{
+alignment = -1;
+piece = {
+shoulderWidth = 0;
+};
+pos = (264,0);
+ref = _part.shoulder;
+}
+);
+width = 745;
+},
+{
+layerId = "BFFFD157-90D3-4B85-B99D-9A2F366F03CA";
+shapes = (
+{
+alignment = -1;
+ref = _part.stem;
+},
+{
+alignment = -1;
+piece = {
+shoulderWidth = 0;
+};
+ref = _part.shoulder;
+},
+{
+alignment = -1;
+piece = {
+shoulderWidth = 0;
+};
+pos = (270,0);
+ref = _part.shoulder;
+}
+);
+width = 820;
+},
+{
+layerId = "3E7589AA-8194-470F-8E2F-13C1C581BE24";
+shapes = (
+{
+alignment = -1;
+ref = _part.stem;
+},
+{
+alignment = -1;
+piece = {
+shoulderWidth = 0;
+};
+ref = _part.shoulder;
+},
+{
+alignment = -1;
+piece = {
+shoulderWidth = 0;
+};
+pos = (258,0);
+ref = _part.shoulder;
+}
+);
+width = 760;
+}
+);
+unicode = 109;
+}
diff --git a/tests/data/GlyphsUnitTestSans3.glyphspackage/glyphs/n.glyph b/tests/data/GlyphsUnitTestSans3.glyphspackage/glyphs/n.glyph
new file mode 100644
index 0000000..d55cb73
--- /dev/null
+++ b/tests/data/GlyphsUnitTestSans3.glyphspackage/glyphs/n.glyph
@@ -0,0 +1,142 @@
+{
+glyphname = n;
+kernLeft = n;
+kernRight = n;
+layers = (
+{
+background = {
+shapes = (
+{
+closed = 1;
+nodes = (
+(250,0,l),
+(250,240,ls),
+(250,272,o),
+(264,283,o),
+(284,283,cs),
+(295,283,o),
+(304,280,o),
+(310,276,c),
+(310,0,l),
+(530,0,l),
+(530,448,l),
+(490,478,o),
+(430,501,o),
+(357,501,cs),
+(256,501,o),
+(199,459,o),
+(173,386,c),
+(197,366,l),
+(162,490,l),
+(30,490,l),
+(30,0,l)
+);
+}
+);
+};
+layerId = "BFFFD157-90D3-4B85-B99D-9A2F366F03CA";
+shapes = (
+{
+alignment = -1;
+ref = _part.shoulder;
+},
+{
+alignment = -1;
+ref = _part.stem;
+}
+);
+width = 560;
+},
+{
+background = {
+shapes = (
+{
+closed = 1;
+nodes = (
+(167,0,l),
+(167,270,ls),
+(167,362,o),
+(209,402,o),
+(277,402,cs),
+(315,402,o),
+(345,390,o),
+(365,370,c),
+(365,0,l),
+(455,0,l),
+(455,423,l),
+(423,454,o),
+(374,490,o),
+(288,490,cs),
+(199,490,o),
+(150,452,o),
+(139,382,c),
+(159,356,l),
+(139,480,l),
+(77,480,l),
+(77,0,l)
+);
+}
+);
+};
+layerId = "3E7589AA-8194-470F-8E2F-13C1C581BE24";
+shapes = (
+{
+alignment = -1;
+ref = _part.shoulder;
+},
+{
+alignment = -1;
+ref = _part.stem;
+}
+);
+width = 528;
+},
+{
+background = {
+shapes = (
+{
+closed = 1;
+nodes = (
+(117,0,l),
+(117,322,ls),
+(117,435,o),
+(175,491,o),
+(270,491,cs),
+(324,491,o),
+(366,474,o),
+(394,445,c),
+(394,-1,l),
+(411,-1,l),
+(411,435,l),
+(378,475,o),
+(340,509,o),
+(263,509,cs),
+(180,509,o),
+(133,468,o),
+(117,406,c),
+(134,376,l),
+(123,500,l),
+(100,500,l),
+(100,0,l)
+);
+}
+);
+};
+layerId = "C4872ECA-A3A9-40AB-960A-1DB2202F16DE";
+shapes = (
+{
+alignment = -1;
+ref = _part.shoulder;
+},
+{
+alignment = -1;
+ref = _part.stem;
+}
+);
+width = 501;
+}
+);
+metricLeft = m;
+metricRight = m;
+unicode = 110;
+}
diff --git a/tests/data/GlyphsUnitTestSans3.glyphspackage/order.plist b/tests/data/GlyphsUnitTestSans3.glyphspackage/order.plist
new file mode 100644
index 0000000..4023bd5
--- /dev/null
+++ b/tests/data/GlyphsUnitTestSans3.glyphspackage/order.plist
@@ -0,0 +1,13 @@
+(
+A,
+Adieresis,
+a,
+adieresis,
+h,
+m,
+n,
+a.sc,
+dieresis,
+_part.shoulder,
+_part.stem
+)
\ No newline at end of file
diff --git a/tests/data/IncompatibleSans/IncompatibleSans-Bold.ufo/features.fea b/tests/data/IncompatibleSans/IncompatibleSans-Bold.ufo/features.fea
new file mode 100644
index 0000000..81b8851
--- /dev/null
+++ b/tests/data/IncompatibleSans/IncompatibleSans-Bold.ufo/features.fea
@@ -0,0 +1,8 @@
+table GDEF {
+  # automatic
+  GlyphClassDef
+    [A C], # Base
+    , # Liga
+    , # Mark
+    ;
+} GDEF;
diff --git a/tests/data/IncompatibleSans/IncompatibleSans-Bold.ufo/fontinfo.plist b/tests/data/IncompatibleSans/IncompatibleSans-Bold.ufo/fontinfo.plist
new file mode 100644
index 0000000..5e84de3
--- /dev/null
+++ b/tests/data/IncompatibleSans/IncompatibleSans-Bold.ufo/fontinfo.plist
@@ -0,0 +1,40 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+  <dict>
+    <key>ascender</key>
+    <integer>800</integer>
+    <key>capHeight</key>
+    <integer>700</integer>
+    <key>descender</key>
+    <integer>-200</integer>
+    <key>familyName</key>
+    <string>Incompatible Sans</string>
+    <key>italicAngle</key>
+    <integer>0</integer>
+    <key>openTypeHeadCreated</key>
+    <string>2021/12/09 10:23:05</string>
+    <key>openTypeOS2Type</key>
+    <array>
+      <integer>3</integer>
+    </array>
+    <key>postscriptUnderlinePosition</key>
+    <integer>-100</integer>
+    <key>postscriptUnderlineThickness</key>
+    <integer>50</integer>
+    <key>styleMapFamilyName</key>
+    <string>Incompatible Sans</string>
+    <key>styleMapStyleName</key>
+    <string>bold</string>
+    <key>styleName</key>
+    <string>Bold</string>
+    <key>unitsPerEm</key>
+    <integer>1000</integer>
+    <key>versionMajor</key>
+    <integer>1</integer>
+    <key>versionMinor</key>
+    <integer>0</integer>
+    <key>xHeight</key>
+    <integer>500</integer>
+  </dict>
+</plist>
diff --git a/tests/data/IncompatibleSans/IncompatibleSans-Bold.ufo/glyphs/A_.glif b/tests/data/IncompatibleSans/IncompatibleSans-Bold.ufo/glyphs/A_.glif
new file mode 100644
index 0000000..9eb08db
--- /dev/null
+++ b/tests/data/IncompatibleSans/IncompatibleSans-Bold.ufo/glyphs/A_.glif
@@ -0,0 +1,36 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<glyph name="A" format="2">
+  <advance width="833"/>
+  <unicode hex="0041"/>
+  <anchor x="679" y="403" name="foo"/>
+  <outline>
+    <contour>
+      <point x="294" y="321" type="line"/>
+      <point x="383" y="556" type="line" smooth="yes"/>
+      <point x="398.333" y="596.667"/>
+      <point x="409.333" y="633.333"/>
+      <point x="416" y="666" type="curve"/>
+      <point x="424" y="614"/>
+      <point x="439" y="593"/>
+      <point x="451" y="556" type="curve"/>
+      <point x="540" y="321" type="line"/>
+      <point x="294" y="321" type="line"/>
+    </contour>
+    <contour>
+      <point x="753" y="0" type="line"/>
+      <point x="454" y="762" type="line"/>
+      <point x="380" y="762" type="line"/>
+      <point x="80" y="0" type="line"/>
+      <point x="169" y="0" type="line"/>
+      <point x="263" y="242" type="line"/>
+      <point x="567" y="242" type="line"/>
+      <point x="662" y="0" type="line"/>
+    </contour>
+    <contour>
+      <point x="621" y="642" type="line"/>
+      <point x="621" y="569" type="line"/>
+      <point x="705" y="569" type="line"/>
+      <point x="705" y="642" type="line"/>
+    </contour>
+  </outline>
+</glyph>
diff --git a/tests/data/IncompatibleSans/IncompatibleSans-Bold.ufo/glyphs/B_.glif b/tests/data/IncompatibleSans/IncompatibleSans-Bold.ufo/glyphs/B_.glif
new file mode 100644
index 0000000..1e75fef
--- /dev/null
+++ b/tests/data/IncompatibleSans/IncompatibleSans-Bold.ufo/glyphs/B_.glif
@@ -0,0 +1,19 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<glyph name="B" format="2">
+  <advance width="600"/>
+  <unicode hex="0042"/>
+  <outline>
+    <contour>
+      <point x="303" y="73" type="curve" smooth="yes"/>
+      <point x="434" y="73"/>
+      <point x="540" y="179"/>
+      <point x="540" y="311" type="curve"/>
+      <point x="303" y="548" type="line"/>
+      <point x="171" y="548"/>
+      <point x="65" y="442"/>
+      <point x="65" y="311" type="curve" smooth="yes"/>
+      <point x="65" y="179"/>
+      <point x="171" y="73"/>
+    </contour>
+  </outline>
+</glyph>
diff --git a/tests/data/IncompatibleSans/IncompatibleSans-Bold.ufo/glyphs/C_.glif b/tests/data/IncompatibleSans/IncompatibleSans-Bold.ufo/glyphs/C_.glif
new file mode 100644
index 0000000..801ea96
--- /dev/null
+++ b/tests/data/IncompatibleSans/IncompatibleSans-Bold.ufo/glyphs/C_.glif
@@ -0,0 +1,9 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<glyph name="C" format="2">
+  <advance width="833"/>
+  <unicode hex="0043"/>
+  <anchor x="679" y="403" name="foo"/>
+  <outline>
+    <component base="A"/>
+  </outline>
+</glyph>
diff --git a/tests/data/IncompatibleSans/IncompatibleSans-Bold.ufo/glyphs/D_.glif b/tests/data/IncompatibleSans/IncompatibleSans-Bold.ufo/glyphs/D_.glif
new file mode 100644
index 0000000..07a6772
--- /dev/null
+++ b/tests/data/IncompatibleSans/IncompatibleSans-Bold.ufo/glyphs/D_.glif
@@ -0,0 +1,21 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<glyph name="D" format="2">
+  <advance width="600"/>
+  <unicode hex="0044"/>
+  <outline>
+    <contour>
+      <point x="453" y="566" type="line"/>
+      <point x="352" y="564" type="line"/>
+      <point x="280" y="634" type="line"/>
+      <point x="109" y="560" type="line"/>
+      <point x="111" y="459" type="line"/>
+      <point x="41" y="387" type="line"/>
+      <point x="115" y="216" type="line"/>
+      <point x="216" y="218" type="line"/>
+      <point x="288" y="148" type="line"/>
+      <point x="459" y="222" type="line"/>
+      <point x="457" y="323" type="line"/>
+      <point x="527" y="395" type="line"/>
+    </contour>
+  </outline>
+</glyph>
diff --git a/tests/data/IncompatibleSans/IncompatibleSans-Bold.ufo/glyphs/contents.plist b/tests/data/IncompatibleSans/IncompatibleSans-Bold.ufo/glyphs/contents.plist
new file mode 100644
index 0000000..452f7d4
--- /dev/null
+++ b/tests/data/IncompatibleSans/IncompatibleSans-Bold.ufo/glyphs/contents.plist
@@ -0,0 +1,16 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+  <dict>
+    <key>A</key>
+    <string>A_.glif</string>
+    <key>B</key>
+    <string>B_.glif</string>
+    <key>C</key>
+    <string>C_.glif</string>
+    <key>D</key>
+    <string>D_.glif</string>
+    <key>space</key>
+    <string>space.glif</string>
+  </dict>
+</plist>
diff --git a/tests/data/IncompatibleSans/IncompatibleSans-Bold.ufo/glyphs/space.glif b/tests/data/IncompatibleSans/IncompatibleSans-Bold.ufo/glyphs/space.glif
new file mode 100644
index 0000000..9833481
--- /dev/null
+++ b/tests/data/IncompatibleSans/IncompatibleSans-Bold.ufo/glyphs/space.glif
@@ -0,0 +1,7 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<glyph name="space" format="2">
+  <advance width="600"/>
+  <unicode hex="0020"/>
+  <outline>
+  </outline>
+</glyph>
diff --git a/tests/data/IncompatibleSans/IncompatibleSans-Bold.ufo/layercontents.plist b/tests/data/IncompatibleSans/IncompatibleSans-Bold.ufo/layercontents.plist
new file mode 100644
index 0000000..b9c1a4f
--- /dev/null
+++ b/tests/data/IncompatibleSans/IncompatibleSans-Bold.ufo/layercontents.plist
@@ -0,0 +1,10 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+  <array>
+    <array>
+      <string>public.default</string>
+      <string>glyphs</string>
+    </array>
+  </array>
+</plist>
diff --git a/tests/data/IncompatibleSans/IncompatibleSans-Bold.ufo/lib.plist b/tests/data/IncompatibleSans/IncompatibleSans-Bold.ufo/lib.plist
new file mode 100644
index 0000000..13f7c08
--- /dev/null
+++ b/tests/data/IncompatibleSans/IncompatibleSans-Bold.ufo/lib.plist
@@ -0,0 +1,57 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+  <dict>
+    <key>com.github.googlei18n.ufo2ft.filters</key>
+    <array>
+      <dict>
+        <key>name</key>
+        <string>eraseOpenCorners</string>
+        <key>namespace</key>
+        <string>glyphsLib.filters</string>
+        <key>pre</key>
+        <true/>
+      </dict>
+    </array>
+    <key>com.schriftgestaltung.appVersion</key>
+    <string>3091</string>
+    <key>com.schriftgestaltung.customParameter.GSFont.disablesAutomaticAlignment</key>
+    <false/>
+    <key>com.schriftgestaltung.customParameter.GSFont.useNiceNames</key>
+    <integer>1</integer>
+    <key>com.schriftgestaltung.customParameter.GSFontMaster.customValue</key>
+    <integer>0</integer>
+    <key>com.schriftgestaltung.customParameter.GSFontMaster.customValue1</key>
+    <integer>0</integer>
+    <key>com.schriftgestaltung.customParameter.GSFontMaster.customValue2</key>
+    <integer>0</integer>
+    <key>com.schriftgestaltung.customParameter.GSFontMaster.customValue3</key>
+    <integer>0</integer>
+    <key>com.schriftgestaltung.customParameter.GSFontMaster.iconName</key>
+    <string>Bold</string>
+    <key>com.schriftgestaltung.customParameter.GSFontMaster.weightValue</key>
+    <integer>1000</integer>
+    <key>com.schriftgestaltung.customParameter.GSFontMaster.widthValue</key>
+    <integer>100</integer>
+    <key>com.schriftgestaltung.fontMasterOrder</key>
+    <integer>1</integer>
+    <key>com.schriftgestaltung.keyboardIncrement</key>
+    <integer>1</integer>
+    <key>com.schriftgestaltung.weight</key>
+    <string>Regular</string>
+    <key>com.schriftgestaltung.weightValue</key>
+    <integer>1000</integer>
+    <key>com.schriftgestaltung.width</key>
+    <string>Regular</string>
+    <key>com.schriftgestaltung.widthValue</key>
+    <integer>100</integer>
+    <key>public.glyphOrder</key>
+    <array>
+      <string>A</string>
+      <string>B</string>
+      <string>C</string>
+      <string>D</string>
+      <string>space</string>
+    </array>
+  </dict>
+</plist>
diff --git a/tests/data/IncompatibleSans/IncompatibleSans-Bold.ufo/metainfo.plist b/tests/data/IncompatibleSans/IncompatibleSans-Bold.ufo/metainfo.plist
new file mode 100644
index 0000000..7b8b34a
--- /dev/null
+++ b/tests/data/IncompatibleSans/IncompatibleSans-Bold.ufo/metainfo.plist
@@ -0,0 +1,10 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+  <dict>
+    <key>creator</key>
+    <string>com.github.fonttools.ufoLib</string>
+    <key>formatVersion</key>
+    <integer>3</integer>
+  </dict>
+</plist>
diff --git a/tests/data/IncompatibleSans/IncompatibleSans-Regular.ufo/fontinfo.plist b/tests/data/IncompatibleSans/IncompatibleSans-Regular.ufo/fontinfo.plist
new file mode 100644
index 0000000..a934fd2
--- /dev/null
+++ b/tests/data/IncompatibleSans/IncompatibleSans-Regular.ufo/fontinfo.plist
@@ -0,0 +1,40 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+  <dict>
+    <key>ascender</key>
+    <integer>800</integer>
+    <key>capHeight</key>
+    <integer>0</integer>
+    <key>descender</key>
+    <integer>-200</integer>
+    <key>familyName</key>
+    <string>Incompatible Sans</string>
+    <key>italicAngle</key>
+    <integer>0</integer>
+    <key>openTypeHeadCreated</key>
+    <string>2021/12/09 10:23:05</string>
+    <key>openTypeOS2Type</key>
+    <array>
+      <integer>3</integer>
+    </array>
+    <key>postscriptUnderlinePosition</key>
+    <integer>-100</integer>
+    <key>postscriptUnderlineThickness</key>
+    <integer>50</integer>
+    <key>styleMapFamilyName</key>
+    <string>Incompatible Sans</string>
+    <key>styleMapStyleName</key>
+    <string>regular</string>
+    <key>styleName</key>
+    <string>Regular</string>
+    <key>unitsPerEm</key>
+    <integer>1000</integer>
+    <key>versionMajor</key>
+    <integer>1</integer>
+    <key>versionMinor</key>
+    <integer>0</integer>
+    <key>xHeight</key>
+    <integer>0</integer>
+  </dict>
+</plist>
diff --git a/tests/data/IncompatibleSans/IncompatibleSans-Regular.ufo/glyphs/A_.glif b/tests/data/IncompatibleSans/IncompatibleSans-Regular.ufo/glyphs/A_.glif
new file mode 100644
index 0000000..b9619f4
--- /dev/null
+++ b/tests/data/IncompatibleSans/IncompatibleSans-Regular.ufo/glyphs/A_.glif
@@ -0,0 +1,27 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<glyph name="A" format="2">
+  <advance width="833"/>
+  <unicode hex="0041"/>
+  <outline>
+    <contour>
+      <point x="294" y="321" type="line"/>
+      <point x="383" y="556" type="line" smooth="yes"/>
+      <point x="397.667" y="596.667"/>
+      <point x="408.667" y="633.333"/>
+      <point x="416" y="666" type="curve"/>
+      <point x="451" y="556" type="line"/>
+      <point x="540" y="321" type="line"/>
+      <point x="294" y="321" type="line"/>
+    </contour>
+    <contour>
+      <point x="753" y="0" type="line"/>
+      <point x="454" y="762" type="line"/>
+      <point x="380" y="762" type="line"/>
+      <point x="80" y="0" type="line"/>
+      <point x="169" y="0" type="line"/>
+      <point x="263" y="242" type="line"/>
+      <point x="567" y="242" type="line"/>
+      <point x="662" y="0" type="line"/>
+    </contour>
+  </outline>
+</glyph>
diff --git a/tests/data/IncompatibleSans/IncompatibleSans-Regular.ufo/glyphs/B_.glif b/tests/data/IncompatibleSans/IncompatibleSans-Regular.ufo/glyphs/B_.glif
new file mode 100644
index 0000000..32475e2
--- /dev/null
+++ b/tests/data/IncompatibleSans/IncompatibleSans-Regular.ufo/glyphs/B_.glif
@@ -0,0 +1,21 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<glyph name="B" format="2">
+  <advance width="600"/>
+  <unicode hex="0042"/>
+  <outline>
+    <contour>
+      <point x="272" y="174" type="curve" smooth="yes"/>
+      <point x="367" y="174"/>
+      <point x="445" y="252"/>
+      <point x="445" y="348" type="curve" smooth="yes"/>
+      <point x="445" y="443"/>
+      <point x="367" y="521"/>
+      <point x="272" y="521" type="curve" smooth="yes"/>
+      <point x="176" y="521"/>
+      <point x="98" y="443"/>
+      <point x="98" y="348" type="curve" smooth="yes"/>
+      <point x="98" y="252"/>
+      <point x="176" y="174"/>
+    </contour>
+  </outline>
+</glyph>
diff --git a/tests/data/IncompatibleSans/IncompatibleSans-Regular.ufo/glyphs/C_.glif b/tests/data/IncompatibleSans/IncompatibleSans-Regular.ufo/glyphs/C_.glif
new file mode 100644
index 0000000..348d05b
--- /dev/null
+++ b/tests/data/IncompatibleSans/IncompatibleSans-Regular.ufo/glyphs/C_.glif
@@ -0,0 +1,9 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<glyph name="C" format="2">
+  <advance width="1433"/>
+  <unicode hex="0043"/>
+  <outline>
+    <component base="A"/>
+    <component base="B" xOffset="833"/>
+  </outline>
+</glyph>
diff --git a/tests/data/IncompatibleSans/IncompatibleSans-Regular.ufo/glyphs/D_.glif b/tests/data/IncompatibleSans/IncompatibleSans-Regular.ufo/glyphs/D_.glif
new file mode 100644
index 0000000..6260561
--- /dev/null
+++ b/tests/data/IncompatibleSans/IncompatibleSans-Regular.ufo/glyphs/D_.glif
@@ -0,0 +1,21 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<glyph name="D" format="2">
+  <advance width="600"/>
+  <unicode hex="0044"/>
+  <outline>
+    <contour>
+      <point x="256" y="133" type="curve" smooth="yes"/>
+      <point x="361" y="133"/>
+      <point x="446" y="218"/>
+      <point x="446" y="323" type="curve" smooth="yes"/>
+      <point x="446" y="428"/>
+      <point x="361" y="513"/>
+      <point x="256" y="513" type="curve" smooth="yes"/>
+      <point x="151" y="513"/>
+      <point x="66" y="428"/>
+      <point x="66" y="323" type="curve" smooth="yes"/>
+      <point x="66" y="218"/>
+      <point x="151" y="133"/>
+    </contour>
+  </outline>
+</glyph>
diff --git a/tests/data/IncompatibleSans/IncompatibleSans-Regular.ufo/glyphs/contents.plist b/tests/data/IncompatibleSans/IncompatibleSans-Regular.ufo/glyphs/contents.plist
new file mode 100644
index 0000000..452f7d4
--- /dev/null
+++ b/tests/data/IncompatibleSans/IncompatibleSans-Regular.ufo/glyphs/contents.plist
@@ -0,0 +1,16 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+  <dict>
+    <key>A</key>
+    <string>A_.glif</string>
+    <key>B</key>
+    <string>B_.glif</string>
+    <key>C</key>
+    <string>C_.glif</string>
+    <key>D</key>
+    <string>D_.glif</string>
+    <key>space</key>
+    <string>space.glif</string>
+  </dict>
+</plist>
diff --git a/tests/data/IncompatibleSans/IncompatibleSans-Regular.ufo/glyphs/space.glif b/tests/data/IncompatibleSans/IncompatibleSans-Regular.ufo/glyphs/space.glif
new file mode 100644
index 0000000..c05cd73
--- /dev/null
+++ b/tests/data/IncompatibleSans/IncompatibleSans-Regular.ufo/glyphs/space.glif
@@ -0,0 +1,7 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<glyph name="space" format="2">
+  <advance width="200"/>
+  <unicode hex="0020"/>
+  <outline>
+  </outline>
+</glyph>
diff --git a/tests/data/IncompatibleSans/IncompatibleSans-Regular.ufo/layercontents.plist b/tests/data/IncompatibleSans/IncompatibleSans-Regular.ufo/layercontents.plist
new file mode 100644
index 0000000..b9c1a4f
--- /dev/null
+++ b/tests/data/IncompatibleSans/IncompatibleSans-Regular.ufo/layercontents.plist
@@ -0,0 +1,10 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+  <array>
+    <array>
+      <string>public.default</string>
+      <string>glyphs</string>
+    </array>
+  </array>
+</plist>
diff --git a/tests/data/IncompatibleSans/IncompatibleSans-Regular.ufo/lib.plist b/tests/data/IncompatibleSans/IncompatibleSans-Regular.ufo/lib.plist
new file mode 100644
index 0000000..602a42b
--- /dev/null
+++ b/tests/data/IncompatibleSans/IncompatibleSans-Regular.ufo/lib.plist
@@ -0,0 +1,57 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+  <dict>
+    <key>com.github.googlei18n.ufo2ft.filters</key>
+    <array>
+      <dict>
+        <key>name</key>
+        <string>eraseOpenCorners</string>
+        <key>namespace</key>
+        <string>glyphsLib.filters</string>
+        <key>pre</key>
+        <true/>
+      </dict>
+    </array>
+    <key>com.schriftgestaltung.appVersion</key>
+    <string>3091</string>
+    <key>com.schriftgestaltung.customParameter.GSFont.disablesAutomaticAlignment</key>
+    <false/>
+    <key>com.schriftgestaltung.customParameter.GSFont.useNiceNames</key>
+    <integer>1</integer>
+    <key>com.schriftgestaltung.customParameter.GSFontMaster.customValue</key>
+    <integer>0</integer>
+    <key>com.schriftgestaltung.customParameter.GSFontMaster.customValue1</key>
+    <integer>0</integer>
+    <key>com.schriftgestaltung.customParameter.GSFontMaster.customValue2</key>
+    <integer>0</integer>
+    <key>com.schriftgestaltung.customParameter.GSFontMaster.customValue3</key>
+    <integer>0</integer>
+    <key>com.schriftgestaltung.customParameter.GSFontMaster.iconName</key>
+    <string></string>
+    <key>com.schriftgestaltung.customParameter.GSFontMaster.weightValue</key>
+    <integer>200</integer>
+    <key>com.schriftgestaltung.customParameter.GSFontMaster.widthValue</key>
+    <integer>100</integer>
+    <key>com.schriftgestaltung.fontMasterOrder</key>
+    <integer>0</integer>
+    <key>com.schriftgestaltung.keyboardIncrement</key>
+    <integer>1</integer>
+    <key>com.schriftgestaltung.weight</key>
+    <string>Regular</string>
+    <key>com.schriftgestaltung.weightValue</key>
+    <integer>200</integer>
+    <key>com.schriftgestaltung.width</key>
+    <string>Regular</string>
+    <key>com.schriftgestaltung.widthValue</key>
+    <integer>100</integer>
+    <key>public.glyphOrder</key>
+    <array>
+      <string>A</string>
+      <string>B</string>
+      <string>C</string>
+      <string>D</string>
+      <string>space</string>
+    </array>
+  </dict>
+</plist>
diff --git a/tests/data/IncompatibleSans/IncompatibleSans-Regular.ufo/metainfo.plist b/tests/data/IncompatibleSans/IncompatibleSans-Regular.ufo/metainfo.plist
new file mode 100644
index 0000000..7b8b34a
--- /dev/null
+++ b/tests/data/IncompatibleSans/IncompatibleSans-Regular.ufo/metainfo.plist
@@ -0,0 +1,10 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+  <dict>
+    <key>creator</key>
+    <string>com.github.fonttools.ufoLib</string>
+    <key>formatVersion</key>
+    <integer>3</integer>
+  </dict>
+</plist>
diff --git a/tests/data/IncompatibleSans/IncompatibleSans.designspace b/tests/data/IncompatibleSans/IncompatibleSans.designspace
new file mode 100644
index 0000000..9e8dbcf
--- /dev/null
+++ b/tests/data/IncompatibleSans/IncompatibleSans.designspace
@@ -0,0 +1,22 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<designspace format="4.1">
+  <axes>
+    <axis tag="wght" name="Weight" minimum="200" maximum="1000" default="200"/>
+  </axes>
+  <sources>
+    <source filename="IncompatibleSans-Regular.ufo" name="Incompatible Sans Regular" familyname="Incompatible Sans" stylename="Regular">
+      <lib copy="1"/>
+      <groups copy="1"/>
+      <features copy="1"/>
+      <info copy="1"/>
+      <location>
+        <dimension name="Weight" xvalue="200"/>
+      </location>
+    </source>
+    <source filename="IncompatibleSans-Bold.ufo" name="Incompatible Sans Bold" familyname="Incompatible Sans" stylename="Bold">
+      <location>
+        <dimension name="Weight" xvalue="1000"/>
+      </location>
+    </source>
+  </sources>
+</designspace>
diff --git a/tests/data/InstantiatorStrictMathGlyph/SquareOne.ufo/fontinfo.plist b/tests/data/InstantiatorStrictMathGlyph/SquareOne.ufo/fontinfo.plist
new file mode 100644
index 0000000..408169d
--- /dev/null
+++ b/tests/data/InstantiatorStrictMathGlyph/SquareOne.ufo/fontinfo.plist
@@ -0,0 +1,34 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+  <dict>
+    <key>ascender</key>
+    <integer>750</integer>
+    <key>capHeight</key>
+    <integer>750</integer>
+    <key>descender</key>
+    <integer>-250</integer>
+    <key>familyName</key>
+    <string>Test Ufo</string>
+    <key>guidelines</key>
+    <array/>
+    <key>postscriptBlueValues</key>
+    <array/>
+    <key>postscriptFamilyBlues</key>
+    <array/>
+    <key>postscriptFamilyOtherBlues</key>
+    <array/>
+    <key>postscriptOtherBlues</key>
+    <array/>
+    <key>postscriptStemSnapH</key>
+    <array/>
+    <key>postscriptStemSnapV</key>
+    <array/>
+    <key>styleName</key>
+    <string>Bold</string>
+    <key>unitsPerEm</key>
+    <integer>1000</integer>
+    <key>xHeight</key>
+    <integer>500</integer>
+  </dict>
+</plist>
diff --git a/tests/data/InstantiatorStrictMathGlyph/SquareOne.ufo/glyphs/contents.plist b/tests/data/InstantiatorStrictMathGlyph/SquareOne.ufo/glyphs/contents.plist
new file mode 100644
index 0000000..452a52b
--- /dev/null
+++ b/tests/data/InstantiatorStrictMathGlyph/SquareOne.ufo/glyphs/contents.plist
@@ -0,0 +1,8 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+  <dict>
+    <key>test</key>
+    <string>test.glif</string>
+  </dict>
+</plist>
diff --git a/tests/data/InstantiatorStrictMathGlyph/SquareOne.ufo/glyphs/layerinfo.plist b/tests/data/InstantiatorStrictMathGlyph/SquareOne.ufo/glyphs/layerinfo.plist
new file mode 100644
index 0000000..3cf39b4
--- /dev/null
+++ b/tests/data/InstantiatorStrictMathGlyph/SquareOne.ufo/glyphs/layerinfo.plist
@@ -0,0 +1,8 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+  <dict>
+    <key>color</key>
+    <string>1,0.75,0,0.7</string>
+  </dict>
+</plist>
diff --git a/tests/data/InstantiatorStrictMathGlyph/SquareOne.ufo/glyphs/test.glif b/tests/data/InstantiatorStrictMathGlyph/SquareOne.ufo/glyphs/test.glif
new file mode 100644
index 0000000..8f41310
--- /dev/null
+++ b/tests/data/InstantiatorStrictMathGlyph/SquareOne.ufo/glyphs/test.glif
@@ -0,0 +1,24 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<glyph name="test" format="2">
+  <advance width="500"/>
+  <outline>
+    <contour>
+      <point x="19" y="17" type="curve"/>
+      <point x="481" y="17" type="line"/>
+      <point x="481.0" y="17.0"/>
+      <point x="481.0" y="17.0"/>
+      <point x="481" y="17" type="curve"/>
+      <point x="481" y="479" type="line"/>
+      <point x="481.0" y="479.0"/>
+      <point x="481.0" y="479.0"/>
+      <point x="481" y="479" type="curve"/>
+      <point x="19" y="479" type="line"/>
+      <point x="19.0" y="479.0"/>
+      <point x="19.0" y="479.0"/>
+      <point x="19" y="479" type="curve"/>
+      <point x="19" y="17" type="line"/>
+      <point x="19.0" y="17.0"/>
+      <point x="19.0" y="17.0"/>
+    </contour>
+  </outline>
+</glyph>
diff --git a/tests/data/InstantiatorStrictMathGlyph/SquareOne.ufo/layercontents.plist b/tests/data/InstantiatorStrictMathGlyph/SquareOne.ufo/layercontents.plist
new file mode 100644
index 0000000..047e152
--- /dev/null
+++ b/tests/data/InstantiatorStrictMathGlyph/SquareOne.ufo/layercontents.plist
@@ -0,0 +1,10 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+  <array>
+    <array>
+      <string>foreground</string>
+      <string>glyphs</string>
+    </array>
+  </array>
+</plist>
diff --git a/tests/data/InstantiatorStrictMathGlyph/SquareOne.ufo/lib.plist b/tests/data/InstantiatorStrictMathGlyph/SquareOne.ufo/lib.plist
new file mode 100644
index 0000000..5febabe
--- /dev/null
+++ b/tests/data/InstantiatorStrictMathGlyph/SquareOne.ufo/lib.plist
@@ -0,0 +1,28 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+  <dict>
+    <key>com.typemytype.robofont.compileSettings.autohint</key>
+    <true/>
+    <key>com.typemytype.robofont.compileSettings.checkOutlines</key>
+    <false/>
+    <key>com.typemytype.robofont.compileSettings.createDummyDSIG</key>
+    <true/>
+    <key>com.typemytype.robofont.compileSettings.decompose</key>
+    <false/>
+    <key>com.typemytype.robofont.compileSettings.generateFormat</key>
+    <integer>0</integer>
+    <key>com.typemytype.robofont.compileSettings.releaseMode</key>
+    <false/>
+    <key>com.typemytype.robofont.italicSlantOffset</key>
+    <integer>0</integer>
+    <key>com.typemytype.robofont.segmentType</key>
+    <string>curve</string>
+    <key>com.typemytype.robofont.shouldAddPointsInSplineConversion</key>
+    <integer>1</integer>
+    <key>public.glyphOrder</key>
+    <array>
+      <string>test</string>
+    </array>
+  </dict>
+</plist>
diff --git a/tests/data/InstantiatorStrictMathGlyph/SquareOne.ufo/metainfo.plist b/tests/data/InstantiatorStrictMathGlyph/SquareOne.ufo/metainfo.plist
new file mode 100644
index 0000000..7b8b34a
--- /dev/null
+++ b/tests/data/InstantiatorStrictMathGlyph/SquareOne.ufo/metainfo.plist
@@ -0,0 +1,10 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+  <dict>
+    <key>creator</key>
+    <string>com.github.fonttools.ufoLib</string>
+    <key>formatVersion</key>
+    <integer>3</integer>
+  </dict>
+</plist>
diff --git a/tests/data/InstantiatorStrictMathGlyph/SquareTwo.ufo/fontinfo.plist b/tests/data/InstantiatorStrictMathGlyph/SquareTwo.ufo/fontinfo.plist
new file mode 100644
index 0000000..51e946f
--- /dev/null
+++ b/tests/data/InstantiatorStrictMathGlyph/SquareTwo.ufo/fontinfo.plist
@@ -0,0 +1,34 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+  <dict>
+    <key>ascender</key>
+    <integer>750</integer>
+    <key>capHeight</key>
+    <integer>750</integer>
+    <key>descender</key>
+    <integer>-250</integer>
+    <key>familyName</key>
+    <string>Test Ufo</string>
+    <key>guidelines</key>
+    <array/>
+    <key>postscriptBlueValues</key>
+    <array/>
+    <key>postscriptFamilyBlues</key>
+    <array/>
+    <key>postscriptFamilyOtherBlues</key>
+    <array/>
+    <key>postscriptOtherBlues</key>
+    <array/>
+    <key>postscriptStemSnapH</key>
+    <array/>
+    <key>postscriptStemSnapV</key>
+    <array/>
+    <key>styleName</key>
+    <string>Regular</string>
+    <key>unitsPerEm</key>
+    <integer>1000</integer>
+    <key>xHeight</key>
+    <integer>500</integer>
+  </dict>
+</plist>
diff --git a/tests/data/InstantiatorStrictMathGlyph/SquareTwo.ufo/glyphs/contents.plist b/tests/data/InstantiatorStrictMathGlyph/SquareTwo.ufo/glyphs/contents.plist
new file mode 100644
index 0000000..452a52b
--- /dev/null
+++ b/tests/data/InstantiatorStrictMathGlyph/SquareTwo.ufo/glyphs/contents.plist
@@ -0,0 +1,8 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+  <dict>
+    <key>test</key>
+    <string>test.glif</string>
+  </dict>
+</plist>
diff --git a/tests/data/InstantiatorStrictMathGlyph/SquareTwo.ufo/glyphs/layerinfo.plist b/tests/data/InstantiatorStrictMathGlyph/SquareTwo.ufo/glyphs/layerinfo.plist
new file mode 100644
index 0000000..3cf39b4
--- /dev/null
+++ b/tests/data/InstantiatorStrictMathGlyph/SquareTwo.ufo/glyphs/layerinfo.plist
@@ -0,0 +1,8 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+  <dict>
+    <key>color</key>
+    <string>1,0.75,0,0.7</string>
+  </dict>
+</plist>
diff --git a/tests/data/InstantiatorStrictMathGlyph/SquareTwo.ufo/glyphs/test.glif b/tests/data/InstantiatorStrictMathGlyph/SquareTwo.ufo/glyphs/test.glif
new file mode 100644
index 0000000..0b4979c
--- /dev/null
+++ b/tests/data/InstantiatorStrictMathGlyph/SquareTwo.ufo/glyphs/test.glif
@@ -0,0 +1,24 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<glyph name="test" format="2">
+  <advance width="500"/>
+  <outline>
+    <contour>
+      <point x="219" y="217" type="curve"/>
+      <point x="281" y="217" type="line"/>
+      <point x="281.0" y="217.0"/>
+      <point x="281.0" y="217.0"/>
+      <point x="281" y="217" type="curve"/>
+      <point x="281" y="279" type="line"/>
+      <point x="281.0" y="279.0"/>
+      <point x="281.0" y="279.0"/>
+      <point x="281" y="279" type="curve"/>
+      <point x="219" y="279" type="line"/>
+      <point x="219.0" y="279.0"/>
+      <point x="219.0" y="279.0"/>
+      <point x="219" y="279" type="curve"/>
+      <point x="219" y="217" type="line"/>
+      <point x="219.0" y="217.0"/>
+      <point x="219.0" y="217.0"/>
+    </contour>
+  </outline>
+</glyph>
diff --git a/tests/data/InstantiatorStrictMathGlyph/SquareTwo.ufo/layercontents.plist b/tests/data/InstantiatorStrictMathGlyph/SquareTwo.ufo/layercontents.plist
new file mode 100644
index 0000000..047e152
--- /dev/null
+++ b/tests/data/InstantiatorStrictMathGlyph/SquareTwo.ufo/layercontents.plist
@@ -0,0 +1,10 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+  <array>
+    <array>
+      <string>foreground</string>
+      <string>glyphs</string>
+    </array>
+  </array>
+</plist>
diff --git a/tests/data/InstantiatorStrictMathGlyph/SquareTwo.ufo/lib.plist b/tests/data/InstantiatorStrictMathGlyph/SquareTwo.ufo/lib.plist
new file mode 100644
index 0000000..5febabe
--- /dev/null
+++ b/tests/data/InstantiatorStrictMathGlyph/SquareTwo.ufo/lib.plist
@@ -0,0 +1,28 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+  <dict>
+    <key>com.typemytype.robofont.compileSettings.autohint</key>
+    <true/>
+    <key>com.typemytype.robofont.compileSettings.checkOutlines</key>
+    <false/>
+    <key>com.typemytype.robofont.compileSettings.createDummyDSIG</key>
+    <true/>
+    <key>com.typemytype.robofont.compileSettings.decompose</key>
+    <false/>
+    <key>com.typemytype.robofont.compileSettings.generateFormat</key>
+    <integer>0</integer>
+    <key>com.typemytype.robofont.compileSettings.releaseMode</key>
+    <false/>
+    <key>com.typemytype.robofont.italicSlantOffset</key>
+    <integer>0</integer>
+    <key>com.typemytype.robofont.segmentType</key>
+    <string>curve</string>
+    <key>com.typemytype.robofont.shouldAddPointsInSplineConversion</key>
+    <integer>1</integer>
+    <key>public.glyphOrder</key>
+    <array>
+      <string>test</string>
+    </array>
+  </dict>
+</plist>
diff --git a/tests/data/InstantiatorStrictMathGlyph/SquareTwo.ufo/metainfo.plist b/tests/data/InstantiatorStrictMathGlyph/SquareTwo.ufo/metainfo.plist
new file mode 100644
index 0000000..7b8b34a
--- /dev/null
+++ b/tests/data/InstantiatorStrictMathGlyph/SquareTwo.ufo/metainfo.plist
@@ -0,0 +1,10 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+  <dict>
+    <key>creator</key>
+    <string>com.github.fonttools.ufoLib</string>
+    <key>formatVersion</key>
+    <integer>3</integer>
+  </dict>
+</plist>
diff --git a/tests/data/InstantiatorStrictMathGlyph/StrictMathGlyph.designspace b/tests/data/InstantiatorStrictMathGlyph/StrictMathGlyph.designspace
new file mode 100644
index 0000000..18d05b8
--- /dev/null
+++ b/tests/data/InstantiatorStrictMathGlyph/StrictMathGlyph.designspace
@@ -0,0 +1,26 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<designspace format="4.1">
+  <axes>
+    <axis tag="wght" name="Weight" minimum="100" maximum="1000" default="100"/>
+  </axes>
+  <sources>
+    <source filename="SquareOne.ufo" familyname="InstatiatorStrictMathGlyph" stylename="Regular">
+      <location>
+        <dimension name="Weight" xvalue="100"/>
+      </location>
+    </source>
+    <source filename="SquareTwo.ufo" familyname="InstatiatorStrictMathGlyph" stylename="Bold">
+      <location>
+        <dimension name="Weight" xvalue="1000"/>
+      </location>
+    </source>
+  </sources>
+
+  <instances>
+    <instance filename="SquareIntermediate.ufo" familyname="InstatiatorStrictMathGlyph" stylename="Medium">
+      <location>
+        <dimension name="Weight" xvalue="500"/>
+      </location>
+    </instance>
+  </instances>
+</designspace>
diff --git a/tests/data/MutatorSansLite/LICENSE b/tests/data/MutatorSansLite/LICENSE
new file mode 100644
index 0000000..affdc0e
--- /dev/null
+++ b/tests/data/MutatorSansLite/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2017 Erik van Blokland
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/tests/data/MutatorSansLite/MutatorFamily_v5_discrete_axis.designspace b/tests/data/MutatorSansLite/MutatorFamily_v5_discrete_axis.designspace
new file mode 100644
index 0000000..438e6b2
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorFamily_v5_discrete_axis.designspace
@@ -0,0 +1,206 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<designspace format="5.0">
+  <axes elidedfallbackname="Regular">
+    <axis tag="SRIF" name="serif" values="0 1" default="0">
+      <labels>
+        <label uservalue="0" name="Sans"/>
+        <label uservalue="1" name="Serif"/>
+      </labels>
+    </axis>
+    <axis tag="wght" name="weight" minimum="300" maximum="700" default="300">
+      <map input="300" output="0"/>
+      <map input="500" output="500"/>
+      <map input="700" output="1000"/>
+      <labels>
+        <label uservalue="300" userminimum="300" usermaximum="400" name="Light"/>
+        <label uservalue="500" userminimum="400" usermaximum="600" name="Medium"/>
+        <label uservalue="700" userminimum="600" usermaximum="700" name="Bold"/>
+      </labels>
+    </axis>
+    <axis tag="wdth" name="width" minimum="50" maximum="200" default="50">
+      <map input="50" output="0"/>
+      <map input="100" output="500"/>
+      <map input="200" output="1000"/>
+      <labels>
+        <label uservalue="50" userminimum="50" usermaximum="75" name="Condensed"/>
+        <label uservalue="100" userminimum="75" usermaximum="125" name="Normal" elidable="true"/>
+        <label uservalue="200" userminimum="125" usermaximum="200" name="Extended"/>
+      </labels>
+    </axis>
+  </axes>
+  <labels>
+    <label name="S1">
+      <location>
+        <dimension name="width" uservalue="158.9044"/>
+        <dimension name="weight" uservalue="610.2436"/>
+      </location>
+    </label>
+    <label name="S2">
+      <location>
+        <dimension name="width" uservalue="159.1956"/>
+        <dimension name="weight" uservalue="642.2196"/>
+      </location>
+    </label>
+  </labels>
+  <rules>
+    <rule name="fold_I_serifs">
+      <conditionset>
+        <condition name="width" minimum="0" maximum="328"/>
+        <condition name="serif" minimum="0" maximum="0"/>
+      </conditionset>
+      <sub name="I" with="I.narrow"/>
+    </rule>
+    <rule name="fold_S_terminals">
+      <conditionset>
+        <condition name="width" minimum="0" maximum="1000"/>
+        <condition name="weight" minimum="0" maximum="500"/>
+        <condition name="serif" minimum="0" maximum="0"/>
+      </conditionset>
+      <sub name="S" with="S.closed"/>
+    </rule>
+  </rules>
+  <sources>
+    <source filename="MutatorSansLightCondensed.ufo" name="master.MutatorMathTest.LightCondensed.0" familyname="MutatorMathTest" stylename="LightCondensed">
+      <location>
+        <dimension name="width" xvalue="0"/>
+        <dimension name="weight" xvalue="0"/>
+      </location>
+    </source>
+    <source filename="MutatorSansBoldCondensed.ufo" name="master.MutatorMathTest.BoldCondensed.1" familyname="MutatorMathTest" stylename="BoldCondensed">
+      <location>
+        <dimension name="width" xvalue="0"/>
+        <dimension name="weight" xvalue="1000"/>
+      </location>
+    </source>
+    <source filename="MutatorSansLightWide.ufo" name="master.MutatorMathTest.LightWide.2" familyname="MutatorMathTest" stylename="LightWide">
+      <location>
+        <dimension name="width" xvalue="1000"/>
+        <dimension name="weight" xvalue="0"/>
+      </location>
+    </source>
+    <source filename="MutatorSansBoldWide.ufo" name="master.MutatorMathTest.BoldWide.3" familyname="MutatorMathTest" stylename="BoldWide">
+      <location>
+        <dimension name="width" xvalue="1000"/>
+        <dimension name="weight" xvalue="1000"/>
+      </location>
+    </source>
+    <source filename="MutatorSansLightCondensed.ufo" name="support.crossbar" layer="support.crossbar">
+      <location>
+        <dimension name="width" xvalue="0"/>
+        <dimension name="weight" xvalue="700"/>
+      </location>
+    </source>
+    <source filename="MutatorSansLightCondensed.ufo" name="support.S.wide" layer="support.S.wide">
+      <location>
+        <dimension name="width" xvalue="1000"/>
+        <dimension name="weight" xvalue="700"/>
+      </location>
+    </source>
+    <source filename="MutatorSansLightCondensed.ufo" name="support.S.middle" layer="support.S.middle">
+      <location>
+        <dimension name="width" xvalue="569.078000"/>
+        <dimension name="weight" xvalue="700"/>
+      </location>
+    </source>
+    <source filename="MutatorSerifLightCondensed.ufo" familyname="MutatorMathTest" stylename="SerifLightCondensed">
+      <location>
+        <dimension name="width" xvalue="0"/>
+        <dimension name="weight" xvalue="0"/>
+        <dimension name="serif" xvalue="1"/>
+      </location>
+    </source>
+    <source filename="MutatorSerifLightWide.ufo" familyname="MutatorMathTest" stylename="SerifLightWide">
+      <location>
+        <dimension name="width" xvalue="1000"/>
+        <dimension name="weight" xvalue="0"/>
+        <dimension name="serif" xvalue="1"/>
+      </location>
+    </source>
+  </sources>
+  <variable-fonts>
+    <variable-font name="MutatorSansVariable_Weight_Width">
+      <axis-subsets>
+        <axis-subset name="weight"/>
+        <axis-subset name="width"/>
+      </axis-subsets>
+    </variable-font>
+    <variable-font name="MutatorSansVariable_Weight">
+      <axis-subsets>
+        <axis-subset name="weight"/>
+      </axis-subsets>
+    </variable-font>
+    <variable-font name="MutatorSansVariable_Width">
+      <axis-subsets>
+        <axis-subset name="width"/>
+      </axis-subsets>
+    </variable-font>
+    <variable-font name="MutatorSerifVariable_Width">
+      <axis-subsets>
+        <axis-subset name="serif" uservalue="1"/>
+        <axis-subset name="width"/>
+      </axis-subsets>
+    </variable-font>
+  </variable-fonts>
+  <instances>
+    <instance>
+      <location>
+        <dimension name="width" xvalue="0"/>
+        <dimension name="weight" xvalue="0"/>
+      </location>
+    </instance>
+    <instance>
+      <location>
+        <dimension name="width" xvalue="0"/>
+        <dimension name="weight" xvalue="1000"/>
+      </location>
+    </instance>
+    <instance>
+      <location>
+        <dimension name="width" xvalue="1000"/>
+        <dimension name="weight" xvalue="0"/>
+      </location>
+    </instance>
+    <instance>
+      <location>
+        <dimension name="width" xvalue="1000"/>
+        <dimension name="weight" xvalue="1000"/>
+      </location>
+    </instance>
+    <instance>
+      <location>
+        <dimension name="width" xvalue="327"/>
+        <dimension name="weight" xvalue="500"/>
+      </location>
+    </instance>
+    <instance>
+      <location>
+        <dimension name="width" xvalue="327"/>
+        <dimension name="weight" xvalue="500"/>
+      </location>
+    </instance>
+    <instance>
+      <location>
+        <dimension name="width" xvalue="569.078"/>
+        <dimension name="weight" xvalue="1000"/>
+      </location>
+    </instance>
+    <instance>
+      <location>
+        <dimension name="width" xvalue="1000"/>
+        <dimension name="weight" xvalue="500"/>
+      </location>
+    </instance>
+    <instance>
+      <location>
+        <dimension name="width" xvalue="0"/>
+        <dimension name="serif" xvalue="0"/>
+      </location>
+    </instance>
+    <instance>
+      <location>
+        <dimension name="width" xvalue="0"/>
+        <dimension name="serif" xvalue="1"/>
+      </location>
+    </instance>
+  </instances>
+</designspace>
diff --git a/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/features.fea b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/features.fea
new file mode 100644
index 0000000..901a3de
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/features.fea
@@ -0,0 +1 @@
+# this is the feature from boldcondensed.
diff --git a/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/fontinfo.plist b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/fontinfo.plist
new file mode 100644
index 0000000..ce38d59
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/fontinfo.plist
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+	<dict>
+		<key>ascender</key>
+		<integer>800</integer>
+		<key>capHeight</key>
+		<integer>800</integer>
+		<key>copyright</key>
+		<string>License same as MutatorMath. BSD 3-clause. [test-token: A]</string>
+		<key>descender</key>
+		<integer>-200</integer>
+		<key>familyName</key>
+		<string>MutatorMathTest</string>
+		<key>guidelines</key>
+		<array>
+		</array>
+		<key>italicAngle</key>
+		<integer>0</integer>
+		<key>openTypeNameLicense</key>
+		<string>License same as MutatorMath. BSD 3-clause. [test-token: A]</string>
+		<key>openTypeOS2VendorID</key>
+		<string>LTTR</string>
+		<key>postscriptBlueValues</key>
+		<array>
+		</array>
+		<key>postscriptDefaultWidthX</key>
+		<integer>500</integer>
+		<key>postscriptFamilyBlues</key>
+		<array>
+		</array>
+		<key>postscriptFamilyOtherBlues</key>
+		<array>
+		</array>
+		<key>postscriptFontName</key>
+		<string>MutatorMathTest-BoldCondensed</string>
+		<key>postscriptFullName</key>
+		<string>MutatorMathTest BoldCondensed</string>
+		<key>postscriptOtherBlues</key>
+		<array>
+		</array>
+		<key>postscriptSlantAngle</key>
+		<integer>0</integer>
+		<key>postscriptStemSnapH</key>
+		<array>
+		</array>
+		<key>postscriptStemSnapV</key>
+		<array>
+		</array>
+		<key>postscriptWindowsCharacterSet</key>
+		<integer>1</integer>
+		<key>styleMapFamilyName</key>
+		<string></string>
+		<key>styleMapStyleName</key>
+		<string>regular</string>
+		<key>styleName</key>
+		<string>BoldCondensed</string>
+		<key>unitsPerEm</key>
+		<integer>1000</integer>
+		<key>versionMajor</key>
+		<integer>1</integer>
+		<key>versionMinor</key>
+		<integer>2</integer>
+		<key>xHeight</key>
+		<integer>500</integer>
+		<key>year</key>
+		<integer>2004</integer>
+	</dict>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs.background/S_.closed.glif b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs.background/S_.closed.glif
new file mode 100644
index 0000000..171df27
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs.background/S_.closed.glif
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="S.closed" format="2">
+	<advance width="1246"/>
+	<outline>
+		<contour>
+			<point x="1206" y="253" type="curve" smooth="yes"/>
+			<point x="1206" y="439"/>
+			<point x="1081" y="492"/>
+			<point x="740" y="501" type="curve" smooth="yes"/>
+			<point x="548" y="506" type="line" smooth="yes"/>
+			<point x="412" y="510"/>
+			<point x="411" y="512"/>
+			<point x="411" y="522" type="curve" smooth="yes"/>
+			<point x="411" y="533"/>
+			<point x="425" y="537"/>
+			<point x="514" y="537" type="curve" smooth="yes"/>
+			<point x="695" y="537" type="line" smooth="yes"/>
+			<point x="812" y="537"/>
+			<point x="844" y="530"/>
+			<point x="844" y="482" type="curve"/>
+			<point x="1150" y="483" type="line"/>
+			<point x="1150" y="746"/>
+			<point x="1027" y="810"/>
+			<point x="653" y="810" type="curve" smooth="yes"/>
+			<point x="608" y="810" type="line" smooth="yes"/>
+			<point x="211" y="810"/>
+			<point x="49" y="729"/>
+			<point x="49" y="529" type="curve" smooth="yes"/>
+			<point x="49" y="364"/>
+			<point x="197" y="305"/>
+			<point x="517" y="299" type="curve" smooth="yes"/>
+			<point x="722" y="295" type="line" smooth="yes"/>
+			<point x="824" y="293"/>
+			<point x="841" y="289"/>
+			<point x="841" y="276" type="curve" smooth="yes"/>
+			<point x="841" y="268"/>
+			<point x="816" y="264"/>
+			<point x="727" y="264" type="curve" smooth="yes"/>
+			<point x="460" y="264" type="line" smooth="yes"/>
+			<point x="393" y="264"/>
+			<point x="349" y="289"/>
+			<point x="349" y="336" type="curve"/>
+			<point x="43" y="336" type="line"/>
+			<point x="17" y="69"/>
+			<point x="172" y="-10"/>
+			<point x="488" y="-10" type="curve" smooth="yes"/>
+			<point x="779" y="-10" type="line" smooth="yes"/>
+			<point x="1118" y="-10"/>
+			<point x="1206" y="92"/>
+		</contour>
+	</outline>
+</glyph>
diff --git a/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs.background/contents.plist b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs.background/contents.plist
new file mode 100644
index 0000000..070780a
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs.background/contents.plist
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+	<dict>
+		<key>S.closed</key>
+		<string>S_.closed.glif</string>
+	</dict>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs.background/layerinfo.plist b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs.background/layerinfo.plist
new file mode 100644
index 0000000..11c425f
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs.background/layerinfo.plist
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+	<dict>
+		<key>color</key>
+		<string>0.5,1,0,0.7</string>
+	</dict>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/A_.glif b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/A_.glif
new file mode 100644
index 0000000..96c2cbb
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/A_.glif
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="A" format="2">
+	<unicode hex="0041"/>
+	<advance width="740"/>
+	<outline>
+		<contour>
+			<point x="-10" y="0" type="line"/>
+			<point x="250" y="0" type="line"/>
+			<point x="334" y="800" type="line"/>
+			<point x="104" y="800" type="line"/>
+		</contour>
+		<contour>
+			<point x="110" y="120" type="line"/>
+			<point x="580" y="120" type="line"/>
+			<point x="580" y="330" type="line"/>
+			<point x="110" y="330" type="line"/>
+		</contour>
+		<contour>
+			<point x="390" y="0" type="line"/>
+			<point x="730" y="0" type="line"/>
+			<point x="614" y="800" type="line"/>
+			<point x="294" y="800" type="line"/>
+		</contour>
+		<contour>
+			<point x="204" y="540" type="line"/>
+			<point x="474" y="540" type="line"/>
+			<point x="474" y="800" type="line"/>
+			<point x="204" y="800" type="line"/>
+		</contour>
+	</outline>
+	<lib>
+		<dict>
+			<key>com.typemytype.robofont.Image.Brightness</key>
+			<integer>0</integer>
+			<key>com.typemytype.robofont.Image.Contrast</key>
+			<integer>1</integer>
+			<key>com.typemytype.robofont.Image.Saturation</key>
+			<integer>1</integer>
+			<key>com.typemytype.robofont.Image.Sharpness</key>
+			<real>0.4</real>
+		</dict>
+	</lib>
+</glyph>
diff --git a/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/I_.glif b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/I_.glif
new file mode 100644
index 0000000..61d60d1
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/I_.glif
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="I" format="2">
+	<unicode hex="0049"/>
+	<advance width="560"/>
+	<outline>
+		<contour>
+			<point x="120" y="0" type="line"/>
+			<point x="440" y="0" type="line"/>
+			<point x="440" y="800" type="line"/>
+			<point x="120" y="800" type="line"/>
+		</contour>
+		<contour>
+			<point x="30" y="520" type="line"/>
+			<point x="530" y="520" type="line"/>
+			<point x="530" y="800" type="line"/>
+			<point x="30" y="800" type="line"/>
+		</contour>
+		<contour>
+			<point x="30" y="0" type="line"/>
+			<point x="530" y="0" type="line"/>
+			<point x="530" y="280" type="line"/>
+			<point x="30" y="280" type="line"/>
+		</contour>
+	</outline>
+</glyph>
diff --git a/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/I_.narrow.glif b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/I_.narrow.glif
new file mode 100644
index 0000000..50bb19b
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/I_.narrow.glif
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="I.narrow" format="2">
+	<advance width="380"/>
+	<outline>
+		<contour>
+			<point x="30" y="0" type="line"/>
+			<point x="350" y="0" type="line"/>
+			<point x="350" y="800" type="line"/>
+			<point x="30" y="800" type="line"/>
+		</contour>
+	</outline>
+	<lib>
+		<dict>
+			<key>com.typemytype.robofont.Image.Brightness</key>
+			<integer>0</integer>
+			<key>com.typemytype.robofont.Image.Contrast</key>
+			<integer>1</integer>
+			<key>com.typemytype.robofont.Image.Saturation</key>
+			<integer>1</integer>
+			<key>com.typemytype.robofont.Image.Sharpness</key>
+			<real>0.4</real>
+		</dict>
+	</lib>
+</glyph>
diff --git a/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/I_J_.glif b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/I_J_.glif
new file mode 100644
index 0000000..1b8857b
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/I_J_.glif
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="IJ" format="2">
+	<unicode hex="0132"/>
+	<advance width="756"/>
+	<outline>
+		<contour>
+			<point x="350" y="377" type="line"/>
+			<point x="350" y="800" type="line"/>
+			<point x="30" y="800" type="line"/>
+			<point x="30" y="377" type="line"/>
+		</contour>
+		<contour>
+			<point x="377" y="-10" type="curve" smooth="yes"/>
+			<point x="628" y="-10"/>
+			<point x="726" y="105"/>
+			<point x="726" y="343" type="curve" smooth="yes"/>
+			<point x="726" y="800" type="line"/>
+			<point x="406" y="800" type="line"/>
+			<point x="406" y="293" type="line" smooth="yes"/>
+			<point x="406" y="265"/>
+			<point x="399" y="254"/>
+			<point x="377" y="254" type="curve" smooth="yes"/>
+			<point x="357" y="254"/>
+			<point x="350" y="265"/>
+			<point x="350" y="293" type="curve" smooth="yes"/>
+			<point x="350" y="332" type="line"/>
+			<point x="30" y="332" type="line"/>
+			<point x="30" y="303" type="line" smooth="yes"/>
+			<point x="30" y="95"/>
+			<point x="125" y="-10"/>
+		</contour>
+	</outline>
+</glyph>
diff --git a/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/S_.closed.glif b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/S_.closed.glif
new file mode 100644
index 0000000..8a4d6c7
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/S_.closed.glif
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="S.closed" format="2">
+	<advance width="751"/>
+	<outline>
+		<contour>
+			<point x="726" y="253" type="curve" smooth="yes"/>
+			<point x="726" y="453"/>
+			<point x="615" y="497"/>
+			<point x="447" y="507" type="curve" smooth="yes"/>
+			<point x="378" y="511" type="line" smooth="yes"/>
+			<point x="297" y="516"/>
+			<point x="290" y="518"/>
+			<point x="290" y="528" type="curve" smooth="yes"/>
+			<point x="290" y="539"/>
+			<point x="304" y="543"/>
+			<point x="358" y="543" type="curve" smooth="yes"/>
+			<point x="386" y="543" type="line" smooth="yes"/>
+			<point x="440" y="543"/>
+			<point x="451" y="527"/>
+			<point x="451" y="490" type="curve"/>
+			<point x="711" y="490" type="line"/>
+			<point x="711" y="712"/>
+			<point x="620" y="810"/>
+			<point x="395" y="810" type="curve" smooth="yes"/>
+			<point x="372" y="810" type="line" smooth="yes"/>
+			<point x="147" y="810"/>
+			<point x="25" y="708"/>
+			<point x="25" y="529" type="curve" smooth="yes"/>
+			<point x="25" y="350"/>
+			<point x="152" y="290"/>
+			<point x="305" y="279" type="curve" smooth="yes"/>
+			<point x="372" y="274" type="line" smooth="yes"/>
+			<point x="445" y="269"/>
+			<point x="459" y="269"/>
+			<point x="459" y="256" type="curve" smooth="yes"/>
+			<point x="459" y="248"/>
+			<point x="443" y="244"/>
+			<point x="411" y="244" type="curve" smooth="yes"/>
+			<point x="377" y="244" type="line" smooth="yes"/>
+			<point x="320" y="244"/>
+			<point x="309" y="270"/>
+			<point x="309" y="296" type="curve"/>
+			<point x="29" y="296" type="line"/>
+			<point x="29" y="73"/>
+			<point x="149" y="-10"/>
+			<point x="349" y="-10" type="curve" smooth="yes"/>
+			<point x="380" y="-10" type="line" smooth="yes"/>
+			<point x="622" y="-10"/>
+			<point x="726" y="108"/>
+		</contour>
+	</outline>
+	<lib>
+		<dict>
+			<key>com.letterror.skateboard.navigator</key>
+			<dict>
+				<key>location</key>
+				<dict>
+					<key>weight</key>
+					<integer>1000</integer>
+					<key>width</key>
+					<real>108.0069405692</real>
+				</dict>
+			</dict>
+		</dict>
+	</lib>
+</glyph>
diff --git a/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/S_.glif b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/S_.glif
new file mode 100644
index 0000000..8d959e0
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/S_.glif
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="S" format="2">
+	<unicode hex="0053"/>
+	<advance width="698"/>
+	<outline>
+		<contour>
+			<point x="678" y="253" type="curve" smooth="yes"/>
+			<point x="678" y="462"/>
+			<point x="568" y="520"/>
+			<point x="421" y="531" type="curve" smooth="yes"/>
+			<point x="369" y="535" type="line" smooth="yes"/>
+			<point x="294" y="541"/>
+			<point x="288" y="542"/>
+			<point x="288" y="552" type="curve" smooth="yes"/>
+			<point x="288" y="563"/>
+			<point x="301" y="567"/>
+			<point x="350" y="567" type="curve" smooth="yes"/>
+			<point x="402" y="567" type="line" smooth="yes"/>
+			<point x="484" y="567"/>
+			<point x="565" y="558"/>
+			<point x="625" y="548" type="curve"/>
+			<point x="661" y="780" type="line"/>
+			<point x="598" y="794"/>
+			<point x="490" y="810"/>
+			<point x="432" y="810" type="curve" smooth="yes"/>
+			<point x="388" y="810" type="line" smooth="yes"/>
+			<point x="150" y="810"/>
+			<point x="33" y="705"/>
+			<point x="33" y="529" type="curve" smooth="yes"/>
+			<point x="33" y="343"/>
+			<point x="158" y="282"/>
+			<point x="291" y="269" type="curve" smooth="yes"/>
+			<point x="342" y="264" type="line" smooth="yes"/>
+			<point x="409" y="257"/>
+			<point x="422" y="259"/>
+			<point x="422" y="246" type="curve" smooth="yes"/>
+			<point x="422" y="238"/>
+			<point x="408" y="234"/>
+			<point x="359" y="234" type="curve" smooth="yes"/>
+			<point x="308" y="234" type="line" smooth="yes"/>
+			<point x="213" y="234"/>
+			<point x="124" y="242"/>
+			<point x="56" y="255" type="curve"/>
+			<point x="20" y="20" type="line"/>
+			<point x="91" y="5"/>
+			<point x="213" y="-10"/>
+			<point x="279" y="-10" type="curve" smooth="yes"/>
+			<point x="323" y="-10" type="line" smooth="yes"/>
+			<point x="605" y="-10"/>
+			<point x="678" y="110"/>
+		</contour>
+	</outline>
+	<lib>
+		<dict>
+			<key>com.typemytype.robofont.Image.Brightness</key>
+			<integer>0</integer>
+			<key>com.typemytype.robofont.Image.Contrast</key>
+			<integer>1</integer>
+			<key>com.typemytype.robofont.Image.Saturation</key>
+			<integer>1</integer>
+			<key>com.typemytype.robofont.Image.Sharpness</key>
+			<real>0.4</real>
+		</dict>
+	</lib>
+</glyph>
diff --git a/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/contents.plist b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/contents.plist
new file mode 100644
index 0000000..9f8a737
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/contents.plist
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+	<dict>
+		<key>A</key>
+		<string>A_.glif</string>
+		<key>I</key>
+		<string>I_.glif</string>
+		<key>I.narrow</key>
+		<string>I_.narrow.glif</string>
+		<key>IJ</key>
+		<string>I_J_.glif</string>
+		<key>S</key>
+		<string>S_.glif</string>
+		<key>S.closed</key>
+		<string>S_.closed.glif</string>
+	</dict>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/layerinfo.plist b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/layerinfo.plist
new file mode 100644
index 0000000..a1a92f9
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/glyphs/layerinfo.plist
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+	<dict>
+		<key>color</key>
+		<string>1,0.75,0,0.7</string>
+		<key>lib</key>
+		<dict>
+			<key>com.typemytype.robofont.segmentType</key>
+			<string>curve</string>
+		</dict>
+	</dict>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/layercontents.plist b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/layercontents.plist
new file mode 100644
index 0000000..8964c56
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/layercontents.plist
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+	<array>
+		<array>
+			<string>foreground</string>
+			<string>glyphs</string>
+		</array>
+		<array>
+			<string>background</string>
+			<string>glyphs.background</string>
+		</array>
+	</array>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/lib.plist b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/lib.plist
new file mode 100644
index 0000000..789d780
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/lib.plist
@@ -0,0 +1,270 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+	<dict>
+		<key>com.defcon.sortDescriptor</key>
+		<array>
+			<dict>
+				<key>allowPseudoUnicode</key>
+				<true/>
+				<key>ascending</key>
+				<true/>
+				<key>type</key>
+				<string>alphabetical</string>
+			</dict>
+			<dict>
+				<key>allowPseudoUnicode</key>
+				<true/>
+				<key>ascending</key>
+				<true/>
+				<key>type</key>
+				<string>category</string>
+			</dict>
+			<dict>
+				<key>allowPseudoUnicode</key>
+				<true/>
+				<key>ascending</key>
+				<true/>
+				<key>type</key>
+				<string>unicode</string>
+			</dict>
+			<dict>
+				<key>allowPseudoUnicode</key>
+				<true/>
+				<key>ascending</key>
+				<true/>
+				<key>type</key>
+				<string>script</string>
+			</dict>
+			<dict>
+				<key>allowPseudoUnicode</key>
+				<true/>
+				<key>ascending</key>
+				<true/>
+				<key>type</key>
+				<string>suffix</string>
+			</dict>
+			<dict>
+				<key>allowPseudoUnicode</key>
+				<true/>
+				<key>ascending</key>
+				<true/>
+				<key>type</key>
+				<string>decompositionBase</string>
+			</dict>
+		</array>
+		<key>com.letterror.lightMeter.prefs</key>
+		<dict>
+			<key>chunkSize</key>
+			<integer>5</integer>
+			<key>diameter</key>
+			<integer>200</integer>
+			<key>drawTail</key>
+			<false/>
+			<key>invert</key>
+			<false/>
+			<key>toolDiameter</key>
+			<integer>30</integer>
+			<key>toolStyle</key>
+			<string>fluid</string>
+		</dict>
+		<key>com.typemytype.robofont.background.layerStrokeColor</key>
+		<array>
+			<integer>0</integer>
+			<real>0.8</real>
+			<real>0.2</real>
+			<real>0.7</real>
+		</array>
+		<key>com.typemytype.robofont.compileSettings.autohint</key>
+		<true/>
+		<key>com.typemytype.robofont.compileSettings.checkOutlines</key>
+		<false/>
+		<key>com.typemytype.robofont.compileSettings.createDummyDSIG</key>
+		<true/>
+		<key>com.typemytype.robofont.compileSettings.decompose</key>
+		<false/>
+		<key>com.typemytype.robofont.compileSettings.generateFormat</key>
+		<integer>0</integer>
+		<key>com.typemytype.robofont.compileSettings.releaseMode</key>
+		<false/>
+		<key>com.typemytype.robofont.foreground.layerStrokeColor</key>
+		<array>
+			<real>0.5</real>
+			<integer>0</integer>
+			<real>0.5</real>
+			<real>0.7</real>
+		</array>
+		<key>com.typemytype.robofont.italicSlantOffset</key>
+		<integer>0</integer>
+		<key>com.typemytype.robofont.segmentType</key>
+		<string>curve</string>
+		<key>com.typemytype.robofont.shouldAddPointsInSplineConversion</key>
+		<integer>1</integer>
+		<key>com.typesupply.defcon.sortDescriptor</key>
+		<array>
+			<dict>
+				<key>ascending</key>
+				<array>
+					<string>space</string>
+					<string>A</string>
+					<string>B</string>
+					<string>C</string>
+					<string>D</string>
+					<string>E</string>
+					<string>F</string>
+					<string>G</string>
+					<string>H</string>
+					<string>I</string>
+					<string>J</string>
+					<string>K</string>
+					<string>L</string>
+					<string>M</string>
+					<string>N</string>
+					<string>O</string>
+					<string>P</string>
+					<string>Q</string>
+					<string>R</string>
+					<string>S</string>
+					<string>T</string>
+					<string>U</string>
+					<string>V</string>
+					<string>W</string>
+					<string>X</string>
+					<string>Y</string>
+					<string>Z</string>
+					<string>a</string>
+					<string>b</string>
+					<string>c</string>
+					<string>d</string>
+					<string>e</string>
+					<string>f</string>
+					<string>g</string>
+					<string>h</string>
+					<string>i</string>
+					<string>j</string>
+					<string>k</string>
+					<string>l</string>
+					<string>m</string>
+					<string>n</string>
+					<string>ntilde</string>
+					<string>o</string>
+					<string>p</string>
+					<string>q</string>
+					<string>r</string>
+					<string>s</string>
+					<string>t</string>
+					<string>u</string>
+					<string>v</string>
+					<string>w</string>
+					<string>x</string>
+					<string>y</string>
+					<string>z</string>
+					<string>zcaron</string>
+					<string>zero</string>
+					<string>one</string>
+					<string>two</string>
+					<string>three</string>
+					<string>four</string>
+					<string>five</string>
+					<string>six</string>
+					<string>seven</string>
+					<string>eight</string>
+					<string>nine</string>
+					<string>underscore</string>
+					<string>hyphen</string>
+					<string>endash</string>
+					<string>emdash</string>
+					<string>parenleft</string>
+					<string>parenright</string>
+					<string>bracketleft</string>
+					<string>bracketright</string>
+					<string>braceleft</string>
+					<string>braceright</string>
+					<string>numbersign</string>
+					<string>percent</string>
+					<string>period</string>
+					<string>comma</string>
+					<string>colon</string>
+					<string>semicolon</string>
+					<string>exclam</string>
+					<string>question</string>
+					<string>slash</string>
+					<string>backslash</string>
+					<string>bar</string>
+					<string>at</string>
+					<string>ampersand</string>
+					<string>paragraph</string>
+					<string>bullet</string>
+					<string>dollar</string>
+					<string>trademark</string>
+					<string>fi</string>
+					<string>fl</string>
+					<string>.notdef</string>
+					<string>a_b_c</string>
+					<string>Atilde</string>
+					<string>Adieresis</string>
+					<string>Acircumflex</string>
+					<string>Aring</string>
+					<string>Ccedilla</string>
+					<string>Agrave</string>
+					<string>Aacute</string>
+					<string>quotedblright</string>
+					<string>quotedblleft</string>
+				</array>
+				<key>type</key>
+				<string>glyphList</string>
+			</dict>
+		</array>
+		<key>public.glyphOrder</key>
+		<array>
+			<string>A</string>
+			<string>Aacute</string>
+			<string>Adieresis</string>
+			<string>B</string>
+			<string>C</string>
+			<string>D</string>
+			<string>E</string>
+			<string>F</string>
+			<string>G</string>
+			<string>H</string>
+			<string>I</string>
+			<string>J</string>
+			<string>K</string>
+			<string>L</string>
+			<string>M</string>
+			<string>N</string>
+			<string>O</string>
+			<string>P</string>
+			<string>Q</string>
+			<string>R</string>
+			<string>S</string>
+			<string>T</string>
+			<string>U</string>
+			<string>V</string>
+			<string>W</string>
+			<string>X</string>
+			<string>Y</string>
+			<string>Z</string>
+			<string>IJ</string>
+			<string>S.closed</string>
+			<string>I.narrow</string>
+			<string>J.narrow</string>
+			<string>quotesinglbase</string>
+			<string>quotedblbase</string>
+			<string>quotedblleft</string>
+			<string>quotedblright</string>
+			<string>comma</string>
+			<string>period</string>
+			<string>colon</string>
+			<string>semicolon</string>
+			<string>dot</string>
+			<string>dieresis</string>
+			<string>acute</string>
+			<string>space</string>
+			<string>arrowdown</string>
+			<string>arrowleft</string>
+			<string>arrowright</string>
+			<string>arrowup</string>
+		</array>
+	</dict>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/metainfo.plist b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/metainfo.plist
new file mode 100644
index 0000000..555d9ce
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansBoldCondensed.ufo/metainfo.plist
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+	<dict>
+		<key>creator</key>
+		<string>com.github.fonttools.ufoLib</string>
+		<key>formatVersion</key>
+		<integer>3</integer>
+	</dict>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/features.fea b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/features.fea
new file mode 100644
index 0000000..50f3fc0
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/features.fea
@@ -0,0 +1 @@
+# this is the feature from BoldWide
diff --git a/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/fontinfo.plist b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/fontinfo.plist
new file mode 100644
index 0000000..2204ed8
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/fontinfo.plist
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+	<dict>
+		<key>ascender</key>
+		<integer>800</integer>
+		<key>capHeight</key>
+		<integer>800</integer>
+		<key>copyright</key>
+		<string>License same as MutatorMath. BSD 3-clause. [test-token: B]</string>
+		<key>descender</key>
+		<integer>-200</integer>
+		<key>familyName</key>
+		<string>MutatorMathTest</string>
+		<key>guidelines</key>
+		<array>
+		</array>
+		<key>italicAngle</key>
+		<integer>0</integer>
+		<key>openTypeNameLicense</key>
+		<string>License same as MutatorMath. BSD 3-clause. [test-token: B]</string>
+		<key>openTypeOS2VendorID</key>
+		<string>LTTR</string>
+		<key>postscriptBlueValues</key>
+		<array>
+		</array>
+		<key>postscriptDefaultWidthX</key>
+		<integer>500</integer>
+		<key>postscriptFamilyBlues</key>
+		<array>
+		</array>
+		<key>postscriptFamilyOtherBlues</key>
+		<array>
+		</array>
+		<key>postscriptFontName</key>
+		<string>MutatorMathTest-BoldWide</string>
+		<key>postscriptFullName</key>
+		<string>MutatorMathTest BoldWide</string>
+		<key>postscriptOtherBlues</key>
+		<array>
+		</array>
+		<key>postscriptSlantAngle</key>
+		<integer>0</integer>
+		<key>postscriptStemSnapH</key>
+		<array>
+		</array>
+		<key>postscriptStemSnapV</key>
+		<array>
+		</array>
+		<key>postscriptWindowsCharacterSet</key>
+		<integer>1</integer>
+		<key>styleMapFamilyName</key>
+		<string></string>
+		<key>styleMapStyleName</key>
+		<string>regular</string>
+		<key>styleName</key>
+		<string>BoldWide</string>
+		<key>unitsPerEm</key>
+		<integer>1000</integer>
+		<key>versionMajor</key>
+		<integer>1</integer>
+		<key>versionMinor</key>
+		<integer>2</integer>
+		<key>xHeight</key>
+		<integer>500</integer>
+		<key>year</key>
+		<integer>2004</integer>
+	</dict>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs.background/S_.closed.glif b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs.background/S_.closed.glif
new file mode 100644
index 0000000..8edc65f
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs.background/S_.closed.glif
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="S.closed" format="2">
+	<advance width="1210"/>
+	<outline>
+		<contour>
+			<point x="1180" y="253" type="curve" smooth="yes"/>
+			<point x="1180" y="462"/>
+			<point x="1055" y="523"/>
+			<point x="714" y="531" type="curve" smooth="yes"/>
+			<point x="509" y="536" type="line" smooth="yes"/>
+			<point x="373" y="539"/>
+			<point x="362" y="542"/>
+			<point x="362" y="552" type="curve" smooth="yes"/>
+			<point x="362" y="563"/>
+			<point x="386" y="567"/>
+			<point x="475" y="567" type="curve" smooth="yes"/>
+			<point x="679" y="567" type="line" smooth="yes"/>
+			<point x="828" y="567"/>
+			<point x="975" y="558"/>
+			<point x="1084" y="548" type="curve"/>
+			<point x="1119" y="780" type="line"/>
+			<point x="1013" y="793"/>
+			<point x="831" y="810"/>
+			<point x="734" y="810" type="curve" smooth="yes"/>
+			<point x="604" y="810" type="line" smooth="yes"/>
+			<point x="172" y="810"/>
+			<point x="10" y="729"/>
+			<point x="10" y="529" type="curve" smooth="yes"/>
+			<point x="10" y="343"/>
+			<point x="158" y="277"/>
+			<point x="478" y="269" type="curve" smooth="yes"/>
+			<point x="670" y="264" type="line" smooth="yes"/>
+			<point x="792" y="261"/>
+			<point x="815" y="259"/>
+			<point x="815" y="246" type="curve" smooth="yes"/>
+			<point x="815" y="238"/>
+			<point x="790" y="234"/>
+			<point x="701" y="234" type="curve" smooth="yes"/>
+			<point x="509" y="234" type="line" smooth="yes"/>
+			<point x="336" y="234"/>
+			<point x="175" y="242"/>
+			<point x="51" y="255" type="curve"/>
+			<point x="16" y="20" type="line"/>
+			<point x="142" y="5"/>
+			<point x="339" y="-10"/>
+			<point x="456" y="-10" type="curve" smooth="yes"/>
+			<point x="603" y="-10" type="line" smooth="yes"/>
+			<point x="1049" y="-10"/>
+			<point x="1180" y="92"/>
+		</contour>
+	</outline>
+</glyph>
diff --git a/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs.background/S_.glif b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs.background/S_.glif
new file mode 100644
index 0000000..c6e5615
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs.background/S_.glif
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="S" format="2">
+	<unicode hex="0053"/>
+	<advance width="1313"/>
+	<outline>
+		<contour>
+			<point x="1283" y="253" type="curve" smooth="yes"/>
+			<point x="1283" y="464"/>
+			<point x="1158" y="526"/>
+			<point x="817" y="533" type="curve" smooth="yes"/>
+			<point x="556" y="538" type="line" smooth="yes"/>
+			<point x="420" y="541"/>
+			<point x="409" y="543"/>
+			<point x="409" y="552" type="curve" smooth="yes"/>
+			<point x="409" y="563"/>
+			<point x="433" y="567"/>
+			<point x="522" y="567" type="curve" smooth="yes"/>
+			<point x="712" y="567" type="line" smooth="yes"/>
+			<point x="861" y="567"/>
+			<point x="901" y="557"/>
+			<point x="901" y="492" type="curve"/>
+			<point x="1232" y="493" type="line"/>
+			<point x="1211" y="710"/>
+			<point x="1044" y="810"/>
+			<point x="700" y="810" type="curve" smooth="yes"/>
+			<point x="536" y="810" type="line" smooth="yes"/>
+			<point x="222" y="810"/>
+			<point x="47" y="729"/>
+			<point x="47" y="529" type="curve" smooth="yes"/>
+			<point x="47" y="342"/>
+			<point x="188" y="273"/>
+			<point x="491" y="268" type="curve" smooth="yes"/>
+			<point x="773" y="263" type="line" smooth="yes"/>
+			<point x="895" y="261"/>
+			<point x="918" y="258"/>
+			<point x="918" y="246" type="curve" smooth="yes"/>
+			<point x="918" y="238"/>
+			<point x="893" y="234"/>
+			<point x="804" y="234" type="curve" smooth="yes"/>
+			<point x="532" y="234" type="line" smooth="yes"/>
+			<point x="439" y="234"/>
+			<point x="366" y="240"/>
+			<point x="366" y="297" type="curve"/>
+			<point x="30" y="297" type="line"/>
+			<point x="30" y="77"/>
+			<point x="165" y="-10"/>
+			<point x="534" y="-10" type="curve" smooth="yes"/>
+			<point x="747" y="-10" type="line" smooth="yes"/>
+			<point x="1152" y="-10"/>
+			<point x="1283" y="92"/>
+		</contour>
+	</outline>
+</glyph>
diff --git a/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs.background/contents.plist b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs.background/contents.plist
new file mode 100644
index 0000000..ad569c1
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs.background/contents.plist
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+	<dict>
+		<key>S</key>
+		<string>S_.glif</string>
+		<key>S.closed</key>
+		<string>S_.closed.glif</string>
+	</dict>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs.background/layerinfo.plist b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs.background/layerinfo.plist
new file mode 100644
index 0000000..11c425f
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs.background/layerinfo.plist
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+	<dict>
+		<key>color</key>
+		<string>0.5,1,0,0.7</string>
+	</dict>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/A_.glif b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/A_.glif
new file mode 100644
index 0000000..2ee5683
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/A_.glif
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="A" format="2">
+	<unicode hex="0041"/>
+	<advance width="1290"/>
+	<outline>
+		<contour>
+			<point x="20" y="0" type="line"/>
+			<point x="350" y="0" type="line"/>
+			<point x="640" y="800" type="line"/>
+			<point x="360" y="800" type="line"/>
+		</contour>
+		<contour>
+			<point x="210" y="120" type="line"/>
+			<point x="940" y="120" type="line"/>
+			<point x="940" y="340" type="line"/>
+			<point x="210" y="340" type="line"/>
+		</contour>
+		<contour>
+			<point x="800" y="0" type="line"/>
+			<point x="1270" y="0" type="line"/>
+			<point x="930" y="800" type="line"/>
+			<point x="480" y="800" type="line"/>
+		</contour>
+		<contour>
+			<point x="410" y="540" type="line"/>
+			<point x="830" y="540" type="line"/>
+			<point x="830" y="800" type="line"/>
+			<point x="410" y="800" type="line"/>
+		</contour>
+	</outline>
+</glyph>
diff --git a/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/I_.glif b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/I_.glif
new file mode 100644
index 0000000..65ac486
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/I_.glif
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="I" format="2">
+	<unicode hex="0049"/>
+	<advance width="1020"/>
+	<outline>
+		<contour>
+			<point x="300" y="0" type="line"/>
+			<point x="720" y="0" type="line"/>
+			<point x="720" y="800" type="line"/>
+			<point x="300" y="800" type="line"/>
+		</contour>
+		<contour>
+			<point x="60" y="550" type="line"/>
+			<point x="960" y="550" type="line"/>
+			<point x="960" y="800" type="line"/>
+			<point x="60" y="800" type="line"/>
+		</contour>
+		<contour>
+			<point x="60" y="0" type="line"/>
+			<point x="960" y="0" type="line"/>
+			<point x="960" y="250" type="line"/>
+			<point x="60" y="250" type="line"/>
+		</contour>
+	</outline>
+</glyph>
diff --git a/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/I_.narrow.glif b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/I_.narrow.glif
new file mode 100644
index 0000000..f706273
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/I_.narrow.glif
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="I.narrow" format="2">
+	<advance width="540"/>
+	<outline>
+		<contour>
+			<point x="60" y="0" type="line"/>
+			<point x="480" y="0" type="line"/>
+			<point x="480" y="800" type="line"/>
+			<point x="60" y="800" type="line"/>
+		</contour>
+	</outline>
+	<lib>
+		<dict>
+			<key>com.typemytype.robofont.Image.Brightness</key>
+			<integer>0</integer>
+			<key>com.typemytype.robofont.Image.Contrast</key>
+			<integer>1</integer>
+			<key>com.typemytype.robofont.Image.Saturation</key>
+			<integer>1</integer>
+			<key>com.typemytype.robofont.Image.Sharpness</key>
+			<real>0.4</real>
+		</dict>
+	</lib>
+</glyph>
diff --git a/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/I_J_.glif b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/I_J_.glif
new file mode 100644
index 0000000..0ede840
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/I_J_.glif
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="IJ" format="2">
+	<advance width="1327"/>
+	<outline>
+		<contour>
+			<point x="522" y="460" type="line"/>
+			<point x="522" y="800" type="line"/>
+			<point x="90" y="800" type="line"/>
+			<point x="90" y="460" type="line"/>
+		</contour>
+		<contour>
+			<point x="663" y="-10" type="curve" smooth="yes"/>
+			<point x="1016" y="-10"/>
+			<point x="1237" y="134"/>
+			<point x="1237" y="433" type="curve" smooth="yes"/>
+			<point x="1237" y="800" type="line"/>
+			<point x="806" y="800" type="line"/>
+			<point x="806" y="433" type="line" smooth="yes"/>
+			<point x="806" y="328"/>
+			<point x="752" y="284"/>
+			<point x="664" y="284" type="curve" smooth="yes"/>
+			<point x="576" y="284"/>
+			<point x="522" y="310.0740740741"/>
+			<point x="522" y="372" type="curve" smooth="yes"/>
+			<point x="522" y="410" type="line"/>
+			<point x="90" y="410" type="line"/>
+			<point x="90" y="372" type="line" smooth="yes"/>
+			<point x="90" y="114.4825870647"/>
+			<point x="310" y="-10"/>
+		</contour>
+	</outline>
+</glyph>
diff --git a/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/S_.closed.glif b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/S_.closed.glif
new file mode 100644
index 0000000..1c43b40
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/S_.closed.glif
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="S.closed" format="2">
+	<advance width="1313"/>
+	<outline>
+		<contour>
+			<point x="1283" y="253" type="curve" smooth="yes"/>
+			<point x="1283" y="432"/>
+			<point x="1188" y="485"/>
+			<point x="847" y="491" type="curve" smooth="yes"/>
+			<point x="515" y="497" type="line" smooth="yes"/>
+			<point x="429" y="498"/>
+			<point x="428" y="502"/>
+			<point x="428" y="512" type="curve" smooth="yes"/>
+			<point x="428" y="523"/>
+			<point x="442" y="527"/>
+			<point x="515" y="527" type="curve" smooth="yes"/>
+			<point x="762" y="527" type="line" smooth="yes"/>
+			<point x="879" y="527"/>
+			<point x="911" y="520"/>
+			<point x="911" y="472" type="curve"/>
+			<point x="1247" y="472" type="line"/>
+			<point x="1247" y="723"/>
+			<point x="1104" y="810"/>
+			<point x="750" y="810" type="curve" smooth="yes"/>
+			<point x="595" y="810" type="line" smooth="yes"/>
+			<point x="198" y="810"/>
+			<point x="36" y="729"/>
+			<point x="36" y="529" type="curve" smooth="yes"/>
+			<point x="36" y="364"/>
+			<point x="184" y="303"/>
+			<point x="504" y="299" type="curve" smooth="yes"/>
+			<point x="831" y="295" type="line" smooth="yes"/>
+			<point x="901" y="294"/>
+			<point x="918" y="289"/>
+			<point x="918" y="276" type="curve" smooth="yes"/>
+			<point x="918" y="268"/>
+			<point x="903" y="264"/>
+			<point x="831" y="264" type="curve" smooth="yes"/>
+			<point x="487" y="264" type="line" smooth="yes"/>
+			<point x="420" y="264"/>
+			<point x="376" y="289"/>
+			<point x="376" y="336" type="curve"/>
+			<point x="30" y="336" type="line"/>
+			<point x="30" y="44"/>
+			<point x="203" y="-10"/>
+			<point x="475" y="-10" type="curve" smooth="yes"/>
+			<point x="856" y="-10" type="line" smooth="yes"/>
+			<point x="1195" y="-10"/>
+			<point x="1283" y="92"/>
+		</contour>
+	</outline>
+	<lib>
+		<dict>
+			<key>com.typemytype.robofont.Image.Brightness</key>
+			<integer>0</integer>
+			<key>com.typemytype.robofont.Image.Contrast</key>
+			<integer>1</integer>
+			<key>com.typemytype.robofont.Image.Saturation</key>
+			<integer>1</integer>
+			<key>com.typemytype.robofont.Image.Sharpness</key>
+			<real>0.4</real>
+		</dict>
+	</lib>
+</glyph>
diff --git a/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/S_.glif b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/S_.glif
new file mode 100644
index 0000000..cd5d502
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/S_.glif
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="S" format="2">
+	<unicode hex="0053"/>
+	<advance width="1210"/>
+	<outline>
+		<contour>
+			<point x="1190" y="253" type="curve" smooth="yes"/>
+			<point x="1190" y="462"/>
+			<point x="1065" y="523"/>
+			<point x="724" y="531" type="curve" smooth="yes"/>
+			<point x="519" y="536" type="line" smooth="yes"/>
+			<point x="383" y="539"/>
+			<point x="372" y="542"/>
+			<point x="372" y="552" type="curve" smooth="yes"/>
+			<point x="372" y="563"/>
+			<point x="396" y="567"/>
+			<point x="485" y="567" type="curve" smooth="yes"/>
+			<point x="689" y="567" type="line" smooth="yes"/>
+			<point x="838" y="567"/>
+			<point x="985" y="558"/>
+			<point x="1094" y="548" type="curve"/>
+			<point x="1129" y="780" type="line"/>
+			<point x="1023" y="793"/>
+			<point x="841" y="810"/>
+			<point x="744" y="810" type="curve" smooth="yes"/>
+			<point x="614" y="810" type="line" smooth="yes"/>
+			<point x="182" y="810"/>
+			<point x="20" y="729"/>
+			<point x="20" y="529" type="curve" smooth="yes"/>
+			<point x="20" y="343"/>
+			<point x="168" y="277"/>
+			<point x="488" y="269" type="curve" smooth="yes"/>
+			<point x="680" y="264" type="line" smooth="yes"/>
+			<point x="802" y="261"/>
+			<point x="825" y="259"/>
+			<point x="825" y="246" type="curve" smooth="yes"/>
+			<point x="825" y="238"/>
+			<point x="800" y="234"/>
+			<point x="711" y="234" type="curve" smooth="yes"/>
+			<point x="519" y="234" type="line" smooth="yes"/>
+			<point x="346" y="234"/>
+			<point x="185" y="242"/>
+			<point x="61" y="255" type="curve"/>
+			<point x="26" y="20" type="line"/>
+			<point x="152" y="5"/>
+			<point x="349" y="-10"/>
+			<point x="466" y="-10" type="curve" smooth="yes"/>
+			<point x="613" y="-10" type="line" smooth="yes"/>
+			<point x="1059" y="-10"/>
+			<point x="1190" y="92"/>
+		</contour>
+	</outline>
+	<lib>
+		<dict>
+			<key>com.typemytype.robofont.Image.Brightness</key>
+			<integer>0</integer>
+			<key>com.typemytype.robofont.Image.Contrast</key>
+			<integer>1</integer>
+			<key>com.typemytype.robofont.Image.Saturation</key>
+			<integer>1</integer>
+			<key>com.typemytype.robofont.Image.Sharpness</key>
+			<real>0.4</real>
+		</dict>
+	</lib>
+</glyph>
diff --git a/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/contents.plist b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/contents.plist
new file mode 100644
index 0000000..9f8a737
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/contents.plist
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+	<dict>
+		<key>A</key>
+		<string>A_.glif</string>
+		<key>I</key>
+		<string>I_.glif</string>
+		<key>I.narrow</key>
+		<string>I_.narrow.glif</string>
+		<key>IJ</key>
+		<string>I_J_.glif</string>
+		<key>S</key>
+		<string>S_.glif</string>
+		<key>S.closed</key>
+		<string>S_.closed.glif</string>
+	</dict>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/layerinfo.plist b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/layerinfo.plist
new file mode 100644
index 0000000..a1a92f9
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/glyphs/layerinfo.plist
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+	<dict>
+		<key>color</key>
+		<string>1,0.75,0,0.7</string>
+		<key>lib</key>
+		<dict>
+			<key>com.typemytype.robofont.segmentType</key>
+			<string>curve</string>
+		</dict>
+	</dict>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/layercontents.plist b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/layercontents.plist
new file mode 100644
index 0000000..8964c56
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/layercontents.plist
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+	<array>
+		<array>
+			<string>foreground</string>
+			<string>glyphs</string>
+		</array>
+		<array>
+			<string>background</string>
+			<string>glyphs.background</string>
+		</array>
+	</array>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/lib.plist b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/lib.plist
new file mode 100644
index 0000000..212920f
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/lib.plist
@@ -0,0 +1,396 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+	<dict>
+		<key>com.defcon.sortDescriptor</key>
+		<array>
+			<dict>
+				<key>allowPseudoUnicode</key>
+				<true/>
+				<key>ascending</key>
+				<true/>
+				<key>type</key>
+				<string>alphabetical</string>
+			</dict>
+			<dict>
+				<key>allowPseudoUnicode</key>
+				<true/>
+				<key>ascending</key>
+				<true/>
+				<key>type</key>
+				<string>category</string>
+			</dict>
+			<dict>
+				<key>allowPseudoUnicode</key>
+				<true/>
+				<key>ascending</key>
+				<true/>
+				<key>type</key>
+				<string>unicode</string>
+			</dict>
+			<dict>
+				<key>allowPseudoUnicode</key>
+				<true/>
+				<key>ascending</key>
+				<true/>
+				<key>type</key>
+				<string>script</string>
+			</dict>
+			<dict>
+				<key>allowPseudoUnicode</key>
+				<true/>
+				<key>ascending</key>
+				<true/>
+				<key>type</key>
+				<string>suffix</string>
+			</dict>
+			<dict>
+				<key>allowPseudoUnicode</key>
+				<true/>
+				<key>ascending</key>
+				<true/>
+				<key>type</key>
+				<string>decompositionBase</string>
+			</dict>
+		</array>
+		<key>com.letterror.lightMeter.prefs</key>
+		<dict>
+			<key>chunkSize</key>
+			<integer>5</integer>
+			<key>diameter</key>
+			<integer>200</integer>
+			<key>drawTail</key>
+			<false/>
+			<key>invert</key>
+			<false/>
+			<key>toolDiameter</key>
+			<integer>30</integer>
+			<key>toolStyle</key>
+			<string>fluid</string>
+		</dict>
+		<key>com.typemytype.robofont.background.layerStrokeColor</key>
+		<array>
+			<integer>0</integer>
+			<real>0.8</real>
+			<real>0.2</real>
+			<real>0.7</real>
+		</array>
+		<key>com.typemytype.robofont.compileSettings.autohint</key>
+		<true/>
+		<key>com.typemytype.robofont.compileSettings.checkOutlines</key>
+		<false/>
+		<key>com.typemytype.robofont.compileSettings.createDummyDSIG</key>
+		<true/>
+		<key>com.typemytype.robofont.compileSettings.decompose</key>
+		<false/>
+		<key>com.typemytype.robofont.compileSettings.generateFormat</key>
+		<integer>0</integer>
+		<key>com.typemytype.robofont.compileSettings.releaseMode</key>
+		<false/>
+		<key>com.typemytype.robofont.foreground.layerStrokeColor</key>
+		<array>
+			<real>0.5</real>
+			<integer>0</integer>
+			<real>0.5</real>
+			<real>0.7</real>
+		</array>
+		<key>com.typemytype.robofont.italicSlantOffset</key>
+		<integer>0</integer>
+		<key>com.typemytype.robofont.segmentType</key>
+		<string>curve</string>
+		<key>com.typemytype.robofont.shouldAddPointsInSplineConversion</key>
+		<integer>1</integer>
+		<key>com.typesupply.defcon.sortDescriptor</key>
+		<array>
+			<dict>
+				<key>ascending</key>
+				<array>
+					<string>space</string>
+					<string>A</string>
+					<string>Agrave</string>
+					<string>Aacute</string>
+					<string>Acircumflex</string>
+					<string>Atilde</string>
+					<string>Adieresis</string>
+					<string>Aring</string>
+					<string>B</string>
+					<string>C</string>
+					<string>Ccedilla</string>
+					<string>D</string>
+					<string>E</string>
+					<string>Egrave</string>
+					<string>Eacute</string>
+					<string>Ecircumflex</string>
+					<string>Edieresis</string>
+					<string>F</string>
+					<string>G</string>
+					<string>H</string>
+					<string>I</string>
+					<string>Igrave</string>
+					<string>Iacute</string>
+					<string>Icircumflex</string>
+					<string>Idieresis</string>
+					<string>J</string>
+					<string>K</string>
+					<string>L</string>
+					<string>M</string>
+					<string>N</string>
+					<string>Ntilde</string>
+					<string>O</string>
+					<string>Ograve</string>
+					<string>Oacute</string>
+					<string>Ocircumflex</string>
+					<string>Otilde</string>
+					<string>Odieresis</string>
+					<string>P</string>
+					<string>Q</string>
+					<string>R</string>
+					<string>S</string>
+					<string>Scaron</string>
+					<string>T</string>
+					<string>U</string>
+					<string>Ugrave</string>
+					<string>Uacute</string>
+					<string>Ucircumflex</string>
+					<string>Udieresis</string>
+					<string>V</string>
+					<string>W</string>
+					<string>X</string>
+					<string>Y</string>
+					<string>Yacute</string>
+					<string>Ydieresis</string>
+					<string>Z</string>
+					<string>Zcaron</string>
+					<string>AE</string>
+					<string>Eth</string>
+					<string>Oslash</string>
+					<string>Thorn</string>
+					<string>Lslash</string>
+					<string>OE</string>
+					<string>a</string>
+					<string>agrave</string>
+					<string>aacute</string>
+					<string>acircumflex</string>
+					<string>atilde</string>
+					<string>adieresis</string>
+					<string>aring</string>
+					<string>b</string>
+					<string>c</string>
+					<string>ccedilla</string>
+					<string>d</string>
+					<string>e</string>
+					<string>egrave</string>
+					<string>eacute</string>
+					<string>ecircumflex</string>
+					<string>edieresis</string>
+					<string>f</string>
+					<string>g</string>
+					<string>h</string>
+					<string>i</string>
+					<string>igrave</string>
+					<string>iacute</string>
+					<string>icircumflex</string>
+					<string>idieresis</string>
+					<string>j</string>
+					<string>k</string>
+					<string>l</string>
+					<string>m</string>
+					<string>n</string>
+					<string>ntilde</string>
+					<string>o</string>
+					<string>ograve</string>
+					<string>oacute</string>
+					<string>ocircumflex</string>
+					<string>otilde</string>
+					<string>odieresis</string>
+					<string>p</string>
+					<string>q</string>
+					<string>r</string>
+					<string>s</string>
+					<string>scaron</string>
+					<string>t</string>
+					<string>u</string>
+					<string>ugrave</string>
+					<string>uacute</string>
+					<string>ucircumflex</string>
+					<string>udieresis</string>
+					<string>v</string>
+					<string>w</string>
+					<string>x</string>
+					<string>y</string>
+					<string>yacute</string>
+					<string>ydieresis</string>
+					<string>z</string>
+					<string>zcaron</string>
+					<string>ordfeminine</string>
+					<string>ordmasculine</string>
+					<string>germandbls</string>
+					<string>ae</string>
+					<string>eth</string>
+					<string>oslash</string>
+					<string>thorn</string>
+					<string>dotlessi</string>
+					<string>lslash</string>
+					<string>oe</string>
+					<string>zero</string>
+					<string>one</string>
+					<string>two</string>
+					<string>three</string>
+					<string>four</string>
+					<string>five</string>
+					<string>six</string>
+					<string>seven</string>
+					<string>eight</string>
+					<string>nine</string>
+					<string>onesuperior</string>
+					<string>twosuperior</string>
+					<string>threesuperior</string>
+					<string>onequarter</string>
+					<string>onehalf</string>
+					<string>threequarters</string>
+					<string>underscore</string>
+					<string>hyphen</string>
+					<string>endash</string>
+					<string>emdash</string>
+					<string>parenleft</string>
+					<string>parenright</string>
+					<string>bracketleft</string>
+					<string>bracketright</string>
+					<string>braceleft</string>
+					<string>braceright</string>
+					<string>numbersign</string>
+					<string>percent</string>
+					<string>perthousand</string>
+					<string>quotesingle</string>
+					<string>quotedbl</string>
+					<string>quoteleft</string>
+					<string>quoteright</string>
+					<string>quotedblleft</string>
+					<string>quotedblright</string>
+					<string>quotesinglbase</string>
+					<string>quotedblbase</string>
+					<string>guilsinglleft</string>
+					<string>guilsinglright</string>
+					<string>guillemotleft</string>
+					<string>guillemotright</string>
+					<string>asterisk</string>
+					<string>dagger</string>
+					<string>daggerdbl</string>
+					<string>period</string>
+					<string>comma</string>
+					<string>colon</string>
+					<string>semicolon</string>
+					<string>ellipsis</string>
+					<string>exclam</string>
+					<string>exclamdown</string>
+					<string>question</string>
+					<string>questiondown</string>
+					<string>slash</string>
+					<string>backslash</string>
+					<string>fraction</string>
+					<string>bar</string>
+					<string>brokenbar</string>
+					<string>at</string>
+					<string>ampersand</string>
+					<string>section</string>
+					<string>paragraph</string>
+					<string>periodcentered</string>
+					<string>bullet</string>
+					<string>plus</string>
+					<string>minus</string>
+					<string>plusminus</string>
+					<string>divide</string>
+					<string>multiply</string>
+					<string>equal</string>
+					<string>less</string>
+					<string>greater</string>
+					<string>logicalnot</string>
+					<string>mu</string>
+					<string>dollar</string>
+					<string>cent</string>
+					<string>sterling</string>
+					<string>currency</string>
+					<string>yen</string>
+					<string>Euro</string>
+					<string>florin</string>
+					<string>asciicircum</string>
+					<string>asciitilde</string>
+					<string>acute</string>
+					<string>grave</string>
+					<string>hungarumlaut</string>
+					<string>circumflex</string>
+					<string>caron</string>
+					<string>breve</string>
+					<string>tilde</string>
+					<string>macron</string>
+					<string>dieresis</string>
+					<string>dotaccent</string>
+					<string>ring</string>
+					<string>cedilla</string>
+					<string>ogonek</string>
+					<string>copyright</string>
+					<string>registered</string>
+					<string>trademark</string>
+					<string>degree</string>
+					<string>fi</string>
+					<string>fl</string>
+					<string>.notdef</string>
+					<string>a_b_c</string>
+				</array>
+				<key>type</key>
+				<string>glyphList</string>
+			</dict>
+		</array>
+		<key>public.glyphOrder</key>
+		<array>
+			<string>A</string>
+			<string>Aacute</string>
+			<string>Adieresis</string>
+			<string>B</string>
+			<string>C</string>
+			<string>D</string>
+			<string>E</string>
+			<string>F</string>
+			<string>G</string>
+			<string>H</string>
+			<string>I</string>
+			<string>J</string>
+			<string>K</string>
+			<string>L</string>
+			<string>M</string>
+			<string>N</string>
+			<string>O</string>
+			<string>P</string>
+			<string>Q</string>
+			<string>R</string>
+			<string>S</string>
+			<string>T</string>
+			<string>U</string>
+			<string>V</string>
+			<string>W</string>
+			<string>X</string>
+			<string>Y</string>
+			<string>Z</string>
+			<string>S.closed</string>
+			<string>I.narrow</string>
+			<string>J.narrow</string>
+			<string>quotesinglbase</string>
+			<string>quotedblbase</string>
+			<string>quotedblleft</string>
+			<string>quotedblright</string>
+			<string>comma</string>
+			<string>period</string>
+			<string>colon</string>
+			<string>semicolon</string>
+			<string>dot</string>
+			<string>dieresis</string>
+			<string>acute</string>
+			<string>space</string>
+			<string>IJ</string>
+			<string>arrowdown</string>
+			<string>arrowleft</string>
+			<string>arrowright</string>
+			<string>arrowup</string>
+		</array>
+	</dict>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/metainfo.plist b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/metainfo.plist
new file mode 100644
index 0000000..555d9ce
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansBoldWide.ufo/metainfo.plist
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+	<dict>
+		<key>creator</key>
+		<string>com.github.fonttools.ufoLib</string>
+		<key>formatVersion</key>
+		<integer>3</integer>
+	</dict>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/features.fea b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/features.fea
new file mode 100644
index 0000000..d48f133
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/features.fea
@@ -0,0 +1,2 @@
+# this is the feature from lightCondensed
+# Hi_this_is_the_feature.
diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/fontinfo.plist b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/fontinfo.plist
new file mode 100644
index 0000000..9c34565
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/fontinfo.plist
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+	<dict>
+		<key>ascender</key>
+		<integer>700</integer>
+		<key>capHeight</key>
+		<integer>700</integer>
+		<key>copyright</key>
+		<string>License same as MutatorMath. BSD 3-clause. [test-token: C]</string>
+		<key>descender</key>
+		<integer>-200</integer>
+		<key>familyName</key>
+		<string>MutatorMathTest</string>
+		<key>guidelines</key>
+		<array>
+		</array>
+		<key>italicAngle</key>
+		<integer>0</integer>
+		<key>openTypeNameLicense</key>
+		<string>License same as MutatorMath. BSD 3-clause. [test-token: C]</string>
+		<key>openTypeOS2VendorID</key>
+		<string>LTTR</string>
+		<key>postscriptBlueValues</key>
+		<array>
+		</array>
+		<key>postscriptDefaultWidthX</key>
+		<integer>500</integer>
+		<key>postscriptFamilyBlues</key>
+		<array>
+		</array>
+		<key>postscriptFamilyOtherBlues</key>
+		<array>
+		</array>
+		<key>postscriptFontName</key>
+		<string>MutatorMathTest-LightCondensed</string>
+		<key>postscriptFullName</key>
+		<string>MutatorMathTest LightCondensed</string>
+		<key>postscriptOtherBlues</key>
+		<array>
+		</array>
+		<key>postscriptSlantAngle</key>
+		<integer>0</integer>
+		<key>postscriptStemSnapH</key>
+		<array>
+		</array>
+		<key>postscriptStemSnapV</key>
+		<array>
+		</array>
+		<key>postscriptWindowsCharacterSet</key>
+		<integer>1</integer>
+		<key>styleMapFamilyName</key>
+		<string></string>
+		<key>styleMapStyleName</key>
+		<string>regular</string>
+		<key>styleName</key>
+		<string>LightCondensed</string>
+		<key>unitsPerEm</key>
+		<integer>1000</integer>
+		<key>versionMajor</key>
+		<integer>1</integer>
+		<key>versionMinor</key>
+		<integer>2</integer>
+		<key>xHeight</key>
+		<integer>500</integer>
+		<key>year</key>
+		<integer>2004</integer>
+	</dict>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.background/S_.closed.glif b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.background/S_.closed.glif
new file mode 100644
index 0000000..961125d
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.background/S_.closed.glif
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="S.closed" format="2">
+	<advance width="1185"/>
+	<outline>
+		<contour>
+			<point x="410" y="191" type="curve" smooth="yes"/>
+			<point x="410" y="317"/>
+			<point x="330" y="362"/>
+			<point x="36" y="372" type="curve" smooth="yes"/>
+			<point x="-138" y="378" type="line" smooth="yes"/>
+			<point x="-347" y="385"/>
+			<point x="-486" y="412"/>
+			<point x="-486" y="518" type="curve"/>
+			<point x="-486" y="615"/>
+			<point x="-373" y="672"/>
+			<point x="-105" y="672" type="curve" smooth="yes"/>
+			<point x="-34" y="672" type="line" smooth="yes"/>
+			<point x="221" y="672"/>
+			<point x="312" y="617"/>
+			<point x="324" y="479" type="curve"/>
+			<point x="363" y="479" type="line"/>
+			<point x="354" y="633"/>
+			<point x="254" y="708"/>
+			<point x="-37" y="708" type="curve" smooth="yes"/>
+			<point x="-105" y="708" type="line" smooth="yes"/>
+			<point x="-392" y="708"/>
+			<point x="-525" y="642"/>
+			<point x="-525" y="518" type="curve" smooth="yes"/>
+			<point x="-525" y="401"/>
+			<point x="-436" y="352"/>
+			<point x="-152" y="342" type="curve" smooth="yes"/>
+			<point x="22" y="336" type="line" smooth="yes"/>
+			<point x="252" y="328"/>
+			<point x="371" y="310"/>
+			<point x="371" y="197" type="curve" smooth="yes"/>
+			<point x="371" y="85"/>
+			<point x="249" y="28"/>
+			<point x="-79" y="28" type="curve" smooth="yes"/>
+			<point x="-110" y="28" type="line" smooth="yes"/>
+			<point x="-431" y="28"/>
+			<point x="-505" y="60"/>
+			<point x="-505" y="221" type="curve"/>
+			<point x="-545" y="221" type="line"/>
+			<point x="-541" y="59"/>
+			<point x="-506" y="-8"/>
+			<point x="-107" y="-8" type="curve" smooth="yes"/>
+			<point x="-79" y="-8" type="line" smooth="yes"/>
+			<point x="268" y="-8"/>
+			<point x="410" y="64"/>
+		</contour>
+		<contour>
+			<point x="44" y="544" type="curve" smooth="yes"/>
+			<point x="45" y="463"/>
+			<point x="94" y="408"/>
+			<point x="176" y="343" type="curve" smooth="yes"/>
+			<point x="226" y="303" type="line" smooth="yes"/>
+			<point x="288" y="254"/>
+			<point x="309" y="207"/>
+			<point x="309" y="144" type="curve" smooth="yes"/>
+			<point x="309" y="82"/>
+			<point x="275" y="28"/>
+			<point x="190" y="28" type="curve" smooth="yes"/>
+			<point x="182" y="28" type="line" smooth="yes"/>
+			<point x="92" y="28"/>
+			<point x="70" y="79"/>
+			<point x="73" y="222" type="curve"/>
+			<point x="30" y="222" type="line"/>
+			<point x="20" y="47"/>
+			<point x="68" y="-10"/>
+			<point x="184" y="-10" type="curve" smooth="yes"/>
+			<point x="191" y="-10" type="line" smooth="yes"/>
+			<point x="302" y="-10"/>
+			<point x="348" y="62"/>
+			<point x="347" y="157" type="curve" smooth="yes"/>
+			<point x="346" y="238"/>
+			<point x="303" y="295"/>
+			<point x="221" y="360" type="curve" smooth="yes"/>
+			<point x="171" y="400" type="line" smooth="yes"/>
+			<point x="100" y="457"/>
+			<point x="82" y="494"/>
+			<point x="82" y="557" type="curve" smooth="yes"/>
+			<point x="82" y="619"/>
+			<point x="126" y="673"/>
+			<point x="209" y="673" type="curve" smooth="yes"/>
+			<point x="217" y="673" type="line" smooth="yes"/>
+			<point x="270" y="673"/>
+			<point x="313" y="663"/>
+			<point x="356" y="637" type="curve"/>
+			<point x="373" y="674" type="line"/>
+			<point x="333" y="694"/>
+			<point x="294" y="711"/>
+			<point x="227" y="711" type="curve" smooth="yes"/>
+			<point x="220" y="711" type="line" smooth="yes"/>
+			<point x="102" y="711"/>
+			<point x="43" y="639"/>
+		</contour>
+	</outline>
+</glyph>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.background/S_.glif b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.background/S_.glif
new file mode 100644
index 0000000..824f595
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.background/S_.glif
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="S" format="2">
+	<unicode hex="0053"/>
+	<advance width="500"/>
+	<outline>
+		<contour>
+			<point x="1194" y="247.6" type="curve" smooth="yes"/>
+			<point x="1194" y="444.6"/>
+			<point x="1073.8" y="523.6"/>
+			<point x="736.4" y="528.6" type="curve" smooth="yes"/>
+			<point x="535.6" y="531.8" type="line" smooth="yes"/>
+			<point x="385.1973977602" y="533.9697232549"/>
+			<point x="358" y="537.2"/>
+			<point x="358" y="555" type="curve" smooth="yes"/>
+			<point x="358" y="575"/>
+			<point x="396" y="580.2"/>
+			<point x="510" y="580.2" type="curve" smooth="yes"/>
+			<point x="716.2" y="580.2" type="line" smooth="yes"/>
+			<point x="842.4" y="580.2"/>
+			<point x="879" y="569.6"/>
+			<point x="879" y="528.2" type="curve"/>
+			<point x="1144" y="528.6" type="line"/>
+			<point x="1144" y="731.1565217391"/>
+			<point x="1052.4" y="797.4"/>
+			<point x="684.4" y="797.4" type="curve" smooth="yes"/>
+			<point x="578.4" y="797.4" type="line" smooth="yes"/>
+			<point x="202.2" y="797.4"/>
+			<point x="48.6" y="717.6"/>
+			<point x="48.6" y="526" type="curve" smooth="yes"/>
+			<point x="48.6" y="340.6"/>
+			<point x="184.6" y="263.2"/>
+			<point x="502.8" y="258.8" type="curve" smooth="yes"/>
+			<point x="692.4" y="256.2" type="line" smooth="yes"/>
+			<point x="833.6" y="254.4"/>
+			<point x="874" y="254.2"/>
+			<point x="874" y="234" type="curve" smooth="yes"/>
+			<point x="874" y="216.3333333333"/>
+			<point x="832.8" y="208.2"/>
+			<point x="703" y="208.2" type="curve" smooth="yes"/>
+			<point x="538.6" y="208.2" type="line" smooth="yes"/>
+			<point x="406.6987654321" y="208.2"/>
+			<point x="330.999987685" y="211.400763527"/>
+			<point x="330.4" y="267.4" type="curve"/>
+			<point x="46" y="267.4" type="line"/>
+			<point x="47.8" y="61"/>
+			<point x="134.8" y="-9.4"/>
+			<point x="494.6" y="-9.4" type="curve" smooth="yes"/>
+			<point x="621.8" y="-9.4" type="line" smooth="yes"/>
+			<point x="1058.2" y="-9.4"/>
+			<point x="1194.6" y="89.6"/>
+		</contour>
+	</outline>
+	<lib>
+		<dict>
+			<key>com.letterror.skateboard.navigator</key>
+			<dict>
+				<key>location</key>
+				<dict>
+					<key>weight</key>
+					<integer>820</integer>
+					<key>width</key>
+					<integer>1000</integer>
+				</dict>
+			</dict>
+			<key>com.typemytype.robofont.Image.Brightness</key>
+			<integer>0</integer>
+			<key>com.typemytype.robofont.Image.Contrast</key>
+			<integer>1</integer>
+			<key>com.typemytype.robofont.Image.Saturation</key>
+			<integer>1</integer>
+			<key>com.typemytype.robofont.Image.Sharpness</key>
+			<real>0.4</real>
+		</dict>
+	</lib>
+</glyph>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.background/contents.plist b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.background/contents.plist
new file mode 100644
index 0000000..ad569c1
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.background/contents.plist
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+	<dict>
+		<key>S</key>
+		<string>S_.glif</string>
+		<key>S.closed</key>
+		<string>S_.closed.glif</string>
+	</dict>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.background/layerinfo.plist b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.background/layerinfo.plist
new file mode 100644
index 0000000..f4b11f8
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.background/layerinfo.plist
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+	<dict>
+		<key>color</key>
+		<string>0,1,1,0.7</string>
+	</dict>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.S_.middle/S_.closed.glif b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.S_.middle/S_.closed.glif
new file mode 100644
index 0000000..b215ae5
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.S_.middle/S_.closed.glif
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="S.closed" format="2">
+	<advance width="980"/>
+	<outline>
+		<contour>
+			<point x="944.9912554794" y="234.4484055198" type="curve" smooth="yes"/>
+			<point x="945.0241880449" y="404.4745190369"/>
+			<point x="839.9994748839" y="487.9867758324"/>
+			<point x="588" y="498" type="curve" smooth="yes"/>
+			<point x="407" y="505" type="line" smooth="yes"/>
+			<point x="311" y="509"/>
+			<point x="280" y="518"/>
+			<point x="280" y="545" type="curve" smooth="yes"/>
+			<point x="280" y="574"/>
+			<point x="315" y="591"/>
+			<point x="424" y="591" type="curve" smooth="yes"/>
+			<point x="544" y="591" type="line" smooth="yes"/>
+			<point x="620" y="591"/>
+			<point x="648.5469644624" y="577.4750863699"/>
+			<point x="651" y="537" type="curve"/>
+			<point x="903" y="537" type="line"/>
+			<point x="900.9154761332" y="697.508337744"/>
+			<point x="811.1969422372" y="783.5804648146"/>
+			<point x="526.4506973166" y="783.5804648146" type="curve" smooth="yes"/>
+			<point x="478.5230635213" y="783.5804648146" type="line" smooth="yes"/>
+			<point x="172.0010079402" y="783.5804648146"/>
+			<point x="40" y="699"/>
+			<point x="40" y="528" type="curve" smooth="yes"/>
+			<point x="40" y="353.3080168776"/>
+			<point x="160" y="287"/>
+			<point x="396" y="274" type="curve" smooth="yes"/>
+			<point x="578" y="264" type="line" smooth="yes"/>
+			<point x="663" y="259"/>
+			<point x="700" y="252"/>
+			<point x="700" y="229" type="curve" smooth="yes"/>
+			<point x="700" y="197"/>
+			<point x="663.1060475713" y="183.5387935198"/>
+			<point x="551.2186478204" y="183.5387935198" type="curve" smooth="yes"/>
+			<point x="401" y="184" type="line" smooth="yes"/>
+			<point x="306" y="184"/>
+			<point x="266.6609631958" y="197.7154658828"/>
+			<point x="266" y="242" type="curve"/>
+			<point x="39" y="242" type="line"/>
+			<point x="39.8934794641" y="58.8367098618"/>
+			<point x="141.6707294626" y="-9.6287333453"/>
+			<point x="417.6093085818" y="-9.6287333453" type="curve" smooth="yes"/>
+			<point x="501.7724636952" y="-9.6287333453" type="line" smooth="yes"/>
+			<point x="831.4565025653" y="-9.6287333453"/>
+			<point x="945.5039786114" y="90.3794534875"/>
+		</contour>
+	</outline>
+	<lib>
+		<dict>
+			<key>com.letterror.skateboard.navigator</key>
+			<dict>
+				<key>location</key>
+				<dict>
+					<key>weight</key>
+					<integer>700</integer>
+					<key>width</key>
+					<real>569.078</real>
+				</dict>
+			</dict>
+		</dict>
+	</lib>
+</glyph>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.S_.middle/contents.plist b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.S_.middle/contents.plist
new file mode 100644
index 0000000..070780a
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.S_.middle/contents.plist
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+	<dict>
+		<key>S.closed</key>
+		<string>S_.closed.glif</string>
+	</dict>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.S_.middle/layerinfo.plist b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.S_.middle/layerinfo.plist
new file mode 100644
index 0000000..d308c31
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.S_.middle/layerinfo.plist
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+	<dict>
+		<key>color</key>
+		<string>0.5,0,1,0.7</string>
+	</dict>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.S_.wide/S_.closed.glif b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.S_.wide/S_.closed.glif
new file mode 100644
index 0000000..6166c85
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.S_.wide/S_.closed.glif
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="S.closed" format="2">
+	<advance width="1227"/>
+	<outline>
+		<contour>
+			<point x="1192.2196930463" y="242.2087888125" type="curve" smooth="yes"/>
+			<point x="1192.5084644118" y="436.0700597012"/>
+			<point x="1076.7970722136" y="493.3695717368"/>
+			<point x="742.6578524113" y="495.4016301835" type="curve" smooth="yes"/>
+			<point x="526.5616770713" y="498.0326309195" type="line" smooth="yes"/>
+			<point x="364.1501240361" y="496.9684322444"/>
+			<point x="316.7761633462" y="503.8292942239"/>
+			<point x="316.7761633462" y="540.4279093859" type="curve" smooth="yes"/>
+			<point x="316.7761633462" y="574.3794945886"/>
+			<point x="364.4831938505" y="590.855246299"/>
+			<point x="508.834173868" y="590.855246299" type="curve" smooth="yes"/>
+			<point x="677.4707085027" y="590.855246299" type="line" smooth="yes"/>
+			<point x="857.3662880748" y="590.855246299"/>
+			<point x="912.7750543234" y="571.5683508248"/>
+			<point x="917.5557342634" y="504.6043944062" type="curve"/>
+			<point x="1126.4495542898" y="505.278194259" type="line"/>
+			<point x="1123.2249815995" y="720.2089523762"/>
+			<point x="1022.8399531122" y="786.0645258025"/>
+			<point x="667.6364528529" y="786.0645258025" type="curve" smooth="yes"/>
+			<point x="597.1982117061" y="786.0645258025" type="line" smooth="yes"/>
+			<point x="201.6851228482" y="786.0645258025"/>
+			<point x="44.930183775" y="707.0699919355"/>
+			<point x="44.6414142788" y="523.9679415533" type="curve" smooth="yes"/>
+			<point x="44.3526429133" y="350.3687539185"/>
+			<point x="177.7379167461" y="288.4542703702"/>
+			<point x="493.0214813402" y="285.497069487" type="curve" smooth="yes"/>
+			<point x="700.7432870812" y="283.5398686037" type="line" smooth="yes"/>
+			<point x="857.5878744919" y="284.3741242535"/>
+			<point x="911.7105743798" y="281.0266063298"/>
+			<point x="911.7105743798" y="240.2194477008" type="curve" smooth="yes"/>
+			<point x="911.7105743798" y="203.3000027266"/>
+			<point x="863.927587732" y="186.8242510162"/>
+			<point x="700.406755173" y="186.8242510162" type="curve" smooth="yes"/>
+			<point x="538.6577706295" y="186.8242510162" type="line" smooth="yes"/>
+			<point x="405.0727944934" y="186.8242510162"/>
+			<point x="284.8923939226" y="195.7702669747"/>
+			<point x="283.9258784731" y="270.7649319851" type="curve"/>
+			<point x="41.2083799033" y="270.7649319851" type="line"/>
+			<point x="44.4487990707" y="71.1222350495"/>
+			<point x="144.6017555812" y="-9.3475997056"/>
+			<point x="502.5773791673" y="-9.3475997056" type="curve" smooth="yes"/>
+			<point x="632.4492271625" y="-9.3475997056" type="line" smooth="yes"/>
+			<point x="1059.6521924329" y="-9.3475997056"/>
+			<point x="1192.8934961665" y="87.486427322"/>
+		</contour>
+	</outline>
+	<lib>
+		<dict>
+			<key>com.letterror.skateboard.navigator</key>
+			<dict>
+				<key>location</key>
+				<dict>
+					<key>weight</key>
+					<real>673.7998527961</real>
+					<key>width</key>
+					<integer>1000</integer>
+				</dict>
+			</dict>
+		</dict>
+	</lib>
+</glyph>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.S_.wide/S_.glif b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.S_.wide/S_.glif
new file mode 100644
index 0000000..fb72577
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.S_.wide/S_.glif
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="S" format="2">
+	<advance width="1265"/>
+	<outline>
+		<contour>
+			<point x="1219.8299899343" y="252.6498416872" type="curve" smooth="yes"/>
+			<point x="1219.9816009328" y="461.1028305273"/>
+			<point x="1096.5513403077" y="518.7112598673"/>
+			<point x="756.9954361457" y="519.0050664077" type="curve" smooth="yes"/>
+			<point x="559.144621231" y="518.7874706918" type="line" smooth="yes"/>
+			<point x="403.6244615736" y="516.229798672"/>
+			<point x="364.1273973076" y="518.0252982261"/>
+			<point x="364.1273973076" y="543.0683372401" type="curve" smooth="yes"/>
+			<point x="364.1273973076" y="567.0105959664"/>
+			<point x="404.8230766884" y="576.171258152"/>
+			<point x="531.6999436351" y="576.171258152" type="curve" smooth="yes"/>
+			<point x="700.7815880437" y="576.171258152" type="line" smooth="yes"/>
+			<point x="869.4491649287" y="576.171258152"/>
+			<point x="1019.7804131239" y="558.9976503844"/>
+			<point x="1130.3702317222" y="540.5425943105" type="curve"/>
+			<point x="1165.1256377229" y="754.2670935458" type="line"/>
+			<point x="1053.7413503923" y="777.3270488342"/>
+			<point x="866.2657745281" y="800.4886655442"/>
+			<point x="744.8705947621" y="800.4886655442" type="curve" smooth="yes"/>
+			<point x="633.7818111221" y="800.4886655442" type="line" smooth="yes"/>
+			<point x="218.4465244342" y="800.4886655442"/>
+			<point x="54.6246931491" y="718.0915060221"/>
+			<point x="54.4730821506" y="524.0814325101" type="curve" smooth="yes"/>
+			<point x="54.3214711522" y="338.749893436"/>
+			<point x="200.5699595464" y="276.230253326"/>
+			<point x="519.6477122431" y="275.6332247888" type="curve" smooth="yes"/>
+			<point x="707.4721191292" y="275.6992095062" type="line" smooth="yes"/>
+			<point x="854.828899809" y="279.0777582867"/>
+			<point x="900.1492667489" y="279.1441835711"/>
+			<point x="900.1492667489" y="249.6847106479" type="curve" smooth="yes"/>
+			<point x="900.1492667489" y="224.8700808047"/>
+			<point x="856.378774542" y="215.7094186191"/>
+			<point x="715.0778938876" y="215.7094186191" type="curve" smooth="yes"/>
+			<point x="555.263057736" y="215.7094186191" type="line" smooth="yes"/>
+			<point x="374.9032376316" y="215.7094186191"/>
+			<point x="211.9545322043" y="231.581619121"/>
+			<point x="88.5450229067" y="252.7056710052" type="curve"/>
+			<point x="54.9916180483" y="36.2475394599" type="line"/>
+			<point x="183.0601381103" y="11.5032700522"/>
+			<point x="383.9095739294" y="-9.5191995431"/>
+			<point x="512.8448615591" y="-9.5191995431" type="curve" smooth="yes"/>
+			<point x="636.8468413153" y="-9.5191995431" type="line" smooth="yes"/>
+			<point x="1083.9114224444" y="-9.5191995431"/>
+			<point x="1219.6783789358" y="92.546121529"/>
+		</contour>
+	</outline>
+	<lib>
+		<dict>
+			<key>com.letterror.skateboard.navigator</key>
+			<dict>
+				<key>location</key>
+				<dict>
+					<key>weight</key>
+					<real>759.5997715405</real>
+					<key>width</key>
+					<integer>1000</integer>
+				</dict>
+			</dict>
+		</dict>
+	</lib>
+</glyph>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.S_.wide/contents.plist b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.S_.wide/contents.plist
new file mode 100644
index 0000000..ad569c1
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.S_.wide/contents.plist
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+	<dict>
+		<key>S</key>
+		<string>S_.glif</string>
+		<key>S.closed</key>
+		<string>S_.closed.glif</string>
+	</dict>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.S_.wide/layerinfo.plist b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.S_.wide/layerinfo.plist
new file mode 100644
index 0000000..c8b7178
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.S_.wide/layerinfo.plist
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+	<dict>
+		<key>color</key>
+		<string>0,0.25,1,0.7</string>
+	</dict>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.crossbar/S_.glif b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.crossbar/S_.glif
new file mode 100644
index 0000000..7b88578
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.crossbar/S_.glif
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="S" format="2">
+	<unicode hex="0053"/>
+	<advance width="664"/>
+	<outline>
+		<contour>
+			<point x="641.5462201613" y="242.363030807" type="curve" smooth="yes"/>
+			<point x="641.4354183989" y="437.1804052162"/>
+			<point x="538.194325907" y="494.8479999289"/>
+			<point x="398.3964404648" y="511.8312951" type="curve" smooth="yes"/>
+			<point x="346.6180439896" y="519.8201585474" type="line" smooth="yes"/>
+			<point x="273.0584669012" y="530.5846343318"/>
+			<point x="265.3964404648" y="536.6815154035"/>
+			<point x="265.3964404648" y="552.5540088121" type="curve" smooth="yes"/>
+			<point x="265.3964404648" y="569.2048986959"/>
+			<point x="281.8312951" y="578.7449868173"/>
+			<point x="334.5985550226" y="578.7449868173" type="curve" smooth="yes"/>
+			<point x="381.7232774757" y="578.7449868173" type="line" smooth="yes"/>
+			<point x="460.0668193156" y="578.7449868173"/>
+			<point x="536.5239470561" y="569.7449868173"/>
+			<point x="594.3079118076" y="558.1937621433" type="curve"/>
+			<point x="628.2026783214" y="768.58741847" type="line"/>
+			<point x="568.0835241445" y="783.1414272821"/>
+			<point x="467.9504492769" y="799.0306255197"/>
+			<point x="409.5072422272" y="799.0306255197" type="curve" smooth="yes"/>
+			<point x="369.606907437" y="799.0306255197" type="line" smooth="yes"/>
+			<point x="144.9031189283" y="799.0306255197"/>
+			<point x="34.3296211491" y="697.6870836798"/>
+			<point x="34.4404229116" y="530.6620264364" type="curve" smooth="yes"/>
+			<point x="34.551224674" y="356.2962114913"/>
+			<point x="150.4654801549" y="295.739418541"/>
+			<point x="277.8145902711" y="276.9777268948" type="curve" smooth="yes"/>
+			<point x="328.7037885087" y="268.0996652098" type="line" smooth="yes"/>
+			<point x="396.1469955584" y="255.5595770884"/>
+			<point x="409.7010043705" y="253.2383083538"/>
+			<point x="409.7010043705" y="234.6982202324" type="curve" smooth="yes"/>
+			<point x="409.7010043705" y="220.7149250613"/>
+			<point x="392.3769514977" y="211.1748369399"/>
+			<point x="339.6096915752" y="211.1748369399" type="curve" smooth="yes"/>
+			<point x="293.3741673596" y="211.1748369399" type="line" smooth="yes"/>
+			<point x="203.0501735197" y="211.1748369399"/>
+			<point x="119.1638668053" y="219.395114206"/>
+			<point x="53.8947665139" y="233.8368633763" type="curve"/>
+			<point x="20" y="20.775612337" type="line"/>
+			<point x="87.5556580141" y="5.1665825631"/>
+			<point x="200.4174822137" y="-10"/>
+			<point x="266.4794008457" y="-10" type="curve" smooth="yes"/>
+			<point x="306.3797356359" y="-10" type="line" smooth="yes"/>
+			<point x="570.2082465977" y="-10"/>
+			<point x="641.6570219237" y="104.6815154035"/>
+		</contour>
+	</outline>
+	<lib>
+		<dict>
+			<key>com.letterror.skateboard.navigator</key>
+			<dict>
+				<key>location</key>
+				<dict>
+					<key>weight</key>
+					<real>889.1982375724</real>
+					<key>width</key>
+					<integer>0</integer>
+				</dict>
+			</dict>
+		</dict>
+	</lib>
+</glyph>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.crossbar/contents.plist b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.crossbar/contents.plist
new file mode 100644
index 0000000..269fb99
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.crossbar/contents.plist
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+	<dict>
+		<key>S</key>
+		<string>S_.glif</string>
+	</dict>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.crossbar/layerinfo.plist b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.crossbar/layerinfo.plist
new file mode 100644
index 0000000..7c2e64b
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.crossbar/layerinfo.plist
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+	<dict>
+		<key>color</key>
+		<string>0,1,0.25,0.7</string>
+	</dict>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.crossbars/E_.glif b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.crossbars/E_.glif
new file mode 100644
index 0000000..0efc33a
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.crossbars/E_.glif
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="E" format="2">
+  <advance width="537.46016"/>
+  <outline>
+    <contour>
+      <point x="45.68544" y="0.0" type="line"/>
+      <point x="264.61744" y="0.0" type="line"/>
+      <point x="264.61744" y="771.5728" type="line"/>
+      <point x="45.68544" y="771.5728" type="line"/>
+    </contour>
+    <contour>
+      <point x="115.78639999999999" y="568.092448" type="line"/>
+      <point x="504.61744" y="568.092448" type="line"/>
+      <point x="504.61744" y="771.5728" type="line"/>
+      <point x="115.78639999999999" y="771.5728" type="line"/>
+    </contour>
+    <contour>
+      <point x="115.78639999999999" y="0.0" type="line"/>
+      <point x="504.61744" y="0.0" type="line"/>
+      <point x="504.61744" y="203.48035199999998" type="line"/>
+      <point x="115.78639999999999" y="203.48035199999998" type="line"/>
+    </contour>
+    <contour>
+      <point x="115.78639999999999" y="320.401168" type="line"/>
+      <point x="474.597248" y="320.401168" type="line"/>
+      <point x="474.597248" y="452.30872" type="line"/>
+      <point x="115.78639999999999" y="452.30872" type="line"/>
+    </contour>
+  </outline>
+</glyph>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.crossbars/contents.plist b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.crossbars/contents.plist
new file mode 100644
index 0000000..a14a2f5
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.crossbars/contents.plist
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+  <dict>
+    <key>E</key>
+    <string>E_.glif</string>
+  </dict>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.crossbars/layerinfo.plist b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.crossbars/layerinfo.plist
new file mode 100644
index 0000000..564c7a6
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support.crossbars/layerinfo.plist
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+  <dict/>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support/A_.glif b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support/A_.glif
new file mode 100644
index 0000000..cda1ef4
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support/A_.glif
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="A" format="2">
+	<unicode hex="0041"/>
+	<advance width="930"/>
+	<lib>
+		<dict>
+			<key>com.letterror.skateboard.navigator</key>
+			<dict>
+				<key>location</key>
+				<dict>
+					<key>space</key>
+					<integer>0</integer>
+					<key>weight</key>
+					<integer>600</integer>
+					<key>width</key>
+					<integer>500</integer>
+				</dict>
+			</dict>
+			<key>com.typemytype.robofont.Image.Brightness</key>
+			<integer>0</integer>
+			<key>com.typemytype.robofont.Image.Contrast</key>
+			<integer>1</integer>
+			<key>com.typemytype.robofont.Image.Saturation</key>
+			<integer>1</integer>
+			<key>com.typemytype.robofont.Image.Sharpness</key>
+			<real>0.4</real>
+		</dict>
+	</lib>
+</glyph>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support/S_.glif b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support/S_.glif
new file mode 100644
index 0000000..104c47b
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support/S_.glif
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="S" format="2">
+	<unicode hex="0053"/>
+	<advance width="752"/>
+	<outline>
+		<contour>
+			<point x="728" y="234" type="curve" smooth="yes"/>
+			<point x="728" y="419"/>
+			<point x="627" y="472"/>
+			<point x="450" y="497" type="curve" smooth="yes"/>
+			<point x="365" y="509" type="line" smooth="yes"/>
+			<point x="279" y="521"/>
+			<point x="268" y="532"/>
+			<point x="268" y="553" type="curve" smooth="yes"/>
+			<point x="268" y="574"/>
+			<point x="290" y="588"/>
+			<point x="356" y="588" type="curve" smooth="yes"/>
+			<point x="431" y="588" type="line" smooth="yes"/>
+			<point x="522" y="588"/>
+			<point x="609" y="579"/>
+			<point x="676" y="566" type="curve"/>
+			<point x="708" y="759" type="line"/>
+			<point x="641" y="774"/>
+			<point x="530" y="790"/>
+			<point x="462" y="790" type="curve" smooth="yes"/>
+			<point x="407" y="790" type="line" smooth="yes"/>
+			<point x="151" y="790"/>
+			<point x="35" y="697"/>
+			<point x="36" y="532" type="curve" smooth="yes"/>
+			<point x="36" y="366"/>
+			<point x="150" y="305"/>
+			<point x="314" y="283" type="curve" smooth="yes"/>
+			<point x="395" y="272" type="line" smooth="yes"/>
+			<point x="476" y="261"/>
+			<point x="492" y="250"/>
+			<point x="492" y="226" type="curve" smooth="yes"/>
+			<point x="492" y="207"/>
+			<point x="469" y="193"/>
+			<point x="404" y="193" type="curve" smooth="yes"/>
+			<point x="331" y="193" type="line" smooth="yes"/>
+			<point x="227" y="193"/>
+			<point x="131" y="202"/>
+			<point x="56" y="218" type="curve"/>
+			<point x="24" y="22" type="line"/>
+			<point x="101" y="5"/>
+			<point x="223" y="-10"/>
+			<point x="301" y="-10" type="curve" smooth="yes"/>
+			<point x="360" y="-10" type="line" smooth="yes"/>
+			<point x="645" y="-10"/>
+			<point x="728" y="97"/>
+		</contour>
+	</outline>
+	<lib>
+		<dict>
+			<key>com.letterror.skateboard.navigator</key>
+			<dict>
+				<key>location</key>
+				<dict>
+					<key>space</key>
+					<integer>25</integer>
+					<key>weight</key>
+					<real>707.6485770089</real>
+					<key>width</key>
+					<real>181.3105119978</real>
+				</dict>
+			</dict>
+			<key>com.typemytype.robofont.Image.Brightness</key>
+			<integer>0</integer>
+			<key>com.typemytype.robofont.Image.Contrast</key>
+			<integer>1</integer>
+			<key>com.typemytype.robofont.Image.Saturation</key>
+			<integer>1</integer>
+			<key>com.typemytype.robofont.Image.Sharpness</key>
+			<real>0.4</real>
+		</dict>
+	</lib>
+</glyph>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support/contents.plist b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support/contents.plist
new file mode 100644
index 0000000..6aa5de8
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support/contents.plist
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+	<dict>
+		<key>A</key>
+		<string>A_.glif</string>
+		<key>S</key>
+		<string>S_.glif</string>
+	</dict>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support/layerinfo.plist b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support/layerinfo.plist
new file mode 100644
index 0000000..044b46c
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs.support/layerinfo.plist
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+	<dict>
+		<key>color</key>
+		<string>0,1,0.25,0.7</string>
+		<key>lib</key>
+		<dict>
+			<key>com.typemytype.robofont.segmentType</key>
+			<string>curve</string>
+		</dict>
+	</dict>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/A_.glif b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/A_.glif
new file mode 100644
index 0000000..9919ca8
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/A_.glif
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="A" format="2">
+	<unicode hex="0041"/>
+	<advance width="396"/>
+	<outline>
+		<contour>
+			<point x="20" y="0" type="line"/>
+			<point x="60" y="0" type="line"/>
+			<point x="200" y="700" type="line"/>
+			<point x="165" y="700" type="line"/>
+		</contour>
+		<contour>
+			<point x="75" y="164" type="line"/>
+			<point x="325" y="164" type="line"/>
+			<point x="325" y="200" type="line"/>
+			<point x="75" y="200" type="line"/>
+		</contour>
+		<contour>
+			<point x="332" y="0" type="line"/>
+			<point x="376" y="0" type="line"/>
+			<point x="231" y="700" type="line"/>
+			<point x="192" y="700" type="line"/>
+		</contour>
+		<contour>
+			<point x="175" y="661" type="line"/>
+			<point x="222" y="661" type="line"/>
+			<point x="222" y="700" type="line"/>
+			<point x="175" y="700" type="line"/>
+		</contour>
+	</outline>
+</glyph>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/I_.glif b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/I_.glif
new file mode 100644
index 0000000..5833a6b
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/I_.glif
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="I" format="2">
+	<unicode hex="0049"/>
+	<advance width="320"/>
+	<outline>
+		<contour>
+			<point x="140" y="0" type="line"/>
+			<point x="180" y="0" type="line"/>
+			<point x="180" y="700" type="line"/>
+			<point x="140" y="700" type="line"/>
+		</contour>
+		<contour>
+			<point x="60" y="664" type="line"/>
+			<point x="260" y="664" type="line"/>
+			<point x="260" y="700" type="line"/>
+			<point x="60" y="700" type="line"/>
+		</contour>
+		<contour>
+			<point x="60" y="0" type="line"/>
+			<point x="260" y="0" type="line"/>
+			<point x="260" y="36" type="line"/>
+			<point x="60" y="36" type="line"/>
+		</contour>
+	</outline>
+</glyph>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/I_.narrow.glif b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/I_.narrow.glif
new file mode 100644
index 0000000..6c0ac44
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/I_.narrow.glif
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="I.narrow" format="2">
+	<advance width="160"/>
+	<outline>
+		<contour>
+			<point x="60" y="0" type="line"/>
+			<point x="100" y="0" type="line"/>
+			<point x="100" y="700" type="line"/>
+			<point x="60" y="700" type="line"/>
+		</contour>
+	</outline>
+	<lib>
+		<dict>
+			<key>com.typemytype.robofont.Image.Brightness</key>
+			<integer>0</integer>
+			<key>com.typemytype.robofont.Image.Contrast</key>
+			<integer>1</integer>
+			<key>com.typemytype.robofont.Image.Saturation</key>
+			<integer>1</integer>
+			<key>com.typemytype.robofont.Image.Sharpness</key>
+			<real>0.4</real>
+		</dict>
+	</lib>
+</glyph>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/I_J_.glif b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/I_J_.glif
new file mode 100644
index 0000000..66b0b68
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/I_J_.glif
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="IJ" format="2">
+	<advance width="463"/>
+	<outline>
+		<contour>
+			<point x="100" y="320" type="line"/>
+			<point x="100" y="700" type="line"/>
+			<point x="60" y="700" type="line"/>
+			<point x="60" y="320" type="line"/>
+		</contour>
+		<contour>
+			<point x="232" y="-10" type="curve" smooth="yes"/>
+			<point x="338" y="-10"/>
+			<point x="403" y="38"/>
+			<point x="403" y="182" type="curve" smooth="yes"/>
+			<point x="403" y="700" type="line"/>
+			<point x="363" y="700" type="line"/>
+			<point x="363" y="182" type="line" smooth="yes"/>
+			<point x="363" y="60"/>
+			<point x="313" y="26"/>
+			<point x="232" y="26" type="curve" smooth="yes"/>
+			<point x="151" y="26"/>
+			<point x="100" y="60"/>
+			<point x="100" y="182" type="curve" smooth="yes"/>
+			<point x="100" y="240" type="line"/>
+			<point x="60" y="240" type="line"/>
+			<point x="60" y="182" type="line" smooth="yes"/>
+			<point x="60" y="38"/>
+			<point x="124" y="-10"/>
+		</contour>
+	</outline>
+</glyph>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/S_.closed.glif b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/S_.closed.glif
new file mode 100644
index 0000000..2972471
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/S_.closed.glif
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="S.closed" format="2">
+	<advance width="398"/>
+	<outline>
+		<contour>
+			<point x="358" y="157" type="curve" smooth="yes"/>
+			<point x="357" y="238"/>
+			<point x="311" y="300"/>
+			<point x="226" y="358" type="curve" smooth="yes"/>
+			<point x="168" y="398" type="line" smooth="yes"/>
+			<point x="102" y="443"/>
+			<point x="85" y="494"/>
+			<point x="85" y="557" type="curve" smooth="yes"/>
+			<point x="85" y="619"/>
+			<point x="117" y="673"/>
+			<point x="196" y="673" type="curve" smooth="yes"/>
+			<point x="201" y="673" type="line" smooth="yes"/>
+			<point x="297" y="673"/>
+			<point x="316" y="614"/>
+			<point x="316" y="479" type="curve"/>
+			<point x="355" y="479" type="line"/>
+			<point x="355" y="653"/>
+			<point x="316" y="711"/>
+			<point x="202" y="711" type="curve" smooth="yes"/>
+			<point x="195" y="711" type="line" smooth="yes"/>
+			<point x="90" y="711"/>
+			<point x="46" y="639"/>
+			<point x="47" y="544" type="curve" smooth="yes"/>
+			<point x="48" y="463"/>
+			<point x="88" y="399"/>
+			<point x="173" y="341" type="curve" smooth="yes"/>
+			<point x="231" y="301" type="line" smooth="yes"/>
+			<point x="305" y="250"/>
+			<point x="320" y="207"/>
+			<point x="320" y="144" type="curve" smooth="yes"/>
+			<point x="320" y="82"/>
+			<point x="283" y="28"/>
+			<point x="212" y="28" type="curve" smooth="yes"/>
+			<point x="204" y="28" type="line" smooth="yes"/>
+			<point x="100" y="28"/>
+			<point x="80" y="94"/>
+			<point x="80" y="222" type="curve"/>
+			<point x="40" y="222" type="line"/>
+			<point x="40" y="36"/>
+			<point x="102" y="-10"/>
+			<point x="194" y="-10" type="curve" smooth="yes"/>
+			<point x="201" y="-10" type="line" smooth="yes"/>
+			<point x="306" y="-10"/>
+			<point x="359" y="62"/>
+		</contour>
+	</outline>
+</glyph>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/S_.glif b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/S_.glif
new file mode 100644
index 0000000..0215663
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/S_.glif
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="S" format="2">
+	<unicode hex="0053"/>
+	<advance width="393"/>
+	<outline>
+		<contour>
+			<point x="349" y="157" type="curve" smooth="yes"/>
+			<point x="348" y="238"/>
+			<point x="299" y="293"/>
+			<point x="217" y="358" type="curve" smooth="yes"/>
+			<point x="167" y="398" type="line" smooth="yes"/>
+			<point x="105" y="447"/>
+			<point x="84" y="494"/>
+			<point x="84" y="557" type="curve" smooth="yes"/>
+			<point x="84" y="619"/>
+			<point x="128" y="673"/>
+			<point x="211" y="673" type="curve" smooth="yes"/>
+			<point x="219" y="673" type="line" smooth="yes"/>
+			<point x="268" y="673"/>
+			<point x="308" y="664"/>
+			<point x="348" y="640" type="curve"/>
+			<point x="365" y="677" type="line"/>
+			<point x="328" y="696"/>
+			<point x="291" y="711"/>
+			<point x="229" y="711" type="curve" smooth="yes"/>
+			<point x="222" y="711" type="line" smooth="yes"/>
+			<point x="104" y="711"/>
+			<point x="45" y="639"/>
+			<point x="46" y="544" type="curve" smooth="yes"/>
+			<point x="47" y="463"/>
+			<point x="90" y="406"/>
+			<point x="172" y="341" type="curve" smooth="yes"/>
+			<point x="222" y="301" type="line" smooth="yes"/>
+			<point x="293" y="244"/>
+			<point x="311" y="207"/>
+			<point x="311" y="144" type="curve" smooth="yes"/>
+			<point x="311" y="82"/>
+			<point x="267" y="28"/>
+			<point x="184" y="28" type="curve" smooth="yes"/>
+			<point x="176" y="28" type="line" smooth="yes"/>
+			<point x="123.2015503876" y="28"/>
+			<point x="80.353282757" y="37.9880303458"/>
+			<point x="37" y="64" type="curve"/>
+			<point x="20" y="27" type="line"/>
+			<point x="59.9143754538" y="6.503428821"/>
+			<point x="99.4411764706" y="-10"/>
+			<point x="166" y="-10" type="curve" smooth="yes"/>
+			<point x="173" y="-10" type="line" smooth="yes"/>
+			<point x="291" y="-10"/>
+			<point x="350" y="62"/>
+		</contour>
+	</outline>
+	<lib>
+		<dict>
+			<key>com.typemytype.robofont.Image.Brightness</key>
+			<integer>0</integer>
+			<key>com.typemytype.robofont.Image.Contrast</key>
+			<integer>1</integer>
+			<key>com.typemytype.robofont.Image.Saturation</key>
+			<integer>1</integer>
+			<key>com.typemytype.robofont.Image.Sharpness</key>
+			<real>0.4</real>
+		</dict>
+	</lib>
+</glyph>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/contents.plist b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/contents.plist
new file mode 100644
index 0000000..9f8a737
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/contents.plist
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+	<dict>
+		<key>A</key>
+		<string>A_.glif</string>
+		<key>I</key>
+		<string>I_.glif</string>
+		<key>I.narrow</key>
+		<string>I_.narrow.glif</string>
+		<key>IJ</key>
+		<string>I_J_.glif</string>
+		<key>S</key>
+		<string>S_.glif</string>
+		<key>S.closed</key>
+		<string>S_.closed.glif</string>
+	</dict>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/layerinfo.plist b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/layerinfo.plist
new file mode 100644
index 0000000..a1a92f9
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/glyphs/layerinfo.plist
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+	<dict>
+		<key>color</key>
+		<string>1,0.75,0,0.7</string>
+		<key>lib</key>
+		<dict>
+			<key>com.typemytype.robofont.segmentType</key>
+			<string>curve</string>
+		</dict>
+	</dict>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/layercontents.plist b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/layercontents.plist
new file mode 100644
index 0000000..4e957cd
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/layercontents.plist
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+	<array>
+		<array>
+			<string>foreground</string>
+			<string>glyphs</string>
+		</array>
+		<array>
+			<string>support</string>
+			<string>glyphs.support</string>
+		</array>
+		<array>
+			<string>support.crossbar</string>
+			<string>glyphs.support.crossbar</string>
+		</array>
+		<array>
+			<string>background</string>
+			<string>glyphs.background</string>
+		</array>
+		<array>
+			<string>support.S.wide</string>
+			<string>glyphs.support.S_.wide</string>
+		</array>
+		<array>
+			<string>support.S.middle</string>
+			<string>glyphs.support.S_.middle</string>
+		</array>
+	</array>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/lib.plist b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/lib.plist
new file mode 100644
index 0000000..47a92b7
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/lib.plist
@@ -0,0 +1,685 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+	<dict>
+		<key>com.defcon.sortDescriptor</key>
+		<array>
+			<dict>
+				<key>allowPseudoUnicode</key>
+				<true/>
+				<key>ascending</key>
+				<true/>
+				<key>type</key>
+				<string>alphabetical</string>
+			</dict>
+			<dict>
+				<key>allowPseudoUnicode</key>
+				<true/>
+				<key>ascending</key>
+				<true/>
+				<key>type</key>
+				<string>category</string>
+			</dict>
+			<dict>
+				<key>allowPseudoUnicode</key>
+				<true/>
+				<key>ascending</key>
+				<true/>
+				<key>type</key>
+				<string>unicode</string>
+			</dict>
+			<dict>
+				<key>allowPseudoUnicode</key>
+				<true/>
+				<key>ascending</key>
+				<true/>
+				<key>type</key>
+				<string>script</string>
+			</dict>
+			<dict>
+				<key>allowPseudoUnicode</key>
+				<true/>
+				<key>ascending</key>
+				<true/>
+				<key>type</key>
+				<string>suffix</string>
+			</dict>
+			<dict>
+				<key>allowPseudoUnicode</key>
+				<true/>
+				<key>ascending</key>
+				<true/>
+				<key>type</key>
+				<string>decompositionBase</string>
+			</dict>
+		</array>
+		<key>com.letterror.lightMeter.prefs</key>
+		<dict>
+			<key>chunkSize</key>
+			<integer>5</integer>
+			<key>diameter</key>
+			<integer>200</integer>
+			<key>drawTail</key>
+			<false/>
+			<key>invert</key>
+			<false/>
+			<key>toolDiameter</key>
+			<integer>30</integer>
+			<key>toolStyle</key>
+			<string>fluid</string>
+		</dict>
+		<key>com.typemytype.robofont.background.layerStrokeColor</key>
+		<array>
+			<integer>0</integer>
+			<real>0.8</real>
+			<real>0.2</real>
+			<real>0.7</real>
+		</array>
+		<key>com.typemytype.robofont.compileSettings.autohint</key>
+		<true/>
+		<key>com.typemytype.robofont.compileSettings.checkOutlines</key>
+		<false/>
+		<key>com.typemytype.robofont.compileSettings.createDummyDSIG</key>
+		<true/>
+		<key>com.typemytype.robofont.compileSettings.decompose</key>
+		<false/>
+		<key>com.typemytype.robofont.compileSettings.generateFormat</key>
+		<integer>0</integer>
+		<key>com.typemytype.robofont.compileSettings.releaseMode</key>
+		<false/>
+		<key>com.typemytype.robofont.foreground.layerStrokeColor</key>
+		<array>
+			<real>0.5</real>
+			<integer>0</integer>
+			<real>0.5</real>
+			<real>0.7</real>
+		</array>
+		<key>com.typemytype.robofont.italicSlantOffset</key>
+		<integer>0</integer>
+		<key>com.typemytype.robofont.segmentType</key>
+		<string>curve</string>
+		<key>com.typemytype.robofont.shouldAddPointsInSplineConversion</key>
+		<integer>1</integer>
+		<key>com.typesupply.MetricsMachine4.groupColors</key>
+		<dict>
+			<key>@MMK_L_A</key>
+			<array>
+				<integer>1</integer>
+				<integer>0</integer>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_C</key>
+			<array>
+				<integer>1</integer>
+				<real>0.5</real>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_E</key>
+			<array>
+				<integer>1</integer>
+				<integer>1</integer>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_I</key>
+			<array>
+				<integer>0</integer>
+				<integer>1</integer>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_N</key>
+			<array>
+				<integer>0</integer>
+				<integer>1</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_O</key>
+			<array>
+				<integer>0</integer>
+				<real>0.5</real>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_S</key>
+			<array>
+				<integer>0</integer>
+				<integer>0</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_U</key>
+			<array>
+				<real>0.5</real>
+				<integer>0</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_Y</key>
+			<array>
+				<integer>1</integer>
+				<integer>0</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_Z</key>
+			<array>
+				<integer>1</integer>
+				<integer>0</integer>
+				<real>0.5</real>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_a</key>
+			<array>
+				<integer>1</integer>
+				<integer>0</integer>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_c</key>
+			<array>
+				<integer>1</integer>
+				<real>0.5</real>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_e</key>
+			<array>
+				<integer>1</integer>
+				<integer>1</integer>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_i</key>
+			<array>
+				<integer>0</integer>
+				<integer>1</integer>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_n</key>
+			<array>
+				<integer>0</integer>
+				<integer>1</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_o</key>
+			<array>
+				<integer>0</integer>
+				<real>0.5</real>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_s</key>
+			<array>
+				<integer>0</integer>
+				<integer>0</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_u</key>
+			<array>
+				<real>0.5</real>
+				<integer>0</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_y</key>
+			<array>
+				<integer>1</integer>
+				<integer>0</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_z</key>
+			<array>
+				<integer>1</integer>
+				<integer>0</integer>
+				<real>0.5</real>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_A</key>
+			<array>
+				<integer>1</integer>
+				<integer>0</integer>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_C</key>
+			<array>
+				<integer>1</integer>
+				<real>0.5</real>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_E</key>
+			<array>
+				<integer>1</integer>
+				<integer>1</integer>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_I</key>
+			<array>
+				<integer>0</integer>
+				<integer>1</integer>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_N</key>
+			<array>
+				<integer>0</integer>
+				<integer>1</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_O</key>
+			<array>
+				<integer>0</integer>
+				<real>0.5</real>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_S</key>
+			<array>
+				<integer>0</integer>
+				<integer>0</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_U</key>
+			<array>
+				<real>0.5</real>
+				<integer>0</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_Y</key>
+			<array>
+				<integer>1</integer>
+				<integer>0</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_Z</key>
+			<array>
+				<integer>1</integer>
+				<integer>0</integer>
+				<real>0.5</real>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_a</key>
+			<array>
+				<integer>1</integer>
+				<integer>0</integer>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_c</key>
+			<array>
+				<integer>1</integer>
+				<real>0.5</real>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_e</key>
+			<array>
+				<integer>1</integer>
+				<integer>1</integer>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_i</key>
+			<array>
+				<integer>0</integer>
+				<integer>1</integer>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_n</key>
+			<array>
+				<integer>0</integer>
+				<integer>1</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_o</key>
+			<array>
+				<integer>0</integer>
+				<real>0.5</real>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_s</key>
+			<array>
+				<integer>0</integer>
+				<integer>0</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_u</key>
+			<array>
+				<real>0.5</real>
+				<integer>0</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_y</key>
+			<array>
+				<integer>1</integer>
+				<integer>0</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_z</key>
+			<array>
+				<integer>1</integer>
+				<integer>0</integer>
+				<real>0.5</real>
+				<real>0.25</real>
+			</array>
+		</dict>
+		<key>com.typesupply.defcon.sortDescriptor</key>
+		<array>
+			<dict>
+				<key>ascending</key>
+				<array>
+					<string>space</string>
+					<string>A</string>
+					<string>Agrave</string>
+					<string>Aacute</string>
+					<string>Acircumflex</string>
+					<string>Atilde</string>
+					<string>Adieresis</string>
+					<string>Aring</string>
+					<string>B</string>
+					<string>C</string>
+					<string>Ccedilla</string>
+					<string>D</string>
+					<string>E</string>
+					<string>Egrave</string>
+					<string>Eacute</string>
+					<string>Ecircumflex</string>
+					<string>Edieresis</string>
+					<string>F</string>
+					<string>G</string>
+					<string>H</string>
+					<string>I</string>
+					<string>Igrave</string>
+					<string>Iacute</string>
+					<string>Icircumflex</string>
+					<string>Idieresis</string>
+					<string>J</string>
+					<string>K</string>
+					<string>L</string>
+					<string>M</string>
+					<string>N</string>
+					<string>Ntilde</string>
+					<string>O</string>
+					<string>Ograve</string>
+					<string>Oacute</string>
+					<string>Ocircumflex</string>
+					<string>Otilde</string>
+					<string>Odieresis</string>
+					<string>P</string>
+					<string>Q</string>
+					<string>R</string>
+					<string>S</string>
+					<string>Scaron</string>
+					<string>T</string>
+					<string>U</string>
+					<string>Ugrave</string>
+					<string>Uacute</string>
+					<string>Ucircumflex</string>
+					<string>Udieresis</string>
+					<string>V</string>
+					<string>W</string>
+					<string>X</string>
+					<string>Y</string>
+					<string>Yacute</string>
+					<string>Ydieresis</string>
+					<string>Z</string>
+					<string>Zcaron</string>
+					<string>AE</string>
+					<string>Eth</string>
+					<string>Oslash</string>
+					<string>Thorn</string>
+					<string>Lslash</string>
+					<string>OE</string>
+					<string>a</string>
+					<string>agrave</string>
+					<string>aacute</string>
+					<string>acircumflex</string>
+					<string>atilde</string>
+					<string>adieresis</string>
+					<string>aring</string>
+					<string>b</string>
+					<string>c</string>
+					<string>ccedilla</string>
+					<string>d</string>
+					<string>e</string>
+					<string>egrave</string>
+					<string>eacute</string>
+					<string>ecircumflex</string>
+					<string>edieresis</string>
+					<string>f</string>
+					<string>g</string>
+					<string>h</string>
+					<string>i</string>
+					<string>igrave</string>
+					<string>iacute</string>
+					<string>icircumflex</string>
+					<string>idieresis</string>
+					<string>j</string>
+					<string>k</string>
+					<string>l</string>
+					<string>m</string>
+					<string>n</string>
+					<string>ntilde</string>
+					<string>o</string>
+					<string>ograve</string>
+					<string>oacute</string>
+					<string>ocircumflex</string>
+					<string>otilde</string>
+					<string>odieresis</string>
+					<string>p</string>
+					<string>q</string>
+					<string>r</string>
+					<string>s</string>
+					<string>scaron</string>
+					<string>t</string>
+					<string>u</string>
+					<string>ugrave</string>
+					<string>uacute</string>
+					<string>ucircumflex</string>
+					<string>udieresis</string>
+					<string>v</string>
+					<string>w</string>
+					<string>x</string>
+					<string>y</string>
+					<string>yacute</string>
+					<string>ydieresis</string>
+					<string>z</string>
+					<string>zcaron</string>
+					<string>ordfeminine</string>
+					<string>ordmasculine</string>
+					<string>germandbls</string>
+					<string>ae</string>
+					<string>eth</string>
+					<string>oslash</string>
+					<string>thorn</string>
+					<string>dotlessi</string>
+					<string>lslash</string>
+					<string>oe</string>
+					<string>mu</string>
+					<string>zero</string>
+					<string>one</string>
+					<string>two</string>
+					<string>three</string>
+					<string>four</string>
+					<string>five</string>
+					<string>six</string>
+					<string>seven</string>
+					<string>eight</string>
+					<string>nine</string>
+					<string>onesuperior</string>
+					<string>twosuperior</string>
+					<string>threesuperior</string>
+					<string>onequarter</string>
+					<string>onehalf</string>
+					<string>threequarters</string>
+					<string>underscore</string>
+					<string>hyphen</string>
+					<string>endash</string>
+					<string>emdash</string>
+					<string>parenleft</string>
+					<string>parenright</string>
+					<string>bracketleft</string>
+					<string>bracketright</string>
+					<string>braceleft</string>
+					<string>braceright</string>
+					<string>numbersign</string>
+					<string>percent</string>
+					<string>perthousand</string>
+					<string>quotesingle</string>
+					<string>quotedbl</string>
+					<string>quoteleft</string>
+					<string>quoteright</string>
+					<string>quotedblleft</string>
+					<string>quotedblright</string>
+					<string>quotesinglbase</string>
+					<string>quotedblbase</string>
+					<string>guilsinglleft</string>
+					<string>guilsinglright</string>
+					<string>asterisk</string>
+					<string>dagger</string>
+					<string>daggerdbl</string>
+					<string>period</string>
+					<string>comma</string>
+					<string>colon</string>
+					<string>semicolon</string>
+					<string>ellipsis</string>
+					<string>exclam</string>
+					<string>exclamdown</string>
+					<string>question</string>
+					<string>questiondown</string>
+					<string>slash</string>
+					<string>backslash</string>
+					<string>fraction</string>
+					<string>bar</string>
+					<string>brokenbar</string>
+					<string>at</string>
+					<string>ampersand</string>
+					<string>section</string>
+					<string>paragraph</string>
+					<string>periodcentered</string>
+					<string>bullet</string>
+					<string>plus</string>
+					<string>minus</string>
+					<string>plusminus</string>
+					<string>divide</string>
+					<string>multiply</string>
+					<string>equal</string>
+					<string>less</string>
+					<string>greater</string>
+					<string>logicalnot</string>
+					<string>dollar</string>
+					<string>cent</string>
+					<string>sterling</string>
+					<string>currency</string>
+					<string>yen</string>
+					<string>Euro</string>
+					<string>asciicircum</string>
+					<string>asciitilde</string>
+					<string>acute</string>
+					<string>grave</string>
+					<string>hungarumlaut</string>
+					<string>circumflex</string>
+					<string>caron</string>
+					<string>breve</string>
+					<string>tilde</string>
+					<string>macron</string>
+					<string>dieresis</string>
+					<string>dotaccent</string>
+					<string>ring</string>
+					<string>cedilla</string>
+					<string>ogonek</string>
+					<string>copyright</string>
+					<string>registered</string>
+					<string>trademark</string>
+					<string>degree</string>
+					<string>florin</string>
+					<string>guillemotleft</string>
+					<string>guillemotright</string>
+					<string>fi</string>
+					<string>fl</string>
+					<string>a_b_c</string>
+					<string>.notdef</string>
+				</array>
+				<key>type</key>
+				<string>glyphList</string>
+			</dict>
+		</array>
+		<key>public.glyphOrder</key>
+		<array>
+			<string>A</string>
+			<string>Aacute</string>
+			<string>Adieresis</string>
+			<string>B</string>
+			<string>C</string>
+			<string>D</string>
+			<string>E</string>
+			<string>F</string>
+			<string>G</string>
+			<string>H</string>
+			<string>I</string>
+			<string>J</string>
+			<string>K</string>
+			<string>L</string>
+			<string>M</string>
+			<string>N</string>
+			<string>O</string>
+			<string>P</string>
+			<string>Q</string>
+			<string>R</string>
+			<string>S</string>
+			<string>T</string>
+			<string>U</string>
+			<string>V</string>
+			<string>W</string>
+			<string>X</string>
+			<string>Y</string>
+			<string>Z</string>
+			<string>S.closed</string>
+			<string>I.narrow</string>
+			<string>J.narrow</string>
+			<string>quotesinglbase</string>
+			<string>quotedblbase</string>
+			<string>quotedblleft</string>
+			<string>quotedblright</string>
+			<string>comma</string>
+			<string>period</string>
+			<string>colon</string>
+			<string>semicolon</string>
+			<string>arrowleft</string>
+			<string>arrowup</string>
+			<string>arrowright</string>
+			<string>arrowdown</string>
+			<string>dot</string>
+			<string>dieresis</string>
+			<string>acute</string>
+			<string>space</string>
+			<string>IJ</string>
+		</array>
+		<key>testLibItemKey</key>
+		<array>
+			<string>a</string>
+			<string>b</string>
+			<string>c</string>
+		</array>
+	</dict>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/metainfo.plist b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/metainfo.plist
new file mode 100644
index 0000000..555d9ce
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightCondensed.ufo/metainfo.plist
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+	<dict>
+		<key>creator</key>
+		<string>com.github.fonttools.ufoLib</string>
+		<key>formatVersion</key>
+		<integer>3</integer>
+	</dict>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/features.fea b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/features.fea
new file mode 100644
index 0000000..29234c5
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/features.fea
@@ -0,0 +1 @@
+# this is the feature from lightWide
diff --git a/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/fontinfo.plist b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/fontinfo.plist
new file mode 100644
index 0000000..4112d76
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/fontinfo.plist
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+	<dict>
+		<key>ascender</key>
+		<integer>700</integer>
+		<key>capHeight</key>
+		<integer>700</integer>
+		<key>copyright</key>
+		<string>License same as MutatorMath. BSD 3-clause. [test-token: D]</string>
+		<key>descender</key>
+		<integer>-200</integer>
+		<key>familyName</key>
+		<string>MutatorMathTest</string>
+		<key>guidelines</key>
+		<array>
+		</array>
+		<key>italicAngle</key>
+		<integer>0</integer>
+		<key>openTypeNameLicense</key>
+		<string>License same as MutatorMath. BSD 3-clause. [test-token: D]</string>
+		<key>openTypeOS2VendorID</key>
+		<string>LTTR</string>
+		<key>postscriptBlueValues</key>
+		<array>
+		</array>
+		<key>postscriptDefaultWidthX</key>
+		<integer>500</integer>
+		<key>postscriptFamilyBlues</key>
+		<array>
+		</array>
+		<key>postscriptFamilyOtherBlues</key>
+		<array>
+		</array>
+		<key>postscriptFontName</key>
+		<string>MutatorMathTest-LightWide</string>
+		<key>postscriptFullName</key>
+		<string>MutatorMathTest LightWide</string>
+		<key>postscriptOtherBlues</key>
+		<array>
+		</array>
+		<key>postscriptSlantAngle</key>
+		<integer>0</integer>
+		<key>postscriptStemSnapH</key>
+		<array>
+		</array>
+		<key>postscriptStemSnapV</key>
+		<array>
+		</array>
+		<key>postscriptWindowsCharacterSet</key>
+		<integer>1</integer>
+		<key>styleMapFamilyName</key>
+		<string></string>
+		<key>styleMapStyleName</key>
+		<string>regular</string>
+		<key>styleName</key>
+		<string>LightWide</string>
+		<key>unitsPerEm</key>
+		<integer>1000</integer>
+		<key>versionMajor</key>
+		<integer>1</integer>
+		<key>versionMinor</key>
+		<integer>2</integer>
+		<key>xHeight</key>
+		<integer>500</integer>
+		<key>year</key>
+		<integer>2004</integer>
+	</dict>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.background/S_.closed.glif b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.background/S_.closed.glif
new file mode 100644
index 0000000..24ce93a
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.background/S_.closed.glif
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="S.closed" format="2">
+	<advance width="1185"/>
+	<outline>
+		<contour>
+			<point x="55" y="509" type="curve" smooth="yes"/>
+			<point x="55" y="383"/>
+			<point x="135" y="338"/>
+			<point x="429" y="328" type="curve" smooth="yes"/>
+			<point x="603" y="322" type="line" smooth="yes"/>
+			<point x="812" y="315"/>
+			<point x="951" y="288"/>
+			<point x="951" y="182" type="curve"/>
+			<point x="951" y="85"/>
+			<point x="838" y="28"/>
+			<point x="570" y="28" type="curve" smooth="yes"/>
+			<point x="499" y="28" type="line" smooth="yes"/>
+			<point x="244" y="28"/>
+			<point x="153" y="83"/>
+			<point x="141" y="221" type="curve"/>
+			<point x="102" y="221" type="line"/>
+			<point x="111" y="67"/>
+			<point x="211" y="-8"/>
+			<point x="502" y="-8" type="curve" smooth="yes"/>
+			<point x="570" y="-8" type="line" smooth="yes"/>
+			<point x="857" y="-8"/>
+			<point x="990" y="58"/>
+			<point x="990" y="182" type="curve" smooth="yes"/>
+			<point x="990" y="299"/>
+			<point x="901" y="348"/>
+			<point x="617" y="358" type="curve" smooth="yes"/>
+			<point x="443" y="364" type="line" smooth="yes"/>
+			<point x="213" y="372"/>
+			<point x="94" y="390"/>
+			<point x="94" y="503" type="curve" smooth="yes"/>
+			<point x="94" y="615"/>
+			<point x="216" y="672"/>
+			<point x="544" y="672" type="curve" smooth="yes"/>
+			<point x="575" y="672" type="line" smooth="yes"/>
+			<point x="752" y="672"/>
+			<point x="892" y="630"/>
+			<point x="998" y="575" type="curve"/>
+			<point x="1015" y="608" type="line"/>
+			<point x="900" y="667"/>
+			<point x="739" y="708"/>
+			<point x="572" y="708" type="curve" smooth="yes"/>
+			<point x="544" y="708" type="line" smooth="yes"/>
+			<point x="197" y="708"/>
+			<point x="55" y="636"/>
+		</contour>
+	</outline>
+</glyph>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.background/contents.plist b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.background/contents.plist
new file mode 100644
index 0000000..070780a
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.background/contents.plist
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+	<dict>
+		<key>S.closed</key>
+		<string>S_.closed.glif</string>
+	</dict>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.background/layerinfo.plist b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.background/layerinfo.plist
new file mode 100644
index 0000000..11c425f
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.background/layerinfo.plist
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+	<dict>
+		<key>color</key>
+		<string>0.5,1,0,0.7</string>
+	</dict>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_0.00_weight_0.00/contents.plist b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_0.00_weight_0.00/contents.plist
new file mode 100644
index 0000000..0c67376
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_0.00_weight_0.00/contents.plist
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict/>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_0.00_weight_0.00/layerinfo.plist b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_0.00_weight_0.00/layerinfo.plist
new file mode 100644
index 0000000..cd2c7c0
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_0.00_weight_0.00/layerinfo.plist
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>color</key>
+	<string>0,0.25,1,0.7</string>
+</dict>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_500.00_weight_500.00/S_.glif b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_500.00_weight_500.00/S_.glif
new file mode 100644
index 0000000..81a594c
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_500.00_weight_500.00/S_.glif
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="S" format="2">
+  <advance width="891"/>
+  <unicode hex="0053"/>
+  <outline>
+    <contour>
+      <point x="829.0" y="212.75" type="curve" smooth="yes"/>
+      <point x="828.75" y="362.0153195826838"/>
+      <point x="736.606516640771" y="427.59701227920186"/>
+      <point x="536.5" y="450.25" type="curve" smooth="yes"/>
+      <point x="423.5" y="462.75" type="line" smooth="yes"/>
+      <point x="289.73028798990237" y="479.01946837238654"/>
+      <point x="243.5" y="494.25"/>
+      <point x="243.5" y="543.5" type="curve" smooth="yes"/>
+      <point x="243.5" y="591.5"/>
+      <point x="291.52372262773724" y="620.5"/>
+      <point x="415.75" y="620.5" type="curve" smooth="yes"/>
+      <point x="485.5" y="620.5" type="line" smooth="yes"/>
+      <point x="616.0" y="620.5"/>
+      <point x="709.6897715543785" y="599.892099665181"/>
+      <point x="786.5" y="571.5" type="curve"/>
+      <point x="819.75" y="704.25" type="line"/>
+      <point x="728.9600335806927" y="734.3857219020794"/>
+      <point x="615.4545454545455" y="757.25"/>
+      <point x="499.75" y="757.25" type="curve" smooth="yes"/>
+      <point x="439.25" y="757.25" type="line" smooth="yes"/>
+      <point x="206.63333333333333" y="757.25"/>
+      <point x="91.75" y="674.25"/>
+      <point x="92.0" y="532.75" type="curve" smooth="yes"/>
+      <point x="92.25" y="398.0"/>
+      <point x="180.75940567199058" y="329.3044079860826"/>
+      <point x="379.75" y="306.75" type="curve" smooth="yes"/>
+      <point x="479.75" y="295.25" type="line" smooth="yes"/>
+      <point x="623.0" y="277.5"/>
+      <point x="671.75" y="258.8884892086331"/>
+      <point x="671.75" y="208.0" type="curve" smooth="yes"/>
+      <point x="671.75" y="156.5"/>
+      <point x="616.5" y="127.5"/>
+      <point x="477.5" y="127.5" type="curve" smooth="yes"/>
+      <point x="412.5" y="127.5" type="line" smooth="yes"/>
+      <point x="288.5503875968992" y="127.5"/>
+      <point x="183.08832068925142" y="145.24700758644914"/>
+      <point x="95.25" y="179.5" type="curve"/>
+      <point x="54.0" y="45.0" type="line"/>
+      <point x="141.22859386344322" y="13.375857205258878"/>
+      <point x="274.1102941176471" y="-9.5"/>
+      <point x="377.25" y="-9.5" type="curve" smooth="yes"/>
+      <point x="485.25" y="-9.5" type="line" smooth="yes"/>
+      <point x="750.75" y="-9.5"/>
+      <point x="829.25" y="82.75"/>
+    </contour>
+  </outline>
+</glyph>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_500.00_weight_500.00/contents.plist b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_500.00_weight_500.00/contents.plist
new file mode 100644
index 0000000..8087673
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_500.00_weight_500.00/contents.plist
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>S</key>
+	<string>S_.glif</string>
+</dict>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_500.00_weight_500.00/layerinfo.plist b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_500.00_weight_500.00/layerinfo.plist
new file mode 100644
index 0000000..11dd5c2
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_500.00_weight_500.00/layerinfo.plist
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>color</key>
+	<string>0,1,0.25,0.7</string>
+	<key>lib</key>
+	<dict>
+		<key>com.typemytype.robofont.segmentType</key>
+		<string>curve</string>
+	</dict>
+</dict>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_695.65_weight_166.38/contents.plist b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_695.65_weight_166.38/contents.plist
new file mode 100644
index 0000000..0c67376
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_695.65_weight_166.38/contents.plist
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict/>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_695.65_weight_166.38/layerinfo.plist b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_695.65_weight_166.38/layerinfo.plist
new file mode 100644
index 0000000..7c15f1a
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_695.65_weight_166.38/layerinfo.plist
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>color</key>
+	<string>0.5,0,1,0.7</string>
+</dict>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_720.00_weight_645.00/S_.glif b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_720.00_weight_645.00/S_.glif
new file mode 100644
index 0000000..3ea5029
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_720.00_weight_645.00/S_.glif
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="S" format="2">
+  <advance width="1061"/>
+  <unicode hex="0053"/>
+  <outline>
+    <contour>
+      <point x="995.9361999999999" y="224.7982" type="curve" smooth="yes"/>
+      <point x="995.8328112661253" y="400.1961862427902"/>
+      <point x="892.1115886919868" y="473.9120171378339"/>
+      <point x="650" y="484" type="curve" smooth="yes"/>
+      <point x="506" y="490" type="line" smooth="yes"/>
+      <point x="362.55696686446765" y="495.97679304731383"/>
+      <point x="322.0" y="506.0"/>
+      <point x="322" y="541" type="curve" smooth="yes"/>
+      <point x="322.0" y="571.0"/>
+      <point x="362.77272727272725" y="586"/>
+      <point x="478" y="586" type="curve" smooth="yes"/>
+      <point x="574" y="586" type="line" smooth="yes"/>
+      <point x="730.0" y="586"/>
+      <point x="841.3248616349856" y="564.2509187509933"/>
+      <point x="934" y="533" type="curve"/>
+      <point x="974.9852" y="712.7954" type="line"/>
+      <point x="861.1371383329001" y="745.852362072686"/>
+      <point x="727.8193636363636" y="769.4442"/>
+      <point x="593.9458" y="769.4442" type="curve" smooth="yes"/>
+      <point x="502.4496" y="769.4442" type="line" smooth="yes"/>
+      <point x="240.97832000000002" y="769.4442"/>
+      <point x="104.30759999999998" y="689.9478"/>
+      <point x="104.407" y="529.666" type="curve" smooth="yes"/>
+      <point x="104.51490786630377" y="373.5426409998838"/>
+      <point x="198.9354407423566" y="287.7611883511763"/>
+      <point x="442" y="276" type="curve" smooth="yes"/>
+      <point x="566" y="270" type="line" smooth="yes"/>
+      <point x="724.3146604764806" y="262.3396132027509"/>
+      <point x="767.0" y="250.66666666666666"/>
+      <point x="767" y="212" type="curve" smooth="yes"/>
+      <point x="767.0" y="185.7599610139394"/>
+      <point x="716.0" y="174"/>
+      <point x="586" y="174" type="curve" smooth="yes"/>
+      <point x="498" y="174" type="line" smooth="yes"/>
+      <point x="352.0" y="174"/>
+      <point x="219.66307143864657" y="182.6218147062518"/>
+      <point x="115" y="222" type="curve"/>
+      <point x="58.937599999999996" y="48.8514" type="line"/>
+      <point x="162.242888920105" y="14.163840824810931"/>
+      <point x="325.37225294117644" y="-9.4888"/>
+      <point x="439.0702" y="-9.4888" type="curve" smooth="yes"/>
+      <point x="618.8024" y="-9.4888" type="line" smooth="yes"/>
+      <point x="916.44" y="-9.4888"/>
+      <point x="996.0356" y="86.2214"/>
+    </contour>
+  </outline>
+</glyph>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_720.00_weight_645.00/contents.plist b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_720.00_weight_645.00/contents.plist
new file mode 100644
index 0000000..8087673
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_720.00_weight_645.00/contents.plist
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>S</key>
+	<string>S_.glif</string>
+</dict>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_720.00_weight_645.00/layerinfo.plist b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_720.00_weight_645.00/layerinfo.plist
new file mode 100644
index 0000000..5c42478
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs.master_width_720.00_weight_645.00/layerinfo.plist
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>color</key>
+	<string>0,1,1,0.7</string>
+	<key>lib</key>
+	<dict>
+		<key>com.typemytype.robofont.segmentType</key>
+		<string>curve</string>
+	</dict>
+</dict>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/A_.glif b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/A_.glif
new file mode 100644
index 0000000..6d72499
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/A_.glif
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="A" format="2">
+	<unicode hex="0041"/>
+	<advance width="1190"/>
+	<outline>
+		<contour>
+			<point x="50" y="0" type="line"/>
+			<point x="97" y="0" type="line"/>
+			<point x="612" y="700" type="line"/>
+			<point x="570" y="700" type="line"/>
+		</contour>
+		<contour>
+			<point x="245" y="224" type="line"/>
+			<point x="945" y="224" type="line"/>
+			<point x="945" y="254" type="line"/>
+			<point x="245" y="254" type="line"/>
+		</contour>
+		<contour>
+			<point x="1087" y="0" type="line"/>
+			<point x="1140" y="0" type="line"/>
+			<point x="620" y="700" type="line"/>
+			<point x="572" y="700" type="line"/>
+		</contour>
+		<contour>
+			<point x="570" y="664" type="line"/>
+			<point x="620" y="664" type="line"/>
+			<point x="620" y="700" type="line"/>
+			<point x="570" y="700" type="line"/>
+		</contour>
+	</outline>
+	<lib>
+		<dict>
+			<key>com.typemytype.robofont.Image.Brightness</key>
+			<integer>0</integer>
+			<key>com.typemytype.robofont.Image.Contrast</key>
+			<integer>1</integer>
+			<key>com.typemytype.robofont.Image.Saturation</key>
+			<integer>1</integer>
+			<key>com.typemytype.robofont.Image.Sharpness</key>
+			<real>0.4</real>
+		</dict>
+	</lib>
+</glyph>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/I_.glif b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/I_.glif
new file mode 100644
index 0000000..155e81d
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/I_.glif
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="I" format="2">
+	<unicode hex="0049"/>
+	<advance width="930"/>
+	<outline>
+		<contour>
+			<point x="450" y="0" type="line"/>
+			<point x="490" y="0" type="line"/>
+			<point x="490" y="700" type="line"/>
+			<point x="450" y="700" type="line"/>
+		</contour>
+		<contour>
+			<point x="120" y="664" type="line"/>
+			<point x="810" y="664" type="line"/>
+			<point x="810" y="700" type="line"/>
+			<point x="120" y="700" type="line"/>
+		</contour>
+		<contour>
+			<point x="120" y="0" type="line"/>
+			<point x="810" y="0" type="line"/>
+			<point x="810" y="36" type="line"/>
+			<point x="120" y="36" type="line"/>
+		</contour>
+	</outline>
+</glyph>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/I_.narrow.glif b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/I_.narrow.glif
new file mode 100644
index 0000000..9d79c5c
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/I_.narrow.glif
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="I.narrow" format="2">
+	<advance width="280"/>
+	<outline>
+		<contour>
+			<point x="120" y="0" type="line"/>
+			<point x="160" y="0" type="line"/>
+			<point x="160" y="700" type="line"/>
+			<point x="120" y="700" type="line"/>
+		</contour>
+	</outline>
+	<lib>
+		<dict>
+			<key>com.typemytype.robofont.Image.Brightness</key>
+			<integer>0</integer>
+			<key>com.typemytype.robofont.Image.Contrast</key>
+			<integer>1</integer>
+			<key>com.typemytype.robofont.Image.Saturation</key>
+			<integer>1</integer>
+			<key>com.typemytype.robofont.Image.Sharpness</key>
+			<real>0.4</real>
+		</dict>
+	</lib>
+</glyph>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/I_J_.glif b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/I_J_.glif
new file mode 100644
index 0000000..51d9df5
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/I_J_.glif
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="IJ" format="2">
+	<advance width="1181"/>
+	<outline>
+		<contour>
+			<point x="160" y="433" type="line"/>
+			<point x="160" y="700" type="line"/>
+			<point x="120" y="700" type="line"/>
+			<point x="120" y="433" type="line"/>
+		</contour>
+		<contour>
+			<point x="590" y="-10" type="curve" smooth="yes"/>
+			<point x="879" y="-10"/>
+			<point x="1061" y="108"/>
+			<point x="1061" y="352" type="curve" smooth="yes"/>
+			<point x="1061" y="700" type="line"/>
+			<point x="1021" y="700" type="line"/>
+			<point x="1021" y="352" type="line" smooth="yes"/>
+			<point x="1021" y="124"/>
+			<point x="854" y="26"/>
+			<point x="590" y="26" type="curve" smooth="yes"/>
+			<point x="327" y="26"/>
+			<point x="160" y="111.9754601227"/>
+			<point x="160" y="312" type="curve" smooth="yes"/>
+			<point x="160" y="343" type="line"/>
+			<point x="120" y="343" type="line"/>
+			<point x="120" y="312" type="line" smooth="yes"/>
+			<point x="120" y="94.9613259669"/>
+			<point x="301" y="-10"/>
+		</contour>
+	</outline>
+</glyph>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/S_.closed.glif b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/S_.closed.glif
new file mode 100644
index 0000000..e6a958d
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/S_.closed.glif
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="S.closed" format="2">
+	<advance width="1175"/>
+	<outline>
+		<contour>
+			<point x="1095" y="191" type="curve" smooth="yes"/>
+			<point x="1095" y="317"/>
+			<point x="1015" y="364"/>
+			<point x="721" y="372" type="curve" smooth="yes"/>
+			<point x="487" y="378" type="line" smooth="yes"/>
+			<point x="278" y="383"/>
+			<point x="149" y="412"/>
+			<point x="149" y="518" type="curve"/>
+			<point x="149" y="615"/>
+			<point x="252" y="672"/>
+			<point x="520" y="672" type="curve" smooth="yes"/>
+			<point x="651" y="672" type="line" smooth="yes"/>
+			<point x="906" y="672"/>
+			<point x="997" y="617"/>
+			<point x="1009" y="479" type="curve"/>
+			<point x="1048" y="479" type="line"/>
+			<point x="1039" y="633"/>
+			<point x="939" y="708"/>
+			<point x="648" y="708" type="curve" smooth="yes"/>
+			<point x="520" y="708" type="line" smooth="yes"/>
+			<point x="233" y="708"/>
+			<point x="110" y="642"/>
+			<point x="110" y="518" type="curve" smooth="yes"/>
+			<point x="110" y="401"/>
+			<point x="189" y="349"/>
+			<point x="473" y="342" type="curve" smooth="yes"/>
+			<point x="707" y="336" type="line" smooth="yes"/>
+			<point x="937" y="330"/>
+			<point x="1056" y="310"/>
+			<point x="1056" y="197" type="curve" smooth="yes"/>
+			<point x="1056" y="85"/>
+			<point x="954" y="28"/>
+			<point x="626" y="28" type="curve" smooth="yes"/>
+			<point x="535" y="28" type="line" smooth="yes"/>
+			<point x="324" y="28"/>
+			<point x="120" y="60"/>
+			<point x="120" y="221" type="curve"/>
+			<point x="80" y="221" type="line"/>
+			<point x="84" y="59"/>
+			<point x="229" y="-8"/>
+			<point x="538" y="-8" type="curve" smooth="yes"/>
+			<point x="626" y="-8" type="line" smooth="yes"/>
+			<point x="973" y="-8"/>
+			<point x="1095" y="64"/>
+		</contour>
+	</outline>
+</glyph>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/S_.glif b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/S_.glif
new file mode 100644
index 0000000..349c3fe
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/S_.glif
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="S" format="2">
+	<unicode hex="0053"/>
+	<advance width="1160"/>
+	<outline>
+		<contour>
+			<point x="1080" y="191" type="curve" smooth="yes"/>
+			<point x="1080" y="317"/>
+			<point x="1000" y="364"/>
+			<point x="706" y="372" type="curve" smooth="yes"/>
+			<point x="492" y="378" type="line" smooth="yes"/>
+			<point x="283" y="384"/>
+			<point x="144" y="412"/>
+			<point x="144" y="518" type="curve"/>
+			<point x="144" y="615"/>
+			<point x="257" y="672"/>
+			<point x="525" y="672" type="curve" smooth="yes"/>
+			<point x="596" y="672" type="line" smooth="yes"/>
+			<point x="806" y="672"/>
+			<point x="941" y="629"/>
+			<point x="1044" y="575" type="curve"/>
+			<point x="1066" y="608" type="line"/>
+			<point x="954" y="666"/>
+			<point x="794" y="708"/>
+			<point x="593" y="708" type="curve" smooth="yes"/>
+			<point x="525" y="708" type="line" smooth="yes"/>
+			<point x="238" y="708"/>
+			<point x="105" y="642"/>
+			<point x="105" y="518" type="curve" smooth="yes"/>
+			<point x="105" y="401"/>
+			<point x="194" y="350"/>
+			<point x="478" y="342" type="curve" smooth="yes"/>
+			<point x="692" y="336" type="line" smooth="yes"/>
+			<point x="922" y="330"/>
+			<point x="1041" y="310"/>
+			<point x="1041" y="197" type="curve" smooth="yes"/>
+			<point x="1041" y="85"/>
+			<point x="919" y="28"/>
+			<point x="591" y="28" type="curve" smooth="yes"/>
+			<point x="520" y="28" type="line" smooth="yes"/>
+			<point x="343" y="28"/>
+			<point x="203" y="70"/>
+			<point x="97" y="125" type="curve"/>
+			<point x="80" y="92" type="line"/>
+			<point x="195" y="33"/>
+			<point x="356" y="-8"/>
+			<point x="523" y="-8" type="curve" smooth="yes"/>
+			<point x="591" y="-8" type="line" smooth="yes"/>
+			<point x="938" y="-8"/>
+			<point x="1080" y="64"/>
+		</contour>
+	</outline>
+	<lib>
+		<dict>
+			<key>com.typemytype.robofont.Image.Brightness</key>
+			<integer>0</integer>
+			<key>com.typemytype.robofont.Image.Contrast</key>
+			<integer>1</integer>
+			<key>com.typemytype.robofont.Image.Saturation</key>
+			<integer>1</integer>
+			<key>com.typemytype.robofont.Image.Sharpness</key>
+			<real>0.4</real>
+		</dict>
+	</lib>
+</glyph>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/contents.plist b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/contents.plist
new file mode 100644
index 0000000..9f8a737
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/contents.plist
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+	<dict>
+		<key>A</key>
+		<string>A_.glif</string>
+		<key>I</key>
+		<string>I_.glif</string>
+		<key>I.narrow</key>
+		<string>I_.narrow.glif</string>
+		<key>IJ</key>
+		<string>I_J_.glif</string>
+		<key>S</key>
+		<string>S_.glif</string>
+		<key>S.closed</key>
+		<string>S_.closed.glif</string>
+	</dict>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/layerinfo.plist b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/layerinfo.plist
new file mode 100644
index 0000000..a1a92f9
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/glyphs/layerinfo.plist
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+	<dict>
+		<key>color</key>
+		<string>1,0.75,0,0.7</string>
+		<key>lib</key>
+		<dict>
+			<key>com.typemytype.robofont.segmentType</key>
+			<string>curve</string>
+		</dict>
+	</dict>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/layercontents.plist b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/layercontents.plist
new file mode 100644
index 0000000..8964c56
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/layercontents.plist
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+	<array>
+		<array>
+			<string>foreground</string>
+			<string>glyphs</string>
+		</array>
+		<array>
+			<string>background</string>
+			<string>glyphs.background</string>
+		</array>
+	</array>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/lib.plist b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/lib.plist
new file mode 100644
index 0000000..046c3a3
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/lib.plist
@@ -0,0 +1,664 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+	<dict>
+		<key>com.defcon.sortDescriptor</key>
+		<array>
+			<dict>
+				<key>allowPseudoUnicode</key>
+				<true/>
+				<key>ascending</key>
+				<true/>
+				<key>type</key>
+				<string>alphabetical</string>
+			</dict>
+			<dict>
+				<key>allowPseudoUnicode</key>
+				<true/>
+				<key>ascending</key>
+				<true/>
+				<key>type</key>
+				<string>category</string>
+			</dict>
+			<dict>
+				<key>allowPseudoUnicode</key>
+				<true/>
+				<key>ascending</key>
+				<true/>
+				<key>type</key>
+				<string>unicode</string>
+			</dict>
+			<dict>
+				<key>allowPseudoUnicode</key>
+				<true/>
+				<key>ascending</key>
+				<true/>
+				<key>type</key>
+				<string>script</string>
+			</dict>
+			<dict>
+				<key>allowPseudoUnicode</key>
+				<true/>
+				<key>ascending</key>
+				<true/>
+				<key>type</key>
+				<string>suffix</string>
+			</dict>
+			<dict>
+				<key>allowPseudoUnicode</key>
+				<true/>
+				<key>ascending</key>
+				<true/>
+				<key>type</key>
+				<string>decompositionBase</string>
+			</dict>
+		</array>
+		<key>com.typemytype.robofont.background.layerStrokeColor</key>
+		<array>
+			<integer>1</integer>
+			<real>0.75</real>
+			<integer>0</integer>
+			<real>0.7</real>
+		</array>
+		<key>com.typemytype.robofont.compileSettings.autohint</key>
+		<true/>
+		<key>com.typemytype.robofont.compileSettings.checkOutlines</key>
+		<false/>
+		<key>com.typemytype.robofont.compileSettings.createDummyDSIG</key>
+		<true/>
+		<key>com.typemytype.robofont.compileSettings.decompose</key>
+		<false/>
+		<key>com.typemytype.robofont.compileSettings.generateFormat</key>
+		<integer>0</integer>
+		<key>com.typemytype.robofont.compileSettings.releaseMode</key>
+		<false/>
+		<key>com.typemytype.robofont.foreground.layerStrokeColor</key>
+		<array>
+			<real>0.5</real>
+			<integer>0</integer>
+			<real>0.5</real>
+			<real>0.7</real>
+		</array>
+		<key>com.typemytype.robofont.italicSlantOffset</key>
+		<integer>0</integer>
+		<key>com.typemytype.robofont.segmentType</key>
+		<string>curve</string>
+		<key>com.typemytype.robofont.shouldAddPointsInSplineConversion</key>
+		<integer>1</integer>
+		<key>com.typesupply.MetricsMachine4.groupColors</key>
+		<dict>
+			<key>@MMK_L_A</key>
+			<array>
+				<integer>1</integer>
+				<integer>0</integer>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_C</key>
+			<array>
+				<integer>1</integer>
+				<real>0.5</real>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_E</key>
+			<array>
+				<integer>1</integer>
+				<integer>1</integer>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_I</key>
+			<array>
+				<integer>0</integer>
+				<integer>1</integer>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_N</key>
+			<array>
+				<integer>0</integer>
+				<integer>1</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_O</key>
+			<array>
+				<integer>0</integer>
+				<real>0.5</real>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_S</key>
+			<array>
+				<integer>0</integer>
+				<integer>0</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_U</key>
+			<array>
+				<real>0.5</real>
+				<integer>0</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_Y</key>
+			<array>
+				<integer>1</integer>
+				<integer>0</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_Z</key>
+			<array>
+				<integer>1</integer>
+				<integer>0</integer>
+				<real>0.5</real>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_a</key>
+			<array>
+				<integer>1</integer>
+				<integer>0</integer>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_c</key>
+			<array>
+				<integer>1</integer>
+				<real>0.5</real>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_e</key>
+			<array>
+				<integer>1</integer>
+				<integer>1</integer>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_i</key>
+			<array>
+				<integer>0</integer>
+				<integer>1</integer>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_n</key>
+			<array>
+				<integer>0</integer>
+				<integer>1</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_o</key>
+			<array>
+				<integer>0</integer>
+				<real>0.5</real>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_s</key>
+			<array>
+				<integer>0</integer>
+				<integer>0</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_u</key>
+			<array>
+				<real>0.5</real>
+				<integer>0</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_y</key>
+			<array>
+				<integer>1</integer>
+				<integer>0</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_z</key>
+			<array>
+				<integer>1</integer>
+				<integer>0</integer>
+				<real>0.5</real>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_A</key>
+			<array>
+				<integer>1</integer>
+				<integer>0</integer>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_C</key>
+			<array>
+				<integer>1</integer>
+				<real>0.5</real>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_E</key>
+			<array>
+				<integer>1</integer>
+				<integer>1</integer>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_I</key>
+			<array>
+				<integer>0</integer>
+				<integer>1</integer>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_N</key>
+			<array>
+				<integer>0</integer>
+				<integer>1</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_O</key>
+			<array>
+				<integer>0</integer>
+				<real>0.5</real>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_S</key>
+			<array>
+				<integer>0</integer>
+				<integer>0</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_U</key>
+			<array>
+				<real>0.5</real>
+				<integer>0</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_Y</key>
+			<array>
+				<integer>1</integer>
+				<integer>0</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_Z</key>
+			<array>
+				<integer>1</integer>
+				<integer>0</integer>
+				<real>0.5</real>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_a</key>
+			<array>
+				<integer>1</integer>
+				<integer>0</integer>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_c</key>
+			<array>
+				<integer>1</integer>
+				<real>0.5</real>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_e</key>
+			<array>
+				<integer>1</integer>
+				<integer>1</integer>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_i</key>
+			<array>
+				<integer>0</integer>
+				<integer>1</integer>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_n</key>
+			<array>
+				<integer>0</integer>
+				<integer>1</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_o</key>
+			<array>
+				<integer>0</integer>
+				<real>0.5</real>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_s</key>
+			<array>
+				<integer>0</integer>
+				<integer>0</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_u</key>
+			<array>
+				<real>0.5</real>
+				<integer>0</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_y</key>
+			<array>
+				<integer>1</integer>
+				<integer>0</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_z</key>
+			<array>
+				<integer>1</integer>
+				<integer>0</integer>
+				<real>0.5</real>
+				<real>0.25</real>
+			</array>
+		</dict>
+		<key>com.typesupply.defcon.sortDescriptor</key>
+		<array>
+			<dict>
+				<key>ascending</key>
+				<array>
+					<string>space</string>
+					<string>A</string>
+					<string>Agrave</string>
+					<string>Aacute</string>
+					<string>Acircumflex</string>
+					<string>Atilde</string>
+					<string>Adieresis</string>
+					<string>Aring</string>
+					<string>B</string>
+					<string>C</string>
+					<string>Ccedilla</string>
+					<string>D</string>
+					<string>E</string>
+					<string>Egrave</string>
+					<string>Eacute</string>
+					<string>Ecircumflex</string>
+					<string>Edieresis</string>
+					<string>F</string>
+					<string>G</string>
+					<string>H</string>
+					<string>I</string>
+					<string>Igrave</string>
+					<string>Iacute</string>
+					<string>Icircumflex</string>
+					<string>Idieresis</string>
+					<string>J</string>
+					<string>K</string>
+					<string>L</string>
+					<string>M</string>
+					<string>N</string>
+					<string>Ntilde</string>
+					<string>O</string>
+					<string>Ograve</string>
+					<string>Oacute</string>
+					<string>Ocircumflex</string>
+					<string>Otilde</string>
+					<string>Odieresis</string>
+					<string>P</string>
+					<string>Q</string>
+					<string>R</string>
+					<string>S</string>
+					<string>Scaron</string>
+					<string>T</string>
+					<string>U</string>
+					<string>Ugrave</string>
+					<string>Uacute</string>
+					<string>Ucircumflex</string>
+					<string>Udieresis</string>
+					<string>V</string>
+					<string>W</string>
+					<string>X</string>
+					<string>Y</string>
+					<string>Yacute</string>
+					<string>Ydieresis</string>
+					<string>Z</string>
+					<string>Zcaron</string>
+					<string>AE</string>
+					<string>Eth</string>
+					<string>Oslash</string>
+					<string>Thorn</string>
+					<string>Lslash</string>
+					<string>OE</string>
+					<string>a</string>
+					<string>agrave</string>
+					<string>aacute</string>
+					<string>acircumflex</string>
+					<string>atilde</string>
+					<string>adieresis</string>
+					<string>aring</string>
+					<string>b</string>
+					<string>c</string>
+					<string>ccedilla</string>
+					<string>d</string>
+					<string>e</string>
+					<string>egrave</string>
+					<string>eacute</string>
+					<string>ecircumflex</string>
+					<string>edieresis</string>
+					<string>f</string>
+					<string>g</string>
+					<string>h</string>
+					<string>i</string>
+					<string>igrave</string>
+					<string>iacute</string>
+					<string>icircumflex</string>
+					<string>idieresis</string>
+					<string>j</string>
+					<string>k</string>
+					<string>l</string>
+					<string>m</string>
+					<string>n</string>
+					<string>ntilde</string>
+					<string>o</string>
+					<string>ograve</string>
+					<string>oacute</string>
+					<string>ocircumflex</string>
+					<string>otilde</string>
+					<string>odieresis</string>
+					<string>p</string>
+					<string>q</string>
+					<string>r</string>
+					<string>s</string>
+					<string>scaron</string>
+					<string>t</string>
+					<string>u</string>
+					<string>ugrave</string>
+					<string>uacute</string>
+					<string>ucircumflex</string>
+					<string>udieresis</string>
+					<string>v</string>
+					<string>w</string>
+					<string>x</string>
+					<string>y</string>
+					<string>yacute</string>
+					<string>ydieresis</string>
+					<string>z</string>
+					<string>zcaron</string>
+					<string>ordfeminine</string>
+					<string>ordmasculine</string>
+					<string>germandbls</string>
+					<string>ae</string>
+					<string>eth</string>
+					<string>oslash</string>
+					<string>thorn</string>
+					<string>dotlessi</string>
+					<string>lslash</string>
+					<string>oe</string>
+					<string>zero</string>
+					<string>one</string>
+					<string>two</string>
+					<string>three</string>
+					<string>four</string>
+					<string>five</string>
+					<string>six</string>
+					<string>seven</string>
+					<string>eight</string>
+					<string>nine</string>
+					<string>onesuperior</string>
+					<string>twosuperior</string>
+					<string>threesuperior</string>
+					<string>onequarter</string>
+					<string>onehalf</string>
+					<string>threequarters</string>
+					<string>underscore</string>
+					<string>hyphen</string>
+					<string>endash</string>
+					<string>emdash</string>
+					<string>parenleft</string>
+					<string>parenright</string>
+					<string>bracketleft</string>
+					<string>bracketright</string>
+					<string>braceleft</string>
+					<string>braceright</string>
+					<string>numbersign</string>
+					<string>percent</string>
+					<string>perthousand</string>
+					<string>quotesingle</string>
+					<string>quotedbl</string>
+					<string>quoteleft</string>
+					<string>quoteright</string>
+					<string>quotedblleft</string>
+					<string>quotedblright</string>
+					<string>quotesinglbase</string>
+					<string>quotedblbase</string>
+					<string>guilsinglleft</string>
+					<string>guilsinglright</string>
+					<string>guillemotleft</string>
+					<string>guillemotright</string>
+					<string>asterisk</string>
+					<string>dagger</string>
+					<string>daggerdbl</string>
+					<string>period</string>
+					<string>comma</string>
+					<string>colon</string>
+					<string>semicolon</string>
+					<string>ellipsis</string>
+					<string>exclam</string>
+					<string>exclamdown</string>
+					<string>question</string>
+					<string>questiondown</string>
+					<string>slash</string>
+					<string>backslash</string>
+					<string>fraction</string>
+					<string>bar</string>
+					<string>brokenbar</string>
+					<string>at</string>
+					<string>ampersand</string>
+					<string>section</string>
+					<string>paragraph</string>
+					<string>periodcentered</string>
+					<string>bullet</string>
+					<string>plus</string>
+					<string>minus</string>
+					<string>plusminus</string>
+					<string>divide</string>
+					<string>multiply</string>
+					<string>equal</string>
+					<string>less</string>
+					<string>greater</string>
+					<string>logicalnot</string>
+					<string>mu</string>
+					<string>dollar</string>
+					<string>cent</string>
+					<string>sterling</string>
+					<string>currency</string>
+					<string>yen</string>
+					<string>Euro</string>
+					<string>florin</string>
+					<string>asciicircum</string>
+					<string>asciitilde</string>
+					<string>acute</string>
+					<string>grave</string>
+					<string>hungarumlaut</string>
+					<string>circumflex</string>
+					<string>caron</string>
+					<string>breve</string>
+					<string>tilde</string>
+					<string>macron</string>
+					<string>dieresis</string>
+					<string>dotaccent</string>
+					<string>ring</string>
+					<string>cedilla</string>
+					<string>ogonek</string>
+					<string>copyright</string>
+					<string>registered</string>
+					<string>trademark</string>
+					<string>degree</string>
+					<string>fi</string>
+					<string>fl</string>
+					<string>.notdef</string>
+					<string>a_b_c</string>
+				</array>
+				<key>type</key>
+				<string>glyphList</string>
+			</dict>
+		</array>
+		<key>public.glyphOrder</key>
+		<array>
+			<string>A</string>
+			<string>Aacute</string>
+			<string>Adieresis</string>
+			<string>B</string>
+			<string>C</string>
+			<string>D</string>
+			<string>E</string>
+			<string>F</string>
+			<string>G</string>
+			<string>H</string>
+			<string>I</string>
+			<string>J</string>
+			<string>K</string>
+			<string>L</string>
+			<string>M</string>
+			<string>N</string>
+			<string>O</string>
+			<string>P</string>
+			<string>Q</string>
+			<string>R</string>
+			<string>S</string>
+			<string>T</string>
+			<string>U</string>
+			<string>V</string>
+			<string>W</string>
+			<string>X</string>
+			<string>Y</string>
+			<string>Z</string>
+			<string>S.closed</string>
+			<string>I.narrow</string>
+			<string>J.narrow</string>
+			<string>quotesinglbase</string>
+			<string>quotedblbase</string>
+			<string>quotedblleft</string>
+			<string>quotedblright</string>
+			<string>comma</string>
+			<string>period</string>
+			<string>colon</string>
+			<string>semicolon</string>
+			<string>arrowleft</string>
+			<string>arrowup</string>
+			<string>arrowright</string>
+			<string>arrowdown</string>
+			<string>dot</string>
+			<string>dieresis</string>
+			<string>acute</string>
+			<string>space</string>
+			<string>IJ</string>
+		</array>
+	</dict>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/metainfo.plist b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/metainfo.plist
new file mode 100644
index 0000000..555d9ce
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSansLightWide.ufo/metainfo.plist
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+	<dict>
+		<key>creator</key>
+		<string>com.github.fonttools.ufoLib</string>
+		<key>formatVersion</key>
+		<integer>3</integer>
+	</dict>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSans_v5_implicit_one_vf.designspace b/tests/data/MutatorSansLite/MutatorSans_v5_implicit_one_vf.designspace
new file mode 100644
index 0000000..d46aa7a
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSans_v5_implicit_one_vf.designspace
@@ -0,0 +1,148 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<designspace format="5.0">
+  <axes elidedfallbackname="Regular">
+    <axis tag="wght" name="weight" minimum="300" maximum="700" default="300">
+      <map input="300" output="0"/>
+      <map input="500" output="500"/>
+      <map input="700" output="1000"/>
+      <labels>
+        <label uservalue="300" userminimum="300" usermaximum="400" name="Light"/>
+        <label uservalue="500" userminimum="400" usermaximum="600" name="Medium"/>
+        <label uservalue="700" userminimum="600" usermaximum="700" name="Bold"/>
+      </labels>
+    </axis>
+    <axis tag="wdth" name="width" minimum="50" maximum="200" default="50">
+      <map input="50" output="0"/>
+      <map input="100" output="500"/>
+      <map input="200" output="1000"/>
+      <labels>
+        <label uservalue="50" userminimum="50" usermaximum="75" name="Condensed"/>
+        <label uservalue="100" userminimum="75" usermaximum="125" name="Normal" elidable="true"/>
+        <label uservalue="200" userminimum="125" usermaximum="200" name="Extended"/>
+      </labels>
+    </axis>
+  </axes>
+  <labels>
+    <label name="S1">
+      <location>
+        <dimension name="width" uservalue="158.9044"/>
+        <dimension name="weight" uservalue="610.2436"/>
+      </location>
+    </label>
+    <label name="S2">
+      <location>
+        <dimension name="width" uservalue="159.1956"/>
+        <dimension name="weight" uservalue="642.2196"/>
+      </location>
+    </label>
+  </labels>
+  <rules>
+    <rule name="fold_I_serifs">
+      <conditionset>
+        <condition name="width" minimum="0" maximum="328"/>
+      </conditionset>
+      <sub name="I" with="I.narrow"/>
+    </rule>
+    <rule name="fold_S_terminals">
+      <conditionset>
+        <condition name="width" minimum="0" maximum="1000"/>
+        <condition name="weight" minimum="0" maximum="500"/>
+      </conditionset>
+      <sub name="S" with="S.closed"/>
+    </rule>
+  </rules>
+  <sources>
+    <source filename="MutatorSansLightCondensed.ufo" name="master.MutatorMathTest.LightCondensed.0" familyname="MutatorMathTest" stylename="LightCondensed">
+      <location>
+        <dimension name="width" xvalue="0"/>
+        <dimension name="weight" xvalue="0"/>
+      </location>
+    </source>
+    <source filename="MutatorSansBoldCondensed.ufo" name="master.MutatorMathTest.BoldCondensed.1" familyname="MutatorMathTest" stylename="BoldCondensed">
+      <location>
+        <dimension name="width" xvalue="0"/>
+        <dimension name="weight" xvalue="1000"/>
+      </location>
+    </source>
+    <source filename="MutatorSansLightWide.ufo" name="master.MutatorMathTest.LightWide.2" familyname="MutatorMathTest" stylename="LightWide">
+      <location>
+        <dimension name="width" xvalue="1000"/>
+        <dimension name="weight" xvalue="0"/>
+      </location>
+    </source>
+    <source filename="MutatorSansBoldWide.ufo" name="master.MutatorMathTest.BoldWide.3" familyname="MutatorMathTest" stylename="BoldWide">
+      <location>
+        <dimension name="width" xvalue="1000"/>
+        <dimension name="weight" xvalue="1000"/>
+      </location>
+    </source>
+    <source filename="MutatorSansLightCondensed.ufo" name="support.crossbar" layer="support.crossbar">
+      <location>
+        <dimension name="width" xvalue="0"/>
+        <dimension name="weight" xvalue="700"/>
+      </location>
+    </source>
+    <source filename="MutatorSansLightCondensed.ufo" name="support.S.wide" layer="support.S.wide">
+      <location>
+        <dimension name="width" xvalue="1000"/>
+        <dimension name="weight" xvalue="700"/>
+      </location>
+    </source>
+    <source filename="MutatorSansLightCondensed.ufo" name="support.S.middle" layer="support.S.middle">
+      <location>
+        <dimension name="width" xvalue="569.078000"/>
+        <dimension name="weight" xvalue="700"/>
+      </location>
+    </source>
+  </sources>
+  <instances>
+    <instance>
+      <location>
+        <dimension name="width" xvalue="0"/>
+        <dimension name="weight" xvalue="0"/>
+      </location>
+    </instance>
+    <instance>
+      <location>
+        <dimension name="width" xvalue="0"/>
+        <dimension name="weight" xvalue="1000"/>
+      </location>
+    </instance>
+    <instance>
+      <location>
+        <dimension name="width" xvalue="1000"/>
+        <dimension name="weight" xvalue="0"/>
+      </location>
+    </instance>
+    <instance>
+      <location>
+        <dimension name="width" xvalue="1000"/>
+        <dimension name="weight" xvalue="1000"/>
+      </location>
+    </instance>
+    <instance>
+      <location>
+        <dimension name="width" xvalue="327"/>
+        <dimension name="weight" xvalue="500"/>
+      </location>
+    </instance>
+    <instance>
+      <location>
+        <dimension name="width" xvalue="327"/>
+        <dimension name="weight" xvalue="500"/>
+      </location>
+    </instance>
+    <instance>
+      <location>
+        <dimension name="width" xvalue="569.078"/>
+        <dimension name="weight" xvalue="1000"/>
+      </location>
+    </instance>
+    <instance>
+      <location>
+        <dimension name="width" xvalue="1000"/>
+        <dimension name="weight" xvalue="500"/>
+      </location>
+    </instance>
+  </instances>
+</designspace>
diff --git a/tests/data/MutatorSansLite/MutatorSans_v5_several_vfs.designspace b/tests/data/MutatorSansLite/MutatorSans_v5_several_vfs.designspace
new file mode 100644
index 0000000..f87907d
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSans_v5_several_vfs.designspace
@@ -0,0 +1,166 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<designspace format="5.0">
+  <axes elidedfallbackname="Regular">
+    <axis tag="wght" name="weight" minimum="300" maximum="700" default="300">
+      <map input="300" output="0"/>
+      <map input="500" output="500"/>
+      <map input="700" output="1000"/>
+      <labels>
+        <label uservalue="300" userminimum="300" usermaximum="400" name="Light"/>
+        <label uservalue="500" userminimum="400" usermaximum="600" name="Medium"/>
+        <label uservalue="700" userminimum="600" usermaximum="700" name="Bold"/>
+      </labels>
+    </axis>
+    <axis tag="wdth" name="width" minimum="50" maximum="200" default="50">
+      <map input="50" output="0"/>
+      <map input="100" output="500"/>
+      <map input="200" output="1000"/>
+      <labels>
+        <label uservalue="50" userminimum="50" usermaximum="75" name="Condensed"/>
+        <label uservalue="100" userminimum="75" usermaximum="125" name="Normal" elidable="true"/>
+        <label uservalue="200" userminimum="125" usermaximum="200" name="Extended"/>
+      </labels>
+    </axis>
+  </axes>
+  <labels>
+    <label name="S1">
+      <location>
+        <dimension name="weight" uservalue="610.2436"/>
+        <dimension name="width" uservalue="158.9044"/>
+      </location>
+    </label>
+    <label name="S2">
+      <location>
+        <dimension name="weight" uservalue="642.2196"/>
+        <dimension name="width" uservalue="159.1956"/>
+      </location>
+    </label>
+  </labels>
+  <rules>
+    <rule name="fold_I_serifs">
+      <conditionset>
+        <condition name="width" minimum="0" maximum="328"/>
+      </conditionset>
+      <sub name="I" with="I.narrow"/>
+    </rule>
+    <rule name="fold_S_terminals">
+      <conditionset>
+        <condition name="width" minimum="0" maximum="1000"/>
+        <condition name="weight" minimum="0" maximum="500"/>
+      </conditionset>
+      <sub name="S" with="S.closed"/>
+    </rule>
+  </rules>
+  <sources>
+    <source filename="MutatorSansLightCondensed.ufo" name="master.MutatorMathTest.LightCondensed.0" familyname="MutatorMathTest" stylename="LightCondensed">
+      <location>
+        <dimension name="weight" xvalue="0"/>
+        <dimension name="width" xvalue="0"/>
+      </location>
+    </source>
+    <source filename="MutatorSansBoldCondensed.ufo" name="master.MutatorMathTest.BoldCondensed.1" familyname="MutatorMathTest" stylename="BoldCondensed">
+      <location>
+        <dimension name="weight" xvalue="1000"/>
+        <dimension name="width" xvalue="0"/>
+      </location>
+    </source>
+    <source filename="MutatorSansLightWide.ufo" name="master.MutatorMathTest.LightWide.2" familyname="MutatorMathTest" stylename="LightWide">
+      <location>
+        <dimension name="weight" xvalue="0"/>
+        <dimension name="width" xvalue="1000"/>
+      </location>
+    </source>
+    <source filename="MutatorSansBoldWide.ufo" name="master.MutatorMathTest.BoldWide.3" familyname="MutatorMathTest" stylename="BoldWide">
+      <location>
+        <dimension name="weight" xvalue="1000"/>
+        <dimension name="width" xvalue="1000"/>
+      </location>
+    </source>
+    <source filename="MutatorSansLightCondensed.ufo" name="support.crossbar" layer="support.crossbar">
+      <location>
+        <dimension name="width" xvalue="0"/>
+        <dimension name="weight" xvalue="700"/>
+      </location>
+    </source>
+    <source filename="MutatorSansLightCondensed.ufo" name="support.S.wide" layer="support.S.wide">
+      <location>
+        <dimension name="width" xvalue="1000"/>
+        <dimension name="weight" xvalue="700"/>
+      </location>
+    </source>
+    <source filename="MutatorSansLightCondensed.ufo" name="support.S.middle" layer="support.S.middle">
+      <location>
+        <dimension name="width" xvalue="569.078000"/>
+        <dimension name="weight" xvalue="700"/>
+      </location>
+    </source>
+  </sources>
+  <variable-fonts>
+    <variable-font name="MutatorSansVariable_Weight_Width">
+      <axis-subsets>
+        <axis-subset name="weight"/>
+        <axis-subset name="width"/>
+      </axis-subsets>
+    </variable-font>
+    <variable-font name="MutatorSansVariable_Weight">
+      <axis-subsets>
+        <axis-subset name="weight"/>
+      </axis-subsets>
+    </variable-font>
+    <variable-font name="MutatorSansVariable_Width">
+      <axis-subsets>
+        <axis-subset name="width"/>
+      </axis-subsets>
+    </variable-font>
+  </variable-fonts>
+  <instances>
+    <instance>
+      <location>
+        <dimension name="weight" xvalue="0"/>
+        <dimension name="width" xvalue="0"/>
+      </location>
+    </instance>
+    <instance>
+      <location>
+        <dimension name="weight" xvalue="1000"/>
+        <dimension name="width" xvalue="0"/>
+      </location>
+    </instance>
+    <instance>
+      <location>
+        <dimension name="weight" xvalue="0"/>
+        <dimension name="width" xvalue="1000"/>
+      </location>
+    </instance>
+    <instance>
+      <location>
+        <dimension name="weight" xvalue="1000"/>
+        <dimension name="width" xvalue="1000"/>
+      </location>
+    </instance>
+    <instance>
+      <location>
+        <dimension name="weight" xvalue="500"/>
+        <dimension name="width" xvalue="327"/>
+      </location>
+    </instance>
+    <instance>
+      <location>
+        <dimension name="weight" xvalue="500"/>
+        <dimension name="width" xvalue="327"/>
+      </location>
+    </instance>
+    <instance>
+      <location>
+        <dimension name="weight" xvalue="1000"/>
+        <dimension name="width" xvalue="569.078"/>
+      </location>
+    </instance>
+    <instance>
+      <location>
+        <dimension name="weight" xvalue="500"/>
+        <dimension name="width" xvalue="1000"/>
+      </location>
+    </instance>
+  </instances>
+</designspace>
diff --git a/tests/data/MutatorSansLite/MutatorSans_v5_several_vfs_discrete_axis.designspace b/tests/data/MutatorSansLite/MutatorSans_v5_several_vfs_discrete_axis.designspace
new file mode 100644
index 0000000..8b7dfde
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSans_v5_several_vfs_discrete_axis.designspace
@@ -0,0 +1,148 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<designspace format="5.0">
+  <axes elidedfallbackname="Regular">
+    <axis tag="wght" name="weight" minimum="300" maximum="700" default="300">
+      <map input="300" output="0"/>
+      <map input="500" output="500"/>
+      <map input="700" output="1000"/>
+      <labels>
+        <label uservalue="300" userminimum="300" usermaximum="400" name="Light"/>
+        <label uservalue="500" userminimum="400" usermaximum="600" name="Medium"/>
+        <label uservalue="700" userminimum="600" usermaximum="700" name="Bold"/>
+      </labels>
+    </axis>
+    <axis tag="wdth" name="width" values="50 200" default="50">
+      <map input="50" output="0"/>
+      <map input="200" output="1000"/>
+      <labels>
+        <label uservalue="50" name="Condensed"/>
+        <label uservalue="200" name="Extended"/>
+      </labels>
+    </axis>
+  </axes>
+  <rules>
+    <rule name="fold_I_serifs">
+      <conditionset>
+        <condition name="width" minimum="0" maximum="328"/>
+        <condition name="serif" minimum="0" maximum="0"/>
+      </conditionset>
+      <sub name="I" with="I.narrow"/>
+    </rule>
+    <rule name="fold_S_terminals">
+      <conditionset>
+        <condition name="width" minimum="0" maximum="1000"/>
+        <condition name="weight" minimum="0" maximum="500"/>
+        <condition name="serif" minimum="0" maximum="0"/>
+      </conditionset>
+      <sub name="S" with="S.closed"/>
+    </rule>
+  </rules>
+  <sources>
+    <source filename="MutatorSansLightCondensed.ufo" name="master.MutatorMathTest.LightCondensed.0" familyname="MutatorMathTest" stylename="LightCondensed">
+      <location>
+        <dimension name="weight" xvalue="0"/>
+        <dimension name="width" xvalue="0"/>
+      </location>
+    </source>
+    <source filename="MutatorSansBoldCondensed.ufo" name="master.MutatorMathTest.BoldCondensed.1" familyname="MutatorMathTest" stylename="BoldCondensed">
+      <location>
+        <dimension name="weight" xvalue="1000"/>
+        <dimension name="width" xvalue="0"/>
+      </location>
+    </source>
+    <source filename="MutatorSansLightWide.ufo" name="master.MutatorMathTest.LightWide.2" familyname="MutatorMathTest" stylename="LightWide">
+      <location>
+        <dimension name="weight" xvalue="0"/>
+        <dimension name="width" xvalue="1000"/>
+      </location>
+    </source>
+    <source filename="MutatorSansBoldWide.ufo" name="master.MutatorMathTest.BoldWide.3" familyname="MutatorMathTest" stylename="BoldWide">
+      <location>
+        <dimension name="weight" xvalue="1000"/>
+        <dimension name="width" xvalue="1000"/>
+      </location>
+    </source>
+    <source filename="MutatorSansLightCondensed.ufo" name="support.crossbar" layer="support.crossbar">
+      <location>
+        <dimension name="width" xvalue="0"/>
+        <dimension name="weight" xvalue="700"/>
+      </location>
+    </source>
+    <source filename="MutatorSansLightCondensed.ufo" name="support.S.wide" layer="support.S.wide">
+      <location>
+        <dimension name="width" xvalue="1000"/>
+        <dimension name="weight" xvalue="700"/>
+      </location>
+    </source>
+    <source filename="MutatorSansLightCondensed.ufo" name="support.S.middle" layer="support.S.middle">
+      <location>
+        <dimension name="width" xvalue="569.078000"/>
+        <dimension name="weight" xvalue="700"/>
+      </location>
+    </source>
+  </sources>
+  <variable-fonts>
+    <variable-font name="MutatorSansCondensedVariable_Weight">
+      <axis-subsets>
+        <axis-subset name="weight"/>
+        <axis-subset name="width" uservalue="50"/>
+      </axis-subsets>
+    </variable-font>
+    <variable-font name="MutatorSansExtendedVariable_Weight">
+      <axis-subsets>
+        <axis-subset name="weight"/>
+        <axis-subset name="width" uservalue="200"/>
+      </axis-subsets>
+    </variable-font>
+  </variable-fonts>
+  <instances>
+    <instance>
+      <location>
+        <dimension name="weight" xvalue="0"/>
+        <dimension name="width" xvalue="0"/>
+      </location>
+    </instance>
+    <instance>
+      <location>
+        <dimension name="weight" xvalue="1000"/>
+        <dimension name="width" xvalue="0"/>
+      </location>
+    </instance>
+    <instance>
+      <location>
+        <dimension name="weight" xvalue="0"/>
+        <dimension name="width" xvalue="1000"/>
+      </location>
+    </instance>
+    <instance>
+      <location>
+        <dimension name="weight" xvalue="1000"/>
+        <dimension name="width" xvalue="1000"/>
+      </location>
+    </instance>
+    <instance>
+      <location>
+        <dimension name="weight" xvalue="500"/>
+        <dimension name="width" xvalue="327"/>
+      </location>
+    </instance>
+    <instance>
+      <location>
+        <dimension name="weight" xvalue="500"/>
+        <dimension name="width" xvalue="327"/>
+      </location>
+    </instance>
+    <instance>
+      <location>
+        <dimension name="weight" xvalue="1000"/>
+        <dimension name="width" xvalue="569.078"/>
+      </location>
+    </instance>
+    <instance>
+      <location>
+        <dimension name="weight" xvalue="500"/>
+        <dimension name="width" xvalue="1000"/>
+      </location>
+    </instance>
+  </instances>
+</designspace>
diff --git a/tests/data/MutatorSansLite/MutatorSerifLightCondensed.ufo/features.fea b/tests/data/MutatorSansLite/MutatorSerifLightCondensed.ufo/features.fea
new file mode 100644
index 0000000..d48f133
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSerifLightCondensed.ufo/features.fea
@@ -0,0 +1,2 @@
+# this is the feature from lightCondensed
+# Hi_this_is_the_feature.
diff --git a/tests/data/MutatorSansLite/MutatorSerifLightCondensed.ufo/fontinfo.plist b/tests/data/MutatorSansLite/MutatorSerifLightCondensed.ufo/fontinfo.plist
new file mode 100644
index 0000000..5868628
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSerifLightCondensed.ufo/fontinfo.plist
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+	<dict>
+		<key>ascender</key>
+		<integer>700</integer>
+		<key>capHeight</key>
+		<integer>700</integer>
+		<key>copyright</key>
+		<string>License same as MutatorMath. BSD 3-clause. [test-token: C]</string>
+		<key>descender</key>
+		<integer>-200</integer>
+		<key>familyName</key>
+		<string>MutatorMathTest</string>
+		<key>guidelines</key>
+		<array>
+		</array>
+		<key>italicAngle</key>
+		<integer>0</integer>
+		<key>openTypeNameLicense</key>
+		<string>License same as MutatorMath. BSD 3-clause. [test-token: C]</string>
+		<key>openTypeOS2VendorID</key>
+		<string>LTTR</string>
+		<key>postscriptBlueValues</key>
+		<array>
+		</array>
+		<key>postscriptDefaultWidthX</key>
+		<integer>500</integer>
+		<key>postscriptFamilyBlues</key>
+		<array>
+		</array>
+		<key>postscriptFamilyOtherBlues</key>
+		<array>
+		</array>
+		<key>postscriptFontName</key>
+		<string>MutatorMathTest-LightCondensed</string>
+		<key>postscriptFullName</key>
+		<string>MutatorMathTest LightCondensed</string>
+		<key>postscriptOtherBlues</key>
+		<array>
+		</array>
+		<key>postscriptSlantAngle</key>
+		<integer>0</integer>
+		<key>postscriptStemSnapH</key>
+		<array>
+		</array>
+		<key>postscriptStemSnapV</key>
+		<array>
+		</array>
+		<key>postscriptWindowsCharacterSet</key>
+		<integer>1</integer>
+		<key>styleMapFamilyName</key>
+		<string></string>
+		<key>styleMapStyleName</key>
+		<string>regular</string>
+		<key>styleName</key>
+		<string>SerifLightCondensed</string>
+		<key>unitsPerEm</key>
+		<integer>1000</integer>
+		<key>versionMajor</key>
+		<integer>1</integer>
+		<key>versionMinor</key>
+		<integer>2</integer>
+		<key>xHeight</key>
+		<integer>500</integer>
+		<key>year</key>
+		<integer>2004</integer>
+	</dict>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSerifLightCondensed.ufo/glyphs/A_.glif b/tests/data/MutatorSansLite/MutatorSerifLightCondensed.ufo/glyphs/A_.glif
new file mode 100644
index 0000000..09716ab
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSerifLightCondensed.ufo/glyphs/A_.glif
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="A" format="2">
+	<unicode hex="0041"/>
+	<advance width="396"/>
+	<outline>
+		<contour>
+			<point x="20" y="0" type="line"/>
+			<point x="60" y="0" type="line"/>
+			<point x="200" y="700" type="line"/>
+			<point x="165" y="700" type="line"/>
+		</contour>
+		<contour>
+			<point x="75" y="164" type="line"/>
+			<point x="325" y="164" type="line"/>
+			<point x="325" y="200" type="line"/>
+			<point x="75" y="200" type="line"/>
+		</contour>
+		<contour>
+			<point x="332" y="0" type="line"/>
+			<point x="376" y="0" type="line"/>
+			<point x="231" y="700" type="line"/>
+			<point x="192" y="700" type="line"/>
+		</contour>
+		<contour>
+			<point x="175" y="661" type="line"/>
+			<point x="222" y="661" type="line"/>
+			<point x="222" y="700" type="line"/>
+			<point x="175" y="700" type="line"/>
+		</contour>
+		<contour>
+			<point x="0" y="0" type="line"/>
+			<point x="151" y="0" type="line"/>
+			<point x="151" y="36" type="line"/>
+			<point x="0" y="36" type="line"/>
+		</contour>
+		<contour>
+			<point x="260" y="0" type="line"/>
+			<point x="396" y="0" type="line"/>
+			<point x="396" y="36" type="line"/>
+			<point x="260" y="36" type="line"/>
+		</contour>
+	</outline>
+</glyph>
diff --git a/tests/data/MutatorSansLite/MutatorSerifLightCondensed.ufo/glyphs/contents.plist b/tests/data/MutatorSansLite/MutatorSerifLightCondensed.ufo/glyphs/contents.plist
new file mode 100644
index 0000000..be1cec8
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSerifLightCondensed.ufo/glyphs/contents.plist
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+	<dict>
+		<key>A</key>
+		<string>A_.glif</string>
+	</dict>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSerifLightCondensed.ufo/layercontents.plist b/tests/data/MutatorSansLite/MutatorSerifLightCondensed.ufo/layercontents.plist
new file mode 100644
index 0000000..0de4276
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSerifLightCondensed.ufo/layercontents.plist
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+	<array>
+		<array>
+			<string>foreground</string>
+			<string>glyphs</string>
+		</array>
+	</array>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSerifLightCondensed.ufo/lib.plist b/tests/data/MutatorSansLite/MutatorSerifLightCondensed.ufo/lib.plist
new file mode 100644
index 0000000..47a92b7
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSerifLightCondensed.ufo/lib.plist
@@ -0,0 +1,685 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+	<dict>
+		<key>com.defcon.sortDescriptor</key>
+		<array>
+			<dict>
+				<key>allowPseudoUnicode</key>
+				<true/>
+				<key>ascending</key>
+				<true/>
+				<key>type</key>
+				<string>alphabetical</string>
+			</dict>
+			<dict>
+				<key>allowPseudoUnicode</key>
+				<true/>
+				<key>ascending</key>
+				<true/>
+				<key>type</key>
+				<string>category</string>
+			</dict>
+			<dict>
+				<key>allowPseudoUnicode</key>
+				<true/>
+				<key>ascending</key>
+				<true/>
+				<key>type</key>
+				<string>unicode</string>
+			</dict>
+			<dict>
+				<key>allowPseudoUnicode</key>
+				<true/>
+				<key>ascending</key>
+				<true/>
+				<key>type</key>
+				<string>script</string>
+			</dict>
+			<dict>
+				<key>allowPseudoUnicode</key>
+				<true/>
+				<key>ascending</key>
+				<true/>
+				<key>type</key>
+				<string>suffix</string>
+			</dict>
+			<dict>
+				<key>allowPseudoUnicode</key>
+				<true/>
+				<key>ascending</key>
+				<true/>
+				<key>type</key>
+				<string>decompositionBase</string>
+			</dict>
+		</array>
+		<key>com.letterror.lightMeter.prefs</key>
+		<dict>
+			<key>chunkSize</key>
+			<integer>5</integer>
+			<key>diameter</key>
+			<integer>200</integer>
+			<key>drawTail</key>
+			<false/>
+			<key>invert</key>
+			<false/>
+			<key>toolDiameter</key>
+			<integer>30</integer>
+			<key>toolStyle</key>
+			<string>fluid</string>
+		</dict>
+		<key>com.typemytype.robofont.background.layerStrokeColor</key>
+		<array>
+			<integer>0</integer>
+			<real>0.8</real>
+			<real>0.2</real>
+			<real>0.7</real>
+		</array>
+		<key>com.typemytype.robofont.compileSettings.autohint</key>
+		<true/>
+		<key>com.typemytype.robofont.compileSettings.checkOutlines</key>
+		<false/>
+		<key>com.typemytype.robofont.compileSettings.createDummyDSIG</key>
+		<true/>
+		<key>com.typemytype.robofont.compileSettings.decompose</key>
+		<false/>
+		<key>com.typemytype.robofont.compileSettings.generateFormat</key>
+		<integer>0</integer>
+		<key>com.typemytype.robofont.compileSettings.releaseMode</key>
+		<false/>
+		<key>com.typemytype.robofont.foreground.layerStrokeColor</key>
+		<array>
+			<real>0.5</real>
+			<integer>0</integer>
+			<real>0.5</real>
+			<real>0.7</real>
+		</array>
+		<key>com.typemytype.robofont.italicSlantOffset</key>
+		<integer>0</integer>
+		<key>com.typemytype.robofont.segmentType</key>
+		<string>curve</string>
+		<key>com.typemytype.robofont.shouldAddPointsInSplineConversion</key>
+		<integer>1</integer>
+		<key>com.typesupply.MetricsMachine4.groupColors</key>
+		<dict>
+			<key>@MMK_L_A</key>
+			<array>
+				<integer>1</integer>
+				<integer>0</integer>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_C</key>
+			<array>
+				<integer>1</integer>
+				<real>0.5</real>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_E</key>
+			<array>
+				<integer>1</integer>
+				<integer>1</integer>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_I</key>
+			<array>
+				<integer>0</integer>
+				<integer>1</integer>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_N</key>
+			<array>
+				<integer>0</integer>
+				<integer>1</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_O</key>
+			<array>
+				<integer>0</integer>
+				<real>0.5</real>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_S</key>
+			<array>
+				<integer>0</integer>
+				<integer>0</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_U</key>
+			<array>
+				<real>0.5</real>
+				<integer>0</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_Y</key>
+			<array>
+				<integer>1</integer>
+				<integer>0</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_Z</key>
+			<array>
+				<integer>1</integer>
+				<integer>0</integer>
+				<real>0.5</real>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_a</key>
+			<array>
+				<integer>1</integer>
+				<integer>0</integer>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_c</key>
+			<array>
+				<integer>1</integer>
+				<real>0.5</real>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_e</key>
+			<array>
+				<integer>1</integer>
+				<integer>1</integer>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_i</key>
+			<array>
+				<integer>0</integer>
+				<integer>1</integer>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_n</key>
+			<array>
+				<integer>0</integer>
+				<integer>1</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_o</key>
+			<array>
+				<integer>0</integer>
+				<real>0.5</real>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_s</key>
+			<array>
+				<integer>0</integer>
+				<integer>0</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_u</key>
+			<array>
+				<real>0.5</real>
+				<integer>0</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_y</key>
+			<array>
+				<integer>1</integer>
+				<integer>0</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_z</key>
+			<array>
+				<integer>1</integer>
+				<integer>0</integer>
+				<real>0.5</real>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_A</key>
+			<array>
+				<integer>1</integer>
+				<integer>0</integer>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_C</key>
+			<array>
+				<integer>1</integer>
+				<real>0.5</real>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_E</key>
+			<array>
+				<integer>1</integer>
+				<integer>1</integer>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_I</key>
+			<array>
+				<integer>0</integer>
+				<integer>1</integer>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_N</key>
+			<array>
+				<integer>0</integer>
+				<integer>1</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_O</key>
+			<array>
+				<integer>0</integer>
+				<real>0.5</real>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_S</key>
+			<array>
+				<integer>0</integer>
+				<integer>0</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_U</key>
+			<array>
+				<real>0.5</real>
+				<integer>0</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_Y</key>
+			<array>
+				<integer>1</integer>
+				<integer>0</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_Z</key>
+			<array>
+				<integer>1</integer>
+				<integer>0</integer>
+				<real>0.5</real>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_a</key>
+			<array>
+				<integer>1</integer>
+				<integer>0</integer>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_c</key>
+			<array>
+				<integer>1</integer>
+				<real>0.5</real>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_e</key>
+			<array>
+				<integer>1</integer>
+				<integer>1</integer>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_i</key>
+			<array>
+				<integer>0</integer>
+				<integer>1</integer>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_n</key>
+			<array>
+				<integer>0</integer>
+				<integer>1</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_o</key>
+			<array>
+				<integer>0</integer>
+				<real>0.5</real>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_s</key>
+			<array>
+				<integer>0</integer>
+				<integer>0</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_u</key>
+			<array>
+				<real>0.5</real>
+				<integer>0</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_y</key>
+			<array>
+				<integer>1</integer>
+				<integer>0</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_z</key>
+			<array>
+				<integer>1</integer>
+				<integer>0</integer>
+				<real>0.5</real>
+				<real>0.25</real>
+			</array>
+		</dict>
+		<key>com.typesupply.defcon.sortDescriptor</key>
+		<array>
+			<dict>
+				<key>ascending</key>
+				<array>
+					<string>space</string>
+					<string>A</string>
+					<string>Agrave</string>
+					<string>Aacute</string>
+					<string>Acircumflex</string>
+					<string>Atilde</string>
+					<string>Adieresis</string>
+					<string>Aring</string>
+					<string>B</string>
+					<string>C</string>
+					<string>Ccedilla</string>
+					<string>D</string>
+					<string>E</string>
+					<string>Egrave</string>
+					<string>Eacute</string>
+					<string>Ecircumflex</string>
+					<string>Edieresis</string>
+					<string>F</string>
+					<string>G</string>
+					<string>H</string>
+					<string>I</string>
+					<string>Igrave</string>
+					<string>Iacute</string>
+					<string>Icircumflex</string>
+					<string>Idieresis</string>
+					<string>J</string>
+					<string>K</string>
+					<string>L</string>
+					<string>M</string>
+					<string>N</string>
+					<string>Ntilde</string>
+					<string>O</string>
+					<string>Ograve</string>
+					<string>Oacute</string>
+					<string>Ocircumflex</string>
+					<string>Otilde</string>
+					<string>Odieresis</string>
+					<string>P</string>
+					<string>Q</string>
+					<string>R</string>
+					<string>S</string>
+					<string>Scaron</string>
+					<string>T</string>
+					<string>U</string>
+					<string>Ugrave</string>
+					<string>Uacute</string>
+					<string>Ucircumflex</string>
+					<string>Udieresis</string>
+					<string>V</string>
+					<string>W</string>
+					<string>X</string>
+					<string>Y</string>
+					<string>Yacute</string>
+					<string>Ydieresis</string>
+					<string>Z</string>
+					<string>Zcaron</string>
+					<string>AE</string>
+					<string>Eth</string>
+					<string>Oslash</string>
+					<string>Thorn</string>
+					<string>Lslash</string>
+					<string>OE</string>
+					<string>a</string>
+					<string>agrave</string>
+					<string>aacute</string>
+					<string>acircumflex</string>
+					<string>atilde</string>
+					<string>adieresis</string>
+					<string>aring</string>
+					<string>b</string>
+					<string>c</string>
+					<string>ccedilla</string>
+					<string>d</string>
+					<string>e</string>
+					<string>egrave</string>
+					<string>eacute</string>
+					<string>ecircumflex</string>
+					<string>edieresis</string>
+					<string>f</string>
+					<string>g</string>
+					<string>h</string>
+					<string>i</string>
+					<string>igrave</string>
+					<string>iacute</string>
+					<string>icircumflex</string>
+					<string>idieresis</string>
+					<string>j</string>
+					<string>k</string>
+					<string>l</string>
+					<string>m</string>
+					<string>n</string>
+					<string>ntilde</string>
+					<string>o</string>
+					<string>ograve</string>
+					<string>oacute</string>
+					<string>ocircumflex</string>
+					<string>otilde</string>
+					<string>odieresis</string>
+					<string>p</string>
+					<string>q</string>
+					<string>r</string>
+					<string>s</string>
+					<string>scaron</string>
+					<string>t</string>
+					<string>u</string>
+					<string>ugrave</string>
+					<string>uacute</string>
+					<string>ucircumflex</string>
+					<string>udieresis</string>
+					<string>v</string>
+					<string>w</string>
+					<string>x</string>
+					<string>y</string>
+					<string>yacute</string>
+					<string>ydieresis</string>
+					<string>z</string>
+					<string>zcaron</string>
+					<string>ordfeminine</string>
+					<string>ordmasculine</string>
+					<string>germandbls</string>
+					<string>ae</string>
+					<string>eth</string>
+					<string>oslash</string>
+					<string>thorn</string>
+					<string>dotlessi</string>
+					<string>lslash</string>
+					<string>oe</string>
+					<string>mu</string>
+					<string>zero</string>
+					<string>one</string>
+					<string>two</string>
+					<string>three</string>
+					<string>four</string>
+					<string>five</string>
+					<string>six</string>
+					<string>seven</string>
+					<string>eight</string>
+					<string>nine</string>
+					<string>onesuperior</string>
+					<string>twosuperior</string>
+					<string>threesuperior</string>
+					<string>onequarter</string>
+					<string>onehalf</string>
+					<string>threequarters</string>
+					<string>underscore</string>
+					<string>hyphen</string>
+					<string>endash</string>
+					<string>emdash</string>
+					<string>parenleft</string>
+					<string>parenright</string>
+					<string>bracketleft</string>
+					<string>bracketright</string>
+					<string>braceleft</string>
+					<string>braceright</string>
+					<string>numbersign</string>
+					<string>percent</string>
+					<string>perthousand</string>
+					<string>quotesingle</string>
+					<string>quotedbl</string>
+					<string>quoteleft</string>
+					<string>quoteright</string>
+					<string>quotedblleft</string>
+					<string>quotedblright</string>
+					<string>quotesinglbase</string>
+					<string>quotedblbase</string>
+					<string>guilsinglleft</string>
+					<string>guilsinglright</string>
+					<string>asterisk</string>
+					<string>dagger</string>
+					<string>daggerdbl</string>
+					<string>period</string>
+					<string>comma</string>
+					<string>colon</string>
+					<string>semicolon</string>
+					<string>ellipsis</string>
+					<string>exclam</string>
+					<string>exclamdown</string>
+					<string>question</string>
+					<string>questiondown</string>
+					<string>slash</string>
+					<string>backslash</string>
+					<string>fraction</string>
+					<string>bar</string>
+					<string>brokenbar</string>
+					<string>at</string>
+					<string>ampersand</string>
+					<string>section</string>
+					<string>paragraph</string>
+					<string>periodcentered</string>
+					<string>bullet</string>
+					<string>plus</string>
+					<string>minus</string>
+					<string>plusminus</string>
+					<string>divide</string>
+					<string>multiply</string>
+					<string>equal</string>
+					<string>less</string>
+					<string>greater</string>
+					<string>logicalnot</string>
+					<string>dollar</string>
+					<string>cent</string>
+					<string>sterling</string>
+					<string>currency</string>
+					<string>yen</string>
+					<string>Euro</string>
+					<string>asciicircum</string>
+					<string>asciitilde</string>
+					<string>acute</string>
+					<string>grave</string>
+					<string>hungarumlaut</string>
+					<string>circumflex</string>
+					<string>caron</string>
+					<string>breve</string>
+					<string>tilde</string>
+					<string>macron</string>
+					<string>dieresis</string>
+					<string>dotaccent</string>
+					<string>ring</string>
+					<string>cedilla</string>
+					<string>ogonek</string>
+					<string>copyright</string>
+					<string>registered</string>
+					<string>trademark</string>
+					<string>degree</string>
+					<string>florin</string>
+					<string>guillemotleft</string>
+					<string>guillemotright</string>
+					<string>fi</string>
+					<string>fl</string>
+					<string>a_b_c</string>
+					<string>.notdef</string>
+				</array>
+				<key>type</key>
+				<string>glyphList</string>
+			</dict>
+		</array>
+		<key>public.glyphOrder</key>
+		<array>
+			<string>A</string>
+			<string>Aacute</string>
+			<string>Adieresis</string>
+			<string>B</string>
+			<string>C</string>
+			<string>D</string>
+			<string>E</string>
+			<string>F</string>
+			<string>G</string>
+			<string>H</string>
+			<string>I</string>
+			<string>J</string>
+			<string>K</string>
+			<string>L</string>
+			<string>M</string>
+			<string>N</string>
+			<string>O</string>
+			<string>P</string>
+			<string>Q</string>
+			<string>R</string>
+			<string>S</string>
+			<string>T</string>
+			<string>U</string>
+			<string>V</string>
+			<string>W</string>
+			<string>X</string>
+			<string>Y</string>
+			<string>Z</string>
+			<string>S.closed</string>
+			<string>I.narrow</string>
+			<string>J.narrow</string>
+			<string>quotesinglbase</string>
+			<string>quotedblbase</string>
+			<string>quotedblleft</string>
+			<string>quotedblright</string>
+			<string>comma</string>
+			<string>period</string>
+			<string>colon</string>
+			<string>semicolon</string>
+			<string>arrowleft</string>
+			<string>arrowup</string>
+			<string>arrowright</string>
+			<string>arrowdown</string>
+			<string>dot</string>
+			<string>dieresis</string>
+			<string>acute</string>
+			<string>space</string>
+			<string>IJ</string>
+		</array>
+		<key>testLibItemKey</key>
+		<array>
+			<string>a</string>
+			<string>b</string>
+			<string>c</string>
+		</array>
+	</dict>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSerifLightCondensed.ufo/metainfo.plist b/tests/data/MutatorSansLite/MutatorSerifLightCondensed.ufo/metainfo.plist
new file mode 100644
index 0000000..555d9ce
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSerifLightCondensed.ufo/metainfo.plist
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+	<dict>
+		<key>creator</key>
+		<string>com.github.fonttools.ufoLib</string>
+		<key>formatVersion</key>
+		<integer>3</integer>
+	</dict>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSerifLightWide.ufo/features.fea b/tests/data/MutatorSansLite/MutatorSerifLightWide.ufo/features.fea
new file mode 100644
index 0000000..29234c5
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSerifLightWide.ufo/features.fea
@@ -0,0 +1 @@
+# this is the feature from lightWide
diff --git a/tests/data/MutatorSansLite/MutatorSerifLightWide.ufo/fontinfo.plist b/tests/data/MutatorSansLite/MutatorSerifLightWide.ufo/fontinfo.plist
new file mode 100644
index 0000000..af5db17
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSerifLightWide.ufo/fontinfo.plist
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+	<dict>
+		<key>ascender</key>
+		<integer>700</integer>
+		<key>capHeight</key>
+		<integer>700</integer>
+		<key>copyright</key>
+		<string>License same as MutatorMath. BSD 3-clause. [test-token: D]</string>
+		<key>descender</key>
+		<integer>-200</integer>
+		<key>familyName</key>
+		<string>MutatorMathTest</string>
+		<key>guidelines</key>
+		<array>
+		</array>
+		<key>italicAngle</key>
+		<integer>0</integer>
+		<key>openTypeNameLicense</key>
+		<string>License same as MutatorMath. BSD 3-clause. [test-token: D]</string>
+		<key>openTypeOS2VendorID</key>
+		<string>LTTR</string>
+		<key>postscriptBlueValues</key>
+		<array>
+		</array>
+		<key>postscriptDefaultWidthX</key>
+		<integer>500</integer>
+		<key>postscriptFamilyBlues</key>
+		<array>
+		</array>
+		<key>postscriptFamilyOtherBlues</key>
+		<array>
+		</array>
+		<key>postscriptFontName</key>
+		<string>MutatorMathTest-LightWide</string>
+		<key>postscriptFullName</key>
+		<string>MutatorMathTest LightWide</string>
+		<key>postscriptOtherBlues</key>
+		<array>
+		</array>
+		<key>postscriptSlantAngle</key>
+		<integer>0</integer>
+		<key>postscriptStemSnapH</key>
+		<array>
+		</array>
+		<key>postscriptStemSnapV</key>
+		<array>
+		</array>
+		<key>postscriptWindowsCharacterSet</key>
+		<integer>1</integer>
+		<key>styleMapFamilyName</key>
+		<string></string>
+		<key>styleMapStyleName</key>
+		<string>regular</string>
+		<key>styleName</key>
+		<string>SerifLightWide</string>
+		<key>unitsPerEm</key>
+		<integer>1000</integer>
+		<key>versionMajor</key>
+		<integer>1</integer>
+		<key>versionMinor</key>
+		<integer>2</integer>
+		<key>xHeight</key>
+		<integer>500</integer>
+		<key>year</key>
+		<integer>2004</integer>
+	</dict>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSerifLightWide.ufo/glyphs/A_.glif b/tests/data/MutatorSansLite/MutatorSerifLightWide.ufo/glyphs/A_.glif
new file mode 100644
index 0000000..20000b2
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSerifLightWide.ufo/glyphs/A_.glif
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<glyph name="A" format="2">
+	<unicode hex="0041"/>
+	<advance width="1190"/>
+	<outline>
+		<contour>
+			<point x="50" y="0" type="line"/>
+			<point x="97" y="0" type="line"/>
+			<point x="612" y="700" type="line"/>
+			<point x="570" y="700" type="line"/>
+		</contour>
+		<contour>
+			<point x="245" y="224" type="line"/>
+			<point x="945" y="224" type="line"/>
+			<point x="945" y="254" type="line"/>
+			<point x="245" y="254" type="line"/>
+		</contour>
+		<contour>
+			<point x="1087" y="0" type="line"/>
+			<point x="1140" y="0" type="line"/>
+			<point x="620" y="700" type="line"/>
+			<point x="572" y="700" type="line"/>
+		</contour>
+		<contour>
+			<point x="570" y="664" type="line"/>
+			<point x="620" y="664" type="line"/>
+			<point x="620" y="700" type="line"/>
+			<point x="570" y="700" type="line"/>
+		</contour>
+		<contour>
+			<point x="0" y="0" type="line"/>
+			<point x="409" y="0" type="line"/>
+			<point x="409" y="30" type="line"/>
+			<point x="0" y="30" type="line"/>
+		</contour>
+		<contour>
+			<point x="749" y="0" type="line"/>
+			<point x="1180" y="0" type="line"/>
+			<point x="1180" y="30" type="line"/>
+			<point x="749" y="30" type="line"/>
+		</contour>
+	</outline>
+	<lib>
+		<dict>
+			<key>com.typemytype.robofont.Image.Brightness</key>
+			<integer>0</integer>
+			<key>com.typemytype.robofont.Image.Contrast</key>
+			<integer>1</integer>
+			<key>com.typemytype.robofont.Image.Saturation</key>
+			<integer>1</integer>
+			<key>com.typemytype.robofont.Image.Sharpness</key>
+			<real>0.4</real>
+		</dict>
+	</lib>
+</glyph>
diff --git a/tests/data/MutatorSansLite/MutatorSerifLightWide.ufo/glyphs/contents.plist b/tests/data/MutatorSansLite/MutatorSerifLightWide.ufo/glyphs/contents.plist
new file mode 100644
index 0000000..be1cec8
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSerifLightWide.ufo/glyphs/contents.plist
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+	<dict>
+		<key>A</key>
+		<string>A_.glif</string>
+	</dict>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSerifLightWide.ufo/layercontents.plist b/tests/data/MutatorSansLite/MutatorSerifLightWide.ufo/layercontents.plist
new file mode 100644
index 0000000..0de4276
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSerifLightWide.ufo/layercontents.plist
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+	<array>
+		<array>
+			<string>foreground</string>
+			<string>glyphs</string>
+		</array>
+	</array>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSerifLightWide.ufo/lib.plist b/tests/data/MutatorSansLite/MutatorSerifLightWide.ufo/lib.plist
new file mode 100644
index 0000000..046c3a3
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSerifLightWide.ufo/lib.plist
@@ -0,0 +1,664 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+	<dict>
+		<key>com.defcon.sortDescriptor</key>
+		<array>
+			<dict>
+				<key>allowPseudoUnicode</key>
+				<true/>
+				<key>ascending</key>
+				<true/>
+				<key>type</key>
+				<string>alphabetical</string>
+			</dict>
+			<dict>
+				<key>allowPseudoUnicode</key>
+				<true/>
+				<key>ascending</key>
+				<true/>
+				<key>type</key>
+				<string>category</string>
+			</dict>
+			<dict>
+				<key>allowPseudoUnicode</key>
+				<true/>
+				<key>ascending</key>
+				<true/>
+				<key>type</key>
+				<string>unicode</string>
+			</dict>
+			<dict>
+				<key>allowPseudoUnicode</key>
+				<true/>
+				<key>ascending</key>
+				<true/>
+				<key>type</key>
+				<string>script</string>
+			</dict>
+			<dict>
+				<key>allowPseudoUnicode</key>
+				<true/>
+				<key>ascending</key>
+				<true/>
+				<key>type</key>
+				<string>suffix</string>
+			</dict>
+			<dict>
+				<key>allowPseudoUnicode</key>
+				<true/>
+				<key>ascending</key>
+				<true/>
+				<key>type</key>
+				<string>decompositionBase</string>
+			</dict>
+		</array>
+		<key>com.typemytype.robofont.background.layerStrokeColor</key>
+		<array>
+			<integer>1</integer>
+			<real>0.75</real>
+			<integer>0</integer>
+			<real>0.7</real>
+		</array>
+		<key>com.typemytype.robofont.compileSettings.autohint</key>
+		<true/>
+		<key>com.typemytype.robofont.compileSettings.checkOutlines</key>
+		<false/>
+		<key>com.typemytype.robofont.compileSettings.createDummyDSIG</key>
+		<true/>
+		<key>com.typemytype.robofont.compileSettings.decompose</key>
+		<false/>
+		<key>com.typemytype.robofont.compileSettings.generateFormat</key>
+		<integer>0</integer>
+		<key>com.typemytype.robofont.compileSettings.releaseMode</key>
+		<false/>
+		<key>com.typemytype.robofont.foreground.layerStrokeColor</key>
+		<array>
+			<real>0.5</real>
+			<integer>0</integer>
+			<real>0.5</real>
+			<real>0.7</real>
+		</array>
+		<key>com.typemytype.robofont.italicSlantOffset</key>
+		<integer>0</integer>
+		<key>com.typemytype.robofont.segmentType</key>
+		<string>curve</string>
+		<key>com.typemytype.robofont.shouldAddPointsInSplineConversion</key>
+		<integer>1</integer>
+		<key>com.typesupply.MetricsMachine4.groupColors</key>
+		<dict>
+			<key>@MMK_L_A</key>
+			<array>
+				<integer>1</integer>
+				<integer>0</integer>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_C</key>
+			<array>
+				<integer>1</integer>
+				<real>0.5</real>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_E</key>
+			<array>
+				<integer>1</integer>
+				<integer>1</integer>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_I</key>
+			<array>
+				<integer>0</integer>
+				<integer>1</integer>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_N</key>
+			<array>
+				<integer>0</integer>
+				<integer>1</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_O</key>
+			<array>
+				<integer>0</integer>
+				<real>0.5</real>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_S</key>
+			<array>
+				<integer>0</integer>
+				<integer>0</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_U</key>
+			<array>
+				<real>0.5</real>
+				<integer>0</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_Y</key>
+			<array>
+				<integer>1</integer>
+				<integer>0</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_Z</key>
+			<array>
+				<integer>1</integer>
+				<integer>0</integer>
+				<real>0.5</real>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_a</key>
+			<array>
+				<integer>1</integer>
+				<integer>0</integer>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_c</key>
+			<array>
+				<integer>1</integer>
+				<real>0.5</real>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_e</key>
+			<array>
+				<integer>1</integer>
+				<integer>1</integer>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_i</key>
+			<array>
+				<integer>0</integer>
+				<integer>1</integer>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_n</key>
+			<array>
+				<integer>0</integer>
+				<integer>1</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_o</key>
+			<array>
+				<integer>0</integer>
+				<real>0.5</real>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_s</key>
+			<array>
+				<integer>0</integer>
+				<integer>0</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_u</key>
+			<array>
+				<real>0.5</real>
+				<integer>0</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_y</key>
+			<array>
+				<integer>1</integer>
+				<integer>0</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_L_z</key>
+			<array>
+				<integer>1</integer>
+				<integer>0</integer>
+				<real>0.5</real>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_A</key>
+			<array>
+				<integer>1</integer>
+				<integer>0</integer>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_C</key>
+			<array>
+				<integer>1</integer>
+				<real>0.5</real>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_E</key>
+			<array>
+				<integer>1</integer>
+				<integer>1</integer>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_I</key>
+			<array>
+				<integer>0</integer>
+				<integer>1</integer>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_N</key>
+			<array>
+				<integer>0</integer>
+				<integer>1</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_O</key>
+			<array>
+				<integer>0</integer>
+				<real>0.5</real>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_S</key>
+			<array>
+				<integer>0</integer>
+				<integer>0</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_U</key>
+			<array>
+				<real>0.5</real>
+				<integer>0</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_Y</key>
+			<array>
+				<integer>1</integer>
+				<integer>0</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_Z</key>
+			<array>
+				<integer>1</integer>
+				<integer>0</integer>
+				<real>0.5</real>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_a</key>
+			<array>
+				<integer>1</integer>
+				<integer>0</integer>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_c</key>
+			<array>
+				<integer>1</integer>
+				<real>0.5</real>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_e</key>
+			<array>
+				<integer>1</integer>
+				<integer>1</integer>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_i</key>
+			<array>
+				<integer>0</integer>
+				<integer>1</integer>
+				<integer>0</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_n</key>
+			<array>
+				<integer>0</integer>
+				<integer>1</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_o</key>
+			<array>
+				<integer>0</integer>
+				<real>0.5</real>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_s</key>
+			<array>
+				<integer>0</integer>
+				<integer>0</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_u</key>
+			<array>
+				<real>0.5</real>
+				<integer>0</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_y</key>
+			<array>
+				<integer>1</integer>
+				<integer>0</integer>
+				<integer>1</integer>
+				<real>0.25</real>
+			</array>
+			<key>@MMK_R_z</key>
+			<array>
+				<integer>1</integer>
+				<integer>0</integer>
+				<real>0.5</real>
+				<real>0.25</real>
+			</array>
+		</dict>
+		<key>com.typesupply.defcon.sortDescriptor</key>
+		<array>
+			<dict>
+				<key>ascending</key>
+				<array>
+					<string>space</string>
+					<string>A</string>
+					<string>Agrave</string>
+					<string>Aacute</string>
+					<string>Acircumflex</string>
+					<string>Atilde</string>
+					<string>Adieresis</string>
+					<string>Aring</string>
+					<string>B</string>
+					<string>C</string>
+					<string>Ccedilla</string>
+					<string>D</string>
+					<string>E</string>
+					<string>Egrave</string>
+					<string>Eacute</string>
+					<string>Ecircumflex</string>
+					<string>Edieresis</string>
+					<string>F</string>
+					<string>G</string>
+					<string>H</string>
+					<string>I</string>
+					<string>Igrave</string>
+					<string>Iacute</string>
+					<string>Icircumflex</string>
+					<string>Idieresis</string>
+					<string>J</string>
+					<string>K</string>
+					<string>L</string>
+					<string>M</string>
+					<string>N</string>
+					<string>Ntilde</string>
+					<string>O</string>
+					<string>Ograve</string>
+					<string>Oacute</string>
+					<string>Ocircumflex</string>
+					<string>Otilde</string>
+					<string>Odieresis</string>
+					<string>P</string>
+					<string>Q</string>
+					<string>R</string>
+					<string>S</string>
+					<string>Scaron</string>
+					<string>T</string>
+					<string>U</string>
+					<string>Ugrave</string>
+					<string>Uacute</string>
+					<string>Ucircumflex</string>
+					<string>Udieresis</string>
+					<string>V</string>
+					<string>W</string>
+					<string>X</string>
+					<string>Y</string>
+					<string>Yacute</string>
+					<string>Ydieresis</string>
+					<string>Z</string>
+					<string>Zcaron</string>
+					<string>AE</string>
+					<string>Eth</string>
+					<string>Oslash</string>
+					<string>Thorn</string>
+					<string>Lslash</string>
+					<string>OE</string>
+					<string>a</string>
+					<string>agrave</string>
+					<string>aacute</string>
+					<string>acircumflex</string>
+					<string>atilde</string>
+					<string>adieresis</string>
+					<string>aring</string>
+					<string>b</string>
+					<string>c</string>
+					<string>ccedilla</string>
+					<string>d</string>
+					<string>e</string>
+					<string>egrave</string>
+					<string>eacute</string>
+					<string>ecircumflex</string>
+					<string>edieresis</string>
+					<string>f</string>
+					<string>g</string>
+					<string>h</string>
+					<string>i</string>
+					<string>igrave</string>
+					<string>iacute</string>
+					<string>icircumflex</string>
+					<string>idieresis</string>
+					<string>j</string>
+					<string>k</string>
+					<string>l</string>
+					<string>m</string>
+					<string>n</string>
+					<string>ntilde</string>
+					<string>o</string>
+					<string>ograve</string>
+					<string>oacute</string>
+					<string>ocircumflex</string>
+					<string>otilde</string>
+					<string>odieresis</string>
+					<string>p</string>
+					<string>q</string>
+					<string>r</string>
+					<string>s</string>
+					<string>scaron</string>
+					<string>t</string>
+					<string>u</string>
+					<string>ugrave</string>
+					<string>uacute</string>
+					<string>ucircumflex</string>
+					<string>udieresis</string>
+					<string>v</string>
+					<string>w</string>
+					<string>x</string>
+					<string>y</string>
+					<string>yacute</string>
+					<string>ydieresis</string>
+					<string>z</string>
+					<string>zcaron</string>
+					<string>ordfeminine</string>
+					<string>ordmasculine</string>
+					<string>germandbls</string>
+					<string>ae</string>
+					<string>eth</string>
+					<string>oslash</string>
+					<string>thorn</string>
+					<string>dotlessi</string>
+					<string>lslash</string>
+					<string>oe</string>
+					<string>zero</string>
+					<string>one</string>
+					<string>two</string>
+					<string>three</string>
+					<string>four</string>
+					<string>five</string>
+					<string>six</string>
+					<string>seven</string>
+					<string>eight</string>
+					<string>nine</string>
+					<string>onesuperior</string>
+					<string>twosuperior</string>
+					<string>threesuperior</string>
+					<string>onequarter</string>
+					<string>onehalf</string>
+					<string>threequarters</string>
+					<string>underscore</string>
+					<string>hyphen</string>
+					<string>endash</string>
+					<string>emdash</string>
+					<string>parenleft</string>
+					<string>parenright</string>
+					<string>bracketleft</string>
+					<string>bracketright</string>
+					<string>braceleft</string>
+					<string>braceright</string>
+					<string>numbersign</string>
+					<string>percent</string>
+					<string>perthousand</string>
+					<string>quotesingle</string>
+					<string>quotedbl</string>
+					<string>quoteleft</string>
+					<string>quoteright</string>
+					<string>quotedblleft</string>
+					<string>quotedblright</string>
+					<string>quotesinglbase</string>
+					<string>quotedblbase</string>
+					<string>guilsinglleft</string>
+					<string>guilsinglright</string>
+					<string>guillemotleft</string>
+					<string>guillemotright</string>
+					<string>asterisk</string>
+					<string>dagger</string>
+					<string>daggerdbl</string>
+					<string>period</string>
+					<string>comma</string>
+					<string>colon</string>
+					<string>semicolon</string>
+					<string>ellipsis</string>
+					<string>exclam</string>
+					<string>exclamdown</string>
+					<string>question</string>
+					<string>questiondown</string>
+					<string>slash</string>
+					<string>backslash</string>
+					<string>fraction</string>
+					<string>bar</string>
+					<string>brokenbar</string>
+					<string>at</string>
+					<string>ampersand</string>
+					<string>section</string>
+					<string>paragraph</string>
+					<string>periodcentered</string>
+					<string>bullet</string>
+					<string>plus</string>
+					<string>minus</string>
+					<string>plusminus</string>
+					<string>divide</string>
+					<string>multiply</string>
+					<string>equal</string>
+					<string>less</string>
+					<string>greater</string>
+					<string>logicalnot</string>
+					<string>mu</string>
+					<string>dollar</string>
+					<string>cent</string>
+					<string>sterling</string>
+					<string>currency</string>
+					<string>yen</string>
+					<string>Euro</string>
+					<string>florin</string>
+					<string>asciicircum</string>
+					<string>asciitilde</string>
+					<string>acute</string>
+					<string>grave</string>
+					<string>hungarumlaut</string>
+					<string>circumflex</string>
+					<string>caron</string>
+					<string>breve</string>
+					<string>tilde</string>
+					<string>macron</string>
+					<string>dieresis</string>
+					<string>dotaccent</string>
+					<string>ring</string>
+					<string>cedilla</string>
+					<string>ogonek</string>
+					<string>copyright</string>
+					<string>registered</string>
+					<string>trademark</string>
+					<string>degree</string>
+					<string>fi</string>
+					<string>fl</string>
+					<string>.notdef</string>
+					<string>a_b_c</string>
+				</array>
+				<key>type</key>
+				<string>glyphList</string>
+			</dict>
+		</array>
+		<key>public.glyphOrder</key>
+		<array>
+			<string>A</string>
+			<string>Aacute</string>
+			<string>Adieresis</string>
+			<string>B</string>
+			<string>C</string>
+			<string>D</string>
+			<string>E</string>
+			<string>F</string>
+			<string>G</string>
+			<string>H</string>
+			<string>I</string>
+			<string>J</string>
+			<string>K</string>
+			<string>L</string>
+			<string>M</string>
+			<string>N</string>
+			<string>O</string>
+			<string>P</string>
+			<string>Q</string>
+			<string>R</string>
+			<string>S</string>
+			<string>T</string>
+			<string>U</string>
+			<string>V</string>
+			<string>W</string>
+			<string>X</string>
+			<string>Y</string>
+			<string>Z</string>
+			<string>S.closed</string>
+			<string>I.narrow</string>
+			<string>J.narrow</string>
+			<string>quotesinglbase</string>
+			<string>quotedblbase</string>
+			<string>quotedblleft</string>
+			<string>quotedblright</string>
+			<string>comma</string>
+			<string>period</string>
+			<string>colon</string>
+			<string>semicolon</string>
+			<string>arrowleft</string>
+			<string>arrowup</string>
+			<string>arrowright</string>
+			<string>arrowdown</string>
+			<string>dot</string>
+			<string>dieresis</string>
+			<string>acute</string>
+			<string>space</string>
+			<string>IJ</string>
+		</array>
+	</dict>
+</plist>
diff --git a/tests/data/MutatorSansLite/MutatorSerifLightWide.ufo/metainfo.plist b/tests/data/MutatorSansLite/MutatorSerifLightWide.ufo/metainfo.plist
new file mode 100644
index 0000000..555d9ce
--- /dev/null
+++ b/tests/data/MutatorSansLite/MutatorSerifLightWide.ufo/metainfo.plist
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+	<dict>
+		<key>creator</key>
+		<string>com.github.fonttools.ufoLib</string>
+		<key>formatVersion</key>
+		<integer>3</integer>
+	</dict>
+</plist>
diff --git a/tests/data/TestSubset2.glyphs b/tests/data/TestSubset2.glyphs
new file mode 100644
index 0000000..0f1c085
--- /dev/null
+++ b/tests/data/TestSubset2.glyphs
@@ -0,0 +1,448 @@
+{
+.appVersion = "1150";
+DisplayStrings = (
+A,
+B,
+C,
+D,
+ABCD
+);
+copyright = "Nobody 2019";
+customParameters = (
+{
+name = "Don't use Production Names";
+value = 1;
+},
+{
+name = glyphOrder;
+value = (
+space,
+A,
+C,
+B,
+D
+);
+}
+);
+date = "2018-06-15 11:22:00 +0000";
+designer = Nobody;
+familyName = Test;
+fontMaster = (
+{
+ascender = 800;
+capHeight = 700;
+descender = -200;
+id = "6111F4CC-71E1-4957-80C0-165C5F37B12D";
+weightValue = 400;
+xHeight = 500;
+},
+{
+ascender = 800;
+capHeight = 700;
+descender = -200;
+id = "5C1BB0B4-E06E-4398-8A0A-FC3D2F3AAFA2";
+weight = Bold;
+weightValue = 700;
+xHeight = 500;
+}
+);
+glyphs = (
+{
+glyphname = space;
+lastChange = "2018-06-15 11:32:24 +0000";
+layers = (
+{
+layerId = "6111F4CC-71E1-4957-80C0-165C5F37B12D";
+width = 600;
+},
+{
+layerId = "5C1BB0B4-E06E-4398-8A0A-FC3D2F3AAFA2";
+width = 600;
+}
+);
+unicode = 0020;
+},
+{
+glyphname = A;
+lastChange = "2018-06-15 11:40:10 +0000";
+layers = (
+{
+layerId = "6111F4CC-71E1-4957-80C0-165C5F37B12D";
+paths = (
+{
+closed = 1;
+nodes = (
+"-6 3 LINE",
+"104 -5 LINE",
+"201 298 LINE",
+"358 294 LINE",
+"477 -3 LINE",
+"574 9 LINE",
+"313 699 LINE",
+"250 704 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"298 573 LINE",
+"349 371 LINE",
+"215 368 LINE",
+"267 573 LINE"
+);
+}
+);
+width = 600;
+},
+{
+layerId = "5C1BB0B4-E06E-4398-8A0A-FC3D2F3AAFA2";
+paths = (
+{
+closed = 1;
+nodes = (
+"-36 3 LINE",
+"104 -5 LINE",
+"201 278 LINE",
+"358 274 LINE",
+"477 -3 LINE",
+"615 9 LINE",
+"354 699 LINE",
+"220 704 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"298 603 LINE",
+"349 371 LINE",
+"215 368 LINE",
+"267 603 LINE"
+);
+}
+);
+width = 600;
+}
+);
+unicode = 0041;
+},
+{
+glyphname = C;
+lastChange = "2018-06-15 11:33:54 +0000";
+layers = (
+{
+layerId = "6111F4CC-71E1-4957-80C0-165C5F37B12D";
+paths = (
+{
+closed = 1;
+nodes = (
+"522 45 OFFCURVE",
+"414 -7 OFFCURVE",
+"310 -7 CURVE SMOOTH",
+"124 -7 OFFCURVE",
+"-26 157 OFFCURVE",
+"-26 359 CURVE SMOOTH",
+"-26 560 OFFCURVE",
+"124 724 OFFCURVE",
+"310 724 CURVE SMOOTH",
+"423 724 OFFCURVE",
+"512 685 OFFCURVE",
+"583 601 CURVE",
+"512 544 LINE",
+"466 612 OFFCURVE",
+"395 655 OFFCURVE",
+"315 655 CURVE SMOOTH",
+"176 655 OFFCURVE",
+"63 523 OFFCURVE",
+"63 360 CURVE SMOOTH",
+"63 197 OFFCURVE",
+"176 65 OFFCURVE",
+"315 65 CURVE SMOOTH",
+"393 65 OFFCURVE",
+"463 107 OFFCURVE",
+"509 172 CURVE",
+"583 127 LINE"
+);
+}
+);
+width = 600;
+},
+{
+layerId = "5C1BB0B4-E06E-4398-8A0A-FC3D2F3AAFA2";
+paths = (
+{
+closed = 1;
+nodes = (
+"522 45 OFFCURVE",
+"414 -7 OFFCURVE",
+"310 -7 CURVE SMOOTH",
+"124 -7 OFFCURVE",
+"-26 157 OFFCURVE",
+"-26 359 CURVE SMOOTH",
+"-26 560 OFFCURVE",
+"124 724 OFFCURVE",
+"310 724 CURVE SMOOTH",
+"423 724 OFFCURVE",
+"512 685 OFFCURVE",
+"583 601 CURVE",
+"479 512 LINE",
+"433 580 OFFCURVE",
+"382 618 OFFCURVE",
+"302 618 CURVE SMOOTH",
+"185 618 OFFCURVE",
+"103 523 OFFCURVE",
+"103 360 CURVE SMOOTH",
+"103 197 OFFCURVE",
+"186 113 OFFCURVE",
+"295 113 CURVE SMOOTH",
+"373 113 OFFCURVE",
+"423 147 OFFCURVE",
+"469 212 CURVE",
+"583 127 LINE"
+);
+}
+);
+width = 600;
+}
+);
+unicode = 0043;
+},
+{
+glyphname = B;
+export = 0;
+lastChange = "2018-06-15 11:34:17 +0000";
+layers = (
+{
+layerId = "6111F4CC-71E1-4957-80C0-165C5F37B12D";
+paths = (
+{
+closed = 1;
+nodes = (
+"347 5 LINE",
+"456 5 OFFCURVE",
+"600 0 OFFCURVE",
+"600 209 CURVE SMOOTH",
+"600 387 OFFCURVE",
+"341 369 OFFCURVE",
+"261 371 CURVE",
+"261 392 LINE",
+"434 392 OFFCURVE",
+"548 377 OFFCURVE",
+"548 555 CURVE SMOOTH",
+"548 661 OFFCURVE",
+"484 702 OFFCURVE",
+"348 702 CURVE",
+"65 702 LINE",
+"62 3 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"159 325 LINE",
+"391 325 LINE SMOOTH",
+"471 325 OFFCURVE",
+"512 276 OFFCURVE",
+"505 185 CURVE SMOOTH",
+"499 110 OFFCURVE",
+"457 72 OFFCURVE",
+"404 74 CURVE SMOOTH",
+"178 73 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"166 653 LINE",
+"318 648 LINE",
+"378 643 OFFCURVE",
+"436 618 OFFCURVE",
+"436 561 CURVE SMOOTH",
+"436 500 OFFCURVE",
+"409 441 OFFCURVE",
+"319 433 CURVE",
+"155 426 LINE"
+);
+}
+);
+width = 600;
+},
+{
+layerId = "5C1BB0B4-E06E-4398-8A0A-FC3D2F3AAFA2";
+paths = (
+{
+closed = 1;
+nodes = (
+"347 5 LINE",
+"456 5 OFFCURVE",
+"600 0 OFFCURVE",
+"600 209 CURVE SMOOTH",
+"600 387 OFFCURVE",
+"341 369 OFFCURVE",
+"261 371 CURVE",
+"261 392 LINE",
+"434 392 OFFCURVE",
+"548 377 OFFCURVE",
+"548 555 CURVE SMOOTH",
+"548 661 OFFCURVE",
+"484 702 OFFCURVE",
+"348 702 CURVE",
+"65 702 LINE",
+"62 3 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"189 315 LINE",
+"361 315 LINE SMOOTH",
+"441 315 OFFCURVE",
+"468 262 OFFCURVE",
+"465 209 CURVE SMOOTH",
+"461 130 OFFCURVE",
+"417 94 OFFCURVE",
+"364 94 CURVE SMOOTH",
+"208 93 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"196 633 LINE",
+"308 628 LINE",
+"368 623 OFFCURVE",
+"416 598 OFFCURVE",
+"416 539 CURVE SMOOTH",
+"416 500 OFFCURVE",
+"399 451 OFFCURVE",
+"319 443 CURVE",
+"185 436 LINE"
+);
+}
+);
+width = 600;
+}
+);
+unicode = 0042;
+},
+{
+glyphname = D;
+lastChange = "2018-06-15 11:34:58 +0000";
+layers = (
+{
+layerId = "6111F4CC-71E1-4957-80C0-165C5F37B12D";
+paths = (
+{
+closed = 1;
+nodes = (
+"501 0 OFFCURVE",
+"591 133 OFFCURVE",
+"598 356 CURVE SMOOTH",
+"606 599 OFFCURVE",
+"481 709 OFFCURVE",
+"277 709 CURVE",
+"30 708 LINE",
+"33 716 OFFCURVE",
+"27 239 OFFCURVE",
+"26 4 CURVE",
+"273 3 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"97 72 LINE",
+"98 248 OFFCURVE",
+"102 639 OFFCURVE",
+"100 633 CURVE",
+"286 634 LINE",
+"439 634 OFFCURVE",
+"513 539 OFFCURVE",
+"507 356 CURVE SMOOTH",
+"502 188 OFFCURVE",
+"454 69 OFFCURVE",
+"283 71 CURVE"
+);
+}
+);
+width = 600;
+},
+{
+layerId = "5C1BB0B4-E06E-4398-8A0A-FC3D2F3AAFA2";
+paths = (
+{
+closed = 1;
+nodes = (
+"501 0 OFFCURVE",
+"591 133 OFFCURVE",
+"598 356 CURVE SMOOTH",
+"606 599 OFFCURVE",
+"481 709 OFFCURVE",
+"277 709 CURVE",
+"30 708 LINE",
+"33 716 OFFCURVE",
+"27 239 OFFCURVE",
+"26 4 CURVE",
+"273 3 LINE"
+);
+},
+{
+closed = 1;
+nodes = (
+"147 112 LINE",
+"148 288 OFFCURVE",
+"152 619 OFFCURVE",
+"150 613 CURVE",
+"262 614 LINE",
+"409 614 OFFCURVE",
+"473 499 OFFCURVE",
+"467 356 CURVE SMOOTH",
+"460 188 OFFCURVE",
+"400 111 OFFCURVE",
+"264 111 CURVE"
+);
+}
+);
+width = 600;
+}
+);
+unicode = 0044;
+}
+);
+instances = (
+{
+interpolationWeight = 400;
+instanceInterpolations = {
+"6111F4CC-71E1-4957-80C0-165C5F37B12D" = 1;
+};
+name = Regular;
+},
+{
+customParameters = (
+{
+name = "Remove Glyphs";
+value = (
+A,
+B,
+C
+);
+}
+);
+interpolationWeight = 400;
+instanceInterpolations = {
+"6111F4CC-71E1-4957-80C0-165C5F37B12D" = 1;
+};
+name = "Subset Regular";
+},
+{
+interpolationWeight = 700;
+instanceInterpolations = {
+"5C1BB0B4-E06E-4398-8A0A-FC3D2F3AAFA2" = 1;
+};
+name = Bold;
+weightClass = Bold;
+}
+);
+unitsPerEm = 1000;
+versionMajor = 1;
+versionMinor = 0;
+}
diff --git a/tests/test_compatibility.py b/tests/test_compatibility.py
new file mode 100644
index 0000000..b2fff2f
--- /dev/null
+++ b/tests/test_compatibility.py
@@ -0,0 +1,48 @@
+import pytest
+import ufoLib2
+from fontTools import designspaceLib
+
+from fontmake.__main__ import main
+from fontmake.compatibility import CompatibilityChecker
+
+
+def test_compatibility_checker(data_dir, caplog):
+    designspace = designspaceLib.DesignSpaceDocument.fromfile(
+        data_dir / "IncompatibleSans" / "IncompatibleSans.designspace"
+    )
+    designspace.loadSourceFonts(opener=ufoLib2.objects.Font.open)
+
+    CompatibilityChecker([s.font for s in designspace.sources]).check()
+    assert "differing number of contours in glyph A" in caplog.text
+    assert "Incompatible Sans Regular had 2" in caplog.text
+
+    assert "differing number of points in glyph B, contour 0" in caplog.text
+
+    assert "differing anchors in glyph A" in caplog.text
+    assert 'Incompatible Sans Bold had "foo"' in caplog.text
+
+    assert "Fonts had differing number of components in glyph C" in caplog.text
+
+    assert (
+        "Fonts had differing point type in glyph D, contour 0, point 10" in caplog.text
+    )
+
+
+def test_compatibility_cli(data_dir, caplog):
+    ds = str(data_dir / "IncompatibleSans" / "IncompatibleSans.designspace")
+    with pytest.raises(SystemExit):
+        main(["-o", "variable", "-m", ds])
+
+    main(["-o", "ttf", "-m", ds])
+
+    with pytest.raises(SystemExit):
+        main(["--check-compatibility", "-o", "ttf", "-m", ds])
+
+    # We stopped things before they got to the cu2qu level
+    assert "cu2qu.ufo" not in caplog.text
+
+    with pytest.raises(SystemExit):
+        main(["--no-check-compatibility", "-o", "variable", "-m", ds])
+
+    # Things got to the cu2qu level (i.e. compatibility checker did not run)
+    assert "cu2qu.ufo" in caplog.text
diff --git a/tests/test_instantiator.py b/tests/test_instantiator.py
index 93cf3bf..997f6af 100644
--- a/tests/test_instantiator.py
+++ b/tests/test_instantiator.py
@@ -645,3 +645,30 @@ def test_skipped_fontinfo_attributes():
         - fontmake.instantiator.UFO_INFO_ATTRIBUTES_TO_COPY_TO_INSTANCES
         == SKIPPED_ATTRS
     )
+
+
+def test_designspace_v5_discrete_axis_raises_error(data_dir):
+    designspace = designspaceLib.DesignSpaceDocument.fromfile(
+        data_dir / "MutatorSansLite" / "MutatorFamily_v5_discrete_axis.designspace"
+    )
+    # The error message should advise to use `splitInterpolable()`
+    with pytest.raises(
+        fontmake.instantiator.InstantiatorError, match="splitInterpolable"
+    ):
+        fontmake.instantiator.Instantiator.from_designspace(designspace)
+
+
+def test_strict_math_glyph(data_dir):
+    designspace = designspaceLib.DesignSpaceDocument.fromfile(
+        data_dir / "InstantiatorStrictMathGlyph" / "StrictMathGlyph.designspace"
+    )
+    generator = fontmake.instantiator.Instantiator.from_designspace(
+        designspace, round_geometry=True
+    )
+    fonts = [
+        generator.generate_instance(instance) for instance in designspace.instances
+    ]
+    assert len(fonts) == 1
+    glyph = fonts[0]["test"]
+    assert len(glyph.contours) == 1
+    assert len(glyph.contours[0].points) == 16
diff --git a/tests/test_main.py b/tests/test_main.py
index 78f22f6..05adf5c 100644
--- a/tests/test_main.py
+++ b/tests/test_main.py
@@ -1,9 +1,16 @@
+import logging
+import platform
+import re
 import shutil
+import subprocess
+import sys
+from textwrap import dedent
 
 import fontTools.designspaceLib as designspaceLib
 import fontTools.ttLib
 import pytest
 import ufoLib2
+from fontTools.misc.testTools import getXML
 
 import fontmake.__main__
 
@@ -28,19 +35,42 @@ def test_interpolation(data_dir, tmp_path):
 
     test_output_ttf = fontTools.ttLib.TTFont(tmp_path / "MyFont-Regular.ttf")
     assert test_output_ttf["OS/2"].usWeightClass == 400
-    glyph = test_output_ttf.getGlyphSet()["l"]._glyph
+    glyph = test_output_ttf["glyf"]["l"]
     assert glyph.xMin == 50
     assert glyph.xMax == 170
 
     test_output_otf = fontTools.ttLib.TTFont(tmp_path / "MyFont-Regular.otf")
     assert test_output_otf["OS/2"].usWeightClass == 400
     glyph_set = test_output_otf.getGlyphSet()
-    glyph = glyph_set["l"]._glyph
+    charstrings = list(test_output_otf["CFF "].cff.values())[0].CharStrings
+    glyph = charstrings["l"]
     x_min, _, x_max, _ = glyph.calcBounds(glyph_set)
     assert x_min == 50
     assert x_max == 170
 
 
+def test_interpolation_designspace_5(data_dir, tmp_path):
+    shutil.copytree(data_dir / "MutatorSansLite", tmp_path / "sources")
+
+    fontmake.__main__.main(
+        [
+            "-m",
+            str(tmp_path / "sources" / "MutatorFamily_v5_discrete_axis.designspace"),
+            "-i",
+            ".*Light Condensed",
+            "--output-dir",
+            str(tmp_path),
+        ]
+    )
+
+    assert {p.name for p in tmp_path.glob("*.*")} == {
+        "MutatorMathTest-Sans Light Condensed.ttf",
+        "MutatorMathTest-Serif Light Condensed.otf",
+        "MutatorMathTest-Sans Light Condensed.otf",
+        "MutatorMathTest-Serif Light Condensed.ttf",
+    }
+
+
 def test_interpolation_mutatormath(data_dir, tmp_path):
     shutil.copytree(data_dir / "DesignspaceTest", tmp_path / "sources")
 
@@ -62,30 +92,28 @@ def test_interpolation_mutatormath(data_dir, tmp_path):
 
     test_output_ttf = fontTools.ttLib.TTFont(tmp_path / "MyFont-Regular.ttf")
     assert test_output_ttf["OS/2"].usWeightClass == 400
-    glyph = test_output_ttf.getGlyphSet()["l"]._glyph
+    glyph = test_output_ttf["glyf"]["l"]
     assert glyph.xMin == 50
     assert glyph.xMax == 170
 
     test_output_otf = fontTools.ttLib.TTFont(tmp_path / "MyFont-Regular.otf")
     assert test_output_otf["OS/2"].usWeightClass == 400
     glyph_set = test_output_otf.getGlyphSet()
-    glyph = glyph_set["l"]._glyph
+    charstrings = list(test_output_otf["CFF "].cff.values())[0].CharStrings
+    glyph = charstrings["l"]
     x_min, _, x_max, _ = glyph.calcBounds(glyph_set)
     assert x_min == 50
     assert x_max == 170
 
 
 def test_interpolation_mutatormath_source_layer(data_dir, tmp_path):
-    shutil.copyfile(
-        data_dir / "MutatorSans" / "MutatorSans.designspace",
-        tmp_path / "MutatorSans.designspace",
-    )
+    shutil.copytree(data_dir / "MutatorSans", tmp_path / "layertest")
 
     with pytest.raises(SystemExit, match="sources with 'layer'"):
         fontmake.__main__.main(
             [
                 "-m",
-                str(tmp_path / "MutatorSans.designspace"),
+                str(tmp_path / "layertest" / "MutatorSans.designspace"),
                 "-i",
                 "--use-mutatormath",
                 "--output-dir",
@@ -119,14 +147,15 @@ def test_interpolation_and_masters_as_instances(data_dir, tmp_path):
 
     test_output_ttf = fontTools.ttLib.TTFont(tmp_path / "MyFont-Regular.ttf")
     assert test_output_ttf["OS/2"].usWeightClass == 400
-    glyph = test_output_ttf.getGlyphSet()["l"]._glyph
+    glyph = test_output_ttf["glyf"]["l"]
     assert glyph.xMin == 50
     assert glyph.xMax == 170
 
     test_output_otf = fontTools.ttLib.TTFont(tmp_path / "MyFont-Regular.otf")
     assert test_output_otf["OS/2"].usWeightClass == 400
     glyph_set = test_output_otf.getGlyphSet()
-    glyph = glyph_set["l"]._glyph
+    charstrings = list(test_output_otf["CFF "].cff.values())[0].CharStrings
+    glyph = charstrings["l"]
     x_min, _, x_max, _ = glyph.calcBounds(glyph_set)
     assert x_min == 50
     assert x_max == 170
@@ -339,6 +368,42 @@ def test_subsetting(data_dir, tmp_path, write_skipexportglyphs):
             assert font.getGlyphOrder() == [".notdef", "space", "A", "C"]
 
 
+@pytest.mark.parametrize(
+    "write_skipexportglyphs",
+    [
+        pytest.param(True, id="default"),
+        pytest.param(False, id="no-write-skipexportglyphs"),
+    ],
+)
+def test_keep_glyphs(data_dir, tmp_path, write_skipexportglyphs):
+    shutil.copyfile(data_dir / "TestSubset2.glyphs", tmp_path / "TestSubset2.glyphs")
+
+    args = [
+        "-g",
+        str(tmp_path / "TestSubset2.glyphs"),
+        "--master-dir",
+        str(tmp_path / "master_ufos"),
+        "--instance-dir",
+        str(tmp_path / "instance_ufos"),
+        "-i",
+        "Test Subset Regular",
+        "-o",
+        "ttf",
+        "otf",
+        "--output-dir",
+        str(tmp_path),
+    ]
+    if not write_skipexportglyphs:
+        args.append("--no-write-skipexportglyphs")
+
+    fontmake.__main__.main(args)
+
+    for output_format in ("ttf", "otf"):
+        for font_path in tmp_path.glob("*." + output_format):
+            font = fontTools.ttLib.TTFont(font_path)
+            assert font.getGlyphOrder() == [".notdef", "space", "D"]
+
+
 def test_shared_features_expansion(data_dir, tmp_path):
     shutil.copytree(data_dir / "DesignspaceTestSharedFeatures", tmp_path / "sources")
 
@@ -563,6 +628,8 @@ def test_write_skipexportglyphs(data_dir, tmp_path):
         str(tmp_path / "GlyphsUnitTestSans.glyphs"),
         "--master-dir",
         str(tmp_path / "master_ufos"),
+        "--instance-dir",
+        str(tmp_path / "instance_ufos"),
         "-o",
         "ufo",
     ]
@@ -711,3 +778,331 @@ def test_main_with_filter(data_dir, tmp_path):
     test_output_ttf = fontTools.ttLib.TTFont(tmp_path / "MyFont-Light.ttf")
     hmtx = test_output_ttf["hmtx"]
     assert hmtx["l"] == (160, 170)
+
+
+# TODO(anthrotype): Re-enable this test once upstream issue is fixed:
+# https://github.com/fonttools/ttfautohint-py/issues/11
+@pytest.mark.skipif(
+    platform.python_implementation() == "PyPy",
+    reason="ttfautohint-py doesn't work with pypy",
+)
+@pytest.mark.parametrize(
+    "autohint_options",
+    [
+        (),
+        ("-a",),
+        ("--autohint", "-D latn"),
+        ("-A",),
+        ("--no-autohint",),
+    ],
+)
+def test_autohinting(data_dir, tmp_path, autohint_options):
+    shutil.copytree(data_dir / "AutohintingTest", tmp_path / "sources")
+
+    fontmake.__main__.main(
+        [
+            "-g",
+            str(tmp_path / "sources" / "Padyakke.glyphs"),
+            "-o",
+            "ttf",
+            "-i",
+            "--output-dir",
+            str(tmp_path),
+            *autohint_options,
+        ]
+    )
+
+    assert {p.name for p in tmp_path.glob("*.*")} == {
+        "PadyakkeExpandedOne-Regular.ttf",
+    }
+
+    test_output_ttf = fontTools.ttLib.TTFont(
+        tmp_path / "PadyakkeExpandedOne-Regular.ttf"
+    )
+
+    if not {"-A", "--no-autohint"}.intersection(autohint_options):
+        assert "fpgm" in test_output_ttf  # hinted
+    else:
+        assert "fpgm" not in test_output_ttf  # unhinted
+
+
+def test_main_designspace_v5_builds_STAT(data_dir, tmp_path):
+    fontmake.__main__.main(
+        [
+            "--verbose",
+            "DEBUG",
+            "-m",
+            str(
+                data_dir
+                / "MutatorSansLite"
+                / "MutatorSans_v5_implicit_one_vf.designspace"
+            ),
+            "-o",
+            "variable",
+            "--output-dir",
+            str(tmp_path),
+        ]
+    )
+    test_output_ttf = fontTools.ttLib.TTFont(
+        tmp_path / "MutatorSans_v5_implicit_one_vf-VF.ttf"
+    )
+    stat = test_output_ttf["STAT"]
+    assert (
+        getXML(stat.toXML)
+        == dedent(
+            """\
+            <Version value="0x00010002"/>
+            <DesignAxisRecordSize value="8"/>
+            <!-- DesignAxisCount=2 -->
+            <DesignAxisRecord>
+              <Axis index="0">
+                <AxisTag value="wght"/>
+                <AxisNameID value="274"/>
+                <AxisOrdering value="0"/>
+              </Axis>
+              <Axis index="1">
+                <AxisTag value="wdth"/>
+                <AxisNameID value="276"/>
+                <AxisOrdering value="1"/>
+              </Axis>
+            </DesignAxisRecord>
+            <!-- AxisValueCount=8 -->
+            <AxisValueArray>
+              <AxisValue index="0" Format="4">
+                <!-- AxisCount=2 -->
+                <Flags value="0"/>
+                <ValueNameID value="280"/>
+                <AxisValueRecord index="0">
+                  <AxisIndex value="0"/>
+                  <Value value="610.2436"/>
+                </AxisValueRecord>
+                <AxisValueRecord index="1">
+                  <AxisIndex value="1"/>
+                  <Value value="158.9044"/>
+                </AxisValueRecord>
+              </AxisValue>
+              <AxisValue index="1" Format="4">
+                <!-- AxisCount=2 -->
+                <Flags value="0"/>
+                <ValueNameID value="281"/>
+                <AxisValueRecord index="0">
+                  <AxisIndex value="0"/>
+                  <Value value="642.2196"/>
+                </AxisValueRecord>
+                <AxisValueRecord index="1">
+                  <AxisIndex value="1"/>
+                  <Value value="159.1956"/>
+                </AxisValueRecord>
+              </AxisValue>
+              <AxisValue index="2" Format="2">
+                <AxisIndex value="0"/>
+                <Flags value="0"/>
+                <ValueNameID value="275"/>
+                <NominalValue value="300.0"/>
+                <RangeMinValue value="300.0"/>
+                <RangeMaxValue value="400.0"/>
+              </AxisValue>
+              <AxisValue index="3" Format="2">
+                <AxisIndex value="0"/>
+                <Flags value="0"/>
+                <ValueNameID value="266"/>
+                <NominalValue value="500.0"/>
+                <RangeMinValue value="400.0"/>
+                <RangeMaxValue value="600.0"/>
+              </AxisValue>
+              <AxisValue index="4" Format="2">
+                <AxisIndex value="0"/>
+                <Flags value="0"/>
+                <ValueNameID value="269"/>
+                <NominalValue value="700.0"/>
+                <RangeMinValue value="600.0"/>
+                <RangeMaxValue value="700.0"/>
+              </AxisValue>
+              <AxisValue index="5" Format="2">
+                <AxisIndex value="1"/>
+                <Flags value="0"/>
+                <ValueNameID value="277"/>
+                <NominalValue value="50.0"/>
+                <RangeMinValue value="50.0"/>
+                <RangeMaxValue value="75.0"/>
+              </AxisValue>
+              <AxisValue index="6" Format="2">
+                <AxisIndex value="1"/>
+                <Flags value="2"/>  <!-- ElidableAxisValueName -->
+                <ValueNameID value="278"/>
+                <NominalValue value="100.0"/>
+                <RangeMinValue value="75.0"/>
+                <RangeMaxValue value="125.0"/>
+              </AxisValue>
+              <AxisValue index="7" Format="2">
+                <AxisIndex value="1"/>
+                <Flags value="0"/>
+                <ValueNameID value="279"/>
+                <NominalValue value="200.0"/>
+                <RangeMinValue value="125.0"/>
+                <RangeMaxValue value="200.0"/>
+              </AxisValue>
+            </AxisValueArray>
+            <ElidedFallbackNameID value="273"/>"""
+        ).splitlines()
+    )
+
+
+def test_main_designspace_v5_builds_all_vfs(data_dir, tmp_path):
+    fontmake.__main__.main(
+        [
+            "-m",
+            str(
+                data_dir
+                / "MutatorSansLite"
+                / "MutatorFamily_v5_discrete_axis.designspace"
+            ),
+            "-o",
+            "variable",
+            "--output-dir",
+            str(tmp_path),
+        ]
+    )
+
+    assert (tmp_path / "MutatorSansVariable_Weight_Width.ttf").exists()
+    assert (tmp_path / "MutatorSansVariable_Weight.ttf").exists()
+    assert (tmp_path / "MutatorSansVariable_Width.ttf").exists()
+    assert (tmp_path / "MutatorSerifVariable_Width.ttf").exists()
+
+
+def test_main_designspace_v5_select_no_matching_fonts_shows_nice_message(
+    data_dir, tmp_path, caplog
+):
+    with caplog.at_level(logging.WARNING):
+        fontmake.__main__.main(
+            [
+                "-m",
+                str(
+                    data_dir
+                    / "MutatorSansLite"
+                    / "MutatorFamily_v5_discrete_axis.designspace"
+                ),
+                "--variable-fonts",
+                "NothingMatchesThisRegex",
+                "-o",
+                "variable",
+                "--output-dir",
+                str(tmp_path),
+            ]
+        )
+
+    assert "No variable fonts matching NothingMatchesThisRegex" in caplog.text
+
+    # Nothing gets built
+    assert not (tmp_path / "MutatorSansVariable_Weight_Width.ttf").exists()
+    assert not (tmp_path / "MutatorSansVariable_Weight.ttf").exists()
+    assert not (tmp_path / "MutatorSansVariable_Width.ttf").exists()
+    assert not (tmp_path / "MutatorSerifVariable_Width.ttf").exists()
+
+
+def test_main_designspace_v5_select_vfs_to_build(data_dir, tmp_path):
+    fontmake.__main__.main(
+        [
+            "-m",
+            str(
+                data_dir
+                / "MutatorSansLite"
+                / "MutatorFamily_v5_discrete_axis.designspace"
+            ),
+            "--variable-fonts",
+            "MutatorSansVariable_Weight.*",
+            "-o",
+            "variable",
+            "--output-dir",
+            str(tmp_path),
+        ]
+    )
+
+    assert (tmp_path / "MutatorSansVariable_Weight_Width.ttf").exists()
+    assert (tmp_path / "MutatorSansVariable_Weight.ttf").exists()
+    assert not (tmp_path / "MutatorSansVariable_Width.ttf").exists()
+    assert not (tmp_path / "MutatorSerifVariable_Width.ttf").exists()
+
+
+def test_main_designspace_v5_can_use_output_path_with_1_vf(data_dir, tmp_path):
+    fontmake.__main__.main(
+        [
+            "-m",
+            str(
+                data_dir / "MutatorSansLite" / "MutatorSans_v5_several_vfs.designspace"
+            ),
+            "-o",
+            "variable",
+            "--variable-fonts",
+            "MutatorSansVariable_Width",
+            "--output-path",
+            str(tmp_path / "MySingleVF.ttf"),
+        ]
+    )
+
+    assert (tmp_path / "MySingleVF.ttf").exists()
+
+
+def test_main_designspace_v5_dont_interpolate_discrete_axis(data_dir, tmp_path):
+    fontmake.__main__.main(
+        [
+            "-m",
+            str(
+                data_dir
+                / "MutatorSansLite"
+                / "MutatorSans_v5_several_vfs_discrete_axis.designspace"
+            ),
+            "-o",
+            "variable",
+            "--output-dir",
+            str(tmp_path),
+        ]
+    )
+    assert (tmp_path / "MutatorSansCondensedVariable_Weight.ttf").exists()
+    assert (tmp_path / "MutatorSansExtendedVariable_Weight.ttf").exists()
+
+
+def test_main_glyphspackage(data_dir, tmp_path):
+    fontmake.__main__.main(
+        [
+            "-g",
+            str(data_dir / "GlyphsUnitTestSans3.glyphspackage"),
+            "-o",
+            "ttf",
+            "--output-dir",
+            str(tmp_path),
+        ]
+    )
+    assert (tmp_path / "GlyphsUnitTestSans-Light.ttf").exists()
+    assert (tmp_path / "GlyphsUnitTestSans-Regular.ttf").exists()
+    assert (tmp_path / "GlyphsUnitTestSans-Bold.ttf").exists()
+
+
+def test_timing_logger(data_dir, tmp_path):
+    # check that --timing flag logs timing-related DEBUG messages even if the
+    # logging level (as set by --verbose flag) is higher
+    result = subprocess.run(
+        [
+            sys.executable,
+            "-m",
+            "fontmake",
+            "--timing",
+            "--verbose",
+            "CRITICAL",
+            "-m",
+            str(data_dir / "DesignspaceTest" / "DesignspaceTest.designspace"),
+            "-i",
+            "-o",
+            "ttf",
+            "--output-dir",
+            str(tmp_path),
+        ],
+        capture_output=True,
+        check=True,
+    )
+
+    assert re.search(
+        r"^DEBUG:fontmake.timer:Took [\.0-9]+s to run 'save_otfs'\r?$",
+        result.stderr.decode(),
+        flags=re.MULTILINE,
+    )
diff --git a/tox.ini b/tox.ini
index 1adf378..a71ad2c 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,5 +1,5 @@
 [tox]
-envlist = lint, py3{6,7,8,9}, pypy3, coverage-report
+envlist = lint, py3{7,8,9}, pypy3, coverage-report
 skip_missing_interpreters = true
 
 [testenv]
@@ -30,7 +30,7 @@ commands =
 
 [flake8]
 select = C, E, F, W, B, B9
-ignore = E203, E266, E501, W503
+ignore = E203, E266, E501, W503, B905
 max-line-length = 88
 exclude = .git, __pycache__, build, dist, .eggs, .tox, venv, venv*, .venv, .venv*
 

More details

Full run details

Historical runs