§
    |ØjóÅ ã                   óè	  — 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mZ d dlmZmZmZmZmZ d dlmZ d dlmZmZmZ ddlmZm Z m!Z!m"Z"m#Z# dd	l$m%Z% dd
l&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z3m4Z5m6Z6 d dl7m8Z8m9Z9 d dl:m;Z; d dl<m=Z= d dl>Z>d dl?Z?d dl@mAZA d dlBZBd dlCmDZD  eBjE        eF¦  «        ZGd„ ZHdeIe%         fd„ZJ G d„ deK¦  «        ZL G d„ deL¦  «        ZM G d„ deM¦  «        ZN G d„ deM¦  «        ZO G d„ deO¦  «        ZP G d„ deO¦  «        ZQ G d „ d!eQ¦  «        ZR G d"„ d#eNeQ¦  «        ZS G d$„ d%eO¦  «        ZT G d&„ d'eO¦  «        ZU G d(„ d)eO¦  «        ZV G d*„ d+eO¦  «        ZW G d,„ d-eO¦  «        ZX G d.„ d/eO¦  «        ZY G d0„ d1eYeW¦  «        ZZ G d2„ d3eYeU¦  «        Z[ G d4„ d5eYeQ¦  «        Z\ G d6„ d7eM¦  «        Z] G d8„ d9eM¦  «        Z^ G d:„ d;e^¦  «        Z_ G d<„ d=eU¦  «        Z` G d>„ d?eU¦  «        Za G d@„ dAeM¦  «        Zb G dB„ dCeb¦  «        Zc G dD„ dEeb¦  «        Zd G dF„ dGed¦  «        Ze G dH„ dIed¦  «        Zf G dJ„ dKef¦  «        Zg G dL„ dMeg¦  «        Zh G dN„ dOeM¦  «        Zi G dP„ dQeM¦  «        Zj G dR„ dSeL¦  «        Zk G dT„ dUek¦  «        Zl G dV„ dWek¦  «        Zm G dX„ dYem¦  «        Zn G dZ„ d[em¦  «        Zo G d\„ d]en¦  «        Zp G d^„ d_en¦  «        Zq G d`„ daek¦  «        Zr G db„ dcem¦  «        Zs G dd„ deenes¦  «        Zt G df„ dgem¦  «        Zu G dh„ dieO¦  «        Zv G dj„ dkev¦  «        Zw G dl„ dmeL¦  «        Zx G dn„ doeL¦  «        Zy G dp„ dqeL¦  «        Zz G dr„ dseL¦  «        Z{ G dt„ dueL¦  «        Z| G dv„ dwe|¦  «        Z} G dx„ dyeL¦  «        Z~ G dz„ d{eL¦  «        Z G d|„ d}eL¦  «        Z€ G d~„ deL¦  «        Z� G d€„ d�eL¦  «        Z‚ G d‚„ dƒeL¦  «        Zƒ G d„„ d…¦  «        Z„ G d†„ d‡eL¦  «        Z… G dˆ„ d‰e…¦  «        Z† G dŠ„ d‹eU¦  «        Z‡ G dŒ„ d�eW¦  «        Zˆ G dŽ„ d�eˆ¦  «        Z2 G d�„ d‘eˆ¦  «        Z4 G d’„ d“eD¦  «        Z‰ G d”„ d•eL¦  «        ZŠi d–eV“d—eT“d˜eP“d™eW“dšeU“d›eX“dœeQ“d�ej“d!eR“d#eS“dOei“d7e]“d9e^“d;e_“d=e`“dCec“dGee“i dIef“dKeg“dMeh“džek“dŸeŠ“d em“d¡en“d¢eo“dkew“de�“d�e‚“dƒeƒ“d‹e‡“d�e2“d‘e4“d?ea“d£ e;e…e„¬¤¦  «        “¥ e;e†e„¬¤¦  «         e;e…e(¬¥¦  «        ee€elezele{d¦„ d§„ d¨„ d©„ dª„ d«„ d¬„ d­œ¥Z‹dS )®é    )ÚfixedToFloatÚfloatToFixedÚfloatToFixedToStrÚstrToFixedToFloatÚensureVersionIsLongÚversionToFixed)ÚTupleVariation)ÚnearestMultipleShortestReprÚotRound)Ú	bytesjoinÚtobytesÚtostrÚpadÚsafeEval)ÚLazyList)ÚOPTIMIZE_FONT_SPEEDÚ
TTLibErrorÚgetSearchRangeé   )ÚCountReferenceÚFormatSwitchingBaseTableÚOTTableReaderÚOTTableWriterÚValueRecordFactory)Ú	FieldSpec)ÚlookupTypesÚVarCompositeGlyphÚAATStateTableÚAATStateÚ	AATActionÚContextualMorphActionÚ	LigActionÚLigatureMorphActionÚInsertionMorphActionÚMortSubtableÚMorxSubtableÚ
ExtendModeÚCompositeModeÚNO_VARIATION_INDEX)Úzip_longestÚ
accumulate)Úpartial)ÚSimpleNamespaceN)ÚOptional)ÚIntFlagc                 ó,   — t          | t          ¦  «        S ©N)Ú
isinstanceÚtuple)Úts    ú˜/Users/tedpeters/Documents/Projects/Claude Projects/Misc Tools/notename-sheets/.venv/lib/python3.11/site-packages/fontTools/ttLib/tables/otConverters.pyú<lambda>r6   0   s   € •J˜q¥%Ñ(Ô(€ ó    Ú	tableSpecc           	      óÌ  — g }i }| D �]Ù}|j         }|j                              d¦  «        r|j        dk    sJ ‚t          }�n|j                              d¦  «        s	|j         dv r!t
          t          t          dœ|j                 }nÏ|j         dk    rt          }n¼|j         dk    rt          }n©|j         dk    rt          }n–|j         d	k    rt          }nƒ|j         d
k    rt          }np|j         dk    r|j        dk    rt          }nR|j         dv rt          }nA|j        t          vrd|j        vr|j        }t           }nt#          |j        |t          ¦  «        } ||j         |j        |j        |j        ¬¦  «        }|j        r|j        }n9|j        dv r|                     |j        ¦  «        }n|                     |¦  «        }|j        s||_        |j         dv ri|d         |_        |j                             ¦   «         D ]B}	|	                     ¦   «         D ]+}
t3          |j         |j        |j        |
¦  «        ||
j        <   Œ,ŒC|j         d	k    r_|d         |_        |d	         |_        |j                             ¦   «         D ]+}
t3          |j         |j        |j        |
¦  «        ||
j        <   Œ,|                     |¦  «         |j         |vsJ |j         ¦   «         ‚|||j         <   �ŒÛ||fS )zÔGiven a table spec from otData.py, build a converter object for each
    field of the table. This is called for each table in otData.py, and
    the results are assigned to the corresponding class in otTables.py.ÚValueFormatÚuint16ÚCount)ÚStructLengthÚ	MorphType)Úuint8r;   Úuint32ÚSubTableÚExtSubTableÚ	SubStructÚFeatureParamsÚFeatureVariationsÚFeatureÚLOffset)ÚCIDGlyphMappingÚGlyphCIDMappingú(©Údescription)Ú	MortChainr%   Ú	MorxChain)rA   rB   rC   r   ÚfeatureParamTypes)ÚnameÚ
startswithÚtyper:   ÚendswithÚComputedUInt8ÚComputedUShortÚComputedULongrA   rB   rC   rD   rE   ÚAlternateFeatureÚStructWithLengthÚconverterMappingÚStructÚevalÚrepeatÚauxrL   Ú
tableClassÚgetr   ÚvaluesÚTableÚ__name__rO   ÚdefaultFeatureParamsÚappend)r8   ÚtableNamespaceÚ
convertersÚconvertersByNameÚspecÚ	tableNameÚconverterClassÚconvr^   r4   Úclss              r5   ÚbuildConvertersrm   3   s@  € ð €JØÐØð @+ñ @+ˆØ”Iˆ	ØŒ9×Ò Ñ.Ô.ð 	SØ”9 Ò(Ð(Ð(Ð(Ý(ˆN‰NØŒY×Ò Ñ(Ô(ð 	S¨D¬IÐ9VÐ,VÐ,Vå&Ý(Ý'ðð ð Œiô	ˆNˆNð
 ŒY˜*Ò$Ð$Ý%ˆNˆNØŒY˜-Ò'Ð'Ý(ˆNˆNØŒY˜+Ò%Ð%Ý&ˆNˆNØŒY˜/Ò)Ð)Ý*ˆNˆNØŒYÐ-Ò-Ð-Ý.ˆNˆNØŒY˜)Ò#Ð#¨¬	°YÒ(>Ð(>Ý-ˆNˆNØŒYÐ@Ð@Ð@Ý-ˆNˆNà”9Õ 0Ð0Ð0°SÀÄ	Ð5IÐ5IØ œI�	Ý!'��å!% d¤i°ÕAQÑ!RÔ!R�àˆ~ØŒI�t”{ D¤H¸$Ô:Jð
ñ 
ô 
ˆð Œ?ð 	7àœˆJˆJØŒYÐDÐDÐDØ'×+Ò+¨D¬IÑ6Ô6ˆJˆJà'×+Ò+¨IÑ6Ô6ˆJàŒð 	)Ø(ˆDŒOàŒ9Ð@Ð@Ð@Ø-¨mÔ<ˆDÔàÔ%×,Ò,Ñ.Ô.ð ð �ØŸ8š8™:œ:ð ð �CÝ5:Øœ	 4¤;°´¸#ñ6ô 6Ð$ S¤\Ñ2Ð2ðð Œ9˜Ò'Ð'Ø%3Ð4GÔ%HˆDÔ"Ø(6°Ô(GˆDÔ%ØÔ-×4Ò4Ñ6Ô6ð ð �Ý16Ø”I˜tœ{¨D¬H°cñ2ô 2Ð  ¤Ñ.Ð.ð 	×Ò˜$ÑÔÐØŒyÐ 0Ð0Ð0Ð0°$´)Ñ0Ô0Ð0Ø&*Ð˜œÑ#Ñ#ØÐ'Ð'Ð'r7   c                   ó„   — e Zd ZdZdddœd„Zd„ Zd„ Zd„ Zd	„ Zdd
„Z	d„ Z
d„ Z ej        d¦  «        Zdee         fd„ZdS )ÚBaseConverterz\Base class for converter objects. Apart from the constructor, this
    is an abstract class.NÚ rK   c                ó,  — || _         || _        || _        | j        r"| j        st          | j        dd¦  «        | _        || _        |                     d¦  «        p|dv | _        |                     d¦  «        p|dk    | _        |dv | _        || _	        d S )Nz<string>r[   r<   )ÚDesignAxisRecordSizeÚValueRecordSizeÚ
LookupTyper>   )Ú
ClassCountÚClass2CountÚ
FeatureTagÚSettingsCountÚVarRegionCountÚMappingCountÚRegionAxisCountÚDesignAxisCountrr   ÚAxisValueCountrs   Ú	AxisCountÚBaseGlyphRecordCountÚLayerRecordCountÚAxisIndicesListÚ	NumGlyphsÚMaxGlyphMapEntryIndexÚMaxEntryIndexÚ
NumEntries)
rP   r\   r]   Úcompiler^   rS   ÚisCountÚisLookupTypeÚisPropagatedrL   ©ÚselfrP   r\   r]   r^   rL   s         r5   Ú__init__zBaseConverter.__init__�   s¬   € ØˆŒ	ØˆŒØˆŒØŒ8ð 	=˜DœKð 	=Ý˜tœx¨°VÑ<Ô<ˆDŒHØ$ˆŒØ—}’} WÑ-Ô-ð 
°ð :
ð 2
ˆŒð !ŸMšM¨,Ñ7Ô7ÐN¸4À;Ò;NˆÔØ ð %
ð 
ˆÔð, 'ˆÔÐÐr7   c                 ó–  ‡ ‡‡‡	‡
— ‰j         o|dk    }|r ‰                      ‰¦  «        Š
‰
t          u rd}|s@g }t          |¦  «        D ],}|                     ‰                      ‰‰|¦  «        ¦  «         Œ-|S ˆˆˆ
ˆ fd„} |¦   «         Š	t          ˆ	fd„t          |¦  «        D ¦   «         ¦  «        }‰                     |‰
z  ¦  «         |S )z(Read an array of values from the reader.é   Fc                  óT   •‡‡— ‰                      ¦   «         Š‰j        Šˆˆˆˆˆfd„} | S )Nc                 óh   •— ‰                      ‰| ‰z  z   ¦  «         ‰                     ‰‰i ¦  «        S r1   )ÚseekÚread)ÚiÚfontÚposÚreader_copyÚ
recordSizer‹   s    €€€€€r5   Ú	read_itemzABaseConverter.readArray.<locals>.get_read_item.<locals>.read_item·   s6   ø€ Ø×$Ò$ S¨1¨z©>Ñ%9Ñ:Ô:Ð:ØŸ9š9 [°$¸Ñ;Ô;Ð;r7   ©Úcopyr•   )r˜   r•   r–   r”   Úreaderr—   r‹   s    @@€€€€r5   Úget_read_itemz.BaseConverter.readArray.<locals>.get_read_item³   sN   øøø€ Ø$Ÿkšk™mœm�Ø”j�ð<ð <ð <ð <ð <ð <ð <ð <ð <ð !Ð r7   c              3   ó   •K  — | ]}‰V — Œd S r1   © )Ú.0r“   r˜   s     €r5   ú	<genexpr>z*BaseConverter.readArray.<locals>.<genexpr>¾   s#   øè è € Ð9Ð9 q˜Ð9Ð9Ð9Ð9Ð9Ð9r7   )ÚlazyÚgetRecordSizeÚNotImplementedÚrangerd   r’   r   Úadvance)r‹   r›   r”   Ú	tableDictÚcountr¡   Úlr“   rœ   r˜   r—   s   ```      @@r5   Ú	readArrayzBaseConverter.readArray¥   s  øøøøø€ àŒyÐ&˜U QšYˆØð 	Ø×+Ò+¨FÑ3Ô3ˆJØ�^Ð+Ð+Ø�Øð 	ØˆAÝ˜5‘\”\ð =ð =�Ø—’˜Ÿš 6¨4°Ñ;Ô;Ñ<Ô<Ð<Ð<ØˆHð!ð !ð !ð !ð !ð !ð !ð !ð &˜™œˆIÝÐ9Ð9Ð9Ð9­E°%©L¬LÐ9Ñ9Ô9Ñ9Ô9ˆAØ�NŠN˜5 :Ñ-Ñ.Ô.Ð.àˆHr7   c                 ó>   — t          | d¦  «        r| j        S t          S )NÚ
staticSize)Úhasattrr«   r£   ©r‹   r›   s     r5   r¢   zBaseConverter.getRecordSizeÃ   s"   € Ý�4˜Ñ&Ô&ð 	#Ø”?Ð"ÝÐr7   c                 ó    — t          | ¦  «        ‚)zRead a value from the reader.©ÚNotImplementedError©r‹   r›   r”   r¦   s       r5   r’   zBaseConverter.readÈ   ó   € å! $Ñ'Ô'Ð'r7   c                 óª   — 	 t          |¦  «        D ]\  }}|                      |||||¦  «         Œd S # t          $ r}|j        |fz   |_        ‚ d }~ww xY wr1   )Ú	enumerateÚwriteÚ	ExceptionÚargs)r‹   Úwriterr”   r¦   r`   r“   ÚvalueÚes           r5   Ú
writeArrayzBaseConverter.writeArrayÌ   sz   € ð	Ý% fÑ-Ô-ð >ð >‘��5Ø—
’
˜6 4¨°E¸1Ñ=Ô=Ð=Ð=ð>ð >øåð 	ð 	ð 	Ø”V˜q˜d‘]ˆAŒFØøøøøð	øøøs   ‚.2 ²
A¼AÁAc                 ó    — t          | ¦  «        ‚)zWrite a value to the writer.r¯   ©r‹   r¸   r”   r¦   r¹   ÚrepeatIndexs         r5   rµ   zBaseConverter.writeÔ   r²   r7   c                 ó    — t          | ¦  «        ‚)zRead a value from XML.r¯   ©r‹   ÚattrsÚcontentr”   s       r5   ÚxmlReadzBaseConverter.xmlReadØ   r²   r7   c                 ó    — t          | ¦  «        ‚)zWrite a value to XML.r¯   ©r‹   Ú	xmlWriterr”   r¹   rP   rÁ   s         r5   ÚxmlWritezBaseConverter.xmlWriteÜ   r²   r7   zVarIndexBase\s*\+\s*(\d+)Úreturnc                 óŒ   — | j                              | j        ¦  «        }|sdS t          |                     d¦  «        ¦  «        S )zJIf description has `VarIndexBase + {offset}`, return the offset else None.Nr   )ÚvarIndexBasePlusOffsetREÚsearchrL   ÚintÚgroup)r‹   Úms     r5   ÚgetVarIndexOffsetzBaseConverter.getVarIndexOffsetâ   s>   € àÔ)×0Ò0°Ô1AÑBÔBˆØð 	Ø�4Ý�1—7’7˜1‘:”:‰ŒÐr7   r1   )rb   Ú
__module__Ú__qualname__Ú__doc__rŒ   r©   r¢   r’   r»   rµ   rÃ   rÇ   Úrer†   rÊ   r.   rÌ   rÏ   rž   r7   r5   ro   ro   }   sá   € € € € € ðð ð"'È"ð "'ð "'ð "'ð "'ð "'ðHð ð ð<ð ð ð
(ð (ð (ðð ð ð(ð (ð (ð (ð(ð (ð (ð(ð (ð (ð  *˜rœzÐ*FÑGÔGÐð 8¨C¤=ð ð ð ð ð ð r7   ro   c                   óF   — e Zd Zed„ ¦   «         Zed„ ¦   «         Zd„ Zd„ ZdS )ÚSimpleValuec                 ó   — | S r1   rž   ©r¹   s    r5   ÚtoStringzSimpleValue.toStringë   ó   € àˆr7   c                 ó   — | S r1   rž   r×   s    r5   Ú
fromStringzSimpleValue.fromStringï   rÙ   r7   c                 óŒ   — |                      ||d|                      |¦  «        fgz   ¦  «         |                     ¦   «          d S ©Nr¹   )Ú	simpletagrØ   ÚnewlinerÅ   s         r5   rÇ   zSimpleValue.xmlWriteó   sI   € Ø×Ò˜D %¨G°T·]²]À5Ñ5IÔ5IÐ+JÐ*KÑ"KÑLÔLÐLØ×ÒÑÔÐÐÐr7   c                 ó8   — |                       |d         ¦  «        S rÝ   )rÛ   rÀ   s       r5   rÃ   zSimpleValue.xmlRead÷   s   € Ø�Š˜u Wœ~Ñ.Ô.Ð.r7   N)rb   rÐ   rÑ   ÚstaticmethodrØ   rÛ   rÇ   rÃ   rž   r7   r5   rÕ   rÕ   ê   sf   € € € € € Øðð ñ „\ðð ðð ñ „\ððð ð ð/ð /ð /ð /ð /r7   rÕ   c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚOptionalValueNc                 óÄ   — || j         k    r*|                     d|                      |¦  «        f¦  «         |                     ||¦  «         |                     ¦   «          d S rÝ   )ÚDEFAULTrd   rØ   rÞ   rß   rÅ   s         r5   rÇ   zOptionalValue.xmlWriteþ   s`   € Ø�D”LÒ Ð Ø�LŠL˜' 4§=¢=°Ñ#7Ô#7Ð8Ñ9Ô9Ð9Ø×Ò˜D %Ñ(Ô(Ð(Ø×ÒÑÔÐÐÐr7   c                 óN   — d|v r|                       |d         ¦  «        S | j        S rÝ   )rÛ   rå   rÀ   s       r5   rÃ   zOptionalValue.xmlRead  s+   € Ø�eÐÐØ—?’? 5¨¤>Ñ2Ô2Ð2ØŒ|Ðr7   )rb   rÐ   rÑ   rå   rÇ   rÃ   rž   r7   r5   rã   rã   û   s7   € € € € € Ø€Gðð ð ðð ð ð ð r7   rã   c                   ó$   — e Zd Zed„ ¦   «         ZdS )ÚIntValuec                 ó"   — t          | d¦  «        S ©Nr   ©rÌ   r×   s    r5   rÛ   zIntValue.fromString  s   € å�5˜!‰}Œ}Ðr7   N©rb   rÐ   rÑ   rá   rÛ   rž   r7   r5   rè   rè   
  s-   € € € € € Øðð ñ „\ðð ð r7   rè   c                   ó,   — e Zd ZdZd„ Zd„ Zdd„Zd„ ZdS )ÚLongé   c                 ó*   — |                      ¦   «         S r1   ©ÚreadLongr±   s       r5   r’   z	Long.read  ó   € Ø�ŠÑ Ô Ð r7   c                 ó,   — |                      |¦  «        S r1   )ÚreadLongArray©r‹   r›   r”   r¦   r§   s        r5   r©   zLong.readArray  ó   € Ø×#Ò# EÑ*Ô*Ð*r7   Nc                 ó0   — |                      |¦  «         d S r1   )Ú	writeLongr½   s         r5   rµ   z
Long.write  ó   € Ø×Ò˜ÑÔÐÐÐr7   c                 ó0   — |                      |¦  «         d S r1   )ÚwriteLongArray©r‹   r¸   r”   r¦   r`   s        r5   r»   zLong.writeArray  ó   € Ø×Ò˜fÑ%Ô%Ð%Ð%Ð%r7   r1   ©rb   rÐ   rÑ   r«   r’   r©   rµ   r»   rž   r7   r5   rî   rî     óZ   € € € € € Ø€Jð!ð !ð !ð+ð +ð +ð ð  ð  ð  ð&ð &ð &ð &ð &r7   rî   c                   ó,   — e Zd ZdZd„ Zd„ Zdd„Zd„ ZdS )ÚULongrï   c                 ó*   — |                      ¦   «         S r1   ©Ú	readULongr±   s       r5   r’   z
ULong.read#  ó   € Ø×ÒÑ!Ô!Ð!r7   c                 ó,   — |                      |¦  «        S r1   )ÚreadULongArrayrö   s        r5   r©   zULong.readArray&  ó   € Ø×$Ò$ UÑ+Ô+Ð+r7   Nc                 ó0   — |                      |¦  «         d S r1   ©Ú
writeULongr½   s         r5   rµ   zULong.write)  ó   € Ø×Ò˜%Ñ Ô Ð Ð Ð r7   c                 ó0   — |                      |¦  «         d S r1   )ÚwriteULongArrayrý   s        r5   r»   zULong.writeArray,  ó   € Ø×Ò˜vÑ&Ô&Ð&Ð&Ð&r7   r1   rÿ   rž   r7   r5   r  r     óZ   € € € € € Ø€Jð"ð "ð "ð,ð ,ð ,ð!ð !ð !ð !ð'ð 'ð 'ð 'ð 'r7   r  c                   ó$   — e Zd Zed„ ¦   «         ZdS )ÚFlags32c                 ó   — d| z  S )Nz0x%08Xrž   r×   s    r5   rØ   zFlags32.toString1  ó   € à˜%ÑÐr7   N)rb   rÐ   rÑ   rá   rØ   rž   r7   r5   r  r  0  s-   € € € € € Øð ð  ñ „\ð ð  ð  r7   r  c                   ó   — e Zd ZeZdS )ÚVarIndexN)rb   rÐ   rÑ   r)   rå   rž   r7   r5   r  r  6  s   € € € € € Ø €G€G€Gr7   r  c                   ó,   — e Zd ZdZd„ Zd„ Zdd„Zd„ ZdS )ÚShorté   c                 ó*   — |                      ¦   «         S r1   )Ú	readShortr±   s       r5   r’   z
Short.read=  r  r7   c                 ó,   — |                      |¦  «        S r1   )ÚreadShortArrayrö   s        r5   r©   zShort.readArray@  r	  r7   Nc                 ó0   — |                      |¦  «         d S r1   )Ú
writeShortr½   s         r5   rµ   zShort.writeC  r  r7   c                 ó0   — |                      |¦  «         d S r1   )ÚwriteShortArrayrý   s        r5   r»   zShort.writeArrayF  r  r7   r1   rÿ   rž   r7   r5   r  r  :  r  r7   r  c                   ó,   — e Zd ZdZd„ Zd„ Zdd„Zd„ ZdS )ÚUShortr  c                 ó*   — |                      ¦   «         S r1   ©Ú
readUShortr±   s       r5   r’   zUShort.readM  ó   € Ø× Ò Ñ"Ô"Ð"r7   c                 ó,   — |                      |¦  «        S r1   )ÚreadUShortArrayrö   s        r5   r©   zUShort.readArrayP  s   € Ø×%Ò% eÑ,Ô,Ð,r7   Nc                 ó0   — |                      |¦  «         d S r1   ©ÚwriteUShortr½   s         r5   rµ   zUShort.writeS  ó   € Ø×Ò˜5Ñ!Ô!Ð!Ð!Ð!r7   c                 ó0   — |                      |¦  «         d S r1   )ÚwriteUShortArrayrý   s        r5   r»   zUShort.writeArrayV  s   € Ø×Ò Ñ'Ô'Ð'Ð'Ð'r7   r1   rÿ   rž   r7   r5   r$  r$  J  sZ   € € € € € Ø€Jð#ð #ð #ð-ð -ð -ð"ð "ð "ð "ð(ð (ð (ð (ð (r7   r$  c                   ó,   — e Zd ZdZd„ Zd„ Zdd„Zd„ ZdS )ÚInt8r   c                 ó*   — |                      ¦   «         S r1   )ÚreadInt8r±   s       r5   r’   z	Int8.read]  ró   r7   c                 ó,   — |                      |¦  «        S r1   )ÚreadInt8Arrayrö   s        r5   r©   zInt8.readArray`  r÷   r7   Nc                 ó0   — |                      |¦  «         d S r1   )Ú	writeInt8r½   s         r5   rµ   z
Int8.writec  rú   r7   c                 ó0   — |                      |¦  «         d S r1   )ÚwriteInt8Arrayrý   s        r5   r»   zInt8.writeArrayf  rþ   r7   r1   rÿ   rž   r7   r5   r2  r2  Z  r   r7   r2  c                   ó,   — e Zd ZdZd„ Zd„ Zdd„Zd„ ZdS )ÚUInt8r   c                 ó*   — |                      ¦   «         S r1   )Ú	readUInt8r±   s       r5   r’   z
UInt8.readm  r  r7   c                 ó,   — |                      |¦  «        S r1   )ÚreadUInt8Arrayrö   s        r5   r©   zUInt8.readArrayp  r	  r7   Nc                 ó0   — |                      |¦  «         d S r1   )Ú
writeUInt8r½   s         r5   rµ   zUInt8.writes  r  r7   c                 ó0   — |                      |¦  «         d S r1   )ÚwriteUInt8Arrayrý   s        r5   r»   zUInt8.writeArrayv  r  r7   r1   rÿ   rž   r7   r5   r<  r<  j  r  r7   r<  c                   ó    — e Zd ZdZd„ Zdd„ZdS )ÚUInt24é   c                 ó*   — |                      ¦   «         S r1   ©Ú
readUInt24r±   s       r5   r’   zUInt24.read}  r(  r7   Nc                 ó0   — |                      |¦  «         d S r1   ©ÚwriteUInt24r½   s         r5   rµ   zUInt24.write€  r.  r7   r1   ©rb   rÐ   rÑ   r«   r’   rµ   rž   r7   r5   rF  rF  z  s<   € € € € € Ø€Jð#ð #ð #ð"ð "ð "ð "ð "ð "r7   rF  c                   ó   — e Zd Zd„ ZdS )ÚComputedIntc                 ój   — |�0|                      |›d|›�¦  «         |                     ¦   «          d S d S )Nú=)Úcommentrß   rÅ   s         r5   rÇ   zComputedInt.xmlWrite…  sG   € ØÐØ×Ò¨¨¨¨u¨uÐ5Ñ6Ô6Ð6Ø×ÒÑÔÐÐÐð Ðr7   N©rb   rÐ   rÑ   rÇ   rž   r7   r5   rP  rP  „  s#   € € € € € ð ð  ð  ð  ð  r7   rP  c                   ó   — e Zd ZdS )rT   N©rb   rÐ   rÑ   rž   r7   r5   rT   rT   ‹  ó   € € € € € Ø€Dr7   rT   c                   ó   — e Zd ZdS )rU   NrV  rž   r7   r5   rU   rU   �  rW  r7   rU   c                   ó   — e Zd ZdS )rV   NrV  rž   r7   r5   rV   rV   “  rW  r7   rV   c                   ó    — e Zd ZdZd„ Zdd„ZdS )ÚTagrï   c                 ó*   — |                      ¦   «         S r1   )ÚreadTagr±   s       r5   r’   zTag.readš  s   € Ø�~Š~ÑÔÐr7   Nc                 ó0   — |                      |¦  «         d S r1   )ÚwriteTagr½   s         r5   rµ   z	Tag.write�  s   € Ø�Š˜ÑÔÐÐÐr7   r1   rN  rž   r7   r5   r[  r[  —  s<   € € € € € Ø€Jð ð  ð  ðð ð ð ð ð r7   r[  c                   ó0   — e Zd ZdZdZd„ Zd„ Zd„ Zdd„ZdS )	ÚGlyphIDr  ÚHc                 ój   — |                      |                     | j        | j        |¦  «        ¦  «        S r1   )ÚgetGlyphNameManyr©   Útypecoder«   rö   s        r5   r©   zGlyphID.readArray¥  s3   € Ø×$Ò$Ø×Ò˜Tœ]¨D¬O¸UÑCÔCñ
ô 
ð 	
r7   c                 óh   — |                      |                     | j        | j        ¦  «        ¦  «        S r1   )ÚgetGlyphNameÚ	readValuere  r«   r±   s       r5   r’   zGlyphID.readª  s*   € Ø× Ò  ×!1Ò!1°$´-ÀÄÑ!QÔ!QÑRÔRÐRr7   c                 ób   — |                      | j        |                     |¦  «        ¦  «         d S r1   )r»   re  ÚgetGlyphIDManyrý   s        r5   r»   zGlyphID.writeArray­  s.   € Ø×Ò˜$œ-¨×)<Ò)<¸VÑ)DÔ)DÑEÔEÐEÐEÐEr7   Nc                 ób   — |                      | j        |                     |¦  «        ¦  «         d S r1   )Ú
writeValuere  Ú
getGlyphIDr½   s         r5   rµ   zGlyphID.write°  s,   € Ø×Ò˜$œ-¨¯ª¸Ñ)?Ô)?Ñ@Ô@Ð@Ð@Ð@r7   r1   )	rb   rÐ   rÑ   r«   re  r©   r’   r»   rµ   rž   r7   r5   ra  ra  ¡  sk   € € € € € Ø€JØ€Hð
ð 
ð 
ð
Sð Sð SðFð Fð FðAð Að Að Að Að Ar7   ra  c                   ó   — e Zd ZdZdZdS )Ú	GlyphID32rï   ÚLN)rb   rÐ   rÑ   r«   re  rž   r7   r5   ro  ro  ´  s   € € € € € Ø€JØ€H€H€Hr7   ro  c                   ó   — e Zd Zd„ ZdS )ÚNameIDc                 ó¼  — |                      ||d|fgz   ¦  «         |r©|r§|                     d¦  «        }|r�|                     |¦  «        }|                     d¦  «         |r|                     |¦  «         nN|dk    r|                     d¦  «         n2|                     d¦  «         t
                               d|z  ¦  «         |                     ¦   «          d S )Nr¹   rP   ú  éÿÿ  ÚNonezmissing from name tablez"name id %d missing from name table)rÞ   r_   ÚgetDebugNamerµ   rS  ÚlogÚwarningrß   )r‹   rÆ   r”   r¹   rP   rÁ   Ú	nameTables          r5   rÇ   zNameID.xmlWriteº  sú   € Ø×Ò˜D %¨G°UÐ+;Ð*<Ñ"<Ñ=Ô=Ð=Øð 	N�Eð 	NØŸš Ñ(Ô(ˆIØð 	NØ ×-Ò-¨eÑ4Ô4�Ø—’ Ñ%Ô%Ð%Øð NØ×%Ò% dÑ+Ô+Ð+Ð+Ø˜f’_�_Ø×%Ò% fÑ-Ô-Ð-Ð-à×%Ò%Ð&?Ñ@Ô@Ð@Ý—K’KÐ DÀuÑ LÑMÔMÐMØ×ÒÑÔÐÐÐr7   NrT  rž   r7   r5   rr  rr  ¹  s#   € € € € € ðð ð ð ð r7   rr  c                   ó   — e Zd Zd„ ZdS )Ú	STATFlagsc                 óP  — |                      ||d|fgz   ¦  «         g }|dz  r|                     d¦  «         |dz  r|                     d¦  «         |r=|                     d¦  «         |                     d                     |¦  «        ¦  «         |                     ¦   «          d S )Nr¹   r   ÚOlderSiblingFontAttributer  ÚElidableAxisValueNamert  ú )rÞ   rd   rµ   rS  Újoinrß   ©r‹   rÆ   r”   r¹   rP   rÁ   Úflagss          r5   rÇ   zSTATFlags.xmlWriteÌ  s¸   € Ø×Ò˜D %¨G°UÐ+;Ð*<Ñ"<Ñ=Ô=Ð=ØˆØ�4‰<ð 	6Ø�LŠLÐ4Ñ5Ô5Ð5Ø�4‰<ð 	2Ø�LŠLÐ0Ñ1Ô1Ð1Øð 	/Ø�OŠO˜DÑ!Ô!Ð!Ø×Ò˜cŸhšh u™oœoÑ.Ô.Ð.Ø×ÒÑÔÐÐÐr7   NrT  rž   r7   r5   r|  r|  Ë  s#   € € € € € ð
ð 
ð 
ð 
ð 
r7   r|  c                   ó$   — e Zd Zed„ ¦   «         ZdS )Ú
FloatValuec                 ó    — t          | ¦  «        S r1   )Úfloatr×   s    r5   rÛ   zFloatValue.fromStringÚ  ó   € å�U‰|Œ|Ðr7   Nrì   rž   r7   r5   r…  r…  Ù  s-   € € € € € Øðð ñ „\ðð ð r7   r…  c                   ó    — e Zd ZdZd„ Zdd„ZdS )Ú
DeciPointsr  c                 ó0   — |                      ¦   «         dz  S ©Né
   r&  r±   s       r5   r’   zDeciPoints.readâ  s   € Ø× Ò Ñ"Ô" RÑ'Ð'r7   Nc                 óP   — |                      t          |dz  ¦  «        ¦  «         d S rŒ  )r-  Úroundr½   s         r5   rµ   zDeciPoints.writeå  s(   € Ø×Ò�5 ¨¡Ñ,Ô,Ñ-Ô-Ð-Ð-Ð-r7   r1   rN  rž   r7   r5   rŠ  rŠ  ß  s<   € € € € € Ø€Jð(ð (ð (ð.ð .ð .ð .ð .ð .r7   rŠ  c                   ó„   — e Zd ZeZeZeZeZd„ Zdd„Z	e
d„ ¦   «         Ze
d„ ¦   «         Ze
d„ ¦   «         Ze
d„ ¦   «         ZdS )	ÚBaseFixedValuec                 ób   — |                        t          || j        ¦  «        ¦   «         ¦  «        S r1   )ÚfromIntÚgetattrÚreaderMethodr±   s       r5   r’   zBaseFixedValue.readï  s*   € Ø�|Š|Ð>�G F¨DÔ,=Ñ>Ô>Ñ@Ô@ÑAÔAÐAr7   Nc                 óh   —  t          || j        ¦  «        |                      |¦  «        ¦  «         d S r1   )r”  ÚwriterMethodÚtoIntr½   s         r5   rµ   zBaseFixedValue.writeò  s1   € Ø*��˜Ô)Ñ*Ô*¨4¯:ª:°eÑ+<Ô+<Ñ=Ô=Ð=Ð=Ð=r7   c                 ó,   — t          || j        ¦  «        S r1   )Úfi2flÚprecisionBits©rl   r¹   s     r5   r“  zBaseFixedValue.fromIntõ  ó   € å�U˜CÔ-Ñ.Ô.Ð.r7   c                 ó,   — t          || j        ¦  «        S r1   )Úfl2fir›  rœ  s     r5   r˜  zBaseFixedValue.toIntù  r�  r7   c                 ó,   — t          || j        ¦  «        S r1   )Ústr2flr›  rœ  s     r5   rÛ   zBaseFixedValue.fromStringý  ó   € å�e˜SÔ.Ñ/Ô/Ð/r7   c                 ó,   — t          || j        ¦  «        S r1   )Úfl2strr›  rœ  s     r5   rØ   zBaseFixedValue.toString  r¢  r7   r1   )rb   rÐ   rÑ   r£   r«   r›  r•  r—  r’   rµ   Úclassmethodr“  r˜  rÛ   rØ   rž   r7   r5   r‘  r‘  é  sº   € € € € € Ø€JØ"€MØ!€LØ!€LðBð Bð Bð>ð >ð >ð >ð ð/ð /ñ „[ð/ð ð/ð /ñ „[ð/ð ð0ð 0ñ „[ð0ð ð0ð 0ñ „[ð0ð 0ð 0r7   r‘  c                   ó   — e Zd ZdZdZdZdZdS )ÚFixedrï   é   rò   rù   N©rb   rÐ   rÑ   r«   r›  r•  r—  rž   r7   r5   r§  r§    s"   € € € € € Ø€JØ€MØ€LØ€L€L€Lr7   r§  c                   ó   — e Zd ZdZdZdZdZdS )ÚF2Dot14r  é   r  r   Nr©  rž   r7   r5   r«  r«    s"   € € € € € Ø€JØ€MØ€LØ€L€L€Lr7   r«  c                   ó|   ‡ — e Zd ZdZdZeˆ fd„¦   «         Zeˆ fd„¦   «         Zed„ ¦   «         Zed„ ¦   «         Z	ˆ xZ
S )ÚAngleg        g     €†?c                 ó\   •— t          ¦   «                              |¦  «        | j        z   dz  S ©Né´   )Úsuperr“  Úbias©rl   r¹   Ú	__class__s     €r5   r“  zAngle.fromInt  s%   ø€ å‘”—’ Ñ&Ô&¨¬Ñ1°SÑ8Ð8r7   c                 ó\   •— t          ¦   «                              |dz  | j        z
  ¦  «        S r°  )r²  r˜  r³  r´  s     €r5   r˜  zAngle.toInt  s$   ø€ å‰wŒw�}Š}˜e c™k¨S¬XÑ5Ñ6Ô6Ð6r7   c                 óZ   — t          t          |¦  «        | j        z  ¦  «        | j        z  S r1   )r   r‡  Úfactorrœ  s     r5   rÛ   zAngle.fromString"  s&   € õ •u˜U‘|”| c¤jÑ0Ñ1Ô1°C´JÑ>Ð>r7   c                 ó,   — t          || j        ¦  «        S r1   )r
   r¸  rœ  s     r5   rØ   zAngle.toString'  s   € å*¨5°#´*Ñ=Ô=Ð=r7   )rb   rÐ   rÑ   r³  r¸  r¥  r“  r˜  rÛ   rØ   Ú__classcell__©rµ  s   @r5   r®  r®    s©   ø€ € € € € ð €DØ"€Fàð9ð 9ð 9ð 9ñ „[ð9ð ð7ð 7ð 7ð 7ñ „[ð7ð ð?ð ?ñ „[ð?ð ð>ð >ñ „[ð>ð >ð >ð >ð >r7   r®  c                   ó   — e Zd ZdZdS )ÚBiasedAngleg      ð?N)rb   rÐ   rÑ   r³  rž   r7   r5   r½  r½  ,  s   € € € € € ð €D€D€Dr7   r½  c                   ób   — e Zd ZdZd„ Zdd„Zed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Z	dS )	ÚVersionrï   c                 ó.   — |                      ¦   «         }|S r1   rñ   )r‹   r›   r”   r¦   r¹   s        r5   r’   zVersion.read5  s   € Ø—’Ñ!Ô!ˆØˆr7   Nc                 óN   — t          |¦  «        }|                     |¦  «         d S r1   )Úfi2verù   r½   s         r5   rµ   zVersion.write9  s'   € Ý�e‘”ˆØ×Ò˜ÑÔÐÐÐr7   c                 ó    — t          | ¦  «        S r1   )Úve2fir×   s    r5   rÛ   zVersion.fromString=  rˆ  r7   c                 ó   — d| z  S )Nú0x%08xrž   r×   s    r5   rØ   zVersion.toStringA  r  r7   c                 ó"   — t          | d¦  «        S )Nr¨  )rŸ  )Úvs    r5   Ú	fromFloatzVersion.fromFloatE  s   € å�Q˜‰|Œ|Ðr7   r1   )
rb   rÐ   rÑ   r«   r’   rµ   rá   rÛ   rØ   rÉ  rž   r7   r5   r¿  r¿  2  s�   € € € € € Ø€Jðð ð ð ð  ð  ð  ð ðð ñ „\ðð ð ð  ñ „\ð ð ðð ñ „\ðð ð r7   r¿  c                   ó$   — e Zd ZdZdZd„ Zdd„ZdS )ÚChar64z›An ASCII string with up to 64 characters.

    Unused character positions are filled with 0x00 bytes.
    Used in Apple AAT fonts in the `gcid` table.
    é@   c                 ó  — |                      | j        ¦  «        }|                     d¦  «        }|dk    r
|d |…         }t          |dd¬¦  «        }|t          |dd¬¦  «        k    rt                               d|z  ¦  «         |S )Nó    r   ÚasciiÚreplace©ÚencodingÚerrorsÚignorez%replaced non-ASCII characters in "%s")ÚreadDatar«   Úfindr   rx  ry  )r‹   r›   r”   r¦   ÚdataÚzeroPosÚss          r5   r’   zChar64.readS  s‡   € Ø�Š˜tœÑ/Ô/ˆØ—)’)˜EÑ"Ô"ˆØ�aŠ<ˆ<Ø˜˜˜”>ˆDÝ�$ °Ð;Ñ;Ô;ˆØ•�d W°XÐ>Ñ>Ô>Ò>Ð>Ý�KŠKÐ?À!ÑCÑDÔDÐDØˆr7   Nc                 óf  — t          |dd¬¦  «        }|t          |dd¬¦  «        k    rt                               d|z  ¦  «         t          |¦  «        | j        k    r$t                               d|| j        fz  ¦  «         |d| j        z  z   d | j        …         }|                     |¦  «         d S )NrÏ  rÐ  rÑ  rÔ  z&replacing non-ASCII characters in "%s"z$truncating overlong "%s" to %d bytesrÎ  )r   rx  ry  Úlenr«   Ú	writeData)r‹   r¸   r”   r¦   r¹   r¾   r×  s          r5   rµ   zChar64.write]  sº   € Ý�u w°yÐAÑAÔAˆØ•7˜5¨7¸8ÐDÑDÔDÒDÐDÝ�KŠKÐ@À5ÑHÑIÔIÐIÝˆt‰9Œ9�t”Ò&Ð&Ý�KŠKØ6¸%ÀÄÐ9QÑQñô ð ð �u˜tœÑ.Ñ.Ð0A°$´/Ð0AÔBˆØ×Ò˜ÑÔÐÐÐr7   r1   )rb   rÐ   rÑ   rÒ   r«   r’   rµ   rž   r7   r5   rË  rË  J  sH   € € € € € ðð ð €Jðð ð ð	ð 	ð 	ð 	ð 	ð 	r7   rË  c                   ó4   — e Zd Zd„ Zd„ Zdd„Zd„ Zd„ Zd„ ZdS )	rZ   c                 óD   — | j         o| j                              |¦  «        S r1   )r^   r¢   r­   s     r5   r¢   zStruct.getRecordSizej  s   € ØŒÐH 4¤?×#@Ò#@ÀÑ#HÔ#HÐHr7   c                 óZ   — |                       ¦   «         }|                     ||¦  «         |S r1   )r^   Ú	decompile)r‹   r›   r”   r¦   Útables        r5   r’   zStruct.readm  s*   € Ø—’Ñ!Ô!ˆØ�Š˜ Ñ%Ô%Ð%Øˆr7   Nc                 ó2   — |                      ||¦  «         d S r1   ©r†   r½   s         r5   rµ   zStruct.writer  s   € Ø�Š�f˜dÑ#Ô#Ð#Ð#Ð#r7   c                 ó¤   — |€4|r0|                      ||dgz   ¦  «         |                     ¦   «          d S d S |                     ||||¬¦  «         d S )N)Úemptyr   )rP   )rÞ   rß   ÚtoXMLrÅ   s         r5   rÇ   zStruct.xmlWriteu  sk   € Øˆ=Øð ð ×#Ò# D¨%°<°.Ñ*@ÑAÔAÐAØ×!Ò!Ñ#Ô#Ð#Ð#Ð#à�à�KŠK˜	 4¨°TˆKÑ:Ô:Ð:Ð:Ð:r7   c                 ó*  — d|v rt          |d         ¦  «        rd S |                      ¦   «         }|                     d¦  «        }|�t          |¦  «        |_        t          |d¦  «         }|r’d}|                     ¦   «         D ]{}|j        rrd}t          |d¦  «        si |_        |j        }	|j	        |	vsJ |j	        |	f¦   «         ‚t          ||j	        d ¦  «         t          |j        |j	        ¦  «        |	|j	        <   Œ||D ]6}
t          |
t          ¦  «        r|
\  }}}|                     ||||¦  «         Œ6Œ7|                     t#          |dd ¦  «        ¬¦  «         |r3|r1|                     ¦   «         D ]}|j        r|j        }	|	|j	        = |	s|`Œ|S )Nrå  ÚFormatÚpostReadFTÚ_propagator)Ú
propagator)r   r^   r_   rÌ   rè  r¬   ÚgetConvertersr‰   rê  rP   Úsetattrr   Ú__dict__r2   r3   ÚfromXMLÚpopulateDefaultsr”  )r‹   rÁ   rÂ   r”   rá  rè  Ú
noPostReadÚcleanPropagationrk   rë  ÚelementrP   s               r5   rÃ   zStruct.xmlRead‚  sã  € Ø�eÐÐ¥¨¨w¬Ñ 8Ô 8ÐØ�4Ø—’Ñ!Ô!ˆØ—’˜8Ñ$Ô$ˆØÐÝ˜v™;œ;ˆEŒLå  ¨
Ñ3Ô3Ð3ˆ
Øð 	Và$ÐØ×+Ò+Ñ-Ô-ð Vð V�ØÔ$ð VØ'+Ð$Ý" 4¨Ñ7Ô7ð .Ø+-˜Ô(Ø!%Ô!1�JØœ9¨JÐ6Ð6Ð6¸¼ÀJÐ8OÑ6Ô6Ð6Ý˜E 4¤9¨dÑ3Ô3Ð3Ý,:¸5¼>È4Ì9Ñ,UÔ,U�J˜tœyÑ)øàð 	ð 	ˆGÝ˜'¥5Ñ)Ô)ð Ø'.Ñ$��e˜WØ—’˜d E¨7°DÑ9Ô9Ð9Ð9àà×Ò­'°$¸ÀtÑ*LÔ*LÐÑMÔMÐMàð 	1Øð 1Ø!×/Ò/Ñ1Ô1ð 1ð 1�DØÔ(ð 1Ø%)Ô%5˜
Ø& t¤yÐ1Ø)ð 1Ø $Ð 0øàˆr7   c                 ó0   — dt          | j        ¦  «        z   S )Nz
Struct of )Úreprr^   ©r‹   s    r5   Ú__repr__zStruct.__repr__¬  s   € Ø�d 4¤?Ñ3Ô3Ñ3Ð3r7   r1   )	rb   rÐ   rÑ   r¢   r’   rµ   rÇ   rÃ   r÷  rž   r7   r5   rZ   rZ   i  sw   € € € € € ðIð Ið Iðð ð ð
$ð $ð $ð $ð;ð ;ð ;ð(ð (ð (ðT4ð 4ð 4ð 4ð 4r7   rZ   c                   ó   — e Zd Zd„ Zdd„ZdS )rX   c                 ó¢   — |j         }|                      ¦   «         }|                     ||¦  «         |                     ||j        z   ¦  «         |S r1   )r•   r^   rà  r‘   r=   )r‹   r›   r”   r¦   r•   rá  s         r5   r’   zStructWithLength.read±  sK   € ØŒjˆØ—’Ñ!Ô!ˆØ�Š˜ Ñ%Ô%Ð%Ø�Š�C˜%Ô,Ñ,Ñ-Ô-Ð-Øˆr7   Nc                 óR  — t          |                     ¦   «         ¦  «        D ]\  }}|j        dk    r nŒt          |j        ¦  «        |z   }t          |t          ¦  «        r|dz  }ddddœ|j                 }	|                     ¦   «         }
|	|_	        | 
                    ||¦  «         |                     ¦   «         |
z
  }|                     ¦   «         }|                     ||||¦  «         |j        |         dd |j        …         k    sJ ‚|                     ¦   «         |j        |<   d S )Nr=   r   éÞ   é­Þ  ì   ï>[= )r   r  rï   ó   Þ­¾ï)r´   rì  rP   rÛ  Úitemsr2   r   r«   ÚgetDataLengthr=   r†   ÚgetSubWriterrµ   Ú
getAllData)r‹   r¸   r”   r¦   r¹   r¾   Ú	convIndexrk   ÚlengthIndexÚdeadbeefÚbeforeÚlengthÚlengthWriters                r5   rµ   zStructWithLength.write¸  s7  € Ý(¨×)<Ò)<Ñ)>Ô)>Ñ?Ô?ð 	ð 	‰OˆI�tØŒy˜NÒ*Ð*Ø�ð +å˜&œ,Ñ'Ô'¨)Ñ3ˆÝ�eÕ5Ñ6Ô6ð 	Ø˜1ÑˆKØ ¨:Ð6Ð6°t´ÔGˆà×%Ò%Ñ'Ô'ˆØ%ˆÔØ�Š�f˜dÑ#Ô#Ð#Ø×%Ò%Ñ'Ô'¨&Ñ0ˆØ×*Ò*Ñ,Ô,ˆØ�
Š
�<  y°&Ñ9Ô9Ð9ØŒ|˜KÔ(Ð,?Ð@QÀ$Ä/Ð@QÔ,RÒRÐRÐRÐRØ$0×$;Ò$;Ñ$=Ô$=ˆŒ�[Ñ!Ð!Ð!r7   r1   ©rb   rÐ   rÑ   r’   rµ   rž   r7   r5   rX   rX   °  s7   € € € € € ðð ð ð>ð >ð >ð >ð >ð >r7   rX   c                   ó,   — e Zd ZdZd„ Zd„ Zd„ Zdd„ZdS )ra   r  c                 ó*   — |                      ¦   «         S r1   r&  r­   s     r5   Ú
readOffsetzTable.readOffsetÎ  r(  r7   c                 ó0   — |                      d¦  «         d S rê   r,  ©r‹   r¸   s     r5   ÚwriteNullOffsetzTable.writeNullOffsetÑ  ó   € Ø×Ò˜1ÑÔÐÐÐr7   c                 óê   — |                       |¦  «        }|dk    rd S |                      ¦   «         }|                     |¦  «        }|j        r||_        ||_        n|                     ||¦  «         |S rê   )r  r^   ÚgetSubReaderr¡   r›   r”   rà  )r‹   r›   r”   r¦   Úoffsetrá  s         r5   r’   z
Table.readÔ  sv   € Ø—’ Ñ(Ô(ˆØ�QŠ;ˆ;Ø�4Ø—’Ñ!Ô!ˆØ×$Ò$ VÑ,Ô,ˆØŒ9ð 	*Ø!ˆEŒLØˆEŒJˆJà�OŠO˜F DÑ)Ô)Ð)Øˆr7   Nc                 óî   — |€|                       |¦  «         d S |                     ¦   «         }| j        |_        |�||_        |                     || j        ¬¦  «         |                     ||¦  «         d S )N©Ú
offsetSize)r  r  rP   r¾   ÚwriteSubTabler«   r†   )r‹   r¸   r”   r¦   r¹   r¾   Ú	subWriters          r5   rµ   zTable.writeá  s~   € Øˆ=Ø× Ò  Ñ(Ô(Ð(Ð(Ð(à×+Ò+Ñ-Ô-ˆIØ!œYˆIŒNØÐ&Ø(3�	Ô%Ø× Ò  °t´Ð ÑGÔGÐGØ�MŠM˜) TÑ*Ô*Ð*Ð*Ð*r7   r1   )rb   rÐ   rÑ   r«   r  r  r’   rµ   rž   r7   r5   ra   ra   Ë  sZ   € € € € € Ø€Jð#ð #ð #ðð ð ðð ð ð	+ð 	+ð 	+ð 	+ð 	+ð 	+r7   ra   c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚLTablerï   c                 ó*   — |                      ¦   «         S r1   r  r­   s     r5   r  zLTable.readOffsetð  r  r7   c                 ó0   — |                      d¦  «         d S rê   r  r  s     r5   r  zLTable.writeNullOffsetó  s   € Ø×Ò˜!ÑÔÐÐÐr7   N©rb   rÐ   rÑ   r«   r  r  rž   r7   r5   r  r  í  s7   € € € € € Ø€Jð"ð "ð "ðð ð ð ð r7   r  c                   ó   — e Zd ZdZd„ Zd„ ZdS )ÚTable24rG  c                 ó*   — |                      ¦   «         S r1   rI  r­   s     r5   r  zTable24.readOffsetû  r(  r7   c                 ó0   — |                      d¦  «         d S rê   rL  r  s     r5   r  zTable24.writeNullOffsetþ  r  r7   Nr  rž   r7   r5   r  r  ø  s7   € € € € € Ø€Jð#ð #ð #ðð ð ð ð r7   r  c                   ó*   ‡ — e Zd Zˆ fd„Zdˆ fd„	Zˆ xZS )rE   c                 ó   •— |                       |                     ¦   «         ¦  «        dk    r@|                     d¦  «        }t          d„ t	          |dd¦  «        D ¦   «         ¦  «        |d<   t          ¦   «                              |||¦  «        S )Nr   ÚFeatureListc              3   ó$   K  — | ]}|j         V — Œd S r1   ©rw   ©rŸ   Úrecords     r5   r    z)FeatureVariations.read.<locals>.<genexpr>	  ó9   è è € ð *ð *àð Ô!ð*ð *ð *ð *ð *ð *r7   ÚFeatureRecordrž   ÚFeatureTags)r  rš   r_   r3   r”  r²  r’   )r‹   r›   r”   r¦   ÚfeatureListrµ  s        €r5   r’   zFeatureVariations.read  s�   ø€ Ø�?Š?˜6Ÿ;š;™=œ=Ñ)Ô)¨QÒ.Ð.ð $Ÿ-š-¨Ñ6Ô6ˆKÝ$)ð *ð *å% k°?ÀBÑGÔGð*ñ *ô *ñ %ô %ˆF�=Ñ!õ ‰wŒw�|Š|˜F D¨)Ñ4Ô4Ð4r7   Nc                 óÖ   •— |�@|                      d¦  «        }t          d„ t          |dd¦  «        D ¦   «         ¦  «        |d<   t          ¦   «                              |||||¦  «         d S )Nr$  c              3   ó$   K  — | ]}|j         V — Œd S r1   r&  r'  s     r5   r    z*FeatureVariations.write.<locals>.<genexpr>  r)  r7   r*  rž   r+  )r_   r3   r”  r²  rµ   )r‹   r¸   r”   r¦   r¹   r¾   r,  rµ  s          €r5   rµ   zFeatureVariations.write  s|   ø€ ØÐØ#Ÿ-š-¨Ñ6Ô6ˆKÝ$)ð *ð *å% k°?ÀBÑGÔGð*ñ *ô *ñ %ô %ˆF�=Ñ!õ 	‰Œ�Š�f˜d I¨u°kÑBÔBÐBÐBÐBr7   r1   ©rb   rÐ   rÑ   r’   rµ   rº  r»  s   @r5   rE   rE     s`   ø€ € € € € ð
5ð 
5ð 
5ð 
5ð 
5ðCð Cð Cð Cð Cð Cð Cð Cð Cð Cr7   rE   c                   ó.   ‡ — e Zd ZdZˆ fd„Zdˆ fd„	Zˆ xZS )rW   zHResolve a FeatureTableSubstitutionRecord's tag through its FeatureIndex.c                 ó  •— d|v r[|                       |                     ¦   «         ¦  «        dk    r0|d         }|d         }|t          |¦  «        k     r||         nd |d<   t          ¦   «                              |||¦  «        S )Nr+  r   ÚFeatureIndexrw   )r  rš   rÛ  r²  r’   )r‹   r›   r”   r¦   ÚfeatureTagsÚfeatureIndexrµ  s         €r5   r’   zAlternateFeature.read  sˆ   ø€ Ø˜FÐ"Ð" t§¢°v·{²{±}´}Ñ'EÔ'EÈÒ'JÐ'JØ  Ô/ˆKØ$ ^Ô4ˆLð .:½CÀÑ<LÔ<LÒ-LÐ-L�˜LÔ)Ð)ÐRVð �<Ñ õ ‰wŒw�|Š|˜F D¨)Ñ4Ô4Ð4r7   Nc                 ó¼   •— |�3t          |dd ¦  «        �"d|j        pi v r|d         |d                  |d<   t          ¦   «                              |||||¦  «         d S )NrD   r+  r2  rw   )r”  Ú
localStater²  rµ   )r‹   r¸   r”   r¦   r¹   r¾   rµ  s         €r5   rµ   zAlternateFeature.write&  sk   ø€ àÐÝ˜˜°Ñ5Ô5ÐAØ &Ô"3Ð"9°rÐ:Ð:à#)¨-Ô#8¸À>Ô9RÔ#SˆF�<Ñ Ý‰Œ�Š�f˜d I¨u°kÑBÔBÐBÐBÐBr7   r1   )rb   rÐ   rÑ   rÒ   r’   rµ   rº  r»  s   @r5   rW   rW     sf   ø€ € € € € ØRÐRð5ð 5ð 5ð 5ð 5ðCð Cð Cð Cð Cð Cð Cð Cð Cð Cr7   rW   c                   ó$   ‡ — e Zd Zd„ Zˆ fd„Zˆ xZS )rC   c                 óv   — | j         |         |         }|                      | j        | j        | j        |¦  «        S r1   ©r   rµ  rP   r\   r]   ©r‹   Ú	tableTypeÚ
lookupTyper^   s       r5   ÚgetConverterzSubStruct.getConverter4  ó2   € ØÔ% iÔ0°Ô<ˆ
Ø�~Š~˜dœi¨¬°d´hÀ
ÑKÔKÐKr7   c                 ó`   •— t          t          | ¦  «                             |||d |¦  «         d S r1   )r²  rC   rÇ   ©r‹   rÆ   r”   r¹   rP   rÁ   rµ  s         €r5   rÇ   zSubStruct.xmlWrite8  s/   ø€ Ý�i˜ÑÔ×'Ò'¨	°4¸ÀÀeÑLÔLÐLÐLÐLr7   ©rb   rÐ   rÑ   r=  rÇ   rº  r»  s   @r5   rC   rC   3  sS   ø€ € € € € ðLð Lð LðMð Mð Mð Mð Mð Mð Mð Mð Mr7   rC   c                   ó$   ‡ — e Zd Zd„ Zˆ fd„Zˆ xZS )rA   c                 óv   — | j         |         |         }|                      | j        | j        | j        |¦  «        S r1   r9  r:  s       r5   r=  zSubTable.getConverter=  r>  r7   c                 ó`   •— t          t          | ¦  «                             |||d |¦  «         d S r1   )r²  rA   rÇ   r@  s         €r5   rÇ   zSubTable.xmlWriteA  s/   ø€ Ý�h˜ÑÔ×&Ò& y°$¸¸tÀUÑKÔKÐKÐKÐKr7   rA  r»  s   @r5   rA   rA   <  sS   ø€ € € € € ðLð Lð LðLð Lð Lð Lð Lð Lð Lð Lð Lr7   rA   c                   ó   — e Zd Zdd„ZdS )rB   Nc                 óR   — d|_         t                               | |||||¦  «         d S )NT)Ú	Extensionra   rµ   r½   s         r5   rµ   zExtSubTable.writeF  s,   € ØˆÔÝ�Š�D˜& $¨	°5¸+ÑFÔFÐFÐFÐFr7   r1   )rb   rÐ   rÑ   rµ   rž   r7   r5   rB   rB   E  s.   € € € € € ðGð Gð Gð Gð Gð Gr7   rB   c                   ó   — e Zd Zd„ ZdS )rD   c                 ó�   — | j                              || j        ¦  «        }|                      | j        | j        | j        |¦  «        S r1   )rO   r_   rc   rµ  rP   r\   r]   )r‹   Ú
featureTagr^   s      r5   r=  zFeatureParams.getConverterL  s;   € ØÔ+×/Ò/°
¸DÔ<UÑVÔVˆ
Ø�~Š~˜dœi¨¬°d´hÀ
ÑKÔKÐKr7   N)rb   rÐ   rÑ   r=  rž   r7   r5   rD   rD   K  s(   € € € € € ðLð Lð Lð Lð Lr7   rD   c                   ó.   — e Zd ZdZdddœd„Zd„ Zdd„ZdS )	r:   r  Nrp   rK   c                óv   — t                                | |||||¬¦  «         d|d         dk    rdndz   | _        d S )NrK   r:   éÿÿÿÿÚ2Ú1)ro   rŒ   ÚwhichrŠ   s         r5   rŒ   zValueFormat.__init__T  sN   € Ý×ÒØ�$˜  Z¸[ð 	ñ 	
ô 	
ð 	
ð #¨T°"¬X¸ª_¨_ c cÀ#ÑFˆŒ
ˆ
ˆ
r7   c                 ó\   — |                      ¦   «         }t          |¦  «        || j        <   |S r1   )r'  r   rP  ©r‹   r›   r”   r¦   Úformats        r5   r’   zValueFormat.readZ  s,   € Ø×"Ò"Ñ$Ô$ˆÝ/°Ñ7Ô7ˆˆtŒzÑØˆr7   c                 ó^   — |                      |¦  «         t          |¦  «        || j        <   d S r1   )r-  r   rP  )r‹   r¸   r”   r¦   rS  r¾   s         r5   rµ   zValueFormat.write_  s0   € Ø×Ò˜6Ñ"Ô"Ð"Ý/°Ñ7Ô7ˆˆtŒzÑÐÐr7   r1   )rb   rÐ   rÑ   r«   rŒ   r’   rµ   rž   r7   r5   r:   r:   Q  sb   € € € € € Ø€JðGÈ"ð Gð Gð Gð Gð Gðð ð ð
8ð 8ð 8ð 8ð 8ð 8r7   r:   c                   ó.   — e Zd Zd„ Zd„ Zdd„Zd„ Zd„ ZdS )ÚValueRecordc                 ó<   — dt          || j                 ¦  «        z  S ©Nr  )rÛ  rP  r­   s     r5   r¢   zValueRecord.getRecordSizee  s   € Ø•3�v˜dœjÔ)Ñ*Ô*Ñ*Ð*r7   c                 óD   — || j                                       ||¦  «        S r1   )rP  ÚreadValueRecordr±   s       r5   r’   zValueRecord.readh  s   € Ø�d”jÔ!×1Ò1°&¸$Ñ?Ô?Ð?r7   Nc                 óJ   — || j                                       |||¦  «         d S r1   )rP  ÚwriteValueRecordr½   s         r5   rµ   zValueRecord.writek  s'   € ØˆtŒzÔ×+Ò+¨F°D¸%Ñ@Ô@Ð@Ð@Ð@r7   c                 óH   — |€d S |                      ||| j        |¦  «         d S r1   )ræ  rP   rÅ   s         r5   rÇ   zValueRecord.xmlWriten  s,   € Øˆ=ØˆDà�KŠK˜	 4¨¬°EÑ:Ô:Ð:Ð:Ð:r7   c                 óV   — ddl m}  |¦   «         }|                     d |||¦  «         |S )Nr   )rV  )ÚotBaserV  rï  )r‹   rÁ   rÂ   r”   rV  r¹   s         r5   rÃ   zValueRecord.xmlReadt  s<   € Ø'Ð'Ð'Ð'Ð'Ð'à�‘”ˆØ�Š�d˜E 7¨DÑ1Ô1Ð1Øˆr7   r1   )rb   rÐ   rÑ   r¢   r’   rµ   rÇ   rÃ   rž   r7   r5   rV  rV  d  sk   € € € € € ð+ð +ð +ð@ð @ð @ðAð Að Að Að;ð ;ð ;ðð ð ð ð r7   rV  c                   óœ   — e Zd ZdZddœd„Zd„ Zdd„Zed„ ¦   «         Zd	„ Z	d
„ Z
d„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )Ú	AATLookupr�  rp   rK   c                óò   — t                                | |||||¬¦  «         t          | j        t          ¦  «        r|                      dd d ¬¦  «        | _        d S t          dd d | j        ¬¦  «        | _        d S )NrK   ÚValue)rP   r\   r]   )rP   r\   r]   r^   )ro   rŒ   Ú
issubclassr^   rÕ   Ú	converterra   rŠ   s         r5   rŒ   zAATLookup.__init__  s„   € Ý×ÒØ�$˜  Z¸[ð 	ñ 	
ô 	
ð 	
õ �d”o¥{Ñ3Ô3ð 	Ø!Ÿ_š_°'À$ÈD˜_ÑQÔQˆDŒNˆNˆNå"Ø T¨tÀÄðñ ô ˆDŒNˆNˆNr7   c                 ó\  — |                      ¦   «         }|dk    r|                      ||¦  «        S |dk    r|                      ||¦  «        S |dk    r|                      ||¦  «        S |dk    r|                      ||¦  «        S |dk    r|                      ||¦  «        S J d|z  ¦   «         ‚)Nr   r  rï   é   rŽ   Fzunsupported lookup format: %d)r'  ÚreadFormat0ÚreadFormat2ÚreadFormat4ÚreadFormat6ÚreadFormat8rR  s        r5   r’   zAATLookup.readŠ  sÁ   € Ø×"Ò"Ñ$Ô$ˆØ�QŠ;ˆ;Ø×#Ò# F¨DÑ1Ô1Ð1Ø�qŠ[ˆ[Ø×#Ò# F¨DÑ1Ô1Ð1Ø�qŠ[ˆ[Ø×#Ò# F¨DÑ1Ô1Ð1Ø�qŠ[ˆ[Ø×#Ò# F¨DÑ1Ô1Ð1Ø�qŠ[ˆ[Ø×#Ò# F¨DÑ1Ô1Ð1àBÐ9¸FÑBÑBÔB�5r7   Nc                 ó.  ‡— t          t          ˆfd„|                     ¦   «         D ¦   «         ¦  «        ¦  «        }t          t          t          d |                      |‰|¦  «        |                      |‰|¦  «        |                      |‰|¦  «        |                      |‰|¦  «        g¦  «        ¦  «        ¦  «        }|d         \  }}	}
|                     ¦   «         } |
¦   «          |                     ¦   «         |z
  }||k    sJ d|	||fz  ¦   «         ‚d S )Nc                 óD   •— g | ]\  }}‰                      |¦  «        |f‘ŒS rž   ©rm  )rŸ   ÚglyphÚvalr”   s      €r5   ú
<listcomp>z#AATLookup.write.<locals>.<listcomp>›  s.   ø€ ÐRÐRÐR±j°e¸S�T—_’_ UÑ+Ô+¨SÐ1ÐRÐRÐRr7   r   z;AATLookup format %d claimed to write %d bytes, but wrote %d)	ÚlistÚsortedrÿ  ÚfilterÚbuildFormat0ÚbuildFormat2ÚbuildFormat6ÚbuildFormat8r   )r‹   r¸   r”   r¦   r¹   r¾   r`   ÚformatsÚdataSizeÚlookupFormatÚwriteMethodr•   Ú
actualSizes     `          r5   rµ   zAATLookup.write™  s;  ø€ ÝÝÐRÐRÐRÐRÀEÇKÂKÁMÄMÐRÑRÔRÑSÔSñ
ô 
ˆõ ÝÝØà×)Ò)¨&°$¸Ñ?Ô?Ø×)Ò)¨&°$¸Ñ?Ô?Ø×)Ò)¨&°$¸Ñ?Ô?Ø×)Ò)¨&°$¸Ñ?Ô?ð	ñô ñ
ô 
ñ
ô 
ˆð /6°a¬jÑ+ˆ�, Ø×"Ò"Ñ$Ô$ˆØˆ‰ŒˆØ×)Ò)Ñ+Ô+¨cÑ1ˆ
à˜(Ò"Ð"Ð"ØHØØØðL
ñ 
ñ #Ô"Ð"Ð"Ð"r7   c                 ó  — |                       |¦  «         |                       |¦  «         t          ||¬¦  «        \  }}}|                       |¦  «         |                       |¦  «         |                       |¦  «         d S )N)ÚnÚitemSize)r-  r   )r¸   ÚnumUnitsÚunitSizeÚsearchRangeÚentrySelectorÚ
rangeShifts         r5   ÚwriteBinSearchHeaderzAATLookup.writeBinSearchHeader¹  sŽ   € à×Ò˜8Ñ$Ô$Ð$Ø×Ò˜8Ñ$Ô$Ð$Ý1?Ø ð2
ñ 2
ô 2
Ñ.ˆ�] Jð 	×Ò˜;Ñ'Ô'Ð'Ø×Ò˜=Ñ)Ô)Ð)Ø×Ò˜:Ñ&Ô&Ð&Ð&Ð&r7   c                 ó°   ‡ ‡‡‡— t          ‰                     ¦   «         ¦  «        }t          ‰¦  «        |k    rd S ‰ j        j        }d||z  z   dˆˆ ˆˆfd„fS )Nr  r   c                  ó2   •— ‰                      ‰‰ ‰¦  «        S r1   )ÚwriteFormat0©r”   r‹   r`   r¸   s   €€€€r5   r6   z(AATLookup.buildFormat0.<locals>.<lambda>Ì  ó   ø€ �D×%Ò% f¨d°FÑ;Ô;€ r7   )rÛ  ÚgetGlyphOrderre  r«   )r‹   r¸   r”   r`   Ú	numGlyphsÚ	valueSizes   ````  r5   rv  zAATLookup.buildFormat0Ä  sn   øøøø€ Ý˜×*Ò*Ñ,Ô,Ñ-Ô-ˆ	Ýˆv‰;Œ;˜)Ò#Ð#Ø�4Ø”NÔ-ˆ	à�	˜IÑ%Ñ%ØØ;Ð;Ð;Ð;Ð;Ð;Ð;ð
ð 	
r7   c                 ó~   — |                      d¦  «         |D ]$\  }}| j                             ||d |d ¬¦  «         Œ%d S )Nr   ©r¦   r¹   r¾   )r-  re  rµ   )r‹   r¸   r”   r`   ÚglyphID_r¹   s         r5   rŠ  zAATLookup.writeFormat0Ï  sb   € Ø×Ò˜1ÑÔÐØ%ð 	ð 	‰OˆH�eØŒN× Ò Ø˜¨°EÀtð !ñ ô ð ð ð	ð 	r7   c                 óP  ‡ ‡‡‡— |d         \  }}|}g Š|dd …         D ]5\  }}||dz   k    s||k    r‰                      |||f¦  «         |x}}|}Œ3|}Œ6‰                      |||f¦  «         ‰ j        j        }	t          ‰¦  «        dz   |	dz   }}
d‰ j        z   |
|z  z   dˆˆˆ ˆfd„fS )Nr   r   rï   r  c                  ó2   •— ‰                      ‰‰ ‰¦  «        S r1   )ÚwriteFormat2)r”   Úsegmentsr‹   r¸   s   €€€€r5   r6   z(AATLookup.buildFormat2.<locals>.<lambda>ç  s   ø€ �D×%Ò% f¨d°HÑ=Ô=€ r7   )rd   re  r«   rÛ  ÚBIN_SEARCH_HEADER_SIZE)r‹   r¸   r”   r`   ÚsegStartÚsegValueÚsegEndÚglyphIDÚcurValuer�  r‚  rƒ  r–  s   ```         @r5   rw  zAATLookup.buildFormat2Ö  sö   øøøø€ Ø# AœYÑˆ�(ØˆØˆØ!'¨¨¨¤ð 	!ð 	!ÑˆG�XØ˜& 1™*Ò$Ð$¨°HÒ(<Ð(<Ø—’ ¨6°8Ð <Ñ=Ô=Ð=Ø$+Ð+�˜6Ø#��à ��Ø�Š˜ 6¨8Ð4Ñ5Ô5Ð5Ø”NÔ-ˆ	Ý  ™]œ]¨QÑ.°	¸A±�(ˆà�Ô+Ñ+¨h¸Ñ.AÑAØØ=Ð=Ð=Ð=Ð=Ð=Ð=ð
ð 	
r7   c                 óÆ  — |                      d¦  «         | j        j        }t          |¦  «        |dz   }}|                      |||¦  «         |D ]O\  }}}	|                      |¦  «         |                      |¦  «         | j                             ||d |	d ¬¦  «         ŒP|                      d¦  «         |                      d¦  «         |                     d|z  ¦  «         d S )Nr  rï   r‘  ru  rÎ  ©r-  re  r«   rÛ  r‡  rµ   rÜ  )
r‹   r¸   r”   r–  r�  r‚  rƒ  Ú
firstGlyphÚ	lastGlyphr¹   s
             r5   r•  zAATLookup.writeFormat2ê  s  € Ø×Ò˜1ÑÔÐØ”NÔ-ˆ	Ý  ™]œ]¨I¸©M�(ˆØ×!Ò! &¨(°HÑ=Ô=Ð=Ø,4ð 	ð 	Ñ(ˆJ˜	 5Ø×Ò˜yÑ)Ô)Ð)Ø×Ò˜zÑ*Ô*Ð*ØŒN× Ò Ø˜¨°EÀtð !ñ ô ð ð ð 	×Ò˜6Ñ"Ô"Ð"Ø×Ò˜6Ñ"Ô"Ð"Ø×Ò˜ 9Ñ,Ñ-Ô-Ð-Ð-Ð-r7   c                 ó‚   ‡ ‡‡‡— ‰ j         j        }t          ‰¦  «        |dz   }}d‰ j        z   |dz   |z  z   dˆˆ ˆˆfd„fS )Nr  r   rg  c                  ó2   •— ‰                      ‰‰ ‰¦  «        S r1   )ÚwriteFormat6r‹  s   €€€€r5   r6   z(AATLookup.buildFormat6.<locals>.<lambda>ÿ  rŒ  r7   )re  r«   rÛ  r—  )r‹   r¸   r”   r`   r�  r‚  rƒ  s   ````   r5   rx  zAATLookup.buildFormat6ù  s^   øøøø€ Ø”NÔ-ˆ	Ý  ™[œ[¨)°a©-�(ˆà�Ô+Ñ+¨x¸!©|¸xÑ.GÑGØØ;Ð;Ð;Ð;Ð;Ð;Ð;ð
ð 	
r7   c                 óp  — |                      d¦  «         | j        j        }t          |¦  «        |dz   }}|                      |||¦  «         |D ]9\  }}|                      |¦  «         | j                             ||d |d ¬¦  «         Œ:|                      d¦  «         |                     d|z  ¦  «         d S )Nrg  r  r‘  ru  rÎ  rž  )	r‹   r¸   r”   r`   r�  r‚  rƒ  r›  r¹   s	            r5   r£  zAATLookup.writeFormat6  sÖ   € Ø×Ò˜1ÑÔÐØ”NÔ-ˆ	Ý  ™[œ[¨)°a©-�(ˆØ×!Ò! &¨(°HÑ=Ô=Ð=Ø$ð 	ð 	‰NˆG�UØ×Ò˜wÑ'Ô'Ð'ØŒN× Ò Ø˜¨°EÀtð !ñ ô ð ð ð 	×Ò˜6Ñ"Ô"Ð"Ø×Ò˜ 9Ñ,Ñ-Ô-Ð-Ð-Ð-r7   c                 óÌ   ‡ ‡‡‡— ‰d         d         ‰d         d         }}t          ‰¦  «        ||z
  dz   k    rd S ‰ j        j        }dt          ‰¦  «        |z  z   dˆˆ ˆˆfd„fS )Nr   rM  r   rg  rŽ   c                  ó2   •— ‰                      ‰‰ ‰¦  «        S r1   )ÚwriteFormat8r‹  s   €€€€r5   r6   z(AATLookup.buildFormat8.<locals>.<lambda>  rŒ  r7   )rÛ  re  r«   )r‹   r¸   r”   r`   Ú
minGlyphIDÚ
maxGlyphIDr�  s   ````   r5   ry  zAATLookup.buildFormat8  s~   øøøø€ Ø!'¨¤¨1¤¨v°b¬z¸!¬}�Jˆ
Ýˆv‰;Œ;˜* zÑ1°AÑ5Ò5Ð5Ø�4Ø”NÔ-ˆ	à•�F‘”˜iÑ'Ñ'ØØ;Ð;Ð;Ð;Ð;Ð;Ð;ð
ð 	
r7   c                 ó  — |d         d         }|                      d¦  «         |                      |¦  «         |                      t          |¦  «        ¦  «         |D ]$\  }}| j                             ||d |d ¬¦  «         Œ%d S )Nr   rŽ   r‘  )r-  rÛ  re  rµ   )r‹   r¸   r”   r`   ÚfirstGlyphIDÚ_r¹   s          r5   r§  zAATLookup.writeFormat8  s�   € Ø˜a”y ”|ˆØ×Ò˜1ÑÔÐØ×Ò˜<Ñ(Ô(Ð(Ø×Ò�3˜v™;œ;Ñ'Ô'Ð'Øð 	ð 	‰HˆAˆuØŒN× Ò Ø˜¨°EÀtð !ñ ô ð ð ð	ð 	r7   c                 ó¸   ‡— t          ‰                     ¦   «         ¦  «        }| j                             |‰d |¬¦  «        }ˆfd„t	          |¦  «        D ¦   «         S )N©r¦   r§   c                 óB   •— i | ]\  }}‰                      |¦  «        |“ŒS rž   ©rg  )rŸ   Úkr¹   r”   s      €r5   ú
<dictcomp>z)AATLookup.readFormat0.<locals>.<dictcomp>'  s-   ø€ ÐLÐLÐL±°°5�×!Ò! !Ñ$Ô$ eÐLÐLÐLr7   )rÛ  r�  re  r©   r´   )r‹   r›   r”   rŽ  r×  s     `  r5   rh  zAATLookup.readFormat0$  sZ   ø€ Ý˜×*Ò*Ñ,Ô,Ñ-Ô-ˆ	ØŒ~×'Ò'¨°ÀÈIÐ'ÑVÔVˆØLÐLÐLÐL½IÀd¹O¼OÐLÑLÔLÐLr7   c                 óú  — i }|j         dz
  }|                     ¦   «         |                     ¦   «         }}|d| j        j        z   k    s
J |¦   «         ‚t	          |¦  «        D ]™}|                     |||z  z   dz   ¦  «         |                     ¦   «         }|                     ¦   «         }	| j                             ||d ¬¦  «        }
|dk    r.t	          |	|dz   ¦  «        D ]}|
||                     |¦  «        <   ŒŒš|S )Nr  rï   é   ©r¦   ru  r   ©r•   r'  re  r«   r¤   r‘   r’   rg  )r‹   r›   r”   Úmappingr•   rƒ  r‚  r“   ÚlastÚfirstr¹   r±  s               r5   ri  zAATLookup.readFormat2)  s  € ØˆØŒj˜1‰nˆØ#×.Ò.Ñ0Ô0°&×2CÒ2CÑ2EÔ2E�(ˆØ˜1˜tœ~Ô8Ñ8Ò8Ð8Ð8¸(Ñ8Ô8Ð8Ý�x‘”ð 	:ð 	:ˆAØ�KŠK˜˜a (™lÑ*¨RÑ/Ñ0Ô0Ð0Ø×$Ò$Ñ&Ô&ˆDØ×%Ò%Ñ'Ô'ˆEØ”N×'Ò'¨°ÀÐ'ÑEÔEˆEØ�vŠ~ˆ~Ý˜u d¨Q¡hÑ/Ô/ð :ð :�AØ49�G˜D×-Ò-¨aÑ0Ô0Ñ1Ð1øØˆr7   c                 óp  — i }|j         dz
  }|                     ¦   «         }|dk    s
J |¦   «         ‚t          |                     ¦   «         ¦  «        D ]ã}|                     |||z  z   dz   ¦  «         |                     ¦   «         }|                     ¦   «         }|                     ¦   «         }	|dk    r�|                     d¦  «        }
|
                     ||	z   ¦  «         | j                             |
|d ||z
  dz   ¬¦  «        }t          |¦  «        D ] \  }}|||                     ||z   ¦  «        <   Œ!Œä|S )Nr  rg  r´  ru  r   r   r®  )	r•   r'  r¤   r‘   r  re  r©   r´   rg  )r‹   r›   r”   r·  r•   rƒ  r“   r¸  r¹  r  Ú
dataReaderr×  r±  rÈ  s                 r5   rj  zAATLookup.readFormat48  sL  € ØˆØŒj˜1‰nˆØ×$Ò$Ñ&Ô&ˆØ˜1Š}ˆ}ˆ}˜h‰}Œ}ˆ}Ý�v×(Ò(Ñ*Ô*Ñ+Ô+ð 	>ð 	>ˆAØ�KŠK˜˜a (™lÑ*¨RÑ/Ñ0Ô0Ð0Ø×$Ò$Ñ&Ô&ˆDØ×%Ò%Ñ'Ô'ˆEØ×&Ò&Ñ(Ô(ˆFØ�vŠ~ˆ~Ø#×0Ò0°Ñ3Ô3�
Ø—’  f¡Ñ-Ô-Ð-Ø”~×/Ò/Ø °¸DÀ5¹LÈ1Ñ<Lð 0ñ ô �õ & d™OœOð >ð >‘D�A�qØ<=�G˜D×-Ò-¨e°a©iÑ8Ô8Ñ9Ð9øØˆr7   c                 ó¢  — i }|j         dz
  }|                     ¦   «         }|d| j        j        z   k    s
J |¦   «         ‚t	          |                     ¦   «         ¦  «        D ]o}|                     |||z  z   dz   ¦  «         |                     ¦   «         }| j                             ||d ¬¦  «        }|dk    r|||                     |¦  «        <   Œp|S )Nr  r´  rµ  ru  r¶  )	r‹   r›   r”   r·  r•   rƒ  r“   r›  r¹   s	            r5   rk  zAATLookup.readFormat6L  sß   € ØˆØŒj˜1‰nˆØ×$Ò$Ñ&Ô&ˆØ˜1˜tœ~Ô8Ñ8Ò8Ð8Ð8¸(Ñ8Ô8Ð8Ý�v×(Ò(Ñ*Ô*Ñ+Ô+ð 	<ð 	<ˆAØ�KŠK˜˜a (™lÑ*¨RÑ/Ñ0Ô0Ð0Ø×'Ò'Ñ)Ô)ˆGØ”N×'Ò'¨°ÀÐ'ÑEÔEˆEØ˜&Ò Ð Ø6;�˜×)Ò)¨'Ñ2Ô2Ñ3øØˆr7   c                 óÊ   ‡‡— |                      ¦   «         Š|                      ¦   «         }| j                             |‰d |¬¦  «        }ˆˆfd„t          |¦  «        D ¦   «         S )Nr®  c                 óH   •— i | ]\  }}‰                      ‰|z   ¦  «        |“ŒS rž   r°  )rŸ   r±  r¹   r¹  r”   s      €€r5   r²  z)AATLookup.readFormat8.<locals>.<dictcomp>]  s1   ø€ ÐVÐVÐV¹
¸¸E�×!Ò! %¨!¡)Ñ,Ô,¨eÐVÐVÐVr7   )r'  re  r©   r´   )r‹   r›   r”   r§   r×  r¹  s     `  @r5   rl  zAATLookup.readFormat8Y  sh   øø€ Ø×!Ò!Ñ#Ô#ˆØ×!Ò!Ñ#Ô#ˆØŒ~×'Ò'¨°ÀÈEÐ'ÑRÔRˆØVÐVÐVÐVÐVÅiÐPTÁoÄoÐVÑVÔVÐVr7   c                 ó    — i }|D ]H}t          |t          ¦  «        r1|\  }}}|dk    r%| j                             |||¦  «        ||d         <   ŒI|S )NÚLookuprp  )r2   r3   re  rÃ   )	r‹   rÁ   rÂ   r”   r¹   ró  rP   ÚaÚ
eltContents	            r5   rÃ   zAATLookup.xmlRead_  sj   € ØˆØð 	Tð 	TˆGÝ˜'¥5Ñ)Ô)ð TØ&-Ñ#��a˜Ø˜8Ò#Ð#Ø(,¬×(>Ò(>¸qÀ*ÈdÑ(SÔ(S�E˜!˜Gœ*Ñ%øØˆr7   c           	      ó>  — |                      ||¦  «         |                     ¦   «          t          |                     ¦   «         ¦  «        D ]'\  }}| j                             |||dd|fg¬¦  «         Œ(|                     |¦  «         |                     ¦   «          d S )NrÀ  rp  )r¹   rP   rÁ   )Úbegintagrß   rt  rÿ  re  rÇ   Úendtag)r‹   rÆ   r”   r¹   rP   rÁ   rp  s          r5   rÇ   zAATLookup.xmlWriteh  s²   € Ø×Ò˜4 Ñ'Ô'Ð'Ø×ÒÑÔÐÝ" 5§;¢;¡=¤=Ñ1Ô1ð 	ð 	‰LˆE�5ØŒN×#Ò#Ø˜4 u°8ÀWÈeÐDTÐCUð $ñ ô ð ð ð 	×Ò˜ÑÔÐØ×ÒÑÔÐÐÐr7   r1   )rb   rÐ   rÑ   r—  rŒ   r’   rµ   rá   r‡  rv  rŠ  rw  r•  rx  r£  ry  r§  rh  ri  rj  rk  rl  rÃ   rÇ   rž   r7   r5   ra  ra  |  s_  € € € € € ØÐàEGð 	ð 	ð 	ð 	ð 	ðCð Cð Cð
ð 
ð 
ð 
ð@ ð'ð 'ñ „\ð'ð	
ð 	
ð 	
ðð ð ð
ð 
ð 
ð(.ð .ð .ð
ð 
ð 
ð.ð .ð .ð	
ð 	
ð 	
ðð ð ðMð Mð Mð
ð ð ðð ð ð(ð ð ðWð Wð Wðð ð ðð ð ð ð r7   ra  c                   ó(   — e Zd Zd„ Zdd„Zd„ Zd„ ZdS )ÚAATLookupWithDataOffsetc                 ó¢  — |                      ¦   «         }|                      ¦   «         }|                     |¦  «        }t          dd d t          ¦  «        }|                     |||¦  «        }i }	|                     ¦   «         D ]L\  }
}|                     ||z   ¦  «        }|                      ¦   «         }|                     ||¦  «         ||	|
<   ŒM|	S ©NÚDataOffsets)r  r  ra  r$  r’   rÿ  r^   rà  )r‹   r›   r”   r¦   ÚlookupOffsetÚ
dataOffsetÚlookupReaderÚlookupÚoffsetsÚresultrp  r  r»  Úitems                 r5   r’   zAATLookupWithDataOffset.read{  sÊ   € Ø×'Ò'Ñ)Ô)ˆØ×%Ò%Ñ'Ô'ˆ
Ø×*Ò*¨<Ñ8Ô8ˆÝ˜=¨$°µfÑ=Ô=ˆØ—+’+˜l¨D°)Ñ<Ô<ˆØˆØ$Ÿ]š]™_œ_ð 	!ð 	!‰MˆE�6Ø×,Ò,¨V°jÑ-@ÑAÔAˆJØ—?’?Ñ$Ô$ˆDØ�NŠN˜: tÑ,Ô,Ð,Ø ˆF�5‰MˆMØˆr7   Nc                 ó¢  — i i d}}}g }	t          ||j        ¬¦  «        D ]�}
t          ¦   «         }||
                              ||¦  «         |                     ¦   «         }|                     |d ¦  «        }|d k    r.|}|t          |¦  «        z   }|||<   |	                     |¦  «         |||
<   Œ�|                     ¦   «         }t          dd d t          ¦  «        }|                     ||||d ¦  «         |                     ¦   «         }|                     |d¬¦  «         |                     |d¬¦  «         |	D ]}|                     |¦  «         Œd S )Nr   )ÚkeyrÊ  rï   r  )rt  rm  r   r†   r  r_   rÛ  rd   r  ra  r$  rµ   r  rÜ  )r‹   r¸   r”   r¦   r¹   r¾   ÚoffsetByGlyphÚoffsetByDataÚdataLenÚcompiledDatarp  r  r×  r  ÚlookupWriterrÎ  Ú
dataWriterÚds                     r5   rµ   zAATLookupWithDataOffset.write‰  sy  € ð 02°2°q W�|ˆØˆÝ˜E t¤Ð7Ñ7Ô7ð 
	*ð 
	*ˆEÝ%™œˆIØ�%ŒL× Ò  ¨DÑ1Ô1Ð1Ø×'Ò'Ñ)Ô)ˆDØ!×%Ò% d¨DÑ1Ô1ˆFØ˜Š~ˆ~Ø �Ø!¥C¨¡I¤IÑ-�Ø%+�˜TÑ"Ø×#Ò# DÑ)Ô)Ð)Ø#)ˆM˜%Ñ Ð ð ×*Ò*Ñ,Ô,ˆÝ˜=¨$°µfÑ=Ô=ˆØ�Š�\ 4¨°MÀ4ÑHÔHÐHà×(Ò(Ñ*Ô*ˆ
Ø×Ò˜\°aÐÑ8Ô8Ð8Ø×Ò˜Z°AÐÑ6Ô6Ð6Øð 	$ð 	$ˆAØ× Ò  Ñ#Ô#Ð#Ð#ð	$ð 	$r7   c                 ó^   — t          dd d | j        ¦  «        }|                     |||¦  «        S rÉ  )ra  r^   rÃ   )r‹   rÁ   rÂ   r”   rÎ  s        r5   rÃ   zAATLookupWithDataOffset.xmlRead¬  s-   € Ý˜=¨$°°d´oÑFÔFˆØ�~Š~˜e W¨dÑ3Ô3Ð3r7   c                 óf   — t          dd d | j        ¦  «        }|                     |||||¦  «         d S rÉ  )ra  r^   rÇ   )r‹   rÆ   r”   r¹   rP   rÁ   rÎ  s          r5   rÇ   z AATLookupWithDataOffset.xmlWrite°  s7   € Ý˜=¨$°°d´oÑFÔFˆØ�Š˜	 4¨°°eÑ<Ô<Ð<Ð<Ð<r7   r1   ©rb   rÐ   rÑ   r’   rµ   rÃ   rÇ   rž   r7   r5   rÇ  rÇ  z  sV   € € € € € ðð ð ð!$ð !$ð !$ð !$ðF4ð 4ð 4ð=ð =ð =ð =ð =r7   rÇ  c                   ó(   — e Zd Zd„ Zd„ Zd„ Zdd„ZdS )ÚMortSubtableConverterc                 óº  — |j         }t          ¦   «         }|                     ¦   «         |_        |                     ¦   «         |_        |                     ¦   «         |_        |                     ¦   «         |_        t          d          
                    |j        ¦  «        }|€J d|j        z  ¦   «         ‚|j         |z
  }|j        |j         |j         |j        z   |z
  …         }t          |¦  «        |j        |z
  k    sJ ‚t          ||j        ¬¦  «        }	 |¦   «         |_        |j                             |	|¦  «         |                     ||j        z   ¦  «         |S )NÚmortFz!unsupported 'mort' lookup type %s©r×  ÚtableTag)r•   r%   r'  r=   r>  ÚCoverageFlagsr>   r  ÚSubFeatureFlagsr   r_   r×  rÛ  r   rã  rC   rà  r‘   )
r‹   r›   r”   r¦   r•   rÎ   r^   ÚheaderLengthr×  Ú	subReaders
             r5   r’   zMortSubtableConverter.read¶  s8  € ØŒjˆÝ‰NŒNˆØ×*Ò*Ñ,Ô,ˆŒØ ×*Ò*Ñ,Ô,ˆŒØ×&Ò&Ñ(Ô(ˆŒØ"×,Ò,Ñ.Ô.ˆÔÝ  Ô(×,Ò,¨Q¬[Ñ9Ô9ˆ
ØÐØKÐ=ÀÄÑKÑKÔK�5ð
 ”z CÑ'ˆØŒ{˜6œ:¨¬
°Q´^Ñ(CÀlÑ(RÐRÔSˆÝ�4‰yŒy˜AœN¨\Ñ9Ò9Ð9Ð9Ð9Ý! t°f´oÐFÑFÔFˆ	Ø �j‘l”lˆŒØ	Œ×Ò˜i¨Ñ.Ô.Ð.Ø�Š�C˜!œ.Ñ(Ñ)Ô)Ð)Øˆr7   c                 ól  — |                      ||¦  «         |                     ¦   «          |                     d|j        z  ¦  «         |                     ¦   «          |                     d|j        ¬¦  «         |                     ¦   «          |                     d|j        z  ¦  «         |                     ¦   «          |                     dd|j        z  ¬¦  «         |                     ¦   «          |j         	                    ||¦  «         | 
                    |¦  «         |                     ¦   «          d S )NúStructLength=%drä  r×   úMorphType=%drå  rÆ  )rÄ  rß   rS  r=   rÞ   rä  r>   rå  rC   ræ  rÅ  rÅ   s         r5   rÇ   zMortSubtableConverter.xmlWriteÍ  s,  € Ø×Ò˜4 Ñ'Ô'Ð'Ø×ÒÑÔÐØ×ÒÐ+¨eÔ.@Ñ@ÑAÔAÐAØ×ÒÑÔÐØ×Ò˜O°5Ô3FÐÑGÔGÐGØ×ÒÑÔÐØ×Ò˜.¨5¬?Ñ:Ñ;Ô;Ð;Ø×ÒÑÔÐØ×ÒÐ-°XÀÔ@UÑ5UÐÑVÔVÐVØ×ÒÑÔÐØŒ×Ò˜i¨Ñ.Ô.Ð.Ø×Ò˜ÑÔÐØ×ÒÑÔÐÐÐr7   c                 óZ  — t          ¦   «         }d|_        t          t          |¦  «        D ]\  }}}|dk    rt	          |d         ¦  «        |_        Œ'|dk    rt	          |d         ¦  «        |_        ŒH|                     d¦  «        r|                     ||||¦  «         ŒvJ |¦   «         ‚|S )Nr   rä  r¹   rå  ÚMorph)r%   rä  ru  Úistupler   rå  rS   rï  )r‹   rÁ   rÂ   r”   rÎ   ÚeltNameÚeltAttrsrÂ  s           r5   rÃ   zMortSubtableConverter.xmlReadÜ  sº   € Ý‰NŒNˆØˆŒÝ-3µG¸WÑ-EÔ-Eð 	&ð 	&Ñ)ˆG�X˜zØ˜/Ò)Ð)Ý"*¨8°GÔ+<Ñ"=Ô"=�”�ØÐ-Ò-Ð-Ý$,¨X°gÔ->Ñ$?Ô$?�Ô!Ð!Ø×!Ò! 'Ñ*Ô*ð &Ø—	’	˜' 8¨Z¸Ñ>Ô>Ð>Ð>à%˜gÑ%Ô%�uØˆr7   Nc                 óH  — t          |j        ¦  «        }|                     ¦   «         }d|_        |                     ||¦  «         |j        |         dk    sJ ‚|                     ¦   «         |z
  }|dk    rt          d¦  «        ‚t          j        d|¦  «        |j        |<   d S )Nrü  s   Þ­ru  z!mort subtable exceeds 65535 bytesú>H)rÛ  rÿ  r   r=   r†   Ú
ValueErrorÚstructÚpack)	r‹   r¸   r”   r¦   r¹   r¾   r  r  r  s	            r5   rµ   zMortSubtableConverter.writeê  s¢   € Ý˜&œ,Ñ'Ô'ˆØ×%Ò%Ñ'Ô'ˆØ#ˆÔØ�Š�f˜dÑ#Ô#Ð#ØŒ|˜KÔ(¨KÒ7Ð7Ð7Ð7Ø×%Ò%Ñ'Ô'¨&Ñ0ˆØ�FŠ?ˆ?ÝÐ@ÑAÔAÐAÝ$*¤K°°fÑ$=Ô$=ˆŒ�[Ñ!Ð!Ð!r7   r1   )rb   rÐ   rÑ   r’   rÇ   rÃ   rµ   rž   r7   r5   rß  rß  µ  sU   € € € € € ðð ð ð.ð ð ðð ð ð	>ð 	>ð 	>ð 	>ð 	>ð 	>r7   rß  c                   ó†   — e Zd ZdddddœZd„ e                     ¦   «         D ¦   «         Zddd	œd
„Zd„ Zd„ Zd„ Z	d„ Z
dd„ZdS )ÚMorxSubtableConverterÚLayoutOrderÚReversedLayoutOrderÚLogicalOrderÚReversedLogicalOrder))FF)TF©FT)TTc                 ó   — i | ]\  }}||“Œ	S rž   rž   )rŸ   rÓ  rq  s      r5   r²  z MorxSubtableConverter.<dictcomp>ÿ  s   € Ð"WÐ"WÐ"W±°°S 3¨Ð"WÐ"WÐ"Wr7   Nrp   rK   c                óF   — t                                | |||||¬¦  «         d S ©NrK   )ro   rŒ   rŠ   s         r5   rŒ   zMorxSubtableConverter.__init__  s6   € Ý×ÒØ�$˜  Z¸[ð 	ñ 	
ô 	
ð 	
ð 	
ð 	
r7   c                 ó\   — |dz  dk    r	d|_         d S |dz  dk    r	d|_         d S d|_         d S )Né    r   ÚAnyé€   ÚVerticalÚ
Horizontal)ÚTextDirection)r‹   rƒ  Úsubtables      r5   Ú"_setTextDirectionFromCoverageFlagsz8MorxSubtableConverter._setTextDirectionFromCoverageFlags  sJ   € Ø�D‰L˜QÒÐØ%*ˆHÔ"Ð"Ð"Ø�d‰l˜qÒ Ð Ø%/ˆHÔ"Ð"Ð"à%1ˆHÔ"Ð"Ð"r7   c                 ó‚  — |j         }t          ¦   «         }|                     ¦   «         |_        |                     ¦   «         }|dz  dk    |dz  dk    f}| j        |         |_        |                      ||¦  «         |                     ¦   «         |_	        |xj	        |dz  dz  z  c_	        |                     ¦   «         |_
        |                     ¦   «         |_        t          d                              |j
        ¦  «        }|€J d|j
        z  ¦   «         ‚|j         |z
  }	|j        |j         |j         |j        z   |	z
  …         }
t          |
¦  «        |j        |	z
  k    sJ ‚t!          |
|j        ¬¦  «        } |¦   «         |_        |j                             ||¦  «         |                     ||j        z   ¦  «         |S )	NrÌ  r   r¨  é   ÚmorxFz!unsupported 'morx' lookup type %srâ  )r•   r&   r  r=   r>  Ú_PROCESSING_ORDERSÚProcessingOrderr  r'  ÚReservedr>   rå  r   r_   r×  rÛ  r   rã  rC   rà  r‘   )r‹   r›   r”   r¦   r•   rÎ   rƒ  ÚorderKeyr^   ræ  r×  rç  s               r5   r’   zMorxSubtableConverter.read  s¤  € ØŒjˆÝ‰NŒNˆØ×)Ò)Ñ+Ô+ˆŒØ× Ò Ñ"Ô"ˆØ˜T‘\ aÒ'¨%°$©,¸1Ò)<Ð=ˆØ Ô3°HÔ=ˆÔØ×/Ò/°°qÑ9Ô9Ð9Ø×&Ò&Ñ(Ô(ˆŒ
Ø	ˆ
Œ
�u˜s‘{ rÑ)Ñ)ˆ
Œ
Ø×&Ò&Ñ(Ô(ˆŒØ"×,Ò,Ñ.Ô.ˆÔÝ  Ô(×,Ò,¨Q¬[Ñ9Ô9ˆ
ØÐØKÐ=ÀÄÑKÑKÔK�5ð ”z CÑ'ˆØŒ{˜6œ:¨¬
°Q´^Ñ(CÀlÑ(RÐRÔSˆÝ�4‰yŒy˜AœN¨\Ñ9Ò9Ð9Ð9Ð9Ý! t°f´oÐFÑFÔFˆ	Ø �j‘l”lˆŒØ	Œ×Ò˜i¨Ñ.Ô.Ð.Ø�Š�C˜!œ.Ñ(Ñ)Ô)Ð)Øˆr7   c                 óH  — |                      ||¦  «         |                     ¦   «          |                     d|j        z  ¦  «         |                     ¦   «          |                     d|j        ¬¦  «         |                     ¦   «          |                     d|j        ¬¦  «         |                     ¦   «          |j        dk    r3|                     dd|j        z  ¬¦  «         |                     ¦   «          |                     d|j        z  ¦  «         |                     ¦   «          |                     d	d
|j	        z  ¬¦  «         |                     ¦   «          |j
                             ||¦  «         |                     |¦  «         |                     ¦   «          d S )Nré  r  r×   r  r   r  z0x%04xrê  rå  rÆ  )rÄ  rß   rS  r=   rÞ   r  r  r  r>   rå  rC   ræ  rÅ  rÅ   s         r5   rÇ   zMorxSubtableConverter.xmlWrite)  sš  € Ø×Ò˜4 Ñ'Ô'Ð'Ø×ÒÑÔÐØ×ÒÐ+¨eÔ.@Ñ@ÑAÔAÐAØ×ÒÑÔÐØ×Ò˜O°5Ô3FÐÑGÔGÐGØ×ÒÑÔÐØ×ÒÐ-°UÔ5JÐÑKÔKÐKØ×ÒÑÔÐØŒ>˜QÒÐØ×Ò 
°(¸U¼^Ñ2KÐÑLÔLÐLØ×ÒÑÔÐØ×Ò˜.¨5¬?Ñ:Ñ;Ô;Ð;Ø×ÒÑÔÐØ×ÒÐ-°XÀÔ@UÑ5UÐÑVÔVÐVØ×ÒÑÔÐØŒ×Ò˜i¨Ñ.Ô.Ð.Ø×Ò˜ÑÔÐØ×ÒÑÔÐÐÐr7   c                 ó   — t          ¦   «         }d}d|_        t          t          |¦  «        D �]:\  }}}|dk    rPt	          |d         ¦  «        }|dz  dk    |dz  dk    f}	| j        |	         |_        |                      ||¦  «         Œ]|dk    r.|d         |_        |j        | j        v sJ d|j        z  ¦   «         ‚Œ‘|dk    r)|d         |_	        |j	        d	v sJ d
|j	        z  ¦   «         ‚ŒÀ|dk    rt	          |d         ¦  «        |_        Œá|dk    rt	          |d         ¦  «        |_
        �Œ|                     d¦  «        r|                     ||||¦  «         �Œ2J |¦   «         ‚|dz  dz  |j        z  |_        |S )Nr   rä  r¹   rÌ  r¨  r  zunknown ProcessingOrder: %sr  >   r  r  r  zunknown TextDirection %sr  rå  rì  Fr	  )r&   r  ru  rí  r   r  r  r  Ú_PROCESSING_ORDERS_REVERSEDr  rå  rS   rï  )
r‹   rÁ   rÂ   r”   rÎ   ÚcovFlagsrî  rï  rÂ  r  s
             r5   rÃ   zMorxSubtableConverter.xmlRead=  sÄ  € Ý‰NŒNˆØˆØˆŒ
Ý-3µG¸WÑ-EÔ-Eð 	&ñ 	&Ñ)ˆG�X˜zØ˜/Ò)Ð)å# H¨WÔ$5Ñ6Ô6�Ø%¨™_°Ò2°XÀ±_ÈÒ4JÐK�Ø$(Ô$;¸HÔ$E�Ô!Ø×7Ò7¸À!ÑDÔDÐDÐDØÐ-Ò-Ð-Ø$,¨WÔ$5�Ô!ØÔ(¨DÔ,LÐLÐLÐLØ1°AÔ4EÑEñ MÔLÐLÐLð ˜OÒ+Ð+Ø"*¨7Ô"3�”Ø”Ð*KÐKÐKÐKØ.°´Ñ@ñ LÔKÐKÐKð ˜JÒ&Ð&Ý% h¨wÔ&7Ñ8Ô8�”
�
ØÐ-Ò-Ð-Ý$,¨X°gÔ->Ñ$?Ô$?�Ô!Ñ!Ø×!Ò! 'Ñ*Ô*ð &Ø—	’	˜' 8¨Z¸Ñ>Ô>Ð>Ñ>à%˜gÑ%Ô%�uØ ‘n¨Ñ+¨a¬jÑ8ˆŒ
Øˆr7   c                 ó  — |j         dz  dz	  }| j        |j                 \  }}||j        dk    rdndz  }||rdndz  }||j        dk    rdndz  }||rdndz  }||_        t          |j        ¦  «        }	|                     ¦   «         }
d	|_        |j         }|j         d
z  |_         | 	                    ||¦  «         ||_         |j        |	         dk    sJ ‚|                     ¦   «         |
z
  }t          j        d|¦  «        |j        |	<   d S )Ni   r¨  r  r  r   rÌ  r  r   rý  ru  rþ  z>L)r  r  r  r  rä  rÛ  rÿ  r   r=   r†   ró  rô  )r‹   r¸   r”   r¦   r¹   r¾   r  ÚreverseOrderÚlogicalOrderr  r  ÚorigReservedr  s                r5   rµ   zMorxSubtableConverter.write]  s8  € Ø”N ZÑ/°BÑ6ˆØ%)Ô%EØÔ!ô&
Ñ"ˆ�lð 	˜EÔ/°:Ò=Ð=�D�DÀ1ÑDˆØ˜LÐ/�D�D¨aÑ/ˆØ˜EÔ/°5Ò8Ð8�D�D¸aÑ?ˆØ˜LÐ/�D�D¨aÑ/ˆØ&ˆÔÝ˜&œ,Ñ'Ô'ˆØ×%Ò%Ñ'Ô'ˆØ'ˆÔð ”~ˆØœ¨&Ñ0ˆŒØ�Š�f˜dÑ#Ô#Ð#Ø%ˆŒØŒ|˜KÔ(Ð,?Ò?Ð?Ð?Ð?Ø×%Ò%Ñ'Ô'¨&Ñ0ˆÝ$*¤K°°fÑ$=Ô$=ˆŒ�[Ñ!Ð!Ð!r7   r1   )rb   rÐ   rÑ   r  rÿ  r  rŒ   r  r’   rÇ   rÃ   rµ   rž   r7   r5   rö  rö  ö  sÄ   € € € € € ð &Ø,Ø%Ø,ðð Ðð #XÐ"WÐ<N×<TÒ<TÑ<VÔ<VÐ"WÑ"WÔ"WÐð
È"ð 
ð 
ð 
ð 
ð 
ð
2ð 2ð 2ðð ð ð6ð ð ð(ð ð ð@>ð >ð >ð >ð >ð >r7   rö  c                   ó|   — e Zd Zddœd„Zd„ Zd„ Zd„ 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„ Zd„ Zd	S )Ú	STXHeaderrp   rK   c                ó4  — t                                | |||||¬¦  «         t          | j        t          ¦  «        sJ ‚t          dd d t          ¦  «        | _        t          | j        t          ¦  «        rt          dd d t          ¦  «        | _
        d S d | _
        d S )NrK   ÚGlyphClassesÚPerGlyphLookup)ro   rŒ   rd  r^   r    ra  r$  ÚclassLookupr!   ra  ÚperGlyphLookuprŠ   s         r5   rŒ   zSTXHeader.__init__x  sœ   € Ý×ÒØ�$˜  Z¸[ð 	ñ 	
ô 	
ð 	
õ ˜$œ/­9Ñ5Ô5Ð5Ð5Ð5Ý$ ^°T¸4ÅÑHÔHˆÔÝ�d”oÕ'<Ñ=Ô=ð 	'Ý"+Ð,<¸dÀDÍ'Ñ"RÔ"RˆDÔÐÐà"&ˆDÔÐÐr7   c                 óR  — t          ¦   «         }|j        }|                     d¦  «        }|                     d¦  «        }|                     d¦  «        }d }	d }
|                     ¦   «         |_        |                     ||                     ¦   «         z   ¦  «         |                     ||                     ¦   «         z   ¦  «         |                     ||                     ¦   «         z   ¦  «         | j        �?|                     d¦  «        }|                     ||                     ¦   «         z   ¦  «         t          | j        t          ¦  «        �r|                     d¦  «        }	|	                     ||                     ¦   «         z   ¦  «         |                     d¦  «        }|                     ||                     ¦   «         z   ¦  «         |                     d¦  «        }
|
                     ||                     ¦   «         z   ¦  «         |
j        |j        z
  dz  }|dk    sJ ‚| 
                    |¦  «        |_        |                      |
|¦  «        |_        nYt          | j        t          ¦  «        r?|                     d¦  «        }	|	                     ||                     ¦   «         z   ¦  «         | j                             |||¦  «        |_        t%          |j        |j        z
  |j        dz  z  ¦  «        }t'          |¦  «        D ]u}t)          ¦   «         }|j                             |¦  «         t'          |j        ¦  «        D ]6}|                     ¦   «         }|                      ||||	¦  «        |j        |<   Œ7Œv| j        �|                      |||¦  «        |_        |S )Nr   r  )r   r•   r  r  ÚGlyphClassCountr‘   r  rd  r^   r#   r*  ÚLigComponentsÚ_readLigaturesÚ	Ligaturesr$   r  r’   r  rÌ   r¤   r   ÚStatesrd   r'  Ú_readTransitionÚTransitionsÚ_readPerGlyphLookupsÚPerGlyphLookups)r‹   r›   r”   r¦   rá  r•   ÚclassTableReaderÚstateArrayReaderÚentryTableReaderÚactionReaderÚligaturesReaderÚperGlyphTableReaderÚligComponentReaderÚnumLigComponentsÚ	numStatesÚ
stateIndexÚstateÚ
glyphClassÚ
entryIndexs                      r5   r’   zSTXHeader.readƒ  sŽ  € Ý‘”ˆØŒjˆØ!×.Ò.¨qÑ1Ô1ÐØ!×.Ò.¨qÑ1Ô1ÐØ!×.Ò.¨qÑ1Ô1ÐØˆØˆØ &× 0Ò 0Ñ 2Ô 2ˆÔØ×Ò˜c F×$4Ò$4Ñ$6Ô$6Ñ6Ñ7Ô7Ð7Ø×Ò˜c F×$4Ò$4Ñ$6Ô$6Ñ6Ñ7Ô7Ð7Ø×Ò˜c F×$4Ò$4Ñ$6Ô$6Ñ6Ñ7Ô7Ð7ØÔÐ*Ø"(×"5Ò"5°aÑ"8Ô"8ÐØ×$Ò$ S¨6×+;Ò+;Ñ+=Ô+=Ñ%=Ñ>Ô>Ð>Ý�d”oÕ':Ñ;Ô;ñ 	8Ø!×.Ò.¨qÑ1Ô1ˆLØ×Ò˜c F×$4Ò$4Ñ$6Ô$6Ñ6Ñ7Ô7Ð7Ø!'×!4Ò!4°QÑ!7Ô!7ÐØ×#Ò# C¨&×*:Ò*:Ñ*<Ô*<Ñ$<Ñ=Ô=Ð=Ø$×1Ò1°!Ñ4Ô4ˆOØ× Ò   v×'7Ò'7Ñ'9Ô'9Ñ!9Ñ:Ô:Ð:Ø /Ô 3Ð6HÔ6LÑ LÐQRÑRÐØ# qÒ(Ð(Ð(Ð(Ø"4×"DÒ"DÐEUÑ"VÔ"VˆEÔØ"×1Ò1°/À4ÑHÔHˆEŒOˆOÝ˜œÕ)=Ñ>Ô>ð 	8Ø!×.Ò.¨qÑ1Ô1ˆLØ×Ò˜c F×$4Ò$4Ñ$6Ô$6Ñ6Ñ7Ô7Ð7Ø!Ô-×2Ò2Ð3CÀTÈ9ÑUÔUˆÔÝØÔ!Ð$4Ô$8Ñ8¸UÔ=RÐUVÑ=VÑWñ
ô 
ˆ	õ   	Ñ*Ô*ð 	ð 	ˆJÝ‘J”JˆEØŒL×Ò Ñ&Ô&Ð&Ý# EÔ$9Ñ:Ô:ð ð �
Ø-×8Ò8Ñ:Ô:�
Ø04×0DÒ0DØ$ j°$¸ñ1ô 1�Ô! *Ñ-Ð-ðð
 ÔÐ*Ø$(×$=Ò$=ØÐ*¨Dñ%ô %ˆEÔ!ð ˆr7   c                 ó¦   — |                       ¦   «         }|                     |j        ||j        z  z   ¦  «        }|                     |||¦  «         |S r1   )r^   r  r•   r«   rà  )r‹   r›   r4  r”   r+  Ú
transitionÚentryReaders          r5   r$  zSTXHeader._readTransition²  sX   € Ø—_’_Ñ&Ô&ˆ
Ø×)Ò)ØŒJ˜ jÔ&;Ñ;Ñ;ñ
ô 
ˆð 	×Ò˜[¨$°Ñ=Ô=Ð=ØÐr7   c                 ó”   — t          |j        ¦  «        }||j        z
  dz  }|                     |                     |¦  «        ¦  «        S rX  )rÛ  r×  r•   rd  r*  )r‹   r›   r”   ÚlimitÚnumLigatureGlyphss        r5   r!  zSTXHeader._readLigaturesº  sF   € Ý�F”KÑ Ô ˆØ" V¤ZÑ/°AÑ5ÐØ×$Ò$ V×%;Ò%;Ð<MÑ%NÔ%NÑOÔOÐOr7   c                 ó  — d}|j         D ]y}|j                             ¦   «         D ]]}t          |t          ¦  «        rF|j        dk    rt          ||j        dz   ¦  «        }|j        dk    rt          ||j        dz   ¦  «        }Œ^Œz|S )Nr   ru  r   )r#  r%  r`   r2   r!   Ú	MarkIndexÚmaxÚCurrentIndex)r‹   rá  Ú
numLookupsr2  r4   s        r5   Ú_countPerGlyphLookupszSTXHeader._countPerGlyphLookups¿  s¤   € ð
 ˆ
Ø”\ð 	Ið 	IˆEØÔ&×-Ò-Ñ/Ô/ð Ið I�Ý˜aÕ!6Ñ7Ô7ð IØ”{ fÒ,Ð,Ý%(¨°Q´[À1±_Ñ%EÔ%E˜
Ø”~¨Ò/Ð/Ý%(¨°Q´^ÀaÑ5GÑ%HÔ%H˜
øðIð Ðr7   c                 ó>  — |j         }g }t          |                      |¦  «        ¦  «        D ]p}|                     d¦  «        }|                     ||                     ¦   «         z   ¦  «         |                     | j                             ||i ¦  «        ¦  «         Œq|S rê   )	r•   r¤   r@  r  r‘   r  rd   r  r’   )r‹   rá  r›   r”   r•   Úlookupsr¬  rÍ  s           r5   r&  zSTXHeader._readPerGlyphLookupsÎ  sœ   € ØŒjˆØˆÝ�t×1Ò1°%Ñ8Ô8Ñ9Ô9ð 	Mð 	MˆAØ!×.Ò.¨qÑ1Ô1ˆLØ×Ò˜c F×$4Ò$4Ñ$6Ô$6Ñ6Ñ7Ô7Ð7Ø�NŠN˜4Ô.×3Ò3°LÀ$ÈÑKÔKÑLÔLÐLÐLØˆr7   Nc                 ó  — t          ¦   «         }| j                             ||||j        d ¬¦  «         t	          |                     ¦   «         d¦  «        }t          |j                             ¦   «         ¦  «        dz   }d}	| j        �|	dz  }	|	| j	        j
        z  }	| j	                             ||j        ¦  «        \  }
}|                      ||j        ||¦  «        \  }}|	t          |¦  «        z   }|t          |¦  «        z   }|t          |¦  «        z   }t	          |                      ||¦  «        d¦  «        }|
�|t          |¦  «        z   }nd }d\  }}|                      ||¦  «        }|                      ||¦  «        }|�9t          |¦  «        dk    sJ ‚|t          |
¦  «        z   }|t          |¦  «        z   }|                     |¦  «         |                     |	¦  «         |                     |¦  «         |                     |¦  «         | j        �|                     |¦  «         |�|                     |¦  «         |�*|                     |¦  «         |                     |¦  «         |                     |¦  «         |                     |¦  «         |                     |¦  «         |                     |¦  «         |
�|                     |
¦  «         |�|                     |¦  «         |�|                     |¦  «         d S d S )N)r¾   r  r   r¨  rï   )NNr   )r   r  rµ   r  r   r  r=  r`   r  r^   ÚactionHeaderSizeÚcompileActionsr#  Ú_compileStatesrÛ  Ú_compilePerGlyphLookupsÚ_compileLigComponentsÚ_compileLigaturesr  rÜ  )r‹   r¸   r”   r¦   r¹   r¾   ÚglyphClassWriterÚglyphClassDataÚglyphClassCountÚglyphClassTableOffsetÚ
actionDataÚactionIndexÚstateArrayDataÚentryTableDataÚstateArrayOffsetÚentryTableOffsetÚperGlyphOffsetÚperGlyphDataÚactionOffsetÚligaturesOffsetÚligComponentsOffsetÚligComponentsDataÚligaturesDatas                          r5   rµ   zSTXHeader.write×  s=  € Ý(™?œ?ÐØÔ×ÒØ˜d I¨uÔ/AÈtð 	ñ 	
ô 	
ð 	
õ Ð-×8Ò8Ñ:Ô:¸AÑ>Ô>ˆÝ˜eÔ0×7Ò7Ñ9Ô9Ñ:Ô:¸QÑ>ˆØ "ÐØÔÐ*Ø! QÑ&Ð!à ¤Ô!AÑAÐØ"&¤/×"@Ò"@ÀÀuÄ|Ñ"TÔ"TÑˆ
�KØ)-×)<Ò)<Ø�%”, °ñ*
ô *
Ñ&ˆ˜ð 1µ3°~Ñ3FÔ3FÑFÐØ+­c°.Ñ.AÔ.AÑAÐØ)­C°Ñ,?Ô,?Ñ?ˆÝ˜4×7Ò7¸¸tÑDÔDÀaÑHÔHˆØÐ!Ø+­c°.Ñ.AÔ.AÑAˆLˆLàˆLà/9Ñ,ˆÐ,Ø ×6Ò6°u¸dÑCÔCÐØ×.Ò.¨u°dÑ;Ô;ˆØÐ(Ý�|Ñ$Ô$¨Ò)Ð)Ð)Ð)Ø".µ°Z±´Ñ"@ÐØ1µCÐ8IÑ4JÔ4JÑJˆOà×Ò˜/Ñ*Ô*Ð*Ø×ÒÐ/Ñ0Ô0Ð0Ø×ÒÐ*Ñ+Ô+Ð+Ø×ÒÐ*Ñ+Ô+Ð+ØÔÐ*Ø×Ò˜nÑ-Ô-Ð-ØÐ#Ø×Ò˜lÑ+Ô+Ð+ØÐ*Ø×ÒÐ1Ñ2Ô2Ð2Ø×Ò˜oÑ.Ô.Ð.Ø×Ò˜Ñ(Ô(Ð(Ø×Ò˜Ñ(Ô(Ð(Ø×Ò˜Ñ(Ô(Ð(Ø×Ò˜Ñ&Ô&Ð&ØÐ!Ø×Ò˜ZÑ(Ô(Ð(ØÐ(Ø×ÒÐ.Ñ/Ô/Ð/ØÐ$Ø×Ò˜]Ñ+Ô+Ð+Ð+Ð+ð %Ð$r7   c           	      óž  — t          ¦   «         }g i }}|D ]ö}t          |¦  «        D ]ä}	|j        |	         }
t          ¦   «         }|
                     |||¦  «         |                     ¦   «         }t          |¦  «        |
j        k    s/J dt          |
¦  «        |
j        t          |¦  «        fz  ¦   «         ‚|                     |¦  «        }|€)t          |¦  «        }|||<   | 	                    |¦  «         | 
                    |¦  «         ŒåŒ÷t          |                     ¦   «         d¦  «        }t          t          |¦  «        d¦  «        }||fS )Nz1%s has staticSize %d, but actually wrote %d bytesrï   )r   r¤   r%  r†   r  rÛ  r«   rõ  r_   rd   r-  r   r   )r‹   r”   ÚstatesrL  rO  ÚstateArrayWriterÚentriesÚentryIDsr2  r3  r6  ÚentryWriterÚ	entryDatar4  rP  rQ  s                   r5   rF  zSTXHeader._compileStates  s`  € Ý(™?œ?ÐØ �ˆØð 	9ð 	9ˆEÝ# OÑ4Ô4ð 9ð 9�
Ø"Ô.¨zÔ:�
Ý+™oœo�Ø×"Ò" ;°°kÑBÔBÐBØ'×2Ò2Ñ4Ô4�	å˜	‘N”N jÔ&;Ò;Ð;Ð;ØIÝ˜Ñ$Ô$ØÔ)Ý˜	‘N”NðMñ ñ <Ô;Ð;ð &Ÿ\š\¨)Ñ4Ô4�
ØÐ%Ý!$ W¡¤�JØ*4�H˜YÑ'Ø—N’N 9Ñ-Ô-Ð-Ø ×,Ò,¨ZÑ8Ô8Ð8Ð8ð#9õ$ Ð-×8Ò8Ñ:Ô:¸AÑ>Ô>ˆÝ�Y wÑ/Ô/°Ñ3Ô3ˆØ˜~Ð-Ð-r7   c                 óš  — | j         €dS |                      |¦  «        }t          |j        ¦  «        |k    s!J dt          |j        ¦  «        |fz  ¦   «         ‚t	          ¦   «         }|j        D ]K}|                     ¦   «         }| j                              ||i |d ¦  «         |                     |d¬¦  «         ŒL|                     ¦   «         S )Nr7   zVlen(AATStateTable.PerGlyphLookups) is %d, but the actions inside the table refer to %drï   r  )	r  r@  rÛ  r'  r   r  rµ   r  r  )r‹   rá  r”   r?  r¸   rÎ  rØ  s          r5   rG  z!STXHeader._compilePerGlyphLookups(  sß   € ØÔÐ&Ø�3Ø×/Ò/°Ñ6Ô6ˆ
Ý�5Ô(Ñ)Ô)¨ZÒ7Ð7Ð7ð;å�5Ô(Ñ)Ô)¨:Ð6ñ7ñ 8Ô7Ð7õ
 ‘”ˆØÔ+ð 	=ð 	=ˆFØ!×.Ò.Ñ0Ô0ˆLØÔ×%Ò% l°D¸"¸fÀdÑKÔKÐKØ× Ò  ¸!Ð Ñ<Ô<Ð<Ð<Ø× Ò Ñ"Ô"Ð"r7   c                 ó¨   — t          |d¦  «        sd S t          ¦   «         }|j        D ]}|                     |¦  «         Œ|                     ¦   «         S )Nr   )r¬   r   r   r-  r  )r‹   rá  r”   r¸   Ú	components        r5   rH  zSTXHeader._compileLigComponents8  s]   € Ý�u˜oÑ.Ô.ð 	Ø�4Ý‘”ˆØÔ,ð 	*ð 	*ˆIØ×Ò˜yÑ)Ô)Ð)Ð)Ø× Ò Ñ"Ô"Ð"r7   c                 óÎ   — t          |d¦  «        sd S t          ¦   «         }|j        D ]*}|                     |                     |¦  «        ¦  «         Œ+|                     ¦   «         S )Nr"  )r¬   r   r"  r-  rm  r  )r‹   rá  r”   r¸   Ú	glyphNames        r5   rI  zSTXHeader._compileLigatures@  sh   € Ý�u˜kÑ*Ô*ð 	Ø�4Ý‘”ˆØœð 	;ð 	;ˆIØ×Ò˜tŸš¨yÑ9Ô9Ñ:Ô:Ð:Ð:Ø× Ò Ñ"Ô"Ð"r7   c                 ó†  — |                      ||¦  «         |                     ¦   «          |                     d|j        z  ¦  «         |                     ¦   «          t	          |j                             ¦   «         ¦  «        D ]1\  }}|                     d||¬¦  «         |                     ¦   «          Œ2t          |j	        ¦  «        D ] \  }}	|                      d|¬¦  «         |                     ¦   «          t	          |	j
                             ¦   «         ¦  «        D ] \  }
}|                     ||d|
id¬¦  «         Œ!|                     d¦  «         |                     ¦   «          Œ¡t          |j        ¦  «        D ]¬\  }}|                      d	|¬¦  «         |                     ¦   «          t	          |                     ¦   «         ¦  «        D ]1\  }}|                     d
||¬¦  «         |                     ¦   «          Œ2|                     d	¦  «         |                     ¦   «          Œ­t          |d¦  «        r¡|                      d¦  «         |                     ¦   «          t          t          |d¦  «        ¦  «        D ]1\  }}|                     d||¬¦  «         |                     ¦   «          Œ2|                     d¦  «         |                     ¦   «          t          |d¦  «        r”|                      d¦  «         |                     ¦   «          t	          |j        ¦  «        D ]-}|                     d|¬¦  «         |                     ¦   «          Œ.|                     d¦  «         |                     ¦   «          |                      |||||¦  «         |                     |¦  «         |                     ¦   «          d S )NzGlyphClassCount=%sÚ
GlyphClass©rp  r¹   ÚState©ÚindexÚonGlyphClassÚ
Transition)r”   rÁ   rP   r  rÀ  r   ÚLigComponent)rl  r¹   Ú_MortLigatureRebaseÚMortLigatureRebaseÚ	Component)rÄ  rß   rS  r  rt  r  rÿ  rÞ   r´   r#  r%  ræ  rÅ  r'  r¬   r”  rp  Ú_xmlWriteLigatures)r‹   rÆ   r”   r¹   rP   rÁ   ÚgÚklassr1  r2  r3  Útransr“   rÎ  rp  rq  ÚcomponentIndexs                    r5   rÇ   zSTXHeader.xmlWriteH  sî  € Ø×Ò˜4 Ñ'Ô'Ð'Ø×ÒÑÔÐØ×ÒÐ.°Ô1FÑFÑGÔGÐGØ×ÒÑÔÐÝ˜uÔ1×7Ò7Ñ9Ô9Ñ:Ô:ð 	 ð 	 ‰HˆAˆuØ×Ò °A¸UÐÑCÔCÐCØ×ÒÑÔÐÐÝ!*¨5¬<Ñ!8Ô!8ð 	 ð 	 ÑˆJ˜Ø×Ò˜w¨jÐÑ9Ô9Ð9Ø×ÒÑÔÐÝ%+¨EÔ,=×,CÒ,CÑ,EÔ,EÑ%FÔ%Fð ð Ñ!�
˜EØ—’ØØØ)¨:Ð6Ø%ð	 ñ ô ð ð ð ×Ò˜WÑ%Ô%Ð%Ø×ÒÑÔÐÐÝ" 5Ô#8Ñ9Ô9ð 	 ð 	 ‰IˆAˆvØ×ÒÐ/°qÐÑ9Ô9Ð9Ø×ÒÑÔÐÝ$ V§\¢\¡^¤^Ñ4Ô4ð $ð $‘
��sØ×#Ò# H°EÀÐ#ÑEÔEÐEØ×!Ò!Ñ#Ô#Ð#Ð#Ø×ÒÐ-Ñ.Ô.Ð.Ø×ÒÑÔÐÐÝ�5˜/Ñ*Ô*ð 	 Ø×Ò˜Ñ/Ô/Ð/Ø×ÒÑÔÐÝ#¥G¨E°?Ñ$CÔ$CÑDÔDð $ð $‘��3Ø×#Ò# N¸!À3Ð#ÑGÔGÐGØ×!Ò!Ñ#Ô#Ð#Ð#Ø×Ò˜_Ñ-Ô-Ð-Ø×ÒÑÔÐÝ�5Ð/Ñ0Ô0ð 	 Ø×ÒÐ3Ñ4Ô4Ð4Ø×ÒÑÔÐÝ"(¨Ô)BÑ"CÔ"Cð $ð $�Ø×#Ò# K°~Ð#ÑFÔFÐFØ×!Ò!Ñ#Ô#Ð#Ð#Ø×ÒÐ1Ñ2Ô2Ð2Ø×ÒÑÔÐØ×Ò 	¨4°¸¸eÑDÔDÐDØ×Ò˜ÑÔÐØ×ÒÑÔÐÐÐr7   c                 ól  — t          |d¦  «        sd S |                     d¦  «         |                     ¦   «          t          t	          |d¦  «        ¦  «        D ]1\  }}|                     d||¬¦  «         |                     ¦   «          Œ2|                     d¦  «         |                     ¦   «          d S )Nr"  ÚLigature)rl  rp  )r¬   rÄ  rß   r´   r”  rÞ   rÅ  )r‹   rÆ   r”   r¹   rP   rÁ   r“   rt  s           r5   rs  zSTXHeader._xmlWriteLigaturesx  sÀ   € Ý�u˜kÑ*Ô*ð 	ØˆFØ×Ò˜;Ñ'Ô'Ð'Ø×ÒÑÔÐÝ�g e¨[Ñ9Ô9Ñ:Ô:ð 	 ð 	 ‰DˆAˆqØ×Ò 
°!¸1ÐÑ=Ô=Ð=Ø×ÒÑÔÐÐØ×Ò˜Ñ%Ô%Ð%Ø×ÒÑÔÐÐÐr7   c                 óJ  — t          ¦   «         }t          t          |¦  «        D �]\  }}}|dk    r(|d         }|d         }	t          |	¦  «        |j        |<   Œ5|dk    r2|                      |||¦  «        }
|j                             |
¦  «         Œm|dk    r7| j         	                    |||¦  «        }|j
                             |¦  «         Œª|dk    r|                      |||¦  «        |_        ŒÍ|dk    r%d„ t          t          |¦  «        D ¦   «         |_        Œø|d	k    r|                      |||¦  «        |_        �Œt!          |j                             ¦   «         ¦  «        }|                     d
„ |j        D ¦   «         ¦  «         t'          |d¬¦  «        dz   |_        |S )Nrh  rp  r¹   rj  r  r   rq  c                 óL   — h | ]!\  }}}|d k    ¯t          |d         ¦  «        ’Œ"S )rr  rl  ©r   )rŸ   ÚcomponentNameÚcomponentAttrsÚ_componentContents       r5   ú	<setcomp>z$STXHeader.xmlRead.<locals>.<setcomp>•  sE   € ð -ð -ð -áH˜ ~Ð7Hð %¨Ò3Ð3õ	 ˜^¨GÔ4Ñ5Ô5ð 4Ð3Ð3r7   r"  c              3   ó.   K  — | ]}|j         D ]}|V — ŒŒd S r1   )r%  )rŸ   r2  r3  s      r5   r    z$STXHeader.xmlRead.<locals>.<genexpr>Ÿ  sJ   è è € ð 
ð 
Ø À5ÔCTð
ð 
Ø5?ˆJð
ð 
ð 
ð 
ð 
ð 
ð 
r7   rM  ©Údefaultr   )r   ru  rí  r   r  Ú_xmlReadStater#  rd   r  rÃ   r'  Ú_xmlReadLigComponentsr   rp  Ú_xmlReadLigaturesr"  rs  r`   Úextendr=  r  )r‹   rÁ   rÂ   r”   rá  rî  rï  rÂ  rp  r¹   r2  rÎ  ÚglyphClassess                r5   rÃ   zSTXHeader.xmlReadƒ  sç  € Ý‘”ˆÝ-3µG¸WÑ-EÔ-Eð 	Uñ 	UÑ)ˆG�X˜zØ˜,Ò&Ð&Ø  Ô)�Ø  Ô)�Ý,4°U©O¬O�Ô" 5Ñ)Ð)Ø˜GÒ#Ð#Ø×*Ò*¨8°ZÀÑFÔF�Ø”×#Ò# EÑ*Ô*Ð*Ð*ØÐ,Ò,Ð,ØÔ,×4Ò4°X¸zÈ4ÑPÔP�ØÔ%×,Ò,¨VÑ4Ô4Ð4Ð4Ø˜OÒ+Ð+Ø&*×&@Ò&@Ø˜j¨$ñ'ô '�Ô#Ð#ð Ð0Ò0Ð0ð-ð -åLRÝ ñMô Mð-ñ -ô -�Ô)Ð)ð ˜KÒ'Ð'Ø"&×"8Ò"8¸À:ÈtÑ"TÔ"T�”ùÝ˜EÔ.×5Ò5Ñ7Ô7Ñ8Ô8ˆØ×Òð 
ð 
Ø$)¤Lð
ñ 
ô 
ñ 	
ô 	
ð 	
õ !$ L¸"Ð =Ñ =Ô =ÀÑ AˆÔØˆr7   c                 óü   — t          ¦   «         }t          t          |¦  «        D ]W\  }}}|dk    rKt          |d         ¦  «        }|                      ¦   «         }	|	                     ||||¦  «         |	|j        |<   ŒX|S )Nrn  rm  )r   ru  rí  r   r^   rï  r%  )
r‹   rÁ   rÂ   r”   r2  rî  rï  rÂ  r3  r6  s
             r5   r„  zSTXHeader._xmlReadState¥  s„   € Ý‘
”
ˆÝ-3µG¸WÑ-EÔ-Eð 	;ð 	;Ñ)ˆG�X˜zØ˜,Ò&Ð&Ý% h¨~Ô&>Ñ?Ô?�
Ø!Ÿ_š_Ñ.Ô.�
Ø×"Ò" 7¨H°jÀ$ÑGÔGÐGØ0:�Ô! *Ñ-øØˆr7   c                 óž   — g }t          t          |¦  «        D ]4\  }}}|dk    r(|                     t          |d         ¦  «        ¦  «         Œ5|S )Nro  r¹   )ru  rí  rd   r   )r‹   rÁ   rÂ   r”   ÚligComponentsrî  rï  Ú_eltContents           r5   r…  zSTXHeader._xmlReadLigComponents¯  s\   € ØˆÝ.4µW¸gÑ.FÔ.Fð 	Bð 	BÑ*ˆG�X˜{Ø˜.Ò(Ð(Ø×$Ò$¥X¨h°wÔ.?Ñ%@Ô%@ÑAÔAÐAøØÐr7   c                 ó„   — g }t          t          |¦  «        D ]'\  }}}|dk    r|                     |d         ¦  «         Œ(|S )Nry  rp  )ru  rí  rd   )r‹   rÁ   rÂ   r”   Úligsrî  rï  rŒ  s           r5   r†  zSTXHeader._xmlReadLigatures¶  sO   € ØˆÝ.4µW¸gÑ.FÔ.Fð 	/ð 	/Ñ*ˆG�X˜{Ø˜*Ò$Ð$Ø—’˜H WÔ-Ñ.Ô.Ð.øØˆr7   r1   )rb   rÐ   rÑ   rŒ   r’   r$  r!  r@  r&  rµ   rF  rG  rH  rI  rÇ   rs  rÃ   r„  r…  r†  rž   r7   r5   r  r  w  s,  € € € € € ØEGð 	'ð 	'ð 	'ð 	'ð 	'ð-ð -ð -ð^ð ð ðPð Pð Pð
ð ð ðð ð ð5,ð 5,ð 5,ð 5,ðn.ð .ð .ð4#ð #ð #ð #ð #ð #ð#ð #ð #ð.ð .ð .ð`	ð 	ð 	ð ð  ð  ðDð ð ðð ð ðð ð ð ð r7   r  c                   óp   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zed„ ¦   «         Z	dd„Z
ed	„ ¦   «         Zd
„ Zd„ Zd„ ZdS )ÚStateHeaderz@Converter for the obsolete, non-extended AAT state-table format.c                 ó˜	  ‡‡‡ ‡!— t          ¦   «         Š!|j        }|                     ¦   «         ‰!_        |                     ¦   «         }|                     ¦   «         }|                     ¦   «         }‰!j        dk    rt	          d¦  «        ‚d }d x}	x}
}d }t          | j        t          ¦  «        r|                     ¦   «         }�njt          | j        t          ¦  «        rõ|                     ¦   «         }	|                     ¦   «         }
|                     ¦   «         }|
|k    s||
z
  dz  rt	          d¦  «        ‚| 	                    d¦  «        }| 
                    ||
z   ¦  «         |                     ||
z
  dz  ¦  «        }t          d„ |D ¦   «         ¦  «        rt	          d¦  «        ‚d„ |D ¦   «         ‰!_        g ‰!_        t          ¦   «         ‰!_        n[t          | j        t"          ¦  «        rA|                     ¦   «         }	| 	                    d¦  «        }| 
                    ||	z   ¦  «         | 	                    d¦  «        }| 
                    ||z   ¦  «         |                     ¦   «         Š|                     ¦   «         }|                     |¦  «        }ˆˆfd„t'          |¦  «        D ¦   «         ‰!_        | 	                    d¦  «        }| 
                    ||z   ¦  «         | 	                    d¦  «        }| 
                    ||z   ¦  «         ||z
  }|dk     rt	          d	¦  «        ‚|‰!j        z  }i }t+          |¦  «        D ]˜}t-          ¦   «         }‰!j                             |¦  «         t+          ‰!j        ¦  «        D ]Y}|                     ¦   «         }|                     |¦  «        }|€"|                      ||‰||||
|‰!¦	  «	        }|||<   ||j        |<   ŒZŒ™|�|                      ‰!|‰||¦  «         nÎ|�Ì|dz  Š ˆ ˆ!fd
„‰!j        D ¦   «         ‰!_        ‰!j        D ]}‰!j        |xx         ‰ z  cc<   Œ|                      ‰!t?          ‰                      ¦   «         ¦  «        ¦  «        }| 	                    d¦  «        }| 
                    ||z   ¦  «         ‰ !                    |                     |¦  «        ¦  «        ‰!_        ‰!S )Nr   z%mort state table has no glyph classesr  z%invalid mort ligature component tablec              3   ó    K  — | ]	}|d z  V — Œ
dS )r  Nrž   ©rŸ   rd  s     r5   r    z#StateHeader.read.<locals>.<genexpr>Þ  s&   è è € Ð@Ð@ Y�9˜q‘=Ð@Ð@Ð@Ð@Ð@Ð@r7   z%invalid mort ligature component valuec                 ó   — g | ]}|d z  ‘ŒS )r  rž   r“  s     r5   rr  z$StateHeader.read.<locals>.<listcomp>à  s   € Ð"QÐ"QÐ"Q°i 9°¡>Ð"QÐ"QÐ"Qr7   c                 óH   •— i | ]\  }}‰                      ‰|z   ¦  «        |“ŒS rž   r°  )rŸ   r“   r3  rŸ  r”   s      €€r5   r²  z$StateHeader.read.<locals>.<dictcomp>í  sA   ø€ ð 
ð 
ð 
á��:ð ×Ò˜j¨1™nÑ-Ô-¨zð
ð 
ð 
r7   z/mort state-array offset follows its entry tablec                 ó6   •— h | ]}‰j         |         ‰k    ¯|’ŒS rž   )r   )rŸ   rw  ÚligatureBaserá  s     €€r5   r€  z#StateHeader.read.<locals>.<setcomp>  s6   ø€ ð )ð )ð )à"ØÔ& ~Ô6¸,ÒFÐFð àFÐFÐFr7   )"r   r•   r'  r  rò  rd  r^   r!   r#   r  r‘   r*  Úanyr   r"  Úsetrp  r$   r@  r´   r  r¤   r   r#  rd   r>  r_   r$  r%  Ú_readContextualLookupsÚ_countLegacyLigaturesrÛ  r�  rd  )"r‹   r›   r”   r¦   r•   ÚclassTableOffsetrR  rS  ÚsubstitutionTableOffsetrV  ÚcomponentOffsetÚligatureOffsetr+  ÚcomponentReaderÚrawComponentsr(  Ú
glyphCountrˆ  r)  r*  ÚstateDataLengthr0  ÚtransitionCacheÚ_stateIndexr2  r3  r4  r6  rw  ÚligatureCountÚligatureReaderrŸ  r—  rá  s"     `                            @@@r5   r’   zStateHeader.readÁ  sc  øøøø€ Ý‘”ˆØŒjˆØ &× 1Ò 1Ñ 3Ô 3ˆÔØ!×,Ò,Ñ.Ô.ÐØ!×,Ò,Ñ.Ô.ÐØ!×,Ò,Ñ.Ô.ÐØÔ  AÒ%Ð%ÝÐDÑEÔEÐEà"&ÐØ:>Ð>ˆÐ>�¨ØˆÝ�d”oÕ'<Ñ=Ô=ð 	2Ø&,×&7Ò&7Ñ&9Ô&9Ð#Ñ#Ý˜œÕ)<Ñ=Ô=ð 	2Ø!×,Ò,Ñ.Ô.ˆLØ$×/Ò/Ñ1Ô1ˆOØ#×.Ò.Ñ0Ô0ˆNà .Ò0Ð0Ø" _Ñ4¸Ñ9ð 1õ !Ð!HÑIÔIÐIØ$×1Ò1°!Ñ4Ô4ˆOØ× Ò   Ñ!6Ñ7Ô7Ð7Ø+×;Ò;Ø /Ñ1°aÑ7ñô ˆMõ Ð@Ð@°-Ð@Ñ@Ô@Ñ@Ô@ð JÝ Ð!HÑIÔIÐIØ"QÐ"QÀ=Ð"QÑ"QÔ"QˆEÔØ ˆEŒOÝ(+©¬ˆEÔ%Ð%Ý˜œÕ)=Ñ>Ô>ð 	2Ø!×,Ò,Ñ.Ô.ˆLØ!×.Ò.¨qÑ1Ô1ˆLØ×Ò˜c LÑ0Ñ1Ô1Ð1à!×.Ò.¨qÑ1Ô1ÐØ×Ò˜cÐ$4Ñ4Ñ5Ô5Ð5Ø%×0Ò0Ñ2Ô2ˆ
Ø%×0Ò0Ñ2Ô2ˆ
Ø'×6Ò6°zÑBÔBˆð
ð 
ð 
ð 
ð 
å!*¨<Ñ!8Ô!8ð
ñ 
ô 
ˆÔð
 "×.Ò.¨qÑ1Ô1ÐØ×Ò˜cÐ$4Ñ4Ñ5Ô5Ð5Ø!×.Ò.¨qÑ1Ô1ÐØ×Ò˜cÐ$4Ñ4Ñ5Ô5Ð5Ø*Ð-=Ñ=ˆØ˜QÒÐÝÐNÑOÔOÐOØ# uÔ'<Ñ<ˆ	ØˆÝ  Ñ+Ô+ð 	;ð 	;ˆKÝ‘J”JˆEØŒL×Ò Ñ&Ô&Ð&Ý# EÔ$9Ñ:Ô:ð ;ð ;�
Ø-×7Ò7Ñ9Ô9�
Ø,×0Ò0°Ñ<Ô<�
ØÐ%Ø!%×!5Ò!5Ø(Ø"ØØ$ØØ(Ø'Ø&Øñ
"ô 
"�Jð 3=�O JÑ/Ø0:�Ô! *Ñ-Ð-ð!;ð$ #Ð.Ø×'Ò'Ø�v˜t SÐ*Añô ð ð ð Ð'Ø)¨QÑ.ˆLð)ð )ð )ð )ð )à&+Ô&?ð)ñ )ô )ˆEÔ%ð
 #(Ô";ð Dð D�ð Ô# NÐ3Ð3Ô3°|ÑCÐ3Ð3Ñ3Ð3à ×6Ò6°u½cÀ$×BTÒBTÑBVÔBVÑ>WÔ>WÑXÔXˆMØ#×0Ò0°Ñ3Ô3ˆNØ×Ò  nÑ 4Ñ5Ô5Ð5Ø"×3Ò3Ø×.Ò.¨}Ñ=Ô=ñô ˆEŒOð ˆr7   c
           	      ó  — |                       ¦   «         }
t          | j         t          ¦  «        rdn|
j        }|                     |j        ||z  z   ¦  «        }t          | j         t          ¦  «        r˜|                     ¦   «         |
_        |                     ¦   «         }t          |dz  ¦  «        |
_
        t          |dz  ¦  «        |
_        |dz  |
_        |                     ¦   «         |
_        |                     ¦   «         |
_        nÂt          | j         t          ¦  «        r‘|                     ¦   «         |
_        |                     ¦   «         }t          |dz  ¦  «        |
_        t          |dz  ¦  «        |
_        d|
_        g |
_        |dz  }|r |                      |||||||	¦  «        |
_        n|
                     |||¦  «         |
j        |z
  }|dk     s
||	j        z  rt+          d¦  «        ‚||	j        z  |
_        |
S )Nrï   é €  é @  éÿ?  r   zinvalid mort new-state offset)r^   rd  r#   r«   r  r•   r!   r'  ÚNewStateÚboolÚSetMarkÚDontAdvanceÚReservedFlagsr  Ú_MortMarkOffsetÚ_MortCurrentOffsetÚSetComponentÚActionsÚ_readLigatureActionsrà  r  rò  )r‹   r›   r4  r”   r+  ÚstateTablePosrR  rž  rŸ  rá  r6  Ú	entrySizer7  rƒ  ÚligActionOffsetÚnewStateOffsets                   r5   r$  zStateHeader._readTransition(  s  € ð —_’_Ñ&Ô&ˆ
õ ˜$œ/Õ+>Ñ?Ô?ð'ˆAˆAàÔ&ð 	ð
 ×)Ò)¨&¬*°zÀIÑ7MÑ*MÑNÔNˆå�d”oÕ'<Ñ=Ô=ð 	BØ"-×"8Ò"8Ñ":Ô":ˆJÔØ×*Ò*Ñ,Ô,ˆEÝ!% e¨f¡nÑ!5Ô!5ˆJÔÝ%)¨%°&©.Ñ%9Ô%9ˆJÔ"Ø',¨v¡~ˆJÔ$Ø)4×)>Ò)>Ñ)@Ô)@ˆJÔ&Ø,7×,AÒ,AÑ,CÔ,CˆJÔ)Ð)Ý˜œÕ)<Ñ=Ô=ð 	BØ"-×"8Ò"8Ñ":Ô":ˆJÔØ×*Ò*Ñ,Ô,ˆEÝ&*¨5°6©>Ñ&:Ô&:ˆJÔ#Ý%)¨%°&©.Ñ%9Ô%9ˆJÔ"Ø'(ˆJÔ$Ø!#ˆJÔØ# f™nˆOØð 	Ø%)×%>Ò%>ØØØ!Ø#Ø#Ø"Øñ&ô &�
Ô"øð × Ò  ¨d°LÑAÔAÐAà#Ô,Ð/?Ñ?ˆØ˜AÒÐ °%Ô2GÑ!GÐÝÐ<Ñ=Ô=Ð=Ø,°Ô0EÑEˆ
ÔØÐr7   c                 ó  ‡‡‡— d„ |j         D ¦   «         }t          d„ |D ¦   «         ¦  «        }d„ t          |¦  «        D ¦   «         }‰                     ¦   «         Št	          |j        ¦  «        |z
  }	|D ]Ñ}
t          d|dz   dz  |
z
  ¦  «        Št          t	          ‰¦  «        dz
  |	dz
  dz  |
z
  ¦  «        }i }‰|k    rk|                     d¦  «        }| 	                    |d|
‰z   z  z   ¦  «         | 
                    |‰z
  dz   ¦  «        }ˆˆˆfd„t          |¦  «        D ¦   «         }|j                             |¦  «         ŒÒ|D ]<}|j        r||j                 nd|_        |j        r||j                 nd|_        |`|`Œ=d S )	Nc                 óJ   — h | ] }|j                              ¦   «         D ]}|’ŒŒ!S rž   ©r%  r`   ©rŸ   r2  r6  s      r5   r€  z5StateHeader._readContextualLookups.<locals>.<setcomp>b  óN   € ð 
ð 
ð 
àØ#Ô/×6Ò6Ñ8Ô8ð
ð 
ð ð ð
ð 
ð 
ð 
r7   c                 ó8   — h | ]}|j         |j        fD ]}|¯|’ŒŒS rž   )r±  r²  )rŸ   r6  r  s      r5   r€  z5StateHeader._readContextualLookups.<locals>.<setcomp>h  sU   € ð ð ð ààÔ.ØÔ1ððð ð ð ðØðð ð ð r7   c                 ó   — i | ]\  }}||“Œ	S rž   rž   )rŸ   r“   r  s      r5   r²  z6StateHeader._readContextualLookups.<locals>.<dictcomp>r  s   € ÐGÐGÐG¡y q¨&˜ ÐGÐGÐGr7   r   r   r  c                 ó`   •— i | ]*\  }}|d k    ¯‰‰|z            ‰                      |¦  «        “Œ+S )r   r°  )rŸ   r“   ÚreplacementrŸ  r”   Ú
glyphOrders      €€€r5   r²  z6StateHeader._readContextualLookups.<locals>.<dictcomp>…  sK   ø€ ð ð ð á&˜˜;Ø" aÒ'Ð'ð ˜z¨A™~Ô.°×0AÒ0AÀ+Ñ0NÔ0Nà'Ð'Ð'r7   ru  )r#  rt  r´   r�  rÛ  r×  r=  Úminr  r‘   r*  r'  rd   r±  r<  r²  r>  )r‹   rá  r›   r”   r¶  r�  ÚtransitionsrÏ  ÚoffsetToIndexÚ	availabler  r   rÎ  rÍ  Úreplacementsr6  rŸ  rÃ  s      `            @@r5   rš  z"StateHeader._readContextualLookups_  s  øøø€ ð
ð 
àœð
ñ 
ô 
ˆõ
 ðð à"-ðñ ô ñ

ô 

ˆð HÐGµI¸gÑ4FÔ4FÐGÑGÔGˆØ×'Ò'Ñ)Ô)ˆ
õ ˜œÑ$Ô$ }Ñ4ˆ	Øð 	1ð 	1ˆFõ ˜QÐ!8¸1Ñ!<ÀÑ BÀVÑ KÑLÔLˆJÝ�C 
™OœO¨aÑ/°)¸a±-ÀAÑ1EÈÑ1NÑOÔOˆIØˆFØ˜YÒ&Ð&Ø%×2Ò2°1Ñ5Ô5�Ø×!Ò! -°!°vÀ
Ñ7JÑ2KÑ"KÑLÔLÐLØ+×;Ò;¸IÈ
Ñ<RÐUVÑ<VÑWÔW�ðð ð ð ð ð å*3°LÑ*AÔ*Aðñ ô �ð
 Ô!×(Ò(¨Ñ0Ô0Ð0Ð0Ø%ð 	.ð 	.ˆJð Ô-ð�˜jÔ8Ô9Ð9àð Ô ð Ô0ð�˜jÔ;Ô<Ð<àð Ô#ð
 Ð*ØÐ-Ð-ð	.ð 	.r7   c                 óä  — |                      d¦  «        }|                     ||z   ¦  «         t          |                     ¦   «         ¦  «        }	g }
d}d}|�s|                     ¦   «         }t          |dz  ¦  «        }t          |dz  ¦  «        }|dz  }|dz  r|dz  }||dz  z
  }|t          |j        ¦  «        k    s	||	z   dk    rt          d¦  «        ‚|s|ra|s_t          d|¦  «        }t          t          |j        ¦  «        ||	z   ¦  «        }|j
                             t          ||¦  «        ¦  «         d	}t          ¦   «         }||_        ||_        |
                     |¦  «         |�¯|
S )
Nr   Fì        é   @éÿÿÿ?é    r  z/mort ligature component offset is out of boundsT)r  r‘   rÛ  r�  r  r­  r   rò  r=  rÄ  rp  Úupdater¤   r"   ÚStoreÚGlyphIndexDeltard   )r‹   r›   r”   r¶  r¸  rž  rŸ  rá  r+  r¢  rÐ  Úrebasedr¸  r¹   ÚstoreÚcomponentWordOffsetrw  Ústartr9  Úactions                       r5   rµ  z StateHeader._readLigatureActions™  s¡  € ð ×*Ò*¨1Ñ-Ô-ˆØ×Ò˜-¨/Ñ9Ñ:Ô:Ð:Ý˜×+Ò+Ñ-Ô-Ñ.Ô.ˆ
ØˆØˆØˆØñ 	"Ø ×*Ò*Ñ,Ô,ˆEÝ˜ 
Ñ*Ñ+Ô+ˆDÝ˜ Ñ+Ñ,Ô,ˆEØ"'¨*Ñ"4ÐØ" ZÑ/ð 2Ø# zÑ1Ð#Ø0°?ÀaÑ3GÑGˆNà¥# eÔ&9Ñ":Ô":Ò:Ð:Ø! JÑ.°!Ò3Ð3å Ð!RÑSÔSÐSØð ˜ð  wð Ý˜A˜~Ñ.Ô.�Ý�C Ô 3Ñ4Ô4°nÀzÑ6QÑRÔR�ØÔ)×0Ò0µ°u¸eÑ1DÔ1DÑEÔEÐEØ�å‘[”[ˆFØ ˆFŒLØ%3ˆFÔ"Ø�MŠM˜&Ñ!Ô!Ð!ð- ñ 	"ð. ˆr7   c                 ó˜  — d}d„ | j         D ¦   «         }|D ]³}d}t          |j        ¦  «        D ]š\  }}t          d|j        ¦  «        }t          t          | j        ¦  «        |j        |z   ¦  «        }	|t          | j        ||	…         d¬¦  «        z  }|j        s|t          |j        ¦  «        dz
  k    rt          ||dz   ¦  «        }Œ›Œ´|S )Nr   c                 óJ   — h | ] }|j                              ¦   «         D ]}|’ŒŒ!S rž   r¼  r½  s      r5   r€  z4StateHeader._countLegacyLigatures.<locals>.<setcomp>Å  r¾  r7   r‚  r   )	r#  r´   r´  r=  rÐ  rÄ  rÛ  r   rÏ  )
rá  r¢  r§   rÅ  r6  ÚcumulativeMaxrl  rÕ  rÔ  r9  s
             r5   r›  z!StateHeader._countLegacyLigaturesÂ  sÿ   € àˆð
ð 
àœð
ñ 
ô 
ˆð
 &ð 
	:ð 
	:ˆJØˆMÝ!*¨:Ô+=Ñ!>Ô!>ð :ð :‘��vÝ˜A˜vÔ5Ñ6Ô6�ÝÝ˜Ô+Ñ,Ô,ØÔ*¨ZÑ7ñô �ð ¥ UÔ%8¸¸u¸Ô%EÈqÐ!QÑ!QÔ!QÑQ�Ø”<ð : 5­C°
Ô0BÑ,CÔ,CÀaÑ,GÒ#GÐ#GÝ  }°qÑ'8Ñ9Ô9�Eøð:ð ˆr7   Nc           	      óÆ  ‡ ‡‡ ‡!‡"‡#‡$‡%— |j         Š#d‰#cxk     rdk    sn t          d¦  «        ‚t          ˆfd„|j                             ¦   «         D ¦   «         ¦  «        }|rX|d         d         }|d         d         }t          |¦  «        Š t          ˆ fd„t          ||dz   ¦  «        D ¦   «         ¦  «        }	nd}d}	t          j	        d	|t          |	¦  «        ¦  «        |	z   }
‰ j                             ‰|j        ¦  «        \  }Š"g }i }g }|j        D ]Û}g }t          ‰#¦  «        D ]²}|j        |         }t          ¦   «         }|                     |‰‰"¦  «         |                     ¦   «         }|                     |¦  «        }|€>t          |¦  «        }|d
k    rt          d¦  «        ‚|||<   |                     |¦  «         |                     |¦  «         Œ³|                     |¦  «         ŒÜd}t)          ‰ j        t*          ¦  «        rd}n9t)          ‰ j        t,          ¦  «        rd}nt)          ‰ j        t.          ¦  «        rd}d|z   }‰                      |t          |
¦  «        z   d¦  «        Š%t          d„ |D ¦   «         ¦  «        }‰                      ‰%t          |¦  «        z   d¦  «        }t)          ‰ j        t,          ¦  «        rdn‰ j        j        }|t          |¦  «        |z  z   }d}d}d Š!d Š$t)          ‰ j        t*          ¦  «        r‰                      |‰|¦  «        \  }}Š!n}t)          ‰ j        t,          ¦  «        r‰                      |‰||¦  «        \  }}Š$nFt)          ‰ j        t.          ¦  «        r,|dk    rt          d¦  «        ‚t          j	        d|¦  «        }|}d                     ˆ!ˆˆ"ˆ#ˆ$ˆ ˆ%fd„|D ¦   «         ¦  «        }t          j	        d‰#|‰%|¦  «        }|||
z   z  }t;          |d¦  «        |z   }t;          |d¦  «        |z   |z   }t;          |d¦  «        }t          |¦  «        dk    rt          d¦  «        ‚|                     |¦  «         d S )Nr   é   z0mort state tables support 1 to 256 glyph classesc              3   óL   •K  — | ]\  }}‰                      |¦  «        |fV — Œd S r1   ro  )rŸ   rp  r3  r”   s      €r5   r    z$StateHeader.write.<locals>.<genexpr>Ü  sL   øè è € ð 
ð 
á!��zð �_Š_˜UÑ#Ô# ZÐ0ð
ð 
ð 
ð 
ð 
ð 
r7   rM  c              3   óD   •K  — | ]}‰                      |d ¦  «        V — ŒdS )r   N)r_   )rŸ   r›  ÚclassValuess     €r5   r    z$StateHeader.write.<locals>.<genexpr>ä  sE   øè è € ð ð àð —’ ¨Ñ+Ô+ðð ð ð ð ð r7   r   r7   ú>HHéÿ   z-mort state tables support at most 256 entriesr  rg  rŽ   c              3   ó$   K  — | ]}|D ]}|V — ŒŒd S r1   rž   )rŸ   ÚrowÚentrys      r5   r    z$StateHeader.write.<locals>.<genexpr>  s/   è è € ÐJÐJ CÀcÐJÐJ¸U˜%ÐJÐJÐJÐJÐJÐJÐJr7   rï   ru  z,mort insertion-action offset exceeds 16 bitsrñ  c           
   3   óN   •K  — | ]}‰                      |‰‰‰‰‰‰¦  «        V — Œ d S r1   )Ú_compileTransition)	rŸ   r6  ÚcontextOffsetsr”   ÚgenericActionIndexrL  ÚligatureActionOffsetsr‹   rR  s	     €€€€€€€r5   r    z$StateHeader.write.<locals>.<genexpr>*  s^   øè è € ð 
ð 
ð ð ×#Ò#ØØØ"Ø ØØØ%ñô ð
ð 
ð 
ð 
ð 
ð 
r7   z>HHHHz$mort state table exceeds 65535 bytes)r  rò  rt  r  rÿ  ÚdictÚbytesr¤   ró  rô  rÛ  r^   rE  r#  r%  r   r†   r  r_   rd   rd  r!   r#   r$   Ú_alignedr«   Ú_compileContextualLookupsÚ_compileLigatureDatar�  r   rÜ  )&r‹   r¸   r”   r¦   r¹   r¾   rˆ  rŸ  r   ÚclassesÚ	classDataÚgenericActionDatar^  r_  ÚstateEntryIDsr2  rá  r3  r6  ÚtransitionWriterrÓ  r4  Ú	extraSizerœ  Ú	stateDatarS  r·  Ú
tailOffsetÚextraÚtailra  r×  rÝ  rå  ræ  rL  rç  rR  s&   ` `                             @@@@@@r5   rµ   zStateHeader.write×  s%  øøøøøøøø€ ØÔ/ˆØ�?Ð)Ð)Ò)Ð) cÒ)Ð)Ð)Ð)ÝÐOÑPÔPÐPåð 
ð 
ð 
ð 
à%*Ô%7×%=Ò%=Ñ%?Ô%?ð
ñ 
ô 
ñ 
ô 
ˆð ð 
	Ø% aœ¨Ô+ˆJØ$ RÔ(¨Ô+ˆIÝ˜|Ñ,Ô,ˆKÝð ð ð ð å$ Z°¸Q±Ñ?Ô?ðñ ô ñ ô ˆGˆGð
 ˆJØˆGÝ”K  zµ3°w±<´<Ñ@Ô@À7ÑJˆ	à04´×0NÒ0NØ�%”,ñ1
ô 1
Ñ-ÐÐ-ð ˆØˆØˆØ”\ð 	&ð 	&ˆEØˆCÝ# OÑ4Ô4ð 'ð '�
Ø"Ô.¨zÔ:�
Ý#0¡?¤?Ð Ø×"Ò"Ð#3°TÐ;MÑNÔNÐNØ&×1Ò1Ñ3Ô3�Ø%Ÿ\š\¨#Ñ.Ô.�
ØÐ%Ý!$ W¡¤�JØ! DÒ(Ð(Ý(ØKñô ð ð %/�H˜S‘MØ—N’N :Ñ.Ô.Ð.Ø—
’
˜:Ñ&Ô&Ð&Ð&Ø× Ò  Ñ%Ô%Ð%Ð%àˆ	Ý�d”oÕ'<Ñ=Ô=ð 	ØˆIˆIÝ˜œÕ)<Ñ=Ô=ð 	ØˆIˆIÝ˜œÕ)=Ñ>Ô>ð 	ØˆIØ˜y™=ÐØŸ=š=Ð)9½CÀ	¹N¼NÑ)JÈAÑNÔNÐÝÐJÐJ¨=ÐJÑJÔJÑJÔJˆ	ØŸ=š=Ð)9½CÀ	¹N¼NÑ)JÈAÑNÔNÐõ ˜$œ/Õ+>Ñ?Ô?ð,ˆAˆAà”Ô+ð 	ð
 &­¨G©¬°yÑ(@Ñ@ˆ
àˆØˆØˆØ $ÐÝ�d”oÕ'<Ñ=Ô=ð 	%Ø*.×*HÒ*HØ�t˜Zñ+ô +Ñ'ˆE�4˜˜õ ˜œÕ)<Ñ=Ô=ð 	%Ø15×1JÒ1JØ�t˜W jñ2ô 2Ñ.ˆE�4Ð.Ð.õ ˜œÕ)=Ñ>Ô>ð 	%Ø˜FÒ"Ð"Ý Ð!OÑPÔPÐPÝ”K  jÑ1Ô1ˆEØ$ˆDà—H’Hð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð &ð
ñ 
ô 
ñ 
ô 
ˆ	õ Œ{ØØØØØñ
ô 
ˆð 	�˜	Ñ!Ñ!ˆÝ�4˜‰|Œ|˜iÑ'ˆÝ�4˜‰|Œ|˜iÑ'¨$Ñ.ˆÝ�4˜‰|Œ|ˆÝˆt‰9Œ9�vÒÐÝÐCÑDÔDÐDØ×Ò˜ÑÔÐÐÐr7   c                 ó   — | |  |z  z   S r1   rž   )r¹   Ú	alignments     r5   rê  zStateHeader._alignedE  s   € à˜˜ Ñ*Ñ+Ð+r7   c                 óž  — |                       |¦  «        }t          |j        ¦  «        |k    r&t          d|t          |j        ¦  «        fz  ¦  «        ‚|                     ¦   «         }g }d}|j        D ]®}|t          |¦  «        z   dz  }	|	dk    rt          d¦  «        ‚|                     |	¦  «         g }
|D ]C}|                     |¦  «        }|
                     |€dn|                     |¦  «        ¦  «         ŒD|t          j	        dt          |
¦  «        z  g|
¢R Ž z  }Œ¯|dk    rt          d	¦  «        ‚t          j	        d
|¦  «        ||fS )NzAmort contextual actions refer to %d lookups, but the table has %dr7   r  éÿ  z/mort substitution offset exceeds signed 16 bitsr   z>%dHru  z.mort substitution-table offset exceeds 16 bitsrñ  )
r@  rÛ  r'  rò  r�  rd   r_   rm  ró  rô  )r‹   rá  r”   rô  r§   rÃ  rÏ  r×  rÎ  r  rÈ  rp  rÂ  s                r5   rë  z%StateHeader._compileContextualLookupsI  s‚  € Ø×*Ò*¨5Ñ1Ô1ˆÝˆuÔ$Ñ%Ô%¨Ò.Ð.ÝØSØ�#˜eÔ3Ñ4Ô4Ð5ñ6ñô ð ð ×'Ò'Ñ)Ô)ˆ
ØˆØˆØÔ+ð 	Kð 	KˆFØ ¥3 t¡9¤9Ñ,°Ñ2ˆFØ˜ŠˆÝ Ð!RÑSÔSÐSØ�NŠN˜6Ñ"Ô"Ð"ØˆLØ#ð ð �Ø$Ÿjšj¨Ñ/Ô/�Ø×#Ò#Ø$Ð,�A�A°$·/²/À+Ñ2NÔ2Nñô ð ð ð •F”K ­¨\Ñ):Ô):Ñ :ÐJ¸\ÐJÐJÐJÑJˆDˆDØ˜ÒÐÝÐMÑNÔNÐNÝŒ{˜4 Ñ,Ô,¨d°GÐ;Ð;r7   c                 ó:  ‡— g }t          ¦   «         }|D ]P}t          d„ |j        D ¦   «         ¦  «        }|r.||vr*|                     |¦  «         |                     |¦  «         ŒQ|                      |d¦  «        }	t          d„ |D ¦   «         ¦  «        }
|	|
dz  z   }t          ‰                     ¦   «         ¦  «        }|t          |j	        ¦  «        dz  z   }t          |	||¦  «        dk    rt          d¦  «        ‚i }d}t          |dd ¦  «        }|€t          ¦   «         }nt          |¦  «        }|D �],}|	t          |¦  «        z   }|d	k    rt          d
¦  «        ‚|||<   d}t          |¦  «        D ]ë\  }\  }}|dz  |z   }d|cxk    rdk     sn t          d¦  «        ‚|dz  }|t          |¦  «        dz
  k    }||rdndz  }||rdndz  }|t          j        d|¦  «        z  }|s|o| }|rht!          |d¦  «        sXt          d|¦  «        }t#          t          |j	        ¦  «        ||z   ¦  «        }|                     t'          ||¦  «        ¦  «         ||p|z  }Œì�Œ.d}t          |j	        ¦  «        D ]I\  }}|dz  }||v r||z  }d|cxk    rdk    sn t          d¦  «        ‚|t          j        d|¦  «        z  }ŒJd                     ˆfd„|j        D ¦   «         ¦  «        }t          j        d|	||¦  «        }t-          |	|z
  ¦  «        |z   |z   |z   } || |fS )Nc              3   ó2   K  — | ]}|j         |j        fV — Œd S r1   ©rÐ  rÏ  ©rŸ   rÕ  s     r5   r    z3StateHeader._compileLigatureData.<locals>.<genexpr>g  ó=   è è € ð ð Ø;A�Ô'¨¬Ð6ðð ð ð ð ð r7   rï   c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r1   ©rÛ  )rŸ   Úsequences     r5   r    z3StateHeader._compileLigatureData.<locals>.<genexpr>o  s(   è è € ÐBÐB¨H�#˜h™-œ-ÐBÐBÐBÐBÐBÐBr7   r  ru  z*mort ligature-table offset exceeds 16 bitsr7   rp  r«  z+mort ligature-action offset exceeds 14 bitsFi   àrÍ  z.mort ligature component offset exceeds 30 bitsrÌ  r   rË  r   rÊ  z>Iz-mort ligature component value exceeds 16 bitsrñ  c              3   óh   •K  — | ],}t          j        d ‰                     |¦  «        ¦  «        V — Œ-dS )rñ  N)ró  rô  rm  )rŸ   rp  r”   s     €r5   r    z3StateHeader._compileLigatureData.<locals>.<genexpr>œ  sL   øè è € ð  
ð  
Ø:?�FŒK˜˜dŸošo¨eÑ4Ô4Ñ5Ô5ð 
ð  
ð  
ð  
ð  
ð  
r7   z>HHH)r™  r3   r´  Úaddrd   rê  ÚsumrÛ  r�  r   r=  rò  r”  r´   ró  rô  r¬   rÄ  rÎ  r¤   r�  r"  ré  )!r‹   rá  r”   r^  rô  Ú	sequencesÚsequenceSetr6  r  rV  ÚactionCountrž  r¢  rŸ  ÚactionOffsetsrN  ÚrebaseComponentsÚsequenceOffsetrÑ  rl  ÚdeltarÒ  r¹   r¸  ÚaddBaserÔ  r9  ÚcomponentDatarw  rd  ÚligatureDatarõ  rö  s!     `                              r5   rì  z StateHeader._compileLigatureDatac  sù  ø€ Øˆ	Ý‘e”eˆØ!ð 	+ð 	+ˆJÝð ð ØEOÔEWðñ ô ñ ô ˆHð ð +˜H¨KÐ7Ð7Ø—’ Ñ)Ô)Ð)Ø× Ò  Ñ*Ô*Ð*øà—}’} Z°Ñ3Ô3ˆÝÐBÐB¸	ÐBÑBÔBÑBÔBˆØ&¨°q©Ñ8ˆÝ˜×+Ò+Ñ-Ô-Ñ.Ô.ˆ
Ø(­3¨uÔ/BÑ+CÔ+CÀaÑ+GÑGˆÝˆ|˜_¨nÑ=Ô=ÀÒFÐFÝÐIÑJÔJÐJàˆØˆ
Ý" 5Ð*?ÀÑFÔFÐØÐ#Ý"™uœuÐÐå"Ð#3Ñ4Ô4ÐØ!ð 	)ñ 	)ˆHØ)­C°
©O¬OÑ;ˆNØ Ò&Ð&Ý Ð!NÑOÔOÐOØ&4ˆM˜(Ñ#ØˆGÝ)2°8Ñ)<Ô)<ð )ð )Ñ%�‘~˜˜uØ'¨1Ñ,¨uÑ4�Ø! UÐ6Ð6Ò6Ð6¨gÒ6Ð6Ð6Ð6Ý$Ð%UÑVÔVÐVØ˜Ñ#�Ø¥ H¡¤°Ñ 1Ò1�Ø uÐ3˜˜°!Ñ3�Ø tÐ2˜˜°Ñ2�Ø�fœk¨$°Ñ6Ô6Ñ6�
Ø ˜= DÐ9°'¨k�Øð A¥7¨5Ð2GÑ#HÔ#Hð AÝ  5™MœM�EÝ¥ EÔ$7Ñ 8Ô 8¸%À*Ñ:LÑMÔM�EØ$×+Ò+­E°%¸Ñ,?Ô,?Ñ@Ô@Ð@Ø˜5˜= DÑ(��ñ)ð  ˆÝ)2°5Ô3FÑ)GÔ)Gð 	:ð 	:Ñ%ˆN˜IØ˜‰NˆIØÐ!1Ð1Ð1Ø˜^Ñ+�	Ø˜	Ð+Ð+Ò+Ð+ VÒ+Ð+Ð+Ð+Ý Ð!PÑQÔQÐQØ�Vœ[¨¨yÑ9Ô9Ñ9ˆMˆMà—x’xð  
ð  
ð  
ð  
ØCHÄ?ð 
ñ  
ô  
ñ 
ô 
ˆõ ”˜F L°/À>ÑRÔRˆå�, Ñ+Ñ,Ô,¨zÑ9¸MÑIÈLÑXð 	ð �d˜MÐ)Ð)r7   c                 óH  — ||j         |z  z   }d|cxk    rdk    sn t          d¦  «        ‚t          | j        t          ¦  «        ro|j        }	|	|j        rdndz  }	|	|j        rdndz  }	|j        dk    rdn||j                 }
|j	        dk    rdn||j	                 }t          j        d||	|
|¦  «        S t          | j        t          ¦  «        r||j        rt          d¦  «        ‚|j        rdnd}	|	|j        rdndz  }	t          d„ |j        D ¦   «         ¦  «        }|	|                     |d¦  «        z  }	t          j        d	||	¦  «        S t#          ¦   «         }|                     |||¦  «         |                     ¦   «         }t          j        d
|¦  «        |dd …         z   S )Nr   ru  z%mort new-state offset exceeds 16 bitsr©  rª  z>HHhhz2mort ligature entries cannot encode reserved flagsc              3   ó2   K  — | ]}|j         |j        fV — Œd S r1   rý  rþ  s     r5   r    z1StateHeader._compileTransition.<locals>.<genexpr>È  rÿ  r7   rÞ  rñ  r  )r¬  rò  rd  r^   r!   r°  r®  r¯  r<  r>  ró  rô  r#   r³  r3   r´  r_   r   r†   r  )r‹   r6  r”   rO  rR  rL  rå  rç  ÚnewStaterƒ  Ú
markOffsetÚcurrentOffsetr  rñ  r×  s                  r5   rä  zStateHeader._compileTransition¥  sÿ  € ð $ jÔ&9¸OÑ&KÑKˆØ�HÐ&Ð&Ò&Ð& Ò&Ð&Ð&Ð&ÝÐDÑEÔEÐEå�d”oÕ'<Ñ=Ô=ð 	TØÔ,ˆEØ˜zÔ1Ð8�V�V°qÑ8ˆEØ˜zÔ5Ð<�V�V¸1Ñ<ˆEð Ô'¨6Ò1Ð1ð �à# JÔ$8Ô9ð ð Ô*¨fÒ4Ð4ð �à# JÔ$;Ô<ð õ
 ”;˜w¨°%¸À]ÑSÔSÐSå�d”oÕ':Ñ;Ô;ð 		7ØÔ'ð WÝ Ð!UÑVÔVÐVØ(Ô5Ð<�F�F¸1ˆEØ˜zÔ5Ð<�V�V¸1Ñ<ˆEÝð ð ØEOÔEWðñ ô ñ ô ˆHð Ð*×.Ò.¨x¸Ñ;Ô;Ñ;ˆEÝ”;˜u h°Ñ6Ô6Ð6å(™?œ?ÐØ×ÒÐ+¨T°;Ñ?Ô?Ð?Ø×*Ò*Ñ,Ô,ˆÝŒ{˜4 Ñ*Ô*¨T°!°"°"¬XÑ5Ð5r7   r1   )rb   rÐ   rÑ   rÒ   r’   r$  rš  rµ  rá   r›  rµ   rê  rë  rì  rä  rž   r7   r5   r�  r�  ¾  sÝ   € € € € € ØJÐJðeð eð eðN5ð 5ð 5ðn8.ð 8.ð 8.ðt'ð 'ð 'ðR ðð ñ „\ðð(lð lð lð lð\ ð,ð ,ñ „\ð,ð<ð <ð <ð4@*ð @*ð @*ðD,6ð ,6ð ,6ð ,6ð ,6r7   r�  c                   ó>   — e Zd ZdZddœd„Zd„ Zd„ Zdd„Zd	„ Zd
„ Z	dS )ÚMorphStateTablezFDispatch to classic or extended AAT state-table encoding by table tag.rp   rK   c                óª   — t                                | |||||¬¦  «         t          |||||¬¦  «        | _        t	          |||||¬¦  «        | _        d S rþ  )ro   rŒ   r�  Úlegacyr  ÚextendedrŠ   s         r5   rŒ   zMorphStateTable.__init__×  sv   € Ý×ÒØ�$˜  Z¸[ð 	ñ 	
ô 	
ð 	
õ "Ø�&˜#˜z°{ð
ñ 
ô 
ˆŒõ "Ø�&˜#˜z°{ð
ñ 
ô 
ˆŒˆˆr7   c                 ó*   — |dk    r| j         n| j        S )Nrá  )r  r  )r‹   rã  s     r5   Ú
_converterzMorphStateTable._converterâ  s   € Ø&¨&Ò0Ð0ˆtŒ{ˆ{°d´mÐCr7   c                 ó`   — |                       |j        ¦  «                             |||¦  «        S r1   )r  rã  r’   r±   s       r5   r’   zMorphStateTable.readå  s(   € Ø�Š˜vœÑ/Ô/×4Ò4°V¸TÀ9ÑMÔMÐMr7   Nc                 ód   — |                       |j        ¦  «                             |||||¦  «        S r1   )r  rã  rµ   r½   s         r5   rµ   zMorphStateTable.writeè  s3   € Ø�Š˜vœÑ/Ô/×5Ò5Ø�D˜) U¨Kñ
ô 
ð 	
r7   c                 ó:   — | j                              |||¦  «        S r1   )r  rÃ   rÀ   s       r5   rÃ   zMorphStateTable.xmlReadí  s   € ØŒ}×$Ò$ U¨G°TÑ:Ô:Ð:r7   c                 ó>   — | j                              |||||¦  «        S r1   )r  rÇ   rÅ   s         r5   rÇ   zMorphStateTable.xmlWriteð  s    € ØŒ}×%Ò% i°°u¸dÀEÑJÔJÐJr7   r1   )
rb   rÐ   rÑ   rÒ   rŒ   r  r’   rµ   rÃ   rÇ   rž   r7   r5   r  r  Ô  s‘   € € € € € ØPÐPàEGð 	
ð 	
ð 	
ð 	
ð 	
ðDð Dð DðNð Nð Nð
ð 
ð 
ð 
ð
;ð ;ð ;ðKð Kð Kð Kð Kr7   r  c                   ó(   — e Zd Zd„ Zdd„Zd„ Zd„ ZdS )ÚCIDGlyphMapc                 ó¾   — |                      ¦   «         }i }t          |                     |¦  «        ¦  «        D ]#\  }}|dk    r|                     |¦  «        ||<   Œ$|S ©Nru  )r'  r´   r*  rg  )r‹   r›   r”   r¦   ÚnumCIDsrÐ  Úcidr›  s           r5   r’   zCIDGlyphMap.readõ  si   € Ø×#Ò#Ñ%Ô%ˆØˆÝ% f×&<Ò&<¸WÑ&EÔ&EÑFÔFð 	9ð 	9‰LˆC�Ø˜&Ò Ð Ø"×/Ò/°Ñ8Ô8��s‘øØˆr7   Nc                 ó  ‡— ˆfd„|                      ¦   «         D ¦   «         }|rt          |¦  «        dz   nd}|                     |¦  «         t          |¦  «        D ]+}|                     |                     |d¦  «        ¦  «         Œ,d S )Nc                 óB   •— i | ]\  }}|‰                      |¦  «        “ŒS rž   ro  )rŸ   r%  rp  r”   s      €r5   r²  z%CIDGlyphMap.write.<locals>.<dictcomp>þ  s+   ø€ ÐMÐMÐM±°°e��d—o’o eÑ,Ô,ÐMÐMÐMr7   r   r   ru  ©rÿ  r=  r-  r¤   r_   )	r‹   r¸   r”   r¦   r¹   r¾   rÿ  r§   r%  s	     `      r5   rµ   zCIDGlyphMap.writeý  s”   ø€ ØMÐMÐMÐM¸u¿{º{¹}¼}ÐMÑMÔMˆØ"'Ð.•�E‘
”
˜Q‘�¨QˆØ×Ò˜5Ñ!Ô!Ð!Ý˜‘<”<ð 	7ð 	7ˆCØ×Ò˜uŸyšy¨¨fÑ5Ô5Ñ6Ô6Ð6Ð6ð	7ð 	7r7   c                 ó®   — i }t          t          |¦  «        D ]<\  }}}|dk    r0|d                              ¦   «         |t          |d         ¦  «        <   Œ=|S )NÚCIDrp  r%  )ru  rí  Ústripr   ©r‹   rÁ   rÂ   r”   rÐ  ÚeNameÚeAttrsÚ	_eContents           r5   rÃ   zCIDGlyphMap.xmlRead	  s^   € ØˆÝ(.­w¸Ñ(@Ô(@ð 	Jð 	JÑ$ˆE�6˜9Ø˜Š~ˆ~Ø28¸´/×2GÒ2GÑ2IÔ2I�•x  u¤Ñ.Ô.Ñ/øØˆr7   c                 ób  — |                      ||¦  «         |                     ¦   «          t          |                     ¦   «         ¦  «        D ]9\  }}|�2|dk    r,|                     d||¬¦  «         |                     ¦   «          Œ:|                     |¦  «         |                     ¦   «          d S )Nru  r*  )r%  rp  ©rÄ  rß   rt  rÿ  rÞ   rÅ  )r‹   rÆ   r”   r¹   rP   rÁ   r%  rp  s           r5   rÇ   zCIDGlyphMap.xmlWrite	  sµ   € Ø×Ò˜4 Ñ'Ô'Ð'Ø×ÒÑÔÐÝ  §¢¡¤Ñ/Ô/ð 	$ð 	$‰JˆC�ØÐ  U¨f¢_ _Ø×#Ò# E¨s¸%Ð#Ñ@Ô@Ð@Ø×!Ò!Ñ#Ô#Ð#øØ×Ò˜ÑÔÐØ×ÒÑÔÐÐÐr7   r1   rÝ  rž   r7   r5   r!  r!  ô  sU   € € € € € ðð ð ð7ð 7ð 7ð 7ðð ð ðð ð ð ð r7   r!  c                   ó(   — e Zd Zd„ Zdd„Zd„ Zd„ ZdS )ÚGlyphCIDMapc                 ó¨  — |                      ¦   «         }|                     ¦   «         }|                     |¦  «        }|t          |¦  «        k    r,t                               d|t          |¦  «        fz  ¦  «         i }t          t          t          |¦  «        t          |¦  «        ¦  «        ¦  «        D ]}||         }	|	dk    r|	|||         <   Œ|S )NzOGlyphCIDMap has %d elements, but the font has only %d glyphs; ignoring the restru  )r�  r'  r*  rÛ  rx  ry  r¤   rÄ  )
r‹   r›   r”   r¦   rÃ  r§   ÚcidsrÐ  r›  r%  s
             r5   r’   zGlyphCIDMap.read	  sÑ   € Ø×'Ò'Ñ)Ô)ˆ
Ø×!Ò!Ñ#Ô#ˆØ×%Ò% eÑ,Ô,ˆØ•3�z‘?”?Ò"Ð"Ý�KŠKð$à',­c°*©o¬oÐ&>ñ?ñô ð ð
 ˆÝ�S¥ T¡¤­C°
©O¬OÑ<Ô<Ñ=Ô=ð 	2ð 	2ˆGØ�w”-ˆCØ�fŠ}ˆ}Ø.1��z 'Ô*Ñ+øØˆr7   Nc                 ó  ‡— ˆfd„|                      ¦   «         D ¦   «         }|rt          |¦  «        dz   nd}|                     |¦  «         t          |¦  «        D ]+}|                     |                     |d¦  «        ¦  «         Œ,d S )Nc                 óR   •— i | ]#\  }}|®|dk    ¯‰                      |¦  «        |“Œ$S r#  ro  )rŸ   rt  r%  r”   s      €r5   r²  z%GlyphCIDMap.write.<locals>.<dictcomp>)	  s@   ø€ ð 
ð 
ð 
á��3Øˆ 3¨&¢= =ð �OŠO˜AÑÔ à#0 = =r7   r   r   ru  r(  )	r‹   r¸   r”   r¦   r¹   r¾   rÿ  r§   r›  s	     `      r5   rµ   zGlyphCIDMap.write(	  s¥   ø€ ð
ð 
ð 
ð 
àŸ+š+™-œ-ð
ñ 
ô 
ˆð
 #(Ð.•�E‘
”
˜Q‘�¨QˆØ×Ò˜5Ñ!Ô!Ð!Ý˜U‘|”|ð 	;ð 	;ˆGØ×Ò˜uŸyšy¨°&Ñ9Ô9Ñ:Ô:Ð:Ð:ð	;ð 	;r7   c                 óŠ   — i }t          t          |¦  «        D ]*\  }}}|dk    rt          |d         ¦  «        ||d         <   Œ+|S )Nr*  r¹   rp  )ru  rí  r   r,  s           r5   rÃ   zGlyphCIDMap.xmlRead3	  sR   € ØˆÝ(.­w¸Ñ(@Ô(@ð 	Dð 	DÑ$ˆE�6˜9Ø˜Š~ˆ~Ý*2°6¸'´?Ñ*CÔ*C��v˜g”Ñ'øØˆr7   c                 ób  — |                      ||¦  «         |                     ¦   «          t          |                     ¦   «         ¦  «        D ]9\  }}|�2|dk    r,|                     d||¬¦  «         |                     ¦   «          Œ:|                     |¦  «         |                     ¦   «          d S )Nru  r*  ri  r1  )r‹   rÆ   r”   r¹   rP   rÁ   rp  r%  s           r5   rÇ   zGlyphCIDMap.xmlWrite:	  s´   € Ø×Ò˜4 Ñ'Ô'Ð'Ø×ÒÑÔÐÝ  §¢¡¤Ñ/Ô/ð 	$ð 	$‰JˆE�3Øˆ 3¨&¢= =Ø×#Ò# E°¸cÐ#ÑBÔBÐBØ×!Ò!Ñ#Ô#Ð#øØ×Ò˜ÑÔÐØ×ÒÑÔÐÐÐr7   r1   rÝ  rž   r7   r5   r3  r3  	  sU   € € € € € ðð ð ð"	;ð 	;ð 	;ð 	;ðð ð ðð ð ð ð r7   r3  c                   ó(   — e Zd Zd„ Zdd„Zd„ Zd„ ZdS )Ú
DeltaValuec                 óX  — |d         }|d         }|d         }|dv s
J d¦   «         ‚||z
  dz   }d|z  }d|z  }	d|z  dz
  }
d|dz
  z  }g }d\  }}t          |¦  «        D ]J}|dk    r|                     ¦   «         d	}}||z
  }||z	  |
z  }||z  r||	z
  }|                     |¦  «         ŒK|S )
NÚ	StartSizeÚEndSizeÚDeltaFormat©r   r  rG  úillegal DeltaFormatr   )r   r   r   r¨  )r¤   r'  rd   )r‹   r›   r”   r¦   r=  r>  r?  ÚnItemsÚnBitsÚminusOffsetÚmaskÚsignMaskr;  ÚtmpÚshiftr“   r¹   s                    r5   r’   zDeltaValue.readF	  s  € Ø˜kÔ*ˆ	Ø˜IÔ&ˆØ Ô.ˆØ˜iÐ'Ð'Ð'Ð)>Ñ'Ô'Ð'Ø˜9Ñ$ qÑ(ˆØ�[Ñ ˆØ˜5‘jˆØ�U‘
˜aÑˆØ˜ ™Ñ#ˆàˆ
Ø‰
ˆˆUÝ�v‘”ð 	%ð 	%ˆAØ˜ŠzˆzØ#×.Ò.Ñ0Ô0°"�U�Ø˜E‘MˆEØ˜E‘\ TÑ)ˆEØ�xÑð ,Ø Ñ+�Ø×Ò˜eÑ$Ô$Ð$Ð$ØÐr7   Nc                 óX  — |d         }|d         }|d         }|}	|dv s
J d¦   «         ‚||z
  dz   }
d|z  }t          |	¦  «        |
k    sJ ‚d|z  dz
  }d\  }}|	D ]2}||z
  }|||z  |z  z  }|dk    r|                     |¦  «         d\  }}Œ3|d	k    r|                     |¦  «         d S d S )
Nr=  r>  r?  r@  rA  r   )r   r¨  r   r¨  )rÛ  r-  )r‹   r¸   r”   r¦   r¹   r¾   r=  r>  r?  r;  rB  rC  rE  rG  rH  s                  r5   rµ   zDeltaValue.write]	  s  € Ø˜kÔ*ˆ	Ø˜IÔ&ˆØ Ô.ˆØˆ
Ø˜iÐ'Ð'Ð'Ð)>Ñ'Ô'Ð'Ø˜9Ñ$ qÑ(ˆØ�[Ñ ˆÝ�:‰Œ &Ò(Ð(Ð(Ð(Ø�U‘
˜aÑˆà‰
ˆˆUØð 	#ð 	#ˆEØ˜E‘MˆEØ˜% $™,¨5Ñ0Ñ1ˆCØ˜ŠzˆzØ×"Ò" 3Ñ'Ô'Ð'Ø"‘
��UøØ�BŠ;ˆ;Ø×Ò˜sÑ#Ô#Ð#Ð#Ð#ð ˆ;r7   c                 óf   — |                      ||d|fgz   ¦  «         |                     ¦   «          d S rÝ   ©rÞ   rß   rÅ   s         r5   rÇ   zDeltaValue.xmlWriter	  ó=   € Ø×Ò˜D %¨G°UÐ+;Ð*<Ñ"<Ñ=Ô=Ð=Ø×ÒÑÔÐÐÐr7   c                 ó,   — t          |d         ¦  «        S rÝ   r|  rÀ   s       r5   rÃ   zDeltaValue.xmlReadv	  ó   € Ý˜˜gœÑ'Ô'Ð'r7   r1   ©rb   rÐ   rÑ   r’   rµ   rÇ   rÃ   rž   r7   r5   r;  r;  E	  sU   € € € € € ðð ð ð.$ð $ð $ð $ð*ð ð ð(ð (ð (ð (ð (r7   r;  c                   ó   — e Zd Zd„ Zdd„ZdS )ÚVarIdxMapValuec                 óæ   ‡	‡
‡— |d         }|d         }d|dz  z   }d|z  dz
  Š	d‰	z
  Š
d|z
  Šd|dz  dz	  z   }|j         |j        |j        |j        d	œ|         }ˆ	ˆ
ˆfd
„ ||¦  «        D ¦   «         S )NÚEntryFormatrz   r   r	  l   ÿÿ r¨  é0   rï   ©r   r  rG  rï   c                 ó,   •— g | ]}|‰z  ‰z  |‰z  z  ‘ŒS rž   rž   )rŸ   ÚrawÚ	innerMaskÚ	outerMaskÚ
outerShifts     €€€r5   rr  z'VarIdxMapValue.read.<locals>.<listcomp>Œ	  s;   ø€ ð 
ð 
ð 
àð �Y‰ :Ñ-°#¸	±/ÑBð
ð 
ð 
r7   ©r@  r*  ÚreadUInt24Arrayr  )r‹   r›   r”   r¦   ÚfmtrB  Ú	innerBitsr·  r©   rX  rY  rZ  s            @@@r5   r’   zVarIdxMapValue.read{	  sÈ   øøø€ Ø˜Ô&ˆØ˜>Ô*ˆà˜˜v™Ñ&ˆ	Ø˜)‘^ qÑ(ˆ	Ø Ñ*ˆ	Ø˜)‘^ˆ
à˜# ™,¨1Ñ,Ñ-ˆ	àÔ$ØÔ%ØÔ%ØÔ$ð	
ð 
ð
 ôˆ	ð
ð 
ð 
ð 
ð 
ð 
à �y Ñ(Ô(ð
ñ 
ô 
ð 	
r7   Nc                 ó   ‡‡— |d         }|}|d                               t          |¦  «        ¦  «         d|dz  z   }d|z  dz
  Šd|z
  Šd|dz  dz	  z   }	|j        |j        |j        |j        dœ|	         }
 |
ˆˆfd	„|D ¦   «         ¦  «         d S )
NrS  rz   r   r	  r¨  rT  rï   rU  c                 ó,   •— g | ]}|d z  ‰z	  |‰z  z  ‘ŒS )l     þ rž   )rŸ   ÚidxrX  rZ  s     €€r5   rr  z(VarIdxMapValue.write.<locals>.<listcomp>£	  s<   ø€ ð ð ð àð ˜Ñ#¨
Ñ2°s¸Y±ÑGðð ð r7   )ÚsetValuerÛ  rD  r0  ÚwriteUInt24Arrayr  )r‹   r¸   r”   r¦   r¹   r¾   r]  r·  r^  r·  r»   rX  rZ  s              @@r5   rµ   zVarIdxMapValue.write‘	  sã   øø€ Ø˜Ô&ˆØˆØˆ~Ô×'Ò'­¨G©¬Ñ5Ô5Ð5à˜˜v™Ñ&ˆ	Ø˜)‘^ qÑ(ˆ	Ø˜)‘^ˆ
à˜# ™,¨1Ñ,Ñ-ˆ	àÔ%ØÔ&ØÔ&ØÔ%ð	
ð 
ð
 ôˆ
ð 	ˆ
ðð ð ð ð à"ðñ ô ñ	
ô 	
ð 	
ð 	
ð 	
r7   r1   r	  rž   r7   r5   rQ  rQ  z	  s7   € € € € € ð
ð 
ð 
ð,
ð 
ð 
ð 
ð 
ð 
r7   rQ  c                   ó(   — e Zd Zd„ Zdd„Zd„ Zd„ ZdS )ÚVarDataValuec                 ój  — g }|d         }|d         }t          |dz  ¦  «        }|dz  }|r|j        |j        }	}n|j        |j        }	}t	          ||¦  «        t          ||¦  «        }}
|                      ||
¦  «        ¦  «         |                      |	||
z
  ¦  «        ¦  «         ||k    r||d …= |S )Nry   Ú	NumShortsr©  rú  )r­  rõ   r  r6  rÄ  r=  r‡  )r‹   r›   r”   r¦   r`   ÚregionCountÚ	wordCountÚ	longWordsÚreadBigArrayÚreadSmallArrayÚn1Ún2s               r5   r’   zVarDataValue.read«	  sØ   € ØˆàÐ 0Ô1ˆØ˜kÔ*ˆ	õ ˜ VÑ+Ñ,Ô,ˆ	Ø Ñ&ˆ	àð 	WØ+1Ô+?ÀÔAV˜.ˆLˆLà+1Ô+@À&ÔBV˜.ˆLå�[ )Ñ,Ô,­c°+¸yÑ.IÔ.IˆBˆØ�Š�l�l 2Ñ&Ô&Ñ'Ô'Ð'Ø�Š�n�n R¨"¡WÑ-Ô-Ñ.Ô.Ð.Ø�ÒÐØ�{�|�|Ð$àˆr7   Nc                 ót  — |d         }|d         }t          |dz  ¦  «        }|dz  }|j        |j        f|j        |j        fdœ|         \  }	}
t	          ||¦  «        t          ||¦  «        }} |	|d |…         ¦  «          |
|||…         ¦  «         ||k    r|                     dg||z
  z  ¦  «         d S d S )Nry   rg  r©  rú  rû  r   )r­  r"  r:  rü   rÄ  r=  ÚwriteSmallArray)r‹   r¸   r”   r¦   r`   r¾   rh  ri  rj  ÚwriteBigArrayrp  rm  rn  s                r5   rµ   zVarDataValue.writeÂ	  s÷   € ØÐ 0Ô1ˆØ˜kÔ*ˆ	õ ˜ VÑ+Ñ,Ô,ˆ	Ø Ñ&ˆ	ð Ô*¨FÔ,AÐBØÔ(¨&Ô*@ÐAð*
ð *
ð ô*Ñ&ˆ�õ
 �[ )Ñ,Ô,­c°+¸yÑ.IÔ.IˆBˆØˆ�f˜S˜b˜S”kÑ"Ô"Ð"Øˆ˜˜r +˜~Ô.Ñ/Ô/Ð/Ø�ÒÐØ×"Ò" A 3¨"¨{Ñ*:Ñ#;Ñ<Ô<Ð<Ð<Ð<ð Ðr7   c                 óf   — |                      ||d|fgz   ¦  «         |                     ¦   «          d S rÝ   rK  rÅ   s         r5   rÇ   zVarDataValue.xmlWriteÕ	  rL  r7   c                 ó,   — t          |d         ¦  «        S rÝ   r|  rÀ   s       r5   rÃ   zVarDataValue.xmlReadÙ	  rN  r7   r1   rO  rž   r7   r5   re  re  ª	  sU   € € € € € ðð ð ð.=ð =ð =ð =ð&ð ð ð(ð (ð (ð (ð (r7   re  c                   ó(   — e Zd Zd„ Zdd„Zd„ Zd„ ZdS )ÚTupleValuesc                 ó8   — t          j        d |¦  «        d         S rê   )r	   ÚdecompileDeltas_)r‹   r×  r”   s      r5   r’   zTupleValues.readÞ	  s   € ÝÔ.¨t°TÑ:Ô:¸1Ô=Ð=r7   Nc                 ón   — |j         t                   }t          t          j        || ¬¦  «        ¦  «        S )N)ÚoptimizeSize)Úcfgr   ré  r	   ÚcompileDeltaValues_)r‹   r¸   r”   r¦   r`   r¾   ÚoptimizeSpeeds          r5   rµ   zTupleValues.writeá	  s7   € ØœÕ!4Ô5ˆÝÝÔ.¨vÈÐDUÐVÑVÔVñ
ô 
ð 	
r7   c                 ó,   — t          |d         ¦  «        S rÝ   r|  rÀ   s       r5   rÃ   zTupleValues.xmlReadç	  rN  r7   c                 óf   — |                      ||d|fgz   ¦  «         |                     ¦   «          d S rÝ   rK  rÅ   s         r5   rÇ   zTupleValues.xmlWriteê	  rL  r7   r1   rÝ  rž   r7   r5   ru  ru  Ý	  sU   € € € € € ð>ð >ð >ð
ð 
ð 
ð 
ð(ð (ð (ðð ð ð ð r7   ru  c                   ó<   — e Zd Z	 d	ddddœd„Zd„ Zd	d„Zd„ Zd„ ZdS )
Ú	CFF2IndexNrp   )Ú	itemClassÚitemConverterClassrL   c                óz   — t                                | |||||¬¦  «         || _        |�
 |¦   «         nd | _        d S rþ  )ro   rŒ   Ú
_itemClassr  )r‹   rP   r\   r]   r^   r�  r‚  rL   s           r5   rŒ   zCFF2Index.__init__ð	  sY   € õ 	×ÒØ�$˜  Z¸[ð 	ñ 	
ô 	
ð 	
ð $ˆŒà$6Ð$BÐÐÑ Ô Ð Èð 	Œˆˆr7   c                 óL  ‡ ‡‡‡‡‡— ‰                      ¦   «         Š‰dk    rg S ‰                     ¦   «         Š‰dvrt          d‰› �¦  «        ‚‰j        ‰dz   ‰z  z   t	          ‰j        ¦  «        k    rt          d‰› d�¦  «        ‚d„ Š ‰‰‰¦  «        }‰j        duo‰d	k    }|s× |‰dz   ¦  «        }g }|                     d¦  «        }‰                     |dz
  ¦  «         |D ]•}	||	k    sJ ‚‰                     |	|z
  ¦  «        }
‰ j	        �3‰  	                    ¦   «         }| 
                    |
‰‰j        ¦  «         |}
n"‰ j        �‰ j                             |
‰¦  «        }
|                     |
¦  «         |	}Œ–|S ˆˆˆˆˆˆ fd
„} |¦   «         }t          |g‰z  ¦  «        }|S )Nr   rU  zinvalid CFF2 INDEX offSize: r   zCFF2 INDEX count z exceeds available datac                 óD   — | j         | j        | j        | j        dœ|         S )NrU  r[  )r›   ÚoffSizes     r5   ÚgetReadArrayz$CFF2Index.read.<locals>.getReadArray
  s3   € àÔ(ØÔ)ØÔ)ØÔ(ð	ð ð
 ôð r7   FrŽ   c                  ó�   •‡‡‡‡— ‰	                      ¦   «         Š‰	j        Š‰‰dz   ‰z  z   dz
  Š ‰‰‰¦  «        Šˆˆˆˆˆˆˆ
fd„} | S )Nr   c                 ó�  •— ‰	                      ‰| ‰z  z   ¦  «          ‰d¦  «        }‰	                      ‰|d         z   ¦  «         ‰	                     |d         |d         z
  ¦  «        }‰
j        �3‰
                     ¦   «         }|                     |‰‰	j        ¦  «         |}n"‰
j        �‰
j                             |‰¦  «        }|S )Nr  r   r   )r‘   rÕ  r„  rà  r6  r  r’   )r“   rÏ  rÑ  ÚobjÚdata_posr”   r‡  Ú
offset_posr©   r–   r‹   s       €€€€€€€r5   r˜   z8CFF2Index.read.<locals>.get_read_item.<locals>.read_item4
  sÅ   ø€ Ø×$Ò$ Z°!°g±+Ñ%=Ñ>Ô>Ð>Ø'˜i¨™lœl�GØ×$Ò$ X°¸´
Ñ%:Ñ;Ô;Ð;Ø&×/Ò/°¸´
¸WÀQ¼ZÑ0GÑHÔH�Dà”Ð2Ø"ŸošoÑ/Ô/˜ØŸš d¨D°+Ô2HÑIÔIÐIØ"˜˜ØœÐ4Ø#œ×3Ò3°D¸$Ñ?Ô?˜Ø�Kr7   r™   )r˜   rŒ  r�  r©   r–   r§   r”   rˆ  r‡  r›   r‹   s    @@@@€€€€€€r5   rœ   z%CFF2Index.read.<locals>.get_read_item.
  sƒ   øøøøø€ Ø$Ÿkšk™mœm�Ø#œZ�
Ø%¨°©°gÑ(=Ñ=ÀÑA�Ø(˜L¨°gÑ>Ô>�	ð ð  ð  ð  ð  ð  ð  ð  ð  ð  ð  ð !Ð r7   )r  r>  r   r•   rÛ  r×  r¡   ÚpoprÕ  r„  rà  r6  r  r’   rd   r   )r‹   r›   r”   r¦   r©   r¡   rÏ  rÿ  Ú
lastOffsetr  rÑ  r‹  rœ   r˜   r¨   r§   rˆ  r‡  s   ```            @@@r5   r’   zCFF2Index.read
  s  øøøøøø€ Ø× Ò Ñ"Ô"ˆØ�AŠ:ˆ:ØˆIØ×"Ò"Ñ$Ô$ˆØ˜,Ð&Ð&ÝÐE¸GÐEÐEÑFÔFÐFØŒ:˜ ™ gÑ-Ñ-µ°F´KÑ0@Ô0@Ò@Ð@ÝÐO°ÐOÐOÐOÑPÔPÐPð	ð 	ð 	ð !�L ¨Ñ1Ô1ˆ	àŒy Ð%Ð3¨%°!ª)ˆØð 1	Ø�i ¨¡	Ñ*Ô*ˆGØˆEØ Ÿš Q™œˆJØ�OŠO˜J¨™NÑ+Ô+Ð+à!ð $ð $�Ø! VÒ+Ð+Ð+Ð+Ø—’ v°
Ñ':Ñ;Ô;�à”?Ð.ØŸ/š/Ñ+Ô+�CØ—M’M $¨¨fÔ.?Ñ@Ô@Ð@Ø�D�DØ”_Ð0Øœ?×/Ò/°°dÑ;Ô;�Dà—’˜TÑ"Ô"Ð"Ø#�
�
ØˆLð!ð !ð !ð !ð !ð !ð !ð !ð !ð !ð, &˜™œˆIÝ˜)˜ uÑ,Ñ-Ô-ˆAð ˆHr7   c                 ó<  ‡ ‡‡‡— |}‰                      t          |¦  «        ¦  «         t          |¦  «        sd S ‰ j        �ˆfd„|D ¦   «         }n%‰ j        �ˆˆ ˆˆfd„t	          |¦  «        D ¦   «         }d„ |D ¦   «         }t          t          |d¬¦  «        ¦  «        }|d         }|dk     rdn|dk     rd	n	|d
k     rdnd}	‰                     |	¦  «         ‰j        ‰j	        ‰j
        ‰j        dœ|	         }
 |
|¦  «         |D ]}‰                     |¦  «         Œd S )Nc                 ó:   •— g | ]}|                      ‰¦  «        ‘ŒS rž   rã  )rŸ   rÑ  r”   s     €r5   rr  z#CFF2Index.write.<locals>.<listcomp>S
  s%   ø€ Ð:Ð:Ð:¨D�T—\’\ $Ñ'Ô'Ð:Ð:Ð:r7   c           	      óR   •— g | ]#\  }}‰j                              ‰‰‰||¦  «        ‘Œ$S rž   )r  rµ   )rŸ   r“   rÑ  r”   r‹   r¦   r¸   s      €€€€r5   rr  z#CFF2Index.write.<locals>.<listcomp>U
  sE   ø€ ð ð ð á�A�tð ”×%Ò% f¨d°I¸tÀQÑGÔGðð ð r7   c                 ó,   — g | ]}t          |¦  «        ‘ŒS rž   r  )rŸ   rÑ  s     r5   rr  z#CFF2Index.write.<locals>.<listcomp>Z
  s   € Ð/Ð/Ð/ •3�t‘9”9Ð/Ð/Ð/r7   r   )ÚinitialrM  rÚ  i   r  i   rG  rï   rU  )r  rÛ  r„  r  r´   rs  r+   rB  rD  r0  rc  r  rÜ  )r‹   r¸   r”   r¦   r`   r¾   rÿ  rÏ  r�  r‡  r»   rÑ  s   ````        r5   rµ   zCFF2Index.writeK
  s›  øøøø€ Øˆà×Ò�#˜e™*œ*Ñ%Ô%Ð%Ý�5‰zŒzð 	ØˆFàŒ?Ð&Ø:Ð:Ð:Ð:°EÐ:Ñ:Ô:ˆEˆEØŒ_Ð(ðð ð ð ð ð ð å(¨Ñ/Ô/ðñ ô ˆEð
 0Ð/¨Ð/Ñ/Ô/ˆÝ•z '°1Ð5Ñ5Ô5Ñ6Ô6ˆà˜R”[ˆ
ð ˜EÒ!Ð!ð ˆAà  7Ò*Ð*��°ZÀ)Ò5KÐ5K°°ÐQRð 	ð
 	×Ò˜'Ñ"Ô"Ð"ð Ô%ØÔ&ØÔ&ØÔ%ð	
ð 
ð
 ôˆ
ð 	ˆ
�7ÑÔÐØð 	#ð 	#ˆDØ×Ò˜TÑ"Ô"Ð"Ð"ð	#ð 	#r7   c                 óÎ   — | j         �.|                       ¦   «         }|                     d |||¦  «         |S | j        �| j                             |||¦  «        S t	          ¦   «         ‚r1   )r„  rï  r  rÃ   r°   )r‹   rÁ   rÂ   r”   r‹  s        r5   rÃ   zCFF2Index.xmlReadp
  sd   € ØŒ?Ð&Ø—/’/Ñ#Ô#ˆCØ�KŠK˜˜e W¨dÑ3Ô3Ð3ØˆJØŒ_Ð(Ø”?×*Ò*¨5°'¸4Ñ@Ô@Ð@å%Ñ'Ô'Ð'r7   c           
      ó  — | j         �2t          |¦  «        D ] \  }}|                     ||d|fg|¦  «         Œ!d S | j        �;t          |¦  «        D ])\  }}| j                             |||||d|fgz   ¦  «         Œ*d S t          ¦   «         ‚)Nrl  )r„  r´   ræ  r  rÇ   r°   )r‹   rÆ   r”   r¹   rP   rÁ   r“   rÑ  s           r5   rÇ   zCFF2Index.xmlWritez
  sÄ   € ØŒ?Ð&Ý$ UÑ+Ô+ð Bð B‘��4Ø—
’
˜9 d¨g°q¨\¨N¸DÑAÔAÐAÐAðBð BàŒ_Ð(Ý$ UÑ+Ô+ð ð ‘��4Ø”×(Ò(Ø˜t T¨4°¸7ÀA¸,¸Ñ1Gñô ð ð ðð õ
 &Ñ'Ô'Ð'r7   r1   )rb   rÐ   rÑ   rŒ   r’   rµ   rÃ   rÇ   rž   r7   r5   r€  r€  ï	  sˆ   € € € € € ð ð
ð ØØð
ð 
ð 
ð 
ð 
ð&Fð Fð FðP##ð ##ð ##ð ##ðJ(ð (ð (ð
(ð 
(ð 
(ð 
(ð 
(r7   r€  c                   ó*   ‡ — e Zd Zˆ fd„Zdˆ fd„	Zˆ xZS )ÚTupleListOffsetc                 ó¨   •— |                      ¦   «         }|dk    sJ ‚t          ¦   «                              |                     |¦  «        ||¦  «        S rê   )r  r²  r’   r  )r‹   r›   r”   r¦   r  rµ  s        €r5   r’   zTupleListOffset.readˆ
  sI   ø€ Ø×!Ò!Ñ#Ô#ˆØ˜Š{ˆ{ˆ{ˆ{Ý‰wŒw�|Š|˜F×/Ò/°Ñ7Ô7¸¸yÑIÔIÐIr7   Nc                 óÀ   •— |                      ¦   «         }| j        |_        |                     |d¬¦  «         t          ¦   «                              |||||¦  «         d S )Nrï   r  )r  rP   r  r²  rµ   )r‹   r¸   r”   r¦   r`   r¾   r  rµ  s          €r5   rµ   zTupleListOffset.write�
  sZ   ø€ Ø×'Ò'Ñ)Ô)ˆ	Øœˆ	ŒØ×Ò˜Y°1ÐÑ5Ô5Ð5Ý‰Œ�Š�i  y°&¸+ÑFÔFÐFÐFÐFr7   r1   r/  r»  s   @r5   r˜  r˜  ‡
  se   ø€ € € € € ðJð Jð Jð Jð Jð
Gð Gð Gð Gð Gð Gð Gð Gð Gð Gr7   r˜  c                   ó   — e Zd Zd„ ZdS )Ú
LookupFlagc                 ó  — |                      ||d|fgz   ¦  «         g }|dz  r|                     d¦  «         |dz  r|                     d¦  «         |dz  r|                     d¦  «         |dz  r|                     d	¦  «         |d
z  r|                     d¦  «         |dz  r|                     d|dz	  z  ¦  «         |r(|                     d                     |¦  «        ¦  «         |                     ¦   «          d S )Nr¹   r   ÚrightToLeftr  ÚignoreBaseGlyphsrï   ÚignoreLigaturesrŽ   ÚignoreMarksr¨  ÚuseMarkFilteringSeti ÿ  zmarkAttachmentType[%i]r€  )rÞ   rd   rS  r�  rß   r‚  s          r5   rÇ   zLookupFlag.xmlWrite•
  s*  € Ø×Ò˜D %¨G°UÐ+;Ð*<Ñ"<Ñ=Ô=Ð=ØˆØ�4‰<ð 	(Ø�LŠL˜Ñ'Ô'Ð'Ø�4‰<ð 	-Ø�LŠLÐ+Ñ,Ô,Ð,Ø�4‰<ð 	,Ø�LŠLÐ*Ñ+Ô+Ð+Ø�4‰<ð 	(Ø�LŠL˜Ñ'Ô'Ð'Ø�4‰<ð 	0Ø�LŠLÐ.Ñ/Ô/Ð/Ø�6‰>ð 	BØ�LŠLÐ1°U¸a±ZÑ@ÑAÔAÐAØð 	/Ø×Ò˜cŸhšh u™oœoÑ.Ô.Ð.Ø×ÒÑÔÐÐÐr7   NrT  rž   r7   r5   rœ  rœ  ”
  s#   € € € € € ðð ð ð ð r7   rœ  c                   óN   ‡ — e Zd ZeZˆ fd„Zed„ ¦   «         Zed„ ¦   «         Zˆ xZ	S )Ú
_UInt8Enumc                 óp   •— |                       t          ¦   «                              |||¦  «        ¦  «        S r1   )Ú	enumClassr²  r’   )r‹   r›   r”   r¦   rµ  s       €r5   r’   z_UInt8Enum.read¬
  s)   ø€ Ø�~Š~�e™gœgŸlšl¨6°4¸ÑCÔCÑDÔDÐDr7   c                 óP   — t          | j        |                     ¦   «         ¦  «        S r1   )r”  r¦  Úupperrœ  s     r5   rÛ   z_UInt8Enum.fromString¯
  s   € å�s”} e§k¢k¡m¤mÑ4Ô4Ð4r7   c                 óZ   — |                       |¦  «        j                             ¦   «         S r1   )r¦  rP   Úlowerrœ  s     r5   rØ   z_UInt8Enum.toString³
  s#   € à�}Š}˜UÑ#Ô#Ô(×.Ò.Ñ0Ô0Ð0r7   )
rb   rÐ   rÑ   r£   r¦  r’   r¥  rÛ   rØ   rº  r»  s   @r5   r¤  r¤  ©
  sx   ø€ € € € € Ø€IðEð Eð Eð Eð Eð ð5ð 5ñ „[ð5ð ð1ð 1ñ „[ð1ð 1ð 1ð 1ð 1r7   r¤  c                   ó   — e Zd ZeZdS )r'   N)rb   rÐ   rÑ   Ú_ExtendModer¦  rž   r7   r5   r'   r'   ¸
  s   € € € € € Ø€I€I€Ir7   r'   c                   ó   — e Zd ZeZdS )r(   N)rb   rÐ   rÑ   Ú_CompositeModer¦  rž   r7   r5   r(   r(   ¼
  s   € € € € € Ø€I€I€Ir7   r(   c                   óN   — e Zd ZdZdZdZdZdZed„ ¦   «         Z	ed„ ¦   «         Z
dS )	ÚMappingEntryFormatr   r  rï   rŽ   rT  c                 ó(   — | t           j        z  dk    S )Nr   ©r°  ÚCODE_POINT_BIAS_BITSrö  s    r5   Úbias_present_u16z#MappingEntryFormat.bias_present_u16È
  ó   € àÕ)Ô>Ñ>À4ÒGÐGr7   c                 ó(   — | t           j        z  dk    S )NrT  r²  rö  s    r5   Úbias_present_u24z#MappingEntryFormat.bias_present_u24Ì
  rµ  r7   N)rb   rÐ   rÑ   ÚHAS_SUBSET_DEFÚHAS_CHILD_ENTRIESÚHAS_ENTRY_IDÚHAS_PATCH_FORMATr³  Úpropertyr´  r·  rž   r7   r5   r°  r°  À
  sl   € € € € € Ø€NØÐØ€LØÐàÐàðHð Hñ „XðHð ðHð Hñ „XðHð Hð Hr7   r°  c                   ó(   — e Zd Zd„ Zdd„Zd„ Zd„ ZdS )ÚMappingEntriesConverterc                 ó  — ddl m} ddlm} |d         }g }d}t	          |¦  «        D �]à}	i }
t          |                     ¦   «         ¦  «        }||
d<   |t
          j        z  rì|                     ¦   «         }g }t	          |¦  «        D ]+}	|                     ¦   «         }| 	                    |¦  «         Œ,||
d<   | 
                    ¦   «         }g }t	          |¦  «        D ]k}	|                     ¦   «         } ||                     ¦   «         d¦  «        } ||                     ¦   «         d¦  «        }| 	                    |||d	œ¦  «         Œl||
d
<   |t
          j        z  rr|                     ¦   «         }t          |dz  ¦  «        }|dz  }||
d<   g }t	          |¦  «        D ]+}	|                     ¦   «         }| 	                    |¦  «         Œ,||
d<   |t
          j        z  rJg }	 |                     ¦   «         }|dz	  }|dz  }|dz   |z   }| 	                    |¦  «         |}|snŒA||
d<   n|dz   g|
d<   |dz   }|t
          j        z  r|                     ¦   «         |
d<   |t
          j        z  rˆd}|j        r|                     ¦   «         }n|j        r| 
                    ¦   «         }||
d<    ||j        |j        d …         |d¬¦  «        \  }} |                     | ¦  «         t1          |¦  «        |
d<   | 	                    |
¦  «         �Œâ|S )Nr   )r   )Údecoder…   rM  ÚformatFlagsr3  r¨  ©ÚtagrÔ  ÚendÚdesignSpaceSegmentsr  é   ÚchildEntryConjunctiveÚchildEntryIndicesTr   ÚentryIdsÚpatchFormatÚcodePointsBiasiÿÿ )r³  ÚmaxValueÚ
codePoints)ÚfontTools.misc.fixedToolsr   ÚfontTools.misc.iftSparseBitSetrÀ  r¤   r°  r>  r¸  r]  rd   r'  rò   r¹  r­  rJ  rº  Ú	readInt24r»  r³  r·  r´  r×  r•   r¥   rt  )!r‹   r›   r”   r¦   rš  Ú	sbsDecodeÚ
entryCountr^  ÚlastEntryIdr¬  râ  rÁ  ÚfeatureCountÚfeaturesrÃ  ÚdesignSpaceCountr–  ÚsegTagrÔ  rÄ  ÚmodeAndCountÚconjunctiveÚ
childCountÚchildIndicesra  ÚidsÚ
encodedValr  ÚhasMoreÚcurrentEntryIdr³  Ú
codepointsÚconsumeds!                                    r5   r’   zMappingEntriesConverter.readÔ
  s¯  € ØCÐCÐCÐCÐCÐCØFÐFÐFÐFÐFÐFà˜LÔ)ˆ
ØˆØˆå�zÑ"Ô"ð G	"ñ G	"ˆAØˆEÝ,¨V×-=Ò-=Ñ-?Ô-?Ñ@Ô@ˆKØ#.ˆE�-Ñ àÕ/Ô>Ñ>ð 8Ø%×/Ò/Ñ1Ô1�Ø�Ý˜|Ñ,Ô,ð )ð )�AØ Ÿ.š.Ñ*Ô*�CØ—O’O CÑ(Ô(Ð(Ð(Ø'/��mÑ$Ø#)×#4Ò#4Ñ#6Ô#6Ð Ø�ÝÐ/Ñ0Ô0ð Qð Q�AØ#Ÿ^š^Ñ-Ô-�FØ!˜E &§/¢/Ñ"3Ô"3°RÑ8Ô8�EØ˜% §¢Ñ 1Ô 1°2Ñ6Ô6�CØ—O’O¨F¸UÈ3Ð$OÐ$OÑPÔPÐPÐPØ/7�Ð+Ñ,àÕ/ÔAÑAð 	:Ø%×/Ò/Ñ1Ô1�Ý" <°$Ñ#6Ñ7Ô7�Ø)¨DÑ0�
Ø1<�Ð-Ñ.Ø!�Ý˜zÑ*Ô*ð -ð -�AØ ×+Ò+Ñ-Ô-�CØ ×'Ò'¨Ñ,Ô,Ð,Ð,Ø-9�Ð)Ñ*àÕ/Ô<Ñ<ð .Ø�ðð "(×!1Ò!1Ñ!3Ô!3�JØ&¨!™O�EØ(¨4Ñ/�GØ%0°1¡_°uÑ%<�NØ—J’J˜~Ñ.Ô.Ð.Ø"0�Kà"ð Øðð %(��jÑ!Ð!à%0°1¡_Ð$5��jÑ!Ø)¨A™o�àÕ/Ô@Ñ@ð :Ø'-×'7Ò'7Ñ'9Ô'9��mÑ$àÕ/ÔDÑDð 9Ø�ØÔ/ð /Ø!×,Ò,Ñ.Ô.�D�DØ Ô1ð /Ø!×,Ò,Ñ.Ô.�DØ*.�Ð&Ñ'à'0 yØ”K ¤
  Ô-°DÀ8ð(ñ (ô (Ñ$�
˜Hð —’˜xÑ(Ô(Ð(Ý&,¨ZÑ&8Ô&8��lÑ#à�NŠN˜5Ñ!Ô!Ð!Ñ!Øˆr7   Nc                 óp  ‡— ddl m} ddlm} |}d}	|D �] }
|
                     dt          d¦  «        ¦  «        }|                     |j        ¦  «         |t
          j        z  rô|
                     dg ¦  «        }|                     t          |¦  «        ¦  «         |D ]}| 
                    |¦  «         Œ|
                     dg ¦  «        }|                     t          |¦  «        ¦  «         |D ]g}| 
                    |d         ¦  «         |                      ||d	         d
¦  «        ¦  «         |                      ||d         d
¦  «        ¦  «         Œh|t
          j        z  rt|
                     dg ¦  «        }|
                     dd¦  «        }t          |¦  «        dz  |rdndz  }|                     |¦  «         |D ]}|                     |¦  «         Œ|t
          j        z  rp|
                     dg ¦  «        }t!          |¦  «        D ]I\  }}||	z
  dz
  }|t          |¦  «        dz
  k     rdnd}|dz  |z  }|                     |dz  ¦  «         |}	ŒJn|	dz  }	|t
          j        z  r)|                     |
                     dd¦  «        ¦  «         |t
          j        z  r�|
                     dd¦  «        Š|j        r|                     ‰¦  «         n|j        r|                     ‰¦  «         |
                     dg ¦  «        }|                      |ˆfd„|D ¦   «         ¦  «        ¦  «         �Œ"d S )Nr   )Úencode)r   rM  rÁ  r3  rÅ  rÃ  rÔ  r¨  rÄ  rÈ  rÇ  FrÆ  r  rÉ  r   iÿÿÿ rÊ  rË  rÍ  c                 ó&   •— g | ]}|‰k    ¯|‰z
  ‘ŒS rž   rž   )rŸ   Úcr³  s     €r5   rr  z1MappingEntriesConverter.write.<locals>.<listcomp>_  s#   ø€ Ð+VÐ+VÐ+V¸ÈAÐQUÊIÈI¨A°©HÈIÈIÈIr7   )rÏ  rã  rÎ  r   r_   r°  rB  r¹   r¸  rÛ  r_  r-  rù   r¹  rM  rº  r´   r»  r³  r·  r´  rÜ  )r‹   r¸   r”   r¦   r¹   r¾   Ú	sbsEncoderŸ  r^  ÚlastIdrâ  rÁ  rÕ  rÃ  r–  ÚsegrÛ  rÙ  rØ  ra  rÜ  r“   Úeidr  Úhas_moreÚencoded_valuerà  r³  s                              @r5   rµ   zMappingEntriesConverter.write&  s¡  ø€ ØFÐFÐFÐFÐFÐFØCÐCÐCÐCÐCÐCàˆØˆàð 2	Yñ 2	YˆEð  Ÿ)š) MÕ3EÀaÑ3HÔ3HÑIÔIˆKØ×Ò˜kÔ/Ñ0Ô0Ð0àÕ/Ô>Ñ>ð 
<Ø Ÿ9š9 ]°BÑ7Ô7�Ø×!Ò!¥# h¡-¤-Ñ0Ô0Ð0Ø#ð )ð )�CØ—O’O CÑ(Ô(Ð(Ð(Ø Ÿ9š9Ð%:¸BÑ?Ô?�Ø×"Ò"¥3 x¡=¤=Ñ1Ô1Ð1Ø#ð <ð <�CØ—O’O C¨¤JÑ/Ô/Ð/Ø×$Ò$ U U¨3¨w¬<¸Ñ%<Ô%<Ñ=Ô=Ð=Ø×$Ò$ U U¨3¨u¬:°rÑ%:Ô%:Ñ;Ô;Ð;Ð;àÕ/ÔAÑAð ,Ø$ŸyšyÐ)<¸bÑAÔA�Ø#ŸišiÐ(?ÀÑGÔG�Ý # LÑ 1Ô 1°DÑ 8À[Ð=W¸T¸TÐVWÑX�Ø×!Ò! ,Ñ/Ô/Ð/Ø'ð ,ð ,�CØ×&Ò& sÑ+Ô+Ð+Ð+àÕ/Ô<Ñ<ð Ø—i’i 
¨BÑ/Ô/�Ý'¨™nœnð !ð !‘F�A�sð   &™L¨1Ñ,�EØ$%­¨C©¬°1©Ò$4Ð$4˜q˜q¸!�HØ%*¨a¡Z°8Ñ$;�MØ×&Ò& }°xÑ'?Ñ@Ô@Ð@Ø �F�Fð!ð ˜!‘�àÕ/Ô@Ñ@ð ?Ø×!Ò! %§)¢)¨M¸1Ñ"=Ô"=Ñ>Ô>Ð>àÕ/ÔDÑDð YØ—y’yÐ!1°1Ñ5Ô5�ØÔ/ð -Ø×&Ò& tÑ,Ô,Ð,Ð,Ø Ô1ð -Ø×&Ò& tÑ,Ô,Ð,Ø"ŸYšY |°RÑ8Ô8�
Ø× Ò   Ð+VÐ+VÐ+VÐ+V¸jÐ+VÑ+VÔ+VÑ!WÔ!WÑXÔXÐXùðe2	Yð 2	Yr7   c           
      ó,  — |D �]�}|                      dt          d¦  «        ¦  «        }|                     d|j        ¬¦  «         |                     ¦   «          d|v r6|d         D ]-}|                     d|¬¦  «         |                     ¦   «          Œ.d|v r6|d         D ]-}	|                     d	|	¬¦  «         |                     ¦   «          Œ.d
|v rJ|d
         D ]A}
|                     d|
d         |
d         |
d         ¬¦  «         |                     ¦   «          ŒBd|v r‚|                     dt          |                      dd¦  «        ¦  «        ¬¦  «         |                     ¦   «          |d         D ]-}|                     d|¬¦  «         |                     ¦   «          Œ.d|v r1|                     d|d         ¬¦  «         |                     ¦   «          d|v r�|                     d|                      dd¦  «        ¬¦  «         |                     ¦   «          d                     d„ |d         D ¦   «         ¦  «        }|                     d|¬¦  «         |                     ¦   «          |                     d¦  «         |                     ¦   «          �Œ‘d S )NrÁ  r   râ  )rÁ  rÉ  ÚentryIdr×   r3  rJ  rÅ  ÚdesignSpaceSegmentrÃ  rÔ  rÄ  rÂ  rÈ  rÇ  FÚ
childEntryrk  rÊ  rÍ  rË  r€  c              3   ó4   K  — | ]}t          |¦  «        V — Œd S r1   )Ústr©rŸ   rå  s     r5   r    z3MappingEntriesConverter.xmlWrite.<locals>.<genexpr>ˆ  s(   è è € Ð(MÐ(M°A­¨Q©¬Ð(MÐ(MÐ(MÐ(MÐ(MÐ(Mr7   )	r_   r°  rÄ  r¹   rß   rÞ   rÌ   r�  rÅ  )r‹   rÆ   r”   r¹   rP   rÁ   râ  Úformat_flagsré  rÃ  rè  ra  ÚcodePointsStrs                r5   rÇ   z MappingEntriesConverter.xmlWritea  s  € Øð *	 ñ *	 ˆEØ Ÿ9š9 ]Õ4FÀqÑ4IÔ4IÑJÔJˆLØ×Ò˜w°LÔ4FÐÑGÔGÐGØ×ÒÑÔÐØ˜UÐ"Ð"Ø  Ô,ð (ð (�CØ×'Ò'¨	¸Ð'Ñ=Ô=Ð=Ø×%Ò%Ñ'Ô'Ð'Ð'Ø Ð%Ð%Ø  Ô/ð (ð (�CØ×'Ò'¨¸CÐ'Ñ@Ô@Ð@Ø×%Ò%Ñ'Ô'Ð'Ð'Ø$¨Ð-Ð-Ø Ð!6Ô7ð (ð (�CØ×'Ò'Ø,Ø œJØ! 'œlØ œJð	 (ñ ô ð ð ×%Ò%Ñ'Ô'Ð'Ð'Ø" eÐ+Ð+Ø×#Ò#Ø+Ý˜eŸišiÐ(?ÀÑGÔGÑHÔHð $ñ ô ð ð ×!Ò!Ñ#Ô#Ð#Ø Ð!4Ô5ð (ð (�CØ×'Ò'¨¸CÐ'Ñ@Ô@Ð@Ø×%Ò%Ñ'Ô'Ð'Ð'Ø Ð%Ð%Ø×#Ò# M¸¸}Ô9MÐ#ÑNÔNÐNØ×!Ò!Ñ#Ô#Ð#Ø˜uÐ$Ð$Ø×#Ò#Ø$¨E¯IªIÐ6FÈÑ,JÔ,Jð $ñ ô ð ð ×!Ò!Ñ#Ô#Ð#Ø #§¢Ð(MÐ(M¸¸|Ô9LÐ(MÑ(MÔ(MÑ MÔ M�Ø×#Ò# L¸Ð#ÑFÔFÐFØ×!Ò!Ñ#Ô#Ð#Ø×Ò˜WÑ%Ô%Ð%Ø×ÒÑÔÐÑðU*	 ð *	 r7   c           
      ó¤  — g }|D �]I}t          |t          ¦  «        sŒ|\  }}}|dk    �r#t          |                     dd¦  «        ¦  «        }dt	          |¦  «        i}|D �]Ö}	t          |	t          ¦  «        sŒ|	\  }
}}|
dk    r=|                     dg ¦  «                             t          |d         ¦  «        ¦  «         Œb|
dk    r0|                     dg ¦  «                             |d         ¦  «         Œ˜|
d	k    rZ|                     d
g ¦  «                             |d         t          |d         ¦  «        t          |d         ¦  «        dœ¦  «         Œø|
dk    r't          t          |d         ¦  «        ¦  «        |d<   �Œ%|
dk    r>|                     dg ¦  «                             t          |d         ¦  «        ¦  «         �Œi|
dk    rt          |d         ¦  «        |d<   �Œ‰|
dk    rt          |d         ¦  «        |d<   �Œ©|
dk    r'd„ |d          	                    ¦   «         D ¦   «         |d<   �ŒØ|                     |¦  «         �ŒK|S )Nrâ  rÁ  Ú0rí  rÉ  r¹   rJ  r3  rî  rÅ  rÃ  rÔ  rÄ  rÂ  rÇ  rï  rÈ  rl  rÊ  rË  rÍ  c                 ó0   — g | ]}|¯t          |¦  «        ‘ŒS rž   rë   rò  s     r5   rr  z3MappingEntriesConverter.xmlRead.<locals>.<listcomp>´  s3   € ð /ð /ð /Ø'(Àqð/Ý ™FœFð/ð /ð /r7   )
r2   r3   r   r_   r°  Ú
setdefaultrd   r‡  r­  Úsplit)r‹   rÁ   rÂ   r”   r^  ÚelemrP   Úformat_flags_intrâ  Úe_elemÚenameÚeattrsÚecontents                r5   rÃ   zMappingEntriesConverter.xmlReadŽ  s¥  € ØˆØð '	&ñ '	&ˆDÝ˜d¥EÑ*Ô*ð ØØ#'Ñ ˆD�%˜Ø�wŠ‰Ý#+¨E¯IªI°mÀSÑ,IÔ,IÑ#JÔ#JÐ Ø&Õ(:Ð;KÑ(LÔ(LÐM�Ø%ð ñ �FÝ% f­eÑ4Ô4ð !Ø Ø.4Ñ+�E˜6 8Ø 	Ò)Ð)Ø×(Ò(¨°RÑ8Ô8×?Ò?Ý$ V¨G¤_Ñ5Ô5ñô ð ð ð  ,Ò.Ð.Ø×(Ò(¨¸Ñ;Ô;×BÒBÀ6È'Ä?ÑSÔSÐSÐSØÐ"6Ò6Ð6Ø×(Ò(Ð)>ÀÑCÔC×JÒJà'-¨e¤}Ý).¨v°g¬Ñ)?Ô)?Ý',¨V°E¬]Ñ';Ô';ðð ñô ð ð ð Ð"9Ò9Ð9Ý9=½hÀvÈgÄÑ>WÔ>WÑ9XÔ9X˜Ð5Ñ6Ñ6Ø ,Ò.Ð.Ø×(Ò(Ð)<¸bÑAÔA×HÒHÝ$ V¨G¤_Ñ5Ô5ñô ð ñ ð  -Ò/Ð/Ý/7¸¸w¼Ñ/HÔ/H˜˜mÑ,Ñ,ØÐ"2Ò2Ð2Ý2:¸6À'¼?Ñ2KÔ2K˜Ð.Ñ/Ñ/Ø ,Ò.Ð.ð/ð /Ø,2°7¬O×,AÒ,AÑ,CÔ,Cð/ñ /ô /˜˜lÑ+ùð —’˜uÑ%Ô%Ð%ùØˆr7   r1   rO  rž   r7   r5   r¾  r¾  Ó
  s_   € € € € € ðPð Pð Pðd9Yð 9Yð 9Yð 9Yðv+ ð + ð + ðZ*ð *ð *ð *ð *r7   r¾  Úint8Úint16Úint32r?   r;   Úuint24r@   Úchar64ró  ÚMappingEntriesÚOffsetrG   ÚOffset24Ú	TupleList)r‚  )r�  c                 ó.   — t          t          | ¬¦  «        S ©N)r^   )r,   ra  ©ÚCs    r5   r6   r6   é  ó   € �7¥9¸Ð;Ñ;Ô;€ r7   c                 ó.   — t          t          | ¬¦  «        S r
  )r,   rÇ  r  s    r5   r6   r6   ê  s   € ­Õ1HÐUVÐ)WÑ)WÔ)W€ r7   c                 ó.   — t          t          | ¬¦  «        S r
  )r,   r  r  s    r5   r6   r6   ë  s   € ¥­ÀQÐ!GÑ!GÔ!G€ r7   c                 ó.   — t          t          | ¬¦  «        S r
  )r,   r  r  s    r5   r6   r6   ì  r  r7   c                 ó.   — t          t          | ¬¦  «        S r
  )r,   ra   r  s    r5   r6   r6   í  s   € �'¥%°AÐ6Ñ6Ô6€ r7   c                 ó.   — t          t          | ¬¦  «        S r
  )r,   r  r  s    r5   r6   r6   î  s   € �7¥6°aÐ8Ñ8Ô8€ r7   c                 ó.   — t          t          | ¬¦  «        S r
  )r,   r  r  s    r5   r6   r6   ï  s   € �W¥W¸Ð;Ñ;Ô;€ r7   )r˜  ÚVarCompositeGlyphListr!  r3  rM   r%   rN   r&   ra  rÇ  r  r  ÚOffsetToÚ	LOffsetToÚLOffset24To)ŒrÎ  r   rš  r   rŸ  r   r¤  r   r¡  r   rÂ  r   rÄ  Ú%fontTools.ttLib.tables.TupleVariationr	   ÚfontTools.misc.roundToolsr
   r   ÚfontTools.misc.textToolsr   r   r   r   r   ÚfontTools.misc.lazyToolsr   ÚfontTools.ttLibr   r   r   r_  r   r   r   r   r   ÚotDataSchemar   ÚotTablesr   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r¬  r(   r®  r)   Ú	itertoolsr*   r+   Ú	functoolsr,   Útypesr-   rÓ   ró  Útypingr.   ÚloggingÚenumr/   Ú	getLoggerrb   rx  rí  rs  rm   Úobjectro   rÕ   rã   rè   rî   r  r  r  r  r$  r2  r<  rF  rP  rT   rU   rV   r[  ra  ro  rr  r|  r…  rŠ  r‘  r§  r«  r®  r½  r¿  rË  rZ   rX   ra   r  r  rE   rW   rC   rA   rB   rD   r:   rV  ra  rÇ  rß  rö  r  r�  r  r!  r3  r;  rQ  re  ru  r€  r˜  rœ  r¤  r°  r¾  rY   rž   r7   r5   ú<module>r'     s  ððð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð AÐ @Ð @Ð @Ð @Ð @Ø JÐ JÐ JÐ JÐ JÐ JÐ JÐ JØ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MØ -Ð -Ð -Ð -Ð -Ð -Ø KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ Kðð ð ð ð ð ð ð ð ð ð ð ð ð ð $Ð #Ð #Ð #Ð #Ð #ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð  .Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð à€gÔ˜Ñ!Ô!€Ø
(Ð
(€ðG(˜t Iœð G(ð G(ð G(ð G(ðTjð jð jð jð j�Fñ jô jð jðZ/ð /ð /ð /ð /�-ñ /ô /ð /ð"ð ð ð ð �Kñ ô ð ðð ð ð ð ˆ{ñ ô ð ð&ð &ð &ð &ð &ˆ8ñ &ô &ð &ð 'ð 'ð 'ð 'ð 'ˆHñ 'ô 'ð 'ð  ð  ð  ð  ð  ˆeñ  ô  ð  ð!ð !ð !ð !ð !ˆ}˜eñ !ô !ð !ð'ð 'ð 'ð 'ð 'ˆHñ 'ô 'ð 'ð (ð (ð (ð (ð (ˆXñ (ô (ð (ð &ð &ð &ð &ð &ˆ8ñ &ô &ð &ð 'ð 'ð 'ð 'ð 'ˆHñ 'ô 'ð 'ð "ð "ð "ð "ð "ˆXñ "ô "ð "ð ð  ð  ð  ð  �(ñ  ô  ð  ð	ð 	ð 	ð 	ð 	�K ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	�[ &ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	�K ñ 	ô 	ð 	ðð ð ð ð ˆ+ñ ô ð ðAð Að Að Að Aˆkñ Aô Að Að&ð ð ð ð �ñ ô ð ð
ð ð ð ð ˆVñ ô ð ð$ð ð ð ð �ñ ô ð ðð ð ð ð �ñ ô ð ð.ð .ð .ð .ð .�ñ .ô .ð .ð0ð 0ð 0ð 0ð 0�Zñ 0ô 0ð 0ð:ð ð ð ð ˆNñ ô ð ð ð  ð  ð  ð  ˆnñ  ô  ð  ð>ð >ð >ð >ð >ˆGñ >ô >ð >ð0ð ð ð ð �%ñ ô ð ðð ð ð ð ˆkñ ô ð ð0ð ð ð ð ˆ[ñ ô ð ð>D4ð D4ð D4ð D4ð D4ˆ]ñ D4ô D4ð D4ðN>ð >ð >ð >ð >�vñ >ô >ð >ð6+ð +ð +ð +ð +ˆFñ +ô +ð +ðDð ð ð ð ˆUñ ô ð ðð ð ð ð ˆeñ ô ð ðCð Cð Cð Cð C˜ñ Cô Cð Cð.Cð Cð Cð Cð C�vñ Cô Cð Cð4Mð Mð Mð Mð M�ñ Mô Mð MðLð Lð Lð Lð Lˆuñ Lô Lð LðGð Gð Gð Gð G�&˜(ñ Gô Gð GðLð Lð Lð Lð L�Eñ Lô Lð Lð8ð 8ð 8ð 8ð 8�(ñ 8ô 8ð 8ð&ð ð ð ð �+ñ ô ð ð0tð tð tð tð t�ñ tô tð tð|8=ð 8=ð 8=ð 8=ð 8=˜mñ 8=ô 8=ð 8=ðv>>ð >>ð >>ð >>ð >>˜Mñ >>ô >>ð >>ðB|>ð |>ð |>ð |>ð |>˜Mñ |>ô |>ð |>ðBDð Dð Dð Dð D�ñ Dô Dð DðN
S6ð S6ð S6ð S6ð S6�)ñ S6ô S6ð S6ðlKð Kð Kð Kð K�mñ Kô Kð Kð@ð ð ð ð �-ñ ô ð ðD,ð ,ð ,ð ,ð ,�-ñ ,ô ,ð ,ð^2(ð 2(ð 2(ð 2(ð 2(�ñ 2(ô 2(ð 2(ðj-
ð -
ð -
ð -
ð -
�]ñ -
ô -
ð -
ð`0(ð 0(ð 0(ð 0(ð 0(�=ñ 0(ô 0(ð 0(ðfð ð ð ð ñ ô ð ð$U(ð U(ð U(ð U(ð U(�ñ U(ô U(ð U(ðp
Gð 
Gð 
Gð 
Gð 
G�iñ 
Gô 
Gð 
Gðð ð ð ð �ñ ô ð ð*1ð 1ð 1ð 1ð 1�ñ 1ô 1ð 1ðð ð ð ð �ñ ô ð ðð ð ð ð �Jñ ô ð ðHð Hð Hð Hð H˜ñ Hô Hð Hð&eð eð eð eð e˜mñ eô eð eðP5à
ˆDð5ð ˆUð5ð ˆTð	5ð
 ˆUð5ð ˆfð5ð ˆfð5ð ˆeð5ð ˆfð5ð ˆwð5ð �ð5ð ˆwð5ð 
ˆ3ð5ð ˆwð5ð �ð5ð  ˆfð!5ð" �*ð#5ð$ ˆUð%5ð 5ð& ˆwð'5ð( ˆUð)5ð* �;ð+5ð, ˆfð-5ð. Ð-ð/5ð0 ˆeð15ð2 ˆvð35ð4 �ð55ð6 �;ð75ð8 �*ð95ð: �nð;5ð< �Lð=5ð> �*ð?5ð@ �*ðA5ðB �]ðC5ðD �ðE5ðF ��˜°{ÐCÑCÔCðG5ð 5ðH �w˜À;ÐOÑOÔOØ$˜W YÐ:KÐLÑLÔLàØØ!Ø)Ø!Ø)à;Ð;ØWÐWØGÐGØ;Ð;Ø6Ð6Ø8Ð8Ø;Ð;ði5ð 5ð 5Ð Ð Ð r7   