Function at 0x496fa0
Capabilities:
Encrypt data using rc4 prga

Disassembly:
push ebp
mov ebp, esp
push ebx
push edi
push esi
sub esp, 0x58
mov edi, dword [ebp + 8]
movzx edx, byte [edi]
cmp dl, 0x80
je 0x496fcb
mov ah, byte [edi + 9]
movsd xmm0, qword [edi + 1]
mov al, byte [edi + 0xa]
movzx ecx, byte [edi + 0xb]
mov byte [ebp - 0x50], ah
movsd qword [ebp - 0x58], xmm0
mov ebx, dword [edi + 0x1c]
mov esi, dword [edi + 0x18]
mov dword [ebp - 0x28], ebx
movzx ebx, byte [edi + 0xc]
cmp bl, 0x80
je 0x496ff3
mov ah, byte [edi + 0x15]
movsd xmm0, qword [edi + 0xd]
mov ch, byte [edi + 0x16]
mov dh, byte [edi + 0x17]
mov byte [ebp - 0x5c], ah
movsd qword [ebp - 0x64], xmm0
movsd xmm0, qword [ebp - 0x58]
mov byte [ebp - 0x48], dl
mov bh, byte [ebp - 0x50]
mov ah, byte [ebp - 0x5c]
mov dword [ebp - 0x10], esi
cmp dl, 0x80
mov byte [ebp - 0x13], bl
mov byte [ebp - 0x12], ch
mov byte [ebp - 0x11], dh
movsd qword [ebp - 0x47], xmm0
movsd xmm0, qword [ebp - 0x64]
mov byte [ebp - 0x3f], bh
mov byte [ebp - 0x3e], al
mov byte [ebp - 0x3d], cl
mov byte [ebp - 0x3c], bl
mov byte [ebp - 0x33], ah
movsd qword [ebp - 0x3b], xmm0
mov byte [ebp - 0x32], ch
mov byte [ebp - 0x31], dh
mov dword [ebp - 0x30], esi
mov esi, dword [ebp - 0x28]
mov dword [ebp - 0x2c], esi
je 0x497084
movzx ebx, cl
movzx edi, al
cmp edi, ebx
mov dword [ebp - 0x4c], ebx
cmova ebx, edi
cmp al, cl
jae 0x497084
mov eax, dword [ebp + 0xc]
mov ecx, dword [eax + 0x14]
mov eax, dword [eax + 0x18]
mov esi, dword [eax + 0x10]
mov dword [ebp - 0x18], ecx
movzx eax, byte [ebp + edi - 0x48]
push eax
push dword [ebp - 0x18]
call esi
add esp, 8
test al, al
jne 0x497079
inc edi
cmp ebx, edi
jne 0x497060
jmp 0x497084
cmp edi, dword [ebp - 0x4c]
mov al, 1
jb 0x497256
mov ebx, dword [ebp - 0x10]
test ebx, ebx
je 0x4971f2
cmp ebx, dword [ebp - 0x28]
je 0x4971f2
mov eax, dword [ebp + 0xc]
mov edi, dword [eax + 0x14]
mov eax, dword [eax + 0x18]
mov dword [ebp - 0x18], eax
movzx eax, byte [ebx]
test al, al
js 0x4970c0
inc ebx
mov dword [ebp - 0x10], ebx
jmp 0x497120
movzx esi, byte [ebx + 1]
mov ecx, eax
and ecx, 0x1f
and esi, 0x3f
cmp al, 0xdf
jbe 0x497104
movzx edx, byte [ebx + 2]
shl esi, 6
and edx, 0x3f
or edx, esi
cmp al, 0xf0
jb 0x497113
movzx eax, byte [ebx + 3]
and ecx, 7
shl edx, 6
shl ecx, 0x12
and eax, 0x3f
or eax, edx
or eax, ecx
cmp eax, 0x110000
je 0x4971f2
add ebx, 4
jmp 0x4970ac
shl ecx, 6
add ebx, 2
or ecx, esi
mov dword [ebp - 0x10], ebx
mov eax, ecx
jmp 0x497120
shl ecx, 0xc
add ebx, 3
or edx, ecx
mov dword [ebp - 0x10], ebx
mov eax, edx
mov edx, eax
mov byte [ebp - 0x20], 0
mov word [ebp - 0x22], 0
mov ecx, eax
shr edx, 0x14
or ecx, 1
movzx edx, byte [edx + str.0123456789abcdefEscapeDefaultBorrowErroralready_mutably_borrowedBorrowMutErroralready_borrowedalready_borrowed:]
bsr ecx, ecx
xor ecx, 0x1c
shr ecx, 2
lea ebx, [ecx - 2]
mov byte [ebp - 0x1f], dl
mov edx, eax
shr edx, 0x10
and edx, 0xf
movzx edx, byte [edx + str.0123456789abcdefEscapeDefaultBorrowErroralready_mutably_borrowedBorrowMutErroralready_borrowedalready_borrowed:]
mov byte [ebp - 0x1e], dl
mov edx, eax
shr edx, 0xc
and edx, 0xf
movzx edx, byte [edx + str.0123456789abcdefEscapeDefaultBorrowErroralready_mutably_borrowedBorrowMutErroralready_borrowedalready_borrowed:]
mov byte [ebp - 0x1d], dl
mov edx, eax
shr edx, 8
and edx, 0xf
movzx edx, byte [edx + str.0123456789abcdefEscapeDefaultBorrowErroralready_mutably_borrowedBorrowMutErroralready_borrowedalready_borrowed:]
mov byte [ebp - 0x1c], dl
mov edx, eax
and eax, 0xf
shr edx, 4
movzx eax, byte [eax + str.0123456789abcdefEscapeDefaultBorrowErroralready_mutably_borrowedBorrowMutErroralready_borrowedalready_borrowed:]
and edx, 0xf
movzx edx, byte [edx + str.0123456789abcdefEscapeDefaultBorrowErroralready_mutably_borrowedBorrowMutErroralready_borrowedalready_borrowed:]
mov byte [ebp - 0x1b], dl
mov byte [ebp - 0x1a], al
mov byte [ebp - 0x19], 0x7d
mov word [ebp + ecx - 0x24], 0x755c
mov byte [ebp + ecx - 0x22], 0x7b
mov ecx, dword [ebp - 0x18]
movsd xmm0, qword [ebp - 0x22]
movzx eax, word [ebp - 0x1a]
movsd qword [ebp - 0x48], xmm0
mov word [ebp - 0x40], ax
mov esi, dword [ecx + 0x10]
nop word [eax + eax]
movzx eax, byte [ebp + ebx - 0x48]
push eax
push edi
call esi
add esp, 8
test al, al
jne 0x497249
inc ebx
cmp ebx, 0xa
jne 0x4971d0
mov ebx, dword [ebp - 0x10]
cmp ebx, dword [ebp - 0x28]
jne 0x4970a4
cmp byte [ebp - 0x13], 0x80
je 0x497254
movzx eax, byte [ebp - 0x12]
movzx ecx, byte [ebp - 0x11]
movzx ebx, cl
movzx esi, al
cmp esi, ebx
mov dword [ebp - 0x10], ebx
cmova ebx, esi
cmp al, cl
jae 0x497254
mov eax, dword [ebp + 0xc]
mov ecx, dword [eax + 0x14]
mov eax, dword [eax + 0x18]
mov edi, dword [eax + 0x10]
mov dword [ebp - 0x18], ecx
nop word cs:[eax + eax]
nop dword [eax + eax]
movzx eax, byte [ebp + esi - 0x3c]
push eax
push dword [ebp - 0x18]
call edi
add esp, 8
test al, al
jne 0x49724d
inc esi
cmp ebx, esi
jne 0x497230
jmp 0x497254
mov al, 1
jmp 0x497256
cmp esi, dword [ebp - 0x10]
mov al, 1
jb 0x497256
xor eax, eax
add esp, 0x58
pop esi
pop edi
pop ebx
pop ebp
ret