Function at 0x1400fa568
Capabilities:
Validate payment card number using luhn algorithm

Disassembly:
mov rax, rsp
mov qword [rax + 0x20], rbx
push rbp
push rsi
push rdi
push r12
push r13
push r14
push r15
lea rbp, [rax - 0x78]
sub rsp, 0x140
movaps xmmword [rax - 0x48], xmm6
movaps xmmword [rax - 0x58], xmm7
movaps xmmword [rax - 0x68], xmm8
movaps xmmword [rax - 0x78], xmm9
movaps xmmword [rax - 0x88], xmm10
movaps xmmword [rax - 0x98], xmm12
mov rax, qword [0x140250b18]
xor rax, rsp
mov qword [rbp - 0x30], rax
mov r12, rcx
mov qword [rsp + 0x30], rcx
xor ecx, ecx
mov qword [rsp + 0x40], r8
xor r13d, r13d
mov qword [rsp + 0x58], rcx
xor r15d, r15d
mov qword [rsp + 0x50], r13
test byte [r12 + 0x1d], 2
mov r10, r8
mov r11, rdx
je 0x1400fa5fa
mov r13, qword [r10]
add r10, 8
mov qword [rsp + 0x50], r13
mov qword [rsp + 0x40], r10
mov byte [rsp + 0x21], 1
jmp 0x1400fa5fe
mov byte [rsp + 0x21], cl
movsx eax, byte [rdx]
test eax, eax
je 0x1400fb7ca
movsd xmm10, qword [0x140227d88]
xorps xmm9, xmm9
movsd xmm8, qword [0x140227db8]
movsd xmm12, qword [0x140227d50]
cmp eax, 0x25
je 0x1400fa668
mov r15, r11
inc r11
mov al, byte [r11]
test al, al
je 0x1400fa63e
cmp al, 0x25
jne 0x1400fa630
mov r8d, r11d
mov qword [rsp + 0x48], r11
sub r8d, r15d
mov rdx, r15
mov rcx, r12
call fcn.1400fb810
mov r11, qword [rsp + 0x48]
cmp byte [r11], 0
je 0x1400fb7ca
mov r10, qword [rsp + 0x40]
inc r11
mov qword [rsp + 0x48], r11
movsx ecx, byte [r11]
test ecx, ecx
je 0x1400fb7b5
and dword [rsp + 0x28], 0
xor sil, sil
xor dil, dil
mov byte [rsp + 0x23], sil
xor r14b, r14b
mov byte [rsp + 0x25], dil
xor bl, bl
mov byte [rsp + 0x22], sil
mov byte [rsp + 0x20], sil
or r12d, 0xffffffff
mov byte [rsp + 0x26], 0
cmp ecx, 0x2c
jg 0x1400fa7aa
je 0x1400fa7a2
mov edx, ecx
sub edx, 0x20
je 0x1400fa798
sub edx, 1
je 0x1400fa78b
sub edx, 2
je 0x1400fa77e
sub edx, 7
je 0x1400fa6ed
cmp edx, 1
jne 0x1400fa919
mov byte [rsp + 0x22], 0x2b
jmp 0x1400fa8de
cmp byte [rsp + 0x21], bl
je 0x1400fa72e
movsxd rdx, dword [r13 + 4]
cmp dword [r13], edx
jg 0x1400fa706
xor edx, edx
mov qword [rsp + 0x28], rdx
jmp 0x1400fa727
mov rax, qword [r13 + 8]
mov rcx, qword [rax + rdx*8]
lea eax, [rdx + 1]
mov dword [r13 + 4], eax
call fcn.14017ff90
mov r11, qword [rsp + 0x48]
mov rdx, rax
mov qword [rsp + 0x28], rax
mov r10, qword [rsp + 0x40]
jmp 0x1400fa73f
mov edx, dword [r10]
add r10, 8
mov qword [rsp + 0x28], rdx
mov qword [rsp + 0x40], r10
test edx, edx
jns 0x1400fa75b
xor eax, eax
mov byte [rsp + 0x20], 1
mov ecx, edx
neg ecx
cmp edx, 0x80000001
cmovge eax, ecx
mov dword [rsp + 0x28], eax
lea rax, [r11 + 1]
cmp byte [rax], 0x2e
je 0x1400fa8de
cmp byte [rax], 0x6c
je 0x1400fa8de
movsx ecx, byte [rax]
mov qword [rsp + 0x48], rax
jmp 0x1400fa919
mov dil, 1
mov byte [rsp + 0x25], dil
jmp 0x1400fa8de
mov sil, 1
mov byte [rsp + 0x23], sil
jmp 0x1400fa8de
mov byte [rsp + 0x22], 0x20
jmp 0x1400fa8de
mov r14b, 0x2c
jmp 0x1400fa8de
cmp ecx, 0x2d
je 0x1400fa8d9
cmp ecx, 0x2e
je 0x1400fa827
cmp ecx, 0x30
je 0x1400fa81d
jle 0x1400fa919
cmp ecx, 0x39
jg 0x1400fa8f3
inc r11
lea edx, [rcx - 0x30]
mov qword [rsp + 0x48], r11
movsx ecx, byte [r11]
cmp ecx, 0x30
jl 0x1400fa7ff
cmp ecx, 0x39
ja 0x1400fa7fa
lea edx, [rdx + rdx*4]
inc r11
lea edx, [rdx - 0x18]
lea edx, [rcx + rdx*2]
movsx ecx, byte [r11]
cmp ecx, 0x30
jge 0x1400fa7e0
mov qword [rsp + 0x48], r11
btr edx, 0x1f
mov dword [rsp + 0x28], edx
cmp ecx, 0x2e
je 0x1400fa815
cmp ecx, 0x6c
jne 0x1400fa919
dec r11
jmp 0x1400fa8de
mov byte [rsp + 0x26], 1
jmp 0x1400fa8de
inc r11
mov qword [rsp + 0x48], r11
movsx ecx, byte [r11]
cmp ecx, 0x2a
jne 0x1400fa8a7
cmp byte [rsp + 0x21], bl
je 0x1400fa870
movsxd rdx, dword [r13 + 4]
cmp dword [r13], edx
jg 0x1400fa84d
xor r12d, r12d
jmp 0x1400fa869
mov rax, qword [r13 + 8]
mov rcx, qword [rax + rdx*8]
lea eax, [rdx + 1]
mov dword [r13 + 4], eax
call fcn.14017ff90
mov r11, qword [rsp + 0x48]
mov r12, rax
mov r10, qword [rsp + 0x40]
jmp 0x1400fa87c
mov r12d, dword [r10]
add r10, 8
mov qword [rsp + 0x40], r10
test r12d, r12d
jns 0x1400fa896
mov ecx, r12d
or eax, 0xffffffff
neg ecx
cmp r12d, 0x80000001
cmovge eax, ecx
mov r12d, eax
inc r11
mov qword [rsp + 0x48], r11
movsx ecx, byte [r11]
jmp 0x1400fa80c
xor edx, edx
cmp ecx, 0x30
jl 0x1400fa8cd
cmp ecx, 0x39
ja 0x1400fa8c8
lea edx, [rdx + rdx*4]
inc r11
lea edx, [rdx - 0x18]
lea edx, [rcx + rdx*2]
movsx ecx, byte [r11]
cmp ecx, 0x30
jge 0x1400fa8ae
mov qword [rsp + 0x48], r11
btr edx, 0x1f
mov r12d, edx
jmp 0x1400fa80c
mov byte [rsp + 0x20], 1
inc r11
mov qword [rsp + 0x48], r11
movsx ecx, byte [r11]
test ecx, ecx
je 0x1400fa919
jmp 0x1400fa6a9
cmp ecx, 0x6c
jne 0x1400fa919
inc r11
mov bl, 1
mov qword [rsp + 0x48], r11
movsx ecx, byte [r11]
cmp ecx, 0x6c
jne 0x1400fa919
inc r11
mov bl, 2
mov qword [rsp + 0x48], r11
movsx ecx, byte [r11]
lea r11, [0x140217220]
mov r13b, 0x11
mov r9, r11
mov qword [rsp + 0x60], r11
mov byte [rsp + 0x24], r13b
mov rdx, r11
xor r8d, r8d
movsx eax, byte [rdx]
cmp ecx, eax
je 0x1400fa952
inc r8
lea rax, [0x1402172aa]
add rdx, 6
cmp rdx, rax
jl 0x1400fa936
jmp 0x1400fa968
lea rax, [r8 + r8*2]
lea r9, [r11 + rax*2]
mov r13b, byte [r9 + 3]
mov byte [rsp + 0x24], r13b
mov qword [rsp + 0x60], r9
movzx ecx, r13b
cmp ecx, 0xa
ja 0x1400fb205
cmp ecx, 9
jae 0x1400fb23c
test r13b, r13b
je 0x1400fb3ec
mov r14d, 3
cmp ecx, r14d
jbe 0x1400fad11
cmp ecx, 4
je 0x1400face9
jbe 0x1400fb7ca
cmp ecx, 6
jbe 0x1400fabaf
cmp ecx, 7
je 0x1400fab47
cmp ecx, 8
jne 0x1400fb7ca
cmp byte [rsp + 0x21], 0
je 0x1400faa58
mov r8, qword [rsp + 0x50]
movsxd rdx, dword [r8 + 4]
cmp dword [r8], edx
jg 0x1400fa9dd
xor ecx, ecx
jmp 0x1400fa9f6
mov rax, qword [r8 + 8]
mov rcx, qword [rax + rdx*8]
lea eax, [rdx + 1]
mov dl, 1
mov dword [r8 + 4], eax
call fcn.1401781fc
mov rcx, rax
mov ebx, 1
mov qword [rsp + 0x38], rbx
mov edx, ebx
test rcx, rcx
je 0x1400faa4f
mov al, byte [rcx]
mov r9d, 0xc0
mov byte [rbp - 0x80], al
inc rcx
and eax, r9d
cmp al, r9b
jne 0x1400faaec
mov r8b, byte [rcx]
mov al, r8b
and al, r9b
cmp al, 0x80
jne 0x1400faaec
inc ebx
mov byte [rbp + rdx - 0x80], r8b
inc rdx
mov qword [rsp + 0x38], rbx
inc rcx
cmp rdx, 4
jl 0x1400faa21
jmp 0x1400faaec
mov byte [rbp - 0x80], 0
jmp 0x1400faaec
mov eax, dword [r10]
add r10, 8
mov qword [rsp + 0x40], r10
cmp eax, 0x80
jae 0x1400faa72
mov ebx, 1
jmp 0x1400faae4
mov r8b, al
mov r9b, 0x3f
and r8b, r9b
mov r10b, 0x80
mov ecx, eax
add r8b, r10b
shr ecx, 6
cmp eax, 0x800
jae 0x1400faaa1
and cl, 0x1f
mov byte [rbp - 0x7f], r8b
sub cl, 0x40
mov ebx, 2
mov byte [rbp - 0x80], cl
jmp 0x1400faae7
and cl, r9b
mov edx, eax
shr edx, 0xc
add cl, r10b
cmp eax, 0x10000
jae 0x1400faac8
and dl, 0xf
mov byte [rbp - 0x7f], cl
sub dl, 0x20
mov byte [rbp - 0x7e], r8b
mov byte [rbp - 0x80], dl
mov ebx, r14d
jmp 0x1400faae7
shr eax, 0x12
and dl, r9b
and al, 7
mov byte [rbp - 0x7e], cl
sub al, 0x10
mov byte [rbp - 0x7d], r8b
add dl, r10b
mov ebx, 4
mov byte [rbp - 0x7f], dl
mov byte [rbp - 0x80], al
mov qword [rsp + 0x38], rbx
cmp r12d, 1
jle 0x1400fab3e
mov rcx, qword [rsp + 0x28]
mov rsi, qword [rsp + 0x30]
sub ecx, r12d
mov edx, ecx
inc ecx
mov qword [rsp + 0x28], rcx
cmp ecx, 1
jle 0x1400fab24
cmp byte [rsp + 0x20], 0
jne 0x1400fab24
mov r8b, 0x20
mov rcx, rsi
call fcn.1400fb888
and dword [rsp + 0x28], 0
lea edi, [r12 - 1]
mov r8d, ebx
lea rdx, [rbp - 0x80]
mov rcx, rsi
call fcn.1400fb810
sub rdi, 1
jne 0x1400fab29
lea r15, [rbp - 0x80]
jmp 0x1400fb3a6
mov byte [rbp - 0x80], 0x25
lea r15, [rbp - 0x80]
mov ebx, 1
mov rdi, qword [rsp + 0x28]
mov sil, byte [rsp + 0x20]
mov r12, qword [rsp + 0x30]
sub edi, ebx
mov qword [rsp + 0x28], rdi
test edi, edi
jle 0x1400fb76b
test sil, sil
jne 0x1400fab84
mov r8b, 0x20
mov edx, edi
mov rcx, r12
call fcn.1400fb888
mov r8d, ebx
mov rdx, r15
mov rcx, r12
call fcn.1400fb810
test sil, sil
je 0x1400fb779
mov edx, dword [rsp + 0x28]
mov r8b, 0x20
mov rcx, r12
call fcn.1400fb888
jmp 0x1400fb779
cmp byte [rsp + 0x21], 0
je 0x1400fabe7
mov r8, qword [rsp + 0x50]
movsxd rdx, dword [r8 + 4]
cmp dword [r8], edx
jg 0x1400fabc9
xor r15d, r15d
jmp 0x1400fabe2
mov rax, qword [r8 + 8]
mov rcx, qword [rax + rdx*8]
lea eax, [rdx + 1]
mov dl, 1
mov dword [r8 + 4], eax
call fcn.1401781fc
mov r15, rax
mov r13b, 5
jmp 0x1400fabf3
mov r15, qword [r10]
add r10, 8
mov qword [rsp + 0x40], r10
test r15, r15
jne 0x1400fac01
lea r15, [0x14021e2d9]
jmp 0x1400fac6e
cmp r13b, 6
jne 0x1400fac6e
mov rax, qword [rsp + 0x30]
cmp dword [rax + 0x18], 0
jne 0x1400fac69
cmp dword [rax + 0x14], 0
je 0x1400fac69
cmp dword [rsp + 0x28], 0
jne 0x1400fac69
test r12d, r12d
jns 0x1400fac69
cmp byte [rax + 0x1c], 0
jne 0x1400fac69
mov rcx, qword [rax]
mov rdx, r15
mov r12, rax
mov qword [rax + 8], r15
call fcn.1401524dc
mov rcx, r15
mov dword [r12 + 0x10], eax
call sub.api_ms_win_crt_string_l1_1_0.dll_strlen
or byte [r12 + 0x1d], 4
btr eax, 0x1f
mov rdi, qword [rsp + 0x28]
xor ebx, ebx
mov sil, byte [rsp + 0x20]
mov dword [r12 + 0x18], eax
jmp 0x1400fab63
mov qword [rsp + 0x58], r15
test r12d, r12d
js 0x1400facd6
test sil, sil
je 0x1400faca7
mov rbx, r15
jmp 0x1400fac9a
mov al, byte [rbx]
dec r12d
test al, al
je 0x1400fac9f
inc rbx
cmp al, 0xc0
jb 0x1400fac9a
jmp 0x1400fac92
inc rbx
mov al, byte [rbx]
and al, 0xc0
cmp al, 0x80
je 0x1400fac8f
test r12d, r12d
jg 0x1400fac7d
sub ebx, r15d
jmp 0x1400fb396
xor ebx, ebx
movsxd rcx, r12d
xor eax, eax
test r12d, r12d
jle 0x1400fab54
cmp byte [rax + r15], 0
je 0x1400fab54
inc ebx
inc rax
mov qword [rsp + 0x38], rbx
cmp rax, rcx
jl 0x1400facb7
jmp 0x1400fb39b
mov rcx, r15
call sub.api_ms_win_crt_string_l1_1_0.dll_strlen
btr eax, 0x1f
mov ebx, eax
jmp 0x1400fb396
cmp byte [rsp + 0x21], 0
jne 0x1400fad07
mov rax, qword [rsp + 0x30]
add r10, 8
mov qword [rsp + 0x40], r10
mov rcx, qword [r10 - 8]
mov eax, dword [rax + 0x18]
mov dword [rcx], eax
mov r12, qword [rsp + 0x30]
jmp 0x1400fb769
cmp byte [rsp + 0x21], 0
je 0x1400fad45
mov r8, qword [rsp + 0x50]
movsxd rdx, dword [r8 + 4]
cmp dword [r8], edx
jg 0x1400fad2c
movaps xmm6, xmm9
jmp 0x1400fad53
mov rax, qword [r8 + 8]
mov rcx, qword [rax + rdx*8]
lea eax, [rdx + 1]
mov dword [r8 + 4], eax
call fcn.140181aac
movaps xmm6, xmm0
jmp 0x1400fad53
movsd xmm6, qword [r10]
add r10, 8
mov qword [rsp + 0x40], r10
test r12d, r12d
jns 0x1400fad60
mov r12d, 6
jmp 0x1400fad6c
mov eax, 0x5f5e100
cmp r12d, eax
cmovg r12d, eax
comisd xmm9, xmm6
mov qword [rsp + 0x38], r12
jbe 0x1400fad87
xorps xmm6, xmmword [0x1401a0860]
mov bl, 0x2d
mov byte [rsp + 0x22], bl
jmp 0x1400fad8b
mov bl, byte [rsp + 0x22]
cmp r13b, r14b
jne 0x1400fad9d
test r12d, r12d
je 0x1400fad9d
dec r12d
mov qword [rsp + 0x38], r12
mov eax, 0xcccccccd
mov r8d, r12d
and r8d, 0xfff
mul r8d
mov eax, r8d
shr edx, 3
lea ecx, [rdx + rdx*4]
add ecx, ecx
sub eax, ecx
movsxd rcx, eax
lea rax, [0x140000000]
movsd xmm7, qword [rax + rcx*8 + 0x2172b0]
cmp r8d, 0xa
jb 0x1400fade5
mov eax, edx
mulsd xmm7, qword [0x140227d48]
sub rax, 1
jne 0x1400fadd7
cmp r13b, 1
jne 0x1400fae44
mov r8d, 8
movsd qword [rsp + 0x68], xmm6
lea rdx, [rsp + 0x68]
lea rcx, [rsp + 0x70]
call sub.VCRUNTIME140.dll_memcpy
mov rcx, qword [rsp + 0x70]
mov eax, 0x55555556
shr rcx, 0x34
and ecx, 0x7ff
sub ecx, 0x3ff
imul ecx
mov eax, edx
shr eax, 0x1f
add edx, eax
add edx, r12d
cmp edx, 0xf
jge 0x1400fae40
movaps xmm0, xmm6
mulsd xmm0, qword [0x140227d40]
addsd xmm7, xmm0
addsd xmm6, xmm7
movaps xmm0, xmm6
xor esi, esi
call fcn.140168364
test eax, eax
je 0x1400fae61
lea r15, [0x140220168]
mov ebx, r14d
jmp 0x1400fab54
comisd xmm6, xmm9
jbe 0x1400faf37
comisd xmm6, xmmword [0x140227e88]
mov eax, 0x15e
movaps xmm1, xmm10
jb 0x1400fae9f
cmp esi, eax
jg 0x1400fae9f
mulsd xmm1, qword [0x140227e88]
add esi, 0x64
movaps xmm0, xmm1
mulsd xmm0, qword [0x140227e88]
comisd xmm6, xmm0
jae 0x1400fae7f
movaps xmm0, xmm1
jmp 0x1400faeae
cmp esi, eax
jg 0x1400faebc
movaps xmm1, xmm0
add esi, 0xa
mulsd xmm0, qword [0x140227e60]
comisd xmm6, xmm0
jae 0x1400faea4
movaps xmm0, xmm1
jmp 0x1400faeca
cmp esi, eax
jg 0x1400faed5
movaps xmm1, xmm0
inc esi
mulsd xmm0, xmm8
comisd xmm6, xmm0
jae 0x1400faec1
divsd xmm6, xmm1
jmp 0x1400faee6
mulsd xmm6, qword [0x140227e48]
sub esi, 8
comisd xmm12, xmm6
ja 0x1400faedb
jmp 0x1400faef6
mulsd xmm6, xmm8
dec esi
comisd xmm10, xmm6
ja 0x1400faeef
cmp esi, eax
jle 0x1400faf37
xor eax, eax
mov byte [rbp - 0x80], bl
test bl, bl
lea rcx, [rbp - 0x80]
mov r8d, 4
lea rdx, [0x14022016c]
setne al
lea r15, [rbp - 0x80]
add rcx, rax
call sub.VCRUNTIME140.dll_memcpy
neg bl
sbb eax, eax
neg eax
lea ebx, [r14 + rax]
jmp 0x1400fab54
lea rdi, [rbp - 0x80]
mov eax, esi
cmp r13b, 1
je 0x1400faf95
addsd xmm6, xmm7
comisd xmm6, xmm8
movaps xmm0, xmm6
jb 0x1400faf59
mulsd xmm6, qword [0x140227d60]
inc esi
comisd xmm0, xmm8
cmovb esi, eax
cmp r13b, r14b
jne 0x1400faf95
cmp byte [rsp + 0x25], 0
mov rax, qword [rsp + 0x38]
sete r12b
cmp esi, 0xfffffffc
jl 0x1400faf8b
cmp esi, eax
jg 0x1400faf8b
sub eax, esi
mov r13b, 1
mov qword [rsp + 0x38], rax
jmp 0x1400faf8e
mov r13b, 2
mov byte [rsp + 0x24], r13b
jmp 0x1400faf9f
mov r12b, byte [rsp + 0x23]
mov rax, qword [rsp + 0x38]
xor ebx, ebx
movsxd rcx, eax
cmp r13b, 2
movsxd r13, dword [rsp + 0x28]
cmovne ebx, esi
xor eax, eax
test ebx, ebx
lea rdx, [r13 + 0xf]
cmovg eax, ebx
cdqe
add rax, rcx
add rdx, rax
cmp rdx, 0x46
jle 0x1400fafe4
mov rcx, qword [rsp + 0x30]
call fcn.14013f808
mov qword [rsp + 0x58], rax
mov rdi, rax
test rax, rax
je 0x1400fb7ca
movzx r8d, byte [rsp + 0x23]
mov rax, qword [rsp + 0x38]
mov r9b, byte [rsp + 0x22]
test eax, eax
mov qword [rsp + 0x68], rdi
setg r15b
lea edx, [r8 + r8*4]
or r15b, r8b
lea r14d, [rdx*2 + 0x10]
or r15b, byte [rsp + 0x25]
test r9b, r9b
je 0x1400fb01e
mov byte [rdi], r9b
inc rdi
test ebx, ebx
jns 0x1400fb02a
mov byte [rdi], 0x30
inc rdi
jmp 0x1400fb05c
test r14d, r14d
jg 0x1400fb033
mov al, 0x30
jmp 0x1400fb04d
cvttsd2si eax, xmm6
dec r14d
movd xmm0, eax
add al, 0x30
cvtdq2pd xmm0, xmm0
subsd xmm6, xmm0
mulsd xmm6, xmm8
mov byte [rdi], al
inc rdi
sub ebx, 1
jns 0x1400fb02a
mov rax, qword [rsp + 0x38]
test r15b, r15b
je 0x1400fb067
mov byte [rdi], 0x2e
inc rdi
add ebx, 1
jns 0x1400fb0c5
neg ebx
mov dl, 0x30
mov r8d, ebx
mov rcx, rdi
call sub.VCRUNTIME140.dll_memset
mov rax, qword [rsp + 0x38]
add rdi, rbx
mov r9b, byte [rsp + 0x22]
sub eax, ebx
mov r8b, byte [rsp + 0x23]
jmp 0x1400fb0c5
dec eax
mov qword [rsp + 0x38], rax
test r14d, r14d
jg 0x1400fb0a1
mov al, 0x30
jmp 0x1400fb0bb
cvttsd2si eax, xmm6
dec r14d
movd xmm0, eax
add al, 0x30
cvtdq2pd xmm0, xmm0
subsd xmm6, xmm0
mulsd xmm6, xmm8
mov byte [rdi], al
inc rdi
mov rax, qword [rsp + 0x38]
test eax, eax
jg 0x1400fb091
test r12b, r12b
je 0x1400fb103
test r15b, r15b
je 0x1400fb103
lea rax, [rdi - 1]
jmp 0x1400fb0e2
mov rdi, rax
mov byte [rax], 0
dec rax
cmp byte [rax], 0x30
je 0x1400fb0d9
lea rax, [rdi - 1]
cmp byte [rax], 0x2e
jne 0x1400fb103
test r8b, r8b
je 0x1400fb0fd
mov byte [rdi], 0x30
inc rdi
jmp 0x1400fb103
mov rdi, rax
mov byte [rax], 0
cmp byte [rsp + 0x24], 2
jne 0x1400fb189
mov r11, qword [rsp + 0x60]
lea rcx, str.0123456789ABCDEF0123456789abcdef
movzx eax, byte [r11 + 4]
mov al, byte [rax + rcx]
mov byte [rdi], al
test esi, esi
jns 0x1400fb130
mov byte [rdi + 1], 0x2d
add rdi, 2
neg esi
jmp 0x1400fb138
mov byte [rdi + 1], 0x2b
add rdi, 2
cmp esi, 0x64
jl 0x1400fb15b
mov eax, 0x51eb851f
imul esi
sar edx, 5
mov eax, edx
shr eax, 0x1f
add edx, eax
lea eax, [rdx + 0x30]
mov byte [rdi], al
inc rdi
imul eax, edx, 0xffffff9c
add esi, eax
mov eax, 0x66666667
imul esi
sar edx, 2
mov eax, edx
shr eax, 0x1f
add edx, eax
lea eax, [rdx + 0x30]
mov byte [rdi], al
mov al, dl
shl dl, 2
add al, dl
add al, al
sub sil, al
add sil, 0x30
mov byte [rdi + 1], sil
add rdi, 2
mov r15, qword [rsp + 0x68]
mov sil, byte [rsp + 0x20]
mov byte [rdi], 0
sub edi, r15d
cmp byte [rsp + 0x26], 0
mov ebx, edi
mov rdi, qword [rsp + 0x28]
je 0x1400fab5e
test sil, sil
jne 0x1400fab5e
cmp ebx, edi
jge 0x1400fab5e
mov edx, edi
sub edx, ebx
movsxd r8, edx
cmp r13, r8
jl 0x1400fb1e5
lea rcx, [r15 + r13]
sub r13, r8
inc r13
mov rax, rcx
sub rax, r8
mov al, byte [rax]
mov byte [rcx], al
dec rcx
sub r13, 1
jne 0x1400fb1d2
test edx, edx
je 0x1400fb1fe
xor ecx, ecx
mov r8d, edx
test r9b, r9b
mov dl, 0x30
setne cl
add rcx, r15
call sub.VCRUNTIME140.dll_memset
mov ebx, edi
jmp 0x1400fab5e
sub ecx, 0xb
je 0x1400fb733
sub ecx, 1
je 0x1400fb6a9
sub ecx, 1
je 0x1400fb3ea
sub ecx, 1
je 0x1400fb23c
sub ecx, 1
je 0x1400fb3ec
cmp ecx, 1
jne 0x1400fb7ca
jmp 0x1400fb3ef
mov eax, 0x22
cmp r13b, 0xe
lea r14d, [rax + 5]
cmove r14d, eax
cmp byte [rsp + 0x21], 0
je 0x1400fb282
mov r8, qword [rsp + 0x50]
movsxd rdx, dword [r8 + 4]
cmp dword [r8], edx
jg 0x1400fb267
xor r9d, r9d
jmp 0x1400fb296
mov rax, qword [r8 + 8]
mov rcx, qword [rax + rdx*8]
lea eax, [rdx + 1]
mov dl, 1
mov dword [r8 + 4], eax
call fcn.1401781fc
mov rdi, rax
jmp 0x1400fb28e
mov rdi, qword [r10]
add r10, 8
mov qword [rsp + 0x40], r10
mov r9, rdi
test rdi, rdi
jne 0x1400fb2ac
cmp r13b, 0xa
lea rax, str.NULL
lea rdi, str._NULL_
cmove rdi, rax
xor r8d, r8d
xor esi, esi
xor edx, edx
test r12d, r12d
je 0x1400fb303
mov r10b, byte [rsp + 0x23]
mov cl, byte [rdx + rdi]
test cl, cl
je 0x1400fb303
cmp cl, r14b
lea eax, [r8 + 1]
cmovne eax, r8d
mov r8d, eax
test r10b, r10b
je 0x1400fb2f8
and cl, 0xc0
cmp cl, 0xc0
jne 0x1400fb2f8
lea rcx, [rdi + 1]
add rcx, rdx
jmp 0x1400fb2f0
inc esi
inc rdx
inc rcx
mov al, byte [rcx]
and al, 0xc0
cmp al, 0x80
je 0x1400fb2e8
inc esi
inc rdx
sub r12d, 1
jne 0x1400fb2bd
test r9, r9
je 0x1400fb315
cmp r13b, 0xa
jne 0x1400fb315
mov ebx, 1
jmp 0x1400fb317
xor ebx, ebx
lea eax, [rsi + 3]
add eax, r8d
cmp eax, 0x46
jle 0x1400fb342
mov rcx, qword [rsp + 0x30]
movsxd rdx, eax
call fcn.14013f808
mov qword [rsp + 0x58], rax
mov r15, rax
test rax, rax
je 0x1400fb7ca
jmp 0x1400fb346
lea r15, [rbp - 0x80]
xor ecx, ecx
xor eax, eax
test ebx, ebx
je 0x1400fb356
lea ecx, [rax + 1]
mov byte [r15], r14b
mov eax, ecx
xor edx, edx
movsxd r9, esi
test esi, esi
jle 0x1400fb382
mov r8b, byte [rdx + rdi]
inc ecx
mov byte [rax + r15], r8b
inc rax
cmp r8b, r14b
jne 0x1400fb37a
inc ecx
mov byte [rax + r15], r8b
inc rax
inc rdx
cmp rdx, r9
jl 0x1400fb35f
test ebx, ebx
je 0x1400fb38f
inc ecx
mov byte [rax + r15], r14b
inc rax
mov byte [rax + r15], 0
mov ebx, ecx
mov qword [rsp + 0x38], rbx
cmp byte [rsp + 0x23], 0
je 0x1400fab54
mov rdi, qword [rsp + 0x28]
test edi, edi
jle 0x1400fab59
lea eax, [rbx - 1]
movsxd rdx, eax
test eax, eax
js 0x1400fab59
mov rbx, rdi
lea rax, [rdx + r15]
mov cl, byte [rax]
lea eax, [rbx + 1]
and cl, 0xc0
cmp cl, 0x80
cmovne eax, ebx
sub rdx, 1
mov ebx, eax
jns 0x1400fb3c4
mov rbx, qword [rsp + 0x38]
mov edi, eax
jmp 0x1400fab59
mov bl, 2
xor r14b, r14b
test byte [r9 + 2], 1
je 0x1400fb470
cmp byte [rsp + 0x21], 0
je 0x1400fb42f
mov r8, qword [rsp + 0x50]
movsxd rdx, dword [r8 + 4]
cmp dword [r8], edx
jg 0x1400fb416
xor ebx, ebx
mov cl, byte [rsp + 0x22]
jmp 0x1400fb4c9
mov rax, qword [r8 + 8]
mov rcx, qword [rax + rdx*8]
lea eax, [rdx + 1]
mov dword [r8 + 4], eax
call fcn.14017ff90
mov rbx, rax
jmp 0x1400fb450
add r10, 8
mov qword [rsp + 0x40], r10
test bl, bl
je 0x1400fb447
cmp bl, 2
jne 0x1400fb44c
mov rbx, qword [r10 - 8]
jmp 0x1400fb450
mov qword [rsp + 0x40], r10
movsxd rbx, dword [r10 - 8]
test rbx, rbx
jns 0x1400fb40d
movabs rax, 0x8000000000000000
cmp rbx, rax
jne 0x1400fb469
mov rbx, rax
jmp 0x1400fb46c
neg rbx
mov cl, 0x2d
jmp 0x1400fb4c5
cmp byte [rsp + 0x21], 0
je 0x1400fb4a2
mov r8, qword [rsp + 0x50]
movsxd rdx, dword [r8 + 4]
cmp dword [r8], edx
jg 0x1400fb489
xor ebx, ebx
jmp 0x1400fb4c3
mov rax, qword [r8 + 8]
mov rcx, qword [rax + rdx*8]
lea eax, [rdx + 1]
mov dword [r8 + 4], eax
call fcn.14017ff90
mov rbx, rax
jmp 0x1400fb4c3
add r10, 8
mov qword [rsp + 0x40], r10
test bl, bl
je 0x1400fb4ba
cmp bl, 2
jne 0x1400fb4bf
mov rbx, qword [r10 - 8]
jmp 0x1400fb4c3
mov qword [rsp + 0x40], r10
mov ebx, dword [r10 - 8]
xor cl, cl
mov byte [rsp + 0x22], cl
mov rax, rbx
neg rax
sbb sil, sil
and sil, dil
cmp byte [rsp + 0x26], 0
je 0x1400fb4f0
xor eax, eax
test cl, cl
mov ecx, dword [rsp + 0x28]
setne al
sub ecx, eax
cmp r12d, ecx
cmovl r12d, ecx
cmp r12d, 0x25
jge 0x1400fb501
mov edi, 0x46
lea r10, [rbp - 0x80]
jmp 0x1400fb53f
movsxd rdi, r12d
add rdi, 0xa
test r14b, r14b
je 0x1400fb521
mov eax, 0x55555556
imul r12d
mov eax, edx
shr eax, 0x1f
add eax, edx
cdqe
add rdi, rax
mov rcx, qword [rsp + 0x30]
mov rdx, rdi
call fcn.14013f808
mov qword [rsp + 0x58], rax
mov r10, rax
test rax, rax
je 0x1400fb7ca
lea eax, [rdi - 1]
movsxd r15, eax
add r15, r10
cmp r13b, 0xf
jne 0x1400fb5ba
movabs r9, 0xcccccccccccccccd
mov r8d, ebx
mov rax, r9
mul rbx
mov rcx, rdx
shr rcx, 3
lea eax, [rcx + rcx*4]
add eax, eax
sub r8d, eax
cmp r8d, 4
jge 0x1400fb590
mov rax, r9
mul rcx
shr rdx, 3
lea rax, [rdx + rdx*4]
add rax, rax
sub rcx, rax
cmp rcx, 1
jne 0x1400fb593
xor r8d, r8d
lea eax, [r8 + r8]
movsxd rcx, eax
lea rdx, [0x140000000]
mov al, byte [rcx + rdx + 0x217631]
mov cl, byte [rcx + rdx + 0x217630]
mov byte [r15 - 1], al
sub r15, 2
mov byte [r15], cl
mov r11, qword [rsp + 0x60]
lea rax, str.0123456789ABCDEF0123456789abcdef
movzx ecx, byte [r11 + 4]
movzx r8d, byte [r11 + 1]
add rcx, rax
xor edx, edx
mov rax, rbx
div r8
dec r15
mov rbx, rax
mov al, byte [rcx + rdx]
mov byte [r15], al
test rbx, rbx
jne 0x1400fb5d3
mov eax, r10d
lea ecx, [rdi - 1]
sub eax, r15d
add ecx, eax
cmp ecx, r12d
jge 0x1400fb612
sub r12d, ecx
mov eax, r12d
add ecx, r12d
dec r15
mov byte [r15], 0x30
sub rax, 1
jne 0x1400fb605
test r14b, r14b
je 0x1400fb664
dec ecx
mov eax, 0x55555556
imul ecx
mov eax, edx
shr eax, 0x1f
add edx, eax
movsxd r8, edx
sub r15, r8
lea eax, [rdx + rdx*2]
sub ecx, eax
xor edx, edx
lea r9d, [rcx + 1]
jmp 0x1400fb65f
lea rax, [rdx + r8]
mov cl, byte [rax + r15]
mov byte [rdx + r15], cl
sub r9d, 1
jne 0x1400fb65c
inc rdx
mov r9d, 3
dec r8
mov byte [rdx + r15], r14b
inc rdx
test r8, r8
jg 0x1400fb63a
mov al, byte [rsp + 0x22]
test al, al
je 0x1400fb672
dec r15
mov byte [r15], al
test sil, sil
je 0x1400fb69b
movzx eax, byte [r11 + 5]
test al, al
je 0x1400fb69b
lea rcx, [0x140216a94]
add rax, rcx
jmp 0x1400fb695
dec r15
inc rax
mov byte [r15], cl
mov cl, byte [rax]
test cl, cl
jne 0x1400fb68c
sub r10d, r15d
lea ebx, [rdi - 1]
add ebx, r10d
jmp 0x1400fab54
mov r12, qword [rsp + 0x30]
test byte [r12 + 0x1d], 1
je 0x1400fb7ca
mov rsi, qword [r10]
lea r14, [r10 + 0x10]
movsxd rax, dword [r14 - 8]
imul rdi, rax, 0x70
mov rbx, qword [rdi + rsi + 0x10]
test rbx, rbx
je 0x1400fb703
mov rcx, rbx
call sub.api_ms_win_crt_string_l1_1_0.dll_strlen
and eax, 0x3fffffff
mov rdx, rbx
mov r8d, eax
mov rcx, r12
call fcn.1400fb810
mov r8d, 1
lea rdx, [0x140220180]
mov rcx, r12
call fcn.1400fb810
mov rbx, qword [rdi + rsi + 0x18]
test rbx, rbx
jne 0x1400fb711
xor eax, eax
jmp 0x1400fb71e
mov rcx, rbx
call sub.api_ms_win_crt_string_l1_1_0.dll_strlen
and eax, 0x3fffffff
mov r8d, eax
mov rdx, rbx
mov rcx, r12
call fcn.1400fb810
mov qword [rsp + 0x40], r14
jmp 0x1400fb769
mov r12, qword [rsp + 0x30]
test byte [r12 + 0x1d], 1
je 0x1400fb7ca
mov rdx, qword [r10]
add r10, 8
mov qword [rsp + 0x40], r10
test rdx, rdx
je 0x1400fb769
mov r8d, dword [rdx + 8]
test r8d, r8d
je 0x1400fb769
mov rdx, qword [rdx]
mov rcx, r12
call fcn.1400fb810
xor ebx, ebx
mov r8d, ebx
mov rdx, r15
mov rcx, r12
call fcn.1400fb810
mov rcx, qword [rsp + 0x58]
test rcx, rcx
je 0x1400fb796
mov rdx, rcx
mov rcx, qword [r12]
call fcn.140152380
xor eax, eax
mov qword [rsp + 0x58], rax
mov r11, qword [rsp + 0x48]
inc r11
movsx eax, byte [r11]
test eax, eax
je 0x1400fb7ca
mov r10, qword [rsp + 0x40]
mov r13, qword [rsp + 0x50]
jmp 0x1400fa628
mov r8d, 1
lea rdx, [0x140220164]
mov rcx, r12
call fcn.1400fb810
mov rcx, qword [rbp - 0x30]
xor rcx, rsp
call fcn.14019eac0
lea r11, [rsp + 0x140]
mov rbx, qword [r11 + 0x58]
movaps xmm6, xmmword [r11 - 0x10]
movaps xmm7, xmmword [r11 - 0x20]
movaps xmm8, xmmword [r11 - 0x30]
movaps xmm9, xmmword [r11 - 0x40]
movaps xmm10, xmmword [r11 - 0x50]
movaps xmm12, xmmword [r11 - 0x60]
mov rsp, r11
pop r15
pop r14
pop r13
pop r12
pop rdi
pop rsi
pop rbp
ret