Function at 0x49f370
Capabilities:
Encode data using xor

Disassembly:
push ebp
mov ebp, esp
push ebx
push edi
push esi
and esp, 0xfffffff0
sub esp, 0xa0
mov edi, dword [ebp + 8]
mov ecx, dword [ebp + 0xc]
lea edx, [edi + 3]
mov eax, ecx
and edx, 0xfffffffc
mov esi, edx
sub esi, edi
sub eax, esi
jb 0x49f39e
cmp eax, 4
jae 0x49f463
xor ebx, ebx
test ecx, ecx
je 0x49f87c
cmp ecx, 8
mov esi, 0
jb 0x49f43d
movdqa xmm2, xmmword [0x4ca0b0]
movdqa xmm3, xmmword [0x4ca0c0]
mov esi, ecx
mov edx, edi
lea eax, [edi + 4]
pxor xmm0, xmm0
pxor xmm1, xmm1
and esi, 0xfffffff8
mov edi, esi
nop word [eax + eax]
movd xmm5, dword [eax - 4]
movd xmm4, dword [eax]
add eax, 8
add edi, 0xfffffff8
pcmpgtb xmm5, xmm2
pcmpgtb xmm4, xmm2
punpcklbw xmm5, xmm5
punpcklwd xmm5, xmm5
pand xmm5, xmm3
paddd xmm0, xmm5
punpcklbw xmm4, xmm4
punpcklwd xmm4, xmm4
pand xmm4, xmm3
paddd xmm1, xmm4
jne 0x49f3e0
paddd xmm1, xmm0
cmp esi, ecx
mov edi, edx
pshufd xmm0, xmm1, 0xee
paddd xmm0, xmm1
pshufd xmm1, xmm0, 0x55
paddd xmm1, xmm0
movd ebx, xmm1
je 0x49f87c
sub ecx, esi
add edi, esi
nop word cs:[eax + eax]
nop dword [eax + eax]
xor eax, eax
cmp byte [edi], 0xc0
setge al
inc edi
add ebx, eax
dec ecx
jne 0x49f450
jmp 0x49f87c
mov ecx, eax
mov dword [esp + 0x30], esi
mov esi, edi
mov dword [esp + 0x10], edi
and ecx, 3
mov dword [esp + 0x40], ecx
xor ecx, ecx
cmp edx, edi
mov edi, 0
je 0x49f49e
mov ebx, dword [ebp + 8]
xor edi, edi
mov esi, ebx
sub esi, edx
mov edx, ebx
nop dword [eax]
xor ebx, ebx
cmp byte [edx], 0xc0
setge bl
inc edx
add edi, ebx
inc esi
jne 0x49f490
mov edx, dword [esp + 0x30]
mov esi, edi
mov edi, dword [esp + 0x40]
add dword [esp + 0x10], edx
test edi, edi
je 0x49f4ce
mov ebx, eax
xor ecx, ecx
and ebx, 0xfffffffc
add ebx, dword [esp + 0x10]
nop dword [eax + eax]
xor edx, edx
cmp byte [ebx], 0xc0
setge dl
inc ebx
add ecx, edx
dec edi
jne 0x49f4c0
movdqa xmm3, xmmword [0x4ca0a0]
mov edi, dword [esp + 0x10]
add ecx, esi
shr eax, 2
pcmpeqd xmm2, xmm2
jmp 0x49f52c
xor edx, edx
mov eax, edx
shr edx, 8
mov esi, dword [esp + 0xc]
and eax, 0xff00ff
and edx, 0xff00ff
add edx, eax
mov ecx, edx
shl ecx, 0x10
add ecx, edx
mov edx, dword [esp + 0x2c]
shr ecx, 0x10
add ecx, ebx
mov ebx, dword [esp + 0x28]
mov eax, edx
sub eax, ebx
test bl, 3
lea edi, [esi + ebx*4]
jne 0x49f822
mov ebx, ecx
test eax, eax
je 0x49f87c
cmp eax, 0xc0
mov esi, 0xc0
mov dword [esp + 0x2c], eax
mov dword [esp + 0xc], edi
cmovb esi, eax
mov ecx, esi
mov dword [esp + 0x28], esi
and ecx, 0xfc
mov dword [esp + 0x24], ecx
je 0x49f4f0
shr esi, 2
xor edx, edx
lea eax, [esi - 1]
and eax, 0xfffffff
cmp eax, 7
jb 0x49f7cd
inc eax
pxor xmm3, xmm3
pxor xmm2, xmm2
mov ecx, eax
mov dword [esp + 0x20], eax
mov eax, dword [esp + 0xc]
and ecx, 0xfffffff8
mov edi, ecx
shl edi, 4
add edi, eax
lea edx, [eax + 0x40]
mov eax, ecx
nop word cs:[eax + eax]
nop
movdqu xmm5, xmmword [edx - 0x20]
movdqa xmmword [esp + 0x80], xmm2
movdqu xmm1, xmmword [edx - 0x40]
movdqu xmm2, xmmword [edx - 0x10]
movdqa xmmword [esp + 0x30], xmm3
movdqu xmm3, xmmword [edx - 0x30]
movdqu xmm7, xmmword [edx + 0x10]
movdqu xmm4, xmmword [edx + 0x30]
movdqa xmm0, xmm5
movdqa xmmword [esp + 0x40], xmm2
movdqa xmmword [esp + 0x60], xmm3
movdqa xmmword [esp + 0x10], xmm1
movdqa xmmword [esp + 0x50], xmm7
punpckldq xmm0, xmm2
movdqa xmm2, xmm1
movdqu xmm1, xmmword [edx + 0x20]
punpckhdq xmm5, xmmword [esp + 0x40]
punpckldq xmm2, xmm3
movdqu xmm3, xmmword [edx]
sub edx, 0xffffff80
add ecx, 0xfffffff8
movdqa xmm6, xmm2
punpckhqdq xmm2, xmm0
movdqa xmmword [esp + 0x70], xmm2
punpcklqdq xmm6, xmm0
movdqa xmm0, xmm1
punpckhdq xmm1, xmm4
movdqa xmm2, xmm3
punpckldq xmm0, xmm4
punpckhdq xmm3, xmmword [esp + 0x50]
punpckldq xmm2, xmm7
movdqa xmm7, xmm2
punpckhqdq xmm2, xmm0
punpcklqdq xmm7, xmm0
movdqa xmm0, xmmword [esp + 0x10]
punpckhdq xmm0, xmmword [esp + 0x60]
movdqa xmm4, xmm0
punpckhqdq xmm0, xmm5
punpcklqdq xmm4, xmm5
movdqa xmm5, xmm3
movdqa xmmword [esp + 0x10], xmm0
punpckhqdq xmm3, xmm1
movdqa xmm0, xmm6
psrld xmm6, 6
punpcklqdq xmm5, xmm1
pcmpeqd xmm1, xmm1
movdqa xmmword [esp + 0x40], xmm3
pcmpeqd xmm3, xmm3
pxor xmm0, xmm1
psrld xmm0, 7
por xmm6, xmm0
movdqa xmm0, xmm7
psrld xmm7, 6
pxor xmm0, xmm1
movdqa xmm1, xmmword [0x4ca0a0]
psrld xmm0, 7
por xmm7, xmm0
pand xmm7, xmm1
pand xmm6, xmm1
paddd xmm7, xmmword [esp + 0x80]
paddd xmm6, xmmword [esp + 0x30]
movdqa xmmword [esp + 0x30], xmm7
movdqa xmm7, xmmword [esp + 0x70]
movdqa xmm0, xmm7
psrld xmm7, 6
pxor xmm0, xmm3
psrld xmm0, 7
por xmm7, xmm0
movdqa xmm0, xmm2
psrld xmm2, 6
pxor xmm0, xmm3
pand xmm7, xmm1
psrld xmm0, 7
por xmm2, xmm0
movdqa xmm0, xmm4
psrld xmm4, 6
pxor xmm0, xmm3
pand xmm2, xmm1
psrld xmm0, 7
por xmm4, xmm0
movdqa xmm0, xmm5
psrld xmm5, 6
pxor xmm0, xmm3
movdqa xmm3, xmmword [esp + 0x10]
pand xmm4, xmm1
psrld xmm0, 7
paddd xmm4, xmm7
por xmm5, xmm0
paddd xmm4, xmm6
pcmpeqd xmm6, xmm6
pand xmm5, xmm1
paddd xmm5, xmm2
movdqa xmm2, xmmword [esp + 0x40]
movdqa xmm0, xmm3
psrld xmm3, 6
pxor xmm0, xmm6
paddd xmm5, xmmword [esp + 0x30]
psrld xmm0, 7
por xmm3, xmm0
movdqa xmm0, xmm2
psrld xmm2, 6
pand xmm3, xmm1
pxor xmm0, xmm6
paddd xmm3, xmm4
psrld xmm0, 7
por xmm2, xmm0
pand xmm2, xmm1
paddd xmm2, xmm5
jne 0x49f5a0
paddd xmm2, xmm3
cmp dword [esp + 0x20], eax
movdqa xmm3, xmmword [0x4ca0a0]
pshufd xmm0, xmm2, 0xee
paddd xmm0, xmm2
pcmpeqd xmm2, xmm2
pshufd xmm1, xmm0, 0x55
paddd xmm1, xmm0
movd edx, xmm1
je 0x49f4f2
shl esi, 4
add esi, dword [esp + 0xc]
nop word cs:[eax + eax]
nop
movdqu xmm0, xmmword [edi]
add edi, 0x10
movdqa xmm1, xmm0
psrld xmm0, 6
pxor xmm1, xmm2
psrld xmm1, 7
por xmm0, xmm1
pand xmm0, xmm3
pshufd xmm1, xmm0, 0xee
paddd xmm1, xmm0
pshufd xmm0, xmm1, 0x55
paddd xmm0, xmm1
movd eax, xmm0
add edx, eax
cmp edi, esi
jne 0x49f7e0
jmp 0x49f4f2
mov eax, dword [esp + 0x24]
cmp edx, 0xc0
lea eax, [esi + eax*4]
mov esi, 0xc0
cmovb esi, edx
xor edx, edx
and esi, 3
shl esi, 2
nop
mov edi, dword [eax]
add eax, 4
mov ebx, edi
shr edi, 6
not ebx
shr ebx, 7
or edi, ebx
and edi, 0x1010101
add edx, edi
add esi, 0xfffffffc
jne 0x49f840
mov eax, edx
shr edx, 8
and eax, 0xff00ff
and edx, 0xff00ff
add edx, eax
mov ebx, edx
shl ebx, 0x10
add ebx, edx
shr ebx, 0x10
add ebx, ecx
mov eax, ebx
lea esp, [ebp - 0xc]
pop esi
pop edi
pop ebx
pop ebp
ret