Function at 0x407c80
Capabilities:
Get geographical location

Disassembly:
sub esp, 0x468
mov eax, dword [0x46d040]
xor eax, esp
mov dword [esp + 0x464], eax
push ebx
push ebp
push esi
push edi
mov edi, edx
mov dword [esp + 0x50], ecx
mov edx, dword [0x46ecb4]
mov ecx, 0x30
call fcn.00406000
mov ecx, eax
xor edx, edx
lea eax, [ecx + 8]
mov dword [esp + 0x14], ecx
xor ebp, ebp
mov esi, 0x26
mov dword [esp + 0x1c], esi
mov dword [ecx], 0x26
mov dword [ecx + 4], eax
mov word [eax + 0x26], dx
test byte [0x46dd28], 1
mov ebx, dword [ecx + 4]
mov dword [esp + 0x2c], ebx
mov dword [esp + 0x10], ebp
jne 0x407ddb
mov ecx, 0x46dd28
lock bts dword [ecx], 0x1f
setb al
test al, al
jne 0x407e27
push 4
lea eax, [esp + 0x6c]
push eax
push 0xe
push 0x400
call dword [sym.imp.KERNEL32.dll_GetLocaleInfoW]
test eax, eax
je 0x407d32
mov ax, word ds:[esp + 0x68]
test ax, ax
je 0x407d32
cmp word [esp + 0x6a], bp
jne 0x407d32
mov word [0x46dd30], ax
push 4
lea eax, [esp + 0x6c]
push eax
push 0xf
push 0x400
call dword [sym.imp.KERNEL32.dll_GetLocaleInfoW]
test eax, eax
je 0x407d61
mov ax, word [esp + 0x68]
test ax, ax
je 0x407d61
cmp word [esp + 0x6a], bp
jne 0x407d61
mov word [0x46dd78], ax
cmp word [0x46dd30], 0x2e
je 0x407d7f
push 0x46542c
push 0
call fcn.0042981b
add esp, 8
mov dword [0x46ee54], eax
mov eax, 0x46dd28
lock bts dword [eax], 0
setb al
test al, al
jne 0x407ddb
mov esi, dword [0x46dd2c]
test esi, esi
je 0x407da6
push 0
push esi
call dword [sym.imp.ntdll.dll_NtSetEvent]
mov eax, 0xfffffffe
mov ecx, 0x46dd28
lock xadd dword [ecx], eax
shr eax, 1
and eax, 0x7fff
sub eax, 1
jne 0x407dd6
test esi, esi
je 0x407dd6
push esi
call dword [sym.imp.ntdll.dll_NtClose]
mov dword [0x46dd2c], ebp
mov esi, 0x26
mov dword [esp + 0x4c], 3
mov eax, dword [esp + 0x50]
dec edi
mov dword [esp + 0x64], edi
mov edi, eax
add eax, 0x18
mov dword [esp + 0x30], edi
mov dword [esp + 0x50], eax
mov dword [esp + 0x44], ebp
mov edx, dword [edi]
mov eax, edx
and eax, 0x3f
mov dword [esp + 0x18], 0
mov dword [esp + 0x34], edx
cmp eax, 0xd
ja case.default.0x407e20
nop dword [eax]
jmp dword [eax*4 + 0x409360]
test byte [0x46dd28], 1
jne 0x407ddb
call fcn.004152c0
jmp 0x407ddb
lea edi, [ebp + 2]
cmp esi, edi
jae 0x407e9c
mov edx, dword [0x46ecb4]
lea eax, [esi + esi]
cmp eax, edi
mov ebx, edi
cmovae ebx, eax
mov dword [esp + 0x1c], ebx
lea ecx, [ebx + 0xa]
call fcn.00406000
mov esi, eax
xor ecx, ecx
lea eax, [esi + 8]
push ebp
mov dword [esi], ebx
mov dword [esi + 4], eax
mov word [eax + ebx], cx
mov ebx, dword [esp + 0x18]
push dword [ebx + 4]
push dword [esi + 4]
call fcn.00423550
add esp, 0xc
lea ecx, [ebx - 8]
or eax, 0xffffffff
lock xadd dword [ecx + 4], eax
dec eax
jne 0x407e90
call fcn.004060e0
mov eax, dword [esi + 4]
shr ebp, 1
mov dword [esp + 0x14], esi
lea ebx, [eax + ebp*2]
mov ecx, dword [esp + 0x30]
mov ebp, edi
mov ax, word [ecx + 0x10]
mov word [ebx], ax
add ebx, 2
jmp 0x4091ec
mov ecx, dword [edi + 0x10]
add ecx, ebp
cmp esi, ecx
jae 0x407f1a
mov edx, dword [0x46ecb4]
lea eax, [esi + esi]
cmp eax, ecx
mov ebx, ecx
cmovae ebx, eax
mov dword [esp + 0x1c], ebx
lea ecx, [ebx + 0xa]
call fcn.00406000
mov esi, eax
xor ecx, ecx
lea eax, [esi + 8]
push ebp
mov dword [esi], ebx
mov dword [esi + 4], eax
mov word [eax + ebx], cx
mov ebx, dword [esp + 0x18]
push dword [ebx + 4]
push dword [esi + 4]
call fcn.00423550
add esp, 0xc
lea ecx, [ebx - 8]
or eax, 0xffffffff
lock xadd dword [ecx + 4], eax
dec eax
jne 0x407f0c
call fcn.004060e0
mov eax, dword [esi + 4]
mov ecx, ebp
shr ecx, 1
mov dword [esp + 0x14], esi
lea ebx, [eax + ecx*2]
push dword [edi + 0x10]
push dword [edi + 0x14]
push ebx
call fcn.00423550
mov eax, dword [edi + 0x10]
add esp, 0xc
shr eax, 1
add ebp, dword [edi + 0x10]
lea ebx, [ebx + eax*2]
jmp 0x4091ec
mov ecx, dword ds:[edi + 0x10]
call fcn.00406960
lea esi, [eax + eax]
mov eax, dword [esp + 0x1c]
add ebp, esi
cmp eax, ebp
jae 0x407fbb
mov edx, dword [0x46ecb4]
add eax, eax
cmp eax, ebp
mov ebx, ebp
cmovae ebx, eax
mov dword [esp + 0x1c], ebx
lea ecx, [ebx + 0xa]
call fcn.00406000
mov edi, eax
xor ecx, ecx
lea eax, [edi + 8]
mov dword [edi], ebx
mov dword [edi + 4], eax
mov word [eax + ebx], cx
mov eax, dword [esp + 0x14]
mov ebx, dword [esp + 0x10]
push ebx
push dword [eax + 4]
push dword [edi + 4]
call fcn.00423550
mov ecx, dword [esp + 0x20]
add esp, 0xc
add ecx, 0xfffffff8
or eax, 0xffffffff
lock xadd dword [ecx + 4], eax
dec eax
jne 0x407fab
call fcn.004060e0
mov eax, dword [edi + 4]
shr ebx, 1
mov dword [esp + 0x14], edi
mov edi, dword [esp + 0x30]
lea ebx, [eax + ebx*2]
push esi
push dword [edi + 0x10]
push ebx
call fcn.00423550
add esp, 0xc
shr esi, 1
lea ebx, [ebx + esi*2]
jmp 0x4091ec
cmp edx, 3
jne 0x407fdf
mov ebp, dword [edi + 0x14]
mov esi, dword [edi + 0x10]
jmp 0x407ff0
mov ebp, dword [edi + 0x10]
mov esi, ebp
lea ecx, [esi + 1]
mov al, byte [esi]
inc esi
test al, al
jne 0x407fe7
sub esi, ecx
push esi
push ebp
lea eax, [esp + 0x50]
push eax
call dword [sym.imp.ntdll.dll_RtlMultiByteToUnicodeSize]
nop dword [eax]
test eax, eax
js 0x4080b3
mov ecx, dword [esp + 0x10]
mov edx, dword [esp + 0x1c]
lfence
mov eax, dword [esp + 0x48]
add ecx, eax
cmp edx, ecx
jae 0x40808d
lea eax, [edx + edx]
mov ebx, ecx
mov edx, dword [0x46ecb4]
cmp eax, ecx
cmovae ebx, eax
mov dword [esp + 0x1c], ebx
lea ecx, [ebx + 0xa]
call fcn.00406000
mov edi, eax
xor ecx, ecx
lea eax, [edi + 8]
mov dword [edi], ebx
mov dword [edi + 4], eax
mov word [eax + ebx], cx
mov eax, dword [esp + 0x14]
mov ebx, dword [esp + 0x10]
push ebx
push dword [eax + 4]
push dword [edi + 4]
call fcn.00423550
mov ecx, dword [esp + 0x20]
add esp, 0xc
add ecx, 0xfffffff8
or eax, 0xffffffff
lock xadd dword [ecx + 4], eax
dec eax
jne 0x408077
call fcn.004060e0
mov eax, dword [edi + 4]
mov ecx, ebx
shr ecx, 1
mov dword [esp + 0x14], edi
lea ebx, [eax + ecx*2]
mov eax, dword [esp + 0x48]
mov dword [esp + 0x2c], ebx
push esi
push ebp
push 0
push eax
push ebx
call dword [sym.imp.ntdll.dll_RtlMultiByteToUnicodeN]
test eax, eax
js 0x4080b3
mov eax, dword [esp + 0x48]
mov ebp, dword [esp + 0x10]
shr eax, 1
add ebp, dword [esp + 0x48]
lea ebx, [ebx + eax*2]
jmp 0x4091ec
mov ebp, dword [esp + 0x10]
jmp case.default.0x407e20
mov ecx, 0x10
mov eax, edi
mov eax, dword [eax + ecx]
mov ecx, eax
shr ecx, 0x1f
mov dword [esp + 0x18], ecx
cdq
mov ecx, eax
xor ecx, edx
sub ecx, edx
mov edx, dword [esp + 0x34]
jmp 0x4080df
mov ecx, dword [edi + 0x10]
mov dword [esp + 0x28], 0xa
test edx, 0x100
je 0x408101
mov al, byte [edi + 0xa]
cmp al, 2
jb 0x408101
cmp al, 0x45
ja 0x408101
movzx eax, al
mov dword [esp + 0x28], eax
test edx, 0x20000000
lea ebp, [esp + 0x46e]
mov edi, str.0123456789abcdefghijklmnopqrstuvwxyz_________._:_________
mov eax, str.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_________._:_________
cmovne edi, eax
xor esi, esi
mov dword [esp + 0x24], edi
test ecx, ecx
je 0x4081c2
test edx, 0x10000
je 0x40819d
xor edi, edi
mov eax, ecx
xor edx, edx
div dword [esp + 0x28]
inc edi
inc esi
mov ecx, eax
mov eax, dword [esp + 0x24]
movsx ax, byte [eax + edx]
mov word [ebp], ax
sub ebp, 2
cmp edi, 3
jne 0x408184
test ecx, ecx
je 0x408188
movzx eax, word [0x46dd78]
xor edx, edx
mov word [ebp], ax
mov edi, 1
mov eax, ecx
div dword [esp + 0x28]
mov ecx, eax
mov eax, dword [esp + 0x24]
movsx eax, byte [edx + eax]
mov word [ebp - 2], ax
add ebp, 0xfffffffc
add esi, 2
test ecx, ecx
jne 0x408133
mov edx, dword [esp + 0x34]
mov edi, dword [esp + 0x18]
xor ecx, ecx
test edi, edi
je 0x4081db
mov ecx, 1
jmp 0x4081e9
mov ebx, dword [esp + 0x28]
mov eax, ecx
xor edx, edx
div ebx
inc esi
mov ecx, eax
movsx ax, byte [edi + edx]
mov word [ebp], ax
sub ebp, 2
test ecx, ecx
jne 0x4081a1
mov ebx, dword ds:[esp + 0x2c]
jmp 0x408188
mov eax, 0x30
lea ebp, [esp + 0x46c]
mov word [esp + 0x46e], ax
lea esi, [eax - 0x2f]
jmp 0x40818c
test edx, 0x20000
mov eax, 1
cmovne ecx, eax
and edx, 0x50000
cmp edx, 0x40000
jne 0x408219
mov eax, dword [esp + 0x30]
movzx edx, word [eax + 6]
lea eax, [ecx + esi]
cmp eax, edx
jae 0x408219
mov eax, edx
or edi, 4
sub eax, ecx
mov dword [esp + 0x18], edi
sub eax, esi
mov dword [esp + 0x5c], eax
add ecx, eax
lea eax, [ecx + esi]
add ebp, 2
mov ecx, dword [esp + 0x10]
lea ecx, [ecx + eax*2]
mov eax, dword [esp + 0x1c]
mov dword [esp + 0x20], ecx
cmp eax, ecx
jae 0x408297
mov edx, dword [0x46ecb4]
add eax, eax
cmp eax, ecx
mov ebx, ecx
cmovae ebx, eax
mov dword [esp + 0x1c], ebx
lea ecx, [ebx + 0xa]
call fcn.00406000
mov edi, eax
xor ecx, ecx
lea eax, [edi + 8]
mov dword [edi], ebx
mov dword [edi + 4], eax
mov word [eax + ebx], cx
mov eax, dword [esp + 0x14]
mov ebx, dword [esp + 0x10]
push ebx
push dword [eax + 4]
push dword [edi + 4]
call fcn.00423550
mov ecx, dword [esp + 0x20]
add esp, 0xc
add ecx, 0xfffffff8
or eax, 0xffffffff
lock xadd dword [ecx + 4], eax
dec eax
jne 0x40828b
call fcn.004060e0
mov eax, dword [edi + 4]
shr ebx, 1
mov dword [esp + 0x14], edi
lea ebx, [eax + ebx*2]
mov eax, dword [esp + 0x18]
test al, 1
je 0x4082a6
mov ecx, 0x2d
jmp 0x4082b7
mov ecx, dword [esp + 0x30]
test dword [ecx], 0x20000
je 0x4082bd
mov ecx, 0x2b
mov word [ebx], cx
add ebx, 2
nop dword [eax]
test al, 4
je 0x4082e1
mov edx, dword [esp + 0x5c]
test edx, edx
je 0x4082de
mov ecx, edx
mov eax, 0x300030
shr ecx, 1
mov edi, ebx
rep stosd dword es:[edi], eax
adc ecx, ecx
rep stosw word es:[edi], ax
lea ebx, [ebx + edx*2]
add esi, esi
push esi
push ebp
push ebx
call fcn.00423550
mov ebp, dword [esp + 0x2c]
add esp, 0xc
add ebx, esi
jmp 0x4091ec
mov ecx, dword [edi + 0x14]
mov esi, dword [edi + 0x10]
mov dword [esp + 0x40], esi
mov dword [esp + 0x28], ecx
test ecx, ecx
jg 0x408330
jl 0x408311
test esi, esi
jae 0x408330
neg esi
mov dword [esp + 0x18], 1
adc ecx, 0
neg ecx
jmp 0x408328
mov esi, dword [edi + 0x10]
mov ecx, dword [edi + 0x14]
mov dword [esp + 0x28], ecx
mov dword [esp + 0x40], esi
mov ebp, dword [esp + 0x34]
mov edx, 0xa
mov dword [esp + 0x3c], edx
mov dword [esp + 0x38], 0
test ebp, 0x100
je 0x408382
mov al, byte ds:[edi + 0xa]
mov dword [esp + 0x3c], edx
mov dword [esp + 0x38], 0
cmp al, 2
jb 0x408382
mov dword [esp + 0x3c], edx
mov dword [esp + 0x38], 0
cmp al, 0x45
ja 0x408382
movzx eax, al
cdq
mov dword [esp + 0x38], edx
mov edx, eax
mov dword [esp + 0x3c], eax
test ebp, 0x20000000
mov eax, str.0123456789abcdefghijklmnopqrstuvwxyz_________._:_________
mov ebp, str.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_________._:_________
cmovne eax, ebp
xor edi, edi
mov dword [esp + 0x20], eax
lea ebp, [esp + 0x46e]
mov eax, esi
or eax, ecx
je 0x40849e
test dword [esp + 0x34], 0x10000
je 0x40844b
xor eax, eax
mov dword [esp + 0x2c], eax
push dword [esp + 0x38]
push edx
push ecx
push esi
call fcn.0043f3b0
push dword [esp + 0x38]
mov esi, eax
mov eax, dword [esp + 0x40]
push eax
push dword [esp + 0x30]
mov eax, dword [esp + 0x4c]
push eax
call fcn.0043f340
mov dword [esp + 0x40], eax
inc edi
mov eax, dword [esp + 0x20]
mov ecx, edx
mov dword [esp + 0x28], ecx
mov dword [esp + 0x24], edi
movsx ax, byte [eax + esi]
mov esi, dword [esp + 0x40]
mov word [ebp], ax
sub ebp, 2
mov eax, dword [esp + 0x2c]
inc eax
cmp eax, 3
jne 0x408430
mov eax, esi
or eax, ecx
je 0x4084bb
mov ax, word [0x46dd78]
mov edx, dword [esp + 0x3c]
mov word [ebp], ax
sub ebp, 2
inc edi
jmp 0x4083ba
mov edx, dword [esp + 0x3c]
mov dword [esp + 0x2c], eax
mov eax, esi
or eax, ecx
mov dword [esp + 0x24], edi
jne 0x4083c0
jmp 0x4084bb
mov ebx, dword [esp + 0x38]
nop
push ebx
push edx
push ecx
push esi
call fcn.0043f3b0
push ebx
mov esi, eax
mov eax, dword [esp + 0x40]
push eax
push dword [esp + 0x30]
mov eax, dword [esp + 0x4c]
push eax
call fcn.0043f340
mov dword [esp + 0x40], eax
mov ecx, edx
mov eax, dword [esp + 0x20]
inc edi
mov edx, dword [esp + 0x3c]
mov dword [esp + 0x28], ecx
movsx ax, byte [eax + esi]
mov esi, dword [esp + 0x40]
mov word [ebp], ax
mov eax, esi
sub ebp, 2
or eax, ecx
jne 0x408450
mov ebx, dword [esp + 0x2c]
jmp 0x4084b7
mov eax, 0x30
lea ebp, [esp + 0x46c]
mov word [esp + 0x46e], ax
mov edi, 1
mov dword [esp + 0x24], edi
mov eax, dword [esp + 0x34]
xor ecx, ecx
cmp dword [esp + 0x18], ecx
je 0x4084ce
mov ecx, 1
jmp 0x4084db
test eax, 0x20000
mov edx, 1
cmovne ecx, edx
and eax, 0x50000
cmp eax, 0x40000
jne 0x408507
mov eax, dword [esp + 0x30]
movzx edx, word [eax + 6]
lea eax, [ecx + edi]
cmp eax, edx
jae 0x408507
or dword [esp + 0x18], 4
mov eax, edx
sub eax, ecx
sub eax, edi
mov dword [esp + 0x60], eax
add ecx, eax
lea eax, ds:[ecx + edi]
add ebp, 2
mov ecx, dword [esp + 0x10]
lea ecx, [ecx + eax*2]
mov eax, dword [esp + 0x1c]
mov dword [esp + 0x20], ecx
cmp eax, ecx
jae 0x40858b
mov edx, dword [0x46ecb4]
add eax, eax
cmp eax, ecx
mov ebx, ecx
cmovae ebx, eax
mov dword [esp + 0x1c], ebx
lea ecx, [ebx + 0xa]
call fcn.00406000
mov esi, eax
xor ecx, ecx
lea eax, [esi + 8]
mov dword [esi], ebx
mov dword [esi + 4], eax
mov word [ebx + eax], cx
mov eax, dword [esp + 0x14]
mov ebx, dword [esp + 0x10]
push ebx
push dword [eax + 4]
push dword [esi + 4]
call fcn.00423550
mov ecx, dword [esp + 0x20]
add esp, 0xc
add ecx, 0xfffffff8
or eax, 0xffffffff
lock xadd dword [ecx + 4], eax
dec eax
jne 0x40857f
call fcn.004060e0
mov eax, dword [esi + 4]
shr ebx, 1
mov dword [esp + 0x14], esi
lea ebx, [eax + ebx*2]
mov eax, dword [esp + 0x18]
test al, 1
je 0x40859a
mov ecx, 0x2d
jmp 0x4085ab
mov ecx, dword [esp + 0x30]
test dword [ecx], 0x20000
je 0x4085b1
mov ecx, 0x2b
mov word [ebx], cx
add ebx, 2
test al, 4
je 0x4085d6
mov edx, dword [esp + 0x60]
test edx, edx
je 0x4085d3
mov ecx, edx
mov eax, 0x300030
shr ecx, 1
mov edi, ebx
rep stosd dword es:[edi], eax
adc ecx, ecx
rep stosw word es:[edi], ax
mov edi, dword [esp + 0x24]
lea ebx, [ebx + edx*2]
lea esi, ds:[edi + edi]
push esi
push ebp
push ebx
call fcn.00423550
mov ebp, dword [esp + 0x2c]
add esp, 0xc
add ebx, esi
jmp 0x4091ec
mov dword ds:[esp + 0x18], 0
test dl, 0x40
je 0x408618
movzx edx, word [edi + 4]
cmp edx, 0xa2
jbe 0x40861d
mov edx, 0xa2
jmp 0x40861d
mov edx, 6
mov esi, dword [esp + 0x34]
lea ebp, [esp + 0x71]
movss xmm0, dword [edi + 0x10]
sub esp, 8
mov eax, ebp
mov ecx, esi
push eax
call fcn.0041a2a0
test al, al
jne 0x408642
mov byte ds:[esp + 0x71], al
jmp 0x408693
mov edx, dword [0x46ee54]
test edx, edx
je 0x40866d
mov al, byte [esp + 0x71]
lea ecx, [esp + 0x71]
test al, al
je 0x40866d
cmp al, 0x2e
je 0x408666
mov al, byte [ecx + 1]
inc ecx
test al, al
jne 0x408658
jmp 0x40866d
mov al, byte [0x46dd30]
mov byte [ecx], al
test esi, 0x20000000
je 0x408693
lea eax, [esp + 0x71]
test edx, edx
je 0x40868a
push edx
push eax
call fcn.00428fb7
add esp, 8
jmp 0x408693
push eax
call fcn.00428f5b
add esp, 4
mov edi, dword ds:[edi]
test edi, 0x8000
je 0x40871e
mov al, byte [esp + 0x71]
lea ecx, [esp + 0x71]
mov ah, byte [0x46dd30]
test al, al
je 0x4086cc
nop
cmp al, ah
je 0x4086cc
mov al, byte [ecx + 1]
inc ecx
test al, al
jne 0x4086c0
mov al, byte [ecx]
inc ecx
test al, al
je 0x40871e
mov al, byte [ecx]
test al, al
je 0x4086f0
nop dword [eax]
cmp al, 0x65
je 0x4086f0
cmp al, 0x45
je 0x4086f0
mov al, byte [ecx + 1]
inc ecx
test al, al
jne 0x4086e0
mov al, byte [ecx - 1]
mov esi, ecx
dec ecx
cmp al, 0x30
jne 0x408708
nop word [eax + eax]
mov al, byte [ecx - 1]
dec ecx
cmp al, 0x30
je 0x408700
cmp al, ah
lea edx, [ecx - 1]
cmovne edx, ecx
mov al, byte [esi]
lea edx, [edx + 1]
mov byte [edx], al
lea esi, [esi + 1]
test al, al
jne 0x408710
lea esi, [esp + 0x71]
lea ecx, [esi + 1]
mov al, byte [esi]
inc esi
test al, al
jne 0x408725
sub esi, ecx
cmp byte [esp + 0x71], 0x2d
jne 0x408742
mov edx, 1
lea ebp, [esp + 0x72]
dec esi
jmp 0x408754
mov edx, dword [esp + 0x18]
test edi, 0x20000
mov eax, 2
cmovne edx, eax
mov eax, edi
mov dword [esp + 0x18], edx
and eax, 0x13000
cmp eax, 0x10000
jne 0x4088e5
mov al, byte [ebp]
mov edi, ebp
sub al, 0x30
cmp al, 0xa
jae 0x408784
mov al, byte ds:[edi + 1]
inc edi
sub al, 0x30
cmp al, 0xa
jb 0x408776
mov eax, edi
sub eax, ebp
mov dword [esp + 0x24], eax
lea ecx, [eax + 2]
mov dword [esp + 0x20], ecx
je 0x4087a3
mov eax, 0xaaaaaaab
mul ecx
mov eax, edx
shr eax, 1
dec eax
jmp 0x4087a9
xor eax, eax
mov dword [esp + 0x20], ecx
lea ecx, [eax + esi]
mov dword [esp + 0x28], eax
add ecx, ecx
cmp dword [esp + 0x18], 0
lea eax, [ecx + 2]
cmove eax, ecx
mov ecx, dword [esp + 0x10]
add ecx, eax
mov eax, dword [esp + 0x1c]
cmp eax, ecx
jae 0x40883b
add eax, eax
mov edx, ecx
cmp eax, ecx
cmovae edx, eax
mov dword [esp + 0x1c], edx
lea ecx, [edx + 0xa]
mov edx, dword [0x46ecb4]
call fcn.00406000
mov edx, dword [esp + 0x1c]
mov ebx, eax
push dword [esp + 0x10]
lea eax, [ebx + 8]
xor ecx, ecx
mov dword [ebx + 4], eax
mov dword [ebx], edx
mov word [edx + eax], cx
mov eax, dword [esp + 0x18]
push dword [eax + 4]
push dword [ebx + 4]
call fcn.00423550
mov ecx, dword [esp + 0x20]
add esp, 0xc
add ecx, 0xfffffff8
or eax, 0xffffffff
lock xadd dword [ecx + 4], eax
dec eax
jne 0x40882b
call fcn.004060e0
mov ecx, dword [esp + 0x10]
mov eax, dword [ebx + 4]
shr ecx, 1
mov dword [esp + 0x14], ebx
lea ebx, [eax + ecx*2]
mov eax, dword [esp + 0x20]
xor edx, edx
div dword [esp + 0x4c]
mov eax, dword [esp + 0x18]
mov ecx, dword [esp + 0x24]
test al, 1
je 0x408858
mov eax, 0x2d
jmp 0x408861
test al, 2
je 0x408867
mov eax, 0x2b
mov word [ebx], ax
add ebx, 2
mov eax, dword [esp + 0x24]
test eax, eax
je 0x4088ac
nop
movsx ax, byte [ebp]
dec ecx
inc ebp
mov word [ebx], ax
mov eax, edx
add ebx, 2
dec edx
test eax, eax
jne 0x4088a4
test ecx, ecx
je 0x4088a8
movzx eax, word [0x46dd78]
dec ecx
mov word [ebx], ax
mov edx, 1
movsx eax, byte [ebp]
mov word [ebx + 2], ax
add ebx, 4
inc ebp
test ecx, ecx
jne 0x408870
mov eax, dword [esp + 0x24]
cmp dword [esp + 0x18], 0
mov ecx, ebx
mov ebp, dword [esp + 0x10]
je 0x4088bc
add ebp, 2
mov edx, esi
sub edx, eax
mov eax, dword [esp + 0x28]
add eax, esi
push ecx
mov ecx, edi
lea ebx, [ebx + edx*2]
lea ebp, [ebp + eax*2]
mov dword [esp + 0x30], ebx
mov dword [esp + 0x14], ebp
call fcn.004072a0
nop dword [eax]
jmp case.default.0x407e20
xor ecx, ecx
test edx, edx
setne cl
mov edx, ecx
test edi, 0x40000
je 0x408917
mov eax, dword [esp + 0x30]
movzx edi, word [eax + 6]
lea eax, [ecx + esi]
cmp eax, edi
jae 0x408917
or dword [esp + 0x18], 4
mov eax, edi
sub eax, ecx
sub eax, esi
mov dword [esp + 0x54], eax
lea edx, [ecx + eax]
mov ecx, dword [esp + 0x10]
lea eax, [edx + esi]
lea edx, [ecx + eax*2]
mov eax, dword [esp + 0x1c]
mov dword [esp + 0x20], edx
cmp eax, edx
jae 0x408998
add eax, eax
mov ebx, edx
cmp eax, edx
mov edx, dword [0x46ecb4]
cmovae ebx, eax
mov dword [esp + 0x1c], ebx
lea ecx, [ebx + 0xa]
call fcn.00406000
mov edi, eax
xor ecx, ecx
lea eax, [edi + 8]
mov dword [edi], ebx
mov dword [edi + 4], eax
mov word [ebx + eax], cx
mov eax, dword [esp + 0x14]
mov ebx, dword [esp + 0x10]
push ebx
push dword [eax + 4]
push dword [edi + 4]
call fcn.00423550
mov ecx, dword ds:[esp + 0x20]
add esp, 0xc
add ecx, 0xfffffff8
or eax, 0xffffffff
lock xadd dword [ecx + 4], eax
dec eax
jne 0x408988
call fcn.004060e0
mov eax, dword [edi + 4]
mov edx, dword [esp + 0x20]
shr ebx, 1
mov dword [esp + 0x14], edi
lea ebx, [eax + ebx*2]
mov eax, dword ds:[esp + 0x18]
test al, 1
je 0x4089ab
mov ecx, 0x2d
jmp 0x4089b4
test al, 2
je 0x4089ba
mov ecx, 0x2b
mov word [ebx], cx
add ebx, 2
test al, 4
je 0x4089df
mov eax, dword [esp + 0x54]
test eax, eax
je 0x4089dc
mov ecx, eax
mov edi, ebx
shr ecx, 1
mov eax, 0x300030
rep stosd dword es:[edi], eax
adc ecx, ecx
rep stosw word es:[edi], ax
mov eax, dword [esp + 0x54]
lea ebx, [ebx + eax*2]
mov ecx, ebx
mov dword [esp + 0x10], edx
mov edi, ebp
lea ebx, [ebx + esi*2]
mov ebp, dword [esp + 0x10]
mov edx, esi
push ecx
mov ecx, edi
mov dword [esp + 0x30], ebx
call fcn.004072a0
nop dword [eax]
jmp case.default.0x407e20
mov dword [esp + 0x18], 0
test dl, 0x40
je 0x408a25
movzx edx, word [edi + 4]
cmp edx, 0xa2
jbe 0x408a2a
mov edx, 0xa2
jmp 0x408a2a
mov edx, 6
movsd xmm0, qword [edi + 0x10]
lea ebp, [esp + 0x71]
mov esi, dword [esp + 0x34]
sub esp, 0x10
mov eax, ebp
mov ecx, esi
movsd qword [esp + 8], xmm0
push eax
call fcn.0041a4c0
test al, al
jne 0x408a54
mov byte [esp + 0x71], al
jmp 0x408aab
mov edx, dword [0x46ee54]
test edx, edx
je 0x408a85
mov al, byte [esp + 0x71]
lea ecx, [esp + 0x71]
test al, al
je 0x408a85
nop word [eax + eax]
cmp al, 0x2e
je 0x408a7e
mov al, byte [ecx + 1]
inc ecx
test al, al
jne 0x408a70
jmp 0x408a85
mov al, byte [0x46dd30]
mov byte [ecx], al
test esi, 0x20000000
je 0x408aab
lea eax, [esp + 0x71]
test edx, edx
je 0x408aa2
push edx
push eax
call fcn.00428fb7
add esp, 8
jmp 0x408aab
push eax
call fcn.00428f5b
add esp, 4
mov edi, dword [edi]
test edi, 0x8000
je 0x408b2e
mov al, byte [esp + 0x71]
lea ecx, [esp + 0x71]
mov ah, byte [0x46dd30]
test al, al
je 0x408adc
nop dword [eax + eax]
cmp al, ah
je 0x408adc
mov al, byte [ecx + 1]
inc ecx
test al, al
jne 0x408ad0
mov al, byte ds:[ecx]
inc ecx
test al, al
je 0x408b2e
mov al, byte [ecx]
test al, al
je 0x408b04
nop word [eax + eax]
cmp al, 0x65
je 0x408b04
cmp al, 0x45
je 0x408b04
mov al, byte ds:[ecx + 1]
inc ecx
test al, al
jne 0x408af0
mov al, byte [ecx - 1]
mov esi, ecx
dec ecx
cmp al, 0x30
jne 0x408b18
nop
mov al, byte [ecx - 1]
dec ecx
cmp al, 0x30
je 0x408b10
cmp al, ah
lea edx, [ecx - 1]
cmovne edx, ecx
mov al, byte [esi]
lea edx, [edx + 1]
mov byte [edx], al
lea esi, [esi + 1]
test al, al
jne 0x408b20
lea esi, [esp + 0x71]
lea ecx, [esi + 1]
mov al, byte [esi]
inc esi
test al, al
jne 0x408b35
sub esi, ecx
cmp byte [esp + 0x71], 0x2d
jne 0x408b51
mov edx, 1
lea ebp, [esp + 0x72]
dec esi
jmp 0x408b63
mov edx, dword [esp + 0x18]
test edi, 0x20000
mov eax, 2
cmovne edx, eax
mov eax, edi
mov dword [esp + 0x18], edx
and eax, 0x13000
cmp eax, 0x10000
jne 0x408cc5
mov al, byte [ebp]
mov edi, ebp
sub al, 0x30
cmp al, 0xa
jae 0x408b8e
mov al, byte [edi + 1]
inc edi
sub al, 0x30
cmp al, 0xa
jb 0x408b84
mov eax, edi
sub eax, ebp
mov dword [esp + 0x24], eax
lea ecx, [eax + 2]
mov dword [esp + 0x20], ecx
je 0x408bad
mov eax, 0xaaaaaaab
mul ecx
mov eax, edx
shr eax, 1
dec eax
jmp 0x408bb3
xor eax, eax
mov dword [esp + 0x20], ecx
lea ecx, [eax + esi]
mov dword [esp + 0x28], eax
add ecx, ecx
cmp dword [esp + 0x18], 0
lea eax, [ecx + 2]
cmove eax, ecx
mov ecx, dword [esp + 0x10]
add ecx, eax
mov eax, dword [esp + 0x1c]
cmp eax, ecx
jae 0x408c45
add eax, eax
mov edx, ecx
cmp eax, ecx
cmovae edx, eax
mov dword [esp + 0x1c], edx
lea ecx, [edx + 0xa]
mov edx, dword [0x46ecb4]
call fcn.00406000
mov edx, dword [esp + 0x1c]
mov ebx, eax
push dword [esp + 0x10]
lea eax, [ebx + 8]
xor ecx, ecx
mov dword [ebx + 4], eax
mov dword [ebx], edx
mov word [edx + eax], cx
mov eax, dword [esp + 0x18]
push dword [eax + 4]
push dword [ebx + 4]
call fcn.00423550
mov ecx, dword [esp + 0x20]
add esp, 0xc
add ecx, 0xfffffff8
or eax, 0xffffffff
lock xadd dword [ecx + 4], eax
dec eax
jne 0x408c35
call fcn.004060e0
mov ecx, dword [esp + 0x10]
mov eax, dword [ebx + 4]
shr ecx, 1
mov dword [esp + 0x14], ebx
lea ebx, [eax + ecx*2]
mov eax, dword [esp + 0x20]
xor edx, edx
div dword [esp + 0x4c]
mov eax, dword [esp + 0x18]
mov ecx, dword [esp + 0x24]
test al, 1
je 0x408c62
mov eax, 0x2d
jmp 0x408c6b
test al, 2
je 0x408c71
mov eax, 0x2b
mov word [ebx], ax
add ebx, 2
mov eax, dword [esp + 0x24]
test eax, eax
je 0x4088ac
nop dword [eax]
movsx ax, byte [ebp]
dec ecx
inc ebp
mov word [ebx], ax
mov eax, edx
add ebx, 2
dec edx
test eax, eax
jne 0x408cb8
test ecx, ecx
je 0x4088a8
movzx eax, word [0x46dd78]
dec ecx
mov word [ebx], ax
mov edx, 1
movsx eax, byte [ebp]
mov word [ebx + 2], ax
add ebx, 4
inc ebp
test ecx, ecx
jne 0x408c80
nop dword [eax]
jmp 0x4088a8
xor ecx, ecx
test edx, edx
setne cl
mov edx, ecx
test edi, 0x40000
je 0x408cf7
mov eax, dword [esp + 0x30]
movzx edi, word [eax + 6]
lea eax, [ecx + esi]
cmp eax, edi
jae 0x408cf7
or dword [esp + 0x18], 4
mov eax, edi
sub eax, ecx
sub eax, esi
mov dword [esp + 0x58], eax
lea edx, [ecx + eax]
mov ecx, dword [esp + 0x10]
lea eax, [edx + esi]
lea edx, [ecx + eax*2]
mov eax, dword [esp + 0x1c]
mov dword [esp + 0x20], edx
cmp eax, edx
jae 0x408d7a
add eax, eax
mov ebx, edx
cmp eax, edx
mov edx, dword [0x46ecb4]
cmovae ebx, eax
mov dword [esp + 0x1c], ebx
lea ecx, [ebx + 0xa]
call fcn.00406000
mov edi, eax
xor ecx, ecx
lea eax, [edi + 8]
mov dword [edi], ebx
mov dword [edi + 4], eax
mov word [ebx + eax], cx
mov eax, dword [esp + 0x14]
mov ebx, dword [esp + 0x10]
push ebx
push dword [eax + 4]
push dword [edi + 4]
call fcn.00423550
mov ecx, dword [esp + 0x20]
add esp, 0xc
add ecx, 0xfffffff8
or eax, 0xffffffff
lock xadd dword [ecx + 4], eax
dec eax
jne 0x408d6a
call fcn.004060e0
mov eax, dword [edi + 4]
mov edx, dword [esp + 0x20]
shr ebx, 1
mov dword [esp + 0x14], edi
lea ebx, [eax + ebx*2]
mov eax, dword ds:[esp + 0x18]
test al, 1
je 0x408d8b
mov ecx, 0x2d
jmp 0x408d94
test al, 2
je 0x408d9a
mov ecx, 0x2b
mov word [ebx], cx
add ebx, 2
nop word [eax + eax]
test al, 4
je 0x4089df
mov eax, dword [esp + 0x58]
test eax, eax
je 0x4089dc
mov ecx, eax
mov edi, ebx
shr ecx, 1
mov eax, 0x300030
rep stosd dword es:[edi], eax
adc ecx, ecx
rep stosw word es:[edi], ax
mov eax, dword [esp + 0x58]
jmp 0x4089dc
mov eax, dword [esp + 0x30]
xor ebp, ebp
mov edi, dword [edi + 0x10]
mov ecx, edi
mov dword [esp + 0x18], ebp
mov esi, dword [eax + 0x14]
mov edx, esi
call fcn.00440cc0
or edi, esi
jne 0x408e6e
mov ebp, dword [esp + 0x10]
mov eax, dword [esp + 0x1c]
lea edi, [ebp + 2]
cmp eax, edi
jae 0x408e5c
mov edx, dword [0x46ecb4]
add eax, eax
cmp eax, edi
mov ebx, edi
cmovae ebx, eax
mov dword [esp + 0x1c], ebx
lea ecx, [ebx + 0xa]
call fcn.00406000
mov esi, eax
xor ecx, ecx
lea eax, [esi + 8]
push ebp
mov dword [esi], ebx
mov dword [esi + 4], eax
mov word [ebx + eax], cx
mov ebx, dword [esp + 0x18]
push dword [ebx + 4]
push dword [esi + 4]
call fcn.00423550
add esp, 0xc
lea ecx, [ebx - 8]
or eax, 0xffffffff
lock xadd dword [ecx + 4], eax
dec eax
jne 0x408e50
call fcn.004060e0
mov eax, dword [esi + 4]
shr ebp, 1
mov dword [esp + 0x14], esi
lea ebx, [eax + ebp*2]
mov eax, 0x30
mov ebp, edi
mov word [ebx], ax
add ebx, 2
jmp 0x4091ec
mov ecx, dword [esp + 0x34]
mov edx, dword [esp + 0x30]
test ecx, 0x100
je 0x408e84
movzx eax, byte [edx + 0xa]
jmp 0x408e87
or eax, 0xffffffff
movsd xmm1, qword [0x46a2b8]
comisd xmm0, xmm1
jb 0x408eb8
movsd xmm2, qword [0x46a2a8]
nop dword [eax]
cmp ebp, 7
jae 0x408eb4
cmp ebp, eax
jae 0x408eb4
mulsd xmm0, xmm2
inc ebp
comisd xmm0, xmm1
jae 0x408ea0
mov dword [esp + 0x18], ebp
test cl, 0x40
je 0x408ec3
movzx eax, word [edx + 4]
jmp 0x408ec8
mov eax, 2
movzx edx, ax
lea esi, [esp + 0x71]
cmp edx, 0xa2
mov dword [esp + 0x24], 0
mov eax, 0xa2
mov dword [esp + 0x20], esi
cmova edx, eax
mov ecx, 0x1804c
sub esp, 0x10
mov eax, esi
movsd qword [esp + 8], xmm0
push eax
call fcn.0041a4c0
nop
test al, al
jne 0x408f0c
xor dl, dl
mov byte [esp + 0x71], dl
jmp 0x408f40
cmp dword [0x46ee54], 0
mov dl, byte [esp + 0x71]
je 0x408f40
lea ecx, ds:[esp + 0x71]
test dl, dl
je 0x408f40
mov al, dl
cmp al, 0x2e
je 0x408f34
mov al, byte [ecx + 1]
inc ecx
test al, al
jne 0x408f26
jmp 0x408f40
mov ax, word [0x46dd30]
mov byte [ecx], al
mov dl, byte [esp + 0x71]
lea ecx, [esp + 0x71]
test dl, dl
je 0x408f64
mov al, dl
nop word [eax + eax]
cmp al, byte [0x46dd30]
je 0x408f64
mov al, byte ds:[ecx + 1]
inc ecx
test al, al
jne 0x408f50
mov al, byte [ecx]
inc ecx
test al, al
je 0x408fba
mov al, byte [ecx]
test al, al
je 0x408f84
cmp al, 0x65
je 0x408f84
cmp al, 0x45
je 0x408f84
mov al, byte ds:[ecx + 1]
inc ecx
test al, al
jne 0x408f71
mov al, byte [ecx - 1]
mov esi, ecx
dec ecx
cmp al, 0x30
jne 0x408f98
nop
mov al, byte [ecx - 1]
dec ecx
cmp al, 0x30
je 0x408f90
cmp al, byte [0x46dd30]
lea edx, [ecx - 1]
cmovne edx, ecx
mov al, byte [esi]
lea edx, [edx + 1]
mov byte [edx], al
lea esi, [esi + 1]
test al, al
jne 0x408fa4
mov dl, byte [esp + 0x71]
mov esi, dword [esp + 0x20]
lea ebp, [esp + 0x71]
lea ecx, [ebp + 1]
mov al, byte [ebp]
inc ebp
test al, al
jne 0x408fc1
sub ebp, ecx
cmp dl, 0x2d
jne 0x408fdd
mov dword [esp + 0x24], 1
lea esi, [esp + 0x72]
dec ebp
mov al, byte [esi]
mov edi, esi
sub al, 0x30
cmp al, 0xa
jae 0x408ff1
mov al, byte [edi + 1]
inc edi
sub al, 0x30
cmp al, 0xa
jb 0x408fe7
mov eax, edi
sub eax, esi
mov dword [esp + 0x28], eax
lea ecx, [eax + 2]
mov dword [esp + 0x20], ecx
je 0x409010
mov eax, 0xaaaaaaab
mul ecx
mov eax, edx
shr eax, 1
dec eax
jmp 0x409016
xor eax, eax
mov dword [esp + 0x20], ecx
lea ecx, [eax + ebp]
mov dword [esp + 0x38], eax
add ecx, ecx
cmp dword [esp + 0x24], 0
lea eax, [ecx + 2]
cmove eax, ecx
mov ecx, dword [esp + 0x10]
add ecx, eax
mov eax, dword [esp + 0x1c]
cmp eax, ecx
jae 0x4090a8
add eax, eax
mov edx, ecx
cmp eax, ecx
cmovae edx, eax
mov dword [esp + 0x1c], edx
lea ecx, [edx + 0xa]
mov edx, dword [0x46ecb4]
call fcn.00406000
mov ecx, dword [esp + 0x1c]
mov ebx, eax
push dword [esp + 0x10]
lea eax, [ebx + 8]
xor edx, edx
mov dword [ebx + 4], eax
mov dword [ebx], ecx
mov word [ecx + eax], dx
mov eax, dword [esp + 0x18]
push dword [eax + 4]
push dword [ebx + 4]
call fcn.00423550
mov ecx, dword [esp + 0x20]
add esp, 0xc
add ecx, 0xfffffff8
or eax, 0xffffffff
lock xadd dword [ecx + 4], eax
dec eax
jne 0x409098
call fcn.004060e0
mov ecx, dword [esp + 0x10]
mov eax, dword [ebx + 4]
shr ecx, 1
mov dword [esp + 0x14], ebx
lea ebx, [eax + ecx*2]
mov eax, dword [esp + 0x20]
xor edx, edx
div dword [esp + 0x4c]
cmp dword [esp + 0x24], 0
mov ecx, dword [esp + 0x28]
je 0x4090c8
mov eax, 0x2d
mov word [ebx], ax
add ebx, 2
mov eax, dword [esp + 0x28]
test eax, eax
je 0x40910b
movsx ax, byte ds:[esi]
dec ecx
inc esi
mov word [ebx], ax
mov eax, edx
add ebx, 2
dec edx
test eax, eax
jne 0x409103
test ecx, ecx
je 0x409107
movzx eax, word [0x46dd78]
dec ecx
mov word [ebx], ax
mov edx, 1
movsx eax, byte [esi]
mov word [ebx + 2], ax
add ebx, 4
inc esi
test ecx, ecx
jne 0x4090d0
mov eax, dword [esp + 0x28]
cmp dword [esp + 0x24], 0
je 0x409117
add dword [esp + 0x10], 2
mov esi, ebp
mov ecx, edi
sub esi, eax
push ebx
mov edx, esi
call fcn.004072a0
mov eax, dword [esp + 0x38]
lea edi, [ebx + esi*2]
mov ecx, dword [esp + 0x10]
add eax, ebp
mov esi, dword [esp + 0x18]
mov edx, dword [esp + 0x1c]
lea ebp, [ecx + eax*2]
mov ecx, dword [esi*8 + 0x46dd40]
lea eax, [ecx + 2]
add eax, ebp
cmp edx, eax
jae 0x4091b6
lea ebx, [ecx + 2]
lea eax, [edx + edx]
add ebx, ebp
mov edx, dword [0x46ecb4]
cmp eax, ebx
cmovae ebx, eax
mov dword [esp + 0x1c], ebx
lea ecx, [ebx + 0xa]
call fcn.00406000
mov edi, eax
xor ecx, ecx
lea eax, [edi + 8]
push ebp
mov dword [edi], ebx
mov dword [edi + 4], eax
mov word [eax + ebx], cx
mov ebx, dword [esp + 0x18]
push dword [ebx + 4]
push dword [edi + 4]
call fcn.00423550
add esp, 0xc
lea ecx, [ebx - 8]
or eax, 0xffffffff
lock xadd dword [ecx + 4], eax
dec eax
jne 0x4091a8
call fcn.004060e0
mov eax, dword [edi + 4]
mov ecx, ebp
shr ecx, 1
mov dword [esp + 0x14], edi
lea edi, [eax + ecx*2]
mov eax, 0x20
mov word [edi], ax
lea eax, [edi + 2]
push dword [esi*8 + 0x46dd40]
push dword [esi*8 + 0x46dd44]
push eax
call fcn.00423550
mov ecx, dword [esi*8 + 0x46dd40]
add ebp, 2
add esp, 0xc
lea eax, [ecx + 2]
shr eax, 1
add ebp, ecx
lea ebx, [edi + eax*2]
mov dword [esp + 0x10], ebp
mov dword [esp + 0x2c], ebx
mov eax, dword [esp + 0x30]
mov edi, ebp
sub edi, dword [esp + 0x44]
test dword [eax], 0xc0000000
je 0x409323
movzx esi, word [eax + 6]
add esi, esi
cmp edi, esi
jae 0x409323
mov edx, dword [esp + 0x1c]
sub esi, edi
lea ecx, [esi + ebp]
mov dword [esp + 0x24], ecx
cmp edx, ecx
jae 0x409298
lea eax, [edx + edx]
mov edx, ecx
cmp eax, ecx
cmovae edx, eax
mov dword [esp + 0x1c], edx
lea ecx, [edx + 0xa]
mov edx, dword [0x46ecb4]
call fcn.00406000
mov ecx, dword [esp + 0x1c]
mov ebx, eax
lea eax, [ebx + 8]
xor edx, edx
push ebp
mov dword [ebx + 4], eax
mov dword [ebx], ecx
mov word [eax + ecx], dx
mov eax, dword [esp + 0x18]
push dword [eax + 4]
push dword [ebx + 4]
call fcn.00423550
mov ecx, dword ds:[esp + 0x20]
add esp, 0xc
add ecx, 0xfffffff8
or eax, 0xffffffff
lock xadd dword [ecx + 4], eax
dec eax
jne 0x409288
call fcn.004060e0
mov eax, dword [ebx + 4]
shr ebp, 1
mov dword [esp + 0x14], ebx
lea ebx, [eax + ebp*2]
mov eax, dword [esp + 0x30]
mov ecx, dword [eax]
test cl, cl
jns 0x4092a4
movzx eax, word [eax + 8]
jmp 0x4092a9
mov eax, 0x20
shr esi, 1
mov dword [esp + 0x20], eax
test ecx, ecx
jns 0x4092d3
test esi, esi
je 0x4092ce
movzx edx, ax
mov ecx, esi
mov eax, edx
mov edi, ebx
shl edx, 0x10
or eax, edx
shr ecx, 1
rep stosd dword es:[edi], eax
adc ecx, ecx
rep stosw word es:[edi], ax
lea ebp, [esi + esi]
jmp 0x409315
mov eax, edi
lea ebp, [esi + esi]
and eax, 0xfffffffe
mov ecx, ebx
sub ecx, eax
push edi
push ecx
lfence
lea eax, [ecx + ebp]
mov dword [esp + 0x4c], ecx
push eax
call fcn.00423550
add esp, 0xc
test esi, esi
je 0x409315
mov eax, dword [esp + 0x20]
mov ecx, esi
mov edi, dword [esp + 0x44]
movzx edx, ax
mov eax, edx
shl edx, 0x10
or eax, edx
shr ecx, 1
rep stosd dword es:[edi], eax
adc ecx, ecx
rep stosw word es:[edi], ax
add ebx, ebp
mov ebp, dword [esp + 0x24]
mov dword [esp + 0x2c], ebx
mov dword [esp + 0x10], ebp
mov edi, dword [esp + 0x64]
mov esi, dword [esp + 0x1c]
test edi, edi
jne 0x407de3
mov eax, dword [esp + 0x14]
xor edx, edx
pop edi
pop esi
mov ecx, dword [eax + 4]
mov dword [eax], ebp
shr ebp, 1
mov word [ecx + ebp*2], dx
mov ecx, dword [esp + 0x46c]
pop ebp
pop ebx
xor ecx, esp
call fcn.00421733
add esp, 0x468
ret 4