© Copyright 2018 – 2024 FIRECRACKER SPORTS. All Rights Reserved.​ TERMS OF USE  |  PRIVACY POLICY

2023 Player Metrics

01/01/2025 - 03/31/2025
Providence , Rhode Island

INFORMATION

  • Age groups:
    1 Divisions High School (16U-18U)
  • Pool Play:
    Wednesday, January 1st through Sunday, March 30th, 2025
  • Price:
    High School (16U-18U) - $0
  • Playoffs/Championships:
    Monday, March 31st, 2025

Registration

  • DIVISION:
    • High School (16U-18U)
    • OPEN
    402 Players Registered
    COST: $0

College Coaches Attending

Teams

Locations

schedule

HOTELS

SCHEDULES & STANDINGS

Brackets

TOP PERFORMERS

RankProfileNameHome To First (30 Yard Dash)
1 Jack Raymond 3.5
2 Victor Mijares 3.63
3 Liam Shea 3.65
4 Colin Larson 3.69
5 Michael Quiros 3.69
6 Aiden Lopez 3.79
7 Michael Thompson 3.8
8 Randen May 3.8
9 Ethan Jeon 3.81
10 Elliott Harris 3.83
11 Topher Reardon 3.85
12 Joshua Warming 3.87
13 Marshall Kehlhem 3.87
14 Aaron LaRose 3.88
15 Aidan Suarez 3.88
16 Julien Kwasnik 3.88
17 Matteo Cuccovia 3.88
18 Nick Palovich 3.88
19 Adam Farne 3.91
20 Andrew Thompson 3.91
21 Isaiah Figueroa 3.91
22 Jagger James Bruch 3.91
23 Matthew Mangini 3.91
24 Nicholas Roca 3.91
25 Carson Dupras 3.92
26 Cody Banning 3.93
27 Liam Pond 3.93
28 RYAN KEATING 3.93
29 Cameron Dorr 3.94
30 CRISTIAN LOPEZ 3.94
31 Ethan Stepputtis 3.94
32 Evan Dumeny 3.94
33 Kyle Weldon 3.94
34 Noah Brewer 3.94
35 Ryan Landry 3.94
36 Samuel Bay 3.94
37 Ian Heberlig 3.95
38 Matthew Orena 3.95
39 ANTHONY AURORA 3.96
40 Alex Dayton 3.97
41 Bryce Payne 3.97
42 Henry Sanders 3.97
43 Johnny Fuller 3.97
44 Luke Brillant 3.97
45 Michael Kwas 3.97
46 Oliver Lawrence 3.97
47 Tobey Appenzeller 3.97
48 William Benedetti 3.97
49 Zayden Crouse 3.97
50 Luis Garcia 3.98
51 Kaden Jones 4
52 Leonardo May 4
53 Patrick Sebber 4
54 Ryan Flynn 4
55 Tommy Caporaso 4
56 William Coreno Jr. 4
57 Zach Migliore 4
58 Orion Ruck 4.01
59 Ethan Torres 4.02
60 mark lebo 4.02
61 Andrew Dempsey 4.03
62 CALEB BOYKO 4.03
63 Camden Strong 4.03
64 Dominic Burack 4.03
65 HAMILTON WRAY 4.03
66 Jack Kearney 4.03
67 Jason Hall 4.03
68 Jayden Tolentino 4.03
69 Josh Hessel 4.03
70 Lukas Csury 4.03
71 Luke Skouras 4.03
72 Matthew Fiaschetti 4.03
73 Michael Pierce 4.03
74 Sean Egan 4.03
75 Brooks Keefe 4.04
76 Josh Pozo 4.04
77 Nicholas Schmidt 4.04
78 Jerusalen Leon 4.05
79 Jullian Dejesus 4.05
80 Martin Green Jr. 4.05
81 Vincent Wagoner 4.05
82 Cesar Gonzalez 4.06
83 Conor Toohill 4.06
84 Dustin Menzel 4.06
85 Hector Sulbaran 4.06
86 Josh Cote 4.06
87 Kade Marcantonio 4.06
88 Kyle Coy 4.06
89 Skyler Hills 4.06
90 Ethan Elderkin 4.07
91 Luke Rizzi 4.07
92 Mason Gordon 4.07
93 Nathan Khaldarov 4.07
94 Noah Wood 4.07
95 Brady Morin 4.08
96 Alex Scaringi 4.09
97 Brady Henderson 4.09
98 Brian Gonzalez 4.09
99 Cal Chance 4.09
100 Evan Menzel 4.09
101 Jeremie Luna 4.09
102 Nolan Bonnell 4.09
103 Riley McDonald 4.09
104 Ryan Mayer 4.09
105 WILL CAMERON 4.09
106 Alex Baeta 4.1
107 Brailin Dominguez 4.1
108 Chester Bouchard 4.1
109 Chris Barboza 4.1
110 Gabe Knudsen 4.1
111 JACOB FERREIRA 4.1
112 Mitchell Canuel 4.1
113 Mykolas Ruth 4.1
114 Ty Curtis 4.1
115 Will Winiarski 4.1
116 Alexander Lorenzo 4.11
117 Luca Simonelli 4.11
118 Mason Pingree 4.11
119 Will Bush 4.11
120 Allen McKay 4.12
121 Carter Bade 4.12
122 Connor Nichols 4.12
123 Eric Foster Jr 4.12
124 Jason Mitchell Jr. 4.12
125 Jeremy Evangelista 4.12
126 Jesus Chevalier 4.12
127 Liam Lawlor 4.12
128 Max Hopkins 4.12
129 Vince Romano 4.12
130 Yadhiel Moya 4.12
131 Zach Kantor 4.12
132 Tommy Crapanzano 4.12
133 Christopher Leggett 4.13
134 Ellis Columber 4.13
135 Jonathan Strohecker 4.13
136 Matthew Zunno 4.13
137 Michael Davide Jr. 4.13
138 Rohan Inamdar 4.13
139 Ryan Tejeda 4.13
140 Sam Shelton 4.13
141 Eli Davis 4.14
142 Charlie Bolnick 4.15
143 Hayden Strout 4.15
144 Jack Welch 4.15
145 Jason Boni 4.15
146 Joseph Luparello 4.15
147 Joshua Strauss 4.15
148 Logan Whitney 4.15
149 Peter Portugues 4.15
150 Quinten Monteiro 4.15
151 Ruben Cortorreal 4.15
152 Adam Gonzalez 4.16
153 Alex Russell 4.16
154 Henry Solmo-Brewer 4.16
155 Jack Caron 4.16
156 Jonathan Antin 4.16
157 Lane LeClair 4.16
158 Matthew Tranquillo 4.16
159 Scotty Joseph 4.16
160 Evan Aubin 4.17
161 Adam Hess 4.18
162 Andrew Sevigny 4.18
163 HUDSON FULCHER-MELENDY 4.18
164 Jack Keyo 4.18
165 Jackson Pecor 4.18
166 John Luter III 4.18
167 Matthew Levesque 4.18
168 Aidan Klocek 4.19
169 AIDEN PALEN 4.19
170 Ben Cote 4.19
171 Ben Kalish 4.19
172 David Marrero 4.19
173 Forrest Mitterbauer 4.19
174 Jackson Haefner 4.19
175 Levi Hessel 4.19
176 Luke McGrath 4.19
177 Robert Bouchard 4.19
178 Ryan Dennis 4.19
179 Zachary Voelker 4.19
180 Blake Littlefield 4.2
181 Jack Haley 4.2
182 Jack Himelfarb 4.2
183 Nathan Machado 4.2
184 Armani Pimentel 4.21
185 Griffin Gauthier 4.21
186 Scott Sleurs 4.21
187 Aidan Davenport 4.22
188 Alex Murdock 4.22
189 Andrew Malkowski 4.22
190 Angelo Ilarda 4.22
191 Callan Heimroth 4.22
192 Daniel Noviski 4.22
193 Henry Atlas 4.22
194 Jack Boyle 4.22
195 Jimmy Lewis 4.22
196 Logan Voltaire 4.22
197 Michael Cleary 4.22
198 Noah Johnston 4.22
199 Sebastian Chavez-Perrez 4.22
200 Wyatt Daigle 4.22
201 Aaron Vega 4.23
202 Charles MacElhiney 4.23
203 Thomas Marcotte 4.23
204 Logan Littlefield 4.24
205 Abel Edmundson 4.25
206 Aidan Daugherty 4.25
207 Cameron Connolly 4.25
208 Curtis Sullivan 4.25
209 Jack Cirelli 4.25
210 James Termine 4.25
211 Jayden Sleeper 4.25
212 Kellen McDonald 4.25
213 Logan French 4.25
214 Neldwy Cruz 4.25
215 William CoPenny 4.25
216 William Scott 4.25
217 Matthew Taylor 4.26
218 Johnny Payne 4.27
219 Caelan Porter 4.28
220 Casey Lowndes 4.28
221 Gavin Bisignano 4.28
222 Jack Sumner 4.28
223 Jacob Marsh 4.28
224 Jason Gelormini 4.28
225 Jordan Suarez 4.28
226 Justin Sheeky 4.28
227 Liam Mackessy 4.28
228 Matteo Lucatino 4.28
229 Michael Beauvil 4.28
230 Nick Luparello 4.28
231 Patrick Weaving 4.28
232 Pedro DelToro 4.28
233 Ryan Connelly 4.28
234 Eddie McClung 4.29
235 Evan Pupka 4.29
236 James Bruso 4.29
237 Joseph Tavares 4.29
238 William Steinmann 4.29
239 Adryan Ureña 4.3
240 Anthony Campos Jr 4.3
241 CHRIS SAPIENZA 4.3
242 Colton Merola 4.3
243 Gabe Carpenter 4.3
244 Matthew Nordstrom 4.3
245 Aidan Quinn 4.31
246 AJ Cantore 4.31
247 Brayden Soma 4.31
248 David Tillotson 4.31
249 Gavin Rooney 4.31
250 Jason Martin 4.31
251 Jayden Loccisano 4.31
252 Sean Garvin 4.31
253 Ashton Goodwin 4.32
254 Jake Walsh 4.32
255 Kaiden Morin 4.32
256 Dakota Harriman 4.33
257 Kyle Robertson 4.33
258 Kyle Wilson 4.33
259 Aaron Fazal 4.34
260 Ahmo Kolenovic 4.34
261 Bryan Hoyt 4.34
262 Chris Carton 4.34
263 Gavin Pettit 4.34
264 IAN LAWRENCE-RIDDELL 4.34
265 John David O\'Hara 4.34
266 Justin Hills 4.34
267 Nick Daley 4.34
268 Nicholaos (Niko) Samaras 4.34
269 Penn Jurgensen 4.34
270 Zachary Powell 4.34
271 Antonio Sarchese 4.35
272 Gavin Nichols 4.35
273 John Perino 4.35
274 Ryan Valente 4.35
275 Tyler Laureano 4.35
276 Aidan Walsh 4.37
277 BRADY DAMMLING 4.37
278 John Jordan 4.37
279 Reagan Baumeister 4.37
280 Trent Holst 4.37
281 Brady Quirion 4.38
282 Joseph Gianakis 4.38
283 Hugh Cyhowski 4.39
284 Zachary Niedzwiecki 4.39
285 Cole Fredriksen 4.4
286 Daniel St. George 4.4
287 William Singer 4.4
288 Zyaire Roberts 4.4
289 Brady Hargraves 4.41
290 Brandon Rossano 4.41
291 Danny Armstrong 4.41
292 Dylan Loccisano 4.41
293 Evan Candelario 4.41
294 George Addona 4.41
295 Josh Sigmon 4.41
296 Patrick Millin 4.41
297 SCOTT BEUOY 4.41
298 Trey Kuzmeski 4.41
299 Quinn Orvis 4.42
300 Thomas Day 4.42
301 Adam Gold 4.44
302 Ben Branco 4.44
303 Caden Bushey 4.44
304 Chase McQuade 4.44
305 Evan Hartman 4.44
306 Gus Merhige 4.44
307 Joel Cortorreal 4.44
308 Joseph Gourley 4.44
309 Matteo Giudice 4.44
310 Riki Ekuni 4.44
311 Ryan Curry 4.45
312 JAYDEN CUNNINGHAM 4.46
313 Ryan Kane 4.46
314 Tarren Lawless 4.46
315 Brody Victorio 4.47
316 Colin Couto 4.47
317 Jacob Neumayer 4.47
318 Anderson Clifford 4.5
319 hayden sladewski 4.5
320 Jack Fontaine 4.5
321 Jacob Falero 4.5
322 Jonah Clark 4.5
323 Jonathan Tawa 4.5
324 KAM GAMM 4.5
325 Luca Faulkner 4.5
326 Max Bryan 4.5
327 Russel Kilkenny 4.5
328 Alonso Espinet 4.53
329 Cameron Delmore 4.53
330 JARED PAONE 4.53
331 Ryan Mullen 4.53
332 Albert Taveras 4.54
333 Thomas Jude 4.54
334 Zane Prescott 4.54
335 Michael Manzanillo 4.55
336 Landon Fischer 4.56
337 Maddox Legendre 4.56
338 Matthew Olynciw 4.56
339 Alex Munz 4.57
340 Connor Mandirola 4.57
341 Santos Simpson 4.57
342 Blake Coy 4.58
343 Paulo Gago 4.59
344 Brady Shatas 4.6
345 Joseph Calabrese 4.6
346 Elan Santana 4.62
347 Jimmy Walsh 4.62
348 Sheamus Mahoney 4.62
349 Bennett Mcstowe 4.63
350 Drew Hopper 4.66
351 Nicholas Curiel 4.66
352 Noah Sanchez 4.66
353 Angel Calderon Jr 4.69
354 Danny Fowler 4.7
355 Nelson Cruz 4.7
356 Conor Canonico 4.71
357 Liam Gorney 4.71
358 Ewan McDonough 4.72
359 Gabe Scribner 4.72
360 Aidan Clancey 4.75
361 Dennis Tower 4.75
362 Bradyn Surreira 4.76
363 Matthew Neville 4.76
364 CJ Clayton 4.78
365 Owen Smith 4.78
366 Geoffrey Laliberte 4.79
367 Justin Engelsen 4.82
368 Andrew Wagner 4.84
369 Jackson Bouchard 4.84
370 Ryan Neville 4.84
371 Jeremy Leone 4.85
372 Will Carroll 4.85
373 Payton Young 4.87
374 Gabriel Gomez 4.91
375 Sean Marinelli 4.91
376 Barrett Snider 4.94
377 Charlie Nella 4.94
378 Liam Thompson 4.94
379 Jack McManamon 4.97
380 Vikram Gohri 4.97
381 Christopher Barba 5
382 Wes Morneau 5
383 Sebastian Lopez 5.02
384 Jake Florence 5.03
385 Brody Harris 5.13
386 Nick Atwell 5.13
387 Cameron Shatas 5.19
388 Adrian Marcelo Acosta 5.2
389 Austin Stuart 5.2
390 Dylan Seemangal 5.26
391 Rishon Robenstein 5.29
392 Enzo Furlani 5.39
393 Cormac Cunningham 5.79
RankProfileName60 Time
1 Colin Larson 6.62
2 Victor Mijares 6.62
3 Ian Heberlig 6.7
4 Isaiah Figueroa 6.8
5 Randen May 6.85
6 Ethan Stepputtis 6.87
7 Elliott Harris 6.9
8 Michael Quiros 6.9
9 Joshua Warming 6.96
10 Jack Kearney 6.97
11 Brooks Keefe 7
12 Bryce Payne 7
13 Liam Shea 7
14 Mason Gordon 7
15 Michael Thompson 7
16 RYAN KEATING 7
17 Tommy Caporaso 7
18 Aidan Suarez 7.03
19 Jack Raymond 7.03
20 Cesar Gonzalez 7.06
21 Matteo Cuccovia 7.06
22 Nick Palovich 7.06
23 Ryan Landry 7.06
24 Nicholas Roca 7.07
25 Noah Brewer 7.07
26 Orion Ruck 7.08
27 Tobey Appenzeller 7.08
28 Aaron LaRose 7.09
29 Evan Dumeny 7.09
30 Liam Pond 7.09
31 Marshall Kehlhem 7.09
32 Cody Banning 7.1
33 Kaden Jones 7.1
34 mark lebo 7.1
35 Zayden Crouse 7.1
36 Matthew Mangini 7.11
37 Kyle Weldon 7.12
38 Ryan Flynn 7.12
39 Evan Aubin 7.13
40 Kade Marcantonio 7.13
41 Charlie Bolnick 7.14
42 Zach Migliore 7.14
43 Lukas Csury 7.15
44 Michael Kwas 7.15
45 Nicholas Schmidt 7.15
46 Tommy Crapanzano 7.15
47 Charles MacElhiney 7.16
48 Luke Skouras 7.16
49 Ryan Dennis 7.17
50 Alex Dayton 7.18
51 Andrew Thompson 7.18
52 Leonardo May 7.18
53 Aiden Lopez 7.19
54 Josh Cote 7.19
55 Julien Kwasnik 7.19
56 Luis Garcia 7.19
57 Mykolas Ruth 7.19
58 Sean Egan 7.19
59 Ty Curtis 7.19
60 Camden Strong 7.2
61 Henry Solmo-Brewer 7.2
62 Jason Hall 7.2
63 Jonathan Strohecker 7.2
64 Lane LeClair 7.2
65 Samuel Bay 7.2
66 Skyler Hills 7.2
67 Josh Hessel 7.21
68 Luke Rizzi 7.21
69 Patrick Sebber 7.21
70 Charlie Nella 7.22
71 Noah Wood 7.22
72 Topher Reardon 7.22
73 Andrew Sevigny 7.23
74 ANTHONY AURORA 7.25
75 Cal Chance 7.25
76 Connor Nichols 7.25
77 Ethan Elderkin 7.25
78 Jagger James Bruch 7.25
79 Jason Mitchell Jr. 7.25
80 Michael Pierce 7.25
81 William Coreno Jr. 7.25
82 Jeremie Luna 7.27
83 Riley McDonald 7.27
84 Vincent Wagoner 7.27
85 Brian Gonzalez 7.28
86 Cameron Dorr 7.28
87 Conor Toohill 7.28
88 Luke Brillant 7.28
89 Christopher Leggett 7.3
90 Joseph Luparello 7.3
91 Matthew Fiaschetti 7.3
92 Nolan Bonnell 7.3
93 Jayden Tolentino 7.32
94 Jerusalen Leon 7.32
95 Brailin Dominguez 7.33
96 Ellis Columber 7.33
97 Aidan Daugherty 7.34
98 Carter Bade 7.34
99 Jack Caron 7.34
100 Allen McKay 7.36
101 Ashton Goodwin 7.37
102 Peter Portugues 7.37
103 Cameron Connolly 7.38
104 Johnny Fuller 7.38
105 Matthew Tranquillo 7.38
106 Michael Davide Jr. 7.38
107 Ryan Curry 7.38
108 Sam Shelton 7.39
109 Carson Dupras 7.4
110 Gabe Knudsen 7.4
111 JACOB FERREIRA 7.4
112 Justin Hills 7.4
113 Rishon Robenstein 7.4
114 Evan Menzel 7.41
115 Kyle Coy 7.41
116 WILL CAMERON 7.41
117 Yadhiel Moya 7.41
118 Alex Baeta 7.42
119 Sebastian Chavez-Perrez 7.42
120 Brandon Rossano 7.43
121 Adam Hess 7.44
122 Chris Barboza 7.44
123 Eric Foster Jr 7.44
124 Levi Hessel 7.44
125 Patrick Weaving 7.44
126 Ryan Mayer 7.44
127 Jackson Pecor 7.45
128 Andrew Dempsey 7.46
129 Wyatt Daigle 7.46
130 Ethan Torres 7.47
131 Henry Sanders 7.47
132 Josh Pozo 7.47
133 Mitchell Canuel 7.47
134 Robert Bouchard 7.47
135 Rohan Inamdar 7.47
136 Matthew Levesque 7.48
137 Alex Scaringi 7.5
138 Brady Henderson 7.5
139 Caelan Porter 7.5
140 Daniel St. George 7.5
141 Conor Canonico 7.5
142 Jack Himelfarb 7.5
143 Jason Boni 7.5
144 Jeremy Evangelista 7.5
145 Matteo Lucatino 7.5
146 Michael Cleary 7.5
147 William Scott 7.5
148 Brady Morin 7.51
149 Jullian Dejesus 7.51
150 Aidan Davenport 7.53
151 Andrew Malkowski 7.53
152 Ben Kalish 7.53
153 Dominic Burack 7.53
154 HAMILTON WRAY 7.53
155 Jack Keyo 7.53
156 Justin Sheeky 7.53
157 Liam Mackessy 7.53
158 Scotty Joseph 7.53
159 Will Winiarski 7.53
160 Jonathan Antin 7.54
161 Casey Lowndes 7.56
162 Scott Sleurs 7.56
163 Forrest Mitterbauer 7.57
164 Max Hopkins 7.58
165 Chester Bouchard 7.59
166 Aidan Quinn 7.6
167 Alex Murdock 7.6
168 Ben Cote 7.6
169 Daniel Noviski 7.6
170 David Marrero 7.6
171 Henry Atlas 7.6
172 Jack Cirelli 7.6
173 Jacob Marsh 7.6
174 Kellen McDonald 7.6
175 Kyle Robertson 7.6
176 Matthew Taylor 7.6
177 Nathan Machado 7.6
178 Nick Luparello 7.6
179 William Benedetti 7.6
180 Zach Kantor 7.6
181 Blake Littlefield 7.62
182 Johnny Payne 7.62
183 Jordan Suarez 7.62
184 Liam Lawlor 7.62
185 Matthew Zunno 7.62
186 Tyler Laureano 7.62
187 Ethan Jeon 7.63
188 HUDSON FULCHER-MELENDY 7.63
189 William CoPenny 7.63
190 Hayden Strout 7.64
191 Luca Simonelli 7.64
192 Michael Beauvil 7.64
193 Dustin Menzel 7.66
194 Hector Sulbaran 7.66
195 Jackson Haefner 7.66
196 Callan Heimroth 7.67
197 Ruben Cortorreal 7.67
198 Brody Victorio 7.68
199 Adam Gonzalez 7.69
200 AIDEN PALEN 7.69
201 Jack Welch 7.69
202 James Termine 7.69
203 Luke McGrath 7.69
204 Noah Johnston 7.69
205 Ryan Connelly 7.69
206 Zachary Voelker 7.69
207 Armani Pimentel 7.7
208 BRADY DAMMLING 7.7
209 CALEB BOYKO 7.7
210 Sean Garvin 7.7
211 Alex Russell 7.71
212 Bryan Hoyt 7.73
213 Neldwy Cruz 7.73
214 Oliver Lawrence 7.74
215 Aaron Vega 7.75
216 Kaiden Morin 7.75
217 Logan Littlefield 7.75
218 Chris Carton 7.76
219 Jack Haley 7.76
220 John Luter III 7.76
221 Logan French 7.76
222 CRISTIAN LOPEZ 7.77
223 Brady Hargraves 7.78
224 Gavin Bisignano 7.78
225 Aaron Fazal 7.8
226 Eli Davis 7.8
227 John Jordan 7.8
228 CHRIS SAPIENZA 7.81
229 James Bruso 7.81
230 Ryan Kane 7.81
231 Anthony Campos Jr 7.82
232 Brady Quirion 7.82
233 Caden Bushey 7.82
234 Jack Boyle 7.82
235 Logan Voltaire 7.82
236 Matteo Giudice 7.83
237 Trent Holst 7.83
238 David Tillotson 7.84
239 George Addona 7.84
240 Jason Martin 7.84
241 Aidan Klocek 7.85
242 Jack Sumner 7.85
243 Gabe Carpenter 7.87
244 Jimmy Lewis 7.88
245 Logan Whitney 7.88
246 William Singer 7.88
247 Antonio Sarchese 7.9
248 Hugh Cyhowski 7.9
249 Joseph Tavares 7.9
250 Penn Jurgensen 7.9
251 Reagan Baumeister 7.9
252 Zyaire Roberts 7.9
253 Danny Armstrong 7.91
254 Jason Gelormini 7.91
255 John David O\'Hara 7.91
256 Riki Ekuni 7.91
257 Jayden Loccisano 7.92
258 Adryan Ureña 7.93
259 Jacob Neumayer 7.94
260 Nick Atwell 7.94
261 Ryan Tejeda 7.94
262 IAN LAWRENCE-RIDDELL 7.95
263 Nathan Khaldarov 7.95
264 Matthew Orena 7.96
265 Nicholaos (Niko) Samaras 7.96
266 Abel Edmundson 7.97
267 Adam Gold 7.97
268 Aidan Walsh 7.97
269 Kyle Wilson 7.97
270 Anderson Clifford 8
271 Connor Mandirola 8
272 Evan Hartman 8
273 JAYDEN CUNNINGHAM 8
274 John Perino 8
275 Matthew Nordstrom 8
276 Patrick Millin 8
277 Thomas Marcotte 8
278 Griffin Gauthier 8.02
279 Ben Branco 8.03
280 Evan Candelario 8.03
281 Gus Merhige 8.03
282 Trey Kuzmeski 8.03
283 Zachary Powell 8.03
284 Dakota Harriman 8.04
285 Mason Pingree 8.04
286 Brayden Soma 8.06
287 Gavin Nichols 8.06
288 Russel Kilkenny 8.07
289 Zachary Niedzwiecki 8.07
290 KAM GAMM 8.08
291 Pedro DelToro 8.09
292 Cole Fredriksen 8.1
293 Evan Pupka 8.1
294 hayden sladewski 8.1
295 Will Bush 8.1
296 Quinn Orvis 8.11
297 Ryan Valente 8.12
298 Jake Walsh 8.13
299 Nick Daley 8.13
300 Angelo Ilarda 8.15
301 Joseph Gourley 8.15
302 Alonso Espinet 8.16
303 Eddie McClung 8.16
304 Joseph Gianakis 8.16
305 Cameron Delmore 8.18
306 Colton Merola 8.18
307 Jacob Falero 8.18
308 Jimmy Walsh 8.18
309 SCOTT BEUOY 8.18
310 AJ Cantore 8.19
311 Josh Sigmon 8.19
312 Thomas Jude 8.19
313 Jonah Clark 8.22
314 Thomas Day 8.22
315 JARED PAONE 8.23
316 Joel Cortorreal 8.25
317 Joseph Calabrese 8.25
318 Jayden Sleeper 8.27
319 Dylan Loccisano 8.28
320 Jonathan Tawa 8.29
321 CJ Clayton 8.3
322 Liam Gorney 8.3
323 Matthew Olynciw 8.3
324 Max Bryan 8.34
325 Landon Fischer 8.35
326 Jack Fontaine 8.36
327 Angel Calderon Jr 8.37
328 Nelson Cruz 8.37
329 Sheamus Mahoney 8.37
330 Michael Manzanillo 8.39
331 Elan Santana 8.4
332 Gavin Rooney 8.4
333 Maddox Legendre 8.4
334 Albert Taveras 8.41
335 Ryan Mullen 8.42
336 Gavin Pettit 8.43
337 Vince Romano 8.45
338 Blake Coy 8.47
339 Dennis Tower 8.5
340 Drew Hopper 8.5
341 Ewan McDonough 8.5
342 Joshua Strauss 8.5
343 Matthew Neville 8.5
344 William Steinmann 8.5
345 Chase McQuade 8.51
346 Alex Munz 8.53
347 Gabe Scribner 8.56
348 Martin Green Jr. 8.57
349 Danny Fowler 8.6
350 Ryan Neville 8.6
351 Geoffrey Laliberte 8.62
352 Santos Simpson 8.69
353 Aidan Clancey 8.7
354 Jesus Chevalier 8.72
355 Luca Faulkner 8.77
356 Justin Engelsen 8.78
357 Will Carroll 8.82
358 Gabriel Gomez 8.88
359 Payton Young 8.88
360 Bradyn Surreira 8.9
361 Barrett Snider 8.94
362 Noah Sanchez 8.97
363 Vikram Gohri 8.97
364 Enzo Furlani 9
365 Sebastian Lopez 9.16
366 Andrew Wagner 9.32
367 Adrian Marcelo Acosta 9.36
368 Dylan Seemangal 9.6
369 Austin Stuart 9.65
370 Jeremy Leone 9.78
371 Cormac Cunningham 10.06
RankProfileNameInfield Velocity
1 Patrick Weaving 90
2 Liam Shea 88
3 Leonardo May 86
4 Vincent Wagoner 85
5 Aaron LaRose 84
6 HAMILTON WRAY 84
7 Elliott Harris 83
8 Marshall Kehlhem 83
9 Tobey Appenzeller 83
10 Evan Dumeny 82
11 Evan Hartman 82
12 Jason Hall 82
13 Joshua Warming 82
14 Kade Marcantonio 82
15 Logan Whitney 82
16 Mitchell Canuel 82
17 Ryan Dennis 82
18 AJ Cantore 81
19 Eric Foster Jr 81
20 Ethan Jeon 81
21 Ethan Stepputtis 81
22 Jeremy Evangelista 81
23 Mykolas Ruth 81
24 Noah Wood 81
25 Ruben Cortorreal 81
26 Blake Littlefield 80
27 Evan Menzel 80
28 JARED PAONE 80
29 Nicholas Roca 80
30 Andrew Malkowski 79
31 Ashton Goodwin 79
32 Johnny Fuller 79
33 Josh Hessel 79
34 Julien Kwasnik 79
35 Matthew Nordstrom 79
36 Nathan Machado 79
37 Randen May 79
38 Robert Bouchard 79
39 Trent Holst 79
40 Ahmo Kolenovic 78
41 Dakota Harriman 78
42 hayden sladewski 78
43 Jack Raymond 78
44 Jason Mitchell Jr. 78
45 Kaden Jones 78
46 Sean Garvin 78
47 Adam Hess 77
48 Alex Russell 77
49 Antonio Sarchese 77
50 Brandon Rossano 77
51 Connor Nichols 77
52 Max Hopkins 77
53 Allen McKay 76
54 Chris Barboza 76
55 Gabe Scribner 76
56 Jack Welch 76
57 Jullian Dejesus 76
58 Luca Simonelli 76
59 Matthew Fiaschetti 76
60 Russel Kilkenny 76
61 Trey Kuzmeski 76
62 Carter Bade 75
63 Dominic Burack 75
64 Henry Sanders 75
65 Jagger James Bruch 75
66 Jason Gelormini 75
67 Jovaniel Cruz 75
68 Luke McGrath 75
69 Matteo Cuccovia 75
70 Michael Kwas 75
71 Topher Reardon 75
72 Tyler Laureano 75
73 Zachary Powell 75
74 Zyaire Roberts 75
75 Brooks Keefe 74
76 Forrest Mitterbauer 74
77 Joseph Tavares 74
78 Liam Pond 74
79 Logan Littlefield 74
80 Matthew Mangini 74
81 Quinn Orvis 74
82 William CoPenny 74
83 William Singer 74
84 Wyatt Daigle 74
85 Alexander Lorenzo 73
86 CALEB BOYKO 73
87 Charles MacElhiney 73
88 Connor Mandirola 73
89 Jack Haley 73
90 Jimmy Lewis 73
91 Caden Bushey 72
92 Chris Carton 72
93 Colton Merola 72
94 CRISTIAN LOPEZ 72
95 Elan Santana 72
96 Eli Davis 72
97 Evan Pupka 72
98 Jack Himelfarb 72
99 Jack Keyo 72
100 Joseph Gourley 72
101 Max Bryan 72
102 Payton Young 72
103 Pedro DelToro 72
104 Riley McDonald 72
105 Ross Lipsky 72
106 Ryan Connelly 72
107 William Steinmann 72
108 Colin Couto 71
109 Conor Canonico 71
110 Drew Hopper 71
111 Ethan Torres 71
112 Gabe Carpenter 71
113 Gabriel Gomez 71
114 Joseph Gianakis 71
115 Liam Gorney 71
116 Luke Rizzi 71
117 Luke Skouras 71
118 Nick Atwell 71
119 Nicholaos (Niko) Samaras 71
120 Ryan Valente 71
121 Ryan Neville 71
122 Will Bush 71
123 William Scott 71
124 Zachary Voelker 71
125 Andrew Sevigny 70
126 Evan Candelario 70
127 Reagan Baumeister 70
128 Aidan Walsh 69
129 Eddie McClung 69
130 Jeremy Leone 69
131 Johnny Payne 69
132 Joseph Calabrese 69
133 Justin Hills 69
134 KAM GAMM 69
135 Matthew Zunno 69
136 Michael Cleary 69
137 Nelson Cruz 69
138 Sam Shelton 69
139 Thomas Marcotte 69
140 Aidan Daugherty 68
141 Austin Stuart 68
142 Brady Shatas 68
143 Enzo Furlani 68
144 Joshua Strauss 68
145 Justin Engelsen 68
146 Kyle Weldon 68
147 Martin Green Jr. 68
148 Will Carroll 68
149 Zane Prescott 68
150 Adam Gonzalez 67
151 Adrian Marcelo Acosta 67
152 Camden Strong 67
153 Jason Boni 67
154 John David O\'Hara 67
155 WILL CAMERON 67
156 Adam Farne 66
157 Angel Calderon Jr 66
158 Bradyn Surreira 66
159 Chase McQuade 66
160 Gavin Pettit 66
161 Jackson Bouchard 66
162 Noah Sanchez 66
163 Ryan Mullen 66
164 Alex Murdock 65
165 Barrett Snider 65
166 Tarren Lawless 65
167 Andrew Wagner 64
168 mark lebo 64
169 Bennett Mcstowe 63
170 Gavin Rooney 63
171 Jack Fontaine 63
172 Gus Merhige 62
173 Ewan McDonough 61
174 Owen Smith 61
175 Sebastian Lopez 61
176 Christopher Barba 60
177 Paulo Gago 60
178 Santos Simpson 60
179 Charlie Nella 59
180 Angelo Ilarda 57
181 Nicholas Curiel 57
182 Michael Manzanillo 55
183 Wes Morneau 55
RankProfileNameOutfield Velocity
1 Colin Larson 89
2 Lane LeClair 87
3 Michael Thompson 87
4 William Coreno Jr. 86
5 Aiden Lopez 84
6 Alex Scaringi 83
7 Nicholas Schmidt 82
8 Ben Cote 82
9 Hector Sulbaran 82
10 Zach Kantor 82
11 Levi Hessel 81
12 Andrew Thompson 81
13 Aaron Vega 81
14 Ryan Landry 81
15 Victor Mijares 81
16 Jeremie Luna 81
17 Jesus Chevalier 80
18 Alonso Espinet 80
19 Hugh Cyhowski 79
20 Hayden Strout 79
21 Alex Dayton 79
22 Aidan Klocek 79
23 Tommy Caporaso 79
24 Armani Pimentel 78
25 Peter Portugues 78
26 Ty Curtis 78
27 Carson Dupras 77
28 CHRIS SAPIENZA 77
29 Jackson Pecor 77
30 Josh Cote 77
31 John Luter III 77
32 Jack Kearney 76
33 William Benedetti 76
34 Cameron Connolly 76
35 Michael Quiros 76
36 RYAN KEATING 76
37 Brady Henderson 75
38 Quinten Monteiro 75
39 Aidan Davenport 75
40 Patrick Sebber 74
41 Tommy Crapanzano 74
42 ANTHONY AURORA 74
43 Ethan Elderkin 74
44 Ben Kalish 74
45 Jack Boyle 73
46 Bryce Payne 73
47 Cody Banning 73
48 Samuel Bay 73
49 Brody Victorio 73
50 Nick Luparello 73
51 Will Winiarski 73
52 Zach Migliore 73
53 Penn Jurgensen 72
54 JACOB FERREIRA 72
55 Lukas Csury 72
56 Liam Lawlor 72
57 Jack Cirelli 72
58 Liam Mackessy 71
59 Logan Voltaire 71
60 Curtis Sullivan 71
61 Conor Toohill 70
62 Justin Sheeky 69
63 Mason Gordon 69
64 Joseph Luparello 69
65 SCOTT BEUOY 69
66 Ben Branco 69
67 Ryan Mayer 68
68 Brayden Soma 68
69 Orion Ruck 68
70 David Marrero 68
71 Ian Heberlig 68
72 Yadhiel Moya 68
73 Jacob Falero 68
74 Jake Walsh 67
75 David Tillotson 67
76 Joel Cortorreal 66
77 Griffin Gauthier 65
78 Matthew Taylor 64
79 John Jordan 64
80 Sebastian Chavez-Perrez 63
81 Henry Solmo-Brewer 63
82 Aidan Suarez 63
83 Abel Edmundson 63
84 Anthony Campos Jr 62
85 Matteo Giudice 58
86 Scotty Joseph 58
87 Jack McManamon 58
88 Cameron Shatas 58
89 Rishon Robenstein 54
90 Albert Taveras 54
RankProfileNamePop Time
1 Cesar Gonzalez 1.91
2 Christopher Leggett 1.94
3 HUDSON FULCHER-MELENDY 1.96
4 Kaiden Morin 1.97
5 Jayden Tolentino 1.97
6 Cal Chance 2
7 Matthew Tranquillo 2
8 Scott Sleurs 2.01
9 Alex Baeta 2.06
10 Gavin Nichols 2.06
11 Luis Garcia 2.09
12 George Addona 2.09
13 Jack Caron 2.1
14 Oliver Lawrence 2.12
15 CJ Clayton 2.12
16 Luca Faulkner 2.12
17 BRADY DAMMLING 2.13
18 Brady Hargraves 2.14
19 Adam Gold 2.15
20 James Termine 2.15
21 Kyle Coy 2.15
22 Ryan Curry 2.15
23 Cameron Dorr 2.15
24 AIDEN PALEN 2.16
25 Gavin Bisignano 2.18
26 Neldwy Cruz 2.18
27 Brian Gonzalez 2.19
28 Dustin Menzel 2.19
29 Skyler Hills 2.19
30 Adryan Ureña 2.19
31 Michael Beauvil 2.19
32 Isaiah Figueroa 2.19
33 Blake Coy 2.2
34 Ellis Columber 2.2
35 JAYDEN CUNNINGHAM 2.2
36 Jerusalen Leon 2.21
37 Bryan Hoyt 2.21
38 Josh Sigmon 2.22
39 Caelan Porter 2.22
40 Michael Pierce 2.25
41 Henry Atlas 2.25
42 Jayden Sleeper 2.25
43 Jonah Clark 2.25
44 Andrew Dempsey 2.25
45 Danny Fowler 2.26
46 Michael Davide Jr. 2.27
47 Matthew Olynciw 2.28
48 Noah Johnston 2.28
49 Thomas Day 2.28
50 Jimmy Walsh 2.28
51 Vince Romano 2.28
52 Cole Fredriksen 2.31
53 Jonathan Tawa 2.31
54 Brady Quirion 2.31
55 Jackson Haefner 2.31
56 Zachary Niedzwiecki 2.32
57 Chester Bouchard 2.32
58 Ryan Tejeda 2.32
59 Patrick Millin 2.32
60 Jonathan Antin 2.33
61 Sheamus Mahoney 2.33
62 Riki Ekuni 2.33
63 Daniel Noviski 2.34
64 Matthew Neville 2.34
65 Dylan Loccisano 2.35
66 Cameron Delmore 2.38
67 Aidan Quinn 2.38
68 Nathan Khaldarov 2.39
69 Jacob Marsh 2.41
70 Dylan Seemangal 2.44
71 Vikram Gohri 2.47
72 Zayden Crouse 2.47
73 Matteo Lucatino 2.53
74 Kyle Robertson 2.54
75 Jason Martin 2.56
76 James Bruso 2.59
77 Landon Fischer 2.62
78 Sean Marinelli 2.69
79 Jake Florence 2.73
80 Brody Harris 52
81 Aaron Fazal 67
82 Andrew Malkowski 95.3
RankProfileNameCatcher Velocity
1 Jayden Tolentino 86
2 CJ Clayton 82
3 Cesar Gonzalez 82
4 Ryan Flynn 78
5 JAYDEN CUNNINGHAM 77
6 Thomas Day 77
7 Christopher Leggett 77
8 Ryan Curry 76
9 Kaiden Morin 76
10 AIDEN PALEN 75
11 Jerusalen Leon 75
12 Luis Garcia 75
13 HUDSON FULCHER-MELENDY 74
14 Jonathan Tawa 74
15 Bryan Hoyt 74
16 Michael Davide Jr. 74
17 Matthew Tranquillo 73
18 Chester Bouchard 73
19 Scott Sleurs 73
20 Cal Chance 72
21 Gavin Nichols 72
22 Kyle Coy 72
23 Jack Caron 72
24 Daniel Noviski 71
25 Gavin Bisignano 71
26 Ellis Columber 71
27 Dustin Menzel 71
28 Michael Beauvil 71
29 Adryan Ureña 70
30 Zayden Crouse 69
31 Oliver Lawrence 69
32 Adam Gold 69
33 Aidan Quinn 69
34 Alex Baeta 69
35 Caelan Porter 69
36 Vince Romano 68
37 Neldwy Cruz 68
38 Brady Hargraves 68
39 George Addona 67
40 Isaiah Figueroa 67
41 James Termine 67
42 Brian Gonzalez 67
43 Luca Faulkner 67
44 Jayden Sleeper 67
45 Cameron Dorr 67
46 Zachary Niedzwiecki 66
47 Jacob Marsh 66
48 Skyler Hills 65
49 Danny Fowler 65
50 BRADY DAMMLING 65
51 Noah Johnston 65
52 Dylan Loccisano 65
53 Henry Atlas 65
54 Nathan Khaldarov 65
55 Matthew Neville 65
56 Michael Pierce 65
57 Jonah Clark 64
58 Jackson Haefner 64
59 Sheamus Mahoney 64
60 Blake Coy 64
61 Patrick Millin 64
62 Matteo Lucatino 64
63 Jimmy Walsh 64
64 Josh Sigmon 64
65 Matthew Olynciw 63
66 Cole Fredriksen 63
67 Ryan Tejeda 63
68 Riki Ekuni 63
69 Vikram Gohri 62
70 Brady Quirion 61
71 Dylan Seemangal 61
72 Andrew Dempsey 61
73 Cameron Delmore 61
74 Kyle Robertson 61
75 Landon Fischer 61
76 Jason Martin 61
77 Jonathan Antin 60
78 Sean Marinelli 59
79 Jake Florence 58
80 Liam Thompson 57
81 James Bruso 54
82 Brody Harris 2.83
83 Aaron Fazal 2.1
RankProfileNameExit Velocity Peak
1 Andrew Thompson 105.3
2 Colin Larson 101.8
3 Michael Thompson 100.5
4 Jack Boyle 100.4
5 Topher Reardon 100.2
6 Michael Quiros 98.1
7 AIDEN PALEN 96.4
8 CJ Clayton 96
9 CALEB BOYKO 95.7
10 Jason Mitchell Jr. 95.4
11 Liam Shea 95.4
12 Logan Whitney 95.4
13 Luis Garcia 94.9
14 Tobey Appenzeller 94.9
15 Chester Bouchard 94.2
16 Jayden Tolentino 94.1
17 Evan Menzel 93.8
18 Christopher Leggett 93.5
19 Jeremy Evangelista 93.4
20 Michael Pierce 92.9
21 Adam Hess 92.8
22 Andrew Malkowski 92.8
23 Victor Mijares 92.8
24 Sean Egan 92.6
25 Patrick Weaving 92.4
26 HUDSON FULCHER-MELENDY 91.9
27 Evan Dumeny 91.7
28 Levi Hessel 91.7
29 Nicholas Roca 91.6
30 Jimmy Walsh 91.5
31 Joshua Strauss 91.5
32 Robert Bouchard 91.4
33 Joseph Gianakis 91.2
34 Tyler Laureano 91.2
35 Aiden Lopez 91.1
36 Johnny Fuller 91.1
37 Gabe Knudsen 90.9
38 CHRIS SAPIENZA 90.6
39 Henry Sanders 90.6
40 Liam Pond 90.6
41 Kade Marcantonio 90.2
42 Hayden Strout 90.1
43 Dustin Menzel 90
44 Thomas Marcotte 90
45 Aaron Vega 89.8
46 RYAN KEATING 89.8
47 Jack Kearney 89.7
48 William Coreno Jr. 89.6
49 Michael Davide Jr. 89.5
50 Randen May 89.5
51 Isaiah Figueroa 89.4
52 Will Bush 89.3
53 Cal Chance 89.2
54 Alonso Espinet 89
55 Cesar Gonzalez 89
56 Charles MacElhiney 89
57 Joseph Luparello 89
58 Kyle Weldon 88.8
59 Ryan Flynn 88.8
60 Andrew Dempsey 88.7
61 Cameron Dorr 88.6
62 Armani Pimentel 88.5
63 AJ Cantore 88.3
64 Tommy Caporaso 88.3
65 hayden sladewski 88.2
66 Kaiden Morin 88.2
67 Logan Voltaire 88.2
68 Drew Hopper 88.1
69 Jonah Clark 88.1
70 Joshua Warming 88.1
71 HAMILTON WRAY 87.9
72 Caden Bushey 87.8
73 Carson Dupras 87.8
74 Eric Foster Jr 87.8
75 Hugh Cyhowski 87.7
76 Jack Welch 87.7
77 Lane LeClair 87.7
78 Kaden Jones 87.6
79 Elan Santana 87.4
80 Forrest Mitterbauer 87.4
81 Elliott Harris 87.1
82 Zachary Niedzwiecki 87
83 Evan Hartman 86.9
84 Trent Holst 86.9
85 JARED PAONE 86.8
86 Ryan Connelly 86.7
87 Bradyn Surreira 86.6
88 Gabriel Gomez 86.6
89 Max Hopkins 86.6
90 Casey Lowndes 86.5
91 Skyler Hills 86.3
92 Wyatt Daigle 86.3
93 Cameron Connolly 86.2
94 Alex Russell 86.1
95 George Addona 86.1
96 Leonardo May 86.1
97 Nicholas Schmidt 86.1
98 Brandon Rossano 86
99 Ethan Stepputtis 86
100 Ryan Dennis 86
101 Jayden Sleeper 85.9
102 Hector Sulbaran 85.8
103 Trey Kuzmeski 85.8
104 Zachary Voelker 85.8
105 Matthew Nordstrom 85.3
106 Antonio Sarchese 85.2
107 mark lebo 85.2
108 Sean Garvin 85.2
109 William Steinmann 85.2
110 Aidan Davenport 85.1
111 Marshall Kehlhem 85.1
112 Oliver Lawrence 85.1
113 Aidan Quinn 85
114 Connor Mandirola 85
115 Daniel Noviski 85
116 Dominic Burack 85
117 Mitchell Canuel 85
118 Ryan Curry 85
119 Zyaire Roberts 85
120 Brian Gonzalez 84.8
121 James Termine 84.7
122 Matthew Mangini 84.6
123 Jack Keyo 84.3
124 Jagger James Bruch 84.3
125 Josh Hessel 84.3
126 William Singer 84.3
127 Bryan Hoyt 84.2
128 Mykolas Ruth 84.2
129 Peter Portugues 84.1
130 Jack Caron 83.9
131 Will Winiarski 83.7
132 Matteo Cuccovia 83.6
133 Gabe Scribner 83.5
134 Rishon Robenstein 83.5
135 Jack Haley 83.4
136 Matthew Fiaschetti 83.3
137 Payton Young 83.3
138 Aaron Fazal 83.2
139 Angel Calderon Jr 83.2
140 Luca Faulkner 83.2
141 Riley McDonald 83.1
142 Ryan Landry 83.1
143 Adam Gold 83
144 Ashton Goodwin 83
145 Brody Victorio 83
146 David Marrero 83
147 Jesus Chevalier 83
148 Kyle Coy 83
149 Riki Ekuni 83
150 William CoPenny 82.9
151 Adryan Ureña 82.8
152 Gavin Nichols 82.7
153 Aidan Klocek 82.6
154 Jeremie Luna 82.6
155 Ryan Neville 82.6
156 Alex Baeta 82.5
157 Jack Raymond 82.3
158 Blake Littlefield 82.1
159 Zayden Crouse 82.1
160 Evan Pupka 82
161 Jason Hall 82
162 Scott Sleurs 82
163 ANTHONY AURORA 81.8
164 Barrett Snider 81.7
165 Aidan Daugherty 81.6
166 Camden Strong 81.6
167 Henry Solmo-Brewer 81.5
168 James Bruso 81.5
169 Kyle Wilson 81.5
170 Logan Littlefield 81.5
171 BRADY DAMMLING 81.4
172 Brooks Keefe 81.4
173 Max Bryan 81.4
174 Matthew Neville 81.2
175 Zach Kantor 81.1
176 Alex Dayton 81
177 Austin Stuart 81
178 Jackson Bouchard 81
179 Luke Rizzi 81
180 Alex Scaringi 80.9
181 KAM GAMM 80.9
182 Nathan Machado 80.8
183 Ross Lipsky 80.8
184 William Benedetti 80.6
185 Brady Hargraves 80.5
186 JACOB FERREIRA 80.5
187 Ethan Torres 80.4
188 JAYDEN CUNNINGHAM 80.3
189 Mason Gordon 80.3
190 Josh Cote 80.2
191 Joseph Gourley 80.1
192 Eli Davis 80
193 Gavin Pettit 80
194 John Luter III 80
195 Caelan Porter 79.9
196 Jack Cirelli 79.9
197 Matthew Taylor 79.9
198 Michael Kwas 79.9
199 Anthony Campos Jr 79.8
200 Evan Candelario 79.6
201 Kellen McDonald 79.6
202 Joseph Calabrese 79.5
203 Eddie McClung 79.4
204 Chris Carton 79.3
205 Sam Shelton 79.3
206 Cody Banning 79.2
207 Bryce Payne 79.1
208 Alexander Lorenzo 79
209 Ethan Jeon 79
210 Evan Aubin 79
211 Jayden Loccisano 79
212 Liam Mackessy 79
213 Luke McGrath 79
214 Luke Skouras 78.9
215 WILL CAMERON 78.8
216 Jack Fontaine 78.7
217 Andrew Sevigny 78.5
218 Conor Canonico 78.5
219 Dakota Harriman 78.5
220 Jonathan Tawa 78.5
221 SCOTT BEUOY 78.5
222 Jovaniel Cruz 78.4
223 Alex Murdock 78.3
224 Joel Cortorreal 78.3
225 Justin Engelsen 78.3
226 Michael Beauvil 78.3
227 Colton Merola 78.2
228 William Scott 78.2
229 Brady Henderson 78.1
230 Joseph Tavares 78.1
231 Patrick Millin 78.1
232 Scotty Joseph 78.1
233 Vincent Wagoner 78
234 Corey Martin 77.9
235 Tommy Crapanzano 77.9
236 Jack Sumner 77.8
237 Noah Brewer 77.8
238 Aaron LaRose 77.7
239 Brady Quirion 77.7
240 John David O\'Hara 77.7
241 Ethan Elderkin 77.6
242 Jullian Dejesus 77.6
243 Gus Merhige 77.5
244 Quinten Monteiro 77.5
245 Zach Migliore 77.5
246 Aidan Walsh 77.3
247 Jeremy Leone 77.3
248 Vikram Gohri 77.3
249 Connor Nichols 77.2
250 Ian Heberlig 77.1
251 Jimmy Lewis 77.1
252 Ahmo Kolenovic 77
253 Jackson Pecor 77
254 Julien Kwasnik 77
255 Quinn Orvis 77
256 Chase McQuade 76.9
257 Reagan Baumeister 76.9
258 Adam Farne 76.7
259 Ewan McDonough 76.7
260 Sheamus Mahoney 76.6
261 Adam Gonzalez 76.5
262 Josh Sigmon 76.5
263 Nick Atwell 76.5
264 Zane Prescott 76.5
265 Allen McKay 76.4
266 Vince Romano 76.4
267 Ben Branco 76.3
268 Russel Kilkenny 76.3
269 Ben Cote 76.2
270 Landon Fischer 76.2
271 Yadhiel Moya 76.2
272 Aidan Suarez 76
273 Angelo Ilarda 76
274 Kyle Robertson 76
275 Luca Simonelli 76
276 Liam Gorney 75.8
277 Carter Bade 75.6
278 Thomas Day 75.5
279 Cole Fredriksen 75.4
280 Danny Fowler 75.4
281 Neldwy Cruz 75.4
282 Noah Wood 75.3
283 Penn Jurgensen 75
284 Jack Himelfarb 74.9
285 Callan Heimroth 74.8
286 Ellis Columber 74.8
287 Jason Martin 74.8
288 Orion Ruck 74.8
289 Ty Curtis 74.8
290 Cameron Delmore 74.6
291 Nick Luparello 74.6
292 Jason Boni 74.5
293 Jackson Haefner 74.4
294 Jacob Marsh 74.4
295 Dylan Seemangal 74.3
296 David Tillotson 74.1
297 Abel Edmundson 74
298 CRISTIAN LOPEZ 74
299 Enzo Furlani 74
300 Jason Gelormini 74
301 Justin Hills 74
302 Henry Atlas 73.8
303 Curtis Sullivan 73.7
304 Matthew Tranquillo 73.6
305 Christopher Barba 73.5
306 Michael Cleary 73.4
307 Nicholaos (Niko) Samaras 73.2
308 Will Carroll 73.1
309 Jerusalen Leon 73
310 Zachary Powell 72.5
311 Chris Barboza 72.4
312 Jordan Suarez 72.3
313 Justin Sheeky 72.2
314 Matteo Giudice 72.2
315 Matthew Zunno 72.1
316 Patrick Sebber 72.1
317 Nathan Khaldarov 72
318 Lukas Csury 71.9
319 Ryan Mayer 71.8
320 Brady Shatas 71.7
321 Michael Manzanillo 71.3
322 Gabe Carpenter 71
323 Colin Couto 70.8
324 John Jordan 70.8
325 Johnny Payne 70.6
326 Matthew Olynciw 70.4
327 Jonathan Antin 70.2
328 Dylan Loccisano 70
329 Griffin Gauthier 70
330 Liam Lawlor 69.4
331 Tarren Lawless 69.4
332 Martin Green Jr. 69.2
333 Noah Johnston 69.2
334 Jacob Falero 69
335 Noah Sanchez 68.8
336 Charlie Nella 68.7
337 Ryan Valente 68.6
338 Gavin Bisignano 68.4
339 Matteo Lucatino 68.3
340 Jack McManamon 68.2
341 Sebastian Lopez 68
342 Owen Smith 67.6
343 Adrian Marcelo Acosta 67.4
344 Ben Kalish 67.4
345 Conor Toohill 67.4
346 Jake Walsh 67.4
347 Brayden Soma 67.1
348 Gavin Rooney 66.9
349 Albert Taveras 66.6
350 Ryan Tejeda 66.4
351 Sebastian Chavez-Perrez 66.4
352 Bennett Mcstowe 66
353 Pedro DelToro 66
354 Nicholas Curiel 65
355 Wes Morneau 64.6
356 Ruben Cortorreal 64.4
357 Jake Florence 62.8
358 Cormac Cunningham 62.1
359 Santos Simpson 62
360 Ryan Mullen 61
361 Sean Marinelli 59.9
362 Cameron Shatas 59.2
363 Paulo Gago 58
364 Nelson Cruz 57.1
365 Brody Harris 56.5
366 Liam Thompson 55.5
367 Samuel Bay 52
RankProfileNameDistance – Avg
1 Colin Larson 387
2 Michael Quiros 381.4
3 Michael Thompson 373.2
4 Andrew Thompson 372.5
5 Jack Boyle 366.6
6 Dustin Menzel 359.4
7 Topher Reardon 357.5
8 Evan Menzel 342.4
9 Jayden Tolentino 341.2
10 Robert Bouchard 340.8
11 Dominic Burack 339.7
12 Evan Dumeny 336.6
13 CALEB BOYKO 335.8
14 HAMILTON WRAY 333.3
15 Liam Pond 332
16 Trey Kuzmeski 329
17 AIDEN PALEN 326.6
18 Patrick Weaving 322.1
19 Chester Bouchard 319.1
20 Cesar Gonzalez 317.9
21 Leonardo May 312.9
22 Jack Caron 311.9
23 Henry Sanders 310.8
24 Matthew Nordstrom 310.1
25 CJ Clayton 309.9
26 Cameron Dorr 309.8
27 Jack Welch 309.2
28 Will Winiarski 305.5
29 Charles MacElhiney 302
30 Kade Marcantonio 300.5
31 Victor Mijares 298.6
32 Tyler Laureano 298.3
33 Jason Mitchell Jr. 292.6
34 Hector Sulbaran 291.7
35 Brady Hargraves 290.7
36 Jesus Chevalier 290.6
37 Aidan Quinn 290.2
38 William Steinmann 290.1
39 Daniel Noviski 289.4
40 Aidan Daugherty 289.1
41 Kaden Jones 288.9
42 Levi Hessel 288
43 Dakota Harriman 287.6
44 HUDSON FULCHER-MELENDY 286.9
45 Cal Chance 286.8
46 Liam Shea 286.5
47 Lane LeClair 286.2
48 AJ Cantore 286.1
49 Jack Raymond 285.1
50 Matteo Cuccovia 285
51 Michael Pierce 283.5
52 Michael Davide Jr. 282.6
53 Gabriel Gomez 282.1
54 Ryan Flynn 282
55 Logan Voltaire 281.7
56 Ethan Torres 281.3
57 JARED PAONE 281
58 Logan Whitney 280.6
59 Hayden Strout 279.9
60 hayden sladewski 279.7
61 Johnny Fuller 279.3
62 Matthew Neville 277.9
63 Zachary Voelker 277.7
64 Tommy Caporaso 277.6
65 Gabe Scribner 277.3
66 Alex Baeta 276.4
67 Armani Pimentel 276.1
68 Drew Hopper 275.5
69 George Addona 275
70 Sean Garvin 274.8
71 Jimmy Lewis 274.4
72 Adam Hess 273.9
73 Carter Bade 273.3
74 Connor Mandirola 273.2
75 Adam Gonzalez 272.7
76 Casey Lowndes 272.6
77 Jack Kearney 272.4
78 Bradyn Surreira 272
79 Sam Shelton 271.8
80 Jeremy Leone 271
81 Vince Romano 270.5
82 Aiden Lopez 270.4
83 William Singer 269.1
84 Brian Gonzalez 269
85 Christopher Leggett 268.8
86 Gavin Nichols 268.8
87 Luke McGrath 268
88 Kyle Wilson 267.9
89 Joseph Luparello 267.2
90 Sean Egan 267
91 Wyatt Daigle 266.8
92 Thomas Marcotte 265.6
93 Jeremy Evangelista 265.2
94 Logan Littlefield 264.6
95 Gabe Knudsen 264.4
96 Joshua Warming 264.3
97 Zach Migliore 263.5
98 Cameron Connolly 262.9
99 Adryan Ureña 262.7
100 Camden Strong 262.6
101 Jack Sumner 262.6
102 Caden Bushey 262.2
103 Joseph Gourley 262.1
104 Evan Hartman 262
105 Jason Martin 261.6
106 Eric Foster Jr 261.3
107 Kyle Coy 261
108 Jeremie Luna 260.2
109 Mason Gordon 260
110 Chase McQuade 259.9
111 Jimmy Walsh 259.5
112 JAYDEN CUNNINGHAM 259.2
113 Kyle Weldon 259.2
114 Ryan Connelly 258.6
115 Thomas Day 258.3
116 Elan Santana 258.1
117 Skyler Hills 257.9
118 Nathan Machado 257.7
119 Jonah Clark 257
120 Isaiah Figueroa 255.9
121 Tobey Appenzeller 255.5
122 William Coreno Jr. 255.5
123 Ryan Neville 254.9
124 Adam Gold 253.5
125 Jason Hall 253.3
126 Jovaniel Cruz 252.3
127 Luca Faulkner 251.8
128 Matthew Fiaschetti 250.9
129 Peter Portugues 250.7
130 SCOTT BEUOY 250.4
131 Eddie McClung 250
132 Carson Dupras 249.7
133 Jullian Dejesus 249.6
134 Jayden Loccisano 248.8
135 Scotty Joseph 248.7
136 Nicholas Schmidt 247.8
137 Gus Merhige 247.6
138 Noah Brewer 247.1
139 Riley McDonald 247.1
140 Josh Hessel 246.7
141 Michael Manzanillo 245.8
142 Sheamus Mahoney 245.8
143 Neldwy Cruz 245.3
144 Justin Engelsen 244.4
145 Barrett Snider 244.3
146 Alex Dayton 244
147 Liam Mackessy 244
148 BRADY DAMMLING 243.3
149 Cameron Delmore 242.6
150 JACOB FERREIRA 242.4
151 Jagger James Bruch 241.6
152 Forrest Mitterbauer 241.2
153 Ryan Landry 241.1
154 Nicholas Roca 240.7
155 Aidan Klocek 240.2
156 Matthew Mangini 239.8
157 James Bruso 239.5
158 Michael Cleary 239.4
159 Antonio Sarchese 238.6
160 Oliver Lawrence 238.3
161 Aaron Fazal 238.2
162 Zyaire Roberts 237.5
163 Ethan Jeon 237.1
164 Jack Haley 237.1
165 Henry Atlas 236.8
166 Will Bush 236.3
167 Cole Fredriksen 236.2
168 RYAN KEATING 236.1
169 Alex Scaringi 235.6
170 Marshall Kehlhem 235.6
171 Chris Carton 234.9
172 Aaron LaRose 234.7
173 Joshua Strauss 234
174 Conor Canonico 233.8
175 Mykolas Ruth 233.7
176 Zayden Crouse 233.5
177 Mitchell Canuel 233.3
178 Alonso Espinet 233.2
179 Ethan Elderkin 232.9
180 Colton Merola 232.2
181 Max Bryan 232.2
182 Michael Kwas 232.2
183 Danny Fowler 231.5
184 Jack Cirelli 230.8
185 Josh Sigmon 230.3
186 Elliott Harris 230.2
187 Brady Henderson 229.9
188 Joseph Tavares 229.1
189 Henry Solmo-Brewer 228.5
190 Ellis Columber 227.7
191 Kellen McDonald 227.7
192 Russel Kilkenny 227
193 Jack Keyo 226.4
194 Enzo Furlani 225.9
195 Vikram Gohri 224.4
196 Kaiden Morin 223.8
197 Randen May 223.7
198 John Jordan 223.6
199 Luke Rizzi 223.3
200 Julien Kwasnik 223
201 Nick Atwell 222.3
202 William Benedetti 222.1
203 Jonathan Tawa 221.9
204 Jerusalen Leon 221.7
205 Patrick Sebber 221.3
206 Bryan Hoyt 221.1
207 Joseph Gianakis 220.6
208 Ian Heberlig 220.5
209 David Tillotson 220.2
210 Noah Wood 220.1
211 Ben Cote 218.9
212 Brady Quirion 218.9
213 Hugh Cyhowski 218.7
214 Jack Himelfarb 218.7
215 Jack Fontaine 218.5
216 Reagan Baumeister 218.1
217 Brayden Soma 217.7
218 Joseph Calabrese 217.7
219 mark lebo 217.7
220 Ben Branco 216.8
221 Allen McKay 216.7
222 Andrew Sevigny 216.5
223 Ethan Stepputtis 216.4
224 Aidan Walsh 215.9
225 Ross Lipsky 215.9
226 Matthew Tranquillo 213.8
227 Matteo Giudice 213.5
228 Conor Toohill 213.4
229 Dylan Seemangal 211.4
230 Bryce Payne 211.3
231 Liam Lawlor 211.3
232 Matthew Olynciw 211.2
233 Andrew Dempsey 209.2
234 Liam Gorney 209.1
235 Michael Beauvil 209.1
236 Ty Curtis 208.5
237 Matteo Lucatino 208.4
238 Zachary Powell 208.3
239 Jordan Suarez 208.2
240 Martin Green Jr. 208.2
241 Nick Luparello 208.1
242 James Termine 206.9
243 Gavin Bisignano 206.3
244 Jacob Falero 205.7
245 Justin Hills 205.7
246 Evan Candelario 205.1
247 Corey Martin 204.4
248 Angel Calderon Jr 204.3
249 Lukas Csury 203.1
250 ANTHONY AURORA 202.3
251 Aaron Vega 202.1
252 Josh Cote 201.8
253 Zach Kantor 200.8
254 Zachary Niedzwiecki 200.8
255 Ben Kalish 200.6
256 Matthew Zunno 200.4
257 Alex Russell 199.3
258 William Scott 198.3
259 Justin Sheeky 197.7
260 Nicholaos (Niko) Samaras 197.2
261 Tommy Crapanzano 196.6
262 CRISTIAN LOPEZ 196
263 Penn Jurgensen 196
264 Brody Victorio 195.9
265 William CoPenny 195.9
266 Jake Walsh 194
267 Cody Banning 193.5
268 Dylan Loccisano 193.4
269 Matthew Taylor 193.3
270 Landon Fischer 192.1
271 Adrian Marcelo Acosta 192
272 Jason Boni 191.8
273 Alex Murdock 191.6
274 Angelo Ilarda 191.6
275 Noah Sanchez 190.5
276 Tarren Lawless 189.2
277 Brooks Keefe 189
278 Christopher Barba 188.5
279 Quinten Monteiro 188.1
280 Luis Garcia 187.3
281 Ewan McDonough 187.2
282 David Marrero 185.7
283 Santos Simpson 185.7
284 Sebastian Lopez 184.1
285 Joel Cortorreal 181.4
286 John David O\'Hara 181
287 Caelan Porter 180.5
288 Aidan Suarez 180.2
289 Sebastian Chavez-Perrez 179.9
290 Cormac Cunningham 179.3
291 Will Carroll 178.5
292 Jackson Bouchard 178
293 Adam Farne 172.9
294 Jason Gelormini 172.9
295 WILL CAMERON 172.7
296 Luke Skouras 172.2
297 Ryan Mayer 172
298 CHRIS SAPIENZA 171
299 KAM GAMM 168.6
300 Riki Ekuni 168.6
301 Orion Ruck 168.5
302 Aidan Davenport 164.7
303 Blake Littlefield 164.3
304 Nelson Cruz 162.8
305 Kyle Robertson 161.4
306 Connor Nichols 160.6
307 Max Hopkins 160.3
308 Curtis Sullivan 159.9
309 Callan Heimroth 158.9
310 Patrick Millin 158.6
311 Colin Couto 158.4
312 Noah Johnston 155.7
313 Johnny Payne 154.9
314 Owen Smith 154
315 Chris Barboza 153.7
316 Ryan Tejeda 152.6
317 Anthony Campos Jr 150.7
318 Ruben Cortorreal 147.4
319 Jacob Marsh 147.3
320 Samuel Bay 146.4
321 Bennett Mcstowe 143.4
322 Brody Harris 140.9
323 Jonathan Antin 137.1
324 Gavin Rooney 134.1
325 Pedro DelToro 132.6
326 Jackson Haefner 128.4
327 Yadhiel Moya 127.3
328 Albert Taveras 117.1
329 Wes Morneau 113.3
330 Jayden Sleeper 112.6
331 Jack McManamon 107.5
332 Liam Thompson 102.4
333 Paulo Gago 98.2
334 Payton Young 97.7
335 Cameron Shatas 95
336 Brady Shatas 89.1
337 Sean Marinelli 84.5
338 Ryan Valente 75.1
339 Charlie Nella 71.9
340 Zane Prescott 63.2
341 Jake Florence 60.3
342 Rishon Robenstein 54.6
343 Trent Holst 49.9
RankProfileNameExit Velo – Avg
1 Topher Reardon 99.1
2 Colin Larson 98.8
3 Michael Quiros 97.6
4 Jack Boyle 97.1
5 Michael Thompson 95.5
6 CJ Clayton 95.4
7 Andrew Thompson 95
8 AIDEN PALEN 94.7
9 Liam Shea 94.7
10 Jayden Tolentino 92.9
11 CALEB BOYKO 91
12 Chester Bouchard 90.7
13 Evan Menzel 90.7
14 Christopher Leggett 90.4
15 Sean Egan 90.4
16 Luis Garcia 90.3
17 Victor Mijares 89.7
18 Patrick Weaving 89.6
19 Levi Hessel 89.5
20 Jason Mitchell Jr. 89.4
21 Johnny Fuller 89.4
22 Tobey Appenzeller 89.4
23 Liam Pond 89.2
24 Joshua Strauss 89
25 Henry Sanders 88.9
26 CHRIS SAPIENZA 88.7
27 Michael Pierce 88.2
28 Jack Kearney 87.7
29 Armani Pimentel 87.5
30 Nicholas Roca 87.4
31 Gabe Knudsen 87.1
32 Cameron Dorr 86.9
33 Alonso Espinet 86.8
34 Dustin Menzel 86.7
35 hayden sladewski 86.7
36 Hayden Strout 86.6
37 Jimmy Walsh 86.6
38 Michael Davide Jr. 86.6
39 Robert Bouchard 86.6
40 Aiden Lopez 86.5
41 Charles MacElhiney 86.5
42 Logan Whitney 86.4
43 Ryan Flynn 86.2
44 HAMILTON WRAY 86.1
45 Lane LeClair 86
46 Tyler Laureano 86
47 Carson Dupras 85.9
48 HUDSON FULCHER-MELENDY 85.9
49 Joseph Gianakis 85.8
50 Cal Chance 85.7
51 Cesar Gonzalez 85.7
52 AJ Cantore 85.4
53 Ryan Connelly 85.1
54 Tommy Caporaso 85.1
55 Jack Welch 85
56 Kaiden Morin 85
57 William Coreno Jr. 85
58 Kade Marcantonio 84.7
59 Elliott Harris 84.5
60 Oliver Lawrence 84.5
61 Wyatt Daigle 84.3
62 Kyle Weldon 84.1
63 Bradyn Surreira 83.9
64 Brandon Rossano 83.7
65 Kaden Jones 83.6
66 Jack Caron 83.5
67 Matthew Mangini 83.4
68 Andrew Dempsey 83.3
69 Caden Bushey 83.3
70 Adam Hess 83.2
71 Hector Sulbaran 83.1
72 Isaiah Figueroa 83.1
73 Jack Haley 83.1
74 Marshall Kehlhem 83.1
75 Trey Kuzmeski 83.1
76 Aidan Davenport 82.8
77 Elan Santana 82.8
78 Jayden Sleeper 82.8
79 Joseph Luparello 82.8
80 Matteo Cuccovia 82.8
81 Zachary Voelker 82.8
82 Angel Calderon Jr 82.7
83 Eric Foster Jr 82.7
84 Skyler Hills 82.7
85 Brian Gonzalez 82.5
86 Joshua Warming 82.5
87 Thomas Marcotte 82.5
88 Will Winiarski 82.5
89 JARED PAONE 82.2
90 Nicholas Schmidt 82.2
91 Max Hopkins 82.1
92 Forrest Mitterbauer 82
93 Ethan Stepputtis 81.9
94 Luca Faulkner 81.9
95 Alex Russell 81.8
96 Bryan Hoyt 81.8
97 Connor Mandirola 81.8
98 Gabe Scribner 81.8
99 Jeremie Luna 81.7
100 William Singer 81.6
101 Zyaire Roberts 81.6
102 Evan Hartman 81.4
103 Jagger James Bruch 81.3
104 Matthew Nordstrom 81.3
105 Payton Young 81.3
106 Randen May 81.3
107 Trent Holst 81.3
108 Max Bryan 81.1
109 Peter Portugues 81.1
110 Riley McDonald 81.1
111 Matthew Neville 81
112 Aidan Quinn 80.9
113 Barrett Snider 80.9
114 William Steinmann 80.8
115 Connor Nichols 80.7
116 Ryan Landry 80.6
117 mark lebo 80.5
118 Jack Raymond 80.4
119 RYAN KEATING 80.4
120 Casey Lowndes 80.3
121 Drew Hopper 80.3
122 Jonah Clark 80.2
123 Kyle Wilson 80.2
124 William Benedetti 80.2
125 Mitchell Canuel 80.1
126 Alex Baeta 80
127 Camden Strong 80
128 Josh Cote 80
129 Dominic Burack 79.7
130 George Addona 79.7
131 Leonardo May 79.7
132 Logan Voltaire 79.7
133 Will Bush 79.7
134 Alex Dayton 79.5
135 Alex Scaringi 79.4
136 Logan Littlefield 79.4
137 Daniel Noviski 79.3
138 Gavin Nichols 79.3
139 Jovaniel Cruz 79.3
140 Zachary Niedzwiecki 79.3
141 Gabriel Gomez 79.1
142 Jason Hall 79.1
143 Cameron Connolly 79
144 Ethan Torres 79
145 James Bruso 78.9
146 Michael Kwas 78.9
147 Josh Hessel 78.8
148 Sean Garvin 78.7
149 ANTHONY AURORA 78.6
150 BRADY DAMMLING 78.5
151 Brody Victorio 78.4
152 Kyle Coy 78.4
153 Ryan Curry 78.4
154 Antonio Sarchese 78.3
155 Brooks Keefe 78.3
156 Yadhiel Moya 78.3
157 Dakota Harriman 78
158 Mason Gordon 78
159 William CoPenny 78
160 Kellen McDonald 77.9
161 Adryan Ureña 77.8
162 Mykolas Ruth 77.8
163 Jack Sumner 77.7
164 Cody Banning 77.4
165 Ethan Jeon 77.4
166 JAYDEN CUNNINGHAM 77.3
167 Matthew Fiaschetti 77.3
168 Scott Sleurs 77.3
169 Jesus Chevalier 77.2
170 Michael Beauvil 77.2
171 Jack Keyo 77.1
172 Joseph Tavares 77.1
173 Aaron Fazal 76.8
174 Alexander Lorenzo 76.8
175 Adam Gold 76.6
176 Blake Littlefield 76.6
177 Tommy Crapanzano 76.6
178 Aaron LaRose 76.5
179 Aidan Daugherty 76.4
180 Brady Henderson 76.2
181 Patrick Millin 76.2
182 Ryan Neville 76.1
183 John David O\'Hara 75.9
184 Reagan Baumeister 75.9
185 Justin Engelsen 75.8
186 Aidan Klocek 75.7
187 Ben Cote 75.7
188 Joseph Gourley 75.7
189 Joel Cortorreal 75.6
190 Russel Kilkenny 75.6
191 Ben Branco 75.5
192 KAM GAMM 75.4
193 Luke McGrath 75.4
194 Zach Kantor 75.4
195 Chase McQuade 75.3
196 Vikram Gohri 75.3
197 Adam Gonzalez 75.2
198 Ewan McDonough 75.1
199 Julien Kwasnik 75
200 Jullian Dejesus 75
201 Aaron Vega 74.9
202 Colton Merola 74.9
203 Jayden Loccisano 74.8
204 Thomas Day 74.8
205 Brady Hargraves 74.5
206 Cameron Delmore 74.4
207 Conor Canonico 74.4
208 David Marrero 74.4
209 Evan Candelario 74.4
210 Gavin Pettit 74.4
211 Neldwy Cruz 74.4
212 Eli Davis 74.3
213 Brady Quirion 74.2
214 Ethan Elderkin 74.2
215 Quinten Monteiro 74.2
216 SCOTT BEUOY 74.2
217 Jack Himelfarb 74
218 Jackson Bouchard 73.9
219 Jimmy Lewis 73.8
220 Dylan Seemangal 73.7
221 Aidan Suarez 73.6
222 JACOB FERREIRA 73.6
223 Nick Atwell 73.6
224 Anthony Campos Jr 73.4
225 Eddie McClung 73.4
226 Zach Migliore 73.4
227 Justin Hills 73.3
228 Ross Lipsky 73.3
229 Adam Farne 73.2
230 Liam Gorney 73.2
231 Nathan Machado 73.2
232 Carter Bade 73.1
233 Jackson Haefner 73.1
234 Scotty Joseph 73.1
235 Danny Fowler 73
236 Austin Stuart 72.9
237 Caelan Porter 72.9
238 James Termine 72.8
239 Joseph Calabrese 72.8
240 WILL CAMERON 72.8
241 CRISTIAN LOPEZ 72.6
242 Gus Merhige 72.6
243 Matthew Tranquillo 72.6
244 Jackson Pecor 72.4
245 Jeremy Evangelista 72.4
246 Orion Ruck 72.4
247 Ty Curtis 72.4
248 Aidan Walsh 72.3
249 Jerusalen Leon 72.3
250 John Luter III 72.3
251 Ryan Dennis 72.3
252 Vincent Wagoner 72.3
253 Zayden Crouse 72.3
254 Evan Pupka 72.2
255 Jason Gelormini 72.2
256 William Scott 72.2
257 Andrew Sevigny 72.1
258 Angelo Ilarda 72.1
259 Ellis Columber 72
260 Evan Aubin 71.6
261 Jonathan Tawa 71.5
262 Liam Mackessy 71.5
263 Vince Romano 71.4
264 Michael Cleary 71.3
265 Michael Manzanillo 71
266 Jack Cirelli 70.9
267 Callan Heimroth 70.8
268 Jeremy Leone 70.8
269 Landon Fischer 70.8
270 Quinn Orvis 70.8
271 Christopher Barba 70.7
272 Justin Sheeky 70.6
273 Cole Fredriksen 70.5
274 Noah Brewer 70.5
275 Abel Edmundson 70.4
276 Ashton Goodwin 70.4
277 Kyle Robertson 70.1
278 Will Carroll 70.1
279 John Jordan 70
280 Luke Skouras 70
281 Hugh Cyhowski 69.9
282 Ryan Mayer 69.9
283 Chris Barboza 69.8
284 Chris Carton 69.8
285 Enzo Furlani 69.8
286 Noah Wood 69.7
287 Josh Sigmon 69.6
288 Matthew Zunno 69.4
289 Ian Heberlig 69.1
290 Jordan Suarez 69.1
291 Brady Shatas 68.9
292 Jack Fontaine 68.8
293 Allen McKay 68.6
294 Luke Rizzi 68.6
295 Henry Solmo-Brewer 68.5
296 Matteo Giudice 68.5
297 Corey Martin 68.3
298 Luca Simonelli 68.1
299 Henry Atlas 68
300 Liam Lawlor 68
301 Noah Johnston 68
302 Sebastian Chavez-Perrez 68
303 Curtis Sullivan 67.9
304 Matteo Lucatino 67.8
305 Nathan Khaldarov 67.8
306 Rishon Robenstein 67.8
307 Sheamus Mahoney 67.7
308 Alex Murdock 67.6
309 Tarren Lawless 67.3
310 Charlie Nella 67
311 Nick Luparello 66.9
312 Patrick Sebber 66.9
313 Brayden Soma 66.8
314 Dylan Loccisano 66.8
315 Jake Walsh 66.7
316 Zane Prescott 66.4
317 Conor Toohill 66.3
318 Nicholaos (Niko) Samaras 66.3
319 Adrian Marcelo Acosta 66
320 Noah Sanchez 66
321 Gavin Bisignano 65.9
322 Griffin Gauthier 65.6
323 Johnny Payne 65.6
324 Albert Taveras 65.5
325 Matthew Taylor 65.5
326 Colin Couto 65.4
327 Gabe Carpenter 65
328 Lukas Csury 64.8
329 Evan Dumeny 64.6
330 Zachary Powell 64.5
331 Ben Kalish 64.4
332 Ryan Tejeda 64.4
333 Bryce Payne 64.3
334 Riki Ekuni 64.3
335 Jason Martin 64.2
336 Ruben Cortorreal 64
337 Jason Boni 63.9
338 Ahmo Kolenovic 63.6
339 Jacob Marsh 63.3
340 Gavin Rooney 63.2
341 Penn Jurgensen 62.9
342 Ryan Valente 62.9
343 Sebastian Lopez 61.8
344 Pedro DelToro 61.7
345 Cormac Cunningham 61.6
346 Martin Green Jr. 60.9
347 Jonathan Antin 60.2
348 Bennett Mcstowe 59.8
349 Jacob Falero 59.7
350 Jake Florence 59.5
351 Sam Shelton 58.9
352 Ryan Mullen 58.3
353 Santos Simpson 58.3
354 Nicholas Curiel 56.2
355 Nelson Cruz 56
356 Owen Smith 56
357 Cameron Shatas 54
358 Jack McManamon 53.3
359 Paulo Gago 53.1
360 David Tillotson 52.7
361 Samuel Bay 51.4
362 Sean Marinelli 51.4
363 Brody Harris 50.7
364 Liam Thompson 49.7
365 Wes Morneau 49
366 Matthew Olynciw 45.1
367 Andrew Malkowski 19.2
RankProfileNameFastball Velocity
1 Aiden Lopez 88.4
2 Gabe Knudsen 87.8
3 WILL HURLEY 86.6
4 Michael Thompson 86.3
5 Lane LeClair 86.2
6 Josh Pozo 86
7 Leonardo May 85.9
8 Patrick Weaving 85.8
9 TIARNAN DOYLE 84.9
10 Randen May 84.8
11 Brady Morin 84.5
12 Brailin Dominguez 84.5
13 Kade Marcantonio 84.2
14 Brandon Rossano 84
15 Charlie Bolnick 84
16 Matthew Levesque 84
17 Nick Palovich 84
18 Scott Sleurs 84
19 Vincent Wagoner 84
20 AJ Cantore 83.6
21 Rohan Inamdar 83.6
22 Jason Hall 83.3
23 Nolan Bonnell 83.2
24 Danny Armstrong 83
25 Tobey Appenzeller 82.8
26 HAMILTON WRAY 82.7
27 Joshua Warming 82.7
28 Sean Egan 82.7
29 Ryan Landry 82.6
30 Logan Littlefield 82.5
31 Hugh Cyhowski 82.4
32 Josh Hessel 82.4
33 Corey Martin 82.3
34 Elliott Harris 82.2
35 Jonathan Strohecker 82.1
36 Mitchell Canuel 82
37 CHRIS SAPIENZA 81.7
38 Aaron LaRose 81.5
39 Logan Whitney 81.5
40 Matthew Orena 81.5
41 Blake Littlefield 81.3
42 Mason Pingree 81
43 Gavin Nichols 80.9
44 Levi Hessel 80.9
45 Michael Pierce 80.3
46 Russel Kilkenny 80.3
47 Forrest Mitterbauer 80.2
48 Will Bush 80
49 Cam Dillis 79.9
50 Hayden Strout 79.6
51 Trent Holst 79.6
52 Nathan Machado 79.5
53 Peter Portugues 79.5
54 Wyatt Daigle 79.5
55 Matthew Nordstrom 79.4
56 Matthew Tranquillo 79.1
57 Evan Aubin 79
58 Quinn Orvis 79
59 Anderson Clifford 78.9
60 Jullian Dejesus 78.9
61 Adam Gold 78.8
62 Julien Kwasnik 78.8
63 Michael Kwas 78.7
64 Charles MacElhiney 78.6
65 Aidan Clancey 78.4
66 Jacob Neumayer 78.3
67 Max Hopkins 78.2
68 Callan Heimroth 78.1
69 Logan Voltaire 78.1
70 Trey Kuzmeski 78.1
71 Daniel St. George 78
72 Aaron Vega 77.9
73 Casey Lowndes 77.9
74 Geoffrey Laliberte 77.9
75 Jack Boyle 77.9
76 Logan French 77.9
77 Sean Garvin 77.9
78 Topher Reardon 77.8
79 Connor Mandirola 77.3
80 Connor Nichols 77.2
81 Chris Barboza 77.1
82 Nick Daley 77.1
83 Ryan Mayer 77.1
84 Ahmo Kolenovic 77
85 Dakota Harriman 77
86 Luca Simonelli 77
87 Ruben Cortorreal 76.4
88 hayden sladewski 76.3
89 Zach Kantor 76.3
90 Alex Russell 76.2
91 Matthew Taylor 76.2
92 Ryan Kane 76.1
93 Andrew Thompson 76
94 John Luter III 76
95 Drew Hopper 75.8
96 Aaron Fazal 75.7
97 Caden Bushey 75.7
98 Kaden Jones 75.5
99 Alex Munz 75.4
100 IAN LAWRENCE-RIDDELL 75.4
101 Kellen McDonald 75.4
102 Matthew Mangini 75.3
103 Matteo Cuccovia 75.2
104 Henry Sanders 75.1
105 John David O\'Hara 75.1
106 Alexander Lorenzo 75
107 Griffin Gauthier 75
108 John Perino 74.9
109 Jagger James Bruch 74.7
110 Jayden Loccisano 74.7
111 Brady Henderson 74.5
112 William Benedetti 74.5
113 William Scott 74.5
114 Jack Haley 74.4
115 Kyle Wilson 74.4
116 Maddox Legendre 74.4
117 Bradyn Surreira 74.2
118 Payton Young 74.2
119 Samuel Bay 74.1
120 Jackson Pecor 74
121 Max Bryan 74
122 Jovaniel Cruz 73.9
123 Quinten Monteiro 73.9
124 Scotty Joseph 73.9
125 BRADY DAMMLING 73.7
126 Eddie McClung 73.7
127 Thomas Jude 73.6
128 Jason Gelormini 73.4
129 Christopher Skouras 73.1
130 Matthew Fiaschetti 73
131 Zachary Powell 73
132 Zyaire Roberts 73
133 Reagan Baumeister 72.8
134 Ethan Jeon 72.6
135 Ryan Valente 72.6
136 Jimmy Lewis 72.5
137 Joseph Calabrese 72.5
138 Aidan Klocek 72.4
139 Colin Couto 72.2
140 Joseph Gourley 72.2
141 Camden Strong 72
142 Dennis Tower 72
143 Jordan Suarez 72
144 Penn Jurgensen 72
145 Ben Kalish 71.7
146 William Steinmann 71.7
147 Rishon Robenstein 71.2
148 Jason Boni 71.1
149 Jeremy Leone 71.1
150 Ryan Mullen 71
151 WILL CAMERON 71
152 Anthony Campos Jr 70.4
153 Zane Prescott 70.1
154 Evan Pupka 70
155 Jake Walsh 69.4
156 Jackson Bouchard 69.3
157 Noah Brewer 69.3
158 Brady Shatas 69.1
159 Nicholaos (Niko) Samaras 68.5
160 Cole Fredriksen 68.1
161 Brayden Soma 67.9
162 Ewan McDonough 67.8
163 Adrian Marcelo Acosta 66.6
164 Enzo Furlani 66
165 Aidan Walsh 65.2
166 Will Carroll 64.9
167 Adam Farne 64.5
168 Tarren Lawless 64.5
169 Charlie Nella 63.8
170 Chase McQuade 63.3
171 Gavin Rooney 62.8
172 Matteo Giudice 62.8
173 Curtis Sullivan 62.2
174 Santos Simpson 62
175 Cormac Cunningham 61.5
176 Paulo Gago 58.9
177 Sean Marinelli 58.7
178 Liam Thompson 57.6
179 Cameron Shatas 55.9
180 Jake Florence 55.6
181 Brody Harris 51.6
RankProfileNameSpin Rate
1 Josh Pozo 2557
2 WILL HURLEY 2420
3 Wyatt Daigle 2408
4 Aiden Lopez 2375
5 Chris Barboza 2344
6 Will Bush 2331
7 Gabe Knudsen 2330
8 Tobey Appenzeller 2328
9 Elliott Harris 2309
10 Kade Marcantonio 2292
11 Cam Dillis 2284
12 Eddie McClung 2278
13 Leonardo May 2244
14 Michael Thompson 2244
15 Jullian Dejesus 2241
16 Levi Hessel 2232
17 Charlie Bolnick 2203
18 Peter Portugues 2192
19 Randen May 2181
20 Ruben Cortorreal 2144
21 Patrick Weaving 2140
22 Kellen McDonald 2139
23 Michael Kwas 2136
24 Gavin Nichols 2125
25 Matthew Levesque 2124
26 Logan Littlefield 2123
27 Samuel Bay 2120
28 Hayden Strout 2111
29 Hugh Cyhowski 2109
30 HAMILTON WRAY 2107
31 Matthew Mangini 2105
32 Jack Haley 2104
33 Michael Pierce 2095
34 Scott Sleurs 2093
35 Jack Boyle 2092
36 Blake Littlefield 2088
37 Topher Reardon 2087
38 Callan Heimroth 2084
39 Brandon Rossano 2082
40 Maddox Legendre 2082
41 Jagger James Bruch 2080
42 Vincent Wagoner 2073
43 Jonathan Strohecker 2072
44 Alex Russell 2067
45 Trey Kuzmeski 2062
46 Nathan Machado 2060
47 Sean Egan 2047
48 Josh Hessel 2046
49 Ryan Landry 2031
50 Connor Nichols 2030
51 Russel Kilkenny 2028
52 Rohan Inamdar 2025
53 Aaron LaRose 2024
54 Logan Whitney 2016
55 Jason Hall 2012
56 Jacob Neumayer 2011
57 Reagan Baumeister 2011
58 Trent Holst 2011
59 Anderson Clifford 2008
60 Lane LeClair 2004
61 Henry Sanders 1998
62 Joseph Gourley 1997
63 Aidan Clancey 1995
64 Sean Garvin 1993
65 Jimmy Lewis 1991
66 Joshua Warming 1990
67 Brailin Dominguez 1987
68 Adam Gold 1983
69 Mitchell Canuel 1979
70 Logan Voltaire 1976
71 AJ Cantore 1975
72 CHRIS SAPIENZA 1963
73 Brayden Soma 1958
74 Charles MacElhiney 1956
75 Danny Armstrong 1956
76 Ryan Kane 1951
77 Logan French 1950
78 Zach Kantor 1949
79 Ryan Mayer 1947
80 Max Hopkins 1946
81 Jason Boni 1942
82 Alex Munz 1939
83 Dakota Harriman 1937
84 Drew Hopper 1932
85 IAN LAWRENCE-RIDDELL 1931
86 Caden Bushey 1927
87 Connor Mandirola 1917
88 Nolan Bonnell 1917
89 Forrest Mitterbauer 1915
90 Brady Morin 1913
91 Brady Shatas 1910
92 Kyle Wilson 1907
93 John Perino 1906
94 Alexander Lorenzo 1902
95 Brady Henderson 1893
96 Zane Prescott 1889
97 Dennis Tower 1888
98 Jason Gelormini 1888
99 Aaron Fazal 1886
100 Adrian Marcelo Acosta 1884
101 Evan Aubin 1884
102 Aidan Klocek 1877
103 Daniel St. George 1876
104 Luca Simonelli 1874
105 William Steinmann 1871
106 Julien Kwasnik 1867
107 Quinn Orvis 1864
108 Matteo Cuccovia 1860
109 Bradyn Surreira 1856
110 Corey Martin 1856
111 Rishon Robenstein 1853
112 Matthew Nordstrom 1852
113 Jackson Pecor 1850
114 Mason Pingree 1850
115 Ryan Mullen 1848
116 hayden sladewski 1847
117 Aaron Vega 1846
118 BRADY DAMMLING 1846
119 Nick Daley 1846
120 Casey Lowndes 1836
121 Jovaniel Cruz 1835
122 John David O\'Hara 1834
123 Matthew Taylor 1834
124 Ahmo Kolenovic 1831
125 William Benedetti 1825
126 Cormac Cunningham 1811
127 Matthew Tranquillo 1809
128 Santos Simpson 1806
129 Geoffrey Laliberte 1803
130 Jeremy Leone 1802
131 Matthew Fiaschetti 1796
132 John Luter III 1792
133 TIARNAN DOYLE 1786
134 Max Bryan 1783
135 Andrew Thompson 1779
136 Ryan Valente 1779
137 Kaden Jones 1778
138 Aidan Walsh 1768
139 Cole Fredriksen 1750
140 William Scott 1749
141 Chase McQuade 1744
142 Jackson Bouchard 1742
143 Nick Palovich 1742
144 Christopher Skouras 1739
145 Anthony Campos Jr 1738
146 Gavin Rooney 1736
147 Thomas Jude 1724
148 Will Carroll 1714
149 Evan Pupka 1709
150 Jayden Loccisano 1701
151 Adam Farne 1695
152 Ben Kalish 1690
153 Colin Couto 1678
154 Matthew Orena 1676
155 Tarren Lawless 1667
156 Charlie Nella 1649
157 Griffin Gauthier 1645
158 Noah Brewer 1642
159 Matteo Giudice 1638
160 Camden Strong 1629
161 Jake Walsh 1622
162 Enzo Furlani 1618
163 Paulo Gago 1613
164 Jordan Suarez 1601
165 Quinten Monteiro 1598
166 Zyaire Roberts 1593
167 Joseph Calabrese 1583
168 Nicholaos (Niko) Samaras 1582
169 Scotty Joseph 1562
170 Jake Florence 1552
171 Ethan Jeon 1549
172 WILL CAMERON 1514
173 Liam Thompson 1497
174 Zachary Powell 1490
175 Payton Young 1472
176 Sean Marinelli 1465
177 Penn Jurgensen 1430
178 Ewan McDonough 1390
179 Curtis Sullivan 1343
180 Brody Harris 1274
181 Cameron Shatas 1244
RankProfileNameCurveball Velo – Avg
1 Aiden Lopez 82.4
2 Randen May 78.3
3 Gabe Knudsen 78
4 Nick Palovich 77.6
5 Michael Pierce 76.8
6 AJ Cantore 76.5
7 Danny Armstrong 76.5
8 CHRIS SAPIENZA 76
9 Patrick Weaving 74.4
10 Brady Morin 74
11 Blake Littlefield 73.7
12 Scott Sleurs 73
13 Hayden Strout 72.5
14 Jason Boni 72
15 Sean Egan 71.9
16 Tobey Appenzeller 71.9
17 Leonardo May 71.8
18 TIARNAN DOYLE 71.8
19 Alex Russell 71.4
20 Jack Boyle 71.4
21 Ryan Landry 71.4
22 Corey Martin 71.3
23 Adam Gold 71
24 Brandon Rossano 71
25 Nathan Machado 71
26 Will Bush 70.7
27 WILL HURLEY 70.7
28 Jullian Dejesus 70.6
29 Max Hopkins 70.5
30 Michael Thompson 70.3
31 Matthew Levesque 70
32 Joshua Warming 69.8
33 Jason Hall 69.5
34 Ruben Cortorreal 69.2
35 Aaron LaRose 69
36 Jack Haley 69
37 Matthew Orena 69
38 Connor Nichols 68.7
39 Evan Aubin 68.7
40 Max Bryan 68.6
41 John David O\'Hara 68.5
42 Michael Kwas 68.5
43 Anderson Clifford 67.8
44 Casey Lowndes 67.5
45 Wyatt Daigle 67.5
46 Mitchell Canuel 67.3
47 Elliott Harris 67.1
48 Rohan Inamdar 67.1
49 Kaden Jones 66.9
50 Ahmo Kolenovic 66.8
51 Gavin Nichols 66.8
52 Nolan Bonnell 66.8
53 Topher Reardon 66.6
54 Zach Kantor 66.5
55 Callan Heimroth 66.4
56 Matthew Nordstrom 66.4
57 Charles MacElhiney 66.3
58 Mason Pingree 66.3
59 Lane LeClair 66.2
60 Charlie Bolnick 66.1
61 Cameron Connolly 66
62 Zachary Powell 66
63 Julien Kwasnik 65.9
64 Matteo Cuccovia 65.9
65 Joseph Calabrese 65.8
66 HAMILTON WRAY 65.6
67 Sean Garvin 65.6
68 Luca Simonelli 65.5
69 Jayden Loccisano 65.4
70 Logan Littlefield 65.4
71 Matthew Tranquillo 65.3
72 Trey Kuzmeski 65.1
73 BRADY DAMMLING 65
74 Colin Couto 64.9
75 Eddie McClung 64.9
76 Jagger James Bruch 64.9
77 Hugh Cyhowski 64.7
78 Alex Munz 64.6
79 Jimmy Lewis 64.6
80 Ryan Valente 64.5
81 Christopher Skouras 64.4
82 Ryan Mayer 64.4
83 Jonathan Strohecker 64.3
84 Matthew Taylor 64.1
85 Dakota Harriman 64
86 Aidan Klocek 63.6
87 Anthony Campos Jr 63.4
88 Logan Voltaire 63.4
89 Peter Portugues 63.3
90 Caden Bushey 63.2
91 Trent Holst 63.2
92 Maddox Legendre 63.1
93 Matthew Mangini 63
94 Ryan Kane 63
95 John Luter III 62.5
96 Thomas Jude 62.2
97 Joseph Gourley 61.9
98 Payton Young 61.9
99 Jeremy Leone 61.8
100 John Perino 61.8
101 Kellen McDonald 61.7
102 Adrian Marcelo Acosta 61.5
103 Daniel St. George 61.5
104 Reagan Baumeister 61.5
105 Ben Kalish 61.4
106 Cole Fredriksen 61.4
107 Jason Gelormini 61.4
108 Aaron Fazal 61.3
109 Scotty Joseph 61.2
110 Ethan Jeon 61.1
111 Bradyn Surreira 61
112 Andrew Thompson 60.8
113 Noah Brewer 60.8
114 Griffin Gauthier 60.7
115 Rishon Robenstein 60.7
116 Brayden Soma 60.6
117 Camden Strong 60.6
118 Drew Hopper 60.6
119 Brady Henderson 60.5
120 William Scott 60.4
121 Zyaire Roberts 59.8
122 Quinten Monteiro 59.5
123 Russel Kilkenny 59.5
124 Jordan Suarez 59.4
125 William Steinmann 59.2
126 Ewan McDonough 58.3
127 Matthew Fiaschetti 58.2
128 Jackson Pecor 58
129 Connor Mandirola 57.7
130 Geoffrey Laliberte 57.7
131 Evan Pupka 57.3
132 Zane Prescott 57.3
133 Ryan Mullen 57
134 Aidan Walsh 56.9
135 WILL CAMERON 56.8
136 Alexander Lorenzo 56.3
137 Charlie Nella 56.1
138 Tarren Lawless 54.5
139 Nicholaos (Niko) Samaras 54.3
140 Cormac Cunningham 53.4
141 Curtis Sullivan 53
142 Paulo Gago 52.8
143 Chase McQuade 52.7
144 Jake Walsh 52.1
145 Cameron Shatas 49.4
146 Liam Thompson 49.3
RankProfileNameChangeup Velo – Avg
1 Brody Harris 47.9
2 Curtis Sullivan 53.2
3 Gavin Rooney 54.1
4 Sean Marinelli 54.2
5 Liam Thompson 54.6
6 Cormac Cunningham 55.1
7 Chase McQuade 55.8
8 Adrian Marcelo Acosta 56
9 Matteo Giudice 56.1
10 John Perino 56.4
11 Adam Farne 58.1
12 Anthony Campos Jr 59
13 Ryan Mullen 59
14 Aidan Walsh 60.5
15 Ben Kalish 60.8
16 Nicholaos (Niko) Samaras 61
17 Tarren Lawless 61
18 Jake Walsh 61.4
19 Evan Pupka 62
20 Jack Haley 62.3
21 Jackson Bouchard 62.4
22 Kyle Wilson 62.6
23 Rishon Robenstein 63.1
24 Brady Shatas 64.1
25 Matteo Cuccovia 64.6
26 Jason Gelormini 64.7
27 William Benedetti 64.7
28 Zane Prescott 64.8
29 Bradyn Surreira 64.9
30 Chris Barboza 64.9
31 Jordan Suarez 64.9
32 Aaron Vega 65
33 Quinten Monteiro 65
34 William Steinmann 65
35 Caden Bushey 65.1
36 Christopher Skouras 65.2
37 Jovaniel Cruz 65.2
38 Russel Kilkenny 65.2
39 Noah Brewer 65.7
40 Connor Nichols 65.8
41 Drew Hopper 65.8
42 Ryan Valente 66.1
43 Henry Sanders 66.3
44 Max Hopkins 66.5
45 BRADY DAMMLING 66.7
46 Jacob Neumayer 66.7
47 Ethan Jeon 66.8
48 Alexander Lorenzo 67
49 Blake Littlefield 67
50 Cam Dillis 67.2
51 Scotty Joseph 67.2
52 Jullian Dejesus 67.3
53 Reagan Baumeister 67.4
54 Charles MacElhiney 67.5
55 Thomas Jude 67.5
56 William Scott 67.7
57 Forrest Mitterbauer 67.9
58 Peter Portugues 67.9
59 Eddie McClung 68
60 Penn Jurgensen 68
61 Ryan Kane 68
62 John David O\'Hara 68.1
63 Gavin Nichols 68.5
64 Logan Littlefield 68.5
65 Anderson Clifford 68.6
66 IAN LAWRENCE-RIDDELL 68.6
67 Jayden Loccisano 68.7
68 John Luter III 69
69 Jonathan Strohecker 69
70 Logan Voltaire 69
71 Aidan Clancey 69.1
72 Matthew Taylor 69.1
73 Ryan Mayer 69.1
74 Jackson Pecor 69.3
75 Matthew Tranquillo 69.4
76 Charlie Bolnick 69.5
77 Luca Simonelli 70
78 Casey Lowndes 70.2
79 Payton Young 70.2
80 Jason Boni 70.4
81 Samuel Bay 70.8
82 Mitchell Canuel 71
83 Matthew Orena 71.1
84 Joshua Warming 71.3
85 Kellen McDonald 71.3
86 Jack Boyle 71.5
87 Max Bryan 71.6
88 Lane LeClair 71.7
89 Kaden Jones 72.1
90 Michael Kwas 72.2
91 Corey Martin 72.3
92 Sean Garvin 72.3
93 Callan Heimroth 72.5
94 Mason Pingree 72.5
95 Nolan Bonnell 72.8
96 HAMILTON WRAY 72.9
97 Logan French 73.2
98 Julien Kwasnik 73.5
99 Elliott Harris 73.8
100 Jason Hall 73.8
101 Josh Pozo 73.9
102 Will Bush 73.9
103 Geoffrey Laliberte 74
104 Hugh Cyhowski 74.7
105 Tobey Appenzeller 74.8
106 Adam Gold 75.5
107 Matthew Levesque 75.5
108 Michael Thompson 75.6
109 Brandon Rossano 75.7
110 Matthew Nordstrom 75.7
111 Evan Aubin 76
112 TIARNAN DOYLE 76.3
113 Vincent Wagoner 76.5
114 Michael Pierce 78.4
115 CHRIS SAPIENZA 78.5
116 Scott Sleurs 79
117 Josh Hessel 79.5
118 Brady Morin 80.4
119 Patrick Weaving 82.3
120 WILL HURLEY 82.8

RULES

There is no rules.

WEATHER

`);printWindow.document.close(); }); /* function gpe_get_schedules_list() { const event_id = '41670'; let division_filter_drop = $("#division_filter_drop").val(); let pool_filter_drop = $("#pool_filter_drop").val(); let date_filter_drop = $("#date_filter_drop").val();// Show processing indicator (manually trigger it) table.destroy(); // Destroy old DataTable before making new AJAX call $("#schedules_table tbody").html('Loading...'); // Temporary loader row$.ajax({ url: gpe.ajax_url, type: 'post', data: { action: 'gpe_ajax', type: 'gpe_get_schedules_list', event_id: event_id, division_filter_drop: division_filter_drop, pool_filter_drop: pool_filter_drop, date_filter_drop: date_filter_drop }, success: function (response) { // Clear the table body and add new content $("#schedules_table tbody").empty().html(response.data.html);// Reinitialize DataTable with processing enabled table = $("#schedules_table").DataTable({ processing: true, serverSide: false, // Keep it false unless loading data dynamically searching: true, paging: true, autoWidth: false }); } }); } function gpe_get_standing_list() { const event_id = '41670'; let division_filter_drop = $("#division_filter_drop_for_standing").val(); let pool_filter_drop = $("#pool_filter_drop_for_standing").val(); // Show processing indicator (manually trigger it) standings_table.destroy(); // Destroy old DataTable before making new AJAX call $("#standings_table tbody").html('Loading...'); // Temporary loader row $.ajax({ url: gpe.ajax_url, type: 'post', data: { action: 'gpe_ajax', type: 'gpe_get_standing_list', event_id: event_id, division_filter_drop: division_filter_drop, pool_filter_drop: pool_filter_drop }, success: function (response) { // Clear the table body and add new content $("#standings_table tbody").empty().html(response.data.html); // Reinitialize DataTable with processing enabled standings_table = $("#standings_table").DataTable({ processing: true, serverSide: false, // Keep it false unless loading data dynamically searching: true, paging: false }); } }); }*/ $('#shareDropdown').change(function(){ var selectedOption = $(this).val(); if (selectedOption === "copy") { var pageLink = window.location.href; var tempInput = $(""); $("body").append(tempInput); tempInput.val(pageLink).select(); document.execCommand("copy"); tempInput.remove(); Swal.fire({ title:"Success", text:"Copied to clipboard!", icon:'success' }); // Reset dropdown selection $(this).prop('selectedIndex', 0); } }); }); let isSchedulesTableInitialized = false;function gpeCustomeTabsnew(evt, cityName) { var i, tabcontent, tablinks; tabcontent = document.getElementsByClassName("gpe_tabcontent"); for (i = 0; i < tabcontent.length; i++) { tabcontent[i].style.display = "none"; } tablinks = document.getElementsByClassName("gpe_tablinks"); for (i = 0; i < tablinks.length; i++) { tablinks[i].className = tablinks[i].className.replace(" gpe_active", ""); } document.getElementById(cityName).style.display = "block"; evt.currentTarget.className += " gpe_active";if (cityName === "schedules_and_standings") { // ✅ Prevent reinitializing the DataTable if (!isSchedulesTableInitialized) { // Only call once window.gpe_get_schedules_list(); window.gpe_get_standing_list(); isSchedulesTableInitialized = true; } } }function gpeCustomeTabs(evt, cityName) { var i, tabcontent, tablinks; tabcontent = document.getElementsByClassName("gpe_tabcontent"); for (i = 0; i < tabcontent.length; i++) { tabcontent[i].style.display = "none"; } tablinks = document.getElementsByClassName("gpe_tablinks"); for (i = 0; i < tablinks.length; i++) { tablinks[i].className = tablinks[i].className.replace(" gpe_active", ""); } document.getElementById(cityName).style.display = "block"; evt.currentTarget.className += " gpe_active"; // Redraw connectors when Bracket tab is activated if (cityName === "brackets"){ //alert("Bracket"); loadSavedBracket(); } if (cityName === "brackets" && window.globalSerialMap) { // Wait until the browser has painted the visible DOM //requestAnimationFrame(() => { //setTimeout(() => { //waitForLayoutAndDraw(window.globalSerialMap, 20); waitForLayoutAndDrawStable(window.globalSerialMap, 20); //}, 100); //}); } }// Get the element with id="defaultOpen" and click on it document.getElementById("defaultOpen").click(); var acc = document.getElementsByClassName("gpe_accordion"); var i; for (i = 0; i < acc.length; i++) { acc[i].addEventListener("click", function() { this.classList.toggle("active"); var panel = this.nextElementSibling; if (panel.style.maxHeight) { panel.style.maxHeight = null; } else { panel.style.maxHeight = panel.scrollHeight + "px"; } }); }var latitude = document.getElementById("latitude").value; var longitude = document.getElementById("longitude").value;var iframe = document.createElement("iframe"); iframe.src = "https://www.google.com/maps/embed?pb=!1m28!1m12!1m3!1d19797.686238814687!2d-71.3765509!3d41.8633795!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!4m13!3e6!4m5!1s0x89e45a80fc2b13ab%3A0x8f62f2e279889968!2sCurrent%20Location!3m2!1d" + latitude + "!2d" + longitude + "!4m5!1s0x89e45a7a2b41f7f3%3A0x6cb46461e8d0c1b4!2s" + latitude + "%2C" + longitude + "!3m2!1d" + latitude + "!2d" + longitude + "!5e0!3m2!1sen!2sus!4v1644233201036!5m2!1sen!2sus"; iframe.width = "528"; iframe.height = "295"; iframe.style.border = "0"; iframe.allowfullscreen = true;var mapContainer = document.getElementById("mapContainer"); mapContainer.innerHTML = ""; mapContainer.appendChild(iframe); function getPoolsByDivision(divisionId) { return $.ajax({ url: gpe.ajax_url, method: "POST", dataType: "json", data: { action: "gpe_ajax", type: "get_pools_save", division_id: divisionId } }); }function loadSavedBracket() { // Get the division ID from the division select dropdown const divisionId = $("#division_select").val(); // Get the current event ID dynamically from PHP const eventId = '41670';// If division ID is not selected, exit early if (!divisionId) return;// Perform both AJAX requests in parallel $.when( $.ajax({ url: gpe.ajax_url, // URL for the AJAX request type: "POST", // HTTP method dataType: "json", // Expected response type data: { action: "gpe_ajax", // WordPress action hook for AJAX type: "get_saved_bracket", // Custom action to get saved bracket data event_id: eventId, // The current event ID division_id: divisionId // The selected division ID } }), getPoolsByDivision(divisionId) // Function to get pools for the selected division ).done(function (bracketRes, poolsRes) { // Extract bracket data from the first response (bracketRes) const bracketData = bracketRes[0]?.data?.bracket_data || []; // Prepare a map of pool ID to pool title const poolMap = {}; poolsRes[0]?.data?.forEach(pool => { poolMap[pool.id] = pool.title; });// Call renderSavedBracket function to render the bracket renderSavedBracket(bracketData, poolMap); }).fail(function () { // In case of failure, show an error message in the bracket container $("#bracket").html("
Error loading bracket.
"); }); } function renderSavedBracket(bracketData, poolMap) { let bracketWrapper = $(".bracket_wrapper"); if (bracketWrapper.length === 0) { bracketWrapper = $("
").addClass("bracket_wrapper"); // Append it to the main container if it's missing $("#bracket").replaceWith(bracketWrapper); } else { bracketWrapper.empty(); // Clear existing content if already present } let bracketDiv = $("
").attr("id", "bracket"); bracketWrapper.append(bracketDiv); if (!bracketData || bracketData.length === 0) { bracketDiv.append(`

Bracket not available, please select a different division from the drop down menu

`); return; } let groups = {}; let serialMap = {}; let matchCounter = 1; bracketData.forEach(match => { if (match.is_important === "1") { if (!groups[match.group_number]) groups[match.group_number] = {}; if (!groups[match.group_number][match.column_number]) groups[match.group_number][match.column_number] = []; groups[match.group_number][match.column_number].push(match); } }); const sortedGroups = Object.keys(groups).sort(); const mainGroup = sortedGroups[0]; let groupScrollWrapper = $("
").addClass("group-scroll-wrapper"); for (let group of sortedGroups) { let groupSerialCounter = 1; let groupDiv = $("
").addClass("group").attr("data-group", group); let columnsContainer = $("
").addClass("columns-container"); let groupMatchesArray = Object.values(groups[group]).flat(); let groupLabel = groupMatchesArray[0]?.group_label ?? `Group ${group}`; let labelDiv = $("
").addClass("group-label").text(groupLabel); groupDiv.append(labelDiv); let columns = Object.keys(groups[group]).sort((a, b) => a - b); const groupMatches = {}; const allMatches = Object.values(groups[group]).flat(); const matchCount = allMatches.length; const isFiveTeam = allMatches.length === 4 && columns.length === 3; const isSevenTeam = matchCount === 6 && columns.length === 4; const isTenTeam = matchCount === 9 && columns.length === 4; const isNineTeam = matchCount === 8 && columns.length === 4; const isSixTeam = matchCount === 5 && columns.length === 3; const isTwelveTeam = matchCount === 11 && columns.length === 4; // Adjust if using 12 matches if (isTwelveTeam) { allMatches.sort((a, b) => parseInt(a.name) - parseInt(b.name)); const displayOrder = [ allMatches[0], allMatches[1], allMatches[2], allMatches[3], // Round 1 allMatches[4], allMatches[5], allMatches[6], allMatches[7], // Round 2 allMatches[8], allMatches[9], // Semifinals allMatches[10] // Final ];let roundDiv1 = $("
").addClass("round").attr("data-column", columns[0]); let roundDiv2 = $("
").addClass("round").attr("data-column", columns[1]); let roundDiv3 = $("
").addClass("round").attr("data-column", columns[2]); let roundDiv4 = $("
").addClass("round").attr("data-column", columns[3]);displayOrder.forEach((match, i) => { const serial = groupSerialCounter++; const matchId = `match-serial-${group}-${serial}`; let matchDiv = $("
") .addClass("match") .attr("id", matchId) .attr("data-match-index", match.name);let score1 = match.team1_score ?? "-"; let score2 = match.team2_score ?? "-"; //let team1 = match.team_name1 ?? "Team 1"; //let team2 = match.team_name2 ?? "Team 2"; let team1 = match.source_label_team1 && match.source_label_team1.trim() !== "" ? match.source_label_team1 : (match.team_name1 ?? "Team 1"); let team2 = match.source_label_team2 && match.source_label_team2.trim() !== "" ? match.source_label_team2 : (match.team_name2 ?? "Team 2");let startTime = formatStartDateTime(match.start_date, match.start_time); let location = match.location || "";matchDiv.html(`
${match.name}
${startTime}
${location}
${team1} ${score1}
${team2} ${score2}
`);const matchContainer = $("
").addClass("match-container").css("margin-bottom", "20px"); matchContainer.append(matchDiv);match.serial = serial; if (!groupMatches[match.column_number]) groupMatches[match.column_number] = []; groupMatches[match.column_number].push(match); serialMap[`${group}-${serial}`] = { ...match, group, column: match.column_number, serial };if (i < 4) roundDiv1.append(matchContainer); // Round 1 else if (i < 8) roundDiv2.append(matchContainer); // Round 2 else if (i < 10) roundDiv3.append(matchContainer); // Semis else roundDiv4.append(matchContainer); // Final });columnsContainer.append(roundDiv1); columnsContainer.append($("
").addClass("connector-column")); columnsContainer.append(roundDiv2); columnsContainer.append($("
").addClass("connector-column")); columnsContainer.append(roundDiv3); columnsContainer.append($("
").addClass("connector-column")); columnsContainer.append(roundDiv4);groupDiv.append(columnsContainer); groupScrollWrapper.append(groupDiv);const groupNumbers = Object.keys(groups); // make sure 'groups' is defined and validconst importantMatchExists = Object.values(groupMatches) .flat() .some(m => m.is_importantlast === "1");setTimeout(() => { if (importantMatchExists) { const currentGroupNumber = group; const currentIndex = groupNumbers.indexOf(currentGroupNumber); const prevGroupNumber = currentIndex > 0 ? groupNumbers[currentIndex - 1] : null; const lastChecked = true;positionMatcheslast(groupMatches, currentGroupNumber, prevGroupNumber, lastChecked); } positionMatches(groupMatches, group); //waitForLayoutAndDraw(serialMap, 20); waitForLayoutAndDrawStable(serialMap, 20);}, 100);continue; }if (isSixTeam) { allMatches.sort((a, b) => parseInt(a.name) - parseInt(b.name));const displayOrder = [ allMatches[0], // Match 1 allMatches[1], // Match 2 allMatches[2], // Match 3 allMatches[3], // Match 4 allMatches[4] // Final ];let roundDiv1 = $("
").addClass("round").attr("data-column", columns[0]); let roundDiv2 = $("
").addClass("round").attr("data-column", columns[1]); let roundDiv3 = $("
").addClass("round").attr("data-column", columns[2]);displayOrder.forEach((match, i) => { const serial = groupSerialCounter++; const matchId = `match-serial-${group}-${serial}`;let matchDiv = $("
") .addClass("match") .attr("id", matchId) .attr("data-match-index", match.name);let score1 = match.team1_score ?? "-"; let score2 = match.team2_score ?? "-"; //let team1 = match.team_name1 ?? "Team 1"; //let team2 = match.team_name2 ?? "Team 2"; let team1 = match.source_label_team1 && match.source_label_team1.trim() !== "" ? match.source_label_team1 : (match.team_name1 ?? "Team 1"); let team2 = match.source_label_team2 && match.source_label_team2.trim() !== "" ? match.source_label_team2 : (match.team_name2 ?? "Team 2");let startTime = formatStartDateTime(match.start_date, match.start_time); let location = match.location || "";matchDiv.html(`
${match.name}
${startTime}
${location}
${team1} ${score1}
${team2} ${score2}
`);const matchContainer = $("
").addClass("match-container").css("margin-bottom", "20px"); matchContainer.append(matchDiv);match.serial = serial; if (!groupMatches[match.column_number]) groupMatches[match.column_number] = []; groupMatches[match.column_number].push(match);serialMap[`${group}-${serial}`] = { ...match, group, column: match.column_number, serial };if (i < 2) roundDiv1.append(matchContainer); else if (i < 4) roundDiv2.append(matchContainer); else roundDiv3.append(matchContainer); });columnsContainer.append(roundDiv1); columnsContainer.append($("
").addClass("connector-column")); columnsContainer.append(roundDiv2); columnsContainer.append($("
").addClass("connector-column")); columnsContainer.append(roundDiv3);groupDiv.append(columnsContainer); groupScrollWrapper.append(groupDiv);const groupNumbers = Object.keys(groups); // make sure 'groups' is defined and validconst importantMatchExists = Object.values(groupMatches) .flat() .some(m => m.is_importantlast === "1");setTimeout(() => { if (importantMatchExists) { const currentGroupNumber = group; const currentIndex = groupNumbers.indexOf(currentGroupNumber); const prevGroupNumber = currentIndex > 0 ? groupNumbers[currentIndex - 1] : null; const lastChecked = true;positionMatcheslast(groupMatches, currentGroupNumber, prevGroupNumber, lastChecked); } positionMatches(groupMatches, group); //waitForLayoutAndDraw(serialMap, 20); waitForLayoutAndDrawStable(serialMap, 20);}, 100);continue; } if (isNineTeam) { allMatches.sort((a, b) => parseInt(a.name) - parseInt(b.name));const displayOrder = [ allMatches[0], // Game 1 - Round 1 allMatches[1], // Game 2 - Round 2 allMatches[2], // Game 3 allMatches[3], // Game 4 allMatches[4], // Game 5 allMatches[5], // Game 6 - Round 3 allMatches[6], // Game 7 allMatches[7] // Game 8 - Round 4 (Final) ];let roundDiv1 = $("
").addClass("round").attr("data-column", columns[0]); let roundDiv2 = $("
").addClass("round").attr("data-column", columns[1]); let roundDiv3 = $("
").addClass("round").attr("data-column", columns[2]); let roundDiv4 = $("
").addClass("round").attr("data-column", columns[3]);displayOrder.forEach((match, i) => { const serial = groupSerialCounter++; const matchId = `match-serial-${group}-${serial}`;let matchDiv = $("
") .addClass("match") .attr("id", matchId) .attr("data-match-index", match.name);let score1 = match.team1_score ?? "-"; let score2 = match.team2_score ?? "-"; //let team1 = match.team_name1 ?? "Team 1"; //let team2 = match.team_name2 ?? "Team 2"; let team1 = match.source_label_team1 && match.source_label_team1.trim() !== "" ? match.source_label_team1 : (match.team_name1 ?? "Team 1"); let team2 = match.source_label_team2 && match.source_label_team2.trim() !== "" ? match.source_label_team2 : (match.team_name2 ?? "Team 2");let startTime = formatStartDateTime(match.start_date, match.start_time); let location = match.location || "";matchDiv.html(`
${match.name}
${startTime}
${location}
${team1} ${score1}
${team2} ${score2}
`);const matchContainer = $("
").addClass("match-container").css("margin-bottom", "20px"); matchContainer.append(matchDiv);match.serial = serial; if (!groupMatches[match.column_number]) groupMatches[match.column_number] = []; groupMatches[match.column_number].push(match);serialMap[`${group}-${serial}`] = { ...match, group, column: match.column_number, serial };if (i === 0) roundDiv1.append(matchContainer); else if (i >= 1 && i <= 4) roundDiv2.append(matchContainer); else if (i === 5 || i === 6) roundDiv3.append(matchContainer); else if (i === 7) roundDiv4.append(matchContainer); });columnsContainer.append(roundDiv1); columnsContainer.append($("
").addClass("connector-column")); columnsContainer.append(roundDiv2); columnsContainer.append($("
").addClass("connector-column")); columnsContainer.append(roundDiv3); columnsContainer.append($("
").addClass("connector-column")); columnsContainer.append(roundDiv4);groupDiv.append(columnsContainer); groupScrollWrapper.append(groupDiv);const groupNumbers = Object.keys(groups); // make sure 'groups' is defined and validconst importantMatchExists = Object.values(groupMatches) .flat() .some(m => m.is_importantlast === "1");setTimeout(() => { if (importantMatchExists) { const currentGroupNumber = group; const currentIndex = groupNumbers.indexOf(currentGroupNumber); const prevGroupNumber = currentIndex > 0 ? groupNumbers[currentIndex - 1] : null; const lastChecked = true;positionMatcheslast(groupMatches, currentGroupNumber, prevGroupNumber, lastChecked); } positionMatches(groupMatches, group); //waitForLayoutAndDraw(serialMap, 20); waitForLayoutAndDrawStable(serialMap, 20);}, 100);continue; }if (isTenTeam) { allMatches.sort((a, b) => parseInt(a.name) - parseInt(b.name)); console.log("10-team allMatches:", allMatches.map(m => ({ name: m.name, id: m.id, column: m.column_number })));// Custom display order: Round 2 is visually reordered // Custom display order: Round 2 is visually reordered const displayOrder = [ allMatches[0], allMatches[1], // Round 1: Match 36, 37 allMatches[2], allMatches[3], allMatches[4], allMatches[5], // Round 2: Matches 3, 4, 5, 6 (in order) allMatches[6], allMatches[7], // Round 3: Matches 42–43 allMatches[8] // Final: Match 44 ];let roundDiv1 = $("
").addClass("round").attr("data-column", columns[0]); let roundDiv2 = $("
").addClass("round").attr("data-column", columns[1]); let roundDiv3 = $("
").addClass("round").attr("data-column", columns[2]); let roundDiv4 = $("
").addClass("round").attr("data-column", columns[3]);displayOrder.forEach((match, i) => { const serial = groupSerialCounter++; const matchId = `match-serial-${group}-${serial}`;let matchDiv = $("
") .addClass("match") .attr("id", matchId) .attr("data-match-index", match.name);let score1 = match.team1_score ?? "-"; let score2 = match.team2_score ?? "-"; //let team1 = match.team_name1 ?? "Team 1"; //let team2 = match.team_name2 ?? "Team 2"; let team1 = match.source_label_team1 && match.source_label_team1.trim() !== "" ? match.source_label_team1 : (match.team_name1 ?? "Team 1"); let team2 = match.source_label_team2 && match.source_label_team2.trim() !== "" ? match.source_label_team2 : (match.team_name2 ?? "Team 2");let startTime = formatStartDateTime(match.start_date, match.start_time); let location = match.location || "";matchDiv.html(`
${match.name}
${startTime}
${location}
${team1} ${score1}
${team2} ${score2}
`);const matchContainer = $("
") .addClass("match-container") .css("margin-bottom", "20px"); // ← add spacing between matchesmatchContainer.append(matchDiv);match.serial = serial; if (!groupMatches[match.column_number]) groupMatches[match.column_number] = []; groupMatches[match.column_number].push(match);serialMap[`${group}-${serial}`] = { ...match, group, column: match.column_number, serial };if (i < 2) roundDiv1.append(matchContainer); // Round 1 else if (i >= 2 && i <= 5) { // Force desired visual order for Round 2: Matches 38, 39, 40, 41 // Map i to visual index: 2→0, 3→1, 4→2, 5→3 const round2Order = [2, 3, 4, 5]; const targetIndex = round2Order.indexOf(i);if (targetIndex !== -1) { const container = roundDiv2.find(".match-container").eq(targetIndex); if (container.length) { container.before(matchContainer); } else { roundDiv2.append(matchContainer); } } }else if (i < 8) roundDiv3.append(matchContainer); // Round 3 else roundDiv4.append(matchContainer); // Final });columnsContainer.append(roundDiv1); columnsContainer.append($("
").addClass("connector-column")); columnsContainer.append(roundDiv2); columnsContainer.append($("
").addClass("connector-column")); columnsContainer.append(roundDiv3); columnsContainer.append($("
").addClass("connector-column")); columnsContainer.append(roundDiv4);groupDiv.append(columnsContainer); groupScrollWrapper.append(groupDiv);const groupNumbers = Object.keys(groups); // make sure 'groups' is defined and validconst importantMatchExists = Object.values(groupMatches) .flat() .some(m => m.is_importantlast === "1");setTimeout(() => { if (importantMatchExists) { const currentGroupNumber = group; const currentIndex = groupNumbers.indexOf(currentGroupNumber); const prevGroupNumber = currentIndex > 0 ? groupNumbers[currentIndex - 1] : null; const lastChecked = true;positionMatcheslast(groupMatches, currentGroupNumber, prevGroupNumber, lastChecked); } positionMatches(groupMatches, group); //waitForLayoutAndDraw(serialMap, 20); waitForLayoutAndDrawStable(serialMap, 20);}, 100);continue; }if (isFiveTeam) { allMatches.sort((a, b) => parseInt(a.name) - parseInt(b.name)); const displayOrder = [allMatches[0], allMatches[2], allMatches[1], allMatches[3]]; groupMatches[columns[0]] = [allMatches[0]]; groupMatches[columns[1]] = [allMatches[2], allMatches[1]]; groupMatches[columns[2]] = [allMatches[3]]; let roundDiv1 = $("
").addClass("round").attr("data-column", columns[0]); let roundDiv2 = $("
").addClass("round").attr("data-column", columns[1]); let roundDiv3 = $("
").addClass("round").attr("data-column", columns[2]); displayOrder.forEach((match, i) => { const serial = groupSerialCounter++; const matchId = `match-serial-${group}-${serial}`; let matchDiv = $("
") .addClass("match") .attr("id", matchId) .attr("data-match-index", match.name);let score1 = match.team1_score ?? "-"; let score2 = match.team2_score ?? "-"; //let team1 = match.team_name1 ?? "Team 1"; //let team2 = match.team_name2 ?? "Team 2"; let team1 = match.source_label_team1 && match.source_label_team1.trim() !== "" ? match.source_label_team1 : (match.team_name1 ?? "Team 1"); let team2 = match.source_label_team2 && match.source_label_team2.trim() !== "" ? match.source_label_team2 : (match.team_name2 ?? "Team 2");let startTime = formatStartDateTime(match.start_date, match.start_time); let location = match.location || "";matchDiv.html(`
${match.name}
${startTime}
${location}
${team1} ${score1}
${team2} ${score2}
`); const matchContainer = $("
").addClass("match-container"); matchContainer.append(matchDiv);match.serial = serial; serialMap[`${group}-${serial}`] = { ...match, group, column: match.column_number, serial };if (i === 0) roundDiv1.append(matchContainer); else if (i === 1 || i === 2) roundDiv2.append(matchContainer); else if (i === 3) roundDiv3.append(matchContainer); });columnsContainer.append(roundDiv1); columnsContainer.append($("
").addClass("connector-column")); columnsContainer.append(roundDiv2); columnsContainer.append($("
").addClass("connector-column")); columnsContainer.append(roundDiv3);groupDiv.append(columnsContainer); groupScrollWrapper.append(groupDiv);const groupNumbers = Object.keys(groups); // make sure 'groups' is defined and validconst importantMatchExists = Object.values(groupMatches) .flat() .some(m => m.is_importantlast === "1");setTimeout(() => { if (importantMatchExists) { const currentGroupNumber = group; const currentIndex = groupNumbers.indexOf(currentGroupNumber); const prevGroupNumber = currentIndex > 0 ? groupNumbers[currentIndex - 1] : null; const lastChecked = true;positionMatcheslast(groupMatches, currentGroupNumber, prevGroupNumber, lastChecked); } positionMatches(groupMatches, group); //waitForLayoutAndDraw(serialMap, 20); waitForLayoutAndDrawStable(serialMap, 20);}, 100);continue; }if (isSevenTeam) { allMatches.sort((a, b) => parseInt(a.name) - parseInt(b.name));const displayOrder = [ allMatches[0], // Match 1 allMatches[1], // Match 2 allMatches[2], // Match 3 allMatches[3], // Match 4 allMatches[4], // Match 5 allMatches[5] // Match 6 ];// Use only the first 3 columns for layout let roundDiv1 = $("
").addClass("round").attr("data-column", columns[0]); let roundDiv2 = $("
").addClass("round").attr("data-column", columns[1]); let roundDiv3 = $("
").addClass("round").attr("data-column", columns[2]);displayOrder.forEach((match, i) => { const serial = groupSerialCounter++; const matchId = `match-serial-${group}-${serial}`;let matchDiv = $("
") .addClass("match") .attr("id", matchId) .attr("data-match-index", match.name);let score1 = match.team1_score ?? "-"; let score2 = match.team2_score ?? "-"; //let team1 = match.team_name1 ?? "Team 1"; //let team2 = match.team_name2 ?? "Team 2"; let team1 = match.source_label_team1 && match.source_label_team1.trim() !== "" ? match.source_label_team1 : (match.team_name1 ?? "Team 1"); let team2 = match.source_label_team2 && match.source_label_team2.trim() !== "" ? match.source_label_team2 : (match.team_name2 ?? "Team 2");let startTime = formatStartDateTime(match.start_date, match.start_time); let location = match.location || "";matchDiv.html(`
${match.name}
${startTime}
${location}
${team1} ${score1}
${team2} ${score2}
`);const matchContainer = $("
").addClass("match-container"); matchContainer.append(matchDiv);match.serial = serial; if (!groupMatches["1"]) groupMatches["1"] = []; groupMatches["1"].push(match); serialMap[`${group}-${serial}`] = { ...match, group, column: match.column_number, serial };if (i < 3) { roundDiv1.append(matchContainer); // Matches 0,1,2 } else if (i < 5) { roundDiv2.append(matchContainer); // Matches 3,4 } else { roundDiv3.append(matchContainer); // Match 5 }});columnsContainer.append(roundDiv1); columnsContainer.append($("
").addClass("connector-column")); columnsContainer.append(roundDiv2); columnsContainer.append($("
").addClass("connector-column")); columnsContainer.append(roundDiv3);groupDiv.append(columnsContainer); groupScrollWrapper.append(groupDiv);const groupNumbers = Object.keys(groups); // make sure 'groups' is defined and validconst importantMatchExists = Object.values(groupMatches) .flat() .some(m => m.is_importantlast === "1");setTimeout(() => { if (importantMatchExists) { const currentGroupNumber = group; const currentIndex = groupNumbers.indexOf(currentGroupNumber); const prevGroupNumber = currentIndex > 0 ? groupNumbers[currentIndex - 1] : null; const lastChecked = true;positionMatcheslast(groupMatches, currentGroupNumber, prevGroupNumber, lastChecked); } positionMatches(groupMatches, group); //waitForLayoutAndDraw(serialMap, 20); waitForLayoutAndDrawStable(serialMap, 20);}, 100);continue; } columns.forEach((column, columnIndex) => { groups[group][column].sort((a, b) => parseInt(a.name) - parseInt(b.name)); let roundDiv = $("
").addClass("round").attr("data-column", column); groupMatches[column] = [];groups[group][column].forEach(match => { const serial = groupSerialCounter++; const matchId = `match-serial-${group}-${serial}`;let matchDiv = $("
") .addClass("match") .attr("id", matchId) .attr("data-match-index", match.name);let score1 = match.team1_score ?? "-"; let score2 = match.team2_score ?? "-"; //let team1 = match.team_name1 ?? "Team 1"; //let team2 = match.team_name2 ?? "Team 2"; let team1 = match.source_label_team1 && match.source_label_team1.trim() !== "" ? match.source_label_team1 : (match.team_name1 ?? "Team 1"); let team2 = match.source_label_team2 && match.source_label_team2.trim() !== "" ? match.source_label_team2 : (match.team_name2 ?? "Team 2"); let startTime = formatStartDateTime(match.start_date, match.start_time); let location = match.location || "";matchDiv.html(`
${match.name}
${startTime}
${location}
${team1} ${score1}
${team2} ${score2}
`);const matchContainer = $("
").addClass("match-container"); matchContainer.append(matchDiv); roundDiv.append(matchContainer);match.serial = serial; serialMap[`${group}-${serial}`] = { ...match, group, column, serial };groupMatches[column].push(match); });columnsContainer.append(roundDiv); if (columnIndex < columns.length - 1) { columnsContainer.append($("
").addClass("connector-column")); } });groupDiv.append(columnsContainer); groupScrollWrapper.append(groupDiv);const groupNumbers = Object.keys(groups); // make sure 'groups' is defined and validconst importantMatchExists = Object.values(groupMatches) .flat() .some(m => m.is_importantlast === "1");setTimeout(() => { if (importantMatchExists) { const currentGroupNumber = group; const currentIndex = groupNumbers.indexOf(currentGroupNumber); const prevGroupNumber = currentIndex > 0 ? groupNumbers[currentIndex - 1] : null; const lastChecked = true;positionMatcheslast(groupMatches, currentGroupNumber, prevGroupNumber, lastChecked); }positionMatches(groupMatches, group); //waitForLayoutAndDraw(serialMap, 20); waitForLayoutAndDrawStable(serialMap, 20); }, 100);}bracketDiv.append(groupScrollWrapper);const observer = new MutationObserver(() => { const visible = $(".bracket_wrapper:visible").length > 0; if (visible) { setTimeout(() => { //waitForLayoutAndDraw(window._lastSerialMap || {}, 20); waitForLayoutAndDrawStable(window._lastSerialMap || {}, 20);}, 100); } });observer.observe(document.body, { childList: true, subtree: true }); window.globalSerialMap = serialMap; } function isElementVisible(el) { if (!el) return false; const style = window.getComputedStyle(el); const rect = el.getBoundingClientRect();return ( style.display !== 'none' && style.visibility !== 'hidden' && style.opacity !== '0' && rect.width > 0 && rect.height > 0 && document.body.contains(el) ); }function positionMatcheslast(groupMatches, group, prevGroupNumber, isLastCheckboxChecked = false) { if (!isLastCheckboxChecked) { // If checkbox not checked, hide and clear SVG just in case const existingSvg = document.getElementById('global-connector-svg'); if (existingSvg) { existingSvg.style.display = 'none'; while (existingSvg.firstChild) existingSvg.removeChild(existingSvg.firstChild); console.log("❌ Checkbox not checked — hiding SVG and clearing lines."); } return; }const prevGroup = document.querySelector(`.group[data-group="${prevGroupNumber}"]`); const currGroup = document.querySelector(`.group[data-group="${group}"]`);let svg = document.getElementById('global-connector-svg'); if (!svg) { svg = document.createElementNS("http://www.w3.org/2000/svg", "svg"); svg.id = 'global-connector-svg'; svg.style.position = 'absolute'; svg.style.top = '0'; svg.style.left = '0'; svg.style.zIndex = '9999'; svg.style.pointerEvents = 'none'; document.body.appendChild(svg); console.log("📦 Created global SVG container with id='global-connector-svg'"); }// Always update size svg.style.width = document.documentElement.scrollWidth + 'px'; svg.style.height = document.documentElement.scrollHeight + 'px';if (isElementVisible(prevGroup) && isElementVisible(currGroup)) { const prevRect = prevGroup.getBoundingClientRect(); const currRect = currGroup.getBoundingClientRect();const prevPos = { x: prevRect.left + window.scrollX + prevRect.width, y: prevRect.top + window.scrollY + prevRect.height / 2 };const currPos = { x: currRect.left + window.scrollX, y: currRect.top + window.scrollY + currRect.height / 2 };// Clear old lines while (svg.firstChild) { svg.removeChild(svg.firstChild); }// Draw new line const line = document.createElementNS("http://www.w3.org/2000/svg", "line"); line.setAttribute("x1", prevPos.x); line.setAttribute("y1", prevPos.y); line.setAttribute("x2", currPos.x); line.setAttribute("y2", currPos.y); line.setAttribute("stroke", "#999"); line.setAttribute("stroke-width", "2");svg.appendChild(line);svg.style.display = 'block'; // show SVG console.log("✅ Line appended to global SVG and SVG shown"); } else { // No visible groups → clear and hide SVG while (svg.firstChild) { svg.removeChild(svg.firstChild); } svg.style.display = 'none'; console.warn("⚠️ One or both group elements are hidden or missing — hiding SVG"); } }function formatStartDateTime(start_date, start_time) { // Check for null, undefined, or empty values if (!start_date || !start_time || typeof start_time !== 'string' || !start_time.includes(' ')) { return ""; }const timePart = start_time.split(' ')[1]; if (!timePart) return "";const timeObj = new Date(`1970-01-01T${timePart}`); if (isNaN(timeObj.getTime())) { return ""; }// Convert start_date from "YYYY-MM-DD" to "MM/DD/YYYY" const [year, month, day] = start_date.split('-'); if (!year || !month || !day) return "";const formattedDate = `${month}/${day}/${year}`;const timeFormatted = timeObj.toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit', hour12: true, // 24-hour format });return `${formattedDate} ${timeFormatted} EST`; }function positionMatches(groupMatches, group) { const levels = Object.keys(groupMatches).sort((a, b) => +a - +b); const matchCenters = {}; const spacing = 200; let bottomMost = 0; const totalMatches = Object.values(groupMatches).flat().length; const isFiveTeamLayout = totalMatches === 4; const isSixTeamLayout = totalMatches === 5; const isSevenTeamLayout = totalMatches === 6; const isTenTeamLayout = totalMatches === 9; const isNineTeamLayout = totalMatches === 8; const isTwelveTeamLayout = totalMatches === 11;if (isTwelveTeamLayout) { const serialPositions = { 1: 200, // Round 1 2: 400, 3: 600, 4: 800, 5: 100, 6: 300, // Quarterfinals 7: 500, 8: 700, 9: 200, 10: 600, // Semifinal 1 11: 400 // Final };// Position matches Object.keys(serialPositions).forEach((serialStr) => { const serial = parseInt(serialStr); const $match = $(`#match-serial-${group}-${serial}`).closest(".match-container"); if ($match.length) { const y = serialPositions[serial]; $match.css({ position: "absolute", top: `${y}px` }); matchCenters[serial] = y + $match.outerHeight() / 2; bottomMost = Math.max(bottomMost, y + $match.outerHeight()); } });// Draw connector lines (you may need to tweak based on actual match setup) drawConnectorLine(group, 1, 5, 'left', 'bottom'); drawConnectorLine(group, 2, 6, 'left', 'bottom'); drawConnectorLine(group, 3, 7, 'left', 'bottom'); drawConnectorLine(group, 4, 8, 'left', 'bottom'); drawConnectorLine(group, 5, 9, 'right', 'top'); drawConnectorLine(group, 6, 9, 'right', 'bottom'); drawConnectorLine(group, 7, 10, 'right', 'top'); drawConnectorLine(group, 8, 10, 'right', 'bottom'); drawConnectorLine(group, 9, 11, 'right', 'top'); drawConnectorLine(group, 10, 11, 'right', 'bottom'); drawChampionLine(group, 11);$(`.group[data-group="${group}"]`).css("height", `${bottomMost + 250}px`); return; }if (isNineTeamLayout) { const serialPositions = { 1: 200, // Game 1 (Round 1) 2: 100, // Game 2 (Round 2) 3: 300, // Game 3 4: 500, // Game 4 5: 700, // Game 5 6: 200, // Game 6 (Round 3) 7: 600, // Game 7 8: 400 // Game 8 (Final) };[1, 2, 3, 4, 5, 6, 7, 8].forEach((serial) => { const $match = $(`#match-serial-${group}-${serial}`).closest(".match-container"); if ($match.length) { const y = serialPositions[serial]; $match.css({ position: "absolute", top: `${y}px` }); matchCenters[serial] = y + $match.outerHeight() / 2; bottomMost = Math.max(bottomMost, y + $match.outerHeight()); } }); // Draw connector lines based on logical flow drawConnectorLine(group, 1, 2); // Game 1 → Game 2 drawConnectorLine(group, 2, 6); // Game 2 → Game 6 drawConnectorLine(group, 3, 6); // Game 3 → Game 6 drawConnectorLine(group, 4, 7); // Game 4 → Game 7 drawConnectorLine(group, 5, 7); // Game 5 → Game 7 drawConnectorLine(group, 6, 8); // Game 6 → Game 8 drawConnectorLine(group, 7, 8); // Game 7 → Game 8 drawChampionLine(group, 8);bottomMost = 0; [1, 2, 3, 4, 5, 6, 7, 8].forEach((serial) => { const $match = $(`#match-serial-${group}-${serial}`).closest(".match-container"); if ($match.length) { const y = serialPositions[serial]; $match.css({ position: "absolute", top: `${y}px` }); matchCenters[serial] = y + $match.outerHeight() / 2; bottomMost = Math.max(bottomMost, y + $match.outerHeight()); } }); drawChampionLine(group, 8); // Apply accurate height to container $(`.group[data-group="${group}"]`).css("height", `${bottomMost + 250}px`); return; }// Ten Team Layout if (isTenTeamLayout) { const serialPositions = { 1: 200, 2: 600, 3: 100, 4: 300, 5: 500, 6: 700, 7: 200, 8: 600, 9: 400 };// Loop through matches 1 to 9 to set positions [1, 2, 3, 4, 5, 6, 7, 8, 9].forEach((serial) => { const $match = $(`#match-serial-${group}-${serial}`).closest(".match-container"); if ($match.length) { const y = serialPositions[serial]; $match.css({ position: "absolute", top: `${y}px` }); matchCenters[serial] = y + $match.outerHeight() / 2; bottomMost = Math.max(bottomMost, y + $match.outerHeight()); } });// Draw connector lines for Round 1, 2, and 3 drawConnectorLine(group, 1, 3, 'left', 'bottom'); drawConnectorLine(group, 2, 5, 'left', 'bottom'); drawConnectorLine(group, 3, 7, 'right', 'top'); drawConnectorLine(group, 4, 7, 'right', 'bottom'); drawConnectorLine(group, 5, 8, 'right', 'top'); drawConnectorLine(group, 6, 8, 'right', 'bottom'); drawConnectorLine(group, 7, 9, 'right', 'top'); drawConnectorLine(group, 8, 9, 'right', 'bottom'); drawChampionLine(group, 9);bottomMost = 0; [1, 2, 3, 4, 5, 6, 7, 8, 9].forEach((serial) => { const $match = $(`#match-serial-${group}-${serial}`).closest(".match-container"); if ($match.length) { const y = serialPositions[serial]; $match.css({ position: "absolute", top: `${y}px` }); matchCenters[serial] = y + $match.outerHeight() / 2; bottomMost = Math.max(bottomMost, y + $match.outerHeight()); } }); drawChampionLine(group, 9); $(`.group[data-group="${group}"]`).css("height", `${bottomMost + 250}px`); return; } if (isSevenTeamLayout) { const matchCenters = {}; let bottomMost = 0;// More generous vertical spacing between 1 → 2 → 3 (adjusted for more matches) const serialPositions = { 1: 0, // Match 1 at the top 2: 180, // Match 2 below Match 1 3: 400, // Match 3 below Match 2 4: 620, // Match 4 below Match 3 (between 1 & 2) 5: 840, // Match 5 below Match 4 (between 2 & 3) 6: 1060, // Match 6 below Match 5 (between 4 & 5) 7: 1280 // Match 7 at the bottom (below Match 6) };// Position Matches 1–7 (Play-ins) [1, 2, 3, 4, 5, 6, 7].forEach((serial) => { const $match = $(`#match-serial-${group}-${serial}`).closest(".match-container"); if ($match.length) { const y = serialPositions[serial]; $match.css({ position: "absolute", top: `${y}px` }); matchCenters[serial] = y + $match.outerHeight() / 2; bottomMost = Math.max(bottomMost, y + $match.outerHeight()); } }); console.log('Height1'+bottomMost); // Adjust positions for the additional matches if necessary: // Match 4: between 1 & 2 (Positioned earlier in `serialPositions`) const $match4 = $(`#match-serial-${group}-4`).closest(".match-container"); if ($match4.length) { const centerY = (matchCenters[1] + matchCenters[2]) / 2 - $match4.outerHeight() / 2; $match4.css({ position: "absolute", top: `${centerY}px` }); matchCenters[4] = centerY + $match4.outerHeight() / 2; bottomMost = Math.max(bottomMost, centerY + $match4.outerHeight()); }// Match 5: between 2 and 3 — center with slight right offset const $match5 = $(`#match-serial-${group}-5`).closest(".match-container"); if ($match5.length && matchCenters[2] && matchCenters[3]) { const centerY = (matchCenters[2] + matchCenters[3]) / 2 - $match5.outerHeight() / 2; const rightOffset = 40; // slight offset to center horizontally $match5.css({ position: "absolute", top: `${centerY}px` }); matchCenters[5] = centerY + $match5.outerHeight() / 2; bottomMost = Math.max(bottomMost, centerY + $match5.outerHeight()); }// Match 6: between match 4 and 5, centered to the right const $match6 = $(`#match-serial-${group}-6`).closest(".match-container"); if ($match6.length && matchCenters[4] && matchCenters[5]) { const centerY = (matchCenters[4] + matchCenters[5]) / 2 - $match6.outerHeight() / 2; const rightOffset = 60; // adjust as needed for proper placement $match6.css({ position: "absolute", top: `${centerY}px` }); matchCenters[6] = centerY + $match6.outerHeight() / 2; bottomMost = Math.max(bottomMost, centerY + $match6.outerHeight()); }// Match 7: below match 6, at the bottom-most position const $match7 = $(`#match-serial-${group}-7`).closest(".match-container"); if ($match7.length && matchCenters[6]) { const centerY = matchCenters[6] + 180; // 180px down from match 6 $match7.css({ position: "absolute", top: `${centerY}px` }); matchCenters[7] = centerY + $match7.outerHeight() / 2; bottomMost = Math.max(bottomMost, centerY + $match7.outerHeight()); }// Draw connector lines between matches drawConnectorLine(group, 1, 4); drawConnectorLine(group, 2, 5); drawConnectorLine(group, 3, 5); drawConnectorLine(group, 4, 6); drawConnectorLine(group, 5, 6); drawConnectorLine(group, 6, 7); // Adding connector line for Match 7 drawChampionLine(group, 7);// Set container height based on the bottom-most position // Recalculate actual bottom-most point after all matches are positioned bottomMost = 0; [1, 2, 3, 4, 5, 6, 7].forEach((serial) => { const $match = $(`#match-serial-${group}-${serial}`).closest(".match-container"); if ($match.length) { const top = parseFloat($match.css("top")) || 0; const height = $match.outerHeight() || 0; bottomMost = Math.max(bottomMost, top + height); } }); // Apply accurate height to container drawChampionLine(group, 6); $(`.group[data-group="${group}"]`).css("height", `${bottomMost + 250}px`); return; } if (isSixTeamLayout) { const serialPositions = { 1: 225, // Game 1 2: 400, // Game 2 3: 100, // Game 3 (Winner G1 vs Team 5) 4: 525, // Game 4 (Winner G2 vs Team 6) 5: 300 // Game 5 (Final) };[1, 2, 3, 4, 5].forEach((serial) => { const $match = $(`#match-serial-${group}-${serial}`).closest(".match-container"); if ($match.length) { const y = serialPositions[serial]; $match.css({ position: "absolute", top: `${y}px` }); matchCenters[serial] = y + $match.outerHeight() / 2; bottomMost = Math.max(bottomMost, y + $match.outerHeight()); } });// Draw correct connector lines //drawConnectorLine(group, 1, 3, 'right', 'top'); //drawConnectorLine(group, 2, 4, 'right', 'bottom'); //drawConnectorLine(group, 3, 5, 'right', 'top'); //drawConnectorLine(group, 4, 5, 'right', 'bottom');// Adjust container height bottomMost = 0; [1, 2, 3, 4, 5].forEach((serial) => { const $match = $(`#match-serial-${group}-${serial}`).closest(".match-container"); if ($match.length) { const top = parseFloat($match.css("top")) || 0; const height = $match.outerHeight() || 0; bottomMost = Math.max(bottomMost, top + height); } }); drawChampionLine(group, 5); $(`.group[data-group="${group}"]`).css("height", `${bottomMost + 250}px`); return; }// Helper function function drawConnectorLine(group, fromSerial, toSerial) { const fromEl = $(`#match-serial-${group}-${fromSerial}`).closest(".match-container"); const toEl = $(`#match-serial-${group}-${toSerial}`).closest(".match-container");if (!fromEl.length || !toEl.length) { console.warn(`Cannot draw line: from ${fromSerial} or to ${toSerial} not found.`); return; }const $group = $(`.group[data-group="${group}"]`); const $svg = $group.find("svg.connector-layer");if (!$svg.length) { console.warn(`Missing SVG layer in group ${group}`); return; }const fromOffset = fromEl.position(); const toOffset = toEl.position();const fromX = fromEl.position().left + fromEl.outerWidth(); const fromY = fromOffset.top + fromEl.outerHeight() / 2; const toX = toEl.position().left; const toY = toOffset.top + toEl.outerHeight() / 2;const line = document.createElementNS("http://www.w3.org/2000/svg", "line"); line.setAttribute("x1", fromX); line.setAttribute("y1", fromY); line.setAttribute("x2", toX); line.setAttribute("y2", toY); line.setAttribute("stroke", "#333"); line.setAttribute("stroke-width", "2");$svg.append(line); }// Positioning for 5-team layout if (isFiveTeamLayout) { const serialPositions = { 1: 200, // First round (Play-in) 3: 80, // Semifinal 1 (top) 2: 320, // Semifinal 2 (bottom) 4: 200 // Final (centered between semi 1 and 2) };Object.entries(groupMatches).forEach(([level, matches]) => { matches.forEach((match) => { const matchId = `match-serial-${group}-${match.serial}`; const $el = $(`#${matchId}`).closest(".match-container");if (!$el.length) return;const y = serialPositions[match.serial] ?? 0; $el.css({ position: "absolute", top: `${y}px` });matchCenters[match.serial] = y + $el.outerHeight() / 2; bottomMost = Math.max(bottomMost, y + $el.outerHeight()); }); }); drawChampionLine(group, 4); $(`.group[data-group="${group}"]`).css("height", bottomMost + 160); return; }// Default layout for other brackets levels.forEach((level, levelIndex) => { const matches = groupMatches[level];matches.forEach((match, i) => { const matchId = `match-serial-${group}-${match.serial}`; const $el = $(`#${matchId}`).closest(".match-container");if (!$el.length) return;if (levelIndex === 0) { const pairIndex = Math.floor(i / 2); const y = i * spacing + pairIndex * 40; $el.css({ position: "absolute", top: `${y}px` }); matchCenters[match.serial] = y + $el.outerHeight() / 2; bottomMost = Math.max(bottomMost, y + $el.outerHeight()); } else { const prevLevel = levels[levelIndex - 1]; const prevMatches = groupMatches[prevLevel]; const prev1 = prevMatches[i * 2]; const prev2 = prevMatches[i * 2 + 1];if (prev1 && prev2) { const center1 = matchCenters[prev1.serial]; const center2 = matchCenters[prev2.serial]; const centerY = (center1 + center2) / 2; const topOffset = centerY - $el.outerHeight() / 2; $el.css({ position: "absolute", top: `${topOffset}px` }); matchCenters[match.serial] = centerY; bottomMost = Math.max(bottomMost, topOffset + $el.outerHeight()); } } }); });$(`.group[data-group="${group}"]`).css("height", bottomMost + 180); const lastLevel = levels[levels.length - 1]; const lastMatch = groupMatches[lastLevel]?.[0]; if (lastMatch) drawChampionLine(group, lastMatch.serial);} function drawChampionLine(group, finalMatchSerial) { console.log(`drawChampionLine called with group=${group}, finalMatchSerial=${finalMatchSerial}`);const finalMatch = $(`#match-serial-${group}-${finalMatchSerial}`).closest(".match-container"); if (!finalMatch.length) { console.warn("Final match element not found"); return; }const $group = $(`.group[data-group="${group}"]`); let $svg = $group.find("svg.connector-layer");if (!$svg.length) { console.warn(`Missing SVG layer in group ${group}, creating one.`); $svg = $(``); $group.append($svg); }const matchOffset = finalMatch.offset(); const svgOffset = $svg.offset();const matchRightX = matchOffset.left - svgOffset.left + finalMatch.outerWidth(); const matchCenterY = matchOffset.top - svgOffset.top + finalMatch.outerHeight() / 2;const $teams = finalMatch.find(".team-row"); let championName = ""; let highScore = -1;$teams.each(function () { const teamName = $(this).find(".team-name").text().trim(); const score = parseInt($(this).find(".score").text().trim(), 10); if (!isNaN(score) && score > 0 && score > highScore) { highScore = score; championName = teamName; } });if (!championName) { console.warn("Could not determine champion team"); return; }const lowerChampionName = championName.toLowerCase(); const skipKeywords = ["winner", "winner of game"]; const shouldSkip = skipKeywords.some(keyword => lowerChampionName.includes(keyword));if (shouldSkip) { console.log(`Skipping champion line: name "${championName}" includes skip keyword.`); return; }console.log(`Champion team: ${championName} with score ${highScore}`);const svgNS = "http://www.w3.org/2000/svg"; const lineLength = 180; const offsetY = 29; // how much to move everything down from matchCenterYconst lineY = matchCenterY + offsetY;// Draw line const line = document.createElementNS(svgNS, "line"); line.setAttribute("x1", matchRightX); line.setAttribute("y1", lineY); line.setAttribute("x2", matchRightX + lineLength); line.setAttribute("y2", lineY); line.setAttribute("stroke", "#ccc"); line.setAttribute("stroke-width", "2"); $svg.append(line);const centerX = matchRightX + lineLength / 2; // Champion name (above the line) const nameText = document.createElementNS(svgNS, "text"); nameText.setAttribute("x", centerX); nameText.setAttribute("y", lineY - 16); // slightly above the line nameText.setAttribute("text-anchor", "middle"); nameText.setAttribute("font-size", "15px"); nameText.setAttribute("font-weight", "bold"); nameText.setAttribute("fill", "#000"); nameText.setAttribute("style", "text-shadow: 1px 1px 2px #ccc;"); nameText.textContent = `🏆 ${championName}`; $svg.append(nameText);// "Champion" label (below the line) const championText = document.createElementNS(svgNS, "text"); championText.setAttribute("x", centerX); championText.setAttribute("y", lineY + 26); // slightly below the line championText.setAttribute("text-anchor", "middle"); championText.setAttribute("font-size", "14px"); championText.setAttribute("font-style", "italic"); championText.setAttribute("fill", "#000"); championText.setAttribute("style", "text-shadow: 1px 1px 1px #eee;"); championText.textContent = "Champion"; $svg.append(championText);console.log("Champion line and labels drawn."); }function debounce(func, delay) { let timeout; return function (...args) { clearTimeout(timeout); timeout = setTimeout(() => func.apply(this, args), delay); }; } function waitForLayoutAndDraw(serialMap, maxTries = 10) { if (window._isDrawingScheduled) return;window._isDrawingScheduled = true; window._lastSerialMap = serialMap;let tries = 0;function tryDraw() { const wrapper = document.querySelector(".bracket_wrapper");if (!wrapper) { if (tries < maxTries) { tries++; requestAnimationFrame(tryDraw); } else { window._isDrawingScheduled = false; // Reset if failed after all tries } return; }const rect = wrapper.getBoundingClientRect(); if (rect.width < 100 || rect.height < 100) { if (tries < maxTries) { tries++; requestAnimationFrame(tryDraw); } else { window._isDrawingScheduled = false; } return; }// ✅ Only draw once per layout session if (!wrapper.dataset.hasDrawn) { drawBracketConnectors(serialMap, true); wrapper.dataset.hasDrawn = "true"; // 🔽 🔽 Add this block here 🔽 🔽 document.querySelectorAll('.group').forEach(group => { const maxHeight = 900; if (group.offsetHeight > maxHeight && !group.classList.contains('group-scroll')) { group.classList.add('group-scroll'); console.log("✅ group-scroll added to:", group); } }); }// 🟢 Reset the flag after a short time (if needed later) setTimeout(() => { window._isDrawingScheduled = false; wrapper.dataset.hasDrawn = ""; // Allow future redraws if needed }, 1000);// 🟢 Add scroll listener once if (!wrapper.dataset.scrollListenerAdded) { console.log("Ketan testing"); wrapper.addEventListener( "scroll", debounce(() => drawBracketConnectors(window._lastSerialMap, true), 100) ); wrapper.dataset.scrollListenerAdded = "true"; } }requestAnimationFrame(tryDraw); }function waitForLayoutAndDrawStable(serialMap, maxTries = 10) { let tries = 0;function attempt() { const wrapper = document.querySelector(".bracket_wrapper"); const groupReady = Array.from(document.querySelectorAll(".group")).every(el => el.offsetHeight > 200);if (!groupReady && tries < maxTries) { tries++; return setTimeout(attempt, 100); // Wait for layout }waitForLayoutAndDraw(serialMap); // ⬅️ Only call once layout is stable }attempt(); } function drawBracketConnectors(serialMap, forceRedraw = false) { console.log("Ketan test"); const svgNS = "http://www.w3.org/2000/svg"; let svg = document.getElementById("bracket-connector-svg"); const wrapper = document.querySelector(".bracket_wrapper");const wrapperRect = wrapper.getBoundingClientRect(); const scrollLeft = wrapper.scrollLeft; const scrollTop = wrapper.scrollTop;if (!svg) { svg = document.createElementNS(svgNS, "svg"); svg.setAttribute("id", "bracket-connector-svg"); svg.style.position = "absolute"; svg.style.top = "0"; svg.style.left = "0"; svg.style.pointerEvents = "none"; wrapper.appendChild(svg); }svg.style.width = wrapper.scrollWidth + "px"; svg.style.height = wrapper.scrollHeight + "px";const layoutHash = JSON.stringify( Object.values(serialMap).map(m => { const el = document.getElementById(`match-serial-${m.group}-${m.serial}`); const rect = el?.getBoundingClientRect(); return { serial: m.serial, group: m.group, column: m.column, rect: rect ? { top: rect.top, left: rect.left, width: rect.width, height: rect.height } : null }; }) );if (!forceRedraw && window._lastLayoutHash === layoutHash) return; window._lastLayoutHash = layoutHash;while (svg.firstChild) svg.removeChild(svg.firstChild);const groupMap = {}; for (const serial in serialMap) { const match = serialMap[serial]; if (!groupMap[match.group]) groupMap[match.group] = []; groupMap[match.group].push(match); }for (const group in groupMap) { const matches = groupMap[group].sort((a, b) => +a.serial - +b.serial); const matchMap = {};matches.forEach(match => { matchMap[match.serial] = match; match.el = document.getElementById(`match-serial-${group}-${match.serial}`); match.rect = match.el?.getBoundingClientRect(); });const isFiveMatch = matches.length === 4; const isThreeTeam = matches.length === 2 && matchMap["1"] && matchMap["2"]; if ( matches.length === 11 && matchMap["1"] && matchMap["2"] && matchMap["3"] && matchMap["4"] && matchMap["5"] && matchMap["6"] && matchMap["7"] && matchMap["8"] && matchMap["9"] && matchMap["10"] && matchMap["11"] ) { const m = matchMap;// Round 1 → Round 2 drawLConnectorCustom(m[1].rect, m[5].rect, "bottom", 40); drawLConnectorCustom(m[2].rect, m[6].rect, "bottom", 40);drawLConnectorCustom(m[3].rect, m[7].rect, "bottom", 40); drawLConnectorCustom(m[4].rect, m[8].rect, "bottom", 40);// Seeds 1-4 with byes go directly to M7–M10 // Assume M5 feeds M7, M6 feeds M8, and so ondrawLConnectorCustom(m[5].rect, m[9].rect, "top", 40); drawLConnectorCustom(m[6].rect, m[9].rect, "bottom", 40);drawLConnectorCustom(m[7].rect, m[10].rect, "top", 40); // adjust if seed logic differs drawLConnectorCustom(m[8].rect, m[10].rect, "bottom", 40);// Round 2 → Semifinal drawLConnectorCustom(m[9].rect, m[11].rect, "top", 40); drawLConnectorCustom(m[10].rect, m[11].rect, "bottom", 40);continue; }if ( matches.length === 9 && matchMap["1"] && matchMap["2"] && matchMap["3"] && matchMap["4"] && matchMap["5"] && matchMap["6"] && matchMap["7"] && matchMap["8"] && matchMap["9"] ) { const m1 = matchMap[1]; const m2 = matchMap[2]; const m3 = matchMap[3]; const m4 = matchMap[4]; const m5 = matchMap[5]; const m6 = matchMap[6]; const m7 = matchMap[7]; const m8 = matchMap[8]; const m9 = matchMap[9];// Round 1 if (m1?.rect && m5?.rect) drawLConnectorCustom(m1.rect, m3.rect, "bottom", 40); if (m2?.rect && m6?.rect) drawLConnectorCustom(m2.rect, m5.rect, "bottom", 40);// Round 2 if (m3?.rect && m7?.rect) drawLConnectorCustom(m3.rect, m7.rect, "top", 40); if (m4?.rect && m7?.rect) drawLConnectorCustom(m4.rect, m7.rect, "bottom", 40); if (m5?.rect && m8?.rect) drawLConnectorCustom(m5.rect, m8.rect, "top", 40); if (m6?.rect && m8?.rect) drawLConnectorCustom(m6.rect, m8.rect, "bottom", 40);// Round 3 (Final) if (m7?.rect && m9?.rect) drawLConnectorCustom(m7.rect, m9.rect, "top", 40); if (m8?.rect && m9?.rect) drawLConnectorCustom(m8.rect, m9.rect, "bottom", 40);continue; } if (matches.length === 5) { // Adjusted for 5 matches console.log("matches.length === 5", matches); // log matches array console.log("matchMap:", matchMap); // log matchMap objectconst m1 = matchMap[1]; const m2 = matchMap[2]; const m3 = matchMap[3]; const m4 = matchMap[4]; const m5 = matchMap[5]; // Remove m6 because it's not available// Round 1 → Round 2 // M1 → M4 (top) if (m1?.rect && m3?.rect) { console.log("Drawing connector for M1 to M3"); drawLConnectorCustom(m1.rect, m3.rect, "top", 40); }// M2 → M5 (top) if (m2?.rect && m4?.rect) { console.log("Drawing connector for M2 to M4"); drawLConnectorCustom(m2.rect, m4.rect, "top", 40); }// M3 → M5 (bottom) if (m3?.rect && m5?.rect) { console.log("Drawing connector for M3 to M5"); drawLConnectorCustom(m3.rect, m5.rect, "bottom", 40); }// Round 2 → Final // M4 → (no M6, adjust logic based on match availability) if (m4?.rect && m5?.rect) { console.log("Drawing connector for M4 to the final match"); // Draw a connector to the final match (if you have a final setup) // You might have a fallback if there's no M6 drawLConnectorCustom(m4.rect,m5.rect, "top", 40); }continue; // use continue, not return — don't break whole function }if (matches.length === 6 && matchMap["1"] && matchMap["2"] && matchMap["3"] && matchMap["4"] && matchMap["5"] && matchMap["6"]) {const m1 = matchMap[1]; const m2 = matchMap[2]; const m3 = matchMap[3]; const m4 = matchMap[4]; const m5 = matchMap[5]; const m6 = matchMap[6];// Round 1 → Round 2 // M1 → M4 (top) if (m1?.rect && m4?.rect) drawLConnectorCustom(m1.rect, m4.rect, "top", 40);// M2 → M5 (top) if (m2?.rect && m5?.rect) drawLConnectorCustom(m2.rect, m5.rect, "top", 40);// M3 → M5 (bottom) if (m3?.rect && m5?.rect) drawLConnectorCustom(m3.rect, m5.rect, "bottom", 40);// Round 2 → Final // M4 → M6 (top) if (m4?.rect && m6?.rect) drawLConnectorCustom(m4.rect, m6.rect, "top", 40);// M5 → M6 (bottom) if (m5?.rect && m6?.rect) drawLConnectorCustom(m5.rect, m6.rect, "bottom", 40);continue; }if (isThreeTeam) { console.log("This is a testing"); const fromMatch = matchMap[1]; const toMatch = matchMap[2];if (fromMatch?.rect && toMatch?.rect) { drawLConnectorCustom(fromMatch.rect, toMatch.rect, "right", 40); }continue; // only skip current group } /*if (matches.length === 5) { const m1 = matchMap[1], m2 = matchMap[2]; const m3 = matchMap[3], m4 = matchMap[4], m5 = matchMap[5];if (m1?.rect && m4?.rect) drawLConnectorCustom(m1.rect, m4.rect, "top", 40); if (m2?.rect && m4?.rect) drawLConnectorCustom(m2.rect, m4.rect, "bottom", 40); if (m3?.rect && m5?.rect) drawLConnectorCustom(m3.rect, m5.rect, "top", 40); if (m4?.rect && m5?.rect) drawLConnectorCustom(m4.rect, m5.rect, "bottom", 40); }*/if (isFiveMatch) { const s1 = matchMap[1], s2 = matchMap[2], s3 = matchMap[3], s4 = matchMap[4];if (s1?.rect && s3?.rect) drawLConnectorCustom(s1.rect, s2.rect, "top"); if (s2?.rect && s4?.rect) drawLConnectorCustom(s2.rect, s4.rect, "top", 40); if (s3?.rect && s4?.rect) drawLConnectorCustom(s3.rect, s4.rect, "bottom", 80);continue; // use continue, not return — don't break whole function }const columns = [...new Set(matches.map(m => +m.column))].sort((a, b) => a - b);for (let colIndex = 1; colIndex < columns.length; colIndex++) { const currentCol = columns[colIndex]; const prevCol = columns[colIndex - 1];const currentMatches = matches.filter(m => +m.column === currentCol); const prevMatches = matches.filter(m => +m.column === prevCol);for (let i = 0; i < currentMatches.length; i++) { const targetMatch = currentMatches[i]; const input1 = prevMatches[i * 2]; const input2 = prevMatches[i * 2 + 1];if (input1?.rect && input2?.rect && targetMatch?.rect) { drawLConnectorCustom(input1.rect, targetMatch.rect, "top", 40); drawLConnectorCustom(input2.rect, targetMatch.rect, "bottom", 40); } else if ((input1?.rect || input2?.rect) && targetMatch?.rect) { const fromRect = input1?.rect || input2?.rect; const direction = input1?.rect ? "top" : "bottom"; drawLConnectorCustom(fromRect, targetMatch.rect, direction, 40); } } }function drawLConnectorCustom(fromRect, toRect, toPoint = "center", elbowOffset = 40) { const startX = fromRect.right - wrapperRect.left + scrollLeft; const startY = fromRect.top + fromRect.height / 2 - wrapperRect.top + scrollTop;let toY; const headerOffset = 48;if (toPoint === "top") { toY = toRect.top + headerOffset + 10 - wrapperRect.top + scrollTop; } else if (toPoint === "bottom") { toY = toRect.bottom - 10 - wrapperRect.top + scrollTop; } else { toY = toRect.top + toRect.height / 2 - wrapperRect.top + scrollTop; }const endX = toRect.left - wrapperRect.left + scrollLeft + 5;const path = document.createElementNS(svgNS, "path"); path.setAttribute("stroke", "#999"); path.setAttribute("stroke-width", "1.5"); path.setAttribute("fill", "none"); path.setAttribute("stroke-linecap", "round");const d = ` M ${startX},${startY} H ${endX} V ${toY} `;path.setAttribute("d", d.trim().replace(/\s+/g, " ")); svg.appendChild(path); }function drawTConnector(fromRect, toRect) { const startX = fromRect.right - wrapperRect.left + scrollLeft; const startY = fromRect.top + fromRect.height / 2 - wrapperRect.top + scrollTop;const endX = toRect.left - wrapperRect.left + scrollLeft; const endY = toRect.top + toRect.height / 2 - wrapperRect.top + scrollTop; const midX = (startX + endX) / 2;const path1 = document.createElementNS(svgNS, "path"); path1.setAttribute("stroke", "#999"); path1.setAttribute("stroke-width", "1.5"); path1.setAttribute("fill", "none"); path1.setAttribute("stroke-linecap", "round"); path1.setAttribute("d", `M ${startX},${startY} H ${midX}`); svg.appendChild(path1);const path2 = document.createElementNS(svgNS, "path"); path2.setAttribute("stroke", "#999"); path2.setAttribute("stroke-width", "1.5"); path2.setAttribute("fill", "none"); path2.setAttribute("stroke-linecap", "round"); path2.setAttribute("d", `M ${endX},${endY} H ${midX}`); svg.appendChild(path2);const verticalLine = document.createElementNS(svgNS, "path"); verticalLine.setAttribute("stroke", "#999"); verticalLine.setAttribute("stroke-width", "1.5"); verticalLine.setAttribute("fill", "none"); verticalLine.setAttribute("stroke-linecap", "round"); verticalLine.setAttribute("d", `M ${midX},${startY} V ${endY}`); svg.appendChild(verticalLine); }function drawHorizontalConnector(fromRect, toRect) { const startX = fromRect.right - wrapperRect.left + scrollLeft; const startY = fromRect.top + fromRect.height / 2 - wrapperRect.top + scrollTop;const endX = toRect.left - wrapperRect.left + scrollLeft;const path = document.createElementNS(svgNS, "path"); path.setAttribute("stroke", "#999"); path.setAttribute("stroke-width", "1.5"); path.setAttribute("fill", "none"); path.setAttribute("stroke-linecap", "round");const d = `M ${startX},${startY} H ${endX}`; path.setAttribute("d", d.trim().replace(/\s+/g, " ")); svg.appendChild(path); }function drawRightThenVertical(fromRect, toRect, align = "top") { const startX = fromRect.right - wrapperRect.left + scrollLeft; const startY = fromRect.top + fromRect.height / 2 - wrapperRect.top + scrollTop; const elbowX = startX + 40;const toY = align === "top" ? toRect.top - wrapperRect.top + scrollTop : toRect.bottom - wrapperRect.top + scrollTop;const toX = toRect.left - wrapperRect.left + scrollLeft;const path = document.createElementNS(svgNS, "path"); path.setAttribute("stroke", "#888"); path.setAttribute("stroke-width", "4"); path.setAttribute("fill", "none"); path.setAttribute("stroke-linejoin", "round"); path.setAttribute("stroke-linecap", "round");const d = ` M ${startX},${startY} H ${elbowX} V ${toY} H ${toX} `; path.setAttribute("d", d.trim().replace(/\s+/g, " ")); svg.appendChild(path); }function drawLine(from, to) { if (!from?.rect || !to?.rect) return;const x1 = from.rect.right + scrollLeft - wrapperRect.left; const y1 = from.rect.top + from.rect.height / 2 + scrollTop - wrapperRect.top;const x2 = to.rect.left + scrollLeft - wrapperRect.left; const y2 = to.rect.top + to.rect.height / 2 + scrollTop - wrapperRect.top;const midX = (x1 + x2) / 2;const path = document.createElementNS(svgNS, "path"); path.setAttribute("stroke", "#999"); path.setAttribute("stroke-width", "2"); path.setAttribute("fill", "none"); path.setAttribute("d", `M ${x1},${y1} H ${midX} V ${y2} H ${x2}`); svg.appendChild(path); }function drawDefaultConnect(input1, input2, targetMatch) { if (!input1?.rect || !input2?.rect || !targetMatch?.rect) return;const x1 = input1.rect.right + scrollLeft - wrapperRect.left; const y1 = input1.rect.top + input1.rect.height / 2 + scrollTop - wrapperRect.top;const x2 = input2.rect.right + scrollLeft - wrapperRect.left; const y2 = input2.rect.top + input2.rect.height / 2 + scrollTop - wrapperRect.top;const toX = targetMatch.rect.left + scrollLeft - wrapperRect.left; const toY = targetMatch.rect.top + targetMatch.rect.height / 2 + scrollTop - wrapperRect.top;const midX = (x1 + toX) / 2; const midY = (y1 + y2) / 2;const path = document.createElementNS(svgNS, "path"); path.setAttribute("stroke", "#999"); path.setAttribute("stroke-width", "2"); path.setAttribute("fill", "none");const d = ` M ${x1},${y1} H ${midX} M ${x2},${y2} H ${midX} M ${midX},${y1} V ${y2} M ${midX},${midY} H ${toX} `; path.setAttribute("d", d.trim().replace(/\s+/g, ' ')); svg.appendChild(path); } } }
×

Request for More Info