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

Disassembly:
mov qword [rsp + 0x18], rbx
mov qword [rsp + 8], rcx
push rbp
push rsi
push rdi
push r12
push r13
push r14
push r15
sub rsp, 0x30
mov r15, qword [rcx]
xor r14d, r14d
xor al, al
mov qword [rsp + 0x20], r15
mov byte [rsp + 0x78], al
mov esi, r14d
mov byte [rsp + 0x88], sil
mov ebp, r8d
lea ebx, [r14 + 1]
mov r12, rdx
cmp r15, rdx
jae 0x1400fc970
movzx eax, byte [r15]
cmp al, 0x2d
je 0x1400fc6f9
mov rdi, r15
cmp al, 0x2b
jne 0x1400fc716
cmp al, 0x2d
lea rdi, [r15 + 1]
sete byte [rsp + 0x88]
mov qword [rsp + 0x20], rdi
mov r15, rdi
cmp rdi, r12
je 0x1400fc970
cmp byte [r15], 0x2e
je 0x1400fc746
lea rcx, [rsp + 0x20]
call fcn.1400fc990
mov r15, qword [rsp + 0x20]
mov esi, eax
cmp r15, rdi
je 0x1400fc970
cmp eax, 0x7fff
jle 0x1400fc743
mov byte [rsp + 0x78], bl
jmp 0x1400fc746
shl esi, 0x10
cmp r15, r12
jae 0x1400fc7c6
cmp byte [r15], 0x2e
jne 0x1400fc7c6
inc r15
cmp r15, r12
jae 0x1400fc7c6
movabs r8, 0x100003601
lea r9, [0x1402aa080]
nop word [rax + rax]
movzx ecx, byte [r15]
cmp cl, 0x20
ja 0x1400fc77f
bt r8, rcx
jb 0x1400fc7c6
cmp cl, 0x80
jae 0x1400fc7c6
mov rax, rcx
and eax, 0x7f
movsx edx, byte [rax + r9]
cmp dl, 9
ja 0x1400fc7c6
cmp ebx, 0xccccccc
jge 0x1400fc7be
cmp r14d, 0xccccccc
jge 0x1400fc7be
lea ecx, [r14 + r14*4]
lea r14d, [rdx + rcx*2]
test esi, esi
jne 0x1400fc7b9
test ebp, ebp
jle 0x1400fc7b9
dec ebp
jmp 0x1400fc7be
lea ebx, [rbx + rbx*4]
add ebx, ebx
inc r15
cmp r15, r12
jb 0x1400fc770
lea r13, [r15 + 1]
cmp r13, r12
jae 0x1400fc866
movzx eax, byte [r15]
sub al, 0x45
test al, 0xdf
jne 0x1400fc866
mov r8d, 0xa
mov qword [rsp + 0x20], r13
mov rdx, r12
lea rcx, [rsp + 0x20]
mov r15, r13
call fcn.1400fc580
mov rcx, qword [rsp + 0x20]
cmp rcx, r13
jne 0x1400fc80a
xor eax, eax
jmp 0x1400fc840
cmp rcx, r12
jae 0x1400fc83d
cmp byte [rcx], 0x23
jne 0x1400fc83d
inc rcx
mov r8d, eax
mov qword [rsp + 0x20], rcx
mov rdi, rcx
lea rcx, [rsp + 0x20]
mov rdx, r12
call fcn.1400fc580
mov rcx, qword [rsp + 0x20]
cmp rcx, rdi
jne 0x1400fc83d
xor eax, eax
jmp 0x1400fc840
mov r15, rcx
cmp r13, r15
je 0x1400fc970
cmp eax, 0x3e8
jle 0x1400fc854
mov al, 1
jmp 0x1400fc86b
cmp eax, 0xfffffc18
jge 0x1400fc864
movzx eax, byte [rsp + 0x78]
mov cl, 1
jmp 0x1400fc86d
add ebp, eax
movzx eax, byte [rsp + 0x78]
xor cl, cl
mov rdx, qword [rsp + 0x70]
mov qword [rdx], r15
test esi, esi
jne 0x1400fc882
test r14d, r14d
je 0x1400fc970
test al, al
jne 0x1400fc95a
test cl, cl
jne 0x1400fc970
test ebp, ebp
jle 0x1400fc8e5
nop word [rax + rax]
cmp esi, 0xccccccc
jge 0x1400fc95a
lea esi, [rsi + rsi*4]
add esi, esi
cmp r14d, 0xccccccc
jl 0x1400fc8d8
cmp ebx, 1
je 0x1400fc95a
mov eax, 0x66666667
imul ebx
mov ebx, edx
sar ebx, 2
mov eax, ebx
shr eax, 0x1f
add ebx, eax
jmp 0x1400fc8df
lea r14d, [r14 + r14*4]
add r14d, r14d
dec ebp
test ebp, ebp
jg 0x1400fc8a0
jns 0x1400fc938
nop word [rax + rax]
mov eax, 0x66666667
imul esi
mov esi, edx
sar esi, 2
mov eax, esi
shr eax, 0x1f
add esi, eax
cmp ebx, 0xccccccc
jge 0x1400fc912
lea ebx, [rbx + rbx*4]
add ebx, ebx
jmp 0x1400fc92a
mov eax, 0x66666667
imul r14d
mov r14d, edx
sar r14d, 2
mov eax, r14d
shr eax, 0x1f
add r14d, eax
test esi, esi
jne 0x1400fc933
test r14d, r14d
je 0x1400fc970
add ebp, 1
js 0x1400fc8f0
test r14d, r14d
je 0x1400fc95f
mov edx, ebx
mov ecx, r14d
call fcn.1400c05a0
add esi, eax
mov eax, esi
neg eax
cmp byte [rsp + 0x88], 0
cmove eax, esi
jmp 0x1400fc972
mov esi, 0x7fffffff
mov eax, esi
neg eax
cmp byte [rsp + 0x88], 0
cmove eax, esi
jmp 0x1400fc972
xor eax, eax
mov rbx, qword [rsp + 0x80]
add rsp, 0x30
pop r15
pop r14
pop r13
pop r12
pop rdi
pop rsi
pop rbp
ret