Function at 0x401d10
Capabilities:
Hash data using djb2

Disassembly:
push ebp
push ebx
push edi
push esi
sub esp, 0x1c
mov edi, dword [esp + 0x30]
mov eax, 0xffffffff
test edi, edi
je 0x401e85
mov ebp, dword [esp + 0x34]
test ebp, ebp
je 0x401e85
cmp dword [esp + 0x38], 0
je 0x401e85
push ebp
call fcn.004083f0
add esp, 4
mov dword [esp], eax
mov ebx, 0x1505
test eax, eax
je 0x401d89
xor eax, eax
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
movzx ecx, byte [ebp + eax]
test ecx, ecx
je 0x401d89
mov edx, ebx
shl edx, 5
add edx, ebx
mov esi, edx
and esi, ecx
xor edx, ecx
lea ebx, [edx + esi*2]
mov ecx, eax
and ecx, 1
xor eax, 1
lea eax, [eax + ecx*2]
cmp eax, dword [esp]
jb 0x401d60
mov ebp, dword [edi + 0x20]
mov eax, edi
lea edi, [ebp - 1]
mov ecx, ebp
sub ecx, 1
mov dword [esp + 4], ecx
jae 0x401df1
mov eax, 0xffffffff
mov esi, dword [esp + 0x30]
mov ecx, dword [esi + 0x18]
cmp ecx, dword [esi + 0x1c]
mov edi, dword [esp + 0x38]
mov ebp, dword [esp + 0x34]
jae 0x401e73
mov ecx, dword [esi + 0xc]
mov edx, dword [esi + 0x18]
mov dword [ecx + edx*4], ebp
mov ecx, dword [esi + 4]
mov edx, dword [esi + 0x18]
mov dword [ecx + eax*4], edx
mov ecx, dword [esi + 0x10]
mov dword [ecx + edx*4], edi
mov ecx, dword [esi + 0x14]
mov edx, dword [esi + 0x18]
mov dword [ecx + edx*4], eax
mov eax, dword [esi + 8]
mov ecx, dword [esi + 0x18]
mov dword [eax + ecx*4], ebx
inc dword [esi + 0x18]
mov eax, dword [esi]
mov dword [edi], eax
xor eax, eax
jmp 0x401e85
and edi, ebx
mov eax, dword [eax + 4]
mov dword [esp + 0xc], eax
mov esi, edi
not esi
inc edi
jmp 0x401e15
dec esi
inc edi
dec ebp
je 0x401d9c
mov eax, dword [esp + 4]
or eax, esi
add eax, edi
mov ecx, dword [esp + 0xc]
mov ecx, dword [ecx + eax*4]
cmp ecx, 0xffffffff
je 0x401da1
mov eax, dword [esp + 0x30]
mov eax, dword [eax + 8]
cmp dword [eax + ecx*4], ebx
jne 0x401e10
mov eax, dword [esp + 0x30]
mov eax, dword [eax + 0xc]
mov eax, dword [eax + ecx*4]
mov dword [esp + 8], eax
push eax
call fcn.004083f0
add esp, 4
cmp eax, dword [esp]
jne 0x401e10
push dword [esp]
push dword [esp + 0xc]
push dword [esp + 0x3c]
call fcn.00408410
add esp, 0xc
test eax, eax
jne 0x401e10
mov eax, 0xffffffff
jmp 0x401e85
mov ecx, esi
call fcn.00401f60
mov ecx, eax
mov eax, 0xffffffff
test ecx, ecx
je 0x401e8d
add esp, 0x1c
pop esi
pop edi
pop ebx
pop ebp
ret
push ebp
call fcn.004083f0
add esp, 4
mov dword [esp + 0x10], eax
mov edx, dword [esi + 0x20]
lea eax, [edx - 1]
mov ecx, edx
sub ecx, 1
mov dword [esp + 0xc], ecx
jae 0x401eb5
mov eax, 0xffffffff
jmp 0x401db9
and eax, ebx
mov ecx, dword [esi + 4]
mov dword [esp + 8], ecx
mov esi, eax
not esi
mov dword [esp + 0x14], eax
lea edi, [eax + 1]
xor eax, eax
jmp 0x401ed9
mov eax, dword [esp]
inc eax
dec esi
inc edi
dec edx
je 0x401f4a
mov dword [esp], eax
mov ebp, dword [esp + 0xc]
or ebp, esi
lea eax, [edi + ebp]
mov ecx, dword [esp + 8]
mov ecx, dword [ecx + eax*4]
cmp ecx, 0xffffffff
je 0x401f4f
mov eax, dword [esp + 0x30]
mov eax, dword [eax + 8]
cmp dword [eax + ecx*4], ebx
jne 0x401ed0
mov eax, dword [esp + 0x30]
mov eax, dword [eax + 0xc]
mov eax, dword [eax + ecx*4]
mov dword [esp + 0x18], eax
push eax
mov dword [esp + 8], edx
call fcn.004083f0
mov edx, dword [esp + 8]
add esp, 4
cmp eax, dword [esp + 0x10]
jne 0x401ed0
push dword [esp + 0x10]
push dword [esp + 0x1c]
push dword [esp + 0x3c]
call fcn.00408410
mov edx, dword [esp + 0x10]
add esp, 0xc
test eax, eax
jne 0x401ed0
mov eax, dword [esp]
add eax, dword [esp + 0x14]
add eax, ebp
inc eax
jmp 0x401f4f
mov eax, 0xffffffff
mov esi, dword [esp + 0x30]
mov edi, dword [esp + 0x38]
mov ebp, dword [esp + 0x34]
jmp 0x401db9