Function at 0x140031fe4
Capabilities:
Encode data using xor

Disassembly:
push rbp
push rbx
push rsi
push rdi
push r12
push r13
push r14
push r15
sub rsp, 0x28
lea rbp, [rsp + 0x20]
mov rdi, rdx
xor r14d, r14d
xor edx, edx
lea r8d, [r14 + 0x58]
mov rbx, rcx
call sub.msvcrt.dll_memset
movsxd rdx, dword [rdi + 4]
xor eax, eax
test edx, edx
jle 0x14003202e
mov r8, qword [rdi + 8]
cmp byte [r8 + rax], 0
jle 0x140032026
inc r14d
inc rax
cmp rax, rdx
jl 0x14003201c
mov dword [rbx + 4], edx
mov dword [rbx + 8], r14d
mov eax, dword [rdi]
mov dword [rbx], eax
test r14d, r14d
jle 0x14003258e
mov edx, dword [rdi + 4]
mov rcx, qword [rdi + 8]
mov r8d, r14d
call fcn.140031d2c
movsxd rsi, r14d
movabs r15, 0xffffffffffffff0
mov rcx, rsi
mov r12, rax
shl rcx, 3
lea rax, [rcx + 0xf]
cmp rax, rcx
ja 0x140032074
mov rax, r15
and rax, 0xfffffffffffffff0
call fcn.1400101f0
sub rsp, rax
lea r10, [rsp + 0x20]
mov qword [rbp + 0x50], r10
test r12, r12
jne 0x14003209e
mov rcx, rbx
call fcn.140031f80
or eax, 0xffffffff
jmp 0x140032590
xor r9d, r9d
xor r8d, r8d
test r14d, r14d
jle 0x140032125
mov ecx, dword [r12 + r8*4]
rol ecx, 0x10
mov eax, ecx
mov edx, ecx
shl ecx, 8
shl eax, 8
shr edx, 8
xor edx, eax
and edx, 0xff00ff
xor edx, ecx
mov ecx, edx
mov eax, edx
shl edx, 4
shr ecx, 4
shl eax, 4
xor ecx, eax
and ecx, 0xf0f0f0f
xor ecx, edx
mov eax, ecx
mov edx, ecx
shl eax, 2
shr edx, 2
xor edx, eax
mov eax, ecx
shl eax, 2
and edx, 0x33333333
xor edx, eax
mov ecx, edx
shr ecx, 1
lea eax, [rdx + rdx]
xor ecx, eax
lea eax, [rdx + rdx]
and ecx, 0x55555555
xor ecx, eax
movsxd rax, r9d
inc r9d
mov dword [r12 + r8*4], ecx
lea rcx, [r12 + rax*4]
mov qword [r10 + r8*8], rcx
inc r8
cmp r8, rsi
jl 0x1400320a9
lea r9, [0x140031f60]
mov r8d, 8
mov rdx, rsi
mov rcx, r10
call sub.msvcrt.dll_qsort
mov r13, rsi
shl r13, 2
lea rax, [r13 + 0xf]
cmp rax, r13
ja 0x140032150
mov rax, r15
and rax, 0xfffffffffffffff0
call fcn.1400101f0
sub rsp, rax
mov rcx, r13
lea r15, [rsp + 0x20]
call sub.msvcrt.dll_malloc
xor edx, edx
xor ecx, ecx
mov qword [rbx + 0x20], rax
test r14d, r14d
jle 0x1400321bb
mov r8, qword [rbp + 0x50]
mov rax, qword [r8 + rcx*8]
inc rcx
sub rax, r12
sar rax, 2
cdqe
mov dword [r15 + rax*4], edx
inc edx
cmp rcx, rsi
jl 0x14003217a
test r14d, r14d
jle 0x1400321bb
mov r9, r12
mov rdx, r15
sub r9, r15
movsxd r8, dword [rdx]
mov eax, dword [r9 + rdx]
mov rcx, qword [rbx + 0x20]
mov dword [rcx + r8*4], eax
lea rdx, [rdx + 4]
dec rsi
jne 0x1400321a3
mov rcx, r12
call sub.msvcrt.dll_free
mov r8, r15
mov edx, r14d
mov rcx, rdi
call fcn.140031984
mov rcx, r13
mov qword [rbx + 0x18], rax
call sub.msvcrt.dll_malloc
xor r10d, r10d
xor edx, edx
mov qword [rbx + 0x28], rax
lea r13d, [r10 + 1]
cmp dword [rdi + 4], edx
jle 0x14003221c
xor r8d, r8d
mov r9, r15
mov rax, qword [rdi + 8]
cmp byte [r8 + rax], 0
jle 0x140032211
movsxd rcx, dword [r9]
mov rax, qword [rbx + 0x28]
add r10d, r13d
mov dword [rax + rcx*4], edx
add r9, 4
add edx, r13d
add r8, r13
cmp edx, dword [rdi + 4]
jl 0x1400321f5
movsxd rcx, r10d
call sub.msvcrt.dll_malloc
and dword [rbx + 0x44], 0
xor esi, esi
mov qword [rbx + 0x30], rax
xor r9d, r9d
cmp dword [rdi + 4], esi
jle 0x1400322a6
xor r8d, r8d
mov rax, qword [rdi + 8]
mov dl, byte [r8 + rax]
test dl, dl
jle 0x14003226a
movsxd rcx, dword [r15]
mov rax, qword [rbx + 0x30]
add esi, r13d
mov byte [rcx + rax], dl
mov rax, qword [rdi + 8]
add r15, 4
movsx ecx, byte [r8 + rax]
mov eax, dword [rbx + 0x44]
cmp ecx, eax
cmovg eax, ecx
mov dword [rbx + 0x44], eax
add r9d, r13d
add r8, r13
cmp r9d, dword [rdi + 4]
jl 0x140032239
cmp esi, r13d
jne 0x1400322a6
cmp dword [rbx + 0x44], r13d
jne 0x1400322a6
mov edx, 4
mov dword [rbx + 0x40], r13d
lea ecx, [rdx - 2]
call sub.msvcrt.dll_calloc
mov qword [rbx + 0x38], rax
mov dword [rax + 4], r13d
mov rax, qword [rbx + 0x38]
mov dword [rax], r13d
jmp 0x14003258e
mov eax, dword [rbx + 8]
xor ecx, ecx
test eax, eax
je 0x1400322b6
add ecx, r13d
shr eax, 1
jne 0x1400322af
add ecx, 0xfffffffc
mov eax, 5
mov edi, r13d
cmp ecx, eax
cmovl ecx, eax
mov eax, 8
cmp ecx, eax
lea edx, [rax - 4]
cmovg ecx, eax
shl edi, cl
mov dword [rbx + 0x40], ecx
movsxd rcx, edi
call sub.msvcrt.dll_calloc
xor r8d, r8d
movsxd r12, esi
mov qword [rbx + 0x38], rax
test esi, esi
jle 0x1400323cc
mov r9d, r13d
mov rax, qword [rbx + 0x30]
mov r14d, dword [rbx + 0x40]
movsx r15d, byte [r8 + rax]
cmp r15d, r14d
jg 0x1400323bd
mov rax, qword [rbx + 0x20]
sub r14d, r15d
xor r11d, r11d
mov ecx, dword [rax + r8*4]
rol ecx, 0x10
mov edx, ecx
mov eax, ecx
shl ecx, 8
shl eax, 8
shr edx, 8
xor edx, eax
and edx, 0xff00ff
xor edx, ecx
mov ecx, edx
mov eax, edx
shl edx, 4
shl eax, 4
shr ecx, 4
xor ecx, eax
and ecx, 0xf0f0f0f
xor ecx, edx
mov edx, ecx
mov eax, ecx
shl eax, 2
shr edx, 2
xor edx, eax
mov eax, ecx
mov cl, r14b
shl eax, 2
and edx, 0x33333333
xor edx, eax
mov r10d, edx
shr r10d, 1
lea eax, [rdx + rdx]
xor r10d, eax
lea eax, [rdx + rdx]
and r10d, 0x55555555
xor r10d, eax
mov eax, r13d
shl eax, cl
test eax, eax
jle 0x1400323bd
mov rax, qword [rbx + 0x30]
mov cl, byte [r8 + rax]
mov eax, r11d
add r11d, r13d
shl eax, cl
mov ecx, eax
mov rax, qword [rbx + 0x38]
or rcx, r10
mov dword [rax + rcx*4], r9d
mov rax, qword [rbx + 0x30]
mov ecx, dword [rbx + 0x40]
movsx edx, byte [r8 + rax]
sub ecx, edx
mov edx, r13d
shl edx, cl
cmp r11d, edx
jl 0x140032388
add r8, r13
add r9d, r13d
cmp r8, r12
jl 0x1400322f5
xor r10d, r10d
mov ecx, 0x1f
mov r13d, 0xfffffffe
sub ecx, dword [rbx + 0x40]
xor r15d, r15d
xor r14d, r14d
shl r13d, cl
mov dword [rbp + 0x50], r10d
test edi, edi
jle 0x14003258e
xor r8d, r8d
xor r11d, r11d
mov qword [rbp + 0x68], r8
mov ecx, 0x20
mov r9d, r14d
sub ecx, dword [rbx + 0x40]
shl r9d, cl
mov edx, r9d
rol edx, 0x10
mov eax, edx
mov ecx, edx
mov dword [rbp + 0x58], edx
shl eax, 8
shr ecx, 8
xor ecx, eax
mov eax, edx
shl eax, 8
and ecx, 0xff00ff
xor ecx, eax
mov edx, ecx
mov eax, ecx
shl ecx, 4
shr edx, 4
shl eax, 4
xor edx, eax
and edx, 0xf0f0f0f
xor edx, ecx
mov eax, edx
mov ecx, edx
shl eax, 2
shr ecx, 2
xor ecx, eax
mov eax, edx
shl eax, 2
and ecx, 0x33333333
xor ecx, eax
mov rax, qword [rbx + 0x38]
mov qword [rbp + 0x60], rax
lea eax, [rcx + rcx]
mov edx, ecx
shr rdx, 1
add ecx, ecx
xor rdx, rax
mov rax, qword [rbp + 0x60]
and edx, 0x55555555
xor rdx, rcx
cmp dword [rax + rdx*4], 0
jne 0x140032582
lea ecx, [r15 + 1]
cmp ecx, esi
jge 0x1400324b5
mov rdx, qword [rbx + 0x20]
add rdx, 4
lea rdx, [rdx + r8*4]
cmp dword [rdx], r9d
ja 0x1400324b1
inc ecx
inc r15d
inc r8
add rdx, 4
cmp ecx, esi
jl 0x14003249c
mov qword [rbp + 0x68], r8
cmp r11, r12
jge 0x1400324df
mov rax, qword [rbx + 0x20]
lea rcx, [rax + r11*4]
mov eax, dword [rcx]
and eax, r13d
cmp r9d, eax
jb 0x1400324db
inc r11
inc r10d
add rcx, 4
cmp r11, r12
jl 0x1400324c2
mov dword [rbp + 0x50], r10d
mov ecx, dword [rbp + 0x58]
mov eax, 0x7fff
mov r9d, esi
sub r9d, r10d
cmp r15d, eax
mov edx, ecx
mov r10d, r15d
cmova r10d, eax
cmp r9d, eax
cmova r9d, eax
mov eax, ecx
shr edx, 8
shl eax, 8
shl ecx, 8
or r10d, 0xffff0000
xor edx, eax
shl r10d, 0xf
and edx, 0xff00ff
or r10d, r9d
xor edx, ecx
mov eax, edx
mov ecx, edx
shl edx, 4
shl eax, 4
shr ecx, 4
xor ecx, eax
and ecx, 0xf0f0f0f
xor ecx, edx
mov eax, ecx
mov r8d, ecx
shl eax, 2
shr r8d, 2
xor r8d, eax
mov eax, ecx
shl eax, 2
and r8d, 0x33333333
xor r8d, eax
mov edx, r8d
lea eax, [r8 + r8]
shr rdx, 1
lea ecx, [r8 + r8]
mov r8, qword [rbp + 0x68]
xor rdx, rax
mov rax, qword [rbp + 0x60]
and edx, 0x55555555
xor rdx, rcx
mov dword [rax + rdx*4], r10d
mov r10d, dword [rbp + 0x50]
inc r14d
cmp r14d, edi
jl 0x1400323fc
xor eax, eax
lea rsp, [rbp + 8]
pop r15
pop r14
pop r13
pop r12
pop rdi
pop rsi
pop rbx
pop rbp
ret