// File: ralgond[P]SortedListIntersection/algo_v3_avx2.cpp
// Function: v3_avx2_intersection(unsigned int const*, unsigned long, unsigned int const*, unsigned long, unsigned int*)
size_t v3_avx2_intersection(const uint32_t *freq, const size_t lenFreq, const uint32_t *rare, const size_t lenRare, uint32_t *out) {
  if (lenFreq == 0 || lenRare == 0)
    return 0;
  assert(lenRare <= lenFreq);
  const uint32_t *const initout(out);
  typedef __m128i vec;
  const uint32_t veclen = sizeof(vec) / sizeof(uint32_t);
  const size_t vecmax = veclen - 1;
  const size_t freqspace = 32 * veclen;
  const size_t rarespace = 1;

  const uint32_t *stopFreq = freq + lenFreq - freqspace;
  const uint32_t *stopRare = rare + lenRare - rarespace;
  if (freq > stopFreq) {
    return scalar(freq, lenFreq, rare, lenRare, out);
  }
  while (freq[veclen * 31 + vecmax] < *rare) {
    freq += veclen * 32;
    if (freq > stopFreq)
      goto FINISH_SCALAR;
  }
  for (; rare < stopRare; ++rare) {
    const uint32_t matchRare = *rare; // nextRare;
    const vec Match = _mm_set1_epi32(matchRare);
    while (freq[veclen * 31 + vecmax] < matchRare) { // if no match possible
      freq += veclen * 32;                           // advance 32 vectors
      if (freq > stopFreq)
        goto FINISH_SCALAR;
    }
    vec Q0, Q1, Q2, Q3;
    if (freq[veclen * 15 + vecmax] >= matchRare) {
      if (freq[veclen * 7 + vecmax] < matchRare) {
        Q0 = _mm_or_si128(
            _mm_cmpeq_epi32(
                _mm_loadu_si128(reinterpret_cast<const vec *>(freq) + 8),
                Match),
            _mm_cmpeq_epi32(
                _mm_loadu_si128(reinterpret_cast<const vec *>(freq) + 9),
                Match));
        Q1 = _mm_or_si128(
            _mm_cmpeq_epi32(
                _mm_loadu_si128(reinterpret_cast<const vec *>(freq) + 10),
                Match),
            _mm_cmpeq_epi32(
                _mm_loadu_si128(reinterpret_cast<const vec *>(freq) + 11),
                Match));

        Q2 = _mm_or_si128(
            _mm_cmpeq_epi32(
                _mm_loadu_si128(reinterpret_cast<const vec *>(freq) + 12),
                Match),
            _mm_cmpeq_epi32(
                _mm_loadu_si128(reinterpret_cast<const vec *>(freq) + 13),
                Match));
        Q3 = _mm_or_si128(
            _mm_cmpeq_epi32(
                _mm_loadu_si128(reinterpret_cast<const vec *>(freq) + 14),
                Match),
            _mm_cmpeq_epi32(
                _mm_loadu_si128(reinterpret_cast<const vec *>(freq) + 15),
                Match));
      } else {
        Q0 = _mm_or_si128(
            _mm_cmpeq_epi32(
                _mm_loadu_si128(reinterpret_cast<const vec *>(freq) + 4),
                Match),
            _mm_cmpeq_epi32(
                _mm_loadu_si128(reinterpret_cast<const vec *>(freq) + 5),
                Match));
        Q1 = _mm_or_si128(
            _mm_cmpeq_epi32(
                _mm_loadu_si128(reinterpret_cast<const vec *>(freq) + 6),
                Match),
            _mm_cmpeq_epi32(
                _mm_loadu_si128(reinterpret_cast<const vec *>(freq) + 7),
                Match));
        Q2 = _mm_or_si128(
            _mm_cmpeq_epi32(
                _mm_loadu_si128(reinterpret_cast<const vec *>(freq) + 0),
                Match),
            _mm_cmpeq_epi32(
                _mm_loadu_si128(reinterpret_cast<const vec *>(freq) + 1),
                Match));
        Q3 = _mm_or_si128(
            _mm_cmpeq_epi32(
                _mm_loadu_si128(reinterpret_cast<const vec *>(freq) + 2),
                Match),
            _mm_cmpeq_epi32(
                _mm_loadu_si128(reinterpret_cast<const vec *>(freq) + 3),
                Match));
      }
    } else {
      if (freq[veclen * 23 + vecmax] < matchRare) {
        Q0 = _mm_or_si128(
            _mm_cmpeq_epi32(
                _mm_loadu_si128(reinterpret_cast<const vec *>(freq) + 8 + 16),
                Match),
            _mm_cmpeq_epi32(
                _mm_loadu_si128(reinterpret_cast<const vec *>(freq) + 9 + 16),
                Match));
        Q1 = _mm_or_si128(
            _mm_cmpeq_epi32(
                _mm_loadu_si128(reinterpret_cast<const vec *>(freq) + 10 + 16),
                Match),
            _mm_cmpeq_epi32(
                _mm_loadu_si128(reinterpret_cast<const vec *>(freq) + 11 + 16),
                Match));

        Q2 = _mm_or_si128(
            _mm_cmpeq_epi32(
                _mm_loadu_si128(reinterpret_cast<const vec *>(freq) + 12 + 16),
                Match),
            _mm_cmpeq_epi32(
                _mm_loadu_si128(reinterpret_cast<const vec *>(freq) + 13 + 16),
                Match));
        Q3 = _mm_or_si128(
            _mm_cmpeq_epi32(
                _mm_loadu_si128(reinterpret_cast<const vec *>(freq) + 14 + 16),
                Match),
            _mm_cmpeq_epi32(
                _mm_loadu_si128(reinterpret_cast<const vec *>(freq) + 15 + 16),
                Match));
      } else {
        Q0 = _mm_or_si128(
            _mm_cmpeq_epi32(
                _mm_loadu_si128(reinterpret_cast<const vec *>(freq) + 4 + 16),
                Match),
            _mm_cmpeq_epi32(
                _mm_loadu_si128(reinterpret_cast<const vec *>(freq) + 5 + 16),
                Match));
        Q1 = _mm_or_si128(
            _mm_cmpeq_epi32(
                _mm_loadu_si128(reinterpret_cast<const vec *>(freq) + 6 + 16),
                Match),
            _mm_cmpeq_epi32(
                _mm_loadu_si128(reinterpret_cast<const vec *>(freq) + 7 + 16),
                Match));
        Q2 = _mm_or_si128(
            _mm_cmpeq_epi32(
                _mm_loadu_si128(reinterpret_cast<const vec *>(freq) + 0 + 16),
                Match),
            _mm_cmpeq_epi32(
                _mm_loadu_si128(reinterpret_cast<const vec *>(freq) + 1 + 16),
                Match));
        Q3 = _mm_or_si128(
            _mm_cmpeq_epi32(
                _mm_loadu_si128(reinterpret_cast<const vec *>(freq) + 2 + 16),
                Match),
            _mm_cmpeq_epi32(
                _mm_loadu_si128(reinterpret_cast<const vec *>(freq) + 3 + 16),
                Match));
      }
    }
    const vec F0 = _mm_or_si128(_mm_or_si128(Q0, Q1), _mm_or_si128(Q2, Q3));
#ifdef __SSE4_1__
    if (_mm_testz_si128(F0, F0)) {
#else
    if (!_mm_movemask_epi8(F0)) {
#endif
    } else {
      *out++ = matchRare;
    }
  }

FINISH_SCALAR:
  return (out - initout) + scalar(freq, stopFreq + freqspace - freq, rare,
                                  stopRare + rarespace - rare, out);
}

// Assembly:
subq $0x898, %rsp            # imm = 0x898
movq %rdi, 0xd8(%rsp)
movq %rsi, 0xd0(%rsp)
movq %rdx, 0xc8(%rsp)
movq %rcx, 0xc0(%rsp)
movq %r8, 0xb8(%rsp)
cmpq $0x0, 0xd0(%rsp)
je 0xb195
cmpq $0x0, 0xc0(%rsp)
jne 0xb1a6
movq $0x0, 0xe0(%rsp)
jmp 0xc291
movq 0xc0(%rsp), %rax
cmpq 0xd0(%rsp), %rax
ja 0xb1ba
jmp 0xb1d9
leaq 0x3494(%rip), %rdi      # 0xe655
leaq 0x350d(%rip), %rsi      # 0xe6d5
movl $0x14, %edx
leaq 0x3512(%rip), %rcx      # 0xe6e6
callq 0x2120
movq 0xb8(%rsp), %rax
movq %rax, 0xb0(%rsp)
movl $0x4, 0xac(%rsp)
movq $0x3, 0xa0(%rsp)
movq $0x80, 0x98(%rsp)
movq $0x1, 0x90(%rsp)
movq 0xd8(%rsp), %rax
movq 0xd0(%rsp), %rcx
shlq $0x2, %rcx
addq %rcx, %rax
addq $-0x200, %rax           # imm = 0xFE00
movq %rax, 0x88(%rsp)
movq 0xc8(%rsp), %rax
movq 0xc0(%rsp), %rcx
shlq $0x2, %rcx
addq %rcx, %rax
addq $-0x4, %rax
movq %rax, 0x80(%rsp)
movq 0xd8(%rsp), %rax
cmpq 0x88(%rsp), %rax
jbe 0xb2ac
movq 0xd8(%rsp), %rdi
movq 0xd0(%rsp), %rsi
movq 0xc8(%rsp), %rdx
movq 0xc0(%rsp), %rcx
movq 0xb8(%rsp), %r8
callq 0xa8e0
movq %rax, 0xe0(%rsp)
jmp 0xc291
jmp 0xb2ae
movq 0xd8(%rsp), %rax
movl 0x1fc(%rax), %eax
movq 0xc8(%rsp), %rcx
cmpl (%rcx), %eax
jae 0xb2f7
movq 0xd8(%rsp), %rax
addq $0x200, %rax            # imm = 0x200
movq %rax, 0xd8(%rsp)
movq 0xd8(%rsp), %rax
cmpq 0x88(%rsp), %rax
jbe 0xb2f5
jmp 0xc20c
jmp 0xb2ae
jmp 0xb2f9
movq 0xc8(%rsp), %rax
cmpq 0x80(%rsp), %rax
jae 0xc20a
movq 0xc8(%rsp), %rax
movl (%rax), %eax
movl %eax, 0x7c(%rsp)
movl 0x7c(%rsp), %eax
movl %eax, 0xec(%rsp)
movl 0xec(%rsp), %eax
movl %eax, 0x894(%rsp)
movl %eax, 0x890(%rsp)
movl %eax, 0x88c(%rsp)
movl %eax, 0x888(%rsp)
movl 0x88c(%rsp), %edx
movl 0x890(%rsp), %ecx
movl 0x894(%rsp), %eax
vmovd 0x888(%rsp), %xmm0
vpinsrd $0x1, %edx, %xmm0, %xmm0
vpinsrd $0x2, %ecx, %xmm0, %xmm0
vpinsrd $0x3, %eax, %xmm0, %xmm0
vmovdqa %xmm0, 0x870(%rsp)
vmovdqa 0x870(%rsp), %xmm0
vmovdqa %xmm0, 0x60(%rsp)
movq 0xd8(%rsp), %rax
movl 0x1fc(%rax), %eax
cmpl 0x7c(%rsp), %eax
jae 0xb3d6
movq 0xd8(%rsp), %rax
addq $0x200, %rax            # imm = 0x200
movq %rax, 0xd8(%rsp)
movq 0xd8(%rsp), %rax
cmpq 0x88(%rsp), %rax
jbe 0xb3d4
jmp 0xc20c
jmp 0xb393
movq 0xd8(%rsp), %rax
movl 0xfc(%rax), %eax
cmpl 0x7c(%rsp), %eax
jb 0xba6f
movq 0xd8(%rsp), %rax
movl 0x7c(%rax), %eax
cmpl 0x7c(%rsp), %eax
jae 0xb742
movq 0xd8(%rsp), %rax
subq $-0x80, %rax
movq %rax, 0x848(%rsp)
movq 0x848(%rsp), %rax
vmovdqu (%rax), %xmm1
vmovdqa 0x60(%rsp), %xmm0
vmovdqa %xmm1, 0x740(%rsp)
vmovdqa %xmm0, 0x730(%rsp)
vmovdqa 0x740(%rsp), %xmm0
vmovdqa 0x730(%rsp), %xmm1
vpcmpeqd %xmm1, %xmm0, %xmm1
movq 0xd8(%rsp), %rax
addq $0x90, %rax
movq %rax, 0x840(%rsp)
movq 0x840(%rsp), %rax
vmovdqu (%rax), %xmm2
vmovdqa 0x60(%rsp), %xmm0
vmovdqa %xmm2, 0x720(%rsp)
vmovdqa %xmm0, 0x710(%rsp)
vmovdqa 0x720(%rsp), %xmm0
vmovdqa 0x710(%rsp), %xmm2
vpcmpeqd %xmm2, %xmm0, %xmm0
vmovdqa %xmm1, 0x340(%rsp)
vmovdqa %xmm0, 0x330(%rsp)
vmovdqa 0x340(%rsp), %xmm0
vmovdqa 0x330(%rsp), %xmm1
vpor %xmm1, %xmm0, %xmm0
vmovdqa %xmm0, 0x50(%rsp)
movq 0xd8(%rsp), %rax
addq $0xa0, %rax
movq %rax, 0x838(%rsp)
movq 0x838(%rsp), %rax
vmovdqu (%rax), %xmm1
vmovdqa 0x60(%rsp), %xmm0
vmovdqa %xmm1, 0x700(%rsp)
vmovdqa %xmm0, 0x6f0(%rsp)
vmovdqa 0x700(%rsp), %xmm0
vmovdqa 0x6f0(%rsp), %xmm1
vpcmpeqd %xmm1, %xmm0, %xmm1
movq 0xd8(%rsp), %rax
addq $0xb0, %rax
movq %rax, 0x830(%rsp)
movq 0x830(%rsp), %rax
vmovdqu (%rax), %xmm2
vmovdqa 0x60(%rsp), %xmm0
vmovdqa %xmm2, 0x6e0(%rsp)
vmovdqa %xmm0, 0x6d0(%rsp)
vmovdqa 0x6e0(%rsp), %xmm0
vmovdqa 0x6d0(%rsp), %xmm2
vpcmpeqd %xmm2, %xmm0, %xmm0
vmovdqa %xmm1, 0x320(%rsp)
vmovdqa %xmm0, 0x310(%rsp)
vmovdqa 0x320(%rsp), %xmm0
vmovdqa 0x310(%rsp), %xmm1
vpor %xmm1, %xmm0, %xmm0
vmovdqa %xmm0, 0x40(%rsp)
movq 0xd8(%rsp), %rax
addq $0xc0, %rax
movq %rax, 0x828(%rsp)
movq 0x828(%rsp), %rax
vmovdqu (%rax), %xmm1
vmovdqa 0x60(%rsp), %xmm0
vmovdqa %xmm1, 0x6c0(%rsp)
vmovdqa %xmm0, 0x6b0(%rsp)
vmovdqa 0x6c0(%rsp), %xmm0
vmovdqa 0x6b0(%rsp), %xmm1
vpcmpeqd %xmm1, %xmm0, %xmm1
movq 0xd8(%rsp), %rax
addq $0xd0, %rax
movq %rax, 0x820(%rsp)
movq 0x820(%rsp), %rax
vmovdqu (%rax), %xmm2
vmovdqa 0x60(%rsp), %xmm0
vmovdqa %xmm2, 0x6a0(%rsp)
vmovdqa %xmm0, 0x690(%rsp)
vmovdqa 0x6a0(%rsp), %xmm0
vmovdqa 0x690(%rsp), %xmm2
vpcmpeqd %xmm2, %xmm0, %xmm0
vmovdqa %xmm1, 0x300(%rsp)
vmovdqa %xmm0, 0x2f0(%rsp)
vmovdqa 0x300(%rsp), %xmm0
vmovdqa 0x2f0(%rsp), %xmm1
vpor %xmm1, %xmm0, %xmm0
vmovdqa %xmm0, 0x30(%rsp)
movq 0xd8(%rsp), %rax
addq $0xe0, %rax
movq %rax, 0x818(%rsp)
movq 0x818(%rsp), %rax
vmovdqu (%rax), %xmm1
vmovdqa 0x60(%rsp), %xmm0
vmovdqa %xmm1, 0x680(%rsp)
vmovdqa %xmm0, 0x670(%rsp)
vmovdqa 0x680(%rsp), %xmm0
vmovdqa 0x670(%rsp), %xmm1
vpcmpeqd %xmm1, %xmm0, %xmm1
movq 0xd8(%rsp), %rax
addq $0xf0, %rax
movq %rax, 0x810(%rsp)
movq 0x810(%rsp), %rax
vmovdqu (%rax), %xmm2
vmovdqa 0x60(%rsp), %xmm0
vmovdqa %xmm2, 0x660(%rsp)
vmovdqa %xmm0, 0x650(%rsp)
vmovdqa 0x660(%rsp), %xmm0
vmovdqa 0x650(%rsp), %xmm2
vpcmpeqd %xmm2, %xmm0, %k0
vpmovm2d %k0, %xmm0
vmovdqa %xmm1, 0x2e0(%rsp)
vmovdqa %xmm0, 0x2d0(%rsp)
vmovdqa 0x2e0(%rsp), %xmm0
vpor 0x2d0(%rsp), %xmm0, %xmm0
vmovdqa %xmm0, 0x20(%rsp)
jmp 0xba6a
movq 0xd8(%rsp), %rax
addq $0x40, %rax
movq %rax, 0x808(%rsp)
movq 0x808(%rsp), %rax
vmovdqu (%rax), %xmm1
vmovdqa 0x60(%rsp), %xmm0
vmovdqa %xmm1, 0x640(%rsp)
vmovdqa %xmm0, 0x630(%rsp)
vmovdqa 0x640(%rsp), %xmm0
vmovdqa 0x630(%rsp), %xmm1
vpcmpeqd %xmm1, %xmm0, %xmm1
movq 0xd8(%rsp), %rax
addq $0x50, %rax
movq %rax, 0x800(%rsp)
movq 0x800(%rsp), %rax
vmovdqu (%rax), %xmm2
vmovdqa 0x60(%rsp), %xmm0
vmovdqa %xmm2, 0x620(%rsp)
vmovdqa %xmm0, 0x610(%rsp)
vmovdqa 0x620(%rsp), %xmm0
vmovdqa 0x610(%rsp), %xmm2
vpcmpeqd %xmm2, %xmm0, %xmm0
vmovdqa %xmm1, 0x2c0(%rsp)
vmovdqa %xmm0, 0x2b0(%rsp)
vmovdqa 0x2c0(%rsp), %xmm0
vmovdqa 0x2b0(%rsp), %xmm1
vpor %xmm1, %xmm0, %xmm0
vmovdqa %xmm0, 0x50(%rsp)
movq 0xd8(%rsp), %rax
addq $0x60, %rax
movq %rax, 0x7f8(%rsp)
movq 0x7f8(%rsp), %rax
vmovdqu (%rax), %xmm1
vmovdqa 0x60(%rsp), %xmm0
vmovdqa %xmm1, 0x600(%rsp)
vmovdqa %xmm0, 0x5f0(%rsp)
vmovdqa 0x600(%rsp), %xmm0
vmovdqa 0x5f0(%rsp), %xmm1
vpcmpeqd %xmm1, %xmm0, %xmm1
movq 0xd8(%rsp), %rax
addq $0x70, %rax
movq %rax, 0x7f0(%rsp)
movq 0x7f0(%rsp), %rax
vmovdqu (%rax), %xmm2
vmovdqa 0x60(%rsp), %xmm0
vmovdqa %xmm2, 0x5e0(%rsp)
vmovdqa %xmm0, 0x5d0(%rsp)
vmovdqa 0x5e0(%rsp), %xmm0
vmovdqa 0x5d0(%rsp), %xmm2
vpcmpeqd %xmm2, %xmm0, %xmm0
vmovdqa %xmm1, 0x2a0(%rsp)
vmovdqa %xmm0, 0x290(%rsp)
vmovdqa 0x2a0(%rsp), %xmm0
vmovdqa 0x290(%rsp), %xmm1
vpor %xmm1, %xmm0, %xmm0
vmovdqa %xmm0, 0x40(%rsp)
movq 0xd8(%rsp), %rax
movq %rax, 0x7e8(%rsp)
movq 0x7e8(%rsp), %rax
vmovdqu (%rax), %xmm1
vmovdqa 0x60(%rsp), %xmm0
vmovdqa %xmm1, 0x5c0(%rsp)
vmovdqa %xmm0, 0x5b0(%rsp)
vmovdqa 0x5c0(%rsp), %xmm0
vmovdqa 0x5b0(%rsp), %xmm1
vpcmpeqd %xmm1, %xmm0, %xmm1
movq 0xd8(%rsp), %rax
addq $0x10, %rax
movq %rax, 0x7e0(%rsp)
movq 0x7e0(%rsp), %rax
vmovdqu (%rax), %xmm2
vmovdqa 0x60(%rsp), %xmm0
vmovdqa %xmm2, 0x5a0(%rsp)
vmovdqa %xmm0, 0x590(%rsp)
vmovdqa 0x5a0(%rsp), %xmm0
vmovdqa 0x590(%rsp), %xmm2
vpcmpeqd %xmm2, %xmm0, %xmm0
vmovdqa %xmm1, 0x280(%rsp)
vmovdqa %xmm0, 0x270(%rsp)
vmovdqa 0x280(%rsp), %xmm0
vmovdqa 0x270(%rsp), %xmm1
vpor %xmm1, %xmm0, %xmm0
vmovdqa %xmm0, 0x30(%rsp)
movq 0xd8(%rsp), %rax
addq $0x20, %rax
movq %rax, 0x7d8(%rsp)
movq 0x7d8(%rsp), %rax
vmovdqu (%rax), %xmm1
vmovdqa 0x60(%rsp), %xmm0
vmovdqa %xmm1, 0x580(%rsp)
vmovdqa %xmm0, 0x570(%rsp)
vmovdqa 0x580(%rsp), %xmm0
vmovdqa 0x570(%rsp), %xmm1
vpcmpeqd %xmm1, %xmm0, %xmm1
movq 0xd8(%rsp), %rax
addq $0x30, %rax
movq %rax, 0x7d0(%rsp)
movq 0x7d0(%rsp), %rax
vmovdqu (%rax), %xmm2
vmovdqa 0x60(%rsp), %xmm0
vmovdqa %xmm2, 0x560(%rsp)
vmovdqa %xmm0, 0x550(%rsp)
vmovdqa 0x560(%rsp), %xmm0
vmovdqa 0x550(%rsp), %xmm2
vpcmpeqd %xmm2, %xmm0, %k0
vpmovm2d %k0, %xmm0
vmovdqa %xmm1, 0x260(%rsp)
vmovdqa %xmm0, 0x250(%rsp)
vmovdqa 0x260(%rsp), %xmm0
vpor 0x250(%rsp), %xmm0, %xmm0
vmovdqa %xmm0, 0x20(%rsp)
jmp 0xc106
movq 0xd8(%rsp), %rax
movl 0x17c(%rax), %eax
cmpl 0x7c(%rsp), %eax
jae 0xbdc8
movq 0xd8(%rsp), %rax
addq $0x180, %rax            # imm = 0x180
movq %rax, 0x7c8(%rsp)
movq 0x7c8(%rsp), %rax
vmovdqu (%rax), %xmm1
vmovdqa 0x60(%rsp), %xmm0
vmovdqa %xmm1, 0x540(%rsp)
vmovdqa %xmm0, 0x530(%rsp)
vmovdqa 0x540(%rsp), %xmm0
vmovdqa 0x530(%rsp), %xmm1
vpcmpeqd %xmm1, %xmm0, %xmm1
movq 0xd8(%rsp), %rax
addq $0x190, %rax            # imm = 0x190
movq %rax, 0x7c0(%rsp)
movq 0x7c0(%rsp), %rax
vmovdqu (%rax), %xmm2
vmovdqa 0x60(%rsp), %xmm0
vmovdqa %xmm2, 0x520(%rsp)
vmovdqa %xmm0, 0x510(%rsp)
vmovdqa 0x520(%rsp), %xmm0
vmovdqa 0x510(%rsp), %xmm2
vpcmpeqd %xmm2, %xmm0, %xmm0
vmovdqa %xmm1, 0x240(%rsp)
vmovdqa %xmm0, 0x230(%rsp)
vmovdqa 0x240(%rsp), %xmm0
vmovdqa 0x230(%rsp), %xmm1
vpor %xmm1, %xmm0, %xmm0
vmovdqa %xmm0, 0x50(%rsp)
movq 0xd8(%rsp), %rax
addq $0x1a0, %rax            # imm = 0x1A0
movq %rax, 0x7b8(%rsp)
movq 0x7b8(%rsp), %rax
vmovdqu (%rax), %xmm1
vmovdqa 0x60(%rsp), %xmm0
vmovdqa %xmm1, 0x500(%rsp)
vmovdqa %xmm0, 0x4f0(%rsp)
vmovdqa 0x500(%rsp), %xmm0
vmovdqa 0x4f0(%rsp), %xmm1
vpcmpeqd %xmm1, %xmm0, %xmm1
movq 0xd8(%rsp), %rax
addq $0x1b0, %rax            # imm = 0x1B0
movq %rax, 0x7b0(%rsp)
movq 0x7b0(%rsp), %rax
vmovdqu (%rax), %xmm2
vmovdqa 0x60(%rsp), %xmm0
vmovdqa %xmm2, 0x4e0(%rsp)
vmovdqa %xmm0, 0x4d0(%rsp)
vmovdqa 0x4e0(%rsp), %xmm0
vmovdqa 0x4d0(%rsp), %xmm2
vpcmpeqd %xmm2, %xmm0, %xmm0
vmovdqa %xmm1, 0x220(%rsp)
vmovdqa %xmm0, 0x210(%rsp)
vmovdqa 0x220(%rsp), %xmm0
vmovdqa 0x210(%rsp), %xmm1
vpor %xmm1, %xmm0, %xmm0
vmovdqa %xmm0, 0x40(%rsp)
movq 0xd8(%rsp), %rax
addq $0x1c0, %rax            # imm = 0x1C0
movq %rax, 0x7a8(%rsp)
movq 0x7a8(%rsp), %rax
vmovdqu (%rax), %xmm1
vmovdqa 0x60(%rsp), %xmm0
vmovdqa %xmm1, 0x4c0(%rsp)
vmovdqa %xmm0, 0x4b0(%rsp)
vmovdqa 0x4c0(%rsp), %xmm0
vmovdqa 0x4b0(%rsp), %xmm1
vpcmpeqd %xmm1, %xmm0, %xmm1
movq 0xd8(%rsp), %rax
addq $0x1d0, %rax            # imm = 0x1D0
movq %rax, 0x7a0(%rsp)
movq 0x7a0(%rsp), %rax
vmovdqu (%rax), %xmm2
vmovdqa 0x60(%rsp), %xmm0
vmovdqa %xmm2, 0x4a0(%rsp)
vmovdqa %xmm0, 0x490(%rsp)
vmovdqa 0x4a0(%rsp), %xmm0
vmovdqa 0x490(%rsp), %xmm2
vpcmpeqd %xmm2, %xmm0, %xmm0
vmovdqa %xmm1, 0x200(%rsp)
vmovdqa %xmm0, 0x1f0(%rsp)
vmovdqa 0x200(%rsp), %xmm0
vmovdqa 0x1f0(%rsp), %xmm1
vpor %xmm1, %xmm0, %xmm0
vmovdqa %xmm0, 0x30(%rsp)
movq 0xd8(%rsp), %rax
addq $0x1e0, %rax            # imm = 0x1E0
movq %rax, 0x798(%rsp)
movq 0x798(%rsp), %rax
vmovdqu (%rax), %xmm1
vmovdqa 0x60(%rsp), %xmm0
vmovdqa %xmm1, 0x480(%rsp)
vmovdqa %xmm0, 0x470(%rsp)
vmovdqa 0x480(%rsp), %xmm0
vmovdqa 0x470(%rsp), %xmm1
vpcmpeqd %xmm1, %xmm0, %xmm1
movq 0xd8(%rsp), %rax
addq $0x1f0, %rax            # imm = 0x1F0
movq %rax, 0x790(%rsp)
movq 0x790(%rsp), %rax
vmovdqu (%rax), %xmm2
vmovdqa 0x60(%rsp), %xmm0
vmovdqa %xmm2, 0x460(%rsp)
vmovdqa %xmm0, 0x450(%rsp)
vmovdqa 0x460(%rsp), %xmm0
vmovdqa 0x450(%rsp), %xmm2
vpcmpeqd %xmm2, %xmm0, %k0
vpmovm2d %k0, %xmm0
vmovdqa %xmm1, 0x1e0(%rsp)
vmovdqa %xmm0, 0x1d0(%rsp)
vmovdqa 0x1e0(%rsp), %xmm0
vpor 0x1d0(%rsp), %xmm0, %xmm0
vmovdqa %xmm0, 0x20(%rsp)
jmp 0xc104
movq 0xd8(%rsp), %rax
addq $0x140, %rax            # imm = 0x140
movq %rax, 0x788(%rsp)
movq 0x788(%rsp), %rax
vmovdqu (%rax), %xmm1
vmovdqa 0x60(%rsp), %xmm0
vmovdqa %xmm1, 0x440(%rsp)
vmovdqa %xmm0, 0x430(%rsp)
vmovdqa 0x440(%rsp), %xmm0
vmovdqa 0x430(%rsp), %xmm1
vpcmpeqd %xmm1, %xmm0, %xmm1
movq 0xd8(%rsp), %rax
addq $0x150, %rax            # imm = 0x150
movq %rax, 0x780(%rsp)
movq 0x780(%rsp), %rax
vmovdqu (%rax), %xmm2
vmovdqa 0x60(%rsp), %xmm0
vmovdqa %xmm2, 0x420(%rsp)
vmovdqa %xmm0, 0x410(%rsp)
vmovdqa 0x420(%rsp), %xmm0
vmovdqa 0x410(%rsp), %xmm2
vpcmpeqd %xmm2, %xmm0, %xmm0
vmovdqa %xmm1, 0x1c0(%rsp)
vmovdqa %xmm0, 0x1b0(%rsp)
vmovdqa 0x1c0(%rsp), %xmm0
vmovdqa 0x1b0(%rsp), %xmm1
vpor %xmm1, %xmm0, %xmm0
vmovdqa %xmm0, 0x50(%rsp)
movq 0xd8(%rsp), %rax
addq $0x160, %rax            # imm = 0x160
movq %rax, 0x778(%rsp)
movq 0x778(%rsp), %rax
vmovdqu (%rax), %xmm1
vmovdqa 0x60(%rsp), %xmm0
vmovdqa %xmm1, 0x400(%rsp)
vmovdqa %xmm0, 0x3f0(%rsp)
vmovdqa 0x400(%rsp), %xmm0
vmovdqa 0x3f0(%rsp), %xmm1
vpcmpeqd %xmm1, %xmm0, %xmm1
movq 0xd8(%rsp), %rax
addq $0x170, %rax            # imm = 0x170
movq %rax, 0x770(%rsp)
movq 0x770(%rsp), %rax
vmovdqu (%rax), %xmm2
vmovdqa 0x60(%rsp), %xmm0
vmovdqa %xmm2, 0x3e0(%rsp)
vmovdqa %xmm0, 0x3d0(%rsp)
vmovdqa 0x3e0(%rsp), %xmm0
vmovdqa 0x3d0(%rsp), %xmm2
vpcmpeqd %xmm2, %xmm0, %xmm0
vmovdqa %xmm1, 0x1a0(%rsp)
vmovdqa %xmm0, 0x190(%rsp)
vmovdqa 0x1a0(%rsp), %xmm0
vmovdqa 0x190(%rsp), %xmm1
vpor %xmm1, %xmm0, %xmm0
vmovdqa %xmm0, 0x40(%rsp)
movq 0xd8(%rsp), %rax
addq $0x100, %rax            # imm = 0x100
movq %rax, 0x768(%rsp)
movq 0x768(%rsp), %rax
vmovdqu (%rax), %xmm1
vmovdqa 0x60(%rsp), %xmm0
vmovdqa %xmm1, 0x3c0(%rsp)
vmovdqa %xmm0, 0x3b0(%rsp)
vmovdqa 0x3c0(%rsp), %xmm0
vmovdqa 0x3b0(%rsp), %xmm1
vpcmpeqd %xmm1, %xmm0, %xmm1
movq 0xd8(%rsp), %rax
addq $0x110, %rax            # imm = 0x110
movq %rax, 0x760(%rsp)
movq 0x760(%rsp), %rax
vmovdqu (%rax), %xmm2
vmovdqa 0x60(%rsp), %xmm0
vmovdqa %xmm2, 0x3a0(%rsp)
vmovdqa %xmm0, 0x390(%rsp)
vmovdqa 0x3a0(%rsp), %xmm0
vmovdqa 0x390(%rsp), %xmm2
vpcmpeqd %xmm2, %xmm0, %xmm0
vmovdqa %xmm1, 0x180(%rsp)
vmovdqa %xmm0, 0x170(%rsp)
vmovdqa 0x180(%rsp), %xmm0
vmovdqa 0x170(%rsp), %xmm1
vpor %xmm1, %xmm0, %xmm0
vmovdqa %xmm0, 0x30(%rsp)
movq 0xd8(%rsp), %rax
addq $0x120, %rax            # imm = 0x120
movq %rax, 0x758(%rsp)
movq 0x758(%rsp), %rax
vmovdqu (%rax), %xmm1
vmovdqa 0x60(%rsp), %xmm0
vmovdqa %xmm1, 0x380(%rsp)
vmovdqa %xmm0, 0x370(%rsp)
vmovdqa 0x380(%rsp), %xmm0
vmovdqa 0x370(%rsp), %xmm1
vpcmpeqd %xmm1, %xmm0, %xmm1
movq 0xd8(%rsp), %rax
addq $0x130, %rax            # imm = 0x130
movq %rax, 0x750(%rsp)
movq 0x750(%rsp), %rax
vmovdqu (%rax), %xmm2
vmovdqa 0x60(%rsp), %xmm0
vmovdqa %xmm2, 0x360(%rsp)
vmovdqa %xmm0, 0x350(%rsp)
vmovdqa 0x360(%rsp), %xmm0
vmovdqa 0x350(%rsp), %xmm2
vpcmpeqd %xmm2, %xmm0, %k0
vpmovm2d %k0, %xmm0
vmovdqa %xmm1, 0x160(%rsp)
vmovdqa %xmm0, 0x150(%rsp)
vmovdqa 0x160(%rsp), %xmm0
vpor 0x150(%rsp), %xmm0, %xmm0
vmovdqa %xmm0, 0x20(%rsp)
jmp 0xc106
vmovdqa 0x50(%rsp), %xmm1
vmovdqa 0x40(%rsp), %xmm0
vmovdqa %xmm1, 0x140(%rsp)
vmovdqa %xmm0, 0x130(%rsp)
vmovdqa 0x140(%rsp), %xmm0
vpor 0x130(%rsp), %xmm0, %xmm1
vmovdqa 0x30(%rsp), %xmm2
vmovdqa 0x20(%rsp), %xmm0
vmovdqa %xmm2, 0x120(%rsp)
vmovdqa %xmm0, 0x110(%rsp)
vmovdqa 0x120(%rsp), %xmm0
vpor 0x110(%rsp), %xmm0, %xmm0
vmovdqa %xmm1, 0x100(%rsp)
vmovdqa %xmm0, 0xf0(%rsp)
vmovdqa 0x100(%rsp), %xmm0
vpor 0xf0(%rsp), %xmm0, %xmm0
vmovdqa %xmm0, 0x10(%rsp)
vmovdqa 0x10(%rsp), %xmm1
vmovdqa 0x10(%rsp), %xmm0
vmovdqa %xmm1, 0x860(%rsp)
vmovdqa %xmm0, 0x850(%rsp)
vmovdqa 0x860(%rsp), %xmm0
vmovdqa 0x850(%rsp), %xmm1
vptest %xmm1, %xmm0
sete %al
movzbl %al, %eax
cmpl $0x0, %eax
je 0xc1d2
jmp 0xc1ef
movl 0x7c(%rsp), %ecx
movq 0xb8(%rsp), %rax
movq %rax, %rdx
addq $0x4, %rdx
movq %rdx, 0xb8(%rsp)
movl %ecx, (%rax)
jmp 0xc1f1
movq 0xc8(%rsp), %rax
addq $0x4, %rax
movq %rax, 0xc8(%rsp)
jmp 0xb2f9
jmp 0xc20c
movq 0xb8(%rsp), %rax
movq 0xb0(%rsp), %rcx
subq %rcx, %rax
sarq $0x2, %rax
movq %rax, 0x8(%rsp)
movq 0xd8(%rsp), %rdi
movq 0x88(%rsp), %rsi
addq $0x200, %rsi            # imm = 0x200
movq 0xd8(%rsp), %rax
subq %rax, %rsi
sarq $0x2, %rsi
movq 0xc8(%rsp), %rdx
movq 0x80(%rsp), %rcx
addq $0x4, %rcx
movq 0xc8(%rsp), %rax
subq %rax, %rcx
sarq $0x2, %rcx
movq 0xb8(%rsp), %r8
callq 0xa8e0
movq %rax, %rcx
movq 0x8(%rsp), %rax
addq %rcx, %rax
movq %rax, 0xe0(%rsp)
movq 0xe0(%rsp), %rax
addq $0x898, %rsp            # imm = 0x898
retq
nopw %cs:(%rax,%rax)
nopl (%rax,%rax)