// File: /workspace/github_c_makefile_star2_O0/TeaInside[P]teavpn/src/teavpn/cli_arg.c
// Function: client_argv_parser
static bool client_argv_parser(char *appname, client_config *client, int argc, char **argv, char **envp)
{
	int c, option_index;

	static char _password[255];

	// Set default config.
	client->server_ip = NULL;
	client->server_port = 55555;
	client->verbose_level = 0;
	client->error_log_file = NULL;
	client->config_file = NULL;
	client->mtu = 1500;
	client->dev = default_dev_name;

	while (true) {

		option_index = 0;
		c = getopt_long(argc, argv, "h:p:vc:", client_options, &option_index);
		if (c == -1) break;

		switch (c) {
			case 'h':
				client->server_ip = optarg;
				break;

			case 'p':
				client->server_port = (uint16_t)atoi(optarg);
				break;

			case 'v':
				client->verbose_level++;
				break;

			case 'c':
				client->config_file = optarg;
				break;

			case 'u':
				client->username = optarg;
				client->username_len = strlen(optarg);
				break;

			case 'P':
				strcpy(_password, optarg);
				client->password = _password;
				client->password_len = strlen(optarg);
				break;

			case 0x1:
				client->error_log_file = optarg;
				break;

			case 0x2:
				client->verbose_level = (uint8_t)atoi(optarg);
				break;

			case 0x3:
				client->dev = optarg;
				break;

			case 0xa:
				show_help_client(appname);
				break;

			default:
				fprintf(stderr, "Fatal error: getopt_long returned unknown value!\n");
				return false;
				break;
		}
	}

	#ifdef TEAVPN_DEBUG
		// Debug arguments
		printf("[debug cli args]\n");
		printf("bind_addr: %s\n", client->server_ip);
		printf("bind_port: %d\n", client->server_port);
		printf("error_log_file: %s\n", client->error_log_file);
		printf("dev_name: %s\n", client->dev);
		printf("config_file: %s\n\n\n", client->config_file);
		fflush(stdout);
	#endif

	return true;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq %fs:0x28, %rax
movq %rax, -0x8(%rbp)
movq %rdi, -0x18(%rbp)
movq %rsi, -0x20(%rbp)
movl %edx, -0x24(%rbp)
movq %rcx, -0x30(%rbp)
movq %r8, -0x38(%rbp)
movq -0x20(%rbp), %rax
movq $0x0, (%rax)
movq -0x20(%rbp), %rax
movw $0xd903, 0x3a(%rax)     # imm = 0xD903
movq -0x20(%rbp), %rax
movb $0x0, 0x3c(%rax)
movq -0x20(%rbp), %rax
movq $0x0, 0x10(%rax)
movq -0x20(%rbp), %rax
movq $0x0, 0x8(%rax)
movq -0x20(%rbp), %rax
movw $0x5dc, 0x20(%rax)      # imm = 0x5DC
movq -0x20(%rbp), %rax
leaq 0xa4a5(%rip), %rcx      # 0xe247
movq %rcx, 0x18(%rax)
movl $0x0, -0xc(%rbp)
movl -0x24(%rbp), %edi
movq -0x30(%rbp), %rsi
leaq 0x6520(%rip), %rdx      # 0xa2db
leaq 0x9e9e(%rip), %rcx      # 0xdc60
leaq -0xc(%rbp), %r8
callq 0x2110
movl %eax, -0x3c(%rbp)
cmpl $-0x1, -0x3c(%rbp)
jne 0x3dd9
jmp 0x3f96
movl -0x3c(%rbp), %eax
movl %eax, -0x40(%rbp)
subl $0x1, %eax
je 0x3f23
jmp 0x3dea
movl -0x40(%rbp), %eax
subl $0x2, %eax
je 0x3f37
jmp 0x3df8
movl -0x40(%rbp), %eax
subl $0x3, %eax
je 0x3f51
jmp 0x3e06
movl -0x40(%rbp), %eax
subl $0xa, %eax
je 0x3f65
jmp 0x3e14
movl -0x40(%rbp), %eax
subl $0x50, %eax
je 0x3ee4
jmp 0x3e22
movl -0x40(%rbp), %eax
subl $0x63, %eax
je 0x3e9e
jmp 0x3e2c
movl -0x40(%rbp), %eax
subl $0x68, %eax
je 0x3e57
jmp 0x3e36
movl -0x40(%rbp), %eax
subl $0x70, %eax
je 0x3e6d
jmp 0x3e40
movl -0x40(%rbp), %eax
subl $0x75, %eax
je 0x3eb5
jmp 0x3e4a
movl -0x40(%rbp), %eax
subl $0x76, %eax
je 0x3e8c
jmp 0x3f70
movq 0xa17a(%rip), %rax      # 0xdfd8
movq (%rax), %rcx
movq -0x20(%rbp), %rax
movq %rcx, (%rax)
jmp 0x3f91
movq 0xa164(%rip), %rax      # 0xdfd8
movq (%rax), %rdi
callq 0x2390
movw %ax, %cx
movq -0x20(%rbp), %rax
movw %cx, 0x3a(%rax)
jmp 0x3f91
movq -0x20(%rbp), %rax
movb 0x3c(%rax), %cl
addb $0x1, %cl
movb %cl, 0x3c(%rax)
jmp 0x3f91
movq 0xa133(%rip), %rax      # 0xdfd8
movq (%rax), %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x8(%rax)
jmp 0x3f91
movq 0xa11c(%rip), %rax      # 0xdfd8
movq (%rax), %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x28(%rax)
movq 0xa10a(%rip), %rax      # 0xdfd8
movq (%rax), %rdi
callq 0x20f0
movb %al, %cl
movq -0x20(%rbp), %rax
movb %cl, 0x38(%rax)
jmp 0x3f91
movq 0xa0ed(%rip), %rax      # 0xdfd8
movq (%rax), %rsi
leaq 0xa36b(%rip), %rdi      # 0xe260
callq 0x2070
movq -0x20(%rbp), %rax
leaq 0xa35b(%rip), %rcx      # 0xe260
movq %rcx, 0x30(%rax)
movq 0xa0c8(%rip), %rax      # 0xdfd8
movq (%rax), %rdi
callq 0x20f0
movb %al, %cl
movq -0x20(%rbp), %rax
movb %cl, 0x39(%rax)
jmp 0x3f91
movq 0xa0ae(%rip), %rax      # 0xdfd8
movq (%rax), %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x10(%rax)
jmp 0x3f91
movq 0xa09a(%rip), %rax      # 0xdfd8
movq (%rax), %rdi
callq 0x2390
movb %al, %cl
movq -0x20(%rbp), %rax
movb %cl, 0x3c(%rax)
jmp 0x3f91
movq 0xa080(%rip), %rax      # 0xdfd8
movq (%rax), %rcx
movq -0x20(%rbp), %rax
movq %rcx, 0x18(%rax)
jmp 0x3f91
movq -0x18(%rbp), %rdi
callq 0x40c0
jmp 0x3f91
movq 0xa081(%rip), %rax      # 0xdff8
movq (%rax), %rdi
leaq 0x61bc(%rip), %rsi      # 0xa13d
movb $0x0, %al
callq 0x2240
movb $0x0, -0xd(%rbp)
jmp 0x4024
jmp 0x3da6
leaq 0x61d2(%rip), %rdi      # 0xa16f
movb $0x0, %al
callq 0x2150
movq -0x20(%rbp), %rax
movq (%rax), %rsi
leaq 0x61cf(%rip), %rdi      # 0xa181
movb $0x0, %al
callq 0x2150
movq -0x20(%rbp), %rax
movzwl 0x3a(%rax), %esi
leaq 0x61c8(%rip), %rdi      # 0xa190
movb $0x0, %al
callq 0x2150
movq -0x20(%rbp), %rax
movq 0x10(%rax), %rsi
leaq 0x61ce(%rip), %rdi      # 0xa1ac
movb $0x0, %al
callq 0x2150
movq -0x20(%rbp), %rax
movq 0x18(%rax), %rsi
leaq 0x61cc(%rip), %rdi      # 0xa1c0
movb $0x0, %al
callq 0x2150
movq -0x20(%rbp), %rax
movq 0x8(%rax), %rsi
leaq 0x61c4(%rip), %rdi      # 0xa1ce
movb $0x0, %al
callq 0x2150
movq 0x9fb8(%rip), %rax      # 0xdfd0
movq (%rax), %rdi
callq 0x22d0
movb $0x1, -0xd(%rbp)
movb -0xd(%rbp), %al
movb %al, -0x41(%rbp)
movq %fs:0x28, %rax
movq -0x8(%rbp), %rcx
cmpq %rcx, %rax
jne 0x4047
movb -0x41(%rbp), %al
andb $0x1, %al
addq $0x50, %rsp
popq %rbp
retq
callq 0x2100
nopl (%rax)