Function at 0x180c5f0
Capabilities:
Get thread local storage value

Disassembly:
push rbp
push rsi
push rdi
sub rsp, 0x90
mov qword [rsp + 0x30], 0xfffffffffffffffe
mov qword [rsp + 0xb0], rbx
movzx esi, cl
mov qword [rsp + 0x38], 0
mov rax, qword [0x039f1180]
mov ecx, dword [rax + 8]
call qword [sym.imp.KERNEL32.dll_TlsGetValue]
test rax, rax
je 0x180c633
lea rdi, [rax + 0x20]
jmp 0x180c635
xor edi, edi
mov qword [rsp + 0x38], rdi
mov rcx, qword [rdi + 0x30]
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_VarBstrFromCy]
mov rbp, rax
mov qword [rsp + 0x40], rax
cmp dword [0x039f3510], 0
jne 0x180c65c
xor ebx, ebx
jmp 0x180cf9b
test sil, sil
jne 0x180c66e
lea rcx, [0x01809fb0]
call qword [sym.imp.KERNEL32.dll_SetUnhandledExceptionFilter]
lea rcx, [rsp + 0xb8]
call fcn.0116a950
nop
mov rax, qword [0x039f4ec0]
test rax, rax
je 0x180c691
lea rdx, [rax + 0xc0]
jmp 0x180c693
xor edx, edx
xor r8d, r8d
lea rcx, [rsp + 0xb8]
call fcn.01174500
mov ebx, eax
test eax, eax
jns 0x180c6bb
lea rcx, [rsp + 0xb8]
call fcn.0116a920
jmp 0x180cf9b
test sil, sil
je 0x180c6f9
lea rdx, [rsp + 0xb8]
mov rcx, qword [0x039f11b0]
call fcn.017e7510
mov ebx, eax
test eax, eax
jns 0x180c6ec
lea rcx, [rsp + 0xb8]
call fcn.0116a920
jmp 0x180cf9b
mov r8, qword [rsp + 0xb8]
jmp 0x180ca1c
mov rcx, qword [0x039f11b0]
cmp qword [rcx + 0x168], 0
je 0x180c711
mov rcx, qword [rcx + 0x168]
lea r8, [rsp + 0xb8]
mov edx, 0x57
call fcn.017cf920
mov ebx, eax
test eax, eax
jns 0x180c73b
lea rcx, [rsp + 0xb8]
call fcn.0116a920
jmp 0x180cf9b
mov r8, qword [rsp + 0xb8]
test r8, r8
je 0x180c7c7
movzx ecx, byte [r8 - 5]
movzx eax, cl
shr al, 6
and al, 1
jne 0x180c761
test cl, 0x20
jne 0x180c761
mov rcx, r8
jmp 0x180c764
mov rcx, qword [r8]
test rcx, rcx
je 0x180c7c7
test al, al
jne 0x180c773
movsxd rax, dword [r8 - 4]
jmp 0x180c786
mov rcx, qword [r8]
call qword [sym.imp.OLEAUT32.dll_SysAllocStringByteLen]
mov eax, eax
mov r8, qword [rsp + 0xb8]
shr rax, 1
test rax, rax
jle 0x180c7c7
test r8, r8
je 0x180ca33
test byte [r8 - 5], 0x40
jne 0x180c7a4
movsxd rax, dword [r8 - 4]
jmp 0x180c7b7
mov rcx, qword [r8]
call qword [sym.imp.OLEAUT32.dll_SysAllocStringByteLen]
mov eax, eax
mov r8, qword [rsp + 0xb8]
and rax, 0xfffffffffffffffe
cmp rax, 0x208
jb 0x180ca1c
mov rcx, qword [0x039f11b0]
cmp qword [rcx + 0x168], 0
je 0x180c7df
mov rcx, qword [rcx + 0x168]
lea r8, [rsp + 0xb8]
mov edx, 2
call fcn.017cf920
mov ebx, eax
test eax, eax
jns 0x180c809
lea rcx, [rsp + 0xb8]
call fcn.0116a920
jmp 0x180cf9b
mov r8, qword [rsp + 0xb8]
test r8, r8
je 0x180c895
movzx ecx, byte [r8 - 5]
movzx eax, cl
shr al, 6
and al, 1
jne 0x180c82f
test cl, 0x20
jne 0x180c82f
mov rcx, r8
jmp 0x180c832
mov rcx, qword [r8]
test rcx, rcx
je 0x180c895
test al, al
jne 0x180c841
movsxd rax, dword [r8 - 4]
jmp 0x180c854
mov rcx, qword [r8]
call qword [sym.imp.OLEAUT32.dll_SysAllocStringByteLen]
mov eax, eax
mov r8, qword [rsp + 0xb8]
shr rax, 1
test rax, rax
jle 0x180c895
test r8, r8
je 0x180ca33
test byte [r8 - 5], 0x40
jne 0x180c872
movsxd rax, dword [r8 - 4]
jmp 0x180c885
mov rcx, qword [r8]
call qword [sym.imp.OLEAUT32.dll_SysAllocStringByteLen]
mov eax, eax
mov r8, qword [rsp + 0xb8]
and rax, 0xfffffffffffffffe
cmp rax, 0x208
jb 0x180ca1c
lea r8, [rsp + 0xb8]
xor edx, edx
mov rcx, qword [0x039f11b0]
call fcn.017cf920
mov ebx, eax
test eax, eax
jns 0x180c8c3
lea rcx, [rsp + 0xb8]
call fcn.0116a920
jmp 0x180cf9b
mov r8, qword [rsp + 0xb8]
test r8, r8
je 0x180c94f
movzx ecx, byte [r8 - 5]
movzx eax, cl
shr al, 6
and al, 1
jne 0x180c8e9
test cl, 0x20
jne 0x180c8e9
mov rcx, r8
jmp 0x180c8ec
mov rcx, qword [r8]
test rcx, rcx
je 0x180c94f
test al, al
jne 0x180c8fb
movsxd rax, dword [r8 - 4]
jmp 0x180c90e
mov rcx, qword [r8]
call qword [sym.imp.OLEAUT32.dll_SysAllocStringByteLen]
mov eax, eax
mov r8, qword [rsp + 0xb8]
shr rax, 1
test rax, rax
jle 0x180c94f
test r8, r8
je 0x180ca33
test byte [r8 - 5], 0x40
jne 0x180c92c
movsxd rax, dword [r8 - 4]
jmp 0x180c93f
mov rcx, qword [r8]
call qword [sym.imp.OLEAUT32.dll_SysAllocStringByteLen]
mov eax, eax
mov r8, qword [rsp + 0xb8]
and rax, 0xfffffffffffffffe
cmp rax, 0x208
jb 0x180ca1c
mov rcx, qword [0x039f11b0]
cmp qword [rcx + 0x168], 0
je 0x180c967
mov rcx, qword [rcx + 0x168]
lea rdx, [rsp + 0xb8]
call fcn.017d4290
mov ebx, eax
test eax, eax
jns 0x180c98c
lea rcx, [rsp + 0xb8]
call fcn.0116a920
jmp 0x180cf9b
mov r8, qword [rsp + 0xb8]
test r8, r8
je 0x180ca7c
movzx ecx, byte [r8 - 5]
movzx eax, cl
shr al, 6
and al, 1
jne 0x180c9b6
test cl, 0x20
jne 0x180c9b6
mov rcx, r8
jmp 0x180c9b9
mov rcx, qword [r8]
test rcx, rcx
je 0x180ca7c
test al, al
jne 0x180c9cc
movsxd rax, dword [r8 - 4]
jmp 0x180c9df
mov rcx, qword [r8]
call qword [sym.imp.OLEAUT32.dll_SysAllocStringByteLen]
mov eax, eax
mov r8, qword [rsp + 0xb8]
shr rax, 1
test rax, rax
jle 0x180ca7c
test r8, r8
je 0x180ca33
test byte [r8 - 5], 0x40
jne 0x180c9fd
movsxd rax, dword [r8 - 4]
jmp 0x180ca10
mov rcx, qword [r8]
call qword [sym.imp.OLEAUT32.dll_SysAllocStringByteLen]
mov eax, eax
mov r8, qword [rsp + 0xb8]
and rax, 0xfffffffffffffffe
cmp rax, 0x208
jae 0x180ca7c
test r8, r8
je 0x180ca33
movzx eax, byte [r8 - 5]
test al, 0x40
jne 0x180ca2e
test al, 0x20
je 0x180ca36
mov r8, qword [r8]
jmp 0x180ca36
xor r8d, r8d
mov edx, 0x104
lea rcx, [0x03e49fd0]
call qword [sym.imp.MSVCR80.dll_wcscpy_s]
cmp eax, 0xffffffff
jne 0x180ca7c
mov qword [rsp + 0x20], 0x1000000f
xor r9d, r9d
xor r8d, r8d
xor edx, edx
mov ecx, 0xc1000001
call fcn.0124e580
mov ebx, eax
lea rcx, [rsp + 0xb8]
call fcn.0116a920
jmp 0x180cf9b
xor edx, edx
lea rcx, [rsp + 0xb8]
call fcn.012cebe0
mov ebx, eax
test eax, eax
jns 0x180caa3
lea rcx, [rsp + 0xb8]
call fcn.0116a920
jmp 0x180cf9b
mov rcx, qword [0x039f11b0]
cmp qword [rcx + 0x168], 0
je 0x180cabb
mov rcx, qword [rcx + 0x168]
lea rdx, [rsp + 0xb8]
call fcn.017e96b0
mov ebx, eax
test eax, eax
jns 0x180cae0
lea rcx, [rsp + 0xb8]
call fcn.0116a920
jmp 0x180cf9b
mov r9, qword [rsp + 0xb8]
test r9, r9
je 0x180caff
movzx eax, byte [r9 - 5]
test al, 0x40
jne 0x180cafa
test al, 0x20
je 0x180cb02
mov r9, qword [r9]
jmp 0x180cb02
xor r9d, r9d
lea rax, [0x011f6320]
mov qword [rsp + 0x28], rax
lea rax, [0x011f5490]
mov qword [rsp + 0x20], rax
lea r8, [0x01187df8]
mov edx, 0x104
lea rcx, [0x03e4a1e0]
call qword [sym.imp.MSVCR80.dll__wmakepath_s]
cmp eax, 0xffffffff
jne 0x180cb67
mov qword [rsp + 0x20], 0x1000000f
xor r9d, r9d
xor r8d, r8d
xor edx, edx
mov ecx, 0xc1000001
call fcn.0124e580
mov ebx, eax
lea rcx, [rsp + 0xb8]
call fcn.0116a920
jmp 0x180cf9b
lea rdx, [0x03e49fd0]
mov rcx, qword [0x039f11b0]
call fcn.017cfc50
mov ebx, eax
test eax, eax
jns 0x180cb92
lea rcx, [rsp + 0xb8]
call fcn.0116a920
jmp 0x180cf9b
lea rdx, [0x03e4a1e0]
mov rcx, qword [0x039f11b0]
call fcn.017cfc80
mov ebx, eax
test eax, eax
jns 0x180cbbd
lea rcx, [rsp + 0xb8]
call fcn.0116a920
jmp 0x180cf9b
mov rax, qword [0x039f11b0]
cmp qword [rax + 0x168], 0
je 0x180cbd5
mov rax, qword [rax + 0x168]
cmp qword [rax + 0x170], 0
jne 0x180cc00
movzx ecx, sil
call fcn.0180c250
mov ebx, eax
test eax, eax
jns 0x180cc00
lea rcx, [rsp + 0xb8]
call fcn.0116a920
jmp 0x180cf9b
xor r8d, r8d
xor edx, edx
lea rcx, [rsp + 0x50]
call fcn.0118c100
nop
mov edx, dword [reloc.OLEAUT32.dll_VariantInit]
and edx, 7
lea rax, [rdx + rdx*2]
lea r8, [0x01173e98]
movzx ecx, byte [r8 + rax*2 + 5]
movzx eax, byte [r8 + rax*2 + 4]
add eax, ecx
cdqe
movabs r9, 0x7fffffffffffffff
mov rcx, r9
sub rcx, rax
shr rcx, 1
sub rcx, 1
cmp rcx, 3
jge 0x180cca0
lea r8, [0x0180cfc0]
mov edx, 0x405
lea rcx, [0x01581480]
call fcn.017eea00
mov ebx, eax
lea rax, [0x0104ef20]
mov qword [rsp + 0x50], rax
lea rax, [0x0109b930]
mov qword [rsp + 0x68], rax
lea rcx, [rsp + 0x50]
call fcn.0116d120
nop
lea rcx, [rsp + 0xb8]
call fcn.0116a920
jmp 0x180cf9b
lea rax, [rdx + rdx*2]
movzx ecx, byte [r8 + rax*2 + 5]
movzx eax, byte [r8 + rax*2 + 4]
add ecx, eax
movsxd rbx, ecx
add rbx, 8
mov rcx, qword [rdi + 0x30]
cmp rbx, r9
jae 0x180cf4d
mov rax, qword [rcx]
mov rdx, rbx
call qword [rax + SafeArrayCopy]
test rax, rax
je 0x180cf4d
mov rcx, qword [rdi + 0x28]
mov qword [rsp + 0x70], rcx
mov qword [rsp + 0x78], rax
mov qword [rsp + 0x80], 0
mov qword [rsp + 0x88], rbx
lea rcx, [rsp + 0xc0]
call fcn.0116a950
nop
mov r9, qword [rdi + 0x40]
xor r8d, r8d
lea rdx, [rsp + 0x68]
lea rcx, [rsp + 0xc0]
call fcn.0118a2d0
mov ebx, eax
test eax, eax
jns 0x180cd6a
lea rcx, [rsp + 0xc0]
call fcn.0116a920
nop
lea rax, [0x0104ef20]
mov qword [rsp + 0x50], rax
lea rax, [0x0109b930]
mov qword [rsp + 0x68], rax
lea rcx, [rsp + 0x50]
call fcn.0116d120
nop
lea rcx, [rsp + 0xb8]
call fcn.0116a920
jmp 0x180cf9b
mov qword [rsp + 0xc8], 0
lea rdx, [rsp + 0xc8]
mov rcx, qword [0x039f11b0]
call fcn.017cc110
mov ebx, eax
test eax, eax
jns 0x180cde7
mov rcx, qword [rsp + 0xc8]
test rcx, rcx
je 0x180cda4
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
lea rcx, [rsp + 0xc0]
call fcn.0116a920
nop
lea rax, [0x0104ef20]
mov qword [rsp + 0x50], rax
lea rax, [0x0109b930]
mov qword [rsp + 0x68], rax
lea rcx, [rsp + 0x50]
call fcn.0116d120
nop
lea rcx, [rsp + 0xb8]
call fcn.0116a920
jmp 0x180cf9b
mov rcx, qword [rsp + 0xc8]
mov rax, qword [rcx]
mov r9d, 0x800
lea r8, [rsp + 0xc0]
mov edx, 0x41090070
call qword [rax + 0x1e8]
mov ebx, eax
test eax, eax
jns 0x180ce68
mov rcx, qword [rsp + 0xc8]
test rcx, rcx
je 0x180ce25
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
lea rcx, [rsp + 0xc0]
call fcn.0116a920
nop
lea rax, [0x0104ef20]
mov qword [rsp + 0x50], rax
lea rax, [0x0109b930]
mov qword [rsp + 0x68], rax
lea rcx, [rsp + 0x50]
call fcn.0116d120
nop
lea rcx, [rsp + 0xb8]
call fcn.0116a920
jmp 0x180cf9b
mov r8, qword [rsp + 0xc0]
test r8, r8
je 0x180ce87
movzx eax, byte [r8 - 5]
test al, 0x40
jne 0x180ce82
test al, 0x20
je 0x180ce8a
mov r8, qword [r8]
jmp 0x180ce8a
xor r8d, r8d
mov edx, 0x104
lea rcx, str.Gemini_Engine
call qword [sym.imp.MSVCR80.dll_wcscpy_s]
mov ebx, eax
test eax, eax
jns 0x180cef9
mov rcx, qword [rsp + 0xc8]
test rcx, rcx
je 0x180ceb6
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
lea rcx, [rsp + 0xc0]
call fcn.0116a920
nop
lea rax, [0x0104ef20]
mov qword [rsp + 0x50], rax
lea rax, [0x0109b930]
mov qword [rsp + 0x68], rax
lea rcx, [rsp + 0x50]
call fcn.0116d120
nop
lea rcx, [rsp + 0xb8]
call fcn.0116a920
jmp 0x180cf9b
mov rcx, qword [rsp + 0xc8]
test rcx, rcx
je 0x180cf0d
mov rax, qword [rcx]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetDim]
nop
lea rcx, [rsp + 0xc0]
call fcn.0116a920
nop
lea rax, [0x0104ef20]
mov qword [rsp + 0x50], rax
lea rax, [0x0109b930]
mov qword [rsp + 0x68], rax
lea rcx, [rsp + 0x50]
call fcn.0116d120
nop
lea rcx, [rsp + 0xb8]
call fcn.0116a920
jmp 0x180cf9b
mov qword [rsp + 0x20], 0x1000000f
xor r9d, r9d
xor r8d, r8d
xor edx, edx
mov ecx, 0xc1030001
call fcn.0124e580
mov ebx, eax
lea rax, [0x0104ef20]
mov qword [rsp + 0x50], rax
lea rax, [0x0109b930]
mov qword [rsp + 0x68], rax
lea rcx, [rsp + 0x50]
call fcn.0116d120
nop
lea rcx, [rsp + 0xb8]
call fcn.0116a920
nop
mov rcx, qword [rdi + 0x30]
mov rax, qword [rcx]
mov rdx, rbp
call qword [rax + 0x78]
mov eax, ebx
mov rbx, qword [rsp + 0xb0]
add rsp, 0x90
pop rdi
pop rsi
pop rbp
ret