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

Disassembly:
mov qword [rsp + 0x10], rbx
mov qword [rsp + 0x20], r9
mov qword [rsp + 0x18], r8
push rbp
push rsi
push rdi
push r12
push r13
push r14
push r15
mov rbp, rsp
sub rsp, 0x70
mov rax, qword [r8]
lea r13, [rcx + 0xaf8]
mov rbx, qword [rcx + 0x138]
mov rdi, rax
mov qword [rbp - 0x18], rax
mov r15, rax
mov qword [rbp - 0x10], rbx
mov r8, rax
mov r14, rdx
mov rsi, rcx
mov edx, 0xa
mov rcx, rbx
mov r12, rbx
call fcn.1400ce6a0
mov rcx, rax
mov rdx, rbx
test rax, rax
je 0x140020b4e
sub rdi, rax
lea r8, [rcx + 1]
mov rcx, r13
lea rax, [rdi - 1]
mov rdi, qword [rbp + 0x50]
add rax, rbx
mov qword [rdi], rax
mov qword [rsi + 0x138], r8
sub r8, rbx
call fcn.1400041a8
xor r11d, r11d
test eax, eax
jne 0x140020a49
mov ebx, dword [rsi + 0x134]
test ebx, ebx
jne 0x140020423
mov rcx, r13
call fcn.140004204
mov r9, rax
call fcn.140004200
mov r8, rax
mov rcx, rsi
call fcn.14001fbb4
lea edx, [rbx + 2]
cmp eax, edx
je 0x140020a1c
xor r11d, r11d
jmp 0x140020428
mov edx, 2
mov rcx, r13
call fcn.140004200
mov r15, rax
cmp byte [rax], 0xa
je 0x1400206c4
cmp byte [rax], 0xd
je 0x1400206c4
lea ecx, [rbx + 1]
mov r12d, edx
mov dword [rsi + 0x134], ecx
test ebx, ebx
jne 0x14002061f
mov rax, qword [r14 + 0x200]
mov ecx, dword [rax + 0x84]
test cl, 3
je 0x1400205b7
lea rax, [rbp + 0x40]
mov dword [rbp - 0x2c], r11d
mov qword [rsp + 0x30], rax
lea rdi, [rsi + 0x148]
lea rax, [rbp - 0x30]
mov qword [rsp + 0x28], rdi
lea r9, [rbp - 0x2c]
mov qword [rsp + 0x20], rax
lea r8, [rbp - 0x28]
mov byte [rbp + 0x40], r11b
lea rdx, str._HTTP__1d._1d_c_3d_c
mov rcx, r15
call fcn.14000f9d8
mov r12d, 1
mov ebx, eax
cmp eax, r12d
jne 0x1400204eb
cmp dword [rbp - 0x28], 2
jl 0x1400204eb
mov r9, rdi
lea r8, [rbp - 0x24]
lea rdx, str._HTTP__1_23___d
mov rcx, r15
call fcn.14000f9d8
cmp eax, 2
jne 0x1400204eb
mov byte [r14 + 0x437], 0
lea ebx, [rax + 2]
mov byte [rbp - 0x30], 0x20
jmp 0x140020510
mov al, byte [rbp + 0x40]
sub al, 0x30
cmp al, 9
jbe 0x140020ab2
cmp ebx, 4
jl 0x14002054b
cmp dword [rdi], 0x64
jl 0x140020ab2
cmp byte [rbp - 0x30], 0x20
jne 0x140020aa9
mov eax, dword [rbp - 0x28]
lea ecx, [rax + rax*4]
mov eax, dword [rbp - 0x2c]
lea r9d, [rax + rcx*2]
mov ecx, r9d
mov dword [rbp - 0x2c], r9d
sub ecx, 0xa
je 0x140020532
cmp ecx, r12d
jne 0x140020a7b
mov byte [r14 + 0x437], r9b
cmp r9b, 0x14
jae 0x1400205aa
mov rax, qword [r14 + 0x3f8]
or dword [rax], 0xffffffff
jmp 0x1400205aa
test ebx, ebx
jne 0x140020aa9
mov r8, rdi
lea rdx, str._HTTP__3d
mov rcx, r15
call fcn.14000f9d8
mov byte [r14 + 0x437], 0xa
test eax, eax
jne 0x140020608
mov rcx, r13
call fcn.140004204
mov r8, rax
call fcn.140004200
mov rdx, rax
mov rcx, rsi
call fcn.14001fb24
cmp eax, r12d
jne 0x140020ac6
mov dword [rdi], 0xc8
mov ebx, r12d
mov byte [r14 + 0x437], 0xa
xor r11d, r11d
test ebx, ebx
je 0x140020ac9
jmp 0x140020608
bt ecx, 0x12
jae 0x140020ac9
lea rax, [rsi + 0x148]
mov rcx, r15
mov qword [rsp + 0x28], rax
lea r9, [rbp - 0x20]
lea rax, [rbp - 0x2f]
lea r8, [rbp - 0x1c]
mov qword [rsp + 0x20], rax
lea rdx, str._RTSP__1d._1d_c_3d
call fcn.14000f9d8
cmp eax, 4
jne 0x140020ac6
cmp byte [rbp - 0x2f], 0x20
jne 0x140020ac6
mov byte [r14 + 0x437], 0xb
mov rdx, r14
mov rcx, rsi
call fcn.140020148
test eax, eax
jne 0x140020a49
lea r12d, [rax + 6]
mov rcx, rsi
call fcn.1400202b8
test eax, eax
jne 0x140020a49
mov r8, r15
mov rdx, r14
mov rcx, rsi
call fcn.14001fbc0
xor ecx, ecx
test eax, eax
jne 0x140020a49
mov ebx, dword [rsi + 0x148]
mov edi, r12d
or edi, 1
cmp byte [rsi + 0x92b], cl
mov rcx, r13
cmove edi, r12d
call fcn.140004204
mov r9, rax
mov r8, r15
mov edx, 1
mov rcx, rsi
call fcn.140010588
mov rcx, r13
call fcn.140004204
mov edx, edi
mov r9, rax
or edx, 0x10
lea eax, [rbx - 0x64]
cmp eax, 0x64
mov r8, r15
mov rcx, rsi
cmovae edx, edi
call fcn.14000a894
test eax, eax
jne 0x140020a49
mov rcx, r13
call fcn.140004204
add qword [rsi + 0x1190], rax
call fcn.140004204
add qword [rsi + 0x108], rax
jmp 0x1400209f5
mov ecx, dword [rsi + 0x148]
lea eax, [rcx - 0x64]
cmp eax, 0x63
ja 0x140020745
sub ecx, 0x64
je 0x140020707
cmp ecx, 1
je 0x1400206ef
lea rbx, [rsi + 0x1aa]
mov dword [rsi + 0x134], r11d
mov byte [rbx], 1
jmp 0x140020739
cmp dword [rsi + 0x164], edx
je 0x140020ad5
lea rbx, [rsi + 0x1aa]
mov byte [rbx], r11b
jmp 0x140020739
lea rbx, [rsi + 0x1aa]
mov dword [rsi + 0x134], r11d
mov byte [rbx], 1
cmp dword [rsi + 0x160], r11d
jle 0x140020739
or dword [rsi + 0x14c], edx
mov rcx, rsi
mov dword [rsi + 0x160], r11d
call fcn.14000a394
xor r11d, r11d
mov r10, rbx
lea r15, [rsi + 0xe8]
jmp 0x14002079f
lea rbx, [rsi + 0x1aa]
lea r15, [rsi + 0xe8]
mov byte [rbx], r11b
cmp qword [r15], 0xffffffffffffffff
mov r10, rbx
jne 0x1400207a4
cmp byte [rsi + 0x1af], r11b
jne 0x1400207a4
cmp byte [r14 + 0x1e8], r11b
jne 0x1400207a4
cmp byte [r14 + 0x437], 0xb
jne 0x1400207a4
mov rax, qword [r14 + 0x200]
test dword [rax + 0x84], 0x40000
jne 0x1400207a4
cmp byte [rsi + 0x1048], 5
je 0x1400207a4
mov rcx, r14
call fcn.14000ae38
cmp byte [r10], r11b
jne 0x1400207b7
mov rcx, rsi
call fcn.140020240
xor r11d, r11d
test eax, eax
jne 0x140020a49
cmp byte [r14 + 0x1e8], r11b
je 0x1400207f1
mov eax, dword [rsi + 0x148]
cmp eax, 0x191
jne 0x1400207d9
cmp dword [r14 + 0x2c8], 1
je 0x1400207ea
jmp 0x1400207f1
cmp eax, 0x197
jne 0x1400207f1
cmp dword [r14 + 0x2cc], 1
jne 0x1400207f1
mov byte [rsi + 0x1165], 1
cmp dword [r14 + 0x2c8], 3
jne 0x140020812
cmp dword [rsi + 0x148], 0x191
je 0x140020812
mov dword [r14 + 0x2c8], 4
cmp dword [r14 + 0x2cc], 3
jne 0x140020833
cmp dword [rsi + 0x148], 0x197
je 0x140020833
mov dword [r14 + 0x2cc], 4
mov al, byte [rsi + 0x92b]
mov rcx, r13
neg al
mov eax, dword [rsi + 0x148]
sbb edx, edx
sub eax, 0x64
neg edx
add edx, 2
cmp eax, 0x64
sbb eax, eax
and eax, 0x10
or edx, eax
call fcn.140004204
mov rdi, rax
call fcn.140004200
mov r8, rax
mov r9, rdi
mov rcx, rsi
call fcn.14000a894
xor r10d, r10d
test eax, eax
jne 0x140020a49
mov r9, qword [rsi + 0x108]
movsxd rcx, edi
add qword [rsi + 0x1190], rcx
add r9, rcx
mov qword [rsi + 0x108], r9
mov rcx, rsi
mov r8d, dword [rsi + 0x148]
call fcn.14001de20
test al, al
jne 0x140020b38
lea eax, [r8 - 0x64]
cmp eax, 0x63
cmova r9, r10
mov qword [rsi + 0x110], r9
call fcn.14001d7e4
xor edx, edx
test eax, eax
jne 0x140020a49
cmp dword [rsi + 0x148], 0x12c
jl 0x1400209ed
cmp byte [r14 + 0x1f2], dl
jne 0x1400209d4
cmp byte [r14 + 0x1e8], dl
jne 0x1400209d4
cmp byte [rsi + 0x1173], dl
jne 0x1400209dc
movzx ecx, byte [rsi + 0x1048]
sub ecx, 1
je 0x140020926
sub ecx, 1
je 0x140020926
sub ecx, 1
je 0x140020926
cmp ecx, 1
jne 0x1400209d4
mov rcx, rsi
call fcn.14000a394
xor edx, edx
cmp byte [rsi + 0x1ac], dl
jne 0x1400209d4
cmp dword [rsi + 0x148], 0x1a1
jne 0x14002097a
cmp byte [rsi + 0x1167], dl
je 0x14002097a
mov rcx, qword [rsi + 0x1050]
mov byte [rsi + 0x1168], 1
call qword [case.0x14000c56c.1]
mov rdx, r15
mov rcx, rsi
mov qword [rsi + 0x188], rax
call fcn.14001a238
xor edx, edx
jmp 0x1400209d4
cmp byte [rsi + 0x927], dl
je 0x140020999
cmp dword [rsi + 0x160], edx
jle 0x1400209d4
or dword [rsi + 0x14c], 2
mov dword [rsi + 0x160], edx
jmp 0x1400209d4
mov edx, 2
mov rcx, r14
call fcn.14000ae38
mov rcx, rsi
mov rdx, r15
call fcn.14001a238
xor edx, edx
test eax, eax
jne 0x140020a49
mov byte [rsi + 0x1ac], 1
cmp byte [rsi + 0x1167], dl
je 0x1400209d4
mov dword [rsi + 0x160], 3
cmp byte [rsi + 0x1173], dl
je 0x1400209ed
cmp qword [r14 + 0x228], 0xffffffffffffffff
je 0x1400209ed
or dword [rsi + 0x14c], 2
cmp byte [rbx], dl
je 0x140020af2
mov rcx, r13
call fcn.14000413c
mov rbx, qword [rsi + 0x138]
xor eax, eax
cmp byte [rbx], al
je 0x140020a47
mov rdi, qword [rbp + 0x50]
mov rdi, qword [rdi]
mov r15, rdi
mov r8, rdi
jmp 0x14002039d
mov rcx, r14
call fcn.14000ae38
xor eax, eax
cmp byte [rsi + 0x946], al
je 0x140020bb7
mov byte [rsi + 0x1aa], al
cmp qword [rdi], rax
je 0x140020a61
mov dword [rsi + 0x130], 1
xor eax, eax
mov rbx, qword [rsp + 0xb8]
add rsp, 0x70
pop r15
pop r14
pop r13
pop r12
pop rdi
pop rsi
pop rbp
ret
mov rax, qword [rbp - 0x18]
mov dword [rsi + 0x130], edx
mov qword [rdi], rax
mov rax, qword [rbp - 0x10]
mov qword [rsi + 0x138], rax
jmp 0x140020a47
mov eax, 0x66666667
imul r9d
sar edx, 2
mov ecx, edx
shr ecx, 0x1f
add edx, ecx
mov r8d, edx
lea ecx, [rdx + rdx*4]
add ecx, ecx
lea rdx, str.Unsupported_HTTP_version___u._d__in_response
sub r9d, ecx
mov rcx, rsi
call fcn.140010658
jmp 0x140020ac1
lea rdx, str.Unsupported_HTTP_version_in_response
jmp 0x140020ab9
lea rdx, str.Unsupported_response_code_in_HTTP_response
mov rcx, rsi
call fcn.140010658
mov eax, r12d
jmp 0x140020a49
xor r11d, r11d
mov byte [rsi + 0x1aa], r11b
jmp 0x140020a47
mov dword [rsi + 0x164], 3
mov byte [rsi + 0x1aa], 1
mov dword [rsi + 0x134], r11d
jmp 0x140020bc6
mov rcx, qword [rbp + 0x58]
cmp byte [rsi + 0x1b4], dl
je 0x140020b05
mov byte [rcx], 1
mov al, 1
jmp 0x140020b07
mov al, byte [rcx]
cmp qword [rsi + 0xf0], rdx
jne 0x140020b15
mov byte [rcx], 1
jmp 0x140020b19
test al, al
je 0x140020b20
and dword [rsi + 0x14c], 0xfffffffe
mov r9, rdi
mov r8, r12
mov edx, 1
mov rcx, rsi
call fcn.140010588
jmp 0x140020a47
lea rdx, str.The_requested_URL_returned_error:__d
call fcn.140010658
mov eax, 0x16
jmp 0x140020a49
mov r8, r15
mov rcx, r13
call fcn.1400041a8
xor ebx, ebx
test eax, eax
jne 0x140020a49
cmp dword [rsi + 0x134], ebx
jne 0x140020a47
mov rcx, r13
call fcn.140004204
mov r9, rax
call fcn.140004200
mov r8, rax
mov rcx, rsi
call fcn.14001fbb4
lea ecx, [rbx + 2]
cmp eax, ecx
jne 0x140020a47
mov dword [rsi + 0x130], ecx
mov edx, ecx
mov rcx, r14
mov byte [rsi + 0x1aa], bl
call fcn.14000ae38
cmp byte [rsi + 0x946], bl
jne 0x140020a47
lea rdx, str.Received_HTTP_0.9_when_not_allowed
mov rcx, rsi
call fcn.140010658
mov eax, 1
jmp 0x140020a49