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

Disassembly:
push ebp
mov ebp, esp
push ebx
push edi
push esi
sub esp, 0x38
mov edi, dword [ebp + 8]
mov dword [ebp - 0x1c], esp
mov dword [ebp - 0x10], 0xffffffff
lea eax, [ebp - 0x18]
mov dword [ebp - 0x14], 0x401710
mov ecx, dword fs:[0]
mov dword [ebp - 0x18], ecx
mov dword fs:[0], eax
test edi, edi
je 0x401200
mov eax, dword [0x41d4e0]
mov ecx, dword [0x41ca98]
mov edx, dword fs:[0x2c]
mov ecx, dword [edx + ecx*4]
cmp eax, dword [ecx + 4]
jg 0x40126d
xorps xmm0, xmm0
movsd qword [ebp - 0x30], xmm0
xorps xmm0, xmm0
movups xmmword [ebp - 0x40], xmm0
push edi
call fcn.00407740
add esp, 4
test eax, eax
js 0x40139a
mov esi, eax
cmp eax, 0xf
ja 0x401214
mov dword [ebp - 0x30], esi
mov dword [ebp - 0x2c], 0xf
lea eax, [ebp - 0x40]
push esi
push edi
push eax
call fcn.0040bc30
add esp, 0xc
add esi, ebp
add esi, 0xffffffc0
mov byte [esi], 0
mov eax, dword [ebp - 0x40]
mov edi, dword [ebp - 0x30]
mov ecx, dword [ebp - 0x2c]
cmp ecx, 0x10
lea esi, [ebp - 0x40]
cmovae esi, eax
test edi, edi
mov dword [ebp - 0x20], edi
mov dword [ebp - 0x28], eax
mov dword [ebp - 0x44], ecx
je 0x4010d6
mov eax, edi
and eax, 3
cmp edi, 4
jae 0x4010dd
mov ecx, 0x811c9dc5
xor edx, edx
jmp 0x40112a
mov ecx, 0x811c9dc5
jmp 0x401151
and edi, 0xfffffffc
mov ecx, 0x811c9dc5
xor edx, edx
nop word [eax + eax]
movzx ebx, byte [esi + edx]
xor ebx, ecx
imul ecx, ebx, 0x1000193
movzx ebx, byte [esi + edx + 1]
xor ebx, ecx
imul ecx, ebx, 0x1000193
movzx ebx, byte [esi + edx + 2]
xor ebx, ecx
imul ecx, ebx, 0x1000193
movzx ebx, byte [esi + edx + 3]
xor ebx, ecx
imul ecx, ebx, 0x1000193
add edx, 4
cmp edi, edx
jne 0x4010f0
test eax, eax
je 0x401151
add edx, esi
xor edi, edi
nop word cs:[eax + eax]
movzx ebx, byte [edx + edi]
xor ebx, ecx
imul ecx, ebx, 0x1000193
inc edi
cmp eax, edi
jne 0x401140
and ecx, dword [0x41d4d8]
mov eax, dword [0x41d4cc]
mov edi, dword [eax + ecx*8 + 4]
mov edx, dword [0x41d4c4]
xor ebx, ebx
mov dword [ebp - 0x24], edx
cmp edi, edx
je 0x4011c3
add ecx, ecx
mov ebx, dword [eax + ecx*4]
mov ecx, dword [ebp - 0x20]
cmp dword [edi + 0x1c], 0x10
jae 0x401190
nop dword [eax]
lea eax, [edi + 8]
cmp ecx, dword [edi + 0x18]
jne 0x401198
jmp 0x4011a7
mov eax, dword [edi + 8]
cmp ecx, dword [edi + 0x18]
je 0x4011a7
cmp edi, ebx
je 0x4011c1
mov edi, dword [edi + 4]
cmp dword [edi + 0x1c], 0x10
jb 0x401180
jmp 0x401190
test ecx, ecx
je 0x4011bd
push ecx
push eax
push esi
call fcn.00402eee
mov ecx, dword [ebp - 0x20]
add esp, 0xc
test eax, eax
jne 0x401198
mov ebx, edi
jmp 0x4011c3
xor ebx, ebx
mov eax, dword [ebp - 0x24]
test ebx, ebx
cmove ebx, eax
mov edx, dword [ebp - 0x44]
cmp edx, 0x10
jae 0x4011dc
cmp ebx, eax
je 0x401200
mov eax, dword [ebx + 0x2c]
jmp 0x401202
lea ecx, [edx + 1]
cmp ecx, 0x1000
jae 0x40139f
push ecx
push dword [ebp - 0x28]
call fcn.0040175f
add esp, 8
mov eax, dword [0x41d4c4]
cmp ebx, eax
jne 0x4011d7
xor eax, eax
mov ecx, dword [ebp - 0x18]
mov dword fs:[0], ecx
add esp, 0x38
pop esi
pop edi
pop ebx
pop ebp
ret
mov eax, esi
or eax, 0xf
cmp eax, 0x17
mov ebx, 0x16
cmovae ebx, eax
cmp eax, 0xfff
jae 0x401256
lea eax, [ebx + 1]
push eax
call fcn.0040172a
add esp, 4
mov edi, eax
mov dword [ebp - 0x40], edi
mov dword [ebp - 0x30], esi
mov dword [ebp - 0x2c], ebx
push esi
push dword [ebp + 8]
push edi
call fcn.0040bc30
add esp, 0xc
add esi, edi
jmp 0x4010a1
lea eax, [ebx + 0x24]
push eax
call fcn.0040172a
add esp, 4
lea edi, [eax + 0x23]
and edi, 0xffffffe0
mov dword [edi - 4], eax
jmp 0x401239
push 0x41d4e0
call fcn.00401790
add esp, 4
cmp dword [0x41d4e0], 0xffffffff
jne 0x401059
mov dword [0x41d4c0], 0
mov dword [0x41d4c4], 0
mov dword [0x41d4c8], 0
mov dword [ebp - 0x10], 0
push 0x30
call fcn.0040172a
add esp, 4
mov dword [ebp - 0x20], eax
mov eax, dword [ebp - 0x20]
mov dword [eax], eax
mov dword [eax + 4], eax
mov dword [0x41d4c4], eax
movaps xmm0, xmmword [0x418440]
movups xmmword [0x41d4cc], xmm0
mov dword [0x41d4dc], 8
mov dword [0x41d4c0], 0x3f800000
mov dword [ebp - 0x10], 1
push 0x40
call fcn.0040172a
add esp, 4
mov esi, eax
mov eax, dword [0x41d4d4]
mov ecx, dword [0x41d4cc]
sub eax, ecx
je 0x401331
cmp eax, 0x1000
jb 0x401327
mov edx, dword [ecx - 4]
add ecx, 0xfffffffc
sub ecx, edx
cmp ecx, 0x20
jae 0x4013bc
add eax, 0x23
mov ecx, edx
push eax
push ecx
call fcn.0040175f
add esp, 8
mov dword [0x41d4cc], esi
mov eax, esi
add eax, 0x40
mov dword [0x41d4d0], eax
mov dword [0x41d4d4], eax
mov eax, dword [ebp - 0x20]
mov dword [esi], eax
mov dword [esi + 4], eax
mov dword [esi + 8], eax
mov dword [esi + 0xc], eax
mov dword [esi + 0x10], eax
mov dword [esi + 0x14], eax
mov dword [esi + 0x18], eax
mov dword [esi + 0x1c], eax
mov dword [esi + 0x20], eax
mov dword [esi + 0x24], eax
mov dword [esi + 0x28], eax
mov dword [esi + 0x2c], eax
mov dword [esi + 0x30], eax
mov dword [esi + 0x34], eax
mov dword [esi + 0x38], eax
mov dword [esi + 0x3c], eax
push 0x4014f0
call fcn.00401870
add esp, 4
push 0x41d4e0
call fcn.0040180a
add esp, 4
mov edi, dword [ebp + 8]
jmp 0x401059
call fcn.00414ee0
mov ecx, dword [ebp - 0x28]
mov eax, dword [ecx - 4]
add ecx, 0xfffffffc
sub ecx, eax
cmp ecx, 0x20
jae 0x4013bc
mov ecx, edx
add ecx, 0x24
mov dword [ebp - 0x28], eax
jmp 0x4011eb
call fcn.004071d8
nop word cs:[eax + eax]
push ebp
sub esp, 0xc
add ebp, 0xc
mov ecx, dword [0x41d4cc]
test ecx, ecx
je 0x401429
mov eax, dword [0x41d4d4]
sub eax, ecx
cmp eax, 0x1000
jb 0x401401
mov edx, dword [ecx - 4]
add ecx, 0xfffffffc
sub ecx, edx
cmp ecx, 0x20
jae 0x401433
add eax, 0x23
mov ecx, edx
push eax
push ecx
call fcn.0040175f
add esp, 8
mov dword [0x41d4cc], 0
mov dword [0x41d4d0], 0
mov dword [0x41d4d4], 0
call fcn.00401550
add esp, 0xc
pop ebp
ret
call fcn.004071d8
nop dword [eax + eax]
push ebp
sub esp, 0xc
add ebp, 0xc
push 0x41d4e0
call fcn.004017df
add esp, 0x10
pop ebp
ret