Function at 0x1400f0320
Capabilities:
Get thread local storage value
Set thread local storage value

Disassembly:
push r15
push r14
push r13
push r12
push rbp
push rdi
push rsi
push rbx
sub rsp, 0x38
mov rsi, qword [rcx + 0x20]
mov ebp, dword [rcx + 0x7c]
mov r12, qword [rsi + 0x48]
mov rbx, rcx
and ebp, 0x20000
je 0x1400f03c0
mov eax, dword [rsi + 0x18]
test r12, r12
je 0x1400f05b0
test eax, 0x200000
je 0x1400f05f8
mov rdi, qword [rcx + 0x48]
mov r14d, dword [rsi + 0x34]
test rdi, rdi
je 0x1400f0632
mov eax, dword [rdi + 8]
cmp eax, r14d
jne 0x1400f0768
mov rax, qword [rdi]
cmp rax, 0xffffffffffffffff
jne 0x1400f0768
xor edx, edx
nop dword [rax]
mov rax, qword [r12 + 8]
mov qword [rdi], rax
mov rcx, qword [rdi]
mov rax, qword [r12 + 8]
cmp rcx, rax
jne 0x1400f0390
mov rax, qword [rdi]
mov qword [rbx + 0x48], rdi
mov qword [rbx + 0x18], rax
and eax, 1
mov rdi, qword [rsi + rax*8 + 0x50]
jmp 0x1400f0469
test r12, r12
je 0x1400f0570
mov rcx, qword [rsi + 0xf8]
mov edx, 0xffffffff
call qword [sym.imp.KERNEL32.dll_WaitForSingleObject]
test eax, eax
jne 0x1400f0610
mov rax, qword [r12 + 8]
mov rdx, rax
and edx, 1
mov rdi, qword [rsi + rdx*8 + 0x50]
add rax, 1
mov qword [rbx + 8], 0
mov rdx, qword [rsi + 0xa0]
mov qword [rbx + 0x18], rax
mov rcx, qword [rbx + 0x60]
mov rax, qword [rsi + 0xd8]
mov qword [rbx + 0x30], 0
mov dword [rbx + 0x38], 0
mov qword [rbx + 0x48], rax
mov dword [rbx + 0x80], 0x1ffff
mov qword [rax], 0
mov rax, qword [rsi + 0xd0]
mov qword [rbx + 0x28], rax
mov qword [rax], 0
mov eax, dword [rsi + 0x30]
mov qword [rbx + 0x40], 0
mov qword [rsi + 0x68], rbx
lea r8, [rax*4]
call sym.memcpy
xor edx, edx
movdqu xmm1, xmmword [rdi + 0x18]
mov rax, qword [rbx + 0x58]
mov ecx, 2
mov r8d, 0x60
movups xmmword [rax], xmm1
movdqu xmm2, xmmword [rdi + 0x28]
movups xmmword [rax + 0x10], xmm2
movdqu xmm3, xmmword [rdi + 0x38]
movd xmm2, ebp
movups xmmword [rax + 0x20], xmm3
movdqu xmm4, xmmword [rdi + 0x48]
movups xmmword [rax + 0x30], xmm4
movdqu xmm5, xmmword [rdi + 0x58]
movups xmmword [rax + 0x40], xmm5
movdqu xmm1, xmmword [rdi + 0x68]
movups xmmword [rax + 0x50], xmm1
mov rax, qword [rdi + 0x78]
add rax, 1
mov qword [rbx + 0x10], rax
mov eax, dword [rsi + 0x2c]
movd xmm0, eax
punpckldq xmm0, xmm2
movq qword [rbx + 0x78], xmm0
cmp eax, 2
jbe 0x1400f0512
nop word [rax + rax]
mov rax, qword [rsi + 0x98]
mov r9, qword [rbx + 0x58]
movzx eax, word [rax + rcx*2]
mov r10d, eax
sar ax, 0xf
and r10w, 0x7fff
and eax, 0x1a
mov word [r9 + r8 + 4], r10w
mov r9, qword [rbx + 0x70]
add r8, 0x30
mov byte [r9 + rcx], al
add rcx, 1
cmp ecx, dword [rbx + 0x78]
jb 0x1400f04d8
mov rax, qword [rbx + 0x70]
mov byte [rax + 1], 0x18
mov rax, qword [rbx + 0x70]
mov byte [rax], 8
mov eax, dword [rsi + 0x18]
test eax, eax
js 0x1400f0560
mov rax, qword [rbx + 0x10]
xor r15d, r15d
cmp qword [rsi + 0x88], rax
jae 0x1400f0549
mov r15d, 0xffff87bf
or edx, 5
mov rcx, rbx
call sym.mdb_txn_end
mov eax, r15d
add rsp, 0x38
pop rbx
pop rsi
pop rdi
pop rbp
pop r12
pop r13
pop r14
pop r15
ret
mov r15d, 0xffff87b5
jmp 0x1400f053e
mov rax, qword [rsi + 0x50]
mov rcx, qword [rax + 0x80]
mov rax, qword [rsi + 0x58]
mov rdx, qword [rax + 0x80]
mov eax, dword [rsi + 0x18]
shr eax, 0x19
cmp rcx, rdx
setb dl
xor rax, rdx
and eax, 1
mov rdi, qword [rsi + rax*8 + 0x50]
mov rax, qword [rdi + 0x80]
jmp 0x1400f03f3
mov rdx, qword [rsi + 0x50]
shr eax, 0x19
mov rcx, qword [rdx + 0x80]
mov rdx, qword [rsi + 0x58]
mov rdx, qword [rdx + 0x80]
cmp rcx, rdx
setb dl
xor rax, rdx
xor edx, edx
and eax, 1
mov rdi, qword [rsi + rax*8 + 0x50]
mov rax, qword [rdi + 0x80]
mov qword [rbx + 0x48], 0
mov qword [rbx + 0x18], rax
jmp 0x1400f0469
mov ecx, dword [rsi + 0xa8]
call qword [sym.imp.KERNEL32.dll_TlsGetValue]
mov rdi, rax
jmp 0x1400f0361
mov rdx, qword [rsi + 0xf8]
mov r8d, eax
mov rcx, rsi
call fcn.14016cfd0
mov r15d, eax
test eax, eax
je 0x1400f03e3
jmp 0x1400f0549
call qword [sym.imp.KERNEL32.dll_GetCurrentThreadId]
mov edx, dword [rsi + 0xe8]
mov r10, qword [rsi + 0xf0]
mov r13d, eax
test edx, edx
jne 0x1400f0656
mov dword [rsi + 0xe8], 1
mov qword [rsp + 0x28], r10
mov rcx, r10
mov edx, 0xffffffff
call qword [sym.imp.KERNEL32.dll_WaitForSingleObject]
mov r10, qword [rsp + 0x28]
test eax, eax
jne 0x1400f0740
mov r8d, dword [r12 + 0x10]
mov r9d, dword [rsi + 0x24]
xor eax, eax
test r8d, r8d
jne 0x1400f069c
jmp 0x1400f07b6
add eax, 1
cmp r8d, eax
je 0x1400f0773
mov edx, eax
lea rdi, [rdx + 1]
shl rdi, 6
add rdi, r12
mov ecx, dword [rdi + 8]
test ecx, ecx
jne 0x1400f0690
cmp eax, r9d
je 0x1400f07d9
mov rcx, rdx
shl rcx, 6
add rcx, r12
mov dword [rcx + 0x48], 0
mov qword [rcx + 0x40], 0xffffffffffffffff
mov dword [rcx + 0x4c], r13d
cmp eax, r8d
je 0x1400f07a0
shl rdx, 6
mov dword [rsi + 0x28], r8d
mov rcx, r10
lea r13, [r12 + rdx]
mov dword [r13 + 0x48], r14d
call qword [sym.imp.KERNEL32.dll_ReleaseMutex]
mov edx, 0x200000
test byte [rsi + 0x1a], 0x20
jne 0x1400f0390
mov ecx, dword [rsi + 0xa8]
mov rdx, rdi
call qword [sym.imp.KERNEL32.dll_TlsSetValue]
test eax, eax
jne 0x1400f0387
call qword [sym.imp.KERNEL32.dll_GetLastError]
mov r15d, eax
test eax, eax
je 0x1400f0387
mov dword [r13 + 0x48], 0
jmp 0x1400f0549
mov rdx, r10
mov r8d, eax
mov rcx, rsi
mov qword [rsp + 0x28], r10
call fcn.14016cfd0
mov r10, qword [rsp + 0x28]
test eax, eax
mov r15d, eax
je 0x1400f0676
jmp 0x1400f0549
mov r15d, 0xffff87c1
jmp 0x1400f0549
cmp r8d, r9d
je 0x1400f07d9
mov eax, r8d
lea rdi, [rax + 1]
shl rax, 6
add rax, r12
shl rdi, 6
mov dword [rax + 0x48], 0
add rdi, r12
mov qword [rax + 0x40], 0xffffffffffffffff
mov dword [rax + 0x4c], r13d
lea edx, [r8 + 1]
mov eax, r8d
mov dword [r12 + 0x10], edx
mov r8d, edx
mov edx, eax
jmp 0x1400f06df
test r9d, r9d
je 0x1400f07d9
mov dword [r12 + 0x48], 0
lea rdi, [r12 + 0x40]
mov qword [r12 + 0x40], 0xffffffffffffffff
mov dword [r12 + 0x4c], r13d
jmp 0x1400f07a0
mov rcx, r10
mov r15d, 0xffff87ba
call qword [sym.imp.KERNEL32.dll_ReleaseMutex]
jmp 0x1400f0549