// File: /workspace/github_cpp_makefile_star2_O2/cloudinary[P]fuif/./export/write_png.h
// Function: write_PNG_file(char const*, Image const&)
bool write_PNG_file(const char *output_image, const Image &image) {

  int nb_channels = image.channel.size();
  bool debugstuff = false;

  if (nb_channels > ((image.colormodel & 48) == 16 ? 5 : 4)) {
    e_printf("Too many channels. Saving just the first 3 channels (instead of %i)\n",nb_channels);
    nb_channels = 3; // just use the first 3. debug stuff
    debugstuff = true;
  }
  if (nb_channels == 0) {
    e_printf("Cannot save a zero-channel 'image' as PNG.\n");
    return false;
  }


  int w = image.channel[0].w;
  int h = image.channel[0].h;
  if (image.w < w) w = image.w;
  if (image.h < h) h = image.h;
  for (int i=1; i<nb_channels; i++) {
    if (image.channel[i].w < w) nb_channels = 1;
    if (image.channel[i].h < h) nb_channels = 1;
    if (nb_channels == 1) e_printf("Not saving channel %i since dimensions (%ix%i) do not correspond with the image dimensions (%ix%i).\n",i,image.channel[i].w,image.channel[i].h,w,h);
  }

  if (nb_channels > image.nb_channels) {debugstuff=true; nb_channels=1;}

  if (w > 0x7fffffffL || h > 0x7fffffffL) {
    printf("Image too large to be saved as PNG.\n");
    return false;
  }

  FILE *fp = fopen(output_image,"wb");
  if (!fp) {
    return false;
  }
  png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING,(png_voidp) NULL,NULL,NULL);
  if (!png_ptr) {
    fclose(fp);
    return false;
  }

  png_infop info_ptr = png_create_info_struct(png_ptr);
  if (!info_ptr) {
    png_destroy_write_struct(&png_ptr,(png_infopp) NULL);
    fclose(fp);
    return false;
  }

  png_init_io(png_ptr,fp);
  png_set_user_limits(png_ptr, 0x7fffffffL, 0x7fffffffL);
//  png_set_filter(png_ptr,0,PNG_FILTER_PAETH);
//  png_set_compression_level(png_ptr,Z_BEST_COMPRESSION);


  int colortype=PNG_COLOR_TYPE_RGB;
  bool cmyk = false;
  if ((image.colormodel & 48) == 0) { // RGB
    if (nb_channels == 4) colortype=PNG_COLOR_TYPE_RGB_ALPHA;
  } else if ((image.colormodel & 48) == 16) { // CMYK
    if (nb_channels == 5) colortype=PNG_COLOR_TYPE_RGB_ALPHA;
    if (nb_channels > 3) cmyk = true;
  }

  if (nb_channels == 1) colortype=PNG_COLOR_TYPE_GRAY;
  if (nb_channels == 2) colortype=PNG_COLOR_TYPE_GRAY_ALPHA;
  int bit_depth = 8, bytes_per_value=1;
  if (image.channel[0].minval < 0) {bit_depth = 8; bytes_per_value=1;} // this is just for debugging things

  if (image.maxval > 255) {bit_depth = 16; bytes_per_value=2;}
  if (image.maxval > 65535) { e_printf("Cannot save as PNG since bit depth is higher than 16-bit.\n");    return false; }

  if (image.channel[0].maxval > 255 && debugstuff && nb_channels == 1) {colortype=PNG_COLOR_TYPE_RGB; nb_channels=3;}

  int shift = 0;
//  if (image.channel[0].maxval == 2048) shift = 5;  // could use something like this to debug DCT values

  png_set_IHDR(png_ptr,info_ptr,w,h,bit_depth,colortype,PNG_INTERLACE_NONE,PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);

  png_write_info(png_ptr,info_ptr);

  png_bytep row = (png_bytep) png_malloc(png_ptr,nb_channels * bytes_per_value * w);

  v_printf(10,"Writing PNG file (range %i..%i)\n",image.minval,image.maxval);
  if (image.channel[0].maxval > 255 && debugstuff) {
    v_printf(10,"Writing PNG file with false colors for debug purposes\n");
    for (size_t r = 0; r < (size_t) h; r++) {
     for (size_t c = 0; c < (size_t) w; c++) {
        row[c * 3 + 0] = (png_byte) (CLAMP((image.channel[0].value(r,c)%10)*26,0,255));
        row[c * 3 + 1] = (png_byte) (CLAMP(image.channel[0].value(r,c)/10,0,255));
        row[c * 3 + 2] = (png_byte) (CLAMP(image.channel[0].value(r,c)/500,0,255));
     }
     png_write_row(png_ptr,row);
    }
  } else if (false && image.channel[0].minval < 0) {
    v_printf(10,"Writing PNG file with negative pixels\n");
   // visualize the negative pixels somehow, for debugging.
   for (size_t r = 0; r < (size_t) h; r++) {
     for (size_t c = 0; c < (size_t) w; c++) {
      for (int p=0; p<nb_channels; p++) {
        row[c * nb_channels + p] = (png_byte) (CLAMP(127+(image.channel[p].value(r,c)),0,255));
      }
     }
    png_write_row(png_ptr,row);
    }
  } else if (cmyk) {
   v_printf(1,"Warning: converting CMYK image to RGB in order to save it as PNG.\n");
   for (size_t r = 0; r < (size_t) h; r++) {
     for (size_t c = 0; c < (size_t) w; c++) {
      for (int p=0; p<3; p++) {
        row[c * (nb_channels-1) + p] = (png_byte) (CLAMP( (255-image.channel[p].value(r,c))*(image.channel[3].value(r,c))/255,0,255));
      }
      if (nb_channels == 5) row[c * (nb_channels-1) + 3] = (png_byte) (CLAMP(image.channel[4].value(r,c),0,255)); // cmyk+alpha

     }
    png_write_row(png_ptr,row);
    }
  } else for (size_t r = 0; r < (size_t) h; r++) {
    if (bytes_per_value == 1) {
     for (size_t c = 0; c < (size_t) w; c++) {
      for (int p=0; p<nb_channels; p++) {
        row[c * nb_channels + p] = (png_byte) (CLAMP(image.channel[p].value(r,c),image.minval,image.maxval));
      }
     }
    } else {
     if (!debugstuff) {
     for (size_t c = 0; c < (size_t) w; c++) {
      for (int p=0; p<nb_channels; p++) {
        row[c * nb_channels * 2 + 2*p] = (png_byte) ((CLAMP(image.channel[p].value(r,c),image.minval,image.maxval)<<shift) >> 8);
        row[c * nb_channels * 2 + 2*p + 1] = (png_byte) ((CLAMP(image.channel[p].value(r,c),image.minval,image.maxval)<<shift) & 0xff);
      }
     }
     } else {
     for (size_t c = 0; c < (size_t) w; c++) {
      for (int p=0; p<nb_channels; p++) {
        row[c * nb_channels * 2 + 2*p] = (png_byte) ((image.channel[p].value(r,c)) >> 8);
        row[c * nb_channels * 2 + 2*p + 1] = (png_byte) ((image.channel[p].value(r,c)) & 0xff);
      }
     }
     }
    }
    png_write_row(png_ptr,row);
  }

  png_free(png_ptr,row);
  png_write_end(png_ptr,info_ptr);
  png_destroy_write_struct(&png_ptr,&info_ptr);
  fclose(fp);
  return 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x78, %rsp
movq %rsi, %rbx
movq %rdi, %r12
movq (%rsi), %rax
movq 0x8(%rsi), %r15
subq %rax, %r15
shrq $0x6, %r15
movl 0x70(%rsi), %ecx
andl $0x30, %ecx
xorl %ebp, %ebp
cmpl $0x10, %ecx
sete %bpl
orl $0x4, %ebp
pushq $0x3
popq %r14
cmpl %r15d, %ebp
jge 0x190ae
leaq 0x631c(%rip), %rdi      # 0x1f3bb
movl %r15d, %esi
xorl %eax, %eax
callq 0x16b80
movq (%rbx), %rax
jmp 0x190ba
movl %r15d, %r14d
testl %r15d, %r15d
je 0x191f2
movq %r12, 0x8(%rsp)
movl %ebp, 0x30(%rsp)
movq %r15, 0x20(%rsp)
movl 0x18(%rax), %esi
movl 0x1c(%rax), %ebp
movl 0x30(%rbx), %eax
cmpl %esi, %eax
cmovll %eax, %esi
movl 0x34(%rbx), %eax
cmpl %ebp, %eax
cmovll %eax, %ebp
pushq $0x1
popq %r13
pushq $0x5c
popq %r12
pushq $0x1
popq %r15
movl %esi, 0x10(%rsp)
movslq %r14d, %rax
cmpq %rax, %r13
jge 0x1913a
movq (%rbx), %rax
movl -0x4(%rax,%r12), %edx
movl (%rax,%r12), %ecx
cmpl %esi, %edx
cmovll %r15d, %r14d
cmpl %ebp, %ecx
cmovll %r15d, %r14d
cmpl $0x1, %r14d
jne 0x19131
leaq 0x6311(%rip), %rdi      # 0x1f42c
movl %r13d, %esi
movl 0x10(%rsp), %r8d
movl %ebp, %r9d
xorl %eax, %eax
callq 0x16b80
movl 0x10(%rsp), %esi
incq %r13
addq $0x40, %r12
jmp 0x190ee
movl 0x64(%rbx), %r13d
cmpl %r13d, %r14d
cmovlel %r14d, %r15d
leaq 0x58bd(%rip), %rsi      # 0x1ea09
movq 0x8(%rsp), %rdi
callq 0x33a0
testq %rax, %rax
je 0x19896
movq %rax, %r12
movl %r13d, 0x8(%rsp)
leaq 0x5fa2(%rip), %rdi      # 0x1f110
xorl %esi, %esi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x3100
movq %rax, 0x60(%rsp)
testq %rax, %rax
je 0x19207
movq %rax, %r13
movq %rax, %rdi
callq 0x35c0
movq %rax, 0x70(%rsp)
testq %rax, %rax
je 0x191fb
movq %rax, 0x50(%rsp)
movq %r13, %rdi
movq %r12, %rsi
callq 0x3600
movq %r13, 0x38(%rsp)
movq %r13, %rdi
movl $0x7fffffff, %esi       # imm = 0x7FFFFFFF
movl $0x7fffffff, %edx       # imm = 0x7FFFFFFF
callq 0x34d0
movl 0x70(%rbx), %eax
andl $0x30, %eax
cmpl $0x10, %eax
movq %r12, 0x68(%rsp)
je 0x1920f
testl %eax, %eax
movl 0x10(%rsp), %edi
movl 0x8(%rsp), %r8d
jne 0x19231
xorl %eax, %eax
cmpl $0x4, %r15d
sete %al
leal 0x2(,%rax,4), %eax
jmp 0x19234
leaq 0x6207(%rip), %rdi      # 0x1f400
jmp 0x19248
leaq 0x60(%rsp), %rdi
xorl %esi, %esi
callq 0x3250
movq %r12, %rdi
jmp 0x19891
xorl %eax, %eax
cmpl $0x5, %r15d
sete %al
leal 0x2(,%rax,4), %eax
cmpl $0x4, %r15d
setge %cl
movl 0x10(%rsp), %edi
movl 0x8(%rsp), %r8d
jmp 0x19236
pushq $0x2
popq %rax
xorl %ecx, %ecx
movl 0x60(%rbx), %esi
cmpl $0x10000, %esi          # imm = 0x10000
jl 0x19254
leaq 0x6249(%rip), %rdi      # 0x1f491
xorl %eax, %eax
callq 0x16b80
jmp 0x19896
movl %ecx, 0x2c(%rsp)
movslq %edi, %rdx
movslq %ebp, %rcx
xorl %ebp, %ebp
movl %esi, 0x48(%rsp)
cmpl $0x100, %esi            # imm = 0x100
setge %bpl
cmpl %r8d, %r14d
setg %r10b
movl 0x30(%rsp), %esi
cmpl 0x20(%rsp), %esi
setl %r12b
leal 0x8(,%rbp,8), %r8d
movq (%rbx), %r9
xorl %esi, %esi
cmpl $0x1, %r15d
sete %dil
cmovel %esi, %eax
cmpl $0x2, %r15d
pushq $0x4
popq %rsi
cmovnel %eax, %esi
movw $0x100, %ax             # imm = 0x100
cmpw %ax, 0x22(%r9)
setge %al
orb %r10b, %r12b
andb %r12b, %dil
testb %dil, %al
pushq $0x2
popq %r9
cmovel %esi, %r9d
pushq $0x3
popq %r14
cmovel %r15d, %r14d
subq $0x8, %rsp
movq 0x40(%rsp), %r15
movq %r15, %rdi
movq 0x58(%rsp), %r13
movq %r13, %rsi
movq %rdx, 0x28(%rsp)
movq %rcx, 0x48(%rsp)
pushq $0x0
pushq $0x0
pushq $0x0
callq 0x3570
addq $0x20, %rsp
movq %r15, %rdi
movq %r13, %rsi
callq 0x31e0
movq %r14, 0x8(%rsp)
movl %r14d, %eax
movl %ebp, %ecx
shll %cl, %eax
imull 0x10(%rsp), %eax
movslq %eax, %rsi
movq %r15, %rdi
callq 0x3580
movq %rax, 0x18(%rsp)
movl 0x5c(%rbx), %edx
movl 0x60(%rbx), %ecx
leaq 0x619e(%rip), %rsi      # 0x1f4cc
pushq $0xa
popq %rdi
xorl %eax, %eax
callq 0x16c30
movq (%rbx), %rax
movw $0x100, %cx             # imm = 0x100
cmpw %cx, 0x22(%rax)
jl 0x19484
testb %r12b, %r12b
je 0x19484
leaq 0x6194(%rip), %rsi      # 0x1f4ed
xorl %r14d, %r14d
pushq $0xa
popq %rdi
xorl %eax, %eax
callq 0x16c30
movq 0x18(%rsp), %rax
addq $0x2, %rax
movq %rax, 0x10(%rsp)
movw $0xa, %r12w
movw $0x1f4, %r13w           # imm = 0x1F4
cmpq 0x40(%rsp), %r14
je 0x19863
movq 0x10(%rsp), %r15
xorl %ebp, %ebp
cmpq %rbp, 0x20(%rsp)
je 0x1946a
movq (%rbx), %rdi
movl %r14d, %esi
movl %ebp, %edx
callq 0xa79e
cwtd
idivw %r12w
testw %dx, %dx
js 0x193d8
movq (%rbx), %rdi
movl %r14d, %esi
movl %ebp, %edx
callq 0xa79e
movq (%rbx), %rdi
movl %r14d, %esi
movl %ebp, %edx
callq 0xa79e
cwtd
idivw %r12w
imull $0x1a, %edx, %eax
jmp 0x193da
xorl %eax, %eax
movb %al, -0x2(%r15)
movq (%rbx), %rdi
movl %r14d, %esi
movl %ebp, %edx
callq 0xa79e
cmpw $-0x9, %ax
jge 0x193f5
xorl %eax, %eax
jmp 0x19420
movq (%rbx), %rdi
movl %r14d, %esi
movl %ebp, %edx
callq 0xa79e
movl %eax, %ecx
movb $-0x1, %al
cmpw $0x9ff, %cx             # imm = 0x9FF
jg 0x19420
movq (%rbx), %rdi
movl %r14d, %esi
movl %ebp, %edx
callq 0xa79e
cwtd
idivw %r12w
movb %al, -0x1(%r15)
movq (%rbx), %rdi
movl %r14d, %esi
movl %ebp, %edx
callq 0xa79e
cmpw $0xfe0d, %ax            # imm = 0xFE0D
jge 0x1943b
xorl %eax, %eax
jmp 0x1945b
movq (%rbx), %rdi
movl %r14d, %esi
movl %ebp, %edx
callq 0xa79e
movq (%rbx), %rdi
movl %r14d, %esi
movl %ebp, %edx
callq 0xa79e
cwtd
idivw %r13w
movb %al, (%r15)
incq %rbp
addq $0x3, %r15
jmp 0x19390
movq 0x38(%rsp), %r15
movq %r15, %rdi
movq 0x18(%rsp), %rsi
callq 0x3180
incq %r14
jmp 0x1937e
cmpb $0x0, 0x2c(%rsp)
je 0x1963e
leaq 0x608e(%rip), %rsi      # 0x1f524
xorl %r14d, %r14d
pushq $0x1
popq %rdi
xorl %eax, %eax
callq 0x16c30
movq 0x8(%rsp), %rax
decl %eax
cltq
movq %rax, 0x48(%rsp)
cmpq 0x40(%rsp), %r14
je 0x19863
movq 0x18(%rsp), %r15
xorl %ebp, %ebp
cmpq 0x20(%rsp), %rbp
je 0x19624
movq %r15, 0x30(%rsp)
xorl %r12d, %r12d
cmpq $0xc0, %r12
je 0x195b8
movq %r15, 0x10(%rsp)
movq (%rbx), %rdi
addq %r12, %rdi
movl %r14d, %esi
movl %ebp, %edx
callq 0xa79e
cwtl
movl $0xff, %r13d
subl %eax, %r13d
movq (%rbx), %rdi
movl $0xc0, %r15d
addq %r15, %rdi
movl %r14d, %esi
movl %ebp, %edx
callq 0xa79e
cwtl
imull %r13d, %eax
cmpl $0xffffff02, %eax       # imm = 0xFFFFFF02
jge 0x1952d
xorl %eax, %eax
movq 0x10(%rsp), %r15
jmp 0x195a9
movq (%rbx), %rdi
addq %r12, %rdi
movl %r14d, %esi
movl %ebp, %edx
callq 0xa79e
cwtl
movl $0xff, %r13d
subl %eax, %r13d
movq (%rbx), %rdi
addq %r15, %rdi
movl %r14d, %esi
movl %ebp, %edx
callq 0xa79e
movswl %ax, %ecx
imull %r13d, %ecx
movb $-0x1, %al
cmpl $0xfeff, %ecx           # imm = 0xFEFF
movq 0x10(%rsp), %r15
jg 0x195a9
movq (%rbx), %rdi
addq %r12, %rdi
movl %r14d, %esi
movl %ebp, %edx
callq 0xa79e
cwtl
movl $0xff, %r13d
subl %eax, %r13d
movq (%rbx), %rdi
movl $0xc0, %eax
addq %rax, %rdi
movl %r14d, %esi
movl %ebp, %edx
callq 0xa79e
cwtl
imull %r13d, %eax
cltd
movl $0xff, %ecx
idivl %ecx
movb %al, (%r15)
addq $0x40, %r12
incq %r15
jmp 0x194d6
cmpl $0x5, 0x8(%rsp)
movl $0x100, %r15d           # imm = 0x100
jne 0x19612
movq (%rbx), %rdi
addq %r15, %rdi
movl %r14d, %esi
movl %ebp, %edx
callq 0xa79e
testw %ax, %ax
js 0x19607
movq (%rbx), %rdi
addq %r15, %rdi
movl %r14d, %esi
movl %ebp, %edx
callq 0xa79e
movl %eax, %ecx
movb $-0x1, %al
cmpw $0xff, %cx
jg 0x19609
movq (%rbx), %rdi
addq %r15, %rdi
movl %r14d, %esi
movl %ebp, %edx
callq 0xa79e
jmp 0x19609
xorl %eax, %eax
movq 0x18(%rsp), %rcx
movb %al, 0x3(%rcx,%rbp,4)
incq %rbp
movq 0x30(%rsp), %r15
addq 0x48(%rsp), %r15
jmp 0x194c3
movq 0x38(%rsp), %r15
movq %r15, %rdi
movq 0x18(%rsp), %rsi
callq 0x3180
incq %r14
jmp 0x194b1
movb %r12b, 0x2c(%rsp)
movq 0x8(%rsp), %rax
movslq %eax, %rcx
xorl %r14d, %r14d
testl %eax, %eax
cmovlel %r14d, %eax
movq %rcx, 0x10(%rsp)
addq %rcx, %rcx
movq %rcx, 0x30(%rsp)
shlq $0x6, %rax
movq %rax, 0x8(%rsp)
movq 0x18(%rsp), %rax
incq %rax
movq %rax, 0x58(%rsp)
cmpq 0x40(%rsp), %r14
movl 0x48(%rsp), %eax
je 0x19863
cmpl $0xff, %eax
jle 0x196f4
cmpb $0x0, 0x2c(%rsp)
je 0x19771
movq 0x58(%rsp), %r15
xorl %r12d, %r12d
cmpq 0x20(%rsp), %r12
je 0x19849
movq %r15, %rbp
xorl %r13d, %r13d
cmpq %r13, 0x8(%rsp)
je 0x196ea
movq (%rbx), %rdi
addq %r13, %rdi
movl %r14d, %esi
movl %r12d, %edx
callq 0xa79e
movb %ah, -0x1(%rbp)
movq (%rbx), %rdi
addq %r13, %rdi
movl %r14d, %esi
movl %r12d, %edx
callq 0xa79e
movb %al, (%rbp)
addq $0x40, %r13
addq $0x2, %rbp
jmp 0x196b1
incq %r12
addq 0x30(%rsp), %r15
jmp 0x196a0
movq 0x18(%rsp), %r15
xorl %ebp, %ebp
cmpq 0x20(%rsp), %rbp
je 0x19849
movq %r15, %r12
xorl %r13d, %r13d
cmpq %r13, 0x8(%rsp)
je 0x19767
movq (%rbx), %rdi
addq %r13, %rdi
movl %r14d, %esi
movl %ebp, %edx
callq 0xa79e
movswl %ax, %ecx
movl 0x5c(%rbx), %eax
cmpl %ecx, %eax
jg 0x1975a
movq (%rbx), %rdi
addq %r13, %rdi
movl %r14d, %esi
movl %ebp, %edx
callq 0xa79e
movswl %ax, %ecx
movl 0x60(%rbx), %eax
cmpl %ecx, %eax
jl 0x1975a
movq (%rbx), %rdi
addq %r13, %rdi
movl %r14d, %esi
movl %ebp, %edx
callq 0xa79e
movzwl %ax, %eax
movb %al, (%r12)
addq $0x40, %r13
incq %r12
jmp 0x1970c
incq %rbp
addq 0x10(%rsp), %r15
jmp 0x196fb
movq 0x58(%rsp), %r13
xorl %r12d, %r12d
cmpq 0x20(%rsp), %r12
je 0x19849
movq %r13, %rbp
xorl %r15d, %r15d
cmpq %r15, 0x8(%rsp)
je 0x1983c
movq (%rbx), %rdi
addq %r15, %rdi
movl %r14d, %esi
movl %r12d, %edx
callq 0xa79e
movswl %ax, %ecx
movl 0x5c(%rbx), %eax
cmpl %ecx, %eax
jg 0x197df
movq (%rbx), %rdi
addq %r15, %rdi
movl %r14d, %esi
movl %r12d, %edx
callq 0xa79e
movswl %ax, %ecx
movl 0x60(%rbx), %eax
cmpl %ecx, %eax
jl 0x197df
movq (%rbx), %rdi
addq %r15, %rdi
movl %r14d, %esi
movl %r12d, %edx
callq 0xa79e
movzwl %ax, %eax
movb %ah, -0x1(%rbp)
movq (%rbx), %rdi
addq %r15, %rdi
movl %r14d, %esi
movl %r12d, %edx
callq 0xa79e
movswl %ax, %ecx
movl 0x5c(%rbx), %eax
cmpl %ecx, %eax
jg 0x1982c
movq (%rbx), %rdi
addq %r15, %rdi
movl %r14d, %esi
movl %r12d, %edx
callq 0xa79e
movswl %ax, %ecx
movl 0x60(%rbx), %eax
cmpl %ecx, %eax
jl 0x1982c
movq (%rbx), %rdi
addq %r15, %rdi
movl %r14d, %esi
movl %r12d, %edx
callq 0xa79e
movzwl %ax, %eax
movb %al, (%rbp)
addq $0x40, %r15
addq $0x2, %rbp
jmp 0x1978a
incq %r12
addq 0x30(%rsp), %r13
jmp 0x19779
movq 0x38(%rsp), %r15
movq %r15, %rdi
movq 0x18(%rsp), %rsi
callq 0x3180
incq %r14
jmp 0x19677
movq %r15, %rdi
movq 0x18(%rsp), %rsi
callq 0x31f0
movq %r15, %rdi
movq 0x50(%rsp), %rsi
callq 0x32f0
leaq 0x60(%rsp), %rdi
leaq 0x70(%rsp), %rsi
callq 0x3250
movq 0x68(%rsp), %rdi
callq 0x32c0
xorl %eax, %eax
addq $0x78, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq