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

Disassembly:
mov qword [rsp + 8], rbx
mov qword [rsp + 0x10], rbp
mov qword [rsp + 0x18], rsi
push rdi
push r14
push r15
sub rsp, 0x80
mov rdi, r8
mov r14, rdx
mov rsi, rcx
mov rbx, qword [rdx]
mov ecx, dword [0x1406782c0]
call qword [sym.imp.KERNEL32.dll_TlsGetValue]
test rax, rax
je 0x140031b82
nop dword [rax + rax]
cmp qword [rax], rbx
je 0x140031cfe
mov rax, qword [rax + 0x10]
test rax, rax
jne 0x140031b70
mov qword [rsp + 0x58], rdi
lea rdx, [rdi + 0x58]
mov ecx, 0xd0
call fcn.140023ae0
mov rbx, rax
xor r15d, r15d
mov qword [rax + 0x20], r15
lea rax, [fcn.140031de0]
mov qword [rbx + 0x28], rax
mov qword [rbx], r15
mov qword [rbx + 8], r15
mov qword [rbx + 0x10], r15
mov qword [rbx + 0x18], r15
mov dword [rbx + 0x30], r15d
movups xmm0, xmmword [rdi]
movups xmmword [rbx + 0x38], xmm0
mov qword [rbx + 0x48], r15
mov qword [rbx + 0x50], r15
mov rax, qword [rdi + 0x10]
mov qword [rbx + 0x48], rax
mov rax, qword [rdi + 0x18]
mov qword [rbx + 0x50], rax
mov qword [rdi + 0x10], r15
mov qword [rdi + 0x18], r15
mov rax, qword [rdi + 0x20]
mov qword [rbx + 0x58], rax
movups xmm0, xmmword [rdi + 0x28]
movups xmmword [rbx + 0x60], xmm0
movsd xmm1, qword [rdi + 0x38]
movsd qword [rbx + 0x70], xmm1
mov eax, dword [rdi + 0x40]
mov dword [rbx + 0x78], eax
movups xmm0, xmmword [rdi + 0x48]
movups xmmword [rbx + 0x80], xmm0
movups xmm0, xmmword [rdi + 0x58]
movups xmmword [rbx + 0x90], xmm0
mov qword [rbx + 0xa0], r15
mov qword [rbx + 0xa8], r15
mov rax, qword [rdi + 0x68]
mov qword [rbx + 0xa0], rax
mov rax, qword [rdi + 0x70]
mov qword [rbx + 0xa8], rax
mov qword [rdi + 0x68], r15
mov qword [rdi + 0x70], r15
movups xmm0, xmmword [rdi + 0x78]
movups xmmword [rbx + 0xb0], xmm0
mov rax, qword [rdi + 0x88]
mov qword [rbx + 0xc0], rax
mov r8, rbx
mov rdx, r14
mov rcx, rsi
call fcn.140026770
mov qword [rsp + 0x68], r15
mov qword [rsp + 0x60], r15
test al, al
je 0x140031d6e
mov rax, qword [r14]
mov qword [rsp + 0x40], rax
mov ecx, dword [0x1406782c0]
call qword [sym.imp.KERNEL32.dll_TlsGetValue]
mov qword [rsp + 0x50], rax
lea rax, [rsp + 0x40]
mov qword [rsp + 0x48], rax
lea rdx, [rsp + 0x40]
mov ecx, dword [0x1406782c0]
call qword [sym.imp.KERNEL32.dll_TlsSetValue]
nop
mov rsi, qword [rsi + 0x30]
mov qword [rsp + 0x20], rsi
mov rdi, qword [r14]
mov qword [rsp + 0x28], rdi
xor r9d, r9d
lea r8, [rsp + 0x30]
mov rdx, rbx
mov rcx, rsi
call fcn.140031de0
nop
lea rcx, [rdi + 0x38]
call qword [sym.imp.KERNEL32.dll_EnterCriticalSection]
mov rax, qword [rdi + 0x68]
test rax, rax
je 0x140031d2e
mov rcx, qword [rdi + 0x80]
test rcx, rcx
je 0x140031d17
mov qword [rcx + 0x20], rax
jmp 0x140031d1b
cmp qword [rax + 8], 0
je 0x140031b82
mov rdx, rdi
mov rcx, rdi
call fcn.140031f80
nop
jmp 0x140031d6e
mov qword [rdi + 0x78], rax
mov rax, qword [rdi + 0x70]
mov qword [rdi + 0x80], rax
mov qword [rdi + 0x68], r15
mov qword [rdi + 0x70], r15
mov rbx, qword [rdi + 0x78]
test rbx, rbx
setne al
mov byte [rdi + 0x60], al
lea rcx, [rdi + 0x38]
call qword [sym.imp.KERNEL32.dll_LeaveCriticalSection]
test rbx, rbx
je 0x140031d5c
lock inc dword [rsi + 0x30]
mov rdx, qword [rsp + 0x28]
mov rcx, rsi
call fcn.140024a90
nop
mov rdx, qword [rsp + 0x50]
mov ecx, dword [0x1406782c0]
call qword [sym.imp.KERNEL32.dll_TlsSetValue]
nop
lea r11, [rsp + 0x80]
mov rbx, qword [r11 + 0x20]
mov rbp, qword [r11 + 0x28]
mov rsi, qword [r11 + 0x30]
mov rsp, r11
pop r15
pop r14
pop rdi
ret