user: Please show me the C implementation that matches the assembly code listed below:

```asm
<print_usage>:
  endbr64
  sub    $0x8,%rsp
  mov    (%rdi),%rsi
  lea    D79(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D68(%rip),%rdi
  call   <puts@plt>
  lea    D44(%rip),%rdi
  call   <puts@plt>
  lea    D33(%rip),%rdi
  call   <puts@plt>
  lea    D14(%rip),%rdi
  call   <puts@plt>
  lea    D19(%rip),%rdi
  call   <puts@plt>
  lea    D27(%rip),%rdi
  call   <puts@plt>
  lea    D28(%rip),%rdi
  call   <puts@plt>
  lea    D52(%rip),%rdi
  call   <puts@plt>
  lea    D4(%rip),%rdi
  call   <puts@plt>
  lea    D16(%rip),%rdi
  call   <puts@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  mov    $0x0,%edi
  call   <exit@plt>
  add    $0x8,%rsp
  ret
```

tool_calls: name: extract_symbolic_data
arguments: label: D79
type_infered: string
name: extract_symbolic_data
arguments: label: D68
type_infered: string
name: extract_symbolic_data
arguments: label: D44
type_infered: string
name: extract_symbolic_data
arguments: label: D33
type_infered: string
name: extract_symbolic_data
arguments: label: D14
type_infered: string
name: extract_symbolic_data
arguments: label: D19
type_infered: string
name: extract_symbolic_data
arguments: label: D27
type_infered: string
name: extract_symbolic_data
arguments: label: D28
type_infered: string
name: extract_symbolic_data
arguments: label: D52
type_infered: string
name: extract_symbolic_data
arguments: label: D4
type_infered: string
name: extract_symbolic_data
arguments: label: D16
type_infered: string

tool: D79: OpenCL serpent
Usage: %s [-options]



tool: D68: 	-h --help					: Print this usage

tool: D44: 	-v --verbose					: Verbose version

tool: D33: 	-d <file> --dump-binary-file <file>		: Specify where to save the generated kernel binary code

tool: D14: 	-w NUM --num-work-items NUM			: Specify number of work-items (default: 2048)

tool: D19: 	-g NUM --num-work-items-per-work-group NUM	: Specify number of work-items that compose a work-group (default 64)

tool: D27: 	-b NUM --num-blocks-for-work-item NUM		: Specify number of blocks encrypted by each work-item (default: 20000)

tool: D28: 	-u --unroll-main-work-cycle			: Unroll 10 iterations of the main kernel cycle

tool: D52: 	-s --do-not-unroll-subkey-operation		: Do not unroll subkey operation

tool: D4: 	-r --ctr-mode					: Enable Counter Mode (default: ECB mode)

tool: D16: 	-c --csv-output					: Print CSV-like output on stdout

assistant: ```c
void print_usage(char **argv) {
  printf("OpenCL serpent\nUsage: %s [-options]\n\n", argv[0]);
  printf("\t-h --help\t\t\t\t\t: Print this usage\n");
  printf("\t-v --verbose\t\t\t\t\t: Verbose version\n");
  printf("\t-d <file> --dump-binary-file <file>\t\t: Specify where to save the generated kernel binary code\n");
  printf("\t-w NUM --num-work-items NUM\t\t\t: Specify number of work-items (default: 2048)\n");
  printf("\t-g NUM --num-work-items-per-work-group NUM\t: Specify number of work-items that compose a work-group (default 64)\n");
  printf("\t-b NUM --num-blocks-for-work-item NUM\t\t: Specify number of blocks encrypted by each work-item (default: 20000)\n");
  printf("\t-u --unroll-main-work-cycle\t\t\t: Unroll 10 iterations of the main kernel cycle\n");
  printf("\t-s --do-not-unroll-subkey-operation\t\t: Do not unroll subkey operation\n");
  printf("\t-r --ctr-mode\t\t\t\t\t: Enable Counter Mode (default: ECB mode)\n");
  printf("\t-c --csv-output\t\t\t\t\t: Print CSV-like output on stdout\n");
  printf("\n");
  exit(0);
}
```