<commit_before><!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<!--/*@thymesVar id="hasInProgressEvents" type="java.lang.Boolean"*/-->
<!--/*@thymesVar id="currentSeason" type="java.lang.Integer"*/-->
<!--/*@thymesVar id="goatTopN" type="java.util.List<org.strangeforest.tcb.stats.model.PlayerRanking>"*/-->
<head th:replace="fragments/head :: commonHead(null, true, ~{::template})">
	<template>
	<meta name="description" content="Ultimate Tennis Statistics and Tennis Crystal Ball match prediction and tournament forecasts"/>
	<script type="text/javascript" th:inline="javascript">
		$(function() {
			var device = detectDevice();
			var xl = deviceGreaterOrEqual(device, "xl");
			var lg = deviceGreaterOrEqual(device, "lg");
			var md = deviceGreaterOrEqual(device, "md");
			var sm = deviceGreaterOrEqual(device, "sm");
			[# th:if="${hasInProgressEvents}"]
			var $inProgressEventsTable = $("#inProgressEventsTable");
			setBootgridColumnsVisible($inProgressEventsTable, ["surface", "draw"], sm);
			setBootgridColumnsVisible($inProgressEventsTable, ["favorite2"], lg);
			if (!md)	setBootgridColumnsWidths($inProgressEventsTable, ["name"], [175]);
			$inProgressEventsTable.bootgrid({
				ajax: true,
				ajaxSettings: {
					method: "GET",
					cache: false
				},
				url: "/inProgressEventsTable",
				rowCount: [-1],
				navigation: 0,
				sorting: false,
				formatters: {
					"event": function(column, row) {
						return "<a href='/inProgressEventForecast?inProgressEventId=" + row.id + "' class='label label-" + row.level + "' title='Show full forecast'>" + row.name + "</a>";
					},
					"surface": surfaceFormatter,
					"favorite1":  function(column, row) {
						return formatFavorite(column, row.favorite1);
					},
					"favorite2":  function(column, row) {
						return formatFavorite(column, row.favorite2);
					},
					"forecast": function(column, row) {
						return "<a href='/inProgressEventForecast?inProgressEventId=" + row.id + "' class='label label-primary label-btn' title='Show full forecast'><i class='fa fa-eye'></i>&nbsp;&nbsp;Forecast</a>";
					}
				},
				labels: {
					loading: bootgridTemplateLoading
				}
			});
			[/]
			var $latestEvents = $("#latestEvents");
			setBootgridColumnsVisible($latestEvents, ["finalEx", "participation"], xl);
			setBootgridColumnsVisible($latestEvents, ["final"], lg && !xl);
			setBootgridColumnsVisible($latestEvents, ["winner"], !lg);
			setBootgridColumnsVisible($latestEvents, ["date", "draw"], sm);
			if (!lg) setBootgridColumnsWidths($latestEvents, ["name"], [175]);
			if (xl) setBootgridColumnsWidths($latestEvents, ["surface"], [100]);
			$latestEvents.bootgrid({
				ajax: true,
				ajaxSettings: {
					method: "GET",
					cache: false
				},
				url: "/tournamentEventsTable",
				rowCount: [10],
				navigation: 0,
				sorting: false,
				formatters: {
					"date": dateFormatter,
					"event": tournamentEventFormatterExtId,
					"level": levelFormatter,
					"surface": function(column, row) {
						return formatSurface(row.surface, row.indoor) + (xl ? " " + formatSpeed(row.speed, row.surface) : "");
					},
					"participation": participationFormatter,
					"final": finalFormatter,
					"finalEx": finalExFormatter,
					"winner": function(column, row) {
						return row.winner ? "<a href='/playerProfile?playerId=" + row.winner.id + "' title='Show profile'><strong>" + row.winner.name + "</strong></a>" : "";
					}
				},
				labels: {
					loading: bootgridTemplateLoading,
					noResults: "No tournament events found"
				}
			});
			setBootgridTitles($latestEvents, [
				{id: "participation", title: "[(#{event.participation.title})]"}
			]);
			bindPopovers();
			loadRankingTopN("RANK");
		});
	</script>
	<style type="text/css">
		body {
			background: url("/images/home-bg.jpg") repeat;
		}
		.component-header {
			margin: 0;
		}
	</style>
	<script type="application/ld+json">{
		"@context": "http://schema.org",
		"@type": "WebSite",
		"url": "http://www.ultimatetennisstatistics.com",
		"name": "Ultimate Tennis Statistics",
		"description": "Welcome to Ultimate Tennis Statistics, the ultimate tennis statistics destination for the die-hard tennis fans!",
		"genre": "Sports"
	}</script>
	</template>
</head>
<body class="container">
	<header th:include="fragments/header :: title"></header>
	<div class="row">
		<div class="col-lg-10 col-md-9">
			<div>
				<h1 style="margin-top: 10px; margin-bottom: 20px"><th:block th:include="fragments/promotion :: logo"/></h1>
			</div>
			<p>
				Welcome to <th:block th:include="fragments/promotion :: logo"/>, the ultimate tennis statistics destination for the die-hard tennis fans!<br/>
				Be it latest or historical results, in-match statistics, records or all-time greats comparisons, Elo ratings or tournament forecasts, you will find it here. More details at <a href="/about" class="text-nowrap"><i class="fa fa-question-circle"></i> About</a> page.
			</p>
			<th:block th:if="${hasInProgressEvents}">
			<h4 class="text-nowrap" style="margin-top: 25px"><i class="fa fa-eye"></i> Latest Forecasts <sup style="font-size: 60%"><i class="text-muted">Powered by <th:block th:include="fragments/promotion :: tcb"/></i></sup></h4>
			<table id="inProgressEventsTable" class="table table-condensed table-hover table-striped" style="margin-bottom: 0">
				<thead>
				<tr>
					<th data-column-id="name" data-formatter="event" data-width="200">Tournament</th>
					<th data-column-id="surface" data-formatter="surface" data-width="80">Surface</th>
					<th data-column-id="draw" data-width="65">Draw</th>
					<th data-column-id="favorite1" data-formatter="favorite1" data-width="220">1-st Favorite</th>
					<th data-column-id="favorite2" data-formatter="favorite2" data-width="220">2-nd Favorite</th>
					<th data-column-id="forecast" data-formatter="forecast" data-width="95">Forecast</th>
				</tr>
				</thead>
			</table>
			<div class="pull-right" style="margin: 5px 10px">
				<a href="/inProgressEventsForecasts" class="label label-default" title="Full forecasts details">All Forecasts</a>
				<a href="/rankingsTable?rankType=ELO_RANK" class="label label-B" title="Current Elo rankings">Elo Rankings</a>
			</div>
			</th:block>
			<h4 class="text-nowrap" style="margin-top: 25px"><i class="fa fa-calendar"></i> Latest Results</h4>
			<table id="latestEvents" class="table table-condensed table-hover table-striped" style="margin-bottom: 0">
				<thead>
				<tr>
					<th data-column-id="date" data-formatter="date" data-order="desc" data-width="85">Date</th>
					<th data-column-id="name" data-formatter="event" data-width="200">Tournament</th>
					<th data-column-id="surface" data-formatter="surface" data-width="80">Surface</th>
					<th data-column-id="draw" data-width="65">Draw</th>
					<th data-column-id="participation" data-formatter="participation" data-width="60" data-align="right" data-header-align="right">Part.</th>
					<th data-column-id="final" data-formatter="final" data-width="500">Final</th>
					<th data-column-id="finalEx" data-formatter="finalEx" data-visible="false" data-width="550">Final</th>
					<th data-column-id="winner" data-formatter="winner" data-width="200">Winner</th>
				</tr>
				</thead>
			</table>
			<div class="pull-right">
				<a href="/tournamentEvents" class="label label-default" title="Show more tournament results">More Results</a>
				<a th:href="@{/season(season=${currentSeason})}" class="label label-B" th:title="|Show season ${currentSeason} figures|">Season [(${currentSeason})]</a>
			</div>
			<h4 class="text-nowrap" style="margin-top: 25px"><i class="fa fa-star-o"></i> Latest New Features<sup class="new-feature"></sup></h4>
			<ul>
				<li>Adjusted H2H takes into account surface and importance skew in H2H matches and normalizes it (Federer vs Nadal <a href="/headToHead?name1=Roger%20Federer&name2=Rafael%20Nadal">Adjusted H2H</a>, details about formula at <a href="/glossary">Glossary</a> page)</li>
				<li>Court Speed Index in filters across the site as well as player performance breakdown by court speed (i.e. <a href="/playerProfile?name=Roger%20Federer&tab=performance" title="Federer performance breakdown">Federer</a>, <a href="/playerProfile?name=Novak%20Djokovic&tab=performance" title="Djokovic performance breakdown">Djokovic</a>, <a href="/playerProfile?name=Rafael%20Nadal&tab=performance" title="Nadal performance breakdown">Nadal</a>)</li>
				<li>New Records for Different Masters Slot <a href="/record?recordId=DifferentMastersSlotTitles">Titles</a> (+2 'GOAT' Points) / <a href="/record?recordId=DifferentMastersSlotFinals">Finals</a> (Masters Slot is an order number (1-9) by date of the Masters event within the season) and <a href="/record?recordId=YoungestEndOfSeasonATPNo1">Youngest</a> / <a href="/record?recordId=OldestEndOfSeasonATPNo1">Oldest</a> year-end No. 1</li>
				<li>Court Speed Index (0 - 100) for tournaments and tournament events (more info about the formula used at <a href="/glossary">Glossary</a> page, visible by default on 1440+ pixels screens)</li>
				<li>New Records for the <a href="/records?category=LeastMostBreaksWinningTitle">Least Breaks Against / Most Breaks scored while Winning Title</a></li>
				<li>Player nicknames - Players are searchable by nicknames too: Maestro, Bull, Joker...</li>
				<li><a href="/greatestMatches">Greatest Matches</a> - Greatest matches of Open Era ranked by special <span th:title="#{match.greatnessScore.title}">Match Greatness Score</span> formula</li>
				<li>New Tournament Event Title Difficulty factor, representing how difficult was to win the title based on the strength of the opponents a winner has faced on the path to the title (more details about Title Difficulty algorithm at <a href="/glossary">Glossary</a> page), as well as new records: <a href="/records?category=MostTitlesAdjustedbyDifficulty">Most Titles Adjusted by Difficulty</a>, <a href="/records?category=HardestTitles">Hardest Titles</a> and <a href="/records?category=EasiestTitles">Easiest Titles</a></li>
				<li><a href="/rankingsTable?rankType=RECENT_ELO_RANK">Recent Elo Rating</a> - New Recent Elo rating with double the normal Elo K-Factor values more recent form than standard Elo Rating</li>
				<li><a href="/statsTimeline">Statistics Timeline</a> - How tennis game evolved through time, more info at new <a href="/blog?post=gameEvolution">Game Evolution</a> blog post</li>
			</ul>
			<h4 class="text-nowrap" style="margin-top: 25px"><i class="fa fa-bullhorn"></i> Tips<sup class="cool-feature"></sup></h4>
			<ul>
				<li><th:block th:include="fragments/promotion :: logo"/> is a mobile-friendly web site, but to see it in its 'full glory', open it on the screen greater than 1440 pixels, in which case more data will show up and more columns with various details will be available in the data tables.</li>
				<li>On most data tables, clicking on a data cell will open a page with the details. Examples:<br/>
					<ul>
						<li>On 'GOAT' List page, clicking on a number of Grand Slam tournaments for the player will open the page with actual GSs won by the player.</li>
						<li>On Top Performers and Statistics Leaders pages, clicking on the statistics value will open the page with matches on which the value is based.</li><commit_msg>Myth Busters Blog Series<commit_after><!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<!--/*@thymesVar id="hasInProgressEvents" type="java.lang.Boolean"*/-->
<!--/*@thymesVar id="currentSeason" type="java.lang.Integer"*/-->
<!--/*@thymesVar id="goatTopN" type="java.util.List<org.strangeforest.tcb.stats.model.PlayerRanking>"*/-->
<head th:replace="fragments/head :: commonHead(null, true, ~{::template})">
	<template>
	<meta name="description" content="Ultimate Tennis Statistics and Tennis Crystal Ball match prediction and tournament forecasts"/>
	<script type="text/javascript" th:inline="javascript">
		$(function() {
			var device = detectDevice();
			var xl = deviceGreaterOrEqual(device, "xl");
			var lg = deviceGreaterOrEqual(device, "lg");
			var md = deviceGreaterOrEqual(device, "md");
			var sm = deviceGreaterOrEqual(device, "sm");
			[# th:if="${hasInProgressEvents}"]
			var $inProgressEventsTable = $("#inProgressEventsTable");
			setBootgridColumnsVisible($inProgressEventsTable, ["surface", "draw"], sm);
			setBootgridColumnsVisible($inProgressEventsTable, ["favorite2"], lg);
			if (!md)	setBootgridColumnsWidths($inProgressEventsTable, ["name"], [175]);
			$inProgressEventsTable.bootgrid({
				ajax: true,
				ajaxSettings: {
					method: "GET",
					cache: false
				},
				url: "/inProgressEventsTable",
				rowCount: [-1],
				navigation: 0,
				sorting: false,
				formatters: {
					"event": function(column, row) {
						return "<a href='/inProgressEventForecast?inProgressEventId=" + row.id + "' class='label label-" + row.level + "' title='Show full forecast'>" + row.name + "</a>";
					},
					"surface": surfaceFormatter,
					"favorite1":  function(column, row) {
						return formatFavorite(column, row.favorite1);
					},
					"favorite2":  function(column, row) {
						return formatFavorite(column, row.favorite2);
					},
					"forecast": function(column, row) {
						return "<a href='/inProgressEventForecast?inProgressEventId=" + row.id + "' class='label label-primary label-btn' title='Show full forecast'><i class='fa fa-eye'></i>&nbsp;&nbsp;Forecast</a>";
					}
				},
				labels: {
					loading: bootgridTemplateLoading
				}
			});
			[/]
			var $latestEvents = $("#latestEvents");
			setBootgridColumnsVisible($latestEvents, ["finalEx", "participation"], xl);
			setBootgridColumnsVisible($latestEvents, ["final"], lg && !xl);
			setBootgridColumnsVisible($latestEvents, ["winner"], !lg);
			setBootgridColumnsVisible($latestEvents, ["date", "draw"], sm);
			if (!lg) setBootgridColumnsWidths($latestEvents, ["name"], [175]);
			if (xl) setBootgridColumnsWidths($latestEvents, ["surface"], [100]);
			$latestEvents.bootgrid({
				ajax: true,
				ajaxSettings: {
					method: "GET",
					cache: false
				},
				url: "/tournamentEventsTable",
				rowCount: [10],
				navigation: 0,
				sorting: false,
				formatters: {
					"date": dateFormatter,
					"event": tournamentEventFormatterExtId,
					"level": levelFormatter,
					"surface": function(column, row) {
						return formatSurface(row.surface, row.indoor) + (xl ? " " + formatSpeed(row.speed, row.surface) : "");
					},
					"participation": participationFormatter,
					"final": finalFormatter,
					"finalEx": finalExFormatter,
					"winner": function(column, row) {
						return row.winner ? "<a href='/playerProfile?playerId=" + row.winner.id + "' title='Show profile'><strong>" + row.winner.name + "</strong></a>" : "";
					}
				},
				labels: {
					loading: bootgridTemplateLoading,
					noResults: "No tournament events found"
				}
			});
			setBootgridTitles($latestEvents, [
				{id: "participation", title: "[(#{event.participation.title})]"}
			]);
			bindPopovers();
			loadRankingTopN("RANK");
		});
	</script>
	<style type="text/css">
		body {
			background: url("/images/home-bg.jpg") repeat;
		}
		.component-header {
			margin: 0;
		}
	</style>
	<script type="application/ld+json">{
		"@context": "http://schema.org",
		"@type": "WebSite",
		"url": "http://www.ultimatetennisstatistics.com",
		"name": "Ultimate Tennis Statistics",
		"description": "Welcome to Ultimate Tennis Statistics, the ultimate tennis statistics destination for the die-hard tennis fans!",
		"genre": "Sports"
	}</script>
	</template>
</head>
<body class="container">
	<header th:include="fragments/header :: title"></header>
	<div class="row">
		<div class="col-lg-10 col-md-9">
			<div>
				<h1 style="margin-top: 10px; margin-bottom: 20px"><th:block th:include="fragments/promotion :: logo"/></h1>
			</div>
			<p>
				Welcome to <th:block th:include="fragments/promotion :: logo"/>, the ultimate tennis statistics destination for the die-hard tennis fans!<br/>
				Be it latest or historical results, in-match statistics, records or all-time greats comparisons, Elo ratings or tournament forecasts, you will find it here. More details at <a href="/about" class="text-nowrap"><i class="fa fa-question-circle"></i> About</a> page.
			</p>
			<th:block th:if="${hasInProgressEvents}">
			<h4 class="text-nowrap" style="margin-top: 25px"><i class="fa fa-eye"></i> Latest Forecasts <sup style="font-size: 60%"><i class="text-muted">Powered by <th:block th:include="fragments/promotion :: tcb"/></i></sup></h4>
			<table id="inProgressEventsTable" class="table table-condensed table-hover table-striped" style="margin-bottom: 0">
				<thead>
				<tr>
					<th data-column-id="name" data-formatter="event" data-width="200">Tournament</th>
					<th data-column-id="surface" data-formatter="surface" data-width="80">Surface</th>
					<th data-column-id="draw" data-width="65">Draw</th>
					<th data-column-id="favorite1" data-formatter="favorite1" data-width="220">1-st Favorite</th>
					<th data-column-id="favorite2" data-formatter="favorite2" data-width="220">2-nd Favorite</th>
					<th data-column-id="forecast" data-formatter="forecast" data-width="95">Forecast</th>
				</tr>
				</thead>
			</table>
			<div class="pull-right" style="margin: 5px 10px">
				<a href="/inProgressEventsForecasts" class="label label-default" title="Full forecasts details">All Forecasts</a>
				<a href="/rankingsTable?rankType=ELO_RANK" class="label label-B" title="Current Elo rankings">Elo Rankings</a>
			</div>
			</th:block>
			<h4 class="text-nowrap" style="margin-top: 25px"><i class="fa fa-calendar"></i> Latest Results</h4>
			<table id="latestEvents" class="table table-condensed table-hover table-striped" style="margin-bottom: 0">
				<thead>
				<tr>
					<th data-column-id="date" data-formatter="date" data-order="desc" data-width="85">Date</th>
					<th data-column-id="name" data-formatter="event" data-width="200">Tournament</th>
					<th data-column-id="surface" data-formatter="surface" data-width="80">Surface</th>
					<th data-column-id="draw" data-width="65">Draw</th>
					<th data-column-id="participation" data-formatter="participation" data-width="60" data-align="right" data-header-align="right">Part.</th>
					<th data-column-id="final" data-formatter="final" data-width="500">Final</th>
					<th data-column-id="finalEx" data-formatter="finalEx" data-visible="false" data-width="550">Final</th>
					<th data-column-id="winner" data-formatter="winner" data-width="200">Winner</th>
				</tr>
				</thead>
			</table>
			<div class="pull-right">
				<a href="/tournamentEvents" class="label label-default" title="Show more tournament results">More Results</a>
				<a th:href="@{/season(season=${currentSeason})}" class="label label-B" th:title="|Show season ${currentSeason} figures|">Season [(${currentSeason})]</a>
			</div>
			<h4 class="text-nowrap" style="margin-top: 25px"><i class="fa fa-star-o"></i> Latest New Features<sup class="new-feature"></sup></h4>
			<ul>
				<li>Adjusted H2H takes into account surface and importance skew in H2H matches and normalizes it (Federer vs Nadal <a href="/headToHead?name1=Roger%20Federer&name2=Rafael%20Nadal">Adjusted H2H</a>, details about formula at <a href="/glossary">Glossary</a> page and in the <a href="/blog?post=h2hSkew">Blog Post</a>)</li>
				<li>Court Speed Index in filters across the site as well as player performance breakdown by court speed (i.e. <a href="/playerProfile?name=Roger%20Federer&tab=performance" title="Federer performance breakdown">Federer</a>, <a href="/playerProfile?name=Novak%20Djokovic&tab=performance" title="Djokovic performance breakdown">Djokovic</a>, <a href="/playerProfile?name=Rafael%20Nadal&tab=performance" title="Nadal performance breakdown">Nadal</a>)</li>
				<li>New Records for Different Masters Slot <a href="/record?recordId=DifferentMastersSlotTitles">Titles</a> (+2 'GOAT' Points) / <a href="/record?recordId=DifferentMastersSlotFinals">Finals</a> (Masters Slot is an order number (1-9) by date of the Masters event within the season) and <a href="/record?recordId=YoungestEndOfSeasonATPNo1">Youngest</a> / <a href="/record?recordId=OldestEndOfSeasonATPNo1">Oldest</a> year-end No. 1</li>
				<li>Court Speed Index (0 - 100) for tournaments and tournament events (more info about the formula used at <a href="/glossary">Glossary</a> page, visible by default on 1440+ pixels screens)</li>
				<li>New Records for the <a href="/records?category=LeastMostBreaksWinningTitle">Least Breaks Against / Most Breaks scored while Winning Title</a></li>
				<li>Player nicknames - Players are searchable by nicknames too: Maestro, Bull, Joker...</li>
				<li><a href="/greatestMatches">Greatest Matches</a> - Greatest matches of Open Era ranked by special <span th:title="#{match.greatnessScore.title}">Match Greatness Score</span> formula</li>
				<li>New Tournament Event Title Difficulty factor, representing how difficult was to win the title based on the strength of the opponents a winner has faced on the path to the title (more details about Title Difficulty algorithm at <a href="/glossary">Glossary</a> page), as well as new records: <a href="/records?category=MostTitlesAdjustedbyDifficulty">Most Titles Adjusted by Difficulty</a>, <a href="/records?category=HardestTitles">Hardest Titles</a> and <a href="/records?category=EasiestTitles">Easiest Titles</a></li>
				<li><a href="/rankingsTable?rankType=RECENT_ELO_RANK">Recent Elo Rating</a> - New Recent Elo rating with double the normal Elo K-Factor values more recent form than standard Elo Rating</li>
				<li><a href="/statsTimeline">Statistics Timeline</a> - How tennis game evolved through time, more info at new <a href="/blog?post=gameEvolution">Game Evolution</a> blog post</li>
			</ul>
			<h4 class="text-nowrap" style="margin-top: 25px"><i class="fa fa-bullhorn"></i> Tips<sup class="cool-feature"></sup></h4>
			<ul>
				<li><th:block th:include="fragments/promotion :: logo"/> is a mobile-friendly web site, but to see it in its 'full glory', open it on the screen greater than 1440 pixels, in which case more data will show up and more columns with various details will be available in the data tables.</li>
				<li>On most data tables, clicking on a data cell will open a page with the details. Examples:<br/>
					<ul>
						<li>On 'GOAT' List page, clicking on a number of Grand Slam tournaments for the player will open the page with actual GSs won by the player.</li>
						<li>On Top Performers and Statistics Leaders pages, clicking on the statistics value will open the page with matches on which the value is based.</li>
{'fraction_non_alphanumeric': 0.1635172810550073, 'fraction_numerical': 0.011196176483604018, 'mean_word_length': 4.755985736118187, 'pattern_counts': {'":': 38, '<': 399, '<?xml version=': 0, '>': 399, 'https://': 0, 'lorem ipsum': 0, 'www.': 4, 'xml': 2}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4436339', 'n_tokens_mistral': 8357, 'n_tokens_neox': 7121, 'n_words': 1804}