if (state == VIRGIN || state == LIVING) { do
try
  private void nextBlock() throws IOException  {    byte[] temp = inBuffer[0];    inBuffer[0] = inBuffer[1];    inBuffer[1] = temp;    int count = 0;    boolean eof = false;    if (state == VIRGIN || state == LIVING)      {        do          {            int l = in.read(inBuffer[1], count, inBuffer[1].length - count);            if (l == -1)              {                eof = true;                break;              }            count += l;          }        while (count < inBuffer[1].length);      }    try      {        switch (state)          {          case VIRGIN:            state = LIVING;            nextBlock();            break;          case LIVING:            if (eof)              {                if (count > 0)                  {                    outOffset = cipher.update(inBuffer[0], 0, inLength, outBuffer, 0);                    state = DYING;                  }                else                  {                    outOffset = cipher.doFinal(inBuffer[0], 0, inLength, outBuffer, 0);                    state = DEAD;                  }              }            else              {                outOffset = cipher.update(inBuffer[0], 0, inLength, outBuffer, 0);              }            break;          case DYING:            outOffset = cipher.doFinal(inBuffer[0], 0, inLength, outBuffer, 0);            state = DEAD;            break;          case DEAD:          }      }    catch (ShortBufferException sbe)      {        throw new IOException(sbe.toString());      }    catch (BadPaddingException bpe)      {        throw new IOException(bpe.toString());      }    catch (IllegalBlockSizeException ibse)      {        throw new IOException(ibse.toString());      }    inLength = count;  }