// File: /workspace/github_cpp_makefile_star2_O2/tomfunkhouser[P]gaps/apps/conf2img/conf2img.cpp
// Function: Redraw()
static void
Redraw(void)
{
  // Statistics variables
  static RNTime start_time;
  if (current_image_index == -1) start_time.Read(); 
  char output_image_filename[4096];

  // Get camera and name for next image
  R3Point target_viewpoint;
  R3Vector target_towards, target_up;
  if (!LoadNextCamera(target_viewpoint, target_towards, target_up)) {
    if (print_verbose) {
      printf("  Time = %.2f seconds\n", start_time.Elapsed());
      printf("  # Images = %d\n", current_image_index);
      fflush(stdout);
    }
    exit(0);
  }

  // Get image name
  char image_name_buffer[2048];
  char *name = image_name_buffer;
  if (configuration.NImages() > 0) {
    RGBDImage *image = configuration.Image(current_image_index);
    const char *filename = image->DepthFilename();
    if (!filename) filename = image->ColorFilename();
    if (!filename) filename = "default";
    strncpy(image_name_buffer, filename, 2047);
    if (strrchr(image_name_buffer, '/')) name = strrchr(image_name_buffer, '/')+1;
    char *endp = strrchr(name, '.');
    if (endp) *endp = '\0';
  }
  else {
    sprintf(image_name_buffer, "%06d", current_image_index);
  }

  // Print debug statement
  if (print_debug) {
    printf("  Rendering %s ...\n", name);
    fflush(stdout);
  }

  // Create mask image
  R2Grid *mask_image = NULL;
  if (mask_by_filled_depth && !mesh.IsEmpty()) {
    // Get filled depth image
    RGBDImage *image = configuration.Image(current_image_index);
    if (!image->ReadDepthChannel()) RNAbort("Unable to read depth channel for %s", name);
    R2Grid filled_depth_image(*image->DepthChannel());
    if (!image->ReleaseDepthChannel()) RNAbort("Unable to release depth channel for %s", name);
    filled_depth_image.Substitute(0.0, R2_GRID_UNKNOWN_VALUE);
    filled_depth_image.FillHoles();

    // Get rendered depth image
    R2Grid rendered_depth_image(width, height);
    RenderMesh(mesh, BLACK_RENDERING, target_viewpoint, target_towards, target_up);
    if (!CaptureDepth(rendered_depth_image)) RNAbort("Unable to capture depth for %s", name);

    // Create mask
    mask_image = new R2Grid(width, height);
    for (int i = 0; i < width*height; i++) {
      RNScalar filled_depth_value = filled_depth_image.GridValue(i);
      if (filled_depth_value == R2_GRID_UNKNOWN_VALUE) continue;
      if (filled_depth_value == 0) continue;
      RNScalar rendered_depth_value = rendered_depth_image.GridValue(i);
      if (rendered_depth_value == R2_GRID_UNKNOWN_VALUE) continue;
      if (rendered_depth_value == 0) continue;
      RNScalar ratio = filled_depth_value / rendered_depth_value;
      if ((ratio < 0.8) || (ratio > 1.25)) continue;
      mask_image->SetGridValue(i, 1);
    }
  }

  // Capture and write depth image
  sprintf(output_image_filename, "%s/%s_depth.png", output_image_directory, name);
  if (capture_depth_images && !RNFileExists(output_image_filename)) {
    R2Grid depth_image(width, height);
    RenderConfiguration(configuration, target_viewpoint, target_towards, target_up);
    if (CaptureDepth(depth_image)) {
      depth_image.Multiply(png_distance_scale);
      depth_image.Threshold(65535, R2_GRID_KEEP_VALUE, 0);
      if (mask_image) depth_image.Mask(*mask_image);
      depth_image.WriteFile(output_image_filename);
    }
  }

  // Capture and write color image
  sprintf(output_image_filename, "%s/%s_color.jpg", output_image_directory, name);
  if (capture_color_images && !RNFileExists(output_image_filename)) {
    R2Image color_image(width, height, 3);
    RenderConfiguration(configuration, target_viewpoint, target_towards, target_up);
    if (CaptureColor(color_image)) {
      sprintf(output_image_filename, "%s/%s_color.jpg", output_image_directory, name);
      color_image.Write(output_image_filename);
    }
  }

  // Capture and write mesh color image
  sprintf(output_image_filename, "%s/%s_mesh_color.jpg", output_image_directory, name);
  if (capture_mesh_color_images && !RNFileExists(output_image_filename)) {
    R2Image color_image(width, height, 3);
    RenderMesh(mesh, COLOR_RENDERING, target_viewpoint, target_towards, target_up);
    if (CaptureColor(color_image)) {
      sprintf(output_image_filename, "%s/%s_mesh_color.jpg", output_image_directory, name);
      color_image.Write(output_image_filename);
    }
  }

  // Capture and write mesh depth image
  sprintf(output_image_filename, "%s/%s_mesh_depth.png", output_image_directory, name);
  if (!mesh.IsEmpty() && capture_mesh_depth_images && !RNFileExists(output_image_filename)) {
    R2Grid depth_image(width, height);
    RenderMesh(mesh, BLACK_RENDERING, target_viewpoint, target_towards, target_up);
    if (CaptureDepth(depth_image)) {
      depth_image.Multiply(png_distance_scale);
      depth_image.Threshold(65535, R2_GRID_KEEP_VALUE, 0);
      if (mask_image) depth_image.Mask(*mask_image);
      sprintf(output_image_filename, "%s/%s_mesh_depth.png", output_image_directory, name);
      depth_image.WriteFile(output_image_filename);
    }
  }

  // Capture and write mesh position images (in camera coordinates)
  sprintf(output_image_filename, "%s/%s_mesh_pz.png", output_image_directory, name);
  if (!mesh.IsEmpty() && capture_mesh_position_images && !RNFileExists(output_image_filename)) {
    R2Grid position_image(width, height);
    RenderMesh(mesh, CAMERA_PX_RENDERING, target_viewpoint, target_towards, target_up);
    if (CaptureInteger(position_image)) {
      if (mask_image) position_image.Mask(*mask_image);
      sprintf(output_image_filename, "%s/%s_mesh_px.png", output_image_directory, name);
      position_image.WriteFile(output_image_filename);
    }
    RenderMesh(mesh, CAMERA_PY_RENDERING, target_viewpoint, target_towards, target_up);
    if (CaptureInteger(position_image)) {
      if (mask_image) position_image.Mask(*mask_image);
      sprintf(output_image_filename, "%s/%s_mesh_py.png", output_image_directory, name);
      position_image.WriteFile(output_image_filename);
    }
    RenderMesh(mesh, CAMERA_PZ_RENDERING, target_viewpoint, target_towards, target_up);
    if (CaptureInteger(position_image)) {
      if (mask_image) position_image.Mask(*mask_image);
      sprintf(output_image_filename, "%s/%s_mesh_pz.png", output_image_directory, name);
      position_image.WriteFile(output_image_filename);
    }
  }

  // Capture and write mesh position images (in world coordinates)
  sprintf(output_image_filename, "%s/%s_mesh_wpz.png", output_image_directory, name);
  if (!mesh.IsEmpty() && capture_mesh_wposition_images && !RNFileExists(output_image_filename)) {
    R2Grid position_image(width, height);
    RenderMesh(mesh, WORLD_PX_RENDERING, target_viewpoint, target_towards, target_up);
    if (CaptureInteger(position_image)) {
      if (mask_image) position_image.Mask(*mask_image);
      sprintf(output_image_filename, "%s/%s_mesh_wpx.png", output_image_directory, name);
      position_image.WriteFile(output_image_filename);
    }
    RenderMesh(mesh, WORLD_PY_RENDERING, target_viewpoint, target_towards, target_up);
    if (CaptureInteger(position_image)) {
      if (mask_image) position_image.Mask(*mask_image);
      sprintf(output_image_filename, "%s/%s_mesh_wpy.png", output_image_directory, name);
      position_image.WriteFile(output_image_filename);
    }
    RenderMesh(mesh, WORLD_PZ_RENDERING, target_viewpoint, target_towards, target_up);
    if (CaptureInteger(position_image)) {
      if (mask_image) position_image.Mask(*mask_image);
      sprintf(output_image_filename, "%s/%s_mesh_wpz.png", output_image_directory, name);
      position_image.WriteFile(output_image_filename);
    }
  }

  // Capture and write mesh normal images (in camera coordinates)
  sprintf(output_image_filename, "%s/%s_mesh_nd.png", output_image_directory, name);
  if (!mesh.IsEmpty() && capture_mesh_normal_images && !RNFileExists(output_image_filename)) {
    R2Grid normal_image(width, height);
    RenderMesh(mesh, CAMERA_NX_RENDERING, target_viewpoint, target_towards, target_up);
    if (CaptureInteger(normal_image)) {
      if (mask_image) normal_image.Mask(*mask_image);
      sprintf(output_image_filename, "%s/%s_mesh_nx.png", output_image_directory, name);
      normal_image.WriteFile(output_image_filename);
    }
    RenderMesh(mesh, CAMERA_NY_RENDERING, target_viewpoint, target_towards, target_up);
    if (CaptureInteger(normal_image)) {
      if (mask_image) normal_image.Mask(*mask_image);
      sprintf(output_image_filename, "%s/%s_mesh_ny.png", output_image_directory, name);
      normal_image.WriteFile(output_image_filename);
    }
    RenderMesh(mesh, CAMERA_NZ_RENDERING, target_viewpoint, target_towards, target_up);
    if (CaptureInteger(normal_image)) {
      if (mask_image) normal_image.Mask(*mask_image);
      sprintf(output_image_filename, "%s/%s_mesh_nz.png", output_image_directory, name);
      normal_image.WriteFile(output_image_filename);
    }
    RenderMesh(mesh, CAMERA_ND_RENDERING, target_viewpoint, target_towards, target_up);
    if (CaptureInteger(normal_image)) {
      if (mask_image) normal_image.Mask(*mask_image);
      sprintf(output_image_filename, "%s/%s_mesh_nd.png", output_image_directory, name);
      normal_image.WriteFile(output_image_filename);
    }
  }

  // Capture and write mesh normal images (in world coordinates)
  sprintf(output_image_filename, "%s/%s_mesh_wnd.png", output_image_directory, name);
  if (!mesh.IsEmpty() && capture_mesh_wnormal_images && !RNFileExists(output_image_filename)) {
    R2Grid normal_image(width, height);
    RenderMesh(mesh, WORLD_NX_RENDERING, target_viewpoint, target_towards, target_up);
    if (CaptureInteger(normal_image)) {
      if (mask_image) normal_image.Mask(*mask_image);
      sprintf(output_image_filename, "%s/%s_mesh_wnx.png", output_image_directory, name);
      normal_image.WriteFile(output_image_filename);
    }
    RenderMesh(mesh, WORLD_NY_RENDERING, target_viewpoint, target_towards, target_up);
    if (CaptureInteger(normal_image)) {
      if (mask_image) normal_image.Mask(*mask_image);
      sprintf(output_image_filename, "%s/%s_mesh_wny.png", output_image_directory, name);
      normal_image.WriteFile(output_image_filename);
    }
    RenderMesh(mesh, WORLD_NZ_RENDERING, target_viewpoint, target_towards, target_up);
    if (CaptureInteger(normal_image)) {
      if (mask_image) normal_image.Mask(*mask_image);
      sprintf(output_image_filename, "%s/%s_mesh_wnz.png", output_image_directory, name);
      normal_image.WriteFile(output_image_filename);
    }
    RenderMesh(mesh, WORLD_ND_RENDERING, target_viewpoint, target_towards, target_up);
    if (CaptureInteger(normal_image)) {
      if (mask_image) normal_image.Mask(*mask_image);
      sprintf(output_image_filename, "%s/%s_mesh_wnd.png", output_image_directory, name);
      normal_image.WriteFile(output_image_filename);
    }
  }

  // Capture and write mesh ndotv image
  sprintf(output_image_filename, "%s/%s_mesh_ndotv.png", output_image_directory, name);
  if (!mesh.IsEmpty() && capture_mesh_ndotv_images && !RNFileExists(output_image_filename)) {
    R2Grid ndotv_image(width, height);
    RenderMesh(mesh, NDOTV_RENDERING, target_viewpoint, target_towards, target_up);
    if (CaptureInteger(ndotv_image)) {
      if (mask_image) ndotv_image.Mask(*mask_image);
      sprintf(output_image_filename, "%s/%s_mesh_ndotv.png", output_image_directory, name);
      ndotv_image.WriteFile(output_image_filename);
    }
  }
  
  // Capture and write mesh face ID image
  sprintf(output_image_filename, "%s/%s_mesh_face.pfm", output_image_directory, name);
  if (!mesh.IsEmpty() && capture_mesh_face_images && !RNFileExists(output_image_filename)) {
    R2Grid face_image(width, height);
    RenderMesh(mesh, FACE_INDEX_RENDERING, target_viewpoint, target_towards, target_up);
    if (CaptureInteger(face_image)) {
      if (mask_image) face_image.Mask(*mask_image);
      sprintf(output_image_filename, "%s/%s_mesh_face.pfm", output_image_directory, name);
      face_image.WriteFile(output_image_filename);
    }
  }

  // Capture and write mesh material ID image
  sprintf(output_image_filename, "%s/%s_mesh_material.png", output_image_directory, name);
  if (!mesh.IsEmpty() && capture_mesh_material_images && !RNFileExists(output_image_filename)) {
    R2Grid material_image(width, height);
    RenderMesh(mesh, FACE_MATERIAL_RENDERING, target_viewpoint, target_towards, target_up);
    if (CaptureInteger(material_image)) {
      if (mask_image) material_image.Mask(*mask_image);
      sprintf(output_image_filename, "%s/%s_mesh_material.png", output_image_directory, name);
      material_image.WriteFile(output_image_filename);
    }
  }

  // Capture and write mesh segment ID image
  sprintf(output_image_filename, "%s/%s_mesh_segment.png", output_image_directory, name);
  if (!mesh.IsEmpty() && capture_mesh_segment_images && !RNFileExists(output_image_filename)) {
    R2Grid face_image(width, height);
    RenderMesh(mesh, FACE_INDEX_RENDERING, target_viewpoint, target_towards, target_up);
    if (CaptureInteger(face_image)) {
      if (mask_image) face_image.Mask(*mask_image);
      R2Image segment_image(width, height, 3);
      for (int ix = 0; ix < width; ix++) {
        for (int iy = 0; iy < height; iy++) { 
          RNScalar face_value = face_image.GridValue(ix, iy);
          if ((face_value == R2_GRID_UNKNOWN_VALUE) || (face_value == 0)) continue;
          int face_index = (int) (face_value - 1.0 + 0.5);
          assert((face_index >= 0) && (face_index < mesh.NFaces()));
          R3MeshFace *face = mesh.Face(face_index);
          int segment = mesh.FaceSegment(face);
          if (segment < 0) continue;
          int region_index = (segment / 1000000) + 1;
          assert(region_index < 256);
          int object_index = (segment % 1000000) + 1;
          assert((object_index >> 8) < 256);
          unsigned char pixel[4];
          pixel[0] = region_index;
          pixel[1] = (object_index>>8) & 0xFF;
          pixel[2] = object_index & 0xFF;
          segment_image.SetPixel(ix, iy, pixel);
        }
      }
      segment_image.Write(output_image_filename);
    }
  }

  // Capture and write mesh category ID image
  sprintf(output_image_filename, "%s/%s_mesh_category.png", output_image_directory, name);
  if (!mesh.IsEmpty() && capture_mesh_category_images && !RNFileExists(output_image_filename)) {
    R2Grid category_image(width, height);
    RenderMesh(mesh, FACE_CATEGORY_RENDERING, target_viewpoint, target_towards, target_up);
    if (CaptureInteger(category_image)) {
      if (mask_image) category_image.Mask(*mask_image);
      sprintf(output_image_filename, "%s/%s_mesh_category.png", output_image_directory, name);
      category_image.WriteFile(output_image_filename);
    }
  }

  // Delete mask image
  if (mask_image) delete mask_image;
    
#ifdef USE_GLUT
  // Redraw
  glutPostRedisplay();
#endif
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x1a08, %rsp           # imm = 0x1A08
movb 0x1401b0(%rip), %al     # 0x168af8
testb %al, %al
je 0x29cfe
cmpl $-0x1, 0x13b075(%rip)   # 0x1639cc
jne 0x28965
leaq 0x140188(%rip), %rdi    # 0x168ae8
callq 0x2a976
leaq 0x20(%rsp), %rdi
callq 0x87382
leaq 0x8(%rsp), %rdi
callq 0x87b42
leaq 0x38(%rsp), %rdi
callq 0x87b42
movslq 0x13b042(%rip), %rcx    # 0x1639cc
leal 0x1(%rcx), %eax
movl %eax, 0x13b039(%rip)    # 0x1639cc
movl 0x13ff73(%rip), %edx    # 0x16890c
testl %edx, %edx
jle 0x28a09
cmpl %edx, %eax
jge 0x29d2f
movq 0x13ff54(%rip), %rax    # 0x168900
movq 0x8(%rax,%rcx,8), %rbx
movl $0x1700, %edi           # imm = 0x1700
callq 0x23cd0
callq 0x23c60
movq %rbx, %rdi
xorl %esi, %esi
callq 0x38dd6
leaq 0x20(%rsp), %rdi
movq %rbx, %rsi
callq 0x8766e
leaq 0x48(%rbx), %rsi
leaq 0x1200(%rsp), %r14
movq %r14, %rdi
callq 0x884aa
leaq 0x8(%rsp), %rdi
movq %r14, %rsi
callq 0x880b4
addq $0x30, %rbx
leaq 0x38(%rsp), %rdi
movq %rbx, %rsi
jmp 0x28aff
movl 0x13fe6d(%rip), %ecx    # 0x16887c
testl %ecx, %ecx
jle 0x29d2f
cmpl %ecx, %eax
jge 0x29d2f
movq 0x13fe4a(%rip), %rcx    # 0x168870
cltq
movq (%rcx,%rax,8), %rbx
cmpl $0x0, 0x28(%rbx)
jne 0x28a4a
movq (%rbx), %rax
movq %rbx, %rdi
callq *0xf8(%rax)
movq (%rbx), %rax
movq %rbx, %rdi
callq *0x148(%rax)
movl $0x1701, %edi           # imm = 0x1701
callq 0x23cd0
callq 0x23c60
leaq 0x1200(%rsp), %r14
movsd 0xc45b7(%rip), %xmm0    # 0xed020
movsd 0xc459f(%rip), %xmm1    # 0xed010
movq %r14, %rdi
movq %rbx, %rsi
callq 0x31752
movq %r14, %rdi
callq 0x56e0c
movl $0x1700, %edi           # imm = 0x1700
callq 0x23cd0
callq 0x23c60
leaq 0x30(%rbx), %rdi
callq 0x823bc
movq %rax, %rdi
callq 0x56e0c
leaq 0x1200(%rsp), %r14
movq %r14, %rdi
movq %rbx, %rsi
callq 0x2a986
leaq 0x20(%rsp), %rdi
movq %r14, %rsi
callq 0x8766e
leaq 0x1200(%rsp), %r14
movq %r14, %rdi
movq %rbx, %rsi
callq 0x2a9a0
leaq 0x8(%rsp), %rdi
movq %r14, %rsi
callq 0x880b4
leaq 0x1200(%rsp), %r14
movq %r14, %rdi
movq %rbx, %rsi
callq 0x2a9ba
leaq 0x38(%rsp), %rdi
movq %r14, %rsi
callq 0x880b4
cmpl $0x0, 0x13fd71(%rip)    # 0x16887c
movslq 0x13aeba(%rip), %rdx    # 0x1639cc
jle 0x28b80
movq 0x13fd55(%rip), %rax    # 0x168870
movq (%rax,%rdx,8), %rcx
movq 0x1e0(%rcx), %rax
testq %rax, %rax
jne 0x28b32
movq 0x1d8(%rcx), %rax
testq %rax, %rax
leaq 0xc49c2(%rip), %rsi     # 0xed4fe
cmovneq %rax, %rsi
leaq 0x1200(%rsp), %r14
movl $0x7ff, %edx            # imm = 0x7FF
movq %r14, %rdi
callq 0x23430
pushq $0x2f
popq %rsi
movq %r14, %rdi
callq 0x239d0
leaq 0x1(%rax), %rbx
testq %rax, %rax
cmoveq %r14, %rbx
pushq $0x2e
popq %rsi
movq %rbx, %rdi
callq 0x239d0
testq %rax, %rax
je 0x28b99
movb $0x0, (%rax)
jmp 0x28b99
leaq 0xc4b3c(%rip), %rsi     # 0xed6c3
leaq 0x1200(%rsp), %rbx
movq %rbx, %rdi
xorl %eax, %eax
callq 0x23140
cmpb $0x1, 0x13fecc(%rip)    # 0x168a6c
jne 0x28bc2
leaq 0xc4b1f(%rip), %rdi     # 0xed6c8
movq %rbx, %rsi
xorl %eax, %eax
callq 0x23080
movq 0x13a366(%rip), %rax    # 0x162f20
movq (%rax), %rdi
callq 0x23ab0
xorl %r14d, %r14d
cmpb $0x1, 0x13feb0(%rip)    # 0x168a7c
jne 0x28d72
cmpl $0x0, 0x13fd4b(%rip)    # 0x168924
je 0x28d72
movslq 0x13ade6(%rip), %rax    # 0x1639cc
movq 0x13fc83(%rip), %rcx    # 0x168870
movq (%rcx,%rax,8), %r14
movq (%r14), %rax
movq %r14, %rdi
callq *0x108(%rax)
testl %eax, %eax
jne 0x28c12
leaq 0xc4ad4(%rip), %rdi     # 0xed6dc
movq %rbx, %rsi
xorl %eax, %eax
callq 0xa60f4
movq 0x18(%r14), %rax
movq 0x18(%rax), %rsi
leaq 0x58(%rsp), %rdi
callq 0x90278
movq (%r14), %rax
movq %r14, %rdi
callq *0x158(%rax)
testl %eax, %eax
jne 0x28c45
leaq 0xc4ac5(%rip), %rdi     # 0xed700
movq %rbx, %rsi
xorl %eax, %eax
callq 0xa60f4
leaq 0x58(%rsp), %rdi
movsd 0xc43f6(%rip), %xmm1    # 0xed048
xorpd %xmm0, %xmm0
callq 0x93c2a
leaq 0x58(%rsp), %rdi
callq 0x90f50
movl 0x13fe15(%rip), %esi    # 0x168a80
movl 0x13fe13(%rip), %edx    # 0x168a84
leaq 0x130(%rsp), %rdi
callq 0x8f8ec
leaq 0x20(%rsp), %rsi
leaq 0x8(%rsp), %rdx
leaq 0x38(%rsp), %rcx
xorl %edi, %edi
callq 0x29e05
leaq 0x130(%rsp), %rdi
callq 0x2a3c4
movl $0xd0, %edi
callq 0x238e0
movq %rax, %r14
movl 0x13fdcc(%rip), %esi    # 0x168a80
movl 0x13fdca(%rip), %edx    # 0x168a84
movq %rax, %rdi
callq 0x8f8ec
movl 0x13fdbc(%rip), %eax    # 0x168a84
imull 0x13fdb1(%rip), %eax    # 0x168a80
movq 0x110(%rsp), %rcx
movq 0x1e8(%rsp), %rdx
xorl %esi, %esi
testl %eax, %eax
cmovlel %esi, %eax
xorpd %xmm0, %xmm0
movsd 0xc436e(%rip), %xmm1    # 0xed060
movsd 0xc436e(%rip), %xmm2    # 0xed068
movabsq $0x3ff0000000000000, %rdi # imm = 0x3FF0000000000000
movsd 0xc433c(%rip), %xmm5    # 0xed048
cmpq %rsi, %rax
je 0x28d5b
movsd (%rcx,%rsi,8), %xmm3
ucomisd %xmm5, %xmm3
jne 0x28d1e
jnp 0x28d56
ucomisd %xmm0, %xmm3
jne 0x28d26
jnp 0x28d56
movsd (%rdx,%rsi,8), %xmm4
ucomisd %xmm5, %xmm4
jne 0x28d33
jnp 0x28d56
ucomisd %xmm0, %xmm4
jne 0x28d3b
jnp 0x28d56
divsd %xmm4, %xmm3
ucomisd %xmm3, %xmm1
ja 0x28d56
ucomisd %xmm2, %xmm3
ja 0x28d56
movq 0xb8(%r14), %r8
movq %rdi, (%r8,%rsi,8)
incq %rsi
jmp 0x28d0c
leaq 0x130(%rsp), %rdi
callq 0x90430
leaq 0x58(%rsp), %rdi
callq 0x90430
movq 0x13fce7(%rip), %rdx    # 0x168a60
leaq 0xc4786(%rip), %rsi     # 0xed506
leaq 0x200(%rsp), %rdi
movq %rbx, %rcx
xorl %eax, %eax
callq 0x23140
cmpb $0x1, 0x13fd1f(%rip)    # 0x168ab8
jne 0x28e41
leaq 0x200(%rsp), %rdi
callq 0xa57a0
testl %eax, %eax
jne 0x28e41
movl 0x13fcc6(%rip), %esi    # 0x168a80
movl 0x13fcc4(%rip), %edx    # 0x168a84
leaq 0x58(%rsp), %rdi
callq 0x8f8ec
leaq 0x20(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x2a57b
leaq 0x58(%rsp), %rdi
callq 0x2a3c4
movsd 0x13abd5(%rip), %xmm0   # 0x1639c0
leaq 0x58(%rsp), %rdi
callq 0x93d56
leaq 0x58(%rsp), %rdi
movsd 0xc423e(%rip), %xmm0    # 0xed040
movsd 0xc422e(%rip), %xmm1    # 0xed038
xorpd %xmm2, %xmm2
callq 0x91c54
testq %r14, %r14
je 0x28e25
leaq 0x58(%rsp), %rdi
movq %r14, %rsi
callq 0x93ed4
leaq 0x58(%rsp), %rdi
leaq 0x200(%rsp), %rsi
callq 0x97f20
leaq 0x58(%rsp), %rdi
callq 0x90430
movq 0x13fc18(%rip), %rdx    # 0x168a60
leaq 0xc48d8(%rip), %rsi     # 0xed727
leaq 0x200(%rsp), %rdi
movq %rbx, %rcx
xorl %eax, %eax
callq 0x23140
cmpb $0x1, 0x13fc4c(%rip)    # 0x168ab4
jne 0x28ee7
leaq 0x200(%rsp), %rdi
callq 0xa57a0
testl %eax, %eax
jne 0x28ee7
movl 0x13fbff(%rip), %esi    # 0x168a80
movl 0x13fbfd(%rip), %edx    # 0x168a84
leaq 0x58(%rsp), %rdi
pushq $0x3
popq %rcx
callq 0x9ec42
leaq 0x20(%rsp), %rdi
leaq 0x8(%rsp), %rsi
callq 0x2a57b
leaq 0x58(%rsp), %rdi
callq 0x9f5d4
movq 0x13fbac(%rip), %rdx    # 0x168a60
leaq 0xc486c(%rip), %rsi     # 0xed727
leaq 0x200(%rsp), %r15
movq %r15, %rdi
movq %rbx, %rcx
xorl %eax, %eax
callq 0x23140
leaq 0x58(%rsp), %rdi
movq %r15, %rsi
callq 0xa087a
leaq 0x58(%rsp), %rdi
callq 0x9ee84
movq 0x13fb72(%rip), %rdx    # 0x168a60
leaq 0xc4842(%rip), %rsi     # 0xed737
leaq 0x200(%rsp), %rdi
movq %rbx, %rcx
xorl %eax, %eax
callq 0x23140
cmpb $0x1, 0x13fbae(%rip)    # 0x168abc
jne 0x28f99
leaq 0x200(%rsp), %rdi
callq 0xa57a0
testl %eax, %eax
jne 0x28f99
movl 0x13fb55(%rip), %esi    # 0x168a80
movl 0x13fb53(%rip), %edx    # 0x168a84
leaq 0x58(%rsp), %rdi
pushq $0x3
popq %rcx
callq 0x9ec42
pushq $0x1
popq %rdi
leaq 0x20(%rsp), %rsi
leaq 0x8(%rsp), %rdx
leaq 0x38(%rsp), %rcx
callq 0x29e05
leaq 0x58(%rsp), %rdi
callq 0x9f5d4
movq 0x13fafa(%rip), %rdx    # 0x168a60
leaq 0xc47ca(%rip), %rsi     # 0xed737
leaq 0x200(%rsp), %r15
movq %r15, %rdi
movq %rbx, %rcx
xorl %eax, %eax
callq 0x23140
leaq 0x58(%rsp), %rdi
movq %r15, %rsi
callq 0xa087a
leaq 0x58(%rsp), %rdi
callq 0x9ee84
movq 0x13fac0(%rip), %rdx    # 0x168a60
leaq 0xc47a5(%rip), %rsi     # 0xed74c
leaq 0x200(%rsp), %rdi
movq %rbx, %rcx
xorl %eax, %eax
callq 0x23140
cmpl $0x0, 0x13f964(%rip)    # 0x168924
je 0x2909a
testb $0x1, 0x13faf3(%rip)    # 0x168ac0
je 0x2909a
leaq 0x200(%rsp), %rdi
callq 0xa57a0
testl %eax, %eax
jne 0x2909a
movl 0x13fa92(%rip), %esi    # 0x168a80
movl 0x13fa90(%rip), %edx    # 0x168a84
leaq 0x58(%rsp), %rdi
callq 0x8f8ec
leaq 0x20(%rsp), %rsi
leaq 0x8(%rsp), %rdx
leaq 0x38(%rsp), %rcx
xorl %edi, %edi
callq 0x29e05
leaq 0x58(%rsp), %rdi
callq 0x2a3c4
movsd 0x13a99a(%rip), %xmm0   # 0x1639c0
leaq 0x58(%rsp), %rdi
callq 0x93d56
leaq 0x58(%rsp), %rdi
movsd 0xc4003(%rip), %xmm0    # 0xed040
movsd 0xc3ff3(%rip), %xmm1    # 0xed038
xorpd %xmm2, %xmm2
callq 0x91c54
testq %r14, %r14
je 0x29060
leaq 0x58(%rsp), %rdi
movq %r14, %rsi
callq 0x93ed4
movq 0x13f9f9(%rip), %rdx    # 0x168a60
leaq 0xc46de(%rip), %rsi     # 0xed74c
leaq 0x200(%rsp), %r15
movq %r15, %rdi
movq %rbx, %rcx
xorl %eax, %eax
callq 0x23140
leaq 0x58(%rsp), %rdi
movq %r15, %rsi
callq 0x97f20
leaq 0x58(%rsp), %rdi
callq 0x90430
movq 0x13f9bf(%rip), %rdx    # 0x168a60
leaq 0xc46b9(%rip), %rsi     # 0xed761
leaq 0x200(%rsp), %rdi
movq %rbx, %rcx
xorl %eax, %eax
callq 0x23140
cmpl $0x0, 0x13f863(%rip)    # 0x168924
je 0x29232
testb $0x1, 0x13f9f6(%rip)    # 0x168ac4
je 0x29232
leaq 0x200(%rsp), %rdi
callq 0xa57a0
testl %eax, %eax
jne 0x29232
movl 0x13f991(%rip), %esi    # 0x168a80
movl 0x13f98f(%rip), %edx    # 0x168a84
leaq 0x58(%rsp), %rdi
callq 0x8f8ec
pushq $0x6
popq %rdi
leaq 0x20(%rsp), %rsi
leaq 0x8(%rsp), %rdx
leaq 0x38(%rsp), %rcx
callq 0x29e05
leaq 0x58(%rsp), %rdi
callq 0x2a89a
testq %r14, %r14
je 0x29132
leaq 0x58(%rsp), %rdi
movq %r14, %rsi
callq 0x93ed4
movq 0x13f927(%rip), %rdx    # 0x168a60
leaq 0xc4633(%rip), %rsi     # 0xed773
leaq 0x200(%rsp), %r15
movq %r15, %rdi
movq %rbx, %rcx
xorl %eax, %eax
callq 0x23140
leaq 0x58(%rsp), %rdi
movq %r15, %rsi
callq 0x97f20
pushq $0x7
popq %rdi
leaq 0x20(%rsp), %rsi
leaq 0x8(%rsp), %rdx
leaq 0x38(%rsp), %rcx
callq 0x29e05
leaq 0x58(%rsp), %rdi
callq 0x2a89a
testq %r14, %r14
je 0x29195
leaq 0x58(%rsp), %rdi
movq %r14, %rsi
callq 0x93ed4
movq 0x13f8c4(%rip), %rdx    # 0x168a60
leaq 0xc45e2(%rip), %rsi     # 0xed785
leaq 0x200(%rsp), %r15
movq %r15, %rdi
movq %rbx, %rcx
xorl %eax, %eax
callq 0x23140
leaq 0x58(%rsp), %rdi
movq %r15, %rsi
callq 0x97f20
pushq $0x8
popq %rdi
leaq 0x20(%rsp), %rsi
leaq 0x8(%rsp), %rdx
leaq 0x38(%rsp), %rcx
callq 0x29e05
leaq 0x58(%rsp), %rdi
callq 0x2a89a
testq %r14, %r14
je 0x291f8
leaq 0x58(%rsp), %rdi
movq %r14, %rsi
callq 0x93ed4
movq 0x13f861(%rip), %rdx    # 0x168a60
leaq 0xc455b(%rip), %rsi     # 0xed761
leaq 0x200(%rsp), %r15
movq %r15, %rdi
movq %rbx, %rcx
xorl %eax, %eax
callq 0x23140
leaq 0x58(%rsp), %rdi
movq %r15, %rsi
callq 0x97f20
leaq 0x58(%rsp), %rdi
callq 0x90430
movq 0x13f827(%rip), %rdx    # 0x168a60
leaq 0xc4557(%rip), %rsi     # 0xed797
leaq 0x200(%rsp), %rdi
movq %rbx, %rcx
xorl %eax, %eax
callq 0x23140
cmpl $0x0, 0x13f6cb(%rip)    # 0x168924
je 0x293ca
testb $0x1, 0x13f862(%rip)    # 0x168ac8
je 0x293ca
leaq 0x200(%rsp), %rdi
callq 0xa57a0
testl %eax, %eax
jne 0x293ca
movl 0x13f7f9(%rip), %esi    # 0x168a80
movl 0x13f7f7(%rip), %edx    # 0x168a84
leaq 0x58(%rsp), %rdi
callq 0x8f8ec
pushq $0x9
popq %rdi
leaq 0x20(%rsp), %rsi
leaq 0x8(%rsp), %rdx
leaq 0x38(%rsp), %rcx
callq 0x29e05
leaq 0x58(%rsp), %rdi
callq 0x2a89a
testq %r14, %r14
je 0x292ca
leaq 0x58(%rsp), %rdi
movq %r14, %rsi
callq 0x93ed4
movq 0x13f78f(%rip), %rdx    # 0x168a60
leaq 0xc44d2(%rip), %rsi     # 0xed7aa
leaq 0x200(%rsp), %r15
movq %r15, %rdi
movq %rbx, %rcx
xorl %eax, %eax
callq 0x23140
leaq 0x58(%rsp), %rdi
movq %r15, %rsi
callq 0x97f20
pushq $0xa
popq %rdi
leaq 0x20(%rsp), %rsi
leaq 0x8(%rsp), %rdx
leaq 0x38(%rsp), %rcx
callq 0x29e05
leaq 0x58(%rsp), %rdi
callq 0x2a89a
testq %r14, %r14
je 0x2932d
leaq 0x58(%rsp), %rdi
movq %r14, %rsi
callq 0x93ed4
movq 0x13f72c(%rip), %rdx    # 0x168a60
leaq 0xc4482(%rip), %rsi     # 0xed7bd
leaq 0x200(%rsp), %r15
movq %r15, %rdi
movq %rbx, %rcx
xorl %eax, %eax
callq 0x23140
leaq 0x58(%rsp), %rdi
movq %r15, %rsi
callq 0x97f20
pushq $0xb
popq %rdi
leaq 0x20(%rsp), %rsi
leaq 0x8(%rsp), %rdx
leaq 0x38(%rsp), %rcx
callq 0x29e05
leaq 0x58(%rsp), %rdi
callq 0x2a89a
testq %r14, %r14
je 0x29390
leaq 0x58(%rsp), %rdi
movq %r14, %rsi
callq 0x93ed4
movq 0x13f6c9(%rip), %rdx    # 0x168a60
leaq 0xc43f9(%rip), %rsi     # 0xed797
leaq 0x200(%rsp), %r15
movq %r15, %rdi
movq %rbx, %rcx
xorl %eax, %eax
callq 0x23140
leaq 0x58(%rsp), %rdi
movq %r15, %rsi
callq 0x97f20
leaq 0x58(%rsp), %rdi
callq 0x90430
movq 0x13f68f(%rip), %rdx    # 0x168a60
leaq 0xc43f8(%rip), %rsi     # 0xed7d0
leaq 0x200(%rsp), %rdi
movq %rbx, %rcx
xorl %eax, %eax
callq 0x23140
cmpl $0x0, 0x13f533(%rip)    # 0x168924
je 0x295c5
testb $0x1, 0x13f6ce(%rip)    # 0x168acc
je 0x295c5
leaq 0x200(%rsp), %rdi
callq 0xa57a0
testl %eax, %eax
jne 0x295c5
movl 0x13f661(%rip), %esi    # 0x168a80
movl 0x13f65f(%rip), %edx    # 0x168a84
leaq 0x58(%rsp), %rdi
callq 0x8f8ec
pushq $0xc
popq %rdi
leaq 0x20(%rsp), %rsi
leaq 0x8(%rsp), %rdx
leaq 0x38(%rsp), %rcx
callq 0x29e05
leaq 0x58(%rsp), %rdi
callq 0x2a89a
testq %r14, %r14
je 0x29462
leaq 0x58(%rsp), %rdi
movq %r14, %rsi
callq 0x93ed4
movq 0x13f5f7(%rip), %rdx    # 0x168a60
leaq 0xc4372(%rip), %rsi     # 0xed7e2
leaq 0x200(%rsp), %r15
movq %r15, %rdi
movq %rbx, %rcx
xorl %eax, %eax
callq 0x23140
leaq 0x58(%rsp), %rdi
movq %r15, %rsi
callq 0x97f20
pushq $0xd
popq %rdi
leaq 0x20(%rsp), %rsi
leaq 0x8(%rsp), %rdx
leaq 0x38(%rsp), %rcx
callq 0x29e05
leaq 0x58(%rsp), %rdi
callq 0x2a89a
testq %r14, %r14
je 0x294c5
leaq 0x58(%rsp), %rdi
movq %r14, %rsi
callq 0x93ed4
movq 0x13f594(%rip), %rdx    # 0x168a60
leaq 0xc4321(%rip), %rsi     # 0xed7f4
leaq 0x200(%rsp), %r15
movq %r15, %rdi
movq %rbx, %rcx
xorl %eax, %eax
callq 0x23140
leaq 0x58(%rsp), %rdi
movq %r15, %rsi
callq 0x97f20
pushq $0xe
popq %rdi
leaq 0x20(%rsp), %rsi
leaq 0x8(%rsp), %rdx
leaq 0x38(%rsp), %rcx
callq 0x29e05
leaq 0x58(%rsp), %rdi
callq 0x2a89a
testq %r14, %r14
je 0x29528
leaq 0x58(%rsp), %rdi
movq %r14, %rsi
callq 0x93ed4
movq 0x13f531(%rip), %rdx    # 0x168a60
leaq 0xc42d0(%rip), %rsi     # 0xed806
leaq 0x200(%rsp), %r15
movq %r15, %rdi
movq %rbx, %rcx
xorl %eax, %eax
callq 0x23140
leaq 0x58(%rsp), %rdi
movq %r15, %rsi
callq 0x97f20
pushq $0xf
popq %rdi
leaq 0x20(%rsp), %rsi
leaq 0x8(%rsp), %rdx
leaq 0x38(%rsp), %rcx
callq 0x29e05
leaq 0x58(%rsp), %rdi
callq 0x2a89a
testq %r14, %r14
je 0x2958b
leaq 0x58(%rsp), %rdi
movq %r14, %rsi
callq 0x93ed4
movq 0x13f4ce(%rip), %rdx    # 0x168a60
leaq 0xc4237(%rip), %rsi     # 0xed7d0
leaq 0x200(%rsp), %r15
movq %r15, %rdi
movq %rbx, %rcx
xorl %eax, %eax
callq 0x23140
leaq 0x58(%rsp), %rdi
movq %r15, %rsi
callq 0x97f20
leaq 0x58(%rsp), %rdi
callq 0x90430
movq 0x13f494(%rip), %rdx    # 0x168a60
leaq 0xc4245(%rip), %rsi     # 0xed818
leaq 0x200(%rsp), %rdi
movq %rbx, %rcx
xorl %eax, %eax
callq 0x23140
cmpl $0x0, 0x13f338(%rip)    # 0x168924
je 0x297c0
testb $0x1, 0x13f4d7(%rip)    # 0x168ad0
je 0x297c0
leaq 0x200(%rsp), %rdi
callq 0xa57a0
testl %eax, %eax
jne 0x297c0
movl 0x13f466(%rip), %esi    # 0x168a80
movl 0x13f464(%rip), %edx    # 0x168a84
leaq 0x58(%rsp), %rdi
callq 0x8f8ec
pushq $0x10
popq %rdi
leaq 0x20(%rsp), %rsi
leaq 0x8(%rsp), %rdx
leaq 0x38(%rsp), %rcx
callq 0x29e05
leaq 0x58(%rsp), %rdi
callq 0x2a89a
testq %r14, %r14
je 0x2965d
leaq 0x58(%rsp), %rdi
movq %r14, %rsi
callq 0x93ed4
movq 0x13f3fc(%rip), %rdx    # 0x168a60
leaq 0xc41c0(%rip), %rsi     # 0xed82b
leaq 0x200(%rsp), %r15
movq %r15, %rdi
movq %rbx, %rcx
xorl %eax, %eax
callq 0x23140
leaq 0x58(%rsp), %rdi
movq %r15, %rsi
callq 0x97f20
pushq $0x11
popq %rdi
leaq 0x20(%rsp), %rsi
leaq 0x8(%rsp), %rdx
leaq 0x38(%rsp), %rcx
callq 0x29e05
leaq 0x58(%rsp), %rdi
callq 0x2a89a
testq %r14, %r14
je 0x296c0
leaq 0x58(%rsp), %rdi
movq %r14, %rsi
callq 0x93ed4
movq 0x13f399(%rip), %rdx    # 0x168a60
leaq 0xc4170(%rip), %rsi     # 0xed83e
leaq 0x200(%rsp), %r15
movq %r15, %rdi
movq %rbx, %rcx
xorl %eax, %eax
callq 0x23140
leaq 0x58(%rsp), %rdi
movq %r15, %rsi
callq 0x97f20
pushq $0x12
popq %rdi
leaq 0x20(%rsp), %rsi
leaq 0x8(%rsp), %rdx
leaq 0x38(%rsp), %rcx
callq 0x29e05
leaq 0x58(%rsp), %rdi
callq 0x2a89a
testq %r14, %r14
je 0x29723
leaq 0x58(%rsp), %rdi
movq %r14, %rsi
callq 0x93ed4
movq 0x13f336(%rip), %rdx    # 0x168a60
leaq 0xc4120(%rip), %rsi     # 0xed851
leaq 0x200(%rsp), %r15
movq %r15, %rdi
movq %rbx, %rcx
xorl %eax, %eax
callq 0x23140
leaq 0x58(%rsp), %rdi
movq %r15, %rsi
callq 0x97f20
pushq $0x13
popq %rdi
leaq 0x20(%rsp), %rsi
leaq 0x8(%rsp), %rdx
leaq 0x38(%rsp), %rcx
callq 0x29e05
leaq 0x58(%rsp), %rdi
callq 0x2a89a
testq %r14, %r14
je 0x29786
leaq 0x58(%rsp), %rdi
movq %r14, %rsi
callq 0x93ed4
movq 0x13f2d3(%rip), %rdx    # 0x168a60
leaq 0xc4084(%rip), %rsi     # 0xed818
leaq 0x200(%rsp), %r15
movq %r15, %rdi
movq %rbx, %rcx
xorl %eax, %eax
callq 0x23140
leaq 0x58(%rsp), %rdi
movq %r15, %rsi
callq 0x97f20
leaq 0x58(%rsp), %rdi
callq 0x90430
movq 0x13f299(%rip), %rdx    # 0x168a60
leaq 0xc4096(%rip), %rsi     # 0xed864
leaq 0x200(%rsp), %rdi
movq %rbx, %rcx
xorl %eax, %eax
callq 0x23140
cmpl $0x0, 0x13f13d(%rip)    # 0x168924
je 0x29892
testb $0x1, 0x13f2e0(%rip)    # 0x168ad4
je 0x29892
leaq 0x200(%rsp), %rdi
callq 0xa57a0
testl %eax, %eax
jne 0x29892
movl 0x13f26b(%rip), %esi    # 0x168a80
movl 0x13f269(%rip), %edx    # 0x168a84
leaq 0x58(%rsp), %rdi
callq 0x8f8ec
pushq $0x14
popq %rdi
leaq 0x20(%rsp), %rsi
leaq 0x8(%rsp), %rdx
leaq 0x38(%rsp), %rcx
callq 0x29e05
leaq 0x58(%rsp), %rdi
callq 0x2a89a
testq %r14, %r14
je 0x29858
leaq 0x58(%rsp), %rdi
movq %r14, %rsi
callq 0x93ed4
movq 0x13f201(%rip), %rdx    # 0x168a60
leaq 0xc3ffe(%rip), %rsi     # 0xed864
leaq 0x200(%rsp), %r15
movq %r15, %rdi
movq %rbx, %rcx
xorl %eax, %eax
callq 0x23140
leaq 0x58(%rsp), %rdi
movq %r15, %rsi
callq 0x97f20
leaq 0x58(%rsp), %rdi
callq 0x90430
movq 0x13f1c7(%rip), %rdx    # 0x168a60
leaq 0xc3fd9(%rip), %rsi     # 0xed879
leaq 0x200(%rsp), %rdi
movq %rbx, %rcx
xorl %eax, %eax
callq 0x23140
cmpl $0x0, 0x13f06b(%rip)    # 0x168924
je 0x29964
testb $0x1, 0x13f212(%rip)    # 0x168ad8
je 0x29964
leaq 0x200(%rsp), %rdi
callq 0xa57a0
testl %eax, %eax
jne 0x29964
movl 0x13f199(%rip), %esi    # 0x168a80
movl 0x13f197(%rip), %edx    # 0x168a84
leaq 0x58(%rsp), %rdi
callq 0x8f8ec
pushq $0x2
popq %rdi
leaq 0x20(%rsp), %rsi
leaq 0x8(%rsp), %rdx
leaq 0x38(%rsp), %rcx
callq 0x29e05
leaq 0x58(%rsp), %rdi
callq 0x2a89a
testq %r14, %r14
je 0x2992a
leaq 0x58(%rsp), %rdi
movq %r14, %rsi
callq 0x93ed4
movq 0x13f12f(%rip), %rdx    # 0x168a60
leaq 0xc3f41(%rip), %rsi     # 0xed879
leaq 0x200(%rsp), %r15
movq %r15, %rdi
movq %rbx, %rcx
xorl %eax, %eax
callq 0x23140
leaq 0x58(%rsp), %rdi
movq %r15, %rsi
callq 0x97f20
leaq 0x58(%rsp), %rdi
callq 0x90430
movq 0x13f0f5(%rip), %rdx    # 0x168a60
leaq 0xc3f1b(%rip), %rsi     # 0xed88d
leaq 0x200(%rsp), %rdi
movq %rbx, %rcx
xorl %eax, %eax
callq 0x23140
cmpl $0x0, 0x13ef99(%rip)    # 0x168924
je 0x29a36
testb $0x1, 0x13f144(%rip)    # 0x168adc
je 0x29a36
leaq 0x200(%rsp), %rdi
callq 0xa57a0
testl %eax, %eax
jne 0x29a36
movl 0x13f0c7(%rip), %esi    # 0x168a80
movl 0x13f0c5(%rip), %edx    # 0x168a84
leaq 0x58(%rsp), %rdi
callq 0x8f8ec
pushq $0x3
popq %rdi
leaq 0x20(%rsp), %rsi
leaq 0x8(%rsp), %rdx
leaq 0x38(%rsp), %rcx
callq 0x29e05
leaq 0x58(%rsp), %rdi
callq 0x2a89a
testq %r14, %r14
je 0x299fc
leaq 0x58(%rsp), %rdi
movq %r14, %rsi
callq 0x93ed4
movq 0x13f05d(%rip), %rdx    # 0x168a60
leaq 0xc3e83(%rip), %rsi     # 0xed88d
leaq 0x200(%rsp), %r15
movq %r15, %rdi
movq %rbx, %rcx
xorl %eax, %eax
callq 0x23140
leaq 0x58(%rsp), %rdi
movq %r15, %rsi
callq 0x97f20
leaq 0x58(%rsp), %rdi
callq 0x90430
movq 0x13f023(%rip), %rdx    # 0x168a60
leaq 0xc3e61(%rip), %rsi     # 0xed8a5
leaq 0x200(%rsp), %rdi
movq %rbx, %rcx
xorl %eax, %eax
callq 0x23140
cmpl $0x0, 0x13eec7(%rip)    # 0x168924
je 0x29bfb
testb $0x1, 0x13f076(%rip)    # 0x168ae0
je 0x29bfb
leaq 0x200(%rsp), %rdi
callq 0xa57a0
testl %eax, %eax
jne 0x29bfb
movl 0x13eff5(%rip), %esi    # 0x168a80
movl 0x13eff3(%rip), %edx    # 0x168a84
leaq 0x58(%rsp), %rdi
callq 0x8f8ec
pushq $0x2
popq %rdi
leaq 0x20(%rsp), %rsi
leaq 0x8(%rsp), %rdx
leaq 0x38(%rsp), %rcx
callq 0x29e05
leaq 0x58(%rsp), %rdi
callq 0x2a89a
testq %r14, %r14
je 0x29ace
leaq 0x58(%rsp), %rdi
movq %r14, %rsi
callq 0x93ed4
movq %r14, 0x128(%rsp)
movl 0x13efa4(%rip), %esi    # 0x168a80
movl 0x13efa2(%rip), %edx    # 0x168a84
leaq 0x130(%rsp), %rdi
pushq $0x3
popq %rcx
callq 0x9ec42
xorl %ebp, %ebp
movsd 0xc354c(%rip), %xmm1    # 0xed048
xorpd %xmm2, %xmm2
movl $0xf4240, %r14d         # imm = 0xF4240
leaq 0x130(%rsp), %r15
leaq 0x54(%rsp), %r12
cmpl 0x13ef67(%rip), %ebp    # 0x168a80
jge 0x29bc7
xorl %r13d, %r13d
cmpl 0x13ef5b(%rip), %r13d   # 0x168a84
jge 0x29bc0
movq 0x110(%rsp), %rax
movl 0x120(%rsp), %ecx
imull %r13d, %ecx
addl %ebp, %ecx
movslq %ecx, %rcx
movsd (%rax,%rcx,8), %xmm0
ucomisd %xmm1, %xmm0
jne 0x29b54
jnp 0x29bb8
ucomisd %xmm2, %xmm0
jne 0x29b5c
jnp 0x29bb8
addsd 0xc350c(%rip), %xmm0    # 0xed070
addsd 0xc34ac(%rip), %xmm0    # 0xed018
cvttsd2si %xmm0, %eax
movq 0x13edc1(%rip), %rcx    # 0x168938
cltq
movq (%rcx,%rax,8), %rax
movl 0x9c(%rax), %eax
testl %eax, %eax
js 0x29bb8
xorl %edx, %edx
divl %r14d
incl %edx
incb %al
movb %al, 0x54(%rsp)
movb %dh, 0x55(%rsp)
movb %dl, 0x56(%rsp)
movq %r15, %rdi
movl %ebp, %esi
movl %r13d, %edx
movq %r12, %rcx
callq 0x9f5a6
movsd 0xc3494(%rip), %xmm1    # 0xed048
xorpd %xmm2, %xmm2
incl %r13d
jmp 0x29b22
incl %ebp
jmp 0x29b13
leaq 0x130(%rsp), %rdi
leaq 0x200(%rsp), %rsi
callq 0xa087a
leaq 0x130(%rsp), %rdi
callq 0x9ee84
leaq 0x58(%rsp), %rdi
callq 0x90430
movq 0x128(%rsp), %r14
movq 0x13ee5e(%rip), %rdx    # 0x168a60
leaq 0xc3cb3(%rip), %rsi     # 0xed8bc
leaq 0x200(%rsp), %rdi
movq %rbx, %rcx
xorl %eax, %eax
callq 0x23140
cmpl $0x0, 0x13ed02(%rip)    # 0x168924
je 0x29ccd
testb $0x1, 0x13eeb5(%rip)    # 0x168ae4
je 0x29ccd
leaq 0x200(%rsp), %rdi
callq 0xa57a0
testl %eax, %eax
jne 0x29ccd
movl 0x13ee30(%rip), %esi    # 0x168a80
movl 0x13ee2e(%rip), %edx    # 0x168a84
leaq 0x58(%rsp), %rdi
callq 0x8f8ec
pushq $0x5
popq %rdi
leaq 0x20(%rsp), %rsi
leaq 0x8(%rsp), %rdx
leaq 0x38(%rsp), %rcx
callq 0x29e05
leaq 0x58(%rsp), %rdi
callq 0x2a89a
testq %r14, %r14
je 0x29c93
leaq 0x58(%rsp), %rdi
movq %r14, %rsi
callq 0x93ed4
movq 0x13edc6(%rip), %rdx    # 0x168a60
leaq 0xc3c1b(%rip), %rsi     # 0xed8bc
leaq 0x200(%rsp), %r15
movq %r15, %rdi
movq %rbx, %rcx
xorl %eax, %eax
callq 0x23140
leaq 0x58(%rsp), %rdi
movq %r15, %rsi
callq 0x97f20
leaq 0x58(%rsp), %rdi
callq 0x90430
testq %r14, %r14
je 0x29ce7
movq %r14, %rdi
callq 0x90430
movl $0xd0, %esi
movq %r14, %rdi
callq 0x23900
callq 0xe00fc
addq $0x1a08, %rsp           # imm = 0x1A08
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x13edf3(%rip), %rdi    # 0x168af8
callq 0x24160
testl %eax, %eax
je 0x28950
leaq 0x13edcf(%rip), %rdi    # 0x168ae8
callq 0xa360e
leaq 0x13edd3(%rip), %rdi    # 0x168af8
callq 0x235c0
jmp 0x28950
cmpb $0x1, 0x13ed32(%rip)    # 0x168a68
jne 0x29d75
leaq 0x13eda9(%rip), %rdi    # 0x168ae8
callq 0xa3648
leaq 0xc36d3(%rip), %rdi     # 0xed41e
movb $0x1, %al
callq 0x23080
movl 0x139c74(%rip), %esi    # 0x1639cc
leaq 0xc36d6(%rip), %rdi     # 0xed435
xorl %eax, %eax
callq 0x23080
movq 0x1391b3(%rip), %rax    # 0x162f20
movq (%rax), %rdi
callq 0x23ab0
xorl %edi, %edi
callq 0x23b10
movq %rax, %rbx
leaq 0x13ed72(%rip), %rdi    # 0x168af8
callq 0x235a0
jmp 0x29dfd
jmp 0x29de3
jmp 0x29dde
jmp 0x29dde
movq %rax, %rbx
movl $0xd0, %esi
movq %r14, %rdi
callq 0x23900
jmp 0x29dc7
jmp 0x29dde
jmp 0x29da9
movq %rax, %rbx
leaq 0x58(%rsp), %rdi
callq 0x9ee84
jmp 0x29dfd
jmp 0x29dde
jmp 0x29dde
jmp 0x29dde
jmp 0x29dde
jmp 0x29dde
jmp 0x29dde
movq %rax, %rbx
leaq 0x130(%rsp), %rdi
callq 0x90430
jmp 0x29df3
jmp 0x29dde
jmp 0x29dde
jmp 0x29dde
jmp 0x29dde
movq %rax, %rbx
jmp 0x29df3
movq %rax, %rbx
leaq 0x130(%rsp), %rdi
callq 0x9ee84
leaq 0x58(%rsp), %rdi
callq 0x90430
movq %rbx, %rdi
callq 0x240f0