code: static private void encodeBytes(byte previous, byte current, int byteIndex, StringBuilder output) {
          int chunk;
          int offset = byteIndex % 5;
          switch (offset) {
              case 0:
                  chunk = ((current & 0xF8) >>> 3);
                  output.append(lookupTable.charAt(chunk));
                  break;
              case 1:
                  chunk = (((previous & 0x07) << 2) | ((current & 0xC0) >>> 6));
                  output.append(lookupTable.charAt(chunk));
                  chunk = ((current & 0x3E) >>> 1);
                  output.append(lookupTable.charAt(chunk));
                  break;
              case 2:
                  chunk = (((previous & 0x01) << 4) | ((current & 0xF0) >>> 4));
                  output.append(lookupTable.charAt(chunk));
                  break;
              case 3:
                  chunk = (((previous & 0x0F) << 1) | ((current & 0x80) >>> 7));
                  output.append(lookupTable.charAt(chunk));
                  chunk = ((current & 0x7C) >>> 2);
                  output.append(lookupTable.charAt(chunk));
                  break;
              case 4:
                  chunk = (((previous & 0x03) << 3) | ((current & 0xE0) >>> 5));
                  output.append(lookupTable.charAt(chunk));
                  chunk = (current & 0x1F);
                  output.append(lookupTable.charAt(chunk));
                  break;
          }
      }
docs: mask:   F8  07  C0 3E  01 F0  0F 80  7C 03  E0  1F   F8  07