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

```asm
<executeExternalCommand>:
  endbr64
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x110,%rsp
  mov    %rdi,%r14
  mov    %fs:0x28,%rax
  mov    %rax,0x108(%rsp)
  xor    %eax,%eax
  movq   $0x0,0xa0(%rsp)
  movq   $0x0,0xa8(%rsp)
  movq   $0x0,0xb0(%rsp)
  movq   $0x0,0xb8(%rsp)
  movq   $0x0,0xc0(%rsp)
  movq   $0x0,0xc8(%rsp)
  movq   $0x0,0xd0(%rsp)
  movq   $0x0,0xd8(%rsp)
  movq   $0x0,0xe0(%rsp)
  movq   $0x0,0xe8(%rsp)
  movq   $0x0,0xf0(%rsp)
  movq   $0x0,0xf8(%rsp)
  movl   $0x0,0x100(%rsp)
  lea    0xa0(%rsp),%rbp
  mov    (%rdi),%rsi
  mov    %rbp,%rdi
  call   <strcpy@plt>
  mov    $0x7b,%esi
  mov    %rbp,%rdi
  call   <strchr@plt>
  mov    %rax,%rbx
  mov    $0x7d,%esi
  mov    %rbp,%rdi
  call   <strchr@plt>
  test   %rbx,%rbx
  setne  %cl
  test   %rax,%rax
  setne  %dl
  test   %dl,%cl
  je     L81
  cmp    %rax,%rbx
  jb     L25
L81:
  lea    0xa0(%rsp),%rbx
L46:
  mov    %rsp,%rdi
  mov    $0x14,%ecx
  mov    $0x0,%eax
  rep stos %rax,%es:(%rdi)
  lea    D16(%rip),%rsi
  mov    %rbx,%rdi
  call   <strtok@plt>
  lea    0x8(%r14),%r13
  add    $0x40,%r14
  mov    $0x0,%ebp
  lea    D16(%rip),%r12
L60:
  lea    0x1(%rbp),%ebx
  movslq %ebx,%rbx
  test   %rax,%rax
  je     L26
L30:
  mov    %ebx,%ebp
  mov    %rax,-0x8(%rsp,%rbx,8)
  mov    %r12,%rsi
  mov    $0x0,%edi
  call   <strtok@plt>
  add    $0x1,%rbx
  test   %rax,%rax
  jne    L30
L26:
  mov    0x0(%r13),%rax
  add    $0x8,%r13
  cmp    %r14,%r13
  jne    L60
  call   <fork@plt>
  test   %eax,%eax
  jne    L80
  mov    %rsp,%rsi
  mov    (%rsp),%rdi
  call   <execvp@plt>
  cmp    $0xffffffff,%eax
  jne    L58
  mov    (%rsp),%rsi
  lea    D14(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L58
L25:
  add    $0x1,%rbx
  movb   $0x0,(%rax)
  jmp    L46
L80:
  mov    $0x0,%edi
  call   <wait@plt>
L58:
  mov    0x108(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L35
  add    $0x110,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
L35:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: unpack_data
arguments: label: D16
type: string
name: unpack_data
arguments: label: D14
type: string

tool: D16:  

tool: D14: %s failed to run


assistant: ```c
void executeExternalCommand(char **givenData) {
  for (; 0;)
    printf("executeExternalCommand() called\n");
  int i = 0, j = 0;
  char tempData[100] = {0};
  char *dataHere = tempData;
  strcpy(tempData, givenData[0]);
  char *complexStringStart = strchr(tempData, '{');
  char *complexStringEnd = strchr(tempData, '}');
  if (complexStringStart != NULL && complexStringEnd != NULL) {
    if (complexStringStart < complexStringEnd) {
      complexStringStart++;
      dataHere = complexStringStart;
      *(complexStringEnd) = 0;
    }
  }
  for (; 0;)
    printf("Given : %s\n", dataHere);
  char *commandSplit[20] = {NULL};
  char *temp = strtok(dataHere, " ");
  int cmdChunks = 0;
  int z;
  for (z = 1; z < 8; z++) {
    while (temp != NULL) {
      commandSplit[cmdChunks++] = temp;
      temp = strtok(NULL, " ");
    }
    temp = givenData[z];
  }
  for (; 0;)
    printf("After TOK : %s, %s, %s, %s, %s\n", commandSplit[0], commandSplit[1], commandSplit[2], commandSplit[3], commandSplit[4]);
  i = fork();
  if (i == 0) {
    for (; 0;)
      printf("execvp(%s,double pointer to givenData)\n", givenData[0]);
    i = execvp(commandSplit[0], commandSplit);
    if (i == -1) {
      printf("%s failed to run\n", commandSplit[0]);
      exit(1);
    }
  } else {
    j = wait(NULL);
  }
}
```