public boolean setCellValueAt(int li, int co, byte value) {
    System.out.println("GridShadow.setCellValueAt(" + li + "," + co + "=>" + value + ")");
    cellFlags[offset + 9 * li + co] &= ~MASK_FOR_CURRENT_VALUE;
    cellFlags[offset + 9 * li + co] |= FLAG_CELL_READ_ONLY | value;
    // ligne
    for (int c = 0; c < 9; c++) {
        if (c != co) {
            if (!isCellFilled(li, c) && isCellValuePossible(li, c, value)) {
                unsetCellValuePossible(li, c, value);
                setCellValueScreened(li, c, value);
                if (getNumberOfPossibleValues(li, c) == 0) {
                    /* DEAD END */
                    return true;
                }
            }
        }
    }

...