user: 请从给定的汇编指令推导出C源代码：

```asm
<bn_sqr_comba8>:
  endbr64
  push   %r12
  mov    %rsi,%rax
  push   %rbp
  push   %rbx
  mov    (%rsi),%rcx
  mov    %ecx,%esi
  shr    $0x20,%rcx
  mov    %rsi,%rdx
  imul   %rsi,%rsi
  imul   %rcx,%rdx
  imul   %rcx,%rcx
  mov    %rdx,%r8
  shl    $0x21,%rdx
  shr    $0x1f,%r8
  add    %rsi,%rdx
  adc    %r8,%rcx
  mov    %rdx,(%rdi)
  mov    0x8(%rax),%r8
  mov    (%rax),%r9
  mov    %r8d,%edx
  shr    $0x20,%r8
  mov    %r9d,%r11d
  shr    $0x20,%r9
  mov    %rdx,%rsi
  mov    %r8,%r10
  imul   %r9,%rdx
  imul   %r11,%r8
  imul   %r11,%rsi
  imul   %r9,%r10
  add    %r8,%rdx
  jb     L989
L543:
  mov    %rdx,%r8
  shl    $0x20,%rdx
  shr    $0x20,%r8
  add    %rdx,%rsi
  mov    %r10,%rdx
  adc    %r8,%rdx
  mov    %rsi,%r9
  add    %rsi,%rsi
  mov    %rdx,%r8
  shr    $0x3f,%r9
  shr    $0x3f,%r8
  lea    (%r9,%rdx,2),%r9
  add    %rsi,%rcx
  jb     L1112
L385:
  mov    %rcx,0x8(%rdi)
  mov    0x8(%rax),%rdx
  mov    0x10(%rax),%r11
  mov    (%rax),%rbp
  mov    %edx,%esi
  shr    $0x20,%rdx
  mov    %rsi,%rcx
  imul   %rsi,%rsi
  mov    %ebp,%r12d
  imul   %rdx,%rcx
  imul   %rdx,%rdx
  mov    %rcx,%r10
  shl    $0x21,%rcx
  shr    $0x1f,%r10
  add    %rsi,%rcx
  adc    %r10,%rdx
  add    %rcx,%r9
  mov    %r11d,%ecx
  adc    $0x0,%rdx
  mov    %rcx,%r10
  add    %r8,%rdx
  setb   %r8b
  shr    $0x20,%r11
  imul   %r12,%r10
  mov    %rdx,%rsi
  shr    $0x20,%rbp
  mov    %r11,%rbx
  movzbl %r8b,%r8d
  imul   %rbp,%rcx
  imul   %r12,%r11
  imul   %rbp,%rbx
  add    %r11,%rcx
  jb     L1366
L1063:
  mov    %rcx,%r11
  shl    $0x20,%rcx
  shr    $0x20,%r11
  add    %rcx,%r10
  adc    %r11,%rbx
  mov    %rbx,%rcx
  shr    $0x3f,%rcx
  add    %rcx,%r8
  mov    %r10,%rcx
  add    %r10,%r10
  shr    $0x3f,%rcx
  lea    (%rcx,%rbx,2),%rcx
  add    %r10,%r9
  jb     L363
L114:
  add    %rdx,%rcx
  setb   %dl
  mov    %rcx,%rsi
  movzbl %dl,%edx
  cmp    $0x1,%rdx
  sbb    $0xffffffffffffffff,%r8
L610:
  mov    %r9,0x10(%rdi)
  mov    0x18(%rax),%r9
  mov    (%rax),%r10
  mov    %r9d,%edx
  shr    $0x20,%r9
  mov    %r10d,%ebx
  shr    $0x20,%r10
  mov    %rdx,%rcx
  mov    %r9,%r11
  imul   %r10,%rdx
  imul   %rbx,%r9
  imul   %rbx,%rcx
  imul   %r10,%r11
  add    %r9,%rdx
  jb     L191
L529:
  mov    %rdx,%r9
  shl    $0x20,%rdx
  shr    $0x20,%r9
  add    %rdx,%rcx
  mov    %r11,%rdx
  adc    %r9,%rdx
  mov    %rcx,%r10
  add    %rcx,%rcx
  mov    %rdx,%r9
  shr    $0x3f,%r10
  shr    $0x3f,%r9
  lea    (%r10,%rdx,2),%rdx
  add    %rsi,%rcx
  jb     L634
L422:
  add    %r8,%rdx
  mov    %rdx,%r8
  adc    $0x0,%r9
L1100:
  mov    0x10(%rax),%r10
  mov    0x8(%rax),%r11
  mov    %r10d,%esi
  mov    %r11d,%ebp
  shr    $0x20,%r10
  shr    $0x20,%r11
  mov    %rsi,%rdx
  mov    %r10,%rbx
  imul   %r11,%rsi
  imul   %rbp,%r10
  imul   %rbp,%rdx
  imul   %r11,%rbx
  add    %r10,%rsi
  jb     L15
L1149:
  mov    %rsi,%r10
  shl    $0x20,%rsi
  shr    $0x20,%r10
  add    %rsi,%rdx
  adc    %r10,%rbx
  mov    %rbx,%r10
  shr    $0x3f,%r10
  add    %r10,%r9
  mov    %rdx,%r10
  add    %rdx,%rdx
  shr    $0x3f,%r10
  lea    (%r10,%rbx,2),%rsi
  add    %rdx,%rcx
  jb     L479
L1272:
  xor    %edx,%edx
  add    %r8,%rsi
  setb   %dl
  mov    %rsi,%r8
  cmp    $0x1,%rdx
  sbb    $0xffffffffffffffff,%r9
L842:
  mov    %rcx,0x18(%rdi)
  mov    0x10(%rax),%rdx
  mov    0x18(%rax),%r11
  mov    0x8(%rax),%rbp
  mov    %edx,%ecx
  shr    $0x20,%rdx
  mov    %rcx,%rsi
  imul   %rcx,%rcx
  mov    %ebp,%r12d
  imul   %rdx,%rsi
  imul   %rdx,%rdx
  mov    %rsi,%r10
  shl    $0x21,%rsi
  shr    $0x1f,%r10
  add    %rsi,%rcx
  mov    %r11d,%esi
  adc    %r10,%rdx
  add    %r8,%rcx
  adc    $0x0,%rdx
  mov    %rcx,%r10
  add    %r9,%rdx
  mov    %rsi,%r9
  setb   %cl
  shr    $0x20,%r11
  imul   %r12,%r9
  mov    %rdx,%r8
  shr    $0x20,%rbp
  mov    %r11,%rbx
  movzbl %cl,%ecx
  imul   %rbp,%rsi
  imul   %r12,%r11
  imul   %rbp,%rbx
  add    %r11,%rsi
  jb     L520
L799:
  mov    %rsi,%r11
  shl    $0x20,%rsi
  shr    $0x20,%r11
  add    %rsi,%r9
  adc    %r11,%rbx
  mov    %rbx,%rsi
  shr    $0x3f,%rsi
  add    %rsi,%rcx
  mov    %r9,%rsi
  add    %r9,%r9
  shr    $0x3f,%rsi
  lea    (%rsi,%rbx,2),%rsi
  add    %r10,%r9
  jb     L308
L303:
  add    %rdx,%rsi
  setb   %dl
  mov    %rsi,%r8
  movzbl %dl,%edx
  cmp    $0x1,%rdx
  sbb    $0xffffffffffffffff,%rcx
L1068:
  mov    0x20(%rax),%r10
  mov    (%rax),%r11
  mov    %r10d,%esi
  mov    %r11d,%ebp
  shr    $0x20,%r10
  shr    $0x20,%r11
  mov    %rsi,%rdx
  mov    %r10,%rbx
  imul   %r11,%rsi
  imul   %rbp,%r10
  imul   %rbp,%rdx
  imul   %r11,%rbx
  add    %r10,%rsi
  jb     L1358
L553:
  mov    %rsi,%r10
  shl    $0x20,%rsi
  shr    $0x20,%r10
  add    %rsi,%rdx
  adc    %r10,%rbx
  mov    %rbx,%r10
  shr    $0x3f,%r10
  add    %r10,%rcx
  mov    %rdx,%r10
  add    %rdx,%rdx
  shr    $0x3f,%r10
  lea    (%r10,%rbx,2),%rsi
  add    %rdx,%r9
  jb     L1295
L204:
  xor    %edx,%edx
  add    %r8,%rsi
  setb   %dl
  mov    %rsi,%r8
  cmp    $0x1,%rdx
  sbb    $0xffffffffffffffff,%rcx
L175:
  mov    %r9,0x20(%rdi)
  mov    0x28(%rax),%r9
  mov    (%rax),%r10
  mov    %r9d,%esi
  shr    $0x20,%r9
  mov    %r10d,%ebx
  shr    $0x20,%r10
  mov    %rsi,%rdx
  mov    %r9,%r11
  imul   %r10,%rsi
  imul   %rbx,%r9
  imul   %rbx,%rdx
  imul   %r10,%r11
  add    %r9,%rsi
  jb     L89
L1135:
  mov    %rsi,%r9
  shl    $0x20,%rsi
  shr    $0x20,%r9
  add    %rsi,%rdx
  adc    %r11,%r9
  mov    %rdx,%r10
  add    %rdx,%rdx
  mov    %r9,%rsi
  shr    $0x3f,%r10
  shr    $0x3f,%rsi
  lea    (%r10,%r9,2),%r9
  add    %r8,%rdx
  jb     L66
L108:
  add    %rcx,%r9
  mov    %r9,%rcx
  adc    $0x0,%rsi
L805:
  mov    0x20(%rax),%r10
  mov    0x8(%rax),%r11
  mov    %r10d,%r8d
  mov    %r11d,%ebp
  shr    $0x20,%r10
  shr    $0x20,%r11
  mov    %r8,%r9
  mov    %r10,%rbx
  imul   %r11,%r8
  imul   %rbp,%r10
  imul   %rbp,%r9
  imul   %r11,%rbx
  add    %r10,%r8
  jb     L1281
L412:
  mov    %r8,%r10
  shl    $0x20,%r8
  shr    $0x20,%r10
  add    %r8,%r9
  adc    %r10,%rbx
  mov    %rbx,%r10
  shr    $0x3f,%r10
  add    %r10,%rsi
  mov    %r9,%r10
  add    %r9,%r9
  shr    $0x3f,%r10
  lea    (%r10,%rbx,2),%r8
  add    %r9,%rdx
  jb     L765
L132:
  xor    %r9d,%r9d
  add    %rcx,%r8
  setb   %r9b
  mov    %r8,%rcx
  cmp    $0x1,%r9
  sbb    $0xffffffffffffffff,%rsi
L740:
  mov    0x18(%rax),%r10
  mov    0x10(%rax),%r11
  mov    %r10d,%r8d
  mov    %r11d,%ebp
  shr    $0x20,%r10
  shr    $0x20,%r11
  mov    %r8,%r9
  mov    %r10,%rbx
  imul   %r11,%r8
  imul   %rbp,%r10
  imul   %rbp,%r9
  imul   %r11,%rbx
  add    %r10,%r8
  jb     L1181
L257:
  mov    %r8,%r10
  shl    $0x20,%r8
  shr    $0x20,%r10
  add    %r8,%r9
  adc    %r10,%rbx
  mov    %rbx,%r10
  shr    $0x3f,%r10
  add    %r10,%rsi
  mov    %r9,%r10
  add    %r9,%r9
  shr    $0x3f,%r10
  lea    (%r10,%rbx,2),%r8
  add    %r9,%rdx
  jb     L393
L48:
  xor    %r9d,%r9d
  add    %rcx,%r8
  setb   %r9b
  mov    %r8,%rcx
  cmp    $0x1,%r9
  sbb    $0xffffffffffffffff,%rsi
L888:
  mov    %rdx,0x28(%rdi)
  mov    0x18(%rax),%rdx
  mov    0x20(%rax),%r11
  mov    0x10(%rax),%rbp
  mov    %edx,%r8d
  shr    $0x20,%rdx
  mov    %r8,%r9
  imul   %r8,%r8
  mov    %ebp,%r12d
  imul   %rdx,%r9
  imul   %rdx,%rdx
  mov    %r9,%r10
  shl    $0x21,%r9
  shr    $0x1f,%r10
  add    %r9,%r8
  adc    %r10,%rdx
  add    %rcx,%r8
  adc    $0x0,%rdx
  mov    %r8,%r9
  add    %rsi,%rdx
  mov    %r11d,%esi
  setb   %cl
  shr    $0x20,%r11
  mov    %rsi,%r10
  mov    %rdx,%r8
  shr    $0x20,%rbp
  imul   %r12,%r10
  mov    %r11,%rbx
  movzbl %cl,%ecx
  imul   %rbp,%rsi
  imul   %r12,%r11
  imul   %rbp,%rbx
  add    %r11,%rsi
  jb     L1243
L1306:
  mov    %rsi,%r11
  shl    $0x20,%rsi
  shr    $0x20,%r11
  add    %rsi,%r10
  adc    %r11,%rbx
  mov    %rbx,%rsi
  shr    $0x3f,%rsi
  add    %rsi,%rcx
  mov    %r10,%rsi
  add    %r10,%r10
  shr    $0x3f,%rsi
  lea    (%rsi,%rbx,2),%rsi
  add    %r10,%r9
  jb     L1273
L964:
  add    %rdx,%rsi
  setb   %dl
  mov    %rsi,%r8
  movzbl %dl,%edx
  cmp    $0x1,%rdx
  sbb    $0xffffffffffffffff,%rcx
L1079:
  mov    0x28(%rax),%r10
  mov    0x8(%rax),%r11
  mov    %r10d,%esi
  mov    %r11d,%ebp
  shr    $0x20,%r10
  shr    $0x20,%r11
  mov    %rsi,%rdx
  mov    %r10,%rbx
  imul   %r11,%rsi
  imul   %rbp,%r10
  imul   %rbp,%rdx
  imul   %r11,%rbx
  add    %r10,%rsi
  jb     L715
L1303:
  mov    %rsi,%r10
  shl    $0x20,%rsi
  shr    $0x20,%r10
  add    %rsi,%rdx
  adc    %r10,%rbx
  mov    %rbx,%r10
  shr    $0x3f,%r10
  add    %r10,%rcx
  mov    %rdx,%r10
  add    %rdx,%rdx
  shr    $0x3f,%r10
  lea    (%r10,%rbx,2),%rsi
  add    %r9,%rdx
  jb     L629
L702:
  xor    %r9d,%r9d
  add    %r8,%rsi
  setb   %r9b
  mov    %rsi,%r8
  cmp    $0x1,%r9
  sbb    $0xffffffffffffffff,%rcx
L725:
  mov    0x30(%rax),%r10
  mov    (%rax),%r11
  mov    %r10d,%esi
  mov    %r11d,%ebp
  shr    $0x20,%r10
  shr    $0x20,%r11
  mov    %rsi,%r9
  mov    %r10,%rbx
  imul   %r11,%rsi
  imul   %rbp,%r10
  imul   %rbp,%r9
  imul   %r11,%rbx
  add    %r10,%rsi
  jb     L1255
L362:
  mov    %rsi,%r10
  shl    $0x20,%rsi
  shr    $0x20,%r10
  add    %rsi,%r9
  adc    %r10,%rbx
  mov    %rbx,%r10
  shr    $0x3f,%r10
  add    %r10,%rcx
  mov    %r9,%r10
  add    %r9,%r9
  shr    $0x3f,%r10
  lea    (%r10,%rbx,2),%rsi
  add    %r9,%rdx
  jb     L458
L748:
  xor    %r9d,%r9d
  add    %r8,%rsi
  setb   %r9b
  mov    %rsi,%r8
  cmp    $0x1,%r9
  sbb    $0xffffffffffffffff,%rcx
L1200:
  mov    %rdx,0x30(%rdi)
  mov    0x38(%rax),%r9
  mov    (%rax),%r10
  mov    %r9d,%esi
  shr    $0x20,%r9
  mov    %r10d,%ebx
  shr    $0x20,%r10
  mov    %rsi,%rdx
  mov    %r9,%r11
  imul   %r10,%rsi
  imul   %rbx,%r9
  imul   %rbx,%rdx
  imul   %r10,%r11
  add    %r9,%rsi
  jb     L697
L1387:
  mov    %rsi,%r9
  shl    $0x20,%rsi
  shr    $0x20,%r9
  add    %rsi,%rdx
  adc    %r11,%r9
  mov    %rdx,%r10
  add    %rdx,%rdx
  mov    %r9,%rsi
  shr    $0x3f,%r10
  shr    $0x3f,%rsi
  lea    (%r10,%r9,2),%r9
  add    %r8,%rdx
  jb     L1137
L570:
  add    %rcx,%r9
  mov    %r9,%rcx
  adc    $0x0,%rsi
L1188:
  mov    0x30(%rax),%r10
  mov    0x8(%rax),%r11
  mov    %r10d,%r8d
  mov    %r11d,%ebp
  shr    $0x20,%r10
  shr    $0x20,%r11
  mov    %r8,%r9
  mov    %r10,%rbx
  imul   %r11,%r8
  imul   %rbp,%r10
  imul   %rbp,%r9
  imul   %r11,%rbx
  add    %r10,%r8
  jb     L540
L1163:
  mov    %r8,%r10
  shl    $0x20,%r8
  shr    $0x20,%r10
  add    %r8,%r9
  adc    %r10,%rbx
  mov    %rbx,%r10
  shr    $0x3f,%r10
  add    %r10,%rsi
  mov    %r9,%r10
  add    %r9,%r9
  shr    $0x3f,%r10
  lea    (%r10,%rbx,2),%r8
  add    %r9,%rdx
  jb     L1053
L23:
  xor    %r9d,%r9d
  add    %rcx,%r8
  setb   %r9b
  mov    %r8,%rcx
  cmp    $0x1,%r9
  sbb    $0xffffffffffffffff,%rsi
L1353:
  mov    0x28(%rax),%r10
  mov    0x10(%rax),%r11
  mov    %r10d,%r8d
  mov    %r11d,%ebp
  shr    $0x20,%r10
  shr    $0x20,%r11
  mov    %r8,%r9
  mov    %r10,%rbx
  imul   %r11,%r8
  imul   %rbp,%r10
  imul   %rbp,%r9
  imul   %r11,%rbx
  add    %r10,%r8
  jb     L1321
L803:
  mov    %r8,%r10
  shl    $0x20,%r8
  shr    $0x20,%r10
  add    %r8,%r9
  adc    %r10,%rbx
  mov    %rbx,%r10
  shr    $0x3f,%r10
  add    %r10,%rsi
  mov    %r9,%r10
  add    %r9,%r9
  shr    $0x3f,%r10
  lea    (%r10,%rbx,2),%r8
  add    %r9,%rdx
  jb     L728
L684:
  xor    %r9d,%r9d
  add    %rcx,%r8
  setb   %r9b
  mov    %r8,%rcx
  cmp    $0x1,%r9
  sbb    $0xffffffffffffffff,%rsi
L1282:
  mov    0x20(%rax),%r10
  mov    0x18(%rax),%r11
  mov    %r10d,%r8d
  mov    %r11d,%ebp
  shr    $0x20,%r10
  shr    $0x20,%r11
  mov    %r8,%r9
  mov    %r10,%rbx
  imul   %r11,%r8
  imul   %rbp,%r10
  imul   %rbp,%r9
  imul   %r11,%rbx
  add    %r10,%r8
  jb     L603
L394:
  mov    %r8,%r10
  shl    $0x20,%r8
  shr    $0x20,%r10
  add    %r8,%r9
  adc    %r10,%rbx
  mov    %rbx,%r10
  shr    $0x3f,%r10
  add    %r10,%rsi
  mov    %r9,%r10
  add    %r9,%r9
  shr    $0x3f,%r10
  lea    (%r10,%rbx,2),%r8
  add    %r9,%rdx
  jb     L1059
L951:
  xor    %r9d,%r9d
  add    %rcx,%r8
  setb   %r9b
  mov    %r8,%rcx
  cmp    $0x1,%r9
  sbb    $0xffffffffffffffff,%rsi
L183:
  mov    %rdx,0x38(%rdi)
  mov    0x20(%rax),%rdx
  mov    0x28(%rax),%r11
  mov    0x18(%rax),%rbp
  mov    %edx,%r8d
  shr    $0x20,%rdx
  mov    %r8,%r9
  imul   %r8,%r8
  mov    %ebp,%r12d
  imul   %rdx,%r9
  imul   %rdx,%rdx
  mov    %r9,%r10
  shl    $0x21,%r9
  shr    $0x1f,%r10
  add    %r9,%r8
  adc    %r10,%rdx
  add    %rcx,%r8
  mov    %r11d,%ecx
  adc    $0x0,%rdx
  mov    %rcx,%r9
  mov    %r8,%r10
  add    %rdx,%rsi
  setb   %dl
  shr    $0x20,%r11
  imul   %r12,%r9
  mov    %rsi,%r8
  shr    $0x20,%rbp
  mov    %r11,%rbx
  movzbl %dl,%edx
  imul   %rbp,%rcx
  imul   %r12,%r11
  imul   %rbp,%rbx
  add    %r11,%rcx
  jb     L650
L695:
  mov    %rcx,%r11
  shl    $0x20,%rcx
  shr    $0x20,%r11
  add    %rcx,%r9
  adc    %r11,%rbx
  mov    %rbx,%rcx
  shr    $0x3f,%rcx
  add    %rcx,%rdx
  mov    %r9,%rcx
  add    %r9,%r9
  shr    $0x3f,%rcx
  lea    (%rcx,%rbx,2),%rcx
  add    %r10,%r9
  jb     L677
L249:
  add    %rsi,%rcx
  setb   %sil
  mov    %rcx,%r8
  movzbl %sil,%esi
  cmp    $0x1,%rsi
  sbb    $0xffffffffffffffff,%rdx
L1386:
  mov    0x30(%rax),%r10
  mov    0x10(%rax),%r11
  mov    %r10d,%ecx
  mov    %r11d,%ebp
  shr    $0x20,%r10
  shr    $0x20,%r11
  mov    %rcx,%rsi
  mov    %r10,%rbx
  imul   %r11,%rcx
  imul   %rbp,%r10
  imul   %rbp,%rsi
  imul   %r11,%rbx
  add    %r10,%rcx
  jb     L848
L1337:
  mov    %rcx,%r10
  shl    $0x20,%rcx
  shr    $0x20,%r10
  add    %rcx,%rsi
  adc    %r10,%rbx
  mov    %rbx,%r10
  shr    $0x3f,%r10
  add    %r10,%rdx
  mov    %rsi,%r10
  add    %rsi,%rsi
  shr    $0x3f,%r10
  lea    (%r10,%rbx,2),%rcx
  add    %rsi,%r9
  jb     L1192
L767:
  xor    %esi,%esi
  add    %r8,%rcx
  setb   %sil
  mov    %rcx,%r8
  cmp    $0x1,%rsi
  sbb    $0xffffffffffffffff,%rdx
L344:
  mov    0x38(%rax),%r10
  mov    0x8(%rax),%r11
  mov    %r10d,%ecx
  mov    %r11d,%ebp
  shr    $0x20,%r10
  shr    $0x20,%r11
  mov    %rcx,%rsi
  mov    %r10,%rbx
  imul   %r11,%rcx
  imul   %rbp,%r10
  imul   %rbp,%rsi
  imul   %r11,%rbx
  add    %r10,%rcx
  jb     L1144
L1072:
  mov    %rcx,%r10
  shl    $0x20,%rcx
  shr    $0x20,%r10
  add    %rcx,%rsi
  adc    %r10,%rbx
  mov    %rbx,%r10
  shr    $0x3f,%r10
  add    %r10,%rdx
  mov    %rsi,%r10
  add    %rsi,%rsi
  shr    $0x3f,%r10
  lea    (%r10,%rbx,2),%rcx
  add    %r9,%rsi
  jb     L1045
L375:
  xor    %r9d,%r9d
  add    %r8,%rcx
  setb   %r9b
  mov    %rcx,%r8
  cmp    $0x1,%r9
  sbb    $0xffffffffffffffff,%rdx
L566:
  mov    %rsi,0x40(%rdi)
  mov    0x38(%rax),%r9
  mov    0x10(%rax),%r10
  mov    %r9d,%ecx
  shr    $0x20,%r9
  mov    %r10d,%ebx
  shr    $0x20,%r10
  mov    %rcx,%rsi
  mov    %r9,%r11
  imul   %r10,%rcx
  imul   %rbx,%r9
  imul   %rbx,%rsi
  imul   %r10,%r11
  add    %r9,%rcx
  jb     L428
L186:
  mov    %rcx,%r9
  shl    $0x20,%rcx
  shr    $0x20,%r9
  add    %rsi,%rcx
  adc    %r11,%r9
  mov    %rcx,%r10
  add    %rcx,%rcx
  mov    %r9,%rsi
  shr    $0x3f,%r10
  shr    $0x3f,%rsi
  add    %r8,%rcx
  lea    (%r10,%r9,2),%r10
  mov    %rcx,%r9
  jb     L351
L857:
  add    %rdx,%r10
  mov    %r10,%rdx
  adc    $0x0,%rsi
L591:
  mov    0x30(%rax),%r10
  mov    0x18(%rax),%r11
  mov    %r10d,%ecx
  mov    %r11d,%ebp
  shr    $0x20,%r10
  shr    $0x20,%r11
  mov    %rcx,%r8
  mov    %r10,%rbx
  imul   %r11,%rcx
  imul   %rbp,%r10
  imul   %rbp,%r8
  imul   %r11,%rbx
  add    %r10,%rcx
  jb     L824
L642:
  mov    %rcx,%r10
  shl    $0x20,%rcx
  shr    $0x20,%r10
  add    %rcx,%r8
  adc    %r10,%rbx
  mov    %rbx,%r10
  shr    $0x3f,%r10
  add    %r10,%rsi
  mov    %r8,%r10
  add    %r8,%r8
  shr    $0x3f,%r10
  lea    (%r10,%rbx,2),%rcx
  add    %r8,%r9
  jb     L99
L1268:
  xor    %r8d,%r8d
  add    %rdx,%rcx
  setb   %r8b
  mov    %rcx,%rdx
  cmp    $0x1,%r8
  sbb    $0xffffffffffffffff,%rsi
L1202:
  mov    0x28(%rax),%r10
  mov    0x20(%rax),%r11
  mov    %r10d,%ecx
  mov    %r11d,%ebp
  shr    $0x20,%r10
  shr    $0x20,%r11
  mov    %rcx,%r8
  mov    %r10,%rbx
  imul   %r11,%rcx
  imul   %rbp,%r10
  imul   %rbp,%r8
  imul   %r11,%rbx
  add    %r10,%rcx
  jb     L1298
L996:
  mov    %rcx,%r10
  shl    $0x20,%rcx
  shr    $0x20,%r10
  add    %rcx,%r8
  adc    %r10,%rbx
  mov    %rbx,%r10
  shr    $0x3f,%r10
  add    %r10,%rsi
  mov    %r8,%r10
  add    %r8,%r8
  shr    $0x3f,%r10
  lea    (%r10,%rbx,2),%rcx
  add    %r8,%r9
  jb     L429
L1280:
  xor    %r8d,%r8d
  add    %rdx,%rcx
  setb   %r8b
  mov    %rcx,%rdx
  cmp    $0x1,%r8
  sbb    $0xffffffffffffffff,%rsi
L792:
  mov    %r9,0x48(%rdi)
  mov    0x28(%rax),%rcx
  mov    0x30(%rax),%r11
  mov    0x20(%rax),%rbp
  mov    %ecx,%r8d
  shr    $0x20,%rcx
  mov    %r8,%r9
  imul   %r8,%r8
  mov    %ebp,%r12d
  imul   %rcx,%r9
  imul   %rcx,%rcx
  mov    %r9,%r10
  shl    $0x21,%r9
  shr    $0x1f,%r10
  add    %r9,%r8
  adc    %r10,%rcx
  add    %rdx,%r8
  mov    %r11d,%edx
  adc    $0x0,%rcx
  mov    %rdx,%r9
  mov    %r8,%r10
  add    %rsi,%rcx
  setb   %sil
  shr    $0x20,%r11
  imul   %r12,%r9
  mov    %rcx,%r8
  shr    $0x20,%rbp
  mov    %r11,%rbx
  movzbl %sil,%esi
  imul   %rbp,%rdx
  imul   %r12,%r11
  imul   %rbp,%rbx
  add    %r11,%rdx
  jb     L1325
L876:
  mov    %rdx,%r11
  shl    $0x20,%rdx
  shr    $0x20,%r11
  add    %rdx,%r9
  adc    %r11,%rbx
  mov    %rbx,%rdx
  shr    $0x3f,%rdx
  add    %rdx,%rsi
  mov    %r9,%rdx
  add    %r9,%r9
  shr    $0x3f,%rdx
  lea    (%rdx,%rbx,2),%rdx
  add    %r10,%r9
  jb     L302
L369:
  add    %rcx,%rdx
  setb   %cl
  mov    %rdx,%r8
  movzbl %cl,%ecx
  cmp    $0x1,%rcx
  sbb    $0xffffffffffffffff,%rsi
L371:
  mov    0x38(%rax),%r10
  mov    0x18(%rax),%r11
  mov    %r10d,%edx
  mov    %r11d,%ebp
  shr    $0x20,%r10
  shr    $0x20,%r11
  mov    %rdx,%rcx
  mov    %r10,%rbx
  imul   %r11,%rdx
  imul   %rbp,%r10
  imul   %rbp,%rcx
  imul   %r11,%rbx
  add    %r10,%rdx
  jb     L187
L922:
  mov    %rdx,%r10
  shl    $0x20,%rdx
  shr    $0x20,%r10
  add    %rdx,%rcx
  adc    %r10,%rbx
  mov    %rbx,%r10
  shr    $0x3f,%r10
  add    %r10,%rsi
  mov    %rcx,%r10
  add    %rcx,%rcx
  shr    $0x3f,%r10
  lea    (%r10,%rbx,2),%rdx
  add    %rcx,%r9
  jb     L858
L1297:
  xor    %ecx,%ecx
  add    %r8,%rdx
  setb   %cl
  mov    %rdx,%r8
  cmp    $0x1,%rcx
  sbb    $0xffffffffffffffff,%rsi
L1097:
  mov    %r9,0x50(%rdi)
  mov    0x38(%rax),%r9
  mov    0x20(%rax),%r10
  mov    %r9d,%edx
  shr    $0x20,%r9
  mov    %r10d,%ebx
  shr    $0x20,%r10
  mov    %rdx,%rcx
  mov    %r9,%r11
  imul   %r10,%rdx
  imul   %rbx,%r9
  imul   %rbx,%rcx
  imul   %r10,%r11
  add    %r9,%rdx
  jb     L53
L326:
  mov    %rdx,%r9
  shl    $0x20,%rdx
  shr    $0x20,%r9
  add    %rdx,%rcx
  mov    %r11,%rdx
  adc    %r9,%rdx
  mov    %rcx,%r10
  add    %rcx,%rcx
  mov    %rdx,%r9
  shr    $0x3f,%r10
  shr    $0x3f,%r9
  lea    (%r10,%rdx,2),%rdx
  add    %r8,%rcx
  jb     L875
L292:
  add    %rsi,%rdx
  mov    %rdx,%rsi
  adc    $0x0,%r9
L776:
  mov    0x30(%rax),%r10
  mov    0x28(%rax),%r11
  mov    %r10d,%r8d
  mov    %r11d,%ebp
  shr    $0x20,%r10
  shr    $0x20,%r11
  mov    %r8,%rdx
  mov    %r10,%rbx
  imul   %r11,%r8
  imul   %rbp,%r10
  imul   %rbp,%rdx
  imul   %r11,%rbx
  add    %r10,%r8
  jb     L550
L1060:
  mov    %r8,%r10
  shl    $0x20,%r8
  shr    $0x20,%r10
  add    %r8,%rdx
  adc    %r10,%rbx
  mov    %rbx,%r10
  shr    $0x3f,%r10
  add    %r10,%r9
  mov    %rdx,%r10
  add    %rdx,%rdx
  shr    $0x3f,%r10
  lea    (%r10,%rbx,2),%r8
  add    %rdx,%rcx
  jb     L864
L801:
  xor    %edx,%edx
  add    %rsi,%r8
  setb   %dl
  mov    %r8,%rsi
  cmp    $0x1,%rdx
  sbb    $0xffffffffffffffff,%r9
L631:
  mov    %rcx,0x58(%rdi)
  mov    0x30(%rax),%rdx
  mov    0x38(%rax),%r11
  mov    0x28(%rax),%rbp
  mov    %edx,%ecx
  shr    $0x20,%rdx
  mov    %rcx,%r8
  imul   %rcx,%rcx
  mov    %ebp,%r12d
  imul   %rdx,%r8
  imul   %rdx,%rdx
  mov    %r8,%r10
  shl    $0x21,%r8
  shr    $0x1f,%r10
  add    %r8,%rcx
  adc    %r10,%rdx
  add    %rsi,%rcx
  adc    $0x0,%rdx
  mov    %rcx,%r10
  mov    %r11d,%ecx
  add    %r9,%rdx
  mov    %rcx,%r9
  setb   %sil
  shr    $0x20,%r11
  imul   %r12,%r9
  mov    %rdx,%r8
  shr    $0x20,%rbp
  mov    %r11,%rbx
  movzbl %sil,%esi
  imul   %rbp,%rcx
  imul   %r12,%r11
  imul   %rbp,%rbx
  add    %r11,%rcx
  jb     L122
L1184:
  mov    %rcx,%r11
  shl    $0x20,%rcx
  shr    $0x20,%r11
  add    %rcx,%r9
  adc    %r11,%rbx
  mov    %rbx,%rcx
  shr    $0x3f,%rcx
  add    %rcx,%rsi
  mov    %r9,%rcx
  add    %r9,%r9
  shr    $0x3f,%rcx
  lea    (%rcx,%rbx,2),%r11
  mov    %r10,%rcx
  add    %r9,%rcx
  jb     L460
L87:
  add    %rdx,%r11
  setb   %dl
  mov    %r11,%r8
  movzbl %dl,%edx
  cmp    $0x1,%rdx
  sbb    $0xffffffffffffffff,%rsi
L905:
  mov    %rcx,0x60(%rdi)
  mov    0x38(%rax),%r9
  mov    0x30(%rax),%r10
  mov    %r9d,%ecx
  shr    $0x20,%r9
  mov    %r10d,%ebx
  shr    $0x20,%r10
  mov    %rcx,%rdx
  mov    %r9,%r11
  imul   %r10,%rcx
  imul   %rbx,%r9
  imul   %rbx,%rdx
  imul   %r10,%r11
  add    %r9,%rcx
  jb     L1311
L283:
  mov    %rcx,%r9
  shl    $0x20,%rcx
  shr    $0x20,%r9
  add    %rcx,%rdx
  mov    %r11,%rcx
  adc    %r9,%rcx
  mov    %rdx,%r10
  add    %rdx,%rdx
  mov    %rcx,%r9
  shr    $0x3f,%r10
  shr    $0x3f,%r9
  lea    (%r10,%rcx,2),%rcx
  add    %r8,%rdx
  jb     L1219
L847:
  add    %rsi,%rcx
  mov    %r9,%r8
  mov    %rcx,%rsi
  adc    $0x0,%r8
L1103:
  mov    %rdx,0x68(%rdi)
  mov    0x38(%rax),%rdx
  pop    %rbx
  pop    %rbp
  mov    %edx,%eax
  shr    $0x20,%rdx
  pop    %r12
  mov    %rax,%rcx
  imul   %rax,%rax
  imul   %rdx,%rcx
  imul   %rdx,%rdx
  mov    %rcx,%r9
  shl    $0x21,%rcx
  shr    $0x1f,%r9
  add    %rcx,%rax
  adc    %r9,%rdx
  add    %rsi,%rax
  mov    %rax,0x70(%rdi)
  mov    %r8,%rax
  adc    %rdx,%rax
  mov    %rax,0x78(%rdi)
  ret
L989:
  movabs $0x100000000,%r8
  add    %r8,%r10
  jmp    L543
L1219:
  add    $0x1,%rcx
  lea    0x1(%r9),%r8
  je     L1103
  jmp    L847
L1311:
  movabs $0x100000000,%r9
  add    %r9,%r11
  jmp    L283
L460:
  add    $0x1,%r11
  jne    L87
  add    $0x1,%rsi
  jmp    L905
L122:
  movabs $0x100000000,%r11
  add    %r11,%rbx
  jmp    L1184
L864:
  add    $0x1,%r8
  jne    L801
  add    $0x1,%r9
  jmp    L631
L550:
  movabs $0x100000000,%r10
  add    %r10,%rbx
  jmp    L1060
L875:
  add    $0x1,%rdx
  jne    L292
  add    $0x1,%r9
  jmp    L776
L53:
  movabs $0x100000000,%r9
  add    %r9,%r11
  jmp    L326
L858:
  add    $0x1,%rdx
  jne    L1297
  add    $0x1,%rsi
  jmp    L1097
L187:
  movabs $0x100000000,%r10
  add    %r10,%rbx
  jmp    L922
L302:
  add    $0x1,%rdx
  jne    L369
  add    $0x1,%rsi
  jmp    L371
L1325:
  movabs $0x100000000,%r11
  add    %r11,%rbx
  jmp    L876
L429:
  add    $0x1,%rcx
  jne    L1280
  add    $0x1,%rsi
  jmp    L792
L1298:
  movabs $0x100000000,%r10
  add    %r10,%rbx
  jmp    L996
L99:
  add    $0x1,%rcx
  jne    L1268
  add    $0x1,%rsi
  jmp    L1202
L824:
  movabs $0x100000000,%r10
  add    %r10,%rbx
  jmp    L642
L351:
  add    $0x1,%r10
  jne    L857
  add    $0x1,%rsi
  jmp    L591
L428:
  movabs $0x100000000,%r9
  add    %r9,%r11
  jmp    L186
L1045:
  add    $0x1,%rcx
  jne    L375
  add    $0x1,%rdx
  jmp    L566
L1144:
  movabs $0x100000000,%r10
  add    %r10,%rbx
  jmp    L1072
L1192:
  add    $0x1,%rcx
  jne    L767
  add    $0x1,%rdx
  jmp    L344
L848:
  movabs $0x100000000,%r10
  add    %r10,%rbx
  jmp    L1337
L677:
  add    $0x1,%rcx
  jne    L249
  add    $0x1,%rdx
  jmp    L1386
L650:
  movabs $0x100000000,%r11
  add    %r11,%rbx
  jmp    L695
L1059:
  add    $0x1,%r8
  jne    L951
  add    $0x1,%rsi
  jmp    L183
L603:
  movabs $0x100000000,%r10
  add    %r10,%rbx
  jmp    L394
L728:
  add    $0x1,%r8
  jne    L684
  add    $0x1,%rsi
  jmp    L1282
L1321:
  movabs $0x100000000,%r10
  add    %r10,%rbx
  jmp    L803
L1053:
  add    $0x1,%r8
  jne    L23
  add    $0x1,%rsi
  jmp    L1353
L540:
  movabs $0x100000000,%r10
  add    %r10,%rbx
  jmp    L1163
L1137:
  add    $0x1,%r9
  jne    L570
  add    $0x1,%rsi
  jmp    L1188
L697:
  movabs $0x100000000,%r9
  add    %r9,%r11
  jmp    L1387
L458:
  add    $0x1,%rsi
  jne    L748
  add    $0x1,%rcx
  jmp    L1200
L1255:
  movabs $0x100000000,%r10
  add    %r10,%rbx
  jmp    L362
L629:
  add    $0x1,%rsi
  jne    L702
  add    $0x1,%rcx
  jmp    L725
L715:
  movabs $0x100000000,%r10
  add    %r10,%rbx
  jmp    L1303
L1273:
  add    $0x1,%rsi
  jne    L964
  add    $0x1,%rcx
  jmp    L1079
L1243:
  movabs $0x100000000,%r11
  add    %r11,%rbx
  jmp    L1306
L393:
  add    $0x1,%r8
  jne    L48
  add    $0x1,%rsi
  jmp    L888
L1181:
  movabs $0x100000000,%r10
  add    %r10,%rbx
  jmp    L257
L765:
  add    $0x1,%r8
  jne    L132
  add    $0x1,%rsi
  jmp    L740
L1281:
  movabs $0x100000000,%r10
  add    %r10,%rbx
  jmp    L412
L66:
  add    $0x1,%r9
  jne    L108
  add    $0x1,%rsi
  jmp    L805
L89:
  movabs $0x100000000,%r9
  add    %r9,%r11
  jmp    L1135
L1295:
  add    $0x1,%rsi
  jne    L204
  add    $0x1,%rcx
  jmp    L175
L1358:
  movabs $0x100000000,%r10
  add    %r10,%rbx
  jmp    L553
L308:
  add    $0x1,%rsi
  jne    L303
  add    $0x1,%rcx
  jmp    L1068
L520:
  movabs $0x100000000,%r11
  add    %r11,%rbx
  jmp    L799
L479:
  add    $0x1,%rsi
  jne    L1272
  add    $0x1,%r9
  jmp    L842
L15:
  movabs $0x100000000,%r10
  add    %r10,%rbx
  jmp    L1149
L634:
  add    $0x1,%rdx
  jne    L422
  add    $0x1,%r9
  jmp    L1100
L191:
  movabs $0x100000000,%r9
  add    %r9,%r11
  jmp    L529
L363:
  add    $0x1,%rcx
  jne    L114
  add    $0x1,%r8
  jmp    L610
L1366:
  movabs $0x100000000,%r11
  add    %r11,%rbx
  jmp    L1063
L1112:
  add    $0x1,%r9
  jne    L385
  add    $0x1,%r8
  jmp    L385
```

assistant: ```c
void bn_sqr_comba8(unsigned long long *r, unsigned long long *a) {
  unsigned long long bl, bh;
  unsigned long long t1, t2;
  unsigned long long c1, c2, c3;
  c1 = 0;
  c2 = 0;
  c3 = 0;
  {
    unsigned long long l, h, m;
    h = ((a)[0]);
    l = ((h) & (0xffffffffL));
    h = (((h) >> 32) & (0xffffffffL));
    m = (l) * (h);
    l *= l;
    h *= h;
    h += (m & (0xffffffff80000000LL)) >> (32 - 1);
    m = (m & (0xffffffffL)) << (32 + 1);
    l = (l + m) & (0xffffffffffffffffLL);
    if (l < m)
      h++;
    (t1) = l;
    (t2) = h;
  };
  c1 = (c1 + t1) & (0xffffffffffffffffLL);
  if ((c1) < t1)
    t2++;
  c2 = (c2 + t2) & (0xffffffffffffffffLL);
  if ((c2) < t2)
    c3++;
  ;
  r[0] = c1;
  c1 = 0;
  t1 = (((a)[1]) & (0xffffffffL));
  t2 = ((((a)[1]) >> 32) & (0xffffffffL));
  bl = (((a)[0]) & (0xffffffffL));
  bh = ((((a)[0]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c1++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c2 = (c2 + t1) & (0xffffffffffffffffLL);
  if ((c2 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c1++;
  c3 = (c3 + t2) & (0xffffffffffffffffLL);
  if ((c3) < t2)
    c1++;
  ;
  r[1] = c2;
  c2 = 0;
  {
    unsigned long long l, h, m;
    h = ((a)[1]);
    l = ((h) & (0xffffffffL));
    h = (((h) >> 32) & (0xffffffffL));
    m = (l) * (h);
    l *= l;
    h *= h;
    h += (m & (0xffffffff80000000LL)) >> (32 - 1);
    m = (m & (0xffffffffL)) << (32 + 1);
    l = (l + m) & (0xffffffffffffffffLL);
    if (l < m)
      h++;
    (t1) = l;
    (t2) = h;
  };
  c3 = (c3 + t1) & (0xffffffffffffffffLL);
  if ((c3) < t1)
    t2++;
  c1 = (c1 + t2) & (0xffffffffffffffffLL);
  if ((c1) < t2)
    c2++;
  ;
  t1 = (((a)[2]) & (0xffffffffL));
  t2 = ((((a)[2]) >> 32) & (0xffffffffL));
  bl = (((a)[0]) & (0xffffffffL));
  bh = ((((a)[0]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c2++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c3 = (c3 + t1) & (0xffffffffffffffffLL);
  if ((c3 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c2++;
  c1 = (c1 + t2) & (0xffffffffffffffffLL);
  if ((c1) < t2)
    c2++;
  ;
  r[2] = c3;
  c3 = 0;
  t1 = (((a)[3]) & (0xffffffffL));
  t2 = ((((a)[3]) >> 32) & (0xffffffffL));
  bl = (((a)[0]) & (0xffffffffL));
  bh = ((((a)[0]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c3++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c1 = (c1 + t1) & (0xffffffffffffffffLL);
  if ((c1 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c3++;
  c2 = (c2 + t2) & (0xffffffffffffffffLL);
  if ((c2) < t2)
    c3++;
  ;
  t1 = (((a)[2]) & (0xffffffffL));
  t2 = ((((a)[2]) >> 32) & (0xffffffffL));
  bl = (((a)[1]) & (0xffffffffL));
  bh = ((((a)[1]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c3++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c1 = (c1 + t1) & (0xffffffffffffffffLL);
  if ((c1 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c3++;
  c2 = (c2 + t2) & (0xffffffffffffffffLL);
  if ((c2) < t2)
    c3++;
  ;
  r[3] = c1;
  c1 = 0;
  {
    unsigned long long l, h, m;
    h = ((a)[2]);
    l = ((h) & (0xffffffffL));
    h = (((h) >> 32) & (0xffffffffL));
    m = (l) * (h);
    l *= l;
    h *= h;
    h += (m & (0xffffffff80000000LL)) >> (32 - 1);
    m = (m & (0xffffffffL)) << (32 + 1);
    l = (l + m) & (0xffffffffffffffffLL);
    if (l < m)
      h++;
    (t1) = l;
    (t2) = h;
  };
  c2 = (c2 + t1) & (0xffffffffffffffffLL);
  if ((c2) < t1)
    t2++;
  c3 = (c3 + t2) & (0xffffffffffffffffLL);
  if ((c3) < t2)
    c1++;
  ;
  t1 = (((a)[3]) & (0xffffffffL));
  t2 = ((((a)[3]) >> 32) & (0xffffffffL));
  bl = (((a)[1]) & (0xffffffffL));
  bh = ((((a)[1]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c1++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c2 = (c2 + t1) & (0xffffffffffffffffLL);
  if ((c2 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c1++;
  c3 = (c3 + t2) & (0xffffffffffffffffLL);
  if ((c3) < t2)
    c1++;
  ;
  t1 = (((a)[4]) & (0xffffffffL));
  t2 = ((((a)[4]) >> 32) & (0xffffffffL));
  bl = (((a)[0]) & (0xffffffffL));
  bh = ((((a)[0]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c1++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c2 = (c2 + t1) & (0xffffffffffffffffLL);
  if ((c2 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c1++;
  c3 = (c3 + t2) & (0xffffffffffffffffLL);
  if ((c3) < t2)
    c1++;
  ;
  r[4] = c2;
  c2 = 0;
  t1 = (((a)[5]) & (0xffffffffL));
  t2 = ((((a)[5]) >> 32) & (0xffffffffL));
  bl = (((a)[0]) & (0xffffffffL));
  bh = ((((a)[0]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c2++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c3 = (c3 + t1) & (0xffffffffffffffffLL);
  if ((c3 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c2++;
  c1 = (c1 + t2) & (0xffffffffffffffffLL);
  if ((c1) < t2)
    c2++;
  ;
  t1 = (((a)[4]) & (0xffffffffL));
  t2 = ((((a)[4]) >> 32) & (0xffffffffL));
  bl = (((a)[1]) & (0xffffffffL));
  bh = ((((a)[1]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c2++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c3 = (c3 + t1) & (0xffffffffffffffffLL);
  if ((c3 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c2++;
  c1 = (c1 + t2) & (0xffffffffffffffffLL);
  if ((c1) < t2)
    c2++;
  ;
  t1 = (((a)[3]) & (0xffffffffL));
  t2 = ((((a)[3]) >> 32) & (0xffffffffL));
  bl = (((a)[2]) & (0xffffffffL));
  bh = ((((a)[2]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c2++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c3 = (c3 + t1) & (0xffffffffffffffffLL);
  if ((c3 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c2++;
  c1 = (c1 + t2) & (0xffffffffffffffffLL);
  if ((c1) < t2)
    c2++;
  ;
  r[5] = c3;
  c3 = 0;
  {
    unsigned long long l, h, m;
    h = ((a)[3]);
    l = ((h) & (0xffffffffL));
    h = (((h) >> 32) & (0xffffffffL));
    m = (l) * (h);
    l *= l;
    h *= h;
    h += (m & (0xffffffff80000000LL)) >> (32 - 1);
    m = (m & (0xffffffffL)) << (32 + 1);
    l = (l + m) & (0xffffffffffffffffLL);
    if (l < m)
      h++;
    (t1) = l;
    (t2) = h;
  };
  c1 = (c1 + t1) & (0xffffffffffffffffLL);
  if ((c1) < t1)
    t2++;
  c2 = (c2 + t2) & (0xffffffffffffffffLL);
  if ((c2) < t2)
    c3++;
  ;
  t1 = (((a)[4]) & (0xffffffffL));
  t2 = ((((a)[4]) >> 32) & (0xffffffffL));
  bl = (((a)[2]) & (0xffffffffL));
  bh = ((((a)[2]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c3++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c1 = (c1 + t1) & (0xffffffffffffffffLL);
  if ((c1 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c3++;
  c2 = (c2 + t2) & (0xffffffffffffffffLL);
  if ((c2) < t2)
    c3++;
  ;
  t1 = (((a)[5]) & (0xffffffffL));
  t2 = ((((a)[5]) >> 32) & (0xffffffffL));
  bl = (((a)[1]) & (0xffffffffL));
  bh = ((((a)[1]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c3++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c1 = (c1 + t1) & (0xffffffffffffffffLL);
  if ((c1 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c3++;
  c2 = (c2 + t2) & (0xffffffffffffffffLL);
  if ((c2) < t2)
    c3++;
  ;
  t1 = (((a)[6]) & (0xffffffffL));
  t2 = ((((a)[6]) >> 32) & (0xffffffffL));
  bl = (((a)[0]) & (0xffffffffL));
  bh = ((((a)[0]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c3++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c1 = (c1 + t1) & (0xffffffffffffffffLL);
  if ((c1 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c3++;
  c2 = (c2 + t2) & (0xffffffffffffffffLL);
  if ((c2) < t2)
    c3++;
  ;
  r[6] = c1;
  c1 = 0;
  t1 = (((a)[7]) & (0xffffffffL));
  t2 = ((((a)[7]) >> 32) & (0xffffffffL));
  bl = (((a)[0]) & (0xffffffffL));
  bh = ((((a)[0]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c1++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c2 = (c2 + t1) & (0xffffffffffffffffLL);
  if ((c2 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c1++;
  c3 = (c3 + t2) & (0xffffffffffffffffLL);
  if ((c3) < t2)
    c1++;
  ;
  t1 = (((a)[6]) & (0xffffffffL));
  t2 = ((((a)[6]) >> 32) & (0xffffffffL));
  bl = (((a)[1]) & (0xffffffffL));
  bh = ((((a)[1]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c1++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c2 = (c2 + t1) & (0xffffffffffffffffLL);
  if ((c2 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c1++;
  c3 = (c3 + t2) & (0xffffffffffffffffLL);
  if ((c3) < t2)
    c1++;
  ;
  t1 = (((a)[5]) & (0xffffffffL));
  t2 = ((((a)[5]) >> 32) & (0xffffffffL));
  bl = (((a)[2]) & (0xffffffffL));
  bh = ((((a)[2]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c1++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c2 = (c2 + t1) & (0xffffffffffffffffLL);
  if ((c2 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c1++;
  c3 = (c3 + t2) & (0xffffffffffffffffLL);
  if ((c3) < t2)
    c1++;
  ;
  t1 = (((a)[4]) & (0xffffffffL));
  t2 = ((((a)[4]) >> 32) & (0xffffffffL));
  bl = (((a)[3]) & (0xffffffffL));
  bh = ((((a)[3]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c1++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c2 = (c2 + t1) & (0xffffffffffffffffLL);
  if ((c2 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c1++;
  c3 = (c3 + t2) & (0xffffffffffffffffLL);
  if ((c3) < t2)
    c1++;
  ;
  r[7] = c2;
  c2 = 0;
  {
    unsigned long long l, h, m;
    h = ((a)[4]);
    l = ((h) & (0xffffffffL));
    h = (((h) >> 32) & (0xffffffffL));
    m = (l) * (h);
    l *= l;
    h *= h;
    h += (m & (0xffffffff80000000LL)) >> (32 - 1);
    m = (m & (0xffffffffL)) << (32 + 1);
    l = (l + m) & (0xffffffffffffffffLL);
    if (l < m)
      h++;
    (t1) = l;
    (t2) = h;
  };
  c3 = (c3 + t1) & (0xffffffffffffffffLL);
  if ((c3) < t1)
    t2++;
  c1 = (c1 + t2) & (0xffffffffffffffffLL);
  if ((c1) < t2)
    c2++;
  ;
  t1 = (((a)[5]) & (0xffffffffL));
  t2 = ((((a)[5]) >> 32) & (0xffffffffL));
  bl = (((a)[3]) & (0xffffffffL));
  bh = ((((a)[3]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c2++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c3 = (c3 + t1) & (0xffffffffffffffffLL);
  if ((c3 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c2++;
  c1 = (c1 + t2) & (0xffffffffffffffffLL);
  if ((c1) < t2)
    c2++;
  ;
  t1 = (((a)[6]) & (0xffffffffL));
  t2 = ((((a)[6]) >> 32) & (0xffffffffL));
  bl = (((a)[2]) & (0xffffffffL));
  bh = ((((a)[2]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c2++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c3 = (c3 + t1) & (0xffffffffffffffffLL);
  if ((c3 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c2++;
  c1 = (c1 + t2) & (0xffffffffffffffffLL);
  if ((c1) < t2)
    c2++;
  ;
  t1 = (((a)[7]) & (0xffffffffL));
  t2 = ((((a)[7]) >> 32) & (0xffffffffL));
  bl = (((a)[1]) & (0xffffffffL));
  bh = ((((a)[1]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c2++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c3 = (c3 + t1) & (0xffffffffffffffffLL);
  if ((c3 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c2++;
  c1 = (c1 + t2) & (0xffffffffffffffffLL);
  if ((c1) < t2)
    c2++;
  ;
  r[8] = c3;
  c3 = 0;
  t1 = (((a)[7]) & (0xffffffffL));
  t2 = ((((a)[7]) >> 32) & (0xffffffffL));
  bl = (((a)[2]) & (0xffffffffL));
  bh = ((((a)[2]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c3++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c1 = (c1 + t1) & (0xffffffffffffffffLL);
  if ((c1 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c3++;
  c2 = (c2 + t2) & (0xffffffffffffffffLL);
  if ((c2) < t2)
    c3++;
  ;
  t1 = (((a)[6]) & (0xffffffffL));
  t2 = ((((a)[6]) >> 32) & (0xffffffffL));
  bl = (((a)[3]) & (0xffffffffL));
  bh = ((((a)[3]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c3++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c1 = (c1 + t1) & (0xffffffffffffffffLL);
  if ((c1 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c3++;
  c2 = (c2 + t2) & (0xffffffffffffffffLL);
  if ((c2) < t2)
    c3++;
  ;
  t1 = (((a)[5]) & (0xffffffffL));
  t2 = ((((a)[5]) >> 32) & (0xffffffffL));
  bl = (((a)[4]) & (0xffffffffL));
  bh = ((((a)[4]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c3++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c1 = (c1 + t1) & (0xffffffffffffffffLL);
  if ((c1 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c3++;
  c2 = (c2 + t2) & (0xffffffffffffffffLL);
  if ((c2) < t2)
    c3++;
  ;
  r[9] = c1;
  c1 = 0;
  {
    unsigned long long l, h, m;
    h = ((a)[5]);
    l = ((h) & (0xffffffffL));
    h = (((h) >> 32) & (0xffffffffL));
    m = (l) * (h);
    l *= l;
    h *= h;
    h += (m & (0xffffffff80000000LL)) >> (32 - 1);
    m = (m & (0xffffffffL)) << (32 + 1);
    l = (l + m) & (0xffffffffffffffffLL);
    if (l < m)
      h++;
    (t1) = l;
    (t2) = h;
  };
  c2 = (c2 + t1) & (0xffffffffffffffffLL);
  if ((c2) < t1)
    t2++;
  c3 = (c3 + t2) & (0xffffffffffffffffLL);
  if ((c3) < t2)
    c1++;
  ;
  t1 = (((a)[6]) & (0xffffffffL));
  t2 = ((((a)[6]) >> 32) & (0xffffffffL));
  bl = (((a)[4]) & (0xffffffffL));
  bh = ((((a)[4]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c1++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c2 = (c2 + t1) & (0xffffffffffffffffLL);
  if ((c2 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c1++;
  c3 = (c3 + t2) & (0xffffffffffffffffLL);
  if ((c3) < t2)
    c1++;
  ;
  t1 = (((a)[7]) & (0xffffffffL));
  t2 = ((((a)[7]) >> 32) & (0xffffffffL));
  bl = (((a)[3]) & (0xffffffffL));
  bh = ((((a)[3]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c1++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c2 = (c2 + t1) & (0xffffffffffffffffLL);
  if ((c2 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c1++;
  c3 = (c3 + t2) & (0xffffffffffffffffLL);
  if ((c3) < t2)
    c1++;
  ;
  r[10] = c2;
  c2 = 0;
  t1 = (((a)[7]) & (0xffffffffL));
  t2 = ((((a)[7]) >> 32) & (0xffffffffL));
  bl = (((a)[4]) & (0xffffffffL));
  bh = ((((a)[4]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c2++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c3 = (c3 + t1) & (0xffffffffffffffffLL);
  if ((c3 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c2++;
  c1 = (c1 + t2) & (0xffffffffffffffffLL);
  if ((c1) < t2)
    c2++;
  ;
  t1 = (((a)[6]) & (0xffffffffL));
  t2 = ((((a)[6]) >> 32) & (0xffffffffL));
  bl = (((a)[5]) & (0xffffffffL));
  bh = ((((a)[5]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c2++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c3 = (c3 + t1) & (0xffffffffffffffffLL);
  if ((c3 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c2++;
  c1 = (c1 + t2) & (0xffffffffffffffffLL);
  if ((c1) < t2)
    c2++;
  ;
  r[11] = c3;
  c3 = 0;
  {
    unsigned long long l, h, m;
    h = ((a)[6]);
    l = ((h) & (0xffffffffL));
    h = (((h) >> 32) & (0xffffffffL));
    m = (l) * (h);
    l *= l;
    h *= h;
    h += (m & (0xffffffff80000000LL)) >> (32 - 1);
    m = (m & (0xffffffffL)) << (32 + 1);
    l = (l + m) & (0xffffffffffffffffLL);
    if (l < m)
      h++;
    (t1) = l;
    (t2) = h;
  };
  c1 = (c1 + t1) & (0xffffffffffffffffLL);
  if ((c1) < t1)
    t2++;
  c2 = (c2 + t2) & (0xffffffffffffffffLL);
  if ((c2) < t2)
    c3++;
  ;
  t1 = (((a)[7]) & (0xffffffffL));
  t2 = ((((a)[7]) >> 32) & (0xffffffffL));
  bl = (((a)[5]) & (0xffffffffL));
  bh = ((((a)[5]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c3++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c1 = (c1 + t1) & (0xffffffffffffffffLL);
  if ((c1 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c3++;
  c2 = (c2 + t2) & (0xffffffffffffffffLL);
  if ((c2) < t2)
    c3++;
  ;
  r[12] = c1;
  c1 = 0;
  t1 = (((a)[7]) & (0xffffffffL));
  t2 = ((((a)[7]) >> 32) & (0xffffffffL));
  bl = (((a)[6]) & (0xffffffffL));
  bh = ((((a)[6]) >> 32) & (0xffffffffL));
  {
    unsigned long long m, m1, lt, ht;
    lt = t1;
    ht = t2;
    m = (bh) * (lt);
    lt = (bl) * (lt);
    m1 = (bl) * (ht);
    ht = (bh) * (ht);
    m = (m + m1) & (0xffffffffffffffffLL);
    if (m < m1)
      ht += ((unsigned long long)((1L) & (0xffffffffL)) << 32);
    ht += (((m) >> 32) & (0xffffffffL));
    m1 = ((unsigned long long)((m) & (0xffffffffL)) << 32);
    lt = (lt + m1) & (0xffffffffffffffffLL);
    if (lt < m1)
      ht++;
    (t1) = lt;
    (t2) = ht;
  };
  if (t2 & (0x8000000000000000LL))
    c1++;
  t2 = (t2 + t2) & (0xffffffffffffffffLL);
  if (t1 & (0x8000000000000000LL))
    t2++;
  t1 = (t1 + t1) & (0xffffffffffffffffLL);
  c2 = (c2 + t1) & (0xffffffffffffffffLL);
  if ((c2 < t1) && (((++t2) & (0xffffffffffffffffLL)) == 0))
    c1++;
  c3 = (c3 + t2) & (0xffffffffffffffffLL);
  if ((c3) < t2)
    c1++;
  ;
  r[13] = c2;
  c2 = 0;
  {
    unsigned long long l, h, m;
    h = ((a)[7]);
    l = ((h) & (0xffffffffL));
    h = (((h) >> 32) & (0xffffffffL));
    m = (l) * (h);
    l *= l;
    h *= h;
    h += (m & (0xffffffff80000000LL)) >> (32 - 1);
    m = (m & (0xffffffffL)) << (32 + 1);
    l = (l + m) & (0xffffffffffffffffLL);
    if (l < m)
      h++;
    (t1) = l;
    (t2) = h;
  };
  c3 = (c3 + t1) & (0xffffffffffffffffLL);
  if ((c3) < t1)
    t2++;
  c1 = (c1 + t2) & (0xffffffffffffffffLL);
  if ((c1) < t2)
    c2++;
  ;
  r[14] = c3;
  r[15] = c1;
}
```