U
    Mh\                 D  @   s:  U d Z ddgZddlZddlZddlZddlZddlmZmZ ddl	Z	ddl
mZ ddlmZ dde	jdfd	fd
dZdd Zdd Zd,ddZdd Ze	jddd	fddZdddd	d	d	dddZdde	jddd	d	fddZdd	e	jdfddZd d!de	jdffd"d#d$d%d&d%d'd(d)d)d)d*d+d,d"d-d.d+d/d#d0d1d0d"d#d%d%d)d0d1d2d*d3d4d%d5d3d&d#d#d'd#d6d7d7d8d5d5d-d7d9d5d5d,d0d/d3d#d%d#d,d5d5d2d5d'd5d:d#d9d5d7d%d)d#d)d0d#d#d2d;d2d<d,d7d+d;d=d,d5d>d#d0d#d#d/d?d#d#d@d#d#d%d#dAdBd%dCd5d2d%d2d#dDdEd,d5d5d5d,dFd%dCd"d0dGd7d7d'd9dHd9d'd:d5d7d:dId2d5d%d#d,dJd/d#d)d#d0dBd1d?d1d/d)d#d2d5d#dKd0d,d0d?d%d)d?d)d7d+d:d7d-dLd#d2d#d2d(dKd#d#d%d#dMd?d>d?d)d?dNd?d5d2d#d2d'dKdOd>d0d?dPd)d%dQd?d)d?d)d(d;d,d5d5d5dRdSdTdUdVdWdXdSdYdZd[d\d]d^d_d`dadbdcdddedfdgdhdidjdidhdkdldmdndodpdqdrdsdtdudvdwdxdSdRdydzd{d<d|d}dSd~ddddddddd~d~ddd~ddd`dd~dddeddd^dddddddhddddddddddgddddddrdddddmdddddqdddqdddddddddddddydydWdddUddddddddd]dVdddd_ddddYdeddadddbdiddddgdddddlddldmdrddrddrddddvddvddddddwdddddRdddddddddddVdddddd\ddddbddddddd[dhdddddddhddeddddddddddddddrdddddddddddddddddddddddddddddddddd6dddddddddd ddddddd_ddfdad~ddҐdddddcddddd	dd
ddhdndhdgdddddlddddddddrdddddsdddvddddddddddd<dːdddWdWdddddddddYd}ddddddddddאdddddd[dddddddddސdddddhdldlddddddlddrdmddrdrdd dddqdd!d!d"d#dd$ddddddddd%d&d'dd(dd)dd*d+d,dxd-ddYdd.d.d/d0dddYdd1d2d3d^dd4ddҐdddd5d6ddhdd7d	dd
ddhdldhdid8ddddldrdldddodddrdvdddd9d:dd;d<ddddǐdd=d>dydddʐdddzdddd?dАd@dAddBdddCdDdddddddEdd^dؐdFdFd[ddGdGd5d5dHddddadaddߐdddndndddIdJdJdJd8dKdmdmdLdMd ddd#dqdqd:d:dNdĐddddOdPdQdRddydydSdSdTdUdVddWdd*d6d'dXd/dddd'ddYdZddddd_d[d3d^ddd[dd\d\dd5dcd]dhddd	dd^dddlddid_dd`dadbdrdcdddddMddedvdddfdudgdd;d<dddhdidjdkdld@dmd<d<dndUdzdodpd@dd8dqdqddBdddCddddrdsddd/d1dtdddududddGdGd5d5dHdHdddededvdvdwdwdndndidid`dxdxdydddddzdzd{d{dvddddgdgd|dd<d}ddd5d~dJddndddSddd'dddKd6d6d,ddWdWddzddddd\dsddd_dFdCd^ddddddd d5ddHddd7d7ddvdddndddddddcddddddddd"ddddkdddddddd>ddUdUd&dd5d5dddzdodzdzddddddzddѐdCdCddddddd1d1dd^ddddddِd5d5dddddddvdvddwddddddddddddddddddddddddddddddddddd{d{dkdkddddddddddddѐdCdCddddddd1d1ddddҐddddِd5d5ddddddd
d
d	dhdddddddd_dd_dddddrdrddddddddvdddddd d!de	jdffd@ddddYdddd
dd8dhddhdodddddd%dSdd+ddd[d[d\dddڐdddddddddd(d d!de	jdffd1d/d1d%ddAd'd,d?d5d#d,d.d(d7d5d9d0d)d#d0d0dOd#d&d&dAd#d&d)dMd,d'dd5d,d,d#d)d,d,dd7d8d7d7dd.dd,d:d-d-d5d0d#dQd#d#d#d,d#d#dd#d)d-d7d.d8d7d7dQd"d)d0d#d"d#d#d5d2d?d*d9d7d5d9dd.d#d?d)d/d%d#dd?dd#d&dd0d&d0d%d)d0d#d5d5d,d5d5d5d,d5d,d4d,d#d?d%d%d>d%d7d9d#d7d-d9d#d7d#d7dEd,d5d4d<d#d5d2d%d#d?d#d)d/d%d?d#d/d0dQd#d,dUd2d#dd%d#d)d#d"d#dLd=d%d7d7dKd5d5d<d5d(d5d1d)d&d#d"d#dd#d%d0d0d#d,dd1d5d>d(d/dd%d)d)dQd3d)d#d#d#dQd5d5d5dd'dUdWddϐdddddd~dɐdddd~d[ddedYdid`deddiddiddidhdkddmddoddqddsdtdddd̐ddRddd<d<ddd)ddddАddd\dd\d~dҐdddd`dbdbdddddd[d}ddbddddddbdddddaddddՐdddbddgdlddddmdmddmdddddqddddddddddddېdddǐd@dddddddd\ddd\dߐdd]dddddddbdddeddadddbdidhdddidhdbdldkdlddddddrddrdddkdvddvddĐdddSdddd<d<ddd̐dd)dddddZdd}dddddd\ddd[dbddddbddd[dedddddddhdhddedddddldndddlddddrdrddddddddvdddddddddddddWdܐd@dydSddWdSd/dUddd6d+d/ddddddd.ddZdddd~ddFd]ddd~ddddddːd6dddhd7dddhddhdldldgd8dkdddlddldddddddrddrdddÐdddvddddddƐdܐdddd<d<dddWdWddddddUddWdYddddddYddddҐddؐdddbd]d[dddddېdddddadhddldhdldldddldddlddrdddrdddrddvddd!d!dd#dddddddydddydSdd'dd(ddd d+d6ddSdddYdd.d.d/d0ddAdYdddFd3d^ddd[dYdddd5dcddddd7dd
ddhdldhdgd8ddddlddlddddddrddrddd9d:ddd<dvdddddddydydʐddd	dzdddBd?dАd@dqddBddddCdՐddYddYdYdEd
d^dؐdFddddڐdGd5d5ddHddddaddhdddndndgddIdJdJdJdKdKddddLd d dddddd:ddĐdd$dddPdQd-ddddSdSdTdkdVdndWdd6dd'd̐d(ddddVddYdݐdddddFdd3d^ddd[ddd\dd5dcddddd	dd^dddlddgd_dd`dadbdrdldddddMddedvdddfdudgddĐd<dddddiddkd@d@d<d<dndd@dod@d@dd8dqdqddBdddddddsdsdYddd1dtd^dudFd[d[ddGd5d5dHdHddddeddvdwdwdd	dgdidIdxddyd8ddddzdzd{dddvddd"dgddddddd5ddJdCdKdddSddd'dddd=dd,ddWdWddzdVdddddddddFdCd^ddddddd d5dddddd7ddvdddndddddddcddddddddd"d_dddkddd"dddddddndndd&dd5dddzddzdddddddzddѐddCdddddddd1d^d^dduddddِd5d5ddddddddvdwdwdd7ddddddddddddddddddd|dddddddd d!ddPdndd"dd#d$d$ddd%ddd&dyddzdddrdrd8dd&dddѐdFdFdDdd dҐdddِdd'd5dd֐ddd7ddd^dddndddd(d)dddd	dddd*dkdpd"dddd+ddodddddd,ddnddidd{d2dkdkddddddddyddd-d.d/dCdddddddאd1ddd0dҐd1dddِd2d2dddddސdd
d
dddd	dddddld_dd3d4ddrdd5drdd6d7dddddddddd8diddjdKd>d"dd#ddUdUddUddd9dydHdzddzdrdrd7dd9ddd6dFddd~dYdYddddd:d2d3d[dd[d7d7dd
ddddddd;dddlddldddodd<>d d!de	jdffdzdzdRdddYd=d>dcd[dddd?ddddddvd%d@dd6dddd_d\d\ddddddddfddd(d d!de	jdffdNd)dOdAd0d?d0d3d5d(d)d(d7d2d7d-d5dd3d?d#d#d#d3d)dBd%d0dd#d5d2d,d5d5d5d)d5d<d4d,d5d5d8d+d7d<d9d7dzd5d7d'd5d0d%d%d#d%d#d5d#d4d'd2d2d5d7d7d7d9d=d)d0d)d)dFd)d5dUd%d5d0d#d7d=d.d7d7d7d0d?d0d?d@d)d"d#d#d%d%d#d?d)dBdQd%d#d#d,d2d(d5d2d5d5d5d5d"dDd#d0d#d/d0dAd8d+d7d7d5d8d-d7d7d8d(d8d2d#d%d?d#d4d/d?d%d>d0d)d0d>d)d%d)d%d5dUd'dd%d5d1d#d#d#d#d3d8d7d7d8d7d7d2d'd5d5d2dSd#d@d"d%d0d#d#d3d%d#d)dFd5d2d#d'd2d'd3dQd0d)d0d)d#d?d%d?d#d%d2d5d5d2d%d(ddRddRdddYdddѐddd[ddeddd[dd8ddhdcd8ddddddlddddrd$d$ddvd$d$dYdCdddd6dDdEdddddddFdGdHdIdJd=dFd_dKdLdddhdhdddMdMdNd[d8d8dOdPdQdRdhddcdldgdSdTdUdndcdddddVdWdrddd"dXddYdYddrd<d$dddZd[d<dvd\d\d]d^d_d`dddddd*d}d}ddddd}dd[dҐddudd[d?dhdHdad[ddddddddldldcdddhddddrdldldvddvdvdrdrd<dvd<d<dvdvd<d<d\d\ddBddd+dbdcdEddddddd.dFdedYdddfd_dFdgdgddd[dJdddhdhdddddddididhdddcd8d8dTdjdldhdrddddVdkdrdldvdvdddYdldvdrd<d<dddZdmdvdvd\d\d^d^d_dndddddd+dEdoddyddddpdqdrdZdsdNddddtdKdYdYd[ddd[dhdMdddhdhdddidudddd8dlddvdUddhdddrdrdVdkdldddrdvdvdYdYdwdxdydzdrdrdvdvd<d<dZdZdvdvd<d<d\d\d_d_dwd{dyd|dAdqddd6d*dEd}dddYdd~ddFdFddddd2ddKdddYd[ddddddddhdhdddiddddldldddvdjd8ddrdrdddVddddvdvdddYdYddd<dvdddZdZddd\d<d^d^d_d_ddKddd6d*dcdodBdBdYdYd.d.dFdrdddYdYdddLdtdbdbdfdd[d[ddddYdddhdhdidd[dd8d8dldldvddhdhddldrddVddldldrdrdvdvdYddedrdvdvd<d<dZdddvd<d<d\d\d_ddzdzdddddEdEdAdAdd1dddFdddddYddddgdsdd[d[ddddMdjddhddddddddndd8ddvdjdddrdldddVddddvdrdddYdddd<dvdddZdmddd\d<d^d^d_d`dǐdmddzd*d*ddddddddddddddYdYdYdKddbd1dNd[d[d[ddddҐdd[dhdhdiddddhdhdldldvdddhdldldrdrdVddcdldrdrdvdvdYddeddvdvd<d<dZdd;dvd<d<d\d\d_ddmdUdpdpd6d-dcdEdzddddddddddYdYdddgdgddd[d[dddMdMdYddhd[dddddddldhdddjdjdhddrdldddddlddvdrdddddrdd<dvdddmdmdddd<ddd`d`dKdKdddzdzdcddAdAdddddFddՐddYdYdYdYdKddddYdYd[dddddd[d[dhdhdidd[ddhdhdldldvddhddldldrdrdVddldndrdrdvdvdYddrddvdvd<d<dZddvdd<d<d\d\d_ddd>ddd-d-dcddzd@dddddddzddYdYdddgdgddd[d~dddMdMdddhd[dddddddldhdddjdjdhddrdldddddddvdrdddddrdd<dvdddmdmdddd<ddd`d`dUdUdzdzd.d.dddUdddzdddddzddYddddgdgddfd[dYdddMdMdYddhd[dddddddldhdddjdjdhddrdlddddddldddddddrdd<ddddmdmddddddd`d`dd d!de	jdffd6d6ddpdd_d\ddPd	dddadrdXdvdd<d]ddcdcdFdqdKdgdddiddvddVdddddd_dÐd(dd!de	jdffdĐdŐdƐdǐdŐdȐdɐdʐdŐdːd̐d͐dΐdϐdАdѐdҐdӐdԐdѐdՐd֐d֐dѐdאd֐dؐdِdڐd֐dؐdېdҐd֐dܐdېdҐd֐dݐdސdĐdɐdːdߐdŐdɐd̐ddΐddddאd֐ddѐdאdddѐdd֐dؐdѐdd֐dddd֐dddd֐dddҐd֐dddŐddddאdӐdddאd֐dddՐd֐ddېdddddddddddddڐddddddddddddΐddddՐddddd֐dd dddd dddd dddd dddddddddd	dd
dddd
dאddddddddddddڐddddddddڐddddڐddddddddddddddddՐd֐dddddd ddddd dddd!ddd"d!d#ddd!d$dd d!d$d%dd!d&ddd d'd(dddd)d*d+d,dddd$dd-dd$dd.dd'd/d0dd'd1d2dd'd3d4dd'dd5dd'd(d6dd'd7d8d9dd!de	jdffd:d;d<d=d>d?d@d@dAdBdCdDdEdBdCdFdGddHdIdJdKdHdHdLdMdNdFdJdOdNdIdLdPdQdIdJdϐdNdIdRdSdTdUdΐdVdWd@dXdBdFdYdZdBdDdFd[d\dIdId]d^d_dHdGd^dFdId`d^dadېdbd^dcdFddd^dadedRdfdgdhdXdidjdkdldmdndYdod\dFdIdpdqdIdIdrdsddIdpdtdudvdwddudxddydzd{d|ddzd}d~d?dhddldydddddd4dddYddddd4ddd1d4ddd1dddddddddddddddddddddxdddddd'dd.dddddddudddduddddd-dddddddddRdddddddxdddd-ddduddddddd,ddddddddddddd1ddd$dddddddd'dddddddd$dzdddddddd1dddddxdddd{ddÐddxddddĐdRddddŐdƐdƐdŐdǐ dd!de	jdffdȐdŐdŐdƐdŐdɐdƐdʐdʐdːdʐdʐd̐dʐd͐dƐdʐdʐdʐdΐdϐd͐d͐dАdאd͐dѐdАdҐd͐dѐddאd͐ddӐdԐd͐ddՐd֐dːdɐdȐdאdאd̐dʐdʐdʐdʐdؐdِdʐdʐd=dڐdېdʐdؐdڐdܐdݐdސdڐdߐdݐddڐdߐdݐdސdbdߐdݐdސdbdߐddՐdddʐdƐdאddd=ddddʐdbddd͐dddݐddddݐddddddddddddېdddddՐdddddddddddddddddddddddddddddd dddddddddddddddd	ddd
ddddddd@d
dАdd@d
dddd
dАddd
dАddd
dddd
dАddddddddddddddd
dddd
dddΐd
ddddddddddddddddddd ddddd
dddΐd
dd!dddddd"d#ddddddd
dddΐdd$ddΐd
dd%d&d'ddd d9i	Zeeef ed(< ed)k9re	je	je	jfD ]$Zd*D ]Zeed	ed+ 9q9qdS (-  aT  Provides optimal triton kernel parameters.

Aim
---

The usage of optimal triton kernel parameters may increase the
performance of operations several times. For example, for large tensor
shapes, the usage of a bsr tensor as mat1 argument in addmm-based
operations typically outperforms the corresponding operation with
strided-only inputs when the blocked representation of a tensor
provides a better alignement with memory access than what the strided
representation would provide.

Pre-computed kernel parameters
------------------------------

This script finds and stores the optimal triton kernel parameters for
a specific set of shape configurations. For instance, the set of shape
configurations of the bsr_dense_addmm kernel is defined as

  input, out: M x N strided tensor
  mat1: M x K bsr tensor with blocksize (BM, BK) and given sparsity
  mat2: M x N strided tensor
  dtype = float16, bfloat16, float32
  sparsity = 0.5
  M = 256, 512, ..., 16384
  K = M
  N = 256, 512, ..., 131072
  BM = 16, 32, ..., 128
  BK = BM
  alpha = 1
  beta = 0, 1
  GPUs: NVIDIA A100-SXM4-80GB

Approximations
--------------

It is practically infeasible to pre-compute optimal kernel parameter
for all possible shape configurations as well as for all existing
GPUs. Therefore, we'll assume that the pre-computed optimal parameters
are good enough approximations when
1) the used GPU is any of NVIDIA A100 Tensor Core GPUs,
2) the actual sparsity of mat1 is different from sparsity value 0.5.

If a particular shape configuration does not fall in the set of
pre-computed kernel parameters, or it does not match with the listed
approximations above, or the used GPU device is not a NVIDIA A100 GPU,
then a reference set of triton kernel parameters will be used when
executing operations. The reference kernel parameters are defined in
torch/sparse/_triton_ops.py, see bsr_dense_addmm_meta function, for
instance.

Computing optimal kernel parameters
-----------------------------------

If the approximations listed above are unacceptable, e.g. when one
seeks a maximal performance possible, the optimal kernel parameters
for a particular GPU can be computed by simply running this script in
the pytorch developement tree::

  cd /path/to/pytorch
  python setup.py develop
  python torch/sparse/_triton_ops_meta.py

This will compute the optimal kernel parameters for the GPU device
available in the host system for all shape configurations listed in
"Pre-computed kernel parameters" above. The results will be stored in
the database of kernel parameters. Currently, this database is defined
as this module (see "BEGIN GENERATED DATA" comment below) that will be
modified when the script is run. Create a pytorch PR with the
corresponding modifications in this file to make the computed optimal
kernel parameters available for other users as pre-computed kernel
parameters.

Moreover, one can compute the optimal kernel parameters for a specific
set of shape configurations and specific sparsity patterns. For that,
use tuning functions provided by this module:

  tune_bsr_dense_addmm(input, mat1, mat2, beta=1, alpha=1, out=None, verbose=False, store=False) -> meta

The tuning functions return a dictionary of optimal kernel parameters
that can be passed to the corresponding operation, e.g.

  bsr_dense_addmm(..., meta=meta)

Or, when store==True, the optimal kernel parameters will be stored in
the database of pre-computed kernel parameters in runtime so that all
addmm-based operations such as torch.addmm, torch.mm,
torch.nn.functional.linear will benefit from using the computed
optimal set of kernel parameters.

Note that running tune_bsr_dense_addmm can take several minutes. So,
use it wisely, e.g. by implementing persisten storage of optimized
kernel parameters. See the source code of get_meta and
tune_bsr_dense_addmm to learn how to register a custom set of optimal
kernel parameters for addmm-based operations.

get_metatune_bsr_dense_addmm    N)AnyDict)tqdm)make_tensor      ?Fc                 C   s>  |dkrt j }t| ||f}|dkrX|sXtd|dk	rDd}ndS t| ||f}|dkrddS i }d|kr|D ]&}dd t||D rqt|| ||< qtn||}|dk	r|||< i }	| D ]f\}}| dkrd}
t	t|
|}n(| d	krt	td
|}nt
d| d|kr"|  S ||	|< qd|kr:|	S dS )a  Return triton kernel meta parameters of the specified op and its inputs key.

    Parameters
    ----------
    op (str): The name of an operation that implementation uses meta parameters.
    key (tuple): A tuple of op input parameters, e.g. shapes, etc.
    device_name (optional, str): The name of a device for which op
      parameters are provided.
    version (optional, hashable): Specifies the version of parameters.
    exact (optional, bool): When True, the returned data (if
      available) corresponds exactly to the specified device_name and
      version information. Otherwise, if the corresponding data is not
      available but there exists a data set that is computed for a
      similar GPU device, then this data set will be returned.

    Returns
    -------
    result (dict): The requested mapping of parameter names and
      values, or None when no data is available. If the input `key`
      contains `"*"`, the result will be a dictionary of keys and
      mappings that match with the given `key`.
    NNVIDIA A100[^\d]NVIDIA A100-SXM4-80GB*c                 S   s$   g | ]\}}|d kr||krdqS )r   N ).0Zk1Zk2r   r   O/var/www/html/venv/lib/python3.8/site-packages/torch/sparse/_triton_ops_meta.py
<listcomp>   s       zget_meta.<locals>.<listcomp>
scatter_mm)
GROUP_SIZESPLIT_NTILE_MTILE_N
num_stages	num_warpsbsr_dense_addmm)GROUP_SIZE_ROWr   r   r   znames for op=)torchcudaget_device_name_operation_device_version_datagetrematchzipitemsdictNotImplementedError)opkeydevice_nameversionexactop_dataZmatching_dataop_keyvaluesZmatching_metanamesmetar   r   r   r   q   sD    





c                 C   sT   | ||ft kr>t | ||f ||kr*dS |t | ||f |< n||it | ||f< dS )zUpdate the db of op parameters.N)r   r   )r$   r&   r'   r%   valuer   r   r   update   s
    r/   c               	   C   s6  t t} t| }| }|  d}||}|d}|dksJ|dkr^t|  d dS dd }|d|t	|  }||d }g }	t
t|dD ]^}
|	d	t|
d
d d  t|
 }t
|D ] }|	d| d||  d q|	d q|d|	 d | }||kr2t| d}|| |  dS )z6Store the current runtime db state to the module file.z# BEGIN GENERATED DATA
z    # END GENERATED DATA
zR cannot be updated: BEGIN/END GENERATED DATA comment blocks appear to be corruptedNc                 S   s&   | \}}}t dd |D }|||fS )Nc                 s   s&   | ]}t |tjrt|n|V  qd S N)
isinstancer   dtypestr)r   itemr   r   r   	<genexpr>   s    z)dump.<locals>.sort_key.<locals>.<genexpr>)tuple)r%   r$   r&   r'   r   r   r   sort_key   s
    
zdump.<locals>.sort_key)r%   z    '"z: {z        z: ,z    },
w)inspectgetfiledumpopenreadclosefindwarningswarnlensortedr   appendreprreplacejoinwrite)Zcurrent_filefZcurrent_contentZbegin_data_strZbegin_data_indexZend_data_indexr8   Zpart1Zpart2Z	data_partr*   r)   r%   Znew_contentr   r   r   r@      s6    





r@      c           '         s   dd }dd }|dkrt  }tt| |d }	t|}
g }tj|	ft|
  D ]0}ttt	|}|dkrR||krR|
||f qR|  z| |}W nL tk
r } z.|rdt|krtd	|d
| d d}W 5 d}~X Y nX |dk	r||||< |}z| |}W n tk
r } zr|dkrZ|rDtd|d
| d i dd| f W Y 8S |rdt|krtd|d
| d |}|}W 5 d}~X Y nX |dkr|rtd |}||}|  ||< tt|d| dd}t|D ],\}\}}|d | }t|
|D ]F\}}|| }|dkr4q|||||}||krR q|||< q||}||krtqz| |}W nd tk
r } zDt|||< |rdt|krtd|d
| d W Y qW 5 d}~X Y nX |||< | k r| |}| j|d 7  _ qq fdd| D }||kr@|nt|}|| }|||}d |  d } | dk r|rtd| d t| ||||||dS g }!|D ]}|| }g }"t| |d D ]}|dkrڐq|||||}||kr |"
d q| }|||< ||}||}|dks8t|trF|"
d q|  d d }#|"
|# q|!
t|"|"|f qd|dg}$t|!ddD ]j\}}"}d d!d" |"d| D }%d d#d" |"|d D }&|$
| d$||  d%|% d&|& d' qd(|$}$||  |$fS qdS ))ag  Find a dict of parameters that minimizes the target function using
    the initial dict of parameters and a step function that progresses
    a specified parameter in a dict of parameters.

    Parameters
    ----------
    target_func (callable): a functional with the signature
      ``target_func(parameters: dict) -> float``
    initial_parameters (dict): a set of parameters used as an initial
      value to the minimization process.
    reference_parameters (dict): a set of parameters used as an
      reference value with respect to which the speed up is computed.
    step_func (callable): a functional with the signature
      ``step_func(parameter_name:str, parameter_value:int, direction:int, parameters:dict) -> int``
      that increments or decrements (when ``direction`` is positive or
      negative, respectively) the parameter with given name and value.
      When return value is equal to ``parameter_value``, it means that
      no step along the given direction can be made.

    Returns
    -------
    parameters (dict): a set of parameters that minimizes the target
      function.
    speedup_incr (float): a speedup change given in percentage.
    timing (float): the value of the target function at the parameters.
    sensitivity_message (str): a message containing sensitivity.
      information of parameters around the target function minimizer.
    c                    s   t  fddt D S )Nc                 3   s   | ]} | V  qd S r1   r   r   k
parametersr   r   r6     s     z+minimize.<locals>.to_key.<locals>.<genexpr>)r7   rH   rR   r   rR   r   to_key  s    zminimize.<locals>.to_keyc                 S   s   t tt|| S r1   )r"   r    rH   )r%   rS   r   r   r   from_key  s    zminimize.<locals>.from_keyN   r   zout of resourcezreference_parameters=z lead to failure: .zinitial_parameters=z. Optimization failed!r0   z;. Using reference parameters instead of initial parameters.z9Using initial parameters instead of reference parameters.z	Tuning...K   )totaldescdisableZncolsznext_parameters=z. Skipping.c                    s2   h | ]*\}}t |trtd |   dk r|qS )rV   gMbP?)r2   floatabs)r   rQ   vZminimal_targetr   r   	<setcomp>o  s   
 zminimize.<locals>.<setcomp>d   zspeedup_incr=zQ is negative. Rerunning minimize with reference parameters as initial parameters.)max_stepverbose
all_valuesztiming0=.3fT)reverse|c                 S   s   g | ]}|d qS .1fr   r   rel_diffr   r   r   r     s     zminimize.<locals>.<listcomp>c                 S   s   g | ]}|d qS rh   r   rj   r   r   r   r     s     =z (z...z %)z, )r"   listrangerH   	itertoolsproductrG   summapr]   rI   sort	Exceptionr4   printr   	enumerater/   copyr    rY   r!   minminimizer   r2   maxrL   )'Ztarget_funcZinitial_parametersZreference_parametersZ	step_funcrb   rc   rd   rT   rU   Z
directionsr,   Zall_directionsZd_tupledistZreference_targetmsgrS   Zinitial_targetZinitial_keyZpbari_Znext_parametersname	directionr.   
next_valueZnext_keyZnext_targetZminimizer_keysZminimizer_keyZminimizer_targetZspeedup_incrZsensitivityZ	rel_diffsrk   sensitivity_messageZ
left_diffsZright_diffsr   r_   r   ry      s   &











	





ry   c                 C   sb  |dkr|dkst d||d  dks,t ||d  dks@t | ||d  ||d  ft| dkd  }ttj|d| ||d}td| | | |d |d   }	|  }
|
jd }||	krt|d ||	  }d| |
| < nF||	k r6|dk  }t|jd d |	|  }d| || < tj	||d dd}tj	||d d	d}|S )
Ng      ?g        z*sparsity should be a value between 0 and 1r   rV   r3   device)dimr0   )
AssertionErrorintr   Z	bernoullifullflattenZnonzeroshapeZrandpermZrepeat_interleave)BMN	blocksizesparsityr3   r   r   AZexpected_nnzZnonzero_indicesZ
actual_nnzZselected_nonzerosZzero_indicesZselected_zerosr   r   r   create_blocked_tensor  s2    *$

r   r   c	              	      s  dd l ddlm m | ||||f}	d|f}
tj tddd|d ddd}td|	|
dd}|d krtd	|	dd
fdd}|d kr|}n|sd S t	d t
d| |||f||||f}t|||d}||f fdd	}| ||||ffdd	}t||||\}}}||k	r:|kr:|s:d S tdd|dd|dd |dk rhd S tj td|
|	tfddtD  d S )Nr   )bsr_scatter_mmbsr_scatter_mm_indices_datarV      )r   r   r   r   r   r   r   T)r&   r'   r(   r   r   r   c                    s@    fddi|  fdd}j j|dddd}|S )	NZindices_formatZbsr_strided_mm_compressedc                      s    dS )N)indices_datar   r   )bsrr   denser   r   r   	test_func  s    z5optimize_scatter_mm.<locals>.bench.<locals>.test_func  ra   FZwarmuprepZ
fast_flushZtestingZdo_bench)r-   r   r   r   Zms_min)r   r   triton)r   r   r   r   bench  s         z"optimize_scatter_mm.<locals>.benchc	                    sf  | dk}	t ddddddd|  }
t ||d  |||d  d| }t ddddddd|  }|	r|d	krt|||  n||t|  }n|||  }|
d k	rt||
}|d k	rt||}| dkr|| d	kr|S | ||||||ftjd
ddddddftjd
ddddddftjd
ddddddftjd
ddddddftjd
ddddddfhkrbtd d k	rb|S |S )N>   r   r   r   r   rV   r   )r   r   r   r   r   r   r   r   )r   r   r   rO   r   r          @         r	   )	r"   r   r]   rz   rx   r   float32r   r   )r   r.   r   r-   mnrQ   bmbkis_log	min_value	max_value
value_stepr   )r&   r3   r   r   step_meta_parameter  sf         
  
     

z0optimize_scatter_mm.<locals>.step_meta_parameterzmeta=z	 speedup=ri   z
 % timing=re    msc                 3   s   | ]} | V  qd S r1   r   rP   r-   r   r   r6   2  s     z&optimize_scatter_mm.<locals>.<genexpr>)r   torch.sparse._triton_opsr   r   r   r   r   r"   r   manual_seedr   to_sparse_bsrr   ry   ru   r/   r7   rH   )r   rQ   r   r   r   r3   r   r   forcer%   r'   reference_metainitial_metar   r   r   r   speeduptimingr   r   )r   r   r&   r3   r-   r   r   optimize_scatter_mm  s    

	    
      (    

    r   rV   )betaalphaoutstorerc   r   c             	      s  ddl ddlm |jd }	| }
| }| d }|j||d  \}}|
j|d |d  \}}tdddt|	| dd	}t	d|
 | | ||   d}|j}d||f}|||	|| dk dk|dkf}td
||dd}|dkrd}td
|d|dfdd}|dkr(|}n|s$|S d}| ||||f fdd	}||	|||fdd}t||||d|d\}}}|rtd| d|dd|dd |r|r|kr||k	stj }td
|||tfddtD  S )zTune bsr_dense_addmm kernel parameters against the given inputs.

    When store is True, the tuning results will be stored in the
    database of kernel parameters.
    r   Nr   r0   rV   rO         )r   r   r   r   r   T)r'   r(   Fr   c                    s.    fdd}j j|ddddS )Nc                	      s    dS )N)r   r   r-   r   r   r   )r   r   r   r   r   inputr-   r   r   r   r   q  s          z6tune_bsr_dense_addmm.<locals>.bench.<locals>.test_funcr   ra   Fr   r   )r-   r   r   r   r   r   r   )r   r   r   )r   r   r   r   r-   r   r   r   p  s    z#tune_bsr_dense_addmm.<locals>.benchc	                 S   s   | dk}	t ddddd|  }
t t|| dd| }t ddddd|  }|	rt|dkrb|||  n||t|  }n|||  }|
d k	rt||
}|d k	rt||}| dkr|| dkr|S |S )N>   r   r   rV   )r   r   r   r   )r   rO   r   r   )r"   rz   r   r]   rx   )r   r.   r   r-   r   r   KBMBKr   r   r   r   r   r   r   r   r   y  s"    

z1tune_bsr_dense_addmm.<locals>.step_meta_parameter)rb   rc   z-> z
, speedup=ri   z %, timing=re   r   c                 3   s   | ]} | V  qd S r1   r   rP   r   r   r   r6     s     z'tune_bsr_dense_addmm.<locals>.<genexpr>)r   r   r   r   r+   crow_indicesr   r"   rz   roundZ_nnzr3   r   ry   ru   r   r   r   r/   r7   rH   )r   r   r   r   r   r   r   rc   r   r   r+   r   Z
batch_ndimr   r   r   r   r   r   r3   r'   r%   r   Zmay_skip_updater   r   r   r   r   r&   r   )r   r   r-   r   r   r   6  sx    
   "
 
   
	 
c              
   C   sh   t d td| |||f|	||||f}t||||d}t| |||d}t|||||d|
|d d S )Nr   r   T)r   r   r   r   rc   )r   r   r   r   r   r   )r   rQ   r   r   r   r   r   r3   r   r   r   rc   r   r   r   r   r   r   optimize_bsr_dense_addmm  s0    
      r   r   Tc                    s  dd l }dddddddd	d
dg
}dd ddg| D }dd |d d | D }ddddg}dddgd d }	|	D ]0}
td||
f z||||D ]\\}}}\}}||kr||kr|| dkr|| dksqdkrt|||||||
|d qdkrNtd|||||ff dD ](\}}t|||||||||
||d  q"qtqW qr tk
rx   Y  qY qr tk
r } zt   W 5 d }~X Y qrX qrt  d S )!Nr   r   r                 @           c                 S   s   g | ]}|d krd| qS )r   r   r   r   szr   r   r   r     s      zmain.<locals>.<listcomp>r   r   c                 S   s   g | ]}||fqS r   r   r   r   r   r   r     s     )r   r   )r   r   )r   r   )r   r   r   gffffff?g333333?rV   zop, dtype, sparsity=r   )r   r   r3   r   zM, K, N, (BM, BK)=))rV   rV   )rV   r   )r   r   r   r   r3   rc   )ro   ru   rp   r   r   r#   KeyboardInterruptrt   r@   r   r   r   r   r7   rH   nextrv   r]   r/   )r$   r   r3   rc   ro   Z	sizes_lstZ
sizes3_lstZ
shapes_lstZblocksize_lstZsparsity_lstr   r   r   r   r   r   r   r   r|   r   )r-   r$   Z	sparsity1r   main  sf    
  (       
Xr   r   r
   )rO   rV   rV   rO   )rV   rV   rV   r   )rV   rV   r   r   )rV   rV   rV      )rO   rV   rV   r   )rV   rO   rV   r   )rV   rO   rO   r   )rV   rV   rO   r   )rO   rO   rV   rO   )rV   r   rO   r   )rV   rO   rV   rO   )rV   r   rV   r   )rV   r   rV   rV   )rV   rV   rO   rO   )rV   rV   rV   rO   )rV   rV   rV   rV   )rO   rO   rV   r   )rV   rV   rO   r   )rV   rO   rV   rV   )rV   rO   rV   r   )rV   r   r   r   )rV   r   rV   r   )rO   r   rV   r   )rV   r   rV   rO   )rV   r   rO   rO   )rV   rO   rO   rO   )rV   rO   rO   r   )r   r   rV   r   )rV   rV   r   r   )rO   rV   rV   r   )r   rV   rO   r   )rV   rV   rO   rV   )rO   rV   rO   rO   )rO   rV   r   r   )rO   rO   rO   r   )rO   rO   rV   r   )rV   rV   r   r   )r   rV   rV   rV   )rO   r   rV   rO   )r   r   rO   rO   )r   rO   rV   r   )rO   rO   r   r   )rV   r   rO   rV   )rV   rV   rV   r   )rO   rV   rV   r   )rV   rV   rO   r   )rO   rV   r   rO   )rO   rV   rO   r   )rV   r      r   )rO   r   r   rO   )rV   r      r   )r   r   r   rO   )rV   r   r   rO   )rV   r   r   rO   )rO   r   r   r   )rV   r   r   r   )rV   r   r   rO   )rV   r   r   r   )rV   r   r   rO   )rV   r   rV   r   )r   r   r   rO   )rV   r   r   r   )rO   r   r   rO   )rO   r   rV   r   )rV   r   r   rO   )rV   r   rV   r   )rO   r   r   r   )rV   r   rV   r   )rO   r   r   rV   )r   r   rV   r   )rV   r   r   r   )rV   r   rV   r   )r   r   r   rV   )rO   r   rV   rO   )rV   r   r   r   )rO   r   rV   r   )r   r   r   r   )rO   r   rV   rO   )rO   r   r   rO   )rO   r   rV   r   )rV   r   r   r   )r   r   rV   rO   )r   r   r   rO   )rV   r   rV   rO   )rV   r   r   r   )r   r   r   rV   )rO   r   r   rO   )rO   r   r   r   )rV   r   r   r   )r   rO   rO   r   )rV   r   r   rV   )r   r   r   rO   )rV   r   r   r   )rV   r   r   r   )r   r   r   r   )rV   r   rO   r   )rV   r   r   r   )r   r   r   rO   )rV   r   r   rO   )rO   r   r   rO   )rV   r   rO   r   )rO   r   r   rV   )rV   r   r   rV   )r   r   r   r   )rO   r   rO   r   )rV   r   rO   r   )rV   r   r   rO   )r   r   r   rO   )r   r   r   r   )rO   r   r   r   )rV   r   rO   r   )rO   r   r   r   )r   r   r   rO   )r   r   rV   rO   )	   r   rV   r   )r   r   rV   r   )   r   rV   r   )rV   r   rV   r   )r   r   r   rO   )r   r   r   rO   )rV   r   r   rO   )rO   r   rV   r   )r   r   rV   r   )rV   r   rO   r   )rO   r   r   rO   )r   r   r   rO   )rV   r   rV   r   )r   r   rV   r   )r   r   rV   r   )rV   r   r   rO   )rO   r   r   rO   )rV   r   rV   r   )r   r   rV   r   )rV   r   r   rO   )rV   r   r   rO   )rV   r   rV   r   )r   r   rV   r   )rV   r   r   rO   )r   r   r   rO   )rO   r   r   r   )rV   r   r   rO   )rV   r   r   r   )r   r   r   r   )r   r   r   rO   )r   r   r   r   )r   r   r   r   )rO   r   r   r   )rV   r   rV   r   )r   r   r   r   )r   r   rV   r   )r   r   r   rO   )r   r   rV   r   )r   r   r   r   )rV   r   rV   rO   )r   r   r   rO   )rO   r   r   r   )rV   r   rV   rO   )r   r   rV   rO   )rV   r   rV   rO   )r   r   rV   r   )r   r   r   r   )rV   r   rV   rV   )r   r   r   r   )rO   r   r   r   )r   r   r   r   )rV   r   r   rO   )r   r   r   r   )r   r   r   r   )r   rO   rO   r   )rO   rO   rO   r   )r   r   r   rO   )rV   r   r   rV   )r   r   r   r   )rO   r   r   r   )rO   r   rO   r   )rO   r   r   r   )rO   r   r   r   )rO   r   rO   r   )r   r   rO   r   )r   r   r   rO   )rO   r   r   rO   )r   r   rO   r   )r   r   r   rO   )r   r   rV   r   )r   r   rO   r   )r   r   r   rO   )r   r   r   rO   )r   r   r   r   )r   r   rO   r   )rV   r   r   rO   )r   r   rO   r   )rO   r   rO   r   )r   r   rV   r   )rO   r   r   r   )r   r   rV   r   )r   r   rV   r   )rV   r   r   rV   )r   r   rO   r   )rO   r   r   r   )r   r   rV   r   )r   r   rV   r   )rV   r   r   rV   )r   r   rO   r   )r   r   r   r   )r   r   rV   r   )r   r   rV   r   )rV   r   r   rV   )r   rO   r   r   )rV   r   r   rO   )rO   r   r   r   )rV   r   r   r   )rO   rO   r   r   )r   rO   r   r   )r   r   r   rO   )r   r   r   rO   )r   r   r   rO   )rV   r   r   r   )r   r   r   r   )r   r   rV   r   )r   r   rV   r   )rO   r   r   r   )rV   r   r   r   )rO   r   rV   rO   )rV   r   rV   r   )rO   r   r   r   )r   r   rV   r   )rV   r   r   r   )r   r   r   r   )rV   r   rV   rO   )r   r   r   r   )rO   r   r   r   )rV   r   r   r   )rV   r   r   r   )rV   r   rV   r   )r   r   rO   r   )rV   r   r   r   )rO   r   rO   r   )rV   r   r   r   )rO   r   rO   r   )rV   r   r   rV   )rV   r   rO   r   )r   r   r   r   )r   r   r   rO   )r   r   r   r   )r   r   r   rO   )r   r   r   r   )r   r   r   r   )r   r   r   rO   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   rV   r   )rO   r   rO   r   )r   r   r   r   )r   r   r   r   )   r   r   rO   )r   r   r   r   )r   r   r   r   )rO   r   r   r   )r   rO   r   r   )r   rO   r   r   )rV   r   rV   r   )rV   r   rV   r   )r   r   r   r   )rO   r   r   r   )r   r   r   r   )rV   r   rV   rO   )r   r   rV   r   )r   r   r   r   )rV   r   rV   r   )rV   r   r   rV   )r   r   rV   r   )r   r   r   r   )rV   r   rV   rO   )r   r   r   rO   )r   r   r   rO   )rO   r   rV   r   )r   r   r   r   )rV   r   rO   r   )rO   r   rV   rO   )r   r   r   r   )r   r   r   r   )rV   r   r   r   )r   r   r   rO   )rO   r   r   rO   )r   r   rO   r   )r   r   r   r   )r   r   r   rO   )rV   r   r   rO   )r   r   rV   r   )rO   r   rV   r   )r   r   rO   r   )r   r   r   r   )rO   r   rV   r   )r   r   r   r   )r   r   r   rO   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )rO   r   rV   r   )r   r   rV   r   )rV   rO   r   rO   )r   r   rV   r   )rV   rO   r   r   )r   r   rV   rO   )rV   rO   r   r   )r   r   rV   r   )rV   r   rO   rO   )rO   r   r   rV   )rV   r   rV   rO   )rO   r   r   rO   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   rO   )rV   r   r   r   )r   r   r   r   )rV   r   rV   r   )r   r   r   r   )r   r   r   r   )r   r   rO   r   )r   r   r   r   )r   r   rO   r   )r   r   r   r   )r   r   rO   r   )rO   rO   r   r   )rO   rO   r   rO   )rV   rO   r   r   )r   rO   r   rO   )rV   r   r   rO   )r   rO   r   r   )r   r   r   rO   )r   r   r   r   )rO   r   r   rO   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   rV   r   r   )rV   rV   r   r   )r   rO   r   r   )r   r   rV   r   )r   rO   r   rV   )rV   rO   r   rO   )r   r   r   r   )r   r   rV   rO   )r   r   rV   rO   )rO   r   rV   rO   )r   r   rV   rO   )rO   r   r   r   )r   r   r   r   )rO   r   rV   rO   )r   r   r   r   )r   r   rV   rO   )r   r   r   r   )r   r   r   r   )rO   r   rV   rO   )r   r   r   r   )r   r   rV   rO   )rO   r   r   r   )r   r   r   r   )r   r   r   rV   )r   r   r   rO   )rO   r   r   r   )r   r   r   r   )r   rV   r   r   )r   r   r   rO   )r   r   r   r   )r   r   rO   r   )rO   r   r   r   )rO   r   r   r   )r   r   rO   r   )r   r   r   r   )rO   r   r   r   )r   r   rO   r   )rO   r   r   r   )r   r   rO   r   )rO   r   r   r   )r   r   r   r   )r   r   r   r   )rO   r   r   r   )rO   rO   r   r   )r   rO   r   rO   )rO   rO   r   r   )rO   rO   r   r   )rV   r   r   r   )rV   r   r   r   )rO   r   rO   r   )rO   r   rO   r   )rV   r   rO   r   )rV   r   r   r   )rV   r   r   rO   )rV   r   rO   r   )rV   r   r   r   )rV   r   r   r   )rV   r   rO   r   (  r   r   r   r   r   FFFr   r   r   r   r   FFTr   r   r   r   r   FTFr   r   r   r   r   FTTr   r   r   r   r   TFFr   r   r   r   r   TFTr   r   r   r   r   FFFr   r   r   r   r   FFTr   r   r   r   r   FTFr   r   r   r   r   FTTr   r   r   r   r   TFFr   r   r   r   r   TFTr   r   r   r   r   FFFr   r   r   r   r   FFTr   r   r   r   r   FTFr   r   r   r   r   FTTr   r   r   r   r   TFFr   r   r   r   r   TFTr   r   r   r   r   FFFr   r   r   r   r   FFTr   r   r   r   r   FTFr   r   r   r   r   FTTr   r   r   r   r   TFFr   r   r   r   r   TFTr   r   r   r   r   FFFr   r   r   r   r   FFTr   r   r   r   r   FTFr   r   r   r   r   FTTr   r   r   r   r   TFFr   r   r   r   r   TFTr   r   r   r   r   FFFr   r   r   r   r   FFTr   r   r   r   r   FTFr   r   r   r   r   FTTr   r   r   r   r   TFFr   r   r   r   r   TFTr   r   r   r   r   FFFr   r   r   r   r   FFTr   r   r   r   r   FTFr   r   r   r   r   FTTr   r   r   r   r   TFFr   r   r   r   r   TFTr   r   r   r   r   FFFr   r   r   r   r   FFTr   r   r   r   r   FTFr   r   r   r   r   FTTr   r   r   r   r   TFFr   r   r   r   r   TFTr   r   r   r   r   FFFr   r   r   r   r   FFTr   r   r   r   r   FTFr   r   r   r   r   FTTr   r   r   r   r   TFFr   r   r   r   r   TFTr   r   r   r   r   FFFr   r   r   r   r   FFTr   r   r   r   r   FTFr   r   r   r   r   FTTr   r   r   r   r   TFFr   r   r   r   r   TFTr   r   r   r   r   FFFr   r   r   r   r   FFTr   r   r   r   r   FTFr   r   r   r   r   FTTr   r   r   r   r   TFFr   r   r   r   r   TFTr   r   r   r   r   FFFr   r   r   r   r   FFTr   r   r   r   r   FTFr   r   r   r   r   FTTr   r   r   r   r   TFFr   r   r   r   r   TFTr   r   r   r   r   FFFr   r   r   r   r   FFTr   r   r   r   r   FTFr   r   r   r   r   FTTr   r   r   r   r   TFFr   r   r   r   r   TFTr   r   r   r   r   FFFr   r   r   r   r   FFTr   r   r   r   r   FTFr   r   r   r   r   FTTr   r   r   r   r   TFFr   r   r   r   r   TFTr   r   r   r   r   FFFr   r   r   r   r   FFTr   r   r   r   r   FTFr   r   r   r   r   FTTr   r   r   r   r   TFFr   r   r   r   r   TFTr   r   r   r   r   FFFr   r   r   r   r   FFTr   r   r   r   r   FTFr   r   r   r   r   FTTr   r   r   r   r   TFFr   r   r   r   r   TFTr   r   r   r   r   FFFr   r   r   r   r   FFTr   r   r   r   r   FTFr   r   r   r   r   FTTr   r   r   r   r   TFFr   r   r   r   r   TFTr   r   r   r   r   FFFr   r   r   r   r   FFTr   r   r   r   r   FTFr   r   r   r   r   FTTr   r   r   r   r   TFFr   r   r   r   r   TFTr   r   r   r   r   FFFr   r   r   r   r   FFTr   r   r   r   r   FTFr   r   r   r   r   FTTr   r   r   r   r   TFFr   r   r   r   r   TFTr   r   r   r   r   FFFr   r   r   r   r   FFTr   r   r   r   r   FTFr   r   r   r   r   FTTr   r   r   r   r   TFFr   r   r   r   r   TFTr   r   r   r   r   FFFr   r   r   r   r   FFTr   r   r   r   r   FTFr   r   r   r   r   FTTr   r   r   r   r   TFFr   r   r   r   r   TFTr   r   r   r   r   FFFr   r   r   r   r   FFTr   r   r   r   r   FTFr   r   r   r   r   FTTr   r   r   r   r   TFFr   r   r   r   r   TFTr   r   r   r   r   FFFr   r   r   r   r   FFTr   r   r   r   r   FTFr   r   r   r   r   FTTr   r   r   r   r   TFFr   r   r   r   r   TFTr   r   r   r   r   FFFr   r   r   r   r   FFTr   r   r   r   r   FTFr   r   r   r   r   FTTr   r   r   r   r   TFFr   r   r   r   r   TFTr   r   r   r   r   FFFr   r   r   r   r   FFTr   r   r   r   r   FTFr   r   r   r   r   FTTr   r   r   r   r   TFFr   r   r   r   r   TFTr   r   r   r   r   FFFr   r   r   r   r   FFTr   r   r   r   r   FTFr   r   r   r   r   FTTr   r   r   r   r   TFFr   r   r   r   r   TFTr   r   r   r   r   FFFr   r   r   r   r   FFTr   r   r   r   r   FTFr   r   r   r   r   FTTr   r   r   r   r   TFFr   r   r   r   r   TFTr   r   r   r   r   FFFr   r   r   r   r   FFTr   r   r   r   r   FTFr   r   r   r   r   FTTr   r   r   r   r   TFFr   r   r   r   r   TFTr   r   r   r   r   FFFr   r   r   r   r   FFTr   r   r   r   r   FTFr   r   r   r   r   FTTr   r   r   r   r   TFFr   r   r   r   r   TFTr   r   r   r   r   FFFr   r   r   r   r   FFTr   r   r   r   r   FTFr   r   r   r   r   FTTr   r   r   r   r   TFFr   r   r   r   r   TFTr   r   r   r   r   FFFr   r   r   r   r   FFTr   r   r   r   r   FTFr   r   r   r   r   FTTr   r   r   r   r   TFFr   r   r   r   r   TFTr   r   r   r   r   FFFr   r   r   r   r   FFTr   r   r   r   r   FTFr   r   r   r   r   FTTr   r   r   r   r   TFFr   r   r   r   r   TFTr   r   r   r   r   FFFr   r   r   r   r   FFTr   r   r   r   r   FTFr   r   r   r   r   FTTr   r   r   r   r   TFFr   r   r   r   r   TFTr   r   r   r   r   FFFr   r   r   r   r   FFTr   r   r   r   r   FTFr   r   r   r   r   FTTr   r   r   r   r   TFFr   r   r   r   r   TFTr   r   r   r   r   FFFr   r   r   r   r   FFTr   r   r   r   r   FTFr   r   r   r   r   FTTr   r   r   r   r   TFFr   r   r   r   r   TFTr   r   r   r   r   FFFr   r   r   r   r   FFTr   r   r   r   r   FTFr   r   r   r   r   FTTr   r   r   r   r   TFFr   r   r   r   r   TFT   r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFT  r.  r   r   r   FTTr.  r.  r   r   r   TFTr.  r.  r   r   r   FTTr.  r.  r   r   r   TFTr.  r.  r   r   r   FTTr.  r.  r   r   r   TFTr.  r.  r   r   r   FTTr.  r.  r   r   r   TFTr.  r.  r   r   r   FTTr.  r.  r   r   r   TFTr.  r.  r   r   r   FTTr.  r.  r   r   r   TFTr.  r.  r   r   r   FTTr.  r.  r   r   r   TFTr.  r.  r   r   r   FTTr.  r.  r   r   r   TFTr.  r.  r   r   r   FTTr.  r.  r   r   r   TFTr.  r.  r   r   r   FTTr.  r.  r   r   r   TFTr.  r.  r   r   r   FTTr.  r.  r   r   r   TFTr.  r.  r   r   r   FTTr.  r.  r   r   r   TFTr.  r.  r   r   r   FTTr.  r.  r   r   r   TFTr.  r.  r   r   r   FTTr.  r.  r   r   r   TFTr.  r.  r   r   r   FTTr.  r.  r   r   r   TFTr.  r.  r   r   r   FTTr.  r.  r   r   r   TFTr.  r.  r   r   r   FTTr.  r.  r   r   r   TFTr.  r.  r   r   r   FTTr.  r.  r   r   r   TFTr.  r.  r   r   r   FTTr.  r.  r   r   r   TFTr.  r.  r   r   r   FTTr.  r.  r   r   r   TFTr.  r.  r   r   r   FTTr.  r.  r   r   r   TFTr.  r.  r   r   r   FTTr.  r.  r   r   r   TFTr.  r.  r   r   r   FTTr.  r.  r   r   r   TFTr.  r.  r   r   r   FTTr.  r.  r   r   r   TFTr.  r.  r   r   r   FTTr.  r.  r   r   r   TFTr.  r.  r   r   r   FTTr.  r.  r   r   r   TFTr.  r.  r   r   r   FTTr.  r.  r   r   r   TFTr.  r.  r   r   r   FTTr.  r.  r   r   r   TFTr.  r.  r   r   r   FTTr.  r.  r   r   r   TFTr.  r.  r   r   r   FTTr.  r.  r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFT   r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFT   r\  r   r   r   FTTr\  r\  r   r   r   TFTr\  r\  r   r   r   FTTr\  r\  r   r   r   TFTr\  r\  r   r   r   FTTr\  r\  r   r   r   TFTr\  r\  r   r   r   FTTr\  r\  r   r   r   TFTr\  r\  r   r   r   FTTr\  r\  r   r   r   TFTr\  r\  r   r   r   FTTr\  r\  r   r   r   TFTr\  r\  r   r   r   FTTr\  r\  r   r   r   TFTr\  r\  r   r   r   FTTr\  r\  r   r   r   TFTr\  r\  r   r   r   FTTr\  r\  r   r   r   TFTr\  r\  r   r   r   FTTr\  r\  r   r   r   TFTr\  r\  r   r   r   FTTr\  r\  r   r   r   TFTr\  r\  r   r   r   FTTr\  r\  r   r   r   TFTr\  r\  r   r   r   FTTr\  r\  r   r   r   TFTr\  r\  r   r   r   FTTr\  r\  r   r   r   TFTr\  r\  r   r   r   FTTr\  r\  r   r   r   TFTr\  r\  r   r   r   FTTr\  r\  r   r   r   TFTr\  r\  r   r   r   FTTr\  r\  r   r   r   TFTr\  r\  r   r   r   FTTr\  r\  r   r   r   TFTr\  r\  r   r   r   FTTr\  r\  r   r   r   TFTr\  r\  r   r   r   FTTr\  r\  r   r   r   TFTr\  r\  r   r   r   FTTr\  r\  r   r   r   TFTr\  r\  r   r   r   FTTr\  r\  r   r   r   TFTr\  r\  r   r   r   FTTr\  r\  r   r   r   TFTr\  r\  r   r   r   FTTr\  r\  r   r   r   TFTr\  r\  r   r   r   FTTr\  r\  r   r   r   TFTr\  r\  r   r   r   FTTr\  r\  r   r   r   TFTr\  r\  r   r   r   FTTr\  r\  r   r   r   TFTr\  r\  r   r   r   FTTr\  r\  r   r   r   TFTr\  r\  r   r   r   FTTr\  r\  r   r   r   TFTr\  r\  r   r   r   FTTr\  r\  r   r   r   TFTr\  r\  r   r   r   FTTr\  r\  r   r   r   TFTr\  r\  r   r   r   FTTr\  r\  r   r   r   TFTr\  r\  r   r   r   FTTr\  r\  r   r   r   TFTr\  r\  r   r   r   FTTr\  r\  r   r   r   TFTr\  r\  r   r   r   FTTr\  r\  r   r   r   TFTr\  r\  r   r   r   FTTr\  r\  r   r   r   TFTr\  r\  r   r   r   FTTr\  r\  r   r   r   TFTr\  r\  r   r   r   FTTr\  r\  r   r   r   TFTr\  r\  r   r   r   FTTr\  r\  r   r   r   TFTr\  r\  r   r   r   FTTr\  r\  r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFT   r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFT   r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr  r  r   r   r   FTTr  r  r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTr   r   r   r   r   FTTr   r   r   r   r   TFTgQ?)r   r   r   r   )r   r   rV   r   )r   r   r   r   )r   r   rO   r   )()r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r.  r.  r   r   r   FTT)r.  r.  r   r   r   TFT)r.  r.  r   r   r   FTT)r.  r.  r   r   r   TFT)r.  r.  r   r   r   FTT)r.  r.  r   r   r   TFT)r.  r.  r   r   r   FTT)r.  r.  r   r   r   TFT)r.  r.  r   r   r   FTT)r.  r.  r   r   r   TFT)r.  r.  r   r   r   FTT)r.  r.  r   r   r   TFT)r.  r.  r   r   r   FTT)r.  r.  r   r   r   TFT)r.  r.  r   r   r   FTT)r.  r.  r   r   r   TFT)r.  r.  r   r   r   FTT)r.  r.  r   r   r   TFT)r.  r.  r   r   r   FTT)r.  r.  r   r   r   TFT)r   rV   r   r   )r   rO   rV   r   )rV   rO   rV   r   )r   r   rV   rO   )rV   r   rV   r   )rV   rV   r   rO   )r   rV   rV   r   )rV   rO   rO   rV   )rO   r   r   rV   )rV   r   r   rO   )r   r   r   rO   )r   r   r   r   )rO   r   r   rO   )r   r   r   rV   )rV   r   r   r   )r   r   rO   r   )r   r   r   rV   )r   r   rO   r   )r   r   r   rO   )r   r   rO   r   )r   r   rO   r   )r   r   r   r   )r   r   r   rO   )r   r   rO   r   )r   r   r   rO   )r   r   rV   r   )rO   r   r   rO   )r   r   rV   r   )r   r   r   rV   )rO   r   r   rO   )r   r   r   rO   )r   r   r   rO   )r   r   r   r   )rO   r   rV   r   )rV   r   r   rV   )rO   r   r   rV   )r   r   r   rV   )r   r   r   rV   )r   r   rO   r   )r   r   rO   r   )r   r   rO   r   )r   r   rO   r   )r   r   rO   r   )r   rO   r   rO   )rO   r   rV   r   )r   r   rV   rO   )r   r   r   r   )rO   r   rO   rO   )rO   r   r   rO   )r   r   rV   r   )rO   r   r   r   )r   r   rO   r   )r   r   rO   r   )r   r   r   rO   )r   r   r   rO   )r   r   rV   r   )r   r   rV   r   )rV   r   r   rV   )r   r   rV   r   )
   r   rV   r   )r   r   r   rO   )   r   rV   r   )r   r   r   rO   )r   r   r   r   )r   r   r   rO   )r   r   r   r   )r   r   rV   rO   )r   r   rV   r   )r   r   rV   r   )r  r   r   r   )r   r   r   r   )r   r   r   rO   )rO   r   r   rV   )r   rO   rO   r   )rO   r   r   rO   )r   r   rV   r   )r   r   r   rO   )r   r   r   rO   )r   r   r   r   )r   r   r   r   )r   rO   r   r   )rO   r   r   rO   )r   r   r   r   )r   rO   r   r   )r   rO   r   r   )r   r   rV   r   )r   r   rV   r   )r   r   r   rV   )r   r   rV   r   )r   r   r   rV   )rO   r   rO   rO   )r   r   r   rO   )rO   r   rO   r   )r   r   rV   r   )r   r   rV   r   )rO   r   r   r   )rO   r   r   r   )r   rO   rV   r   )rV   rV   r   rV   )r   rO   rV   r   )r   r   rV   rO   )r   r   r   rO   )r   rO   r   r   )r   r   rV   rO   )rO   r   rV   rV   )rO   r   rV   rV   )r   r   r   rV   )r   r   r   rV   )rO   r   rV   rV   )rO   rO   r   rO   )r   r   rO   r   )rO   r   rO   r   )r   r   rV   r   )rV   r   r   r   )rV   r   rO   r   )rO   r   r   rO   )rV   r   r   r   )r   r   rO   r   )rV   r   r   r   )rV   r   r   r   )r   r   rO   r   )r   rO   rV   rO   )rO   r   rV   rO   )rV   r   rV   rV   )rV   r   rV   rV   (>  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r	  r
  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r!  r"  r#  r$  r%  r&  r'  r(  r)  r*  r+  r,  r-  r.  r/  r0  r1  r2  r3  r4  r5  r6  r7  r8  r9  r:  r;  r<  r=  r>  r?  r@  rA  rB  rC  rD  rE  rF  rG  rH  rI  rJ  rK  rL  rM  rN  rO  rP  rQ  rR  rS  rT  rU  rV  rW  rX  rY  rZ  r[  r\  r]  r^  r_  r`  ra  rb  rc  rd  re  rf  rg  rh  ri  rj  rk  rl  rm  rn  ro  rp  rq  rr  rs  rt  ru  rv  rw  rx  ry  rz  r{  r|  r}  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r	  r
  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r!  r"  r#  r$  r%  r&  r'  r(  r)  r*  r+  r,  r-  r/  r0  r1  r2  r3  r4  r5  r6  r7  r8  r9  r:  r;  r<  r=  r>  r?  r@  rA  rB  rC  rD  rE  rF  rG  rH  rI  rJ  rK  rL  rM  rN  rO  rP  rQ  rR  rS  rT  rU  rV  rW  rX  rY  rZ  r[  r\  r]  r^  r_  r`  ra  rb  rc  rd  re  rf  rg  rh  ri  rj  rk  rl  rm  rn  ro  rp  rq  rr  rs  rt  ru  rv  rw  rx  ry  rz  r{  r|  r}  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r	  r
  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r!  r"  r#  r$  r%  r&  r'  r(  r)  r*  r+  r,  r-  r.  r/  r0  r1  r2  r3  r4  r5  r6  r7  r8  r9  r:  r;  r<  r=  r>  r?  r@  rA  rB  rC  rD  rE  rF  rG  rH  rI  rJ  rK  rL  rM  rN  rO  rP  rQ  rR  rS  rT  rU  rV  rW  rX  rY  rZ  r[  r]  r^  r_  r`  ra  rb  rc  rd  re  rf  rg  rh  ri  rj  rk  rl  rm  rn  ro  rp  rq  rr  rs  rt  ru  rv  rw  rx  ry  rz  r{  r|  r}  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r	  r
  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r!  r"  r#  r$  r%  r&  r'  r(  r)  r*  r+  r,  r-  r.  r/  r0  r1  r2  r3  r4  r5  r6  r7  r8  r9  r:  r;  r<  r=  r>  r?  r@  rA  rB  rC  rD  rE  rF  rG  rH  rI  rJ  rK  rL  rM  rN  rO  rP  rQ  rR  rS  rT  rU  rV  rW  rX  rY  rZ  r[  r\  r]  r^  r_  r`  ra  rb  rc  rd  re  rf  rg  rh  ri  rj  rk  rl  rm  rn  ro  rp  rq  rr  rs  rt  ru  rv  rw  rx  ry  rz  r{  r|  r}  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r	  r
  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r!  r"  r#  r$  r%  r&  r'  r(  r)  r*  r+  r,  r-  r.  r/  r0  r1  r2  r3  r4  r5  r6  r7  r8  r9  r:  r;  r<  r=  ) 0  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFTr>  r?  r@  rA  rB  rC  rD  rE  rF  rG  rH  rI  rJ  rK  rL  rM  rN  rO  rP  rQ  rR  rS  rT  rU  rV  rW  rX  rY  rZ  r[  r\  r]  r^  r_  r`  ra  rb  rc  rd  re  rf  rg  rh  ri  rj  rk  rl  rm  rn  ro  rp  rq  rr  rs  rt  ru  rv  rw  rx  ry  rz  r{  r|  r}  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  ) `  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)r  r  r   r   r   FTT)r  r  r   r   r   TFT)rV   r   r   r   )r   r   r   r   )r   r   rO   r   )r   rO   r   r   )rO   rV   rO   r   )rO   rV   rV   rV   )rO   r   rV   r   )r   rO   rV   r   )r   rO   rV   r   )rV   r   rV   r   )r   r   rV   r   )r   r   r   rO   )rO   r   r   rO   )rV   r   r   r   )rV   r   rV   r   )r   r   rV   r   )r   r   rV   r   )rV   r   rO   r   )rO   r   r   r   )r   r   rO   r   )r   r   rV   r   )rO   r   rV   r   )r   r   rO   r   )r   r   rV   r   )rO   r   rV   r   )rV   r   rV   r   )r   r   rV   r   )rV   r   rV   r   )rV   r   rV   r   )rV   r   rV   r   )rO   r   rV   r   )rV   r   r   r   )rV   r   rV   r   )rV   r   rO   r   )rV   r   rV   r   )r   r   rV   r   )r   r   r   r   )r   r   r   r   )rV   rO   rV   r   )r   r   rO   r   )r   r   rV   r   )r   r   rO   r   )r   r   rV   r   )r   r   rV   r   )rV   r   rV   r   )r   r   rV   r   )rO   r   rV   r   )rO   r   rV   r   )r   r   rV   r   )rO   r   rV   r   )rO   rO   rO   r   )r   r   r   r   )rO   r   rV   r   )rO   r   rO   r   )r   r   r   rV   )rV   r   rO   r   )rV   r   rO   r   )rV   r   rV   r   )rV      r   r   )rV     r   r   )rV     r   r   )r   r  rV   r   )rV   r  rO   r   )rV   r  rV   r   )r   rO   rV   r   )r   r   r   r   )r   r   r   r   )r   r   rO   r   )rO   r   rV   r   )r   r   rO   r   )rV   r   rV   r   )r   r   rV   r   )r   r   r   rV   )r   r   rV   r   )r   r   r   rV   )rV   r   r   rV   )r   r   r   rV   )rV   r   rO   r   )rO   r   rV   r   )r   r   rO   r   )r   r   rO   r   )r   r   rO   r   )r   r   rO   r   )r   r   rO   r   )r   r   rO   r   )r   r   r   r   )r   r   r   r   )r   r   rV   r   )r   r   rV   r   )r   r   rV   r   )rV   r   r   rV   )r   r   r   rV   )r   r   r   rV   )r   r   rV   r   )r   r   r   rV   )rV   r   r   rV   )r   rO   rV   r   )r   rO   rO   r   )r   r   rV   r   )r   r   rO   r   )r   r   rO   r   )r   r   rO   r   )rO   r   rO   r   )r   r   r   rO   )rV   r   r   rV   )r   r   rO   r   )r   r   rO   r   )rO   r   rO   r   )rO   r   r   rV   )rO   r   r   r   )rO   r   rO   r   )r   rO   rO   r   )r   r   rO   r   )r   r   rO   r   )rV   r   rO   r   )r   rO   rV   r   )rO   r   r   rV   )rO   r   r   rV   )r   r   r   r   )rO   rO   rV   r   )r   rO   r   r   )rO   r   r   rV   )rO   r   r   rV   )rV   r   r   r   )r   r   rO   r   (  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r	  r
  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r!  r"  r#  r$  r%  r&  r'  r(  r)  r*  r+  r,  r-  r.  r/  r0  r1  r2  r3  r4  r5  r6  r7  r8  r9  r:  r;  r<  r=  r>  r?  r@  rA  rB  rC  rD  rE  rF  rG  rH  rI  rJ  rK  rL  rM  rN  rO  rP  rQ  rR  rS  rT  rU  rV  rW  rX  rY  rZ  r[  r\  r]  r^  r_  r`  ra  rb  rc  rd  re  rf  rg  rh  ri  rj  rk  rl  rm  rn  ro  rp  rq  rr  rs  rt  ru  rv  rw  rx  ry  rz  r{  r|  r}  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r	  r
  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r!  r"  r#  r$  r%  r&  r'  r(  r)  r*  r+  r,  r-  r/  r0  r1  r2  r3  r4  r5  r6  r7  r8  r9  r:  r;  r<  r=  r>  r?  r@  rA  rB  rC  rD  rE  rF  rG  rH  rI  rJ  rK  rL  rM  rN  rO  rP  rQ  rR  rS  rT  rU  rV  rW  rX  rY  rZ  r[  r\  r]  r^  r_  r`  ra  rb  rc  rd  re  rf  rg  rh  ri  rj  rk  rl  rm  rn  ro  rp  rq  rr  rs  rt  ru  rv  rw  rx  ry  rz  r{  r|  r}  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  )r  r     r   r   FTT)r  r  r  r   r   FTT)r  r  r  r   r   FTT)r  r  r  r   r   FTTr  r  r  r  r  r   r  r  r  r  r  r  r  r  r	  r
  )r  r  r  r   r   FTT)r  r  r  r   r   FTT)r  r  r  r   r   FTT)r  r  r  r   r   FTTr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r!  r"  r#  r$  r%  r&  r'  r(  r)  r*  r+  r,  r-  r.  r/  r0  r1  r2  r3  r4  r5  r6  r7  r8  r9  r:  r;  r<  r=  r>  r?  r@  rA  rB  rC  rD  rE  rF  rG  rH  rI  rJ  rK  rL  rM  rN  rO  rP  rQ  rR  rS  rT  rU  rV  rW  rX  rY  rZ  r[  r]  r^  r_  r`  ra  rb  rc  rd  re  rf  rg  rh  ri  rj  rk  rl  rm  rn  ro  rp  rq  rr  rs  rt  ru  rv  rw  rx  ry  rz  r{  r|  r}  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r	  r
  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r!  r"  r#  r$  r%  r&  r'  r(  r)  r*  r+  r,  r-  r.  r/  r0  r1  r2  r3  r4  r5  r6  r7  r8  r9  r:  r;  r<  r=  r>  r?  r@  rA  rB  rC  rD  rE  rF  rG  rH  rI  rJ  rK  rL  rM  rN  rO  rP  rQ  rR  rS  rT  rU  rV  rW  rX  rY  rZ  r[  r\  r]  r^  r_  r`  ra  rb  rc  rd  re  rf  rg  rh  ri  rj  rk  rl  rm  rn  ro  rp  rq  rr  rs  rt  ru  rv  rw  rx  ry  rz  r{  r|  r}  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r	  r
  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r!  r"  r#  r$  r%  r&  r'  r(  r)  r*  r+  r,  r-  r.  r/  r0  r1  r2  r3  r4  r5  r6  r7  r8  r9  r:  r;  r<  r=  r>  r?  r@  rA  rB  rC  rD  rE  rF  rG  rH  rI  rJ  rK  rL  rM  rN  rO  rP  rQ  rR  rS  rT  rU  rV  rW  rX  rY  rZ  r[  r\  r]  r^  r_  r`  ra  rb  rc  rd  re  rf  rg  rh  ri  rj  rk  rl  rm  rn  ro  rp  rq  rr  rs  rt  ru  rv  rw  rx  ry  rz  r{  r|  r}  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  )r   r   r   r   )r   r   r   r   )r   r   r   r   )rV   r   rV   r   )r   r   rV   r   )rV   r   rO   r   )r   r   rV   r   )r   r   rV   r   )r   r   rV   r   )rV   rV   r   r   rV   rO   )rV   rV   r   r   rV   r   )rV   rV   r   r   rV   rV   )rO   r   r   r   rV   r   )rV   rV   r   r   rV   r   )rV   rV   r   r   rV   rV   )rV   rV   r   r   rV   r   )rV   rO   r   r   rV   rV   )rV   rV   r   r   rV   rO   )rV   rV   r   r   rV   r   )rV   rV   r   r   rV   r   )rO   rV   r   r   rV   rO   )rV   rV   r   r   rV   rV   )rV   rV   r   r   rV   r   )rV   rV   r   r   rV   rV   )rO   rO   r   r   rV   rO   )rV   rV   r   r   rV   r   )rV   rO   r   r   rV   rO   )rV   rV   r   r   rV   rO   )rV   rV   r   r   rV   rO   )rV   rV   r   r   rV   rO   )rO   r   r   r   rV   r   )rV   rV   r   r   rV   rO   )rO   r   r   r   rV   r   )rV   rV   r   r   rV   rV   )r   rV   r   r   rV   rV   )rO   r   r   r   rV   r   )rO   r   r   r   rO   r   )rO   r   r   r   rV   r   )rV   rV   r   r   r   rV   )rV   r   r   r   rV   rO   )rV   r   r   r   rV   r   )rV   rV   r   r   r   r   )rO   r   r   r   rV   rO   )rV   rO   r   r   rV   rO   )rV   rV   r   r   r   rO   )rO   rV   r   r   rV   r   )rO   r   r   r   rV   r   )rO   r   r   r   r   r   )rV   r   r   r   rV   rO   )rV   r   r   r   r   r   )rO   r   r   r   r   r   )rV   r   r   r   rV   r   )rV   r   r   r   r   r   )rV   r   r   r   rV   r   )rO   r   r   r   rO   rO   )rO   r   r   r   rV   rO   )rV   r   r   r   r   rO   )rO   r   r   r   rV   r   )rO   r   r   r   rV   r   )rV   rV   r   r   rV   rO   )rV   r   r   r   rO   rV   )rO   r   r   r   rV   r   )r   rO   r   r   rV   rO   )rO   r   r   r   rO   rV   )rO   rV   r   r   rV   rO   )rV   r   r   r   rO   rV   )r   rV   r   r   rV   r   )rV   rV   r   r   rO   rV   )rV   rO   r   r   rV   r   )rV   r   r   r   rV   r   )r   r   r   r   rV   rO   )rV   r   r   r   r   rO   )rV   r   r   r   r   rO   )rO   r   r   r   rV   rO   )rV   r   r   r   r   rO   )rV   r   r   r   r   rO   )rV   r   r   r   rV   r   )rV   rV   r   r   r   rO   )rV   r   r   r   rV   rO   )rV   rO   r   r   rV   r   )r   rO   r   r   rV   rO   )rV   rV   r   r   r   r   )r   r   r   r   rV   r   )rV   rO   r   r   r   rO   )rO   r   r   r   rV   r   )rV   r   r   r   rV   r   )rV   r   r   r   rV   r   )rV   rV   r   r   r   rV   )rV   r   r   r   r   rO   )r   rV   r   r   rV   r   )rO   rV   r   r   rV   r   )rV   rV   r   r   r   r   )r   rV   r   r   rV   rO   )rO   rO   r   r   rV   rO   )rV   rV   r   r   r   rO   )rV   rO   r   r   rV   r   )r   r   r   r   rV   rO   )rO   r   r   r   r   r   )rV   r   r   r   rV   rO   )rV   r   r   r   r   rO   )rO   r   r   r   rO   r   )rO   rV   r   r   r   rV   )rV   rV   r   r   r   rV   )rO   r   r   r   rO   r   )rV   r   r   r   r   r   )rV   r   r   r   r   rO   )r   r   r   r   r   rO   )r   r   r   r   r   rO   )rV   r   r   r   r   rO   )rV   r   r   r   r   r   )rO   r   r   r   r   r   )rV   r   r   r   rV   r   )rV   rO   r   r   r   rO   )rV   r   r   r   r   r   )r   r   r   r   rO   r   )r   r   r   r   rO   r   )rO   r   r   r   r   rO   )r   r   r   r   rO   r   )r   r   r   r   r   rO   )r   r   r   r   rV   r   )rO   r   r   r   r   r   )r   r   r   r   rV   r   )rO   r   r   r   rO   r   )rO   r   r   r   rO   r   )r   r   r   r   r   r   )r   r   r   r   rO   r   (  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   rV   r   )r   rO   r   r   rV   r   )r   rV   r   r   rV   r   )rO   rV   r   r   rV   r   )rO   rO   r   r   rV   r   )r   r   r   r   rV   r   )r   r   r   r   rV   r   )r   rO   r   r   rV   rO   )r   r   r   r   rV   rO   )r   r   r   r   rV   r   )r   r   r   r   rV   r   )rO   r   r   r   rV   r   )r   r   r   r   rV   r   )r   r   r   r   rV   rV   )r   r   r   r   rV   r   )r   r   r   r   rV   r   )r   r   r   r   rV   rV   )r   r   r   r   rV   rO   )r   r   r   r   rV   rV   )rO   r   r   r   rV   rO   )r   r   r   r   rV   r   )rO   r   r   r   rV   rO   )r   rV   r   r   rV   rO   )rO   rV   r   r   rV   rO   )r   r   r   r   rV   r   )rO   r   r   r   rV   r   )rO   r   r   r   r   r   )r   r   r   r   rV   r   )rO   r   r   r   rV   rV   )rO   rV   r   r   rV   rO   )rO   r   r   r   rV   r   )rO   r   r   r   rV   r   )r   r   r   r   rV   r   )r   r   r   r   rV   rO   )r   r   r   r   rV   rO   )rO   r   r   r   rV   rO   )r   r   r   r   rV   rO   )r   r   r   r   rV   rO   )r   r   r   r   rV   rO   )rO   r   r   r   r   rO   )rO   r   r   r   rV   rV   )r   r   r   r   r   rO   )r   r   r   r   rV   rO   )r   rV   r   r   rV   r   )r   r   r   r   rV   r   )r   r   r   r   rV   r   )r   r   r   r   rV   r   )r   rO   r   r   rV   rO   )r   r   r   r   rV   r   )r   r   r   r   rV   r   )rO   rO   r   r   rV   rO   )rO   r   r   r   rV   rO   )rO   r   r   r   rV   r   )rO   r   r   r   r   rO   )r   r   r   r   rV   rO   )r   r   r   r   rV   rO   )r   r   r   r   rV   rO   )rO   r   r   r   r   rO   )rV   r   r   r   r   rO   )r   r   r   r   r   rO   )r   r   r   r   rV   r   )r   r   r   r   rV   rO   )r   r   r   r   rO   r   )rO   r   r   r   r   rO   )r   r   r   r   r   rO   )r   r   r   r   rO   r   )r   rO   r   r   rV   rO   )rO   rV   r   r   rO   r   )r   r   r   r   rV   r   )r   r   r   r   r   r   )r   r   r   r   rV   r   )r   r   r   r   rV   r   )rV   r   r   r   rV   rO   )rO   r   r   r   r   rO   )r   r   r   r   rV   rO   )rO   r   r   r   r   rO   )rO   r   r   r   r   rO   )rO   r   r   r   r   rO   )r   r   r   r   rV   r   )r   r   r   r   r   rO   )r   r   r   r   r   rO   )r   r   r   r   rV   r   )r   rO   r   r   rV   rO   )rV   rO   r   r   rV   rO   )r   r   r   r   r   rO   )r   rV   r   r   rO   r   )rO   rV   r   r   r   rO   )r   rV   r   r   r   rO   )r   rV   r   r   rO   r   )r   r   r   r   rV   r   )r   r   r   r   rO   r   )rO   rV   r   r   r   r   )r   r   r   r   rV   r   )r   r   r   r   rV   rO   )r   r   r   r   rV   r   )r   r   r   r   r   rO   )rO   r   r   r   r   r   )rO   r   r   r   rO   r   )r   r   r   r   r   rO   )rO   rV   r   r   rV   r   )rO   rO   r   r   r   rO   )r   r   r   r   rO   r   )r   rO   r   r   r   rO   )r   rV   r   r   rV   r   )r   rV   r   r   r   r   )r   rV   r   r   rV   rO   )r   rV   r   r   rV   r   )r   r   r   r   rO   r   )r   rV   r   r   r   rO   )rV   rV   r   r   rV   r   )rV   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   rV   rO   )rO   r   r   r   rV   r   )r   r   r   r   r   rO   )r   r   r   r   rV   r   )rO   r   r   r   r   rO   )r   rO   r   r   rV   rO   )r   r   r   r   rO   r   )r   r   r   r   rO   r   )rO   rO   r   r   r   r   )r   r   r   r   r   rO   )r   r   r   r   r   rO   )r   r   r   r   r   rO   )r   rO   r   r   rV   rO   )r   r   r   r   r   rO   )r   r   r   r   rV   r   )r   r   r   r   r   r   )r   r   r   r   rO   r   )r   r   r   r   r   rO   )rO   r   r   r   rO   r   )rO   r   r   r   r   rO   )r   r   r   r   rO   r   )rV   rO   r   r   rV   r   )rV   r   r   r   r   r   )r   r   r   r   rV   r   )r   rO   r   r   rV   rO   )r   r   r   r   r   rO   )rV   r   r   r   rO   r   )r   r   r   r   rV   rV   )r   r   r   r   rV   rV   (   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r	  r
  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r!  r"  r#  r$  r%  r&  r'  r(  r)  r*  r+  r,  r-  r.  r/  r0  r1  r2  r3  r4  r5  r6  r7  r8  r9  r:  r;  r<  r=  r>  r?  r@  rA  rB  rC  rD  rE  rF  rG  rH  rI  rJ  rK  rL  rM  rN  rO  rP  rQ  rR  rS  rT  rU  rV  rW  rX  rY  rZ  r[  r\  r]  r^  r_  r`  ra  rb  rc  rd  re  rf  rg  rh  ri  rj  rk  rl  rm  rn  ro  rp  rq  rr  rs  rt  ru  rv  rw  rx  ry  rz  r{  r|  r}  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )rV   rV   r   r   rV   r   )rV   r   r   r   rV   rV   )rV   rV   r   r   rV   rO   )rV   r   r   r   rV   rV   )rV   rO   r   r   rV   rO   )rO   rV   r   r   rV   rO   )r   rV   r   r   rV   r   )rV   r   r   r   rV   rO   )rO   rV   r   r   rV   r   )rV   r   r   r   rV   r   )rO   r   r   r   rV   rV   )rV   rV   r   r   rV   r   )r   r   r   r   rV   rV   )rV   r   r   r   rV   r   )rV   rO   r   r   rV   rV   )rV   r   r   r   rV   rO   )rV   rV   r   r   rV   r   )rV   r   r   r   rV   rO   )rO   r   r   r   rV   rV   )rV   r   r   r   rV   r   )rV   r   r   r   rV   rV   )rV   r   r   r   rV   r   )rO   rV   r   r   rV   r   )rV   r   r   r   rV   rV   )r   rV   r   r   rV   r   )r   r   r   r   rV   r   )rV   r   r   r   rV   rO   )rV   r   r   r   rV   rV   )rV   r   r   r   rV   r   )rV   r   r   r   rV   rO   )rV   r   r   r   rV   r   )rV   r   r   r   rV   r   )rV   r   r   r   rV   r   )rO   r   r   r   rV   rV   )rV   r   r   r   rV   rV   )rO   r   r   r   rV   r   )r   rV   r   r   rV   r   )rO   r   r   r   rV   r   )rV   r   r   r   rV   rV   )r   rV   r   r   rV   r   )rV   r   r   r   rV   r   )rO   r   r   r   rV   rO   )rV   r   r   r   rV   r   )rO   r   r   r   r   rV   )rO   r   r   r   rV   r   )rO   r   r   r   rV   r   )r   rO   r   r   rV   rV   )r   r   r   r   rV   rV   )rO   r   r   r   rV   r   )r   r   r   r   rV   rV   )rO   r   r   r   rV   rV   )rO   r   r   r   rV   rO   )rV   r   r   r   rV   rV   )rO   r   r   r   rV   rO   )rO   r   r   r   rV   r   )rO   r   r   r   rV   rV   )rO   r   r   r   rV   rV   )rV   r   r   r   rV   rO   )rV   r   r   r   rV   rV   )rV   r   r   r   rV   rO   )r   rV   r   r   rV   rO   )rV   r   r   r   rV   r   )rO   r   r   r   rV   rO   )rV   r   r   r   rV   r   )rO   r   r   r   r   rV   )rO   r   r   r   rV   rV   )rV   r   r   r   r   rV   )rV   r   r   r   rV   rV   )rV   r   r   r   r   rV   )r   r   r   r   rV   rO   )rO   r   r   r   rV   rO   )rO   rV   r   r   rV   rV   )rO   rV   r   r   rV   r   )r   rV   r   r   rV   rV   )r   r   r   r   rV   rO   )rO   r   r   r   r   rV   )rV   r   r   r   r   rV   )r   r   r   r   r   rV   )rO   r   r   r   rV   r   )rV   r   r   r   rV   rO   )r   r   r   r   r   rV   )rO   rO   r   r   rV   rO   )r   rV   r   r   rV   r   )r   rO   r   r   rV   rO   )r   rV   r   r   rV   r   )r   r   r   r   rV   rV   )rV   rO   r   r   rV   rO   )r   r   r   r   rV   rO   )rV   r   r   r   rV   r   )rO   r   r   r   rV   rO   )r   r   r   r   r   rV   )r   r   r   r   rV   rV   )rV   rO   r   r   rV   rV   )r   r   r   r   rV   rO   )r   rV   r   r   rV   r   )rV   rO   r   r   r   rV   r   __main__r   )r$   r   r3   )rO   FN)__doc____all__r>   ro   r   rE   typingr   r   r   Z	torch.hubr   Ztorch.testingr   Zfloat16r   r/   r@   ry   r   r   r   r   r   Zbfloat16r   r   __annotations____name__r3   r$   r   r   r   r   <module>   s\&  bN
,  
 >   
u|
                    7*                    J*                  ?*        $                                                                         *
