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

Disassembly:
push ebp
mov ebp, esp
push ebx
push edi
push esi
and esp, 0xfffffff0
sub esp, 0xa0
mov eax, dword [0x1026f864]
mov ecx, 0x7fffffff
mov edx, dword [ebp + 8]
mov esi, dword [ebp + 0xc]
xorps xmm0, xmm0
xor eax, ebp
mov dword [esp + 0x98], eax
xor eax, eax
movaps xmmword [esp + 0x70], xmm0
movaps xmmword [esp + 0x60], xmm0
mov dword [esp + 0x80], 0
dec eax
add eax, 1
adc ecx, 0
cmp dword [ebp + 0x10], 0
mov dword [edx], eax
mov dword [edx + 4], ecx
je 0x100652fc
xor eax, eax
cmp byte [esi], 0x2d
lea edi, [esi + 1]
sete al
cmovne edi, esi
lea esi, [esp + 0x60]
mov dword [esp + 0x10], eax
push esi
push str._J:_M:_S
push edi
call fcn.10064cf0
add esp, 0xc
test eax, eax
je 0x1006537d
mov ebx, eax
mov eax, dword [esp + 0x68]
jmp 0x1006539c
call fcn.1006a6a0
mov ebx, eax
mov edi, edx
push 0
push 0xf4240
push edx
push eax
call fcn.101e07d0
mov dword [esp + 0x94], edx
mov dword [esp + 0x90], eax
push 0x10230796
push esi
call fcn.100595c0
add esp, 8
test eax, eax
je 0x100653c3
lea edi, [esp + 0x60]
push edi
push str._Y____m____d
push esi
call fcn.10064cf0
add esp, 0xc
test eax, eax
jne 0x1006535d
push edi
push str._Y_m_d
push esi
call fcn.10064cf0
add esp, 0xc
xor ebx, ebx
test eax, eax
cmovne esi, eax
sete cl
mov al, byte [esi]
mov edx, eax
or dl, 0x20
cmp dl, 0x74
jne 0x10065419
inc esi
jmp 0x1006543a
push esi
push str._M:_S
push edi
call fcn.10064cf0
add esp, 0xc
test eax, eax
mov dword [esp + 0x68], 0
je 0x100653d2
mov ebx, eax
xor eax, eax
imul esi, dword [esp + 0x64], 0x3c
imul eax, eax, 0xe10
add esi, eax
add esi, dword [esp + 0x60]
mov eax, esi
sar eax, 0x1f
mov dword [esp + 0xc], eax
mov dword [esp + 4], 0
jmp 0x10065474
mov eax, dword [ebp + 8]
mov dword [eax + 4], edi
mov dword [eax], ebx
xor edi, edi
jmp 0x1006584d
call fcn.101ed23c
lea ebx, [esp + 0x30]
mov dword [eax], 0
push 0xa
push ebx
push edi
call fcn.101ef537
add esp, 0xc
mov ebx, dword [ebx]
cmp ebx, edi
je 0x10065672
mov esi, eax
mov dword [esp + 0xc], edx
call fcn.101ed23c
cmp dword [eax], 0x22
mov edi, 0xffffffde
je 0x1006584d
test ebx, ebx
jne 0x100653b6
jmp 0x10065672
mov edx, 0x80001b
movsx ebx, al
add ebx, 0xfffffff7
cmp ebx, 0x17
ja 0x10065434
bt edx, ebx
jae 0x10065434
mov al, byte [esi + 1]
inc esi
jmp 0x1006541e
cmp al, 0xb
je 0x1006542e
xor ebx, ebx
mov bl, cl
mov dword [esp + 4], ebx
push edi
push 0x10230764
push esi
call fcn.10064cf0
add esp, 0xc
test eax, eax
mov dword [esp + 0x10], 0
jne 0x10065472
push edi
push str._H_M_S
push esi
call fcn.10064cf0
add esp, 0xc
test eax, eax
je 0x10065672
mov ebx, eax
mov al, byte [ebx]
xor edi, edi
cmp al, 0x2e
jne 0x1006551e
movsx eax, byte [ebx + 1]
add eax, 0xffffffd0
cmp eax, 9
jbe 0x10065491
inc ebx
xor edi, edi
jmp 0x10065510
imul edi, eax, 0x186a0
movsx eax, byte [ebx + 2]
add eax, 0xffffffd0
cmp eax, 0xa
jb 0x100654a8
add ebx, 2
jmp 0x10065510
imul eax, eax, 0x2710
add edi, eax
movsx eax, byte [ebx + 3]
add eax, 0xffffffd0
cmp eax, 9
jbe 0x100654c1
add ebx, 3
jmp 0x10065510
imul eax, eax, 0x3e8
add edi, eax
movsx eax, byte [ebx + 4]
add eax, 0xffffffd0
cmp eax, 9
jbe 0x100654da
add ebx, 4
jmp 0x10065510
imul eax, eax, 0x64
add edi, eax
movsx eax, byte [ebx + 5]
add eax, 0xffffffd0
cmp eax, 9
jbe 0x100654f0
add ebx, 5
jmp 0x10065510
movsx edx, byte [ebx + 6]
lea eax, [eax + eax*4]
lea ecx, [ebx + 6]
add ebx, 7
lea eax, [edi + eax*2]
xor edi, edi
add edx, 0xffffffd0
cmp edx, 9
cmovbe edi, edx
cmova ebx, ecx
add edi, eax
dec ebx
movsx eax, byte [ebx + 1]
inc ebx
lea ecx, [eax - 0x30]
cmp ecx, 0xa
jb 0x10065511
cmp dword [ebp + 0x10], 0
je 0x10065564
cmp al, 0x75
je 0x10065641
cmp al, 0x6d
jne 0x1006565c
cmp byte [ebx + 1], 0x73
jne 0x1006565c
mov ecx, 0x10624dd3
mov eax, edi
add ebx, 2
imul ecx
mov ecx, ebx
mov eax, edx
sar edx, 6
shr eax, 0x1f
add edx, eax
mov eax, 0x3e8
mov dword [esp + 8], edx
jmp 0x100657d1
and al, 0xdf
xor edx, edx
mov dword [esp + 8], edi
cmp al, 0x5a
sete dl
add ebx, edx
cmp dword [esp + 4], 0
jne 0x1006561d
cmp al, 0x5a
je 0x1006561d
mov cl, byte [ebx]
cmp cl, 0x2d
je 0x10065596
cmp cl, 0x2b
jne 0x1006561d
lea esi, [esp + 0x30]
xorps xmm0, xmm0
movaps xmmword [esi + 0x10], xmm0
movaps xmmword [esi], xmm0
mov dword [esi + 0x20], 0
mov al, byte [ebx]
inc ebx
mov byte [esp + 4], al
push esi
push str._H:_M
push ebx
call fcn.10064cf0
add esp, 0xc
test eax, eax
jne 0x100655ef
push esi
push str._H_M
push ebx
call fcn.10064cf0
add esp, 0xc
test eax, eax
jne 0x100655ef
push esi
push 0x10230793
push ebx
call fcn.10064cf0
add esp, 0xc
test eax, eax
je 0x10065672
imul ecx, dword [esp + 0x38], 0x3c
mov dword [esp + 0x80], 0
mov ebx, eax
add ecx, dword [esp + 0x34]
mov edx, ecx
neg edx
cmp byte [esp + 4], 0x2b
cmovne edx, ecx
imul ecx, edx, 0x3c
mov dword [esp + 4], ecx
jmp 0x100656e6
cmp dword [esp + 4], 0
je 0x100656c6
cmp al, 0x5a
jne 0x1006567c
lea eax, [esp + 0x90]
push eax
call fcn.101ed304
add esp, 4
xor edx, edx
inc edx
jmp 0x1006568e
cmp byte [ebx + 1], 0x73
jne 0x1006565c
add ebx, 2
xor eax, eax
mov dword [esp + 8], 0
inc eax
mov ecx, ebx
jmp 0x100657d1
cmp al, 0x73
lea ecx, [ebx + 1]
mov eax, 0xf4240
mov dword [esp + 8], edi
cmovne ecx, ebx
jmp 0x100657d1
mov edi, 0xffffffea
jmp 0x1006584d
lea eax, [esp + 0x90]
push eax
call fcn.101eddba
add esp, 4
xor edx, edx
test eax, eax
je 0x100656a3
mov esi, eax
lea eax, [esp + 0x30]
mov ecx, 9
mov edi, eax
rep movsd dword es:[edi], dword [esi]
jmp 0x100656a5
xor eax, eax
movsd xmm0, qword [eax + 0x1c]
movsd xmm1, qword [eax + 0xc]
movsd xmm2, qword [eax + 0x14]
movsd qword [esp + 0x6c], xmm1
movsd qword [esp + 0x74], xmm2
movsd qword [esp + 0x7c], xmm0
xor eax, eax
test edx, edx
mov dword [esp + 4], 0
sete al
neg eax
test edx, edx
mov dword [esp + 0x80], eax
je 0x100657ac
mov edx, dword [esp + 0x70]
xor esi, esi
mov ecx, dword [esp + 0x74]
xor eax, eax
mov edi, 0xd
inc esi
cmp edx, 2
cmovge edi, esi
setl al
add edi, edx
sub ecx, eax
mov edx, 0x66666667
imul eax, edi, 0x99
lea esi, [ecx + 0x76c]
add ecx, 0x76f
add eax, 0xfffffe37
mov dword [esp + 0x14], esi
imul edx
mov eax, edx
sar edx, 1
shr eax, 0x1f
add edx, eax
mov eax, esi
imul esi, esi, 0x16d
mov dword [esp + 0xc], edx
test eax, eax
mov edx, 0xae147ae1
cmovns ecx, eax
imul edx
add esi, dword [esp + 0x6c]
mov edi, edx
mov eax, edx
mov edx, 0x51eb851f
sar ecx, 2
shr eax, 0x1f
sar edi, 5
add edi, eax
mov eax, dword [esp + 0x14]
add esi, ecx
mov ecx, 0x15180
add esi, edi
mov edi, dword [esp + 4]
imul edx
mov eax, edx
sar edx, 7
shr eax, 0x1f
add edx, eax
mov eax, dword [esp + 0xc]
add esi, edx
lea eax, [esi + eax - 0xafa6d]
imul esi, dword [esp + 0x64], 0x3c
imul ecx
mov ecx, edx
imul edx, dword [esp + 0x68], 0xe10
add esi, edx
add esi, dword [esp + 0x60]
mov edx, esi
sar edx, 0x1f
add esi, eax
adc edx, ecx
jmp 0x100657bd
lea eax, [esp + 0x60]
xor edi, edi
push eax
call fcn.101ee35d
add esp, 4
mov esi, eax
mov eax, edi
mov ecx, ebx
sar eax, 0x1f
add esi, edi
adc eax, edx
mov dword [esp + 0xc], eax
mov eax, 0xf4240
cmp byte [ecx], 0
mov edi, 0xffffffea
jne 0x1006584d
push 0
push eax
push 0x7fffffff
push 0xffffffffffffffff
mov ebx, eax
call fcn.101e0940
cmp eax, esi
mov eax, dword [esp + 0xc]
mov edi, 0xffffffde
sbb edx, eax
jl 0x1006584d
imul eax, ebx
mov ecx, ebx
mov ebx, eax
mov eax, esi
mov esi, dword [esp + 8]
mul ecx
add ebx, edx
mov ecx, esi
sar ecx, 0x1f
xor edx, edx
dec edx
sub edx, esi
mov esi, 0x7fffffff
sbb esi, ecx
cmp edx, eax
sbb esi, ebx
jl 0x1006584d
add eax, dword [esp + 8]
mov esi, ebx
mov edx, ebx
mov edx, 0
mov ebx, eax
adc esi, ecx
xor edi, edi
neg ebx
sbb edx, esi
cmp dword [esp + 0x10], 0
cmove edx, esi
mov esi, dword [ebp + 8]
cmove ebx, eax
mov dword [esi], ebx
mov dword [esi + 4], edx
mov ecx, dword [esp + 0x98]
xor ecx, ebp
call fcn.101e05ab
mov eax, edi
lea esp, [ebp - 0xc]
pop esi
pop edi
pop ebx
pop ebp
ret