Function at 0x140009122
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
test rdx, rdx
mov r9, rcx
mov rax, rdx
mov rsi, r8
jle 0x1400092b7
mov dl, byte [rcx]
lea ecx, [rdx - 0x2b]
and cl, 0xfd
je 0x140009167
xor r10d, r10d
xor ebx, ebx
cmp rax, 2
movsd xmm2, qword [0x14003de60]
jg 0x14000918e
jmp 0x14000929d
cmp dl, 0x2d
movsd xmm2, qword [0x14003de60]
jne 0x14000917c
movsd xmm2, qword [0x14003de68]
cmp rax, 3
jle 0x140009220
mov r10b, 1
mov ebx, 1
mov dl, byte [r9 + rbx]
mov rcx, rbx
and edx, 0xffffffdf
cmp dl, 0x4e
je 0x1400091ab
cmp dl, 0x49
jne 0x14000929d
jmp 0x140009234
mov dl, byte [r9 + rbx + 1]
and edx, 0xffffffdf
cmp dl, 0x41
jne 0x14000962c
mov dl, byte [r9 + rbx + 2]
and edx, 0xffffffdf
cmp dl, 0x4e
jne 0x14000962c
add rbx, 3
cmp rbx, rax
jge 0x140009200
mov al, byte [r9 + rcx + 3]
mov edx, eax
and edx, 0xffffffdf
sub edx, 0x41
cmp dl, 0x19
jbe 0x14000962c
lea edx, [rax - 0x30]
cmp dl, 9
jbe 0x14000962c
cmp al, 0x5f
je 0x14000962c
movsd xmm0, qword [0x14003de70]
xorps xmm1, xmm1
mulsd xmm0, xmm0
cvtsd2ss xmm0, xmm0
mulss xmm0, xmm1
cvtss2sd xmm0, xmm0
jmp 0x140009522
cmp rax, 1
je 0x1400092c6
mov r10b, 1
mov ebx, 1
jmp 0x14000929d
mov dl, byte [r9 + rbx + 1]
and edx, 0xffffffdf
cmp dl, 0x4e
jne 0x14000962c
mov dl, byte [r9 + rbx + 2]
and edx, 0xffffffdf
cmp dl, 0x46
jne 0x14000962c
add rbx, 3
cmp rbx, rax
jge 0x140009289
mov al, byte [r9 + rcx + 3]
mov edx, eax
and edx, 0xffffffdf
sub edx, 0x41
cmp dl, 0x19
jbe 0x14000962c
lea edx, [rax - 0x30]
cmp dl, 9
jbe 0x14000962c
cmp al, 0x5f
je 0x14000962c
movsd xmm0, qword [0x14003de60]
xorps xmm1, xmm1
divsd xmm0, xmm1
jmp 0x1400094a8
mov dil, byte [r9 + rbx]
or rcx, 0xffffffffffffffff
lea edx, [rdi - 0x30]
cmp dl, 9
ja 0x1400092d2
movzx ecx, dil
sub rcx, 0x30
jmp 0x1400092d2
movsd xmm2, qword [0x14003de60]
xor r10d, r10d
xor ebx, ebx
jmp 0x1400092ce
mov ebx, 1
mov r10b, 1
or rcx, 0xffffffffffffffff
xor edx, edx
xor r8d, r8d
cmp rbx, rax
jge 0x1400093a6
movsx r11, byte [r9 + rbx]
lea edi, [r11 - 0x30]
cmp dil, 9
ja 0x140009310
imul rdx, rdx, 0xa
inc r8
lea rdx, [rdx + r11 - 0x30]
inc rbx
cmp rbx, rax
jge 0x1400093a6
cmp byte [r9 + rbx], 0x5f
je 0x1400092fb
jmp 0x1400092d7
cmp byte [r9 + rbx], 0x2e
jne 0x1400093a6
inc rbx
xor ebp, ebp
test r8, r8
jne 0x140009349
cmp rbx, rax
jge 0x140009349
cmp byte [r9 + rbx], 0x30
jne 0x140009641
inc rbp
inc rbx
cmp rbx, rax
jge 0x140009349
cmp byte [r9 + rbx], 0x5f
je 0x140009338
jmp 0x140009325
cmp rcx, 0xffffffffffffffff
jne 0x14000936a
cmp rbx, rax
jge 0x14000936a
mov dil, byte [r9 + rbx]
or rcx, 0xffffffffffffffff
lea r11d, [rdi - 0x30]
cmp r11b, 9
ja 0x14000936a
movsx rcx, r11b
xor edi, edi
lea r11, [rdi + rbp]
cmp rbx, rax
jge 0x140009630
movsx r12, byte [r9 + rbx]
lea r13d, [r12 - 0x30]
cmp r13b, 9
ja 0x1400093ab
imul rdx, rdx, 0xa
inc rdi
lea rdx, [rdx + r12 - 0x30]
inc rbx
cmp rbx, rax
jge 0x14000936c
cmp byte [r9 + rbx], 0x5f
je 0x140009395
jmp 0x14000936c
xor r11d, r11d
xor edi, edi
mov rbp, r8
add rbp, rdi
jne 0x1400093d2
test rbx, rbx
je 0x140009650
cmp rbx, 1
jne 0x1400093cb
test r10b, r10b
jne 0x14000962c
xor r8d, r8d
xor edi, edi
xor ebp, ebp
lea r10, [rbx + 1]
cmp r10, rax
jge 0x140009457
mov r12b, byte [r9 + rbx]
and r12d, 0xffffffdf
cmp r12b, 0x45
jne 0x140009457
mov r12b, byte [r9 + r10]
cmp r12b, 0x2b
je 0x1400093ff
cmp r12b, 0x2d
jne 0x14000940b
or r12, 0xffffffffffffffff
jmp 0x140009405
mov r12d, 1
add rbx, 2
jmp 0x140009414
mov rbx, r10
mov r12d, 1
mov r14b, byte [r9 + rbx]
lea r10d, [r14 - 0x30]
cmp r10b, 9
ja 0x14000962c
xor r10d, r10d
cmp rbx, rax
jge 0x140009460
movsx r13, byte [r9 + rbx]
lea r14d, [r13 - 0x30]
cmp r14b, 9
ja 0x140009460
imul r10, r10, 0xa
lea r10, [r10 + r13 - 0x30]
inc rbx
cmp rbx, rax
jge 0x140009460
cmp byte [r9 + rbx], 0x5f
je 0x140009446
jmp 0x140009429
mov r12d, 1
xor r10d, r10d
imul r10, r12
sub r10, r11
mov r11, r10
neg r11
cmovs r11, r10
cmp r11, 0x3e7
jg 0x140009482
cmp rbp, 0xf
jg 0x1400094ae
jmp 0x1400094c2
test rdx, rdx
xorps xmm0, xmm0
je 0x140009522
test r10, r10
js 0x1400094a8
movsd xmm1, qword [0x14003de60]
divsd xmm1, xmm0
mulsd xmm1, xmm2
movaps xmm0, xmm1
jmp 0x140009522
mulsd xmm0, xmm2
jmp 0x140009522
cmp rbp, 0x10
jne 0x14000956f
cmp rcx, 8
jg 0x14000956f
cmp r11, 0x16
jle 0x1400094e1
mov eax, 0xf
sub rax, r8
sub rax, rdi
lea rcx, [rax + 0x16]
cmp rcx, r11
jge 0x14000952b
jmp 0x14000956f
test rdx, rdx
js 0x1400094ed
cvtsi2sd xmm0, rdx
jmp 0x140009502
mov rax, rdx
and edx, 1
shr rax, 1
or rax, rdx
cvtsi2sd xmm0, rax
addsd xmm0, xmm0
lea rax, [0x14003d8c0]
test r10, r10
mulsd xmm0, xmm2
movsd xmm1, qword [rax + r11*8]
js 0x14000951e
mulsd xmm0, xmm1
jmp 0x140009522
divsd xmm0, xmm1
movsd qword [rsi], xmm0
jmp 0x140009650
test r10, r10
js 0x14000956f
test rdx, rdx
js 0x14000953c
cvtsi2sd xmm1, rdx
jmp 0x140009551
mov rcx, rdx
and edx, 1
shr rcx, 1
or rcx, rdx
cvtsi2sd xmm1, rcx
addsd xmm1, xmm1
mulsd xmm1, xmm2
sub r11, rax
lea rdx, [0x14003d8c0]
movaps xmm0, xmm1
mulsd xmm0, qword [rdx + rax*8]
mulsd xmm0, qword [rdx + r11*8]
jmp 0x140009522
lea rdi, [rsp + 0x2c]
mov edx, 0x1f4
mov rcx, rdi
call sym.nimZeroMem
xor edx, edx
test rbx, rbx
je 0x140009591
xor edx, edx
cmp byte [r9], 0x2e
sete dl
xor ecx, ecx
lea r8, [rcx + 1]
cmp rbx, rdx
jle 0x1400095b2
mov al, byte [r9 + rdx]
lea ebp, [rax - 0x2b]
and bpl, 0xfd
je 0x1400095ff
lea ebp, [rax - 0x30]
cmp bpl, 9
jbe 0x1400095ff
sar r10, 0x3f
mov rax, r11
mov byte [rsp + rcx + 0x2c], 0x45
and r10d, 2
cqo
add r10d, 0x2b
mov byte [rsp + r8 + 0x2c], r10b
mov r8d, 0xa
idiv r8
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, rdi
call sym.__strtod
jmp 0x140009522
cmp rcx, 0x1ed
jg 0x14000960f
mov byte [rsp + rcx + 0x2c], al
mov rcx, r8
inc rdx
cmp rbx, rdx
je 0x140009593
mov al, byte [r9 + rdx]
cmp al, 0x2e
je 0x14000960f
cmp al, 0x5f
je 0x14000960f
jmp 0x140009593
xor ebx, ebx
jmp 0x140009650
mov rbp, r8
add rbp, rdi
je 0x1400093bc
jmp 0x1400093d2
cmp rcx, 0xffffffffffffffff
jne 0x14000936a
jmp 0x140009354
mov rax, rbx
add rsp, 0x220
pop rbx
pop rsi
pop rdi
pop rbp
pop r12
pop r13
pop r14
ret