Function at 0x1800975e0
Capabilities:
Parse credit card information

Disassembly:
push rbp
push r12
push r15
sub rsp, 0x30
mov r9d, dword [rcx + 0x20]
mov r12, r8
mov rbp, rdx
mov r15, rcx
lea eax, [r9 - 1]
mov dword [rcx + 0x20], eax
test r9d, r9d
je 0x180097bd7
mov rdx, qword [rcx + 0x10]
mov qword [rsp + 0x50], rbx
mov qword [rsp + 0x58], rsi
mov qword [rsp + 0x60], rdi
mov qword [rsp + 0x28], r13
mov qword [rsp + 0x20], r14
cmp r8, rdx
je 0x180097bad
lea r14, [rcx + 8]
movabs r9, 0x8000240000000000
lea rsi, [0x180000000]
xor r11d, r11d
nop word [rax + rax]
movzx r10d, byte [r12]
movsx ecx, r10b
sub ecx, 0x24
je 0x180097865
sub ecx, 1
je 0x1800976bc
sub ecx, 3
je 0x1800979eb
cmp ecx, 1
jne case.0x1800976e6.51
movzx eax, byte [r15 + 0x24]
mov ecx, eax
sub rcx, 1
lea edx, [rax - 1]
js 0x180097be8
lea rax, [rcx + 3]
shl rax, 4
add rax, r15
nop dword [rax + rax]
cmp qword [rax], 0xffffffffffffffff
je 0x1800979a9
dec edx
sub rax, 0x10
sub rcx, 1
js 0x180097be8
jmp 0x1800976a0
movzx r8d, byte [r12 + 1]
movsx eax, r8b
add eax, 0xffffffd0
cmp eax, 0x36
ja case.0x1800976e6.51
cdqe
movzx eax, byte [rsi + rax + 0x97c94]
mov ecx, dword [rsi + rax*4 + 0x97c84]
add rcx, rsi
jmp rcx
lea rcx, [r12 + 2]
lea rax, [rdx - 1]
cmp rcx, rax
jae 0x180097c1b
movzx r9d, byte [rcx]
cmp byte [rbp], r9b
jne 0x180097baa
mov r8, qword [r15 + 8]
lea r14, [r15 + 8]
movzx r10d, byte [rcx + 1]
lea rax, [rbp + 1]
mov ecx, 1
cmp rax, r8
jae 0x180097baa
movzx edx, byte [rax]
cmp dl, r10b
jne 0x18009774a
sub ecx, 1
jne 0x180097751
lea rbp, [rax + 1]
test rbp, rbp
je 0x180097bad
add r12, 4
jmp 0x18009798d
cmp dl, r9b
jne 0x180097751
inc ecx
inc rax
cmp rax, r8
jb 0x180097727
jmp 0x180097baa
cmp byte [r12 + 2], 0x5b
jne 0x180097c3d
cmp byte [r12 + 3], 0x5e
lea rcx, [r12 + 3]
jne 0x180097780
inc rcx
nop word [rax + rax]
cmp rcx, rdx
je 0x180097c2c
movzx eax, byte [rcx]
inc rcx
cmp al, 0x25
jne 0x18009779b
cmp rcx, rdx
jae 0x18009779b
inc rcx
cmp byte [rcx], 0x5d
jne 0x180097780
lea rbx, [rcx + 1]
cmp rbp, qword [r15]
jne 0x1800977ad
xor al, al
jmp 0x1800977b1
movzx eax, byte [rbp - 1]
movzx ecx, al
lea r8, [rbx - 1]
lea rdx, [r12 + 2]
call fcn.180097530
test eax, eax
jne 0x180097b9f
movzx ecx, byte [rbp]
lea r8, [rbx - 1]
lea rdx, [r12 + 2]
call fcn.180097530
test eax, eax
je 0x180097b9f
mov r12, rbx
lea r14, [r15 + 8]
jmp 0x18009798d
mov rcx, r8
add r8d, 0xffffffcf
js 0x180097c4e
movzx eax, byte [r15 + 0x24]
cmp r8d, eax
jge 0x180097c4e
add rcx, 0xffffffffffffffcf
lea rax, [rcx + 3]
add rax, rax
mov rbx, qword [r15 + rax*8]
cmp rbx, 0xffffffffffffffff
je 0x180097c4e
mov rax, qword [r15 + 8]
lea r14, [r15 + 8]
sub rax, rbp
cmp rax, rbx
jb 0x180097baa
add rcx, rcx
mov r8, rbx
mov rdx, rbp
mov rcx, qword [r15 + rcx*8 + 0x28]
call sub.VCRUNTIME140.dll_memcmp
test eax, eax
jne 0x180097a6f
add rbp, rbx
je 0x180097bad
add r12, 2
jmp 0x18009798d
lea rax, [r12 + 1]
cmp rax, rdx
je 0x180097ba3
lea rbx, [r12 + 1]
cmp r10b, 0x25
je 0x1800978b2
cmp r10b, 0x5b
jne 0x1800978be
cmp byte [r12 + 1], 0x5e
jne 0x180097890
inc rbx
nop
cmp rbx, rdx
je 0x180097c62
movzx eax, byte [rbx]
inc rbx
cmp al, 0x25
jne 0x1800978ab
cmp rbx, rdx
jae 0x1800978ab
inc rbx
cmp byte [rbx], 0x5d
jne 0x180097890
jmp 0x1800978bb
cmp rbx, rdx
je 0x180097c73
inc rbx
cmp rbp, qword [r15 + 8]
lea r14, [r15 + 8]
jb 0x1800978d0
movzx eax, byte [rbx]
jmp 0x180097955
movzx r9d, byte [rbp]
movzx eax, r10b
cmp r10b, 0x25
je 0x180097931
cmp al, 0x2e
je 0x180097903
cmp al, 0x5b
je 0x1800978f2
cmp r10d, r9d
mov ecx, r11d
sete cl
jmp 0x180097944
lea r8, [rbx - 1]
mov rdx, r12
mov ecx, r9d
call fcn.180097530
jmp 0x18009793f
movzx eax, byte [rbx]
movsx ecx, al
sub ecx, 0x2a
je 0x180097b19
sub ecx, 1
je 0x180097b16
sub ecx, 2
je 0x180097a7f
cmp ecx, 0x12
je 0x180097971
inc rbp
mov r12, rbx
jmp 0x18009798d
movzx edx, byte [r12 + 1]
mov ecx, r9d
call fcn.1800973c0
xor r11d, r11d
mov ecx, eax
movzx eax, byte [rbx]
test ecx, ecx
jne 0x180097906
movabs r9, 0x8000240000000000
cmp al, 0x3f
ja 0x180097baa
movsx rax, al
bt r9, rax
jae 0x180097baa
lea r12, [rbx + 1]
jmp 0x180097997
lea r12, [rbx + 1]
mov rcx, r15
mov r8, r12
lea rdx, [rbp + 1]
call fcn.1800975e0
test rax, rax
jne 0x180097a77
movabs r9, 0x8000240000000000
mov rdx, qword [r15 + 0x10]
cmp r12, rdx
je 0x180097bad
jmp 0x180097642
movsxd rcx, edx
lea r8, [r12 + 1]
mov rax, rbp
mov rdx, rbp
lea rbx, [rcx + 3]
add rcx, rcx
add rbx, rbx
sub rax, qword [r15 + rcx*8 + 0x28]
mov rcx, r15
mov qword [r15 + rbx*8], rax
call fcn.1800975e0
mov rbp, rax
test rax, rax
jne 0x180097bad
mov qword [r15 + rbx*8], 0xffffffffffffffff
jmp 0x180097bad
cmp byte [r12 + 1], 0x29
lea r8, [r12 + 1]
movzx edx, byte [r15 + 0x24]
jne 0x180097a26
cmp dl, 0x20
jae 0x180097bf9
mov eax, edx
lea r8, [r12 + 2]
add rax, rax
mov qword [r15 + rax*8 + 0x28], rbp
lea rax, [rdx + 3]
add rax, rax
mov qword [r15 + rax*8], 0xfffffffffffffffe
jmp 0x180097a49
cmp dl, 0x20
jae 0x180097c0a
mov rax, rdx
add rax, rax
mov qword [r15 + rax*8 + 0x28], rbp
lea rax, [rdx + 3]
add rax, rax
mov qword [r15 + rax*8], 0xffffffffffffffff
inc dl
mov rcx, r15
mov byte [r15 + 0x24], dl
mov rdx, rbp
call fcn.1800975e0
mov rbp, rax
test rax, rax
jne 0x180097bad
dec byte [r15 + 0x24]
jmp 0x180097bad
xor r11d, r11d
jmp 0x180097baa
mov rbp, rax
jmp 0x180097bad
lea r8, [rbx + 1]
mov rdx, rbp
mov rcx, r15
mov rdi, rbp
call fcn.1800975e0
mov rbp, rax
test rax, rax
jne 0x180097bad
nop dword [rax]
cmp rdi, qword [r14]
jae 0x180097b9f
movzx ecx, byte [r12]
movzx r9d, byte [rdi]
movzx eax, cl
cmp cl, 0x25
je 0x180097adf
cmp al, 0x2e
je 0x180097af7
cmp al, 0x5b
je 0x180097ace
mov eax, ecx
xor ecx, ecx
cmp eax, r9d
sete cl
jmp 0x180097aef
lea r8, [rbx - 1]
mov rdx, r12
mov ecx, r9d
call fcn.180097530
jmp 0x180097aed
movzx edx, byte [r12 + 1]
mov ecx, r9d
call fcn.1800973c0
mov ecx, eax
test ecx, ecx
je 0x180097b9f
inc rdi
lea r8, [rbx + 1]
mov rdx, rdi
mov rcx, r15
call fcn.1800975e0
mov rbp, rax
test rax, rax
je 0x180097aa0
jmp 0x180097bad
inc rbp
mov rdi, r11
mov rsi, rbp
nop
cmp rsi, qword [r14]
jae 0x180097b79
movzx ecx, byte [r12]
movzx r9d, byte [rsi]
movzx eax, cl
cmp cl, 0x25
je 0x180097b5a
cmp al, 0x2e
je 0x180097b71
cmp al, 0x5b
je 0x180097b49
cmp ecx, r9d
mov ecx, r11d
sete cl
jmp 0x180097b6d
lea r8, [rbx - 1]
mov rdx, r12
mov ecx, r9d
call fcn.180097530
jmp 0x180097b68
movzx edx, byte [r12 + 1]
mov ecx, r9d
call fcn.1800973c0
xor r11d, r11d
mov ecx, eax
test ecx, ecx
je 0x180097b79
inc rdi
inc rsi
jmp 0x180097b20
test rdi, rdi
js 0x180097b9f
nop
lea rdx, [rdi + rbp]
mov rcx, r15
lea r8, [rbx + 1]
call fcn.1800975e0
test rax, rax
jne 0x180097a77
sub rdi, 1
jns 0x180097b80
xor ebp, ebp
jmp 0x180097bad
cmp rbp, qword [r14]
cmove r11, rbp
mov rbp, r11
inc dword [r15 + 0x20]
mov rax, rbp
mov r13, qword [rsp + 0x28]
mov rdi, qword [rsp + 0x60]
mov rsi, qword [rsp + 0x58]
mov rbx, qword [rsp + 0x50]
mov r14, qword [rsp + 0x20]
add rsp, 0x30
pop r15
pop r12
pop rbp
ret
mov rcx, qword [rcx + 0x18]
lea rdx, str.pattern_too_complex
call fcn.180077dc0
int3
mov rcx, qword [r15 + 0x18]
lea rdx, str.invalid_pattern_capture
call fcn.180077dc0
int3
mov rcx, qword [r15 + 0x18]
lea rdx, str.too_many_captures
call fcn.180077dc0
int3
mov rcx, qword [r15 + 0x18]
lea rdx, str.too_many_captures
call fcn.180077dc0
int3
mov rcx, qword [r15 + 0x18]
lea rdx, str.malformed_pattern__missing_arguments_to___b_
call fcn.180077dc0
int3
mov rcx, qword [r15 + 0x18]
lea rdx, str.malformed_pattern__missing___
call fcn.180077dc0
int3
mov rcx, qword [r15 + 0x18]
lea rdx, str.missing___after___f_in_pattern
call fcn.180077dc0
int3
mov rcx, qword [r15 + 0x18]
lea rdx, str.invalid_capture_index____d
inc r8d
call fcn.180077dc0
int3
mov rcx, qword [r15 + 0x18]
lea rdx, str.malformed_pattern__missing___
call fcn.180077dc0
int3
mov rcx, qword [r15 + 0x18]
lea rdx, str.malformed_pattern__ends_with____
call fcn.180077dc0
int3