// File: /workspace/github_c_makefile_star2_O0/bluecmd[P]fst-example/gtkwave/fastlz.c
// Function: fastlz2_compress
static FASTLZ_INLINE int FASTLZ_COMPRESSOR(const void* input, int length, void* output)
{
  const flzuint8* ip = (const flzuint8*) input;
  const flzuint8* ip_bound = ip + length - 2;
  const flzuint8* ip_limit = ip + length - 12;
  flzuint8* op = (flzuint8*) output;

  const flzuint8* htab[HASH_SIZE];
  const flzuint8** hslot;
  flzuint32 hval;

  flzuint32 copy;

  /* sanity check */
  if(FASTLZ_UNEXPECT_CONDITIONAL(length < 4))
  {
    if(length)
    {
      /* create literal copy only */
      *op++ = length-1;
      ip_bound++;
      while(ip <= ip_bound)
        *op++ = *ip++;
      return length+1;
    }
    else
      return 0;
  }

  /* initializes hash table */
  for (hslot = htab; hslot < htab + HASH_SIZE; hslot++)
    *hslot = ip;

  /* we start with literal copy */
  copy = 2;
  *op++ = MAX_COPY-1;
  *op++ = *ip++;
  *op++ = *ip++;

  /* main loop */
  while(FASTLZ_EXPECT_CONDITIONAL(ip < ip_limit))
  {
    const flzuint8* ref;
    flzuint32 distance;

    /* minimum match length */
    flzuint32 len = 3;

    /* comparison starting-point */
    const flzuint8* anchor = ip;

    /* check for a run */
#if FASTLZ_LEVEL==2
    if(ip[0] == ip[-1] && FASTLZ_READU16(ip-1)==FASTLZ_READU16(ip+1))
    {
      distance = 1;
      /* ip += 3; */ /* scan-build, never used */
      ref = anchor - 1 + 3;
      goto match;
    }
#endif

    /* find potential match */
    HASH_FUNCTION(hval,ip);
    hslot = htab + hval;
    ref = htab[hval];

    /* calculate distance to the match */
    distance = anchor - ref;

    /* update hash table */
    *hslot = anchor;

    /* is this a match? check the first 3 bytes */
    if(distance==0 ||
#if FASTLZ_LEVEL==1
    (distance >= MAX_DISTANCE) ||
#else
    (distance >= MAX_FARDISTANCE) ||
#endif
    *ref++ != *ip++ || *ref++!=*ip++ || *ref++!=*ip++)
      goto literal;

#if FASTLZ_LEVEL==2
    /* far, needs at least 5-byte match */
    if(distance >= MAX_DISTANCE)
    {
      if(*ip++ != *ref++ || *ip++!= *ref++)
        goto literal;
      len += 2;
    }

    match:
#endif

    /* last matched byte */
    ip = anchor + len;

    /* distance is biased */
    distance--;

    if(!distance)
    {
      /* zero distance means a run */
      flzuint8 x = ip[-1];
      while(ip < ip_bound)
        if(*ref++ != x) break; else ip++;
    }
    else
    for(;;)
    {
      /* safe because the outer check against ip limit */
      if(*ref++ != *ip++) break;
      if(*ref++ != *ip++) break;
      if(*ref++ != *ip++) break;
      if(*ref++ != *ip++) break;
      if(*ref++ != *ip++) break;
      if(*ref++ != *ip++) break;
      if(*ref++ != *ip++) break;
      if(*ref++ != *ip++) break;
      while(ip < ip_bound)
        if(*ref++ != *ip++) break;
      break;
    }

    /* if we have copied something, adjust the copy count */
    if(copy)
      /* copy is biased, '0' means 1 byte copy */
      *(op-copy-1) = copy-1;
    else
      /* back, to overwrite the copy count */
      op--;

    /* reset literal counter */
    copy = 0;

    /* length is biased, '1' means a match of 3 bytes */
    ip -= 3;
    len = ip - anchor;

    /* encode the match */
#if FASTLZ_LEVEL==2
    if(distance < MAX_DISTANCE)
    {
      if(len < 7)
      {
        *op++ = (len << 5) + (distance >> 8);
        *op++ = (distance & 255);
      }
      else
      {
        *op++ = (7 << 5) + (distance >> 8);
        for(len-=7; len >= 255; len-= 255)
          *op++ = 255;
        *op++ = len;
        *op++ = (distance & 255);
      }
    }
    else
    {
      /* far away, but not yet in the another galaxy... */
      if(len < 7)
      {
        distance -= MAX_DISTANCE;
        *op++ = (len << 5) + 31;
        *op++ = 255;
        *op++ = distance >> 8;
        *op++ = distance & 255;
      }
      else
      {
        distance -= MAX_DISTANCE;
        *op++ = (7 << 5) + 31;
        for(len-=7; len >= 255; len-= 255)
          *op++ = 255;
        *op++ = len;
        *op++ = 255;
        *op++ = distance >> 8;
        *op++ = distance & 255;
      }
    }
#else

    if(FASTLZ_UNEXPECT_CONDITIONAL(len > MAX_LEN-2))
      while(len > MAX_LEN-2)
      {
        *op++ = (7 << 5) + (distance >> 8);
        *op++ = MAX_LEN - 2 - 7 -2;
        *op++ = (distance & 255);
        len -= MAX_LEN-2;
      }

    if(len < 7)
    {
      *op++ = (len << 5) + (distance >> 8);
      *op++ = (distance & 255);
    }
    else
    {
      *op++ = (7 << 5) + (distance >> 8);
      *op++ = len - 7;
      *op++ = (distance & 255);
    }
#endif

    /* update the hash at match boundary */
    HASH_FUNCTION(hval,ip);
    htab[hval] = ip++;
    HASH_FUNCTION(hval,ip);
    htab[hval] = ip++;

    /* assuming literal copy */
    *op++ = MAX_COPY-1;

    continue;

    literal:
      *op++ = *anchor++;
      ip = anchor;
      copy++;
      if(FASTLZ_UNEXPECT_CONDITIONAL(copy == MAX_COPY))
      {
        copy = 0;
        *op++ = MAX_COPY-1;
      }
  }

  /* left-over as literal copy */
  ip_bound++;
  while(ip <= ip_bound)
  {
    *op++ = *ip++;
    copy++;
    if(copy == MAX_COPY)
    {
      copy = 0;
      *op++ = MAX_COPY-1;
    }
  }

  /* if we have copied something, adjust the copy length */
  if(copy)
    *(op-copy-1) = copy-1;
  else
    op--;

#if FASTLZ_LEVEL==2
  /* marker for fastlz2 */
  *(flzuint8*)output |= (1 << 5);
#endif

  return op - (flzuint8*)output;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xfff0, %rsp           # imm = 0xFFF0
movq %rdi, -0x10(%rbp)
movl %esi, -0x14(%rbp)
movq %rdx, -0x20(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rax
movslq -0x14(%rbp), %rcx
addq %rcx, %rax
addq $-0x2, %rax
movq %rax, -0x30(%rbp)
movq -0x28(%rbp), %rax
movslq -0x14(%rbp), %rcx
addq %rcx, %rax
addq $-0xc, %rax
movq %rax, -0x38(%rbp)
movq -0x20(%rbp), %rax
movq %rax, -0x40(%rbp)
cmpl $0x4, -0x14(%rbp)
setl %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x3203
cmpl $0x0, -0x14(%rbp)
je 0x31f7
movl -0x14(%rbp), %eax
subl $0x1, %eax
movb %al, %cl
movq -0x40(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x40(%rbp)
movb %cl, (%rax)
movq -0x30(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x30(%rbp)
movq -0x28(%rbp), %rax
cmpq -0x30(%rbp), %rax
ja 0x31e9
movq -0x28(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x28(%rbp)
movb (%rax), %cl
movq -0x40(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x40(%rbp)
movb %cl, (%rax)
jmp 0x31bb
movl -0x14(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x4(%rbp)
jmp 0x3bf7
movl $0x0, -0x4(%rbp)
jmp 0x3bf7
leaq -0x10040(%rbp), %rax
movq %rax, -0x10048(%rbp)
movq -0x10048(%rbp), %rax
leaq -0x10040(%rbp), %rcx
addq $0x10000, %rcx          # imm = 0x10000
cmpq %rcx, %rax
jae 0x324d
movq -0x28(%rbp), %rcx
movq -0x10048(%rbp), %rax
movq %rcx, (%rax)
movq -0x10048(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x10048(%rbp)
jmp 0x3211
movl $0x2, -0x10050(%rbp)
movq -0x40(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x40(%rbp)
movb $0x1f, (%rax)
movq -0x28(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x28(%rbp)
movb (%rax), %cl
movq -0x40(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x40(%rbp)
movb %cl, (%rax)
movq -0x28(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x28(%rbp)
movb (%rax), %cl
movq -0x40(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x40(%rbp)
movb %cl, (%rax)
movq -0x28(%rbp), %rax
cmpq -0x38(%rbp), %rax
setb %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x3b38
movl $0x3, -0x10060(%rbp)
movq -0x28(%rbp), %rax
movq %rax, -0x10068(%rbp)
movq -0x28(%rbp), %rax
movzbl (%rax), %eax
movq -0x28(%rbp), %rcx
movzbl -0x1(%rcx), %ecx
cmpl %ecx, %eax
jne 0x332a
movq -0x28(%rbp), %rax
movzwl -0x1(%rax), %eax
movq -0x28(%rbp), %rcx
movzwl 0x1(%rcx), %ecx
cmpl %ecx, %eax
jne 0x332a
movl $0x1, -0x1005c(%rbp)
movq -0x10068(%rbp), %rax
addq $-0x1, %rax
addq $0x3, %rax
movq %rax, -0x10058(%rbp)
jmp 0x34e9
movq -0x28(%rbp), %rax
movzwl (%rax), %eax
movl %eax, -0x1004c(%rbp)
movq -0x28(%rbp), %rax
movzwl 0x1(%rax), %eax
movl -0x1004c(%rbp), %ecx
shrl $0x3, %ecx
xorl %ecx, %eax
xorl -0x1004c(%rbp), %eax
movl %eax, -0x1004c(%rbp)
movl -0x1004c(%rbp), %eax
andl $0x1fff, %eax           # imm = 0x1FFF
movl %eax, -0x1004c(%rbp)
leaq -0x10040(%rbp), %rax
movl -0x1004c(%rbp), %ecx
shlq $0x3, %rcx
addq %rcx, %rax
movq %rax, -0x10048(%rbp)
movl -0x1004c(%rbp), %eax
movq -0x10040(%rbp,%rax,8), %rax
movq %rax, -0x10058(%rbp)
movq -0x10068(%rbp), %rax
movq -0x10058(%rbp), %rcx
subq %rcx, %rax
movl %eax, -0x1005c(%rbp)
movq -0x10068(%rbp), %rcx
movq -0x10048(%rbp), %rax
movq %rcx, (%rax)
cmpl $0x0, -0x1005c(%rbp)
je 0x3466
cmpl $0x11ffd, -0x1005c(%rbp) # imm = 0x11FFD
jae 0x3466
movq -0x10058(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x10058(%rbp)
movzbl (%rax), %eax
movq -0x28(%rbp), %rcx
movq %rcx, %rdx
addq $0x1, %rdx
movq %rdx, -0x28(%rbp)
movzbl (%rcx), %ecx
cmpl %ecx, %eax
jne 0x3466
movq -0x10058(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x10058(%rbp)
movzbl (%rax), %eax
movq -0x28(%rbp), %rcx
movq %rcx, %rdx
addq $0x1, %rdx
movq %rdx, -0x28(%rbp)
movzbl (%rcx), %ecx
cmpl %ecx, %eax
jne 0x3466
movq -0x10058(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x10058(%rbp)
movzbl (%rax), %eax
movq -0x28(%rbp), %rcx
movq %rcx, %rdx
addq $0x1, %rdx
movq %rdx, -0x28(%rbp)
movzbl (%rcx), %ecx
cmpl %ecx, %eax
je 0x346b
jmp 0x3abe
cmpl $0x1fff, -0x1005c(%rbp) # imm = 0x1FFF
jb 0x34e7
movq -0x28(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x28(%rbp)
movzbl (%rax), %eax
movq -0x10058(%rbp), %rcx
movq %rcx, %rdx
addq $0x1, %rdx
movq %rdx, -0x10058(%rbp)
movzbl (%rcx), %ecx
cmpl %ecx, %eax
jne 0x34d3
movq -0x28(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x28(%rbp)
movzbl (%rax), %eax
movq -0x10058(%rbp), %rcx
movq %rcx, %rdx
addq $0x1, %rdx
movq %rdx, -0x10058(%rbp)
movzbl (%rcx), %ecx
cmpl %ecx, %eax
je 0x34d8
jmp 0x3abe
movl -0x10060(%rbp), %eax
addl $0x2, %eax
movl %eax, -0x10060(%rbp)
jmp 0x34e9
movq -0x10068(%rbp), %rax
movl -0x10060(%rbp), %ecx
addq %rcx, %rax
movq %rax, -0x28(%rbp)
movl -0x1005c(%rbp), %eax
addl $-0x1, %eax
movl %eax, -0x1005c(%rbp)
cmpl $0x0, -0x1005c(%rbp)
jne 0x3564
movq -0x28(%rbp), %rax
movb -0x1(%rax), %al
movb %al, -0x10069(%rbp)
movq -0x28(%rbp), %rax
cmpq -0x30(%rbp), %rax
jae 0x355f
movq -0x10058(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x10058(%rbp)
movzbl (%rax), %eax
movzbl -0x10069(%rbp), %ecx
cmpl %ecx, %eax
je 0x3551
jmp 0x355f
movq -0x28(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x28(%rbp)
jmp 0x3522
jmp 0x373a
jmp 0x3566
movq -0x10058(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x10058(%rbp)
movzbl (%rax), %eax
movq -0x28(%rbp), %rcx
movq %rcx, %rdx
addq $0x1, %rdx
movq %rdx, -0x28(%rbp)
movzbl (%rcx), %ecx
cmpl %ecx, %eax
je 0x3599
jmp 0x3738
movq -0x10058(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x10058(%rbp)
movzbl (%rax), %eax
movq -0x28(%rbp), %rcx
movq %rcx, %rdx
addq $0x1, %rdx
movq %rdx, -0x28(%rbp)
movzbl (%rcx), %ecx
cmpl %ecx, %eax
je 0x35cc
jmp 0x3738
movq -0x10058(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x10058(%rbp)
movzbl (%rax), %eax
movq -0x28(%rbp), %rcx
movq %rcx, %rdx
addq $0x1, %rdx
movq %rdx, -0x28(%rbp)
movzbl (%rcx), %ecx
cmpl %ecx, %eax
je 0x35ff
jmp 0x3738
movq -0x10058(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x10058(%rbp)
movzbl (%rax), %eax
movq -0x28(%rbp), %rcx
movq %rcx, %rdx
addq $0x1, %rdx
movq %rdx, -0x28(%rbp)
movzbl (%rcx), %ecx
cmpl %ecx, %eax
je 0x3632
jmp 0x3738
movq -0x10058(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x10058(%rbp)
movzbl (%rax), %eax
movq -0x28(%rbp), %rcx
movq %rcx, %rdx
addq $0x1, %rdx
movq %rdx, -0x28(%rbp)
movzbl (%rcx), %ecx
cmpl %ecx, %eax
je 0x3665
jmp 0x3738
movq -0x10058(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x10058(%rbp)
movzbl (%rax), %eax
movq -0x28(%rbp), %rcx
movq %rcx, %rdx
addq $0x1, %rdx
movq %rdx, -0x28(%rbp)
movzbl (%rcx), %ecx
cmpl %ecx, %eax
je 0x3698
jmp 0x3738
movq -0x10058(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x10058(%rbp)
movzbl (%rax), %eax
movq -0x28(%rbp), %rcx
movq %rcx, %rdx
addq $0x1, %rdx
movq %rdx, -0x28(%rbp)
movzbl (%rcx), %ecx
cmpl %ecx, %eax
je 0x36c8
jmp 0x3738
movq -0x10058(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x10058(%rbp)
movzbl (%rax), %eax
movq -0x28(%rbp), %rcx
movq %rcx, %rdx
addq $0x1, %rdx
movq %rdx, -0x28(%rbp)
movzbl (%rcx), %ecx
cmpl %ecx, %eax
je 0x36f8
jmp 0x3738
jmp 0x36fa
movq -0x28(%rbp), %rax
cmpq -0x30(%rbp), %rax
jae 0x3736
movq -0x10058(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x10058(%rbp)
movzbl (%rax), %eax
movq -0x28(%rbp), %rcx
movq %rcx, %rdx
addq $0x1, %rdx
movq %rdx, -0x28(%rbp)
movzbl (%rcx), %ecx
cmpl %ecx, %eax
je 0x3734
jmp 0x3736
jmp 0x36fa
jmp 0x3738
jmp 0x373a
cmpl $0x0, -0x10050(%rbp)
je 0x3765
movl -0x10050(%rbp), %eax
subl $0x1, %eax
movb %al, %dl
movq -0x40(%rbp), %rax
movl -0x10050(%rbp), %ecx
movl %ecx, %esi
xorl %ecx, %ecx
subq %rsi, %rcx
movb %dl, -0x1(%rax,%rcx)
jmp 0x3771
movq -0x40(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x40(%rbp)
movl $0x0, -0x10050(%rbp)
movq -0x28(%rbp), %rax
addq $-0x3, %rax
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rax
movq -0x10068(%rbp), %rcx
subq %rcx, %rax
movl %eax, -0x10060(%rbp)
cmpl $0x1fff, -0x1005c(%rbp) # imm = 0x1FFF
jae 0x389b
cmpl $0x7, -0x10060(%rbp)
jae 0x37fe
movl -0x10060(%rbp), %eax
shll $0x5, %eax
movl -0x1005c(%rbp), %ecx
shrl $0x8, %ecx
addl %ecx, %eax
movb %al, %cl
movq -0x40(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x40(%rbp)
movb %cl, (%rax)
movl -0x1005c(%rbp), %eax
andl $0xff, %eax
movb %al, %cl
movq -0x40(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x40(%rbp)
movb %cl, (%rax)
jmp 0x3896
movl -0x1005c(%rbp), %eax
shrl $0x8, %eax
addl $0xe0, %eax
movb %al, %cl
movq -0x40(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x40(%rbp)
movb %cl, (%rax)
movl -0x10060(%rbp), %eax
subl $0x7, %eax
movl %eax, -0x10060(%rbp)
cmpl $0xff, -0x10060(%rbp)
jb 0x385f
movq -0x40(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x40(%rbp)
movb $-0x1, (%rax)
movl -0x10060(%rbp), %eax
subl $0xff, %eax
movl %eax, -0x10060(%rbp)
jmp 0x382e
movl -0x10060(%rbp), %eax
movb %al, %cl
movq -0x40(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x40(%rbp)
movb %cl, (%rax)
movl -0x1005c(%rbp), %eax
andl $0xff, %eax
movb %al, %cl
movq -0x40(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x40(%rbp)
movb %cl, (%rax)
jmp 0x39f3
cmpl $0x7, -0x10060(%rbp)
jae 0x3929
movl -0x1005c(%rbp), %eax
subl $0x1fff, %eax           # imm = 0x1FFF
movl %eax, -0x1005c(%rbp)
movl -0x10060(%rbp), %eax
shll $0x5, %eax
addl $0x1f, %eax
movb %al, %cl
movq -0x40(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x40(%rbp)
movb %cl, (%rax)
movq -0x40(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x40(%rbp)
movb $-0x1, (%rax)
movl -0x1005c(%rbp), %eax
shrl $0x8, %eax
movb %al, %cl
movq -0x40(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x40(%rbp)
movb %cl, (%rax)
movl -0x1005c(%rbp), %eax
andl $0xff, %eax
movb %al, %cl
movq -0x40(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x40(%rbp)
movb %cl, (%rax)
jmp 0x39f1
movl -0x1005c(%rbp), %eax
subl $0x1fff, %eax           # imm = 0x1FFF
movl %eax, -0x1005c(%rbp)
movq -0x40(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x40(%rbp)
movb $-0x1, (%rax)
movl -0x10060(%rbp), %eax
subl $0x7, %eax
movl %eax, -0x10060(%rbp)
cmpl $0xff, -0x10060(%rbp)
jb 0x398c
movq -0x40(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x40(%rbp)
movb $-0x1, (%rax)
movl -0x10060(%rbp), %eax
subl $0xff, %eax
movl %eax, -0x10060(%rbp)
jmp 0x395b
movl -0x10060(%rbp), %eax
movb %al, %cl
movq -0x40(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x40(%rbp)
movb %cl, (%rax)
movq -0x40(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x40(%rbp)
movb $-0x1, (%rax)
movl -0x1005c(%rbp), %eax
shrl $0x8, %eax
movb %al, %cl
movq -0x40(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x40(%rbp)
movb %cl, (%rax)
movl -0x1005c(%rbp), %eax
andl $0xff, %eax
movb %al, %cl
movq -0x40(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x40(%rbp)
movb %cl, (%rax)
jmp 0x39f3
movq -0x28(%rbp), %rax
movzwl (%rax), %eax
movl %eax, -0x1004c(%rbp)
movq -0x28(%rbp), %rax
movzwl 0x1(%rax), %eax
movl -0x1004c(%rbp), %ecx
shrl $0x3, %ecx
xorl %ecx, %eax
xorl -0x1004c(%rbp), %eax
movl %eax, -0x1004c(%rbp)
movl -0x1004c(%rbp), %eax
andl $0x1fff, %eax           # imm = 0x1FFF
movl %eax, -0x1004c(%rbp)
movq -0x28(%rbp), %rcx
movq %rcx, %rax
addq $0x1, %rax
movq %rax, -0x28(%rbp)
movl -0x1004c(%rbp), %eax
movq %rcx, -0x10040(%rbp,%rax,8)
movq -0x28(%rbp), %rax
movzwl (%rax), %eax
movl %eax, -0x1004c(%rbp)
movq -0x28(%rbp), %rax
movzwl 0x1(%rax), %eax
movl -0x1004c(%rbp), %ecx
shrl $0x3, %ecx
xorl %ecx, %eax
xorl -0x1004c(%rbp), %eax
movl %eax, -0x1004c(%rbp)
movl -0x1004c(%rbp), %eax
andl $0x1fff, %eax           # imm = 0x1FFF
movl %eax, -0x1004c(%rbp)
movq -0x28(%rbp), %rcx
movq %rcx, %rax
addq $0x1, %rax
movq %rax, -0x28(%rbp)
movl -0x1004c(%rbp), %eax
movq %rcx, -0x10040(%rbp,%rax,8)
movq -0x40(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x40(%rbp)
movb $0x1f, (%rax)
jmp 0x32ad
movq -0x10068(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x10068(%rbp)
movb (%rax), %cl
movq -0x40(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x40(%rbp)
movb %cl, (%rax)
movq -0x10068(%rbp), %rax
movq %rax, -0x28(%rbp)
movl -0x10050(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x10050(%rbp)
cmpl $0x20, -0x10050(%rbp)
sete %al
andb $0x1, %al
movzbl %al, %eax
cltq
cmpq $0x0, %rax
je 0x3b33
movl $0x0, -0x10050(%rbp)
movq -0x40(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x40(%rbp)
movb $0x1f, (%rax)
jmp 0x32ad
movq -0x30(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x30(%rbp)
movq -0x28(%rbp), %rax
cmpq -0x30(%rbp), %rax
ja 0x3ba6
movq -0x28(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x28(%rbp)
movb (%rax), %cl
movq -0x40(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x40(%rbp)
movb %cl, (%rax)
movl -0x10050(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x10050(%rbp)
cmpl $0x20, -0x10050(%rbp)
jne 0x3ba4
movl $0x0, -0x10050(%rbp)
movq -0x40(%rbp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, -0x40(%rbp)
movb $0x1f, (%rax)
jmp 0x3b44
cmpl $0x0, -0x10050(%rbp)
je 0x3bd1
movl -0x10050(%rbp), %eax
subl $0x1, %eax
movb %al, %dl
movq -0x40(%rbp), %rax
movl -0x10050(%rbp), %ecx
movl %ecx, %esi
xorl %ecx, %ecx
subq %rsi, %rcx
movb %dl, -0x1(%rax,%rcx)
jmp 0x3bdd
movq -0x40(%rbp), %rax
addq $-0x1, %rax
movq %rax, -0x40(%rbp)
movq -0x20(%rbp), %rax
movzbl (%rax), %ecx
orl $0x20, %ecx
movb %cl, (%rax)
movq -0x40(%rbp), %rax
movq -0x20(%rbp), %rcx
subq %rcx, %rax
movl %eax, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0xfff0, %rsp           # imm = 0xFFF0
popq %rbp
retq
nopw %cs:(%rax,%rax)