Function at 0x4a8660
Capabilities:
Encode data using xor

Disassembly:
sub esp, 0x100
mov eax, dword [0x67f3c0]
xor eax, esp
mov dword [esp + 0xfc], eax
mov eax, dword [0x6815a8]
push ebx
mov ebx, dword [esp + 0x108]
mov dword [esp + 0x40], eax
push ebp
xor ebp, ebp
mov dword [esp + 0x20], ebx
mov al, byte [ebx + 0x1c2]
mov byte [esp + 0xa], al
mov al, byte [ebx + 0x1c4]
push esi
push edi
mov edi, dword [ebx + 0x174]
lea ecx, [ebp + 4]
mov byte [esp + 0x13], al
lea eax, [esp + 0x70]
mov dword [esp + 0x14], edi
mov dword [esp + 0x18], ebp
mov dword [eax - 4], ebp
xorps xmm0, xmm0
mov dword [eax], ebp
lea eax, [eax + 0x28]
mov dword [eax - 0x24], ebp
mov dword [eax - 0x20], ebp
movups xmmword [eax - 0x18], xmm0
mov dword [eax - 8], ebp
mov dword [eax - 0x1c], ebp
sub ecx, 1
jne 0x4a86b7
xor esi, esi
mov dword [esp + 0x24], esi
cmp dword [ebx + 0x54], esi
jle 0x4a8ca6
mov dword [esp + 0x20], esi
nop word [eax + eax]
xor edx, edx
xor ecx, ecx
mov eax, esi
bts edx, eax
cmp eax, 0x20
cmovae ecx, edx
xor edx, ecx
cmp eax, 0x40
cmovae ecx, edx
and edx, dword [ebx + 0x38]
and ecx, dword [ebx + 0x3c]
or edx, ecx
je 0x4a88de
mov edx, dword [ebx + 0x10]
xor eax, eax
add edx, dword [esp + 0x20]
cmp byte [esp + 0x12], al
mov dword [esp + 0x54], edx
setg al
inc eax
xor ebx, ebx
mov dword [esp + 0x30], eax
mov dword [esp + 0x48], ebx
test ebx, ebx
jne 0x4a873d
mov al, byte [edx + 0x58]
jmp 0x4a8740
mov al, byte [edx + 0x59]
mov edi, dword [edi + 0x10]
movzx eax, al
mov dword [esp + 0x1c], eax
mov dword [esp + 0x44], edi
lea ebp, [eax + eax*2]
mov eax, dword [edi + ebp*8]
mov ecx, eax
mov dword [esp + 0x50], ebp
test eax, eax
jle 0x4a8787
mov edi, dword [edi + ebp*8 + 8]
lea esi, [eax + eax*4]
cmp dword [edi + esi*8 - 0xc], 0
jne 0x4a8783
cmp dword [edi + esi*8 - 8], 0
mov esi, dword [esp + 0x24]
jne 0x4a8787
lea ecx, [eax - 1]
mov eax, dword [esp + 0x44]
mov dword [eax + ebp*8], ecx
jmp 0x4a8787
mov esi, dword [esp + 0x24]
cmp ecx, 1
jne 0x4a88bb
test dword [edx], 0x100
jne 0x4a87ca
cmp byte [esp + 0x12], 0
jg 0x4a87ab
movss xmm0, dword [edx + 0x44]
maxss xmm0, dword [edx + 0x48]
jmp 0x4a87c0
test ebx, ebx
jne 0x4a87bb
movss xmm0, dword [edx + 0x40]
maxss xmm0, dword [edx + 0x48]
jmp 0x4a87c0
movss xmm0, dword [edx + 0x44]
comiss xmm0, dword [edx + 0x28]
ja 0x4a88bb
cmp byte [esp + 0x13], 0
jle 0x4a87e4
mov eax, dword [esp + 0x28]
movsx eax, byte [eax + 0x1c4]
cmp esi, eax
jge 0x4a87e4
xor ecx, ecx
jmp 0x4a87e9
mov ecx, 1
cmp byte [esp + 0x12], 0
jle 0x4a87f8
test ebx, ebx
jne 0x4a87f8
xor eax, eax
jmp 0x4a87fd
mov eax, 2
add eax, ecx
lea esi, [esp + 0x6c]
mov dword [esp + 0x2c], eax
lea eax, [eax + eax*4]
cmp dword [esi + eax*8 + 0x10], 0
lea esi, [esi + eax*8]
jne 0x4a882f
mov dword [esi], 0x7f7fffff
mov dword [esi + 4], 0x7f7fffff
mov dword [esi + 8], 0xff7fffff
mov dword [esi + 0xc], 0xff7fffff
mov eax, dword [esp + 0x1c]
mov ecx, eax
shr ecx, 5
and eax, 0x1f
mov dword [esp + 0x1c], eax
mov edx, dword [esp + 0x1c]
mov eax, dword [esi + ecx*4 + 0x14]
bts eax, edx
mov edx, dword [esp + 0x54]
mov dword [esi + ecx*4 + 0x14], eax
mov eax, dword [esp + 0x50]
mov ecx, dword [esp + 0x44]
inc dword [esi + 0x10]
movss xmm0, dword [esi]
mov eax, dword [ecx + eax*8 + 8]
movss xmm4, dword [eax]
comiss xmm0, xmm4
movss xmm1, dword [eax + 4]
movss xmm2, dword [eax + 8]
movss xmm3, dword [eax + 0xc]
jbe 0x4a8881
movss dword [esi], xmm4
movss xmm0, dword [esi + 4]
comiss xmm0, xmm1
jbe 0x4a8890
movss dword [esi + 4], xmm1
comiss xmm2, dword [esi + 8]
jbe 0x4a889b
movss dword [esi + 8], xmm2
comiss xmm3, dword [esi + 0xc]
jbe 0x4a88a6
movss dword [esi + 0xc], xmm3
mov ebp, dword [esp + 0x18]
mov eax, dword [esp + 0x2c]
bts ebp, eax
mov ebx, dword [esp + 0x48]
mov dword [esp + 0x18], ebp
jmp 0x4a88bf
mov ebp, dword [esp + 0x18]
mov edi, dword [esp + 0x14]
inc ebx
mov esi, dword [esp + 0x24]
mov dword [esp + 0x48], ebx
cmp ebx, dword [esp + 0x30]
jl 0x4a8734
mov ebx, dword [esp + 0x28]
mov byte [edx + 0x57], 0xff
add dword [esp + 0x20], 0x68
inc esi
mov dword [esp + 0x24], esi
cmp esi, dword [ebx + 0x54]
jl 0x4a86f0
test ebp, ebp
je 0x4a8ca6
mov ebp, dword [esp + 0x4c]
mov edi, dword [edi + 4]
sub edi, 2
mov ecx, dword [ebp + 0x4378]
cmp edi, ecx
jle 0x4a8975
test ecx, ecx
je 0x4a891c
mov eax, ecx
cdq
sub eax, edx
sar eax, 1
add eax, ecx
jmp 0x4a8921
mov eax, 8
cmp eax, edi
mov esi, edi
cmovg esi, eax
cmp esi, ecx
jle 0x4a8975
lea eax, [esi + esi*2]
shl eax, 3
push eax
call fcn.00477650
mov ebx, eax
add esp, 4
mov eax, dword [ebp + 0x437c]
test eax, eax
je 0x4a8969
mov ecx, dword [ebp + 0x4374]
lea ecx, [ecx + ecx*2]
shl ecx, 3
push ecx
push eax
push ebx
call fcn.00513870
push dword [ebp + 0x437c]
call fcn.00477680
add esp, 0x10
mov dword [ebp + 0x437c], ebx
mov dword [ebp + 0x4378], esi
mov eax, dword [esp + 0x14]
mov ebx, 2
mov dword [ebp + 0x4374], edi
xorps xmm0, xmm0
mov ebp, dword [ebp + 0x437c]
mov dword [esp + 0x2c], ebp
mov ecx, dword [eax + 4]
movups xmmword [esp + 0x58], xmm0
mov dword [esp + 0x68], 0
mov dword [esp + 0x1c], ecx
lea eax, [ecx - 1]
cmp eax, ebx
jl 0x4a8a0b
lea ebp, [ecx - 1]
mov edx, ebp
and edx, 0x1f
mov dword [esp + 0x30], edx
mov eax, ebx
mov edi, ebx
or eax, 0x1f
sar edi, 5
cmp ebp, eax
mov ecx, 0x1f
cmovle ecx, edx
xor esi, esi
inc ecx
xor eax, eax
bts esi, ecx
cmp ecx, 0x20
mov ecx, ebx
cmovae eax, esi
xor edx, edx
xor esi, eax
and ecx, 0x1f
bts edx, ecx
dec esi
xor eax, eax
cmp ecx, 0x20
cmovae eax, edx
add ebx, 0x20
xor edx, eax
and ebx, 0xffffffe0
neg edx
and esi, edx
mov edx, dword [esp + 0x30]
or dword [esp + edi*4 + 0x58], esi
cmp ebx, ebp
jle 0x4a89b8
mov ebp, dword [esp + 0x2c]
mov edi, dword [esp + 0x28]
mov ebx, dword [esp + 0x1c]
movzx edx, byte [edi + 0x1c8]
movups xmm0, xmmword [edi + 0x140]
mov ecx, edx
and edx, 0x1f
shr ecx, 5
movups xmmword [esp + 0x34], xmm0
movss xmm2, dword [esp + 0x40]
mov eax, dword [esp + ecx*4 + 0x58]
movss xmm3, dword [esp + 0x3c]
btr eax, edx
mov dl, byte [esp + 0x12]
movss xmm5, dword [esp + 0x38]
movss xmm4, dword [esp + 0x34]
mov dword [esp + ecx*4 + 0x58], eax
xor eax, eax
test dl, dl
setg al
add eax, 2
sub ebx, eax
xor ecx, ecx
mov dword [esp + 0x18], ecx
nop word [eax + eax]
lea eax, [ecx + ecx*4]
shl eax, 3
mov esi, dword [esp + eax + 0x7c]
mov dword [esp + 0x20], esi
test esi, esi
je 0x4a8c16
lea edi, [esp + 0x6c]
mov edx, ecx
add edi, eax
movups xmm1, xmmword [edi]
movups xmmword [esp + 0x34], xmm1
and edx, 1
je 0x4a8aa2
cmp byte [esp + 0x13], 0
jg 0x4a8ab2
comiss xmm4, xmm1
ja 0x4a8ab2
movss dword [esp + 0x34], xmm4
movups xmm1, xmmword [esp + 0x34]
mov eax, ecx
and eax, 2
je 0x4a8ac0
cmp byte [esp + 0x12], 0
jg 0x4a8ad7
movaps xmm0, xmm1
shufps xmm0, xmm1, 0x55
comiss xmm5, xmm0
ja 0x4a8ad7
movss dword [esp + 0x38], xmm5
movups xmm1, xmmword [esp + 0x34]
test edx, edx
je 0x4a8af2
movaps xmm0, xmm1
shufps xmm0, xmm1, 0xaa
comiss xmm0, xmm3
jae 0x4a8af2
movss dword [esp + 0x3c], xmm3
movups xmm1, xmmword [esp + 0x34]
test eax, eax
je 0x4a8b1a
mov eax, dword [esp + 0x28]
test dword [eax + 4], 0x20000
jne 0x4a8b1a
movaps xmm0, xmm1
shufps xmm0, xmm1, 0xff
comiss xmm0, xmm2
jae 0x4a8b1a
movss dword [esp + 0x40], xmm2
movups xmm1, xmmword [esp + 0x34]
mov eax, dword [edi + 0x14]
xor edx, edx
not eax
sub ebx, dword [edi + 0x10]
and dword [esp + 0x58], eax
mov eax, dword [edi + 0x18]
not eax
mov dword [esp + 0x1c], ebx
and dword [esp + 0x5c], eax
mov eax, dword [edi + 0x1c]
not eax
and dword [esp + 0x60], eax
mov eax, dword [edi + 0x20]
not eax
and dword [esp + 0x64], eax
mov eax, dword [edi + 0x24]
not eax
and dword [esp + 0x68], eax
mov eax, dword [esp + 0x14]
cmp dword [eax + 4], edx
jle 0x4a8bcf
xor ebx, ebx
nop dword [eax + eax]
test esi, esi
je 0x4a8bc7
mov esi, edx
mov ecx, edx
and ecx, 0x1f
sar esi, 5
mov eax, 1
shl eax, cl
test dword [edi + esi*4 + 0x14], eax
je 0x4a8bb6
mov eax, dword [edi + esi*4 + 0x14]
btr eax, ecx
mov dword [edi + esi*4 + 0x14], eax
mov eax, dword [esp + 0x14]
mov esi, dword [esp + 0x20]
dec esi
mov dword [esp + 0x20], esi
mov ecx, dword [eax + 0x10]
mov eax, dword [ecx + ebx + 8]
movups xmmword [eax], xmm1
mov eax, ebp
add ebp, 0x18
movups xmm0, xmmword [ecx + ebx]
movups xmmword [eax], xmm0
movq xmm0, qword [ecx + ebx + 0x10]
movq qword [eax + 0x10], xmm0
jmp 0x4a8bba
mov esi, dword [esp + 0x20]
mov eax, dword [esp + 0x14]
inc edx
add ebx, 0x18
cmp edx, dword [eax + 4]
jl 0x4a8b60
mov ecx, dword [esp + 0x18]
mov ebx, dword [esp + 0x1c]
mov dl, byte [esp + 0x12]
mov edi, dword [esp + 0x28]
cmp ecx, 1
jne 0x4a8c1c
test dl, dl
jle 0x4a8c1c
movzx eax, byte [edi + 0x1c8]
mov edx, ebp
add ebp, 0x18
lea ecx, [eax + eax*2]
mov eax, dword [esp + 0x14]
mov eax, dword [eax + 0x10]
movups xmm0, xmmword [eax + ecx*8]
movups xmmword [edx], xmm0
movq xmm0, qword [eax + ecx*8 + 0x10]
mov ecx, dword [esp + 0x18]
movq qword [edx + 0x10], xmm0
inc ecx
mov dl, byte [esp + 0x12]
jmp 0x4a8a63
mov eax, dword [esp + 0x14]
jmp 0x4a8bd7
inc ecx
mov dword [esp + 0x18], ecx
cmp ecx, 4
jl 0x4a8a70
mov eax, dword [eax + 4]
xor esi, esi
test eax, eax
jle 0x4a8c7e
xor edi, edi
test ebx, ebx
je 0x4a8c7e
mov eax, esi
mov ecx, esi
and ecx, 0x1f
sar eax, 5
mov edx, 1
shl edx, cl
test dword [esp + eax*4 + 0x58], edx
je 0x4a8c6f
mov eax, dword [esp + 0x14]
mov ecx, ebp
add ebp, 0x18
dec ebx
mov eax, dword [eax + 0x10]
movups xmm0, xmmword [eax + edi]
movups xmmword [ecx], xmm0
movq xmm0, qword [eax + edi + 0x10]
movq qword [ecx + 0x10], xmm0
mov eax, dword [esp + 0x14]
inc esi
add edi, 0x18
mov eax, dword [eax + 4]
cmp esi, eax
jl 0x4a8c35
lea eax, [eax + eax*2]
lea eax, [eax*8 - 0x30]
push eax
mov eax, dword [esp + 0x50]
push dword [eax + 0x437c]
mov eax, dword [esp + 0x1c]
mov eax, dword [eax + 0x10]
add eax, 0x30
push eax
call fcn.00513870
add esp, 0xc
mov ecx, dword [esp + 0x10c]
pop edi
pop esi
pop ebp
pop ebx
xor ecx, esp
call fcn.00511a59
add esp, 0x100
ret