//----- (080487A4) --------------------------------------------------------
int __cdecl begin_the_fucking(int fd)
{
  int result; // eax@38
  char data_mem[4054]; // [sp+20h] [bp-1008h]@7
  char code_mem[30]; // [sp+FF6h] [bp-32h]@1
  int bf_eip; // [sp+1014h] [bp-14h]@1
  int bf_edi; // [sp+1018h] [bp-10h]@1
  int code_len; // [sp+101Ch] [bp-Ch]@1
  int loop_depth; // [sp+1020h] [bp-8h]@16
  int STK_CANARY; // [sp+1024h] [bp-4h]@1

  STK_CANARY = *MK_FP(__GS__, 20);
  bf_eip = 0;
  bf_edi = 0;
  write(fd, "Brainfuck shell starting\n", 0x19u);
  write(fd, "4 KB of data memory ready\n", 0x1Au);
  write(fd, "30 B of code memory ready\n", 0x1Au);
  write(fd, "bf-sh$ ", 7u);
  code_len = read(fd, code_mem, 0x1Eu);
  while ( bf_eip < code_len )
  {
    switch ( code_mem[bf_eip] )
    {
      case '>':
        ++bf_edi;
        break;
      case '<':
        --bf_edi;
        break;
      case '+':
        ++data_mem[bf_edi];
        break;
      case '-':
        --data_mem[bf_edi];
        break;
      case '.':
        write(fd, &data_mem[bf_edi], 1u);
        break;
      case ',':
        read(fd, &data_mem[bf_edi], 1u);
        break;
      case '[':
        if ( !data_mem[bf_edi] )
        {
          loop_depth = 1;
          while ( 1 )
          {
            ++bf_eip;
            if ( bf_eip >= code_len )
              break;
            if ( code_mem[bf_eip] == '[' )
            {
              ++loop_depth;
            }
            else
            {
              if ( code_mem[bf_eip] == ']' )
              {
                --loop_depth;
                if ( !loop_depth )
                  break;
              }
            }
          }
          if ( bf_eip >= code_len )
          {
            write(fd, "OMFG eip flew away on '['!\n", 0x1Bu);
            exit(-1);
          }
        }
        break;
      default:
        if ( code_mem[bf_eip] == ']' && data_mem[bf_edi] )
        {
          loop_depth = 1;
          while ( 1 )
          {
            --bf_eip;
            if ( bf_eip < 0 )
              break;
            if ( code_mem[bf_eip] == ']' )
            {
              ++loop_depth;
            }
            else
            {
              if ( code_mem[bf_eip] == '[' )
              {
                --loop_depth;
                if ( !loop_depth )
                  break;
              }
            }
          }
          if ( bf_eip < 0 )
          {
            write(fd, "OMFG eip flew away on ']'!\n", 0x1Bu);
            exit(-1);
          }
        }
        break;
    }
    ++bf_eip;
  }
  result = *MK_FP(__GS__, 20) ^ STK_CANARY;
  if ( *MK_FP(__GS__, 20) != STK_CANARY )
    __stack_chk_fail();
  return result;
}