
    (ph                    $   S SK Jr  S SKJr  S SK Jr  S SKJr  S SKJr  S SK	J
r
  S SKJr  S SKJr  S S	KJr  S S
KJrJr  S SK7  S SK7  S SKJrJr  S SKJr  S SKJr  S SKrS SKrS SKrS SK r S SK!J"r"J#r#  S SK$J%r%  S SK&J'r'  Sr(S\(-   S-   r)\ RT                  " S5      r+SS jr,\'" \,\+5      \+l-        \" \ RT                  " S5      S9r.S r/S r0\" \Rb                  5      S 5       r2\" \Rb                  5      S 5       r3\" \Rb                  5      S 5       r4\" \Rb                  5      S 5       r5\" \Rl                  5      S  5       r2\" \Rl                  5      S! 5       r7\" \Rl                  5      SS" j5       r4\" \Rl                  5      S# 5       r5\" \Rp                  5      S$ 5       r9\" \Rp                  5      S% 5       r:\" \Rv                  5      S& 5       r9\" \Rv                  5      S' 5       r:\" \Rx                  5      S( 5       r9\" \Rx                  5      S) 5       r:\" \Rz                  5      S* 5       r9\" \Rz                  5      S+ 5       r:\" \R|                  5      S, 5       r9\" \R|                  5      S- 5       r:\" \R~                  5      S. 5       r@\" \R                  5      S/ 5       rB\" \R                  5      S0 5       r:\" \R                  5      S1 5       rD\" \R                  5      S2 5       r:\" \R                  5      S3 5       rD\" \R                  5      S4 5       r:\" \R                  5      S5 5       rB\" \R                  5      S6 5       rD\" \R                  5      S7 5       r:\" \R                  5      S8 5       rD\" \R                  5      S9 5       r:\" \R                  5      S: 5       rD\" \R                  5      S; 5       r:\" \R                  5      S< 5       rD\" \Rp                  \Rv                  \Rx                  \Rz                  \R|                  \R                  \R                  \R                  \R                  \R                  \R                  5      S= 5       rK\" \Rp                  \Rv                  \Rx                  \Rz                  \R|                  \R                  \R                  \R                  \R                  \R                  \R                  5      S> 5       rL\" \Rp                  \Rv                  \Rx                  \Rz                  \R|                  \R                  \R                  \R                  \R                  5	      S? 5       rD\" \Rp                  \Rx                  \R|                  5      S@ 5       rQ\" \Rv                  \Rz                  \R                  \R                  5      SA 5       rQ\" \R                  \R                  \R                  \R                  5      SB 5       rR\" \R                  \R                  5      SC 5       r9\" \R                  \R                  \R                  \R                  5      SD 5       r:\" \R                  \R                  \R                  \R                  5      SE 5       rK\" \R                  \R                  \R                  \R                  5      SF 5       rL\" \R                  5      SG 5       r9\" \R                  5      SH 5       rQ\" \R                  \R                  5      SI 5       r:\" \R                  \R                  5      SJ 5       rD\" \R                  \R                  5      SK 5       rK\" \R                  \R                  5      SL 5       rL\" \R                  5      SSM j5       r9\" \R                  5      SN 5       r:\" \R                  5      SO 5       rD\" \R                  5      SP 5       rK\" \R                  5      SQ 5       rL\" \R                  5      SR 5       rQ\" \R                  5      SS 5       r:\" \R                  5      ST 5       rD\" \R                  5      SU 5       rK\" \R                  5      SV 5       rW\" \R                  5      SW 5       rX\" \R                  5      SX 5       rK\" \R                  5      SY 5       rK\" \R                  5      SZ 5       rL\" \R                  5      S[ 5       r[\" \R                  5      S\ 5       rK\" \R                  5      S] 5       rK\" \R                  5      S^ 5       rL\" \R                  5      S_ 5       r[\" \R                  5      S` 5       r[\" \R                  \R                  5      Sa 5       r[\" \R                  \R                  5      Sb 5       r`\" \R                  5      SSc j5       r[\" \R                  5      Sd 5       r`\" \R                  5      Se 5       r[\" \R                  5      Sf 5       r`\" \R                  " Sg5      5      Sh 5       r:\" \R                  " Si5      5      Sj 5       r:\" \R                  " Sk5      5      Sl 5       r:\" \R                  " Sm5      5      Sn 5       r9\" \R                  " Sm5      \R                  " So5      5      Sp 5       r:\" \R                  " Sm5      \R                  " So5      5      Sq 5       rd\" \R                  " Sm5      \R                  " So5      5      Sr 5       rK\" \R                  " Sm5      \R                  " So5      5      Ss 5       rW\" \R                  " Sm5      \R                  " So5      5      SSt j5       re\" \R                  " Sm5      \R                  " So5      5      Su 5       rf\" \R                  " Sm5      \R                  " So5      5      Sv 5       rg\" \R                  " Sm5      \R                  " So5      5      Sw 5       rh\" \R                  " Sm5      \R                  " So5      5      Sx 5       ri\" \R                  " Sm5      \R                  " So5      5      Sy 5       rj\" \R                  " Sm5      \R                  " So5      5      Sz 5       rD\" \R                  " S{5      5      S| 5       r:S} rk\" \R                  " S{5      5      S~ 5       rD\" \R                  " S5      5      S 5       ri\" \R                  " S5      5      S 5       r:\" \R                  " S5      5      S 5       r:\" \R                  " S5      5      S 5       r:\" \R                  " S5      5      S 5       r:\" \R                  " S5      5      S 5       r:\" \R                  " S5      5      S 5       r9\" \R                  " S5      5      S 5       r:\" \R                  " S5      5      S 5       r:\" \R                  " S5      5      S 5       ri\" \R                  " S5      5      S 5       r:S rl\" \R                  " S5      5      S 5       r:\" \R                  " S5      5      S 5       r:\" \R                  " S5      5      S 5       r:\" \R                  " S5      5      S 5       r:\" \R                  " S5      5      S 5       ri\" \R                  " S5      5      S 5       r:\" \R                  " S5      5      S 5       r:S rm\" \R                  " S5      5      S 5       r9\" \R                  " S5      5      S 5       r:\" \R                  " S5      5      S 5       rD\" \R                  5      S 5       r9\" \R                  5      S 5       r9\" \R                  " S5      5      S 5       r:\" \R                  " S5      5      S 5       r9\" \R                  " S5      5      S 5       rD\" \R                  " S5      5      S 5       r9\" \R                  5      S 5       r:\" \R                  5      S 5       r:\" \R                  5      S 5       r:\" \R                  5      S 5       r:\" \R                  5      S 5       r:\" \R                  " S5      5      S 5       r:\" \R                  " S5      R                  5      S 5       rv\" \R                  " S5      5      S 5       r9\" \R                  " S5      5      S 5       ri\" \R                  " S5      5      S 5       r:\" \R                  " S5      5      S 5       rD\" \R                  " S5      5      S 5       r9\" \R                  " S5      5      S 5       ri\" \R                  " S5      5      S 5       r:\" \R                  " S5      5      S 5       ri\" \R                  " S5      5      S 5       ri\" \R                  " S5      5      S 5       rD\" \R                  " S5      5      S 5       rD " S S\w5      rx " S S\w5      ry\." S5      SS j5       rz\." S5      S 5       r{S r|S r}S r~S r\." S5      SS j5       r/ SQrg)    )config)otRound)ttLib)otTables)USE_HARFBUZZ_REPACKER)
maxCtxFont)NullPen)Timer)makeOutputFileName)_add_method
_uniq_sort)*)varStoremultiVarStore)NameRecordVisitor)mirroredN)Counterdefaultdict)reduce)
MethodTypez3pyftsubset font-file [glyph...] [--option=value]...a  pyftsubset -- OpenType font subsetter and optimizer

pyftsubset is an OpenType font subsetter and optimizer, based on fontTools.
It accepts any TT- or CFF-flavored OpenType (.otf or .ttf) or WOFF (.woff)
font file. The subsetted glyph set is based on the specified glyphs
or characters, and specified OpenType layout features.

The tool also performs some size-reducing optimizations, aimed for using
subset fonts as webfonts.  Individual optimizations can be enabled or
disabled, and are enabled by default when they are safe.

Usage: a9  

At least one glyph or one of --gids, --gids-file, --glyphs, --glyphs-file,
--text, --text-file, --unicodes, or --unicodes-file, must be specified.

Args:

font-file
  The input font file.
glyph
  Specify one or more glyph identifiers to include in the subset. Must be
  PS glyph names, or the special string '*' to keep the entire glyph set.

Initial glyph set specification
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

These options populate the initial glyph set. Same option can appear
multiple times, and the results are accummulated.

--gids=<NNN>[,<NNN>...]
  Specify comma/whitespace-separated list of glyph IDs or ranges as decimal
  numbers.  For example, --gids=10-12,14 adds glyphs with numbers 10, 11,
  12, and 14.

--gids-file=<path>
  Like --gids but reads from a file. Anything after a '#' on any line is
  ignored as comments.

--glyphs=<glyphname>[,<glyphname>...]
  Specify comma/whitespace-separated PS glyph names to add to the subset.
  Note that only PS glyph names are accepted, not gidNNN, U+XXXX, etc
  that are accepted on the command line.  The special string '*' will keep
  the entire glyph set.

--glyphs-file=<path>
  Like --glyphs but reads from a file. Anything after a '#' on any line
  is ignored as comments.

--text=<text>
  Specify characters to include in the subset, as UTF-8 string.

--text-file=<path>
  Like --text but reads from a file. Newline character are not added to
  the subset.

--unicodes=<XXXX>[,<XXXX>...]
  Specify comma/whitespace-separated list of Unicode codepoints or
  ranges as hex numbers, optionally prefixed with 'U+', 'u', etc.
  For example, --unicodes=41-5a,61-7a adds ASCII letters, so does
  the more verbose --unicodes=U+0041-005A,U+0061-007A.
  The special strings '*' will choose all Unicode characters mapped
  by the font.

--unicodes-file=<path>
  Like --unicodes, but reads from a file. Anything after a '#' on any
  line in the file is ignored as comments.

--ignore-missing-glyphs
  Do not fail if some requested glyphs or gids are not available in
  the font.

--no-ignore-missing-glyphs
  Stop and fail if some requested glyphs or gids are not available
  in the font. [default]

--ignore-missing-unicodes [default]
  Do not fail if some requested Unicode characters (including those
  indirectly specified using --text or --text-file) are not available
  in the font.

--no-ignore-missing-unicodes
  Stop and fail if some requested Unicode characters are not available
  in the font.
  Note the default discrepancy between ignoring missing glyphs versus
  unicodes.  This is for historical reasons and in the future
  --no-ignore-missing-unicodes might become default.

Other options
^^^^^^^^^^^^^

For the other options listed below, to see the current value of the option,
pass a value of '?' to it, with or without a '='. In some environments,
you might need to escape the question mark, like this: '--glyph-names\?'.

Examples::

    $ pyftsubset --glyph-names?
    Current setting for 'glyph-names' is: False
    $ pyftsubset --name-IDs=?
    Current setting for 'name-IDs' is: [0, 1, 2, 3, 4, 5, 6]
    $ pyftsubset --hinting? --no-hinting --hinting?
    Current setting for 'hinting' is: True
    Current setting for 'hinting' is: False

Output options
^^^^^^^^^^^^^^

--output-file=<path>
  The output font file. If not specified, the subsetted font
  will be saved in as font-file.subset.

--flavor=<type>
  Specify flavor of output font file. May be 'woff' or 'woff2'.
  Note that WOFF2 requires the Brotli Python extension, available
  at https://github.com/google/brotli

--with-zopfli
  Use the Google Zopfli algorithm to compress WOFF. The output is 3-8 %
  smaller than pure zlib, but the compression speed is much slower.
  The Zopfli Python bindings are available at:
  https://pypi.python.org/pypi/zopfli

--harfbuzz-repacker
  By default, we serialize GPOS/GSUB using the HarfBuzz Repacker when
  uharfbuzz can be imported and is successful, otherwise fall back to
  the pure-python serializer. Set the option to force using the HarfBuzz
  Repacker (raises an error if uharfbuzz can't be found or fails).

--no-harfbuzz-repacker
  Always use the pure-python serializer even if uharfbuzz is available.

Glyph set expansion
^^^^^^^^^^^^^^^^^^^

These options control how additional glyphs are added to the subset.

--retain-gids
  Retain glyph indices; just empty glyphs not needed in-place.

--notdef-glyph
  Add the '.notdef' glyph to the subset (ie, keep it). [default]

--no-notdef-glyph
  Drop the '.notdef' glyph unless specified in the glyph set. This
  saves a few bytes, but is not possible for Postscript-flavored
  fonts, as those require '.notdef'. For TrueType-flavored fonts,
  this works fine as long as no unsupported glyphs are requested
  from the font.

--notdef-outline
  Keep the outline of '.notdef' glyph. The '.notdef' glyph outline is
  used when glyphs not supported by the font are to be shown. It is not
  needed otherwise.

--no-notdef-outline
  When including a '.notdef' glyph, remove its outline. This saves
  a few bytes. [default]

--recommended-glyphs
  Add glyphs 0, 1, 2, and 3 to the subset, as recommended for
  TrueType-flavored fonts: '.notdef', 'NULL' or '.null', 'CR', 'space'.
  Some legacy software might require this, but no modern system does.

--no-recommended-glyphs
  Do not add glyphs 0, 1, 2, and 3 to the subset, unless specified in
  glyph set. [default]

--no-layout-closure
  Do not expand glyph set to add glyphs produced by OpenType layout
  features.  Instead, OpenType layout features will be subset to only
  rules that are relevant to the otherwise-specified glyph set.

--layout-features[+|-]=<feature>[,<feature>...]
  Specify (=), add to (+=) or exclude from (-=) the comma-separated
  set of OpenType layout feature tags that will be preserved.
  Glyph variants used by the preserved features are added to the
  specified subset glyph set. By default, 'calt', 'ccmp', 'clig', 'curs',
  'dnom', 'frac', 'kern', 'liga', 'locl', 'mark', 'mkmk', 'numr', 'rclt',
  'rlig', 'rvrn', and all features required for script shaping are
  preserved. To see the full list, try '--layout-features=?'.
  Use '*' to keep all features.
  Multiple --layout-features options can be provided if necessary.
  Examples:

    --layout-features+=onum,pnum,ss01
        * Keep the default set of features and 'onum', 'pnum', 'ss01'.
    --layout-features-='mark','mkmk'
        * Keep the default set of features but drop 'mark' and 'mkmk'.
    --layout-features='kern'
        * Only keep the 'kern' feature, drop all others.
    --layout-features=''
        * Drop all features.
    --layout-features='*'
        * Keep all features.
    --layout-features+=aalt --layout-features-=vrt2
        * Keep default set of features plus 'aalt', but drop 'vrt2'.

--layout-scripts[+|-]=<script>[,<script>...]
  Specify (=), add to (+=) or exclude from (-=) the comma-separated
  set of OpenType layout script tags that will be preserved. LangSys tags
  can be appended to script tag, separated by '.', for example:
  'arab.dflt,arab.URD,latn.TRK'. By default all scripts are retained ('*').

Hinting options
^^^^^^^^^^^^^^^

--hinting
  Keep hinting [default]

--no-hinting
  Drop glyph-specific hinting and font-wide hinting tables, as well
  as remove hinting-related bits and pieces from other tables (eg. GPOS).
  See --hinting-tables for list of tables that are dropped by default.
  Instructions and hints are stripped from 'glyf' and 'CFF ' tables
  respectively. This produces (sometimes up to 30%) smaller fonts that
  are suitable for extremely high-resolution systems, like high-end
  mobile devices and retina displays.

Optimization options
^^^^^^^^^^^^^^^^^^^^

--desubroutinize
  Remove CFF use of subroutinizes.  Subroutinization is a way to make CFF
  fonts smaller.  For small subsets however, desubroutinizing might make
  the font smaller.  It has even been reported that desubroutinized CFF
  fonts compress better (produce smaller output) WOFF and WOFF2 fonts.
  Also see note under --no-hinting.

--no-desubroutinize [default]
  Leave CFF subroutinizes as is, only throw away unused subroutinizes.

Font table options
^^^^^^^^^^^^^^^^^^

--drop-tables[+|-]=<table>[,<table>...]
  Specify (=), add to (+=) or exclude from (-=) the comma-separated
  set of tables that will be be dropped.
  By default, the following tables are dropped:
  'BASE', 'JSTF', 'DSIG', 'EBDT', 'EBLC', 'EBSC', 'PCLT', 'LTSH'
  and Graphite tables: 'Feat', 'Glat', 'Gloc', 'Silf', 'Sill'.
  The tool will attempt to subset the remaining tables.

  Examples:

  --drop-tables-=BASE
      * Drop the default set of tables but keep 'BASE'.

  --drop-tables+=GSUB
      * Drop the default set of tables and 'GSUB'.

  --drop-tables=DSIG
      * Only drop the 'DSIG' table, keep all others.

  --drop-tables=
      * Keep all tables.

--no-subset-tables+=<table>[,<table>...]
  Add to the set of tables that will not be subsetted.
  By default, the following tables are included in this list, as
  they do not need subsetting (ignore the fact that 'loca' is listed
  here): 'gasp', 'head', 'hhea', 'maxp', 'vhea', 'OS/2', 'loca', 'name',
  'cvt ', 'fpgm', 'prep', 'VMDX', 'DSIG', 'CPAL', 'MVAR', 'cvar', 'STAT'.
  By default, tables that the tool does not know how to subset and are not
  specified here will be dropped from the font, unless --passthrough-tables
  option is passed.

  Example:

   --no-subset-tables+=FFTM
      * Keep 'FFTM' table in the font by preventing subsetting.

--passthrough-tables
  Do not drop tables that the tool does not know how to subset.

--no-passthrough-tables
  Tables that the tool does not know how to subset and are not specified
  in --no-subset-tables will be dropped from the font. [default]

--hinting-tables[-]=<table>[,<table>...]
  Specify (=), add to (+=) or exclude from (-=) the list of font-wide
  hinting tables that will be dropped if --no-hinting is specified.

  Examples:

  --hinting-tables-=VDMX
      * Drop font-wide hinting tables except 'VDMX'.
  --hinting-tables=
      * Keep all font-wide hinting tables (but strip hints from glyphs).

--legacy-kern
  Keep TrueType 'kern' table even when OpenType 'GPOS' is available.

--no-legacy-kern
  Drop TrueType 'kern' table if OpenType 'GPOS' is available. [default]

Font naming options
^^^^^^^^^^^^^^^^^^^

These options control what is retained in the 'name' table. For numerical
codes, see: http://www.microsoft.com/typography/otspec/name.htm

--name-IDs[+|-]=<nameID>[,<nameID>...]
  Specify (=), add to (+=) or exclude from (-=) the set of 'name' table
  entry nameIDs that will be preserved. By default, only nameIDs between 0
  and 6 are preserved, the rest are dropped. Use '*' to keep all entries.

  Examples:

  --name-IDs+=7,8,9
      * Also keep Trademark, Manufacturer and Designer name entries.
  --name-IDs=
      * Drop all 'name' table entries.
  --name-IDs=*
      * keep all 'name' table entries

--name-legacy
  Keep legacy (non-Unicode) 'name' table entries (0.x, 1.x etc.).
  XXX Note: This might be needed for some fonts that have no Unicode name
  entires for English. See: https://github.com/fonttools/fonttools/issues/146

--no-name-legacy
  Drop legacy (non-Unicode) 'name' table entries [default]

--name-languages[+|-]=<langID>[,<langID>]
  Specify (=), add to (+=) or exclude from (-=) the set of 'name' table
  langIDs that will be preserved. By default only records with langID
  0x0409 (English) are preserved. Use '*' to keep all langIDs.

--obfuscate-names
  Make the font unusable as a system font by replacing name IDs 1, 2, 3, 4,
  and 6 with dummy strings (it is still fully functional as webfont).

Glyph naming and encoding options
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

--glyph-names
  Keep PS glyph names in TT-flavored fonts. In general glyph names are
  not needed for correct use of the font. However, some PDF generators
  and PDF viewers might rely on glyph names to extract Unicode text
  from PDF documents.
--no-glyph-names
  Drop PS glyph names in TT-flavored fonts, by using 'post' table
  version 3.0. [default]
--legacy-cmap
  Keep the legacy 'cmap' subtables (0.x, 1.x, 4.x etc.).
--no-legacy-cmap
  Drop the legacy 'cmap' subtables. [default]
--symbol-cmap
  Keep the 3.0 symbol 'cmap'.
--no-symbol-cmap
  Drop the 3.0 symbol 'cmap'. [default]

Other font-specific options
^^^^^^^^^^^^^^^^^^^^^^^^^^^

--recalc-bounds
    Recalculate font bounding boxes.
--no-recalc-bounds
    Keep original font bounding boxes. This is faster and still safe
    for all practical purposes. [default]
--recalc-timestamp
    Set font 'modified' timestamp to current time.
--no-recalc-timestamp
    Do not modify font 'modified' timestamp. [default]
--canonical-order
    Order tables as recommended in the OpenType standard. This is not
    required by the standard, nor by any known implementation.
--no-canonical-order
    Keep original order of font tables. This is faster. [default]
--prune-unicode-ranges
    Update the 'OS/2 ulUnicodeRange*' bits after subsetting. The Unicode
    ranges defined in the OpenType specification v1.7 are intersected with
    the Unicode codepoints specified in the font's Unicode 'cmap' subtables:
    when no overlap is found, the bit will be switched off. However, it will
    *not* be switched on if an intersection is found.  [default]
--no-prune-unicode-ranges
    Don't change the 'OS/2 ulUnicodeRange*' bits.
--prune-codepage-ranges
    Update the 'OS/2 ulCodePageRange*' bits after subsetting.  [default]
--no-prune-codepage-ranges
    Don't change the 'OS/2 ulCodePageRange*' bits.
--recalc-average-width
    Update the 'OS/2 xAvgCharWidth' field after subsetting.
--no-recalc-average-width
    Don't change the 'OS/2 xAvgCharWidth' field. [default]
--recalc-max-context
    Update the 'OS/2 usMaxContext' field after subsetting.
--no-recalc-max-context
    Don't change the 'OS/2 usMaxContext' field. [default]
--font-number=<number>
    Select font number for TrueType Collection (.ttc/.otc), starting from 0.
--pretty-svg
    When subsetting SVG table, use lxml pretty_print=True option to indent
    the XML output (only recommended for debugging purposes).

Application options
^^^^^^^^^^^^^^^^^^^

--verbose
    Display verbose information of the subsetting process.
--timing
    Display detailed timing information of the subsetting process.
--xml
    Display the TTX XML representation of subsetted font.

Example
^^^^^^^

Produce a subset containing the characters ' !"#$%' without performing
size-reducing optimizations::

  $ pyftsubset font.ttf --unicodes="U+0020-0025" \
    --layout-features=* --glyph-names --symbol-cmap --legacy-cmap \
    --notdef-glyph --notdef-outline --recommended-glyphs \
    --name-IDs=* --name-legacy --name-languages=*
zfontTools.subsetc                    ^ U R                  S[        U5      5        U(       a6  UR                  5       mU R                  S[        U4S jU 5       5      5        g g )NzGlyph names: %szGlyph IDs:   %sc              3   .   >#    U  H
  nTU   v   M     g 7fN ).0greverseGlyphMaps     L/var/www/html/venv/lib/python3.13/site-packages/fontTools/subset/__init__.py	<genexpr>_log_glyphs.<locals>.<genexpr>  s     +O1OA,>   )infosortedgetReverseGlyphMap)selfglyphsfontr   s      @r   _log_glyphsr(     sF    II0113		#V+O+O%OP     zfontTools.subset.timer)loggerc                 6    U Vs0 s H  o"X   _M	     sn$ s  snf r   r   )dr&   r   s      r   _dict_subsetr-     s    #$VqtGV$$$s   c                 Z    [        U 5      nU Vs/ s H  o3U:  d  M
  X   PM     sn$ s  snf r   len)lindicescountis       r   _list_subsetr5     s+    FE!/'QYDAD'///s   	((c                 p    [        U R                  5       VVs/ s H  u  p#X1;   d  M  UPM     snn$ s  snnf )z3Returns ascending list of matching coverage values.)	enumerater&   )r%   r&   r4   r   s       r   	intersectr8     s-     $DKK0@0$!AKA0@@@s   22c                 B   ^ [        U4S jU R                   5       5      $ )z#Returns set of intersecting glyphs.c              3   6   >#    U  H  oT;   d  M
  Uv   M     g 7fr   r   )r   r   r&   s     r   r   #intersect_glyphs.<locals>.<genexpr>  s     5+Qfqq+s   		)setr&   )r%   r&   s    `r   intersect_glyphsr=     s     5$++555r)   c                     U R                  U5      nU R                   Vs/ s H  o3U;   d  M
  UPM     snU l        U$ s  snf )z4Returns ascending list of remaining coverage values.r8   r&   )r%   r&   r2   r   s       r   subsetr@     s:     nnV$G"kk9k&[1k9DKN :s   	==c                 V    U Vs/ s H  o R                   U   PM     snU l         gs  snf )zRemaps coverage.Nr&   )r%   coverage_mapr4   s      r   remaprD     s#     ,88<a;;q><8DK8s   &c           	         ^  [        [        U 4S jU 5       5      (       a  S/O/ T R                  R                  5        VVs/ s H  u  p#X!;   d  M  UPM     snn-   5      $ s  snnf )z0Returns ascending list of matching class values.c              3   @   >#    U  H  oTR                   ;  v   M     g 7fr   	classDefsr   r   r%   s     r   r   intersect.<locals>.<genexpr>  s     <VT^^+V   r   )r   anyrH   items)r%   r&   r   vs   `   r   r8   r8     sY     <V<<<!"--/
?/1;1/
?	@ 
?s   A!A!c                    ^ ^^ TS:X  a  [        U 4S jT 5       5      $ [        UU4S jT R                  R                  5        5       5      $ )z%Returns set of glyphs matching class.r   c              3   J   >#    U  H  oTR                   ;  d  M  Uv   M     g 7fr   rG   rI   s     r   r   "intersect_class.<locals>.<genexpr>  s     @f(?11fs   #	#c              3   L   >#    U  H  u  pUT:X  d  M  UT;   d  M  Uv   M     g 7fr   r   )r   r   rN   r&   klasss      r   r   rQ   	  s%     R3TQqEzqa6kqq3s   $$	$)r<   rH   rM   )r%   r&   rS   s   ```r   intersect_classrT     s;     z@f@@@RT^^113RRRr)   c                 `  ^  T R                   R                  5        VVs0 s H  u  pEXA;   d  M  XE_M     snnT l         [        U(       a  [        U 4S jU 5       5      (       a  S/O/ [	        T R                   R                  5       5      -   5      nU(       a  T R                  U5        U$ s  snnf )z,Returns ascending list of remaining classes.c              3   @   >#    U  H  oTR                   ;  v   M     g 7fr   rG   rI   s     r   r   subset.<locals>.<genexpr>  s     &O1'>rK   r   )rH   rM   r   rL   listvaluesrD   )r%   r&   rD   	useClass0r   rN   r2   s   `      r   r@   r@     s     (,~~';';'=M'=tqdad'=MDN  3&O&O#O#O C
t~~$$&
'	(G 

7N Ns
   B*B*c                     U R                   R                  5        VVs0 s H  u  p#X!R                  U5      _M     snnU l         gs  snnf )zRemaps classes.N)rH   rM   index)r%   	class_mapr   rN   s       r   rD   rD      s:     9=8L8L8NO8Na++8NODNOs   Ac                    ^ UR                   R                  U4S jU R                  R                  5        5       5        g )Nc              3   <   >#    U  H  u  pUT;   d  M  Uv   M     g 7fr   r   )r   r   rN   
cur_glyphss      r   r   !closure_glyphs.<locals>.<genexpr>(  s     J"6$!!z/AA"6   	)r&   updatemappingrM   r%   sr`   s     `r   closure_glyphsrg   &  s&    HHOOJ$,,"4"4"6JJr)   c                     U R                   R                  5        VVs0 s H)  u  p#X!R                  ;   d  M  X1R                  ;   d  M'  X#_M+     snnU l         [        U R                   5      $ s  snnf r   )rd   rM   r&   boolr%   rf   r   rN   s       r   subset_glyphsrk   +  s[     ++--hh1=-DL s   A,A,A,c                     U R                   R                  5        H'  u  p4X2;   d  M  UR                  R                  U5        M)     g r   )rd   rM   r&   rc   )r%   rf   r`   glyphsubsts        r   rg   rg   3  s1    **,HHOOE" -r)   c                    ^ U R                   R                  5        VVs0 s H5  u  p#UTR                  ;   d  M  [        U4S jU 5       5      (       d  M3  X#_M7     snnU l         [	        U R                   5      $ s  snnf )Nc              3   @   >#    U  H  oTR                   ;   v   M     g 7fr   rB   )r   subrf   s     r   r    subset_glyphs.<locals>.<genexpr>?  s      >ASArK   )rd   rM   r&   allri   rj   s    `  r   rk   rk   :  sk     LL&&((DA= 	  >A >> 	(DL
 s   A9A9A9c                 |   ^ UR                   R                  " U4S jU R                  R                  5        5       6   g )Nc              3   <   >#    U  H  u  pUT;   d  M  Uv   M     g 7fr   r   )r   r   vlistr`   s      r   r   ra   F  s     W,CqJee,Crb   )r&   rc   
alternatesrM   re   s     `r   rg   rg   D  s&    HHOOWDOO,A,A,CWXr)   c                 R  ^ U R                   R                  5        VVVs0 s HW  u  p#UTR                  ;   d  M  [        U4S jU 5       5      (       d  M3  X# Vs/ s H  oDTR                  ;   d  M  UPM     sn_MY     snnnU l         [	        U R                   5      $ s  snf s  snnnf )Nc              3   @   >#    U  H  oTR                   ;   v   M     g 7fr   rB   )r   rN   rf   s     r   r   rr   N  s      >1ahhrK   )rw   rM   r&   rL   ri   )r%   rf   r   rv   rN   s    `   r   rk   rk   I  s     --//HA= 	/  > >> 	/u.u!QXXAu../DO
   	 /s(   B"B"B"B1B7B"B"c                    ^^ TR                   R                  " UU4S jU R                  R                  5        5       6   g )Nc              3      >#    U  HR  u  pUT;   d  M  U Vs/ s H5  n[        U4S  jUR                   5       5      (       d  M)  UR                  PM7     snv   MT     gs  snf 7f)c              3   @   >#    U  H  oTR                   ;   v   M     g 7fr   rB   r   crf   s     r   r   +closure_glyphs.<locals>.<genexpr>.<genexpr>W  s     0V1ahhrK   N)rs   	ComponentLigGlyph)r   r   seqsseqr`   rf   s       r   r   ra   V  sP      

1J XTWTcS0V0V-V\S\\TW1 Xs   A"A"(AAA")r&   rc   	ligaturesrM   re   s    ``r   rg   rg   S  s-    HHOO

>>//1

r)   c                 x  ^ U R                   R                  5        VVs0 s H  u  p#UTR                  ;   d  M  X#_M     snnU l         U R                   R                  5        VVVs0 s H[  u  p$UU Vs/ s HG  nUR                  TR                  ;   d  M  [	        U4S jUR
                   5       5      (       d  ME  UPMI     sn_M]     snnnU l         U R                   R                  5        VVs0 s H  u  p#U(       d  M  X#_M     snnU l         [        U R                   5      $ s  snnf s  snf s  snnnf s  snnf )Nc              3   @   >#    U  H  oTR                   ;   v   M     g 7fr   rB   r}   s     r   r   rr   e  s     /U}!QXX}rK   )r   rM   r&   r   rs   r   ri   )r%   rf   r   rN   r   r   s    `    r   rk   rk   ^  s   '+~~';';'=O'=tqahhdad'=ODN ~~++- .GA 	

||qxx' ,//Us}}/U,U 
 	

 .DN (,~~';';'=C'=tqdad'=CDN P
 Ds:   D$D$&D/3D*"D*;D*D//D6 D6*D/c                 B  ^ ^ T R                   S:X  az  T R                  R                  U5      nU(       a1  [        U4S jT R                  T R
                  -    5       5      (       d  g TR                  R                  U 4S jU 5       5        g  ST R                   -  5       e)N   c              3   Z   >#    U  H   nUR                  TR                  5      v   M"     g 7fr   r?   r}   s     r   r   ra   q  s(      "
D KK!!D   (+c              3   B   >#    U  H  nTR                   U   v   M     g 7fr   )
Substituter   r4   r%   s     r   r   ra   v  s     <Gq*Gs   unknown format: %s)FormatCoverager8   rs   LookAheadCoverageBacktrackCoverager&   rc   )r%   rf   r`   r2   s   ``  r   rg   rg   m  s    {{a--))*5c "
++d.D.DD"
 
 
 	<G<<4&44qr)   c                   ^ U R                   S:X  Ga  U R                  R                  TR                  5      n[	        U R
                  U5      U l        [        U R
                  5       VVs/ s H  u  p4UTR                  ;   d  M  UPM     nnn[	        U R
                  U5      U l        U R                  R                  U5        [        U R
                  5      U l	        [        U R                  =(       a,    [        U4S jU R                  U R                  -    5       5      5      $  SU R                   -  5       es  snnf )Nr   c              3   Z   >#    U  H   nUR                  TR                  5      v   M"     g 7fr   r@   r&   r}   s     r   r   rr     s(      HA ""Hr   r   )r   r   r@   r&   r5   r   r7   rD   r0   
GlyphCountri   rs   r   r   )r%   rf   r2   r4   rq   s    `   r   rk   rk   {  s    {{a--&&qxx0&t@#,T__#=Q#=1#=Q&t@G$doo.OO  //$2H2HH 
 	
 	5&44q Rs   +D:D:c                      U R                   S;   $ )Nr         )DeltaFormatr%   s    r   
is_hintingr     s    y((r)   c                 |    S H6  n[        XS 5      nUc  M  UR                  5       (       d  M+  [        X5        M8     g )N)
XPlaDevice
YPlaDevice
XAdvDevice
YAdvDevice)getattrr   delattrr%   namerN   s      r   prune_hintsr     s0    HD%=Q\\^^D Ir)   c                    U R                   S:X  a.  [        U R                  R                  UR                  5      5      $ U R                   S:X  a  U R                  R                  UR                  5      nU R
                  n[        U5      nU Vs/ s H  oUU:  d  M
  X5   PM     snU l        [        U R
                  5      U l        [        U R                  5      $  SU R                   -  5       es  snf )Nr   r   r   )r   r0   r   r@   r&   Value
ValueCountri   )r%   rf   r2   rY   r3   r4   s         r   rk   rk     s    {{a4==''122		--&&qxx0F)0>AIifi>
djj/DOO$$4&44q	 ?s   	C/C/c                 p  ^  T R                   c  T R                  S:X  d   egT R                  S:X  aK  UR                  (       d  T R                   R	                  5         T R                   R                  5       T l        OT R                  S:X  a  S T R                   ;   a6  T R                  S:X  d   e[        S T R                    5       5      (       d   eO|UR                  (       d#  T R                    H  nUR	                  5         M     [        [        R                  T R                    Vs/ s H  o3R                  5       PM     snS5      T l        T R                  S:X  aS  [        U 4S jT R                    5       5      (       a/  ST l        T R                  S:w  a  T R                   S   OS T l         T ?
gs  snf )Nr   Tr   r   c              3   (   #    U  H  oS L v   M
     g 7fr   r   r   rN   s     r   r   $prune_post_subset.<locals>.<genexpr>  s     5*QDy*s   c              3   F   >#    U  H  oTR                   S    :H  v   M     g7fr   N)r   )r   rN   r%   s     r   r   r     s     GJqTZZ] 2Js   !)r   ValueFormatr   hintingr   getEffectiveFormatrs   r   int__or__r   )r%   r'   optionsrN   s   `   r   prune_post_subsetr     sJ   zz1$$$ {{aJJ""$::88:		4::##q(((5$**55555??AMMO $%

TZZHZ113ZH! D
 {{aCGDJJGGG&*&6&6!&;TZZ]
O Is   )F3
c                    U R                   S:X  Gah  U R                  R                  UR                  5      nU R                  n[        U5      nU Vs/ s H  oUU:  d  M
  X5   PM     snU l        U R                   HZ  nUR                   Vs/ s H   owR                  UR                  ;   d  M  UPM"     snUl        [        UR                  5      Ul        M\     [        U R                  5       VVs/ s H  u  pVUR                  (       d  M  UPM     nnnU R                  R                  U5        [        U R                  U5      U l        [        U R                  5      U l        [        U R                  5      $ U R                   S:X  Ga  U R                  R                  UR                  R                  U R                  R                  5      SS9 Vs/ s H  nXR                   :  d  M  UPM     n	nU R"                  R                  UR                  SSS9 Vs/ s H  nXR$                  :  d  M  UPM     n
nU	 Vs/ s H  oPR&                  U   PM     snU l        U R&                   H'  nU
 Vs/ s H  oXR(                  U   PM     snUl        M)     [        U	5      U l        [        U
5      U l        [        U R                   =(       a;    U R$                  S:  =(       a%    U R                  R                  UR                  5      5      $  SU R                   -  5       es  snf s  snf s  snnf s  snf s  snf s  snf s  snf )Nr   r   TrD   F)rD   rZ   r   )r   r   r@   r&   PairSetr0   PairValueRecordSecondGlyphPairValueCountr7   rD   r5   PairSetCountri   	ClassDef1intersectionClass1Count	ClassDef2Class2CountClass1RecordClass2Record)r%   rf   r2   pairsr3   r4   prr~   
class1_map
class2_maps              r   rk   rk     s   {{a--&&qxx0E
*1?'QY'?A,,!,a0I,!A  #1#4#45A	  "+4<<!8M!8A<L<L1!8MG$#DLL':-D%%&&		 ^^**%%dmm&:&:;4 + 
 ###	  	 
 ^^**18845*Q
Q### Q 	 

 <FF:a..q1:F""A9CDAnnQ/DAN #z?z? /!!A%/$$QXX.
 	
 	5&44qK @!
 N


 GDsH   	LLL$-L$1L)L)L/+L/L41L4=L90L>c                 X   UR                   (       d  SSS.U R                     u  p4S=U l        U l        [	        X5       H  n[	        XT5       H  nUR
                  (       aG  UR
                  R                  5         U =R                  UR
                  R                  5       -  sl        UR                  (       d  Mn  UR                  R                  5         U =R                  UR                  R                  5       -  sl        M     M     [        U R                  U R                  -  5      $ )N)r   r   )r   r   r   r   r   )
r   r   ValueFormat1ValueFormat2r   Value1r   r   Value2ri   )r%   r'   r   attr1attr2rowr   s          r   r   r     s    ??-/
 ++
 121D-4'CS(88HH((*%%)D)D)FF%888HH((*%%)D)D)FF% ) ( !!D$5$5566r)   c                 l   U R                   S:X  a  U R                  R                  UR                  5      nU R                  n[        U5      nU Vs/ s H  oUU:  d  M
  X5   PM     snU l        [        U R                  5      U l        [        U R                  5      $  SU R                   -  5       es  snf Nr   r   )r   r   r@   r&   EntryExitRecordr0   EntryExitCountri   )r%   rf   r2   recordsr3   r4   s         r   rk   rk     s    {{a--&&qxx0&&G4;IGq5y

GI!$"6"67D''((4&44q	  Js   	B1B1c                    U R                   S:X  a  SU l         g U R                   S:X  aa  S H7  n[        XS 5      nUc  M  UR                  5       (       d  M+  [        XS 5        M9     U R                  c  U R
                  c  SU l         g g g g )Nr   r   r   )XDeviceTableYDeviceTable)r   r   r   setattrr   r   r   s      r   r   r     s~    {{a		4DD)A}D) 5 $):):)BDK *C$ 
r)   c                     UR                   (       dk  U R                   H[  nUR                  (       a  UR                  R                  5         UR                  (       d  MA  UR                  R                  5         M]     gNT)r   r   EntryAnchorr   
ExitAnchor)r%   r'   r   recs       r   r   r   )  sN    ??''C++-~~~**,	 (
 r)   c                 H   U R                   S:X  Ga  U R                  R                  UR                  5      n[	        U R
                  R                  U5      U R
                  l        [        U R
                  R                  5      U R
                  l        U R                  R                  UR                  5      n[	        U R                  R                  U5      U R                  l        [        U R                  R                  5      U R                  l        [        S U R
                  R                   5       5      n[        U5      U l        U R
                  R                   H#  nUR                  UR                   5      Ul        M%     U R                  R                   H  n[	        UR"                  U5      Ul        M      [%        U R                  =(       a3    U R
                  R                  =(       a    U R                  R                  5      $  SU R                   -  5       e)Nr   c              3   8   #    U  H  oR                   v   M     g 7fr   Classr   s     r   r   rr   B       "N4Mq774M   r   )r   MarkCoverager@   r&   r5   	MarkArray
MarkRecordr0   	MarkCountBaseCoverage	BaseArray
BaseRecord	BaseCountr   
ClassCountr\   r   
BaseAnchorri   )r%   rf   mark_indicesbase_indicesclass_indicesmbs          r   rk   rk   4  sz   {{a((//9$0NN%%|%
! $'t~~'@'@#A ((//9$0NN%%|%
! $'t~~'@'@#A ""NDNN4M4M"NNm,**A#))!''2AG +**A'mDAL +OOU 8 8UT^^=U=U
 	
 	5&44qr)   c                 L   UR                   (       d  U R                  R                   H0  nUR                  (       d  M  UR                  R	                  5         M2     U R
                  R                   H/  nUR                   H  nU(       d  M  UR	                  5         M     M1     gr   )r   r   r   
MarkAnchorr   r   r   r   )r%   r'   r   r   r   as         r   r   r   O  sm    ??**A|||((* + **A\\1MMO " + r)   c                 x   U R                   S:X  Ga  U R                  R                  UR                  5      n[	        U R
                  R                  U5      U R
                  l        [        U R
                  R                  5      U R
                  l        U R                  R                  UR                  5      n[	        U R                  R                  U5      U R                  l        [        U R                  R                  5      U R                  l        [        S U R
                  R                   5       5      n[        U5      U l        U R
                  R                   H#  nUR                  UR                   5      Ul        M%     U R                  R                   H6  nUc  M  UR"                   H  n[	        UR$                  U5      Ul        M      M8     ['        U R                  =(       a3    U R
                  R                  =(       a    U R                  R                  5      $  SU R                   -  5       e)Nr   c              3   8   #    U  H  oR                   v   M     g 7fr   r   r   s     r   r   rr   j  r   r   r   )r   r   r@   r&   r5   r   r   r0   r   LigatureCoverageLigatureArrayLigatureAttachLigatureCountr   r   r\   r   ComponentRecordLigatureAnchorri   )r%   rf   r   ligature_indicesr   r   r1   r~   s           r   rk   rk   \  s   {{a((//9$0NN%%|%
! $'t~~'@'@#A 0077A,8--/?-
) ,/t/A/A/P/P+Q(""NDNN4M4M"NNm,**A#))!''2AG +##22Ay&&#/0@0@-#P  ' 3
 OO 1((1""00
 	
 	5&44qr)   c                 |   UR                   (       d  U R                  R                   H0  nUR                  (       d  M  UR                  R	                  5         M2     U R
                  R                   HG  nUc  M  UR                   H/  nUR                   H  nU(       d  M  UR	                  5         M     M1     MI     gr   )	r   r   r   r   r   r   r   r   r  )r%   r'   r   r   r1   r~   r   s          r   r   r   |  s    ??**A|||((* + ##22Ay&&))Aq * ' 3 r)   c                 H   U R                   S:X  Ga  U R                  R                  UR                  5      n[	        U R
                  R                  U5      U R
                  l        [        U R
                  R                  5      U R
                  l        U R                  R                  UR                  5      n[	        U R                  R                  U5      U R                  l        [        U R                  R                  5      U R                  l        [        S U R
                  R                   5       5      n[        U5      U l        U R
                  R                   H#  nUR                  UR                  5      Ul        M%     U R                  R                   H  n[	        UR                   U5      Ul        M      [#        U R                  =(       a3    U R
                  R                  =(       a    U R                  R                  5      $  SU R                   -  5       e)Nr   c              3   8   #    U  H  oR                   v   M     g 7fr   r   r   s     r   r   rr     s     "O4Nq774Nr   r   )r   Mark1Coverager@   r&   r5   
Mark1Arrayr   r0   r   Mark2Coverage
Mark2ArrayMark2Recordr   r   r\   r   Mark2Anchorri   )r%   rf   mark1_indicesmark2_indicesr   r   r   s          r   rk   rk     sz   {{a**11!((;%1OO&&&
" %((B(B$C!**11!((;&2OO'''
# %((C(C$D!""ODOO4N4N"OOm,++A#))!''2AG ,,,A(FAM -OOW 9 9Wdoo>W>W
 	
 	5&44qr)   c                 L   UR                   (       d  U R                  R                   H0  nUR                  (       d  M  UR                  R	                  5         M2     U R
                  R                   H/  nUR                   H  nU(       d  M  UR	                  5         M     M1     gr   )r   r  r   r   r   r	  r
  r  )r%   r'   r   r   r   s        r   r   r     sm    ??++A|||((* , ,,A]]1MMO # - r)   c                     g r   r   r%   lookup_indicess     r   subset_lookupsr    s     	r)   c                     / $ r   r   r   s    r   collect_lookupsr    s	     Ir)   c                     gr   r   r%   r'   r   s      r   r   r     s     r)   c                     g)NFr   r   s    r   may_have_non_1to1r    s     r)   c                     gr   r   r   s    r   r  r    s     r)   c                     " S S[         5      nU R                  S;  a  g [        U R                  S5      (       d  0 U R                  l        U R                  U R                  R                  ;  a?  U" U R                  U R                  5      nX R                  R                  U R                  '   U R                  R                  U R                     $ )Nc                       \ rS rSrS rSrg)0__subset_classify_context.<locals>.ContextHelperi  c                    UR                   R                  S5      (       a  SnSnOSnSnUR                   R                  S5      (       a  SnSnSnOSnSnSnXS-   nX0l        X@l        XPl        Xl        X`l        Xpl        US	-   U l	        US:X  a  S
 n	S n
S nS nS nS nS nS nS nS nOPUS:X  a  S n	S n
S nS nS nS nS nS nS nS nO+US:X  a  S n	S n
S nS nS nS nS nS  nS! nS" nO
 S#U-  5       eU(       a!  Xl
        Xl        Xl        UU l        UU l        OXl
        Xl        Xl        Xl        UU l        US:X  a1  US$-   U l        US%-   U l        US&-   U l        US'-   U l        S( U l        g US:X  aa  US)-   U l        US*-   U l        US+-   U l        US,-   U l        S- U l        U(       a  S.OS/U l        U(       a  SOSU l        U(       a  S0OS1U l        g US:X  a  U(       a  S2OS3U l        g g )4NSubstSubPosChainr   r    r   LookupRecordc                     U R                   $ r   r   r   s    r   <lambda>K__subset_classify_context.<locals>.ContextHelper.__init__.<locals>.<lambda>      QZZr)   c                     U R                   $ r   r%  r&  s    r   r'  r(        !**r)   c                     g)Nr   r   r&  s    r   r'  r(    s    r)   c                     g)N)NNNr   r&  s    r   r'  r(    s    -?r)   c                     U R                   4$ r   )Inputr&  s    r   r'  r(    
    aggZr)   c                 H    U R                   U R                  U R                  4$ r   	Backtrackr/  	LookAheadr&  s    r   r'  r(         1;;*Mr)   c                 6    Uu  U l         S U 5       u  U l        g )Nc              3   >   #    U  H  n[        U5      S -   v   M     g7fr   Nr/   r   xs     r   r   a__subset_classify_context.<locals>.ContextHelper.__init__.<locals>.SetRuleData.<locals>.<genexpr>$       &=1as1vz1   )r/  r   r   r,   s     r   SetRuleDataN__subset_classify_context.<locals>.ContextHelper.__init__.<locals>.SetRuleData"      !"JQW&=1&=OQ\r)   c                     Uu  U l         U l        U l        [        US   5      [        US   5      S-   [        US   5      sU l        U l        U l        g Nr   r   r   r3  r/  r4  r0   BacktrackGlyphCountInputGlyphCountLookAheadGlyphCountr>  s     r   ChainSetRuleDataS__subset_classify_context.<locals>.ContextHelper.__init__.<locals>.ChainSetRuleData&  P    :;7Q[!'1;
 QqTC!IM3qt9	-)-r)   r   c                     U R                   $ r   r%  r&  s    r   r'  r(  /  r)  r)   c                     U R                   $ r   r%  r&  s    r   r'  r(  0  r+  r)   c                     U R                   4$ r   ClassDefr&  s    r   r'  r(  1  s
    r)   c                 H    U R                   U R                  U R                  4$ r   BacktrackClassDefInputClassDefLookAheadClassDefr&  s    r   r'  r(  2  s     ''OO''.r)   c                     Uu  U l         g r   rN  r>  s     r   SetContextDataQ__subset_classify_context.<locals>.ContextHelper.__init__.<locals>.SetContextData8  s    $%MQZr)   c                 .    Uu  U l         U l        U l        g r   rQ  r>  s     r   SetChainContextDataV__subset_classify_context.<locals>.ContextHelper.__init__.<locals>.SetChainContextData;  s    RSOQ(!/1;Nr)   c                     U R                   4$ r   r   r&  s    r   r'  r(  >  r0  r)   c                 H    U R                   U R                  U R                  4$ r   r2  r&  s    r   r'  r(  ?  r5  r)   c                 6    Uu  U l         S U 5       u  U l        g )Nc              3   >   #    U  H  n[        U5      S -   v   M     g7fr8  r/   r9  s     r   r   r;  C  r<  r=  )r   r   r>  s     r   r?  r@  A  rA  r)   c                     Uu  U l         U l        U l        [        US   5      [        US   5      S-   [        US   5      sU l        U l        U l        g rC  rD  r>  s     r   rH  rI  E  rJ  r)   c                      U R                   S   $ Nr   r%  r&  s    r   r'  r(  N  s    QZZ]r)   c                      U R                   S   $ ra  )InputCoverager&  s    r   r'  r(  O  s    !//!*<r)   c                     U R                   $ r   r%  r&  s    r   r'  r(  T  r)  r)   c                 N    U R                   U R                  -   U R                  -   $ r   )r   rc  r   r&  s    r   r'  r(  U  s    ''!//9A<O<OOr)   c                 6    Uu  U l         S U 5       u  U l        g )Nc              3   8   #    U  H  n[        U5      v   M     g 7fr   r/   r9  s     r   r   r;  [  s     &9q!s1vvqr   )r   r   r>  s     r   r?  r@  Y  s    $%MQZ&9q&9OQ\r)   c                 f    Uu  U l         U l        U l        S U 5       u  U l        U l        U l        g )Nc              3   8   #    U  H  n[        U5      v   M     g 7fr   r/   r9  s     r   r   f__subset_classify_context.<locals>.ContextHelper.__init__.<locals>.ChainSetRuleData.<locals>.<genexpr>c  s     +AQr   )r   rc  r   rE  rF  rG  r>  s     r   rH  rI  ]  s7    RSOQ(!/1;N
 ,+	-)-r)   r   Rule	RuleCountRuleSetRuleSetCountc                     X ;   a  U/$ / $ r   r   r&   r~   r   s      r   r'  r(  z  s    Q[qc6Pb6Pr)   	ClassRuleClassRuleCountClassSetClassSetCountc                 h    U(       a  UR                  X5      $ US:X  a  [        U 5      $ [        5       $ ra  )rT   r<   rp  s      r   r'  r(    s6     %%f0 <)*a#f+<58U<r)   rS  rO  r/  r   rc  r   )__name__endswith
startswithTypTyper!  ChainTypInputIdxDataLenr#  r   ContextDatarV  RuleDatar?  rk  rl  rm  rn  	IntersectrO  ClassDefIndexr/  )r%   rS   r   ry  rz  r!  r|  r}  r{  r   ChainCoverager~  ChainContextDatarV  rY  r  ChainRuleDatar?  rH  s                      r   __init__9__subset_classify_context.<locals>.ContextHelper.__init__  sZ   ~~&&w//~~((11{HHIJ$M$M"L $~ 5D{/ 4/#? !%&*#/ M>> 1/ 45$ &T 0 M>> 12 <"#' !%&*#/!:, 8.77q -#3 &9# -#3  (#. &4# (#. {$v-	!)K!7')3$,~$=!!P1${2	!),<!<'*4$,$>!" 49j*/QQ"(-W7
105_:
 r)   )r!  r{  rO  r  r~  r   r}  r/  r|  r  r#  rk  rl  r  rm  rn  rV  r?  ry  rz  N)rv  
__module____qualname____firstlineno__r  __static_attributes__r   r)   r   ContextHelperr    s	    L	Fr)   r  r   _subset__ContextHelpers)objectr   hasattr	__class__r  )r%   r  helpers      r   __subset_classify_contextr    s    MF MF^ {{)#4>>#<==13.{{$..@@@t~~t{{;>D..t{{;>>11$++>>r)   c                   ^^ U R                  5       mTR                  U 5      R                  U5      nU(       d  / $ TR                  U 5      R                  U5      nU R                  S:X  Ga  TR                  U 5      n[        U TR                  5      n[        U TR                  5      nU GH  nXv:  d	  XW   (       d  M  [        XW   TR                  5       GHh  nU(       d  M  [        UU4S j[        UTR                  U5      5       5       5      (       d  MC  [        5       n	[        UTR                  5       GH   n
U
(       d  M  U
R                  nX;   a  S nOKUS:X  a)  [!        TR                  U 5      R"                  U   /5      nO[!        UR$                  US-
     /5      nTR&                  R(                  R*                  U
R,                     nU	R/                  U5        UR1                  5       (       a1  U	R3                  [5        U[7        UR$                  5      S-   5      5        UR9                  TUS9  GM     GMk     GM     g U R                  S:X  Ga$  [        U TR:                  5      nUR                  U5      nTR                  U 5      n[        U TR                  5      n[        U TR                  5      nU GH  nXv:  d	  XW   (       d  M  [        XW   TR                  5       GH  nU(       d  M  [        UU4S j[        UTR                  U5      5       5       5      (       d  MC  [        5       n	[        UTR                  5       GH  n
U
(       d  M  U
R                  nX;   a  S nO`US:X  a  [!        UR=                  X'5      5      nO?[!        UR=                  TR"                  [        UTR$                  5      US-
     5      5      nTR&                  R(                  R*                  U
R,                     nU	R/                  U5        UR1                  5       (       a;  U	R3                  [5        U[7        [        UTR$                  5      5      S-   5      5        UR9                  TUS9  GM"     GM     GM     g U R                  S:X  GaJ  [        U4S jTR                  U 5       5       5      (       d  / $ U n[        UTR$                  5      n[        5       n	[        UTR                  5       H  n
U
(       d  M  U
R                  nX;   a  S nO8US:X  a  [!        U5      nO&[!        X   R                  TR"                  5      5      nTR&                  R(                  R*                  U
R,                     nU	R/                  U5        UR1                  5       (       a'  U	R3                  [5        U[7        U5      S-   5      5        UR9                  TUS9  M     g  S	U R                  -  5       e)
Nr   c              3   Z   >^#    U  H  u  mn[        UUU4S  jU 5       5      v   M!     g7f)c              3   ^   >#    U  H"  nTR                  TR                  TU5      v   M$     g 7fr   r  r&   r   kr~   cdrf   s     r   r   r     %     DeAHHb!44e   *-Nrs   r   klistr  r~   rf   s     @r   r   ra     *      %D	E DeDDD%D   '+r   r   )r`   c              3   Z   >^#    U  H  u  mn[        UUU4S  jU 5       5      v   M!     g7f)c              3   ^   >#    U  H"  nTR                  TR                  TU5      v   M$     g 7fr   r  r  s     r   r   r     r  r  Nr  r  s     @r   r   ra     r  r  r   c              3   n   >#    U  H*  oS L=(       a    UR                  TR                  5      v   M,     g 7fr   r?   r   r:  rf   s     r   r   ra     s*     UDTqD=:Q[[%::DT   25r   )r  r   r8   r=   r   r~  r   rm  rn  rk  rs   zipr  r<   r#  SequenceIndex	frozensetr&   r/  table
LookupListLookupLookupListIndexaddr  rc   ranger0   rg   rO  rT   )r%   rf   r`   r2   r~  rssrssCountr4   r   chaosllseqi
pos_glyphslookuprO  input_coveragesr~   s    `              @r   rg   rg     s   &&(Ajj((4G	D!22:>J{{ammD)dAII&40A}CFSVQVV, %(ajjm%D   !!Q^^4B ++D}%)
19)2AJJt4D4K4KA4N3O)PJ)2AGGD1H4E3F)GJWW//66r7I7IJFIIdO//11U4QWW1A%BC))!
)C! 5 - : 
	4,$$Z0mmD)dAII&40A}CFSVQVV, %(ajjm%D   !!Q^^4B ++D}%)
19)2 ( 8 8 G*J *3 ( 8 8$%HHga.A$(.K!"*J
 WW//66r7I7IJFIIdO//11U4WQ5H1IA1M%NO))!
)C- 5 - F 
	UAJJtDTUUUI!!QWW-!Q^^,B##D}!
19!*:!6J!*'->>qxxH"J WW''..r/A/ABFIIdO''))U4_)=)ABC!!!
!;% -( 	5&44qr)   c                 ^
  ^ U R                  5       nU R                  S:X  Ga  U R                  R                  TR                  5      n[        XR                  5      n[        XR                  5      nU Vs/ s H  ofU:  d  M
  XF   PM     nnU H  nU(       d  M  [        XrR                  5      nU V	s/ s H9  n	U	(       d  M  [        U4S jUR                  U	5       5       5      (       d  M7  U	PM;     nn	[        XrR                  U5        [        XrR                  [        U5      5        M     [        U5       VVs/ s H,  u  pgU(       d  M  [        XrR                  5      (       d  M*  UPM.     nnnU R                  R                  U5        [!        XC5      n[        XR                  U5        [        XR                  [        U5      5        [#        U5      $ U R                  S:X  Ga  U R                  R                  TR                  5      (       d  gUR%                  U 5      n
U
 Vs/ s H%  o(       a  UR                  TR                  SS9OS PM'     nnXR&                     n[        XR                  5      n[        XR                  5      nU Vs/ s H  ofU:  d  M
  XF   PM     nnA[        XR(                  5      R+                  U R                  R                  5      n[        U5       VVs/ s H  u  pdXc;   a  UOS PM     snnnU GH  nU(       d  M  [        XrR                  5      nU V	s/ s H?  n	U	(       d  M  [        S [-        XR                  U	5      5       5       5      (       d  M=  U	PMA     nn	[        XrR                  U5        [        XrR                  [        U5      5        U Hc  n	UR/                  U	[-        XR                  U	5      5       VVVs/ s H&  u  pU Vs/ s H  oR1                  U5      PM     snPM(     snnn5        Me     GM     U Vs/ s H'  ow(       a  [        XrR                  5      (       a  UOS PM)     nnU(       a  US   c  US	 U(       a  US   c  M  [        XR                  U5        [        XR                  [        U5      5        [#        U5      $ U R                  S	:X  a$  [        U4S
 jUR                  U 5       5       5      $  SU R                  -  5       es  snf s  sn	f s  snnf s  snf s  snf s  snnf s  sn	f s  snf s  snnnf s  snf )Nr   c              3   N   >#    U  H  n[        U4S  jU 5       5      v   M     g7f)c              3   @   >#    U  H  oTR                   ;   v   M     g 7fr   rB   )r   r   rf   s     r   r   *subset_glyphs.<locals>.<genexpr>.<genexpr>  s     95aM5rK   Nr  )r   glistrf   s     r   r   rr     s     U}e95999}s   "%r   FTr   c              3   T   ^#    U  H  u  mn[        U4S  jU 5       5      v   M     g7f)c              3   ,   >#    U  H	  oT;   v   M     g 7fr   r   )r   r  	klass_maps     r   r   r  B  s     61Ys   Nr  )r   r  r  s     @r   r   rr   A  s+      ,J(	5 6666,Js   %(r   c              3   n   >#    U  H*  oS L=(       a    UR                  TR                  5      v   M,     g 7fr   r   r  s     r   r   rr   a  s*     RAQAD=7QXXahh%77AQr  r   )r  r   r   r@   r&   r   rm  rn  rk  rs   r  r   rl  r0   r7   rD   r5   ri   r~  r  rO  r8   r  r?  r\   )r%   rf   r~   r2   r  r  r4   rsssr   r~  r:  
klass_mapsr  r  r  s    `              r   rk   rk     s0    	&&(A{{a--&&qxx0dII&40&7w!h,vsvw7BVV$B A  UqzzRS}UU    B#BSW-  #,C.O.B172vv;N1.OG$3(ii%nnc#h/Cy		}}##AHH--mmD)CN
CNaaAHHQXXTH*T9; 	 

 __-dII&40&7w!h,vsvw7$

+55dmm6J6JK;DS>J>als,>JBVV$B A   ,/
JJqM,J     B#BSW-  14J

10N0N,I 6;;U+U;0N # 6 EHHCbRGB//rT9CHc"goB c"goii%nnc#h/ Cy		RDAQRRR4&44qa 8
 P
 8 K" < Isx   6	S9S94S>'S>.S>=TT*T*,T		T!T2T3T-T3TT#+TT#".T*T#c                    U R                  5       nU R                  S;   a  [        XR                  5       H  nU(       d  M  [        X2R                  5       H  nU(       d  M  [        UUR                  [        XBR                  5       Vs/ s H   nU(       d  M  UR                  U;   d  M  UPM"     sn5        [        XBR                  5       H,  nU(       d  M  UR                  UR                  5      Ul        M.     M     M     g U R                  S:X  a  [        U UR                  [        XR                  5       Vs/ s H   nU(       d  M  UR                  U;   d  M  UPM"     sn5        [        XR                  5       H,  nU(       d  M  UR                  UR                  5      Ul        M.     g  SU R                  -  5       es  snf s  snf Nr   r   r   )	r  r   r   rm  rk  r   r#  r  r\   )r%   r  r~   r  r   r  s         r   r  r  f  s    	&&(A{{f$		*BR(NN #*!^^"<"<B "$"4"4"F "< "!^^4B )7)=)=b>P>P)QB& 5 ) +& 
	NN "$77B ,,> 7	
 $/B!/!5!5b6H6H!IB 0
 	5&44q3s$   GG,G?GG Gc           
      $   U R                  5       nU R                  S;   a  [        XR                  5       VVVs/ s Hd  nU(       d  M  [        X!R                  5        H>  nU(       d  M  [        X1R
                  5        H  nU(       d  M  UR                  PM     M@     Mf     snnn$ U R                  S:X  a8  [        XR
                  5       Vs/ s H  oD(       d  M  UR                  PM     sn$  SU R                  -  5       es  snnnf s  snf r  )r  r   r   rm  rk  r#  r  )r%   r~   r  r   r  s        r   r  r    s     	&&(A{{f dII.
.  R(	 
 a0 B
 1  ) .
 	
 
	-4T>>-JQ-Jrb"""-JQQ4&44q
 Rs#   D	D+DD
DDc                     U R                   S:X  a  U R                  R                  X5        g  SU R                   -  5       er   )r   ExtSubTablerg   re   s      r   rg   rg     s6    {{a''64&44qr)   c                 ~    U R                   S:X  a  U R                  R                  5       $  SU R                   -  5       er   )r   r  r  r   s    r   r  r    s7    {{a11334&44qr)   c                     U R                   S:X  a  U R                  R                  U5      $  SU R                   -  5       er   )r   r  rk   r%   rf   s     r   rk   rk     s9    {{a--a004&44qr)   c                     U R                   S:X  a  U R                  R                  X5      $  SU R                   -  5       er   )r   r  r   r  s      r   r   r     s9    {{a11$@@4&44qr)   c                     U R                   S:X  a  U R                  R                  U5      $  SU R                   -  5       er   )r   r  r  r  s     r   r  r    s9    {{a..~>>4&44qr)   c                 ~    U R                   S:X  a  U R                  R                  5       $  SU R                   -  5       er   )r   r  r  r   s    r   r  r    s7    {{a//114&44qr)   c                    Uc  [        UR                  5      n[        U 5      nUR                  nUR	                  US5      u  pVU[        UR                  5      :w  a%  [        UR                  5      [        5       4=u  pVXC'   UR                  U5      (       a  g UR                  U5        U R                   H  nU(       d  M  UR                  X5        M     g )Nr   )r  r&   id_doneLookupsgetr0   r<   issubsetrc   SubTablerg   )r%   rf   r`   keydoneLookupsr3   coveredsts           r   rg   rg     s    qxx(
 T(C..K __S)4NEAHH-0]CE,BB)7##NN:mm
!( r)   c                    U R                    Vs/ s H%  o"(       d  M  UR                  U5      (       d  M#  UPM'     snU l         [        U R                   5      U l        [	        U S5      (       an  U R
                  ba  U R
                  UR                  ;  a  S U l        U =R                  S-  sl        O*UR                  R                  U R
                  5      U l        [        U R                  5      $ s  snf )NMarkFilteringSeti)
r  rk   r0   SubTableCountr  r  used_mark_sets
LookupFlagr\   ri   )r%   rf   r  s      r   rk   rk     s    "&--N-B2R":J:J1:MR-NDMT]]+Dt'((T-B-B-N  (8(88$(D!OOu$O$%$4$4$:$:4;P;P$QD!""## Os   
C1C1C1c                 v    SnU R                    H&  nU(       d  M  UR                  X5      (       d  M$  SnM(     U$ NFT)r  r   )r%   r'   r   retr  s        r   r   r      s8    
Cmm..C	 
 Jr)   c                 L    U R                    H  nUR                  U5        M     g r   )r  r  )r%   r  rf   s      r   r  r    s    ]]	( r)   c                 <    [        S U R                   5       / 5      $ )Nc              3   R   #    U  H  o(       d  M  UR                  5       v   M     g 7fr   )r  r   r  s     r   r   "collect_lookups.<locals>.<genexpr>  s!     C}$""$$}   
'')sumr  r   s    r   r  r    s    Ct}}CRHHr)   c                 :    [        S U R                   5       5      $ )Nc              3   R   #    U  H  o(       d  M  UR                  5       v   M     g 7fr   )r  r  s     r   r   $may_have_non_1to1.<locals>.<genexpr>  s!     D"%r##%%r  )rL   r  r   s    r   r  r    s    DDDDr)   c                     [        U R                  5       VVs/ s H(  u  p#U(       d  M  UR                  U5      (       d  M&  UPM*     snn$ s  snnf )z(Returns the indices of nonempty lookups.)r7   r  rk   )r%   rf   r4   r1   s       r   rk   rk     s8     $DKK0M0$!AA!//!:LA0MMMs   AAAc                 v    SnU R                    H&  nU(       d  M  UR                  X5      (       d  M$  SnM(     U$ r  )r  r   )r%   r'   r   r  r1   s        r   r   r   !  s8    
C[[t--C	 
 Jr)   c                    U R                  5         U Vs/ s H#  o"U R                  :  d  M  U R                  U   PM%     snU l        [        U R                  5      U l        U R                   H  nUR	                  U5        M     g s  snf r   )ensureDecompiledLookupCountr  r0   r  r%   r  r4   r1   s       r   r  r  ,  sl    +9R>aAQAQ=Q>4;;q>>RDK4;;'D[[	(  Ss
   BBc                     U R                  5         [        U R                  5       VVs/ s H  u  p#X!;   a  UOSPM     snnU l        gs  snnf z+Sets lookups not in lookup_indices to None.N)r  r7   r  r  s       r   neuter_lookupsr  5  sF     	7@7M7MtqQ d*7MDK s   Ac                   ^  [        U5      nUn [        U 4S jU 5       / 5      nU Vs/ s H  nXA;  d  M
  UT R                  :  d  M  UPM      nnU(       d  [        U5      $ [        U5      nUR                  U5        UnMs  s  snf )zBReturns sorted index of all lookups reachable from lookup_indices.c              3      >#    U  H3  oTR                   :  d  M  TR                  U   R                  5       v   M5     g 7fr   )r  r  r  r   s     r   r   "closure_lookups.<locals>.<genexpr>E  s3     Ww!dFVFVBV-T[[^++--ws   >$>)r   r  r  extend)r%   r  recurserecurse_lookupsr1   s   `    r   closure_lookupsr  >  s      /NG
WwW
 %
$& +,t/?/?+? $ 	 

 n--$_5o.! 

s   	BB	Bc                 j   U R                    Vs/ s H  o"U;   d  M
  UPM     snU l         U R                    Vs/ s H  o!R                  U5      PM     snU l         [        U R                   5      U l        U R                  =(       d$    [	        U R
                  [        R                  5      $ s  snf s  snf )z1"Returns True if feature is non-empty afterwards.)r  r\   r0   r  
isinstanceFeatureParamsr   FeatureParamsSize)r%   r  r1   s      r   r  r  T  s     (,';';S';!N?RA';SD=A=Q=QR=Q003=QRD4//0D  zH66   TRs   	B+B+B0c                     [        U R                  5       VVs/ s H9  u  p#UR                  R                  U5      (       d  UR                  S:X  d  M7  UPM;     snn$ s  snnf ))Returns the indices of nonempty features.pref)r7   FeatureRecordFeaturer  
FeatureTag)r%   r  r4   fs       r   r  r  c  sV     d0011DAII$$^448N 	
1  s   6AAc                 0   ^  [        U 4S jU 5       / 5      $ )Nc              3      >#    U  H:  nUTR                   :  d  M  TR                  U   R                  R                  v   M<     g 7fr   )FeatureCountr  r  r  r   s     r   r   r  t  s?      	
$4$$$ :Dq!))99$s
   A*A)r  r%   feature_indicess   ` r   r  r  q  s"    	
$	

 	 r)   c                     U R                  5         [        U R                  U5      U l        [        U R                  5      U l        [        U R                  5      $ r   )r  r5   r  r0   r  ri   r  s     r   subset_featuresr  }  sG    %d&8&8/JDD../D!!""r)   c                     U R                    Vs/ s H1  nUR                  R                  U5      (       d  M%  UR                  PM3     sn$ s  snf )r  )SubstitutionRecordr  r  FeatureIndex)r%   r  r   s      r   r  r    sG    
 (((A99##N3 	(  s
   $A
A
c                 D   ^ [        U4S jU R                   5       / 5      $ )r  c              3   Z   >#    U  H   nUR                   R                  T5      v   M"     g 7fr   )FeatureTableSubstitutionr  )r   r  r  s     r   r   !subset_lookups.<locals>.<genexpr>  s,      	
0 &&55nEE0r   r  FeatureVariationRecordr  s    `r   r  r    s*     	
00	
 	 r)   c                 D   ^ [        U4S jU R                   5       / 5      $ )Nc              3      >#    U  HK  nUR                   R                    H-  nUR                  T;   d  M  UR                  R                  v   M/     MM     g 7fr   )r  r  r  r  r  )r   vrr   r	  s      r   r   r    sI      	
100CC~~0 &AII%%C &1s
   .A!Ar  r  s    `r   r  r    s(    	
11	
 	 r)   c                 V   U R                  5         U R                   Vs/ s H  o"R                  U;   d  M  UPM     snU l        U R                   H#  nUR                  UR                  5      Ul        M%     [	        U R                  5      U l        [        U R
                  5      $ s  snf r   )r  r  r  r\   r0   SubstitutionCountri   r%   r	  r   s      r   r  r    s    ***ann.O*D $$(..q~~> % !8!89D&&''s
   B&B&c                    U R                  5         U R                   H  nUR                  R                  U5        M      U R                  (       a}  U R                  S   R                  R                  (       dU  U R                  R                  5         U R                  (       a*  U R                  S   R                  R                  (       d  MU  [        U R                  5      U l        [        U R                  5      $ )Nr  )	r  r  r  r  r  popr0   FeatureVariationCountri   r  s      r   r  r    s    ((	""22?C )
 	##++

"
"#4#45 	##'') 	##++

"
"#4#45
 "%T%@%@!AD**++r)   c                    U R                   U;   a!  UR                  U R                   5      U l         OSU l         U R                   Vs/ s H  o"U;   d  M
  UPM     snU l        U R                   Vs/ s H  o"U;   d  M
  UR                  U5      PM     snU l        [        U R                  5      U l        [        U R                  =(       d    U R                   S:g  5      $ s  snf s  snf N  )ReqFeatureIndexr\   r  r0   r  ri   )r%   r	  r  s      r   r  r    s    ..44T5I5IJ$$($5$5N$5qo9M$5ND +/*;*;*;QO?S a *;D D--.D!!BT%9%9U%BCC Os   	CC0	C$=C$c                     U R                   S S  nU R                  S:w  a  UR                  U R                  5        [        U5      $ r  )r  r!  appendr   r  s     r   collect_featuresr$    s?    ''*Ou$t334o&&r)   c                    U R                   (       a.  U R                   R                  U5      (       d  U(       d  S U l         U R                   Vs/ s H&  o3R                  R                  U5      (       d  M$  UPM(     snU l        [	        U R                  5      U l        [        U R
                  =(       d    U R                   5      $ s  snf r   )DefaultLangSysr  LangSysRecordLangSysr0   LangSysCountri   )r%   r	  keepEmptyDefaultLangSysr1   s       r   r  r    s     	##33ODD'"%%%a)B)B?)S%D D../D!!8T%8%899	s   #C5Cc                    U R                    Vs/ s H  oR                  R                  5       PM     nnU R                  (       a)  UR	                  U R                  R                  5       5        [        [        U/ 5      5      $ s  snf r   )r'  r(  r$  r&  r#  r   r  )r%   r1   r	  s      r   r$  r$    sg    =A=O=OP=Oyy113=OOPt22CCEFc/2.// Qs   #Bc                    U R                    Vs/ s H;  nUR                  R                  XR                  S:H  5      (       d	  U(       d  M9  UPM=     snU l         [	        U R                   5      U l        [        U R
                  5      $ s  snf )NDFLT)ScriptRecordScriptr  	ScriptTagr0   ScriptCountri   )r%   r	  retain_emptyrf   s       r   r  r    sv    
 """A88##O[[F5JKK 	
"D 4,,-D  !!s   8BBc                 N    [        [        S U R                   5       / 5      5      $ )Nc              3   T   #    U  H  oR                   R                  5       v   M      g 7fr   )r/  r$  )r   rf   s     r   r   #collect_features.<locals>.<genexpr>  s      R@Q1884466@Qs   &()r   r  r.  r   s    r   r$  r$    s!    cR@Q@QRTVWXXr)   EBLCc                    U R                    H}  nUR                   H6  nUR                   Vs/ s H  oDUR                  ;   d  M  UPM     snUl        M8     UR                   Vs/ s H  oUR                  (       d  M  UPM     snUl        M     U R                    Vs/ s H  oR                  (       d  M  UPM     snU l         gs  snf s  snf s  snf r   )strikesindexSubTablesnamesr&   )r%   rf   strikeindexSubTablenr4   s         r   rk   rk     s    ,,#22M.;.A.A"S.A!((]1.A"SM 3,2,A,A M,AqWW,A M   $||@|!/?/?A|@DL	 #T M@s#   CC$C<CC4CEBDTc           
          U R                    VVs/ s H)  o!R                   Vs0 s H  o3U;   d  M
  X2U   _M     snPM+     nnnU Vs/ s H  o"(       d  M  UPM     snU l         gs  snf s  snnf s  snf r   )
strikeDatar&   )r%   rf   r;  r   r@  s        r   rk   rk     sp     GKooFUFxx7x!;1Ix7o  
 -7AJ&&vJADO 	8
 Bs&   A)	A$	A$A)
A/A/$A)sbixc                     U R                   R                  5        HC  nUR                   Vs0 s H#  o3UR                  ;   d  M  X2R                  U   _M%     snUl        ME     gs  snf r   )r8  rY   r&   )r%   rf   r;  r   s       r   rk   rk     sV    ,,%%'67hhUhv}}BT,MM!,,hU (  Vs   A#A#GSUBc                 |   U R                   Ul         U R                   R                  (       a%  U R                   R                  R                  5       nO/ nU R                   R                  (       a&  U R                   R                  R	                  U5      nO/ n[        U R                   SS 5      (       a'  X0R                   R                  R	                  U5      -  n[        U5      nU R                   R                  (       a  0 Ul	         [        UR                  5      nU H  nXPR                   R                  R                  :  a  M(  U R                   R                  R                  U   (       d  MR  U R                   R                  R                  U   R                  U5        M     XAR                  :X  a  OM  U?	U? g NFeatureVariations)r  
ScriptListr$  FeatureListr  r   rF  r   r  r  r  r&   r  r  rg   )r%   rf   r	  r  orig_glyphsr4   s         r   rg   rg   '  sD   jjAGzz**//@@Bzz//??Ptzz.55**66FFWW/Nzz#AHH-K#

--999zz,,33A6

%%,,Q/>>qA $ hh&  N	r)   GPOSc                     UR                   Ul        U R                  R                  (       a&  U R                  R                  R	                  U5      nO/ nU R                  U5        gr   )glyphs_gsubedr&   r  r  rk   r  )r%   rf   r  s      r   rk   rk   E  sJ    AHzz..<<Q?'r)   c                 H    U R                   [        R                  " S5      :H  $ )NrC  )r  r   getTableClassr   s    r   retain_empty_scriptsrO  P  s     >>U00888r)   c                 F   U R                   R                  (       a%  U R                   R                  R                  U5        U R                   R                  (       a&  U R                   R                  R                  U5      nO/ n[	        U R                   SS5      (       a'  X R                   R
                  R                  U5      -  n[        U5      nU R                   R                  (       a%  U R                   R                  R                  U5        [	        U R                   SS5      (       a%  U R                   R
                  R                  U5        U R                   R                  (       a4  U R                   R                  R                  X R                  5       5        gg)zVRetains specified lookups, then removes empty features, language
systems, and scripts.rF  N)
r  r  r  rH  r   rF  r   r  rG  rO  )r%   r  r	  s      r   r  r  W  s    zz

,,^<zz**00??Otzz.55::77FF~VV 1Ozz

..?tzz.55

$$44_Ezz

--668	
 r)   c                     U R                   R                  (       a&  U R                   R                  R                  U5        ggr  )r  r  r  r  s     r   r  r  n  s.     zz

,,^< r)   c                    U R                   R                  (       a%  U R                   R                  R                  5       nO/ nU R                   R                  (       a&  U R                   R                  R	                  U5      nO/ n[        U R                   SS5      (       a'  X0R                   R                  R	                  U5      -  n[        U5      nU R                   R                  (       a&  U R                   R                  R                  U5      nO/ nU(       a  U R                  U5        gU R                  U5        g)z/Remove (default) or neuter unreferenced lookupsrF  N)r  rG  r$  rH  r  r   rF  r   r  r  r  r  )r%   rD   r	  r  s       r   prune_lookupsrS  u  s     zz**//@@Bzz//??Ptzz.55**66FFWW/Nzz..>>~NN+N+r)   c                 T   U R                   R                  (       a  [        U R                   R                  R                  5       VVs/ s H  u  p#UR                  U;   d  M  UPM     nnnU R                   R                  R                  U5        [        U R                   SS 5      (       a%  U R                   R                  R                  U5        O/ nU R                   R                  (       a4  U R                   R                  R                  X@R                  5       5        g g s  snnf rE  )
r  rH  r7   r  r  r  r   rF  rG  rO  )r%   feature_tagsr4   r  r	  s        r   subset_feature_tagsrV    s    zz "$**"8"8"F"FG
G|||+ G 	 

 	

..?4::2D99JJ((88Izz

--668	
 
s   D$"D$c                    0 n[        5       nU Hx  nSU;   a  UR                  S5      OUS4u  pVUR                  UR                  S5      5        UR	                  U[        5       5      R                  UR                  S5      5        Mz     U R
                  R                  (       Ga  U R
                  R                  R                   Vs/ s H  owR                  U;   d  M  UPM     snU R
                  R                  l        [        U R
                  R                  R                  5      U R
                  R                  l
        U R
                  R                  R                   H  nUR                  U;   d  M  SX(R                     ;  d  M)  UR                  R                   V	s/ s H#  n	U	R                  X(R                     ;   d  M!  U	PM%     sn	UR                  l        [        UR                  R                  5      UR                  l        SX(R                     ;  d  M  S UR                  l        M     g g s  snf s  sn	f )N.r      z*   dflt)r<   splitr  ljust
setdefaultr  rG  r.  r0  r0   r1  r/  r'  
LangSysTagr)  r&  )
r%   tagslangsysscript_tagstag
script_taglang_tagrf   recordr1   s
             r   subset_script_tagsrf    s   G%K14syy~#s

((+,:su-11(..2CD 
 zzzz,,99.
9![[K=WA9.


* -0

0E0E0R0R,S

)jj++88F7*vWEUEU=V/V $]]88/8||w/?/?'@@ 8/+
 .11L1L-M*)9)9!::37FMM0 9 .
/s   	H: H:% H?	H?c                 (   U R                   R                  (       a%  U R                   R                  R                  5       nO/ nU R                   R                  (       a%  U R                   R                  R	                  U5        [        U R                   SS5      (       a%  U R                   R                  R	                  U5        U R                   R                  (       a4  U R                   R                  R	                  XR                  5       5        gg)zRemove unreferenced featuresrF  N)r  rG  r$  rH  r  r   rF  rO  r  s     r   prune_featuresrh    s     zz**//@@Bzz

..?tzz.55

$$44_Ezz

--668	
 r)   c                     SUR                   ;  a  U R                  UR                   5        SUR                  ;  a  U R                  UR                  5        U R	                  SS9  g)Nr   Fr   T)layout_scriptsrf  layout_featuresrV  rS  r  s      r   prune_pre_subsetrl    s\     '((( 6 67
')))  !8!89U#r)   c                 H   U R                   nUR                  (       a  UR                  (       d  g UR                  R                  nUR                  R                   GHB  nUR
                  R                  nU(       d  M#  UR
                  R                  S S   GH  nUR                  n[        UR                  5      [        UR                  5      :w  a  M>  UR                  S:H  UR                  S:H  :w  a  M`  UR                  S:w  a   X$R                     X&R                     :w  a  M  [        [        UR                  5      5       H*  nX$R                  U      X&R                  U      :w  d  M)    M     UR
                  R                  R                  U5        GM     GME     g r  )r  rG  rH  r  r.  r/  r&  r'  r(  r0   r  r!  r  remove)r%   r  featuresrf   r,   lrr1   r4   s           r   remove_redundant_langsysrq    s;   JJE5#4#4  ..H**HH##((((+B

A1>>"c!..&99!!U*0A0AU0JK  E)--.(;L;L2MM3q~~./NN1-.(>>!;L2MM 0
 &&--b1# ,	 +r)   c                     U R                   nU R                  5         UR                  (       a  UR                  R                  X5        UR                  (       d  S Ul        UR                  (       a   U R                  5         U R                  5         [        US5      (       al  UR                  (       a3  UR                  (       a  UR                  R                  (       d  S Ul        UR                  (       d  UR                  S:X  a  SUl
        g)NrF  i     T)r  rS  r  r   rH  rq  rh  r  rF  r  Versionr%   r'   r   r  s       r   r   r     s    JJE**49  %%' u)**""%"9"9"P"P&*E# &&5==J+F&EMr)   GDEFc                 (   UR                   nU R                  nUR                  (       a  UR                  R                  R	                  U5      n[        UR                  R                  U5      UR                  l        [        UR                  R                  5      UR                  l        UR                  (       aO  UR                  R                  R                  5        VVs0 s H  u  pVXR;   d  M  XV_M     snnUR                  l
        UR                  (       aO  UR                  R                  R                  5        VVs0 s H  u  pVXR;   d  M  XV_M     snnUR                  l
        UR                  (       a  UR                  R                  R	                  U5      nUR                  R                  nU Vs/ s H#  oU:  d  M
  UR                  R                  U   PM%     snUR                  l        [        UR                  R                  5      UR                  l        [!        US5      (       a  UR"                  (       a  UR"                  n	U	R                   H  n
U
(       d  M  U
R	                  U5        M     [%        U	R                  5       VVs/ s H  u  pUR&                  (       d  M  UPM     snnUl        U	R                   Vs/ s H  oR&                  (       d  M  UPM     snU	l        gs  snnf s  snnf s  snf s  snnf s  snf )NMarkGlyphSetsDefT)rL  r  LigCaretListr   r@   r5   r   r0   LigGlyphCountMarkAttachClassDefrH   rM   GlyphClassDef
AttachListr   AttachPointr  rx  r7   r&   r  )r%   rf   r&   r  r2   r   rN   r   r4   markGlyphSetscoverager~   s               r   rk   rk   '  sS   __FJJE$$--44V<&253E3E3N3NPW&X#+.u/A/A/J/J+K("55??EEG.
GTQ1;DADG.
  * "00::@@B)
BTQakDADB)
% ""++226:%%00
5<(
5<J+E((+W(
$ '*%*:*:*F*F&G#u())e.D.D..%..Hx' / +4M4J4J*KX*K$!qxxA*KX-:-C-C!P-Cxx!-C!P/.
)
(
 Y!Ps<   $K83K8K>K><	L	LL	4L	L)Lc                 |   SU ;  a  g U S   nUR                   n[        US5      (       d  g UR                  n[        5       nUR	                  U5        SU ;   a  U S   R                   R	                  U5        UR                  U5      nUR                  U5        SU ;   a  U S   R                   R                  U5        g g )Nrv  VarStorerJ  )r  r  r  r<   collect_device_varidxessubset_varidxesremap_device_varidxes)r'   gdefr  storeusedVarIdxes
varidx_maps         r   
_pruneGDEFr  J  s    T<DJJE5*%%NNE5L 
!!,/~V22<@ &&|4J 

+~V00< r)   c                 B   U R                   nUR                  (       a"  UR                  R                  (       d  S Ul        UR                  (       a"  UR                  R                  (       d  S Ul        UR
                  (       a"  UR
                  R                  (       d  S Ul        UR                  (       a"  UR                  R                  (       d  S Ul        [        US5      (       a<  [        U5        UR                  R                  S:X  a  UR                  S:X  a  SUl        [        US5      (       a,  UR                  (       a  UR                  R                  (       d  S Ul        UR                  S:X  a  SUl        [        UR                  =(       d    UR                  =(       dq    UR
                  =(       d^    UR                  =(       dK    UR                  S:  =(       a    UR                  =(       d"    UR                  S:  =(       a    UR                  5      $ )Nr  r   i  i  rx  rs  )r  ry  rz  r{  rH   r|  r}  r   r  r  r  VarDataCountrt  rx  r   ri   ru  s       r   r   r   d  s~   JJE%"4"4"B"B!(@(@(J(J#' 5#6#6#@#@" 0 0 ; ;uj!!4>>&&!+}}
* *E-..%%%%..!%==J&&EM 	<##	<	< 	< MMZ'BE,B,B		<
 MMZ':ENN r)   kernc                     U R                    Vs/ s H  n[        US5      (       d  M  UPM     snU l         [        U R                   5      $ s  snf )N	kernTable)
kernTablesr  ri   r%   r'   r   ts       r   rl  rl    s<     #'//M/QWQ5Lq/MDO   Ns
   AAc           	      |   UR                   nU R                   HL  nUR                  R                  5        VVVs0 s H  u  u  pEnXB;   d  M  XR;   d  M  XE4U_M     snnnUl        MN     U R                   Vs/ s H  o3R                  (       d  M  UPM     snU l        [	        U R                  5      $ s  snnnf s  snf r   )rL  r  r  rM   ri   )r%   rf   r&   r  r   r   rN   s          r   rk   rk     s    __F__ [[..0
0	{  { QFAI0
  #'//A/Q[[q/ADO  

 Bs   B2
B2
B2
7B9B9vmtxc                     [        U R                  UR                  5      U l        UR                   H  nSU R                  U'   M     [	        U R                  5      $ )Nr   r   )r-   metricsr&   glyphs_emptiedri   r%   rf   r   s      r   rk   rk     sD    ahh7DL Q r)   hmtxc                     [        U R                  UR                  5      U l        UR                   H  nSU R                  U'   M     g)Nr  T)r-   r  r&   r  r  s      r   rk   rk     s8    ahh7DL Q r)   hdmxc           	      8   U R                   R                  5        VVs0 s H  u  p#U[        X1R                  5      _M     snnU l         U R                    H(  nUR                   H  nSU R                   U   U'   M     M*     [        U R                   5      $ s  snnf ra  )r  rM   r-   r&   r  ri   )r%   rf   szr1   r   s        r   rk   rk     s{    <@IIOO<MN<M52\!XX..<MNDIii!!A DIIbM! "  		?	 Os   "Bankrc                 0   U R                   R                  nUR                  S:X  d   SUR                  -  5       eUR                   Vs0 s H#  o3UR                  ;   d  M  X2R                  U   _M%     snUl        [        UR                  5      S:  $ s  snf )Nr   zunknown 'ankr' format %s)r  AnchorPointsr   r&   Anchorsr0   r%   rf   r  rm   s       r   rk   rk     s    JJ##E<<1G85<<GG1219emm=S#}}U##EM u}}!!s   	B Bbslnc                     U R                   R                  nUR                  S;   a&  UR                  R	                  UR
                  5        g g )N)r   r   )r  Baseliner   r&   r  StandardGlyph)r%   rf   r  s      r   rg   rg     s8    JJE||v	U(() r)   c                    U R                   R                  nUR                  S;   a  UR                   Vs0 s H(  nX2R                  R                  X2R                  5      _M*     nn[        U5      S:  a^  [        UR                  5       5      R                  S5      S   u  pVXRl        UR                  5        VVs0 s H  u  p7Xu:w  d  M  X7_M     nnn[        U5      S:  a  XBl        gSSS.UR                     Ul        U?gs  snf s  snnf )N)r   r   r   r   r   T)r  r  r   r&   BaselineValuesr  DefaultBaseliner0   r   rY   most_commonrM   )r%   rf   r  rm   	baselines
mostCommon_cntr   s           r   rk   rk     s    JJE||v 
! ''++E3H3HII! 	 
 y>A&y'7'7'9:FFqI!LJ$.!2;//2CW2Cheq2CIWy>A#,    !Q<5EL$
 Xs   /D;D
Dlcarc                 0   U R                   R                  nUR                  S;   aX  UR                   Vs0 s H#  o3UR                  ;   d  M  X2R                  U   _M%     snUl        [        UR                  5      S:  $  SUR                  -  5       es  snf )N)r   r   r   zunknown 'lcar' format %s)r  LigatureCaretsr   r&   Caretsr0   r  s       r   rk   rk     s    JJ%%E||v45HH
4<5@U&E<<&&H
 5<< 1$$?05<<??u
s   BBgvarc                     UR                   (       a-  UR                  (       d  / U R                  UR                  S   '   gNr   T)notdef_glyphnotdef_outline
variations
glyphOrderr  s      r   rl  rl    s-    G$:$:.0*+r)   c                     [        U R                  UR                  5      U l        [        U R                  5      U l        [        U R                  5      $ r   )r-   r  r&   r0   
glyphCountri   r  s     r   rk   rk     s7    "4??AHH=DO$//*DO  r)   c                    UR                   R                  5        VVs0 s H
  u  p4X1U   _M     nnnXR                   U R                        nU R                  R                  5        H  u  pxXR                  :  a  UOSXW'   M     U$ s  snnf ra  )rd   rM   last_retained_glyphreverseEmptiedGlyphMaplast_retained_order)	rf   r  	table_mapr  rN   map_last_idxr   r4   s	            r   _remap_index_mapr    s    )2):):)@)@)BC)BA!})BDC ++A,A,ABCH((..0"7"77(Q 1K Ds   BHVARc                 N   U R                   n[        5       n[        5       nSnUR                  (       am  [        UR                  R                  UR
                  5      UR                  l        UR                  UR                  R                  R                  5       5        OOUR                  UR                  R                  5       5        UR                  5       nUR                  R                  nUR                  (       al  [        UR                  R                  UR
                  5      UR                  l        UR                  UR                  R                  R                  5       5        UR                  (       al  [        UR                  R                  UR
                  5      UR                  l        UR                  UR                  R                  R                  5       5        UR                  R                  X5US9nUR                  (       a%  [!        XUR                  5      UR                  l        UR                  (       a%  [!        XUR                  5      UR                  l        UR                  (       a%  [!        XUR                  5      UR                  l        gNF)retainFirstMapadvIdxesT)r  r<   AdvWidthMapr-   rd   r&   rc   rY   reverseOrigGlyphMapcopyr   retain_gidsLsbMapRsbMapr  r  r  r%   rf   r  used	advIdxes_retainAdvMapr  s          r   rk   rk     s   JJE5DIL$01B1B1J1JAHH$U!E%%--4467A))0023IIK	yy,,||+ELL,@,@!((KELL((//12||+ELL,@,@!((KELL((//12//I 0 J $4QEDUDU$V!||/u||L||/u||L r)   VVARc                    U R                   n[        5       n[        5       nSnUR                  (       am  [        UR                  R                  UR
                  5      UR                  l        UR                  UR                  R                  R                  5       5        OOUR                  UR                  R                  5       5        UR                  5       nUR                  R                  nUR                  (       al  [        UR                  R                  UR
                  5      UR                  l        UR                  UR                  R                  R                  5       5        UR                  (       al  [        UR                  R                  UR
                  5      UR                  l        UR                  UR                  R                  R                  5       5        UR                  (       al  [        UR                  R                  UR
                  5      UR                  l        UR                  UR                  R                  R                  5       5        UR                  R!                  X5US9nUR                  (       a%  [#        XUR                  5      UR                  l        UR                  (       a%  [#        XUR                  5      UR                  l        UR                  (       a%  [#        XUR                  5      UR                  l        UR                  (       a%  [#        XUR                  5      UR                  l        gr  )r  r<   AdvHeightMapr-   rd   r&   rc   rY   r  r  r   r  TsbMapBsbMapVOrgMapr  r  r  r  s          r   rk   rk   $	  s   JJE5DIL%1%2D2D2L2Lahh%W"E&&..5578A))0023IIK	yy,,||+ELL,@,@!((KELL((//12||+ELL,@,@!((KELL((//12}} ,U]]-B-BAHH MEMM))0023//I 0 J %5aUEWEW%X"||/u||L||/u||L}} 0 N r)   VORGc                     U R                   R                  5        VVs0 s H  u  p#X!R                  ;   d  M  X#_M     snnU l         [        U R                   5      U l        gs  snnf r   )VOriginRecordsrM   r&   r0   numVertOriginYMetricsrj   s       r   rk   rk   O	  s[     ,,2244XX4D "%T%8%8!9D	s
   A!A!opbdc                 
   U R                   R                  nUR                  S:X  aX  UR                   Vs0 s H#  nX2R                  ;   d  M  X2R                  U   _M%     snUl        [        UR                  5      S:  $ UR                  S:X  aX  UR                   Vs0 s H#  nX2R                  ;   d  M  X2R                  U   _M%     snUl        [        UR                  5      S:  $  SUR                  -  5       es  snf s  snf )Nr   r   zunknown 'opbd' format %s)r  OpticalBoundsr   r&   OpticalBoundsDeltasr0   OpticalBoundsPointsr  s       r   rk   rk   X	  s    JJ$$E||q %
!111 4E,,U33!%
!
 5,,-11		 %
!111 4E,,U33!%
!
 5,,-11?05<<??u%
%
s   C;C;D 4D postc                 4    UR                   (       d  SU l        g)N      @T)glyph_names
formatTyper  s      r   rl  rl  m	  s    r)   c                     / U l         gr   )
extraNamesr  s     r   rk   rk   t	  s    DOr)   propc                    U R                   R                  nUR                  S:X  a  UR                  S:g  $ UR                  S:X  a  UR                   Vs0 s H(  o3UR
                  R                  X2R                  5      _M*     snUl        [        UR
                  R                  5       5      R                  S5      S   u  pEXBl        UR
                  R                  5        VVs0 s H  u  p2X$:w  d  M  X2_M     snnWl        [        UR
                  5      S:X  a  U?SUl        UR                  S:g  $ g SUR                  -  5       es  snf s  snnf )Nr   r   Tzunknown 'prop' format %s)r  GlyphPropertiesr   DefaultPropertiesr&   
Propertiesr  r   rY   r  rM   r0   )r%   rf   r  r   r  r  s         r   rk   rk   z	  s(   ::%%D{{a%%**		GHxx
GO!t""1&<&<==x
 #4??#9#9#;<HHKAN
!+#'??#8#8#:
#:d>PGAG#:
 t1$DK))Q..>04;;>>u


s   /E	%E4Ec                 J   ^ [        5       mU4S jnU R                  X5        T$ )Nc                    > U R                   [        R                  R                  [        R                  R                  1;   a  TR                  U R                  5        g g r   )r   r   PaintFormat
PaintGlyphPaintColrGlyphr  Glyph)paintresults    r   callback$_paint_glyph_names.<locals>.callback	  sI    <<  ++  //
 
 JJu{{#	
r)   )r<   traverse)r  colrr  r  s      @r   _paint_glyph_namesr  	  s"    UF$ 
NN4"Mr)   COLRc                    U R                   S:  ak  U R                  U R                  5      U l        U R                  R                  R
                   Vs0 s H  nUR                  UR                  _M     snU l        UR                  nU(       a  [        5       nU H  nU R                  R                  U/ 5       H  nUR                  UR                  5        M      U R                   S:  d  MS  U R                  R                  U5      nUc  Ms  UR                  [        XpR                  5      5        M     XAR                  -  nUR                  R                  U5        UnU(       a  M  g g s  snf ra  )version_decompileColorLayersV0r  ColorLayersBaseGlyphListBaseGlyphPaintRecord	BaseGlyphPaintColorLayersV1r&   r<   r  r  r   rc   r  )r%   rf   r   	decomposelayersr   layerr  s           r   rg   rg   	  s!   ||a
  77

C zz//DD
D MM399$D

 I
A))--a4

5::& 5 ||a**..q1$MM"4UJJ"GH  	((		 )
s   !E,c                 Z   SSK Jn  SSKJnJn  UR
                  Ul        UR                   Vs0 s H#  oUU R                  ;   d  M  XPR                  U   _M%     snU l        U R                  S:X  a  [        U R                  5      $ U" U R                  R                  U R                  R                  5      nU" U Vs0 s H  oUUR                  ;   d  M  XVU   _M     sn5      u  U R                  l        U R                  l        U ?U R                  R                  b`  U R                  R                  R                  nU Vs0 s H  oUUR                  ;   d  M  XWU   _M     snU R                  R                  l        U R                  nU R                  R                  R                   (       d  SU l        U ?
[        U5      $ U" U R                  U VV	s0 s H-  oUX    V	s/ s H  oR"                  U	R$                  4PM     sn	_M/     sn	n5        U ?gs  snf s  snf s  snf s  sn	f s  sn	nf )Nr   )unbuildColrV1)buildColrV1populateCOLRv0T)fontTools.colorLib.unbuilderr	  fontTools.colorLib.builderr
  r  glyphs_colredr&   r  r  ri   r  	LayerListr   r  ClipListclipsr  r   colorID)
r%   rf   r	  r
  r  r   colorGlyphsV1r  layersV0r  s
             r   rk   rk   	  s   :F AH )*(019I9I4IAD ||qD$$%%!$**"6"6

8P8PQM5@&3EmAHH}	!	mE62DJJ$**2 	zz&

##)):?$Q%Q=[Qa[%$Q

!H::##88JH~

LTUHqhkBkUjj%--(kB	BHU 	 = 	F %R CUs;   HH<H	HH	HH' !H"H'"H'CPALc                 6  ^ SU;   a  gUR                  S5      nU(       d  g[        [        5      mU4S jnUR                  S:X  aI  UR                  R                  5        H*  nU H!  nTUR                     R                  U5        M#     M,     OUR                  R                  (       aE  UR                  R                  R                   H!  nTUR                     R                  U5        M#     UR                  R                  R                   H)  nUR                  R                  UR                  U5        M+     [!        TR#                  5       5      S1-
  nU R$                   HG  n	['        U	5       V
Vs/ s H  u  pX;   d  M  UPM     snn
U	S S & [)        U	5      [)        U5      :X  a  MG   e   ['        [+        U5      5       HL  u  pTU    H>  n[-        US5      (       a  Xl        M  [-        US	5      (       a  Xl        M5  [/        U5      e   MN     [)        U R$                  S   5      U l        U R                  S
:X  a>  / n['        U R2                  5       H  u  pX;   d  M  UR                  U5        M     Xl        [5        U R0                  5      $ s  snn
f )NzSVG Tr  Fc                    > [        U S5      (       a  TU R                     R                  U 5        g [        U S5      (       a<  U R                  R                   H!  nTUR                     R                  U5        M#     g g )NPaletteIndex	ColorLine)r  r  r#  r  	ColorStop)r  stopcolors_by_indexs     r   collect_colors_by_index2prune_post_subset.<locals>.collect_colors_by_index
  sh    5.))E../66u=UK((11 1 1299$? 2 )r)   r   r   r  r  r   )r  r   rX   r  r  rY   r  r#  r  LayerRecordArrayLayerRecordr  r   r  r  r  r<   keyspalettesr7   r0   r#   r  AssertionErrornumPaletteEntriespaletteEntryLabelsri   )r%   r'   r   r  r  r  r  re  retained_palette_indicespaletter4   r~   	new_index	old_indexkept_labelslabelr  s                   @r   r   r   	  s(    ~88FD!$'O@ ||q&&--/F.55e<   0 ::&&44@@ 2 23::5A Ajj..CCFLL!!$**.EF D
  #?#7#7#9:fXE==$-g$6X$6DA!:Wa$6X
7|s#;<<<< ! !*&1I*J K	%i0Fvy))!*00&/#$V,, 1 !L !q!12D||q!$"9"9:HA,""5) ; #.&&'') Ys   7JJc                    [        5       nU R                   H  nUR                  UR                  5        M      U R                  (       a8  U R                  R
                   H  nUR                  UR                  5        M      U$ r   )r<   MathGlyphVariantRecordr  VariantGlyphGlyphAssemblyPartRecordsrm   )r%   r&   variantsrN   r   s        r   rg   rg   .
  s]    uH((Q^^$ )##//ALL! 0Or)   c                     [        UR                  5      n[        5       nU R                  (       aQ  U R                  R	                  U5      nU H0  nUR                  U R                  U   R                  U5      5        M2     U R                  (       aQ  U R                  R	                  U5      nU H0  nUR                  U R                  U   R                  U5      5        M2     UR                  R                  U5        g r   )
r  r&   r<   VertGlyphCoverager8   rc   VertGlyphConstructionrg   HorizGlyphCoverageHorizGlyphConstruction)r%   rf   r&   r1  r2   r4   s         r   rg   rg   9
  s    qxx FuH((226:AOOD66q9HHPQ  ))33F;AOOD77:II&QR  HHOOHr)   VARCc                 8   U R                   R                  R                  UR                  5      n[	        U R                   R
                  R                  U5      U R                   R
                  l        [        U R                   R
                  R                  5      $ r   )r  r   r@   r&   r5   VarCompositeGlyphsVarCompositeGlyphri   r%   rf   r2   s      r   rk   rk   K
  si    jj!!((2G6B

%%777DJJ!!3 

--??@@r)   c                 Z   U R                   R                  c  g [        U R                   R                  R                  5       VVs0 s H  u  p#X2_M	     nnnU R                   R                  R
                  nUR                  n[        5       n[        U5      nU(       a  Un	[        5       nU	 Hl  nX7;   a  M
  UR                  U5      n
U
c  M   XZ   nUR                   H8  nUR                  nUR                  U5        X;  d  M'  UR                  U5        M:     Mn     U(       a  M  g g s  snnf r   )r  r9  r7   r   r&   r:  r<   r  
components	glyphNamer  )r%   rf   r4   r>  glyphMapglyphRecordsr&   r  newoldNewidxrm   compr   s                 r   rg   rg   T
  s    zz$$,1:4::;N;N;U;U1VW1V	1VHW::00BBLXXFeG
f+C
eI#,,y)C{ %E((~~

4 &GGDM	 )   # Xs   D'c                    U R                   nUR                  nUb=  [        5       nUR                  U5        UR	                  U5      nUR                  U5        UR                  R                  nUb  [        5       nUR                  R                   H@  n	U	R                   H-  n
U
R                  c  M  UR                  U
R                  5        M/     MB     [        U5      n[        Xx5      UR                  l        [        U5       VVs0 s H  u  pX_M	     nnnUR                  R                   H8  n	U	R                   H%  n
U
R                  c  M  XR                     U
l        M'     M:     UR                   nUb  UR"                  n[        5       nUR                  R                   H@  n	U	R                   H-  n
U
R$                  c  M  UR                  U
R$                  5        M/     MB     [        U5      n[        X5      Ul        [        U5       VVs0 s H  u  pX_M	     nnnUR                  R                   H8  n	U	R                   H%  n
U
R$                  c  M  XR$                     U
l        M'     M:     gs  snnf s  snnf r   )r  MultiVarStorer<   collect_varidxesr  remap_varidxesAxisIndicesListItemr9  r:  r=  axisIndicesIndexr  r#   r5   r7   ConditionListConditionTableconditionIndex)r%   r'   r   r  r  r  r  axisIndicesListusedIndicesrm   rD  rA  oldrd   conditionListconditionTabless                   r   r   r   p
  s+   JJEEu|,**<8
Z(++00O"e--??E((((4OOD$9$9: ) @ [)%1/%O",5k,BC,B38,BC--??E((((4,34I4I,JD) ) @
 ''M '66e--??E((&&2OOD$7$78 ) @ [)'3O'Q$,5k,BC,B38,BC--??E((&&2*12E2E*FD' ) @
 - D  Ds   	I8I>MATHc                     U R                   R                  (       a&  U R                   R                  R                  U5        g g r   )r  MathVariantsrg   r  s     r   rg   rg   
  s,    zz

..q1 r)   c                     U R                   R                  UR                  5      n[        U R                  U5      U l        [        U R                  5      U l        [        U R                  5      $ r   )r   r@   r&   r5   ItalicsCorrectionr0   ItalicsCorrectionCountri   r;  s      r   rk   rk   
  sS    mm""188,G)$*@*@'JD"%d&<&<"=D++,,r)   c                     U R                   R                  UR                  5      n[        U R                  U5      U l        [        U R                  5      U l        [        U R                  5      $ r   )TopAccentCoverager@   r&   r5   TopAccentAttachmentr0   TopAccentAttachmentCountri   r;  s      r   rk   rk   
  sU    $$++AHH5G+D,D,DgND$'(@(@$AD!--..r)   c                     U R                   R                  UR                  5      n[        U R                  U5      U l        [        U R                  5      U l        [        U R                  5      $ r   )MathKernCoverager@   r&   r5   MathKernInfoRecordsr0   MathKernCountri   r;  s      r   rk   rk   
  sU    ##**1884G+D,D,DgNDT556D""##r)   c                 x   U R                   (       a  U R                   R                  U5        U R                  (       a  U R                  R                  U5        U R                  (       a  U R                  R                  U5        U R                  (       a%  U R                  R                  UR                  5        gr   )MathItalicsCorrectionInfork   MathTopAccentAttachmentMathKernInfoExtendedShapeCoverager@   r&   r  s     r   rk   rk   
  s}    %%&&44Q7##$$2215''*!!""))!((3r)   c                    U R                   (       aZ  U R                   R                  UR                  5      n[        U R                  U5      U l        [        U R                  5      U l        U R                  (       aZ  U R                  R                  UR                  5      n[        U R                  U5      U l        [        U R                  5      U l	        gr   )
r3  r@   r&   r5   r4  r0   VertGlyphCountr5  r6  HorizGlyphCountr;  s      r   rk   rk   
  s    ((//9%1$2L2Lg%V"!$"<"<=))00:&243N3NPW&X#"4#>#>?r)   c                 &   UR                   Ul        U R                  R                  (       a%  U R                  R                  R	                  U5        U R                  R
                  (       a%  U R                  R
                  R	                  U5        gr   )glyphs_mathedr&   r  MathGlyphInfork   rV  r  s     r   rk   rk   
  sZ    AHzz

  ..q1zz

--a0r)   glyfc                    U R                   (       a+  [        R                  " SU R                   S S 5      S   S:  a  g [        U R                   5      =o l         SnSnU(       a  X#   S-  X#S-      -  nX#S-      S-  X#S-      -  nX   nUS-	  X#S-   '   US-  X#S-   '   US	-  n[	        U5      nUS-  (       a  US	-  nOUS-  nUS-  (       a  US-  nOUS
-  (       a  US	-  nOUS-  (       a  US-  nUS-  nU(       a  M  g g )Nz>hr   r   
   r      r      rY  @          )datastructunpack	bytearrayr   )r%   
glyphidmapru  r4   moreflagsglyphIDs          r   remapComponentsFastr}  
  s   99dDIIbqM:1=B ++D9
AD
A!e,A;!#tE{2%lUnU	QE
6>FAFA6>FAV^FAV^FAv~) $r)   c                 :   U R                   nUR                   nU(       a|  [        5       nU H7  nXR;  a  M
  X%   nUR                  U 5       H  nUR                  U5        M     M9     XAR                   -  nUR                   R	                  U5        UnU(       a  M{  g g r   )r&   r<   getComponentNamesr  rc   )r%   rf   glyphSetr  r=  r   glr~   s           r   rg   rg   
  s    {{HI
U
A B))$/q! 0	  	hh
	
#	 )r)   c                     UR                   (       aC  UR                  (       d2  X R                  S      nUR                  R	                  5         SUl        g)Nr   r)   T)r  r  r  __dict__clearru  )r%   r'   r   r   s       r   rl  rl    s>    G$:$:#$	

r)   c                    [        U R                  UR                  5      U l        UR                  R                  (       d  [	        U R
                  5       VVs/ s H  u  p#X1R                  ;   d  M  UPM     nnn[	        U5       VVs0 s H  u  pVXe_M	     nnnU R                  R                  5        H'  n[        US5      (       d  M  UR                  U5        M)     [        R                  " S5      R                  n	UR                   H+  nU	" 5       U R                  U'   SU R                  U   l        M-     U R
                   Vs/ s H%  o3UR                  ;   d  X1R                  ;   d  M#  UPM'     snU l        gs  snnf s  snnf s  snf )Nru  rm  r)   T)r-   r&   r   r  r7   r  rY   r  r}  r   getTableModuler  r  ru  )
r%   rf   r4   r   r2   r=  oglyphmaprN   r  s
             r   rk   rk     s-   t{{AHH5DK99  !*4??!;M!;qHH}1!;M%.w%78%7TQAD%78##%Aq&!!%%h/ &   (..EA!A  ??"a188mq<L<L7L?DO  N8s   E=2E=	F"F	.F	c                     UR                   (       + nU R                  R                  5        H  nUR                  US9  M     g)N)remove_hintingT)r   r&   rY   trim)r%   r'   r   r  rN   s        r   r   r   .  s6     (N[[!	n- "r)   cmapc                   ^ U R                    Vs/ s H  o"R                  5       (       d  M  UPM     nnUR                  R                  (       aY  [	        5       nUR
                   H$  n[        U5      nUc  M  UR                  U5        M&     UR
                  R                  U5        U H  nUR                  S:X  a  UR                  R                  5        Hp  u  nmXR
                  ;  a  M  T VV	s1 s H  u  pYXQR
                  ;   d  M  U	iM     n
nn	S U
;   a  U
R                  S 5        UR                  R                  U
5        Mr     M  UR                  mUR
                  R                  TR!                  5       5      nUR                  R                  U4S jU 5       5        M     UR
                  R#                  5       Ul        U H(  nUR$                  R'                  UR                  5        M*     g s  snf s  sn	nf )N   c              3   .   >#    U  H
  nTU   v   M     g 7fr   r   )r   ur  s     r   r   ra   P  s     :\DG\r!   )tables	isUnicoder   bidi_closurer<   unicodes_requestedr   r  rc   formatuvsDictrM   rn  r&   r  r   r!  r  unicodes_missingdifference_update)r%   rf   r  r  additional_unicodesr  mirror_ur  varSelectorr   r&   r   r  s               @r   rg   rg   6  s   6AaF6 	yy!e%%A{H##''1 & 	
##$78 <<2%*]]%8%8%:!T&:&::(,J5I5I0I!J6>MM$'' &; ::D//<<TYY[ILHHOO:\::  --224A	,,UZZ8 9 7" Ks   G9G93G>
G>
c                 
   UR                   (       dM  U R                   Vs/ s H0  o3R                  5       (       d  UR                  5       (       d  M.  UPM2     snU l        UR                  (       d8  U R                   Vs/ s H  o3R                  5       (       a  M  UPM     snU l        U R                   Vs/ s H  o3R
                  S:w  d  M  UPM     snU l        [        U R                  5      U l        gs  snf s  snf s  snf r  )legacy_cmapr  r  isSymbolsymbol_cmapr  r0   numSubTablesr  s       r   rl  rl  X  s    "&++O+Q!**,q+O"&++B+QZZ\q+B #kk;kXX]1k;DKDKK(D PB <s#   -C6C6>C;C;6D D c                    S Ul         / n0 n0 nU R                   GHC  nUR                  S:X  a  UR                  S:X  a  XSUR                  '   UR                  S:X  a  UR                  S:X  a  XTUR                  '   UR
                  S:X  a  UR                  R                  5        VVVV	s0 s HO  u  pgXaR                  ;   d  M  UU VV	s/ s H(  u  pXR                  ;   d  XR                  ;   d  M%  X4PM*     sn	n_MQ     sn	nnnUl        UR                  R                  5        VVs0 s H  u  pgU(       d  M  Xg_M     snnUl        GM0  UR                  5       (       a  UR                  R                  5        VV	s0 s H'  u  pXR                  ;   d  XR                  ;   d  M%  X_M)     sn	nUl        UR
                  S:X  aR  UR                  (       a>  [        UR                  R                  5       5      S:  a  UR                  U5        GM  GM  GM  GM  UR                  R                  5        VV	s0 s H  u  pXR                  ;   d  M  X_M     sn	nUl        GMF     U H  nUR                  S:X  ab  UR                  S:X  aR  UR                  U;   aB  X5R                     R                  UR                  :X  a  UR                  R                  5         Mu  UR                  S:X  d  M  UR                  S:X  d  M  UR                  U;   d  M  XER                     R                  UR                  :X  d  M  UR                  R                  5         M     U R                   Vs/ s H;  oUR
                  S:w  a  UR                  (       d  M%  OUR                  (       d  M9  UPM=     snU l        [!        U R                  5      U l        g	s  sn	nf s  sn	nnnf s  snnf s  sn	nf s  sn	nf s  snf )
Nr   r   r   r     rs  rY  ro  T)r&   r  
platformID	platEncIDlanguager  r  rM   r  glyphs_requestedr  r  maxr!  r#  r  r0   r  )
r%   rf   tables_format12_bmptable_plat0_enc3table_plat3_enc1r  rN   r1   r  r   s
             r   rk   rk   f  s   AH[[<<1!1+,QZZ(<<1!1+,QZZ(88r> IIOO- .DA,,, ! !...!7K7K2K QF ! 
 .AI +,))//*;A*;$!q*;AAI[[]] FFLLN*DA***a3G3G.G *AF xx2~!&&S-?'-I#**1- .J&~ ()vv||~Q~tq>P>P9Pdad~QAF? F !LLAq 

.. ,11QVV;FFLLNLLAr!

.. ,11QVV;FFLLN !  #kkWkBaff1fAII1kWDKDKK(D [ B R( XsZ   )OO$O0O7O'O8O<$O$O5O"O"#$O(O(O(ODSIGc                      SU l         / U l        gr  )	usNumSigssignatureRecordsr  s      r   rl  rl    s     DNDr)   maxpc                     UR                   (       dA  U R                  S:X  a1  SU l        SU l        SU l        SU l        SU l        SU l        SU l        g)Nrs  r   r   T)	r   tableVersionmaxZonesmaxTwilightPoints
maxStoragemaxFunctionDefsmaxInstructionDefsmaxStackElementsmaxSizeOfInstructionsr  s      r   rl  rl    sP    ??
*DM%&D"DO#$D &'D#$%D!)*D&r)   r   c                    [        5       nUR                  U5        [        UR                  5      UR                  -  nSUR                  ;   a:  X@R
                   Vs1 s H   oUR                  S:  d  M  UR                  iM"     sn-  nU R
                   Vs/ s H  oUR                  U;   d  M  UPM     snU l        UR                  (       d8  U R
                   Vs/ s H  oUR                  5       (       d  M  UPM     snU l        SUR                  ;  a=  U R
                   Vs/ s H   oUR                  UR                  ;   d  M  UPM"     snU l        UR                  (       a  / nU R
                   H  nUR                  S;   a.  UR                  5       (       a  SR                  S5      OSUl        OhUR                  S;   a.  UR                  5       (       a  SR                  S5      OSUl        O*UR                  S:X  a  S	Ul        OUR                  S
;   a  M  UR                  U5        M     X`l        gs  snf s  snf s  snf s  snf )Nr      )r   rY  z.	utf_16_be)r      r   r"  )         T)r   visitr<   name_IDsseenr:  nameIDname_legacyr  name_languageslangIDobfuscate_namesencodestringr#  )r%   r'   r   visitornameIDsr=  namerecss          r   r   r     s   !GMM$'""#gll2G
gjjCjHHsNHAHHjCC!ZZ?Z88w+>!Z?DJ "&=A{{}a=

'(((!%RAxx7;Q;Q/QaR
Axx6!:;++--7>>+6WV#9:6==5FQ\)OOA  
/ D? > Ss0   H53H5H:-H:H?6H?"IIheadc                     gr   r   r  s      r   r   r     s     r)   c                      \ rS rSr " S S\5      r " S S\5      r/ SQr\/ SQ-  r/ SQr/ S	Qr	/ S
Q/ SQ/ SQ/ SQSS/SS/S/S// SQ/ SQ/ SQ/ SQ/ SQ/ SQS.r
\" \" \" \
R                  5       5      / 5      5      rS rS r/ 4S jrSrg) Optionsi  c                       \ rS rSrSrg)Options.OptionErrori  r   Nrv  r  r  r  r  r   r)   r   OptionErrorr        r)   r  c                       \ rS rSrSrg)Options.UnknownOptionErrori  r   Nr  r   r)   r   UnknownOptionErrorr    r  r)   r  )BASEJSTFr  r>  r6  EBSCPCLTLTSH)FeatGlatGlocSilfSill)avarfvargaspr  hhear  vheaOS/2locar   cvtfpgmprepVDMXr  r  MVARcvarSTAT)r  r  r  r  r  r  )rvrnccmpligaloclmarkmkmkrlig)fracnumrdnom)caltcligcursr  rclt)valtvertvkrnvpalvrt2ltraltrmrtlartlmrandjalt)HarfHARFBuzzBUZZ)chwsvchwhaltvhal)
initmedifinaisolmed2fin2fin3cswhmsetstch)ljmovjmotjmo)abvsblwsabvmblwm)nuktakhnrphfrkrfr   blwfhalfabvfpstfcfarvatucjctr  presr   r!  pstshalndistr"  r#  )common	fractions
horizontalverticalltrrtlr	  justifyprivateeast_asian_spacingarabichangultibetanindicc                    U R                   S S  U l        U R                  S S  U l        SU l        U R
                  S S  U l        SU l        SU l        U R                  S S  U l
        S/U l        SU l        SU l        SU l        SU l        SU l        SU l        / SQU l        SU l        S/U l        SU l        SU l        SU l        SU l        SU l        SU l        SU l        SU l        SU l        SU l        SU l        S U l         S U l!        SU l"        SU l#        [H        RJ                  U l&        SU l'        SU l(        SU l)        SU l*        SU l+        SU l,        SU l-        U R\                  " S0 UD6  g )NFTr   )r   r   r   r   rY     r  i	  r  r   )/_drop_tables_defaultdrop_tables_no_subset_tables_defaultno_subset_tablespassthrough_tables_hinting_tables_defaulthinting_tableslegacy_kernlayout_closure_layout_features_defaultrk  rj  ignore_missing_glyphsignore_missing_unicodesr   r  r  r  r  r  r  r  r  r  r  recommended_glyphsrecalc_boundsrecalc_timestampprune_unicode_rangesprune_codepage_rangesrecalc_average_widthrecalc_max_contextcanonical_orderflavorwith_zopflidesubroutinizer   defaultharfbuzz_repackerverbosetimingxmlfont_number
pretty_svglazyr  r<   )r%   kwargss     r   r  Options.__init__T  s   44Q7 $ > >q A"'"::1= "#<<Q?"e%*"'+$   
 !%h$  #"'" %$(!%)"$)!"'# #!6!>!>	 6r)   c                     UR                  5        H5  u  p#[        X5      (       d  U R                  SU-  5      e[        XU5        M7     g )NUnknown option '%s')rM   r  r  r   )r%   ra  r  rN   s       r   r<   Options.set  s@    LLNDA4##--.Ca.GHHDQ #r)   c                 N   / n/ nU GH  nUnUR                  S5      (       d  UR                  U5        M/  USS  nUR                  S5      nSnUS:X  aI  UR                  S5      (       a  USS  n	U	S:X  a  S n
OSn
OUn	S	n
U	R                  S
5      (       a  U	S S n	S
n
O"US U n	U	S   S;   a  U	S   S-   nU	S S n	XWS-   S  n
U	nU	R	                  SS5      n	[        X	5      (       d1  US	L d  X;   a  UR                  U5        M  U R                  SU-  5      e[        X	5      nU
S
:X  a  [        SU< SU< 35        GM4  [        U[        5      (       a  [        U
5      n
GO0[        U[        5      (       a  [        U
5      n
GO[        U[        5      (       a  [        U
5      n
O[        U[        5      (       a  [        U
[        5      (       a  U R                  SU-  5      eU
R	                  SS5      R                  5       nUS/:X  a  / nU Vs/ s H*  n[!        U5      (       a  US   S;   a  [        US5      OUPM,     nnUS:X  a  Un
OFUS:X  a  Un
U
R#                  U5        O,US:X  a$  Un
U H  nX;   d  M
  U
R%                  U5        M     O e['        X	U
5        GM     X4-   $ s  snf )Nz--r   =r  zno-r   zcanonical-orderFT?z-+r   -_rd  zCurrent setting for 'z' is: z5Option '%s' requires values to be specified using '=', r"  r   
0123456789z+=z-=)rx  r#  findrw  replacer  r  r   printr  ri   r   strrX   r  r[  r0   r  rn  r   )r%   argvignore_unknownposargspassthru_optionsr   orig_ar4   opr  rN   okovvvr:  s                  r   
parse_optsOptions.parse_opts  s   AF<<%%q!!"AsABBw<<&&!"A-- !!AA::c??#2AAbqER5D=2B#2A!egJB		#s#A4##!T)R-A$++F3112G!2KLL!BCx2rBC"d##GB$$FB$$FB%%a&&**ORSS  YYsC(..0":BSUVSUa3q66adl.Bc!QiISUV9A4ZAHHRL4ZA6HHQK   !5DQM P ))! Ws   1J")(r  rU  rX  rC  rV  r^  r  rZ  r   rH  rL  rM  rJ  rk  rj  r`  r  rI  r  r  r  rE  r  r  r  rF  r_  rR  rQ  rS  rO  rT  rP  rN  r  r  r\  r[  rW  r]  N)rv  r  r  r  	Exceptionr  r  rB  rD  rG  _layout_features_groupsr   r  iterrY   rK  r  r<   r{  r  r   r)   r   r  r    s    i [ 	 DD!* N
 K-><83>
 +3
72f  *D(//12B7 2h  /1 K*r)   r  c                       \ rS rSr " S S\5      r " S S\5      r " S S\5      rSS	 jr/ / / S
4S jr	S r
S rS rS rS rS rSrg)	Subsetteri  c                       \ rS rSrSrg)Subsetter.SubsettingErrori  r   Nr  r   r)   r   SubsettingErrorr    r  r)   r  c                       \ rS rSrSrg)&Subsetter.MissingGlyphsSubsettingErrori  r   Nr  r   r)   r   MissingGlyphsSubsettingErrorr    r  r)   r  c                       \ rS rSrSrg)(Subsetter.MissingUnicodesSubsettingErrori  r   Nr  r   r)   r   MissingUnicodesSubsettingErrorr    r  r)   r  Nc                     U(       d
  [        5       nXl        [        5       U l        [        5       U l        [        5       U l        g r   )r  r   r<   r  glyph_names_requestedglyph_ids_requested)r%   r   s     r   r  Subsetter.__init__  s/    iG"%%%(U"#&5 r)   r"  c                    U R                   R                  U5        [        U[        5      (       a  UR	                  S5      nUR                  S5      n[        U5      S-  n[        R                  " SU-  U5       H  nU R                   R                  U5        M      U R                  R                  U5        U R                  R                  U5        g )Nutf_8z	utf-32-berY  z>%dL)r  rc   r  bytesdecoder  r0   rv  rw  r  r  r  )r%   r&   gidsunicodestext
text_utf32ncharsr  s           r   populateSubsetter.populate  s    &&x0dE"";;w'D[[-
ZA%v
;A##''* <""))&1  ''-r)   c                 0   U R                  U5       GH^  nUR                  5       U R                  R                  ;   dj  UR                  5       U R                  R                  ;   a  U R                  R
                  (       a'  US:X  a;  U R                  R                  (       d   SU;   a  [        R                  SU5        X	 M  [        R                  " U5      n[        US5      (       d  M  [        SU-  5         X   nS S S 5        [        SU-  5         WR                  XR                  5      nS S S 5        W(       d  [        R                  SU5        X	 GMH  [        R                  SU5        GMa     g ! , (       d  f       N~= f! , (       d  f       N]= f)	Nr  rJ  z
%s droppedrl  z	load '%s'
prune '%s'%s pruned to empty; dropped	%s pruned)_sort_tablesstripr   rC  rH  r   rI  logr"   r   rN  r  timerrl  r%   r'   rb  clazzr  retains         r   _prune_pre_subsetSubsetter._prune_pre_subset  s   $$T*C		t||777IIK4<<#>#>> LL006M4<<+C+CRVs+I'',Eu011;,- IE .<#-."33D,,GF /HH:C@	HH[#.3 +  .-..s   9E6F6
F	
F	c           	        ^
 [        UR                  5       5      nUR                  5       =U l        m
[        5       U l        U R                  R	                  U R
                  5        U R                  R	                  U
4S jU R                   5       5        [        5       U l        U R                  R	                  U R                  R                  U5      5        U R                  R	                  U
4S jU R                   5       5        U R                  (       aV  [        R                  SU R                  5        U R                  R                  (       d  U R                  U R                  5      eU R                  R                  5       U l        [        5       U l        SU;   aC  [#        S5         US   R%                  U 5        U R                  R'                  U5        S S S 5        [)        U R                  5      U l        U R                   (       ab  U R                    Vs/ s H  nSU-  PM
     nn[        R                  SU5        U R                  R,                  (       d  U R/                  U5      eAU R                  R0                  (       av  SU;   a@  U R                  R3                  UR5                  S	5      5        [        R                  S
5        O0U R                  R3                  S5        [        R                  S5        U R                  R6                  (       ax  SU;   ar  [9        [;        S[=        UR                  5       5      5      5       H-  nU R                  R3                  UR5                  U5      5        M/     [        R                  S5        SU;   a  [#        S5         [        R                  S[=        U R                  5      5        [        R                  U R                  US9  US   R%                  U 5        U R                  R'                  U5        [        R                  S[=        U R                  5      5        [        R                  U R                  US9  S S S 5        [)        U R                  5      U l        U R                  R@                  (       a  SU;   a  [#        S5         [        R                  S[=        U R                  5      5        [        R                  U R                  US9  US   R%                  U 5        U R                  R'                  U5        [        R                  S[=        U R                  5      5        [        R                  U R                  US9  S S S 5        [)        U R                  5      U l!        S GH  nXa;   a  [#        SU-  5         [        R                  SU[=        U R                  5      5        [        R                  U R                  US9  X   R%                  U 5        U R                  R'                  U5        [        R                  SU[=        U R                  5      5        [        R                  U R                  US9  S S S 5        [E        U SURG                  5        S3[)        U R                  5      5        GM     SU;   a  [#        S5         [        R                  S [=        U R                  5      5        [        R                  U R                  US9  US   R%                  U 5        U R                  R'                  U5        [        R                  S![=        U R                  5      5        [        R                  U R                  US9  S S S 5        [)        U R                  5      U l$        SU;   a  [#        S"5         [        R                  S#[=        U R                  5      5        [        R                  U R                  US9  US   R%                  U 5        U R                  R'                  U5        [        R                  S$[=        U R                  5      5        [        R                  U R                  US9  S S S 5        [)        U R                  5      U l$        S%U;   a  [#        S&5         [        R                  S'[=        U R                  5      5        [        R                  U R                  US9  US%   R%                  U 5        U R                  R'                  U5        [        R                  S([=        U R                  5      5        [        R                  U R                  US9  S S S 5        [)        U R                  5      U l%        [)        U R                  5      U l&        URO                  5       nU RL                   Vs0 s H  oXx   _M	     snU l(        [S        U RP                  RU                  5       5      U l+        UR                  5       U RV                     U l,        [)        5       U l-        U R                  R\                  (       a8  X RL                  -
   Vs1 s H  nXx   U RV                  ::  d  M  UiM     snU l-        U RZ                   Vs0 s H  oXx   _M	     snU l/        U R                  R\                  (       d$  T
 Vs/ s H  oU RL                  ;   d  M  UPM     n	nO2T
 Vs/ s H%  oRa                  U5      U RV                  ::  d  M#  UPM'     n	nXl1        [9        [=        U	5      5       Vs0 s H
  oWX      U_M     snU l2        [        R                  S)[=        U RL                  5      5        U ?g ! , (       d  f       G	N= fs  snf ! , (       d  f       GN&= f! , (       d  f       GN,= f! , (       d  f       GND= f! , (       d  f       GNH= f! , (       d  f       GNi= f! , (       d  f       GN= fs  snf s  snf s  snf s  snf s  snf s  snf )*Nc              3   N   >#    U  H  o[        T5      :  d  M  TU   v   M     g 7fr   r/   r   r4   glyph_orders     r   r   ,Subsetter._closure_glyphs.<locals>.<genexpr>  s%      %
$<qCDT@TNKN$<s   %%c              3   H   >#    U  H  o[        T5      :  d  M  Uv   M     g 7fr   r/   r  s     r   r   r  "  s!      #
/!K8H3HAA/s   "	"zMissing requested glyphs: %sr  zclose glyph list over 'cmap'zU+%04Xz)Missing glyphs for requested Unicodes: %srm  r   zAdded gid0 to subsetz.notdefzAdded .notdef to subsetrY  z!Added first four glyphs to subsetrT  zclose glyph list over 'MATH'z0Closing glyph list over 'MATH': %d glyphs before)r'   z.Closed glyph list over 'MATH': %d glyphs afterrC  zclose glyph list over 'GSUB'z0Closing glyph list over 'GSUB': %d glyphs beforez.Closed glyph list over 'GSUB': %d glyphs after)r  r  zclose glyph list over '%s'z.Closing glyph list over '%s': %d glyphs beforez,Closed glyph list over '%s': %d glyphs afterglyphs_edr7  zclose glyph list over 'VARC'z0Closing glyph list over 'VARC': %d glyphs beforez.Closed glyph list over 'VARC': %d glyphs afterzclose glyph list over 'glyf'z0Closing glyph list over 'glyf': %d glyphs beforez.Closed glyph list over 'glyf': %d glyphs afterzCFF zclose glyph list over 'CFF 'z0Closing glyph list over 'CFF ': %d glyphs beforez.Closed glyph list over 'CFF ': %d glyphs afterzRetaining %d glyphs)3r<   getGlyphOrderorig_glyph_orderr  rc   r  r  glyphs_missing
differencer  r"   r   rL  r  r  r&   r  r  rg   intersection_updater  glyphs_cmapedrM  r  r  r  getGlyphNamerN  r  minr0   rk  rJ  rL  r   lowerglyphs_glyfedglyphs_cffedglyphs_retainedr$   r  r  rY   r  r  r  r  r  
getGlyphIDnew_glyph_orderglyph_index_map)r%   r'   
realGlyphsr  missingr4   r  orderr   r  r  s             @r   _closure_glyphsSubsetter._closure_glyphs  s   ++-.
.2.@.@.BB #$$T%?%?@$$ %
$($<$<%
 	
 "e""4#8#8#C#CJ#OP"" #
//#
 	
 HH3T5H5HI<<55778K8KLL++002 #T>56V++D1//
; 7 't{{3  -1-B-BC-Bx!|-BGCHH@'J<<7799'BB<<$$~ 1 1! 45/0	*23<<**~s1c$*<*<*>&?@AAKKOOD$5$5a$89 B<=T>56FDKKHX 

4;;T
2V++D1//
;Dc$++FV 

4;;T
2 7 't{{3<<&&6T>56FDKKHX 

4;;T
2V++D1//
;Dc$++FV 

4;;T
2 7 't{{3%E}7%?@HHHDKK(
 JJt{{J6K..t4KK33J?HHFDKK(
 JJt{{J6 A DGEKKM?"5y7MN# && T>56FDKKHX 

4;;T
2V++D1//
;Dc$++FV 

4;;T
2 7 't{{3T>56FDKKHX 

4;;T
2V++D1//
;Dc$++FV 

4;;T
2 7 't{{3T>56FDKKHX 

4;;T
2V++D1//
;Dc$++FV 

4;;T
2 7 &dkk2(5'')9=9M9M#N9MAuxK9M#N #&t'?'?'F'F'H#I #'#5#5#78P8P#Q 'k<<## $&:&::#:A8t777 :#D =A<O<O&P<Oq%({<O&P#||''*5S+Qd>R>R9Rq+OSO '&a//!*<@X@X*X;    /27O8L2M 
2MQ/$%q(2M 
 	&D,@,@(ABKi 76
 D( 76 76 A@$ 76 76 76  $O# 'Q T 
s   -0m-m?'B>n3B>n,B?n(;B>n:,B>oB>o5o0o5)o5o::o?o?"pp(p	-
m<
n
n%(
n7	:
o	
o
o-c                 >   / U l         U R                  U5       GH/  n[        R                  " U5      nUR	                  5       U R
                  R                  ;   a  [        R                  SU5        MZ  [        US5      (       ax  [        SU-  5         X   nU R                  U l        UR                  U 5      nU ?S S S 5        W(       d  [        R                  SU5        X	 M  [        R                  SU5        M  U R
                  R                  (       a  [        R                  SU5        GM  [        R                  SU5        X	 GM2     [        S5         UR!                  U R"                  5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)	Nz%s subsetting not neededrk   zsubset '%s'z%s subsetted to empty; droppedz%s subsettedz'%s NOT subset; don't know how to subsetz0%s NOT subset; don't know how to subset; droppedzsubset GlyphOrder)r  r  r   rN  r  r   rE  r  r"   r  r  r  r&   rk   rF  warningsetGlyphOrderr  r  s         r   _subset_glyphsSubsetter._subset_glyphs  s/    $$T*C'',Eyy{dll;;;3S900=3./ IE"&"6"6DK"006F	 0
 HH=sC	HH^S100BCHNPSTI) +, &'t334 ('! 0/  ('s   )E=F=
F	
Fc                 
   UR                  5       nSU;   a"  UR                  S5        UR                  S5        U GH3  nUS:X  a  M  US:X  Ga  U R                  R                  (       aI  X   R                  5       nX   R                  USS9nXE:w  a   [        R                  SU[        U5      5        U R                  R                  (       a[  X   R                  S:  aI  X   R                  5       nX   R                  USS9nXg:w  a   [        R                  SU[        U5      5        U R                  R                  (       a<  X   R                  nX   R!                  U5      n	X:w  a  [        R                  S	X95        U R                  R"                  (       a<  [%        U5      n
XU   R&                  :w  a  XU   l        [        R                  S
X:5        [(        R*                  " U5      n[-        US5      (       d  GM  [/        SU-  5         X   nUR1                  XR                  5      nS S S 5        W(       d  [        R                  SU5        X	 GM  [        R                  SU5        GM6     g ! , (       d  f       NL= f)Nr   
GlyphOrderr  T)	pruneOnlyz%s Unicode ranges pruned: %sr   z%s CodePage ranges pruned: %sz%s xAvgCharWidth updated: %dz%s usMaxContext updated: %dr   r  r  r  )r!  rn  r#  r   rQ  getUnicodeRangesrecalcUnicodeRangesr  r"   r#   rR  r  getCodePageRangesrecalcCodePageRangesrS  xAvgCharWidthrecalcAvgCharWidthrT  r   usMaxContextr   rN  r  r  r   )r%   r'   	tableTagsrb  old_unirangesnew_unirangesold_codepagesnew_codepagesold_avg_widthnew_avg_widthmax_contextr  r  r  s                 r   _prune_post_subsetSubsetter._prune_post_subset  s
   IIK	 YV$V$Cl"f}<<44$(I$>$>$@M$(I$A$A$RV$A$WM$5:CAV <<55$):K:Kq:P %)I$?$?$AM$(I$B$B4SW$B$XM$5;"=1
 <<44$(I$;$;M$(I$@$@$FM$5!?T<<22",T"2K"3i&<&<<1<S	.!>Q'',Eu122<#-. IE"44T<<HF / HH:C@	HH[#.S D /.s    I44
J	c                    ^ / SQm[        T5       VVs0 s H
  u  p#X2S-   _M     snnm[        UR                  5       U4S jS9nU Vs/ s H  o3S:w  d  M
  UPM     sn$ s  snnf s  snf )N)rv  rJ  rC  r  r  r  r   rm  r   c                 (   > TR                  U S5      $ ra  )r  )rb  tagOrders    r   r'  (Subsetter._sort_tables.<locals>.<lambda>  s    8<<Q3Gr)   )r  r  )r7   r#   r!  )r%   r'   r4   r  r_  r  s        @r   r  Subsetter._sort_tables  s`    S)28)<=)<A1uH)<=diik'GH54a#4455 >5s   A		A%A%c                     U R                  U5        U R                  U5        U R                  U5        U R                  U5        g r   )r  r  r  r  )r%   r'   s     r   r@   Subsetter.subset  s:    t$T"D!%r)   )r  r  r  r&   r  r  r  r  rL  rk  r  r  r  r  r  r  r   r  r  r  r  r  r  r   )rv  r  r  r  r}  r  r  r  r  r  r  r  r  r  r  r@   r  r   r)   r   r  r    s\    )   ) !rBR 	./8l\561/f6&r)   r  z	load fontc           	      ,   [         R                  " U UUR                  UR                  UUR                  S9nU(       aU  [         R
                  " S5      nUR                  nUR                  Ul        US   nUR                  S:X  a  SUl        Xvl        U$ )N)checkChecksumsrecalcBBoxesrecalcTimestampr`  
fontNumberr  g       @r  )	r   TTFontrO  rP  r^  rN  decode_format_2_0decode_format_3_0r  )	fontFiler   r  dontLoadGlyphNamesr`  r'   r  savedr  s	            r   	load_fontr    s    <<%**00&&D$ ""6*&&!%!7!7L<<3AL!&Kr)   zcompile and save fontc                     UR                   (       a  UR                  S:X  a  SSKJn  SUl        UR                  U l        UR
                  U R                  [        '   U R                  XR                  S9  g )Nwoffr   )sfntT)reorderTables)
rW  rV  fontTools.ttLibr  
USE_ZOPFLIrZ  cfgr   saverU  )r'   outfiler   r  s       r   	save_fontr  ?  sT    w~~7(..DK&-&?&?DHH"#IIg%<%<I=r)   c           
      r   SS K nUR                  SSU 5      n UR                  SSU 5      n / nU R                  5        Hv  nUR                  S5      n[        U5      S:X  a  UR	                  [        US5      5        M@  Uu  pVUR                  [        [        US5      [        US5      S-   5      5        Mx     U$ )Nr   z0[xX]rl  z[<+>,;&#\\xXuU\n	]ri  r   r  )rerq   r[  r0   r#  r   r  r  )rf   r  r1   itemfieldsstartends          r   parse_unicodesr  J  s    
xa A
$c1-A
A	Cv;!HHSr]#JEHHU3ub>3sB<!+;<=  Hr)   c           
      B   / nU R                  SS5      R                  5        Hx  nUR                  S5      n[        U5      S:X  a  UR                  [	        US   5      5        MB  UR                  [        [	        US   5      [	        US   5      S-   5      5        Mz     U$ )Nrk  rl  ri  r   r   )ro  r[  r0   r#  r   r  r  )rf   r1   r  r  s       r   
parse_gidsr  Z  s    
A		#s#))+Cv;!HHS^$HHU3vay>3vay>A+=>? , Hr)   c                 B    U R                  SS5      R                  5       $ )Nrk  rl  )ro  r[  )rf   s    r   parse_glyphsr  e  s    99S#$$&&r)   c                  n    [        S[        [        R                  S9  [        S[        R                  S9  g )Nzusage:filez,Try pyftsubset --help for more information.
)rp  	__usage__sysstderrr   r)   r   usager
  i  s!    	(ICJJ/	
9

Kr)   z%make one with everything (TOTAL TIME)c           
         SSK Jn  SSKJn  U c  [        R
                  SS n SU ;   a  [        [        5        g[        5       n UR                  U / SQS9n [        U 5      S:  a  [        5         gU" UR                  (       a  [        R                   O[        R"                  S9  UR$                  (       a.  [&        R(                  R+                  [        R,                  5        OS[&        R(                  l        U S   nU SS n [1        US9nSn/ n/ n	/ n
SnSnSnU  GH  nUS:X  a  SnM  UR3                  S5      (       a  USS nM+  UR3                  S5      (       a	  XSS -  nMJ  UR3                  S5      (       a:  [5        USS SS9 nXR7                  5       R9                  SS5      -  nSSS5        M  UR3                  S5      (       a+  USS S:X  a  SnOU
R;                  [=        USS 5      5        M  UR3                  S5      (       a]  [5        USS 5       nUR?                  5        H/  nU
R;                  [=        URA                  S5      S   5      5        M1     SSS5        GMN  UR3                  S 5      (       a   U	R;                  [C        USS 5      5        GM  UR3                  S!5      (       a]  [5        USS 5       nUR?                  5        H/  nU	R;                  [C        URA                  S5      S   5      5        M1     SSS5        GM  UR3                  S"5      (       a,  US#S S:X  a  SnOUR;                  [E        US#S 5      5        GM9  UR3                  S$5      (       a]  [5        USS 5       nUR?                  5        H/  nUR;                  [E        URA                  S5      S   5      5        M1     SSS5        GM  URG                  U5        GM     URH                  (       + =(       a    U(       + nURJ                  n[M        XSUUS%9nUc8  URN                  b  S&URN                  RQ                  5       -   OSn[S        UUSS'S(9n['        S)5         U(       a  UR;                  URU                  5       5        U(       a  US*   RV                   H~  nURY                  5       (       d  M  U
R;                  URZ                  R]                  5       5        UR^                  S:X  d  MU  U
R;                  UR`                  R]                  5       5        M     SU;  d   e SSS5        [b        Re                  S+U-  5        [b        Re                  S,U
5        [b        Re                  S-U5        [b        Re                  S.U	5        URg                  XXS/9  URi                  U5        [k        UXs5        UR                  (       aj  SSK6n[b        Re                  S0URn                  Rq                  U5      U4-  5        [b        Re                  S1URn                  Rq                  U5      U4-  5        URr                  (       a  URu                  [        Rv                  5        URy                  5         g! UR                   a-  n[        5         [        S	U[        R                  S
9   SnAgSnAff = f! , (       d  f       GN= f! , (       d  f       GNg= f! , (       d  f       GN= f! , (       d  f       GN-= f! , (       d  f       GN= f)2z%OpenType font subsetter and optimizerr   )splitext)configLoggerNr   z--help)	r  z	gids-filer&   zglyphs-filer  z	text-filer  zunicodes-filezoutput-file)rs  zERROR:r  r   )levelT)r   Fr"  r   z--output-file=r  z--text=   z--text-file=r  zutf-8)encoding
z--unicodes=   z--unicodes-file=r  #z--gids=z--gids-file=z	--glyphs=	   z--glyphs-file=)r  r`  rX  z.subset)	extension	overWritesuffixzcompile glyph listr  z
Text: '%s'zUnicodes: %sz
Glyphs: %szGids: %s)r&   r  r  r  zInput font:% 7d bytes: %szSubset font:% 7d bytes: %s)=os.pathr  	fontToolsr  r  rr  rp  __doc__r  r{  r  r
  r	  r0   r[  loggingINFOWARNINGr\  r  r*   setLevelDEBUGdisabledr  rx  openreadro  r  r  	readlinesr[  r  r  r#  r  r`  r  rV  r  r   r  r  r  r  r!  r  r  r  r"   r  r@   r  ospathgetsizer]  saveXMLstdoutclose)argsr  r  r   efontfile	subsetterr  r&   r  r  wildcard_glyphswildcard_unicodesr  r   r  liner  r`  r'   extr  r$  s                          r   mainr2  n  st    !&|xx|4giG!!
 " 
& 4y1}ww||GOOL~~gmm, $AwH8D'*IGFDHOD8"O<<())fG<<	""abEMD<<''afw/1((r22 0<<&&v}$(!qv 67<<*++afKKMDOON4::c?13E$FG *  <<	""KK
1QR5)*<<''afKKMDKK
4::c?1+= >? *  <<$$u|"&l1QR512<<())afKKMDMM,tzz#q/A"BC *  aY \ %000?Z<<D.@tD .5nn.HcGNN((**d$tI
 
#	$MM$,,./&\((;;==OOAFFKKM2xx2~ 		(89	 )
  
% HH\D !HH^X&HH\6"HHZf(NTdG%,0I8/TTU-1I70SST{{SZZ JJLe  h

+J 0/   $ 
%	$sd   Y- 	#Z-AZ?A[9A[#A[517[5,5[5-Z*=#Z%%Z*-
Z<	?
[	
[ 	#
[2	5
\)r  r  r  r  r  r  r  r2  r   )FT)F)T)r   FT)r  r   fontTools.misc.roundToolsr   r   fontTools.ttLib.tablesr   fontTools.ttLib.tables.otBaser   fontTools.otlLib.maxContextCalcr   fontTools.pens.basePenr	   fontTools.misc.loggingToolsr
   fontTools.misc.cliToolsr   fontTools.subset.utilr   r   fontTools.subset.cfffontTools.subset.svgfontTools.varLibr   r   fontTools.ttLib.tables._n_a_m_er   fontTools.unicodedatar   r  rv  arrayr  collectionsr   r   	functoolsr   typesr   r  r  	getLoggerr  r(   r&   r  r-   r5   r   r8   r=   r@   rD   rO  rT   SingleSubstrg   rk   MultipleSubstAlternateSubstLigatureSubstReverseChainSingleSubstDevicer   ValueRecordr   	SinglePosr   PairPos
CursivePosAnchorMarkBasePos
MarkLigPosMarkMarkPosr  r  ContextSubstChainContextSubst
ContextPosChainContextPosr  r  ExtensionSubstExtensionPosr  r  r  r  r  rH  r  r  rF  r&  r(  r$  r/  rG  rN  rO  rS  rV  rf  rh  rl  rq  r  r  r  MathGlyphConstructionrV  rc  rd  re  rl  r  r  r}  r  r  r  r  r  r  r  r  r
  r2  __all__r   r)   r   <module>r[     s  
  -  + ? 6 * - 6 9 " " 4 = * 
    ,  A	 Uc P *+Q S)
 	W&&'?@A%0
 XA  A
 X6  6
 X   X9  9
 X   XS  S X  & XP  P
 X!!"K #K X!!" # X##$# %# X##$ % X$$%Y &Y X$$%! &! X##$ % X##$  %  X--.
5 /
5 X--.5 /5( X__) ) X!!"  #  X 5 !5 X  !> X*5 *5Z X7 7( X  !	5 "	5 X__	 	 X  ! " X!!"5 #54 X!!"	 #	 X  !5 "5> X  ! " X!!"5 #54 X!!"	 #	 $$		 $$ $$

 (1183S3S 	 	W?W?t X""H$>$>?l5 @l5^ 	W5W5t 	&5&5R 	55& X$$%5 &5 X$$%5 &5 X$$h&;&;<5 =5 X$$h&;&;<5 =5 X$$h&;&;<5 =5 X$$h&;&;<5 =5 X__) )( X__	$ 	$ X__  X__) )
 X__I I X__E E X  !N "N
 X  ! " X  !) ") X  ! " X  !" ""* X  X!!"
 #
 X!!" # X!!"# ## X../ 0 X''( ) X''(	 )	 X../	( 0	( X''(, )," X$$h&6&67D 8D X$$h&6&67' 8' X__: : X__0 0 X  !	" "	" X  !Y "Y
 U  () * U  () * U  () * U  () *: U  (%*=*=f*EF G U  (%*=*=f*EF9 G9 U  (%*=*=f*EF
 G
, U  (%*=*=f*EF= G= U  (%*=*=f*EF, G,. U  (%*=*=f*EF
 G
$ U  (%*=*=f*EF8 G84 U  (%*=*=f*EF
 G
  U  (%*=*=f*EF G U  (%*=*=f*EF2 G2> U  (%*=*=f*EF+ G+\ U  () *D=4 U  () *D U  ()! *! U  ()	! *	! U  () * U  () * U  () * U  ()" *" U  ()* ** U  () *& U  ()@ *@ U  () * U  ()! *! U  ()" *"J U  ()' *'T U  () * U  ()@ *@( U  () * U  () *
 U  ()? *?, U  () *: U  ()0 *0f U  ()9( *9(x X++, - X""# $" U  ()A *A U  ()" *"6 U  ()) *)X U  ()2 *2
 X//0- 1- X--./ // X""#$ $$ X##$	 %	 X""# $ U  () * U!!&)//0 1: U  () *  U  () * U  () *& U  () * U  ()9 *9B U  ()
 *
 U  ()? *?D U  () * U  ()
 *
 U  () *> U  () *$g*f g*T@& @&F
 { > >  > 'L
 ./N 0Nb	r)   