// File: /workspace/github_c_makefile_star2_O0/FH0[P]tun_direct/lwip-2.1.2/src/core/ipv6/nd6.c
// Function: nd6_tmr
void
nd6_tmr(void)
{
  s8_t i;
  struct netif *netif;

  /* Process neighbor entries. */
  for (i = 0; i < LWIP_ND6_NUM_NEIGHBORS; i++) {
    switch (neighbor_cache[i].state) {
    case ND6_INCOMPLETE:
      if ((neighbor_cache[i].counter.probes_sent >= LWIP_ND6_MAX_MULTICAST_SOLICIT) &&
          (!neighbor_cache[i].isrouter)) {
        /* Retries exceeded. */
        nd6_free_neighbor_cache_entry(i);
      } else {
        /* Send a NS for this entry. */
        neighbor_cache[i].counter.probes_sent++;
        nd6_send_neighbor_cache_probe(&neighbor_cache[i], ND6_SEND_FLAG_MULTICAST_DEST);
      }
      break;
    case ND6_REACHABLE:
      /* Send queued packets, if any are left. Should have been sent already. */
      if (neighbor_cache[i].q != NULL) {
        nd6_send_q(i);
      }
      if (neighbor_cache[i].counter.reachable_time <= ND6_TMR_INTERVAL) {
        /* Change to stale state. */
        neighbor_cache[i].state = ND6_STALE;
        neighbor_cache[i].counter.stale_time = 0;
      } else {
        neighbor_cache[i].counter.reachable_time -= ND6_TMR_INTERVAL;
      }
      break;
    case ND6_STALE:
      neighbor_cache[i].counter.stale_time++;
      break;
    case ND6_DELAY:
      if (neighbor_cache[i].counter.delay_time <= 1) {
        /* Change to PROBE state. */
        neighbor_cache[i].state = ND6_PROBE;
        neighbor_cache[i].counter.probes_sent = 0;
      } else {
        neighbor_cache[i].counter.delay_time--;
      }
      break;
    case ND6_PROBE:
      if ((neighbor_cache[i].counter.probes_sent >= LWIP_ND6_MAX_MULTICAST_SOLICIT) &&
          (!neighbor_cache[i].isrouter)) {
        /* Retries exceeded. */
        nd6_free_neighbor_cache_entry(i);
      } else {
        /* Send a NS for this entry. */
        neighbor_cache[i].counter.probes_sent++;
        nd6_send_neighbor_cache_probe(&neighbor_cache[i], 0);
      }
      break;
    case ND6_NO_ENTRY:
    default:
      /* Do nothing. */
      break;
    }
  }

  /* Process destination entries. */
  for (i = 0; i < LWIP_ND6_NUM_DESTINATIONS; i++) {
    destination_cache[i].age++;
  }

  /* Process router entries. */
  for (i = 0; i < LWIP_ND6_NUM_ROUTERS; i++) {
    if (default_router_list[i].neighbor_entry != NULL) {
      /* Active entry. */
      if (default_router_list[i].invalidation_timer <= ND6_TMR_INTERVAL / 1000) {
        /* No more than 1 second remaining. Clear this entry. Also clear any of
         * its destination cache entries, as per RFC 4861 Sec. 5.3 and 6.3.5. */
        s8_t j;
        for (j = 0; j < LWIP_ND6_NUM_DESTINATIONS; j++) {
          if (ip6_addr_cmp(&destination_cache[j].next_hop_addr,
               &default_router_list[i].neighbor_entry->next_hop_address)) {
             ip6_addr_set_any(&destination_cache[j].destination_addr);
          }
        }
        default_router_list[i].neighbor_entry->isrouter = 0;
        default_router_list[i].neighbor_entry = NULL;
        default_router_list[i].invalidation_timer = 0;
        default_router_list[i].flags = 0;
      } else {
        default_router_list[i].invalidation_timer -= ND6_TMR_INTERVAL / 1000;
      }
    }
  }

  /* Process prefix entries. */
  for (i = 0; i < LWIP_ND6_NUM_PREFIXES; i++) {
    if (prefix_list[i].netif != NULL) {
      if (prefix_list[i].invalidation_timer <= ND6_TMR_INTERVAL / 1000) {
        /* Entry timed out, remove it */
        prefix_list[i].invalidation_timer = 0;
        prefix_list[i].netif = NULL;
      } else {
        prefix_list[i].invalidation_timer -= ND6_TMR_INTERVAL / 1000;
      }
    }
  }

  /* Process our own addresses, updating address lifetimes and/or DAD state. */
  NETIF_FOREACH(netif) {
    for (i = 0; i < LWIP_IPV6_NUM_ADDRESSES; ++i) {
      u8_t addr_state;
#if LWIP_IPV6_ADDRESS_LIFETIMES
      /* Step 1: update address lifetimes (valid and preferred). */
      addr_state = netif_ip6_addr_state(netif, i);
      /* RFC 4862 is not entirely clear as to whether address lifetimes affect
       * tentative addresses, and is even less clear as to what should happen
       * with duplicate addresses. We choose to track and update lifetimes for
       * both those types, although for different reasons:
       * - for tentative addresses, the line of thought of Sec. 5.7 combined
       *   with the potentially long period that an address may be in tentative
       *   state (due to the interface being down) suggests that lifetimes
       *   should be independent of external factors which would include DAD;
       * - for duplicate addresses, retiring them early could result in a new
       *   but unwanted attempt at marking them as valid, while retiring them
       *   late/never could clog up address slots on the netif.
       * As a result, we may end up expiring addresses of either type here.
       */
      if (!ip6_addr_isinvalid(addr_state) &&
          !netif_ip6_addr_isstatic(netif, i)) {
        u32_t life = netif_ip6_addr_valid_life(netif, i);
        if (life <= ND6_TMR_INTERVAL / 1000) {
          /* The address has expired. */
          netif_ip6_addr_set_valid_life(netif, i, 0);
          netif_ip6_addr_set_pref_life(netif, i, 0);
          netif_ip6_addr_set_state(netif, i, IP6_ADDR_INVALID);
        } else {
          if (!ip6_addr_life_isinfinite(life)) {
            life -= ND6_TMR_INTERVAL / 1000;
            LWIP_ASSERT("bad valid lifetime", life != IP6_ADDR_LIFE_STATIC);
            netif_ip6_addr_set_valid_life(netif, i, life);
          }
          /* The address is still here. Update the preferred lifetime too. */
          life = netif_ip6_addr_pref_life(netif, i);
          if (life <= ND6_TMR_INTERVAL / 1000) {
            /* This case must also trigger if 'life' was already zero, so as to
             * deal correctly with advertised preferred-lifetime reductions. */
            netif_ip6_addr_set_pref_life(netif, i, 0);
            if (addr_state == IP6_ADDR_PREFERRED)
              netif_ip6_addr_set_state(netif, i, IP6_ADDR_DEPRECATED);
          } else if (!ip6_addr_life_isinfinite(life)) {
            life -= ND6_TMR_INTERVAL / 1000;
            netif_ip6_addr_set_pref_life(netif, i, life);
          }
        }
      }
      /* The address state may now have changed, so reobtain it next. */
#endif /* LWIP_IPV6_ADDRESS_LIFETIMES */
      /* Step 2: update DAD state. */
      addr_state = netif_ip6_addr_state(netif, i);
      if (ip6_addr_istentative(addr_state)) {
        if ((addr_state & IP6_ADDR_TENTATIVE_COUNT_MASK) >= LWIP_IPV6_DUP_DETECT_ATTEMPTS) {
          /* No NA received in response. Mark address as valid. For dynamic
           * addresses with an expired preferred lifetime, the state is set to
           * deprecated right away. That should almost never happen, though. */
          addr_state = IP6_ADDR_PREFERRED;
#if LWIP_IPV6_ADDRESS_LIFETIMES
          if (!netif_ip6_addr_isstatic(netif, i) &&
              netif_ip6_addr_pref_life(netif, i) == 0) {
            addr_state = IP6_ADDR_DEPRECATED;
          }
#endif /* LWIP_IPV6_ADDRESS_LIFETIMES */
          netif_ip6_addr_set_state(netif, i, addr_state);
        } else if (netif_is_up(netif) && netif_is_link_up(netif)) {
          /* tentative: set next state by increasing by one */
          netif_ip6_addr_set_state(netif, i, addr_state + 1);
          /* Send a NS for this address. Use the unspecified address as source
           * address in all cases (RFC 4862 Sec. 5.4.2), not in the least
           * because as it is, we only consider multicast replies for DAD. */
          nd6_send_ns(netif, netif_ip6_addr(netif, i),
            ND6_SEND_FLAG_MULTICAST_DEST | ND6_SEND_FLAG_ANY_SRC);
        }
      }
    }
  }

#if LWIP_IPV6_SEND_ROUTER_SOLICIT
  /* Send router solicitation messages, if necessary. */
  if (!nd6_tmr_rs_reduction) {
    nd6_tmr_rs_reduction = (ND6_RTR_SOLICITATION_INTERVAL / ND6_TMR_INTERVAL) - 1;
    NETIF_FOREACH(netif) {
      if ((netif->rs_count > 0) && netif_is_up(netif) &&
          netif_is_link_up(netif) &&
          !ip6_addr_isinvalid(netif_ip6_addr_state(netif, 0)) &&
          !ip6_addr_isduplicated(netif_ip6_addr_state(netif, 0))) {
        if (nd6_send_rs(netif) == ERR_OK) {
          netif->rs_count--;
        }
      }
    }
  } else {
    nd6_tmr_rs_reduction--;
  }
#endif /* LWIP_IPV6_SEND_ROUTER_SOLICIT */

}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movb $0x0, -0x1(%rbp)
movsbl -0x1(%rbp), %eax
cmpl $0xa, %eax
jge 0x22b44
movsbq -0x1(%rbp), %rax
imulq $0x38, %rax, %rax
leaq 0xd127(%rip), %rcx      # 0x2fa20
movzbl 0x30(%rax,%rcx), %eax
movq %rax, -0x20(%rbp)
subq $0x5, %rax
ja 0x22b33
movq -0x20(%rbp), %rax
leaq 0x7305(%rip), %rcx      # 0x29c1c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movsbq -0x1(%rbp), %rcx
leaq 0xd0f4(%rip), %rax      # 0x2fa20
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
cmpl $0x3, 0x34(%rax)
jb 0x2295d
movsbq -0x1(%rbp), %rcx
leaq 0xd0db(%rip), %rax      # 0x2fa20
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
cmpb $0x0, 0x31(%rax)
jne 0x2295d
movsbl -0x1(%rbp), %edi
callq 0x23300
jmp 0x22996
movsbq -0x1(%rbp), %rcx
leaq 0xd0b7(%rip), %rax      # 0x2fa20
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
movl 0x34(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x34(%rax)
movsbq -0x1(%rbp), %rax
leaq 0xd09b(%rip), %rdi      # 0x2fa20
imulq $0x38, %rax, %rax
addq %rax, %rdi
movl $0x1, %esi
callq 0x23480
jmp 0x22b35
movsbq -0x1(%rbp), %rcx
leaq 0xd079(%rip), %rax      # 0x2fa20
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
cmpq $0x0, 0x28(%rax)
je 0x229be
movsbl -0x1(%rbp), %edi
callq 0x21180
movsbq -0x1(%rbp), %rcx
leaq 0xd056(%rip), %rax      # 0x2fa20
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
cmpl $0x3e8, 0x34(%rax)      # imm = 0x3E8
ja 0x22a0d
movsbq -0x1(%rbp), %rcx
leaq 0xd03a(%rip), %rax      # 0x2fa20
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
movb $0x3, 0x30(%rax)
movsbq -0x1(%rbp), %rcx
leaq 0xd023(%rip), %rax      # 0x2fa20
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
movl $0x0, 0x34(%rax)
jmp 0x22a2c
movsbq -0x1(%rbp), %rcx
leaq 0xd007(%rip), %rax      # 0x2fa20
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
movl 0x34(%rax), %ecx
subl $0x3e8, %ecx            # imm = 0x3E8
movl %ecx, 0x34(%rax)
jmp 0x22b35
movsbq -0x1(%rbp), %rcx
leaq 0xcfe3(%rip), %rax      # 0x2fa20
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
movl 0x34(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x34(%rax)
jmp 0x22b35
movsbq -0x1(%rbp), %rcx
leaq 0xcfc2(%rip), %rax      # 0x2fa20
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
cmpl $0x1, 0x34(%rax)
ja 0x22a9e
movsbq -0x1(%rbp), %rcx
leaq 0xcfa9(%rip), %rax      # 0x2fa20
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
movb $0x5, 0x30(%rax)
movsbq -0x1(%rbp), %rcx
leaq 0xcf92(%rip), %rax      # 0x2fa20
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
movl $0x0, 0x34(%rax)
jmp 0x22aba
movsbq -0x1(%rbp), %rcx
leaq 0xcf76(%rip), %rax      # 0x2fa20
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
movl 0x34(%rax), %ecx
addl $-0x1, %ecx
movl %ecx, 0x34(%rax)
jmp 0x22b35
movsbq -0x1(%rbp), %rcx
leaq 0xcf58(%rip), %rax      # 0x2fa20
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
cmpl $0x3, 0x34(%rax)
jb 0x22af9
movsbq -0x1(%rbp), %rcx
leaq 0xcf3f(%rip), %rax      # 0x2fa20
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
cmpb $0x0, 0x31(%rax)
jne 0x22af9
movsbl -0x1(%rbp), %edi
callq 0x23300
jmp 0x22b2f
movsbq -0x1(%rbp), %rcx
leaq 0xcf1b(%rip), %rax      # 0x2fa20
imulq $0x38, %rcx, %rcx
addq %rcx, %rax
movl 0x34(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x34(%rax)
movsbq -0x1(%rbp), %rax
leaq 0xceff(%rip), %rdi      # 0x2fa20
imulq $0x38, %rax, %rax
addq %rax, %rdi
xorl %esi, %esi
callq 0x23480
jmp 0x22b35
jmp 0x22b33
jmp 0x22b35
jmp 0x22b37
movb -0x1(%rbp), %al
addb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x228dc
movb $0x0, -0x1(%rbp)
movsbl -0x1(%rbp), %eax
cmpl $0xa, %eax
jge 0x22b77
movsbq -0x1(%rbp), %rcx
leaq 0xd213(%rip), %rax      # 0x2fd70
imulq $0x30, %rcx, %rcx
addq %rcx, %rax
movl 0x2c(%rax), %ecx
addl $0x1, %ecx
movl %ecx, 0x2c(%rax)
movb -0x1(%rbp), %al
addb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x22b48
movb $0x0, -0x1(%rbp)
movsbl -0x1(%rbp), %eax
cmpl $0x3, %eax
jge 0x22e04
movsbq -0x1(%rbp), %rcx
leaq 0xd0bc(%rip), %rax      # 0x2fc50
shlq $0x4, %rcx
addq %rcx, %rax
cmpq $0x0, (%rax)
je 0x22df5
movsbq -0x1(%rbp), %rcx
leaq 0xd09f(%rip), %rax      # 0x2fc50
shlq $0x4, %rcx
addq %rcx, %rax
cmpl $0x1, 0x8(%rax)
ja 0x22dd7
movb $0x0, -0x11(%rbp)
movsbl -0x11(%rbp), %eax
cmpl $0xa, %eax
jge 0x22d70
movsbq -0x11(%rbp), %rcx
leaq 0xd191(%rip), %rax      # 0x2fd70
imulq $0x30, %rcx, %rcx
addq %rcx, %rax
movl 0x14(%rax), %eax
movsbq -0x1(%rbp), %rdx
leaq 0xd05b(%rip), %rcx      # 0x2fc50
shlq $0x4, %rdx
addq %rdx, %rcx
movq (%rcx), %rcx
cmpl (%rcx), %eax
jne 0x22d61
movsbq -0x11(%rbp), %rcx
leaq 0xd15d(%rip), %rax      # 0x2fd70
imulq $0x30, %rcx, %rcx
addq %rcx, %rax
movl 0x18(%rax), %eax
movsbq -0x1(%rbp), %rdx
leaq 0xd027(%rip), %rcx      # 0x2fc50
shlq $0x4, %rdx
addq %rdx, %rcx
movq (%rcx), %rcx
cmpl 0x4(%rcx), %eax
jne 0x22d61
movsbq -0x11(%rbp), %rcx
leaq 0xd128(%rip), %rax      # 0x2fd70
imulq $0x30, %rcx, %rcx
addq %rcx, %rax
movl 0x1c(%rax), %eax
movsbq -0x1(%rbp), %rdx
leaq 0xcff2(%rip), %rcx      # 0x2fc50
shlq $0x4, %rdx
addq %rdx, %rcx
movq (%rcx), %rcx
cmpl 0x8(%rcx), %eax
jne 0x22d61
movsbq -0x11(%rbp), %rcx
leaq 0xd0f3(%rip), %rax      # 0x2fd70
imulq $0x30, %rcx, %rcx
addq %rcx, %rax
movl 0x20(%rax), %eax
movsbq -0x1(%rbp), %rdx
leaq 0xcfbd(%rip), %rcx      # 0x2fc50
shlq $0x4, %rdx
addq %rdx, %rcx
movq (%rcx), %rcx
cmpl 0xc(%rcx), %eax
jne 0x22d61
movsbq -0x11(%rbp), %rcx
leaq 0xd0be(%rip), %rax      # 0x2fd70
imulq $0x30, %rcx, %rcx
addq %rcx, %rax
movzbl 0x24(%rax), %eax
movsbq -0x1(%rbp), %rdx
leaq 0xcf87(%rip), %rcx      # 0x2fc50
shlq $0x4, %rdx
addq %rdx, %rcx
movq (%rcx), %rcx
movzbl 0x10(%rcx), %ecx
cmpl %ecx, %eax
jne 0x22d61
jmp 0x22ce1
movsbq -0x11(%rbp), %rcx
leaq 0xd083(%rip), %rax      # 0x2fd70
imulq $0x30, %rcx, %rcx
addq %rcx, %rax
movl $0x0, (%rax)
movsbq -0x11(%rbp), %rcx
leaq 0xd06a(%rip), %rax      # 0x2fd70
imulq $0x30, %rcx, %rcx
addq %rcx, %rax
movl $0x0, 0x4(%rax)
movsbq -0x11(%rbp), %rcx
leaq 0xd050(%rip), %rax      # 0x2fd70
imulq $0x30, %rcx, %rcx
addq %rcx, %rax
movl $0x0, 0x8(%rax)
movsbq -0x11(%rbp), %rcx
leaq 0xd036(%rip), %rax      # 0x2fd70
imulq $0x30, %rcx, %rcx
addq %rcx, %rax
movl $0x0, 0xc(%rax)
movsbq -0x11(%rbp), %rcx
leaq 0xd01c(%rip), %rax      # 0x2fd70
imulq $0x30, %rcx, %rcx
addq %rcx, %rax
movb $0x0, 0x10(%rax)
jmp 0x22d61
jmp 0x22d63
movb -0x11(%rbp), %al
addb $0x1, %al
movb %al, -0x11(%rbp)
jmp 0x22bc6
movsbq -0x1(%rbp), %rcx
leaq 0xced4(%rip), %rax      # 0x2fc50
shlq $0x4, %rcx
addq %rcx, %rax
movq (%rax), %rax
movb $0x0, 0x31(%rax)
movsbq -0x1(%rbp), %rcx
leaq 0xceba(%rip), %rax      # 0x2fc50
shlq $0x4, %rcx
addq %rcx, %rax
movq $0x0, (%rax)
movsbq -0x1(%rbp), %rcx
leaq 0xcea0(%rip), %rax      # 0x2fc50
shlq $0x4, %rcx
addq %rcx, %rax
movl $0x0, 0x8(%rax)
movsbq -0x1(%rbp), %rcx
leaq 0xce86(%rip), %rax      # 0x2fc50
shlq $0x4, %rcx
addq %rcx, %rax
movb $0x0, 0xc(%rax)
jmp 0x22df3
movsbq -0x1(%rbp), %rcx
leaq 0xce6d(%rip), %rax      # 0x2fc50
shlq $0x4, %rcx
addq %rcx, %rax
movl 0x8(%rax), %ecx
subl $0x1, %ecx
movl %ecx, 0x8(%rax)
jmp 0x22df5
jmp 0x22df7
movb -0x1(%rbp), %al
addb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x22b7b
movb $0x0, -0x1(%rbp)
movsbl -0x1(%rbp), %eax
cmpl $0x5, %eax
jge 0x22eac
movsbq -0x1(%rbp), %rcx
leaq 0xce7f(%rip), %rax      # 0x2fca0
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
cmpq $0x0, 0x18(%rax)
je 0x22e9d
movsbq -0x1(%rbp), %rcx
leaq 0xce65(%rip), %rax      # 0x2fca0
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
cmpl $0x1, 0x20(%rax)
ja 0x22e7f
movsbq -0x1(%rbp), %rcx
leaq 0xce4c(%rip), %rax      # 0x2fca0
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movl $0x0, 0x20(%rax)
movsbq -0x1(%rbp), %rcx
leaq 0xce32(%rip), %rax      # 0x2fca0
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movq $0x0, 0x18(%rax)
jmp 0x22e9b
movsbq -0x1(%rbp), %rcx
leaq 0xce15(%rip), %rax      # 0x2fca0
imulq $0x28, %rcx, %rcx
addq %rcx, %rax
movl 0x20(%rax), %ecx
subl $0x1, %ecx
movl %ecx, 0x20(%rax)
jmp 0x22e9d
jmp 0x22e9f
movb -0x1(%rbp), %al
addb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x22e08
leaq 0xca25(%rip), %rax      # 0x2f8d8
movq (%rax), %rax
movq %rax, -0x10(%rbp)
cmpq $0x0, -0x10(%rbp)
je 0x23205
movb $0x0, -0x1(%rbp)
movsbl -0x1(%rbp), %eax
cmpl $0x3, %eax
jge 0x231f3
movq -0x10(%rbp), %rax
movsbq -0x1(%rbp), %rcx
movb 0x98(%rax,%rcx), %al
movb %al, -0x12(%rbp)
movzbl -0x12(%rbp), %eax
cmpl $0x0, %eax
je 0x230ba
cmpq $0x0, -0x10(%rbp)
je 0x22f12
movq -0x10(%rbp), %rax
movsbq -0x1(%rbp), %rcx
movl 0x9c(%rax,%rcx,4), %eax
movl %eax, -0x24(%rbp)
jmp 0x22f19
xorl %eax, %eax
movl %eax, -0x24(%rbp)
jmp 0x22f19
movl -0x24(%rbp), %eax
cmpl $0x0, %eax
je 0x230ba
cmpq $0x0, -0x10(%rbp)
je 0x22f41
movq -0x10(%rbp), %rax
movsbq -0x1(%rbp), %rcx
movl 0x9c(%rax,%rcx,4), %eax
movl %eax, -0x28(%rbp)
jmp 0x22f48
xorl %eax, %eax
movl %eax, -0x28(%rbp)
jmp 0x22f48
movl -0x28(%rbp), %eax
movl %eax, -0x18(%rbp)
cmpl $0x1, -0x18(%rbp)
ja 0x22fa6
jmp 0x22f56
cmpq $0x0, -0x10(%rbp)
je 0x22f71
movq -0x10(%rbp), %rax
movsbq -0x1(%rbp), %rcx
movl $0x0, 0x9c(%rax,%rcx,4)
jmp 0x22f73
jmp 0x22f75
cmpq $0x0, -0x10(%rbp)
je 0x22f90
movq -0x10(%rbp), %rax
movsbq -0x1(%rbp), %rcx
movl $0x0, 0xa8(%rax,%rcx,4)
jmp 0x22f92
movq -0x10(%rbp), %rdi
xorl %edx, %edx
movsbl -0x1(%rbp), %esi
callq 0x6420
jmp 0x230b8
movl -0x18(%rbp), %eax
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
cmpq %rcx, %rax
je 0x23015
movl -0x18(%rbp), %eax
subl $0x1, %eax
movl %eax, -0x18(%rbp)
cmpl $0x0, -0x18(%rbp)
jne 0x22ff3
jmp 0x22fc4
leaq 0x4301(%rip), %rdi      # 0x272cc
leaq 0x6c62(%rip), %rsi      # 0x29c34
movl $0x446, %edx            # imm = 0x446
leaq 0x6c69(%rip), %rcx      # 0x29c47
movb $0x0, %al
callq 0x20d0
xorl %eax, %eax
movl %eax, %edi
callq 0x21b0
callq 0x2040
jmp 0x22ff5
jmp 0x22ff7
cmpq $0x0, -0x10(%rbp)
je 0x23011
movl -0x18(%rbp), %edx
movq -0x10(%rbp), %rax
movsbq -0x1(%rbp), %rcx
movl %edx, 0x9c(%rax,%rcx,4)
jmp 0x23013
jmp 0x23015
cmpq $0x0, -0x10(%rbp)
je 0x23031
movq -0x10(%rbp), %rax
movsbq -0x1(%rbp), %rcx
movl 0xa8(%rax,%rcx,4), %eax
movl %eax, -0x2c(%rbp)
jmp 0x23038
xorl %eax, %eax
movl %eax, -0x2c(%rbp)
jmp 0x23038
movl -0x2c(%rbp), %eax
movl %eax, -0x18(%rbp)
cmpl $0x1, -0x18(%rbp)
ja 0x23080
jmp 0x23046
cmpq $0x0, -0x10(%rbp)
je 0x23061
movq -0x10(%rbp), %rax
movsbq -0x1(%rbp), %rcx
movl $0x0, 0xa8(%rax,%rcx,4)
jmp 0x23063
movzbl -0x12(%rbp), %eax
cmpl $0x30, %eax
jne 0x2307e
movq -0x10(%rbp), %rdi
movl $0x10, %edx
movsbl -0x1(%rbp), %esi
callq 0x6420
jmp 0x230b6
movl -0x18(%rbp), %eax
movl $0xffffffff, %ecx       # imm = 0xFFFFFFFF
cmpq %rcx, %rax
je 0x230b4
movl -0x18(%rbp), %eax
subl $0x1, %eax
movl %eax, -0x18(%rbp)
cmpq $0x0, -0x10(%rbp)
je 0x230b0
movl -0x18(%rbp), %edx
movq -0x10(%rbp), %rax
movsbq -0x1(%rbp), %rcx
movl %edx, 0xa8(%rax,%rcx,4)
jmp 0x230b2
jmp 0x230b4
jmp 0x230b6
jmp 0x230b8
jmp 0x230ba
movq -0x10(%rbp), %rax
movsbq -0x1(%rbp), %rcx
movb 0x98(%rax,%rcx), %al
movb %al, -0x12(%rbp)
movzbl -0x12(%rbp), %eax
andl $0x8, %eax
cmpl $0x0, %eax
je 0x231e4
movzbl -0x12(%rbp), %eax
andl $0x7, %eax
cmpl $0x1, %eax
jl 0x2315f
movb $0x30, -0x12(%rbp)
cmpq $0x0, -0x10(%rbp)
je 0x23109
movq -0x10(%rbp), %rax
movsbq -0x1(%rbp), %rcx
movl 0x9c(%rax,%rcx,4), %eax
movl %eax, -0x30(%rbp)
jmp 0x23110
xorl %eax, %eax
movl %eax, -0x30(%rbp)
jmp 0x23110
movl -0x30(%rbp), %eax
cmpl $0x0, %eax
je 0x23147
cmpq $0x0, -0x10(%rbp)
je 0x23134
movq -0x10(%rbp), %rax
movsbq -0x1(%rbp), %rcx
movl 0xa8(%rax,%rcx,4), %eax
movl %eax, -0x34(%rbp)
jmp 0x2313b
xorl %eax, %eax
movl %eax, -0x34(%rbp)
jmp 0x2313b
movl -0x34(%rbp), %eax
cmpl $0x0, %eax
jne 0x23147
movb $0x10, -0x12(%rbp)
movq -0x10(%rbp), %rdi
movb -0x1(%rbp), %al
movsbl %al, %esi
movzbl -0x12(%rbp), %edx
callq 0x6420
jmp 0x231e2
movq -0x10(%rbp), %rax
movzbl 0xeb(%rax), %eax
andl $0x1, %eax
cmpl $0x0, %eax
je 0x2317a
movb $0x1, %al
testb $0x1, %al
jne 0x23182
jmp 0x231e0
xorl %eax, %eax
testb $0x1, %al
jne 0x23182
jmp 0x231e0
movq -0x10(%rbp), %rax
movzbl 0xeb(%rax), %eax
andl $0x4, %eax
cmpl $0x0, %eax
je 0x2319d
movb $0x1, %al
testb $0x1, %al
jne 0x231a5
jmp 0x231e0
xorl %eax, %eax
testb $0x1, %al
jne 0x231a5
jmp 0x231e0
movq -0x10(%rbp), %rdi
movb -0x1(%rbp), %cl
movzbl -0x12(%rbp), %eax
addl $0x1, %eax
movsbl %cl, %esi
movzbl %al, %edx
callq 0x6420
movq -0x10(%rbp), %rdi
movq -0x10(%rbp), %rsi
addq $0x50, %rsi
movsbq -0x1(%rbp), %rax
imulq $0x18, %rax, %rax
addq %rax, %rsi
movl $0x5, %edx
callq 0x234b0
jmp 0x231e2
jmp 0x231e4
jmp 0x231e6
movb -0x1(%rbp), %al
addb $0x1, %al
movb %al, -0x1(%rbp)
jmp 0x22ec9
jmp 0x231f5
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x10(%rbp)
jmp 0x22eba
cmpb $0x0, 0xcd44(%rip)      # 0x2ff50
jne 0x232e6
movb $0x3, 0xcd37(%rip)      # 0x2ff50
leaq 0xc6b8(%rip), %rax      # 0x2f8d8
movq (%rax), %rax
movq %rax, -0x10(%rbp)
cmpq $0x0, -0x10(%rbp)
je 0x232e4
movq -0x10(%rbp), %rax
movzbl 0xf0(%rax), %eax
cmpl $0x0, %eax
jle 0x232d2
movq -0x10(%rbp), %rax
movzbl 0xeb(%rax), %eax
andl $0x1, %eax
cmpl $0x0, %eax
je 0x23261
movb $0x1, %al
testb $0x1, %al
jne 0x23269
jmp 0x232d2
xorl %eax, %eax
testb $0x1, %al
jne 0x23269
jmp 0x232d2
movq -0x10(%rbp), %rax
movzbl 0xeb(%rax), %eax
andl $0x4, %eax
cmpl $0x0, %eax
je 0x23284
movb $0x1, %al
testb $0x1, %al
jne 0x2328c
jmp 0x232d2
xorl %eax, %eax
testb $0x1, %al
jne 0x2328c
jmp 0x232d2
movq -0x10(%rbp), %rax
movzbl 0x98(%rax), %eax
cmpl $0x0, %eax
je 0x232d2
movq -0x10(%rbp), %rax
movzbl 0x98(%rax), %eax
cmpl $0x40, %eax
je 0x232d2
movq -0x10(%rbp), %rdi
callq 0x21a40
movsbl %al, %eax
cmpl $0x0, %eax
jne 0x232d0
movq -0x10(%rbp), %rax
movb 0xf0(%rax), %cl
addb $-0x1, %cl
movb %cl, 0xf0(%rax)
jmp 0x232d2
jmp 0x232d4
movq -0x10(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x10(%rbp)
jmp 0x23227
jmp 0x232f4
movb 0xcc64(%rip), %al       # 0x2ff50
addb $-0x1, %al
movb %al, 0xcc5c(%rip)       # 0x2ff50
addq $0x40, %rsp
popq %rbp
retq
nopw (%rax,%rax)