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

Disassembly:
push ebp
mov ebp, esp
and esp, 0xfffffff8
sub esp, 0x38
push esi
push edi
mov edi, dword [ebp + 8]
mov edx, ecx
xorps xmm0, xmm0
mov dword [esp + 0x24], edx
movsd qword [esp + 0x38], xmm0
mov eax, dword [edi + 0x18]
mov ecx, eax
sub ecx, dword [edi + 0xc]
sar ecx, 1
add ecx, dword [edi + 0x20]
cmp word [eax], 0x2d
mov dword [esp + 0x28], ecx
jne 0x428d06
mov ecx, edi
call fcn.00427090
mov edx, dword [esp + 0x24]
mov byte [esp + 0xe], 1
jmp 0x428d0b
mov byte [esp + 0xe], 0
mov eax, dword [edi + 0x18]
xorps xmm0, xmm0
movlpd qword [esp + 0x30], xmm0
mov byte [esp + 0xd], 0
mov dword [esp + 0x1c], 0
movzx ecx, word [eax]
mov esi, ecx
cmp ecx, 0x30
jne 0x428d55
xor esi, esi
mov ecx, edi
mov dword [esp + 0x20], esi
call fcn.00427090
mov eax, dword [esp + 0x34]
mov dword [esp + 0x10], eax
mov eax, dword [esp + 0x30]
mov byte [esp + 0xc], 0
mov dword [esp + 0x14], eax
jmp 0x428fba
cmp ecx, 0x31
jb 0x429599
cmp ecx, 0x39
ja 0x429599
mov ecx, edi
call fcn.00427090
mov ecx, dword [edi + 0x18]
sub esi, 0x30
cmp byte [esp + 0xe], 0
mov dword [esp + 0x20], esi
movzx eax, word [ecx]
mov edx, eax
je 0x428e0b
cmp eax, 0x30
jb 0x428dd9
nop dword [eax]
movzx eax, dx
mov edx, eax
mov dword [esp + 0x2c], edx
cmp eax, 0x39
ja 0x428dd9
cmp esi, 0xccccccc
jb 0x428dad
jne 0x428df4
cmp eax, 0x38
ja 0x428df4
mov ecx, edi
call fcn.00427090
mov eax, dword [esp + 0x2c]
lea ecx, [esi - 6]
inc dword [esp + 0x1c]
lea ecx, [esi + ecx*4]
movzx eax, ax
lea esi, [eax + ecx*2]
mov ecx, dword [edi + 0x18]
mov dword [esp + 0x20], esi
movzx eax, word [ecx]
mov edx, eax
cmp eax, 0x30
jae 0x428d90
mov eax, dword [esp + 0x34]
mov dword [esp + 0x10], eax
mov eax, dword [esp + 0x30]
mov esi, eax
mov edx, dword [esp + 0x10]
mov dword [esp + 0x14], eax
jmp 0x428e71
mov dword [esp + 0x10], 0
mov edx, dword [esp + 0x10]
mov dword [esp + 0x14], esi
mov byte [esp + 0xd], 1
jmp 0x428e71
cmp eax, 0x30
jb 0x428e61
movzx eax, dx
mov edx, eax
mov dword [esp + 0x2c], edx
cmp eax, 0x39
ja 0x428e61
cmp esi, 0x19999999
jb 0x428e35
jne 0x42902d
cmp eax, 0x35
ja 0x42902d
mov ecx, edi
call fcn.00427090
mov eax, dword [esp + 0x2c]
lea ecx, [esi - 6]
inc dword [esp + 0x1c]
lea ecx, [esi + ecx*4]
movzx eax, ax
lea esi, [eax + ecx*2]
mov ecx, dword [edi + 0x18]
mov dword [esp + 0x20], esi
movzx eax, word [ecx]
mov edx, eax
cmp eax, 0x30
jae 0x428e10
mov esi, dword [esp + 0x30]
mov edx, dword [esp + 0x34]
mov dword [esp + 0x10], edx
mov dword [esp + 0x14], esi
cmp byte [esp + 0xd], 0
mov byte [esp + 0xc], 0
mov dword [esp + 0x18], ecx
je 0x428f61
cmp byte [esp + 0xe], 0
mov dword [esp + 0x18], ecx
je 0x429058
cmp word [ecx], 0x30
jb 0x428f61
movzx eax, word [ecx]
mov dword [esp + 0x2c], eax
mov dword [esp + 0x18], ecx
nop dword [eax]
mov eax, dword [esp + 0x2c]
movzx eax, ax
mov ecx, eax
mov dword [esp + 0x2c], ecx
cmp eax, 0x39
ja 0x428f61
cmp edx, 0xccccccc
jb 0x428ef9
ja 0x428ed8
cmp esi, 0xcccccccc
jb 0x428ef9
cmp esi, 0xcccccccc
jne 0x429039
cmp edx, 0xccccccc
jne 0x429039
cmp eax, 0x38
ja 0x429039
mov ecx, edi
call fcn.00427090
mov eax, dword [esp + 0x2c]
xor edx, edx
mov ecx, dword [esp + 0x10]
movzx esi, ax
mov eax, dword [esp + 0x14]
sub esi, 0x30
shld ecx, eax, 2
shl eax, 2
add dword [esp + 0x14], eax
mov eax, dword [esp + 0x14]
adc dword [esp + 0x10], ecx
mov ecx, dword [esp + 0x10]
shld ecx, eax, 1
add eax, eax
add esi, eax
mov dword [esp + 0x14], esi
adc edx, ecx
mov ecx, dword [edi + 0x18]
inc dword [esp + 0x1c]
mov dword [esp + 0x10], edx
mov dword [esp + 0x18], ecx
movzx eax, word [ecx]
mov edi, eax
mov dword [esp + 0x2c], edi
mov edi, dword [ebp + 8]
cmp eax, 0x30
jae 0x428eb0
mov dword [esp + 0x18], ecx
mov ecx, dword [esp + 0x18]
cmp byte [esp + 0xc], 0
je 0x428fb6
cmp word [ecx], 0x30
jb 0x428fb6
movzx ecx, word [ecx]
movzx eax, cx
mov esi, eax
cmp eax, 0x39
ja 0x428fb6
mov ecx, edi
call fcn.00427090
movsd xmm1, qword [esp + 0x38]
lea eax, [esi - 0x30]
mulsd xmm1, qword [0x4f4ff8]
movd xmm0, eax
mov eax, dword [edi + 0x18]
cvtdq2pd xmm0, xmm0
movzx eax, word [eax]
mov ecx, eax
addsd xmm1, xmm0
movsd qword [esp + 0x38], xmm1
cmp eax, 0x30
jae 0x428f75
mov esi, dword [esp + 0x20]
mov edx, dword [edi + 0x18]
mov dword [esp + 0x18], 0
cmp word [edx], 0x2e
jne 0x4291c5
mov ecx, edi
call fcn.00427090
mov edx, dword [edi + 0x18]
mov dword [esp + 0x2c], edx
movzx eax, word [edx]
mov ecx, eax
mov dword [esp + 0x30], ecx
cmp eax, 0x30
jb 0x4291f9
cmp eax, 0x39
ja 0x4291f9
mov al, byte [esp + 0xc]
test al, al
jne 0x429148
cmp byte [esp + 0xd], al
je 0x429130
mov ecx, dword [esp + 0x14]
mov edx, dword [esp + 0x10]
call fcn.004c6f00
mov edx, dword [esp + 0x2c]
mov ecx, dword [esp + 0x30]
mov byte [esp + 0xc], 1
jmp 0x429152
xor edx, edx
mov byte [esp + 0xd], 1
jmp 0x428e69
mov ecx, esi
call fcn.004c6f00
mov eax, dword [esp + 0x18]
movsd qword [esp + 0x38], xmm0
mov byte [esp + 0xc], 1
mov dword [esp + 0x18], eax
jmp 0x428f61
cmp word [ecx], 0x30
jb 0x428f61
movzx eax, word [ecx]
mov dword [esp + 0x18], ecx
nop dword [eax]
movzx eax, ax
mov edi, eax
mov dword [esp + 0x2c], edi
mov edi, dword [ebp + 8]
cmp eax, 0x39
ja 0x428f65
cmp edx, 0x19999999
jb 0x4290ac
ja 0x429097
cmp esi, 0x99999999
jb 0x4290ac
cmp esi, 0x99999999
jne 0x429115
cmp edx, 0x19999999
jne 0x429115
cmp eax, 0x35
ja 0x429115
mov ecx, edi
call fcn.00427090
mov eax, dword [esp + 0x2c]
xor edx, edx
mov ecx, dword [esp + 0x10]
movzx esi, ax
mov eax, dword [esp + 0x14]
sub esi, 0x30
shld ecx, eax, 2
shl eax, 2
add dword [esp + 0x14], eax
mov eax, dword [esp + 0x14]
adc dword [esp + 0x10], ecx
mov ecx, dword [esp + 0x10]
shld ecx, eax, 1
add eax, eax
add esi, eax
mov dword [esp + 0x14], esi
adc edx, ecx
mov ecx, dword [edi + 0x18]
inc dword [esp + 0x1c]
mov dword [esp + 0x10], edx
mov dword [esp + 0x18], ecx
movzx eax, word [ecx]
mov edi, eax
mov dword [esp + 0x2c], edi
mov edi, dword [ebp + 8]
cmp eax, 0x30
jb 0x428fb6
jmp 0x429070
mov ecx, esi
call fcn.004c6f00
mov ecx, dword [esp + 0x18]
movsd qword [esp + 0x38], xmm0
mov byte [esp + 0xc], 1
jmp 0x428f6c
mov ecx, esi
xor edx, edx
call fcn.004c6f00
mov edx, dword [esp + 0x2c]
mov ecx, dword [esp + 0x30]
mov byte [esp + 0xc], 1
jmp 0x429152
movsd xmm0, qword [esp + 0x38]
mov byte [esp + 0xc], al
movsd qword [esp + 0x38], xmm0
movzx ecx, cx
nop dword [eax + eax]
movzx eax, cx
mov ecx, eax
mov dword [esp + 0x30], ecx
cmp eax, 0x39
ja 0x4291c5
mov ecx, edi
call fcn.00427090
cmp dword [esp + 0x1c], 0x11
jge 0x4291b8
mov ecx, dword [esp + 0x30]
movsd xmm1, qword [esp + 0x38]
mulsd xmm1, qword [0x4f4ff8]
dec dword [esp + 0x18]
movzx eax, cx
sub eax, 0x30
movd xmm0, eax
cvtdq2pd xmm0, xmm0
addsd xmm1, xmm0
comisd xmm1, xmmword [0x4f4fd0]
movsd qword [esp + 0x38], xmm1
jbe 0x4291b8
inc dword [esp + 0x1c]
mov edx, dword [edi + 0x18]
movzx eax, word [edx]
mov ecx, eax
cmp eax, 0x30
jae 0x429160
movzx eax, word [edx]
xor ecx, ecx
mov edx, eax
cmp eax, 0x65
je 0x4291da
cmp edx, 0x45
jne 0x429345
mov ecx, edi
call fcn.00427090
cmp byte [esp + 0xc], 0
jne 0x42922b
cmp byte [esp + 0xd], 0
je 0x429217
mov ecx, dword [esp + 0x14]
mov edx, dword [esp + 0x10]
jmp 0x42921b
sub edx, dword [edi + 0xc]
mov eax, dword [esp + 0x24]
sar edx, 1
add edx, dword [edi + 0x20]
mov dword [eax + 0x18], 0xe
mov dword [eax + 0x1c], edx
pop edi
pop esi
mov esp, ebp
pop ebp
ret 8
mov ecx, esi
xor edx, edx
call fcn.004c6f00
movsd qword [esp + 0x38], xmm0
mov byte [esp + 0xc], 1
mov ecx, dword [edi + 0x18]
mov byte [esp + 0xf], 0
movzx eax, word [ecx]
mov edx, eax
cmp eax, 0x2b
jne 0x42924c
mov ecx, edi
call fcn.00427090
mov ecx, dword [edi + 0x18]
movzx eax, word [ecx]
jmp 0x429267
cmp edx, 0x2d
jne 0x429265
mov ecx, edi
call fcn.00427090
mov ecx, dword [edi + 0x18]
mov byte [esp + 0xf], 1
movzx eax, word [ecx]
jmp 0x429267
mov eax, edx
movzx eax, ax
mov dword [esp + 0x30], eax
add eax, 0xffffffd0
cmp ax, 9
ja 0x4293e6
mov ecx, edi
call fcn.00427090
mov eax, dword [esp + 0x30]
movzx ecx, ax
mov eax, dword [edi + 0x18]
sub ecx, 0x30
cmp byte [esp + 0xf], 0
mov dword [esp + 0x1c], ecx
movzx edx, word [eax]
mov dword [esp + 0x30], edx
je 0x429387
mov ecx, dword [esp + 0x18]
mov eax, 0x66666667
lea ecx, [ecx + 0x7ffffff7]
imul ecx
sar edx, 2
mov eax, edx
shr eax, 0x1f
add eax, edx
mov dword [esp + 0x2c], eax
mov eax, dword [esp + 0x30]
movzx ecx, ax
cmp ax, 0x30
jb 0x42933f
mov esi, dword [esp + 0x1c]
movzx eax, cx
mov ecx, eax
mov dword [esp + 0x30], ecx
cmp eax, 0x39
ja 0x429337
mov ecx, edi
call fcn.00427090
mov eax, dword [esp + 0x30]
lea esi, [esi + esi*4]
movzx eax, ax
lea esi, [esi - 0x18]
lea esi, [eax + esi*2]
cmp esi, dword [esp + 0x2c]
jle 0x42932a
mov eax, dword [edi + 0x18]
movzx eax, word [eax]
mov ecx, eax
cmp eax, 0x30
jb 0x42932a
nop dword [eax]
cmp cx, 0x39
ja 0x42932a
mov ecx, edi
call fcn.00427090
mov eax, dword [edi + 0x18]
movzx eax, word [eax]
mov ecx, eax
cmp eax, 0x30
jae 0x429310
mov eax, dword [edi + 0x18]
movzx eax, word [eax]
mov ecx, eax
cmp eax, 0x30
jae 0x4292d5
mov dword [esp + 0x1c], esi
mov esi, dword [esp + 0x20]
mov ecx, dword [esp + 0x1c]
neg ecx
cmp byte [esp + 0xc], 0
je 0x4294af
mov eax, dword [esp + 0x18]
movsd xmm0, qword [esp + 0x38]
add eax, ecx
cmp eax, 0xfffffecc
jge 0x429414
divsd xmm0, qword [0x4f5038]
add eax, 0x134
cmp eax, 0xfffffecc
jge 0x429404
xorps xmm0, xmm0
jmp 0x429434
mov eax, 0x134
sub eax, dword [esp + 0x18]
mov dword [esp + 0x2c], eax
movzx eax, dx
cmp edx, 0x30
jb 0x429345
nop dword [eax]
movzx eax, ax
mov edx, eax
mov dword [esp + 0x30], edx
cmp eax, 0x39
ja 0x429345
mov ecx, edi
call fcn.00427090
mov eax, dword [esp + 0x1c]
lea ecx, [eax + eax*4]
mov eax, dword [esp + 0x30]
movzx eax, ax
lea ecx, [ecx - 0x18]
lea ecx, [eax + ecx*2]
mov dword [esp + 0x1c], ecx
cmp ecx, dword [esp + 0x2c]
jg 0x42943e
mov eax, dword [edi + 0x18]
movzx eax, word [eax]
mov edx, eax
cmp eax, 0x30
jb 0x429345
jmp 0x4293a0
sub ecx, dword [edi + 0xc]
mov eax, dword [esp + 0x24]
sar ecx, 1
add ecx, dword [edi + 0x20]
mov dword [eax + 0x18], 0xf
mov dword [eax + 0x1c], ecx
pop edi
pop esi
mov esp, ebp
pop ebp
ret 8
shl eax, 3
mov ecx, 0x4efeb0
sub ecx, eax
divsd xmm0, qword [ecx]
jmp 0x429434
lea ecx, [eax*8]
test eax, eax
js 0x429429
mulsd xmm0, qword [ecx + 0x4efeb0]
jmp 0x429434
mov eax, 0x4efeb0
sub eax, ecx
divsd xmm0, qword [eax]
comisd xmm0, xmmword [0x4f5040]
jbe 0x429458
mov eax, dword [esp + 0x24]
mov ecx, dword [esp + 0x28]
mov dword [eax + 0x18], 0xd
mov dword [eax + 0x1c], ecx
pop edi
pop esi
mov esp, ebp
pop ebp
ret 8
cmp byte [esp + 0xe], 0
je 0x429466
xorps xmm0, xmmword [0x4f5090]
mov ecx, dword [ebp + 0xc]
mov eax, dword [ecx + 0x28]
lea esi, [ecx + 0x18]
sub eax, dword [esi + 0xc]
movsd qword [esp + 0x38], xmm0
cmp eax, 0x10
jge 0x429485
push ecx
mov ecx, esi
call fcn.00429940
mov ecx, dword [esi + 0xc]
xorps xmm0, xmm0
lea eax, [ecx + 0x10]
mov dword [esi + 0xc], eax
mov eax, 0x216
movups xmmword [ecx], xmm0
mov word [ecx + 0xe], ax
movsd xmm0, qword [esp + 0x38]
movsd qword [ecx], xmm0
pop edi
pop esi
mov esp, ebp
pop ebp
ret 8
cmp byte [esp + 0xd], 0
je 0x42950a
cmp byte [esp + 0xe], 0
je 0x4294d8
mov eax, dword [esp + 0x14]
mov ecx, dword [esp + 0x10]
neg eax
adc ecx, 0
neg ecx
push ecx
mov ecx, dword [ebp + 0xc]
push eax
call fcn.004296f0
jmp 0x4294e8
push dword [esp + 0x10]
mov ecx, dword [ebp + 0xc]
push dword [esp + 0x18]
call fcn.00429660
test al, al
jne 0x4295ab
mov eax, dword [esp + 0x24]
mov ecx, dword [esp + 0x28]
mov dword [eax + 0x18], 0x10
mov dword [eax + 0x1c], ecx
pop edi
pop esi
mov esp, ebp
pop ebp
ret 8
mov edi, dword [ebp + 0xc]
mov eax, dword [edi + 0x28]
lea ecx, [edi + 0x18]
sub eax, dword [edi + 0x24]
cmp byte [esp + 0xe], 0
je 0x42955c
neg esi
cmp eax, 0x10
jge 0x42952a
push ecx
call fcn.00429940
mov ecx, dword [edi + 0x24]
xorps xmm0, xmm0
test esi, esi
lea eax, [ecx + 0x10]
mov dword [edi + 0x24], eax
mov eax, esi
cdq
movups xmmword [ecx], xmm0
mov dword [ecx], eax
mov eax, 0xb6
mov dword [ecx + 4], edx
mov edx, 0x1f6
cmovns eax, edx
mov word [ecx + 0xe], ax
pop edi
pop esi
mov esp, ebp
pop ebp
ret 8
cmp eax, 0x10
jge 0x429567
push ecx
call fcn.00429940
mov ecx, dword [edi + 0x24]
xorps xmm0, xmm0
lea eax, [ecx + 0x10]
mov dword [edi + 0x24], eax
movups xmmword [ecx], xmm0
mov dword [ecx], esi
shr esi, 0x1a
not esi
mov dword [ecx + 4], 0
and esi, 0x20
or esi, 0x1d6
mov word [ecx + 0xe], si
pop edi
pop esi
mov esp, ebp
pop ebp
ret 8
sub eax, dword [edi + 0xc]
sar eax, 1
add eax, dword [edi + 0x20]
mov dword [edx + 0x18], 3
mov dword [edx + 0x1c], eax
pop edi
pop esi
mov esp, ebp
pop ebp
ret 8