default DfaInstructionState @Nullable [] processOutOfBounds(@NotNull DataFlowInterpreter interpreter,
                                                              @NotNull DfaMemoryState stateBefore,
                                                              @NotNull DfaValue index,
                                                              @NotNull DfaValue array,
                                                              @Nullable DfaControlTransferValue outOfBoundsTransfer) {
    boolean alwaysOutOfBounds = !applyBoundsCheck(stateBefore, array, index);
    ThreeState failed = alwaysOutOfBounds ? ThreeState.YES : ThreeState.UNSURE;
    interpreter.getListener().onCondition(this, index, failed, stateBefore);
    if (alwaysOutOfBounds) {
      if (outOfBoundsTransfer != null) {
        List<DfaInstructionState> states = dispatchTransfer(interpreter, stateBefore, outOfBoundsTransfer);
        return states.toArray(DfaInstructionState.EMPTY_ARRAY);
      }
      return DfaInstructionState.EMPTY_ARRAY;
    }
    return null;
  }
default DfaInstructionState @Nullable [] processOutOfBounds(@NotNull DataFlowInterpreter interpreter,
                                                              @NotNull DfaMemoryState stateBefore,
                                                              @NotNull DfaValue index,
                                                              @NotNull DfaValue array,
                                                              @Nullable DfaControlTransferValue outOfBoundsTransfer)