user: What is the c source code of the assembly code below:

```asm
<sjson_get_value>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %rsi,-0x30(%rbp)
  mov    %rdx,-0x38(%rbp)
  mov    %rcx,-0x40(%rbp)
  mov    -0x30(%rbp),%rdx
  mov    -0x28(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strstr@plt>
  mov    %rax,-0x8(%rbp)
  movb   $0x0,-0x1b(%rbp)
  movb   $0x0,-0x1a(%rbp)
  movb   $0x0,-0x19(%rbp)
  cmpq   $0x0,-0x8(%rbp)
  je     L162
  movb   $0x22,-0x1a(%rbp)
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <skip_space@plt>
  mov    %rax,-0x10(%rbp)
  mov    -0x10(%rbp),%rax
  mov    $0x3,%edx
  lea    D1(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %rax,%rax
  jne    L139
  addq   $0x2,-0x10(%rbp)
  jmp    L200
L52:
  addq   $0x1,-0x10(%rbp)
L139:
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x3a,%al
  je     L84
  cmpq   $0x0,-0x10(%rbp)
  jne    L52
L84:
  cmpq   $0x0,-0x10(%rbp)
  je     L148
  addq   $0x1,-0x10(%rbp)
  mov    -0x10(%rbp),%rax
  mov    %rax,%rdi
  call   <skip_space@plt>
  mov    %rax,-0x10(%rbp)
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x7b,%al
  jne    L194
  movb   $0x7b,-0x1b(%rbp)
  movb   $0x7d,-0x1a(%rbp)
  jmp    L131
L194:
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x22,%al
  jne    L9
  addq   $0x1,-0x10(%rbp)
  movb   $0x22,-0x1b(%rbp)
  movb   $0x22,-0x1a(%rbp)
  jmp    L131
L9:
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x5b,%al
  jne    L165
  movb   $0x5b,-0x1b(%rbp)
  movb   $0x5d,-0x1a(%rbp)
  jmp    L131
L165:
  movb   $0x0,-0x1b(%rbp)
  movb   $0x2c,-0x1a(%rbp)
L131:
  movb   $0x0,-0x19(%rbp)
L200:
  mov    -0x40(%rbp),%rax
  mov    (%rax),%edx
  mov    -0x38(%rbp),%rax
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <memset@plt>
  movl   $0x0,-0x14(%rbp)
  movl   $0x0,-0x18(%rbp)
  jmp    L1
L83:
  addq   $0x1,-0x10(%rbp)
L8:
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0x5c,%al
  je     L83
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  cmp    %al,-0x1b(%rbp)
  jne    L205
  movzbl -0x19(%rbp),%eax
  add    $0x1,%eax
  jmp    L5
L205:
  movzbl -0x19(%rbp),%eax
L5:
  mov    %al,-0x19(%rbp)
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  cmp    %al,-0x1a(%rbp)
  jne    L237
  cmpb   $0x7d,-0x1a(%rbp)
  jne    L236
  cmpb   $0x0,-0x19(%rbp)
  je     L171
  movzbl -0x19(%rbp),%eax
  sub    $0x1,%eax
  mov    %al,-0x19(%rbp)
  mov    -0x18(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x38(%rbp),%rax
  add    %rax,%rdx
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  mov    %al,(%rdx)
L237:
  mov    -0x18(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x38(%rbp),%rax
  add    %rax,%rdx
  mov    -0x10(%rbp),%rax
  movzbl (%rax),%eax
  mov    %al,(%rdx)
  addq   $0x1,-0x10(%rbp)
  addl   $0x1,-0x14(%rbp)
  addl   $0x1,-0x18(%rbp)
L1:
  mov    -0x40(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,-0x18(%rbp)
  jl     L8
  jmp    L172
L236:
  nop
  jmp    L172
L171:
  nop
L172:
  mov    -0x40(%rbp),%rax
  mov    -0x14(%rbp),%edx
  mov    %edx,(%rax)
  mov    -0x14(%rbp),%eax
  jmp    L91
L162:
  nop
  jmp    L41
L148:
  nop
L41:
  mov    $0xffffffff,%eax
L91:
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: tag: D1
data_type: string

tool: D1: :"

assistant: ```c
int sjson_get_value(const char *input, const char *name, char *output, int *maxlen) {
  const char *p_name = strstr(input, name);
  const char *p;
  char start = 0, end = 0, subItem = 0;
  int i;
  int len;
  if (p_name == NULL)
    goto err1;
  end = '\"';
  p = skip_space(p_name);
  if (strncmp(p, ":\"", sizeof(":\"")) == 0) {
    p += 2;
  } else {
    while (*p != ':' && p != NULL)
      p++;
    if (p == NULL)
      goto err1;
    p += 1;
    p = skip_space(p);
    if (*p == '{') {
      start = '{';
      end = '}';
    } else if (*p == '\"') {
      p += 1;
      start = '\"';
      end = '\"';
    } else if (*p == '[') {
      start = '\[';
      end = ']';
    } else {
      start = 0;
      end = ',';
    }
    subItem = 0;
  }
  memset(output, 0, *maxlen);
  len = 0;
  for (i = 0; i < *maxlen; i++) {
    while (*p == '\\') {
      p++;
    }
    subItem = (*p == start) ? (subItem + 1) : subItem;
    if (*p == end) {
      if (end == '}') {
        if (subItem == 0)
          break;
        else
          subItem--;
        output[i] = *p;
      } else {
        break;
      }
    }
    output[i] = *p;
    p++;
    len++;
  }
  *maxlen = len;
  return len;
err1:
  return -1;
}
```