Your IP : 216.73.217.13


Current Path : /snap/certbot/5528/lib/python3.12/site-packages/charset_normalizer/__pycache__/
Upload File :
Current File : //snap/certbot/5528/lib/python3.12/site-packages/charset_normalizer/__pycache__/md.cpython-312.pyc

�

uI�i�v���UddlmZddlZddlmZddlmZejdk\rddlm	Z	n	ddl
m	Z	dd	lm
Z
mZmZmZmZmZmZmZmZmZmZmZmZdd
lmZmZmZmZmZm Z m!Z!eezezezezZ"de#d<e	Gd
�d��Z$Gd�d�Z%e	Gd�de%��Z&e	Gd�de%��Z'e	Gd�de%��Z(e	Gd�de%��Z)e	Gd�de%��Z*e	Gd�de%��Z+e	Gd�de%��Z,e	Gd�d e%��Z-e	Gd!�d"e%��Z.ed#�$�						d(d%��Z/ed&�$�	d)							d*d'��Z0y#e$rd�Z	Y��'wxYw)+�)�annotationsN)�	lru_cache)�	getLogger)��)�finalc��|S)N�)�clss ��/build/snapcraft-certbot-53a6961353a63169611ae8a78f6bfa4f/parts/certbot/install/lib/python3.12/site-packages/charset_normalizer/md.pyrrs���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�$�eZdZdZdZdd�Zdd�Zy)�CharInfou{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.
    ��	character�	printable�alpha�upper�lower�space�digit�is_ascii�
case_variable�flags�accentuated�latin�is_cjk�	is_arabic�is_glyph�punct�symc���d|_d|_d|_d|_d|_d|_d|_d|_d|_d|_	d|_
d|_d|_d|_
d|_d|_d|_y)N�Frr'��selfs r�__init__zCharInfo.__init__Ns{�� ���$��� ��
� ��
� ��
� ��
� ��
�#��
�#(�����
�!&��� ��
�!���$���#��
� ��
���r
c�t�||_t|�}|dk�r-d|_d|_d|_d|_d|_d|cxkrdkrUnnRd|_d|_d|_	d|_
d|_d|_d|_
t|_d|_d|_d|_yd|cxkrdkrUnnRd|_d|_d|_	d|_
d|_d|_d|_
t|_d|_d|_d|_yd|cxkrd	krQnnNd|_d|_d|_	d|_
d|_d|_d|_
d
|_d|_d|_d|_y|dk(sd|cxkrd
krTnnQd|_d|_d|_	d|_
d|_|dk(|_d|_
d
|_d|_d|_d|_y|j'�|_d|_d|_d|_	d|_
d|_d|_
d
|_d|_|jrt)|�nd|_|jrt+|�nd|_yd|_|j'�|_|j-�|_|j/�|_|j1�|_	|j3�|_
|j5�|_|j|jk7|_
|jrt7|�}nd
}||_t9|t:z�|_t9|tz�|_t9|t<z�|_t9|t>z�|_t9|t@z�|_|jrt)|�nd|_|jrt+|�nd|_y)zBUpdate all properties for *character* (called once per character).�TF�A�Z�a�z�0�9r� �	�
N)!r(�ordr/r2r4r5r6r*r+r,r-r.r)r0rr1r3r7r8�isprintablerr �isalpha�isupper�islower�isspace�isdigitr�boolrrrr$)r<r(�or1s    r�updatezCharInfo.updateas:��"����Y����s�7� �D�M�$�D���D�K�"�D�N�!�D�M��Q�}�"�}�!��
�!��
�"��
�"��
�"��
�!%���%)��"�#��
�!��
�"��
� ����q��C��!��
�"��
�!��
�"��
�"��
�!%���%)��"�#��
�!��
�"��
� ����q��B��"��
�"��
�"��
�"��
�!��
�!%���%*��"���
�"��
�"��
� ����b��Q�!�\�r�\�"��
�"��
�"��
�!��
�"��
�!"�b����%*��"���
�"��
�"��
� ���"+�!6�!6�!8���"��
�"��
�"��
�"��
�"��
�%*��"���
�"��
�:>�.�.�^�I�6�e��
�37�>�>�9�Y�/�u���"�D�M�&�2�2�4�D�N�"�*�*�,�D�J�"�*�*�,�D�J�"�*�*�,�D�J�"�*�*�,�D�J�"�*�*�,�D�J�!%���t�z�z�!9�D���z�z�(��3�����D�J�#�E�L�$8�9�D���e�f�n�-�D�J��u�t�|�,�D�K�!�%�'�/�2�D�N� ���!4�5�D�M�7;�n�n��	�2�%�D�J�/3�~�~�y��+�5�D�Hr
N��return�None)r(�strrTrU)�__name__�
__module__�__qualname__�__doc__�	__slots__r=rRr
r
rr&r&/s����I�(�&jIr
r&c�6�eZdZdZdZdd�Zdd�Zed	d��Zy)
�MessDetectorPluginzy
    Base abstract class used for mess detection plugins.
    All detectors MUST extend and implement given methods.
    r
c��t�)z�
        The main routine to be executed upon character.
        Insert the logic in witch the text would be considered chaotic.
        ��NotImplementedError�r<r(�infos   r�	feed_infozMessDetectorPlugin.feed_info�s
��
"�!r
c��t�)zB
        Permit to reset the plugin to the initial state.
        r_r;s r�resetzMessDetectorPlugin.reset�s
��"�!r
c��t�)z�
        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�ratiozMessDetectorPlugin.ratio�s
��"�!r
N�r(rVrbr&rTrUrS�rT�float)	rWrXrYrZr[rcre�propertyrgr
r
rr]r]�s,���
�I�"�"��"��"r
r]c�:�eZdZdZdd�Zdd�Zdd�Zed	d��Zy)
� TooManySymbolOrPunctuationPlugin��_punctuation_count�
_symbol_count�_character_count�_last_printable_char�_frenzy_symbol_in_wordc�J�d|_d|_d|_d|_d|_y�NrFrnr;s rr=z)TooManySymbolOrPunctuationPlugin.__init__�s*��'(���"#���%&���04��!�,1��#r
c�,�|xjdz
c_||jk7ri|tvra|jr|xjdz
c_||_y|j
s,|jr t|�s|xjdz
c_||_y)�1Optimized feed using pre-computed character info.r�N)	rqrrrr7ror.r8rrpras   rrcz*TooManySymbolOrPunctuationPlugin.feed_info�s}������"��
��2�2�2��!=�=��z�z��'�'�1�,�'�%.��!��Z�Z�D�H�H�[��5K��"�"�a�'�"�$-��!r
c�.�d|_d|_d|_y�Nr)rorqrpr;s rrez&TooManySymbolOrPunctuationPlugin.reset
s��"#��� !�����r
c��|jdk(ry|j|jz|jz}|dk\r|SdS)Nr��333333�?)rqrorp)r<�ratio_of_punctuations  rrgz&TooManySymbolOrPunctuationPlugin.ratiosO��� � �A�%��
�#�#�d�&8�&8�8��!�!�'"��(<�s�'B�#�K��Kr
NrSrhri�	rWrXrYr[r=rcrerkrgr
r
rrmrm�s.���I�2�
.��
�L��Lr
rmc�:�eZdZdZdd�Zdd�Zdd�Zed	d��Zy)
�TooManyAccentuatedPlugin�rq�_accentuated_countc� �d|_d|_yrzr�r;s rr=z!TooManyAccentuatedPlugin.__init__"s��%&���'(��r
c�r�|xjdz
c_|jr|xjdz
c_yy�rwrN)rqr2r�ras   rrcz"TooManyAccentuatedPlugin.feed_info&s2������"������#�#�q�(�#�r
c� �d|_d|_yrzr�r;s rrezTooManyAccentuatedPlugin.reset-s�� !���"#��r
c�f�|jdkry|j|jz}|dk\r|SdS)Nrr|gffffff�?r�)r<�ratio_of_accentuations  rrgzTooManyAccentuatedPlugin.ratio1s=��� � �1�$��'+�'>�'>��AV�AV�'V��(=��(E�$�N�3�Nr
NrSrhrirr
r
rr�r�s,��:�I�)�)�$��O��Or
r�c�:�eZdZdZdd�Zdd�Zdd�Zed	d��Zy)
�UnprintablePlugin��_unprintable_countrqc� �d|_d|_yrzr�r;s rr=zUnprintablePlugin.__init__>s��'(���%&��r
c��|js+|js|dk7r|dk7r|xjdz
c_|xjdz
c_y)rw�urN)r-r)r�rqras   rrczUnprintablePlugin.feed_infoBsD���
�
��N�N��V�#��X�%��#�#�q�(�#�����"�r
c��d|_yrz)r�r;s rrezUnprintablePlugin.resetMs
��"#��r
c�Z�|jdk(ry|jdz|jzS)Nrr|r)rqr�r;s rrgzUnprintablePlugin.ratioPs/��� � �A�%���'�'�!�+�t�/D�/D�D�Dr
NrSrhrirr
r
rr�r�:s,��:�I�'�	#�$��E��Er
r�c�:�eZdZdZdd�Zdd�Zdd�Zed	d��Zy)
�SuspiciousDuplicateAccentPlugin��_successive_countrq�_last_latin_character�_last_was_accentuatedc�<�d|_d|_d|_d|_yrur�r;s rr=z(SuspiciousDuplicateAccentPlugin.__init__as"��&'���%&���15��"�+0��"r
c��|xjdz
c_|j��|jr}|jrq|jr/|jj�r|xjdz
c_t|�t|j�k(r|xjdz
c_||_|j|_yr�)rqr�r2r�r+rLr�r!ras   rrcz)SuspiciousDuplicateAccentPlugin.feed_infohs�������"���&�&�2�� � ��*�*��z�z�d�8�8�@�@�B��&�&�!�+�&��Y�'�=��9S�9S�+T�T��&�&�!�+�&�%.��"�%)�%5�%5��"r
c�<�d|_d|_d|_d|_yrur�r;s rrez%SuspiciousDuplicateAccentPlugin.resetws"��!"��� !���%)��"�%*��"r
c�Z�|jdk(ry|jdz|jzS)Nrr|rx)rqr�r;s rrgz%SuspiciousDuplicateAccentPlugin.ratio}s/��� � �A�%���&�&��*�d�.C�.C�C�Cr
NrSrhrirr
r
rr�r�Xs.���I�1�
6�+��D��Dr
r�c�:�eZdZdZdd�Zdd�Zdd�Zed	d��Zy)
�SuspiciousRange��"_suspicious_successive_range_countrq�_last_printable_seen�_last_printable_rangec�<�d|_d|_d|_d|_yrzr�r;s rr=zSuspiciousRange.__init__�s"��78��/�%&���04��!�15��"r
c�`�|xjdz
c_|js|js|tvrd|_d|_y|j�||_t
|�|_y|j
}t
|�}t||�r|xjdz
c_||_||_yr�)	rqr-r7rr�r�r"� is_suspiciously_successive_ranger�)r<r(rb�unicode_range_a�unicode_range_bs     rrczSuspiciousRange.feed_info�s�������"���:�:����y�4P�'P�(,�D�%�)-�D�&���$�$�,�(1�D�%�)6�y�)A�D�&��&*�&@�&@��&3�I�&>��+�O�_�M��3�3�q�8�3�$-��!�%4��"r
c�<�d|_d|_d|_d|_yrz)rqr�r�r�r;s rrezSuspiciousRange.reset�s"�� !���23��/�$(��!�%)��"r
c�^�|jdkry|jdz|jz}|S)NrHr|rx)rqr�)r<�ratio_of_suspicious_range_usages  rrgzSuspiciousRange.ratio�s<��� � �B�&��
�3�3�a�7��!�!�2"�'�/�.r
NrSrhrirr
r
rr�r��s,���I�6�5�.*��/��/r
r�c�:�eZdZdZdd�Zdd�Zdd�Zed	d��Zy)
�SuperWeirdWordPlugin�
�_word_count�_bad_word_count�_foreign_long_count�_is_current_word_bad�_foreign_long_watchrq�_bad_character_count�_buffer_length�_buffer_last_char�_buffer_last_char_accentuated�_buffer_accent_count�_buffer_glyph_count�_buffer_upper_countc��d|_d|_d|_d|_d|_d|_d|_d|_d|_d|_	d|_
d|_d|_yrur�r;s rr=zSuperWeirdWordPlugin.__init__�sj�� !���$%���()�� �*/��!�).�� �%&���)*��!�#$���-1���38��*�)*��!�()�� �()�� r
c���|jr�|xjdz
c_||_|jr|xjdz
c_|j
|_|j
r|xjdz
c_|js+|jr|j
r|jsd|_|jr|xjdz
c_y|jsy|js|jst|��r�|xjdz
c_|j}|xj |z
c_|dk\r�|j|zdk\rd|_n}|jrF|jj%�r,|j|k7r|xj&dz
c_d|_n+|jdk(rd|_|xj&dz
c_|dk\rM|jrA|jdkDxr|j|zdk}|s|xj&dz
c_d|_|j"r1|xj(dz
c_|xj*|z
c_d	|_d	|_d|_d|_d	|_d|_d|_d|_y|d
vrE|j,s8|j.r+d|_|xjdz
c_||_d	|_yyyy)rwrTN���?�rr}F>�_�-�<�=�>�|�~)r*r�r�r+r�r2r�r�r�r3r6r�r-r7rr�rqr�rLr�r�r�r.r8)r<r(rb�
buffer_length�probable_camel_caseds     rrczSuperWeirdWordPlugin.feed_info�s����:�:����1�$��%.�D�"��z�z��(�(�A�-�(�15�1A�1A�D�.�����)�)�Q�.�)��,�,����t�'7�'7��
�
�+/��(��}�}��(�(�A�-�(���"�"���:�:����|�I�'>�����!��!%�!4�!4�M��!�!�]�2�!���!��,�,�}�<��C�04�D�-��6�6��.�.�6�6�8��0�0�M�A��,�,��1�,�04�D�-��-�-��2�04�D�-��,�,��1�,���"�t�'?�'?��,�,�q�0�H��0�0�=�@�C�G�%�
,��,�,��1�,�04�D�-��(�(��$�$��)�$��)�)�]�:�)�,1��)�',�D�$�"#�D��%)�D�"�16�D�.�()�D�%�'(�D�$�'(�D�$��@�@��J�J����(,�D�%����1�$��%.�D�"�16�D�.���
Ar
c��d|_d|_d|_d|_d|_d|_d|_d|_d|_d|_	d|_
d|_d|_yru)
r�r�r�r�r�r�r�rqr�r�r�r�r�r;s rrezSuperWeirdWordPlugin.reset,sj�����!%���-2��*�$)��!�#(�� � ������ !���$%��!�#$�� �$%��!�#$�� �#$�� r
c�r�|jdkr|jdk(ry|j|jzS)N�
rr|)r�r�r�rqr;s rrgzSuperWeirdWordPlugin.ratio;s7�����r�!�d�&>�&>�!�&C���(�(�4�+@�+@�@�@r
NrSrhrirr
r
rr�r��s0���I� *�$I7�V
%��A��Ar
r�c�>�eZdZdZdZdd�Zd	d�Zdd�Zed
d��Z	y)�CjkUncommonPluginz<
    Detect messy CJK text that probably means nothing.
    �rq�_uncommon_countc� �d|_d|_yrzr�r;s rr=zCjkUncommonPlugin.__init__Ks��%&���$%��r
c�j�|xjdz
c_|tvr|xjdz
c_yyr�)rqrr�ras   rrczCjkUncommonPlugin.feed_infoOs2������"���1�1�� � �A�%� �2r
c� �d|_d|_yrzr�r;s rrezCjkUncommonPlugin.resetVs�� !��� ��r
c�l�|jdkry|j|jz}|dkDr|dzSdS)Nrr|r�r�r�)r<�uncommon_form_usages  rrgzCjkUncommonPlugin.ratioZsD��� � �1�$��%)�%9�%9�D�<Q�<Q�%Q��,?��+D�"�R�'�M�#�Mr
NrSrhri)
rWrXrYrZr[r=rcrerkrgr
r
rr�r�Cs3���8�I�&�&�!��N��Nr
r�c�:�eZdZdZdd�Zdd�Zdd�Zed	d��Zy)
�ArchaicUpperLowerPlugin�	�_buf�_character_count_since_last_sep�_successive_upper_lower_count�#_successive_upper_lower_count_finalrq�_last_alpha_seen�_last_alpha_seen_upper�_last_alpha_seen_lower�_current_ascii_onlyc��d|_d|_d|_d|_d|_d|_d|_d|_d|_y)NFrTr�r;s rr=z ArchaicUpperLowerPlugin.__init__tsI����	�45��,�23��*�89��0�%&���,0���,1��#�,1��#�)-�� r
c�*�|jxr|j}|}|r�|jdkDr|jdkr7|js+|js|xj
|jz
c_d|_d|_d|_d|_|xjdz
c_	d|_y|jr|jsd|_|j�h|jr|js|jr=|jr1|jr|xjdz
c_d|_nd|_nd|_|xjdz
c_	|xjdz
c_||_|j|_|j|_y)rwr�@NFrTrx)r*r0r�r.r�r�r�r�r�rqr/r+r�r,r�)r<r(rb�is_concerned�	chunk_seps     rrcz!ArchaicUpperLowerPlugin.feed_info�sS��!�Z�Z�>�D�,>�,>��*�*�	���=�=��A��4�4��:��
�
��0�0��8�8��6�6��8�23�D�.�34�D�0�$(�D�!��D�I��!�!�Q�&�!�'+�D�$���#�#�D�M�M�',�D�$�� � �,��
�
�t�:�:��
�
�t�:�:��9�9��6�6�!�;�6� %�D�I� $�D�I�!��	�����"���,�,��1�,� )���&*�j�j��#�&*�j�j��#r
c��d|_d|_d|_d|_d|_d|_d|_d|_d|_y)NrFT)	rqr�r�r�r�r�r�r�r�r;s rrezArchaicUpperLowerPlugin.reset�sI�� !���/0��,�-.��*�34��0� $���&+��#�&+��#���	�#'�� r
c�T�|jdk(ry|j|jzS)Nrr|)rqr�r;s rrgzArchaicUpperLowerPlugin.ratio�s*��� � �A�%���7�7�$�:O�:O�O�Or
NrSrhrirr
r
rr�r�fs/��
�I�
.�+1�Z	(��P��Pr
r�c�:�eZdZdZdd�Zdd�Zdd�Zed	d��Zy)
�ArabicIsolatedFormPlugin�rq�_isolated_form_countc� �d|_d|_yrzr�r;s rr=z!ArabicIsolatedFormPlugin.__init__�s��%&���)*��!r
c� �d|_d|_yrzr�r;s rrezArabicIsolatedFormPlugin.reset�s�� !���$%��!r
c��|xjdz
c_|jtzr|xjdz
c_yyr�)rqr1rr�ras   rrcz"ArabicIsolatedFormPlugin.feed_info�s6������"���:�:�-�-��%�%��*�%�.r
c�X�|jdkry|j|jz}|S)Nrr|r�)r<�isolated_form_usages  rrgzArabicIsolatedFormPlugin.ratio�s0��� � �1�$��%)�%>�%>��AV�AV�%V��"�"r
NrSrhri)	rWrXrYr[r=rercrkrgr
r
rr�r��s*��<�I�+�&�+��#��#r
r��)�maxsizec��|�|�y||k(ryd|vrd|vryd|vsd|vryd|vsd|vr	d|vsd|vry|jd�|jd�}}|D]}|tvr�||vs�y|dv|dv}}|s|r	d|vsd|vry|r|ryd	|vsd	|vrd|vsd|vry|d
k(s|d
k(ryd|vsd|vs|dvr!|dvrd|vsd|vryd
|vsd
|vry|d
k(s|d
k(ryy)za
    Determine if two Unicode range seen next to each other can be considered as suspicious.
    TF�Latin�	Emoticons�	Combining� )�Hiragana�Katakana�CJK�HangulzBasic 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��s�����/�"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
ic	���t|�}|dkrd}n
|dkrd}nd}t�}t�}t�}t	�}t�}	t
�}
t�}t�}t�}
|j}|j}|j}|j}|	j}|
j}|j}|j}|
j}t�}|j}td||�D�]"}||||zD]�}||�|||�|||�|||�|jr|||�|||�|js�Q|||�|j r	|||�|j"r	|||�|j$s��|||���|j&|j&z|j&z|j&z|	j&z|
j&z|j&z|j&z|
j&z}||k\s��#n�|d�|d|�|d|�|d|�|j&|j&z|j&z|j&z|	j&z|
j&z|j&z|j&z|
j&z}|r�t)d�}|j+t,d	|�d
|�d|���|dkDr8|j+t,d
|dd���|j+t,d|dd���|||||	|
|||
f	D]1}|j+t,|j.�d|j&����3t1|d�S)zw
    Compute a mess ratio given a decoded bytes sequence. The maximum threshold does stop the computation earlier.
    i�rFr�r�r?r�
�charset_normalizerzIMess-detector extended-analysis start. intermediary_mean_mess_ratio_calc=z mean_mess_ratio=z maximum_threshold=�zStarting with: Nz
Ending with: i�z: r)�lenrmr�r�r�r�r�r�r�r�rcr&rR�ranger)r*r3r4r5rgr�logr�	__class__�round)�decoded_sequence�maximum_threshold�debug�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_feedrb�info_update�block_startr(�mean_mess_ratio�logger�dts                              r�
mess_ratior'*s����'�(�G���}���	�4������.N�-O�D�%=�%?�D�/�1�D�-L�-N�E�+�-�D�!5�!7�D�/�1�D�$;�$=�D�%=�%?�D����I����I����I����J����I����I����I����I����I��Z�D��+�+�K��Q���.�;
��)�+��d�8J�K�	/�I��	�"�
�i��&��i��&��i��&��~�~��)�T�*��)�T�*��z�z��)�T�*��:�:��y�$�/��;�;��i��.��>�>��i��.�3	/�8
�J�J��j�j�
��j�j�
��k�k�
��j�j�	
�
�j�j�
��j�j�

��j�j�
��j�j�
�	��/�/��S;
�X	�D���$����$����$���
�J�J��j�j�
��j�j�
��k�k�
��j�j�	
�
�j�j�
��j�j�

��j�j�
��j�j�
�	�
��/�0���
�
��
1�15��6G��GX�Y!�!2� 3�
5�	
��R�<��J�J�u��0@��"�0E�/F�G�H��J�J�u�
�.>�s�u�.E�-F�G�H���t�U�D�$��d�D�I�	=�B��J�J�u�����b����
�;�<�	=���!�$�$r
)r��
str | Noner�r(rTrP)g�������?F)rrVrrjr
rPrTrj)1�
__future__r�sys�	functoolsr�loggingr�version_info�typingr�typing_extensions�ImportError�constantrrrrrrrrrrrrr�utilsrrrrr r!r"r$�__annotations__r&r]rmr�r�r�r�r�r�r�r�r�r'r
r
r�<module>r4sC��"�
������v����+���������'�>�I�-�	�9�E�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�BA�-�BA��BA�J�N�*�N��N�D�YP�0�YP��YP�x�#�1�#��#�8�4��F��F�2<�F�	�F��F�R�4��IN�}%��}%�.3�}%�BF�}%�
�}%��}%����	��s�E�E�E