ó
    EñiÍ ã                   óˆ  • S r SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK	J
r
JrJrJrJr  SSKJrJrJrJrJr  SSKJr  SSKJrJrJrJr  SSKJr  \(       a  SS	KJr  \R@                  " S
S9 " S S5      5       r!\R@                  " S
S9 " S S5      5       r"\RF                  S:¼  a  S\RD                  S\"4S jr$O7\RF                  S:¼  a  S\RD                  S\"4S jr$OS\RD                  S\"4S jr$ " S S5      r%\RF                  S:¼  a
  S\&S\'4S jr(O#\RF                  S:¼  a
  S\&S\'4S jr(O	S\&S\'4S jr(S\%SS.S\&S\\)   S \\   S!\\"   S\"4
S" jjr*S!\"S\"4S# jr+S!\"S\'4S$ jr,S—S%\S&\'S\"4S' jjr-S\"4S( jr.S)\)S\/\"   4S* jr0S+\\"\/\"   4   S\/\"   4S, jr1S+\\"\/\"   4   S\/\"   4S- jr2S.\)S/\'S\/\"   4S0 jr3 S˜S1\'S/\'S2\'S\/\"   4S3 jjr4S.\)S\/\"   4S4 jr5S\&S\"4S5 jr6S!\"S\"4S6 jr7S)\)S\/\"   4S7 jr8 S˜S8\\)   S9\\)   S:\'S\/\"   4S; jjr9S\)S\/\"   4S< jr:S=\)S\/\"   4S> jr;S?\S\/\"   4S@ jr<S\"4SA jr=S)\)S\"4SB jr>SC\)S\?\/\)   \
\)\)/S4   \
\)/S4   4   4SD jr@S)\)S\/\)   4SE jrA\RF                  S:¼  a%  SC\)S\?\/\)   \
\R„                  S-  \)/S4   4   4SF jrC\R@                  " S
S9 " SG SH5      5       rDS)\)S\/\)   4SI jrESJ\\)   S\)4SK jrFSL\/\D   SS4SM jrGSN\HS\/\D   4SO jrISL\/\D   S\H4SP jrJSQ\/\"   SR\)S\?\H\H4   4SS jrKST\L\)\"4   SU\)S\\"   4SV jrMSQ\\"   SS4SW jrN\O" \R                   5      rQSX\"SS4SY jrRSQ\/\"   SZ\)S\"4S[ jrSSQ\/\"   SS4S\ jrTS]\HSQ\/\"   SS4S^ jrUSQ\/\"   S\/\D   4S_ jrVSL\/\!   S`\L\"\)4   SS4Sa jrWSQ\/\"   SS4Sb jrXSQ\/\"   SS4Sc jrYSQ\/\"   SS4Sd jrZSe\"Sf\/\"   S\/\"   4Sg jr[SQ\/\"   S\/\"   4Sh jr\SQ\/\"   SS4Si jr]SQ\/\"   SS4Sj jr^SkSlSmSnSo.r_SQ\/\"   SS4Sp jr`SQ\/\"   SS4Sq jraSQ\/\"   SS4Sr jrbSs\RÆ                  SQ\/\"   SS4St jrdSQ\/\"   S\)4Su jreSv\"S\)4Sw jrfSQ\\"   SS4Sx jrgSQ\\"   SS4Sy jrhSz\HS\&4S{ jriSs\RÆ                  SS4S| jrj\O" \RÖ                  5      rl\O" \RÚ                  5      rn\O" \RÞ                  5      rp\O" \Râ                  5      rrS}\L\&\4   S%\S\)4S~ jrs S™SQ\/\"   S}\L\&\4   S\\
S€\4      SS4S� jjrtSQ\/\"   SS4S‚ jru\Rì                  S\/\&   4Sƒ j5       rw S˜Ss\RÆ                  S„\
\/\"   \L\&\4   /\S…   4   S†\'S\?\RÆ                  \S…   4   4S‡ jjrxSQ\/\"   Sˆ\/\&   S}\L\&\4   S\?\/\"   \RÆ                  4   4S‰ jrySQ\\"   SŠ\SS4S‹ jrzS˜Ss\RÆ                  S†\'S\/\"   4SŒ jjr{SQ\\"   S\/\"   4S� jr|\Rì                   S˜Ss\RÆ                  S†\'S\\"   4SŽ jj5       r}\Rü                  " 5       rS˜S\&S�\'S\&4S� jjr€Ss\RÆ                  S\'4S‘ jr�   SšS’\
S€\4   S“\\\\4      S”\'S•\'S\/\"   4
S– jjr‚g)›a€  
This module provides utilities for analyzing, transforming and manipulating Python bytecode.
It includes functionality for:
- Converting between different bytecode formats and versions
- Virtualizing jumps and managing jump targets
- Handling exception tables and their entries
- Managing instruction offsets and extended arguments
- Providing a clean API for bytecode modification and transformation
- Supporting Python version-specific bytecode features
- Generating bytecode from template functions

The module is designed to work across different Python versions (3.7+) and handles
version-specific bytecode differences transparently.
é    N)ÚCallableÚIterableÚIteratorÚMappingÚSequence)ÚAnyÚcastÚOptionalÚTYPE_CHECKINGÚUnioné   )Úconfig)Úget_indexofÚpropagate_line_numsÚremove_extra_line_numsÚstacksize_analysis)Úis_safe_constant)ÚDynamoTracerOutputT)Úslotsc                   óh   • \ rS rSr% S\S'   S\S'   S\S'   \\S'   \\S'   S\4S	 jrS
\	S\4S jr
Srg)ÚInstructionExnTabEntryé)   ÚInstructionÚstartÚendÚtargetÚdepthÚlastiÚreturnc                 óÞ   • SU R                   R                  5        SU R                  R                  5        SU R                  R                  5        SU R                   SU R
                   S3$ )NzInstructionExnTabEntry(start=z, end=z	, target=z, depth=z, lasti=Ú))r   Úshort_inst_reprr   r   r   r   ©Úselfs    Úb/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/_dynamo/bytecode_transformation.pyÚ__repr__ÚInstructionExnTabEntry.__repr__1   sl   € à+¨D¯J©J×,FÑ,FÓ,HÐ+Ið JØ—8‘8×+Ñ+Ó-Ð.ð /Ø—k‘k×1Ñ1Ó3Ð4ð 5Ø—Z‘Z�L ¨¯©¨°Að7ð	
ó    Úoc                 óZ  • [        U[        5      (       d  gU R                  UR                  L =(       aw    U R                  UR                  L =(       aX    U R                  UR                  L =(       a9    U R
                  UR
                  :H  =(       a    U R                  UR                  :H  $ ©NF)Ú
isinstancer   r   r   r   r   r   )r$   r)   s     r%   Ú__eq__ÚInstructionExnTabEntry.__eq__9   s€   € Ü˜!Ô3×4Ñ4Øà�J‰J˜!Ÿ'™'Ð!÷ &Ø—‘˜AŸE™EÐ!÷&à—‘˜qŸx™xÐ'÷&ð —
‘
˜aŸg™gÑ%÷&ð —
‘
˜aŸg™gÑ%ð	
r(   © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__annotations__ÚintÚboolÚstrr&   Úobjectr-   Ú__static_attributes__r/   r(   r%   r   r   )   s=   ‡ àÓØ	ÓØÓØƒJØƒKð
˜#ô 
ð	
˜ð 	
 4÷ 	
r(   r   c                   ó  • \ rS rSr% Sr\\S'   \\S'   \\   \S'   \	\S'   Sr
\\   \S'   Sr\\   \S	'   S
r\\S'   Sr\S   \S'   Sr\S    \S'   Sr\\   \S'   Sr\\   \S'   S\4S jrS\S\4S jrS\4S jrSS jrSrg)r   éE   z$A mutable version of dis.InstructionÚopcodeÚopnameÚargÚargvalNÚoffsetÚstarts_lineFÚis_jump_targetzdis.PositionsÚ	positionsr   Úexn_tab_entryÚargreprr   c                 ó   • [        U 5      $ ©N©Úidr#   s    r%   Ú__hash__ÚInstruction.__hash__W   s   € Ü�$‹xˆr(   Úotherc                 ó0   • [        U 5      [        U5      :H  $ rG   rH   ©r$   rL   s     r%   r-   ÚInstruction.__eq__Z   s   € Ü�$‹xœ2˜e›9Ñ$Ð$r(   c                 ó<   • SU R                    SU R                   S3$ )NzInstruction(opname=z	, offset=r!   )r=   r@   r#   s    r%   r"   ÚInstruction.short_inst_repr]   s   € Ø$ T§[¡[ M°¸4¿;¹;¸-ÀqÐIÐIr(   c                 óH   • UR                   U l         UR                  U l        g rG   )rA   rC   rN   s     r%   Úcopy_positionsÚInstruction.copy_positions`   s   € Ø ×,Ñ,ˆÔØŸ™ˆ�r(   )rC   rA   )rL   r   r   N)r0   r1   r2   r3   Ú__doc__r5   r4   r7   r
   r   r@   rA   rB   r6   rC   r   rD   r   rE   rJ   r8   r-   r"   rS   r9   r/   r(   r%   r   r   E   s²   ‡ á.àƒKØƒKØ	�#‰ÓØƒKØ €FˆH�S‰MÓ Ø!%€K�˜#‘Ó%Ø €N�DÓ à+/€Iˆx˜Ñ(Ó/à&*€FˆH�]Ñ#Ó*Ø6:€M�8Ð2Ñ3Ó:Ø!€GˆX�c‰]Ó!ð˜#ô ð%˜Fð % tô %ðJ ô J÷)r(   r   ©é   é   Úir   c           
      óÆ   • [        U R                  U R                  U R                  U R                  U R
                  U R                  U R                  U R                  5      $ rG   )	r   r<   r=   r>   r?   r@   Úline_numberrB   rC   ©rY   s    r%   Úconvert_instructionr]   g   óI   € ÜØ�H‰HØ�H‰HØ�E‰EØ�H‰HØ�H‰HØ�M‰MØ×ÑØ�K‰Kó	
ð 		
r(   ©rW   é   c           
      óÆ   • [        U R                  U R                  U R                  U R                  U R
                  U R                  U R                  U R                  5      $ rG   )	r   r<   r=   r>   r?   r@   rA   rB   rC   r\   s    r%   r]   r]   u   r^   r(   c           
      ó²   • [        U R                  U R                  U R                  U R                  U R
                  U R                  U R                  S 5      $ rG   )r   r<   r=   r>   r?   r@   rA   rB   r\   s    r%   r]   r]   ƒ   sE   € ÜØ�H‰HØ�H‰HØ�E‰EØ�H‰HØ�H‰HØ�M‰MØ×ÑØó	
ð 		
r(   c                   ó"   • \ rS rSrS\4S jrSrg)Ú_NotProvidedé�   r   c                 ó   • g)Nrd   r/   r#   s    r%   r&   Ú_NotProvided.__repr__‘   s   € Ør(   r/   N)r0   r1   r2   r3   r7   r&   r9   r/   r(   r%   rd   rd   �   s   † ð˜#÷ r(   rd   ©rW   é   Únamec                 ó   • U S;   $ )N)Ú	LOAD_ATTRÚLOAD_GLOBALÚLOAD_SUPER_ATTRr/   ©rj   s    r%   Úinst_has_op_bitsrp   —   s   € ØÐFÑFÐFr(   c                 ó   • U S:H  $ )Nrm   r/   ro   s    r%   rp   rp   œ   s   € Ø�}Ñ$Ð$r(   c                 ó   • gr+   r/   ro   s    r%   rp   rp   ¡   s   € Ør(   )r>   r?   r   r>   r?   r   c                ó  • [        U 5      (       a  Ub  [        S5      eUc  SnO#USLU[        L-   USL-   nUS:”  a  [        S5      eUb   [        U[        5      (       d  [        S5      e[        [        R                  U    XX#S9$ )a¢  
At most one of `arg`, `argval`, and `target` can be not None/_NotProvided.
This is to prevent ambiguity, e.g. does
    create_instruction("LOAD_CONST", 5)
mean load the constant at co_consts[5], or load the constant 5?

If `arg` is not provided, it will be computed during assembly from
`argval` or `target`.

Bits in the args of instructions LOAD_GLOBAL, LOAD_ATTR (3.12+), and LOAD_SUPER_ATTR
modify the behavior of the instruction. In this case, we allow both `arg`
and `argval` to be set. The value of `arg` here is expected to be the value of
the op bits and the true value of `arg` will be computed during assembly.
If `arg` is not set, the bits are assumed to be 0.
Nz*target cannot be specified for instructionr   r   z@only one of arg, argval, and target can be not None/_NotProvidedz#instruction arg must be int or None)r<   r=   r>   r?   r   )rp   ÚRuntimeErrorrd   r,   r5   r   ÚdisÚopmap)rj   r>   r?   r   Úcnts        r%   Úcreate_instructionrx   ¥   sœ   € ô0 ˜×ÑØÑÜÐKÓLÐLØ‰;ØˆCøà˜$ˆ 6´Ð#=Ñ>À&ÐPTÐBTÑUˆØ�‹7ÜØRóð ð �œz¨#¬s×3Ñ3ÜÐ@ÓAÐAÜÜ�y‰y˜‰ t¸Vñð r(   c                 óD   • [         R                  S:¼  a  SOSn[        XS9$ )Nr_   ÚJUMP_FORWARDÚJUMP_ABSOLUTE©r   ©ÚsysÚversion_inforx   )r   Úinsts     r%   Úcreate_jump_absoluter�   Ð   s!   € Ü ×-Ñ-°Ó8‰>¸o€DÜ˜dÑ2Ð2r(   c                 ó    • U R                   S;   $ )N)rz   r{   )r=   r|   s    r%   Úis_jump_absoluterƒ   Õ   s   € Ø�=‰=Ð=Ñ=Ð=r(   ÚvalÚcheckedc                 óX   • U(       a  [        U 5      (       d
   SU  35       e[        SU S9$ )zÇ
In general we should only create `LOAD_CONST` for immutable objects, but
sometimes it's convenient _and safe_ for Dynamo create `LOAD_CONST` for
mutable objects. In such cases, use `checked=False`.
zunsafe constant Ú
LOAD_CONST©r?   )r   rx   )r„   r…   s     r%   Úcreate_load_constr‰   Ù   s2   € ö Ü ×$Ñ$Ð>Ð(8¸¸Ð&>Ó>Ð$Ü˜l°3Ñ7Ð7r(   c                  óT   • [         R                  S:¼  a
  [        SSS9$ [        S5      $ )Nr_   ÚCOPYr   ©r>   ÚDUP_TOPr}   r/   r(   r%   Úcreate_dup_toprŽ   ä   s(   € Ü
×Ñ˜7Ó"Ü! &¨aÑ0Ð0Ü˜iÓ(Ð(r(   Únc                 óà   • U S::  a  / $ [         R                  S:¼  a&  [        U SS5       Vs/ s H  n[        SUS9PM     sn$ U S::  a  [        S/ SQU S	-
     -   5      /$ [        S
U S9/$ s  snf )aj  
Returns a "simple" sequence of instructions that rotates TOS to the n-th
position in the stack. For Python < 3.11, returns a single ROT_*
instruction. If no such instruction exists, an error is raised and the
caller is expected to generate an equivalent sequence of instructions.
For Python >= 3.11, any rotation can be expressed as a simple sequence of
swaps.
r   r_   éÿÿÿÿÚSWAPrŒ   é   ÚROT_)ÚTWOÚTHREEÚFOURé   ÚROT_N)r~   r   Úrangerx   )r�   rY   s     r%   Úcreate_rot_nr›   ê   s€   € ð 	ˆAƒvàˆ	ä
×Ñ˜7Ó"ô <AÀÀAÀr¼?ÓKº?°aÔ" 6¨qÔ1¹?ÑKÐKàˆAƒvÜ" 6Ò,DÀQÈÁUÑ,KÑ#KÓLÐMÐMÜ˜w¨AÑ.Ð/Ð/ùò	 Ls   ¬A+Úinst_or_instsc                 ó  ^• [        U [        5      (       a  U /mO[        U [        5      (       d   eU mS[        S[        4U4S jjnS[        SS4U4S jjn[
        R                  S:¼  aF  [        TS   R                  5      (       a  U" S5      (       d
  U" S5        T$ T[        S5      /-   m T$ [
        R                  S	:¼  ap  [        TS   R                  5      (       a  U" S5      (       d
  U" S5        T$ TS
   R                  S:X  a  U" S
5      (       d
  U" S
5        T$ [        S5      /T-   m T$ [
        R                  S:¼  aC  [        TS
   R                  5      (       a  U" S
5      (       d
  U" S
5        T$ [        S5      /T-   mT$ )ag  
Appends or prepends a PUSH_NULL instruction to `inst_or_insts`,
depending on Python version. Used when you know that
`inst_or_insts` generates a callable that will be called.

NOTE: Assumes `inst_or_insts` is a single instruction or sequence of
instructions that pushes exactly 1 object to the stack that is to
be called. It is important that you include ALL instructions that
construct the callable - not just the first instruction/a prefix.

Will attempt to use the NULL push bit for instructions
with such bits (LOAD_GLOBAL 3.11+, LOAD_ATTR 3.12+, LOAD_SUPER_ATTR).
In this case, instructions WILL be modified.
Úidxr   c                 óR   >• TU    R                   c   eTU    R                   S-  S:H  $ ©Nr   rŒ   ©rž   Úinstss    €r%   Úinst_has_bit_setÚ'add_push_null.<locals>.inst_has_bit_set  s/   ø€ Ø�S‰z�~‰~Ñ)Ð)Ð)Ø�S‰z�~‰~ Ñ! QÑ&Ð&r(   Nc                 óZ   >• TU    R                   c   eTU    =R                   S-  sl         g r    rŒ   r¡   s    €r%   Úset_inst_bitÚ#add_push_null.<locals>.set_inst_bit  s)   ø€ Ø�S‰z�~‰~Ñ)Ð)Ð)Øˆc‰
�Š˜!ÑŽr(   rV   r‘   Ú	PUSH_NULLrh   r   rm   r_   )
r,   r   Úlistr5   r6   r~   r   rp   r=   rx   )rœ   r£   r¦   r¢   s      @r%   Úadd_push_nullrª     s�  ø€ ô" �-¤×-Ñ-Ø$1 ?‰ä˜-¬×.Ñ.Ð.Ð.Øˆð'œcð '¤d÷ 'ðœ#ð  $÷ ô ×Ñ˜7Ó"ä˜E "™I×,Ñ,×-Ñ-Ñ6FÀr×6JÑ6Jñ ˜Ôð& €Lð# Ô/°Ó<Ð=Ñ=‰Eð" €Lô! 
×	Ñ	˜WÓ	$ô ˜E "™I×,Ñ,×-Ñ-Ñ6FÀr×6JÑ6JÙ˜Ôð €Lð �1‰X�_‰_ Ó-Ñ6FÀq×6IÑ6IÙ˜ŒOð €Lô (¨Ó4Ð5¸Ñ=‰Eð €Lô 
×	Ñ	˜WÓ	$ä˜E !™HŸO™O×,Ñ,Ñ5EÀa×5HÑ5HÙ˜ŒOð €Lô (¨Ó4Ð5¸Ñ=ˆEØ€Lr(   c                 óÐ  • [        U [        5      (       a  U /nO[        U [        5      (       d   eU n[        R                  S:  a  U$ [        R                  S:¼  a  SOSnX   R
                  S:X  a?  X   R                  c   eX   R                  S-  S:X  a  X   =R                  S-  sl        U$ [        R                  S:¼  a  U[        S5      /-   nU$ [        S5      /U-   nU$ )z~Like add_push_null, but the low bit of LOAD_ATTR/LOAD_SUPER_ATTR
is not set, due to an expected CALL_FUNCTION_EX instruction.
r_   rV   r‘   r   rm   r   r¨   )r,   r   r©   r~   r   r=   r>   rx   )rœ   r¢   rž   s      r%   Úadd_push_null_call_function_exr¬   <  sâ   € ô �-¤×-Ñ-Ø$1 ?‰ä˜-¬×.Ñ.Ð.Ð.Øˆä
×Ñ˜'Ó!Øˆä× Ñ  GÓ+‰"°€CØ�z×Ñ˜MÓ)Ø‰z�~‰~Ñ)Ð)Ð)Ø‰:�>‰>˜AÑ Ó"Ø‰J�NŠN˜aÑ�NØˆLä
×Ñ˜7Ó"ØÔ+¨KÓ8Ð9Ñ9ˆð €Lô $ KÓ0Ð1°EÑ9ˆà€Lr(   ÚnargsÚ	push_nullc                 ó†  • [         R                  S:¼  a£  / nU(       aR  UR                  [        S5      5        [         R                  S:¼  a  U S-   OU S-   nUR	                  [        U5      5        [         R                  S:  a  UR                  [        SU S95        UR                  [        S	U S95        U$ [        S
U S9/$ )aÓ  
Creates a sequence of instructions that makes a function call.

`push_null` is used in Python 3.11+ only. It is used in codegen when
a function call is intended to be made with the NULL + fn convention,
and we know that the NULL has not been pushed yet. We will push a
NULL and rotate it to the correct position immediately before making
the function call.

`push_null` should be True if no NULL is pushed for the callable.
Conversely, `push_null` should be False if a NULL was pushed for the callable.
Prefer using `push_null=False` when possible since we will not need to rotate
NULL to the right place, which is less efficient.

Generally, you should codegen a function by using `add_push_null` then
`create_call_function` with `push_null=False`.

Example of when to set push_null False:

insts = [
    create_instruction("LOAD_GLOBAL", argval="torch"),
    create_instruction("LOAD_ATTR", argval="nn"),
    create_instruction("LOAD_ATTR", argval="functional"),
    create_instruction("LOAD_ATTR", argval="relu"),
]
insts = add_push_null(insts)
insts.append(create_instruction("LOAD_FAST", argval="x"))
insts.extend(create_call_function(1, False))

Example of when to set push_null True:

insts = [create_instruction("LOAD_FAST", x)]
for should_wrap, wrapper_name in wrappers:
    if should_wrap:
        insts.extend([
            create_instruction("LOAD_GLOBAL", argval="wrapper1"),
            create_instruction("SWAP", arg=2),
            *create_call_function(1, True),
        )
r_   r¨   rV   r   r˜   rh   ÚPRECALLrŒ   ÚCALLÚCALL_FUNCTION)r~   r   Úappendrx   Úextendr›   )r­   r®   ÚoutputÚrotss       r%   Úcreate_call_functionr·   Z  s¥   € ôR ×Ñ˜7Ó"ØˆÞØ�M‰MÔ,¨[Ó9Ô:ä #× 0Ñ 0°GÓ ;�5˜1’9ÀÈÁˆDØ�M‰Mœ, tÓ,Ô-Ü×Ñ˜gÓ%Ø�M‰MÔ,¨Y¸EÑBÔCØ�‰Ô(¨°UÑ;Ô<ØˆÜ˜°EÑ:Ð;Ð;r(   Ú
has_kwargsÚignore_314_kwargs_pushc                 óð  • [         R                  S:¼  aÏ  / n[         R                  S:¼  a*  U (       d#  U(       d  UR                  [        S5      5        Sn U(       ad  UR                  [        S5      5        [         R                  S:¼  a  [	        U 5      S-   O[	        U 5      S-   nUR                  [        U5      5        UR                  [        S[	        U 5      S	95        U$ [        S[	        U 5      S	9/$ )
a  
Assumes that in 3.14+, if has_kwargs=False, there is NOT a NULL
on the TOS for the kwargs. This utility function will add a PUSH_NULL.

If the caller has already pushed a NULL for the kwargs, then set ignore_314_kwargs_push=True
so we don't push another NULL for the kwargs.
r_   ©rW   é   r¨   TrV   r˜   rW   ÚCALL_FUNCTION_EXrŒ   )r~   r   r³   rx   r5   r´   r›   )r¸   r®   r¹   rµ   r¶   s        r%   Úcreate_call_function_exr¾   ‘  sÌ   € ô ×Ñ˜7Ó"Øˆä×Ñ Ó'ÞÞ*à�M‰MÔ,¨[Ó9Ô:ØˆJÞØ�M‰MÔ,¨[Ó9Ô:ô
 ×#Ñ# wÓ.ô �J“ !Ò#ä˜“_ qÑ(ð ð
 �M‰Mœ, tÓ,Ô-Ø�‰Ô(Ð);ÄÀZÃÑQÔRØˆÜÐ1´s¸:³ÑGÐHÐHr(   c                 ó¦   • [         R                  S:¼  a  [        SU S9/$ [         R                  S:¼  a  [        SU S9[        SU S9/$ [        SU S9/$ )Nrh   r±   rŒ   r_   r°   ÚCALL_METHODr}   )r­   s    r%   Úcreate_call_methodrÁ   ³  s^   € Ü
×Ñ˜7Ó"Ü" 6¨uÑ5Ð6Ð6Ü
×Ñ˜7Ó"ä˜y¨eÑ4Ü˜v¨5Ñ1ð
ð 	
ô ˜}°%Ñ8Ð9Ð9r(   c                 óT   • [         R                  S:¼  a  [        SSU S9$ [        SU S9$ )Nrh   rl   r   )r>   r?   ÚLOAD_METHODrˆ   r}   ro   s    r%   Úcreate_load_methodrÄ   ¾  s,   € Ü
×Ñ˜7Ó"ä! +°1¸TÑBÐBÜ˜m°DÑ9Ð9r(   c                 óD   • [         R                  S:¼  a  SOSn[        XS9$ )Nr_   ÚBEFORE_WITHÚ
SETUP_WITHr|   r}   )r   r=   s     r%   Úcreate_setup_withrÈ   Å  s!   € Ü!×.Ñ.°'Ó9‰]¸|€FÜ˜fÑ4Ð4r(   c                 óÒ  • [         R                  S:¼  a  [        SU S9/$ U S:X  a  / $ U S:X  a  [        S5      /$ U S:X  a  [        S5      [        S5      /$  [        S	U S-
  S9[        S
5      [        SSS9[        5       [        S5      [        S
5      [        S5      [        SSS9[        S5      [        S
5      [	        S5      /[        S5      Q[        S5      P[        SU S-
  S9P$ )Nr_   r’   rŒ   r   r˜   ÚROT_TWOrW   Ú	ROT_THREEÚ
BUILD_LISTr�   r‡   r‘   rˆ   ÚSTORE_SUBSCRÚreverser   ÚPOP_TOPÚUNPACK_SEQUENCE)r~   r   rx   Úcreate_binary_subscrrÄ   rÁ   ©r�   s    r%   Úcreate_swaprÓ   Ê  s  € Ü
×Ñ˜7Ó"Ü" 6¨qÑ1Ð2Ð2àˆAƒvØˆ	Ø	
ˆa‹Ü" 9Ó-Ð.Ð.Ø	
ˆa‹Ü" ;Ó/Ô1CÀIÓ1NÐOÐOðô& 	˜<¨Q°©UÑ3Ü˜9Ó%Ü˜<°Ñ3ÜÓÜ˜;Ó'Ü˜9Ó%Ü˜;Ó'Ü˜<°Ñ3Ü˜>Ó*Ü˜9Ó%Ü˜9Ó%ðô 
˜AÓ	ðô 	˜9Ó%ðô 	Ð,°!°a±%Ñ8ðð r(   r   r   Ústorec                 ót  • [         R                  S:¼  a2  U(       a  [        S5      O	[        5       n[	        [        X5      5      U/$ [         R                  S:¼  a+  U(       a  SOSn[	        U 5      [	        U5      [        U5      /$ U(       a  SOSn[	        U 5      [	        U5      [        SSS	9[        U5      /$ )
zI
BINARY_SLICE and STORE_SLICE (if `set` is True) for all Python versions
r»   rÍ   rh   ÚSTORE_SLICEÚBINARY_SLICEÚBINARY_SUBSCRÚBUILD_SLICEr˜   rŒ   )r~   r   rx   rÑ   r‰   Úslice)r   r   rÔ   Úsubscr_instÚ	inst_names        r%   Úcreate_binary_slicerÝ   ø  s¶   € ô ×Ñ˜7Ó"æ27Ô˜~Ô.Ô=QÓ=Sð 	ô œe EÓ/Ó0Øð
ð 	
ô 
×	Ñ	˜WÓ	$Þ%*‘M°ˆ	ä˜eÓ$Ü˜cÓ"Ü˜yÓ)ð
ð 	
ö ',‘N°ˆ	ä˜eÓ$Ü˜cÓ"Ü˜}°!Ñ4Ü˜yÓ)ð	
ð 	
r(   c                 óÄ   • [         R                  S:¼  a  [        SU S9/$ U S:X  a  [        S5      /$ / [        U 5      Q[	        5       P[        U S-   5      Q[        S5      Q$ )Nr_   r‹   rŒ   r   r�   r˜   )r~   r   rx   rÓ   rŽ   r\   s    r%   Úcreate_copyrß     sw   € Ü
×Ñ˜7Ó"Ü" 6¨qÑ1Ð2Ð2ØˆAƒvÜ" 9Ó-Ð.Ð.ðÜ	�Q‹ðäÓðô 
�Q˜‘UÓ	ðô 
�Q‹ð	ð r(   r   c                 óª   • / [        [        S[        S95      Q[        U [        R
                  S:¼  a  SOS-   5      Q[        SS5      Q[        S5      P$ )Nr‡   rˆ   r_   r˜   r   FrÏ   )rª   rx   Úprintrß   r~   r   r·   )r   s    r%   Úcreate_print_on_stackrâ   +  sb   € ðÜ	Ô)¨,¼uÑEÓ	Fðä	�U¤3×#3Ñ#3°wÓ#>™aÀAÑFÓ	Gðô 
˜a Ó	'ðô 	˜9Ó%ð	ð r(   Úvaluec                 óv   • / [        [        S[        S95      Q[        SU S9P[        SS5      Q[        S5      P$ )Nr‡   rˆ   r   FrÏ   )rª   rx   rá   r·   )rã   s    r%   Úcreate_print_valuerå   5  sP   € ðÜ	Ô)¨,¼uÑEÓ	Fðä˜<°Ñ6ðô 
˜a Ó	'ðô 	˜9Ó%ð	ð r(   c                  óT   • [         R                  S:  a  [        S5      $ [        SSS9$ )Nr»   rØ   Ú	BINARY_OPé   rŒ   r}   r/   r(   r%   rÑ   rÑ   >  s(   € Ü
×Ñ˜'Ó!Ü! /Ó2Ð2ä˜k¨rÑ2Ð2r(   c                 ó`   • [         R                  S:¼  a  U S:X  a  [        S5      $ [        SU S9$ )Nr»   r   r/   ÚBUILD_TUPLErŒ   )r~   r   r‰   rx   rÒ   s    r%   Úcreate_build_tuplerë   E  s.   € Ü
×Ñ˜7Ó" q¨A£vÜ  Ó$Ð$Ü˜m°Ñ3Ð3r(   Úfirst_linenoc                 óØ   ^^^^^• [         R                  SS S:X  d   e/ mU mSmSmS[        S[        SS4U4S jjmS	[        S
[        SS4UUUU4S jjnS[        SS4UUU4S jjnTX4$ )z»
Used to create typing.CodeType.co_linetable
See https://github.com/python/cpython/blob/main/Objects/lnotab_notes.txt
This is the internal format of the line number table for Python 3.10
Nr˜   )rW   é
   r   Úbyteno_deltaÚlineno_deltar   c                 óî   >• U S:w  d  US:w  ah  [        S[        U S5      5      n[        S[        US5      5      nUS:w  d  US:w  d   eX-  n X-  nTR                  X#S-  45        U S:w  a  M_  US:w  a  Mg  g g )Nr   éþ   i�ÿÿÿé   éÿ   )ÚmaxÚminr´   )rï   rð   Úbyte_offsetÚline_offsetÚ	linetables       €r%   Ú_updateÚ!linetable_writer.<locals>._updateY  s„   ø€ Ø˜aÓ <°1Ó#4Ü˜a¤ \°3Ó!7Ó8ˆKÜ˜d¤C¨°cÓ$:Ó;ˆKØ !Ó# {°aÓ'7Ð7Ð7ØÑ'ˆLØÑ'ˆLØ×Ñ˜k¸Ñ+=Ð>Ô?ð ˜aÕ <°1×#4r(   Ú
lineno_newÚ
byteno_newc                 ó4   >• UT-
  nUmT" UT5        U T-
  mU mg rG   r/   )rü   rý   rï   rú   ÚbytenoÚlinenorð   s      €€€€r%   ÚupdateÚ linetable_writer.<locals>.updateb  s+   ø€ à! FÑ*ˆØˆÙ�˜lÔ+Ø! FÑ*ˆØ‰r(   Útotal_bytesc                 ó   >• T" U T-
  T5        g rG   r/   )r  rú   rÿ   rð   s    €€€r%   r   Úlinetable_writer.<locals>.endj  s   ø€ Ù�˜fÑ$ lÕ3r(   )r~   r   r5   )rì   r  r   rú   rÿ   r   rð   rù   s      @@@@@r%   Úlinetable_writerr  K  s–   ü€ ô ×Ñ˜B˜QÐ 7Ó*Ð*Ð*Ø€IØ€FØ€LØ€Fð@œcð @´ð @¸÷ @ðœ3ð ¬Cð °D÷ ò ð4œð 4 ÷ 4ñ 4ð �fÐ!Ð!r(   c                 ó”   • U S:¼  d   eU S-  /nU S-  n U S:”  a.  US==   S-  ss'   UR                  U S-  5        U S-  n U S:”  a  M.  U$ )zr
6-bit chunk encoding of an unsigned integer
See https://github.com/python/cpython/blob/3.11/Objects/locations.md
r   é?   é   r‘   é@   )r³   )r�   Úbs     r%   Úencode_varintr  p  s`   € ð
 �‹6€Mˆ6Ø	
ˆR‰ˆ€AØˆ!�G€AØ
ˆa‹%Ø	ˆ"‹�‰‹Ø	�‰��R‘ÔØ	ˆa‰ˆð ˆa�%ð €Hr(   c                 óŠ   ^^• [         R                  S:¼  d   e/ mU mS[        R                  S-  S[        SS4UU4S jjnTU4$ )z·
Used to create typing.CodeType.co_linetable
See https://github.com/python/cpython/blob/3.11/Objects/locations.md
This is the internal format of the line number table for Python 3.11
r_   rC   NÚ	inst_sizer   c                 óÂ   >^ • T (       a  T R                   OS nS[        S[        SS 4UU 4S jjnUc  SnOUT-
  nUmUS:”  a  U" US5        US-  nUS:”  a  M  U" XA5        g )NÚdeltaÚsizer   c                 ó  >• SUs=:  a  S::  d   e   eSnT(       a‚  TR                   bu  TR                  bh  TR                  b[  TR                  bN  TR	                  SU-   S-
  5        TR                  TR                   -
  TR                  S-   TR                  S-   4nOTR	                  SU-   S-
  5        U S:  a
  U * S-  S-  n OU S-  n TR                  [        U 5      5        U H  nTR                  [        U5      5        M     g )Nr   é   r/   éð   r   éè   )r   Ú
end_linenoÚ
col_offsetÚend_col_offsetr³   r´   r  )r  r  Úother_varintsr�   rù   rC   s       €€r%   rú   Ú5linetable_311_writer.<locals>.update.<locals>._update‘  s  ø€ Ø˜4•} 1“}Ð$‘}Ð$�}ð 24�æØ!×(Ñ(Ñ4Ø!×,Ñ,Ñ8Ø!×,Ñ,Ñ8Ø!×0Ñ0Ñ<à×$Ñ$ \°DÑ%8¸1Ñ%<Ô=ð "×,Ñ,¨y×/?Ñ/?Ñ?Ø!×,Ñ,¨qÑ0Ø!×0Ñ0°1Ñ4ð%‘Mð ×$Ñ$ \°DÑ%8¸1Ñ%<Ô=à˜1“9Ø$˜f¨™]¨aÑ/‘Eà˜a‘K�Eà× Ñ ¤¨uÓ!5Ô6Û&�AØ×$Ñ$¤]°1Ó%5Ö6ò 'r(   r   r  )r   r5   )rC   r  rü   rú   rð   r   rù   s   `    €€r%   r  Ú$linetable_311_writer.<locals>.update�  s{   ù€ æ-6˜×)Ò)¸DˆJð7œsð 7¬#ð 7°$÷ 7ð 7ð@ Ñ!Ø ‘à)¨FÑ2�Ø#�Ø˜a“-Ù˜ aÔ(Ø˜Q‘�	ð ˜a•-ñ �LÕ,r(   )r~   r   ru   Ú	Positionsr5   )rì   r  r   rù   s     @@r%   Úlinetable_311_writerr  �  sY   ù€ ô ×Ñ 7Ó*Ð*Ð*Øˆ	Øˆð,	-œcŸm™m¨dÑ2ð ,	-¼sð ,	-Àt÷ ,	-ð ,	-ð\ ˜&Ð Ð r(   c                   óH   • \ rS rSr% \\S'   \\S'   \\S'   \\S'   \\S'   Srg)	ÚExceptionTableEntryi¾  r   r   r   r   r   r/   N)r0   r1   r2   r3   r5   r4   r6   r9   r/   r(   r%   r  r  ¾  s   ‡ àƒJØ	ƒHØƒKØƒJØ†Kr(   r  c                 óî   • U S:¼  d   eU S-  /nU S-  n U S:”  a!  UR                  U S-  5        U S-  n U S:”  a  M!  UR                  5         [        [        U5      S-
  5       H  nX==   S-  ss'   M     U$ )zJ
Similar to `encode_varint`, but the 6-bit chunks are ordered in reverse.
r   r  r	  r   r
  )r³   rÎ   rš   Úlen)r�   r  rY   s      r%   Úencode_exception_table_varintr"  Ç  s~   € ð �‹6€Mˆ6Ø	
ˆR‰ˆ€AØˆ!�G€AØ
ˆa‹%Ø	�‰��R‘ÔØ	ˆa‰ˆð ˆa�%ð ‡I�I„KÜ”3�q“6˜A‘:ÖˆØ	‹�‰
�ñ à€Hr(   Ú
bytes_iterc                 ó€   • [        U 5      nUS-  nUS-  (       a#  US-  n[        U 5      nX!S-  -  nUS-  (       a  M#  U$ )z-
Inverse of `encode_exception_table_varint`.
r  r
  r	  )Únext)r#  r  r„   s      r%   Údecode_exception_table_varintr&  ×  sN   € ô 	ˆZÓ€AØ
ˆb‰&€CØ
ˆb�&Ø�‰	ˆÜ�ÓˆØ�2‰v‰ˆð ˆb�&‰&ð €Jr(   Útabc                 ó
  • [        [        U 5      S-
  5       Hh  nX   R                  X   R                  ::  aG  X   R                  XS-      R                  :  a&  XS-      R                  XS-      R                  ::  a  Mh   e   g)z†
Verifies that a list of ExceptionTableEntries will make a well-formed
jump table: entries are non-empty, sorted, and do not overlap.
r   N)rš   r!  r   r   )r'  rY   s     r%   Úcheck_exception_tabler)  ä  sq   € ô
 ”3�s“8˜a‘<Ö ˆà‰F�L‰L˜C™FŸJ™JÓ&Ø‘—
‘
˜S Q¡™Z×-Ñ-Ó-Ø˜‘E‘
× Ñ  C¨A©¡J§N¡NÕ2ð	
ð3ò !r(   Úexntabc           	      ó4  • [        U 5      n/ n  [        U5      S-  n[        U5      S-  nX4-   S-
  n[        U5      S-  n[        U5      nUS-	  n[        US-  5      n	UR                  [	        X5XhU	5      5        Mm  ! [
         a    [        U5        Us $ f = f)zy
Parse the exception table according to
https://github.com/python/cpython/blob/3.11/Objects/exception_handling_notes.txt
r˜   r   )Úiterr&  r6   r³   r  ÚStopIterationr)  )
r*  Úexntab_iterr'  r   Úlengthr   r   Údlr   r   s
             r%   Úparse_exception_tabler1  ñ  s¬   € ô
 �v“,€KØ
€CðØÜ1°+Ó>ÀÑBˆEÜ2°;Ó?À!ÑCˆFØ‘. 1Ñ$ˆCÜ2°;Ó?À!ÑCˆFÜ.¨{Ó;ˆBØ˜!‘GˆEÜ˜˜a™“LˆEØ�J‰JÔ*¨5°vÀeÓLÔMñ øô ó Ü˜cÔ"ØŠ
ðús   �A.A= Á=BÂBc                 óÆ  • / nU  HÏ  n[        UR                  S-  5      nUS==   S-  ss'   UR                  U5        UR                  UR                  -
  S-   nUR                  [        US-  5      5        UR                  [        UR                  S-  5      5        UR
                  S-  UR                  -   nUR                  [        U5      5        MÑ     [        U5      $ )zX
Inverse of parse_exception_table - encodes list of exception
table entries into bytes.
r˜   r   é€   r   )r"  r   r´   r   r   r   r   Úbytes)r'  r  ÚentryÚfirst_entryr/  r0  s         r%   Úassemble_exception_tabler7    s¼   € ð
 	€AÛˆÜ3°E·K±KÀ1Ñ4DÓEˆØ�A‹˜&Ñ ‹Ø	�‰�ÔØ—‘˜UŸ[™[Ñ(¨1Ñ,ˆØ	�‰Ô.¨v¸©{Ó;Ô<Ø	�‰Ô.¨u¯|©|¸qÑ/@ÓAÔBØ�k‰k˜QÑ %§+¡+Ñ-ˆØ	�‰Ô.¨rÓ2Ö3ñ ô �‹8€Or(   ÚinstructionsÚfirstlinenoc                 ój  • / n[         R                  S:¼  Ga  [        U5      u  p4Sn[        U 5       Hâ  u  pgUR                  S:X  a>  SnUS-  nS H0  n	XU	-      R                  S:w  d  M  XU	-      R
                  Ul          O   O[        U5      S-  U-   nSnU" UR
                  U5        SnUR                  =(       d    Sn
UR                  UR                  U
S-  45        [        [        U5      S-  S-
  5       H  nUR                  S5        M     Mä     O†[        U5      u  p4nU  Ha  nUR                  b  U" UR                  [        U5      5        UR                  =(       d    Sn
UR                  UR                  U
S-  45        Mc     U" [        U5      5        [        U5      [        U5      4$ )	z)Do the opposite of dis.get_instructions()r_   r   ÚEXTENDED_ARGr   ©r   r˜   rW   r˜   rô   )r   r   )r~   r   r  Ú	enumerater=   rC   Úinstruction_sizer>   r´   r<   rš   r  rA   r!  r4  )r8  r9  ÚcodeÚlnotabÚupdate_linenoÚnum_extrY   r€   r  Újr>   Ú_r   s                r%   ÚassemblerE    sˆ  € à€DÜ
×Ñ˜7Ô"Ü 4°[Ó AÑˆØˆÜ  Ö.‰GˆAØ�{‰{˜nÓ,Ø�	Ø˜1‘�ã"�AØ#¨¡EÑ*×1Ñ1°^ÕCØ)5¸!±eÑ)<×)FÑ)F˜œÙò #ô
 -¨TÓ2°aÑ7¸'ÑA�	Ø�Ù˜$Ÿ.™.¨)Ô4ØˆGØ—(‘(—-˜aˆCØ�K‰K˜Ÿ™ c¨D¡jÐ1Ô2ÜÔ+¨DÓ1°QÑ6¸Ñ:Ö;�Ø—‘˜FÖ#ó <ò! /ô& &6°kÓ%BÑ"ˆ˜sã ˆDØ×ÑÑ+Ù˜d×.Ñ.´°D³	Ô:Ø—(‘(—-˜aˆCØ�K‰K˜Ÿ™ c¨D¡jÐ1Ö2ñ	 !ñ 	ŒC�‹IŒä�‹;œ˜f›Ð%Ð%r(   Úoffset_to_instr@   c                 ón   • S H/  nXU-      R                   [        R                  :w  d  M(  XU-      s  $    g)zM
Get the instruction located at a given offset, accounting for EXTENDED_ARGs
)r   r˜   r“   r	  N©r<   ru   r;  )rF  r@   r�   s      r%   Ú_get_instruction_by_offsetrI  ?  s;   € ó ˆØ 1™*Ñ%×,Ñ,´×0@Ñ0@Õ@Ø!¨1¡*Ñ-Ò-ñ ð r(   c                 ó&  • U  Vs0 s H  oR                   c  M  UR                   U_M      nnU  H[  nUR                  [        R                  ;   d   UR                  [        R                  ;   d  MA  [        X!R                  5      Ul        M]     gs  snf )z9Replace jump targets with pointers to make editing easierN)r@   r<   ru   ÚhasjabsÚhasjrelrI  r?   r   )r8  r€   Újump_targetss      r%   Úvirtualize_jumpsrN  K  sp   € ñ '3óÚ&2˜d·k±kÓˆ�‰�TÒ¡lð ð ó ˆØ�;‰;œ#Ÿ+™+Ó%¨¯©¼¿¹Õ)CÜ4°\Ç;Á;ÓOˆDŽKò ùò	s
   …B™BÚinstructionc                 ó�  • [         R                  S:  a  [        S5      eSU R                  ;   a"  U R                  R	                  SS5      U l        O=SU R                  ;   a"  U R                  R	                  SS5      U l        O[        S5      e[        R                  U R                     U l        U R                  [        ;   d   eg )Nr_   z+Cannot flip jump direction in Python < 3.11ÚFORWARDÚBACKWARDz-Instruction is not a forward or backward jump)
r~   r   rt   r=   ÚreplaceÚAttributeErrorru   rv   r<   Ú
_REL_JUMPS)rO  s    r%   Úflip_jump_directionrV  Y  s¥   € Ü
×Ñ˜'Ó!ÜÐHÓIÐIØ�K×&Ñ&Ó&Ø(×/Ñ/×7Ñ7¸	À:ÓNˆÕØ	�{×)Ñ)Ó	)Ø(×/Ñ/×7Ñ7¸
ÀIÓNˆÕäÐLÓMÐMÜŸ™ ;×#5Ñ#5Ñ6€KÔØ×Ñ¤Ó+Ð+Ñ+r(   rž   c                 ó„   • X   nS H5  nX:¼  a,  XU-
     R                   [        R                  :X  a	  XU-
     nM4    U$    U$ )zd
i.e. get the first EXTENDED_ARG instruction (if any) when targeting
instructions[idx] with a jump.
r<  rH  )r8  rž   r   r@   s       r%   Ú_get_instruction_frontrX  f  sP   € ð
 Ñ€FÛˆØ‹=˜\°©,Ñ7×>Ñ>Ä#×BRÑBRÓRØ!¨¡,Ñ/ŠFàØ€Mñ ð
 €Mr(   c           	      ó4  • [        [        R                  5      R                  [        [        R                  5      5      nU  Hý  nUR
                  U;   d  M  UR
                  [        R                  ;  d  M5  UR                  b$  UR                  R                  b  UR                  c   eUR                  R                  UR                  :  a>  [        R                  S:  a  [        S5      eSUR                  ;   a  [        U5        MÈ  MÊ  [        R                  S:¼  d  Mà  SUR                  ;   d  Mò  [        U5        Mÿ     [        U 5        [        U 5      nU  GH9  nUR
                  U;   d  M  UR                  c   e[        XUR                     5      nUR
                  [        R                  ;   aL  [        R                  S:  a-  UR                  c   e[!        UR                  S-  5      Ul        Ox[        S5      eUR                  b  UR                  c   e[%        [!        UR                  UR                  -
  ['        U5      -
  5      5      Ul        U=R"                  S-  sl        UR                  Ul        SUR                   3Ul        GM<     g)	zJFill in args for virtualized jump target after instructions may have movedNr_   z*Got negative jump offset for Python < 3.11rQ  rR  r˜   z+Python 3.11+ should not have absolute jumpszto )Úsetru   rK  ÚunionrL  r<   r   r@   r~   r   rt   r=   rV  Úupdate_offsetsr   rX  r5   r>   Úabsr>  r?   rE   )r8  Újumpsr€   Úindexofr   s        r%   Údevirtualize_jumpsr`  t  sû  € ä”—‘Ó×"Ñ"¤3¤s§{¡{Ó#3Ó4€Eó ˆØ�;‰;˜%ÕØ�{‰{¤#§+¡+Õ-à—K‘KÑ+ØŸ™×*Ñ*Ñ6ØŸ™Ñ/ðð0ð —;‘;×%Ñ%¨¯©Ó3Ü×'Ñ'¨'Ó1Ü*Ð+WÓXÐXà  D§K¡KÓ/Ü+¨DÖ1ñ 0ô ×'Ñ'¨7Õ2°zÀTÇ[Á[Õ7PÜ+¨DÖ1ñ# ô( �<Ô Ü˜,Ó'€Gô ˆØ�;‰;˜%ÕØ—;‘;Ñ*Ð*Ð*Ü+¨LÀ$Ç+Á+Ñ:NÓOˆFØ�{‰{œcŸk™kÓ)Ü×#Ñ# gÓ-ð "Ÿ=™=Ñ4Ð4Ð4Ü" 6§=¡=°1Ñ#4Ó5�D•Hä&Ð'TÓUÐUð —}‘}Ñ0°T·[±[Ñ5LÐLÐLÜÜ˜Ÿ™¨¯©Ñ3Ô6FÀtÓ6LÑLÓMó�”ð —’˜Q‘•Ø Ÿ-™-ˆDŒKØ  §¡ Ð0ˆD�Lò+ r(   Úexn_tab_bytesc                 ó\  ^^^	^
• [        U 5      nU Vs0 s H  n[        [        UR                  5      U_M      snm	[	        T	R                  5       5      m
Sm[        U5      m S[        [        [        4   4UUU	U
4S jjnU" 5       u  pVU Hˆ  nUR                  c   eUR                  UR                  :”  a%  U" 5       u  pVUR                  UR                  :”  a  M%  UR                  UR                  :¼  d  Mm  [        R                  " U5      Ul        MŠ     gs  snf ! [         a     gf = f)zDReplace exception table entries with pointers to make editing easierr   r   c                  ó€  >• [        T5      n T[        T5      :  a<  TT   U R                  ::  a)  TS-  mT[        T5      :  a  TT   U R                  ::  a  M)  TS:”  d   eTTS-
     n[        [	        TU R
                  5      [	        TU5      [	        TU R                  5      U R                  U R                  5      nX4$ )Nr   r   )	r%  r!  r   r   rI  r   r   r   r   )r5  Ú
end_offsetÚ
inst_entryÚend_offset_idxÚexn_tab_iterrF  Úoffsetss      €€€€r%   ÚstepÚ(virtualize_exception_table.<locals>.step´  s»   ø€ ä˜Ó&ˆEð ¤ W£Ó-°'¸.Ñ2IÈUÏYÉYÓ2Và !Ñ#�ð ¤ W£Ó-°'¸.Ñ2IÈUÏYÉYÕ2Vð " AÓ%Ð%Ð%Ø  °!Ñ!3Ñ4ˆJÜ/Ü*¨>¸5¿;¹;ÓGÜ*¨>¸:ÓFÜ*¨>¸5¿<¹<ÓHØ—‘Ø—‘óˆJð Ð$Ð$r(   N)r1  r	   r5   r@   ÚsortedÚkeysr,  Útupler  r   r   r   ÚcopyrD   r-  )ra  r8  Úexn_tabr€   ri  r5  re  rf  rg  rF  rh  s          @@@@r%   Úvirtualize_exception_tablerp  ©  s  û€ ô $ MÓ2€GÙ?KÓLº|°t”dœ3 §¡Ó,¨dÒ2¹|ÑL€NÜ�^×(Ñ(Ó*Ó+€GØ€NÜ˜“=€Lð ð	%”eÔ/Ô1GÐGÑH÷ 	%ò 	%ñ, !›FÑˆÛ ˆDØ—;‘;Ñ*Ð*Ð*Ø—+‘+ §	¡	Ó)Ù$(£FÑ!�ð —+‘+ §	¡	Õ)à�{‰{˜eŸk™kÕ)Ü%)§Y¢Y¨zÓ%:�Ö"ò !ùò; MøôF ó Ùðús$   ”%DÁ#A8D ÃD Ã9D Ä
D+Ä*D+c           	      ó„  ^^^^• 0 m[        U 5      nU  GH  nUR                  (       d  M  [        XUR                  R                     5      R                  nUc   e[        [        UR                  R                  R                  5      [        UR                  R                  5      -   S-
  nUc   e[        XUR                  R                     5      R                  nUc   eX44nXRR                  R                  UR                  R                  4nUT;   a  TU   U:X  d   eUTU'   GM     [        TR                  5       S S9nSm/ m/ mSUUUU4S jjn	U HÁ  nT(       a.  TS   S   US   :  a  U	" 5         T(       a  TS   S   US   :  a  M  T(       aq  TS   S   US   s=::  a  US   s=::  a  TS   S   ::  d   e   e[        TTS   S   5      n
X¦S   :  a'  TR                  [!        X¦S   S-
  /TTS      Q76 5        US   mTR                  U5        MÃ     T(       a  U	" 5         T(       a  M  [#        T5        T$ )	zMCompute exception table in list format from instructions with exn_tab_entriesr˜   c                 ó   • U S   U S   * 4$ ©Nr   r   r/   ©Úts    r%   Ú<lambda>Ú)compute_exception_table.<locals>.<lambda>ú  s   € ¸¸1¹ÀÀ!Á¸u¹r(   ©Úkeyr   c                  ó¸   >• T(       aR  TR                  5       n TU S   ::  a8  TR                  [        [        U S   T5      U S   /TU    Q76 5        U S   S-   mggg)zD
Pop the key_stack and append an exception table entry if possible.
r   r   r˜   N)Úpopr³   r  rõ   )ry  Úexn_dictro  Ú	key_stackÚnextis    €€€€r%   r{  Ú$compute_exception_table.<locals>.pop  se   ø€ ö
 Ø—-‘-“/ˆCØ˜˜A™‹Ø—‘Ü'¬¨C°©F°EÓ(:¸CÀ¹FÐSÀXÈcÁ]ÒSôð ˜A™ ™
‘ð	 ð r(   r‘   r   )r   N)r   rD   rX  r   r@   r	   r5   r   r>  r   r   r   rk  rl  rõ   r³   r  r)  )r8  r_  r€   r   r   r   ry  r„   Úkeys_sortedr{  Úleftr|  ro  r}  r~  s              @@@@r%   Úcompute_exception_tabler‚  Õ  sW  û€ ð >@€HÜ˜,Ó'€GäˆØ××Ñä*Ø d×&8Ñ&8×&>Ñ&>Ñ?óç‰fð ð Ñ$Ð$Ð$ô ”S˜$×,Ñ,×0Ñ0×7Ñ7Ó8Ü" 4×#5Ñ#5×#9Ñ#9Ó:ñ;àñð ð
 ‘?Ð"�?Ü+Ø d×&8Ñ&8×&?Ñ&?Ñ@óç‰fð ð Ñ%Ð%Ð%Ø�,ˆCØ×-Ñ-×3Ñ3°T×5GÑ5G×5MÑ5MÐNˆCØ�h‹Ø ‘}¨Ó+Ð+Ð+ØˆH�SŒMñ- ô< ˜Ÿ™›Ñ.EÑF€Kà€Eà')€IØ)+€G÷#ò #ó ˆæ˜I b™M¨!Ñ,¨s°1©vÓ5ÙŒEö ˜I b™M¨!Ñ,¨s°1©vÕ5æà˜R‘= Ñ# s¨1¡vÕK°°Q±ÕK¸9ÀR¹=ÈÑ;KÓKÐKÑKÐKÐKÜ�u˜i¨™m¨AÑ.Ó/ˆDØ˜!‘f‹}Ø—‘Ü'¨°!©f°q©jÐS¸8ÀIÈbÁMÑ;RÒSôð ˜‘FˆEØ×Ñ˜Öñ ö ÙŒ÷ ˆ)ä˜'Ô"Ø€Nr(   r_  c                 óT  • / nU  H   nXR                      XR                     4nU(       a7  US   S   US   :  a(  UR                  5         U(       a  US   S   US   :  a  M(  U(       a+  US   S   US   s=::  a  US   s=::  a  US   S   ::  d   e   eUR                  U5        M¢     g)zÆ
Checks `tab` is a properly sorted list of nested InstructionExnTabEntry's,
i.e. no entries partially overlap.
"Properly sorted" means entries are sorted by increasing starts, then
decreasing ends.
r‘   r   r   N)r   r   r{  r³   )r'  r_  Úentry_stackr5  ry  s        r%   Ú!check_inst_exn_tab_entries_nestedr…  "  s®   € ð *,€KÛˆØ—{‘{Ñ# W¯Y©YÑ%7Ð8ˆÞ˜k¨"™o¨aÑ0°3°q±6Ó9Ø�O‰OÔö ˜k¨"™o¨aÑ0°3°q±6Õ9æØ˜r‘? 1Ñ%¨¨Q©ÕO°3°q±6ÕO¸[È¹_ÈQÑ=OÓOÐOÑOÐOÐOØ×Ñ˜3Öò r(   c                 ó"  • [        U 5      n0 nU  Hm  nUR                  (       d  M  XR                  R                     XR                  R                     4nXB;   a  UR                  X$   :X  d   eUR                  X$'   Mo     [	        UR                  5       S S9 Vs/ s H  oBU   PM	     nn[        XQ5        U HN  n[        XR                     XR                     S-   5       H   n[        R                  " U5      X   l        M"     MP     gs  snf )zr
Copies exception table entries to all instructions in an entry's range.
Supports nested exception table entries.
c                 ó   • U S   U S   * 4$ rs  r/   rt  s    r%   rv  Ú2propagate_inst_exn_table_entries.<locals>.<lambda>F  s   € ÀaÈÁdÈQÈqÉTÈEÁ]r(   rx  r   N)	r   rD   r   r   rk  rl  r…  rš   rn  )r8  r_  Úentriesr€   ry  Úsorted_entriesr5  rY   s           r%   Ú propagate_inst_exn_table_entriesr‹  5  s   € ô
 ˜,Ó'€GØ=?€GÛˆØ××Ñà×*Ñ*×0Ñ0Ñ1Ø×*Ñ*×.Ñ.Ñ/ðˆCð ‹~Ø×)Ñ)¨W©\Ó9Ð9Ð9Ø×-Ñ-ˆG‹Lñ ô !' w§|¡|£~Ñ;RÒ SóÚ S˜�ŒÑ Sð ð ô & nÔ>ó  ˆÜ�wŸ{™{Ñ+¨W·Y±YÑ-?À!Ñ-CÖDˆAÜ,0¯IªI°eÓ,<ˆL‰OÖ)ó Eò  ùòs   ÂDc                 óþ  • [        U 5      n[        5       n[        U 5       HÙ  u  p4UR                  (       d  M  [        R
                  S:¼  d   e[        UR                  5      U;  d   eUR                  [        UR                  5      5        UR                  nUR                  U;   d   eUR                  U;   d   eUR                  U;   d   eXR                     Us=::  a  XR                     ::  a  MÖ   e   e   g)a.  
Checks that exn_tab_entries of instructions are valid.
An entry's start, end, and target must be in instructions.
Instructions with an exn_tab_entry are located within
the entry's start and end instructions.
Instructions do not share exn_tab_entries.

Implicitly checks for no duplicate instructions.
r_   N)r   rZ  r=  rD   r~   r   rI   Úaddr   r   r   )r8  r_  Úexn_tab_entry_setrY   r€   r5  s         r%   Ú check_inst_exn_tab_entries_validr�  P  sâ   € ô ˜,Ó'€GÜ›ÐÜ˜\Ö*‰ˆØ××ÑÜ×#Ñ# wÓ.Ð.Ð.Ü�d×(Ñ(Ó)Ð1BÓBÐBÐBØ×!Ñ!¤" T×%7Ñ%7Ó"8Ô9Ø×&Ñ&ˆEØ—;‘; 'Ó)Ð)Ð)Ø—9‘9 Ó'Ð'Ð'Ø—<‘< 7Ó*Ð*Ð*ØŸ;™;Ñ'¨1ÕB°¿	¹	Ñ0BÕBÐBÑBÐBÐBò +r(   c                 óx   • U  Vs/ s H$  oR                   [        R                  :w  d  M"  UPM&     snU S S & g s  snf rG   rH  )r8  rY   s     r%   Ústrip_extended_argsr‘  h  s,   € Ù".ÓO¢,˜Q·(±(¼c×>NÑ>NÑ2N—q¡,ÑO€L‘�OùÒOs   …!7ª7Úold_instÚ	new_instsc                 óú  • U R                   (       a<  U R                   R                  U L a#  [        U5      S:”  a  US   U R                   l        USS   H9  n[        R                  " U R                   5      Ul         U R                  Ul        M;     US   R
                  U l        US   R                  U l        US   R                  U l        US   R                  U l        US   R                  U l	        U /USS  -   $ )Nr   r‘   r   )
rD   r   r!  rn  rC   r<   r=   r>   r?   r   )r’  r“  r€   s      r%   Úoverwrite_instructionr•  q  sÝ   € ð
 	××Ø×"Ñ"×&Ñ&¨(Ò2Ü�	‹N˜QÓà%.¨r¡]ˆ×ÑÔ"à˜!˜"“ˆÜ!ŸYšY x×'=Ñ'=Ó>ˆÔØ!×+Ñ+ˆŽñ ð   ‘l×)Ñ)€H„OØ ‘l×)Ñ)€H„OØ˜Q‘<×#Ñ#€H„LØ ‘l×)Ñ)€H„OØ ‘l×)Ñ)€H„OØˆ:˜	 ! "˜Ñ%Ð%r(   c                 óÜ   • [         R                  S:  d   eSSS.nU  HJ  nUR                  U;   d  M  XR                     Ul        [        R                  UR                     Ul        ML     U $ )zFLOAD_METHOD puts a NULL on the stack which causes issues, so remove itr_   rl   r²   )rÃ   rÀ   )r~   r   r=   ru   rv   r<   )r8  Úrewritesr€   s      r%   Úremove_load_call_methodr˜  ˆ  s`   € ä×Ñ˜gÓ%Ð%Ð%Ø*¸?ÑK€HÛˆØ�;‰;˜(Õ"Ø"§;¡;Ñ/ˆDŒKÜŸ)™) D§K¡KÑ0ˆDŽKñ ð Ðr(   c                 ó¶  • / nU  HÍ  nSUR                   ;   a©  [        S[        SUR                   ;   5      S9nUR                  Ul        [
        R                  S:  a'  [        SUR                   ;   a  SOSUR                  S	9nO[        S
UR                  S	9n[        SS S9UU/nUR                  [        X%5      5        M¼  UR                  U5        MÏ     XS S & g )NÚ_NONEÚIS_OPÚNOTrŒ   rh   rQ  ÚPOP_JUMP_FORWARD_IF_TRUEÚPOP_JUMP_BACKWARD_IF_TRUEr|   ÚPOP_JUMP_IF_TRUEr‡   rˆ   )r=   rx   r5   r>   r?   r~   r   r   r´   r•  r³   )r8  r“  r€   Úis_opÚjump_opÚreplace_instss         r%   Úremove_jump_if_noner£  “  sÐ   € Ø€IÛˆØ�d—k‘kÓ!Ü& w´C¸ÀÇÁÑ8LÓ4MÑNˆEà Ÿ9™9ˆEŒLä×Ñ 'Ó)Ü,ð %¨¯©Ó3ñ 3à8àŸ;™;ñ‘ô -Ð-?ÈÏÉÑT�ô # <¸Ñ=ØØðˆMð
 ×ÑÔ2°4ÓGÖHà×Ñ˜TÖ"ñ3 ð4  ‘�Or(   c                 óp  • / nU  GH)  nUR                  U5        UR                  S;   d  M'  [        R                  S:¼  a  UR                  S:X  a  [	        5       nO%[        UR                  R                  SS5      5      nUR                  (       a)  UR                  R                  UL a  X2R                  l        [        R                  " UR                  5      Ul        UR                  Ul
        [        R                  S   Ul        SUl        SUl        SUl        UR                  U5        GM,     XS S & g )N)r×   rÖ   r»   r×   ÚSLICEÚSUBSCRrÙ   r˜   )r³   r=   r~   r   rÑ   rx   rS  rD   r   rn  rC   ru   rv   r<   r>   r?   )r8  r“  r€   rÛ   s       r%   Úremove_binary_store_slicer§  ²  sï   € Ø€IÜˆØ×Ñ˜ÔØ�;‰;Ð9Õ9ä×Ñ 7Ó*¨t¯{©{¸nÓ/LÜ2Ó4‘ä0°·±×1DÑ1DÀWÈhÓ1WÓX�Ø×!×! d×&8Ñ&8×&<Ñ&<ÀÒ&DØ)4×"Ñ"Ô&Ü(,¯	ª	°$×2DÑ2DÓ(EˆKÔ%Ø$(§N¡NˆKÔ!äŸ)™) MÑ2ˆDŒKØ'ˆDŒKØˆDŒHØˆDŒKØ×Ñ˜[×)ñ# ð$  ‘�Or(   )Ú	LOAD_FASTr¨  )ÚLOAD_FAST_BORROWr©  )Ú
STORE_FASTrª  )rª  r¨  )ÚLOAD_FAST_LOAD_FASTÚ!LOAD_FAST_BORROW_LOAD_FAST_BORROWÚSTORE_FAST_STORE_FASTÚSTORE_FAST_LOAD_FASTc                 ó  • / nU  Hy  nUR                   [        ;   aQ  [        UR                      u  p4UR                  u  pV[        X5S9[        XFS9/nUR	                  [        X'5      5        Mh  UR                  U5        M{     XS S & g )Nrˆ   )r=   ÚFUSED_INSTSr?   rx   r´   r•  r³   )r8  r“  r€   Úinst0Úinst1Úargval0Úargval1r¢  s           r%   Úremove_fused_load_storerµ  Ñ  s   € Ø€IÛˆØ�;‰;œ+Ó%Ü& t§{¡{Ñ3‰LˆEØ#Ÿ{™{ÑˆGô # 5Ñ9Ü" 5Ñ9ðˆMð ×ÑÔ2°4ÓGÖHà×Ñ˜TÖ"ñ ð  ‘�Or(   c                 óì   • / nU  Hh  nSUR                   ;   aD  [        SSS9[        UR                   UR                  S9/nUR                  [	        X#5      5        MW  UR                  U5        Mj     XS S & g )NÚRETURNÚNOPÚGRAPH_BREAK_IF_LEAFrˆ   )r=   rx   r?   r´   r•  r³   )r8  r“  r€   r¢  s       r%   Ú$add_graph_break_if_leaf_instructionsrº  ä  sn   € Ø€IÛˆØ�t—{‘{Ó"ä" 5Ð1FÑGÜ" 4§;¡;°t·{±{ÑCðˆMð ×ÑÔ2°4ÓGÖHà×Ñ˜TÖ"ñ ð  ‘�Or(   c                 óÐ  • / n[         R                  " U 5       GH1  u  p#UR                  S:X  Ga	  UR                  S:X  aù  UR                  R	                  S5      (       aÙ  [        [        U 5      5       H¾  nX   R                  UL a	  X0U   l        X   R                  (       d  M2  X   R                  R                  UL a  X0U   R                  l	        X   R                  R                  UL a  X0U   R                  l
        X   R                  R                  UL d  M«  X0U   R                  l        MÀ     GM   UR                  U5        GM4     UR                  U S   5        XS S & g )Nr¸  r¹  r·  r‘   )Ú	itertoolsÚpairwiser=   r?   Ú
startswithrš   r!  r   rD   r   r   r³   )r8  r“  r€   Ú	next_instrY   s        r%   Ú'remove_graph_break_if_leaf_instructionsrÀ  ò  s,  € Ø€IÜ$×-Ò-¨l×;‰ˆà�K‰K˜5Ô Ø—‘Ð4Ó4Ø× Ñ ×+Ñ+¨H×5Ñ5ô œ3˜|Ó,Ö-�Ø‘?×)Ñ)¨TÒ1Ø-6 ‘OÔ*Ø‘?×0×0Ñ0ð $‘×4Ñ4×:Ñ:¸dÒBØ>G Q™×5Ñ5Ô;Ø#‘×4Ñ4×8Ñ8¸DÒ@Ø<E Q™×5Ñ5Ô9Ø#‘×4Ñ4×;Ñ;¸tÔCØ?H Q™×5Ñ5Ö<ô .ð ×Ñ˜T×"ñ) <ð* ×Ñ�\ "Ñ%Ô&Ø‘�Or(   r?  c                 ó¨  • U R                   =(       d    SU R                  =(       d    S-   n[        U R                  5      (       d  g/ n[	        U5       GHv  u  pEUR                  U5        UR                  S:X  d  M)  UR                  S:X  d  M;  XS-      nUR                  S:X  d  MT  [        R                  S:¼  a  UR                  S:X  d`  [        R                  S	:¼  a$  [        R                  S:  a  UR                  S
:X  d(  [        R                  S	:  d  MÆ  UR                  S:X  d  MØ  SU;   d   eUR                  [        SSS95        U R                  S   nXr;   a  UR                  [        SUS95        OUR                  [        SUS95        SUl        SUl        UR                  S
:X  d  GMa  XS-      nSUl        SUl        GMy     X1SS& g)z3convert super() with no args into explicit arg formr/   Nrm   Úsuperr   r   rh   r±   r_   r°   r²   Ú	__class__Ú
LOAD_DEREFrˆ   r¨  r˜   )Úco_cellvarsÚco_freevarsr!  Úco_varnamesr=  r³   r=   r?   r>   r~   r   rx   )	r?  r8  Úcell_and_freerµ   rž   r€   r~  Ú	first_varÚ	call_insts	            r%   Úexplicit_superrË    s~  € à×%Ñ%×+¨°×0@Ñ0@×0FÀBÑG€MÜˆt×Ñ× Ñ àØ€FÜ˜|×,‰	ˆØ�‰�dÔØ�;‰;˜-Õ'¨D¯K©K¸7Õ,BØ  q¡Ñ)ˆEØ�y‰y˜A�~Ü×!Ñ! WÓ,°·±ÀÓ1Gä×$Ñ$¨Ó/Ü×(Ñ(¨7Ó2ØŸ™¨	Ó1ä×$Ñ$ wÕ.°5·<±<À?Õ3Rà" mÓ3Ð3Ð3Ø—‘Ô0°ÀkÑRÔSØ ×,Ñ,¨QÑ/�	ØÓ-Ø—M‘MÔ"4°\È)Ñ"TÕUà—M‘MÔ"4°[ÈÑ"SÔTØ�”	Ø �”Ø—<‘< 9Ö,à ,°1©WÑ 5�IØ$%�I”MØ'(�I×$ñ5 -ð8 ‘�Or(   c                 ó¼  ^• / mS[         SS4U4S jjnU  GH�  nUR                  [        R                  :X  a	  SUl        GOaUR                  (       a‹  UR                  S:”  a{  U" S5        TR                  [        SUR                  S	-	  S
95        TR                  [        SUR                  S-	  S
95        TR                  [        SUR                  S-	  S
95        OÅUR                  (       ae  UR                  S:”  aU  U" S5        TR                  [        SUR                  S-	  S
95        TR                  [        SUR                  S-	  S
95        OOUR                  (       a>  UR                  S:”  a.  U" S5        TR                  [        SUR                  S-	  S
95        TR                  U5        GM      [        T5      [        U 5      -
  nUS:¼  d   eTU SS& U$ )z,Fill in correct argvals for EXTENDED_ARG opsr�   r   Nc                 ó¢   >• [        U 5       H?  nT(       d  M  TS   R                  [        R                  :X  d  M/  TR	                  5         MA     g )Nr‘   )rš   r<   ru   r;  r{  )r�   rD  rµ   s     €r%   Úmaybe_pop_nÚ&fix_extended_args.<locals>.maybe_pop_n7  s6   ø€ Ü�q–ˆAßˆv˜& ™*×+Ñ+¬s×/?Ñ/?Õ?Ø—
‘
–ò r(   r   iÿÿÿ rW   r;  é   rŒ   é   r  iÿÿ  r˜   rô   r   )r5   r<   ru   r;  r>   r³   rx   r!  )r8  rÎ  r€   Úaddedrµ   s       @r%   Úfix_extended_argsrÓ  3  sm  ø€ à "€Fð”sð ˜t÷ ô
 ˆØ�;‰;œ#×*Ñ*Ó*àˆDŽHØ�X�X˜$Ÿ(™( XÓ-Ù˜ŒNØ�M‰MÔ,¨^ÀÇÁÈRÁÑPÔQØ�M‰MÔ,¨^ÀÇÁÈRÁÑPÔQØ�M‰MÔ,¨^ÀÇÁÈQÁÑOÕPØ�X�X˜$Ÿ(™( VÓ+Ù˜ŒNØ�M‰MÔ,¨^ÀÇÁÈRÁÑPÔQØ�M‰MÔ,¨^ÀÇÁÈQÁÑOÕPØ�X�X˜$Ÿ(™( T›/Ù˜ŒNØ�M‰MÔ,¨^ÀÇÁÈQÁÑOÔPØ�‰�d×ñ! ô$ �‹Kœ#˜lÓ+Ñ+€EØ�A‹:Ðˆ:Ø€L‘€OØ€Lr(   r€   c                 ó®   • SS K n[        R                  S:¼  a=  SUR                  R                  R
                  R                  U R                     S-   -  $ g)Nr   r_   r˜   r   )Útorchr~   r   Ú_CÚ_dynamoÚ
eval_frameÚpy_opcode_cachesr<   )r€   rÕ  s     r%   r>  r>  T  sF   € Ûä
×Ñ˜7Ó"Ø�E—H‘H×$Ñ$×/Ñ/×@Ñ@ÀÇÁÑMÐPQÑQÑRÐRØr(   c                 óZ   • SnU  H#  nUR                   U:X  d   eU[        U5      -  nM%     g ©Nr   ©r@   r>  ©r8  r@   r€   s      r%   Úcheck_offsetsrÞ  \  s3   € Ø€FÛˆØ�{‰{˜fÓ$Ð$Ð$ØÔ" 4Ó(Ñ(Šò r(   c                 óB   • SnU  H  nXl         U[        U5      -  nM     g rÛ  rÜ  rÝ  s      r%   r\  r\  c  s&   € Ø€FÛˆØŒàÔ" 4Ó(Ñ(Šò r(   Úargsc            	      óV  • [        [        [        [        U 5      5      5      nU/[	        U 5      -   [        U S   U S   5       VVs/ s H  u  p#[        X#:g  5      PM     snn/-    Vs/ s H  nSR                  S U 5       5      PM     nnSSR                  U5      -   $ s  snnf s  snf )Nr‘   éþÿÿÿÚ c              3   ó(   #   • U  H  oS  v •  M
     g7f)Ú03Nr/   )Ú.0Úxs     r%   Ú	<genexpr>Údebug_bytes.<locals>.<genexpr>n  s   é € Ð(¢C˜q�b�6”¢Cùs   ‚zbytes mismatch
Ú
)rš   rõ   Úmapr!  r©   Úzipr5   Újoin)rà  ÚindexÚar  r>   Úresults         r%   Údebug_bytesrñ  k  s­   € Ü”#”cœ#˜t“nÓ%Ó&€Eð �7Ü
ˆt‹*ñä$'¨¨R©°$°r±(Ô$;Ô<Ò$;™D˜AŒC�‘ŽKÑ$;Ò<Ð
=ò>óò>ˆCð 	�‰Ñ(¡CÓ(Ö(ñ>ð ð ð  §	¡	¨&Ó 1Ñ1Ð1ùó =ùò	s   ÁB Á("B&c                 óž   • [        U S SS9u  pU R                  UR                  :X  d%   [        U R                  UR                  5      5       eg)z<Make sure our assembler produces same bytes as we start withc                 ó   • g rG   r/   )rç  Úys     r%   rv  Údebug_checks.<locals>.<lambda>y  s   € °tr(   T)ÚsafeN)Útransform_code_objectÚco_coderñ  )r?  ÚdoderD  s      r%   Údebug_checksrú  w  s=   € ä# DÑ*;À$ÑG�G€DØ�<‰<˜4Ÿ<™<Ó'ÐP¬°T·\±\À4Ç<Á<Ó)PÓPÑ'r(   Úcode_optionsc                 ó~   • [        U S   5       H  u  p#XL d  M  Us  $    U S==   U4-  ss'   [        U S   5      S-
  $ )NÚ	co_constsr   )r=  r!  )rû  r„   rY   Úvs       r%   Úget_const_indexrÿ  ˆ  sM   € Ü˜, {Ñ3Ö4‰ˆð
 Œ8ØŠHñ 5ð �Ó # Ñ'ÓÜˆ|˜KÑ(Ó)¨AÑ-Ð-r(   Úvarname_from_oparg.c                 óî
  ^ ^^	^
^^• [        TS   5       VVs0 s H  u  p4XC_M	     snnmS[        S[        4UU4S jjn[        R                  S:  aR  Ub   e[        TS   5       VVs0 s H  u  p4XC_M	     snnm[        TS   TS   -   5       VVs0 s H  u  p4XC_M	     snnm	Ot[        U5      (       d   e0 n[        R                  " 5        H  n U" U5      nX6U'   M     TS    Vs0 s H  oDXd   _M	     snmTS   TS   -    Vs0 s H  nXFU   _M
     snm	[        [        T 5      5       GH  m
S[        4U
U 4S	 jjnT T
   R                  S
:X  a   T T
   R                  [        Ld   e[        R                  S:¼  aU  T T
   R                  c   eU" T T
   R                  5      S-  [!        [        T T
   R                  5      S-  -   T T
   l        M§  U" T T
   R                  5      T T
   l        MÆ  T T
   R                  S:X  a¢  T T
   R                  [        Ld   e[        R                  S:¼  aV  T T
   R                  c   eU" T T
   R                  5      S-  [!        [        T T
   R                  5      S-  -   T T
   l        GM[  U" T T
   R                  5      T T
   l        GM{  T T
   R                  S:X  aq  T T
   R                  c   eT T
   R                  [        Ld   eU" T T
   R                  5      S-  [!        [        T T
   R                  5      S-  -   S-   T T
   l        GMÿ  T T
   R                  ["        ;   a—  [        R                  S:¼  d   e[%        T T
   R                  [&        5      (       d   e[        T T
   R                  5      S:X  d   e['        U	U4S jT T
   R                   5       5      nUS   S-  US   S-  -   T T
   l        GM­  T T
   R(                  [*        ;   ap  U" 5       (       aa  [        R                  S:¼  a0  T T
   R                  T;  a  T	T T
   R                     T T
   l        GM  TT T
   R                     T T
   l        GM1  GM4  T T
   R(                  [,        ;   a/  U" 5       (       a   U" T T
   R                  5      T T
   l        GMw  GMz  T T
   R(                  [.        ;   a,  U" 5       (       a  T	T T
   R                     T T
   l        GMº  GM½  T T
   R(                  [0        ;   d  GM×  T T
   R                  b  GMê  [3        TT T
   R                  5      nUS:¼  d   eUT T
   l        GM     g s  snnf s  snnf s  snnf ! [         a       GM‡  f = fs  snf s  snf )NÚco_namesrj   r   c                 óª   >•  TU    nU$ ! [          a>    [        T5      =nTU '   / TS   QU P7TS'   [        TS   5      [        T5      :X  d   e U$ f = f)Nr  )ÚKeyErrorr!  )rj   rž   rû  Únamess     €€r%   Úget_name_indexÚ fix_vars.<locals>.get_name_indexœ  su   ø€ ð	?Ø˜‘+ˆCð ˆ
øô ó 	?ä # E£
Ð*ˆC�%˜‘+Ø'H¨°jÑ)AÐ'HÀ4Ñ'HˆL˜Ñ$Ü�| JÑ/Ó0´C¸³JÓ>Ð>Ñ>Øˆ
ð	?ús   ƒ
 ŠAAÁAr_   rÇ  rÅ  rÆ  c                  ó.   >• TT    R                   [        L$ rG   )r?   rd   )rY   r8  s   €€r%   Úshould_compute_argÚ$fix_vars.<locals>.should_compute_arg¿  s   ø€ à ‘?×)Ñ)´Ð=Ð=r(   rm   r   r˜   rl   rh   rn   rV   c              3   óD   >#   • U  H  nUT;   a  TU   OTU   v •  M     g 7frG   r/   )ræ  rj   Ú	freenamesÚvarnamess     €€r%   rè  Úfix_vars.<locals>.<genexpr>ä  s,   øé € ð â2�Dð #'¨(Ó"2�˜’¸	À$¹ÔGÚ2ùs   ƒ r   r“   é   )r=  r7   r5   r~   r   Úcallabler¼  ÚcountÚ
IndexErrorrš   r!  r6   r=   r?   rd   r>   r	   r°  r,   rm  r<   Ú	HAS_LOCALÚHAS_NAMEÚHAS_FREEÚ	HAS_CONSTrÿ  )r8  rû  r   rž   rj   r  Úallnamesr	  Ú	arg_tupler  rY   r  r  s   ``       @@@@r%   Úfix_varsr  ”  sw  ý€ ô )2°,¸zÑ2JÔ(KÔLÒ(K™9˜3ˆTŠYÑ(KÒL€EðœSð ¤S÷ ð ô ×Ñ˜'Ó!Ø!Ñ)Ð)Ð)Ü/8¸ÀmÑ9TÔ/UÔVÒ/U¡) #�D’IÑ/UÒVˆô 'Ø˜]Ñ+¨l¸=Ñ.IÑIôô
ò‘	�ð ŠIñò
‰	ô Ð*×+Ñ+Ð+Ð+ØˆÜ—?’?Ö$ˆCðÙ)¨#Ó.�Ø!$˜“ñ %ð 6BÀ-Ò5PÓQÒ5P¨T˜(™.Ò(Ñ5PÑQˆð % ]Ñ3°lÀ=Ñ6QÒQó
âQ�ð ˜4‘.Ò ÙQñ
ˆ	ô ”3�|Ó$×%ˆð	>¤D÷ 	>ð 	>ð ˜‰?×!Ñ! ]Ó2à ‘?×)Ñ)´Ò=Ð=Ð=Ü×Ñ 7Ó*Ø# A‘×*Ñ*Ñ6Ð6Ð6Ù'5°lÀ1±o×6LÑ6LÓ'MÐQRÑ'RÜœ˜l¨1™o×1Ñ1Ó2°QÑ6ñ'�˜Q‘Ö#ñ '5°\À!±_×5KÑ5KÓ&L�˜Q‘Ö#Ø˜!‰_×#Ñ# {Ó2à ‘?×)Ñ)´Ò=Ð=Ð=Ü×Ñ 7Ó*Ø# A‘×*Ñ*Ñ6Ð6Ð6Ù'5°lÀ1±o×6LÑ6LÓ'MÐQRÑ'RÜœ˜l¨1™o×1Ñ1Ó2°QÑ6ñ'�˜Q‘×#ñ '5°\À!±_×5KÑ5KÓ&L�˜Q‘×#Ø˜!‰_×#Ñ#Ð'8Ó8Ø ‘?×&Ñ&Ñ2Ð2Ð2Ø ‘?×)Ñ)´Ò=Ð=Ð=ñ   ¨Q¡× 6Ñ 6Ó7¸1Ñ<Üœ˜\¨!™_×0Ñ0Ó1°AÑ5ñ7àñð ˜‰O×ð
 ˜!‰_×#Ñ#¤{Ó2Ü×#Ñ# wÓ.Ð.Ð.Ü˜l¨1™o×4Ñ4´e×<Ñ<Ð<Ð<Ü�| A‘×-Ñ-Ó.°!Ó3Ð3Ð3Üõ à(¨™O×2Ò2óó ˆIð $-¨Q¡<°1Ñ#4¸À1¹ÈÑ9JÑ"KˆL˜‰O×Ø˜!‰_×#Ñ#¤yÓ0Ù!×#Ñ#ä×$Ñ$¨Ó/Ø$ Q™×.Ñ.°hÓ>ð +4°LÀ±O×4JÑ4JÑ*K�L ‘O×'à*2°<À±?×3IÑ3IÑ*J�L ‘O×'ò $ð ˜!‰_×#Ñ#¤xÓ/Ù!×#Ñ#Ù&4°\À!±_×5KÑ5KÓ&L�˜Q‘×#ò $à˜!‰_×#Ñ#¤xÓ/Ù!×#Ñ#Ø&/°¸Q±×0FÑ0FÑ&G�˜Q‘×#ò $à˜!‰_×#Ñ#¤yÖ0ð ˜A‰×"Ñ"Ô*ä% l°LÀ±O×4JÑ4JÓK�Ø˜a“x��xØ&)�˜Q‘×#òG &ùóG Mùó Wùó
øô ó ÜðüâQùò
s/   ˜UÁ)UÂUÃUÃ)U-ÄU2Õ
U*Õ)U*c                 ó  • U  Hƒ  nUR                   [        Ld  M  UR                  [        ;   d>  UR                  [        ;   d*  UR                  [
        ;   d  UR                  [        ;   d  Mj  UR                  S;  d  M|  S Ul        M…     g )N)rm   rl   rn   )	r?   rd   r<   r  r  r  r  r=   r>   )r8  r€   s     r%   Úclear_instruction_argsr    s^   € ó ˆà�K‰Kœ|Ô+à—‘œyÓ(Ø—;‘;¤(Ó*Ø—;‘;¤(Ó*Ø—;‘;¤)Õ+à—‘Ð#RÕRàˆDŽHò r(   c                  óR  • S/n U R                  S5        U R                  / SQ5        [        R                  S:¼  a  U R                  S5        U R                  S5        U R                  S5        [        R                  S:¼  a  U R                  S5        U R                  S	S
/5        U $ )NÚco_argcountÚco_posonlyargcount)
Úco_kwonlyargcountÚ
co_nlocalsÚco_stacksizeÚco_flagsrø  rý  r  rÇ  Úco_filenameÚco_namer_   Úco_qualnameÚco_firstlinenoÚco_linetableÚco_exceptiontablerÆ  rÅ  )r³   r´   r~   r   )rl  s    r%   Úget_code_keysr)    s—   € ð
 ˆ?€DØ‡K�KÐ$Ô%Ø‡K�Kò	
ôô ×Ñ˜7Ó"Ø�‰�MÔ"Ø‡K�KÐ Ô!Ø‡K�K�ÔÜ
×Ñ˜7Ó"à�‰Ð'Ô(Ø‡K�KàØð	
ôð €Kr(   Útransformationsr   rö  c                 óâ   • [        5       nU Vs0 s H  oD[        X5      _M     nn[        US   5      US   :X  d   e[        X5      n[	        U5        U" Xe5      n[        XcU5      u  p‰X—4$ s  snf )NrÇ  r   )r)  Úgetattrr!  Úcleaned_instructionsr   Úclean_and_assemble_instructions)
r?  r*  rö  rl  Úkrû  r8  Útracer_outputrD  Úbytecodes
             r%   r÷  r÷  9  s|   € ô ‹?€DÙ15Ó6²¨A”w˜tÓ'Ò'±€LÐ6Üˆ|˜MÑ*Ó+¨|¸LÑ/IÓIÐIÐIä'¨Ó3€Lä˜Ô%á# LÓ?€MÜ1°,ÀlÓS�K€AØÐ"Ð"ùò 7s   �A,rl  c                 óè  • [        U 5        [        U 5        [        US   5      US'   S n[        R                  S:¼  a2  [
        R                  " U Vs/ s H  oBU   PM	     sn6 nUR                  n[        XUS9  SnU(       a3  [        U 5        [        U 5        [        [        U 5      5      nU(       a  M3  [        U 5        [        XS   5      u  pxX‚S'   XrS'   [        U 5      US	'   [!        U5      S
1-
  [!        UR#                  5       5      S
1-
  :X  d   e[        R                  S:¼  a  [%        ['        U 5      5      US'   U [
        R                  " U Vs/ s H  oBU   PM	     sn6 4$ s  snf s  snf )NrÇ  r   r_   )r   Tr&  r'  rø  r!  r  r(  )rÀ  r�  r!  r~   r   ÚtypesÚCodeTypeÚ_varname_from_opargr  r\  r`  r6   rÓ  r   rE  r   rZ  rl  r7  r‚  )	r8  rl  rû  r   r/  Útmp_codeÚdirtyr1  r@  s	            r%   r.  r.  M  su  € ô ,¨LÔ9ä$ \Ô2ä!$ \°-Ñ%@Ó!A€L�ÑØÐÜ
×Ñ˜7Ó"ä—>’>¹TÓ#BºT¸°¤O¹TÑ#BÐCˆØ%×9Ñ9ÐÜˆ\Ð<NÒOà€EÞ
Ü�|Ô$Ü˜<Ô(äÔ& |Ó4Ó5ˆ÷	 ˆ%ô ˜<Ô(Ü Ð;KÑ.LÓMÑ€Hà#)�Ñ Ø&�ÑÜ#5°lÓ#C€L�Ñ Üˆt‹9Ð,Ð-Ñ-´°\×5FÑ5FÓ5HÓ1IØðMñ 2ó ð ð ô ×Ñ˜7Ó"Ü,DÜ# LÓ1ó-
ˆÐ(Ñ)ð œŸšÁ4Ó)HÂ4¸a°q¬/Á4Ñ)HÐIÐIÐIùò3 $Cùò2 *Is   ÁE*ÅE/
Úconstsc                 ó`   • U  H(  nUR                   S:X  d  M  XR                     Ul        M*     g )NÚKW_NAMES)r=   r>   r?   )r8  r8  r€   s      r%   Úpopulate_kw_names_argvalr;  t  s&   € ÛˆØ�;‰;˜*Õ$Ø §¡Ñ*ˆDŽKò r(   c                 ó.   • [        X5      n[        U5      $ rG   )Ú_cached_cleaned_instructionsÚ_clone_instructions©r?  rö  r8  s      r%   r-  r-  |  s   € Ü/°Ó;€Lô ˜|Ó,Ð,r(   c                 ób  • U  Vs/ s H†  n[        UR                  UR                  UR                  UR                  UR
                  UR                  UR                  UR                  UR                  UR                  UR                  5      PMˆ     nn[        [        X5      5      nS US '   U Hw  nX1R                     Ul	        UR                  =n(       d  M+  [        X4R                     X4R                      X4R                     UR"                  UR$                  5      Ul
        My     U$ s  snf rG   )r   r<   r=   r>   r?   r@   rA   rB   rC   r   rD   rE   Údictrì  r   r   r   r   r   )r8  rY   ÚcopiedÚremapr5  s        r%   r>  r>  „  s   € ñ" óò ˆAô 	Ø�H‰HØ�H‰HØ�E‰EØ�H‰HØ�H‰HØ�M‰MØ×ÑØ�K‰KØ�H‰HØ�O‰OØ�I‰Iö	
ñ ð ð ô" ”�\Ó*Ó+€Eà€Eˆ$�KãˆØŸ™‘?ˆŒØ—O‘OÐ#ˆ5×#Ü4Ø—k‘kÑ"Ø—i‘iÑ Ø—l‘lÑ#Ø—‘Ø—‘óˆAŽOñ ð €Mùò?s   …BD,c                 ó  • [        [        [        [        R                  " U 5      5      5      n[        U5        [        U5        [        R                  S:¼  a+  [        X R                  5        [        U R                  U5        [        U5        [        U5        U(       d»  [        R                  S:  a  [        U5        [        R                  S:  a  [!        X5        [        R                  S:¼  aI  [#        U5        [        R                  S:¼  a  [%        U5        [        R                  S:¼  a  ['        U5        [(        R*                  (       a  [-        U5        [        R                  S:¼  a  [/        U5        [1        U5        U$ )Nr_   rh   rV   )r©   rë  r]   ru   Úget_instructionsr   rÞ  r~   r   r;  rý  rp  r(  rN  r‘  r˜  rË  r£  r§  rµ  r   Ú&debug_force_graph_break_on_leaf_returnrº  r\  r`  r?  s      r%   r=  r=  ©  s  € ô œÔ/´×1EÒ1EÀdÓ1KÓLÓM€Lä˜Ô%Ü�,ÔÜ
×Ñ˜7Ó"Ü  ¯~©~Ô>Ü" 4×#9Ñ#9¸<ÔHÜ�\Ô"Ü˜Ô%ÞÜ×Ñ˜gÓ%Ü# LÔ1Ü×Ñ˜gÓ%Ü˜4Ô.Ü×Ñ˜wÓ&Ü Ô-Ü×Ñ 7Ó*Ü)¨,Ô7Ü×Ñ 7Ó*Ü'¨Ô5Ü×8×8Ü0°Ô>Ü
×Ñ˜7Ó"Ü�|Ô$Ü˜<Ô(ØÐr(   Ú	with_uuidc                 ó’   • U  S[        [        5       3nU(       a+  US[        R                  " 5        3R	                  SS5      -  nU$ )NrD  Ú-)r%  Ú_unique_id_counterÚuuidÚuuid4rS  )rj   rG  Úrets      r%   Ú	unique_idrN  Ì  sE   € ØˆF�!”DÔ+Ó,Ð-Ð
.€CÞØ�”4—:’:“<�.Ð!×)Ñ)¨#¨sÓ3Ñ3ˆØ€Jr(   c                 ó*   • SnU R                   U-  S:„  $ )Né    r   )r"  )r?  Úco_generators     r%   Úis_generatorrR  Ó  s   € Ø€LØ�M‰M˜LÑ(¨AÑ-Ð-r(   ÚfnÚvarname_mapÚnoreturnÚnoprefixc                 óø  • [        U R                  5      n[        U5        U(       a-  [        U5       H  u  pVUR                  S:X  d  M  XES-   S n  O   U H?  nSUl        SUl        U(       d  M  UR                  U;   d  M,  XR                     Ul        MA     U(       GaØ  [        R                  S:¼  az  / nU Hp  nUR                  S:X  aL  [        R                  S   Ul        SUl        UR                  U5        UR                  [        S5      5        M_  UR                  U5        Mr     Un/ nU H&  nUR                  S:X  d  M  UR                  U5        M(     [        U5      S:X  a  US   US	   L a  UR!                  S	5        U$ [        U5      S:”  aà  US	   US	   L aO  S
US	   l        [        R                  S
   US	   l        SUS	   l        [$        US	   l        UR!                  S	5        OUR                  [        S
5      5        U Hf  n['        US	   5      n	U	R                  Ul        U	R                  Ul        U	R"                  Ul        U	R                  Ul        U	R(                  Ul        Mh     U$ )a7  Generates bytecode from a template function `fn` for use in
dynamo bytecode generation.

For example, we can generate Python-version-independent bytecode
for looping through a dictionary and copying the values to a new dictionary.

def template(d1, d2):
    for k, v in d1.items():
        d2[k] = v


or a try block:

def template():
    try:
        dummy1
    except:
        dummy2
        raise
    dummy3

Args:
    fn: a function template to generate bytecode from
    varname_map: a mapping of `fn`'s varnames to new names. This
        map will be applied to the generated bytecode's varnames.
        For example, local variables in `fn` can be replaced with
        new names that are generated by `OutputGraph.new_var`.
    noreturn: remove all RETURN_* bytecodes and replace them with a jump
        to the end of the bytecode. NOTE: any items pushed to the stack
        for return WILL remain on the stack! Append a POP_TOP if you don't want
        that item to be present.
    noprefix: remove prefix bytecodes (all bytecode before the first RESUME, inclusive).
ÚRESUMEr   Nrh   ÚRETURN_CONSTr‡   ÚRETURN_VALUEr   r‘   r¸  )r-  Ú__code__r  r=  r=   rA   rC   r?   r~   r   ru   rv   r<   r³   rx   r!  r{  r>   rd   r�   r   )
rS  rT  rU  rV  r¢   rY   r€   r“  ÚreturnsÚ	jump_insts
             r%   Úbytecode_from_templater^  Ø  s1  € ôN ! §¡Ó-€EÜ˜5Ô!æÜ  Ö'‰GˆAØ�{‰{˜hÕ&Ø !™e˜g˜�Ùñ (ó
 ˆð  ˆÔØˆŒßˆ;˜4Ÿ;™;¨+Õ5Ø%§k¡kÑ2ˆDŽKñ ÷ Ü×Ñ˜wÓ&àˆIÛ�Ø—;‘; .Ó0Ü"%§)¡)¨LÑ"9�D”KØ".�D”KØ×$Ñ$ TÔ*à×$Ñ$Ô%7¸Ó%GÖHà×$Ñ$ TÖ*ñ ð ˆEð ˆÛˆDØ�{‰{˜nÕ,Ø—‘˜tÖ$ñ ô ˆw‹<˜1Ó ¨¡¨u°R©yÒ!8à�I‰I�bŒMð0 €Lô/ �‹\˜AÓð �R‰y˜G B™KÒ'Ø#(��b‘	Ô Ü#&§9¡9¨UÑ#3��b‘	Ô Ø $��b‘	”Ü#/��b‘	Ô Ø—‘˜B•à—‘Ô/°Ó6Ô7ó  �ô 1°°r±Ó;�	Ø'×.Ñ.�”Ø'×.Ñ.�”Ø$Ÿ=™=�”Ø'×.Ñ.�”Ø'×.Ñ.�–ñ  ð €Lr(   )T)FrG   )NTT)ƒrU   rn  Údataclassesru   Ú	functoolsr¼  r~   r3  rK  Úcollections.abcr   r   r   r   r   Útypingr   r	   r
   r   r   Ú r   Úbytecode_analysisr   r   r   r   Úutilsr   Úoutput_graphr   Ú	dataclassr   r   r   r]   rd   r7   r6   rp   r5   rx   r�   rƒ   r‰   rŽ   r©   r›   rª   r¬   r·   r¾   rÁ   rÄ   rÈ   rÓ   rÝ   rß   râ   rå   rÑ   rë   rm  r  r  r  r  r  r"  r&  r)  r4  r1  r7  rE  rA  rI  rN  rZ  rL  rU  rV  rX  r`  rp  r‚  r…  r‹  r�  r‘  r•  r˜  r£  r§  r°  rµ  rº  rÀ  r4  rË  rÓ  r>  rÞ  r\  rñ  rú  Úhaslocalr  Úhasnamer  Úhasfreer  Úhasconstr  rÿ  r  r  Ú	lru_cacher)  r÷  r.  r;  r-  r>  r=  r  rJ  rN  rR  r^  r/   r(   r%   Ú<module>rm     sÝ
  ðñó Û Û 
Û Û Û 
Û Û ß KÕ Kß <Õ <å ÷ó õ $ö Ý0ð ×Ò˜TÑ"÷
ð 
ó #ð
ð6 ×Ò˜TÑ"÷)ð )ó #ð)ð> ×Ñ�wÓð

˜sŸ™ð 

°;õ 

ð 	×Ñ˜Ó ð

˜sŸ™ð 

°;õ 

ð

˜sŸ™ð 

°;ô 

÷ñ ð
 ×Ñ�wÓðG˜sð G tõ Gð 	×Ñ˜Ó ð%˜sð % tõ %ð
˜sð  tô ð Ø(Ø$(ò'Ø
ð'ð 
�#‰ð'ð �S‰Mð	'ð
 �[Ñ!ð'ð õ'ðV3 ð 3°ô 3ð
>˜[ð >¨Tô >ñ8˜3ð 8¨ð 8¸õ 8ð)˜ô )ð0�Cð 0˜D Ñ-ô 0ð.8Ø˜ d¨;Ñ&7Ð7Ñ8ð8à	ˆ+Ñô8ðvØ˜ d¨;Ñ&7Ð7Ñ8ðà	ˆ+Ñôð<4< ð 4<°ð 4<¸¸kÑ9Jô 4<ðp GLñIØðIØ!%ðIØ?CðIà	ˆ+ÑõIðD:˜cð : d¨;Ñ&7ô :ð:˜Sð : [ô :ð5˜kð 5¨kô 5ð
+�3ð +˜4 Ñ,ô +ð^ =Bñ
Ø�C‰=ð
Ø'¨™}ð
Ø59ð
à	ˆ+Ñõ
ð>�3ð ˜4 Ñ,ô ð( ð ¨¨kÑ):ô ð˜cð  d¨;Ñ&7ô ð3˜kô 3ð4˜#ð 4 +ô 4ð""Øð""à
ˆ4�‰9�h  S˜z¨4Ð/Ñ0°(¸C¸5À$¸;Ñ2GÐGÑHô""ðJ�Sð ˜T #™Yô ð ×Ñ�wÓð:!Øð:!à	ˆt�C‰y˜( C§M¡M°DÑ$8¸#Ð#>ÀÐ#DÑEÐEÑ	Fô:!ðz ×Ò˜TÑ"÷ð ó #ðð Sð ¨T°#©Yô ð 
¨h°s©mð 
Àô 
ð

˜tÐ$7Ñ8ð 

¸Tô 

ð %ð ¨DÐ1DÑ,Eô ð, $Ð':Ñ";ð Àô ð$#&˜4 Ñ,ð #&¸3ð #&À5ÈÐPUÈÑCVô #&ðL	Ø˜˜kÐ)Ñ*ð	Ø47ð	àˆkÑô	ðP 8¨KÑ#8ð P¸Tô Pñ �—‘Ó€
ð
, [ð 
,°Tô 
,ð¨¨kÑ):ð Àð Èô ð21 T¨+Ñ%6ð 21¸4ô 21ðj)Øð)Ø(,¨[Ñ(9ð)à	ô)ðXJØ�{Ñ#ðJà	Ð
ÑôJðZ Ø	Ð$Ñ	%ð Ø04°[À#Ð5EÑ0Fð à	ô ð&=°4¸Ñ3Dð =Èô =ð6C°4¸Ñ3Dð CÈô Cð0P d¨;Ñ&7ð P¸Dô Pð&Øð&Ø&*¨;Ñ&7ð&à	ˆ+Ñô&ð.¨$¨{Ñ*;ð ÀÀ[Ñ@Qô ð  d¨;Ñ&7ð  ¸Dô  ð> ¨D°Ñ,=ð  À$ô  ð0 6Ø)QØ9Ø7ñ	€ð ¨$¨{Ñ*;ð  Àô  ð& °t¸KÑ7Hð  ÈTô  ð ¸$¸{Ñ:Kð  ÐPTô  ð6#˜Ÿ™ð #°t¸KÑ7Hð #ÈTô #ðL D¨Ñ$5ð ¸#ô ðB˜;ð ¨3ô ð) ¨Ñ 5ð )¸$ô )ð) ¨+Ñ!6ð )¸4ô )ð	2�uð 	2 ô 	2ðQ�u—~‘~ð Q¨$ô Qñ �—‘Ó€	Ùˆs�{‰{Ó€Ùˆs�{‰{Ó€Ù�—‘Ó€	ð	. $ s¨C x¡.ð 	.°sð 	.¸sô 	.ð 8<ñl*Ø�{Ñ#ðl*à�s˜C�x‘.ðl*ð ! ¨#¨s¨(Ñ!3Ñ4ðl*ð 
õ	l*ð^¨¨kÑ):ð ¸tô ð" ×Ñð!�t˜C‘yó !ó ð!ðR ñ#Ø
�.‰.ð#àØ	ˆkÑ	˜D  c ™NÐ+¨XÐ6JÑ-KÐKñð#ð
 ð#ð ˆ5�>‰>˜8Ð$8Ñ9Ð9Ñ:õ#ð($JØ�{Ñ#ð$JØ+/°©9ð$JØDHÈÈcÈÁNð$Jà
ˆ4�Ñ˜eŸn™nÐ,Ñ-ô$JðN+¨8°KÑ+@ð +È#ð +ÐRVô +ñ-˜uŸ~™~ð -°Tð -ÀdÈ;ÑFWõ -ð" h¨{Ñ&;ð "ÀÀ[Ñ@Qô "ðJ ×Ñà',ñØ
�.‰.ðØ $ðàˆkÑôó ðð> —_’_Ó&Ð ñ�Cð  Dð °Sõ ð.�u—~‘~ð .¨$ô .ð 04ØØñ	gØ��c�Ñðgà˜' # s (Ñ+Ñ,ðgð ðgð ð	gð
 
ˆ+Ñögr(   