// File: /workspace/github_cpp_makefile_star2_O2/FalconUA[P]vfs/main.cpp
// Function: main
int main(){
	// creating virtual operation system
	virt::operatingsystem os;

	// creating utilities
	virt::util::shell* sh_app = new virt::util::shell(&os);
	virt::util::cat* cat_app = new virt::util::cat(&os);
	virt::util::cd* cd_app = new virt::util::cd(&os);
	virt::util::ls* ls_app = new virt::util::ls(&os);
	virt::util::mkdir* mkdir_app = new virt::util::mkdir(&os);
	virt::util::pwd* pwd_app = new virt::util::pwd(&os);
	virt::util::help* help_app = new virt::util::help(&os);
	virt::util::touch* touch_app = new virt::util::touch(&os);
	virt::util::rm* rm_app = new virt::util::rm(&os);
	virt::util::mv* mv_app = new virt::util::mv(&os);
	virt::util::cp* cp_app = new virt::util::cp(&os);

	// install them into our operating system
	os.install_utility("shell", static_cast<virt::os::utility*>(sh_app));
	os.install_utility("cat", static_cast<virt::os::utility*>(cat_app));
	os.install_utility("cd", static_cast<virt::os::utility*>(cd_app));
	os.install_utility("ls", static_cast<virt::os::utility*>(ls_app));
	os.install_utility("mkdir", static_cast<virt::os::utility*>(mkdir_app));
	os.install_utility("pwd", static_cast<virt::os::utility*>(pwd_app));
	os.install_utility("help", static_cast<virt::os::utility*>(help_app));
	os.install_utility("touch", static_cast<virt::os::utility*>(touch_app));
	os.install_utility("rm", static_cast<virt::os::utility*>(rm_app));
	os.install_utility("mv", static_cast<virt::os::utility*>(mv_app));
	os.install_utility("cp", static_cast<virt::os::utility*>(cp_app));

	// launch our main shell
	sample_filesystem(os);
	os.launch_utility("shell", "default shell");

	// good boys always clean their big RAM after deploying :)
	delete sh_app;
	delete cat_app;
	delete cd_app;
	delete ls_app;
	delete mkdir_app;
	delete pwd_app;
	delete help_app;
	delete touch_app;
	delete rm_app;
	delete mv_app;
	delete cp_app;

	return 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x2b8, %rsp            # imm = 0x2B8
leaq 0x40(%rsp), %rdi
callq 0x5880
pushq $0x60
popq %rdi
callq 0x31b0
movq %rax, %rbp
leaq 0x40(%rsp), %rsi
movq %rax, %rdi
callq 0x7190
pushq $0x50
popq %rdi
callq 0x31b0
leaq 0x40(%rsp), %rsi
movq %rax, 0x38(%rsp)
movq %rax, %rdi
callq 0x723c
pushq $0x50
popq %rdi
callq 0x31b0
movq %rax, %rbx
leaq 0x40(%rsp), %rsi
movq %rax, %rdi
callq 0x72d6
pushq $0x50
popq %rdi
callq 0x31b0
leaq 0x40(%rsp), %rsi
movq %rax, 0x30(%rsp)
movq %rax, %rdi
callq 0x7370
pushq $0x50
popq %rdi
callq 0x31b0
leaq 0x40(%rsp), %rsi
movq %rax, 0x28(%rsp)
movq %rax, %rdi
callq 0x740a
pushq $0x50
popq %rdi
callq 0x31b0
leaq 0x40(%rsp), %rsi
movq %rax, 0x20(%rsp)
movq %rax, %rdi
callq 0x74a4
pushq $0x50
popq %rdi
callq 0x31b0
leaq 0x40(%rsp), %rsi
movq %rax, 0x18(%rsp)
movq %rax, %rdi
callq 0x753e
pushq $0x50
popq %rdi
callq 0x31b0
leaq 0x40(%rsp), %rsi
movq %rax, 0x10(%rsp)
movq %rax, %rdi
callq 0x75d8
pushq $0x50
popq %rdi
callq 0x31b0
movq %rax, %r15
leaq 0x40(%rsp), %rsi
movq %rax, %rdi
callq 0x7672
pushq $0x50
popq %rdi
callq 0x31b0
movq %rax, %r12
leaq 0x40(%rsp), %rsi
movq %rax, %rdi
callq 0x770c
pushq $0x50
popq %rdi
callq 0x31b0
movq %rax, %r13
leaq 0x40(%rsp), %rsi
movq %rax, %rdi
callq 0x77a6
leaq 0x263f(%rip), %rsi      # 0x91ef
leaq 0x278(%rsp), %rdi
leaq 0xe(%rsp), %rdx
callq 0x3e68
leaq 0x40(%rsp), %rdi
leaq 0x278(%rsp), %rsi
movq %rbp, %rdx
callq 0x58dc
leaq 0x278(%rsp), %rdi
callq 0x30d0
leaq 0x25e3(%rip), %rsi      # 0x91ce
leaq 0x258(%rsp), %rdi
leaq 0xe(%rsp), %rdx
callq 0x3e68
leaq 0x40(%rsp), %rdi
leaq 0x258(%rsp), %rsi
movq 0x38(%rsp), %rdx
callq 0x58dc
leaq 0x258(%rsp), %rdi
callq 0x30d0
leaq 0x254e(%rip), %rsi      # 0x9176
leaq 0x238(%rsp), %rdi
leaq 0xe(%rsp), %rdx
callq 0x3e68
leaq 0x40(%rsp), %rdi
leaq 0x238(%rsp), %rsi
movq %rbx, %rdx
callq 0x58dc
leaq 0x238(%rsp), %rdi
callq 0x30d0
leaq 0x256f(%rip), %rsi      # 0x91d2
leaq 0x218(%rsp), %rdi
leaq 0xe(%rsp), %rdx
callq 0x3e68
leaq 0x40(%rsp), %rdi
leaq 0x218(%rsp), %rsi
movq 0x30(%rsp), %rdx
callq 0x58dc
leaq 0x218(%rsp), %rdi
callq 0x30d0
leaq 0x23c4(%rip), %rsi      # 0x9064
leaq 0x1f8(%rsp), %rdi
leaq 0xe(%rsp), %rdx
callq 0x3e68
leaq 0x40(%rsp), %rdi
leaq 0x1f8(%rsp), %rsi
movq 0x28(%rsp), %rdx
callq 0x58dc
leaq 0x1f8(%rsp), %rdi
callq 0x30d0
leaq 0x24f8(%rip), %rsi      # 0x91d5
leaq 0x1d8(%rsp), %rdi
leaq 0xe(%rsp), %rdx
callq 0x3e68
leaq 0x40(%rsp), %rdi
leaq 0x1d8(%rsp), %rsi
movq 0x20(%rsp), %rdx
callq 0x58dc
leaq 0x1d8(%rsp), %rdi
callq 0x30d0
leaq 0x24bf(%rip), %rsi      # 0x91d9
leaq 0x1b8(%rsp), %rdi
leaq 0xe(%rsp), %rdx
callq 0x3e68
leaq 0x40(%rsp), %rdi
leaq 0x1b8(%rsp), %rsi
movq 0x18(%rsp), %rdx
callq 0x58dc
leaq 0x1b8(%rsp), %rdi
callq 0x30d0
leaq 0x2319(%rip), %rsi      # 0x9070
leaq 0x198(%rsp), %rdi
leaq 0xe(%rsp), %rdx
callq 0x3e68
leaq 0x40(%rsp), %rdi
leaq 0x198(%rsp), %rsi
movq 0x10(%rsp), %rdx
callq 0x58dc
leaq 0x198(%rsp), %rdi
callq 0x30d0
leaq 0x244a(%rip), %rsi      # 0x91de
leaq 0x178(%rsp), %rdi
leaq 0xe(%rsp), %rdx
callq 0x3e68
leaq 0x40(%rsp), %rdi
leaq 0x178(%rsp), %rsi
movq %r15, %rdx
callq 0x58dc
leaq 0x178(%rsp), %rdi
callq 0x30d0
leaq 0x2412(%rip), %rsi      # 0x91e1
leaq 0x158(%rsp), %rdi
leaq 0xe(%rsp), %rdx
callq 0x3e68
leaq 0x40(%rsp), %rdi
leaq 0x158(%rsp), %rsi
movq %r12, %rdx
callq 0x58dc
leaq 0x158(%rsp), %rdi
callq 0x30d0
leaq 0x23da(%rip), %rsi      # 0x91e4
leaq 0x138(%rsp), %rdi
leaq 0xe(%rsp), %rdx
callq 0x3e68
leaq 0x40(%rsp), %rdi
leaq 0x138(%rsp), %rsi
movq %r13, %rdx
callq 0x58dc
leaq 0x138(%rsp), %rdi
callq 0x30d0
leaq 0x40(%rsp), %rdi
callq 0x60a0
leaq 0x23a0(%rip), %rsi      # 0x91ef
leaq 0x118(%rsp), %rdi
leaq 0xe(%rsp), %rdx
callq 0x3e68
leaq 0x237f(%rip), %rsi      # 0x91e7
leaq 0xf8(%rsp), %rdi
leaq 0xf(%rsp), %rdx
callq 0x3e68
movq %rbx, %r14
leaq 0x298(%rsp), %rdi
leaq 0x40(%rsp), %rsi
leaq 0x118(%rsp), %rdx
leaq 0xf8(%rsp), %rcx
callq 0x598c
leaq 0x298(%rsp), %rdi
callq 0x30d0
leaq 0xf8(%rsp), %rdi
callq 0x30d0
leaq 0x118(%rsp), %rdi
callq 0x30d0
movq %rbp, %rdi
callq 0x7840
pushq $0x60
popq %rsi
movq %rbp, %rdi
callq 0x31c0
movq 0x38(%rsp), %rbx
movq %rbx, %rdi
callq 0x7840
pushq $0x50
popq %rbp
movq %rbx, %rdi
movq %rbp, %rsi
callq 0x31c0
movq %r14, %rdi
callq 0x7840
movq %r14, %rdi
movq %rbp, %rsi
callq 0x31c0
movq 0x30(%rsp), %rbx
movq %rbx, %rdi
callq 0x7840
movq %rbx, %rdi
movq %rbp, %rsi
callq 0x31c0
movq 0x28(%rsp), %rbx
movq %rbx, %rdi
callq 0x7840
movq %rbx, %rdi
movq %rbp, %rsi
callq 0x31c0
movq 0x20(%rsp), %rbx
movq %rbx, %rdi
callq 0x7840
movq %rbx, %rdi
movq %rbp, %rsi
callq 0x31c0
movq 0x18(%rsp), %rbx
movq %rbx, %rdi
callq 0x7840
movq %rbx, %rdi
movq %rbp, %rsi
callq 0x31c0
movq 0x10(%rsp), %rbx
movq %rbx, %rdi
callq 0x7840
movq %rbx, %rdi
movq %rbp, %rsi
callq 0x31c0
movq %r15, %rdi
callq 0x7840
movq %r15, %rdi
movq %rbp, %rsi
callq 0x31c0
movq %r12, %rdi
callq 0x7840
movq %r12, %rdi
movq %rbp, %rsi
callq 0x31c0
movq %r13, %rdi
callq 0x7840
movq %r13, %rdi
movq %rbp, %rsi
callq 0x31c0
leaq 0x40(%rsp), %rdi
callq 0x58c6
xorl %eax, %eax
addq $0x2b8, %rsp            # imm = 0x2B8
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %r14
leaq 0xf8(%rsp), %rdi
callq 0x30d0
jmp 0x6feb
movq %rax, %r14
leaq 0x118(%rsp), %rdi
jmp 0x70c5
jmp 0x717b
movq %rax, %r14
leaq 0x138(%rsp), %rdi
jmp 0x70c5
jmp 0x717b
movq %rax, %r14
leaq 0x158(%rsp), %rdi
jmp 0x70c5
jmp 0x717b
movq %rax, %r14
leaq 0x178(%rsp), %rdi
jmp 0x70c5
jmp 0x717b
movq %rax, %r14
leaq 0x198(%rsp), %rdi
jmp 0x70c5
jmp 0x717b
movq %rax, %r14
leaq 0x1b8(%rsp), %rdi
jmp 0x70c5
jmp 0x717b
movq %rax, %r14
leaq 0x1d8(%rsp), %rdi
jmp 0x70c5
jmp 0x717b
movq %rax, %r14
leaq 0x1f8(%rsp), %rdi
jmp 0x70c5
jmp 0x717b
movq %rax, %r14
leaq 0x218(%rsp), %rdi
jmp 0x70c5
jmp 0x717b
movq %rax, %r14
leaq 0x238(%rsp), %rdi
jmp 0x70c5
jmp 0x717b
movq %rax, %r14
leaq 0x258(%rsp), %rdi
jmp 0x70c5
jmp 0x717b
movq %rax, %r14
leaq 0x278(%rsp), %rdi
callq 0x30d0
jmp 0x717e
jmp 0x717b
movq %rax, %r14
pushq $0x50
popq %rsi
movq %r13, %rdi
jmp 0x7172
movq %rax, %r14
pushq $0x50
popq %rsi
movq %r12, %rdi
jmp 0x7172
jmp 0x717b
movq %rax, %r14
pushq $0x50
popq %rsi
movq %r15, %rdi
jmp 0x7172
jmp 0x717b
movq %rax, %r14
pushq $0x50
popq %rsi
movq 0x10(%rsp), %rdi
jmp 0x7172
jmp 0x717b
movq %rax, %r14
pushq $0x50
popq %rsi
movq 0x18(%rsp), %rdi
jmp 0x7172
jmp 0x717b
movq %rax, %r14
pushq $0x50
popq %rsi
movq 0x20(%rsp), %rdi
jmp 0x7172
jmp 0x717b
movq %rax, %r14
pushq $0x50
popq %rsi
movq 0x28(%rsp), %rdi
jmp 0x7172
jmp 0x717b
movq %rax, %r14
pushq $0x50
popq %rsi
movq 0x30(%rsp), %rdi
jmp 0x7172
jmp 0x717b
movq %rax, %r14
pushq $0x50
popq %rsi
movq %rbx, %rdi
jmp 0x7172
jmp 0x717b
movq %rax, %r14
pushq $0x50
popq %rsi
movq 0x38(%rsp), %rdi
jmp 0x7172
jmp 0x717b
movq %rax, %r14
pushq $0x60
popq %rsi
movq %rbp, %rdi
callq 0x31c0
jmp 0x717e
jmp 0x717b
movq %rax, %r14
leaq 0x40(%rsp), %rdi
callq 0x58c6
movq %r14, %rdi
callq 0x32c0