Function at 0x437490
Capabilities:
Encrypt data using rc4 prga

Disassembly:
push ebx
mov ebx, esp
sub esp, 8
and esp, 0xfffffff8
add esp, 4
push ebp
mov ebp, dword [ebx + 4]
mov dword [esp + 4], ebp
mov ebp, esp
sub esp, 0x30
push esi
push edi
mov edi, dword [ebx + 0xc]
mov esi, ecx
mov dword [ebp - 0x10], esi
cmp edi, 3
jl 0x437890
mov ecx, dword [ebx + 0x10]
test ecx, 0xff000000
je 0x437890
test byte [esi + 0x24], 4
mov eax, dword [esi + 0x2c]
movss xmm0, dword [eax]
movss dword [ebp - 0x1c], xmm0
movss xmm0, dword [eax + 4]
movss dword [ebp - 0x20], xmm0
je 0x4377ee
movss xmm1, dword [esi + 0x88]
lea eax, [edi + edi]
push eax
mov dword [ebp - 0x2c], eax
and ecx, 0xffffff
lea eax, [edi*8 - 6]
mov dword [ebp - 0x24], ecx
add eax, edi
movss dword [ebp - 0xc], xmm1
push eax
mov ecx, esi
call fcn.004365f0
mov edx, dword [esi + 0x28]
mov ecx, 2
mov dword [ebp - 8], edx
mov dword [ebp - 0x18], ecx
cmp edi, ecx
jle 0x43755c
nop dword [eax + eax]
mov eax, dword [esi + 0x34]
mov word [eax], dx
lea edx, [edx + ecx*2]
mov eax, dword [esi + 0x34]
lea ecx, [edx - 2]
mov word [eax + 2], cx
mov eax, dword [esi + 0x34]
mov ecx, dword [ebp - 0x18]
inc ecx
mov dword [ebp - 0x18], ecx
mov word [eax + 4], dx
add dword [esi + 0x34], 6
mov edx, dword [ebp - 8]
cmp ecx, edi
jl 0x437530
mov eax, dword [esi + 0x2c]
mov dword [ebp - 0x18], eax
cmp edi, dword [eax + 0x34]
jle 0x437588
mov ecx, dword [eax + 0x38]
test ecx, ecx
je 0x437573
call fcn.0040ee10
lea ecx, [edi*8]
call fcn.0040ed70
mov ecx, dword [ebp - 0x18]
mov dword [ecx + 0x38], eax
mov dword [ecx + 0x34], edi
mov eax, dword [esi + 0x2c]
mov edx, dword [eax + 0x38]
lea eax, [edi - 1]
mov dword [ebp - 0x28], edx
mov dword [ebp - 0x14], eax
test edi, edi
jle 0x437630
movss xmm5, dword [0x658070]
lea ecx, [eax*8]
mov eax, dword [ebx + 8]
xorps xmm6, xmm6
xor esi, esi
nop word [eax + eax]
movss xmm3, dword [eax + esi*8 + 4]
lea edi, [esi*8]
movss xmm2, dword [eax + esi*8]
subss xmm2, dword [ecx + eax]
subss xmm3, dword [ecx + eax + 4]
mov dword [ebp - 4], edi
lea edi, [eax + 4]
mov dword [ebp - 0x18], edi
mov edi, dword [ebx + 0xc]
movaps xmm0, xmm2
movaps xmm4, xmm3
mulss xmm0, xmm2
mulss xmm4, xmm3
addss xmm4, xmm0
comiss xmm4, xmm6
jbe 0x437615
movaps xmm1, xmm4
rsqrtss xmm1, xmm1
movaps xmm0, xmm1
mulss xmm1, xmm3
mulss xmm2, xmm0
movaps xmm3, xmm1
xorps xmm2, xmm5
movss dword [ecx + edx], xmm3
inc esi
movss dword [ecx + edx + 4], xmm2
mov ecx, dword [ebp - 4]
cmp esi, edi
jl 0x4375c0
lea ecx, [eax + 4]
jmp 0x437639
mov eax, dword [ebx + 8]
lea ecx, [eax + 4]
mov dword [ebp - 0x18], ecx
mov esi, dword [ebp - 0x10]
mov dword [ebp - 4], 0
test edi, edi
jle 0x4377da
movss xmm2, dword [ebp - 0xc]
movss xmm5, dword [0x657ab4]
movss xmm6, dword [0x657a5c]
movss xmm7, dword [0x657af8]
mulss xmm2, xmm5
mov dword [ebp - 0x10], edx
sub dword [ebp - 0x10], eax
lea eax, [edi - 1]
movss dword [ebp - 0xc], xmm2
nop word [eax + eax]
mov edi, dword [ebp - 4]
movss xmm3, dword [edx + edi*8]
mov edi, dword [ebp - 0x10]
addss xmm3, dword [edx + eax*8]
movss xmm4, dword [edi + ecx]
addss xmm4, dword [edx + eax*8 + 4]
mov edi, dword [ebx + 0xc]
mulss xmm3, xmm5
mulss xmm4, xmm5
movaps xmm0, xmm3
mulss xmm0, xmm3
movaps xmm1, xmm4
mulss xmm1, xmm4
addss xmm1, xmm0
comiss xmm1, xmm6
jbe 0x4376db
movaps xmm0, xmm7
divss xmm0, xmm1
movss xmm1, dword [0x657b74]
minss xmm1, xmm0
movaps xmm0, xmm1
mulss xmm4, xmm1
mulss xmm3, xmm0
movss xmm0, dword [ecx - 4]
mov eax, dword [esi + 0x30]
movss xmm1, dword [ebp - 0xc]
mulss xmm2, xmm3
mov edx, dword [ebx + 0x10]
movss xmm3, dword [ebp - 0x1c]
mulss xmm1, xmm4
movss xmm4, dword [ebp - 0x20]
subss xmm0, xmm2
movss dword [eax], xmm0
movss xmm0, dword [ecx]
mov eax, dword [esi + 0x30]
subss xmm0, xmm1
movss dword [eax + 4], xmm0
mov eax, dword [esi + 0x30]
movss dword [eax + 8], xmm3
movss dword [eax + 0xc], xmm4
mov eax, dword [esi + 0x30]
mov dword [eax + 0x10], edx
addss xmm2, dword [ecx - 4]
mov eax, dword [esi + 0x30]
movss dword [eax + 0x14], xmm2
movss xmm0, dword [ecx]
mov eax, dword [esi + 0x30]
addss xmm0, xmm1
mov ecx, dword [ebp - 0x24]
movss xmm2, dword [ebp - 0xc]
movss dword [eax + 0x18], xmm0
mov eax, dword [esi + 0x30]
movss dword [eax + 0x1c], xmm3
movss dword [eax + 0x20], xmm4
mov eax, dword [esi + 0x30]
mov dword [eax + 0x24], ecx
mov eax, dword [ebp - 4]
mov ecx, dword [ebp - 8]
add dword [esi + 0x30], 0x28
lea edx, [ecx + eax*2]
mov eax, dword [esi + 0x34]
mov word [eax], dx
mov eax, dword [ebp - 0x14]
lea ecx, [ecx + eax*2]
mov eax, dword [esi + 0x34]
mov word [eax + 2], cx
mov ecx, dword [ebp - 0x14]
mov eax, dword [esi + 0x34]
lea ecx, [ecx*2 + 1]
add ecx, dword [ebp - 8]
mov word [eax + 4], cx
mov eax, dword [esi + 0x34]
mov word [eax + 6], cx
mov ecx, dword [ebp - 4]
mov eax, dword [esi + 0x34]
lea ecx, [ecx*2 + 1]
add ecx, dword [ebp - 8]
mov word [eax + 8], cx
mov eax, dword [esi + 0x34]
mov ecx, dword [ebp - 0x18]
add ecx, 8
mov dword [ebp - 0x18], ecx
mov word [eax + 0xa], dx
mov edx, dword [ebp - 4]
mov eax, edx
add dword [esi + 0x34], 0xc
inc edx
mov dword [ebp - 4], edx
cmp edx, edi
mov edx, dword [ebp - 0x28]
mov dword [ebp - 0x14], eax
jl 0x437680
mov eax, dword [ebp - 0x2c]
movzx eax, ax
add dword [esi + 0x28], eax
pop edi
pop esi
mov esp, ebp
pop ebp
mov esp, ebx
pop ebx
ret 0xc
lea eax, [edi - 2]
mov ecx, esi
push edi
lea eax, [eax + eax*2]
push eax
call fcn.004365f0
test edi, edi
jle 0x437844
movss xmm0, dword [ebp - 0x1c]
movss xmm1, dword [ebp - 0x20]
mov edx, dword [ebx + 8]
mov edi, dword [ebx + 0xc]
mov ecx, dword [esi + 0x30]
lea edx, [edx + 8]
mov eax, dword [edx - 8]
mov dword [ecx], eax
mov eax, dword [edx - 4]
mov dword [ecx + 4], eax
mov eax, dword [esi + 0x30]
mov ecx, dword [ebx + 0x10]
movss dword [eax + 8], xmm0
movss dword [eax + 0xc], xmm1
mov eax, dword [esi + 0x30]
mov dword [eax + 0x10], ecx
add dword [esi + 0x30], 0x14
sub edi, 1
jne 0x437811
mov edi, dword [ebx + 0xc]
mov edx, 2
mov dword [ebp - 0x20], edx
cmp edi, edx
jle 0x43788a
mov ecx, dword [esi + 0x34]
mov ax, word [esi + 0x28]
movzx edx, dx
mov word [ecx], ax
movzx ecx, word [esi + 0x28]
mov eax, dword [esi + 0x34]
dec cx
add cx, dx
mov word [eax + 2], cx
movzx ecx, word [esi + 0x28]
mov eax, dword [esi + 0x34]
add cx, dx
mov edx, dword [ebp - 0x20]
inc edx
mov dword [ebp - 0x20], edx
mov word [eax + 4], cx
add dword [esi + 0x34], 6
cmp edx, edi
jl 0x437850
movzx eax, di
add dword [esi + 0x28], eax
pop edi
pop esi
mov esp, ebp
pop ebp
mov esp, ebx
pop ebx
ret 0xc