Function at 0x44a9e0
Capabilities:
Encode data using xor
Generate random numbers using the delphi lcg
Hash data with crc32

Disassembly:
sub esp, 0xc
mov ecx, dword [esp + 0x1c]
xorps xmm0, xmm0
mov eax, dword [esp + 0x14]
push ebx
push ebp
push esi
mov esi, dword [esp + 0x1c]
push edi
movlpd qword [esp + 0x14], xmm0
mov edi, dword [esi + 0xec]
mov edx, dword [esi + 0xe8]
mov dword [esi + 0xb8], eax
cmp ecx, edi
jb 0x44aa22
ja 0x44aa1c
mov eax, dword [esp + 0x28]
cmp eax, edx
jbe 0x44aa26
mov eax, edx
mov ecx, edi
jmp 0x44aa26
mov eax, dword [esp + 0x28]
mov dword [esi + 0xc0], eax
or eax, ecx
mov dword [esi + 0xc4], ecx
je 0x44adc4
mov eax, dword [esp + 0x18]
mov dword [esp + 0x28], eax
mov eax, dword [esp + 0x14]
mov dword [esp + 0x24], eax
nop word [eax + eax]
mov ecx, dword [esi + 0xa8]
mov eax, ecx
mov edx, dword [esi + 0xac]
or eax, edx
jne 0x44ab9d
mov ecx, dword [esi + 0xe0]
xorps xmm0, xmm0
mov edx, dword [esi + 0xe4]
mov eax, ecx
or eax, edx
movlpd qword [esp + 0x14], xmm0
je 0x44ab95
xor ebp, ebp
mov edi, 0x4000
test edx, edx
ja 0x44aa9a
jb 0x44aa96
cmp ecx, edi
jae 0x44aa9a
mov edi, ecx
mov ebp, edx
push edi
push dword [esi + 0x98]
push esi
call fcn.0044aea0
add esp, 0xc
test eax, eax
je 0x44ad8b
sub dword [esi + 0xe0], edi
mov ecx, edi
mov eax, dword [esi + 0x98]
mov edx, ebp
sbb dword [esi + 0xe4], ebp
test byte [esi + 0x54], 1
mov dword [esi + 0xa0], eax
mov dword [esi + 0xa8], edi
mov dword [esi + 0xac], ebp
je 0x44ab9d
xor ebx, ebx
test ebp, ebp
jb 0x44ab9d
ja 0x44aaf8
test edi, edi
je 0x44ab9d
mov edx, dword [esi + 0x98]
nop
mov ecx, dword [esi + 0xf8]
and ecx, 0xfffd
or ecx, 2
mov eax, ecx
xor eax, 1
imul eax, ecx
shr eax, 8
xor byte [edx + ebx], al
mov edx, dword [esi + 0x98]
mov ecx, dword [esi + 0xf0]
movsx eax, byte [edx + ebx]
inc ebx
xor eax, ecx
shr ecx, 8
movzx eax, al
xor ecx, dword [eax*4 + 0x4fb5b8]
movzx eax, cl
add eax, dword [esi + 0xf4]
imul eax, eax, 0x8088405
mov dword [esi + 0xf0], ecx
mov ecx, dword [esi + 0xf8]
inc eax
mov dword [esi + 0xf4], eax
shr eax, 0x18
xor eax, ecx
shr ecx, 8
movzx eax, al
xor ecx, dword [eax*4 + 0x4fb5b8]
xor eax, eax
mov dword [esi + 0xf8], ecx
cmp eax, ebp
jb 0x44ab00
ja 0x44ab87
cmp ebx, edi
jb 0x44ab00
mov ecx, dword [esi + 0xa8]
mov edx, dword [esi + 0xac]
jmp 0x44ab9d
mov edx, dword [esp + 0x18]
mov ecx, dword [esp + 0x14]
mov ebx, dword [esi + 0x104]
mov ebp, dword [esi + 0x100]
mov edi, ebp
mov dword [esp + 0x10], ebx
cmp ebx, edx
jb 0x44abc1
ja 0x44abb9
cmp edi, ecx
jbe 0x44abc1
mov edi, ecx
mov dword [esp + 0x10], edx
mov ebx, edx
mov eax, edi
or eax, ebx
je 0x44ac18
mov eax, dword [esi + 0xa0]
add eax, edi
sub ecx, edi
sbb edx, dword [esp + 0x10]
sub ebp, edi
mov bl, byte [eax - 1]
mov dword [esi + 0xa0], eax
mov eax, dword [esi + 0x104]
sbb eax, dword [esp + 0x10]
mov dword [esi + 0x100], ebp
or ebp, eax
mov byte [esp + 0x20], bl
mov dword [esi + 0xa8], ecx
mov dword [esi + 0xac], edx
mov dword [esi + 0x104], eax
jne 0x44ac18
mov al, bl
cmp al, byte [esi + 0x108]
jne 0x44ad9e
cmp word [esi + 0x56], 0
jne 0x44accf
mov ebp, dword [esi + 0xc4]
mov ebx, dword [esi + 0xc0]
cmp ebp, edx
ja 0x44ac39
jb 0x44ac3d
cmp ebx, ecx
jb 0x44ac3d
mov ebx, ecx
mov ebp, edx
push ebx
push dword [esi + 0xa0]
push dword [esi + 0xb8]
call sub.VCRUNTIME140.dll_memcpy
mov edi, dword [esi + 0xb8]
push ebx
push edi
push dword [esi + 0xd8]
call fcn.0044b990
mov edx, dword [esp + 0x3c]
add esp, 0x18
sub dword [esi + 0xe8], ebx
mov ecx, dword [esi + 0xe8]
sbb dword [esi + 0xec], ebp
sub dword [esi + 0xa8], ebx
mov dword [esi + 0xd8], eax
lea eax, [edi + ebx]
sbb dword [esi + 0xac], ebp
sub dword [esi + 0xc0], ebx
mov dword [esi + 0xb8], eax
sbb dword [esi + 0xc4], ebp
add dword [esi + 0xa0], ebx
add dword [esi + 0xc8], ebx
adc dword [esi + 0xcc], ebp
add edx, ebx
mov ebx, dword [esp + 0x28]
adc ebx, ebp
mov dword [esp + 0x24], edx
or ecx, dword [esi + 0xec]
mov dword [esp + 0x28], ebx
jmp 0x44ad6b
mov eax, dword [esi + 0xcc]
mov edi, dword [esi + 0xc8]
mov dword [esp + 0x20], eax
mov eax, dword [esi + 0xb8]
mov dword [esp + 0x14], eax
lea eax, [esi + 0xa0]
push 2
push eax
call fcn.00448060
mov ebp, eax
add esp, 8
test ebp, ebp
je 0x44ad09
cmp ebp, 1
jne 0x44adb1
mov ebx, dword [esi + 0xc8]
sub ebx, edi
mov edi, dword [esi + 0xcc]
push ebx
push dword [esp + 0x18]
sbb edi, dword [esp + 0x28]
push dword [esi + 0xd8]
call fcn.0044b990
mov ecx, dword [esi + 0xec]
add esp, 0xc
mov edx, dword [esp + 0x24]
mov dword [esi + 0xd8], eax
mov eax, dword [esi + 0xe8]
sub eax, ebx
mov dword [esi + 0xe8], eax
sbb ecx, edi
add edx, ebx
mov ebx, dword [esp + 0x28]
adc ebx, edi
mov dword [esi + 0xec], ecx
mov dword [esp + 0x24], edx
mov dword [esp + 0x28], ebx
cmp ebp, 1
je 0x44adcc
or eax, ecx
je 0x44adcc
mov eax, dword [esi + 0xc0]
or eax, dword [esi + 0xc4]
jne 0x44aa50
pop edi
pop esi
mov eax, edx
mov edx, ebx
pop ebp
pop ebx
add esp, 0xc
ret
pop edi
mov dword [esi + 8], 7
xor eax, eax
pop esi
pop ebp
xor edx, edx
pop ebx
add esp, 0xc
ret
pop edi
mov dword [esi + 8], 0x13
xor eax, eax
pop esi
pop ebp
xor edx, edx
pop ebx
add esp, 0xc
ret
mov dword [esi + 8], 0x12
pop edi
pop esi
pop ebp
xor eax, eax
xor edx, edx
pop ebx
add esp, 0xc
ret
mov ebx, dword [esp + 0x18]
mov edx, dword [esp + 0x14]
pop edi
pop esi
mov eax, edx
mov edx, ebx
pop ebp
pop ebx
add esp, 0xc
ret