Ë
    ^ãjoÍ ã                   óÚ  — 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/m0Z0m1Z1m2Z2m3Z4m5Z6m7Z7 d dl8m9Z9m:Z: d dl;m<Z< d dl=m>Z> d dl?Z?d dl@Z@d dlAmBZB d dlCZCd dlDmEZE  eCjŒ                  eG«      ZHd„ ZIdeJe%   fd„ZK G d„ deL«      ZM G d„ deM«      ZN G d„ deN«      ZO G d„ deN«      ZP G d„ deP«      ZQ G d„ deP«      ZR G d „ d!eR«      ZS G d"„ d#eOeR«      ZT G d$„ d%eP«      ZU G d&„ d'eP«      ZV G d(„ d)eP«      ZW G d*„ d+eP«      ZX G d,„ d-eP«      ZY G d.„ d/eP«      ZZ G d0„ d1eP«      Z[ G d2„ d3e[eX«      Z\ G d4„ d5e[eV«      Z] G d6„ d7e[eZ«      Z^ G d8„ d9e[eR«      Z_ G d:„ d;eN«      Z` G d<„ d=eN«      Za G d>„ d?ea«      Zb G d@„ dAea«      Zc G dB„ dCeV«      Zd G dD„ dEeV«      Ze G dF„ dGeN«      Zf G dH„ dIef«      Zg G dJ„ dKef«      Zh G dL„ dMeh«      Zi G dN„ dOeh«      Zj G dP„ dQej«      Zk G dR„ dSek«      Zl G dT„ dUeN«      Zm G dV„ dWeN«      Zn G dX„ dYeM«      Zo G dZ„ d[eo«      Zp G d\„ d]eo«      Zq G d^„ d_eq«      Zr G d`„ daeq«      Zs G db„ dcer«      Zt G dd„ deer«      Zu G df„ dgeo«      Zv G dh„ dieq«      Zw G dj„ dkerew«      Zx G dl„ dmeq«      Zy G dn„ doeP«      Zz G dp„ dqez«      Z{ G dr„ dseM«      Z| G dt„ dueM«      Z} G dv„ dweM«      Z~ G dx„ dyeM«      Z G dz„ d{eM«      Z€ G d|„ d}e€«      Z� G d~„ deM«      Z‚ G d€„ d�eM«      Zƒ G d‚„ dƒeM«      Z„ G d„„ d…eM«      Z… G d†„ d‡eM«      Z† G dˆ„ d‰eM«      Z‡ G dŠ„ d‹«      Zˆ G dŒ„ d�eM«      Z‰ G dŽ„ d�e‰«      ZŠ G d�„ d‘eV«      Z‹ G d’„ d“eX«      ZŒ G d”„ d•eŒ«      Z3 G d–„ d—eŒ«      Z5 G d˜„ d™eE«      Z� G dš„ d›eM«      ZŽi dœeW“d�eU“džeY“dŸeQ“d eX“d¡eV“d¢eZ“d£eR“d¤en“d!eS“d#eT“dUem“d;e`“d=ea“d?eb“dAec“dCed“i dIeg“dMei“dOej“dQek“dSel“d¥eo“d¦eŽ“d§eq“d¨er“d©es“dqe{“d…e…“d‡e†“d‰e‡“d‘e‹“d•e3“d—e5“¥i dEee“dª e<e‰eˆ¬««      “d� e<eŠeˆ¬««      “d¬ e<e‰e)¬­«      “d�eƒ“dƒe„“d®ep“d¯e~“d°ep“d±e“dsd²„ “dud³„ “dd´„ “d{dµ„ “d¶d·„ “d¸d¹„ “dºd»„ “¥Z�y)¼é    )Ú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ÚFeatureListÚ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    úe/var/www/html/metafoliadorv2/venv/lib/python3.12/site-packages/fontTools/ttLib/tables/otConverters.pyú<lambda>r7   1   s   € ”J˜q¤%Ó(€ ó    Ú	tableSpecc           	      ó0  — g }i }| D �]‰  }|j                   }|j                   j                  d«      r|j                  dk(  sJ ‚t        }�nD|j                   j	                  d«      s|j                   dv r%t
        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        }nˆ|j                   dk(  r|j                  dk(  rt        }nc|j                   dv rt        }nN|j                  t         vr!d|j                  vr|j                  }t"        }nt%        |j                  |t         «      } ||j                   |j&                  |j(                  |j*                  ¬«      }|j,                  rt/        |j,                  dd«      |_        |j0                  r|j0                  }n;|j                  dv r|j3                  |j                  «      }n|j3                  |«      }|j0                  s||_        |j                   dv rw|d   |_        |j4                  j7                  «       D ]P  }	|	j7                  «       D ];  }
t9        |j                   |j&                  |j(                  |
«      ||
j:                  <   Œ= ŒR |j                   d	k(  rl|d   |_        |d	   |_        |j<                  j7                  «       D ];  }
t9        |j                   |j&                  |j(                  |
«      ||
j:                  <   Œ= |jA                  |«       |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<   Úuint24Úuint32ÚSubTableÚExtSubTableÚ	SubStructÚFeatureParamsÚFeatureVariationsÚFeatureÚLOffset)ÚCIDGlyphMappingÚGlyphCIDMappingú(©Údescriptionú<string>Úeval)Ú	MortChainr&   Ú	MorxChain)rC   rD   rE   r   ÚfeatureParamTypes)!ÚnameÚ
startswithÚtyper;   ÚendswithÚComputedUInt8ÚComputedUShortÚComputedUInt24ÚComputedULongrC   rD   rE   rF   rG   ÚAlternateFeatureÚStructWithLengthÚconverterMappingÚStructrP   ÚrepeatÚauxrN   Ú	conditionÚcompileÚ
tableClassÚgetr   ÚvaluesÚTableÚ__name__rS   ÚdefaultFeatureParamsÚappend)r9   ÚtableNamespaceÚ
convertersÚconvertersByNameÚspecÚ	tableNameÚconverterClassÚconvrd   r5   Úclss              r6   ÚbuildConvertersrs   4   s  € ð €JØÐØó C+ˆØ—I‘Iˆ	Ø�9‰9×Ñ Ô.Ø—9‘9 Ò(Ð(Ð(Ü(ŠNØ�Y‰Y×Ñ Ô(¨D¯I©IÐ9VÑ,Vä&Ü(Ü(Ü'ñ	ð
 �i‰iñ‰Nð �Y‰Y˜*Ò$Ü%‰NØ�Y‰Y˜-Ò'Ü(‰NØ�Y‰Y˜+Ò%Ü&‰NØ�Y‰Y˜/Ò)Ü*‰NØ�Y‰YÐ-Ò-Ü.‰NØ�Y‰Y˜)Ò#¨¯	©	°YÒ(>Ü-‰NØ�Y‰YÐ@Ñ@Ü-‰Nà—9‘9Ô 0Ñ0°SÀÇ	Á	Ñ5IØ ŸI™I�	Ü!'‘ä!% d§i¡i°ÔAQÓ!R�áØ�I‰I�t—{‘{ D§H¡H¸$×:JÑ:Jô
ˆð �>Š>Ü$ T§^¡^°ZÀÓHˆDŒNà�?Š?àŸ™‰JØ�Y‰YÐDÑDØ'×+Ñ+¨D¯I©IÓ6‰Jà'×+Ñ+¨IÓ6ˆJà�ŠØ(ˆDŒOà�9‰9Ð@Ñ@Ø-¨mÑ<ˆDÔà×%Ñ%×,Ñ,Ó.ò �ØŸ8™8›:ò �CÜ5:ØŸ	™	 4§;¡;°·±¸#ó6Ð$ S§\¡\Ò2ñðð
 �9‰9˜Ò'Ø%3Ð4GÑ%HˆDÔ"Ø(6°Ñ(GˆDÔ%Ø×-Ñ-×4Ñ4Ó6ò �Ü16Ø—I‘I˜tŸ{™{¨D¯H©H°có2Ð  §¡Ò.ðð 	×Ñ˜$ÔØ�y‰yÐ 0Ñ0Ð;°$·)±)Ó;Ð0Ø&*Ð˜Ÿ™Ó#ðGC+ðH Ð'Ð'Ð'r8   c                   ó†   — e Zd ZdZdddœd„Z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y)ÚBaseConverterz\Base class for converter objects. Apart from the constructor, this
    is an abstract class.NÚ rM   c                óD  — || _         || _        || _        | j                  r(| j                  st        | j                  dd«      | _        || _        |j                  d«      xs |dv | _        |j                  d«      xs |dk(  | _        |dv | _        || _	        d | _
        y )NrO   rP   r=   )ÚDesignAxisRecordSizeÚValueRecordSizeÚ
LookupTyper?   )Ú
ClassCountÚClass2CountÚ
FeatureTagÚSettingsCountÚVarRegionCountÚMappingCountÚRegionAxisCountÚDesignAxisCountrx   ÚAxisValueCountry   Ú	AxisCountÚBaseGlyphRecordCountÚLayerRecordCountÚAxisIndicesListÚ	NumGlyphsÚMaxGlyphMapEntryIndexÚMaxEntryIndexÚ
NumEntries)rT   r`   ra   rc   rd   rW   ÚisCountÚisLookupTypeÚisPropagatedrN   rb   ©ÚselfrT   r`   ra   rd   rN   s         r6   Ú__init__zBaseConverter.__init__…   s    € ØˆŒ	ØˆŒØˆŒØ�8Š8˜DŸKšKÜ˜tŸx™x¨°VÓ<ˆDŒHØ$ˆŒØ—}‘} WÓ-ò 
°ð :
ð 2
ˆŒð !ŸM™M¨,Ó7ÒN¸4À;Ñ;NˆÔØ ð %
ð 
ˆÔð, 'ˆÔØˆ�r8   c                 óP   — | j                   d u xs t        | j                   d |«      S r2   )rb   rP   )r�   Útables     r6   Ú	isEnabledzBaseConverter.isEnabledª   s#   € Ø�~‰~ Ð%ÒJ¬¨d¯n©n¸dÀEÓ)JÐJr8   c                 ó`  ‡ ‡‡‡	‡
— ‰j                   xr |dkD  }|r‰ j                  ‰«      Š
‰
t        u rd}|s6g }t        |«      D ]$  }|j	                  ‰ j                  ‰‰|«      «       Œ& |S ˆˆˆ
ˆ fd„} |«       Š	t        ˆ	fd„t        |«      D «       «      }‰j                  |‰
z  «       |S )z(Read an array of values from the reader.é   Fc                  óV   •‡‡— ‰j                  «       Š‰j                  Šˆˆˆˆˆfd„} | S )Nc                 óX   •— ‰j                  ‰| ‰z  z   «       ‰j                  ‰‰i «      S r2   )ÚseekÚread)ÚiÚfontÚposÚreader_copyÚ
recordSizer�   s    €€€€€r6   Ú	read_itemzABaseConverter.readArray.<locals>.get_read_item.<locals>.read_item¿   s-   ø€ Ø×$Ñ$ S¨1¨z©>Ñ%9Ô:ØŸ9™9 [°$¸Ó;Ð;r8   ©Úcopyr�   )r    r�   rž   rœ   ÚreaderrŸ   r�   s    @@€€€€r6   Úget_read_itemz.BaseConverter.readArray.<locals>.get_read_item»   s)   ú€ Ø$Ÿk™k›m�Ø—j‘j�÷<ð <ð !Ð r8   c              3   ó"   •K  — | ]  }‰–— Œ y ­wr2   © )Ú.0r›   r    s     €r6   ú	<genexpr>z*BaseConverter.readArray.<locals>.<genexpr>Æ   s   øè ø€ Ò9 qœÑ9ùs   ƒ)ÚlazyÚgetRecordSizeÚNotImplementedÚrangerj   rš   r   Úadvance)r�   r£   rœ   Ú	tableDictÚcountr©   Úlr›   r¤   r    rŸ   s   ```      @@r6   Ú	readArrayzBaseConverter.readArray­   s¦   ü€ à�y‰yÒ&˜U Q™YˆÙØ×+Ñ+¨FÓ3ˆJØœ^Ñ+Ø�ÙØˆAÜ˜5“\ò =�Ø—‘˜Ÿ™ 6¨4°Ó;Õ<ð=àˆH÷!ñ &›ˆIÜÓ9¬E°%«LÔ9Ó9ˆAØ�N‰N˜5 :Ñ-Ô.àˆHr8   c                 ó>   — t        | d«      r| j                  S t        S )NÚ
staticSize)Úhasattrr³   r«   ©r�   r£   s     r6   rª   zBaseConverter.getRecordSizeË   s   € Ü�4˜Ô&Ø—?‘?Ð"ÜÐr8   c                 ó   — t        | «      ‚)zRead a value from the reader.©ÚNotImplementedError©r�   r£   rœ   r®   s       r6   rš   zBaseConverter.readÐ   ó   € ä! $Ó'Ð'r8   c                 ó¤   — 	 t        |«      D ]  \  }}| j                  |||||«       Œ y # t        $ r}|j                  fz   |_        ‚ d }~ww xY wr2   )Ú	enumerateÚwriteÚ	ExceptionÚargs)r�   Úwriterrœ   r®   rf   r›   ÚvalueÚes           r6   Ú
writeArrayzBaseConverter.writeArrayÔ   sW   € ð	Ü% fÓ-ò >‘��5Ø—
‘
˜6 4¨°E¸1Õ=ñ>øäò 	Ø—V‘V˜q˜d‘]ˆAŒFØûð	ús   ‚(+ «	A´A
Á
Ac                 ó   — t        | «      ‚)zWrite a value to the writer.r·   ©r�   rÀ   rœ   r®   rÁ   ÚrepeatIndexs         r6   r½   zBaseConverter.writeÜ   rº   r8   c                 ó   — t        | «      ‚)zRead a value from XML.r·   ©r�   ÚattrsÚcontentrœ   s       r6   ÚxmlReadzBaseConverter.xmlReadà   rº   r8   c                 ó   — t        | «      ‚)zWrite a value to XML.r·   ©r�   Ú	xmlWriterrœ   rÁ   rT   rÉ   s         r6   ÚxmlWritezBaseConverter.xmlWriteä   rº   r8   zVarIndexBase\s*\+\s*(\d+)Úreturnc                 ó†   — | j                   j                  | j                  «      }|syt        |j	                  d«      «      S )zJIf description has `VarIndexBase + {offset}`, return the offset else None.Nr   )ÚvarIndexBasePlusOffsetREÚsearchrN   ÚintÚgroup)r�   Úms     r6   ÚgetVarIndexOffsetzBaseConverter.getVarIndexOffsetê   s6   € à×)Ñ)×0Ñ0°×1AÑ1AÓBˆÙØÜ�1—7‘7˜1“:‹Ðr8   r2   )rh   Ú
__module__Ú__qualname__Ú__doc__r‘   r”   r±   rª   rš   rÃ   r½   rË   rÏ   Úrerc   rÒ   r/   rÔ   r×   r¦   r8   r6   ru   ru   �   sa   „ ñð#È"ô #òJKòò<ò
(òó(ò(ò(ð  *˜rŸz™zÐ*FÓGÐð 8¨C¡=ô r8   ru   c                   ó8   — e Zd Zed„ «       Zed„ «       Zd„ Zd„ Zy)ÚSimpleValuec                 ó   — | S r2   r¦   ©rÁ   s    r6   ÚtoStringzSimpleValue.toStringó   ó   € àˆr8   c                 ó   — | S r2   r¦   rß   s    r6   Ú
fromStringzSimpleValue.fromString÷   rá   r8   c                 ór   — |j                  ||d| j                  |«      fgz   «       |j                  «        y ©NrÁ   )Ú	simpletagrà   ÚnewlinerÍ   s         r6   rÏ   zSimpleValue.xmlWriteû   s4   € Ø×Ñ˜D %¨G°T·]±]À5Ó5IÐ+JÐ*KÑ"KÔLØ×ÑÕr8   c                 ó*   — | j                  |d   «      S rå   )rã   rÈ   s       r6   rË   zSimpleValue.xmlReadÿ   s   € Ø�‰˜u W™~Ó.Ð.r8   N)rh   rØ   rÙ   Ústaticmethodrà   rã   rÏ   rË   r¦   r8   r6   rÝ   rÝ   ò   s2   „ Øñó ðð ñó ðòó/r8   rÝ   c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚOptionalValueNc                 óª   — || j                   k7  r"|j                  d| j                  |«      f«       |j                  ||«       |j	                  «        y rå   )ÚDEFAULTrj   rà   ræ   rç   rÍ   s         r6   rÏ   zOptionalValue.xmlWrite  sD   € Ø�D—L‘LÒ Ø�L‰L˜' 4§=¡=°Ó#7Ð8Ô9Ø×Ñ˜D %Ô(Ø×ÑÕr8   c                 óJ   — d|v r| j                  |d   «      S | j                  S rå   )rã   rí   rÈ   s       r6   rË   zOptionalValue.xmlRead  s'   € Ø�eÑØ—?‘? 5¨¡>Ó2Ð2Ø�|‰|Ðr8   )rh   rØ   rÙ   rí   rÏ   rË   r¦   r8   r6   rë   rë     s   „ Ø€Gòór8   rë   c                   ó   — e Zd Zed„ «       Zy)ÚIntValuec                 ó   — t        | d«      S ©Nr   )rÔ   rß   s    r6   rã   zIntValue.fromString  s   € ä�5˜!‹}Ðr8   N©rh   rØ   rÙ   ré   rã   r¦   r8   r6   rð   rð     s   „ Øñó ñr8   rð   c                   ó*   — e Zd ZdZd„ Zd„ Zdd„Zd„ Zy)ÚLongé   c                 ó"   — |j                  «       S r2   ©ÚreadLongr¹   s       r6   rš   z	Long.read  ó   € Ø�‰Ó Ð r8   c                 ó$   — |j                  |«      S r2   )ÚreadLongArray©r�   r£   rœ   r®   r¯   s        r6   r±   zLong.readArray  ó   € Ø×#Ñ# EÓ*Ð*r8   Nc                 ó&   — |j                  |«       y r2   )Ú	writeLongrÅ   s         r6   r½   z
Long.write!  ó   € Ø×Ñ˜Õr8   c                 ó&   — |j                  |«       y r2   )ÚwriteLongArray©r�   rÀ   rœ   r®   rf   s        r6   rÃ   zLong.writeArray$  ó   € Ø×Ñ˜fÕ%r8   r2   ©rh   rØ   rÙ   r³   rš   r±   r½   rÃ   r¦   r8   r6   rõ   rõ     ó   „ Ø€Jò!ò+ó ó&r8   rõ   c                   ó*   — e Zd ZdZd„ Zd„ Zdd„Zd„ Zy)ÚULongrö   c                 ó"   — |j                  «       S r2   ©Ú	readULongr¹   s       r6   rš   z
ULong.read+  ó   € Ø×ÑÓ!Ð!r8   c                 ó$   — |j                  |«      S r2   )ÚreadULongArrayrý   s        r6   r±   zULong.readArray.  ó   € Ø×$Ñ$ UÓ+Ð+r8   Nc                 ó&   — |j                  |«       y r2   ©Ú
writeULongrÅ   s         r6   r½   zULong.write1  ó   € Ø×Ñ˜%Õ r8   c                 ó&   — |j                  |«       y r2   )ÚwriteULongArrayr  s        r6   rÃ   zULong.writeArray4  ó   € Ø×Ñ˜vÕ&r8   r2   r  r¦   r8   r6   r	  r	  (  ó   „ Ø€Jò"ò,ó!ó'r8   r	  c                   ó   — e Zd Zed„ «       Zy)ÚFlags32c                 ó   — d| z  S )Nz0x%08Xr¦   rß   s    r6   rà   zFlags32.toString9  ó   € à˜%ÑÐr8   N)rh   rØ   rÙ   ré   rà   r¦   r8   r6   r  r  8  s   „ Øñ ó ñ r8   r  c                   ó   — e Zd ZeZy)ÚVarIndexN)rh   rØ   rÙ   r*   rí   r¦   r8   r6   r  r  >  s   „ Ø �Gr8   r  c                   ó*   — e Zd ZdZd„ Zd„ Zdd„Zd„ Zy)ÚShorté   c                 ó"   — |j                  «       S r2   )Ú	readShortr¹   s       r6   rš   z
Short.readE  r  r8   c                 ó$   — |j                  |«      S r2   )ÚreadShortArrayrý   s        r6   r±   zShort.readArrayH  r  r8   Nc                 ó&   — |j                  |«       y r2   )Ú
writeShortrÅ   s         r6   r½   zShort.writeK  r  r8   c                 ó&   — |j                  |«       y r2   )ÚwriteShortArrayr  s        r6   rÃ   zShort.writeArrayN  r  r8   r2   r  r¦   r8   r6   r   r   B  r  r8   r   c                   ó*   — e Zd ZdZd„ Zd„ Zdd„Zd„ Zy)ÚUShortr!  c                 ó"   — |j                  «       S r2   ©Ú
readUShortr¹   s       r6   rš   zUShort.readU  ó   € Ø× Ñ Ó"Ð"r8   c                 ó$   — |j                  |«      S r2   )ÚreadUShortArrayrý   s        r6   r±   zUShort.readArrayX  s   € Ø×%Ñ% eÓ,Ð,r8   Nc                 ó&   — |j                  |«       y r2   ©ÚwriteUShortrÅ   s         r6   r½   zUShort.write[  ó   € Ø×Ñ˜5Õ!r8   c                 ó&   — |j                  |«       y r2   )ÚwriteUShortArrayr  s        r6   rÃ   zUShort.writeArray^  s   € Ø×Ñ Õ'r8   r2   r  r¦   r8   r6   r+  r+  R  s   „ Ø€Jò#ò-ó"ó(r8   r+  c                   ó*   — e Zd ZdZd„ Zd„ Zdd„Zd„ Zy)ÚInt8r   c                 ó"   — |j                  «       S r2   )ÚreadInt8r¹   s       r6   rš   z	Int8.reade  rú   r8   c                 ó$   — |j                  |«      S r2   )ÚreadInt8Arrayrý   s        r6   r±   zInt8.readArrayh  rþ   r8   Nc                 ó&   — |j                  |«       y r2   )Ú	writeInt8rÅ   s         r6   r½   z
Int8.writek  r  r8   c                 ó&   — |j                  |«       y r2   )ÚwriteInt8Arrayr  s        r6   rÃ   zInt8.writeArrayn  r  r8   r2   r  r¦   r8   r6   r9  r9  b  r  r8   r9  c                   ó*   — e Zd ZdZd„ Zd„ Zdd„Zd„ Zy)ÚUInt8r   c                 ó"   — |j                  «       S r2   )Ú	readUInt8r¹   s       r6   rš   z
UInt8.readu  r  r8   c                 ó$   — |j                  |«      S r2   )ÚreadUInt8Arrayrý   s        r6   r±   zUInt8.readArrayx  r  r8   Nc                 ó&   — |j                  |«       y r2   )Ú
writeUInt8rÅ   s         r6   r½   zUInt8.write{  r  r8   c                 ó&   — |j                  |«       y r2   )ÚwriteUInt8Arrayr  s        r6   rÃ   zUInt8.writeArray~  r  r8   r2   r  r¦   r8   r6   rC  rC  r  r  r8   rC  c                   ó   — e Zd ZdZd„ Zdd„Zy)ÚInt24é   c                 ó"   — |j                  «       S r2   )Ú	readInt24r¹   s       r6   rš   z
Int24.read…  r  r8   Nc                 ó`   — d|cxk  rdk  sJ |«       ‚ J |«       ‚|j                  |dz  «       y )Ni  €ÿi  € éÿÿÿ ©ÚwriteUInt24rÅ   s         r6   r½   zInt24.writeˆ  s8   € Ø˜UÔ. gÒ.Ð5°Ó5Ñ.Ð5°Ó5Ð.Ø×Ñ˜5 8Ñ+Õ,r8   r2   ©rh   rØ   rÙ   r³   rš   r½   r¦   r8   r6   rM  rM  ‚  s   „ Ø€Jò"ô-r8   rM  c                   ó   — e Zd ZdZd„ Zdd„Zy)ÚUInt24rN  c                 ó"   — |j                  «       S r2   ©Ú
readUInt24r¹   s       r6   rš   zUInt24.read�  r/  r8   Nc                 ó&   — |j                  |«       y r2   rS  rÅ   s         r6   r½   zUInt24.write“  r5  r8   r2   rU  r¦   r8   r6   rW  rW  �  s   „ Ø€Jò#ô"r8   rW  c                   ó   — e Zd Zd„ Zy)ÚComputedIntc                 óV   — |�'|j                  |›d|›�«       |j                  «        y y )Nú=)Úcommentrç   rÍ   s         r6   rÏ   zComputedInt.xmlWrite˜  s,   € ØÐØ×Ñª©uÐ5Ô6Ø×ÑÕð r8   N©rh   rØ   rÙ   rÏ   r¦   r8   r6   r]  r]  —  s   „ ó r8   r]  c                   ó   — e Zd Zy)rX   N©rh   rØ   rÙ   r¦   r8   r6   rX   rX   ž  ó   „ Ør8   rX   c                   ó   — e Zd Zy)rY   Nrc  r¦   r8   r6   rY   rY   ¢  rd  r8   rY   c                   ó   — e Zd Zy)rZ   Nrc  r¦   r8   r6   rZ   rZ   ¦  rd  r8   rZ   c                   ó   — e Zd Zy)r[   Nrc  r¦   r8   r6   r[   r[   ª  rd  r8   r[   c                   ó   — e Zd ZdZd„ Zdd„Zy)ÚTagrö   c                 ó"   — |j                  «       S r2   )ÚreadTagr¹   s       r6   rš   zTag.read±  s   € Ø�~‰~ÓÐr8   Nc                 ó&   — |j                  |«       y r2   )ÚwriteTagrÅ   s         r6   r½   z	Tag.write´  s   € Ø�‰˜Õr8   r2   rU  r¦   r8   r6   ri  ri  ®  s   „ Ø€Jò ôr8   ri  c                   ó.   — e Zd ZdZdZd„ Zd„ Zd„ Zdd„Zy)	ÚGlyphIDr!  ÚHc                 ón   — |j                  |j                  | j                  | j                  |«      «      S r2   )ÚgetGlyphNameManyr±   Útypecoder³   rý   s        r6   r±   zGlyphID.readArray¼  s/   € Ø×$Ñ$Ø×Ñ˜TŸ]™]¨D¯O©O¸UÓCó
ð 	
r8   c                 ól   — |j                  |j                  | j                  | j                  «      «      S r2   )ÚgetGlyphNameÚ	readValuers  r³   r¹   s       r6   rš   zGlyphID.readÁ  s(   € Ø× Ñ  ×!1Ñ!1°$·-±-ÀÇÁÓ!QÓRÐRr8   c                 óZ   — |j                  | j                  |j                  |«      «       y r2   )rÃ   rs  ÚgetGlyphIDManyr  s        r6   rÃ   zGlyphID.writeArrayÄ  s!   € Ø×Ñ˜$Ÿ-™-¨×)<Ñ)<¸VÓ)DÕEr8   Nc                 óZ   — |j                  | j                  |j                  |«      «       y r2   )Ú
writeValuers  Ú
getGlyphIDrÅ   s         r6   r½   zGlyphID.writeÇ  s   € Ø×Ñ˜$Ÿ-™-¨¯©¸Ó)?Õ@r8   r2   )	rh   rØ   rÙ   r³   rs  r±   rš   rÃ   r½   r¦   r8   r6   ro  ro  ¸  s#   „ Ø€JØ€Hò
ò
SòFôAr8   ro  c                   ó*   — e Zd ZdZd„ Zd„ Zd„ Zdd„Zy)Ú	GlyphID24rN  c                 óB   — |j                  |j                  |«      «      S r2   )rr  ÚreadUInt24Arrayrý   s        r6   r±   zGlyphID24.readArrayÎ  s   € Ø×$Ñ$ V×%;Ñ%;¸EÓ%BÓCÐCr8   c                 ó@   — |j                  |j                  «       «      S r2   )ru  rZ  r¹   s       r6   rš   zGlyphID24.readÑ  s   € Ø× Ñ  ×!2Ñ!2Ó!4Ó5Ð5r8   c                 óD   — |j                  |j                  |«      «       y r2   )ÚwriteUInt24Arrayrx  r  s        r6   rÃ   zGlyphID24.writeArrayÔ  s   € Ø×Ñ × 3Ñ 3°FÓ ;Õ<r8   Nc                 óD   — |j                  |j                  |«      «       y r2   )rT  r{  rÅ   s         r6   r½   zGlyphID24.write×  s   € Ø×Ñ˜4Ÿ?™?¨5Ó1Õ2r8   r2   )rh   rØ   rÙ   r³   r±   rš   rÃ   r½   r¦   r8   r6   r}  r}  Ë  s   „ Ø€JòDò6ò=ô3r8   r}  c                   ó   — e Zd ZdZdZy)Ú	GlyphID32rö   ÚLN)rh   rØ   rÙ   r³   rs  r¦   r8   r6   r…  r…  Û  s   „ Ø€JØ�Hr8   r…  c                   ó   — e Zd Zd„ Zy)ÚNameIDc                 ón  — |j                  ||d|fgz   «       |r‹|r‰|j                  d«      }|rv|j                  |«      }|j                  d«       |r|j	                  |«       n@|dk(  r|j	                  d«       n)|j	                  d«       t
        j                  d|z  «       |j                  «        y )NrÁ   rT   ú  éÿÿ  ÚNonezmissing from name tablez"name id %d missing from name table)ræ   re   ÚgetDebugNamer½   r`  ÚlogÚwarningrç   )r�   rÎ   rœ   rÁ   rT   rÉ   Ú	nameTables          r6   rÏ   zNameID.xmlWriteá  s¤   € Ø×Ñ˜D %¨G°UÐ+;Ð*<Ñ"<Ô=Ù‘EØŸ™ Ó(ˆIÙØ ×-Ñ-¨eÓ4�Ø—‘ Ô%ÙØ×%Ñ% dÕ+Ø˜f’_Ø×%Ñ% fÕ-à×%Ñ%Ð&?Ô@Ü—K‘KÐ DÀuÑ LÔMØ×ÑÕr8   Nra  r¦   r8   r6   rˆ  rˆ  à  s   „ ór8   rˆ  c                   ó   — e Zd Zd„ Zy)Ú	STATFlagsc                 ó  — |j                  ||d|fgz   «       g }|dz  r|j                  d«       |dz  r|j                  d«       |r1|j                  d«       |j                  dj	                  |«      «       |j                  «        y )NrÁ   r   ÚOlderSiblingFontAttributer!  ÚElidableAxisValueNamerŠ  ú )ræ   rj   r½   r`  Újoinrç   ©r�   rÎ   rœ   rÁ   rT   rÉ   Úflagss          r6   rÏ   zSTATFlags.xmlWriteó  s}   € Ø×Ñ˜D %¨G°UÐ+;Ð*<Ñ"<Ô=ØˆØ�4Š<Ø�L‰LÐ4Ô5Ø�4Š<Ø�L‰LÐ0Ô1ÙØ�O‰O˜DÔ!Ø×Ñ˜cŸh™h u›oÔ.Ø×ÑÕr8   Nra  r¦   r8   r6   r’  r’  ò  s   „ ó
r8   r’  c                   ó   — e Zd Zed„ «       Zy)Ú
FloatValuec                 ó   — t        | «      S r2   )Úfloatrß   s    r6   rã   zFloatValue.fromString  ó   € ä�U‹|Ðr8   Nró   r¦   r8   r6   r›  r›     s   „ Øñó ñr8   r›  c                   ó   — e Zd ZdZd„ Zdd„Zy)Ú
DeciPointsr!  c                 ó(   — |j                  «       dz  S ©Né
   r-  r¹   s       r6   rš   zDeciPoints.read	  s   € Ø× Ñ Ó" RÑ'Ð'r8   Nc                 ó>   — |j                  t        |dz  «      «       y r¢  )r4  ÚroundrÅ   s         r6   r½   zDeciPoints.write  s   € Ø×Ñœ5 ¨¡Ó,Õ-r8   r2   rU  r¦   r8   r6   r   r     s   „ Ø€Jò(ô.r8   r   c                   ój   — 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y)	ÚBaseFixedValuec                 óV   — | j                   t        || j                  «      «       «      S r2   )ÚfromIntÚgetattrÚreaderMethodr¹   s       r6   rš   zBaseFixedValue.read  s$   € Ø�|‰|Ð>œG F¨D×,=Ñ,=Ó>Ó@ÓAÐAr8   Nc                 óZ   —  t        || j                  «      | j                  |«      «       y r2   )rª  ÚwriterMethodÚtoIntrÅ   s         r6   r½   zBaseFixedValue.write  s"   € Ø*Œ�˜×)Ñ)Ó*¨4¯:©:°eÓ+<Õ=r8   c                 ó.   — t        || j                  «      S r2   )Úfi2flÚprecisionBits©rr   rÁ   s     r6   r©  zBaseFixedValue.fromInt  ó   € ä�U˜C×-Ñ-Ó.Ð.r8   c                 ó.   — t        || j                  «      S r2   )Úfl2fir±  r²  s     r6   r®  zBaseFixedValue.toInt   r³  r8   c                 ó.   — t        || j                  «      S r2   )Ústr2flr±  r²  s     r6   rã   zBaseFixedValue.fromString$  ó   € ä�e˜S×.Ñ.Ó/Ð/r8   c                 ó.   — t        || j                  «      S r2   )Úfl2strr±  r²  s     r6   rà   zBaseFixedValue.toString(  r¸  r8   r2   )rh   rØ   rÙ   r«   r³   r±  r«  r­  rš   r½   Úclassmethodr©  r®  rã   rà   r¦   r8   r6   r§  r§    sq   „ Ø€JØ"€MØ!€LØ!€LòBó>ð ñ/ó ð/ð ñ/ó ð/ð ñ0ó ð0ð ñ0ó ñ0r8   r§  c                   ó   — e Zd ZdZdZdZdZy)ÚFixedrö   é   rù   r   N©rh   rØ   rÙ   r³   r±  r«  r­  r¦   r8   r6   r½  r½  -  s   „ Ø€JØ€MØ€LØ�Lr8   r½  c                   ó   — e Zd ZdZdZdZdZy)ÚF2Dot14r!  é   r#  r'  Nr¿  r¦   r8   r6   rÁ  rÁ  4  s   „ Ø€JØ€MØ€LØ�Lr8   rÁ  c                   ód   ‡ — 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                 óB   •— t         ‰| �  |«      | j                  z   dz  S ©Né´   )Úsuperr©  Úbias©rr   rÁ   Ú	__class__s     €r6   r©  zAngle.fromIntA  s    ø€ ä‘‘ Ó&¨¯©Ñ1°SÑ8Ð8r8   c                 óB   •— t         ‰| �  |dz  | j                  z
  «      S rÆ  )rÈ  r®  rÉ  rÊ  s     €r6   r®  zAngle.toIntE  s   ø€ ä‰w‰}˜e c™k¨S¯X©XÑ5Ó6Ð6r8   c                 ó^   — t        t        |«      | j                  z  «      | j                  z  S r2   )r   r�  Úfactorr²  s     r6   rã   zAngle.fromStringI  s%   € ô ”u˜U“| c§j¡jÑ0Ó1°C·J±JÑ>Ð>r8   c                 ó.   — t        || j                  «      S r2   )r
   rÎ  r²  s     r6   rà   zAngle.toStringN  s   € ä*¨5°#·*±*Ó=Ð=r8   )rh   rØ   rÙ   rÉ  rÎ  r»  r©  r®  rã   rà   Ú__classcell__©rË  s   @r6   rÄ  rÄ  ;  s]   ø„ ð €DØ"€Fàó9ó ð9ð ó7ó ð7ð ñ?ó ð?ð ñ>ó ô>r8   rÄ  c                   ó   — e Zd ZdZy)ÚBiasedAngleg      ð?N)rh   rØ   rÙ   rÉ  r¦   r8   r6   rÓ  rÓ  S  s	   „ ð �Dr8   rÓ  c                   óN   — e Zd ZdZd„ Zdd„Zed„ «       Zed„ «       Zed„ «       Z	y)	ÚVersionrö   c                 ó&   — |j                  «       }|S r2   rø   )r�   r£   rœ   r®   rÁ   s        r6   rš   zVersion.read\  s   € Ø—‘Ó!ˆØˆr8   Nc                 ó<   — t        |«      }|j                  |«       y r2   )Úfi2ver   rÅ   s         r6   r½   zVersion.write`  s   € Ü�e“ˆØ×Ñ˜Õr8   c                 ó   — t        | «      S r2   )Úve2firß   s    r6   rã   zVersion.fromStringd  rž  r8   c                 ó   — d| z  S )Nú0x%08xr¦   rß   s    r6   rà   zVersion.toStringh  r  r8   c                 ó   — t        | d«      S )Nr¾  )rµ  )Úvs    r6   Ú	fromFloatzVersion.fromFloatl  s   € ä�Q˜‹|Ðr8   r2   )
rh   rØ   rÙ   r³   rš   r½   ré   rã   rà   rß  r¦   r8   r6   rÕ  rÕ  Y  sM   „ Ø€Jòó ð ñó ðð ñ ó ð ð ñó ñr8   rÕ  c                   ó"   — e Zd ZdZdZd„ Zdd„Zy)Ú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                  | j                  «      }|j                  d«      }|dk\  r|d | }t        |dd¬«      }|t        |dd¬«      k7  rt        j                  d|z  «       |S )Nó    r   ÚasciiÚreplace©ÚencodingÚerrorsÚignorez%replaced non-ASCII characters in "%s")ÚreadDatar³   Úfindr   rŽ  r�  )r�   r£   rœ   r®   ÚdataÚzeroPosÚss          r6   rš   zChar64.readz  sj   € Ø�‰˜tŸ™Ó/ˆØ—)‘)˜EÓ"ˆØ�aŠ<Ø˜˜�>ˆDÜ�$ °Ô;ˆØ”�d W°XÔ>Ò>Ü�K‰KÐ?À!ÑCÔDØˆr8   Nc                 óJ  — t        |dd¬«      }|t        |dd¬«      k7  rt        j                  d|z  «       t        |«      | j                  kD  r$t        j                  d|| j                  fz  «       |d| j                  z  z   d | j                   }|j                  |«       y )Nrå  ræ  rç  rê  z&replacing non-ASCII characters in "%s"z$truncating overlong "%s" to %d bytesrä  )r   rŽ  r�  Úlenr³   Ú	writeData)r�   rÀ   rœ   r®   rÁ   rÆ   rí  s          r6   r½   zChar64.write„  s�   € Ü�u w°yÔAˆØ”7˜5¨7¸8ÔDÒDÜ�K‰KÐ@À5ÑHÔIÜˆt‹9�t—‘Ò&Ü�K‰KØ6¸%ÀÇÁÐ9QÑQôð �u˜tŸ™Ñ.Ñ.Ð0A°$·/±/ÐBˆØ×Ñ˜Õr8   r2   )rh   rØ   rÙ   rÚ   r³   rš   r½   r¦   r8   r6   rá  rá  q  s   „ ñð €Jòô	r8   rá  c                   ó2   — e Zd Zd„ Zd„ Zdd„Zd„ Zd„ Zd„ Zy)	r_   c                 óT   — | j                   xr | j                   j                  |«      S r2   )rd   rª   rµ   s     r6   rª   zStruct.getRecordSize‘  s    € Ø�‰ÒH 4§?¡?×#@Ñ#@ÀÓ#HÐHr8   c                 óJ   — | j                  «       }|j                  ||«       |S r2   )rd   Ú	decompile)r�   r£   rœ   r®   r“   s        r6   rš   zStruct.read”  s!   € Ø—‘Ó!ˆØ�‰˜ Ô%Øˆr8   Nc                 ó(   — |j                  ||«       y r2   )rc   rÅ   s         r6   r½   zStruct.write™  s   € Ø�‰�f˜dÕ#r8   c                 ó†   — |€*|r'|j                  ||dgz   «       |j                  «        y y |j                  ||||¬«       y )N)Úemptyr   )rT   )ræ   rç   ÚtoXMLrÍ   s         r6   rÏ   zStruct.xmlWriteœ  sF   € Øˆ=Ùð ×#Ñ# D¨%°<°.Ñ*@ÔAØ×!Ñ!Õ#àà�K‰K˜	 4¨°TˆKÕ:r8   c                 ó*  — d|v rt        |d   «      ry | j                  «       }|j                  d«      }|�t        |«      |_        t        |d«       }|rªd}|j                  «       D ]•  }|j                  sŒd}t        |d«      si |_        |j                  }	|j                  |	vsJ |j                  |	f«       ‚t        ||j                  d «       t        |j                  |j                  «      |	|j                  <   Œ— |D ]-  }
t        |
t        «      r|
\  }}}|j                  ||||«       Œ.Œ/ |j!                  t#        |dd «      ¬«       |rBr@|j                  «       D ]-  }|j                  sŒ|j                  }	|	|j                  = |	rŒ,|`Œ/ |S )Nrù  ÚFormatÚpostReadFTÚ_propagator)Ú
propagator)r   rd   re   rÔ   rü  r´   ÚgetConvertersrŽ   rþ  rT   Úsetattrr   Ú__dict__r3   r4   ÚfromXMLÚpopulateDefaultsrª  )r�   rÉ   rÊ   rœ   r“   rü  Ú
noPostReadÚcleanPropagationrq   rÿ  ÚelementrT   s               r6   rË   zStruct.xmlRead©  s”  € Ø�eÑ¤¨¨w©Ô 8ØØ—‘Ó!ˆØ—‘˜8Ó$ˆØÐÜ˜v›;ˆEŒLä  ¨
Ó3Ð3ˆ
Ùà$ÐØ×+Ñ+Ó-ò V�Ø×$Ó$Ø'+Ð$Ü" 4¨Ô7Ø+-˜Ô(Ø!%×!1Ñ!1�JØŸ9™9¨JÑ6ÐO¸¿¹ÀJÐ8OÓOÐ6Ü˜E 4§9¡9¨dÔ3Ü,:¸5¿>¹>È4Ï9É9Ó,U�J˜tŸy™yÒ)ðVð ò 	ˆGÜ˜'¤5Ô)Ø'.Ñ$��e˜WØ—‘˜d E¨7°DÕ9àð	ð 	×Ñ¬'°$¸ÀtÓ*LÐÔMáÙØ!×/Ñ/Ó1ò 1�DØ×(Ó(Ø%)×%5Ñ%5˜
Ø& t§y¡yÐ1Ú)Ø $Ñ 0ð1ð ˆr8   c                 ó2   — dt        | j                  «      z   S )Nz
Struct of )Úreprrd   ©r�   s    r6   Ú__repr__zStruct.__repr__Ó  s   € Øœd 4§?¡?Ó3Ñ3Ð3r8   r2   )	rh   rØ   rÙ   rª   rš   r½   rÏ   rË   r  r¦   r8   r6   r_   r_   �  s"   „ òIòó
$ò;ò(óT4r8   r_   c                   ó   — e Zd Zd„ Zdd„Zy)r]   c                 óž   — |j                   }| j                  «       }|j                  ||«       |j                  ||j                  z   «       |S r2   )r�   rd   rö  r™   r>   )r�   r£   rœ   r®   r�   r“   s         r6   rš   zStructWithLength.readØ  sA   € Ø�j‰jˆØ—‘Ó!ˆØ�‰˜ Ô%Ø�‰�C˜%×,Ñ,Ñ,Ô-Øˆr8   Nc                 ó$  — t        |j                  «       «      D ]  \  }}|j                  dk(  sŒ n t        |j                  «      z   }t        |t        «      r|dz  }ddddœj                     }	|j                  «       }
|	|_	        |j                  ||«       |j                  «       |
z
  }|j                  «       }|j                  ||||«       |j                  |   dd |j                   k(  sJ ‚|j                  «       |j                  |<   y )Nr>   r   éÞ   é­Þ  ì   ï>[= )r   r!  rö   ó   Þ­¾ï)r¼   r   rT   rñ  Úitemsr3   r   r³   ÚgetDataLengthr>   rc   ÚgetSubWriterr½   Ú
getAllData)r�   rÀ   rœ   r®   rÁ   rÆ   Ú	convIndexrq   ÚlengthIndexÚdeadbeefÚbeforeÚlengthÚlengthWriters                r6   r½   zStructWithLength.writeß  s  € Ü(¨×)<Ñ)<Ó)>Ó?ò 	‰OˆI�tØ�y‰y˜NÓ*Ùð	ô ˜&Ÿ,™,Ó'¨)Ñ3ˆÜ�eÔ5Ô6Ø˜1ÑˆKØ ¨:Ñ6°t·±ÑGˆà×%Ñ%Ó'ˆØ%ˆÔØ�‰�f˜dÔ#Ø×%Ñ%Ó'¨&Ñ0ˆØ×*Ñ*Ó,ˆØ�
‰
�<  y°&Ô9Ø�|‰|˜KÑ(Ð,?Ð@QÀ$Ç/Á/Ð,RÒRÐRÐRØ$0×$;Ñ$;Ó$=ˆ�‰�[Ò!r8   r2   ©rh   rØ   rÙ   rš   r½   r¦   r8   r6   r]   r]   ×  s   „ òô>r8   r]   c                   ó*   — e Zd ZdZd„ Zd„ Zd„ Zdd„Zy)rg   r!  c                 ó"   — |j                  «       S r2   r-  rµ   s     r6   Ú
readOffsetzTable.readOffsetõ  r/  r8   c                 ó&   — |j                  d«       y rò   r3  ©r�   rÀ   s     r6   ÚwriteNullOffsetzTable.writeNullOffsetø  ó   € Ø×Ñ˜1Õr8   c                 óÒ   — | j                  |«      }|dk(  ry | j                  «       }|j                  |«      }|j                  r||_        ||_        |S |j                  ||«       |S rò   )r   rd   ÚgetSubReaderr©   r£   rœ   rö  )r�   r£   rœ   r®   Úoffsetr“   s         r6   rš   z
Table.readû  sg   € Ø—‘ Ó(ˆØ�QŠ;ØØ—‘Ó!ˆØ×$Ñ$ VÓ,ˆØ�9Š9Ø!ˆEŒLØˆEŒJð ˆð �O‰O˜F DÔ)Øˆr8   Nc                 óÞ   — |€| j                  |«       y |j                  «       }| j                  |_        |�||_        |j	                  || j
                  ¬«       |j                  ||«       y )N©Ú
offsetSize)r#  r  rT   rÆ   ÚwriteSubTabler³   rc   )r�   rÀ   rœ   r®   rÁ   rÆ   Ú	subWriters          r6   r½   zTable.write  sa   € Øˆ=Ø× Ñ  Õ(à×+Ñ+Ó-ˆIØ!ŸY™YˆIŒNØÐ&Ø(3�	Ô%Ø× Ñ  °t·±Ð ÔGØ�M‰M˜) TÕ*r8   r2   )rh   rØ   rÙ   r³   r   r#  rš   r½   r¦   r8   r6   rg   rg   ò  s   „ Ø€Jò#òòô	+r8   rg   c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚLTablerö   c                 ó"   — |j                  «       S r2   r  rµ   s     r6   r   zLTable.readOffset  r  r8   c                 ó&   — |j                  d«       y rò   r  r"  s     r6   r#  zLTable.writeNullOffset  s   € Ø×Ñ˜!Õr8   N©rh   rØ   rÙ   r³   r   r#  r¦   r8   r6   r.  r.    s   „ Ø€Jò"ór8   r.  c                   ó   — e Zd ZdZd„ Zd„ Zy)ÚTable24rN  c                 ó"   — |j                  «       S r2   rY  rµ   s     r6   r   zTable24.readOffset"  r/  r8   c                 ó&   — |j                  d«       y rò   rS  r"  s     r6   r#  zTable24.writeNullOffset%  r$  r8   Nr1  r¦   r8   r6   r3  r3    s   „ Ø€Jò#ór8   r3  c                   ó*   ‡ — e Zd Zˆ fd„Zdˆ fd„	Zˆ xZS )rG   c                 ó   •— | j                  |j                  «       «      dk7  r›|j                  d«      }|j                  dd«      dk\  rU|j                  «       }|j                  d| j                  z  «       t        dd d t        «      j                  |||«      }|�|}t        d„ t        |dd	«      D «       «      |d
<   t        ‰| �  |||«      S )Nr   r   rÕ  é  r!  ÚFeatureList2c              3   ó4   K  — | ]  }|j                   –— Œ y ­wr2   ©r}   ©r§   Úrecords     r6   r¨   z)FeatureVariations.read.<locals>.<genexpr>:  ó   è ø€ ò *àð ×!Õ!ñ*ùó   ‚ÚFeatureRecordr¦   ÚFeatureTags)r   r¢   re   r­   r³   r.  r   rš   r4   rª  rÈ  )r�   r£   rœ   r®   ÚfeatureListÚfeatureListReaderÚfeatureList2rË  s          €r6   rš   zFeatureVariations.read*  sË   ø€ Ø�?‰?˜6Ÿ;™;›=Ó)¨QÒ.ð $Ÿ-™-¨Ó6ˆKØ�}‰}˜Y¨Ó*¨jÒ8ð %+§K¡K£MÐ!Ø!×)Ñ)¨!¨d¯o©oÑ*=Ô>Ü% n°d¸DÄ+ÓN×SÑSØ% t¨Yó �ð  Ð+Ø".�KÜ$)ñ *ä% k°?ÀBÓGô*ó %ˆF�=Ñ!ô ‰w‰|˜F D¨)Ó4Ð4r8   c                 óæ   •— |�[|j                  d«      }|j                  dd«      dk\  r|j                  d«      xs |}t        d„ t        |dd«      D «       «      |d	<   t        ‰| �  |||||«       y )
Nr   rÕ  r   r8  r9  c              3   ó4   K  — | ]  }|j                   –— Œ y ­wr2   r;  r<  s     r6   r¨   z*FeatureVariations.write.<locals>.<genexpr>E  r>  r?  r@  r¦   rA  )re   r4   rª  rÈ  r½   )r�   rÀ   rœ   r®   rÁ   rÆ   rB  rË  s          €r6   r½   zFeatureVariations.write@  sx   ø€ ØÐØ#Ÿ-™-¨Ó6ˆKØ�}‰}˜Y¨Ó*¨jÒ8Ø'Ÿm™m¨NÓ;ÒJ¸{�Ü$)ñ *ä% k°?ÀBÓGô*ó %ˆF�=Ñ!ô 	‰‰�f˜d I¨u°kÕBr8   r2   ©rh   rØ   rÙ   rš   r½   rÐ  rÑ  s   @r6   rG   rG   )  s   ø„ ô5÷,	Cñ 	Cr8   rG   c                   ó.   ‡ — e Zd ZdZˆ fd„Zdˆ fd„	Zˆ xZS )r\   zHResolve a FeatureTableSubstitutionRecord's tag through its FeatureIndex.c                 ó¶   •— d|v rD| j                  |j                  «       «      dk7  r"|d   }|d   }|t        |«      k  r||   nd |d<   t        ‰| �  |||«      S )NrA  r   ÚFeatureIndexr}   )r   r¢   rñ  rÈ  rš   )r�   r£   rœ   r®   ÚfeatureTagsÚfeatureIndexrË  s         €r6   rš   zAlternateFeature.readO  sm   ø€ Ø˜FÑ" t§¡°v·{±{³}Ó'EÈÒ'JØ  Ñ/ˆKØ$ ^Ñ4ˆLð .:¼CÀÓ<LÒ-L�˜LÒ)ÐRVð �<Ñ ô ‰w‰|˜F D¨)Ó4Ð4r8   c                 óŠ   •— |�-t        |dd «      � d|j                  xs i v r|d   |d      |d<   t        ‰| �  |||||«       y )NrF   rA  rJ  r}   )rª  Ú
localStaterÈ  r½   )r�   rÀ   rœ   r®   rÁ   rÆ   rË  s         €r6   r½   zAlternateFeature.writeY  sX   ø€ àÐÜ˜˜°Ó5ÐAØ &×"3Ñ"3Ò"9°rÑ:à#)¨-Ñ#8¸À>Ñ9RÑ#SˆF�<Ñ Ü‰‰�f˜d I¨u°kÕBr8   r2   )rh   rØ   rÙ   rÚ   rš   r½   rÐ  rÑ  s   @r6   r\   r\   L  s   ø„ ÙRô5÷Cñ Cr8   r\   c                   ó$   ‡ — e Zd Zd„ Zˆ fd„Zˆ xZS )rE   c                 óŠ   — | j                   |   |   }| j                  | j                  | j                  | j                  |«      S r2   ©r   rË  rT   r`   ra   ©r�   Ú	tableTypeÚ
lookupTyperd   s       r6   ÚgetConverterzSubStruct.getConverterg  ó8   € Ø×%Ñ% iÑ0°Ñ<ˆ
Ø�~‰~˜dŸi™i¨¯©°d·h±hÀ
ÓKÐKr8   c                 ó4   •— t         t        | �  |||d |«       y r2   )rÈ  rE   rÏ   ©r�   rÎ   rœ   rÁ   rT   rÉ   rË  s         €r6   rÏ   zSubStruct.xmlWritek  s   ø€ ÜŒi˜Ñ'¨	°4¸ÀÀeÕLr8   ©rh   rØ   rÙ   rU  rÏ   rÐ  rÑ  s   @r6   rE   rE   f  s   ø„ òL÷Mð Mr8   rE   c                   ó$   ‡ — e Zd Zd„ Zˆ fd„Zˆ xZS )rC   c                 óŠ   — | j                   |   |   }| j                  | j                  | j                  | j                  |«      S r2   rQ  rR  s       r6   rU  zSubTable.getConverterp  rV  r8   c                 ó4   •— t         t        | �  |||d |«       y r2   )rÈ  rC   rÏ   rX  s         €r6   rÏ   zSubTable.xmlWritet  s   ø€ ÜŒh˜Ñ& y°$¸¸tÀUÕKr8   rY  rÑ  s   @r6   rC   rC   o  s   ø„ òL÷Lð Lr8   rC   c                   ó   — e Zd Zdd„Zy)rD   Nc                 óF   — d|_         t        j                  | |||||«       y )NT)Ú	Extensionrg   r½   rÅ   s         r6   r½   zExtSubTable.writey  s    € ØˆÔÜ�‰�D˜& $¨	°5¸+ÕFr8   r2   )rh   rØ   rÙ   r½   r¦   r8   r6   rD   rD   x  s   „ ôGr8   rD   c                   ó   — e Zd Zd„ Zy)rF   c                 ó²   — | j                   j                  || j                  «      }| j                  | j                  | j
                  | j                  |«      S r2   )rS   re   ri   rË  rT   r`   ra   )r�   Ú
featureTagrd   s      r6   rU  zFeatureParams.getConverter  sA   € Ø×+Ñ+×/Ñ/°
¸D×<UÑ<UÓVˆ
Ø�~‰~˜dŸi™i¨¯©°d·h±hÀ
ÓKÐKr8   N)rh   rØ   rÙ   rU  r¦   r8   r6   rF   rF   ~  s   „ óLr8   rF   c                   ó,   — e Zd ZdZdddœd„Zd„ Zdd„Zy)	r;   r!  Nrv   rM   c                ór   — t         j                  | |||||¬«       d|d   dk(  r
dz   | _        y dz   | _        y )NrM   r;   éÿÿÿÿÚ2Ú1)ru   r‘   Úwhichr�   s         r6   r‘   zValueFormat.__init__‡  sC   € Ü×ÑØ�$˜  Z¸[ð 	ô 	
ð #¨T°"©X¸ª_ cÑFˆ�
À#ÑFˆ�
r8   c                 óV   — |j                  «       }t        |«      || j                  <   |S r2   )r.  r   rh  ©r�   r£   rœ   r®   Úformats        r6   rš   zValueFormat.read�  s(   € Ø×"Ñ"Ó$ˆÜ/°Ó7ˆˆt�z‰zÑØˆr8   c                 óV   — |j                  |«       t        |«      || j                  <   y r2   )r4  r   rh  )r�   rÀ   rœ   r®   rk  rÆ   s         r6   r½   zValueFormat.write’  s#   € Ø×Ñ˜6Ô"Ü/°Ó7ˆˆt�z‰zÒr8   r2   )rh   rØ   rÙ   r³   r‘   rš   r½   r¦   r8   r6   r;   r;   „  s   „ Ø€JðGÈ"ô Gòô
8r8   r;   c                   ó,   — e Zd Zd„ Zd„ Zdd„Zd„ Zd„ Zy)ÚValueRecordc                 ó8   — dt        || j                     «      z  S ©Nr!  )rñ  rh  rµ   s     r6   rª   zValueRecord.getRecordSize˜  s   € Ø”3�v˜dŸj™jÑ)Ó*Ñ*Ð*r8   c                 ó@   — || j                      j                  ||«      S r2   )rh  ÚreadValueRecordr¹   s       r6   rš   zValueRecord.read›  s   € Ø�d—j‘jÑ!×1Ñ1°&¸$Ó?Ð?r8   Nc                 óD   — || j                      j                  |||«       y r2   )rh  ÚwriteValueRecordrÅ   s         r6   r½   zValueRecord.writež  s   € Øˆt�z‰zÑ×+Ñ+¨F°D¸%Õ@r8   c                 óF   — |€y |j                  ||| j                  |«       y r2   )rú  rT   rÍ   s         r6   rÏ   zValueRecord.xmlWrite¡  s    € Øˆ=Øà�K‰K˜	 4¨¯©°EÕ:r8   c                 óH   — ddl m}  |«       }|j                  d |||«       |S )Nr   )rn  )ÚotBasern  r  )r�   rÉ   rÊ   rœ   rn  rÁ   s         r6   rË   zValueRecord.xmlRead§  s#   € Ý'á“ˆØ�‰�d˜E 7¨DÔ1Øˆr8   r2   )rh   rØ   rÙ   rª   rš   r½   rÏ   rË   r¦   r8   r6   rn  rn  —  s   „ ò+ò@óAò;ór8   rn  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y)Ú	AATLookupr£  rv   rM   c                óÞ   — t         j                  | |||||¬«       t        | j                  t        «      r| j                  dd d ¬«      | _        y t        dd d | j                  ¬«      | _        y )NrM   ÚValue)rT   r`   ra   )rT   r`   ra   rd   )ru   r‘   Ú
issubclassrd   rÝ   Ú	converterrg   r�   s         r6   r‘   zAATLookup.__init__²  sa   € Ü×ÑØ�$˜  Z¸[ð 	ô 	
ô �d—o‘o¤{Ô3Ø!Ÿ_™_°'À$ÈD˜_ÓQˆD�Nä"Ø T¨tÀÇÁôˆD�Nr8   c                 ó  — |j                  «       }|dk(  r| j                  ||«      S |dk(  r| j                  ||«      S |dk(  r| j                  ||«      S |dk(  r| j	                  ||«      S |dk(  r| j                  ||«      S J d|z  «       ‚)Nr   r!  rö   é   r–   zunsupported lookup format: %d)r.  ÚreadFormat0ÚreadFormat2ÚreadFormat4ÚreadFormat6ÚreadFormat8rj  s        r6   rš   zAATLookup.read½  s¢   € Ø×"Ñ"Ó$ˆØ�QŠ;Ø×#Ñ# F¨DÓ1Ð1Ø�qŠ[Ø×#Ñ# F¨DÓ1Ð1Ø�qŠ[Ø×#Ñ# F¨DÓ1Ð1Ø�qŠ[Ø×#Ñ# F¨DÓ1Ð1Ø�qŠ[Ø×#Ñ# F¨DÓ1Ð1àBÐ9¸FÑBÓB�5r8   Nc                 óò  — t        t        |j                  «       D ��cg c]  \  }}|j                  |«      |f‘Œ c}}«      «      }t        t        t	        d | j                  |||«      | j                  |||«      | j                  |||«      | j                  |||«      g«      «      «      }	|	d   \  }
}}|j                  «       } |«        |j                  «       |z
  }||
k(  sJ d||
|fz  «       ‚y c c}}w )Nr   z;AATLookup format %d claimed to write %d bytes, but wrote %d)
ÚlistÚsortedr  r{  ÚfilterÚbuildFormat0ÚbuildFormat2ÚbuildFormat6ÚbuildFormat8r  )r�   rÀ   rœ   r®   rÁ   rÆ   ÚglyphÚvalrf   ÚformatsÚdataSizeÚlookupFormatÚwriteMethodr�   Ú
actualSizes                  r6   r½   zAATLookup.writeÌ  s  € ÜÜÀEÇKÁKÃM×R±j°e¸S�T—_‘_ UÓ+¨SÒ1ÓRÓSó
ˆô ÜÜØà×)Ñ)¨&°$¸Ó?Ø×)Ñ)¨&°$¸Ó?Ø×)Ñ)¨&°$¸Ó?Ø×)Ñ)¨&°$¸Ó?ð	óó
ó
ˆð /6°a©jÑ+ˆ�, Ø×"Ñ"Ó$ˆÙŒØ×)Ñ)Ó+¨cÑ1ˆ
à˜(Ò"ð	
àHØØØðL
ñ 
ó	
Ù"ùó/ Ss   žC3c                 óÐ   — | j                  |«       | j                  |«       t        ||¬«      \  }}}| j                  |«       | j                  |«       | j                  |«       y )N)ÚnÚitemSize)r4  r   )rÀ   ÚnumUnitsÚunitSizeÚsearchRangeÚentrySelectorÚ
rangeShifts         r6   ÚwriteBinSearchHeaderzAATLookup.writeBinSearchHeaderì  s`   € à×Ñ˜8Ô$Ø×Ñ˜8Ô$Ü1?Ø ô2
Ñ.ˆ�] Jð 	×Ñ˜;Ô'Ø×Ñ˜=Ô)Ø×Ñ˜:Õ&r8   c                 ó¨   ‡ ‡‡‡— t        ‰j                  «       «      }t        ‰«      |k7  ry ‰ j                  j                  }d||z  z   dˆˆ ˆˆfd„fS )Nr!  r   c                  ó*   •— ‰j                  ‰‰ ‰«      S r2   )ÚwriteFormat0©rœ   r�   rf   rÀ   s   €€€€r6   r7   z(AATLookup.buildFormat0.<locals>.<lambda>ÿ  ó   ø€ �D×%Ñ% f¨d°FÓ;€ r8   )rñ  ÚgetGlyphOrderr}  r³   )r�   rÀ   rœ   rf   Ú	numGlyphsÚ	valueSizes   ````  r6   r‰  zAATLookup.buildFormat0÷  sQ   û€ Ü˜×*Ñ*Ó,Ó-ˆ	Üˆv‹;˜)Ò#ØØ—N‘N×-Ñ-ˆ	à�	˜IÑ%Ñ%ØÞ;ð
ð 	
r8   c                 óz   — |j                  d«       |D ]%  \  }}| j                  j                  ||d |d ¬«       Œ' y )Nr   ©r®   rÁ   rÆ   )r4  r}  r½   )r�   rÀ   rœ   rf   ÚglyphID_rÁ   s         r6   rŸ  zAATLookup.writeFormat0  sE   € Ø×Ñ˜1ÔØ%ò 	‰OˆH�eØ�N‰N× Ñ Ø˜¨°EÀtð !õ ñ	r8   c                 óF  ‡ ‡‡‡— |d   \  }}|}g Š|dd  D ]/  \  }}||dz   k7  s||k7  r‰j                  |||f«       |x}}|}Œ.|}Œ1 ‰j                  |||f«       ‰ j                  j                  }	t        ‰«      dz   |	dz   }}
d‰ j                  z   |
|z  z   dˆˆˆ ˆfd„fS )Nr   r   rö   r!  c                  ó*   •— ‰j                  ‰‰ ‰«      S r2   )ÚwriteFormat2)rœ   Úsegmentsr�   rÀ   s   €€€€r6   r7   z(AATLookup.buildFormat2.<locals>.<lambda>  s   ø€ �D×%Ñ% f¨d°HÓ=€ r8   )rj   r}  r³   rñ  ÚBIN_SEARCH_HEADER_SIZE)r�   rÀ   rœ   rf   ÚsegStartÚsegValueÚsegEndÚglyphIDÚcurValuer¤  r—  r˜  r«  s   ```         @r6   rŠ  zAATLookup.buildFormat2	  sÑ   û€ Ø# A™YÑˆ�(ØˆØˆØ!'¨¨ ò 	!ÑˆG�XØ˜& 1™*Ò$¨°HÒ(<Ø—‘ ¨6°8Ð <Ô=Ø$+Ð+�˜6Ø#‘à ‘ð	!ð 	�‰˜ 6¨8Ð4Ô5Ø—N‘N×-Ñ-ˆ	Ü  ›]¨QÑ.°	¸A±�(ˆà�×+Ñ+Ñ+¨h¸Ñ.AÑAØÞ=ð
ð 	
r8   c                 óž  — |j                  d«       | j                  j                  }t        |«      |dz   }}| j	                  |||«       |D ]H  \  }}}	|j                  |«       |j                  |«       | j                  j                  ||d |	d ¬«       ŒJ |j                  d«       |j                  d«       |j                  d|z  «       y )Nr!  rö   r¦  r‹  rä  ©r4  r}  r³   rñ  rœ  r½   rò  )
r�   rÀ   rœ   r«  r¤  r—  r˜  Ú
firstGlyphÚ	lastGlyphrÁ   s
             r6   rª  zAATLookup.writeFormat2  sÇ   € Ø×Ñ˜1ÔØ—N‘N×-Ñ-ˆ	Ü  ›]¨I¸©M�(ˆØ×!Ñ! &¨(°HÔ=Ø,4ò 	Ñ(ˆJ˜	 5Ø×Ñ˜yÔ)Ø×Ñ˜zÔ*Ø�N‰N× Ñ Ø˜¨°EÀtð !õ ð	ð 	×Ñ˜6Ô"Ø×Ñ˜6Ô"Ø×Ñ˜ 9Ñ,Õ-r8   c                 ó˜   ‡ ‡‡‡— ‰ j                   j                  }t        ‰«      |dz   }}d‰ j                  z   |dz   |z  z   dˆˆ ˆˆfd„fS )Nr!  r   r  c                  ó*   •— ‰j                  ‰‰ ‰«      S r2   )ÚwriteFormat6r   s   €€€€r6   r7   z(AATLookup.buildFormat6.<locals>.<lambda>2  r¡  r8   )r}  r³   rñ  r¬  )r�   rÀ   rœ   rf   r¤  r—  r˜  s   ````   r6   r‹  zAATLookup.buildFormat6,  sO   û€ Ø—N‘N×-Ñ-ˆ	Ü  ›[¨)°a©-�(ˆà�×+Ñ+Ñ+¨x¸!©|¸xÑ.GÑGØÞ;ð
ð 	
r8   c                 óX  — |j                  d«       | j                  j                  }t        |«      |dz   }}| j	                  |||«       |D ]6  \  }}|j                  |«       | j                  j                  ||d |d ¬«       Œ8 |j                  d«       |j                  d|z  «       y )Nr  r!  r¦  r‹  rä  r³  )	r�   rÀ   rœ   rf   r¤  r—  r˜  r°  rÁ   s	            r6   r¸  zAATLookup.writeFormat65  s¨   € Ø×Ñ˜1ÔØ—N‘N×-Ñ-ˆ	Ü  ›[¨)°a©-�(ˆØ×!Ñ! &¨(°HÔ=Ø$ò 	‰NˆG�UØ×Ñ˜wÔ'Ø�N‰N× Ñ Ø˜¨°EÀtð !õ ð	ð
 	×Ñ˜6Ô"Ø×Ñ˜ 9Ñ,Õ-r8   c                 ó´   ‡ ‡‡‡— ‰d   d   ‰d   d   }}t        ‰«      ||z
  dz   k7  ry ‰ j                  j                  }dt        ‰«      |z  z   dˆˆ ˆˆfd„fS )Nr   re  r   r  r–   c                  ó*   •— ‰j                  ‰‰ ‰«      S r2   )ÚwriteFormat8r   s   €€€€r6   r7   z(AATLookup.buildFormat8.<locals>.<lambda>J  r¡  r8   )rñ  r}  r³   )r�   rÀ   rœ   rf   Ú
minGlyphIDÚ
maxGlyphIDr¤  s   ````   r6   rŒ  zAATLookup.buildFormat8B  se   û€ Ø!'¨¡¨1¡¨v°b©z¸!©}�Jˆ
Üˆv‹;˜* zÑ1°AÑ5Ò5ØØ—N‘N×-Ñ-ˆ	à”�F“˜iÑ'Ñ'ØÞ;ð
ð 	
r8   c                 óà   — |d   d   }|j                  d«       |j                  |«       |j                  t        |«      «       |D ]%  \  }}| j                  j                  ||d |d ¬«       Œ' y )Nr   r–   r¦  )r4  rñ  r}  r½   )r�   rÀ   rœ   rf   ÚfirstGlyphIDÚ_rÁ   s          r6   r¼  zAATLookup.writeFormat8M  sr   € Ø˜a‘y ‘|ˆØ×Ñ˜1ÔØ×Ñ˜<Ô(Ø×Ñœ3˜v›;Ô'Øò 	‰HˆAˆuØ�N‰N× Ñ Ø˜¨°EÀtð !õ ñ	r8   c                 óÚ   — t        |j                  «       «      }| j                  j                  ||d |¬«      }t	        |«      D ��ci c]  \  }}|j                  |«      |“Œ c}}S c c}}w ©N©r®   r¯   )rñ  r¢  r}  r±   r¼   ru  )r�   r£   rœ   r£  rí  ÚkrÁ   s          r6   r€  zAATLookup.readFormat0W  s^   € Ü˜×*Ñ*Ó,Ó-ˆ	Ø�~‰~×'Ñ'¨°ÀÈIÐ'ÓVˆÜ<EÀd»O×L±°°5�×!Ñ! !Ó$ eÑ+ÓLÐLùÓLs   ÁA'c                 óÚ  — i }|j                   dz
  }|j                  «       |j                  «       }}|d| j                  j                  z   k\  sJ |«       ‚t	        |«      D ]ˆ  }|j                  |||z  z   dz   «       |j                  «       }|j                  «       }	| j                  j                  ||d ¬«      }
|dk7  sŒat	        |	|dz   «      D ]  }|
||j                  |«      <   Œ ŒŠ |S )Nr!  rö   é   ©r®   r‹  r   ©r�   r.  r}  r³   r¬   r™   rš   ru  )r�   r£   rœ   Úmappingr�   r˜  r—  r›   ÚlastÚfirstrÁ   rÅ  s               r6   r�  zAATLookup.readFormat2\  sò   € ØˆØ�j‰j˜1‰nˆØ#×.Ñ.Ó0°&×2CÑ2CÓ2E�(ˆØ˜1˜tŸ~™~×8Ñ8Ñ8Ò8ÐB¸(ÓBÐ8Ü�x“ò 	:ˆAØ�K‰K˜˜a (™lÑ*¨RÑ/Ô0Ø×$Ñ$Ó&ˆDØ×%Ñ%Ó'ˆEØ—N‘N×'Ñ'¨°ÀÐ'ÓEˆEØ�v‹~Ü˜u d¨Q¡hÓ/ò :�AØ49�G˜D×-Ñ-¨aÓ0Ò1ñ:ð	:ð ˆr8   c                 ó$  — i }|j                   dz
  }|j                  «       }|dk\  sJ |«       ‚t        |j                  «       «      D ]Æ  }|j                  |||z  z   dz   «       |j                  «       }|j                  «       }|j                  «       }	|dk7  sŒS|j	                  d«      }
|
j                  ||	z   «       | j
                  j                  |
|d ||z
  dz   ¬«      }t        |«      D ]  \  }}|||j                  ||z   «      <   Œ ŒÈ |S )Nr!  r  rÇ  r‹  r   r   rÄ  )	r�   r.  r¬   r™   r&  r}  r±   r¼   ru  )r�   r£   rœ   rÊ  r�   r˜  r›   rË  rÌ  r'  Ú
dataReaderrí  rÅ  rÞ  s                 r6   r‚  zAATLookup.readFormat4k  s  € ØˆØ�j‰j˜1‰nˆØ×$Ñ$Ó&ˆØ˜1Š}Ð&˜hÓ&ˆ}Ü�v×(Ñ(Ó*Ó+ò 	>ˆAØ�K‰K˜˜a (™lÑ*¨RÑ/Ô0Ø×$Ñ$Ó&ˆDØ×%Ñ%Ó'ˆEØ×&Ñ&Ó(ˆFØ�v‹~Ø#×0Ñ0°Ó3�
Ø—‘  f¡Ô-Ø—~‘~×/Ñ/Ø °¸DÀ5¹LÈ1Ñ<Lð 0ó �ô & d›Oò >‘D�A�qØ<=�G˜D×-Ñ-¨e°a©iÓ8Ò9ñ>ð	>ð ˆr8   c                 óŽ  — i }|j                   dz
  }|j                  «       }|d| j                  j                  z   k\  sJ |«       ‚t	        |j                  «       «      D ]d  }|j                  |||z  z   dz   «       |j                  «       }| j                  j                  ||d ¬«      }|dk7  sŒQ|||j                  |«      <   Œf |S )Nr!  rÇ  rÈ  r‹  rÉ  )	r�   r£   rœ   rÊ  r�   r˜  r›   r°  rÁ   s	            r6   rƒ  zAATLookup.readFormat6  sÈ   € ØˆØ�j‰j˜1‰nˆØ×$Ñ$Ó&ˆØ˜1˜tŸ~™~×8Ñ8Ñ8Ò8ÐB¸(ÓBÐ8Ü�v×(Ñ(Ó*Ó+ò 	<ˆAØ�K‰K˜˜a (™lÑ*¨RÑ/Ô0Ø×'Ñ'Ó)ˆGØ—N‘N×'Ñ'¨°ÀÐ'ÓEˆEØ˜&Ó Ø6;�˜×)Ñ)¨'Ó2Ò3ð	<ð ˆr8   c                 óî   — |j                  «       }|j                  «       }| j                  j                  ||d |¬«      }t        |«      D ��ci c]  \  }}|j	                  ||z   «      |“Œ c}}S c c}}w rÃ  )r.  r}  r±   r¼   ru  )r�   r£   rœ   rÌ  r¯   rí  rÅ  rÁ   s           r6   r„  zAATLookup.readFormat8Œ  sl   € Ø×!Ñ!Ó#ˆØ×!Ñ!Ó#ˆØ�~‰~×'Ñ'¨°ÀÈEÐ'ÓRˆÜFOÐPTÃo×V¹
¸¸E�×!Ñ! %¨!¡)Ó,¨eÑ3ÓVÐVùÓVs   ÁA1c                 ó˜   — i }|D ]B  }t        |t        «      sŒ|\  }}}|dk(  sŒ | j                  j                  |||«      ||d   <   ŒD |S )NÚLookupr�  )r3   r4   r}  rË   )	r�   rÉ   rÊ   rœ   rÁ   r  rT   ÚaÚ
eltContents	            r6   rË   zAATLookup.xmlRead’  s^   € ØˆØò 	TˆGÜ˜'¤5Õ)Ø&-Ñ#��a˜Ø˜8Ó#Ø(,¯©×(>Ñ(>¸qÀ*ÈdÓ(S�E˜!˜G™*Ò%ð		Tð
 ˆr8   c           	      ó  — |j                  ||«       |j                  «        t        |j                  «       «      D ](  \  }}| j                  j                  |||dd|fg¬«       Œ* |j                  |«       |j                  «        y )NrÒ  r�  )rÁ   rT   rÉ   )Úbegintagrç   r‡  r  r}  rÏ   Úendtag)r�   rÎ   rœ   rÁ   rT   rÉ   r�  s          r6   rÏ   zAATLookup.xmlWrite›  s‚   € Ø×Ñ˜4 Ô'Ø×ÑÔÜ" 5§;¡;£=Ó1ò 	‰LˆE�5Ø�N‰N×#Ñ#Ø˜4 u°8ÀWÈeÐDTÐCUð $õ ð	ð 	×Ñ˜ÔØ×ÑÕr8   r2   )rh   rØ   rÙ   r¬  r‘   rš   r½   ré   rœ  r‰  rŸ  rŠ  rª  r‹  r¸  rŒ  r¼  r€  r�  r‚  rƒ  r„  rË   rÏ   r¦   r8   r6   ry  ry  ¯  s}   „ ØÐàEGô 	òCó
ð@ ñ'ó ð'ò	
òò
ò(.ò
ò.ò	
òòMò
òò(òWòór8   ry  c                   ó&   — e Zd Zd„ Zdd„Zd„ Zd„ Zy)ÚAATLookupWithDataOffsetc                 ó\  — |j                  «       }|j                  «       }|j                  |«      }t        dd d t        «      }|j	                  |||«      }i }	|j                  «       D ]@  \  }
}|j                  ||z   «      }| j                  «       }|j                  ||«       ||	|
<   ŒB |	S ©NÚDataOffsets)r  r&  ry  r+  rš   r  rd   rö  )r�   r£   rœ   r®   ÚlookupOffsetÚ
dataOffsetÚlookupReaderÚlookupÚoffsetsÚresultr�  r'  rÎ  Úitems                 r6   rš   zAATLookupWithDataOffset.read®  s­   € Ø×'Ñ'Ó)ˆØ×%Ñ%Ó'ˆ
Ø×*Ñ*¨<Ó8ˆÜ˜=¨$°´fÓ=ˆØ—+‘+˜l¨D°)Ó<ˆØˆØ$Ÿ]™]›_ò 	!‰MˆE�6Ø×,Ñ,¨V°jÑ-@ÓAˆJØ—?‘?Ó$ˆDØ�N‰N˜: tÔ,Ø ˆF�5ŠMð		!ð
 ˆr8   Nc                 ó8  — i i d}}}g }	t        ||j                  ¬«      D ]s  }
t        «       }||
   j                  ||«       |j	                  «       }|j                  |d «      }|d k(  r&|}|t        |«      z   }|||<   |	j                  |«       |||
<   Œu |j                  «       }t        dd d t        «      }|j                  ||||d «       |j                  «       }|j                  |d¬«       |j                  |d¬«       |	D ]  }|j                  |«       Œ y )Nr   )ÚkeyrÜ  rö   r)  )r‡  r{  r   rc   r  re   rñ  rj   r  ry  r+  r½   r+  rò  )r�   rÀ   rœ   r®   rÁ   rÆ   ÚoffsetByGlyphÚoffsetByDataÚdataLenÚcompiledDatar�  r,  rí  r'  ÚlookupWriterrà  Ú
dataWriterÚds                     r6   r½   zAATLookupWithDataOffset.write¼  s,  € ð 02°2°q W�|ˆØˆÜ˜E t§¡Ô7ò 
	*ˆEÜ%›ˆIØ�%‰L× Ñ  ¨DÔ1Ø×'Ñ'Ó)ˆDØ!×%Ñ% d¨DÓ1ˆFØ˜Š~Ø �Ø!¤C¨£IÑ-�Ø%+�˜TÑ"Ø×#Ñ# DÔ)Ø#)ˆM˜%Ò ð
	*ð ×*Ñ*Ó,ˆÜ˜=¨$°´fÓ=ˆØ�‰�\ 4¨°MÀ4ÔHà×(Ñ(Ó*ˆ
Ø×Ñ˜\°aÐÔ8Ø×Ñ˜Z°AÐÔ6Øò 	$ˆAØ× Ñ  Õ#ñ	$r8   c                 óX   — t        dd d | j                  «      }|j                  |||«      S rÛ  )ry  rd   rË   )r�   rÉ   rÊ   rœ   rà  s        r6   rË   zAATLookupWithDataOffset.xmlReadß  s)   € Ü˜=¨$°°d·o±oÓFˆØ�~‰~˜e W¨dÓ3Ð3r8   c                 ó^   — t        dd d | j                  «      }|j                  |||||«       y rÛ  )ry  rd   rÏ   )r�   rÎ   rœ   rÁ   rT   rÉ   rà  s          r6   rÏ   z AATLookupWithDataOffset.xmlWriteã  s*   € Ü˜=¨$°°d·o±oÓFˆØ�‰˜	 4¨°°eÕ<r8   r2   ©rh   rØ   rÙ   rš   r½   rË   rÏ   r¦   r8   r6   rÙ  rÙ  ­  s   „ òó!$òF4ó=r8   rÙ  c                   ó&   — e Zd Zd„ Zd„ Zd„ Zdd„Zy)ÚMortSubtableConverterc                 óÂ  — |j                   }t        «       }|j                  «       |_        |j	                  «       |_        |j	                  «       |_        |j                  «       |_        t        d   j                  |j                  «      }|€J d|j                  z  «       ‚|j                   |z
  }|j                  |j                   |j                   |j                  z   |z
   }t        |«      |j                  |z
  k(  sJ ‚t        ||j                  ¬«      }	 |«       |_        |j                  j!                  |	|«       |j#                  ||j                  z   «       |S )NÚmortz!unsupported 'mort' lookup type %s©rí  ÚtableTag)r�   r&   r.  r>   rE  ÚCoverageFlagsr?   r  ÚSubFeatureFlagsr   re   rí  rñ  r   rõ  rE   rö  r™   )
r�   r£   rœ   r®   r�   rÖ   rd   ÚheaderLengthrí  Ú	subReaders
             r6   rš   zMortSubtableConverter.readé  s  € Ø�j‰jˆÜ‹NˆØ×*Ñ*Ó,ˆŒØ ×*Ñ*Ó,ˆŒØ×&Ñ&Ó(ˆŒØ"×,Ñ,Ó.ˆÔÜ  Ñ(×,Ñ,¨Q¯[©[Ó9ˆ
ØÐØKÐ=ÀÇÁÑKÓK�5ð
 —z‘z CÑ'ˆØ�{‰{˜6Ÿ:™:¨¯
©
°Q·^±^Ñ(CÀlÑ(RÐSˆÜ�4‹y˜AŸN™N¨\Ñ9Ò9Ð9Ð9Ü! t°f·o±oÔFˆ	Ù “lˆŒØ	�‰×Ñ˜i¨Ô.Ø�‰�C˜!Ÿ.™.Ñ(Ô)Øˆr8   c                 ó4  — |j                  ||«       |j                  «        |j                  d|j                  z  «       |j                  «        |j	                  d|j
                  ¬«       |j                  «        |j                  d|j                  z  «       |j                  «        |j	                  dd|j                  z  ¬«       |j                  «        |j                  j                  ||«       |j                  |«       |j                  «        y )NúStructLength=%drö  rß   úMorphType=%dr÷  rÜ  )rÖ  rç   r`  r>   ræ   rö  r?   r÷  rE   rú  r×  rÍ   s         r6   rÏ   zMortSubtableConverter.xmlWrite   så   € Ø×Ñ˜4 Ô'Ø×ÑÔØ×ÑÐ+¨e×.@Ñ.@Ñ@ÔAØ×ÑÔØ×Ñ˜O°5×3FÑ3FÐÔGØ×ÑÔØ×Ñ˜.¨5¯?©?Ñ:Ô;Ø×ÑÔØ×ÑÐ-°XÀ×@UÑ@UÑ5UÐÔVØ×ÑÔØ�‰×Ñ˜i¨Ô.Ø×Ñ˜ÔØ×ÑÕr8   c                 ó  — t        «       }d|_        t        t        |«      D ]d  \  }}}|dk(  rt	        |d   «      |_        Œ |dk(  rt	        |d   «      |_        Œ9|j                  d«      r|j                  ||||«       Œ_J |«       ‚ |S )Nr   rö  rÁ   r÷  ÚMorph)r&   rö  rˆ  Úistupler   r÷  rW   r  )r�   rÉ   rÊ   rœ   rÖ   ÚeltNameÚeltAttrsrÔ  s           r6   rË   zMortSubtableConverter.xmlRead  s’   € Ü‹NˆØˆŒÜ-3´G¸WÓ-Eò 	&Ñ)ˆG�X˜zØ˜/Ò)Ü"*¨8°GÑ+<Ó"=�•ØÐ-Ò-Ü$,¨X°gÑ->Ó$?�Õ!Ø×!Ñ! 'Ô*Ø—	‘	˜' 8¨Z¸Õ>à%˜gÓ%�uð	&ð ˆr8   Nc                 ó4  — t        |j                  «      }|j                  «       }d|_        |j	                  ||«       |j                  |   dk(  sJ ‚|j                  «       |z
  }|dkD  rt        d«      ‚t        j                  d|«      |j                  |<   y )Nr  s   Þ­r‹  z!mort subtable exceeds 65535 bytesú>H)rñ  r  r  r>   rc   Ú
ValueErrorÚstructÚpack)	r�   rÀ   rœ   r®   rÁ   rÆ   r  r  r  s	            r6   r½   zMortSubtableConverter.write  sŠ   € Ü˜&Ÿ,™,Ó'ˆØ×%Ñ%Ó'ˆØ#ˆÔØ�‰�f˜dÔ#Ø�|‰|˜KÑ(¨KÒ7Ð7Ð7Ø×%Ñ%Ó'¨&Ñ0ˆØ�FŠ?ÜÐ@ÓAÐAÜ$*§K¡K°°fÓ$=ˆ�‰�[Ò!r8   r2   )rh   rØ   rÙ   rš   rÏ   rË   r½   r¦   r8   r6   rñ  rñ  è  s   „ òò.òô	>r8   rñ  c                   ó¢   — e Zd ZdddddœZej	                  «       D � ��ci c]  \  }}||“Œ
 c}}} Zdddœd	„Zd
„ Zd„ Zd„ Z	d„ Z
dd„Zyc c}}} w )ÚMorxSubtableConverterÚLayoutOrderÚReversedLayoutOrderÚLogicalOrderÚReversedLogicalOrder))FF)TF©FT)TTNrv   rM   c                ó:   — t         j                  | |||||¬«       y ©NrM   )ru   r‘   r�   s         r6   r‘   zMorxSubtableConverter.__init__4  s"   € Ü×ÑØ�$˜  Z¸[ð 	õ 	
r8   c                 óR   — |dz  dk7  rd|_         y |dz  dk7  rd|_         y d|_         y )Né    r   ÚAnyé€   ÚVerticalÚ
Horizontal)ÚTextDirection)r�   r™  Úsubtables      r6   Ú"_setTextDirectionFromCoverageFlagsz8MorxSubtableConverter._setTextDirectionFromCoverageFlags9  s2   € Ø�D‰L˜QÒØ%*ˆHÕ"Ø�d‰l˜qÒ Ø%/ˆHÕ"à%1ˆHÕ"r8   c                 ó„  — |j                   }t        «       }|j                  «       |_        |j	                  «       }|dz  dk7  |dz  dk7  f}| j
                  |   |_        | j                  ||«       |j                  «       |_	        |xj                  |dz  dz  z  c_	        |j	                  «       |_
        |j                  «       |_        t        d   j                  |j                  «      }|€J d|j                  z  «       ‚|j                   |z
  }	|j                  |j                   |j                   |j                  z   |	z
   }
t        |
«      |j                  |	z
  k(  sJ ‚t!        |
|j"                  ¬«      } |«       |_        |j$                  j'                  ||«       |j)                  ||j                  z   «       |S )Nrâ  r   r¾  é   Úmorxz!unsupported 'morx' lookup type %srô  )r�   r'   r  r>   rE  Ú_PROCESSING_ORDERSÚProcessingOrderr  r.  ÚReservedr?   r÷  r   re   rí  rñ  r   rõ  rE   rö  r™   )r�   r£   rœ   r®   r�   rÖ   r™  ÚorderKeyrd   rø  rí  rù  s               r6   rš   zMorxSubtableConverter.readA  s‚  € Ø�j‰jˆÜ‹NˆØ×)Ñ)Ó+ˆŒØ× Ñ Ó"ˆØ˜T‘\ aÑ'¨%°$©,¸1Ñ)<Ð=ˆØ ×3Ñ3°HÑ=ˆÔØ×/Ñ/°°qÔ9Ø×&Ñ&Ó(ˆŒ
Ø	�
Š
�u˜s‘{ rÑ)Ñ)�
Ø×&Ñ&Ó(ˆŒØ"×,Ñ,Ó.ˆÔÜ  Ñ(×,Ñ,¨Q¯[©[Ó9ˆ
ØÐØKÐ=ÀÇÁÑKÓK�5ð —z‘z CÑ'ˆØ�{‰{˜6Ÿ:™:¨¯
©
°Q·^±^Ñ(CÀlÑ(RÐSˆÜ�4‹y˜AŸN™N¨\Ñ9Ò9Ð9Ð9Ü! t°f·o±oÔFˆ	Ù “lˆŒØ	�‰×Ñ˜i¨Ô.Ø�‰�C˜!Ÿ.™.Ñ(Ô)Øˆr8   c                 ó  — |j                  ||«       |j                  «        |j                  d|j                  z  «       |j                  «        |j	                  d|j
                  ¬«       |j                  «        |j	                  d|j                  ¬«       |j                  «        |j                  dk7  r0|j	                  dd|j                  z  ¬«       |j                  «        |j                  d|j                  z  «       |j                  «        |j	                  d	d
|j                  z  ¬«       |j                  «        |j                  j                  ||«       |j                  |«       |j                  «        y )Nrû  r  rß   r  r   r  z0x%04xrü  r÷  rÜ  )rÖ  rç   r`  r>   ræ   r  r  r  r?   r÷  rE   rú  r×  rÍ   s         r6   rÏ   zMorxSubtableConverter.xmlWrite\  s?  € Ø×Ñ˜4 Ô'Ø×ÑÔØ×ÑÐ+¨e×.@Ñ.@Ñ@ÔAØ×ÑÔØ×Ñ˜O°5×3FÑ3FÐÔGØ×ÑÔØ×ÑÐ-°U×5JÑ5JÐÔKØ×ÑÔØ�>‰>˜QÒØ×Ñ 
°(¸U¿^¹^Ñ2KÐÔLØ×ÑÔØ×Ñ˜.¨5¯?©?Ñ:Ô;Ø×ÑÔØ×ÑÐ-°XÀ×@UÑ@UÑ5UÐÔVØ×ÑÔØ�‰×Ñ˜i¨Ô.Ø×Ñ˜ÔØ×ÑÕr8   c                 óÂ  — t        «       }d}d|_        t        t        |«      D �]  \  }}}|dk(  rEt	        |d   «      }|dz  dk7  |dz  dk7  f}	| j
                  |	   |_        | j                  ||«       ŒR|dk(  r7|d   |_        |j                  | j                  v rŒzJ d|j                  z  «       ‚|dk(  r-|d   |_	        |j                  d	v rŒ¬J d
|j                  z  «       ‚|dk(  rt	        |d   «      |_        ŒÙ|dk(  rt	        |d   «      |_
        Œò|j                  d«      r|j                  ||||«       �ŒJ |«       ‚ |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þ  r  )r'   r  rˆ  rÿ  r   r  r  r  Ú_PROCESSING_ORDERS_REVERSEDr  r÷  rW   r  )
r�   rÉ   rÊ   rœ   rÖ   ÚcovFlagsr   r  rÔ  r  s
             r6   rË   zMorxSubtableConverter.xmlReadp  s‰  € Ü‹NˆØˆØˆŒ
Ü-3´G¸WÓ-Eó 	&Ñ)ˆG�X˜zØ˜/Ò)ä# H¨WÑ$5Ó6�Ø%¨™_°Ñ2°XÀ±_ÈÑ4JÐK�Ø$(×$;Ñ$;¸HÑ$E�Ô!Ø×7Ñ7¸À!ÕDØÐ-Ò-Ø$,¨WÑ$5�Ô!Ø×(Ñ(¨D×,LÑ,LÒLð Ø1°A×4EÑ4EÑEóÐLð ˜OÒ+Ø"*¨7Ñ"3�”Ø—‘Ð*KÒKð Ø.°·±Ñ@óÐKð ˜JÒ&Ü% h¨wÑ&7Ó8�•
ØÐ-Ò-Ü$,¨X°gÑ->Ó$?�Õ!Ø×!Ñ! 'Ô*Ø—	‘	˜' 8¨Z¸Ö>à%˜gÓ%�uð1	&ð2  ‘n¨Ñ+¨a¯j©jÑ8ˆŒ
Øˆr8   c                 óH  — |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                  «      }	|j                  «       }
d	|_        |j                   }|j                   d
z  |_         |j                  ||«       ||_         |j                  |	   dk(  sJ ‚|j                  «       |
z
  }t        j                  d|«      |j                  |	<   y )Ni   r¾  r  r  r   râ  r  r  r  r‹  r  z>L)r  r"  r  r  rö  rñ  r  r  r>   rc   r  r  )r�   rÀ   rœ   r®   rÁ   rÆ   r#  ÚreverseOrderÚlogicalOrderr  r  ÚorigReservedr  s                r6   r½   zMorxSubtableConverter.write�  s#  € Ø—N‘N ZÑ/°BÑ6ˆØ%)×%EÑ%EØ×!Ñ!ñ&
Ñ"ˆ�lð 	˜E×/Ñ/°:Ò=‘DÀ1ÑDˆØ™L‘D¨aÑ/ˆØ˜E×/Ñ/°5Ò8‘D¸aÑ?ˆØ™L‘D¨aÑ/ˆØ&ˆÔÜ˜&Ÿ,™,Ó'ˆØ×%Ñ%Ó'ˆØ'ˆÔð —~‘~ˆØŸ™¨&Ñ0ˆŒØ�‰�f˜dÔ#Ø%ˆŒØ�|‰|˜KÑ(Ð,?Ò?Ð?Ð?Ø×%Ñ%Ó'¨&Ñ0ˆÜ$*§K¡K°°fÓ$=ˆ�‰�[Ò!r8   r2   )rh   rØ   rÙ   r  r  r"  r‘   r  rš   rÏ   rË   r½   )r§   rå  rŽ  s   000r6   r  r  )  sm   „ ð &Ø,Ø%Ø,ñÐð =O×<TÑ<TÓ<V×"WÐ"W±°°S 3¨¡8Ô"WÐð
È"ô 
ò
2òò6ò(ô@>ùô} #Xs    A
r  c                   óz   — 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y	)Ú	STXHeaderrv   rM   c                ó  — t         j                  | |||||¬«       t        | j                  t        «      sJ ‚t        dd d t        «      | _        t        | j                  t        «      rt        dd d t        «      | _
        y d | _
        y )NrM   ÚGlyphClassesÚPerGlyphLookup)ru   r‘   r|  rd   r!   ry  r+  ÚclassLookupr"   ro  ÚperGlyphLookupr�   s         r6   r‘   zSTXHeader.__init__«  sv   € Ü×ÑØ�$˜  Z¸[ð 	ô 	
ô ˜$Ÿ/™/¬9Ô5Ð5Ð5Ü$ ^°T¸4ÄÓHˆÔÜ�d—o‘oÔ'<Ô=Ü"+Ð,<¸dÀDÌ'Ó"RˆDÕà"&ˆDÕr8   c                 ó¦  — t        «       }|j                  }|j                  d«      }|j                  d«      }|j                  d«      }d }	d }
|j                  «       |_        |j                  ||j                  «       z   «       |j                  ||j                  «       z   «       |j                  ||j                  «       z   «       | j                  �3|j                  d«      }|j                  ||j                  «       z   «       t        | j                  t        «      rê|j                  d«      }	|	j                  ||j                  «       z   «       |j                  d«      }|j                  ||j                  «       z   «       |j                  d«      }
|
j                  ||j                  «       z   «       |
j                  |j                  z
  dz  }|dk\  sJ ‚|j                  |«      |_        | j                  |
|«      |_        nMt        | j                  t        «      r3|j                  d«      }	|	j                  ||j                  «       z   «       | j                  j!                  |||«      |_        t%        |j                  |j                  z
  |j                  dz  z  «      }t'        |«      D ]r  }t)        «       }|j*                  j-                  |«       t'        |j                  «      D ]3  }|j/                  «       }| j1                  ||||	«      |j2                  |<   Œ5 Œt | j                  �| j5                  ||«      |_        |S )Nr   r!  )r   r�   r&  r  ÚGlyphClassCountr™   r.  r|  rd   r$   r1  ÚLigComponentsÚ_readLigaturesÚ	Ligaturesr%   r-  rš   r+  rÔ   r¬   r    ÚStatesrj   r.  Ú_readTransitionÚTransitionsÚ_readPerGlyphLookupsÚPerGlyphLookups)r�   r£   rœ   r®   r“   r�   ÚclassTableReaderÚstateArrayReaderÚentryTableReaderÚactionReaderÚligaturesReaderÚperGlyphTableReaderÚligComponentReaderÚnumLigComponentsÚ	numStatesÚ
stateIndexÚstateÚ
glyphClassÚ
entryIndexs                      r6   rš   zSTXHeader.read¶  s	  € Ü“ˆØ�j‰jˆØ!×.Ñ.¨qÓ1ÐØ!×.Ñ.¨qÓ1ÐØ!×.Ñ.¨qÓ1ÐØˆØˆØ &× 0Ñ 0Ó 2ˆÔØ×Ñ˜c F×$4Ñ$4Ó$6Ñ6Ô7Ø×Ñ˜c F×$4Ñ$4Ó$6Ñ6Ô7Ø×Ñ˜c F×$4Ñ$4Ó$6Ñ6Ô7Ø×ÑÐ*Ø"(×"5Ñ"5°aÓ"8ÐØ×$Ñ$ S¨6×+;Ñ+;Ó+=Ñ%=Ô>Ü�d—o‘oÔ':Ô;Ø!×.Ñ.¨qÓ1ˆLØ×Ñ˜c F×$4Ñ$4Ó$6Ñ6Ô7Ø!'×!4Ñ!4°QÓ!7ÐØ×#Ñ# C¨&×*:Ñ*:Ó*<Ñ$<Ô=Ø$×1Ñ1°!Ó4ˆOØ× Ñ   v×'7Ñ'7Ó'9Ñ!9Ô:Ø /× 3Ñ 3Ð6H×6LÑ6LÑ LÐQRÑRÐØ# qÒ(Ð(Ð(Ø"4×"DÑ"DÐEUÓ"VˆEÔØ"×1Ñ1°/À4ÓHˆE�OÜ˜Ÿ™Ô)=Ô>Ø!×.Ñ.¨qÓ1ˆLØ×Ñ˜c F×$4Ñ$4Ó$6Ñ6Ô7Ø!×-Ñ-×2Ñ2Ð3CÀTÈ9ÓUˆÔÜØ×!Ñ!Ð$4×$8Ñ$8Ñ8¸U×=RÑ=RÐUVÑ=VÑWó
ˆ	ô   	Ó*ò 	ˆJÜ“JˆEØ�L‰L×Ñ Ô&Ü# E×$9Ñ$9Ó:ò �
Ø-×8Ñ8Ó:�
Ø04×0DÑ0DØ$ j°$¸ó1�×!Ñ! *Ò-ñð	ð ×ÑÐ*Ø$(×$=Ñ$=ØÐ*¨Dó%ˆEÔ!ð ˆr8   c                 ó¢   — | j                  «       }|j                  |j                  ||j                  z  z   «      }|j	                  |||«       |S r2   )rd   r&  r�   r³   rö  )r�   r£   rE  rœ   r<  Ú
transitionÚentryReaders          r6   r5  zSTXHeader._readTransitionå  sO   € Ø—_‘_Ó&ˆ
Ø×)Ñ)Ø�J‰J˜ j×&;Ñ&;Ñ;Ñ;ó
ˆð 	×Ñ˜[¨$°Ô=ØÐr8   c                 ó�   — t        |j                  «      }||j                  z
  dz  }|j                  |j	                  |«      «      S rp  )rñ  rí  r�   rr  r1  )r�   r£   rœ   ÚlimitÚnumLigatureGlyphss        r6   r2  zSTXHeader._readLigaturesí  sA   € Ü�F—K‘KÓ ˆØ" V§Z¡ZÑ/°AÑ5ÐØ×$Ñ$ V×%;Ñ%;Ð<MÓ%NÓOÐOr8   c                 ó.  — d}|j                   D ]ƒ  }|j                  j                  «       D ]d  }t        |t        «      sŒ|j
                  dk7  rt        ||j
                  dz   «      }|j                  dk7  sŒLt        ||j                  dz   «      }Œf Œ… |S )Nr   r‹  r   )r4  r6  rf   r3   r"   Ú	MarkIndexÚmaxÚCurrentIndex)r�   r“   Ú
numLookupsrC  r5   s        r6   Ú_countPerGlyphLookupszSTXHeader._countPerGlyphLookupsò  s’   € ð
 ˆ
Ø—\‘\ò 	IˆEØ×&Ñ&×-Ñ-Ó/ò I�Ü˜aÔ!6Õ7Ø—{‘{ fÒ,Ü%(¨°Q·[±[À1±_Ó%E˜
Ø—~‘~¨Ó/Ü%(¨°Q·^±^ÀaÑ5GÓ%H™
ñIð	Ið Ðr8   c                 ó  — |j                   }g }t        | j                  |«      «      D ]a  }|j                  d«      }|j	                  ||j                  «       z   «       |j                  | j                  j                  ||i «      «       Œc |S rò   )	r�   r¬   rQ  r&  r™   r  rj   r.  rš   )r�   r“   r£   rœ   r�   ÚlookupsrÁ  rß  s           r6   r7  zSTXHeader._readPerGlyphLookups  s…   € Ø�j‰jˆØˆÜ�t×1Ñ1°%Ó8Ó9ò 	MˆAØ!×.Ñ.¨qÓ1ˆLØ×Ñ˜c F×$4Ñ$4Ó$6Ñ6Ô7Ø�N‰N˜4×.Ñ.×3Ñ3°LÀ$ÈÓKÕLð	Mð ˆr8   Nc                 ód  — t        «       }| j                  j                  ||||j                  d ¬«       t	        |j                  «       d«      }t        |j                  j                  «       «      dz   }d}	| j                  �|	dz  }	|	| j                  j                  z  }	| j                  j                  ||j                  «      \  }
}| j                  ||j                  ||«      \  }}|	t        |«      z   }|t        |«      z   }|t        |«      z   }t	        | j                  ||«      d«      }|
�|t        |«      z   }nd }d\  }}| j!                  ||«      }| j#                  ||«      }|�,t        |«      dk(  sJ ‚|t        |
«      z   }|t        |«      z   }|j%                  |«       |j%                  |	«       |j%                  |«       |j%                  |«       | j                  �|j%                  |«       |�|j%                  |«       |�"|j%                  |«       |j%                  |«       |j'                  |«       |j'                  |«       |j'                  |«       |j'                  |«       |
�|j'                  |
«       |�|j'                  |«       |�|j'                  |«       y y )N)rÆ   r!  r   r¾  rö   )NNr   )r   r-  r½   r+  r   r  rN  rf   r.  rd   ÚactionHeaderSizeÚcompileActionsr4  Ú_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                          r6   r½   zSTXHeader.write
  s¯  € Ü(›?ÐØ×Ñ×ÑØ˜d I¨u×/AÑ/AÈtð 	ô 	
ô Ð-×8Ñ8Ó:¸AÓ>ˆÜ˜e×0Ñ0×7Ñ7Ó9Ó:¸QÑ>ˆØ "ÐØ×ÑÐ*Ø! QÑ&Ð!à §¡×!AÑ!AÑAÐØ"&§/¡/×"@Ñ"@ÀÀuÇ|Á|Ó"TÑˆ
�KØ)-×)<Ñ)<Ø�%—,‘, °ó*
Ñ&ˆ˜ð 1´3°~Ó3FÑFÐØ+¬c°.Ó.AÑAÐØ)¬C°Ó,?Ñ?ˆÜ˜4×7Ñ7¸¸tÓDÀaÓHˆØÐ!Ø+¬c°.Ó.AÑA‰LàˆLà/9Ñ,ˆÐ,Ø ×6Ñ6°u¸dÓCÐØ×.Ñ.¨u°dÓ;ˆØÐ(Ü�|Ó$¨Ò)Ð)Ð)Ø".´°Z³Ñ"@ÐØ1´CÐ8IÓ4JÑJˆOà×Ñ˜/Ô*Ø×ÑÐ/Ô0Ø×ÑÐ*Ô+Ø×ÑÐ*Ô+Ø×ÑÐ*Ø×Ñ˜nÔ-ØÐ#Ø×Ñ˜lÔ+ØÐ*Ø×ÑÐ1Ô2Ø×Ñ˜oÔ.Ø×Ñ˜Ô(Ø×Ñ˜Ô(Ø×Ñ˜Ô(Ø×Ñ˜Ô&ØÐ!Ø×Ñ˜ZÔ(ØÐ(Ø×ÑÐ.Ô/ØÐ$Ø×Ñ˜]Õ+ð %r8   c           	      ó6  — t        «       }g i }}|D ]Ô  }t        |«      D ]Ä  }	|j                  |	   }
t        «       }|
j                  |||«       |j	                  «       }t        |«      |
j                  k(  s)J dt        |
«      |
j                  t        |«      fz  «       ‚|j                  |«      }|€!t        |«      }|||<   |j                  |«       |j                  |«       ŒÆ ŒÖ t        |j	                  «       d«      }t        t        |«      d«      }||fS )Nz1%s has staticSize %d, but actually wrote %d bytesrö   )r   r¬   r6  rc   r  rñ  r³   r	  re   rj   r4  r   r   )r�   rœ   Ústatesr]  r`  ÚstateArrayWriterÚentriesÚentryIDsrC  rD  rG  ÚentryWriterÚ	entryDatarE  ra  rb  s                   r6   rW  zSTXHeader._compileStatesA  s)  € Ü(›?ÐØ �ˆØò 	9ˆEÜ# OÓ4ò 9�
Ø"×.Ñ.¨zÑ:�
Ü+›o�Ø×"Ñ" ;°°kÔBØ'×2Ñ2Ó4�	ä˜	“N j×&;Ñ&;Ò;ðàIÜ˜Ó$Ø×)Ñ)Ü˜	“NðMñ óØ;ð &Ÿ\™\¨)Ó4�
ØÐ%Ü!$ W£�JØ*4�H˜YÑ'Ø—N‘N 9Ô-Ø ×,Ñ,¨ZÕ8ñ#9ð	9ô& Ð-×8Ñ8Ó:¸AÓ>ˆÜœY wÓ/°Ó3ˆØ˜~Ð-Ð-r8   c                 ó†  — | j                   €y| j                  |«      }t        |j                  «      |k(  sJ dt        |j                  «      |fz  «       ‚t	        «       }|j                  D ]D  }|j                  «       }| j                   j                  ||i |d «       |j                  |d¬«       ŒF |j                  «       S )Nr8   zVlen(AATStateTable.PerGlyphLookups) is %d, but the actions inside the table refer to %drö   r)  )	r.  rQ  rñ  r8  r   r  r½   r+  r  )r�   r“   rœ   rP  rÀ   rà  rê  s          r6   rX  z!STXHeader._compilePerGlyphLookups[  sÊ   € Ø×ÑÐ&ØØ×/Ñ/°Ó6ˆ
Ü�5×(Ñ(Ó)¨ZÒ7ð 	
ð;ä�5×(Ñ(Ó)¨:Ð6ñ7ó	
Ð7ô
 “ˆØ×+Ñ+ò 	=ˆFØ!×.Ñ.Ó0ˆLØ×Ñ×%Ñ% l°D¸"¸fÀdÔKØ× Ñ  ¸!Ð Õ<ð	=ð × Ñ Ó"Ð"r8   c                 ó”   — t        |d«      sy t        «       }|j                  D ]  }|j                  |«       Œ |j	                  «       S )Nr1  )r´   r   r1  r4  r  )r�   r“   rœ   rÀ   Ú	components        r6   rY  zSTXHeader._compileLigComponentsk  sH   € Ü�u˜oÔ.ØÜ“ˆØ×,Ñ,ò 	*ˆIØ×Ñ˜yÕ)ð	*à× Ñ Ó"Ð"r8   c                 ó²   — t        |d«      sy t        «       }|j                  D ]"  }|j                  |j	                  |«      «       Œ$ |j                  «       S )Nr3  )r´   r   r3  r4  r{  r  )r�   r“   rœ   rÀ   Ú	glyphNames        r6   rZ  zSTXHeader._compileLigaturess  sO   € Ü�u˜kÔ*ØÜ“ˆØŸ™ò 	;ˆIØ×Ñ˜tŸ™¨yÓ9Õ:ð	;à× Ñ Ó"Ð"r8   c                 ót  — |j                  ||«       |j                  «        |j                  d|j                  z  «       |j                  «        t	        |j
                  j                  «       «      D ])  \  }}|j                  d||¬«       |j                  «        Œ+ t        |j                  «      D ]‹  \  }}	|j                  d|¬«       |j                  «        t	        |	j                  j                  «       «      D ]  \  }
}|j                  ||d|
id¬«       Œ |j                  d«       |j                  «        Œ� t        |j                  «      D ]Ž  \  }}|j                  d	|¬«       |j                  «        t	        |j                  «       «      D ])  \  }}|j                  d
||¬«       |j                  «        Œ+ |j                  d	«       |j                  «        Œ� t        |d«      rƒ|j                  d«       |j                  «        t        t        |d«      «      D ])  \  }}|j                  d||¬«       |j                  «        Œ+ |j                  d«       |j                  «        t        |d«      r|j                  d«       |j                  «        t	        |j                   «      D ]%  }|j                  d|¬«       |j                  «        Œ' |j                  d«       |j                  «        | j#                  |||||«       |j                  |«       |j                  «        y )NzGlyphClassCount=%sÚ
GlyphClass©r�  rÁ   ÚState©ÚindexÚonGlyphClassÚ
Transition)rœ   rÉ   rT   r,  rÒ  r1  ÚLigComponent)r}  rÁ   Ú_MortLigatureRebaseÚMortLigatureRebaseÚ	Component)rÖ  rç   r`  r0  r‡  r+  r  ræ   r¼   r4  r6  rú  r×  r8  r´   rª  r�  Ú_xmlWriteLigatures)r�   rÎ   rœ   rÁ   rT   rÉ   ÚgÚklassrB  rC  rD  Útransr›   rà  r�  rŽ  ÚcomponentIndexs                    r6   rÏ   zSTXHeader.xmlWrite{  sú  € Ø×Ñ˜4 Ô'Ø×ÑÔØ×ÑÐ.°×1FÑ1FÑFÔGØ×ÑÔÜ˜u×1Ñ1×7Ñ7Ó9Ó:ò 	 ‰HˆAˆuØ×Ñ °A¸UÐÔCØ×ÑÕð	 ô "+¨5¯<©<Ó!8ò 	 ÑˆJ˜Ø×Ñ˜w¨jÐÔ9Ø×ÑÔÜ%+¨E×,=Ñ,=×,CÑ,CÓ,EÓ%Fò Ñ!�
˜EØ—‘ØØØ)¨:Ð6Ø%ð	 õ ðð ×Ñ˜WÔ%Ø×ÑÕð	 ô # 5×#8Ñ#8Ó9ò 	 ‰IˆAˆvØ×ÑÐ/°qÐÔ9Ø×ÑÔÜ$ V§\¡\£^Ó4ò $‘
��sØ×#Ñ# H°EÀÐ#ÔEØ×!Ñ!Õ#ð$ð ×ÑÐ-Ô.Ø×ÑÕð	 ô �5˜/Ô*Ø×Ñ˜Ô/Ø×ÑÔÜ#¤G¨E°?Ó$CÓDò $‘��3Ø×#Ñ# N¸!À3Ð#ÔGØ×!Ñ!Õ#ð$ð ×Ñ˜_Ô-Ø×ÑÔÜ�5Ð/Ô0Ø×ÑÐ3Ô4Ø×ÑÔÜ"(¨×)BÑ)BÓ"Cò $�Ø×#Ñ# K°~Ð#ÔFØ×!Ñ!Õ#ð$ð ×ÑÐ1Ô2Ø×ÑÔØ×Ñ 	¨4°¸¸eÔDØ×Ñ˜ÔØ×ÑÕr8   c                 ó$  — t        |d«      sy |j                  d«       |j                  «        t        t	        |d«      «      D ])  \  }}|j                  d||¬«       |j                  «        Œ+ |j                  d«       |j                  «        y )Nr3  ÚLigature)r}  r�  )r´   rÖ  rç   r¼   rª  ræ   r×  )r�   rÎ   rœ   rÁ   rT   rÉ   r›   r…  s           r6   r„  zSTXHeader._xmlWriteLigatures«  s…   € Ü�u˜kÔ*ØØ×Ñ˜;Ô'Ø×ÑÔÜœg e¨[Ó9Ó:ò 	 ‰DˆAˆqØ×Ñ 
°!¸1ÐÔ=Ø×ÑÕð	 ð 	×Ñ˜Ô%Ø×ÑÕr8   c           
      óF  — t        «       }t        t        |«      D �]!  \  }}}|dk(  r#|d   }|d   }	t        |	«      |j                  |<   Œ0|dk(  r/| j                  |||«      }
|j                  j                  |
«       Œd|dk(  r9| j                  j                  |||«      }|j                  j                  |«       Œ¢|dk(  r| j                  |||«      |_        ŒÀ|dk(  r>t        t        |«      D ���ch c]  \  }}}|dk(  rt        |d	   «      ’Œ c}}}|_        �Œ|d
k(  s�Œ
| j                  |||«      |_        �Œ$ t!        |j                  j#                  «       «      }|j%                  d„ |j                  D «       «       t'        |d¬«      dz   |_        |S c c}}}w )Nry  r�  rÁ   r{  r,  r1  r‚  rƒ  r}  r3  c              3   óB   K  — | ]  }|j                   D ]  }|–— Œ Œ y ­wr2   )r6  )r§   rC  rD  s      r6   r¨   z$STXHeader.xmlRead.<locals>.<genexpr>Ò  s-   è ø€ ò 
Ø À5×CTÑCTò
Ø5?ŒJð
Øñ
ùs   ‚re  ©Údefaultr   )r   rˆ  rÿ  r   r+  Ú_xmlReadStater4  rj   r.  rË   r8  Ú_xmlReadLigComponentsr1  r�  Ú_xmlReadLigaturesr3  r†  rf   ÚextendrN  r0  )r�   rÉ   rÊ   rœ   r“   r   r  rÔ  r�  rÁ   rC  rà  ÚcomponentNameÚcomponentAttrsÚ_componentContentÚglyphClassess                   r6   rË   zSTXHeader.xmlRead¶  s®  € Ü“ˆÜ-3´G¸WÓ-Eó 	UÑ)ˆG�X˜zØ˜,Ò&Ø  Ñ)�Ø  Ñ)�Ü,4°U«O�×"Ñ" 5Ò)Ø˜GÒ#Ø×*Ñ*¨8°ZÀÓF�Ø—‘×#Ñ# EÕ*ØÐ,Ò,Ø×,Ñ,×4Ñ4°X¸zÈ4ÓP�Ø×%Ñ%×,Ñ,¨VÕ4Ø˜OÒ+Ø&*×&@Ñ&@Ø˜j¨$ó'�Õ#ð Ð0Ò0ô MSÜ óM÷-ð -áH˜ ~Ð7Hð %¨Ò3ô	 ˜^¨GÑ4Õ5ô-�Ö)ð ˜KÔ'Ø"&×"8Ñ"8¸À:ÈtÓ"T�–ð1	Uô2 ˜E×.Ñ.×5Ñ5Ó7Ó8ˆØ×Ññ 
Ø$)§L¡Lô
ô 	
ô !$ L¸"Ô =ÀÑ AˆÔØˆùô-s   Ã4F
c                 óÚ   — t        «       }t        t        |«      D ]M  \  }}}|dk(  sŒt        |d   «      }| j	                  «       }	|	j                  ||||«       |	|j                  |<   ŒO |S )Nr  r~  )r    rˆ  rÿ  r   rd   r  r6  )
r�   rÉ   rÊ   rœ   rC  r   r  rÔ  rD  rG  s
             r6   r�  zSTXHeader._xmlReadStateØ  st   € Ü“
ˆÜ-3´G¸WÓ-Eò 	;Ñ)ˆG�X˜zØ˜,Ó&Ü% h¨~Ñ&>Ó?�
Ø!Ÿ_™_Ó.�
Ø×"Ñ" 7¨H°jÀ$ÔGØ0:�×!Ñ! *Ò-ð	;ð ˆr8   c                 ó‚   — g }t        t        |«      D ])  \  }}}|dk(  sŒ|j                  t        |d   «      «       Œ+ |S )Nr€  rÁ   )rˆ  rÿ  rj   r   )r�   rÉ   rÊ   rœ   ÚligComponentsr   r  Ú_eltContents           r6   r�  zSTXHeader._xmlReadLigComponentsâ  sN   € ØˆÜ.4´W¸gÓ.Fò 	BÑ*ˆG�X˜{Ø˜.Ó(Ø×$Ñ$¤X¨h°wÑ.?Ó%@ÕAð	Bð Ðr8   c                 óp   — g }t        t        |«      D ]   \  }}}|dk(  sŒ|j                  |d   «       Œ" |S )NrŠ  r�  )rˆ  rÿ  rj   )r�   rÉ   rÊ   rœ   Úligsr   r  rš  s           r6   r‘  zSTXHeader._xmlReadLigaturesé  sD   € ØˆÜ.4´W¸gÓ.Fò 	/Ñ*ˆG�X˜{Ø˜*Ó$Ø—‘˜H WÑ-Õ.ð	/ð ˆr8   r2   )rh   rØ   rÙ   r‘   rš   r5  r2  rQ  r7  r½   rW  rX  rY  rZ  rÏ   r„  rË   r�  r�  r‘  r¦   r8   r6   r)  r)  ª  s_   „ ØEGô 	'ò-ò^òPò
òó5,òn.ò4#ò #ò#ò.ò`	ò òDòór8   r)  c                   ób   — 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y)ÚStateHeaderz@Converter for the obsolete, non-extended AAT state-table format.c                 óü  — t        «       }|j                  }|j                  «       |_        |j                  «       }|j                  «       }|j                  «       }|j                  dk(  rt	        d«      ‚d }	d x}
x}}d }t        | j                  t        «      r|j                  «       }	�n9t        | j                  t        «      rÐ|j                  «       }
|j                  «       }|j                  «       }||kD  s||z
  dz  rt	        d«      ‚|j                  d«      }|j                  ||z   «       |j                  ||z
  dz  «      }t        d„ |D «       «      rt	        d«      ‚|D �cg c]  }|dz  ‘Œ	 c}|_        g |_        t        «       |_        nOt        | j                  t"        «      r5|j                  «       }
|j                  d«      }|j                  ||
z   «       |j                  d«      }|j                  ||z   «       |j                  «       }|j                  «       }|j%                  |«      }t'        |«      D ��ci c]  \  }}|j)                  ||z   «      |“Œ c}}|_        |j                  d«      }|j                  ||z   «       |j                  d«      }|j                  ||z   «       ||z
  }|dk  rt	        d«      ‚||j                  z  }i }t-        |«      D ]‘  }t/        «       }|j0                  j3                  |«       t-        |j                  «      D ]R  }|j5                  «       }|j7                  |«      }|€| j9                  |||||||||«	      }|||<   ||j:                  |<   ŒT Œ“ |	�| j=                  |||||	«       |S |�Ñ|dz  } |j                   D �!ch c]  }!|j                  |!   | k\  r|!’Œ c}!|_        |j                   D ]  }!|j                  |!xx   | z  cc<   Œ | j?                  |tA        |jC                  «       «      «      }"|j                  d«      }#|#j                  ||z   «       |jE                  |#j                  |"«      «      |_        |S c c}w c c}}w c c}!w )Nr   z%mort state table has no glyph classesr!  z%invalid mort ligature component tablec              3   ó&   K  — | ]	  }|d z  –— Œ y­w)r!  Nr¦   )r§   ru  s     r6   r¨   z#StateHeader.read.<locals>.<genexpr>  s   è ø€ Ò@ Y�9˜q•=Ñ@ùs   ‚z%invalid mort ligature component valuez/mort state-array offset follows its entry table)#r   r�   r.  r0  r  r|  rd   r"   r$   r&  r™   r1  Úanyr1  r3  Úsetr�  r%   rG  r¼   ru  r+  r¬   r    r4  rj   rE  re   r5  r6  Ú_readContextualLookupsÚ_countLegacyLigaturesrñ  r¢  rr  )$r�   r£   rœ   r®   r“   r�   ÚclassTableOffsetrc  rd  ÚsubstitutionTableOffsetrg  ÚcomponentOffsetÚligatureOffsetr<  ÚcomponentReaderÚrawComponentsru  r9  r´  Ú
glyphCountr–  r›   rD  r:  r;  ÚstateDataLengthrA  ÚtransitionCacheÚ_stateIndexrC  rE  rG  ÚligatureBaserˆ  ÚligatureCountÚligatureReaders$                                       r6   rš   zStateHeader.readô  s�  € Ü“ˆØ�j‰jˆØ &× 1Ñ 1Ó 3ˆÔØ!×,Ñ,Ó.ÐØ!×,Ñ,Ó.ÐØ!×,Ñ,Ó.ÐØ× Ñ  AÒ%ÜÐDÓEÐEà"&ÐØ:>Ð>ˆÐ>�¨ØˆÜ�d—o‘oÔ'<Ô=Ø&,×&7Ñ&7Ó&9Ò#Ü˜Ÿ™Ô)<Ô=Ø!×,Ñ,Ó.ˆLØ$×/Ñ/Ó1ˆOØ#×.Ñ.Ó0ˆNà .Ò0Ø" _Ñ4¸Ò9ä Ð!HÓIÐIØ$×1Ñ1°!Ó4ˆOØ× Ñ   Ñ!6Ô7Ø+×;Ñ;Ø /Ñ1°aÑ7óˆMô Ñ@°-Ô@Ô@Ü Ð!HÓIÐIØCPÖ"Q°i 9°£>Ò"QˆEÔØ ˆEŒOÜ(+«ˆEÕ%Ü˜Ÿ™Ô)=Ô>Ø!×,Ñ,Ó.ˆLØ!×.Ñ.¨qÓ1ˆLØ×Ñ˜c LÑ0Ô1à!×.Ñ.¨qÓ1ÐØ×Ñ˜cÐ$4Ñ4Ô5Ø%×0Ñ0Ó2ˆ
Ø%×0Ñ0Ó2ˆ
Ø'×6Ñ6°zÓBˆô "+¨<Ó!8÷
á��:ð ×Ñ˜j¨1™nÓ-¨zÑ9ó
ˆÔð
 "×.Ñ.¨qÓ1ÐØ×Ñ˜cÐ$4Ñ4Ô5Ø!×.Ñ.¨qÓ1ÐØ×Ñ˜cÐ$4Ñ4Ô5Ø*Ð-=Ñ=ˆØ˜QÒÜÐNÓOÐOØ# u×'<Ñ'<Ñ<ˆ	ØˆÜ  Ó+ò 	;ˆKÜ“JˆEØ�L‰L×Ñ Ô&Ü# E×$9Ñ$9Ó:ò ;�
Ø-×7Ñ7Ó9�
Ø,×0Ñ0°Ó<�
ØÐ%Ø!%×!5Ñ!5Ø(Ø"ØØ$ØØ(Ø'Ø&Øó
"�Jð 3=�O JÑ/Ø0:�×!Ñ! *Ò-ñ!;ð	;ð* #Ð.Ø×'Ñ'Ø�v˜t SÐ*Aôð* ˆð% Ð'Ø)¨QÑ.ˆLð ',×&?Ñ&?ö)à"Ø×&Ñ& ~Ñ6¸,ÒFò ò)ˆEÔ%ð
 #(×";Ñ";ò D�ð ×#Ñ# NÓ3°|ÑCÔ3ðDð
 !×6Ñ6°u¼cÀ$×BTÑBTÓBVÓ>WÓXˆMØ#×0Ñ0°Ó3ˆNØ×Ñ  nÑ 4Ô5Ø"×3Ñ3Ø×.Ñ.¨}Ó=óˆEŒOð ˆùòM #Rùó
ùòR)s   Å+Q.É	Q3Î.Q9c
           	      óÄ  — | j                  «       }
t        | j                   t        «      rdn|
j                  }|j	                  |j
                  ||z  z   «      }t        | j                   t        «      r€|j                  «       |
_        |j                  «       }t        |dz  «      |
_
        t        |dz  «      |
_        |dz  |
_        |j                  «       |
_        |j                  «       |
_        nªt        | j                   t        «      r}|j                  «       |
_        |j                  «       }t        |dz  «      |
_        t        |dz  «      |
_        d|
_        g |
_        |dz  }|r0| j%                  |||||||	«      |
_        n|
j'                  |||«       |
j                  |z
  }|dk  s||	j(                  z  rt+        d«      ‚||	j(                  z  |
_        |
S )Nrö   é €  é @  éÿ?  r   zinvalid mort new-state offset)rd   r|  r$   r³   r&  r�   r"   r.  ÚNewStateÚboolÚSetMarkÚDontAdvanceÚReservedFlagsr#  Ú_MortMarkOffsetÚ_MortCurrentOffsetÚSetComponentÚActionsÚ_readLigatureActionsrö  r0  r  )r�   r£   rE  rœ   r<  ÚstateTablePosrc  r§  r¨  r“   rG  Ú	entrySizerH  r™  ÚligActionOffsetÚnewStateOffsets                   r6   r5  zStateHeader._readTransition[  sÅ  € ð —_‘_Ó&ˆ
ô ˜$Ÿ/™/Ô+>Ô?ñ à×&Ñ&ð 	ð
 ×)Ñ)¨&¯*©*°zÀIÑ7MÑ*MÓNˆä�d—o‘oÔ'<Ô=Ø"-×"8Ñ"8Ó":ˆJÔØ×*Ñ*Ó,ˆEÜ!% e¨f¡nÓ!5ˆJÔÜ%)¨%°&©.Ó%9ˆJÔ"Ø',¨v¡~ˆJÔ$Ø)4×)>Ñ)>Ó)@ˆJÔ&Ø,7×,AÑ,AÓ,CˆJÕ)Ü˜Ÿ™Ô)<Ô=Ø"-×"8Ñ"8Ó":ˆJÔØ×*Ñ*Ó,ˆEÜ&*¨5°6©>Ó&:ˆJÔ#Ü%)¨%°&©.Ó%9ˆJÔ"Ø'(ˆJÔ$Ø!#ˆJÔØ# f™nˆOÙØ%)×%>Ñ%>ØØØ!Ø#Ø#Ø"Øó&�
Õ"ð × Ñ  ¨d°LÔAà#×,Ñ,Ð/?Ñ?ˆØ˜AÒ °%×2GÑ2GÒ!GÜÐ<Ó=Ð=Ø,°×0EÑ0EÑEˆ
ÔØÐr8   c           	      óø  — |j                   D ��ch c]#  }|j                  j                  «       D ]  }|’Œ Œ% }}}t        |D ��	ch c]#  }|j                  |j
                  fD ]  }	|	r|	’Œ Œ% c}	}«      }
t        |
«      D ��	ci c]  \  }}	|	|“Œ
 }}}	|j                  «       }t        |j                  «      |z
  }|
D ]Ô  }	t        d|dz   dz  |	z
  «      }t        t        |«      dz
  |dz
  dz  |	z
  «      }i }||k  rz|j                  d«      }|j                  |d|	|z   z  z   «       |j                  ||z
  dz   «      }t        |«      D ��ci c]"  \  }}|dk7  r|||z      |j                  |«      “Œ$ }}}|j                   j#                  |«       ŒÖ |D ]J  }|j                  r||j                     nd|_        |j
                  r||j
                     nd|_        |`|`ŒL y c c}}w c c}	}w c c}	}w c c}}w )Nr   r   r!  r‹  )r4  r6  rf   r‡  r»  r¼  r¼   r¢  rñ  rí  rN  Úminr&  r™   r1  ru  r8  rj   rM  rO  )r�   r“   r£   rœ   rÀ  r¦  rC  rG  Útransitionsr'  rá  r›   ÚoffsetToIndexÚ
glyphOrderÚ	availabler´  rµ  rà  rß  ÚreplacementsÚreplacements                        r6   r£  z"StateHeader._readContextualLookups’  se  € ð
 Ÿ™÷
àØ#×/Ñ/×6Ñ6Ó8ò
ð ò ð
Øð
ˆñ 
ô
 ð #.÷àà×.Ñ.Ø×1Ñ1ðòð ñ ò ðØóó

ˆô 5>¸gÓ4F×G¡y q¨&˜ ™ÐGˆÑGØ×'Ñ'Ó)ˆ
ô ˜Ÿ™Ó$ }Ñ4ˆ	Øò 	1ˆFô ˜QÐ!8¸1Ñ!<ÀÑ BÀVÑ KÓLˆJÜœC 
›O¨aÑ/°)¸a±-ÀAÑ1EÈÑ1NÓOˆIØˆFØ˜YÒ&Ø%×2Ñ2°1Ó5�Ø×!Ñ! -°!°vÀ
Ñ7JÑ2KÑ"KÔLØ+×;Ñ;¸IÈ
Ñ<RÐUVÑ<VÓW�ô +4°LÓ*A÷á&˜˜;Ø" aÒ'ð ˜z¨A™~Ñ.°×0AÑ0AÀ+Ó0NÑNð�ñ ð
 ×!Ñ!×(Ñ(¨Õ0ð'	1ð( &ò 	.ˆJð ×-Ò-ð ˜j×8Ñ8Ò9àð Ô ð ×0Ò0ð ˜j×;Ñ;Ò<àð Ô#ð
 Ð*ØÑ-ñ	.ùóS
ùóùó Hùó&s   �(G$Á(G*
ÂG0Å'G6c                 ó|  — |j                  d«      }|j                  ||z   «       t        |j                  «       «      }	g }
d}d}|sõ|j	                  «       }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|rW|sUt        d|«      }t        t        |j                  «      ||	z   «      }|j                  j                  t        ||«      «       d	}t        «       }||_        ||_        |
j!                  |«       |sŒõ|
S )
Nr   Fì        é   @éÿÿÿ?é    r!  z/mort ligature component offset is out of boundsT)r&  r™   rñ  r¢  r  r·  r1  r  rN  rÅ  r�  Úupdater¬   r#   ÚStoreÚGlyphIndexDeltarj   )r�   r£   rœ   rÀ  rÂ  r§  r¨  r“   r<  r«  râ  ÚrebasedrË  rÁ   ÚstoreÚcomponentWordOffsetrˆ  ÚstartrJ  Úactions                       r6   r¿  z StateHeader._readLigatureActionsÌ  sN  € ð ×*Ñ*¨1Ó-ˆØ×Ñ˜-¨/Ñ9Ô:Ü˜×+Ñ+Ó-Ó.ˆ
ØˆØˆØˆÙØ ×*Ñ*Ó,ˆEÜ˜ 
Ñ*Ó+ˆDÜ˜ Ñ+Ó,ˆEØ"'¨*Ñ"4ÐØ" ZÒ/Ø# zÑ1Ð#Ø0°?ÀaÑ3GÑGˆNà¤# e×&9Ñ&9Ó":Ò:Ø! JÑ.°!Ò3ä Ð!RÓSÐSÙ™¡wÜ˜A˜~Ó.�ÜœC × 3Ñ 3Ó4°nÀzÑ6QÓR�Ø×)Ñ)×0Ñ0´°u¸eÓ1DÔEØ�ä“[ˆFØ ˆFŒLØ%3ˆFÔ"Ø�M‰M˜&Ô!ò- ð. ˆr8   c                 ó  — d}| j                   D ��ch c]#  }|j                  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(  sŒ�t        ||dz   «      }Œ� Œ¹ |S c c}}w )Nr   r�  r   )r4  r6  rf   r¼   r¾  rN  rÓ  rÅ  rñ  r1  rÒ  )r“   r«  r¯   rC  rG  rÆ  ÚcumulativeMaxr}  rØ  r×  rJ  s              r6   r¤  z!StateHeader._countLegacyLigaturesõ  s  € àˆð Ÿ™÷
àØ#×/Ñ/×6Ñ6Ó8ò
ð ò ð
Øð
ˆñ 
ð
 &ò 
	:ˆJØˆMÜ!*¨:×+=Ñ+=Ó!>ò :‘��vÜ˜A˜v×5Ñ5Ó6�ÜÜ˜×+Ñ+Ó,Ø×*Ñ*¨ZÑ7ó�ð ¤ U×%8Ñ%8¸¸uÐ%EÈqÔ!QÑQ�Ø—<’< 5¬C°
×0BÑ0BÓ,CÀaÑ,GÓ#GÜ  }°qÑ'8Ó9‘Eñ:ð
	:ð ˆùó!
s   ’(C;Nc           	      óæ  ‡ ‡‡ ‡!‡"‡#‡$‡%— |j                   Š#d‰#cxk  rdk  st        d«      ‚ t        d«      ‚t        ˆfd„|j                  j	                  «       D «       «      }|r=|d   d   }|d   d   }t        |«      Š t        ˆ fd„t        ||dz   «      D «       «      }	nd}d}	t        j                  d	|t        |	«      «      |	z   }
‰ j                  j                  ‰|j                  «      \  }Š"g }i }g }|j                  D ]¶  }g }t        ‰#«      D ]“  }|j                  |   }t        «       }|j!                  |‰‰"«       |j#                  «       }|j%                  |«      }|€1t        |«      }|d
kD  rt        d«      ‚|||<   |j'                  |«       |j'                  |«       Œ• |j'                  |«       Œ¸ d}t)        ‰ j                  t*        «      rd}n9t)        ‰ j                  t,        «      rd}nt)        ‰ j                  t.        «      rd}d|z   }‰ j1                  |t        |
«      z   d«      Š%t        d„ |D «       «      }‰ j1                  ‰%t        |«      z   d«      }t)        ‰ j                  t,        «      rdn‰ j                  j2                  }|t        |«      |z  z   }d}d}d Š!d Š$t)        ‰ j                  t*        «      r‰ j5                  |‰|«      \  }}Š!nut)        ‰ j                  t,        «      r‰ j7                  |‰||«      \  }}Š$nBt)        ‰ j                  t.        «      r(|dkD  rt        d«      ‚t        j                  d|«      }|}dj9                  ˆ!ˆˆ"ˆ#ˆ$ˆ ˆ%fd„|D «       «      }t        j                  d‰#|‰%|«      }|||
z   z  }t;        |d«      |z   }t;        |d«      |z   |z   }t;        |d«      }t        |«      dkD  rt        d«      ‚|j=                  |«       y )Nr   é   z0mort state tables support 1 to 256 glyph classesc              3   óJ   •K  — | ]  \  }}‰j                  |«      |f–— Œ y ­wr2   )r{  )r§   r�  rD  rœ   s      €r6   r¨   z$StateHeader.write.<locals>.<genexpr>  s+   øè ø€ ò 
á!��zð �_‰_˜UÓ# ZÔ0ñ
ùs   ƒ #re  c              3   óB   •K  — | ]  }‰j                  |d «      –— Œ y­w)r   N)re   )r§   r°  ÚclassValuess     €r6   r¨   z$StateHeader.write.<locals>.<genexpr>  s$   øè ø€ ò àð —‘ ¨×+ñùs   ƒr   r8   ú>HHéÿ   z-mort state tables support at most 256 entriesr!  r  r–   c              3   ó.   K  — | ]  }|D ]  }|–— Œ Œ y ­wr2   r¦   )r§   ÚrowÚentrys      r6   r¨   z$StateHeader.write.<locals>.<genexpr>B  s   è ø€ ÒJ CÀcÒJ¸Uœ%ÐJ˜%ÑJùs   ‚rö   r‹  z,mort insertion-action offset exceeds 16 bitsr  c           
   3   óL   •K  — | ]  }‰j                  |‰‰‰‰‰‰«      –— Œ y ­wr2   )Ú_compileTransition)	r§   rG  ÚcontextOffsetsrœ   ÚgenericActionIndexr]  ÚligatureActionOffsetsr�   rc  s	     €€€€€€€r6   r¨   z$StateHeader.write.<locals>.<genexpr>]  s;   øè ø€ ò 
ð ð ×#Ñ#ØØØ"Ø ØØØ%÷ñ
ùs   ƒ!$z>HHHHz$mort state table exceeds 65535 bytes)r0  r  r‡  r+  r  ÚdictÚbytesr¬   r  r  rñ  rd   rV  r4  r6  r   rc   r  re   rj   r|  r"   r$   r%   Ú_alignedr³   Ú_compileContextualLookupsÚ_compileLigatureDatar—  r   rò  )&r�   rÀ   rœ   r®   rÁ   rÆ   r–  r´  rµ  ÚclassesÚ	classDataÚgenericActionDataro  rp  ÚstateEntryIDsrC  rã  rD  rG  ÚtransitionWriterrå  rE  Ú	extraSizer¥  Ú	stateDatard  rÁ  Ú
tailOffsetÚextraÚtailrr  rí  rß  rç  rè  r]  ré  rc  s&   ` `                             @@@@@@r6   r½   zStateHeader.write
  sü  ÿ€ Ø×/Ñ/ˆØ�?Ô) cÒ)ÜÐOÓPÐPð *ÜÐOÓPÐPäó 
à%*×%7Ñ%7×%=Ñ%=Ó%?ô
ó 
ˆñ Ø% a™¨Ñ+ˆJØ$ RÑ(¨Ñ+ˆIÜ˜|Ó,ˆKÜó ä$ Z°¸Q±Ó?ôó ‰Gð
 ˆJØˆGÜ—K‘K  z´3°w³<Ó@À7ÑJˆ	à04·±×0NÑ0NØ�%—,‘,ó1
Ñ-ÐÐ-ð ˆØˆØˆØ—\‘\ò 	&ˆEØˆCÜ# OÓ4ò '�
Ø"×.Ñ.¨zÑ:�
Ü#0£?Ð Ø×"Ñ"Ð#3°TÐ;MÔNØ&×1Ñ1Ó3�Ø%Ÿ\™\¨#Ó.�
ØÐ%Ü!$ W£�JØ! DÒ(Ü(ØKóð ð %/�H˜S‘MØ—N‘N :Ô.Ø—
‘
˜:Õ&ð'ð × Ñ  Õ%ð#	&ð& ˆ	Ü�d—o‘oÔ'<Ô=Ø‰IÜ˜Ÿ™Ô)<Ô=Ø‰IÜ˜Ÿ™Ô)=Ô>ØˆIØ˜y™=ÐØŸ=™=Ð)9¼CÀ	»NÑ)JÈAÓNÐÜÑJ¨=ÔJÓJˆ	ØŸ=™=Ð)9¼CÀ	»NÑ)JÈAÓNÐô ˜$Ÿ/™/Ô+>Ô?ñ à—‘×+Ñ+ð 	ð
 &¬¨G«°yÑ(@Ñ@ˆ
àˆØˆØˆØ $ÐÜ�d—o‘oÔ'<Ô=Ø*.×*HÑ*HØ�t˜Zó+Ñ'ˆE�4™ô ˜Ÿ™Ô)<Ô=Ø15×1JÑ1JØ�t˜W jó2Ñ.ˆE�4Ñ.ô ˜Ÿ™Ô)=Ô>Ø˜FÒ"Ü Ð!OÓPÐPÜ—K‘K  jÓ1ˆEØ$ˆDà—H‘H÷ 
ñ 
ð &ô
ó 
ˆ	ô �{‰{ØØØØØó
ˆð 	�˜	Ñ!Ñ!ˆÜ�4˜‹|˜iÑ'ˆÜ�4˜‹|˜iÑ'¨$Ñ.ˆÜ�4˜‹|ˆÜˆt‹9�vÒÜÐCÓDÐDØ×Ñ˜Õr8   c                 ó   — | |  |z  z   S r2   r¦   )rÁ   Ú	alignments     r6   rì  zStateHeader._alignedx  s   € à˜˜ Ñ*Ñ+Ð+r8   c                 ó`  — | j                  |«      }t        |j                  «      |k7  r#t        d|t        |j                  «      fz  «      ‚|j	                  «       }g }d}|j                  D ]—  }|t        |«      z   dz  }	|	dkD  rt        d«      ‚|j                  |	«       g }
|D ]7  }|j                  |«      }|
j                  |€dn|j                  |«      «       Œ9 |t        j                  dt        |
«      z  g|
¢­Ž z  }Œ™ |dkD  rt        d	«      ‚t        j                  d
|«      ||fS )NzAmort contextual actions refer to %d lookups, but the table has %dr8   r!  éÿ  z/mort substitution offset exceeds signed 16 bitsr   z>%dHr‹  z.mort substitution-table offset exceeds 16 bitsr  )
rQ  rñ  r8  r  r¢  rj   re   r{  r  r  )r�   r“   rœ   rö  r¯   rÈ  rá  rí  rà  r'  rÊ  r�  rË  s                r6   rí  z%StateHeader._compileContextualLookups|  sE  € Ø×*Ñ*¨5Ó1ˆÜˆu×$Ñ$Ó%¨Ò.ÜØSØœ#˜e×3Ñ3Ó4Ð5ñ6óð ð ×'Ñ'Ó)ˆ
ØˆØˆØ×+Ñ+ò 	KˆFØ ¤3 t£9Ñ,°Ñ2ˆFØ˜ŠÜ Ð!RÓSÐSØ�N‰N˜6Ô"ØˆLØ#ò �Ø$Ÿj™j¨Ó/�Ø×#Ñ#Ø$Ð,‘A°$·/±/À+Ó2Nõðð
 ”F—K‘K ¬¨\Ó):Ñ :ÐJ¸\ÒJÑJ‰Dð	Kð ˜ÒÜÐMÓNÐNÜ�{‰{˜4 Ó,¨d°GÐ;Ð;r8   c                 ó²  ‡— g }t        «       }|D ]H  }t        d„ |j                  D «       «      }|sŒ"||vsŒ'|j                  |«       |j	                  |«       ŒJ | j                  |d«      }	t        d„ |D «       «      }
|	|
dz  z   }t        ‰j                  «       «      }|t        |j                  «      dz  z   }t        |	||«      dkD  rt        d«      ‚i }d}t        |dd «      }|€t        «       }nt        |«      }|D �]  }|	t        |«      z   }|d	kD  rt        d
«      ‚|||<   d}t        |«      D ]Þ  \  }\  }}|dz  |z   }d|cxk  rdk  st        d«      ‚ t        d«      ‚|dz  }|t        |«      dz
  k(  }||rdndz  }||rdndz  }|t        j                  d|«      z  }|xs |xr | }|rUt!        |d«      sIt        d|«      }t#        t        |j                  «      ||z   «      }|j%                  t'        ||«      «       ||xs |z  }Œà �Œ d}t        |j                  «      D ]N  \  }}|dz  }||v r||z  }d|cxk  rdk  st        d«      ‚ t        d«      ‚|t        j                  d|«      z  }ŒP dj)                  ˆfd„|j*                  D «       «      }t        j                  d|	||«      }t-        |	|z
  «      |z   |z   |z   } || |fS )Nc              3   óL   K  — | ]  }|j                   |j                  f–— Œ y ­wr2   ©rÓ  rÒ  ©r§   rØ  s     r6   r¨   z3StateHeader._compileLigatureData.<locals>.<genexpr>š  ó$   è ø€ ò Ø;A�×'Ñ'¨¯©Ô6ñùó   ‚"$rö   c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr2   )rñ  )r§   Úsequences     r6   r¨   z3StateHeader._compileLigatureData.<locals>.<genexpr>¢  s   è ø€ ÒB¨Hœ#˜hŸ-ÑBùó   ‚r!  r‹  z*mort ligature-table offset exceeds 16 bitsr8   r�  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 ‰j                  |«      «      –— Œ+ y­w)r  N)r  r  r{  )r§   r�  rœ   s     €r6   r¨   z3StateHeader._compileLigatureData.<locals>.<genexpr>Ï  s*   øè ø€ ò  
Ø:?ŒF�K‰K˜˜dŸo™o¨eÓ4×5ñ 
ùs   ƒ/2z>HHH)r¢  r4   r¾  Úaddrj   rì  Úsumrñ  r¢  r1  rN  r  rª  r¼   r  r  r´   rÅ  rÑ  r¬   r—  r3  rë  )!r�   r“   rœ   ro  rö  Ú	sequencesÚsequenceSetrG  r  rg  ÚactionCountr§  r«  r¨  ÚactionOffsetsr_  ÚrebaseComponentsÚsequenceOffsetrÔ  r}  ÚdeltarÕ  rÁ   rË  ÚaddBaser×  rJ  ÚcomponentDatarˆ  ru  ÚligatureDatar÷  rø  s!     `                              r6   rî  z StateHeader._compileLigatureData–  sB  ø€ Øˆ	Ü“eˆØ!ò 	+ˆJÜñ ØEO×EWÑEWôó ˆHò ˜H¨KÒ7Ø—‘ Ô)Ø× Ñ  Õ*ð	+ð —}‘} Z°Ó3ˆÜÑB¸	ÔBÓBˆØ&¨°q©Ñ8ˆÜ˜×+Ñ+Ó-Ó.ˆ
Ø(¬3¨u×/BÑ/BÓ+CÀaÑ+GÑGˆÜˆ|˜_¨nÓ=ÀÒFÜÐIÓJÐJàˆØˆ
Ü" 5Ð*?ÀÓFÐØÐ#Ü"›uÑä"Ð#3Ó4ÐØ!ó 	)ˆHØ)¬C°
«OÑ;ˆNØ Ò&Ü Ð!NÓOÐOØ&4ˆM˜(Ñ#ØˆGÜ)2°8Ó)<ò )Ñ%�‘~˜˜uØ'¨1Ñ,¨uÑ4�Ø! UÔ6¨gÒ6Ü$Ð%UÓVÐVð 7Ü$Ð%UÓVÐVØ˜Ñ#�Ø¤ H£°Ñ 1Ñ1�Ø¡u™°!Ñ3�Ø¡t™°Ñ2�ØœfŸk™k¨$°Ó6Ñ6�
Ø š= DÒ9°'¨k�Ù¤7¨5Ð2GÔ#HÜ  5›M�EÜ¤ E×$7Ñ$7Ó 8¸%À*Ñ:LÓM�EØ$×+Ñ+¬E°%¸Ó,?Ô@Ø˜5š= DÑ(‘ò)ð	)ð, ˆÜ)2°5×3FÑ3FÓ)Gò 	:Ñ%ˆN˜IØ˜‰NˆIØÐ!1Ñ1Ø˜^Ñ+�	Ø˜	Ô+ VÒ+Ü Ð!PÓQÐQð ,Ü Ð!PÓQÐQØœVŸ[™[¨¨yÓ9Ñ9‰Mð	:ð —x‘xó  
ØCHÇ?Á?ô 
ó 
ˆô —‘˜F L°/À>ÓRˆä�, Ñ+Ó,¨zÑ9¸MÑIÈLÑXð 	ð �d˜MÐ)Ð)r8   c                 ó~  — ||j                   |z  z   }d|cxk  rdk  st        d«      ‚ t        d«      ‚t        | j                  t        «      r‹|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 «       «      }|	|j!                  |d«      z  }	t        j                  d	||	«      S t#        «       }|j%                  |||«       |j'                  «       }t        j                  d
|«      |dd  z   S )Nr   r‹  z%mort new-state offset exceeds 16 bitsr³  r´  z>HHhhz2mort ligature entries cannot encode reserved flagsc              3   óL   K  — | ]  }|j                   |j                  f–— Œ y ­wr2   rÿ  r   s     r6   r¨   z1StateHeader._compileTransition.<locals>.<genexpr>û  r  r  rà  r  r!  )r¶  r  r|  rd   r"   rº  r¸  r¹  rM  rO  r  r  r$   r½  r4   r¾  re   r   rc   r  )r�   rG  rœ   r`  rc  r]  rç  ré  ÚnewStater™  Ú
markOffsetÚcurrentOffsetr  ró  rí  s                  r6   ræ  zStateHeader._compileTransitionØ  sÄ  € ð $ j×&9Ñ&9¸OÑ&KÑKˆØ�HÔ& Ò&ÜÐDÓEÐEð 'ÜÐDÓEÐEä�d—o‘oÔ'<Ô=Ø×,Ñ,ˆEØ˜z×1Ò1‘V°qÑ8ˆEØ˜z×5Ò5‘V¸1Ñ<ˆEð ×'Ñ'¨6Ò1ñ à# J×$8Ñ$8Ñ9ð ð ×*Ñ*¨fÒ4ñ à# J×$;Ñ$;Ñ<ð ô
 —;‘;˜w¨°%¸À]ÓSÐSä�d—o‘oÔ':Ô;Ø×'Ò'Ü Ð!UÓVÐVØ(×5Ò5‘F¸1ˆEØ˜z×5Ò5‘V¸1Ñ<ˆEÜñ ØEO×EWÑEWôó ˆHð Ð*×.Ñ.¨x¸Ó;Ñ;ˆEÜ—;‘;˜u h°Ó6Ð6ä(›?ÐØ×ÑÐ+¨T°;Ô?Ø×*Ñ*Ó,ˆÜ�{‰{˜4 Ó*¨T°!°"¨XÑ5Ð5r8   r2   )rh   rØ   rÙ   rÚ   rš   r5  r£  r¿  ré   r¤  r½   rì  rí  rî  ræ  r¦   r8   r6   rž  rž  ñ  s^   „ ÙJòeòN5òn8.òt'ðR ñó ðó(lð\ ñ,ó ð,ò<ò4@*óD,6r8   rž  c                   ó<   — e Zd ZdZddœd„Zd„ Zd„ Zdd„Zd	„ Zd
„ Z	y)ÚMorphStateTablezFDispatch to classic or extended AAT state-table encoding by table tag.rv   rM   c                óŽ   — t         j                  | |||||¬«       t        |||||¬«      | _        t	        |||||¬«      | _        y r  )ru   r‘   rž  Úlegacyr)  Úextendedr�   s         r6   r‘   zMorphStateTable.__init__
	  sT   € Ü×ÑØ�$˜  Z¸[ð 	ô 	
ô "Ø�&˜#˜z°{ô
ˆŒô "Ø�&˜#˜z°{ô
ˆ�r8   c                 ó<   — |dk(  r| j                   S | j                  S )Nró  )r  r  )r�   rõ  s     r6   Ú
_converterzMorphStateTable._converter	  s   € Ø&¨&Ò0ˆt�{‰{ÐC°d·m±mÐCr8   c                 óZ   — | j                  |j                  «      j                  |||«      S r2   )r  rõ  rš   r¹   s       r6   rš   zMorphStateTable.read	  s$   € Ø�‰˜vŸ™Ó/×4Ñ4°V¸TÀ9ÓMÐMr8   Nc                 ó^   — | j                  |j                  «      j                  |||||«      S r2   )r  rõ  r½   rÅ   s         r6   r½   zMorphStateTable.write	  s-   € Ø�‰˜vŸ™Ó/×5Ñ5Ø�D˜) U¨Kó
ð 	
r8   c                 ó<   — | j                   j                  |||«      S r2   )r  rË   rÈ   s       r6   rË   zMorphStateTable.xmlRead 	  s   € Ø�}‰}×$Ñ$ U¨G°TÓ:Ð:r8   c                 ó@   — | j                   j                  |||||«      S r2   )r  rÏ   rÍ   s         r6   rÏ   zMorphStateTable.xmlWrite#	  s   € Ø�}‰}×%Ñ% i°°u¸dÀEÓJÐJr8   r2   )
rh   rØ   rÙ   rÚ   r‘   r  rš   r½   rË   rÏ   r¦   r8   r6   r  r  	  s)   „ ÙPàEGô 	
òDòNó
ò
;óKr8   r  c                   ó&   — e Zd Zd„ Zdd„Zd„ Zd„ Zy)ÚCIDGlyphMapc                 ó¢   — |j                  «       }i }t        |j                  |«      «      D ]  \  }}|dk7  sŒ|j                  |«      ||<   Œ! |S )Nr‹  )r.  r¼   r1  ru  )r�   r£   rœ   r®   ÚnumCIDsrâ  Úcidr°  s           r6   rš   zCIDGlyphMap.read(	  s[   € Ø×#Ñ#Ó%ˆØˆÜ% f×&<Ñ&<¸WÓ&EÓFò 	9‰LˆC�Ø˜&Ó Ø"×/Ñ/°Ó8��s’ð	9ð ˆr8   Nc                 ó  — |j                  «       D ��ci c]  \  }}||j                  |«      “Œ }}}|rt        |«      dz   nd}	|j                  |	«       t	        |	«      D ]#  }|j                  |j                  |d«      «       Œ% y c c}}w )Nr   r   r‹  ©r  r{  rN  r4  r¬   re   )
r�   rÀ   rœ   r®   rÁ   rÆ   r'  r�  r  r¯   s
             r6   r½   zCIDGlyphMap.write0	  s~   € Ø?D¿{¹{»}×M±°°e��d—o‘o eÓ,Ñ,ÐMˆÑMÙ"'”�E“
˜Q’¨QˆØ×Ñ˜5Ô!Ü˜“<ò 	7ˆCØ×Ñ˜uŸy™y¨¨fÓ5Õ6ñ	7ùó Ns   ”Bc                 óŒ   — i }t        t        |«      D ].  \  }}}|dk(  sŒ|d   j                  «       |t        |d   «      <   Œ0 |S )NÚCIDr�  r'  )rˆ  rÿ  Ústripr   ©r�   rÉ   rÊ   rœ   râ  ÚeNameÚeAttrsÚ	_eContents           r6   rË   zCIDGlyphMap.xmlRead7	  sT   € ØˆÜ(.¬w¸Ó(@ò 	JÑ$ˆE�6˜9Ø˜‹~Ø28¸±/×2GÑ2GÓ2I�”x  u¡Ó.Ò/ð	Jð ˆr8   c                 ó&  — |j                  ||«       |j                  «        t        |j                  «       «      D ]2  \  }}|€Œ	|dk7  sŒ|j	                  d||¬«       |j                  «        Œ4 |j                  |«       |j                  «        y )Nr‹  r+  )r'  r�  ©rÖ  rç   r‡  r  ræ   r×  )r�   rÎ   rœ   rÁ   rT   rÉ   r'  r�  s           r6   rÏ   zCIDGlyphMap.xmlWrite>	  s…   € Ø×Ñ˜4 Ô'Ø×ÑÔÜ  §¡£Ó/ò 	$‰JˆC�ØÑ  U¨f£_Ø×#Ñ# E¨s¸%Ð#Ô@Ø×!Ñ!Õ#ð	$ð 	×Ñ˜ÔØ×ÑÕr8   r2   rï  r¦   r8   r6   r$  r$  '	  s   „ òó7òór8   r$  c                   ó&   — e Zd Zd„ Zdd„Zd„ Zd„ Zy)ÚGlyphCIDMapc                 óL  — |j                  «       }|j                  «       }|j                  |«      }|t        |«      kD  r#t        j                  d|t        |«      fz  «       i }t        t        t        |«      t        |«      «      «      D ]  }||   }	|	dk7  sŒ|	|||   <   Œ |S )NzOGlyphCIDMap has %d elements, but the font has only %d glyphs; ignoring the restr‹  )r¢  r.  r1  rñ  rŽ  r�  r¬   rÅ  )
r�   r£   rœ   r®   rÈ  r¯   Úcidsrâ  r°  r'  s
             r6   rš   zGlyphCIDMap.readJ	  s¬   € Ø×'Ñ'Ó)ˆ
Ø×!Ñ!Ó#ˆØ×%Ñ% eÓ,ˆØ”3�z“?Ò"Ü�K‰Kð$à',¬c°*«oÐ&>ñ?ôð
 ˆÜœS¤ T£¬C°
«OÓ<Ó=ò 	2ˆGØ�w‘-ˆCØ�f‹}Ø.1��z 'Ñ*Ò+ð	2ð ˆr8   Nc                 ó*  — |j                  «       D ��ci c]  \  }}|�|dk7  r|j                  |«      |“Œ  }}}|rt        |«      dz   nd}	|j                  |	«       t	        |	«      D ]#  }
|j                  |j                  |
d«      «       Œ% y c c}}w )Nr‹  r   r   r)  )r�   rÀ   rœ   r®   rÁ   rÆ   r…  r'  r  r¯   r°  s              r6   r½   zGlyphCIDMap.write[	  s–   € ð  Ÿ+™+›-÷
á��3Øˆ 3¨&¢=ð �O‰O˜AÓ Ñ#ð
ˆñ 
ñ
 #(”�E“
˜Q’¨QˆØ×Ñ˜5Ô!Ü˜U“|ò 	;ˆGØ×Ñ˜uŸy™y¨°&Ó9Õ:ñ	;ùó
s   ”#Bc                 óp   — i }t        t        |«      D ]   \  }}}|dk(  sŒt        |d   «      ||d   <   Œ" |S )Nr+  rÁ   r�  )rˆ  rÿ  r   r-  s           r6   rË   zGlyphCIDMap.xmlReadf	  sK   € ØˆÜ(.¬w¸Ó(@ò 	DÑ$ˆE�6˜9Ø˜‹~Ü*2°6¸'±?Ó*C��v˜g‘Ò'ð	Dð ˆr8   c                 ó&  — |j                  ||«       |j                  «        t        |j                  «       «      D ]2  \  }}|€Œ	|dk7  sŒ|j	                  d||¬«       |j                  «        Œ4 |j                  |«       |j                  «        y )Nr‹  r+  rz  r2  )r�   rÎ   rœ   rÁ   rT   rÉ   r�  r'  s           r6   rÏ   zGlyphCIDMap.xmlWritem	  s„   € Ø×Ñ˜4 Ô'Ø×ÑÔÜ  §¡£Ó/ò 	$‰JˆE�3Ø‰ 3¨&£=Ø×#Ñ# E°¸cÐ#ÔBØ×!Ñ!Õ#ð	$ð 	×Ñ˜ÔØ×ÑÕr8   r2   rï  r¦   r8   r6   r4  r4  I	  s   „ òó"	;òór8   r4  c                   ó&   — e Zd Zd„ Zdd„Zd„ Zd„ Zy)Ú
DeltaValuec                 ó*  — |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 ]A  }|dk(  r|j                  «       d	}}||z
  }||z	  |
z  }||z  r||	z
  }|j                  |«       ŒC |S )
NÚ	StartSizeÚEndSizeÚDeltaFormat©r   r!  rN  úillegal DeltaFormatr   )r   r   r   r¾  )r¬   r.  rj   )r�   r£   rœ   r®   r=  r>  r?  ÚnItemsÚnBitsÚminusOffsetÚmaskÚsignMaskr;  ÚtmpÚshiftr›   rÁ   s                    r6   rš   zDeltaValue.ready	  së   € Ø˜kÑ*ˆ	Ø˜IÑ&ˆØ Ñ.ˆØ˜iÑ'Ð>Ð)>Ó>Ð'Ø˜9Ñ$ qÑ(ˆØ�[Ñ ˆØ˜5‘jˆØ�U‘
˜aÑˆØ˜ ™Ñ#ˆàˆ
Ø‰
ˆˆUÜ�v“ò 	%ˆAØ˜ŠzØ#×.Ñ.Ó0°"�U�Ø˜E‘MˆEØ˜E‘\ TÑ)ˆEØ�xÒØ Ñ+�Ø×Ñ˜eÕ$ð	%ð Ðr8   Nc                 ó$  — |d   }|d   }|d   }|}	|dv sJ d«       ‚||z
  dz   }
d|z  }t        |	«      |
k(  sJ ‚d|z  dz
  }d\  }}|	D ].  }||z
  }|||z  |z  z  }|dk(  sŒ|j                  |«       d\  }}Œ0 |d	k7  r|j                  |«       y y )
Nr=  r>  r?  r@  rA  r   )r   r¾  r   r¾  )rñ  r4  )r�   rÀ   rœ   r®   rÁ   rÆ   r=  r>  r?  r;  rB  rC  rE  rG  rH  s                  r6   r½   zDeltaValue.write�	  sà   € Ø˜kÑ*ˆ	Ø˜IÑ&ˆØ Ñ.ˆØˆ
Ø˜iÑ'Ð>Ð)>Ó>Ð'Ø˜9Ñ$ qÑ(ˆØ�[Ñ ˆÜ�:‹ &Ò(Ð(Ð(Ø�U‘
˜aÑˆà‰
ˆˆUØò 	#ˆEØ˜E‘MˆEØ˜% $™,¨5Ñ0Ñ1ˆCØ˜‹zØ×"Ñ" 3Ô'Ø"‘
�‘Uð	#ð �BŠ;Ø×Ñ˜sÕ#ð r8   c                 óT   — |j                  ||d|fgz   «       |j                  «        y rå   ©ræ   rç   rÍ   s         r6   rÏ   zDeltaValue.xmlWrite¥	  ó+   € Ø×Ñ˜D %¨G°UÐ+;Ð*<Ñ"<Ô=Ø×ÑÕr8   c                 ó   — t        |d   «      S rå   ©r   rÈ   s       r6   rË   zDeltaValue.xmlRead©	  ó   € Ü˜˜g™Ó'Ð'r8   r2   ©rh   rØ   rÙ   rš   r½   rÏ   rË   r¦   r8   r6   r;  r;  x	  s   „ òó.$ò*ó(r8   r;  c                   ó   — e Zd Zd„ Zdd„Zy)Ú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	œ|
   } ||«      D �cg c]  }||z  |	z  ||z  z  ‘Œ c}S c c}w )
NÚEntryFormatr€   r   r  l   ÿÿ r¾  é0   rö   ©r   r!  rN  rö   ©rG  r1  r  r  )r�   r£   rœ   r®   ÚfmtrB  Ú	innerBitsÚ	innerMaskÚ	outerMaskÚ
outerShiftrÁ  r±   Úraws                r6   rš   zVarIdxMapValue.read®	  sÆ   € Ø˜Ñ&ˆØ˜>Ñ*ˆà˜˜v™Ñ&ˆ	Ø˜)‘^ qÑ(ˆ	Ø Ñ*ˆ	Ø˜)‘^ˆ
à˜# ™,¨1Ñ,Ñ-ˆ	à×$Ñ$Ø×%Ñ%Ø×%Ñ%Ø×$Ñ$ñ	
ð
 ñˆ	ñ ! Ó(ö
àð �Y‰ :Ñ-°#¸	±/ÓBò
ð 	
ùò 
s   Á,BNc                 ó>  — |d   }|}|d   j                  t        |«      «       d|dz  z   }d|z  dz
  }	d|z
  }
d|dz  dz	  z   }|j                  |j                  |j                  |j
                  dœ|   } ||D �cg c]  }|d	z  |
z	  ||	z  z  ‘Œ c}«       y c c}w )
NrT  r€   r   r  r¾  rU  rö   rV  l     þ )ÚsetValuerñ  rK  r7  r‚  r  )r�   rÀ   rœ   r®   rÁ   rÆ   rX  rÊ  rY  rZ  r\  rÁ  rÃ   Úidxs                 r6   r½   zVarIdxMapValue.writeÄ	  sÏ   € Ø˜Ñ&ˆØˆØˆ~Ñ×'Ñ'¬¨G«Ô5à˜˜v™Ñ&ˆ	Ø˜)‘^ qÑ(ˆ	Ø˜)‘^ˆ
à˜# ™,¨1Ñ,Ñ-ˆ	à×%Ñ%Ø×&Ñ&Ø×&Ñ&Ø×%Ñ%ñ	
ð
 ñˆ
ñ 	ð #öàð ˜Ñ#¨
Ñ2°s¸Y±ÓGòõ	
ùòs   Á=Br2   r  r¦   r8   r6   rR  rR  ­	  s   „ ò
ô,
r8   rR  c                   ó&   — e Zd Zd„ Zdd„Zd„ Zd„ Zy)ÚVarDataValuec                 óP  — g }|d   }|d   }t        |dz  «      }|dz  }|r|j                  |j                  }	}n|j                  |j                  }	}t	        ||«      t        ||«      }}
|j                   ||
«      «       |j                   |	||
z
  «      «       ||kD  r||d …= |S )Nr   Ú	NumShortsr³  rü  )r·  rü   r%  r=  rÅ  rN  r’  )r�   r£   rœ   r®   rf   ÚregionCountÚ	wordCountÚ	longWordsÚreadBigArrayÚreadSmallArrayÚn1Ún2s               r6   rš   zVarDataValue.readÞ	  s¸   € ØˆàÐ 0Ñ1ˆØ˜kÑ*ˆ	ô ˜ VÑ+Ó,ˆ	Ø Ñ&ˆ	áØ+1×+?Ñ+?À×AVÑAV˜.‰Là+1×+@Ñ+@À&×BVÑBV˜.ˆLä�[ )Ó,¬c°+¸yÓ.IˆBˆØ�‰‘l 2Ó&Ô'Ø�‰‘n R¨"¡WÓ-Ô.Ø�ÒØ�{‘|Ð$àˆr8   Nc                 óD  — |d   }|d   }t        |dz  «      }|dz  }|j                  |j                  f|j                  |j                  fdœ|   \  }	}
t	        ||«      t        ||«      }} |	|d | «        |
||| «       ||kD  r|j                  dg||z
  z  «       y y )Nr   rd  r³  rü  r  r   )r·  r)  rA  r  rÅ  rN  ÚwriteSmallArray)r�   rÀ   rœ   r®   rf   rÆ   re  rf  rg  ÚwriteBigArrayrm  rj  rk  s                r6   r½   zVarDataValue.writeõ	  sÏ   € ØÐ 0Ñ1ˆØ˜kÑ*ˆ	ô ˜ VÑ+Ó,ˆ	Ø Ñ&ˆ	ð ×*Ñ*¨F×,AÑ,AÐBØ×(Ñ(¨&×*@Ñ*@ÐAñ*
ð ñ*Ñ&ˆ�ô
 �[ )Ó,¬c°+¸yÓ.IˆBˆÙ�f˜S˜b�kÔ"Ù˜˜r +Ð.Ô/Ø�ÒØ×"Ñ" A 3¨"¨{Ñ*:Ñ#;Õ<ð r8   c                 óT   — |j                  ||d|fgz   «       |j                  «        y rå   rK  rÍ   s         r6   rÏ   zVarDataValue.xmlWrite
  rL  r8   c                 ó   — t        |d   «      S rå   rN  rÈ   s       r6   rË   zVarDataValue.xmlRead
  rO  r8   r2   rP  r¦   r8   r6   rb  rb  Ý	  s   „ òó.=ò&ó(r8   rb  c                   ó&   — e Zd Zd„ Zdd„Zd„ Zd„ Zy)ÚTupleValuesc                 ó4   — t        j                  d |«      d   S rò   )r	   ÚdecompileDeltas_)r�   rí  rœ   s      r6   rš   zTupleValues.read
  s   € Ü×.Ñ.¨t°TÓ:¸1Ñ=Ð=r8   Nc                 ój   — |j                   t           }t        t        j                  || ¬«      «      S )N)ÚoptimizeSize)Úcfgr   rë  r	   ÚcompileDeltaValues_)r�   rÀ   rœ   r®   rf   rÆ   ÚoptimizeSpeeds          r6   r½   zTupleValues.write
  s1   € ØŸ™Ô!4Ñ5ˆÜÜ×.Ñ.¨vÈÐDUÔVó
ð 	
r8   c                 ó   — t        |d   «      S rå   rN  rÈ   s       r6   rË   zTupleValues.xmlRead
  rO  r8   c                 óT   — |j                  ||d|fgz   «       |j                  «        y rå   rK  rÍ   s         r6   rÏ   zTupleValues.xmlWrite
  rL  r8   r2   rï  r¦   r8   r6   rr  rr  
  s   „ ò>ó
ò(ór8   rr  c                   ó:   — e Zd Z	 d	ddddœd„Zd„ Zd	d„Zd„ Zd„ Zy)
Ú	CFF2IndexNrv   )Ú	itemClassÚitemConverterClassrN   c                ót   — t         j                  | |||||¬«       || _        |� |«       | _        y d | _        y r  )ru   r‘   Ú
_itemClassr  )r�   rT   r`   ra   rd   r~  r  rN   s           r6   r‘   zCFF2Index.__init__#
  sJ   € ô 	×ÑØ�$˜  Z¸[ð 	ô 	
ð $ˆŒà$6Ð$BÑÓ ð 	�ØHLð 	�r8   c                 ó  ‡ ‡‡‡‡‡— ‰j                  «       Š‰dk(  rg S ‰j                  «       Š‰dvrt        d‰› �«      ‚‰j                  ‰dz   ‰z  z   t	        ‰j
                  «      kD  rt        d‰› d�«      ‚d„ Š ‰‰‰«      }‰j                  duxr ‰d	kD  }|sÍ |‰dz   «      }g }|j                  d«      }‰j                  |dz
  «       |D ]”  }	||	k  sJ ‚‰j                  |	|z
  «      }
‰ j                  �0‰ j                  «       }|j                  |
‰‰j                  «       |}
n(‰ j                  �‰ j                  j                  |
‰«      }
|j                  |
«       |	}Œ– |S ˆˆˆˆˆˆ fd
„} |«       }t        |g‰z  «      }|S )Nr   rV  zinvalid CFF2 INDEX offSize: r   zCFF2 INDEX count z exceeds available datac                 óf   — | j                   | j                  | j                  | j                  dœ|   S )NrV  rW  )r£   ÚoffSizes     r6   ÚgetReadArrayz$CFF2Index.read.<locals>.getReadArray@
  s:   € à×(Ñ(Ø×)Ñ)Ø×)Ñ)Ø×(Ñ(ñ	ð
 ñð r8   Fr–   c                  óŒ   •‡‡‡‡— ‰	j                  «       Š‰	j                  Š‰‰dz   ‰z  z   dz
  Š ‰‰‰«      Šˆˆˆˆˆˆˆ
fd„} | S )Nr   c                 ór  •— ‰	j                  ‰| ‰z  z   «        ‰d«      }‰	j                  ‰|d   z   «       ‰	j                  |d   |d   z
  «      }‰
j                  �1‰
j                  «       }|j                  |‰‰	j                  «       |}|S ‰
j
                  �‰
j
                  j                  |‰«      }|S )Nr!  r   r   )r™   rë  r�  rö  rN  r  rš   )r›   rá  rã  ÚobjÚdata_posrœ   r„  Ú
offset_posr±   rž   r�   s       €€€€€€€r6   r    z8CFF2Index.read.<locals>.get_read_item.<locals>.read_itemg
  s¶   ø€ Ø×$Ñ$ Z°!°g±+Ñ%=Ô>Ù'¨›l�GØ×$Ñ$ X°¸±
Ñ%:Ô;Ø&×/Ñ/°¸±
¸WÀQ¹ZÑ0GÓH�Dà—‘Ð2Ø"Ÿo™oÓ/˜ØŸ™ d¨D°+×2HÑ2HÔIØ"˜ð  �Kð Ÿ™Ð4Ø#Ÿ™×3Ñ3°D¸$Ó?˜Ø�Kr8   r¡   )r    r‰  rŠ  r±   rž   r¯   rœ   r…  r„  r£   r�   s    @@@@€€€€€€r6   r¤   z%CFF2Index.read.<locals>.get_read_itema
  sM   ü€ Ø$Ÿk™k›m�Ø#ŸZ™Z�
Ø%¨°©°gÑ(=Ñ=ÀÑA�Ù(¨°gÓ>�	÷ ò  ð !Ð r8   )r  rE  r   r�   rñ  rí  r©   Úpoprë  r�  rö  rN  r  rš   rj   r   )r�   r£   rœ   r®   r±   r©   rá  r  Ú
lastOffsetr'  rã  rˆ  r¤   r    r°   r¯   r…  r„  s   ```            @@@r6   rš   zCFF2Index.read6
  s   ý€ Ø× Ñ Ó"ˆØ�AŠ:ØˆIØ×"Ñ"Ó$ˆØ˜,Ñ&ÜÐ;¸G¸9ÐEÓFÐFØ�:‰:˜ ™ gÑ-Ñ-´°F·K±KÓ0@Ò@ÜÐ0°°Ð7NÐOÓPÐPò	ñ ! ¨Ó1ˆ	à�y‰y Ð%Ò3¨%°!©)ˆÙÙ ¨¡	Ó*ˆGØˆEØ Ÿ™ Q›ˆJØ�O‰O˜J¨™NÔ+à!ò $�Ø! VÒ+Ð+Ð+Ø—‘ v°
Ñ':Ó;�à—?‘?Ð.ØŸ/™/Ó+�CØ—M‘M $¨¨f×.?Ñ.?Ô@Ø‘DØ—_‘_Ð0ØŸ?™?×/Ñ/°°dÓ;�Dà—‘˜TÔ"Ø#‘
ð$ð ˆL÷!ñ !ñ, &›ˆIÜ˜)˜ uÑ,Ó-ˆAð ˆHr8   c                 ó°  — |}|j                  t        |«      «       t        |«      sy | j                  �|D �cg c]  }|j                  |«      ‘Œ }}nF| j                  �:t        |«      D ��cg c]$  \  }}| j                  j                  |||||«      ‘Œ& }}}|D �cg c]  }t        |«      ‘Œ }	}t        t        |	d¬«      «      }	|	d   }
|
dk  rdn|
dk  rdn|
dk  rdnd	}|j                  |«       |j                  |j                  |j                  |j                  d
œ|   } ||	«       |D ]  }|j                  |«       Œ y c c}w c c}}w c c}w )Nr   )Úinitialre  rÜ  i   r!  i   rN  rö   rV  )r  rñ  r�  rc   r  r¼   r½   r†  r,   rI  rK  r7  r‚  r  rò  )r�   rÀ   rœ   r®   rf   rÆ   r  rã  r›   rá  rŒ  r„  rÃ   s                r6   r½   zCFF2Index.write~
  sl  € Øˆà×Ñœ#˜e›*Ô%Ü�5ŒzØà�?‰?Ð&Ø49Ö:¨D�T—\‘\ $Õ'Ð:ˆEÑ:Ø�_‰_Ð(ô  )¨Ó/÷á�A�tð —‘×%Ñ% f¨d°I¸tÀQÕGðˆEñ ð
 */Ö/ ”3�t•9Ð/ˆÐ/Ü”z '°1Ô5Ó6ˆà˜R‘[ˆ
ð ˜EÒ!ñ à  7Ò*‘°ZÀ)Ò5K±ÐQRð 	ð
 	×Ñ˜'Ô"ð ×%Ñ%Ø×&Ñ&Ø×&Ñ&Ø×%Ñ%ñ	
ð
 ñˆ
ñ 	�7ÔØò 	#ˆDØ×Ñ˜TÕ"ñ	#ùò5 ;ùóùò
 0s   ¹EÁ.)EÂEc                 óÌ   — | j                   �&| j                  «       }|j                  d |||«       |S | j                  �| j                  j                  |||«      S t	        «       ‚r2   )r�  r  r  rË   r¸   )r�   rÉ   rÊ   rœ   rˆ  s        r6   rË   zCFF2Index.xmlRead£
  s[   € Ø�?‰?Ð&Ø—/‘/Ó#ˆCØ�K‰K˜˜e W¨dÔ3ØˆJØ�_‰_Ð(Ø—?‘?×*Ñ*¨5°'¸4Ó@Ð@ä%Ó'Ð'r8   c           
      ó  — | j                   �+t        |«      D ]  \  }}|j                  ||d|fg|«       Œ y | j                  �9t        |«      D ]*  \  }}| j                  j	                  |||||d|fgz   «       Œ, y t        «       ‚)Nr}  )r�  r¼   rú  r  rÏ   r¸   )r�   rÎ   rœ   rÁ   rT   rÉ   r›   rã  s           r6   rÏ   zCFF2Index.xmlWrite­
  s“   € Ø�?‰?Ð&Ü$ UÓ+ò B‘��4Ø—
‘
˜9 d¨g°q¨\¨N¸DÕAñBà�_‰_Ð(Ü$ UÓ+ò ‘��4Ø—‘×(Ñ(Ø˜t T¨4°¸7ÀA¸,¸Ñ1Gõñô
 &Ó'Ð'r8   r2   )rh   rØ   rÙ   r‘   rš   r½   rË   rÏ   r¦   r8   r6   r}  r}  "
  s3   „ ð ð
ð ØØô
ò&FóP##òJ(ó
(r8   r}  c                   ó*   ‡ — e Zd Zˆ fd„Zdˆ fd„	Zˆ xZS )ÚTupleListOffsetc                 ór   •— |j                  «       }|dk7  sJ ‚t        ‰| �	  |j                  |«      ||«      S rò   )r  rÈ  rš   r&  )r�   r£   rœ   r®   r'  rË  s        €r6   rš   zTupleListOffset.read»
  s;   ø€ Ø×!Ñ!Ó#ˆØ˜Š{Ðˆ{Ü‰w‰|˜F×/Ñ/°Ó7¸¸yÓIÐIr8   c                 ó”   •— |j                  «       }| j                  |_        |j                  |d¬«       t        ‰| �  |||||«       y )Nrö   r)  )r  rT   r+  rÈ  r½   )r�   rÀ   rœ   r®   rf   rÆ   r,  rË  s          €r6   r½   zTupleListOffset.writeÀ
  sC   ø€ Ø×'Ñ'Ó)ˆ	ØŸ™ˆ	ŒØ×Ñ˜Y°1ÐÔ5Ü‰‰�i  y°&¸+ÕFr8   r2   rG  rÑ  s   @r6   r’  r’  º
  s   ø„ ôJ÷
Gñ Gr8   r’  c                   ó   — e Zd Zd„ Zy)Ú
LookupFlagc                 ó°  — |j                  ||d|fgz   «       g }|dz  r|j                  d«       |dz  r|j                  d«       |dz  r|j                  d«       |dz  r|j                  d	«       |d
z  r|j                  d«       |dz  r|j                  d|dz	  z  «       |r |j                  dj                  |«      «       |j	                  «        y )NrÁ   r   ÚrightToLeftr!  ÚignoreBaseGlyphsrö   ÚignoreLigaturesr–   ÚignoreMarksr¾  ÚuseMarkFilteringSeti ÿ  zmarkAttachmentType[%i]r–  )ræ   rj   r`  r—  rç   r˜  s          r6   rÏ   zLookupFlag.xmlWriteÈ
  sÈ   € Ø×Ñ˜D %¨G°UÐ+;Ð*<Ñ"<Ô=ØˆØ�4Š<Ø�L‰L˜Ô'Ø�4Š<Ø�L‰LÐ+Ô,Ø�4Š<Ø�L‰LÐ*Ô+Ø�4Š<Ø�L‰L˜Ô'Ø�4Š<Ø�L‰LÐ.Ô/Ø�6Š>Ø�L‰LÐ1°U¸a±ZÑ@ÔAÙØ×Ñ˜cŸh™h u›oÔ.Ø×ÑÕr8   Nra  r¦   r8   r6   r–  r–  Ç
  s   „ ór8   r–  c                   óB   ‡ — e Zd ZeZˆ fd„Zed„ «       Zed„ «       Zˆ xZ	S )Ú
_UInt8Enumc                 óD   •— | j                  t        ‰| �	  |||«      «      S r2   )Ú	enumClassrÈ  rš   )r�   r£   rœ   r®   rË  s       €r6   rš   z_UInt8Enum.readß
  s   ø€ Ø�~‰~œe™g™l¨6°4¸ÓCÓDÐDr8   c                 óJ   — t        | j                  |j                  «       «      S r2   )rª  r   Úupperr²  s     r6   rã   z_UInt8Enum.fromStringâ
  s   € ä�s—}‘} e§k¡k£mÓ4Ð4r8   c                 óT   — | j                  |«      j                  j                  «       S r2   )r   rT   Úlowerr²  s     r6   rà   z_UInt8Enum.toStringæ
  s    € à�}‰}˜UÓ#×(Ñ(×.Ñ.Ó0Ð0r8   )
rh   rØ   rÙ   r«   r   rš   r»  rã   rà   rÐ  rÑ  s   @r6   rž  rž  Ü
  s6   ø„ Ø€IôEð ñ5ó ð5ð ñ1ó ô1r8   rž  c                   ó   — e Zd ZeZy)r(   N)rh   rØ   rÙ   Ú_ExtendModer   r¦   r8   r6   r(   r(   ë
  s   „ Ø�Ir8   r(   c                   ó   — e Zd ZeZy)r)   N)rh   rØ   rÙ   Ú_CompositeModer   r¦   r8   r6   r)   r)   ï
  s   „ Ø�Ir8   r)   c                   ó@   — e Zd ZdZdZdZdZdZed„ «       Z	ed„ «       Z
y)	ÚMappingEntryFormatr   r!  rö   r–   rU  c                 ó.   — | t         j                  z  dk(  S )Nr  ©rª  ÚCODE_POINT_BIAS_BITSr
  s    r6   Úbias_present_u16z#MappingEntryFormat.bias_present_u16û
  ó   € àÔ)×>Ñ>Ñ>À4ÑGÐGr8   c                 ó.   — | t         j                  z  dk(  S )NrU  r¬  r
  s    r6   Úbias_present_u24z#MappingEntryFormat.bias_present_u24ÿ
  r¯  r8   N)rh   rØ   rÙ   ÚHAS_SUBSET_DEFÚHAS_CHILD_ENTRIESÚHAS_ENTRY_IDÚHAS_PATCH_FORMATr­  Úpropertyr®  r±  r¦   r8   r6   rª  rª  ó
  sH   „ Ø€NØÐØ€LØÐàÐàñHó ðHð ñHó ñHr8   rª  c                   ó&   — e Zd Zd„ Zdd„Zd„ Zd„ Zy)ÚMappingEntriesConverterc                 ó†  — ddl m} ddlm} |d   }g }d}t	        |«      D �]œ  }	i }
t        |j                  «       «      }||
d<   |t
        j                  z  rÂ|j                  «       }g }t	        |«      D ]#  }	|j                  «       }|j                  |«       Œ% ||
d<   |j                  «       }g }t	        |«      D ]U  }	|j                  «       } ||j                  «       d«      } ||j                  «       d«      }|j                  |||d	œ«       ŒW ||
d
<   |t
        j                  z  r`|j                  «       }t        |dz  «      }|dz  }||
d<   g }t	        |«      D ]#  }	|j                  «       }|j                  |«       Œ% ||
d<   |t
        j                  z  rBg }	 |j!                  «       }|dz	  }|dz  }|dz   |z   }|j                  |«       |}|snŒ9||
d<   n|dz   g|
d<   |dz   }|t
        j"                  z  r|j                  «       |
d<   |t
        j$                  z  r„d}|j&                  r|j                  «       }n|j(                  r|j                  «       }||
d<    ||j*                  |j,                  d  |d¬«      \  }} |j/                  | «       t1        |«      |
d<   |j                  |
«       �ŒŸ |S )Nr   )r   )Údecoder‹   re  ÚformatFlagsrK  r¾  ©Útagr×  ÚendÚdesignSpaceSegmentsr  é   ÚchildEntryConjunctiveÚchildEntryIndicesr   ÚentryIdsÚpatchFormatÚcodePointsBiasiÿÿ )rÉ  ÚmaxValueÚ
codePoints)ÚfontTools.misc.fixedToolsr   ÚfontTools.misc.iftSparseBitSetrº  r¬   rª  rE  r²  rk  rj   r.  rù   r³  r·  rZ  r´  rP  rµ  r­  r±  r®  rí  r�   r­   r‡  )!r�   r£   rœ   r®   r°  Ú	sbsDecodeÚ
entryCountro  ÚlastEntryIdrÁ  rä  r»  ÚfeatureCountÚfeaturesr½  ÚdesignSpaceCountr«  ÚsegTagr×  r¾  ÚmodeAndCountÚconjunctiveÚ
childCountÚchildIndicesr`  ÚidsÚ
encodedValr  ÚhasMoreÚcurrentEntryIdrÉ  Ú
codepointsÚconsumeds!                                    r6   rš   zMappingEntriesConverter.read  sþ  € ÝCÝFà˜LÑ)ˆ
ØˆØˆä�zÓ"ó G	"ˆAØˆEÜ,¨V×-=Ñ-=Ó-?Ó@ˆKØ#.ˆE�-Ñ àÔ/×>Ñ>Ò>Ø%×/Ñ/Ó1�Ø�Ü˜|Ó,ò )�AØ Ÿ.™.Ó*�CØ—O‘O CÕ(ð)ð (0��mÑ$Ø#)×#4Ñ#4Ó#6Ð Ø�ÜÐ/Ó0ò Q�AØ#Ÿ^™^Ó-�FÙ! &§/¡/Ó"3°RÓ8�EÙ §¡Ó 1°2Ó6�CØ—O‘O¨F¸UÈ3Ñ$OÕPð	Qð
 08�Ð+Ñ,àÔ/×AÑAÒAØ%×/Ñ/Ó1�Ü" <°$Ñ#6Ó7�Ø)¨DÑ0�
Ø1<�Ð-Ñ.Ø!�Ü˜zÓ*ò -�AØ ×+Ñ+Ó-�CØ ×'Ñ'¨Õ,ð-ð .:�Ð)Ñ*àÔ/×<Ñ<Ò<Ø�Øð "(×!1Ñ!1Ó!3�JØ&¨!™O�EØ(¨4Ñ/�GØ%0°1¡_°uÑ%<�NØ—J‘J˜~Ô.Ø"0�Ká"Øð ð %(��jÒ!à%0°1¡_Ð$5��jÑ!Ø)¨A™o�àÔ/×@Ñ@Ò@Ø'-×'7Ñ'7Ó'9��mÑ$àÔ/×DÑDÒDØ�Ø×/Ò/Ø!×,Ñ,Ó.‘DØ ×1Ò1Ø!×,Ñ,Ó.�DØ*.�Ð&Ñ'á'0Ø—K‘K §
¡
 Ð-°DÀ8ô(Ñ$�
˜Hð —‘˜xÔ(Ü&,¨ZÓ&8��lÑ#à�N‰N˜5Ö!ðOG	"ðP ˆr8   Nc           
      óÜ  — ddl m} ddlm} |}d}	|D �]Ñ  }
|
j	                  dt        d«      «      }|j                  |j                  «       |t
        j                  z  rÁ|
j	                  dg «      }|j                  t        |«      «       |D ]  }|j                  |«       Œ |
j	                  dg «      }|j                  t        |«      «       |D ]L  }|j                  |d   «       |j                   ||d	   d
«      «       |j                   ||d   d
«      «       ŒN |t
        j                  z  rb|
j	                  dg «      }|
j	                  dd«      }t        |«      dz  |rdndz  }|j                  |«       |D ]  }|j                  |«       Œ |t
        j                  z  ra|
j	                  dg «      }t!        |«      D ]@  \  }}||	z
  dz
  }|t        |«      dz
  k  rdnd}|dz  |z  }|j                  |dz  «       |}	ŒB n|	dz  }	|t
        j"                  z  r!|j                  |
j	                  dd«      «       |t
        j$                  z  s�ŒE|
j	                  dd«      }|j&                  r|j                  |«       n|j(                  r|j                  |«       |
j	                  dg «      }|j+                   ||D �cg c]  }||k\  sŒ	||z
  ‘Œ c}«      «       �ŒÔ y c c}w )Nr   )Úencode)r   re  r»  rK  r¿  r½  r×  r¾  r¾  rÂ  rÁ  FrÀ  r  rÃ  r   rR  rÄ  rÅ  rÇ  )rÉ  rÜ  rÈ  r   re   rª  rI  rÁ   r²  rñ  rm  r4  r   r³  rT  r´  r¼   rµ  r­  r±  r®  rò  )r�   rÀ   rœ   r®   rÁ   rÆ   Ú	sbsEncoderµ  ro  ÚlastIdrä  r»  rÎ  r½  r«  ÚsegrÔ  rÒ  rÑ  r`  rÕ  r›   Úeidr  Úhas_moreÚencoded_valuerÉ  rÙ  Úcs                                r6   r½   zMappingEntriesConverter.writeY  sÌ  € ÝFÝCàˆØˆàó 2	YˆEð  Ÿ)™) MÔ3EÀaÓ3HÓIˆKØ×Ñ˜k×/Ñ/Ô0àÔ/×>Ñ>Ò>Ø Ÿ9™9 ]°BÓ7�Ø×!Ñ!¤# h£-Ô0Ø#ò )�CØ—O‘O CÕ(ð)à Ÿ9™9Ð%:¸BÓ?�Ø×"Ñ"¤3 x£=Ô1Ø#ò <�CØ—O‘O C¨¡JÔ/Ø×$Ñ$¡U¨3¨w©<¸Ó%<Ô=Ø×$Ñ$¡U¨3¨u©:°rÓ%:Õ;ð<ð
 Ô/×AÑAÒAØ$Ÿy™yÐ)<¸bÓA�Ø#Ÿi™iÐ(?ÀÓG�Ü # LÓ 1°DÑ 8Á[¹TÐVWÑX�Ø×!Ñ! ,Ô/Ø'ò ,�CØ×&Ñ& sÕ+ð,ð Ô/×<Ñ<Ò<Ø—i‘i 
¨BÓ/�Ü'¨›nò !‘F�A�sð   &™L¨1Ñ,�EØ$%¬¨C«°1©Ò$4™q¸!�HØ%*¨a¡Z°8Ñ$;�MØ×&Ñ& }°xÑ'?Ô@Ø ‘Fñ!ð ˜!‘�àÔ/×@Ñ@Ò@Ø×!Ñ! %§)¡)¨M¸1Ó"=Ô>àÔ/×DÑDÔDØ—y‘yÐ!1°1Ó5�Ø×/Ò/Ø×&Ñ& tÕ,Ø ×1Ò1Ø×&Ñ& tÔ,Ø"ŸY™Y |°RÓ8�
Ø× Ñ ¡¸jÖ+V¸ÈAÐQUËI¨A°«HÒ+VÓ!WÖXñe2	Yùòd ,Ws   Ë
K)ËK)c           
      ó<  — |D �]  }|j                  dt        d«      «      }|j                  d|j                  ¬«       |j	                  «        d|v r-|d   D ]%  }|j                  d|¬«       |j	                  «        Œ' d|v r-|d   D ]%  }	|j                  d	|	¬«       |j	                  «        Œ' d
|v r8|d
   D ]0  }
|j                  d|
d   |
d   |
d   ¬«       |j	                  «        Œ2 d|v ri|j                  dt        |j                  dd«      «      ¬«       |j	                  «        |d   D ]%  }|j                  d|¬«       |j	                  «        Œ' d|v r&|j                  d|d   ¬«       |j	                  «        d|v rq|j                  d|j                  dd«      ¬«       |j	                  «        dj                  d„ |d   D «       «      }|j                  d|¬«       |j	                  «        |j                  d«       |j	                  «        �Œ y )Nr»  r   rä  )r»  rÃ  ÚentryIdrß   rK  rb  r¿  ÚdesignSpaceSegmentr½  r×  r¾  r¼  rÂ  rÁ  FÚ
childEntryr|  rÄ  rÇ  rÅ  r–  c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr2   )Ústr)r§   rã  s     r6   r¨   z3MappingEntriesConverter.xmlWrite.<locals>.<genexpr>»  s   è ø€ Ò(M°A¬¨Q¯Ñ(Mùr  )	re   rª  rÖ  rÁ   rç   ræ   rÔ   r—  r×  )r�   rÎ   rœ   rÁ   rT   rÉ   rä  Úformat_flagsrà  r½  rß  r`  ÚcodePointsStrs                r6   rÏ   z MappingEntriesConverter.xmlWrite”  sM  € Øó *	 ˆEØ Ÿ9™9 ]Ô4FÀqÓ4IÓJˆLØ×Ñ˜w°L×4FÑ4FÐÔGØ×ÑÔØ˜UÑ"Ø  Ñ,ò (�CØ×'Ñ'¨	¸Ð'Ô=Ø×%Ñ%Õ'ð(ð  Ñ%Ø  Ñ/ò (�CØ×'Ñ'¨¸CÐ'Ô@Ø×%Ñ%Õ'ð(ð %¨Ñ-Ø Ð!6Ñ7ò (�CØ×'Ñ'Ø,Ø ™JØ! '™lØ ™Jð	 (ô ð ×%Ñ%Õ'ð(ð # eÑ+Ø×#Ñ#Ø+Ü˜eŸi™iÐ(?ÀÓGÓHð $ô ð ×!Ñ!Ô#Ø Ð!4Ñ5ò (�CØ×'Ñ'¨¸CÐ'Ô@Ø×%Ñ%Õ'ð(ð  Ñ%Ø×#Ñ# M¸¸}Ñ9MÐ#ÔNØ×!Ñ!Ô#Ø˜uÑ$Ø×#Ñ#Ø$¨E¯I©IÐ6FÈÓ,Jð $ô ð ×!Ñ!Ô#Ø #§¡Ñ(M¸¸|Ñ9LÔ(MÓ M�Ø×#Ñ# L¸Ð#ÔFØ×!Ñ!Ô#Ø×Ñ˜WÔ%Ø×ÑÖñU*	 r8   c           
      óÎ  — g }|D �]×  }t        |t        «      sŒ|\  }}}|dk(  sŒ!t        |j                  dd«      «      }dt	        |«      i}|D �]x  }	t        |	t        «      sŒ|	\  }
}}|
dk(  r.|j                  dg «      j                  t        |d   «      «       ŒN|
dk(  r%|j                  dg «      j                  |d   «       Œx|
d	k(  rA|j                  d
g «      j                  |d   t        |d   «      t        |d   «      dœ«       Œ¾|
dk(  rt        t        |d   «      «      |d<   ŒÞ|
dk(  r/|j                  dg «      j                  t        |d   «      «       �Œ|
dk(  rt        |d   «      |d<   �Œ*|
dk(  rt        |d   «      |d<   �ŒB|
dk(  s�ŒI|d   j                  «       D �cg c]  }|sŒt        |«      ‘Œ c}|d<   �Œ{ |j                  |«       �ŒÚ |S c c}w )Nrä  r»  Ú0rå  rÃ  rÁ   rb  rK  ræ  r¿  r½  r×  r¾  r¼  rÁ  rç  rÂ  r}  rÄ  rÅ  rÇ  )r3   r4   r   re   rª  Ú
setdefaultrj   r�  r·  ÚsplitrÔ   )r�   rÉ   rÊ   rœ   ro  ÚelemrT   Úformat_flags_inträ  Úe_elemÚenameÚeattrsÚecontentrã  s                 r6   rË   zMappingEntriesConverter.xmlReadÁ  s  € ØˆØó '	&ˆDÜ˜d¤EÔ*ØØ#'Ñ ˆD�%˜Ø�w‹Ü#+¨E¯I©I°mÀSÓ,IÓ#JÐ Ø&Ô(:Ð;KÓ(LÐM�Ø%ó �FÜ% f¬eÔ4Ø Ø.4Ñ+�E˜6 8Ø 	Ò)Ø×(Ñ(¨°RÓ8×?Ñ?Ü$ V¨G¡_Ó5õð  ,Ò.Ø×(Ñ(¨¸Ó;×BÑBÀ6È'Á?ÕSØÐ"6Ò6Ø×(Ñ(Ð)>ÀÓC×JÑJà'-¨e¡}Ü).¨v°g©Ó)?Ü',¨V°E©]Ó';ñõð Ð"9Ò9Ü9=¼hÀvÈgÁÓ>WÓ9X˜Ð5Ò6Ø ,Ò.Ø×(Ñ(Ð)<¸bÓA×HÑHÜ$ V¨G¡_Ó5öð  -Ò/Ü/7¸¸w¹Ó/H˜˜mÓ,ØÐ"2Ò2Ü2:¸6À'¹?Ó2K˜Ð.Ó/Ø ,Ô.à,2°7©O×,AÑ,AÓ,Cö/Ø'(ÂqœC �Fò/˜˜lÓ+ð;ð@ —‘˜uÖ%ðO'	&ðP ˆùò	/s   Æ.G"Æ6G"r2   rP  r¦   r8   r6   r¸  r¸    s   „ òPód9Yòv+ óZ*r8   r¸  Úint8Úint16Úint24Úint32r@   r<   rA   rB   Úchar64r  ÚMappingEntriesÚOffsetrI   ÚOffset24Ú	TupleList)r  ÚVarCompositeGlyphList)r~  rQ   r&   rR   r'   c                 ó$   — t        t        | ¬«      S ©N)rd   )r-   ry  ©ÚCs    r6   r7   r7     ó   € œ7¤9¸Ô;€ r8   c                 ó$   — t        t        | ¬«      S r  )r-   rÙ  r  s    r6   r7   r7     s   € ¬Ô1HÐUVÔ)W€ r8   c                 ó$   — t        t        | ¬«      S r  )r-   r  r  s    r6   r7   r7      s   € ¤¬ÀQÔ!G€ r8   c                 ó$   — t        t        | ¬«      S r  )r-   r)  r  s    r6   r7   r7   !  r  r8   ÚOffsetToc                 ó$   — t        t        | ¬«      S r  )r-   rg   r  s    r6   r7   r7   "  s   € œ'¤%°AÔ6€ r8   Ú	LOffsetToc                 ó$   — t        t        | ¬«      S r  )r-   r.  r  s    r6   r7   r7   #  s   € œ7¤6°aÔ8€ r8   Ú
Offset24Toc                 ó$   — t        t        | ¬«      S r  )r-   r3  r  s    r6   r7   r7   $  s   € œG¤G¸Ô:€ r8   )�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   rw  r   r   r   r   r   ÚotDataSchemar   ÚotTablesr   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r¦  r)   r¨  r*   Ú	itertoolsr+   r,   Ú	functoolsr-   Útypesr.   rÛ   r  Útypingr/   ÚloggingÚenumr0   Ú	getLoggerrh   rŽ  rÿ  r†  rs   Úobjectru   rÝ   rë   rð   rõ   r	  r  r  r   r+  r9  rC  rM  rW  r]  rX   rY   rZ   r[   ri  ro  r}  r…  rˆ  r’  r›  r   r§  r½  rÁ  rÄ  rÓ  rÕ  rá  r_   r]   rg   r.  r3  rG   r\   rE   rC   rD   rF   r;   rn  ry  rÙ  rñ  r  r)  rž  r  r$  r4  r;  rR  rb  rr  r}  r’  r–  rž  rª  r¸  r^   r¦   r8   r6   ú<module>r     s¹  ð÷÷ õ Aß Jß MÕ MÝ -ß KÑ K÷õ õ $÷÷ ÷ ÷ ñ ÷" .Ý Ý !Û 	Û Ý Û Ý à€g×Ñ˜Ó!€Ù
(€ðJ(˜t I™ó J(ôZn�Fô nôb/�-ô /ô"�Kô ôˆ{ô ô&ˆ8ô &ô 'ˆHô 'ô  ˆeô  ô!ˆ}˜eô !ô'ˆHô 'ô (ˆXô (ô &ˆ8ô &ô 'ˆHô 'ô -ˆHô -ô"ˆXô "ô �(ô  ô	�K ô 	ô	�[ &ô 	ô	�[ &ô 	ô	�K ô 	ôˆ+ô ôAˆkô Aô&3�ô 3ô �ô ô
ˆVô ô$�ô ô�ô ô.�ô .ô0�Zô 0ô:ˆNô ô ˆnô  ô>ˆGô >ô0�%ô ôˆkô ô0ˆ[ô ô>D4ˆ]ô D4ôN>�vô >ô6+ˆFô +ôDˆUô ôˆeô ô C˜ô  CôFC�vô Cô4M�ô MôLˆuô LôG�&˜(ô GôL�Eô Lô8�(ô 8ô&�+ô ô0t�ô tô|8=˜mô 8=ôv>>˜Mô >>ôB|>˜Mô |>ôBD�ô DôN
S6�)ô S6ôlK�mô Kô@�-ô ôD,�-ô ,ô^2(�ô 2(ôj-
�]ô -
ô`0(�=ô 0(÷fñ ô$U(�ô U(ôp
G�iô 
Gô�ô ô*1�ô 1ô�ô ô�Jô ôH˜ô Hô&e˜mô eðP7à
ˆDð7ð ˆUð7ð ˆUð	7ð
 ˆTð7ð ˆUð7ð ˆfð7ð ˆfð7ð ˆeð7ð ˆfð7ð ˆwð7ð �ð7ð ˆwð7ð 
ˆ3ð7ð ˆwð7ð  �ð!7ð" �ð#7ð$ ˆfñ%7ð& �*ð'7ð( ˆUð)7ð* ˆwð+7ð, ˆUð-7ð. �;ð/7ð0 ˆfð17ð2 Ð-ð37ð4 ˆeð57ð6 ˆvð77ð8 �ð97ð: �;ð;7ð< �*ð=7ð> �nð?7ð@ �LðA7ðB �*ðC7ðD �*ðE7ðF �]òG7ðH �ðI7ðJ ‘˜°{ÔCðK7ðL ‘w˜À;ÔOðM7ðN ™W YÐ:KÔLðO7ðR �;ðS7ðT �;ðU7ðV Ð!ðW7ðX Ð)ðY7ðZ Ð!ð[7ð\ Ð)ð]7ð` Ñ;ða7ðb ÑWðc7ðd ÑGðe7ðf Ñ;ðg7ðh Ñ6ði7ðj Ñ8ðk7ðl Ñ:ñm7Ñ r8   