// File: WShabti-Team[P]WShabtiPict/wshabtilib/java-source-code-parser/java-source-code-parser.cpp
// Function: get_class_name(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>)
string get_class_name(string source_code_path)
{
    std::ifstream source_input_file;
    source_input_file.open(source_code_path, std::ios_base::in);

    string search_string = "";
    string source_code = "";

    while(!source_input_file.eof())
	{
        getline(source_input_file, search_string);
        source_code.append(search_string);        
    }

    smatch sm ;

    //CLASS NAME REGEX (WITH CLASS|INTERFACE|ENUM)
    regex class_regex (R"rgx((class|interface|enum)\s([^\n\s]*))rgx");
    regex_search(source_code, sm, class_regex);
    string class_name_with_decl = ((string) sm[0]);
    string class_name = (class_name_with_decl.replace(0,class_name_with_decl.find(" ")+1, ""));
    return class_name;
 }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x340, %rsp            # imm = 0x340
movq %rsi, -0x2e8(%rbp)
movq %rdi, -0x300(%rbp)
movq %rdi, %rax
movq %rax, -0x2f8(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
leaq -0x218(%rbp), %rdi
movq %rdi, -0x2f0(%rbp)
callq 0x76d0
movq -0x2f0(%rbp), %rdi
movq -0x2e8(%rbp), %rsi
movl $0x8, %edx
callq 0x7520
jmp 0x35ba8
leaq -0x249(%rbp), %rdi
movq %rdi, -0x308(%rbp)
callq 0x79e0
movq -0x308(%rbp), %rdx
leaq 0x30069(%rip), %rsi     # 0x65c32
leaq -0x248(%rbp), %rdi
callq 0xd700
jmp 0x35bd7
leaq -0x249(%rbp), %rdi
callq 0x7660
leaq -0x271(%rbp), %rdi
movq %rdi, -0x310(%rbp)
callq 0x79e0
movq -0x310(%rbp), %rdx
leaq 0x3002e(%rip), %rsi     # 0x65c32
leaq -0x270(%rbp), %rdi
callq 0xd700
jmp 0x35c12
leaq -0x271(%rbp), %rdi
callq 0x7660
movq -0x218(%rbp), %rax
movq -0x18(%rax), %rax
leaq -0x218(%rbp,%rax), %rdi
callq 0x7a30
movb %al, -0x311(%rbp)
jmp 0x35c3e
movb -0x311(%rbp), %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x35c4f
jmp 0x35cef
leaq -0x218(%rbp), %rdi
leaq -0x248(%rbp), %rsi
callq 0x70e0
jmp 0x35c64
leaq -0x270(%rbp), %rdi
leaq -0x248(%rbp), %rsi
callq 0x7a80
jmp 0x35c79
jmp 0x35c1e
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x220(%rbp)
movl %eax, -0x224(%rbp)
jmp 0x35ec1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x220(%rbp)
movl %eax, -0x224(%rbp)
leaq -0x249(%rbp), %rdi
callq 0x7660
jmp 0x35ec1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x220(%rbp)
movl %eax, -0x224(%rbp)
leaq -0x271(%rbp), %rdi
callq 0x7660
jmp 0x35eb5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x220(%rbp)
movl %eax, -0x224(%rbp)
jmp 0x35ea9
leaq -0x298(%rbp), %rdi
callq 0x364e0
jmp 0x35cfd
leaq 0x2f068(%rip), %rsi     # 0x64d6c
leaq -0x2b8(%rbp), %rdi
movl $0x10, %edx
callq 0x36520
jmp 0x35d17
leaq -0x270(%rbp), %rdi
leaq -0x298(%rbp), %rsi
leaq -0x2b8(%rbp), %rdx
xorl %ecx, %ecx
callq 0x365c0
jmp 0x35d35
xorl %eax, %eax
movl %eax, %esi
leaq -0x298(%rbp), %rdi
callq 0x36620
movq %rax, -0x320(%rbp)
jmp 0x35d4e
movq -0x320(%rbp), %rsi
leaq -0x2d8(%rbp), %rdi
callq 0x36690
jmp 0x35d63
movb $0x0, -0x2d9(%rbp)
leaq 0x2ff42(%rip), %rsi     # 0x65cb3
xorl %eax, %eax
movl %eax, %edx
movq %rdx, -0x330(%rbp)
leaq -0x2d8(%rbp), %rdi
movq %rdi, -0x338(%rbp)
callq 0x7aa0
movq -0x338(%rbp), %rdi
movq -0x330(%rbp), %rsi
movq %rax, %rdx
incq %rdx
leaq 0x2fe88(%rip), %rcx     # 0x65c32
callq 0x73a0
movq %rax, -0x328(%rbp)
jmp 0x35db8
movq -0x328(%rbp), %rsi
movq -0x300(%rbp), %rdi
callq 0x7270
jmp 0x35dcd
movb $0x1, -0x2d9(%rbp)
testb $0x1, -0x2d9(%rbp)
jne 0x35e39
jmp 0x35e2d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x220(%rbp)
movl %eax, -0x224(%rbp)
jmp 0x35e9d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x220(%rbp)
movl %eax, -0x224(%rbp)
jmp 0x35e91
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x220(%rbp)
movl %eax, -0x224(%rbp)
leaq -0x2d8(%rbp), %rdi
callq 0x73e0
jmp 0x35e91
movq -0x300(%rbp), %rdi
callq 0x73e0
leaq -0x2d8(%rbp), %rdi
callq 0x73e0
leaq -0x2b8(%rbp), %rdi
callq 0x366c0
leaq -0x298(%rbp), %rdi
callq 0x366f0
leaq -0x270(%rbp), %rdi
callq 0x73e0
leaq -0x248(%rbp), %rdi
callq 0x73e0
leaq -0x218(%rbp), %rdi
callq 0x7140
movq -0x2f8(%rbp), %rax
addq $0x340, %rsp            # imm = 0x340
popq %rbp
retq
leaq -0x2b8(%rbp), %rdi
callq 0x366c0
leaq -0x298(%rbp), %rdi
callq 0x366f0
leaq -0x270(%rbp), %rdi
callq 0x73e0
leaq -0x248(%rbp), %rdi
callq 0x73e0
leaq -0x218(%rbp), %rdi
callq 0x7140
movq -0x220(%rbp), %rdi
callq 0x79d0
nopl (%rax)