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

Disassembly:
sub esp, 0xdb4
mov eax, dword [0x4c03a0]
xor eax, esp
mov dword [esp + 0xdb0], eax
push edi
mov edi, dword [esp + 0xdbc]
push 0x40
push str.70c2441db366d92ea7be1342b3bf629026ba92bb675f06e684bdd34511097434
push 0xffffffffffffffff
call fcn.0041fbc0
cmp eax, 0x26e831b8
je 0x41ae6b
xor al, al
pop edi
mov ecx, dword [esp + 0xdb0]
xor ecx, esp
call fcn.0049e626
add esp, 0xdb4
ret 8
push ebx
push 0x604
push 0
push 0x4c8da0
call fcn.0049ebe0
add esp, 0xc
push 0x400
lea eax, [esp + 0x13c]
push eax
mov ecx, edi
call fcn.00465b20
test al, al
je 0x41aec1
mov bl, 0x23
lea ebx, [ebx]
cmp byte [esp + 0x138], bl
jne 0x41aec1
push 0x400
lea ecx, [esp + 0x13c]
push ecx
mov ecx, edi
call fcn.00465b20
test al, al
jne 0x41aea0
push esi
push 0x100
push 0x4c8da0
mov ecx, edi
call fcn.00465b20
push 0x100
push 0x4c8ea0
mov ecx, edi
call fcn.00465b20
push 0x80
lea edx, [esp + 0x940]
push edx
mov ecx, edi
call fcn.00465b20
xor esi, esi
lea ebx, [ebx]
mov eax, 0x400
sub eax, esi
push eax
lea ecx, [esp + esi + 0x140]
push ecx
mov ecx, edi
call fcn.00465b20
add esi, 0x36
cmp esi, 0x17a
jl 0x41af00
xor edi, edi
xor esi, esi
jmp 0x41af30
movsx edx, byte [esp + esi + 0x13c]
push edx
call fcn.00465180
test al, al
je 0x41af57
movsx ecx, byte [esp + esi + 0x13c]
inc esi
cmp esi, 2
lea eax, [edi + edi*4]
lea edi, [ecx + eax*2 - 0x30]
jl 0x41af30
push ebp
xor ebp, ebp
mov dword [esp + 0x10], edi
xor esi, esi
movsx edx, byte [esp + esi + 0x142]
push edx
call fcn.00465180
test al, al
je 0x41af88
movsx ecx, byte [esp + esi + 0x142]
inc esi
cmp esi, 3
lea eax, [ebp + ebp*4]
lea ebp, [ecx + eax*2 - 0x30]
jl 0x41af60
xor ebx, ebx
mov dword [esp + 0x18], ebp
xor esi, esi
movsx edx, byte [esp + esi + 0x145]
push edx
call fcn.00465180
test al, al
je 0x41afb7
movsx ecx, byte [esp + esi + 0x145]
inc esi
cmp esi, 3
lea eax, [ebx + ebx*4]
lea ebx, [ecx + eax*2 - 0x30]
jl 0x41af90
xor edi, edi
xor esi, esi
jmp 0x41afc0
movsx edx, byte [esp + esi + 0x148]
push edx
call fcn.00465180
test al, al
je 0x41afe7
movsx ecx, byte [esp + esi + 0x148]
inc esi
cmp esi, 2
lea eax, [edi + edi*4]
lea edi, [ecx + eax*2 - 0x30]
jl 0x41afc0
cmp ebp, 0x100
jg 0x41b21f
cmp ebx, 0x100
jg 0x41b21f
mov ebp, 0x4be338
xor esi, esi
push 8
lea edx, [esp + 0x44]
push edx
push ebp
call fcn.00465250
push 8
lea eax, [esp + 0x44]
push eax
lea ecx, [esp + 0x152]
push ecx
call fcn.004650a0
test eax, eax
je 0x41b21f
add esi, 8
add ebp, 8
cmp esi, 0x908
jb 0x41b006
xor esi, esi
nop
lea edx, [esp + 0x40]
push edx
call fcn.00464230
mov eax, 0x4c8da0
lea edx, [eax + 1]
mov cl, byte [eax]
inc eax
test cl, cl
jne 0x41b052
push 1
sub eax, edx
push eax
push 0x4c8da0
lea eax, [esp + 0x4c]
push eax
call fcn.00464270
push 1
lea ecx, [esp + 0x20]
push ecx
lea edx, [esp + 0x48]
push edx
call fcn.00464330
mov eax, dword [esp + 0x1c]
cmp eax, dword [esi + 0x4be2f8]
jne 0x41b09a
mov ecx, dword [esp + 0x20]
cmp ecx, dword [esi + 0x4be2fc]
je 0x41b21f
add esi, 8
cmp esi, 0x40
jb 0x41b040
mov esi, dword [esp + 0x10]
push esi
lea edx, [esp + 0x14e]
push edx
push 0x4c8fa0
call fcn.0049fa10
mov ebp, dword [esp + 0x24]
push ebp
lea esi, [esp + esi + 0x15a]
push esi
push 0x4c92a0
call fcn.0049fa10
push ebx
add esi, ebp
push esi
push 0x4c91a0
call fcn.0049fa10
push edi
add esi, ebx
push esi
push 0x4c90a0
call fcn.0049fa10
push 0xa
push 0
add edi, esi
push edi
call fcn.004a0ad1
mov dword [0x4c93a0], eax
mov eax, 0x4c8ea0
add esp, 0x3c
lea ecx, [eax + 1]
mov dl, byte [eax]
inc eax
test dl, dl
jne 0x41b108
sub eax, ecx
push eax
push 0x4c8ea0
push 0xffffffffffffffff
call fcn.0041fbc0
mov ecx, 0x4c8da0
lea esi, [ecx + 1]
mov dl, byte [ecx]
inc ecx
test dl, dl
jne 0x41b126
sub ecx, esi
push ecx
push 0x4c8da0
push eax
call fcn.0041fbc0
mov ecx, 0x4c8fa0
lea esi, [ecx + 1]
mov dl, byte [ecx]
inc ecx
test dl, dl
jne 0x41b143
sub ecx, esi
push ecx
push 0x4c8fa0
push eax
call fcn.0041fbc0
mov ecx, 0x4c92a0
lea esi, [ecx + 1]
mov dl, byte [ecx]
inc ecx
test dl, dl
jne 0x41b160
sub ecx, esi
push ecx
push 0x4c92a0
push eax
call fcn.0041fbc0
mov ecx, 0x4c91a0
lea esi, [ecx + 1]
lea ecx, [ecx]
mov dl, byte [ecx]
inc ecx
test dl, dl
jne 0x41b180
sub ecx, esi
push ecx
push 0x4c91a0
push eax
call fcn.0041fbc0
mov ecx, 0x4c90a0
lea esi, [ecx + 1]
lea ecx, [ecx]
mov dl, byte [ecx]
inc ecx
test dl, dl
jne 0x41b1a0
sub ecx, esi
push ecx
push 0x4c90a0
push eax
call fcn.0041fbc0
cmp eax, dword [0x4c93a0]
jne 0x41b21f
cmp byte [0x4c8ea0], 0
je 0x41b3b0
mov esi, 0x4c8ea9
mov dword [esp + 0x10], esi
push 9
push str.Version:
lea edi, [esi - 9]
push edi
call fcn.004650a0
test eax, eax
je 0x41b1fc
push 9
push str.VersMax:
push edi
call fcn.004650a0
test eax, eax
jne 0x41b2d5
cmp byte [esi], 0
mov byte [esp + 0x17], 0
je 0x41b21f
cmp byte [esi - 1], 0x20
jne 0x41b219
movsx eax, byte [esi]
push eax
call fcn.00465180
test al, al
jne 0x41b23c
inc esi
cmp byte [esi], 0
jne 0x41b206
xor al, al
mov ecx, dword [esp + 0xdc0]
pop ebp
pop esi
pop ebx
pop edi
xor ecx, esp
call fcn.0049e626
add esp, 0xdb4
ret 8
push esi
call fcn.004a0876
push 0x2e
push esi
mov ebx, eax
call fcn.0049e290
mov esi, eax
add esp, 0xc
test esi, esi
je 0x41b28c
cmp byte [esi + 1], 0x2a
lea edi, [esi + 1]
je 0x41b28c
push edi
call fcn.004a0876
movsx ecx, byte [edi]
add esp, 4
push ecx
mov ebp, eax
call fcn.00465180
test al, al
je 0x41b28f
movsx edx, byte [esi + 2]
push edx
call fcn.00465180
test al, al
jne 0x41b28f
lea ebp, [ebp + ebp*4]
add ebp, ebp
jmp 0x41b28f
or ebp, 0xffffffff
cmp ebx, 3
jne 0x41b2b3
cmp ebp, 0xffffffff
je 0x41b2af
mov eax, 0x66666667
imul ebp
sar edx, 2
mov eax, edx
shr eax, 0x1f
add eax, edx
cmp eax, 9
jne 0x41b2b3
mov al, 1
jmp 0x41b2b7
mov al, byte [esp + 0x17]
mov ecx, dword [esp + 0x10]
cmp byte [ecx - 5], 0x4d
jne 0x41b2cd
cmp ebx, 3
jg 0x41b2d5
jne 0x41b2cd
cmp ebp, 0x5d
jge 0x41b2d5
test al, al
je 0x41b21f
mov esi, dword [esp + 0x10]
push 9
push str.DateMax:
lea eax, [esi - 9]
push eax
call fcn.004650a0
test eax, eax
jne 0x41b39a
cmp byte [esi], al
je 0x41b21f
lea esp, [esp]
cmp byte [esi - 1], 0x20
jne 0x41b313
movsx edx, byte [esi]
push edx
call fcn.00465180
test al, al
jne 0x41b31e
inc esi
cmp byte [esi], 0
jne 0x41b300
jmp 0x41b21f
mov edi, 1
push esi
mov ebx, edi
call fcn.004a0876
push 0x2e
push esi
mov ebp, eax
call fcn.0049e290
add esp, 0xc
test eax, eax
je 0x41b362
lea esi, [eax + 1]
push esi
call fcn.004a0876
push 0x2e
push esi
mov edi, eax
call fcn.0049e290
add esp, 0xc
test eax, eax
je 0x41b362
inc eax
push eax
call fcn.004a0876
add esp, 4
mov ebx, eax
lea ecx, [esp + 0x1c]
call fcn.004680f0
lea ecx, [esp + 0x1c]
call fcn.004683b0
mov eax, dword [esp + 0x1c]
cmp ebp, eax
ja 0x41b39a
jne 0x41b21f
mov eax, dword [esp + 0x20]
cmp edi, eax
ja 0x41b39a
jne 0x41b21f
cmp ebx, dword [esp + 0x24]
jb 0x41b21f
mov eax, dword [esp + 0x10]
inc eax
cmp byte [eax - 9], 0
mov dword [esp + 0x10], eax
je 0x41b3b0
mov esi, eax
jmp 0x41b1d3
cmp byte [esp + 0xdcc], 0
je 0x41b4f3
mov eax, 0x4c8ea0
lea edx, [eax + 1]
mov cl, byte [eax]
inc eax
test cl, cl
jne 0x41b3c6
push 0x4c92a0
push str.70c2441db366d92ea7be1342b3bf629026ba92bb675f06e684bdd34511097434
sub eax, edx
push eax
push 0x4c8ea0
call fcn.00425880
test eax, eax
je 0x41b21f
xor eax, eax
mov edi, edi
mov cl, byte [eax + 0x4c8da0]
mov byte [esp + eax + 0x540], cl
inc eax
test cl, cl
jne 0x41b3f0
mov eax, 0x4c8fa0
mov edx, eax
lea esp, [esp]
mov cl, byte [eax]
inc eax
test cl, cl
jne 0x41b410
lea edi, [esp + 0x540]
sub eax, edx
dec edi
mov cl, byte [edi + 1]
inc edi
test cl, cl
jne 0x41b421
mov ecx, eax
shr ecx, 2
mov esi, edx
rep movsd dword es:[edi], dword [esi]
mov ecx, eax
and ecx, 3
rep movsb byte es:[edi], byte [esi]
xor eax, eax
jmp 0x41b440
mov cl, byte [esp + eax + 0x540]
mov byte [esp + eax + 0x9c0], cl
inc eax
test cl, cl
jne 0x41b440
lea eax, [esp + 0x540]
lea edx, [eax + 1]
lea ecx, [ecx]
mov cl, byte [eax]
inc eax
test cl, cl
jne 0x41b460
push 0x4c91a0
sub eax, edx
mov esi, eax
push str.70c2441db366d92ea7be1342b3bf629026ba92bb675f06e684bdd34511097434
push esi
lea eax, [esp + 0x54c]
push eax
call fcn.00425880
test eax, eax
je 0x41b21f
xor eax, eax
lea ecx, [ecx]
mov cl, byte [esp + eax + 0x9c0]
mov byte [esp + eax + 0x540], cl
inc eax
test cl, cl
jne 0x41b490
lea ecx, [esp + 0x40]
push ecx
push 0x4c90a0
push esi
lea edx, [esp + 0x54c]
push edx
call fcn.00425680
xor eax, eax
lea ecx, [ecx]
mov cl, byte [esp + eax + 0x9c0]
mov byte [esp + eax + 0x540], cl
inc eax
test cl, cl
jne 0x41b4c0
lea eax, [esp + 0x40]
push eax
push 0x4c8fa0
push esi
lea ecx, [esp + 0x54c]
push ecx
call fcn.00425880
test eax, eax
je 0x41b21f
mov al, 1
jmp 0x41b221