+
    € ’eò  ã                   ó¤   € ^ RI t ^ RIt] P                  ]! ] P                  4      ]! ] P                  4      ,          ,           t ! R R4      tR tR# )é    Nc                   ór   a € ] tR t^t o Rt]3V 3R lR lltR tR tR t	R t
R tR	 tR
 tV 3R ltRtV tR# )Ú
Translatorz¿
>>> Translator('xyz')
Traceback (most recent call last):
...
AssertionError: Invalid separators

>>> Translator('')
Traceback (most recent call last):
...
AssertionError: Invalid separators
c                ó    <€ V ^8„  d   QhRS[ /# ©é   Úseps©Ústr)ÚformatÚ__classdict__s   "€Ú`/home/ubuntu/.hermes/tools/python-3.14.9+20261021-linux-x64/lib/python3.14/zipfile/_path/glob.pyÚ__annotate__ÚTranslator.__annotate__   s   ø€ ÷ ñ ™Sñ ó    c                ój   € V'       d   \        V4      \        \        4      8:  g   Q R 4       hWn        R# )zInvalid separatorsN)ÚsetÚ_default_sepsr   )Úselfr   s   &&r   Ú__init__ÚTranslator.__init__   s&   € ßœ˜D›	¤S¬Ó%7Ô7ÐMÐ9MÓMÐ7ØŽ	r   c                ó`   € V P                  V P                  V P                  V4      4      4      # )z8
Given a glob pattern, produce a regex that matches it.
)ÚextendÚ
match_dirsÚtranslate_core©r   Úpatterns   &&r   Ú	translateÚTranslator.translate   s'   € ð �{‰{˜4Ÿ?™?¨4×+>Ñ+>¸wÓ+GÓHÓIÐIr   c                ó   € RV R2# )z·
Extend regex for pattern-wide concerns.

Apply '(?s:)' to create a non-matching group that
matches newlines (valid on Unix).

Append '\z' to imply fullmatch even when match is used.
z(?s:z)\z© r   s   &&r   r   ÚTranslator.extend    s   € ð �w�i˜sÐ#Ð#r   c                ó   € V R2# )zl
Ensure that zipfile.Path directory names are matched.

zipfile.Path directory names always end in a slash.
z[/]?r    r   s   &&r   r   ÚTranslator.match_dirs+   s   € ð �)˜4Ð Ð r   c           
     óž   € V P                  V4       RP                  \        V P                  \	        V P                  V4      4      4      4      # )z÷
Given a glob pattern, produce a regex that matches it.

>>> t = Translator()
>>> t.translate_core('*.txt').replace('\\\\', '')
'[^/]*\\.txt'
>>> t.translate_core('a?txt')
'a[^/]txt'
>>> t.translate_core('**/*').replace('\\\\', '')
'.*/[^/][^/]*'
Ú )Úrestrict_rglobÚjoinÚmapÚreplaceÚseparateÚstar_not_emptyr   s   &&r   r   ÚTranslator.translate_core3   s<   € ð 	×Ñ˜GÔ$Ø�w‰w”s˜4Ÿ<™<¬°$×2EÑ2EÀgÓ2NÓ)OÓPÓQÐQr   c                ó"  € VP                  R4      ;'       gx    \        P                  ! VP                  ^ 4      4      P                  RR4      P                  RR\        P                  ! V P                  4       R24      P                  RR4      # )	z=
Perform the replacements for a match from :func:`separate`.
r   z\*\*z.*z\*ú[^z]*z\?z[^/])ÚgroupÚreÚescaper)   r   )r   Úmatchs   &&r   r)   ÚTranslator.replaceB   sn   € ð �{‰{˜5Ó!÷ 
ð 
Ü�IŠI�e—k‘k !“nÓ%ß‰W�X˜uÓ%ß‰W�U˜r¤"§)¢)¨D¯I©IÓ"6Ð!7°rÐ:Ó;ß‰W�U˜GÓ$ð		
r   c                ó  € R\         P                  ! V P                  4       R2p\         P                  ! W!4      p\        ;QJ d    R V 4       F  '       g   K   RM	  RM! R V 4       4      '       d   \        R4      hR# )zÄ
Raise ValueError if ** appears in anything but a full path segment.

>>> Translator().translate('**foo')
Traceback (most recent call last):
...
ValueError: ** must appear alone in a path segment
Ú[ú]+c              3   óF   "  € T F  pR V9   ;'       d    VR 8g  x € K  	  R# 5i)z**Nr    )Ú.0Úsegments   & r   Ú	<genexpr>Ú,Translator.restrict_rglob.<locals>.<genexpr>X   s#   é € ÐKÁ(°wˆt�w‰×2Ð2 7¨d¡?Ô2Ã(ùs   ‚!“!TFz&** must appear alone in a path segmentN)r0   r1   r   ÚsplitÚanyÚ
ValueError)r   r   Úseps_patternÚsegmentss   &&  r   r&   ÚTranslator.restrict_rglobM   sa   € ð œBŸIšI d§i¡iÓ0Ð1°Ð4ˆÜ—8’8˜LÓ2ˆß‹3ÑKÁ(ÓK�3�3Š3ÑKÁ(ÓK×KÒKÜÐEÓFÐFñ Lr   c                ó~   € R pR\         P                  ! V P                  4       R2p\         P                  ! W2V4      # )z0
Ensure that * will not match an empty segment.
c                 ó:   € V P                  ^ 4      pVR8X  d   R# T# )r   Ú*z?*)r/   )r2   r9   s   & r   Úhandle_segmentÚ1Translator.star_not_empty.<locals>.handle_segment`   s    € Ø—k‘k !“nˆGØ" cœ>�4Ð6¨wÐ6r   r.   r6   )r0   r1   r   Úsub)r   r   rE   Únot_seps_patterns   &&  r   r+   ÚTranslator.star_not_empty[   s8   € ò
	7ð !¤§¢¨4¯9©9Ó!5Ð 6°bÐ9ÐÜ�vŠvÐ&¸Ó@Ð@r   c                ó&   <€ V ^8„  d   Qh/ S[ ;R&   # r   r	   )r   r   s   "€r   r   r      s   ø‡ ‚ ñ �Iò r   )r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r   r   r   r   r   r)   r&   r+   Ú__annotate_func__Ú__static_attributes__Ú__classdictcell__)r   s   @r   r   r      sH   ø‡ € ñ
ð $1÷ ò òJò	$ò!òRò	
òGò
A÷i ƒ r   r   c                ó0   € \         P                  ! RV 4      # )z»
Separate out character sets to avoid translating their contents.

>>> [m.group(0) for m in separate('*.txt')]
['*.txt']
>>> [m.group(0) for m in separate('a[?]txt')]
['a', '[?]', 'txt']
z+([^\[]+)|(?P<set>[\[].*?[\]])|([\[][^\]]*$))r0   Úfinditer)r   s   &r   r*   r*   h   s   € ô �;Š;ÐEÀwÓOÐOr   )	Úosr0   Úsepr
   ÚaltsepÚboolr   r   r*   r    r   r   Ú<module>rY      sC   ðÛ 	Û 	à—‘™˜RŸY™Y›©$¨r¯y©y«/Õ9Õ9€÷^Añ ^AôB	Pr   