Function at 0x4ae6a0
Capabilities:
Encrypt data using rc4 ksa
Resolve function by parsing pe exports

Disassembly:
sub esp, 0x54
push ebx
push ebp
mov ebp, dword [esp + 0x6c]
xor ecx, ecx
push esi
push edi
mov edi, dword [esp + 0x80]
cmp edi, 0x10
sete cl
inc ecx
mov esi, ecx
imul esi, ebp
mov eax, esi
mov dword [esp + 0x10], esi
imul eax, dword [esp + 0x78]
mov dword [esp + 0x2c], eax
mov eax, dword [esp + 0x68]
mov eax, dword [eax]
mov eax, dword [eax + 8]
mov ebx, eax
imul ebx, ecx
mov ecx, dword [esp + 0x78]
mov dword [esp + 0x24], eax
mov dword [esp + 0x44], ecx
mov dword [esp + 0x18], ebx
test ecx, ecx
js 0x4af74e
mov eax, dword [esp + 0x7c]
test eax, eax
js 0x4af74e
je 0x4ae71a
xor edx, edx
mov eax, Ordinal_1
div dword [esp + 0x7c]
cmp ecx, eax
jg 0x4af74e
mov eax, dword [esp + 0x7c]
imul ecx, eax
test ecx, ecx
js 0x4af74e
test esi, esi
js 0x4af74e
je 0x4ae73f
mov eax, Ordinal_1
cdq
idiv esi
cmp ecx, eax
jg 0x4af74e
mov eax, dword [esp + 0x2c]
imul eax, dword [esp + 0x7c]
push eax
call fcn.005b7d4f
mov ecx, dword [esp + 0x6c]
add esp, 4
mov dword [ecx + 0xc], eax
test eax, eax
je 0x4af759
mov eax, dword [esp + 0x24]
test eax, eax
js 0x4af73a
mov ecx, dword [esp + 0x78]
test ecx, ecx
je 0x4ae78b
xor edx, edx
mov eax, Ordinal_1
div ecx
cmp dword [esp + 0x24], eax
jg 0x4af73a
mov eax, dword [esp + 0x24]
mov ecx, eax
imul ecx, dword [esp + 0x78]
mov dword [esp + 0x20], ecx
test ecx, ecx
js 0x4af73a
test edi, edi
js 0x4af73a
je 0x4ae7b9
xor edx, edx
mov eax, Ordinal_1
div edi
cmp ecx, eax
jg 0x4af73a
mov eax, ecx
imul eax, edi
cmp eax, 0x7ffffff8
jg 0x4af73a
mov eax, ecx
imul eax, edi
add eax, 7
shr eax, 3
mov dword [esp + 0x34], eax
inc eax
imul eax, dword [esp + 0x7c]
cmp dword [esp + 0x70], eax
jae 0x4ae7f8
pop edi
pop esi
pop ebp
mov dword [0x655470], 0x5faa24
xor eax, eax
pop ebx
add esp, 0x54
ret
mov eax, dword [esp + 0x7c]
xor edx, edx
mov dword [esp + 0x48], edx
test eax, eax
je 0x4af342
mov ebp, dword [esp + 0x6c]
mov dword [esp + 0x20], ecx
mov ecx, dword [esp + 0x68]
mov eax, edx
imul eax, dword [esp + 0x2c]
mov edi, dword [ecx + 0xc]
movzx ecx, byte [ebp]
inc ebp
add edi, eax
mov dword [esp + 0x60], eax
mov dword [esp + 0x14], edi
mov dword [esp + 0x30], ecx
cmp ecx, 4
ja 0x4af38a
cmp dword [esp + 0x80], 8
jge 0x4ae86a
mov eax, dword [esp + 0x74]
mov ebx, 1
imul eax, dword [esp + 0x78]
mov dword [esp + 0x18], ebx
sub eax, dword [esp + 0x34]
add edi, eax
mov eax, dword [esp + 0x34]
mov dword [esp + 0x14], edi
mov dword [esp + 0x44], eax
mov eax, edi
sub eax, dword [esp + 0x2c]
mov dword [esp + 0x1c], eax
test edx, edx
jne 0x4ae883
movzx ecx, byte [ecx + 0x64d06c]
mov dword [esp + 0x30], ecx
test ebx, ebx
jle 0x4ae95a
sub eax, ebp
mov edx, ebp
mov dword [esp + 0x28], eax
sub edi, ebp
mov esi, ebx
cmp ecx, 6
ja case.default.0x4ae89c
jmp dword [ecx*4 + 0x4af770]
inc edx
sub esi, 1
jne 0x4ae897
jmp 0x4ae94e
mov al, byte [edx]
lea edx, [edx + 1]
mov byte [edi + edx - 1], al
sub esi, 1
jne case.0x4ae89c.0
jmp 0x4ae94e
mov al, byte [edx]
lea edx, [edx + 1]
mov byte [edi + edx - 1], al
sub esi, 1
jne case.0x4ae89c.1
jmp 0x4ae94e
mov al, byte [eax + edx]
lea edx, [edx + 1]
add al, byte [edx - 1]
mov byte [edi + edx - 1], al
sub esi, 1
je 0x4ae94e
mov eax, dword [esp + 0x28]
jmp case.0x4ae89c.2
mov al, byte [eax + edx]
lea edx, [edx + 1]
shr al, 1
add al, byte [edx - 1]
mov byte [edi + edx - 1], al
sub esi, 1
je 0x4ae94e
mov eax, dword [esp + 0x28]
jmp case.0x4ae89c.3
mov cl, byte [eax + edx]
lea edx, [edx + 1]
xor al, al
cmp al, cl
sbb al, al
and al, cl
add al, byte [edx - 1]
mov byte [edi + edx - 1], al
sub esi, 1
je 0x4ae94e
mov eax, dword [esp + 0x28]
jmp case.0x4ae89c.4
mov al, byte [edx]
lea edx, [edx + 1]
mov byte [edi + edx - 1], al
sub esi, 1
jne case.0x4ae89c.5
jmp 0x4ae94e
mov al, byte [edx]
lea edx, [edx + 1]
mov byte [edi + edx - 1], al
sub esi, 1
jne case.0x4ae89c.6
mov eax, dword [esp + 0x1c]
mov edi, dword [esp + 0x14]
mov esi, dword [esp + 0x10]
mov ecx, dword [esp + 0x80]
cmp ecx, 8
jne 0x4ae995
mov ecx, dword [esp + 0x74]
mov edx, dword [esp + 0x24]
cmp edx, ecx
je 0x4ae976
mov byte [edi + edx], 0xff
lea edi, [ecx + eax]
add ebp, edx
mov ecx, dword [esp + 0x14]
mov edx, ebp
mov eax, dword [esp + 0x74]
add ecx, eax
mov dword [esp + 0x6c], ebp
mov dword [esp + 0x1c], edi
mov dword [esp + 0x14], ecx
jmp 0x4ae9ee
cmp ecx, 0x10
jne 0x4ae9c5
mov ecx, dword [esp + 0x24]
cmp ecx, dword [esp + 0x74]
je 0x4ae9aa
mov word [edi + ebx], 0xffff
mov ecx, dword [esp + 0x14]
lea edi, [eax + esi]
add ebp, ebx
mov dword [esp + 0x1c], edi
add ecx, esi
mov dword [esp + 0x6c], ebp
mov edx, ebp
mov dword [esp + 0x14], ecx
jmp 0x4ae9ea
mov ecx, dword [esp + 0x14]
lea edi, [eax + 1]
inc ebp
mov dword [esp + 0x1c], edi
inc ecx
mov dword [esp + 0x6c], ebp
cmp dword [esp + 0x80], 8
mov edx, ebp
mov dword [esp + 0x14], ecx
jl 0x4aefa6
mov eax, dword [esp + 0x74]
cmp dword [esp + 0x24], eax
je 0x4aefa6
mov eax, dword [esp + 0x30]
cmp eax, 6
ja case.default.0x4aea07
mov ebp, edx
jmp dword [eax*4 + 0x4af78c]
mov eax, dword [esp + 0x78]
mov ebp, edx
dec eax
mov dword [esp + 0x30], eax
cmp eax, 1
jb case.default.0x4aea07
test ebx, ebx
jle 0x4aea46
mov edi, ebp
mov edx, ecx
sub edi, ecx
mov esi, ebx
nop
mov al, byte [edx + edi]
lea edx, [edx + 1]
mov byte [edx - 1], al
sub esi, 1
jne 0x4aea30
mov esi, dword [esp + 0x10]
mov eax, dword [esp + 0x30]
mov byte [ecx + ebx], 0xff
add ebp, ebx
add ecx, esi
sub eax, 1
mov dword [esp + 0x30], eax
jne 0x4aea22
jmp case.default.0x4aea07
mov edi, dword [esp + 0x78]
mov ebp, edx
dec edi
mov dword [esp + 0x30], edi
cmp edi, 1
jb case.default.0x4aea07
mov eax, ecx
mov dword [esp + 0x6c], edx
sub eax, esi
mov dword [esp + 0x28], eax
nop dword [eax]
xor esi, esi
test ebx, ebx
jle 0x4aeaac
mov edi, ebp
mov ebp, dword [esp + 0x28]
sub edi, ecx
nop
lea edx, [esi + ecx]
mov al, byte [edx + edi]
add al, byte [esi + ebp]
inc esi
mov byte [edx], al
cmp esi, ebx
jl 0x4aea90
mov ebp, dword [esp + 0x6c]
mov eax, dword [esp + 0x28]
mov edi, dword [esp + 0x30]
mov esi, dword [esp + 0x10]
add ebp, ebx
mov byte [ecx + ebx], 0xff
add eax, esi
add ecx, esi
mov dword [esp + 0x6c], ebp
sub edi, 1
mov dword [esp + 0x28], eax
mov dword [esp + 0x30], edi
jne 0x4aea80
jmp case.default.0x4aea07
mov eax, dword [esp + 0x78]
mov ebp, edx
dec eax
mov dword [esp + 0x28], eax
cmp eax, 1
jb case.default.0x4aea07
lea eax, [ecx + ebx]
mov dword [esp + 0x6c], ebp
mov dword [esp + 0x30], eax
mov eax, 0x20
sub eax, ebx
mov dword [esp + 0x40], eax
mov eax, dword [esp + 0x28]
nop
xor edx, edx
test ebx, ebx
jle 0x4aec85
cmp ebx, 8
jb 0x4aec4a
lea eax, [ebp - 1]
lea esi, [ecx - 1]
add eax, ebx
add esi, ebx
cmp ecx, eax
ja 0x4aeb29
cmp esi, ebp
jae 0x4aec4a
lea eax, [edi - 1]
add eax, ebx
cmp ecx, eax
ja 0x4aeb3a
cmp esi, edi
jae 0x4aec4a
cmp ebx, 0x40
jb 0x4aebef
mov eax, ebx
and eax, 0x8000003f
jns 0x4aeb51
dec eax
or eax, 0xffffffc0
inc eax
mov esi, ebx
mov ebx, edi
sub ebx, ebp
sub esi, eax
mov dword [esp + 0x3c], ebx
lea eax, [ebp + 0x10]
mov ebx, ecx
mov dword [esp + 0x50], esi
mov esi, dword [esp + 0x40]
sub ebx, ebp
add esi, dword [esp + 0x30]
mov dword [esp + 0x38], ebx
mov ebx, edi
mov ebp, dword [esp + 0x38]
sub ebx, ecx
mov ecx, dword [esp + 0x3c]
mov dword [esp + 0x4c], ebx
movups xmm0, xmmword [eax - 0x10]
mov ebx, dword [esp + 0x4c]
lea eax, [eax + 0x40]
movups xmm1, xmmword [edx + edi]
lea esi, [esi + 0x40]
paddb xmm1, xmm0
movups xmmword [esi - 0x60], xmm1
movups xmm0, xmmword [eax - 0x40]
movups xmm1, xmmword [ecx + eax - 0x40]
paddb xmm1, xmm0
movups xmmword [eax + ebp - 0x40], xmm1
movups xmm1, xmmword [ebx + esi - 0x40]
mov ebx, dword [esp + 0x18]
movups xmm0, xmmword [eax - 0x30]
paddb xmm1, xmm0
movups xmmword [esi - 0x40], xmm1
movups xmm1, xmmword [edi + edx + 0x30]
add edx, 0x40
movups xmm0, xmmword [eax - 0x20]
paddb xmm1, xmm0
movups xmmword [esi - 0x30], xmm1
cmp edx, dword [esp + 0x50]
jl 0x4aeb84
mov ecx, dword [esp + 0x14]
mov eax, ebx
mov ebp, dword [esp + 0x6c]
and al, 0x3f
cmp al, 8
jb 0x4aec46
mov eax, ebx
and eax, 0x80000007
jns 0x4aebfd
dec eax
or eax, 0xfffffff8
inc eax
mov esi, ebx
mov ebx, edi
sub ebx, ebp
sub esi, eax
mov dword [esp + 0x50], ebx
lea eax, [edx + ebp]
mov ebx, dword [esp + 0x18]
sub ecx, ebp
mov edi, dword [esp + 0x50]
mov dword [esp + 0x4c], ecx
nop word [eax + eax]
movq xmm1, qword [edi + eax]
lea eax, [eax + 8]
movq xmm0, qword [eax - 8]
add edx, 8
paddb xmm1, xmm0
movq qword [ecx + eax - 8], xmm1
cmp edx, esi
jl 0x4aec20
mov ecx, dword [esp + 0x14]
mov edi, dword [esp + 0x1c]
cmp edx, ebx
jge 0x4aec7d
mov dword [esp + 0x50], edi
lea esi, [edx + ebp]
mov eax, ecx
mov dword [esp + 0x50], ebx
sub eax, ebp
sub edi, ebp
sub ebx, edx
mov dword [esp + 0x4c], eax
mov edx, eax
mov al, byte [edi + esi]
lea esi, [esi + 1]
add al, byte [esi - 1]
mov byte [edx + esi - 1], al
sub ebx, 1
jne 0x4aec63
mov ebx, dword [esp + 0x18]
mov edi, dword [esp + 0x1c]
mov eax, dword [esp + 0x28]
mov esi, dword [esp + 0x10]
mov edx, dword [esp + 0x30]
add ebp, ebx
add ecx, esi
mov dword [esp + 0x6c], ebp
add edi, esi
mov dword [esp + 0x14], ecx
mov dword [esp + 0x1c], edi
mov byte [edx], 0xff
add edx, esi
sub eax, 1
mov dword [esp + 0x30], edx
mov dword [esp + 0x28], eax
jne 0x4aeb00
jmp case.default.0x4aea07
mov eax, dword [esp + 0x78]
mov ebp, edx
dec eax
mov dword [esp + 0x28], eax
cmp eax, 1
jb case.default.0x4aea07
mov edx, dword [esp + 0x28]
mov eax, ecx
sub eax, esi
mov dword [esp + 0x6c], ebp
mov dword [esp + 0x30], eax
nop word [eax + eax]
mov dword [esp + 0x50], 0
test ebx, ebx
jle 0x4aed48
sub edi, ebp
mov esi, ebp
sub ecx, ebp
mov dword [esp + 0x4c], edi
mov edi, dword [esp + 0x50]
mov dword [esp + 0x40], ecx
mov ecx, dword [esp + 0x4c]
mov ebp, dword [esp + 0x40]
nop word [eax + eax]
mov eax, dword [esp + 0x30]
lea esi, [esi + 1]
movzx edx, byte [ecx + esi - 1]
movzx eax, byte [eax + edi]
inc edi
add edx, eax
shr edx, 1
add dl, byte [esi - 1]
mov byte [esi + ebp - 1], dl
cmp edi, ebx
jl 0x4aed10
mov ecx, dword [esp + 0x14]
mov ebp, dword [esp + 0x6c]
mov edi, dword [esp + 0x1c]
mov esi, dword [esp + 0x10]
mov eax, dword [esp + 0x30]
mov edx, dword [esp + 0x28]
mov byte [ecx + ebx], 0xff
add ebp, ebx
add ecx, esi
mov dword [esp + 0x6c], ebp
add eax, esi
mov dword [esp + 0x14], ecx
add edi, esi
mov dword [esp + 0x30], eax
sub edx, 1
mov dword [esp + 0x1c], edi
mov dword [esp + 0x28], edx
jne 0x4aece0
jmp case.default.0x4aea07
mov eax, dword [esp + 0x78]
mov ebp, edx
dec eax
mov dword [esp + 0x30], eax
cmp eax, 1
jb case.default.0x4aea07
mov edx, dword [esp + 0x30]
mov eax, ecx
sub eax, esi
mov dword [esp + 0x6c], ebp
mov dword [esp + 0x40], eax
nop word [eax + eax]
test ebx, ebx
jle 0x4aee67
mov dword [esp + 0x50], eax
mov edx, edi
mov eax, edi
mov dword [esp + 0x4c], ebp
sub eax, ecx
mov dword [esp + 0x3c], ebx
mov ebx, dword [esp + 0x50]
sub edx, ebp
mov ecx, ebp
mov dword [esp + 0x58], eax
mov ebp, dword [esp + 0x10]
mov dword [esp + 0x5c], edx
nop
movzx eax, byte [ebx + eax]
movzx edi, byte [edx + ecx]
movzx edx, byte [ebx]
mov dword [esp + 0x28], eax
mov esi, edx
sub esi, eax
mov dword [esp + 0x54], edi
add edi, esi
mov dword [esp + 0x38], edx
mov eax, edi
sub edi, dword [esp + 0x28]
sub eax, edx
cdq
xor eax, edx
sub eax, edx
mov dword [esp + 0x50], eax
mov eax, esi
cdq
xor eax, edx
sub eax, edx
mov dword [esp + 0x4c], eax
mov eax, edi
cdq
mov esi, eax
mov eax, dword [esp + 0x50]
xor esi, edx
sub esi, edx
mov edx, dword [esp + 0x4c]
cmp eax, edx
jg 0x4aee22
cmp eax, esi
jle 0x4aee31
mov eax, dword [esp + 0x28]
cmp edx, esi
cmovle eax, dword [esp + 0x54]
mov dword [esp + 0x38], eax
mov al, byte [ecx]
inc ecx
add al, byte [esp + 0x38]
mov edx, dword [esp + 0x5c]
mov byte [ebx + ebp], al
inc ebx
sub dword [esp + 0x3c], 1
mov eax, dword [esp + 0x58]
jne 0x4aedd0
mov ecx, dword [esp + 0x14]
mov ebx, dword [esp + 0x18]
mov ebp, dword [esp + 0x6c]
mov edi, dword [esp + 0x1c]
mov esi, dword [esp + 0x10]
mov eax, dword [esp + 0x40]
mov edx, dword [esp + 0x30]
mov byte [ecx + ebx], 0xff
add ebp, ebx
add ecx, esi
mov dword [esp + 0x6c], ebp
add eax, esi
mov dword [esp + 0x14], ecx
add edi, esi
mov dword [esp + 0x40], eax
sub edx, 1
mov dword [esp + 0x1c], edi
mov dword [esp + 0x30], edx
jne 0x4aeda0
jmp case.default.0x4aea07
mov edi, dword [esp + 0x78]
mov ebp, edx
dec edi
mov dword [esp + 0x40], edi
cmp edi, 1
jb case.default.0x4aea07
mov eax, ecx
mov dword [esp + 0x6c], edx
sub eax, esi
mov dword [esp + 0x30], eax
xor esi, esi
test ebx, ebx
jle 0x4aeee1
mov edi, ebp
mov ebp, dword [esp + 0x30]
sub edi, ecx
mov al, byte [esi + ebp]
lea edx, [esi + ecx]
shr al, 1
inc esi
add al, byte [edx + edi]
mov byte [edx], al
cmp esi, ebx
jl 0x4aeec3
mov ebp, dword [esp + 0x6c]
mov eax, dword [esp + 0x30]
mov edi, dword [esp + 0x40]
mov esi, dword [esp + 0x10]
add ebp, ebx
mov byte [ecx + ebx], 0xff
add eax, esi
add ecx, esi
mov dword [esp + 0x6c], ebp
sub edi, 1
mov dword [esp + 0x30], eax
mov dword [esp + 0x40], edi
jne 0x4aeeb5
jmp case.default.0x4aea07
mov eax, dword [esp + 0x78]
mov ebp, edx
dec eax
mov dword [esp + 0x28], eax
cmp eax, 1
jb case.default.0x4aea07
mov edx, dword [esp + 0x28]
mov eax, ecx
sub eax, esi
mov dword [esp + 0x6c], ebp
mov dword [esp + 0x30], eax
xor edi, edi
test ebx, ebx
jle 0x4aef52
mov dword [esp + 0x5c], ebp
sub ebp, ecx
nop
mov dl, byte [eax + edi]
lea esi, [edi + ecx]
mov al, byte [esi + ebp]
inc edi
add al, dl
mov byte [esi], al
mov eax, dword [esp + 0x30]
cmp edi, ebx
jl 0x4aef30
mov ebp, dword [esp + 0x6c]
mov esi, dword [esp + 0x10]
mov edx, dword [esp + 0x28]
mov byte [ecx + ebx], 0xff
add ebp, ebx
add eax, esi
mov dword [esp + 0x6c], ebp
add ecx, esi
mov dword [esp + 0x30], eax
sub edx, 1
mov dword [esp + 0x28], edx
jne 0x4aef22
mov edi, dword [esp + 0x80]
cmp edi, 0x10
jne 0x4af325
mov eax, dword [esp + 0x68]
mov ecx, dword [esp + 0x78]
mov eax, dword [eax + 0xc]
inc eax
test ecx, ecx
je 0x4af325
add eax, dword [esp + 0x60]
add eax, ebx
mov byte [eax], 0xff
add eax, esi
sub ecx, 1
jne 0x4aef97
jmp 0x4af325
mov esi, dword [esp + 0x44]
mov eax, dword [esp + 0x30]
dec esi
imul esi, ebx
mov dword [esp + 0x28], esi
cmp eax, 6
ja case.default.0x4aefbf
jmp dword [eax*4 + 0x4af7a8]
push esi
push ebp
push ecx
call fcn.005b46d0
add esp, 0xc
jmp case.default.0x4aefbf
xor edi, edi
test esi, esi
jle case.default.0x4aefbf
mov eax, ecx
sub eax, ebx
mov dword [esp + 0x60], eax
mov eax, ebp
mov ebx, dword [esp + 0x60]
sub eax, ecx
mov dword [esp + 0x5c], eax
mov ebp, eax
mov al, byte [ebx + edi]
lea edx, [ecx + edi]
add al, byte [edx + ebp]
inc edi
mov byte [edx], al
cmp edi, esi
jl 0x4aeff6
jmp 0x4af314
xor edx, edx
test esi, esi
jle case.default.0x4aefbf
cmp esi, 8
jb 0x4af180
lea eax, [ebp - 1]
add eax, esi
cmp ecx, eax
ja 0x4af034
lea eax, [ecx - 1]
add eax, esi
cmp eax, ebp
jae 0x4af180
lea eax, [edi - 1]
add eax, esi
cmp ecx, eax
ja 0x4af04a
lea eax, [ecx - 1]
add eax, esi
cmp eax, edi
jae 0x4af180
cmp esi, 0x40
jb 0x4af111
mov eax, esi
and eax, 0x8000003f
jns 0x4af061
dec eax
or eax, 0xffffffc0
inc eax
mov ebx, esi
sub ebx, eax
lea eax, [ecx + 0x20]
mov dword [esp + 0x54], ebx
mov ebx, edi
sub ebx, ebp
mov dword [esp + 0x60], eax
mov dword [esp + 0x40], ebx
lea eax, [ebp + 0x10]
mov esi, dword [esp + 0x40]
mov ebx, ecx
sub ebx, ebp
mov dword [esp + 0x5c], ebx
mov ebx, edi
mov ebp, dword [esp + 0x5c]
sub ebx, ecx
mov dword [esp + 0x58], ebx
mov ebx, dword [esp + 0x60]
mov ecx, dword [esp + 0x58]
nop dword [eax + eax]
movups xmm0, xmmword [eax - 0x10]
lea eax, [eax + 0x40]
movups xmm1, xmmword [edi + edx]
lea ebx, [ebx + 0x40]
paddb xmm1, xmm0
movups xmmword [ebx - 0x60], xmm1
movups xmm1, xmmword [esi + eax - 0x40]
mov esi, edi
movups xmm0, xmmword [eax - 0x40]
paddb xmm1, xmm0
movups xmmword [eax + ebp - 0x40], xmm1
movups xmm0, xmmword [eax - 0x30]
movups xmm1, xmmword [ecx + ebx - 0x40]
paddb xmm1, xmm0
movups xmmword [ebx - 0x40], xmm1
movups xmm1, xmmword [esi + edx + 0x30]
mov esi, dword [esp + 0x40]
add edx, 0x40
movups xmm0, xmmword [eax - 0x20]
paddb xmm1, xmm0
movups xmmword [ebx - 0x30], xmm1
cmp edx, dword [esp + 0x54]
jl 0x4af0a0
mov esi, dword [esp + 0x28]
mov eax, esi
mov ecx, dword [esp + 0x14]
and al, 0x3f
mov ebx, dword [esp + 0x18]
mov ebp, dword [esp + 0x6c]
cmp al, 8
jb 0x4af178
mov eax, esi
and eax, 0x80000007
jns 0x4af11f
dec eax
or eax, 0xfffffff8
inc eax
mov ebx, edi
mov dword [esp + 0x30], esi
sub dword [esp + 0x30], eax
sub ebx, ebp
mov dword [esp + 0x60], ebx
lea eax, [edx + ebp]
mov esi, dword [esp + 0x60]
mov ebx, ecx
sub ebx, ebp
mov dword [esp + 0x5c], ebx
mov ebx, dword [esp + 0x18]
mov edi, dword [esp + 0x5c]
nop word [eax + eax]
movq xmm1, qword [esi + eax]
lea eax, [eax + 8]
movq xmm0, qword [eax - 8]
add edx, 8
paddb xmm1, xmm0
movq qword [edi + eax - 8], xmm1
cmp edx, dword [esp + 0x30]
jl 0x4af150
mov edi, dword [esp + 0x1c]
mov esi, dword [esp + 0x28]
cmp edx, esi
jge case.default.0x4aefbf
mov ebx, dword [esp + 0x28]
lea esi, [edx + ebp]
sub edi, ebp
sub ecx, ebp
sub ebx, edx
nop dword [eax]
mov al, byte [edi + esi]
lea esi, [esi + 1]
add al, byte [esi - 1]
mov byte [ecx + esi - 1], al
sub ebx, 1
jne 0x4af190
mov esi, dword [esp + 0x28]
jmp 0x4af318
mov dword [esp + 0x5c], 0
test esi, esi
jle case.default.0x4aefbf
mov eax, ecx
mov dword [esp + 0x60], ebp
sub eax, ebx
sub edi, ebp
sub ecx, ebp
mov dword [esp + 0x58], eax
mov ebx, ebp
mov ebp, dword [esp + 0x5c]
movzx edx, byte [eax + ebp]
lea ebx, [ebx + 1]
movzx eax, byte [edi + ebx - 1]
inc ebp
add edx, eax
mov eax, dword [esp + 0x58]
shr edx, 1
add dl, byte [ebx - 1]
mov byte [ecx + ebx - 1], dl
cmp ebp, esi
jl 0x4af1d1
jmp 0x4af314
test esi, esi
jle case.default.0x4aefbf
mov eax, ecx
mov dword [esp + 0x30], esi
sub eax, ebx
mov edx, ebp
mov dword [esp + 0x60], eax
mov eax, edi
sub eax, ecx
mov dword [esp + 0x38], edx
sub edi, ebp
mov dword [esp + 0x54], eax
mov ebp, dword [esp + 0x60]
nop
movzx eax, byte [eax + ebp]
movzx esi, byte [edi + edx]
movzx edx, byte [ebp]
mov dword [esp + 0x40], eax
mov ecx, edx
sub ecx, eax
mov dword [esp + 0x58], esi
add esi, ecx
mov dword [esp + 0x3c], edx
mov eax, esi
sub esi, dword [esp + 0x40]
sub eax, edx
cdq
xor eax, edx
sub eax, edx
mov dword [esp + 0x60], eax
mov eax, ecx
cdq
xor eax, edx
sub eax, edx
mov dword [esp + 0x5c], eax
mov eax, esi
cdq
mov ecx, eax
mov eax, dword [esp + 0x60]
xor ecx, edx
sub ecx, edx
mov edx, dword [esp + 0x5c]
cmp eax, edx
jg 0x4af273
cmp eax, ecx
jle 0x4af282
mov eax, dword [esp + 0x40]
cmp edx, ecx
cmovle eax, dword [esp + 0x58]
mov dword [esp + 0x3c], eax
mov edx, dword [esp + 0x38]
mov al, byte [edx]
inc edx
add al, byte [esp + 0x3c]
mov byte [ebx + ebp], al
inc ebp
sub dword [esp + 0x30], 1
mov eax, dword [esp + 0x54]
mov dword [esp + 0x38], edx
jne 0x4af220
mov ebp, dword [esp + 0x6c]
mov esi, dword [esp + 0x28]
jmp case.default.0x4aefbf
xor edi, edi
test esi, esi
jle case.default.0x4aefbf
mov eax, ecx
sub eax, ebx
mov dword [esp + 0x60], eax
mov eax, ebp
mov ebx, dword [esp + 0x60]
sub eax, ecx
mov dword [esp + 0x5c], eax
mov ebp, eax
nop dword [eax]
mov al, byte [ebx + edi]
lea edx, [ecx + edi]
shr al, 1
inc edi
add al, byte [edx + ebp]
mov byte [edx], al
cmp edi, esi
jl 0x4af2d0
jmp 0x4af314
xor edi, edi
test esi, esi
jle case.default.0x4aefbf
mov eax, ecx
mov dword [esp + 0x60], ebp
sub eax, ebx
sub ebp, ecx
mov dword [esp + 0x5c], eax
mov ebx, eax
nop word [eax + eax]
lea esi, [ecx + edi]
mov al, byte [esi + ebp]
add al, byte [ebx + edi]
inc edi
mov byte [esi], al
mov esi, dword [esp + 0x28]
cmp edi, esi
jl 0x4af300
mov ebp, dword [esp + 0x6c]
mov ebx, dword [esp + 0x18]
mov edi, dword [esp + 0x80]
add ebp, esi
mov edx, dword [esp + 0x48]
mov eax, dword [esp + 0x7c]
inc edx
mov esi, dword [esp + 0x10]
mov dword [esp + 0x48], edx
cmp edx, eax
jb 0x4ae812
mov ebp, dword [esp + 0x74]
cmp edi, 8
jge 0x4af6f2
test eax, eax
je 0x4af72d
mov ebx, ebp
imul ebx, dword [esp + 0x78]
xor ecx, ecx
mov dword [esp + 0x30], ecx
mov dword [esp + 0x60], ebx
mov eax, dword [esp + 0x68]
mov esi, ebx
sub esi, dword [esp + 0x34]
mov eax, dword [eax + 0xc]
add esi, eax
add esi, ecx
cmp dword [esp + 0x84], 0
lea edx, [eax + ecx]
jne 0x4af39e
mov bl, byte [edi + 0x5fa148]
jmp 0x4af3a0
pop edi
pop esi
pop ebp
mov dword [0x655470], 0x5faa38
xor eax, eax
pop ebx
add esp, 0x54
ret
mov bl, 1
mov ecx, dword [esp + 0x20]
mov dword [esp + 0x20], ecx
cmp edi, 4
jne 0x4af406
mov ebp, ecx
cmp ebp, 2
jl 0x4af3f0
mov edi, ebp
mov dword [esp + 0x20], ecx
shr edi, 1
mov eax, edi
neg eax
lea ebp, [ebp + eax*2]
movzx ecx, byte [esi]
shr cl, 4
movzx ecx, cl
movzx eax, bl
imul ecx, eax
movzx eax, bl
mov byte [edx], cl
movzx ecx, byte [esi]
inc esi
and cl, 0xf
movzx ecx, cl
imul ecx, eax
mov byte [edx + 1], cl
add edx, 2
sub edi, 1
jne 0x4af3c4
test ebp, ebp
mov ebp, dword [esp + 0x74]
jle 0x4af650
mov cl, byte [esi]
shr cl, 4
jmp 0x4af645
cmp edi, 2
jne 0x4af4ce
mov ebp, ecx
cmp ebp, 4
jl 0x4af486
mov edi, ebp
mov dword [esp + 0x20], ecx
shr edi, 2
mov eax, edi
neg eax
lea ebp, [ebp + eax*4]
nop dword [eax + eax]
movzx ecx, byte [esi]
shr cl, 6
movzx ecx, cl
movzx eax, bl
imul ecx, eax
movzx eax, bl
mov byte [edx], cl
movzx ecx, byte [esi]
shr cl, 4
and cl, 3
movzx ecx, cl
imul ecx, eax
movzx eax, bl
mov byte [edx + 1], cl
movzx ecx, byte [esi]
shr cl, 2
and cl, 3
movzx ecx, cl
imul ecx, eax
movzx eax, bl
mov byte [edx + 2], cl
movzx ecx, byte [esi]
inc esi
and cl, 3
movzx ecx, cl
imul ecx, eax
mov byte [edx + 3], cl
add edx, 4
sub edi, 1
jne 0x4af430
test ebp, ebp
jle 0x4af49b
mov cl, byte [esi]
shr cl, 6
movzx eax, bl
movzx ecx, cl
imul ecx, eax
mov byte [edx], cl
inc edx
cmp ebp, 1
jle 0x4af4b4
mov cl, byte [esi]
shr cl, 4
and cl, 3
movzx eax, bl
movzx ecx, cl
imul ecx, eax
mov byte [edx], cl
inc edx
cmp ebp, 2
mov ebp, dword [esp + 0x74]
jle 0x4af650
mov cl, byte [esi]
shr cl, 2
and cl, 3
jmp 0x4af645
cmp edi, 1
jne 0x4af650
mov edi, ecx
mov dword [esp + 0x20], ecx
cmp edi, 8
jl 0x4af5a7
mov ebp, edi
mov dword [esp + 0x20], ecx
shr ebp, 3
mov eax, ebp
neg eax
lea edi, [edi + eax*8]
movzx ecx, byte [esi]
shr cl, 7
movzx ecx, cl
movzx eax, bl
imul ecx, eax
movzx eax, bl
mov byte [edx], cl
movzx ecx, byte [esi]
shr cl, 6
and cl, 1
movzx ecx, cl
imul ecx, eax
movzx eax, bl
mov byte [edx + 1], cl
movzx ecx, byte [esi]
shr cl, 5
and cl, 1
movzx ecx, cl
imul ecx, eax
movzx eax, bl
mov byte [edx + 2], cl
movzx ecx, byte [esi]
shr cl, 4
and cl, 1
movzx ecx, cl
imul ecx, eax
movzx eax, bl
mov byte [edx + 3], cl
movzx ecx, byte [esi]
shr cl, 3
and cl, 1
movzx ecx, cl
imul ecx, eax
movzx eax, bl
mov byte [edx + 4], cl
movzx ecx, byte [esi]
shr cl, 2
and cl, 1
movzx ecx, cl
imul ecx, eax
movzx eax, bl
mov byte [edx + 5], cl
movzx ecx, byte [esi]
shr cl, 1
and cl, 1
movzx ecx, cl
imul ecx, eax
movzx eax, bl
mov byte [edx + 6], cl
movzx ecx, byte [esi]
inc esi
and cl, 1
movzx ecx, cl
imul ecx, eax
mov byte [edx + 7], cl
add edx, 8
sub ebp, 1
jne 0x4af4f6
mov ebp, dword [esp + 0x74]
test edi, edi
jle 0x4af5bc
mov cl, byte [esi]
shr cl, 7
movzx eax, bl
movzx ecx, cl
imul ecx, eax
mov byte [edx], cl
inc edx
cmp edi, 1
jle 0x4af5d5
mov cl, byte [esi]
shr cl, 6
and cl, 1
movzx eax, bl
movzx ecx, cl
imul ecx, eax
mov byte [edx], cl
inc edx
cmp edi, 2
jle 0x4af5ee
mov cl, byte [esi]
shr cl, 5
and cl, 1
movzx eax, bl
movzx ecx, cl
imul ecx, eax
mov byte [edx], cl
inc edx
cmp edi, 3
jle 0x4af607
mov cl, byte [esi]
shr cl, 4
and cl, 1
movzx eax, bl
movzx ecx, cl
imul ecx, eax
mov byte [edx], cl
inc edx
cmp edi, 4
jle 0x4af620
mov cl, byte [esi]
shr cl, 3
and cl, 1
movzx eax, bl
movzx ecx, cl
imul ecx, eax
mov byte [edx], cl
inc edx
cmp edi, 5
jle 0x4af639
mov cl, byte [esi]
shr cl, 2
and cl, 1
movzx eax, bl
movzx ecx, cl
imul ecx, eax
mov byte [edx], cl
inc edx
cmp edi, 6
jle 0x4af650
mov cl, byte [esi]
shr cl, 1
and cl, 1
movzx eax, bl
movzx ecx, cl
imul ecx, eax
mov byte [edx], cl
mov ebx, dword [esp + 0x24]
cmp ebx, ebp
je 0x4af6c3
mov eax, dword [esp + 0x68]
mov ecx, dword [esp + 0x78]
dec ecx
mov edx, dword [eax + 0xc]
add edx, dword [esp + 0x30]
cmp ebx, 1
jne 0x4af687
test ecx, ecx
js 0x4af6c3
mov byte [edx + ecx*2 + 1], 0xff
mov al, byte [ecx + edx]
mov byte [edx + ecx*2], al
sub ecx, 1
jns 0x4af675
jmp 0x4af6c3
test ecx, ecx
js 0x4af6c3
lea esi, [ecx*2 + 1]
add esi, edx
lea edx, [edx + ecx*4]
add esi, ecx
add edx, 2
nop dword [eax]
sub ecx, 1
mov byte [edx + 1], 0xff
movzx eax, byte [esi + 1]
lea esi, [esi - 3]
mov byte [edx], al
lea edx, [edx - 4]
movzx eax, byte [esi + 3]
mov byte [edx + 3], al
movzx eax, byte [esi + 2]
mov byte [edx + 2], al
jns 0x4af6a0
mov ecx, dword [esp + 0x30]
add ecx, dword [esp + 0x2c]
sub dword [esp + 0x7c], 1
mov ebx, dword [esp + 0x60]
mov edi, dword [esp + 0x80]
mov dword [esp + 0x30], ecx
jne 0x4af364
pop edi
pop esi
pop ebp
mov eax, 1
pop ebx
add esp, 0x54
ret
cmp edi, 0x10
jne 0x4af72d
imul ebp, dword [esp + 0x78]
mov ecx, dword [esp + 0x68]
mov esi, dword [ecx + 0xc]
mov edx, esi
imul ebp, eax
test ebp, ebp
je 0x4af72d
nop dword [eax]
movzx ecx, byte [esi]
lea edx, [edx + 2]
movzx eax, byte [edx - 1]
lea esi, [esi + 2]
shl cx, 8
or cx, ax
mov word [edx - 2], cx
sub ebp, 1
jne 0x4af710
pop edi
pop esi
pop ebp
mov eax, 1
pop ebx
add esp, 0x54
ret
pop edi
pop esi
pop ebp
mov dword [0x655470], 0x5fa924
xor eax, eax
pop ebx
add esp, 0x54
ret
mov eax, dword [esp + 0x68]
mov dword [eax + 0xc], 0
pop edi
pop esi
pop ebp
mov dword [0x655470], 0x5fa7ac
xor eax, eax
pop ebx
add esp, 0x54
ret