// File: /workspace/github_c_makefile_star2_O0/canboat[P]canboat/analyzer/fieldtype.c
// Function: fillFieldType
extern void fillFieldType(bool doUnitFixup)
{
  // Percolate fields from physical quantity to fieldtype
  for (size_t i = 0; i < fieldTypeCount; i++)
  {
    FieldType *ft = &fieldTypeList[i];

    if (ft->physical != NULL)
    {
      if (!isPhysicalQuantityListed(ft->physical))
      {
        logAbort("FieldType '%s' contains an unlisted physical quantity '%s'\n", ft->name, ft->physical->name);
      }
      if (ft->unit == NULL)
      {
        ft->unit = ft->physical->abbreviation;
        logDebug("Fieldtype '%s' inherits unit '%s' from physical type '%s'\n", ft->name, STRNULL(ft->unit), ft->physical->name);
      }
      if (ft->url == NULL)
      {
        ft->url = ft->physical->url;
      }
    }
  }

  // Percolate fields from base to derived field
  for (size_t i = 0; i < fieldTypeCount; i++)
  {
    FieldType *ft = &fieldTypeList[i];

    logDebug("filling '%s'\n", ft->name);

    if (ft->baseFieldType != NULL)
    {
      FieldType *base = getFieldType(ft->baseFieldType);

      if (base == NULL)
      {
        logAbort("invalid baseFieldType '%s' found in FieldType '%s'\n", ft->baseFieldType, ft->name);
      }
      if (base > ft)
      {
        logAbort("invalid baseFieldType '%s' must be ordered before FieldType '%s'\n", ft->baseFieldType, ft->name);
      }
      ft->baseFieldTypePtr = base;

      // Inherit parent fields
      if (ft->physical == NULL)
      {
        ft->physical = base->physical;
      }
      if (ft->hasSign == Null && base->hasSign != Null)
      {
        ft->hasSign = base->hasSign;
      }
      if (ft->unit == NULL && base->unit != NULL)
      {
        ft->unit = base->unit;
        logDebug("Fieldtype '%s' inherits unit '%s' from base type '%s'\n", ft->name, ft->unit, base->name);
      }
      if (ft->size == 0 && base->size != 0)
      {
        ft->size = base->size;
        logDebug("Fieldtype '%s' inherits size %u from base type '%s'\n", ft->name, ft->size, base->name);
      }
      if (ft->resolution == 0.0 && base->resolution != 0.0)
      {
        ft->resolution = base->resolution;
        logDebug("Fieldtype '%s' inherits resolution %g from base type '%s'\n", ft->name, ft->resolution, base->name);
      }
      else if (ft->resolution != 0.0 && base->resolution != 0.0 && ft->resolution != base->resolution)
      {
        logAbort("Cannot overrule resolution %g in '%s' with %g in '%s'\n", base->resolution, base->name, ft->resolution, ft->name);
      }
      if (ft->pf == NULL)
      {
        ft->pf = base->pf;
      }
    }

    if (ft->pf == NULL)
    {
      logAbort("FieldType '%s' has no print function\n", ft->name);
    }

    // Set the field range
    if (ft->size != 0 && ft->resolution != 0.0 && ft->hasSign != Null && ft->rangeMax == 0.0)
    {
      ft->rangeMin = getMinRange(ft->name, ft->size, ft->resolution, ft->hasSign == True, ft->offset);
      ft->rangeMax = getMaxRange(ft->name, ft->size, ft->resolution, ft->hasSign == True, ft->offset, NULL);
    }
    else
    {
      ft->rangeMin = nan("");
      ft->rangeMax = nan("");
    }
  }

  for (size_t i = 0; i < pgnListSize; i++)
  {
    uint32_t    pgn   = pgnList[i].pgn;
    const char *pname = pgnList[i].description;
    size_t      j;

    for (j = 0; pgnList[i].fieldList[j].name != NULL; j++)
    {
      Field     *f = &pgnList[i].fieldList[j];
      FieldType *ft;

      if (f->fieldType == NULL)
      {
        logAbort("PGN %u '%s' field '%s' contains NULL fieldType\n", pgn, pname, f->name);
      }
      ft = getFieldType(f->fieldType);
      if (ft == NULL)
      {
        logAbort("PGN %u '%s' field '%s' contains invalid fieldType '%s'\n", pgn, pname, f->name, f->fieldType);
      }
      f->ft = ft;

      if ((ft->hasSign == True && f->hasSign == false) || (ft->hasSign == False && f->hasSign == true))
      {
        logAbort(
            "PGN %u '%s' field '%s' contains different sign attribute than fieldType '%s'\n", pgn, pname, f->name, f->fieldType);
      }

      if (f->resolution == 0.0)
      {
        f->resolution = ft->resolution;
      }
      if (ft->resolution != 0.0 && ft->resolution != f->resolution)
      {
        logAbort("Cannot overrule resolution %g in '%s' with %g in PGN %u field '%s'\n",
                 ft->resolution,
                 ft->name,
                 f->resolution,
                 pgnList[i].pgn,
                 f->name);
      }

      if (ft->size != 0 && f->size == 0)
      {
        f->size = ft->size;
      }
      if (ft->size != 0 && ft->size != f->size)
      {
        logAbort(
            "Cannot overrule size %d in '%s' with %d in PGN %u field '%s'\n", ft->size, ft->name, f->size, pgnList[i].pgn, f->name);
      }

      if (ft->offset != 0 && f->offset == 0)
      {
        f->offset = ft->offset;
      }
      if (ft->offset != f->offset)
      {
        logAbort("Cannot overrule offset %d in '%s' with %d in PGN %u field '%s'\n",
                 ft->offset,
                 ft->name,
                 f->offset,
                 pgnList[i].pgn,
                 f->name);
      }

      if (ft->unit != NULL && f->unit == NULL)
      {
        f->unit = ft->unit;
      }
      if (f->unit != NULL && ft->unit != NULL && strcmp(f->unit, ft->unit) != 0
          && !(strcmp(f->unit, "deg") == 0 && strcmp(ft->unit, "rad") == 0))
      {
        logAbort("PGN %u '%s' field '%s' contains different unit attribute ('%s') than fieldType '%s' ('%s')\n",
                 pgn,
                 pname,
                 f->name,
                 f->unit,
                 f->fieldType,
                 ft->unit);
      }

      if (isnan(f->rangeMax) || f->rangeMax == 0.0)
      {
        f->rangeMin = ft->rangeMin;
        f->rangeMax = ft->rangeMax;
      }
      if (doUnitFixup && f->unit != NULL && f->resolution != 0.0)
      {
        fixupUnit(f);
      }
      if (f->unit != NULL && f->unit[0] == '=') // Is a match field
      {
        pgnList[i].hasMatchFields = true;
      }

      logDebug("%s size=%u res=%g sign=%u rangeMax=%g\n", f->name, f->size, f->resolution, ft->hasSign, f->rangeMax);

      if (f->size != 0 && f->resolution != 0.0 && ft->hasSign != Null && isnan(f->rangeMax))
      {
        f->rangeMin = getMinRange(f->name, f->size, f->resolution, f->hasSign, f->offset);
        f->rangeMax = getMaxRange(f->name, f->size, f->resolution, f->hasSign, f->offset, &f->lookup);
      }

      f->pgn   = &pgnList[i];
      f->order = j + 1;
    }
    if (pgnList[i].type == PACKET_FAST && !ALLOW_PGN_FAST_PACKET(pgn))
    {
      logAbort("PGN %u '%s' is outside fast-packet range\n", pgn, pgnList[i].description);
    }
    if (pgnList[i].type != PACKET_FAST && !ALLOW_PGN_SINGLE_FRAME(pgn))
    {
      logError("PGN %u '%s' is outside single-frame range\n", pgn, pgnList[i].description);
    }
    if (pgnList[i].repeatingCount1 != 0 && pgnList[i].repeatingStart1 == 0)
    {
      logAbort("PGN %u '%s' has no way to determine repeating field set 1\n", pgn, pgnList[i].description);
    }
    if (pgnList[i].repeatingCount2 != 0 && pgnList[i].repeatingStart2 == 0)
    {
      logAbort("PGN %u '%s' has no way to determine repeating field set 2\n", pgn, pgnList[i].description);
    }

    if (pgnList[i].interval == 0)
    {
      pgnList[i].complete |= PACKET_INTERVAL_UNKNOWN;
    }

    if (j == 0 && pgnList[i].complete == PACKET_COMPLETE)
    {
      logError("Internal error: PGN %d '%s' does not have fields.\n", pgnList[i].pgn, pgnList[i].description);
      exit(2);
    }
    pgnList[i].fieldCount = j;
    logDebug("PGN %u '%s' has %u fields\n", pgnList[i].pgn, pname, j);
  }

#ifndef EXPLAIN
  for (size_t i = 0; i < ARRAY_SIZE(fieldtypeEnums); i++)
  {
    uint32_t maxValue = (1 << fieldtypeEnums[i].size) - 1;

    for (size_t j = 0; j < maxValue; j++)
    {
      /* DISCARD */ (fieldtypeEnums[i].function.pair)(j); // Initialize all internal fields on init
    }
  }
#endif

  logDebug("Filled all fieldtypes\n");
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x80, %rsp
movb %dil, %al
andb $0x1, %al
movb %al, -0x1(%rbp)
movq $0x0, -0x10(%rbp)
cmpq $0xac, -0x10(%rbp)
jae 0x1e386
leaq 0x6d2f0(%rip), %rax     # 0x8b570
imulq $0x90, -0x10(%rbp), %rcx
addq %rcx, %rax
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rax
cmpq $0x0, 0x80(%rax)
je 0x1e373
movq -0x18(%rbp), %rax
movq 0x80(%rax), %rdi
callq 0x1ef80
testb $0x1, %al
jne 0x1e2d8
movq -0x18(%rbp), %rax
movq (%rax), %rsi
movq -0x18(%rbp), %rax
movq 0x80(%rax), %rax
movq (%rax), %rdx
leaq 0x165b4(%rip), %rdi     # 0x34885
movb $0x0, %al
callq 0x1f7d0
movq -0x18(%rbp), %rax
cmpq $0x0, 0x48(%rax)
jne 0x1e34f
movq -0x18(%rbp), %rax
movq 0x80(%rax), %rax
movq 0x18(%rax), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x48(%rax)
movq -0x18(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x68(%rbp)
movq -0x18(%rbp), %rax
cmpq $0x0, 0x48(%rax)
je 0x1e31e
movq -0x18(%rbp), %rax
movq 0x48(%rax), %rax
movq %rax, -0x70(%rbp)
jmp 0x1e32b
leaq 0xb2a4(%rip), %rax      # 0x295c9
movq %rax, -0x70(%rbp)
jmp 0x1e32b
movq -0x68(%rbp), %rsi
movq -0x70(%rbp), %rdx
movq -0x18(%rbp), %rax
movq 0x80(%rax), %rax
movq (%rax), %rcx
leaq 0x16579(%rip), %rdi     # 0x348c1
movb $0x0, %al
callq 0x1f670
movq -0x18(%rbp), %rax
cmpq $0x0, 0x20(%rax)
jne 0x1e371
movq -0x18(%rbp), %rax
movq 0x80(%rax), %rax
movq 0x28(%rax), %rcx
movq -0x18(%rbp), %rax
movq %rcx, 0x20(%rax)
jmp 0x1e373
jmp 0x1e375
movq -0x10(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x10(%rbp)
jmp 0x1e26b
movq $0x0, -0x20(%rbp)
cmpq $0xac, -0x20(%rbp)
jae 0x1e739
leaq 0x6d1cd(%rip), %rax     # 0x8b570
imulq $0x90, -0x20(%rbp), %rcx
addq %rcx, %rax
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rax
movq (%rax), %rsi
leaq 0x1653c(%rip), %rdi     # 0x348fc
movb $0x0, %al
callq 0x1f670
movq -0x28(%rbp), %rax
cmpq $0x0, 0x30(%rax)
je 0x1e60a
movq -0x28(%rbp), %rax
movq 0x30(%rax), %rdi
callq 0x1dcf0
movq %rax, -0x30(%rbp)
cmpq $0x0, -0x30(%rbp)
jne 0x1e40b
movq -0x28(%rbp), %rax
movq 0x30(%rax), %rsi
movq -0x28(%rbp), %rax
movq (%rax), %rdx
leaq 0x16506(%rip), %rdi     # 0x3490a
movb $0x0, %al
callq 0x1f7d0
movq -0x30(%rbp), %rax
cmpq -0x28(%rbp), %rax
jbe 0x1e432
movq -0x28(%rbp), %rax
movq 0x30(%rax), %rsi
movq -0x28(%rbp), %rax
movq (%rax), %rdx
leaq 0x16513(%rip), %rdi     # 0x3493e
movb $0x0, %al
callq 0x1f7d0
movq -0x30(%rbp), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x88(%rax)
movq -0x28(%rbp), %rax
cmpq $0x0, 0x80(%rax)
jne 0x1e465
movq -0x30(%rbp), %rax
movq 0x80(%rax), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x80(%rax)
movq -0x28(%rbp), %rax
cmpl $0x0, 0x60(%rax)
jne 0x1e487
movq -0x30(%rbp), %rax
cmpl $0x0, 0x60(%rax)
je 0x1e487
movq -0x30(%rbp), %rax
movl 0x60(%rax), %ecx
movq -0x28(%rbp), %rax
movl %ecx, 0x60(%rax)
movq -0x28(%rbp), %rax
cmpq $0x0, 0x48(%rax)
jne 0x1e4d1
movq -0x30(%rbp), %rax
cmpq $0x0, 0x48(%rax)
je 0x1e4d1
movq -0x30(%rbp), %rax
movq 0x48(%rax), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x48(%rax)
movq -0x28(%rbp), %rax
movq (%rax), %rsi
movq -0x28(%rbp), %rax
movq 0x48(%rax), %rdx
movq -0x30(%rbp), %rax
movq (%rax), %rcx
leaq 0x164b6(%rip), %rdi     # 0x34980
movb $0x0, %al
callq 0x1f670
movq -0x28(%rbp), %rax
cmpl $0x0, 0x28(%rax)
jne 0x1e516
movq -0x30(%rbp), %rax
cmpl $0x0, 0x28(%rax)
je 0x1e516
movq -0x30(%rbp), %rax
movl 0x28(%rax), %ecx
movq -0x28(%rbp), %rax
movl %ecx, 0x28(%rax)
movq -0x28(%rbp), %rax
movq (%rax), %rsi
movq -0x28(%rbp), %rax
movl 0x28(%rax), %edx
movq -0x30(%rbp), %rax
movq (%rax), %rcx
leaq 0x164a8(%rip), %rdi     # 0x349b7
movb $0x0, %al
callq 0x1f670
movq -0x28(%rbp), %rax
movsd 0x58(%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x1e579
jp 0x1e579
movq -0x30(%rbp), %rax
movsd 0x58(%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x1e540
jp 0x1e540
jmp 0x1e579
movq -0x30(%rbp), %rax
movsd 0x58(%rax), %xmm0
movq -0x28(%rbp), %rax
movsd %xmm0, 0x58(%rax)
movq -0x28(%rbp), %rax
movq (%rax), %rsi
movq -0x28(%rbp), %rax
movsd 0x58(%rax), %xmm0
movq -0x30(%rbp), %rax
movq (%rax), %rdx
leaq 0x1647c(%rip), %rdi     # 0x349ec
movb $0x1, %al
callq 0x1f670
jmp 0x1e5ed
movq -0x28(%rbp), %rax
movsd 0x58(%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x1e58f
jp 0x1e58f
jmp 0x1e5eb
movq -0x30(%rbp), %rax
movsd 0x58(%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x1e5a5
jp 0x1e5a5
jmp 0x1e5eb
movq -0x28(%rbp), %rax
movsd 0x58(%rax), %xmm0
movq -0x30(%rbp), %rax
ucomisd 0x58(%rax), %xmm0
jne 0x1e5bd
jp 0x1e5bd
jmp 0x1e5eb
movq -0x30(%rbp), %rax
movsd 0x58(%rax), %xmm0
movq -0x30(%rbp), %rax
movq (%rax), %rsi
movq -0x28(%rbp), %rax
movsd 0x58(%rax), %xmm1
movq -0x28(%rbp), %rax
movq (%rax), %rdx
leaq 0x16443(%rip), %rdi     # 0x34a27
movb $0x2, %al
callq 0x1f7d0
jmp 0x1e5ed
movq -0x28(%rbp), %rax
cmpq $0x0, 0x78(%rax)
jne 0x1e608
movq -0x30(%rbp), %rax
movq 0x78(%rax), %rcx
movq -0x28(%rbp), %rax
movq %rcx, 0x78(%rax)
jmp 0x1e60a
movq -0x28(%rbp), %rax
cmpq $0x0, 0x78(%rax)
jne 0x1e62a
movq -0x28(%rbp), %rax
movq (%rax), %rsi
leaq 0x1643b(%rip), %rdi     # 0x34a5e
movb $0x0, %al
callq 0x1f7d0
movq -0x28(%rbp), %rax
cmpl $0x0, 0x28(%rax)
je 0x1e6fc
movq -0x28(%rbp), %rax
movsd 0x58(%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x1e651
jp 0x1e651
jmp 0x1e6fc
movq -0x28(%rbp), %rax
cmpl $0x0, 0x60(%rax)
je 0x1e6fc
movq -0x28(%rbp), %rax
movsd 0x70(%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x1e6fc
jp 0x1e6fc
movq -0x28(%rbp), %rax
movq (%rax), %rdi
movq -0x28(%rbp), %rax
movl 0x28(%rax), %esi
movq -0x28(%rbp), %rax
movsd 0x58(%rax), %xmm0
movq -0x28(%rbp), %rax
cmpl $0x2, 0x60(%rax)
sete %al
movq -0x28(%rbp), %rcx
movl 0x50(%rcx), %ecx
movzbl %al, %edx
andl $0x1, %edx
callq 0x1efd0
movq -0x28(%rbp), %rax
movsd %xmm0, 0x68(%rax)
movq -0x28(%rbp), %rax
movq (%rax), %rdi
movq -0x28(%rbp), %rax
movl 0x28(%rax), %esi
movq -0x28(%rbp), %rax
movsd 0x58(%rax), %xmm0
movq -0x28(%rbp), %rax
cmpl $0x2, 0x60(%rax)
sete %al
movq -0x28(%rbp), %rcx
movl 0x50(%rcx), %ecx
movzbl %al, %edx
andl $0x1, %edx
xorl %eax, %eax
movl %eax, %r8d
callq 0x1f0b0
movq -0x28(%rbp), %rax
movsd %xmm0, 0x70(%rax)
jmp 0x1e726
leaq 0x9252(%rip), %rdi      # 0x27955
callq 0xd310
movq -0x28(%rbp), %rax
movsd %xmm0, 0x68(%rax)
leaq 0x923d(%rip), %rdi      # 0x27955
callq 0xd310
movq -0x28(%rbp), %rax
movsd %xmm0, 0x70(%rax)
jmp 0x1e728
movq -0x20(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x20(%rbp)
jmp 0x1e38e
movq $0x0, -0x38(%rbp)
movq -0x38(%rbp), %rax
leaq 0x5cec(%rip), %rcx      # 0x24438
cmpq (%rcx), %rax
jae 0x1ef5c
leaq 0x1dba4(%rip), %rax     # 0x3c300
imulq $0x15f8, -0x38(%rbp), %rcx # imm = 0x15F8
addq %rcx, %rax
movl 0x8(%rax), %eax
movl %eax, -0x3c(%rbp)
leaq 0x1db8c(%rip), %rax     # 0x3c300
imulq $0x15f8, -0x38(%rbp), %rcx # imm = 0x15F8
addq %rcx, %rax
movq (%rax), %rax
movq %rax, -0x48(%rbp)
movq $0x0, -0x50(%rbp)
leaq 0x1db6b(%rip), %rax     # 0x3c300
imulq $0x15f8, -0x38(%rbp), %rcx # imm = 0x15F8
addq %rcx, %rax
addq $0x18, %rax
imulq $0xa8, -0x50(%rbp), %rcx
addq %rcx, %rax
cmpq $0x0, (%rax)
je 0x1ecf6
leaq 0x1db40(%rip), %rax     # 0x3c300
imulq $0x15f8, -0x38(%rbp), %rcx # imm = 0x15F8
addq %rcx, %rax
addq $0x18, %rax
imulq $0xa8, -0x50(%rbp), %rcx
addq %rcx, %rax
movq %rax, -0x58(%rbp)
movq -0x58(%rbp), %rax
cmpq $0x0, 0x8(%rax)
jne 0x1e805
movl -0x3c(%rbp), %esi
movq -0x48(%rbp), %rdx
movq -0x58(%rbp), %rax
movq (%rax), %rcx
leaq 0x16286(%rip), %rdi     # 0x34a84
movb $0x0, %al
callq 0x1f7d0
movq -0x58(%rbp), %rax
movq 0x8(%rax), %rdi
callq 0x1dcf0
movq %rax, -0x60(%rbp)
cmpq $0x0, -0x60(%rbp)
jne 0x1e841
movl -0x3c(%rbp), %esi
movq -0x48(%rbp), %rdx
movq -0x58(%rbp), %rax
movq (%rax), %rcx
movq -0x58(%rbp), %rax
movq 0x8(%rax), %r8
leaq 0x1627a(%rip), %rdi     # 0x34ab4
movb $0x0, %al
callq 0x1f7d0
movq -0x60(%rbp), %rcx
movq -0x58(%rbp), %rax
movq %rcx, 0x88(%rax)
movq -0x60(%rbp), %rax
cmpl $0x2, 0x60(%rax)
jne 0x1e86b
movq -0x58(%rbp), %rax
movb 0x49(%rax), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x0, %eax
je 0x1e886
movq -0x60(%rbp), %rax
cmpl $0x1, 0x60(%rax)
jne 0x1e8aa
movq -0x58(%rbp), %rax
movb 0x49(%rax), %al
andb $0x1, %al
movzbl %al, %eax
cmpl $0x1, %eax
jne 0x1e8aa
movl -0x3c(%rbp), %esi
movq -0x48(%rbp), %rdx
movq -0x58(%rbp), %rax
movq (%rax), %rcx
movq -0x58(%rbp), %rax
movq 0x8(%rax), %r8
leaq 0x16249(%rip), %rdi     # 0x34aec
movb $0x0, %al
callq 0x1f7d0
movq -0x58(%rbp), %rax
movsd 0x30(%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x1e8d0
jp 0x1e8d0
movq -0x60(%rbp), %rax
movsd 0x58(%rax), %xmm0
movq -0x58(%rbp), %rax
movsd %xmm0, 0x30(%rax)
movq -0x60(%rbp), %rax
movsd 0x58(%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x1e8e6
jp 0x1e8e6
jmp 0x1e941
movq -0x60(%rbp), %rax
movsd 0x58(%rax), %xmm0
movq -0x58(%rbp), %rax
ucomisd 0x30(%rax), %xmm0
jne 0x1e8fe
jp 0x1e8fe
jmp 0x1e941
movq -0x60(%rbp), %rax
movsd 0x58(%rax), %xmm0
movq -0x60(%rbp), %rax
movq (%rax), %rsi
movq -0x58(%rbp), %rax
movsd 0x30(%rax), %xmm1
leaq 0x1d9e2(%rip), %rax     # 0x3c300
imulq $0x15f8, -0x38(%rbp), %rcx # imm = 0x15F8
addq %rcx, %rax
movl 0x8(%rax), %edx
movq -0x58(%rbp), %rax
movq (%rax), %rcx
leaq 0x16200(%rip), %rdi     # 0x34b3a
movb $0x2, %al
callq 0x1f7d0
movq -0x60(%rbp), %rax
cmpl $0x0, 0x28(%rax)
je 0x1e963
movq -0x58(%rbp), %rax
cmpl $0x0, 0x10(%rax)
jne 0x1e963
movq -0x60(%rbp), %rax
movl 0x28(%rax), %ecx
movq -0x58(%rbp), %rax
movl %ecx, 0x10(%rax)
movq -0x60(%rbp), %rax
cmpl $0x0, 0x28(%rax)
je 0x1e9bd
movq -0x60(%rbp), %rax
movl 0x28(%rax), %eax
movq -0x58(%rbp), %rcx
cmpl 0x10(%rcx), %eax
je 0x1e9bd
movq -0x60(%rbp), %rax
movl 0x28(%rax), %esi
movq -0x60(%rbp), %rax
movq (%rax), %rdx
movq -0x58(%rbp), %rax
movl 0x10(%rax), %ecx
leaq 0x1d967(%rip), %rax     # 0x3c300
imulq $0x15f8, -0x38(%rbp), %rdi # imm = 0x15F8
addq %rdi, %rax
movl 0x8(%rax), %r8d
movq -0x58(%rbp), %rax
movq (%rax), %r9
leaq 0x161c8(%rip), %rdi     # 0x34b7e
movb $0x0, %al
callq 0x1f7d0
movq -0x60(%rbp), %rax
cmpl $0x0, 0x50(%rax)
je 0x1e9df
movq -0x58(%rbp), %rax
cmpl $0x0, 0x28(%rax)
jne 0x1e9df
movq -0x60(%rbp), %rax
movl 0x50(%rax), %ecx
movq -0x58(%rbp), %rax
movl %ecx, 0x28(%rax)
movq -0x60(%rbp), %rax
movl 0x50(%rax), %eax
movq -0x58(%rbp), %rcx
cmpl 0x28(%rcx), %eax
je 0x1ea2f
movq -0x60(%rbp), %rax
movl 0x50(%rax), %esi
movq -0x60(%rbp), %rax
movq (%rax), %rdx
movq -0x58(%rbp), %rax
movl 0x28(%rax), %ecx
leaq 0x1d8f5(%rip), %rax     # 0x3c300
imulq $0x15f8, -0x38(%rbp), %rdi # imm = 0x15F8
addq %rdi, %rax
movl 0x8(%rax), %r8d
movq -0x58(%rbp), %rax
movq (%rax), %r9
leaq 0x16194(%rip), %rdi     # 0x34bbc
movb $0x0, %al
callq 0x1f7d0
movq -0x60(%rbp), %rax
cmpq $0x0, 0x48(%rax)
je 0x1ea55
movq -0x58(%rbp), %rax
cmpq $0x0, 0x18(%rax)
jne 0x1ea55
movq -0x60(%rbp), %rax
movq 0x48(%rax), %rcx
movq -0x58(%rbp), %rax
movq %rcx, 0x18(%rax)
movq -0x58(%rbp), %rax
cmpq $0x0, 0x18(%rax)
je 0x1eaf7
movq -0x60(%rbp), %rax
cmpq $0x0, 0x48(%rax)
je 0x1eaf7
movq -0x58(%rbp), %rax
movq 0x18(%rax), %rdi
movq -0x60(%rbp), %rax
movq 0x48(%rax), %rsi
callq 0xd190
cmpl $0x0, %eax
je 0x1eaf7
movq -0x58(%rbp), %rax
movq 0x18(%rax), %rdi
leaq 0x13c56(%rip), %rsi     # 0x326f2
callq 0xd190
cmpl $0x0, %eax
jne 0x1eabf
movq -0x60(%rbp), %rax
movq 0x48(%rax), %rdi
leaq 0xbf5e(%rip), %rsi      # 0x2aa13
callq 0xd190
cmpl $0x0, %eax
je 0x1eaf7
movl -0x3c(%rbp), %esi
movq -0x48(%rbp), %rdx
movq -0x58(%rbp), %rax
movq (%rax), %rcx
movq -0x58(%rbp), %rax
movq 0x18(%rax), %r8
movq -0x58(%rbp), %rax
movq 0x8(%rax), %r9
movq -0x60(%rbp), %rax
movq 0x48(%rax), %rax
leaq 0x16110(%rip), %rdi     # 0x34bfc
movq %rax, (%rsp)
movb $0x0, %al
callq 0x1f7d0
movq -0x58(%rbp), %rax
movsd 0xa0(%rax), %xmm0
ucomisd %xmm0, %xmm0
setp %al
testb $0x1, %al
jne 0x1eb25
movq -0x58(%rbp), %rax
movsd 0xa0(%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x1eb4f
jp 0x1eb4f
movq -0x60(%rbp), %rax
movsd 0x68(%rax), %xmm0
movq -0x58(%rbp), %rax
movsd %xmm0, 0x98(%rax)
movq -0x60(%rbp), %rax
movsd 0x70(%rax), %xmm0
movq -0x58(%rbp), %rax
movsd %xmm0, 0xa0(%rax)
testb $0x1, -0x1(%rbp)
je 0x1eb7f
movq -0x58(%rbp), %rax
cmpq $0x0, 0x18(%rax)
je 0x1eb7f
movq -0x58(%rbp), %rax
movsd 0x30(%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x1eb76
jp 0x1eb76
jmp 0x1eb7f
movq -0x58(%rbp), %rdi
callq 0x1dd80
movq -0x58(%rbp), %rax
cmpq $0x0, 0x18(%rax)
je 0x1ebb3
movq -0x58(%rbp), %rax
movq 0x18(%rax), %rax
movsbl (%rax), %eax
cmpl $0x3d, %eax
jne 0x1ebb3
leaq 0x1d75f(%rip), %rax     # 0x3c300
imulq $0x15f8, -0x38(%rbp), %rcx # imm = 0x15F8
addq %rcx, %rax
movb $0x1, 0x15d1(%rax)
movq -0x58(%rbp), %rax
movq (%rax), %rsi
movq -0x58(%rbp), %rax
movl 0x10(%rax), %edx
movq -0x58(%rbp), %rax
movsd 0x30(%rax), %xmm0
movq -0x60(%rbp), %rax
movl 0x60(%rax), %ecx
movq -0x58(%rbp), %rax
movsd 0xa0(%rax), %xmm1
leaq 0x16074(%rip), %rdi     # 0x34c58
movb $0x2, %al
callq 0x1f670
movq -0x58(%rbp), %rax
cmpl $0x0, 0x10(%rax)
je 0x1ecb7
movq -0x58(%rbp), %rax
movsd 0x30(%rax), %xmm0
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x1ec12
jp 0x1ec12
jmp 0x1ecb7
movq -0x60(%rbp), %rax
cmpl $0x0, 0x60(%rax)
je 0x1ecb7
movq -0x58(%rbp), %rax
movsd 0xa0(%rax), %xmm0
ucomisd %xmm0, %xmm0
setp %al
testb $0x1, %al
jne 0x1ec39
jmp 0x1ecb7
movq -0x58(%rbp), %rax
movq (%rax), %rdi
movq -0x58(%rbp), %rax
movl 0x10(%rax), %esi
movq -0x58(%rbp), %rax
movsd 0x30(%rax), %xmm0
movq -0x58(%rbp), %rax
movb 0x49(%rax), %al
movq -0x58(%rbp), %rcx
movl 0x28(%rcx), %ecx
andb $0x1, %al
movzbl %al, %edx
callq 0x1efd0
movq -0x58(%rbp), %rax
movsd %xmm0, 0x98(%rax)
movq -0x58(%rbp), %rax
movq (%rax), %rdi
movq -0x58(%rbp), %rax
movl 0x10(%rax), %esi
movq -0x58(%rbp), %rax
movsd 0x30(%rax), %xmm0
movq -0x58(%rbp), %rax
movb 0x49(%rax), %al
movq -0x58(%rbp), %rcx
movl 0x28(%rcx), %ecx
movq -0x58(%rbp), %r8
addq $0x60, %r8
andb $0x1, %al
movzbl %al, %edx
callq 0x1f0b0
movq -0x58(%rbp), %rax
movsd %xmm0, 0xa0(%rax)
leaq 0x1d642(%rip), %rcx     # 0x3c300
imulq $0x15f8, -0x38(%rbp), %rax # imm = 0x15F8
addq %rax, %rcx
movq -0x58(%rbp), %rax
movq %rcx, 0x90(%rax)
movq -0x50(%rbp), %rax
addq $0x1, %rax
movb %al, %cl
movq -0x58(%rbp), %rax
movb %cl, 0x4b(%rax)
movq -0x50(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x50(%rbp)
jmp 0x1e78e
leaq 0x1d603(%rip), %rax     # 0x3c300
imulq $0x15f8, -0x38(%rbp), %rcx # imm = 0x15F8
addq %rcx, %rax
cmpl $0x1, 0x10(%rax)
jne 0x1ed4f
cmpl $0x10000, -0x3c(%rbp)   # imm = 0x10000
jb 0x1ed20
cmpl $0x1ffff, -0x3c(%rbp)   # imm = 0x1FFFF
jb 0x1ed4f
cmpl $0x40000, -0x3c(%rbp)   # imm = 0x40000
jae 0x1ed4f
movl -0x3c(%rbp), %esi
leaq 0x1d5cd(%rip), %rax     # 0x3c300
imulq $0x15f8, -0x38(%rbp), %rcx # imm = 0x15F8
addq %rcx, %rax
movq (%rax), %rdx
leaq 0x15f37(%rip), %rdi     # 0x34c7f
movb $0x0, %al
callq 0x1f7d0
leaq 0x1d5aa(%rip), %rax     # 0x3c300
imulq $0x15f8, -0x38(%rbp), %rcx # imm = 0x15F8
addq %rcx, %rax
cmpl $0x1, 0x10(%rax)
je 0x1ed9f
cmpl $0x10000, -0x3c(%rbp)   # imm = 0x10000
jb 0x1ed9f
cmpl $0x1f000, -0x3c(%rbp)   # imm = 0x1F000
jae 0x1ed9f
movl -0x3c(%rbp), %esi
leaq 0x1d57d(%rip), %rax     # 0x3c300
imulq $0x15f8, -0x38(%rbp), %rcx # imm = 0x15F8
addq %rcx, %rax
movq (%rax), %rdx
leaq 0x15f11(%rip), %rdi     # 0x34ca9
movb $0x0, %al
callq 0x1f720
leaq 0x1d55a(%rip), %rax     # 0x3c300
imulq $0x15f8, -0x38(%rbp), %rcx # imm = 0x15F8
addq %rcx, %rax
movzbl 0x15eb(%rax), %eax
cmpl $0x0, %eax
je 0x1ee01
leaq 0x1d53c(%rip), %rax     # 0x3c300
imulq $0x15f8, -0x38(%rbp), %rcx # imm = 0x15F8
addq %rcx, %rax
movzbl 0x15ed(%rax), %eax
cmpl $0x0, %eax
jne 0x1ee01
movl -0x3c(%rbp), %esi
leaq 0x1d51b(%rip), %rax     # 0x3c300
imulq $0x15f8, -0x38(%rbp), %rcx # imm = 0x15F8
addq %rcx, %rax
movq (%rax), %rdx
leaq 0x15eda(%rip), %rdi     # 0x34cd4
movb $0x0, %al
callq 0x1f7d0
leaq 0x1d4f8(%rip), %rax     # 0x3c300
imulq $0x15f8, -0x38(%rbp), %rcx # imm = 0x15F8
addq %rcx, %rax
movzbl 0x15ec(%rax), %eax
cmpl $0x0, %eax
je 0x1ee63
leaq 0x1d4da(%rip), %rax     # 0x3c300
imulq $0x15f8, -0x38(%rbp), %rcx # imm = 0x15F8
addq %rcx, %rax
movzbl 0x15ee(%rax), %eax
cmpl $0x0, %eax
jne 0x1ee63
movl -0x3c(%rbp), %esi
leaq 0x1d4b9(%rip), %rax     # 0x3c300
imulq $0x15f8, -0x38(%rbp), %rcx # imm = 0x15F8
addq %rcx, %rax
movq (%rax), %rdx
leaq 0x15eb3(%rip), %rdi     # 0x34d0f
movb $0x0, %al
callq 0x1f7d0
leaq 0x1d496(%rip), %rax     # 0x3c300
imulq $0x15f8, -0x38(%rbp), %rcx # imm = 0x15F8
addq %rcx, %rax
movzwl 0x15e8(%rax), %eax
cmpl $0x0, %eax
jne 0x1ee9e
leaq 0x1d478(%rip), %rax     # 0x3c300
imulq $0x15f8, -0x38(%rbp), %rcx # imm = 0x15F8
addq %rcx, %rax
movzwl 0xc(%rax), %ecx
orl $0x20, %ecx
movw %cx, 0xc(%rax)
cmpq $0x0, -0x50(%rbp)
jne 0x1ef02
leaq 0x1d454(%rip), %rax     # 0x3c300
imulq $0x15f8, -0x38(%rbp), %rcx # imm = 0x15F8
addq %rcx, %rax
movzwl 0xc(%rax), %eax
cmpl $0x0, %eax
jne 0x1ef02
leaq 0x1d439(%rip), %rax     # 0x3c300
imulq $0x15f8, -0x38(%rbp), %rcx # imm = 0x15F8
addq %rcx, %rax
movl 0x8(%rax), %esi
leaq 0x1d424(%rip), %rax     # 0x3c300
imulq $0x15f8, -0x38(%rbp), %rcx # imm = 0x15F8
addq %rcx, %rax
movq (%rax), %rdx
leaq 0x15e59(%rip), %rdi     # 0x34d4a
movb $0x0, %al
callq 0x1f720
movl $0x2, %edi
callq 0xd2e0
movq -0x50(%rbp), %rax
movl %eax, %ecx
leaq 0x1d3f1(%rip), %rax     # 0x3c300
imulq $0x15f8, -0x38(%rbp), %rdx # imm = 0x15F8
addq %rdx, %rax
movl %ecx, 0x15c0(%rax)
leaq 0x1d3d9(%rip), %rax     # 0x3c300
imulq $0x15f8, -0x38(%rbp), %rcx # imm = 0x15F8
addq %rcx, %rax
movl 0x8(%rax), %esi
movq -0x48(%rbp), %rdx
movq -0x50(%rbp), %rcx
leaq 0x15e39(%rip), %rdi     # 0x34d7d
movb $0x0, %al
callq 0x1f670
movq -0x38(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x38(%rbp)
jmp 0x1e741
leaq 0x15e35(%rip), %rdi     # 0x34d98
movb $0x0, %al
callq 0x1f670
addq $0x80, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)