
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
U
    ¡ê,aZP  ã                   @   s  d dl Z d dlZd dlZd dlZd dlT d dlmZ dddddd	d
ddddge Z[ejejej	e
eefZed ZdedfedfedffZed ZdZdd„ ZdUdddœdd„ZdVddœdd„Zddddd d!d"d#d$d%d&œ
Zd'd(„ Zd)d*„ Zd+d„ Zd,d-„ Zddœd.d„Ze d/d0¡Z d1e j!_"d2e j_"d3e j#_"d4e j$_"d5e j%_"d6e j&_"d7e j'_"d8e j(_"d9Z)d:Z*G d;d„ de ƒZ+dd<œd=d„Z,d>d?„ Z-d@dA„ Z.dWdBdC„Z/dXddœdEd„Z0dddœdFdG„Z1dYdd dHœdIdJ„Z2dKdL„ Z3e0Z4dMdN„ Z5dOd
„ Z6dPd	„ Z7G dQd„ dƒZ8dRdS„ Z9e:dTk�re9ƒ  dS )Zé    N)Ú*)Ú__all__Ú	code_infoÚdisÚdisassembleÚdistbÚdiscoÚfindlinestartsÚ
findlabelsÚ	show_codeÚget_instructionsÚInstructionÚBytecodeÚFORMAT_VALUE)NÚ ÚstrÚreprÚasciiÚMAKE_FUNCTION)ÚdefaultsZ
kwdefaultsZannotationsZclosurec                 C   s6   zt | |dƒ}W n  tk
r0   t | |dƒ}Y nX |S )NÚevalÚexec)ÚcompileÚSyntaxError)ÚsourceÚnameÚc© r   ú(/opt/alt/python38/lib64/python3.8/dis.pyÚ_try_compile   s
    r   ©ÚfileÚdepthc                C   sh  | d krt |d� d S t| dƒr&| j} t| dƒr8| j} n4t| dƒrJ| j} n"t| dƒr\| j} nt| dƒrl| j} t| dƒrüt| j 	¡ ƒ}|D ]p\}}t
|tƒrˆtd| |d� zt|||d	� W n0 tk
rì } ztd
||d� W 5 d }~X Y nX t|d� qˆnht| dƒ�rt| ||d	� nLt
| ttfƒ�r6t| |d� n.t
| tƒ�rRt| ||d	� ntdt| ƒj ƒ‚d S )N©r!   Ú__func__Ú__code__Úgi_codeÚag_codeÚcr_codeÚ__dict__zDisassembly of %s:r    zSorry:Úco_codeú(don't know how to disassemble %s objects)r   Úhasattrr$   r%   r&   r'   r(   Úsortedr)   ÚitemsÚ
isinstanceÚ
_have_codeÚprintr   Ú	TypeErrorÚ_disassemble_recursiveÚbytesÚ	bytearrayÚ_disassemble_bytesr   Ú_disassemble_strÚtypeÚ__name__)Úxr!   r"   r.   r   Zx1Úmsgr   r   r   r   +   s@    	







 ÿr#   c                C   sX   | d kr@z
t j} W n tk
r0   tdƒd ‚Y nX | jr@| j} q2t| jj| j|d� d S )Nz no last traceback to disassembler#   )	ÚsysÚlast_tracebackÚAttributeErrorÚRuntimeErrorÚtb_nextr   Útb_frameÚf_codeÚtb_lasti)Útbr!   r   r   r   r   X   s    
 Z	OPTIMIZEDZ	NEWLOCALSZVARARGSZVARKEYWORDSZNESTEDZ	GENERATORZNOFREEZ	COROUTINEZITERABLE_COROUTINEZASYNC_GENERATOR)
é   é   é   é   é   é    é@   é€   é   i   c                 C   s`   g }t dƒD ]:}d|> }| |@ r| t |t|ƒ¡¡ | |N } | s qVq| t| ƒ¡ d |¡S )NrJ   rE   ú, )ÚrangeÚappendÚCOMPILER_FLAG_NAMESÚgetÚhexÚjoin)ÚflagsÚnamesÚiÚflagr   r   r   Úpretty_flagsr   s    rY   c                 C   sŽ   t | dƒr| j} t | dƒr"| j} n4t | dƒr4| j} n"t | dƒrF| j} nt | dƒrV| j} t| tƒrjt| dƒ} t | dƒrx| S t	dt
| ƒj ƒ‚d S )	Nr$   r%   r&   r'   r(   z<disassembly>r*   r+   )r,   r$   r%   r&   r'   r(   r/   r   r   r2   r8   r9   ©r:   r   r   r   Ú_get_code_object€   s"    







ÿr[   c                 C   s   t t| ƒƒS ©N)Ú_format_code_infor[   rZ   r   r   r   r   —   s    c                 C   s„  g }|  d| j ¡ |  d| j ¡ |  d| j ¡ |  d| j ¡ |  d| j ¡ |  d| j ¡ |  d| j ¡ |  dt| j	ƒ ¡ | j
r¶|  d	¡ t| j
ƒD ]}|  d
| ¡ q¢| jrä|  d¡ t| jƒD ]}|  d| ¡ qÐ| j�r|  d¡ t| jƒD ]}|  d| ¡ �q | j�rH|  d¡ t| jƒD ]}|  d| ¡ �q2| j�rz|  d¡ t| jƒD ]}|  d| ¡ �qdd |¡S )NzName:              %szFilename:          %szArgument count:    %szPositional-only arguments: %szKw-only arguments: %szNumber of locals:  %szStack size:        %szFlags:             %sz
Constants:z%4d: %rzNames:z%4d: %szVariable names:zFree variables:zCell variables:Ú
)rP   Úco_nameÚco_filenameÚco_argcountÚco_posonlyargcountÚco_kwonlyargcountÚ
co_nlocalsÚco_stacksizerY   Úco_flagsÚ	co_constsÚ	enumerateÚco_namesÚco_varnamesÚco_freevarsÚco_cellvarsrT   )ÚcoÚlinesZi_cZi_nr   r   r   r]   ›   s<    




r]   c                C   s   t t| ƒ|d� d S ©Nr#   )r1   r   )rm   r!   r   r   r   r   »   s    Ú_InstructionzBopname opcode arg argval argrepr offset starts_line is_jump_targetz!Human readable name for operationzNumeric code for operationz6Numeric argument to operation (if any), otherwise Nonez4Resolved arg value (if known), otherwise same as argz0Human readable description of operation argumentz1Start index of operation within bytecode sequencez4Line started by this opcode (if any), otherwise Nonez1True if other code jumps to here, otherwise Falseé   é   c                   @   s   e Zd Zddd„ZdS )r   é   FrG   c                 C   sà   g }|r:| j d k	r,d| }| || j  ¡ n| d| ¡ |rJ| d¡ n
| d¡ | jrf| d¡ n
| d¡ | t| jƒ |¡¡ | | j t¡¡ | j	d k	rÒ| t| j	ƒ t
¡¡ | jrÒ| d| j d ¡ d |¡ ¡ S )	Nz%%%ddú z-->z   z>>z  ú(ú))Ústarts_linerP   Úis_jump_targetr   ÚoffsetÚrjustÚopnameÚljustÚ_OPNAME_WIDTHÚargÚ_OPARG_WIDTHÚargreprrT   Úrstrip)ÚselfÚlineno_widthZmark_as_currentÚoffset_widthZfieldsZ
lineno_fmtr   r   r   Ú_disassembleß   s&    



zInstruction._disassembleN)rs   FrG   )r9   Ú
__module__Ú__qualname__r…   r   r   r   r   r   Ñ   s   )Ú
first_linec                C   sT   t | ƒ}|j|j }tt|ƒƒ}|d k	r4||j }nd}t|j|j|j	|j
|||ƒS ©Nr   )r[   rl   rk   Údictr	   Úco_firstlinenoÚ_get_instructions_bytesr*   rj   ri   rg   )r:   rˆ   rm   Ú
cell_namesÚ
linestartsÚline_offsetr   r   r   r     s      þc                 C   s    | }|d k	r||  }|t |ƒfS r\   ©r   )Zconst_indexZ
const_listÚargvalr   r   r   Ú_get_const_info  s    r’   c                 C   s*   | }|d k	r||  }|}nt |ƒ}||fS r\   r�   )Z
name_indexZ	name_listr‘   r€   r   r   r   Ú_get_name_info'  s    r“   c              
   #   sŽ  t | ƒ}d }t| ƒD �]r\}	}
‰ |d k	rD| |	d ¡}|d k	rD||7 }|	|k}d }d}ˆ d k	�rlˆ }|
tkrztˆ |ƒ\}}nò|
tkr’tˆ |ƒ\}}nÚ|
tkr´|	d ˆ  }dt|ƒ }n¸|
t	krÌtˆ |ƒ\}}n |
t
krâtˆ  }|}nŠ|
tkrútˆ |ƒ\}}nr|
tk�rFtˆ d@  \}}|tˆ d@ ƒf}|d �rl|�r<|d7 }|d7 }n&|
tk�rld ‡ fd	d
„ttƒD ƒ¡}tt|
 |
ˆ |||	||ƒV  qd S )Nr   rF   zto rs   rG   rE   rN   zwith formatc                 3   s"   | ]\}}ˆ d |> @ r|V  qdS )rE   Nr   )Ú.0rW   Ús©r~   r   r   Ú	<genexpr>g  s    ÿz*_get_instructions_bytes.<locals>.<genexpr>)r
   Ú_unpack_opargsrR   Zhasconstr’   Zhasnamer“   Úhasjrelr   ZhaslocalZ
hascompareZcmp_opZhasfreer   ÚFORMAT_VALUE_CONVERTERSÚboolr   rT   rh   ÚMAKE_FUNCTION_FLAGSr   r{   )ÚcodeÚvarnamesrV   Ú	constantsÚcellsrŽ   r�   Úlabelsrw   ry   Úoprx   r‘   r€   r   r–   r   rŒ   7  sV    






    þrŒ   éÿÿÿÿc             
   C   s<   | j | j }tt| ƒƒ}t| j|| j| j| j|||d� d S ro   )	rl   rk   rŠ   r	   r6   r*   rj   ri   rg   )rm   Úlastir!   r�   rŽ   r   r   r   r   m  s       ÿc                C   sp   t | |d� |d ks|dkrl|d k	r,|d }| jD ]8}t|dƒr2t|d� td|f |d� t|||d� q2d S )Nr#   r   rE   r*   zDisassembly of %r:r    )r   rg   r,   r1   r3   )rm   r!   r"   r:   r   r   r   r3   t  s    


r3   )r!   r�   c             	   C   sÈ   |d k	}	|	r8t | ¡ ƒ| }
|
dkr2tt|
ƒƒ}q<d}nd}t| ƒd }|dkr^tt|ƒƒ}nd}t| ||||||d�D ]J}|	o’|jd k	o’|jdk}|r¢t|d� |j|k}t| |||¡|d� qxd S )	Niè  rs   r   rF   i'  rG   ©r�   r#   )	ÚmaxÚvaluesÚlenr   rŒ   rw   ry   r1   r…   )r�   r¤   rž   rV   rŸ   r    rŽ   r!   r�   Zshow_linenoZ	maxlinenorƒ   Z	maxoffsetr„   ZinstrZnew_source_lineZis_current_instrr   r   r   r6     s8      þ
ÿþ

ÿr6   c                 K   s   t t| dƒf|Ž d S )Nz<dis>)r3   r   )r   Úkwargsr   r   r   r7   �  s    r7   c                 c   sd   d}t dt| ƒdƒD ]J}| | }|tkrN| |d  |B }|tkrH|d> nd}nd }|||fV  qd S )Nr   rF   rE   rH   )rO   r¨   ZHAVE_ARGUMENTZEXTENDED_ARG)r�   Zextended_argrW   r¢   r~   r   r   r   r˜   £  s    r˜   c                 C   s\   g }t | ƒD ]J\}}}|d k	r|tkr4|d | }n|tkr|}nq||kr| |¡ q|S )NrF   )r˜   r™   ZhasjabsrP   )r�   r¡   ry   r¢   r~   Zlabelr   r   r   r
   ®  s    c           	      c   sª   | j dd d… }| j dd d… }t| jƒ}d }| j}d}t||ƒD ]P\}}|rz||krd||fV  |}||7 }||krz d S |dkrŠ|d8 }||7 }qB||kr¦||fV  d S )Nr   rF   rE   rL   rM   )Ú	co_lnotabr¨   r*   r‹   Úzip)	r�   Zbyte_incrementsZline_incrementsZbytecode_lenZ
lastlinenoÚlinenoZaddrZ	byte_incrZ	line_incrr   r   r   r	   Á  s&    


c                   @   sH   e Zd Zdddœdd„Zdd„ Zdd„ Zed	d
„ ƒZdd„ Zdd„ Z	dS )r   N)rˆ   Úcurrent_offsetc                C   sd   t |ƒ | _}|d kr&|j| _d| _n|| _||j | _|j|j | _tt	|ƒƒ| _
|| _|| _d S r‰   )r[   Úcodeobjr‹   rˆ   Ú_line_offsetrl   rk   Ú_cell_namesrŠ   r	   Ú_linestartsÚ_original_objectr­   )r‚   r:   rˆ   r­   rm   r   r   r   Ú__init__ç  s    zBytecode.__init__c              	   C   s*   | j }t|j|j|j|j| j| j| jd�S )Nr¥   )	r®   rŒ   r*   rj   ri   rg   r°   r±   r¯   )r‚   rm   r   r   r   Ú__iter__ô  s     ýzBytecode.__iter__c                 C   s   d  | jj| j¡S )Nz{}({!r}))ÚformatÚ	__class__r9   r²   ©r‚   r   r   r   Ú__repr__û  s    
ÿzBytecode.__repr__c                 C   s    |j r|j }q | |jj|jd�S )N)r­   )r@   rA   rB   rC   )ÚclsrD   r   r   r   Úfrom_tracebackÿ  s    zBytecode.from_tracebackc                 C   s
   t | jƒS r\   )r]   r®   r·   r   r   r   Úinfo  s    zBytecode.infoc                 C   sl   | j }| jd k	r| j}nd}t ¡ �>}t|j|j|j|j| j	| j
| j||d�	 | ¡ W  5 Q R £ S Q R X d S )Nr£   )rž   rV   rŸ   r    rŽ   r�   r!   r¤   )r®   r­   ÚioÚStringIOr6   r*   rj   ri   rg   r°   r±   r¯   Úgetvalue)r‚   rm   ry   Úoutputr   r   r   r   
  s    


 úzBytecode.dis)
r9   r†   r‡   r³   r´   r¸   Úclassmethodrº   r»   r   r   r   r   r   r   ß  s   
c               	   C   sf   dd l } |  ¡ }|jd|  d¡ddd� | ¡ }|j�}| ¡ }W 5 Q R X t||jjdƒ}t	|ƒ d S )Nr   ÚinfileÚrbú?ú-)r8   ÚnargsÚdefaultr   )
ÚargparseÚArgumentParserÚadd_argumentZFileTypeÚ
parse_argsrÁ   Úreadr   r   r   )rÇ   ÚparserÚargsrÁ   r   r�   r   r   r   Ú_test  s    rÎ   Ú__main__)N)N)NNNNNr   )r£   )r£   NNNNN);r<   ÚtypesÚcollectionsr¼   Zopcoder   Z_opcodes_allÚ
MethodTypeÚFunctionTypeÚCodeTyperÀ   Ústaticmethodr8   r0   Zopmapr   r   r   r   rš   r   rœ   r   r   r   rQ   rY   r[   r   r]   r   Ú
namedtuplerp   r{   Ú__doc__r~   r‘   r€   ry   rw   rx   r}   r   r   r   r’   r“   rŒ   r   r3   r6   r7   r   r˜   r
   r	   r   rÎ   r9   r   r   r   r   Ú<module>   s²   
    þþ  ÿü-ö ÿ4      ÿ
6      ÿ þ=
