[Demonstration 1]

[Buggy Method]
public void crawlTeamPage(Team team) {
    String uri = team.getUri();
    System.err.println("Crawling team page: " + team.getName());
    try {
        Thread.sleep(Utils.HTTP_SLEEP);
        // Get HTML page from URI
        Document doc = Jsoup.connect(uri).userAgent("Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0").timeout(Utils.HTTP_TIMEOUT).get();
        // Get all the data by iterating through the club info box
        Elements clubInfo = doc.getElementsByTag("tr");
        Iterator<Element> it = clubInfo.iterator();
        // Get nickname
        it.next();
        Element e = it.next();
        if (e.text().length() >= 14) {
            team.setNickname(e.text().substring(14));
        } else {
            team.setNickname("");
        }
        System.out.println("Nickname: " + team.getNickname());
        // Get ground name
        e = it.next();
        if (e.text().indexOf("CAPACITY") > 7) {
            team.setGround(e.text().substring(7, e.text().indexOf("CAPACITY") - 1));
        } else {
            team.setGround(null);
        }
        System.out.println("Ground: " + team.getGround());
        // Get Manager name + info
        e = it.next();
        if (e.text().indexOf("TEAM") > 8) {
            team.setTrainer(new Trainer(e.text().substring(8, e.text().indexOf("TEAM") - 1)));
        } else {
            team.setTrainer(null);
        }
        if (team.getTrainer() != null) {
            System.out.println("Trainer: " + team.getTrainer().getName());
        }
        it.next();
        do {
            // Manager info
            it.next();
        } while (!e.text().startsWith("Year Formed"));
        // Get Year formed
        if (e.text().length() >= 12) {
            team.setYearFormed(Integer.parseInt(e.text().substring(12)));
        } else {
            team.setYearFormed(-1);
        }
        System.out.println("Year Formed: " + team.getYearFormed());
        // Get Chairman
        e = it.next();
        if (e.text().length() >= 9) {
            team.setChairman(e.text().substring(9));
        } else {
            team.setChairman("");
        }
        System.out.println("Chairman: " + team.getChairman());
        // Get Address
        e = it.next();
        if (e.text().length() >= 8) {
            team.setAddress1(e.text().substring(8));
        } else {
            team.setAddress1("");
        }
        System.out.println("Address:");
        System.out.println("\t" + team.getAddress1());
        e = it.next();
        if (e.text().length() >= 2) {
            team.setAddress2(e.text().substring(2));
        } else {
            team.setAddress2("");
        }
        System.out.println("\t" + team.getAddress2());
        e = it.next();
        if (e.text().length() >= 2) {
            team.setAddress3(e.text().substring(2));
        } else {
            team.setAddress3("");
        }
        System.out.println("\t" + team.getAddress3());
        // Get Post code
        e = it.next();
        if (e.text().length() >= 10) {
            team.setPostCode(e.text().substring(10));
        } else {
            team.setPostCode("");
        }
        System.out.println("Post Code: " + team.getPostCode());
        // Get Website
        e = it.next();
        if (e.text().length() >= 8) {
            team.setWebsite(e.text().substring(8));
        } else {
            team.setWebsite("");
        }
        System.out.println("Website: " + team.getWebsite());
        // Get all links associated to the players of the team
        Elements links = doc.select("a[href*=/players/player.sd?player_id]");
        System.out.println(team.getName());
        System.out.println("Players:");
        LinkedHashSet<Player> players = new LinkedHashSet<>();
        for (Element link : links) {
            // Utils.println(" * a: <%s>  (%s)", link.attr("abs:href"),
            // Utils.trim(link.text(), 35));
            final Player player = new Player(link.attr("abs:href"), link.text());
            player.setTeam(team);
            players.add(player);
        }
        for (Player player : players) {
            System.out.println(player.getName() + "\t" + player.getUri());
        }
        team.setPlayers(players);
        emitTeamCrawled(team);
    } catch (IOException e) {
        System.err.println("TeamCrawler failed");
        e.printStackTrace();
    } catch (InterruptedException e) {
        System.err.println("Sleep failed");
        e.printStackTrace();
    }
}

[Buggy Hunk]
it.next();

[Patch]
e = it.next();

[Demonstration 2]

[Buggy Method]
@Test
public void powerDoubleSimple() throws Exception {
    firstOperand = new DoubleOperand(3.0);
    secondOperand = new DoubleOperand(2.0);
    binaryCalculator.setFirstOperand(firstOperand);
    binaryCalculator.setSecondOperand(secondOperand);
    assertEquals("9", binaryCalculator.multiply());
}

[Buggy Hunk]
assertEquals("9", binaryCalculator.multiply());

[Patch]
assertEquals("9", binaryCalculator.power());

[Demonstration 3]

[Buggy Method]
public static Result service(String ownerName, String projectName, String service, boolean isAdvertise) throws IOException, UnsupportedOperationException, ServletException {
    if (!isSupportedService(service)) {
        return forbidden(String.format("Unsupported service: '%s'", service));
    }
    Project project = Project.findByOwnerAndProjectName(ownerName, projectName);
    if (project == null) {
        return notFound();
    }
    models.User user = UserApp.currentUser();
    if (!isAllowed(project, service)) {
        if (user.isAnonymous()) {
            return BasicAuthAction.unauthorized(response());
        } else {
            // If you want the Git client showing your custom message to
            // the user, the Content-Type should be exact "text/plain"
            // without any parameter. For more details, see the code at
            // https://github.com/git/git/commit/426e70d4a11ce3b4f70636d57c6a0ab16ae08a00#diff-eea0ad565ec5903a11b6023755d491cfR154
            response().setHeader("Content-Type", "text/plain");
            return forbidden(String.format("'%s' has no permission to '%s/%s'.", user.name, ownerName, projectName));
        }
    }
    if (isAdvertise) {
        return ok(RepositoryService.gitAdvertise(project, service, response()));
    } else {
        if (request().body().isMaxSizeExceeded()) {
            return status(REQUEST_ENTITY_TOO_LARGE);
        } else {
            user.visits(project);
            return ok(RepositoryService.gitRpc(project, service, request(), response()));
        }
    }
}

[Buggy Hunk]
user.name, ownerName, projectName));

[Patch]
user.loginId, ownerName, projectName));