§
    èƒñj ® ã                   ó2  — d Z ddlmZ ddlmZ ddlmZmZ ddlmZm	Z	m
Z
mZmZmZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlZddlZddlZej        dz
  Z ej        e¦  «        ZdZdZ  G d„ de!¦  «        Z" G d„ de!¦  «        Z#d„ Z$ G d„ de!¦  «        Z% G d„ de%¦  «        Z& G d„ de%¦  «        Z' G d„ de%¦  «        Z( G d„ de%¦  «        Z) G d„ de)¦  «        Z* G d „ d!e)¦  «        Z+ G d"„ d#e!¦  «        Z, G d$„ d%e,¦  «        Z- G d&„ d'e-¦  «        Z. G d(„ d)e,¦  «        Z/ G d*„ d+e,¦  «        Z0 G d,„ d-e!¦  «        Z1 G d.„ d/e!¦  «        Z2 G d0„ d1e!¦  «        Z3d2„ Z4d3„ Z5d4„ Z6d5„ Z7d6„ Z8d7„ Z9d8„ Z:d9„ Z;d:„ Z<d;„ Z=d<„ Z>d=„ Z?d>„ Z@d?„ ZA G d@„ dAe!¦  «        ZB G dB„ dCeB¦  «        ZC G dD„ dEeB¦  «        ZDdF„ ZEdG„ ZF G dH„ dIeB¦  «        ZG G dJ„ dKeB¦  «        ZH G dL„ dMeB¦  «        ZI G dN„ dOeI¦  «        ZJ G dP„ dQeI¦  «        ZK G dR„ dSeI¦  «        ZL G dT„ dUeB¦  «        ZM G dV„ dWe!¦  «        ZNdX„ ZOdY„ ZPdZ„ ZQd[„ ZRd\„ ZSd]„ ZTd^„ ZU G d_„ d`e!¦  «        ZV G da„ dbeB¦  «        ZWdc„ ZXdd„ ZYde„ ZZdf„ Z[dg„ Z\dh„ Z] G di„ djeI¦  «        Z^ G dk„ dleB¦  «        Z_ G dm„ dneB¦  «        Z`do„ Zadp„ Zbdq„ Zc G dr„ dse!¦  «        Zd G dt„ due!¦  «        Ze G dv„ dweB¦  «        Zfg dx‘dydzd{d ef¦   «         f‘d|‘d}‘dd~dd eD¦   «         f‘d€d�dd eD¦   «         f‘d‚dƒdd eD¦   «         f‘d„d…dd eD¦   «         f‘d†d‡dd eD¦   «         f‘dˆ‘d‰‘dŠ‘d‹‘dŒ‘d�‘dŽ‘d�d�d‘g d’¢df‘d“‘d”d•d‘g d–¢df‘d—‘d˜‘d™‘dš‘d›‘dœ‘d�‘dž‘dŸ‘d d¡d¢d eM¦   «         f‘d£‘d¤d¥d¢d eW¦   «         f‘d¦d§d¨d eJ¦   «         f‘d©d/d¢d e_¦   «         f‘dªd«d¢d e^¦   «         f‘d¬d1d¢d eL¦   «         f‘d­d®d¢d e`¦   «         f‘Zgdxd�d�d‘g d’¢dfd©d/d¢d e_¦   «         fdªd«d¢d e^¦   «         fd¬d1d¢d eL¦   «         fd­d®d¢d e`¦   «         fgZhd¯Zid°Zjd±ejeid²ddfd³d´dµd¶d·d¸d¹dºd»d¼d½d¾d¿dÀdÁdÂdÃdÄdÅdÆdÇd¢d eK¦   «         fgZkd±ejeid²ddfd³d´dµd¶d·d¸d¹dºd»d¼d½dÁdÂdÆdÇd¢d eK¦   «         fgZldÈ„ Zm emek¦  «          emeg¦  «          G dÉ„ dÊejn        ¦  «        Zo G dË„ dÌejn        ¦  «        Zp G dÍ„ dÎe!¦  «        ZqdÏ„ Zr G dÐ„ dÑeq¦  «        Zs G dÒ„ dÓeq¦  «        Zt G dÔ„ dÕeq¦  «        Zu G dÖ„ d×e!¦  «        Zv G dØ„ dÙev¦  «        Zw G dÚ„ dÛev¦  «        Zx G dÜ„ dÝev¦  «        Zy G dÞ„ dße!¦  «        Zzg dà¢Z{dáZ| e}e{¦  «        e|k    sJ ‚i Z~ ee|¦  «        D ]Z€e€e~e{e€         <   Œg dâ¢Z�dãZ‚ e}e�¦  «        e‚k    sJ ‚g dä¢ZƒdåZ„ e}eƒ¦  «        e„k    sJ ‚g dæ¢Z…dçZ† e}e…¦  «        e†k    sJ ‚dS )èa+  cffLib: read/write Adobe CFF fonts

OpenType fonts with PostScript outlines embed a completely independent
font file in Adobe's *Compact Font Format*. So dealing with OpenType fonts
requires also dealing with CFF. This module allows you to read and write
fonts written in the CFF format.

In 2016, OpenType 1.8 introduced the `CFF2 <https://docs.microsoft.com/en-us/typography/opentype/spec/cff2>`_
format which, along with other changes, extended the CFF format to deal with
the demands of variable fonts. This module parses both original CFF and CFF2.

é    )Ússtruct)ÚpsCharStrings)Ú	unionRectÚintRect)ÚbytechrÚbyteordÚ	bytesjoinÚtobytesÚtostrÚsafeEval)ÚTTFont)ÚOTTableWriter)ÚOTTableReader)ÚotTables)ÚBytesIONé   z%
	major:   B
	minor:   B
	hdrSize: B
i  c                   óf   — e Zd ZdZdd„Zd„ Zd„ Zd„ Zd„ Zdd„Z	d	„ Z
dd
„Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )Ú
CFFFontSetan  A CFF font "file" can contain more than one font, although this is
    extremely rare (and not allowed within OpenType fonts).

    This class is the entry point for parsing a CFF table. To actually
    manipulate the data inside the CFF font, you will want to access the
    ``CFFFontSet``'s :class:`TopDict` object. To do this, a ``CFFFontSet``
    object can either be treated as a dictionary (with appropriate
    ``keys()`` and ``values()`` methods) mapping font names to :class:`TopDict`
    objects, or as a list.

    .. code:: python

            from fontTools import ttLib
            tt = ttLib.TTFont("Tests/cffLib/data/LinLibertine_RBI.otf")
            tt["CFF "].cff
            # <fontTools.cffLib.CFFFontSet object at 0x101e24c90>
            tt["CFF "].cff[0] # Here's your actual font data
            # <fontTools.cffLib.TopDict object at 0x1020f1fd0>

    Nc                 óÄ  — || _         t          j        t          |                     d¦  «        | ¦  «         |�+|rdnd}| j        |k    rt          d|| j        fz  ¦  «        ‚n| j        dv s
J d¦   «         ‚| j        dk    }|s¥t          j        d|                     d¦  «        ¦  «        d	         | _        | 	                    | j
        ¦  «         t          d
„ t          ||¬¦  «        D ¦   «         ¦  «        | _        t          ||¬¦  «        | _        t!          |¦  «        | _        n€t          j        d|                     d¦  «        ¦  «        d	         | _        | 	                    | j
        ¦  «         dg| _        |j        }t          ||| j        |¬¦  «        | _        d| _        t)          ||¬¦  «        | _        | j        | j        _        | j        | j        _        dS )a‹  Parse a binary CFF file into an internal representation. ``file``
        should be a file handle object. ``otFont`` is the top-level
        :py:class:`fontTools.ttLib.ttFont.TTFont` object containing this CFF file.

        If ``isCFF2`` is passed and set to ``True`` or ``False``, then the
        library makes an assertion that the CFF header is of the appropriate
        version.
        é   Né   r   ú2Invalid CFF 'major' version: expected %d, found %d©r   r   úUnknown CFF formatÚBr   c              3   ó8   K  — | ]}t          |d ¬¦  «        V — ŒdS )Úlatin1©ÚencodingN©r   ©Ú.0Úss     úX/data/share/cad/hardware/.venv/lib/python3.11/site-packages/fontTools/cffLib/__init__.pyú	<genexpr>z'CFFFontSet.decompile.<locals>.<genexpr>b   s@   è è € ð "ð "Ø01•�a (Ð+Ñ+Ô+ð"ð "ð "ð "ð "ð "ó    ©ÚisCFF2ú>HÚCFF2Font)ÚotFontr   ÚunpackÚcffHeaderFormatÚreadÚmajorÚ
ValueErrorÚstructÚoffSizeÚseekÚhdrSizeÚlistÚIndexÚ	fontNamesÚTopDictIndexÚtopDictIndexÚIndexedStringsÚstringsÚtopDictSizeÚgetGlyphOrderÚGlobalSubrsIndexÚGlobalSubrs)ÚselfÚfiler+   r(   Úexpected_majorÚcff2GetGlyphOrders         r$   Ú	decompilezCFFFontSet.decompileF   sê  € ð ˆŒÝŒ•¨¯	ª	°!©¬°dÑ;Ô;Ð;ØÐð #)Ð/˜Q˜Q¨aˆNØŒz˜^Ò+Ð+Ý ØHØ% t¤zÐ2ñ3ñô ð ð ,ð ”: Ð'Ð'Ð'Ð)=Ñ'Ô'Ð'Ø”Z 1’_ˆFØð 	 Ý!œ=¨¨d¯iªi¸©l¬lÑ;Ô;¸AÔ>ˆDŒLØ�IŠI�d”lÑ#Ô#Ð#Ý!ð "ð "Ý5:¸4ÈÐ5OÑ5OÔ5Oð"ñ "ô "ñ ô ˆDŒNõ !-¨T¸&Ð AÑ AÔ AˆDÔÝ)¨$Ñ/Ô/ˆDŒLˆLå%œ}¨T°4·9²9¸Q±<´<Ñ@Ô@ÀÔCˆDÔØ�IŠI�d”lÑ#Ô#Ð#Ø(˜\ˆDŒNØ &Ô 4Ðå ,ØÐ'¨Ô)9À&ð!ñ !ô !ˆDÔð  ˆDŒLÝ+¨D¸Ð@Ñ@Ô@ˆÔØ$(¤LˆÔÔ!Ø(,Ô(8ˆÔÔ%Ð%Ð%r&   c                 ó*   — t          | j        ¦  «        S ©N)Úlenr7   ©r@   s    r$   Ú__len__zCFFFontSet.__len__u   s   € Ý�4”>Ñ"Ô"Ð"r&   c                 ó*   — t          | j        ¦  «        S rF   )r5   r7   rH   s    r$   ÚkeyszCFFFontSet.keysx   s   € Ý�D”NÑ#Ô#Ð#r&   c                 ó   — | j         S rF   )r9   rH   s    r$   ÚvalueszCFFFontSet.values{   s   € ØÔ Ð r&   c                 ó$  — t          |d¦  «        r|                     ¦   «         }n_t          |t          ¦  «        r;|}	 | j                             |¦  «        }n,# t          $ r t          |¦  «        ‚w xY wt          |¦  «        ‚| j	        |         S )z{Return TopDict instance identified by name (str) or index (int
        or any object that implements `__index__`).
        Ú	__index__)
ÚhasattrrO   Ú
isinstanceÚstrr7   Úindexr0   ÚKeyErrorÚ	TypeErrorr9   )r@   ÚnameOrIndexrS   Únames       r$   Ú__getitem__zCFFFontSet.__getitem__~   s£   € õ �; Ñ,Ô,ð 		)Ø×)Ò)Ñ+Ô+ˆEˆEÝ˜¥SÑ)Ô)ð 	)ØˆDð,Øœ×,Ò,¨TÑ2Ô2��øÝð ,ð ,ð ,Ý˜{Ñ+Ô+Ð+ð,øøøõ ˜KÑ(Ô(Ð(ØÔ  Ô'Ð's   ¾A ÁA3c                 óL  — || _         |�+|rdnd}| j        |k    rt          d|| j        fz  ¦  «        ‚n| j        dv s
J d¦   «         ‚| j        dk    }|j        r |s| j        D ]}|                     ¦   «          Œ|st          ¦   «         }nd}t          |¦  «        }| j                             || |¬¦  «        }|r{d| _	        | 
                    t          j        t          | ¦  «        ¦  «         |                     ¦   «         | _        | 
                    t!          j        d	| j        ¦  «        ¦  «         nhd
| _	        d
| _        | 
                    t          j        t          | ¦  «        ¦  «         | 
                    t!          j        d| j        ¦  «        ¦  «         |sXt%          ¦   «         }	| j        D ]}
|	                     |
¦  «         Œ| 
                    |	                     || |¬¦  «        ¦  «         | 
                    |¦  «         |s'| 
                    |                     ¦   «         ¦  «         | 
                    | j                             || |¬¦  «        ¦  «         | j        D ]ò}|r¼|                     ¦   «         }t/          |j        ¦  «        }|t/          |¦  «        k    s|t/          |¦  «        k    rd|vrt          d¦  «        ‚|d|…         |_        t5          |j        ¦  «        t5          |j                             ¦   «         ¦  «        k    rt          d¦  «        ‚ŒÀt9          |d¦  «        r|j        €|                     ¦   «         }||_        Œó|                     |¦  «        }|D ]}| 
                    |¦  «         Œ|                     |¦  «         dS )a˜  Write the object back into binary representation onto the given file.
        ``file`` should be a file handle object. ``otFont`` is the top-level
        :py:class:`fontTools.ttLib.ttFont.TTFont` object containing this CFF file.

        If ``isCFF2`` is passed and set to ``True`` or ``False``, then the
        library makes an assertion that the CFF header is of the appropriate
        version.
        Nr   r   r   r   r   r'   é   r)   é   r   ÚVARCz.CFF2 CharStrings count does not match the fontz/CFF2 CharStrings must form a glyph-order prefixÚcharset)r+   r/   r0   ÚrecalcBBoxesr9   ÚrecalcFontBBoxr:   Ú	CFFWriterÚgetCompilerr4   Úaddr   Úpackr-   ÚgetDataLengthr<   r1   r2   r6   r7   Úappendr?   r=   rG   ÚCharStringsr]   ÚsetrK   rP   ÚgetChildrenÚtoFile)r@   rA   r+   r(   rB   ÚtopDictr;   ÚwriterÚtopCompilerr7   rW   Ú
glyphOrderÚcountr]   ÚchildrenÚchilds                   r$   ÚcompilezCFFFontSet.compileŽ   s·  € ð ˆŒØÐà"(Ð/˜Q˜Q¨aˆNØŒz˜^Ò+Ð+Ý ØHØ% t¤zÐ2ñ3ñô ð ð ,ð ”: Ð'Ð'Ð'Ð)=Ñ'Ô'Ð'Ø”Z 1’_ˆFàÔð 	) vð 	)ØÔ,ð )ð )�Ø×&Ò&Ñ(Ô(Ð(Ð(àð 	Ý$Ñ&Ô&ˆGˆGàˆGÝ˜6Ñ"Ô"ˆØÔ'×3Ò3°G¸TÈ&Ð3ÑQÔQˆØð 
	7ØˆDŒLØ�JŠJ•w”|¥O°TÑ:Ô:Ñ;Ô;Ð;à*×8Ò8Ñ:Ô:ˆDÔØ�JŠJ•v”{ 4¨Ô)9Ñ:Ô:Ñ;Ô;Ð;Ð;àˆDŒLØˆDŒLØ�JŠJ•w”|¥O°TÑ:Ô:Ñ;Ô;Ð;Ø�JŠJ•v”{ 3¨¬Ñ5Ô5Ñ6Ô6Ð6Øð 	LÝ™œˆIØœð 'ð '�Ø× Ò  Ñ&Ô&Ð&Ð&Ø�JŠJ�y×,Ò,¨W°dÀ6Ð,ÑJÔJÑKÔKÐKØ�
Š
�;ÑÔÐØð 	.Ø�JŠJ�w×*Ò*Ñ,Ô,Ñ-Ô-Ð-Ø�
Š
�4Ô#×/Ò/°¸ÀfÐ/ÑMÔMÑNÔNÐNàÔ(ð 	*ð 	*ˆGØð *Ø#×1Ò1Ñ3Ô3�
Ý˜GÔ/Ñ0Ô0�Ø�3˜z™?œ?Ò*Ð*Ø�S ™_œ_Ò,Ð,°¸vÐ1EÐ1Eå$Ð%UÑVÔVÐVØ",¨V¨e¨VÔ"4�”Ý�w”Ñ'Ô'­3¨wÔ/B×/GÒ/GÑ/IÔ/IÑ+JÔ+JÒJÐJÝ$Ð%VÑWÔWÐWð Kå˜W iÑ0Ô0ð *°G´OÐ4KØ ×.Ò.Ñ0Ô0�Ø")�”øØ×*Ò*¨7Ñ3Ô3ˆØð 	ð 	ˆEØ�JŠJ�uÑÔÐÐà�Š�dÑÔÐÐÐr&   c                 óÖ  — |                      d| j        ¬¦  «         |                     ¦   «          |                      d| j        ¬¦  «         |                     ¦   «          | j        D ]€}|                     dt          |¦  «        ¬¦  «         |                     ¦   «          | |         }|                     |¦  «         |                     d¦  «         |                     ¦   «          Œ�|                     ¦   «          |                     d¦  «         |                     ¦   «          | j	                             |¦  «         |                     d¦  «         |                     ¦   «          dS )z÷Write the object into XML representation onto the given
        :class:`fontTools.misc.xmlWriter.XMLWriter`.

        .. code:: python

                writer = xmlWriter.XMLWriter(sys.stdout)
                tt["CFF "].cff.toXML(writer)

        r/   ©ÚvalueÚminorÚCFFFont©rW   r?   N)
Ú	simpletagr/   Únewlineru   r7   Úbegintagr   ÚtoXMLÚendtagr?   )r@   Ú	xmlWriterÚfontNameÚfonts       r$   r{   zCFFFontSet.toXMLØ   s_  € ð 	×Ò˜G¨4¬:ÐÑ6Ô6Ð6Ø×ÒÑÔÐØ×Ò˜G¨4¬:ÐÑ6Ô6Ð6Ø×ÒÑÔÐØœð 	 ð 	 ˆHØ×Ò˜y­u°X©¬ÐÑ?Ô?Ð?Ø×ÒÑÔÐØ˜”>ˆDØ�JŠJ�yÑ!Ô!Ð!Ø×Ò˜YÑ'Ô'Ð'Ø×ÒÑÔÐÐØ×ÒÑÔÐØ×Ò˜=Ñ)Ô)Ð)Ø×ÒÑÔÐØÔ×Ò˜yÑ)Ô)Ð)Ø×Ò˜Ñ'Ô'Ð'Ø×ÒÑÔÐÐÐr&   c                 ó,  — || _         t          | d¦  «        sd| _        t          | d¦  «        sd| _        |dk    �r | j        dk    rºt          | d¦  «        sd| _        t          | d¦  «        sd| _        t          | d	¦  «        st          ¦   «         | _        t          | d
¦  «        sg | _        t          ¦   «         | _
        |d         }| j                             |¦  «         t          | j        ¬¦  «        }d|_        n”| j        dk    r‰t          | d¦  «        sd| _        t          | d	¦  «        st          ¦   «         | _        t          | d
¦  «        sdg| _        | j         j        }t          | j        |¬¦  «        }t          d|¦  «        | _
        | j
                             |¦  «         |D ]5}t          |t           ¦  «        rŒ|\  }}}|                     |||¦  «         Œ6t          |d¦  «        r?|j        d         j        €/|j        }	|	D ]'}
t          |
d¦  «        r|j        |
j        _        Œ$dS dS dS |d	k    r�t,          j        }t          | d	¦  «        st          ¦   «         | _        |D ]Y}t          |t           ¦  «        rŒ|\  }}} |¦   «         }|                     |||¦  «         | j                             |¦  «         ŒZdS |dk    rt1          |d         ¦  «        | _        dS |dk    rt1          |d         ¦  «        | _        dS dS )z?Reads data from the XML element into the ``CFFFontSet`` object.r/   r   ru   r   rv   r2   r[   r4   r?   r7   rW   )r?   Nr   rZ   r*   )r?   rC   ÚVarStoreÚPrivatert   )r+   rP   r/   ru   r2   r4   r>   r?   r7   r8   r9   re   ÚTopDictr]   r=   rQ   rR   ÚfromXMLÚFDArrayÚvstorer�   r‚   r   ÚT2CharStringÚint)r@   rW   ÚattrsÚcontentr+   r~   rj   rC   ÚelementÚfdArrayÚfontDictÚsubrCharStringClassÚsubrs                r$   r„   zCFFFontSet.fromXMLõ   sr  € àˆŒõ �t˜WÑ%Ô%ð 	ØˆDŒJÝ�t˜WÑ%Ô%ð 	ØˆDŒJà�9ÒÑØŒz˜QŠˆÝ˜t YÑ/Ô/ð %à#$�D”LÝ˜t YÑ/Ô/ð %Ø#$�D”LÝ˜t ]Ñ3Ô3ð :Ý'7Ñ'9Ô'9�DÔ$Ý˜t [Ñ1Ô1ð 7Ø%'�D”NÝ(4©¬�DÔ%Ø  œ=�Ø”×%Ò% hÑ/Ô/Ð/Ý!¨dÔ.>Ð?Ñ?Ô?�Ø"&�”�Ø”˜q’�Ý˜t YÑ/Ô/ð %Ø#$�D”LÝ˜t ]Ñ3Ô3ð :Ý'7Ñ'9Ô'9�DÔ$Ý˜t [Ñ1Ô1ð 2Ø&0 \�D”NØ$(¤KÔ$=Ð!Ý!Ø $Ô 0ÐDUðñ ô �õ %1°Ð7HÑ$IÔ$I�Ô!ØÔ×$Ò$ WÑ-Ô-Ð-Ø"ð 6ð 6�Ý˜g¥sÑ+Ô+ð ØØ'.Ñ$��e˜WØ—’  e¨WÑ5Ô5Ð5Ð5å�w 
Ñ+Ô+ð C°´ÀÔ0BÔ0IÐ0QØ!œ/�Ø 'ð Cð C�HÝ˜x¨Ñ3Ô3ð CØ29Ô2B˜Ô(Ô/øð	Cð CÐ0QÐ0QðCð Cð �]Ò"Ð"Ý"/Ô"<ÐÝ˜4 Ñ/Ô/ð 6Ý#3Ñ#5Ô#5�Ô Ø"ð .ð .�Ý˜g¥sÑ+Ô+ð ØØ'.Ñ$��e˜WØ*Ð*Ñ,Ô,�Ø—’˜T 5¨'Ñ2Ô2Ð2ØÔ ×'Ò'¨Ñ-Ô-Ð-Ð-ð.ð .ð �WŠ_ˆ_Ý˜U 7œ^Ñ,Ô,ˆDŒJˆJˆJØ�WŠ_ˆ_Ý˜U 7œ^Ñ,Ô,ˆDŒJˆJˆJð ˆ_r&   c                 ó*   — ddl m}  || |¦  «         d S )Nr   )Ú_convertCFFToCFF2)Ú	CFFToCFF2r‘   )r@   r+   r‘   s      r$   ÚconvertCFFToCFF2zCFFFontSet.convertCFFToCFF29  ó-   € Ø0Ð0Ð0Ð0Ð0Ð0àÐ˜$ Ñ'Ô'Ð'Ð'Ð'r&   c                 ó*   — ddl m}  || |¦  «         d S )Nr   )Ú_convertCFF2ToCFF)Ú	CFF2ToCFFr–   )r@   r+   r–   s      r$   ÚconvertCFF2ToCFFzCFFFontSet.convertCFF2ToCFF>  r”   r&   c                 ó(   — ddl m}  || ¦  «         d S )Nr   )Údesubroutinize)Ú
transformsrš   )r@   rš   s     r$   rš   zCFFFontSet.desubroutinizeC  s*   € Ø.Ð.Ð.Ð.Ð.Ð.àˆ�tÑÔÐÐÐr&   c                 ó(   — ddl m}  || ¦  «         d S )Nr   )Úremove_hints)r›   r�   )r@   r�   s     r$   r�   zCFFFontSet.remove_hintsH  s*   € Ø,Ð,Ð,Ð,Ð,Ð,àˆ�TÑÔÐÐÐr&   c                 ó(   — ddl m}  || ¦  «         d S )Nr   )Úremove_unused_subroutines)r›   rŸ   )r@   rŸ   s     r$   rŸ   z$CFFFontSet.remove_unused_subroutinesM  s+   € Ø9Ð9Ð9Ð9Ð9Ð9à!Ð! $Ñ'Ô'Ð'Ð'Ð'r&   rF   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__rD   rI   rK   rM   rX   rq   r{   r„   r“   r˜   rš   r�   rŸ   © r&   r$   r   r   0   sû   € € € € € ðð ð*-9ð -9ð -9ð -9ð^#ð #ð #ð$ð $ð $ð!ð !ð !ð(ð (ð (ð Hð Hð Hð HðTð ð ð:B-ð B-ð B-ð B-ðH(ð (ð (ð
(ð (ð (ð
ð ð ð
ð ð ð
(ð (ð (ð (ð (r&   r   c                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )r`   zXHelper class for serializing CFF data to binary. Used by
    :meth:`CFFFontSet.compile`.c                 ó"   — g | _         || _        d S rF   )Údatar(   ©r@   r(   s     r$   Ú__init__zCFFWriter.__init__W  s   € ØˆŒ	ØˆŒˆˆr&   c                 ó:   — | j                              |¦  «         d S rF   )r§   re   )r@   Útables     r$   rb   zCFFWriter.add[  s   € ØŒ	×Ò˜ÑÔÐÐÐr&   c                 ó  — d }d}	 t                                 t          d|¦  «         |dz   }d}|g}| j        D ]®}t          |d¦  «        rM||                     ¦   «         z   }t          |t          ¦  «        r |j        r|                     ¦   «         | _        n|t          |¦  «        z   }t          |d¦  «        r| 
                    ||¦  «         |}|                     |¦  «         Œ¯||k    rn|}Œët                                 t          d¦  «         |                     ¦   «         }| j        r#t          j        d| j        ¦  «        | j        d<   n<t          |d	         ¦  «        | _        t          j        d
| j        ¦  «        | j        d<   dg}| j        D ]g}t          |d¦  «        r|                     |¦  «         n|                     |¦  «         |                     |                     ¦   «         |z
  ¦  «         Œh||k    sJ ‚d S )Nr   Tz CFFWriter.toFile() iteration: %dr   rd   ÚsetPosz#CFFWriter.toFile() writing to file.r)   éÿÿÿÿr   ri   )ÚlogÚDEBUGr§   rP   rd   rQ   ÚTopDictIndexCompilerr(   r<   rG   r­   re   Útellr1   rc   ÚcalcOffSizer2   ri   Úwrite)	r@   rA   ÚlastPosListrn   ÚposÚposListÚitemÚendPosÚbegins	            r$   ri   zCFFWriter.toFile^  s  € ØˆØˆð	"Ý�GŠG•EÐ=¸uÑEÔEÐEØ˜A‘IˆEØˆCØ�eˆGØœ	ð 
$ð 
$�Ý˜4 Ñ1Ô1ð -Ø  4×#5Ò#5Ñ#7Ô#7Ñ7�FÝ! $Õ(<Ñ=Ô=ð @À$Ä+ð @Ø+/×+=Ò+=Ñ+?Ô+?˜Ô(øà ¥3 t¡9¤9™_�FÝ˜4 Ñ*Ô*ð -Ø—K’K  VÑ,Ô,Ð,Ø�Ø—’˜sÑ#Ô#Ð#Ð#Ø˜+Ò%Ð%ØØ!ˆKð%	"õ& 	�Š•Ð<Ñ=Ô=Ð=Ø—	’	‘”ˆØŒ;ð 	:Ý!œ; t¨TÔ-=Ñ>Ô>ˆDŒI�a‰LˆLå& {°2¤Ñ7Ô7ˆDŒLÝ!œ; s¨D¬LÑ9Ô9ˆDŒI�a‰LØ�#ˆØ”Ið 	0ð 	0ˆDÝ�t˜XÑ&Ô&ð !Ø—’˜DÑ!Ô!Ð!Ð!à—
’
˜4Ñ Ô Ð Ø�NŠN˜4Ÿ9š9™;œ;¨Ñ.Ñ/Ô/Ð/Ð/Ø˜+Ò%Ð%Ð%Ð%Ð%Ð%r&   N)r    r¡   r¢   r£   r©   rb   ri   r¤   r&   r$   r`   r`   S  sK   € € € € € ð#ð #ðð ð ð ð  ð  ð$&ð $&ð $&ð $&ð $&r&   r`   c                 ó@   — | dk     rd}n| dk     rd}n| dk     rd}nd}|S )Né   r   i   r   i   r   r[   r¤   )ÚlargestOffsetr2   s     r$   r³   r³   …  sB   € Ø�uÒÐØˆˆØ	˜Ò	 Ð	 ØˆˆØ	˜Ò	"Ð	"ØˆˆàˆØ€Nr&   c                   ó2   — e Zd ZdZdd„Zd„ Zd„ Zd„ Zd„ ZdS )	ÚIndexCompilerz…Base class for writing CFF `INDEX data <https://docs.microsoft.com/en-us/typography/opentype/spec/cff2#5-index-data>`_
    to binary.Nc                 ó’   — |€t          |d¦  «        r|j        }|€J ‚|| _        |                      ||¦  «        | _        || _        d S ©Nr(   )rP   r(   ÚgetItemsÚitemsÚparent)r@   rÃ   r;   rÄ   r(   s        r$   r©   zIndexCompiler.__init__•  sO   € Øˆ>�g f¨hÑ7Ô7ˆ>Ø”]ˆFØÐ%Ð%Ð%ØˆŒØ—]’] 5¨'Ñ2Ô2ˆŒ
ØˆŒˆˆr&   c                 ó   — |S rF   r¤   ©r@   rÃ   r;   s      r$   rÂ   zIndexCompiler.getItems�  ó   € Øˆr&   c                 óÖ   — | j         r_d}|g}| j         D ]Q}t          |d¦  «        r||                     ¦   «         z   }n|t          |¦  «        z   }|                     |¦  «         ŒRng }|S )Nr   rd   )rÃ   rP   rd   rG   re   )r@   r¶   Úoffsetsr¸   s       r$   Ú
getOffsetszIndexCompiler.getOffsets   sˆ   € àŒ:ð 
	ØˆCØ�eˆGØœ
ð $ð $�Ý˜4 Ñ1Ô1ð *Ø × 2Ò 2Ñ 4Ô 4Ñ4�C�Cà¥ D¡	¤	™/�CØ—’˜sÑ#Ô#Ð#Ð#ð$ð ˆGØˆr&   c                 óÐ   — | j         rd}nd}| j        rP|                      ¦   «         d         }t          |¦  «        }|dz   t	          | j        ¦  «        dz   |z  z   |z   dz
  }n|}|S )Nr[   r   r®   r   )r(   rÃ   rÊ   r³   rG   )r@   Ú	countSizeÚ
lastOffsetr2   Ú
dataLengths        r$   rd   zIndexCompiler.getDataLength¯  s�   € ØŒ;ð 	ØˆIˆIàˆIàŒ:ð 	#ØŸšÑ*Ô*¨2Ô.ˆJÝ! *Ñ-Ô-ˆGàØñå�t”z‘?”? QÑ&¨'Ñ1ñ2ð ñð ñ	ð ˆJð #ˆJàÐr&   c                 ót  — |                       ¦   «         }| j        r#t          |t          | j        ¦  «        ¦  «         n"t          |t          | j        ¦  «        ¦  «         | j        rÎt          |d         ¦  «        }t          ||¦  «         | }t          j	        }|D ]A} |d|¦  «        |d …         }t          |¦  «        | k    sJ ‚| 
                    |¦  «         ŒB| j        D ]P}t          |d¦  «        r|                     |¦  «         Œ(t          |d¬¦  «        }| 
                    |¦  «         ŒOd S d S )Nr®   ú>lri   r   r   )rÊ   r(   ÚwriteCard32rG   rÃ   ÚwriteCard16r³   Ú
writeCard8r1   rc   r´   rP   ri   r
   )	r@   rA   rÉ   r2   rc   ÚoffsetÚ	binOffsetr¸   r§   s	            r$   ri   zIndexCompiler.toFileÅ  sQ  € Ø—/’/Ñ#Ô#ˆØŒ;ð 	/Ý˜�c $¤*™oœoÑ.Ô.Ð.Ð.å˜�c $¤*™oœoÑ.Ô.Ð.àŒ:ð 	%Ý! '¨"¤+Ñ.Ô.ˆGÝ�t˜WÑ%Ô%Ð%Ø�hˆGÝ”;ˆDØ!ð &ð &�Ø ˜D  vÑ.Ô.¨w¨x¨xÔ8�	Ý˜9‘~”~¨'¨Ò1Ð1Ð1Ð1Ø—
’
˜9Ñ%Ô%Ð%Ð%Øœ
ð %ð %�Ý˜4 Ñ*Ô*ð %Ø—K’K Ñ%Ô%Ð%Ð%å" 4°(Ð;Ñ;Ô;�DØ—J’J˜tÑ$Ô$Ð$Ð$ð	%ð 	%ð%ð %r&   rF   )	r    r¡   r¢   r£   r©   rÂ   rÊ   rd   ri   r¤   r&   r$   r¿   r¿   ‘  sn   € € € € € ðð ðð ð ð ðð ð ðð ð ðð ð ð,%ð %ð %ð %ð %r&   r¿   c                   ó   — e Zd Zd„ ZdS )ÚIndexedStringsCompilerc                 ó   — |j         S rF   ©r;   rÆ   s      r$   rÂ   zIndexedStringsCompiler.getItemsÞ  s
   € ØŒ}Ðr&   N)r    r¡   r¢   rÂ   r¤   r&   r$   r×   r×   Ý  s#   € € € € € ðð ð ð ð r&   r×   c                   óB   ‡ — e Zd ZdZd„ Zd„ Zˆ fd„Zˆ fd„Zˆ fd„Zˆ xZ	S )r±   z/Helper class for writing the TopDict to binary.c                 óf   — g }|D ]+}|                      |                     || ¦  «        ¦  «         Œ,|S rF   ©re   ra   ©r@   rÃ   r;   Úoutr¸   s        r$   rÂ   zTopDictIndexCompiler.getItemså  ó@   € ØˆØð 	8ð 	8ˆDØ�JŠJ�t×'Ò'¨°Ñ6Ô6Ñ7Ô7Ð7Ð7Øˆ
r&   c                 ón   — g }| j         D ]*}|                     |                     |¦  «        ¦  «         Œ+|S rF   ©rÃ   Úextendrh   )r@   r;   ro   rj   s       r$   rh   z TopDictIndexCompiler.getChildrenë  s@   € ØˆØ”zð 	:ð 	:ˆGØ�OŠO˜G×/Ò/°Ñ8Ô8Ñ9Ô9Ð9Ð9Øˆr&   c                 ó¦   •— | j         r#d| j        d                              ¦   «         g}|S t          t          | ¦  «                             ¦   «         S ©Nr   )r(   rÃ   rd   Úsuperr±   rÊ   )r@   rÉ   Ú	__class__s     €r$   rÊ   zTopDictIndexCompiler.getOffsetsñ  sL   ø€ ØŒ;ð 	BØ˜$œ* Qœ-×5Ò5Ñ7Ô7Ð8ˆGØˆNåÕ-¨tÑ4Ô4×?Ò?ÑAÔAÐAr&   c                 ó¢   •— | j         r!| j        d                              ¦   «         }|S t          t          | ¦  «                             ¦   «         S rä   )r(   rÃ   rd   rå   r±   )r@   rÎ   ræ   s     €r$   rd   z"TopDictIndexCompiler.getDataLengthø  sH   ø€ ØŒ;ð 	EØœ Aœ×4Ò4Ñ6Ô6ˆJØÐåÕ-¨tÑ4Ô4×BÒBÑDÔDÐDr&   c                 óª   •— | j         r"| j        d                              |¦  «         d S t          t          | ¦  «                             |¦  «         d S rä   )r(   rÃ   ri   rå   r±   )r@   rA   ræ   s     €r$   ri   zTopDictIndexCompiler.toFileÿ  sR   ø€ ØŒ;ð 	;ØŒJ�qŒM× Ò  Ñ&Ô&Ð&Ð&Ð&åÕ&¨Ñ-Ô-×4Ò4°TÑ:Ô:Ð:Ð:Ð:r&   )
r    r¡   r¢   r£   rÂ   rh   rÊ   rd   ri   Ú__classcell__©ræ   s   @r$   r±   r±   â  s˜   ø€ € € € € Ø9Ð9ðð ð ðð ð ðBð Bð Bð Bð BðEð Eð Eð Eð Eð;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;r&   r±   c                   ó*   — e Zd ZdZd„ Zd„ Zd„ Zd„ ZdS )ÚFDArrayIndexCompilerz®Helper class for writing the
    `Font DICT INDEX <https://docs.microsoft.com/en-us/typography/opentype/spec/cff2#10-font-dict-index-font-dicts-and-fdselect>`_
    to binary.c                 óf   — g }|D ]+}|                      |                     || ¦  «        ¦  «         Œ,|S rF   rÜ   rÝ   s        r$   rÂ   zFDArrayIndexCompiler.getItems  rß   r&   c                 ón   — g }| j         D ]*}|                     |                     |¦  «        ¦  «         Œ+|S rF   rá   )r@   r;   ro   r�   s       r$   rh   z FDArrayIndexCompiler.getChildren  s@   € ØˆØœ
ð 	;ð 	;ˆHØ�OŠO˜H×0Ò0°Ñ9Ô9Ñ:Ô:Ð:Ð:Øˆr&   c                 ó@  — |                       ¦   «         }| j        r#t          |t          | j        ¦  «        ¦  «         n"t          |t          | j        ¦  «        ¦  «         t          |d         ¦  «        }t          ||¦  «         | }t          j	        }|D ]A} |d|¦  «        |d …         }t          |¦  «        | k    sJ ‚| 
                    |¦  «         ŒB| j        D ]=}t          |d¦  «        r|                     |¦  «         Œ(| 
                    |¦  «         Œ>d S )Nr®   rÐ   ri   )rÊ   r(   rÑ   rG   rÃ   rÒ   r³   rÓ   r1   rc   r´   rP   ri   )r@   rA   rÉ   r2   rc   rÔ   rÕ   r¸   s           r$   ri   zFDArrayIndexCompiler.toFile  s+  € Ø—/’/Ñ#Ô#ˆØŒ;ð 	/Ý˜�c $¤*™oœoÑ.Ô.Ð.Ð.å˜�c $¤*™oœoÑ.Ô.Ð.Ý˜g bœkÑ*Ô*ˆÝ�4˜Ñ!Ô!Ð!Ø�(ˆÝŒ{ˆØð 	"ð 	"ˆFØ˜˜T 6Ñ*Ô*¨7¨8¨8Ô4ˆIÝ�y‘>”> g XÒ-Ð-Ð-Ð-Ø�JŠJ�yÑ!Ô!Ð!Ð!Ø”Jð 	!ð 	!ˆDÝ�t˜XÑ&Ô&ð !Ø—’˜DÑ!Ô!Ð!Ð!à—
’
˜4Ñ Ô Ð Ð ð		!ð 	!r&   c                 ó$   — || j         j        d<   d S )Nr…   ©rÄ   ÚrawDict©r@   r¶   r¹   s      r$   r­   zFDArrayIndexCompiler.setPos+  ó   € Ø),ˆŒÔ˜IÑ&Ð&Ð&r&   N)r    r¡   r¢   r£   rÂ   rh   ri   r­   r¤   r&   r$   rì   rì     sZ   € € € € € ðð ðð ð ðð ð ð!ð !ð !ð(-ð -ð -ð -ð -r&   rì   c                   ó   — e Zd ZdZd„ ZdS )ÚGlobalSubrsCompilerz§Helper class for writing the `global subroutine INDEX <https://docs.microsoft.com/en-us/typography/opentype/spec/cff2#9-local-and-global-subr-indexes>`_
    to binary.c                 ó|   — g }|D ]6}|                      | j        ¦  «         |                     |j        ¦  «         Œ7|S rF   ©rq   r(   re   Úbytecode©r@   rÃ   r;   rÞ   Úcss        r$   rÂ   zGlobalSubrsCompiler.getItems3  óF   € ØˆØð 	$ð 	$ˆBØ�JŠJ�t”{Ñ#Ô#Ð#Ø�JŠJ�r”{Ñ#Ô#Ð#Ð#Øˆ
r&   N)r    r¡   r¢   r£   rÂ   r¤   r&   r$   rö   rö   /  s-   € € € € € ðð ðð ð ð ð r&   rö   c                   ó   — e Zd ZdZd„ ZdS )ÚSubrsCompilerz¦Helper class for writing the `local subroutine INDEX <https://docs.microsoft.com/en-us/typography/opentype/spec/cff2#9-local-and-global-subr-indexes>`_
    to binary.c                 óB   — || j         j        z
  }|| j         j        d<   d S ©NÚSubrs)rÄ   r¶   rò   )r@   r¶   r¹   rÔ   s       r$   r­   zSubrsCompiler.setPos?  s%   € Ø�t”{”Ñ&ˆØ'-ˆŒÔ˜GÑ$Ð$Ð$r&   N)r    r¡   r¢   r£   r­   r¤   r&   r$   rþ   rþ   ;  s-   € € € € € ðð ð.ð .ð .ð .ð .r&   rþ   c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚCharStringsCompilerz¡Helper class for writing the `CharStrings INDEX <https://docs.microsoft.com/en-us/typography/opentype/spec/cff2#9-local-and-global-subr-indexes>`_
    to binary.c                 ó|   — g }|D ]6}|                      | j        ¦  «         |                     |j        ¦  «         Œ7|S rF   rø   rú   s        r$   rÂ   zCharStringsCompiler.getItemsH  rü   r&   c                 ó$   — || j         j        d<   d S )Nrf   rñ   ró   s      r$   r­   zCharStringsCompiler.setPosO  s   € Ø-0ˆŒÔ˜MÑ*Ð*Ð*r&   N)r    r¡   r¢   r£   rÂ   r­   r¤   r&   r$   r  r  D  s<   € € € € € ðð ðð ð ð1ð 1ð 1ð 1ð 1r&   r  c                   óJ   — e Zd ZdZeZdd„Zd„ Zd„ Zd„ Z	d„ Z
d„ Zdd	„Zd
„ ZdS )r6   z§This class represents what the CFF spec calls an INDEX (an array of
    variable-sized objects). `Index` items can be addressed and set using
    Python list indexing.Nc                 ó€  — g | _         g x| _        }| j        j        }|€d S || _        t
                               t          d||                     ¦   «         ¦  «         || _        |rt          |¦  «        }nt          |¦  «        }|dk    rd S d g|z  | _         t          |¦  «        }t
                               t          d||¦  «         |dk    sJ d|z  ¦   «         ‚dd|z
  z  }t          |dz   ¦  «        D ]U}|                     |¦  «        }	||	z   }	t          j        d|	¦  «        \  }
|                     t#          |
¦  «        ¦  «         ŒV|                     ¦   «         dz
  | _        |                     | j        |d	         z   ¦  «         t
                               t          d
||                     ¦   «         ¦  «         d S )Núloading %s at %sr   z    index count: %s offSize: %sr[   zoffSize too large: %só    r   ú>Lr®   ú    end of %s at %s)rÃ   rÉ   ræ   r    Ú_isCFF2r¯   r°   r²   rA   Ú
readCard32Ú
readCard16Ú	readCard8Úranger.   r1   r,   re   rˆ   Ú
offsetBaser3   )r@   rA   r(   rÉ   rW   rn   r2   ÚpadrS   ÚchunkrÔ   s              r$   r©   zIndex.__init__Z  sœ  € ØˆŒ
Ø!#Ð#ˆŒ�wØŒ~Ô&ˆØˆ<ØˆFØˆŒÝ�Š•Ð)¨4°·²±´Ñ=Ô=Ð=ØˆŒ	Øð 	%Ý˜tÑ$Ô$ˆEˆEå˜tÑ$Ô$ˆEØ�AŠ:ˆ:ØˆFØ�V˜e‘^ˆŒ
Ý˜D‘/”/ˆÝ�Š•Ð8¸%ÀÑIÔIÐIØ˜!Š|ˆ|ˆ|Ð4°wÑ>‰|Œ|ˆ|Ø�q˜7‘{Ñ#ˆÝ˜5 1™9Ñ%Ô%ð 	(ð 	(ˆEØ—I’I˜gÑ&Ô&ˆEØ˜%‘KˆEÝœ d¨EÑ2Ô2‰IˆVØ�NŠN�3˜v™;œ;Ñ'Ô'Ð'Ð'ØŸ)š)™+œ+¨™/ˆŒØ�	Š	�$”/ G¨B¤KÑ/Ñ0Ô0Ð0Ý�Š•Ð,¨d°D·I²I±K´KÑ@Ô@Ð@Ð@Ð@r&   c                 ó*   — t          | j        ¦  «        S rF   )rG   rÃ   rH   s    r$   rI   zIndex.__len__w  s   € Ý�4”:‰ŒÐr&   c                 ó^  — | j         |         }|�|S | j        |         | j        z   }| j        |dz            | j        |         z
  }| j        }|                     |¦  «         |                     |¦  «        }t          |¦  «        |k    sJ ‚|                      ||||¦  «        }|| j         |<   |S ©Nr   )rÃ   rÉ   r  rA   r3   r.   rG   ÚproduceItem)r@   rS   r¸   rÔ   ÚsizerA   r§   s          r$   rX   zIndex.__getitem__z  s±   € ØŒz˜%Ô ˆØÐØˆKØ”˜eÔ$ t¤Ñ6ˆØŒ|˜E A™IÔ&¨¬°eÔ)<Ñ<ˆØŒyˆØ�	Š	�&ÑÔÐØ�yŠy˜‰ŒˆÝ�4‰yŒy˜DÒ Ð Ð Ð Ø×Ò  t¨T°6Ñ:Ô:ˆØ ˆŒ
�5ÑØˆr&   c                 ó   — || j         |<   d S rF   ©rÃ   )r@   rS   r¸   s      r$   Ú__setitem__zIndex.__setitem__ˆ  s   € Ø ˆŒ
�5ÑÐÐr&   c                 ó   — |S rF   r¤   )r@   rS   r§   rA   rÔ   s        r$   r  zIndex.produceItem‹  s   € Øˆr&   c                 ó:   — | j                              |¦  «         dS )zAdd an item to an INDEX.N)rÃ   re   )r@   r¸   s     r$   re   zIndex.appendŽ  s   € àŒ
×Ò˜$ÑÔÐÐÐr&   c                 ó4   — |                       | |||¬¦  «        S ©Nr'   ©ÚcompilerClass©r@   r;   rÄ   r(   s       r$   ra   zIndex.getCompiler’  ó   € Ø×!Ò! $¨°ÀÐ!ÑGÔGÐGr&   c                 ó   — | j         dd…= dS )zEmpty the INDEX.Nr  rH   s    r$   ÚclearzIndex.clear•  s   € àŒJ�q�q�qˆMˆMˆMr&   ©NNrF   )r    r¡   r¢   r£   r¿   r!  r©   rI   rX   r  r  re   ra   r%  r¤   r&   r$   r6   r6   S  s¯   € € € € € ðð ð "€MðAð Að Að Að:ð ð ðð ð ð!ð !ð !ðð ð ð ð  ð  ðHð Hð Hð Hðð ð ð ð r&   r6   c                   óh   ‡ — e Zd ZdZeZej        Zej        Z		 	 	 	 	 	 dˆ fd„	Z
d„ Zd„ Zd„ Zd„ Zˆ xZS )	r>   ay  This index contains all the global subroutines in the font. A global
    subroutine is a set of ``CharString`` data which is accessible to any
    glyph in the font, and are used to store repeated instructions - for
    example, components may be encoded as global subroutines, but so could
    hinting instructions.

    Remember that when interpreting a ``callgsubr`` instruction (or indeed
    a ``callsubr`` instruction) that you will need to add the "subroutine
    number bias" to number given:

    .. code:: python

            tt = ttLib.TTFont("Almendra-Bold.otf")
            u = tt["CFF "].cff[0].CharStrings["udieresis"]
            u.decompile()

            u.toXML(XMLWriter(sys.stdout))
            # <some stuff>
            # -64 callgsubr <-- Subroutine which implements the dieresis mark
            # <other stuff>

            tt["CFF "].cff[0].GlobalSubrs[-64] # <-- WRONG
            # <T2CharString (bytecode) at 103451d10>

            tt["CFF "].cff[0].GlobalSubrs[-64 + 107] # <-- RIGHT
            # <T2CharString (source) at 103451390>

    ("The bias applied depends on the number of subrs (gsubrs). If the number of
    subrs (gsubrs) is less than 1240, the bias is 107. Otherwise if it is less
    than 33900, it is 1131; otherwise it is 32768.",
    `Subroutine Operators <https://docs.microsoft.com/en-us/typography/opentype/otspec180/cff2charstr#section4.4>`)
    Nc                 ó    •— t          t          | ¦  «                             ||¬¦  «         || _        || _        |r|| _        |r	|| _        d S d S r  )rå   r>   r©   ÚglobalSubrsÚprivateÚfdSelectrŒ   )r@   rA   r)  r*  r+  rŒ   r(   ræ   s          €r$   r©   zGlobalSubrsIndex.__init__À  sd   ø€ õ 	Õ Ñ%Ô%×.Ò.¨t¸FÐ.ÑCÔCÐCØ&ˆÔØˆŒØð 	%Ø$ˆDŒMØð 	#Ø"ˆDŒLˆLˆLð	#ð 	#r&   c                 ó   — | j         �| j         }nSt          | d¦  «        rA| j        �:t          | d¦  «        r| j        �| j        |         }nd}| j        |         j        }nd }|                      ||| j        ¬¦  «        S )NrŒ   r+  r   ©r*  r)  )r*  rP   rŒ   r+  r‚   Ú	subrClassr)  )r@   rS   r§   rA   rÔ   r*  ÚfdIndexs          r$   r  zGlobalSubrsIndex.produceItemÑ  s‰   € ØŒ<Ð#Ø”lˆGˆGÝ�T˜9Ñ%Ô%ð 	¨$¬,Ð*BÝ�t˜ZÑ(Ô(ð ¨T¬]Ð-FØœ-¨Ô.��à�Ø”l 7Ô+Ô3ˆGˆGàˆGØ�~Š~˜d¨GÀÔAQˆ~ÑRÔRÐRr&   c                 óÒ  — |                      d¦  «         |                     ¦   «          t          t          | ¦  «        ¦  «        D ] }| |         }|                     ¦   «         r|                     d|d¬¦  «         n|                     d|¬¦  «         |                     ¦   «          |                     |¦  «         |                     d¦  «         |                     ¦   «          Œ¡dS )a  Write the subroutines index into XML representation onto the given
        :class:`fontTools.misc.xmlWriter.XMLWriter`.

        .. code:: python

                writer = xmlWriter.XMLWriter(sys.stdout)
                tt["CFF "].cff[0].GlobalSubrs.toXML(writer)

        zDThe 'index' attribute is only for humans; it is ignored when parsed.Ú
CharStringr   )rS   Úraw©rS   N)Úcommentry   r  rG   ÚneedsDecompilationrz   r{   r|   )r@   r}   Úir�   s       r$   r{   zGlobalSubrsIndex.toXMLÞ  sû   € ð 	×ÒØUñ	
ô 	
ð 	
ð 	×ÒÑÔÐÝ•s˜4‘y”yÑ!Ô!ð 		 ð 		 ˆAØ˜”7ˆDØ×&Ò&Ñ(Ô(ð :Ø×"Ò" <°q¸aÐ"Ñ@Ô@Ð@Ð@à×"Ò" <°qÐ"Ñ9Ô9Ð9Ø×ÒÑÔÐØ�JŠJ�yÑ!Ô!Ð!Ø×Ò˜\Ñ*Ô*Ð*Ø×ÒÑÔÐÐð		 ð 		 r&   c                 ó–   — |dk    rd S |                       ¦   «         }|                     |||¦  «         |                      |¦  «         d S )Nr1  )r.  r„   re   )r@   rW   r‰   rŠ   r�   s        r$   r„   zGlobalSubrsIndex.fromXML÷  sO   € Ø�<ÒÐØˆFØ�~Š~ÑÔˆØ�Š�T˜5 'Ñ*Ô*Ð*Ø�Š�DÑÔÐÐÐr&   c                 óT   — d }t          | d¦  «        r| j        |         }| |         |fS )Nr+  )rP   r+  )r@   rS   Úsels      r$   ÚgetItemAndSelectorz#GlobalSubrsIndex.getItemAndSelectorþ  s4   € ØˆÝ�4˜Ñ$Ô$ð 	'Ø”- Ô&ˆCØ�EŒ{˜CÐÐr&   ©NNNNNN)r    r¡   r¢   r£   rö   r!  r   r‡   r.  ÚcharStringClassr©   r  r{   r„   r:  ré   rê   s   @r$   r>   r>   š  s²   ø€ € € € € ðð ðB (€MØÔ*€IØ#Ô0€Oð ØØØØØð#ð #ð #ð #ð #ð #ð"Sð Sð Sð ð  ð  ð2ð ð ð ð  ð  ð  ð  ð  ð  r&   r>   c                   ó   — e Zd ZdZeZdS )Ú
SubrsIndexz¹This index contains a glyph's local subroutines. A local subroutine is a
    private set of ``CharString`` data which is accessible only to the glyph to
    which the index is attached.N)r    r¡   r¢   r£   rþ   r!  r¤   r&   r$   r>  r>    s   € € € € € ð$ð $ð "€M€M€Mr&   r>  c                   ó4   ‡ — e Zd ZdZeZdˆ fd„	Zd„ Zd„ Zˆ xZ	S )r8   a‡  This index represents the array of ``TopDict`` structures in the font
    (again, usually only one entry is present). Hence the following calls are
    equivalent:

    .. code:: python

            tt["CFF "].cff[0]
            # <fontTools.cffLib.TopDict object at 0x102ed6e50>
            tt["CFF "].cff.topDictIndex[0]
            # <fontTools.cffLib.TopDict object at 0x102ed6e50>

    Nr   c                 ó   •— || _         |�Ù|r×|| _        g | _        | j        j        }t
                               t          d||                     ¦   «         ¦  «         || _        d}d g|z  | _        d|g| _	        |                     ¦   «         | _
        |                     | j
        |z   ¦  «         t
                               t          d||                     ¦   «         ¦  «         d S t          t          | ¦  «                             ||¬¦  «         d S )Nr  r   r   r  r'   )rC   r  rÃ   ræ   r    r¯   r°   r²   rA   rÉ   r  r3   rå   r8   r©   )r@   rA   rC   ÚtopSizer(   rW   rn   ræ   s          €r$   r©   zTopDictIndex.__init__  së   ø€ Ø!2ˆÔØÐ ÐØ!ˆDŒLØˆDŒJØ”>Ô*ˆDÝ�GŠG•EÐ-¨t°T·Y²Y±[´[ÑAÔAÐAØˆDŒIØˆEØ˜ %™ˆDŒJØ˜w˜<ˆDŒLØ"Ÿiši™kœkˆDŒOà�IŠI�d”o¨Ñ/Ñ0Ô0Ð0Ý�GŠG•EÐ0°$¸¿	º	¹¼ÑDÔDÐDÐDÐDå•, Ñ%Ô%×.Ò.¨t¸FÐ.ÑCÔCÐCÐCÐCr&   c                 ó‚   — t          | j        ||| j        | j        | j        ¬¦  «        }|                     |¦  «         |S r  )rƒ   r;   r?   rC   r  rD   )r@   rS   r§   rA   rÔ   Útops         r$   r  zTopDictIndex.produceItem/  sK   € ÝØŒLØØØÔØÔ"Ø”<ð
ñ 
ô 
ˆð 	�Š�dÑÔÐØˆ
r&   c                 ó"  — t          t          | ¦  «        ¦  «        D ]q}|                     d|¬¦  «         |                     ¦   «          | |                              |¦  «         |                     d¦  «         |                     ¦   «          Œrd S ©NÚFontDictr3  ©r  rG   rz   ry   r{   r|   ©r@   r}   r6  s      r$   r{   zTopDictIndex.toXML;  ó“   € Ý•s˜4‘y”yÑ!Ô!ð 	 ð 	 ˆAØ×Ò˜z°ÐÑ3Ô3Ð3Ø×ÒÑÔÐØ�ŒG�MŠM˜)Ñ$Ô$Ð$Ø×Ò˜ZÑ(Ô(Ð(Ø×ÒÑÔÐÐð	 ð 	 r&   )NNr   N)
r    r¡   r¢   r£   r±   r!  r©   r  r{   ré   rê   s   @r$   r8   r8     sr   ø€ € € € € ðð ð )€MðDð Dð Dð Dð Dð Dð$
ð 
ð 
ð ð  ð  ð  ð  ð  ð  r&   r8   c                   ó$   — e Zd ZeZd„ Zd„ Zd„ ZdS )ÚFDArrayIndexc                 ó"  — t          t          | ¦  «        ¦  «        D ]q}|                     d|¬¦  «         |                     ¦   «          | |                              |¦  «         |                     d¦  «         |                     ¦   «          Œrd S rE  rG  rH  s      r$   r{   zFDArrayIndex.toXMLG  rI  r&   c                 ó‚   — t          | j        ||| j        | j        | j        ¬¦  «        }|                     |¦  «         |S ©N)r(   r†   )rF  r;   r?   r  r†   rD   )r@   rS   r§   rA   rÔ   r�   s         r$   r  zFDArrayIndex.produceItemO  sL   € ÝØŒLØØØÔØ”<Ø”;ð
ñ 
ô 
ˆð 	×Ò˜4Ñ Ô Ð Øˆr&   c                 óÌ   — |dk    rd S t          ¦   «         }|D ]5}t          |t          ¦  «        rŒ|\  }}}|                     |||¦  «         Œ6|                      |¦  «         d S )NrF  )rF  rQ   rR   r„   re   )r@   rW   r‰   rŠ   r�   r‹   s         r$   r„   zFDArrayIndex.fromXML[  s~   € Ø�:ÒÐØˆFÝ‘:”:ˆØð 	3ð 	3ˆGÝ˜'¥3Ñ'Ô'ð ØØ#*Ñ ˆD�%˜Ø×Ò˜T 5¨'Ñ2Ô2Ð2Ð2Ø�Š�HÑÔÐÐÐr&   N)r    r¡   r¢   rì   r!  r{   r  r„   r¤   r&   r$   rK  rK  D  sF   € € € € € Ø(€Mð ð  ð  ð
ð 
ð 
ð	ð 	ð 	ð 	ð 	r&   rK  c                   ó:   — e Zd Zd	d„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	dS )
ÚVarStoreDataNc                 óV   — || _         d | _        || _        t          ¦   «         | _        d S rF   )rA   r§   Ú
otVarStorer   r   )r@   rA   rS  s      r$   r©   zVarStoreData.__init__h  s&   € ØˆŒ	ØˆŒ	Ø$ˆŒÝ‘H”HˆŒ	ˆ	ˆ	r&   c                 óp  — | j         r®t          | j         ¦  «        }|dk    r| j                              ¦   «         | _        n| j                              |¦  «        | _        i }t	          | j        |¦  «        }t          j        ¦   «         | _        | j                             || j	        ¦  «         d | _        | S ©Néÿÿ  )
rA   r  r.   r§   r   Úotr�   rS  rD   r   )r@   ÚlengthÚglobalStateÚreaders       r$   rD   zVarStoreData.decompilen  s—   € ØŒ9ð 	å ¤	Ñ*Ô*ˆFà˜ŠˆØ œIŸNšNÑ,Ô,�”	�	à œIŸNšN¨6Ñ2Ô2�”	ØˆKÝ" 4¤9¨kÑ:Ô:ˆFÝ œk™mœmˆDŒOØŒO×%Ò% f¨d¬iÑ8Ô8Ð8ØˆDŒIØˆr&   c                 ó”   — t          ¦   «         }| j                             || j        ¦  «         |                     ¦   «         | _        d S rF   )r   rS  rq   r   Ú
getAllDatar§   )r@   rk   s     r$   rq   zVarStoreData.compile~  s>   € Ý‘”ˆØŒ×Ò ¨¬	Ñ2Ô2Ð2ð ×%Ò%Ñ'Ô'ˆŒ	ˆ	ˆ	r&   c                 óF   — | j                              || j        ¦  «         d S rF   )rS  r{   r   )r@   r}   rW   s      r$   ÚwriteXMLzVarStoreData.writeXML…  s"   € ØŒ×Ò˜i¨¬Ñ3Ô3Ð3Ð3Ð3r&   c                 ó¼   — t          j        ¦   «         | _        |D ]@}t          |t          ¦  «        r)|\  }}}| j                             |||| j        ¦  «         Œ@ŒAd S rF   )rW  r�   rS  rQ   Útupler„   r   )r@   rW   r‰   rŠ   rÄ   r‹   s         r$   ÚxmlReadzVarStoreData.xmlReadˆ  se   € Ýœ+™-œ-ˆŒØð 	ð 	ˆGÝ˜'¥5Ñ)Ô)ð Ø'.Ñ$��e˜WØ”×'Ò'¨¨e°W¸d¼iÑHÔHÐHÐHàØˆtr&   c                 ó*   — t          | j        ¦  «        S rF   ©rG   r§   rH   s    r$   rI   zVarStoreData.__len__’  ó   € Ý�4”9‰~Œ~Ðr&   c                 ó@   — |€d}| j         j        |         }|j        }|S rä   )rS  ÚVarDataÚVarRegionCount)r@   ÚvsIndexÚvarDataÚ
numRegionss       r$   ÚgetNumRegionszVarStoreData.getNumRegions•  s)   € Øˆ?ØˆGØ”/Ô)¨'Ô2ˆØÔ+ˆ
ØÐr&   r&  )
r    r¡   r¢   r©   rD   rq   r^  ra  rI   rk  r¤   r&   r$   rQ  rQ  g  s‚   € € € € € ðð ð ð ðð ð ð (ð (ð (ð4ð 4ð 4ðð ð ðð ð ðð ð ð ð r&   rQ  c                   ó.   — e Zd Zdd„Zd„ Zd„ Zd„ Zd„ ZdS )ÚFDSelectNc                 ó*  — |�r�t          |¦  «        | _        | j        dk    r>ddlm}  |d|                     |¦  «        ¦  «                             ¦   «         | _        d S | j        dv �r| j        dk    rt          nt          }| j        dk    rt           nt          } ||¦  «        }g }	d }
d}|€|n|}t          |¦  «        D ]]} ||¦  «        }|dk    r|dk    s||k     s||k    rt          d¦  «        ‚|	 
                    |
g||z
  z  ¦  «         |} ||¦  «        }
Œ^ ||¦  «        }|r||cxk    r|k    r	n n||k    rt          d¦  «        ‚|	 
                    |
g||z
  z  ¦  «         |	| _        d S J d	|z  ¦   «         ‚|| _        g | _        d S )
Nr   )Úarrayr   ©r   r[   r   zInvalid FDSelect rangezInvalid FDSelect sentinelFzunsupported FDSelect format: %s)r  Úformatro  r.   ÚtolistÚgidArrayr  r  r  r0   râ   )r@   rA   Ú	numGlyphsrq  Ú	maxGlyphsro  Ú	readGlyphÚreadFDÚnRangesrs  ÚfdÚprevÚmaximumr6  ÚfirstÚsentinels                   r$   r©   zFDSelect.__init__ž  së  € Øñ %	å# D™/œ/ˆDŒKØŒ{˜aÒÐØ'Ð'Ð'Ð'Ð'Ð'à %  c¨4¯9ª9°YÑ+?Ô+?Ñ @Ô @× GÒ GÑ IÔ I�”��Ø” Ð&Ñ&Ø*.¬+¸Ò*:Ð*:�J˜JÅ
�	Ø&*¤k°QÒ&6Ð&6�˜½J�Ø#˜) D™/œ/�Ø�Ø�Ø�Ø'0Ð'8˜)˜)¸i�Ý˜w™œð &ð &�AØ%˜I d™OœO�EØ˜Qš˜ 5¨A¢: :°%¸$²,°,À%È'Â/À/Ý(Ð)AÑBÔBÐBØ—O’O R D¨E°D©LÑ$9Ñ:Ô:Ð:Ø �DØ˜ ™œ�B�BØ$˜9 T™?œ?�àðBà$¨Ð;Ð;Ò;Ð;°GÒ;Ð;Ð;Ð;Ð;Ø 4Ò'Ð'å$Ð%@ÑAÔAÐAØ—’  ¨°4©Ñ 8Ñ9Ô9Ð9Ø (�”��àHÐ?À&ÑHÑHÔHÐHð !ˆDŒKØˆDŒMˆMˆMr&   c                 ó*   — t          | j        ¦  «        S rF   )rG   rs  rH   s    r$   rI   zFDSelect.__len__Æ  s   € Ý�4”=Ñ!Ô!Ð!r&   c                 ó   — | j         |         S rF   ©rs  ©r@   rS   s     r$   rX   zFDSelect.__getitem__É  s   € ØŒ}˜UÔ#Ð#r&   c                 ó   — || j         |<   d S rF   r€  )r@   rS   ÚfdSelectValues      r$   r  zFDSelect.__setitem__Ì  s   € Ø,ˆŒ�eÑÐÐr&   c                 ó:   — | j                              |¦  «         d S rF   )rs  re   )r@   rƒ  s     r$   re   zFDSelect.appendÏ  s   € ØŒ×Ò˜]Ñ+Ô+Ð+Ð+Ð+r&   ©NNNN)r    r¡   r¢   r©   rI   rX   r  re   r¤   r&   r$   rm  rm  �  se   € € € € € ð&ð &ð &ð &ðP"ð "ð "ð$ð $ð $ð-ð -ð -ð,ð ,ð ,ð ,ð ,r&   rm  c                   óX   — e Zd ZdZ	 	 dd„Zd„ Zd„ Zd„ ZeZd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ ZdS )rf   a  The ``CharStrings`` in the font represent the instructions for drawing
    each glyph. This object presents a dictionary interface to the font's
    CharStrings, indexed by glyph name:

    .. code:: python

            tt["CFF "].cff[0].CharStrings["a"]
            # <T2CharString (bytecode) at 103451e90>

    See :class:`fontTools.misc.psCharStrings.T1CharString` and
    :class:`fontTools.misc.psCharStrings.T2CharString` for how to decompile,
    compile and interpret the glyph drawing instructions in the returned objects.

    Nc	                 ó$  — || _         || _        |�Vt          ||||||¬¦  «        | _        i x| _        }	t          t          |¦  «        ¦  «        D ]}
|
|	||
         <   Œd| _        d S i | _        d| _        || _        |�|| _	        |�	|| _
        d S d S )Nr'   r   r   )r)  ÚvarStorer>  ÚcharStringsIndexÚcharStringsr  rG   ÚcharStringsAreIndexedr*  r+  rŒ   )r@   rA   r]   r)  r*  r+  rŒ   r(   rˆ  rŠ  r6  s              r$   r©   zCharStrings.__init__ã  sÇ   € ð 'ˆÔØ ˆŒØÐÝ$.Ø�k 7¨H°gÀfð%ñ %ô %ˆDÔ!ð .0Ð/ˆDÔ˜{Ý�3˜w™<œ<Ñ(Ô(ð ,ð ,�Ø*+�˜G AœJÑ'Ð'ð *+ˆDÔ&Ð&Ð&à!ˆDÔà)*ˆDÔ&Ø"ˆDŒLØÐ#Ø (�”ØÐ"Ø&�”��ð #Ð"r&   c                 óN   — t          | j                             ¦   «         ¦  «        S rF   )r5   rŠ  rK   rH   s    r$   rK   zCharStrings.keys  s   € Ý�DÔ$×)Ò)Ñ+Ô+Ñ,Ô,Ð,r&   c                 ój   — | j         r| j        S t          | j                             ¦   «         ¦  «        S rF   )r‹  r‰  r5   rŠ  rM   rH   s    r$   rM   zCharStrings.values  s3   € ØÔ%ð 	3ØÔ(Ð(å˜Ô(×/Ò/Ñ1Ô1Ñ2Ô2Ð2r&   c                 ó   — || j         v S rF   )rŠ  )r@   rW   s     r$   Úhas_keyzCharStrings.has_key  s   € Ø�tÔ'Ð'Ð'r&   c                 ó*   — t          | j        ¦  «        S rF   )rG   rŠ  rH   s    r$   rI   zCharStrings.__len__  s   € Ý�4Ô#Ñ$Ô$Ð$r&   c                 óH   — | j         |         }| j        r| j        |         }|S rF   )rŠ  r‹  r‰  )r@   rW   Ú
charStrings      r$   rX   zCharStrings.__getitem__  s-   € ØÔ% dÔ+ˆ
ØÔ%ð 	;ØÔ.¨zÔ:ˆJØÐr&   c                 óZ   — | j         r| j        |         }|| j        |<   d S || j        |<   d S rF   )r‹  rŠ  r‰  )r@   rW   r’  rS   s       r$   r  zCharStrings.__setitem__  s@   € ØÔ%ð 	0ØÔ$ TÔ*ˆEØ+5ˆDÔ! %Ñ(Ð(Ð(à%/ˆDÔ˜TÑ"Ð"Ð"r&   c                 óì   — | j         r'| j        |         }| j                             |¦  «        S t	          | d¦  «        r&t	          | d¦  «        r| j        |         j        }nd}nd }| j        |         |fS )NrŒ   r+  r   )r‹  rŠ  r‰  r:  rP   ÚfdSelectIndex)r@   rW   rS   r9  s       r$   r:  zCharStrings.getItemAndSelector"  s†   € ØÔ%ð 	/ØÔ$ TÔ*ˆEØÔ(×;Ò;¸EÑBÔBÐBå�t˜YÑ'Ô'ð Ý˜4 Ñ,Ô,ð ØÔ*¨4Ô0Ô>�C�Cà�C�Cà�ØÔ# DÔ)¨3Ð.Ð.r&   c                 óÖ  — t          |                      ¦   «         ¦  «        }|D ]Ä}|                      |¦  «        \  }}|                     ¦   «         rdg}ng }|€|                     dd|fg|z   ¦  «         n|                     dd|fd|fg|z   ¦  «         |                     ¦   «          |                     |¦  «         |                     d¦  «         |                     ¦   «          ŒÅd S )N)r2  r   r1  rW   r•  )ÚsortedrK   r:  r5  rz   ry   r{   r|   )r@   r}   ÚnamesrW   ÚcharStrr•  r2  s          r$   r{   zCharStrings.toXML0  s  € Ý�t—y’y‘{”{Ñ#Ô#ˆØð 	 ð 	 ˆDØ%)×%<Ò%<¸TÑ%BÔ%BÑ"ˆG�]Ø×)Ò)Ñ+Ô+ð Ø!�l��à�ØÐ$Ø×"Ò" <°6¸4°.Ð1AÀCÑ1GÑHÔHÐHÐHà×"Ò"Ø Ø˜d�^ o°}Ð%EÐFÈÑLñô ð ð ×ÒÑÔÐØ�MŠM˜)Ñ$Ô$Ð$Ø×Ò˜\Ñ*Ô*Ð*Ø×ÒÑÔÐÐð!	 ð 	 r&   c                 óž  — |D ]É}t          |t          ¦  «        rŒ|\  }}}|dk    rŒ%d}t          | d¦  «        r<	 t          |d         ¦  «        }n# t          $ r d}Y nw xY w| j        |         j        }n| j        }|d         }t          j	        } ||| j
        ¬¦  «        }	|	                     |||¦  «         |dk    r||	_        |	| |<   ŒÊd S )Nr1  r®   rŒ   r•  r   rW   r-  )rQ   rR   rP   r   rT   rŒ   r‚   r*  r   r‡   r)  r„   r•  )
r@   rW   r‰   rŠ   r‹   ÚfdIDr*  Ú	glyphNamer<  r’  s
             r$   r„   zCharStrings.fromXMLD  s  € Øð 	)ð 	)ˆGÝ˜'¥3Ñ'Ô'ð ØØ#*Ñ ˆD�%˜Ø�|Ò#Ð#ØØˆDÝ�t˜YÑ'Ô'ð 'ðÝ# E¨/Ô$:Ñ;Ô;�D�DøÝð ð ð Ø�D�D�Dðøøøàœ, tÔ,Ô4��àœ,�à˜fœˆIÝ+Ô8ˆOØ(˜°ÀdÔFVÐWÑWÔWˆJØ×Ò˜t U¨GÑ4Ô4Ð4Ø�qŠyˆyØ+/�
Ô(Ø(ˆD�‰OˆOð-	)ð 	)s   »AÁA ÁA r&  )r    r¡   r¢   r£   r©   rK   rM   r�  Ú__contains__rI   rX   r  r:  r{   r„   r¤   r&   r$   rf   rf   Ó  sÉ   € € € € € ðð ð. Øð'ð 'ð 'ð 'ðB-ð -ð -ð3ð 3ð 3ð(ð (ð (ð €Lð%ð %ð %ðð ð ð0ð 0ð 0ð/ð /ð /ð ð  ð  ð()ð )ð )ð )ð )r&   rf   c                 óF   — t          |                      d¦  «        ¦  «        S r  )r   r.   )rA   s    r$   r  r  ^  s   € Ý�4—9’9˜Q‘<”<Ñ Ô Ð r&   c                 óZ   — t          j        d|                      d¦  «        ¦  «        \  }|S )Nr)   r   ©r1   r,   r.   ©rA   rt   s     r$   r  r  b  ó$   € ÝŒ}˜T 4§9¢9¨Q¡<¤<Ñ0Ô0�H€UØ€Lr&   c                 óZ   — t          j        d|                      d¦  «        ¦  «        \  }|S )Nr
  r[   r   r¡  s     r$   r  r  g  r¢  r&   c                 óJ   — |                       t          |¦  «        ¦  «         d S rF   )r´   r   r¡  s     r$   rÓ   rÓ   l  s    € Ø‡J‚J�w�u‰~Œ~ÑÔÐÐÐr&   c                 óV   — |                       t          j        d|¦  «        ¦  «         d S ©Nr)   ©r´   r1   rc   r¡  s     r$   rÒ   rÒ   p  ó&   € Ø‡J‚J�vŒ{˜4 Ñ'Ô'Ñ(Ô(Ð(Ð(Ð(r&   c                 óV   — |                       t          j        d|¦  «        ¦  «         d S ©Nr
  r§  r¡  s     r$   rÑ   rÑ   t  r¨  r&   c                 ó    — t          | ¦  «        S rF   )r   rs   s    r$   Ú	packCard8r¬  x  s   € Ý�5‰>Œ>Ðr&   c                 ó,   — t          j        d| ¦  «        S r¦  ©r1   rc   rs   s    r$   Ú
packCard16r¯  |  ó   € ÝŒ;�t˜UÑ#Ô#Ð#r&   c                 ó,   — t          j        d| ¦  «        S rª  r®  rs   s    r$   Ú
packCard32r²  €  r°  r&   c                 ó.   — i }| D ]\  }}}}}||f||<   Œ|S rF   r¤   ©r«   ÚdÚoprW   ÚargÚdefaultÚconvs          r$   ÚbuildOperatorDictrº  „  s5   € Ø
€AØ(-ð ð Ñ$ˆˆD�#�w Ø�s�ˆˆ"‰ˆØ€Hr&   c                 óÎ   — i }| D ]_\  }}}}}t          |t          ¦  «        r,t          |d         ¦  «        t          |d         ¦  «        z   }nt          |¦  «        }||f||<   Œ`|S ©Nr   r   )rQ   r`  r   r´  s          r$   ÚbuildOpcodeDictr½  ‹  sr   € Ø
€AØ(-ð ð Ñ$ˆˆD�#�w Ý�b�%Ñ Ô ð 	Ý˜˜Aœ‘”¥'¨"¨Q¬%¡.¤.Ñ0ˆBˆBå˜‘”ˆBØ�s�)ˆˆ$‰ˆØ€Hr&   c                 óJ   — g }| D ]\  }}}}}|                      |¦  «         Œ|S rF   )re   )r«   Úlr¶  rW   r·  r¸  r¹  s          r$   Ú
buildOrderrÀ  –  s7   € Ø
€AØ(-ð ð Ñ$ˆˆD�#�w Ø	�Š�‰ŒˆˆØ€Hr&   c                 ó.   — i }| D ]\  }}}}}|�|||<   Œ|S rF   r¤   r´  s          r$   ÚbuildDefaultsrÂ  �  s6   € Ø
€AØ(-ð ð Ñ$ˆˆD�#�w ØÐØˆAˆd‰GøØ€Hr&   c                 ó*   — i }| D ]\  }}}}}|||<   Œ|S rF   r¤   r´  s          r$   ÚbuildConvertersrÄ  ¥  s1   € Ø
€AØ(-ð ð Ñ$ˆˆD�#�w Øˆˆ$‰ˆØ€Hr&   c                   ó,   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚSimpleConverterc                 ó  — t          |d¦  «        s|                      ||¦  «        S |j        }|                     ¦   «         }	 |                      ||¦  «        |                     |¦  «         S # |                     |¦  «         w xY w)NrA   )rP   Ú_readrA   r²   r3   )r@   rÄ   rt   rA   r¶   s        r$   r.   zSimpleConverter.read­  sw   € Ý�v˜vÑ&Ô&ð 	-Ø—:’:˜f eÑ,Ô,Ð,ØŒ{ˆØ�iŠi‰kŒkˆð	Ø—:’:˜f eÑ,Ô,à�IŠI�c‰NŒNˆNˆNøˆD�IŠI�c‰NŒNˆNˆNøøøs   ÁA. Á.Bc                 ó   — |S rF   r¤   ©r@   rÄ   rt   s      r$   rÈ  zSimpleConverter._read·  rÇ   r&   c                 ó   — |S rF   r¤   rÊ  s      r$   r´   zSimpleConverter.writeº  rÇ   r&   c                 ó\   — |                      ||¬¦  «         |                     ¦   «          d S )Nrs   )rx   ry   ©r@   r}   rW   rt   s       r$   ÚxmlWritezSimpleConverter.xmlWrite½  s3   € Ø×Ò˜D¨ÐÑ.Ô.Ð.Ø×ÒÑÔÐÐÐr&   c                 ó   — |d         S ©Nrt   r¤   ©r@   rW   r‰   rŠ   rÄ   s        r$   ra  zSimpleConverter.xmlReadÁ  s   € Ø�WŒ~Ðr&   N)r    r¡   r¢   r.   rÈ  r´   rÎ  ra  r¤   r&   r$   rÆ  rÆ  ¬  s_   € € € € € ðð ð ðð ð ðð ð ðð ð ðð ð ð ð r&   rÆ  c                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )ÚASCIIConverterc                 ó$   — t          |d¬¦  «        S ©NÚasciir   r    rÊ  s      r$   rÈ  zASCIIConverter._readÆ  s   € Ý�U WÐ-Ñ-Ô-Ð-r&   c                 ó$   — t          |d¬¦  «        S rÕ  ©r
   rÊ  s      r$   r´   zASCIIConverter.writeÉ  s   € Ý�u wÐ/Ñ/Ô/Ð/r&   c                 óz   — |                      |t          |d¬¦  «        ¬¦  «         |                     ¦   «          d S )NrÖ  r   rs   ©rx   r   ry   rÍ  s       r$   rÎ  zASCIIConverter.xmlWriteÌ  s@   € Ø×Ò˜D­¨e¸gÐ(FÑ(FÔ(FÐÑGÔGÐGØ×ÒÑÔÐÐÐr&   c                 ó0   — t          |d         d¬¦  «        S )Nrt   rÖ  r   rØ  rÑ  s        r$   ra  zASCIIConverter.xmlReadÐ  s   € Ý�u˜W”~°Ð:Ñ:Ô:Ð:r&   N©r    r¡   r¢   rÈ  r´   rÎ  ra  r¤   r&   r$   rÓ  rÓ  Å  sP   € € € € € ð.ð .ð .ð0ð 0ð 0ðð ð ð;ð ;ð ;ð ;ð ;r&   rÓ  c                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )ÚLatin1Converterc                 ó$   — t          |d¬¦  «        S ©Nr   r   r    rÊ  s      r$   rÈ  zLatin1Converter._readÕ  s   € Ý�U XÐ.Ñ.Ô.Ð.r&   c                 ó$   — t          |d¬¦  «        S rà  rØ  rÊ  s      r$   r´   zLatin1Converter.writeØ  s   € Ý�u xÐ0Ñ0Ô0Ð0r&   c                 ó²   — t          |d¬¦  «        }|dv rt          j        dd|¦  «        }|                     ||¬¦  «         |                     ¦   «          d S )Nr   r   )ÚNoticeÚ	Copyrightz	[\r\n]\s+ú rs   )r   ÚreÚsubrx   ry   rÍ  s       r$   rÎ  zLatin1Converter.xmlWriteÛ  sd   € Ý�e hÐ/Ñ/Ô/ˆØÐ*Ð*Ð*Ý”F˜<¨¨eÑ4Ô4ˆEØ×Ò˜D¨ÐÑ.Ô.Ð.Ø×ÒÑÔÐÐÐr&   c                 ó0   — t          |d         d¬¦  «        S )Nrt   r   r   rØ  rÑ  s        r$   ra  zLatin1Converter.xmlReadâ  s   € Ý�u˜W”~°Ð;Ñ;Ô;Ð;r&   NrÜ  r¤   r&   r$   rÞ  rÞ  Ô  sP   € € € € € ð/ð /ð /ð1ð 1ð 1ðð ð ð<ð <ð <ð <ð <r&   rÞ  c                 óT   — 	 t          | ¦  «        }n#  t          | ¦  «        }Y nxY w|S rF   )rˆ   Úfloat)r#   rt   s     r$   ÚparseNumrë  æ  s1   € ðÝ�A‘”ˆˆøðÝ�a‘”ˆˆˆøøøØ€Ls   ‚ ’%c                 óø   — g }| D ]Y}t          |t          ¦  «        rŒ|\  }}}|d                              ¦   «         }d„ |D ¦   «         }|                     |¦  «         ŒZt	          |¦  «        dk    r|d         }|S )Nrt   c                 ó,   — g | ]}t          |¦  «        ‘ŒS r¤   ©r   ©r"   Úvals     r$   ú
<listcomp>z"parseBlendList.<locals>.<listcomp>õ  s   € Ð8Ð8Ð8 s•X˜c‘]”]Ð8Ð8Ð8r&   r   r   )rQ   rR   Úsplitre   rG   )r#   Ú	valueListr‹   rW   r‰   rŠ   Ú	blendLists          r$   ÚparseBlendListrõ  î  s–   € Ø€IØð $ð $ˆÝ�g�sÑ#Ô#ð 	ØØ&Ñˆˆe�WØ˜'”N×(Ò(Ñ*Ô*ˆ	Ø8Ð8¨iÐ8Ñ8Ô8ˆ	Ø×Ò˜Ñ#Ô#Ð#Ð#Ý
ˆ9�~„~˜ÒÐØ˜a”Lˆ	ØÐr&   c                   ó   — e Zd Zd„ Zd„ ZdS )ÚNumberConverterc                 ó  — t          |t          ¦  «        rË|                     |¦  «         |                     ¦   «          |                     ¦   «          d                     d„ |D ¦   «         ¦  «        }|                     t          |¬¦  «         |                     ¦   «          |                     ¦   «          | 	                    |¦  «         |                     ¦   «          d S |                     ||¬¦  «         |                     ¦   «          d S )Nrå  c                 ó,   — g | ]}t          |¦  «        ‘ŒS r¤   ©rR   rï  s     r$   rñ  z,NumberConverter.xmlWrite.<locals>.<listcomp>  s   € Ð"=Ð"=Ð"=°¥3 s¡8¤8Ð"=Ð"=Ð"=r&   rs   ©
rQ   r5   rz   ry   ÚindentÚjoinrx   ÚkBlendDictOpNameÚdedentr|   )r@   r}   rW   rt   Ú
blendValues        r$   rÎ  zNumberConverter.xmlWriteý  s  € Ý�e�TÑ"Ô"ð 	 Ø×Ò˜tÑ$Ô$Ð$Ø×ÒÑÔÐØ×ÒÑÔÐØŸšÐ"=Ð"=°uÐ"=Ñ"=Ô"=Ñ>Ô>ˆJØ×ÒÕ 0¸
ÐÑCÔCÐCØ×ÒÑÔÐØ×ÒÑÔÐØ×Ò˜TÑ"Ô"Ð"Ø×ÒÑÔÐÐÐà×Ò ¨EÐÑ2Ô2Ð2Ø×ÒÑÔÐÐÐr&   c                 ó€   — |                      dd ¦  «        }|€t          |¦  «        }nt          |d         ¦  «        }|S rÐ  )Úgetrõ  rë  )r@   rW   r‰   rŠ   rÄ   ÚvalueStringrt   s          r$   ra  zNumberConverter.xmlRead  s@   € Ø—i’i ¨Ñ.Ô.ˆØÐÝ" 7Ñ+Ô+ˆEˆEå˜U 7œ^Ñ,Ô,ˆEØˆr&   N©r    r¡   r¢   rÎ  ra  r¤   r&   r$   r÷  r÷  ü  s2   € € € € € ð ð  ð  ðð ð ð ð r&   r÷  c                   ó   — e Zd Zd„ Zd„ ZdS )ÚArrayConverterc                 ót  — |rët          |d         t          ¦  «        rÐ|                     |¦  «         |                     ¦   «          |                     ¦   «          |D ]Q}d                     d„ |D ¦   «         ¦  «        }|                     t          |¬¦  «         |                     ¦   «          ŒR|                     ¦   «          | 	                    |¦  «         |                     ¦   «          d S d                     d„ |D ¦   «         ¦  «        }|                     ||¬¦  «         |                     ¦   «          d S )Nr   rå  c                 ó,   — g | ]}t          |¦  «        ‘ŒS r¤   rú  rï  s     r$   rñ  z+ArrayConverter.xmlWrite.<locals>.<listcomp>  s   € Ð&EÐ&EÐ&E°C¥s¨3¡x¤xÐ&EÐ&EÐ&Er&   rs   c                 ó,   — g | ]}t          |¦  «        ‘ŒS r¤   rú  rï  s     r$   rñ  z+ArrayConverter.xmlWrite.<locals>.<listcomp>#  s   € Ð8Ð8Ð8¨3�c #™hœhÐ8Ð8Ð8r&   rû  )r@   r}   rW   rt   ró  r   s         r$   rÎ  zArrayConverter.xmlWrite  sD  € Øð 	 •Z  a¤­$Ñ/Ô/ð 	 Ø×Ò˜tÑ$Ô$Ð$Ø×ÒÑÔÐØ×ÒÑÔÐØ"ð $ð $�	Ø ŸXšXÐ&EÐ&E¸9Ð&EÑ&EÔ&EÑFÔF�
Ø×#Ò#Õ$4¸JÐ#ÑGÔGÐGØ×!Ò!Ñ#Ô#Ð#Ð#Ø×ÒÑÔÐØ×Ò˜TÑ"Ô"Ð"Ø×ÒÑÔÐÐÐà—H’HÐ8Ð8°%Ð8Ñ8Ô8Ñ9Ô9ˆEØ×Ò ¨EÐÑ2Ô2Ð2Ø×ÒÑÔÐÐÐr&   c                 ó–   — |                      dd ¦  «        }|€t          |¦  «        }n |                     ¦   «         }d„ |D ¦   «         }|S )Nrt   c                 ó,   — g | ]}t          |¦  «        ‘ŒS r¤   )rë  )r"   rt   s     r$   rñ  z*ArrayConverter.xmlRead.<locals>.<listcomp>-  s   € Ð=Ð=Ð=¨U� %™œÐ=Ð=Ð=r&   )r  rõ  rò  )r@   rW   r‰   rŠ   rÄ   r  ró  rM   s           r$   ra  zArrayConverter.xmlRead'  sT   € Ø—i’i ¨Ñ.Ô.ˆØÐÝ& wÑ/Ô/ˆIˆIà ×&Ò&Ñ(Ô(ˆFØ=Ð=°fÐ=Ñ=Ô=ˆIØÐr&   Nr  r¤   r&   r$   r  r    s2   € € € € € ð ð  ð  ð"ð ð ð ð r&   r  c                   ó   — e Zd Zd„ Zd„ ZdS )ÚTableConverterc                 óÔ   — |                      |¦  «         |                     ¦   «          |                     |¦  «         |                     |¦  «         |                     ¦   «          d S rF   )rz   ry   r{   r|   rÍ  s       r$   rÎ  zTableConverter.xmlWrite2  sf   € Ø×Ò˜4Ñ Ô Ð Ø×ÒÑÔÐØ�Š�IÑÔÐØ×Ò˜ÑÔÐØ×ÒÑÔÐÐÐr&   c                 ó®   —  |                       ¦   «         ¦   «         }|D ]5}t          |t          ¦  «        rŒ|\  }}}|                     |||¦  «         Œ6|S rF   )ÚgetClassrQ   rR   r„   )r@   rW   r‰   rŠ   rÄ   Úobr‹   s          r$   ra  zTableConverter.xmlRead9  se   € ØˆT�]Š]‰_Œ_ÑÔˆØð 	-ð 	-ˆGÝ˜'¥3Ñ'Ô'ð ØØ#*Ñ ˆD�%˜Ø�JŠJ�t˜U GÑ,Ô,Ð,Ð,Øˆ	r&   Nr  r¤   r&   r$   r  r  1  s2   € € € € € ðð ð ðð ð ð ð r&   r  c                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )ÚPrivateDictConverterc                 ó   — t           S rF   )ÚPrivateDictrH   s    r$   r  zPrivateDictConverter.getClassD  s   € ÝÐr&   c                 ó<  — |\  }}|j         }|j        }	 |j        }n# t          $ r d }Y nw xY wt	          |j        ||||¬¦  «        }|                     |¦  «         |                     |¦  «        }	t          |	¦  «        |k    sJ ‚| 	                    |	¦  «         |S rN  )
rA   r  r†   ÚAttributeErrorr  r;   r3   r.   rG   rD   )
r@   rÄ   rt   r  rÔ   rA   r(   r†   Úprivr§   s
             r$   rÈ  zPrivateDictConverter._readG  s´   € Ø‰ˆˆfØŒ{ˆØ”ˆð	Ø”]ˆFˆFøÝð 	ð 	ð 	ØˆFˆFˆFð	øøøå˜6œ>¨4°ÀÈvÐVÑVÔVˆØ�	Š	�&ÑÔÐØ�yŠy˜‰ŒˆÝ�4‰yŒy˜DÒ Ð Ð Ð Ø�Š�tÑÔÐØˆs   • �,«,c                 ó   — dS )N©r   r   r¤   rÊ  s      r$   r´   zPrivateDictConverter.writeV  s   € Øˆvr&   N©r    r¡   r¢   r  rÈ  r´   r¤   r&   r$   r  r  C  sA   € € € € € ðð ð ðð ð ðð ð ð ð r&   r  c                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )ÚSubrsConverterc                 ó   — t           S rF   )r>  rH   s    r$   r  zSubrsConverter.getClass[  s   € ÝÐr&   c                 óz   — |j         }|j        }|                     |j        |z   ¦  «         t	          ||¬¦  «        S r  )rA   r  r3   rÔ   r>  )r@   rÄ   rt   rA   r(   s        r$   rÈ  zSubrsConverter._read^  s<   € ØŒ{ˆØ”ˆØ�	Š	�&”- %Ñ'Ñ(Ô(Ð(Ý˜$ vÐ.Ñ.Ô.Ð.r&   c                 ó   — dS rä   r¤   rÊ  s      r$   r´   zSubrsConverter.writed  ó   € Øˆqr&   Nr  r¤   r&   r$   r  r  Z  sA   € € € € € ðð ð ð/ð /ð /ðð ð ð ð r&   r  c                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )ÚCharStringsConverterc           
      ó8  — |j         }|j        }|j        }t          |dd ¦  «        }|j        }t          |d¦  «        r$|j        }t          |d¦  «        r|j        }	nd }	d }
nd\  }	}|j        }
| 	                    |¦  «         t          ||||
|	|||¬¦  «        }|S )Nr�   r…   rm  r&  )r(   rˆ  )rA   r  r]   Úgetattrr?   rP   r…   rm  r‚   r3   rf   )r@   rÄ   rt   rA   r(   r]   rˆ  r)  rŒ   r+  r*  rŠ  s               r$   rÈ  zCharStringsConverter._readi  sÇ   € ØŒ{ˆØ”ˆØ”.ˆÝ˜6 :¨tÑ4Ô4ˆØÔ(ˆÝ�6˜9Ñ%Ô%ð 		%Ø”nˆGÝ�v˜zÑ*Ô*ð  Ø!œ?��à�ØˆGˆGà *ÑˆH�gØ”nˆGØ�	Š	�%ÑÔÐÝ!ØØØØØØØØð	
ñ 	
ô 	
ˆð Ðr&   c                 ó   — dS rä   r¤   rÊ  s      r$   r´   zCharStringsConverter.write†  r!  r&   c                 ó  — t          |d¦  «        r$|j        }t          |d¦  «        r|j        }nd }d }n|j        d d }}}t	          d d |j        |||t          |dd ¦  «        ¬¦  «        }|                     |||¦  «         |S )Nr…   rm  r�   )rˆ  )rP   r…   rm  r‚   rf   r?   r%  r„   )	r@   rW   r‰   rŠ   rÄ   rŒ   r+  r*  rŠ  s	            r$   ra  zCharStringsConverter.xmlRead‰  s®   € Ý�6˜9Ñ%Ô%ð 	Dð ”nˆGÝ�v˜zÑ*Ô*ð  Ø!œ?��à�ØˆGˆGð
 *0¬¸¸t˜w�XˆGÝ!ØØØÔØØØÝ˜V Z°Ñ6Ô6ð
ñ 
ô 
ˆð 	×Ò˜D %¨Ñ1Ô1Ð1ØÐr&   N©r    r¡   r¢   rÈ  r´   ra  r¤   r&   r$   r#  r#  h  sA   € € € € € ðð ð ð:ð ð ðð ð ð ð r&   r#  c                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )ÚCharsetConverterc                 ó  — t          |d¦  «        }|dk    �r†|j        }|j        }|                     |¦  «         t                               t
          d|¦  «         t          |¦  «        }|dk    rt          |||j        |¦  «        }n,|dk    s|dk    rt          |||j        ||¦  «        }nt          ‚t          |¦  «        |k    sJ ‚t                               t
          d|                     ¦   «         ¦  «         i }g }	|D ]—}
|
|v rw||
         }t          |¦  «        t          |¦  «        z  }|
dz   t          |¦  «        z   |v r|dz  }|
dz   t          |¦  «        z   |v °|dz   ||
<   |
dz   t          |¦  «        z   }
d||
<   |	                     |
¦  «         Œ˜|	}n?|s	d|j        vr|dk    sJ ‚d }n)|dk    rt"          }n|dk    rt$          }n|dk    rt&          }|r't          |¦  «        |j        k    r|d |j        …         }|S )	NÚROSr   zloading charset at %sr   r   z    charset end at %sú.rf   )rP   rt  rA   r3   r¯   r°   r  ÚparseCharset0r;   ÚparseCharsetÚNotImplementedErrorrG   r²   rg   rR   re   rò   ÚcffISOAdobeStringsÚcffIExpertStringsÚcffExpertSubsetStrings)r@   rÄ   rt   ÚisCIDrt  rA   rq  r]   ÚallNamesÚ
newCharsetrœ  Únr˜  s                r$   rÈ  zCharsetConverter._read¦  s;  € Ý˜ Ñ&Ô&ˆØ�1Š9‰9ØÔ(ˆIØ”;ˆDØ�IŠI�eÑÔÐÝ�GŠG•EÐ2°EÑ:Ô:Ð:Ý˜t‘_”_ˆFØ˜Š{ˆ{Ý'¨	°4¸¼ÈÑOÔO��Ø˜1’� ¨!¢ Ý& y°$¸¼ÈÈvÑVÔV��å)Ð)Ý�w‘<”< 9Ò,Ð,Ð,Ð,Ý�GŠG•EÐ2°D·I²I±K´KÑ@Ô@Ð@àˆHØˆJØ$ð 
-ð 
-�	Ø Ð(Ð(à  Ô+�AÝ ™MœM­C°©L¬LÑ8�EØ$ s™?­S°©V¬VÑ3¸Ð=Ð=Ø˜Q™˜ð % s™?­S°©V¬VÑ3¸Ð=Ð=à*+¨a©%�H˜YÑ'Ø )¨C¡µ#°a±&´&Ñ 8�IØ&'�˜Ñ#Ø×!Ò! )Ñ,Ô,Ð,Ð,Ø ˆGˆGàð 
1˜¨V¬^Ð;Ð;ð  ’z�z�z�zØ��Ø˜!’�Ý,��Ø˜!’�Ý+��Ø˜!’�Ý0�Øð 	2�˜G™œ¨Ô(8Ò8Ð8ØÐ0 Ô 0Ð0Ô1ˆGØˆr&   c                 ó   — dS rä   r¤   rÊ  s      r$   r´   zCharsetConverter.writeÕ  r!  r&   c                 óX   — |                      d¦  «         |                     ¦   «          d S )Nz8charset is dumped separately as the 'GlyphOrder' element)r4  ry   rÍ  s       r$   rÎ  zCharsetConverter.xmlWriteØ  s1   € ð 	×ÒÐTÑUÔUÐUØ×ÒÑÔÐÐÐr&   c                 ó   — d S rF   r¤   rÑ  s        r$   ra  zCharsetConverter.xmlReadß  ó   € Øˆr&   NrÜ  r¤   r&   r$   r*  r*  ¥  sQ   € € € € € ð-ð -ð -ð^ð ð ðð ð ðð ð ð ð r&   r*  c                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )ÚCharsetCompilerc                 óü   — |d         dk    sJ ‚t          |j        d¦  «        }t          |||¦  «        }t          |||¦  «        }t	          |¦  «        t	          |¦  «        k     r|| _        n|| _        || _        d S )Nr   ú.notdefr,  )rP   ÚdictObjÚpackCharset0ÚpackCharsetrG   r§   rÄ   )r@   r;   r]   rÄ   r4  Údata0r§   s          r$   r©   zCharsetCompiler.__init__ä  s|   € Ø�qŒz˜YÒ&Ð&Ð&Ð&Ý˜œ¨Ñ.Ô.ˆÝ˜W e¨WÑ5Ô5ˆÝ˜7 E¨7Ñ3Ô3ˆÝˆt‰9Œ9•s˜5‘z”zÒ!Ð!ØˆDŒIˆIàˆDŒIØˆŒˆˆr&   c                 ó$   — || j         j        d<   d S )Nr]   rñ   ró   s      r$   r­   zCharsetCompiler.setPosï  rô   r&   c                 ó*   — t          | j        ¦  «        S rF   rc  rH   s    r$   rd   zCharsetCompiler.getDataLengthò  rd  r&   c                 ó:   — |                      | j        ¦  «         d S rF   ©r´   r§   ©r@   rA   s     r$   ri   zCharsetCompiler.toFileõ  ó   € Ø�
Š
�4”9ÑÔÐÐÐr&   N©r    r¡   r¢   r©   r­   rd   ri   r¤   r&   r$   r=  r=  ã  sP   € € € € € ð	ð 	ð 	ð-ð -ð -ðð ð ðð ð ð ð r&   r=  c                 óü   — d }t           t          dft          t          dft          t
          dfg}t          | ¦  «        }|D ];\  }}}|� n2||k    rŒ|}t          |¦  «        D ]}| |         ||         k    rd } nŒŒ<|S )Nr   r   r   )ÚcffISOAdobeStringCountr1  ÚcffExpertStringCountr2  ÚcffExpertSubsetStringCountr3  rG   r  )r]   ÚpredefinedCharSetValÚpredefinedCharSetsÚlcsÚcntÚpcsÚcsvr6  s           r$   ÚgetStdCharSetrU  ù  s±   € àÐå	Õ!3°QÐ7Ý	Õ0°!Ð4Ý	#Õ%;¸QÐ?ðÐõ
 ˆg‰,Œ,€CØ+ð 	ð 	‰ˆˆS�#ØÐ+ØˆEØ�Š9ˆ9ØØ"ÐÝ�s‘”ð 	ð 	ˆAØ�qŒz˜S œVÒ#Ð#Ø'+Ð$Ø�ð $øð  Ðr&   c                 ó0   — t          | dd …         ¦  «        S )Nr   ©rˆ   ©rW   r;   s     r$   ÚgetCIDfromNamerY    s   € Ýˆt�A�B�BŒx‰=Œ=Ðr&   c                 ó,   — |                      | ¦  «        S rF   )ÚgetSIDrX  s     r$   ÚgetSIDfromNamer\    s   € Ø�>Š>˜$ÑÔÐr&   c           	      óØ   — d}t          |¦  «        g}|rt          }nt          }| dd …         D ].}|                     t	           |||¦  «        ¦  «        ¦  «         Œ/t          |¦  «        S r¼  )r¬  rY  r\  re   r¯  r	   )r]   r4  r;   Úfmtr§   Ú	getNameIDrW   s          r$   rA  rA    su   € Ø
€CÝ�c‰NŒNÐ€DØð #Ý"ˆ	ˆ	å"ˆ	à˜˜˜”ð :ð :ˆØ�Š•J˜y˜y¨¨wÑ7Ô7Ñ8Ô8Ñ9Ô9Ð9Ð9Ý�T‰?Œ?Ðr&   c                 óò  — d}g }d }d}|rt           }nt          }| dd …         D ]D} |||¦  «        }	|€|	}n/|dz   |	k    r&||z
  }
|
dk    rd}|                     ||
f¦  «         |	}|	}ŒE|r$||z
  }
|
dk    rd}|                     ||
f¦  «         t          |¦  «        g}|dk    rt          }nt          }|D ]3\  }}
|                     t	          |¦  «         ||
¦  «        z   ¦  «         Œ4t          |¦  «        S )Nr   r   éÿ   r   )rY  r\  re   r¬  r¯  r	   )r]   r4  r;   r^  Úrangesr|  Úendr_  rW   ÚSIDÚnLeftr§   Ú	nLeftFuncs                r$   rB  rB  $  sG  € Ø
€CØ€FØ€EØ
€CØð #Ý"ˆ	ˆ	å"ˆ	à˜˜˜”ð 
ð 
ˆØˆi˜˜gÑ&Ô&ˆØˆ=ØˆEˆEØ�1‰W˜Š^ˆ^Ø˜%‘KˆEØ�sŠ{ˆ{Ø�Ø�MŠM˜5 %˜.Ñ)Ô)Ð)ØˆEØˆˆØ
ð &Ø�e‘ˆØ�3Š;ˆ;ØˆCØ�Š�u˜e�nÑ%Ô%Ð%å�c‰NŒNÐ€DØ
ˆa‚x€xÝˆ	ˆ	åˆ	Øð :ð :‰ˆˆuØ�Š•J˜uÑ%Ô%¨	¨	°%Ñ(8Ô(8Ñ8Ñ9Ô9Ð9Ð9Ý�T‰?Œ?Ðr&   c                 óH  — dg}|r]t          | dz
  ¦  «        D ]I}t          |¦  «        }|                     dt          |¦  «                             d¦  «        z   ¦  «         ŒJn?t          | dz
  ¦  «        D ],}t          |¦  «        }|                     ||         ¦  «         Œ-|S ©Nr?  r   ÚcidrZ   )r  r  re   rR   Úzfill)rt  rA   r;   r4  r]   r6  ÚCIDrd  s           r$   r.  r.  I  s²   € Øˆk€GØð )Ý�y 1‘}Ñ%Ô%ð 	6ð 	6ˆAÝ˜TÑ"Ô"ˆCØ�NŠN˜5¥3 s¡8¤8§>¢>°!Ñ#4Ô#4Ñ4Ñ5Ô5Ð5Ð5ð	6õ �y 1‘}Ñ%Ô%ð 	)ð 	)ˆAÝ˜TÑ"Ô"ˆCØ�NŠN˜7 3œ<Ñ(Ô(Ð(Ð(Ø€Nr&   c                 ó¦  — dg}d}|dk    rt           }nt          }|| k     r°t          |¦  «        } ||¦  «        }	|rRt          |||	z   dz   ¦  «        D ]:}
|                     dt	          |
¦  «                             d¦  «        z   ¦  «         Œ;n4t          |||	z   dz   ¦  «        D ]}|                     ||         ¦  «         Œ||	z   dz   }|| k     °°|S rh  )r  r  r  re   rR   rj  )rt  rA   r;   r4  r^  r]   rn   rf  r|  re  rk  rd  s               r$   r/  r/  V  s  € Øˆk€GØ€EØ
ˆa‚x€xÝˆ	ˆ	åˆ	Ø
�)Ò
Ð
Ý˜4Ñ Ô ˆØ�	˜$‘”ˆØð 	-Ý˜U E¨E¡M°AÑ$5Ñ6Ô6ð :ð :�Ø—’˜u¥s¨3¡x¤x§~¢~°aÑ'8Ô'8Ñ8Ñ9Ô9Ð9Ð9ð:õ ˜U E¨E¡M°AÑ$5Ñ6Ô6ð -ð -�Ø—’˜w sœ|Ñ,Ô,Ð,Ð,Ø˜‘ Ñ!ˆð �)Ò
Ð
ð €Nr&   c                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )ÚEncodingCompilerc                 ó   — t          |t          ¦  «        rJ ‚t          |j        j        ||j        ¦  «        }t          |j        j        ||j        ¦  «        }t          |¦  «        t          |¦  «        k     r|| _        n|| _        || _	        d S rF   )
rQ   rR   ÚpackEncoding0r@  r]   r;   ÚpackEncoding1rG   r§   rÄ   )r@   r;   r   rÄ   rC  Údata1s         r$   r©   zEncodingCompiler.__init__k  sz   € Ý˜h­Ñ,Ô,Ð,Ð,Ð,Ý˜fœnÔ4°hÀÄÑOÔOˆÝ˜fœnÔ4°hÀÄÑOÔOˆÝˆu‰:Œ:�˜E™
œ
Ò"Ð"ØˆDŒIˆIàˆDŒIØˆŒˆˆr&   c                 ó$   — || j         j        d<   d S )NÚEncodingrñ   ró   s      r$   r­   zEncodingCompiler.setPosu  ó   € Ø*-ˆŒÔ˜JÑ'Ð'Ð'r&   c                 ó*   — t          | j        ¦  «        S rF   rc  rH   s    r$   rd   zEncodingCompiler.getDataLengthx  rd  r&   c                 ó:   — |                      | j        ¦  «         d S rF   rG  rH  s     r$   ri   zEncodingCompiler.toFile{  rI  r&   NrJ  r¤   r&   r$   rn  rn  j  sP   € € € € € ðð ð ð.ð .ð .ðð ð ðð ð ð ð r&   rn  c                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )ÚEncodingConverterc                 óÀ  — |dk    rdS |dk    rdS |dk    sJ ‚|j         }|                     |¦  «         t                               t          d|¦  «         t	          |¦  «        }t          |dz  ¦  «        }|dz  }|dk    rt          |j        |¦  «        }n.|dk    rt          |j        |¦  «        }nt          d|› �¦  «        ‚|rt          |||j        ¦  «         |S )	Nr   ÚStandardEncodingr   ÚExpertEncodingzloading Encoding at %sé€   é   zUnknown Encoding format: )rA   r3   r¯   r°   r  ÚboolÚparseEncoding0r]   ÚparseEncoding1r0   ÚparseEncodingSupplementr;   )r@   rÄ   rt   rA   r^  ÚhaveSupplementr   s          r$   rÈ  zEncodingConverter._read€  só   € Ø�AŠ:ˆ:Ø%Ð%Ø�aŠZˆZØ#Ð#à�qŠyˆyˆyˆyØŒ{ˆØ�	Š	�%ÑÔÐÝ�Š•Ð/°Ñ7Ô7Ð7Ý˜‰oŒoˆÝ˜c D™jÑ)Ô)ˆØ�D‰jˆà�!Š8ˆ8Ý% f¤n°dÑ;Ô;ˆHˆHØ�AŠXˆXÝ% f¤n°dÑ;Ô;ˆHˆHåÐ>¸Ð>Ð>Ñ?Ô?Ð?àð 	DÝ# D¨(°F´NÑCÔCÐCàˆr&   c                 ó&   — |dk    rdS |dk    rdS dS )Nr{  r   r|  r   r¤   rÊ  s      r$   r´   zEncodingConverter.writeš  s)   € ØÐ&Ò&Ð&Ø�1ØÐ&Ò&Ð&Ø�1Øˆqr&   c                 óØ  — |dv r-|                      ||¬¦  «         |                     ¦   «          d S |                     |¦  «         |                     ¦   «          t          t	          |¦  «        ¦  «        D ]I}||         }|dk    r9|                      dt          |¦  «        |¬¦  «         |                     ¦   «          ŒJ|                     |¦  «         |                     ¦   «          d S )N)r{  r|  rw   r?  Úmap)ÚcoderW   )rx   ry   rz   r  rG   Úhexr|   )r@   r}   rW   rt   r‡  rœ  s         r$   rÎ  zEncodingConverter.xmlWrite¡  sõ   € ØÐ:Ð:Ð:Ø×Ò ¨5ÐÑ1Ô1Ð1Ø×ÒÑÔÐØˆFØ×Ò˜4Ñ Ô Ð Ø×ÒÑÔÐÝ�#˜e™*œ*Ñ%Ô%ð 	$ð 	$ˆDØ˜dœˆIØ˜IÒ%Ð%Ø×#Ò# Eµ°D±	´	À	Ð#ÑJÔJÐJØ×!Ò!Ñ#Ô#Ð#øØ×Ò˜ÑÔÐØ×ÒÑÔÐÐÐr&   c                 ó°   — d|v r|d         S dgdz  }|D ]@}t          |t          ¦  «        rŒ|\  }}}t          |d         ¦  «        }|d         }|||<   ŒA|S )NrW   r?  r¼   r‡  )rQ   rR   r   )	r@   rW   r‰   rŠ   rÄ   r   r‹   r‡  rœ  s	            r$   ra  zEncodingConverter.xmlRead°  s{   € Ø�Uˆ?ˆ?Ø˜”=Ð Ø�; Ñ$ˆØð 	'ð 	'ˆGÝ˜'¥3Ñ'Ô'ð ØØ#*Ñ ˆD�%˜Ý˜E &œMÑ*Ô*ˆDØ˜fœˆIØ&ˆH�T‰NˆNØˆr&   NrÜ  r¤   r&   r$   ry  ry    sP   € € € € € ðð ð ð4ð ð ðð ð ðð ð ð ð r&   ry  c                 ó¦   — |                       d¦  «        }t          |¦  «        dk    rt          d¦  «        ‚t          j        d|¦  «        d         S )u3   Read a String ID (SID) â€” 2-byte unsigned integer.r   z(Unexpected end of file while reading SIDr)   r   )r.   rG   ÚEOFErrorr1   r,   )rA   r§   s     r$   ÚreadSIDrŒ  ¾  sF   € à�9Š9�Q‰<Œ<€DÝ
ˆ4�y„y�A‚~€~ÝÐAÑBÔBÐBÝŒ=˜˜tÑ$Ô$ QÔ'Ð'r&   c                 óž   — t          | ¦  «        }t          |¦  «        D ]-}t          | ¦  «        }t          | ¦  «        }||         }|||<   Œ.dS )z¼
    Parse the CFF Encoding supplement data:
      - nSups: number of supplementary mappings
      - each mapping: (code, SID) pair
    and apply them to the `encoding` list in place.
    N)r  r  rŒ  )rA   r   r;   ÚnSupsÚ_r‡  ÚsidrW   s           r$   r‚  r‚  Æ  sX   € õ �d‰OŒO€EÝ�5‰\Œ\ð ð ˆÝ˜‰ŒˆÝ�d‰mŒmˆØ�sŒ|ˆØˆ�‰ˆð	ð r&   c                 óœ   — t          |¦  «        }dgdz  }t          d|dz   ¦  «        D ]"}t          |¦  «        }|dk    r| |         ||<   Œ#|S )zl
    Format 0: simple list of codes.
    After reading the base table, optionally parse the supplement.
    r?  r¼   r   r   ©r  r  )r]   rA   ÚnCodesr   ÚglyphIDr‡  s         r$   r€  r€  Õ  s`   € õ
 �t‰_Œ_€FØˆ{˜SÑ €HÝ˜˜F Q™JÑ'Ô'ð .ð .ˆÝ˜‰ŒˆØ�1Š9ˆ9Ø$ WÔ-ˆH�T‰Nøà€Or&   c                 óè   — t          |¦  «        }dgdz  }d}t          |¦  «        D ]J}t          |¦  «        }t          |¦  «        }t          |dz   ¦  «        D ]}| |         ||<   |dz  }|dz  }ŒŒK|S )un   
    FormatÂ 1: range-based encoding.
    After reading the base ranges, optionally parse the supplement.
    r?  r¼   r   r’  )r]   rA   rx  r   r”  r�  r‡  re  s           r$   r�  r�  ä  s”   € õ
 ˜‰oŒo€GØˆ{˜SÑ €HØ€GÝ�7‰^Œ^ð ð ˆÝ˜‰ŒˆÝ˜$‘”ˆÝ�u˜q‘yÑ!Ô!ð 	ð 	ˆAØ$ WÔ-ˆH�T‰NØ�A‰IˆDØ�q‰LˆGˆGð	ð
 €Or&   c                 óú  — d}i }t          t          |¦  «        ¦  «        D ]}||         }|dk    r|||<   Œg }| dd …         D ],}|                     |¦  «        }|                     |¦  «         Œ-|r&|d         €|                     ¦   «          |r|d         ®t          |¦  «        t          t          |¦  «        ¦  «        g}|D ](}|€d}|                     t          |¦  «        ¦  «         Œ)t          |¦  «        S )Nr   r?  r   r®   ©r  rG   r  re   Úpopr¬  r	   )	r]   r   r;   r^  Úmr‡  rW   Úcodesr§   s	            r$   rp  rp  ÷  s  € Ø
€CØ
€AÝ•c˜(‘m”mÑ$Ô$ð ð ˆØ˜Œ~ˆØ�9ÒÐØˆAˆd‰GøØ€EØ˜˜˜”ð ð ˆØ�uŠu�T‰{Œ{ˆØ�Š�TÑÔÐÐà
ð �E˜"”IÐ%Ø�	Š	‰Œˆð ð �E˜"”IÐ%õ �c‰NŒN�I¥c¨%¡j¤jÑ1Ô1Ð2€DØð %ð %ˆØˆ<ØˆDØ�Š•I˜d‘O”OÑ$Ô$Ð$Ð$Ý�T‰?Œ?Ðr&   c                 óÄ  — d}i }t          t          |¦  «        ¦  «        D ]}||         }|dk    r|||<   Œg }d }d}	| dd …         D ]F}|                     |d¦  «        }|€|}n'|	dz   |k    r|	|z
  }
|                     ||
f¦  «         |}|}	ŒG|	|z
  }
|                     ||
f¦  «         |r:|d         d         dk    r(|                     ¦   «          |r|d         d         dk    °(t          |¦  «        t          t          |¦  «        ¦  «        g}|D ]?\  }}
|dk    rd}|                     t          |¦  «        t          |
¦  «        z   ¦  «         Œ@t          |¦  «        S )Nr   r?  r   r®   r—  )r]   r   r;   r^  r™  r‡  rW   rb  r|  rc  re  r§   s               r$   rq  rq    s�  € Ø
€CØ
€AÝ•c˜(‘m”mÑ$Ô$ð ð ˆØ˜Œ~ˆØ�9ÒÐØˆAˆd‰GøØ€FØ€EØ
€CØ˜˜˜”ð ð ˆØ�uŠu�T˜2‰ŒˆØˆ=ØˆEˆEØ�1‰W˜Š_ˆ_Ø˜%‘KˆEØ�MŠM˜5 %˜.Ñ)Ô)Ð)ØˆEØˆˆØ�%‰K€EØ
‡M‚M�5˜%�.Ñ!Ô!Ð!ð ð �V˜B”Z ”] bÒ(Ð(Ø�
Š
‰Œˆð ð �V˜B”Z ”] bÒ(Ð(õ �c‰NŒN�I¥c¨&¡k¤kÑ2Ô2Ð3€DØð 9ð 9‰ˆˆuØ�BŠ;ˆ;ØˆEØ�Š•I˜eÑ$Ô$¥y°Ñ'7Ô'7Ñ7Ñ8Ô8Ð8Ð8Ý�T‰?Œ?Ðr&   c                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )ÚFDArrayConverterc                 óâ   — 	 |j         }n# t          $ r d }Y nw xY w|j        }|j        }|                     |¦  «         t          ||¬¦  «        }||_        |j        |_        |j        |_        |S r  )	r�   r  rA   r  r3   rK  r†   r;   r?   )r@   rÄ   rt   r†   rA   r(   rŒ   s          r$   rÈ  zFDArrayConverter._read1  s†   € ð	Ø”_ˆFˆFøÝð 	ð 	ð 	ØˆFˆFˆFð	øøøàŒ{ˆØ”ˆØ�	Š	�%ÑÔÐÝ˜t¨FÐ3Ñ3Ô3ˆØˆŒØ œ.ˆŒØ$Ô0ˆÔØˆs   ‚
 Š˜c                 ó   — dS rä   r¤   rÊ  s      r$   r´   zFDArrayConverter.write?  r!  r&   c                 ó’   — t          ¦   «         }|D ]5}t          |t          ¦  «        rŒ|\  }}}|                     |||¦  «         Œ6|S rF   )rK  rQ   rR   r„   )r@   rW   r‰   rŠ   rÄ   rŒ   r‹   s          r$   ra  zFDArrayConverter.xmlReadB  sY   € Ý‘.”.ˆØð 	2ð 	2ˆGÝ˜'¥3Ñ'Ô'ð ØØ#*Ñ ˆD�%˜Ø�OŠO˜D %¨Ñ1Ô1Ð1Ð1Øˆr&   Nr(  r¤   r&   r$   r�  r�  0  sA   € € € € € ðð ð ðð ð ðð ð ð ð r&   r�  c                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )ÚFDSelectConverterc                 óÊ   — |j         }|                     |¦  «         |j        r!t          |                     ¦   «         ¦  «        n|j        }t          ||j        |¬¦  «        }|S )N)ru  )rA   r3   r  rG   rC   rt  rm  )r@   rÄ   rt   rA   r{  r+  s         r$   rÈ  zFDSelectConverter._readM  sd   € ØŒ{ˆØ�	Š	�%ÑÔÐà/5¬~ÐS�C�×(Ò(Ñ*Ô*Ñ+Ô+Ð+À6ÔCSð 	õ ˜D &Ô"2¸gÐFÑFÔFˆØˆr&   c                 ó   — dS rä   r¤   rÊ  s      r$   r´   zFDSelectConverter.writeV  r!  r&   c                 óR  — d|j         fg}t          |j        ¦  «        t          |dt          |j        ¦  «        ¦  «        k    r9|                     dd                     d„ |j        D ¦   «         ¦  «        f¦  «         |                     ||¦  «         |                     ¦   «          d S )Nrq  Ú_numCharStringsrs  rå  c              3   ó4   K  — | ]}t          |¦  «        V — Œd S rF   rú  ©r"   ry  s     r$   r%   z-FDSelectConverter.xmlWrite.<locals>.<genexpr>_  s(   è è € Ð.PÐ.P¸2­s°2©w¬wÐ.PÐ.PÐ.PÐ.PÐ.PÐ.Pr&   )rq  rG   rs  r%  re   rý  rx   ry   )r@   r}   rW   rt   r‰   s        r$   rÎ  zFDSelectConverter.xmlWrite[  sŸ   € Ø˜EœLÐ)Ð*ˆÝˆuŒ~ÑÔ¥¨Ð0AÅ3ÀuÄ~ÑCVÔCVÑ!WÔ!WÒWÐWà�LŠL˜* c§h¢hÐ.PÐ.PÀÄÐ.PÑ.PÔ.PÑ&PÔ&PÐQÑRÔRÐRØ×Ò˜D %Ñ(Ô(Ð(Ø×ÒÑÔÐÐÐr&   c                 ó´   — t          |d         ¦  «        }d }d }t          |||¦  «        }d|v r)d„ |d                              ¦   «         D ¦   «         |_        |S )Nrq  rs  c                 ó,   — g | ]}t          |¦  «        ‘ŒS r¤   rW  r¨  s     r$   rñ  z-FDSelectConverter.xmlRead.<locals>.<listcomp>i  s   € Ð MÐ MÐ M¨R¥ R¡¤Ð MÐ MÐ Mr&   )r   rm  rò  rs  )	r@   rW   r‰   rŠ   rÄ   r^  rA   rt  r+  s	            r$   ra  zFDSelectConverter.xmlReadc  se   € Ý�u˜X”Ñ'Ô'ˆØˆØˆ	Ý˜D )¨SÑ1Ô1ˆØ˜ÐÐØ MÐ M°5¸Ô3D×3JÒ3JÑ3LÔ3LÐ MÑ MÔ MˆHÔØˆr&   NrÜ  r¤   r&   r$   r¢  r¢  L  sP   € € € € € ðð ð ðð ð ð
ð ð ðð ð ð ð r&   r¢  c                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )ÚVarStoreConverterc                 ó„   — |j         }|                     |¦  «         t          |¦  «        }|                     ¦   «          |S rF   )rA   r3   rQ  rD   )r@   rÄ   rt   rA   rˆ  s        r$   rÈ  zVarStoreConverter._readn  s?   € ØŒ{ˆØ�	Š	�%ÑÔÐÝ Ñ%Ô%ˆØ×ÒÑÔÐØˆr&   c                 ó   — dS rä   r¤   rÊ  s      r$   r´   zVarStoreConverter.writeu  r!  r&   c                 ó2   — |                      ||¦  «         d S rF   )r^  rÍ  s       r$   rÎ  zVarStoreConverter.xmlWritex  s   € Ø�Š�y $Ñ'Ô'Ð'Ð'Ð'r&   c                 óR   — t          ¦   «         }|                     ||||¦  «         |S rF   )rQ  ra  )r@   rW   r‰   rŠ   rÄ   rˆ  s         r$   ra  zVarStoreConverter.xmlRead{  s*   € Ý‘>”>ˆØ×Ò˜˜u g¨vÑ6Ô6Ð6Øˆr&   NrÜ  r¤   r&   r$   r¬  r¬  m  sP   € € € € € ðð ð ðð ð ð(ð (ð (ðð ð ð ð r&   r¬  c                 ó’   — d}t          |¦  «        g}| D ]$}|                     t          |¦  «        ¦  «         Œ%t          |¦  «        S rä   )r¬  re   r	   )ÚfdSelectArrayr^  r§   rS   s       r$   ÚpackFDSelect0r³  �  sM   € Ø
€CÝ�c‰NŒNÐ€DØð &ð &ˆØ�Š•I˜eÑ$Ô$Ñ%Ô%Ð%Ð%Ý�T‰?Œ?Ðr&   c                 ó2  — d}g }t          | ¦  «        }d}t          |¦  «        D ])}| |         }||k    r|                     ||g¦  «         |}Œ*|dz   }t          |¦  «        g}|                     t	          t          |¦  «        ¦  «        ¦  «         |D ]R}	|                     t	          |	d         ¦  «        ¦  «         |                     t          |	d         ¦  «        ¦  «         ŒS|                     t	          |¦  «        ¦  «         t          |¦  «        S )Nr   r®   r   r   )rG   r  re   r¬  r¯  r	   ©
r²  r^  ÚfdRangesÚlenArrayÚlastFDIndexr6  r/  ÚsentinelGIDr§   ÚfdRanges
             r$   ÚpackFDSelect3r»  ‰  s  € Ø
€CØ€HÝ�=Ñ!Ô!€HØ€KÝ�8‰_Œ_ð "ð "ˆØ Ô"ˆØ˜'Ò!Ð!Ø�OŠO˜Q ˜LÑ)Ô)Ð)Ø!ˆKøØ�a‘%€Kå�c‰NŒNÐ€DØ‡K‚K•
�3˜x™=œ=Ñ)Ô)Ñ*Ô*Ð*Øð +ð +ˆØ�Š•J˜w qœzÑ*Ô*Ñ+Ô+Ð+Ø�Š•I˜g aœjÑ)Ô)Ñ*Ô*Ð*Ð*Ø‡K‚K•
˜;Ñ'Ô'Ñ(Ô(Ð(Ý�T‰?Œ?Ðr&   c                 ó2  — d}g }t          | ¦  «        }d}t          |¦  «        D ])}| |         }||k    r|                     ||g¦  «         |}Œ*|dz   }t          |¦  «        g}|                     t	          t          |¦  «        ¦  «        ¦  «         |D ]R}	|                     t	          |	d         ¦  «        ¦  «         |                     t          |	d         ¦  «        ¦  «         ŒS|                     t	          |¦  «        ¦  «         t          |¦  «        S )Nr[   r®   r   r   )rG   r  re   r¬  r²  r¯  r	   rµ  s
             r$   ÚpackFDSelect4r½  ž  s  € Ø
€CØ€HÝ�=Ñ!Ô!€HØ€KÝ�8‰_Œ_ð "ð "ˆØ Ô"ˆØ˜'Ò!Ð!Ø�OŠO˜Q ˜LÑ)Ô)Ð)Ø!ˆKøØ�a‘%€Kå�c‰NŒNÐ€DØ‡K‚K•
�3˜x™=œ=Ñ)Ô)Ñ*Ô*Ð*Øð ,ð ,ˆØ�Š•J˜w qœzÑ*Ô*Ñ+Ô+Ð+Ø�Š•J˜w qœzÑ*Ô*Ñ+Ô+Ð+Ð+Ø‡K‚K•
˜;Ñ'Ô'Ñ(Ô(Ð(Ý�T‰?Œ?Ðr&   c                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )ÚFDSelectCompilerc                 óˆ  — |j         }|j        }|dk    rt          |¦  «        | _        n‘|dk    rt	          |¦  «        | _        nv|dk    rt          |¦  «        | _        n[t          |¦  «        }t	          |¦  «        }t          |¦  «        t          |¦  «        k     r|| _        d|_         n|| _        d|_         || _        d S )Nr   r   r[   )rq  rs  r³  r§   r»  r½  rG   rÄ   )r@   r+  rÄ   r^  r²  rC  Údata3s          r$   r©   zFDSelectCompiler.__init__´  s»   € ØŒoˆØ Ô)ˆØ�!Š8ˆ8Ý% mÑ4Ô4ˆDŒIˆIØ�AŠXˆXÝ% mÑ4Ô4ˆDŒIˆIØ�AŠXˆXÝ% mÑ4Ô4ˆDŒIˆIõ " -Ñ0Ô0ˆEÝ! -Ñ0Ô0ˆEÝ�5‰zŒz�C ™JœJÒ&Ð&Ø!�”	Ø"#�”�à!�”	Ø"#�”àˆŒˆˆr&   c                 ó$   — || j         j        d<   d S )Nrm  rñ   ró   s      r$   r­   zFDSelectCompiler.setPosÊ  ru  r&   c                 ó*   — t          | j        ¦  «        S rF   rc  rH   s    r$   rd   zFDSelectCompiler.getDataLengthÍ  rd  r&   c                 ó:   — |                      | j        ¦  «         d S rF   rG  rH  s     r$   ri   zFDSelectCompiler.toFileÐ  rI  r&   NrJ  r¤   r&   r$   r¿  r¿  ³  sP   € € € € € ðð ð ð,.ð .ð .ðð ð ðð ð ð ð r&   r¿  c                   ó&   — e Zd Zd„ Zd„ Zd„ Zd„ ZdS )ÚVarStoreCompilerc                 óÔ   — || _         |                     ¦   «          t          dt          |j        ¦  «        ¦  «        }t          |¦  «        |j        g}t          |¦  «        | _        d S rU  )rÄ   rq   ÚminrG   r§   r¯  r	   )r@   ÚvarStoreDatarÄ   ÚvarStoreDataLenr§   s        r$   r©   zVarStoreCompiler.__init__Õ  s[   € ØˆŒØ×ÒÑÔÐÝ˜f¥c¨,Ô*;Ñ&<Ô&<Ñ=Ô=ˆÝ˜?Ñ+Ô+¨\Ô->Ð?ˆÝ˜d‘O”OˆŒ	ˆ	ˆ	r&   c                 ó$   — || j         j        d<   d S )Nr�   rñ   ró   s      r$   r­   zVarStoreCompiler.setPosÜ  ru  r&   c                 ó*   — t          | j        ¦  «        S rF   rc  rH   s    r$   rd   zVarStoreCompiler.getDataLengthß  rd  r&   c                 ó:   — |                      | j        ¦  «         d S rF   rG  rH  s     r$   ri   zVarStoreCompiler.toFileâ  rI  r&   NrJ  r¤   r&   r$   rÆ  rÆ  Ô  sP   € € € € € ð$ð $ð $ð.ð .ð .ðð ð ðð ð ð ð r&   rÆ  c                   ó   — e Zd Zd„ Zd„ ZdS )ÚROSConverterc                 ó¬   — |\  }}}|                      |dt          |¦  «        fdt          |¦  «        fd|fg¦  «         |                     ¦   «          d S ©NÚRegistryÚOrderÚ
SupplementrÚ  )r@   r}   rW   rt   ÚregistryÚorderÚ
supplements          r$   rÎ  zROSConverter.xmlWriteç  sl   € Ø&+Ñ#ˆ�%˜Ø×ÒØà�U 8™_œ_Ð-Ø�% ™,œ,Ð'Ø˜zÐ*ðñ	
ô 	
ð 	
ð 	×ÒÑÔÐÐÐr&   c                 óJ   — |d         |d         t          |d         ¦  «        fS rÑ  rî  rÑ  s        r$   ra  zROSConverter.xmlReadó  s%   € Ø�jÔ! 5¨¤>µ8¸EÀ,Ô<OÑ3PÔ3PÐQÐQr&   Nr  r¤   r&   r$   rÏ  rÏ  æ  s7   € € € € € ð
ð 
ð 
ðRð Rð Rð Rð Rr&   rÏ  )é   ÚmaxstackÚnumberNN)é   é   r,  )rd  rd  rÛ  ))rÜ  é   ÚSyntheticBaserÛ  NN)r   Úversionrd  NNrã  rd  )rÜ  r   rä  r   ÚFullName)rÜ  é&   ÚFontNamer   Ú
FamilyName)r[   ÚWeightrd  NN))rÜ  r   ÚisFixedPitchrÛ  r   N))rÜ  r   ÚItalicAnglerÛ  r   N))rÜ  r   ÚUnderlinePositionrÛ  iœÿÿÿN))rÜ  r[   ÚUnderlineThicknessrÛ  é2   N))rÜ  rZ   Ú	PaintTyperÛ  r   N))rÜ  é   ÚCharstringTyperÛ  r   N)rÜ  é   Ú
FontMatrixro  )çü©ñÒMbP?r   r   rð  r   r   )é   ÚUniqueIDrÛ  NNrZ   ÚFontBBox)r   r   r   r   ))rÜ  é   ÚStrokeWidthrÛ  r   N)é   ÚXUIDro  NN))rÜ  é   Ú
PostScriptrd  NN))rÜ  é   ÚBaseFontNamerd  NN))rÜ  é   ÚBaseFontBlendÚdeltaNN))rÜ  é   ÚCIDFontVersionrÛ  r   N))rÜ  é    ÚCIDFontRevisionrÛ  r   N))rÜ  é!   ÚCIDFontTyperÛ  r   N))rÜ  é"   ÚCIDCountrÛ  i"  Né   r]   rÛ  ))rÜ  é#   ÚUIDBaserÛ  NNé   rt  é   r‚   )rÛ  rÛ  )rÜ  é%   )rÜ  é$   r…   é   é   r�   Úblendrü  )rú  ÚvsindexrÛ  NNrô  )rì  Ú
BlueValuesrþ  NN)rî  Ú
OtherBluesrþ  NN)rô  ÚFamilyBluesrþ  NN)é	   ÚFamilyOtherBluesrþ  NN))rÜ  r  Ú	BlueScalerÛ  g}?5^ºI¤?N))rÜ  é
   Ú	BlueShiftrÛ  rî  N))rÜ  é   ÚBlueFuzzrÛ  r   N)r  ÚStdHWrÛ  NN)r  ÚStdVWrÛ  NN))rÜ  rÜ  Ú	StemSnapHrþ  NN))rÜ  rñ  Ú	StemSnapVrþ  NN))rÜ  rö  Ú	ForceBoldrÛ  r   N))rÜ  r  ÚForceBoldThresholdrÛ  NN))rÜ  r
  ÚlenIVrÛ  NN))rÜ  r  ÚLanguageGrouprÛ  r   N))rÜ  r  ÚExpansionFactorrÛ  g¸…ëQ¸®?N))rÜ  é   ÚinitialRandomSeedrÛ  r   N)rÞ  ÚdefaultWidthXrÛ  r   N)rø  ÚnominalWidthXrÛ  r   Nr%  r  c                 ó
  — t          t          | ¦  «        ¦  «        D ]e}| |         \  }}}}}|�Œ|dv rt          ¦   «         }n5|dk    rt          ¦   «         }n |dk    rt	          ¦   «         }n|dk    rd }nJ ‚|||||f| |<   Œfd S )N)rþ  ro  rÛ  rd  rô  )r  rG   r  r÷  rÓ  )r«   r6  r¶  rW   r·  r¸  r¹  s          r$   ÚaddConvertersr*  j  s¸   € Ý•3�u‘:”:ÑÔð 0ð 0ˆØ',¨Q¤xÑ$ˆˆD�#�w ØÐØØÐ$Ð$Ð$Ý!Ñ#Ô#ˆDˆDØ�HŠ_ˆ_Ý"Ñ$Ô$ˆDˆDØ�EŠ\ˆ\Ý!Ñ#Ô#ˆDˆDØ�KÒÐØˆDˆDàˆLØ�t˜S '¨4Ð/ˆˆa‰ˆð0ð 0r&   c                   ó$   — e Zd Z ee¦  «        ZdS )ÚTopDictDecompilerN)r    r¡   r¢   rº  ÚtopDictOperatorsÚ	operatorsr¤   r&   r$   r,  r,  €  s   € € € € € Ø!Ð!Ð"2Ñ3Ô3€I€I€Ir&   r,  c                   ó$   — e Zd Z ee¦  «        ZdS )ÚPrivateDictDecompilerN)r    r¡   r¢   rº  ÚprivateDictOperatorsr.  r¤   r&   r$   r0  r0  „  s   € € € € € Ø!Ð!Ð"6Ñ7Ô7€I€I€Ir&   r0  c                   óR   — e Zd ZdZdd„Zd„ Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
d
„ Zd„ Zdd„ZdS )ÚDictCompilerr   Nc                 ó†  — |rt          |t          ¦  «        sJ ‚|€t          |d¦  «        r|j        }|€J ‚|| _        || _        || _        || _        i }|j        D ]]}t          ||d ¦  «        }|€Œ|j	        |         }| 
                    ||¦  «        }||j                             |¦  «        k    rŒX|||<   Œ^|| _        d S rÁ   )rQ   r:   rP   r(   r@  r;   rÄ   rÖ  r%  Ú
convertersr´   Údefaultsr  rò   )	r@   r@  r;   rÄ   r(   rò   rW   rt   r¹  s	            r$   r©   zDictCompiler.__init__‹  sæ   € Øð 	7Ý˜g¥~Ñ6Ô6Ð6Ð6Ð6Øˆ>�g f¨hÑ7Ô7ˆ>Ø”]ˆFØÐ%Ð%Ð%ØˆŒØˆŒØˆŒØˆŒØˆØ”Mð 	"ð 	"ˆDÝ˜G T¨4Ñ0Ô0ˆEØˆ}ØØÔ% dÔ+ˆDØ—J’J˜w¨Ñ.Ô.ˆEØ˜Ô(×,Ò,¨TÑ2Ô2Ò2Ð2ØØ!ˆG�D‰MˆMØˆŒˆˆr&   c                 ó   — d S rF   r¤   ró   s      r$   r­   zDictCompiler.setPos¡  r;  r&   c                 óF   — t          |                      d¦  «        ¦  «        S )Nrd   )rG   rq   rH   s    r$   rd   zDictCompiler.getDataLength¤  s   € Ý�4—<’< Ñ0Ô0Ñ1Ô1Ð1r&   c                 ó¶  — t                                 t          d| j        j        |¦  «         | j        }g }| j        j        D �]}|                     |¦  «        }|€Œ| j        |         \  }}t          |t          ¦  «        r€t          |¦  «        }t          |¦  «        |k    s
J d¦   «         ‚t          |¦  «        D ]C}	||	         }
||	         }t          | d|
z   ¦  «        }|                      ||¦  «        ¦  «         ŒDn1t          | d|z   ¦  «        }|                      ||¦  «        ¦  «         |                     |¦  «         �Œt          |¦  «        }|S )Nz-- compiling %s for %szvalue doesn't match arg typeÚarg_)r¯   r°   ræ   r    rò   r@  rÖ  r  ÚopcodesrQ   r`  rG   r  r%  re   r	   )r@   Úreasonrò   r§   rW   rt   r¶  ÚargTyper¿  r6  r·  ÚvÚ
arghandlers                r$   rq   zDictCompiler.compile§  sO  € Ý�Š•Ð/°´Ô1HÈ&ÑQÔQÐQØ”,ˆØˆØ”LÔ&ð 	ñ 	ˆDØ—K’K Ñ%Ô%ˆEØˆ}ØØœ, tÔ,‰KˆB�Ý˜'¥5Ñ)Ô)ð 
/Ý˜‘L”L�Ý˜5‘z”z Q’��Ð(F‘”�Ý˜q™œð /ð /�AØ! !œ*�CØ˜aœ�AÝ!(¨¨v¸©|Ñ!<Ô!<�JØ—K’K 
 
¨1¡¤Ñ.Ô.Ð.Ð.ð	/õ % T¨6°GÑ+;Ñ<Ô<�
Ø—’˜J˜J uÑ-Ô-Ñ.Ô.Ð.Ø�KŠK˜‰OŒOˆO‰OÝ˜‰ŒˆØˆr&   c                 óZ   — |                       d¦  «        }|                     |¦  «         d S )Nri   )rq   r´   )r@   rA   r§   s      r$   ri   zDictCompiler.toFile¿  s+   € Ø�|Š|˜HÑ%Ô%ˆØ�
Š
�4ÑÔÐÐÐr&   c                 ó  — t          |t          ¦  «        red„ |D ¦   «         }|                     t          d¦  «        ¦  «         |                     t	          t
          ¦  «        ¦  «         t          |¦  «        }nt          |¦  «        }|S )Nc                 ó,   — g | ]}t          |¦  «        ‘ŒS r¤   ©ÚencodeNumberrï  s     r$   rñ  z+DictCompiler.arg_number.<locals>.<listcomp>Å  s    € Ð5Ð5Ð5¨#•L Ñ%Ô%Ð5Ð5Ð5r&   r   )rQ   r5   re   rD  r   ÚblendOpr	   )r@   Únumr§   Údatums       r$   Ú
arg_numberzDictCompiler.arg_numberÃ  sx   € Ý�c�4Ñ Ô ð 	&Ø5Ð5°Ð5Ñ5Ô5ˆDØ�KŠK� Q™œÑ(Ô(Ð(Ø�KŠK�¥Ñ(Ô(Ñ)Ô)Ð)Ý˜d‘O”OˆEˆEå  Ñ%Ô%ˆEØˆr&   c                 óZ   — t          j        | j                             |¦  «        ¦  «        S rF   )r   ÚencodeIntCFFr;   r[  )r@   r#   s     r$   Úarg_SIDzDictCompiler.arg_SIDÍ  s#   € ÝÔ)¨$¬,×*=Ò*=¸aÑ*@Ô*@ÑAÔAÐAr&   c                 ó~   — g }|D ]*}|                      |                      |¦  «        ¦  «         Œ+t          |¦  «        S rF   )re   rH  r	   )r@   rt   r§   rF  s       r$   Ú	arg_arrayzDictCompiler.arg_arrayÐ  sC   € ØˆØð 	.ð 	.ˆCØ�KŠK˜Ÿš¨Ñ,Ô,Ñ-Ô-Ð-Ð-Ý˜‰ŒÐr&   c                 ó&  — |sdS |d         }t          |t          ¦  «        r|                      |¦  «        }nLg }d}|D ]}|                     ||z
  ¦  «         |}Œg }|D ]$}|                     t	          |¦  «        ¦  «         Œ%t          |¦  «        S )Nr&   r   )rQ   r5   Úarg_delta_blendre   rD  r	   )r@   rt   Úval0r§   rÞ   Úlastr>  rF  s           r$   Ú	arg_deltazDictCompiler.arg_deltaÖ  s²   € Øð 	Ø�3Ø�QŒxˆÝ�d�DÑ!Ô!ð 
	/Ø×'Ò'¨Ñ.Ô.ˆDˆDàˆCØˆDØð ð �Ø—
’
˜1˜t™8Ñ$Ô$Ð$Ø��ØˆDØð /ð /�Ø—’�L¨Ñ-Ô-Ñ.Ô.Ð.Ð.Ý˜‰ŒÐr&   c                 ó*  — t          |d         ¦  «        }t          |¦  «        }|||z  z   dz   }|| j        k    r�g }	 |sn–| j        |z
  dz
  |z  }|dk    rt          d¦  «        ‚t          t          |¦  «        |¦  «        }	|d|	…         }
|                      |
||¦  «        }|                     |¦  «         |
d         d         }||	z  }||	d…         }Œ™n»dg|z  }dg|z  }d}||k     r6||         d         }||z
  ||<   |}||         dd…         ||<   |dz  }||k     °6|}|D ]}|                     |¦  «         Œd„ |D ¦   «         }|                     t          |¦  «        ¦  «         |                     t          t          ¦  «        ¦  «         |S )aM  A delta list with blend lists has to be *all* blend lists.

        The value is a list is arranged as follows::

                [
                        [V0, d0..dn]
                        [V1, d0..dn]
                        ...
                        [Vm, d0..dn]
                ]

        ``V`` is the absolute coordinate value from the default font, and ``d0-dn``
        are the delta values from the *n* regions. Each ``V`` is an absolute
        coordinate from the default font.

        We want to return a list::

                [
                        [v0, v1..vm]
                        [d0..dn]
                        ...
                        [d0..dn]
                        numBlends
                        blendOp
                ]

        where each ``v`` is relative to the previous default font value.
        r   r   Tz)CFF2 blend does not fit the operand stackNr®   c                 ó,   — g | ]}t          |¦  «        ‘ŒS r¤   rC  rï  s     r$   rñ  z0DictCompiler.arg_delta_blend.<locals>.<listcomp>+	  s    € Ð=Ð=Ð=¨•< Ñ$Ô$Ð=Ð=Ð=r&   )
rG   ÚmaxBlendStackr0   rÈ  rO  râ   re   rD  r   rE  )r@   rt   ÚprevValÚ
stackDepthÚ
numMastersÚ	numBlendsÚnumStackrÞ   ÚnumBlendValuesÚnumValÚvalListÚout1Ú	firstListÚ	deltaListr6  ÚdefaultValueÚrelValueListrô  s                     r$   rO  zDictCompiler.arg_delta_blendç  sê  € õ: ˜˜qœ‘]”]ˆ
Ý˜‘J”Jˆ	Ø ¨ZÑ!7Ñ8¸1Ñ<ˆØ�dÔ(Ò(Ð(ð ˆCð'Øð ØØ"&Ô"4°zÑ"AÀAÑ"EÈ*Ñ!T�Ø! QÒ&Ð&Ý$Ð%PÑQÔQÐQÝ�S ™ZœZ¨Ñ8Ô8�Ø   œ.�Ø×+Ò+¨G°W¸jÑIÔI�Ø—
’
˜4Ñ Ô Ð Ø! "œ+ aœ.�Ø˜fÑ$�
Ø˜f˜g˜gœ�ð'àð ˜˜i™ˆIØ˜ Ñ*ˆIØˆAØ�i’-�-ð
  % Qœx¨œ{�Ø+¨gÑ5�	˜!‘Ø&�Ø$ Qœx¨¨¨œ|�	˜!‘Ø�Q‘�ð �i’-�-ð %ˆLØ&ð /ð /�	Ø×#Ò# IÑ.Ô.Ð.Ð.Ø=Ð=°Ð=Ñ=Ô=ˆCØ�JŠJ•| IÑ.Ô.Ñ/Ô/Ð/Ø�JŠJ•w�wÑ'Ô'Ñ(Ô(Ð(Øˆ
r&   rF   r  )r    r¡   r¢   rU  r©   r­   rd   rq   ri   rH  rK  rM  rR  rO  r¤   r&   r$   r3  r3  ˆ  sÂ   € € € € € Ø€Mðð ð ð ð,ð ð ð2ð 2ð 2ðð ð ð0ð ð ðð ð ðBð Bð Bðð ð ðð ð ð"Gð Gð Gð Gð Gð Gr&   r3  c                 ó|   — t          | t          ¦  «        rt          j        | ¦  «        S t          j        | ¦  «        S rF   )rQ   rê  r   ÚencodeFloatrJ  )rF  s    r$   rD  rD  1	  s6   € Ý�#•uÑÔð /ÝÔ(¨Ñ-Ô-Ð-åÔ)¨#Ñ.Ô.Ð.r&   c                   ó*   — e Zd Z ee¦  «        Zd„ ZdS )ÚTopDictCompilerc                 óP  — | j         }g }| j        j        €ôt          | j        d¦  «        rx| j        j        rlt          | j        d¦  «        rd }nt          | j        j        ¦  «        }|€/|                     t          || j        j        | ¦  «        ¦  «         n
|| j        d<   t          | j        d¦  «        rQ| j        j	        rE| j        j	        }t          |t          ¦  «        s$|                     t          ||| ¦  «        ¦  «         nFt          | j        d¦  «        r1| j        j        }t          || ¦  «        }|                     |¦  «         t          | j        d¦  «        rè| j        j        }t!          |¦  «        dk    r;| j        j        }	| j        j        D ]"}
|                     |	|
         j        ¦  «         Œ#|rgt!          |¦  «        t!          | j        j        ¦  «        k    r=|j        dvr4t!          |¦  «        dk    st)          |j        ¦  «        d	k    rd
nd|_        t-          || ¦  «        }|                     |¦  «         t          | j        d¦  «        r`g }| j        j        }	| j        j        D ]}
|                     |	|
         ¦  «         Œt/          ||| |¬¦  «        }|                     |¦  «         t          | j        d¦  «        r]| j        j                             || ¦  «        }|                     |¦  «         |                     |                     |¦  «        ¦  «         t          | j        d¦  «        r]| j        j                             || ¦  «        }|                     |¦  «         |                     |                     |¦  «        ¦  «         |S )Nr]   r,  rt  r�   rm  r   rp  rV  ra  r[   r   rf   r'   r…   r‚   )r(   r@  rC   rP   r]   rU  re   r=  rò   rt  rQ   rR   rn  r�   rÆ  rm  rG   rf   r•  rq  Úmaxrs  r¿  r  r…   ra   râ   rh   r‚   )r@   r;   r(   ro   ÚcharsetCoder   rÉ  ÚvarStoreCompr+  rŠ  rW   ÚfdSelectComprÃ   ÚcharStringsCompÚfdArrayIndexCompÚprivComps                   r$   rh   zTopDictCompiler.getChildren;	  sŠ  € Ø”ˆØˆØŒ<Ô)Ð1Ý�t”| YÑ/Ô/ð 
:°D´LÔ4Hð 
:Ý˜4œ<¨Ñ/Ô/ð FØ"&�K�Kå"/°´Ô0DÑ"EÔ"E�KØÐ&Ø—O’OÝ'¨°´Ô1EÀtÑLÔLñô ð ð ð /:�D”L Ñ+Ý�t”| ZÑ0Ô0ð O°T´\Ô5Jð OØœ<Ô0�Ý! (­CÑ0Ô0ð OØ—O’OÕ$4°W¸hÈÑ$MÔ$MÑNÔNÐNøå�t”| ZÑ0Ô0ð .Ø#œ|Ô4�Ý/°¸dÑCÔC�Ø—’ Ñ-Ô-Ð-Ý�4”< Ñ,Ô,ð 	*ð
 ”|Ô,ˆHå�8‰}Œ} Ò!Ð!Ø"œlÔ6�Ø œLÔ0ð Eð E�DØ—O’O K°Ô$5Ô$CÑDÔDÐDÐDØð �#˜h™-œ-­#¨d¬lÔ.FÑ*GÔ*GÒGÐGð ”?¨&Ð0Ð0õ ˜x™=œ=¨6Ò1Ð1µS¸Ô9JÑ5KÔ5KÈdÒ5RÐ5Rð ˜àð ”Oõ
 ,¨H°dÑ;Ô;ˆLØ�OŠO˜LÑ)Ô)Ð)Ý�4”< Ñ/Ô/ð 	-ØˆEØœ,Ô2ˆKØœÔ,ð 0ð 0�Ø—’˜[¨Ô.Ñ/Ô/Ð/Ð/Ý1°%¸À$ÈvÐVÑVÔVˆOØ�OŠO˜OÑ,Ô,Ð,Ý�4”< Ñ+Ô+ð 	Cð  $œ|Ô3×?Ò?ÀÈÑNÔNÐØ�OŠOÐ,Ñ-Ô-Ð-Ø�OŠOÐ,×8Ò8¸ÑAÔAÑBÔBÐBÝ�4”< Ñ+Ô+ð 	;Ø”|Ô+×7Ò7¸ÀÑFÔFˆHØ�OŠO˜HÑ%Ô%Ð%Ø�OŠO˜H×0Ò0°Ñ9Ô9Ñ:Ô:Ð:Øˆr&   N)r    r¡   r¢   r½  r-  r;  rh   r¤   r&   r$   rf  rf  8	  s8   € € € € € ØˆoÐ.Ñ/Ô/€Gð@ð @ð @ð @ð @r&   rf  c                   ó<   ‡ — e Zd Z ee¦  «        Zdˆ fd„	Zd„ Zˆ xZS )ÚFontDictCompilerNc                 óv  •— t          t          | ¦  «                             ||||¬¦  «         g }| j        }t	          t          |j        ¦  «        t          |j        ¦  «        z
  ¦  «        D ]Š}||j        v r| 	                    |¦  «         Œ!|j
                             |¦  «        }|�#|j        |         }|                     ||¦  «        }t          ||d ¦  «        |k    r| 	                    |¦  «         Œ‹|r?t                               dd                     t	          |¦  «        ¦  «        z   ¦  «         d S d S )Nr'   z:Some CFF FDArray/FontDict keys were ignored upon compile: rå  )rå   rp  r©   r@  r—  rg   r5  rÖ  rò   re   r6  r  r.   r%  r¯   Úwarningrý  )
r@   r@  r;   rÄ   r(   ÚignoredNamesrW   r¸  r¹  ræ   s
            €r$   r©   zFontDictCompiler.__init__�	  sL  ø€ ÝÕ Ñ%Ô%×.Ò.¨w¸ÀÐPVÐ.ÑWÔWÐWð ˆØ”,ˆÝ�3˜wÔ1Ñ2Ô2µS¸¼Ñ5GÔ5GÑGÑHÔHð 	.ð 	.ˆDØ�w”Ð&Ð&ð
 ×#Ò# DÑ)Ô)Ð)Ð)ð "Ô*×.Ò.¨tÑ4Ô4�ØÐ&Ø"Ô-¨dÔ3�DØ"Ÿiši¨°Ñ9Ô9�GÝ˜7 D¨$Ñ/Ô/°7Ò:Ð:Ø ×'Ò'¨Ñ-Ô-Ð-øØð 	Ý�KŠKØLØ—(’(�6 ,Ñ/Ô/Ñ0Ô0ñ1ñô ð ð ð ð	ð 	r&   c                 óî   — g }t          | j        d¦  «        r]| j        j                             || ¦  «        }|                     |¦  «         |                     |                     |¦  «        ¦  «         |S ©Nr‚   )rP   r@  r‚   ra   re   râ   rh   )r@   r;   ro   rn  s       r$   rh   zFontDictCompiler.getChildren¢	  sl   € ØˆÝ�4”< Ñ+Ô+ð 	;Ø”|Ô+×7Ò7¸ÀÑFÔFˆHØ�OŠO˜HÑ%Ô%Ð%Ø�OŠO˜H×0Ò0°Ñ9Ô9Ñ:Ô:Ð:Øˆr&   rF   )	r    r¡   r¢   r½  r-  r;  r©   rh   ré   rê   s   @r$   rp  rp  ~	  s]   ø€ € € € € ØˆoÐ.Ñ/Ô/€Gðð ð ð ð ð ðBð ð ð ð ð ð r&   rp  c                   ó4   — e Zd ZeZ ee¦  «        Zd„ Zd„ Z	dS )ÚPrivateDictCompilerc                 ó@   — ||z
  }||f| j         j        d<   || _        d S ru  )rÄ   rò   r¶   )r@   r¶   r¹   r  s       r$   r­   zPrivateDictCompiler.setPos¯	  s)   € Ø˜‰|ˆØ)-¨s¨ˆŒÔ˜IÑ&ØˆŒˆˆr&   c                 óš   — g }t          | j        d¦  «        r3|                     | j        j                             || ¦  «        ¦  «         |S r   )rP   r@  re   r  ra   )r@   r;   ro   s      r$   rh   zPrivateDictCompiler.getChildren´	  sH   € ØˆÝ�4”< Ñ)Ô)ð 	KØ�OŠO˜DœLÔ.×:Ò:¸7ÀDÑIÔIÑJÔJÐJØˆr&   N)
r    r¡   r¢   ÚmaxStackLimitrU  r½  r1  r;  r­   rh   r¤   r&   r$   rw  rw  «	  sG   € € € € € Ø!€MØˆoÐ2Ñ3Ô3€Gðð ð ð
ð ð ð ð r&   rw  c                   óL   ‡ — e Zd Zd
d„Zd„ Zd„ Zdd„Zd„ Zˆ fd„Zd„ Z	d	„ Z
ˆ xZS )ÚBaseDictNc                 óÚ   — |d u |d u k    sJ ‚i | _         g | _        || _        |€d S || _        || _        |�5t
                               t          d| j        j        |¦  «         || _	        d S d S )Nr  )
rò   Ú	skipNamesr;   r  rA   r¯   r°   ræ   r    rÔ   )r@   r;   rA   rÔ   r(   s        r$   r©   zBaseDict.__init__¼	  s   € Ø˜$� D¨D LÒ1Ð1Ð1Ð1ØˆŒØˆŒØˆŒØˆ<ØˆFØˆŒØˆŒ	ØÐÝ�GŠG•EÐ-¨t¬~Ô/FÈÑOÔOÐOØ ˆDŒKˆKˆKð Ðr&   c                 ó2  — t                                 t          d| j        j        t	          |¦  «        ¦  «         |                      | j        | ¦  «        }|                     |¦  «         |                     ¦   «         | _	        |  
                    ¦   «          d S )Nz    length %s is %d)r¯   r°   ræ   r    rG   ÚdecompilerClassr;   rD   ÚgetDictrò   ÚpostDecompile)r@   r§   Údecs      r$   rD   zBaseDict.decompileÉ	  sv   € Ý�Š•Ð,¨d¬nÔ.EÅsÈ4ÁyÄyÑQÔQÐQØ×"Ò" 4¤<°Ñ6Ô6ˆØ�Š�dÑÔÐØ—{’{‘}”}ˆŒØ×ÒÑÔÐÐÐr&   c                 ó   — d S rF   r¤   rH   s    r$   r‚  zBaseDict.postDecompileÐ	  r;  r&   c                 ó4   — |                       | |||¬¦  «        S r  r   r"  s       r$   ra   zBaseDict.getCompilerÓ	  r#  r&   c                 ó\  — |d d…         |dd …         cxk    rdk    rn nt          |¦  «        ‚| j                             |d ¦  «        }|€| j                             |¦  «        }|€t          |¦  «        ‚| j        |         }|                     | |¦  «        }t          | ||¦  «         |S )Nr   éþÿÿÿÚ__)r  rò   r  r6  r5  r.   Úsetattr)r@   rW   rt   r¹  s       r$   Ú__getattr__zBaseDict.__getattr__Ö	  s¾   € Ø���Œ8�t˜B˜C˜C”yÐ(Ð(Ò(Ð( DÒ(Ð(Ð(Ð(Ð(õ
 ! Ñ&Ô&Ð&Ø”× Ò   tÑ,Ô,ˆØˆ=Ø”M×%Ò% dÑ+Ô+ˆEØˆ=Ý  Ñ&Ô&Ð&ØŒ˜tÔ$ˆØ—	’	˜$ Ñ&Ô&ˆÝ��d˜EÑ"Ô"Ð"Øˆr&   c                 óž   •— | j                              |d ¦  «        d u}|| j        v s|s#t          ¦   «                              |¦  «         d S d S rF   )rò   r˜  Ú__dict__rå   Ú__delattr__)r@   rW   Ú	inRawDictræ   s      €r$   r�  zBaseDict.__delattr__ç	  sY   ø€ ð ”L×$Ò$ T¨4Ñ0Ô0¸Ð<ˆ	Ø�4”=Ð Ð ¨	Ð Ý‰GŒG×Ò Ñ%Ô%Ð%Ð%Ð%ð !Ð r&   c                 óœ  — | j         D ]J}|| j        v rŒt          | |d ¦  «        }|€|dk    rŒ&| j        |         }|                     |||¦  «         ŒKt          | j        ¦  «        t          | j         ¦  «        z
  }|rN|                     dd                     t          |¦  «        ¦  «        z  ¦  «         | 
                    ¦   «          d S d S )Nr]   zsome keys were ignored: %srå  )rÖ  r~  r%  r5  rÎ  rg   rò   r4  rý  r—  ry   )r@   r}   rW   rt   r¹  rs  s         r$   r{   zBaseDict.toXMLî	  sé   € Ø”Jð 	2ð 	2ˆDØ�t”~Ð%Ð%ØÝ˜D $¨Ñ-Ô-ˆEð ˆ} ¨Ò!2Ð!2ØØ”? 4Ô(ˆDØ�MŠM˜) T¨5Ñ1Ô1Ð1Ð1Ý˜4œ<Ñ(Ô(­3¨t¬z©?¬?Ñ:ˆØð 	 Ø×ÒØ,¨s¯xªx½¸|Ñ8LÔ8LÑ/MÔ/MÑMñô ð ð ×ÒÑÔÐÐÐð		 ð 	 r&   c                 ór   — | j         |         }|                     |||| ¦  «        }t          | ||¦  «         d S rF   )r5  ra  r‰  )r@   rW   r‰   rŠ   r¹  rt   s         r$   r„   zBaseDict.fromXML
  s=   € ØŒ˜tÔ$ˆØ—’˜T 5¨'°4Ñ8Ô8ˆÝ��d˜EÑ"Ô"Ð"Ð"Ð"r&   r…  rF   )r    r¡   r¢   r©   rD   r‚  ra   rŠ  r�  r{   r„   ré   rê   s   @r$   r|  r|  »	  s¯   ø€ € € € € ð!ð !ð !ð !ðð ð ðð ð ðHð Hð Hð Hðð ð ð"&ð &ð &ð &ð &ð ð  ð  ð2#ð #ð #ð #ð #ð #ð #r&   r|  c                   ó˜   ‡ — e Zd ZdZ ee¦  «        Z ee¦  «        Ze	Z
 ee¦  «        ZeZ	 	 	 	 	 	 d	ˆ fd„	Zd„ Zd„ Zd„ Zd„ Zd„ Zˆ xZS )
rƒ   ad  The ``TopDict`` represents the top-level dictionary holding font
    information. CFF2 tables contain a restricted set of top-level entries
    as described `here <https://docs.microsoft.com/en-us/typography/opentype/spec/cff2#7-top-dict-data>`_,
    but CFF tables may contain a wider range of information. This information
    can be accessed through attributes or through the dictionary returned
    through the ``rawDict`` property:

    .. code:: python

            font = tt["CFF "].cff[0]
            font.FamilyName
            # 'Linux Libertine O'
            font.rawDict["FamilyName"]
            # 'Linux Libertine O'

    More information is available in the CFF file's private dictionary, accessed
    via the ``Private`` property:

    .. code:: python

            tt["CFF "].cff[0].Private.BlueValues
            # [-15, 0, 515, 515, 666, 666]

    Nc                 ój  •— t          t          | ¦  «                             ||||¬¦  «         || _        || _        |rCt          t          ¦  «        | _         |¦   «         | _        t          t          ¦  «        | _
        d S t          t          ¦  «        | _        t          t          ¦  «        | _
        d S r  )rå   rƒ   r©   rC   r?   rÂ  ÚtopDictOperators2r6  r]   rÀ  rÖ  r-  )r@   r;   rA   rÔ   r?   rC   r(   ræ   s          €r$   r©   zTopDict.__init__-
  sœ   ø€ õ 	�g�tÑÔ×%Ò% g¨t°VÀFÐ%ÑKÔKÐKØ!2ˆÔØ&ˆÔØð 	6Ý)Õ*;Ñ<Ô<ˆDŒMØ,Ð,Ñ.Ô.ˆDŒLÝ#Õ$5Ñ6Ô6ˆDŒJˆJˆJå)Õ*:Ñ;Ô;ˆDŒMÝ#Õ$4Ñ5Ô5ˆDŒJˆJˆJr&   c                 ó   — | j         S )z.Returns a list of glyph names in the CFF font.)r]   rH   s    r$   r=   zTopDict.getGlyphOrderA
  ó
   € àŒ|Ðr&   c                 óv  — | j                              d¦  «        }|€d S | j                             |¦  «         | j        r`t          | j        ¦  «        | _        | j        t          | j        ¦  «        k    rt          d¦  «        ‚| j        d | j        …         | _        d S t          | j        ¦  «        | _        d S )Nrf   z3CFF2 CharStrings count exceeds the font glyph count)rò   r  rA   r3   r  r  rt  rG   r]   r0   r  )r@   rÔ   s     r$   r‚  zTopDict.postDecompileE
  s¥   € Ø”×!Ò! -Ñ0Ô0ˆØˆ>ØˆFàŒ	�Š�vÑÔÐØŒ<ð 	3Ý'¨¬	Ñ2Ô2ˆDŒNØŒ~¥ D¤LÑ 1Ô 1Ò1Ð1Ý Ð!VÑWÔWÐWàœ<Ð(8¨$¬.Ð(8Ô9ˆDŒLˆLˆLå'¨¬	Ñ2Ô2ˆDŒNˆNˆNr&   c                 ób  — t          | d¦  «        rB|                      ¦   «          t          | d¦  «        rt          | j        ¦  «        | j        _        t          | d¦  «        rdg| _        t          | d¦  «        rt          | d¦  «        s	g d¢| _        t                               | |¦  «         d S )Nrf   rm  r,  rt  )r   r  r  r  )	rP   ÚdecompileAllCharStringsrG   rf   rm  r¦  r~  r|  r{   )r@   r}   s     r$   r{   zTopDict.toXMLT
  s¼   € Ý�4˜Ñ'Ô'ð 	FØ×(Ò(Ñ*Ô*Ð*Ý�t˜ZÑ(Ô(ð FÝ03°DÔ4DÑ0EÔ0E�”Ô-Ý�4˜ÑÔð 	*Ø(˜\ˆDŒNÝ�t˜UÑ#Ô#ð 	­7°4¸Ñ+GÔ+Gð 	ðð ð ˆDŒNõ 	�Š�t˜YÑ'Ô'Ð'Ð'Ð'r&   c                 óÊ   — t          | j                             ¦   «         ¦  «        D ];\  }}	 |                     ¦   «          Œ#  t                               d|¦  «         ‚ xY wd S )NzError in charstring %s)Ú	enumeraterf   rM   rD   r¯   Úerror)r@   r6  r’  s      r$   r˜  zTopDict.decompileAllCharStringsf
  sq   € å& tÔ'7×'>Ò'>Ñ'@Ô'@ÑAÔAð 	ð 	‰MˆAˆzðØ×$Ò$Ñ&Ô&Ð&Ð&øðÝ—	’	Ð2°AÑ6Ô6Ð6Øøøøð	ð 	s   ­AÁA c                 ó"  — d }| j                              ¦   «         D ]3}|                     | j         ¦  «        }|�|�t          ||¦  «        }Œ1|}Œ4|€| j        d         d d …         | _        d S t          t          |¦  «        ¦  «        | _        d S )Nró  )rf   rM   Ú
calcBoundsr   r6  ró  r5   r   )r@   ÚfontBBoxr’  Úboundss       r$   r_   zTopDict.recalcFontBBoxo
  sš   € ØˆØÔ*×1Ò1Ñ3Ô3ð 	&ð 	&ˆJØ×*Ò*¨4Ô+;Ñ<Ô<ˆFØÐ!ØÐ'Ý(¨°6Ñ:Ô:�H�Hà%�HøàÐØ œM¨*Ô5°a°a°aÔ8ˆDŒMˆMˆMå ¥¨Ñ!2Ô!2Ñ3Ô3ˆDŒMˆMˆMr&   r;  )r    r¡   r¢   r£   rÂ  r-  r6  rÄ  r5  rf  r!  rÀ  rÖ  r,  r€  r©   r=   r‚  r{   r˜  r_   ré   rê   s   @r$   rƒ   rƒ   
  sâ   ø€ € € € € ðð ð2 ˆ}Ð-Ñ.Ô.€HØ �Ð!1Ñ2Ô2€JØ#€MØˆJÐ'Ñ(Ô(€EØ'€Oð ØØØØØð6ð 6ð 6ð 6ð 6ð 6ð(ð ð ð3ð 3ð 3ð(ð (ð (ð$ð ð ð4ð 4ð 4ð 4ð 4ð 4ð 4r&   rƒ   c                   ób   ‡ — e Zd Zi Z ee¦  «        ZeZg d¢Z	dgZ
eZ	 	 	 	 	 	 dˆ fd„	Zd„ Zˆ xZS )rF  )rã  rï  rå  r‚   r‚   Nc                 ó˜   •— t          t          | ¦  «                             ||||¬¦  «         || _        |                      |¦  «         d S r  )rå   rF  r©   r†   ÚsetCFF2)r@   r;   rA   rÔ   r?   r(   r†   ræ   s          €r$   r©   zFontDict.__init__¢
  sK   ø€ õ 	�h˜ÑÔ×&Ò& w°°fÀVÐ&ÑLÔLÐLØˆŒØ�Š�VÑÔÐÐÐr&   c                 óZ   — |r| j         | _        d| _        d S | j        | _        d| _        d S )NTF)Ú	orderCFF2rÖ  r  ÚorderCFFr¨   s     r$   r¢  zFontDict.setCFF2¯
  s2   € àð 	!ØœˆDŒJØˆDŒLˆLˆLàœˆDŒJØ ˆDŒLˆLˆLr&   r;  )r    r¡   r¢   r6  rÄ  r-  r5  rp  r!  r¥  r¤  r,  r€  r©   r¢  ré   rê   s   @r$   rF  rF  
  s“   ø€ € € € € ð8 €HØ �Ð!1Ñ2Ô2€JØ$€MØ>Ð>Ð>€HØ�€IØ'€Oð ØØØØØðð ð ð ð ð ð!ð !ð !ð !ð !ð !ð !r&   rF  c                   óˆ   ‡ — e Zd Z ee¦  «        Z ee¦  «        Z ee¦  «        Z	e
ZeZdˆ fd„	Zed„ ¦   «         Zdd„Zˆ xZS )r  Nc                 óv  •— t          t          | ¦  «                             ||||¬¦  «         || _        |rIt	          t
          ¦  «        | _        t          t
          ¦  «        | _        d x| _	        | _
        d| _        d S t	          t          ¦  «        | _        t          t          ¦  «        | _        d| _        d S )Nr'   TF)rå   r  r©   r†   rÂ  ÚprivateDictOperators2r6  rÀ  rÖ  r(  r'  r  r1  )r@   r;   rA   rÔ   r(   r†   ræ   s         €r$   r©   zPrivateDict.__init__À
  s¡   ø€ Ý�k˜4Ñ Ô ×)Ò)¨'°4¸ÈÐ)ÑOÔOÐOØˆŒØð 
	!Ý)Õ*?Ñ@Ô@ˆDŒMÝ#Õ$9Ñ:Ô:ˆDŒJð 7;Ð:ˆDÔ Ô!3ØˆDŒLˆLˆLå)Õ*>Ñ?Ô?ˆDŒMÝ#Õ$8Ñ9Ô9ˆDŒJØ ˆDŒLˆLˆLr&   c                 ó   — | j         S rF   )r  rH   s    r$   Úin_cff2zPrivateDict.in_cff2Ï
  r•  r&   c                 ór   — |€t          | d¦  «        r| j        }nd}| j                             |¦  «        }|S )Nr  r   )rP   r  r†   rk  )r@   Úvirj  s      r$   rk  zPrivateDict.getNumRegionsÓ
  sB   € àˆ:Ý�t˜YÑ'Ô'ð Ø”\��à�Ø”[×.Ò.¨rÑ2Ô2ˆ
ØÐr&   )NNNNNrF   )r    r¡   r¢   rÂ  r1  r6  rÄ  r5  rÀ  rÖ  r0  r€  rw  r!  r©   Úpropertyrª  rk  ré   rê   s   @r$   r  r  ¹
  s¦   ø€ € € € € Øˆ}Ð1Ñ2Ô2€HØ �Ð!5Ñ6Ô6€JØˆJÐ+Ñ,Ô,€EØ+€OØ'€Mð!ð !ð !ð !ð !ð !ð ðð ñ „Xððð ð ð ð ð ð ð r&   r  c                   ó>   — e Zd ZdZd
d„Zd„ Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
dS )r:   zSID -> string mapping.Nc                 óT   — |€g }nd„ t          |d¬¦  «        D ¦   «         }|| _        d S )Nc                 ó0   — g | ]}t          |d ¬¦  «        ‘ŒS )r   r   r    r!   s     r$   rñ  z+IndexedStrings.__init__.<locals>.<listcomp>å
  s%   € ÐVÐVÐV°q•u˜Q¨Ð2Ñ2Ô2ÐVÐVÐVr&   Fr'   )r6   r;   )r@   rA   r;   s      r$   r©   zIndexedStrings.__init__á
  s9   € Øˆ<ØˆGˆGàVÐV½EÀ$ÈuÐ<UÑ<UÔ<UÐVÑVÔVˆGØˆŒˆˆr&   c                 ó(   — t          | d | d¬¦  «        S )NFr'   )r×   rH   s    r$   ra   zIndexedStrings.getCompilerè
  s   € Ý% d¨D°$¸uÐEÑEÔEÐEr&   c                 ó*   — t          | j        ¦  «        S rF   )rG   r;   rH   s    r$   rI   zIndexedStrings.__len__ë
  s   € Ý�4”<Ñ Ô Ð r&   c                 ó\   — |t           k     rt          |         S | j        |t           z
           S rF   )ÚcffStandardStringCountÚcffStandardStringsr;   )r@   rd  s     r$   rX   zIndexedStrings.__getitem__î
  s,   € ØÕ'Ò'Ð'Ý% cÔ*Ð*à”< Õ&<Ñ <Ô=Ð=r&   c                 óL  — t          | d¦  «        s|                      ¦   «          t          |d¬¦  «        }|t          v rt          |         }nW|| j        v r| j        |         }n@t          | j        ¦  «        t          z   }| j                             |¦  «         || j        |<   |S )NÚstringMappingr   r   )	rP   ÚbuildStringMappingr   ÚcffStandardStringMappingr·  rG   r;   r´  re   )r@   r#   rd  s      r$   r[  zIndexedStrings.getSIDô
  sª   € Ý�t˜_Ñ-Ô-ð 	&Ø×#Ò#Ñ%Ô%Ð%Ý�!˜hÐ'Ñ'Ô'ˆØÕ(Ð(Ð(Ý*¨1Ô-ˆCˆCØ�$Ô$Ð$Ð$ØÔ$ QÔ'ˆCˆCå�d”lÑ#Ô#Õ&<Ñ<ˆCØŒL×Ò Ñ"Ô"Ð"Ø$'ˆDÔ˜qÑ!Øˆ
r&   c                 ó   — | j         S rF   rÙ   rH   s    r$   Ú
getStringszIndexedStrings.getStrings  s
   € ØŒ|Ðr&   c                 ó–   — i | _         t          t          | j        ¦  «        ¦  «        D ]}|t          z   | j         | j        |         <   Œ d S rF   )r·  r  rG   r;   r´  r�  s     r$   r¸  z!IndexedStrings.buildStringMapping  sV   € ØˆÔÝ�3˜tœ|Ñ,Ô,Ñ-Ô-ð 	Uð 	UˆEØ6;Õ>TÑ6TˆDÔ˜tœ|¨EÔ2Ñ3Ð3ð	Uð 	Ur&   rF   )r    r¡   r¢   r£   r©   ra   rI   rX   r[  r»  r¸  r¤   r&   r$   r:   r:   Þ
  s�   € € € € € Ø Ð ðð ð ð ðFð Fð Fð!ð !ð !ð>ð >ð >ðð ð ðð ð ðUð Uð Uð Uð Ur&   r:   (‡  r?  ÚspaceÚexclamÚquotedblÚ
numbersignÚdollarÚpercentÚ	ampersandÚ
quoterightÚ	parenleftÚ
parenrightÚasteriskÚplusÚcommaÚhyphenÚperiodÚslashÚzeroÚoneÚtwoÚthreeÚfourÚfiveÚsixÚsevenÚeightÚnineÚcolonÚ	semicolonÚlessÚequalÚgreaterÚquestionÚatÚAr   ÚCÚDÚEÚFÚGÚHÚIÚJÚKÚLÚMÚNÚOÚPÚQÚRÚSÚTÚUÚVÚWÚXÚYÚZÚbracketleftÚ	backslashÚbracketrightÚasciicircumÚ
underscoreÚ	quoteleftÚaÚbÚcrµ  ÚeÚfÚgÚhr6  ÚjÚkr¿  r™  r7  ÚoÚpÚqÚrr#   ÚtÚur>  ÚwÚxÚyÚzÚ	braceleftÚbarÚ
bracerightÚ
asciitildeÚ
exclamdownÚcentÚsterlingÚfractionÚyenÚflorinÚsectionÚcurrencyÚquotesingleÚquotedblleftÚguillemotleftÚguilsinglleftÚguilsinglrightÚfiÚflÚendashÚdaggerÚ	daggerdblÚperiodcenteredÚ	paragraphÚbulletÚquotesinglbaseÚquotedblbaseÚquotedblrightÚguillemotrightÚellipsisÚperthousandÚquestiondownÚgraveÚacuteÚ
circumflexÚtildeÚmacronÚbreveÚ	dotaccentÚdieresisÚringÚcedillaÚhungarumlautÚogonekÚcaronÚemdashÚAEÚordfeminineÚLslashÚOslashÚOEÚordmasculineÚaeÚdotlessiÚlslashÚoslashÚoeÚ
germandblsÚonesuperiorÚ
logicalnotÚmuÚ	trademarkÚEthÚonehalfÚ	plusminusÚThornÚ
onequarterÚdivideÚ	brokenbarÚdegreeÚthornÚthreequartersÚtwosuperiorÚ
registeredÚminusÚethÚmultiplyÚthreesuperiorÚ	copyrightÚAacuteÚAcircumflexÚ	AdieresisÚAgraveÚAringÚAtildeÚCcedillaÚEacuteÚEcircumflexÚ	EdieresisÚEgraveÚIacuteÚIcircumflexÚ	IdieresisÚIgraveÚNtildeÚOacuteÚOcircumflexÚ	OdieresisÚOgraveÚOtildeÚScaronÚUacuteÚUcircumflexÚ	UdieresisÚUgraveÚYacuteÚ	YdieresisÚZcaronÚaacuteÚacircumflexÚ	adieresisÚagraveÚaringÚatildeÚccedillaÚeacuteÚecircumflexÚ	edieresisÚegraveÚiacuteÚicircumflexÚ	idieresisÚigraveÚntildeÚoacuteÚocircumflexÚ	odieresisÚograveÚotildeÚscaronÚuacuteÚucircumflexÚ	udieresisÚugraveÚyacuteÚ	ydieresisÚzcaronÚexclamsmallÚHungarumlautsmallÚdollaroldstyleÚdollarsuperiorÚampersandsmallÚ
AcutesmallÚparenleftsuperiorÚparenrightsuperiorÚtwodotenleaderÚonedotenleaderÚzerooldstyleÚoneoldstyleÚtwooldstyleÚthreeoldstyleÚfouroldstyleÚfiveoldstyleÚsixoldstyleÚsevenoldstyleÚeightoldstyleÚnineoldstyleÚcommasuperiorÚthreequartersemdashÚperiodsuperiorÚquestionsmallÚ	asuperiorÚ	bsuperiorÚcentsuperiorÚ	dsuperiorÚ	esuperiorÚ	isuperiorÚ	lsuperiorÚ	msuperiorÚ	nsuperiorÚ	osuperiorÚ	rsuperiorÚ	ssuperiorÚ	tsuperiorÚffÚffiÚfflÚparenleftinferiorÚparenrightinferiorÚCircumflexsmallÚhyphensuperiorÚ
GravesmallÚAsmallÚBsmallÚCsmallÚDsmallÚEsmallÚFsmallÚGsmallÚHsmallÚIsmallÚJsmallÚKsmallÚLsmallÚMsmallÚNsmallÚOsmallÚPsmallÚQsmallÚRsmallÚSsmallÚTsmallÚUsmallÚVsmallÚWsmallÚXsmallÚYsmallÚZsmallÚcolonmonetaryÚ	onefittedÚrupiahÚ
TildesmallÚexclamdownsmallÚcentoldstyleÚLslashsmallÚScaronsmallÚZcaronsmallÚDieresissmallÚ
BrevesmallÚ
CaronsmallÚDotaccentsmallÚMacronsmallÚ
figuredashÚhypheninferiorÚOgoneksmallÚ	RingsmallÚCedillasmallÚquestiondownsmallÚ	oneeighthÚthreeeighthsÚfiveeighthsÚseveneighthsÚonethirdÚ	twothirdsÚzerosuperiorÚfoursuperiorÚfivesuperiorÚsixsuperiorÚsevensuperiorÚeightsuperiorÚninesuperiorÚzeroinferiorÚoneinferiorÚtwoinferiorÚthreeinferiorÚfourinferiorÚfiveinferiorÚsixinferiorÚseveninferiorÚeightinferiorÚnineinferiorÚcentinferiorÚdollarinferiorÚperiodinferiorÚcommainferiorÚAgravesmallÚAacutesmallÚAcircumflexsmallÚAtildesmallÚAdieresissmallÚ
AringsmallÚAEsmallÚCcedillasmallÚEgravesmallÚEacutesmallÚEcircumflexsmallÚEdieresissmallÚIgravesmallÚIacutesmallÚIcircumflexsmallÚIdieresissmallÚEthsmallÚNtildesmallÚOgravesmallÚOacutesmallÚOcircumflexsmallÚOtildesmallÚOdieresissmallÚOEsmallÚOslashsmallÚUgravesmallÚUacutesmallÚUcircumflexsmallÚUdieresissmallÚYacutesmallÚ
ThornsmallÚYdieresissmallz001.000z001.001z001.002z001.003ÚBlackÚBoldÚBookÚLightÚMediumÚRegularÚRomanÚSemiboldi‡  )år?  r½  r¾  r¿  rÀ  rÁ  rÂ  rÃ  rÄ  rÅ  rÆ  rÇ  rÈ  rÉ  rÊ  rË  rÌ  rÍ  rÎ  rÏ  rÐ  rÑ  rÒ  rÓ  rÔ  rÕ  rÖ  r×  rØ  rÙ  rÚ  rÛ  rÜ  rÝ  rÞ  r   rß  rà  rá  râ  rã  rä  rå  ræ  rç  rè  ré  rê  rë  rì  rí  rî  rï  rð  rñ  rò  ró  rô  rõ  rö  r÷  rø  rù  rú  rû  rü  rý  rþ  rÿ  rµ  r   r  r  r  r6  r  r  r¿  r™  r7  r  r  r  r	  r#   r
  r  r>  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r!  r"  r#  r$  r%  r&  r'  r(  r)  r*  r+  r,  r-  r.  r/  r0  r1  r2  r3  r4  r5  r6  r7  r8  r9  r:  r;  r<  r=  r>  r?  r@  rA  rB  rC  rD  rE  rF  rG  rH  rI  rJ  rK  rL  rM  rN  rO  rP  rQ  rR  rS  rT  rU  rV  rW  rX  rY  rZ  r[  r\  r]  r^  r_  r`  ra  rb  rc  rd  re  rf  rg  rh  ri  rj  rk  rl  rm  rn  ro  rp  rq  rr  rs  rt  ru  rv  rw  rx  ry  rz  r{  r|  r}  r~  r  r€  r�  r‚  rƒ  r„  r…  r†  r‡  rˆ  r‰  rŠ  r‹  rŒ  r�  rŽ  r�  r�  r‘  r’  r“  r”  r•  r–  r—  r˜  éå   )¦r?  r½  r™  rš  r›  rœ  r�  rž  rŸ  r   r¡  r¢  rÉ  rÊ  rË  r  r£  r¤  r¥  r¦  r§  r¨  r©  rª  r«  r¬  r×  rØ  r­  r®  r¯  r°  r±  r²  r³  r´  rµ  r¶  r·  r¸  r¹  rº  r»  r¼  r½  r¾  r!  r"  r¿  rÀ  rÁ  rÂ  rÃ  rÄ  rÅ  rÆ  rÇ  rÈ  rÉ  rÊ  rË  rÌ  rÍ  rÎ  rÏ  rÐ  rÑ  rÒ  rÓ  rÔ  rÕ  rÖ  r×  rØ  rÙ  rÚ  rÛ  rÜ  rÝ  rÞ  rß  rà  rá  râ  rã  rä  rå  ræ  rç  rè  ré  rê  rë  rì  rí  rî  rï  rð  rñ  rò  rR  rO  rW  ró  rô  rõ  rö  r÷  rø  rù  rú  rJ  rX  r]  rû  rü  rý  rþ  rÿ  r   r  r  r  r  r  r  r  r  r	  r
  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r!  r"  r#  r$  r%  r&  r'  r(  r)  r*  r+  r,  r-  r.  é¦   )Wr?  r½  r›  rœ  rŸ  r   r¡  r¢  rÉ  rÊ  rË  r  r£  r¤  r¥  r¦  r§  r¨  r©  rª  r«  r¬  r×  rØ  r­  r®  r¯  r±  r²  r³  r´  rµ  r¶  r·  r¸  r¹  rº  r»  r¼  r½  r¾  r!  r"  r¿  rÀ  rÁ  rÂ  rÄ  rà  rá  râ  rå  rî  rï  rR  rO  rW  rô  rõ  rö  r÷  rø  rù  rú  rJ  rX  r]  rû  rü  rý  rþ  rÿ  r   r  r  r  r  r  r  r  r  r	  r
  r  r  r  r  éW   )‡r£   ÚfontTools.miscr   r   ÚfontTools.misc.arrayToolsr   r   ÚfontTools.misc.textToolsr   r   r	   r
   r   r   ÚfontTools.ttLibr   ÚfontTools.ttLib.tables.otBaser   r   ÚfontTools.ttLib.tablesr   rW  Úior   r1   Úloggingræ  r°   Ú	getLoggerr    r¯   r-   rz  Úobjectr   r`   r³   r¿   r×   r±   rì   rö   rþ   r  r6   r>   r>  r8   rK  rQ  rm  rf   r  r  r  rÓ   rÒ   rÑ   r¬  r¯  r²  rº  r½  rÀ  rÂ  rÄ  rÆ  rÓ  rÞ  rë  rõ  r÷  r  r  r  r  r#  r*  r=  rU  rY  r\  rA  rB  r.  r/  rn  ry  rŒ  r‚  r€  r�  rp  rq  r�  r¢  r¬  r³  r»  r½  r¿  rÆ  rÏ  r-  r“  rþ  rE  r1  r¨  r*  ÚDictDecompilerr,  r0  r3  rD  rf  rp  rw  r|  rƒ   rF  r  r:   rµ  r´  rG   r¹  r  Ú_ir1  rL  r2  rM  r3  rN  r¤   r&   r$   ú<module>rF     sÎ  ððð ð #Ð "Ð "Ð "Ð "Ð "Ø (Ð (Ð (Ð (Ð (Ð (Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð #Ð "Ð "Ð "Ð "Ð "Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø Ð Ð Ð Ð Ð Ø €€€Ø €€€Ø 	€	€	€	ð 	Œ˜Ñ€Ø€gÔ˜Ñ!Ô!€ð€ð €ð`(ð `(ð `(ð `(ð `(�ñ `(ô `(ð `(ðF	/&ð /&ð /&ð /&ð /&�ñ /&ô /&ð /&ðd	ð 	ð 	ðI%ð I%ð I%ð I%ð I%�Fñ I%ô I%ð I%ðXð ð ð ð ˜]ñ ô ð ð
!;ð !;ð !;ð !;ð !;˜=ñ !;ô !;ð !;ðH&-ð &-ð &-ð &-ð &-˜=ñ &-ô &-ð &-ðR	ð 	ð 	ð 	ð 	˜-ñ 	ô 	ð 	ð.ð .ð .ð .ð .Ð'ñ .ô .ð .ð1ð 1ð 1ð 1ð 1Ð-ñ 1ô 1ð 1ðDð Dð Dð Dð DˆFñ Dô Dð DðNh ð h ð h ð h ð h �uñ h ô h ð h ðV"ð "ð "ð "ð "Ð!ñ "ô "ð "ð4 ð 4 ð 4 ð 4 ð 4 �5ñ 4 ô 4 ð 4 ðn ð  ð  ð  ð  �5ñ  ô  ð  ðF3ð 3ð 3ð 3ð 3�6ñ 3ô 3ð 3ðl3,ð 3,ð 3,ð 3,ð 3,ˆvñ 3,ô 3,ð 3,ðlH)ð H)ð H)ð H)ð H)�&ñ H)ô H)ð H)ðV!ð !ð !ðð ð ð
ð ð ð
ð ð ð)ð )ð )ð)ð )ð )ðð ð ð$ð $ð $ð$ð $ð $ðð ð ðð ð ðð ð ðð ð ðð ð ðð ð ð ð �fñ ô ð ð2;ð ;ð ;ð ;ð ;�_ñ ;ô ;ð ;ð<ð <ð <ð <ð <�oñ <ô <ð <ð$ð ð ðð ð ðð ð ð ð �oñ ô ð ð2ð ð ð ð �_ñ ô ð ð8ð ð ð ð �_ñ ô ð ð$ð ð ð ð ˜>ñ ô ð ð.ð ð ð ð �^ñ ô ð ð:ð :ð :ð :ð :˜>ñ :ô :ð :ðz;ð ;ð ;ð ;ð ;�ñ ;ô ;ð ;ð|ð ð ð ð �fñ ô ð ð, ð  ð  ð,ð ð ð ð  ð  ð
ð 
ð 
ð"ð "ð "ðJ
ð 
ð 
ðð ð ð(ð ð ð ð �vñ ô ð ð*<ð <ð <ð <ð <˜ñ <ô <ð <ð~(ð (ð (ðð ð ðð ð ðð ð ð&ð ð ð.ð ð ðDð ð ð ð �~ñ ô ð ð8ð ð ð ð ˜ñ ô ð ðBð ð ð ð ˜ñ ô ð ð(ð ð ðð ð ð*ð ð ð*ð ð ð ð �vñ ô ð ðBð ð ð ð �vñ ô ð ð$Rð Rð Rð Rð R�?ñ Rô Rð Rð"&à*ð&ð ˆuÐ.°°l°l±n´nÐEð&ð 6ð	&ð
 &ð&ð ˆ�%˜˜˜Ñ0Ô0Ð1ð&ð ˆk˜5 $¨¨Ñ(9Ô(9Ð:ð&ð ˆ
�E˜4  Ñ!2Ô!2Ð3ð&ð ˆz˜5 $¨¨Ñ(9Ô(9Ð:ð&ð ˆ�e˜T ? ?Ñ#4Ô#4Ð5ð&ð %ð&ð 1ð&ð 0ð&ð 9ð&ð 8ð&ð  .ð!&ð" 3ð#&ð$ ˆl˜GÐ%?Ð%?Ð%?ÀÐFð%&ð& +ð'&ð( ˆ
�G˜\˜\˜\¨4Ð0ð)&ð* 0ð+&ð, &ð-&ð. 0ð/&ð0 2ð1&ð2 5ð3&ð4 4ð5&ð6 5ð7&ð8 1ð9&ð: 1ð;&ð< ˆ�H˜dÐ$4Ð$4Ñ$6Ô$6Ð7ð=&ð> 0ð?&ð@ ˆ�X˜qÐ"3Ð"3Ñ"5Ô"5Ð6ðA&ðB ˆÐ(¨$Ð0DÐ0DÑ0FÔ0FÐGðC&ðD ˆz˜8 TÐ+<Ð+<Ñ+>Ô+>Ð?ðE&ðF ˆy˜( DÐ*:Ð*:Ñ*<Ô*<Ð=ðG&ðH ˆ˜ $Ð(<Ð(<Ñ(>Ô(>Ð?ðI&ðJ ˆ�X˜tÐ%6Ð%6Ñ%8Ô%8Ð9ðK&Ð ðT +Øˆl˜GÐ%?Ð%?Ð%?ÀÐFØˆz˜8 TÐ+<Ð+<Ñ+>Ô+>Ð?Øˆy˜( DÐ*:Ð*:Ñ*<Ô*<Ð=Øˆ˜ $Ð(<Ð(<Ñ(>Ô(>Ð?Øˆ�X˜tÐ%6Ð%6Ñ%8Ô%8Ð9ðÐ ð Ð Ø
€ð *àØØØØðð +Ø*Ø+Ø0Ø4Ø.Ø-Ø'Ø'Ø0Ø0Ø.Ø:Ø-Ø2Ø7Ø6Ø,Ø,Øˆ�(˜D . .Ñ"2Ô"2Ð3ð;Ð ðD *àØØØØðð +Ø*Ø+Ø0Ø4Ø.Ø-Ø'Ø'Ø0Ø0Ø2Ø7Øˆ�(˜D . .Ñ"2Ô"2Ð3ð/Ð ð60ð 0ð 0ð$ €Ð"Ñ #Ô #Ð #Ø €ÐÑ Ô Ð ð4ð 4ð 4ð 4ð 4˜Ô4ñ 4ô 4ð 4ð8ð 8ð 8ð 8ð 8˜MÔ8ñ 8ô 8ð 8ðfð fð fð fð f�6ñ fô fð fðR/ð /ð /ðCð Cð Cð Cð C�lñ Cô Cð CðL*ð *ð *ð *ð *�|ñ *ô *ð *ðZð ð ð ð ˜,ñ ô ð ð O#ð O#ð O#ð O#ð O#ˆvñ O#ô O#ð O#ðdo4ð o4ð o4ð o4ð o4ˆhñ o4ô o4ð o4ðd7!ð 7!ð 7!ð 7!ð 7!ˆxñ 7!ô 7!ð 7!ðt"ð "ð "ð "ð "�(ñ "ô "ð "ðJ*Uð *Uð *Uð *Uð *U�Vñ *Uô *Uð *Uð`Hð Hð HÐ ðT Ð Ø
€sÐÑÔÐ"8Ò8Ð8Ð8Ð8àÐ Ø
ˆ%Ð&Ñ
'Ô
'ð :ð :€BØ79ÐÐ/°Ô3Ñ4Ð4ðfð fð fÐ ðP Ð Ø
€sÐÑÔÐ"8Ò8Ð8Ð8Ð8ðgð gð gÐ ðR Ð Ø
€sÐÑÔÐ!5Ò5Ð5Ð5Ð5ðXð Xð XÐ ðt  Ð Ø
€sÐ!Ñ"Ô"Ð&@Ò@Ð@Ð@Ð@Ð@Ð@r&   