Ë
    £èh€B  ã                  ód  — d dl mZ d dlmZmZmZmZmZmZm	Z	m
Z
 d dlmZ d dlZd dlmZmZ d dl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 d d
lm Z  d dl!m"Z" d dl#m$Z$ erd dl%m&Z& d dl'm(Z( g d¢Z) ejT                  d«      Z+dd„Z, G d„ d«      Z-dd„Z. G d„ de«      Z/ G d„ de«      Z0y)é    )Úannotations)ÚTYPE_CHECKINGÚIterableÚAnyÚMutableSequenceÚMutableMappingÚIteratorÚUnionÚOptional)ÚcontextmanagerN)ÚVec3ÚMatrix44)ÚdxftagÚVALID_XDATA_GROUP_CODESÚDXFTag)ÚTags)ÚXDATA_MARKERÚDXFValueErrorÚDXFTypeError)Ú
xdata_listÚremove_named_list_from_xdataÚget_named_list_from_xdataÚNotFoundException)Útake2)Úoptions)Ú filter_invalid_xdata_group_codes)Ú	DXFEntity)ÚAbstractTagWriter)ÚXDataÚXDataUserListÚXDataUserDictÚezdxfc                ó&   — t        d„ | D «       «      S )Nc              3  ó@   K  — | ]  }|j                   t        v –— Œ y ­w©N)Úcoder   )Ú.0Útags     ú4lib/python3.12/site-packages/ezdxf/entities/xdata.pyÚ	<genexpr>z.has_valid_xdata_group_codes.<locals>.<genexpr>(   s   è ø€ ÐC¹d°sˆs�x‰xÔ2Ô2¹dùs   ‚)Úall)Útagss    r)   Úhas_valid_xdata_group_codesr-   '   s   € ÜÑC¹dÓCÓCÐCó    c                  óž   — e Zd Zddd„Zedd„«       Zd„ Zdd„Zd„ Zdd„Z		 	 	 	 	 	 dd„Z
dd	„Zd
„ Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zy)r   Nc                óX   — t        «       | _        |�|D ]  }| j                  |«       Œ y y r%   )ÚdictÚdataÚ_add)ÚselfÚxdatar2   s      r)   Ú__init__zXData.__init__,   s+   € Ü%)£VˆŒ	ØÐÛ�Ø—	‘	˜$•ñ ð r.   c           
     ó\   —  | |D �cg c]  }t        t        |«      «      ‘Œ c}«      S c c}w r%   )r   r   )Úclsr5   r,   s      r)   Ú	safe_initzXData.safe_init2   s/   € áÙFKÓLÁe¸dŒTÔ2°4Ó8Õ9ÀeÑLó
ð 	
ùÚLs   ‡)c                ó,   — t        | j                  «      S r%   )Úlenr2   ©r4   s    r)   Ú__len__zXData.__len__8   s   € Ü�4—9‘9‹~Ðr.   c                ó   — || j                   v S )z0Returns ``True`` if  DXF tags for `appid` exist.©r2   ©r4   Úappids     r)   Ú__contains__zXData.__contains__;   s   € à˜Ÿ	™	Ð!Ð!r.   c                ó„   — | j                   j                  «       D �ci c]  }|d   j                  |“Œ c}| _         yc c}w )z!Update APPID keys. (internal API)r   N)r2   ÚvaluesÚvalue)r4   r,   s     r)   Úupdate_keyszXData.update_keys?   s7   € à59·Y±Y×5EÑ5EÔ5GÓHÑ5G¨T�T˜!‘W—]‘] DÑ(Ð5GÑHˆ�	ùÒHs   �=c                óî   — t        |«      }t        |«      r_|d   j                  }|| j                  v rt        j                  d|› d�«       t        |«      r|| j                  |<   y t        d|› �«      ‚y )Nr   zDuplicate XDATA appid z in one entityz"found invalid XDATA group code in )r   r;   rE   r2   ÚloggerÚinfor-   r   )r4   r,   rA   s      r)   r3   z
XData._addC   so   € Ü�D‹zˆÜˆtŒ9Ø˜‘G—M‘MˆEØ˜Ÿ	™	Ñ!Ü—‘Ð4°U°G¸>ÐJÔKÜ*¨4Ô0Ø#'�—	‘	˜%Ò ä#Ð&HÈÈÐ$OÓPÐPð r.   c                óÂ   — t        d„ |D «       «      }t        |«      dk(  s|d   t        |fk7  r |j                  dt	        t        |«      «       | j                  |«       y)aŽ  Add a list of DXF tags for `appid`. The `tags` argument is an
        iterable of (group code, value) tuples, where the group code has to be
        an integer value. The mandatory XDATA marker (1001, appid) is added
        automatically if front of the tags if missing.

        Each entity can contain only one list of tags for each `appid`.
        Adding a second list of tags for the same `appid` replaces the
        existing list of tags.

        The valid XDATA group codes are restricted to some specific values in
        the range from 1000 to 1071, for more information see also the
        internals about :ref:`xdata_internals`.

        c              3  ó:   K  — | ]  \  }}t        ||«      –— Œ y ­wr%   )r   )r'   r&   rE   s      r)   r*   zXData.add.<locals>.<genexpr>_   s   è ø€ Ð@¹4©K¨D°%”F˜4 ×'¹4ùs   ‚r   N)r   r;   r   Úinsertr   r3   )r4   rA   r,   r2   s       r)   Úaddz	XData.addN   sO   € ô" Ñ@¹4Ó@Ó@ˆÜˆt‹9˜Š>˜T !™W¬°uÐ(=Ò=Ø�K‰K˜œ6¤,°Ó6Ô7Ø�	‰	�$�r.   c                óR   — || j                   v r| j                   |   S t        |«      ‚)z¨Returns the DXF tags as :class:`~ezdxf.lldxf.tags.Tags` list
        stored by `appid`.

        Raises:
             DXFValueError: no data for `appid` exist

        )r2   r   r@   s     r)   Úgetz	XData.getd   s*   € ð �D—I‘IÑØ—9‘9˜UÑ#Ð#ä Ó&Ð&r.   c                ó<   — || j                   v r| j                   |= yy)zXDelete DXF tags for `appid`. None existing appids are silently
        ignored.
        Nr?   r@   s     r)   ÚdiscardzXData.discardq   s!   € ð �D—I‘IÑØ—	‘	˜%Ñ ð r.   c                ó²   — | j                   j                  «       D ]:  \  }}t        j                  rt	        t        |«      «      }|j                  |«       Œ< y r%   )r2   Úitemsr   r   r   Ú
write_tags)r4   Ú	tagwriterrA   r,   s       r)   Ú
export_dxfzXData.export_dxfx   sB   € ØŸ9™9Ÿ?™?Ö,‰KˆE�4Ü×7Ò7ÜÔ<¸TÓBÓC�Ø× Ñ  Õ&ñ -r.   c                óH   — 	 | j                  ||«       y# t        $ r Y yw xY w)zˆReturns ``True`` if list `name` from XDATA `appid` exists.

        Args:
            appid: APPID
            name: list name

        TF)Ú	get_xlistr   )r4   rA   Únames      r)   Ú	has_xlistzXData.has_xlist~   s.   € ð	Ø�N‰N˜5 $Ô'ð øô ò 	Ùð	ús   ‚ •	! !c                ó|   — | j                  |«      }	 t        ||«      S # t        $ r t        d|› d|› d�«      ‚w xY w)aB  Get list `name` from XDATA `appid`.

        Args:
            appid: APPID
            name: list name

        Returns: list of DXFTags including list name and curly braces '{' '}' tags

        Raises:
            DXFKeyError: XDATA `appid` does not exist
            DXFValueError: list `name` does not exist

        zNo data list "z" not found for APPID "Ú")rO   r   r   r   )r4   rA   rY   r5   s       r)   rX   zXData.get_xlist�   sR   € ð —‘˜“ˆð	Ü,¨T°5Ó9Ð9øÜ ò 	ÜØ   Ð&=¸e¸WÀAÐFóð ð	ús   “ Ÿ;c                ó´   — || j                   vr7t        |fg}|j                  t        ||«      «       | j	                  ||«       y| j                  |||«       y)aC  Create new list `name` of XDATA `appid` with `xdata_tags` and
        replaces list `name` if already exists.

        Args:
            appid: APPID
            name: list name
            tags: list content as DXFTags or (code, value) tuples, list name and
                curly braces '{' '}' tags will be added
        N)r2   r   Úextendr   rM   Úreplace_xlist)r4   rA   rY   r,   r2   s        r)   Ú	set_xlistzXData.set_xlist£   sP   € ð ˜Ÿ	™	Ñ!Ü! 5Ð)Ð*ˆDØ�K‰Kœ
 4¨Ó.Ô/Ø�H‰H�U˜DÕ!à×Ñ˜u d¨DÕ1r.   c                ó¢   — 	 | j                  |«      }	 t        ||«      }| j                  ||«       y# t        $ r Y yw xY w# t        $ r Y yw xY w)z¹Deletes list `name` from XDATA `appid`. Ignores silently if XDATA
        `appid` or list `name` not exist.

        Args:
            appid: APPID
            name: list name

        N)rO   r   rM   r   r   )r4   rA   rY   r5   r,   s        r)   Údiscard_xlistzXData.discard_xlist´   s\   € ð
	&Ø—H‘H˜U“OˆEð&Ü3°D¸%Ó@�ð —‘˜ Õ%øô %ò Ùðûô ò 	Ùð	ús   ‚A ”3 ³	?¾?Á	AÁAc                óÀ   — | j                  |«      }	 t        ||«      }t        ||«      }|j	                  |«       | j                  ||«       y# t        $ r |}Y Œ=w xY w)a  Replaces list `name` of existing XDATA `appid` by `tags`. Appends
        new list if list `name` do not exist, but raises `DXFValueError` if
        XDATA `appid` do not exist.

        Low level interface, if not sure use `set_xdata_list()` instead.

        Args:
            appid: APPID
            name: list name
            tags: list content as DXFTags or (code, value) tuples, list name and
                curly braces '{' '}' tags will be added
        Raises:
            DXFValueError: XDATA `appid` do not exist

        N)rO   r   r   r   r^   rM   )r4   rA   rY   r,   r5   r2   Úxlists          r)   r_   zXData.replace_xlistÉ   s`   € ð  —‘˜“ˆð	Ü/°°eÓ<ˆDô ˜4 Ó&ˆØ�‰�EÔØ�‰�˜Õøô	 !ò 	ØŠDð	ús   “A ÁAÁAc                óš   — t        «       }| j                  j                  «       D ]  \  }}t        t	        ||«      «      ||<   Œ || _        y)z›Transform XDATA tags with group codes 1011, 1012, 1013, 1041 and
        1042 inplace. For more information see :ref:`xdata_internals` Internals.

        N)r1   r2   rS   r   Útransform_xdata_tags)r4   ÚmÚtransformed_dataÚkeyr,   s        r)   Ú	transformzXData.transformâ   sD   € ô
  ›6ÐØŸ™Ÿ™Ö*‰IˆC�Ü$(Ô)=¸dÀAÓ)FÓ$GÐ˜SÒ!ð +à$ˆ�	r.   r%   )r5   zOptional[Iterable[Tags]])r5   zIterable[Tags])rA   ÚstrÚreturnÚbool)r,   r   rl   ÚNone)rA   rk   r,   z(Iterable[Union[tuple[int, Any], DXFTag]]rl   rn   )rA   rk   rl   r   )rU   r   rl   rn   )rA   rk   rY   rk   rl   rm   )rA   rk   rY   rk   rl   zlist[tuple])rA   rk   rY   rk   r,   r   rl   rn   )rA   rk   rY   rk   rl   rn   )rg   r   rl   rn   )Ú__name__Ú
__module__Ú__qualname__r6   Úclassmethodr9   r=   rB   rF   r3   rM   rO   rQ   rV   rZ   rX   r`   rb   r_   rj   © r.   r)   r   r   +   s{   „ ô ð ò
ó ð
ò
ó"òIó	QðØðØ Hðà	óó,'ò!ó'óóó,2ó"&ó*ô2%r.   r   c           	   #  ó  K  — | D ]÷  }|\  }}|dk(  r't        ||j                  t        |«      «      «      –— Œ4|dk(  r't        ||j                  t        |«      «      «      –— Œ`|dk(  rPt        |«      }|j                  }|dkD  r/|j                  |«      j                  |«      }t        ||«      –— Œ°|–— Œµ|dk(  s|dk(  r5|j                  t        |dd«      «      }t        ||j                  «      –— Œô|–— Œù y ­w)Nió  iô  iõ  gê-�™—q=i  i  r   )r   rj   r   Útransform_directionÚ	magnitudeÚ	normalize)r,   rg   r(   r&   rE   ÚvecÚlengths          r)   rf   rf   í   sæ   è ø€ ÛˆØ‰ˆˆeØ�4Š<ä˜˜qŸ{™{¬4°«;Ó7Ó8Ó8Ø�TŠ\ä˜˜q×4Ñ4´T¸%³[ÓAÓBÓBØ�TŠ\ä�u“+ˆCØ—]‘]ˆFØ˜Š~Ø×+Ñ+¨CÓ0×:Ñ:¸6ÓB�Ü˜T 3Ó'Ó'à“	Ø�TŠ\˜T Tš\à×'Ñ'¬¨U°A°qÓ(9Ó:ˆCÜ˜˜sŸ}™}Ó-Ó-à‹Iñ- ùs   ‚C>D c                  óª   — e Zd ZdZeeeedœZedededediZ		 d	 dd„Z
ee	 d	 	 	 dd	„«       «       Zd
„ Zd„ Zd„ Zdd„Zd„ Zd„ Zd„ Zdd„Zdd„Zdd„Zy)r    z½Manage named XDATA lists as a list-like object.

    Stores just a few data types with fixed group codes:

        1000 str
        1010 Vec3
        1040 float
        1071 32bit int

    )éè  éò  é  é/  r{   r|   r}   r~   Nc                ó  — |€
t        «       }|| _        t        |«      | _        t        |«      | _        	 |j                  | j                  | j                  «      }| j                  |«      | _        y# t        $ r g }Y Œ$w xY w)a  Setup a XDATA user list `name` for the given `appid`.

        The data is stored in the given `xdata` object, or in a new created
        :class:`XData` instance if ``None``.
        Changes of the content has to be committed at the end to be stored in
        the underlying `xdata` object.

        Args:
            xdata (XData): underlying :class:`XData` instance, if ``None`` a
                new one will be created
            name (str): name of the user list
            appid (str): application specific AppID

        N)	r   r5   rk   Ú_appidÚ_namerX   r   Ú_parse_listÚ_data)r4   r5   rY   rA   r2   s        r)   r6   zXDataUserList.__init__   st   € ð" ˆ=Ü“GˆEØˆŒ
Ü˜%“jˆŒÜ˜“YˆŒ
ð	Ø—?‘? 4§;¡;°·
±
Ó;ˆDð  ×+Ñ+¨DÓ1ˆ�
øô ò 	ØŠDð	ús   µ&A2 Á2B Á?B c              #  ó†   K  — |j                   }|€t        «       }||_          | |||«      }|–— |j                  «        y­w)ax  Context manager to manage a XDATA list `name` for a given DXF
        `entity`. Appends the user list to the existing :class:`XData` instance
        or creates new :class:`XData` instance.

        Args:
            entity (DXFEntity): target DXF entity for the XDATA
            name (str): name of the user list
            appid (str): application specific AppID

        N©r5   r   Úcommit)r8   ÚentityrY   rA   r5   rd   s         r)   r‡   zXDataUserList.entity<  ó@   è ø€ ð —‘ˆØˆ=Ü“GˆEØ ˆFŒLÙ�E˜4 Ó'ˆØŠØ�‰�ùó   ‚?Ac                ó   — | S r%   rs   r<   s    r)   Ú	__enter__zXDataUserList.__enter__S  ó   € Øˆr.   c                ó$   — | j                  «        y r%   ©r†   ©r4   Úexc_typeÚexc_valÚexc_tbs       r)   Ú__exit__zXDataUserList.__exit__V  ó   € Ø�‰�r.   c                ó,   — t        | j                  «      S ©zReturn str(self).)rk   rƒ   r<   s    r)   Ú__str__zXDataUserList.__str__Y  ó   € ä�4—:‘:‹Ðr.   c                ó<   — | j                   j                  ||«       y r%   )rƒ   rL   )r4   ÚindexrE   s      r)   rL   zXDataUserList.insert]  s   € Ø�
‰
×Ñ˜% Õ'r.   c                ó    — | j                   |   S )zGet self[item].)rƒ   ©r4   Úitems     r)   Ú__getitem__zXDataUserList.__getitem__`  s   € à�z‰z˜$ÑÐr.   c                ó<   — | j                   j                  ||«       y)zSet self[item] to value.N)rƒ   Ú__setitem__)r4   r�   rE   s      r)   r    zXDataUserList.__setitem__d  s   € à�
‰
×Ñ˜t UÕ+r.   c                ó:   — | j                   j                  |«       y)zDelete self[item].N)rƒ   Ú__delitem__rœ   s     r)   r¢   zXDataUserList.__delitem__h  s   € à�
‰
×Ñ˜tÕ$r.   c                ó¾   — t        |«      }g }|dd D ]G  \  }}| j                  j                  |«      }|r|j                   ||«      «       Œ;t	        d|› �«      ‚ |S )Né   éÿÿÿÿzunsupported group code: )ÚlistÚ	converterrO   Úappendr   )r4   r,   r2   Úcontentr&   rE   Úfactorys          r)   r‚   zXDataUserList._parse_listl  se   € Ü�D‹zˆØˆØ  "›:‰KˆD�%Ø—n‘n×(Ñ(¨Ó.ˆGÙØ—‘™w u›~Õ.ä#Ð&>¸t¸fÐ$EÓFÐFð &ð ˆr.   c                ó,   — t        | j                  «      S ©zReturns len(self).)r;   rƒ   r<   s    r)   r=   zXDataUserList.__len__w  r˜   r.   c                ó´  — g }| j                   D ]–  }t        |t        «      r,t        |«      dkD  rt	        d«      ‚d|v sd|v rt	        d«      ‚| j
                  j                  t        |«      «      }|r|j                  t        ||«      «       Œ�t        dt        |«      › �«      ‚ | j                  j                  | j                  | j                  |«       y)á  Store all changes to the underlying :class:`XData` instance.
        This call is not required if using the :meth:`entity` context manager.

        Raises:
            DXFValueError: invalid chars ``"\n"`` or ``"\r"`` in a string
            DXFTypeError: invalid data type

        éÿ   z$string too long, max. 255 charactersÚ
Úz%found invalid line break '\n' or '\r'zinvalid type: N)rƒ   Ú
isinstancerk   r;   r   Úgroup_codesrO   Útyper¨   r   r   r5   r`   r€   r�   )r4   r2   rE   r&   s       r)   r†   zXDataUserList.commit{  s¾   € ð ˆØ—Z”ZˆEÜ˜%¤Ô%Ü�u“: Ò#Ü'Ð(NÓOÐOØ˜5‘= D¨E¡MÜ'ØAóð ð ×#Ñ#×'Ñ'¬¨U«Ó4ˆDÙØ—‘œF 4¨Ó/Õ0ä" ^´D¸³K°=Ð#AÓBÐBð  ð 	�
‰
×Ñ˜TŸ[™[¨$¯*©*°dÕ;r.   )NÚDefaultListÚEZDXF©r5   zOptional[XData])rµ   r¶   )r‡   r   rl   zIterator[XDataUserList])rš   Úintrl   rn   )r,   zIterable[tuple]rl   r¦   )rl   r¸   ©rl   rn   )ro   rp   rq   Ú__doc__rk   r   Úfloatr¸   r§   r³   r6   rr   r   r‡   r‹   r“   r—   rL   rž   r    r¢   r‚   r=   r†   rs   r.   r)   r    r      s®   „ ñ	ð ØØØñ	€Ið 	ˆTØˆdØˆtØˆTð	€Kð HOð2Ø$ó2ð8 Øà:AðØðà	 òó ó ðò*òòó(ò ò,ò%ó	óô<r.   r    c                  óš   — e Zd ZdZ	 d	 dd„Zdd„Zd„ Zd„ Zd„ Ze	e
	 d	 	 	 dd„«       «       Zed	„ «       Zd
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zdd„Zy)r!   a  Manage named XDATA lists as a dict-like object.

    Uses XDataUserList to store key, value pairs in XDATA.

    This class does not create the required AppID table entry, only the
    default AppID "EZDXF" exist by default.

    Implements the :class:`MutableMapping` interface.

    Nc                óR   — t        |||«      | _        | j                  «       | _        y)a  Setup a XDATA user dict `name` for the given `appid`.

        The data is stored in the given `xdata` object, or in a new created
        :class:`XData` instance if ``None``.
        Changes of the content has to be committed at the end to be stored in
        the underlying `xdata` object.

        Args:
            xdata (XData): underlying :class:`XData` instance, if ``None`` a
                new one will be created
            name (str): name of the user list
            appid (str): application specific AppID

        N)r    Ú_xlistÚ_parse_xlistÚ
_user_dict)r4   r5   rY   rA   s       r)   r6   zXDataUserDict.__init__¡  s$   € ô" $ E¨4°Ó7ˆŒØ*.×*;Ñ*;Ó*=ˆ�r.   c                ój   — | j                   rt        t        | j                   «      «      S t        «       S r%   )r¾   r1   r   r<   s    r)   r¿   zXDataUserDict._parse_xlistµ  s$   € Ø�;Š;Üœ˜dŸk™kÓ*Ó+Ð+ä“6ˆMr.   c                ó   — | S r%   rs   r<   s    r)   r‹   zXDataUserDict.__enter__»  rŒ   r.   c                ó$   — | j                  «        y r%   rŽ   r�   s       r)   r“   zXDataUserDict.__exit__¾  r”   r.   c                ó,   — t        | j                  «      S r–   )rk   rÀ   r<   s    r)   r—   zXDataUserDict.__str__Á  ó   € ä�4—?‘?Ó#Ð#r.   c              #  ó†   K  — |j                   }|€t        «       }||_          | |||«      }|–— |j                  «        y­w)ax  Context manager to manage a XDATA dict `name` for a given DXF
        `entity`. Appends the user dict to the existing :class:`XData` instance
        or creates new :class:`XData` instance.

        Args:
            entity (DXFEntity): target DXF entity for the XDATA
            name (str): name of the user list
            appid (str): application specific AppID

        Nr…   )r8   r‡   rY   rA   r5   Úxdicts         r)   r‡   zXDataUserDict.entityÅ  rˆ   r‰   c                ó.   — | j                   j                  S r%   )r¾   r5   r<   s    r)   r5   zXDataUserDict.xdataÜ  s   € à�{‰{× Ñ Ð r.   c                ó,   — t        | j                  «      S r¬   )r;   rÀ   r<   s    r)   r=   zXDataUserDict.__len__à  rÅ   r.   c                ó    — | j                   |   S )zGet self[key].©rÀ   ©r4   ri   s     r)   rž   zXDataUserDict.__getitem__ä  s   € à�‰˜sÑ#Ð#r.   c                óX   — t        |t        «      st        d«      ‚|| j                  |<   y)zxSet self[key] to value, key has to be a string.

        Raises:
            DXFTypeError: key is not a string

        zkey is not a stringN)r²   rk   r   rÀ   )r4   ri   r�   s      r)   r    zXDataUserDict.__setitem__è  s(   € ô ˜#œsÔ#ÜÐ4Ó5Ð5Ø#ˆ�‰˜Òr.   c                ó   — | j                   |= y)zDelete self[key].NrË   rÌ   s     r)   r¢   zXDataUserDict.__delitem__ó  s   € à�O‰O˜CÑ r.   c                ó,   — t        | j                  «      S )zImplement iter(self).)ÚiterrÀ   r<   s    r)   Ú__iter__zXDataUserDict.__iter__÷  s   € ä�D—O‘OÓ$Ð$r.   c                ó>   — 	 | j                   |= y# t        $ r Y yw xY w)z`Delete self[key], without raising a :class:`KeyError` if `key` does
        not exist.

        N)rÀ   ÚKeyErrorrÌ   s     r)   rQ   zXDataUserDict.discardû  s%   € ð
	Ø—‘ Ñ$øÜò 	Ùð	ús   ‚ �	›c                óä   — | j                   }|j                  «        | j                  j                  «       D ]'  \  }}|j	                  |«       |j	                  |«       Œ) |j                  «        y)r®   N)r¾   ÚclearrÀ   rS   r¨   r†   )r4   rd   ri   rE   s       r)   r†   zXDataUserDict.commit  sT   € ð —‘ˆØ�‰ŒØŸ/™/×/Ñ/Ö1‰JˆC�Ø�L‰L˜ÔØ�L‰L˜Õð 2ð 	�‰�r.   )NÚDefaultDictr¶   r·   )rl   r1   )rÖ   r¶   )r‡   r   rl   zIterator[XDataUserDict]r¹   )ro   rp   rq   rº   r6   r¿   r‹   r“   r—   rr   r   r‡   Úpropertyr5   r=   rž   r    r¢   rÑ   rQ   r†   rs   r.   r)   r!   r!   •  s•   „ ñ	ð HOð>Ø$ó>ó(òòò$ð Øà:AðØðà	 òó ó ðð* ñ!ó ð!ò$ò$ò	$ò!ò%òôr.   r!   )r,   r   rl   rm   )r,   r   rg   r   rl   zIterator[DXFTag])1Ú
__future__r   Útypingr   r   r   r   r   r	   r
   r   Ú
contextlibr   ÚloggingÚ
ezdxf.mathr   r   Úezdxf.lldxf.typesr   r   r   Úezdxf.lldxf.tagsr   Úezdxf.lldxf.constr   r   r   r   r   r   r   Úezdxf.toolsr   r"   r   Úezdxf.lldxf.repairr   Úezdxf.entitiesr   Úezdxf.lldxf.tagwriterr   Ú__all__Ú	getLoggerrH   r-   r   rf   r    r!   rs   r.   r)   Ú<module>ræ      s�   ðõ #÷	÷ 	ó 	õ &Û ç %ß EÑ EÝ !ß GÑ G÷ó õ Ý Ý ?áÝ(Ý7â
5€Ø	ˆ×	Ñ	˜7Ó	#€óD÷%ñ %óDô4K<�Oô K<ô\~�Nõ ~r.   