mono_md5_init (struct MonoMD5Context * ctx)
{
  union _endian * _endian.0;
  char D.4690;

  ctx->buf[0] = 1732584193;
  ctx->buf[1] = 4023233417;
  ctx->buf[2] = 2562383102;
  ctx->buf[3] = 271733878;
  ctx->bits[0] = 0;
  ctx->bits[1] = 0;
  _endian.0 = _endian;
  D.4690 = _endian.0->b[0];
  if (D.4690 == 68) goto <D.4691>; else goto <D.4692>;
  <D.4691>:
  ctx->doByteReverse = 1;
  goto <D.4693>;
  <D.4692>:
  ctx->doByteReverse = 0;
  <D.4693>:
}


mono_md5_update (struct MonoMD5Context * ctx, const guchar * buf, guint32 len)
{
  unsigned int D.4694;
  unsigned int D.4695;
  unsigned int D.4696;
  unsigned int D.4699;
  unsigned int D.4700;
  unsigned int D.4701;
  unsigned int D.4702;
  unsigned int D.4703;
  int D.4708;
  guchar[64] * D.4711;
  guint32[4] * D.4712;
  guint32 t;

  t = ctx->bits[0];
  D.4694 = len << 3;
  D.4695 = D.4694 + t;
  ctx->bits[0] = D.4695;
  D.4696 = ctx->bits[0];
  if (D.4696 < t) goto <D.4697>; else goto <D.4698>;
  <D.4697>:
  D.4699 = ctx->bits[1];
  D.4700 = D.4699 + 1;
  ctx->bits[1] = D.4700;
  <D.4698>:
  D.4699 = ctx->bits[1];
  D.4701 = len >> 29;
  D.4702 = D.4699 + D.4701;
  ctx->bits[1] = D.4702;
  D.4703 = t >> 3;
  t = D.4703 & 63;
  if (t != 0) goto <D.4704>; else goto <D.4705>;
  <D.4704>:
  {
    guchar * p;

    p = &ctx->in[t];
    t = 64 - t;
    if (len < t) goto <D.4706>; else goto <D.4707>;
    <D.4706>:
    memcpy (p, buf, len);
    return;
    <D.4707>:
    memcpy (p, buf, t);
    D.4708 = ctx->doByteReverse;
    if (D.4708 != 0) goto <D.4709>; else goto <D.4710>;
    <D.4709>:
    D.4711 = &ctx->in;
    _byte_reverse (D.4711, 16);
    <D.4710>:
    D.4711 = &ctx->in;
    D.4712 = &ctx->buf;
    md5_transform (D.4712, D.4711);
    buf = buf + t;
    len = len - t;
  }
  <D.4705>:
  goto <D.4655>;
  <D.4654>:
  D.4711 = &ctx->in;
  memcpy (D.4711, buf, 64);
  D.4708 = ctx->doByteReverse;
  if (D.4708 != 0) goto <D.4713>; else goto <D.4714>;
  <D.4713>:
  D.4711 = &ctx->in;
  _byte_reverse (D.4711, 16);
  <D.4714>:
  D.4711 = &ctx->in;
  D.4712 = &ctx->buf;
  md5_transform (D.4712, D.4711);
  buf = buf + 64;
  len = len + 4294967232;
  <D.4655>:
  if (len > 63) goto <D.4654>; else goto <D.4656>;
  <D.4656>:
  D.4711 = &ctx->in;
  memcpy (D.4711, buf, len);
}


_byte_reverse (guchar * buf, guint32 longs)
{
  guchar * D.4716;
  unsigned char D.4717;
  unsigned int D.4718;
  unsigned int D.4719;
  guchar * D.4720;
  unsigned char D.4721;
  unsigned int D.4722;
  unsigned int D.4723;
  unsigned int D.4724;
  guchar * D.4725;
  unsigned char D.4726;
  unsigned int D.4727;
  unsigned int D.4728;
  unsigned char D.4729;
  unsigned int D.4730;
  unsigned int D.4731;
  guint32 t;

  <D.4642>:
  D.4716 = buf + 3;
  D.4717 = *D.4716;
  D.4718 = (unsigned int) D.4717;
  D.4719 = D.4718 << 8;
  D.4720 = buf + 2;
  D.4721 = *D.4720;
  D.4722 = (unsigned int) D.4721;
  D.4723 = D.4719 | D.4722;
  D.4724 = D.4723 << 16;
  D.4725 = buf + 1;
  D.4726 = *D.4725;
  D.4727 = (unsigned int) D.4726;
  D.4728 = D.4727 << 8;
  D.4729 = *buf;
  D.4730 = (unsigned int) D.4729;
  D.4731 = D.4728 | D.4730;
  t = D.4724 | D.4731;
  MEM[(guint32 *)buf] = t;
  buf = buf + 4;
  longs = longs + 4294967295;
  if (longs != 0) goto <D.4642>; else goto <D.4643>;
  <D.4643>:
}


md5_transform (guint32 * buf, const guint32 * in)
{
  unsigned int D.4732;
  unsigned int D.4733;
  unsigned int D.4734;
  unsigned int D.4735;
  unsigned int D.4736;
  unsigned int D.4737;
  unsigned int D.4738;
  unsigned int D.4739;
  unsigned int D.4740;
  const guint32 * D.4741;
  unsigned int D.4742;
  unsigned int D.4743;
  unsigned int D.4744;
  unsigned int D.4745;
  unsigned int D.4746;
  unsigned int D.4747;
  const guint32 * D.4748;
  unsigned int D.4749;
  unsigned int D.4750;
  unsigned int D.4751;
  unsigned int D.4752;
  unsigned int D.4753;
  unsigned int D.4754;
  const guint32 * D.4755;
  unsigned int D.4756;
  unsigned int D.4757;
  unsigned int D.4758;
  const guint32 * D.4759;
  unsigned int D.4760;
  unsigned int D.4761;
  unsigned int D.4762;
  const guint32 * D.4763;
  unsigned int D.4764;
  unsigned int D.4765;
  unsigned int D.4766;
  const guint32 * D.4767;
  unsigned int D.4768;
  unsigned int D.4769;
  unsigned int D.4770;
  const guint32 * D.4771;
  unsigned int D.4772;
  unsigned int D.4773;
  unsigned int D.4774;
  const guint32 * D.4775;
  unsigned int D.4776;
  unsigned int D.4777;
  unsigned int D.4778;
  const guint32 * D.4779;
  unsigned int D.4780;
  unsigned int D.4781;
  unsigned int D.4782;
  const guint32 * D.4783;
  unsigned int D.4784;
  unsigned int D.4785;
  unsigned int D.4786;
  const guint32 * D.4787;
  unsigned int D.4788;
  unsigned int D.4789;
  unsigned int D.4790;
  const guint32 * D.4791;
  unsigned int D.4792;
  unsigned int D.4793;
  unsigned int D.4794;
  const guint32 * D.4795;
  unsigned int D.4796;
  unsigned int D.4797;
  unsigned int D.4798;
  const guint32 * D.4799;
  unsigned int D.4800;
  unsigned int D.4801;
  unsigned int D.4802;
  const guint32 * D.4803;
  unsigned int D.4804;
  unsigned int D.4805;
  unsigned int D.4806;
  unsigned int D.4807;
  unsigned int D.4808;
  unsigned int D.4809;
  unsigned int D.4810;
  unsigned int D.4811;
  unsigned int D.4812;
  unsigned int D.4813;
  unsigned int D.4814;
  unsigned int D.4815;
  unsigned int D.4816;
  unsigned int D.4817;
  unsigned int D.4818;
  unsigned int D.4819;
  unsigned int D.4820;
  unsigned int D.4821;
  unsigned int D.4822;
  unsigned int D.4823;
  unsigned int D.4824;
  unsigned int D.4825;
  unsigned int D.4826;
  unsigned int D.4827;
  unsigned int D.4828;
  unsigned int D.4829;
  unsigned int D.4830;
  unsigned int D.4831;
  unsigned int D.4832;
  unsigned int D.4833;
  unsigned int D.4834;
  unsigned int D.4835;
  unsigned int D.4836;
  unsigned int D.4837;
  unsigned int D.4838;
  unsigned int D.4839;
  unsigned int D.4840;
  unsigned int D.4841;
  unsigned int D.4842;
  unsigned int D.4843;
  unsigned int D.4844;
  unsigned int D.4845;
  unsigned int D.4846;
  unsigned int D.4847;
  unsigned int D.4848;
  unsigned int D.4849;
  unsigned int D.4850;
  unsigned int D.4851;
  unsigned int D.4852;
  unsigned int D.4853;
  unsigned int D.4854;
  unsigned int D.4855;
  unsigned int D.4856;
  unsigned int D.4857;
  unsigned int D.4858;
  unsigned int D.4859;
  unsigned int D.4860;
  unsigned int D.4861;
  unsigned int D.4862;
  unsigned int D.4863;
  unsigned int D.4864;
  unsigned int D.4865;
  unsigned int D.4866;
  unsigned int D.4867;
  unsigned int D.4868;
  unsigned int D.4869;
  unsigned int D.4870;
  unsigned int D.4871;
  unsigned int D.4872;
  unsigned int D.4873;
  unsigned int D.4874;
  unsigned int D.4875;
  unsigned int D.4876;
  unsigned int D.4877;
  unsigned int D.4878;
  unsigned int D.4879;
  unsigned int D.4880;
  unsigned int D.4881;
  unsigned int D.4882;
  unsigned int D.4883;
  unsigned int D.4884;
  unsigned int D.4885;
  unsigned int D.4886;
  unsigned int D.4887;
  unsigned int D.4888;
  unsigned int D.4889;
  unsigned int D.4890;
  unsigned int D.4891;
  unsigned int D.4892;
  unsigned int D.4893;
  unsigned int D.4894;
  unsigned int D.4895;
  unsigned int D.4896;
  unsigned int D.4897;
  unsigned int D.4898;
  unsigned int D.4899;
  unsigned int D.4900;
  unsigned int D.4901;
  unsigned int D.4902;
  unsigned int D.4903;
  unsigned int D.4904;
  unsigned int D.4905;
  unsigned int D.4906;
  unsigned int D.4907;
  unsigned int D.4908;
  unsigned int D.4909;
  unsigned int D.4910;
  unsigned int D.4911;
  unsigned int D.4912;
  unsigned int D.4913;
  unsigned int D.4914;
  unsigned int D.4915;
  unsigned int D.4916;
  unsigned int D.4917;
  unsigned int D.4918;
  unsigned int D.4919;
  unsigned int D.4920;
  unsigned int D.4921;
  unsigned int D.4922;
  unsigned int D.4923;
  unsigned int D.4924;
  unsigned int D.4925;
  unsigned int D.4926;
  unsigned int D.4927;
  unsigned int D.4928;
  guint32 * D.4929;
  unsigned int D.4930;
  unsigned int D.4931;
  guint32 * D.4932;
  unsigned int D.4933;
  unsigned int D.4934;
  guint32 * D.4935;
  unsigned int D.4936;
  unsigned int D.4937;
  register guint32 a;
  register guint32 b;
  register guint32 c;
  register guint32 d;

  a = *buf;
  b = MEM[(guint32 *)buf + 4B];
  c = MEM[(guint32 *)buf + 8B];
  d = MEM[(guint32 *)buf + 12B];
  D.4732 = c ^ d;
  D.4733 = D.4732 & b;
  D.4734 = D.4733 ^ d;
  D.4735 = *in;
  D.4736 = D.4734 + D.4735;
  D.4737 = D.4736 + a;
  a = D.4737 + 3614090360;
  a = a r>> 25;
  a = a + b;
  D.4738 = b ^ c;
  D.4739 = D.4738 & a;
  D.4740 = D.4739 ^ c;
  D.4741 = in + 4;
  D.4742 = *D.4741;
  D.4743 = D.4740 + D.4742;
  D.4744 = D.4743 + d;
  d = D.4744 + 3905402710;
  d = d r>> 20;
  d = d + a;
  D.4745 = a ^ b;
  D.4746 = D.4745 & d;
  D.4747 = D.4746 ^ b;
  D.4748 = in + 8;
  D.4749 = *D.4748;
  D.4750 = D.4747 + D.4749;
  D.4751 = D.4750 + c;
  c = D.4751 + 606105819;
  c = c r>> 15;
  c = c + d;
  D.4752 = d ^ a;
  D.4753 = D.4752 & c;
  D.4754 = D.4753 ^ a;
  D.4755 = in + 12;
  D.4756 = *D.4755;
  D.4757 = D.4754 + D.4756;
  D.4758 = D.4757 + b;
  b = D.4758 + 3250441966;
  b = b r>> 10;
  b = b + c;
  D.4732 = c ^ d;
  D.4733 = D.4732 & b;
  D.4734 = D.4733 ^ d;
  D.4759 = in + 16;
  D.4760 = *D.4759;
  D.4761 = D.4734 + D.4760;
  D.4762 = D.4761 + a;
  a = D.4762 + 4118548399;
  a = a r>> 25;
  a = a + b;
  D.4738 = b ^ c;
  D.4739 = D.4738 & a;
  D.4740 = D.4739 ^ c;
  D.4763 = in + 20;
  D.4764 = *D.4763;
  D.4765 = D.4740 + D.4764;
  D.4766 = D.4765 + d;
  d = D.4766 + 1200080426;
  d = d r>> 20;
  d = d + a;
  D.4745 = a ^ b;
  D.4746 = D.4745 & d;
  D.4747 = D.4746 ^ b;
  D.4767 = in + 24;
  D.4768 = *D.4767;
  D.4769 = D.4747 + D.4768;
  D.4770 = D.4769 + c;
  c = D.4770 + 2821735955;
  c = c r>> 15;
  c = c + d;
  D.4752 = d ^ a;
  D.4753 = D.4752 & c;
  D.4754 = D.4753 ^ a;
  D.4771 = in + 28;
  D.4772 = *D.4771;
  D.4773 = D.4754 + D.4772;
  D.4774 = D.4773 + b;
  b = D.4774 + 4249261313;
  b = b r>> 10;
  b = b + c;
  D.4732 = c ^ d;
  D.4733 = D.4732 & b;
  D.4734 = D.4733 ^ d;
  D.4775 = in + 32;
  D.4776 = *D.4775;
  D.4777 = D.4734 + D.4776;
  D.4778 = D.4777 + a;
  a = D.4778 + 1770035416;
  a = a r>> 25;
  a = a + b;
  D.4738 = b ^ c;
  D.4739 = D.4738 & a;
  D.4740 = D.4739 ^ c;
  D.4779 = in + 36;
  D.4780 = *D.4779;
  D.4781 = D.4740 + D.4780;
  D.4782 = D.4781 + d;
  d = D.4782 + 2336552879;
  d = d r>> 20;
  d = d + a;
  D.4745 = a ^ b;
  D.4746 = D.4745 & d;
  D.4747 = D.4746 ^ b;
  D.4783 = in + 40;
  D.4784 = *D.4783;
  D.4785 = D.4747 + D.4784;
  D.4786 = D.4785 + c;
  c = D.4786 + 4294925233;
  c = c r>> 15;
  c = c + d;
  D.4752 = d ^ a;
  D.4753 = D.4752 & c;
  D.4754 = D.4753 ^ a;
  D.4787 = in + 44;
  D.4788 = *D.4787;
  D.4789 = D.4754 + D.4788;
  D.4790 = D.4789 + b;
  b = D.4790 + 2304563134;
  b = b r>> 10;
  b = b + c;
  D.4732 = c ^ d;
  D.4733 = D.4732 & b;
  D.4734 = D.4733 ^ d;
  D.4791 = in + 48;
  D.4792 = *D.4791;
  D.4793 = D.4734 + D.4792;
  D.4794 = D.4793 + a;
  a = D.4794 + 1804603682;
  a = a r>> 25;
  a = a + b;
  D.4738 = b ^ c;
  D.4739 = D.4738 & a;
  D.4740 = D.4739 ^ c;
  D.4795 = in + 52;
  D.4796 = *D.4795;
  D.4797 = D.4740 + D.4796;
  D.4798 = D.4797 + d;
  d = D.4798 + 4254626195;
  d = d r>> 20;
  d = d + a;
  D.4745 = a ^ b;
  D.4746 = D.4745 & d;
  D.4747 = D.4746 ^ b;
  D.4799 = in + 56;
  D.4800 = *D.4799;
  D.4801 = D.4747 + D.4800;
  D.4802 = D.4801 + c;
  c = D.4802 + 2792965006;
  c = c r>> 15;
  c = c + d;
  D.4752 = d ^ a;
  D.4753 = D.4752 & c;
  D.4754 = D.4753 ^ a;
  D.4803 = in + 60;
  D.4804 = *D.4803;
  D.4805 = D.4754 + D.4804;
  D.4806 = D.4805 + b;
  b = D.4806 + 1236535329;
  b = b r>> 10;
  b = b + c;
  D.4738 = b ^ c;
  D.4807 = D.4738 & d;
  D.4808 = D.4807 ^ c;
  D.4741 = in + 4;
  D.4742 = *D.4741;
  D.4809 = D.4808 + D.4742;
  D.4810 = D.4809 + a;
  a = D.4810 + 4129170786;
  a = a r>> 27;
  a = a + b;
  D.4745 = a ^ b;
  D.4811 = D.4745 & c;
  D.4812 = D.4811 ^ b;
  D.4767 = in + 24;
  D.4768 = *D.4767;
  D.4813 = D.4812 + D.4768;
  D.4814 = D.4813 + d;
  d = D.4814 + 3225465664;
  d = d r>> 23;
  d = d + a;
  D.4752 = d ^ a;
  D.4815 = D.4752 & b;
  D.4816 = D.4815 ^ a;
  D.4787 = in + 44;
  D.4788 = *D.4787;
  D.4817 = D.4816 + D.4788;
  D.4818 = D.4817 + c;
  c = D.4818 + 643717713;
  c = c r>> 18;
  c = c + d;
  D.4732 = c ^ d;
  D.4819 = D.4732 & a;
  D.4820 = D.4819 ^ d;
  D.4735 = *in;
  D.4821 = D.4820 + D.4735;
  D.4822 = D.4821 + b;
  b = D.4822 + 3921069994;
  b = b r>> 12;
  b = b + c;
  D.4738 = b ^ c;
  D.4807 = D.4738 & d;
  D.4808 = D.4807 ^ c;
  D.4763 = in + 20;
  D.4764 = *D.4763;
  D.4823 = D.4808 + D.4764;
  D.4824 = D.4823 + a;
  a = D.4824 + 3593408605;
  a = a r>> 27;
  a = a + b;
  D.4745 = a ^ b;
  D.4811 = D.4745 & c;
  D.4812 = D.4811 ^ b;
  D.4783 = in + 40;
  D.4784 = *D.4783;
  D.4825 = D.4812 + D.4784;
  D.4826 = D.4825 + d;
  d = D.4826 + 38016083;
  d = d r>> 23;
  d = d + a;
  D.4752 = d ^ a;
  D.4815 = D.4752 & b;
  D.4816 = D.4815 ^ a;
  D.4803 = in + 60;
  D.4804 = *D.4803;
  D.4827 = D.4816 + D.4804;
  D.4828 = D.4827 + c;
  c = D.4828 + 3634488961;
  c = c r>> 18;
  c = c + d;
  D.4732 = c ^ d;
  D.4819 = D.4732 & a;
  D.4820 = D.4819 ^ d;
  D.4759 = in + 16;
  D.4760 = *D.4759;
  D.4829 = D.4820 + D.4760;
  D.4830 = D.4829 + b;
  b = D.4830 + 3889429448;
  b = b r>> 12;
  b = b + c;
  D.4738 = b ^ c;
  D.4807 = D.4738 & d;
  D.4808 = D.4807 ^ c;
  D.4779 = in + 36;
  D.4780 = *D.4779;
  D.4831 = D.4808 + D.4780;
  D.4832 = D.4831 + a;
  a = D.4832 + 568446438;
  a = a r>> 27;
  a = a + b;
  D.4745 = a ^ b;
  D.4811 = D.4745 & c;
  D.4812 = D.4811 ^ b;
  D.4799 = in + 56;
  D.4800 = *D.4799;
  D.4833 = D.4812 + D.4800;
  D.4834 = D.4833 + d;
  d = D.4834 + 3275163606;
  d = d r>> 23;
  d = d + a;
  D.4752 = d ^ a;
  D.4815 = D.4752 & b;
  D.4816 = D.4815 ^ a;
  D.4755 = in + 12;
  D.4756 = *D.4755;
  D.4835 = D.4816 + D.4756;
  D.4836 = D.4835 + c;
  c = D.4836 + 4107603335;
  c = c r>> 18;
  c = c + d;
  D.4732 = c ^ d;
  D.4819 = D.4732 & a;
  D.4820 = D.4819 ^ d;
  D.4775 = in + 32;
  D.4776 = *D.4775;
  D.4837 = D.4820 + D.4776;
  D.4838 = D.4837 + b;
  b = D.4838 + 1163531501;
  b = b r>> 12;
  b = b + c;
  D.4738 = b ^ c;
  D.4807 = D.4738 & d;
  D.4808 = D.4807 ^ c;
  D.4795 = in + 52;
  D.4796 = *D.4795;
  D.4839 = D.4808 + D.4796;
  D.4840 = D.4839 + a;
  a = D.4840 + 2850285829;
  a = a r>> 27;
  a = a + b;
  D.4745 = a ^ b;
  D.4811 = D.4745 & c;
  D.4812 = D.4811 ^ b;
  D.4748 = in + 8;
  D.4749 = *D.4748;
  D.4841 = D.4812 + D.4749;
  D.4842 = D.4841 + d;
  d = D.4842 + 4243563512;
  d = d r>> 23;
  d = d + a;
  D.4752 = d ^ a;
  D.4815 = D.4752 & b;
  D.4816 = D.4815 ^ a;
  D.4771 = in + 28;
  D.4772 = *D.4771;
  D.4843 = D.4816 + D.4772;
  D.4844 = D.4843 + c;
  c = D.4844 + 1735328473;
  c = c r>> 18;
  c = c + d;
  D.4732 = c ^ d;
  D.4819 = D.4732 & a;
  D.4820 = D.4819 ^ d;
  D.4791 = in + 48;
  D.4792 = *D.4791;
  D.4845 = D.4820 + D.4792;
  D.4846 = D.4845 + b;
  b = D.4846 + 2368359562;
  b = b r>> 12;
  b = b + c;
  D.4738 = b ^ c;
  D.4847 = D.4738 ^ d;
  D.4763 = in + 20;
  D.4764 = *D.4763;
  D.4848 = D.4847 + D.4764;
  D.4849 = D.4848 + a;
  a = D.4849 + 4294588738;
  a = a r>> 28;
  a = a + b;
  D.4745 = a ^ b;
  D.4850 = D.4745 ^ c;
  D.4775 = in + 32;
  D.4776 = *D.4775;
  D.4851 = D.4850 + D.4776;
  D.4852 = D.4851 + d;
  d = D.4852 + 2272392833;
  d = d r>> 21;
  d = d + a;
  D.4752 = d ^ a;
  D.4853 = D.4752 ^ b;
  D.4787 = in + 44;
  D.4788 = *D.4787;
  D.4854 = D.4853 + D.4788;
  D.4855 = D.4854 + c;
  c = D.4855 + 1839030562;
  c = c r>> 16;
  c = c + d;
  D.4732 = c ^ d;
  D.4856 = D.4732 ^ a;
  D.4799 = in + 56;
  D.4800 = *D.4799;
  D.4857 = D.4856 + D.4800;
  D.4858 = D.4857 + b;
  b = D.4858 + 4259657740;
  b = b r>> 9;
  b = b + c;
  D.4738 = b ^ c;
  D.4847 = D.4738 ^ d;
  D.4741 = in + 4;
  D.4742 = *D.4741;
  D.4859 = D.4847 + D.4742;
  D.4860 = D.4859 + a;
  a = D.4860 + 2763975236;
  a = a r>> 28;
  a = a + b;
  D.4745 = a ^ b;
  D.4850 = D.4745 ^ c;
  D.4759 = in + 16;
  D.4760 = *D.4759;
  D.4861 = D.4850 + D.4760;
  D.4862 = D.4861 + d;
  d = D.4862 + 1272893353;
  d = d r>> 21;
  d = d + a;
  D.4752 = d ^ a;
  D.4853 = D.4752 ^ b;
  D.4771 = in + 28;
  D.4772 = *D.4771;
  D.4863 = D.4853 + D.4772;
  D.4864 = D.4863 + c;
  c = D.4864 + 4139469664;
  c = c r>> 16;
  c = c + d;
  D.4732 = c ^ d;
  D.4856 = D.4732 ^ a;
  D.4783 = in + 40;
  D.4784 = *D.4783;
  D.4865 = D.4856 + D.4784;
  D.4866 = D.4865 + b;
  b = D.4866 + 3200236656;
  b = b r>> 9;
  b = b + c;
  D.4738 = b ^ c;
  D.4847 = D.4738 ^ d;
  D.4795 = in + 52;
  D.4796 = *D.4795;
  D.4867 = D.4847 + D.4796;
  D.4868 = D.4867 + a;
  a = D.4868 + 681279174;
  a = a r>> 28;
  a = a + b;
  D.4745 = a ^ b;
  D.4850 = D.4745 ^ c;
  D.4735 = *in;
  D.4869 = D.4850 + D.4735;
  D.4870 = D.4869 + d;
  d = D.4870 + 3936430074;
  d = d r>> 21;
  d = d + a;
  D.4752 = d ^ a;
  D.4853 = D.4752 ^ b;
  D.4755 = in + 12;
  D.4756 = *D.4755;
  D.4871 = D.4853 + D.4756;
  D.4872 = D.4871 + c;
  c = D.4872 + 3572445317;
  c = c r>> 16;
  c = c + d;
  D.4732 = c ^ d;
  D.4856 = D.4732 ^ a;
  D.4767 = in + 24;
  D.4768 = *D.4767;
  D.4873 = D.4856 + D.4768;
  D.4874 = D.4873 + b;
  b = D.4874 + 76029189;
  b = b r>> 9;
  b = b + c;
  D.4738 = b ^ c;
  D.4847 = D.4738 ^ d;
  D.4779 = in + 36;
  D.4780 = *D.4779;
  D.4875 = D.4847 + D.4780;
  D.4876 = D.4875 + a;
  a = D.4876 + 3654602809;
  a = a r>> 28;
  a = a + b;
  D.4745 = a ^ b;
  D.4850 = D.4745 ^ c;
  D.4791 = in + 48;
  D.4792 = *D.4791;
  D.4877 = D.4850 + D.4792;
  D.4878 = D.4877 + d;
  d = D.4878 + 3873151461;
  d = d r>> 21;
  d = d + a;
  D.4752 = d ^ a;
  D.4853 = D.4752 ^ b;
  D.4803 = in + 60;
  D.4804 = *D.4803;
  D.4879 = D.4853 + D.4804;
  D.4880 = D.4879 + c;
  c = D.4880 + 530742520;
  c = c r>> 16;
  c = c + d;
  D.4732 = c ^ d;
  D.4856 = D.4732 ^ a;
  D.4748 = in + 8;
  D.4749 = *D.4748;
  D.4881 = D.4856 + D.4749;
  D.4882 = D.4881 + b;
  b = D.4882 + 3299628645;
  b = b r>> 9;
  b = b + c;
  D.4883 = ~d;
  D.4884 = D.4883 | b;
  D.4885 = D.4884 ^ c;
  D.4735 = *in;
  D.4886 = D.4885 + D.4735;
  D.4887 = D.4886 + a;
  a = D.4887 + 4096336452;
  a = a r>> 26;
  a = a + b;
  D.4888 = ~c;
  D.4889 = D.4888 | a;
  D.4890 = D.4889 ^ b;
  D.4771 = in + 28;
  D.4772 = *D.4771;
  D.4891 = D.4890 + D.4772;
  D.4892 = D.4891 + d;
  d = D.4892 + 1126891415;
  d = d r>> 22;
  d = d + a;
  D.4893 = ~b;
  D.4894 = D.4893 | d;
  D.4895 = D.4894 ^ a;
  D.4799 = in + 56;
  D.4800 = *D.4799;
  D.4896 = D.4895 + D.4800;
  D.4897 = D.4896 + c;
  c = D.4897 + 2878612391;
  c = c r>> 17;
  c = c + d;
  D.4898 = ~a;
  D.4899 = D.4898 | c;
  D.4900 = D.4899 ^ d;
  D.4763 = in + 20;
  D.4764 = *D.4763;
  D.4901 = D.4900 + D.4764;
  D.4902 = D.4901 + b;
  b = D.4902 + 4237533241;
  b = b r>> 11;
  b = b + c;
  D.4883 = ~d;
  D.4884 = D.4883 | b;
  D.4885 = D.4884 ^ c;
  D.4791 = in + 48;
  D.4792 = *D.4791;
  D.4903 = D.4885 + D.4792;
  D.4904 = D.4903 + a;
  a = D.4904 + 1700485571;
  a = a r>> 26;
  a = a + b;
  D.4888 = ~c;
  D.4889 = D.4888 | a;
  D.4890 = D.4889 ^ b;
  D.4755 = in + 12;
  D.4756 = *D.4755;
  D.4905 = D.4890 + D.4756;
  D.4906 = D.4905 + d;
  d = D.4906 + 2399980690;
  d = d r>> 22;
  d = d + a;
  D.4893 = ~b;
  D.4894 = D.4893 | d;
  D.4895 = D.4894 ^ a;
  D.4783 = in + 40;
  D.4784 = *D.4783;
  D.4907 = D.4895 + D.4784;
  D.4908 = D.4907 + c;
  c = D.4908 + 4293915773;
  c = c r>> 17;
  c = c + d;
  D.4898 = ~a;
  D.4899 = D.4898 | c;
  D.4900 = D.4899 ^ d;
  D.4741 = in + 4;
  D.4742 = *D.4741;
  D.4909 = D.4900 + D.4742;
  D.4910 = D.4909 + b;
  b = D.4910 + 2240044497;
  b = b r>> 11;
  b = b + c;
  D.4883 = ~d;
  D.4884 = D.4883 | b;
  D.4885 = D.4884 ^ c;
  D.4775 = in + 32;
  D.4776 = *D.4775;
  D.4911 = D.4885 + D.4776;
  D.4912 = D.4911 + a;
  a = D.4912 + 1873313359;
  a = a r>> 26;
  a = a + b;
  D.4888 = ~c;
  D.4889 = D.4888 | a;
  D.4890 = D.4889 ^ b;
  D.4803 = in + 60;
  D.4804 = *D.4803;
  D.4913 = D.4890 + D.4804;
  D.4914 = D.4913 + d;
  d = D.4914 + 4264355552;
  d = d r>> 22;
  d = d + a;
  D.4893 = ~b;
  D.4894 = D.4893 | d;
  D.4895 = D.4894 ^ a;
  D.4767 = in + 24;
  D.4768 = *D.4767;
  D.4915 = D.4895 + D.4768;
  D.4916 = D.4915 + c;
  c = D.4916 + 2734768916;
  c = c r>> 17;
  c = c + d;
  D.4898 = ~a;
  D.4899 = D.4898 | c;
  D.4900 = D.4899 ^ d;
  D.4795 = in + 52;
  D.4796 = *D.4795;
  D.4917 = D.4900 + D.4796;
  D.4918 = D.4917 + b;
  b = D.4918 + 1309151649;
  b = b r>> 11;
  b = b + c;
  D.4883 = ~d;
  D.4884 = D.4883 | b;
  D.4885 = D.4884 ^ c;
  D.4759 = in + 16;
  D.4760 = *D.4759;
  D.4919 = D.4885 + D.4760;
  D.4920 = D.4919 + a;
  a = D.4920 + 4149444226;
  a = a r>> 26;
  a = a + b;
  D.4888 = ~c;
  D.4889 = D.4888 | a;
  D.4890 = D.4889 ^ b;
  D.4787 = in + 44;
  D.4788 = *D.4787;
  D.4921 = D.4890 + D.4788;
  D.4922 = D.4921 + d;
  d = D.4922 + 3174756917;
  d = d r>> 22;
  d = d + a;
  D.4893 = ~b;
  D.4894 = D.4893 | d;
  D.4895 = D.4894 ^ a;
  D.4748 = in + 8;
  D.4749 = *D.4748;
  D.4923 = D.4895 + D.4749;
  D.4924 = D.4923 + c;
  c = D.4924 + 718787259;
  c = c r>> 17;
  c = c + d;
  D.4898 = ~a;
  D.4899 = D.4898 | c;
  D.4900 = D.4899 ^ d;
  D.4779 = in + 36;
  D.4780 = *D.4779;
  D.4925 = D.4900 + D.4780;
  D.4926 = D.4925 + b;
  b = D.4926 + 3951481745;
  b = b r>> 11;
  b = b + c;
  D.4927 = *buf;
  D.4928 = D.4927 + a;
  *buf = D.4928;
  D.4929 = buf + 4;
  D.4929 = buf + 4;
  D.4930 = *D.4929;
  D.4931 = D.4930 + b;
  *D.4929 = D.4931;
  D.4932 = buf + 8;
  D.4932 = buf + 8;
  D.4933 = *D.4932;
  D.4934 = D.4933 + c;
  *D.4932 = D.4934;
  D.4935 = buf + 12;
  D.4935 = buf + 12;
  D.4936 = *D.4935;
  D.4937 = D.4936 + d;
  *D.4935 = D.4937;
}


memcpy (void * restrict __dest, const void * restrict __src, size_t __len)
{
  void * D.4938;
  unsigned int D.4939;

  D.4939 = __builtin_object_size (__dest, 0);
  D.4938 = __builtin___memcpy_chk (__dest, __src, __len, D.4939);
  return D.4938;
}


mono_md5_final (struct MonoMD5Context * ctx, guchar * digest)
{
  unsigned int D.4941;
  unsigned int D.4942;
  guchar * p.1;
  int D.4946;
  guchar[64] * D.4949;
  guint32[4] * D.4950;
  unsigned int D.4952;
  guchar * D.4955;
  guchar * D.4956;
  unsigned int D.4957;
  guint32 count;
  guchar * p;

  D.4941 = ctx->bits[0];
  D.4942 = D.4941 >> 3;
  count = D.4942 & 63;
  p = &ctx->in[count];
  p.1 = p;
  p = p.1 + 1;
  *p.1 = 128;
  count = 63 - count;
  if (count <= 7) goto <D.4944>; else goto <D.4945>;
  <D.4944>:
  memset (p, 0, count);
  D.4946 = ctx->doByteReverse;
  if (D.4946 != 0) goto <D.4947>; else goto <D.4948>;
  <D.4947>:
  D.4949 = &ctx->in;
  _byte_reverse (D.4949, 16);
  <D.4948>:
  D.4949 = &ctx->in;
  D.4950 = &ctx->buf;
  md5_transform (D.4950, D.4949);
  D.4949 = &ctx->in;
  memset (D.4949, 0, 56);
  goto <D.4951>;
  <D.4945>:
  D.4952 = count + 4294967288;
  memset (p, 0, D.4952);
  <D.4951>:
  D.4946 = ctx->doByteReverse;
  if (D.4946 != 0) goto <D.4953>; else goto <D.4954>;
  <D.4953>:
  D.4949 = &ctx->in;
  _byte_reverse (D.4949, 14);
  <D.4954>:
  D.4955 = &ctx->in[56];
  D.4941 = ctx->bits[0];
  MEM[(guint32 *)D.4955] = D.4941;
  D.4956 = &ctx->in[60];
  D.4957 = ctx->bits[1];
  MEM[(guint32 *)D.4956] = D.4957;
  D.4949 = &ctx->in;
  D.4950 = &ctx->buf;
  md5_transform (D.4950, D.4949);
  D.4946 = ctx->doByteReverse;
  if (D.4946 != 0) goto <D.4958>; else goto <D.4959>;
  <D.4958>:
  D.4950 = &ctx->buf;
  _byte_reverse (D.4950, 4);
  <D.4959>:
  D.4950 = &ctx->buf;
  memcpy (digest, D.4950, 16);
}


memset (void * __dest, int __ch, size_t __len)
{
  int D.4962;
  int D.4967;
  void * D.4969;
  unsigned int D.4970;

  D.4962 = __builtin_constant_p (__len);
  if (D.4962 != 0) goto <D.4963>; else goto <D.4964>;
  <D.4963>:
  if (__len == 0) goto <D.4965>; else goto <D.4966>;
  <D.4965>:
  D.4967 = __builtin_constant_p (__ch);
  if (D.4967 == 0) goto <D.4960>; else goto <D.4968>;
  <D.4968>:
  if (__ch != 0) goto <D.4960>; else goto <D.4961>;
  <D.4960>:
  __warn_memset_zero_len ();
  D.4969 = __dest;
  return D.4969;
  <D.4961>:
  <D.4966>:
  <D.4964>:
  D.4970 = __builtin_object_size (__dest, 0);
  D.4969 = __builtin___memset_chk (__dest, __ch, __len, D.4970);
  return D.4969;
}


mono_md5_get_digest (const guchar * buffer, gint buffer_size, guchar * digest)
{
  unsigned int buffer_size.2;
  struct MonoMD5Context ctx;

  try
    {
      mono_md5_init (&ctx);
      buffer_size.2 = (unsigned int) buffer_size;
      mono_md5_update (&ctx, buffer, buffer_size.2);
      mono_md5_final (&ctx, digest);
    }
  finally
    {
      ctx = {CLOBBER};
    }
}


mono_md5_get_digest_from_file (const gchar * filename, guchar * digest)
{
  unsigned int nb_bytes_read.3;
  unsigned int D.4976;
  int D.4977;
  struct MonoMD5Context ctx;
  guchar tmp_buf[1024];
  gint nb_bytes_read;
  struct FILE * fp;

  try
    {
      mono_md5_init (&ctx);
      fp = fopen (filename, "r");
      if (fp == 0B) goto <D.4973>; else goto <D.4974>;
      <D.4973>:
      return;
      <D.4974>:
      goto <D.4686>;
      <D.4685>:
      nb_bytes_read.3 = (unsigned int) nb_bytes_read;
      mono_md5_update (&ctx, &tmp_buf, nb_bytes_read.3);
      <D.4686>:
      D.4976 = fread (&tmp_buf, 1, 1024, fp);
      nb_bytes_read = (gint) D.4976;
      if (nb_bytes_read > 0) goto <D.4685>; else goto <D.4687>;
      <D.4687>:
      D.4977 = ferror (fp);
      if (D.4977 != 0) goto <D.4978>; else goto <D.4979>;
      <D.4978>:
      fclose (fp);
      return;
      <D.4979>:
      fclose (fp);
      mono_md5_final (&ctx, digest);
    }
  finally
    {
      ctx = {CLOBBER};
      tmp_buf = {CLOBBER};
    }
}


fread (void * restrict __ptr, size_t __size, size_t __n, struct FILE * restrict __stream)
{
  unsigned int D.4983;
  int D.4988;
  int D.4990;
  unsigned int D.4992;
  size_t D.4993;
  unsigned int D.4994;
  unsigned int D.4995;
  unsigned int D.4996;
  unsigned int D.4999;

  D.4983 = __builtin_object_size (__ptr, 0);
  if (D.4983 != 4294967295) goto <D.4984>; else goto <D.4985>;
  <D.4984>:
  D.4988 = __builtin_constant_p (__size);
  if (D.4988 == 0) goto <D.4986>; else goto <D.4989>;
  <D.4989>:
  D.4990 = __builtin_constant_p (__n);
  if (D.4990 == 0) goto <D.4986>; else goto <D.4991>;
  <D.4991>:
  D.4992 = __size | __n;
  if (D.4992 > 65535) goto <D.4986>; else goto <D.4987>;
  <D.4986>:
  D.4994 = __builtin_object_size (__ptr, 0);
  D.4993 = __fread_chk (__ptr, D.4994, __size, __n, __stream);
  return D.4993;
  <D.4987>:
  D.4995 = __size * __n;
  D.4996 = __builtin_object_size (__ptr, 0);
  if (D.4995 > D.4996) goto <D.4997>; else goto <D.4998>;
  <D.4997>:
  D.4999 = __builtin_object_size (__ptr, 0);
  D.4993 = __fread_chk_warn (__ptr, D.4999, __size, __n, __stream);
  return D.4993;
  <D.4998>:
  <D.4985>:
  D.4993 = __fread_alias (__ptr, __size, __n, __stream);
  return D.4993;
}


