user: Demonstrate the C code that generates the assembly output below:

```asm
<mywcscspn>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x18(%rbp)
  mov    %rsi,-0x20(%rbp)
  mov    %edx,-0x24(%rbp)
  movl   $0x0,-0xc(%rbp)
  movl   $0x0,-0x8(%rbp)
L243:
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  test   %eax,%eax
  jne    L133
  mov    -0x8(%rbp),%eax
  cltq
  jmp    L26
L133:
  cmpl   $0x5,-0xc(%rbp)
  ja     L292
  cmpl   $0x4,-0xc(%rbp)
  jae    L347
  cmpl   $0x3,-0xc(%rbp)
  ja     L292
  cmpl   $0x2,-0xc(%rbp)
  jae    L21
  cmpl   $0x0,-0xc(%rbp)
  je     L83
  cmpl   $0x1,-0xc(%rbp)
  je     L193
  jmp    L292
L83:
  mov    -0x24(%rbp),%eax
  and    $0x2,%eax
  test   %eax,%eax
  je     L206
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0x5b,%eax
  jne    L206
  movl   $0x1,-0xc(%rbp)
  jmp    L292
L206:
  mov    -0x24(%rbp),%eax
  and    $0x1,%eax
  test   %eax,%eax
  je     L301
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0x27,%eax
  jne    L301
  movl   $0x2,-0xc(%rbp)
  jmp    L292
L301:
  mov    -0x24(%rbp),%eax
  and    $0x1,%eax
  test   %eax,%eax
  je     L216
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0x22,%eax
  jne    L216
  movl   $0x4,-0xc(%rbp)
  jmp    L292
L216:
  movl   $0x0,-0x4(%rbp)
  jmp    L366
L187:
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    -0x20(%rbp),%rax
  add    %rcx,%rax
  mov    (%rax),%eax
  cmp    %eax,%edx
  jne    L203
  mov    -0x8(%rbp),%eax
  cltq
  jmp    L26
L203:
  addl   $0x1,-0x4(%rbp)
L366:
  mov    -0x4(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  test   %eax,%eax
  jne    L187
  jmp    L292
L193:
  mov    -0x24(%rbp),%eax
  and    $0x1,%eax
  test   %eax,%eax
  je     L102
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0x27,%eax
  jne    L102
  movl   $0x3,-0xc(%rbp)
  jmp    L292
L102:
  mov    -0x24(%rbp),%eax
  and    $0x1,%eax
  test   %eax,%eax
  je     L2
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0x22,%eax
  jne    L2
  movl   $0x5,-0xc(%rbp)
  jmp    L292
L2:
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0x5d,%eax
  jne    L159
  movl   $0x0,-0xc(%rbp)
  jmp    L159
L21:
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0x27,%eax
  jne    L223
  cmpl   $0x2,-0xc(%rbp)
  setne  %al
  movzbl %al,%eax
  mov    %eax,-0xc(%rbp)
  jmp    L223
L347:
  mov    -0x8(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0x22,%eax
  jne    L44
  cmpl   $0x4,-0xc(%rbp)
  setne  %al
  movzbl %al,%eax
  mov    %eax,-0xc(%rbp)
  jmp    L44
L159:
  nop
  jmp    L292
L223:
  nop
  jmp    L292
L44:
  nop
L292:
  addl   $0x1,-0x8(%rbp)
  jmp    L243
L26:
  pop    %rbp
  ret
```

assistant: ```c
size_t mywcscspn(const wchar_t *wcs, const wchar_t *reject, int flags) {
  enum {
    PLAIN,
    NAME_BLOCK,
    SINGLE_QUOTE,
    SINGLE_QUOTE_NAME,
    DOUBLE_QUOTE,
    DOUBLE_QUOTE_NAME,
  } state = PLAIN;
  int len = 0;
  int i;
  while (1) {
    if (!wcs[len])
      return len;
    switch (state) {
    case PLAIN:
      if ((flags & 0x02) && (wcs[len] == L'[')) {
        state = NAME_BLOCK;
        break;
      }
      if ((flags & 0x01) && (wcs[len] == L'\'')) {
        state = SINGLE_QUOTE;
        break;
      }
      if ((flags & 0x01) && (wcs[len] == L'\"')) {
        state = DOUBLE_QUOTE;
        break;
      }
      for (i = 0; reject[i]; i++)
        if (wcs[len] == reject[i])
          return len;
      break;
    case NAME_BLOCK:
      if ((flags & 0x01) && (wcs[len] == L'\'')) {
        state = SINGLE_QUOTE_NAME;
        break;
      }
      if ((flags & 0x01) && (wcs[len] == L'\"')) {
        state = DOUBLE_QUOTE_NAME;
        break;
      }
      if (wcs[len] == L']')
        state = PLAIN;
      break;
    case SINGLE_QUOTE:
    case SINGLE_QUOTE_NAME:
      if (wcs[len] == L'\'')
        state = state == SINGLE_QUOTE ? PLAIN : NAME_BLOCK;
      break;
    case DOUBLE_QUOTE:
    case DOUBLE_QUOTE_NAME:
      if (wcs[len] == L'\"')
        state = state == DOUBLE_QUOTE ? PLAIN : NAME_BLOCK;
      break;
    }
    len++;
  }
}
```