Function at 0x449fd0
Capabilities:
Encode data using xor
Generate random numbers using the delphi lcg

Disassembly:
push ebp
mov ebp, esp
sub esp, 0x10
push ebx
push esi
mov ebx, ecx
push edi
xor edi, edi
mov dword [ebp - 8], ebx
mov dword [ebp - 4], edi
test ebx, ebx
je 0x44a297
mov esi, dword [ebx + 0x9c]
test esi, esi
je 0x44a297
cmp dword [esi], edi
jne 0x44a007
lea eax, [edi - 0x64]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
mov eax, dword [esi + 0x5c]
mov dword [esi + 0x10], edx
mov edx, 0x10000
mov dword [esi + 0x14], 0x10000
cmp eax, edx
jae 0x44a02a
cmp dword [esi + 0x8c], edi
jne 0x44a02a
mov dword [esi + 0x14], eax
mov edx, eax
mov eax, dword [esi + 8]
add eax, dword [esi + 0x58]
cmp eax, 0x10000
jae 0x44a044
cmp dword [esi + 0x8c], edi
je 0x44a044
mov dword [esi + 0x14], eax
mov edx, eax
test edx, edx
je 0x44a28e
nop dword [eax]
mov edi, dword [esi + 8]
test edi, edi
jne 0x44a170
mov eax, dword [esi + 0x58]
test eax, eax
je 0x44a170
mov edi, 0x4000
cmp eax, edi
push 0
cmovb edi, eax
mov eax, dword [esi + 0x88]
add eax, dword [esi + 0x3c]
push eax
push dword [esi + 0x80]
mov eax, dword [esi + 0x70]
push dword [esi + 0x7c]
call eax
add esp, 0x10
test eax, eax
jne 0x44a27a
mov eax, dword [esi + 0x64]
push edi
push dword [esi]
push dword [esi + 0x80]
push dword [esi + 0x7c]
call eax
add esp, 0x10
cmp eax, edi
jne 0x44a27a
cmp dword [ebx + 0xa0], 0
je 0x44a162
xor ecx, ecx
mov dword [ebp - 0xc], ecx
test edi, edi
je 0x44a162
nop dword [eax + eax]
mov edx, dword [ebx + 0xac]
add ecx, dword [esi]
and edx, 0xfffd
or edx, 2
mov eax, edx
xor eax, 1
imul eax, edx
shr eax, 8
xor byte [ecx], al
mov bl, byte [ecx]
mov eax, dword [ebp - 8]
mov edx, dword [eax + 0xb0]
mov ecx, dword [eax + 0xa4]
movsx eax, bl
xor eax, ecx
shr ecx, 8
movzx eax, al
mov eax, dword [edx + eax*4]
xor eax, ecx
mov ecx, dword [ebp - 8]
mov dword [ecx + 0xa4], eax
movzx eax, al
add eax, dword [ecx + 0xa8]
imul eax, eax, 0x8088405
inc eax
mov dword [ecx + 0xa8], eax
mov ecx, dword [ecx + 0xac]
shr eax, 0x18
xor eax, ecx
shr ecx, 8
movzx eax, al
xor ecx, dword [edx + eax*4]
mov eax, dword [ebp - 8]
mov dword [eax + 0xac], ecx
mov ecx, dword [ebp - 0xc]
mov eax, dword [esi]
mov byte [ecx + eax], bl
inc ecx
mov ebx, dword [ebp - 8]
mov dword [ebp - 0xc], ecx
cmp ecx, edi
jb 0x44a0d0
add dword [esi + 0x3c], edi
mov eax, dword [esi]
sub dword [esi + 0x58], edi
mov dword [esi + 4], eax
mov dword [esi + 8], edi
mov eax, dword [esi + 0x84]
test eax, eax
je 0x44a206
cmp dword [esi + 0x8c], 0
jne 0x44a206
cmp eax, 0xc
je 0x44a1f1
mov eax, dword [esi + 0x18]
lea ecx, [esi + 4]
mov dword [ebp - 0xc], eax
mov edx, 2
mov eax, dword [esi + 0x10]
mov dword [ebp - 0x10], eax
call fcn.0044a770
mov edi, eax
test edi, edi
js 0x44a1b7
cmp dword [esi + 0x1c], 0
mov eax, 0xfffffffd
cmovne edi, eax
mov ebx, dword [esi + 0x18]
sub ebx, dword [ebp - 0xc]
mov eax, dword [ebp - 0x10]
test eax, eax
je 0x44a1d2
mov ecx, dword [esi + 0x50]
mov edx, eax
push ebx
call fcn.0044be60
add esp, 4
sub dword [esi + 0x5c], ebx
mov dword [esi + 0x50], eax
mov eax, dword [ebp - 4]
add eax, ebx
mov dword [ebp - 4], eax
cmp edi, 1
je 0x44a29c
test edi, edi
jne 0x44a28e
mov edi, dword [ebp - 4]
cmp dword [esi + 0x14], 0
jbe 0x44a28e
mov ebx, dword [ebp - 8]
jmp 0x44a050
test edi, edi
jne 0x44a20f
cmp dword [esi + 0x58], edi
je 0x44a284
mov eax, dword [esi + 0x14]
cmp eax, edi
mov ebx, eax
mov dword [ebp - 0xc], eax
cmovae ebx, edi
xor edx, edx
test ebx, ebx
je 0x44a23c
mov eax, dword [esi + 4]
mov ecx, dword [esi + 0x10]
mov al, byte [edx + eax]
mov byte [edx + ecx], al
inc edx
cmp edx, ebx
jb 0x44a222
mov eax, dword [esi + 0x14]
mov edi, dword [esi + 8]
mov dword [ebp - 0xc], eax
mov eax, dword [esi + 0x10]
test eax, eax
je 0x44a251
mov ecx, dword [esi + 0x50]
mov edx, eax
push ebx
call fcn.0044be60
add esp, 4
sub dword [esi + 0x5c], ebx
sub edi, ebx
add dword [esi + 0x10], ebx
add dword [esi + 4], ebx
add dword [esi + 0x18], ebx
mov dword [esi + 0x50], eax
mov eax, dword [ebp - 0xc]
mov dword [esi + 8], edi
sub eax, ebx
mov edi, dword [ebp - 4]
add edi, ebx
mov dword [esi + 0x14], eax
mov dword [ebp - 4], edi
jmp 0x44a1f4
pop edi
pop esi
or eax, 0xffffffff
pop ebx
mov esp, ebp
pop ebp
ret
mov eax, dword [ebp - 4]
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
mov eax, edi
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret
mov eax, 0xffffff9a
pop edi
pop esi
pop ebx
mov esp, ebp
pop ebp
ret