#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ fprintf(int /*<<< orphan*/, char *, ...);
int /*<<< orphan*/ stdout;
void usage(char *p) {
  fprintf(stdout,
          "Usage: %s [<options>]\n\n"
          "Options:\n\n"
          "  Argument      | Type         | Description                        "
          "      | Option type | Example\n"
          "  "
          "--------------------------------------------------------------------"
          "---------------------------------------\n"
          "  --file1/-1    | Path         | Set file1 path                     "
          "      | required    | --file1 wordlist1.txt\n"
          "  --file2/-2    | Path         | Set file2 path                     "
          "      | required    | --file2 wordlist2.txt\n"
          "  --file3/-3    | Path         | Set file3 path                     "
          "      | optional    | --file3 wordlist3.txt\n"
          "  --file4/-4    | Path         | Set file4 path                     "
          "      | optional    | --file4 wordlist4.txt\n"
          "  --file5/-5    | Path         | Set file5 path                     "
          "      | optional    | --file5 wordlist5.txt\n"
          "  --file6/-6    | Path         | Set file6 path                     "
          "      | optional    | --file6 wordlist6.txt\n"
          "  --file7/-7    | Path         | Set file7 path                     "
          "      | optional    | --file7 wordlist7.txt\n"
          "  --file8/-8    | Path         | Set file8 path                     "
          "      | optional    | --file8 wordlist8.txt\n"
          "\n"
          "  --sepStart    | Char/String  | Set char/string at the beginning   "
          "      | optional    | --sepStart '['\n"
          "  --sep1        | Char/String  | Set separator between file1 and "
          "file2    | optional    | --sep1 'a.'\n"
          "  --sep2        | Char/String  | Set separator between file2 and "
          "file3    | optional    | --sep2 'bc'\n"
          "  --sep3        | Char/String  | Set separator between file3 and "
          "file4    | optional    | --sep3 ',d'\n"
          "  --sep4        | Char/String  | Set separator between file4 and "
          "file5    | optional    | --sep4 'e.'\n"
          "  --sep5        | Char/String  | Set separator between file5 and "
          "file6    | optional    | --sep5 'f.g'\n"
          "  --sep6        | Char/String  | Set separator between file6 and "
          "file7    | optional    | --sep6 'h-'\n"
          "  --sep7        | Char/String  | Set separator between file7 and "
          "file8    | optional    | --sep7 '-j'\n"
          "  --sepEnd      | Char/String  | Set char/string at the end         "
          "      | optional    | --sepEnd ']'\n"
          "  --sepFill     | Char/String  | Fill all unsetted separator "
          "buffers      | optional    | --sepFill '-'\n"
          "\n"
          "  --skip/-S     | Num          | Skip N sentences                   "
          "      | optional    | --skip 0\n"
          "  --limit/-L    | Num          | Exit after N sentences             "
          "      | optional    | --limit 1\n"
          "  --max-rep/-m  | Num          | Skip sentences with > N repeated "
          "words   | optional    | --max-rep 1\n"
          "  --max-len/-l  | Num          | Skip final sentences with len > N  "
          "      | optional    | --max-len 30\n"
          "\n"
          "  --session/-s  | String       | Set session name                   "
          "      | optional    | --session testSession\n"
          "  --restore/-r  | String       | Restore by session name            "
          "      | optional    | --restore testSession\n"
          "\n",
          p);
  fprintf(stdout,
          "  --version/-v  |              | Show program version and exit      "
          "      | optional    | --version\n"
          "  --help/-h     |              | Show this help                     "
          "      | optional    | --help\n"
          "\n"
          "Example:\n\n"
          "input files: 1 2 3 4\n"
          "$ cat 1 2 3 4 | xargs\n"
          "one two three four\n"
          "$ ./combinatorX.bin --file1 1 --file2 2 --file3 3 --file4 4 --sep1 "
          "' . ' --sep2 ' + ' --sep3 ' @ ' --sepStart \"['\" --sepEnd ',*]'\n"
          "['one . two + three @ four,*]\n\n");
}


x86 assembly (clang, -O0):
<usage>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    %rdi,-0x8(%rbp)
mov    0x2ebd(%rip),%rax
mov    (%rax),%edi
mov    -0x8(%rbp),%rdx
lea    0xed0(%rip),%rsi
mov    $0x0,%al
call   1030 <fprintf@plt>
mov    0x2ea2(%rip),%rax
mov    (%rax),%edi
lea    0x19a6(%rip),%rsi
mov    $0x0,%al
call   1030 <fprintf@plt>
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<usage>:
push   %rbx
mov    %rdi,%rdx
mov    0x2ec5(%rip),%rbx
mov    (%rbx),%edi
lea    0xedc(%rip),%rsi
xor    %eax,%eax
call   1030 <fprintf@plt>
mov    (%rbx),%edi
lea    0x19b9(%rip),%rsi
xor    %eax,%eax
pop    %rbx
jmp    1030 <fprintf@plt>

LLVM IR (-O0):
@stdout = global i32 0
@.str = [2797 x i8] c"Usage: %s [<options>]\0A\0AOptions:\0A\0A Argument | Type | Description | Option type | Example\0A -----------------------------------------------------------------------------------------------------------\0A --file1/-1 | Path | Set file1 path | required | --file1 wordlist1.txt\0A --file2/-2 | Path | Set file2 path | required | --file2 wordlist2.txt\0A --file3/-3 | Path | Set file3 path | optional | --file3 wordlist3.txt\0A --file4/-4 | Path | Set file4 path | optional | --file4 wordlist4.txt\0A --file5/-5 | Path | Set file5 path | optional | --file5 wordlist5.txt\0A --file6/-6 | Path | Set file6 path | optional | --file6 wordlist6.txt\0A --file7/-7 | Path | Set file7 path | optional | --file7 wordlist7.txt\0A --file8/-8 | Path | Set file8 path | optional | --file8 wordlist8.txt\0A\0A --sepStart | Char/String | Set char/string at the beginning | optional | --sepStart '['\0A --sep1 | Char/String | Set separator between file1 and file2 | optional | --sep1 'a.'\0A --sep2 | Char/String | Set separator between file2 and file3 | optional | --sep2 'bc'\0A --sep3 | Char/String | Set separator between file3 and file4 | optional | --sep3 ',d'\0A --sep4 | Char/String | Set separator between file4 and file5 | optional | --sep4 'e.'\0A --sep5 | Char/String | Set separator between file5 and file6 | optional | --sep5 'f.g'\0A --sep6 | Char/String | Set separator between file6 and file7 | optional | --sep6 'h-'\0A --sep7 | Char/String | Set separator between file7 and file8 | optional | --sep7 '-j'\0A --sepEnd | Char/String | Set char/string at the end | optional | --sepEnd ']'\0A --sepFill | Char/String | Fill all unsetted separator buffers | optional | --sepFill '-'\0A\0A --skip/-S | Num | Skip N sentences | optional | --skip 0\0A --limit/-L | Num | Exit after N sentences | optional | --limit 1\0A --max-rep/-m | Num | Skip sentences with > N repeated words | optional | --max-rep 1\0A --max-len/-l | Num | Skip final sentences with len > N | optional | --max-len 30\0A\0A --session/-s | String | Set session name | optional | --session testSession\0A --restore/-r | String | Restore by session name | optional | --restore testSession\0A\0A\00"
@.str.1 = [432 x i8] c" --version/-v | | Show program version and exit | optional | --version\0A --help/-h | | Show this help | optional | --help\0A\0AExample:\0A\0Ainput files: 1 2 3 4\0A$ cat 1 2 3 4 | xargs\0Aone two three four\0A$ ./combinatorX.bin --file1 1 --file2 2 --file3 3 --file4 4 --sep1 ' . ' --sep2 ' + ' --sep3 ' @ ' --sepStart \22['\22 --sepEnd ',*]'\0A['one . two + three @ four,*]\0A\0A\00"
define void @usage(i8* %0) {
%2 = alloca i8*
store i8* %0, i8** %2
%3 = load i32, i32* @stdout
%4 = load i8*, i8** %2
%5 = call i32 (i32, i8*, ...) @fprintf(i32 %3, i8* getelementptr inbounds ([2797 x i8], [2797 x i8]* @.str, i64 0, i64 0), i8* %4)
%6 = load i32, i32* @stdout
%7 = call i32 (i32, i8*, ...) @fprintf(i32 %6, i8* getelementptr inbounds ([432 x i8], [432 x i8]* @.str.1, i64 0, i64 0))
ret void
}

LLVM IR (-O2):
@stdout = global i32 0
@.str = [2797 x i8] c"Usage: %s [<options>]\0A\0AOptions:\0A\0A Argument | Type | Description | Option type | Example\0A -----------------------------------------------------------------------------------------------------------\0A --file1/-1 | Path | Set file1 path | required | --file1 wordlist1.txt\0A --file2/-2 | Path | Set file2 path | required | --file2 wordlist2.txt\0A --file3/-3 | Path | Set file3 path | optional | --file3 wordlist3.txt\0A --file4/-4 | Path | Set file4 path | optional | --file4 wordlist4.txt\0A --file5/-5 | Path | Set file5 path | optional | --file5 wordlist5.txt\0A --file6/-6 | Path | Set file6 path | optional | --file6 wordlist6.txt\0A --file7/-7 | Path | Set file7 path | optional | --file7 wordlist7.txt\0A --file8/-8 | Path | Set file8 path | optional | --file8 wordlist8.txt\0A\0A --sepStart | Char/String | Set char/string at the beginning | optional | --sepStart '['\0A --sep1 | Char/String | Set separator between file1 and file2 | optional | --sep1 'a.'\0A --sep2 | Char/String | Set separator between file2 and file3 | optional | --sep2 'bc'\0A --sep3 | Char/String | Set separator between file3 and file4 | optional | --sep3 ',d'\0A --sep4 | Char/String | Set separator between file4 and file5 | optional | --sep4 'e.'\0A --sep5 | Char/String | Set separator between file5 and file6 | optional | --sep5 'f.g'\0A --sep6 | Char/String | Set separator between file6 and file7 | optional | --sep6 'h-'\0A --sep7 | Char/String | Set separator between file7 and file8 | optional | --sep7 '-j'\0A --sepEnd | Char/String | Set char/string at the end | optional | --sepEnd ']'\0A --sepFill | Char/String | Fill all unsetted separator buffers | optional | --sepFill '-'\0A\0A --skip/-S | Num | Skip N sentences | optional | --skip 0\0A --limit/-L | Num | Exit after N sentences | optional | --limit 1\0A --max-rep/-m | Num | Skip sentences with > N repeated words | optional | --max-rep 1\0A --max-len/-l | Num | Skip final sentences with len > N | optional | --max-len 30\0A\0A --session/-s | String | Set session name | optional | --session testSession\0A --restore/-r | String | Restore by session name | optional | --restore testSession\0A\0A\00"
@.str.1 = [432 x i8] c" --version/-v | | Show program version and exit | optional | --version\0A --help/-h | | Show this help | optional | --help\0A\0AExample:\0A\0Ainput files: 1 2 3 4\0A$ cat 1 2 3 4 | xargs\0Aone two three four\0A$ ./combinatorX.bin --file1 1 --file2 2 --file3 3 --file4 4 --sep1 ' . ' --sep2 ' + ' --sep3 ' @ ' --sepStart \22['\22 --sepEnd ',*]'\0A['one . two + three @ four,*]\0A\0A\00"
define void @usage(i8* %0) {
%2 = load i32, i32* @stdout
%3 = tail call i32 (i32, i8*, ...) @fprintf(i32 %2, i8* getelementptr inbounds ([2797 x i8], [2797 x i8]* @.str, i64 0, i64 0), i8* %0)
%4 = load i32, i32* @stdout
%5 = tail call i32 (i32, i8*, ...) @fprintf(i32 %4, i8* getelementptr inbounds ([432 x i8], [432 x i8]* @.str.1, i64 0, i64 0))
ret void
}