Function at 0x40cbb0
Capabilities:
Parse credit card information

Disassembly:
push ebp
push edi
push esi
mov esi, eax
push ebx
sub esp, 0x7c
mov dword [esp + 0x48], eax
mov byte [esp + 0x47], 0
mov byte [esp + 0x2c], 0
mov byte [esp + 0x46], 1
mov byte [esp + 0x24], 0
mov byte [esp + 0x34], 0
mov byte [esp + 0x1c], 0
mov dword [esp + 0x3c], 0
mov dword [esp + 0x28], 0
mov dword [esp + 0x40], 0
mov dword [esp + 0x38], 0
mov byte [esp + 0x6f], 0
movzx eax, byte [esi]
cmp al, 0x20
jne 0x40cc1b
lea esi, [esi]
nop
movzx eax, byte [esi + 1]
add esi, 1
cmp al, 0x20
je 0x40cc10
cmp al, 9
je 0x40cc10
cmp al, 0x21
jne 0x40cffc
movzx eax, byte [esi + 1]
lea ebx, [esi + 1]
cmp al, 9
sete cl
cmp al, 0x20
sete dl
or cl, dl
mov byte [esp + 0x20], cl
je 0x40d4f9
lea esi, [esi]
movzx eax, byte [ebx + 1]
add ebx, 1
cmp al, 9
je 0x40cc48
cmp al, 0x20
je 0x40cc48
cmp al, 0x25
jne 0x40ce04
xor esi, esi
cmp byte [ebx + 1], 0x3a
mov byte [esp + 0x18], 0
je 0x40cef0
mov edi, ebx
xor edx, edx
jmp 0x40cca3
cmp cl, 0x2d
je 0x40cca0
lea ecx, [ecx - 0x2b]
cmp cl, 0x15
ja 0x40ccd0
mov ebp, 0xffdbfff4
bt ebp, ecx
jb 0x40ccd4
lea esi, [esi]
nop
add edi, 1
movzx ecx, byte [edi]
mov eax, ecx
test word [ecx + ecx + 0x568980], 0x204
je 0x40cc80
cmp al, 0x5c
jne 0x40cca0
cmp byte [edi + 1], 0
je 0x40d4c2
add edi, 1
add edx, 1
jmp 0x40cca0
cmp al, 0x5c
je 0x40ccb8
mov ebp, edi
test edx, edx
jne 0x40d020
mov byte [esp + 0x14], 0
cmp al, 0x2a
je 0x40cfeb
cmp al, 0x20
jne 0x40ccfb
nop
movzx eax, byte [edi + 1]
add edi, 1
cmp al, 0x20
je 0x40ccf0
cmp al, 9
je 0x40ccf0
cmp al, 0x7c
je 0x40ce39
jg 0x40cebf
cmp al, 0x26
jne 0x40ce31
cmp byte [esp + 0x34], 0
jne 0x40cec7
cmp byte [esp + 0x2c], 0
jne 0x40cec7
mov eax, esi
test al, al
jne 0x40cec7
cmp byte [esp + 0x20], 0
jne 0x40cec7
cmp ebx, ebp
sete al
or al, byte [esp + 0x18]
mov byte [esp + 0x34], al
jne 0x40cec7
mov edx, ebp
mov eax, 0xffffffff
sub edx, ebx
cmp byte [esp + 0x14], 0
cmovne eax, edx
mov dword [esp + 0x20], eax
mov eax, dword [0x56a0f8]
mov dword [esp + 0x18], eax
test eax, eax
jle 0x40d235
mov eax, dword [0x56a0fc]
mov dword [esp + 0x2c], edi
xor esi, esi
mov edi, edx
mov dword [esp + 0x1c], ebx
mov dword [esp + 0x30], eax
mov ebx, eax
mov ebp, dword [ebx]
mov eax, dword [esp + 0x1c]
mov dword [esp + 8], edi
mov dword [esp + 4], eax
mov dword [esp], ebp
call sym._strncmp
test eax, eax
jne 0x40cdd0
cmp byte [esp + 0x14], 0
jne 0x40cdb8
cmp byte [ebp + edi], 0
jne 0x40cdd0
mov edx, dword [esp + 0x20]
mov eax, esi
call sym.check_live_switch_int__int_
test eax, eax
je 0x40cdd0
mov byte [ebx + 0xe], 1
lea esi, [esi]
nop
add esi, 1
add ebx, 0x10
cmp dword [esp + 0x18], esi
jne 0x40cd90
mov edi, dword [esp + 0x2c]
cmp byte [edi], 0x7d
je 0x40d18b
mov byte [esp + 0x2c], 0
lea esi, [edi + 1]
mov byte [esp + 0x30], 1
movzx eax, byte [esp + 0x30]
mov byte [esp + 0x1c], al
jmp 0x40cbfb
cmp al, 0x2e
jne 0x40ce1a
mov byte [esp + 0x18], 0
add ebx, 1
mov esi, 1
jmp 0x40cc70
cmp al, 0x2c
jne 0x40d4e6
mov byte [esp + 0x18], 1
add ebx, 1
xor esi, esi
jmp 0x40cc70
cmp al, 0x3a
jne 0x40cec7
cmp byte [esp + 0x1c], 0
jne 0x40cec7
test ebx, ebx
setne cl
cmp ebx, ebp
sete dl
and cl, dl
mov byte [esp + 0x30], cl
je 0x40cf11
movzx edx, byte [esp + 0x2c]
xor edx, 1
or dl, byte [esp + 0x24]
jne 0x40cec7
cmp al, 0x7c
je 0x40cec7
mov eax, esi
test al, al
jne 0x40cec7
cmp byte [esp + 0x20], 0
jne 0x40cec7
movzx eax, byte [esp + 0x18]
or al, byte [esp + 0x14]
mov byte [esp + 0x46], al
jne 0x40cec7
movzx eax, byte [esp + 0x47]
xor eax, 1
mov byte [esp + 0x24], al
movzx eax, byte [edi]
cmp al, 0x3a
je 0x40d07e
lea esi, [edi + 1]
cmp al, 0x7d
je 0x40d241
cmp byte [esp + 0x30], 0
jne 0x40d4f2
mov byte [esp + 0x34], 1
jmp 0x40cdf6
cmp al, 0x7d
je 0x40cd15
movsx eax, byte [edi]
mov dword [esp + 4], str.braced_spec__qs_is_invalid_at__qc
mov dword [esp + 0xc], eax
mov eax, dword [esp + 0x48]
mov dword [esp + 8], eax
mov eax, dword [0x56cefc]
mov dword [esp], eax
call sym.fatal_error_unsigned_int__char_const__..._
lea esi, [esi]
nop
lea eax, [ebx + 2]
xor ecx, ecx
lea edx, [esp + 0x6f]
xor ebp, ebp
call sym.handle_spec_function_char_const__bool__char_const_
xor ebx, ebx
mov byte [esp + 0x14], 0
mov edi, eax
movzx eax, byte [eax]
jmp 0x40cceb
mov eax, esi
test al, al
jne 0x40d00b
cmp byte [esp + 0x18], 0
jne 0x40d00b
movzx eax, byte [esp + 0x46]
movzx edx, byte [esp + 0x18]
cmp byte [esp + 0x14], 0
cmove eax, edx
mov byte [esp + 0x46], al
movzx eax, byte [esp + 0x24]
or al, byte [esp + 0x47]
jne 0x40ce94
test ebx, ebx
je 0x40d273
mov eax, esi
test al, al
jne 0x40d1eb
cmp byte [esp + 0x18], 0
je 0x40d380
mov eax, dword [0x56a0a0]
test eax, eax
je 0x40cfb1
mov edx, dword [eax]
test edx, edx
je 0x40cfb1
cmp byte [edx], 0
je 0x40cfb1
mov ecx, ebp
lea eax, [edx + 1]
mov dword [esp + 4], ebx
sub ecx, ebx
mov dword [esp], eax
mov dword [esp + 8], ecx
mov dword [esp + 0x18], ecx
mov dword [esp + 0x14], edx
call sym._strncmp
test eax, eax
jne 0x40cfb1
mov edx, dword [esp + 0x14]
mov ecx, dword [esp + 0x18]
cmp byte [edx + ecx + 1], 0
sete al
mov esi, eax
mov eax, esi
mov byte [esp + 0x6f], al
mov eax, dword [esp + 0x3c]
mov edx, esi
cmp byte [esp + 0x20], dl
mov byte [esp + 0x30], 0
cmovne eax, dword [esp + 0x28]
cmove ebp, dword [esp + 0x40]
setne byte [esp + 0x24]
cmove ebx, dword [esp + 0x38]
mov dword [esp + 0x3c], eax
mov dword [esp + 0x40], ebp
mov dword [esp + 0x38], ebx
jmp 0x40ce94
movzx eax, byte [edi + 1]
mov byte [esp + 0x14], 1
add edi, 1
jmp 0x40cceb
mov byte [esp + 0x20], 0
movzx eax, byte [esi]
mov ebx, esi
jmp 0x40cc57
cmp byte [esp + 0x14], 0
jne 0x40cec7
mov byte [esp + 0x46], 0
jmp 0x40cf3c
mov eax, dword [esp + 0x28]
test eax, eax
je 0x40d034
mov ecx, dword [esp + 0x3c]
cmp eax, ecx
jne 0x40d1d6
mov eax, edi
sub eax, ebx
sub eax, edx
add eax, 1
mov dword [esp], eax
call sym._xmalloc
mov dword [esp + 0x28], eax
cmp ebx, edi
je 0x40d377
mov ebp, eax
movzx eax, byte [ebx]
cmp al, 0x5c
jne 0x40d061
movzx eax, byte [ebx + 1]
add ebx, 1
add ebx, 1
mov byte [ebp], al
add ebp, 1
cmp edi, ebx
jne 0x40d053
movzx eax, byte [edi]
mov ebx, dword [esp + 0x28]
mov byte [ebp], 0
jmp 0x40ccde
movzx eax, byte [esp + 0x47]
movzx ebp, byte [esp + 0x24]
lea esi, [edi + 1]
mov edx, 1
mov dword [esp + 0x14], esi
xor eax, 1
and ebp, eax
movzx eax, byte [edi + 1]
mov edi, esi
movzx esi, byte [esp + 0x1c]
jmp 0x40d0dd
cmp al, 0x7d
je 0x40d0ea
cmp edx, 1
sete cl
cmp al, 0x3b
jne 0x40d0c6
test cl, cl
jne 0x40d27d
cmp al, 0x25
je 0x40d178
test al, al
je 0x40d503
movzx eax, byte [edi + 1]
add edi, 1
cmp al, 0x7b
jne 0x40d0b0
movzx eax, byte [edi + 1]
add edx, 1
jmp 0x40d0da
sub edx, 1
jne 0x40d0d6
mov edx, esi
mov esi, dword [esp + 0x14]
mov byte [esp + 0x1c], dl
movzx edx, byte [edi - 1]
cmp dl, 0x20
je 0x40d10b
cmp dl, 9
jne 0x40d4df
mov edx, edi
movzx ecx, byte [edx - 2]
sub edx, 1
cmp cl, 9
je 0x40d10d
cmp cl, 0x20
je 0x40d10d
movzx ecx, byte [esp + 0x46]
xor ecx, 1
test byte [esp + 0x1c], cl
jne 0x40d507
mov ebx, ebp
test bl, bl
jne 0x40d291
cmp al, 0x3b
jne 0x40ce9f
movzx edx, byte [esp + 0x24]
mov byte [esp + 0x2c], 1
lea esi, [edi + 1]
or byte [esp + 0x47], dl
mov byte [esp + 0x24], 0
mov byte [esp + 0x46], 1
mov dword [esp + 0x40], 0
mov dword [esp + 0x38], 0
jmp 0x40ceaa
movzx eax, byte [edi + 1]
cmp al, 0x2a
sete bl
and bl, cl
cmovne esi, ebx
jmp 0x40d0da
mov eax, dword [esp + 0x30]
xor ebx, ebx
jmp 0x40d1a3
add ebx, 1
cmp ebx, dword [0x56a0f8]
jge 0x40d1bf
mov eax, dword [0x56a0fc]
mov edx, ebx
shl edx, 4
add eax, edx
cmp byte [eax + 0xe], 0
je 0x40d193
mov byte [eax + 0xe], 0
xor edx, edx
mov eax, ebx
call sym.give_switch_int__int_
jmp 0x40d193
cmp byte [edi], 0x7d
lea esi, [edi + 1]
je 0x40d241
mov byte [esp + 0x2c], 0
mov byte [esp + 0x30], 1
jmp 0x40cdf6
mov dword [esp], eax
mov dword [esp + 0x14], edx
call sym._free
mov edx, dword [esp + 0x14]
jmp 0x40d034
mov edx, dword [0x56a0a4]
xor esi, esi
test edx, edx
je 0x40cfb1
mov ecx, ebp
mov dword [esp + 4], ebx
sub ecx, ebx
mov dword [esp], edx
mov dword [esp + 8], ecx
mov dword [esp + 0x18], ecx
mov dword [esp + 0x14], edx
call sym._strncmp
test eax, eax
jne 0x40cfb1
mov edx, dword [esp + 0x14]
mov ecx, dword [esp + 0x18]
cmp byte [edx + ecx], 0
sete al
mov esi, eax
jmp 0x40cfb1
cmp byte [edi], 0x7d
jne 0x40cde9
lea esi, [edi + 1]
mov eax, dword [esp + 0x3c]
test eax, eax
je 0x40d259
mov edx, dword [esp + 0x28]
cmp eax, edx
je 0x40d259
mov dword [esp], eax
call sym._free
mov eax, dword [esp + 0x28]
test eax, eax
je 0x40d269
mov dword [esp], eax
call sym._free
add esp, 0x7c
mov eax, esi
pop ebx
pop esi
pop edi
pop ebp
ret
movzx esi, byte [esp + 0x6f]
jmp 0x40cfb7
mov eax, esi
mov esi, dword [esp + 0x14]
mov byte [esp + 0x1c], al
mov eax, 0x3b
jmp 0x40d0f9
sub edx, esi
lea eax, [edx + 1]
mov ebx, edx
mov dword [esp], eax
call sym._xmalloc
mov dword [esp + 8], ebx
mov dword [esp + 4], esi
mov ebp, eax
mov dword [esp], eax
call sym._memcpy
cmp byte [esp + 0x1c], 0
mov byte [ebp + ebx], 0
je 0x40d359
mov eax, dword [0x56a0f8]
mov ebx, dword [esp + 0x40]
sub ebx, dword [esp + 0x38]
test eax, eax
jle 0x40d349
mov dword [esp + 0x14], edi
xor esi, esi
jmp 0x40d2eb
add esi, 1
cmp esi, dword [0x56a0f8]
jge 0x40d345
mov eax, esi
shl eax, 4
add eax, dword [0x56a0fc]
mov edi, dword [eax]
mov eax, dword [esp + 0x38]
mov dword [esp + 8], ebx
mov dword [esp + 4], eax
mov dword [esp], edi
call sym._strncmp
test eax, eax
jne 0x40d2e0
mov edx, ebx
mov eax, esi
call sym.check_live_switch_int__int_
test eax, eax
je 0x40d2e0
xor edx, edx
lea ecx, [edi + ebx]
mov eax, ebp
call sym.do_spec_1_char_const__int__char_const_
test eax, eax
js 0x40d368
mov edx, 1
mov eax, esi
call sym.give_switch_int__int_
mov dword [0x56a084], 0
jmp 0x40d2e0
mov edi, dword [esp + 0x14]
mov dword [esp], ebp
call sym._free
movzx eax, byte [edi]
jmp 0x40d13a
xor ecx, ecx
xor edx, edx
mov eax, ebp
call sym.do_spec_1_char_const__int__char_const_
test eax, eax
jns 0x40d349
mov dword [esp], ebp
xor esi, esi
call sym._free
jmp 0x40d241
mov ebp, dword [esp + 0x28]
jmp 0x40d06e
mov edx, ebp
mov eax, 0xffffffff
sub edx, ebx
cmp byte [esp + 0x14], 0
cmovne eax, edx
mov dword [esp + 0x18], edx
mov dword [esp + 0x34], eax
mov eax, dword [0x56a0f8]
mov dword [esp + 0x4c], eax
test eax, eax
jle 0x40d4bb
cmp byte [esp + 0x14], 1
mov dword [esp + 0x30], ebp
sbb eax, eax
xor esi, esi
or eax, 1
mov dword [esp + 0x50], eax
mov eax, dword [0x56a0fc]
mov dword [esp + 0x24], eax
mov eax, dword [esp + 0x18]
sub eax, 1
mov dword [esp + 0x54], eax
lea eax, [ebx + 1]
mov dword [esp + 0x58], eax
jmp 0x40d3f6
cmp al, 0x55
je 0x40d448
add dword [esp + 0x24], 0x10
add esi, 1
cmp esi, dword [esp + 0x4c]
je 0x40d4b7
mov eax, dword [esp + 0x24]
mov ebp, dword [eax]
mov eax, dword [esp + 0x18]
mov dword [esp + 4], ebx
mov dword [esp + 8], eax
mov dword [esp], ebp
call sym._strncmp
test eax, eax
jne 0x40d435
cmp byte [esp + 0x14], 0
jne 0x40d426
mov eax, dword [esp + 0x18]
cmp byte [ebp + eax], 0
jne 0x40d435
mov edx, dword [esp + 0x34]
mov eax, esi
call sym.check_live_switch_int__int_
test eax, eax
jne 0x40d4a9
mov eax, dword [esp + 0x24]
mov edx, dword [eax + 4]
test edx, edx
je 0x40d3e4
movzx eax, byte [ebp]
cmp al, 0x44
jne 0x40d3e0
cmp al, byte [ebx]
jne 0x40d3e4
mov eax, dword [esp + 0x54]
mov edx, dword [edx]
mov dword [esp + 8], eax
mov eax, dword [esp + 0x58]
mov dword [esp], edx
mov dword [esp + 4], eax
mov dword [esp + 0x5c], edx
call sym._strncmp
test eax, eax
jne 0x40d3e4
cmp byte [esp + 0x14], 0
jne 0x40d496
cmp byte [ebp + 1], 0
jne 0x40d3e4
mov eax, dword [esp + 0x18]
mov edx, dword [esp + 0x5c]
cmp byte [edx + eax - 1], 0
jne 0x40d3e4
mov edx, dword [esp + 0x50]
mov eax, esi
call sym.check_live_switch_int__int_
test eax, eax
je 0x40d3e4
mov ebp, dword [esp + 0x30]
mov esi, 1
jmp 0x40cfb1
mov ebp, dword [esp + 0x30]
xor esi, esi
jmp 0x40cfb1
mov eax, dword [esp + 0x48]
mov dword [esp + 4], str.braced_spec__qs_ends_in_escape
mov dword [esp + 8], eax
mov eax, dword [0x56cefc]
mov dword [esp], eax
call sym.fatal_error_unsigned_int__char_const__..._
mov edx, edi
jmp 0x40d11e
mov byte [esp + 0x18], 0
xor esi, esi
jmp 0x40cc70
mov edi, esi
jmp 0x40cec7
mov byte [esp + 0x20], 1
jmp 0x40cc57
mov esi, dword [esp + 0x14]
mov eax, dword [0x56cefc]
mov dword [esp + 8], esi
mov dword [esp + 4], str.braced_spec_body__qs_is_invalid
mov dword [esp], eax
call sym.fatal_error_unsigned_int__char_const__..._