[Demonstration 1]

[Buggy Method]
private void fetchMessage() throws IOException {
    int fetchMessageNumber = (int) (inputSplit.getEndMessageOffset() - nextMessageOffset);
    if (fetchMessageNumber > TalosClientConfigKeys.GALAXY_TALOS_CONSUMER_MAX_FETCH_RECORDS_DEFAULT) {
        fetchMessageNumber = TalosClientConfigKeys.GALAXY_TALOS_CONSUMER_MAX_FETCH_RECORDS_DEFAULT;
    }
    int retryTimes = 0;
    TException exception = null;
    while (retryTimes < configuration.getMaxRetrys()) {
        try {
            messageAndOffsetList.addAll(simpleConsumer.fetchMessage(nextMessageOffset, fetchMessageNumber));
            if (messageAndOffsetList.size() == 0) {
                retryTimes = 0;
                try {
                    Thread.sleep(200);
                } catch (InterruptedException e) {
                }
            } else {
                return;
            }
        } catch (TException e) {
            LOG.info("TopicAndPartition: " + topicAndPartition + " fetchMessage with startMessageOffset: " + nextMessageOffset + " failed", e);
            exception = e;
            ++retryTimes;
        }
    }
    throw new IOException("TopicAndPartition: " + topicAndPartition + " fetchMessage with startMessageOffset: " + nextMessageOffset + " failed", exception);
}

[Buggy Hunk]
int fetchMessageNumber = (int)(inputSplit.getEndMessageOffset() - nextMessageOffset);

[Patch]
int fetchMessageNumber = (int)(inputSplit.getEndMessageOffset() - nextMessageOffset + 1);

[Demonstration 2]

[Buggy Method]
@Override
public Observable<T> call(Observable<T> observable) {
    Observable<T> observable1 = observable.subscribeOn(Schedulers.io()).doOnSubscribe(new Action0() {

        @Override
        public void call() {
            LoadDialogUtil.showLoadingDialog(context, toast);
        }
    }).subscribeOn(AndroidSchedulers.mainThread()).observeOn(AndroidSchedulers.mainThread());
    if (object instanceof RxAppCompatActivity) {
        return observable1.compose(((RxAppCompatActivity) object).<T>bindToLifecycle());
    } else if (object instanceof RxFragment) {
        return observable1.compose(((RxFragment) object).<T>bindToLifecycle());
    } else {
        return observable1;
    }
}

[Buggy Hunk]
LoadDialogUtil.showLoadingDialog(context, toast);

[Patch]
LoadDialogUtil.getInstance().showLoadingDialog(context, toast);

[Demonstration 3]

[Buggy Method]
private static Observable<Subreddit> getSubredditListObservable(String where) {
    List<Subreddit> toReturn = new ArrayList<>();
    return Observable.just(toReturn).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).flatMap(list -> {
        if (Authentication.isLoggedIn) {
            UserSubredditsPaginator pag = new UserSubredditsPaginator(Authentication.reddit, where);
            pag.setLimit(100);
            while (pag.hasNext()) {
                for (net.dean.jraw.models.Subreddit s : pag.next()) {
                    list.add(s);
                }
            }
        }
        return Observable.fromIterable(list);
    });
}

[Buggy Hunk]
.observeOn(AndroidSchedulers.mainThread())

[Patch]
.observeOn(Schedulers.io())