Function at 0x14016c800
Capabilities:
Encode data using xor
Hash data using fnv

Disassembly:
push rbx
push rsi
push rdi
push r12
push r13
push r14
push r15
sub rsp, 0xf0
mov rax, qword [0x1403b9868]
xor rax, rsp
mov qword [rsp + 0xe8], rax
mov r12, r8
mov qword [rsp + 0x50], r8
mov rsi, rdx
mov r14, rcx
mov qword [rsp + 0x40], rcx
mov qword [rsp + 0x48], rcx
mov qword [rsp + 0x60], rdx
mov qword [rsp + 0x38], r8
xor ebx, ebx
mov dword [rsp + 0x30], ebx
mov rax, qword [rcx]
call qword [rax + reloc.WS2_32.dll_recv]
test al, al
je 0x14016ca7b
xorps xmm0, xmm0
movups xmmword [rsp + 0x68], xmm0
mov r12d, listen
mov qword [rsp + 0x78], r12
mov qword [rsp + 0x80], reloc.WS2_32.dll_ntohs
movsd xmm0, qword [str.bind_address]
movsd qword [rsp + 0x68], xmm0
mov r15d, dword [0x1402c9000]
mov dword [rsp + 0x70], r15d
mov byte [rsp + 0x74], bl
movabs rdx, 0xcbf29ce484222325
mov ecx, ebx
movabs r13, 0x100000001b3
nop
movzx eax, byte [rsp + rcx + 0x68]
xor rdx, rax
imul rdx, r13
inc rcx
cmp rcx, r12
jb 0x14016c8b0
mov rcx, qword [rsi + 0x30]
and rcx, rdx
add rcx, rcx
mov rax, qword [rsi + 0x18]
mov rdi, qword [rax + rcx*8 + 8]
cmp rdi, qword [rsi + 8]
je 0x14016c91c
mov r14, qword [rax + rcx*8]
lea rdx, [rdi + 0x10]
cmp qword [rdi + 0x28], 0x10
jb 0x14016c8f0
mov rdx, qword [rdi + 0x10]
lea rcx, [rsp + 0x68]
cmp r12, qword [rdi + 0x20]
jne 0x14016c90e
mov r8, r12
call fcn.1402829c0
test eax, eax
jne 0x14016c90e
mov r14, qword [rsp + 0x40]
jmp 0x14016c91f
cmp rdi, r14
jne 0x14016ca72
mov r14, qword [rsp + 0x40]
mov rdi, rbx
test rdi, rdi
je 0x14016c94d
cmp rdi, qword [rsi + 8]
je 0x14016c94d
lea r8, [rdi + 0x30]
lea rcx, [rsi + 0x40]
lea rdx, [rsp + 0x58]
call fcn.1400852c0
mov rax, qword [rsp + 0x58]
cmp rax, qword [rsi + 0x48]
je 0x14016c94d
mov rax, qword [rax + 0x30]
jmp 0x14016c950
mov rax, rbx
test rax, rax
je 0x14016ca2f
xorps xmm0, xmm0
movups xmmword [rsp + 0x68], xmm0
mov qword [rsp + 0x78], r12
mov qword [rsp + 0x80], reloc.WS2_32.dll_ntohs
movsd xmm0, qword [str.bind_address]
movsd qword [rsp + 0x68], xmm0
mov dword [rsp + 0x70], r15d
mov byte [rsp + 0x74], 0
lea rdx, [rsp + 0x68]
mov rcx, rsi
call fcn.14016b160
mov rcx, qword [rax + 8]
test rcx, rcx
je 0x14016d118
mov dword [rsp + 0x20], 1
lea r9, vtable.type_info.0
lea r8, vtable.type_info.0
xor edx, edx
call fcn.140282844
mov r8, qword [rax + 0x28]
test r8, r8
jne 0x14016c9ce
mov r8, qword [rax + 0x18]
lea rcx, [r14 + 0x28]
cmp rcx, r8
je 0x14016c9ee
mov rdx, r8
cmp qword [r8 + 0x18], 0x10
jb 0x14016c9e4
mov rdx, qword [r8]
mov r8, qword [r8 + 0x10]
call fcn.140062960
nop
mov rdx, qword [rsp + 0x80]
cmp rdx, 0x10
jb 0x14016ca2f
inc rdx
mov rcx, qword [rsp + 0x68]
mov rax, rcx
cmp rdx, 0x1000
jb 0x14016ca29
add rdx, 0x27
mov rcx, qword [rcx - 8]
sub rax, rcx
add rax, 0xfffffffffffffff8
cmp rax, 0x1f
ja 0x14016d160
call fcn.140280300
nop
movabs r14, 0xcbf29ce484222325
mov r15, qword [rsp + 0x40]
jmp 0x14016cc16
mov rdi, qword [rdi + 8]
jmp 0x14016c8e1
xorps xmm0, xmm0
movups xmmword [rsp + 0x68], xmm0
mov qword [rsp + 0x78], reloc.WS2_32.dll_ntohl
mov qword [rsp + 0x80], reloc.WS2_32.dll_ntohs
movsd xmm0, qword [0x1402c8f90]
movsd qword [rsp + 0x68], xmm0
mov eax, dword [0x1402c8f98]
mov dword [rsp + 0x70], eax
movzx eax, word [0x1402c8f9c]
mov word [rsp + 0x74], ax
mov byte [rsp + 0x76], bl
movabs r14, 0xcbf29ce484222325
mov rdx, r14
mov rcx, rbx
movabs r13, 0x100000001b3
nop word [rax + rax]
movzx eax, byte [rsp + rcx + 0x68]
xor rdx, rax
imul rdx, r13
inc rcx
cmp rcx, 0xe
jb 0x14016cae0
mov rcx, qword [rsi + 0x30]
and rcx, rdx
add rcx, rcx
mov rax, qword [rsi + 0x18]
mov rdi, qword [rax + rcx*8 + 8]
mov r15, qword [rsi + 8]
cmp rdi, r15
je 0x14016cb60
mov r14, qword [rax + rcx*8]
lea rdx, [rdi + 0x10]
cmp qword [rdi + 0x28], 0x10
jb 0x14016cb24
mov rdx, qword [rdi + 0x10]
cmp qword [rdi + 0x20], 0xe
jne 0x14016cb3f
mov r8d, reloc.WS2_32.dll_ntohl
lea rcx, [rsp + 0x68]
call fcn.1402829c0
test eax, eax
je 0x14016cb4a
cmp rdi, r14
je 0x14016cb56
mov rdi, qword [rdi + 8]
jmp 0x14016cb15
movabs r14, 0xcbf29ce484222325
jmp 0x14016cb63
movabs r14, 0xcbf29ce484222325
mov rdi, rbx
test rdi, rdi
je 0x14016d10d
cmp rdi, r15
je 0x14016d10d
lea r8, [rdi + 0x30]
lea rcx, [rsi + 0x40]
lea rdx, [rsp + 0x38]
call fcn.1400852c0
mov rax, qword [rsp + 0x38]
cmp rax, qword [rsi + 0x48]
je 0x14016d10d
mov rcx, qword [rax + 0x20]
test rcx, rcx
je 0x14016d166
mov dword [rsp + 0x20], 1
lea r9, vtable.type_info.0
lea r8, vtable.type_info.0
xor edx, edx
call fcn.140282844
mov rcx, rax
mov rax, qword [rax + 0x28]
test rax, rax
jne 0x14016cbd0
mov rax, qword [rcx + 0x18]
mov rdx, qword [rax]
mov rax, qword [rax + 8]
sub rax, rdx
sar rax, 5
cmp rax, 1
jbe 0x14016cbfd
call fcn.1400636f0
mov dword [r12], reloc.WS2_32.dll_shutdown
mov qword [r12 + 8], rax
mov r15, qword [rsp + 0x40]
jmp 0x14016cc10
test rax, rax
je 0x14016cbe4
mov r15, qword [rsp + 0x40]
lea rcx, [r15 + 0x28]
call fcn.14016b130
mov r12d, listen
xorps xmm0, xmm0
movups xmmword [rsp + 0x88], xmm0
mov qword [rsp + 0x98], 6
mov qword [rsp + 0xa0], reloc.WS2_32.dll_ntohs
mov eax, dword [str.status]
mov dword [rsp + 0x88], eax
movzx eax, word [0x1402c900c]
mov word [rsp + 0x8c], ax
mov byte [rsp + 0x8e], 0
mov rcx, r14
mov rdx, rbx
nop dword [rax]
nop word [rax + rax]
movzx eax, byte [rsp + rdx + 0x88]
xor rcx, rax
imul rcx, r13
inc rdx
cmp rdx, 6
jb 0x14016cc70
and rcx, qword [rsi + 0x30]
add rcx, rcx
mov rax, qword [rsi + 0x18]
mov r8, qword [rax + rcx*8 + 8]
mov r10, qword [rsi + 8]
cmp r8, r10
je 0x14016ccfc
mov r9, qword [rax + rcx*8]
lea rdx, [r8 + 0x10]
cmp qword [r8 + 0x28], 0x10
jb 0x14016ccb4
mov rdx, qword [r8 + 0x10]
cmp qword [r8 + 0x20], 6
jne 0x14016ccf1
mov rcx, rbx
lea r11, [rsp + 0x88]
nop word [rax + rax]
movzx eax, byte [r11 + rcx]
inc rcx
cmp al, byte [rdx + rcx - 1]
jne 0x14016cce8
cmp rcx, 6
jne 0x14016ccd0
mov eax, ebx
jmp 0x14016cced
sbb eax, eax
or eax, 1
test eax, eax
je 0x14016ccff
cmp r8, r9
je 0x14016ccfc
mov r8, qword [r8 + 8]
jmp 0x14016cca5
mov r8, rbx
test r8, r8
je 0x14016cd2c
cmp r8, r10
je 0x14016cd2c
add r8, 0x30
lea rcx, [rsi + 0x40]
lea rdx, [rsp + 0x38]
call fcn.1400852c0
mov rax, qword [rsp + 0x38]
cmp rax, qword [rsi + 0x48]
je 0x14016cd2c
mov rax, qword [rax + 0x30]
jmp 0x14016cd2f
mov rax, rbx
test rax, rax
setne al
mov byte [r15 + 0x79], al
mov rax, qword [r15]
mov rcx, r15
call qword [rax + reloc.WS2_32.dll_recv]
xorps xmm0, xmm0
movups xmmword [rsp + 0x68], xmm0
test al, al
je 0x14016cd9e
mov qword [rsp + 0x78], 0xa
mov qword [rsp + 0x80], reloc.WS2_32.dll_ntohs
movsd xmm0, qword [str.relay_only]
movsd qword [rsp + 0x68], xmm0
movzx eax, word [0x1402c9018]
mov word [rsp + 0x70], ax
mov byte [rsp + 0x72], 0
lea rdx, [rsp + 0x68]
mov rcx, rsi
call fcn.14016d5b0
test rax, rax
setne al
mov byte [r15 + 0x7a], al
jmp 0x14016cfec
mov edx, 0x20
lea rcx, [rsp + 0x68]
call fcn.1400626a0
mov qword [rsp + 0x68], rax
mov qword [rsp + 0x78], shutdown
mov qword [rsp + 0x80], 0x1f
movups xmm0, xmmword [str.max_connect_attempts]
movups xmmword [rax], xmm0
mov ecx, dword [0x1402c9030]
mov dword [rax + 0x10], ecx
mov byte [rax + 0x14], 0
lea rdx, [rsp + 0x68]
mov rcx, rsi
call fcn.14016b160
mov rcx, rax
call fcn.14016a800
mov edi, dword [rax]
mov rdx, qword [rsp + 0x80]
cmp rdx, 0x10
jb 0x14016ce35
inc rdx
mov rcx, qword [rsp + 0x68]
mov rax, rcx
cmp rdx, 0x1000
jb 0x14016ce30
add rdx, 0x27
mov rcx, qword [rcx - 8]
sub rax, rcx
add rax, 0xfffffffffffffff8
cmp rax, 0x1f
ja 0x14016d1b5
call fcn.140280300
test edi, edi
jne 0x14016ce4f
call fcn.1400636f0
mov rcx, qword [rsp + 0x50]
mov dword [rcx], reloc.WS2_32.dll_shutdown
mov qword [rcx + 8], rax
jmp 0x14016ce53
mov dword [r15 + 0x7c], edi
xorps xmm0, xmm0
movups xmmword [rsp + 0x68], xmm0
mov qword [rsp + 0x78], reloc.WS2_32.dll_ntohs
mov qword [rsp + 0x80], reloc.WS2_32.dll_ntohs
movsd xmm0, qword [str.reconnect_delay]
movsd qword [rsp + 0x68], xmm0
mov eax, dword [0x1402c9040]
mov dword [rsp + 0x70], eax
movzx eax, word [0x1402c9044]
mov word [rsp + 0x74], ax
movzx eax, byte [0x1402c9046]
mov byte [rsp + 0x76], al
mov byte [rsp + 0x77], 0
lea rdx, [rsp + 0x68]
mov rcx, rsi
call fcn.14016b160
mov rcx, rax
call fcn.14016a800
mov ecx, dword [rax]
mov dword [r15 + 0x80], ecx
mov rdx, qword [rsp + 0x80]
cmp rdx, 0x10
jb 0x14016cf02
inc rdx
mov rcx, qword [rsp + 0x68]
mov rax, rcx
cmp rdx, 0x1000
jb 0x14016cefd
add rdx, 0x27
mov rcx, qword [rcx - 8]
sub rax, rcx
add rax, 0xfffffffffffffff8
cmp rax, 0x1f
ja 0x14016d1b5
call fcn.140280300
xorps xmm0, xmm0
movups xmmword [rsp + 0x68], xmm0
mov qword [rsp + 0x78], r12
mov qword [rsp + 0x80], reloc.WS2_32.dll_ntohs
movsd xmm0, qword [str.no_reconnect]
movsd qword [rsp + 0x68], xmm0
mov r9d, dword [0x1402c9050]
mov dword [rsp + 0x70], r9d
mov byte [rsp + 0x74], 0
mov rdx, r14
mov rcx, rbx
movzx eax, byte [rsp + rcx + 0x68]
xor rdx, rax
imul rdx, r13
inc rcx
cmp rcx, 0xc
jb 0x14016cf40
mov rcx, qword [rsi + 0x30]
and rcx, rdx
add rcx, rcx
mov rax, qword [rsi + 0x18]
mov r8, qword [rax + rcx*8 + 8]
mov r11, qword [rsi + 8]
cmp r8, r11
je 0x14016cfac
mov rdx, qword [rax + rcx*8]
mov r10, qword [rsp + 0x68]
nop word [rax + rax]
lea rcx, [r8 + 0x10]
cmp qword [r8 + 0x28], 0x10
jb 0x14016cf8f
mov rcx, qword [r8 + 0x10]
cmp qword [r8 + 0x20], 0xc
jne 0x14016cfa1
cmp r10, qword [rcx]
jne 0x14016cfa1
cmp r9d, dword [rcx + 8]
je 0x14016cfaf
cmp r8, rdx
je 0x14016cfac
mov r8, qword [r8 + 8]
jmp 0x14016cf80
mov r8, rbx
test r8, r8
je 0x14016cfdc
cmp r8, r11
je 0x14016cfdc
add r8, 0x30
lea rcx, [rsi + 0x40]
lea rdx, [rsp + 0x38]
call fcn.1400852c0
mov rax, qword [rsp + 0x38]
cmp rax, qword [rsi + 0x48]
je 0x14016cfdc
mov rax, qword [rax + 0x30]
jmp 0x14016cfdf
mov rax, rbx
test rax, rax
setne al
mov byte [r15 + 0x84], al
mov word [rsp + 0x76], bx
mov qword [rsp + 0x78], reloc.WS2_32.dll_listen
mov qword [rsp + 0x80], reloc.WS2_32.dll_ntohs
movsd xmm0, qword [str.gateway_ports]
movsd qword [rsp + 0x68], xmm0
mov r10d, dword [0x1402c9060]
mov dword [rsp + 0x70], r10d
movzx r11d, byte [reloc.WS2_32.dll_WSAStartup]
mov byte [rsp + 0x74], r11b
mov byte [rsp + 0x75], 0
mov rcx, rbx
nop word [rax + rax]
movzx eax, byte [rsp + rcx + 0x68]
xor r14, rax
imul r14, r13
inc rcx
cmp rcx, 0xd
jb 0x14016d040
mov rcx, qword [rsi + 0x30]
and rcx, r14
add rcx, rcx
mov rax, qword [rsi + 0x18]
mov r8, qword [rax + rcx*8 + 8]
mov rdi, qword [rsi + 8]
cmp r8, rdi
je 0x14016d0b2
mov rdx, qword [rax + rcx*8]
mov r9, qword [rsp + 0x68]
nop word [rax + rax]
lea rcx, [r8 + 0x10]
cmp qword [r8 + 0x28], 0x10
jb 0x14016d08f
mov rcx, qword [r8 + 0x10]
cmp qword [r8 + 0x20], 0xd
jne 0x14016d0a7
cmp r9, qword [rcx]
jne 0x14016d0a7
cmp r10d, dword [rcx + 8]
jne 0x14016d0a7
cmp r11b, byte [rcx + 0xc]
je 0x14016d0b5
cmp r8, rdx
je 0x14016d0b2
mov r8, qword [r8 + 8]
jmp 0x14016d080
mov r8, rbx
test r8, r8
je 0x14016d0e0
cmp r8, rdi
je 0x14016d0e0
add r8, 0x30
lea rcx, [rsi + 0x40]
lea rdx, [rsp + 0x38]
call fcn.1400852c0
mov rax, qword [rsp + 0x38]
cmp rax, qword [rsi + 0x48]
je 0x14016d0e0
mov rbx, qword [rax + 0x30]
test rbx, rbx
setne al
mov byte [r15 + 0x7b], al
mov rcx, qword [rsp + 0xe8]
xor rcx, rsp
call fcn.1402806f0
add rsp, 0xf0
pop r15
pop r14
pop r13
pop r12
pop rdi
pop rsi
pop rbx
ret
lea rcx, [rsp + 0x68]
call fcn.140086420
nop
mov rcx, qword [rax]
test rcx, rcx
jne 0x14016d13a
lea rdx, [0x1402c36e2]
lea rcx, [rsp + 0xa8]
call fcn.140073060
nop
or ebx, 4
jmp 0x14016d153
call fcn.1400928e0
mov rdx, rax
lea rcx, [rsp + 0xc8]
call fcn.1400512c0
nop
or ebx, 8
mov dword [rsp + 0x30], ebx
mov rcx, rax
call fcn.1400863a0
nop
call fcn.1402874fc
nop
mov rcx, qword [rax + 0x18]
test rcx, rcx
jne 0x14016d18e
lea rdx, [0x1402c36e2]
lea rcx, [rsp + 0xc8]
call fcn.140073060
nop
mov dword [rsp + 0x30], 1
jmp 0x14016d1ac
call fcn.1400928e0
mov rdx, rax
lea rcx, [rsp + 0xa8]
call fcn.1400512c0
nop
mov dword [rsp + 0x30], 2
mov rcx, rax
call fcn.1400863a0
nop
call fcn.1402874fc
int3