/ lib / cffi / cparser.pyc
cparser.pyc
  1  o

  2  w��c���@s�ddlmZddlmZmZddlmZmZzddlmZ	Wn
e
  3  y+ddl	Z	YnwddlZddlZddl
Z
ze
jdkrCddlZnddlZe��ZWne
  4  yWdZYnwdd	�Zd
  5  Ze�dejejB�Ze�dejejB�Ze�d
ej�Ze�d�Ze�d�Ze�d�Ze�d�Zdae�dej �Z!e�d�Z"e�d�Z#e�d�Z$e�d�Z%e�d�Z&e�d�Z'e�d�Z(dd�Z)dd�Z*dd�Z+d d!�Z,d"d#�Z-d$d%�Z.d&d'�Z/d(d)�Z0d*d+�Z1Gd,d-�d-e2�Z3dS).�)�model)�COMMON_TYPES�resolve_common_type)�FFIError�	CDefError)�
  6  _pycparser�N)�cCsddl}ddl}dS�Nr)Zpycparser.yacctabZpycparser.lextab)�	pycparser�r��C:\Users\Jacks.GUTTSPC\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages\cffi\cparser.py�%_workaround_for_static_import_finderssrz<cdef source string>z/\*.*?\*/|//([^\n\\]|\\.)*?$z?^\s*#\s*define\s+([A-Za-z_][A-Za-z_0-9]*)\b((?:[^\n\\]|\\.)*?)$z^[ \t]*#[ \t]*(?:line|\d+)\b.*$z=\s*\.\.\.\s*[,}]|\.\.\.\s*\}z__dotdotdot\d+__$z\[\s*\.\.\.\s*\]z\w+|\Sz-?0?x?[0-9a-f]+[lu]*$z\b(__stdcall|WINAPI)\bz[(]\s*(__stdcall|WINAPI)\bz\b__cdecl\bz9\bextern\s*"(Python|Python\s*\+\s*C|C\s*\+\s*Python)"\s*.z'[*]\s*((const|volatile|restrict)\b\s*)+z3(\b(int|long|short|signed|unsigned|char)\s*)+\.\.\.z\b(double|float)\s*\.\.\.cCstdurt��atS�N)�
_parser_cacher�CParserrrrr
�_get_parser2srcCsg}	t�|�}|sns|�|d|����|�d�d}|�|���|��}|�d|�r7|�d�|d7}d}|}|t|�kro||}|dkrN|d7}n|dkr\|dkrWn|d8}n	|dvre|dkren
  7  |d7}|t|�ksA|||�|||d�}q|�|�d�|�S)	NT�(�)�*rrz,;=�)	�_r_star_const_space�search�append�start�group�end�
  8  startswith�len�join)�csource�parts�match�closing�endpos�level�i�crrr
�_workaround_for_old_pycparser8s<
  9  
 10  
 11  ��
 12  
 13  r(cCs,g}	t�|�}|sn�|��d}|�|d|����d|�d�vr)|�d�n|�d�||dkre|�d|�}|dkrBtd	��|�d|d|�dkrQtd
 14  ��|�||d|��||dd�}n!|�d|�}|dkrstd��|�|||d��||dd�}|�d
�q|�|�d�	|�S)NTr�Cz(void __cffi_extern_python_plus_c_start; z!void __cffi_extern_python_start; �{�}rz!'extern "Python" {': no '}' foundz7cannot use { } inside a block 'extern "Python" { ... }'�;z'extern "Python": no ';' foundz  void __cffi_extern_python_stop;r)
 15  �_r_extern_pythonrrrrr�findr�NotImplementedErrorr)r r!r"r$r#�	semicolonrrr
�_preprocess_extern_pythonbs6

 16  
 17  
 18  �
 19  !
 20  r1cCsLd|vrdS|��D]}d|vr#|���d�s#ddl}|�d�dSq
 21  dS)N�"�#rz�String literal found in cdef() or type source. String literals are ignored here, but you should remove them anyway because some character sequences confuse pre-parsing.)�
 22  splitlines�lstripr�warnings�warn)r �liner6rrr
�_warn_for_string_literal�s
 23  ��r9cCs(|jsddl}|�d|jf�dSdS)NrzrGlobal variable '%s' in cdef(): for consistency with C it should have a storage class specifier (usually 'extern'))�storager6r7�name)�declr6rrr
�/_warn_for_non_extern_non_static_global_variable�s
 24  ��r=cs$g��fdd�}t�||�}|�fS)Ncst��}��|���d|S)Nz#line@%d)rrr)�mr&��line_directivesrr
�replace�sz(_remove_line_directives.<locals>.replace��_r_line_directive�sub)r rArr?r
�_remove_line_directives�srEcs�fdd�}t�||�S)Ncs.|��}|�d�s
td���t|dd��S)Nz#line@zBunexpected #line directive (should have been processed and removed�)rr�AssertionError�int)r>�sr?rr
rA�s
 25  z*_put_back_line_directives.<locals>.replacerB)r r@rArr?r
�_put_back_line_directives�srJcCs�t|�\}}dd�}t�||�}i}t�|�D]}|��\}}|�dd���}|||<qt�d|�}tj	dkr;t
 26  |�}t�d|�}t�d|�}t
�d|�}t|�}t|�t�d	|�}tt�|��}tt|��D]L\}}|��}	||	d
 27  kr�|�d|	|���}
 28  |
 29  |	ks�J�d|d|	�|||
 30  d
d�f}qh||	|	d
�dks�J�d|d|	�|||	d
d�f}qht�d|�}t�d|�}|�dd�}t||�}||fS)NcSsd|���d�dS)N� �
 31  )r�count)r>rrr
�replace_keeping_newlines�sz-_preprocess.<locals>.replace_keeping_newlinesz\
 32  rz2.14z volatile volatile const(z volatile volatile const rKz[__dotdotdotarray__]�=�...z%s,__dotdotdot%d__ %sr	z%s __dotdotdot%d__ %sz __dotdotdotint__ z __dotdotdotfloat__ z __dotdotdot__ )rE�
 33  _r_commentrD�	_r_define�finditer�groupsrA�stripr�__version__r(�_r_stdcall2�_r_stdcall1�_r_cdeclr1r9�_r_partial_array�list�_r_partial_enum�	enumerate�reversedrr.r�_r_int_dotdotdot�_r_float_dotdotdotrJ)r r@rN�macrosr"Z	macronameZ
 34  macrovalue�matches�number�p�p2rrr
�_preprocess�sF
 35  
 36  ��
 37  rfcCs�tt�}|�d�|�d�|�d�|�d�|�d�t�}d}d}d}t�|�D]P}||vry|dkrD|rC|�|�|�|�d}n5|dkrMd	}d}n,|dkrV|d
 38  7}n#|dkr_|d
 39  8}n|dkrt|rs|dkrs|�|�|�|�n|�|�|}q+|S)Nr,�,rr�typedefFrrTr)�setr�add�_r_words�findall�discard)r Zlook_for_wordsZ
 40  words_used�
 41  is_typedef�parenZ
previous_word�wordrrr
�_common_type_names�sB
 42  
 43  
 44  
 45  
 46  
 47  
 48  �
 49  
 50  
 51  
 52  �
 53  rqc@s�eZdZdd�Zdd�Zdd�Zdd�Z	
 54  		d:dd�Zd
d�Zdd�Z	dd�Z
 55  dd�Zdd�Zdd�Z
dd�Zdd�Zd;dd�Zd d!�Zd<d"d#�Z			
 56  d=d$d%�Zd<d&d'�Zd(d)�Zd>d*d+�Zd,d-�Zd?d.d/�Zd0d1�Zd2d3�Zd4d5�Zd6d7�Zd8d9�Zd
 57  S)@�ParsercCs:i|_t�|_d|_t��|_i|_i|_g|_	d|_
 58  dSr
 59  )�
_declarationsri�_included_declarations�_anonymous_counter�weakref�WeakKeyDictionary�_structnode2type�_options�_int_constants�_recomplete�_uses_new_feature��selfrrr
�__init__)s
 60  
 61  zParser.__init__c
 62  Cs<t|�\}}t|�}g}t|j�D]}|�d�r(|dd�}|�|�|�|�q|t|�7}g}|�d�|D]	}|�d|�q8|�d�|�dtf�|�|�d�|�}t	durat	�
 63  �z-zt��|�}	Wnt
jjy�}
 64  z|�|
 65  |�WYd}
 66  ~
 67  nd}
 68  ~
 69  wwWt	dur�t	��n
 70  t	dur�t	��ww|	||fS)N�typedef �z*# 1 "<cdef automatic initialization code>"ztypedef int %s;z@typedef int __dotdotdotint__, __dotdotdotfloat__, __dotdotdot__;z# 1 "%s"rL)rfrq�sortedrsrrrm�CDEF_SOURCE_STRINGr�lock�acquirer�parser�c_parser�
 71  ParseError�convert_pycparser_error�release)r~r raZctn�	typenamesr;�csourcelines�typenameZfullcsource�ast�errr
�_parse3sD
 72  
 73  
 74  �
 75  
 76  
 77  
 78  �����
 79  �
 80  z
Parser._parsecCshd}t|�}t�dtf|�}|r2t|�d�d�}|��}d|kr)t|�kr2n|S||d}|S)Nz	%s:(\d+):r�
 81  )�str�rer"r�rHrr4r)r~r�r r8�msgr"�linenumr�rrr
�_convert_pycparser_errorYs�zParser._convert_pycparser_errorcCsB|�||�}t|�}|rd|��|f}t|��d|f}t|��)Nzcannot parse "%s"
 82  %szparse error
 83  %s)r�r�rUr)r~r�r r8r�rrr
r�gs
 84  �zParser.convert_pycparser_errorFNcCs~|r|dkr
 85  td��|rtd��d}n|r#||d@r"td|f��nd}|j}z|||d�|_|�|�W||_dS||_w)NTzB'packed' should be False or True; use 'pack' to give another valuez$cannot give both 'pack' and 'packed'rz%'pack' must be a power of two, not %rr)�override�packed�	dllexport)�
 86  ValueErrorry�_internal_parse)r~r r�r��packr�Zprev_optionsrrr
r�qs*���zParser.parsec
 87  Cs�|�|�\}}}|�|�t|j�}|D]	}|jdkrnqJ�d}z�d|_|D]�}|}t|tjj	�r9|�
 88  |�q(t|tjj�r�|jsHtd|��d}t|j
j
tjj�rc|j
j
jd�d�rc|�|�}n=t|j
tjj�r�t|j
j
tjj�r�t|j
j
j
tjj�r�|j
j
j
jd�d�r�|�|�}n|j|j
|jdd|jfd	�\}}|jd
 89  |j||d�q(|jjdkr�q(td
|jj|��WdSty�}	zt|	j�dkr�|	j|f|	_�d}	~	wty�}	z|�|	|�}
 90  |
 91  r�|	jdd|
 92  f|	_�d}	~	ww)N�
__dotdotdot__r�__cffi_extern_python_stopz!typedef does not declare any name�����Z__dotdotdotTz*(%s *)0)r;�partial_length_ok�typedef_exampler���quals�PragmazBunexpected <%s>: this construct is valid C but not valid in cdef()rz
 93      *** Err: %s)r��_process_macros�iter�extr;�_inside_extern_python�
 94  isinstancer�c_ast�Decl�_parse_decl�Typedefr�type�IdentifierType�namesr�_get_unknown_type�PtrDecl�TypeDecl�_get_unknown_ptr_type�_get_type_and_quals�_declare�	__class__�__name__r�argsrr�)r~r r�ra�iteratorr<�current_declr�Zrealtyper�r�rrr
r��sx
 95  
 96  
 97  ����
 98  ���
 99  
100  
101  �������zParser._internal_parsecCs8||jvr|j||krdStd|f��||j|<dS)Nz%multiple declarations of constant: %s)rzr)r~�key�valrrr
�_add_constants�s
102  �zParser._add_constantscCs�|���d�}|�d�}|r|dd�}|�d�r*|dkr*|�d�s*d|dd�}t|d�}|r4|}|�||�|�d||�dS)	N�ul�-r�0�0xZ0or�macro )�lower�rstriprrHr�r�)r~r;Zint_str�negZpyvaluerrr
�_add_integer_constant�s
103  �
104  zParser._add_integer_constantcCsb|��D]*\}}|��}t�|�r|�||�q|dkr%|�d||�qtd||||f��dS)NrPr�z�only supports one of the following syntax:
105    #define %s ...     (literally dot-dot-dot)
106    #define %s NUMBER  (with NUMBER an integer constant, decimal/hex/octal)
107  got:
108    #define %s %s)�itemsrU�_r_int_literalr"r�r�r)r~rar��valuerrr
r��s
109  
110  ���zParser._process_macroscCsX|�||�}|j�d�rd}n|jdkrd}n
111  |jdkrd}nd}|�||j|�dS)Nr�zdllexport_python Z__cffi_extern_python_startzextern_python Z!__cffi_extern_python_plus_c_startzextern_python_plus_c z	function )�_get_type_pointerry�getr�r�r;)r~�tpr�r<�tagrrr
�_declare_function�s
112  
113  zParser._declare_functioncCs|j}t|tjj�r%|j||jd�\}}t|tj�sJ�|�	|||�dSt|tjj
114  �r3|�d|�n$t|tjj�rA|�d|�nt|tjj
�rO|�d|�n|jsWtd|��|jr�|j|dd�\}}|jro|�	|||�dS|��r�t|d�r�t|jd	�r�t�|jj�r�|�|j|jj�dS|��r�t|jtjj�r�|jjd
115  kr�t|jjd	�r�t�|jjj�r�|�|jd
116  |jjj�dS|tjur�|j�d�r�|j|_dS|jdkr�td
��|tj@r�|js�|jd|j||d�dSt |�|jd|j||d�dSdS)N)r;�struct�union�enumz'construct does not declare any variableT�r��initr�r�Z__cffi_extern_python_r�z<cannot declare constants or variables with 'extern "Python"'z	constant r�z	variable )!r�r�rr��FuncDeclr�r;r�RawFunctionTyper��Struct�_get_struct_union_enum_type�Union�Enumr�is_raw_function�is_integer_type�hasattrr�r�r"r�r��UnaryOp�op�expr�	void_typerr��Q_CONST�
is_array_typer�r=)r~r<�noder�r�rrr
r��sj�
117  ��
118  ������
119  
120  �
121  ��zParser._parse_declcCs|�|�dSr
122  )�parse_type_and_quals)r~�cdeclrrr
�
123  parse_type'szParser.parse_typecCs`|�d|�dd�\}}|rJ�|jdjjjd}t|tjj�r*t	d|j
124  f��|�|j�S)Nzvoid __dummy(
125  %s
126  );�r�rzunknown identifier '%s')r�r�r�r��paramsr�rr��IDrr;r�)r~r�r�ra�exprnoderrr
r�*szParser.parse_type_and_qualsrcCs|||jvr#|j|\}}||ur||krdS|j�d�s#td|f��d|��vs+J�||f|j|<|r<|j�|�dSdS)Nr�zPmultiple declarations of %s (for interactive usage, try cdef(xx, override=True))r�)rsryr�r�splitrtrj)r~r;�obj�includedr�ZprevobjZ	prevqualsrrr
r�2s
127  ���zParser._declarecCsZd}t|tjjtjjf�r+d|jvr|tjO}d|jvr!|tjO}d|jvr+|tj	O}|S)Nr�const�volatile�restrict)
128  r�rr�r�r�r�rr��
129  Q_VOLATILE�
130  Q_RESTRICT�r~r�r�rrr
�_extract_quals@s
131  �
132  
133  
134  
135  
136  
137  zParser._extract_qualscCsjt|tj�r
138  |��St|tj�r/|j�d�r/|jdd���r/|jdur/|dur/t�	|||�St�
139  ||�S)N�$r)r�rr��as_function_pointer�StructOrUnionOrEnumr;r�isdigit�	forcename�NamedPointerType�PointerType)r~r�r��declnamerrr
r�Ls
140  ��zParser._get_type_pointercCsPt|tjj�r:t|jtjj�r:t|jj�dkr:d|jjd|jvr:|jd|jjd\}}||�	|�O}||fSt|tjj
141  �ru|jdurId}n|j|j|d�}|durb|dkr^d|f}d|}|j
|j||d�\}}t�||�|fSt|tjj�r�|�
|j�\}}	|j||	|d	�}|�	|�}||fSt|tjj��rj|�	|�}|j}
142  t|
143  tjj��r1t|
144  j�}|d
145  dgk�ri}|r�|d}|dvr�|�|d�d||<|d=nn|s�g}
d
D]}t|�|d��D]}|
�|�q�q�|s�dg}|dgk�rd|v�sd|v�rg}|
|}d�|�}|dk�rtj|fS|dk�r$td|jj��t||�\}}|||BfSt|
146  tjj��rD|�d|
147  |�}||fSt|
148  tjj��rW|�d|
149  |�}||fSt|
150  tjj��rj|�d|
151  |�}||fSt|tjj ��rz|�!||�dfSt|tjj��r�|jd||dd�dfSt|tjj��r�|jd||dd�dfStd|jj��)Nrr�rr�rPz_cffi_array_len(%s)r)r�r�)r��signed�char)�short�longr��unsigned)rrrrHrrrK�voidr�z:%d: bad usage of "..."r�r�r�T)�nestedz(:%d: bad or unsupported type declaration)"r�rr�r�r�r�rr�rsr��	ArrayDecl�dim�_parse_constantr�r�	ArrayTyper�r�r[r��rangerrr�r�coordr8rr�r�r�r�r��_parse_function_type)r~�typenoder;r�r�r�r��length�itemtypeZ	itemqualsr�r��prefixes�newnames�prefixr&�identZtp0Zquals0rrr
r�Us��
152  �
153  
154  �
155  
156  
157  ��
158  
159  
160  
161  �
162  ��
163  ���zParser._get_type_and_qualsc	s0tt|jdg��}t|�D]\}}t|d�s'td|pd|dt|dd�f��q
t|�dkoLt|d	jt	j
164  j�oLt|d	jjt	j
165  j�oL|d	jjj
d
166  gk}|r]|��|s]td|pZd���fdd
�|D�}|sp|tjgkrpg}��|j�\}}	d}
167  t|jd�r�|jjdd�gd�kr�d}
168  t�t|�|||
169  �S)Nr�r�zt%s arg %d: unknown type '%s' (if you meant to use the old C syntax of giving untyped arguments, it is not supported)z
in expressionrr;�?rr�r�z=%s: a function with only '(...)' as argument is not correct Ccsg|]}�j��|j���qSr)�_as_func_argr�r�)�.0Zargdeclnoder}rr
�
170  <listcomp>�s�z/Parser._parse_function_type.<locals>.<listcomp>r������)r�r�r��	__stdcall)r[�getattrr�r]r�rrr�r�rr�r�r�r��poprr�r�r�r��tuple)r~r�funcnamer�r&�arg�ellipsisr��resultr��abirr}r
r�sJ
171  
172  ���������
173  �zParser._parse_function_typecCs2t|tj�r
t�|j|�St|tj�r|��S|Sr)r�rrr��itemr�r�r�rrr
r�s
174  zParser._as_func_argcCs
175  z|j|WStyYnw|}|j}|dur1|dur"d|}n|jd7_d|j}d}n|}d||f}|j�|d�\}}	|dur�|dkrSt�|ddd�}n(|dkr`t�|ddd�}n|dkrt|d	krlt	d
176  ��|�
177  ||j�}ntd|f��|dur�|�
||�n|dkr�|jdur�td|��|js�|�|�|jr�d
|jvr�|�
d|j|�||j|<|dkr�|S|jdur�|S|jdur�t	d|��g}
178  g}g}g}
|jD]h}t|jtjj�r�d�|jj�d	kr�|�||�q�|jdur�d}n|�|j�}d|_|j|jdd�\}}|j�r|�||�t|tj��r&|j�r&|�||�|
179  � |j�p-d�|� |�|� |�|
� |�q�t!|
180  �|_t!|�|_"t!|�|_#t!|
�|_$|dgt%|�k�rot|tj��ro|j�rotd|f��|j&�d�|_'|j(�r�d|_(|j)� |�|S)Nz$%srz$%dz%s %s)NNr�r�r�r�z!Enums cannot be declared with ...z	kind = %rz^enum %s: the '{}' declaration should appear on the first time the enum is mentioned, not laterr�zanonymous %sz"duplicate declaration of struct %srr�FTr�z#%s: using both bitfields and '...;'r�r)*rx�KeyErrorr;rursr�r�
181  StructType�	UnionTyper�_build_enum_type�valuesrGr�r/r��force_the_name�decls�fldnamesr�r�rr�r�rr��
_make_partial�bitsizer�_partial_lengthr��partialrr�fldtypes�
182  fldbitsize�fldqualsrryr��	completedr{)r~�kindr�r;rZ
183  force_name�
explicit_namer�r��_r)r.r/r0r<r+�fqualrrr
r��s�	�
184  
185  ���
186  
187  
188  
189  
190  
191  
192  �
193  
194  
195  
196  
197  
198  �z"Parser._get_struct_union_enum_typecCs>t|tj�s
td|f��|��s|std|f��d|_dS)Nz%s cannot be partialz%s is partial but has no C nameT)r�r�
StructOrUnionr�
199  has_c_namer/r-)r~r�rrrr
r*_s
200  
201  zParser._make_partialcCs�t|tjj�r�|j}d|dkrdkrgnnO|�d�}z|�d�r)t|d�WSt|d�WSty_t	|�dkr]|�
202  �dd�d	krLt|d
203  �YS|�
204  �dd�dkr]t|d�YSYnwtd|f��|dd
kr�|dd
kr�t	|�dks�t	|�dkr�|ddkr�t|d�Std|f��t|tjj
�r�|jdkr�|�|j�St|tjj
�r�|jdkr�|�|j�St|tjj�r�|j|jvr�|j|jSt|tjj�r�|jdkr�|r�d|_dStd|jj��t|tjj��re|�|j�}|�|j�}|jdk�r||S|jdk�r
||S|jdk�r||S|jdk�r#|�||�S|jdk�r3||�||�|S|jdk�r=||>S|jdk�rG||?S|jdk�rQ||@S|jdk�r[||BS|jd k�re||AStd!|jj��)"Nr�r�9ZuUlLr�r�rr�r���0bzinvalid constant %r�'r�r	��\������+r�Z__dotdotdotarray__TrPzT:%d: unsupported '[...]' here, cannot derive the actual array length in this contextr�/�%z<<z>>�&�|�^z?:%d: unsupported expression: expected a simple numeric constant)r�rr��Constantr�r�rrHr�rr�r�ordr�r�rr�r�r;rzr,rr
205  r8�BinaryOp�left�right�_c_div)r~r�r�rIrHrIrrr
rfs�
206  
207  ��$
208  
209  
210  ��zParser._parse_constantcCs0||}|dk|dkAr||dkr|d7}|S)Nrrr)r~�a�brrrr
rJ�sz
Parser._c_divc	Cs�|durPd}g}g}d}|jD],}t�|j�rd}q|jdur%|�|j�}|�|j�|�|�|�|j|�|d7}qt|�}t|�}t	�
211  |||�}||_|St	�
212  |dd�}|S)NFrTrr)�enumerators�_r_enum_dotdotdotr"r;r�rrr�rr�EnumTyper-)	r~r3r(r-rM�
213  enumvaluesZ
nextenumvaluer�r�rrr
r%�s,
214  
215  
216  
217  �zParser._build_enum_typecCsr|j��D]!\}\}}|�d�rq|�dd�d}|dvr&|j||d|d�q|j��D]
218  \}}|�||�q,dS)Nzanonymous $enum_$rKrr)r�r�r��	anonymousrhT)r�r�)rsr�rr�r�rzr�)r~�otherr;r�r�r2�k�vrrr
�include�s
219  ��zParser.includecCs�|jjj}|dgkrt�|j�S|dgkr&|jdur d|j|_t�|j�S|dgkr<|jdur6d|j|_t�|j�Std|j	j
220  ��)Nr�Z__dotdotdotint__z'typedef int... %s'Z__dotdotdotfloat__z'typedef float... %s'�*:%d: unsupported usage of "..." in typedef)r�r�r�unknown_typer;r|�UnknownIntegerType�UnknownFloatTyperr
221  r8)r~r<r�rrr
r��s
222  
223  
224  
225  
226  
227  �zParser._get_unknown_typecCs.|jjjjdgkrt�|j�Std|jj��)Nr�rV)r�r�r�unknown_ptr_typer;rr
228  r8)r~r<rrr
r��s
229  �zParser._get_unknown_ptr_type)FFNF)Frr)NFN)NF)F)r��
230  __module__�__qualname__rr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrr�r*rrJr%rUr�r�rrrr
rr's@
231  &
232  
233  �73
234  
235  	
236237  i#
238  v
239  I
240  rr)4rrZcommontypesrr�errorrrrr�ImportErrorrvr��sys�version_info�thread�_thread�
allocate_lockr�rr��compile�DOTALL�	MULTILINErQrRrCr\rNrZrkr�
241  IGNORECASEr�rXrWrYr-rr_r`rr(r1r9r=rErJrfrq�objectrrrrrr
�<module>sf�
242  
243  �
244  �
245  �
246  
247  
248  
249  
250  
251  
252  
253  �
254  
255  *2
	B(