Function at 0x10040980
Capabilities:
Encode data using xor
Hash data using fnv

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff8
sub esp, 0x10
push ebx
mov ebx, ecx
push ebp
push esi
push edi
mov eax, dword [ebx + 0x14]
mov esi, edx
mov ebp, dword [ebx + 0xc]
mov eax, dword [eax]
add eax, 0x20
cmp eax, ebp
jae 0x10040b83
cmp eax, 0x1020fac8
je 0x10040b83
mov eax, dword [eax + 8]
and eax, 0xf
cmp eax, 4
jne 0x10040a37
push ecx
mov edx, ebx
lea ecx, [esp + 0x1c]
call fcn.10040900
mov edi, dword [esp + 0x20]
lea eax, [esi + 0x18]
mov ebp, dword [esp + 0x1c]
add esp, 4
xor ecx, ecx
mov edx, 0x811c9dc5
test edi, edi
je 0x100409f4
nop
movzx eax, byte [ecx + ebp]
inc ecx
xor eax, edx
imul edx, eax, 0x1000193
cmp ecx, edi
jb 0x100409e0
lea eax, [esi + 0x18]
push edx
lea ecx, [esp + 0x1c]
push ecx
lea ecx, [esp + 0x18]
push ecx
mov ecx, eax
call fcn.10036e00
mov eax, dword [eax + 4]
test eax, eax
jne 0x10040a10
mov eax, dword [esi + 0x1c]
xor edx, edx
lea ecx, [eax + 0x10]
cmp eax, dword [esi + 0x1c]
cmove ecx, edx
test ecx, ecx
je 0x10040b83
push dword [ecx + 8]
mov eax, dword [ecx + 4]
push ebx
call eax
add esp, 8
pop edi
pop esi
pop ebp
pop ebx
mov esp, ebp
pop ebp
ret
test eax, eax
je 0x10040b83
xor edi, edi
mov dword [esp + 0x1c], ebx
lea edx, [edi + 2]
call fcn.100de8a0
mov ecx, ebx
movups xmm0, xmmword [eax]
movups xmmword [ebp], xmm0
add dword [ebx + 0xc], 0x10
call fcn.100e0e10
mov dword [esp + 0x18], eax
lea ecx, [esi + 0x38]
lea eax, [esp + 0x18]
push eax
lea eax, [esp + 0x14]
push eax
call fcn.10042750
mov ecx, dword [esp + 0x1c]
test ecx, ecx
je 0x10040a8f
mov eax, dword [esp + 0x18]
cmp eax, 0xfffffffe
je 0x10040a8f
push eax
call fcn.100e0ef0
add esp, 4
mov eax, dword [esp + 0x10]
cmp eax, dword [esi + 0x3c]
je 0x10040a9b
lea edi, [eax + 0x10]
test edi, edi
je 0x10040b83
mov eax, dword [ebx + 0x14]
mov edx, dword [ebx + 0xc]
mov dword [esp + 0x1c], ebx
mov ecx, dword [eax]
mov eax, 0x1020fac8
add ecx, 0x30
cmp ecx, edx
cmovb eax, ecx
mov ecx, ebx
movups xmm0, xmmword [eax]
movups xmmword [edx], xmm0
add dword [ebx + 0xc], 0x10
call fcn.100e0e10
mov ebp, eax
mov eax, dword [edi]
mov dword [esp + 0x18], ebp
cmp eax, 0xfffffffe
je 0x10040aeb
cmp eax, 0xffffffff
je 0x10040aeb
mov ecx, dword [edi + 4]
push eax
call fcn.100e0ef0
add esp, 4
cmp ebp, 0xffffffff
jne 0x10040b0c
or eax, ebp
mov dword [edi + 4], ebx
push ebp
mov ecx, ebx
mov dword [edi], eax
call fcn.100e0ef0
add esp, 4
xor eax, eax
pop edi
pop esi
pop ebp
pop ebx
mov esp, ebp
pop ebp
ret
cmp ebp, 0xfffffffe
jne 0x10040b20
mov dword [edi + 4], ebx
xor eax, eax
mov dword [edi], ebp
pop edi
pop esi
pop ebp
pop ebx
mov esp, ebp
pop ebp
ret
mov eax, dword [edi + 4]
test eax, eax
je 0x10040b74
cmp eax, ebx
je 0x10040b74
mov edx, 0xfff0b9d8
mov ecx, eax
call fcn.100dedb0
mov edx, 0xfff0b9d8
mov ecx, ebx
mov esi, eax
call fcn.100dedb0
cmp esi, eax
jne 0x10040b74
push dword [edi + 4]
lea ecx, [esp + 0x1c]
call fcn.10030f40
mov ecx, dword [edi + 4]
call fcn.100e0e10
push ebp
mov ecx, ebx
mov dword [edi], eax
call fcn.100e0ef0
add esp, 4
xor eax, eax
pop edi
pop esi
pop ebp
pop ebx
mov esp, ebp
pop ebp
ret
mov dword [edi + 4], ebx
xor eax, eax
mov dword [edi], ebp
pop edi
pop esi
pop ebp
pop ebx
mov esp, ebp
pop ebp
ret
push dword [esi + 0xac]
mov eax, dword [esi + 0xa4]
push ebx
call eax
add esp, 8
pop edi
pop esi
pop ebp
pop ebx
mov esp, ebp
pop ebp
ret