o
    ÛähÏB  ã                   @   sÚ  d dl Z d dlZd dlmZmZmZ d dlmZ dZdZ	dZ
dZede	d	e
dediZed
e	de
dediZede	de
ded
iZdZe de e¡ d ¡ZddddœZg g ‘ddg‘ddg‘ddg‘ddg‘ddg‘g d¢‘g d¢‘g d¢‘g d¢‘g d¢‘g d¢‘g d ¢‘g d!¢‘g d"¢‘g d#¢‘g d$¢‘g d%¢‘g d&¢‘g d'¢‘g d(¢‘g d)¢‘g d*¢‘g d+¢‘g d,¢‘g d-¢‘g d.¢‘g d/¢‘g d0¢‘g d1¢‘g d2¢‘g d3¢‘g d4¢‘g d5¢‘g d6¢‘g d7¢‘g d8¢‘g d9¢‘g d:¢‘g d;¢‘Zd<Zd=Zd>Zd?Zd@ZdAdB„ ZdCdD„ edƒD ƒZdEdF„ ZdGdH„ ZdIdJ„ ZdKdL„ Z dMdN„ Z!dOdP„ Z"dQdR„ Z#dSdT„ Z$dUdV„ Z%dWdX„ Z&dYdZ„ Z'd[d\„ Z(d]d^„ Z)dqd_d`„Z*dadb„ Z+dcdd„ Z,dedf„ Z-G dgdh„ dhƒZ.G didj„ djƒZ/dke/dle0e fdmdn„Z1dodp„ Z2dS )ré    N)ÚLUTÚbaseÚ
exceptions)ÚRSBlocké   é   é   é   é
   é	   é   é   é   é   é   s-   0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:s   ^[s   ]*\Zé   )é   r   r   é   é   é   é   é   é"   )r   r   é&   )r   é   é*   )r   r   é.   )r   é   é2   )r   r   é6   )r   é    é:   )r   r   é>   )r   r   r   éB   )r   r   é0   éF   )r   r   r   éJ   )r   r   r   éN   )r   r   é8   éR   )r   r   r!   éV   )r   r   r"   éZ   )r   r   r   éH   é^   )r   r   r   r&   éb   )r   r   r   r'   éf   )r   r   r   éP   éj   )r   r    r!   éT   én   )r   r   r!   r*   ér   )r   r   r"   r+   év   )r   r   r   r&   r.   éz   )r   r   r   r'   r/   é~   )r   r   é4   r'   éh   é‚   )r   r   r(   r)   él   é†   )r   r   é<   r*   ép   éŠ   )r   r   r!   r*   r4   éŽ   )r   r   r"   r+   r5   é’   )r   r   r   r'   r/   r7   é–   )r   r   r   éL   r/   é€   éš   )r   r   r   r0   r1   é„   éž   )r   r    r!   r2   r3   éˆ   é¢   )r   r   r   r)   r3   r?   é¦   )r   r   r!   r*   r4   r@   éª   i7  i%  iT  éì   é   c                 C   ó   | j S ©N©Ú
data_count)Úblock© rS   ú>/var/www/html/venv/lib/python3.10/site-packages/qrcode/util.pyÚ_data_countd   ó   rU   c                    s*   g | ]‰ d g‡ fdd„t ddƒD ƒ ‘qS )r   c              
      s&   g | ]}d t ttt |ˆ ¡ƒƒ ‘qS )r	   )ÚsumÚmaprU   r   Ú	rs_blocks)Ú.0Úversion©Úerror_correctionrS   rT   Ú
<listcomp>j   s    ÿÿz<listcomp>.<listcomp>r   é)   )Úrange)rZ   rS   r\   rT   r^   h   s    û
þÿÿr^   c                 C   sX   | d> }t |ƒt tƒ dkr$|tt |ƒt tƒ > N }t |ƒt tƒ dks| d> |B tA S )Nr
   r   )Ú	BCH_digitÚG15ÚG15_MASK©ÚdataÚdrS   rS   rT   ÚBCH_type_infor   s
   ÿrg   c                 C   sT   | d> }t |ƒt tƒ dkr$|tt |ƒt tƒ > N }t |ƒt tƒ dks| d> |B S )Nr   r   )ra   ÚG18rd   rS   rS   rT   ÚBCH_type_numberz   s
   ÿri   c                 C   s(   d}| dkr|d7 }| dL } | dks|S )Nr   r   rS   )re   ÚdigitrS   rS   rT   ra   �   s   þra   c                 C   s   t | d  S ©Nr   )ÚPATTERN_POSITION_TABLE©r[   rS   rS   rT   Úpattern_position‰   s   rn   c                 C   sŒ   | dkrdd„ S | dkrdd„ S | dkrdd„ S | dkr d	d„ S | d
kr(dd„ S | dkr0dd„ S | dkr8dd„ S | dkr@dd„ S t d|  ƒ‚)z>
    Return the mask function for the given mask pattern.
    r   c                 S   ó   | | d dkS ©Nr   r   rS   ©ÚiÚjrS   rS   rT   Ú<lambda>’   ó    zmask_func.<locals>.<lambda>r   c                 S   s   | d dkS rp   rS   rq   rS   rS   rT   rt   ”   ó    r   c                 S   s   |d dkS ©Nr   r   rS   rq   rS   rS   rT   rt   –   rv   r   c                 S   ro   rw   rS   rq   rS   rS   rT   rt   ˜   ru   r   c                 S   s$   t  | d ¡t  |d ¡ d dkS ©Nr   r   r   )ÚmathÚfloorrq   rS   rS   rT   rt   š   s   $ é   c                 S   s   | | d | | d  dkS rx   rS   rq   rS   rS   rT   rt   œ   s    r   c                 S   s    | | d | | d  d dkS rx   rS   rq   rS   rS   rT   rt   ž   ó     r   c                 S   s    | | d | | d  d dkS )Nr   r   r   rS   rq   rS   rS   rT   rt       r|   zBad mask pattern: )Ú	TypeError)ÚpatternrS   rS   rT   Ú	mask_func�   s"   r   c                 C   s   | dk rt S | dk rtS tS )Nr
   é   )ÚMODE_SIZE_SMALLÚMODE_SIZE_MEDIUMÚMODE_SIZE_LARGErm   rS   rS   rT   Úmode_sizes_for_version¤   s
   r„   c                 C   s4   | t tttfvrtd| › d�ƒ‚t|ƒ t|ƒ|  S )NúInvalid mode (ú))ÚMODE_NUMBERÚMODE_ALPHA_NUMÚMODE_8BIT_BYTEÚ
MODE_KANJIr}   Úcheck_versionr„   )Úmoder[   rS   rS   rT   Úlength_in_bits­   s   r�   c                 C   s$   | dk s| dkrt d| › d�ƒ‚d S )Nr   é(   zInvalid version (was z, expected 1 to 40))Ú
ValueErrorrm   rS   rS   rT   r‹   ¶   s   ÿr‹   c                 C   sD   t | ƒ}d}t| |ƒ}|t| |ƒ7 }|t| |ƒ7 }|t| |ƒ7 }|S ©Nr   )ÚlenÚ_lost_point_level1Ú_lost_point_level2Ú_lost_point_level3Ú_lost_point_level4)ÚmodulesÚmodules_countÚ
lost_pointrS   rS   rT   r˜   »   s   
r˜   c           	         s:  d}t |ƒ}dg|d  ‰ |D ]:}| | }|d }d}|D ]}|| |kr*|d7 }q|dkr6ˆ |  d7  < d}|| }q|dkrIˆ |  d7  < q|D ]<}| d | }d}|D ]#}| | | |krg|d7 }qX|dkrsˆ |  d7  < d}| | | }qX|dkrˆˆ |  d7  < qL|t‡ fdd„t d|d ƒD ƒƒ7 }|S )Nr   r   r{   c                 3   s    � | ]}ˆ | |d   V  qdS )r   NrS   )rZ   Úeach_length©Ú	containerrS   rT   Ú	<genexpr>ë   s
   € ÿ
ÿz%_lost_point_level1.<locals>.<genexpr>)r`   rW   )	r–   r—   r˜   Úmodules_rangeÚrowÚthis_rowÚprevious_colorÚlengthÚcolrS   rš   rT   r’   È   sD   

€
€
þr’   c           
      C   s�   d}t |d ƒ}|D ];}| | }| |d  }t|ƒ}|D ](}||d  }	|	||d  kr2t|d ƒ q|	|| kr9q|	|| kr@q|d7 }qq
|S )Nr   r   r   ©r`   ÚiterÚnext)
r–   r—   r˜   r�   rž   rŸ   Únext_rowÚmodules_range_iterr¢   Ú	top_rightrS   rS   rT   r“   ó   s"   
õr“   c           	      C   s¤  t |ƒ}t |d ƒ}d}|D ]†}| | }t|ƒ}d}|D ]w}||d  sˆ||d  rˆ||d  sˆ||d  rˆ||d  sˆ||d  r`||d  r`||d	  r`||d
  s`||d  s`||d  r„||d  sˆ||d  sˆ||d	  sˆ||d
  rˆ||d  rˆ||d  rˆ|d7 }||d  r“t|d ƒ qq|D ]¸}t|ƒ}d}|D ]­}| |d  | �s@| |d  | �r@| |d  | �s@| |d  | �r@| |d  | �s@| |d  | �r| |d  | �r| |d	  | �r| |d
  | �s| |d  | �s| |d  | �r<| |d  | �s@| |d  | �s@| |d	  | �s@| |d
  | �r@| |d  | �r@| |d  | �r@|d7 }| |d  | �rNt|d ƒ q¡q—|S )Nr
   r   r   r   r{   r   r   r   r   r   r	   rŽ   r£   )	r–   r—   r�   Úmodules_range_shortr˜   rž   rŸ   Úmodules_range_short_iterr¢   rS   rS   rT   r”     s¶   
ÿ
þ
ý
ü
û
ù
ø
	÷

ö
õ
ô
ó
ò
ñ
ð
ï
î
€ãÿþýüûùø	÷
öõôóòñðïî
€èr”   c                 C   s>   t tt | ƒƒ}t|ƒ|d  }tt|d d ƒd ƒ}|d S )Nr   éd   r   r{   r
   )rW   rX   ÚfloatÚintÚabs)r–   r—   Ú
dark_countÚpercentÚratingrS   rS   rT   r•   Z  s   r•   c                 c   sæ   � t | ƒ} d}dt t¡ d }t| ƒ|kr)t d| d ¡}t d| d ¡}ndt|ƒ d¡ d }t || ¡}t || ¡}t| |ƒ}|D ]'\}}|rXt	|t
d	d
�V  qIt||ƒD ]\}}	|retnt}
t	|	|
d	d
�V  q]qIdS )z›
    An iterator returning QRData chunks optimized to the data content.

    :param minimum: The minimum number of bytes in a row to split as a chunk.
    s   \dó   [ó   ]ó   ^s   +$ó   {Úasciis   ,}F)rŒ   Ú
check_dataN)Úto_bytestringÚreÚescapeÚ	ALPHA_NUMr‘   ÚcompileÚstrÚencodeÚ_optimal_splitÚQRDatar‡   rˆ   r‰   )re   ÚminimumÚnum_patternÚalpha_patternÚ	re_repeatÚnum_bitsÚis_numÚchunkÚis_alphaÚ	sub_chunkrŒ   rS   rS   rT   Úoptimal_data_chunksb  s&   €
þürÊ   c                 c   sx   � | r1t  || ¡}|sn%| ¡ | ¡ }}|r d| d |… fV  d| ||… fV  | |d … } | s| r:d| fV  d S d S )NFT)r¹   ÚsearchÚstartÚend)re   r~   ÚmatchrÌ   rÍ   rS   rS   rT   r¿   |  s   €ø	ÿr¿   c                 C   s   t | tƒst| ƒ d¡} | S )z^
    Convert data to a (utf-8 encoded) byte-string if it isn't a byte-string
    already.
    zutf-8)Ú
isinstanceÚbytesr½   r¾   ©re   rS   rS   rT   r¸   Š  s   
r¸   c                 C   s   |   ¡ rtS t | ¡rtS tS )z<
    Calculate the optimal mode for this chunk of data.
    )Úisdigitr‡   ÚRE_ALPHA_NUMrÎ   rˆ   r‰   rÑ   rS   rS   rT   Úoptimal_mode”  s
   
rÔ   c                   @   s2   e Zd ZdZddd„Zdd„ Zdd	„ Zd
d„ ZdS )rÀ   zS
    Data held in a QR compatible format.

    Doesn't currently handle KANJI.
    NTc                 C   sl   |rt |ƒ}|du rt|ƒ| _n!|| _|tttfvr"td|› d�ƒ‚|r1|t|ƒk r1td|› �ƒ‚|| _dS )zg
        If ``mode`` isn't provided, the most compact QR data type possible is
        chosen.
        Nr…   r†   z-Provided data can not be represented in mode )	r¸   rÔ   rŒ   r‡   rˆ   r‰   r}   r�   re   )Úselfre   rŒ   r·   rS   rS   rT   Ú__init__¦  s   
zQRData.__init__c                 C   ó
   t | jƒS rO   )r‘   re   ©rÕ   rS   rS   rT   Ú__len__¹  ó   
zQRData.__len__c                 C   sô   | j tkr*tdt| jƒdƒD ]}| j||d … }tt|ƒ }| t|ƒ|¡ qd S | j tkrjtdt| jƒdƒD ]/}| j||d … }t|ƒdkr^| t	 
|d ¡d t	 
|d ¡ d¡ q8| t	 
|¡d¡ q8d S | j}|D ]}| |d¡ qod S )	Nr   r   r   r   é-   r   r   r	   )rŒ   r‡   r`   r‘   re   ÚNUMBER_LENGTHÚputr­   rˆ   r»   Úfind)rÕ   Úbufferrr   ÚcharsÚ
bit_lengthre   ÚcrS   rS   rT   Úwrite¼  s&   
ý
 ÿùÿzQRData.writec                 C   r×   rO   )Úreprre   rØ   rS   rS   rT   Ú__repr__Ò  rÚ   zQRData.__repr__)NT)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rÖ   rÙ   rã   rå   rS   rS   rS   rT   rÀ   Ÿ  s    
rÀ   c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )Ú	BitBufferc                 C   s   g | _ d| _d S r�   )rß   r¡   rØ   rS   rS   rT   rÖ   ×  s   
zBitBuffer.__init__c                 C   s   d  dd„ | jD ƒ¡S )NÚ.c                 S   s   g | ]}t |ƒ‘qS rS   )r½   )rZ   ÚnrS   rS   rT   r^   Ü  s    z&BitBuffer.__repr__.<locals>.<listcomp>)Újoinrß   rØ   rS   rS   rT   rå   Û  s   zBitBuffer.__repr__c                 C   s,   t  |d ¡}| j| d|d  ? d@ dkS )Nr	   r   r   )ry   rz   rß   )rÕ   ÚindexÚ	buf_indexrS   rS   rT   ÚgetÞ  s   zBitBuffer.getc                 C   s0   t |ƒD ]}|  ||| d ? d@ dk¡ qd S rk   )r`   Úput_bit)rÕ   Únumr¡   rr   rS   rS   rT   rÝ   â  s    ÿzBitBuffer.putc                 C   rN   rO   )r¡   rØ   rS   rS   rT   rÙ   æ  rV   zBitBuffer.__len__c                 C   sV   | j d }t| jƒ|kr| j d¡ |r"| j|  d| j d ? O  < |  j d7  _ d S )Nr	   r   rD   r   )r¡   r‘   rß   Úappend)rÕ   Úbitrï   rS   rS   rT   rñ   é  s   
zBitBuffer.put_bitN)	ræ   rç   rè   rÖ   rå   rð   rÝ   rÙ   rñ   rS   rS   rS   rT   rê   Ö  s    rê   rß   rY   c              	      s’  d‰d}d}g }g }|D ]†}|j }|j| }t||ƒ}t||ƒ}‡ ‡fdd„t|ƒD ƒ}	ˆ|7 ‰|tjv r?t tj| d¡}
nt dgd¡}
t|ƒD ]}|
t dt |¡gd¡ }
qJt |	t	|
ƒd ¡}||
 }g }t	|ƒ| }t|ƒD ]}|| }| 
|dkr„|| nd¡ qt| 
|	¡ | 
|¡ qg }t|ƒD ]}|D ]}|t	|ƒk r¬| 
|| ¡ q�q™t|ƒD ]}|D ]}|t	|ƒk rÅ| 
|| ¡ q¶q²|S )Nr   c                    s   g | ]}d ˆ j |ˆ  @ ‘qS )éÿ   )rß   )rZ   rr   ©rß   ÚoffsetrS   rT   r^     s    z create_bytes.<locals>.<listcomp>r   )rQ   Útotal_countÚmaxr`   r   Ú
rsPoly_LUTr   Ú
PolynomialÚgexpr‘   ró   )rß   rY   Ú
maxDcCountÚ
maxEcCountÚdcdataÚecdataÚrs_blockÚdcCountÚecCountÚ
current_dcÚrsPolyrr   ÚrawPolyÚmodPolyÚ
current_ecÚ
mod_offsetÚmodIndexre   ÚdcÚecrS   rö   rT   Úcreate_bytesò  sP   




€þ€þr  c                 C   s   t ƒ }|D ]}| |jd¡ | t|ƒt|j| ƒ¡ | |¡ qt | |¡}tdd„ |D ƒƒ}t|ƒ|kr@t	 
dt|ƒ|f ¡‚tt|t|ƒ dƒƒD ]}| d¡ qKt|ƒd }|ritd| ƒD ]}| d¡ qa|t|ƒ d }	t|	ƒD ]}
|
d dkr„| td¡ qu| td¡ qut||ƒS )	Nr   c                 s   s   � | ]}|j d  V  qdS )r	   NrP   )rZ   rR   rS   rS   rT   rœ   /  s   € zcreate_data.<locals>.<genexpr>z:Code length overflow. Data size (%s) > size available (%s)Fr	   r   r   )rê   rÝ   rŒ   r‘   r�   rã   r   rY   rW   r   ÚDataOverflowErrorr`   Úminrñ   ÚPAD0ÚPAD1r  )r[   r]   Ú	data_listrß   re   rY   Ú	bit_limitÚ_ÚdelimitÚbytes_to_fillrr   rS   rS   rT   Úcreate_data&  s2   
ÿÿ
r  )r   )3ry   r¹   Úqrcoder   r   r   Úqrcode.baser   r‡   rˆ   r‰   rŠ   r�   r‚   rƒ   r»   r¼   rº   rÓ   rÜ   rl   rb   rh   rc   r  r  rU   r`   ÚBIT_LIMIT_TABLErg   ri   ra   rn   r   r„   r�   r‹   r˜   r’   r“   r”   r•   rÊ   r¿   r¸   rÔ   rÀ   rê   Úlistr  r  rS   rS   rS   rT   Ú<module>   s   üüüÿþýüûúùø	÷
öõôóòñðïîíìëêéèçæåäãâá à!ß"Þ#Ý$Ü%Û&Ú'Ù(Ø+ÿ
ú
		+L

74