mono_console_init ()
{
  unsigned int fd.0;
  int fd;

  fd = open ("/dev/null", 2);
  goto <D.19197>;
  <D.19196>:
  fd = open ("/dev/null", 2);
  <D.19197>:
  fd.0 = (unsigned int) fd;
  if (fd.0 <= 2) goto <D.19196>; else goto <D.19198>;
  <D.19198>:
  close (fd);
}


open (const char * __path, int __oflag)
{
  int D.19320;
  int D.19323;
  int D.19328;
  int D.19330;
  int D.19331;
  int D.19334;
  int D.19335;

  D.19320 = __builtin_va_arg_pack_len ();
  if (D.19320 > 1) goto <D.19321>; else goto <D.19322>;
  <D.19321>:
  __open_too_many_args ();
  <D.19322>:
  D.19323 = __builtin_constant_p (__oflag);
  if (D.19323 != 0) goto <D.19324>; else goto <D.19325>;
  <D.19324>:
  D.19328 = __oflag & 64;
  if (D.19328 != 0) goto <D.19326>; else goto <D.19329>;
  <D.19329>:
  D.19330 = __oflag & 4210688;
  if (D.19330 == 4210688) goto <D.19326>; else goto <D.19327>;
  <D.19326>:
  D.19331 = __builtin_va_arg_pack_len ();
  if (D.19331 <= 0) goto <D.19332>; else goto <D.19333>;
  <D.19332>:
  __open_missing_mode ();
  D.19334 = __open_2 (__path, __oflag);
  return D.19334;
  <D.19333>:
  <D.19327>:
  D.19334 = __open_alias (__path, __oflag, __builtin_va_arg_pack ());
  return D.19334;
  <D.19325>:
  D.19335 = __builtin_va_arg_pack_len ();
  if (D.19335 <= 0) goto <D.19336>; else goto <D.19337>;
  <D.19336>:
  D.19334 = __open_2 (__path, __oflag);
  return D.19334;
  <D.19337>:
  D.19334 = __open_alias (__path, __oflag, __builtin_va_arg_pack ());
  return D.19334;
}


ves_icall_System_ConsoleDriver_Isatty (void * handle)
{
  MonoBoolean D.19339;
  int handle.1;
  int D.19341;

  handle.1 = (int) handle;
  D.19341 = isatty (handle.1);
  D.19339 = (MonoBoolean) D.19341;
  return D.19339;
}


ves_icall_System_ConsoleDriver_SetEcho (MonoBoolean want_echo)
{
  MonoBoolean D.19343;
  int D.19344;

  D.19344 = (int) want_echo;
  D.19343 = set_property (8, D.19344);
  return D.19343;
}


set_property (gint property, gboolean value)
{
  int D.19346;
  MonoBoolean D.19349;
  unsigned int D.19350;
  unsigned int property.2;
  unsigned int D.19352;
  _Bool D.19353;
  int D.19354;
  _Bool D.19357;
  _Bool D.19358;
  _Bool D.19359;
  unsigned int D.19364;
  int D.19366;
  unsigned int D.19367;
  unsigned int D.19368;
  int D.19371;
  struct termios attr;
  gboolean callset;
  gboolean check;

  try
    {
      callset = 0;
      D.19346 = tcgetattr (0, &attr);
      if (D.19346 == -1) goto <D.19347>; else goto <D.19348>;
      <D.19347>:
      D.19349 = 0;
      return D.19349;
      <D.19348>:
      D.19350 = attr.c_lflag;
      property.2 = (unsigned int) property;
      D.19352 = D.19350 & property.2;
      D.19353 = D.19352 != 0;
      check = (gboolean) D.19353;
      D.19354 = value | check;
      if (D.19354 != 0) goto <D.19355>; else goto <D.19356>;
      <D.19355>:
      D.19357 = value == 0;
      D.19358 = check == 0;
      D.19359 = D.19357 | D.19358;
      if (D.19359 != 0) goto <D.19360>; else goto <D.19361>;
      <D.19360>:
      callset = 1;
      if (value != 0) goto <D.19362>; else goto <D.19363>;
      <D.19362>:
      D.19350 = attr.c_lflag;
      property.2 = (unsigned int) property;
      D.19364 = D.19350 | property.2;
      attr.c_lflag = D.19364;
      goto <D.19365>;
      <D.19363>:
      D.19350 = attr.c_lflag;
      D.19366 = ~property;
      D.19367 = (unsigned int) D.19366;
      D.19368 = D.19350 & D.19367;
      attr.c_lflag = D.19368;
      <D.19365>:
      <D.19361>:
      <D.19356>:
      if (callset == 0) goto <D.19369>; else goto <D.19370>;
      <D.19369>:
      D.19349 = 1;
      return D.19349;
      <D.19370>:
      D.19371 = tcsetattr (0, 0, &attr);
      if (D.19371 == -1) goto <D.19372>; else goto <D.19373>;
      <D.19372>:
      D.19349 = 0;
      return D.19349;
      <D.19373>:
      mono_attr = attr;
      D.19349 = 1;
      return D.19349;
    }
  finally
    {
      attr = {CLOBBER};
    }
}


ves_icall_System_ConsoleDriver_SetBreak (MonoBoolean want_break)
{
  MonoBoolean D.19376;
  _Bool D.19377;
  int D.19378;

  D.19377 = want_break == 0;
  D.19378 = (int) D.19377;
  D.19376 = set_property (1, D.19378);
  return D.19376;
}


ves_icall_System_ConsoleDriver_InternalKeyAvailable (gint32 timeout)
{
  long int D.19231;
  long int iftmp.3;
  int D.19381;
  long int iftmp.4;
  unsigned int __d.5;
  long int D.19390;
  long int D.19391;
  long int D.19392;
  int D.19395;
  int D.19396;
  int * D.19399;
  int D.19400;
  gint32 D.19405;
  struct fd_set rfds;
  struct timeval tv;
  struct timeval * tvptr;
  struct div_t divvy;
  int ret;
  int nbytes;

  try
    {
      <D.19232>:
      {
        unsigned int __i;
        struct fd_set * __arr;

        __arr = &rfds;
        __i = 0;
        goto <D.19228>;
        <D.19227>:
        __arr->fds_bits[__i] = 0;
        __i = __i + 1;
        <D.19228>:
        if (__i <= 31) goto <D.19227>; else goto <D.19229>;
        <D.19229>:
      }
      {
        long int __d;

        __d = 0;
        D.19381 = __builtin_constant_p (__d);
        if (D.19381 != 0) goto <D.19382>; else goto <D.19383>;
        <D.19382>:
        __d.5 = (unsigned int) __d;
        if (__d.5 <= 1023) goto <D.19386>; else goto <D.19387>;
        <D.19386>:
        iftmp.4 = __d / 32;
        goto <D.19388>;
        <D.19387>:
        iftmp.4 = __fdelt_warn (__d);
        <D.19388>:
        iftmp.3 = iftmp.4;
        goto <D.19389>;
        <D.19383>:
        iftmp.3 = __fdelt_chk (__d);
        <D.19389>:
        D.19231 = iftmp.3;
      }
      D.19390 = D.19231;
      D.19391 = rfds.fds_bits[D.19390];
      D.19392 = D.19391 | 1;
      rfds.fds_bits[D.19390] = D.19392;
      if (timeout >= 0) goto <D.19393>; else goto <D.19394>;
      <D.19393>:
      divvy = div (timeout, 1000); [return slot optimization]
      D.19395 = divvy.quot;
      tv.tv_sec = D.19395;
      D.19396 = divvy.rem;
      tv.tv_usec = D.19396;
      tvptr = &tv;
      goto <D.19397>;
      <D.19394>:
      tvptr = 0B;
      <D.19397>:
      ret = select (1, &rfds, 0B, 0B, tvptr);
      if (ret == -1) goto <D.19398>; else goto <D.19233>;
      <D.19398>:
      D.19399 = __errno_location ();
      D.19400 = *D.19399;
      if (D.19400 == 4) goto <D.19232>; else goto <D.19233>;
      <D.19233>:
      if (ret > 0) goto <D.19401>; else goto <D.19402>;
      <D.19401>:
      nbytes = 0;
      ret = ioctl (0, 21531, &nbytes);
      if (ret >= 0) goto <D.19403>; else goto <D.19404>;
      <D.19403>:
      ret = nbytes;
      <D.19404>:
      <D.19402>:
      D.19405 = MAX_EXPR <ret, 0>;
      return D.19405;
    }
  finally
    {
      rfds = {CLOBBER};
      tv = {CLOBBER};
      divvy = {CLOBBER};
      nbytes = {CLOBBER};
    }
}


mono_console_handle_async_ops ()
{
  int need_cancel.6;

  need_cancel.6 = need_cancel;
  if (need_cancel.6 != 0) goto <D.19409>; else goto <D.19410>;
  <D.19409>:
  need_cancel = 0;
  do_console_cancel_event ();
  <D.19410>:
}


do_console_cancel_event ()
{
  struct MonoAppDomain * D.19411;
  struct MonoImage * D.19414;
  struct MonoClassField * cancel_handler_field.7;
  struct MonoClassField * cancel_handler_field.8;
  _Bool D.19421;
  long int D.19422;
  long int D.19423;
  struct MonoDelegate * load_value.9;
  struct MonoVTable * D.19431;
  _Bool D.19432;
  long int D.19433;
  long int D.19434;
  struct MonoClass * D.19437;
  static struct MonoClassField * cancel_handler_field;
  struct MonoDomain * domain;
  struct MonoClass * klass;
  struct MonoDelegate * load_value;
  struct MonoMethod * method;
  struct MonoMethodMessage * msg;
  struct MonoMethod * im;
  struct MonoVTable * vtable;

  try
    {
      domain = mono_domain_get ();
      D.19411 = domain->domain;
      if (D.19411 == 0B) goto <D.19412>; else goto <D.19413>;
      <D.19412>:
      return;
      <D.19413>:
      D.19414 = mono_defaults.corlib;
      klass = mono_class_from_name (D.19414, "System", "Console");
      if (klass == 0B) goto <D.19415>; else goto <D.19416>;
      <D.19415>:
      return;
      <D.19416>:
      cancel_handler_field.7 = cancel_handler_field;
      if (cancel_handler_field.7 == 0B) goto <D.19418>; else goto <D.19419>;
      <D.19418>:
      cancel_handler_field.8 = mono_class_get_field_from_name (klass, "cancel_handler");
      cancel_handler_field = cancel_handler_field.8;
      cancel_handler_field.7 = cancel_handler_field;
      D.19421 = cancel_handler_field.7 == 0B;
      D.19422 = (long int) D.19421;
      D.19423 = __builtin_expect (D.19422, 0);
      if (D.19423 != 0) goto <D.19424>; else goto <D.19425>;
      <D.19424>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "console-unix.c", 246, "cancel_handler_field");
      <D.19425>:
      <D.19419>:
      vtable = mono_class_vtable_full (domain, klass, 0);
      if (vtable == 0B) goto <D.19426>; else goto <D.19427>;
      <D.19426>:
      return;
      <D.19427>:
      cancel_handler_field.7 = cancel_handler_field;
      mono_field_static_get_value (vtable, cancel_handler_field.7, &load_value);
      load_value.9 = load_value;
      if (load_value.9 == 0B) goto <D.19429>; else goto <D.19430>;
      <D.19429>:
      return;
      <D.19430>:
      load_value.9 = load_value;
      D.19431 = load_value.9->object.vtable;
      klass = D.19431->klass;
      method = mono_class_get_method_from_name (klass, "BeginInvoke", -1);
      D.19432 = method == 0B;
      D.19433 = (long int) D.19432;
      D.19434 = __builtin_expect (D.19433, 0);
      if (D.19434 != 0) goto <D.19435>; else goto <D.19436>;
      <D.19435>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "console-unix.c", 258, "method != NULL");
      <D.19436>:
      D.19437 = method->klass;
      im = mono_get_delegate_invoke (D.19437);
      msg = mono_method_call_message_new (method, 0B, im, 0B, 0B);
      load_value.9 = load_value;
      mono_thread_pool_add (load_value.9, msg, 0B, 0B);
    }
  finally
    {
      load_value = {CLOBBER};
    }
}


ves_icall_System_ConsoleDriver_TtySetup (struct MonoString * keypad, struct MonoString * teardown, struct MonoArray * * control_chars, int * * size)
{
  _Bool D.19447;
  _Bool D.19448;
  _Bool D.19449;
  int D.19452;
  int cols_and_lines.10;
  struct MonoDomain * D.19456;
  struct MonoClass * D.19457;
  struct MonoArray * D.19458;
  int D.19459;
  MonoBoolean D.19462;
  unsigned int D.19463;
  unsigned int D.19464;
  unsigned int D.19465;
  unsigned int D.19466;
  int D.19467;
  struct MonoArray * D.19470;
  int setup_finished.11;
  gchar * iftmp.12;
  int atexit_called.13;
  char * teardown_str.14;
  int dims;

  dims = terminal_get_dimensions ();
  if (dims == -1) goto <D.19441>; else goto <D.19442>;
  <D.19441>:
  {
    int cols;
    int rows;
    const char * str;

    cols = 0;
    rows = 0;
    str = monoeg_g_getenv ("COLUMNS");
    if (str != 0B) goto <D.19443>; else goto <D.19444>;
    <D.19443>:
    cols = atoi (str);
    <D.19444>:
    str = monoeg_g_getenv ("LINES");
    if (str != 0B) goto <D.19445>; else goto <D.19446>;
    <D.19445>:
    rows = atoi (str);
    <D.19446>:
    D.19447 = cols != 0;
    D.19448 = rows != 0;
    D.19449 = D.19447 & D.19448;
    if (D.19449 != 0) goto <D.19450>; else goto <D.19451>;
    <D.19450>:
    D.19452 = cols << 16;
    cols_and_lines.10 = D.19452 | rows;
    cols_and_lines = cols_and_lines.10;
    goto <D.19454>;
    <D.19451>:
    cols_and_lines = -1;
    <D.19454>:
  }
  goto <D.19455>;
  <D.19442>:
  cols_and_lines = dims;
  <D.19455>:
  *size = &cols_and_lines;
  D.19456 = mono_domain_get ();
  D.19457 = mono_defaults.byte_class;
  D.19458 = mono_array_new (D.19456, D.19457, 17);
  mono_gc_wbarrier_generic_store (control_chars, D.19458);
  D.19459 = tcgetattr (0, &initial_attr);
  if (D.19459 == -1) goto <D.19460>; else goto <D.19461>;
  <D.19460>:
  D.19462 = 0;
  return D.19462;
  <D.19461>:
  mono_attr = initial_attr;
  D.19463 = mono_attr.c_lflag;
  D.19464 = D.19463 & 4294967293;
  mono_attr.c_lflag = D.19464;
  D.19465 = mono_attr.c_iflag;
  D.19466 = D.19465 & 4294962175;
  mono_attr.c_iflag = D.19466;
  mono_attr.c_cc[6] = 1;
  mono_attr.c_cc[5] = 0;
  D.19467 = tcsetattr (0, 0, &mono_attr);
  if (D.19467 == -1) goto <D.19468>; else goto <D.19469>;
  <D.19468>:
  D.19462 = 0;
  return D.19462;
  <D.19469>:
  D.19470 = *control_chars;
  set_control_chars (D.19470, &mono_attr.c_cc);
  setup_finished.11 = setup_finished;
  if (setup_finished.11 != 0) goto <D.19472>; else goto <D.19473>;
  <D.19472>:
  D.19462 = 1;
  return D.19462;
  <D.19473>:
  if (keypad != 0B) goto <D.19475>; else goto <D.19476>;
  <D.19475>:
  iftmp.12 = mono_string_to_utf8 (keypad);
  goto <D.19477>;
  <D.19476>:
  iftmp.12 = 0B;
  <D.19477>:
  keypad_xmit_str = iftmp.12;
  console_set_signal_handlers ();
  setup_finished = 1;
  atexit_called.13 = atexit_called;
  if (atexit_called.13 == 0) goto <D.19479>; else goto <D.19480>;
  <D.19479>:
  if (teardown != 0B) goto <D.19481>; else goto <D.19482>;
  <D.19481>:
  teardown_str.14 = mono_string_to_utf8 (teardown);
  teardown_str = teardown_str.14;
  <D.19482>:
  atexit (tty_teardown);
  <D.19480>:
  D.19462 = 1;
  return D.19462;
}


tty_teardown ()
{
  int setup_finished.15;
  gchar * teardown_str.16;
  unsigned int D.19491;
  int unused;

  setup_finished.15 = setup_finished;
  if (setup_finished.15 == 0) goto <D.19486>; else goto <D.19487>;
  <D.19486>:
  return;
  <D.19487>:
  teardown_str.16 = teardown_str;
  if (teardown_str.16 != 0B) goto <D.19489>; else goto <D.19490>;
  <D.19489>:
  teardown_str.16 = teardown_str;
  teardown_str.16 = teardown_str;
  D.19491 = strlen (teardown_str.16);
  unused = write (1, teardown_str.16, D.19491);
  teardown_str.16 = teardown_str;
  monoeg_g_free (teardown_str.16);
  teardown_str = 0B;
  <D.19490>:
  tcflush (0, 0);
  tcsetattr (0, 0, &initial_attr);
  set_property (8, 1);
  setup_finished = 0;
}


terminal_get_dimensions ()
{
  int * D.19493;
  int D.19494;
  short unsigned int D.19497;
  int D.19498;
  int D.19499;
  short unsigned int D.19500;
  int D.19501;
  int D.19502;
  struct winsize ws;
  int ret;
  int save_errno;

  try
    {
      D.19493 = __errno_location ();
      save_errno = *D.19493;
      D.19494 = ioctl (0, 21523, &ws);
      if (D.19494 == 0) goto <D.19495>; else goto <D.19496>;
      <D.19495>:
      D.19497 = ws.ws_col;
      D.19498 = (int) D.19497;
      D.19499 = D.19498 << 16;
      D.19500 = ws.ws_row;
      D.19501 = (int) D.19500;
      ret = D.19499 | D.19501;
      D.19493 = __errno_location ();
      *D.19493 = save_errno;
      D.19502 = ret;
      return D.19502;
      <D.19496>:
      D.19502 = -1;
      return D.19502;
    }
  finally
    {
      ws = {CLOBBER};
    }
}


atoi (const char * __nptr)
{
  int D.19505;

  D.19505 = strtol (__nptr, 0B, 10);
  return D.19505;
}


set_control_chars (struct MonoArray * control_chars, const guchar * cc)
{
  unsigned char D.19507;
  const guchar * D.19508;
  unsigned char D.19509;
  const guchar * D.19510;
  unsigned char D.19511;
  const guchar * D.19512;
  unsigned char D.19513;
  const guchar * D.19514;
  unsigned char D.19515;
  const guchar * D.19516;
  unsigned char D.19517;
  const guchar * D.19518;
  unsigned char D.19519;
  const guchar * D.19520;
  unsigned char D.19521;
  const guchar * D.19522;
  unsigned char D.19523;
  const guchar * D.19524;
  unsigned char D.19525;
  const guchar * D.19526;
  unsigned char D.19527;
  const guchar * D.19528;
  unsigned char D.19529;
  const guchar * D.19530;
  unsigned char D.19531;
  const guchar * D.19532;
  unsigned char D.19533;
  const guchar * D.19534;
  unsigned char D.19535;
  const guchar * D.19536;
  unsigned char D.19537;
  const guchar * D.19538;
  unsigned char D.19539;

  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 0);
    D.19507 = *cc;
    *__p = D.19507;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 1);
    D.19508 = cc + 1;
    D.19509 = *D.19508;
    *__p = D.19509;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 2);
    D.19510 = cc + 2;
    D.19511 = *D.19510;
    *__p = D.19511;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 3);
    D.19512 = cc + 3;
    D.19513 = *D.19512;
    *__p = D.19513;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 4);
    D.19514 = cc + 4;
    D.19515 = *D.19514;
    *__p = D.19515;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 5);
    D.19516 = cc + 5;
    D.19517 = *D.19516;
    *__p = D.19517;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 6);
    D.19518 = cc + 6;
    D.19519 = *D.19518;
    *__p = D.19519;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 7);
    D.19520 = cc + 7;
    D.19521 = *D.19520;
    *__p = D.19521;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 8);
    D.19522 = cc + 8;
    D.19523 = *D.19522;
    *__p = D.19523;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 9);
    D.19524 = cc + 9;
    D.19525 = *D.19524;
    *__p = D.19525;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 10);
    D.19526 = cc + 10;
    D.19527 = *D.19526;
    *__p = D.19527;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 11);
    D.19528 = cc + 11;
    D.19529 = *D.19528;
    *__p = D.19529;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 12);
    D.19530 = cc + 12;
    D.19531 = *D.19530;
    *__p = D.19531;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 13);
    D.19532 = cc + 13;
    D.19533 = *D.19532;
    *__p = D.19533;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 14);
    D.19534 = cc + 14;
    D.19535 = *D.19534;
    *__p = D.19535;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 15);
    D.19536 = cc + 15;
    D.19537 = *D.19536;
    *__p = D.19537;
  }
  {
    gchar * __p;

    __p = mono_array_addr_with_size (control_chars, 1, 16);
    D.19538 = cc + 16;
    D.19539 = *D.19538;
    *__p = D.19539;
  }
}


console_set_signal_handlers ()
{
  struct sigaction sigcont;
  struct sigaction sigint;
  struct sigaction sigwinch;

  try
    {
      memset (&sigcont, 0, 140);
      memset (&sigint, 0, 140);
      memset (&sigwinch, 0, 140);
      sigcont.__sigaction_handler.sa_handler = sigcont_handler;
      sigcont.sa_flags = 0;
      sigemptyset (&sigcont.sa_mask);
      sigaction (18, &sigcont, &save_sigcont);
      sigint.__sigaction_handler.sa_handler = sigint_handler;
      sigint.sa_flags = 0;
      sigemptyset (&sigint.sa_mask);
      sigaction (2, &sigint, &save_sigint);
      sigwinch.__sigaction_handler.sa_handler = sigwinch_handler;
      sigwinch.sa_flags = 0;
      sigemptyset (&sigwinch.sa_mask);
      sigaction (28, &sigwinch, &save_sigwinch);
    }
  finally
    {
      sigcont = {CLOBBER};
      sigint = {CLOBBER};
      sigwinch = {CLOBBER};
    }
}


sigwinch_handler (int signo, void * the_siginfo, void * data)
{
  void (*<T1986>) (int, struct siginfo_t *, void *) D.19542;
  int dims;

  dims = terminal_get_dimensions ();
  if (dims != -1) goto <D.19540>; else goto <D.19541>;
  <D.19540>:
  cols_and_lines = dims;
  <D.19541>:
  D.19542 = save_sigwinch.__sigaction_handler.sa_sigaction;
  if (D.19542 > 1B) goto <D.19543>; else goto <D.19544>;
  <D.19543>:
  D.19542 = save_sigwinch.__sigaction_handler.sa_sigaction;
  D.19542 (signo, the_siginfo, data);
  <D.19544>:
}


sigint_handler (int signo)
{
  int in_sigint.17;
  int * D.19548;
  int save_errno;

  in_sigint.17 = in_sigint;
  if (in_sigint.17 != 0) goto <D.19546>; else goto <D.19547>;
  <D.19546>:
  return;
  <D.19547>:
  in_sigint = 1;
  D.19548 = __errno_location ();
  save_errno = *D.19548;
  need_cancel = 1;
  mono_gc_finalize_notify ();
  D.19548 = __errno_location ();
  *D.19548 = save_errno;
  in_sigint = 0;
}


sigcont_handler (int signo, void * the_siginfo, void * data)
{
  gchar * keypad_xmit_str.18;
  unsigned int D.19553;
  void (*<T1986>) (int, struct siginfo_t *, void *) D.19554;
  int unused;

  tcsetattr (0, 0, &mono_attr);
  keypad_xmit_str.18 = keypad_xmit_str;
  if (keypad_xmit_str.18 != 0B) goto <D.19551>; else goto <D.19552>;
  <D.19551>:
  keypad_xmit_str.18 = keypad_xmit_str;
  keypad_xmit_str.18 = keypad_xmit_str;
  D.19553 = strlen (keypad_xmit_str.18);
  unused = write (1, keypad_xmit_str.18, D.19553);
  <D.19552>:
  D.19554 = save_sigcont.__sigaction_handler.sa_sigaction;
  if (D.19554 > 1B) goto <D.19555>; else goto <D.19556>;
  <D.19555>:
  D.19554 = save_sigcont.__sigaction_handler.sa_sigaction;
  D.19554 (signo, the_siginfo, data);
  <D.19556>:
}


memset (void * __dest, int __ch, size_t __len)
{
  int D.19559;
  int D.19564;
  void * D.19566;
  unsigned int D.19567;

  D.19559 = __builtin_constant_p (__len);
  if (D.19559 != 0) goto <D.19560>; else goto <D.19561>;
  <D.19560>:
  if (__len == 0) goto <D.19562>; else goto <D.19563>;
  <D.19562>:
  D.19564 = __builtin_constant_p (__ch);
  if (D.19564 == 0) goto <D.19557>; else goto <D.19565>;
  <D.19565>:
  if (__ch != 0) goto <D.19557>; else goto <D.19558>;
  <D.19557>:
  __warn_memset_zero_len ();
  D.19566 = __dest;
  return D.19566;
  <D.19558>:
  <D.19563>:
  <D.19561>:
  D.19567 = __builtin_object_size (__dest, 0);
  D.19566 = __builtin___memset_chk (__dest, __ch, __len, D.19567);
  return D.19566;
}


