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

```asm
<Spsum>:
  endbr64
  push   %r15
  push   %r14
  mov    %rsi,%r14
  push   %r13
  push   %r12
  mov    %edx,%r12d
  push   %rbp
  push   %rbx
  mov    %rdi,%rbx
  sub    $0x18,%rsp
  movq   $0x0,(%rsp)
  nopl   0x0(%rax,%rax,1)
L254:
  mov    %r14,%rdi
  call   <Digits@plt>
  mov    $0xa,%edi
  lea    -0x1(%rax),%r13d
  mov    %eax,0x8(%rsp)
  mov    %r13d,%esi
  call   <pow@plt>
  mov    $0xa,%edi
  movslq %eax,%rsi
  mov    %rbx,%rax
  cqto
  idiv   %rsi
  mov    %r13d,%esi
  mov    %rax,%rbp
  call   <pow@plt>
  movslq %eax,%rsi
  mov    %r14,%rax
  cqto
  idiv   %rsi
  mov    %rax,%r15
  mov    %r14,%rax
  or     %rbx,%rax
  je     L145
  cmp    $0x1,%r12d
  mov    0x8(%rsp),%ecx
  je     L199
  test   $0x1,%r12b
  jne    L109
  cmp    $0x1,%ecx
  je     L184
  mov    %r12d,%eax
  sub    %ecx,%eax
  test   $0x1,%al
  jne    L242
  test   %rbx,%rbx
  je     L176
  mov    %ecx,0x8(%rsp)
  cmp    %r15d,%ebp
  je     L49
  lea    -0x1(%r15),%eax
  lea    -0x1(%rbp),%edx
  mov    %r13d,%esi
  mov    $0xa,%edi
  imul   %r15d,%eax
  imul   %ebp,%edx
  mov    %eax,%ebx
  shr    $0x1f,%ebx
  add    %eax,%ebx
  mov    %edx,%eax
  shr    $0x1f,%eax
  sar    %ebx
  add    %edx,%eax
  sar    %eax
  sub    %eax,%ebx
  call   <pow@plt>
  mov    0x8(%rsp),%ecx
  mov    $0xa,%edi
  mov    %eax,0xc(%rsp)
  lea    -0x2(%rcx),%esi
  call   <pow@plt>
  mov    %r13d,%edx
  imul   0xc(%rsp),%ebx
  shr    $0x1f,%edx
  mov    %eax,%r11d
  lea    0x0(%r13,%rdx,1),%eax
  and    $0x1,%eax
  movslq %ebx,%rbx
  sub    %edx,%eax
  mov    %r15d,%edx
  imul   %r11d,%eax
  sub    %ebp,%edx
  mov    %eax,%ebp
  imul   %edx,%ebp
  imul   $0x2d,%ebp,%ebp
  movslq %ebp,%rbp
  sub    %rbx,%rbp
L70:
  mov    %r13d,%esi
  mov    $0xa,%edi
  call   <pow@plt>
  add    %rbp,(%rsp)
  imul   %r15d,%eax
  movslq %eax,%rbx
  jmp    L254
  nopl   0x0(%rax)
L109:
  cmp    $0x1,%ecx
  je     L199
  movabs $0x6666666666666667,%rax
  imul   %r14
  mov    %r14,%rax
  sar    $0x3f,%rax
  sar    $0x2,%rdx
  sub    %rax,%rdx
  mov    %r14,%rax
  lea    (%rdx,%rdx,4),%rdx
  add    %rdx,%rdx
  sub    %rdx,%rax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  and    $0x1,%eax
  sub    %edx,%eax
  cmp    $0x1,%eax
  je     L257
  mov    %r12d,%eax
  sub    %ecx,%eax
  and    $0x1,%eax
  cmp    $0x1,%eax
  sbb    %edx,%edx
  or     $0x1,%edx
  test   %rbx,%rbx
  je     L96
  cmp    %r15d,%ebp
  je     L256
L128:
  lea    -0x2(%rcx),%esi
  mov    $0xa,%edi
  call   <pow@plt>
  mov    %r13d,%esi
  mov    $0xa,%edi
  mov    %eax,0x8(%rsp)
  call   <pow@plt>
  mov    %r15d,%r10d
  imul   %r15d,%eax
  sub    %ebp,%r10d
  imul   0x8(%rsp),%r10d
  movslq %eax,%rbx
  lea    (%r10,%r10,4),%eax
  cltq
  add    %rax,(%rsp)
  jmp    L254
L242:
  test   %rbx,%rbx
  je     L43
  cmp    %r15d,%ebp
  jne    L43
  mov    %r14,%rax
  mov    %r13d,%esi
  mov    $0xa,%edi
  movslq %ebp,%rbp
  sub    %rbx,%rax
  lea    0x1(%rax),%rbx
  call   <pow@plt>
  imul   %rbp,%rbx
  add    %rbx,(%rsp)
  xor    %ebx,%ebx
  imul   %r15d,%eax
  cltq
  sub    %rax,%r14
  jmp    L254
  nopl   0x0(%rax)
L257:
  test   %rbx,%rbx
  je     L44
  cmp    %r15d,%ebp
  jne    L128
  mov    %r13d,%esi
  mov    $0xa,%edi
  xor    %ebx,%ebx
  call   <pow@plt>
  imul   %ebp,%eax
  cltq
  sub    %rax,%r14
  jmp    L254
  xchg   %ax,%ax
L43:
  lea    -0x1(%r15),%eax
  lea    -0x1(%rbp),%ecx
  mov    %r13d,%esi
  mov    $0xa,%edi
  imul   %r15d,%eax
  imul   %ebp,%ecx
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %eax,%edx
  mov    %ecx,%eax
  shr    $0x1f,%eax
  sar    %edx
  add    %ecx,%eax
  sar    %eax
  sub    %eax,%edx
  mov    %edx,0x8(%rsp)
  call   <pow@plt>
  mov    %r13d,%esi
  mov    $0xa,%edi
  mov    %eax,%ebp
  call   <pow@plt>
  imul   0x8(%rsp),%ebp
  imul   %r15d,%eax
  movslq %ebp,%rbp
  add    %rbp,(%rsp)
  movslq %eax,%rbx
  jmp    L254
  nopw   0x0(%rax,%rax,1)
L96:
  lea    -0x2(%rcx),%esi
  mov    $0xa,%edi
  call   <pow@plt>
  mov    %r13d,%esi
  mov    $0xa,%edi
  mov    %eax,%ebp
  call   <pow@plt>
  imul   %r15d,%ebp
  imul   %r15d,%eax
  movslq %eax,%rbx
  lea    0x0(%rbp,%rbp,4),%eax
  cltq
  add    %rax,(%rsp)
  jmp    L254
  cs nopw 0x0(%rax,%rax,1)
L199:
  test   %r14,%r14
  jle    L145
  lea    0x1(%r14),%r8d
  mov    $0x1,%ecx
  mov    $0x1,%eax
  xor    %esi,%esi
  nopl   (%rax)
L223:
  mov    %ecx,%edx
  neg    %ecx
  imul   %eax,%edx
  add    $0x1,%eax
  movslq %edx,%rdx
  add    %rdx,%rsi
  cmp    %eax,%r8d
  jne    L223
  add    %rsi,(%rsp)
L145:
  mov    (%rsp),%rax
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax)
L176:
  lea    -0x2(%rcx),%esi
  mov    $0xa,%edi
  call   <pow@plt>
  mov    %r13d,%esi
  mov    $0xa,%edi
  mov    %eax,%ebp
  call   <pow@plt>
  imul   %r15d,%ebp
  lea    -0x1(%r15),%edx
  imul   %r15d,%edx
  mov    %eax,%r11d
  imul   $0x2d,%ebp,%ebp
  mov    %edx,%eax
  shr    $0x1f,%eax
  add    %edx,%eax
  movslq %ebp,%rbp
  sar    %eax
  imul   %r11d,%eax
  cltq
  sub    %rax,%rbp
  jmp    L70
L256:
  mov    %r13d,%esi
  mov    $0xa,%edi
  mov    %edx,0x8(%rsp)
  xor    %ebx,%ebx
  call   <pow@plt>
  mov    0x8(%rsp),%edx
  imul   %ebp,%eax
  imul   %ebp,%edx
  cltq
  movslq %edx,%r15
  sub    %rax,%r14
  add    %r15,(%rsp)
  jmp    L254
  xchg   %ax,%ax
L49:
  mov    %r14,%rax
  mov    %r13d,%esi
  mov    $0xa,%edi
  sub    %rbx,%rax
  lea    0x1(%rax),%rbx
  movslq %ebp,%rax
  imul   %rax,%rbx
  call   <pow@plt>
  sub    %rbx,(%rsp)
  xor    %ebx,%ebx
  imul   %ebp,%eax
  cltq
  sub    %rax,%r14
  jmp    L254
  nopl   0x0(%rax)
L44:
  lea    -0x2(%rcx),%esi
  mov    $0xa,%edi
  call   <pow@plt>
  mov    %r13d,%esi
  mov    $0xa,%edi
  mov    %eax,%ebp
  call   <pow@plt>
  imul   %r15d,%eax
  imul   %ebp,%r15d
  movslq %eax,%rbx
  lea    (%r15,%r15,4),%eax
  cltq
  add    %rax,(%rsp)
  jmp    L254
  xchg   %ax,%ax
L184:
  lea    0x1(%r14),%rdx
  imul   %r14,%rdx
  mov    %rdx,%rax
  shr    $0x3f,%rax
  add    %rdx,%rax
  sar    %rax
  add    %rax,(%rsp)
  jmp    L145
```

assistant: ```c
long long int Spsum(long long int a, long long int b, int se) {
  long long int s = 0;
  int i, o, p, f1, f2, d = 0, l2;
  d = Digits(b);
  f1 = a / pow(10, d - 1);
  f2 = b / pow(10, d - 1);
  l2 = b % 10;
  if (a == 0 && b == 0)
    return 0;
  if (se == 1) {
    s = 0;
  l:
    p = 1;
    for (i = 1; i <= b; i++) {
      s = s + p * i;
      p = p * -1;
    }
    return s;
  }
  if (se % 2 == 0) {
    if (d == 1) {
      s = b * (b + 1) / 2;
      return s;
    }
    if ((se - d) % 2 == 0) {
      if (a == 0) {
        s = s + 45 * pow(10, d - 2) * f2;
        s = s - f2 * (f2 - 1) / 2 * pow(10, d - 1);
        s = s + Spsum(f2 * pow(10, d - 1), b, se);
      } else if (f1 != f2) {
        s = s - (f2 * (f2 - 1) / 2 - f1 * (f1 - 1) / 2) * pow(10, d - 1);
        s = s + (d - 1) % 2 * 45 * pow(10, d - 2) * (f2 - f1);
        s = s + Spsum(f2 * pow(10, d - 1), b, se);
      } else {
        s = s - f2 * (b - a + 1);
        s = s + Spsum(0, b - f2 * pow(10, d - 1), se);
      }
    } else {
      if (a == 0 || f1 != f2) {
        s = s + (f2 * (f2 - 1) / 2 - f1 * (f1 - 1) / 2) * pow(10, d - 1);
        s = s + Spsum(f2 * pow(10, d - 1), b, se);
      } else {
        s = s + f1 * (b - a + 1);
        s = s + Spsum(0, b - f2 * pow(10, d - 1), se);
      }
    }
  } else {
    if (d == 1)
      goto l;
    if (l2 % 2 == 1) {
      if (a == 0) {
        s = s + 5 * pow(10, d - 2) * f2;
        s = s + Spsum(f2 * pow(10, d - 1), b, se);
      } else if (f1 != f2) {
        s = s + 5 * pow(10, d - 2) * (f2 - f1);
        s = s + Spsum(f2 * pow(10, d - 1), b, se);
      } else
        s = s + Spsum(0, b - f2 * pow(10, d - 1), se);
    } else {
      p = ((se - d) % 2 == 0) ? -1 : 1;
      if (a == 0) {
        s = s + 5 * pow(10, d - 2) * f2;
        s = s + Spsum(f2 * pow(10, d - 1), b, se);
      } else if (f1 != f2) {
        s = s + 5 * pow(10, d - 2) * (f2 - f1);
        s = s + Spsum(f2 * pow(10, d - 1), b, se);
      } else {
        s = s + p * f2;
        s = s + Spsum(0, b - f2 * pow(10, d - 1), se);
      }
    }
  }
  return s;
}
```