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

Disassembly:
push r14
push r13
push r12
push rbp
push rdi
push rsi
push rbx
sub rsp, 0x220
mov rax, qword [rcx]
mov rbx, qword [rcx + 8]
mov rdi, rdx
test rax, rax
jle 0x424000
mov dl, byte [rbx + 8]
lea ecx, [rdx - 0x2b]
and cl, 0xfd
jne 0x424000
movsd xmm1, qword [0x0043ea38]
mov r11b, 1
cmp dl, 0x2d
jne 0x424010
movsd xmm1, qword [0x0043ea40]
jmp 0x424010
movsd xmm1, qword [0x0043ea38]
xor r11d, r11d
xor r12d, r12d
jmp 0x424016
mov r12d, 1
lea rcx, [r12 + 2]
cmp rax, rcx
jle 0x4240b0
mov dl, byte [r12 + rbx + 8]
and edx, 0xffffffdf
cmp dl, 0x4e
je 0x42403c
cmp dl, 0x49
jne 0x424118
jmp 0x4240bb
mov dl, byte [r12 + rbx + 9]
and edx, 0xffffffdf
cmp dl, 0x41
jne 0x424481
mov dl, byte [rcx + rbx + 8]
and edx, 0xffffffdf
cmp dl, 0x4e
jne 0x424481
add r12, 3
cmp rax, r12
jle 0x424090
mov al, byte [r12 + rbx + 8]
mov edx, eax
and edx, 0xffffffdf
sub edx, 0x41
cmp dl, 0x19
jbe 0x424481
lea edx, [rax - 0x30]
cmp dl, 9
jbe 0x424481
cmp al, 0x5f
je 0x424481
movsd xmm0, qword [0x0043ea48]
xorps xmm1, xmm1
mulsd xmm0, xmm0
cvtsd2ss xmm0, xmm0
mulss xmm0, xmm1
cvtss2sd xmm0, xmm0
jmp 0x42444c
or r8, 0xffffffffffffffff
cmp rax, r12
jg 0x424118
jmp 0x42412e
mov dl, byte [r12 + rbx + 9]
and edx, 0xffffffdf
cmp dl, 0x4e
jne 0x424481
mov dl, byte [rcx + rbx + 8]
and edx, 0xffffffdf
cmp dl, 0x46
jne 0x424481
add r12, 3
cmp rax, r12
jle 0x4242ed
mov al, byte [r12 + rbx + 8]
mov edx, eax
and edx, 0xffffffdf
sub edx, 0x41
cmp dl, 0x19
jbe 0x424481
lea edx, [rax - 0x30]
cmp dl, 9
jbe 0x424481
cmp al, 0x5f
je 0x424481
jmp 0x4242ed
movzx edx, byte [r12 + rbx + 8]
or r8, 0xffffffffffffffff
lea ecx, [rdx - 0x30]
cmp cl, 9
ja 0x42412e
lea r8, [rdx - 0x30]
xor r10d, r10d
xor ecx, ecx
cmp rax, r12
jle 0x424209
movzx edx, byte [rbx + r12 + 8]
lea r9d, [rdx - 0x30]
cmp r9b, 9
ja 0x42416a
imul rcx, rcx, 0xa
inc r10
lea rcx, [rcx + rdx - 0x30]
inc r12
cmp rax, r12
je 0x424133
cmp byte [rbx + r12 + 8], 0x5f
je 0x424158
jmp 0x424133
cmp dl, 0x2e
jne 0x424209
inc r12
test r10, r10
jne 0x4241a6
xor edx, edx
mov r13, rdx
cmp rax, r12
jle 0x4241a9
cmp byte [rbx + r12 + 8], 0x30
jne 0x424486
inc rdx
inc r12
cmp rax, r12
je 0x42417d
cmp byte [rbx + r12 + 8], 0x5f
je 0x424194
jmp 0x42417d
xor r13d, r13d
cmp r8, 0xffffffffffffffff
jne 0x4241cc
cmp rax, r12
jle 0x4241cc
movzx edx, byte [r12 + rbx + 8]
or r8, 0xffffffffffffffff
lea r9d, [rdx - 0x30]
cmp r9b, 9
ja 0x4241cc
lea r8, [rdx - 0x30]
xor edx, edx
lea rbp, [r13 + rdx]
mov r9, rdx
cmp rax, r12
jle 0x42420e
movzx esi, byte [rbx + r12 + 8]
lea r14d, [rsi - 0x30]
cmp r14b, 9
ja 0x42420e
imul rcx, rcx, 0xa
inc rdx
lea rcx, [rcx + rsi - 0x30]
inc r12
cmp rax, r12
je 0x4241ce
cmp byte [rbx + r12 + 8], 0x5f
je 0x4241f7
jmp 0x4241ce
xor ebp, ebp
xor r9d, r9d
mov r13, r10
add r13, r9
jne 0x42422e
test r12, r12
je 0x424495
cmp r12, 1
jne 0x42422e
test r11b, r11b
jne 0x424481
lea rdx, [r12 + 1]
cmp rax, rdx
jle 0x4242b5
mov r11b, byte [r12 + rbx + 8]
and r11d, 0xffffffdf
cmp r11b, 0x45
jne 0x4242b5
mov r11b, byte [rdx + rbx + 8]
cmp r11b, 0x2b
je 0x42425e
cmp r11b, 0x2d
jne 0x42426a
or r11, 0xffffffffffffffff
jmp 0x424264
mov r11d, 1
add r12, 2
jmp 0x424273
mov r12, rdx
mov r11d, 1
mov sil, byte [r12 + rbx + 8]
lea edx, [rsi - 0x30]
cmp dl, 9
ja 0x424481
xor esi, esi
cmp rax, r12
jle 0x4242bd
movzx r14d, byte [rbx + r12 + 8]
lea edx, [r14 - 0x30]
cmp dl, 9
ja 0x4242bd
imul rdx, rsi, 0xa
lea rsi, [rdx + r14 - 0x30]
inc r12
cmp rax, r12
je 0x424286
cmp byte [rbx + r12 + 8], 0x5f
je 0x4242a3
jmp 0x424286
mov r11d, 1
xor esi, esi
imul rsi, r11
sub rsi, rbp
mov rax, rsi
sar rax, 0x3f
mov rbp, rax
xor rbp, rsi
sub rbp, rax
cmp rbp, 0x3e7
jg 0x4242e5
cmp r13, 0xf
jg 0x424305
jmp 0x424319
xorps xmm0, xmm0
test rsi, rsi
js 0x4242fc
movsd xmm0, qword [0x0043ea38]
xorps xmm2, xmm2
divsd xmm0, xmm2
mulsd xmm0, xmm1
jmp 0x42444c
cmp r13, 0x10
jne 0x4243c7
cmp r8, 9
je 0x4243c7
cmp rbp, 0x16
jle 0x424338
mov edx, 0xf
sub rdx, r10
sub rdx, r9
lea rax, [rdx + 0x16]
cmp rbp, rax
jle 0x424384
jmp 0x4243c7
test rcx, rcx
js 0x424344
cvtsi2sd xmm0, rcx
jmp 0x424359
mov rax, rcx
and ecx, 1
shr rax, 1
or rax, rcx
cvtsi2sd xmm0, rax
addsd xmm0, xmm0
lea rax, [0x0043e980]
mulsd xmm0, xmm1
movsd xmm1, qword [rax + rbp*8]
test rsi, rsi
js 0x42437b
mulsd xmm1, xmm0
movsd qword [rdi], xmm1
jmp 0x424495
divsd xmm0, xmm1
jmp 0x42444c
test rsi, rsi
js 0x4243c7
test rcx, rcx
js 0x424395
cvtsi2sd xmm0, rcx
jmp 0x4243aa
mov rax, rcx
and ecx, 1
shr rax, 1
or rax, rcx
cvtsi2sd xmm0, rax
addsd xmm0, xmm0
lea rcx, [0x0043e980]
mulsd xmm0, xmm1
sub rbp, rdx
mulsd xmm0, qword [rcx + rdx*8]
mulsd xmm0, qword [rcx + rbp*8]
jmp 0x42444c
lea r13, [rsp + 0x2c]
mov edx, 0x1f4
mov rcx, r13
call fcn.004017f3
xor ecx, ecx
test r12, r12
je 0x424406
xor eax, eax
cmp byte [rbx + 8], 0x2e
sete al
cmp r12, rax
jle 0x424406
mov dl, byte [rbx + rax + 8]
lea r8d, [rdx - 0x2b]
and r8b, 0xfd
je 0x424452
lea r8d, [rdx - 0x30]
cmp r8b, 9
jbe 0x424452
mov rax, rbp
mov r8d, 0xa
sar rsi, 0x3f
mov byte [rsp + rcx + 0x2c], 0x45
cqo
and esi, 2
idiv r8
add esi, 0x2b
mov byte [rsp + rcx + 0x2d], sil
add edx, 0x30
mov byte [rsp + rcx + 0x30], dl
cqo
idiv r8
add edx, 0x30
add eax, 0x30
mov byte [rsp + rcx + 0x2f], dl
xor edx, edx
mov byte [rsp + rcx + 0x2e], al
mov rcx, r13
call fcn.004268f0
movsd qword [rdi], xmm0
jmp 0x424495
cmp rcx, 0x1ed
jg 0x424462
mov byte [rsp + rcx + 0x2c], dl
inc rcx
inc rax
cmp r12, rax
je 0x4243e9
mov dl, byte [rbx + rax + 8]
cmp dl, 0x2e
je 0x424462
cmp dl, 0x5f
je 0x424462
jmp 0x4243e9
xor r12d, r12d
jmp 0x424495
cmp r8, 0xffffffffffffffff
jne 0x4241cc
jmp 0x4241b4
mov rax, r12
add rsp, 0x220
pop rbx
pop rsi
pop rdi
pop rbp
pop r12
pop r13
pop r14
ret