// File: /workspace/github_c_makefile_star2_O0/genometools[P]genometools/src/annotationsketch/canvas_cairo.c
// Function: gt_canvas_cairo_visit_element
int gt_canvas_cairo_visit_element(GtCanvas *canvas, GtElement *elem,
                                  GtError *err)
{
  int had_err = 0, arrow_status = ARROW_NONE;
  GtRange elem_range = gt_element_get_range(elem);
  GtDrawingRange draw_range;
  double elem_start = GT_UNDEF_DOUBLE,
         elem_width = GT_UNDEF_DOUBLE,
         stroke_width = STROKE_WIDTH_DEFAULT,
         bar_height = BAR_HEIGHT_DEFAULT,
         arrow_width = ARROW_WIDTH_DEFAULT;
  GtColor elem_color, grey, fill_color;
  const char *type;
  GtStyleQueryStatus rval;
  GtStr *style;
  GtStrand strand = gt_element_get_strand(elem);

  gt_assert(canvas && elem);

  /* This shouldn't happen. */
  if (!gt_range_overlap(&elem_range, &canvas->pvt->viewrange))
    return -1;

  type = gt_element_get_type(elem);
  grey.red = grey.green = grey.blue = .85;
  grey.alpha = 0.5;

  /* get default or image-wide bar height */
  if (gt_style_get_num(canvas->pvt->sty, "format", "bar_height", &bar_height,
                       NULL, err) == GT_STYLE_QUERY_ERROR) {
    return -1;
  }
  /* try to get type-specific bar height */
  if (gt_style_get_num_with_track(canvas->pvt->sty, type, "bar_height",
                       &bar_height,
                       gt_element_get_node_ref(elem),
                       gt_track_get_title(canvas->pvt->current_track),
                       err) == GT_STYLE_QUERY_ERROR) {
    return -1;
  }
  /* get default or image-wide arrow width */
  if (gt_style_get_num(canvas->pvt->sty, "format", "arrow_width", &arrow_width,
                        NULL, err)== GT_STYLE_QUERY_ERROR) {
    return -1;
  }
  /* try to get type-specific arrow width */
  if (gt_style_get_num_with_track(canvas->pvt->sty, type, "arrow_width",
                       &arrow_width,
                       gt_element_get_node_ref(elem),
                       gt_track_get_title(canvas->pvt->current_track),
                       err) == GT_STYLE_QUERY_ERROR) {
    return -1;
  }

  if ((strand == GT_STRAND_REVERSE || strand == GT_STRAND_BOTH)
         /*&& delem == gt_dlist_first(elems)*/)
    arrow_status = ARROW_LEFT;
  if ((strand == GT_STRAND_FORWARD || strand == GT_STRAND_BOTH)
         /*&& gt_dlistelem_next(delem) == NULL*/)
    arrow_status = (arrow_status == ARROW_LEFT ? ARROW_BOTH : ARROW_RIGHT);

  gt_log_log("processing element from "GT_WU" to "GT_WU", strand %d\n",
             elem_range.start, elem_range.end, (int) strand);

  draw_range = gt_coords_calc_generic_range(elem_range, canvas->pvt->viewrange);
  draw_range.start *= (canvas->pvt->width-2*canvas->pvt->margins);
  draw_range.end *= (canvas->pvt->width-2*canvas->pvt->margins);
  elem_start = draw_range.start + canvas->pvt->margins;
  elem_width = draw_range.end - draw_range.start;
  gt_assert(elem_start != GT_UNDEF_DOUBLE && elem_width != GT_UNDEF_DOUBLE);

  if (gt_element_is_marked(elem)) {
    if (gt_style_get_color_with_track(canvas->pvt->sty, type, "stroke_marked",
                           &elem_color, gt_element_get_node_ref(elem),
                           gt_track_get_title(canvas->pvt->current_track),
                           err) == GT_STYLE_QUERY_ERROR) {
      return -1;
    }
    if (gt_style_get_num_with_track(canvas->pvt->sty, "format",
                          "stroke_marked_width",
                          &stroke_width, gt_element_get_node_ref(elem),
                          gt_track_get_title(canvas->pvt->current_track),
                          err) == GT_STYLE_QUERY_ERROR) {
    return -1;
    }
  }
  else {
    if (gt_style_get_color_with_track(canvas->pvt->sty, type, "stroke",
                              &elem_color,
                              gt_element_get_node_ref(elem),
                              gt_track_get_title(canvas->pvt->current_track),
                              err) == GT_STYLE_QUERY_ERROR) {
      return -1;
    }
    if (gt_style_get_num_with_track(canvas->pvt->sty, "format", "stroke_width",
                         &stroke_width,
                         gt_element_get_node_ref(elem),
                         gt_track_get_title(canvas->pvt->current_track),
                         err) == GT_STYLE_QUERY_ERROR) {
      return -1;
    }
    if (gt_style_get_num_with_track(canvas->pvt->sty, type, "stroke_width",
                         &stroke_width,
                         gt_element_get_node_ref(elem),
                         gt_track_get_title(canvas->pvt->current_track),
                         err) == GT_STYLE_QUERY_ERROR) {
      return -1;
    }
  }
  if (gt_style_get_color_with_track(canvas->pvt->sty, type, "fill",
                                 &fill_color,
                                 gt_element_get_node_ref(elem),
                                 gt_track_get_title(canvas->pvt->current_track),
                                 err) == GT_STYLE_QUERY_ERROR) {
    return -1;
  }

  if (canvas->pvt->bt &&
          gt_double_smaller_double(draw_range.end-draw_range.start, 1.1))
  {
    if ((GtUword) draw_range.start > gt_bittab_size(canvas->pvt->bt))
      return had_err;
    if (gt_bittab_bit_is_set(canvas->pvt->bt, (GtUword) draw_range.start))
      return had_err;
    gt_graphics_draw_vertical_line(canvas->pvt->g,
                                   elem_start,
                                   canvas->pvt->y - bar_height/2,
                                   elem_color,
                                   bar_height,
                                   stroke_width);
    gt_bittab_set_bit(canvas->pvt->bt, (GtUword) draw_range.start);
  }

  /* register coordinates in GtImageInfo object if available */
  if (canvas->pvt->ii)
  {
    GtRecMap *rm = gt_rec_map_new(elem_start, canvas->pvt->y - bar_height/2,
                                  elem_start+elem_width,
                                  canvas->pvt->y+bar_height/2,
                                  (GtFeatureNode*)
                                    gt_element_get_node_ref(elem));
    gt_image_info_add_rec_map(canvas->pvt->ii, rm);
    }

  if (canvas->pvt->bt && draw_range.end-draw_range.start <= 1.1)
  {
    return had_err;
  }

  gt_log_log("drawing element from %f to %f, arrow status: %d",
             draw_range.start, draw_range.end, arrow_status);

  /* draw each element according to style set in the style */
  style = gt_str_new();
  rval = gt_style_get_str_with_track(canvas->pvt->sty, type, "style", style,
                          gt_element_get_node_ref(elem),
                          gt_track_get_title(canvas->pvt->current_track),
                          err);
  switch (rval) {
    case GT_STYLE_QUERY_NOT_SET:
      gt_str_set(style, "box");    /* default style */
      break;
    case GT_STYLE_QUERY_ERROR:
      gt_str_delete(style);
      gt_assert(gt_error_is_set(err));
      return -1;
    default:
      break;
  }

  if (strcmp(gt_str_get(style), "box") == 0)
  {
    gt_graphics_draw_box(canvas->pvt->g,
                         elem_start,
                         canvas->pvt->y - bar_height/2,
                         elem_width,
                         bar_height,
                         fill_color,
                         arrow_status,
                         arrow_width,
                         stroke_width,
                         elem_color,
                         false);
  }
  else if (strcmp(gt_str_get(style), "rectangle") == 0)
  {
    gt_graphics_draw_box(canvas->pvt->g,
                         elem_start,
                         canvas->pvt->y - bar_height/2,
                         elem_width,
                         bar_height,
                         fill_color,
                         ARROW_NONE,
                         arrow_width,
                         stroke_width,
                         elem_color,
                         false);
  }
  else if (strcmp(gt_str_get(style), "caret") == 0)
  {
    gt_graphics_draw_caret(canvas->pvt->g,
                           elem_start,
                           canvas->pvt->y - bar_height/2,
                           elem_width,
                           bar_height,
                           ARROW_NONE,
                           arrow_width,
                           stroke_width,
                           elem_color);
  }
  else if (strcmp(gt_str_get(style), "dashes") == 0)
  {
    gt_graphics_draw_dashes(canvas->pvt->g,
                            elem_start,
                            canvas->pvt->y - bar_height/2,
                            elem_width,
                            bar_height,
                            arrow_status,
                            arrow_width,
                            stroke_width,
                            elem_color);
  }
  else if (strcmp(gt_str_get(style), "line") == 0)
  {
    gt_graphics_draw_horizontal_line(canvas->pvt->g,
                                     elem_start,
                                     canvas->pvt->y - bar_height/2,
                                     elem_color,
                                     elem_width,
                                     1.0);
  }
  else
  {
     gt_graphics_draw_box(canvas->pvt->g,
                          elem_start,
                          canvas->pvt->y - bar_height/2,
                          elem_width,
                          bar_height,
                          fill_color,
                          arrow_status,
                          arrow_width,
                          stroke_width,
                          elem_color,
                          false);
  }
  gt_str_delete(style);

  /* draw arrowheads at clipped margins */
  if (draw_range.clip == CLIPPED_LEFT || draw_range.clip == CLIPPED_BOTH)
      gt_graphics_draw_arrowhead(canvas->pvt->g,
                                 canvas->pvt->margins - 10,
                                 canvas->pvt->y - 4,
                                 grey,
                                 ARROW_LEFT);
  if (draw_range.clip == CLIPPED_RIGHT || draw_range.clip == CLIPPED_BOTH)
      gt_graphics_draw_arrowhead(canvas->pvt->g,
                                 canvas->pvt->width-canvas->pvt->margins + 10,
                                 canvas->pvt->y - 4,
                                 grey,
                                 ARROW_RIGHT);
  return had_err;
}

// Assembly:
subq $0x268, %rsp            # imm = 0x268
movq %rdi, 0x258(%rsp)
movq %rsi, 0x250(%rsp)
movq %rdx, 0x248(%rsp)
movl $0x0, 0x244(%rsp)
movl $0x3, 0x240(%rsp)
movq 0x250(%rsp), %rdi
callq 0xb6d20
movq %rax, 0x230(%rsp)
movq %rdx, 0x238(%rsp)
movsd 0xaac86(%rip), %xmm0    # 0x15e800
movsd %xmm0, 0x208(%rsp)
movsd 0xaac75(%rip), %xmm0    # 0x15e800
movsd %xmm0, 0x200(%rsp)
movsd 0xb3c7c(%rip), %xmm0    # 0x167818
movsd %xmm0, 0x1f8(%rsp)
movsd 0xb6353(%rip), %xmm0    # 0x169f00
movsd %xmm0, 0x1f0(%rsp)
movsd 0xc08a2(%rip), %xmm0    # 0x174460
movsd %xmm0, 0x1e8(%rsp)
movq 0x250(%rsp), %rdi
callq 0xb6de0
movl %eax, 0x16c(%rsp)
cmpq $0x0, 0x258(%rsp)
je 0xb3bf1
cmpq $0x0, 0x250(%rsp)
jne 0xb3c29
movq 0x1003e0(%rip), %rax    # 0x1b3fd8
movq (%rax), %rdi
leaq 0xaa464(%rip), %rsi     # 0x15e066
leaq 0xc0a33(%rip), %rdx     # 0x17463c
leaq 0xc0a3b(%rip), %rcx     # 0x17464b
leaq 0xc08a1(%rip), %r8      # 0x1744b8
movl $0x1be, %r9d            # imm = 0x1BE
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0xb3c2b
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rsi
leaq 0x230(%rsp), %rdi
callq 0x93c40
testb $0x1, %al
jne 0xb3c58
movl $0xffffffff, 0x264(%rsp) # imm = 0xFFFFFFFF
jmp 0xb4f17
movq 0x250(%rsp), %rdi
callq 0xb6d90
movq %rax, 0x180(%rsp)
movsd 0xc07f3(%rip), %xmm0    # 0x174468
movsd %xmm0, 0x1b8(%rsp)
movsd 0xc07e2(%rip), %xmm0    # 0x174468
movsd %xmm0, 0x1b0(%rsp)
movsd 0xc07d1(%rip), %xmm0    # 0x174468
movsd %xmm0, 0x1a8(%rsp)
movsd 0xb3b70(%rip), %xmm0    # 0x167818
movsd %xmm0, 0x1c0(%rsp)
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x38(%rax), %rdi
movq 0x248(%rsp), %r9
leaq 0xaa4c6(%rip), %rsi     # 0x15e196
leaq 0xb657a(%rip), %rdx     # 0x16a251
leaq 0x1f0(%rsp), %rcx
xorl %eax, %eax
movl %eax, %r8d
callq 0x49af0
cmpl $0x2, %eax
jne 0xb3cfe
movl $0xffffffff, 0x264(%rsp) # imm = 0xFFFFFFFF
jmp 0xb4f17
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x38(%rax), %rax
movq %rax, 0x130(%rsp)
movq 0x180(%rsp), %rax
movq %rax, 0x138(%rsp)
movq 0x250(%rsp), %rdi
callq 0xb6f20
movq %rax, 0x140(%rsp)
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x40(%rax), %rdi
callq 0x4cf40
movq 0x130(%rsp), %rdi
movq 0x138(%rsp), %rsi
movq 0x140(%rsp), %r8
movq %rax, %r9
movq 0x248(%rsp), %rax
leaq 0xb64d7(%rip), %rdx     # 0x16a251
leaq 0x1f0(%rsp), %rcx
movq %rax, (%rsp)
callq 0x49690
cmpl $0x2, %eax
jne 0xb3da0
movl $0xffffffff, 0x264(%rsp) # imm = 0xFFFFFFFF
jmp 0xb4f17
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x38(%rax), %rdi
movq 0x248(%rsp), %r9
leaq 0xaa3d7(%rip), %rsi     # 0x15e196
leaq 0xc0841(%rip), %rdx     # 0x174607
leaq 0x1e8(%rsp), %rcx
xorl %eax, %eax
movl %eax, %r8d
callq 0x49af0
cmpl $0x2, %eax
jne 0xb3ded
movl $0xffffffff, 0x264(%rsp) # imm = 0xFFFFFFFF
jmp 0xb4f17
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x38(%rax), %rax
movq %rax, 0x118(%rsp)
movq 0x180(%rsp), %rax
movq %rax, 0x120(%rsp)
movq 0x250(%rsp), %rdi
callq 0xb6f20
movq %rax, 0x128(%rsp)
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x40(%rax), %rdi
callq 0x4cf40
movq 0x118(%rsp), %rdi
movq 0x120(%rsp), %rsi
movq 0x128(%rsp), %r8
movq %rax, %r9
movq 0x248(%rsp), %rax
leaq 0xc079e(%rip), %rdx     # 0x174607
leaq 0x1e8(%rsp), %rcx
movq %rax, (%rsp)
callq 0x49690
cmpl $0x2, %eax
jne 0xb3e8f
movl $0xffffffff, 0x264(%rsp) # imm = 0xFFFFFFFF
jmp 0xb4f17
cmpl $0x1, 0x16c(%rsp)
je 0xb3ea3
cmpl $0x2, 0x16c(%rsp)
jne 0xb3eae
movl $0x0, 0x240(%rsp)
cmpl $0x0, 0x16c(%rsp)
je 0xb3ec2
cmpl $0x2, 0x16c(%rsp)
jne 0xb3ee0
movl 0x240(%rsp), %edx
movl $0x1, %eax
movl $0x2, %ecx
cmpl $0x0, %edx
cmovel %ecx, %eax
movl %eax, 0x240(%rsp)
movq 0x230(%rsp), %rsi
movq 0x238(%rsp), %rdx
movl 0x16c(%rsp), %ecx
leaq 0xc076b(%rip), %rdi     # 0x174669
xorl %eax, %eax
callq 0xc930
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x230(%rsp), %rsi
movq 0x238(%rsp), %rdx
movq (%rax), %rcx
movq 0x8(%rax), %r8
leaq 0x150(%rsp), %rdi
callq 0xb6300
movq 0x160(%rsp), %rax
movq %rax, 0x220(%rsp)
movups 0x150(%rsp), %xmm0
movaps %xmm0, 0x210(%rsp)
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x28(%rax), %xmm3
movaps 0xaa513(%rip), %xmm2    # 0x15e480
punpckldq %xmm2, %xmm3    # xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1]
movapd 0xaa517(%rip), %xmm1    # 0x15e490
subpd %xmm1, %xmm3
movaps %xmm3, %xmm0
unpckhpd %xmm3, %xmm3            # xmm3 = xmm3[1,1]
addsd %xmm0, %xmm3
movsd 0x20(%rax), %xmm0
addsd %xmm0, %xmm0
subsd %xmm0, %xmm3
movsd 0x210(%rsp), %xmm0
mulsd %xmm3, %xmm0
movsd %xmm0, 0x210(%rsp)
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x28(%rax), %xmm0
punpckldq %xmm2, %xmm0    # xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
subpd %xmm1, %xmm0
movaps %xmm0, %xmm1
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm1, %xmm0
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
movsd 0x20(%rax), %xmm1
addsd %xmm1, %xmm1
subsd %xmm1, %xmm0
mulsd 0x218(%rsp), %xmm0
movsd %xmm0, 0x218(%rsp)
movsd 0x210(%rsp), %xmm0
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
addsd 0x20(%rax), %xmm0
movsd %xmm0, 0x208(%rsp)
movsd 0x218(%rsp), %xmm0
subsd 0x210(%rsp), %xmm0
movsd %xmm0, 0x200(%rsp)
movsd 0x208(%rsp), %xmm0
movsd 0xaa7b7(%rip), %xmm1    # 0x15e800
ucomisd %xmm1, %xmm0
jne 0xb4053
jp 0xb4053
jmp 0xb406c
movsd 0x200(%rsp), %xmm0
movsd 0xaa79c(%rip), %xmm1    # 0x15e800
ucomisd %xmm1, %xmm0
jne 0xb40a4
jp 0xb40a4
movq 0xfff65(%rip), %rax     # 0x1b3fd8
movq (%rax), %rdi
leaq 0xa9fe9(%rip), %rsi     # 0x15e066
leaq 0xc0614(%rip), %rdx     # 0x174698
leaq 0xc05c0(%rip), %rcx     # 0x17464b
leaq 0xc0426(%rip), %r8      # 0x1744b8
movl $0x1f2, %r9d            # imm = 0x1F2
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0xb40a6
movq 0x250(%rsp), %rdi
callq 0xb6e30
testb $0x1, %al
jne 0xb40bc
jmp 0xb41f4
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x38(%rax), %rax
movq %rax, 0x100(%rsp)
movq 0x180(%rsp), %rax
movq %rax, 0x108(%rsp)
movq 0x250(%rsp), %rdi
callq 0xb6f20
movq %rax, 0x110(%rsp)
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x40(%rax), %rdi
callq 0x4cf40
movq 0x100(%rsp), %rdi
movq 0x108(%rsp), %rsi
movq 0x110(%rsp), %r8
movq %rax, %r9
movq 0x248(%rsp), %rax
leaq 0xbeb6e(%rip), %rdx     # 0x172ca6
leaq 0x1c8(%rsp), %rcx
movq %rax, (%rsp)
callq 0x48420
cmpl $0x2, %eax
jne 0xb415e
movl $0xffffffff, 0x264(%rsp) # imm = 0xFFFFFFFF
jmp 0xb4f17
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x38(%rax), %rax
movq %rax, 0xf0(%rsp)
movq 0x250(%rsp), %rdi
callq 0xb6f20
movq %rax, 0xf8(%rsp)
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x40(%rax), %rdi
callq 0x4cf40
movq 0xf0(%rsp), %rdi
movq 0xf8(%rsp), %r8
movq %rax, %r9
movq 0x248(%rsp), %rax
leaq 0xa9fd4(%rip), %rsi     # 0x15e196
leaq 0xc050e(%rip), %rdx     # 0x1746d7
leaq 0x1f8(%rsp), %rcx
movq %rax, (%rsp)
callq 0x49690
cmpl $0x2, %eax
jne 0xb41ef
movl $0xffffffff, 0x264(%rsp) # imm = 0xFFFFFFFF
jmp 0xb4f17
jmp 0xb43cb
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x38(%rax), %rax
movq %rax, 0xd8(%rsp)
movq 0x180(%rsp), %rax
movq %rax, 0xe0(%rsp)
movq 0x250(%rsp), %rdi
callq 0xb6f20
movq %rax, 0xe8(%rsp)
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x40(%rax), %rdi
callq 0x4cf40
movq 0xd8(%rsp), %rdi
movq 0xe0(%rsp), %rsi
movq 0xe8(%rsp), %r8
movq %rax, %r9
movq 0x248(%rsp), %rax
leaq 0xc03b0(%rip), %rdx     # 0x174620
leaq 0x1c8(%rsp), %rcx
movq %rax, (%rsp)
callq 0x48420
cmpl $0x2, %eax
jne 0xb4296
movl $0xffffffff, 0x264(%rsp) # imm = 0xFFFFFFFF
jmp 0xb4f17
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x38(%rax), %rax
movq %rax, 0xc8(%rsp)
movq 0x250(%rsp), %rdi
callq 0xb6f20
movq %rax, 0xd0(%rsp)
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x40(%rax), %rdi
callq 0x4cf40
movq 0xc8(%rsp), %rdi
movq 0xd0(%rsp), %r8
movq %rax, %r9
movq 0x248(%rsp), %rax
leaq 0xa9e9c(%rip), %rsi     # 0x15e196
leaq 0xc0312(%rip), %rdx     # 0x174613
leaq 0x1f8(%rsp), %rcx
movq %rax, (%rsp)
callq 0x49690
cmpl $0x2, %eax
jne 0xb4327
movl $0xffffffff, 0x264(%rsp) # imm = 0xFFFFFFFF
jmp 0xb4f17
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x38(%rax), %rax
movq %rax, 0xb0(%rsp)
movq 0x180(%rsp), %rax
movq %rax, 0xb8(%rsp)
movq 0x250(%rsp), %rdi
callq 0xb6f20
movq %rax, 0xc0(%rsp)
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x40(%rax), %rdi
callq 0x4cf40
movq 0xb0(%rsp), %rdi
movq 0xb8(%rsp), %rsi
movq 0xc0(%rsp), %r8
movq %rax, %r9
movq 0x248(%rsp), %rax
leaq 0xc0270(%rip), %rdx     # 0x174613
leaq 0x1f8(%rsp), %rcx
movq %rax, (%rsp)
callq 0x49690
cmpl $0x2, %eax
jne 0xb43c9
movl $0xffffffff, 0x264(%rsp) # imm = 0xFFFFFFFF
jmp 0xb4f17
jmp 0xb43cb
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x38(%rax), %rax
movq %rax, 0x98(%rsp)
movq 0x180(%rsp), %rax
movq %rax, 0xa0(%rsp)
movq 0x250(%rsp), %rdi
callq 0xb6f20
movq %rax, 0xa8(%rsp)
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x40(%rax), %rdi
callq 0x4cf40
movq 0x98(%rsp), %rdi
movq 0xa0(%rsp), %rsi
movq 0xa8(%rsp), %r8
movq %rax, %r9
movq 0x248(%rsp), %rax
leaq 0xba5c4(%rip), %rdx     # 0x16ea0b
leaq 0x188(%rsp), %rcx
movq %rax, (%rsp)
callq 0x48420
cmpl $0x2, %eax
jne 0xb446d
movl $0xffffffff, 0x264(%rsp) # imm = 0xFFFFFFFF
jmp 0xb4f17
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
cmpq $0x0, 0x50(%rax)
je 0xb461e
movsd 0x218(%rsp), %xmm0
subsd 0x210(%rsp), %xmm0
movsd 0xba9f2(%rip), %xmm1    # 0x16ee90
callq 0x8c360
testb $0x1, %al
jne 0xb44ac
jmp 0xb461e
movsd 0x210(%rsp), %xmm0
movsd 0xb346b(%rip), %xmm2    # 0x167928
movaps %xmm0, %xmm1
subsd %xmm2, %xmm1
cvttsd2si %xmm1, %rcx
cvttsd2si %xmm0, %rax
movq %rax, %rdx
sarq $0x3f, %rdx
andq %rdx, %rcx
orq %rcx, %rax
movq %rax, 0x90(%rsp)
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x50(%rax), %rdi
callq 0x79e90
movq %rax, %rcx
movq 0x90(%rsp), %rax
cmpq %rcx, %rax
jbe 0xb451b
movl 0x244(%rsp), %eax
movl %eax, 0x264(%rsp)
jmp 0xb4f17
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x50(%rax), %rdi
movsd 0x210(%rsp), %xmm0
movsd 0xb33ec(%rip), %xmm2    # 0x167928
movaps %xmm0, %xmm1
subsd %xmm2, %xmm1
cvttsd2si %xmm1, %rax
cvttsd2si %xmm0, %rsi
movq %rsi, %rcx
sarq $0x3f, %rcx
andq %rcx, %rax
orq %rax, %rsi
callq 0x79c60
testb $0x1, %al
jne 0xb4565
jmp 0xb4578
movl 0x244(%rsp), %eax
movl %eax, 0x264(%rsp)
jmp 0xb4f17
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x58(%rax), %rdi
movsd 0x208(%rsp), %xmm0
movsd 0x18(%rax), %xmm1
movsd 0x1f0(%rsp), %xmm2
movsd 0xb3d99(%rip), %xmm4    # 0x168340
movaps %xmm2, %xmm3
mulsd %xmm4, %xmm3
addsd %xmm3, %xmm1
movsd 0x1f8(%rsp), %xmm3
movups 0x1c8(%rsp), %xmm4
movups 0x1d8(%rsp), %xmm5
movq %rsp, %rax
movups %xmm5, 0x10(%rax)
movups %xmm4, (%rax)
callq 0x3f3f0
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x50(%rax), %rdi
movsd 0x210(%rsp), %xmm0
movsd 0xb332d(%rip), %xmm2    # 0x167928
movaps %xmm0, %xmm1
subsd %xmm2, %xmm1
cvttsd2si %xmm1, %rax
cvttsd2si %xmm0, %rsi
movq %rsi, %rcx
sarq $0x3f, %rcx
andq %rcx, %rax
orq %rax, %rsi
callq 0x78fe0
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
cmpq $0x0, 0x60(%rax)
je 0xb471a
movsd 0x208(%rsp), %xmm0
movsd %xmm0, 0x70(%rsp)
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
movsd 0x18(%rax), %xmm0
movsd 0x1f0(%rsp), %xmm1
movsd 0xb3cc2(%rip), %xmm2    # 0x168328
divsd %xmm2, %xmm1
subsd %xmm1, %xmm0
movsd %xmm0, 0x78(%rsp)
movsd 0x208(%rsp), %xmm0
addsd 0x200(%rsp), %xmm0
movsd %xmm0, 0x80(%rsp)
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
movsd 0x18(%rax), %xmm0
movsd 0x1f0(%rsp), %xmm1
movsd 0xb3c77(%rip), %xmm2    # 0x168328
divsd %xmm2, %xmm1
addsd %xmm1, %xmm0
movsd %xmm0, 0x88(%rsp)
movq 0x250(%rsp), %rdi
callq 0xb6f20
movsd 0x70(%rsp), %xmm0
movsd 0x78(%rsp), %xmm1
movsd 0x80(%rsp), %xmm2
movsd 0x88(%rsp), %xmm3
movq %rax, %rdi
callq 0x473c0
movq %rax, 0x148(%rsp)
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x60(%rax), %rdi
movq 0x148(%rsp), %rsi
callq 0x45210
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
cmpq $0x0, 0x50(%rax)
je 0xb4760
movsd 0x218(%rsp), %xmm1
subsd 0x210(%rsp), %xmm1
movsd 0xba749(%rip), %xmm0    # 0x16ee90
ucomisd %xmm1, %xmm0
jb 0xb4760
movl 0x244(%rsp), %eax
movl %eax, 0x264(%rsp)
jmp 0xb4f17
movsd 0x210(%rsp), %xmm0
movsd 0x218(%rsp), %xmm1
movl 0x240(%rsp), %esi
leaq 0xbff6b(%rip), %rdi     # 0x1746eb
movb $0x2, %al
callq 0xc930
callq 0x18f00
movq %rax, 0x170(%rsp)
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x38(%rax), %rax
movq %rax, 0x48(%rsp)
movq 0x180(%rsp), %rax
movq %rax, 0x50(%rsp)
movq 0x170(%rsp), %rax
movq %rax, 0x58(%rsp)
movq 0x250(%rsp), %rdi
callq 0xb6f20
movq %rax, 0x60(%rsp)
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x40(%rax), %rdi
callq 0x4cf40
movq 0x48(%rsp), %rdi
movq 0x50(%rsp), %rsi
movq 0x58(%rsp), %rcx
movq 0x60(%rsp), %r8
movq %rax, %r9
movq 0x248(%rsp), %rdx
movq %rsp, %rax
movq %rdx, (%rax)
leaq 0xc82e9(%rip), %rdx     # 0x17caff
callq 0x49060
movl %eax, 0x17c(%rsp)
movl 0x17c(%rsp), %eax
movl %eax, 0x6c(%rsp)
subl $0x1, %eax
je 0xb483f
jmp 0xb4834
movl 0x6c(%rsp), %eax
subl $0x2, %eax
je 0xb4855
jmp 0xb48bd
movq 0x170(%rsp), %rdi
leaq 0xb3f0c(%rip), %rsi     # 0x16875a
callq 0x190b0
jmp 0xb48bf
movq 0x170(%rsp), %rdi
callq 0x1afc0
movq 0x248(%rsp), %rdi
callq 0xc270
testb $0x1, %al
jne 0xb48ab
movq 0xff75e(%rip), %rax     # 0x1b3fd8
movq (%rax), %rdi
leaq 0xa97e2(%rip), %rsi     # 0x15e066
leaq 0xd61ad(%rip), %rdx     # 0x18aa38
leaq 0xbfdb9(%rip), %rcx     # 0x17464b
leaq 0xbfc1f(%rip), %r8      # 0x1744b8
movl $0x251, %r9d            # imm = 0x251
movb $0x0, %al
callq 0xb890
callq 0xb2e0
jmp 0xb48ad
movl $0xffffffff, 0x264(%rsp) # imm = 0xFFFFFFFF
jmp 0xb4f17
jmp 0xb48bf
movq 0x170(%rsp), %rdi
callq 0x19940
movq %rax, %rdi
leaq 0xb3e84(%rip), %rsi     # 0x16875a
callq 0xb850
cmpl $0x0, %eax
jne 0xb49b3
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x58(%rax), %rdi
movsd 0x208(%rsp), %xmm0
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
movsd 0x18(%rax), %xmm1
movsd 0x1f0(%rsp), %xmm2
movsd 0xb3a09(%rip), %xmm3    # 0x168328
divsd %xmm3, %xmm2
subsd %xmm2, %xmm1
movsd 0x200(%rsp), %xmm2
movsd 0x1f0(%rsp), %xmm3
movl 0x240(%rsp), %esi
movsd 0x1e8(%rsp), %xmm4
movsd 0x1f8(%rsp), %xmm5
leaq 0x188(%rsp), %rcx
leaq 0x1c8(%rsp), %rax
xorl %edx, %edx
movq (%rcx), %r8
movq %r8, (%rsp)
movq 0x8(%rcx), %r8
movq %r8, 0x8(%rsp)
movq 0x10(%rcx), %r8
movq %r8, 0x10(%rsp)
movq 0x18(%rcx), %rcx
movq %rcx, 0x18(%rsp)
movq (%rax), %rcx
movq %rcx, 0x20(%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x28(%rsp)
movq 0x10(%rax), %rcx
movq %rcx, 0x30(%rsp)
movq 0x18(%rax), %rax
movq %rax, 0x38(%rsp)
callq 0x3f4f0
jmp 0xb4db0
movq 0x170(%rsp), %rdi
callq 0x19940
movq %rax, %rdi
leaq 0xb3de6(%rip), %rsi     # 0x1687b0
callq 0xb850
cmpl $0x0, %eax
jne 0xb4aa5
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x58(%rax), %rdi
movsd 0x208(%rsp), %xmm0
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
movsd 0x18(%rax), %xmm1
movsd 0x1f0(%rsp), %xmm2
movsd 0xb3915(%rip), %xmm3    # 0x168328
divsd %xmm3, %xmm2
subsd %xmm2, %xmm1
movsd 0x200(%rsp), %xmm2
movsd 0x1f0(%rsp), %xmm3
movsd 0x1e8(%rsp), %xmm4
movsd 0x1f8(%rsp), %xmm5
leaq 0x188(%rsp), %rcx
movl $0x3, %esi
leaq 0x1c8(%rsp), %rax
xorl %edx, %edx
movq (%rcx), %r8
movq %r8, (%rsp)
movq 0x8(%rcx), %r8
movq %r8, 0x8(%rsp)
movq 0x10(%rcx), %r8
movq %r8, 0x10(%rsp)
movq 0x18(%rcx), %rcx
movq %rcx, 0x18(%rsp)
movq (%rax), %rcx
movq %rcx, 0x20(%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x28(%rsp)
movq 0x10(%rax), %rcx
movq %rcx, 0x30(%rsp)
movq 0x18(%rax), %rax
movq %rax, 0x38(%rsp)
callq 0x3f4f0
jmp 0xb4dae
movq 0x170(%rsp), %rdi
callq 0x19940
movq %rax, %rdi
leaq 0xb3cd7(%rip), %rsi     # 0x168793
callq 0xb850
cmpl $0x0, %eax
jne 0xb4b6a
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x58(%rax), %rdi
movsd 0x208(%rsp), %xmm0
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
movsd 0x18(%rax), %xmm1
movsd 0x1f0(%rsp), %xmm2
movsd 0xb3823(%rip), %xmm3    # 0x168328
divsd %xmm3, %xmm2
subsd %xmm2, %xmm1
movsd 0x200(%rsp), %xmm2
movsd 0x1f0(%rsp), %xmm3
movsd 0x1e8(%rsp), %xmm4
movsd 0x1f8(%rsp), %xmm5
movl $0x3, %esi
leaq 0x1c8(%rsp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rcx
movq %rcx, 0x10(%rsp)
movq 0x18(%rax), %rax
movq %rax, 0x18(%rsp)
callq 0x3f7a0
jmp 0xb4dac
movq 0x170(%rsp), %rdi
callq 0x19940
movq %rax, %rdi
leaq 0xb3bf4(%rip), %rsi     # 0x168775
callq 0xb850
cmpl $0x0, %eax
jne 0xb4c31
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x58(%rax), %rdi
movsd 0x208(%rsp), %xmm0
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
movsd 0x18(%rax), %xmm1
movsd 0x1f0(%rsp), %xmm2
movsd 0xb375e(%rip), %xmm3    # 0x168328
divsd %xmm3, %xmm2
subsd %xmm2, %xmm1
movsd 0x200(%rsp), %xmm2
movsd 0x1f0(%rsp), %xmm3
movl 0x240(%rsp), %esi
movsd 0x1e8(%rsp), %xmm4
movsd 0x1f8(%rsp), %xmm5
leaq 0x1c8(%rsp), %rax
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rcx
movq %rcx, 0x10(%rsp)
movq 0x18(%rax), %rax
movq %rax, 0x18(%rsp)
callq 0x3f680
jmp 0xb4daa
movq 0x170(%rsp), %rdi
callq 0x19940
movq %rax, %rdi
leaq 0xb4276(%rip), %rsi     # 0x168ebe
callq 0xb850
cmpl $0x0, %eax
jne 0xb4cde
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x58(%rax), %rdi
movsd 0x208(%rsp), %xmm0
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
movsd 0x18(%rax), %xmm1
movsd 0x1f0(%rsp), %xmm2
movsd 0xb3697(%rip), %xmm3    # 0x168328
divsd %xmm3, %xmm2
subsd %xmm2, %xmm1
movsd 0x200(%rsp), %xmm2
leaq 0x1c8(%rsp), %rax
movsd 0xa9b56(%rip), %xmm3    # 0x15e808
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rcx
movq %rcx, 0x10(%rsp)
movq 0x18(%rax), %rax
movq %rax, 0x18(%rsp)
callq 0x3f2f0
jmp 0xb4da8
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x58(%rax), %rdi
movsd 0x208(%rsp), %xmm0
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
movsd 0x18(%rax), %xmm1
movsd 0x1f0(%rsp), %xmm2
movsd 0xb360f(%rip), %xmm3    # 0x168328
divsd %xmm3, %xmm2
subsd %xmm2, %xmm1
movsd 0x200(%rsp), %xmm2
movsd 0x1f0(%rsp), %xmm3
movl 0x240(%rsp), %esi
movsd 0x1e8(%rsp), %xmm4
movsd 0x1f8(%rsp), %xmm5
leaq 0x188(%rsp), %rcx
leaq 0x1c8(%rsp), %rax
xorl %edx, %edx
movq (%rcx), %r8
movq %r8, (%rsp)
movq 0x8(%rcx), %r8
movq %r8, 0x8(%rsp)
movq 0x10(%rcx), %r8
movq %r8, 0x10(%rsp)
movq 0x18(%rcx), %rcx
movq %rcx, 0x18(%rsp)
movq (%rax), %rcx
movq %rcx, 0x20(%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x28(%rsp)
movq 0x10(%rax), %rcx
movq %rcx, 0x30(%rsp)
movq 0x18(%rax), %rax
movq %rax, 0x38(%rsp)
callq 0x3f4f0
jmp 0xb4daa
jmp 0xb4dac
jmp 0xb4dae
jmp 0xb4db0
movq 0x170(%rsp), %rdi
callq 0x1afc0
cmpl $0x1, 0x220(%rsp)
je 0xb4dd1
cmpl $0x3, 0x220(%rsp)
jne 0xb4e4c
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x58(%rax), %rdi
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
movsd 0x20(%rax), %xmm0
movsd 0xb2a16(%rip), %xmm1    # 0x167810
subsd %xmm1, %xmm0
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
movsd 0x18(%rax), %xmm1
movsd 0xbf659(%rip), %xmm2    # 0x174470
subsd %xmm2, %xmm1
leaq 0x1a8(%rsp), %rax
xorl %esi, %esi
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rcx
movq %rcx, 0x10(%rsp)
movq 0x18(%rax), %rax
movq %rax, 0x18(%rsp)
callq 0x3fa40
cmpl $0x0, 0x220(%rsp)
je 0xb4e64
cmpl $0x3, 0x220(%rsp)
jne 0xb4f09
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
movq 0x58(%rax), %rdi
movq 0x28(%rax), %xmm0
movaps 0xa9600(%rip), %xmm1    # 0x15e480
punpckldq %xmm1, %xmm0    # xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
movapd 0xa9604(%rip), %xmm1    # 0x15e490
subpd %xmm1, %xmm0
movaps %xmm0, %xmm1
unpckhpd %xmm0, %xmm0            # xmm0 = xmm0[1,1]
addsd %xmm1, %xmm0
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
subsd 0x20(%rax), %xmm0
movsd 0xb295c(%rip), %xmm1    # 0x167810
addsd %xmm1, %xmm0
movq 0x258(%rsp), %rax
movq 0x8(%rax), %rax
movsd 0x18(%rax), %xmm1
movsd 0xbf59f(%rip), %xmm2    # 0x174470
subsd %xmm2, %xmm1
leaq 0x1a8(%rsp), %rax
movl $0x1, %esi
movq (%rax), %rcx
movq %rcx, (%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x8(%rsp)
movq 0x10(%rax), %rcx
movq %rcx, 0x10(%rsp)
movq 0x18(%rax), %rax
movq %rax, 0x18(%rsp)
callq 0x3fa40
movl 0x244(%rsp), %eax
movl %eax, 0x264(%rsp)
movl 0x264(%rsp), %eax
addq $0x268, %rsp            # imm = 0x268
retq
nopw %cs:(%rax,%rax)