Function at 0x421de0
Capabilities:
Encode data using xor

Disassembly:
push ebx
mov ebx, esp
sub esp, 8
and esp, 0xfffffff0
add esp, 4
push ebp
mov ebp, dword [ebx + 4]
mov dword [esp + 4], ebp
mov ebp, esp
sub esp, 0x38
mov eax, dword [ebx + 0x10]
mov dword [ebp - 0x10], ecx
push esi
push edi
test ecx, ecx
je 0x422171
test edx, edx
je 0x422171
mov edi, dword [ebx + 8]
test edi, edi
je 0x422171
mov esi, dword [ebx + 0xc]
test esi, esi
jle 0x422171
test eax, eax
je 0x422171
cmp dword [ebx + 0x14], 0
je 0x422171
cmp dword [eax], 0
jne 0x422171
mov eax, dword [edx + 0x2c]
test eax, eax
jne 0x421f06
lea eax, [esi + 0x50]
mov dword [ebp - 0xc], eax
push eax
mov eax, dword [ecx + 8]
call eax
add esp, 4
mov dword [ebp - 8], eax
test eax, eax
je 0x422144
xor ecx, ecx
cmp esi, 0x40
jb 0x421ee9
lea edx, [esi + 0x4f]
add edx, eax
add eax, 0x50
mov dword [ebp - 0x10], edx
lea edx, [edi - 1]
add edx, esi
cmp eax, edx
ja 0x421e87
cmp dword [ebp - 0x10], edi
jae 0x421ee6
mov eax, esi
and eax, 0x8000003f
jns 0x421e95
dec eax
or eax, 0xffffffc0
inc eax
movups xmm1, xmmword [0x5e0210]
mov edx, esi
sub edx, eax
mov eax, dword [ebp - 8]
movups xmm0, xmmword [edi + ecx]
pandn xmm0, xmm1
movups xmmword [eax + ecx + 0x50], xmm0
movups xmm0, xmmword [edi + ecx + 0x10]
pandn xmm0, xmm1
movups xmmword [eax + ecx + 0x60], xmm0
movups xmm0, xmmword [edi + ecx + 0x20]
pandn xmm0, xmm1
movups xmmword [eax + ecx + 0x70], xmm0
movups xmm0, xmmword [edi + ecx + 0x30]
pandn xmm0, xmm1
movups xmmword [eax + ecx + 0x80], xmm0
add ecx, 0x40
cmp ecx, edx
jl 0x421ea3
jmp 0x421ee9
mov eax, dword [ebp - 8]
cmp ecx, esi
jge 0x422129
lea edx, [eax + 0x50]
mov al, byte [ecx + edi]
not al
mov byte [edx + ecx], al
inc ecx
cmp ecx, esi
jl 0x421ef4
jmp 0x422129
cmp eax, 1
jne 0x421fe6
mov al, byte [edx + 0x30]
mov byte [ebp - 1], al
movsx eax, al
movd xmm0, eax
lea eax, [esi + 0x50]
punpcklbw xmm0, xmm0
punpcklwd xmm0, xmm0
pshufd xmm0, xmm0, 0
mov dword [ebp - 0xc], eax
push eax
mov eax, dword [ecx + 8]
movaps xmmword [ebp - 0x30], xmm0
call eax
add esp, 4
mov dword [ebp - 8], eax
test eax, eax
je 0x422144
xor edx, edx
cmp esi, 0x40
jb 0x421fc6
lea ecx, [esi + 0x4f]
add ecx, eax
add eax, 0x50
mov dword [ebp - 0x10], ecx
lea ecx, [edi - 1]
add ecx, esi
cmp eax, ecx
ja 0x421f67
cmp dword [ebp - 0x10], edi
jae 0x421fc3
mov eax, esi
and eax, 0x8000003f
jns 0x421f75
dec eax
or eax, 0xffffffc0
inc eax
movaps xmm1, xmmword [ebp - 0x30]
mov ecx, esi
sub ecx, eax
mov eax, dword [ebp - 8]
movups xmm0, xmmword [edi + edx]
pxor xmm0, xmm1
movups xmmword [eax + edx + 0x50], xmm0
movups xmm0, xmmword [edi + edx + 0x10]
pxor xmm0, xmm1
movups xmmword [eax + edx + 0x60], xmm0
movups xmm0, xmmword [edi + edx + 0x20]
pxor xmm0, xmm1
movups xmmword [eax + edx + 0x70], xmm0
movups xmm0, xmmword [edi + edx + 0x30]
pxor xmm0, xmm1
movups xmmword [eax + edx + 0x80], xmm0
add edx, 0x40
cmp edx, ecx
jl 0x421f80
jmp 0x421fc6
mov eax, dword [ebp - 8]
cmp edx, esi
jge 0x422129
lea ecx, [eax + 0x50]
mov ah, byte [ebp - 1]
mov al, byte [edx + edi]
xor al, ah
mov byte [ecx + edx], al
inc edx
cmp edx, esi
jl 0x421fd4
jmp 0x422129
cmp eax, 2
jne 0x4220db
mov al, byte [edx + 0x30]
mov byte [ebp - 1], al
movsx eax, al
movd xmm0, eax
lea eax, [esi + 0x50]
punpcklbw xmm0, xmm0
punpcklwd xmm0, xmm0
pshufd xmm0, xmm0, 0
mov dword [ebp - 0xc], eax
push eax
mov eax, dword [ecx + 8]
movups xmmword [ebp - 0x30], xmm0
call eax
add esp, 4
mov dword [ebp - 8], eax
test eax, eax
je 0x422144
xor edx, edx
cmp esi, 0x10
jb 0x4220b4
lea ecx, [eax + 0x50]
add eax, 0x4f
add eax, esi
mov dword [ebp - 0x14], ecx
mov dword [ebp - 0x10], eax
lea eax, [edi - 1]
add eax, esi
cmp ecx, eax
ja 0x42204e
cmp dword [ebp - 0x10], edi
jae 0x4220b1
mov eax, esi
and eax, 0x8000000f
jns 0x42205c
dec eax
or eax, 0xfffffff0
inc eax
movups xmm5, xmmword [0x5e0210]
mov ecx, esi
movups xmm6, xmmword [ebp - 0x30]
sub ecx, eax
mov eax, dword [ebp - 0x14]
xorps xmm4, xmm4
movups xmm0, xmmword [edx + edi]
movaps xmm3, xmm4
movaps xmm2, xmm6
pxor xmm2, xmm0
pcmpeqb xmm3, xmm0
movups xmm0, xmmword [eax + edx]
pandn xmm3, xmm5
pand xmm2, xmm3
movaps xmm1, xmm3
pandn xmm1, xmm0
por xmm2, xmm1
pand xmm2, xmm3
pandn xmm3, xmm4
por xmm2, xmm3
movups xmmword [eax + edx], xmm2
add edx, 0x10
cmp edx, ecx
jl 0x422071
mov eax, dword [ebp - 8]
cmp edx, esi
jge 0x422129
mov ch, byte [ebp - 1]
add eax, 0x50
mov dword [ebp - 0x14], eax
mov cl, byte [edx + edi]
mov al, ch
xor al, cl
neg cl
sbb cl, cl
and cl, al
mov eax, dword [ebp - 0x14]
mov byte [eax + edx], cl
inc edx
cmp edx, esi
jl 0x4220c1
jmp 0x422129
cmp eax, 3
jne 0x422147
mov al, byte [edx + 0x30]
mov byte [ebp - 1], al
lea eax, [esi + 0x50]
mov dword [ebp - 0xc], eax
push eax
mov eax, dword [ecx + 8]
call eax
mov edx, eax
add esp, 4
mov dword [ebp - 8], edx
test edx, edx
je 0x422144
xor ecx, ecx
test esi, esi
jle 0x42212c
lea eax, [edx + 0x50]
mov dl, byte [ebp - 1]
mov dword [ebp - 0x14], eax
nop dword [eax]
mov al, byte [ecx + edi]
test al, al
je 0x42211d
cmp al, dl
je 0x42211d
xor al, dl
mov esi, dword [ebp - 0x14]
mov byte [esi + ecx], al
inc ecx
cmp ecx, dword [ebx + 0xc]
jl 0x422110
mov edx, dword [ebp - 8]
mov esi, dword [ebx + 0x10]
mov ecx, dword [ebx + 0x14]
mov eax, dword [ebp - 0xc]
mov dword [esi], edx
mov dword [ecx], eax
xor eax, eax
pop edi
pop esi
mov esp, ebp
pop ebp
mov esp, ebx
pop ebx
ret
mov ecx, dword [ebp - 0x10]
mov esi, dword [ebx + 0x10]
mov eax, dword [ecx + 0xc]
push dword [esi]
call eax
mov eax, dword [ebx + 0x14]
add esp, 4
mov dword [esi], 0
mov dword [eax], 0
mov eax, 0xfffffffe
pop edi
pop esi
mov esp, ebp
pop ebp
mov esp, ebx
pop ebx
ret
pop edi
or eax, 0xffffffff
pop esi
mov esp, ebp
pop ebp
mov esp, ebx
pop ebx
ret