+
    iv                      a  0 t $ ^ RIHt ^ RIt^ RIHt ^ RIHt ]P                  R(8  d   ^ RI	H
t
 M ^ RIH
t
 ^RIHtHtHtHtHtHtHtHtHtHtHtHtHt ^RIHtHtHtHtH t H!t!H"t" ]],          ],          ],          ],          t#R	]$R
&   ]
 ! R R4      4       t% ! R R4      t&]
 ! R R]&4      4       t']
 ! R R]&4      4       t(]
 ! R R]&4      4       t)]
 ! R R]&4      4       t*]
 ! R R]&4      4       t+]
 ! R R]&4      4       t,]
 ! R R]&4      4       t-]
 ! R R]&4      4       t.]
 ! R R ]&4      4       t/]! R!R"7      R# R$ l4       t0]! R%R"7      R)R& R' ll4       t1R#   ] d    R t
 EL1i ; i)*    )annotationsN)	lru_cache)	getLogger)finalc                    V # )N )clss   &h/Users/igloo/.openclaw/workspace/scratch/fb_ad_env/lib/python3.14/site-packages/charset_normalizer/md.pyr   r      s    J    )COMMON_CJK_CHARACTERSCOMMON_SAFE_ASCII_CHARACTERSTRACEUNICODE_SECONDARY_RANGE_KEYWORD_ACCENTUATED_ARABIC_ARABIC_ISOLATED_FORM_CJK_HANGUL	_HIRAGANA	_KATAKANA_LATIN_THAI)_character_flagsis_emoticonis_punctuationis_separator	is_symbolremove_accentunicode_rangeint_GLYPH_MASKc                  6    ] tR t^/tRtRtR R ltR R ltRtR# )	CharInfouc  Pre-computed character properties shared across all detectors.

Instantiated once and reused via :meth:`update` on every character
in the hot loop so that redundant calls to str methods
(``isalpha``, ``isupper``, …) and cached utility functions
(``_character_flags``, ``is_punctuation``, …) are avoided when
several plugins need the same information.
c                   V ^8  d   QhRR/#    returnNoner   )formats   "r
   __annotate__CharInfo.__annotate__N   s      $ r   c                	    R V n         RV n        RV n        RV n        RV n        RV n        RV n        RV n        RV n        ^ V n	        RV n
        RV n        RV n        RV n        RV n        RV n        RV n        R# ) FN	character	printablealphaupperlowerspacedigitis_asciicase_variableflagsaccentuatedlatinis_cjk	is_arabicis_glyphpunctsymselfs   &r
   __init__CharInfo.__init__N   s{     $ 
 
 
 
 
##(
!& 
!$# 
r   c                    V ^8  d   QhRRRR/# )r&   r/   strr'   r(   r   )r)   s   "r
   r*   r+   a   s"     jI jI jI jIr   c                   Wn         \        V4      pV^8  EdQ   RV n        RV n        RV n        RV n        RV n        ^ATu;8:  d   ^Z8:  dW   M MSRV n        RV n        RV n	        RV n
        RV n        RV n        RV n        \        V n        RV n        RV n        RV n        R# ^aTu;8:  d   ^z8:  dW   M MSRV n        RV n        RV n	        RV n
        RV n        RV n        RV n        \        V n        RV n        RV n        RV n        R# ^0Tu;8:  d   ^98:  dS   M MORV n        RV n        RV n	        RV n
        RV n        RV n        RV n        ^ V n        RV n        RV n        RV n        R# V^ 8X  g   ^	Tu;8:  d   ^8:  dV   M MRRV n        RV n        RV n	        RV n
        RV n        V^ 8H  V n        RV n        ^ V n        RV n        RV n        RV n        R# VP'                  4       V n        RV n        RV n        RV n	        RV n
        RV n        RV n        ^ V n        RV n        V P                  '       d   \)        V4      MRV n        V P                  '       d   \+        V4      MRV n        R# RV n        VP'                  4       V n        VP-                  4       V n        VP/                  4       V n        VP1                  4       V n	        VP3                  4       V n
        VP5                  4       V n        V P                  V P                  8g  V n        V P                  '       d   \7        V4      pM^ pW0n        \9        V\:        ,          4      V n        \9        V\        ,          4      V n        \9        V\<        ,          4      V n        \9        V\>        ,          4      V n        \9        V\@        ,          4      V n        V P                  '       d   \)        V4      MRV n        V P                  '       d   \+        V4      MRV n        R# )zBUpdate all properties for *character* (called once per character).TFN)!r/   ordr6   r9   r;   r<   r=   r1   r2   r3   r4   r5   r0   r7   r   r8   r:   r>   r?   isprintabler   r   isalphaisupperislowerisspaceisdigitr   boolr   r   r   r!   )rA   r/   or8   s   &&  r
   updateCharInfo.updatea   s@   " Ys7 DM$DDK"DN!DMQ}"}!
!
"
"
"
!%%)"#
!
"
 qC!
"
!
"
"
!%%)"#
!
"
 qB"
"
"
"
!
!%%*"
"
"
 bQ!\r\"
"
"
!
"
!"b%*"
"
"
  "+!6!6!8"
"
"
"
"
%*"
"
:>...^I6e
37>>>9Y/u "DM&224DN"**,DJ"**,DJ"**,DJ"**,DJ"**,DJ!%tzz!9D zzz(3J#EL$89Defn-DJut|,DK!%'/2DN !45DM 7;nnn	2%DJ/3~~~y+5DHr   )r9   r1   r7   r/   r5   r8   r<   r6   r;   r=   r:   r3   r0   r>   r4   r?   r2   Nr.   )	__name__
__module____qualname____firstlineno____doc__	__slots__rB   rP   __static_attributes__r   r   r
   r#   r#   /   s!    I(&jI jIr   r#   c                  L    ] tR t^tRtRtR R ltR R lt]R R l4       t	Rt
R	# )
MessDetectorPluginzm
Base abstract class used for mess detection plugins.
All detectors MUST extend and implement given methods.
c               $    V ^8  d   QhRRRRRR/# r&   r/   rE   infor#   r'   r(   r   )r)   s   "r
   r*   MessDetectorPlugin.__annotate__   s!     " "3 "h "4 "r   c                    \         h)zq
The main routine to be executed upon character.
Insert the logic in witch the text would be considered chaotic.
NotImplementedErrorrA   r/   r]   s   &&&r
   	feed_infoMessDetectorPlugin.feed_info   s
    
 "!r   c                   V ^8  d   QhRR/# r%   r   )r)   s   "r
   r*   r^      s     " "t "r   c                    \         h)z2
Permit to reset the plugin to the initial state.
r`   r@   s   &r
   resetMessDetectorPlugin.reset   s
     "!r   c                   V ^8  d   QhRR/# r&   r'   floatr   )r)   s   "r
   r*   r^      s     " "u "r   c                    \         h)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   r   N)rR   rS   rT   rU   rV   rW   rc   rg   propertyrm   rX   r   r   r
   rZ   rZ      s,    
 I"" " "r   rZ   c                  T    ] tR t^tRtR R ltR R ltR R lt]R R l4       t	R	t
R
# ) TooManySymbolOrPunctuationPluginc                   V ^8  d   QhRR/# r%   r   )r)   s   "r
   r*   -TooManySymbolOrPunctuationPlugin.__annotate__   s     2 2$ 2r   c                	L    ^ V n         ^ V n        ^ V n        RV n        RV n        R# r   NF_punctuation_count_symbol_count_character_count_last_printable_char_frenzy_symbol_in_wordr@   s   &r
   rB   )TooManySymbolOrPunctuationPlugin.__init__   s*    '("#%&04!,1#r   c               $    V ^8  d   QhRRRRRR/# r\   r   )r)   s   "r
   r*   rs      s!     . .3 .h .4 .r   c                n   V ;P                   ^,          un         WP                  8w  d   V\        9  d{   VP                  '       d   V ;P                  ^,          un        MNVP
                  '       g=   VP                  '       d+   \        V4      '       g   V ;P                  ^,          un        Wn        R# 1Optimized feed using pre-computed character info.N)	ry   rz   r   r>   rw   r5   r?   r   rx   rb   s   &&&r
   rc   *TooManySymbolOrPunctuationPlugin.feed_info   sv    " 222!==zzz''1,'ZZZDHHH[5K5K""a'"$-!r   c                   V ^8  d   QhRR/# r%   r   )r)   s   "r
   r*   rs     s      t r   c                	0    ^ V n         ^ V n        ^ V n        R# r   N)rw   ry   rx   r@   s   &r
   rg   &TooManySymbolOrPunctuationPlugin.reset  s    "# !r   c                   V ^8  d   QhRR/# rj   r   )r)   s   "r
   r*   rs     s     L Lu Lr   c                	    V P                   ^ 8X  d   R# V P                  V P                  ,           V P                   ,          pVR8  d   V# R# )r           333333?)ry   rw   rx   )rA   ratio_of_punctuations   & r
   rm   &TooManySymbolOrPunctuationPlugin.ratio  sO      A% ##d&8&88!!'" (<s'B#KKr   )ry   r{   rz   rw   rx   Nrv   rR   rS   rT   rU   rW   rB   rc   rg   ro   rm   rX   r   r   r
   rq   rq      s.    I2.
 L Lr   rq   c                  T    ] tR tRtRtR R ltR R ltR R lt]R R	 l4       t	R
t
R# )TooManyAccentuatedPlugini  c                   V ^8  d   QhRR/# r%   r   )r)   s   "r
   r*   %TooManyAccentuatedPlugin.__annotate__"  s     ) )$ )r   c                	"    ^ V n         ^ V n        R# r   ry   _accentuated_countr@   s   &r
   rB   !TooManyAccentuatedPlugin.__init__"  s    %&'(r   c               $    V ^8  d   QhRRRRRR/# r\   r   )r)   s   "r
   r*   r   &  s!     ) )3 )h )4 )r   c                    V ;P                   ^,          un         VP                  '       d   V ;P                  ^,          un        R# R# r   )ry   r9   r   rb   s   &&&r
   rc   "TooManyAccentuatedPlugin.feed_info&  s5    "##q(# r   c                   V ^8  d   QhRR/# r%   r   )r)   s   "r
   r*   r   -  s     $ $t $r   c                	"    ^ V n         ^ V n        R# r   r   r@   s   &r
   rg   TooManyAccentuatedPlugin.reset-  s     !"#r   c                   V ^8  d   QhRR/# rj   r   )r)   s   "r
   r*   r   2  s     O Ou Or   c                	x    V P                   ^8  d   R# V P                  V P                   ,          pVR8  d   V# R# )   r   gffffff?r   )rA   ratio_of_accentuations   & r
   rm   TooManyAccentuatedPlugin.ratio1  s=      1$'+'>'>AVAV'V(=(E$N3Nr   )r   ry   Nr   r   r   r   r
   r   r     s,    :I))$ O Or   r   c                  T    ] tR tRtRtR R ltR R ltR R lt]R R	 l4       t	R
t
R# )UnprintablePlugini:  c                   V ^8  d   QhRR/# r%   r   )r)   s   "r
   r*   UnprintablePlugin.__annotate__>  s     ' '$ 'r   c                	"    ^ V n         ^ V n        R# r   _unprintable_country   r@   s   &r
   rB   UnprintablePlugin.__init__>  s    '(%&r   c               $    V ^8  d   QhRRRRRR/# r\   r   )r)   s   "r
   r*   r   B  s!     	# 	#3 	#h 	#4 	#r   c                    VP                   '       g:   VP                  '       g(   VR8w  d!   VR8w  d   V ;P                  ^,          un        V ;P                  ^,          un        R# )r   u   ﻿N)r4   r0   r   ry   rb   s   &&&r
   rc   UnprintablePlugin.feed_infoB  sH     


NNNV#X%##q(#"r   c                   V ^8  d   QhRR/# r%   r   )r)   s   "r
   r*   r   M  s     $ $t $r   c                	    ^ V n         R# r   )r   r@   s   &r
   rg   UnprintablePlugin.resetM  s
    "#r   c                   V ^8  d   QhRR/# rj   r   )r)   s   "r
   r*   r   Q  s     E Eu Er   c                	p    V P                   ^ 8X  d   R# V P                  ^,          V P                   ,          # r   r   ry   r   r@   s   &r
   rm   UnprintablePlugin.ratioP  s/      A%''!+t/D/DDDr   r   Nr   r   r   r   r
   r   r   :  s,    :I'	#$ E Er   r   c                  T    ] tR tRtRtR R ltR R ltR R lt]R R	 l4       t	R
t
R# )SuspiciousDuplicateAccentPluginiX  c                   V ^8  d   QhRR/# r%   r   )r)   s   "r
   r*   ,SuspiciousDuplicateAccentPlugin.__annotate__a  s     1 1$ 1r   c                	>    ^ V n         ^ V n        RV n        RV n        R# ru   _successive_country   _last_latin_character_last_was_accentuatedr@   s   &r
   rB   (SuspiciousDuplicateAccentPlugin.__init__a  s"    &'%&15"+0"r   c               $    V ^8  d   QhRRRRRR/# r\   r   )r)   s   "r
   r*   r   h  s!     6 63 6h 64 6r   c                   V ;P                   ^,          un         V P                  e   VP                  '       d   V P                  '       d   VP                  '       d:   V P                  P                  4       '       d   V ;P                  ^,          un        \        V4      \        V P                  4      8X  d   V ;P                  ^,          un        Wn        VP                  V n        R# r   )ry   r   r9   r   r2   rJ   r   r   rb   s   &&&r
   rc   )SuspiciousDuplicateAccentPlugin.feed_infoh  s    "&&2   ***zzzd88@@BB&&!+&Y'=9S9S+TT&&!+&%."%)%5%5"r   c                   V ^8  d   QhRR/# r%   r   )r)   s   "r
   r*   r   w  s     + +t +r   c                	>    ^ V n         ^ V n        RV n        RV n        R# ru   r   r@   s   &r
   rg   %SuspiciousDuplicateAccentPlugin.resetw  s"    !" !%)"%*"r   c                   V ^8  d   QhRR/# rj   r   )r)   s   "r
   r*   r   ~  s     D Du Dr   c                	p    V P                   ^ 8X  d   R# V P                  ^,          V P                   ,          # r   )ry   r   r@   s   &r
   rm   %SuspiciousDuplicateAccentPlugin.ratio}  s/      A%&&*d.C.CCCr   )ry   r   r   r   Nr   r   r   r   r
   r   r   X  s.    I16+ D Dr   r   c                  T    ] tR tRtRtR R ltR R ltR R lt]R R	 l4       t	R
t
R# )SuspiciousRangei  c                   V ^8  d   QhRR/# r%   r   )r)   s   "r
   r*   SuspiciousRange.__annotate__  s     6 6$ 6r   c                	>    ^ V n         ^ V n        RV n        RV n        R# r   "_suspicious_successive_range_country   _last_printable_seen_last_printable_ranger@   s   &r
   rB   SuspiciousRange.__init__  s"    78/%&04!15"r   c               $    V ^8  d   QhRRRRRR/# r\   r   )r)   s   "r
   r*   r     s!     5 53 5h 54 5r   c                   V ;P                   ^,          un         VP                  '       g   VP                  '       g   V\        9   d   RV n        RV n        R# V P                  f   Wn        \        V4      V n        R# V P
                  p\        V4      p\        W44      '       d   V ;P                  ^,          un        Wn        W@n        R# r   )	ry   r4   r>   r   r   r   r    is_suspiciously_successive_ranger   )rA   r/   r]   unicode_range_aunicode_range_bs   &&&  r
   rc   SuspiciousRange.feed_info  s    ":::y4P'P(,D%)-D&$$,(1%)6y)AD&&*&@&@&3I&>+OMM33q83$-!%4"r   c                   V ^8  d   QhRR/# r%   r   )r)   s   "r
   r*   r     s     * *t *r   c                	>    ^ V n         ^ V n        RV n        RV n        R# r   )ry   r   r   r   r@   s   &r
   rg   SuspiciousRange.reset  s"     !23/$(!%)"r   c                   V ^8  d   QhRR/# rj   r   )r)   s   "r
   r*   r     s     / /u /r   c                	t    V P                   ^8:  d   R# V P                  ^,          V P                   ,          pV# )   r   )ry   r   )rA   ratio_of_suspicious_range_usages   & r
   rm   SuspiciousRange.ratio  s<      B& 33a7!!2"' /.r   )ry   r   r   r   Nr   r   r   r   r
   r   r     s,    I65.* / /r   r   c                  T    ] tR tRtRtR R ltR R ltR R lt]R R	 l4       t	R
t
R# )SuperWeirdWordPlugini  c                   V ^8  d   QhRR/# r%   r   )r)   s   "r
   r*   !SuperWeirdWordPlugin.__annotate__  s     * *$ *r   c                	    ^ V n         ^ V n        ^ V n        RV n        RV n        ^ V n        ^ V n        ^ V n        RV n        RV n	        ^ V n
        ^ V n        ^ V n        R# )r   FN_word_count_bad_word_count_foreign_long_count_is_current_word_bad_foreign_long_watchry   _bad_character_count_buffer_length_buffer_last_char_buffer_last_char_accentuated_buffer_accent_count_buffer_glyph_count_buffer_upper_countr@   s   &r
   rB   SuperWeirdWordPlugin.__init__  sj     !$%() */!). %&)*!#$-138*)*!() () r   c               $    V ^8  d   QhRRRRRR/# r\   r   )r)   s   "r
   r*   r     s&     I7 I73 I7h I74 I7r   c                L   VP                   '       Ed   V ;P                  ^,          un        Wn        VP                  '       d   V ;P                  ^,          un        VP
                  V n        VP
                  '       d   V ;P                  ^,          un        V P                  '       g>   VP                  '       d   VP
                  '       d   VP                  '       g   RV n        VP                  '       d   V ;P                  ^,          un        R# V P                  '       g   R# VP                  '       g%   VP                  '       g   \        V4      '       Ed   V ;P                  ^,          un        V P                  pV ;P                   V,          un        V^8  d   V P                  V,          R8  d	   RV n        MV P                  '       dS   V P                  P%                  4       '       d3   V P                  V8w  d"   V ;P&                  ^,          un        RV n        M1V P                  ^8X  d!   RV n        V ;P&                  ^,          un        V^8  dh   V P                  '       dV   V P                  ^ 8  ;'       d    V P                  V,          R8*  pV'       g!   V ;P&                  ^,          un        RV n        V P"                  '       d:   V ;P(                  ^,          un        V ;P*                  V,          un        RV n        RV n        ^ V n        RV n        RV n        ^ V n        ^ V n        ^ V n        R# VR9  dX   VP,                  '       gD   VP.                  '       d0   RV n        V ;P                  ^,          un        Wn        RV n        R# R# R# R# )r   TN      ?r   F>   -<=>_|~)r1   r   r   r2   r   r9   r   r   r   r:   r=   r   r4   r>   r   r   ry   r   rJ   r   r   r   r5   r?   )rA   r/   r]   buffer_lengthprobable_camel_caseds   &&&  r
   rc   SuperWeirdWordPlugin.feed_info  s   :::1$%."zzz((A-(151A1AD.))Q.),,,t'7'7'7+/(}}}((A-(""":::|I'>'>!!%!4!4M!!]2!!,,}<C04D-666..668800MA,,1,04D---204D-,,1,"t'?'?'?,,q0 H H00=@CG %
 ,,,1,04D-((($$)$))]:),1)',D$"#D%)D"16D.()D%'(D$'(D$@@JJJ(,D%1$%."16D.   Ar   c                   V ^8  d   QhRR/# r%   r   )r)   s   "r
   r*   r   ,  s     % %t %r   c                	    ^ V n         RV n        RV n        RV n        RV n        ^ V n        ^ V n        ^ V n        ^ V n        ^ V n	        ^ V n
        ^ V n        ^ V n        R# ru   )r   r   r   r   r   r   r   ry   r   r   r   r   r   r@   s   &r
   rg   SuperWeirdWordPlugin.reset,  sj    !%-2*$)!#(   !$%!#$ $%!#$ #$ r   c                   V ^8  d   QhRR/# rj   r   )r)   s   "r
   r*   r   <  s     A Au Ar   c                	    V P                   ^
8:  d   V P                  ^ 8X  d   R# V P                  V P                  ,          # )
   r   )r   r   r   ry   r@   s   &r
   rm   SuperWeirdWordPlugin.ratio;  s7    r!d&>&>!&C((4+@+@@@r   )r   r   r   r   r   r   r   r   ry   r   r   r   r   Nr   r   r   r   r
   r   r     s0    I *$I7V% A Ar   r   c                  X    ] tR tRtRtRtR R ltR R ltR R lt]	R	 R
 l4       t
RtR# )CjkUncommonPluginiC  z4
Detect messy CJK text that probably means nothing.
c                   V ^8  d   QhRR/# r%   r   )r)   s   "r
   r*   CjkUncommonPlugin.__annotate__K  s     & &$ &r   c                	"    ^ V n         ^ V n        R# r   ry   _uncommon_countr@   s   &r
   rB   CjkUncommonPlugin.__init__K  s    %&$%r   c               $    V ^8  d   QhRRRRRR/# r\   r   )r)   s   "r
   r*   r	  O  s!     & &3 &h &4 &r   c                    V ;P                   ^,          un         V\        9  d   V ;P                  ^,          un        R# R# r   )ry   r   r  rb   s   &&&r
   rc   CjkUncommonPlugin.feed_infoO  s2    "11  A%  2r   c                   V ^8  d   QhRR/# r%   r   )r)   s   "r
   r*   r	  V  s     ! !t !r   c                	"    ^ V n         ^ V n        R# r   r  r@   s   &r
   rg   CjkUncommonPlugin.resetV  s     ! r   c                   V ^8  d   QhRR/# rj   r   )r)   s   "r
   r*   r	  [  s     N Nu Nr   c                	    V P                   ^8  d   R# V P                  V P                   ,          pVR8  d
   V^
,          # R# )r   r   r   r  )rA   uncommon_form_usages   & r
   rm   CjkUncommonPlugin.ratioZ  sD      1$%)%9%9D<Q<Q%Q ,?+D"R'M#Mr   r  N)rR   rS   rT   rU   rV   rW   rB   rc   rg   ro   rm   rX   r   r   r
   r  r  C  s3     8I&&! N Nr   r  c                  T    ] tR tRtRtR R ltR R ltR R lt]R R	 l4       t	R
t
R# )ArchaicUpperLowerPluginif  c                   V ^8  d   QhRR/# r%   r   )r)   s   "r
   r*   $ArchaicUpperLowerPlugin.__annotate__t  s     . .$ .r   c                	    R V n         ^ V n        ^ V n        ^ V n        ^ V n        RV n        R V n        R V n        RV n        R# )FNT	_buf_character_count_since_last_sep_successive_upper_lower_count#_successive_upper_lower_count_finalry   _last_alpha_seen_last_alpha_seen_upper_last_alpha_seen_lower_current_ascii_onlyr@   s   &r
   rB    ArchaicUpperLowerPlugin.__init__t  sI    	45,23*890%&,0,1#,1#)- r   c               $    V ^8  d   QhRRRRRR/# r\   r   )r)   s   "r
   r*   r    s!     +1 +13 +1h +14 +1r   c                   VP                   ;'       d    VP                  pV'       * pV'       d   V P                  ^ 8  d   V P                  ^@8:  dH   VP                  '       g6   V P                  '       g$   V ;P
                  V P                  ,          un        ^ V n        ^ V n        RV n        RV n        V ;P                  ^,          un	        RV n        R# V P                  '       d   VP                  '       g   RV n        V P                  e   VP                  '       d   V P                  '       g%   VP                  '       dN   V P                  '       d<   V P                  '       d"   V ;P                  ^,          un        RV n        MRV n        MRV n        V ;P                  ^,          un	        V ;P                  ^,          un        Wn        VP                  V n        VP                  V n        R# )r   NFT)r1   r7   r  r5   r%  r!  r   r"  r  ry   r6   r2   r$  r3   r#  )rA   r/   r]   is_concerned	chunk_seps   &&&  r
   rc   !ArchaicUpperLowerPlugin.feed_info  sj   !ZZ>>D,>,>**	==A44:


00088668 23D.34D0$(D!DI!!Q&!'+D$###DMMM',D$  ,


t:::


t:::99966!;6 %DI $DI!	",,1, )&*jj#&*jj#r   c                   V ^8  d   QhRR/# r%   r   )r)   s   "r
   r*   r    s     	( 	(t 	(r   c                	    ^ V n         ^ V n        ^ V n        ^ V n        RV n        RV n        RV n        RV n        RV n        R# )r   NFT)	ry   r  r   r!  r"  r#  r$  r  r%  r@   s   &r
   rg   ArchaicUpperLowerPlugin.reset  sI     !/0,-.*340 $&+#&+#	#' r   c                   V ^8  d   QhRR/# rj   r   )r)   s   "r
   r*   r    s     P Pu Pr   c                	b    V P                   ^ 8X  d   R# V P                  V P                   ,          # r   )ry   r!  r@   s   &r
   rm   ArchaicUpperLowerPlugin.ratio  s*      A%77$:O:OOOr   )	r  ry   r  r%  r"  r$  r#  r   r!  Nr  r   r   r   r
   r  r  f  s/    
I.+1Z	( P Pr   r  c                  T    ] tR tRtR
tR R ltR R ltR R lt]R R	 l4       t	R
t
R# )ArabicIsolatedFormPlugini  c                   V ^8  d   QhRR/# r%   r   )r)   s   "r
   r*   %ArabicIsolatedFormPlugin.__annotate__  s     + +$ +r   c                	"    ^ V n         ^ V n        R# r   ry   _isolated_form_countr@   s   &r
   rB   !ArabicIsolatedFormPlugin.__init__  s    %&)*!r   c                   V ^8  d   QhRR/# r%   r   )r)   s   "r
   r*   r5    s     & &t &r   c                	"    ^ V n         ^ V n        R# r   r7  r@   s   &r
   rg   ArabicIsolatedFormPlugin.reset  s     !$%!r   c               $    V ^8  d   QhRRRRRR/# r\   r   )r)   s   "r
   r*   r5    s!     + +3 +h +4 +r   c                    V ;P                   ^,          un         VP                  \        ,          '       d   V ;P                  ^,          un        R# R# r   )ry   r8   r   r8  rb   s   &&&r
   rc   "ArabicIsolatedFormPlugin.feed_info  s9    "::---%%*% .r   c                   V ^8  d   QhRR/# rj   r   )r)   s   "r
   r*   r5    s     # #u #r   c                	f    V P                   ^8  d   R# V P                  V P                   ,          pV# )r   r   r7  )rA   isolated_form_usages   & r
   rm   ArabicIsolatedFormPlugin.ratio  s0      1$%)%>%>AVAV%V""r   r7  N)rR   rS   rT   rU   rW   rB   rg   rc   ro   rm   rX   r   r   r
   r3  r3    s*    <I+&+ # #r   r3     )maxsizec               $    V ^8  d   QhRRRRRR/# )r&   r   z
str | Noner   r'   rN   r   )r)   s   "r
   r*   r*     s)     F FF2<F	Fr   c                   V e   Vf   R# W8X  d   R# RV 9   d
   RV9   d   R# RV 9   g   RV9   d   R# RV 9   g   RV9   d   RV 9   g   RV9   d   R# V P                  R4      VP                  R4      r2V F  pV\        9   d   K  WC9   g   K   R# 	  V R9   VR9   reV'       g	   V'       d   RV 9   g   RV9   d   R# V'       d   V'       d   R# RV 9   g   RV9   d!   RV 9   g   RV9   d   R# V R	8X  g   VR	8X  d   R# RV 9   g   RV9   g   V R9   d8   VR9   d1   R
V 9   g   R
V9   d   R# RV 9   g   RV9   d   R# V R	8X  g   VR	8X  d   R# R# )zY
Determine if two Unicode range seen next to each other can be considered as suspicious.
TFLatin	Emoticons	Combining CJKHangulzBasic LatinPunctuationForms)HiraganaKatakana)rQ  rP  )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               (    V ^8  d   QhRRRRRRRR/# )r&   decoded_sequencerE   maximum_thresholdrk   debugrN   r'   r   )r)   s   "r
   r*   r*   +  s2     }% }%}%.3}%BF}%
}%r   c           	        \        V 4      pVR8  d   ^ pMVR8  d   ^@pM^p\        4       p\        4       p\        4       p\	        4       p\        4       p	\        4       p
\        4       p\        4       p\        4       pVP                  pVP                  pVP                  pVP                  pV	P                  pV
P                  pVP                  pVP                  pVP                  p\        4       pVP                  p\        ^ W44       EFk  pV VVV,             F  pV! V4       V! VV4       V! VV4       V! VV4       VP                  '       d   V! VV4       V! VV4       VP                  '       g   K^  V! VV4       VP                   '       d
   V! VV4       VP"                  '       d
   V! VV4       VP$                  '       g   K  V! VV4       K  	  VP&                  VP&                  ,           VP&                  ,           VP&                  ,           V	P&                  ,           V
P&                  ,           VP&                  ,           VP&                  ,           VP&                  ,           pVV8  g   EKl   M	  V! R4       V! RV4       V! RV4       V! RV4       VP&                  VP&                  ,           VP&                  ,           VP&                  ,           V	P&                  ,           V
P&                  ,           VP&                  ,           VP&                  ,           VP&                  ,           pV'       d   \)        R4      pVP+                  \,        RV RV RV 24       V^8  d=   VP+                  \,        RV R	,           24       VP+                  \,        R
V RR  24       WVWxWWV3	 F2  pVP+                  \,        VP.                   RVP&                   24       K4  	  \1        V^4      # )zo
Compute a mess ratio given a decoded bytes sequence. The maximum threshold does stop the computation earlier.
i  rD  
charset_normalizerzIMess-detector extended-analysis start. intermediary_mean_mess_ratio_calc=z mean_mess_ratio=z maximum_threshold=zStarting with: :N   NzEnding with: Nz: i)lenrq   r   r   r   r   r   r  r  r3  rc   r#   rP   ranger0   r1   r:   r;   r<   rm   r   logr   	__class__round)rY  rZ  r[  seq_lenstepd_spd_tad_upd_sdad_srd_swd_cud_aud_ai	d_sp_feed	d_ta_feed	d_up_feed
d_sda_feed	d_sr_feed	d_sw_feed	d_cu_feed	d_au_feed	d_ai_feedr]   info_updateblock_startr/   mean_mess_ratiologgerdts   &&&                           r
   
mess_ratior~  *  s    '(G}	4 .N-OD%=%?D/1D-L-NE+-D!5!7D/1D$;$=D%=%?D IIIJIIIII ZD++K Q.)+d8JKI	" i&i&i& ~~~)T*)T* zzz)T*:::y$/;;;i.>>>i.3 L8 JJjjjj kk jj	
 jj jj jj jj 	 //S /X 	D$$$ JJjjjj kk jj	
 jj jj jj jj 	 /0

1156GGX Y!!2 35	
 R<JJu0@0E/FGHJJu.>su.E-FGHtDDIBJJub
;< J !$$r   )   r   )g?F)2__conditional_annotations__
__future__r   sys	functoolsr   loggingr   version_infotypingr   typing_extensionsImportErrorconstantr   r   r   r   r   r   r   r   r   r   r   r   r   utilsr   r   r   r   r   r   r   r!   __annotations__r#   rZ   rq   r   r   r   r   r   r  r  r3  r   r~  )r  s   @r
   <module>r     s   " " 
  v+      '>I-	9EAS A [I [I [I|" "< .L'9 .L .Lb O1 O O6 E* E E: )D&8 )D )DX 4/( 4/ 4/n BA- BA BAJ N* N ND YP0 YP YPx #1 # #8 4F FR 4}% }%  	s   E 
E,+E,