§
    Ì²Åj¼  ã            !       óØ  — U d Z ddlZddlZddlZddlZddlZddlZddlmZ ddl	m
Z
 ddl	mZ ddlmZmZmZmZ ddlmZmZ dd	lmZ ddlZddlZ G d
„ de¦  «        Z G d„ d¦  «        Zeeef         ZdZi Zeed<   	 dddœZg d¢Z  G d„ de!¦  «        Z"d„ Z# G d„ d¦  «        Z$ G d„ d¦  «        Z%dedefd„Z&dedede'fd„Z(d „ Z)	 	 	 	 	 dbd#ed$ed%eded&e'd'e'dee         fd(„Z*d)ed*ed+ed,ed-eeef         d.e'd'e'd/e%d0e'ddfd1„Z+d2„ Z,d3„ Z- ej.        d4¦  «        Z/d5„ Z0d6„ Z1d7„ Z2d8„ Z3 ej.        d9¦  «        Z4d:„ Z5 ej.        d;¦  «        Z6d<„ Z7 ej.        d=¦  «        Z8d>„ Z9dcd?„Z:d@„ Z;dA„ Z<dB„ Z=dC„ Z>dD„ Z? G dE„ dF¦  «        Z@ G dG„ dH¦  «        ZA eA¦   «         ZBi ZC eA¦   «         ZDi ZEeeeFf         edI<   i ZGe
D ]°ZH eIeHe¦  «        sJ ‚eH J                    ¦   «         D ]‹\  ZKZLeLd         ZMeLdd…         ZNejO        eNvr?eD P                    eK¦  «         ejQ        eNv reE R                    eKdJ¦  «        reMeGeK<   neMeEeK<   ejS        eNvr#ejQ        eNvreB P                    eK¦  «         eMeCeK<   ŒŒŒ± ej.        eB T                    ¦   «         ¦  «        ZU ej.        dKeD T                    ¦   «         › dL�¦  «        ZV ej.        dM¦  «        ZW ej.        dN¦  «        ZX ej.        dO¦  «        ZY ej.        dP¦  «        ZZ	 d)ed*ed+ed,ed-eeef         d.e'd'e'd/e%d0e'defdQ„Z[dcdR„Z\dS„ Z]dT„ Z^ ej.        dU¦  «        Z_dV„ Z`dW„ Za	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddd\ed]e'ded^ed)ed,ed$ed_ed&e'd%ed0e'd.e'd'e'd`e'd/ee%         def da„ZbdS )ea   The Python Hipify script.
##
# Copyright (c) 2015-2016 Advanced Micro Devices, Inc. All rights reserved.
#               2017-2018 Advanced Micro Devices, Inc. and
#                         Facebook Inc. All rights reserved.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
é    Né   )Ú	constants)ÚCUDA_TO_HIP_MAPPINGS)ÚMATH_TRANSPILATIONS)ÚDictÚListÚIteratorÚOptional)ÚMappingÚIterable)ÚEnumc                   ó   — e Zd ZdZdZdS )ÚCurrentStater   é   N)Ú__name__Ú
__module__Ú__qualname__ÚINITIALIZEDÚDONE© ó    úQC:\Projects\Historical\venv\Lib\site-packages\torch/utils/hipify/hipify_python.pyr   r   ,   s   € € € € € Ø€KØ€D€D€Dr   r   c                   ó   — e Zd Zd„ Zd„ ZdS )ÚHipifyResultc                 ó0   — || _         || _        d| _        d S )NÚ ©Úcurrent_stateÚhipified_pathÚstatus)Úselfr   r   s      r   Ú__init__zHipifyResult.__init__1   s   € Ø*ˆÔØ*ˆÔØˆŒˆˆr   c                 ó6   — d| j         › d| j        › d| j        › �S )NzHipifyResult:: current_state: z, hipified_path : z
, status: r   ©r!   s    r   Ú__str__zHipifyResult.__str__6   sG   € ð C°Ô1Cð  Cð  CÐW[ÔWið  Cð  CÐuyô  vAð  Cð  Cð  	Dr   N)r   r   r   r"   r%   r   r   r   r   r   0   s7   € € € € € ðð ð ð
Dð Dð Dð Dð Dr   r   z;// !!! This is a file automatically generated by hipify!!!
ÚHIPIFY_FINAL_RESULTÚscalar_t)ÚDtypeÚT)!Ú
InputErrorÚopenfÚbcolorsÚGeneratedFileCleanerÚmatch_extensionsÚmatched_files_iterÚpreprocess_file_and_save_resultÚcompute_statsÚadd_dim3ÚprocessKernelLaunchesÚfind_closure_groupÚfind_bracket_groupÚfind_parentheses_groupÚreplace_math_functionsÚhip_header_magicÚreplace_extern_sharedÚget_hip_file_pathÚis_out_of_placeÚis_pytorch_fileÚis_cusparse_fileÚis_special_fileÚis_caffe2_gpu_filer?   ÚTrieÚpreprocessorÚfile_specific_replacementÚfile_add_headerÚfix_static_global_kernelsÚextract_argumentsÚstr2boolr   r   Úhipifyc                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )r*   c                 óX   •— t          ¦   «                              |¦  «         || _        d S ©N)Úsuperr"   Úmessage)r!   rL   Ú	__class__s     €r   r"   zInputError.__init__M   s&   ø€ Ý‰Œ×Ò˜Ñ!Ô!Ð!ØˆŒˆˆr   c                 ó   — d| j         › �S )NzInput error: )rL   r$   s    r   r%   zInputError.__str__Q   s   € Ø-˜tœ|Ð-Ð-Ð-r   )r   r   r   r"   r%   Ú__classcell__)rM   s   @r   r*   r*   J   sG   ø€ € € € € ðð ð ð ð ð.ð .ð .ð .ð .ð .ð .r   r*   c                 ó&   — t          | |d¬¦  «        S )NÚignore)Úerrors)Úopen)ÚfilenameÚmodes     r   r+   r+   U   s   € Ý�˜$ xÐ0Ñ0Ô0Ð0r   c                   ó.   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	S )
r,   z[95mz[94mz[92mz[93mz[91mz[0mz[1mz[4mN)r   r   r   ÚHEADERÚOKBLUEÚOKGREENÚWARNINGÚFAILÚENDCÚBOLDÚ	UNDERLINEr   r   r   r,   r,   Z   s6   € € € € € Ø€FØ€FØ€GØ€GØ€DØ€DØ€DØ€I€I€Ir   r,   c                   ó4   — e Zd ZdZd	d„Zd„ Zd„ Zd	d„Zd„ ZdS )
r-   z+Context Manager to clean up generated filesFc                 óH   — || _         t          ¦   «         | _        g | _        d S rJ   )Úkeep_intermediatesÚsetÚfiles_to_cleanÚdirs_to_clean)r!   ra   s     r   r"   zGeneratedFileCleaner.__init__o   s$   € Ø"4ˆÔÝ!™eœeˆÔØˆÔÐÐr   c                 ó   — | S rJ   r   r$   s    r   Ú	__enter__zGeneratedFileCleaner.__enter__t   s   € Øˆr   c                 óÎ   — t           j                             |¦  «        s7| j                             t           j                             |¦  «        ¦  «         t          |g|¢R i |¤ŽS rJ   )ÚosÚpathÚexistsrc   ÚaddÚabspathrS   )r!   ÚfnÚargsÚkwargss       r   rS   zGeneratedFileCleaner.openw   s[   € ÝŒw�~Š~˜bÑ!Ô!ð 	9ØÔ×#Ò#¥B¤G§O¢O°BÑ$7Ô$7Ñ8Ô8Ð8Ý�BÐ(˜Ð(Ð(Ð( Ð(Ð(Ð(r   c                 óâ  — t           j                             |¦  «        \  }}|s"t           j                             |¦  «        \  }}|r8|r6t           j                             |¦  «        s|                      |d¬¦  «         t           j                             |¦  «        r|sMt          j        |¦  «         | j                             t           j         	                    |¦  «        ¦  «         d S d S )NT)Úexist_ok)
rh   ri   Úsplitrj   ÚmakedirsÚisdirÚmkdirrd   Úappendrl   )r!   Údnrq   ÚparentÚns        r   rs   zGeneratedFileCleaner.makedirs|   sÑ   € Ý”G—M’M "Ñ%Ô%‰	ˆ�Øð 	.ÝœŸš fÑ-Ô-‰IˆF�AØð 	1�að 	1¥¤§¢¨vÑ 6Ô 6ð 	1Ø�MŠM˜&¨4ˆMÑ0Ô0Ð0ÝŒw�}Š}˜RÑ Ô ð 	;¨ð 	;ÝŒH�R‰LŒLˆLØÔ×%Ò%¥b¤g§o¢o°bÑ&9Ô&9Ñ:Ô:Ð:Ð:Ð:ð	;ð 	;r   c                 ó¢   — | j         sE| j        D ]}t          j        |¦  «         Œ| j        d d d…         D ]}t          j        |¦  «         Œd S d S )Néÿÿÿÿ)ra   rc   rh   Úunlinkrd   Úrmdir)r!   ÚtypeÚvalueÚ	tracebackÚfÚds         r   Ú__exit__zGeneratedFileCleaner.__exit__†   sn   € ØÔ&ð 	ØÔ(ð ð �Ý”	˜!‘”��ØÔ'¨¨¨"¨Ô-ð ð �Ý”˜‘”��ð		ð 	ðð r   N©F)	r   r   r   Ú__doc__r"   rf   rS   rs   rƒ   r   r   r   r-   r-   m   so   € € € € € Ø5Ð5ð ð  ð  ð  ð
ð ð ð)ð )ð )ð
;ð ;ð ;ð ;ðð ð ð ð r   r-   ri   Úreturnc                 óB   — |                       t          j        d¦  «        S )Nú/)Úreplacerh   Úsep)ri   s    r   Ú_to_unix_pathr‹   �   s   € Ø�<Š<�œ Ñ$Ô$Ð$r   rT   Ú
extensionsc                 ó:   ‡ — t          ˆ fd„|D ¦   «         ¦  «        S )z<Helper method to see if filename ends with certain extensionc              3   óB   •K  — | ]}‰                      |¦  «        V — Œd S rJ   ©Úendswith)Ú.0ÚerT   s     €r   ú	<genexpr>z#match_extensions.<locals>.<genexpr>”   s1   øè è € Ð8Ð8¨ˆx× Ò  Ñ#Ô#Ð8Ð8Ð8Ð8Ð8Ð8r   ©Úany)rT   rŒ   s   ` r   r.   r.   ’   s&   ø€ åÐ8Ð8Ð8Ð8¨ZÐ8Ñ8Ô8Ñ8Ô8Ð8r   c                 ó:   ‡ — t          ˆ fd„|D ¦   «         ¦  «        S )Nc              3   óB   •K  — | ]}t          j         ‰|¦  «        V — Œd S rJ   )Úfnmatch)r‘   ÚpatternÚfilepaths     €r   r“   z_fnmatch.<locals>.<genexpr>˜   s/   øè è € ÐJÐJ°g�wŒ˜x¨Ñ1Ô1ÐJÐJÐJÐJÐJÐJr   r”   )rš   Úpatternss   ` r   Ú_fnmatchrœ   —   s&   ø€ ÝÐJÐJÐJÐJÀÐJÑJÔJÑJÔJÐJr   r   FÚ	root_pathÚincludesÚignoresÚout_of_place_onlyÚis_pytorch_extensionc              #   ó  K  — t          |¦  «        }t          j        | d¬¦  «        D �]W\  }}}	t          j                             || ¦  «        }
|
dk    r`d|v r|                     d¦  «         d|v r|                     d¦  «         d|v r*|                     d¦  «         |                     d¦  «         |	D ]Ç}t          t          j                             ||¦  «        ¦  «        }t          t          j                             |
|¦  «        ¦  «        }t          ||¦  «        r[t          ||¦  «        sKt          ||¦  «        s||v r7|s1t          |¦  «        st          |¦  «        sŒ±|rt          |¦  «        sŒÃ|V — ŒÈ�ŒYd S )NT)Útopdownú.z.gitÚbuildÚthird_partyzthird_party/nvfuser)rb   rh   Úwalkri   ÚrelpathÚremoverv   r‹   Újoinrœ   r.   r<   r?   r;   )r�   rž   rŸ   rŒ   r    r¡   Úexact_matchesÚabs_dirpathÚdirsÚ	filenamesÚrel_dirpathrT   rš   Úrel_filepaths                 r   r/   r/   ›   s±  è è € õ ˜‘M”M€Mõ +-¬'°)ÀTÐ*JÑ*JÔ*Jð ñ Ñ&ˆ�d˜IÝ”g—o’o k°9Ñ=Ô=ˆØ˜#ÒÐà˜ˆ~ˆ~Ø—’˜FÑ#Ô#Ð#Ø˜$ˆˆØ—’˜GÑ$Ô$Ð$Ø Ð$Ð$Ø—’˜MÑ*Ô*Ð*Ø—’Ð1Ñ2Ô2Ð2Ø!ð 	ð 	ˆHÝ$¥R¤W§\¢\°+¸xÑ%HÔ%HÑIÔIˆHÝ(­¬¯ª°kÀ8Ñ)LÔ)LÑMÔMˆLõ ˜ 8Ñ,Ô,ð
å! (¨GÑ4Ô4ð
õ & h°
Ñ;Ô;ð
ð @HÈ=Ð?XÐ?Xà+ð !Ý*¨<Ñ8Ô8ð !ÕASÐT`ÑAaÔAað !Ø Ø(ð !µÀÑ1NÔ1Nð !Ø Ø���øñ	ðð r   Úoutput_directoryrš   Ú	all_filesÚheader_include_dirsÚstatsÚhip_clang_launchÚ	clean_ctxÚshow_progressc	                 ó^  — t           j                             t           j                             | |¦  «        ¦  «        }	t	          t
          j        |	¬¦  «        }
|
t          |	<   t          | ||||||||¦	  «	        }|r'd|j	        vrt          |	d|j        |j	        d¬¦  «         |t          |	<   d S )N)r   r   Úignoredz->T)Úflush)rh   ri   rl   rª   r   r   r   r&   rA   r    Úprintr   )r±   rš   r²   r³   r´   rµ   r¡   r¶   r·   Úfin_pathÚhipify_resultÚresults               r   r0   r0   Ç   sÂ   € õ Œw�Š�rœwŸ|š|Ð,<¸hÑGÔGÑHÔH€HÝ ­|Ô/GÐW_Ð`Ñ`Ô`€MØ$1Õ˜Ñ!ÝÐ*¨H°iÐATÐV[Ø*Ð,@À)È]ñ\ô \€Fð ð =˜¨&¬-Ð7Ð7ÝØ�dØÔ  &¤-°tð	=ñ 	=ô 	=ð 	=ð %+Õ˜Ñ!Ð!Ð!r   c                 óú   — d„ | d         D ¦   «         }t          dt          |¦  «        d›�¦  «         t          d                     |¦  «        ¦  «         t          dt          | d         ¦  «        d›�¦  «         d S )Nc                 ó   — h | ]\  }}|’ŒS r   r   )r‘   Ú	cuda_callÚ	_filepaths      r   ú	<setcomp>z compute_stats.<locals>.<setcomp>á   s   € Ð\Ð\Ð\Ñ'=¨	°9˜Ð\Ð\Ð\r   Úunsupported_callsz1Total number of unsupported CUDA function calls: r‚   ú, z+
Total number of replaced kernel launches: Úkernel_launches)r»   Úlenrª   )r´   rÄ   s     r   r1   r1   à   sŽ   € Ø\Ð\ÀÐGZÔA[Ð\Ñ\Ô\Ðõ 
Ð
X½cÐBSÑ>TÔ>TÐ
XÐ
XÐ
XÑYÔYÐYõ 
ˆ$�)Š)Ð%Ñ
&Ô
&Ñ'Ô'Ð'õ 
Ð
Z½¸UÐCTÔ=UÑ9VÔ9VÐ
ZÐ
ZÐ
ZÑ[Ô[Ð[Ð[Ð[r   c                 ó  — d}d}|                       dd¦  «                              dd¦  «        } d„ t          d¦  «        D ¦   «         }d||         d<   t          | ¦  «        D ]q\  }}|dk    r ne|d	k    r|dz  }n|d
k    r|dz  }|dk    s|t          | ¦  «        dz
  k    r1|dk    r+||dk    z   ||         d<   |dz  }|dk     r|dz   ||         d<   Œr| |d         d         |d         d         dz   …         }| |d         d         |d         d         …         }| |d         d         |d         d         …                               dd¦  «                             d¦  «        }	| |d         d         |d         d         …                               dd¦  «                             d¦  «        }
d|	› d
�}d|
› d
�}|                      |	|¦  «        }|                      |
|¦  «        }|                      ||z   ||z   ¦  «        }|S )zBadds dim3() to the second and third arguments in the kernel launchr   ú<<<r   ú>>>c                 ó   — g | ]}i ‘ŒS r   r   )r‘   Ú_s     r   ú
<listcomp>zadd_dim3.<locals>.<listcomp>ò   s   € Ð%;Ð%;Ð%;¨Q bÐ%;Ð%;Ð%;r   r   Ústartr   ú(ú)ú,Úendú
ú zdim3()r‰   ÚrangeÚ	enumeraterÇ   Ústrip)Úkernel_stringÚcuda_kernelÚcountÚclosureÚarg_locsÚindÚcÚfirst_arg_rawÚsecond_arg_rawÚfirst_arg_cleanÚsecond_arg_cleanÚfirst_arg_dim3Úsecond_arg_dim3Úfirst_arg_raw_dim3Úsecond_arg_raw_dim3s                  r   r2   r2   í   sL  € à€EØ€GØ!×)Ò)¨%°Ñ4Ô4×<Ò<¸UÀBÑGÔG€MØ%;Ð%;µ%¸±(´(Ð%;Ñ%;Ô%;€HØ €HˆU„O�GÑÝ˜MÑ*Ô*ð 3ð 3‰ˆˆQØ�1Š9ˆ9ØˆEØ�Š8ˆ8Ø�q‰LˆGˆGØ�#ŠXˆXØ�q‰LˆGØ�ŠHˆH˜�s =Ñ1Ô1°AÑ5Ò5Ð5¸7Àaº<¸<Ø%(¨A°ªHÑ%5ˆH�UŒO˜EÑ"Ø�Q‰JˆEØ�qŠyˆyØ+.°©7�˜” Ñ(øà! (¨1¤+¨gÔ"6°xÀ´{À5Ô7IÈAÑ7MÐ"MÔN€MØ" 8¨A¤;¨wÔ#7¸À¼ÀEÔ8JÐ#JÔK€Nà# H¨Q¤K°Ô$8¸À!¼ÀUÔ9KÐ$KÔL×TÒTÐUYÐ[]Ñ^Ô^×dÒdÐehÑiÔi€OØ$ X¨a¤[°Ô%9¸(À1¼+ÀeÔ:LÐ%LÔM×UÒUÐVZÐ\^Ñ_Ô_×eÒeÐfiÑjÔjÐà/˜_Ð/Ð/Ð/€NØ1Ð.Ð1Ð1Ð1€Oà&×.Ò.¨ÀÑOÔOÐØ(×0Ò0Ð1AÀ?ÑSÔSÐØ×%Ò% m°nÑ&DÐFXÐ[nÑFnÑoÔo€KØÐr   z([ ]+)(detail?)::[ ]+\\\n[ ]+c           
      ó¼  ‡ — t                                d„ ‰ ¦  «        Š ˆ fd„}d„ }d„ }t           | |‰ ¦  «        ¦  «        ¦  «        }‰ }|D �]Œ} ||¦  «        }‰                      d|d         ¦  «        }	‰ |d         d         |	d	z   …         }
‰ |d         |d         …         }|d	         d         d
k    rdnd	}‰ |d         d         ||         d         d	z   …         }t	          ||
¦  «        }t          t          d|d                              dd¦  «                             dd¦  «        ¦  «        ¦  «        }d|dd
…                              ddd|z
  z  dz   ¦  «                             dd¦  «                             dd¦  «                             |d|z   dz   ¦  «        z   }|                     |
|¦  «        }|d                              |¦  «         �ŒŽ|S )zK Replace the CUDA style Kernel launches with the HIP style kernel launches.c                 ó\   — |                       d¦  «        › |                       d¦  «        › d�S )Nr   r   z::©Úgroup©Úinps    r   ú<lambda>z'processKernelLaunches.<locals>.<lambda>  s(   € °·²¸1±´Ð.O¸s¿yºyÈ¹|¼|Ð.OÐ.OÐ.O€ r   c                 ó   •— | d         | d         dœdddœdddœdœ}ddi}d}d}d	}d
}|}t          |d         d         dz
  dd¦  «        D �]}‰
|         }	|||fv r^|	dk    r#||k    r|}||d         d<   |dxx         dz  cc<   |	dk    r/|dxx         dz  cc<   |d         dk    r||k    r||d         d<   |}||k    rŒ‰
|                              ¦   «         s
‰
|         dv r>||k    r|}||d         d<   |dk    r$d|d         d<   |d         |d         |d         gc S Œ×||k    r$||d         d<   |d         |d         |d         gc S �Œd S )NrÎ   rÒ   ©rÎ   rÒ   r{   )Úkernel_launchÚkernel_nameÚtemplatez<>r   r   r   é   rð   ú>rò   ú<>   rÌ   ú#rÏ   rÐ   ú:rñ   )rÕ   Úisalnum)Ú	in_kernelÚposrÚ   ÚSTARTÚAT_TEMPLATEÚAFTER_TEMPLATEÚAT_KERNEL_NAMEr    ÚiÚcharÚstrings             €r   Úgrab_method_and_templatez7processKernelLaunches.<locals>.grab_method_and_template  s  ø€ ð (1°Ô'9À)ÈEÔBRÐSÐSØ%'°Ð3Ð3Ø"$¨RÐ0Ð0ð
ð 
ˆð �q�	ˆð ˆØˆØˆØˆàˆõ �s˜?Ô+¨GÔ4°qÑ8¸"¸bÑAÔAð %	añ %	aˆAØ˜!”9ˆDð ˜% Ð-Ð-Ð-Ø˜3’;�;Ø ’�Ø!,˜Ø12˜˜Jœ¨Ñ.Ø˜$�K�K”K 1Ñ$�K�K‘Kà˜3’;�;Ø˜$�K�K”K 1Ñ$�K�K‘KØ˜T”{ aÒ'Ð'¨V°{Ò-BÐ-BØ34˜˜Jœ¨Ñ0Ø!/˜ð ˜Ò$Ð$Ø˜!”9×$Ò$Ñ&Ô&ð a¨&°¬)Ð7PÐ*PÐ*PØ Ò/Ð/Ø!/˜Ø45˜˜MÔ*¨5Ñ1ð ˜A’v�vØ67˜˜MÔ*¨7Ñ3ð "% ]Ô!3°s¸:´È#ÈoÔJ^Ð`Ð`Ð`Ð`ð	 ð  Ò/Ð/Ø67˜˜MÔ*¨7Ñ3ð "% ]Ô!3°s¸:´È#ÈoÔJ^Ð`Ð`Ð`Ð`ùðK%	að %	ar   c                 ó@  — d}g }|                       d|¦  «        dk    r|                       d|¦  «        }|                       d|¦  «        dz   }|dk    rt          d¦  «        ‚|                     ||| ||…         dœ¦  «         |                       d|¦  «        dk    °|S )zKFinds the starting and ending points for all kernel launches in the string.r   rÉ   r{   rÊ   ró   zno kernel end found)rÎ   rÒ   rê   )Úfindr*   rv   )r  Ú
kernel_endÚkernel_positionsÚkernel_starts       r   Úfind_kernel_boundsz1processKernelLaunches.<locals>.find_kernel_boundsS  sÊ   € àˆ
ØÐð �kŠk˜% Ñ,Ô,°Ò2Ð2à!Ÿ;š; u¨jÑ9Ô9ˆLð  Ÿš U¨LÑ9Ô9¸AÑ=ˆJØ˜QŠˆÝ Ð!6Ñ7Ô7Ð7ð ×#Ò#¨lÀ:Ø.4°\À:Ð5MÔ.Nð%Pð %Pñ Qô Qð Qð �kŠk˜% Ñ,Ô,°Ò2Ð2ð  Ðr   c                 ó0  — d}d}d}| D ]Œ}|dk    r3|dk    r	|dk    rd}nb|dk    r	|dk    rd}nS|dk    r|dk    r|dk    rd}n>|dk    r|d	k    s|d
k    rd}n)|dk    r|dk    r|dk    rd}n|dk    r|dk    r|dk    rd}|}|dk    r||z  }Œ‡|dz  }Œ�|S )Nr   rˆ   z//Ú*z/*ú"ú\ú'úrÓ   Úxr   )r  Ú
in_commentÚprev_cÚ
new_stringrÞ   s        r   Úmask_commentsz,processKernelLaunches.<locals>.mask_commentsk  s  € Øˆ
ØˆØˆ
Øð 	"ð 	"ˆAØ˜RÒÐà˜’8�8 ¨#¢ Ø!%�J�JØ˜#’X�X &¨C¢- -Ø!%�J�JØ˜#’X�X &¨D¢. .°V¸s²]°]Ø!$�JøØ˜tÒ#Ð#à˜’9�9  T¢	 	Ø!#�JøØ˜tÒ#Ð#à˜’8�8 ¨#¢ Ø!#�JøØ˜sÒ"Ð"à˜’8�8 ¨$¢ Ø!#�JØˆFØ˜RÒÐØ˜a‘�
�
à˜cÑ!�
�
ØÐr   rÏ   rÒ   r   rÎ   r   r{   rê   rÉ   rÊ   rÐ   zhipLaunchKernelGGL(z, 0é   rÅ   rÆ   )	ÚRE_KERNEL_LAUNCHÚsubÚlistr  r2   rÇ   rE   r‰   rv   )r  r´   r  r  r  Úget_kernel_positionsÚoutput_stringÚkernelÚparamsÚparenthesisrÙ   rØ   Úend_param_indexÚkernel_name_with_templateÚcuda_kernel_dim3Únum_klpÚ
hip_kernels   `                r   r3   r3     sA  ø€ õ ×!Ò!Ð"OÐ"OÐQWÑXÔX€Fð9að 9að 9að 9að 9aðv ð  ð  ð0ð ð õB  Ð 2Ð 2°=°=ÀÑ3HÔ3HÑ IÔ IÑJÔJÐØ€Mð 'ð 4ñ 4ˆà)Ð)¨&Ñ1Ô1ˆð —k’k # v¨e¤}Ñ5Ô5ˆð ˜V AœY wÔ/°¸a±Ð?Ô@ˆØ˜v gœ¨v°e¬}Ð<Ô=ˆØ% aœy¨Ô/°2Ò5Ð5˜!˜!¸1ˆØ$*¨6°!¬9°WÔ+=¸fÀ_Ô>UÐV[Ô>\Ð_`Ñ>`Ð+`Ô$aÐ!Ý# M°;Ñ?Ô?ÐåÕ'¨¨6°'¬?×+BÒ+BÀ5È#Ñ+NÔ+N×+VÒ+VÐW\Ð^aÑ+bÔ+bÑcÔcÑdÔdˆà*Ð-=¸aÀ¸dÔ-C×-KÒ-KØ�5˜A ™KÑ(¨5Ñ0ñ.2ô .2ß29²'¸%ÀÑ2FÔ2FÇwÂwØ�4ñHô Hß šÐ!:¸CÐB[Ñ<[Ð^aÑ<aÑbÔbñcˆ
ð
 &×-Ò-¨k¸:ÑFÔFˆð 	ÐÔ ×'Ò'¨
Ñ3Ô3Ð3Ñ3àÐr   c                 ó  — d}d}|}d\  }}|t          | ¦  «        k     r`| |         |d         k    r|du rd}d}|}n+|dz  }n%| |         |d         k    r|r|dz  }|dk    r|}||fS |dz  }|t          | ¦  «        k     °`dS )aÊ  Generalization for finding a balancing closure group

         if group = ["(", ")"], then finds the first balanced parentheses.
         if group = ["{", "}"], then finds the first balanced bracket.

    Given an input string, a starting position in the input string, and the group type,
    find_closure_group returns the positions of group[0] and group[1] as a tuple.

    Example:
        >>> find_closure_group("(hi)", 0, ["(", ")"])
        (0, 3)
    Fr   )r{   r{   Tr   )NN)rÇ   )Úinput_stringrÎ   rê   Úinside_parenthesisÚparensrú   Úp_startÚp_ends           r   r4   r4   ­  sÌ   € ð ÐØ€FØ
€CØ�N€GˆUà
•�LÑ!Ô!Ò
!Ð
!Ø˜Ô  a¤Ò(Ð(Ø! UÐ*Ð*Ø%)Ð"Ø�Ø��à˜!‘��Ø˜#Ô %¨¤(Ò*Ð*Ð/AÐ*Ø�a‰KˆFà˜Š{ˆ{Ø�Ø �~Ð%àˆq‰ˆð •�LÑ!Ô!Ò
!Ð
!ð  ˆ:r   c                 ó*   — t          | |ddg¬¦  «        S )z%Finds the first balanced parantheses.Ú{Ú}ré   ©r4   ©r#  rÎ   s     r   r5   r5   Ó  ó   € å˜l¨E¸#¸s¸ÐDÑDÔDÐDr   c                 ó*   — t          | |ddg¬¦  «        S )z!Finds the first balanced bracket.rÏ   rÐ   ré   r+  r,  s     r   r6   r6   Ø  r-  r   z\bassert[ ]*\(c                 ól   — | }t           D ])}|                     |› d�t           |         › d�¦  «        }Œ*|S )a‹  FIXME: Temporarily replace std:: invocations of math functions
        with non-std:: versions to prevent linker errors NOTE: This
        can lead to correctness issues when running tests, since the
        correct version of the math function (exp/expf) might not get
        called.  Plan is to remove this function once HIP supports
        std:: math function calls inside device code

    rÏ   )r   r‰   )r#  r  Úfuncs      r   r7   r7   à  sM   € ð !€MÝ#ð \ð \ˆØ%×-Ò-°$¨k¨k¨kÕ>QÐRVÔ>WÐ;ZÐ;ZÐ;ZÑ[Ô[ˆˆàÐr   z:?:?\b(__syncthreads)\b(\w*\()c                 ó¾   ‡— | Šddg}t          ˆfd„|D ¦   «         ¦  «        r‰S d‰v }|d‰v z  }|d‰v z  }|t                               ‰¦  «        duz  }|rd| z   Š‰S )	a  If the file makes kernel builtin calls and does not include the cuda_runtime.h header,
    then automatically add an #include to match the "magic" includes provided by NVCC.
    TODO:
        Update logic to ignore cases where the cuda_runtime.h is included by another file.
    zhip/hip_runtime.hzhip/hip_runtime_api.hc              3   óP   •K  — | ] }t          j        d |› d|› d�‰¦  «        V — Œ!dS )z#include ("z"|<z>)N)ÚreÚsearch)r‘   Úextr  s     €r   r“   z#hip_header_magic.<locals>.<genexpr>ÿ  sC   øè è € Ð
WÐ
WÈ�2Œ9Ð3 CÐ3Ð3¨CÐ3Ð3Ð3°]ÑCÔCÐ
WÐ
WÐ
WÐ
WÐ
WÐ
Wr   ÚhipLaunchKernelGGLÚ
__global__Ú
__shared__Nz#include "hip/hip_runtime.h"
)r•   ÚRE_SYNCTHREADSr4  )r#  ÚheadersÚhasDeviceLogicr  s      @r   r8   r8   ó  s¤   ø€ ð !€Mð #Ð$;Ð<€GÝ
Ð
WÐ
WÐ
WÐ
WÈwÐ
WÑ
WÔ
WÑWÔWð ØÐð *¨]Ð:€NØ�l mÐ3Ñ3€NØ�l mÐ3Ñ3€NØ•n×+Ò+¨MÑ:Ô:À$ÐFÑF€Nð ð HØ8¸<ÑGˆàÐr   zGextern\s+([\w\(\)]+)?\s*__shared__\s+([\w:<>\s]+)\s+(\w+)\s*\[\s*\]\s*;c                 óB   — | }t                                d„ |¦  «        }|S )a�  Match extern __shared__ type foo[]; syntax and use HIP_DYNAMIC_SHARED() MACRO instead.
       https://github.com/ROCm-Developer-Tools/HIP/blob/master/docs/markdown/hip_kernel_language.md#__shared__
    Example:
        "extern __shared__ char smemChar[];" => "HIP_DYNAMIC_SHARED( char, smemChar)"
        "extern __shared__ unsigned char smem[];" => "HIP_DYNAMIC_SHARED( unsigned char, my_smem)"
    c                 ó�   — d|                       d¦  «        pd› d|                       d¦  «        › d|                       d¦  «        › d�S )	NzHIP_DYNAMIC_SHARED(r   r   rÔ   r   rÅ   ró   rÐ   ré   rë   s    r   rí   z'replace_extern_shared.<locals>.<lambda>  sF   € Ð^¨#¯)ª)°A©,¬,Ð*<¸"Ð^Ð^¸s¿yºyÈ¹|¼|Ð^Ð^ÈsÏyÊyÐYZÉ|Ì|Ð^Ð^Ð^€ r   )ÚRE_EXTERN_SHAREDr  )r#  r  s     r   r9   r9     s1   € ð !€MÝ$×(Ò(Ø^Ð^Ð`mñoô o€Mð Ðr   c                 óà  — t           j                             | ¦  «        rJ ‚|st          | ¦  «        s| S t           j                             | ¦  «        \  }}t           j                             |¦  «        \  }}|dk    rd}|}|}|                     dd¦  «        }|                     dd¦  «        }|                     dd¦  «        }|                     dd¦  «        }|                     dd¦  «        }|d	k    r|                     dd¦  «        }|s&||k    r t           j                             |d¦  «        }|r||k    r||z   |k    r|d
z   }t           j                             |||z   ¦  «        S )z3
    Returns the new name of the hipified file
    ú.cuú.hipÚcudaÚhipÚCUDAÚHIPÚTHCÚTHHzcaffe2/coreÚ_hip)rh   ri   Úisabsr;   rr   Úsplitextr‰   rª   )r°   r¡   ÚdirpathrT   Úrootr5  Úorig_filenameÚorig_dirpaths           r   r:   r:   !  sn  € õ Œw�}Š}˜\Ñ*Ô*Ð*Ð*Ð*Øð ­¸Ñ(EÔ(Eð ØÐåœŸš lÑ3Ô3Ñ€GˆXÝ”× Ò  Ñ*Ô*�I€Dˆ#ðH ˆe‚|€|Øˆà€MØ€Là�oŠo˜f eÑ,Ô,€GØ�oŠo˜f eÑ,Ô,€GØ�oŠo˜e UÑ+Ô+€Gà�<Š<˜ Ñ&Ô&€DØ�<Š<˜ Ñ&Ô&€Dà�-ÒÐØ�|Š|˜E 5Ñ)Ô)ˆàð / G¨|Ò$;Ð$;Ý”'—,’,˜w¨Ñ.Ô.ˆàð  ¨<Ò 7Ð 7¸TÀC¹ZÈMÒ<YÐ<YØ�f‰}ˆåŒ7�<Š<˜ ¨¡Ñ,Ô,Ð,r   c                 óÒ   — t           j                             | ¦  «        rJ ‚|                      d¦  «        rdS |                      d¦  «        rdS |                      d¦  «        rdS dS )Nútorch/Fúthird_party/nvfuser/útools/autograd/templates/T©rh   ri   rI  Ú
startswith©r°   s    r   r;   r;   i  st   € ÝŒw�}Š}˜\Ñ*Ô*Ð*Ð*Ð*Ø×Ò˜xÑ(Ô(ð ØˆuØ×ÒÐ5Ñ6Ô6ð ØˆuØ×ÒÐ:Ñ;Ô;ð ØˆuØˆ4r   c                 ó.  — t           j                             | ¦  «        rJ ‚|                      d¦  «        r|                      d¦  «        rdS dS |                      d¦  «        rdS |                      d¦  «        rdS |                      d¦  «        rdS dS )Nzaten/zaten/src/ATen/core/FTrP  rQ  rR  rS  rU  s    r   r<   r<   u  s«   € ÝŒw�}Š}˜\Ñ*Ô*Ð*Ð*Ð*Ø×Ò˜wÑ'Ô'ð Ø×"Ò"Ð#8Ñ9Ô9ð 	Ø�5ØˆtØ×Ò˜xÑ(Ô(ð ØˆtØ×ÒÐ5Ñ6Ô6ð ØˆtØ×ÒÐ:Ñ;Ô;ð ØˆtØˆ5r   c                 óP   — t          | ¦  «        rd|                      ¦   «         v S dS )NÚsparseF©r<   ÚlowerrU  s    r   r=   r=   „  s.   € Ý�|Ñ$Ô$ð 0Ø˜<×-Ò-Ñ/Ô/Ð/Ð/Øˆ5r   c                 ó´   — t          | ¦  «        rHd|                      ¦   «         v rdS d|                      ¦   «         v rd|                      ¦   «         v rdS dS dS )NrX  TÚlinalgÚbatchlinearalgebralibblasFrY  rU  s    r   r>   r>   Š  sk   € Ý�|Ñ$Ô$ð Ø�|×)Ò)Ñ+Ô+Ð+Ð+Ø�4Ø˜×+Ò+Ñ-Ô-Ð-Ð-Ø*¨l×.@Ò.@Ñ.BÔ.BÐBÐBØ�uØ�4Øˆ5r   c                 ó  — t           j                             | ¦  «        rJ ‚|                      d¦  «        rdS t           j                             | ¦  «        }t           j                             |¦  «        \  }}d|v s|dv od|vS )Nzc10/cudaTÚgpu©r@  ú.cuhÚcudnn)rh   ri   rI  rT  ÚbasenamerJ  )r°   rT   rÌ   r5  s       r   r?   r?   ”  s„   € ÝŒw�}Š}˜\Ñ*Ô*Ð*Ð*Ð*Ø×Ò˜zÑ*Ô*ð ØˆtÝŒw×Ò Ñ-Ô-€HÝŒW×Ò˜hÑ'Ô'�F€A€sØ�XÐÐ7 ¨Ð!7ÐV¸gÈXÐ>UÐVr   c                   ó   — e Zd ZdZd„ ZdS )ÚTrieNodez�A Trie node whose children are represented as a directory of char: TrieNode.
       A special char '' represents end of word
    c                 ó   — i | _         d S rJ   )Úchildrenr$   s    r   r"   zTrieNode.__init__¡  s   € ØˆŒˆˆr   N)r   r   r   r…   r"   r   r   r   re  re  œ  s-   € € € € € ðð ðð ð ð ð r   re  c                   ó\   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Ze	j
        d„ ¦   «         Zd„ Zd	„ Zd
S )r@   z£Creates a Trie out of a list of words. The trie can be exported to a Regex pattern.
    The corresponding Regex should match much faster than a simple Regex union.c                 ó˜   — t          ¦   «         | _        t          j        ¦   «         | _        | j                             ¦   «         | _        dS )z,Initialize the trie with an empty root node.N)re  rL  ÚhashlibÚmd5Ú_hashÚdigestÚ_digestr$   s    r   r"   zTrie.__init__¨  s3   € å‘J”JˆŒ	Ý”[‘]”]ˆŒ
Ø”z×(Ò(Ñ*Ô*ˆŒˆˆr   c                 ó.  — | j                              |                     ¦   «         ¦  «         | j                              ¦   «         | _        | j        }|D ]6}|j                             |t          ¦   «         ¦  «         |j        |         }Œ7d|j        d<   dS )zAdd a word to the Trie. Tr   N)	rl  ÚupdateÚencoderm  rn  rL  rg  Ú
setdefaultre  ©r!   ÚwordÚnoder   s       r   rk   zTrie.add®  s‡   € àŒ
×Ò˜$Ÿ+š+™-œ-Ñ(Ô(Ð(Ø”z×(Ò(Ñ*Ô*ˆŒØŒyˆàð 	'ð 	'ˆDØŒM×$Ò$ T­8©:¬:Ñ6Ô6Ð6Ø”= Ô&ˆDˆDØ ˆŒ�bÑÐÐr   c                 ó   — | j         S )zReturn the root node of Trie. )rL  r$   s    r   Údumpz	Trie.dump¹  s
   € àŒyÐr   c                 ó*   — t          j        |¦  «        S )z Escape a char for regex. )r3  Úescape)r!   r   s     r   Úquotez
Trie.quote½  s   € åŒy˜‰ŒÐr   c                 ó^   — | j         }|D ]}||j        v r|j        |         }Œ dS d|j        v S )zZSearch whether word is present in the Trie.
        Returns True if yes, else return FalseFr   )rL  rg  rs  s       r   r4  zTrie.searchÁ  sK   € ð ŒyˆØð 	ð 	ˆDØ�t”}Ð$Ð$Ø”} TÔ*��à�u�uð �T”]Ð"Ð"r   c                 óÂ  — |}d|j         v r,t          |j                              ¦   «         ¦  «        dk    rdS g }g }d}t          |j                              ¦   «         ¦  «        D ]¯}t	          |j         |         t
          ¦  «        r‹	 |                      |j         |         | j        ¦  «        }|                     |  	                    |¦  «        |z   ¦  «         Œu# t          $ r+ |                     |  	                    |¦  «        ¦  «         Y Œ©w xY wd}Œ°t          |¦  «        dk     }	t          |¦  «        dk    r]t          |¦  «        dk    r|                     |d         ¦  «         n.|                     dd                     |¦  «        z   dz   ¦  «         t          |¦  «        dk    r	|d         }
ndd                     |¦  «        z   d	z   }
|r|	r|
d
z  }
nd|
› d�}
|
S )zžConvert a Trie into a regular expression pattern

        Memoized on the hash digest of the trie, which is built incrementally
        during add().
        r   r   Nr   ú[ú]z(?:ú|rÐ   ú?z)?)rg  rÇ   ÚkeysÚsortedÚ
isinstancere  Ú_patternrn  rv   rz  Ú	Exceptionrª   )r!   rL  rm  ru  ÚaltÚccÚqr   ÚrecurseÚcconlyr¾   s              r   r„  zTrie._patternÎ  sé  € ð ˆà�”ÐÐ¥3 t¤}×'9Ò'9Ñ';Ô';Ñ#<Ô#<ÀÒ#AÐ#AØ�4àˆØˆØˆÝ˜4œ=×-Ò-Ñ/Ô/Ñ0Ô0ð 	ð 	ˆDÝ˜$œ-¨Ô-­xÑ8Ô8ð ð0Ø"Ÿmšm¨D¬M¸$Ô,?ÀÄÑNÔN�GØ—J’J˜tŸzšz¨$Ñ/Ô/°'Ñ9Ñ:Ô:Ð:Ð:øÝ ð 0ð 0ð 0Ø—I’I˜dŸjšj¨Ñ.Ô.Ñ/Ô/Ð/Ð/Ð/ð0øøøð ��Ý˜‘X”X ’\Ð!ˆåˆr‰7Œ7�QŠ;ˆ;Ý�2‰wŒw˜!Š|ˆ|Ø—
’
˜2˜aœ5Ñ!Ô!Ð!Ð!à—
’
˜3 §¢¨¡¤Ñ,¨sÑ2Ñ3Ô3Ð3åˆs‰8Œ8�qŠ=ˆ=Ø˜”VˆFˆFà˜SŸXšX c™]œ]Ñ*¨SÑ0ˆFàð 	*Øð *Ø˜#‘��à)˜vÐ)Ð)Ð)�Øˆs   ÂACÃ2DÄDc                 óB   — |                       | j        | j        ¦  «        S ©z#Export the Trie to a regex pattern.©r„  rL  rn  r$   s    r   r™   zTrie.patternú  ó   € à�}Š}˜TœY¨¬Ñ5Ô5Ð5r   c                 óB   — |                       | j        | j        ¦  «        S rŒ  r�  r$   s    r   Úexport_to_regexzTrie.export_to_regexþ  rŽ  r   N)r   r   r   r…   r"   rk   rw  rz  r4  Ú	functoolsÚ	lru_cacher„  r™   r�  r   r   r   r@   r@   ¤  s©   € € € € € ðSð Sð+ð +ð +ð	!ð 	!ð 	!ðð ð ðð ð ð#ð #ð #ð Ôð)ð )ñ Ôð)ðV6ð 6ð 6ð6ð 6ð 6ð 6ð 6r   r@   ÚPYTORCH_MAPr   z(?<=\W)(z)(?=\W)z#include "([^"]+)"z#include <([^>]+)>z"#define THC_GENERIC_FILE "([^"]+)"z\.cu\bc	                 óP  ‡ ‡‡‡‡‡‡‡‡‡— t           j                             t           j                             ‰ |¦  «        ¦  «        Št          ‰         }	|‰vr!d|	_        d|	_        t          j        |	_	        |	S t          t           j                             |‰ ¦  «        ¦  «        }
t          ‰d¬¦  «        5 }|                     ¦   «         t          k    r-d|	_        d|	_        t          j        |	_	        |	cddd¦  «         S |                     d¦  «         |                     ¦   «         }ddd¦  «         n# 1 swxY w Y   |}t           j                             t           j                             ‰ t#          |
‰¦  «        ¦  «        ¦  «        }t           j                             t           j                             |¦  «        ¦  «        s2‰                     t           j                             |¦  «        ¦  «         d„ Šˆfd„}‰rt*                               ‰|¦  «        }ntt/          |
¦  «        rt*                               ||¦  «        }nIt1          |
¦  «        rt*                               ‰|¦  «        }nd	„ }t2                               ||¦  «        }d#ˆˆˆˆˆˆˆ ˆˆf	d„	}t4                                |dd
¦  «        |¦  «        }t6                                |dd¦  «        |¦  «        }t8                                |d¦  «        |¦  «        }|                     d¦  «        rG|                     dd¦  «        }|                     dd¦  «        }t>                               d|¦  «        }‰stA          |‰¦  «        }|                     d¦  «        rd|vrtC          |¦  «        }tE          |¦  «        }‰rg||k    rat           j                             ‰¦  «        t           j                             |¦  «        k    r!‰|	_        d|	_        t          j        |	_	        |	S ‰|k    rtG          ‰d¦  «        r
t          |z   }d
}t           j                             |¦  «        rAt          |d¬¦  «        5 }|                     ¦   «         |k    }ddd¦  «         n# 1 swxY w Y   |rá	 ‰                     |dd¬¦  «        5 }| $                    |¦  «         ddd¦  «         n# 1 swxY w Y   ||	_        d|	_        t          j        |	_	        |	S # tJ          $ rm}tM          tN          j(        › d|› d|j)        › d‰› dtN          j*        › �	tV          j,        ¬ ¦  «         ‰|	_        d!|	_        t          j        |	_	        |	cY d}~S d}~ww xY w||	_        d"|	_        t          j        |	_	        |	S )$z< Executes the CUDA -> HIP conversion on the specified file. Nz[ignored, not to be hipified]zutf-8)Úencodingz#[ignored, input is hipified output]r   c                 óB   — t           |                      d¦  «                 S ©Nr   )r“  rê   ©Úms    r   Úpt_replzpreprocessor.<locals>.pt_replZ  s   € Ý˜1Ÿ7š7 1™:œ:Ô&Ð&r   c                 ór   •— t                                |                      d¦  «         ‰| ¦  «        ¦  «        S r—  )ÚPYTORCH_SPECIAL_MAPÚgetrê   )r™  rš  s    €r   Úpt_special_replz%preprocessor.<locals>.pt_special_repl]  s+   ø€ å"×&Ò& q§w¢w¨q¡z¤z°7°7¸1±:´:Ñ>Ô>Ð>r   c                 óB   — t           |                      d¦  «                 S r—  )Ú
CAFFE2_MAPrê   r˜  s    r   Úc2_replzpreprocessor.<locals>.c2_replj  s   € Ý! !§'¢'¨!¡*¤*Ô-Ð-r   Tc                 ó*   •	‡ ‡— ˆˆˆˆˆˆˆˆ	ˆ
ˆˆ fd„}|S )Nc                 ó–  •‡— |                       d¦  «        }t          j                             |¦  «        Š|                     d¦  «        s*|                     d¦  «        rK|                     d¦  «        s6‰                     t          |                       d¦  «        ‰¦  «        ¦  «        S ‰�r‡t          ˆfd„‰D ¦   «         ¦  «        �rkd }d }‰rt          j                             ‰¦  «        }t          j         	                    t          j         
                    ||¦  «        ¦  «        }t          j                             |¦  «        r|}|}|€…‰D ]‚}t          j         
                    ‰|¦  «        }t          j         	                    t          j         
                    ||¦  «        ¦  «        }t          j                             |¦  «        r|}|}Œƒ|€|                       d¦  «        S |t          vrt          ‰|‰‰‰‰‰‰‰¦	  «	         nÞ|t          v rÕt          |         }|j        t          j        k    r³t          j                             |‰¦  «        }t          j         	                    t          j         
                    ‰t          |‰¦  «        ¦  «        ¦  «        }	|	|_        |t          |<   ‰                     t          j                             |	�|	n||¦  «        ¦  «        S t          |         j        }
‰                     t          j                             |
�|
n||¦  «        ¦  «        S |                       d¦  «        S )Nr   )z	ATen/cudazATen/native/cudazATen/native/nested/cudazATen/native/quantized/cudazATen/native/sparse/cudazATen/native/transformers/cudazTHC/rF  ÚTHCPc              3   óB   •K  — | ]}|                      ‰¦  «        V — Œd S rJ   r�   )r‘   ÚsrT   s     €r   r“   z>preprocessor.<locals>.mk_repl.<locals>.repl.<locals>.<genexpr>  s/   øè è € Ð,UÐ,UÀa¨Q¯ZªZ¸Ñ-AÔ-AÐ,UÐ,UÐ,UÐ,UÐ,UÐ,Ur   r   )rê   rh   ri   rc  rT  Úformatr:   r•   Údirnamerl   rª   rj   r&   r0   r   r   r   r¨   r   )r™  r�   Ú
header_dirÚheader_filepathÚheader_dir_to_checkÚheader_path_to_checkÚheader_include_dirÚheader_resultÚheader_rel_pathÚheader_fout_pathÚhipified_header_filepathrT   r²   r¶   r¼   r³   rµ   Úinclude_current_dirr¡   r±   r·   r´   Útempls              @€€€€€€€€€€€r   Úreplz+preprocessor.<locals>.mk_repl.<locals>.replp  s<  øø€ Ø—’˜‘
”
ˆAÝ”w×'Ò'¨Ñ*Ô*ˆHà—’ð &ñ 'ô 'ð
Yð —’˜eÑ$Ô$ð
Yð ./¯\ª\¸&Ñ-AÔ-Að
Yð —|’|Õ$5°a·g²g¸a±j´jÐBVÑ$WÔ$WÑXÔXÐXà$ñ (W­Ð,UÐ,UÐ,UÐ,UÈ9Ð,UÑ,UÔ,UÑ)UÔ)Uñ (WØ!�
Ø"&�à&ð ?Ý*,¬'¯/ª/¸(Ñ*CÔ*CÐ'Ý+-¬7¯?ª?½2¼7¿<º<ÐH[Ð]^Ñ;_Ô;_Ñ+`Ô+`Ð(Ý”w—~’~Ð&:Ñ;Ô;ð ?Ø%8˜
Ø*>˜à"Ð*Ø.Að Cð CÐ*Ý.0¬g¯lªlÐ;KÐM_Ñ.`Ô.`Ð+Ý/1¬w¯ª½r¼w¿|º|ÐL_ÐabÑ?cÔ?cÑ/dÔ/dÐ,Ýœ7Ÿ>š>Ð*>Ñ?Ô?ð CØ)<˜JØ.B˜Oøà"Ð*ØŸ7š7 1™:œ:Ð%à"Õ*=Ð=Ð=Ý3Ð4DØ4CØ4=Ð?RÐTYÐ[kØ4HÈ)ÐUbñdô dð dð dð %Õ(;Ð;Ð;Ý$7¸Ô$H�MØ$Ô2µlÔ6NÒNÐNå*,¬'¯/ª/¸/ÐK[Ñ*\Ô*\˜Ý+-¬7¯?ª?½2¼7¿<º<ÐHXÝHYÐZiÐkñ  IAô  IAñ<Bô <Bñ ,Cô ,CÐ(à6F˜Ô3Ø?LÕ+¨OÑ<Ø$Ÿ|š|­B¬G¯OªOÐP`ÐPlÐ<LÐ<LØAPÐR\ñ-^ô -^ñ  _ô  _ð _å+>¸Ô+OÔ+]Ð(Ø—|’|¥B¤G§O¢OÐPhÐPtÐ4LÐ4LØ9HÈ*ñ%Vô %Vñ Wô Wð Wð —7’7˜1‘:”:Ðr   r   )r³  r²  r´  r²   r¶   r¼   r³   rµ   r¡   r±   r·   r´   s   `` €€€€€€€€€r   Úmk_replzpreprocessor.<locals>.mk_replo  sX   øøø€ ð9	ð 9	ð 9	ð 9	ð 9	ð 9	ð 9	ð 9	ð 9	ð 9	ð 9	ð 9	ð 9	ð 9	ð 9	ðt ˆr   z#include "{0}"z#include <{0}>Fz#define THC_GENERIC_FILE "{0}"zCMakeLists.txtrD  rE  rF  rG  rA  r`  Ú	PowKernelz[skipped, no changes])r@  ra  ú.cú.ccú.cppú.hú.hppÚwz[ok]zFailed to save z with "z", leaving z unchanged.©Úfilez[skipped, no permissions]z[skipped, already hipified])T)-rh   ri   rl   rª   r&   r   r    r   r   r   r‹   r¨   rS   ÚreadlineÚHIPIFY_C_BREADCRUMBÚseekÚreadr:   rj   r¨  rs   ÚRE_PYTORCH_PREPROCESSORr  r>   r<   ÚRE_CAFFE2_PREPROCESSORÚRE_QUOTE_HEADERÚRE_ANGLE_HEADERÚRE_THC_GENERIC_FILEr�   r‰   ÚRE_CU_SUFFIXr3   r7   r8   r.   ÚwriteÚPermissionErrorr»   r,   rZ   Ústrerrorr\   ÚsysÚstderr)r±   rš   r²   r³   r´   rµ   r¡   r¶   r·   r½   r°   ÚfinÚoutput_sourceÚorig_output_sourceÚ	fout_pathrž  r¡  rµ  Údo_writeÚfout_oldÚfoutr’   r¼   rš  s   ` ```````             @@r   rA   rA   4  sŸ  øøøøøøøøøø€ õ Œw�Š�rœwŸ|š|Ð,<¸hÑGÔGÑHÔH€HÝ'¨Ô1€MØ�yÐ Ð Ø&*ˆÔ#Ø>ˆÔÝ&2Ô&7ˆÔ#ØÐå ¥¤§¢°Ð;KÑ!LÔ!LÑMÔM€Lå	ˆh Ð	)Ñ	)Ô	)ð #¨SØ�<Š<‰>Œ>Õ0Ò0Ð0Ø*.ˆMÔ'Ø#HˆMÔ Ý*6Ô*;ˆMÔ'Ø ð#ð #ð #ð #ñ #ô #ð #ð #ð 	�Š�‰ŒˆØŸš™
œ
ˆð#ð #ð #ñ #ô #ð #ð #ð #ð #ð #ð #øøøð #ð #ð #ð #ð 'Ðõ ”—’¥¤§¢Ð-=Õ?PÐQ]Ð_sÑ?tÔ?tÑ uÔ uÑvÔv€IÝŒ7�>Š>�"œ'Ÿ/š/¨)Ñ4Ô4Ñ5Ô5ð 7Ø×Ò�2œ7Ÿ?š?¨9Ñ5Ô5Ñ6Ô6Ð6ð'ð 'ð 'ð?ð ?ð ?ð ?ð ?ð
 ð 
OÝ/×3Ò3°G¸]ÑKÔKˆˆå˜<Ñ(Ô(ð 	OÝ3×7Ò7¸ÈÑWÔWˆMˆMÝ˜\Ñ*Ô*ð 	OÝ3×7Ò7¸ÀÑOÔOˆMˆMð.ð .ð .å2×6Ò6°wÀÑNÔNˆMð;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ð ;õx $×'Ò'¨¨Ð0@À$Ñ(GÔ(GÈÑWÔW€MÝ#×'Ò'¨¨Ð0@À%Ñ(HÔ(HÈ-ÑXÔX€MÝ'×+Ò+¨G¨GÐ4TÑ,UÔ,UÐWdÑeÔe€Mð ×ÒÐ)Ñ*Ô*ð @Ø%×-Ò-¨f°eÑ<Ô<ˆØ%×-Ò-¨e°UÑ;Ô;ˆÝ$×(Ò(¨°Ñ?Ô?ˆð ð DÝ-¨m¸UÑCÔCˆð 	×Ò˜/Ñ*Ô*ð >°À8Ð0KÐ0KÝ.¨}Ñ=Ô=ˆõ % ]Ñ3Ô3€Mð 	ðà -Ò/Ð/ÝŒG�OŠO˜HÑ%Ô%­¬¯ª¸Ñ)CÔ)CÒCÐCà&.ˆÔ#Ø6ˆÔÝ&2Ô&7ˆÔ#ØÐð �9ÒÐÕ!1°(Ð<nÑ!oÔ!oÐÝ+¨mÑ;ˆà€HÝ	„w‡~‚~�iÑ Ô ð 8Ý�) gÐ.Ñ.Ô.ð 	8°(Ø—}’}‘”¨-Ò7ˆHð	8ð 	8ð 	8ñ 	8ô 	8ð 	8ð 	8ð 	8ð 	8ð 	8ð 	8øøøð 	8ð 	8ð 	8ð 	8àð ð	!Ø—’ 	¨3¸�ÑAÔAð *ÀTØ—
’
˜=Ñ)Ô)Ð)ð*ð *ð *ñ *ô *ð *ð *ð *ð *ð *ð *øøøð *ð *ð *ð *à*3ˆMÔ'Ø#)ˆMÔ Ý*6Ô*;ˆMÔ'Ø Ð øÝð 	!ð 	!ð 	!Ý•W”_ð  Bð  B°Yð  Bð  BÀqÄzð  Bð  BÐ^fð  Bð  BÕszÔsð  Bð  BÝ”zð#ñ #ô #ð #à*2ˆMÔ'Ø#>ˆMÔ Ý*6Ô*;ˆMÔ'Ø Ð Ð Ð Ð Ð Ð øøøøð	!øøøð '0ˆÔ#Ø<ˆÔÝ&2Ô&7ˆÔ#ØÐsm   Â8>D8Ä)D8Ä8D<Ä?D<Ñ4RÒRÒ RÒ'T Ò?S!ÓT Ó!S%Ó%T Ó(S%Ó)#T Ô
VÔA"U?Õ9VÕ?Vc                 óŽ  ‡— t          | d¦  «        5 }|                     ¦   «         }|r0t          j        dt          j        |¦  «        › d�ˆfd„|¦  «        }n|                     |‰¦  «        }|                     d¦  «         |                     |¦  «         |                     ¦   «          d d d ¦  «         d S # 1 swxY w Y   d S )Núr+z\b(z)\bc                 ó   •— ‰S rJ   r   )r  Úreplace_strings    €r   rí   z+file_specific_replacement.<locals>.<lambda>ð  s   ø€ Èn€ r   r   )	r+   rÂ  r3  r  ry  r‰   rÁ  rÉ  Útruncate)rš   Úsearch_stringrØ  Ústrictr�   Úcontentss     `   r   rB   rB   ì  s  ø€ Ý	ˆx˜Ñ	Ô	ð  !Ø—6’6‘8”8ˆØð 	GÝ”vÐB¥R¤Y¨}Ñ%=Ô%=ÐBÐBÐBÐD\ÐD\ÐD\ÐD\Ð^fÑgÔgˆHˆHà×'Ò'¨°~ÑFÔFˆHØ	�Šˆq‰	Œ	ˆ	Ø	�Š�ÑÔÐØ	�
Š
‰Œˆðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s   ’BB:Â:B>ÃB>c                 óJ  — t          | d¦  «        5 }|                     ¦   «         }|d         dk    r|d         dk    rd|› d�}d|› d�|z   }|                     d¦  «         |                     |¦  «         |                     ¦   «          d d d ¦  «         d S # 1 swxY w Y   d S )	NrÖ  r   rõ   r{   rô   r  z	#include z 
)r+   rÂ  rÁ  rÉ  rÙ  )rš   Úheaderr�   rÜ  s       r   rC   rC   ø  sí   € Ý	ˆx˜Ñ	Ô	ð  !Ø—6’6‘8”8ˆØ�!Œ9˜ÒÐ  r¤
¨cÒ 1Ð 1Ø"˜�]�]�]ˆFØ+ Ð+Ð+Ð+¨xÑ7ˆØ	�Šˆq‰	Œ	ˆ	Ø	�Š�ÑÔÐØ	�
Š
‰Œˆðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s   ‘A:BÂBÂBc                 ó2   — |                       dd¦  «        } | S )z<Static global kernels in HIP results in a compilation error.z __global__ staticr7  ©r‰   )Úin_txts    r   rD   rD     s   € à�^Š^Ð0°,Ñ?Ô?€FØ€Mr   z#include .*\nc                 ó|  — g }dddœ}| }|dz   }|t          |¦  «        k     �r||         dk    r|dxx         dz  cc<   nq||         dk    r|dxx         dz  cc<   nT||         dk    r|dxx         dz  cc<   n7||         dk    r+||dz
           dk    r|d         dk    r|dxx         dz  cc<   |d         dk    r%|d         dk    r|                     ||d	œ¦  «         nZ|d         dk    r5|d         dk    r)||         d
k    r|                     ||d	œ¦  «         |dz   }|dz  }|t          |¦  «        k     �°|S )ad   Return the list of arguments in the upcoming function parameter closure.
        Example:
        string (input): '(blocks, threads, 0, THCState_getCurrentStream(state))'
        arguments (output):
            '[{'start': 1, 'end': 7},
            {'start': 8, 'end': 16},
            {'start': 17, 'end': 19},
            {'start': 20, 'end': 53}]'
    r   )rõ   rÏ   r   rÏ   rÐ   rõ   rô   ú-rï   rÑ   )rÇ   rv   )rÎ   r  Ú	argumentsÚclosuresÚcurrent_positionÚargument_start_poss         r   rE   rE     sÊ  € ð €IàØðð €Hð ÐØ)¨AÑ-Ðð �S ™[œ[Ò
(Ñ
(ØÐ"Ô# sÒ*Ð*Ø�SˆMˆMŒM˜QÑˆMˆM‰MˆMØÐ$Ô%¨Ò,Ð,Ø�SˆMˆMŒM˜QÑˆMˆM‰MˆMØÐ$Ô%¨Ò,Ð,Ø�SˆMˆMŒM˜QÑˆMˆM‰MˆMØÐ$Ô%¨Ò,Ð,°Ð8HÈ1Ñ8LÔ1MÐQTÒ1TÐ1TÐYaÐbeÔYfÐijÒYjÐYjØ�SˆMˆMŒM˜QÑˆMˆM‰Mð �CŒ=˜AÒÐ (¨3¤-°1Ò"4Ð"4à×ÒÐ'9ÐBRÐSÐSÑTÔTÐTØð �CŒ=˜AÒÐ (¨3¤-°1Ò"4Ð"4¸Ð@PÔ9QÐUXÒ9XÐ9XØ×ÒÐ'9ÐBRÐSÐSÑTÔTÐTØ!1°AÑ!5Ðà˜AÑÐð+ �S ™[œ[Ò
(Ñ
(ð. Ðr   c                 óŠ   — |                       ¦   «         dv rdS |                       ¦   «         dv rdS t          j        d¦  «        ‚)zArgumentParser doesn't support type=bool. Thus, this helper method will convert
    from possible string types to True / False.)ÚyesÚtrueÚtÚyÚ1T)ÚnoÚfalser�   ry   Ú0FzBoolean value expected.)rZ  ÚargparseÚArgumentTypeError)Úvs    r   rF   rF   :  sH   € ð 	‡w‚w�y„yÐ2Ð2Ð2ØˆtØ	
�Š‰ŒÐ4Ð	4Ð	4ØˆuåÔ(Ð)BÑCÔCÐCr   ©r@  ra  r·  r¸  r¹  rº  z.inr»  ©ra  rº  r»  ©r
  TÚproject_directoryÚshow_detailedÚheader_extensionsÚextra_filesÚhipify_extra_files_onlyc                 ó€  ‡ ‡‡‡‡	— ‰ dk    rt          j        ¦   «         Š t           j                             ‰ ¦  «        s#t	          d¦  «         t          j        d¦  «         ‰s‰                      d¦  «         ‰ dz   Š‰ ‰k    rˆˆ fd„‰D ¦   «         Šˆˆ fd„‰	D ¦   «         Š	t           j                             ‰¦  «        st          j	        ‰ ‰¦  «         t          t          t          ‰¦  «        ¦  «        Št          t          t          ‰	¦  «        ¦  «        Š	t          t          ‰‰‰	|||¬¦  «        ¦  «        }t          |¦  «        }|D ]Z}t           j                             |¦  «        s t           j                             ‰|¦  «        }||vr|                     |¦  «         Œ[d	d
lm} |D ]Œ}t           j                             |¦  «        r ||¦  «        }n) |t           j                             ‰|¦  «        ¦  «        }|                     ˆˆ	ˆfd„|                     d¦  «        D ¦   «         ¦  «         Œ�|€t-          d¬¦  «        }g g dœ}|s|n|D ]}t/          ‰||||||||
¦	  «	         Œt	          t0          j        dz   t0          j        z   t
          j        ¬¦  «         |rt9          |¦  «         t:          S )Nr   z,The project folder specified does not exist.r   rˆ   Ú_amdc                 ó<   •— g | ]}|                      ‰‰¦  «        ‘ŒS r   rà  )r‘   Úincluder±   r÷  s     €€r   rÍ   zhipify.<locals>.<listcomp>d  s)   ø€ ÐaÐaÐaÈW�G—O’OÐ$5Ð7GÑHÔHÐaÐaÐar   c                 ó<   •— g | ]}|                      ‰‰¦  «        ‘ŒS r   rà  )r‘   rQ   r±   r÷  s     €€r   rÍ   zhipify.<locals>.<listcomp>e  s)   ø€ Ð]Ð]Ð]È6�6—>’>Ð"3Ð5EÑFÔFÐ]Ð]Ð]r   )rž   rŸ   rŒ   r    r¡   r   )ÚPathc              3   óü   •K  — | ]v}|                      ¦   «         ¯t          t          |¦  «        ‰¦  «        ¯3t          t          |¦  «        ‰¦  «        °Pt          |j        ‰¦  «        ¯et          |¦  «        V — Œwd S rJ   )Úis_filerœ   Ústrr.   Úname)r‘   ri   rù  rŸ   rž   s     €€€r   r“   zhipify.<locals>.<genexpr>€  s“   øè è € ð 
ð 
ØÈÏÊÉÌð
å�˜T™œ HÑ-Ô-ð
õ �c $™iœi¨Ñ1Ô1ð
õ ! ¤Ð,=Ñ>Ô>ð	
Ý�‰IŒIð
ð 
ð 
ð 
ð 
ð 
r   r
  T)ra   )rÄ   rÆ   z-Successfully preprocessed all matching files.r½  )rh   Úgetcwdri   rj   r»   rÌ  ÚexitÚrstripÚshutilÚcopytreer  Úmapr‹   r/   rb   rI  rª   rv   Úpathlibr  ÚextendÚrglobr-   r0   r,   rY   r\   rÍ  r1   r&   )r÷  rø  rŒ   rù  r±   r³   rž   rú  r    rŸ   r·   rµ   r¡   rû  r¶   r²   Úall_files_setr�   r  r­  Úheader_include_dir_pathr´   rš   s   `  `` `  `             r   rG   rG   E  sE  øøøøø€ ð" ˜BÒÐÝœI™KœKÐõ Œ7�>Š>Ð+Ñ,Ô,ð ÝÐ<Ñ=Ô=Ð=ÝŒ�‰Œˆð ð 6Ø× Ò  Ñ%Ô%Ð%Ø,¨vÑ5ÐàÐ,Ò,Ð,ØaÐaÐaÐaÐaÐX`ÐaÑaÔaˆØ]Ð]Ð]Ð]Ð]ÐU\Ð]Ñ]Ô]ˆõ Œ7�>Š>Ð*Ñ+Ô+ð =ÝŒÐ)Ð+;Ñ<Ô<Ð<å•C� xÑ0Ô0Ñ1Ô1€HÝ•3•} gÑ.Ô.Ñ/Ô/€GåÕ'Ð(8À8Ø07ÀJØ:KØ=QðSñ Sô Sñ Tô T€Iõ ˜	‘N”N€MØð  ð  ˆÝŒw�}Š}˜QÑÔð 	2Ý”—’Ð-¨qÑ1Ô1ˆAØ�MÐ!Ð!Ø×Ò˜QÑÔÐøð ÐÐÐÐÐØ1ð 

ð 

ÐÝŒ7�=Š=Ð+Ñ,Ô,ð 	_Ø&* dÐ+=Ñ&>Ô&>Ð#Ð#à&* d­2¬7¯<ª<Ð8HÐJ\Ñ+]Ô+]Ñ&^Ô&^Ð#Ø×Òð 
ð 
ð 
ð 
ð 
ð 
Ø"9×"?Ò"?ÀÑ"DÔ"Dð
ñ 
ô 
ñ 	
ô 	
ð 	
ð 	
ð ÐÝ(¸DÐAÑAÔAˆ	ð 46È"ÐMÐM€Eà&=ÐN�Y�YÀ;ð qð qˆÝ'Ð(8¸(ÀIÐObØ(-Ð/?ÐAUÐW`Ðboñ	qô 	qð 	qð 	qõ 
�'Œ/ÐKÑ
KÍgÌlÑ
ZÕadÔakÐlÑlÔlÐlð ð Ý�eÑÔÐåÐr   )r   r   r   FFr„   )Frô  rõ  r   r   rö  r   Fr   TFFFN)cr…   rñ  r˜   r3  r	  rÌ  rh   r   r   Úcuda_to_hip_mappingsr   r   Útypingr   r   r	   r
   Úcollections.abcr   r   Úenumr   r‘  rj  r   r   r  ÚHipifyFinalResultrÀ  r&   Ú__annotations__ÚPYTORCH_TEMPLATE_MAPÚ__all__r…  r*   r+   r,   r-   r‹   Úboolr.   rœ   r/   r0   r1   r2   Úcompiler  r3   r4   r5   r6   Ú	RE_ASSERTr7   r9  r8   r>  r9   r:   r;   r<   r=   r>   r?   re  r@   ÚCAFFE2_TRIEr   ÚPYTORCH_TRIEr“  Úobjectrœ  Úmappingrƒ  ÚitemsÚsrcr   ÚdstÚ	meta_dataÚ
API_CAFFE2rk   ÚAPI_SPECIALr�  ÚAPI_PYTORCHr�  rÄ  rÃ  rÅ  rÆ  rÇ  rÈ  rA   rB   rC   rD   Ú
RE_INCLUDErE   rF   rG   r   r   r   ú<module>r(     sÎ  ððð ð ð0 €€€Ø €€€Ø 	€	€	€	Ø €€€Ø 
€
€
€
Ø 	€	€	€	à Ð Ð Ð Ð Ð Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5à 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ø €€€ðð ð ð ð �4ñ ô ð ðDð Dð Dð Dð Dñ Dô Dð Dð ˜˜lÐ*Ô+Ð ØTÐ Ø)+Ð Ð&Ð +Ð +Ñ +ðà!+°*Ð=Ð=Ð ðsð sð s€ð.ð .ð .ð .ð .�ñ .ô .ð .ð1ð 1ð 1ð
ð ð ð ð ñ ô ð ð&ð ð ð ð ñ ô ð ðD%˜ð % ð %ð %ð %ð %ð9˜sð 9°ð 9¸Tð 9ð 9ð 9ð 9ð
Kð Kð Kð  ØØ!Ø"'Ø%*ð)ð )Øð)àð)ð ð)ð ð	)ð
  ð)ð #ð)ð 08¸¬}ð)ð )ð )ð )ðX+Øð+àð+ð ð+ð &ð	+ð
 �C˜�IŒð+ð ð+ð #ð+ð (ð+ð ð+ð !%ð+ð +ð +ð +ð2
\ð 
\ð 
\ð ð  ð  ðF �2”:Ð>Ñ?Ô?Ð ðWð Wð Wðt#ð #ð #ðLEð Eð Eð
Eð Eð Eð
 ˆBŒJÐ(Ñ)Ô)€	ðð ð ð  �”Ð=Ñ>Ô>€ðð ð ð: �2”:ÐhÑiÔiÐ ðð ð ðE-ð E-ð E-ð E-ðPð ð ðð ð ðð ð ðð ð ðWð Wð Wðð ð ð ð ñ ô ð ð\6ð \6ð \6ð \6ð \6ñ \6ô \6ð \6ð| ˆd‰fŒf€Ø€
Øˆt‰vŒv€Ø!#€ˆT�#�v�+ÔÐ #Ð #Ñ #ð Ð à#ð "ð "€GØˆ:�g˜wÑ'Ô'Ð'Ð'Ð'Ø—m’m‘o”oð "ð "‰
ˆˆUØ�AŒhˆØ˜!˜"˜"”Iˆ	ØÔ yÐ0Ð0Ø×Ò˜SÑ!Ô!Ð!ð Ô$¨	Ð1Ð1°k·o²oÀcÈ2Ñ6NÔ6NÐ1Ø+.Ð# CÑ(Ð(à#&�˜CÑ ØÔ ¨	Ð1Ð1°iÔ6KÐS\Ð6\Ð6\Ø�OŠO˜CÑ Ô Ð Ø!ˆJ�s‰Oøð"ð $˜œ K×$?Ò$?Ñ$AÔ$AÑBÔBÐ Ø$˜"œ*Ð%X°×1MÒ1MÑ1OÔ1OÐ%XÐ%XÐ%XÑYÔYÐ à�"”*Ð2Ñ3Ô3€Ø�"”*Ð2Ñ3Ô3€Ø �b”jÐ!FÑGÔGÐ ØˆrŒz˜)Ñ$Ô$€ððvØðvàðvð ðvð &ð	vð
 �C˜�IŒðvð ðvð #ðvð (ðvð ðvð !-ðvð vð vð vðp	ð 	ð 	ð 	ðð ð ðð ð ð ˆRŒZÐ(Ñ)Ô)€
ð+ð +ð +ð\Dð Dð Dð  ØTØ"8ØØ$&ØØØ#ØØØ"Ø!&Ø$)Ø04ðRð RØðRàðRð ðRð  ð	Rð
 ðRð "ðRð ðRð ðRð ðRð ðRð ðRð ðRð ðRð "ðRð Ð,Ô-ðRð  ð!Rð Rð Rð Rð Rð Rr   