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

Disassembly:
push 8
push 0x50
mov eax, 0x100089ed
call fcn.10008247
mov dword [ebp - 0x44], ecx
mov edx, dword [ebx + 8]
lea edi, [ebp - 0x24]
mov eax, dword [ebx + 0xc]
mov esi, edx
mov dword [ebp - 0x5c], edx
mov dword [ebp - 0x54], eax
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
mov dword [ebp - 0x18], edx
and dword [ebp - 4], 0
xorps xmm1, xmm1
mov esi, dword [ebp - 0x24]
mov eax, esi
sub eax, dword [ebp - 0x1c]
mov dword [ebp - 0x58], eax
cmp byte [esi], 0x2d
jne 0x10003580
inc esi
mov dl, 1
mov dword [ebp - 0x24], esi
jmp 0x10003582
xor dl, dl
mov al, byte [esi]
xorps xmm0, xmm0
and dword [ebp - 0x34], 0
mov byte [ebp - 0x27], dl
movlpd qword [ebp - 0x50], xmm0
mov byte [ebp - 0x25], 0
cmp al, 0x30
jne 0x100035aa
and dword [ebp - 0x40], 0
lea edi, [esi + 1]
mov dword [ebp - 0x24], edi
jmp 0x10003660
cmp al, 0x31
jl 0x10003b2c
cmp al, 0x39
jg 0x10003b2c
movsx eax, al
lea edi, [esi + 1]
mov cl, byte [edi]
sub eax, 0x30
mov dword [ebp - 0x24], edi
mov dword [ebp - 0x40], eax
test dl, dl
je 0x10003620
cmp cl, 0x30
jl 0x10003660
mov edx, edi
mov esi, edi
cmp cl, 0x39
ja 0x10003660
cmp eax, 0xccccccc
jb 0x100035f1
jne 0x10003615
mov edx, esi
cmp cl, 0x38
ja 0x10003615
imul ecx, eax, 0xa
lea edi, [edx + 1]
movsx eax, byte [edx]
mov esi, edi
add eax, 0xffffffd0
mov dword [ebp - 0x24], edi
mov edx, edi
add eax, ecx
mov cl, byte [edi]
inc dword [ebp - 0x34]
mov dword [ebp - 0x40], eax
cmp cl, 0x30
jge 0x100035dc
jmp 0x10003660
mov dl, 1
mov ecx, eax
xor eax, eax
mov byte [ebp - 0x25], dl
jmp 0x10003669
cmp cl, 0x30
jl 0x10003660
mov edx, edi
mov esi, edi
cmp cl, 0x39
jg 0x10003660
cmp eax, 0x19999999
jb 0x1000363e
jne 0x10003615
mov edx, esi
cmp cl, 0x35
jg 0x10003615
imul ecx, eax, 0xa
lea edi, [edx + 1]
movsx eax, byte [edx]
mov esi, edi
add eax, 0xffffffd0
mov dword [ebp - 0x24], edi
mov edx, edi
add eax, ecx
mov cl, byte [edi]
inc dword [ebp - 0x34]
mov dword [ebp - 0x40], eax
cmp cl, 0x30
jge 0x10003629
mov ecx, dword [ebp - 0x50]
mov eax, dword [ebp - 0x4c]
mov dl, byte [ebp - 0x25]
xor dh, dh
mov dword [ebp - 0x30], ecx
mov dword [ebp - 0x38], eax
mov byte [ebp - 0x26], dh
test dl, dl
je 0x10003797
mov dl, byte [edi]
cmp byte [ebp - 0x27], dh
je 0x1000371b
cmp dl, 0x30
jl 0x10003794
mov esi, edi
mov dword [ebp - 0x2c], esi
cmp dl, 0x39
ja 0x10003791
cmp eax, 0xccccccc
jb 0x100036c6
ja 0x100036af
cmp ecx, 0xcccccccc
jb 0x100036c6
cmp ecx, 0xcccccccc
jne 0x1000370a
cmp eax, 0xccccccc
jne 0x1000370a
mov esi, dword [ebp - 0x2c]
cmp dl, 0x38
ja 0x1000370a
movsx edi, byte [esi]
lea ecx, [esi + 1]
mov dword [ebp - 0x24], ecx
sub edi, 0x30
push 0xa
pop ecx
mul ecx
push 0xa
mov ecx, eax
xor esi, esi
mov eax, dword [ebp - 0x30]
pop edx
mul edx
add ecx, edx
add edi, eax
adc esi, ecx
inc dword [ebp - 0x34]
mov ecx, edi
mov eax, esi
mov edi, dword [ebp - 0x24]
mov esi, edi
mov dword [ebp - 0x30], ecx
mov dword [ebp - 0x38], eax
mov dword [ebp - 0x2c], edi
mov dl, byte [edi]
cmp dl, 0x30
jge 0x10003695
jmp 0x10003791
mov edx, eax
call fcn.100087c0
mov dh, 1
movaps xmm1, xmm0
mov byte [ebp - 0x26], dh
jmp 0x10003794
cmp dl, 0x30
jl 0x10003794
mov esi, edi
mov dword [ebp - 0x2c], esi
cmp dl, 0x39
ja 0x10003791
cmp eax, 0x19999999
jb 0x10003752
ja 0x1000373b
cmp ecx, 0x99999999
jb 0x10003752
cmp ecx, 0x99999999
jne 0x1000370a
cmp eax, 0x19999999
jne 0x1000370a
mov esi, dword [ebp - 0x2c]
cmp dl, 0x35
ja 0x1000370a
movsx edi, byte [esi]
lea ecx, [esi + 1]
mov dword [ebp - 0x24], ecx
sub edi, 0x30
push 0xa
pop ecx
mul ecx
push 0xa
mov ecx, eax
xor esi, esi
mov eax, dword [ebp - 0x30]
pop edx
mul edx
add ecx, edx
add edi, eax
adc esi, ecx
inc dword [ebp - 0x34]
mov ecx, edi
mov eax, esi
mov edi, dword [ebp - 0x24]
mov esi, edi
mov dword [ebp - 0x30], ecx
mov dword [ebp - 0x38], eax
mov dword [ebp - 0x2c], edi
mov dl, byte [edi]
cmp dl, 0x30
jge 0x10003725
mov dh, byte [ebp - 0x26]
mov dl, byte [ebp - 0x25]
test dh, dh
je 0x100037cf
mov al, byte [edi]
cmp al, 0x30
jl 0x100037cf
mov ecx, edi
cmp al, 0x39
ja 0x100037cc
movsx eax, byte [ecx]
lea edi, [ecx + 1]
mulsd xmm1, qword [0x1000a3b0]
sub eax, 0x30
mov ecx, edi
movd xmm0, eax
mov al, byte [edi]
cvtdq2pd xmm0, xmm0
addsd xmm1, xmm0
cmp al, 0x30
jge 0x100037a3
mov dword [ebp - 0x24], edi
mov al, byte [edi]
and dword [ebp - 0x2c], 0
cmp al, 0x2e
jne 0x100037dd
inc edi
mov dword [ebp - 0x24], edi
mov esi, edi
cmp al, 0x2e
jne 0x10003886
mov al, byte [esi]
cmp al, 0x30
jl 0x100038ab
cmp al, 0x39
jg 0x100038ab
test dh, dh
jne 0x1000381c
test dl, dl
je 0x10003809
mov ecx, dword [ebp - 0x30]
mov edx, dword [ebp - 0x38]
jmp 0x1000380e
mov ecx, dword [ebp - 0x40]
xor edx, edx
call fcn.100087c0
movaps xmm1, xmm0
mov byte [ebp - 0x26], 1
jmp 0x1000381f
mov byte [ebp - 0x26], dh
mov cl, byte [edi]
mov eax, esi
mov dword [ebp - 0x4c], esi
mov edx, esi
mov edi, esi
mov esi, edx
cmp cl, 0x39
jg 0x10003883
mov edx, dword [ebp - 0x34]
cmp edx, 0x11
jge 0x1000386e
mulsd xmm1, qword [0x1000a3b0]
lea esi, [eax + 1]
movsx eax, byte [eax]
mov ecx, esi
sub eax, 0x30
mov dword [ebp - 0x24], ecx
dec dword [ebp - 0x2c]
movd xmm0, eax
cvtdq2pd xmm0, xmm0
addsd xmm1, xmm0
comisd xmm1, xmmword [0x1000a3a0]
jbe 0x10003876
inc edx
mov dword [ebp - 0x34], edx
jmp 0x10003876
lea esi, [edi + 1]
mov ecx, esi
mov dword [ebp - 0x24], ecx
mov cl, byte [ecx]
mov eax, esi
mov edi, eax
mov edx, eax
cmp cl, 0x30
jge 0x1000382a
mov dh, byte [ebp - 0x26]
xor ecx, ecx
cmp byte [esi], 0x65
je 0x10003896
cmp byte [esi], 0x45
jne 0x1000395f
inc esi
mov dword [ebp - 0x24], esi
test dh, dh
jne 0x100038c9
cmp byte [ebp - 0x25], cl
je 0x100038b8
mov ecx, dword [ebp - 0x30]
mov edx, dword [ebp - 0x38]
jmp 0x100038bd
mov eax, dword [ebp - 0x44]
add eax, 0x18
push 0xe
jmp 0x10003b31
mov ecx, dword [ebp - 0x40]
xor edx, edx
call fcn.100087c0
movaps xmm1, xmm0
mov byte [ebp - 0x26], 1
xor dl, dl
cmp byte [esi], 0x2b
je 0x100038d7
cmp byte [esi], 0x2d
jne 0x100038db
inc dl
inc esi
mov dword [ebp - 0x24], esi
mov cl, byte [esi]
mov al, cl
sub al, 0x30
cmp al, 9
ja 0x100039f9
inc esi
movsx ecx, cl
sub ecx, 0x30
mov dword [ebp - 0x24], esi
mov al, byte [esi]
mov byte [ebp - 0x39], al
test dl, dl
je 0x100039b1
mov eax, dword [ebp - 0x2c]
add eax, 0x7ffffff7
push 0xa
pop edi
cdq
idiv edi
cmp byte [ebp - 0x39], 0x30
mov edi, eax
mov dword [ebp - 0x4c], edi
jl 0x1000395d
mov dl, byte [esi]
cmp dl, 0x39
jg 0x1000395d
movsx eax, byte [esi]
lea edx, [esi + 1]
imul ecx, ecx, 0xa
mov esi, edx
mov dword [ebp - 0x24], edx
add ecx, 0xffffffd0
add ecx, eax
cmp ecx, edi
jle 0x10003956
mov al, byte [edx]
cmp al, 0x30
jl 0x10003956
mov edi, edx
cmp al, 0x39
ja 0x10003950
lea esi, [edi + 1]
mov edx, esi
mov edi, esi
mov al, byte [edx]
cmp al, 0x30
jge 0x1000393f
mov edi, dword [ebp - 0x4c]
mov dword [ebp - 0x24], edx
mov dl, byte [edx]
cmp dl, 0x30
jge 0x1000391b
neg ecx
mov edx, dword [ebp - 0x2c]
mov al, byte [ebp - 0x26]
test al, al
je 0x10003a59
lea eax, [ecx + edx]
mov edx, 0xfffffecc
cmp eax, edx
jge 0x10003981
divsd xmm1, qword [0x1000a3c0]
lea ecx, [eax + 0x134]
movaps xmm0, xmm1
cmovge ecx, eax
call fcn.10002aa0
comisd xmm0, xmmword [0x1000a3c8]
jbe 0x10003a08
mov eax, dword [ebp - 0x44]
mov dword [eax + 0x18], 0xd
mov esi, dword [ebp - 0x58]
mov dword [eax + 0x1c], esi
jmp 0x10003b40
mov edx, dword [ebp - 0x2c]
mov edi, 0x134
sub edi, edx
cmp al, 0x30
jl 0x10003962
cmp al, 0x39
jg 0x1000395f
movsx eax, byte [esi]
lea edx, [esi + 1]
imul ecx, ecx, 0xa
mov dword [ebp - 0x24], edx
add ecx, 0xffffffd0
add ecx, eax
cmp ecx, edi
jg 0x100039e5
mov al, byte [edx]
mov esi, edx
cmp al, 0x30
jge 0x100039bf
jmp 0x1000395f
mov eax, dword [ebp - 0x44]
mov esi, dword [ebp - 0x58]
add eax, 0x18
push 0xd
pop ecx
lea edx, [eax + 4]
jmp 0x10003b3c
mov eax, dword [ebp - 0x44]
sub esi, dword [ebp - 0x1c]
mov dword [eax + 0x18], 0xf
jmp 0x100039a9
cmp byte [ebp - 0x27], 0
je 0x10003a15
xorps xmm0, xmmword [0x1000a3f0]
mov edi, dword [ebp - 0x54]
movsd qword [ebp - 0x50], xmm0
mov eax, dword [edi + 0x28]
sub eax, dword [edi + 0x24]
cmp eax, 0x10
jge 0x10003a36
push ecx
lea ecx, [edi + 0x18]
call fcn.10003f6e
movsd xmm0, qword [ebp - 0x50]
mov ecx, dword [edi + 0x24]
lea eax, [ecx + 0x10]
mov dword [edi + 0x24], eax
xor eax, eax
mov edi, ecx
stosd dword es:[edi], eax
stosd dword es:[edi], eax
stosd dword es:[edi], eax
stosd dword es:[edi], eax
mov eax, 0x216
movsd qword [ecx], xmm0
mov word [ecx + 0xe], ax
jmp 0x10003b40
cmp byte [ebp - 0x25], 0
je 0x10003aa3
cmp byte [ebp - 0x27], 0
je 0x10003a7e
mov ecx, dword [ebp - 0x30]
mov eax, dword [ebp - 0x38]
neg ecx
adc eax, 0
neg eax
push eax
push ecx
mov ecx, dword [ebp - 0x54]
call fcn.10003d3a
jmp 0x10003a8c
push dword [ebp - 0x38]
mov ecx, dword [ebp - 0x54]
push dword [ebp - 0x30]
call fcn.10003cb9
test al, al
jne 0x10003b40
mov eax, dword [ebp - 0x44]
mov dword [eax + 0x18], 0x10
jmp 0x100039a6
mov edi, dword [ebp - 0x54]
mov eax, dword [edi + 0x28]
sub eax, dword [edi + 0x24]
cmp byte [ebp - 0x27], 0
je 0x10003af2
mov esi, dword [ebp - 0x40]
neg esi
cmp eax, 0x10
jge 0x10003ac5
push ecx
lea ecx, [edi + 0x18]
call fcn.10003f6e
mov ecx, dword [edi + 0x24]
lea eax, [ecx + 0x10]
mov dword [edi + 0x24], eax
xor eax, eax
mov edi, ecx
test esi, esi
stosd dword es:[edi], eax
stosd dword es:[edi], eax
stosd dword es:[edi], eax
stosd dword es:[edi], eax
mov eax, esi
cdq
mov dword [ecx], eax
mov eax, 0xb6
mov dword [ecx + 4], edx
mov edx, 0x1f6
cmovns eax, edx
jmp 0x10003a50
cmp eax, 0x10
jge 0x10003b00
push ecx
lea ecx, [edi + 0x18]
call fcn.10003f6e
mov ecx, dword [edi + 0x24]
lea eax, [ecx + 0x10]
mov dword [edi + 0x24], eax
xor eax, eax
mov edi, ecx
stosd dword es:[edi], eax
stosd dword es:[edi], eax
stosd dword es:[edi], eax
stosd dword es:[edi], eax
mov eax, dword [ebp - 0x40]
and dword [ecx + 4], 0
mov dword [ecx], eax
shr eax, 0x1a
not eax
and eax, 0x20
or eax, 0x1d6
jmp 0x10003a50
lea eax, [ecx + 0x18]
push 3
sub esi, dword [ebp - 0x1c]
mov edx, eax
pop ecx
push 4
pop edi
add edx, edi
mov dword [eax], ecx
mov dword [edx], esi
mov edi, dword [ebp - 0x5c]
lea esi, [ebp - 0x24]
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
movsd dword es:[edi], dword [esi]
mov ecx, dword [ebp - 0x14]
call fcn.10008225
ret 8