user: 请将以下的汇编代码转换成C语言代码：

```asm
<julius_regular_involution>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  add    $0xffffffffffffff80,%rsp
  mov    %rdi,-0x68(%rbp)
  mov    %rsi,-0x70(%rbp)
  mov    %rdx,-0x78(%rbp)
  mov    %rcx,-0x80(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x5c(%rbp)
  jmp    L34
L72:
  mov    -0x5c(%rbp),%eax
  cltq
  movb   $0x0,-0x20(%rbp,%rax,1)
  addl   $0x1,-0x5c(%rbp)
L34:
  cmpl   $0xf,-0x5c(%rbp)
  jle    L72
  mov    -0x80(%rbp),%rdx
  lea    -0x20(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <aes_128_encrypt@plt>
  mov    -0x70(%rbp),%rax
  shr    $0x4,%rax
  mov    %rax,%rcx
  mov    -0x68(%rbp),%rdx
  lea    -0x20(%rbp),%rsi
  lea    -0x50(%rbp),%rax
  mov    %rax,%rdi
  call   <evaluate_by_delta@plt>
  lea    -0x50(%rbp),%rcx
  lea    -0x40(%rbp),%rax
  mov    $0x10,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
  mov    -0x80(%rbp),%rdx
  lea    -0x40(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <aes_128_encrypt@plt>
  mov    -0x70(%rbp),%rax
  sub    -0x78(%rbp),%rax
  shr    $0x4,%rax
  and    $0x1,%eax
  test   %rax,%rax
  jne    L33
  mov    -0x78(%rbp),%rax
  mov    %rax,-0x58(%rbp)
  lea    -0x40(%rbp),%rcx
  lea    -0x30(%rbp),%rax
  mov    $0x10,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
  mov    -0x78(%rbp),%rax
  mov    %rax,-0x58(%rbp)
  jmp    L19
L59:
  mov    -0x68(%rbp),%rdx
  mov    -0x58(%rbp),%rax
  add    %rax,%rdx
  lea    -0x30(%rbp),%rax
  mov    %rax,%rsi
  mov    %rdx,%rdi
  call   <add_to_first@plt>
  lea    -0x20(%rbp),%rdx
  lea    -0x30(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <mul_by_delta@plt>
  addq   $0x10,-0x58(%rbp)
L19:
  mov    -0x58(%rbp),%rax
  cmp    -0x70(%rbp),%rax
  jb     L59
  jmp    L79
L33:
  mov    -0x78(%rbp),%rax
  mov    %rax,-0x58(%rbp)
  lea    -0x40(%rbp),%rcx
  lea    -0x30(%rbp),%rax
  mov    $0x10,%edx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memcpy@plt>
  mov    -0x68(%rbp),%rdx
  mov    -0x58(%rbp),%rax
  add    %rax,%rdx
  lea    -0x30(%rbp),%rax
  mov    %rax,%rsi
  mov    %rdx,%rdi
  call   <add_to_first@plt>
  addq   $0x10,-0x58(%rbp)
  mov    -0x58(%rbp),%rax
  cmp    -0x70(%rbp),%rax
  jae    L13
  lea    -0x20(%rbp),%rdx
  lea    -0x30(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <mul_by_delta@plt>
  mov    -0x68(%rbp),%rdx
  mov    -0x58(%rbp),%rax
  add    %rax,%rdx
  lea    -0x30(%rbp),%rax
  mov    %rax,%rsi
  mov    %rdx,%rdi
  call   <add_to_first@plt>
  mov    -0x68(%rbp),%rdx
  mov    -0x58(%rbp),%rax
  add    %rax,%rdx
  lea    -0x40(%rbp),%rax
  mov    %rax,%rsi
  mov    %rdx,%rdi
  call   <add_to_first@plt>
  addq   $0x10,-0x58(%rbp)
  jmp    L13
L25:
  mov    -0x68(%rbp),%rdx
  mov    -0x58(%rbp),%rax
  add    %rax,%rdx
  lea    -0x30(%rbp),%rax
  mov    %rax,%rsi
  mov    %rdx,%rdi
  call   <add_to_first@plt>
  lea    -0x20(%rbp),%rdx
  lea    -0x30(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <mul_by_delta@plt>
  addq   $0x10,-0x58(%rbp)
L13:
  mov    -0x58(%rbp),%rax
  cmp    -0x70(%rbp),%rax
  jb     L25
L79:
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L16
  call   <__stack_chk_fail@plt>
L16:
  leave
  ret
```

assistant: ```c
void julius_regular_involution(unsigned char *pad, unsigned long long padlen, unsigned long long reg_index, unsigned long expanded_key[44]) {
  int i;
  unsigned long long cur;
  unsigned char seed[16];
  unsigned char mu[16];
  unsigned char tmp_mask[16];
  unsigned char delta[16];
  for (i = 0; i < 16; i++) {
    delta[i] = 0;
  }
  aes_128_encrypt(delta, expanded_key);
  evaluate_by_delta(seed, delta, pad, padlen / 16);
  memcpy(mu, seed, 16);
  aes_128_encrypt(mu, expanded_key);
  if (((padlen - reg_index) / 16) % 2 == 0) {
    cur = reg_index;
    memcpy(tmp_mask, mu, 16);
    for (cur = reg_index; cur < padlen; cur = cur + 16) {
      add_to_first(&pad[cur], tmp_mask);
      mul_by_delta(tmp_mask, delta);
    }
  } else {
    cur = reg_index;
    memcpy(tmp_mask, mu, 16);
    add_to_first(&pad[cur], tmp_mask);
    cur = cur + 16;
    if (cur < padlen) {
      mul_by_delta(tmp_mask, delta);
      add_to_first(&pad[cur], tmp_mask);
      add_to_first(&pad[cur], mu);
      cur = cur + 16;
    }
    for (; cur < padlen; cur = cur + 16) {
      add_to_first(&pad[cur], tmp_mask);
      mul_by_delta(tmp_mask, delta);
    }
  }
}
```