// File: /workspace/github_cpp_makefile_star2_O3/rishabh-battulwar[P]imageprocessing/./src/Main.cpp
// Function: usage(char const*)
void usage(const char *exename)
{
	std::cout << "\n General Usage: " << exename << " -prob {method_name} infile outfile [type] [-w width] [-h height] [-tw target_width] [-th target_height] [-ws window_size]" << std::endl;
	std::cout << " [Specific Usage]: \n" << std::endl;
	
	std::cout << " Problem 1.a1. Usage: " << exename << " -prob sobel -i <input file path> -o <output file path> [-w 'width'] [-h 'height']  [-perc 'percentage']" << std::endl;
	std::cout << "     -----> Example: " << exename << " -prob sobel -i ../images/elaine.raw -o ../output_images/elaine_edge_map.raw -w 256 -h 256 -perc 10" << "\n" << std::endl;
	
	std::cout << " Problem 1.a2. Usage: " << exename << "  -prob LoG -i <input file path> -o <output file path> [-w 'width'] [-h 'height']" << std::endl;
	std::cout << "     -----> Example: " << exename << " -prob LoG -i ../images/elaine.raw -o ../output_images/elaine_LoG_edge_map.raw -w 256 -h 256" << "\n" << std::endl;
	
	std::cout << " Problem 1.b. Usage: " << exename << " -prob art_effect -i <input file path> -o <output file path> [-w 'width'] [-h 'height']" << std::endl;
	std::cout << "     -----> Example: " << exename << " -prob art_effect -i ../images/Scarlett.raw -o ../output_images/Scarlett_out.raw -w 400 -h 300" << "\n" <<std::endl;
	
	std::cout << " Problem 2.1. Usage: " << exename << " -prob binary -i <input file path> -o <output file path> [-w 'width'] [-h 'height']" << std::endl;
	std::cout << "     -----> Example: " << exename << " -prob binary -i ../images/fingerprint_good.raw -o ../output_images/fingerprint_good_binary.raw -w 388 -h 374 " << "\n" << std::endl;
	
	std::cout << " Problem 2.2. Usage: " << exename << " -prob fingerprint -i <input file path> -o <output file path> [-w 'width'] [-h 'height']" << std::endl;
	std::cout << "     -----> Example: " << exename << " -prob fingerprint -i ../images/fingerprint_good.raw -o ../output_images/fingerprint_good_processed.raw -w 388 -h 374" << "\n" << std::endl;
	
	std::cout << " Problem 2.3. Usage: " << exename << " -prob minutiae -i <input file path> -o <output file path> [-w 'width'] [-h 'height'] " << std::endl;
	std::cout << "     -----> Example: " << exename << " -prob minutiae -i ../images/fingerprint_good.raw -o ../output_images/fingerprint_good_extraction.raw -w 388 -h 374" << "\n" << std::endl;
	
	std::cout << " Problem 3.1. Usage: " << exename << " -prob halftone -i <input file path> [-w 'width'] [-h 'height']" << std::endl;
	std::cout << "     -----> Example: " << exename << " -prob halftone -i ../images/boat.raw -w 512 -h 512" << "\n" << std::endl;
	
	std::cout << " Problem 3.2. Usage: " << exename << " -prob color_halftone -i <input file path> [-w 'width'] [-h 'height']" << std::endl;
	std::cout << "     -----> Example: " << exename << " -prob color_halftone -i ../images/trees.raw -o ../output_images/color_halftone_trees.raw -w 350 -h 258" << "\n" << std::endl;
	
	// std::cout << " Problem 1.a. Usage: " << exename << " -prob color_to_bw -i <input file path> -o <output file path> [-w 'width'] [-h 'height']" << std::endl;
	// std::cout << "     -----> Example: " << exename << " -prob color_to_bw -i ../images/mandril.raw -o ../images/mandril_bw.raw -w 512 -h 512" << "\n" << std::endl;
	
	// std::cout << " Problem 1.b. Usage: " << exename << " -prob image_resize -i <input file path> -o <output file path> [-w 'width'] [-h 'height'] [-tw 'target_width'] [-th 'target_height]" << std::endl;
	// std::cout << "     -----> Example: " << exename << " -prob image_resize -i ../images/pepper.raw -o ../images/pepper_scale.raw -w 512 -h 512 -tw 700 -th 700" << "\n" << std::endl;
	
	// std::cout << " Problem 2.a1 Usage: " << exename << " -prob hist_eq_cum -i <input file path> -o <output file path> [-w 'width'] [-h 'height']" << std::endl;
	// std::cout << "     -----> Example: " << exename << " -prob hist_eq_cum -i ../images/Girl.raw -o ../images/Girl_hist_eq_cum.raw -w 256 -h 256" << "\n" <<std::endl;
	
	// std::cout << " Problem 2.a2 Usage: " << exename << " -prob hist_equal -i <input file path> -o <output file path> [-w 'width'] [-h 'height']" << std::endl;
	// std::cout << "     -----> Example: " << exename << " -prob hist_equal -i ../images/Girl.raw -o ../images/Girl_hist_eq.raw -w 256 -h 256" << "\n" << std::endl;
	
	// std::cout << " Problem 2.b. Usage: " << exename << " -prob oil_paint_effect -i <input file path> -o <output file path> [-w 'width'] [-h 'height'] [-ws 'window_size']" << std::endl;
	// std::cout << "     -----> Example: " << exename << " -prob oil_paint_effect -i ../images/Trojan_256.raw -o ../images/Trojan_256_oil.raw -w 384 -h 384 -ws 3" << "\n" << std::endl;
	
	// std::cout << " Problem 2.c. Usage: " << exename << " -prob special_effect -i <input file path> -o <output file path> [-w 'width'] [-h 'height']" << std::endl;
	// std::cout << "     -----> Example: " << exename << " -prob special_effect -i ../images/chat.raw -o ../images/chat_effect.raw -w 481 -h 321" << "\n" << std::endl;
	
	// std::cout << " Problem 3.a. Usage: " << exename << " -prob denoising -i <input file path> -o <output file path> [-w 'width'] [-h 'height'] [-sigma 'value'] [-thresh 'threshold_value']" << std::endl;
	// std::cout << "     -----> Example: " << exename << " -prob denoising -i ../images/Lena_mixed.raw -o ../images/Lena_clean.raw -w 512 -h 512 -sigma 3 -thresh 20.0" << "\n" << std::endl;
	
	// std::cout << " Problem 3.b. Usage: " << exename << " -prob bilateral_filter -i <input file path> -o <output file path> [-w 'width'] [-h 'height'] [-tw 'target_width'] [-th 'target_height] [-sigma 'value'] [-sigma_sim 'sigma_similarity'] [-iter '#iterations']" << std::endl;
	// std::cout << "     -----> Example: " << exename << " -prob bilateral_filter -i ../images/pepper.raw -o ../images/pepper_scale.raw -w 512 -h 512 -ws 3 -sigma 2 -sigma_sim 20 -iter 5" << "\n" << std::endl;
	
	// std::cout << " Problem 3.c. Usage: " << exename << " -prob non_local_mean -i <input file path> -o <output file path> [-w 'width'] [-h 'height'] [-tw 'target_width'] [-th 'target_height] [-rs 'region_size'] [-sigma 'value'] [-h 'h_value']" << std::endl;
	// std::cout << "     -----> Example: " << exename << " -prob non_local_mean -i ../images/pepper.raw -o ../images/pepper_scale.raw -w 512 -h 512 -rs 5 -sigma 3 -h 5" << "\n" << std::endl;

	std::cout << "\t type :'bw'||'color' ; default: 'color'" << std::endl;
	std::cout << "\t -w width : (default) 512" 				<< std::endl;
	std::cout << "\t -h height : (default) 512" 			<< std::endl;
	std::cout << "\t -tw target_width : (default) 700" 		<< std::endl;
	std::cout << "\t -th target_height : (default) 700\n" 	<< std::endl;
	std::cout << "\t -th target_height : (default) 700\n" 	<< std::endl;
	exit(1);
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
movq %rdi, %r14
movq 0x601f(%rip), %rbx      # 0x15fd0
leaq 0x1ace(%rip), %rsi      # 0x11a86
movq %rbx, %rdi
callq 0x2160
movq %rax, %rdi
movq %r14, %rsi
callq 0x2160
leaq 0x1ac6(%rip), %rsi      # 0x11a98
movq %rax, %rdi
callq 0x2160
movq %rax, %rdi
callq 0x20a0
leaq 0x1b2a(%rip), %rsi      # 0x11b13
movq %rbx, %rdi
callq 0x2160
movq %rax, %rdi
callq 0x20a0
leaq 0x1b28(%rip), %rsi      # 0x11b28
movq %rbx, %rdi
callq 0x2160
movq %rax, %rdi
movq %r14, %rsi
callq 0x2160
leaq 0x1b25(%rip), %rsi      # 0x11b3f
movq %rax, %rdi
callq 0x2160
movq %rax, %rdi
callq 0x20a0
leaq 0x1b77(%rip), %r15      # 0x11ba8
movq %rbx, %rdi
movq %r15, %rsi
callq 0x2160
movq %rax, %rdi
movq %r14, %rsi
callq 0x2160
leaq 0x1b70(%rip), %rsi      # 0x11bbe
movq %rax, %rdi
callq 0x2160
leaq 0x1ac9(%rip), %r12      # 0x11b26
movq %rax, %rdi
movq %r12, %rsi
callq 0x2160
movq %rax, %rdi
callq 0x20a0
leaq 0x1bab(%rip), %rsi      # 0x11c22
movq %rbx, %rdi
callq 0x2160
movq %rax, %rdi
movq %r14, %rsi
callq 0x2160
leaq 0x1ba8(%rip), %rsi      # 0x11c39
movq %rax, %rdi
callq 0x2160
movq %rax, %rdi
callq 0x20a0
movq %rbx, %rdi
movq %r15, %rsi
callq 0x2160
movq %rax, %rdi
movq %r14, %rsi
callq 0x2160
leaq 0x1bcd(%rip), %rsi      # 0x11c8b
movq %rax, %rdi
callq 0x2160
movq %rax, %rdi
movq %r12, %rsi
callq 0x2160
movq %rax, %rdi
callq 0x20a0
leaq 0x1c08(%rip), %rsi      # 0x11ce8
movq %rbx, %rdi
callq 0x2160
movq %rax, %rdi
movq %r14, %rsi
callq 0x2160
leaq 0x1c04(%rip), %rsi      # 0x11cfe
movq %rax, %rdi
callq 0x2160
movq %rax, %rdi
callq 0x20a0
movq %rbx, %rdi
movq %r15, %rsi
callq 0x2160
movq %rax, %rdi
movq %r14, %rsi
callq 0x2160
leaq 0x1c2f(%rip), %rsi      # 0x11d56
movq %rax, %rdi
callq 0x2160
movq %rax, %rdi
movq %r12, %rsi
callq 0x2160
movq %rax, %rdi
callq 0x20a0
leaq 0x1c6c(%rip), %rsi      # 0x11db5
movq %rbx, %rdi
callq 0x2160
movq %rax, %rdi
movq %r14, %rsi
callq 0x2160
leaq 0x1c68(%rip), %rsi      # 0x11dcb
movq %rax, %rdi
callq 0x2160
movq %rax, %rdi
callq 0x20a0
movq %rbx, %rdi
movq %r15, %rsi
callq 0x2160
movq %rax, %rdi
movq %r14, %rsi
callq 0x2160
leaq 0x1c8f(%rip), %rsi      # 0x11e1f
movq %rax, %rdi
callq 0x2160
movq %rax, %rdi
movq %r12, %rsi
callq 0x2160
movq %rax, %rdi
callq 0x20a0
leaq 0x1cdc(%rip), %rsi      # 0x11e8e
movq %rbx, %rdi
callq 0x2160
movq %rax, %rdi
movq %r14, %rsi
callq 0x2160
leaq 0x1cd8(%rip), %rsi      # 0x11ea4
movq %rax, %rdi
callq 0x2160
movq %rax, %rdi
callq 0x20a0
movq %rbx, %rdi
movq %r15, %rsi
callq 0x2160
movq %rax, %rdi
movq %r14, %rsi
callq 0x2160
leaq 0x1d04(%rip), %rsi      # 0x11efd
movq %rax, %rdi
callq 0x2160
movq %rax, %rdi
movq %r12, %rsi
callq 0x2160
movq %rax, %rdi
callq 0x20a0
leaq 0x1d58(%rip), %rsi      # 0x11f73
movq %rbx, %rdi
callq 0x2160
movq %rax, %rdi
movq %r14, %rsi
callq 0x2160
leaq 0x1d54(%rip), %rsi      # 0x11f89
movq %rax, %rdi
callq 0x2160
movq %rax, %rdi
callq 0x20a0
movq %rbx, %rdi
movq %r15, %rsi
callq 0x2160
movq %rax, %rdi
movq %r14, %rsi
callq 0x2160
leaq 0x1d7e(%rip), %rsi      # 0x11fe0
movq %rax, %rdi
callq 0x2160
movq %rax, %rdi
movq %r12, %rsi
callq 0x2160
movq %rax, %rdi
callq 0x20a0
leaq 0x1dd0(%rip), %rsi      # 0x12054
movq %rbx, %rdi
callq 0x2160
movq %rax, %rdi
movq %r14, %rsi
callq 0x2160
leaq 0x1dcc(%rip), %rsi      # 0x1206a
movq %rax, %rdi
callq 0x2160
movq %rax, %rdi
callq 0x20a0
movq %rbx, %rdi
movq %r15, %rsi
callq 0x2160
movq %rax, %rdi
movq %r14, %rsi
callq 0x2160
leaq 0x1ddf(%rip), %rsi      # 0x120aa
movq %rax, %rdi
callq 0x2160
movq %rax, %rdi
movq %r12, %rsi
callq 0x2160
movq %rax, %rdi
callq 0x20a0
leaq 0x1df1(%rip), %rsi      # 0x120de
movq %rbx, %rdi
callq 0x2160
movq %rax, %rdi
movq %r14, %rsi
callq 0x2160
leaq 0x1ded(%rip), %rsi      # 0x120f4
movq %rax, %rdi
callq 0x2160
movq %rax, %rdi
callq 0x20a0
movq %rbx, %rdi
movq %r15, %rsi
callq 0x2160
movq %rax, %rdi
movq %r14, %rsi
callq 0x2160
leaq 0x1e06(%rip), %rsi      # 0x1213a
movq %rax, %rdi
callq 0x2160
movq %rax, %rdi
movq %r12, %rsi
callq 0x2160
movq %rax, %rdi
callq 0x20a0
leaq 0x1e4c(%rip), %rsi      # 0x121a2
movq %rbx, %rdi
callq 0x2160
movq %rax, %rdi
callq 0x20a0
leaq 0x1e5e(%rip), %rsi      # 0x121cb
movq %rbx, %rdi
callq 0x2160
movq %rax, %rdi
callq 0x20a0
leaq 0x1e62(%rip), %rsi      # 0x121e6
movq %rbx, %rdi
callq 0x2160
movq %rax, %rdi
callq 0x20a0
leaq 0x1e67(%rip), %rsi      # 0x12202
movq %rbx, %rdi
callq 0x2160
movq %rax, %rdi
callq 0x20a0
leaq 0x1e73(%rip), %r14      # 0x12225
movq %rbx, %rdi
movq %r14, %rsi
callq 0x2160
movq %rax, %rdi
callq 0x20a0
movq %rbx, %rdi
movq %r14, %rsi
callq 0x2160
movq %rax, %rdi
callq 0x20a0
movl $0x1, %edi
callq 0x21c0