ó
    ych±N  ã                  ó¾  • S SK Jr  S SKJr  S SKJr  SSKJrJrJ	r	  SSK
JrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJr   " S S5      r " S	 S
\5      r " S S\5      r " S S\5      r  " S S\5      r! " S S\5      r" " S S\5      r# " S S\5      r$ " S S\5      r% " S S\5      r&\" SS9      S!S j5       r'\" SS9 S"       S#S jj5       r(g )$é    )Úannotations)Ú	lru_cache)Ú	getLoggeré   )ÚCOMMON_SAFE_ASCII_CHARACTERSÚTRACEÚUNICODE_SECONDARY_RANGE_KEYWORD)Úis_accentuatedÚ	is_arabicÚis_arabic_isolated_formÚis_case_variableÚis_cjkÚis_emoticonÚ	is_hangulÚis_hiraganaÚis_katakanaÚis_latinÚis_punctuationÚis_separatorÚ	is_symbolÚis_thaiÚis_unprintableÚremove_accentÚunicode_rangeÚis_cjk_uncommonc                  óJ   • \ rS rSrSrS	S jrS
S jrSS jr\SS j5       r	Sr
g)ÚMessDetectorPluginé!   zm
Base abstract class used for mess detection plugins.
All detectors MUST extend and implement given methods.
c                ó   • [         e)z0
Determine if given character should be fed in.
©ÚNotImplementedError©ÚselfÚ	characters     Ú^/var/www/djangovue.mamus.xyz/django/venv/lib/python3.13/site-packages/charset_normalizer/md.pyÚeligibleÚMessDetectorPlugin.eligible'   ó
   € ô "Ð!ó    c                ó   • [         e)zq
The main routine to be executed upon character.
Insert the logic in witch the text would be considered chaotic.
r    r"   s     r%   ÚfeedÚMessDetectorPlugin.feed-   s
   € ô
 "Ð!r)   c                ó   • [         e)z2
Permit to reset the plugin to the initial state.
r    ©r#   s    r%   ÚresetÚMessDetectorPlugin.reset4   r(   r)   c                ó   • [         e)zm
Compute the chaos ratio based on what your feed() has seen.
Must NOT be lower than 0.; No restriction gt 0.
r    r.   s    r%   ÚratioÚMessDetectorPlugin.ratio:   s
   € ô "Ð!r)   © N©r$   ÚstrÚreturnÚbool©r$   r6   r7   ÚNone©r7   r:   ©r7   Úfloat)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r&   r+   r/   Úpropertyr2   Ú__static_attributes__r4   r)   r%   r   r   !   s*   † ñô
"ô"ô"ð ó"ó ó"r)   r   c                  óP   • \ rS rSrS	S jrS
S jrSS jrS	S jr\SS j5       r	Sr
g)Ú TooManySymbolOrPunctuationPluginéC   c                óJ   • SU l         SU l        SU l        S U l        SU l        g )Nr   F)Ú_punctuation_countÚ_symbol_countÚ_character_countÚ_last_printable_charÚ_frenzy_symbol_in_wordr.   s    r%   Ú__init__Ú)TooManySymbolOrPunctuationPlugin.__init__D   s*   € Ø'(ˆÔØ"#ˆÔØ%&ˆÔà04ˆÔ!Ø,1ˆÕ#r)   c                ó"   • UR                  5       $ ©N©Úisprintabler"   s     r%   r&   Ú)TooManySymbolOrPunctuationPlugin.eligibleL   ó   € Ø×$Ñ$Ó&Ð&r)   c                óD  • U =R                   S-  sl         XR                  :w  av  U[        ;  al  [        U5      (       a  U =R                  S-  sl        OFUR                  5       SL a3  [        U5      (       a#  [        U5      SL a  U =R                  S-  sl        Xl        g )Nr   Fé   )	rK   rL   r   r   rI   Úisdigitr   r   rJ   r"   s     r%   r+   Ú%TooManySymbolOrPunctuationPlugin.feedO   s†   € Ø×Ò Ñ"Õð ×2Ñ2Ó2ØÔ!=Ó=ä˜i×(Ñ(Ø×'Ò'¨1Ñ,Ö'à×!Ñ!Ó# uÒ,Ü˜i×(Ñ(Ü 	Ó*¨eÒ3à×"Ò" aÑ'Õ"à$-Õ!r)   c                ó.   • SU l         SU l        SU l        g ©Nr   )rI   rK   rJ   r.   s    r%   r/   Ú&TooManySymbolOrPunctuationPlugin.reseta   s   € Ø"#ˆÔØ !ˆÔØˆÕr)   c                ó„   • U R                   S:X  a  gU R                  U R                  -   U R                   -  nUS:¼  a  U$ S$ )Nr   ç        ç333333Ó?)rK   rI   rJ   )r#   Úratio_of_punctuations     r%   r2   Ú&TooManySymbolOrPunctuationPlugin.ratiof   sO   € à× Ñ  AÓ%Øð ×#Ñ# d×&8Ñ&8Ñ8Ø×!Ñ!ñ'"Ðð (<¸sÓ'BÐ#ÐKÈÐKr)   )rK   rM   rL   rI   rJ   Nr;   r5   r9   r<   ©r>   r?   r@   rA   rN   r&   r+   r/   rC   r2   rD   r4   r)   r%   rF   rF   C   s,   † ô2ô'ô.ô$ð
 óLó óLr)   rF   c                  óP   • \ rS rSrS	S jrS
S jrSS jrS	S jr\SS j5       r	Sr
g)ÚTooManyAccentuatedPluginér   c                ó    • SU l         SU l        g r[   ©rK   Ú_accentuated_countr.   s    r%   rN   Ú!TooManyAccentuatedPlugin.__init__s   s   € Ø%&ˆÔØ'(ˆÕr)   c                ó"   • UR                  5       $ rQ   )Úisalphar"   s     r%   r&   Ú!TooManyAccentuatedPlugin.eligiblew   s   € Ø× Ñ Ó"Ð"r)   c                óz   • U =R                   S-  sl         [        U5      (       a  U =R                  S-  sl        g g ©Nr   )rK   r
   rh   r"   s     r%   r+   ÚTooManyAccentuatedPlugin.feedz   s4   € Ø×Ò Ñ"Õä˜)×$Ñ$Ø×#Ò# qÑ(Ö#ð %r)   c                ó    • SU l         SU l        g r[   rg   r.   s    r%   r/   ÚTooManyAccentuatedPlugin.reset€   s   € Ø !ˆÔØ"#ˆÕr)   c                ój   • U R                   S:  a  gU R                  U R                   -  nUS:¼  a  U$ S$ )Né   r^   gffffffÖ?rg   )r#   Úratio_of_accentuations     r%   r2   ÚTooManyAccentuatedPlugin.ratio„   s=   € à× Ñ  1Ó$Øà'+×'>Ñ'>À×AVÑAVÑ'VÐØ(=ÀÓ(EÐ$ÐNÈ3ÐNr)   )rh   rK   Nr;   r5   r9   r<   rb   r4   r)   r%   rd   rd   r   s,   † ô)ô#ô)ô$ð óOó óOr)   rd   c                  óP   • \ rS rSrS	S jrS
S jrSS jrS	S jr\SS j5       r	Sr
g)ÚUnprintablePluginé�   c                ó    • SU l         SU l        g r[   )Ú_unprintable_countrK   r.   s    r%   rN   ÚUnprintablePlugin.__init__Ž   s   € Ø'(ˆÔØ%&ˆÕr)   c                ó   • g©NTr4   r"   s     r%   r&   ÚUnprintablePlugin.eligible’   ó   € Ør)   c                óx   • [        U5      (       a  U =R                  S-  sl        U =R                  S-  sl        g rn   )r   rz   rK   r"   s     r%   r+   ÚUnprintablePlugin.feed•   s/   € Ü˜)×$Ñ$Ø×#Ò# qÑ(Õ#Ø×Ò Ñ"Ör)   c                ó   • SU l         g r[   )rz   r.   s    r%   r/   ÚUnprintablePlugin.resetš   s
   € Ø"#ˆÕr)   c                ó\   • U R                   S:X  a  gU R                  S-  U R                   -  $ )Nr   r^   rs   ©rK   rz   r.   s    r%   r2   ÚUnprintablePlugin.ratio�   s/   € à× Ñ  AÓ%Øà×'Ñ'¨!Ñ+¨t×/DÑ/DÑDÐDr)   r…   Nr;   r5   r9   r<   rb   r4   r)   r%   rw   rw   �   s,   † ô'ôô#ô
$ð óEó óEr)   rw   c                  óP   • \ rS rSrS	S jrS
S jrSS jrS	S jr\SS j5       r	Sr
g)ÚSuspiciousDuplicateAccentPluginé¥   c                ó.   • SU l         SU l        S U l        g r[   ©Ú_successive_countrK   Ú_last_latin_characterr.   s    r%   rN   Ú(SuspiciousDuplicateAccentPlugin.__init__¦   s   € Ø&'ˆÔØ%&ˆÔà15ˆÕ"r)   c                óF   • UR                  5       =(       a    [        U5      $ rQ   )rk   r   r"   s     r%   r&   Ú(SuspiciousDuplicateAccentPlugin.eligible¬   s   € Ø× Ñ Ó"×:¤x°	Ó':Ð:r)   c                ó¨  • U =R                   S-  sl         U R                  bª  [        U5      (       aš  [        U R                  5      (       a€  UR                  5       (       a4  U R                  R                  5       (       a  U =R                  S-  sl        [        U5      [        U R                  5      :X  a  U =R                  S-  sl        Xl        g rn   )rK   r�   r
   ÚisupperrŒ   r   r"   s     r%   r+   Ú$SuspiciousDuplicateAccentPlugin.feed¯   sž   € Ø×Ò Ñ"Õà×&Ñ&Ñ2Ü˜y×)Ñ)Ü˜t×9Ñ9×:Ñ:à× Ñ ×"Ñ" t×'AÑ'A×'IÑ'I×'KÑ'KØ×&Ò&¨!Ñ+Õ&ä˜YÓ'¬=¸×9SÑ9SÓ+TÓTØ×&Ò&¨!Ñ+Õ&Ø%.Õ"r)   c                ó.   • SU l         SU l        S U l        g r[   r‹   r.   s    r%   r/   Ú%SuspiciousDuplicateAccentPlugin.reset½   s   € Ø!"ˆÔØ !ˆÔØ%)ˆÕ"r)   c                ó\   • U R                   S:X  a  gU R                  S-  U R                   -  $ )Nr   r^   rW   )rK   rŒ   r.   s    r%   r2   Ú%SuspiciousDuplicateAccentPlugin.ratioÂ   s/   € à× Ñ  AÓ%Øà×&Ñ&¨Ñ*¨d×.CÑ.CÑCÐCr)   )rK   r�   rŒ   Nr;   r5   r9   r<   rb   r4   r)   r%   rˆ   rˆ   ¥   s,   † ô6ô;ô/ô*ð
 óDó óDr)   rˆ   c                  óP   • \ rS rSrS	S jrS
S jrSS jrS	S jr\SS j5       r	Sr
g)ÚSuspiciousRangeéÊ   c                ó.   • SU l         SU l        S U l        g r[   )Ú"_suspicious_successive_range_countrK   Ú_last_printable_seenr.   s    r%   rN   ÚSuspiciousRange.__init__Ë   s   € Ø78ˆÔ/Ø%&ˆÔØ04ˆÕ!r)   c                ó"   • UR                  5       $ rQ   rR   r"   s     r%   r&   ÚSuspiciousRange.eligibleÐ   rU   r)   c                óZ  • U =R                   S-  sl         UR                  5       (       d  [        U5      (       d
  U[        ;   a  S U l        g U R                  c  Xl        g [        U R                  5      n[        U5      n[        X#5      (       a  U =R                  S-  sl        Xl        g rn   )rK   Úisspacer   r   r�   r   Ú is_suspiciously_successive_rangerœ   )r#   r$   Úunicode_range_aÚunicode_range_bs       r%   r+   ÚSuspiciousRange.feedÓ   s”   € Ø×Ò Ñ"Õð ×Ñ×ÑÜ˜i×(Ñ(ØÔ8Ó8à(,ˆDÔ%Øà×$Ñ$Ñ,Ø(1Ô%Øä&3°D×4MÑ4MÓ&NˆÜ&3°IÓ&>ˆä+¨O×MÑMØ×3Ò3°qÑ8Õ3à$-Õ!r)   c                ó.   • SU l         SU l        S U l        g r[   )rK   rœ   r�   r.   s    r%   r/   ÚSuspiciousRange.resetê   s   € Ø !ˆÔØ23ˆÔ/Ø$(ˆÕ!r)   c                ó`   • U R                   S::  a  gU R                  S-  U R                   -  nU$ )Né   r^   rW   )rK   rœ   )r#   Úratio_of_suspicious_range_usages     r%   r2   ÚSuspiciousRange.ratioï   s<   € à× Ñ  BÓ&Øð ×3Ñ3°aÑ7Ø×!Ñ!ñ2"Ð'ð /Ð.r)   )rK   r�   rœ   Nr;   r5   r9   r<   rb   r4   r)   r%   r™   r™   Ê   s*   † ô5ô
'ô.ô.)ð
 ó/ó ó/r)   r™   c                  óP   • \ rS rSrS	S jrS
S jrSS jrS	S jr\SS j5       r	Sr
g)ÚSuperWeirdWordPluginéû   c                ó�   • SU l         SU l        SU l        SU l        SU l        SU l        SU l        SU l        SU l        SU l	        g )Nr   FÚ )
Ú_word_countÚ_bad_word_countÚ_foreign_long_countÚ_is_current_word_badÚ_foreign_long_watchrK   Ú_bad_character_countÚ_bufferÚ_buffer_accent_countÚ_buffer_glyph_countr.   s    r%   rN   ÚSuperWeirdWordPlugin.__init__ü   sQ   € Ø !ˆÔØ$%ˆÔØ()ˆÔ à*/ˆÔ!Ø).ˆÔ à%&ˆÔØ)*ˆÔ!àˆŒØ)*ˆÔ!Ø()ˆÕ r)   c                ó   • gr}   r4   r"   s     r%   r&   ÚSuperWeirdWordPlugin.eligible  r   r)   c                óê  • UR                  5       (       Ga  U =R                  U-  sl        [        U5      (       a  U =R                  S-  sl        U R                  SL ak  [        U5      SL d  [        U5      (       aM  [        U5      SL a?  [        U5      SL a1  [        U5      SL a#  [        U5      SL a  [        U5      SL a  SU l        [        U5      (       d@  [        U5      (       d0  [        U5      (       d   [        U5      (       d  [        U5      (       a  U =R                  S-  sl        g U R                  (       d  g UR                  5       (       d!  [        U5      (       d  [        U5      (       Ga-  U R                  (       Ga  U =R                  S-  sl        [!        U R                  5      nU =R"                  U-  sl        US:¼  aÂ  U R                  U-  S:¼  a  SU l        O§[        U R                  S   5      (       a^  U R                  S   R'                  5       (       a<  [)        S U R                   5       5      SL a  U =R*                  S-  sl        SU l        O,U R                  S:X  a  SU l        U =R*                  S-  sl        US:¼  aœ  U R                  (       a‹  [-        U R                  [/        S	U5      5       VVs/ s H  u  p4UR'                  5       (       d  M  UPM      nnnSnU(       a  [!        U5      U-  S
::  a  SnU(       d  U =R*                  S-  sl        SU l        U R$                  (       aD  U =R0                  S-  sl        U =R2                  [!        U R                  5      -  sl        SU l        SU l        SU l        S	U l        S	U l        g US;  aB  UR5                  5       SL a.  [7        U5      (       a  SU l        U =R                  U-  sl        g g g g s  snnf )Nr   FTé   ç      à?éÿÿÿÿc              3  ó@   #   • U  H  oR                  5       v •  M     g 7frQ   )r’   )Ú.0Ú_s     r%   Ú	<genexpr>Ú,SuperWeirdWordPlugin.feed.<locals>.<genexpr>8  s   é € Ð>²¨AŸI™IŸK˜K²ùs   ‚é   r   r_   r±   >   Ú-Ú<Ú=Ú>rÄ   Ú|Ú~)rk   r¸   r
   r¹   r¶   r   r   r   r   r   r   rº   r¢   r   r   r²   ÚlenrK   rµ   r’   Úallr´   ÚzipÚranger³   r·   rX   r   )r#   r$   Úbuffer_lengthÚcÚiÚcamel_case_dstÚprobable_camel_caseds          r%   r+   ÚSuperWeirdWordPlugin.feed  s:  € Ø×Ñ×ÒØ�LŠL˜IÑ%�LÜ˜i×(Ñ(Ø×)Ò)¨QÑ.Õ)à×(Ñ(¨EÒ1Ü˜iÓ(¨EÒ1´^ÀI×5NÑ5NÜ˜9Ó%¨Ò.Ü˜iÓ(¨EÒ1Ü 	Ó*¨eÒ3Ü 	Ó*¨eÒ3Ü˜IÓ&¨%Ò/à+/�Ô(ä�y×!Ñ!Ü˜Y×'Ñ'Ü˜y×)Ñ)Ü˜y×)Ñ)Ü˜9×%Ñ%à×(Ò(¨AÑ-Õ(ØØ�|�|Øà×Ñ×Ñ¤>°)×#<Ñ#<ÄÈY×@WÒ@WØ�l�lˆlØ×Ò Ñ!ÕÜ!$ T§\¡\Ó!2ˆMà×!Ò! ]Ñ2Õ!à Ó!Ø×,Ñ,¨}Ñ<ÀÓCØ04�DÕ-ô # 4§<¡<°Ñ#3×4Ñ4ØŸ™ RÑ(×0Ñ0×2Ñ2ÜÑ>°·²Ó>Ó>À%ÒGà×,Ò,°Ñ1Õ,Ø04�DÕ-Ø×-Ñ-°Ó2Ø04�DÔ-Ø×,Ò,°Ñ1Õ,Ø Ó" t×'?×'?ô !$ D§L¡L´%¸¸=Ó2IÔ Jô"â J™˜Ø—y‘y—{÷ Ù Jð ñ "ð
 .3Ð$æ!¤s¨>Ó':¸]Ñ'JÈcÓ'QØ+/Ð(æ+Ø×,Ò,°Ñ1Õ,Ø04�DÔ-à×(×(Ø×$Ò$¨Ñ)Õ$Ø×)Ò)¬S°·±Ó->Ñ>Õ)Ø,1�Ô)à',ˆDÔ$ØˆDŒLØ()ˆDÔ%Ø'(ˆDÕ$àÐ@Ó@Ø×!Ñ!Ó# uÒ,Ü˜)×$Ñ$à(,ˆDÔ%Ø�LŠL˜IÑ%ŽLð %ð -ð Aùó1"s   ËO/Ë+O/c                ót   • SU l         SU l        SU l        SU l        SU l        SU l        SU l        SU l        g )Nr±   Fr   )r¸   rµ   r¶   r³   r²   rK   r·   r´   r.   s    r%   r/   ÚSuperWeirdWordPlugin.reset_  sA   € ØˆŒØ$)ˆÔ!Ø#(ˆÔ Ø ˆÔØˆÔØ !ˆÔØ$%ˆÔ!Ø#$ˆÕ r)   c                óv   • U R                   S::  a  U R                  S:X  a  gU R                  U R                  -  $ )Né
   r   r^   )r²   r´   r·   rK   r.   s    r%   r2   ÚSuperWeirdWordPlugin.ratioi  s7   € à×Ñ˜rÓ! d×&>Ñ&>À!Ó&CØà×(Ñ(¨4×+@Ñ+@Ñ@Ð@r)   )
r·   r³   r¸   r¹   rº   rK   r´   r¶   rµ   r²   Nr;   r5   r9   r<   rb   r4   r)   r%   r®   r®   û   s.   † ô*ôôO&ôb%ð óAó óAr)   r®   c                  óT   • \ rS rSrSrS
S jrSS jrSS jrS
S jr\	SS j5       r
Srg	)ÚCjkUncommonPluginiq  z4
Detect messy CJK text that probably means nothing.
c                ó    • SU l         SU l        g r[   ©rK   Ú_uncommon_countr.   s    r%   rN   ÚCjkUncommonPlugin.__init__v  s   € Ø%&ˆÔØ$%ˆÕr)   c                ó   • [        U5      $ rQ   )r   r"   s     r%   r&   ÚCjkUncommonPlugin.eligiblez  s   € Ü�iÓ Ð r)   c                óz   • U =R                   S-  sl         [        U5      (       a  U =R                  S-  sl        g g rn   )rK   r   rá   r"   s     r%   r+   ÚCjkUncommonPlugin.feed}  s7   € Ø×Ò Ñ"Õä˜9×%Ñ%Ø× Ò  AÑ%Õ Øð &r)   c                ó    • SU l         SU l        g r[   rà   r.   s    r%   r/   ÚCjkUncommonPlugin.reset„  s   € Ø !ˆÔØ ˆÕr)   c                óp   • U R                   S:  a  gU R                  U R                   -  nUS:”  a  US-  $ S$ )Nrs   r^   rÀ   rÛ   rà   )r#   Úuncommon_form_usages     r%   r2   ÚCjkUncommonPlugin.ratioˆ  sD   € à× Ñ  1Ó$Øà%)×%9Ñ%9¸D×<QÑ<QÑ%QÐð ,?ÀÓ+DÐ" RÑ'ÐMÈ#ÐMr)   rà   Nr;   r5   r9   r<   )r>   r?   r@   rA   rB   rN   r&   r+   r/   rC   r2   rD   r4   r)   r%   rÞ   rÞ   q  s1   † ñô&ô!ôô!ð óNó óNr)   rÞ   c                  óP   • \ rS rSrS	S jrS
S jrSS jrS	S jr\SS j5       r	Sr
g)ÚArchaicUpperLowerPlugini”  c                óf   • SU l         SU l        SU l        SU l        SU l        S U l        SU l        g )NFr   T)Ú_bufÚ_character_count_since_last_sepÚ_successive_upper_lower_countÚ#_successive_upper_lower_count_finalrK   Ú_last_alpha_seenÚ_current_ascii_onlyr.   s    r%   rN   Ú ArchaicUpperLowerPlugin.__init__•  s9   € ØˆŒ	à45ˆÔ,à23ˆÔ*Ø89ˆÔ0à%&ˆÔà,0ˆÔØ)-ˆÕ r)   c                ó   • gr}   r4   r"   s     r%   r&   Ú ArchaicUpperLowerPlugin.eligible¢  r   r)   c                ó¤  • UR                  5       =(       a    [        U5      nUSL nU(       aš  U R                  S:”  aŠ  U R                  S::  aA  UR                  5       SL a.  U R                  SL a  U =R
                  U R                  -  sl        SU l        SU l        S U l        SU l        U =R                  S-  sl	        SU l        g U R                  SL a  UR                  5       SL a  SU l        U R                  b£  UR                  5       (       a  U R                  R                  5       (       d4  UR                  5       (       aS  U R                  R                  5       (       a4  U R                  SL a  U =R                  S-  sl        SU l        OSU l        OSU l        U =R                  S-  sl	        U =R                  S-  sl        Xl        g )NFr   é@   r   TrW   )rk   r   rð   rX   rô   rò   rñ   ró   rï   rK   Úisasciir’   Úislower)r#   r$   Úis_concernedÚ	chunk_seps       r%   r+   ÚArchaicUpperLowerPlugin.feed¥  s‹  € Ø ×(Ñ(Ó*×JÔ/?À	Ó/JˆØ  EÐ)ˆ	æ˜×=Ñ=ÀÓAà×4Ñ4¸Ó:Ø×%Ñ%Ó'¨5Ò0Ø×,Ñ,°Ò5à×8Ò8Ø×6Ñ6ñÕ8ð 23ˆDÔ.Ø34ˆDÔ0Ø$(ˆDÔ!ØˆDŒIØ×!Ò! QÑ&Õ!Ø'+ˆDÔ$àà×#Ñ# tÒ+°	×0AÑ0AÓ0CÀuÒ0LØ',ˆDÔ$à× Ñ Ñ,Ø×!Ñ!×#Ñ#¨×(=Ñ(=×(EÑ(E×(GÑ(GØ×!Ñ!×#Ñ#¨×(=Ñ(=×(EÑ(E×(GÑ(Gà—9‘9 Ò$Ø×6Ò6¸!Ñ;Õ6Ø %�D•Ià $�D•Ià!�”	à×Ò Ñ"ÕØ×,Ò,°Ñ1Õ,Ø )Õr)   c                óf   • SU l         SU l        SU l        SU l        S U l        SU l        SU l        g )Nr   FT)rK   rð   rñ   rò   ró   rï   rô   r.   s    r%   r/   ÚArchaicUpperLowerPlugin.resetÏ  s9   € Ø !ˆÔØ/0ˆÔ,Ø-.ˆÔ*Ø34ˆÔ0Ø $ˆÔØˆŒ	Ø#'ˆÕ r)   c                óV   • U R                   S:X  a  gU R                  U R                   -  $ )Nr   r^   )rK   rò   r.   s    r%   r2   ÚArchaicUpperLowerPlugin.ratioØ  s*   € à× Ñ  AÓ%Øà×7Ñ7¸$×:OÑ:OÑOÐOr)   )rï   rK   rð   rô   ró   rñ   rò   Nr;   r5   r9   r<   rb   r4   r)   r%   rí   rí   ”  s-   † ô.ôô(*ôT(ð óPó óPr)   rí   c                  óP   • \ rS rSrS	S jrS	S jrS
S jrSS jr\SS j5       r	Sr
g)ÚArabicIsolatedFormPluginià  c                ó    • SU l         SU l        g r[   ©rK   Ú_isolated_form_countr.   s    r%   rN   Ú!ArabicIsolatedFormPlugin.__init__á  s   € Ø%&ˆÔØ)*ˆÕ!r)   c                ó    • SU l         SU l        g r[   r  r.   s    r%   r/   ÚArabicIsolatedFormPlugin.resetå  s   € Ø !ˆÔØ$%ˆÕ!r)   c                ó   • [        U5      $ rQ   )r   r"   s     r%   r&   Ú!ArabicIsolatedFormPlugin.eligibleé  s   € Ü˜Ó#Ð#r)   c                óz   • U =R                   S-  sl         [        U5      (       a  U =R                  S-  sl        g g rn   )rK   r   r  r"   s     r%   r+   ÚArabicIsolatedFormPlugin.feedì  s4   € Ø×Ò Ñ"Õä" 9×-Ñ-Ø×%Ò%¨Ñ*Ö%ð .r)   c                óZ   • U R                   S:  a  gU R                  U R                   -  nU$ )Nrs   r^   r  )r#   Úisolated_form_usages     r%   r2   ÚArabicIsolatedFormPlugin.ratioò  s0   € à× Ñ  1Ó$Øà%)×%>Ñ%>À×AVÑAVÑ%VÐà"Ð"r)   r  Nr;   r5   r9   r<   )r>   r?   r@   rA   rN   r/   r&   r+   rC   r2   rD   r4   r)   r%   r  r  à  s*   † ô+ô&ô$ô+ð ó#ó ó#r)   r  é   )Úmaxsizec                ó.  • U b  Uc  gX:X  a  gSU ;   a  SU;   a  gSU ;   d  SU;   a  gSU ;   d  SU;   a  SU ;   d  SU;   a  gU R                  S5      UR                  S5      p2U H  nU[        ;   a  M  XC;   d  M    g   U S;   US;   peU(       d  U(       a  SU ;   d  SU;   a  gU(       a  U(       a  gS	U ;   d  S	U;   a  SU ;   d  SU;   a  gU S
:X  d  US
:X  a  gSU ;   d  SU;   d  U S;   a-  US;   a'  SU ;   d  SU;   a  gSU ;   d  SU;   a  gU S
:X  d  US
:X  a  gg)zY
Determine if two Unicode range seen next to each other can be considered as suspicious.
TFÚLatinÚ	EmoticonsÚ	CombiningÚ )ÚHiraganaÚKatakanaÚCJKÚHangulzBasic Latin)r  r  ÚPunctuationÚForms)Úsplitr	   )r¤   r¥   Úkeywords_range_aÚkeywords_range_bÚelÚrange_a_jp_charsÚrange_b_jp_charss          r%   r£   r£   ü  sw  € ð Ñ /Ñ"9ØàÓ)Øà�/Ó! g°Ó&@Øà�oÓ%¨¸Ó)GØð 	�?Ó" g°Ó&@Ø�Ó&¨+¸Ó*Hàð 	×Ñ˜cÓ"Ø×Ñ˜cÓ"ð 'ó
 ˆØÔ0Ó0ÙØÕ!Ùñ	 ð 	ð
ñ	
ð
 	Ð3Ñ3ð 'ö 	Ö,Ø�Ó  E¨_Ó$<àÞÖ,Øà�?Ó" h°/Ó&AØ�OÓ# u°Ó'?ØØ˜mÓ+¨À-Ó/OØð 	�Ó  E¨_Ó$<ØÐ3Ó3ØÐ7Ó7à˜OÓ+¨}ÀÓ/OØØ�oÓ%¨°OÓ)CØØ˜mÓ+¨À-Ó/OØàr)   i   c           	     ó$  • [         R                  5        Vs/ s H	  o3" 5       PM     nn[        U 5      S-   nSnUS:  a  SnOUS::  a  SnOSn[        U S-   [	        U5      5       Hh  u  p‰U H,  n
U
R                  U5      (       d  M  U
R                  U5        M.     U	S	:”  a  X—-  S	:X  d
  X•S-
  :X  d  MO  [        S
 U 5       5      nXa:¼  d  Mh    O   U(       a©  [        S5      nUR                  [        SU SU SU 35        [        U 5      S:”  a8  UR                  [        SU SS  35        UR                  [        SU SS  35        U H2  nUR                  [        UR                   SUR                   35        M4     [        US5      $ s  snf )zo
Compute a mess ratio given a decoded bytes sequence. The maximum threshold does stop the computation earlier.
r   r^   i   é    r  rù   é€   Ú
r   c              3  ó8   #   • U  H  oR                   v •  M     g 7frQ   )r2   )rÃ   Údts     r%   rÅ   Úmess_ratio.<locals>.<genexpr>e  s   é € Ð!?²Y¨r§(¦(²Yùs   ‚Úcharset_normalizerzIMess-detector extended-analysis start. intermediary_mean_mess_ratio_calc=z mean_mess_ratio=z maximum_threshold=é   zStarting with: NzEnding with: iðÿÿÿz: é   )r   Ú__subclasses__rÎ   rÐ   rÑ   r&   r+   Úsumr   Úlogr   Ú	__class__r2   Úround)Údecoded_sequenceÚmaximum_thresholdÚdebugÚmd_classÚ	detectorsÚlengthÚmean_mess_ratioÚ!intermediary_mean_mess_ratio_calcr$   ÚindexÚdetectorÚloggerr*  s                r%   Ú
mess_ratior?  F  s¯  € ô $6×#DÑ#DÔ#Fó+Ú#F�xˆŽ
Ñ#Fð ð +ô Ð&Ó'¨!Ñ+€Fà €Oà�ƒ|Ø13Ñ)Ø	�4‹Ø,.Ñ)à,/Ð)äÐ 0°4Ñ 7¼¸v»ÖGÑˆ	Û!ˆHØ× Ñ  ×+Ó+Ø—‘˜iÖ(ñ "ð
 �A‹I˜%ÑCÀqÓHØ˜q‘jÕ Ü!Ñ!?±YÓ!?Ó?ˆOàÕ3Ùñ Hö ÜÐ/Ó0ˆà�
‰
Üð1Ø1RÐ0SÐSdÐetÐduð v!Ø!2Ð 3ð5ô	
ô ÐÓ  2Ó%Ø�J‰J”u Ð0@ÀÀ"Ð0EÐ/FÐGÔHØ�J‰J”u Ð.>¸s¸uÐ.EÐ-FÐGÔHãˆBØ�J‰J”u §¡ ¨b°·±°
Ð;Ö<ñ ô � !Ó$Ð$ùò[+s   —FN)r¤   ú
str | Noner¥   r@  r7   r8   )gš™™™™™É?F)r4  r6   r5  r=   r6  r8   r7   r=   ))Ú
__future__r   Ú	functoolsr   Úloggingr   Úconstantr   r   r	   Úutilsr
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rF   rd   rw   rˆ   r™   r®   rÞ   rí   r  r£   r?  r4   r)   r%   Ú<module>rF     s<  ðÝ "å Ý ÷ñ ÷
÷ ÷ ÷ ÷ ÷,"ñ "ôD,LÐ'9ô ,Lô^OÐ1ô Oô6EÐ*ô Eô0"DÐ&8ô "DôJ./Ð(ô ./ôbsAÐ-ô sAôl NÐ*ô  NôFIPÐ0ô IPôX#Ð1ô #ñ8 �4ÑðFØðFØ2<ðFà	óFó ðFñR �4ÑàINð4%Øð4%Ø.3ð4%ØBFð4%à
ô4%ó ñ4%r)   