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

Disassembly:
push rbp
push rbx
lea rbp, [rsp - 0x4f]
sub rsp, 0xa8
mov rax, qword [0x14011e770]
xor rax, rsp
mov qword [rbp + 0x27], rax
mov rbx, rcx
mov rax, 0xffffffffffffffff
inc rax
cmp byte [rdx + rax], 0
jne 0x14002bf27
cmp rax, 0x14
je 0x14002bf40
mov eax, 1
jmp 0x14002c436
lea rcx, [rbp - 0x19]
sub rcx, rdx
nop word [rax + rax]
movzx eax, byte [rdx]
mov byte [rcx + rdx], al
lea rdx, [rdx + 1]
test al, al
jne 0x14002bf50
movzx r8d, byte [rbp - 0x19]
lea r9, [rbp - 0x19]
test r8b, r8b
je 0x14002bf9b
nop dword [rax]
movzx edx, r8b
lea r9, [r9 + 1]
sub r8b, 0x61
cmp r8b, 0x19
lea eax, [rdx - 0x20]
movzx ecx, al
cmova ecx, edx
mov byte [r9 - 1], cl
movzx r8d, byte [r9]
test r8b, r8b
jne 0x14002bf70
movzx r8d, byte [rbp - 0x19]
movsx ecx, r8b
call qword [sym.imp.api_ms_win_crt_string_l1_1_0.dll_isalpha]
test eax, eax
je 0x14002c476
movsx ecx, byte [rbp - 0x18]
call qword [sym.imp.api_ms_win_crt_string_l1_1_0.dll_isalpha]
test eax, eax
je 0x14002c476
movsx ecx, byte [rbp - 0x17]
call qword [sym.imp.api_ms_win_crt_string_l1_1_0.dll_isalpha]
test eax, eax
je 0x14002c476
movsx ecx, byte [rbp - 0x16]
call qword [sym.imp.api_ms_win_crt_string_l1_1_0.dll_isdigit]
test eax, eax
je 0x14002c46f
movsx ecx, byte [rbp - 0x15]
call qword [sym.imp.api_ms_win_crt_string_l1_1_0.dll_isdigit]
test eax, eax
je 0x14002c46f
movzx eax, byte [rbp - 0x19]
mov byte [rbp - 0x35], al
movzx eax, byte [rbp - 0x18]
mov qword [rsp + 0xc0], rsi
movsx esi, byte [rbp - 0x16]
mov byte [rbp - 0x34], al
movzx eax, byte [rbp - 0x17]
mov byte [rbp - 0x33], al
movsxd rax, dword [rbx + 8]
mov qword [rsp + 0xc8], rdi
mov qword [rsp + 0x98], r14
movsx r14d, byte [rbp - 0x15]
mov byte [rbp - 0x32], sil
mov byte [rbp - 0x31], r14b
mov byte [rbp - 0x30], 0
test eax, eax
jle 0x14002c083
mov r10, qword [rbx + 0x10]
xor edi, edi
mov r9d, edi
mov r11, rax
nop dword [rax + rax]
mov rax, qword [r10]
lea r8, [rbp - 0x35]
sub r8, rax
nop word [rax + rax]
movzx edx, byte [rax]
movzx ecx, byte [rax + r8]
sub edx, ecx
jne 0x14002c073
inc rax
test ecx, ecx
jne 0x14002c060
test edx, edx
je 0x14002c08d
inc r9
add r10, 8
cmp r9, r11
jl 0x14002c050
mov eax, 4
jmp 0x14002c41e
cmp byte [rbp - 0x14], 0x2d
mov dword [rbp - 0x35], esi
mov dword [rbp - 0x39], r14d
jne 0x14002c468
cmp byte [rbp - 0xb], 0x2d
jne 0x14002c468
movsx ecx, byte [rbp - 0x13]
call qword [sym.imp.api_ms_win_crt_string_l1_1_0.dll_isdigit]
test eax, eax
je 0x14002c461
movsx ecx, byte [rbp - 0x12]
call qword [sym.imp.api_ms_win_crt_string_l1_1_0.dll_isdigit]
test eax, eax
je 0x14002c461
movsx eax, byte [rbp - 0x13]
mov ecx, 0x47
sub ecx, eax
movsx eax, byte [rbp - 0x12]
lea r8d, [rcx + rcx*4]
add r8d, r8d
sub r8d, eax
mov eax, 0x51eb851f
imul r8d
sar edx, 5
mov eax, edx
shr eax, 0x1f
add edx, eax
imul eax, edx, 0x64
sub r8d, eax
movsx eax, byte [rbp - 0x11]
add eax, 0xffffffbf
imul r9d, r8d, 0x65
cmp eax, 0x19
ja case.0x14002c124.67
lea rdx, [0x140000000]
cdqe
mov ecx, dword [rdx + rax*4 + 0x2c480]
add rcx, rdx
jmp rcx
mov edi, 1
jmp case.0x14002c124.65
mov edi, 2
jmp case.0x14002c124.65
mov edi, 3
jmp case.0x14002c124.65
mov edi, 4
jmp case.0x14002c124.65
mov edi, 5
jmp case.0x14002c124.65
mov edi, 6
jmp case.0x14002c124.65
mov edi, 7
jmp case.0x14002c124.65
mov edi, 8
jmp case.0x14002c124.65
mov edi, 9
jmp case.0x14002c124.65
mov edi, 0xa
jmp case.0x14002c124.65
mov edi, 0xb
movsx ecx, byte [rbp - 0x10]
lea eax, [rcx - 0x31]
cmp al, 8
ja 0x14002c181
lea edx, [rcx - 0x30]
jmp 0x14002c19b
cmp cl, 0x30
jne 0x14002c18d
mov edx, 0xa
jmp 0x14002c1a7
lea eax, [rcx - 0x41]
cmp al, 0x14
ja 0x14002c453
lea edx, [rcx - 0x36]
lea eax, [rdx - 1]
cmp eax, 0x1e
ja 0x14002c453
movsx r14d, byte [rbp - 0xc]
mov qword [rsp + 0xd0], r12
mov esi, r14d
movsx r12d, byte [rbp - 0xe]
mov qword [rsp + 0xa0], r13
movsx r13d, byte [rbp - 0xd]
lea eax, [r14 - 0x30]
mov qword [rsp + 0x90], r15
movsx r15d, byte [rbp - 0xf]
cmp al, 9
ja 0x14002c1ea
imul eax, esi, 7
mov ebx, 0x171
sub ebx, eax
jmp 0x14002c1f4
imul ecx, esi, 7
mov ebx, 0x1a2
sub ebx, ecx
sub ebx, edx
mov eax, 0x51eb851f
sub ebx, edi
sub ebx, r9d
imul ebx
sar edx, 5
mov ecx, edx
shr ecx, 0x1f
add edx, ecx
imul ecx, edx, 0x64
sub ebx, ecx
jns 0x14002c22c
mov ecx, 0xffffffff
mov eax, 0x51eb851f
sub ecx, ebx
mul ecx
shr edx, 5
imul eax, edx, 0x64
add eax, 0x64
add ebx, eax
movsx ecx, byte [rbp - 0xa]
call qword [sym.imp.api_ms_win_crt_string_l1_1_0.dll_isdigit]
test eax, eax
je 0x14002c44c
movsx ecx, byte [rbp - 9]
call qword [sym.imp.api_ms_win_crt_string_l1_1_0.dll_isdigit]
test eax, eax
je 0x14002c44c
movsx ecx, byte [rbp - 8]
call qword [sym.imp.api_ms_win_crt_string_l1_1_0.dll_isdigit]
test eax, eax
je 0x14002c44c
movsx ecx, byte [rbp - 7]
call qword [sym.imp.api_ms_win_crt_string_l1_1_0.dll_isdigit]
test eax, eax
je 0x14002c44c
movsx ecx, byte [rbp - 6]
call qword [sym.imp.api_ms_win_crt_string_l1_1_0.dll_isdigit]
test eax, eax
je 0x14002c44c
mov eax, 0x66666667
imul ebx
mov ecx, edx
sar ecx, 2
mov eax, ecx
shr eax, 0x1f
add ecx, eax
mov eax, 0x66666667
imul ecx
mov r11d, ecx
sar edx, 2
mov eax, edx
shr eax, 0x1f
add edx, eax
lea eax, [rdx + rdx*4]
add eax, eax
sub r11d, eax
movzx eax, cl
shl cl, 2
add r11b, 0x30
add al, cl
mov byte [rbp - 0x29], r11b
add al, al
lea ecx, [r15 + r15*8]
sub bl, al
lea ecx, [r12 + rcx*4]
lea edx, [rcx + rcx*8]
add bl, 0x30
lea ecx, [rdx*4]
mov byte [rbp - 0x28], bl
add ecx, r13d
mov eax, 0xfffff940
sub r13b, 0x30
cmp r13b, 9
lea edx, [rcx + rcx*8]
mov ecx, 0xfffff844
cmova eax, ecx
sub r14b, 0x30
cmp r14b, 9
mov ecx, 0xfffffdb9
lea r8d, [rax + rdx*4]
mov eax, 0xfffffdc0
cmova eax, ecx
sub r15b, 0x30
add r8d, eax
mov ecx, 0xffd8d840
cmp r15b, 9
mov eax, 0xffddd400
cmova eax, ecx
sub r12b, 0x30
add r8d, eax
mov ecx, 0xffff0d00
cmp r12b, 9
mov eax, 0xfffee990
cmova ecx, eax
mov eax, dword [rbp - 0x35]
add ecx, dword [rbp - 0x39]
add ecx, r8d
lea eax, [rax + rax*4]
lea r10d, [rcx + rax*2]
mov eax, 0x66666667
add r10d, esi
imul r10d
mov ecx, edx
sar ecx, 2
mov eax, ecx
shr eax, 0x1f
add ecx, eax
mov eax, 0x66666667
imul ecx
mov r9d, ecx
sar edx, 2
mov eax, edx
shr eax, 0x1f
add edx, eax
lea eax, [rdx + rdx*4]
add eax, eax
sub r9d, eax
movzx eax, cl
add r9b, 0x30
mov byte [rbp - 0x27], r9b
shl cl, 2
add al, cl
movsx r8d, r11b
add al, al
mov byte [rbp - 0x24], 0
sub r10b, al
add r8d, 0xffffff9a
add r10b, 0x30
mov eax, 0x66666667
movsx ecx, r10b
imul edx, ecx, 7
mov byte [rbp - 0x26], r10b
movsx ecx, r9b
lea r10d, [rdx + r8*8]
mov r8d, 5
add r10d, ecx
movsx ecx, bl
add r10d, ecx
lea rcx, [rbp - 0xa]
imul r10d
sar edx, 2
mov eax, edx
shr eax, 0x1f
add edx, eax
lea eax, [rdx + rdx*4]
add eax, eax
lea rdx, [rbp - 0x29]
sub r10d, eax
add r10b, 0x30
mov byte [rbp - 0x25], r10b
call qword [sym.imp.api_ms_win_crt_string_l1_1_0.dll_strncmp]
neg eax
sbb eax, eax
and eax, 9
mov r12, qword [rsp + 0xd0]
mov r13, qword [rsp + 0xa0]
mov r15, qword [rsp + 0x90]
mov rdi, qword [rsp + 0xc8]
mov rsi, qword [rsp + 0xc0]
mov r14, qword [rsp + 0x98]
mov rcx, qword [rbp + 0x27]
xor rcx, rsp
call fcn.1400a4f20
add rsp, 0xa8
pop rbx
pop rbp
ret
mov eax, 0xa
jmp 0x14002c406
mov eax, 8
jmp 0x14002c41e
mov eax, 7
jmp 0x14002c41e
mov eax, 6
jmp 0x14002c41e
mov eax, 5
jmp 0x14002c41e
mov eax, 3
jmp 0x14002c436
mov eax, 2
jmp 0x14002c436