// File: /workspace/github_c_makefile_star2_O0/nkanaev[P]tipsy/src/tipsy.c
// Function: draw_surface
void draw_surface(Tigr *scr, Obj *obj, Surface sf, State state) {
  Face f = *(Face*)(list_get(obj->f, sf.idx));

  Tigr *texture = NULL;
  if (f.mtl) texture = f.mtl->map_Ka ? f.mtl->map_Ka : f.mtl->map_Kd;
  if (texture == NULL) return;

  int shading = -1, has_normals = 0;
  Vec vn1, vn2, vn3;

  if (state.shading == SHADING_FLAT) {
    Vec bc = {0.333, 0.333, 0.333};
    shading = shade(sf.nrm, bc);
  }
  if (state.shading == SHADING_GOURAUD) {
    has_normals = f.vn1 > 0 && f.vn2 > 0 && f.vn3 > 0;
    if (has_normals) {
      vn1 = vec_nrm(VREF(list_get(obj->vn, f.vn1-1)));
      vn2 = vec_nrm(VREF(list_get(obj->vn, f.vn2-1)));
      vn3 = vec_nrm(VREF(list_get(obj->vn, f.vn3-1)));
      vn1 = perspective(vn1, state.x, state.y, state.z);
      vn2 = perspective(vn2, state.x, state.y, state.z);
      vn3 = perspective(vn3, state.x, state.y, state.z);
    }
  }

  Vec vt1 = VREF(list_get(obj->vt, f.vt1-1)),
      vt2 = VREF(list_get(obj->vt, f.vt2-1)),
      vt3 = VREF(list_get(obj->vt, f.vt3-1));

  int minX = fminf(fminf(sf.v1.x, sf.v2.x), sf.v3.x),
      maxX = fmaxf(fmaxf(sf.v1.x, sf.v2.x), sf.v3.x)+1,
      minY = fminf(fminf(sf.v1.y, sf.v2.y), sf.v3.y),
      maxY = fmaxf(fmaxf(sf.v1.y, sf.v2.y), sf.v3.y)+1;

  for (int y = minY; y < maxY; y++) {
    for (int x = minX; x < maxX; x++) {
      Vec p = {x, y, 0};
      Vec bc = barycenter(p, sf.v1, sf.v2, sf.v3);
      float err = -0.0001;
      if (bc.x >= err && bc.y >= err && bc.z >= err) {
        if (state.use_zbuffer) {
          float z = bc.x*sf.v1.z + bc.y*sf.v2.z + bc.z*sf.v3.z;
          int zbuff_idx = y * WIDTH + x;
          if (z > state.zbuff[zbuff_idx]) continue;
          state.zbuff[zbuff_idx] = z;
        }

        float u, v;

        if (state.use_pcorrect) {
          Vec bcc = bc;
          bcc.x = bc.x/(sf.v1.z);
          bcc.y = bc.y/(sf.v2.z);
          bcc.z = bc.z/(sf.v3.z);
          float bd = bcc.x+bcc.y+bcc.z;
          bcc.x = bcc.x/bd;
          bcc.y = bcc.y/bd;
          bcc.z = bcc.z/bd;

          u = bcc.x*vt1.x + bcc.y*vt2.x + bcc.z*vt3.x;
          v = 1.0-(bcc.x*vt1.y + bcc.y*vt2.y + bcc.z*vt3.y);
        } else {
          u = bc.x*vt1.x + bc.y*vt2.x + bc.z*vt3.x;
          v = 1.0-(bc.x*vt1.y + bc.y*vt2.y + bc.z*vt3.y);
        }

        int tx = texture->w * u;
        int ty = texture->h * v;

        TPixel texel = tigrGet(texture, tx % texture->w, ty % texture->h);

        if (state.shading == SHADING_GOURAUD && has_normals) {
          int s1 = shade(vn1, bc);
          int s2 = shade(vn2, bc);
          int s3 = shade(vn3, bc);
          shading = bc.x*s1 + bc.y*s2 + bc.z*s3;
        }

        if (shading >= 0) {
          texel.r = (texel.r * shading) >> 8;
          texel.g = (texel.g * shading) >> 8;
          texel.b = (texel.b * shading) >> 8;
        }
        tigrPlot(scr, x, y, texel);
      }
    }
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x3d0, %rsp            # imm = 0x3D0
leaq 0x68(%rbp), %rax
movq %rax, -0x3c0(%rbp)
leaq 0x10(%rbp), %rax
movq %rax, -0x3b8(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x10(%rbp), %rcx
movq 0x18(%rcx), %rdi
movl 0x54(%rax), %esi
callq 0xabd0
movq %rax, %rsi
leaq -0x40(%rbp), %rdi
movl $0x30, %edx
callq 0x32d0
movq $0x0, -0x48(%rbp)
cmpq $0x0, -0x18(%rbp)
je 0xc94f
movq -0x18(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0xc935
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x3c8(%rbp)
jmp 0xc944
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
movq %rax, -0x3c8(%rbp)
movq -0x3c8(%rbp), %rax
movq %rax, -0x48(%rbp)
cmpq $0x0, -0x48(%rbp)
jne 0xc95b
jmp 0xd6d2
movq -0x3c0(%rbp), %rax
movl $0xffffffff, -0x4c(%rbp) # imm = 0xFFFFFFFF
movl $0x0, -0x50(%rbp)
cmpl $0x1, 0x14(%rax)
jne 0xc9ee
movq -0x3b8(%rbp), %rax
movabsq $0x3eaa7efa3eaa7efa, %rcx # imm = 0x3EAA7EFA3EAA7EFA
movq %rcx, -0x90(%rbp)
movl $0x3eaa7efa, -0x88(%rbp) # imm = 0x3EAA7EFA
movl 0x50(%rax), %ecx
movl %ecx, -0x98(%rbp)
movq 0x48(%rax), %rax
movq %rax, -0xa0(%rbp)
movsd -0xa0(%rbp), %xmm0
movss -0x98(%rbp), %xmm1
movl -0x88(%rbp), %eax
movl %eax, -0xa8(%rbp)
movq -0x90(%rbp), %rax
movq %rax, -0xb0(%rbp)
movsd -0xb0(%rbp), %xmm2
movss -0xa8(%rbp), %xmm3
callq 0xc680
movl %eax, -0x4c(%rbp)
movq -0x3c0(%rbp), %rax
cmpl $0x2, 0x14(%rax)
jne 0xce38
xorl %eax, %eax
cmpl $0x0, -0x28(%rbp)
movb %al, -0x3c9(%rbp)
jle 0xca28
xorl %eax, %eax
cmpl $0x0, -0x24(%rbp)
movb %al, -0x3c9(%rbp)
jle 0xca28
cmpl $0x0, -0x20(%rbp)
setg %al
movb %al, -0x3c9(%rbp)
movb -0x3c9(%rbp), %al
andb $0x1, %al
movzbl %al, %eax
movl %eax, -0x50(%rbp)
cmpl $0x0, -0x50(%rbp)
je 0xce36
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
movl -0x28(%rbp), %esi
decl %esi
callq 0xabd0
movl 0x8(%rax), %ecx
movl %ecx, -0xc8(%rbp)
movq (%rax), %rax
movq %rax, -0xd0(%rbp)
movsd -0xd0(%rbp), %xmm0
movss -0xc8(%rbp), %xmm1
callq 0xaf60
movss %xmm1, -0xd8(%rbp)
movlpd %xmm0, -0xe0(%rbp)
movl -0xd8(%rbp), %eax
movl %eax, -0xb8(%rbp)
movq -0xe0(%rbp), %rax
movq %rax, -0xc0(%rbp)
movl -0xb8(%rbp), %eax
movl %eax, -0x58(%rbp)
movq -0xc0(%rbp), %rax
movq %rax, -0x60(%rbp)
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
movl -0x24(%rbp), %esi
decl %esi
callq 0xabd0
movl 0x8(%rax), %ecx
movl %ecx, -0xf8(%rbp)
movq (%rax), %rax
movq %rax, -0x100(%rbp)
movsd -0x100(%rbp), %xmm0
movss -0xf8(%rbp), %xmm1
callq 0xaf60
movss %xmm1, -0x108(%rbp)
movlpd %xmm0, -0x110(%rbp)
movl -0x108(%rbp), %eax
movl %eax, -0xe8(%rbp)
movq -0x110(%rbp), %rax
movq %rax, -0xf0(%rbp)
movl -0xe8(%rbp), %eax
movl %eax, -0x68(%rbp)
movq -0xf0(%rbp), %rax
movq %rax, -0x70(%rbp)
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rdi
movl -0x20(%rbp), %esi
decl %esi
callq 0xabd0
movl 0x8(%rax), %ecx
movl %ecx, -0x128(%rbp)
movq (%rax), %rax
movq %rax, -0x130(%rbp)
movsd -0x130(%rbp), %xmm0
movss -0x128(%rbp), %xmm1
callq 0xaf60
movq -0x3c0(%rbp), %rax
movss %xmm1, -0x138(%rbp)
movlpd %xmm0, -0x140(%rbp)
movl -0x138(%rbp), %ecx
movl %ecx, -0x118(%rbp)
movq -0x140(%rbp), %rcx
movq %rcx, -0x120(%rbp)
movl -0x118(%rbp), %ecx
movl %ecx, -0x78(%rbp)
movq -0x120(%rbp), %rcx
movq %rcx, -0x80(%rbp)
movl -0x58(%rbp), %ecx
movl %ecx, -0x158(%rbp)
movq -0x60(%rbp), %rcx
movq %rcx, -0x160(%rbp)
movsd -0x160(%rbp), %xmm0
movss -0x158(%rbp), %xmm1
movl 0x20(%rax), %ecx
movl %ecx, -0x168(%rbp)
movq 0x18(%rax), %rcx
movq %rcx, -0x170(%rbp)
movsd -0x170(%rbp), %xmm2
movss -0x168(%rbp), %xmm3
movl 0x2c(%rax), %ecx
movl %ecx, -0x178(%rbp)
movq 0x24(%rax), %rcx
movq %rcx, -0x180(%rbp)
movsd -0x180(%rbp), %xmm4
movss -0x178(%rbp), %xmm5
movl 0x38(%rax), %ecx
movl %ecx, -0x188(%rbp)
movq 0x30(%rax), %rax
movq %rax, -0x190(%rbp)
movsd -0x190(%rbp), %xmm6
movss -0x188(%rbp), %xmm7
callq 0xb120
movq -0x3c0(%rbp), %rax
movss %xmm1, -0x198(%rbp)
movlpd %xmm0, -0x1a0(%rbp)
movl -0x198(%rbp), %ecx
movl %ecx, -0x148(%rbp)
movq -0x1a0(%rbp), %rcx
movq %rcx, -0x150(%rbp)
movl -0x148(%rbp), %ecx
movl %ecx, -0x58(%rbp)
movq -0x150(%rbp), %rcx
movq %rcx, -0x60(%rbp)
movl -0x68(%rbp), %ecx
movl %ecx, -0x1b8(%rbp)
movq -0x70(%rbp), %rcx
movq %rcx, -0x1c0(%rbp)
movsd -0x1c0(%rbp), %xmm0
movss -0x1b8(%rbp), %xmm1
movl 0x20(%rax), %ecx
movl %ecx, -0x1c8(%rbp)
movq 0x18(%rax), %rcx
movq %rcx, -0x1d0(%rbp)
movsd -0x1d0(%rbp), %xmm2
movss -0x1c8(%rbp), %xmm3
movl 0x2c(%rax), %ecx
movl %ecx, -0x1d8(%rbp)
movq 0x24(%rax), %rcx
movq %rcx, -0x1e0(%rbp)
movsd -0x1e0(%rbp), %xmm4
movss -0x1d8(%rbp), %xmm5
movl 0x38(%rax), %ecx
movl %ecx, -0x1e8(%rbp)
movq 0x30(%rax), %rax
movq %rax, -0x1f0(%rbp)
movsd -0x1f0(%rbp), %xmm6
movss -0x1e8(%rbp), %xmm7
callq 0xb120
movq -0x3c0(%rbp), %rax
movss %xmm1, -0x1f8(%rbp)
movlpd %xmm0, -0x200(%rbp)
movl -0x1f8(%rbp), %ecx
movl %ecx, -0x1a8(%rbp)
movq -0x200(%rbp), %rcx
movq %rcx, -0x1b0(%rbp)
movl -0x1a8(%rbp), %ecx
movl %ecx, -0x68(%rbp)
movq -0x1b0(%rbp), %rcx
movq %rcx, -0x70(%rbp)
movl -0x78(%rbp), %ecx
movl %ecx, -0x218(%rbp)
movq -0x80(%rbp), %rcx
movq %rcx, -0x220(%rbp)
movsd -0x220(%rbp), %xmm0
movss -0x218(%rbp), %xmm1
movl 0x20(%rax), %ecx
movl %ecx, -0x228(%rbp)
movq 0x18(%rax), %rcx
movq %rcx, -0x230(%rbp)
movsd -0x230(%rbp), %xmm2
movss -0x228(%rbp), %xmm3
movl 0x2c(%rax), %ecx
movl %ecx, -0x238(%rbp)
movq 0x24(%rax), %rcx
movq %rcx, -0x240(%rbp)
movsd -0x240(%rbp), %xmm4
movss -0x238(%rbp), %xmm5
movl 0x38(%rax), %ecx
movl %ecx, -0x248(%rbp)
movq 0x30(%rax), %rax
movq %rax, -0x250(%rbp)
movsd -0x250(%rbp), %xmm6
movss -0x248(%rbp), %xmm7
callq 0xb120
movss %xmm1, -0x258(%rbp)
movlpd %xmm0, -0x260(%rbp)
movq -0x260(%rbp), %rax
movq %rax, -0x20c(%rbp)
movl -0x258(%rbp), %eax
movl %eax, -0x204(%rbp)
movq -0x20c(%rbp), %rax
movq %rax, -0x80(%rbp)
movl -0x204(%rbp), %eax
movl %eax, -0x78(%rbp)
jmp 0xce38
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rdi
movl -0x34(%rbp), %esi
subl $0x1, %esi
callq 0xabd0
movq (%rax), %rcx
movq %rcx, -0x26c(%rbp)
movl 0x8(%rax), %eax
movl %eax, -0x264(%rbp)
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rdi
movl -0x30(%rbp), %esi
subl $0x1, %esi
callq 0xabd0
movq (%rax), %rcx
movq %rcx, -0x278(%rbp)
movl 0x8(%rax), %eax
movl %eax, -0x270(%rbp)
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rdi
movl -0x2c(%rbp), %esi
subl $0x1, %esi
callq 0xabd0
movq %rax, %rcx
movq -0x3b8(%rbp), %rax
movq (%rcx), %rdx
movq %rdx, -0x284(%rbp)
movl 0x8(%rcx), %ecx
movl %ecx, -0x27c(%rbp)
movss (%rax), %xmm2
movss 0xc(%rax), %xmm1
movaps %xmm1, %xmm4
movaps %xmm2, %xmm3
cmpunordss %xmm3, %xmm3
movaps %xmm3, %xmm0
pand %xmm4, %xmm0
minss %xmm2, %xmm1
pandn %xmm1, %xmm3
por %xmm0, %xmm3
movss 0x18(%rax), %xmm2
movaps %xmm2, %xmm4
movaps %xmm3, %xmm0
cmpunordss %xmm0, %xmm0
movaps %xmm0, %xmm1
pand %xmm4, %xmm1
minss %xmm3, %xmm2
pandn %xmm2, %xmm0
por %xmm1, %xmm0
cvttss2si %xmm0, %ecx
movl %ecx, -0x288(%rbp)
movss (%rax), %xmm2
movss 0xc(%rax), %xmm1
movaps %xmm1, %xmm4
movaps %xmm2, %xmm3
cmpunordss %xmm3, %xmm3
movaps %xmm3, %xmm0
pand %xmm4, %xmm0
maxss %xmm2, %xmm1
pandn %xmm1, %xmm3
por %xmm0, %xmm3
movss 0x18(%rax), %xmm2
movaps %xmm2, %xmm4
movaps %xmm3, %xmm0
cmpunordss %xmm0, %xmm0
movaps %xmm0, %xmm1
pand %xmm4, %xmm1
maxss %xmm3, %xmm2
pandn %xmm2, %xmm0
por %xmm1, %xmm0
movss 0x20aa(%rip), %xmm1     # 0xf004
addss %xmm1, %xmm0
cvttss2si %xmm0, %ecx
movl %ecx, -0x28c(%rbp)
movss 0x4(%rax), %xmm2
movss 0x10(%rax), %xmm1
movaps %xmm1, %xmm4
movaps %xmm2, %xmm3
cmpunordss %xmm3, %xmm3
movaps %xmm3, %xmm0
pand %xmm4, %xmm0
minss %xmm2, %xmm1
pandn %xmm1, %xmm3
por %xmm0, %xmm3
movss 0x1c(%rax), %xmm2
movaps %xmm2, %xmm4
movaps %xmm3, %xmm0
cmpunordss %xmm0, %xmm0
movaps %xmm0, %xmm1
pand %xmm4, %xmm1
minss %xmm3, %xmm2
pandn %xmm2, %xmm0
por %xmm1, %xmm0
cvttss2si %xmm0, %ecx
movl %ecx, -0x290(%rbp)
movss 0x4(%rax), %xmm2
movss 0x10(%rax), %xmm1
movaps %xmm1, %xmm4
movaps %xmm2, %xmm3
cmpunordss %xmm3, %xmm3
movaps %xmm3, %xmm0
pand %xmm4, %xmm0
maxss %xmm2, %xmm1
pandn %xmm1, %xmm3
por %xmm0, %xmm3
movss 0x1c(%rax), %xmm2
movaps %xmm2, %xmm4
movaps %xmm3, %xmm0
cmpunordss %xmm0, %xmm0
movaps %xmm0, %xmm1
pand %xmm4, %xmm1
maxss %xmm3, %xmm2
pandn %xmm2, %xmm0
por %xmm1, %xmm0
movss 0x1ff4(%rip), %xmm1     # 0xf004
addss %xmm1, %xmm0
cvttss2si %xmm0, %eax
movl %eax, -0x294(%rbp)
movl -0x290(%rbp), %eax
movl %eax, -0x298(%rbp)
movl -0x298(%rbp), %eax
cmpl -0x294(%rbp), %eax
jge 0xd6d2
movl -0x288(%rbp), %eax
movl %eax, -0x29c(%rbp)
movl -0x29c(%rbp), %eax
cmpl -0x28c(%rbp), %eax
jge 0xd6bc
movq -0x3b8(%rbp), %rax
cvtsi2ssl -0x29c(%rbp), %xmm0
movss %xmm0, -0x2a8(%rbp)
cvtsi2ssl -0x298(%rbp), %xmm0
movss %xmm0, -0x2a4(%rbp)
movl $0x0, -0x2a0(%rbp)
movl -0x2a0(%rbp), %ecx
movl %ecx, -0x2c0(%rbp)
movq -0x2a8(%rbp), %rcx
movq %rcx, -0x2c8(%rbp)
movsd -0x2c8(%rbp), %xmm0
movss -0x2c0(%rbp), %xmm1
movl 0x8(%rax), %ecx
movl %ecx, -0x2d0(%rbp)
movq (%rax), %rcx
movq %rcx, -0x2d8(%rbp)
movsd -0x2d8(%rbp), %xmm2
movss -0x2d0(%rbp), %xmm3
movl 0x14(%rax), %ecx
movl %ecx, -0x2e0(%rbp)
movq 0xc(%rax), %rcx
movq %rcx, -0x2e8(%rbp)
movsd -0x2e8(%rbp), %xmm4
movss -0x2e0(%rbp), %xmm5
movl 0x20(%rax), %ecx
movl %ecx, -0x2f0(%rbp)
movq 0x18(%rax), %rax
movq %rax, -0x2f8(%rbp)
movsd -0x2f8(%rbp), %xmm6
movss -0x2f0(%rbp), %xmm7
callq 0xb420
movss %xmm1, -0x300(%rbp)
movlpd %xmm0, -0x308(%rbp)
movq -0x308(%rbp), %rax
movq %rax, -0x2b4(%rbp)
movl -0x300(%rbp), %eax
movl %eax, -0x2ac(%rbp)
movss 0x3641(%rip), %xmm0     # 0x10798
movss %xmm0, -0x30c(%rbp)
movss -0x2b4(%rbp), %xmm0
ucomiss -0x30c(%rbp), %xmm0
jb 0xd6a6
movss -0x2b0(%rbp), %xmm0
ucomiss -0x30c(%rbp), %xmm0
jb 0xd6a6
movss -0x2ac(%rbp), %xmm0
ucomiss -0x30c(%rbp), %xmm0
jb 0xd6a6
movq -0x3c0(%rbp), %rax
cmpl $0x0, 0x4(%rax)
je 0xd24f
movq -0x3c0(%rbp), %rax
movq -0x3b8(%rbp), %rcx
movss -0x2b4(%rbp), %xmm1
movss 0x8(%rcx), %xmm2
movss -0x2b0(%rbp), %xmm0
mulss 0x14(%rcx), %xmm0
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movss -0x2ac(%rbp), %xmm0
movss 0x20(%rcx), %xmm2
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss %xmm0, -0x310(%rbp)
imull $0x140, -0x298(%rbp), %ecx # imm = 0x140
addl -0x29c(%rbp), %ecx
movl %ecx, -0x314(%rbp)
movss -0x310(%rbp), %xmm0
movq 0x40(%rax), %rax
movslq -0x314(%rbp), %rcx
ucomiss (%rax,%rcx,4), %xmm0
jbe 0xd230
jmp 0xd6a8
movq -0x3c0(%rbp), %rax
movss -0x310(%rbp), %xmm0
movq 0x40(%rax), %rax
movslq -0x314(%rbp), %rcx
movss %xmm0, (%rax,%rcx,4)
movq -0x3c0(%rbp), %rax
cmpl $0x0, 0x8(%rax)
je 0xd3d1
movq -0x3b8(%rbp), %rax
movq -0x2b4(%rbp), %rcx
movq %rcx, -0x328(%rbp)
movl -0x2ac(%rbp), %ecx
movl %ecx, -0x320(%rbp)
movss -0x2b4(%rbp), %xmm0
divss 0x8(%rax), %xmm0
movss %xmm0, -0x328(%rbp)
movss -0x2b0(%rbp), %xmm0
divss 0x14(%rax), %xmm0
movss %xmm0, -0x324(%rbp)
movss -0x2ac(%rbp), %xmm0
divss 0x20(%rax), %xmm0
movss %xmm0, -0x320(%rbp)
movss -0x328(%rbp), %xmm0
addss -0x324(%rbp), %xmm0
addss -0x320(%rbp), %xmm0
movss %xmm0, -0x32c(%rbp)
movss -0x328(%rbp), %xmm0
divss -0x32c(%rbp), %xmm0
movss %xmm0, -0x328(%rbp)
movss -0x324(%rbp), %xmm0
divss -0x32c(%rbp), %xmm0
movss %xmm0, -0x324(%rbp)
movss -0x320(%rbp), %xmm0
divss -0x32c(%rbp), %xmm0
movss %xmm0, -0x320(%rbp)
movss -0x328(%rbp), %xmm1
movss -0x26c(%rbp), %xmm2
movss -0x324(%rbp), %xmm0
mulss -0x278(%rbp), %xmm0
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movss -0x320(%rbp), %xmm0
movss -0x284(%rbp), %xmm2
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss %xmm0, -0x318(%rbp)
movss -0x328(%rbp), %xmm1
movss -0x268(%rbp), %xmm2
movss -0x324(%rbp), %xmm0
mulss -0x274(%rbp), %xmm0
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movss -0x320(%rbp), %xmm0
movss -0x280(%rbp), %xmm2
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
cvtss2sd %xmm0, %xmm1
movsd 0x309c(%rip), %xmm0     # 0x10458
subsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, -0x31c(%rbp)
jmp 0xd475
movss -0x2b4(%rbp), %xmm1
movss -0x26c(%rbp), %xmm2
movss -0x2b0(%rbp), %xmm0
mulss -0x278(%rbp), %xmm0
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movss -0x2ac(%rbp), %xmm0
movss -0x284(%rbp), %xmm2
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movss %xmm0, -0x318(%rbp)
movss -0x2b4(%rbp), %xmm1
movss -0x268(%rbp), %xmm2
movss -0x2b0(%rbp), %xmm0
mulss -0x274(%rbp), %xmm0
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movss -0x2ac(%rbp), %xmm0
movss -0x280(%rbp), %xmm2
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
cvtss2sd %xmm0, %xmm1
movsd 0x2ff3(%rip), %xmm0     # 0x10458
subsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, -0x31c(%rbp)
movq -0x48(%rbp), %rax
cvtsi2ssl (%rax), %xmm0
mulss -0x318(%rbp), %xmm0
cvttss2si %xmm0, %eax
movl %eax, -0x330(%rbp)
movq -0x48(%rbp), %rax
cvtsi2ssl 0x4(%rax), %xmm0
mulss -0x31c(%rbp), %xmm0
cvttss2si %xmm0, %eax
movl %eax, -0x334(%rbp)
movq -0x48(%rbp), %rdi
movl -0x330(%rbp), %eax
movq -0x48(%rbp), %rcx
cltd
idivl (%rcx)
movl %edx, %esi
movl -0x334(%rbp), %eax
movq -0x48(%rbp), %rcx
cltd
idivl 0x4(%rcx)
callq 0x46f0
movl %eax, %ecx
movq -0x3c0(%rbp), %rax
movl %ecx, -0x338(%rbp)
cmpl $0x2, 0x14(%rax)
jne 0xd649
cmpl $0x0, -0x50(%rbp)
je 0xd649
movl -0x58(%rbp), %eax
movl %eax, -0x348(%rbp)
movq -0x60(%rbp), %rax
movq %rax, -0x350(%rbp)
movsd -0x350(%rbp), %xmm0
movss -0x348(%rbp), %xmm1
movl -0x2ac(%rbp), %eax
movl %eax, -0x358(%rbp)
movq -0x2b4(%rbp), %rax
movq %rax, -0x360(%rbp)
movsd -0x360(%rbp), %xmm2
movss -0x358(%rbp), %xmm3
callq 0xc680
movl %eax, -0x33c(%rbp)
movl -0x68(%rbp), %eax
movl %eax, -0x370(%rbp)
movq -0x70(%rbp), %rax
movq %rax, -0x378(%rbp)
movsd -0x378(%rbp), %xmm0
movss -0x370(%rbp), %xmm1
movl -0x2ac(%rbp), %eax
movl %eax, -0x380(%rbp)
movq -0x2b4(%rbp), %rax
movq %rax, -0x388(%rbp)
movsd -0x388(%rbp), %xmm2
movss -0x380(%rbp), %xmm3
callq 0xc680
movl %eax, -0x364(%rbp)
movl -0x78(%rbp), %eax
movl %eax, -0x398(%rbp)
movq -0x80(%rbp), %rax
movq %rax, -0x3a0(%rbp)
movsd -0x3a0(%rbp), %xmm0
movss -0x398(%rbp), %xmm1
movl -0x2ac(%rbp), %eax
movl %eax, -0x3a8(%rbp)
movq -0x2b4(%rbp), %rax
movq %rax, -0x3b0(%rbp)
movsd -0x3b0(%rbp), %xmm2
movss -0x3a8(%rbp), %xmm3
callq 0xc680
movl %eax, -0x38c(%rbp)
movss -0x2b4(%rbp), %xmm1
cvtsi2ssl -0x33c(%rbp), %xmm2
movss -0x2b0(%rbp), %xmm0
cvtsi2ssl -0x364(%rbp), %xmm3
mulss %xmm3, %xmm0
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movss -0x2ac(%rbp), %xmm0
cvtsi2ssl -0x38c(%rbp), %xmm2
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
cvttss2si %xmm0, %eax
movl %eax, -0x4c(%rbp)
cmpl $0x0, -0x4c(%rbp)
jl 0xd68b
movzbl -0x338(%rbp), %eax
imull -0x4c(%rbp), %eax
sarl $0x8, %eax
movb %al, -0x338(%rbp)
movzbl -0x337(%rbp), %eax
imull -0x4c(%rbp), %eax
sarl $0x8, %eax
movb %al, -0x337(%rbp)
movzbl -0x336(%rbp), %eax
imull -0x4c(%rbp), %eax
sarl $0x8, %eax
movb %al, -0x336(%rbp)
movq -0x8(%rbp), %rdi
movl -0x29c(%rbp), %esi
movl -0x298(%rbp), %edx
movl -0x338(%rbp), %ecx
callq 0x3e90
jmp 0xd6a8
movl -0x29c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x29c(%rbp)
jmp 0xd048
jmp 0xd6be
movl -0x298(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x298(%rbp)
jmp 0xd02a
addq $0x3d0, %rsp            # imm = 0x3D0
popq %rbp
retq
nopl (%rax,%rax)