Function at 0x40616c
Capabilities:
Resolve function by parsing pe exports

Disassembly:
push edi
push esi
push ebp
push ebx
sub esp, 0x114
mov esi, ecx
mov ecx, edx
mov edi, dword [esp + 0x13c]
mov eax, dword [esp + 0x154]
mov edx, dword [eax + 0x34]
mov byte [edx + 0x86], 1
mov ebp, dword [edi*4 + 0x7b2980]
mov eax, dword [edx + 0x90]
mov dword [esp + 0xd4], eax
mov ebx, dword [edx + 0x78]
mov eax, dword [edx + 0x7c]
mov dword [esp + 0xc8], eax
mov eax, ebp
sar eax, 2
shr eax, 0x1d
add eax, ebp
sar eax, 3
mov dword [esp + 0x78], eax
mov eax, dword [esp + 0x140]
lea edx, [eax + eax]
add edx, edx
sub edx, eax
lea eax, [eax + edx*8]
add eax, eax
add eax, eax
cdq
idiv edi
mov dword [esp + 0x5c], eax
mov eax, dword [esp + 0x14c]
test eax, eax
mov eax, dword [esp + 0xc8]
jl 0x4075d0
mov edx, dword [esp + 0x14c]
mov edi, dword [esp + 0x140]
lea edi, [edi + edx - 1]
cmp eax, edi
jle 0x4075d0
mov eax, dword [esp + 0x148]
test eax, eax
jl 0x4075d0
mov edi, dword [esp + 0x148]
mov eax, dword [esp + 0x13c]
lea eax, [eax + edi - 1]
cmp ebx, eax
jle 0x4075d0
cmp esi, 0xffffffff
jne 0x406240
mov esi, ecx
mov dword [esp + 0xc], esi
lea esi, [esp + 0xe4]
mov dword [esp + 0x10], esi
lea edi, [esp + 0xec]
mov dword [esp + 0x14], edi
lea eax, [esp + 0xf4]
mov dword [esp + 0x18], eax
lea eax, [esp + 0xfc]
mov dword [esp + 0x1c], eax
lea eax, [esp + 0x104]
mov dword [esp + 0x20], eax
lea eax, [esp + 0x10c]
mov dword [esp + 0x24], eax
lea eax, [esp + 0xe8]
mov dword [esp + 0x28], eax
lea eax, [esp + 0xf0]
mov dword [esp + 0x2c], eax
lea eax, [esp + 0xf8]
mov dword [esp + 0x30], eax
lea eax, [esp + 0x100]
mov dword [esp + 0x34], eax
lea eax, [esp + 0x108]
mov dword [esp + 0x38], eax
lea eax, [esp + 0x110]
mov dword [esp + 0x3c], eax
movsx eax, byte [esp + 0x134]
movsx edx, byte [esp + 0x138]
call fcn.0040768a
cmp dword [esp + 0x150], 0
je 0x406cc7
mov eax, dword [esp + 0x140]
mov dword [esp + 0x90], eax
fild dword [esp + 0x90]
fnstcw word [esp + 0x40]
movzx eax, word [esp + 0x40]
or eax, 0xc00
mov dword [esp + 0x48], eax
fldcw word [esp + 0x48]
fistp dword [esp + 0x88]
fldcw word [esp + 0x40]
mov edx, dword [esp + 0x88]
test edx, edx
jle 0x4075c4
xor edi, edi
mov dword [esp + 0x60], edi
xor ecx, ecx
mov dword [esp + 0xd0], ecx
fld qword [0x590b80]
fld qword [0x590b88]
mov eax, dword [esp + 0x13c]
mov dword [esp + 0x90], eax
fild dword [esp + 0x90]
fnstcw word [esp + 0x40]
movzx eax, word [esp + 0x40]
or eax, 0xc00
mov dword [esp + 0x48], eax
fldcw word [esp + 0x48]
fistp dword [esp + 0x88]
fldcw word [esp + 0x40]
mov edi, dword [esp + 0x14c]
imul edi, ebx
add edi, dword [esp + 0x148]
lea eax, [edx + edi]
mov dword [esp + 0x50], eax
mov esi, ebx
neg esi
add esi, edi
mov dword [esp + 0x4c], esi
fld qword [0x590b90]
fld qword [0x590b98]
mov eax, dword [esp + 0x78]
lea ecx, [eax + eax]
add ecx, eax
mov dword [esp + 0x74], ecx
lea eax, [edx - 1]
mov dword [esp + 0x9c], eax
mov eax, ebx
mov ecx, dword [esp + 0x88]
imul eax, ecx
mov dword [esp + 0x54], eax
mov eax, ebx
imul eax, edx
add eax, esi
lea esi, [ecx - 1]
mov dword [esp + 0x68], esi
xor esi, esi
mov dword [esp + 0x64], esi
mov dword [esp + 0xa0], ebx
mov dword [esp + 0xcc], eax
mov dword [esp + 0x58], edi
mov dword [esp + 0xa4], ecx
mov dword [esp + 0x6c], edx
mov dword [esp + 0xd8], ebp
mov esi, dword [esp + 0x9c]
mov edi, dword [esp + 0x60]
movzx ebx, byte [esp + 0xe4]
movzx eax, byte [esp + 0xe8]
sub eax, ebx
imul eax, edi
cdq
idiv esi
add ebx, eax
movzx ebx, bl
mov dword [esp + 0xe0], ebx
movzx ecx, byte [esp + 0xec]
movzx eax, byte [esp + 0xf0]
sub eax, ecx
imul eax, edi
cdq
idiv esi
add ecx, eax
movzx ecx, cl
mov dword [esp + 0xdc], ecx
movzx ecx, byte [esp + 0xf4]
movzx eax, byte [esp + 0xf8]
sub eax, ecx
imul eax, edi
cdq
idiv esi
add ecx, eax
movzx ecx, cl
mov dword [esp + 0xc0], ecx
movzx ebx, byte [esp + 0xfc]
movzx eax, byte [esp + 0x100]
sub eax, ebx
imul eax, edi
cdq
idiv esi
add ebx, eax
movzx ebx, bl
movzx ecx, byte [esp + 0x104]
movzx eax, byte [esp + 0x108]
sub eax, ecx
imul eax, edi
cdq
idiv esi
add ecx, eax
movzx ecx, cl
movzx ebp, byte [esp + 0x10c]
movzx eax, byte [esp + 0x110]
sub eax, ebp
imul eax, edi
cdq
idiv esi
add ebp, eax
and ebp, 0xff
mov dword [esp + 0xc4], ebp
mov eax, dword [esp + 0x64]
cdq
mov ebp, dword [esp + 0x5c]
idiv ebp
mov dword [esp + 0x90], eax
fild dword [esp + 0x90]
fmul st(3)
fadd st(4)
fnstcw word [esp + 0x40]
movzx eax, word [esp + 0x40]
or eax, 0xc00
mov dword [esp + 0x48], eax
fldcw word [esp + 0x48]
fistp dword [esp + 0x88]
fldcw word [esp + 0x40]
mov eax, dword [esp + 0x88]
imul eax, dword [esp + 0x78]
mov edx, dword [0x5d3544]
cmp eax, dword [edx*4 + 0x809888]
jge 0x406c96
movsx edx, byte [esp + 0x138]
test edx, edx
jne 0x4069a4
mov edx, dword [esp + 0x58]
lea edx, [edx + edx]
add edx, edx
mov dword [esp + 0xd0], edx
mov ebp, dword [esp + 0xd4]
lea edx, [ebp + edx]
mov dword [esp + 0x80], edx
mov edx, dword [esp + 0xe0]
cmp edx, ebx
jne 0x406740
mov edx, dword [esp + 0xdc]
cmp edx, ecx
jne 0x406740
mov edx, dword [esp + 0xc0]
mov ebp, dword [esp + 0xc4]
cmp edx, ebp
jne 0x406740
mov edx, dword [esp + 0xa4]
test edx, edx
jle 0x406c96
xor ebp, ebp
mov dword [esp + 0x70], eax
mov dword [esp + 0x60], edi
mov esi, dword [esp + 0x80]
mov dword [esp + 0x90], ebp
fild dword [esp + 0x90]
fmul st(3)
fadd st(4)
fmul st(2)
fmul st(1)
fnstcw word [esp + 0x40]
movzx eax, word [esp + 0x40]
or eax, 0xc00
mov dword [esp + 0x48], eax
fldcw word [esp + 0x48]
fistp dword [esp + 0x88]
fldcw word [esp + 0x40]
mov edx, dword [esp + 0x88]
mov ecx, edx
shr ecx, 0x1f
add ecx, edx
sar ecx, 1
mov eax, dword [esp + 0xd8]
cmp eax, ecx
jg 0x406623
add esi, 4
jmp 0x406720
mov eax, dword [0x5d3544]
mov ebx, dword [eax*4 + 0x809868]
add ebx, dword [esp + 0x70]
lea eax, [ecx + ebx]
movzx ecx, byte [ecx + ebx]
mov edi, dword [esp + 0x78]
movzx ebx, byte [eax + edi]
mov ecx, dword [ecx*4 + 0x7b2580]
add ecx, dword [ebx*4 + 0x7b2580]
movzx ebx, byte [eax + edi*2]
mov edi, dword [esp + 0x74]
movzx eax, byte [edi + eax]
mov ebx, dword [ebx*4 + 0x7b2580]
add ebx, dword [eax*4 + 0x7b2580]
add ecx, ebx
and edx, 1
test edx, edx
jne 0x406683
sar ecx, 8
movzx ecx, cl
movzx edi, byte [ecx + 0x80994c]
inc edi
jmp 0x40668e
movzx ecx, cl
movzx edi, byte [ecx + 0x80994c]
inc edi
movzx eax, byte [esi + 3]
lea edx, [eax + edi]
imul eax, edi
sar eax, 8
sub edx, eax
dec edx
movzx edx, dl
mov byte [esi + 3], dl
inc edx
mov dword [esp + 0xc8], edx
movzx eax, byte [esi]
mov dword [esp + 0xc4], eax
mov eax, dword [esp + 0xc0]
sub eax, dword [esp + 0xc4]
imul eax, edi
cdq
mov ecx, dword [esp + 0xc8]
idiv ecx
add eax, dword [esp + 0xc4]
mov byte [esi], al
movzx eax, byte [esi + 1]
mov dword [esp + 0xc4], eax
mov eax, dword [esp + 0xdc]
sub eax, dword [esp + 0xc4]
imul eax, edi
cdq
mov ebx, ecx
idiv ebx
add eax, dword [esp + 0xc4]
mov byte [esi + 1], al
movzx ebx, byte [esi + 2]
mov eax, dword [esp + 0xe0]
sub eax, ebx
imul eax, edi
cdq
idiv ecx
add eax, ebx
mov byte [esi + 2], al
add esi, 4
inc ebp
mov eax, dword [esp + 0xa4]
cmp ebp, eax
jl 0x4065c9
mov esi, dword [esp + 0x9c]
mov edi, dword [esp + 0x60]
jmp 0x406c96
mov edx, dword [esp + 0xa4]
test edx, edx
jle 0x406c96
xor edx, edx
mov dword [esp + 0xb4], edx
sub ebx, dword [esp + 0xe0]
sub ecx, dword [esp + 0xdc]
mov ebp, dword [esp + 0xc4]
sub ebp, dword [esp + 0xc0]
mov dword [esp + 0xc4], ebp
xor edx, edx
mov dword [esp + 0x98], edx
xor edx, edx
mov dword [esp + 0x7c], edx
xor edx, edx
mov dword [esp + 0xb8], edx
mov dword [esp + 0xa8], ecx
mov dword [esp + 0xac], ebx
mov dword [esp + 0x70], eax
mov dword [esp + 0x60], edi
mov ebx, dword [esp + 0x7c]
mov esi, dword [esp + 0xb4]
mov ebp, dword [esp + 0x80]
mov dword [esp + 0x90], esi
fild dword [esp + 0x90]
fmul st(3)
fadd st(4)
fmul st(2)
fmul st(1)
fnstcw word [esp + 0x40]
movzx eax, word [esp + 0x40]
or eax, 0xc00
mov dword [esp + 0x48], eax
fldcw word [esp + 0x48]
fistp dword [esp + 0x88]
fldcw word [esp + 0x40]
mov edx, dword [esp + 0x88]
mov ecx, edx
shr ecx, 0x1f
add ecx, edx
sar ecx, 1
mov edi, dword [esp + 0xd8]
cmp edi, ecx
jg 0x406815
add ebp, 4
jmp 0x406953
mov dword [esp + 0x7c], ebx
mov eax, dword [0x5d3544]
mov ebx, dword [eax*4 + 0x809868]
add ebx, dword [esp + 0x70]
lea eax, [ecx + ebx]
movzx ecx, byte [ecx + ebx]
mov edi, dword [esp + 0x78]
movzx ebx, byte [eax + edi]
mov ecx, dword [ecx*4 + 0x7b2580]
add ecx, dword [ebx*4 + 0x7b2580]
movzx ebx, byte [eax + edi*2]
mov edi, dword [esp + 0x74]
movzx eax, byte [edi + eax]
mov ebx, dword [ebx*4 + 0x7b2580]
add ebx, dword [eax*4 + 0x7b2580]
add ecx, ebx
and edx, 1
test edx, edx
mov ebx, dword [esp + 0x7c]
jne 0x406884
sar ecx, 8
movzx ecx, cl
movzx edx, byte [ecx + 0x80994c]
inc edx
mov dword [esp + 0xb0], edx
jmp 0x406896
movzx ecx, cl
movzx edx, byte [ecx + 0x80994c]
inc edx
mov dword [esp + 0xb0], edx
mov dword [esp + 0x7c], ebx
mov dword [esp + 0xb4], esi
movzx esi, byte [ebp + 3]
lea ecx, [esi + edx]
imul esi, edx
sar esi, 8
sub ecx, esi
dec ecx
movzx ecx, cl
mov byte [ebp + 3], cl
mov eax, dword [esp + 0x98]
cdq
mov edi, dword [esp + 0x68]
idiv edi
add eax, dword [esp + 0xe0]
movzx eax, al
mov dword [esp + 0xc8], eax
mov eax, ebx
cdq
idiv edi
add eax, dword [esp + 0xdc]
movzx ebx, al
mov eax, dword [esp + 0xb8]
cdq
idiv edi
add eax, dword [esp + 0xc0]
movzx eax, al
inc ecx
movzx esi, byte [ebp]
sub eax, esi
imul eax, dword [esp + 0xb0]
cdq
idiv ecx
add eax, esi
mov byte [ebp], al
movzx esi, byte [ebp + 1]
sub ebx, esi
imul ebx, dword [esp + 0xb0]
mov eax, ebx
cdq
idiv ecx
add eax, esi
mov byte [ebp + 1], al
movzx ebx, byte [ebp + 2]
mov eax, dword [esp + 0xc8]
sub eax, ebx
imul eax, dword [esp + 0xb0]
cdq
idiv ecx
add eax, ebx
mov byte [ebp + 2], al
add ebp, 4
mov esi, dword [esp + 0xb4]
mov ebx, dword [esp + 0x7c]
mov edx, dword [esp + 0x98]
add edx, dword [esp + 0xac]
mov dword [esp + 0x98], edx
add ebx, dword [esp + 0xa8]
mov ecx, dword [esp + 0xb8]
add ecx, dword [esp + 0xc4]
mov dword [esp + 0xb8], ecx
inc esi
mov edi, dword [esp + 0xa4]
cmp esi, edi
jl 0x4067bb
mov esi, dword [esp + 0x9c]
mov edi, dword [esp + 0x60]
jmp 0x406c96
mov edx, dword [esp + 0xa4]
test edx, edx
jle 0x406c96
xor edx, edx
mov dword [esp + 0x80], edx
sub ebx, dword [esp + 0xe0]
sub ecx, dword [esp + 0xdc]
mov ebp, dword [esp + 0xc4]
sub ebp, dword [esp + 0xc0]
mov dword [esp + 0xc4], ebp
xor edx, edx
mov dword [esp + 0xbc], edx
xor edx, edx
mov dword [esp + 0xb8], edx
xor edx, edx
mov dword [esp + 0xb4], edx
xor edx, edx
mov dword [esp + 0x98], edx
xor edx, edx
mov dword [esp + 0xb0], edx
mov dword [esp + 0xa8], ecx
mov dword [esp + 0xac], ebx
mov dword [esp + 0x70], eax
mov dword [esp + 0x60], edi
mov ebp, dword [esp + 0x98]
mov edi, dword [esp + 0x80]
movsx edx, byte [esp + 0x138]
cmp edx, 1
je 0x40760e
movsx edx, byte [esp + 0x138]
cmp edx, 2
je 0x4075dd
movsx edx, byte [esp + 0x138]
cmp edx, 3
jne 0x406a8a
mov ecx, dword [esp + 0x4c]
mov edx, dword [esp + 0x60]
lea esi, [edx + ecx]
add esi, dword [esp + 0x54]
mov ebx, dword [esp + 0xa0]
imul ebx, dword [esp + 0xbc]
add esi, ebx
add esi, esi
add esi, esi
mov dword [esp + 0xd0], esi
mov ecx, dword [esp + 0xd4]
mov ebx, dword [esp + 0xd0]
lea ebx, [ecx + ebx]
mov dword [esp + 0x90], edi
fild dword [esp + 0x90]
fmul st(3)
fadd st(4)
fmul st(2)
fmul st(1)
fnstcw word [esp + 0x40]
movzx eax, word [esp + 0x40]
or eax, 0xc00
mov dword [esp + 0x48], eax
fldcw word [esp + 0x48]
fistp dword [esp + 0x88]
fldcw word [esp + 0x40]
mov ecx, dword [esp + 0x88]
mov esi, ecx
shr esi, 0x1f
add esi, ecx
sar esi, 1
mov edx, dword [esp + 0xd8]
cmp edx, esi
jle 0x406c2e
mov dword [esp + 0xc8], ebx
mov edx, dword [0x5d3544]
mov ebx, dword [edx*4 + 0x809868]
add ebx, dword [esp + 0x70]
lea edx, [esi + ebx]
movzx esi, byte [esi + ebx]
mov ebx, dword [esp + 0x78]
movzx eax, byte [edx + ebx]
mov esi, dword [esi*4 + 0x7b2580]
add esi, dword [eax*4 + 0x7b2580]
movzx ebx, byte [edx + ebx*2]
mov eax, dword [esp + 0x74]
movzx edx, byte [eax + edx]
mov ebx, dword [ebx*4 + 0x7b2580]
add ebx, dword [edx*4 + 0x7b2580]
add esi, ebx
and ecx, 1
test ecx, ecx
mov ebx, dword [esp + 0xc8]
jne 0x406b67
sar esi, 8
and esi, 0xff
movzx edx, byte [esi + 0x80994c]
inc edx
mov dword [esp + 0x7c], edx
jmp 0x406b79
and esi, 0xff
movzx edx, byte [esi + 0x80994c]
inc edx
mov dword [esp + 0x7c], edx
mov dword [esp + 0x98], ebp
mov dword [esp + 0x80], edi
movzx esi, byte [ebx + 3]
lea ecx, [esi + edx]
imul esi, edx
sar esi, 8
sub ecx, esi
dec ecx
movzx ecx, cl
mov byte [ebx + 3], cl
mov eax, dword [esp + 0xb4]
cdq
mov edi, dword [esp + 0x68]
idiv edi
add eax, dword [esp + 0xe0]
movzx eax, al
mov dword [esp + 0x84], eax
mov eax, ebp
cdq
idiv edi
add eax, dword [esp + 0xdc]
movzx ebp, al
mov eax, dword [esp + 0xb0]
cdq
idiv edi
add eax, dword [esp + 0xc0]
movzx eax, al
inc ecx
movzx esi, byte [ebx]
sub eax, esi
imul eax, dword [esp + 0x7c]
cdq
idiv ecx
add eax, esi
mov byte [ebx], al
movzx esi, byte [ebx + 1]
sub ebp, esi
imul ebp, dword [esp + 0x7c]
mov eax, ebp
cdq
idiv ecx
add eax, esi
mov byte [ebx + 1], al
movzx ebp, byte [ebx + 2]
mov eax, dword [esp + 0x84]
sub eax, ebp
imul eax, dword [esp + 0x7c]
cdq
idiv ecx
add eax, ebp
mov byte [ebx + 2], al
mov edi, dword [esp + 0x80]
mov ebp, dword [esp + 0x98]
dec dword [esp + 0xbc]
mov edx, dword [esp + 0xb8]
add edx, dword [esp + 0xa0]
mov dword [esp + 0xb8], edx
mov ecx, dword [esp + 0xb4]
add ecx, dword [esp + 0xac]
mov dword [esp + 0xb4], ecx
add ebp, dword [esp + 0xa8]
mov ebx, dword [esp + 0xb0]
add ebx, dword [esp + 0xc4]
mov dword [esp + 0xb0], ebx
inc edi
mov esi, dword [esp + 0xa4]
cmp edi, esi
jl 0x406a30
mov esi, dword [esp + 0x9c]
mov edi, dword [esp + 0x60]
add dword [esp + 0x64], 0x190
mov eax, dword [esp + 0x58]
add eax, dword [esp + 0xa0]
mov dword [esp + 0x58], eax
inc edi
mov edx, dword [esp + 0x6c]
cmp edi, edx
jl 0x406419
fstp st(0)
fstp st(0)
fstp st(0)
fstp st(0)
jmp 0x4075c4
mov eax, dword [esp + 0x140]
mov dword [esp + 0x90], eax
fild dword [esp + 0x90]
fnstcw word [esp + 0x40]
movzx eax, word [esp + 0x40]
or eax, 0xc00
mov dword [esp + 0x48], eax
fldcw word [esp + 0x48]
fistp dword [esp + 0x88]
fldcw word [esp + 0x40]
mov ecx, dword [esp + 0x88]
test ecx, ecx
jle 0x4075c4
xor edx, edx
mov dword [esp + 0x74], edx
xor eax, eax
mov dword [esp + 0xcc], eax
fld qword [0x590b80]
fld qword [0x590b88]
mov esi, dword [esp + 0x13c]
mov dword [esp + 0x90], esi
fild dword [esp + 0x90]
fnstcw word [esp + 0x40]
movzx eax, word [esp + 0x40]
or eax, 0xc00
mov dword [esp + 0x48], eax
fldcw word [esp + 0x48]
fistp dword [esp + 0x88]
fldcw word [esp + 0x40]
mov edx, dword [esp + 0x88]
mov eax, dword [esp + 0x14c]
imul eax, ebx
add eax, dword [esp + 0x148]
lea edi, [ecx + eax]
mov dword [esp + 0x4c], edi
mov esi, ebx
neg esi
add esi, eax
mov dword [esp + 0x50], esi
mov edi, ecx
imul edi, ebx
add edi, esi
mov dword [esp + 0x58], edi
fld qword [0x590b90]
fld qword [0x590b98]
mov esi, dword [esp + 0x78]
lea edi, [esi + esi]
add edi, esi
mov dword [esp + 0x60], edi
lea esi, [ecx - 1]
mov dword [esp + 0xa4], esi
mov esi, ebx
imul esi, edx
mov dword [esp + 0xd0], esi
lea esi, [edx - 1]
mov dword [esp + 0x6c], esi
xor esi, esi
mov dword [esp + 0x70], esi
mov dword [esp + 0xa0], ebx
mov dword [esp + 0x54], eax
mov dword [esp + 0x9c], edx
mov dword [esp + 0x68], ecx
mov dword [esp + 0xd8], ebp
mov ebp, dword [esp + 0xa4]
mov esi, dword [esp + 0x74]
movzx ebx, byte [esp + 0xe4]
movzx eax, byte [esp + 0xe8]
sub eax, ebx
imul eax, esi
cdq
idiv ebp
add ebx, eax
movzx ebx, bl
mov dword [esp + 0xac], ebx
movzx ecx, byte [esp + 0xec]
movzx eax, byte [esp + 0xf0]
sub eax, ecx
imul eax, esi
cdq
idiv ebp
add ecx, eax
movzx ecx, cl
mov dword [esp + 0x7c], ecx
movzx ecx, byte [esp + 0xf4]
movzx eax, byte [esp + 0xf8]
sub eax, ecx
imul eax, esi
cdq
idiv ebp
add ecx, eax
movzx ecx, cl
mov dword [esp + 0xb0], ecx
movzx ebx, byte [esp + 0xfc]
movzx eax, byte [esp + 0x100]
sub eax, ebx
imul eax, esi
cdq
idiv ebp
add ebx, eax
movzx ebx, bl
movzx ecx, byte [esp + 0x104]
movzx eax, byte [esp + 0x108]
sub eax, ecx
imul eax, esi
cdq
idiv ebp
add ecx, eax
movzx ecx, cl
movzx edi, byte [esp + 0x10c]
movzx eax, byte [esp + 0x110]
sub eax, edi
imul eax, esi
cdq
idiv ebp
add edi, eax
and edi, 0xff
mov dword [esp + 0xc8], edi
mov eax, dword [esp + 0x70]
cdq
mov edi, dword [esp + 0x5c]
idiv edi
mov dword [esp + 0x90], eax
fild dword [esp + 0x90]
fmul st(3)
fadd st(4)
fnstcw word [esp + 0x40]
movzx eax, word [esp + 0x40]
or eax, 0xc00
mov dword [esp + 0x48], eax
fldcw word [esp + 0x48]
fistp dword [esp + 0x88]
fldcw word [esp + 0x40]
mov eax, dword [esp + 0x88]
imul eax, dword [esp + 0x78]
mov edx, dword [0x5d3544]
cmp eax, dword [edx*4 + 0x809888]
jge 0x407598
movsx edx, byte [esp + 0x138]
test edx, edx
jne 0x4072d7
mov edx, dword [esp + 0x54]
lea edx, [edx + edx]
add edx, edx
mov dword [esp + 0xcc], edx
mov edi, dword [esp + 0xd4]
lea edx, [edi + edx]
mov dword [esp + 0xb4], edx
mov edx, dword [esp + 0xac]
cmp edx, ebx
jne 0x4070af
mov edx, dword [esp + 0x7c]
cmp edx, ecx
jne 0x4070af
mov edx, dword [esp + 0xb0]
mov edi, dword [esp + 0xc8]
cmp edx, edi
jne 0x4070af
mov ecx, dword [esp + 0xac]
shl ecx, 0x10
mov edx, dword [esp + 0x7c]
shl edx, 8
add ecx, edx
add ecx, dword [esp + 0xb0]
mov dword [esp + 0xac], ecx
mov ebx, dword [esp + 0x9c]
test ebx, ebx
jle 0x407598
xor edx, edx
mov dword [esp + 0x64], eax
mov dword [esp + 0x74], esi
mov ebp, dword [esp + 0xb4]
mov dword [esp + 0x90], edx
fild dword [esp + 0x90]
fmul st(3)
fadd st(4)
fmul st(2)
fmul st(1)
fnstcw word [esp + 0x40]
movzx eax, word [esp + 0x40]
or eax, 0xc00
mov dword [esp + 0x48], eax
fldcw word [esp + 0x48]
fistp dword [esp + 0x88]
fldcw word [esp + 0x40]
mov ecx, dword [esp + 0x88]
mov ebx, ecx
shr ebx, 0x1f
add ebx, ecx
sar ebx, 1
mov eax, dword [esp + 0xd8]
cmp eax, ebx
jg 0x407016
add ebp, 4
jmp 0x40708f
mov eax, dword [0x5d3544]
mov esi, dword [eax*4 + 0x809868]
add esi, dword [esp + 0x64]
lea eax, [ebx + esi]
movzx ebx, byte [ebx + esi]
mov edi, dword [esp + 0x78]
movzx esi, byte [eax + edi]
mov ebx, dword [ebx*4 + 0x7b2580]
add ebx, dword [esi*4 + 0x7b2580]
movzx esi, byte [eax + edi*2]
mov edi, dword [esp + 0x60]
movzx eax, byte [edi + eax]
mov esi, dword [esi*4 + 0x7b2580]
add esi, dword [eax*4 + 0x7b2580]
add ebx, esi
and ecx, 1
test ecx, ecx
jne 0x407075
sar ebx, 8
movzx ebx, bl
movzx eax, byte [ebx + 0x80994c]
jmp 0x40707f
movzx ebx, bl
movzx eax, byte [ebx + 0x80994c]
shl eax, 0x18
add eax, dword [esp + 0xac]
mov dword [ebp], eax
add ebp, 4
inc edx
mov eax, dword [esp + 0x9c]
cmp edx, eax
jl 0x406fbf
mov ebp, dword [esp + 0xa4]
mov esi, dword [esp + 0x74]
jmp 0x407598
mov edx, dword [esp + 0x9c]
test edx, edx
jle 0x407598
xor edx, edx
mov dword [esp + 0xbc], edx
sub ebx, dword [esp + 0xac]
sub ecx, dword [esp + 0x7c]
mov edi, dword [esp + 0xc8]
sub edi, dword [esp + 0xb0]
mov dword [esp + 0xc8], edi
xor edx, edx
mov dword [esp + 0x80], edx
xor edx, edx
mov dword [esp + 0xdc], edx
xor edx, edx
mov dword [esp + 0xb8], edx
mov dword [esp + 0xc4], ecx
mov dword [esp + 0xc0], ebx
mov dword [esp + 0x64], eax
mov dword [esp + 0x74], esi
mov ecx, edx
mov ebx, dword [esp + 0xdc]
mov ebp, dword [esp + 0x80]
mov esi, dword [esp + 0xbc]
mov dword [esp + 0x90], esi
fild dword [esp + 0x90]
fmul st(3)
fadd st(4)
fmul st(2)
fmul st(1)
fnstcw word [esp + 0x40]
movzx eax, word [esp + 0x40]
or eax, 0xc00
mov dword [esp + 0x48], eax
fldcw word [esp + 0x48]
fistp dword [esp + 0x88]
fldcw word [esp + 0x40]
mov edi, dword [esp + 0x88]
mov edx, edi
shr edx, 0x1f
add edx, edi
sar edx, 1
mov eax, dword [esp + 0xd8]
cmp eax, edx
jg 0x40718e
add dword [esp + 0xb4], 4
jmp 0x4072a2
mov dword [esp + 0xdc], ebx
mov dword [esp + 0xb8], ecx
mov eax, dword [0x5d3544]
mov ecx, dword [eax*4 + 0x809868]
add ecx, dword [esp + 0x64]
lea eax, [edx + ecx]
movzx edx, byte [edx + ecx]
mov ebx, dword [esp + 0x78]
movzx ecx, byte [eax + ebx]
mov edx, dword [edx*4 + 0x7b2580]
add edx, dword [ecx*4 + 0x7b2580]
movzx ecx, byte [eax + ebx*2]
mov ebx, dword [esp + 0x60]
movzx eax, byte [ebx + eax]
mov ecx, dword [ecx*4 + 0x7b2580]
add ecx, dword [eax*4 + 0x7b2580]
add edx, ecx
and edi, 1
test edi, edi
mov ecx, dword [esp + 0xb8]
mov ebx, dword [esp + 0xdc]
jne 0x407210
sar edx, 8
movzx edx, dl
movzx edi, byte [edx + 0x80994c]
mov dword [esp + 0xe0], edi
jmp 0x407221
movzx edx, dl
movzx edi, byte [edx + 0x80994c]
mov dword [esp + 0xe0], edi
mov dword [esp + 0xdc], ebx
mov dword [esp + 0xb8], ecx
mov eax, ebp
cdq
mov edi, dword [esp + 0x6c]
idiv edi
add eax, dword [esp + 0xac]
movzx eax, al
mov dword [esp + 0x84], eax
mov eax, ebx
cdq
idiv edi
add eax, dword [esp + 0x7c]
movzx ebx, al
mov eax, ecx
cdq
idiv edi
add eax, dword [esp + 0xb0]
movzx eax, al
mov edx, dword [esp + 0x84]
shl edx, 0x10
shl ebx, 8
add edx, ebx
add edx, eax
mov ecx, dword [esp + 0xe0]
shl ecx, 0x18
add ecx, edx
mov eax, dword [esp + 0xb4]
mov dword [eax], ecx
add eax, 4
mov dword [esp + 0xb4], eax
mov ecx, dword [esp + 0xb8]
mov ebx, dword [esp + 0xdc]
add ebp, dword [esp + 0xc0]
add ebx, dword [esp + 0xc4]
add ecx, dword [esp + 0xc8]
inc esi
mov edx, dword [esp + 0x9c]
cmp esi, edx
jl 0x40712f
mov ebp, dword [esp + 0xa4]
mov esi, dword [esp + 0x74]
jmp 0x407598
mov edx, dword [esp + 0x9c]
test edx, edx
jle 0x407598
xor edx, edx
mov dword [esp + 0x80], edx
sub ebx, dword [esp + 0xac]
sub ecx, dword [esp + 0x7c]
mov edi, dword [esp + 0xc8]
sub edi, dword [esp + 0xb0]
mov dword [esp + 0xc8], edi
xor edx, edx
mov dword [esp + 0xa8], edx
xor edx, edx
mov dword [esp + 0xb4], edx
xor edx, edx
mov dword [esp + 0x98], edx
xor edx, edx
mov dword [esp + 0xb8], edx
xor edx, edx
mov dword [esp + 0xbc], edx
mov dword [esp + 0xc4], ecx
mov dword [esp + 0xc0], ebx
mov dword [esp + 0x64], eax
mov dword [esp + 0x74], esi
mov ecx, edx
mov ebx, dword [esp + 0xb8]
mov edx, dword [esp + 0x98]
mov ebp, dword [esp + 0xb4]
mov esi, dword [esp + 0x80]
movsx edi, byte [esp + 0x138]
cmp edi, 1
je 0x40765f
movsx edi, byte [esp + 0x138]
cmp edi, 2
je 0x407631
movsx edi, byte [esp + 0x138]
cmp edi, 3
jne 0x4073cd
mov eax, dword [esp + 0x50]
mov edi, dword [esp + 0x74]
lea edi, [edi + eax]
add edi, dword [esp + 0xd0]
mov eax, dword [esp + 0xa0]
imul eax, dword [esp + 0xa8]
add edi, eax
add edi, edi
add edi, edi
mov dword [esp + 0xcc], edi
mov edi, dword [esp + 0xd4]
mov eax, dword [esp + 0xcc]
lea edi, [edi + eax]
mov dword [esp + 0xe0], edi
mov dword [esp + 0x90], esi
fild dword [esp + 0x90]
fmul st(3)
fadd st(4)
fmul st(2)
fmul st(1)
fnstcw word [esp + 0x40]
movzx eax, word [esp + 0x40]
or eax, 0xc00
mov dword [esp + 0x48], eax
fldcw word [esp + 0x48]
fistp dword [esp + 0x88]
fldcw word [esp + 0x40]
mov eax, dword [esp + 0x88]
mov dword [esp + 0xdc], eax
mov edi, eax
shr edi, 0x1f
add edi, eax
sar edi, 1
mov eax, dword [esp + 0xd8]
cmp eax, edi
jle 0x40755a
mov dword [esp + 0xb8], ebx
mov dword [esp + 0xbc], ecx
mov ecx, dword [0x5d3544]
mov ebx, dword [ecx*4 + 0x809868]
add ebx, dword [esp + 0x64]
lea ecx, [edi + ebx]
movzx edi, byte [edi + ebx]
mov ebx, dword [esp + 0x78]
movzx eax, byte [ecx + ebx]
mov edi, dword [edi*4 + 0x7b2580]
add edi, dword [eax*4 + 0x7b2580]
movzx ebx, byte [ecx + ebx*2]
mov eax, dword [esp + 0x60]
movzx ecx, byte [eax + ecx]
mov ebx, dword [ebx*4 + 0x7b2580]
add ebx, dword [ecx*4 + 0x7b2580]
add edi, ebx
mov ecx, dword [esp + 0xdc]
and ecx, 1
test ecx, ecx
mov ecx, dword [esp + 0xbc]
mov ebx, dword [esp + 0xb8]
jne 0x4074cf
sar edi, 8
and edi, 0xff
movzx edi, byte [edi + 0x80994c]
mov dword [esp + 0xdc], edi
jmp 0x4074e3
and edi, 0xff
movzx edi, byte [edi + 0x80994c]
mov dword [esp + 0xdc], edi
mov dword [esp + 0x98], edx
mov dword [esp + 0xb8], ebx
mov eax, edx
cdq
mov edi, dword [esp + 0x6c]
idiv edi
add eax, dword [esp + 0xac]
movzx eax, al
mov dword [esp + 0x84], eax
mov eax, ebx
cdq
idiv edi
add eax, dword [esp + 0x7c]
movzx ebx, al
mov eax, ecx
cdq
idiv edi
add eax, dword [esp + 0xb0]
movzx eax, al
mov edx, dword [esp + 0x84]
shl edx, 0x10
shl ebx, 8
add edx, ebx
add edx, eax
mov eax, dword [esp + 0xdc]
shl eax, 0x18
add eax, edx
mov edx, dword [esp + 0xe0]
mov dword [edx], eax
mov ebx, dword [esp + 0xb8]
mov edx, dword [esp + 0x98]
dec dword [esp + 0xa8]
add ebp, dword [esp + 0xa0]
add edx, dword [esp + 0xc0]
add ebx, dword [esp + 0xc4]
add ecx, dword [esp + 0xc8]
inc esi
mov edi, dword [esp + 0x9c]
cmp esi, edi
jl 0x407370
mov ebp, dword [esp + 0xa4]
mov esi, dword [esp + 0x74]
add dword [esp + 0x70], 0x190
mov eax, dword [esp + 0x54]
add eax, dword [esp + 0xa0]
mov dword [esp + 0x54], eax
inc esi
mov edx, dword [esp + 0x68]
cmp esi, edx
jl 0x406df5
fstp st(0)
fstp st(0)
fstp st(0)
fstp st(0)
mov eax, dword [esp + 0x154]
call fcn.0040870c
xor eax, eax
add esp, 0x114
pop ebx
pop ebp
pop esi
pop edi
ret
mov edx, dword [esp + 0x60]
neg edx
imul edx, dword [esp + 0xa0]
add edx, dword [esp + 0xcc]
add edx, dword [esp + 0xa4]
sub edx, edi
lea ecx, [edx*4 - 4]
mov dword [esp + 0xd0], ecx
jmp 0x406a8a
mov edx, dword [esp + 0x50]
sub edx, dword [esp + 0x60]
mov ecx, dword [esp + 0xb8]
lea ebx, [edx + ecx - 1]
add ebx, ebx
add ebx, ebx
mov dword [esp + 0xd0], ebx
jmp 0x406a8a
mov edi, dword [esp + 0x74]
neg edi
imul edi, dword [esp + 0xa0]
add edi, dword [esp + 0x58]
add edi, dword [esp + 0x9c]
sub edi, esi
lea edi, [edi*4 - 4]
mov dword [esp + 0xcc], edi
jmp 0x4073cd
mov edi, dword [esp + 0x4c]
sub edi, dword [esp + 0x74]
lea edi, [edi + ebp - 1]
add edi, edi
add edi, edi
mov dword [esp + 0xcc], edi
jmp 0x4073cd