Function at 0x100148a0
Capabilities:
Generate random numbers via rtlgenrandom
Generate random numbers via winapi
Get thread local storage value
Set thread local storage value

Disassembly:
push ebp
mov ebp, esp
push ebx
push edi
push esi
and esp, 0xfffffff0
sub esp, 0x60
mov esi, dword [0x10071010]
mov ebx, ecx
test esi, esi
je 0x10014a49
dec esi
push esi
call sub.kernel32.dll_TlsGetValue
cmp eax, 1
ja 0x10014a41
je 0x10014a3f
test ebx, ebx
je 0x100148e6
mov edi, dword [ebx]
mov dword [ebx], 0
test edi, edi
jne 0x100149ca
xorps xmm0, xmm0
lea ebx, [esp + 0x20]
movups xmmword [esp + 0x30], xmm0
movups xmmword [esp + 0x20], xmm0
push 2
push 0x20
push ebx
push 0
call sub.bcrypt.dll_BCryptGenRandom
cmp eax, 0xc0000000
jb 0x1001491c
mov edi, eax
push 0x20
push ebx
call sub.advapi32.dll_SystemFunction036
test al, al
je 0x10014a7e
movups xmm0, xmmword [esp + 0x20]
movups xmm1, xmmword [esp + 0x30]
mov eax, dword [0x100f2e44]
movaps xmmword [esp + 0x10], xmm0
movaps xmmword [esp + 0x40], xmm1
movzx eax, byte [eax]
sub esp, 0xc
mov dword [esp + 8], 0x158
mov dword [esp + 4], 0
call sym.std::sys::alloc::windows::process_heap_alloc::hc2bfe060f1f208f4
add esp, 0xc
test eax, eax
je 0x10014a72
mov edi, eax
mov dword [eax], 1
mov dword [eax + 4], 1
add eax, 8
push 0x100
push 0
push eax
call sub.msvcrt.dll_memset
add esp, 0xc
movaps xmm0, xmmword [esp + 0x10]
mov dword [edi + 0x108], 0x40
movaps xmm1, xmmword [0x100ed6b0]
movups xmmword [edi + 0x110], xmm0
movaps xmm0, xmmword [esp + 0x40]
movups xmmword [edi + 0x120], xmm0
xorps xmm0, xmm0
movsd qword [edi + 0x130], xmm0
movsd qword [edi + 0x138], xmm0
movups xmmword [edi + 0x140], xmm1
mov dword [edi + 0x150], 0
mov eax, dword [0x100f2e44]
movzx eax, byte [eax]
sub esp, 0xc
mov dword [esp + 8], 8
mov dword [esp + 4], 0
call sym.std::sys::alloc::windows::process_heap_alloc::hc2bfe060f1f208f4
add esp, 0xc
test eax, eax
je 0x10014a69
mov dword [eax], edi
mov dword [eax + 4], esi
push esi
mov ebx, eax
call sub.kernel32.dll_TlsGetValue
mov edi, eax
mov dword [esp + 0x10], ebx
push ebx
push esi
call sub.kernel32.dll_TlsSetValue
test edi, edi
je 0x10014a39
mov eax, dword [edi]
dec dword [eax]
jne 0x10014a2a
dec dword [eax + 4]
jne 0x10014a2a
mov ecx, dword [0x100f2e2c]
push eax
push 0
push dword [ecx]
call sub.kernel32.dll_HeapFree
mov eax, dword [0x100f2e2c]
push edi
push 0
push dword [eax]
call sub.kernel32.dll_HeapFree
mov eax, dword [esp + 0x10]
jmp 0x10014a41
xor eax, eax
lea esp, [ebp - 0xc]
pop esi
pop edi
pop ebx
pop ebp
ret
push 0x10071010
call sym.std::sys::thread_local::key::windows::LazyKey::init::h0bd71fcfbfc5b9bd
add esp, 4
mov esi, eax
push esi
call sub.kernel32.dll_TlsGetValue
cmp eax, 1
jbe 0x100148cc
jmp 0x10014a41
push 8
push 4
call sym.alloc::alloc::handle_alloc_error::h3ca6a9ac69c8e3db
push 0x158
push 8
call sym.alloc::alloc::handle_alloc_error::h3ca6a9ac69c8e3db
mov eax, dword [0x100f2e44]
movzx eax, byte [eax]
sub esp, 0xc
mov dword [esp + 8], 4
mov dword [esp + 4], 0
call sym.std::sys::alloc::windows::process_heap_alloc::hc2bfe060f1f208f4
add esp, 0xc
test eax, eax
jne 0x10014aae
push 4
push 4
call sym.alloc::alloc::handle_alloc_error::h3ca6a9ac69c8e3db
and edi, 0x7fffffff
mov edx, esp
lea ecx, [esp + 8]
mov dword [eax], edi
mov dword [esp], eax
mov dword [esp + 8], edx
mov dword [esp + 0x20], 0x100ed8a0
mov dword [esp + 0x24], 1
mov dword [esp + 0x30], 0
mov dword [esp + 0x28], ecx
mov dword [esp + 4], 0x100eda90
mov dword [esp + 0xc], sym.__LT_rand_core..error..Error_u20_as_u20_core..fmt..Display_GT_::fmt::hd28909e1aa4ae190
mov dword [esp + 0x2c], 1
push 0x100ed910
push ebx
call sym.core::panicking::panic_fmt::hced28cb7137b21e1
nop
nop
nop
nop
nop
nop
nop