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

Disassembly:
mov rax, rsp
mov qword [rax + 0x10], rbx
mov qword [rax + 0x18], rbp
mov qword [rax + 0x20], rsi
mov qword [rax + 8], rcx
push rdi
push r12
push r13
push r14
push r15
sub rsp, 0x30
movaps xmmword [rax - 0x38], xmm6
mov rdi, rdx
call fcn.140071a10
xor r13d, r13d
mov rcx, rax
test rax, rax
je 0x140069fe7
mov rax, qword [rax]
call qword [rax + reloc.OLEAUT32.dll_SafeArrayGetElement]
movsd xmm6, qword [0x140104d20]
lea ebp, [r13 + 4]
add rax, 0x18
mov dword [rdi + 0x17a4], r13d
mov qword [rsp + 0x60], rax
or ebx, 0xffffffff
mov r14d, r13d
mov r12d, r13d
mov r15d, r13d
mov eax, r12d
lea rdx, [rdi + 0x1002]
mov r8d, reloc.OLEAUT32.dll_VariantTimeToDosDateTime
lea rcx, [rax + rax*2]
movsxd rax, r14d
lea rdx, [rdx + rcx*4]
lea rcx, [rax + 0x280]
lea rcx, [rax + rcx*2]
lea rcx, [rdi + rcx*4]
call fcn.1400abc70
lea rsi, [r15 + r15*2]
movzx eax, byte [rdi + rsi*4 + 0x1400]
test al, al
je 0x140069f09
mov ecx, eax
mov eax, 0xe1
cmp ecx, eax
ja 0x14006989f
je 0x140069836
mov eax, 0xbe
cmp ecx, eax
ja 0x1400696aa
je 0x14006968c
sub ecx, 9
je 0x140069528
sub ecx, 3
je 0x1400694cc
sub ecx, 0x58
je 0x140069485
sub ecx, 0x45
je 0x140069456
sub ecx, ebp
je 0x140069424
cmp ecx, 0xe
jne 0x140069f03
cmp dword [rdi + 0x181c], 2
jne 0x140069f03
movzx eax, byte [rdi + rsi*4 + 0x1403]
mov dword [rdi + 0x17e0], eax
cmp eax, 0x64
jbe 0x140069f03
mov dword [rdi + 0x17e0], ebx
jmp 0x140069f03
mov eax, dword [rdi + 0x181c]
cmp eax, 0xf
je 0x140069438
cmp eax, 0x16
jne 0x140069f03
movzx eax, byte [rdi + rsi*4 + 0x1403]
add eax, 0xffffff9c
mov dword [rdi + 0x17e0], eax
js 0x140069419
cmp eax, 0x64
jle 0x140069f03
jmp 0x140069419
mov eax, dword [rdi + 0x181c]
cmp eax, 0x14
je 0x140069a82
cmp eax, 0x11
jne 0x140069477
cmp dword [rdi + 0x1818], 3
je 0x140069a82
cmp eax, 0x1a
jne 0x140069f03
jmp 0x140069a82
cmp dword [rdi + 0x181c], 7
jne 0x140069f03
movzx eax, byte [rdi + rsi*4 + 0x1407]
movzx ecx, byte [rdi + rsi*4 + 0x1408]
shl ecx, 8
add ecx, eax
movzx eax, byte [rdi + rsi*4 + 0x1406]
shl ecx, 8
add ecx, eax
movzx eax, byte [rdi + rsi*4 + 0x1405]
shl ecx, 8
add ecx, eax
mov dword [rdi + 0x17d4], ecx
jmp 0x140069f03
movzx eax, byte [rdi + rsi*4 + 0x1407]
movzx ecx, byte [rdi + rsi*4 + 0x1408]
shl ecx, 8
or ecx, eax
movzx eax, byte [rdi + rsi*4 + 0x1406]
shl ecx, 8
or ecx, eax
movzx eax, byte [rdi + rsi*4 + 0x1405]
shl ecx, 8
or ecx, eax
cmp dword [rdi + 0x181c], 3
jne 0x14006951d
lea rax, [r15 + r15*2]
movzx ecx, byte [rdi + rax*4 + 0x1404]
movzx eax, byte [rdi + rsi*4 + 0x1403]
shl ecx, 8
add ecx, eax
mov dword [rdi + 0x17b8], ecx
jmp 0x140069f03
movzx eax, byte [rdi + rsi*4 + 0x1407]
movzx ebp, byte [rdi + rsi*4 + 0x1408]
shl ebp, 8
or ebp, eax
movzx eax, byte [rdi + rsi*4 + 0x1406]
shl ebp, 8
or ebp, eax
movzx eax, byte [rdi + rsi*4 + 0x1405]
shl ebp, 8
or ebp, eax
cmp dword [rdi + 0x181c], 3
jne 0x14006957e
lea rax, [r15 + r15*2]
movzx ebp, byte [rdi + rax*4 + 0x1404]
movzx eax, byte [rdi + rsi*4 + 0x1403]
shl ebp, 8
add ebp, eax
jmp 0x140069600
mov eax, dword [rdi + 0x179c]
cmp eax, 6
je 0x1400695ca
cmp eax, 1
jne 0x140069596
cmp ebp, 0xda000
jae 0x1400695ca
mov rcx, qword [rdi + 0x1898]
cmp dword [rcx - 0x10], r13d
jl 0x140069600
lea rdx, str.Intel
call fcn.1400ac1d8
test rax, rax
je 0x140069600
sub rax, qword [rdi + 0x1898]
sar rax, 1
test eax, eax
jne 0x140069600
cmp ebp, 0xda000
jb 0x140069600
mov dword [rdi + 0x17a0], 6
movzx ecx, byte [rdi + rsi*4 + 0x1407]
movzx eax, byte [rdi + rsi*4 + 0x1406]
movzx ebp, byte [rdi + rsi*4 + 0x1405]
shl ecx, 8
add ebp, 0xfff258ad
add ecx, eax
shl ecx, 8
add ebp, ecx
cmovs ebp, r13d
mov r8d, dword [rdi + 0x179c]
mov edx, ebp
mov dword [rdi + 0x17b0], ebp
call fcn.14006a838
mov ecx, dword [rdi + 0x17a0]
mov dword [rdi + 0x17a8], eax
test ecx, ecx
je 0x140069679
sub ecx, 1
je 0x14006967c
sub ecx, 1
je 0x14006966b
sub ecx, 1
je 0x14006965d
sub ecx, 1
je 0x14006964b
sub ecx, 1
jne 0x14006967c
mov eax, 0xaaaaaaab
mul ebp
mov ebp, edx
shr ebp, 2
jmp 0x14006967c
mov ecx, 0x88888889
mov eax, ecx
mul ebp
mov eax, ecx
shr edx, 5
mul edx
jmp 0x140069672
mov eax, 0x88888889
mul ebp
mov ebp, edx
shr ebp, 6
jmp 0x14006967c
mov eax, 0x88888889
mul ebp
mov ebp, edx
shr ebp, 5
jmp 0x14006967c
mov ebp, r13d
mov dword [rdi + 0x17ac], ebp
mov ebp, 4
jmp 0x140069f03
movzx ecx, byte [rdi + rsi*4 + 0x1405]
lea eax, [rcx - 1]
cmp al, 0x62
ja 0x140069f03
mov dword [rdi + 0x17bc], ecx
jmp 0x140069f03
sub ecx, 0xc2
je 0x140069781
sub ecx, ebp
je 0x140069740
sub ecx, 1
je 0x1400696ff
sub ecx, 3
je 0x1400696dd
cmp ecx, 7
jne 0x140069f03
cmp dword [rdi + 0x181c], 3
jmp 0x1400693fc
mov eax, dword [rdi + 0x181c]
cmp eax, 0x18
ja 0x140069f03
mov ecx, 0x1040100
bt ecx, eax
jae 0x140069f03
jmp 0x140069402
cmp dword [rdi + 0x181c], 0xe
jne 0x140069f03
movzx eax, byte [rdi + rsi*4 + 0x1407]
movzx ecx, byte [rdi + rsi*4 + 0x1408]
shl ecx, 8
add ecx, eax
movzx eax, byte [rdi + rsi*4 + 0x1406]
shl ecx, 8
add ecx, eax
movzx eax, byte [rdi + rsi*4 + 0x1405]
shl ecx, 8
add ecx, eax
jmp 0x140069a5a
cmp dword [rdi + 0x181c], 0xe
jne 0x140069f03
movzx eax, byte [rdi + rsi*4 + 0x1407]
movzx ecx, byte [rdi + rsi*4 + 0x1408]
shl ecx, 8
add ecx, eax
movzx eax, byte [rdi + rsi*4 + 0x1406]
shl ecx, 8
add ecx, eax
movzx eax, byte [rdi + rsi*4 + 0x1405]
shl ecx, 8
add ecx, eax
jmp 0x140069efd
mov rcx, qword [rdi + 0x1898]
cmp dword [rcx - 0x10], r13d
jl 0x1400697e9
lea rdx, str.SAMSUNG_SV
call fcn.1400ac1d8
test rax, rax
je 0x1400697e9
sub rax, qword [rdi + 0x1898]
sar rax, 1
test eax, eax
jne 0x1400697e9
movzx eax, byte [rdi + rsi*4 + 0x1406]
test al, al
jne 0x1400697c3
cmp byte [rdi + rsi*4 + 0x1405], 0x46
jbe 0x1400697e9
movzx ecx, byte [rdi + rsi*4 + 0x1405]
shl eax, 8
or ecx, eax
mov eax, 0x66666667
imul ecx
sar edx, 2
mov eax, edx
shr eax, 0x1f
add edx, eax
mov dword [rdi + 0x17bc], edx
jmp 0x14006981a
movzx eax, byte [rdi + rsi*4 + 0x1405]
test al, al
je 0x14006981a
movsd xmm1, qword [rdi + 0x17c0]
comisd xmm6, xmm1
jbe 0x140069814
movd xmm0, eax
cvtdq2pd xmm0, xmm0
mulsd xmm0, xmm1
cvttsd2si rax, xmm0
mov dword [rdi + 0x17bc], eax
cmp dword [rdi + 0x17bc], 0x64
jl 0x140069f03
mov dword [rdi + 0x17bc], 0xfffffc18
jmp 0x140069f03
cmp dword [rdi + 0x181c], 5
jne 0x140069f03
movzx eax, byte [rdi + rsi*4 + 0x1409]
movzx ecx, byte [rdi + rsi*4 + 0x140a]
shl rcx, 8
add rcx, rax
movzx eax, byte [rdi + rsi*4 + 0x1408]
shl rcx, 8
add rcx, rax
movzx eax, byte [rdi + rsi*4 + 0x1407]
shl rcx, 8
add rcx, rax
movzx eax, byte [rdi + rsi*4 + 0x1406]
shl rcx, 8
add rcx, rax
movzx eax, byte [rdi + rsi*4 + 0x1405]
shl rcx, 8
add rcx, rax
shr rcx, 5
jmp 0x140069a5a
mov eax, 0xf1
cmp ecx, eax
ja 0x140069ca2
je 0x140069b21
sub ecx, 0xe6
je 0x140069acd
sub ecx, 1
je 0x140069a65
sub ecx, 1
je 0x140069a05
sub ecx, 1
je 0x14006995b
sub ecx, 1
je 0x1400698f3
cmp ecx, 1
jne 0x140069f03
cmp dword [rdi + 0x181c], 0x18
jmp 0x14006983d
mov eax, dword [rdi + 0x181c]
cmp eax, 0x18
je 0x140069ea6
cmp eax, 0x11
je 0x140069921
cmp eax, 0xa
je 0x140069921
cmp eax, 0x15
jne 0x140069f03
cmp dword [rdi + 0x1818], ebp
jne 0x140069f03
movzx eax, byte [rdi + rsi*4 + 0x1407]
movzx ecx, byte [rdi + rsi*4 + 0x1408]
shl ecx, 8
add ecx, eax
movzx eax, byte [rdi + rsi*4 + 0x1406]
shl ecx, 8
add ecx, eax
movzx eax, byte [rdi + rsi*4 + 0x1405]
shl ecx, 8
add ecx, eax
mov dword [rdi + 0x17d8], ecx
jmp 0x140069f03
mov eax, dword [rdi + 0x181c]
cmp eax, 0x15
ja 0x140069991
mov ecx, 0x204220
bt ecx, eax
jae 0x140069991
cmp dword [rdi + 0x17e4], r13d
je 0x140069982
mov al, byte [rdi + rsi*4 + 0x1405]
jmp 0x140069989
mov al, byte [rdi + rsi*4 + 0x1403]
movzx eax, al
jmp 0x14006940a
cmp eax, 0xd
jne 0x1400699a8
cmp dword [rdi + 0x17f4], r13d
je 0x140069915
jmp 0x140069402
cmp eax, 0x1d
ja 0x1400699bb
mov ecx, 0x20821c00
bt ecx, eax
jb 0x140069921
cmp eax, ebp
jne 0x140069f03
movzx eax, byte [rdi + rsi*4 + 0x1409]
movzx ecx, byte [rdi + rsi*4 + 0x140a]
shl rcx, 8
add rcx, rax
movzx eax, byte [rdi + rsi*4 + 0x1408]
shl rcx, 8
add rcx, rax
movzx eax, byte [rdi + rsi*4 + 0x1407]
shl rcx, 8
add rcx, rax
shl rcx, 0x10
shr rcx, 0x15
jmp 0x140069950
mov eax, dword [rdi + 0x181c]
cmp eax, 0xc
je 0x140069402
cmp eax, 9
jne 0x140069f03
movzx eax, byte [rdi + rsi*4 + 0x1409]
movzx ecx, byte [rdi + rsi*4 + 0x140a]
shl rcx, 8
add rcx, rax
movzx eax, byte [rdi + rsi*4 + 0x1408]
shl rcx, 8
add rcx, rax
movzx eax, byte [rdi + rsi*4 + 0x1407]
shl rcx, 8
add rcx, rax
shl rcx, 0x10
shr rcx, 0x15
mov dword [rdi + 0x17cc], ecx
jmp 0x140069f03
mov eax, dword [rdi + 0x181c]
cmp eax, 0x1d
ja 0x140069f03
mov ecx, 0x2ab32490
bt ecx, eax
jae 0x140069f03
cmp dword [rdi + 0x17e8], r13d
je 0x140069a9c
movzx eax, byte [rdi + rsi*4 + 0x1405]
mov ecx, 0x64
sub ecx, eax
jmp 0x140069ab7
cmp dword [rdi + 0x17e4], r13d
je 0x140069aaf
movzx ecx, byte [rdi + rsi*4 + 0x1405]
jmp 0x140069ab7
movzx ecx, byte [rdi + rsi*4 + 0x1403]
mov dword [rdi + 0x17e0], ecx
test ecx, ecx
js 0x140069419
cmp ecx, 0x64
jmp 0x14006944e
mov eax, dword [rdi + 0x181c]
sub eax, 0xb
test eax, 0xfffffffd
jne 0x140069f03
movzx edx, byte [rdi + rsi*4 + 0x1406]
cmp dword [rdi + 0x17ec], r13d
je 0x140069b09
movzx ecx, byte [rdi + rsi*4 + 0x1405]
mov eax, 0x51eb851f
shl edx, 8
add ecx, edx
mul ecx
shr edx, 5
mov eax, 0x64
sub eax, edx
cmp eax, 0x64
cmova eax, ebx
mov dword [rdi + 0x17e0], eax
jmp 0x140069f03
mov eax, dword [rdi + 0x181c]
cmp eax, 1
jne 0x140069ba1
mov eax, dword [rdi + 0x1818]
cmp eax, 1
je 0x140069a1d
cmp eax, 2
jne 0x140069b91
movzx eax, byte [rdi + rsi*4 + 0x1409]
movzx ecx, byte [rdi + rsi*4 + 0x140a]
shl rcx, 8
add rcx, rax
movzx eax, byte [rdi + rsi*4 + 0x1408]
shl rcx, 8
add rcx, rax
movzx eax, byte [rdi + rsi*4 + 0x1407]
shl rcx, 8
add rcx, rax
movzx eax, byte [rdi + rsi*4 + 0x1406]
shl rcx, 8
add rcx, rax
shl rcx, 8
shr rcx, 0xa
jmp 0x140069a5a
cmp eax, 3
je 0x140069843
cmp eax, ebp
jmp 0x140069706
cmp eax, 0xf
jne 0x140069bb7
cmp dword [rdi + 0x1818], ebp
jne 0x140069843
jmp 0x14006970c
cmp eax, 0x18
jne 0x140069c18
movzx eax, byte [rdi + rsi*4 + 0x1409]
movzx ecx, byte [rdi + rsi*4 + 0x140a]
shl rcx, 8
add rcx, rax
movzx eax, byte [rdi + rsi*4 + 0x1408]
shl rcx, 8
add rcx, rax
movzx eax, byte [rdi + rsi*4 + 0x1407]
shl rcx, 8
add rcx, rax
movzx eax, byte [rdi + rsi*4 + 0x1406]
shl rcx, 8
add rcx, rax
movzx eax, byte [rdi + rsi*4 + 0x1405]
shl rcx, 8
add rcx, rax
shr rcx, 5
jmp 0x140069950
cmp eax, 0x1a
ja 0x140069c2b
mov ecx, 0x4400020
bt ecx, eax
jb 0x140069843
cmp eax, 0x1d
ja 0x140069c60
mov ecx, 0x38b34c80
bt ecx, eax
jae 0x140069c60
mov eax, dword [rdi + 0x1818]
cmp eax, 1
je 0x140069a1d
cmp eax, 2
je 0x140069b40
cmp eax, 3
jne 0x14006970c
jmp 0x140069843
cmp eax, 6
je 0x140069c91
cmp eax, 0x19
je 0x140069a1d
cmp eax, ebp
je 0x140069a1d
cmp eax, 0xc
je 0x140069843
cmp eax, 0x12
je 0x140069843
cmp eax, 0xd
jne 0x140069f03
cmp dword [rdi + 0x1818], ebp
jne 0x140069a1d
jmp 0x14006970c
sub ecx, 0xf2
je 0x140069e30
sub ecx, 3
je 0x140069d66
sub ecx, 1
je 0x140069d4f
sub ecx, 3
je 0x140069cda
cmp ecx, 1
jne 0x140069f03
cmp dword [rdi + 0x181c], 0x14
jmp 0x14006991b
mov eax, dword [rdi + 0x181c]
cmp eax, 0x14
ja 0x140069cf3
mov ecx, 0x100820
bt ecx, eax
jb 0x140069921
cmp eax, 0xd
jne 0x140069d04
cmp dword [rdi + 0x1818], ebp
je 0x140069921
cmp eax, 0xe
jne 0x140069f03
movzx eax, byte [rdi + rsi*4 + 0x1409]
movzx ecx, byte [rdi + rsi*4 + 0x140a]
shl rcx, 8
add rcx, rax
movzx eax, byte [rdi + rsi*4 + 0x1408]
shl rcx, 8
add rcx, rax
movzx eax, byte [rdi + rsi*4 + 0x1407]
shl rcx, 8
add rcx, rax
shl rcx, 0x10
shr rcx, 0x10
jmp 0x140069950
mov eax, dword [rdi + 0x181c]
cmp eax, 8
je 0x140069a1d
cmp eax, 0x12
jmp 0x140069a17
mov eax, dword [rdi + 0x181c]
cmp eax, 8
jne 0x140069dd1
movzx eax, byte [rdi + rsi*4 + 0x1409]
movzx ecx, byte [rdi + rsi*4 + 0x140a]
shl rcx, 8
add rcx, rax
movzx eax, byte [rdi + rsi*4 + 0x1408]
shl rcx, 8
add rcx, rax
movzx eax, byte [rdi + rsi*4 + 0x1407]
shl rcx, 8
add rcx, rax
movzx eax, byte [rdi + rsi*4 + 0x1406]
shl rcx, 8
add rcx, rax
movzx eax, byte [rdi + rsi*4 + 0x1405]
shl rcx, 8
add rcx, rax
shl rcx, 3
shr rcx, 0x14
jmp 0x140069950
cmp eax, 0x12
je 0x140069ded
cmp eax, 0x11
jne 0x140069de4
cmp dword [rdi + 0x1818], 3
jmp 0x140069de7
cmp eax, 0x1a
jne 0x140069f03
movzx ecx, byte [rdi + rsi*4 + 0x1407]
movzx eax, byte [rdi + rsi*4 + 0x1408]
shl eax, 8
add eax, ecx
movzx ecx, byte [rdi + rsi*4 + 0x1406]
shl eax, 8
add eax, ecx
movzx ecx, byte [rdi + rsi*4 + 0x1405]
shl eax, 8
add eax, ecx
cdq
and edx, 0x1f
add eax, edx
sar eax, 5
mov dword [rdi + 0x17d8], eax
jmp 0x140069f03
mov eax, dword [rdi + 0x181c]
cmp eax, 1
jne 0x140069e91
mov eax, dword [rdi + 0x1818]
cmp eax, 1
jne 0x140069e85
movzx eax, byte [rdi + rsi*4 + 0x1409]
movzx ecx, byte [rdi + rsi*4 + 0x140a]
shl rcx, 8
add rcx, rax
movzx eax, byte [rdi + rsi*4 + 0x1408]
shl rcx, 8
add rcx, rax
movzx eax, byte [rdi + rsi*4 + 0x1407]
shl rcx, 8
add rcx, rax
shl rcx, 0x10
shr rcx, 0x15
jmp 0x140069efd
cmp eax, 3
je 0x140069ea6
cmp eax, ebp
jmp 0x140069747
cmp eax, 0xf
jne 0x140069f6e
cmp dword [rdi + 0x1818], ebp
je 0x14006974d
movzx eax, byte [rdi + rsi*4 + 0x1409]
movzx ecx, byte [rdi + rsi*4 + 0x140a]
shl rcx, 8
add rcx, rax
movzx eax, byte [rdi + rsi*4 + 0x1408]
shl rcx, 8
add rcx, rax
movzx eax, byte [rdi + rsi*4 + 0x1407]
shl rcx, 8
add rcx, rax
movzx eax, byte [rdi + rsi*4 + 0x1406]
shl rcx, 8
add rcx, rax
movzx eax, byte [rdi + rsi*4 + 0x1405]
shl rcx, 8
add rcx, rax
shr rcx, 5
mov dword [rdi + 0x17d0], ecx
inc r14d
inc r15
inc r12d
cmp r12d, 0x1e
jl 0x14006935d
mov rdx, qword [rsp + 0x60]
test r14d, r14d
mov dword [rdi + 0x17a4], r14d
mov edi, r13d
setne dil
add rdx, 0xffffffffffffffe8
or eax, 0xffffffff
mov ecx, eax
lock xadd dword [rdx + 0x10], ecx
add ecx, eax
test ecx, ecx
jg 0x140069f4a
mov rcx, qword [rdx]
mov r8, qword [rcx]
call qword [rreloc.OLEAUT32.dll_VariantClear + 8]
mov rbx, qword [rsp + 0x68]
mov eax, edi
mov rbp, qword [rsp + 0x70]
mov rsi, qword [rsp + 0x78]
movaps xmm6, xmmword [rsp + 0x20]
add rsp, 0x30
pop r15
pop r14
pop r13
pop r12
pop rdi
ret
cmp eax, 5
je 0x140069ea6
cmp eax, 0x1a
je 0x140069ea6
cmp eax, 0x1d
ja 0x140069fac
mov ecx, 0x30b34c80
bt ecx, eax
jae 0x140069fac
mov eax, dword [rdi + 0x1818]
cmp eax, 1
je 0x140069e46
cmp eax, 3
jne 0x14006974d
jmp 0x140069ea6
cmp eax, 6
jne 0x140069fc2
cmp dword [rdi + 0x1818], ebp
jne 0x140069e46
jmp 0x14006974d
cmp eax, ebp
je 0x140069e46
cmp eax, 0xc
je 0x140069ea6
cmp eax, 0x12
je 0x140069ea6
cmp eax, 0xd
jne 0x140069f03
jmp 0x140069fb1
mov ecx, 0x80004005
call fcn.140002f7c
int3