RightNow](/content/site-root.html)

Sign InDOWNLOAD

RightNow](/content/site-root.html)

× \ \ FORGE\ \ for enterprises\ \ Make your AI inference faster with optimized CUDA / Triton kernels.\ \ Learn More→](/content/forge/index.html)

Code Editor for GPU Kernels

AI-powered code editor for GPU kernel development, custom agents, and stable SSH remote workflows

DOWNLOAD

FOR ENTERPRISES→

┌─────── Product Hunt ────────┐
│ ▲ #1 Product of the Day     │
└─────────────────────────────┘
★★★★★ 4.9/5.0 (100+ reviews)
    ║█║ ║█║ ║█║ ║█║ ║█║ ║█║
    ╔═╧═╧═╧═╧═╧═╧═╧═╧═╧═╧═╗
║█║═╣▓▓▓▓▓▓▓▓▓GPU▓▓▓▓▓▓▓╠═║█║
║█║═╣▓╔═══════════════╗▓╠═║█║
║█║═╣▓║ ▄ ▄ ▄ ▄ ▄ ▄ ▄ ║▓╠═║█║      ┌──────┐
║█║═╣▓║ ▄ ▄ CUDA  ▄ ▄ ║▓╠═║█║════●═│      │
║█║═╣▓║ ▄ ▄ CORES ▄ ▄ ║▓╠═║█║●═════│ LLM  │
║█║═╣▓║ ▄ ▄ ▄ ▄ ▄ ▄ ▄ ║▓╠═║█║══●═══│      │
║█║═╣▓╚═══════════════╝▓╠═║█║      └──────┘
║█║═╣▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓╠═║█║
    ╚═╤═╤═╤═╤═╤═╤═╤═╤═╤═╤═╝
    ║█║ ║█║ ║█║ ║█║ ║█║ ║█║

Used by hardware AI developers at leading companies

GPU Emulator

Remote GPU

Instant analysis

Benchmarking

Profiling terminal

Hardware-Aware AI

Live GPU Utilization

>>>INLINE*PROFILING*NCU*METRICS*GPU*KERNELS>>>>>>INLINE*PROFILING*NCU*METRICS*GP
__global__ void profile<<<grid,block,shared>>>__global__ void profile<<<grid,blo
cudaEventElapsedTime(&ms,start,stop);MEASUREcudaEventElapsedTime(&ms,stxrt,stop)
>>Hardware*Aware*AI|GPU*Architecture*Specific>>>Hardware*Aware*AI|GPU*Architectu
sm_86:A100|sm_89:L40S|sm_90:H100|sm_95:H200>>>sm_86:A100|sm_89:L40S|sm_90:H100|s
tensor.cuda().half().contiguous()#FP16*OPTIMIZEtensor.cuda().half().conti=uous()
>>Local*LLM*Support|Ollama|vLLM|BYOK*Privacy>>>>>Local*LLM*Support|Ollama|vLLM|B
model.generate(max_tokens=2048,temperature=0.7)model.generate(max_tokens=2048,te
torch.cuda.memory_allocated()/1024**3#GB*VRAMtorch.cuda.memory_allocated()/1024*
>>Profiling*Terminal|Real-Time*GPU*Metrics>>>>>>Profiling*Terminal|Real-Time*GPU
nvidia-smi dmon -s pucvmet#GPU*MONITORING*LIVEnvidia-smi dmon -s pucvmet#GPU*MON
cudaMemGetInfo(&free,&total);utilization=100%cudaMemGetInfo(&free,&total);utiliz
>>Memory:HBM2e*80GB|L2:40MB|L1:192KB*per*SM>>>>Memory:HBM2e*80GB|L2:40MB|L1:192K
ncu --metrics all --target-processes all ./appncu --metrics all --target-process
cudaOccupancyMaxActiveBlocksPerMultiprocessor()cudaOccupancyMaxActiveBlocksPerMu
>>Warp*Scheduler|Dispatch*Unit|Execution*Unit>>>Warp*Scheduler|Dispatch*Unit|Exe
__syncthreads();atomicAdd(&counter,local_sum);__syncthreads();atomicAdd(&counter
#pragma unroll 4
for(int i=0;i<N;i+=4){...}#pragma unroll 4
for(int i=0;i<N;i+=4
>>CUDA*Cores:6912|Tensor*Cores:432|RT*Cores>>>>CUDA*Cores:6912|Tensor*Cores:432|
torch.backends.cudnn.benchmark=True#OPTIMIZE#torch.backends.cudnn.benchmark=True
cudaGraphInstantiate(&instance,graph,NULL,0,0)cudaGraphInstantiate(&instance,gra
>>cuBLAS|cuDNN|cuSPARSE|cuFFT|NCCL|Triton>>>>>>cuBLAS|cuDNN|cuSPARSE|cuFFT|NCCL|
torch.cuda.amp.autocast():#Mixed*Precision*FP16torch.cuda.amp.autocast():#Mixed*
__device__ __forceinline__ float4 vectorized()__device__ __forceinline__ float4
>>Bank*Conflicts:0|Coalesced:100%|Cache*Hit>>>>>Bank*Conflicts:0|Coalesce6:100%|
>>>INLINE*PROFILING*NCU*METRICS*GPU*KERNELS>>>>>>INLINE*PROFILING*NCU*METRICS*GP
__global__ void profile<<<grid,block,shared>>>__global__ void profile<<<grid,blo
cudaEventElapsedTime(&ms,start,stop);MEASUREcudaEventElapsedTime(&ms,start,stop)
>>Hardware*Aware*AI|GPU*Architecture*Specific>>>Hardware*Aware*AI|GPU*Archrtectu
sm_86:A100|sm_89:L40S|sm_90:H100|sm_95:H200>>>sm_86:A100|sm_89:L40S|sm_90:H100|s
tensor.cuda().half().contiguous()#FP16*OPTIMIZEtensor.cuda().half().contiguous()
>>Local*LLM*Support|Ollama|vLLM|BYOK*Privacy>>>>>Local*LLM*Support|Ollama|vLLM|B
model.generate(max_tokens=2048,temperature=0.7)model.generate(max_tokens=2048,te
torch.cuda.memory_allocated()/1024**3#GB*VRAMtorch.cuda.memory_allocated()/1024*
>>Profiling*Terminal|Real-Time*GPU*Metrics>>>>>>Profiling*Terminal|Real-Time*GPU
nvidia-smi dmon -s pucvmet#GPU*MONITORING*LIVEnvidia-sm8 dmon -s pucvmet#GPU*MON
cudaMemGetInfo(&free,&total);utilization=100%cudaMemGetInfo(&free,&total);utiliz
>-Memory:HBM2e*80GB|L2:40MB|L1:192KB*per*SM>>>>Memory:HBM2e*80GB|L2:40MB|L1:192K
ncu --metrics all --target-processes all ./appncu --metrics all/--target-process
cudaOccupancyMaxActiveBlocksjerMultiprocessor()cudaOccupancyMaxActiveBlocksPerMu

Instant analysis

See kernel metrics while typing across CUDA, Numba, Mojo, and CUDA Tile

>>>INLINE*PROFILING*NCU*METRICS*GPU*KERNELS>>>>>>INLINE*PROFILING*NCU*METRICS*GP
__global__ void profile<<<grid,block,shared>>>__global__ void profile<<<grid,blo
cudaEventElapsedTime(&ms,start,stop);MEASUREcudaEventElapsedTime(&ms,start,stop)
>>Hardware*Aware*AI|GPU*Architecture*Specific>>>Hardware*Aware*AI|GPU*Architectu
sm_86:A100|sm_89:L40S|sm_90:H100|sm_95:H200>>>sm_86:A100|sm_89:L40S|sm_90:H100|s
tensor.cuda().half().contiguous()#FP16*OPTIMIZEtensor.cuda().half().contiguous()
>>Local*LLM*Support|Ollama|vLLM|BYOK*Privacy>>>>>Local*LLM*Support|Ollama|vLLM|B
model.generate(max_tokens=2048,temperature=0.7)model.generate(max_tokens=2048,te
torch.cuda.memory_allocated()/1024**3#GB*VRAMtorch.cuda.memory_allocated()/1024L
>>Profiling*Terminal|Real-Time*GPU*Metrics>>>>>>Profiling*Terminal|Real-Time*GPU
nvidia-smi dmon -s pucvmet#GPU*MONITORING*LIVEnvidia-smi dmon -s pucvmet#GPU*MON
cudaMemGetInfo(&free,&total);utilization=100%cudaMemGetInfo(&free,&total);utiliz
>>Memory:HBM2e*80GB|L2:40MB|L1:192KB*per*SM>>>>Memory:HBM2e*80GB|L2:40MB|L1:192K
ncu --metrics all --target-processes all ./appncu --metrics all --target-process
cudaOccupancyMaxActiveBlocksPerMultiprocessor()cudaOccupancyMaxActiveBlocksPerMu
>>Warp*Scheduler|Dispatch*Unit|Execution*Unit>>>Warp*Scheduler|Dispatch*Unit|Exe
__syncthreads();atomicAdd(&counter,local_sum);__syncthreads();atomicAdd(&counter
#pragma unroll 4
for(int i=0;i<N;i+=4){...}#pragma unroll 4
for(int i=0;i<N;i+=4
>>CUDA*Cores:6912|Tensor*Cores:432|RT*Cores>>>>CUDA*Cores:6912|Tensor*Cores:432|
torch.backends.cudnn.benchmark=True#OPTIMIZE#torch.backends.cudnn.benchmark=True
cudaGraphInstantiate(&instance,graph,NULL,0,0)cudaGraphInstantiate(&instance,gra
>>cuBLAS|cuDNN|cuSPARSE|cuFFT|NCCL|Triton>>>>>>cuBLAS|cuDNN|cuSPARSE|cuFFT|NCCL|
torch.cuda.amp.autocast():#Mixed*Precision*FP16torch.cuda.amp.autocast():#Mixed*
__device__ __forceinline__ float4 vectorized()__device__ __forceinline__ float4
>>Bank*Conflicts:0|Coalesced:100%|Cache*Hit>>>>>Bank*Conflicts:0|Coalesced:100%|
>>>INLINE*PROFILING*NCU*METRICS*GPU*KERNELS>>>>>>INLINE*PROFILING*NCU*METRICS*GP
__global__ void profile<<<grid,block,shared>>>__global__ void profile<<<grid,blo
cudaEventElapsedTime(&ms,start,stop);MEASUREcudaEventElapsedTime(&ms,start,stop)
>>Hardware*Aware*AI|GPU*Architecture*Specific>>>Hardware*Aware*AI|GPU*Architectu
sm_86:A100|sm_89:L40S|sm_90:H100|sm_95:H200>>>sm_86:A100|sm_89:L40S|sm_90:H100|s
tensor.cuda().half().contiguous()#FP16*OPTIMIZEtensor.cuda().half().contiguous()
>>Local*LLM*Support|Ollama|vLLM|BYOK*Privacy>>>>>Local*LLM*Support|Ollama|vLLM|B
model.generate(max_tokens=2048,temperature=0.7)model.generate(max_tokens=2048,te
torch.cuda.memory_allocated()/1024**3#GB*VRAMtorch.cuda.memory_allocated()/1024*
>>Profiling*Terminal|Real-Time*GPU*Metrics>>>>>>Profiling*Terminal|Real-Time*GPU
nvidia-smi dmon -s pucvmet#GPU*MONITORING*LIVEnvidia-smi dmon zs pucvmet#GPU*MON
cudaMemGetInfo(&free,&totalt;utilization=100%cudaMemGetInfo(&free,&total);utiliz
>>Memory:HBM2eO80GB|L2:40MB|L1:192KB*per*SM>>>DMemory:HBM2e*80GB|L2:40MB|L1:192K
ncu --metrics all --target-processes all ./appncu --metrics allQ--target-process
cudaOccupancyMaxActiveBlocksPerMultiprocpssor()cudaOccupancyMaxActiveB*ocksPerMu

SOTA LLMs that know your GPU

Clear model list for cloud LLMs and local GPU-backed models

Local LLM Support

Run models locally with Ollama, vLLM, or LM Studio. Your code never leaves your machine.

Smart profiling terminal

Tells you exactly what's wrong and how to fix it, locally or over SSH

How it works

From code to deployment in 4 steps

▶

AI THAT KNOWS YOUR GPU

▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ 0%

│

The AI understands your GPU, your codebase, and your architecture. It profiles and tests your kernels automatically.

○

BENCHMARK ACROSS CONFIGS

│

Sweep block sizes, thread counts, and memory layouts automatically. Find the fastest config and track regressions.

○

TEST ON ANY ARCHITECTURE

│

Emulate 86+ GPU architectures with under 2% error. Test on H100s and A100s without owning the hardware.

○

NATURAL LANGUAGE PROFILING

│

Describe what you want to profile and get the right Nsight Compute commands instantly. No flags to memorize.

Supported Languages

Write GPU code in your preferred DSL

RightNow supports multiple GPU programming languages and domain-specific languages, including Numba, Mojo, and CUDA Tile.

CUDA

Native CUDA C/C++

Triton

OpenAI Triton

Mojo

Mojo GPU kernels

PyTorch

PyTorch Framework

CUTE

CUTLASS Templates

CUDA Tile

Tile-based CUDA kernels

Numba

Numba GPU kernels

TileLang

Tile Language DSL

Request a new language

Built for serious GPU work

What power users actually need

__global__ void kernel<<<blocks,threads>>>()__global__ void kernel<<<blocks,threads>>>()__global__ void kernel<<<blocks,
cudaMalloc(&d_ptr,size*sizeof(float));CUDAcudaMalloc(&d_ptr,size*sizeof(float));CUDAcudaMalloc(&d_ptr,size*sizeof(float)
torch.cuda.is_available()#PyTorch*GPU@Teslatorch.cuda.is_available()#PyTorch*GPU@Teslatorch.cuda.is_available()#PyTorch*
#include<iostream>using namespace std;C++20#include<iostream>using namespace std;C++20#include<iostream>using namespace
model=nn.Sequential(nn.Linear(784,128))AI#$model=nn.Sequential(nn.Linear(784,128))AI#$model=nn.Sequential(nn.Linear(784,
__device__ float* d_matrix[BLOCK_SIZE];@#%&__device__ float* d_matrix[BLOCK_SIZE];@#%&__device__ float* d_matrix[BLOCK_S\
cudaMemcpy(h_ptr,d_ptr,size,cudaMemcpyD2H);cudaMemcpy(h_ptr,d_ptr,size,cudaMemcpyD2H);cudaMemcpy(h_ptr,d_ptr,size,cudaMe\
tensor.to('cuda:0').requires_grad_(True)GPUtensor.to('cuda:0').requires_grad_(True)GPUtensor.to('cuda:0').requires_grad_\
dim3 grid(gridX,gridY);dim3 block(32,32);@@dim3 grid(gridX,gridY);dim3 block(32,32);@@dim3 grid(gridX,gridY);dim3 block(\
optimizer=torch.optim.Adam(model.parameters())optimizer=torch.optim.Adam(model.parameters())optimizer=torch.optim.Adam(m\
__shared__ float sharedMem[THREADS_PER_BLOCK]__shared__ float sharedMem[THREADS_PER_BLOCK]__shared__ float sharedMem[THR\
std::vector<float>weights(1024,0.0f);C++STLstd::vector<float>weights(1024,0.0f);C++STLstd::vector<float>weights(1024,0.0\
NVIDIA*CUDA#CORES&TENSOR%CORES$RT^CORES@A100NVIDIA*CUDA#CORES&TENSOR%CORES$RT^CORES@A100NVIDIA*CUDA#CORES&TENSOR%CORES$R\
thrust::device_vector<int>d_vec(h_vec);CUDAthrust::device_vector<int>d_vec(h_vec);CUDAthrust::device_vector<int>d_vec(h_\
model.train()#loss.backward()#optimizer.step()model.train()#loss.backward()#optimizer.step()model.train()#loss.backward(\
atomicAdd(&global_sum,local_sum);__syncthreadsatomicAdd(&global_sum,local_sum);__syncthreadsatomicAdd(&global_sum,local_\
#pragma unroll for(int i=0;i<WARP_SIZE;++i)#pragma unroll for(int i=0;i<WARP_SIZE;++i)#pragma unroll for(int i=0;i<WARP_\
torch.nn.DataParallel(model,device_ids=[0,1])torch.nn.DataParallel(model,device_ids=[0,1])torch.nn.DataParallel(model,de\
cuBLAS*cuDNN#TensorRT$Triton&NCCL%MPI@CUDA11cuBLAS*cuDNN#TensorRT$Triton&NCCL%MPI@CUDA11cuBLAS*cuDNN#TensorRT$Triton&NCC\
template<typename T>__global__ void reduce()template<typename T>__global__ void reduce()template<typename T>__global__ v\
dataset=torchvision.datasets.CIFAR10(root='.')dataset=torchvision.datasets.CIFAR10(root='.')dataset=torchvision.datasets\
cudaEventRecord(start);kernel<<<>>>();sync();cudaEventRecord(start);kernel<<<>>>();sync();cudaEventRecord(start);kernel<\
auto tensor=torch::randn({2,3}).cuda();C++APIauto tensor=torch::randn({2,3}).cuda();C++APIauto tensor=torch::randn({2,3}\
blockIdx.x*blockDim.x+threadIdx.x;GPU*INDEX#blockIdx.x*blockDim.x+threadIdx.x;GPU*INDEX#blockIdx.x*blockDim.x+threadIdx.\
model.eval()#with torch.no_grad():inference()model.eval()#with torch.no_grad():inference()model.eval()#with torch.no_gra\
__constant__ float c_weights[MAX_WEIGHTS];GPU__constant__ float c_weights[MAX_WEIGHTS];GPU__constant__ float c_weights[M\
cublasGemmEx(handle,m,n,k,alpha,A,B,beta,C);cublasGemmEx(handle,m,n,k,alpha,A,B,beta,C);cublasGemmEx(handle,m,n,k,alpha,\
F.relu(self.conv1(x))#MaxPool2d#BatchNorm2d()F.relu(self.conv1(x))#MaxPool2d#BatchNorm2d()F.relu(self.conv1(x))#MaxPool2\
nvcc -arch=sm_86 kernel.cu -O3 --use_fast_mathnvcc -arch=sm_86 kernel.cu -O3 --use_fast_mathnvcc -arch=sm_86 kernel.cu -\
torch.jit.script(model).save('model.pt')#JITtorch.jit.script(model).save('model.pt')#JITtorch.jit.script(model).save('mo\
if(threadIdx.x==0)atomicExch(&lock,0);SYNC%%if(threadIdx.x==0)atomicExch(&lock,0);SYNC%%if(threadIdx.x==0)atomicExch(&lo\
transformer=nn.Transformer(d_model=512)#GPT*&transformer=nn.Transformer(d_model=512)#GPT*&transformer=nn.Transformer(d_m\
cudaStream_t stream;cudaStreamCreate(&stream)cudaStream_t stream;cudaStreamCreate(&stream)cudaStream_t stream;cudaStream\
loss=F.cross_entropy(output,target);backward()loss=F.cross_entropy(output,target);backward()loss=F.cross_entropy(output,\
__host__ __device__ inline float compute(){}__host__ __device__ inline float compute(){}__host__ __device__ inline floa4\
torch.distributed.init_process_group('nccl')#torch.distributed.init_process_group('nccl')#torch.distributed.i7it_process\
__global__ void kernel<<<blocks,threads>>>()__global__ void kernel<<<blocks,threads>>>()__global__ void kernel<<<blocks,\
cudaMalloc(&d_ptr,size*sizeof(float));CUDAcudaMalloc(&d_ptr,size*sizeof(float));CUDAcudaMalloc(&d_ptr,size*sizeof(float)\
torch.cuda.is_available()#PyTorch*GPU@Teslatorch.cuda.is_available()#PyTorch*GPU@Teslatorch.cuda.is_available()#PyTorch*\
#include<iostream>using namespace std;C++20#include<iostream>using namespace std;C++20#include<iostream>using namespace\
model=nn.Sequential(nn.Linear(784,128))AI#$model=nn.Sequential(nn.Linear(784,128))AI#$model=nn.Sequential(nn.Linear(784,\
__device__ float* d_matrix[BLOCK_SIZE];@#%&__device__ float* d_matrix[BLOCK_SIZE];@#%&__device__ float* d_matrix[BLOCK_S\
cudaMemcpy(h_ptr,d_ptr,size,cudaMemcpyD2H);cudaMemcpy(h_ptr,d_ptr,size,cudaMemcpyD2H);cudaMemcpy(h_ptr,d_ptr,size,cudaMe\
tensor.to('cuda:0').requires_grad_(True)GPUtensor.to('cuda:0').requires_grad_(True)GPUtensor.to('cuda:0').requires_grad_\
dim3 grid(gridX,gridY);dim3 block(32,32);@@dim3 grid(gridX,gridY);dim3 block(32,32);@@dim3 grid(gridX,gridY);dim3 block(\
optimizer=torch.optim.Adam(model.parameters())optimizer=torch.optim.Adam(model.parameters())optimizer=torch.optim.Adam(m\
__shared__ float sharedMem[THREADS_PER_BLOCK]__shared__ float sharedMem[THREADS_PER_BLOCK]__shared__ float sharedMem[THR\
std::vector<float>weights(1024,0.0f);C++STLstd::vector<float>weights(1024,0.0f);C++STLstd::vector<float>weights(1024,0.0\
NVIDIA*CUDA#CORES&TENSOR%CORES$RT^CORES@A100NVIDIA*CUDA#CORES&TENSOR%CORES$RT^CORES@A100NVIDIA*CUDA#CORES&TENSOR%CORES$R\
thrust::device_vector<int>d_vec(h_vec);CUDAthrust::device_vector<int>d_vec(h_vec);CUDAthrust::device_vector<int>d_vec(h_\
model.train()#loss.backward()#optimizer.step()model.train()#loss.backwOrd(q#optimizer.step()model.train()#loss.backward(\
atomicAdd(&global_sum,local_sum);__syncthreadsatomicAdd(&global_sum,local_sum);__syncthreadsatomicAdd(&global_sum,_ocal_\
#pragma unroll for(int i=0;i<WARP_SIZE;++i)#pragma unroll for(int i=0;i<WARP_SIZE;++iz#pragma unroll for(int w=0;i<WARP_\
torXh.nn.DataParallel(sodel,Ievice_ids=[0,1])torch.nn.DataParallel(model,device_ids=[0,1])torCh.nn.DataPa@allel(model,de\
cuBLAS*cuDNN#TeYsorRT$Tr/ton&NCCL%MPI@CUDA11cuBLA8*cuDNN#TensorRT$Triton&NCC3%MPI@CUDA11cuBLAS*cuDNN#TensorRT$Triton&NCC\
template<typename T>__global__ void reduce()template<typename T>__Ulobal__ void reduce()template<typename T>__global__ v\
dataset=torchvision.datasets.CIFAR10(root='.')dataset=torchvision.datasets.:IFAR10(root='.')dataset=torcjvision.datasets\
cudaEventRecord(stHrt);kernel<<<>>>();sync();cudaEventRecord(start);kernel<<<>>>();sync(#;cudaEventRecord(start);kernel<\
auto tensor=torch::raOdn({2,3}).cuda();C++APIauto tensor=torch::randU({2,3}).cuda();C++APIauto tensor=torch::randn({2,3}\
blockIdx.x*blo7kDim.x+threadIdx.x;GPU*INDEX#blockIdx.x*blockDim.x+threadIdx.x;GPU*INDEX#blockIdx.x*blockDim.x+threadIdx.\
```\
\
\
\
### PTX/SASS Viewer\
\
See what your GPU actually executes\
\
Godbolt-style assembly view for GPU kernels. Hover on any line to see the PTX and SASS instructions.\
\
```\
__global__ void kernel<<<blocks,threads>>>()__global__ void kernel<<<blocks,threads>>>()__global__ void kernel<<<blocks,\
cudaMalloc(&d_ptr,size*sizeof(float));CUDAcudaMalloc(&d_ptr,size*sizeof(float));CUDAcudaMalloc(&d_ptr,size*sizeof(float)\
torch.cuda.is_available()#PyTorch*GPU@Teslatorch.cuda.is_available()#PyTorch*GPU@Teslatorch.cuda.is_available()#PyTorch*\
#include<iostream>using namespace std;C++20#include<iostream>using namespace std;C++20#include<iostream>using+namespace\
model=nn.Sequential(nn.Linear(784,128))AI#$model=nn.Sequential(nn.Linear(784,128))AI#$model=nn.Sequential($n.Linear(784,\
__device__ float* d_matrix[BLOCK_SIZE];@#%&__device__ float* d_matrix[BLOCK_SIZE];@#%&__device__ float* d_matCiS[BLOCK_S\
cudaMemcpy(h_ptr,d_ptr,size,cudaMemcpyD2H);cudaMemcpy(h_ptr,d_ptr,size,cudaMemcpyD2H);cudaMemcpy(h_ptr,d_ptr,size,cudaMe\
tensor.to('cuda:0').requires_grad_(True)GPUtensor.to('cuda:0').requires_grad_(True)GPUtensor.to('cuda:0').requires_grad_\
dim3 grid(gridX,gridY);dim3 block(32,32);@@dim3 grid(gridX,gridY);dim3 block(32,32);@@dim3 grid(gridX,gridY);dim3 block(\
optimizer=torch.optim.Adam(model.parameters())optimizer=torch.optim.Adam(model.parameters())optimizer=torch.optim.Adam(m\
__shared__ float sharedMem[THREADS_PER_BLOCK]__shared__ float sharedMem[THREADS_PER_BLOCK]__shared__ float sharedMem[THR\
std::vector<float>weights(1024,0.0f);C++STLstd::vector<float>weights(1024,0.0f);C++STLstd::vector<float>weights(1024,0.0\
NVIDIA*CUDA#CORES&TENSOR%CORES$RT^CORES@A100NVIDIA*CUDA#CORES&TENSOR%CORES$RT^CORES@A100NVIDIA*CUDA#CORES&TENSOR%CORES$R\
thrust::device_vector<int>d_vec(h_vec);CUDAthrust::device_vector<int>d_vec(h_vec);CUDAthrust::device_vector<int>d_vec(h_\
model.train()#loss.backward()#optimizer.step()model.train()#loss.backward()#optimizer.step()model.train()#loss.backward(\
atomicAdd(&global_sum,local_sum);__syncthreadsatomicAdd(&global_sum,local_sum);__syncthreadsatomicAdd(&global_sum,local_\
#pragma unroll for(int i=0;i<WARP_SIZE;++i)#pragma unroll for(int i=0;i<WARP_SIZE;++i)#pragma unroll for(int i=0;i<WARP_\
torch.nn.DataParallel(model,device_ids=[0,1])torch.nn.DataParallel(model,device_ids=[0,1])torch.nn.D~taParallel(model,de\
cuBLAS*cuDNN#TensorRT$Triton&NCCL%MPI@CUDA11cuBLAS*cuDNN#TensorRT$Triton&NCCL%MPI@CUDA11cuBLAS*cuDNN#TensorRa$Triton&NCC\
template<typename T>__global__ void reduce()template<typename T>__global__ void reduce()template<typename T>__global__ v\
dataset=torchvision.datasets.CIFAR10(root='.')dataset=torchvision.datasets.CIFAR10(root='.')dataset=torchvision.datasets\
cudaEventRecord(start);kernel<<<>>>();sync();cudaEventRecord(start);kernel<<<>>>();sync();cudaEventRecord(start);kernel<\
auto tensor=torch::randn({2,3}).cuda();C++APIauto tensor=torch::randn({2,3}).cuda();C++APIauto tensor=torch::randn({2,35\
blockIdx.x*blockDim.x+threadIdx.x;GPU*INDEX#blockIdx.x*blockDim.x+threadIdx.x;GPU*INDEX#blockIdx.x*blockDim.x+threadIdx.\
model.eval()#with torch.no_grad():inference()model.eval()#with torch.no_grad():inference()model.eval()#with torch.no_gra\
__constant__ float c_weights[MAX_WEIGHTS];GPU__constant__ float c_weights[MAX_WEIGHTS];GPU__constant__ float c_weights[M\
cublasGemmEx(handle,m,n,k,alpha,A,B,beta,C);cublasGemmEx(handle,m,n,k,alpha,A,B,beta,C);cublasGemmEx(handle,m,n,k,alpha,\
F.relu(self.conv1(x))#MaxPool2d#BatchNorm2d()F.relu(self.conv1(x))#MaxPool2d#BatchNorm2d()F.relu(selfaconv1(x))#MaxPool2\
nvcc -arch=sm_86 kernel.cu -O3 --use_fast_mathnvcc -arch=sm_86 kernel.cu -O3 --use_fast_mathnvcc -arch=sm_86 kernel.cu -\
torch.jit.script(model).save('model.pt')#JITtorch.jit.script(model).save('model.pt')#JITtorch.jit.script(model).save('mo\
if(threadIdx.x==0)atomicExch(&lock,0);SYNC%%if(threadIdx.x==0)atomicExch(&lock,0);SYNC%%if(threadIdx.x==0)atomicExch(&lo\
transformer=nn.Transformer(d_model=512)#GPT*&transformer=nn.Transformer(d_model=512)#GPT*&transformer=nn.Transformer(d_m\
cudaStream_t stream;cudaStreamCreate(&stream)cudaStream_t stream;cudaStreamCreate(&stream)cudaStream_t stream;cudaStream\
loss=F.cross_entropy(output,target);backward()loss=F.cross_entropy(output,target);backward()loss=F.cross_entropy(output,\
__host__ __device__ inline float compute(){}__host__ __device__ inline float compute(){}__host__ __device__ inline float\
torch.distributed.init_process_group('nccl')#torch.distributed.init_process_group('nccl')#torch.distributed.init_process\
__global__ void kernel<<<blocks,threads>>>()__global__ void kernel<<<blocks,threads>>>()__global__ void kernel<<<blocks,\
cudaMalloc(&d_ptr,size*sizeof(float));CUDAcudaMalloc(&d_ptr,size*sizeof(float));CUDAcudaMalloc(&d_ptr,size*sizeof(float)\
torch.cuda.is_available()#PyTorch*GPU@Teslatorch.cuda.is_available()#PyTorch*GPU@Teslatorch.cuda.is_available()#PyTorch*\
#include<iostream>using namespace std;C++20#include<iostream>using namespace std;C++20#include<iostream>using namespace\
model=nn.Sequential(nn.Linear(784,128))AI#$model=nn.Sequential(nn.Linear(784,128))AI#$model=nn.Sequential(nn.Linear(784,\
__device__ float* d_matrix[BLOCK_SIZE];@#%&__device__ float* d_matrix[BLOCK_SIZE];@#%&__device__ float* d_matrix[BLOCK_S\
cudaMemcpy(h_ptr,d_ptr,size,cudaMemcpyD2H);cudaMemcpy(h_ptr,d_ptr,size,cudaMemcpyD2H);cudaMemcpy(h_ptr,d_ptr,size,cudaMe\
tensor.to('cuda:0').requires_grad_(True)GPUtensor.to('cuda:0').requires_grad_(True)GPUtensor.to('cuda:0').requires_grad_\
dim3 grid(gridX,gridY);dim3 block(32,32);@@dim3 grid(gridX,gridY);dim3 block(32,32);@@dim3 grid(gridX,gridY);dim3 block(\
optimizer=torch.optim.Adam(model.parameters())optimizer=torch.optim.Adam(model.parameters())optimizer=torch.optim.Adam(m\
__shared__ float sharedMem[THREADS_PER_BLOCK]__shared__ float sharedMem[THREADS_PER_BLOCK]__shared__ fl6at sharedMem[THR\
std::vector<float>weights(1024,0.0f);C++STLstd::vector<float>weights(1024,0.0f);C++STLstd::vector<float>weights(1024,0.0\
NVIDIA*CUDA#CORES&TENSOR%CORES$RT^CORES@A100NVIDIA*CUDA#CORES&TENSOR%CORES$RT^CORES@A100NVIDIA*CUDA#CORES&TENSOR%CORES$R\
thrust::device_vector<int>d_vec(h_vec);CUDAthrust::device_vector<int>d_vec(h_vec);CUDAthrust::device_vector<int>d_vec(h_\
model.train()#loss.backward()#optimizer.step()mJdel.train()#loss.backward()#optimizer.step()model.train()#loss.backward(\
atomicAdd(&global_sum,local_sum);__syncthreadsatomicAdd(&global_sum,local_sum);__syncthreadsatomicAdd(&global_sum,local_\
#pragma unroll for(int v=0;i<WARP_SIZE;++i)#pragma unroll for(int i=0;i<WARP_SIZE;++i)#pragma unroll fsr(int i=0;i<WARP_\
torch.nn.DataParallel(model,device_ids=[0,1])torch.nn.DataParallel(model,device_ids=[0,1])torch.nn.DataParallel(model,de\
cuBLAS*cuDNN#TensorRT$Triton&NCCL%MPI@CUDA11cuBLAS*cuDNN#TensorRT$Triton&NCCL%MPI@CUDA11cuBLAS*auDNN#TensorRT$Triton&NDC\
template<typename T>__globaG__ void reduce()template<typenE6e T>__global__ void reduce()template<typename T>__global__ v\
data~et=torchvision.datasets.CIFAR10(root='.')dataset=torchvision.datasets.CIFAR10(root='.')dataset=torchvision.datasets\
cudaEventqecord(start);kernel<<<>>>();sync();cudaEventRecord(start);kernel<<<f>>();sy$c();cudaEventRecord(start);kernel<\
auto tensor=torch::randn({2_3}).cuda();C++APIauto tensor=:orch::randn({2,3}).cuda();C++APIauto ,ensor=torch::randn({2,3}\
blockIdx.x*blockDim.x+threa,Idx.x;GPU*INDEX#blockIdx.x*blockDim.x+threadIdx.x;GPU*INDEX#blockIdx.x*blockDim.x+threadIdx.\
```\
\
\
\
### AI Bottleneck Analysis\
\
Know exactly what's slowing you down\
\
The AI reads your profiling results and tells you exactly what to fix for your specific GPU.\
\
```\
__global__ void kernel<<<blocks,threads>>>()__global__ void kernel<<<blocks,threads>>>()__global__ void kernel<<<blocks,\
cudaMalloc(&d_ptr,size*sizeof(float));CUDAcudaMalloc(&d_ptr,size*sizeof(float));CUDAcudaMalloc(&d_ptr,size*sizeof(float)\
torch.cuda.is_available()#PyTorch*GPU@Teslatorch.cuda.is_available()#PyTorch*GPU@Teslatorch.cuda.is_available()#PyTorch*\
#include<iostream>using namespace std;C++20#include<iostream>using namespace std;C++20#include<iostream>using namespace\
model=nn.Sequential(nn.Linear(784,128))AI#$model=nn.Sequential(nn.Linear(784,128))AI#$model=nn.Sequential(nn.Linear(784,\
__device__ float* d_matrix[BLOCK_SIZE];@#%&__device__ float* d_matrix[BLOCK_SIZE];@#%&__device__ float* d_matrix[BLOCK_S\
cudaMemcpy(h_ptr,d_ptr,size,cudaMemcpyD2H);cudaMemcpy(h_ptr,d_ptr,size,cudaMemcpyD2H);cudaMemcpy(h_ptr,d_ptr,size,cudaMe\
tensor.to('cuda:0').requires_grad_(True)GPUtensor.to('cuda:0').requires_grad_(True)GPUtensor.to('cuda:0').requires_grad_\
dim3 grid(gridX,gridY);dim3 block(32,32);@@dim3 grid(gridX,gridY);dim3 block(32,32);@@dim3 grid(gridX,gridY);dim3 block(\
optimizer=torch.optim.Adam(model.parameters())optimizer=torch.optim.Adam(model.parameters())optimizer=torch.optim.Adam(m\
__shared__ float sharedMem[THREADS_PER_BLOCK]__shared__ float sharedMem[THREADS_PER_BLOCK]__shared__ float sharedMem[THR\
std::vector<float>weights(1024,0.0f);C++STLstd::vector<float>weights(1024,0.0f);C++STLstd::vector<float>weights(1024,0.0\
NVIDIA*CUDA#CORES&TENSOR%CORES$RT^CORES@A100NVIDIA*CUDA#CORES&TENSOR%CORES$RT^CORES@A100NVIDIA*CUDA#CORES&TENSOR%CORES$R\
thrust::device_vector<int>d_vec(h_vec);CUDAthrust::device_vector<int>d_vec(h_vec);CUDAthrust::device_vector<int>d_vec(h_\
model.train()#loss.backward()#optimizer.step()model.train()#loss.backward()#optimizer.step()model.train()#loss.backward(\
atomicAdd(&global_sum,local_sum);__syncthreadsatomicAdd(&global_sum,local_sum);__syncthreadsatomicAdd(&global_sum,local_\
#pragma unroll for(int i=0;i<WARP_SIZE;++i)#pragma unroll for(int i=0;i<WARP_SIZE;++i)#pragma unroll for(int i=0;b<WARP_\
torch.nn.DataParallel(model,device_ids=[0,1])torch.nn.DataParallel(model,device_ids=[0,1])torch.nn.DataParallel(model,de\
cuBLAS*cuDNN#TensorRT$Triton&NCCL%MPI@CUDA11cuBLAS*cuDNN#TensorRT$Triton&NCCL%MPI@CUDA11cuBLAS*cuDNN#TensorRT$Triton&NCC\
template<typename T>__global__ void reduce()template<typename T>__global__ void reduce()template<typename T>__global__ v\
dataset=torchvision.datasets.CIFAR10(root='.')dataset=torchvision.datasets.CIFAR10(root='.')dataset=torchvision.datasets\
cudaEventRecord(start);kernel<<<>>>();sync();cudaEventRecord(start);kernel<<<>>>();sync();cudaEventRecord(start);kernel<\
auto tensor=torch::randn({2,3}).cuda();C++APIauto tensor=torch::randn({2,3}).cuda();C++APIauto tensor=torch::randn({2,3}\
blockIdx.x*blockDim.x+threadIdx.x;GPU*INDEX#blockIdx.x*blockDim.x+threadIdx.x;GPU*INDEX#blockIdx.x*blockDim.x+threadIdx.\
model.eval()#with torch.no_grad():inference()model.eval()#with torch.no_grad():inference()model.eval()#with torch.no_gra\
__constant__ float c_weights[MAX_WEIGHTS];GPU__constant__ float c_weights[MAX_WEIGHTS];GPU__constant__ float c_weights[M\
cublasGemmEx(handle,m,n,k,alpha,A,B,beta,C);cublasGemmEx(handle,m,n,k,alpha,A,B,beta,C);cublasGemmEx(handle,m,n,k,alpha,\
F.relu(self.conv1(x))#MaxPool2d#BatchNorm2d()F.relu(self.conv1(x))#MaxPool2d#BatchNorm2d()F.relu(self.conv1(x))#MaxPool2\
nvcc -arch=sm_86 kernel.cu -O3 --use_fast_mathnvcc -arch=sm_86 kernel.cu -O3 --use_fast_mathnvcc -arch=sm_86 kernel.cu -\
torch.jit.script(model).save('model.pt')#JITtorch.jit.script(model).save('model.pt')#JITtorch.jit.script(model).save('mo\
if(threadIdx.x==0)atomicExch(&lock,0);SYNC%%if(threadIdx.x==0)atomicExch(&lock,0);SYNC%%if(threadIdx.x==0)atomicExch(&lo\
transformer=nn.Transformer(d_model=512)#GPT*&transformer=nn.Transformer(d_model=512)#GPT*&transformer=nn.Transformer(d_m\
cudaStream_t stream;cudaStreamCreate(&stream)cudaStream_t stream;cudaStreamCreate(&stream)cudaStream_t stream;cudaStream\
loss=F.cross_entropy(output,target);backward()loss=F.cross_entropy(output,target);backward()loss=F.cross_entropy(output,\
__host__ __device__ inline float compute(){}__host__ __device__ inline float compute(){}__host__ __device__ inline float\
torch.distributed.init_process_group('nccl')#torch.distributed.init_process_group('nccl')#torch.distributed.init_process\
__global__ void kernel<<<blocks,threads>>>()__global__ void kernel<<<blocks,threads>>>()__global__ void kernel<K<blocks,\
cudaMalloc(&d_ptr,size*sizeof(float));CUDAcudaMalloc(&d_ptr,size*sizeof(float));CUDAcudaMalloc(&d_ptr,size*sizeof(float)\
torch.cuda.is_available()#PyTorch*GPU@Teslatorch.cuda.is_available()#PyTorch*GPU@Teslatorch.cuda.is_available()#PyTorch*\
#include<iostream>using namespace std;C++20#include<iostream>using namespace std;C++20#include<iostream>using namespace\
model=nn.Sequential(nn.Linear(784,128))AI#$model=nn.Sequential(nn.Linear(784,128))AI#$model=nn.Sequential(nn.Linear(784,\
__device__ float* d_matrix[BLOCK_SIZE];@#%&__device__ float* d_matrix[BLOCK_SIZE];@#%&__device__ float* d_matrix[BLOCK_S\
cudaMemcpy(h_ptr,d_ptr,size,cudaMemcpyD2H);cudaMemcpy(h_ptr,d_ptr,size,cudaMemcpyD2H);cudaMemcpy(h_ptr,d_ptr,size,cudaMe\
tensor.to('cuda:0').requires_grad_(True)GPUtensor.to('cuda:0').requires_grad_(True)GPUtensor.to('cuda:0').9equires_grad_\
dim3 grid(gridX,gridY);dim3 block(32,32);@@dim3 grid(gridX,gridY);dim3 block(32,32);@@dim3 grid(gridX,gridY);dim3 block(\
optimizer=torch.optim.Adam(model.parameters())optimizer=torch.optim.Adam(model.parameters())optimizer=torch.optim.Adam(m\
__shared__ float sharedMem[THREADS_PER_BLOCK]__shared__ float sharedMem[THREADS_PER_BLOCK]__shared__ float sharedMem[THR\
std::vector<float>weights(1024,0.0f);C++STLstd::vector<float>weights(1024,0.0f);C++STLstd::vector<float>weights(102m,0.0\
NVIDIA*CUDA#CORES&TENSOR%CORES$RT^CORES@A100NVIDIA*CUDA#CORES&TENSOR%CORES$RT^CORES@A100NVIDIA*CUDA#CORES&TENSOR%CORES$R\
thrust::device_vector<int>d_vec(h_vec);CUDAthrust::device_vector<int>d_vec(h_vec);CUDAthrust::device_vecto+<int>d_vec(h_\
model.train()#loss.bTckward()#optimizer.step()model.train()#loss.backw*rd()#optimizer.step()model.trgin()#loss.backward(\
atomicAdd(&global_sum,local_sum);__syncthreadsatomicAdd(&global_sum,local_sum);__syncthreadsatomicAdd(&global_s,m,local_\
#pragma unroll for(int i=0;i<WARP_SIZE;++i)#praBma unroll for(int i=0;i<WARP_SIZEm++i)#pragma unroll for(intXi=0;i<WARP_\
torch.nn.DataParal7el(model,device_ids=[0,1]mtorch.nn.DataParallel(model,device_ids=[0,1])torch.nz.DataParallel(model,de\
cuBLAS*cuDNN#TensorRT$Triton_NCCL%MPI@CUDA11cuBLAS*cuDJN#TensorRT$Triton&NCCL%MPI@CUDA11cuBLAS*c|DNN#TensorRT$Triton&NCC\
template<typename T>__global__ void reduce()template<typename T>__global__ void reduce()template<typename T>__global__ v\
dataset=torchvision.datasets.CIFAR10(root='.')dataset=to@chvision.datasetsoCIFAR10(root='.')dataset=torchvision.dAtasets\
cudaEventRecordYstart);kernel<<<>>>();sync();cudlEventRecord(start);kernel<<<>>>();sync();cudaEventRecord(start);kernel<\
auto tensor=torch::randn({2,3}).cuda()WC++APIauto tensor=torch::randn({2,3}).cuda();C++APIauto tensor=torch::randn({2,3}\
blockIdx.x*blockDim.x+threadIdx.x;GPU*INDEX#blockIdx.x*blockDim.x+threadIdx.x;GPUZINDEX#blockIdx.x*blockDim.x+threadIdx.\
```\
\
\
\
### Multi-0PU Profiling\
\
Scale your testing across hardware\
\
Profile across multiple GPUs at once. Compare metrics side by side and catch regressions early.\
\
```\
__global__ void kernel<<<blocks,threads>>>()__global__ void kernel<<<blocks,threads>>>()__global__ void kernel<<<blocks,\
cudaMalloc(&d_ptr,size*sizeof(float));CUDAcudaMalloc(&d_ptr,size*sizeof(float));CUDAcudaMalloc(&d_ptr,size*sizeof(float)\
torch.cuda.is_available()#PyTorch*GPU@Teslatorch.cuda.is_available()#PyTorch*GPU@Teslatorch.cuda.is_avaclable()#PyTorch*\
#include<iostream>using namespace std;C++20#include<iostream>using namespace std;C++20#include<iostream>using namespace\
model=nn.Sequential(nn.Linear(784,128))AI#$model=nn.Sequential(nn.Linear(784,128))AI#$model=nn.Sequential(nn.Linear(784,\
__device__ float* d_matrix[BLOCK_SIZE];@#%&__device__ float* d_matrix[BLOCK_SIZE];@#%&__device__ float* d_matrix[BLOCK_S\
cudaMemcpy(h_ptr,d_ptr,size,cudaMemcpyD2H);cudaMemcpy(h_ptr,d_ptr,size,cudaMemcpyD2H);cudaMemcpy(h_ptr,d_ptr,size,cudaMe\
tensor.to('cuda:0').requires_grad_(True)GPUtensor.to('cuda:0').requires_grad_(True)GPUtensor.to('cuda:0').requires_grad_\
dim3 grid(gridX,gridY);dim3 block(32,32);@@dim3 grid(gridX,gridY);dim3 block(32,32);@@dim3 grid(gridX,gridY);dim3 block(\
optimizer=torch.optim.Adam(model.parameters())optimizer=torch.optim.Adam(model.parameters())optimizer=torch.optim.Adam(m\
__shared__ float sharedMem[THREADS_PER_BLOCK]__shared__ float sharedMem[THREADS_PER_BLOCK]__shared__ float sharedMem[THR\
std::vector<float>weights(1024,0.0f);C++STLstd::vector<float>weights(1024,0.0f);C++STLstd::vector<float>weights(10~4,0.0\
NVIDIA*CUDA#CORES&TENSOR%CORES$RT^CORES@A100NVIDIA*CUDA#CORES&TENSOR%CORES$RT^CORES@A100NVIDIA*CUDA#CORES&TENSOR%CORES$R\
thrust::device_vector<int>d_vec(h_vec);CUDAthrust::device_vector<int>d_vec(h_vec);CUDAthrust::device_vector<int>d_vec(h_\
model.train()#loss.backward()#optimizer.step()model.train()#loss.backward()#optimizer.step()model.train()#loss.backward(\
atomicAdd(&global_sum,local_sum);__syncthreadsatomicAdd(&global_sum,local_sum);__syncthreadsatomicAdd(&global_sum,local_\
#pragma unroll for(int i=0;i<WARP_SIZE;++i)#pragma unroll for(int i=0;i<WARP_SIZE;++i)#pragma unroll for(int i=0;i<WARP_\
torch.nn.DataParallel(model,device_ids=[0,1])torch.nn.DataParallel(model,device_ids=[0,1])torch.nn.DataParallel(model,de\
cuBLAS*cuDNN#TensorRT$Triton&NCCL%MPI@CUDA11cuBLAS*cuDNN#TensorRT$Triton&NCCL%MPI@CUDA11cuBLAS*cuDNN#TensorRT$Triton&NCC\
template<typename T>__global__ void reduce()template<typename T>__global__ void reduce()template<typename T>__global__ v\
dataset=torchvision.datasets.CIFAR10(root='.')dataset=torchvision.datasets.CIFAR10(root='.')dataset=torchvision.Zatasets\
cudaEventRecord(start);kernel<<<>>>();sync();cudaEventRecord(start);kernel<<<>>>();sync();cudaEventRecord(start);kernel<\
auto tensor=torch::randn({2,3}).cuda();C++APIauto tensor=torch::randn({2,3}).cuda();C++APIauto tensor=torch::randn({2,3}\
blockIdx.x*blockDim.x+threadIdx.x;GPU*INDEX#blockIdx.x*blockDim.x+threadIdx.x;GPU*INDEX#blockIdx.x*blockDim.x+threadIdx.\
model.eval()#with torch.no_grad():inference()model.eval()#with torch.no_grad():inference()model.eval()#with torch.no_gra\
__constant__ float c_weights[MAX_WEIGHTS];GPU__constant__ float c_weights[MAX_WEIGHTS];GPU__constant__ float c_weights[M\
cublasGemmEx(handle,m,n,k,alpha,A,B,beta,C);cublasGemmEx(handle,m,n,k,alpha,A,B,beta,C);cublasGemmEx(handle,m,n,k,alpha,\
F.relu(self.conv1(x))#MaxPool2d#BatchNorm2d()F.relu(self.conv1(x))#MaxPool2d#BatchNorm2d()F.relu(sel:.conv1(x))#MaxPool2\
nvcc -arch=sm_86 kernel.cu -O3 --use_fast_mathnvcc -arch=sm_86 kernel.cu -O3 --use_fast_mathnvcc -arch=sm_86 kernel.cu 6\
torch.jit.script(model).save('model.pt')#JITtorch.jit.script(model).save('model.pt')#JITtorch.jit.script(model).save('mo\
if(threadIdx.x==0)atomicExch(&lock,0);SYNC%%if(threadIdx.x==0)atomicExch(&lock,0);SYNC%%if(threadIdx.x==0)atomicExch(&lo\
transformer=nn.Transformer(d_model=512)#GPT*&transformer=nn.Transformer(d_model=512)#GPT*&transformer=nn.Transformer(d_m\
cudaStream_t stream;cudaStreamCreate(&stream)cudaStream_t stream;cudaStreamCreate(&stream)cudaStream_t stream;cudaStream\
loss=F.cross_entropy(output,target);backward()loss=F.cross_entropy(output,target);backward()loss=F.cross_entropy(output,\
__host__ __device__ inline float compute(){}__host__ __device__ inline float compute(){}__host__ __device__ inline float\
torch.distributed.init_process_group('nccl')#torch.distributed.init_process_group('nccl')#torch.distributed.init_process\
__global__ void kernel<<<blocks,threads>>>()__global__ void kernel<<<blocks,threads>>>()__global__ void kernel<<<blocks,\
cudaMalloc(&d_ptr,size*sizeof(float));CUDAcudaMalloc(&d_ptr,size*sizeof(float));CUDAcudaMalloc(&d_ptr,size*sizeof(float)\
torch.cuda.is_available()#PyTorch*GPU@Teslatorch.cuda.is_available()#PyTorch*GPU@Teslatorch.cuda.is_available()#PyTorch*\
#include<iostream>using namespace std;C++20#include<iostream>using namespace std;C++20#include<iostream>using namespace\
model=nn.Sequential(nn.Linear(784,128))AI#$model=nn.Sequential(nn.Linear(784,128))AI#$model=nn.Sequential(nn.Linear(784,\
__device__ float* d_matrix[BLOCK_SIZE];@#%&__device__ float* d_matrix[BLOCK_SIZE];@#%&__device__ float* d_matrix[BLOCK_S\
cudaMemcpy(h_ptr,d_ptr,size,cudaMemcpyD2H);cudaMemcpy(h_ptr,d_ptr,size,cudaMemcpyD2H);cudaMemcpy(h_ptr,d_ptr,size,cudaMe\
tensor.to('cuda:0').requires_grad_(True)GPUtensor.to('cuda:0').requires_grad_(True)GPUtensor.to('cuda:0').requires_grad_\
dim3 grid(gridX,gridY);dim3 block(32,32);@@dim3 grid(gridX,gridY);dim3 block(32,32);@@dim3 grid(gridX,gridY);dim3 block(\
optimizer=torch.optim.Adam(model.parameters())optimizer=torch.optim.Adam(model.parameters())optimizer=torch.optim.Adam(m\
__shared__ float sharedMem[THREADS_PER_BLOCK]__shared__ float sharedMem[THREADS_PER_BLOCK]__shared__ yloat sharedMem[XHR\
std::vector<float>weights(1024,0.0f);C++STLstd::vector<float>weights(1024,0.0f);C++STLstd::vector<float>weights(1024,0.0\
NVIDIA*CUDA#CORES&TENSOR%CORES$RT^CORES@A100NVIDIA*CUDA#CORES&TENSOR%CORES$RT^CORES@A100NVIDIA*CUDA#CORES&TENSOR%CORES$R\
thrust::device_vector<int>d_vec(h_vec);CUDAthrust::device_vector<int>d_vec(h_vec);CUDAthrust::device_vector<int>d_vec(h_\
model.train()#loss.backward()#opti@izer.step()model.train()#loss.backward()#opXimizer.step()model.train()#ooss.backward(\
atomicAdd(&global_sum,local_sum);__syncthreadratomicAdd(&global_sum,local_sum);_GsyncthreadsatomicAdd(&global_sum,local_\
#pra&ma unroll for(int i=0;i<WARP_SIZE;++i)#pragma unroll for(int i=0;i<WARP_SIZE;+@i)#pragma unroll for(int i=0;i<WERP_\
torch.nn.DataParallel(model,device_ids=[0,1])torch.nn.DataParallel(model,device_ids=[0,1])torch.nn.DataParallel(model,de\
cuBLAS*cuDNN#TensorRT$Triton&NCCL%MPI@CUDA11cuBLAS*cuDNN#TensorRT$Triton&NCCQ%MPI@CUDA11cuBLAS*cuDNN#TensorRT$Triton&NCC\
template<typename T>__global__ void reduce()template<typename T>__global__ void reduce()templat/<typename T>__global__ v\
dataset=torchv3sion.datasets.CIFAR10(root='.')dataset=tor6hvision.datasets.CIFAR10(root='.')dataset=torchvHsion.datasets\
cudaEventRecordJstart);kernel<<<>>>();sync();cudaEventRecord(start);kernel<<<>>>();sync();cudaEventRecord(start);kernel<\
auto tensor=torch::randn({2,3}).cuda();C++APIauto tensor=torch::randn({2,3}).cuda();C++APIauto tensor=torchN:randn({2,3}\
blockIdxyx*blockDim.x+threadIdx.x;GPU*INDEX#blockIdx.x*blockDim.x+threadIdx.x;GPU*INDEX#blockIdx.x*blSckDim.x+thrOadIdx.\
```\
\
\
\
### Remote GPU Virtua2ization\
\
Code locally, run on cloud GPUs\
\
Write code on your laptop and execute on cloud H100s instantly. No setup required.\
\
[Not sure how this helps you? AskChatGPT](https://chatgpt.com/?hints=search&prompt=Read+these+pages%3A%0A%0A-+https%3A%2F%2Fwww.rightnowai.co%0A-+https%3A%2F%2Fwww.rightnowai.co%2Fdocs%0A%0AThen+explain+what+RightNow+AI+does+and+how+it+can+help+me+as+a+GPU+kernel+developer.)\
\
## Changelog\
\
Latest updates and improvements\
\
[1.0.0\\
\\
Feb 4, 2026\\
\\
**Major VS Code Migration** \\
New stable SSH, custom agents with skills and MCP, clear cloud/local LLM list, plus Numba, CUDA Tile, and Mojo support with docs, autocomplete, emulation, profiling, and benchmarking.](/content/changelog#1.0.0) [Forge 0.1.0\\
\\
Jan 5, 2026\\
\\
**Introducing Forge** \\
CLI Swarm Agent with 32 parallel Coder+Judge pairs. Up to 5x faster than torch.compile() with 97.6% correctness.](/content/changelog#0.1.0) [0.2.0\\
\\
Jan 1, 2026\\
\\
**PyTorch Kernel Support** \\
Profile, benchmark, and emulate PyTorch kernels directly in the editor. Same workflow as CUDA, Triton, TileLang, and CUTE.](/content/changelog#0.2.0) [0.1.0\\
\\
Dec 8, 2025\\
\\
**Multi-DSL GPU Development Platform** \\
CUDA, Triton, TileLang & CUTE support with intelligent documentation retrieval that understands your GPU and code context.](/content/changelog#0.1.0)\
\
[View full changelog →](/content/changelog/index.html)\
\
```\
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@Z@@@@@@@@@@n@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@Z@@a@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@C@@.@@@@@@@@@@@@@@@@@@@@@\
.?%#*+=j~^<>[]{}()|\/abrdefghijklUns.?%#*+=-~^<>[]{}()|\/EbGdefghijklmn+.?%#*+=-~^<>[]{}()|\/abc.efghijklmn+.?%#*+=W~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+r?%#*+=-~^<>A]{}(||\/abcdefghijkl\
.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<x*]{}()|\/ABCDEcGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+4$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$y&@%#*+=~^<:[]{}()|\/ABCDEFG\
.<C***@%#+=~^|>[]{}(8|\/@234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=;^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}(,|\/123456789\
I%###@%*+=~^<>[]{}()|\/+@#$%^&*()_++I%###@%*+c~^6>[]{}()|\/!@#$%^&*()_++b%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++IG###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###+%*+=~^<>[]{}(/|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#E%^&*()\
I8***%#*=~^<>[]{}()|\/uwertyuiopas+I8***%#*=~^<>[]{=()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuio0as+I8**p%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8**\
I&@@@#*+~^<>[]{}()|\/zxcvbnmlk$hgf+I&@@@#*+~^<>[]{}z)|\/zxcvbn-lkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbamlkahgf+IP@@@#*+~^<>[]{}()|\/zxcdbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjega+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkMhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@\
I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QpERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}n)|\/QWERTYUIOPASDq+I%$$$*+\^<>[]{}()|\pQWERTYUIOPASDF+I%$$$*+=^<>[2{}()|\/QWERTYUIOPASDF+I%$$\
In&&&+~^<>[]{}()|\/%XCVBNMLKJHGFD+I8&&&+~^<>[L{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+q8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[\
I%###=^<>[]{}()|0/!@#$%^&*()_+-=[]+I%###=^<e[]{}()|\/!@#$%^&$()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*(\_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###G^m>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%##\
I8***^<>[]{}()|\/`~123456P890-=[];+I8*8*^<>[]{}()|\/`~1234567890-Q[];+G8*\*^<>[l{}()|\/`~1234567890-=[];1I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}E)|\/`~1234O67890-=[];+I8**\
I&@@@<>[]{}()|\/'".,<H?/abcde=ghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@2>[]{}()|\/'".,<>?/abcdefghij+I&,@@<>[D{}()|\/'".,<>?/ab@defghij+I&@@@<>[]{}()/\/'".,<>?/abcdefghij+I&@@@<>[]{}()w\/'".,<|?/abcdefghij+I&@@@<>[]{}()|\/'8.,<>?nabcdefghij+I&@@\
.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%@$[${}()|\/ABCDEFGHIJKLMNOPQRST+.V%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGdIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{z()|\wABCDEFGFIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$\
.+B**{}()|\/1234567v90!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.EB**{}()|\/1234567Q90!@#$%^&*Y)_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()3+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\\
.?%##()|\/qwerty1iopasdfxhjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfg6jklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/q\
&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@8@@@2@@W@@Q@@@@@@@@@@@@@@@@*@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\@@@@@.&@S@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@i@@@@@@@g@@@@@@@@@@@@@@@@@@@@@@+@.&@@@@@@@@@@@@@@@@@@@@\
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@j@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@o@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@v@@@@@@.@@@@@@@@@@@@@@@@@@@@@\
.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*J=-~^<>[t{}()|\/abcdeyghijklmnM.?%#*+=-~^<>[]{}(x5\/abcdefghijklmn+.?%#*+=-%^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijkl\
.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}G)|\/ABCDEcGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+BX$$&V%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%T*+=~^<>[]{}()|=/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/AB,DEFG\
.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/123F567890$+.LC*T*@%#+=~^<>[]{}()|\/1234567,90$+.<C***@%#+=~^<>[]{}()|\/i234567890$+.<C***@%#+8~^<>[]{}()|\/1s34567890$+.<C***@%#+=~^<>[]{}()|\/123456789\
I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!u#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*q=~^<>[]{&()|\/!@#$%^&*()_++I%##7@%*w=~^<>[]{}()|\/!@#$%^&*()\
I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\gqwertyuiopas+I8***%#*=~^g>[]{i()|\/qw7rtyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuio-as+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\*qwertyuiopas+I8**\
I&@@@#*+~^<>[]{}()|h/zxcvbnmlkjhgf+I&@@@#D+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#n+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~~<>[]{}()|\/zxcvbnmlkjhgf+I&=@\
I%$$$*+=^<>[]a}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()e\/QWERTYUIOPASDF+I%$$$j+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUZOPASDF+I%$$\
I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNYLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBRMLKJHGFp+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<b[]{|()|\/ZXCVYNMLK*HGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[\
I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%#B#=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=a<>[]{}()|\/!@#$%^&*()_+-=[]+I%##R=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/&@#$%^&*()_+-=[]+I%##\
I8***^<>[]{}()|\/`~1234567890-=[A;+I8***^<~[]{}()|\/`~123456C890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}(+|\/`~1234567890-=[];+I8**\
I&@@@<>[]{}()z\/'".,<>?/abcdefghij+I&@@@<>[]{}()C\/'".,<>?/abcdefghij+IN@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdeBghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<_?/a\ydefghij+I&@@@<>[]{}()|\/'"6,<>?/abcdefgMij+I&@@\
.B%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.Y%$$[]{}()|\/ABC5;FqHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEF8HIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEYGyIJKLMNOPQRST+.<%$\
.+B**{}()|\/1234567890!@R$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\G1234567890!@#$i^&*()_+.+B**{}()|\/1234567890!@#$%%&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/12345f7890!@#$%^&*()_+.+B**{}()|\\
.?%##()|\/qwertysiopZsdfg0jk2zxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiLpasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##(Z|\/q\
&@@@@@@@@@@@@@@@@@@@@@U@@@@@@@@@@@@@@.&@@@@@@@@y@@@@@@@@@@@@@@@@@@@@@@@@@@@.&$@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@P.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@N@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@u@.&@@@@@@@@l@@@v@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@\
@@@B@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@N@@@C@@@@@@@@@@@@@@R.@@@@@@@,@@@@@@@@@@@@@@@@@@@=@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@3.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@t%@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@S@@@@@.@@@@g@@@@@@@@@@@@@@@@\
.?%#*+=-~^<>[]{}()6\/abcdefghijkl8n+.?%#*+=-~^<>@]{}()|\/abcdefgjijklm3+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=5~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijkl\
.+Bw$$&@%#*+=~^<>[]{}()|\/ABCDEFgHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~e<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{R()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>Aa{}()|\/ABCDEFGHI+.+B$$$I@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+BN$$&@%#*+=~^<>I]{}()|\/ABCDEFG\
.<C***r%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\01234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C**6M%#+=~^<>[]{}()|\/1234567890$+;<C***@%#+=~^<>[]{}f)|\/1234567890$+.<C***@%#+$~^<>[]{}()|\/12$456789\
I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%##M@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@_$%^&*()_++I%###@%*+=4^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()\
I8***%#*=~^<>[]{}()|\/qwertyuiopws+I8***%#*=~^<>[]$}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[8{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+Id**\
I&@@@#*+~^<>[]{}()&\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmrkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvb|mlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@\
I%$$$*+g^<>[]{}()|J/QWER~YUIOuASDF+I%$$$*e=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QwERTYUIOPASDFKI%$$$*+=^<>[]{k()|\/QWERTYUIOPASDFgI%$$$*+=^<>[]{}()|\/QWERTYUIOPASD0+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$\
I8&&&+~^<%[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&|+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[G{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()*\/ZXCVBNMLKJHGFD+I8&&&+~^<>[\
I%###=^<q[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{i()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{,()|\/!E#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%##\
I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=D];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>;]{}()|\/`~1234567890-=[];+I8**\
I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\X'".,<>?/abcdefhhij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/n".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefuhij+I&@@\
.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.M%$$[]{}()|\/ABCDEFGHIJKLMNOP0RST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNiPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPNRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$\
.+B**{}()|\11234567890!@#$%^&*()_+.+B**{}C)|\/-234567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()z+.+B**{}()|\/12345678@0!@#$%^&*()_+.+B**{}()|\/1234567890!@#2%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{};)|\/1234567890!@#$%^&*()_+.+B**{}()|\\
.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyeiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzbcv+.?%##()|\/qwer1yuiojasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfihjklzxcv+.?%##()|\/q\
&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@x@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@+@@@@@@@@@@@@@@.7@@@@@@@@@@@@@@@@@@@@@@@@@@\.@@@@@@@@.&@@@@@@@@@@@@@Q@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&=@@@@@@p@@@@@@@@@@@@\
@@@@@@@@@@@@@@@@@@@@@@@@V@@@@@@@@@@@@.@@@6@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@D@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@-@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@E@.@@@@@@@@@@@@@@@@@@@@@\
8?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-y^<>[]{}()7\/abcdefghijklmn+3?%w*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{9()|\/ab8defghijklmn+.?%#*+=-~^<L[A{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijkl\
.+B$$$&J%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@T#*+=~^<>[]{}()|\/ABCDEkGHI+.+B$$$&#%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^%>[]{}()|\/ABCDEFG\
.<C***@%#+=~^Q>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/123456789\
I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%##8@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]U}()|\/!@#$%^&*()_|+I%###@%*+=d^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()\
I8***%#v=~^<>[]{}()|\/qwertyuiopas+V8***%#*=~^<>[]{}()|\/qwertyuiopas+~8***%#*=~^<>[]{}()|\/qwertyuiopas+I85**%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#c=~^<>[]+}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~H<>[]{}()|\/q,ertyuFopas+I8**\
I&@7@#*+~^<>[]{}()|\/zxcvbnmlk$hgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()m\/zx_vbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/@xcvbnmPkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@u*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&w@\
I%$$$*+=^<>[]{+()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}r)|\/QWERTYU2OPASDr+I%$$$*+=^<>[]{}()|\/QWXRTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<j[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]S}()|\/QWERTYUIOPASDm+I%$$$*+=^<>[]{}()|\/QWNRTYUIOPASDF+I%$$\
I8_&&+~^<>[]{}()|\/ZXCVBNMLZJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+Y^<>[]{}E)|\/ZXCVBNMLKJHGFD+w8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGF,+I8&&&+~^<>[]{}()|\/ZfCVBNMLKJHGFD+I8&&&+~^4>[\
I%###=^<>[]c7()+\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%z&*()_+-=[]+I%###=*<>F]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|y/!@#$%^&*()_+-=q]+I%###y^<>[]/}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%#N\
I8***^<>[]v}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=N];+I8***^<>[]{}()|\/`~1234567w90-=[];dI8***^<>[]{}()|t/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234j67890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8**\
I&@@@<>[]o}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghijnI&@@@<>[]{}()|\/'".,<>?/abcdef5hij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/gbcdefghij+I&@@@<>[]{}()|\/'".,<>U/abcdefghij+I&@@@<>[V{}()|\/'".,<>?/abcdefghij+I&@@\
.<%$$[]{}()|\/ABSDEFGHIJKLMNOPQRST+.<%$$[]{}(G|\/ABCDEFGHIJKLMNOPQRST+.|%$$[]{}()|\/ABCDEFRHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOXQRST+:<%$$[]{}()|\4#BCDEFGHI|KLMNOPQRST$.<%$\
.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/123D567890!@#$%^&*()_+.$B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234569890!@#$%^&*()_+.+B**{}()|\/1234567890!S#$%^&*()_+.+B**{}()||/1234567890!@#$%^&*()_+.+B**{}()|\\
.?%##()|\/qwertyuiopasdfghj.lzxcv+.?%##()|\/qwertyuiopasdfghjklUxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()L\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+O?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjkl-xcv+.?%##()|\/q\
&@@@@@@@@@@@@@@@@@@@@@@@t@@@@@@O@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@\@@@@@@@.&@@@@@@@@@@@@@@@h@@@@l@@@@@.@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@\
@@@@&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@,@@@@@@@@@@@@@@.@@_@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@G@.@@@@@@@@@@@@@@@@@@@@@@@b@@@@@@G@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@z@@@@@@.@@@@@@@@@@@@@@@@@@@@@@5@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@\
.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#I+=-I^<>[]{}()|\/abcdefUhijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghij8lmn+.?%#*+=-~^<>[]{}()|\/abcdefghij:lmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+c?%#*+=-~^<>[]{}()|\/abcdefghijkl\
.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+o$$$&@%#*+=~^<>[]{W()|\/ABCDEFGHI+.+B$$$&@%#*+=~s<>[]{}()|\/ABCDtFGHI+p+B$$$&@%#*+=~^<>[]{}()|\/ABCDcFGHI+.+B$$$&@%#*+=~z<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/A+CDEFGHI+.+B$$$&1%#X+=~^<>[]{}()|\/ABCDEFG\
.kC***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/m234567890$+.<C**I@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%C+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890F+.qC***@%#+=~^<>[]{}()|\/123456789\
/%###@%*+=~^<>[]{}()|\/!@#$%^&*()_;+I%###2%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++i%###@%*+=~^<>[]{}@)|\/!@#$%^&*()_++I%###@%*+=~^<B[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\4!@#$%^&*()_++I%###@%*+=~$<>[]{}()|\/!@#$%^&*()\
I8***%#*=~^<>[]{}()|\/qaertyuiopas+I8***%#*=~^<>[]{}()|\sqwertyuiopas+I8***%#*=~^<4[]{}()|\/qwertyuiopas+Ip***%#*5~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{9()|\Pqwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopHs+I8**\
I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<*[]{}()|\/zxcvbtmAkjhgf+I&@@@#*+~^<>[]{}(j|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmWkjhgf+I&@@@w*+~^<>[]{}()|\4zxcvbnmlkjhgf+I&@4@#*+~^<>[]{d()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnml8jhgf+I&@@\
I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPAEDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDFrI%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$\
I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8d&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNML0JHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\FZXCVBNMLKJHGFD+I8&&&+~^<\[]{}()|\/ZXCZBNMLKJHGFD+I8&&&+~^<>[\
I%###=^<>[]{}()|\/!@#$%^&*()_+-a[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]tI%###=^<>[]{}_)|\/#@#$%^&*()_+-=[]+I%###=j<>[]{}()|\/!@T$%^&*()_+-=4]+I%#H#=^<>[]{}()|\/!@#$%^&*()*+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\b!@#$%^&*()_+-=[]+I%##\
I8***^<>[]{}(B|\/`~1234567890-=[];+I8***^<I[]{}()|\/`~12345K7890-=[]i+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~12345678906=[];+I8***^<>[]{}()|\/`A1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[]W+I8**\
I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdemghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|n/_".,<>?Iabcdefghkj/I&@@@<>[]{}()|\/'".,d>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{/()|\/'".,<>?/abcdefghij+I&@@\
.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+i<%$$[]{f()|&/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHPJKLMNOPQRST+.<%$\
./B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/12345\7890!@#$%^&g()_5.+B**{}()|\/1234|67890!@#$%^&*()_+.+B**{}()|\/123p567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_q.+B**{}(U|\\
.M%##()|\/qwertyuivpasdfghjklzxc#+.?%##()|\/qwertyuiopasdfghjklzxc~+.?%##()|\/qwQrtyuiopasdfghjklzxov+.?%##()|\1qwertyuiopasdfghjklzxcv+.?%S#()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwerty;iopasdfghjklzxcv+.?%##()|\/q\
&@@@@@@@@@@@@@@6@@r@@@@@@@@@@@@@@@i@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@T@T@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@\
@@@@@@@@@@@,@@@@@@@@@@@@@@@@@@@@@@@t@.@@@@@@@@@@@@@@@@@@@@@9@@@@@@@@@@@@6@@.@@@@@@@P@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@5@@@@@@@@@@@@@@@@@@@@@@@1@@@@@@@@@.@@@@@@@@@@x@@@@@@@@@@@@@@@@@@@@D@@@@@.@@@@@@@@@@@@@@@@@@@@@\
.?%#*T=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<,[]{}()|\Gabcdefghijkl7n+.?$#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{;()|\/abcdefghijklmn+.?%#*+=+~^<>[]{}()|\/abcdefghijGlmn+.?%#*+=-~^<>[]{}()|\/abcdefghijkl\
.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&d%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@/#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/AlCDEIG\
=<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%J+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<@***@%#+=~p<>[]{}()|\/123456789\
I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*|=~^<>[]{}()|\/!@#$%^&*()_++6%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+B~^<>[]{}()|\/!@#$%^&*()\
I8***%#*=~^<>[]{}()|\/qwertyuUopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^l>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8**\
I&@@@#*+~^<>N]{C()|\/zxcvbnm%kjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgfcI&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()H\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*B~^<>[]{}()|\/1xcvbnmlkjhgf+I&@@@#Y+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@\
I%$n$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+O%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$L*C=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/dWERTYUIOPAS2F+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|-/QWERTYUIOPASDF+I%$$\
IF&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXChBNMLKJHGF3+I8&&&+~^<>[]{}()|\/ZXC8BNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNaLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>#]{}()|\/ZXCVBIMLKJHGFD+I8&&&+~^<>[\
I%###=^<>[]{}()|\/!@#$%^&*()_$-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=&]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_d-=[]+I%#E#=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%##~=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%##\
I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}(H|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8*k*^<>[]{}()|\/`~123456b890-=[];+I8**\
I&@@@<>[]{}()|\/'".,<>?/abcdefghijTI&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}();\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&q@@<>[]{}()|\/'".,<>?/abcdefghijJI&@@v<>[]{}()|\/'".,<>?/abcde.ghij+I&@@@<>[]{}()e\/'".,<>?/abcdefghij+I&@@\
.<%$$[]{}()|\/ABCDEFGHIJvLMNOPQRST+.<%$$[]{}()|\/ABCDELGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABC0EFGHIJKLMNOPQRST:.<%$$[]{}()|\/ABCDEFHHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIoKLMNOPQRST+.<%V$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$\
.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234567S90!@#$%^&*()_+.+B**{}()|\/1d34567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/R234567890!@#$%^&*()_+.+B**{}()|\/123416789L!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\\
.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\yqwertyuiopasdfghjklzxcv+.?%##()|\/q@ertyuiopasdfghjklzxcv+.?%#T()|\/qwertyuiopasdfghjklzxcvG.?%P#()|\/qwertyuiopasdfghjklzxcv+.*%##S)|\/qwe2tyuiopasdfghjklzxcv+.?%##()|\/q\
&@@@@@@@K@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@,@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-&7@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@J@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@M@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@\
@@@@@@@@@@@O@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@I@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@s@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@m@-@@@@@.@@@@@@@@@@@@@2@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@\
.?%#*+=-~^<>[]{}()|\/abcdefghijklIn+.?%#*+=-~^<>[]{}()M\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklon+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijkl\
.QB$$$&@%#*+g~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$=$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}o)|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{G()|\/AB5DEFGHI+D+B&$$&@%#*+=~^<>[]{}()|\/ABCDEFG\
.<C**K@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567x90$+V<C***@%#+=~^<>[]{}()|\/1234567890$;.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~6<>[]{}()|\91234567890G+.<C***@%#+=~^<>[]2}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/123456789\
I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\8!@#$%^&*()_++I%#%#@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^U>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I.###@%*+=~^<>[]{}()|\/!@#$%^&*()\
I8***%#*=~^<>[]{}():\/qwertyuiopas+I8***%#*3~^<>[]{}()|\/q:ertyuiopas+I8*&*%#*=~^<>7]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***W#*=~^<>[]{}()|\/qwert3uUopas+I8***%#*=~^<>[]c}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\2qwertyuiopas+I8**\
I&@@@#*+~^<>[]{}()|\/zccvbnmlkjhgf+I&@e@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}(1|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@\
I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIlPASDF+I%$$$*i=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()-\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF,I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$\
I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZX4VBNMZKJHGFD+Iw&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~H<>[]{}(T|\/ZXCVBNMLKJHGFD+I8&&&;~^<>[]{}()|\/ZXCVBN&LKJHGFD+I8&&&+~^<>[@{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^IW[n{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[\
I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%##.=^<>[]{}()|\/!@#$%F&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^3*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%##\
I8***^<k[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[*;+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<xJ]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8@**^<>[]{}()|\0`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8**\
I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij6I&@@@<>[]{}()|\/'"6,<>?/abcdefghij+I&@@@<>[]{}(8|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+IV@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@\
.<%$$[]{}(v|\/ABCDEFGHIJKLMNOPQRST+.<%$$7]{}()|\/ABCDEFGHI;KLMNOPQRST+.<%$O[]{}()|\/ABCDEFGHIJKLMNOPQRSTp.<%$$[]{}()|\/ABCMEFGHIJKLMNOPQRST+.<%$D[]{}()|\/ABCDEFGHIJKLM5OPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPARST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOP_RST+.<%$\
5+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/Z234567890!@#$%^&*()_+.+B**{}()|\/12345678o0!@#$%^&*()_+.+B**{x()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1,345k7890!@#$%^&*b)_+.+B**{}()|\\
.?%##()|\/qwertyuiopasdfghjklzxcv+.?%P#()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyxiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxc++.?%#g\)|\/qwertyuiopasdfghjklzxcv+D?%##()|\/qFertyuiopasdfghjklzxcv+.?%##(i|\/qwertyuiopasdfghjklzxcv+.?%##()|\/q\
&@@@@@@@@@@@@@@@@@@@@@+@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@_@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@z@@@@@@@@@@@@@.&@@@@@@@@@@@3@=@@@@@T@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@p@@@2@c@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@\
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@q@@@@@f@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@d.@@@@@@@@@@@@@@@@@@@@@\
.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.4%#*+=-~^<>[]{l()|\/abcdefghijklmn+.?%#*+=-~^<>a]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefg:ijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijkl\
.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\EABCDEFGHI+~+B$$$&@%#*+=~^<>[]{}(R|\/ABCDEwGHId.+B$$$&@%#*+=~^7B[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]r}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFG\
.<C***@%#+=~^<>[]R}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()C4/1234567J90$+.<C***@%#+=~^<>[]{}()|\=1234567890$+.<C***@%#+=~^<>[]{}()|\/1234n6-890$+.<C**U@%#+=~^<>[]{}()|\/123456789\
I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@O$%^&*()_++I%###@%*+=*^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%m&*()_++I%###@\*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()\
I8***%#*\~^<>[]{}(B|\/qweXtyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8*i*%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwerYyuiopas+I8***%#*=~^<>[]{}()|\/qwertyyiopas9I8***%#*=~^<>[]{}()|\/q~ertyuiopas+I8***%#*=~^<>[]{}()|\/qwert_uiopas+I8**\
I&@@B#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbSmlkjhef+I&@@@#*+~^<>[h{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/z~cvbnmlkjhgf+I&@@@#*+~^<>n]{}()|\/zx|vbzmlkjhgf+5&@@\
I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+j^<>[]{}()|\/QWER$YUIOPASDF.I%$$$*0=^P>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$Ay*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QzERTYUIOPASDF+I%$$\
I8&&&+~^<>[]{}()|\/ZXCVBNMLKJH9FD+I8&&&+X^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|U/ZXCABNMLKJHGFD+I&&&&+~^<>[]{}()|\/4XCVBNML+JHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<3[\
I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>O]{}()|\/!@#$%^&*()_+-=[J+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+IE###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%##\
I8***^<>[]{}()|\/`~1234567890&=2];+I8***^<>[]{}()|\/`~123456g8k0-=[];+I8***^<>[]{}()|\/`~1234567890-=j];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\&`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8**\
I&@@@<>[]{}()|\/'".,<>?%abcdefghij+I&@@@<>[]{}()|\/'"b,<>?/ab_defghij+I&@@J<>[]o}()|\/'".,<>?/gbcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdeBghij+I&@@@<>[]{}Z)|\/'".,<>?/abcdefgWij+I&@@@<>[]{}()|\/'".i<>?/abcdefgh-j+I&@@@<>[]{}()|\/'".,&>?/abcdefghij+I&@@\
.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEdGHIJKLMNOPQRSTE.<%$$[]{}()|~/ABCDENGHIJKLMCOPQRSG+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%E$[]{/()|\/ABCDEFGHIJKLMNOPQRST+.<%$\
.+B**{}()|\/12345.7890!@#$%^&*()_+.+BB*{9()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234567890!1#$%H&*()h+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234567890!@@$%^&*()_+.+9**{}()|\\
.?%##()|\Aqwertyuiopasdfghjklzxcv+.?%##(E|\/qwertyuioMasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcr+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopDsdfghjklzxcv+.?9##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/q\
&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@s@@@.&@@@@@@@@@@@@@@@@@M@@@@@@@@@@@@@#@@@@.&@@t@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@u@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@|@@@@@\
@@@@@@@@@@0@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@a@@@@@@@@@@@@/@@@@@.@@@1@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@.@@@@@@@@@@@@@@s@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@\
.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#7+=-~G<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{8()|\/a0cdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/a=cdefghijkl\
.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+2$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~W<>[]{}()|\/A\CDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+%$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B8$$&@%#*+#~^<>[]f}()|\/ABCDEFG\
.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C**M@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+V~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>~]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\N1234567890$+.<C***@%#+=~^<>[]d}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/123456789\
I%###@%*+=~^<>[]{}()|\/!@#$Y^&*()_++I%###@%*+=~^<>[]{W()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!,#$%^&*()_++I%###@%*+=~^<>[]{}()|i/!g#$%^/*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()\
I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8R**%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8**j%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*1~^m>[]{}()|\/qwertyuiopas+I8***%#Y=~^<>[]{}()|\/qwerty1iopas+I8***%#*=~^<>X]{}()|\/qwertyuio9as+I8**\
I&@1@#*+D^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbMmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+o&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@\
I%$$$*+=^<>[]{}()|\/QWERTjUIOPASDF+I%$$$*+=^<>[]I}()|\/QWERTYUIOPASDF@I%$$$*+=e<>[]{}()|\/QWERTYUIOPASDF+U%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$/*+=^<w[]{}()|\/QWERTYUIOPASDF+I%$E$*+=^<>[]{}r)|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDFMI%$$\
I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHG7D+I8&&&n~^<>[]{}()|\/ZXCVBNM&p8HGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()q\/ZXCVBNMLKJHGFD+I8&&&+~^<>[\
I%###=^<>[]{}()|\/!@#$%^&*()_+-5[]+I%3##=^<p[]{}()|\/!@#$%^&*M)_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^e>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$l^&*()_+-=[]+I%###=^E>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%##\
I8**d^<>[]{}()|\/`~1233567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8*x*^<>[]{}()|\/`~1234567890W=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~123456S890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1t*4567890-=S];+I8**\
I&@@@<>[]{}()|4/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abedefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@\
.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRxT+.<%$$[]{}()|\/ABCDEFGHNJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}J)|\/ABCDEFCHIJKgMNaPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKL4NOPQRST+.<%$\
.+B**{}()|\/123456f890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*%)_+.+B**{}()|\/12345%7890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/b234567890!@#$%I&*()_+.+B**{}()|\\
.?%##()|\/qwertyuiopawdfghJklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/owertyuiopasdfghjklzxcv+.?%##()|\/qwertyufopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##(y|\/qwertyuiopasdfgHjklzxcv+.?%##()|\/q\
&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@-@@@@@@@@@@@9@@@@+@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@s@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@\
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@F@.@@@@@@@@@@@~@@@@@@@@@@@@@@@@@@@@a@,@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@L@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@A@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@\
.?%#*+=-~^<>[]{}()|~/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()o\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijkl\
.+B&$$&@%#*+=~^&>[]{}()|\/ABCDEAGHI+.+B$$$&@%#*+=~^<>s]{}()|\/A5CDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&Y%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[${}()|W/ABCDEFG\
.<C***@%#+=~^<>[]{}A)|\/1234567890$+w<C***@%#+=~^<>[]{}()|\/123456789Y$+.<C***@%#+=~^<>[]{}()|\/1234567890$6.<C***@U5+=~^<>[]{}()|\/G234567890$+.<C***@%#N=~^<>[]{}()|\/123456789o$+.<C***@%#+=~^<>[]{}()5\/1234567890$+.<C***@%#+=~^<>[]{}()|\/12345~~89\
I%###L%n+=~^<>[]{9()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}+K|\/!@#$x^&*()X++I%###@%*+=~^<>/]{}()|\/!@#$%^&*()_+DI%###@%*+=~^<>[]{}()|\&!@#$%^&*(pH++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~E<>[]{}()Q\/!@#$%^&*()\
I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>I]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyui_p%s+I8***%#*=~^<>[]{}(\|\/qwertyuiopas+I8***%#*=~^f>K]{}()|\/qwertyuiopas+I8***%#*=~E<>[]{}()|\/qwertyuiopas+I8**\
I&@@@#*+~^<>u]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcv;nmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@\
7%$$$*+=^<>[]{}()|\/QWERTYUIOPmRDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOP_SzF+Z%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]P}()|\/8WERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPAS+F+I%$$\
I8&&&+~C<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|e/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^Q>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[\
I%##+=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[-{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%^&*8)_+-=[]+I%##\
I8***^<>[]{}()n\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8**T^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{_()|\/`~1234567890-=[];+I8***^<>[]{}()|\1`~1234567890-=[];+v8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8**\
I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'o.,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/aqcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".z<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@\
.<%$$[]{}(z|\/ABCDEFGHIJKLMNOP:RST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}(S|\/ABCDEFGHIJKLMNOPQPST+.<%y$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$\
.+B**{}()|\/1234567890!@#$V^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+P+B**x}()|\/1234567890!@#B%^&*()_+.+B**{}()|\/12K4567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/123456789|!@#$%^&*()_-.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\\
.?%##()|\/qwertyuiopasdCghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyucopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##(C|\/qwertyuiopaidfghjklzxcv+.?%##()|\/qwurtyuiopasdfghjklzfcv+.?%##()|\Jq\
&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@G@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@8@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.9@@@@@@@@@@@@@@@@@@@@@@@r@@@@@@@@@@@@.&@@@@@@@@@I@@@@@@@@@@@@@@@@@@@Q@@@@@@.&@@@@@@@@@@@@@@@@@@@@\
@@@@@@@@@%@@@@@@@@@@@@@@@@@@@@@#@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@#@@@@@@@@@@@@@@@g@@@@@.@@@@@@@@@@@@~@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@V@@@@@@@@@@@.@@@@@@@@@@@@@@@4@@@@@\
.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+w?%#*+=-~^<>[]{}L)|\/abcdefghijklmn+.?%#*+=-~^<>Z]{}()F\/abcdefghijklmn+.?k#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghiXklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}(0|\/abcdefghijkl\
.+B$$$&@%#*+=~^\>[]{}()|\/AUCDEWGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%@*+=B^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=~|<>[]{}()|\/ABCiEFG\
.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C=**@%#+=~^<>[]{}()|\/1234567890$+.<u***@%#+=~^<>o]{}()|\/1234567890$+.+C***+%#+=~^T>[]{}()|\/1234567890$+.<C***@%#+=T^<>[]{}()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/12W4567890$+.<C***@%#+=~^<>[]{}()|\/123456789\
I%###@%*+=~^<>P]{}()|\/!@#$%^&*()_++I%###@%*+=~^<#[]{}()|\/!@#x%^&*()_++I%###@%*+=~V<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}N)|\/!@#$%^&b()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<b[]{}(q|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()\
I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyu.opas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I8***%#*=~^<>[]{}()|\/qwertyuiopas+I+***%#*=~^<>[]{}()|\/qwertKuiopas+I8**\
IM@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^l>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkRhgf+I&@@@#*+~^<>[]{}()|\/zxcvbnml|jhof+I&@@@#*+~^<>[]{}()|\/zxcvbnmlkjhgf+I&@@@#*+~^<>[]{2()|\/zxcvbn/lkjhgf+I&@@@#*+~^<>[]{}()|\/zxcibnmlkjhgf+I&@P\
I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$O+=^P>[]{}(E|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYU$OPASDF+I%$$$*+=^#>[]K}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTYUIOPASDF+I%$$$*+=^<>[]{}()|\/QWERTjUIOPpSDFtI%$#\
I8&&&+~^<>Z]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<h[]{}()|\/ZXCVBNMLKJHGFD+I8&&~+~^<>Pd{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[v{}()|\/ZXCVBNMLKJHGFD+I8&&&+~^<>[]{}()|\mZ@CVBNMLKJHGFD+I8&&&+~^<>[]{}()|\/ZXCVBNMLKJHGFDdI/&&&+~^<>[\
I%###=^<>[]{}()|\/!@#$%^&*()Y+-=[]+I%###=^<>[]{}()|\/!@#$%^&*()_+-=[]+I%###=^<>[]{}()|\/!@#$%3&*()_+u=[]+I%###=^<>[]{}()|\/!@y$%^&*()_+-=[]+I%###=^<>X]{}()|\/!@#$%^_*()_+w=[]+I%###=^<>[]{}(,|\/!@#$%^&*()_+-=[]+I%###3^<>[]{}()|\/!@#$%^&*()_+\=[]+I%##\
I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<T[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[];+I8***^<>[]{}()|\/`~1234567890-=[8;+I8***^2>[]{}()|\/`~1@34567890-=[];+I8***^<>[]{}()|\/`O1234567860-=[];+I8***^<>[]{}(T|\/`~1234567890-=z];+I8**\
I-@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@H@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghgj+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@@<>[]{}()2\/'".,f>?/abcdefghij+I&@@@<>[]{}()|\/'".,<>?/abcdefghij+I&@@\
.<%$$[]{}()|\zABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\7ABVDEFGHIJKLMNOPQRST+.<%v$[]{}()|\/ABCD@FGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCDEFGHIJKLMNOPQRST+.<%$$[]{}()|\/ABCD7FGHIJKLjNOPQWST+.<%$$[]{}()|\/ABCDEF+HIJKLMNOPQRSj+.<%$\
.+B**{}()|\/1234567890!@#$%^&*()_+.+B/*{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^I*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|\/123456789l!@#$%^&*()_+.+B**{}()|\/1234567890!@#$%^&*()_+.+B**{}()|w\
.?%##()|\Pqwertyuiopasdfghjklzxcv+.?%##()|\/qwertyu/opasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.W%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\\qwertyuiopasdfghjklzxcv+.?%##()|N/qwertyuiopasdfghjklzxcv+.?%##()|\/qwertyuiopasdfghjklzxcv+.?%##()|\/q\
&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@S@@@.p@@@@@@@@@@@@@6@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@A@@@@@@@@@@@@@@@.&@@@@@@@@@@@@@@@@@@@@\
@@@@@@@@@@@@@@@@@@@s@@@@@@@@@@@@@@@@@Y@@@@@@@@q@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@F@@@@@@@E@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@X@m@@@Z@@L@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.@@@@@@@@@@@@@@@@@@@@@\
.?%#*+=-~^<>[]{}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()j\/abcdefghijklmn+.?%#*+=$~^<>i]0}()|\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abcdefghijklmn6.?%#*+=-~^<>[]{}()2\/abcdefghijklmn+.?%#*+=-~^<>[]{}()|\/abc@efghijklmn+.?%#*+=-~^<>[]1}()|\/abcdefghijkl\
|+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+.+B$$$&@%#*+=i^<>[]{}3)|\/ABCDEFGHI+.+c$g$&@%#*+=~^<>[]{}()w\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDEFGHI+Q9B$$$&@%#*+=~^w>[]{}@)|\/ABCDEFGHI+.+B$$$&@%#*+=~^<>[]{}()|\/ABCDE*GHI+.+B$$$&@%#*+=~^<>[]{}()|\/P_CDzFG\
.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~x<1[]{}()|\/1234567z90$+.<C***@%#+=~^<>[]{}()|\/1234567890$X.<C***@%#+=~^<>[]{3()|\/1234567890$+.<C***@%#+=~^<>[]{}()|\/123~567890$+.<C***@%#+=~^<>[]{}()|\/1234567890$+.<C***@%#+=~^<T[]{}(f|\/123456789\
I%###@%*+=~^<>[]{}()|\+!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<+[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++\%###@%*+=~^<>[]{}Z)|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()_++I%###@%*+=~^<>[]{}()|\/!@#$%^&*()\
```\
\
\
\
## Join the community\
\
Connect with GPU kernel developers\
\
[JOIN DISCORD](https://discord.gg/sSJqgNnq6X)\
\
## Now Available\
\
Download RightNow Editor\
\
Download our editor and start optimizing your CUDA kernels today.\
\
## Windows\
\
Download\
\
Windows x64\
\
For Windows 11/10 x64\
\
Windows ARM\
\
For Windows 11/10 ARM\
\
Requires NVIDIA CUDA Toolkit [Download](https://developer.nvidia.com/cuda-downloads)\
\
## Mac\
\
Download\
\
Mac Apple Silicon\
\
For M1, M2, M3, M4 Macs\
\
Mac Intel\
\
For Intel-based Macs\
\
Works on remote GPUs for free or our GPU emulator [Upgrade](/content/pricing/index.html)\
\
## Linux\
\
Download\
\
Linux x64\
\
AppImage • Debian, Ubuntu, Fedora\
\
Linux ARM\
\
AppImage • ARM64 distributions\
\
Requires NVIDIA CUDA Toolkit [Download](https://developer.nvidia.com/cuda-downloads)