// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/match/sfx-sain.c
// Function: gt_sain_rec_sortsuffixes
static void gt_sain_rec_sortsuffixes(unsigned int level,
                                     GtSainseq *sainseq,
                                     GtUsainindextype *suftab,
                                     GtUsainindextype firstusable,
                                     GtUword nonspecialentries,
                                     GtUword suftabentries,
                                     bool intermediatecheck,
                                     bool finalcheck,
                                     GtLogger *logger,
                                     GtTimer *timer)
{
  GtUword countSstartype;

  GT_SAIN_SHOWTIMER("insert Sstar suffixes");
  countSstartype = gt_sain_insertSstarsuffixes(sainseq,suftab,logger);
  gt_logger_log(logger,"level %u: sort sequence of length "GT_WU" over "
                       ""GT_WU" symbols (%.2f)",
          level,sainseq->totallength,sainseq->numofchars,
          (double) sainseq->numofchars/sainseq->totallength);
  gt_logger_log(logger,"Sstar-type: "GT_WU" (%.2f)",countSstartype,
                 (double) countSstartype/sainseq->totallength);
  if (countSstartype > 0)
  {
    GtUword numberofnames;

    if (sainseq->roundtable != NULL)
    {
      gt_sain_incrementfirstSstar(sainseq,suftab);
    }
    gt_sain_startbuckets(sainseq);
    GT_SAIN_SHOWTIMER(sainseq->roundtable == NULL
                      ? "induce L suffixes" : "fast induce L suffixes");
    gt_sain_induceLtypesuffixes1(sainseq,(GtSsainindextype *) suftab,
                                 nonspecialentries);
    if (sainseq->roundtable != NULL)
    {
      gt_sain_adjustsuftab(sainseq->totallength,(GtSsainindextype *) suftab,
                           nonspecialentries);
    }
    gt_sain_endbuckets(sainseq);
    GT_SAIN_SHOWTIMER(sainseq->roundtable == NULL
                      ? "induce S suffixes" : "fast induce S suffixes");
    gt_sain_induceStypesuffixes1(sainseq,(GtSsainindextype *) suftab,
                                 nonspecialentries);
    if (sainseq->roundtable == NULL)
    {
      GT_SAIN_SHOWTIMER("simple moverSstar2front");
      gt_sain_moveSstar2front(countSstartype,(GtSsainindextype *) suftab,
                              nonspecialentries);
      GT_SAIN_SHOWTIMER("simple assignSstarlength");
      gt_sain_assignSstarlength(sainseq,suftab + countSstartype);
      GT_SAIN_SHOWTIMER("simple assignSstarnames");
      numberofnames = gt_sain_assignSstarnames(sainseq,countSstartype,suftab);
    } else
    {
      GT_SAIN_SHOWTIMER("fast moveSstar2front");
      numberofnames = gt_sain_fast_moveSstar2front(sainseq->totallength,
                                                   countSstartype,
                                                   (GtSsainindextype *) suftab,
                                                   nonspecialentries);
      if (!sainseq->roundtablepoints2suftab)
      {
        gt_free(sainseq->roundtable);
        sainseq->roundtable = NULL;
      }
      GT_SAIN_SHOWTIMER("fast assignSstarnames");
      gt_sain_fast_assignSstarnames(sainseq->totallength,countSstartype,
                                    suftab,numberofnames,nonspecialentries);
    }
    gt_assert(numberofnames <= countSstartype);
    if (numberofnames < countSstartype)
    {
    /* Now the name sequence is in the range from
       countSstartype .. 2 * countSstartype - 1 */
      GtUsainindextype *subseq = suftab + countSstartype;
      GtSainseq *sainseq_rec;

      GT_SAIN_SHOWTIMER("movenames2front");
      gt_sain_setundefined(true,suftab,0,countSstartype-1);
      gt_sain_movenames2front(suftab,countSstartype,sainseq->totallength);
      if (level == 0)
      {
        firstusable = (GtUsainindextype) GT_MULT2(countSstartype);
      }
      sainseq_rec = gt_sainseq_new_from_array(subseq,countSstartype,
                                              numberofnames,
                                              suftab,
                                              firstusable,
                                              suftabentries);
      gt_sain_rec_sortsuffixes(level+1,
                               sainseq_rec,
                               suftab,
                               firstusable,
                               countSstartype,
                               suftabentries,
                               intermediatecheck,
                               finalcheck,
                               logger,
                               timer);
      gt_sainseq_delete(sainseq_rec);
      GT_SAIN_SHOWTIMER("expandorder2original");
      gt_sain_expandorder2original(sainseq,countSstartype,suftab);
    } else
    {
      if (sainseq->seqtype == GT_SAIN_INTSEQ)
      {
        GtUword charidx;
        gt_assert(sainseq->sstarfirstcharcount == NULL);
        sainseq->sstarfirstcharcount = sainseq->bucketfillptr;
        for (charidx = 0; charidx < sainseq->numofchars; charidx++)
        {
          sainseq->sstarfirstcharcount[charidx] = 0;
          sainseq->bucketsize[charidx] = 0;
        }
        gt_sain_determineSstarfirstchardist(sainseq);
      }
    }
  }
  if (intermediatecheck && countSstartype > 0)
  {
    gt_sain_checkorder(sainseq,suftab,0,countSstartype-1);
  }
  GT_SAIN_SHOWTIMER("insert sorted Sstar suffixes");
  if (countSstartype > 0)
  {
    gt_sain_insertsortedSstarsuffixes (sainseq, suftab, countSstartype - 1,
                                       nonspecialentries);
  }
  gt_sain_startbuckets(sainseq);
  GT_SAIN_SHOWTIMER("final induce L suffixes");
  gt_sain_induceLtypesuffixes2(sainseq,(GtSsainindextype *) suftab,
                               nonspecialentries);
  gt_sain_endbuckets(sainseq);
  GT_SAIN_SHOWTIMER("final induce S suffixes");
  gt_sain_induceStypesuffixes2(sainseq,(GtSsainindextype *) suftab,
                               nonspecialentries);
  if (intermediatecheck && nonspecialentries > 0)
  {
    gt_sain_checkorder(sainseq,suftab,0,nonspecialentries-1);
  }
  if (sainseq->seqtype != GT_SAIN_INTSEQ)
  {
    if (sainseq->seqtype == GT_SAIN_BARE_ENCSEQ ||
        sainseq->seqtype == GT_SAIN_ENCSEQ)
    {
      GT_SAIN_SHOWTIMER("fill tail suffixes");
      gt_sain_filltailsuffixes(suftab + nonspecialentries,
                               sainseq,
                               sainseq->readmode);
    } else
    {
      suftab[sainseq->totallength] = (GtUsainindextype) sainseq->totallength;
    }
  }
  if (finalcheck && sainseq->seqtype != GT_SAIN_INTSEQ)
  {
    GT_SAIN_SHOWTIMER("check suffix order");
    switch (sainseq->seqtype)
    {
      case GT_SAIN_BARE_ENCSEQ:
        gt_suftab_lightweightcheck(sain_accesschar_bare_encseq,
                                   sain_charcount_bare_encseq,
                                   (void *) sainseq->bare_encseq,
                                   sainseq->readmode,
                                   sainseq->totallength,
                                   (unsigned int) sainseq->numofchars,
                                   suftab,
                                   sizeof *suftab,
                                   NULL);
        break;
      case GT_SAIN_ENCSEQ:
        gt_suftab_lightweightcheck(sain_accesschar_encseq,
                                   sain_charcount_encseq,
                                   (void *) sainseq->seq.encseq,
                                   sainseq->readmode,
                                   sainseq->totallength,
                                   (unsigned int) sainseq->numofchars,
                                   suftab,
                                   sizeof *suftab,
                                   NULL);
        break;
      case GT_SAIN_PLAINSEQ:
        gt_assert(sainseq->readmode == GT_READMODE_FORWARD);
        gt_suftab_lightweightcheck(sain_accesschar_plainseq,
                                   sain_charcount_plainseq,
                                   (void *) sainseq,
                                   sainseq->readmode,
                                   sainseq->totallength,
                                   (unsigned int) sainseq->numofchars,
                                   suftab,
                                   sizeof *suftab,
                                   NULL);
        break;
      default:
        gt_assert(false);
    }
  }
}

// Assembly:
pushq %rbx
subq $0xd0, %rsp
movl %ecx, 0x5c(%rsp)
movq %rdx, %rax
movl 0x5c(%rsp), %edx
movq %rax, 0x60(%rsp)
movq %rsi, %rax
movq 0x60(%rsp), %rsi
movq %rax, 0x68(%rsp)
movl %edi, %r10d
movq 0x68(%rsp), %rdi
movq 0xf8(%rsp), %rax
movq 0xf0(%rsp), %rax
movb 0xe8(%rsp), %al
movb 0xe0(%rsp), %cl
movl %r10d, 0xcc(%rsp)
movq %rdi, 0xc0(%rsp)
movq %rsi, 0xb8(%rsp)
movl %edx, 0xb4(%rsp)
movq %r8, 0xa8(%rsp)
movq %r9, 0xa0(%rsp)
andb $0x1, %cl
movb %cl, 0x9f(%rsp)
andb $0x1, %al
movb %al, 0x9e(%rsp)
cmpq $0x0, 0xf8(%rsp)
je 0x2d0979
movq 0xf0(%rsp), %rdi
callq 0xe7980
testb $0x1, %al
jne 0x2d095b
jmp 0x2d0979
movq 0xf8(%rsp), %rdi
movq 0x36b5ce(%rip), %rax    # 0x63bf38
movq (%rax), %rdx
leaq 0x2bb7ec(%rip), %rsi    # 0x58c160
callq 0x121930
movq 0xc0(%rsp), %rdi
movq 0xb8(%rsp), %rsi
movq 0xf0(%rsp), %rdx
callq 0x2d2130
movq %rax, 0x90(%rsp)
movq 0xf0(%rsp), %rdi
movl 0xcc(%rsp), %edx
movq 0xc0(%rsp), %rax
movq (%rax), %rcx
movq 0x8(%rax), %r8
movq %r8, %xmm0
movaps 0x247f68(%rip), %xmm3   # 0x518930
movaps %xmm3, 0x30(%rsp)
punpckldq %xmm3, %xmm0    # xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]
movapd 0x247f67(%rip), %xmm2   # 0x518940
movaps %xmm2, 0x40(%rsp)
subpd %xmm2, %xmm0
movaps %xmm0, %xmm1
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm1, %xmm0
movq %rcx, %xmm1
punpckldq %xmm3, %xmm1    # xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]
subpd %xmm2, %xmm1
movaps %xmm1, %xmm2
unpckhpd %xmm1, %xmm1            # xmm1 = xmm1[1,1]
addsd %xmm2, %xmm1
divsd %xmm1, %xmm0
leaq 0x2bb766(%rip), %rsi    # 0x58c176
movb $0x1, %al
callq 0xe7cd0
movaps 0x30(%rsp), %xmm3
movaps 0x40(%rsp), %xmm2
movq 0xf0(%rsp), %rdi
movq 0x90(%rsp), %rdx
movq %rdx, %xmm0
punpckldq %xmm3, %xmm0    # xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]
subpd %xmm2, %xmm0
movaps %xmm0, %xmm1
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm1, %xmm0
movq 0xc0(%rsp), %rax
movq (%rax), %xmm1
punpckldq %xmm3, %xmm1    # xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]
subpd %xmm2, %xmm1
movaps %xmm1, %xmm2
unpckhpd %xmm1, %xmm1            # xmm1 = xmm1[1,1]
addsd %xmm2, %xmm1
divsd %xmm1, %xmm0
leaq 0x2bb741(%rip), %rsi    # 0x58c1b4
movb $0x1, %al
callq 0xe7cd0
cmpq $0x0, 0x90(%rsp)
jbe 0x2d1136
movq 0xc0(%rsp), %rax
cmpq $0x0, 0x30(%rax)
je 0x2d0aad
movq 0xc0(%rsp), %rdi
movq 0xb8(%rsp), %rsi
callq 0x2d2210
movq 0xc0(%rsp), %rdi
callq 0x2d2340
cmpq $0x0, 0xf8(%rsp)
je 0x2d0b11
movq 0xf0(%rsp), %rdi
callq 0xe7980
testb $0x1, %al
jne 0x2d0ad8
jmp 0x2d0b11
movq 0xf8(%rsp), %rdi
movq 0xc0(%rsp), %rax
movq 0x30(%rax), %rcx
leaq 0x2bb6d8(%rip), %rsi    # 0x58c1cb
leaq 0x2bb7f4(%rip), %rax    # 0x58c2ee
cmpq $0x0, %rcx
cmoveq %rax, %rsi
movq 0x36b42f(%rip), %rax    # 0x63bf38
movq (%rax), %rdx
callq 0x121930
movq 0xc0(%rsp), %rdi
movq 0xb8(%rsp), %rsi
movq 0xa8(%rsp), %rdx
callq 0x2d23c0
movq 0xc0(%rsp), %rax
cmpq $0x0, 0x30(%rax)
je 0x2d0b5d
movq 0xc0(%rsp), %rax
movq (%rax), %rdi
movq 0xb8(%rsp), %rsi
movq 0xa8(%rsp), %rdx
callq 0x2d24c0
movq 0xc0(%rsp), %rdi
callq 0x2d25c0
cmpq $0x0, 0xf8(%rsp)
je 0x2d0bc1
movq 0xf0(%rsp), %rdi
callq 0xe7980
testb $0x1, %al
jne 0x2d0b88
jmp 0x2d0bc1
movq 0xf8(%rsp), %rdi
movq 0xc0(%rsp), %rax
movq 0x30(%rax), %rcx
leaq 0x2bb63f(%rip), %rsi    # 0x58c1e2
leaq 0x2bb75c(%rip), %rax    # 0x58c306
cmpq $0x0, %rcx
cmoveq %rax, %rsi
movq 0x36b37f(%rip), %rax    # 0x63bf38
movq (%rax), %rdx
callq 0x121930
movq 0xc0(%rsp), %rdi
movq 0xb8(%rsp), %rsi
movq 0xa8(%rsp), %rdx
callq 0x2d2640
movq 0xc0(%rsp), %rax
cmpq $0x0, 0x30(%rax)
jne 0x2d0d10
cmpq $0x0, 0xf8(%rsp)
je 0x2d0c2d
movq 0xf0(%rsp), %rdi
callq 0xe7980
testb $0x1, %al
jne 0x2d0c0f
jmp 0x2d0c2d
movq 0xf8(%rsp), %rdi
movq 0x36b31a(%rip), %rax    # 0x63bf38
movq (%rax), %rdx
leaq 0x2bb5d1(%rip), %rsi    # 0x58c1f9
callq 0x121930
movq 0x90(%rsp), %rdi
movq 0xb8(%rsp), %rsi
movq 0xa8(%rsp), %rdx
callq 0x2d2740
cmpq $0x0, 0xf8(%rsp)
je 0x2d0c86
movq 0xf0(%rsp), %rdi
callq 0xe7980
testb $0x1, %al
jne 0x2d0c68
jmp 0x2d0c86
movq 0xf8(%rsp), %rdi
movq 0x36b2c1(%rip), %rax    # 0x63bf38
movq (%rax), %rdx
leaq 0x2bb590(%rip), %rsi    # 0x58c211
callq 0x121930
movq 0xc0(%rsp), %rdi
movq 0xb8(%rsp), %rsi
movq 0x90(%rsp), %rax
shlq $0x2, %rax
addq %rax, %rsi
callq 0x2d2990
cmpq $0x0, 0xf8(%rsp)
je 0x2d0ce6
movq 0xf0(%rsp), %rdi
callq 0xe7980
testb $0x1, %al
jne 0x2d0cc8
jmp 0x2d0ce6
movq 0xf8(%rsp), %rdi
movq 0x36b261(%rip), %rax    # 0x63bf38
movq (%rax), %rdx
leaq 0x2bb549(%rip), %rsi    # 0x58c22a
callq 0x121930
movq 0xc0(%rsp), %rdi
movq 0x90(%rsp), %rsi
movq 0xb8(%rsp), %rdx
callq 0x2d2a30
movq %rax, 0x88(%rsp)
jmp 0x2d0e23
cmpq $0x0, 0xf8(%rsp)
je 0x2d0d4c
movq 0xf0(%rsp), %rdi
callq 0xe7980
testb $0x1, %al
jne 0x2d0d2e
jmp 0x2d0d4c
movq 0xf8(%rsp), %rdi
movq 0x36b1fb(%rip), %rax    # 0x63bf38
movq (%rax), %rdx
leaq 0x2bb4fb(%rip), %rsi    # 0x58c242
callq 0x121930
movq 0xc0(%rsp), %rax
movq (%rax), %rdi
movq 0x90(%rsp), %rsi
movq 0xb8(%rsp), %rdx
movq 0xa8(%rsp), %rcx
callq 0x2d2c80
movq %rax, 0x88(%rsp)
movq 0xc0(%rsp), %rax
testb $0x1, 0x56(%rax)
jne 0x2d0db7
movq 0xc0(%rsp), %rax
movq 0x30(%rax), %rdi
leaq 0x2bb2cb(%rip), %rsi    # 0x58c068
movl $0x5a0, %edx            # imm = 0x5A0
callq 0xe88c0
movq 0xc0(%rsp), %rax
movq $0x0, 0x30(%rax)
cmpq $0x0, 0xf8(%rsp)
je 0x2d0df3
movq 0xf0(%rsp), %rdi
callq 0xe7980
testb $0x1, %al
jne 0x2d0dd5
jmp 0x2d0df3
movq 0xf8(%rsp), %rdi
movq 0x36b154(%rip), %rax    # 0x63bf38
movq (%rax), %rdx
leaq 0x2bb469(%rip), %rsi    # 0x58c257
callq 0x121930
movq 0xc0(%rsp), %rax
movq (%rax), %rdi
movq 0x90(%rsp), %rsi
movq 0xb8(%rsp), %rdx
movq 0x88(%rsp), %rcx
movq 0xa8(%rsp), %r8
callq 0x2d2f20
jmp 0x2d0e25
movq 0x88(%rsp), %rax
cmpq 0x90(%rsp), %rax
jbe 0x2d0e6f
movq 0x36b162(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x2451cb(%rip), %rsi    # 0x516013
leaq 0x2bb41e(%rip), %rdx    # 0x58c26d
leaq 0x2bb437(%rip), %rcx    # 0x58c28d
leaq 0x2bb20b(%rip), %r8     # 0x58c068
movl $0x5a7, %r9d            # imm = 0x5A7
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x2d0e71
movq 0x88(%rsp), %rax
cmpq 0x90(%rsp), %rax
jae 0x2d1054
movq 0xb8(%rsp), %rax
movq 0x90(%rsp), %rcx
shlq $0x2, %rcx
addq %rcx, %rax
movq %rax, 0x80(%rsp)
cmpq $0x0, 0xf8(%rsp)
je 0x2d0ee2
movq 0xf0(%rsp), %rdi
callq 0xe7980
testb $0x1, %al
jne 0x2d0ec4
jmp 0x2d0ee2
movq 0xf8(%rsp), %rdi
movq 0x36b065(%rip), %rax    # 0x63bf38
movq (%rax), %rdx
leaq 0x2bbc48(%rip), %rsi    # 0x58cb25
callq 0x121930
movq 0xb8(%rsp), %rsi
movq 0x90(%rsp), %rcx
subq $0x1, %rcx
movl $0x1, %edi
xorl %eax, %eax
movl %eax, %edx
callq 0x2d30b0
movq 0xb8(%rsp), %rdi
movq 0x90(%rsp), %rsi
movq 0xc0(%rsp), %rax
movq (%rax), %rdx
callq 0x2d3170
cmpl $0x0, 0xcc(%rsp)
jne 0x2d0f40
movq 0x90(%rsp), %rax
shlq %rax
movl %eax, 0xb4(%rsp)
movq 0x80(%rsp), %rdi
movq 0x90(%rsp), %rsi
movq 0x88(%rsp), %rdx
movq 0xb8(%rsp), %rcx
movl 0xb4(%rsp), %r8d
movq 0xa0(%rsp), %r9
callq 0x2d32b0
movq %rax, 0x78(%rsp)
movl 0xcc(%rsp), %edi
addl $0x1, %edi
movq 0x78(%rsp), %rsi
movq 0xb8(%rsp), %rdx
movl 0xb4(%rsp), %ecx
movq 0x90(%rsp), %r8
movq 0xa0(%rsp), %r9
movb 0x9f(%rsp), %bl
movb 0x9e(%rsp), %r11b
movq 0xf0(%rsp), %r10
movq 0xf8(%rsp), %rax
andb $0x1, %bl
andb $0x1, %r11b
movzbl %bl, %ebx
movl %ebx, (%rsp)
movzbl %r11b, %r11d
movl %r11d, 0x8(%rsp)
movq %r10, 0x10(%rsp)
movq %rax, 0x18(%rsp)
callq 0x2d08b0
movq 0x78(%rsp), %rdi
callq 0x2d1600
cmpq $0x0, 0xf8(%rsp)
je 0x2d1032
movq 0xf0(%rsp), %rdi
callq 0xe7980
testb $0x1, %al
jne 0x2d1014
jmp 0x2d1032
movq 0xf8(%rsp), %rdi
movq 0x36af15(%rip), %rax    # 0x63bf38
movq (%rax), %rdx
leaq 0x2bbc45(%rip), %rsi    # 0x58cc72
callq 0x121930
movq 0xc0(%rsp), %rdi
movq 0x90(%rsp), %rsi
movq 0xb8(%rsp), %rdx
callq 0x2d3610
jmp 0x2d1134
movq 0xc0(%rsp), %rax
cmpl $0x1, 0x50(%rax)
jne 0x2d1132
jmp 0x2d1068
movq 0xc0(%rsp), %rax
cmpq $0x0, 0x28(%rax)
je 0x2d10af
movq 0x36af22(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x244f8b(%rip), %rsi    # 0x516013
leaq 0x2bb217(%rip), %rdx    # 0x58c2a6
leaq 0x2bb1f7(%rip), %rcx    # 0x58c28d
leaq 0x2bafcb(%rip), %r8     # 0x58c068
movl $0x5cd, %r9d            # imm = 0x5CD
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x2d10b1
movq 0xc0(%rsp), %rax
movq 0x20(%rax), %rcx
movq 0xc0(%rsp), %rax
movq %rcx, 0x28(%rax)
movq $0x0, 0x70(%rsp)
movq 0x70(%rsp), %rax
movq 0xc0(%rsp), %rcx
cmpq 0x8(%rcx), %rax
jae 0x2d1125
movq 0xc0(%rsp), %rax
movq 0x28(%rax), %rax
movq 0x70(%rsp), %rcx
movl $0x0, (%rax,%rcx,4)
movq 0xc0(%rsp), %rax
movq 0x18(%rax), %rax
movq 0x70(%rsp), %rcx
movl $0x0, (%rax,%rcx,4)
movq 0x70(%rsp), %rax
addq $0x1, %rax
movq %rax, 0x70(%rsp)
jmp 0x2d10d2
movq 0xc0(%rsp), %rdi
callq 0x2d36d0
jmp 0x2d1134
jmp 0x2d1136
testb $0x1, 0x9f(%rsp)
je 0x2d1170
cmpq $0x0, 0x90(%rsp)
jbe 0x2d1170
movq 0xc0(%rsp), %rdi
movq 0xb8(%rsp), %rsi
movq 0x90(%rsp), %rcx
subq $0x1, %rcx
xorl %eax, %eax
movl %eax, %edx
callq 0x2d3830
cmpq $0x0, 0xf8(%rsp)
je 0x2d11ac
movq 0xf0(%rsp), %rdi
callq 0xe7980
testb $0x1, %al
jne 0x2d118e
jmp 0x2d11ac
movq 0xf8(%rsp), %rdi
movq 0x36ad9b(%rip), %rax    # 0x63bf38
movq (%rax), %rdx
leaq 0x2bb124(%rip), %rsi    # 0x58c2cb
callq 0x121930
cmpq $0x0, 0x90(%rsp)
jbe 0x2d11e0
movq 0xc0(%rsp), %rdi
movq 0xb8(%rsp), %rsi
movq 0x90(%rsp), %rdx
subq $0x1, %rdx
movq 0xa8(%rsp), %rcx
callq 0x2d3920
movq 0xc0(%rsp), %rdi
callq 0x2d2340
cmpq $0x0, 0xf8(%rsp)
je 0x2d1229
movq 0xf0(%rsp), %rdi
callq 0xe7980
testb $0x1, %al
jne 0x2d120b
jmp 0x2d1229
movq 0xf8(%rsp), %rdi
movq 0x36ad1e(%rip), %rax    # 0x63bf38
movq (%rax), %rdx
leaq 0x2bb0c4(%rip), %rsi    # 0x58c2e8
callq 0x121930
movq 0xc0(%rsp), %rdi
movq 0xb8(%rsp), %rsi
movq 0xa8(%rsp), %rdx
callq 0x2d3bc0
movq 0xc0(%rsp), %rdi
callq 0x2d25c0
cmpq $0x0, 0xf8(%rsp)
je 0x2d128f
movq 0xf0(%rsp), %rdi
callq 0xe7980
testb $0x1, %al
jne 0x2d1271
jmp 0x2d128f
movq 0xf8(%rsp), %rdi
movq 0x36acb8(%rip), %rax    # 0x63bf38
movq (%rax), %rdx
leaq 0x2bb076(%rip), %rsi    # 0x58c300
callq 0x121930
movq 0xc0(%rsp), %rdi
movq 0xb8(%rsp), %rsi
movq 0xa8(%rsp), %rdx
callq 0x2d3c60
testb $0x1, 0x9f(%rsp)
je 0x2d12e6
cmpq $0x0, 0xa8(%rsp)
jbe 0x2d12e6
movq 0xc0(%rsp), %rdi
movq 0xb8(%rsp), %rsi
movq 0xa8(%rsp), %rcx
subq $0x1, %rcx
xorl %eax, %eax
movl %eax, %edx
callq 0x2d3830
movq 0xc0(%rsp), %rax
cmpl $0x1, 0x50(%rax)
je 0x2d13a6
movq 0xc0(%rsp), %rax
cmpl $0x3, 0x50(%rax)
je 0x2d1314
movq 0xc0(%rsp), %rax
cmpl $0x2, 0x50(%rax)
jne 0x2d1381
cmpq $0x0, 0xf8(%rsp)
je 0x2d1350
movq 0xf0(%rsp), %rdi
callq 0xe7980
testb $0x1, %al
jne 0x2d1332
jmp 0x2d1350
movq 0xf8(%rsp), %rdi
movq 0x36abf7(%rip), %rax    # 0x63bf38
movq (%rax), %rdx
leaq 0x2bafcd(%rip), %rsi    # 0x58c318
callq 0x121930
movq 0xb8(%rsp), %rdi
movq 0xa8(%rsp), %rax
shlq $0x2, %rax
addq %rax, %rdi
movq 0xc0(%rsp), %rsi
movq 0xc0(%rsp), %rax
movl 0x40(%rax), %edx
callq 0x2d3d00
jmp 0x2d13a4
movq 0xc0(%rsp), %rax
movq (%rax), %rax
movl %eax, %edx
movq 0xb8(%rsp), %rax
movq 0xc0(%rsp), %rcx
movq (%rcx), %rcx
movl %edx, (%rax,%rcx,4)
jmp 0x2d13a6
testb $0x1, 0x9e(%rsp)
je 0x2d15f2
movq 0xc0(%rsp), %rax
cmpl $0x1, 0x50(%rax)
je 0x2d15f2
cmpq $0x0, 0xf8(%rsp)
je 0x2d1402
movq 0xf0(%rsp), %rdi
callq 0xe7980
testb $0x1, %al
jne 0x2d13e4
jmp 0x2d1402
movq 0xf8(%rsp), %rdi
movq 0x36ab45(%rip), %rax    # 0x63bf38
movq (%rax), %rdx
leaq 0x2baf2e(%rip), %rsi    # 0x58c32b
callq 0x121930
movq 0xc0(%rsp), %rax
movl 0x50(%rax), %eax
movl %eax, 0x2c(%rsp)
testl %eax, %eax
je 0x2d1509
jmp 0x2d141b
movl 0x2c(%rsp), %eax
subl $0x2, %eax
je 0x2d149f
jmp 0x2d1426
movl 0x2c(%rsp), %eax
subl $0x3, %eax
jne 0x2d15b6
jmp 0x2d1435
movq 0xc0(%rsp), %rax
movq 0x48(%rax), %rdx
movq 0xc0(%rsp), %rax
movl 0x40(%rax), %ecx
movq 0xc0(%rsp), %rax
movq (%rax), %r8
movq 0xc0(%rsp), %rax
movq 0x8(%rax), %rax
movl %eax, %r9d
movq 0xb8(%rsp), %rax
leaq 0x2d6b(%rip), %rdi      # 0x2d41e0
leaq -0xe7c(%rip), %rsi      # 0x2d0600
xorl %r10d, %r10d
movq %rax, (%rsp)
movq $0x4, 0x8(%rsp)
movq $0x0, 0x10(%rsp)
callq 0x2c96c0
jmp 0x2d15f0
movq 0xc0(%rsp), %rax
movq 0x38(%rax), %rdx
movq 0xc0(%rsp), %rax
movl 0x40(%rax), %ecx
movq 0xc0(%rsp), %rax
movq (%rax), %r8
movq 0xc0(%rsp), %rax
movq 0x8(%rax), %rax
movl %eax, %r9d
movq 0xb8(%rsp), %rax
leaq 0x2d31(%rip), %rdi      # 0x2d4210
leaq -0xeb6(%rip), %rsi      # 0x2d0630
xorl %r10d, %r10d
movq %rax, (%rsp)
movq $0x4, 0x8(%rsp)
movq $0x0, 0x10(%rsp)
callq 0x2c96c0
jmp 0x2d15f0
jmp 0x2d150b
movq 0xc0(%rsp), %rax
cmpl $0x0, 0x40(%rax)
je 0x2d1551
movq 0x36aa80(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x244ae9(%rip), %rsi    # 0x516013
leaq 0x2bae0d(%rip), %rdx    # 0x58c33e
leaq 0x2bad55(%rip), %rcx    # 0x58c28d
leaq 0x2bab29(%rip), %r8     # 0x58c068
movl $0x618, %r9d            # imm = 0x618
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x2d1553
movq 0xc0(%rsp), %rdx
movq 0xc0(%rsp), %rax
movl 0x40(%rax), %ecx
movq 0xc0(%rsp), %rax
movq (%rax), %r8
movq 0xc0(%rsp), %rax
movq 0x8(%rax), %rax
movl %eax, %r9d
movq 0xb8(%rsp), %rax
leaq 0x2cb1(%rip), %rdi      # 0x2d4240
leaq 0x2cca(%rip), %rsi      # 0x2d4260
xorl %r10d, %r10d
movq %rax, (%rsp)
movq $0x4, 0x8(%rsp)
movq $0x0, 0x10(%rsp)
callq 0x2c96c0
jmp 0x2d15f0
jmp 0x2d15b8
movq 0x36a9e1(%rip), %rax    # 0x63bfa0
movq (%rax), %rdi
leaq 0x244a4a(%rip), %rsi    # 0x516013
leaq 0x287793(%rip), %rdx    # 0x558d63
leaq 0x2bacb6(%rip), %rcx    # 0x58c28d
leaq 0x2baa8a(%rip), %r8     # 0x58c068
movl $0x624, %r9d            # imm = 0x624
movb $0x0, %al
callq 0x199f0
callq 0x19370
jmp 0x2d15f2
addq $0xd0, %rsp
popq %rbx
retq
nopl (%rax,%rax)