Function at 0x45e800
Capabilities:
Generate random numbers using a mersenne twister

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff8
sub esp, 0x3c
mov eax, dword [0x51ed6c]
push ebx
push esi
mov esi, dword [ebp + 0xc]
mov ebx, 0xa
mov dword [esp + 0x38], eax
push edi
mov dword [esp + 0x24], ecx
movzx eax, word [esi]
mov dword [esp + 0x34], 0
mov dword [0x51ed6c], 0
mov dword [esp + 0x30], 0xffffffff
mov dword [esp + 0x14], ebx
mov byte [0x51eb7e], 0
mov byte [0x51eb7b], 0
mov byte [0x51eb7a], 0
mov dword [0x51ed70], 0
mov byte [esp + 0x12], 0
mov byte [esp + 0x10], 0
mov byte [esp + 0xe], 0
mov byte [esp + 0x13], 0
mov byte [esp + 0xf], 0
mov byte [esp + 0x11], 0
test ax, ax
je 0x45ea72
mov ecx, eax
nop word [eax + eax]
push ecx
mov ebx, 1
call fcn.004d9eb5
movzx eax, ax
add esp, 4
add eax, 0xffffffbd
cmp eax, 0x19
ja case.0x45e8b4.69
movzx eax, byte [eax + 0x45f088]
jmp dword [eax*4 + 0x45f060]
movzx eax, word [esi + 2]
lea edi, [esi + 2]
mov ebx, eax
test eax, 0xffffff80
je 0x45e8cf
xor edx, edx
jmp 0x45e8dc
push 2
push eax
call fcn.004d4154
add esp, 8
mov edx, eax
mov eax, ebx
and eax, 0xffdf
test edx, edx
movzx ecx, ax
mov eax, ebx
cmove ecx, eax
movzx ecx, cx
cmp ecx, 0x4c
sete al
inc al
cmp ecx, 0x4c
mov byte [0x51eb7e], al
cmovne edi, esi
mov esi, edi
jmp case.0x45e8b4.69
movzx eax, word [esi + 2]
mov edx, eax
test ax, ax
je case.0x45e8b4.69
mov ebx, edx
add esi, 2
mov dword [esp + 0x14], ebx
jmp 0x45ea60
lea edi, [esi + 2]
nop word [eax + eax]
movzx eax, word [edi]
cmp eax, 0x20
je 0x45e93d
cmp eax, 9
jne 0x45e942
add edi, 2
jmp 0x45e930
mov ebx, edi
test ax, ax
je 0x45e981
mov esi, eax
nop dword [eax + eax]
mov ecx, 0x506dbc
mov edx, 0x20
nop word [eax + eax]
cmp si, dx
je 0x45e998
movzx eax, word [ecx + 2]
add ecx, 2
mov edx, eax
test ax, ax
jne 0x45e960
movzx eax, word [ebx + 2]
add ebx, 2
mov esi, eax
test ax, ax
jne 0x45e950
mov ecx, edi
lea edx, [ecx + 2]
mov ax, word [ecx]
add ecx, 2
test ax, ax
jne 0x45e986
sub ecx, edx
sar ecx, 1
lea ebx, [edi + ecx*2]
mov eax, ebx
mov ecx, 0x520c68
sub eax, edi
push 0
sar eax, 1
push eax
push edi
call fcn.0043d0f0
mov ecx, eax
mov dword [0x51ed6c], ecx
test ecx, ecx
je 0x45efd5
cmp byte [ecx + 0x51], 0
jne 0x45efd5
mov eax, dword [ecx + 0x10]
sub eax, 2
cmp eax, 1
ja 0x45efd5
mov eax, dword [ecx + 0xc]
cmp word [eax + 4], 0
jne 0x45efd5
cmp word [eax + 0x14], 0
jne 0x45efd5
lea esi, [ebx - 2]
jmp case.0x45e8b4.69
mov byte [0x51eb7b], 1
jmp case.0x45e8b4.69
lea eax, [esi + 2]
push eax
call fcn.004cfe02
add esp, 4
cmp eax, 1
cmovl eax, ebx
dec eax
mov dword [0x51ed70], eax
jmp case.0x45e8b4.69
push 6
push str.Random
push esi
call fcn.004cff45
mov ebx, dword [esp + 0x20]
add esp, 0xc
test eax, eax
jne 0x45ea38
mov byte [esp + 0xf], 1
add esi, 0xa
jmp 0x45ea60
mov byte [0x51eb7a], 1
jmp 0x45ea60
mov byte [esp + 0x11], 1
mov dword [esp + 0x30], 0
jmp case.0x45e8b4.69
mov byte [esp + 0x12], 1
jmp case.0x45e8b4.69
mov byte [esp + 0x13], 1
mov ebx, dword [esp + 0x14]
movzx eax, word [esi + 2]
add esi, 2
mov ecx, eax
test ax, ax
jne 0x45e890
mov esi, dword [ebp + 8]
movzx edx, word [esi]
test dx, dx
je 0x45efd5
mov ecx, dword [0x520308]
mov dword [esp + 0x1c], ecx
mov al, byte [ecx + 0x17]
test al, al
jne 0x45ea98
mov eax, dword [ecx + 0xc]
mov al, byte [eax + 0x17]
cmp al, 2
ja 0x45efd5
mov edi, 1
mov ecx, esi
cmp dx, bx
lea eax, [edi + 1]
cmovne eax, edi
add ecx, 2
mov edi, eax
movzx eax, word [ecx]
mov edx, eax
test ax, ax
jne 0x45eaa7
mov eax, dword [esp + 0x14]
mov ebx, ecx
sub ebx, esi
sar ebx, 1
cmp byte [esp + 0x12], 0
mov dword [esp + 0x20], ebx
jne 0x45eb02
cmp ecx, esi
jbe 0x45eb02
cmp word [ecx - 2], ax
jne 0x45eb02
mov byte [esp + 0x10], 1
dec edi
mov al, byte [esp + 0xe]
cmp edi, 1
jne 0x45eb2e
mov ecx, dword [esp + 0x1c]
push edi
push 0
push ebx
push esi
call fcn.004b3e10
mov ebx, eax
jmp 0x45efda
cmp ax, 0xa
jne 0x45eae4
push 0xa
push esi
call fcn.004cbd94
add esp, 8
test eax, eax
je 0x45eae4
cmp eax, esi
jbe 0x45eae4
cmp word [eax - 2], 0xd
jne 0x45eae4
mov al, 1
mov byte [esp + 0xe], al
mov byte [esp + 0x10], al
jmp 0x45eae8
cmp dword [0x51ed6c], 0
jne 0x45eb3b
test al, al
je 0x45eba9
lea eax, [ebx*2 + 6]
push eax
call fcn.004cfec5
mov ecx, eax
add esp, 4
mov dword [esp + 0x34], ecx
test ecx, ecx
jne 0x45eb70
mov ecx, dword [esp + 0x24]
push 0x4f03e8
push eax
push 0x504378
call fcn.0044d9a0
mov ebx, eax
jmp 0x45efda
lea eax, [ebx*2 + 2]
push eax
push esi
push ecx
call fcn.004cc730
mov ecx, dword [esp + 0x40]
add esp, 0xc
cmp byte [esp + 0xe], 0
mov esi, ecx
je 0x45eba9
mov eax, dword [0x50ff2c]
mov dword [ecx + ebx*2], eax
mov ax, word [0x50ff30]
mov word [ecx + ebx*2 + 4], ax
add ebx, 2
mov dword [esp + 0x20], ebx
xor ecx, ecx
lea eax, [edi + 1]
cmp byte [esp + 0xf], cl
setne cl
lea ecx, [ecx*4 + 4]
imul eax, ecx
mov dword [esp + 0x28], ecx
push eax
call fcn.004cfec5
add esp, 4
mov dword [esp + 0x2c], eax
test eax, eax
jne 0x45ebef
mov ecx, dword [esp + 0x24]
push 0x4f03e8
push eax
push 0x504378
call fcn.0044d9a0
mov ebx, eax
jmp 0x45efda
mov edx, dword [0x5223e8]
mov edi, eax
mov dword [eax], esi
xor ecx, ecx
movzx eax, word [esi]
mov dword [esp + 0x18], ecx
test ax, ax
je 0x45ec90
mov ecx, eax
xor ebx, ebx
nop
cmp cx, word [esp + 0x14]
jne 0x45ec76
xor eax, eax
inc ebx
mov word [esi], ax
cmp byte [esp + 0xf], al
je 0x45ec6d
sub dword [0x51d3f4], 1
jne 0x45ec37
call fcn.004294d0
mov edx, dword [0x5223e8]
mov ecx, dword [edx]
mov eax, ecx
shr eax, 0xb
add edx, 4
xor ecx, eax
mov dword [0x5223e8], edx
mov eax, ecx
and eax, 0xff3a58ad
shl eax, 7
xor ecx, eax
mov eax, ecx
and eax, 0xffffdf8c
shl eax, 0xf
xor ecx, eax
mov eax, ecx
shr eax, 0x12
xor eax, ecx
shr eax, 1
mov dword [edi + 4], eax
add edi, dword [esp + 0x28]
lea eax, [esi + 2]
mov dword [edi], eax
movzx eax, word [esi + 2]
add esi, 2
mov ecx, eax
test ax, ax
jne 0x45ec10
mov dword [esp + 0x18], ebx
mov ebx, dword [esp + 0x20]
mov ecx, dword [esp + 0x18]
cmp byte [esp + 0x10], 0
mov al, byte [esp + 0xf]
jne 0x45ecf2
inc ecx
mov dword [esp + 0x18], ecx
test al, al
je 0x45ecf2
sub dword [0x51d3f4], 1
jne 0x45ecb8
call fcn.004294d0
mov edx, dword [0x5223e8]
mov ecx, dword [edx]
mov eax, ecx
shr eax, 0xb
add edx, 4
xor ecx, eax
mov dword [0x5223e8], edx
mov eax, ecx
and eax, 0xff3a58ad
shl eax, 7
xor ecx, eax
mov eax, ecx
and eax, 0xffffdf8c
shl eax, 0xf
xor ecx, eax
mov eax, ecx
shr eax, 0x12
xor eax, ecx
shr eax, 1
mov dword [edi + 4], eax
mov al, byte [esp + 0xf]
cmp dword [0x51ed6c], 0
je 0x45ed02
mov eax, 0x45e5c0
jmp 0x45ed1f
test al, al
je 0x45ed0d
mov eax, 0x45e5b0
jmp 0x45ed1f
cmp byte [esp + 0x13], 0
mov eax, 0x45e410
mov ecx, 0x45e520
cmovne eax, ecx
mov edi, dword [esp + 0x18]
push eax
push dword [esp + 0x2c]
push edi
push dword [esp + 0x38]
call fcn.004d8840
mov esi, dword [esp + 0x2c]
add esp, 0x10
mov ecx, esi
push 1
push 0
push ebx
push 0
call fcn.004b3e10
cmp eax, 1
je 0x45ed53
xor ebx, ebx
jmp 0x45efda
mov ebx, dword [esp + 0x2c]
lea eax, [edi - 1]
xor edi, edi
mov dword [esp + 0x38], eax
push edi
push 1
mov ecx, esi
mov dword [esp + 0x28], 0
call fcn.00401630
mov esi, eax
mov dword [esp + 0x24], edi
cmp dword [esp + 0x18], edi
jbe 0x45ee23
cmp byte [esp + 0x11], 0
je 0x45edcf
test edi, edi
je 0x45edcf
cmp byte [0x51eb7b], 0
je 0x45ee5f
cmp dword [0x51ed70], 0
jne 0x45ee5f
mov ecx, dword [ebx]
call fcn.00429920
mov ecx, edi
movsd qword [esp + 0x40], xmm0
call fcn.00429920
movsd xmm1, qword [esp + 0x40]
ucomisd xmm1, xmm0
lahf
test ah, 0x44
jnp 0x45eec3
mov ecx, dword [ebx]
movzx eax, word [ecx]
test ax, ax
je 0x45edf3
mov edx, eax
nop dword [eax + eax]
add ecx, 2
mov word [esi], dx
add esi, 2
movzx eax, word [ecx]
mov edx, eax
test ax, ax
jne 0x45ede0
mov eax, dword [esp + 0x24]
cmp eax, dword [esp + 0x38]
jb 0x45ee04
cmp byte [esp + 0x10], 0
je 0x45ee0e
mov ecx, dword [esp + 0x14]
mov word [esi], cx
add esi, 2
mov edi, dword [ebx]
add ebx, dword [esp + 0x28]
inc eax
mov dword [esp + 0x24], eax
cmp eax, dword [esp + 0x18]
jb 0x45ed82
push dword [esp + 0x2c]
call fcn.004cfed0
mov ebx, dword [esp + 0x20]
xor eax, eax
add esp, 4
cmp byte [esp + 0xe], al
je 0x45ef44
cmp word [esi - 4], 0xd
jne 0x45ef0f
mov word [esi - 4], ax
cmp byte [ebx + 0x17], al
jne 0x45eee8
mov esi, dword [ebx + 0xc]
jmp 0x45eeea
cmp byte [0x51eb7e], 0
mov eax, dword [ebx]
jne 0x45ee76
push edi
push eax
call fcn.004ce516
add esp, 8
jmp 0x45eebb
cmp byte [0x51eb7e], 2
jne 0x45ee89
push edi
push eax
call dword [sym.imp.KERNEL32.dll_lstrcmpiW]
jmp 0x45eebb
mov ecx, edi
nop dword [eax + eax]
mov dx, word [eax]
cmp dx, word [ecx]
jne 0x45eeb6
test dx, dx
je 0x45eeb2
mov dx, word [eax + 2]
cmp dx, word [ecx + 2]
jne 0x45eeb6
add eax, 4
add ecx, 4
test dx, dx
jne 0x45ee90
xor eax, eax
jmp 0x45eebb
sbb eax, eax
or eax, 1
test eax, eax
jne 0x45edcf
inc dword [esp + 0x20]
mov eax, dword [esp + 0x24]
cmp eax, dword [esp + 0x38]
jne 0x45ee10
cmp byte [esp + 0x10], 0
jne 0x45ee10
sub esi, 2
jmp 0x45ee10
mov esi, ebx
cmp byte [esi + 0x17], 1
jne 0x45ef05
test byte [esi + 0x15], 8
je 0x45eefd
mov ecx, esi
call fcn.00401490
add esi, 0xc
add dword [esi], 0xfffffffc
jmp 0x45ef47
mov esi, 0x522be8
add dword [esi], 0xfffffffc
jmp 0x45ef47
mov word [esi - 2], ax
cmp byte [ebx + 0x17], al
jne 0x45ef1d
mov esi, dword [ebx + 0xc]
jmp 0x45ef1f
mov esi, ebx
cmp byte [esi + 0x17], 1
jne 0x45ef3a
test byte [esi + 0x15], 8
je 0x45ef32
mov ecx, esi
call fcn.00401490
add esi, 0xc
add dword [esi], 0xfffffffe
jmp 0x45ef47
mov esi, 0x522be8
add dword [esi], 0xfffffffe
jmp 0x45ef47
mov word [esi], ax
cmp byte [esp + 0x11], 0
je 0x45efaa
cmp dword [esp + 0x20], 0
je 0x45efaa
push 0
push 1
mov ecx, ebx
call fcn.00401630
mov esi, eax
lea eax, [esi + 2]
mov cx, word [esi]
add esi, 2
test cx, cx
jne 0x45ef65
sub esi, eax
sar esi, 1
cmp byte [ebx + 0x17], cl
jne 0x45ef7e
mov edi, dword [ebx + 0xc]
jmp 0x45ef80
mov edi, ebx
cmp byte [edi + 0x17], 1
jne 0x45ef98
test byte [edi + 0x15], 8
je 0x45ef93
mov ecx, edi
call fcn.00401490
add edi, 0xc
jmp 0x45ef9d
mov edi, 0x522be8
lea eax, [esi + esi]
mov dword [edi], eax
mov eax, dword [esp + 0x20]
mov dword [esp + 0x30], eax
cmp byte [ebx + 0x17], 0
jne 0x45efb3
mov ebx, dword [ebx + 0xc]
cmp byte [ebx + 0x17], 2
jne 0x45efd1
cmp dword [0x5217d4], 0
je 0x45efd1
push ecx
mov ecx, 0x5217c8
call fcn.004069b0
mov ebx, eax
jmp 0x45efda
and byte [ebx + 0x15], 0x86
mov ebx, 1
mov edi, dword [esp + 0x30]
cmp edi, 0xffffffff
je 0x45f038
mov esi, dword [0x51eabc]
cmp byte [esi + 0x17], 0
jne 0x45eff2
mov esi, dword [esi + 0xc]
mov al, byte [esi + 0x15]
test al, 2
je 0x45f009
and al, 0x3d
mov byte [esi + 0x15], al
mov eax, dword [esi]
push eax
mov ecx, dword [eax]
call dword [ecx + 8]
mov al, byte [esi + 0x15]
and al, 0x8b
mov dword [esi], edi
or al, 0x18
mov dword [esi + 4], 0
mov byte [esi + 0x15], al
jge 0x45f028
mov ecx, esi
call fcn.00401490
and byte [esi + 0x15], 0x8f
jmp 0x45f038
cmp dword [0x51eae4], 0
je 0x45f038
mov ecx, esi
call fcn.00401490
mov eax, dword [esp + 0x34]
test eax, eax
je 0x45f049
push eax
call fcn.004cfed0
add esp, 4
mov eax, dword [esp + 0x3c]
pop edi
mov dword [0x51ed6c], eax
mov eax, ebx
pop esi
pop ebx
mov esp, ebp
pop ebp
ret 8