<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://glolfwiki.sibr.dev/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Pokeylope</id>
	<title>Glolf Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://glolfwiki.sibr.dev/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Pokeylope"/>
	<link rel="alternate" type="text/html" href="https://glolfwiki.sibr.dev/w/Special:Contributions/Pokeylope"/>
	<updated>2026-06-02T20:02:41Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.2</generator>
	<entry>
		<id>https://glolfwiki.sibr.dev/index.php?title=Module:Glolfer&amp;diff=310</id>
		<title>Module:Glolfer</title>
		<link rel="alternate" type="text/html" href="https://glolfwiki.sibr.dev/index.php?title=Module:Glolfer&amp;diff=310"/>
		<updated>2021-08-30T16:33:49Z</updated>

		<summary type="html">&lt;p&gt;Pokeylope: Fix needlethreadableness rating&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local pyrandom = require &amp;quot;Module:Pyrandom&amp;quot;&lt;br /&gt;
&lt;br /&gt;
function titlecase(str)&lt;br /&gt;
	local buf = {}&lt;br /&gt;
	local inWord = false&lt;br /&gt;
	for i = 1, #str do&lt;br /&gt;
		local c = string.sub(str, i, i)&lt;br /&gt;
		if inWord then&lt;br /&gt;
			table.insert(buf, string.lower(c))&lt;br /&gt;
		else&lt;br /&gt;
			table.insert(buf, string.upper(c))&lt;br /&gt;
		end&lt;br /&gt;
		inWord = (string.find(c, '%a') ~= nil)&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat(buf)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function random_player_emoji(name)&lt;br /&gt;
	local humanoid = {&lt;br /&gt;
		&amp;quot;👶&amp;quot;,&amp;quot;👧&amp;quot;,&amp;quot;🧒&amp;quot;,&amp;quot;👦&amp;quot;,&amp;quot;👩&amp;quot;,&amp;quot;🧑&amp;quot;,&amp;quot;👨&amp;quot;,&amp;quot;👩‍🦱&amp;quot;,&amp;quot;🧑‍🦱&amp;quot;,&amp;quot;👨‍🦱&amp;quot;,&amp;quot;👩‍🦰&amp;quot;,&amp;quot;🧑‍🦰&amp;quot;,&amp;quot;👨‍🦰&amp;quot;,&amp;quot;👱‍♀️&amp;quot;,&lt;br /&gt;
		&amp;quot;👱&amp;quot;,&amp;quot;👱‍♂️&amp;quot;,&amp;quot;👩‍🦳&amp;quot;,&amp;quot;🧑‍🦳&amp;quot;,&amp;quot;👨‍🦳&amp;quot;,&amp;quot;👩‍🦲&amp;quot;,&amp;quot;🧑‍🦲&amp;quot;,&amp;quot;👨‍🦲&amp;quot;,&amp;quot;🧔&amp;quot;,&amp;quot;👵&amp;quot;,&amp;quot;🧓&amp;quot;,&amp;quot;👴&amp;quot;,&amp;quot;👲&amp;quot;,&amp;quot;👳‍♀️&amp;quot;,&lt;br /&gt;
		&amp;quot;👳&amp;quot;,&amp;quot;👳‍♂️&amp;quot;,&amp;quot;🧕&amp;quot;,&amp;quot;👮‍♀️&amp;quot;,&amp;quot;👮&amp;quot;,&amp;quot;👮‍♂️&amp;quot;,&amp;quot;👷‍♀️&amp;quot;,&amp;quot;👷&amp;quot;,&amp;quot;👷‍♂️&amp;quot;,&amp;quot;💂‍♀️&amp;quot;,&amp;quot;💂&amp;quot;,&amp;quot;💂‍♂️&amp;quot;,&amp;quot;🕵️‍♀️&amp;quot;,&amp;quot;🕵️&amp;quot;,&lt;br /&gt;
		&amp;quot;🕵️‍♂️&amp;quot;,&amp;quot;👩‍⚕️&amp;quot;,&amp;quot;🧑‍⚕️&amp;quot;,&amp;quot;👨‍⚕️&amp;quot;,&amp;quot;👩‍🌾&amp;quot;,&amp;quot;🧑‍🌾&amp;quot;,&amp;quot;👨‍🌾&amp;quot;,&amp;quot;👩‍🍳&amp;quot;,&amp;quot;🧑‍🍳&amp;quot;,&amp;quot;👨‍🍳&amp;quot;,&amp;quot;👩‍🎓&amp;quot;,&amp;quot;🧑‍🎓&amp;quot;,&amp;quot;👨‍🎓&amp;quot;,&amp;quot;👩‍🎤&amp;quot;,&lt;br /&gt;
		&amp;quot;🧑‍🎤&amp;quot;,&amp;quot;👨‍🎤&amp;quot;,&amp;quot;👩‍🏫&amp;quot;,&amp;quot;🧑‍🏫&amp;quot;,&amp;quot;👨‍🏫&amp;quot;,&amp;quot;👩‍🏭&amp;quot;,&amp;quot;🧑‍🏭&amp;quot;,&amp;quot;👨‍🏭&amp;quot;,&amp;quot;👩‍💻&amp;quot;,&amp;quot;🧑‍💻&amp;quot;,&amp;quot;👨‍💻&amp;quot;,&amp;quot;👩‍💼&amp;quot;,&amp;quot;🧑‍💼&amp;quot;,&amp;quot;👨‍💼&amp;quot;,&lt;br /&gt;
		&amp;quot;👩‍🔧&amp;quot;,&amp;quot;🧑‍🔧&amp;quot;,&amp;quot;👨‍🔧&amp;quot;,&amp;quot;👩‍🔬&amp;quot;,&amp;quot;🧑‍🔬&amp;quot;,&amp;quot;👨‍🔬&amp;quot;,&amp;quot;👩‍🎨&amp;quot;,&amp;quot;🧑‍🎨&amp;quot;,&amp;quot;👨‍🎨&amp;quot;,&amp;quot;👩‍🚒&amp;quot;,&amp;quot;🧑‍🚒&amp;quot;,&amp;quot;👨‍🚒&amp;quot;,&amp;quot;👩‍✈️&amp;quot;,&amp;quot;🧑‍✈️&amp;quot;,&lt;br /&gt;
		&amp;quot;👨‍✈️&amp;quot;,&amp;quot;👩‍🚀&amp;quot;,&amp;quot;🧑‍🚀&amp;quot;,&amp;quot;👨‍🚀&amp;quot;,&amp;quot;👩‍⚖️&amp;quot;,&amp;quot;🧑‍⚖️&amp;quot;,&amp;quot;👨‍⚖️&amp;quot;,&amp;quot;👰&amp;quot;,&amp;quot;🏋️&amp;quot;,&amp;quot;🤵&amp;quot;,&amp;quot;🤸&amp;quot;,&amp;quot;👸&amp;quot;,&amp;quot;🤴&amp;quot;,&amp;quot;🦸‍♀️&amp;quot;,&amp;quot;🦸&amp;quot;,&lt;br /&gt;
		&amp;quot;🦸‍♂️&amp;quot;,&amp;quot;🦹‍♀️&amp;quot;,&amp;quot;🦹&amp;quot;,&amp;quot;🦹‍♂️&amp;quot;,&amp;quot;🤶&amp;quot;,&amp;quot;🚴&amp;quot;,&amp;quot;🎅&amp;quot;,&amp;quot;🧙‍♀️&amp;quot;,&amp;quot;🧙&amp;quot;,&amp;quot;🧙‍♂️&amp;quot;,&amp;quot;🧝‍♀️&amp;quot;,&amp;quot;🧝&amp;quot;,&amp;quot;🧝‍♂️&amp;quot;,&amp;quot;🧛‍♀️&amp;quot;,&amp;quot;🧛&amp;quot;,&lt;br /&gt;
		&amp;quot;🧛‍♂️&amp;quot;,&amp;quot;🧟‍♀️&amp;quot;,&amp;quot;🧟&amp;quot;,&amp;quot;🧟‍♂️&amp;quot;,&amp;quot;🧞‍♀️&amp;quot;,&amp;quot;🧞&amp;quot;,&amp;quot;🧞‍♂️&amp;quot;,&amp;quot;🧜‍♀️&amp;quot;,&amp;quot;🧜&amp;quot;,&amp;quot;🧜‍♂️&amp;quot;,&amp;quot;🧚‍♀️&amp;quot;,&amp;quot;🧚&amp;quot;,&amp;quot;🧚‍♂️&amp;quot;,&amp;quot;👼&amp;quot;,&amp;quot;🤰&amp;quot;,&lt;br /&gt;
		&amp;quot;🤱&amp;quot;,&amp;quot;🙇‍♀️&amp;quot;,&amp;quot;🙇&amp;quot;,&amp;quot;🙇‍♂️&amp;quot;,&amp;quot;💁‍♀️&amp;quot;,&amp;quot;💁&amp;quot;,&amp;quot;💁‍♂️&amp;quot;,&amp;quot;🙅‍♀️&amp;quot;,&amp;quot;🙅&amp;quot;,&amp;quot;🙅‍♂️&amp;quot;,&amp;quot;🙆‍♀️&amp;quot;,&amp;quot;🙆&amp;quot;,&amp;quot;🙆‍♂️&amp;quot;,&amp;quot;🙋‍♀️&amp;quot;,&amp;quot;🙋&amp;quot;,&lt;br /&gt;
		&amp;quot;🙋‍♂️&amp;quot;,&amp;quot;🧏‍♀️&amp;quot;,&amp;quot;🧏&amp;quot;,&amp;quot;🧏‍♂️&amp;quot;,&amp;quot;🤦‍♀️&amp;quot;,&amp;quot;🤦&amp;quot;,&amp;quot;🤦‍♂️&amp;quot;,&amp;quot;🤷‍♀️&amp;quot;,&amp;quot;🤷&amp;quot;,&amp;quot;🤷‍♂️&amp;quot;,&amp;quot;🙎‍♀️&amp;quot;,&amp;quot;🙎&amp;quot;,&amp;quot;🙎‍♂️&amp;quot;,&amp;quot;🙍‍♀️&amp;quot;,&amp;quot;🙍&amp;quot;,&lt;br /&gt;
		&amp;quot;🙍‍♂️&amp;quot;,&amp;quot;💇‍♀️&amp;quot;,&amp;quot;💇&amp;quot;,&amp;quot;💇‍♂️&amp;quot;,&amp;quot;💆‍♀️&amp;quot;,&amp;quot;💆&amp;quot;,&amp;quot;💆‍♂️&amp;quot;,&amp;quot;🧖‍♀️&amp;quot;,&amp;quot;🧖&amp;quot;,&amp;quot;🧖‍♂️&amp;quot;,&amp;quot;💅&amp;quot;,&amp;quot;🤳&amp;quot;,&amp;quot;💃&amp;quot;,&amp;quot;🕺&amp;quot;,&amp;quot;🕴&amp;quot;,&amp;quot;👩‍🦽&amp;quot;,&lt;br /&gt;
		&amp;quot;🧑‍🦽&amp;quot;,&amp;quot;👨‍🦽&amp;quot;,&amp;quot;👩‍🦼&amp;quot;,&amp;quot;🧑‍🦼&amp;quot;,&amp;quot;👨‍🦼&amp;quot;,&amp;quot;🚶‍♀️&amp;quot;,&amp;quot;🚶&amp;quot;,&amp;quot;🚶‍♂️&amp;quot;,&amp;quot;👩‍🦯&amp;quot;,&amp;quot;🧑‍🦯&amp;quot;,&amp;quot;👨‍🦯&amp;quot;,&amp;quot;🧎‍♀️&amp;quot;,&amp;quot;🧎&amp;quot;,&amp;quot;🧎‍♂️&amp;quot;,&amp;quot;🏃‍♀️&amp;quot;,&amp;quot;🏃&amp;quot;,&lt;br /&gt;
		&amp;quot;🏃‍♂️&amp;quot;,&amp;quot;🧍‍♀️&amp;quot;,&amp;quot;🧍&amp;quot;,&amp;quot;🧍‍♂️&amp;quot;,&amp;quot;👭&amp;quot;,&amp;quot;🧑‍🤝‍🧑&amp;quot;,&amp;quot;👬&amp;quot;,&amp;quot;👫&amp;quot;,&amp;quot;👩‍❤️‍👩&amp;quot;,&amp;quot;💑&amp;quot;,&amp;quot;👨‍❤️‍👨&amp;quot;,&amp;quot;👩‍❤️‍👨&amp;quot;,&amp;quot;👩‍❤️‍💋‍👩&amp;quot;,&amp;quot;💏&amp;quot;,&amp;quot;👨‍❤️‍💋‍👨&amp;quot;,&amp;quot;👩‍❤️‍💋‍👨&amp;quot;,&lt;br /&gt;
		&amp;quot;👪&amp;quot;,&amp;quot;👨‍👩‍👦&amp;quot;,&amp;quot;👨‍👩‍👧&amp;quot;,&amp;quot;👨‍👩‍👧‍👦&amp;quot;,&amp;quot;👨‍👩‍👦‍👦&amp;quot;,&amp;quot;👨‍👩‍👧‍👧&amp;quot;,&amp;quot;👨‍👨‍👦&amp;quot;,&amp;quot;👨‍👨‍👧&amp;quot;,&amp;quot;👨‍👨‍👧‍👦&amp;quot;,&amp;quot;👨‍👨‍👦‍👦&amp;quot;,&amp;quot;👨‍👨‍👧‍👧&amp;quot;,&amp;quot;👩‍👩‍👦&amp;quot;,&amp;quot;👩‍👩‍👧&amp;quot;,&amp;quot;👩‍👩‍👧‍👦&amp;quot;,&amp;quot;👩‍👩‍👦‍👦&amp;quot;,&amp;quot;👩‍👩‍👧‍👧&amp;quot;,&lt;br /&gt;
		&amp;quot;👨‍👦&amp;quot;,&amp;quot;👨‍👦‍👦&amp;quot;,&amp;quot;👨‍👧&amp;quot;,&amp;quot;👨‍👧‍👦&amp;quot;,&amp;quot;👨‍👧‍👧&amp;quot;,&amp;quot;👩‍👦&amp;quot;,&amp;quot;👩‍👦‍👦&amp;quot;,&amp;quot;👩‍👧&amp;quot;,&amp;quot;👩‍👧‍👦&amp;quot;,&amp;quot;👩‍👧‍👧&amp;quot;,&amp;quot;🗣&amp;quot;,&amp;quot;👤&amp;quot;,&amp;quot;👥&amp;quot;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local nonhumanoid={&lt;br /&gt;
		&amp;quot;🐶&amp;quot;,&amp;quot;🐱&amp;quot;,&amp;quot;🐭&amp;quot;,&amp;quot;🐹&amp;quot;,&amp;quot;🐰&amp;quot;,&amp;quot;🦊&amp;quot;,&amp;quot;🐻&amp;quot;,&amp;quot;🐼&amp;quot;,&amp;quot;🐨&amp;quot;,&amp;quot;🐯&amp;quot;,&amp;quot;🦁&amp;quot;,&amp;quot;🐮&amp;quot;,&amp;quot;🐷&amp;quot;,&amp;quot;🐽&amp;quot;,&amp;quot;🐸&amp;quot;,&amp;quot;🐵&amp;quot;,&lt;br /&gt;
		&amp;quot;🙈&amp;quot;,&amp;quot;🙉&amp;quot;,&amp;quot;🙊&amp;quot;,&amp;quot;🐒&amp;quot;,&amp;quot;🐔&amp;quot;,&amp;quot;🐧&amp;quot;,&amp;quot;🐦&amp;quot;,&amp;quot;🐤&amp;quot;,&amp;quot;🐣&amp;quot;,&amp;quot;🐥&amp;quot;,&amp;quot;🦆&amp;quot;,&amp;quot;🦅&amp;quot;,&amp;quot;🦉&amp;quot;,&amp;quot;🦇&amp;quot;,&amp;quot;🐺&amp;quot;,&amp;quot;🐗&amp;quot;,&amp;quot;🐴&amp;quot;,&amp;quot;🦄&amp;quot;,&lt;br /&gt;
		&amp;quot;🐝&amp;quot;,&amp;quot;🐛&amp;quot;,&amp;quot;🦋&amp;quot;,&amp;quot;🐌&amp;quot;,&amp;quot;🐞&amp;quot;,&amp;quot;🐞&amp;quot;,&amp;quot;🦟&amp;quot;,&amp;quot;🦗&amp;quot;,&amp;quot;🐞&amp;quot;,&amp;quot;🦂&amp;quot;,&amp;quot;🐢&amp;quot;,&amp;quot;🐍&amp;quot;,&amp;quot;🦎&amp;quot;,&amp;quot;🦖&amp;quot;,&amp;quot;🦕&amp;quot;,&amp;quot;🐙&amp;quot;,&amp;quot;🦑&amp;quot;,&amp;quot;🦐&amp;quot;,&lt;br /&gt;
		&amp;quot;🦞&amp;quot;,&amp;quot;🦀&amp;quot;,&amp;quot;🐡&amp;quot;,&amp;quot;🐠&amp;quot;,&amp;quot;🐟&amp;quot;,&amp;quot;🐬&amp;quot;,&amp;quot;🐳&amp;quot;,&amp;quot;🐋&amp;quot;,&amp;quot;🦈&amp;quot;,&amp;quot;🐊&amp;quot;,&amp;quot;🐅&amp;quot;,&amp;quot;🐆&amp;quot;,&amp;quot;🦓&amp;quot;,&amp;quot;🦍&amp;quot;,&amp;quot;🦧&amp;quot;,&amp;quot;🐘&amp;quot;,&amp;quot;🦛&amp;quot;,&amp;quot;🦏&amp;quot;,&lt;br /&gt;
		&amp;quot;🐪&amp;quot;,&amp;quot;🐫&amp;quot;,&amp;quot;🦒&amp;quot;,&amp;quot;🦘&amp;quot;,&amp;quot;🐃&amp;quot;,&amp;quot;🐂&amp;quot;,&amp;quot;🐄&amp;quot;,&amp;quot;🐎&amp;quot;,&amp;quot;🐖&amp;quot;,&amp;quot;🐏&amp;quot;,&amp;quot;🐑&amp;quot;,&amp;quot;🦙&amp;quot;,&amp;quot;🐐&amp;quot;,&amp;quot;🦌&amp;quot;,&amp;quot;🐕&amp;quot;,&amp;quot;🐩&amp;quot;,&amp;quot;🦮&amp;quot;,&amp;quot;🐕‍🦺&amp;quot;,&lt;br /&gt;
		&amp;quot;🐈&amp;quot;,&amp;quot;🐓&amp;quot;,&amp;quot;🦃&amp;quot;,&amp;quot;🦚&amp;quot;,&amp;quot;🦜&amp;quot;,&amp;quot;🦢&amp;quot;,&amp;quot;🦩&amp;quot;,&amp;quot;🕊️&amp;quot;,&amp;quot;🐇&amp;quot;,&amp;quot;🦝&amp;quot;,&amp;quot;🦨&amp;quot;,&amp;quot;🦡&amp;quot;,&amp;quot;🦦&amp;quot;,&amp;quot;🦥&amp;quot;,&amp;quot;🐁&amp;quot;,&amp;quot;🐀&amp;quot;,&amp;quot;🐿&amp;quot;,&amp;quot;🦔&amp;quot;,&lt;br /&gt;
		&amp;quot;🐉&amp;quot;,&amp;quot;🐲&amp;quot;,&amp;quot;🪐&amp;quot;,&amp;quot;💫&amp;quot;,&amp;quot;🌪&amp;quot;,&amp;quot;🌈&amp;quot;,&amp;quot;📠&amp;quot;,&amp;quot;📺&amp;quot;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local rand = pyrandom.new(titlecase(name))&lt;br /&gt;
	if rand:random() &amp;gt; 0.5 then&lt;br /&gt;
		return rand:choice(humanoid)&lt;br /&gt;
	else&lt;br /&gt;
		return rand:choice(nonhumanoid)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function generate_random_stlats_from_name(name)&lt;br /&gt;
	local rand = pyrandom.new(titlecase(name))&lt;br /&gt;
	return {&lt;br /&gt;
		nyoomability = math.max(rand:gauss(0,0.3),1.4),&lt;br /&gt;
		tofu = rand:random(),&lt;br /&gt;
		wiggle = rand:random(),&lt;br /&gt;
		ritualism = rand:random(),&lt;br /&gt;
		musclitude = rand:random(),&lt;br /&gt;
		finesse = rand:random(),&lt;br /&gt;
		needlethreadableness = rand:random(), &lt;br /&gt;
		left_handedness = rand:gauss(0,0.3),&lt;br /&gt;
		stance = rand:choice({&amp;quot;Tricky&amp;quot;,&amp;quot;Flashy&amp;quot;,&amp;quot;Aggro&amp;quot;,&amp;quot;Tanky&amp;quot;,&amp;quot;Twitchy&amp;quot;,&amp;quot;Powerful&amp;quot;,&lt;br /&gt;
		&amp;quot;Wibble&amp;quot;,&amp;quot;Wobble&amp;quot;,&amp;quot;Reverse&amp;quot;,&amp;quot;Feint&amp;quot;,&amp;quot;Electric&amp;quot;,&amp;quot;Spicy&amp;quot;,&amp;quot;Pomegranate&amp;quot;,&lt;br /&gt;
		&amp;quot;Explosive&amp;quot;,&amp;quot;Cottagecore&amp;quot;,&amp;quot;Corecore&amp;quot;,&amp;quot;Hardcore&amp;quot;,&amp;quot;Softcore&amp;quot;,&lt;br /&gt;
		&amp;quot;Hand to Hand&amp;quot;,&amp;quot;Lefty&amp;quot;,&amp;quot;Pop-Punk&amp;quot;,&amp;quot;DPS&amp;quot;,&amp;quot;Repose&amp;quot;}),&lt;br /&gt;
		fav_tea = rand:choice({&amp;quot;Iced&amp;quot;,&amp;quot;Boba&amp;quot;,&amp;quot;White&amp;quot;,&amp;quot;Green&amp;quot;,&amp;quot;Oolong&amp;quot;,&lt;br /&gt;
		&amp;quot;Pu'erh&amp;quot;,&amp;quot;Chai&amp;quot;,&amp;quot;Milk&amp;quot;,&amp;quot;Neon&amp;quot;,&amp;quot;Sweet&amp;quot;,&amp;quot;Void&amp;quot;,&amp;quot;Tea?&amp;quot;,&amp;quot;Caramel&amp;quot;,&lt;br /&gt;
		&amp;quot;Lightspeed&amp;quot;,&amp;quot;Time-traveling&amp;quot;,&amp;quot;Bloody&amp;quot;,&amp;quot;Black&amp;quot;,&amp;quot;Miso&amp;quot;,&amp;quot;Concrete&amp;quot;,&lt;br /&gt;
		&amp;quot;Hard-boiled egg&amp;quot;,&amp;quot;Hot Chocolate&amp;quot;,&amp;quot;Bubble&amp;quot;}),&lt;br /&gt;
		estimation = rand:random(),&lt;br /&gt;
&lt;br /&gt;
		earliness = rand:random(),&lt;br /&gt;
		twirliness = rand:random(),&lt;br /&gt;
		churliness = rand:random(),&lt;br /&gt;
		aceness = rand:random(),&lt;br /&gt;
		marbles = rand:randrange(2,4),&lt;br /&gt;
&lt;br /&gt;
		unworthiness = rand:random(),&lt;br /&gt;
		splortsmanship = rand:random(),&lt;br /&gt;
		tankitude = rand:random(),&lt;br /&gt;
		pettiness = rand:random(),&lt;br /&gt;
		owlishness = rand:random(),&lt;br /&gt;
		disco = rand:random(),&lt;br /&gt;
		pettability = rand:random(),&lt;br /&gt;
		softness = rand:random(),&lt;br /&gt;
		improv = rand:random(),&lt;br /&gt;
		tentacles = rand:randrange(0,10),&lt;br /&gt;
		capitalism = -rand:random(),&lt;br /&gt;
		polkadottedness = 0,&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function generate_random_player_from_name(name)&lt;br /&gt;
	local player = generate_random_stlats_from_name(name)&lt;br /&gt;
	player.name = name&lt;br /&gt;
	player.emoji = random_player_emoji(name)&lt;br /&gt;
	return player&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function search_array(a, v)&lt;br /&gt;
	for i = 1, #a do&lt;br /&gt;
		if a[i] == v then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function sum(a)&lt;br /&gt;
	local r = 0&lt;br /&gt;
	for i = 1, #a do&lt;br /&gt;
		r = r + a[i]&lt;br /&gt;
	end&lt;br /&gt;
	return r&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function unpredictability(p)&lt;br /&gt;
	local weights = {p.churliness,p.earliness,p.twirliness}&lt;br /&gt;
	if search_array({&amp;quot;Aggro&amp;quot;,&amp;quot;Powerful&amp;quot;,&amp;quot;Hand to Hand&amp;quot;,&amp;quot;DPS&amp;quot;,&amp;quot;Explosive&amp;quot;,&amp;quot;Hardcore&amp;quot;, &amp;quot;Wibble&amp;quot;,&amp;quot;Electric&amp;quot;}, p.stance) then&lt;br /&gt;
		weights[1] = weights[1] + 0.5&lt;br /&gt;
	elseif search_array({&amp;quot;Tanky&amp;quot;,&amp;quot;Twitchy&amp;quot;,&amp;quot;Repose&amp;quot;,&amp;quot;Reverse&amp;quot;,&amp;quot;Softcore&amp;quot;,  &amp;quot;Cottagecore&amp;quot;,&amp;quot;Pomegranate&amp;quot;}, p.stance) then&lt;br /&gt;
		weights[2] = weights[2] + 0.5&lt;br /&gt;
	elseif search_array(&amp;quot;Feint&amp;quot;,&amp;quot;Tricky&amp;quot;,&amp;quot;Pop-Punk&amp;quot;,&amp;quot;Flashy&amp;quot;,&amp;quot;Spicy&amp;quot;,       &amp;quot;Corecore&amp;quot;,&amp;quot;Wobble&amp;quot;,&amp;quot;Lefty&amp;quot;, p.stance) then&lt;br /&gt;
		weights[3] = weights[3] + 0.5&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local chanceOfBiggest = math.max(unpack(weights))/sum(weights)&lt;br /&gt;
&lt;br /&gt;
	local minChance = 1/#weights&lt;br /&gt;
&lt;br /&gt;
	return 1-(chanceOfBiggest-minChance)/(1-minChance)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function driving_rating(p)&lt;br /&gt;
	return (p.musclitude + p.tofu)*5/2&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function precision_rating(p)&lt;br /&gt;
	return ((1-p.needlethreadableness)*0.5 + p.finesse + p.estimation*0.2) * 5/(1+0.2+0.5) - math.abs(p.left_handedness)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function aerodynamics_rating(p)&lt;br /&gt;
	return (p.ritualism + p.owlishness + p.softness) * 5/3&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function self_awareness_rating(p)&lt;br /&gt;
	return (p.wiggle*0.5 + (p.marbles-2)/2 + unpredictability(p)*0.8) * 5/(0.5+1+0.8) + p.polkadottedness * 5&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local known_players = {&lt;br /&gt;
	[&amp;quot;Polkadot Patterson&amp;quot;] = {&lt;br /&gt;
		name=&amp;quot;Polkadot Patterson&amp;quot;,&lt;br /&gt;
		stance=&amp;quot;Squiddish&amp;quot;,&lt;br /&gt;
		fav_tea= &amp;quot;Iced&amp;quot;,&lt;br /&gt;
		nyoomability = 1.5,&lt;br /&gt;
		musclitude=1,&lt;br /&gt;
		finesse=1,&lt;br /&gt;
		needlethreadableness=1,&lt;br /&gt;
		polkadottedness=1,  &lt;br /&gt;
		left_handedness= 0,&lt;br /&gt;
		estimation=1,&lt;br /&gt;
		twirliness=0.3,&lt;br /&gt;
		churliness=0.3,&lt;br /&gt;
		earliness=0.3,&lt;br /&gt;
		aceness=0.3,&lt;br /&gt;
		marbles=4,&lt;br /&gt;
&lt;br /&gt;
		tofu=1,&lt;br /&gt;
		wiggle=1,&lt;br /&gt;
		ritualism=1,&lt;br /&gt;
		owlishness=1,&lt;br /&gt;
		disco=0.0,&lt;br /&gt;
		pettability=0.0,&lt;br /&gt;
		softness=1,&lt;br /&gt;
		improv=0.0,&lt;br /&gt;
		unworthiness=0,&lt;br /&gt;
		splortsmanship=1,&lt;br /&gt;
		tankitude=1.0,&lt;br /&gt;
		pettiness=0.0,&lt;br /&gt;
		tentacles=4,&lt;br /&gt;
		capitalism=-0.5,&lt;br /&gt;
		emoji=&amp;quot;😅&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function get_player_from_name(name)&lt;br /&gt;
	name = titlecase(name)&lt;br /&gt;
	return known_players[name] or generate_random_player_from_name(name)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local glolfer = {}&lt;br /&gt;
&lt;br /&gt;
function glolfer.emoji(frame)&lt;br /&gt;
	local args&lt;br /&gt;
	if frame.args.name then&lt;br /&gt;
		args = frame.args&lt;br /&gt;
	else&lt;br /&gt;
		args = frame:getParent().args&lt;br /&gt;
	end&lt;br /&gt;
	local name = args.name&lt;br /&gt;
	return random_player_emoji(name)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function glolfer.infobox(frame)&lt;br /&gt;
	local args&lt;br /&gt;
	if frame.args.name then&lt;br /&gt;
		args = frame.args&lt;br /&gt;
	else&lt;br /&gt;
		args = frame:getParent().args&lt;br /&gt;
	end&lt;br /&gt;
	local name = args.name&lt;br /&gt;
	local p = get_player_from_name(name)&lt;br /&gt;
	local template_args = {}&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		template_args[k] = v&lt;br /&gt;
	end&lt;br /&gt;
	for k, v in pairs({&lt;br /&gt;
		name = name,&lt;br /&gt;
		signature = p.emoji,&lt;br /&gt;
		stance = p.stance,&lt;br /&gt;
		tea = p.fav_tea,&lt;br /&gt;
		driving = driving_rating(p),&lt;br /&gt;
		grip = precision_rating(p),&lt;br /&gt;
		aerodynamics = aerodynamics_rating(p),&lt;br /&gt;
		[&amp;quot;self-awareness&amp;quot;] = self_awareness_rating(p),&lt;br /&gt;
	}) do&lt;br /&gt;
		template_args[k] = v&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return frame:expandTemplate{ title = &amp;quot;GlolferInfo&amp;quot;, args = template_args}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return glolfer&lt;/div&gt;</summary>
		<author><name>Pokeylope</name></author>
	</entry>
	<entry>
		<id>https://glolfwiki.sibr.dev/index.php?title=History&amp;diff=287</id>
		<title>History</title>
		<link rel="alternate" type="text/html" href="https://glolfwiki.sibr.dev/index.php?title=History&amp;diff=287"/>
		<updated>2021-06-13T22:14:55Z</updated>

		<summary type="html">&lt;p&gt;Pokeylope: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=History of The IGA=&lt;br /&gt;
&lt;br /&gt;
==Humble Beginnings==&lt;br /&gt;
Little is known of the extensive history of Glolf, however a few things are know of the inception of the IGA, Internet Glolf Association. [[The Manager]] is credited with founding the IGA; however there are present theories that an unknown entity, ominously referred to as &amp;quot;[[The Instigator]]&amp;quot;, is responsible.&lt;br /&gt;
&lt;br /&gt;
==Past Opens==&lt;br /&gt;
&lt;br /&gt;
===The First IGA Open===&lt;br /&gt;
&lt;br /&gt;
Winner: [[Load Bearing Coconut]]&lt;br /&gt;
&lt;br /&gt;
===The Second IGA Open===&lt;br /&gt;
&lt;br /&gt;
Winner: [[Frankle Knives]]&lt;br /&gt;
&lt;br /&gt;
===[[Third IGA Open|The Third IGA Open]]===&lt;br /&gt;
&lt;br /&gt;
Winner: [[Spooks McGee]]&lt;br /&gt;
&lt;br /&gt;
===[[Fourth IGA Open|The Fourth IGA Open]]===&lt;br /&gt;
&lt;br /&gt;
Winner: [[Line Cook]]&lt;br /&gt;
&lt;br /&gt;
===[[Fifth IGA Open|The Fifth IGA Open]]===&lt;br /&gt;
&lt;br /&gt;
Winner: [[The 12th Herb And Spice]]&lt;br /&gt;
&lt;br /&gt;
==Quirks and Inconsistencies==&lt;br /&gt;
&lt;br /&gt;
===The Arbuckling===&lt;br /&gt;
Event in its infancy, glolf encountered some of the oddities associated with its creation. Numerous glolfers had lost had had half of their names and identities briefly before it was resolved by the IGA.&lt;br /&gt;
For more information, see [[The Arbuckling]].&lt;br /&gt;
&lt;br /&gt;
===The A🦊alypse===&lt;br /&gt;
The IGA introduced a new player with a penchant for 'ripping holes in the fabric of reality' named [[1]]. Known largely by its 🦊 signature, 1 had soon become infamous.&lt;br /&gt;
For more information, see [[The Afoxalypse]].&lt;br /&gt;
&lt;br /&gt;
===The Grand Unchip===&lt;br /&gt;
During the first IGA Open, a player named [[Simulacrum]] hit a 40-tile-long chip that led to the first hole in spacetime, and them and fellow player [[Solar Dies]] leaving the course. For more information, see [[The Grand Unchip]].&lt;br /&gt;
[[Category:History]]&lt;/div&gt;</summary>
		<author><name>Pokeylope</name></author>
	</entry>
	<entry>
		<id>https://glolfwiki.sibr.dev/index.php?title=Fifth_IGA_Open&amp;diff=286</id>
		<title>Fifth IGA Open</title>
		<link rel="alternate" type="text/html" href="https://glolfwiki.sibr.dev/index.php?title=Fifth_IGA_Open&amp;diff=286"/>
		<updated>2021-06-13T22:12:26Z</updated>

		<summary type="html">&lt;p&gt;Pokeylope: Add results&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Fifth IGA Open was held on June 13, 2021.&lt;br /&gt;
&lt;br /&gt;
==Contestants==&lt;br /&gt;
* [[Solar Dies]]&lt;br /&gt;
* Rat Polk&lt;br /&gt;
* Trojan Warhorse&lt;br /&gt;
* True Beauty&lt;br /&gt;
* Cornmeals Girts&lt;br /&gt;
* Rocks Hullabaloo&lt;br /&gt;
* Coral Blue #2 Semi-Gloss Lipstick&lt;br /&gt;
* [[File:Uhhh.png|22px|link=|:uhhh:]]&lt;br /&gt;
* [[Crocodile 'Spits Fire' Spitfire]]&lt;br /&gt;
* Caldera Clembons &lt;br /&gt;
* The Monitor&lt;br /&gt;
* Tobias Bagpipe&lt;br /&gt;
* Ampersand Resplendent&lt;br /&gt;
* Matron Aquarium&lt;br /&gt;
* Fractal Recursion&lt;br /&gt;
* What.&lt;br /&gt;
* [[Legally Jorts]]&lt;br /&gt;
* Clip Clipperson&lt;br /&gt;
* Smig the Normal&lt;br /&gt;
* Sappho Herself&lt;br /&gt;
* Works Everytime&lt;br /&gt;
* And&lt;br /&gt;
* The The&lt;br /&gt;
* Updog&lt;br /&gt;
* Salih Ultrabass&lt;br /&gt;
* Garfield the Deals Warlock&lt;br /&gt;
* The Cringe-Ass Nae Nae Baby of Legend&lt;br /&gt;
* Cherry Sprints!&lt;br /&gt;
* Avalanche La Mancha&lt;br /&gt;
* Bichael Micycle&lt;br /&gt;
* Existential Sigh&lt;br /&gt;
* Aggregate Confusion&lt;br /&gt;
* Mersenne Twisted&lt;br /&gt;
* Greenbriar&lt;br /&gt;
* Herlock Sholmes&lt;br /&gt;
* Train Emoji&lt;br /&gt;
* Elizabeth Monarch&lt;br /&gt;
* One Name&lt;br /&gt;
* Suplex Trousers&lt;br /&gt;
* Reverse Saint Patrick&lt;br /&gt;
* Bone Larceny&lt;br /&gt;
* Salsa Pandemic&lt;br /&gt;
* Bohemian Vegetable Blunderbuss&lt;br /&gt;
* Whitest Bread On Earth&lt;br /&gt;
* Ukulele Diskhorse&lt;br /&gt;
* Todd Unflushable&lt;br /&gt;
* Rock Bottom Ipecac Brimstone Quad Shot Asparagus Lasers&lt;br /&gt;
* 1950s Rock N Roll Undersea Scifi Dinosaur McDonalds&lt;br /&gt;
* Small Victories&lt;br /&gt;
* Moomin Rider&lt;br /&gt;
* Simon Peck&lt;br /&gt;
* Florida Man&lt;br /&gt;
* Several Skeletons&lt;br /&gt;
* Quokka Numerous&lt;br /&gt;
* [[Melissa Bop]]&lt;br /&gt;
* Harpsichord Giraffe&lt;br /&gt;
* りょうこ&lt;br /&gt;
* Mora Adjutant&lt;br /&gt;
* The 12th Herb And Spice&lt;br /&gt;
* Binky?!&lt;br /&gt;
* Emmie Warhorse&lt;br /&gt;
* Arom Mora&lt;br /&gt;
* Ocean Gazpacho&lt;br /&gt;
* King Duke&lt;br /&gt;
* [[Simulacrum ]]&lt;br /&gt;
* Clover Wilkinson&lt;br /&gt;
* Emolya Tattlers&lt;br /&gt;
* Ionized Worker&lt;br /&gt;
* Jane Doe&lt;br /&gt;
* Arnold Palmer Jr. Jr.&lt;br /&gt;
* Baba&lt;br /&gt;
* Bartleby&lt;br /&gt;
&lt;br /&gt;
==Results==&lt;br /&gt;
{{#invoke:Team bracket|main&lt;br /&gt;
|rounds=7&lt;br /&gt;
|byes=1&lt;br /&gt;
|sets=2&lt;br /&gt;
|emoji=yes&lt;br /&gt;
|boldwinner=glolf&lt;br /&gt;
&lt;br /&gt;
|RD1-team9=Rock Bottom Ipecac Brimstone Quad Shot Asparagus Lasers&lt;br /&gt;
|RD1-score9-1=1&lt;br /&gt;
|RD1-score9-2=7 &lt;br /&gt;
|RD1-team10=Updog&lt;br /&gt;
|RD1-score10-1=2&lt;br /&gt;
|RD1-score10-2=12 &lt;br /&gt;
&lt;br /&gt;
|RD1-team15=Cherry Sprints!&lt;br /&gt;
|RD1-score15-1=1&lt;br /&gt;
|RD1-score15-2=11 &lt;br /&gt;
|RD1-team16=Salsa Pandemic&lt;br /&gt;
|RD1-score16-1=3&lt;br /&gt;
|RD1-score16-2=10 &lt;br /&gt;
&lt;br /&gt;
|RD1-team37=Train Emoji&lt;br /&gt;
|RD1-score37-1=2&lt;br /&gt;
|RD1-score37-2=8 &lt;br /&gt;
|RD1-team38=Existential Sigh&lt;br /&gt;
|RD1-score38-1=2&lt;br /&gt;
|RD1-score38-2=7 &lt;br /&gt;
&lt;br /&gt;
|RD1-team41=Rocks Hullabaloo&lt;br /&gt;
|RD1-score41-1=1&lt;br /&gt;
|RD1-score41-2=12 &lt;br /&gt;
|RD1-team42=Several Skeletons&lt;br /&gt;
|RD1-score42-1=3&lt;br /&gt;
|RD1-score42-2=8 &lt;br /&gt;
&lt;br /&gt;
|RD1-team51=Sappho Herself&lt;br /&gt;
|RD1-score51-1=3&lt;br /&gt;
|RD1-score51-2=10 &lt;br /&gt;
|RD1-team52=Rat Polk&lt;br /&gt;
|RD1-score52-1=0&lt;br /&gt;
|RD1-score52-2=12 &lt;br /&gt;
&lt;br /&gt;
|RD1-team83=Bone Larceny&lt;br /&gt;
|RD1-score83-1=1&lt;br /&gt;
|RD1-score83-2=8 &lt;br /&gt;
|RD1-team84=Garfield the Deals Warlock&lt;br /&gt;
|RD1-score84-1=3&lt;br /&gt;
|RD1-score84-2=14 &lt;br /&gt;
&lt;br /&gt;
|RD1-team103=Trojan Warhorse&lt;br /&gt;
|RD1-score103-1=1&lt;br /&gt;
|RD1-score103-2=8 &lt;br /&gt;
|RD1-team104=Small Victories&lt;br /&gt;
|RD1-score104-1=1&lt;br /&gt;
|RD1-score104-2=11 &lt;br /&gt;
&lt;br /&gt;
|RD1-team109=Simon Peck&lt;br /&gt;
|RD1-score109-1=4&lt;br /&gt;
|RD1-score109-2=10 &lt;br /&gt;
|RD1-team110=Coral Blue #2 Semi-Gloss Lipstick&lt;br /&gt;
|RD1-score110-1=6&lt;br /&gt;
|RD1-score110-2=11 &lt;br /&gt;
&lt;br /&gt;
|RD2-team1=True Beauty&lt;br /&gt;
|RD2-score1-1=2&lt;br /&gt;
|RD2-score1-2=12 &lt;br /&gt;
|RD2-team2=Mersenne Twisted&lt;br /&gt;
|RD2-score2-1=4&lt;br /&gt;
|RD2-score2-2=12 &lt;br /&gt;
|RD2-team3=Mora Adjutant&lt;br /&gt;
|RD2-score3-1=4&lt;br /&gt;
|RD2-score3-2=14 &lt;br /&gt;
|RD2-team4=Emmie Warhorse&lt;br /&gt;
|RD2-score4-1=3&lt;br /&gt;
|RD2-score4-2=9 &lt;br /&gt;
|RD2-team5=Updog&lt;br /&gt;
|RD2-score5-1=1&lt;br /&gt;
|RD2-score5-2=8 &lt;br /&gt;
|RD2-team6=What.&lt;br /&gt;
|RD2-score6-1=6&lt;br /&gt;
|RD2-score6-2=7 &lt;br /&gt;
|RD2-team7=りょうこ&lt;br /&gt;
|RD2-score7-1=4&lt;br /&gt;
|RD2-score7-2=9 &lt;br /&gt;
|RD2-team8=Salsa Pandemic&lt;br /&gt;
|RD2-score8-1=1&lt;br /&gt;
|RD2-score8-2=6 &lt;br /&gt;
|RD2-team9=The 12th Herb And Spice&lt;br /&gt;
|RD2-score9-1=4&lt;br /&gt;
|RD2-score9-2=12 &lt;br /&gt;
|RD2-team10=Bichael Micycle&lt;br /&gt;
|RD2-score10-1=3&lt;br /&gt;
|RD2-score10-2=9 &lt;br /&gt;
|RD2-team11=The Monitor&lt;br /&gt;
|RD2-score11-1=3&lt;br /&gt;
|RD2-score11-2=6 &lt;br /&gt;
|RD2-team12=Salih Ultrabass&lt;br /&gt;
|RD2-score12-1=0&lt;br /&gt;
|RD2-score12-2=4 &lt;br /&gt;
|RD2-team13=Whitest Bread On Earth&lt;br /&gt;
|RD2-score13-1=4&lt;br /&gt;
|RD2-score13-2=12 &lt;br /&gt;
|RD2-team14=Ocean Gazpacho&lt;br /&gt;
|RD2-score14-1=3&lt;br /&gt;
|RD2-score14-2=11 &lt;br /&gt;
|RD2-team15=Cornmeals Girts&lt;br /&gt;
|RD2-score15-1=0&lt;br /&gt;
|RD2-score15-2=22 &lt;br /&gt;
|RD2-team16=Ampersand Resplendent&lt;br /&gt;
|RD2-score16-1=0&lt;br /&gt;
|RD2-score16-2=10 &lt;br /&gt;
|RD2-team17=The Cringe-Ass Nae Nae Baby of Legend&lt;br /&gt;
|RD2-score17-1=0&lt;br /&gt;
|RD2-score17-2=18 &lt;br /&gt;
|RD2-team18=Melissa Bop&lt;br /&gt;
|RD2-score18-1=3&lt;br /&gt;
|RD2-score18-2=12 &lt;br /&gt;
|RD2-team19=Existential Sigh&lt;br /&gt;
|RD2-score19-1=2&lt;br /&gt;
|RD2-score19-2=14 &lt;br /&gt;
|RD2-team20=Clip Clipperson&lt;br /&gt;
|RD2-score20-1=4&lt;br /&gt;
|RD2-score20-2=6 &lt;br /&gt;
|RD2-team21=Several Skeletons&lt;br /&gt;
|RD2-score21-1=5&lt;br /&gt;
|RD2-score21-2=10 &lt;br /&gt;
|RD2-team22=[[File:Uhhh.png|22px|link=|:uhhh:]]&lt;br /&gt;
|RD2-score22-1=4&lt;br /&gt;
|RD2-score22-2=10 &lt;br /&gt;
|RD2-team23=Reverse Saint Patrick&lt;br /&gt;
|RD2-score23-1=3&lt;br /&gt;
|RD2-score23-2=12 &lt;br /&gt;
|RD2-team24=Baba&lt;br /&gt;
|RD2-score24-1=1&lt;br /&gt;
|RD2-score24-2=16 &lt;br /&gt;
|RD2-team25=Avalanche La Mancha&lt;br /&gt;
|RD2-score25-1=3&lt;br /&gt;
|RD2-score25-2=9 &lt;br /&gt;
|RD2-team26=Sappho Herself&lt;br /&gt;
|RD2-score26-1=3&lt;br /&gt;
|RD2-score26-2=14 &lt;br /&gt;
|RD2-team27=Florida Man&lt;br /&gt;
|RD2-score27-1=0&lt;br /&gt;
|RD2-score27-2=4 &lt;br /&gt;
|RD2-team28=Elizabeth Monarch&lt;br /&gt;
|RD2-score28-1=2&lt;br /&gt;
|RD2-score28-2=4 &lt;br /&gt;
|RD2-team29=Bartleby&lt;br /&gt;
|RD2-score29-1=0&lt;br /&gt;
|RD2-score29-2=8 &lt;br /&gt;
|RD2-team30=King Duke&lt;br /&gt;
|RD2-score30-1=2&lt;br /&gt;
|RD2-score30-2=6 &lt;br /&gt;
|RD2-team31=Legally Jorts&lt;br /&gt;
|RD2-score31-1=5&lt;br /&gt;
|RD2-score31-2=13 &lt;br /&gt;
|RD2-team32=Crocodile 'Spits Fire' Spitfire&lt;br /&gt;
|RD2-score32-1=2&lt;br /&gt;
|RD2-score32-2=18 &lt;br /&gt;
|RD2-team33=Ukulele Diskhorse&lt;br /&gt;
|RD2-score33-1=0&lt;br /&gt;
|RD2-score33-2=3 &lt;br /&gt;
|RD2-team34=Simulacrum &lt;br /&gt;
|RD2-score34-1=1&lt;br /&gt;
|RD2-score34-2=8 &lt;br /&gt;
|RD2-team35=Tobias Bagpipe&lt;br /&gt;
|RD2-score35-1=3&lt;br /&gt;
|RD2-score35-2=6 &lt;br /&gt;
|RD2-team36=Arom Mora&lt;br /&gt;
|RD2-score36-1=3&lt;br /&gt;
|RD2-score36-2=7 &lt;br /&gt;
|RD2-team37=Binky?!&lt;br /&gt;
|RD2-score37-1=0&lt;br /&gt;
|RD2-score37-2=8 &lt;br /&gt;
|RD2-team38=The The&lt;br /&gt;
|RD2-score38-1=0&lt;br /&gt;
|RD2-score38-2=9 &lt;br /&gt;
|RD2-team39=Caldera Clembons &lt;br /&gt;
|RD2-score39-1=2&lt;br /&gt;
|RD2-score39-2=14 &lt;br /&gt;
|RD2-team40=Ionized Worker&lt;br /&gt;
|RD2-score40-1=6&lt;br /&gt;
|RD2-score40-2=13 &lt;br /&gt;
|RD2-team41=Matron Aquarium&lt;br /&gt;
|RD2-score41-1=2&lt;br /&gt;
|RD2-score41-2=7 &lt;br /&gt;
|RD2-team42=Garfield the Deals Warlock&lt;br /&gt;
|RD2-score42-1=3&lt;br /&gt;
|RD2-score42-2=8 &lt;br /&gt;
|RD2-team43=Bohemian Vegetable Blunderbuss&lt;br /&gt;
|RD2-score43-1=3&lt;br /&gt;
|RD2-score43-2=12 &lt;br /&gt;
|RD2-team44=Works Everytime&lt;br /&gt;
|RD2-score44-1=0&lt;br /&gt;
|RD2-score44-2=5 &lt;br /&gt;
|RD2-team45=Fractal Recursion&lt;br /&gt;
|RD2-score45-1=0&lt;br /&gt;
|RD2-score45-2=19 &lt;br /&gt;
|RD2-team46=Jane Doe&lt;br /&gt;
|RD2-score46-1=2&lt;br /&gt;
|RD2-score46-2=12 &lt;br /&gt;
|RD2-team47=Suplex Trousers&lt;br /&gt;
|RD2-score47-1=2&lt;br /&gt;
|RD2-score47-2=12 &lt;br /&gt;
|RD2-team48=Smig the Normal&lt;br /&gt;
|RD2-score48-1=6&lt;br /&gt;
|RD2-score48-2=10 &lt;br /&gt;
|RD2-team49=Harpsichord Giraffe&lt;br /&gt;
|RD2-score49-1=2&lt;br /&gt;
|RD2-score49-2=7 &lt;br /&gt;
|RD2-team50=Quokka Numerous&lt;br /&gt;
|RD2-score50-1=3&lt;br /&gt;
|RD2-score50-2=10 &lt;br /&gt;
|RD2-team51=Clover Wilkinson&lt;br /&gt;
|RD2-score51-1=5&lt;br /&gt;
|RD2-score51-2=11 &lt;br /&gt;
|RD2-team52=Trojan Warhorse&lt;br /&gt;
|RD2-score52-1=0&lt;br /&gt;
|RD2-score52-2=10 &lt;br /&gt;
|RD2-team53=Moomin Rider&lt;br /&gt;
|RD2-score53-1=3&lt;br /&gt;
|RD2-score53-2=10 &lt;br /&gt;
|RD2-team54=One Name&lt;br /&gt;
|RD2-score54-1=5&lt;br /&gt;
|RD2-score54-2=10 &lt;br /&gt;
|RD2-team55=Coral Blue #2 Semi-Gloss Lipstick &lt;br /&gt;
|RD2-score55-1=2&lt;br /&gt;
|RD2-score55-2=7 &lt;br /&gt;
|RD2-team56=Arnold Palmer Jr. Jr.&lt;br /&gt;
|RD2-score56-1=0&lt;br /&gt;
|RD2-score56-2=13 &lt;br /&gt;
|RD2-team57=1950s Rock N Roll Undersea Scifi Dinosaur McDonalds&lt;br /&gt;
|RD2-score57-1=2&lt;br /&gt;
|RD2-score57-2=4 &lt;br /&gt;
|RD2-team58=Solar Dies&lt;br /&gt;
|RD2-score58-1=0&lt;br /&gt;
|RD2-score58-2=2 &lt;br /&gt;
|RD2-team59=Emolya Tattlers&lt;br /&gt;
|RD2-score59-1=2&lt;br /&gt;
|RD2-score59-2=7 &lt;br /&gt;
|RD2-team60=Herlock Sholmes&lt;br /&gt;
|RD2-score60-1=0&lt;br /&gt;
|RD2-score60-2=11 &lt;br /&gt;
|RD2-team61=Greenbriar&lt;br /&gt;
|RD2-score61-1=5&lt;br /&gt;
|RD2-score61-2=12 &lt;br /&gt;
|RD2-team62=Todd Unflushable&lt;br /&gt;
|RD2-score62-1=0&lt;br /&gt;
|RD2-score62-2=11 &lt;br /&gt;
|RD2-team63=Aggregate Confusion&lt;br /&gt;
|RD2-score63-1=3&lt;br /&gt;
|RD2-score63-2=15 &lt;br /&gt;
|RD2-team64=And&lt;br /&gt;
|RD2-score64-1=5&lt;br /&gt;
|RD2-score64-2=15 &lt;br /&gt;
&lt;br /&gt;
|RD3-team1=Mersenne Twisted&lt;br /&gt;
|RD3-score1-1=3&lt;br /&gt;
|RD3-score1-2=7 &lt;br /&gt;
|RD3-team2=Mora Adjutant&lt;br /&gt;
|RD3-score2-1=0&lt;br /&gt;
|RD3-score2-2=8 &lt;br /&gt;
|RD3-team3=What.&lt;br /&gt;
|RD3-score3-1=9&lt;br /&gt;
|RD3-score3-2=15 &lt;br /&gt;
|RD3-team4=りょうこ&lt;br /&gt;
|RD3-score4-1=5&lt;br /&gt;
|RD3-score4-2=15 &lt;br /&gt;
|RD3-team5=The 12th Herb And Spice&lt;br /&gt;
|RD3-score5-1=6&lt;br /&gt;
|RD3-score5-2=8 &lt;br /&gt;
|RD3-team6=The Monitor&lt;br /&gt;
|RD3-score6-1=2&lt;br /&gt;
|RD3-score6-2=9 &lt;br /&gt;
|RD3-team7=Whitest Bread On Earth&lt;br /&gt;
|RD3-score7-1=3&lt;br /&gt;
|RD3-score7-2=16 &lt;br /&gt;
|RD3-team8=Ampersand Resplendent&lt;br /&gt;
|RD3-score8-1=2&lt;br /&gt;
|RD3-score8-2=12 &lt;br /&gt;
|RD3-team9=Melissa Bop&lt;br /&gt;
|RD3-score9-1=4&lt;br /&gt;
|RD3-score9-2=12 &lt;br /&gt;
|RD3-team10=Clip Clipperson&lt;br /&gt;
|RD3-score10-1=4&lt;br /&gt;
|RD3-score10-2=12 &lt;br /&gt;
|RD3-team11=Several Skeletons&lt;br /&gt;
|RD3-score11-1=1&lt;br /&gt;
|RD3-score11-2=10 &lt;br /&gt;
|RD3-team12=Reverse Saint Patrick&lt;br /&gt;
|RD3-score12-1=5&lt;br /&gt;
|RD3-score12-2=10 &lt;br /&gt;
|RD3-team13=Avalanche La Mancha&lt;br /&gt;
|RD3-score13-1=3&lt;br /&gt;
|RD3-score13-2=7 &lt;br /&gt;
|RD3-team14=Elizabeth Monarch&lt;br /&gt;
|RD3-score14-1=3&lt;br /&gt;
|RD3-score14-2=6 &lt;br /&gt;
|RD3-team15=King Duke&lt;br /&gt;
|RD3-score15-1=3&lt;br /&gt;
|RD3-score15-2=8 &lt;br /&gt;
|RD3-team16=Legally Jorts&lt;br /&gt;
|RD3-score16-1=4&lt;br /&gt;
|RD3-score16-2=9 &lt;br /&gt;
|RD3-team17=Simulacrum&lt;br /&gt;
|RD3-score17-1=1&lt;br /&gt;
|RD3-score17-2=17 &lt;br /&gt;
|RD3-team18=Tobias Bagpipe&lt;br /&gt;
|RD3-score18-1=5&lt;br /&gt;
|RD3-score18-2=10 &lt;br /&gt;
|RD3-team19=Binky?!&lt;br /&gt;
|RD3-score19-1=0&lt;br /&gt;
|RD3-score19-2=17 &lt;br /&gt;
|RD3-team20=Ionized Worker&lt;br /&gt;
|RD3-score20-1=6&lt;br /&gt;
|RD3-score20-2=11 &lt;br /&gt;
|RD3-team21=Garfield the Deals Warlock&lt;br /&gt;
|RD3-score21-1=5&lt;br /&gt;
|RD3-score21-2=11 &lt;br /&gt;
|RD3-team22=Bohemian Vegetable Blunderbuss&lt;br /&gt;
|RD3-score22-1=2&lt;br /&gt;
|RD3-score22-2=9 &lt;br /&gt;
|RD3-team23=Jane Doe&lt;br /&gt;
|RD3-score23-1=3&lt;br /&gt;
|RD3-score23-2=12 &lt;br /&gt;
|RD3-team24=Smig the Normal&lt;br /&gt;
|RD3-score24-1=6&lt;br /&gt;
|RD3-score24-2=10 &lt;br /&gt;
|RD3-team25=Quokka Numerous &lt;br /&gt;
|RD3-score25-1=4&lt;br /&gt;
|RD3-score25-2=9 &lt;br /&gt;
|RD3-team26=Clover Wilkinson&lt;br /&gt;
|RD3-score26-1=1&lt;br /&gt;
|RD3-score26-2=8 &lt;br /&gt;
|RD3-team27=One Name&lt;br /&gt;
|RD3-score27-1=5&lt;br /&gt;
|RD3-score27-2=10 &lt;br /&gt;
|RD3-team28=Coral Blue #2 Semi-Gloss Lipstick &lt;br /&gt;
|RD3-score28-1=2&lt;br /&gt;
|RD3-score28-2=10 &lt;br /&gt;
|RD3-team29=1950s Rock N Roll Undersea Scifi Dinosaur McDonalds&lt;br /&gt;
|RD3-score29-1=5&lt;br /&gt;
|RD3-score29-2=14 &lt;br /&gt;
|RD3-team30=Emolya Tattlers&lt;br /&gt;
|RD3-score30-1=5&lt;br /&gt;
|RD3-score30-2=15 &lt;br /&gt;
|RD3-team31=Greenbriar&lt;br /&gt;
|RD3-score31-1=4&lt;br /&gt;
|RD3-score31-2=13 &lt;br /&gt;
|RD3-team32=And&lt;br /&gt;
|RD3-score32-1=5&lt;br /&gt;
|RD3-score32-2=12 &lt;br /&gt;
&lt;br /&gt;
|RD4-team1=Mersenne Twisted&lt;br /&gt;
|RD4-score1-1=4&lt;br /&gt;
|RD4-score1-2=13 &lt;br /&gt;
|RD4-team2=What.&lt;br /&gt;
|RD4-score2-1=7&lt;br /&gt;
|RD4-score2-2=10 &lt;br /&gt;
|RD4-team3=The 12th Herb And Spice&lt;br /&gt;
|RD4-score3-1=7&lt;br /&gt;
|RD4-score3-2=16 &lt;br /&gt;
|RD4-team4=Whitest Bread On Earth&lt;br /&gt;
|RD4-score4-1=2&lt;br /&gt;
|RD4-score4-2=12 &lt;br /&gt;
|RD4-team5=Melissa Bop&lt;br /&gt;
|RD4-score5-1=2&lt;br /&gt;
|RD4-score5-2=10 &lt;br /&gt;
|RD4-team6=Reverse Saint Patrick&lt;br /&gt;
|RD4-score6-1=4&lt;br /&gt;
|RD4-score6-2=8 &lt;br /&gt;
|RD4-team7=Elizabeth Monarch&lt;br /&gt;
|RD4-score7-1=4&lt;br /&gt;
|RD4-score7-2=9 &lt;br /&gt;
|RD4-team8=Legally Jorts&lt;br /&gt;
|RD4-score8-1=1&lt;br /&gt;
|RD4-score8-2=4 &lt;br /&gt;
|RD4-team9=Tobias Bagpipe&lt;br /&gt;
|RD4-score9-1=0&lt;br /&gt;
|RD4-score9-2=3 &lt;br /&gt;
|RD4-team10=Ionized Worker&lt;br /&gt;
|RD4-score10-1=3&lt;br /&gt;
|RD4-score10-2=13 &lt;br /&gt;
|RD4-team11=Garfield the Deals Warlock&lt;br /&gt;
|RD4-score11-1=5&lt;br /&gt;
|RD4-score11-2=15 &lt;br /&gt;
|RD4-team12=Smig the Normal&lt;br /&gt;
|RD4-score12-1=5&lt;br /&gt;
|RD4-score12-2=13 &lt;br /&gt;
|RD4-team13=Quokka Numerous&lt;br /&gt;
|RD4-score13-1=4&lt;br /&gt;
|RD4-score13-2=9 &lt;br /&gt;
|RD4-team14=One Name&lt;br /&gt;
|RD4-score14-1=3&lt;br /&gt;
|RD4-score14-2=9 &lt;br /&gt;
|RD4-team15=1950s Rock N Roll Undersea Scifi Dinosaur McDonalds&lt;br /&gt;
|RD4-score15-1=4&lt;br /&gt;
|RD4-score15-2=9 &lt;br /&gt;
|RD4-team16=And&lt;br /&gt;
|RD4-score16-1=5&lt;br /&gt;
|RD4-score16-2=12 &lt;br /&gt;
&lt;br /&gt;
|RD5-team1=What.&lt;br /&gt;
|RD5-score1-1=4&lt;br /&gt;
|RD5-score1-2=18 &lt;br /&gt;
|RD5-team2=The 12th Herb And Spice&lt;br /&gt;
|RD5-score2-1=5&lt;br /&gt;
|RD5-score2-2=22 &lt;br /&gt;
|RD5-team3=Reverse Saint Patrick&lt;br /&gt;
|RD5-score3-1=6&lt;br /&gt;
|RD5-score3-2=14 &lt;br /&gt;
|RD5-team4=Elizabeth Monarch&lt;br /&gt;
|RD5-score4-1=6&lt;br /&gt;
|RD5-score4-2=15 &lt;br /&gt;
|RD5-team5=Ionized Worker&lt;br /&gt;
|RD5-score5-1=4&lt;br /&gt;
|RD5-score5-2=13 &lt;br /&gt;
|RD5-team6=Smig the Normal&lt;br /&gt;
|RD5-score6-1=4&lt;br /&gt;
|RD5-score6-2=12 &lt;br /&gt;
|RD5-team7=Quokka Numerous&lt;br /&gt;
|RD5-score7-1=5&lt;br /&gt;
|RD5-score7-2=9 &lt;br /&gt;
|RD5-team8=And&lt;br /&gt;
|RD5-score8-1=3&lt;br /&gt;
|RD5-score8-2=17 &lt;br /&gt;
&lt;br /&gt;
|RD6-team1=The 12th Herb And Spice&lt;br /&gt;
|RD6-score1-1=6&lt;br /&gt;
|RD6-score1-2=13 &lt;br /&gt;
|RD6-team2=Reverse Saint Patrick&lt;br /&gt;
|RD6-score2-1=4&lt;br /&gt;
|RD6-score2-2=11 &lt;br /&gt;
|RD6-team3=Smig the Normal&lt;br /&gt;
|RD6-score3-1=5&lt;br /&gt;
|RD6-score3-2=16 &lt;br /&gt;
|RD6-team4=Quokka Numerous&lt;br /&gt;
|RD6-score4-1=7&lt;br /&gt;
|RD6-score4-2=17 &lt;br /&gt;
&lt;br /&gt;
|RD7-team1=The 12th Herb And Spice&lt;br /&gt;
|RD7-score1-1=7&lt;br /&gt;
|RD7-score1-2=20 &lt;br /&gt;
|RD7-team2=Quokka Numerous&lt;br /&gt;
|RD7-score2-1=4&lt;br /&gt;
|RD7-score2-2=17 &lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Pokeylope</name></author>
	</entry>
	<entry>
		<id>https://glolfwiki.sibr.dev/index.php?title=Module:Glolfer&amp;diff=285</id>
		<title>Module:Glolfer</title>
		<link rel="alternate" type="text/html" href="https://glolfwiki.sibr.dev/index.php?title=Module:Glolfer&amp;diff=285"/>
		<updated>2021-06-13T22:11:56Z</updated>

		<summary type="html">&lt;p&gt;Pokeylope: Update emoji&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local pyrandom = require &amp;quot;Module:Pyrandom&amp;quot;&lt;br /&gt;
&lt;br /&gt;
function titlecase(str)&lt;br /&gt;
	local buf = {}&lt;br /&gt;
	local inWord = false&lt;br /&gt;
	for i = 1, #str do&lt;br /&gt;
		local c = string.sub(str, i, i)&lt;br /&gt;
		if inWord then&lt;br /&gt;
			table.insert(buf, string.lower(c))&lt;br /&gt;
		else&lt;br /&gt;
			table.insert(buf, string.upper(c))&lt;br /&gt;
		end&lt;br /&gt;
		inWord = (string.find(c, '%a') ~= nil)&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat(buf)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function random_player_emoji(name)&lt;br /&gt;
	local humanoid = {&lt;br /&gt;
		&amp;quot;👶&amp;quot;,&amp;quot;👧&amp;quot;,&amp;quot;🧒&amp;quot;,&amp;quot;👦&amp;quot;,&amp;quot;👩&amp;quot;,&amp;quot;🧑&amp;quot;,&amp;quot;👨&amp;quot;,&amp;quot;👩‍🦱&amp;quot;,&amp;quot;🧑‍🦱&amp;quot;,&amp;quot;👨‍🦱&amp;quot;,&amp;quot;👩‍🦰&amp;quot;,&amp;quot;🧑‍🦰&amp;quot;,&amp;quot;👨‍🦰&amp;quot;,&amp;quot;👱‍♀️&amp;quot;,&lt;br /&gt;
		&amp;quot;👱&amp;quot;,&amp;quot;👱‍♂️&amp;quot;,&amp;quot;👩‍🦳&amp;quot;,&amp;quot;🧑‍🦳&amp;quot;,&amp;quot;👨‍🦳&amp;quot;,&amp;quot;👩‍🦲&amp;quot;,&amp;quot;🧑‍🦲&amp;quot;,&amp;quot;👨‍🦲&amp;quot;,&amp;quot;🧔&amp;quot;,&amp;quot;👵&amp;quot;,&amp;quot;🧓&amp;quot;,&amp;quot;👴&amp;quot;,&amp;quot;👲&amp;quot;,&amp;quot;👳‍♀️&amp;quot;,&lt;br /&gt;
		&amp;quot;👳&amp;quot;,&amp;quot;👳‍♂️&amp;quot;,&amp;quot;🧕&amp;quot;,&amp;quot;👮‍♀️&amp;quot;,&amp;quot;👮&amp;quot;,&amp;quot;👮‍♂️&amp;quot;,&amp;quot;👷‍♀️&amp;quot;,&amp;quot;👷&amp;quot;,&amp;quot;👷‍♂️&amp;quot;,&amp;quot;💂‍♀️&amp;quot;,&amp;quot;💂&amp;quot;,&amp;quot;💂‍♂️&amp;quot;,&amp;quot;🕵️‍♀️&amp;quot;,&amp;quot;🕵️&amp;quot;,&lt;br /&gt;
		&amp;quot;🕵️‍♂️&amp;quot;,&amp;quot;👩‍⚕️&amp;quot;,&amp;quot;🧑‍⚕️&amp;quot;,&amp;quot;👨‍⚕️&amp;quot;,&amp;quot;👩‍🌾&amp;quot;,&amp;quot;🧑‍🌾&amp;quot;,&amp;quot;👨‍🌾&amp;quot;,&amp;quot;👩‍🍳&amp;quot;,&amp;quot;🧑‍🍳&amp;quot;,&amp;quot;👨‍🍳&amp;quot;,&amp;quot;👩‍🎓&amp;quot;,&amp;quot;🧑‍🎓&amp;quot;,&amp;quot;👨‍🎓&amp;quot;,&amp;quot;👩‍🎤&amp;quot;,&lt;br /&gt;
		&amp;quot;🧑‍🎤&amp;quot;,&amp;quot;👨‍🎤&amp;quot;,&amp;quot;👩‍🏫&amp;quot;,&amp;quot;🧑‍🏫&amp;quot;,&amp;quot;👨‍🏫&amp;quot;,&amp;quot;👩‍🏭&amp;quot;,&amp;quot;🧑‍🏭&amp;quot;,&amp;quot;👨‍🏭&amp;quot;,&amp;quot;👩‍💻&amp;quot;,&amp;quot;🧑‍💻&amp;quot;,&amp;quot;👨‍💻&amp;quot;,&amp;quot;👩‍💼&amp;quot;,&amp;quot;🧑‍💼&amp;quot;,&amp;quot;👨‍💼&amp;quot;,&lt;br /&gt;
		&amp;quot;👩‍🔧&amp;quot;,&amp;quot;🧑‍🔧&amp;quot;,&amp;quot;👨‍🔧&amp;quot;,&amp;quot;👩‍🔬&amp;quot;,&amp;quot;🧑‍🔬&amp;quot;,&amp;quot;👨‍🔬&amp;quot;,&amp;quot;👩‍🎨&amp;quot;,&amp;quot;🧑‍🎨&amp;quot;,&amp;quot;👨‍🎨&amp;quot;,&amp;quot;👩‍🚒&amp;quot;,&amp;quot;🧑‍🚒&amp;quot;,&amp;quot;👨‍🚒&amp;quot;,&amp;quot;👩‍✈️&amp;quot;,&amp;quot;🧑‍✈️&amp;quot;,&lt;br /&gt;
		&amp;quot;👨‍✈️&amp;quot;,&amp;quot;👩‍🚀&amp;quot;,&amp;quot;🧑‍🚀&amp;quot;,&amp;quot;👨‍🚀&amp;quot;,&amp;quot;👩‍⚖️&amp;quot;,&amp;quot;🧑‍⚖️&amp;quot;,&amp;quot;👨‍⚖️&amp;quot;,&amp;quot;👰&amp;quot;,&amp;quot;🏋️&amp;quot;,&amp;quot;🤵&amp;quot;,&amp;quot;🤸&amp;quot;,&amp;quot;👸&amp;quot;,&amp;quot;🤴&amp;quot;,&amp;quot;🦸‍♀️&amp;quot;,&amp;quot;🦸&amp;quot;,&lt;br /&gt;
		&amp;quot;🦸‍♂️&amp;quot;,&amp;quot;🦹‍♀️&amp;quot;,&amp;quot;🦹&amp;quot;,&amp;quot;🦹‍♂️&amp;quot;,&amp;quot;🤶&amp;quot;,&amp;quot;🚴&amp;quot;,&amp;quot;🎅&amp;quot;,&amp;quot;🧙‍♀️&amp;quot;,&amp;quot;🧙&amp;quot;,&amp;quot;🧙‍♂️&amp;quot;,&amp;quot;🧝‍♀️&amp;quot;,&amp;quot;🧝&amp;quot;,&amp;quot;🧝‍♂️&amp;quot;,&amp;quot;🧛‍♀️&amp;quot;,&amp;quot;🧛&amp;quot;,&lt;br /&gt;
		&amp;quot;🧛‍♂️&amp;quot;,&amp;quot;🧟‍♀️&amp;quot;,&amp;quot;🧟&amp;quot;,&amp;quot;🧟‍♂️&amp;quot;,&amp;quot;🧞‍♀️&amp;quot;,&amp;quot;🧞&amp;quot;,&amp;quot;🧞‍♂️&amp;quot;,&amp;quot;🧜‍♀️&amp;quot;,&amp;quot;🧜&amp;quot;,&amp;quot;🧜‍♂️&amp;quot;,&amp;quot;🧚‍♀️&amp;quot;,&amp;quot;🧚&amp;quot;,&amp;quot;🧚‍♂️&amp;quot;,&amp;quot;👼&amp;quot;,&amp;quot;🤰&amp;quot;,&lt;br /&gt;
		&amp;quot;🤱&amp;quot;,&amp;quot;🙇‍♀️&amp;quot;,&amp;quot;🙇&amp;quot;,&amp;quot;🙇‍♂️&amp;quot;,&amp;quot;💁‍♀️&amp;quot;,&amp;quot;💁&amp;quot;,&amp;quot;💁‍♂️&amp;quot;,&amp;quot;🙅‍♀️&amp;quot;,&amp;quot;🙅&amp;quot;,&amp;quot;🙅‍♂️&amp;quot;,&amp;quot;🙆‍♀️&amp;quot;,&amp;quot;🙆&amp;quot;,&amp;quot;🙆‍♂️&amp;quot;,&amp;quot;🙋‍♀️&amp;quot;,&amp;quot;🙋&amp;quot;,&lt;br /&gt;
		&amp;quot;🙋‍♂️&amp;quot;,&amp;quot;🧏‍♀️&amp;quot;,&amp;quot;🧏&amp;quot;,&amp;quot;🧏‍♂️&amp;quot;,&amp;quot;🤦‍♀️&amp;quot;,&amp;quot;🤦&amp;quot;,&amp;quot;🤦‍♂️&amp;quot;,&amp;quot;🤷‍♀️&amp;quot;,&amp;quot;🤷&amp;quot;,&amp;quot;🤷‍♂️&amp;quot;,&amp;quot;🙎‍♀️&amp;quot;,&amp;quot;🙎&amp;quot;,&amp;quot;🙎‍♂️&amp;quot;,&amp;quot;🙍‍♀️&amp;quot;,&amp;quot;🙍&amp;quot;,&lt;br /&gt;
		&amp;quot;🙍‍♂️&amp;quot;,&amp;quot;💇‍♀️&amp;quot;,&amp;quot;💇&amp;quot;,&amp;quot;💇‍♂️&amp;quot;,&amp;quot;💆‍♀️&amp;quot;,&amp;quot;💆&amp;quot;,&amp;quot;💆‍♂️&amp;quot;,&amp;quot;🧖‍♀️&amp;quot;,&amp;quot;🧖&amp;quot;,&amp;quot;🧖‍♂️&amp;quot;,&amp;quot;💅&amp;quot;,&amp;quot;🤳&amp;quot;,&amp;quot;💃&amp;quot;,&amp;quot;🕺&amp;quot;,&amp;quot;🕴&amp;quot;,&amp;quot;👩‍🦽&amp;quot;,&lt;br /&gt;
		&amp;quot;🧑‍🦽&amp;quot;,&amp;quot;👨‍🦽&amp;quot;,&amp;quot;👩‍🦼&amp;quot;,&amp;quot;🧑‍🦼&amp;quot;,&amp;quot;👨‍🦼&amp;quot;,&amp;quot;🚶‍♀️&amp;quot;,&amp;quot;🚶&amp;quot;,&amp;quot;🚶‍♂️&amp;quot;,&amp;quot;👩‍🦯&amp;quot;,&amp;quot;🧑‍🦯&amp;quot;,&amp;quot;👨‍🦯&amp;quot;,&amp;quot;🧎‍♀️&amp;quot;,&amp;quot;🧎&amp;quot;,&amp;quot;🧎‍♂️&amp;quot;,&amp;quot;🏃‍♀️&amp;quot;,&amp;quot;🏃&amp;quot;,&lt;br /&gt;
		&amp;quot;🏃‍♂️&amp;quot;,&amp;quot;🧍‍♀️&amp;quot;,&amp;quot;🧍&amp;quot;,&amp;quot;🧍‍♂️&amp;quot;,&amp;quot;👭&amp;quot;,&amp;quot;🧑‍🤝‍🧑&amp;quot;,&amp;quot;👬&amp;quot;,&amp;quot;👫&amp;quot;,&amp;quot;👩‍❤️‍👩&amp;quot;,&amp;quot;💑&amp;quot;,&amp;quot;👨‍❤️‍👨&amp;quot;,&amp;quot;👩‍❤️‍👨&amp;quot;,&amp;quot;👩‍❤️‍💋‍👩&amp;quot;,&amp;quot;💏&amp;quot;,&amp;quot;👨‍❤️‍💋‍👨&amp;quot;,&amp;quot;👩‍❤️‍💋‍👨&amp;quot;,&lt;br /&gt;
		&amp;quot;👪&amp;quot;,&amp;quot;👨‍👩‍👦&amp;quot;,&amp;quot;👨‍👩‍👧&amp;quot;,&amp;quot;👨‍👩‍👧‍👦&amp;quot;,&amp;quot;👨‍👩‍👦‍👦&amp;quot;,&amp;quot;👨‍👩‍👧‍👧&amp;quot;,&amp;quot;👨‍👨‍👦&amp;quot;,&amp;quot;👨‍👨‍👧&amp;quot;,&amp;quot;👨‍👨‍👧‍👦&amp;quot;,&amp;quot;👨‍👨‍👦‍👦&amp;quot;,&amp;quot;👨‍👨‍👧‍👧&amp;quot;,&amp;quot;👩‍👩‍👦&amp;quot;,&amp;quot;👩‍👩‍👧&amp;quot;,&amp;quot;👩‍👩‍👧‍👦&amp;quot;,&amp;quot;👩‍👩‍👦‍👦&amp;quot;,&amp;quot;👩‍👩‍👧‍👧&amp;quot;,&lt;br /&gt;
		&amp;quot;👨‍👦&amp;quot;,&amp;quot;👨‍👦‍👦&amp;quot;,&amp;quot;👨‍👧&amp;quot;,&amp;quot;👨‍👧‍👦&amp;quot;,&amp;quot;👨‍👧‍👧&amp;quot;,&amp;quot;👩‍👦&amp;quot;,&amp;quot;👩‍👦‍👦&amp;quot;,&amp;quot;👩‍👧&amp;quot;,&amp;quot;👩‍👧‍👦&amp;quot;,&amp;quot;👩‍👧‍👧&amp;quot;,&amp;quot;🗣&amp;quot;,&amp;quot;👤&amp;quot;,&amp;quot;👥&amp;quot;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local nonhumanoid={&lt;br /&gt;
		&amp;quot;🐶&amp;quot;,&amp;quot;🐱&amp;quot;,&amp;quot;🐭&amp;quot;,&amp;quot;🐹&amp;quot;,&amp;quot;🐰&amp;quot;,&amp;quot;🦊&amp;quot;,&amp;quot;🐻&amp;quot;,&amp;quot;🐼&amp;quot;,&amp;quot;🐨&amp;quot;,&amp;quot;🐯&amp;quot;,&amp;quot;🦁&amp;quot;,&amp;quot;🐮&amp;quot;,&amp;quot;🐷&amp;quot;,&amp;quot;🐽&amp;quot;,&amp;quot;🐸&amp;quot;,&amp;quot;🐵&amp;quot;,&lt;br /&gt;
		&amp;quot;🙈&amp;quot;,&amp;quot;🙉&amp;quot;,&amp;quot;🙊&amp;quot;,&amp;quot;🐒&amp;quot;,&amp;quot;🐔&amp;quot;,&amp;quot;🐧&amp;quot;,&amp;quot;🐦&amp;quot;,&amp;quot;🐤&amp;quot;,&amp;quot;🐣&amp;quot;,&amp;quot;🐥&amp;quot;,&amp;quot;🦆&amp;quot;,&amp;quot;🦅&amp;quot;,&amp;quot;🦉&amp;quot;,&amp;quot;🦇&amp;quot;,&amp;quot;🐺&amp;quot;,&amp;quot;🐗&amp;quot;,&amp;quot;🐴&amp;quot;,&amp;quot;🦄&amp;quot;,&lt;br /&gt;
		&amp;quot;🐝&amp;quot;,&amp;quot;🐛&amp;quot;,&amp;quot;🦋&amp;quot;,&amp;quot;🐌&amp;quot;,&amp;quot;🐞&amp;quot;,&amp;quot;🐞&amp;quot;,&amp;quot;🦟&amp;quot;,&amp;quot;🦗&amp;quot;,&amp;quot;🐞&amp;quot;,&amp;quot;🦂&amp;quot;,&amp;quot;🐢&amp;quot;,&amp;quot;🐍&amp;quot;,&amp;quot;🦎&amp;quot;,&amp;quot;🦖&amp;quot;,&amp;quot;🦕&amp;quot;,&amp;quot;🐙&amp;quot;,&amp;quot;🦑&amp;quot;,&amp;quot;🦐&amp;quot;,&lt;br /&gt;
		&amp;quot;🦞&amp;quot;,&amp;quot;🦀&amp;quot;,&amp;quot;🐡&amp;quot;,&amp;quot;🐠&amp;quot;,&amp;quot;🐟&amp;quot;,&amp;quot;🐬&amp;quot;,&amp;quot;🐳&amp;quot;,&amp;quot;🐋&amp;quot;,&amp;quot;🦈&amp;quot;,&amp;quot;🐊&amp;quot;,&amp;quot;🐅&amp;quot;,&amp;quot;🐆&amp;quot;,&amp;quot;🦓&amp;quot;,&amp;quot;🦍&amp;quot;,&amp;quot;🦧&amp;quot;,&amp;quot;🐘&amp;quot;,&amp;quot;🦛&amp;quot;,&amp;quot;🦏&amp;quot;,&lt;br /&gt;
		&amp;quot;🐪&amp;quot;,&amp;quot;🐫&amp;quot;,&amp;quot;🦒&amp;quot;,&amp;quot;🦘&amp;quot;,&amp;quot;🐃&amp;quot;,&amp;quot;🐂&amp;quot;,&amp;quot;🐄&amp;quot;,&amp;quot;🐎&amp;quot;,&amp;quot;🐖&amp;quot;,&amp;quot;🐏&amp;quot;,&amp;quot;🐑&amp;quot;,&amp;quot;🦙&amp;quot;,&amp;quot;🐐&amp;quot;,&amp;quot;🦌&amp;quot;,&amp;quot;🐕&amp;quot;,&amp;quot;🐩&amp;quot;,&amp;quot;🦮&amp;quot;,&amp;quot;🐕‍🦺&amp;quot;,&lt;br /&gt;
		&amp;quot;🐈&amp;quot;,&amp;quot;🐓&amp;quot;,&amp;quot;🦃&amp;quot;,&amp;quot;🦚&amp;quot;,&amp;quot;🦜&amp;quot;,&amp;quot;🦢&amp;quot;,&amp;quot;🦩&amp;quot;,&amp;quot;🕊️&amp;quot;,&amp;quot;🐇&amp;quot;,&amp;quot;🦝&amp;quot;,&amp;quot;🦨&amp;quot;,&amp;quot;🦡&amp;quot;,&amp;quot;🦦&amp;quot;,&amp;quot;🦥&amp;quot;,&amp;quot;🐁&amp;quot;,&amp;quot;🐀&amp;quot;,&amp;quot;🐿&amp;quot;,&amp;quot;🦔&amp;quot;,&lt;br /&gt;
		&amp;quot;🐉&amp;quot;,&amp;quot;🐲&amp;quot;,&amp;quot;🪐&amp;quot;,&amp;quot;💫&amp;quot;,&amp;quot;🌪&amp;quot;,&amp;quot;🌈&amp;quot;,&amp;quot;📠&amp;quot;,&amp;quot;📺&amp;quot;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local rand = pyrandom.new(titlecase(name))&lt;br /&gt;
	if rand:random() &amp;gt; 0.5 then&lt;br /&gt;
		return rand:choice(humanoid)&lt;br /&gt;
	else&lt;br /&gt;
		return rand:choice(nonhumanoid)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function generate_random_stlats_from_name(name)&lt;br /&gt;
	local rand = pyrandom.new(titlecase(name))&lt;br /&gt;
	return {&lt;br /&gt;
		nyoomability = math.max(rand:gauss(0,0.3),1.4),&lt;br /&gt;
		tofu = rand:random(),&lt;br /&gt;
		wiggle = rand:random(),&lt;br /&gt;
		ritualism = rand:random(),&lt;br /&gt;
		musclitude = rand:random(),&lt;br /&gt;
		finesse = rand:random(),&lt;br /&gt;
		needlethreadableness = rand:random(), &lt;br /&gt;
		left_handedness = rand:gauss(0,0.3),&lt;br /&gt;
		stance = rand:choice({&amp;quot;Tricky&amp;quot;,&amp;quot;Flashy&amp;quot;,&amp;quot;Aggro&amp;quot;,&amp;quot;Tanky&amp;quot;,&amp;quot;Twitchy&amp;quot;,&amp;quot;Powerful&amp;quot;,&lt;br /&gt;
		&amp;quot;Wibble&amp;quot;,&amp;quot;Wobble&amp;quot;,&amp;quot;Reverse&amp;quot;,&amp;quot;Feint&amp;quot;,&amp;quot;Electric&amp;quot;,&amp;quot;Spicy&amp;quot;,&amp;quot;Pomegranate&amp;quot;,&lt;br /&gt;
		&amp;quot;Explosive&amp;quot;,&amp;quot;Cottagecore&amp;quot;,&amp;quot;Corecore&amp;quot;,&amp;quot;Hardcore&amp;quot;,&amp;quot;Softcore&amp;quot;,&lt;br /&gt;
		&amp;quot;Hand to Hand&amp;quot;,&amp;quot;Lefty&amp;quot;,&amp;quot;Pop-Punk&amp;quot;,&amp;quot;DPS&amp;quot;,&amp;quot;Repose&amp;quot;}),&lt;br /&gt;
		fav_tea = rand:choice({&amp;quot;Iced&amp;quot;,&amp;quot;Boba&amp;quot;,&amp;quot;White&amp;quot;,&amp;quot;Green&amp;quot;,&amp;quot;Oolong&amp;quot;,&lt;br /&gt;
		&amp;quot;Pu'erh&amp;quot;,&amp;quot;Chai&amp;quot;,&amp;quot;Milk&amp;quot;,&amp;quot;Neon&amp;quot;,&amp;quot;Sweet&amp;quot;,&amp;quot;Void&amp;quot;,&amp;quot;Tea?&amp;quot;,&amp;quot;Caramel&amp;quot;,&lt;br /&gt;
		&amp;quot;Lightspeed&amp;quot;,&amp;quot;Time-traveling&amp;quot;,&amp;quot;Bloody&amp;quot;,&amp;quot;Black&amp;quot;,&amp;quot;Miso&amp;quot;,&amp;quot;Concrete&amp;quot;,&lt;br /&gt;
		&amp;quot;Hard-boiled egg&amp;quot;,&amp;quot;Hot Chocolate&amp;quot;,&amp;quot;Bubble&amp;quot;}),&lt;br /&gt;
		estimation = rand:random(),&lt;br /&gt;
&lt;br /&gt;
		earliness = rand:random(),&lt;br /&gt;
		twirliness = rand:random(),&lt;br /&gt;
		churliness = rand:random(),&lt;br /&gt;
		aceness = rand:random(),&lt;br /&gt;
		marbles = rand:randrange(2,4),&lt;br /&gt;
&lt;br /&gt;
		unworthiness = rand:random(),&lt;br /&gt;
		splortsmanship = rand:random(),&lt;br /&gt;
		tankitude = rand:random(),&lt;br /&gt;
		pettiness = rand:random(),&lt;br /&gt;
		owlishness = rand:random(),&lt;br /&gt;
		disco = rand:random(),&lt;br /&gt;
		pettability = rand:random(),&lt;br /&gt;
		softness = rand:random(),&lt;br /&gt;
		improv = rand:random(),&lt;br /&gt;
		tentacles = rand:randrange(0,10),&lt;br /&gt;
		capitalism = -rand:random(),&lt;br /&gt;
		polkadottedness = 0,&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function generate_random_player_from_name(name)&lt;br /&gt;
	local player = generate_random_stlats_from_name(name)&lt;br /&gt;
	player.name = name&lt;br /&gt;
	player.emoji = random_player_emoji(name)&lt;br /&gt;
	return player&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function search_array(a, v)&lt;br /&gt;
	for i = 1, #a do&lt;br /&gt;
		if a[i] == v then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function sum(a)&lt;br /&gt;
	local r = 0&lt;br /&gt;
	for i = 1, #a do&lt;br /&gt;
		r = r + a[i]&lt;br /&gt;
	end&lt;br /&gt;
	return r&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function unpredictability(p)&lt;br /&gt;
	local weights = {p.churliness,p.earliness,p.twirliness}&lt;br /&gt;
	if search_array({&amp;quot;Aggro&amp;quot;,&amp;quot;Powerful&amp;quot;,&amp;quot;Hand to Hand&amp;quot;,&amp;quot;DPS&amp;quot;,&amp;quot;Explosive&amp;quot;,&amp;quot;Hardcore&amp;quot;, &amp;quot;Wibble&amp;quot;,&amp;quot;Electric&amp;quot;}, p.stance) then&lt;br /&gt;
		weights[1] = weights[1] + 0.5&lt;br /&gt;
	elseif search_array({&amp;quot;Tanky&amp;quot;,&amp;quot;Twitchy&amp;quot;,&amp;quot;Repose&amp;quot;,&amp;quot;Reverse&amp;quot;,&amp;quot;Softcore&amp;quot;,  &amp;quot;Cottagecore&amp;quot;,&amp;quot;Pomegranate&amp;quot;}, p.stance) then&lt;br /&gt;
		weights[2] = weights[2] + 0.5&lt;br /&gt;
	elseif search_array(&amp;quot;Feint&amp;quot;,&amp;quot;Tricky&amp;quot;,&amp;quot;Pop-Punk&amp;quot;,&amp;quot;Flashy&amp;quot;,&amp;quot;Spicy&amp;quot;,       &amp;quot;Corecore&amp;quot;,&amp;quot;Wobble&amp;quot;,&amp;quot;Lefty&amp;quot;, p.stance) then&lt;br /&gt;
		weights[3] = weights[3] + 0.5&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local chanceOfBiggest = math.max(unpack(weights))/sum(weights)&lt;br /&gt;
&lt;br /&gt;
	local minChance = 1/#weights&lt;br /&gt;
&lt;br /&gt;
	return 1-(chanceOfBiggest-minChance)/(1-minChance)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function driving_rating(p)&lt;br /&gt;
	return (p.musclitude + p.tofu)*5/2&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function precision_rating(p)&lt;br /&gt;
	return (p.needlethreadableness*0.5 + p.finesse + p.estimation*0.2) * 5/(1+0.2+0.5) - math.abs(p.left_handedness)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function aerodynamics_rating(p)&lt;br /&gt;
	return (p.ritualism + p.owlishness + p.softness) * 5/3&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function self_awareness_rating(p)&lt;br /&gt;
	return (p.wiggle*0.5 + (p.marbles-2)/2 + unpredictability(p)*0.8) * 5/(0.5+1+0.8) + p.polkadottedness * 5&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local known_players = {&lt;br /&gt;
	[&amp;quot;Polkadot Patterson&amp;quot;] = {&lt;br /&gt;
		name=&amp;quot;Polkadot Patterson&amp;quot;,&lt;br /&gt;
		stance=&amp;quot;Squiddish&amp;quot;,&lt;br /&gt;
		fav_tea= &amp;quot;Iced&amp;quot;,&lt;br /&gt;
		nyoomability = 1.5,&lt;br /&gt;
		musclitude=1,&lt;br /&gt;
		finesse=1,&lt;br /&gt;
		needlethreadableness=1,&lt;br /&gt;
		polkadottedness=1,  &lt;br /&gt;
		left_handedness= 0,&lt;br /&gt;
		estimation=1,&lt;br /&gt;
		twirliness=0.3,&lt;br /&gt;
		churliness=0.3,&lt;br /&gt;
		earliness=0.3,&lt;br /&gt;
		aceness=0.3,&lt;br /&gt;
		marbles=4,&lt;br /&gt;
&lt;br /&gt;
		tofu=1,&lt;br /&gt;
		wiggle=1,&lt;br /&gt;
		ritualism=1,&lt;br /&gt;
		owlishness=1,&lt;br /&gt;
		disco=0.0,&lt;br /&gt;
		pettability=0.0,&lt;br /&gt;
		softness=1,&lt;br /&gt;
		improv=0.0,&lt;br /&gt;
		unworthiness=0,&lt;br /&gt;
		splortsmanship=1,&lt;br /&gt;
		tankitude=1.0,&lt;br /&gt;
		pettiness=0.0,&lt;br /&gt;
		tentacles=4,&lt;br /&gt;
		capitalism=-0.5,&lt;br /&gt;
		emoji=&amp;quot;😅&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function get_player_from_name(name)&lt;br /&gt;
	name = titlecase(name)&lt;br /&gt;
	return known_players[name] or generate_random_player_from_name(name)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local glolfer = {}&lt;br /&gt;
&lt;br /&gt;
function glolfer.emoji(frame)&lt;br /&gt;
	local args&lt;br /&gt;
	if frame.args.name then&lt;br /&gt;
		args = frame.args&lt;br /&gt;
	else&lt;br /&gt;
		args = frame:getParent().args&lt;br /&gt;
	end&lt;br /&gt;
	local name = args.name&lt;br /&gt;
	return random_player_emoji(name)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function glolfer.infobox(frame)&lt;br /&gt;
	local args&lt;br /&gt;
	if frame.args.name then&lt;br /&gt;
		args = frame.args&lt;br /&gt;
	else&lt;br /&gt;
		args = frame:getParent().args&lt;br /&gt;
	end&lt;br /&gt;
	local name = args.name&lt;br /&gt;
	local p = get_player_from_name(name)&lt;br /&gt;
	local template_args = {}&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		template_args[k] = v&lt;br /&gt;
	end&lt;br /&gt;
	for k, v in pairs({&lt;br /&gt;
		name = name,&lt;br /&gt;
		signature = p.emoji,&lt;br /&gt;
		stance = p.stance,&lt;br /&gt;
		tea = p.fav_tea,&lt;br /&gt;
		driving = driving_rating(p),&lt;br /&gt;
		grip = precision_rating(p),&lt;br /&gt;
		aerodynamics = aerodynamics_rating(p),&lt;br /&gt;
		[&amp;quot;self-awareness&amp;quot;] = self_awareness_rating(p),&lt;br /&gt;
	}) do&lt;br /&gt;
		template_args[k] = v&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return frame:expandTemplate{ title = &amp;quot;GlolferInfo&amp;quot;, args = template_args}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return glolfer&lt;/div&gt;</summary>
		<author><name>Pokeylope</name></author>
	</entry>
	<entry>
		<id>https://glolfwiki.sibr.dev/index.php?title=Fifth_IGA_Open&amp;diff=284</id>
		<title>Fifth IGA Open</title>
		<link rel="alternate" type="text/html" href="https://glolfwiki.sibr.dev/index.php?title=Fifth_IGA_Open&amp;diff=284"/>
		<updated>2021-06-13T20:26:31Z</updated>

		<summary type="html">&lt;p&gt;Pokeylope: Created page with &amp;quot;The Fifth IGA Open was held on June 13, 2021.  ==Contestants== * Solar Dies * Rat Polk * Trojan Warhorse * True Beauty * Cornmeals Girts * Rocks Hullabaloo * Coral Blue #2...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Fifth IGA Open was held on June 13, 2021.&lt;br /&gt;
&lt;br /&gt;
==Contestants==&lt;br /&gt;
* [[Solar Dies]]&lt;br /&gt;
* Rat Polk&lt;br /&gt;
* Trojan Warhorse&lt;br /&gt;
* True Beauty&lt;br /&gt;
* Cornmeals Girts&lt;br /&gt;
* Rocks Hullabaloo&lt;br /&gt;
* Coral Blue #2 Semi-Gloss Lipstick&lt;br /&gt;
* [[File:Uhhh.png|22px|link=|:uhhh:]]&lt;br /&gt;
* [[Crocodile 'Spits Fire' Spitfire]]&lt;br /&gt;
* Caldera Clembons &lt;br /&gt;
* The Monitor&lt;br /&gt;
* Tobias Bagpipe&lt;br /&gt;
* Ampersand Resplendent&lt;br /&gt;
* Matron Aquarium&lt;br /&gt;
* Fractal Recursion&lt;br /&gt;
* What.&lt;br /&gt;
* [[Legally Jorts]]&lt;br /&gt;
* Clip Clipperson&lt;br /&gt;
* Smig the Normal&lt;br /&gt;
* Sappho Herself&lt;br /&gt;
* Works Everytime&lt;br /&gt;
* And&lt;br /&gt;
* The The&lt;br /&gt;
* Updog&lt;br /&gt;
* Salih Ultrabass&lt;br /&gt;
* Garfield the Deals Warlock&lt;br /&gt;
* The Cringe-Ass Nae Nae Baby of Legend&lt;br /&gt;
* Cherry Sprints!&lt;br /&gt;
* Avalanche La Mancha&lt;br /&gt;
* Bichael Micycle&lt;br /&gt;
* Existential Sigh&lt;br /&gt;
* Aggregate Confusion&lt;br /&gt;
* Mersenne Twisted&lt;br /&gt;
* Greenbriar&lt;br /&gt;
* Herlock Sholmes&lt;br /&gt;
* Train Emoji&lt;br /&gt;
* Elizabeth Monarch&lt;br /&gt;
* One Name&lt;br /&gt;
* Suplex Trousers&lt;br /&gt;
* Reverse Saint Patrick&lt;br /&gt;
* Bone Larceny&lt;br /&gt;
* Salsa Pandemic&lt;br /&gt;
* Bohemian Vegetable Blunderbuss&lt;br /&gt;
* Whitest Bread On Earth&lt;br /&gt;
* Ukulele Diskhorse&lt;br /&gt;
* Todd Unflushable&lt;br /&gt;
* Rock Bottom Ipecac Brimstone Quad Shot Asparagus Lasers&lt;br /&gt;
* 1950s Rock N Roll Undersea Scifi Dinosaur McDonalds&lt;br /&gt;
* Small Victories&lt;br /&gt;
* Moomin Rider&lt;br /&gt;
* Simon Peck&lt;br /&gt;
* Florida Man&lt;br /&gt;
* Several Skeletons&lt;br /&gt;
* Quokka Numerous&lt;br /&gt;
* [[Melissa Bop]]&lt;br /&gt;
* Harpsichord Giraffe&lt;br /&gt;
* りょうこ&lt;br /&gt;
* Mora Adjutant&lt;br /&gt;
* The 12th Herb And Spice&lt;br /&gt;
* Binky?!&lt;br /&gt;
* Emmie Warhorse&lt;br /&gt;
* Arom Mora&lt;br /&gt;
* Ocean Gazpacho&lt;br /&gt;
* King Duke&lt;br /&gt;
* [[Simulacrum ]]&lt;br /&gt;
* Clover Wilkinson&lt;br /&gt;
* Emolya Tattlers&lt;br /&gt;
* Ionized Worker&lt;br /&gt;
* Jane Doe&lt;br /&gt;
* Arnold Palmer Jr. Jr.&lt;br /&gt;
* Baba&lt;br /&gt;
* Bartleby&lt;/div&gt;</summary>
		<author><name>Pokeylope</name></author>
	</entry>
	<entry>
		<id>https://glolfwiki.sibr.dev/index.php?title=File:Uhhh.png&amp;diff=283</id>
		<title>File:Uhhh.png</title>
		<link rel="alternate" type="text/html" href="https://glolfwiki.sibr.dev/index.php?title=File:Uhhh.png&amp;diff=283"/>
		<updated>2021-06-13T20:19:22Z</updated>

		<summary type="html">&lt;p&gt;Pokeylope: Uploaded a work by The Internet from Discord with UploadWizard&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=={{int:filedesc}}==&lt;br /&gt;
{{Information&lt;br /&gt;
|description={{en|1=The Anchor, looking confused}}&lt;br /&gt;
|date=2021-06-13&lt;br /&gt;
|source=Discord&lt;br /&gt;
|author=The Internet&lt;br /&gt;
|permission=&lt;br /&gt;
|other versions=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=={{int:license-header}}==&lt;br /&gt;
{{subst:uwl}}&lt;/div&gt;</summary>
		<author><name>Pokeylope</name></author>
	</entry>
	<entry>
		<id>https://glolfwiki.sibr.dev/index.php?title=Glolfers&amp;diff=281</id>
		<title>Glolfers</title>
		<link rel="alternate" type="text/html" href="https://glolfwiki.sibr.dev/index.php?title=Glolfers&amp;diff=281"/>
		<updated>2021-06-13T13:38:15Z</updated>

		<summary type="html">&lt;p&gt;Pokeylope: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Add a new glolfer page:&lt;br /&gt;
{{#forminput:form=Glolfer|button text=Create page|placeholder=Name}}&lt;br /&gt;
==Glolfers==&lt;br /&gt;
:&amp;lt;small class=&amp;quot;plainlinks&amp;quot;&amp;gt;[{{fullurl:{{FULLPAGENAME}}|action=purge}} ''Refresh list'']&amp;lt;/small&amp;gt;&lt;br /&gt;
{{#dpl:category=Glolfers&lt;br /&gt;
|namespace=&lt;br /&gt;
|ordermethod=title&lt;br /&gt;
|format=,*,\n&lt;br /&gt;
|include={Glolfer}List&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Pokeylope</name></author>
	</entry>
	<entry>
		<id>https://glolfwiki.sibr.dev/index.php?title=Template:Twitter&amp;diff=278</id>
		<title>Template:Twitter</title>
		<link rel="alternate" type="text/html" href="https://glolfwiki.sibr.dev/index.php?title=Template:Twitter&amp;diff=278"/>
		<updated>2021-06-11T17:34:47Z</updated>

		<summary type="html">&lt;p&gt;Pokeylope: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://twitter.com/{{{1}}} 🐦]&lt;/div&gt;</summary>
		<author><name>Pokeylope</name></author>
	</entry>
	<entry>
		<id>https://glolfwiki.sibr.dev/index.php?title=Glolfers&amp;diff=277</id>
		<title>Glolfers</title>
		<link rel="alternate" type="text/html" href="https://glolfwiki.sibr.dev/index.php?title=Glolfers&amp;diff=277"/>
		<updated>2021-06-11T17:34:19Z</updated>

		<summary type="html">&lt;p&gt;Pokeylope: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Add a new glolfer page:&lt;br /&gt;
{{#forminput:form=Glolfer|button text=Create page|placeholder=Name}}&lt;br /&gt;
==Glolfers==&lt;br /&gt;
{{#dpl:category=Glolfers&lt;br /&gt;
|namespace=&lt;br /&gt;
|ordermethod=title&lt;br /&gt;
|format=,*,\n&lt;br /&gt;
|include={Glolfer}List&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Pokeylope</name></author>
	</entry>
	<entry>
		<id>https://glolfwiki.sibr.dev/index.php?title=Template:GlolferList&amp;diff=276</id>
		<title>Template:GlolferList</title>
		<link rel="alternate" type="text/html" href="https://glolfwiki.sibr.dev/index.php?title=Template:GlolferList&amp;diff=276"/>
		<updated>2021-06-11T17:33:53Z</updated>

		<summary type="html">&lt;p&gt;Pokeylope: Created page with &amp;quot;{{{name}}} {{{special|}}} {{#if:{{{twitter|}}}|{{Twitter|{{{twitter}}}}}}}&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[{{{name}}}]] {{{special|}}} {{#if:{{{twitter|}}}|{{Twitter|{{{twitter}}}}}}}&lt;/div&gt;</summary>
		<author><name>Pokeylope</name></author>
	</entry>
	<entry>
		<id>https://glolfwiki.sibr.dev/index.php?title=Line_Cook&amp;diff=275</id>
		<title>Line Cook</title>
		<link rel="alternate" type="text/html" href="https://glolfwiki.sibr.dev/index.php?title=Line_Cook&amp;diff=275"/>
		<updated>2021-06-11T17:32:50Z</updated>

		<summary type="html">&lt;p&gt;Pokeylope: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Glolfer&lt;br /&gt;
|name=Line Cook&lt;br /&gt;
|special=[[Fourth IGA Open|🏅]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Pokeylope</name></author>
	</entry>
	<entry>
		<id>https://glolfwiki.sibr.dev/index.php?title=Spooks_McGee&amp;diff=274</id>
		<title>Spooks McGee</title>
		<link rel="alternate" type="text/html" href="https://glolfwiki.sibr.dev/index.php?title=Spooks_McGee&amp;diff=274"/>
		<updated>2021-06-11T17:32:28Z</updated>

		<summary type="html">&lt;p&gt;Pokeylope: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Glolfer&lt;br /&gt;
|name = Spooks McGee&lt;br /&gt;
|signature = 🐹&lt;br /&gt;
|stance = Corecore&lt;br /&gt;
|tea = Boba&lt;br /&gt;
|driving = 1.75&lt;br /&gt;
|grip = 2.5&lt;br /&gt;
|aerodynamics = 2.5&lt;br /&gt;
|self-awareness = 3.5&lt;br /&gt;
|mods = 🧥&lt;br /&gt;
|twitter = hamsterballing&lt;br /&gt;
|special = [[Third IGA Open|🏅]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
&lt;br /&gt;
Spooks McGee was the victor of the Third IGA Open.&lt;/div&gt;</summary>
		<author><name>Pokeylope</name></author>
	</entry>
	<entry>
		<id>https://glolfwiki.sibr.dev/index.php?title=Frankle_Knives&amp;diff=273</id>
		<title>Frankle Knives</title>
		<link rel="alternate" type="text/html" href="https://glolfwiki.sibr.dev/index.php?title=Frankle_Knives&amp;diff=273"/>
		<updated>2021-06-11T17:32:00Z</updated>

		<summary type="html">&lt;p&gt;Pokeylope: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Glolfer&lt;br /&gt;
|name = Frankle Knives&lt;br /&gt;
|signature = 🦎&lt;br /&gt;
|stance = DPS&lt;br /&gt;
|tea = Tea?&lt;br /&gt;
|driving = 2.5&lt;br /&gt;
|grip = 3.25&lt;br /&gt;
|aerodynamics = 3.5&lt;br /&gt;
|self-awareness = 2.75&lt;br /&gt;
|mods = 🧥&lt;br /&gt;
|special = [[History#The Second IGA Open|🏅]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
&lt;br /&gt;
Frankle Knives was the victor of the Second IGA Open.&lt;/div&gt;</summary>
		<author><name>Pokeylope</name></author>
	</entry>
	<entry>
		<id>https://glolfwiki.sibr.dev/index.php?title=Load_Bearing_Coconut&amp;diff=272</id>
		<title>Load Bearing Coconut</title>
		<link rel="alternate" type="text/html" href="https://glolfwiki.sibr.dev/index.php?title=Load_Bearing_Coconut&amp;diff=272"/>
		<updated>2021-06-11T17:31:40Z</updated>

		<summary type="html">&lt;p&gt;Pokeylope: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Glolfer&lt;br /&gt;
|name = Load Bearing Coconut&lt;br /&gt;
|signature = 🦊&lt;br /&gt;
|stance = Pop-Punk&lt;br /&gt;
|tea = Pu'erh&lt;br /&gt;
|driving = 3.75&lt;br /&gt;
|grip = 3&lt;br /&gt;
|aerodynamics = 3&lt;br /&gt;
|self-awareness = 2&lt;br /&gt;
|mods = 🧥&lt;br /&gt;
|special = [[History#The First IGA Open|🏅]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
Load Bearing Coconut was the victor of the First IGA Open.&lt;/div&gt;</summary>
		<author><name>Pokeylope</name></author>
	</entry>
	<entry>
		<id>https://glolfwiki.sibr.dev/index.php?title=Simulacrum&amp;diff=271</id>
		<title>Simulacrum</title>
		<link rel="alternate" type="text/html" href="https://glolfwiki.sibr.dev/index.php?title=Simulacrum&amp;diff=271"/>
		<updated>2021-06-11T17:22:29Z</updated>

		<summary type="html">&lt;p&gt;Pokeylope: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Glolfer&lt;br /&gt;
|name = Simulacrum&lt;br /&gt;
|signature = 🐂&lt;br /&gt;
|stance = Aggro&lt;br /&gt;
|tea = Iced&lt;br /&gt;
|driving = 2.75&lt;br /&gt;
|grip = 1.5&lt;br /&gt;
|aerodynamics = 2&lt;br /&gt;
|self-awareness = 1&lt;br /&gt;
|mods = Ǫ̷͍̺̘͕̼̣͔̮̤̮̫͓̜͊͆̈́̈̉͌́̈̌͠ͅŭ̷̟̦̹͇̮͚̦̱̹̖̲̟̻͈̳͚̰̀̎͆̌̀t̴̨̨̹͇̬̠̤̳̘̟̩̜̻̳͓́̀͌̍̌😈&lt;br /&gt;
|twitter = GSimulacrum&lt;br /&gt;
|special = [[History#The Grand Unchip|😈]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Pokeylope</name></author>
	</entry>
	<entry>
		<id>https://glolfwiki.sibr.dev/index.php?title=Solar_Dies&amp;diff=270</id>
		<title>Solar Dies</title>
		<link rel="alternate" type="text/html" href="https://glolfwiki.sibr.dev/index.php?title=Solar_Dies&amp;diff=270"/>
		<updated>2021-06-11T17:22:22Z</updated>

		<summary type="html">&lt;p&gt;Pokeylope: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Glolfer&lt;br /&gt;
|name = Solar Dies&lt;br /&gt;
|signature = 🦞&lt;br /&gt;
|stance = Pomegranate&lt;br /&gt;
|tea = Iced&lt;br /&gt;
|driving = 2.5&lt;br /&gt;
|grip = 0.5&lt;br /&gt;
|aerodynamics = 2.25&lt;br /&gt;
|self-awareness = 1.75&lt;br /&gt;
|mods = Ǫ̷͍̺̘͕̼̣͔̮̤̮̫͓̜͊͆̈́̈̉͌́̈̌͠ͅŭ̷̟̦̹͇̮͚̦̱̹̖̲̟̻͈̳͚̰̀̎͆̌̀t̴̨̨̹͇̬̠̤̳̘̟̩̜̻̳͓́̀͌̍̌😈&lt;br /&gt;
|twitter = SolarDies&lt;br /&gt;
|special = [[History#The Grand Unchip|😈]]&lt;br /&gt;
}}&lt;br /&gt;
Solar Dies is an aspiring Glolfer, a literal sun, and an advertising specialist.&lt;br /&gt;
&lt;br /&gt;
=Biography=&lt;br /&gt;
===Early Life===&lt;br /&gt;
Being a miniature sun, Solar has lived for a long time, which is to say millions of years. Ever since their birth they have struggled to find their passion, searching the universe for anything that could make them feel something, no matter what that was. They searched planet after planet, and while some places they came across were able to catch their interest, it was fleeting, and eventually they returned to their search. It was in this search that they found Glolf, which ignited a fire in their soul that they had become convinced by that point did not exist.&lt;br /&gt;
===Beginnings in Old Glolf===&lt;br /&gt;
The Glolf that Solar encountered then was very different than the one that exists today, primarily due to the time difference which has shaped and changed Glolf since that point. Solar had up to this point been at least good at every pasttime and hobby they had found in their search, but Glolf was different, Glolf was hard. This may have been part of what contributed to Solar's passion for the splort, but either way they kept losing. Even as the rules changed, even as time progressed, they kept losing. Competitors and Gods alike cycled, but Solar and their losses stayed constant. As much as this may seem sad, Solar rejoices whenever a new Open is announced, and takes pride in each of their few victories, because even though they might be bad they love the splort.&lt;br /&gt;
===Solar's Personality===&lt;br /&gt;
Solar is pragmatic, they look at things practically and ground the people around them. This is not to say that they are cold or uncaring, for they wish to see everyone around them succeed and be the best person they can be, but sometimes they can push a little too hard and end up coming off as rude. Solar is an adamant rule follower, sometimes to a fault, and does not like breaking the law even if it is something as simple as jaywalking.&lt;br /&gt;
=Current Status=&lt;br /&gt;
Solar is currently finding a new residence after their old house got sucked away in the rift storms that proceeded [[The Afoxalypse]], and enjoys spending time they are not glolfing practicing their swing and hanging out with some of the other glolfers. They see themself as a mentor to [[Rebecca Monarch]] specifically, and try to reign in what they see as her chaotic nature.&lt;br /&gt;
===Rivals from the Rift===&lt;br /&gt;
During the first Open after the return of Glolf, Solar faced off against [[Simulacrum]]. Simulacrum was an opponent unlike any Solar had faced before, as they were seemingly uninterested in winning, choosing instead to cause as much chaos as possible by slamming balls and eventually breaking spacetime itself in an event known as [[The Grand Unchip]]. As a result both Simulacrum and Solar were branded with the mod OUT. This angered Solar, who viewed what Simulacrum had done as an attack on the splort and a mockery of the rules, causing unnecessary chaos and catching them in the crossfire. Since then they have felt tied to Simulacrum as a result of their shared mod which Solar sees as an omen of a shared fate, and thus Solar believes it is their duty to stop Simulacrum and end the chaos.&lt;br /&gt;
===Trivia===&lt;br /&gt;
There is a lost portion of Solar Dies named [[Solar Tries]] that accidentally split off and was sucked into another dimension during the rift storms.&lt;br /&gt;
&lt;br /&gt;
It is unknown how Solar Dies is actually able to wield a glolf club, as the immense heat of their body should melt it.&lt;br /&gt;
&lt;br /&gt;
During one phase of their life, Solar Dies was an advertising manager for SlunnyD, and was in charge of making up new slogans for the drink.&lt;/div&gt;</summary>
		<author><name>Pokeylope</name></author>
	</entry>
	<entry>
		<id>https://glolfwiki.sibr.dev/index.php?title=1&amp;diff=269</id>
		<title>1</title>
		<link rel="alternate" type="text/html" href="https://glolfwiki.sibr.dev/index.php?title=1&amp;diff=269"/>
		<updated>2021-06-11T17:20:02Z</updated>

		<summary type="html">&lt;p&gt;Pokeylope: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Glolfer&lt;br /&gt;
|name=1&lt;br /&gt;
|signature = 🦊&lt;br /&gt;
|stance = Hardcore&lt;br /&gt;
|tea = Black&lt;br /&gt;
|driving = .25&lt;br /&gt;
|grip = .25&lt;br /&gt;
|aerodynamics = 3&lt;br /&gt;
|self-awareness = 3.25&lt;br /&gt;
|mods = 🤝💖&lt;br /&gt;
|twitter = 1FoxGlolf&lt;br /&gt;
|special = [[The Afoxalypse|💥]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==History==&lt;br /&gt;
&lt;br /&gt;
1, nicknamed 1🦊, is known for causing frequent rifts and  [[The Afoxalypse]].&lt;/div&gt;</summary>
		<author><name>Pokeylope</name></author>
	</entry>
	<entry>
		<id>https://glolfwiki.sibr.dev/index.php?title=Template:Twitter&amp;diff=268</id>
		<title>Template:Twitter</title>
		<link rel="alternate" type="text/html" href="https://glolfwiki.sibr.dev/index.php?title=Template:Twitter&amp;diff=268"/>
		<updated>2021-06-11T17:09:15Z</updated>

		<summary type="html">&lt;p&gt;Pokeylope: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://twitter.com/{{{1|{{{twitter}}}}}} 🐦]&lt;/div&gt;</summary>
		<author><name>Pokeylope</name></author>
	</entry>
	<entry>
		<id>https://glolfwiki.sibr.dev/index.php?title=Template:Twitter&amp;diff=267</id>
		<title>Template:Twitter</title>
		<link rel="alternate" type="text/html" href="https://glolfwiki.sibr.dev/index.php?title=Template:Twitter&amp;diff=267"/>
		<updated>2021-06-11T17:08:07Z</updated>

		<summary type="html">&lt;p&gt;Pokeylope: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://twitter.com/{{{1|twitter}}} 🐦]&lt;/div&gt;</summary>
		<author><name>Pokeylope</name></author>
	</entry>
	<entry>
		<id>https://glolfwiki.sibr.dev/index.php?title=Glolfers&amp;diff=264</id>
		<title>Glolfers</title>
		<link rel="alternate" type="text/html" href="https://glolfwiki.sibr.dev/index.php?title=Glolfers&amp;diff=264"/>
		<updated>2021-06-11T16:52:54Z</updated>

		<summary type="html">&lt;p&gt;Pokeylope: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Add a new glolfer page:&lt;br /&gt;
{{#forminput:form=Glolfer|button text=Create page|placeholder=Name}}&lt;br /&gt;
==Glolfers==&lt;br /&gt;
*[[1|1🦊]] [[The Afoxalypse|💥]] {{Twitter|1FoxGlolf}}&lt;br /&gt;
*[[Baby Bop]] {{Twitter|DJBabyBop}}&lt;br /&gt;
*[[Bingo Polaroid]] {{Twitter|glolfingkitty}}&lt;br /&gt;
*[[Crocodile 'Spits Fire' Spitfire]]&lt;br /&gt;
*[[Frankle Knives]] [[History#The Second IGA Open|🏅]]&lt;br /&gt;
*[[Freddie Missouri]] {{Twitter|MissouriFreddie}}&lt;br /&gt;
*[[Legally Jorts]] {{Twitter|legallyjorts}}&lt;br /&gt;
*[[Line Cook]] [[Fourth IGA Open|🏅]]&lt;br /&gt;
*[[Load Bearing Coconut]] [[History#The First IGA Open|🏅]]&lt;br /&gt;
*[[Melissa Bop]] {{Twitter|BabyBopsMom1}}&lt;br /&gt;
*[[Meteor Heartfelt]]&lt;br /&gt;
*[[Polkadot Patterson]] {{Twitter|AltoPatterson}}&lt;br /&gt;
*[[Razor Defrost]] {{Twitter|RazorDefrost}}&lt;br /&gt;
*[[Rebecca Monarch]] {{Twitter|glolfRebbeca}}&lt;br /&gt;
*[[Sari Garfield]]&lt;br /&gt;
*[[Simulacrum]] [[History#The Grand Unchip| 😈]] {{Twitter|GSimulacrum}}&lt;br /&gt;
*[[Solar Dies]] [[History#The Grand Unchip| 😈]] {{Twitter|SolarDies}}&lt;br /&gt;
*[[Spooks McGee]] [[Third IGA Open|🏅]] {{Twitter|hamsterballing}}&lt;br /&gt;
*[[Tantalus Chewed]] &lt;br /&gt;
*[[Thalia Soliloque]]&lt;/div&gt;</summary>
		<author><name>Pokeylope</name></author>
	</entry>
	<entry>
		<id>https://glolfwiki.sibr.dev/index.php?title=Glolfers&amp;diff=263</id>
		<title>Glolfers</title>
		<link rel="alternate" type="text/html" href="https://glolfwiki.sibr.dev/index.php?title=Glolfers&amp;diff=263"/>
		<updated>2021-06-11T16:51:01Z</updated>

		<summary type="html">&lt;p&gt;Pokeylope: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Add a new glolfer page:&lt;br /&gt;
{{#forminput:form=Glolfer|button text=Create page|placeholder=Name}}&lt;br /&gt;
==Glolfers==&lt;br /&gt;
*[[1|1🦊]] [[The Afoxalypse|💥]] {{Twitter|1FoxGlolf}}&lt;br /&gt;
*[[Baby Bop]] {{Twitter|DJBabyBop}}&lt;br /&gt;
*[[Bingo Polaroid]] {{Twitter|glolfingkitty}}&lt;br /&gt;
*[[Crocodile 'Spits Fire' Spitfire]]&lt;br /&gt;
*[[Frankle Knives]] [[History#The Second IGA Open|🏅]]&lt;br /&gt;
*[[Freddie Missouri]] {{Twitter|MissouriFreddie}}&lt;br /&gt;
*[[Legally Jorts]] {{Twitter|legallyjorts}}&lt;br /&gt;
*[[Line Cook]] [[History#The Fourth IGA Open|🏅]]&lt;br /&gt;
*[[Load Bearing Coconut]] [[History#The First IGA Open|🏅]]&lt;br /&gt;
*[[Melissa Bop]] {{Twitter|BabyBopsMom1}}&lt;br /&gt;
*[[Meteor Heartfelt]]&lt;br /&gt;
*[[Polkadot Patterson]] {{Twitter|AltoPatterson}}&lt;br /&gt;
*[[Razor Defrost]] {{Twitter|RazorDefrost}}&lt;br /&gt;
*[[Rebecca Monarch]] {{Twitter|glolfRebbeca}}&lt;br /&gt;
*[[Sari Garfield]]&lt;br /&gt;
*[[Simulacrum]] [[History#The Grand Unchip| 😈]] {{Twitter|GSimulacrum}}&lt;br /&gt;
*[[Solar Dies]] [[History#The Grand Unchip| 😈]] {{Twitter|SolarDies}}&lt;br /&gt;
*[[Spooks McGee]] [[History#The Third IGA Open|🏅]] {{Twitter|hamsterballing}}&lt;br /&gt;
*[[Tantalus Chewed]] &lt;br /&gt;
*[[Thalia Soliloque]]&lt;/div&gt;</summary>
		<author><name>Pokeylope</name></author>
	</entry>
	<entry>
		<id>https://glolfwiki.sibr.dev/index.php?title=Template:NewGlolfer&amp;diff=262</id>
		<title>Template:NewGlolfer</title>
		<link rel="alternate" type="text/html" href="https://glolfwiki.sibr.dev/index.php?title=Template:NewGlolfer&amp;diff=262"/>
		<updated>2021-06-11T16:48:24Z</updated>

		<summary type="html">&lt;p&gt;Pokeylope: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Glolfer&lt;br /&gt;
|name={{{{{|safesubst:}}}#titleparts:{{{{{|safesubst:}}}PAGENAME}}}}&lt;br /&gt;
|mods={{{mods|}}}&lt;br /&gt;
|twitter={{{twitter|}}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Pokeylope</name></author>
	</entry>
	<entry>
		<id>https://glolfwiki.sibr.dev/index.php?title=Template:NewGlolfer&amp;diff=261</id>
		<title>Template:NewGlolfer</title>
		<link rel="alternate" type="text/html" href="https://glolfwiki.sibr.dev/index.php?title=Template:NewGlolfer&amp;diff=261"/>
		<updated>2021-06-11T16:47:42Z</updated>

		<summary type="html">&lt;p&gt;Pokeylope: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Glolfer&lt;br /&gt;
|name={{{{{|safesubst:}}}#titleparts:{{PAGENAME}}}}&lt;br /&gt;
|mods={{{mods|}}}&lt;br /&gt;
|twitter={{{twitter|}}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Pokeylope</name></author>
	</entry>
	<entry>
		<id>https://glolfwiki.sibr.dev/index.php?title=Module:Glolfer&amp;diff=260</id>
		<title>Module:Glolfer</title>
		<link rel="alternate" type="text/html" href="https://glolfwiki.sibr.dev/index.php?title=Module:Glolfer&amp;diff=260"/>
		<updated>2021-06-11T16:44:41Z</updated>

		<summary type="html">&lt;p&gt;Pokeylope: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local pyrandom = require &amp;quot;Module:Pyrandom&amp;quot;&lt;br /&gt;
&lt;br /&gt;
function titlecase(str)&lt;br /&gt;
	local buf = {}&lt;br /&gt;
	local inWord = false&lt;br /&gt;
	for i = 1, #str do&lt;br /&gt;
		local c = string.sub(str, i, i)&lt;br /&gt;
		if inWord then&lt;br /&gt;
			table.insert(buf, string.lower(c))&lt;br /&gt;
		else&lt;br /&gt;
			table.insert(buf, string.upper(c))&lt;br /&gt;
		end&lt;br /&gt;
		inWord = (string.find(c, '%a') ~= nil)&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat(buf)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function random_player_emoji(name)&lt;br /&gt;
	local humanoid = {&lt;br /&gt;
		&amp;quot;👶&amp;quot;,&amp;quot;👧&amp;quot;,&amp;quot;🧒&amp;quot;,&amp;quot;👦&amp;quot;,&amp;quot;👩&amp;quot;,&amp;quot;🧑&amp;quot;,&amp;quot;👨&amp;quot;,&amp;quot;👩‍🦱&amp;quot;,&amp;quot;🧑‍🦱&amp;quot;,&amp;quot;👨‍🦱&amp;quot;,&amp;quot;👩‍🦰&amp;quot;,&amp;quot;🧑‍🦰&amp;quot;,&amp;quot;👨‍🦰&amp;quot;,&amp;quot;👱‍♀️&amp;quot;,&lt;br /&gt;
		&amp;quot;👱&amp;quot;,&amp;quot;👱‍♂️&amp;quot;,&amp;quot;👩‍🦳&amp;quot;,&amp;quot;🧑‍🦳&amp;quot;,&amp;quot;👨‍🦳&amp;quot;,&amp;quot;👩‍🦲&amp;quot;,&amp;quot;🧑‍🦲&amp;quot;,&amp;quot;👨‍🦲&amp;quot;,&amp;quot;🧔&amp;quot;,&amp;quot;👵&amp;quot;,&amp;quot;🧓&amp;quot;,&amp;quot;👴&amp;quot;,&amp;quot;👲&amp;quot;,&amp;quot;👳‍♀️&amp;quot;,&lt;br /&gt;
		&amp;quot;👳&amp;quot;,&amp;quot;👳‍♂️&amp;quot;,&amp;quot;🧕&amp;quot;,&amp;quot;👮‍♀️&amp;quot;,&amp;quot;👮&amp;quot;,&amp;quot;👮‍♂️&amp;quot;,&amp;quot;👷‍♀️&amp;quot;,&amp;quot;👷&amp;quot;,&amp;quot;👷‍♂️&amp;quot;,&amp;quot;💂‍♀️&amp;quot;,&amp;quot;💂&amp;quot;,&amp;quot;💂‍♂️&amp;quot;,&amp;quot;🕵️‍♀️&amp;quot;,&amp;quot;🕵️&amp;quot;,&lt;br /&gt;
		&amp;quot;🕵️‍♂️&amp;quot;,&amp;quot;👩‍⚕️&amp;quot;,&amp;quot;🧑‍⚕️&amp;quot;,&amp;quot;👨‍⚕️&amp;quot;,&amp;quot;👩‍🌾&amp;quot;,&amp;quot;🧑‍🌾&amp;quot;,&amp;quot;👨‍🌾&amp;quot;,&amp;quot;👩‍🍳&amp;quot;,&amp;quot;🧑‍🍳&amp;quot;,&amp;quot;👨‍🍳&amp;quot;,&amp;quot;👩‍🎓&amp;quot;,&amp;quot;🧑‍🎓&amp;quot;,&amp;quot;👨‍🎓&amp;quot;,&amp;quot;👩‍🎤&amp;quot;,&lt;br /&gt;
		&amp;quot;🧑‍🎤&amp;quot;,&amp;quot;👨‍🎤&amp;quot;,&amp;quot;👩‍🏫&amp;quot;,&amp;quot;🧑‍🏫&amp;quot;,&amp;quot;👨‍🏫&amp;quot;,&amp;quot;👩‍🏭&amp;quot;,&amp;quot;🧑‍🏭&amp;quot;,&amp;quot;👨‍🏭&amp;quot;,&amp;quot;👩‍💻&amp;quot;,&amp;quot;🧑‍💻&amp;quot;,&amp;quot;👨‍💻&amp;quot;,&amp;quot;👩‍💼&amp;quot;,&amp;quot;🧑‍💼&amp;quot;,&amp;quot;👨‍💼&amp;quot;,&lt;br /&gt;
		&amp;quot;👩‍🔧&amp;quot;,&amp;quot;🧑‍🔧&amp;quot;,&amp;quot;👨‍🔧&amp;quot;,&amp;quot;👩‍🔬&amp;quot;,&amp;quot;🧑‍🔬&amp;quot;,&amp;quot;👨‍🔬&amp;quot;,&amp;quot;👩‍🎨&amp;quot;,&amp;quot;🧑‍🎨&amp;quot;,&amp;quot;👨‍🎨&amp;quot;,&amp;quot;👩‍🚒&amp;quot;,&amp;quot;🧑‍🚒&amp;quot;,&amp;quot;👨‍🚒&amp;quot;,&amp;quot;👩‍✈️&amp;quot;,&amp;quot;🧑‍✈️&amp;quot;,&lt;br /&gt;
		&amp;quot;👨‍✈️&amp;quot;,&amp;quot;👩‍🚀&amp;quot;,&amp;quot;🧑‍🚀&amp;quot;,&amp;quot;👨‍🚀&amp;quot;,&amp;quot;👩‍⚖️&amp;quot;,&amp;quot;🧑‍⚖️&amp;quot;,&amp;quot;👨‍⚖️&amp;quot;,&amp;quot;👰&amp;quot;,&amp;quot;🏋️&amp;quot;,&amp;quot;🤵&amp;quot;,&amp;quot;🤸&amp;quot;,&amp;quot;👸&amp;quot;,&amp;quot;🤴&amp;quot;,&amp;quot;🦸‍♀️&amp;quot;,&amp;quot;🦸&amp;quot;,&lt;br /&gt;
		&amp;quot;🦸‍♂️&amp;quot;,&amp;quot;🦹‍♀️&amp;quot;,&amp;quot;🦹&amp;quot;,&amp;quot;🦹‍♂️&amp;quot;,&amp;quot;🤶&amp;quot;,&amp;quot;🚴&amp;quot;,&amp;quot;🎅&amp;quot;,&amp;quot;🧙‍♀️&amp;quot;,&amp;quot;🧙&amp;quot;,&amp;quot;🧙‍♂️&amp;quot;,&amp;quot;🧝‍♀️&amp;quot;,&amp;quot;🧝&amp;quot;,&amp;quot;🧝‍♂️&amp;quot;,&amp;quot;🧛‍♀️&amp;quot;,&amp;quot;🧛&amp;quot;,&lt;br /&gt;
		&amp;quot;🧛‍♂️&amp;quot;,&amp;quot;🧟‍♀️&amp;quot;,&amp;quot;🧟&amp;quot;,&amp;quot;🧟‍♂️&amp;quot;,&amp;quot;🧞‍♀️&amp;quot;,&amp;quot;🧞&amp;quot;,&amp;quot;🧞‍♂️&amp;quot;,&amp;quot;🧜‍♀️&amp;quot;,&amp;quot;🧜&amp;quot;,&amp;quot;🧜‍♂️&amp;quot;,&amp;quot;🧚‍♀️&amp;quot;,&amp;quot;🧚&amp;quot;,&amp;quot;🧚‍♂️&amp;quot;,&amp;quot;👼&amp;quot;,&amp;quot;🤰&amp;quot;,&lt;br /&gt;
		&amp;quot;🤱&amp;quot;,&amp;quot;🙇‍♀️&amp;quot;,&amp;quot;🙇&amp;quot;,&amp;quot;🙇‍♂️&amp;quot;,&amp;quot;💁‍♀️&amp;quot;,&amp;quot;💁&amp;quot;,&amp;quot;💁‍♂️&amp;quot;,&amp;quot;🙅‍♀️&amp;quot;,&amp;quot;🙅&amp;quot;,&amp;quot;🙅‍♂️&amp;quot;,&amp;quot;🙆‍♀️&amp;quot;,&amp;quot;🙆&amp;quot;,&amp;quot;🙆‍♂️&amp;quot;,&amp;quot;🙋‍♀️&amp;quot;,&amp;quot;🙋&amp;quot;,&lt;br /&gt;
		&amp;quot;🙋‍♂️&amp;quot;,&amp;quot;🧏‍♀️&amp;quot;,&amp;quot;🧏&amp;quot;,&amp;quot;🧏‍♂️&amp;quot;,&amp;quot;🤦‍♀️&amp;quot;,&amp;quot;🤦&amp;quot;,&amp;quot;🤦‍♂️&amp;quot;,&amp;quot;🤷‍♀️&amp;quot;,&amp;quot;🤷&amp;quot;,&amp;quot;🤷‍♂️&amp;quot;,&amp;quot;🙎‍♀️&amp;quot;,&amp;quot;🙎&amp;quot;,&amp;quot;🙎‍♂️&amp;quot;,&amp;quot;🙍‍♀️&amp;quot;,&amp;quot;🙍&amp;quot;,&lt;br /&gt;
		&amp;quot;🙍‍♂️&amp;quot;,&amp;quot;💇‍♀️&amp;quot;,&amp;quot;💇&amp;quot;,&amp;quot;💇‍♂️&amp;quot;,&amp;quot;💆‍♀️&amp;quot;,&amp;quot;💆&amp;quot;,&amp;quot;💆‍♂️&amp;quot;,&amp;quot;🧖‍♀️&amp;quot;,&amp;quot;🧖&amp;quot;,&amp;quot;🧖‍♂️&amp;quot;,&amp;quot;💅&amp;quot;,&amp;quot;🤳&amp;quot;,&amp;quot;💃&amp;quot;,&amp;quot;🕺&amp;quot;,&amp;quot;🕴&amp;quot;,&amp;quot;👩‍🦽&amp;quot;,&lt;br /&gt;
		&amp;quot;🧑‍🦽&amp;quot;,&amp;quot;👨‍🦽&amp;quot;,&amp;quot;👩‍🦼&amp;quot;,&amp;quot;🧑‍🦼&amp;quot;,&amp;quot;👨‍🦼&amp;quot;,&amp;quot;🚶‍♀️&amp;quot;,&amp;quot;🚶&amp;quot;,&amp;quot;🚶‍♂️&amp;quot;,&amp;quot;👩‍🦯&amp;quot;,&amp;quot;🧑‍🦯&amp;quot;,&amp;quot;👨‍🦯&amp;quot;,&amp;quot;🧎‍♀️&amp;quot;,&amp;quot;🧎&amp;quot;,&amp;quot;🧎‍♂️&amp;quot;,&amp;quot;🏃‍♀️&amp;quot;,&amp;quot;🏃&amp;quot;,&lt;br /&gt;
		&amp;quot;🏃‍♂️&amp;quot;,&amp;quot;🧍‍♀️&amp;quot;,&amp;quot;🧍&amp;quot;,&amp;quot;🧍‍♂️&amp;quot;,&amp;quot;👭&amp;quot;,&amp;quot;🧑‍🤝‍🧑&amp;quot;,&amp;quot;👬&amp;quot;,&amp;quot;👫&amp;quot;,&amp;quot;👩‍❤️‍👩&amp;quot;,&amp;quot;💑&amp;quot;,&amp;quot;👨‍❤️‍👨&amp;quot;,&amp;quot;👩‍❤️‍👨&amp;quot;,&amp;quot;👩‍❤️‍💋‍👩&amp;quot;,&amp;quot;💏&amp;quot;,&amp;quot;👨‍❤️‍💋‍👨&amp;quot;,&amp;quot;👩‍❤️‍💋‍👨&amp;quot;,&lt;br /&gt;
		&amp;quot;👪&amp;quot;,&amp;quot;👨‍👩‍👦&amp;quot;,&amp;quot;👨‍👩‍👧&amp;quot;,&amp;quot;👨‍👩‍👧‍👦&amp;quot;,&amp;quot;👨‍👩‍👦‍👦&amp;quot;,&amp;quot;👨‍👩‍👧‍👧&amp;quot;,&amp;quot;👨‍👨‍👦&amp;quot;,&amp;quot;👨‍👨‍👧&amp;quot;,&amp;quot;👨‍👨‍👧‍👦&amp;quot;,&amp;quot;👨‍👨‍👦‍👦&amp;quot;,&amp;quot;👨‍👨‍👧‍👧&amp;quot;,&amp;quot;👩‍👩‍👦&amp;quot;,&amp;quot;👩‍👩‍👧&amp;quot;,&amp;quot;👩‍👩‍👧‍👦&amp;quot;,&amp;quot;👩‍👩‍👦‍👦&amp;quot;,&amp;quot;👩‍👩‍👧‍👧&amp;quot;,&lt;br /&gt;
		&amp;quot;👨‍👦&amp;quot;,&amp;quot;👨‍👦‍👦&amp;quot;,&amp;quot;👨‍👧&amp;quot;,&amp;quot;👨‍👧‍👦&amp;quot;,&amp;quot;👨‍👧‍👧&amp;quot;,&amp;quot;👩‍👦&amp;quot;,&amp;quot;👩‍👦‍👦&amp;quot;,&amp;quot;👩‍👧&amp;quot;,&amp;quot;👩‍👧‍👦&amp;quot;,&amp;quot;👩‍👧‍👧&amp;quot;,&amp;quot;🗣&amp;quot;,&amp;quot;👤&amp;quot;,&amp;quot;👥&amp;quot;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local nonhumanoid={&lt;br /&gt;
		&amp;quot;🐶&amp;quot;,&amp;quot;🐱&amp;quot;,&amp;quot;🐭&amp;quot;,&amp;quot;🐹&amp;quot;,&amp;quot;🐰&amp;quot;,&amp;quot;🦊&amp;quot;,&amp;quot;🐻&amp;quot;,&amp;quot;🐼&amp;quot;,&amp;quot;🐨&amp;quot;,&amp;quot;🐯&amp;quot;,&amp;quot;🦁&amp;quot;,&amp;quot;🐮&amp;quot;,&amp;quot;🐷&amp;quot;,&amp;quot;🐽&amp;quot;,&amp;quot;🐸&amp;quot;,&amp;quot;🐵&amp;quot;,&lt;br /&gt;
		&amp;quot;🙈&amp;quot;,&amp;quot;🙉&amp;quot;,&amp;quot;🙊&amp;quot;,&amp;quot;🐒&amp;quot;,&amp;quot;🐔&amp;quot;,&amp;quot;🐧&amp;quot;,&amp;quot;🐦&amp;quot;,&amp;quot;🐤&amp;quot;,&amp;quot;🐣&amp;quot;,&amp;quot;🐥&amp;quot;,&amp;quot;🦆&amp;quot;,&amp;quot;🦅&amp;quot;,&amp;quot;🦉&amp;quot;,&amp;quot;🦇&amp;quot;,&amp;quot;🐺&amp;quot;,&amp;quot;🐗&amp;quot;,&amp;quot;🐴&amp;quot;,&amp;quot;🦄&amp;quot;,&lt;br /&gt;
		&amp;quot;🐝&amp;quot;,&amp;quot;🐛&amp;quot;,&amp;quot;🦋&amp;quot;,&amp;quot;🐌&amp;quot;,&amp;quot;🐞&amp;quot;,&amp;quot;🐜&amp;quot;,&amp;quot;🦟&amp;quot;,&amp;quot;🦗&amp;quot;,&amp;quot;🕷️&amp;quot;,&amp;quot;🦂&amp;quot;,&amp;quot;🐢&amp;quot;,&amp;quot;🐍&amp;quot;,&amp;quot;🦎&amp;quot;,&amp;quot;🦖&amp;quot;,&amp;quot;🦕&amp;quot;,&amp;quot;🐙&amp;quot;,&amp;quot;🦑&amp;quot;,&amp;quot;🦐&amp;quot;,&lt;br /&gt;
		&amp;quot;🦞&amp;quot;,&amp;quot;🦀&amp;quot;,&amp;quot;🐡&amp;quot;,&amp;quot;🐠&amp;quot;,&amp;quot;🐟&amp;quot;,&amp;quot;🐬&amp;quot;,&amp;quot;🐳&amp;quot;,&amp;quot;🐋&amp;quot;,&amp;quot;🦈&amp;quot;,&amp;quot;🐊&amp;quot;,&amp;quot;🐅&amp;quot;,&amp;quot;🐆&amp;quot;,&amp;quot;🦓&amp;quot;,&amp;quot;🦍&amp;quot;,&amp;quot;🦧&amp;quot;,&amp;quot;🐘&amp;quot;,&amp;quot;🦛&amp;quot;,&amp;quot;🦏&amp;quot;,&lt;br /&gt;
		&amp;quot;🐪&amp;quot;,&amp;quot;🐫&amp;quot;,&amp;quot;🦒&amp;quot;,&amp;quot;🦘&amp;quot;,&amp;quot;🐃&amp;quot;,&amp;quot;🐂&amp;quot;,&amp;quot;🐄&amp;quot;,&amp;quot;🐎&amp;quot;,&amp;quot;🐖&amp;quot;,&amp;quot;🐏&amp;quot;,&amp;quot;🐑&amp;quot;,&amp;quot;🦙&amp;quot;,&amp;quot;🐐&amp;quot;,&amp;quot;🦌&amp;quot;,&amp;quot;🐕&amp;quot;,&amp;quot;🐩&amp;quot;,&amp;quot;🦮&amp;quot;,&amp;quot;🐕‍🦺&amp;quot;,&lt;br /&gt;
		&amp;quot;🐈&amp;quot;,&amp;quot;🐓&amp;quot;,&amp;quot;🦃&amp;quot;,&amp;quot;🦚&amp;quot;,&amp;quot;🦜&amp;quot;,&amp;quot;🦢&amp;quot;,&amp;quot;🦩&amp;quot;,&amp;quot;🕊️&amp;quot;,&amp;quot;🐇&amp;quot;,&amp;quot;🦝&amp;quot;,&amp;quot;🦨&amp;quot;,&amp;quot;🦡&amp;quot;,&amp;quot;🦦&amp;quot;,&amp;quot;🦥&amp;quot;,&amp;quot;🐁&amp;quot;,&amp;quot;🐀&amp;quot;,&amp;quot;🐿&amp;quot;,&amp;quot;🦔&amp;quot;,&lt;br /&gt;
		&amp;quot;🐉&amp;quot;,&amp;quot;🐲&amp;quot;,&amp;quot;🪐&amp;quot;,&amp;quot;💫&amp;quot;,&amp;quot;🌪&amp;quot;,&amp;quot;🌈&amp;quot;,&amp;quot;📠&amp;quot;,&amp;quot;📺&amp;quot;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local rand = pyrandom.new(titlecase(name))&lt;br /&gt;
	if rand:random() &amp;gt; 0.5 then&lt;br /&gt;
		return rand:choice(humanoid)&lt;br /&gt;
	else&lt;br /&gt;
		return rand:choice(nonhumanoid)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function generate_random_stlats_from_name(name)&lt;br /&gt;
	local rand = pyrandom.new(titlecase(name))&lt;br /&gt;
	return {&lt;br /&gt;
		nyoomability = math.max(rand:gauss(0,0.3),1.4),&lt;br /&gt;
		tofu = rand:random(),&lt;br /&gt;
		wiggle = rand:random(),&lt;br /&gt;
		ritualism = rand:random(),&lt;br /&gt;
		musclitude = rand:random(),&lt;br /&gt;
		finesse = rand:random(),&lt;br /&gt;
		needlethreadableness = rand:random(), &lt;br /&gt;
		left_handedness = rand:gauss(0,0.3),&lt;br /&gt;
		stance = rand:choice({&amp;quot;Tricky&amp;quot;,&amp;quot;Flashy&amp;quot;,&amp;quot;Aggro&amp;quot;,&amp;quot;Tanky&amp;quot;,&amp;quot;Twitchy&amp;quot;,&amp;quot;Powerful&amp;quot;,&lt;br /&gt;
		&amp;quot;Wibble&amp;quot;,&amp;quot;Wobble&amp;quot;,&amp;quot;Reverse&amp;quot;,&amp;quot;Feint&amp;quot;,&amp;quot;Electric&amp;quot;,&amp;quot;Spicy&amp;quot;,&amp;quot;Pomegranate&amp;quot;,&lt;br /&gt;
		&amp;quot;Explosive&amp;quot;,&amp;quot;Cottagecore&amp;quot;,&amp;quot;Corecore&amp;quot;,&amp;quot;Hardcore&amp;quot;,&amp;quot;Softcore&amp;quot;,&lt;br /&gt;
		&amp;quot;Hand to Hand&amp;quot;,&amp;quot;Lefty&amp;quot;,&amp;quot;Pop-Punk&amp;quot;,&amp;quot;DPS&amp;quot;,&amp;quot;Repose&amp;quot;}),&lt;br /&gt;
		fav_tea = rand:choice({&amp;quot;Iced&amp;quot;,&amp;quot;Boba&amp;quot;,&amp;quot;White&amp;quot;,&amp;quot;Green&amp;quot;,&amp;quot;Oolong&amp;quot;,&lt;br /&gt;
		&amp;quot;Pu'erh&amp;quot;,&amp;quot;Chai&amp;quot;,&amp;quot;Milk&amp;quot;,&amp;quot;Neon&amp;quot;,&amp;quot;Sweet&amp;quot;,&amp;quot;Void&amp;quot;,&amp;quot;Tea?&amp;quot;,&amp;quot;Caramel&amp;quot;,&lt;br /&gt;
		&amp;quot;Lightspeed&amp;quot;,&amp;quot;Time-traveling&amp;quot;,&amp;quot;Bloody&amp;quot;,&amp;quot;Black&amp;quot;,&amp;quot;Miso&amp;quot;,&amp;quot;Concrete&amp;quot;,&lt;br /&gt;
		&amp;quot;Hard-boiled egg&amp;quot;,&amp;quot;Hot Chocolate&amp;quot;,&amp;quot;Bubble&amp;quot;}),&lt;br /&gt;
		estimation = rand:random(),&lt;br /&gt;
&lt;br /&gt;
		earliness = rand:random(),&lt;br /&gt;
		twirliness = rand:random(),&lt;br /&gt;
		churliness = rand:random(),&lt;br /&gt;
		aceness = rand:random(),&lt;br /&gt;
		marbles = rand:randrange(2,4),&lt;br /&gt;
&lt;br /&gt;
		unworthiness = rand:random(),&lt;br /&gt;
		splortsmanship = rand:random(),&lt;br /&gt;
		tankitude = rand:random(),&lt;br /&gt;
		pettiness = rand:random(),&lt;br /&gt;
		owlishness = rand:random(),&lt;br /&gt;
		disco = rand:random(),&lt;br /&gt;
		pettability = rand:random(),&lt;br /&gt;
		softness = rand:random(),&lt;br /&gt;
		improv = rand:random(),&lt;br /&gt;
		tentacles = rand:randrange(0,10),&lt;br /&gt;
		capitalism = -rand:random(),&lt;br /&gt;
		polkadottedness = 0,&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function generate_random_player_from_name(name)&lt;br /&gt;
	local player = generate_random_stlats_from_name(name)&lt;br /&gt;
	player.name = name&lt;br /&gt;
	player.emoji = random_player_emoji(name)&lt;br /&gt;
	return player&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function search_array(a, v)&lt;br /&gt;
	for i = 1, #a do&lt;br /&gt;
		if a[i] == v then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function sum(a)&lt;br /&gt;
	local r = 0&lt;br /&gt;
	for i = 1, #a do&lt;br /&gt;
		r = r + a[i]&lt;br /&gt;
	end&lt;br /&gt;
	return r&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function unpredictability(p)&lt;br /&gt;
	local weights = {p.churliness,p.earliness,p.twirliness}&lt;br /&gt;
	if search_array({&amp;quot;Aggro&amp;quot;,&amp;quot;Powerful&amp;quot;,&amp;quot;Hand to Hand&amp;quot;,&amp;quot;DPS&amp;quot;,&amp;quot;Explosive&amp;quot;,&amp;quot;Hardcore&amp;quot;, &amp;quot;Wibble&amp;quot;,&amp;quot;Electric&amp;quot;}, p.stance) then&lt;br /&gt;
		weights[1] = weights[1] + 0.5&lt;br /&gt;
	elseif search_array({&amp;quot;Tanky&amp;quot;,&amp;quot;Twitchy&amp;quot;,&amp;quot;Repose&amp;quot;,&amp;quot;Reverse&amp;quot;,&amp;quot;Softcore&amp;quot;,  &amp;quot;Cottagecore&amp;quot;,&amp;quot;Pomegranate&amp;quot;}, p.stance) then&lt;br /&gt;
		weights[2] = weights[2] + 0.5&lt;br /&gt;
	elseif search_array(&amp;quot;Feint&amp;quot;,&amp;quot;Tricky&amp;quot;,&amp;quot;Pop-Punk&amp;quot;,&amp;quot;Flashy&amp;quot;,&amp;quot;Spicy&amp;quot;,       &amp;quot;Corecore&amp;quot;,&amp;quot;Wobble&amp;quot;,&amp;quot;Lefty&amp;quot;, p.stance) then&lt;br /&gt;
		weights[3] = weights[3] + 0.5&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local chanceOfBiggest = math.max(unpack(weights))/sum(weights)&lt;br /&gt;
&lt;br /&gt;
	local minChance = 1/#weights&lt;br /&gt;
&lt;br /&gt;
	return 1-(chanceOfBiggest-minChance)/(1-minChance)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function driving_rating(p)&lt;br /&gt;
	return (p.musclitude + p.tofu)*5/2&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function precision_rating(p)&lt;br /&gt;
	return (p.needlethreadableness*0.5 + p.finesse + p.estimation*0.2) * 5/(1+0.2+0.5) - math.abs(p.left_handedness)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function aerodynamics_rating(p)&lt;br /&gt;
	return (p.ritualism + p.owlishness + p.softness) * 5/3&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function self_awareness_rating(p)&lt;br /&gt;
	return (p.wiggle*0.5 + (p.marbles-2)/2 + unpredictability(p)*0.8) * 5/(0.5+1+0.8) + p.polkadottedness * 5&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local known_players = {&lt;br /&gt;
	[&amp;quot;Polkadot Patterson&amp;quot;] = {&lt;br /&gt;
		name=&amp;quot;Polkadot Patterson&amp;quot;,&lt;br /&gt;
		stance=&amp;quot;Squiddish&amp;quot;,&lt;br /&gt;
		fav_tea= &amp;quot;Iced&amp;quot;,&lt;br /&gt;
		nyoomability = 1.5,&lt;br /&gt;
		musclitude=1,&lt;br /&gt;
		finesse=1,&lt;br /&gt;
		needlethreadableness=1,&lt;br /&gt;
		polkadottedness=1,  &lt;br /&gt;
		left_handedness= 0,&lt;br /&gt;
		estimation=1,&lt;br /&gt;
		twirliness=0.3,&lt;br /&gt;
		churliness=0.3,&lt;br /&gt;
		earliness=0.3,&lt;br /&gt;
		aceness=0.3,&lt;br /&gt;
		marbles=4,&lt;br /&gt;
&lt;br /&gt;
		tofu=1,&lt;br /&gt;
		wiggle=1,&lt;br /&gt;
		ritualism=1,&lt;br /&gt;
		owlishness=1,&lt;br /&gt;
		disco=0.0,&lt;br /&gt;
		pettability=0.0,&lt;br /&gt;
		softness=1,&lt;br /&gt;
		improv=0.0,&lt;br /&gt;
		unworthiness=0,&lt;br /&gt;
		splortsmanship=1,&lt;br /&gt;
		tankitude=1.0,&lt;br /&gt;
		pettiness=0.0,&lt;br /&gt;
		tentacles=4,&lt;br /&gt;
		capitalism=-0.5,&lt;br /&gt;
		emoji=&amp;quot;😅&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function get_player_from_name(name)&lt;br /&gt;
	name = titlecase(name)&lt;br /&gt;
	return known_players[name] or generate_random_player_from_name(name)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local glolfer = {}&lt;br /&gt;
&lt;br /&gt;
function glolfer.emoji(frame)&lt;br /&gt;
	local args&lt;br /&gt;
	if frame.args.name then&lt;br /&gt;
		args = frame.args&lt;br /&gt;
	else&lt;br /&gt;
		args = frame:getParent().args&lt;br /&gt;
	end&lt;br /&gt;
	local name = args.name&lt;br /&gt;
	return random_player_emoji(name)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function glolfer.infobox(frame)&lt;br /&gt;
	local args&lt;br /&gt;
	if frame.args.name then&lt;br /&gt;
		args = frame.args&lt;br /&gt;
	else&lt;br /&gt;
		args = frame:getParent().args&lt;br /&gt;
	end&lt;br /&gt;
	local name = args.name&lt;br /&gt;
	local p = get_player_from_name(name)&lt;br /&gt;
	local template_args = {}&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		template_args[k] = v&lt;br /&gt;
	end&lt;br /&gt;
	for k, v in pairs({&lt;br /&gt;
		name = name,&lt;br /&gt;
		signature = p.emoji,&lt;br /&gt;
		stance = p.stance,&lt;br /&gt;
		tea = p.fav_tea,&lt;br /&gt;
		driving = driving_rating(p),&lt;br /&gt;
		grip = precision_rating(p),&lt;br /&gt;
		aerodynamics = aerodynamics_rating(p),&lt;br /&gt;
		[&amp;quot;self-awareness&amp;quot;] = self_awareness_rating(p),&lt;br /&gt;
	}) do&lt;br /&gt;
		template_args[k] = v&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return frame:expandTemplate{ title = &amp;quot;GlolferInfo&amp;quot;, args = template_args}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return glolfer&lt;/div&gt;</summary>
		<author><name>Pokeylope</name></author>
	</entry>
	<entry>
		<id>https://glolfwiki.sibr.dev/index.php?title=Template:NewGlolfer&amp;diff=259</id>
		<title>Template:NewGlolfer</title>
		<link rel="alternate" type="text/html" href="https://glolfwiki.sibr.dev/index.php?title=Template:NewGlolfer&amp;diff=259"/>
		<updated>2021-06-11T16:38:26Z</updated>

		<summary type="html">&lt;p&gt;Pokeylope: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{Glolfer&lt;br /&gt;
|name={{{{{|safesubst:}}}{{PAGENAME}}}}&lt;br /&gt;
|mods={{{mods|}}}&lt;br /&gt;
|twitter={{{twitter|}}}&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pokeylope</name></author>
	</entry>
	<entry>
		<id>https://glolfwiki.sibr.dev/index.php?title=Template:NewGlolfer&amp;diff=258</id>
		<title>Template:NewGlolfer</title>
		<link rel="alternate" type="text/html" href="https://glolfwiki.sibr.dev/index.php?title=Template:NewGlolfer&amp;diff=258"/>
		<updated>2021-06-11T16:37:29Z</updated>

		<summary type="html">&lt;p&gt;Pokeylope: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{Glolfer&lt;br /&gt;
|name={{{{{|safesubst:}}}{{#titleparts:{{PAGENAME}}}}}}&lt;br /&gt;
|mods={{{mods|}}}&lt;br /&gt;
|twitter={{{twitter|}}}&lt;br /&gt;
}}&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pokeylope</name></author>
	</entry>
	<entry>
		<id>https://glolfwiki.sibr.dev/index.php?title=Template:NewGlolfer&amp;diff=257</id>
		<title>Template:NewGlolfer</title>
		<link rel="alternate" type="text/html" href="https://glolfwiki.sibr.dev/index.php?title=Template:NewGlolfer&amp;diff=257"/>
		<updated>2021-06-11T16:35:22Z</updated>

		<summary type="html">&lt;p&gt;Pokeylope: Undo revision 256 by Pokeylope (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Glolfer&lt;br /&gt;
|name={{{{{|safesubst:}}}PAGENAME}}&lt;br /&gt;
|mods={{{mods|}}}&lt;br /&gt;
|twitter={{{twitter|}}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Pokeylope</name></author>
	</entry>
	<entry>
		<id>https://glolfwiki.sibr.dev/index.php?title=Template:NewGlolfer&amp;diff=256</id>
		<title>Template:NewGlolfer</title>
		<link rel="alternate" type="text/html" href="https://glolfwiki.sibr.dev/index.php?title=Template:NewGlolfer&amp;diff=256"/>
		<updated>2021-06-11T16:34:46Z</updated>

		<summary type="html">&lt;p&gt;Pokeylope: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Glolfer&lt;br /&gt;
|name={{#titleparts:{{{{{|safesubst:}}}PAGENAME}}}}&lt;br /&gt;
|mods={{{mods|}}}&lt;br /&gt;
|twitter={{{twitter|}}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Pokeylope</name></author>
	</entry>
	<entry>
		<id>https://glolfwiki.sibr.dev/index.php?title=Crocodile_%27Spits_Fire%27_Spitfire&amp;diff=255</id>
		<title>Crocodile 'Spits Fire' Spitfire</title>
		<link rel="alternate" type="text/html" href="https://glolfwiki.sibr.dev/index.php?title=Crocodile_%27Spits_Fire%27_Spitfire&amp;diff=255"/>
		<updated>2021-06-11T16:33:25Z</updated>

		<summary type="html">&lt;p&gt;Pokeylope: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Glolfer&lt;br /&gt;
|name=Crocodile 'Spits Fire' Spitfire&lt;br /&gt;
|mods=&lt;br /&gt;
|twitter=&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Pokeylope</name></author>
	</entry>
	<entry>
		<id>https://glolfwiki.sibr.dev/index.php?title=Template:NewGlolfer&amp;diff=253</id>
		<title>Template:NewGlolfer</title>
		<link rel="alternate" type="text/html" href="https://glolfwiki.sibr.dev/index.php?title=Template:NewGlolfer&amp;diff=253"/>
		<updated>2021-06-11T16:28:21Z</updated>

		<summary type="html">&lt;p&gt;Pokeylope: Undo revision 252 by Pokeylope (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Glolfer&lt;br /&gt;
|name={{{{{|safesubst:}}}PAGENAME}}&lt;br /&gt;
|mods={{{mods|}}}&lt;br /&gt;
|twitter={{{twitter|}}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Pokeylope</name></author>
	</entry>
	<entry>
		<id>https://glolfwiki.sibr.dev/index.php?title=Template:NewGlolfer&amp;diff=252</id>
		<title>Template:NewGlolfer</title>
		<link rel="alternate" type="text/html" href="https://glolfwiki.sibr.dev/index.php?title=Template:NewGlolfer&amp;diff=252"/>
		<updated>2021-06-11T16:25:22Z</updated>

		<summary type="html">&lt;p&gt;Pokeylope: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Glolfer&lt;br /&gt;
|name={{{{{|safesubst:}}}REALPAGENAME}}&lt;br /&gt;
|mods={{{mods|}}}&lt;br /&gt;
|twitter={{{twitter|}}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Pokeylope</name></author>
	</entry>
	<entry>
		<id>https://glolfwiki.sibr.dev/index.php?title=Template:REALPAGENAME&amp;diff=251</id>
		<title>Template:REALPAGENAME</title>
		<link rel="alternate" type="text/html" href="https://glolfwiki.sibr.dev/index.php?title=Template:REALPAGENAME&amp;diff=251"/>
		<updated>2021-06-11T16:25:09Z</updated>

		<summary type="html">&lt;p&gt;Pokeylope: Created page with &amp;quot;&amp;lt;includeonly&amp;gt;{{#titleparts:{{PAGENAME}}}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;Like [https://www.mediawiki.org/wiki/Help:Magic_words#Page_names &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{PAGENAME}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;],...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#titleparts:{{PAGENAME}}}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;Like [https://www.mediawiki.org/wiki/Help:Magic_words#Page_names &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{PAGENAME}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;], but without [https://www.mediawiki.org/wiki/Manual:PAGENAMEE_encoding#PAGENAME HTML entities].&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pokeylope</name></author>
	</entry>
	<entry>
		<id>https://glolfwiki.sibr.dev/index.php?title=Form:Glolfer&amp;diff=250</id>
		<title>Form:Glolfer</title>
		<link rel="alternate" type="text/html" href="https://glolfwiki.sibr.dev/index.php?title=Form:Glolfer&amp;diff=250"/>
		<updated>2021-06-11T15:42:52Z</updated>

		<summary type="html">&lt;p&gt;Pokeylope: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
To create a new page for a glolfer, enter the name below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{#forminput:form=Glolfer}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;wikiPreview&amp;quot; style=&amp;quot;display: none; padding-bottom: 25px; margin-bottom: 25px; border-bottom: 1px solid #AAAAAA;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
{{{for template|subst:NewGlolfer}}}&lt;br /&gt;
{| class=&amp;quot;formtable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
| {{PAGENAME}}&lt;br /&gt;
|-&lt;br /&gt;
! Signature&lt;br /&gt;
| {{Emoji|{{PAGENAME}}}}&lt;br /&gt;
|-&lt;br /&gt;
! Modifications&lt;br /&gt;
| {{{field|mods}}}&lt;br /&gt;
|-&lt;br /&gt;
! Twitter handle&lt;br /&gt;
| {{{field|twitter}}}&lt;br /&gt;
|}&lt;br /&gt;
{{{end template}}}&lt;br /&gt;
&lt;br /&gt;
'''Page contents:'''&lt;br /&gt;
&lt;br /&gt;
{{{standard input|free text|rows=10}}}&lt;br /&gt;
&lt;br /&gt;
Use &amp;lt;code&amp;gt;==Header text==&amp;lt;/code&amp;gt; to create section headers. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
==Tragic Backstory==&lt;br /&gt;
&lt;br /&gt;
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.&lt;br /&gt;
&lt;br /&gt;
==Glolf Career==&lt;br /&gt;
&lt;br /&gt;
Ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{{standard input|summary}}}&lt;br /&gt;
&lt;br /&gt;
{{{standard input|minor edit}}} {{{standard input|watch}}}&lt;br /&gt;
&lt;br /&gt;
{{{standard input|save}}} {{{standard input|preview}}} {{{standard input|changes}}} {{{standard input|cancel}}}&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pokeylope</name></author>
	</entry>
	<entry>
		<id>https://glolfwiki.sibr.dev/index.php?title=Module:Pyrandom&amp;diff=249</id>
		<title>Module:Pyrandom</title>
		<link rel="alternate" type="text/html" href="https://glolfwiki.sibr.dev/index.php?title=Module:Pyrandom&amp;diff=249"/>
		<updated>2021-06-11T15:31:29Z</updated>

		<summary type="html">&lt;p&gt;Pokeylope: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local bit32 = require &amp;quot;bit32&amp;quot;&lt;br /&gt;
local mt = require &amp;quot;Module:Mt19937ar&amp;quot;&lt;br /&gt;
&lt;br /&gt;
function bit_length(n)&lt;br /&gt;
	local l = 0&lt;br /&gt;
	while n &amp;gt; 0 do&lt;br /&gt;
		l = l + 1&lt;br /&gt;
		n = bit32.rshift(n, 1)&lt;br /&gt;
	end&lt;br /&gt;
	return l&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local pyrandom = {}&lt;br /&gt;
function pyrandom.new(str)&lt;br /&gt;
	local instance = {}&lt;br /&gt;
&lt;br /&gt;
	function instance:seed(str)&lt;br /&gt;
		local seed = &amp;quot;&amp;quot;&lt;br /&gt;
		for i = 1, #str do&lt;br /&gt;
			seed = seed .. string.format('%02x', string.byte(str, i))&lt;br /&gt;
		end&lt;br /&gt;
		seed = seed .. mw.hash.hashValue(&amp;quot;sha512&amp;quot;, str)&lt;br /&gt;
		seed = string.rep('0', (8 - (#seed % 8)) % 8) .. seed&lt;br /&gt;
		seed_array = {}&lt;br /&gt;
		for i = #seed, 1, -8 do&lt;br /&gt;
			table.insert(seed_array, tonumber(string.sub(seed, i-7, i), 16))&lt;br /&gt;
		end&lt;br /&gt;
		local mt = mt.new()&lt;br /&gt;
		mt:init_by_array(seed_array)&lt;br /&gt;
		return mt&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local rand = instance:seed(str)&lt;br /&gt;
&lt;br /&gt;
	function instance:random()&lt;br /&gt;
		return rand:genrand_res53()&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	function instance:getrandbits(k)&lt;br /&gt;
		if k == 0 then&lt;br /&gt;
			return 0&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		return bit32.rshift(rand:genrand_int32(), (32 - k))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	function instance:_randbelow(n)&lt;br /&gt;
		if n == 0 then&lt;br /&gt;
			return 0&lt;br /&gt;
		end&lt;br /&gt;
		local k = bit_length(n)&lt;br /&gt;
		local r = self:getrandbits(k)&lt;br /&gt;
		while r &amp;gt;= n do&lt;br /&gt;
			r = self:getrandbits(k)&lt;br /&gt;
		end&lt;br /&gt;
		return r&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	function instance:randrange(start, stop)&lt;br /&gt;
		if (stop == nil) then&lt;br /&gt;
			return self:_randbelow(start)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		return start + self:_randbelow(stop - start)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	function instance:choice(array)&lt;br /&gt;
		local r = self:_randbelow(#array)&lt;br /&gt;
		return array[r + 1]&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local gauss_next = nil&lt;br /&gt;
	function instance:gauss(mu, sigma)&lt;br /&gt;
		local z = gauss_next&lt;br /&gt;
		gauss_next = nil&lt;br /&gt;
		if z == nil then&lt;br /&gt;
			local x2pi = self:random() * math.pi * 2&lt;br /&gt;
			local g2rad = math.sqrt(-2.0 * math.log(1.0 - self:random()))&lt;br /&gt;
			z = math.cos(x2pi) * g2rad&lt;br /&gt;
			gauss_next = math.sin(x2pi) * g2rad&lt;br /&gt;
		end&lt;br /&gt;
		return mu + z * sigma&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return instance&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return pyrandom&lt;/div&gt;</summary>
		<author><name>Pokeylope</name></author>
	</entry>
	<entry>
		<id>https://glolfwiki.sibr.dev/index.php?title=Glolfers&amp;diff=248</id>
		<title>Glolfers</title>
		<link rel="alternate" type="text/html" href="https://glolfwiki.sibr.dev/index.php?title=Glolfers&amp;diff=248"/>
		<updated>2021-06-11T15:22:09Z</updated>

		<summary type="html">&lt;p&gt;Pokeylope: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Add a new glolfer page:&lt;br /&gt;
{{#forminput:form=Glolfer|button text=Create page|placeholder=Name}}&lt;br /&gt;
==Glolfers==&lt;br /&gt;
*[[1|1🦊]] [[The Afoxalypse|💥]] {{Twitter|1FoxGlolf}}&lt;br /&gt;
*[[Baby Bop]] {{Twitter|DJBabyBop}}&lt;br /&gt;
*[[Bingo Polaroid]] {{Twitter|glolfingkitty}}&lt;br /&gt;
*[[Frankle Knives]] [[History#The Second IGA Open|🏅]]&lt;br /&gt;
*[[Freddie Missouri]] {{Twitter|MissouriFreddie}}&lt;br /&gt;
*[[Legally Jorts]] {{Twitter|legallyjorts}}&lt;br /&gt;
*[[Line Cook]] [[History#The Fourth IGA Open|🏅]]&lt;br /&gt;
*[[Load Bearing Coconut]] [[History#The First IGA Open|🏅]]&lt;br /&gt;
*[[Melissa Bop]] {{Twitter|BabyBopsMom1}}&lt;br /&gt;
*[[Meteor Heartfelt]]&lt;br /&gt;
*[[Polkadot Patterson]] {{Twitter|AltoPatterson}}&lt;br /&gt;
*[[Razor Defrost]] {{Twitter|RazorDefrost}}&lt;br /&gt;
*[[Rebecca Monarch]] {{Twitter|glolfRebbeca}}&lt;br /&gt;
*[[Sari Garfield]]&lt;br /&gt;
*[[Simulacrum]] [[History#The Grand Unchip| 😈]] {{Twitter|GSimulacrum}}&lt;br /&gt;
*[[Solar Dies]] [[History#The Grand Unchip| 😈]] {{Twitter|SolarDies}}&lt;br /&gt;
*[[Spooks McGee]] [[History#The Third IGA Open|🏅]] {{Twitter|hamsterballing}}&lt;br /&gt;
*[[Tantalus Chewed]] &lt;br /&gt;
*[[Thalia Soliloque]]&lt;/div&gt;</summary>
		<author><name>Pokeylope</name></author>
	</entry>
	<entry>
		<id>https://glolfwiki.sibr.dev/index.php?title=Template:NewGlolfer&amp;diff=247</id>
		<title>Template:NewGlolfer</title>
		<link rel="alternate" type="text/html" href="https://glolfwiki.sibr.dev/index.php?title=Template:NewGlolfer&amp;diff=247"/>
		<updated>2021-06-11T14:45:55Z</updated>

		<summary type="html">&lt;p&gt;Pokeylope: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Glolfer&lt;br /&gt;
|name={{{{{|safesubst:}}}PAGENAME}}&lt;br /&gt;
|mods={{{mods|}}}&lt;br /&gt;
|twitter={{{twitter|}}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Pokeylope</name></author>
	</entry>
	<entry>
		<id>https://glolfwiki.sibr.dev/index.php?title=Form:Glolfer&amp;diff=246</id>
		<title>Form:Glolfer</title>
		<link rel="alternate" type="text/html" href="https://glolfwiki.sibr.dev/index.php?title=Form:Glolfer&amp;diff=246"/>
		<updated>2021-06-11T14:45:09Z</updated>

		<summary type="html">&lt;p&gt;Pokeylope: Created page with &amp;quot;&amp;lt;noinclude&amp;gt; To create a new page for a glolfer, enter the name below.   {{#forminput:form=Glolfer}} &amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt; &amp;lt;div id=&amp;quot;wikiPreview&amp;quot; style=&amp;quot;display: none; paddi...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
To create a new page for a glolfer, enter the name below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{#forminput:form=Glolfer}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;wikiPreview&amp;quot; style=&amp;quot;display: none; padding-bottom: 25px; margin-bottom: 25px; border-bottom: 1px solid #AAAAAA;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
{{{for template|subst:NewGlolfer}}}&lt;br /&gt;
{| class=&amp;quot;formtable&amp;quot;&lt;br /&gt;
! Name&lt;br /&gt;
| {{PAGENAME}}&lt;br /&gt;
|-&lt;br /&gt;
! Signature&lt;br /&gt;
| {{Emoji|{{PAGENAME}}}}&lt;br /&gt;
|-&lt;br /&gt;
! Modifications&lt;br /&gt;
| {{{field|mods}}}&lt;br /&gt;
|-&lt;br /&gt;
! Twitter handle&lt;br /&gt;
| {{{field|twitter}}}&lt;br /&gt;
|}&lt;br /&gt;
{{{end template}}}&lt;br /&gt;
&lt;br /&gt;
'''Free text:'''&lt;br /&gt;
&lt;br /&gt;
{{{standard input|free text|rows=10}}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{{standard input|summary}}}&lt;br /&gt;
&lt;br /&gt;
{{{standard input|minor edit}}} {{{standard input|watch}}}&lt;br /&gt;
&lt;br /&gt;
{{{standard input|save}}} {{{standard input|preview}}} {{{standard input|changes}}} {{{standard input|cancel}}}&lt;br /&gt;
&amp;lt;/includeonly&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pokeylope</name></author>
	</entry>
	<entry>
		<id>https://glolfwiki.sibr.dev/index.php?title=Template:NewGlolfer&amp;diff=245</id>
		<title>Template:NewGlolfer</title>
		<link rel="alternate" type="text/html" href="https://glolfwiki.sibr.dev/index.php?title=Template:NewGlolfer&amp;diff=245"/>
		<updated>2021-06-11T14:39:58Z</updated>

		<summary type="html">&lt;p&gt;Pokeylope: Created page with &amp;quot;{{Glolfer |name={{{{{|safesubst:}}}PAGENAME}} |mods={{{mods}}} |twitter={{{twitter}}} }}&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Glolfer&lt;br /&gt;
|name={{{{{|safesubst:}}}PAGENAME}}&lt;br /&gt;
|mods={{{mods}}}&lt;br /&gt;
|twitter={{{twitter}}}&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Pokeylope</name></author>
	</entry>
	<entry>
		<id>https://glolfwiki.sibr.dev/index.php?title=Template:Glolfer&amp;diff=244</id>
		<title>Template:Glolfer</title>
		<link rel="alternate" type="text/html" href="https://glolfwiki.sibr.dev/index.php?title=Template:Glolfer&amp;diff=244"/>
		<updated>2021-06-11T14:28:34Z</updated>

		<summary type="html">&lt;p&gt;Pokeylope: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#invoke:Glolfer|infobox}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Glolfer&lt;br /&gt;
|name = 1&lt;br /&gt;
|mods = 🤝💖&lt;br /&gt;
|twitter = 1FoxGlolf&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;{{Glolfer&lt;br /&gt;
|name = 1&lt;br /&gt;
|mods = 🤝💖&lt;br /&gt;
|twitter = 1FoxGlolf&lt;br /&gt;
}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pokeylope</name></author>
	</entry>
	<entry>
		<id>https://glolfwiki.sibr.dev/index.php?title=Template:Glolfer&amp;diff=243</id>
		<title>Template:Glolfer</title>
		<link rel="alternate" type="text/html" href="https://glolfwiki.sibr.dev/index.php?title=Template:Glolfer&amp;diff=243"/>
		<updated>2021-06-11T14:12:10Z</updated>

		<summary type="html">&lt;p&gt;Pokeylope: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;{{#invoke:Glolfer|infobox}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{#template_params:name (label=Name)&lt;br /&gt;
|mods (label=Modifications)&lt;br /&gt;
|twitter (label=Twitter handle)&lt;br /&gt;
}}&lt;br /&gt;
{{Glolfer&lt;br /&gt;
|name = 1&lt;br /&gt;
|mods = 🤝💖&lt;br /&gt;
|twitter = 1FoxGlolf&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;{{Glolfer&lt;br /&gt;
|name = 1&lt;br /&gt;
|mods = 🤝💖&lt;br /&gt;
|twitter = 1FoxGlolf&lt;br /&gt;
}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pokeylope</name></author>
	</entry>
	<entry>
		<id>https://glolfwiki.sibr.dev/index.php?title=Module:Team_bracket&amp;diff=240</id>
		<title>Module:Team bracket</title>
		<link rel="alternate" type="text/html" href="https://glolfwiki.sibr.dev/index.php?title=Module:Team_bracket&amp;diff=240"/>
		<updated>2021-06-07T05:12:16Z</updated>

		<summary type="html">&lt;p&gt;Pokeylope: Add nowrap&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- https://en.wikipedia.org/wiki/Module:Team_bracket&lt;br /&gt;
--&lt;br /&gt;
-- This module implements many bracket templates&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
local args = {}&lt;br /&gt;
local rows = {}&lt;br /&gt;
local mask = {}&lt;br /&gt;
local rounds&lt;br /&gt;
local maxround&lt;br /&gt;
local legs = {}&lt;br /&gt;
local compact&lt;br /&gt;
local byes&lt;br /&gt;
local hideSeeds&lt;br /&gt;
local showSeeds&lt;br /&gt;
local hideHeadings&lt;br /&gt;
local showThird&lt;br /&gt;
local offsetThird&lt;br /&gt;
local compactFinal&lt;br /&gt;
local sepwidth&lt;br /&gt;
local aggsep&lt;br /&gt;
local aggregate&lt;br /&gt;
local boldwinner&lt;br /&gt;
local hideomittedscores&lt;br /&gt;
local RD1seedmap = {}&lt;br /&gt;
local tcats = ''&lt;br /&gt;
local emoji&lt;br /&gt;
&lt;br /&gt;
local function isnotblank(s)&lt;br /&gt;
	return s and s ~= ''&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function isblank(s)&lt;br /&gt;
	return (not s) or (s == '')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function sumScores(s1, s2)&lt;br /&gt;
	s1 = mw.ustring.gsub(s1 or '', '^[\'%s]*([%d%.]*).-$', '%1')&lt;br /&gt;
	s2 = mw.ustring.gsub(s2 or '', '^[\'%s]*([%d%.]*).-$', '%1')&lt;br /&gt;
	if s1 ~= '' and s2 ~= '' then&lt;br /&gt;
		return tonumber(s1) + tonumber(s2)&lt;br /&gt;
	end&lt;br /&gt;
	return s1&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function scoreCompare(s1,s2,highwin)&lt;br /&gt;
	local ps1 = mw.ustring.gsub(s1 or '', '^[\'%s]*([%d%.]*)[\'%s]*%([\'%s]*([%d%.]*)[\'%s]*%).-$', '%2')&lt;br /&gt;
	local ps2 = mw.ustring.gsub(s2 or '', '^[\'%s]*([%d%.]*)[\'%s]*%([\'%s]*([%d%.]*)[\'%s]*%).-$', '%2')&lt;br /&gt;
	s1 = mw.ustring.gsub(s1 or '', '^[\'%s]*([%d%.]*).-$', '%1')&lt;br /&gt;
	s2 = mw.ustring.gsub(s2 or '', '^[\'%s]*([%d%.]*).-$', '%1')&lt;br /&gt;
	&lt;br /&gt;
	if s1 ~= '' and s2 ~= '' then&lt;br /&gt;
		s1 = tonumber(s1)&lt;br /&gt;
		s2 = tonumber(s2)&lt;br /&gt;
		if s1 and s2 then&lt;br /&gt;
			if (s1 == s2) then&lt;br /&gt;
				ps1 = tonumber(ps1)&lt;br /&gt;
				ps2 = tonumber(ps2)&lt;br /&gt;
				if ps1 and ps2 then&lt;br /&gt;
					s1 = ps1&lt;br /&gt;
					s2 = ps2&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if highwin then&lt;br /&gt;
				return ((s1 &amp;gt; s2) and 1) or ((s1 &amp;lt; s2) and 2) or 0&lt;br /&gt;
			else&lt;br /&gt;
				return ((s2 &amp;gt; s1) and 1) or ((s2 &amp;lt; s1) and 2) or 0&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function parseArgs(frame)&lt;br /&gt;
	local fargs = frame.args&lt;br /&gt;
	local pargs = frame:getParent().args;&lt;br /&gt;
&lt;br /&gt;
	local r = tonumber(fargs.rounds or '') or tonumber(pargs.rounds or '') or 2&lt;br /&gt;
	local teams = math.pow(2, r)&lt;br /&gt;
	local rdstr = 'RD' .. tostring(r)&lt;br /&gt;
	local rdbstr = 'RD' .. tostring(r) .. 'b'&lt;br /&gt;
	local rdp1str = 'RD' .. tostring(r+1)&lt;br /&gt;
&lt;br /&gt;
	for i=1,2 do&lt;br /&gt;
		local targs = (i == 1) and pargs or fargs&lt;br /&gt;
		for k,v in pairs(targs) do&lt;br /&gt;
			if type(k) == 'string' then&lt;br /&gt;
				if k:find('^[R3][Dr][d1-9]b?%-[a-z][a-z]*00*') then&lt;br /&gt;
					k = mw.ustring.gsub(k, '^([R3][Dr][d1-9]b?%-[a-z][a-z]*)00*', '%1')&lt;br /&gt;
					if (teams &amp;lt; 10) then &lt;br /&gt;
						tcats = tcats .. '[[Category:Pages using a team bracket with deprecated syntax|P]]'&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				if k:find('^' .. rdp1str) then&lt;br /&gt;
					k = mw.ustring.gsub(k, '^' .. rdp1str, '3rd')&lt;br /&gt;
					tcats = tcats .. '[[Category:Pages using a team bracket with deprecated syntax|3]]'&lt;br /&gt;
				elseif k:find('^' .. rdbstr) then&lt;br /&gt;
					k = mw.ustring.gsub(k, '^' .. rdbstr, '3rd')&lt;br /&gt;
				elseif k:find('^' .. rdstr .. '%-[a-z][a-z]*3') then&lt;br /&gt;
					k = mw.ustring.gsub(k, '^' .. rdstr .. '(%-[a-z][a-z]*)3', '3rd%11')&lt;br /&gt;
				elseif k:find('^' .. rdstr .. '%-[a-z][a-z]*4') then&lt;br /&gt;
					k = mw.ustring.gsub(k, '^' .. rdstr .. '(%-[a-z][a-z]*)4', '3rd%12')&lt;br /&gt;
				elseif  k:find('^Consol') then&lt;br /&gt;
					k = mw.ustring.gsub(k, '^Consol', '3rd')&lt;br /&gt;
					tcats = tcats .. '[[Category:Pages using a team bracket with deprecated syntax|3]]'&lt;br /&gt;
				elseif k:find('^group[0-9]') then&lt;br /&gt;
					tcats = tcats .. '[[Category:Pages using a team bracket with deprecated syntax|G]]'&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			args[k] = v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if (args['byes'] and (args['byes'] == 'yes' or args['byes'] == 'y')) then&lt;br /&gt;
		tcats = tcats .. '[[Category:Pages using a team bracket with deprecated syntax|B]]'&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function parseSeedmap(s)&lt;br /&gt;
	s = mw.text.split((s or '0') .. '/', '[%s]*/[%s]*')&lt;br /&gt;
	local teams = math.pow(2, rounds)&lt;br /&gt;
	for r=1,teams do&lt;br /&gt;
		RD1seedmap[r] = 1&lt;br /&gt;
	end&lt;br /&gt;
	for r=1,#s do&lt;br /&gt;
		if tonumber(s[r] or 'x') then&lt;br /&gt;
			RD1seedmap[tonumber(s[r])] = 0&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local c = 1&lt;br /&gt;
	for r=1,teams do&lt;br /&gt;
		if RD1seedmap[r] &amp;gt; 0 then&lt;br /&gt;
			RD1seedmap[r] = c&lt;br /&gt;
			c = c + 1&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function parseLegs(s)&lt;br /&gt;
	s = mw.text.split((s or '1') .. '/', '[%s]*/[%s]*')&lt;br /&gt;
	if aggregate == 'n' or aggregate == 'no' or aggregate == '0' then&lt;br /&gt;
		aggregate = ''&lt;br /&gt;
	end&lt;br /&gt;
	local n = showThird and (rounds + 1) or (rounds)&lt;br /&gt;
	local lastlegs = nil&lt;br /&gt;
	for r=1,n do&lt;br /&gt;
		if s[r] ~= nil and s[r] ~= '' and tonumber(s[r]) then&lt;br /&gt;
			legs[r] = tonumber(s[r])&lt;br /&gt;
		elseif lastlegs then&lt;br /&gt;
			legs[r] = lastlegs&lt;br /&gt;
		else&lt;br /&gt;
			legs[r] = 1&lt;br /&gt;
		end&lt;br /&gt;
		lastlegs = legs[r]&lt;br /&gt;
		if legs[r] &amp;gt; 1 and aggregate ~= '' then&lt;br /&gt;
			legs[r] = legs[r] + 1&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getSeeds()&lt;br /&gt;
	local seeds = {1, 2}&lt;br /&gt;
	local count = 2&lt;br /&gt;
	local before = false&lt;br /&gt;
	for r = 2, rounds do&lt;br /&gt;
		local max = math.pow(2, r)&lt;br /&gt;
		for i = 1, count do&lt;br /&gt;
			local pos = i * 2&lt;br /&gt;
			if before then pos = pos - 1 end&lt;br /&gt;
			table.insert(seeds, pos, max - seeds[i * 2 - 1] + 1)&lt;br /&gt;
			before = not before&lt;br /&gt;
		end&lt;br /&gt;
		count = count * 2&lt;br /&gt;
	end&lt;br /&gt;
	return seeds&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function addTableRow(tbl)&lt;br /&gt;
	return tbl:tag('tr')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function addBlank(i, css, rowspan, colspan)&lt;br /&gt;
	local row = rows[i]&lt;br /&gt;
	rowspan = rowspan or 1&lt;br /&gt;
	local jmax = i + rowspan - 1&lt;br /&gt;
	for j = i, jmax do&lt;br /&gt;
		if rows[j] == nil then&lt;br /&gt;
			rowspan = rowspan - 1&lt;br /&gt;
		elseif row == nil then&lt;br /&gt;
			row = rows[j]&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local cell = row and row:tag('td') or mw.html.create('td')&lt;br /&gt;
	if rowspan and rowspan &amp;gt; 1 then&lt;br /&gt;
		cell:attr('rowspan', rowspan)&lt;br /&gt;
	end&lt;br /&gt;
	if colspan and colspan &amp;gt; 1 then&lt;br /&gt;
		cell:attr('colspan', colspan)&lt;br /&gt;
	end&lt;br /&gt;
	if css then&lt;br /&gt;
		cell:css(css)&lt;br /&gt;
	end&lt;br /&gt;
	return cell&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function addBorders(cell, topcell, seedorteam, extrasep)&lt;br /&gt;
	if sepwidth &amp;gt; 1 then topcell = true end&lt;br /&gt;
	if seedorteam then&lt;br /&gt;
		cell:css('border', '1px solid #aaa')&lt;br /&gt;
			:css('border-top-width', topcell and '1px' or '0')&lt;br /&gt;
	else&lt;br /&gt;
		cell:css('border-color', '#aaa')&lt;br /&gt;
			:css('border-style', 'solid')&lt;br /&gt;
			:css('border-top-width', topcell and '1px' or '0')&lt;br /&gt;
			:css('border-left-width', (extrasep and '1px') or ((sepwidth &amp;gt; 1) and '1px') or '0')&lt;br /&gt;
			:css('border-right-width', '1px')&lt;br /&gt;
			:css('border-bottom-width', '1px')&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function addHeading(row, r, text, pad)&lt;br /&gt;
	pad = (pad == nil or pad &amp;lt; 0) and 0 or pad&lt;br /&gt;
	row:tag('td')&lt;br /&gt;
		:attr('colspan', tonumber(hideSeeds and '1' or '2') + legs[r] + pad)&lt;br /&gt;
		:css('text-align', 'center')&lt;br /&gt;
		:css('border', '1px solid #aaa')&lt;br /&gt;
		:css('background-color', args['RD-shade'] or '#f2f2f2')&lt;br /&gt;
		:wikitext(text)&lt;br /&gt;
		:newline()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getWidth(param, default)&lt;br /&gt;
	local arg = args[param .. '-width']&lt;br /&gt;
	if isblank(arg) then&lt;br /&gt;
		arg = default&lt;br /&gt;
	end&lt;br /&gt;
	if tonumber(arg) ~= nil then&lt;br /&gt;
		arg = arg .. 'px'&lt;br /&gt;
	end&lt;br /&gt;
	return arg&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getTeamArgName(round, type, team)&lt;br /&gt;
	if round &amp;gt; rounds then&lt;br /&gt;
		return string.format('3rd-%s%d', type, team)&lt;br /&gt;
	else&lt;br /&gt;
		if (round == 1) then&lt;br /&gt;
			team = RD1seedmap[team]&lt;br /&gt;
			if team == 0 then&lt;br /&gt;
				return 'NIL'&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return string.format('RD%d-%s%d', round, type, team)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getShadeArg(round, team, s)&lt;br /&gt;
	local argname = getTeamArgName(round, 'shade', team) .. (s and ('-' .. s) or '')&lt;br /&gt;
	local value = args[argname]&lt;br /&gt;
	if isblank(value) then&lt;br /&gt;
		return '#f9f9f9'&lt;br /&gt;
	end&lt;br /&gt;
	return value&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getScoreArg(round, team, s)&lt;br /&gt;
	local argname = getTeamArgName(round, 'score', team) .. (s and ('-' .. s) or '')&lt;br /&gt;
	local value = args[argname]&lt;br /&gt;
	return value&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getTeamArg(round, type, team)&lt;br /&gt;
	local argname = getTeamArgName(round, type, team)&lt;br /&gt;
	local value = args[argname]&lt;br /&gt;
	if isblank(value) then&lt;br /&gt;
		return ''&lt;br /&gt;
	end&lt;br /&gt;
	if mw.ustring.find(value, '[%s]*&amp;lt;[%s/]*[Bb][Rr][%s/]*&amp;gt;[%s ]*&amp;amp;[Nn][Bb][Ss][Pp];[%s]*') then&lt;br /&gt;
		tcats = tcats .. '[[Category:Pages using a team bracket with nbsp]]'&lt;br /&gt;
	end&lt;br /&gt;
	return mw.ustring.gsub(value, '[%s]*&amp;lt;[%s/]*[Bb][Rr][%s/]*&amp;gt;[%s ]*&amp;amp;[Nn][Bb][Ss][Pp];[%s]*', '&amp;lt;br/&amp;gt;')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function isHidden(r, team)&lt;br /&gt;
	return isblank( getTeamArg(r, 'team', team) )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getRoundName(round)&lt;br /&gt;
	local name = args['RD' .. round]&lt;br /&gt;
	if isnotblank(name) then&lt;br /&gt;
		return name&lt;br /&gt;
	end&lt;br /&gt;
	local roundFromLast = rounds - round + 1&lt;br /&gt;
	if roundFromLast == 1 then&lt;br /&gt;
		return &amp;quot;Finals&amp;quot;&lt;br /&gt;
	elseif roundFromLast == 2 then&lt;br /&gt;
		return &amp;quot;Semifinals&amp;quot;&lt;br /&gt;
	elseif roundFromLast == 3 then&lt;br /&gt;
		return &amp;quot;Quarterfinals&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;quot;Round of &amp;quot; .. math.pow(2, roundFromLast)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function addPath(index, round, top, left, w)&lt;br /&gt;
	local prop = top and 'border-bottom-width' or 'border-top-width'&lt;br /&gt;
	if left and round == 1 then&lt;br /&gt;
		if compact then&lt;br /&gt;
			addBlank(index)&lt;br /&gt;
		else&lt;br /&gt;
			addBlank(index, {['height'] = '7px'})&lt;br /&gt;
			addBlank(index+1, {['height'] = '7px'})&lt;br /&gt;
		end&lt;br /&gt;
		return nil&lt;br /&gt;
	else&lt;br /&gt;
		local cell = addBlank(index, &lt;br /&gt;
			{['border-width'] = '0',&lt;br /&gt;
			['border-style'] = 'solid',&lt;br /&gt;
			['border-color'] = 'black'}, (not compact) and 2 or 1)&lt;br /&gt;
		if left or round &amp;lt; maxround and not left then&lt;br /&gt;
			cell:css(prop, w or '2px')&lt;br /&gt;
		end&lt;br /&gt;
		return cell&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderTeam(row, round, team, top, otherbye, pad)&lt;br /&gt;
	pad = (pad == nil or pad &amp;lt; 0) and 0 or pad&lt;br /&gt;
	tcs = pad + 1&lt;br /&gt;
	local seedCell&lt;br /&gt;
	local seedArg = getTeamArg(round, 'seed', team)&lt;br /&gt;
	-- seed value for the paired team&lt;br /&gt;
	local otherteam = team % 2 == 0 and team-1 or team+1&lt;br /&gt;
	local pairSeedArg = otherbye and '' &lt;br /&gt;
		or getTeamArg(round, 'seed', otherteam)&lt;br /&gt;
	-- show seed if seed is defined for either or both&lt;br /&gt;
	local showSeed = showSeeds&lt;br /&gt;
		or isnotblank(seedArg)&lt;br /&gt;
		or isnotblank(pairSeedArg)&lt;br /&gt;
	if showSeed and (not hideSeeds) then&lt;br /&gt;
		seedCell = row:tag('td')&lt;br /&gt;
			:css('text-align', 'center')&lt;br /&gt;
			:css('background-color', '#f2f2f2')&lt;br /&gt;
			:attr('rowspan', (not compact) and '2' or nil)&lt;br /&gt;
			:wikitext(seedArg)&lt;br /&gt;
			:newline()&lt;br /&gt;
		addBorders(seedCell, top or otherbye, true, false)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local teamArg = getTeamArg(round, 'team', team)&lt;br /&gt;
	if isblank(teamArg) then&lt;br /&gt;
		teamArg = '&amp;amp;nbsp;'&lt;br /&gt;
	else&lt;br /&gt;
		if emoji then&lt;br /&gt;
			teamArg = teamArg .. ' ' .. mw.getCurrentFrame():expandTemplate{ title = 'Emoji', args = { teamArg }}&lt;br /&gt;
		end&lt;br /&gt;
		teamArg = mw.getCurrentFrame():expandTemplate{ title = 'Nowrap', args = { teamArg }}&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if not showSeed and (not hideSeeds) then&lt;br /&gt;
		tcs = tcs + 1&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local teamCell = row:tag('td')&lt;br /&gt;
		:css('background-color', '#f9f9f9')&lt;br /&gt;
		:css('padding', '0 2px')&lt;br /&gt;
		:attr('rowspan', (not compact) and '2' or nil)&lt;br /&gt;
		:attr('colspan', (tcs &amp;gt; 1) and tcs or nil)&lt;br /&gt;
		:wikitext(teamArg)&lt;br /&gt;
		:newline()&lt;br /&gt;
	addBorders(teamCell, top or otherbye, true, false)&lt;br /&gt;
&lt;br /&gt;
	local scoreCells = {}&lt;br /&gt;
	local wins, otherwins = 0, 0&lt;br /&gt;
	local sumscore, othersumscore = 0, 0&lt;br /&gt;
	local teamcolspan = tcs&lt;br /&gt;
	local hassum = false&lt;br /&gt;
	local glolfwinner = nil&lt;br /&gt;
	for s = 1, legs[round] do&lt;br /&gt;
		local fw = nil&lt;br /&gt;
		local agg = legs[round] &amp;gt; 1 and s == legs[round] and true or false&lt;br /&gt;
		local score1 = (agg and getScoreArg(round, team, 'agg') or nil) or &lt;br /&gt;
			getScoreArg(round, team, s) or ((legs[round] == 1) and getScoreArg(round, team)) or nil&lt;br /&gt;
		local score2 = (agg and getScoreArg(round, otherteam, 'agg') or nil) or &lt;br /&gt;
			getScoreArg(round, otherteam, s) or ((legs[round] == 1) and getScoreArg(round, otherteam)) or nil&lt;br /&gt;
		local showscore = true&lt;br /&gt;
		if agg and aggregate ~= '' and score1 == nil and hassum then&lt;br /&gt;
			score1 = (aggregate == 'score')	and sumscore &lt;br /&gt;
				or ((aggregate == 'legs' or aggregate == 'sets') and wins)&lt;br /&gt;
				or nil&lt;br /&gt;
		end&lt;br /&gt;
		if agg and aggregate ~= '' and score2 == nil and hassum then&lt;br /&gt;
			score2 = (aggregate == 'score')	and othersumscore&lt;br /&gt;
				or ((aggregate == 'legs' or aggregate == 'sets') and otherwins)&lt;br /&gt;
				or nil&lt;br /&gt;
		end&lt;br /&gt;
		if score1 == nil and score2 == nil then&lt;br /&gt;
			if hideomittedscores &amp;gt; 0 and s &amp;gt;= hideomittedscores then&lt;br /&gt;
				teamcolspan = teamcolspan + 1&lt;br /&gt;
				showscore = false&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			hassum = true&lt;br /&gt;
		end&lt;br /&gt;
		if showscore then&lt;br /&gt;
			local winner = scoreCompare(score1, score2, boldwinner ~= 'low' and (boldwinner ~= 'glolf' or s == 1))&lt;br /&gt;
			if boldwinner == 'glolf' then&lt;br /&gt;
				if not glolfwinner and winner &amp;gt; 0 then&lt;br /&gt;
					if winner == 1 then&lt;br /&gt;
						fw = 'bold'&lt;br /&gt;
					end&lt;br /&gt;
					glolfwinner = winner&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				sumscore = sumScores(sumscore, score1)&lt;br /&gt;
				othersumscore = sumScores(othersumscore, score2)&lt;br /&gt;
				if winner == 1 then&lt;br /&gt;
					if boldwinner ~= '' or (agg and (aggregate == 'score' or aggregate == 'legs' or aggregate == 'sets')) then &lt;br /&gt;
						if agg and (aggregate == 'legs' or aggregate == 'sets') and (wins &amp;lt;= (legs[round] - 1)/2) then&lt;br /&gt;
						else&lt;br /&gt;
							fw = 'bold'&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
					if not agg then wins = wins + 1 end&lt;br /&gt;
				elseif winner == 2 then&lt;br /&gt;
					if not agg then otherwins = otherwins + 1 end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			scoreCells[s] = row:tag('td')&lt;br /&gt;
				:css('text-align', 'center')&lt;br /&gt;
				:css('background-color', getShadeArg(round, team, s))&lt;br /&gt;
				:css('font-weight', fw)&lt;br /&gt;
				:attr('rowspan', (not compact) and '2' or nil)&lt;br /&gt;
				:wikitext(score1)&lt;br /&gt;
				:newline()&lt;br /&gt;
			addBorders(scoreCells[s], top or otherbye, false, s &amp;gt; 1 and s == legs[round] and aggsep or nil)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if teamcolspan &amp;gt; 1 then&lt;br /&gt;
		teamCell:attr('colspan', teamcolspan)&lt;br /&gt;
	end&lt;br /&gt;
	if (boldwinner == 'glolf' and glolfwinner == 1) or (boldwinner ~= '' and wins &amp;gt; otherwins) then&lt;br /&gt;
		if (aggregate == 'legs' or aggregate == 'sets') and (wins &amp;lt;= (legs[round] - 1)/2) then&lt;br /&gt;
		else&lt;br /&gt;
			if seedCell then&lt;br /&gt;
				seedCell:css('font-weight', 'bold')&lt;br /&gt;
			end&lt;br /&gt;
			if teamCell then&lt;br /&gt;
				teamCell:css('font-weight', 'bold')&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderRound(count, r)&lt;br /&gt;
	local teams = math.pow(2, rounds - r + 1)&lt;br /&gt;
	local step = count / teams&lt;br /&gt;
	local topTeam = true -- is top row in match-up&lt;br /&gt;
	local topPair = true -- is top match-up in pair of match-ups&lt;br /&gt;
	local team = 1&lt;br /&gt;
	local group = 1&lt;br /&gt;
&lt;br /&gt;
	for i = 1, count, step do&lt;br /&gt;
		local offset, height, blank&lt;br /&gt;
&lt;br /&gt;
		local hideteam = false&lt;br /&gt;
		local otherhideteam = false&lt;br /&gt;
		local hideleftpath = false&lt;br /&gt;
		local hiderightpath = false&lt;br /&gt;
		if r &amp;lt;= byes then&lt;br /&gt;
			hideteam = isHidden(r, team)&lt;br /&gt;
			otherhideteam = isHidden(r, team % 2 == 0 and team-1 or team+1)&lt;br /&gt;
		end&lt;br /&gt;
		if (r == 1) and (RD1seedmap[team] &amp;lt;= 0) then&lt;br /&gt;
				hideteam = true&lt;br /&gt;
		end&lt;br /&gt;
		if (r &amp;gt; 1) and (r &amp;lt;= (byes + 1)) then&lt;br /&gt;
			hideleftpath = isHidden(r-1, 2*team-1) and isHidden(r-1, 2*team)&lt;br /&gt;
		end&lt;br /&gt;
		if (r == 2) and (RD1seedmap[2*team-1] &amp;lt;= 0 and RD1seedmap[2*team] &amp;lt;= 0) then&lt;br /&gt;
			hideleftpath = true&lt;br /&gt;
		end&lt;br /&gt;
		if compactFinal and (r == rounds) then&lt;br /&gt;
			hideleftpath = true&lt;br /&gt;
		end&lt;br /&gt;
		if (tonumber(args['RD' .. (r-1) .. '-RD' .. (r) .. '-path']) or 2) == 0 then&lt;br /&gt;
			hideleftpath = true&lt;br /&gt;
		end&lt;br /&gt;
		if (tonumber(args['RD' .. (r) .. '-RD' .. (r + 1) .. '-path']) or 2) == 0 then&lt;br /&gt;
			hiderightpath = true&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- empty space above or below&lt;br /&gt;
		if compact then&lt;br /&gt;
			offset = topTeam and i or i + 1&lt;br /&gt;
			height = step - 1&lt;br /&gt;
		-- leave room for groups for teams other than first and last&lt;br /&gt;
		elseif team == 1 or team == teams then&lt;br /&gt;
			offset = topTeam and i or i + 2&lt;br /&gt;
			height = step - 2&lt;br /&gt;
		else&lt;br /&gt;
			offset = topTeam and i + 1 or i + 2&lt;br /&gt;
			height = step - 3&lt;br /&gt;
		end&lt;br /&gt;
		if showThird and (r == rounds) and (not topTeam) then&lt;br /&gt;
			height = offset - offsetThird&lt;br /&gt;
		end&lt;br /&gt;
		if compactFinal and (r == (maxround - 1)) then&lt;br /&gt;
			if team == 2 then&lt;br /&gt;
				height = height - 3&lt;br /&gt;
			end&lt;br /&gt;
			if team == 3 then&lt;br /&gt;
				height = height - 1&lt;br /&gt;
				offset = offset + 1&lt;br /&gt;
				addBlank(offset-3, nil, 1, tonumber(hideSeeds and '2' or '3') + legs[r])&lt;br /&gt;
				addBlank(offset-4)&lt;br /&gt;
				addHeading(rows[offset-4], r + 1, getRoundName(r+1), legs[r] - legs[r+1])&lt;br /&gt;
				local b = addBlank(offset-4, {&lt;br /&gt;
					['border-color'] = 'black',&lt;br /&gt;
					['border-style']= 'solid',&lt;br /&gt;
					['border-width']= '0'}, 2)&lt;br /&gt;
				b:css('border-right-width', '2px')&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if height &amp;gt; 0 then&lt;br /&gt;
			local pad = 0&lt;br /&gt;
			local betweenTeams = (topTeam == false and topPair == true) or (topTeam == true and topPair == false)&lt;br /&gt;
			if compactFinal and (r == maxround - 1) then&lt;br /&gt;
				betweenTeams = false&lt;br /&gt;
			end&lt;br /&gt;
			if compactFinal and (r == maxround - 1) and legs[r+1] &amp;gt; legs[r] then&lt;br /&gt;
				pad = legs[r+1] - legs[r]&lt;br /&gt;
			end&lt;br /&gt;
			if compact and betweenTeams then&lt;br /&gt;
				addBlank(offset, nil, height, 1)&lt;br /&gt;
				if topPair then&lt;br /&gt;
					blank = addBlank(offset, nil, 2*height, tonumber(hideSeeds and '1' or '2') + legs[r] + pad)&lt;br /&gt;
					if args['RD' .. r .. '-group' .. group] then&lt;br /&gt;
						blank:wikitext(args['RD' .. r .. '-group' .. group])&lt;br /&gt;
						blank:css('text-align', 'center')&lt;br /&gt;
					end&lt;br /&gt;
					group = group + 1&lt;br /&gt;
				end&lt;br /&gt;
				blank = addBlank(offset, &lt;br /&gt;
				{['border-width'] = '0',&lt;br /&gt;
				['border-style'] = 'solid',&lt;br /&gt;
				['border-color'] = 'black'},&lt;br /&gt;
				height, 1)&lt;br /&gt;
			else&lt;br /&gt;
				blank = addBlank(offset, &lt;br /&gt;
				{['border-width'] = '0',&lt;br /&gt;
				['border-style'] = 'solid',&lt;br /&gt;
				['border-color'] = 'black'},&lt;br /&gt;
				height, tonumber(hideSeeds and '3' or '4') + legs[r] + pad)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		-- add bracket&lt;br /&gt;
		local j = topTeam and i + step - (compact and 1 or 2) or i&lt;br /&gt;
		-- add left path&lt;br /&gt;
		addPath(j, r, topTeam, true, hideleftpath and '0' or '2px')&lt;br /&gt;
		if hideteam then&lt;br /&gt;
			addBlank(j, nil, (not compact) and 2 or nil, tonumber(hideSeeds and '1' or '2') + legs[r])&lt;br /&gt;
		elseif rows[j] then&lt;br /&gt;
			if compactFinal and (r == maxround) then&lt;br /&gt;
				renderTeam(rows[j], r, team, topTeam, otherhideteam, legs[r-1] - legs[r])&lt;br /&gt;
			elseif compactFinal and (r == maxround - 1) then&lt;br /&gt;
				renderTeam(rows[j], r, team, topTeam, otherhideteam, legs[r+1] - legs[r])&lt;br /&gt;
			else&lt;br /&gt;
				renderTeam(rows[j], r, team, topTeam, otherhideteam)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		local rightPath = addPath(j, r, topTeam, false, (hiderightpath or hideteam) and '0' or '2px')&lt;br /&gt;
		if not topTeam then topPair = not topPair end&lt;br /&gt;
		if not topPair and r &amp;lt; maxround and (not (hiderightpath or hideteam)) then&lt;br /&gt;
			if blank then blank:css('border-right-width', '2px') end&lt;br /&gt;
			rightPath:css('border-right-width', '2px')&lt;br /&gt;
		end&lt;br /&gt;
		if compactFinal and (r == maxround) then&lt;br /&gt;
			local prop = (team == 1) and 'border-bottom-width' or 'border-top-width'&lt;br /&gt;
			rightPath:css('border-right-width', '2px')&lt;br /&gt;
				:css(prop, '2px')&lt;br /&gt;
		end&lt;br /&gt;
		team = team + 1&lt;br /&gt;
		topTeam = not topTeam&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderGroups(count, round)&lt;br /&gt;
	local roundFromLast = rounds - round + 1&lt;br /&gt;
	local groups = math.pow(2, roundFromLast - 2)&lt;br /&gt;
	local step = count / groups&lt;br /&gt;
	local group = 1&lt;br /&gt;
	local offset = 0&lt;br /&gt;
	local team = 0&lt;br /&gt;
	local wdef = (tonumber(args['RD' .. (round) .. '-RD' .. (round + 1) .. '-path']) or 2) .. 'px'&lt;br /&gt;
	local w = wdef&lt;br /&gt;
&lt;br /&gt;
	for r = 1,round do&lt;br /&gt;
		offset = offset + (hideSeeds and 3 or 4) + legs[r]&lt;br /&gt;
	end&lt;br /&gt;
	for i = step / 2, count, step do&lt;br /&gt;
		local name = 'RD' .. round .. '-group' .. group&lt;br /&gt;
		addBlank(i, {['height'] = '7px'})&lt;br /&gt;
		addBlank(i+1, {['height'] = '7px'})&lt;br /&gt;
		addBlank(i, {['text-align'] = 'center'}, 2, offset-2)&lt;br /&gt;
			:wikitext(args[name])&lt;br /&gt;
			:newline()&lt;br /&gt;
		if (round &amp;lt;= byes) then&lt;br /&gt;
			team = i/(step/2)&lt;br /&gt;
			w = isHidden(round, 2*team-1) and isHidden(round, 2*team) and '0' or wdef&lt;br /&gt;
		end&lt;br /&gt;
		if (round &amp;lt; maxround) then&lt;br /&gt;
			addBlank(i, {&lt;br /&gt;
				['border-color'] = 'black',&lt;br /&gt;
				['border-style'] = 'solid', &lt;br /&gt;
				['border-width'] = '0 ' .. w .. ' 0 0'})&lt;br /&gt;
		else&lt;br /&gt;
			addBlank(i)&lt;br /&gt;
		end&lt;br /&gt;
		if (round &amp;lt;= byes) then&lt;br /&gt;
			team = team + 1&lt;br /&gt;
			w = isHidden(round, 2*team-1) and isHidden(round, 2*team) and '0' or wdef&lt;br /&gt;
		end&lt;br /&gt;
		if (round &amp;lt; maxround) then&lt;br /&gt;
			addBlank(i+1, {&lt;br /&gt;
				['border-color'] = 'black',&lt;br /&gt;
				['border-style'] = 'solid', &lt;br /&gt;
				['border-width'] = '0 ' .. w .. ' 0 0'})&lt;br /&gt;
		else&lt;br /&gt;
			addBlank(i+1)&lt;br /&gt;
		end&lt;br /&gt;
		group = group + 1&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getThirdOffset()&lt;br /&gt;
	local offset = (compact and 1 or 3) * (math.pow(2, rounds) - math.pow(2, rounds-3)) - (compact and 2 or 4)&lt;br /&gt;
	if rounds &amp;lt; 4 then&lt;br /&gt;
		offset = compact and 8 or 17&lt;br /&gt;
		if rounds &amp;lt; 3 then&lt;br /&gt;
			offset = compact and 6 or 10&lt;br /&gt;
			if rounds &amp;lt; 2 then&lt;br /&gt;
				offset = compact and 4 or 7&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return offset&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderThird(count)&lt;br /&gt;
	local k = offsetThird&lt;br /&gt;
	local row = rows[k]&lt;br /&gt;
	local blank&lt;br /&gt;
	if rounds &amp;lt; 2 then&lt;br /&gt;
		blank = addBlank(k-1, {['height'] = '7px'})&lt;br /&gt;
	end&lt;br /&gt;
	blank = addBlank(k, rounds &amp;lt; 2 and {['height'] = '7px'} or nil)&lt;br /&gt;
	addHeading(row, rounds + 1, args['3rd'] or 'Third place')&lt;br /&gt;
	if rounds &amp;lt; 2 then&lt;br /&gt;
		for i = 1,(compact and 1 or 2) do&lt;br /&gt;
			blank = addBlank(k+i, {['height'] = '7px'})&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	k = k + (compact and 2 or 3)&lt;br /&gt;
	for i = 1,2 do&lt;br /&gt;
		row = rows[k]&lt;br /&gt;
		blank = addBlank(k, rounds &amp;lt; 2 and {['height'] = '7px'} or nil)&lt;br /&gt;
		if row then&lt;br /&gt;
			renderTeam(row, rounds + 1, i, i == 1, false)&lt;br /&gt;
		end&lt;br /&gt;
		if rounds &amp;lt; 2 and not compact then&lt;br /&gt;
			blank = addBlank(k+1, {['height'] = '7px'})&lt;br /&gt;
		end&lt;br /&gt;
		k = k + (compact and 1 or 2)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function maskRows(tbl, count, offsetcount)&lt;br /&gt;
	local rmin = 1&lt;br /&gt;
	local rmax = count&lt;br /&gt;
	for i = rmin, rmax do&lt;br /&gt;
		mask[i] = false&lt;br /&gt;
	end&lt;br /&gt;
	if showThird then&lt;br /&gt;
		for i = offsetThird,(offsetThird+ (compact and 3 or 5)) do&lt;br /&gt;
			rmax = (i &amp;gt; rmax) and i or rmax&lt;br /&gt;
			mask[i] = true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for r = 1, maxround do&lt;br /&gt;
		local teams = math.pow(2, rounds - r + 1)&lt;br /&gt;
		local step = count / teams&lt;br /&gt;
		local topTeam = true -- is top row in match-up&lt;br /&gt;
		local team = 1&lt;br /&gt;
&lt;br /&gt;
		for i = 1, count, step do&lt;br /&gt;
			local offset, height, blank&lt;br /&gt;
			local hideteam = false&lt;br /&gt;
			if r &amp;lt;= byes then&lt;br /&gt;
				hideteam = isHidden(r, team)&lt;br /&gt;
			end&lt;br /&gt;
			if (r == 1) and (RD1seedmap[team] &amp;lt;= 0) then&lt;br /&gt;
				hideteam = true&lt;br /&gt;
			end&lt;br /&gt;
			if not hideteam then&lt;br /&gt;
				local j = topTeam and i + step - (compact and 1 or 2) or i&lt;br /&gt;
				mask[j] = true&lt;br /&gt;
			end&lt;br /&gt;
			team = team + 1&lt;br /&gt;
			topTeam = not topTeam&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	for r = 1, maxround do&lt;br /&gt;
		local roundFromLast = rounds - r + 1&lt;br /&gt;
		local groups = math.pow(2, roundFromLast - 2)&lt;br /&gt;
		local step = count / groups&lt;br /&gt;
		local group = 1&lt;br /&gt;
		for i = step / 2, count, step do&lt;br /&gt;
			if args['RD' .. r .. '-group' .. group] then&lt;br /&gt;
				mask[i] = true&lt;br /&gt;
				mask[i+1] = true&lt;br /&gt;
			end&lt;br /&gt;
			group = group + 1&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local mmin, mmax = rmax, rmin&lt;br /&gt;
	for i = rmin, rmax do&lt;br /&gt;
		if mask[i] == true then&lt;br /&gt;
			mmin = (i &amp;lt; mmin) and i or mmin&lt;br /&gt;
			mmax = (i &amp;gt; mmax) and i or mmax&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for i = mmin, mmax do&lt;br /&gt;
		rows[i] = addTableRow(tbl)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderTree(tbl)&lt;br /&gt;
	-- create 3 or 1 rows for every team&lt;br /&gt;
	local count = math.pow(2, rounds) * (compact and 1 or 3)&lt;br /&gt;
	local offsetcount = 2 * (compact and 1 or 3) + (compact and 2 or 3)&lt;br /&gt;
	offsetThird = getThirdOffset()&lt;br /&gt;
	maskRows(tbl, count, offsetcount)&lt;br /&gt;
	if showThird then&lt;br /&gt;
		for i = (count+1), (offsetcount + offsetThird) do&lt;br /&gt;
			if (rounds &amp;gt; 1) then&lt;br /&gt;
				local blank = addBlank(i, nil, 1, tonumber(hideSeeds and '3' or '4') + legs[1])&lt;br /&gt;
				if compact and (rounds &amp;gt; 2) then&lt;br /&gt;
					blank = addBlank(i, nil, 1, tonumber(hideSeeds and '3' or '4') + legs[1])&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if not compact then&lt;br /&gt;
		-- fill rows with groups&lt;br /&gt;
		for r = 1, rounds - 1 do&lt;br /&gt;
			renderGroups(count, r)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- fill rows with bracket&lt;br /&gt;
	for r = 1, maxround do&lt;br /&gt;
		renderRound(count, r)&lt;br /&gt;
	end&lt;br /&gt;
	if showThird then&lt;br /&gt;
		renderThird(count, compact)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderHeadings(tbl)&lt;br /&gt;
	local titleRow = addTableRow((not hideHeadings) and tbl or mw.html.create('table'))&lt;br /&gt;
	local widthRow = addTableRow(tbl)&lt;br /&gt;
	for r = 1, (compactFinal and (maxround-1) or maxround) do&lt;br /&gt;
		titleRow:tag('td')&lt;br /&gt;
		widthRow:tag('td'):css('width', r &amp;gt; 1 and '5px' or '1px')&lt;br /&gt;
		if compactFinal and r == (maxround-1) then&lt;br /&gt;
			addHeading(titleRow, r, getRoundName(r), legs[r+1] - legs[r])&lt;br /&gt;
		else&lt;br /&gt;
			addHeading(titleRow, r, getRoundName(r) )&lt;br /&gt;
		end&lt;br /&gt;
		local seedCell&lt;br /&gt;
		if (not hideSeeds) then&lt;br /&gt;
			seedCell = widthRow:tag('td'):css('width', getWidth('seed', '25px'))&lt;br /&gt;
		end&lt;br /&gt;
		local teamCell = widthRow:tag('td'):css('width', getWidth('team', '150px'))&lt;br /&gt;
		local scoreCells = {}&lt;br /&gt;
		local legsr = legs[r]&lt;br /&gt;
		if compactFinal and r == (maxround-1) then&lt;br /&gt;
			legsr = legs[r+1] &amp;gt; legs[r] and legs[r+1] or legs[r]&lt;br /&gt;
		end&lt;br /&gt;
		for s = 1, legsr do&lt;br /&gt;
			scoreCells[s] = widthRow:tag('td'):css('width', getWidth('score', '25px'))&lt;br /&gt;
		end&lt;br /&gt;
		titleRow:tag('td')&lt;br /&gt;
		widthRow:tag('td'):css('width', r &amp;lt; rounds and '5px' or '1px')&lt;br /&gt;
&lt;br /&gt;
		if compact then&lt;br /&gt;
			teamCell:css('height', '7px')&lt;br /&gt;
		else&lt;br /&gt;
			if seedCell then&lt;br /&gt;
				seedCell:wikitext('&amp;amp;nbsp;')&lt;br /&gt;
			end&lt;br /&gt;
			teamCell:wikitext('&amp;amp;nbsp;')&lt;br /&gt;
			for s = 1, legs[r] do&lt;br /&gt;
				scoreCells[s]:wikitext('&amp;amp;nbsp;')&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	parseArgs(frame)&lt;br /&gt;
	rounds = tonumber(args.rounds) or 2&lt;br /&gt;
	maxround = tonumber(args.maxround) or rounds&lt;br /&gt;
	local teams = math.pow(2, rounds)&lt;br /&gt;
	compact = (args['compact'] and (args['compact'] == 'yes' or args['compact'] == 'y'))&lt;br /&gt;
	compactFinal = ((rounds &amp;gt; 4) and compact and args['compact-final'] and (args['compact-final'] == 'yes' or args['compact-final'] == 'y'))&lt;br /&gt;
	sepwidth = tonumber(args['sepwidth'] or ((args.sets or args.legs) and 1) or (compact and 1) or 2) or 1&lt;br /&gt;
	aggregate = (args['aggregate'] or ''):lower()&lt;br /&gt;
	aggsep = args['aggsep'] or args['aggregate'] or nil&lt;br /&gt;
	boldwinner = args['boldwinner'] or args['bold_winner'] or ''&lt;br /&gt;
	local autoSeeds = (args['autoseeds'] and (args['autoseeds'] == 'yes' or args['autoseeds'] == 'y'))&lt;br /&gt;
	hideSeeds = (args['seeds'] and (args['seeds'] == 'no' or args['seeds'] == 'n'))&lt;br /&gt;
	showSeeds = (args['seeds'] and (args['seeds'] == 'yes' or args['seeds'] == 'y'))&lt;br /&gt;
	byes = (args['byes'] and (args['byes'] == 'yes' or args['byes'] == 'y') and 1) or (tonumber(args['byes'] or '0') or 0)&lt;br /&gt;
	hideomittedscores = (args['hideomittedscores'] and (args['hideomittedscores'] == 'yes' or args['hideomittedscores'] == 'y') and 1) or (tonumber(args['hideomittedscores'] or '0') or 0)&lt;br /&gt;
	hideHeadings = (args['headings'] and (args['headings'] == 'no' or args['headings'] == 'n'))&lt;br /&gt;
	showThird = isnotblank(args['3rd']) or isnotblank(args['3rd-team1']) or isnotblank(args['3rd-team2'])&lt;br /&gt;
	local align = (args['float'] or args['align'] or ''):lower()&lt;br /&gt;
	local clear = args['clear'] or 'none'&lt;br /&gt;
	emoji = (args['emoji'] and (args['emoji'] == 'yes' or args['emoji'] == 'y'))&lt;br /&gt;
	parseSeedmap(args['RD1-omit'])&lt;br /&gt;
	parseLegs(args.sets or args.legs)&lt;br /&gt;
	&lt;br /&gt;
	if autoSeeds then&lt;br /&gt;
		-- set default seeds for round 1&lt;br /&gt;
		local seeds = getSeeds()&lt;br /&gt;
		for i = 1, table.getn(seeds) do&lt;br /&gt;
			local argname = getTeamArgName(1, 'seed', i)&lt;br /&gt;
			if not args[argname] then&lt;br /&gt;
				args[argname] = seeds[i]&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- create the table&lt;br /&gt;
	local tbl = mw.html.create('table')&lt;br /&gt;
		:css('border-style', 'none')&lt;br /&gt;
		:css('font-size', '90%')&lt;br /&gt;
		:css('border-collapse', 'separate')&lt;br /&gt;
		:css('border-spacing', '0')&lt;br /&gt;
		:attr('cellpadding', '0')&lt;br /&gt;
&lt;br /&gt;
	if (args['nowrap'] and (args['nowrap'] == 'yes' or args['nowrap'] == 'y')) then&lt;br /&gt;
		tbl:css('white-space', 'nowrap')&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if align == 'right' then&lt;br /&gt;
		tbl:css('float', 'right')&lt;br /&gt;
		if clear ~= 'none' and clear ~= 'no' and clear ~= 'n' then&lt;br /&gt;
			tbl:css('clear', 'right')&lt;br /&gt;
		end&lt;br /&gt;
		tbl:css('margin', '1em 0 1em 2em')&lt;br /&gt;
	elseif align == 'left' then&lt;br /&gt;
		tbl:css('float', 'left')&lt;br /&gt;
		if clear ~= 'none' and clear ~= 'no' and clear ~= 'n' then&lt;br /&gt;
			tbl:css('clear', 'left')&lt;br /&gt;
		end&lt;br /&gt;
		tbl:css('margin', '1em 2em 1em 0')&lt;br /&gt;
	elseif align == 'center' or align == 'centre' then&lt;br /&gt;
		tbl:css('margin', '1em auto')&lt;br /&gt;
	else&lt;br /&gt;
		tbl:css('margin', '1em 2em 1em 1em')&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	renderHeadings(tbl)&lt;br /&gt;
	renderTree(tbl)&lt;br /&gt;
	return tostring(tbl) .. tcats&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.teamBracket(frame)&lt;br /&gt;
	return p.main(frame)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Pokeylope</name></author>
	</entry>
	<entry>
		<id>https://glolfwiki.sibr.dev/index.php?title=Fourth_IGA_Open&amp;diff=238</id>
		<title>Fourth IGA Open</title>
		<link rel="alternate" type="text/html" href="https://glolfwiki.sibr.dev/index.php?title=Fourth_IGA_Open&amp;diff=238"/>
		<updated>2021-06-06T22:55:19Z</updated>

		<summary type="html">&lt;p&gt;Pokeylope: Add results&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Fourth IGA Open was held on June 6, 2021.&lt;br /&gt;
&lt;br /&gt;
==Contestants==&lt;br /&gt;
* Wyatts Mason&lt;br /&gt;
* Fallen Locomotive&lt;br /&gt;
* Brie Friendo&lt;br /&gt;
* Billexed Floating&lt;br /&gt;
* Lampy Bear&lt;br /&gt;
* Lilac Starpyne&lt;br /&gt;
* [[Melissa Bop]]&lt;br /&gt;
* [[Baby Bop]]&lt;br /&gt;
* Indefensible Hyrax&lt;br /&gt;
* Ampersand Resplendent&lt;br /&gt;
* Critney Fails&lt;br /&gt;
* Baba&lt;br /&gt;
* [[Legally Jorts]]&lt;br /&gt;
* KerBethany McElroy&lt;br /&gt;
* Fran Beans&lt;br /&gt;
* Bell Carajas&lt;br /&gt;
* Case Sports&lt;br /&gt;
* Ban Freans&lt;br /&gt;
* Axel Cardenas&lt;br /&gt;
* Some Loser&lt;br /&gt;
* My Homosexuality&lt;br /&gt;
* Gaming (concept)&lt;br /&gt;
* Trunks from DBZA&lt;br /&gt;
* Bad Glolfer&lt;br /&gt;
* naruto mullen peterson&lt;br /&gt;
* Penny&lt;br /&gt;
* Course Desirable&lt;br /&gt;
* Literally another brick&lt;br /&gt;
* cthUwU&lt;br /&gt;
* The Censor||The Censor&lt;br /&gt;
* QWERTY&lt;br /&gt;
* Equity Rising&lt;br /&gt;
* PAPYRUS UNDERTALE&lt;br /&gt;
* Tobias Bagpipe&lt;br /&gt;
* Caldera Clembons&lt;br /&gt;
* [[Line Cook]]&lt;br /&gt;
* Parker MacMillan II&lt;br /&gt;
* Jessica Faxmachine&lt;br /&gt;
* Smig the Unwise&lt;br /&gt;
* Linoleum Blownaparte&lt;br /&gt;
* Crocodile 'Spits Fire' Spitfire&lt;br /&gt;
* Garry Bones&lt;br /&gt;
* THE VOID&lt;br /&gt;
* Matt Wiisports&lt;br /&gt;
* Kouma Wlaffle&lt;br /&gt;
* You.&lt;br /&gt;
* Ashkelon&lt;br /&gt;
* Toot Blan XIX&lt;br /&gt;
* Sonic 2 With A Line&lt;br /&gt;
* Crustability Factor&lt;br /&gt;
* [[Simulacrum]]&lt;br /&gt;
* Althaea Officinalis&lt;br /&gt;
* [ERROR] Jr.&lt;br /&gt;
* Elizabeth Monarch&lt;br /&gt;
* QWERTZ.&lt;br /&gt;
* Toffy Bucket&lt;br /&gt;
* Toffy Bucket Jr.&lt;br /&gt;
* Toffy Bucket Jr. Jr.&lt;br /&gt;
* Sappho Herself&lt;br /&gt;
* And Knuckles&lt;br /&gt;
* Works Everytime&lt;br /&gt;
* Mersenne Twisted&lt;br /&gt;
* Lex Marionette&lt;br /&gt;
* Critter Swarm&lt;br /&gt;
* Really Cool Sword&lt;br /&gt;
* Clip Clipperson&lt;br /&gt;
* Wyatt Mason&lt;br /&gt;
&lt;br /&gt;
==Results==&lt;br /&gt;
{{#invoke:Team bracket|main&lt;br /&gt;
|rounds=7&lt;br /&gt;
|byes=1&lt;br /&gt;
|sets=2&lt;br /&gt;
|emoji=yes&lt;br /&gt;
|boldwinner=glolf&lt;br /&gt;
&lt;br /&gt;
|RD1-team123=My Homosexuality&lt;br /&gt;
|RD1-score123-1=3&lt;br /&gt;
|RD1-score123-2=21 &lt;br /&gt;
|RD1-team124=Fallen Locomotive&lt;br /&gt;
|RD1-score124-1=5&lt;br /&gt;
|RD1-score124-2=16 &lt;br /&gt;
|RD1-team125=Legally Jorts&lt;br /&gt;
|RD1-score125-1=2&lt;br /&gt;
|RD1-score125-2=13 &lt;br /&gt;
|RD1-team126=And Knuckles&lt;br /&gt;
|RD1-score126-1=0&lt;br /&gt;
|RD1-score126-2=11 &lt;br /&gt;
|RD1-team127=Critney Fails&lt;br /&gt;
|RD1-score127-1=2&lt;br /&gt;
|RD1-score127-2=9 &lt;br /&gt;
|RD1-team128=Baby Bop&lt;br /&gt;
|RD1-score128-1=4&lt;br /&gt;
|RD1-score128-2=14 &lt;br /&gt;
&lt;br /&gt;
|RD2-team1=Ban Freans&lt;br /&gt;
|RD2-score1-1=4&lt;br /&gt;
|RD2-score1-2=14 &lt;br /&gt;
|RD2-team2=Lampy Bear&lt;br /&gt;
|RD2-score2-1=2&lt;br /&gt;
|RD2-score2-2=13 &lt;br /&gt;
|RD2-team3=Works Everytime&lt;br /&gt;
|RD2-score3-1=1&lt;br /&gt;
|RD2-score3-2=12 &lt;br /&gt;
|RD2-team4=Jessica Faxmachine&lt;br /&gt;
|RD2-score4-1=0&lt;br /&gt;
|RD2-score4-2=4 &lt;br /&gt;
|RD2-team5=PAPYRUS UNDERTALE&lt;br /&gt;
|RD2-score5-1=1&lt;br /&gt;
|RD2-score5-2=6 &lt;br /&gt;
|RD2-team6=Clip Clipperson&lt;br /&gt;
|RD2-score6-1=0&lt;br /&gt;
|RD2-score6-2=6 &lt;br /&gt;
|RD2-team7=Matt Wiisports&lt;br /&gt;
|RD2-score7-1=2&lt;br /&gt;
|RD2-score7-2=6 &lt;br /&gt;
|RD2-team8=Simulacrum&lt;br /&gt;
|RD2-score8-1=1&lt;br /&gt;
|RD2-score8-2=2 &lt;br /&gt;
|RD2-team9=Toot Blan XIX&lt;br /&gt;
|RD2-score9-1=2&lt;br /&gt;
|RD2-score9-2=13 &lt;br /&gt;
|RD2-team10=Fran Beans&lt;br /&gt;
|RD2-score10-1=0&lt;br /&gt;
|RD2-score10-2=8 &lt;br /&gt;
|RD2-team11=Elizabeth Monarch&lt;br /&gt;
|RD2-score11-1=1&lt;br /&gt;
|RD2-score11-2=11 &lt;br /&gt;
|RD2-team12=Indefensible Hyrax&lt;br /&gt;
|RD2-score12-1=3&lt;br /&gt;
|RD2-score12-2=12 &lt;br /&gt;
|RD2-team13=Literally another brick&lt;br /&gt;
|RD2-score13-1=2&lt;br /&gt;
|RD2-score13-2=14 &lt;br /&gt;
|RD2-team14=Althaea Officinalis&lt;br /&gt;
|RD2-score14-1=5&lt;br /&gt;
|RD2-score14-2=9 &lt;br /&gt;
|RD2-team15=Baba&lt;br /&gt;
|RD2-score15-1=0&lt;br /&gt;
|RD2-score15-2=5 &lt;br /&gt;
|RD2-team16=Equity Rising&lt;br /&gt;
|RD2-score16-1=0&lt;br /&gt;
|RD2-score16-2=13 &lt;br /&gt;
|RD2-team17=Trunks from DBZA&lt;br /&gt;
|RD2-score17-1=0&lt;br /&gt;
|RD2-score17-2=4 &lt;br /&gt;
|RD2-team18=Crustability Factor&lt;br /&gt;
|RD2-score18-1=1&lt;br /&gt;
|RD2-score18-2=8 &lt;br /&gt;
|RD2-team19=Linoleum Blownaparte&lt;br /&gt;
|RD2-score19-1=0&lt;br /&gt;
|RD2-score19-2=8 &lt;br /&gt;
|RD2-team20=Melissa Bop&lt;br /&gt;
|RD2-score20-1=1&lt;br /&gt;
|RD2-score20-2=3 &lt;br /&gt;
|RD2-team21=Penny&lt;br /&gt;
|RD2-score21-1=1&lt;br /&gt;
|RD2-score21-2=10 &lt;br /&gt;
|RD2-team22=You.&lt;br /&gt;
|RD2-score22-1=2&lt;br /&gt;
|RD2-score22-2=18 &lt;br /&gt;
|RD2-team23=Some Loser&lt;br /&gt;
|RD2-score23-1=3&lt;br /&gt;
|RD2-score23-2=10 &lt;br /&gt;
|RD2-team24=[ERROR] Jr.&lt;br /&gt;
|RD2-score24-1=3&lt;br /&gt;
|RD2-score24-2=15 &lt;br /&gt;
|RD2-team25=Tobias Bagpipe&lt;br /&gt;
|RD2-score25-1=2&lt;br /&gt;
|RD2-score25-2=11 &lt;br /&gt;
|RD2-team26=The Censor{{!!}}The Censor&lt;br /&gt;
|RD2-score26-1=2&lt;br /&gt;
|RD2-score26-2=11 &lt;br /&gt;
|RD2-team27=THE VOID&lt;br /&gt;
|RD2-score27-1=2&lt;br /&gt;
|RD2-score27-2=10 &lt;br /&gt;
|RD2-team28=Really Cool Sword&lt;br /&gt;
|RD2-score28-1=2&lt;br /&gt;
|RD2-score28-2=9 &lt;br /&gt;
|RD2-team29=Lex Marionette&lt;br /&gt;
|RD2-score29-1=3&lt;br /&gt;
|RD2-score29-2=6 &lt;br /&gt;
|RD2-team30=Axel Cardenas&lt;br /&gt;
|RD2-score30-1=0&lt;br /&gt;
|RD2-score30-2=5 &lt;br /&gt;
|RD2-team31=Wyatt Mason&lt;br /&gt;
|RD2-score31-1=5&lt;br /&gt;
|RD2-score31-2=14 &lt;br /&gt;
|RD2-team32=Billexed Floating&lt;br /&gt;
|RD2-score32-1=2&lt;br /&gt;
|RD2-score32-2=8 &lt;br /&gt;
|RD2-team33=Lilac Starpyne&lt;br /&gt;
|RD2-score33-1=2&lt;br /&gt;
|RD2-score33-2=5 &lt;br /&gt;
|RD2-team34=cthUwU&lt;br /&gt;
|RD2-score34-1=1&lt;br /&gt;
|RD2-score34-2=12 &lt;br /&gt;
|RD2-team35=QWERTY&lt;br /&gt;
|RD2-score35-1=1&lt;br /&gt;
|RD2-score35-2=7 &lt;br /&gt;
|RD2-team36=Critter Swarm&lt;br /&gt;
|RD2-score36-1=0&lt;br /&gt;
|RD2-score36-2=7 &lt;br /&gt;
|RD2-team37=Crocodile 'Spits Fire' Spitfire&lt;br /&gt;
|RD2-score37-1=2&lt;br /&gt;
|RD2-score37-2=11 &lt;br /&gt;
|RD2-team38=Toffy Bucket Jr.&lt;br /&gt;
|RD2-score38-1=1&lt;br /&gt;
|RD2-score38-2=8 &lt;br /&gt;
|RD2-team39=Case Sports&lt;br /&gt;
|RD2-score39-1=1&lt;br /&gt;
|RD2-score39-2=8 &lt;br /&gt;
|RD2-team40=Bell Carajas&lt;br /&gt;
|RD2-score40-1=4&lt;br /&gt;
|RD2-score40-2=13 &lt;br /&gt;
|RD2-team41=Line Cook&lt;br /&gt;
|RD2-score41-1=0&lt;br /&gt;
|RD2-score41-2=4 &lt;br /&gt;
|RD2-team42=Brie Friendo&lt;br /&gt;
|RD2-score42-1=0&lt;br /&gt;
|RD2-score42-2=7 &lt;br /&gt;
|RD2-team43=Sappho Herself&lt;br /&gt;
|RD2-score43-1=1&lt;br /&gt;
|RD2-score43-2=4 &lt;br /&gt;
|RD2-team44=Wyatts Mason&lt;br /&gt;
|RD2-score44-1=2&lt;br /&gt;
|RD2-score44-2=2 &lt;br /&gt;
|RD2-team45=Garry Bones&lt;br /&gt;
|RD2-score45-1=2&lt;br /&gt;
|RD2-score45-2=11 &lt;br /&gt;
|RD2-team46=Toffy Bucket Jr. Jr.&lt;br /&gt;
|RD2-score46-1=0&lt;br /&gt;
|RD2-score46-2=5 &lt;br /&gt;
|RD2-team47=Kouma Wlaffle&lt;br /&gt;
|RD2-score47-1=1&lt;br /&gt;
|RD2-score47-2=9 &lt;br /&gt;
|RD2-team48=Course Desirable&lt;br /&gt;
|RD2-score48-1=2&lt;br /&gt;
|RD2-score48-2=11 &lt;br /&gt;
|RD2-team49=Smig the Unwise&lt;br /&gt;
|RD2-score49-1=1&lt;br /&gt;
|RD2-score49-2=12 &lt;br /&gt;
|RD2-team50=Toffy Bucket&lt;br /&gt;
|RD2-score50-1=3&lt;br /&gt;
|RD2-score50-2=10 &lt;br /&gt;
|RD2-team51=Ampersand Resplendent&lt;br /&gt;
|RD2-score51-1=2&lt;br /&gt;
|RD2-score51-2=16 &lt;br /&gt;
|RD2-team52=Sonic 2 With A Line&lt;br /&gt;
|RD2-score52-1=2&lt;br /&gt;
|RD2-score52-2=15 &lt;br /&gt;
|RD2-team53=Mersenne Twisted&lt;br /&gt;
|RD2-score53-1=0&lt;br /&gt;
|RD2-score53-2=5 &lt;br /&gt;
|RD2-team54=KerBethany McElroy&lt;br /&gt;
|RD2-score54-1=2&lt;br /&gt;
|RD2-score54-2=7 &lt;br /&gt;
|RD2-team55=Parker MacMillan II&lt;br /&gt;
|RD2-score55-1=3&lt;br /&gt;
|RD2-score55-2=8 &lt;br /&gt;
|RD2-team56=naruto mullen peterson&lt;br /&gt;
|RD2-score56-1=0&lt;br /&gt;
|RD2-score56-2=9 &lt;br /&gt;
|RD2-team57=Ashkelon&lt;br /&gt;
|RD2-score57-1=0&lt;br /&gt;
|RD2-score57-2=11 &lt;br /&gt;
|RD2-team58=Bad Glolfer&lt;br /&gt;
|RD2-score58-1=2&lt;br /&gt;
|RD2-score58-2=10 &lt;br /&gt;
|RD2-team59=QWERTZ.&lt;br /&gt;
|RD2-score59-1=1&lt;br /&gt;
|RD2-score59-2=3 &lt;br /&gt;
|RD2-team60=Gaming (concept)&lt;br /&gt;
|RD2-score60-1=0&lt;br /&gt;
|RD2-score60-2=5 &lt;br /&gt;
|RD2-team61=Caldera Clembons&lt;br /&gt;
|RD2-score61-1=0&lt;br /&gt;
|RD2-score61-2=6 &lt;br /&gt;
|RD2-team62=Fallen Locomotive&lt;br /&gt;
|RD2-score62-1=1&lt;br /&gt;
|RD2-score62-2=8 &lt;br /&gt;
|RD2-team63=Legally Jorts&lt;br /&gt;
|RD2-score63-1=1&lt;br /&gt;
|RD2-score63-2=7 &lt;br /&gt;
|RD2-team64=Baby Bop&lt;br /&gt;
|RD2-score64-1=2&lt;br /&gt;
|RD2-score64-2=13 &lt;br /&gt;
&lt;br /&gt;
|RD3-team1=Ban Freans&lt;br /&gt;
|RD3-score1-1=0&lt;br /&gt;
|RD3-score1-2=7 &lt;br /&gt;
|RD3-team2=Works Everytime&lt;br /&gt;
|RD3-score2-1=0&lt;br /&gt;
|RD3-score2-2=11 &lt;br /&gt;
|RD3-team3=PAPYRUS UNDERTALE&lt;br /&gt;
|RD3-score3-1=2&lt;br /&gt;
|RD3-score3-2=12 &lt;br /&gt;
|RD3-team4=Matt Wiisports&lt;br /&gt;
|RD3-score4-1=2&lt;br /&gt;
|RD3-score4-2=11 &lt;br /&gt;
|RD3-team5=Toot Blan XIX&lt;br /&gt;
|RD3-score5-1=2&lt;br /&gt;
|RD3-score5-2=3 &lt;br /&gt;
|RD3-team6=Indefensible Hyrax&lt;br /&gt;
|RD3-score6-1=1&lt;br /&gt;
|RD3-score6-2=7 &lt;br /&gt;
|RD3-team7=Althaea Officinalis&lt;br /&gt;
|RD3-score7-1=0&lt;br /&gt;
|RD3-score7-2=4 &lt;br /&gt;
|RD3-team8=Baba&lt;br /&gt;
|RD3-score8-1=0&lt;br /&gt;
|RD3-score8-2=12 &lt;br /&gt;
|RD3-team9=Crustability Factor&lt;br /&gt;
|RD3-score9-1=0&lt;br /&gt;
|RD3-score9-2=5 &lt;br /&gt;
|RD3-team10=Melissa Bop&lt;br /&gt;
|RD3-score10-1=2&lt;br /&gt;
|RD3-score10-2=3 &lt;br /&gt;
|RD3-team11=You.&lt;br /&gt;
|RD3-score11-1=3&lt;br /&gt;
|RD3-score11-2=14 &lt;br /&gt;
|RD3-team12=Some Loser&lt;br /&gt;
|RD3-score12-1=1&lt;br /&gt;
|RD3-score12-2=9 &lt;br /&gt;
|RD3-team13=Tobias Bagpipe&lt;br /&gt;
|RD3-score13-1=4&lt;br /&gt;
|RD3-score13-2=17 &lt;br /&gt;
|RD3-team14=Really Cool Sword&lt;br /&gt;
|RD3-score14-1=0&lt;br /&gt;
|RD3-score14-2=8 &lt;br /&gt;
|RD3-team15=Lex Marionette&lt;br /&gt;
|RD3-score15-1=1&lt;br /&gt;
|RD3-score15-2=9 &lt;br /&gt;
|RD3-team16=Wyatt Mason&lt;br /&gt;
|RD3-score16-1=1&lt;br /&gt;
|RD3-score16-2=3 &lt;br /&gt;
|RD3-team17=Lilac Starpyne&lt;br /&gt;
|RD3-score17-1=1&lt;br /&gt;
|RD3-score17-2=6 &lt;br /&gt;
|RD3-team18=QWERTY&lt;br /&gt;
|RD3-score18-1=0&lt;br /&gt;
|RD3-score18-2=5 &lt;br /&gt;
|RD3-team19=Crocodile 'Spits Fire' Spitfire&lt;br /&gt;
|RD3-score19-1=4&lt;br /&gt;
|RD3-score19-2=17 &lt;br /&gt;
|RD3-team20=Bell Carajas&lt;br /&gt;
|RD3-score20-1=2&lt;br /&gt;
|RD3-score20-2=13 &lt;br /&gt;
|RD3-team21=Line Cook&lt;br /&gt;
|RD3-score21-1=3&lt;br /&gt;
|RD3-score21-2=8 &lt;br /&gt;
|RD3-team22=Wyatts Mason&lt;br /&gt;
|RD3-score22-1=2&lt;br /&gt;
|RD3-score22-2=11 &lt;br /&gt;
|RD3-team23=Garry Bones&lt;br /&gt;
|RD3-score23-1=0&lt;br /&gt;
|RD3-score23-2=4 &lt;br /&gt;
|RD3-team24=Course Desirable&lt;br /&gt;
|RD3-score24-1=2&lt;br /&gt;
|RD3-score24-2=7 &lt;br /&gt;
|RD3-team25=Toffy Bucket&lt;br /&gt;
|RD3-score25-1=1&lt;br /&gt;
|RD3-score25-2=9 &lt;br /&gt;
|RD3-team26=Sonic 2 With A Line&lt;br /&gt;
|RD3-score26-1=4&lt;br /&gt;
|RD3-score26-2=10 &lt;br /&gt;
|RD3-team27=KerBethany McElroy&lt;br /&gt;
|RD3-score27-1=3&lt;br /&gt;
|RD3-score27-2=12 &lt;br /&gt;
|RD3-team28=Parker MacMillan II&lt;br /&gt;
|RD3-score28-1=2&lt;br /&gt;
|RD3-score28-2=13 &lt;br /&gt;
|RD3-team29=Bad Glolfer&lt;br /&gt;
|RD3-score29-1=2&lt;br /&gt;
|RD3-score29-2=8 &lt;br /&gt;
|RD3-team30=QWERTZ.&lt;br /&gt;
|RD3-score30-1=4&lt;br /&gt;
|RD3-score30-2=13 &lt;br /&gt;
|RD3-team31=Fallen Locomotive&lt;br /&gt;
|RD3-score31-1=3&lt;br /&gt;
|RD3-score31-2=14 &lt;br /&gt;
|RD3-team32=Baby Bop&lt;br /&gt;
|RD3-score32-1=1&lt;br /&gt;
|RD3-score32-2=2 &lt;br /&gt;
&lt;br /&gt;
|RD4-team1=Ban Freans &lt;br /&gt;
|RD4-score1-1=2&lt;br /&gt;
|RD4-score1-2=11 &lt;br /&gt;
|RD4-team2=Matt Wiisports &lt;br /&gt;
|RD4-score2-1=3&lt;br /&gt;
|RD4-score2-2=12 &lt;br /&gt;
|RD4-team3=Toot Blan XIX &lt;br /&gt;
|RD4-score3-1=3&lt;br /&gt;
|RD4-score3-2=16 &lt;br /&gt;
|RD4-team4=Althaea Officinalis &lt;br /&gt;
|RD4-score4-1=0&lt;br /&gt;
|RD4-score4-2=5 &lt;br /&gt;
|RD4-team5=Melissa Bop &lt;br /&gt;
|RD4-score5-1=1&lt;br /&gt;
|RD4-score5-2=8 &lt;br /&gt;
|RD4-team6=You. &lt;br /&gt;
|RD4-score6-1=3&lt;br /&gt;
|RD4-score6-2=12 &lt;br /&gt;
|RD4-team7=Tobias Bagpipe &lt;br /&gt;
|RD4-score7-1=0&lt;br /&gt;
|RD4-score7-2=13 &lt;br /&gt;
|RD4-team8=Wyatt Mason &lt;br /&gt;
|RD4-score8-1=0&lt;br /&gt;
|RD4-score8-2=7 &lt;br /&gt;
|RD4-team9=Lilac Starpyne &lt;br /&gt;
|RD4-score9-1=4&lt;br /&gt;
|RD4-score9-2=17 &lt;br /&gt;
|RD4-team10=Crocodile 'Spits Fire' Spitfire &lt;br /&gt;
|RD4-score10-1=5&lt;br /&gt;
|RD4-score10-2=12 &lt;br /&gt;
|RD4-team11=Line Cook &lt;br /&gt;
|RD4-score11-1=2&lt;br /&gt;
|RD4-score11-2=11 &lt;br /&gt;
|RD4-team12=Course Desirable &lt;br /&gt;
|RD4-score12-1=0&lt;br /&gt;
|RD4-score12-2=12 &lt;br /&gt;
|RD4-team13=Sonic 2 With A Line &lt;br /&gt;
|RD4-score13-1=1&lt;br /&gt;
|RD4-score13-2=8 &lt;br /&gt;
|RD4-team14=KerBethany McElroy &lt;br /&gt;
|RD4-score14-1=1&lt;br /&gt;
|RD4-score14-2=12 &lt;br /&gt;
|RD4-team15=QWERTZ. &lt;br /&gt;
|RD4-score15-1=1&lt;br /&gt;
|RD4-score15-2=12 &lt;br /&gt;
|RD4-team16=Fallen Locomotive &lt;br /&gt;
|RD4-score16-1=0&lt;br /&gt;
|RD4-score16-2=4 &lt;br /&gt;
&lt;br /&gt;
|RD5=Nearfinals&lt;br /&gt;
|RD5-team1=Matt Wiisports&lt;br /&gt;
|RD5-score1-1=4&lt;br /&gt;
|RD5-score1-2=20&lt;br /&gt;
|RD5-team2=Toot Blan XIX&lt;br /&gt;
|RD5-score2-1=0&lt;br /&gt;
|RD5-score2-2=23&lt;br /&gt;
|RD5-team3=You.&lt;br /&gt;
|RD5-score3-1=3&lt;br /&gt;
|RD5-score3-2=9&lt;br /&gt;
|RD5-team4=Wyatt Mason&lt;br /&gt;
|RD5-score4-1=0&lt;br /&gt;
|RD5-score4-2=5&lt;br /&gt;
|RD5-team5=Crocodile 'Spits Fire' Spitfire&lt;br /&gt;
|RD5-score5-1=4&lt;br /&gt;
|RD5-score5-2=13&lt;br /&gt;
|RD5-team6=Line Cook&lt;br /&gt;
|RD5-score6-1=5&lt;br /&gt;
|RD5-score6-2=14&lt;br /&gt;
|RD5-team7=Sonic 2 With A Line&lt;br /&gt;
|RD5-score7-1=3&lt;br /&gt;
|RD5-score7-2=17&lt;br /&gt;
|RD5-team8=QWERTZ.&lt;br /&gt;
|RD5-score8-1=6&lt;br /&gt;
|RD5-score8-2=16&lt;br /&gt;
&lt;br /&gt;
|RD6=Almostfinals&lt;br /&gt;
|RD6-team1=Matt Wiisports&lt;br /&gt;
|RD6-score1-1=0&lt;br /&gt;
|RD6-score1-2=16&lt;br /&gt;
|RD6-team2=You.&lt;br /&gt;
|RD6-score2-1=1&lt;br /&gt;
|RD6-score2-2=10&lt;br /&gt;
|RD6-team3=Line Cook&lt;br /&gt;
|RD6-score3-1=3&lt;br /&gt;
|RD6-score3-2=17&lt;br /&gt;
|RD6-team4=QWERTZ.&lt;br /&gt;
|RD6-score4-1=3&lt;br /&gt;
|RD6-score4-2=18&lt;br /&gt;
&lt;br /&gt;
|RD7-team1=You.&lt;br /&gt;
|RD7-score1-1=5&lt;br /&gt;
|RD7-score1-2=22&lt;br /&gt;
|RD7-team2=Line Cook&lt;br /&gt;
|RD7-score2-1=6&lt;br /&gt;
|RD7-score2-2=22&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Pokeylope</name></author>
	</entry>
	<entry>
		<id>https://glolfwiki.sibr.dev/index.php?title=Template:!!&amp;diff=237</id>
		<title>Template:!!</title>
		<link rel="alternate" type="text/html" href="https://glolfwiki.sibr.dev/index.php?title=Template:!!&amp;diff=237"/>
		<updated>2021-06-06T22:52:47Z</updated>

		<summary type="html">&lt;p&gt;Pokeylope: Created page with &amp;quot;||&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;||&lt;/div&gt;</summary>
		<author><name>Pokeylope</name></author>
	</entry>
	<entry>
		<id>https://glolfwiki.sibr.dev/index.php?title=Module:Team_bracket&amp;diff=236</id>
		<title>Module:Team bracket</title>
		<link rel="alternate" type="text/html" href="https://glolfwiki.sibr.dev/index.php?title=Module:Team_bracket&amp;diff=236"/>
		<updated>2021-06-06T22:49:48Z</updated>

		<summary type="html">&lt;p&gt;Pokeylope: Fix glolf scoring&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- https://en.wikipedia.org/wiki/Module:Team_bracket&lt;br /&gt;
--&lt;br /&gt;
-- This module implements many bracket templates&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
local args = {}&lt;br /&gt;
local rows = {}&lt;br /&gt;
local mask = {}&lt;br /&gt;
local rounds&lt;br /&gt;
local maxround&lt;br /&gt;
local legs = {}&lt;br /&gt;
local compact&lt;br /&gt;
local byes&lt;br /&gt;
local hideSeeds&lt;br /&gt;
local showSeeds&lt;br /&gt;
local hideHeadings&lt;br /&gt;
local showThird&lt;br /&gt;
local offsetThird&lt;br /&gt;
local compactFinal&lt;br /&gt;
local sepwidth&lt;br /&gt;
local aggsep&lt;br /&gt;
local aggregate&lt;br /&gt;
local boldwinner&lt;br /&gt;
local hideomittedscores&lt;br /&gt;
local RD1seedmap = {}&lt;br /&gt;
local tcats = ''&lt;br /&gt;
local emoji&lt;br /&gt;
&lt;br /&gt;
local function isnotblank(s)&lt;br /&gt;
	return s and s ~= ''&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function isblank(s)&lt;br /&gt;
	return (not s) or (s == '')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function sumScores(s1, s2)&lt;br /&gt;
	s1 = mw.ustring.gsub(s1 or '', '^[\'%s]*([%d%.]*).-$', '%1')&lt;br /&gt;
	s2 = mw.ustring.gsub(s2 or '', '^[\'%s]*([%d%.]*).-$', '%1')&lt;br /&gt;
	if s1 ~= '' and s2 ~= '' then&lt;br /&gt;
		return tonumber(s1) + tonumber(s2)&lt;br /&gt;
	end&lt;br /&gt;
	return s1&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function scoreCompare(s1,s2,highwin)&lt;br /&gt;
	local ps1 = mw.ustring.gsub(s1 or '', '^[\'%s]*([%d%.]*)[\'%s]*%([\'%s]*([%d%.]*)[\'%s]*%).-$', '%2')&lt;br /&gt;
	local ps2 = mw.ustring.gsub(s2 or '', '^[\'%s]*([%d%.]*)[\'%s]*%([\'%s]*([%d%.]*)[\'%s]*%).-$', '%2')&lt;br /&gt;
	s1 = mw.ustring.gsub(s1 or '', '^[\'%s]*([%d%.]*).-$', '%1')&lt;br /&gt;
	s2 = mw.ustring.gsub(s2 or '', '^[\'%s]*([%d%.]*).-$', '%1')&lt;br /&gt;
	&lt;br /&gt;
	if s1 ~= '' and s2 ~= '' then&lt;br /&gt;
		s1 = tonumber(s1)&lt;br /&gt;
		s2 = tonumber(s2)&lt;br /&gt;
		if s1 and s2 then&lt;br /&gt;
			if (s1 == s2) then&lt;br /&gt;
				ps1 = tonumber(ps1)&lt;br /&gt;
				ps2 = tonumber(ps2)&lt;br /&gt;
				if ps1 and ps2 then&lt;br /&gt;
					s1 = ps1&lt;br /&gt;
					s2 = ps2&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if highwin then&lt;br /&gt;
				return ((s1 &amp;gt; s2) and 1) or ((s1 &amp;lt; s2) and 2) or 0&lt;br /&gt;
			else&lt;br /&gt;
				return ((s2 &amp;gt; s1) and 1) or ((s2 &amp;lt; s1) and 2) or 0&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function parseArgs(frame)&lt;br /&gt;
	local fargs = frame.args&lt;br /&gt;
	local pargs = frame:getParent().args;&lt;br /&gt;
&lt;br /&gt;
	local r = tonumber(fargs.rounds or '') or tonumber(pargs.rounds or '') or 2&lt;br /&gt;
	local teams = math.pow(2, r)&lt;br /&gt;
	local rdstr = 'RD' .. tostring(r)&lt;br /&gt;
	local rdbstr = 'RD' .. tostring(r) .. 'b'&lt;br /&gt;
	local rdp1str = 'RD' .. tostring(r+1)&lt;br /&gt;
&lt;br /&gt;
	for i=1,2 do&lt;br /&gt;
		local targs = (i == 1) and pargs or fargs&lt;br /&gt;
		for k,v in pairs(targs) do&lt;br /&gt;
			if type(k) == 'string' then&lt;br /&gt;
				if k:find('^[R3][Dr][d1-9]b?%-[a-z][a-z]*00*') then&lt;br /&gt;
					k = mw.ustring.gsub(k, '^([R3][Dr][d1-9]b?%-[a-z][a-z]*)00*', '%1')&lt;br /&gt;
					if (teams &amp;lt; 10) then &lt;br /&gt;
						tcats = tcats .. '[[Category:Pages using a team bracket with deprecated syntax|P]]'&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				if k:find('^' .. rdp1str) then&lt;br /&gt;
					k = mw.ustring.gsub(k, '^' .. rdp1str, '3rd')&lt;br /&gt;
					tcats = tcats .. '[[Category:Pages using a team bracket with deprecated syntax|3]]'&lt;br /&gt;
				elseif k:find('^' .. rdbstr) then&lt;br /&gt;
					k = mw.ustring.gsub(k, '^' .. rdbstr, '3rd')&lt;br /&gt;
				elseif k:find('^' .. rdstr .. '%-[a-z][a-z]*3') then&lt;br /&gt;
					k = mw.ustring.gsub(k, '^' .. rdstr .. '(%-[a-z][a-z]*)3', '3rd%11')&lt;br /&gt;
				elseif k:find('^' .. rdstr .. '%-[a-z][a-z]*4') then&lt;br /&gt;
					k = mw.ustring.gsub(k, '^' .. rdstr .. '(%-[a-z][a-z]*)4', '3rd%12')&lt;br /&gt;
				elseif  k:find('^Consol') then&lt;br /&gt;
					k = mw.ustring.gsub(k, '^Consol', '3rd')&lt;br /&gt;
					tcats = tcats .. '[[Category:Pages using a team bracket with deprecated syntax|3]]'&lt;br /&gt;
				elseif k:find('^group[0-9]') then&lt;br /&gt;
					tcats = tcats .. '[[Category:Pages using a team bracket with deprecated syntax|G]]'&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			args[k] = v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if (args['byes'] and (args['byes'] == 'yes' or args['byes'] == 'y')) then&lt;br /&gt;
		tcats = tcats .. '[[Category:Pages using a team bracket with deprecated syntax|B]]'&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function parseSeedmap(s)&lt;br /&gt;
	s = mw.text.split((s or '0') .. '/', '[%s]*/[%s]*')&lt;br /&gt;
	local teams = math.pow(2, rounds)&lt;br /&gt;
	for r=1,teams do&lt;br /&gt;
		RD1seedmap[r] = 1&lt;br /&gt;
	end&lt;br /&gt;
	for r=1,#s do&lt;br /&gt;
		if tonumber(s[r] or 'x') then&lt;br /&gt;
			RD1seedmap[tonumber(s[r])] = 0&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local c = 1&lt;br /&gt;
	for r=1,teams do&lt;br /&gt;
		if RD1seedmap[r] &amp;gt; 0 then&lt;br /&gt;
			RD1seedmap[r] = c&lt;br /&gt;
			c = c + 1&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function parseLegs(s)&lt;br /&gt;
	s = mw.text.split((s or '1') .. '/', '[%s]*/[%s]*')&lt;br /&gt;
	if aggregate == 'n' or aggregate == 'no' or aggregate == '0' then&lt;br /&gt;
		aggregate = ''&lt;br /&gt;
	end&lt;br /&gt;
	local n = showThird and (rounds + 1) or (rounds)&lt;br /&gt;
	local lastlegs = nil&lt;br /&gt;
	for r=1,n do&lt;br /&gt;
		if s[r] ~= nil and s[r] ~= '' and tonumber(s[r]) then&lt;br /&gt;
			legs[r] = tonumber(s[r])&lt;br /&gt;
		elseif lastlegs then&lt;br /&gt;
			legs[r] = lastlegs&lt;br /&gt;
		else&lt;br /&gt;
			legs[r] = 1&lt;br /&gt;
		end&lt;br /&gt;
		lastlegs = legs[r]&lt;br /&gt;
		if legs[r] &amp;gt; 1 and aggregate ~= '' then&lt;br /&gt;
			legs[r] = legs[r] + 1&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getSeeds()&lt;br /&gt;
	local seeds = {1, 2}&lt;br /&gt;
	local count = 2&lt;br /&gt;
	local before = false&lt;br /&gt;
	for r = 2, rounds do&lt;br /&gt;
		local max = math.pow(2, r)&lt;br /&gt;
		for i = 1, count do&lt;br /&gt;
			local pos = i * 2&lt;br /&gt;
			if before then pos = pos - 1 end&lt;br /&gt;
			table.insert(seeds, pos, max - seeds[i * 2 - 1] + 1)&lt;br /&gt;
			before = not before&lt;br /&gt;
		end&lt;br /&gt;
		count = count * 2&lt;br /&gt;
	end&lt;br /&gt;
	return seeds&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function addTableRow(tbl)&lt;br /&gt;
	return tbl:tag('tr')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function addBlank(i, css, rowspan, colspan)&lt;br /&gt;
	local row = rows[i]&lt;br /&gt;
	rowspan = rowspan or 1&lt;br /&gt;
	local jmax = i + rowspan - 1&lt;br /&gt;
	for j = i, jmax do&lt;br /&gt;
		if rows[j] == nil then&lt;br /&gt;
			rowspan = rowspan - 1&lt;br /&gt;
		elseif row == nil then&lt;br /&gt;
			row = rows[j]&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local cell = row and row:tag('td') or mw.html.create('td')&lt;br /&gt;
	if rowspan and rowspan &amp;gt; 1 then&lt;br /&gt;
		cell:attr('rowspan', rowspan)&lt;br /&gt;
	end&lt;br /&gt;
	if colspan and colspan &amp;gt; 1 then&lt;br /&gt;
		cell:attr('colspan', colspan)&lt;br /&gt;
	end&lt;br /&gt;
	if css then&lt;br /&gt;
		cell:css(css)&lt;br /&gt;
	end&lt;br /&gt;
	return cell&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function addBorders(cell, topcell, seedorteam, extrasep)&lt;br /&gt;
	if sepwidth &amp;gt; 1 then topcell = true end&lt;br /&gt;
	if seedorteam then&lt;br /&gt;
		cell:css('border', '1px solid #aaa')&lt;br /&gt;
			:css('border-top-width', topcell and '1px' or '0')&lt;br /&gt;
	else&lt;br /&gt;
		cell:css('border-color', '#aaa')&lt;br /&gt;
			:css('border-style', 'solid')&lt;br /&gt;
			:css('border-top-width', topcell and '1px' or '0')&lt;br /&gt;
			:css('border-left-width', (extrasep and '1px') or ((sepwidth &amp;gt; 1) and '1px') or '0')&lt;br /&gt;
			:css('border-right-width', '1px')&lt;br /&gt;
			:css('border-bottom-width', '1px')&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function addHeading(row, r, text, pad)&lt;br /&gt;
	pad = (pad == nil or pad &amp;lt; 0) and 0 or pad&lt;br /&gt;
	row:tag('td')&lt;br /&gt;
		:attr('colspan', tonumber(hideSeeds and '1' or '2') + legs[r] + pad)&lt;br /&gt;
		:css('text-align', 'center')&lt;br /&gt;
		:css('border', '1px solid #aaa')&lt;br /&gt;
		:css('background-color', args['RD-shade'] or '#f2f2f2')&lt;br /&gt;
		:wikitext(text)&lt;br /&gt;
		:newline()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getWidth(param, default)&lt;br /&gt;
	local arg = args[param .. '-width']&lt;br /&gt;
	if isblank(arg) then&lt;br /&gt;
		arg = default&lt;br /&gt;
	end&lt;br /&gt;
	if tonumber(arg) ~= nil then&lt;br /&gt;
		arg = arg .. 'px'&lt;br /&gt;
	end&lt;br /&gt;
	return arg&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getTeamArgName(round, type, team)&lt;br /&gt;
	if round &amp;gt; rounds then&lt;br /&gt;
		return string.format('3rd-%s%d', type, team)&lt;br /&gt;
	else&lt;br /&gt;
		if (round == 1) then&lt;br /&gt;
			team = RD1seedmap[team]&lt;br /&gt;
			if team == 0 then&lt;br /&gt;
				return 'NIL'&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return string.format('RD%d-%s%d', round, type, team)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getShadeArg(round, team, s)&lt;br /&gt;
	local argname = getTeamArgName(round, 'shade', team) .. (s and ('-' .. s) or '')&lt;br /&gt;
	local value = args[argname]&lt;br /&gt;
	if isblank(value) then&lt;br /&gt;
		return '#f9f9f9'&lt;br /&gt;
	end&lt;br /&gt;
	return value&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getScoreArg(round, team, s)&lt;br /&gt;
	local argname = getTeamArgName(round, 'score', team) .. (s and ('-' .. s) or '')&lt;br /&gt;
	local value = args[argname]&lt;br /&gt;
	return value&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getTeamArg(round, type, team)&lt;br /&gt;
	local argname = getTeamArgName(round, type, team)&lt;br /&gt;
	local value = args[argname]&lt;br /&gt;
	if isblank(value) then&lt;br /&gt;
		return ''&lt;br /&gt;
	end&lt;br /&gt;
	if mw.ustring.find(value, '[%s]*&amp;lt;[%s/]*[Bb][Rr][%s/]*&amp;gt;[%s ]*&amp;amp;[Nn][Bb][Ss][Pp];[%s]*') then&lt;br /&gt;
		tcats = tcats .. '[[Category:Pages using a team bracket with nbsp]]'&lt;br /&gt;
	end&lt;br /&gt;
	return mw.ustring.gsub(value, '[%s]*&amp;lt;[%s/]*[Bb][Rr][%s/]*&amp;gt;[%s ]*&amp;amp;[Nn][Bb][Ss][Pp];[%s]*', '&amp;lt;br/&amp;gt;')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function isHidden(r, team)&lt;br /&gt;
	return isblank( getTeamArg(r, 'team', team) )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getRoundName(round)&lt;br /&gt;
	local name = args['RD' .. round]&lt;br /&gt;
	if isnotblank(name) then&lt;br /&gt;
		return name&lt;br /&gt;
	end&lt;br /&gt;
	local roundFromLast = rounds - round + 1&lt;br /&gt;
	if roundFromLast == 1 then&lt;br /&gt;
		return &amp;quot;Finals&amp;quot;&lt;br /&gt;
	elseif roundFromLast == 2 then&lt;br /&gt;
		return &amp;quot;Semifinals&amp;quot;&lt;br /&gt;
	elseif roundFromLast == 3 then&lt;br /&gt;
		return &amp;quot;Quarterfinals&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;quot;Round of &amp;quot; .. math.pow(2, roundFromLast)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function addPath(index, round, top, left, w)&lt;br /&gt;
	local prop = top and 'border-bottom-width' or 'border-top-width'&lt;br /&gt;
	if left and round == 1 then&lt;br /&gt;
		if compact then&lt;br /&gt;
			addBlank(index)&lt;br /&gt;
		else&lt;br /&gt;
			addBlank(index, {['height'] = '7px'})&lt;br /&gt;
			addBlank(index+1, {['height'] = '7px'})&lt;br /&gt;
		end&lt;br /&gt;
		return nil&lt;br /&gt;
	else&lt;br /&gt;
		local cell = addBlank(index, &lt;br /&gt;
			{['border-width'] = '0',&lt;br /&gt;
			['border-style'] = 'solid',&lt;br /&gt;
			['border-color'] = 'black'}, (not compact) and 2 or 1)&lt;br /&gt;
		if left or round &amp;lt; maxround and not left then&lt;br /&gt;
			cell:css(prop, w or '2px')&lt;br /&gt;
		end&lt;br /&gt;
		return cell&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderTeam(row, round, team, top, otherbye, pad)&lt;br /&gt;
	pad = (pad == nil or pad &amp;lt; 0) and 0 or pad&lt;br /&gt;
	tcs = pad + 1&lt;br /&gt;
	local seedCell&lt;br /&gt;
	local seedArg = getTeamArg(round, 'seed', team)&lt;br /&gt;
	-- seed value for the paired team&lt;br /&gt;
	local otherteam = team % 2 == 0 and team-1 or team+1&lt;br /&gt;
	local pairSeedArg = otherbye and '' &lt;br /&gt;
		or getTeamArg(round, 'seed', otherteam)&lt;br /&gt;
	-- show seed if seed is defined for either or both&lt;br /&gt;
	local showSeed = showSeeds&lt;br /&gt;
		or isnotblank(seedArg)&lt;br /&gt;
		or isnotblank(pairSeedArg)&lt;br /&gt;
	if showSeed and (not hideSeeds) then&lt;br /&gt;
		seedCell = row:tag('td')&lt;br /&gt;
			:css('text-align', 'center')&lt;br /&gt;
			:css('background-color', '#f2f2f2')&lt;br /&gt;
			:attr('rowspan', (not compact) and '2' or nil)&lt;br /&gt;
			:wikitext(seedArg)&lt;br /&gt;
			:newline()&lt;br /&gt;
		addBorders(seedCell, top or otherbye, true, false)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local teamArg = getTeamArg(round, 'team', team)&lt;br /&gt;
	if isblank(teamArg) then&lt;br /&gt;
		teamArg = '&amp;amp;nbsp;'&lt;br /&gt;
	elseif emoji then&lt;br /&gt;
		teamArg = teamArg .. ' ' .. mw.getCurrentFrame():expandTemplate{ title = 'Emoji', args = { teamArg }}&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if not showSeed and (not hideSeeds) then&lt;br /&gt;
		tcs = tcs + 1&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local teamCell = row:tag('td')&lt;br /&gt;
		:css('background-color', '#f9f9f9')&lt;br /&gt;
		:css('padding', '0 2px')&lt;br /&gt;
		:attr('rowspan', (not compact) and '2' or nil)&lt;br /&gt;
		:attr('colspan', (tcs &amp;gt; 1) and tcs or nil)&lt;br /&gt;
		:wikitext(teamArg)&lt;br /&gt;
		:newline()&lt;br /&gt;
	addBorders(teamCell, top or otherbye, true, false)&lt;br /&gt;
&lt;br /&gt;
	local scoreCells = {}&lt;br /&gt;
	local wins, otherwins = 0, 0&lt;br /&gt;
	local sumscore, othersumscore = 0, 0&lt;br /&gt;
	local teamcolspan = tcs&lt;br /&gt;
	local hassum = false&lt;br /&gt;
	local glolfwinner = nil&lt;br /&gt;
	for s = 1, legs[round] do&lt;br /&gt;
		local fw = nil&lt;br /&gt;
		local agg = legs[round] &amp;gt; 1 and s == legs[round] and true or false&lt;br /&gt;
		local score1 = (agg and getScoreArg(round, team, 'agg') or nil) or &lt;br /&gt;
			getScoreArg(round, team, s) or ((legs[round] == 1) and getScoreArg(round, team)) or nil&lt;br /&gt;
		local score2 = (agg and getScoreArg(round, otherteam, 'agg') or nil) or &lt;br /&gt;
			getScoreArg(round, otherteam, s) or ((legs[round] == 1) and getScoreArg(round, otherteam)) or nil&lt;br /&gt;
		local showscore = true&lt;br /&gt;
		if agg and aggregate ~= '' and score1 == nil and hassum then&lt;br /&gt;
			score1 = (aggregate == 'score')	and sumscore &lt;br /&gt;
				or ((aggregate == 'legs' or aggregate == 'sets') and wins)&lt;br /&gt;
				or nil&lt;br /&gt;
		end&lt;br /&gt;
		if agg and aggregate ~= '' and score2 == nil and hassum then&lt;br /&gt;
			score2 = (aggregate == 'score')	and othersumscore&lt;br /&gt;
				or ((aggregate == 'legs' or aggregate == 'sets') and otherwins)&lt;br /&gt;
				or nil&lt;br /&gt;
		end&lt;br /&gt;
		if score1 == nil and score2 == nil then&lt;br /&gt;
			if hideomittedscores &amp;gt; 0 and s &amp;gt;= hideomittedscores then&lt;br /&gt;
				teamcolspan = teamcolspan + 1&lt;br /&gt;
				showscore = false&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			hassum = true&lt;br /&gt;
		end&lt;br /&gt;
		if showscore then&lt;br /&gt;
			local winner = scoreCompare(score1, score2, boldwinner ~= 'low' and (boldwinner ~= 'glolf' or s == 1))&lt;br /&gt;
			if boldwinner == 'glolf' then&lt;br /&gt;
				if not glolfwinner and winner &amp;gt; 0 then&lt;br /&gt;
					if winner == 1 then&lt;br /&gt;
						fw = 'bold'&lt;br /&gt;
					end&lt;br /&gt;
					glolfwinner = winner&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				sumscore = sumScores(sumscore, score1)&lt;br /&gt;
				othersumscore = sumScores(othersumscore, score2)&lt;br /&gt;
				if winner == 1 then&lt;br /&gt;
					if boldwinner ~= '' or (agg and (aggregate == 'score' or aggregate == 'legs' or aggregate == 'sets')) then &lt;br /&gt;
						if agg and (aggregate == 'legs' or aggregate == 'sets') and (wins &amp;lt;= (legs[round] - 1)/2) then&lt;br /&gt;
						else&lt;br /&gt;
							fw = 'bold'&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
					if not agg then wins = wins + 1 end&lt;br /&gt;
				elseif winner == 2 then&lt;br /&gt;
					if not agg then otherwins = otherwins + 1 end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			scoreCells[s] = row:tag('td')&lt;br /&gt;
				:css('text-align', 'center')&lt;br /&gt;
				:css('background-color', getShadeArg(round, team, s))&lt;br /&gt;
				:css('font-weight', fw)&lt;br /&gt;
				:attr('rowspan', (not compact) and '2' or nil)&lt;br /&gt;
				:wikitext(score1)&lt;br /&gt;
				:newline()&lt;br /&gt;
			addBorders(scoreCells[s], top or otherbye, false, s &amp;gt; 1 and s == legs[round] and aggsep or nil)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if teamcolspan &amp;gt; 1 then&lt;br /&gt;
		teamCell:attr('colspan', teamcolspan)&lt;br /&gt;
	end&lt;br /&gt;
	if (boldwinner == 'glolf' and glolfwinner == 1) or (boldwinner ~= '' and wins &amp;gt; otherwins) then&lt;br /&gt;
		if (aggregate == 'legs' or aggregate == 'sets') and (wins &amp;lt;= (legs[round] - 1)/2) then&lt;br /&gt;
		else&lt;br /&gt;
			if seedCell then&lt;br /&gt;
				seedCell:css('font-weight', 'bold')&lt;br /&gt;
			end&lt;br /&gt;
			if teamCell then&lt;br /&gt;
				teamCell:css('font-weight', 'bold')&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderRound(count, r)&lt;br /&gt;
	local teams = math.pow(2, rounds - r + 1)&lt;br /&gt;
	local step = count / teams&lt;br /&gt;
	local topTeam = true -- is top row in match-up&lt;br /&gt;
	local topPair = true -- is top match-up in pair of match-ups&lt;br /&gt;
	local team = 1&lt;br /&gt;
	local group = 1&lt;br /&gt;
&lt;br /&gt;
	for i = 1, count, step do&lt;br /&gt;
		local offset, height, blank&lt;br /&gt;
&lt;br /&gt;
		local hideteam = false&lt;br /&gt;
		local otherhideteam = false&lt;br /&gt;
		local hideleftpath = false&lt;br /&gt;
		local hiderightpath = false&lt;br /&gt;
		if r &amp;lt;= byes then&lt;br /&gt;
			hideteam = isHidden(r, team)&lt;br /&gt;
			otherhideteam = isHidden(r, team % 2 == 0 and team-1 or team+1)&lt;br /&gt;
		end&lt;br /&gt;
		if (r == 1) and (RD1seedmap[team] &amp;lt;= 0) then&lt;br /&gt;
				hideteam = true&lt;br /&gt;
		end&lt;br /&gt;
		if (r &amp;gt; 1) and (r &amp;lt;= (byes + 1)) then&lt;br /&gt;
			hideleftpath = isHidden(r-1, 2*team-1) and isHidden(r-1, 2*team)&lt;br /&gt;
		end&lt;br /&gt;
		if (r == 2) and (RD1seedmap[2*team-1] &amp;lt;= 0 and RD1seedmap[2*team] &amp;lt;= 0) then&lt;br /&gt;
			hideleftpath = true&lt;br /&gt;
		end&lt;br /&gt;
		if compactFinal and (r == rounds) then&lt;br /&gt;
			hideleftpath = true&lt;br /&gt;
		end&lt;br /&gt;
		if (tonumber(args['RD' .. (r-1) .. '-RD' .. (r) .. '-path']) or 2) == 0 then&lt;br /&gt;
			hideleftpath = true&lt;br /&gt;
		end&lt;br /&gt;
		if (tonumber(args['RD' .. (r) .. '-RD' .. (r + 1) .. '-path']) or 2) == 0 then&lt;br /&gt;
			hiderightpath = true&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- empty space above or below&lt;br /&gt;
		if compact then&lt;br /&gt;
			offset = topTeam and i or i + 1&lt;br /&gt;
			height = step - 1&lt;br /&gt;
		-- leave room for groups for teams other than first and last&lt;br /&gt;
		elseif team == 1 or team == teams then&lt;br /&gt;
			offset = topTeam and i or i + 2&lt;br /&gt;
			height = step - 2&lt;br /&gt;
		else&lt;br /&gt;
			offset = topTeam and i + 1 or i + 2&lt;br /&gt;
			height = step - 3&lt;br /&gt;
		end&lt;br /&gt;
		if showThird and (r == rounds) and (not topTeam) then&lt;br /&gt;
			height = offset - offsetThird&lt;br /&gt;
		end&lt;br /&gt;
		if compactFinal and (r == (maxround - 1)) then&lt;br /&gt;
			if team == 2 then&lt;br /&gt;
				height = height - 3&lt;br /&gt;
			end&lt;br /&gt;
			if team == 3 then&lt;br /&gt;
				height = height - 1&lt;br /&gt;
				offset = offset + 1&lt;br /&gt;
				addBlank(offset-3, nil, 1, tonumber(hideSeeds and '2' or '3') + legs[r])&lt;br /&gt;
				addBlank(offset-4)&lt;br /&gt;
				addHeading(rows[offset-4], r + 1, getRoundName(r+1), legs[r] - legs[r+1])&lt;br /&gt;
				local b = addBlank(offset-4, {&lt;br /&gt;
					['border-color'] = 'black',&lt;br /&gt;
					['border-style']= 'solid',&lt;br /&gt;
					['border-width']= '0'}, 2)&lt;br /&gt;
				b:css('border-right-width', '2px')&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if height &amp;gt; 0 then&lt;br /&gt;
			local pad = 0&lt;br /&gt;
			local betweenTeams = (topTeam == false and topPair == true) or (topTeam == true and topPair == false)&lt;br /&gt;
			if compactFinal and (r == maxround - 1) then&lt;br /&gt;
				betweenTeams = false&lt;br /&gt;
			end&lt;br /&gt;
			if compactFinal and (r == maxround - 1) and legs[r+1] &amp;gt; legs[r] then&lt;br /&gt;
				pad = legs[r+1] - legs[r]&lt;br /&gt;
			end&lt;br /&gt;
			if compact and betweenTeams then&lt;br /&gt;
				addBlank(offset, nil, height, 1)&lt;br /&gt;
				if topPair then&lt;br /&gt;
					blank = addBlank(offset, nil, 2*height, tonumber(hideSeeds and '1' or '2') + legs[r] + pad)&lt;br /&gt;
					if args['RD' .. r .. '-group' .. group] then&lt;br /&gt;
						blank:wikitext(args['RD' .. r .. '-group' .. group])&lt;br /&gt;
						blank:css('text-align', 'center')&lt;br /&gt;
					end&lt;br /&gt;
					group = group + 1&lt;br /&gt;
				end&lt;br /&gt;
				blank = addBlank(offset, &lt;br /&gt;
				{['border-width'] = '0',&lt;br /&gt;
				['border-style'] = 'solid',&lt;br /&gt;
				['border-color'] = 'black'},&lt;br /&gt;
				height, 1)&lt;br /&gt;
			else&lt;br /&gt;
				blank = addBlank(offset, &lt;br /&gt;
				{['border-width'] = '0',&lt;br /&gt;
				['border-style'] = 'solid',&lt;br /&gt;
				['border-color'] = 'black'},&lt;br /&gt;
				height, tonumber(hideSeeds and '3' or '4') + legs[r] + pad)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		-- add bracket&lt;br /&gt;
		local j = topTeam and i + step - (compact and 1 or 2) or i&lt;br /&gt;
		-- add left path&lt;br /&gt;
		addPath(j, r, topTeam, true, hideleftpath and '0' or '2px')&lt;br /&gt;
		if hideteam then&lt;br /&gt;
			addBlank(j, nil, (not compact) and 2 or nil, tonumber(hideSeeds and '1' or '2') + legs[r])&lt;br /&gt;
		elseif rows[j] then&lt;br /&gt;
			if compactFinal and (r == maxround) then&lt;br /&gt;
				renderTeam(rows[j], r, team, topTeam, otherhideteam, legs[r-1] - legs[r])&lt;br /&gt;
			elseif compactFinal and (r == maxround - 1) then&lt;br /&gt;
				renderTeam(rows[j], r, team, topTeam, otherhideteam, legs[r+1] - legs[r])&lt;br /&gt;
			else&lt;br /&gt;
				renderTeam(rows[j], r, team, topTeam, otherhideteam)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		local rightPath = addPath(j, r, topTeam, false, (hiderightpath or hideteam) and '0' or '2px')&lt;br /&gt;
		if not topTeam then topPair = not topPair end&lt;br /&gt;
		if not topPair and r &amp;lt; maxround and (not (hiderightpath or hideteam)) then&lt;br /&gt;
			if blank then blank:css('border-right-width', '2px') end&lt;br /&gt;
			rightPath:css('border-right-width', '2px')&lt;br /&gt;
		end&lt;br /&gt;
		if compactFinal and (r == maxround) then&lt;br /&gt;
			local prop = (team == 1) and 'border-bottom-width' or 'border-top-width'&lt;br /&gt;
			rightPath:css('border-right-width', '2px')&lt;br /&gt;
				:css(prop, '2px')&lt;br /&gt;
		end&lt;br /&gt;
		team = team + 1&lt;br /&gt;
		topTeam = not topTeam&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderGroups(count, round)&lt;br /&gt;
	local roundFromLast = rounds - round + 1&lt;br /&gt;
	local groups = math.pow(2, roundFromLast - 2)&lt;br /&gt;
	local step = count / groups&lt;br /&gt;
	local group = 1&lt;br /&gt;
	local offset = 0&lt;br /&gt;
	local team = 0&lt;br /&gt;
	local wdef = (tonumber(args['RD' .. (round) .. '-RD' .. (round + 1) .. '-path']) or 2) .. 'px'&lt;br /&gt;
	local w = wdef&lt;br /&gt;
&lt;br /&gt;
	for r = 1,round do&lt;br /&gt;
		offset = offset + (hideSeeds and 3 or 4) + legs[r]&lt;br /&gt;
	end&lt;br /&gt;
	for i = step / 2, count, step do&lt;br /&gt;
		local name = 'RD' .. round .. '-group' .. group&lt;br /&gt;
		addBlank(i, {['height'] = '7px'})&lt;br /&gt;
		addBlank(i+1, {['height'] = '7px'})&lt;br /&gt;
		addBlank(i, {['text-align'] = 'center'}, 2, offset-2)&lt;br /&gt;
			:wikitext(args[name])&lt;br /&gt;
			:newline()&lt;br /&gt;
		if (round &amp;lt;= byes) then&lt;br /&gt;
			team = i/(step/2)&lt;br /&gt;
			w = isHidden(round, 2*team-1) and isHidden(round, 2*team) and '0' or wdef&lt;br /&gt;
		end&lt;br /&gt;
		if (round &amp;lt; maxround) then&lt;br /&gt;
			addBlank(i, {&lt;br /&gt;
				['border-color'] = 'black',&lt;br /&gt;
				['border-style'] = 'solid', &lt;br /&gt;
				['border-width'] = '0 ' .. w .. ' 0 0'})&lt;br /&gt;
		else&lt;br /&gt;
			addBlank(i)&lt;br /&gt;
		end&lt;br /&gt;
		if (round &amp;lt;= byes) then&lt;br /&gt;
			team = team + 1&lt;br /&gt;
			w = isHidden(round, 2*team-1) and isHidden(round, 2*team) and '0' or wdef&lt;br /&gt;
		end&lt;br /&gt;
		if (round &amp;lt; maxround) then&lt;br /&gt;
			addBlank(i+1, {&lt;br /&gt;
				['border-color'] = 'black',&lt;br /&gt;
				['border-style'] = 'solid', &lt;br /&gt;
				['border-width'] = '0 ' .. w .. ' 0 0'})&lt;br /&gt;
		else&lt;br /&gt;
			addBlank(i+1)&lt;br /&gt;
		end&lt;br /&gt;
		group = group + 1&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getThirdOffset()&lt;br /&gt;
	local offset = (compact and 1 or 3) * (math.pow(2, rounds) - math.pow(2, rounds-3)) - (compact and 2 or 4)&lt;br /&gt;
	if rounds &amp;lt; 4 then&lt;br /&gt;
		offset = compact and 8 or 17&lt;br /&gt;
		if rounds &amp;lt; 3 then&lt;br /&gt;
			offset = compact and 6 or 10&lt;br /&gt;
			if rounds &amp;lt; 2 then&lt;br /&gt;
				offset = compact and 4 or 7&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return offset&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderThird(count)&lt;br /&gt;
	local k = offsetThird&lt;br /&gt;
	local row = rows[k]&lt;br /&gt;
	local blank&lt;br /&gt;
	if rounds &amp;lt; 2 then&lt;br /&gt;
		blank = addBlank(k-1, {['height'] = '7px'})&lt;br /&gt;
	end&lt;br /&gt;
	blank = addBlank(k, rounds &amp;lt; 2 and {['height'] = '7px'} or nil)&lt;br /&gt;
	addHeading(row, rounds + 1, args['3rd'] or 'Third place')&lt;br /&gt;
	if rounds &amp;lt; 2 then&lt;br /&gt;
		for i = 1,(compact and 1 or 2) do&lt;br /&gt;
			blank = addBlank(k+i, {['height'] = '7px'})&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	k = k + (compact and 2 or 3)&lt;br /&gt;
	for i = 1,2 do&lt;br /&gt;
		row = rows[k]&lt;br /&gt;
		blank = addBlank(k, rounds &amp;lt; 2 and {['height'] = '7px'} or nil)&lt;br /&gt;
		if row then&lt;br /&gt;
			renderTeam(row, rounds + 1, i, i == 1, false)&lt;br /&gt;
		end&lt;br /&gt;
		if rounds &amp;lt; 2 and not compact then&lt;br /&gt;
			blank = addBlank(k+1, {['height'] = '7px'})&lt;br /&gt;
		end&lt;br /&gt;
		k = k + (compact and 1 or 2)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function maskRows(tbl, count, offsetcount)&lt;br /&gt;
	local rmin = 1&lt;br /&gt;
	local rmax = count&lt;br /&gt;
	for i = rmin, rmax do&lt;br /&gt;
		mask[i] = false&lt;br /&gt;
	end&lt;br /&gt;
	if showThird then&lt;br /&gt;
		for i = offsetThird,(offsetThird+ (compact and 3 or 5)) do&lt;br /&gt;
			rmax = (i &amp;gt; rmax) and i or rmax&lt;br /&gt;
			mask[i] = true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for r = 1, maxround do&lt;br /&gt;
		local teams = math.pow(2, rounds - r + 1)&lt;br /&gt;
		local step = count / teams&lt;br /&gt;
		local topTeam = true -- is top row in match-up&lt;br /&gt;
		local team = 1&lt;br /&gt;
&lt;br /&gt;
		for i = 1, count, step do&lt;br /&gt;
			local offset, height, blank&lt;br /&gt;
			local hideteam = false&lt;br /&gt;
			if r &amp;lt;= byes then&lt;br /&gt;
				hideteam = isHidden(r, team)&lt;br /&gt;
			end&lt;br /&gt;
			if (r == 1) and (RD1seedmap[team] &amp;lt;= 0) then&lt;br /&gt;
				hideteam = true&lt;br /&gt;
			end&lt;br /&gt;
			if not hideteam then&lt;br /&gt;
				local j = topTeam and i + step - (compact and 1 or 2) or i&lt;br /&gt;
				mask[j] = true&lt;br /&gt;
			end&lt;br /&gt;
			team = team + 1&lt;br /&gt;
			topTeam = not topTeam&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	for r = 1, maxround do&lt;br /&gt;
		local roundFromLast = rounds - r + 1&lt;br /&gt;
		local groups = math.pow(2, roundFromLast - 2)&lt;br /&gt;
		local step = count / groups&lt;br /&gt;
		local group = 1&lt;br /&gt;
		for i = step / 2, count, step do&lt;br /&gt;
			if args['RD' .. r .. '-group' .. group] then&lt;br /&gt;
				mask[i] = true&lt;br /&gt;
				mask[i+1] = true&lt;br /&gt;
			end&lt;br /&gt;
			group = group + 1&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local mmin, mmax = rmax, rmin&lt;br /&gt;
	for i = rmin, rmax do&lt;br /&gt;
		if mask[i] == true then&lt;br /&gt;
			mmin = (i &amp;lt; mmin) and i or mmin&lt;br /&gt;
			mmax = (i &amp;gt; mmax) and i or mmax&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for i = mmin, mmax do&lt;br /&gt;
		rows[i] = addTableRow(tbl)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderTree(tbl)&lt;br /&gt;
	-- create 3 or 1 rows for every team&lt;br /&gt;
	local count = math.pow(2, rounds) * (compact and 1 or 3)&lt;br /&gt;
	local offsetcount = 2 * (compact and 1 or 3) + (compact and 2 or 3)&lt;br /&gt;
	offsetThird = getThirdOffset()&lt;br /&gt;
	maskRows(tbl, count, offsetcount)&lt;br /&gt;
	if showThird then&lt;br /&gt;
		for i = (count+1), (offsetcount + offsetThird) do&lt;br /&gt;
			if (rounds &amp;gt; 1) then&lt;br /&gt;
				local blank = addBlank(i, nil, 1, tonumber(hideSeeds and '3' or '4') + legs[1])&lt;br /&gt;
				if compact and (rounds &amp;gt; 2) then&lt;br /&gt;
					blank = addBlank(i, nil, 1, tonumber(hideSeeds and '3' or '4') + legs[1])&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if not compact then&lt;br /&gt;
		-- fill rows with groups&lt;br /&gt;
		for r = 1, rounds - 1 do&lt;br /&gt;
			renderGroups(count, r)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- fill rows with bracket&lt;br /&gt;
	for r = 1, maxround do&lt;br /&gt;
		renderRound(count, r)&lt;br /&gt;
	end&lt;br /&gt;
	if showThird then&lt;br /&gt;
		renderThird(count, compact)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderHeadings(tbl)&lt;br /&gt;
	local titleRow = addTableRow((not hideHeadings) and tbl or mw.html.create('table'))&lt;br /&gt;
	local widthRow = addTableRow(tbl)&lt;br /&gt;
	for r = 1, (compactFinal and (maxround-1) or maxround) do&lt;br /&gt;
		titleRow:tag('td')&lt;br /&gt;
		widthRow:tag('td'):css('width', r &amp;gt; 1 and '5px' or '1px')&lt;br /&gt;
		if compactFinal and r == (maxround-1) then&lt;br /&gt;
			addHeading(titleRow, r, getRoundName(r), legs[r+1] - legs[r])&lt;br /&gt;
		else&lt;br /&gt;
			addHeading(titleRow, r, getRoundName(r) )&lt;br /&gt;
		end&lt;br /&gt;
		local seedCell&lt;br /&gt;
		if (not hideSeeds) then&lt;br /&gt;
			seedCell = widthRow:tag('td'):css('width', getWidth('seed', '25px'))&lt;br /&gt;
		end&lt;br /&gt;
		local teamCell = widthRow:tag('td'):css('width', getWidth('team', '150px'))&lt;br /&gt;
		local scoreCells = {}&lt;br /&gt;
		local legsr = legs[r]&lt;br /&gt;
		if compactFinal and r == (maxround-1) then&lt;br /&gt;
			legsr = legs[r+1] &amp;gt; legs[r] and legs[r+1] or legs[r]&lt;br /&gt;
		end&lt;br /&gt;
		for s = 1, legsr do&lt;br /&gt;
			scoreCells[s] = widthRow:tag('td'):css('width', getWidth('score', '25px'))&lt;br /&gt;
		end&lt;br /&gt;
		titleRow:tag('td')&lt;br /&gt;
		widthRow:tag('td'):css('width', r &amp;lt; rounds and '5px' or '1px')&lt;br /&gt;
&lt;br /&gt;
		if compact then&lt;br /&gt;
			teamCell:css('height', '7px')&lt;br /&gt;
		else&lt;br /&gt;
			if seedCell then&lt;br /&gt;
				seedCell:wikitext('&amp;amp;nbsp;')&lt;br /&gt;
			end&lt;br /&gt;
			teamCell:wikitext('&amp;amp;nbsp;')&lt;br /&gt;
			for s = 1, legs[r] do&lt;br /&gt;
				scoreCells[s]:wikitext('&amp;amp;nbsp;')&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	parseArgs(frame)&lt;br /&gt;
	rounds = tonumber(args.rounds) or 2&lt;br /&gt;
	maxround = tonumber(args.maxround) or rounds&lt;br /&gt;
	local teams = math.pow(2, rounds)&lt;br /&gt;
	compact = (args['compact'] and (args['compact'] == 'yes' or args['compact'] == 'y'))&lt;br /&gt;
	compactFinal = ((rounds &amp;gt; 4) and compact and args['compact-final'] and (args['compact-final'] == 'yes' or args['compact-final'] == 'y'))&lt;br /&gt;
	sepwidth = tonumber(args['sepwidth'] or ((args.sets or args.legs) and 1) or (compact and 1) or 2) or 1&lt;br /&gt;
	aggregate = (args['aggregate'] or ''):lower()&lt;br /&gt;
	aggsep = args['aggsep'] or args['aggregate'] or nil&lt;br /&gt;
	boldwinner = args['boldwinner'] or args['bold_winner'] or ''&lt;br /&gt;
	local autoSeeds = (args['autoseeds'] and (args['autoseeds'] == 'yes' or args['autoseeds'] == 'y'))&lt;br /&gt;
	hideSeeds = (args['seeds'] and (args['seeds'] == 'no' or args['seeds'] == 'n'))&lt;br /&gt;
	showSeeds = (args['seeds'] and (args['seeds'] == 'yes' or args['seeds'] == 'y'))&lt;br /&gt;
	byes = (args['byes'] and (args['byes'] == 'yes' or args['byes'] == 'y') and 1) or (tonumber(args['byes'] or '0') or 0)&lt;br /&gt;
	hideomittedscores = (args['hideomittedscores'] and (args['hideomittedscores'] == 'yes' or args['hideomittedscores'] == 'y') and 1) or (tonumber(args['hideomittedscores'] or '0') or 0)&lt;br /&gt;
	hideHeadings = (args['headings'] and (args['headings'] == 'no' or args['headings'] == 'n'))&lt;br /&gt;
	showThird = isnotblank(args['3rd']) or isnotblank(args['3rd-team1']) or isnotblank(args['3rd-team2'])&lt;br /&gt;
	local align = (args['float'] or args['align'] or ''):lower()&lt;br /&gt;
	local clear = args['clear'] or 'none'&lt;br /&gt;
	emoji = (args['emoji'] and (args['emoji'] == 'yes' or args['emoji'] == 'y'))&lt;br /&gt;
	parseSeedmap(args['RD1-omit'])&lt;br /&gt;
	parseLegs(args.sets or args.legs)&lt;br /&gt;
	&lt;br /&gt;
	if autoSeeds then&lt;br /&gt;
		-- set default seeds for round 1&lt;br /&gt;
		local seeds = getSeeds()&lt;br /&gt;
		for i = 1, table.getn(seeds) do&lt;br /&gt;
			local argname = getTeamArgName(1, 'seed', i)&lt;br /&gt;
			if not args[argname] then&lt;br /&gt;
				args[argname] = seeds[i]&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- create the table&lt;br /&gt;
	local tbl = mw.html.create('table')&lt;br /&gt;
		:css('border-style', 'none')&lt;br /&gt;
		:css('font-size', '90%')&lt;br /&gt;
		:css('border-collapse', 'separate')&lt;br /&gt;
		:css('border-spacing', '0')&lt;br /&gt;
		:attr('cellpadding', '0')&lt;br /&gt;
&lt;br /&gt;
	if (args['nowrap'] and (args['nowrap'] == 'yes' or args['nowrap'] == 'y')) then&lt;br /&gt;
		tbl:css('white-space', 'nowrap')&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if align == 'right' then&lt;br /&gt;
		tbl:css('float', 'right')&lt;br /&gt;
		if clear ~= 'none' and clear ~= 'no' and clear ~= 'n' then&lt;br /&gt;
			tbl:css('clear', 'right')&lt;br /&gt;
		end&lt;br /&gt;
		tbl:css('margin', '1em 0 1em 2em')&lt;br /&gt;
	elseif align == 'left' then&lt;br /&gt;
		tbl:css('float', 'left')&lt;br /&gt;
		if clear ~= 'none' and clear ~= 'no' and clear ~= 'n' then&lt;br /&gt;
			tbl:css('clear', 'left')&lt;br /&gt;
		end&lt;br /&gt;
		tbl:css('margin', '1em 2em 1em 0')&lt;br /&gt;
	elseif align == 'center' or align == 'centre' then&lt;br /&gt;
		tbl:css('margin', '1em auto')&lt;br /&gt;
	else&lt;br /&gt;
		tbl:css('margin', '1em 2em 1em 1em')&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	renderHeadings(tbl)&lt;br /&gt;
	renderTree(tbl)&lt;br /&gt;
	return tostring(tbl) .. tcats&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.teamBracket(frame)&lt;br /&gt;
	return p.main(frame)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Pokeylope</name></author>
	</entry>
	<entry>
		<id>https://glolfwiki.sibr.dev/index.php?title=Module:Team_bracket&amp;diff=235</id>
		<title>Module:Team bracket</title>
		<link rel="alternate" type="text/html" href="https://glolfwiki.sibr.dev/index.php?title=Module:Team_bracket&amp;diff=235"/>
		<updated>2021-06-06T22:48:16Z</updated>

		<summary type="html">&lt;p&gt;Pokeylope: Add glolf scoring&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- https://en.wikipedia.org/wiki/Module:Team_bracket&lt;br /&gt;
--&lt;br /&gt;
-- This module implements many bracket templates&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
local args = {}&lt;br /&gt;
local rows = {}&lt;br /&gt;
local mask = {}&lt;br /&gt;
local rounds&lt;br /&gt;
local maxround&lt;br /&gt;
local legs = {}&lt;br /&gt;
local compact&lt;br /&gt;
local byes&lt;br /&gt;
local hideSeeds&lt;br /&gt;
local showSeeds&lt;br /&gt;
local hideHeadings&lt;br /&gt;
local showThird&lt;br /&gt;
local offsetThird&lt;br /&gt;
local compactFinal&lt;br /&gt;
local sepwidth&lt;br /&gt;
local aggsep&lt;br /&gt;
local aggregate&lt;br /&gt;
local boldwinner&lt;br /&gt;
local hideomittedscores&lt;br /&gt;
local RD1seedmap = {}&lt;br /&gt;
local tcats = ''&lt;br /&gt;
local emoji&lt;br /&gt;
&lt;br /&gt;
local function isnotblank(s)&lt;br /&gt;
	return s and s ~= ''&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function isblank(s)&lt;br /&gt;
	return (not s) or (s == '')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function sumScores(s1, s2)&lt;br /&gt;
	s1 = mw.ustring.gsub(s1 or '', '^[\'%s]*([%d%.]*).-$', '%1')&lt;br /&gt;
	s2 = mw.ustring.gsub(s2 or '', '^[\'%s]*([%d%.]*).-$', '%1')&lt;br /&gt;
	if s1 ~= '' and s2 ~= '' then&lt;br /&gt;
		return tonumber(s1) + tonumber(s2)&lt;br /&gt;
	end&lt;br /&gt;
	return s1&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function scoreCompare(s1,s2,highwin)&lt;br /&gt;
	local ps1 = mw.ustring.gsub(s1 or '', '^[\'%s]*([%d%.]*)[\'%s]*%([\'%s]*([%d%.]*)[\'%s]*%).-$', '%2')&lt;br /&gt;
	local ps2 = mw.ustring.gsub(s2 or '', '^[\'%s]*([%d%.]*)[\'%s]*%([\'%s]*([%d%.]*)[\'%s]*%).-$', '%2')&lt;br /&gt;
	s1 = mw.ustring.gsub(s1 or '', '^[\'%s]*([%d%.]*).-$', '%1')&lt;br /&gt;
	s2 = mw.ustring.gsub(s2 or '', '^[\'%s]*([%d%.]*).-$', '%1')&lt;br /&gt;
	&lt;br /&gt;
	if s1 ~= '' and s2 ~= '' then&lt;br /&gt;
		s1 = tonumber(s1)&lt;br /&gt;
		s2 = tonumber(s2)&lt;br /&gt;
		if s1 and s2 then&lt;br /&gt;
			if (s1 == s2) then&lt;br /&gt;
				ps1 = tonumber(ps1)&lt;br /&gt;
				ps2 = tonumber(ps2)&lt;br /&gt;
				if ps1 and ps2 then&lt;br /&gt;
					s1 = ps1&lt;br /&gt;
					s2 = ps2&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if highwin then&lt;br /&gt;
				return ((s1 &amp;gt; s2) and 1) or ((s1 &amp;lt; s2) and 2) or 0&lt;br /&gt;
			else&lt;br /&gt;
				return ((s2 &amp;gt; s1) and 1) or ((s2 &amp;lt; s1) and 2) or 0&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function parseArgs(frame)&lt;br /&gt;
	local fargs = frame.args&lt;br /&gt;
	local pargs = frame:getParent().args;&lt;br /&gt;
&lt;br /&gt;
	local r = tonumber(fargs.rounds or '') or tonumber(pargs.rounds or '') or 2&lt;br /&gt;
	local teams = math.pow(2, r)&lt;br /&gt;
	local rdstr = 'RD' .. tostring(r)&lt;br /&gt;
	local rdbstr = 'RD' .. tostring(r) .. 'b'&lt;br /&gt;
	local rdp1str = 'RD' .. tostring(r+1)&lt;br /&gt;
&lt;br /&gt;
	for i=1,2 do&lt;br /&gt;
		local targs = (i == 1) and pargs or fargs&lt;br /&gt;
		for k,v in pairs(targs) do&lt;br /&gt;
			if type(k) == 'string' then&lt;br /&gt;
				if k:find('^[R3][Dr][d1-9]b?%-[a-z][a-z]*00*') then&lt;br /&gt;
					k = mw.ustring.gsub(k, '^([R3][Dr][d1-9]b?%-[a-z][a-z]*)00*', '%1')&lt;br /&gt;
					if (teams &amp;lt; 10) then &lt;br /&gt;
						tcats = tcats .. '[[Category:Pages using a team bracket with deprecated syntax|P]]'&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				if k:find('^' .. rdp1str) then&lt;br /&gt;
					k = mw.ustring.gsub(k, '^' .. rdp1str, '3rd')&lt;br /&gt;
					tcats = tcats .. '[[Category:Pages using a team bracket with deprecated syntax|3]]'&lt;br /&gt;
				elseif k:find('^' .. rdbstr) then&lt;br /&gt;
					k = mw.ustring.gsub(k, '^' .. rdbstr, '3rd')&lt;br /&gt;
				elseif k:find('^' .. rdstr .. '%-[a-z][a-z]*3') then&lt;br /&gt;
					k = mw.ustring.gsub(k, '^' .. rdstr .. '(%-[a-z][a-z]*)3', '3rd%11')&lt;br /&gt;
				elseif k:find('^' .. rdstr .. '%-[a-z][a-z]*4') then&lt;br /&gt;
					k = mw.ustring.gsub(k, '^' .. rdstr .. '(%-[a-z][a-z]*)4', '3rd%12')&lt;br /&gt;
				elseif  k:find('^Consol') then&lt;br /&gt;
					k = mw.ustring.gsub(k, '^Consol', '3rd')&lt;br /&gt;
					tcats = tcats .. '[[Category:Pages using a team bracket with deprecated syntax|3]]'&lt;br /&gt;
				elseif k:find('^group[0-9]') then&lt;br /&gt;
					tcats = tcats .. '[[Category:Pages using a team bracket with deprecated syntax|G]]'&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			args[k] = v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if (args['byes'] and (args['byes'] == 'yes' or args['byes'] == 'y')) then&lt;br /&gt;
		tcats = tcats .. '[[Category:Pages using a team bracket with deprecated syntax|B]]'&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function parseSeedmap(s)&lt;br /&gt;
	s = mw.text.split((s or '0') .. '/', '[%s]*/[%s]*')&lt;br /&gt;
	local teams = math.pow(2, rounds)&lt;br /&gt;
	for r=1,teams do&lt;br /&gt;
		RD1seedmap[r] = 1&lt;br /&gt;
	end&lt;br /&gt;
	for r=1,#s do&lt;br /&gt;
		if tonumber(s[r] or 'x') then&lt;br /&gt;
			RD1seedmap[tonumber(s[r])] = 0&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local c = 1&lt;br /&gt;
	for r=1,teams do&lt;br /&gt;
		if RD1seedmap[r] &amp;gt; 0 then&lt;br /&gt;
			RD1seedmap[r] = c&lt;br /&gt;
			c = c + 1&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function parseLegs(s)&lt;br /&gt;
	s = mw.text.split((s or '1') .. '/', '[%s]*/[%s]*')&lt;br /&gt;
	if aggregate == 'n' or aggregate == 'no' or aggregate == '0' then&lt;br /&gt;
		aggregate = ''&lt;br /&gt;
	end&lt;br /&gt;
	local n = showThird and (rounds + 1) or (rounds)&lt;br /&gt;
	local lastlegs = nil&lt;br /&gt;
	for r=1,n do&lt;br /&gt;
		if s[r] ~= nil and s[r] ~= '' and tonumber(s[r]) then&lt;br /&gt;
			legs[r] = tonumber(s[r])&lt;br /&gt;
		elseif lastlegs then&lt;br /&gt;
			legs[r] = lastlegs&lt;br /&gt;
		else&lt;br /&gt;
			legs[r] = 1&lt;br /&gt;
		end&lt;br /&gt;
		lastlegs = legs[r]&lt;br /&gt;
		if legs[r] &amp;gt; 1 and aggregate ~= '' then&lt;br /&gt;
			legs[r] = legs[r] + 1&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getSeeds()&lt;br /&gt;
	local seeds = {1, 2}&lt;br /&gt;
	local count = 2&lt;br /&gt;
	local before = false&lt;br /&gt;
	for r = 2, rounds do&lt;br /&gt;
		local max = math.pow(2, r)&lt;br /&gt;
		for i = 1, count do&lt;br /&gt;
			local pos = i * 2&lt;br /&gt;
			if before then pos = pos - 1 end&lt;br /&gt;
			table.insert(seeds, pos, max - seeds[i * 2 - 1] + 1)&lt;br /&gt;
			before = not before&lt;br /&gt;
		end&lt;br /&gt;
		count = count * 2&lt;br /&gt;
	end&lt;br /&gt;
	return seeds&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function addTableRow(tbl)&lt;br /&gt;
	return tbl:tag('tr')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function addBlank(i, css, rowspan, colspan)&lt;br /&gt;
	local row = rows[i]&lt;br /&gt;
	rowspan = rowspan or 1&lt;br /&gt;
	local jmax = i + rowspan - 1&lt;br /&gt;
	for j = i, jmax do&lt;br /&gt;
		if rows[j] == nil then&lt;br /&gt;
			rowspan = rowspan - 1&lt;br /&gt;
		elseif row == nil then&lt;br /&gt;
			row = rows[j]&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local cell = row and row:tag('td') or mw.html.create('td')&lt;br /&gt;
	if rowspan and rowspan &amp;gt; 1 then&lt;br /&gt;
		cell:attr('rowspan', rowspan)&lt;br /&gt;
	end&lt;br /&gt;
	if colspan and colspan &amp;gt; 1 then&lt;br /&gt;
		cell:attr('colspan', colspan)&lt;br /&gt;
	end&lt;br /&gt;
	if css then&lt;br /&gt;
		cell:css(css)&lt;br /&gt;
	end&lt;br /&gt;
	return cell&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function addBorders(cell, topcell, seedorteam, extrasep)&lt;br /&gt;
	if sepwidth &amp;gt; 1 then topcell = true end&lt;br /&gt;
	if seedorteam then&lt;br /&gt;
		cell:css('border', '1px solid #aaa')&lt;br /&gt;
			:css('border-top-width', topcell and '1px' or '0')&lt;br /&gt;
	else&lt;br /&gt;
		cell:css('border-color', '#aaa')&lt;br /&gt;
			:css('border-style', 'solid')&lt;br /&gt;
			:css('border-top-width', topcell and '1px' or '0')&lt;br /&gt;
			:css('border-left-width', (extrasep and '1px') or ((sepwidth &amp;gt; 1) and '1px') or '0')&lt;br /&gt;
			:css('border-right-width', '1px')&lt;br /&gt;
			:css('border-bottom-width', '1px')&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function addHeading(row, r, text, pad)&lt;br /&gt;
	pad = (pad == nil or pad &amp;lt; 0) and 0 or pad&lt;br /&gt;
	row:tag('td')&lt;br /&gt;
		:attr('colspan', tonumber(hideSeeds and '1' or '2') + legs[r] + pad)&lt;br /&gt;
		:css('text-align', 'center')&lt;br /&gt;
		:css('border', '1px solid #aaa')&lt;br /&gt;
		:css('background-color', args['RD-shade'] or '#f2f2f2')&lt;br /&gt;
		:wikitext(text)&lt;br /&gt;
		:newline()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getWidth(param, default)&lt;br /&gt;
	local arg = args[param .. '-width']&lt;br /&gt;
	if isblank(arg) then&lt;br /&gt;
		arg = default&lt;br /&gt;
	end&lt;br /&gt;
	if tonumber(arg) ~= nil then&lt;br /&gt;
		arg = arg .. 'px'&lt;br /&gt;
	end&lt;br /&gt;
	return arg&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getTeamArgName(round, type, team)&lt;br /&gt;
	if round &amp;gt; rounds then&lt;br /&gt;
		return string.format('3rd-%s%d', type, team)&lt;br /&gt;
	else&lt;br /&gt;
		if (round == 1) then&lt;br /&gt;
			team = RD1seedmap[team]&lt;br /&gt;
			if team == 0 then&lt;br /&gt;
				return 'NIL'&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return string.format('RD%d-%s%d', round, type, team)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getShadeArg(round, team, s)&lt;br /&gt;
	local argname = getTeamArgName(round, 'shade', team) .. (s and ('-' .. s) or '')&lt;br /&gt;
	local value = args[argname]&lt;br /&gt;
	if isblank(value) then&lt;br /&gt;
		return '#f9f9f9'&lt;br /&gt;
	end&lt;br /&gt;
	return value&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getScoreArg(round, team, s)&lt;br /&gt;
	local argname = getTeamArgName(round, 'score', team) .. (s and ('-' .. s) or '')&lt;br /&gt;
	local value = args[argname]&lt;br /&gt;
	return value&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getTeamArg(round, type, team)&lt;br /&gt;
	local argname = getTeamArgName(round, type, team)&lt;br /&gt;
	local value = args[argname]&lt;br /&gt;
	if isblank(value) then&lt;br /&gt;
		return ''&lt;br /&gt;
	end&lt;br /&gt;
	if mw.ustring.find(value, '[%s]*&amp;lt;[%s/]*[Bb][Rr][%s/]*&amp;gt;[%s ]*&amp;amp;[Nn][Bb][Ss][Pp];[%s]*') then&lt;br /&gt;
		tcats = tcats .. '[[Category:Pages using a team bracket with nbsp]]'&lt;br /&gt;
	end&lt;br /&gt;
	return mw.ustring.gsub(value, '[%s]*&amp;lt;[%s/]*[Bb][Rr][%s/]*&amp;gt;[%s ]*&amp;amp;[Nn][Bb][Ss][Pp];[%s]*', '&amp;lt;br/&amp;gt;')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function isHidden(r, team)&lt;br /&gt;
	return isblank( getTeamArg(r, 'team', team) )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getRoundName(round)&lt;br /&gt;
	local name = args['RD' .. round]&lt;br /&gt;
	if isnotblank(name) then&lt;br /&gt;
		return name&lt;br /&gt;
	end&lt;br /&gt;
	local roundFromLast = rounds - round + 1&lt;br /&gt;
	if roundFromLast == 1 then&lt;br /&gt;
		return &amp;quot;Finals&amp;quot;&lt;br /&gt;
	elseif roundFromLast == 2 then&lt;br /&gt;
		return &amp;quot;Semifinals&amp;quot;&lt;br /&gt;
	elseif roundFromLast == 3 then&lt;br /&gt;
		return &amp;quot;Quarterfinals&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;quot;Round of &amp;quot; .. math.pow(2, roundFromLast)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function addPath(index, round, top, left, w)&lt;br /&gt;
	local prop = top and 'border-bottom-width' or 'border-top-width'&lt;br /&gt;
	if left and round == 1 then&lt;br /&gt;
		if compact then&lt;br /&gt;
			addBlank(index)&lt;br /&gt;
		else&lt;br /&gt;
			addBlank(index, {['height'] = '7px'})&lt;br /&gt;
			addBlank(index+1, {['height'] = '7px'})&lt;br /&gt;
		end&lt;br /&gt;
		return nil&lt;br /&gt;
	else&lt;br /&gt;
		local cell = addBlank(index, &lt;br /&gt;
			{['border-width'] = '0',&lt;br /&gt;
			['border-style'] = 'solid',&lt;br /&gt;
			['border-color'] = 'black'}, (not compact) and 2 or 1)&lt;br /&gt;
		if left or round &amp;lt; maxround and not left then&lt;br /&gt;
			cell:css(prop, w or '2px')&lt;br /&gt;
		end&lt;br /&gt;
		return cell&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderTeam(row, round, team, top, otherbye, pad)&lt;br /&gt;
	pad = (pad == nil or pad &amp;lt; 0) and 0 or pad&lt;br /&gt;
	tcs = pad + 1&lt;br /&gt;
	local seedCell&lt;br /&gt;
	local seedArg = getTeamArg(round, 'seed', team)&lt;br /&gt;
	-- seed value for the paired team&lt;br /&gt;
	local otherteam = team % 2 == 0 and team-1 or team+1&lt;br /&gt;
	local pairSeedArg = otherbye and '' &lt;br /&gt;
		or getTeamArg(round, 'seed', otherteam)&lt;br /&gt;
	-- show seed if seed is defined for either or both&lt;br /&gt;
	local showSeed = showSeeds&lt;br /&gt;
		or isnotblank(seedArg)&lt;br /&gt;
		or isnotblank(pairSeedArg)&lt;br /&gt;
	if showSeed and (not hideSeeds) then&lt;br /&gt;
		seedCell = row:tag('td')&lt;br /&gt;
			:css('text-align', 'center')&lt;br /&gt;
			:css('background-color', '#f2f2f2')&lt;br /&gt;
			:attr('rowspan', (not compact) and '2' or nil)&lt;br /&gt;
			:wikitext(seedArg)&lt;br /&gt;
			:newline()&lt;br /&gt;
		addBorders(seedCell, top or otherbye, true, false)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local teamArg = getTeamArg(round, 'team', team)&lt;br /&gt;
	if isblank(teamArg) then&lt;br /&gt;
		teamArg = '&amp;amp;nbsp;'&lt;br /&gt;
	elseif emoji then&lt;br /&gt;
		teamArg = teamArg .. ' ' .. mw.getCurrentFrame():expandTemplate{ title = 'Emoji', args = { teamArg }}&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if not showSeed and (not hideSeeds) then&lt;br /&gt;
		tcs = tcs + 1&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local teamCell = row:tag('td')&lt;br /&gt;
		:css('background-color', '#f9f9f9')&lt;br /&gt;
		:css('padding', '0 2px')&lt;br /&gt;
		:attr('rowspan', (not compact) and '2' or nil)&lt;br /&gt;
		:attr('colspan', (tcs &amp;gt; 1) and tcs or nil)&lt;br /&gt;
		:wikitext(teamArg)&lt;br /&gt;
		:newline()&lt;br /&gt;
	addBorders(teamCell, top or otherbye, true, false)&lt;br /&gt;
&lt;br /&gt;
	local scoreCells = {}&lt;br /&gt;
	local wins, otherwins = 0, 0&lt;br /&gt;
	local sumscore, othersumscore = 0, 0&lt;br /&gt;
	local teamcolspan = tcs&lt;br /&gt;
	local hassum = false&lt;br /&gt;
	local glolfwinner = nil&lt;br /&gt;
	for s = 1, legs[round] do&lt;br /&gt;
		local fw = nil&lt;br /&gt;
		local agg = legs[round] &amp;gt; 1 and s == legs[round] and true or false&lt;br /&gt;
		local score1 = (agg and getScoreArg(round, team, 'agg') or nil) or &lt;br /&gt;
			getScoreArg(round, team, s) or ((legs[round] == 1) and getScoreArg(round, team)) or nil&lt;br /&gt;
		local score2 = (agg and getScoreArg(round, otherteam, 'agg') or nil) or &lt;br /&gt;
			getScoreArg(round, otherteam, s) or ((legs[round] == 1) and getScoreArg(round, otherteam)) or nil&lt;br /&gt;
		local showscore = true&lt;br /&gt;
		if agg and aggregate ~= '' and score1 == nil and hassum then&lt;br /&gt;
			score1 = (aggregate == 'score')	and sumscore &lt;br /&gt;
				or ((aggregate == 'legs' or aggregate == 'sets') and wins)&lt;br /&gt;
				or nil&lt;br /&gt;
		end&lt;br /&gt;
		if agg and aggregate ~= '' and score2 == nil and hassum then&lt;br /&gt;
			score2 = (aggregate == 'score')	and othersumscore&lt;br /&gt;
				or ((aggregate == 'legs' or aggregate == 'sets') and otherwins)&lt;br /&gt;
				or nil&lt;br /&gt;
		end&lt;br /&gt;
		if score1 == nil and score2 == nil then&lt;br /&gt;
			if hideomittedscores &amp;gt; 0 and s &amp;gt;= hideomittedscores then&lt;br /&gt;
				teamcolspan = teamcolspan + 1&lt;br /&gt;
				showscore = false&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			hassum = true&lt;br /&gt;
		end&lt;br /&gt;
		if showscore then&lt;br /&gt;
			local winner = scoreCompare(score1, score2, boldwinner ~= 'low' and (boldwinner ~= 'glolf' or s &amp;gt; 1))&lt;br /&gt;
			if boldwinner == 'glolf' then&lt;br /&gt;
				if not glolfwinner and winner &amp;gt; 0 then&lt;br /&gt;
					if winner == 1 then&lt;br /&gt;
						fw = 'bold'&lt;br /&gt;
					end&lt;br /&gt;
					glolfwinner = winner&lt;br /&gt;
				end&lt;br /&gt;
			else&lt;br /&gt;
				sumscore = sumScores(sumscore, score1)&lt;br /&gt;
				othersumscore = sumScores(othersumscore, score2)&lt;br /&gt;
				if winner == 1 then&lt;br /&gt;
					if boldwinner ~= '' or (agg and (aggregate == 'score' or aggregate == 'legs' or aggregate == 'sets')) then &lt;br /&gt;
						if agg and (aggregate == 'legs' or aggregate == 'sets') and (wins &amp;lt;= (legs[round] - 1)/2) then&lt;br /&gt;
						else&lt;br /&gt;
							fw = 'bold'&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
					if not agg then wins = wins + 1 end&lt;br /&gt;
				elseif winner == 2 then&lt;br /&gt;
					if not agg then otherwins = otherwins + 1 end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			scoreCells[s] = row:tag('td')&lt;br /&gt;
				:css('text-align', 'center')&lt;br /&gt;
				:css('background-color', getShadeArg(round, team, s))&lt;br /&gt;
				:css('font-weight', fw)&lt;br /&gt;
				:attr('rowspan', (not compact) and '2' or nil)&lt;br /&gt;
				:wikitext(score1)&lt;br /&gt;
				:newline()&lt;br /&gt;
			addBorders(scoreCells[s], top or otherbye, false, s &amp;gt; 1 and s == legs[round] and aggsep or nil)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if teamcolspan &amp;gt; 1 then&lt;br /&gt;
		teamCell:attr('colspan', teamcolspan)&lt;br /&gt;
	end&lt;br /&gt;
	if (boldwinner == 'glolf' and glolfwinner == 1) or (boldwinner ~= '' and wins &amp;gt; otherwins) then&lt;br /&gt;
		if (aggregate == 'legs' or aggregate == 'sets') and (wins &amp;lt;= (legs[round] - 1)/2) then&lt;br /&gt;
		else&lt;br /&gt;
			if seedCell then&lt;br /&gt;
				seedCell:css('font-weight', 'bold')&lt;br /&gt;
			end&lt;br /&gt;
			if teamCell then&lt;br /&gt;
				teamCell:css('font-weight', 'bold')&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderRound(count, r)&lt;br /&gt;
	local teams = math.pow(2, rounds - r + 1)&lt;br /&gt;
	local step = count / teams&lt;br /&gt;
	local topTeam = true -- is top row in match-up&lt;br /&gt;
	local topPair = true -- is top match-up in pair of match-ups&lt;br /&gt;
	local team = 1&lt;br /&gt;
	local group = 1&lt;br /&gt;
&lt;br /&gt;
	for i = 1, count, step do&lt;br /&gt;
		local offset, height, blank&lt;br /&gt;
&lt;br /&gt;
		local hideteam = false&lt;br /&gt;
		local otherhideteam = false&lt;br /&gt;
		local hideleftpath = false&lt;br /&gt;
		local hiderightpath = false&lt;br /&gt;
		if r &amp;lt;= byes then&lt;br /&gt;
			hideteam = isHidden(r, team)&lt;br /&gt;
			otherhideteam = isHidden(r, team % 2 == 0 and team-1 or team+1)&lt;br /&gt;
		end&lt;br /&gt;
		if (r == 1) and (RD1seedmap[team] &amp;lt;= 0) then&lt;br /&gt;
				hideteam = true&lt;br /&gt;
		end&lt;br /&gt;
		if (r &amp;gt; 1) and (r &amp;lt;= (byes + 1)) then&lt;br /&gt;
			hideleftpath = isHidden(r-1, 2*team-1) and isHidden(r-1, 2*team)&lt;br /&gt;
		end&lt;br /&gt;
		if (r == 2) and (RD1seedmap[2*team-1] &amp;lt;= 0 and RD1seedmap[2*team] &amp;lt;= 0) then&lt;br /&gt;
			hideleftpath = true&lt;br /&gt;
		end&lt;br /&gt;
		if compactFinal and (r == rounds) then&lt;br /&gt;
			hideleftpath = true&lt;br /&gt;
		end&lt;br /&gt;
		if (tonumber(args['RD' .. (r-1) .. '-RD' .. (r) .. '-path']) or 2) == 0 then&lt;br /&gt;
			hideleftpath = true&lt;br /&gt;
		end&lt;br /&gt;
		if (tonumber(args['RD' .. (r) .. '-RD' .. (r + 1) .. '-path']) or 2) == 0 then&lt;br /&gt;
			hiderightpath = true&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- empty space above or below&lt;br /&gt;
		if compact then&lt;br /&gt;
			offset = topTeam and i or i + 1&lt;br /&gt;
			height = step - 1&lt;br /&gt;
		-- leave room for groups for teams other than first and last&lt;br /&gt;
		elseif team == 1 or team == teams then&lt;br /&gt;
			offset = topTeam and i or i + 2&lt;br /&gt;
			height = step - 2&lt;br /&gt;
		else&lt;br /&gt;
			offset = topTeam and i + 1 or i + 2&lt;br /&gt;
			height = step - 3&lt;br /&gt;
		end&lt;br /&gt;
		if showThird and (r == rounds) and (not topTeam) then&lt;br /&gt;
			height = offset - offsetThird&lt;br /&gt;
		end&lt;br /&gt;
		if compactFinal and (r == (maxround - 1)) then&lt;br /&gt;
			if team == 2 then&lt;br /&gt;
				height = height - 3&lt;br /&gt;
			end&lt;br /&gt;
			if team == 3 then&lt;br /&gt;
				height = height - 1&lt;br /&gt;
				offset = offset + 1&lt;br /&gt;
				addBlank(offset-3, nil, 1, tonumber(hideSeeds and '2' or '3') + legs[r])&lt;br /&gt;
				addBlank(offset-4)&lt;br /&gt;
				addHeading(rows[offset-4], r + 1, getRoundName(r+1), legs[r] - legs[r+1])&lt;br /&gt;
				local b = addBlank(offset-4, {&lt;br /&gt;
					['border-color'] = 'black',&lt;br /&gt;
					['border-style']= 'solid',&lt;br /&gt;
					['border-width']= '0'}, 2)&lt;br /&gt;
				b:css('border-right-width', '2px')&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if height &amp;gt; 0 then&lt;br /&gt;
			local pad = 0&lt;br /&gt;
			local betweenTeams = (topTeam == false and topPair == true) or (topTeam == true and topPair == false)&lt;br /&gt;
			if compactFinal and (r == maxround - 1) then&lt;br /&gt;
				betweenTeams = false&lt;br /&gt;
			end&lt;br /&gt;
			if compactFinal and (r == maxround - 1) and legs[r+1] &amp;gt; legs[r] then&lt;br /&gt;
				pad = legs[r+1] - legs[r]&lt;br /&gt;
			end&lt;br /&gt;
			if compact and betweenTeams then&lt;br /&gt;
				addBlank(offset, nil, height, 1)&lt;br /&gt;
				if topPair then&lt;br /&gt;
					blank = addBlank(offset, nil, 2*height, tonumber(hideSeeds and '1' or '2') + legs[r] + pad)&lt;br /&gt;
					if args['RD' .. r .. '-group' .. group] then&lt;br /&gt;
						blank:wikitext(args['RD' .. r .. '-group' .. group])&lt;br /&gt;
						blank:css('text-align', 'center')&lt;br /&gt;
					end&lt;br /&gt;
					group = group + 1&lt;br /&gt;
				end&lt;br /&gt;
				blank = addBlank(offset, &lt;br /&gt;
				{['border-width'] = '0',&lt;br /&gt;
				['border-style'] = 'solid',&lt;br /&gt;
				['border-color'] = 'black'},&lt;br /&gt;
				height, 1)&lt;br /&gt;
			else&lt;br /&gt;
				blank = addBlank(offset, &lt;br /&gt;
				{['border-width'] = '0',&lt;br /&gt;
				['border-style'] = 'solid',&lt;br /&gt;
				['border-color'] = 'black'},&lt;br /&gt;
				height, tonumber(hideSeeds and '3' or '4') + legs[r] + pad)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		-- add bracket&lt;br /&gt;
		local j = topTeam and i + step - (compact and 1 or 2) or i&lt;br /&gt;
		-- add left path&lt;br /&gt;
		addPath(j, r, topTeam, true, hideleftpath and '0' or '2px')&lt;br /&gt;
		if hideteam then&lt;br /&gt;
			addBlank(j, nil, (not compact) and 2 or nil, tonumber(hideSeeds and '1' or '2') + legs[r])&lt;br /&gt;
		elseif rows[j] then&lt;br /&gt;
			if compactFinal and (r == maxround) then&lt;br /&gt;
				renderTeam(rows[j], r, team, topTeam, otherhideteam, legs[r-1] - legs[r])&lt;br /&gt;
			elseif compactFinal and (r == maxround - 1) then&lt;br /&gt;
				renderTeam(rows[j], r, team, topTeam, otherhideteam, legs[r+1] - legs[r])&lt;br /&gt;
			else&lt;br /&gt;
				renderTeam(rows[j], r, team, topTeam, otherhideteam)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		local rightPath = addPath(j, r, topTeam, false, (hiderightpath or hideteam) and '0' or '2px')&lt;br /&gt;
		if not topTeam then topPair = not topPair end&lt;br /&gt;
		if not topPair and r &amp;lt; maxround and (not (hiderightpath or hideteam)) then&lt;br /&gt;
			if blank then blank:css('border-right-width', '2px') end&lt;br /&gt;
			rightPath:css('border-right-width', '2px')&lt;br /&gt;
		end&lt;br /&gt;
		if compactFinal and (r == maxround) then&lt;br /&gt;
			local prop = (team == 1) and 'border-bottom-width' or 'border-top-width'&lt;br /&gt;
			rightPath:css('border-right-width', '2px')&lt;br /&gt;
				:css(prop, '2px')&lt;br /&gt;
		end&lt;br /&gt;
		team = team + 1&lt;br /&gt;
		topTeam = not topTeam&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderGroups(count, round)&lt;br /&gt;
	local roundFromLast = rounds - round + 1&lt;br /&gt;
	local groups = math.pow(2, roundFromLast - 2)&lt;br /&gt;
	local step = count / groups&lt;br /&gt;
	local group = 1&lt;br /&gt;
	local offset = 0&lt;br /&gt;
	local team = 0&lt;br /&gt;
	local wdef = (tonumber(args['RD' .. (round) .. '-RD' .. (round + 1) .. '-path']) or 2) .. 'px'&lt;br /&gt;
	local w = wdef&lt;br /&gt;
&lt;br /&gt;
	for r = 1,round do&lt;br /&gt;
		offset = offset + (hideSeeds and 3 or 4) + legs[r]&lt;br /&gt;
	end&lt;br /&gt;
	for i = step / 2, count, step do&lt;br /&gt;
		local name = 'RD' .. round .. '-group' .. group&lt;br /&gt;
		addBlank(i, {['height'] = '7px'})&lt;br /&gt;
		addBlank(i+1, {['height'] = '7px'})&lt;br /&gt;
		addBlank(i, {['text-align'] = 'center'}, 2, offset-2)&lt;br /&gt;
			:wikitext(args[name])&lt;br /&gt;
			:newline()&lt;br /&gt;
		if (round &amp;lt;= byes) then&lt;br /&gt;
			team = i/(step/2)&lt;br /&gt;
			w = isHidden(round, 2*team-1) and isHidden(round, 2*team) and '0' or wdef&lt;br /&gt;
		end&lt;br /&gt;
		if (round &amp;lt; maxround) then&lt;br /&gt;
			addBlank(i, {&lt;br /&gt;
				['border-color'] = 'black',&lt;br /&gt;
				['border-style'] = 'solid', &lt;br /&gt;
				['border-width'] = '0 ' .. w .. ' 0 0'})&lt;br /&gt;
		else&lt;br /&gt;
			addBlank(i)&lt;br /&gt;
		end&lt;br /&gt;
		if (round &amp;lt;= byes) then&lt;br /&gt;
			team = team + 1&lt;br /&gt;
			w = isHidden(round, 2*team-1) and isHidden(round, 2*team) and '0' or wdef&lt;br /&gt;
		end&lt;br /&gt;
		if (round &amp;lt; maxround) then&lt;br /&gt;
			addBlank(i+1, {&lt;br /&gt;
				['border-color'] = 'black',&lt;br /&gt;
				['border-style'] = 'solid', &lt;br /&gt;
				['border-width'] = '0 ' .. w .. ' 0 0'})&lt;br /&gt;
		else&lt;br /&gt;
			addBlank(i+1)&lt;br /&gt;
		end&lt;br /&gt;
		group = group + 1&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getThirdOffset()&lt;br /&gt;
	local offset = (compact and 1 or 3) * (math.pow(2, rounds) - math.pow(2, rounds-3)) - (compact and 2 or 4)&lt;br /&gt;
	if rounds &amp;lt; 4 then&lt;br /&gt;
		offset = compact and 8 or 17&lt;br /&gt;
		if rounds &amp;lt; 3 then&lt;br /&gt;
			offset = compact and 6 or 10&lt;br /&gt;
			if rounds &amp;lt; 2 then&lt;br /&gt;
				offset = compact and 4 or 7&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return offset&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderThird(count)&lt;br /&gt;
	local k = offsetThird&lt;br /&gt;
	local row = rows[k]&lt;br /&gt;
	local blank&lt;br /&gt;
	if rounds &amp;lt; 2 then&lt;br /&gt;
		blank = addBlank(k-1, {['height'] = '7px'})&lt;br /&gt;
	end&lt;br /&gt;
	blank = addBlank(k, rounds &amp;lt; 2 and {['height'] = '7px'} or nil)&lt;br /&gt;
	addHeading(row, rounds + 1, args['3rd'] or 'Third place')&lt;br /&gt;
	if rounds &amp;lt; 2 then&lt;br /&gt;
		for i = 1,(compact and 1 or 2) do&lt;br /&gt;
			blank = addBlank(k+i, {['height'] = '7px'})&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	k = k + (compact and 2 or 3)&lt;br /&gt;
	for i = 1,2 do&lt;br /&gt;
		row = rows[k]&lt;br /&gt;
		blank = addBlank(k, rounds &amp;lt; 2 and {['height'] = '7px'} or nil)&lt;br /&gt;
		if row then&lt;br /&gt;
			renderTeam(row, rounds + 1, i, i == 1, false)&lt;br /&gt;
		end&lt;br /&gt;
		if rounds &amp;lt; 2 and not compact then&lt;br /&gt;
			blank = addBlank(k+1, {['height'] = '7px'})&lt;br /&gt;
		end&lt;br /&gt;
		k = k + (compact and 1 or 2)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function maskRows(tbl, count, offsetcount)&lt;br /&gt;
	local rmin = 1&lt;br /&gt;
	local rmax = count&lt;br /&gt;
	for i = rmin, rmax do&lt;br /&gt;
		mask[i] = false&lt;br /&gt;
	end&lt;br /&gt;
	if showThird then&lt;br /&gt;
		for i = offsetThird,(offsetThird+ (compact and 3 or 5)) do&lt;br /&gt;
			rmax = (i &amp;gt; rmax) and i or rmax&lt;br /&gt;
			mask[i] = true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for r = 1, maxround do&lt;br /&gt;
		local teams = math.pow(2, rounds - r + 1)&lt;br /&gt;
		local step = count / teams&lt;br /&gt;
		local topTeam = true -- is top row in match-up&lt;br /&gt;
		local team = 1&lt;br /&gt;
&lt;br /&gt;
		for i = 1, count, step do&lt;br /&gt;
			local offset, height, blank&lt;br /&gt;
			local hideteam = false&lt;br /&gt;
			if r &amp;lt;= byes then&lt;br /&gt;
				hideteam = isHidden(r, team)&lt;br /&gt;
			end&lt;br /&gt;
			if (r == 1) and (RD1seedmap[team] &amp;lt;= 0) then&lt;br /&gt;
				hideteam = true&lt;br /&gt;
			end&lt;br /&gt;
			if not hideteam then&lt;br /&gt;
				local j = topTeam and i + step - (compact and 1 or 2) or i&lt;br /&gt;
				mask[j] = true&lt;br /&gt;
			end&lt;br /&gt;
			team = team + 1&lt;br /&gt;
			topTeam = not topTeam&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	for r = 1, maxround do&lt;br /&gt;
		local roundFromLast = rounds - r + 1&lt;br /&gt;
		local groups = math.pow(2, roundFromLast - 2)&lt;br /&gt;
		local step = count / groups&lt;br /&gt;
		local group = 1&lt;br /&gt;
		for i = step / 2, count, step do&lt;br /&gt;
			if args['RD' .. r .. '-group' .. group] then&lt;br /&gt;
				mask[i] = true&lt;br /&gt;
				mask[i+1] = true&lt;br /&gt;
			end&lt;br /&gt;
			group = group + 1&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local mmin, mmax = rmax, rmin&lt;br /&gt;
	for i = rmin, rmax do&lt;br /&gt;
		if mask[i] == true then&lt;br /&gt;
			mmin = (i &amp;lt; mmin) and i or mmin&lt;br /&gt;
			mmax = (i &amp;gt; mmax) and i or mmax&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for i = mmin, mmax do&lt;br /&gt;
		rows[i] = addTableRow(tbl)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderTree(tbl)&lt;br /&gt;
	-- create 3 or 1 rows for every team&lt;br /&gt;
	local count = math.pow(2, rounds) * (compact and 1 or 3)&lt;br /&gt;
	local offsetcount = 2 * (compact and 1 or 3) + (compact and 2 or 3)&lt;br /&gt;
	offsetThird = getThirdOffset()&lt;br /&gt;
	maskRows(tbl, count, offsetcount)&lt;br /&gt;
	if showThird then&lt;br /&gt;
		for i = (count+1), (offsetcount + offsetThird) do&lt;br /&gt;
			if (rounds &amp;gt; 1) then&lt;br /&gt;
				local blank = addBlank(i, nil, 1, tonumber(hideSeeds and '3' or '4') + legs[1])&lt;br /&gt;
				if compact and (rounds &amp;gt; 2) then&lt;br /&gt;
					blank = addBlank(i, nil, 1, tonumber(hideSeeds and '3' or '4') + legs[1])&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if not compact then&lt;br /&gt;
		-- fill rows with groups&lt;br /&gt;
		for r = 1, rounds - 1 do&lt;br /&gt;
			renderGroups(count, r)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- fill rows with bracket&lt;br /&gt;
	for r = 1, maxround do&lt;br /&gt;
		renderRound(count, r)&lt;br /&gt;
	end&lt;br /&gt;
	if showThird then&lt;br /&gt;
		renderThird(count, compact)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderHeadings(tbl)&lt;br /&gt;
	local titleRow = addTableRow((not hideHeadings) and tbl or mw.html.create('table'))&lt;br /&gt;
	local widthRow = addTableRow(tbl)&lt;br /&gt;
	for r = 1, (compactFinal and (maxround-1) or maxround) do&lt;br /&gt;
		titleRow:tag('td')&lt;br /&gt;
		widthRow:tag('td'):css('width', r &amp;gt; 1 and '5px' or '1px')&lt;br /&gt;
		if compactFinal and r == (maxround-1) then&lt;br /&gt;
			addHeading(titleRow, r, getRoundName(r), legs[r+1] - legs[r])&lt;br /&gt;
		else&lt;br /&gt;
			addHeading(titleRow, r, getRoundName(r) )&lt;br /&gt;
		end&lt;br /&gt;
		local seedCell&lt;br /&gt;
		if (not hideSeeds) then&lt;br /&gt;
			seedCell = widthRow:tag('td'):css('width', getWidth('seed', '25px'))&lt;br /&gt;
		end&lt;br /&gt;
		local teamCell = widthRow:tag('td'):css('width', getWidth('team', '150px'))&lt;br /&gt;
		local scoreCells = {}&lt;br /&gt;
		local legsr = legs[r]&lt;br /&gt;
		if compactFinal and r == (maxround-1) then&lt;br /&gt;
			legsr = legs[r+1] &amp;gt; legs[r] and legs[r+1] or legs[r]&lt;br /&gt;
		end&lt;br /&gt;
		for s = 1, legsr do&lt;br /&gt;
			scoreCells[s] = widthRow:tag('td'):css('width', getWidth('score', '25px'))&lt;br /&gt;
		end&lt;br /&gt;
		titleRow:tag('td')&lt;br /&gt;
		widthRow:tag('td'):css('width', r &amp;lt; rounds and '5px' or '1px')&lt;br /&gt;
&lt;br /&gt;
		if compact then&lt;br /&gt;
			teamCell:css('height', '7px')&lt;br /&gt;
		else&lt;br /&gt;
			if seedCell then&lt;br /&gt;
				seedCell:wikitext('&amp;amp;nbsp;')&lt;br /&gt;
			end&lt;br /&gt;
			teamCell:wikitext('&amp;amp;nbsp;')&lt;br /&gt;
			for s = 1, legs[r] do&lt;br /&gt;
				scoreCells[s]:wikitext('&amp;amp;nbsp;')&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	parseArgs(frame)&lt;br /&gt;
	rounds = tonumber(args.rounds) or 2&lt;br /&gt;
	maxround = tonumber(args.maxround) or rounds&lt;br /&gt;
	local teams = math.pow(2, rounds)&lt;br /&gt;
	compact = (args['compact'] and (args['compact'] == 'yes' or args['compact'] == 'y'))&lt;br /&gt;
	compactFinal = ((rounds &amp;gt; 4) and compact and args['compact-final'] and (args['compact-final'] == 'yes' or args['compact-final'] == 'y'))&lt;br /&gt;
	sepwidth = tonumber(args['sepwidth'] or ((args.sets or args.legs) and 1) or (compact and 1) or 2) or 1&lt;br /&gt;
	aggregate = (args['aggregate'] or ''):lower()&lt;br /&gt;
	aggsep = args['aggsep'] or args['aggregate'] or nil&lt;br /&gt;
	boldwinner = args['boldwinner'] or args['bold_winner'] or ''&lt;br /&gt;
	local autoSeeds = (args['autoseeds'] and (args['autoseeds'] == 'yes' or args['autoseeds'] == 'y'))&lt;br /&gt;
	hideSeeds = (args['seeds'] and (args['seeds'] == 'no' or args['seeds'] == 'n'))&lt;br /&gt;
	showSeeds = (args['seeds'] and (args['seeds'] == 'yes' or args['seeds'] == 'y'))&lt;br /&gt;
	byes = (args['byes'] and (args['byes'] == 'yes' or args['byes'] == 'y') and 1) or (tonumber(args['byes'] or '0') or 0)&lt;br /&gt;
	hideomittedscores = (args['hideomittedscores'] and (args['hideomittedscores'] == 'yes' or args['hideomittedscores'] == 'y') and 1) or (tonumber(args['hideomittedscores'] or '0') or 0)&lt;br /&gt;
	hideHeadings = (args['headings'] and (args['headings'] == 'no' or args['headings'] == 'n'))&lt;br /&gt;
	showThird = isnotblank(args['3rd']) or isnotblank(args['3rd-team1']) or isnotblank(args['3rd-team2'])&lt;br /&gt;
	local align = (args['float'] or args['align'] or ''):lower()&lt;br /&gt;
	local clear = args['clear'] or 'none'&lt;br /&gt;
	emoji = (args['emoji'] and (args['emoji'] == 'yes' or args['emoji'] == 'y'))&lt;br /&gt;
	parseSeedmap(args['RD1-omit'])&lt;br /&gt;
	parseLegs(args.sets or args.legs)&lt;br /&gt;
	&lt;br /&gt;
	if autoSeeds then&lt;br /&gt;
		-- set default seeds for round 1&lt;br /&gt;
		local seeds = getSeeds()&lt;br /&gt;
		for i = 1, table.getn(seeds) do&lt;br /&gt;
			local argname = getTeamArgName(1, 'seed', i)&lt;br /&gt;
			if not args[argname] then&lt;br /&gt;
				args[argname] = seeds[i]&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- create the table&lt;br /&gt;
	local tbl = mw.html.create('table')&lt;br /&gt;
		:css('border-style', 'none')&lt;br /&gt;
		:css('font-size', '90%')&lt;br /&gt;
		:css('border-collapse', 'separate')&lt;br /&gt;
		:css('border-spacing', '0')&lt;br /&gt;
		:attr('cellpadding', '0')&lt;br /&gt;
&lt;br /&gt;
	if (args['nowrap'] and (args['nowrap'] == 'yes' or args['nowrap'] == 'y')) then&lt;br /&gt;
		tbl:css('white-space', 'nowrap')&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if align == 'right' then&lt;br /&gt;
		tbl:css('float', 'right')&lt;br /&gt;
		if clear ~= 'none' and clear ~= 'no' and clear ~= 'n' then&lt;br /&gt;
			tbl:css('clear', 'right')&lt;br /&gt;
		end&lt;br /&gt;
		tbl:css('margin', '1em 0 1em 2em')&lt;br /&gt;
	elseif align == 'left' then&lt;br /&gt;
		tbl:css('float', 'left')&lt;br /&gt;
		if clear ~= 'none' and clear ~= 'no' and clear ~= 'n' then&lt;br /&gt;
			tbl:css('clear', 'left')&lt;br /&gt;
		end&lt;br /&gt;
		tbl:css('margin', '1em 2em 1em 0')&lt;br /&gt;
	elseif align == 'center' or align == 'centre' then&lt;br /&gt;
		tbl:css('margin', '1em auto')&lt;br /&gt;
	else&lt;br /&gt;
		tbl:css('margin', '1em 2em 1em 1em')&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	renderHeadings(tbl)&lt;br /&gt;
	renderTree(tbl)&lt;br /&gt;
	return tostring(tbl) .. tcats&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.teamBracket(frame)&lt;br /&gt;
	return p.main(frame)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Pokeylope</name></author>
	</entry>
	<entry>
		<id>https://glolfwiki.sibr.dev/index.php?title=Module:Team_bracket&amp;diff=234</id>
		<title>Module:Team bracket</title>
		<link rel="alternate" type="text/html" href="https://glolfwiki.sibr.dev/index.php?title=Module:Team_bracket&amp;diff=234"/>
		<updated>2021-06-06T22:01:21Z</updated>

		<summary type="html">&lt;p&gt;Pokeylope: Add emoji&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- https://en.wikipedia.org/wiki/Module:Team_bracket&lt;br /&gt;
--&lt;br /&gt;
-- This module implements many bracket templates&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
local args = {}&lt;br /&gt;
local rows = {}&lt;br /&gt;
local mask = {}&lt;br /&gt;
local rounds&lt;br /&gt;
local maxround&lt;br /&gt;
local legs = {}&lt;br /&gt;
local compact&lt;br /&gt;
local byes&lt;br /&gt;
local hideSeeds&lt;br /&gt;
local showSeeds&lt;br /&gt;
local hideHeadings&lt;br /&gt;
local showThird&lt;br /&gt;
local offsetThird&lt;br /&gt;
local compactFinal&lt;br /&gt;
local sepwidth&lt;br /&gt;
local aggsep&lt;br /&gt;
local aggregate&lt;br /&gt;
local boldwinner&lt;br /&gt;
local hideomittedscores&lt;br /&gt;
local RD1seedmap = {}&lt;br /&gt;
local tcats = ''&lt;br /&gt;
&lt;br /&gt;
local function isnotblank(s)&lt;br /&gt;
	return s and s ~= ''&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function isblank(s)&lt;br /&gt;
	return (not s) or (s == '')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function sumScores(s1, s2)&lt;br /&gt;
	s1 = mw.ustring.gsub(s1 or '', '^[\'%s]*([%d%.]*).-$', '%1')&lt;br /&gt;
	s2 = mw.ustring.gsub(s2 or '', '^[\'%s]*([%d%.]*).-$', '%1')&lt;br /&gt;
	if s1 ~= '' and s2 ~= '' then&lt;br /&gt;
		return tonumber(s1) + tonumber(s2)&lt;br /&gt;
	end&lt;br /&gt;
	return s1&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function scoreCompare(s1,s2,highwin)&lt;br /&gt;
	local ps1 = mw.ustring.gsub(s1 or '', '^[\'%s]*([%d%.]*)[\'%s]*%([\'%s]*([%d%.]*)[\'%s]*%).-$', '%2')&lt;br /&gt;
	local ps2 = mw.ustring.gsub(s2 or '', '^[\'%s]*([%d%.]*)[\'%s]*%([\'%s]*([%d%.]*)[\'%s]*%).-$', '%2')&lt;br /&gt;
	s1 = mw.ustring.gsub(s1 or '', '^[\'%s]*([%d%.]*).-$', '%1')&lt;br /&gt;
	s2 = mw.ustring.gsub(s2 or '', '^[\'%s]*([%d%.]*).-$', '%1')&lt;br /&gt;
	&lt;br /&gt;
	if s1 ~= '' and s2 ~= '' then&lt;br /&gt;
		s1 = tonumber(s1)&lt;br /&gt;
		s2 = tonumber(s2)&lt;br /&gt;
		if s1 and s2 then&lt;br /&gt;
			if (s1 == s2) then&lt;br /&gt;
				ps1 = tonumber(ps1)&lt;br /&gt;
				ps2 = tonumber(ps2)&lt;br /&gt;
				if ps1 and ps2 then&lt;br /&gt;
					s1 = ps1&lt;br /&gt;
					s2 = ps2&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if highwin then&lt;br /&gt;
				return ((s1 &amp;gt; s2) and 1) or ((s1 &amp;lt; s2) and 2) or 0&lt;br /&gt;
			else&lt;br /&gt;
				return ((s2 &amp;gt; s1) and 1) or ((s2 &amp;lt; s1) and 2) or 0&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function parseArgs(frame)&lt;br /&gt;
	local fargs = frame.args&lt;br /&gt;
	local pargs = frame:getParent().args;&lt;br /&gt;
&lt;br /&gt;
	local r = tonumber(fargs.rounds or '') or tonumber(pargs.rounds or '') or 2&lt;br /&gt;
	local teams = math.pow(2, r)&lt;br /&gt;
	local rdstr = 'RD' .. tostring(r)&lt;br /&gt;
	local rdbstr = 'RD' .. tostring(r) .. 'b'&lt;br /&gt;
	local rdp1str = 'RD' .. tostring(r+1)&lt;br /&gt;
&lt;br /&gt;
	for i=1,2 do&lt;br /&gt;
		local targs = (i == 1) and pargs or fargs&lt;br /&gt;
		for k,v in pairs(targs) do&lt;br /&gt;
			if type(k) == 'string' then&lt;br /&gt;
				if k:find('^[R3][Dr][d1-9]b?%-[a-z][a-z]*00*') then&lt;br /&gt;
					k = mw.ustring.gsub(k, '^([R3][Dr][d1-9]b?%-[a-z][a-z]*)00*', '%1')&lt;br /&gt;
					if (teams &amp;lt; 10) then &lt;br /&gt;
						tcats = tcats .. '[[Category:Pages using a team bracket with deprecated syntax|P]]'&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				if k:find('^' .. rdp1str) then&lt;br /&gt;
					k = mw.ustring.gsub(k, '^' .. rdp1str, '3rd')&lt;br /&gt;
					tcats = tcats .. '[[Category:Pages using a team bracket with deprecated syntax|3]]'&lt;br /&gt;
				elseif k:find('^' .. rdbstr) then&lt;br /&gt;
					k = mw.ustring.gsub(k, '^' .. rdbstr, '3rd')&lt;br /&gt;
				elseif k:find('^' .. rdstr .. '%-[a-z][a-z]*3') then&lt;br /&gt;
					k = mw.ustring.gsub(k, '^' .. rdstr .. '(%-[a-z][a-z]*)3', '3rd%11')&lt;br /&gt;
				elseif k:find('^' .. rdstr .. '%-[a-z][a-z]*4') then&lt;br /&gt;
					k = mw.ustring.gsub(k, '^' .. rdstr .. '(%-[a-z][a-z]*)4', '3rd%12')&lt;br /&gt;
				elseif  k:find('^Consol') then&lt;br /&gt;
					k = mw.ustring.gsub(k, '^Consol', '3rd')&lt;br /&gt;
					tcats = tcats .. '[[Category:Pages using a team bracket with deprecated syntax|3]]'&lt;br /&gt;
				elseif k:find('^group[0-9]') then&lt;br /&gt;
					tcats = tcats .. '[[Category:Pages using a team bracket with deprecated syntax|G]]'&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			args[k] = v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if (args['byes'] and (args['byes'] == 'yes' or args['byes'] == 'y')) then&lt;br /&gt;
		tcats = tcats .. '[[Category:Pages using a team bracket with deprecated syntax|B]]'&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function parseSeedmap(s)&lt;br /&gt;
	s = mw.text.split((s or '0') .. '/', '[%s]*/[%s]*')&lt;br /&gt;
	local teams = math.pow(2, rounds)&lt;br /&gt;
	for r=1,teams do&lt;br /&gt;
		RD1seedmap[r] = 1&lt;br /&gt;
	end&lt;br /&gt;
	for r=1,#s do&lt;br /&gt;
		if tonumber(s[r] or 'x') then&lt;br /&gt;
			RD1seedmap[tonumber(s[r])] = 0&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local c = 1&lt;br /&gt;
	for r=1,teams do&lt;br /&gt;
		if RD1seedmap[r] &amp;gt; 0 then&lt;br /&gt;
			RD1seedmap[r] = c&lt;br /&gt;
			c = c + 1&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function parseLegs(s)&lt;br /&gt;
	s = mw.text.split((s or '1') .. '/', '[%s]*/[%s]*')&lt;br /&gt;
	if aggregate == 'n' or aggregate == 'no' or aggregate == '0' then&lt;br /&gt;
		aggregate = ''&lt;br /&gt;
	end&lt;br /&gt;
	local n = showThird and (rounds + 1) or (rounds)&lt;br /&gt;
	local lastlegs = nil&lt;br /&gt;
	for r=1,n do&lt;br /&gt;
		if s[r] ~= nil and s[r] ~= '' and tonumber(s[r]) then&lt;br /&gt;
			legs[r] = tonumber(s[r])&lt;br /&gt;
		elseif lastlegs then&lt;br /&gt;
			legs[r] = lastlegs&lt;br /&gt;
		else&lt;br /&gt;
			legs[r] = 1&lt;br /&gt;
		end&lt;br /&gt;
		lastlegs = legs[r]&lt;br /&gt;
		if legs[r] &amp;gt; 1 and aggregate ~= '' then&lt;br /&gt;
			legs[r] = legs[r] + 1&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getSeeds()&lt;br /&gt;
	local seeds = {1, 2}&lt;br /&gt;
	local count = 2&lt;br /&gt;
	local before = false&lt;br /&gt;
	for r = 2, rounds do&lt;br /&gt;
		local max = math.pow(2, r)&lt;br /&gt;
		for i = 1, count do&lt;br /&gt;
			local pos = i * 2&lt;br /&gt;
			if before then pos = pos - 1 end&lt;br /&gt;
			table.insert(seeds, pos, max - seeds[i * 2 - 1] + 1)&lt;br /&gt;
			before = not before&lt;br /&gt;
		end&lt;br /&gt;
		count = count * 2&lt;br /&gt;
	end&lt;br /&gt;
	return seeds&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function addTableRow(tbl)&lt;br /&gt;
	return tbl:tag('tr')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function addBlank(i, css, rowspan, colspan)&lt;br /&gt;
	local row = rows[i]&lt;br /&gt;
	rowspan = rowspan or 1&lt;br /&gt;
	local jmax = i + rowspan - 1&lt;br /&gt;
	for j = i, jmax do&lt;br /&gt;
		if rows[j] == nil then&lt;br /&gt;
			rowspan = rowspan - 1&lt;br /&gt;
		elseif row == nil then&lt;br /&gt;
			row = rows[j]&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local cell = row and row:tag('td') or mw.html.create('td')&lt;br /&gt;
	if rowspan and rowspan &amp;gt; 1 then&lt;br /&gt;
		cell:attr('rowspan', rowspan)&lt;br /&gt;
	end&lt;br /&gt;
	if colspan and colspan &amp;gt; 1 then&lt;br /&gt;
		cell:attr('colspan', colspan)&lt;br /&gt;
	end&lt;br /&gt;
	if css then&lt;br /&gt;
		cell:css(css)&lt;br /&gt;
	end&lt;br /&gt;
	return cell&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function addBorders(cell, topcell, seedorteam, extrasep)&lt;br /&gt;
	if sepwidth &amp;gt; 1 then topcell = true end&lt;br /&gt;
	if seedorteam then&lt;br /&gt;
		cell:css('border', '1px solid #aaa')&lt;br /&gt;
			:css('border-top-width', topcell and '1px' or '0')&lt;br /&gt;
	else&lt;br /&gt;
		cell:css('border-color', '#aaa')&lt;br /&gt;
			:css('border-style', 'solid')&lt;br /&gt;
			:css('border-top-width', topcell and '1px' or '0')&lt;br /&gt;
			:css('border-left-width', (extrasep and '1px') or ((sepwidth &amp;gt; 1) and '1px') or '0')&lt;br /&gt;
			:css('border-right-width', '1px')&lt;br /&gt;
			:css('border-bottom-width', '1px')&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function addHeading(row, r, text, pad)&lt;br /&gt;
	pad = (pad == nil or pad &amp;lt; 0) and 0 or pad&lt;br /&gt;
	row:tag('td')&lt;br /&gt;
		:attr('colspan', tonumber(hideSeeds and '1' or '2') + legs[r] + pad)&lt;br /&gt;
		:css('text-align', 'center')&lt;br /&gt;
		:css('border', '1px solid #aaa')&lt;br /&gt;
		:css('background-color', args['RD-shade'] or '#f2f2f2')&lt;br /&gt;
		:wikitext(text)&lt;br /&gt;
		:newline()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getWidth(param, default)&lt;br /&gt;
	local arg = args[param .. '-width']&lt;br /&gt;
	if isblank(arg) then&lt;br /&gt;
		arg = default&lt;br /&gt;
	end&lt;br /&gt;
	if tonumber(arg) ~= nil then&lt;br /&gt;
		arg = arg .. 'px'&lt;br /&gt;
	end&lt;br /&gt;
	return arg&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getTeamArgName(round, type, team)&lt;br /&gt;
	if round &amp;gt; rounds then&lt;br /&gt;
		return string.format('3rd-%s%d', type, team)&lt;br /&gt;
	else&lt;br /&gt;
		if (round == 1) then&lt;br /&gt;
			team = RD1seedmap[team]&lt;br /&gt;
			if team == 0 then&lt;br /&gt;
				return 'NIL'&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return string.format('RD%d-%s%d', round, type, team)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getShadeArg(round, team, s)&lt;br /&gt;
	local argname = getTeamArgName(round, 'shade', team) .. (s and ('-' .. s) or '')&lt;br /&gt;
	local value = args[argname]&lt;br /&gt;
	if isblank(value) then&lt;br /&gt;
		return '#f9f9f9'&lt;br /&gt;
	end&lt;br /&gt;
	return value&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getScoreArg(round, team, s)&lt;br /&gt;
	local argname = getTeamArgName(round, 'score', team) .. (s and ('-' .. s) or '')&lt;br /&gt;
	local value = args[argname]&lt;br /&gt;
	return value&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getTeamArg(round, type, team)&lt;br /&gt;
	local argname = getTeamArgName(round, type, team)&lt;br /&gt;
	local value = args[argname]&lt;br /&gt;
	if isblank(value) then&lt;br /&gt;
		return ''&lt;br /&gt;
	end&lt;br /&gt;
	if mw.ustring.find(value, '[%s]*&amp;lt;[%s/]*[Bb][Rr][%s/]*&amp;gt;[%s ]*&amp;amp;[Nn][Bb][Ss][Pp];[%s]*') then&lt;br /&gt;
		tcats = tcats .. '[[Category:Pages using a team bracket with nbsp]]'&lt;br /&gt;
	end&lt;br /&gt;
	return mw.ustring.gsub(value, '[%s]*&amp;lt;[%s/]*[Bb][Rr][%s/]*&amp;gt;[%s ]*&amp;amp;[Nn][Bb][Ss][Pp];[%s]*', '&amp;lt;br/&amp;gt;')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function isHidden(r, team)&lt;br /&gt;
	return isblank( getTeamArg(r, 'team', team) )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getRoundName(round)&lt;br /&gt;
	local name = args['RD' .. round]&lt;br /&gt;
	if isnotblank(name) then&lt;br /&gt;
		return name&lt;br /&gt;
	end&lt;br /&gt;
	local roundFromLast = rounds - round + 1&lt;br /&gt;
	if roundFromLast == 1 then&lt;br /&gt;
		return &amp;quot;Finals&amp;quot;&lt;br /&gt;
	elseif roundFromLast == 2 then&lt;br /&gt;
		return &amp;quot;Semifinals&amp;quot;&lt;br /&gt;
	elseif roundFromLast == 3 then&lt;br /&gt;
		return &amp;quot;Quarterfinals&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;quot;Round of &amp;quot; .. math.pow(2, roundFromLast)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function addPath(index, round, top, left, w)&lt;br /&gt;
	local prop = top and 'border-bottom-width' or 'border-top-width'&lt;br /&gt;
	if left and round == 1 then&lt;br /&gt;
		if compact then&lt;br /&gt;
			addBlank(index)&lt;br /&gt;
		else&lt;br /&gt;
			addBlank(index, {['height'] = '7px'})&lt;br /&gt;
			addBlank(index+1, {['height'] = '7px'})&lt;br /&gt;
		end&lt;br /&gt;
		return nil&lt;br /&gt;
	else&lt;br /&gt;
		local cell = addBlank(index, &lt;br /&gt;
			{['border-width'] = '0',&lt;br /&gt;
			['border-style'] = 'solid',&lt;br /&gt;
			['border-color'] = 'black'}, (not compact) and 2 or 1)&lt;br /&gt;
		if left or round &amp;lt; maxround and not left then&lt;br /&gt;
			cell:css(prop, w or '2px')&lt;br /&gt;
		end&lt;br /&gt;
		return cell&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderTeam(row, round, team, top, otherbye, pad)&lt;br /&gt;
	pad = (pad == nil or pad &amp;lt; 0) and 0 or pad&lt;br /&gt;
	tcs = pad + 1&lt;br /&gt;
	local seedCell&lt;br /&gt;
	local seedArg = getTeamArg(round, 'seed', team)&lt;br /&gt;
	-- seed value for the paired team&lt;br /&gt;
	local otherteam = team % 2 == 0 and team-1 or team+1&lt;br /&gt;
	local pairSeedArg = otherbye and '' &lt;br /&gt;
		or getTeamArg(round, 'seed', otherteam)&lt;br /&gt;
	-- show seed if seed is defined for either or both&lt;br /&gt;
	local showSeed = showSeeds&lt;br /&gt;
		or isnotblank(seedArg)&lt;br /&gt;
		or isnotblank(pairSeedArg)&lt;br /&gt;
	if showSeed and (not hideSeeds) then&lt;br /&gt;
		seedCell = row:tag('td')&lt;br /&gt;
			:css('text-align', 'center')&lt;br /&gt;
			:css('background-color', '#f2f2f2')&lt;br /&gt;
			:attr('rowspan', (not compact) and '2' or nil)&lt;br /&gt;
			:wikitext(seedArg)&lt;br /&gt;
			:newline()&lt;br /&gt;
		addBorders(seedCell, top or otherbye, true, false)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local teamArg = getTeamArg(round, 'team', team)&lt;br /&gt;
	if isblank(teamArg) then&lt;br /&gt;
		teamArg = '&amp;amp;nbsp;'&lt;br /&gt;
	elseif emoji then&lt;br /&gt;
		teamArg = teamArg .. ' ' .. mw.getCurrentFrame():expandTemplate{ title = 'Emoji', args = { teamArg }}&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if not showSeed and (not hideSeeds) then&lt;br /&gt;
		tcs = tcs + 1&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local teamCell = row:tag('td')&lt;br /&gt;
		:css('background-color', '#f9f9f9')&lt;br /&gt;
		:css('padding', '0 2px')&lt;br /&gt;
		:attr('rowspan', (not compact) and '2' or nil)&lt;br /&gt;
		:attr('colspan', (tcs &amp;gt; 1) and tcs or nil)&lt;br /&gt;
		:wikitext(teamArg)&lt;br /&gt;
		:newline()&lt;br /&gt;
	addBorders(teamCell, top or otherbye, true, false)&lt;br /&gt;
&lt;br /&gt;
	local scoreCells = {}&lt;br /&gt;
	local wins, otherwins = 0, 0&lt;br /&gt;
	local sumscore, othersumscore = 0, 0&lt;br /&gt;
	local teamcolspan = tcs&lt;br /&gt;
	local hassum = false&lt;br /&gt;
	for s = 1, legs[round] do&lt;br /&gt;
		local fw = nil&lt;br /&gt;
		local agg = legs[round] &amp;gt; 1 and s == legs[round] and true or false&lt;br /&gt;
		local score1 = (agg and getScoreArg(round, team, 'agg') or nil) or &lt;br /&gt;
			getScoreArg(round, team, s) or ((legs[round] == 1) and getScoreArg(round, team)) or nil&lt;br /&gt;
		local score2 = (agg and getScoreArg(round, otherteam, 'agg') or nil) or &lt;br /&gt;
			getScoreArg(round, otherteam, s) or ((legs[round] == 1) and getScoreArg(round, otherteam)) or nil&lt;br /&gt;
		local showscore = true&lt;br /&gt;
		if agg and aggregate ~= '' and score1 == nil and hassum then&lt;br /&gt;
			score1 = (aggregate == 'score')	and sumscore &lt;br /&gt;
				or ((aggregate == 'legs' or aggregate == 'sets') and wins)&lt;br /&gt;
				or nil&lt;br /&gt;
		end&lt;br /&gt;
		if agg and aggregate ~= '' and score2 == nil and hassum then&lt;br /&gt;
			score2 = (aggregate == 'score')	and othersumscore&lt;br /&gt;
				or ((aggregate == 'legs' or aggregate == 'sets') and otherwins)&lt;br /&gt;
				or nil&lt;br /&gt;
		end&lt;br /&gt;
		if score1 == nil and score2 == nil then&lt;br /&gt;
			if hideomittedscores &amp;gt; 0 and s &amp;gt;= hideomittedscores then&lt;br /&gt;
				teamcolspan = teamcolspan + 1&lt;br /&gt;
				showscore = false&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			hassum = true&lt;br /&gt;
		end&lt;br /&gt;
		if showscore then&lt;br /&gt;
			local winner = scoreCompare(score1, score2, boldwinner ~= 'low')&lt;br /&gt;
			sumscore = sumScores(sumscore, score1)&lt;br /&gt;
			othersumscore = sumScores(othersumscore, score2)&lt;br /&gt;
			if winner == 1 then&lt;br /&gt;
				if boldwinner ~= '' or (agg and (aggregate == 'score' or aggregate == 'legs' or aggregate == 'sets')) then &lt;br /&gt;
					if agg and (aggregate == 'legs' or aggregate == 'sets') and (wins &amp;lt;= (legs[round] - 1)/2) then&lt;br /&gt;
					else&lt;br /&gt;
						fw = 'bold'&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				if not agg then wins = wins + 1 end&lt;br /&gt;
			elseif winner == 2 then&lt;br /&gt;
				if not agg then otherwins = otherwins + 1 end&lt;br /&gt;
			end&lt;br /&gt;
			scoreCells[s] = row:tag('td')&lt;br /&gt;
				:css('text-align', 'center')&lt;br /&gt;
				:css('background-color', getShadeArg(round, team, s))&lt;br /&gt;
				:css('font-weight', fw)&lt;br /&gt;
				:attr('rowspan', (not compact) and '2' or nil)&lt;br /&gt;
				:wikitext(score1)&lt;br /&gt;
				:newline()&lt;br /&gt;
			addBorders(scoreCells[s], top or otherbye, false, s &amp;gt; 1 and s == legs[round] and aggsep or nil)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if teamcolspan &amp;gt; 1 then&lt;br /&gt;
		teamCell:attr('colspan', teamcolspan)&lt;br /&gt;
	end&lt;br /&gt;
	if boldwinner ~= '' and wins &amp;gt; otherwins then&lt;br /&gt;
		if (aggregate == 'legs' or aggregate == 'sets') and (wins &amp;lt;= (legs[round] - 1)/2) then&lt;br /&gt;
		else&lt;br /&gt;
			if seedCell then&lt;br /&gt;
				seedCell:css('font-weight', 'bold')&lt;br /&gt;
			end&lt;br /&gt;
			if teamCell then&lt;br /&gt;
				teamCell:css('font-weight', 'bold')&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderRound(count, r)&lt;br /&gt;
	local teams = math.pow(2, rounds - r + 1)&lt;br /&gt;
	local step = count / teams&lt;br /&gt;
	local topTeam = true -- is top row in match-up&lt;br /&gt;
	local topPair = true -- is top match-up in pair of match-ups&lt;br /&gt;
	local team = 1&lt;br /&gt;
	local group = 1&lt;br /&gt;
&lt;br /&gt;
	for i = 1, count, step do&lt;br /&gt;
		local offset, height, blank&lt;br /&gt;
&lt;br /&gt;
		local hideteam = false&lt;br /&gt;
		local otherhideteam = false&lt;br /&gt;
		local hideleftpath = false&lt;br /&gt;
		local hiderightpath = false&lt;br /&gt;
		if r &amp;lt;= byes then&lt;br /&gt;
			hideteam = isHidden(r, team)&lt;br /&gt;
			otherhideteam = isHidden(r, team % 2 == 0 and team-1 or team+1)&lt;br /&gt;
		end&lt;br /&gt;
		if (r == 1) and (RD1seedmap[team] &amp;lt;= 0) then&lt;br /&gt;
				hideteam = true&lt;br /&gt;
		end&lt;br /&gt;
		if (r &amp;gt; 1) and (r &amp;lt;= (byes + 1)) then&lt;br /&gt;
			hideleftpath = isHidden(r-1, 2*team-1) and isHidden(r-1, 2*team)&lt;br /&gt;
		end&lt;br /&gt;
		if (r == 2) and (RD1seedmap[2*team-1] &amp;lt;= 0 and RD1seedmap[2*team] &amp;lt;= 0) then&lt;br /&gt;
			hideleftpath = true&lt;br /&gt;
		end&lt;br /&gt;
		if compactFinal and (r == rounds) then&lt;br /&gt;
			hideleftpath = true&lt;br /&gt;
		end&lt;br /&gt;
		if (tonumber(args['RD' .. (r-1) .. '-RD' .. (r) .. '-path']) or 2) == 0 then&lt;br /&gt;
			hideleftpath = true&lt;br /&gt;
		end&lt;br /&gt;
		if (tonumber(args['RD' .. (r) .. '-RD' .. (r + 1) .. '-path']) or 2) == 0 then&lt;br /&gt;
			hiderightpath = true&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- empty space above or below&lt;br /&gt;
		if compact then&lt;br /&gt;
			offset = topTeam and i or i + 1&lt;br /&gt;
			height = step - 1&lt;br /&gt;
		-- leave room for groups for teams other than first and last&lt;br /&gt;
		elseif team == 1 or team == teams then&lt;br /&gt;
			offset = topTeam and i or i + 2&lt;br /&gt;
			height = step - 2&lt;br /&gt;
		else&lt;br /&gt;
			offset = topTeam and i + 1 or i + 2&lt;br /&gt;
			height = step - 3&lt;br /&gt;
		end&lt;br /&gt;
		if showThird and (r == rounds) and (not topTeam) then&lt;br /&gt;
			height = offset - offsetThird&lt;br /&gt;
		end&lt;br /&gt;
		if compactFinal and (r == (maxround - 1)) then&lt;br /&gt;
			if team == 2 then&lt;br /&gt;
				height = height - 3&lt;br /&gt;
			end&lt;br /&gt;
			if team == 3 then&lt;br /&gt;
				height = height - 1&lt;br /&gt;
				offset = offset + 1&lt;br /&gt;
				addBlank(offset-3, nil, 1, tonumber(hideSeeds and '2' or '3') + legs[r])&lt;br /&gt;
				addBlank(offset-4)&lt;br /&gt;
				addHeading(rows[offset-4], r + 1, getRoundName(r+1), legs[r] - legs[r+1])&lt;br /&gt;
				local b = addBlank(offset-4, {&lt;br /&gt;
					['border-color'] = 'black',&lt;br /&gt;
					['border-style']= 'solid',&lt;br /&gt;
					['border-width']= '0'}, 2)&lt;br /&gt;
				b:css('border-right-width', '2px')&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if height &amp;gt; 0 then&lt;br /&gt;
			local pad = 0&lt;br /&gt;
			local betweenTeams = (topTeam == false and topPair == true) or (topTeam == true and topPair == false)&lt;br /&gt;
			if compactFinal and (r == maxround - 1) then&lt;br /&gt;
				betweenTeams = false&lt;br /&gt;
			end&lt;br /&gt;
			if compactFinal and (r == maxround - 1) and legs[r+1] &amp;gt; legs[r] then&lt;br /&gt;
				pad = legs[r+1] - legs[r]&lt;br /&gt;
			end&lt;br /&gt;
			if compact and betweenTeams then&lt;br /&gt;
				addBlank(offset, nil, height, 1)&lt;br /&gt;
				if topPair then&lt;br /&gt;
					blank = addBlank(offset, nil, 2*height, tonumber(hideSeeds and '1' or '2') + legs[r] + pad)&lt;br /&gt;
					if args['RD' .. r .. '-group' .. group] then&lt;br /&gt;
						blank:wikitext(args['RD' .. r .. '-group' .. group])&lt;br /&gt;
						blank:css('text-align', 'center')&lt;br /&gt;
					end&lt;br /&gt;
					group = group + 1&lt;br /&gt;
				end&lt;br /&gt;
				blank = addBlank(offset, &lt;br /&gt;
				{['border-width'] = '0',&lt;br /&gt;
				['border-style'] = 'solid',&lt;br /&gt;
				['border-color'] = 'black'},&lt;br /&gt;
				height, 1)&lt;br /&gt;
			else&lt;br /&gt;
				blank = addBlank(offset, &lt;br /&gt;
				{['border-width'] = '0',&lt;br /&gt;
				['border-style'] = 'solid',&lt;br /&gt;
				['border-color'] = 'black'},&lt;br /&gt;
				height, tonumber(hideSeeds and '3' or '4') + legs[r] + pad)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		-- add bracket&lt;br /&gt;
		local j = topTeam and i + step - (compact and 1 or 2) or i&lt;br /&gt;
		-- add left path&lt;br /&gt;
		addPath(j, r, topTeam, true, hideleftpath and '0' or '2px')&lt;br /&gt;
		if hideteam then&lt;br /&gt;
			addBlank(j, nil, (not compact) and 2 or nil, tonumber(hideSeeds and '1' or '2') + legs[r])&lt;br /&gt;
		elseif rows[j] then&lt;br /&gt;
			if compactFinal and (r == maxround) then&lt;br /&gt;
				renderTeam(rows[j], r, team, topTeam, otherhideteam, legs[r-1] - legs[r])&lt;br /&gt;
			elseif compactFinal and (r == maxround - 1) then&lt;br /&gt;
				renderTeam(rows[j], r, team, topTeam, otherhideteam, legs[r+1] - legs[r])&lt;br /&gt;
			else&lt;br /&gt;
				renderTeam(rows[j], r, team, topTeam, otherhideteam)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		local rightPath = addPath(j, r, topTeam, false, (hiderightpath or hideteam) and '0' or '2px')&lt;br /&gt;
		if not topTeam then topPair = not topPair end&lt;br /&gt;
		if not topPair and r &amp;lt; maxround and (not (hiderightpath or hideteam)) then&lt;br /&gt;
			if blank then blank:css('border-right-width', '2px') end&lt;br /&gt;
			rightPath:css('border-right-width', '2px')&lt;br /&gt;
		end&lt;br /&gt;
		if compactFinal and (r == maxround) then&lt;br /&gt;
			local prop = (team == 1) and 'border-bottom-width' or 'border-top-width'&lt;br /&gt;
			rightPath:css('border-right-width', '2px')&lt;br /&gt;
				:css(prop, '2px')&lt;br /&gt;
		end&lt;br /&gt;
		team = team + 1&lt;br /&gt;
		topTeam = not topTeam&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderGroups(count, round)&lt;br /&gt;
	local roundFromLast = rounds - round + 1&lt;br /&gt;
	local groups = math.pow(2, roundFromLast - 2)&lt;br /&gt;
	local step = count / groups&lt;br /&gt;
	local group = 1&lt;br /&gt;
	local offset = 0&lt;br /&gt;
	local team = 0&lt;br /&gt;
	local wdef = (tonumber(args['RD' .. (round) .. '-RD' .. (round + 1) .. '-path']) or 2) .. 'px'&lt;br /&gt;
	local w = wdef&lt;br /&gt;
&lt;br /&gt;
	for r = 1,round do&lt;br /&gt;
		offset = offset + (hideSeeds and 3 or 4) + legs[r]&lt;br /&gt;
	end&lt;br /&gt;
	for i = step / 2, count, step do&lt;br /&gt;
		local name = 'RD' .. round .. '-group' .. group&lt;br /&gt;
		addBlank(i, {['height'] = '7px'})&lt;br /&gt;
		addBlank(i+1, {['height'] = '7px'})&lt;br /&gt;
		addBlank(i, {['text-align'] = 'center'}, 2, offset-2)&lt;br /&gt;
			:wikitext(args[name])&lt;br /&gt;
			:newline()&lt;br /&gt;
		if (round &amp;lt;= byes) then&lt;br /&gt;
			team = i/(step/2)&lt;br /&gt;
			w = isHidden(round, 2*team-1) and isHidden(round, 2*team) and '0' or wdef&lt;br /&gt;
		end&lt;br /&gt;
		if (round &amp;lt; maxround) then&lt;br /&gt;
			addBlank(i, {&lt;br /&gt;
				['border-color'] = 'black',&lt;br /&gt;
				['border-style'] = 'solid', &lt;br /&gt;
				['border-width'] = '0 ' .. w .. ' 0 0'})&lt;br /&gt;
		else&lt;br /&gt;
			addBlank(i)&lt;br /&gt;
		end&lt;br /&gt;
		if (round &amp;lt;= byes) then&lt;br /&gt;
			team = team + 1&lt;br /&gt;
			w = isHidden(round, 2*team-1) and isHidden(round, 2*team) and '0' or wdef&lt;br /&gt;
		end&lt;br /&gt;
		if (round &amp;lt; maxround) then&lt;br /&gt;
			addBlank(i+1, {&lt;br /&gt;
				['border-color'] = 'black',&lt;br /&gt;
				['border-style'] = 'solid', &lt;br /&gt;
				['border-width'] = '0 ' .. w .. ' 0 0'})&lt;br /&gt;
		else&lt;br /&gt;
			addBlank(i+1)&lt;br /&gt;
		end&lt;br /&gt;
		group = group + 1&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getThirdOffset()&lt;br /&gt;
	local offset = (compact and 1 or 3) * (math.pow(2, rounds) - math.pow(2, rounds-3)) - (compact and 2 or 4)&lt;br /&gt;
	if rounds &amp;lt; 4 then&lt;br /&gt;
		offset = compact and 8 or 17&lt;br /&gt;
		if rounds &amp;lt; 3 then&lt;br /&gt;
			offset = compact and 6 or 10&lt;br /&gt;
			if rounds &amp;lt; 2 then&lt;br /&gt;
				offset = compact and 4 or 7&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return offset&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderThird(count)&lt;br /&gt;
	local k = offsetThird&lt;br /&gt;
	local row = rows[k]&lt;br /&gt;
	local blank&lt;br /&gt;
	if rounds &amp;lt; 2 then&lt;br /&gt;
		blank = addBlank(k-1, {['height'] = '7px'})&lt;br /&gt;
	end&lt;br /&gt;
	blank = addBlank(k, rounds &amp;lt; 2 and {['height'] = '7px'} or nil)&lt;br /&gt;
	addHeading(row, rounds + 1, args['3rd'] or 'Third place')&lt;br /&gt;
	if rounds &amp;lt; 2 then&lt;br /&gt;
		for i = 1,(compact and 1 or 2) do&lt;br /&gt;
			blank = addBlank(k+i, {['height'] = '7px'})&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	k = k + (compact and 2 or 3)&lt;br /&gt;
	for i = 1,2 do&lt;br /&gt;
		row = rows[k]&lt;br /&gt;
		blank = addBlank(k, rounds &amp;lt; 2 and {['height'] = '7px'} or nil)&lt;br /&gt;
		if row then&lt;br /&gt;
			renderTeam(row, rounds + 1, i, i == 1, false)&lt;br /&gt;
		end&lt;br /&gt;
		if rounds &amp;lt; 2 and not compact then&lt;br /&gt;
			blank = addBlank(k+1, {['height'] = '7px'})&lt;br /&gt;
		end&lt;br /&gt;
		k = k + (compact and 1 or 2)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function maskRows(tbl, count, offsetcount)&lt;br /&gt;
	local rmin = 1&lt;br /&gt;
	local rmax = count&lt;br /&gt;
	for i = rmin, rmax do&lt;br /&gt;
		mask[i] = false&lt;br /&gt;
	end&lt;br /&gt;
	if showThird then&lt;br /&gt;
		for i = offsetThird,(offsetThird+ (compact and 3 or 5)) do&lt;br /&gt;
			rmax = (i &amp;gt; rmax) and i or rmax&lt;br /&gt;
			mask[i] = true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for r = 1, maxround do&lt;br /&gt;
		local teams = math.pow(2, rounds - r + 1)&lt;br /&gt;
		local step = count / teams&lt;br /&gt;
		local topTeam = true -- is top row in match-up&lt;br /&gt;
		local team = 1&lt;br /&gt;
&lt;br /&gt;
		for i = 1, count, step do&lt;br /&gt;
			local offset, height, blank&lt;br /&gt;
			local hideteam = false&lt;br /&gt;
			if r &amp;lt;= byes then&lt;br /&gt;
				hideteam = isHidden(r, team)&lt;br /&gt;
			end&lt;br /&gt;
			if (r == 1) and (RD1seedmap[team] &amp;lt;= 0) then&lt;br /&gt;
				hideteam = true&lt;br /&gt;
			end&lt;br /&gt;
			if not hideteam then&lt;br /&gt;
				local j = topTeam and i + step - (compact and 1 or 2) or i&lt;br /&gt;
				mask[j] = true&lt;br /&gt;
			end&lt;br /&gt;
			team = team + 1&lt;br /&gt;
			topTeam = not topTeam&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	for r = 1, maxround do&lt;br /&gt;
		local roundFromLast = rounds - r + 1&lt;br /&gt;
		local groups = math.pow(2, roundFromLast - 2)&lt;br /&gt;
		local step = count / groups&lt;br /&gt;
		local group = 1&lt;br /&gt;
		for i = step / 2, count, step do&lt;br /&gt;
			if args['RD' .. r .. '-group' .. group] then&lt;br /&gt;
				mask[i] = true&lt;br /&gt;
				mask[i+1] = true&lt;br /&gt;
			end&lt;br /&gt;
			group = group + 1&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local mmin, mmax = rmax, rmin&lt;br /&gt;
	for i = rmin, rmax do&lt;br /&gt;
		if mask[i] == true then&lt;br /&gt;
			mmin = (i &amp;lt; mmin) and i or mmin&lt;br /&gt;
			mmax = (i &amp;gt; mmax) and i or mmax&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for i = mmin, mmax do&lt;br /&gt;
		rows[i] = addTableRow(tbl)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderTree(tbl)&lt;br /&gt;
	-- create 3 or 1 rows for every team&lt;br /&gt;
	local count = math.pow(2, rounds) * (compact and 1 or 3)&lt;br /&gt;
	local offsetcount = 2 * (compact and 1 or 3) + (compact and 2 or 3)&lt;br /&gt;
	offsetThird = getThirdOffset()&lt;br /&gt;
	maskRows(tbl, count, offsetcount)&lt;br /&gt;
	if showThird then&lt;br /&gt;
		for i = (count+1), (offsetcount + offsetThird) do&lt;br /&gt;
			if (rounds &amp;gt; 1) then&lt;br /&gt;
				local blank = addBlank(i, nil, 1, tonumber(hideSeeds and '3' or '4') + legs[1])&lt;br /&gt;
				if compact and (rounds &amp;gt; 2) then&lt;br /&gt;
					blank = addBlank(i, nil, 1, tonumber(hideSeeds and '3' or '4') + legs[1])&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if not compact then&lt;br /&gt;
		-- fill rows with groups&lt;br /&gt;
		for r = 1, rounds - 1 do&lt;br /&gt;
			renderGroups(count, r)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- fill rows with bracket&lt;br /&gt;
	for r = 1, maxround do&lt;br /&gt;
		renderRound(count, r)&lt;br /&gt;
	end&lt;br /&gt;
	if showThird then&lt;br /&gt;
		renderThird(count, compact)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderHeadings(tbl)&lt;br /&gt;
	local titleRow = addTableRow((not hideHeadings) and tbl or mw.html.create('table'))&lt;br /&gt;
	local widthRow = addTableRow(tbl)&lt;br /&gt;
	for r = 1, (compactFinal and (maxround-1) or maxround) do&lt;br /&gt;
		titleRow:tag('td')&lt;br /&gt;
		widthRow:tag('td'):css('width', r &amp;gt; 1 and '5px' or '1px')&lt;br /&gt;
		if compactFinal and r == (maxround-1) then&lt;br /&gt;
			addHeading(titleRow, r, getRoundName(r), legs[r+1] - legs[r])&lt;br /&gt;
		else&lt;br /&gt;
			addHeading(titleRow, r, getRoundName(r) )&lt;br /&gt;
		end&lt;br /&gt;
		local seedCell&lt;br /&gt;
		if (not hideSeeds) then&lt;br /&gt;
			seedCell = widthRow:tag('td'):css('width', getWidth('seed', '25px'))&lt;br /&gt;
		end&lt;br /&gt;
		local teamCell = widthRow:tag('td'):css('width', getWidth('team', '150px'))&lt;br /&gt;
		local scoreCells = {}&lt;br /&gt;
		local legsr = legs[r]&lt;br /&gt;
		if compactFinal and r == (maxround-1) then&lt;br /&gt;
			legsr = legs[r+1] &amp;gt; legs[r] and legs[r+1] or legs[r]&lt;br /&gt;
		end&lt;br /&gt;
		for s = 1, legsr do&lt;br /&gt;
			scoreCells[s] = widthRow:tag('td'):css('width', getWidth('score', '25px'))&lt;br /&gt;
		end&lt;br /&gt;
		titleRow:tag('td')&lt;br /&gt;
		widthRow:tag('td'):css('width', r &amp;lt; rounds and '5px' or '1px')&lt;br /&gt;
&lt;br /&gt;
		if compact then&lt;br /&gt;
			teamCell:css('height', '7px')&lt;br /&gt;
		else&lt;br /&gt;
			if seedCell then&lt;br /&gt;
				seedCell:wikitext('&amp;amp;nbsp;')&lt;br /&gt;
			end&lt;br /&gt;
			teamCell:wikitext('&amp;amp;nbsp;')&lt;br /&gt;
			for s = 1, legs[r] do&lt;br /&gt;
				scoreCells[s]:wikitext('&amp;amp;nbsp;')&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	parseArgs(frame)&lt;br /&gt;
	rounds = tonumber(args.rounds) or 2&lt;br /&gt;
	maxround = tonumber(args.maxround) or rounds&lt;br /&gt;
	local teams = math.pow(2, rounds)&lt;br /&gt;
	compact = (args['compact'] and (args['compact'] == 'yes' or args['compact'] == 'y'))&lt;br /&gt;
	compactFinal = ((rounds &amp;gt; 4) and compact and args['compact-final'] and (args['compact-final'] == 'yes' or args['compact-final'] == 'y'))&lt;br /&gt;
	sepwidth = tonumber(args['sepwidth'] or ((args.sets or args.legs) and 1) or (compact and 1) or 2) or 1&lt;br /&gt;
	aggregate = (args['aggregate'] or ''):lower()&lt;br /&gt;
	aggsep = args['aggsep'] or args['aggregate'] or nil&lt;br /&gt;
	boldwinner = args['boldwinner'] or args['bold_winner'] or ''&lt;br /&gt;
	local autoSeeds = (args['autoseeds'] and (args['autoseeds'] == 'yes' or args['autoseeds'] == 'y'))&lt;br /&gt;
	hideSeeds = (args['seeds'] and (args['seeds'] == 'no' or args['seeds'] == 'n'))&lt;br /&gt;
	showSeeds = (args['seeds'] and (args['seeds'] == 'yes' or args['seeds'] == 'y'))&lt;br /&gt;
	byes = (args['byes'] and (args['byes'] == 'yes' or args['byes'] == 'y') and 1) or (tonumber(args['byes'] or '0') or 0)&lt;br /&gt;
	hideomittedscores = (args['hideomittedscores'] and (args['hideomittedscores'] == 'yes' or args['hideomittedscores'] == 'y') and 1) or (tonumber(args['hideomittedscores'] or '0') or 0)&lt;br /&gt;
	hideHeadings = (args['headings'] and (args['headings'] == 'no' or args['headings'] == 'n'))&lt;br /&gt;
	showThird = isnotblank(args['3rd']) or isnotblank(args['3rd-team1']) or isnotblank(args['3rd-team2'])&lt;br /&gt;
	local align = (args['float'] or args['align'] or ''):lower()&lt;br /&gt;
	local clear = args['clear'] or 'none'&lt;br /&gt;
	emoji = (args['emoji'] and (args['emoji'] == 'yes' or args['emoji'] == 'y'))&lt;br /&gt;
	parseSeedmap(args['RD1-omit'])&lt;br /&gt;
	parseLegs(args.sets or args.legs)&lt;br /&gt;
	&lt;br /&gt;
	if autoSeeds then&lt;br /&gt;
		-- set default seeds for round 1&lt;br /&gt;
		local seeds = getSeeds()&lt;br /&gt;
		for i = 1, table.getn(seeds) do&lt;br /&gt;
			local argname = getTeamArgName(1, 'seed', i)&lt;br /&gt;
			if not args[argname] then&lt;br /&gt;
				args[argname] = seeds[i]&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- create the table&lt;br /&gt;
	local tbl = mw.html.create('table')&lt;br /&gt;
		:css('border-style', 'none')&lt;br /&gt;
		:css('font-size', '90%')&lt;br /&gt;
		:css('border-collapse', 'separate')&lt;br /&gt;
		:css('border-spacing', '0')&lt;br /&gt;
		:attr('cellpadding', '0')&lt;br /&gt;
&lt;br /&gt;
	if (args['nowrap'] and (args['nowrap'] == 'yes' or args['nowrap'] == 'y')) then&lt;br /&gt;
		tbl:css('white-space', 'nowrap')&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if align == 'right' then&lt;br /&gt;
		tbl:css('float', 'right')&lt;br /&gt;
		if clear ~= 'none' and clear ~= 'no' and clear ~= 'n' then&lt;br /&gt;
			tbl:css('clear', 'right')&lt;br /&gt;
		end&lt;br /&gt;
		tbl:css('margin', '1em 0 1em 2em')&lt;br /&gt;
	elseif align == 'left' then&lt;br /&gt;
		tbl:css('float', 'left')&lt;br /&gt;
		if clear ~= 'none' and clear ~= 'no' and clear ~= 'n' then&lt;br /&gt;
			tbl:css('clear', 'left')&lt;br /&gt;
		end&lt;br /&gt;
		tbl:css('margin', '1em 2em 1em 0')&lt;br /&gt;
	elseif align == 'center' or align == 'centre' then&lt;br /&gt;
		tbl:css('margin', '1em auto')&lt;br /&gt;
	else&lt;br /&gt;
		tbl:css('margin', '1em 2em 1em 1em')&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	renderHeadings(tbl)&lt;br /&gt;
	renderTree(tbl)&lt;br /&gt;
	return tostring(tbl) .. tcats&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.teamBracket(frame)&lt;br /&gt;
	return p.main(frame)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Pokeylope</name></author>
	</entry>
	<entry>
		<id>https://glolfwiki.sibr.dev/index.php?title=Module:Team_bracket&amp;diff=233</id>
		<title>Module:Team bracket</title>
		<link rel="alternate" type="text/html" href="https://glolfwiki.sibr.dev/index.php?title=Module:Team_bracket&amp;diff=233"/>
		<updated>2021-06-06T21:19:33Z</updated>

		<summary type="html">&lt;p&gt;Pokeylope: Created page with &amp;quot;-- https://en.wikipedia.org/wiki/Module:Team_bracket -- -- This module implements many bracket templates --  local p = {} local args = {} local rows = {} local mask = {} local...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- https://en.wikipedia.org/wiki/Module:Team_bracket&lt;br /&gt;
--&lt;br /&gt;
-- This module implements many bracket templates&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
local args = {}&lt;br /&gt;
local rows = {}&lt;br /&gt;
local mask = {}&lt;br /&gt;
local rounds&lt;br /&gt;
local maxround&lt;br /&gt;
local legs = {}&lt;br /&gt;
local compact&lt;br /&gt;
local byes&lt;br /&gt;
local hideSeeds&lt;br /&gt;
local showSeeds&lt;br /&gt;
local hideHeadings&lt;br /&gt;
local showThird&lt;br /&gt;
local offsetThird&lt;br /&gt;
local compactFinal&lt;br /&gt;
local sepwidth&lt;br /&gt;
local aggsep&lt;br /&gt;
local aggregate&lt;br /&gt;
local boldwinner&lt;br /&gt;
local hideomittedscores&lt;br /&gt;
local RD1seedmap = {}&lt;br /&gt;
local tcats = ''&lt;br /&gt;
&lt;br /&gt;
local function isnotblank(s)&lt;br /&gt;
	return s and s ~= ''&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function isblank(s)&lt;br /&gt;
	return (not s) or (s == '')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function sumScores(s1, s2)&lt;br /&gt;
	s1 = mw.ustring.gsub(s1 or '', '^[\'%s]*([%d%.]*).-$', '%1')&lt;br /&gt;
	s2 = mw.ustring.gsub(s2 or '', '^[\'%s]*([%d%.]*).-$', '%1')&lt;br /&gt;
	if s1 ~= '' and s2 ~= '' then&lt;br /&gt;
		return tonumber(s1) + tonumber(s2)&lt;br /&gt;
	end&lt;br /&gt;
	return s1&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function scoreCompare(s1,s2,highwin)&lt;br /&gt;
	local ps1 = mw.ustring.gsub(s1 or '', '^[\'%s]*([%d%.]*)[\'%s]*%([\'%s]*([%d%.]*)[\'%s]*%).-$', '%2')&lt;br /&gt;
	local ps2 = mw.ustring.gsub(s2 or '', '^[\'%s]*([%d%.]*)[\'%s]*%([\'%s]*([%d%.]*)[\'%s]*%).-$', '%2')&lt;br /&gt;
	s1 = mw.ustring.gsub(s1 or '', '^[\'%s]*([%d%.]*).-$', '%1')&lt;br /&gt;
	s2 = mw.ustring.gsub(s2 or '', '^[\'%s]*([%d%.]*).-$', '%1')&lt;br /&gt;
	&lt;br /&gt;
	if s1 ~= '' and s2 ~= '' then&lt;br /&gt;
		s1 = tonumber(s1)&lt;br /&gt;
		s2 = tonumber(s2)&lt;br /&gt;
		if s1 and s2 then&lt;br /&gt;
			if (s1 == s2) then&lt;br /&gt;
				ps1 = tonumber(ps1)&lt;br /&gt;
				ps2 = tonumber(ps2)&lt;br /&gt;
				if ps1 and ps2 then&lt;br /&gt;
					s1 = ps1&lt;br /&gt;
					s2 = ps2&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if highwin then&lt;br /&gt;
				return ((s1 &amp;gt; s2) and 1) or ((s1 &amp;lt; s2) and 2) or 0&lt;br /&gt;
			else&lt;br /&gt;
				return ((s2 &amp;gt; s1) and 1) or ((s2 &amp;lt; s1) and 2) or 0&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function parseArgs(frame)&lt;br /&gt;
	local fargs = frame.args&lt;br /&gt;
	local pargs = frame:getParent().args;&lt;br /&gt;
&lt;br /&gt;
	local r = tonumber(fargs.rounds or '') or tonumber(pargs.rounds or '') or 2&lt;br /&gt;
	local teams = math.pow(2, r)&lt;br /&gt;
	local rdstr = 'RD' .. tostring(r)&lt;br /&gt;
	local rdbstr = 'RD' .. tostring(r) .. 'b'&lt;br /&gt;
	local rdp1str = 'RD' .. tostring(r+1)&lt;br /&gt;
&lt;br /&gt;
	for i=1,2 do&lt;br /&gt;
		local targs = (i == 1) and pargs or fargs&lt;br /&gt;
		for k,v in pairs(targs) do&lt;br /&gt;
			if type(k) == 'string' then&lt;br /&gt;
				if k:find('^[R3][Dr][d1-9]b?%-[a-z][a-z]*00*') then&lt;br /&gt;
					k = mw.ustring.gsub(k, '^([R3][Dr][d1-9]b?%-[a-z][a-z]*)00*', '%1')&lt;br /&gt;
					if (teams &amp;lt; 10) then &lt;br /&gt;
						tcats = tcats .. '[[Category:Pages using a team bracket with deprecated syntax|P]]'&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				if k:find('^' .. rdp1str) then&lt;br /&gt;
					k = mw.ustring.gsub(k, '^' .. rdp1str, '3rd')&lt;br /&gt;
					tcats = tcats .. '[[Category:Pages using a team bracket with deprecated syntax|3]]'&lt;br /&gt;
				elseif k:find('^' .. rdbstr) then&lt;br /&gt;
					k = mw.ustring.gsub(k, '^' .. rdbstr, '3rd')&lt;br /&gt;
				elseif k:find('^' .. rdstr .. '%-[a-z][a-z]*3') then&lt;br /&gt;
					k = mw.ustring.gsub(k, '^' .. rdstr .. '(%-[a-z][a-z]*)3', '3rd%11')&lt;br /&gt;
				elseif k:find('^' .. rdstr .. '%-[a-z][a-z]*4') then&lt;br /&gt;
					k = mw.ustring.gsub(k, '^' .. rdstr .. '(%-[a-z][a-z]*)4', '3rd%12')&lt;br /&gt;
				elseif  k:find('^Consol') then&lt;br /&gt;
					k = mw.ustring.gsub(k, '^Consol', '3rd')&lt;br /&gt;
					tcats = tcats .. '[[Category:Pages using a team bracket with deprecated syntax|3]]'&lt;br /&gt;
				elseif k:find('^group[0-9]') then&lt;br /&gt;
					tcats = tcats .. '[[Category:Pages using a team bracket with deprecated syntax|G]]'&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			args[k] = v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if (args['byes'] and (args['byes'] == 'yes' or args['byes'] == 'y')) then&lt;br /&gt;
		tcats = tcats .. '[[Category:Pages using a team bracket with deprecated syntax|B]]'&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function parseSeedmap(s)&lt;br /&gt;
	s = mw.text.split((s or '0') .. '/', '[%s]*/[%s]*')&lt;br /&gt;
	local teams = math.pow(2, rounds)&lt;br /&gt;
	for r=1,teams do&lt;br /&gt;
		RD1seedmap[r] = 1&lt;br /&gt;
	end&lt;br /&gt;
	for r=1,#s do&lt;br /&gt;
		if tonumber(s[r] or 'x') then&lt;br /&gt;
			RD1seedmap[tonumber(s[r])] = 0&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local c = 1&lt;br /&gt;
	for r=1,teams do&lt;br /&gt;
		if RD1seedmap[r] &amp;gt; 0 then&lt;br /&gt;
			RD1seedmap[r] = c&lt;br /&gt;
			c = c + 1&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function parseLegs(s)&lt;br /&gt;
	s = mw.text.split((s or '1') .. '/', '[%s]*/[%s]*')&lt;br /&gt;
	if aggregate == 'n' or aggregate == 'no' or aggregate == '0' then&lt;br /&gt;
		aggregate = ''&lt;br /&gt;
	end&lt;br /&gt;
	local n = showThird and (rounds + 1) or (rounds)&lt;br /&gt;
	local lastlegs = nil&lt;br /&gt;
	for r=1,n do&lt;br /&gt;
		if s[r] ~= nil and s[r] ~= '' and tonumber(s[r]) then&lt;br /&gt;
			legs[r] = tonumber(s[r])&lt;br /&gt;
		elseif lastlegs then&lt;br /&gt;
			legs[r] = lastlegs&lt;br /&gt;
		else&lt;br /&gt;
			legs[r] = 1&lt;br /&gt;
		end&lt;br /&gt;
		lastlegs = legs[r]&lt;br /&gt;
		if legs[r] &amp;gt; 1 and aggregate ~= '' then&lt;br /&gt;
			legs[r] = legs[r] + 1&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getSeeds()&lt;br /&gt;
	local seeds = {1, 2}&lt;br /&gt;
	local count = 2&lt;br /&gt;
	local before = false&lt;br /&gt;
	for r = 2, rounds do&lt;br /&gt;
		local max = math.pow(2, r)&lt;br /&gt;
		for i = 1, count do&lt;br /&gt;
			local pos = i * 2&lt;br /&gt;
			if before then pos = pos - 1 end&lt;br /&gt;
			table.insert(seeds, pos, max - seeds[i * 2 - 1] + 1)&lt;br /&gt;
			before = not before&lt;br /&gt;
		end&lt;br /&gt;
		count = count * 2&lt;br /&gt;
	end&lt;br /&gt;
	return seeds&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function addTableRow(tbl)&lt;br /&gt;
	return tbl:tag('tr')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function addBlank(i, css, rowspan, colspan)&lt;br /&gt;
	local row = rows[i]&lt;br /&gt;
	rowspan = rowspan or 1&lt;br /&gt;
	local jmax = i + rowspan - 1&lt;br /&gt;
	for j = i, jmax do&lt;br /&gt;
		if rows[j] == nil then&lt;br /&gt;
			rowspan = rowspan - 1&lt;br /&gt;
		elseif row == nil then&lt;br /&gt;
			row = rows[j]&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local cell = row and row:tag('td') or mw.html.create('td')&lt;br /&gt;
	if rowspan and rowspan &amp;gt; 1 then&lt;br /&gt;
		cell:attr('rowspan', rowspan)&lt;br /&gt;
	end&lt;br /&gt;
	if colspan and colspan &amp;gt; 1 then&lt;br /&gt;
		cell:attr('colspan', colspan)&lt;br /&gt;
	end&lt;br /&gt;
	if css then&lt;br /&gt;
		cell:css(css)&lt;br /&gt;
	end&lt;br /&gt;
	return cell&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function addBorders(cell, topcell, seedorteam, extrasep)&lt;br /&gt;
	if sepwidth &amp;gt; 1 then topcell = true end&lt;br /&gt;
	if seedorteam then&lt;br /&gt;
		cell:css('border', '1px solid #aaa')&lt;br /&gt;
			:css('border-top-width', topcell and '1px' or '0')&lt;br /&gt;
	else&lt;br /&gt;
		cell:css('border-color', '#aaa')&lt;br /&gt;
			:css('border-style', 'solid')&lt;br /&gt;
			:css('border-top-width', topcell and '1px' or '0')&lt;br /&gt;
			:css('border-left-width', (extrasep and '1px') or ((sepwidth &amp;gt; 1) and '1px') or '0')&lt;br /&gt;
			:css('border-right-width', '1px')&lt;br /&gt;
			:css('border-bottom-width', '1px')&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function addHeading(row, r, text, pad)&lt;br /&gt;
	pad = (pad == nil or pad &amp;lt; 0) and 0 or pad&lt;br /&gt;
	row:tag('td')&lt;br /&gt;
		:attr('colspan', tonumber(hideSeeds and '1' or '2') + legs[r] + pad)&lt;br /&gt;
		:css('text-align', 'center')&lt;br /&gt;
		:css('border', '1px solid #aaa')&lt;br /&gt;
		:css('background-color', args['RD-shade'] or '#f2f2f2')&lt;br /&gt;
		:wikitext(text)&lt;br /&gt;
		:newline()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getWidth(param, default)&lt;br /&gt;
	local arg = args[param .. '-width']&lt;br /&gt;
	if isblank(arg) then&lt;br /&gt;
		arg = default&lt;br /&gt;
	end&lt;br /&gt;
	if tonumber(arg) ~= nil then&lt;br /&gt;
		arg = arg .. 'px'&lt;br /&gt;
	end&lt;br /&gt;
	return arg&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getTeamArgName(round, type, team)&lt;br /&gt;
	if round &amp;gt; rounds then&lt;br /&gt;
		return string.format('3rd-%s%d', type, team)&lt;br /&gt;
	else&lt;br /&gt;
		if (round == 1) then&lt;br /&gt;
			team = RD1seedmap[team]&lt;br /&gt;
			if team == 0 then&lt;br /&gt;
				return 'NIL'&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return string.format('RD%d-%s%d', round, type, team)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getShadeArg(round, team, s)&lt;br /&gt;
	local argname = getTeamArgName(round, 'shade', team) .. (s and ('-' .. s) or '')&lt;br /&gt;
	local value = args[argname]&lt;br /&gt;
	if isblank(value) then&lt;br /&gt;
		return '#f9f9f9'&lt;br /&gt;
	end&lt;br /&gt;
	return value&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getScoreArg(round, team, s)&lt;br /&gt;
	local argname = getTeamArgName(round, 'score', team) .. (s and ('-' .. s) or '')&lt;br /&gt;
	local value = args[argname]&lt;br /&gt;
	return value&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getTeamArg(round, type, team)&lt;br /&gt;
	local argname = getTeamArgName(round, type, team)&lt;br /&gt;
	local value = args[argname]&lt;br /&gt;
	if isblank(value) then&lt;br /&gt;
		return ''&lt;br /&gt;
	end&lt;br /&gt;
	if mw.ustring.find(value, '[%s]*&amp;lt;[%s/]*[Bb][Rr][%s/]*&amp;gt;[%s ]*&amp;amp;[Nn][Bb][Ss][Pp];[%s]*') then&lt;br /&gt;
		tcats = tcats .. '[[Category:Pages using a team bracket with nbsp]]'&lt;br /&gt;
	end&lt;br /&gt;
	return mw.ustring.gsub(value, '[%s]*&amp;lt;[%s/]*[Bb][Rr][%s/]*&amp;gt;[%s ]*&amp;amp;[Nn][Bb][Ss][Pp];[%s]*', '&amp;lt;br/&amp;gt;')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function isHidden(r, team)&lt;br /&gt;
	return isblank( getTeamArg(r, 'team', team) )&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getRoundName(round)&lt;br /&gt;
	local name = args['RD' .. round]&lt;br /&gt;
	if isnotblank(name) then&lt;br /&gt;
		return name&lt;br /&gt;
	end&lt;br /&gt;
	local roundFromLast = rounds - round + 1&lt;br /&gt;
	if roundFromLast == 1 then&lt;br /&gt;
		return &amp;quot;Finals&amp;quot;&lt;br /&gt;
	elseif roundFromLast == 2 then&lt;br /&gt;
		return &amp;quot;Semifinals&amp;quot;&lt;br /&gt;
	elseif roundFromLast == 3 then&lt;br /&gt;
		return &amp;quot;Quarterfinals&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;quot;Round of &amp;quot; .. math.pow(2, roundFromLast)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function addPath(index, round, top, left, w)&lt;br /&gt;
	local prop = top and 'border-bottom-width' or 'border-top-width'&lt;br /&gt;
	if left and round == 1 then&lt;br /&gt;
		if compact then&lt;br /&gt;
			addBlank(index)&lt;br /&gt;
		else&lt;br /&gt;
			addBlank(index, {['height'] = '7px'})&lt;br /&gt;
			addBlank(index+1, {['height'] = '7px'})&lt;br /&gt;
		end&lt;br /&gt;
		return nil&lt;br /&gt;
	else&lt;br /&gt;
		local cell = addBlank(index, &lt;br /&gt;
			{['border-width'] = '0',&lt;br /&gt;
			['border-style'] = 'solid',&lt;br /&gt;
			['border-color'] = 'black'}, (not compact) and 2 or 1)&lt;br /&gt;
		if left or round &amp;lt; maxround and not left then&lt;br /&gt;
			cell:css(prop, w or '2px')&lt;br /&gt;
		end&lt;br /&gt;
		return cell&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderTeam(row, round, team, top, otherbye, pad)&lt;br /&gt;
	pad = (pad == nil or pad &amp;lt; 0) and 0 or pad&lt;br /&gt;
	tcs = pad + 1&lt;br /&gt;
	local seedCell&lt;br /&gt;
	local seedArg = getTeamArg(round, 'seed', team)&lt;br /&gt;
	-- seed value for the paired team&lt;br /&gt;
	local otherteam = team % 2 == 0 and team-1 or team+1&lt;br /&gt;
	local pairSeedArg = otherbye and '' &lt;br /&gt;
		or getTeamArg(round, 'seed', otherteam)&lt;br /&gt;
	-- show seed if seed is defined for either or both&lt;br /&gt;
	local showSeed = showSeeds&lt;br /&gt;
		or isnotblank(seedArg)&lt;br /&gt;
		or isnotblank(pairSeedArg)&lt;br /&gt;
	if showSeed and (not hideSeeds) then&lt;br /&gt;
		seedCell = row:tag('td')&lt;br /&gt;
			:css('text-align', 'center')&lt;br /&gt;
			:css('background-color', '#f2f2f2')&lt;br /&gt;
			:attr('rowspan', (not compact) and '2' or nil)&lt;br /&gt;
			:wikitext(seedArg)&lt;br /&gt;
			:newline()&lt;br /&gt;
		addBorders(seedCell, top or otherbye, true, false)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local teamArg = getTeamArg(round, 'team', team)&lt;br /&gt;
	if isblank(teamArg) then&lt;br /&gt;
		teamArg = '&amp;amp;nbsp;'&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if not showSeed and (not hideSeeds) then&lt;br /&gt;
		tcs = tcs + 1&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local teamCell = row:tag('td')&lt;br /&gt;
		:css('background-color', '#f9f9f9')&lt;br /&gt;
		:css('padding', '0 2px')&lt;br /&gt;
		:attr('rowspan', (not compact) and '2' or nil)&lt;br /&gt;
		:attr('colspan', (tcs &amp;gt; 1) and tcs or nil)&lt;br /&gt;
		:wikitext(teamArg)&lt;br /&gt;
		:newline()&lt;br /&gt;
	addBorders(teamCell, top or otherbye, true, false)&lt;br /&gt;
&lt;br /&gt;
	local scoreCells = {}&lt;br /&gt;
	local wins, otherwins = 0, 0&lt;br /&gt;
	local sumscore, othersumscore = 0, 0&lt;br /&gt;
	local teamcolspan = tcs&lt;br /&gt;
	local hassum = false&lt;br /&gt;
	for s = 1, legs[round] do&lt;br /&gt;
		local fw = nil&lt;br /&gt;
		local agg = legs[round] &amp;gt; 1 and s == legs[round] and true or false&lt;br /&gt;
		local score1 = (agg and getScoreArg(round, team, 'agg') or nil) or &lt;br /&gt;
			getScoreArg(round, team, s) or ((legs[round] == 1) and getScoreArg(round, team)) or nil&lt;br /&gt;
		local score2 = (agg and getScoreArg(round, otherteam, 'agg') or nil) or &lt;br /&gt;
			getScoreArg(round, otherteam, s) or ((legs[round] == 1) and getScoreArg(round, otherteam)) or nil&lt;br /&gt;
		local showscore = true&lt;br /&gt;
		if agg and aggregate ~= '' and score1 == nil and hassum then&lt;br /&gt;
			score1 = (aggregate == 'score')	and sumscore &lt;br /&gt;
				or ((aggregate == 'legs' or aggregate == 'sets') and wins)&lt;br /&gt;
				or nil&lt;br /&gt;
		end&lt;br /&gt;
		if agg and aggregate ~= '' and score2 == nil and hassum then&lt;br /&gt;
			score2 = (aggregate == 'score')	and othersumscore&lt;br /&gt;
				or ((aggregate == 'legs' or aggregate == 'sets') and otherwins)&lt;br /&gt;
				or nil&lt;br /&gt;
		end&lt;br /&gt;
		if score1 == nil and score2 == nil then&lt;br /&gt;
			if hideomittedscores &amp;gt; 0 and s &amp;gt;= hideomittedscores then&lt;br /&gt;
				teamcolspan = teamcolspan + 1&lt;br /&gt;
				showscore = false&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			hassum = true&lt;br /&gt;
		end&lt;br /&gt;
		if showscore then&lt;br /&gt;
			local winner = scoreCompare(score1, score2, boldwinner ~= 'low')&lt;br /&gt;
			sumscore = sumScores(sumscore, score1)&lt;br /&gt;
			othersumscore = sumScores(othersumscore, score2)&lt;br /&gt;
			if winner == 1 then&lt;br /&gt;
				if boldwinner ~= '' or (agg and (aggregate == 'score' or aggregate == 'legs' or aggregate == 'sets')) then &lt;br /&gt;
					if agg and (aggregate == 'legs' or aggregate == 'sets') and (wins &amp;lt;= (legs[round] - 1)/2) then&lt;br /&gt;
					else&lt;br /&gt;
						fw = 'bold'&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				if not agg then wins = wins + 1 end&lt;br /&gt;
			elseif winner == 2 then&lt;br /&gt;
				if not agg then otherwins = otherwins + 1 end&lt;br /&gt;
			end&lt;br /&gt;
			scoreCells[s] = row:tag('td')&lt;br /&gt;
				:css('text-align', 'center')&lt;br /&gt;
				:css('background-color', getShadeArg(round, team, s))&lt;br /&gt;
				:css('font-weight', fw)&lt;br /&gt;
				:attr('rowspan', (not compact) and '2' or nil)&lt;br /&gt;
				:wikitext(score1)&lt;br /&gt;
				:newline()&lt;br /&gt;
			addBorders(scoreCells[s], top or otherbye, false, s &amp;gt; 1 and s == legs[round] and aggsep or nil)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if teamcolspan &amp;gt; 1 then&lt;br /&gt;
		teamCell:attr('colspan', teamcolspan)&lt;br /&gt;
	end&lt;br /&gt;
	if boldwinner ~= '' and wins &amp;gt; otherwins then&lt;br /&gt;
		if (aggregate == 'legs' or aggregate == 'sets') and (wins &amp;lt;= (legs[round] - 1)/2) then&lt;br /&gt;
		else&lt;br /&gt;
			if seedCell then&lt;br /&gt;
				seedCell:css('font-weight', 'bold')&lt;br /&gt;
			end&lt;br /&gt;
			if teamCell then&lt;br /&gt;
				teamCell:css('font-weight', 'bold')&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderRound(count, r)&lt;br /&gt;
	local teams = math.pow(2, rounds - r + 1)&lt;br /&gt;
	local step = count / teams&lt;br /&gt;
	local topTeam = true -- is top row in match-up&lt;br /&gt;
	local topPair = true -- is top match-up in pair of match-ups&lt;br /&gt;
	local team = 1&lt;br /&gt;
	local group = 1&lt;br /&gt;
&lt;br /&gt;
	for i = 1, count, step do&lt;br /&gt;
		local offset, height, blank&lt;br /&gt;
&lt;br /&gt;
		local hideteam = false&lt;br /&gt;
		local otherhideteam = false&lt;br /&gt;
		local hideleftpath = false&lt;br /&gt;
		local hiderightpath = false&lt;br /&gt;
		if r &amp;lt;= byes then&lt;br /&gt;
			hideteam = isHidden(r, team)&lt;br /&gt;
			otherhideteam = isHidden(r, team % 2 == 0 and team-1 or team+1)&lt;br /&gt;
		end&lt;br /&gt;
		if (r == 1) and (RD1seedmap[team] &amp;lt;= 0) then&lt;br /&gt;
				hideteam = true&lt;br /&gt;
		end&lt;br /&gt;
		if (r &amp;gt; 1) and (r &amp;lt;= (byes + 1)) then&lt;br /&gt;
			hideleftpath = isHidden(r-1, 2*team-1) and isHidden(r-1, 2*team)&lt;br /&gt;
		end&lt;br /&gt;
		if (r == 2) and (RD1seedmap[2*team-1] &amp;lt;= 0 and RD1seedmap[2*team] &amp;lt;= 0) then&lt;br /&gt;
			hideleftpath = true&lt;br /&gt;
		end&lt;br /&gt;
		if compactFinal and (r == rounds) then&lt;br /&gt;
			hideleftpath = true&lt;br /&gt;
		end&lt;br /&gt;
		if (tonumber(args['RD' .. (r-1) .. '-RD' .. (r) .. '-path']) or 2) == 0 then&lt;br /&gt;
			hideleftpath = true&lt;br /&gt;
		end&lt;br /&gt;
		if (tonumber(args['RD' .. (r) .. '-RD' .. (r + 1) .. '-path']) or 2) == 0 then&lt;br /&gt;
			hiderightpath = true&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- empty space above or below&lt;br /&gt;
		if compact then&lt;br /&gt;
			offset = topTeam and i or i + 1&lt;br /&gt;
			height = step - 1&lt;br /&gt;
		-- leave room for groups for teams other than first and last&lt;br /&gt;
		elseif team == 1 or team == teams then&lt;br /&gt;
			offset = topTeam and i or i + 2&lt;br /&gt;
			height = step - 2&lt;br /&gt;
		else&lt;br /&gt;
			offset = topTeam and i + 1 or i + 2&lt;br /&gt;
			height = step - 3&lt;br /&gt;
		end&lt;br /&gt;
		if showThird and (r == rounds) and (not topTeam) then&lt;br /&gt;
			height = offset - offsetThird&lt;br /&gt;
		end&lt;br /&gt;
		if compactFinal and (r == (maxround - 1)) then&lt;br /&gt;
			if team == 2 then&lt;br /&gt;
				height = height - 3&lt;br /&gt;
			end&lt;br /&gt;
			if team == 3 then&lt;br /&gt;
				height = height - 1&lt;br /&gt;
				offset = offset + 1&lt;br /&gt;
				addBlank(offset-3, nil, 1, tonumber(hideSeeds and '2' or '3') + legs[r])&lt;br /&gt;
				addBlank(offset-4)&lt;br /&gt;
				addHeading(rows[offset-4], r + 1, getRoundName(r+1), legs[r] - legs[r+1])&lt;br /&gt;
				local b = addBlank(offset-4, {&lt;br /&gt;
					['border-color'] = 'black',&lt;br /&gt;
					['border-style']= 'solid',&lt;br /&gt;
					['border-width']= '0'}, 2)&lt;br /&gt;
				b:css('border-right-width', '2px')&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if height &amp;gt; 0 then&lt;br /&gt;
			local pad = 0&lt;br /&gt;
			local betweenTeams = (topTeam == false and topPair == true) or (topTeam == true and topPair == false)&lt;br /&gt;
			if compactFinal and (r == maxround - 1) then&lt;br /&gt;
				betweenTeams = false&lt;br /&gt;
			end&lt;br /&gt;
			if compactFinal and (r == maxround - 1) and legs[r+1] &amp;gt; legs[r] then&lt;br /&gt;
				pad = legs[r+1] - legs[r]&lt;br /&gt;
			end&lt;br /&gt;
			if compact and betweenTeams then&lt;br /&gt;
				addBlank(offset, nil, height, 1)&lt;br /&gt;
				if topPair then&lt;br /&gt;
					blank = addBlank(offset, nil, 2*height, tonumber(hideSeeds and '1' or '2') + legs[r] + pad)&lt;br /&gt;
					if args['RD' .. r .. '-group' .. group] then&lt;br /&gt;
						blank:wikitext(args['RD' .. r .. '-group' .. group])&lt;br /&gt;
						blank:css('text-align', 'center')&lt;br /&gt;
					end&lt;br /&gt;
					group = group + 1&lt;br /&gt;
				end&lt;br /&gt;
				blank = addBlank(offset, &lt;br /&gt;
				{['border-width'] = '0',&lt;br /&gt;
				['border-style'] = 'solid',&lt;br /&gt;
				['border-color'] = 'black'},&lt;br /&gt;
				height, 1)&lt;br /&gt;
			else&lt;br /&gt;
				blank = addBlank(offset, &lt;br /&gt;
				{['border-width'] = '0',&lt;br /&gt;
				['border-style'] = 'solid',&lt;br /&gt;
				['border-color'] = 'black'},&lt;br /&gt;
				height, tonumber(hideSeeds and '3' or '4') + legs[r] + pad)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		-- add bracket&lt;br /&gt;
		local j = topTeam and i + step - (compact and 1 or 2) or i&lt;br /&gt;
		-- add left path&lt;br /&gt;
		addPath(j, r, topTeam, true, hideleftpath and '0' or '2px')&lt;br /&gt;
		if hideteam then&lt;br /&gt;
			addBlank(j, nil, (not compact) and 2 or nil, tonumber(hideSeeds and '1' or '2') + legs[r])&lt;br /&gt;
		elseif rows[j] then&lt;br /&gt;
			if compactFinal and (r == maxround) then&lt;br /&gt;
				renderTeam(rows[j], r, team, topTeam, otherhideteam, legs[r-1] - legs[r])&lt;br /&gt;
			elseif compactFinal and (r == maxround - 1) then&lt;br /&gt;
				renderTeam(rows[j], r, team, topTeam, otherhideteam, legs[r+1] - legs[r])&lt;br /&gt;
			else&lt;br /&gt;
				renderTeam(rows[j], r, team, topTeam, otherhideteam)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		local rightPath = addPath(j, r, topTeam, false, (hiderightpath or hideteam) and '0' or '2px')&lt;br /&gt;
		if not topTeam then topPair = not topPair end&lt;br /&gt;
		if not topPair and r &amp;lt; maxround and (not (hiderightpath or hideteam)) then&lt;br /&gt;
			if blank then blank:css('border-right-width', '2px') end&lt;br /&gt;
			rightPath:css('border-right-width', '2px')&lt;br /&gt;
		end&lt;br /&gt;
		if compactFinal and (r == maxround) then&lt;br /&gt;
			local prop = (team == 1) and 'border-bottom-width' or 'border-top-width'&lt;br /&gt;
			rightPath:css('border-right-width', '2px')&lt;br /&gt;
				:css(prop, '2px')&lt;br /&gt;
		end&lt;br /&gt;
		team = team + 1&lt;br /&gt;
		topTeam = not topTeam&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderGroups(count, round)&lt;br /&gt;
	local roundFromLast = rounds - round + 1&lt;br /&gt;
	local groups = math.pow(2, roundFromLast - 2)&lt;br /&gt;
	local step = count / groups&lt;br /&gt;
	local group = 1&lt;br /&gt;
	local offset = 0&lt;br /&gt;
	local team = 0&lt;br /&gt;
	local wdef = (tonumber(args['RD' .. (round) .. '-RD' .. (round + 1) .. '-path']) or 2) .. 'px'&lt;br /&gt;
	local w = wdef&lt;br /&gt;
&lt;br /&gt;
	for r = 1,round do&lt;br /&gt;
		offset = offset + (hideSeeds and 3 or 4) + legs[r]&lt;br /&gt;
	end&lt;br /&gt;
	for i = step / 2, count, step do&lt;br /&gt;
		local name = 'RD' .. round .. '-group' .. group&lt;br /&gt;
		addBlank(i, {['height'] = '7px'})&lt;br /&gt;
		addBlank(i+1, {['height'] = '7px'})&lt;br /&gt;
		addBlank(i, {['text-align'] = 'center'}, 2, offset-2)&lt;br /&gt;
			:wikitext(args[name])&lt;br /&gt;
			:newline()&lt;br /&gt;
		if (round &amp;lt;= byes) then&lt;br /&gt;
			team = i/(step/2)&lt;br /&gt;
			w = isHidden(round, 2*team-1) and isHidden(round, 2*team) and '0' or wdef&lt;br /&gt;
		end&lt;br /&gt;
		if (round &amp;lt; maxround) then&lt;br /&gt;
			addBlank(i, {&lt;br /&gt;
				['border-color'] = 'black',&lt;br /&gt;
				['border-style'] = 'solid', &lt;br /&gt;
				['border-width'] = '0 ' .. w .. ' 0 0'})&lt;br /&gt;
		else&lt;br /&gt;
			addBlank(i)&lt;br /&gt;
		end&lt;br /&gt;
		if (round &amp;lt;= byes) then&lt;br /&gt;
			team = team + 1&lt;br /&gt;
			w = isHidden(round, 2*team-1) and isHidden(round, 2*team) and '0' or wdef&lt;br /&gt;
		end&lt;br /&gt;
		if (round &amp;lt; maxround) then&lt;br /&gt;
			addBlank(i+1, {&lt;br /&gt;
				['border-color'] = 'black',&lt;br /&gt;
				['border-style'] = 'solid', &lt;br /&gt;
				['border-width'] = '0 ' .. w .. ' 0 0'})&lt;br /&gt;
		else&lt;br /&gt;
			addBlank(i+1)&lt;br /&gt;
		end&lt;br /&gt;
		group = group + 1&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getThirdOffset()&lt;br /&gt;
	local offset = (compact and 1 or 3) * (math.pow(2, rounds) - math.pow(2, rounds-3)) - (compact and 2 or 4)&lt;br /&gt;
	if rounds &amp;lt; 4 then&lt;br /&gt;
		offset = compact and 8 or 17&lt;br /&gt;
		if rounds &amp;lt; 3 then&lt;br /&gt;
			offset = compact and 6 or 10&lt;br /&gt;
			if rounds &amp;lt; 2 then&lt;br /&gt;
				offset = compact and 4 or 7&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return offset&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderThird(count)&lt;br /&gt;
	local k = offsetThird&lt;br /&gt;
	local row = rows[k]&lt;br /&gt;
	local blank&lt;br /&gt;
	if rounds &amp;lt; 2 then&lt;br /&gt;
		blank = addBlank(k-1, {['height'] = '7px'})&lt;br /&gt;
	end&lt;br /&gt;
	blank = addBlank(k, rounds &amp;lt; 2 and {['height'] = '7px'} or nil)&lt;br /&gt;
	addHeading(row, rounds + 1, args['3rd'] or 'Third place')&lt;br /&gt;
	if rounds &amp;lt; 2 then&lt;br /&gt;
		for i = 1,(compact and 1 or 2) do&lt;br /&gt;
			blank = addBlank(k+i, {['height'] = '7px'})&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	k = k + (compact and 2 or 3)&lt;br /&gt;
	for i = 1,2 do&lt;br /&gt;
		row = rows[k]&lt;br /&gt;
		blank = addBlank(k, rounds &amp;lt; 2 and {['height'] = '7px'} or nil)&lt;br /&gt;
		if row then&lt;br /&gt;
			renderTeam(row, rounds + 1, i, i == 1, false)&lt;br /&gt;
		end&lt;br /&gt;
		if rounds &amp;lt; 2 and not compact then&lt;br /&gt;
			blank = addBlank(k+1, {['height'] = '7px'})&lt;br /&gt;
		end&lt;br /&gt;
		k = k + (compact and 1 or 2)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function maskRows(tbl, count, offsetcount)&lt;br /&gt;
	local rmin = 1&lt;br /&gt;
	local rmax = count&lt;br /&gt;
	for i = rmin, rmax do&lt;br /&gt;
		mask[i] = false&lt;br /&gt;
	end&lt;br /&gt;
	if showThird then&lt;br /&gt;
		for i = offsetThird,(offsetThird+ (compact and 3 or 5)) do&lt;br /&gt;
			rmax = (i &amp;gt; rmax) and i or rmax&lt;br /&gt;
			mask[i] = true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for r = 1, maxround do&lt;br /&gt;
		local teams = math.pow(2, rounds - r + 1)&lt;br /&gt;
		local step = count / teams&lt;br /&gt;
		local topTeam = true -- is top row in match-up&lt;br /&gt;
		local team = 1&lt;br /&gt;
&lt;br /&gt;
		for i = 1, count, step do&lt;br /&gt;
			local offset, height, blank&lt;br /&gt;
			local hideteam = false&lt;br /&gt;
			if r &amp;lt;= byes then&lt;br /&gt;
				hideteam = isHidden(r, team)&lt;br /&gt;
			end&lt;br /&gt;
			if (r == 1) and (RD1seedmap[team] &amp;lt;= 0) then&lt;br /&gt;
				hideteam = true&lt;br /&gt;
			end&lt;br /&gt;
			if not hideteam then&lt;br /&gt;
				local j = topTeam and i + step - (compact and 1 or 2) or i&lt;br /&gt;
				mask[j] = true&lt;br /&gt;
			end&lt;br /&gt;
			team = team + 1&lt;br /&gt;
			topTeam = not topTeam&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	for r = 1, maxround do&lt;br /&gt;
		local roundFromLast = rounds - r + 1&lt;br /&gt;
		local groups = math.pow(2, roundFromLast - 2)&lt;br /&gt;
		local step = count / groups&lt;br /&gt;
		local group = 1&lt;br /&gt;
		for i = step / 2, count, step do&lt;br /&gt;
			if args['RD' .. r .. '-group' .. group] then&lt;br /&gt;
				mask[i] = true&lt;br /&gt;
				mask[i+1] = true&lt;br /&gt;
			end&lt;br /&gt;
			group = group + 1&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local mmin, mmax = rmax, rmin&lt;br /&gt;
	for i = rmin, rmax do&lt;br /&gt;
		if mask[i] == true then&lt;br /&gt;
			mmin = (i &amp;lt; mmin) and i or mmin&lt;br /&gt;
			mmax = (i &amp;gt; mmax) and i or mmax&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for i = mmin, mmax do&lt;br /&gt;
		rows[i] = addTableRow(tbl)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderTree(tbl)&lt;br /&gt;
	-- create 3 or 1 rows for every team&lt;br /&gt;
	local count = math.pow(2, rounds) * (compact and 1 or 3)&lt;br /&gt;
	local offsetcount = 2 * (compact and 1 or 3) + (compact and 2 or 3)&lt;br /&gt;
	offsetThird = getThirdOffset()&lt;br /&gt;
	maskRows(tbl, count, offsetcount)&lt;br /&gt;
	if showThird then&lt;br /&gt;
		for i = (count+1), (offsetcount + offsetThird) do&lt;br /&gt;
			if (rounds &amp;gt; 1) then&lt;br /&gt;
				local blank = addBlank(i, nil, 1, tonumber(hideSeeds and '3' or '4') + legs[1])&lt;br /&gt;
				if compact and (rounds &amp;gt; 2) then&lt;br /&gt;
					blank = addBlank(i, nil, 1, tonumber(hideSeeds and '3' or '4') + legs[1])&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if not compact then&lt;br /&gt;
		-- fill rows with groups&lt;br /&gt;
		for r = 1, rounds - 1 do&lt;br /&gt;
			renderGroups(count, r)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	-- fill rows with bracket&lt;br /&gt;
	for r = 1, maxround do&lt;br /&gt;
		renderRound(count, r)&lt;br /&gt;
	end&lt;br /&gt;
	if showThird then&lt;br /&gt;
		renderThird(count, compact)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderHeadings(tbl)&lt;br /&gt;
	local titleRow = addTableRow((not hideHeadings) and tbl or mw.html.create('table'))&lt;br /&gt;
	local widthRow = addTableRow(tbl)&lt;br /&gt;
	for r = 1, (compactFinal and (maxround-1) or maxround) do&lt;br /&gt;
		titleRow:tag('td')&lt;br /&gt;
		widthRow:tag('td'):css('width', r &amp;gt; 1 and '5px' or '1px')&lt;br /&gt;
		if compactFinal and r == (maxround-1) then&lt;br /&gt;
			addHeading(titleRow, r, getRoundName(r), legs[r+1] - legs[r])&lt;br /&gt;
		else&lt;br /&gt;
			addHeading(titleRow, r, getRoundName(r) )&lt;br /&gt;
		end&lt;br /&gt;
		local seedCell&lt;br /&gt;
		if (not hideSeeds) then&lt;br /&gt;
			seedCell = widthRow:tag('td'):css('width', getWidth('seed', '25px'))&lt;br /&gt;
		end&lt;br /&gt;
		local teamCell = widthRow:tag('td'):css('width', getWidth('team', '150px'))&lt;br /&gt;
		local scoreCells = {}&lt;br /&gt;
		local legsr = legs[r]&lt;br /&gt;
		if compactFinal and r == (maxround-1) then&lt;br /&gt;
			legsr = legs[r+1] &amp;gt; legs[r] and legs[r+1] or legs[r]&lt;br /&gt;
		end&lt;br /&gt;
		for s = 1, legsr do&lt;br /&gt;
			scoreCells[s] = widthRow:tag('td'):css('width', getWidth('score', '25px'))&lt;br /&gt;
		end&lt;br /&gt;
		titleRow:tag('td')&lt;br /&gt;
		widthRow:tag('td'):css('width', r &amp;lt; rounds and '5px' or '1px')&lt;br /&gt;
&lt;br /&gt;
		if compact then&lt;br /&gt;
			teamCell:css('height', '7px')&lt;br /&gt;
		else&lt;br /&gt;
			if seedCell then&lt;br /&gt;
				seedCell:wikitext('&amp;amp;nbsp;')&lt;br /&gt;
			end&lt;br /&gt;
			teamCell:wikitext('&amp;amp;nbsp;')&lt;br /&gt;
			for s = 1, legs[r] do&lt;br /&gt;
				scoreCells[s]:wikitext('&amp;amp;nbsp;')&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	parseArgs(frame)&lt;br /&gt;
	rounds = tonumber(args.rounds) or 2&lt;br /&gt;
	maxround = tonumber(args.maxround) or rounds&lt;br /&gt;
	local teams = math.pow(2, rounds)&lt;br /&gt;
	compact = (args['compact'] and (args['compact'] == 'yes' or args['compact'] == 'y'))&lt;br /&gt;
	compactFinal = ((rounds &amp;gt; 4) and compact and args['compact-final'] and (args['compact-final'] == 'yes' or args['compact-final'] == 'y'))&lt;br /&gt;
	sepwidth = tonumber(args['sepwidth'] or ((args.sets or args.legs) and 1) or (compact and 1) or 2) or 1&lt;br /&gt;
	aggregate = (args['aggregate'] or ''):lower()&lt;br /&gt;
	aggsep = args['aggsep'] or args['aggregate'] or nil&lt;br /&gt;
	boldwinner = args['boldwinner'] or args['bold_winner'] or ''&lt;br /&gt;
	local autoSeeds = (args['autoseeds'] and (args['autoseeds'] == 'yes' or args['autoseeds'] == 'y'))&lt;br /&gt;
	hideSeeds = (args['seeds'] and (args['seeds'] == 'no' or args['seeds'] == 'n'))&lt;br /&gt;
	showSeeds = (args['seeds'] and (args['seeds'] == 'yes' or args['seeds'] == 'y'))&lt;br /&gt;
	byes = (args['byes'] and (args['byes'] == 'yes' or args['byes'] == 'y') and 1) or (tonumber(args['byes'] or '0') or 0)&lt;br /&gt;
	hideomittedscores = (args['hideomittedscores'] and (args['hideomittedscores'] == 'yes' or args['hideomittedscores'] == 'y') and 1) or (tonumber(args['hideomittedscores'] or '0') or 0)&lt;br /&gt;
	hideHeadings = (args['headings'] and (args['headings'] == 'no' or args['headings'] == 'n'))&lt;br /&gt;
	showThird = isnotblank(args['3rd']) or isnotblank(args['3rd-team1']) or isnotblank(args['3rd-team2'])&lt;br /&gt;
	local align = (args['float'] or args['align'] or ''):lower()&lt;br /&gt;
	local clear = args['clear'] or 'none'&lt;br /&gt;
	parseSeedmap(args['RD1-omit'])&lt;br /&gt;
	parseLegs(args.sets or args.legs)&lt;br /&gt;
	&lt;br /&gt;
	if autoSeeds then&lt;br /&gt;
		-- set default seeds for round 1&lt;br /&gt;
		local seeds = getSeeds()&lt;br /&gt;
		for i = 1, table.getn(seeds) do&lt;br /&gt;
			local argname = getTeamArgName(1, 'seed', i)&lt;br /&gt;
			if not args[argname] then&lt;br /&gt;
				args[argname] = seeds[i]&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- create the table&lt;br /&gt;
	local tbl = mw.html.create('table')&lt;br /&gt;
		:css('border-style', 'none')&lt;br /&gt;
		:css('font-size', '90%')&lt;br /&gt;
		:css('border-collapse', 'separate')&lt;br /&gt;
		:css('border-spacing', '0')&lt;br /&gt;
		:attr('cellpadding', '0')&lt;br /&gt;
&lt;br /&gt;
	if (args['nowrap'] and (args['nowrap'] == 'yes' or args['nowrap'] == 'y')) then&lt;br /&gt;
		tbl:css('white-space', 'nowrap')&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if align == 'right' then&lt;br /&gt;
		tbl:css('float', 'right')&lt;br /&gt;
		if clear ~= 'none' and clear ~= 'no' and clear ~= 'n' then&lt;br /&gt;
			tbl:css('clear', 'right')&lt;br /&gt;
		end&lt;br /&gt;
		tbl:css('margin', '1em 0 1em 2em')&lt;br /&gt;
	elseif align == 'left' then&lt;br /&gt;
		tbl:css('float', 'left')&lt;br /&gt;
		if clear ~= 'none' and clear ~= 'no' and clear ~= 'n' then&lt;br /&gt;
			tbl:css('clear', 'left')&lt;br /&gt;
		end&lt;br /&gt;
		tbl:css('margin', '1em 2em 1em 0')&lt;br /&gt;
	elseif align == 'center' or align == 'centre' then&lt;br /&gt;
		tbl:css('margin', '1em auto')&lt;br /&gt;
	else&lt;br /&gt;
		tbl:css('margin', '1em 2em 1em 1em')&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	renderHeadings(tbl)&lt;br /&gt;
	renderTree(tbl)&lt;br /&gt;
	return tostring(tbl) .. tcats&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.teamBracket(frame)&lt;br /&gt;
	return p.main(frame)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Pokeylope</name></author>
	</entry>
	<entry>
		<id>https://glolfwiki.sibr.dev/index.php?title=Module:RoundN&amp;diff=232</id>
		<title>Module:RoundN</title>
		<link rel="alternate" type="text/html" href="https://glolfwiki.sibr.dev/index.php?title=Module:RoundN&amp;diff=232"/>
		<updated>2021-06-06T21:14:02Z</updated>

		<summary type="html">&lt;p&gt;Pokeylope: Created page with &amp;quot;-- https://en.wikipedia.org/wiki/Module:RoundN local p = { 	RD = { 		'Quarter-finals', 		'Semi-finals', 		'Final', 		'Third place' 	}, 	bgColor = {head = '#f2f2f2', 'gold', 's...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- https://en.wikipedia.org/wiki/Module:RoundN&lt;br /&gt;
local p = {&lt;br /&gt;
	RD = {&lt;br /&gt;
		'Quarter-finals',&lt;br /&gt;
		'Semi-finals',&lt;br /&gt;
		'Final',&lt;br /&gt;
		'Third place'&lt;br /&gt;
	},&lt;br /&gt;
	bgColor = {head = '#f2f2f2', 'gold', 'silver', '#C96', '#f9f9f9'},&lt;br /&gt;
	reuseStr = {},&lt;br /&gt;
	saveStr = function(self, name, ...)&lt;br /&gt;
		if not self.reuseStr[name] then&lt;br /&gt;
			self.reuseStr[name] = table.concat{...}&lt;br /&gt;
		end&lt;br /&gt;
		return self.reuseStr[name]&lt;br /&gt;
	end&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
--Provides a convenient naming shortcut up to {{#invoke:RoundN|N512}} = {{invoke:RoundN|main|columns = 9}}&lt;br /&gt;
for columns = 1, 9 do&lt;br /&gt;
	local N = math.pow(2, columns)&lt;br /&gt;
	p['N' .. N] = function(frame)&lt;br /&gt;
		return p.main(frame.args, columns)&lt;br /&gt;
	end&lt;br /&gt;
	p['n' .. N] = p['N' .. N]--to make case insensitive&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--saves memory and avoids errors when using a nil as a table by providing a temporary table; if using nil as false; use 'table(k)' to look up table[k]&lt;br /&gt;
p.nilAsTab = {&lt;br /&gt;
	__index = function(t, i)&lt;br /&gt;
		return setmetatable({}, setmetatable(p.nilAsTab, {__index = {t = t, i = i}}))&lt;br /&gt;
	end,&lt;br /&gt;
	__newindex = function (pt, pi, v) --store new values in actual table rather than temporary&lt;br /&gt;
		rawset(p.nilAsTab.t, p.nilAsTab.i, {})[p.nilAsTab.i][pi] = v&lt;br /&gt;
		setmetatable(p.nilAsTab.t[p.nilAsTab.i], {__call = p.nilAsTab.__call})&lt;br /&gt;
	end,&lt;br /&gt;
	__call = function(t, i)&lt;br /&gt;
		return t and rawget(t, i)&lt;br /&gt;
	end&lt;br /&gt;
}&lt;br /&gt;
--never assign a value to these or they will stop being empty&lt;br /&gt;
local infiniteEmpty = setmetatable({}, {__index = setmetatable({}, p.nilAsTab), p.nilAsTab}) -- infiniteEmpty[1][2][3]...[infinity] = {}&lt;br /&gt;
local callableEmpty = setmetatable({}, p.nilAsTab)&lt;br /&gt;
&lt;br /&gt;
local rowNum, head, m, col, tab, esc = {}, {}, {num = 1, phase = 0, bold = infiniteEmpty}, {}, mw.html.create'table', {&lt;br /&gt;
	bs = require'Module:Escape',--backslash&lt;br /&gt;
	comma = {['(%([^,]*),([^%)]*%))'] = '%1|@!#|%2'},--escape commas in ()&lt;br /&gt;
}&lt;br /&gt;
local nodeFunc = {&lt;br /&gt;
	scanPattern = function(self, args, step)&lt;br /&gt;
		self.pattern = nil&lt;br /&gt;
		if args[step] then&lt;br /&gt;
			self.pattern, self.nonFunc = string.match(esc.bs:text(args[step]), '^node_function{(.-)}(.*)')&lt;br /&gt;
		end&lt;br /&gt;
		if self.pattern then&lt;br /&gt;
			for k, v in pairs(esc.comma) do&lt;br /&gt;
				self.pattern = self.pattern:gsub(k, v)&lt;br /&gt;
			end&lt;br /&gt;
			self.nonFunc = self.nonFunc and esc.bs:undo(self.nonFunc)&lt;br /&gt;
			self.pattern = mw.text.split(self.pattern, '%s*,%s*')&lt;br /&gt;
			for k, v in ipairs(self.pattern) do&lt;br /&gt;
				local func, arg = string.match(v, '^(%w+)%(?([^%)]*)')&lt;br /&gt;
				if func and self[func] and self[func].main then&lt;br /&gt;
					self.pattern[k] = func&lt;br /&gt;
					if arg then&lt;br /&gt;
						for x, y in pairs(esc.comma) do&lt;br /&gt;
							arg = esc.bs:undo(arg):gsub(y:gsub('%%%d', ''), x:match('%)([^%(])%(') or x:gsub('\\', ''))&lt;br /&gt;
						end&lt;br /&gt;
						self[func].arg = self[func].arg or {}&lt;br /&gt;
						self[func].arg[m.num] = arg&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return self.pattern&lt;br /&gt;
	end,&lt;br /&gt;
	helper = {&lt;br /&gt;
		topBranch = function()--node is top of fork if top is 0&lt;br /&gt;
			return (m.num - col.top) % 2&lt;br /&gt;
		end,&lt;br /&gt;
		addText = function(text)&lt;br /&gt;
			if text and text ~= '' then&lt;br /&gt;
				tab.r:wikitext(text)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	},&lt;br /&gt;
	line = {--this node is omitted and replaced with a line&lt;br /&gt;
		main = function(x)&lt;br /&gt;
			local h = p.getNodeFunc()&lt;br /&gt;
			if m.available then&lt;br /&gt;
				local text, topId, isTop, notTop = h.line.arg[m.num] or '', h.topBranch()&lt;br /&gt;
				isTop = topId == 0&lt;br /&gt;
				notTop = {[isTop and 1 or 0] = p.reuseStr.solid}&lt;br /&gt;
				for k = 0, 1 do&lt;br /&gt;
					tab.r = rowNum[m.r + k * 4]:tag'td'&lt;br /&gt;
						:css(notTop[k] and&lt;br /&gt;
							{[isTop and 'border-top' or 'border-bottom'] = notTop[k]}&lt;br /&gt;
							or {}&lt;br /&gt;
						)&lt;br /&gt;
						:attr{&lt;br /&gt;
							rowspan = ({[0] = 4, 2})[k],&lt;br /&gt;
							colspan = p.colspan&lt;br /&gt;
						}&lt;br /&gt;
					h.addText(text or h.nonFunc)&lt;br /&gt;
					text = nil&lt;br /&gt;
				end&lt;br /&gt;
				m.available = false&lt;br /&gt;
			else&lt;br /&gt;
				return nil&lt;br /&gt;
			end&lt;br /&gt;
			return x&lt;br /&gt;
		end&lt;br /&gt;
	},&lt;br /&gt;
	bridge = {--Draw a line to the neighboring node in the same column that is not connected to the current node&lt;br /&gt;
		main = function(x)&lt;br /&gt;
			local h = p.getNodeFunc()&lt;br /&gt;
			h.bridge.lay[col.c][m.num - col.top + 1 + (h.topBranch() == 1 and 1 or -1)] = true&lt;br /&gt;
			h.addText(nonFunc)&lt;br /&gt;
			return x&lt;br /&gt;
		end,&lt;br /&gt;
		lay = setmetatable({}, p.nilAsTab)&lt;br /&gt;
	},&lt;br /&gt;
	canvas = {--Merges all cells in node. Content will be the next parameter.&lt;br /&gt;
		main = function(x)&lt;br /&gt;
			local h = p.getNodeFunc()&lt;br /&gt;
			if m.available then&lt;br /&gt;
				tab.r = rowNum[m.r]:tag'td'&lt;br /&gt;
					:attr{&lt;br /&gt;
						rowspan = 6,&lt;br /&gt;
						colspan = p.colspan&lt;br /&gt;
					}&lt;br /&gt;
				h.addText(h.nonFunc)&lt;br /&gt;
				m.available = false&lt;br /&gt;
				return x&lt;br /&gt;
			else&lt;br /&gt;
				return nil&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	},&lt;br /&gt;
	orphan = {--sets a flag for skipMatch to be set by p._main&lt;br /&gt;
		main = function(x)&lt;br /&gt;
			p.getNodeFunc().orphan.num = m.num&lt;br /&gt;
			return x&lt;br /&gt;
		end&lt;br /&gt;
	},&lt;br /&gt;
	skipAllowed = {--table of supported node functions when node is skipped (i.e. by skipmatch)&lt;br /&gt;
		bridge = true,&lt;br /&gt;
		canvas = true&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
setmetatable(nodeFunc.helper, {__index = nodeFunc})&lt;br /&gt;
function p.getNodeFunc()&lt;br /&gt;
	return nodeFunc.helper&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function newRow(bodyRow)&lt;br /&gt;
	local first = p.flex_tree.merge and mw.clone(p.flex_tree.cell) or p.flex_tree.cell&lt;br /&gt;
	tab.r = tab:tag'tr'&lt;br /&gt;
		:node(first)&lt;br /&gt;
	if bodyRow then&lt;br /&gt;
		table.insert(rowNum, bodyRow, tab.r)&lt;br /&gt;
		if p.flex_tree.merge then&lt;br /&gt;
			rowNum[bodyRow].first = first&lt;br /&gt;
			rowNum[bodyRow].first.unchanged = true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function drawHead(text, row3rd)&lt;br /&gt;
	local td = (row3rd and rowNum[row3rd]:tag'td':attr{rowspan = 2}&lt;br /&gt;
		or head.row:tag'td')&lt;br /&gt;
		:attr{colspan = p.colspan}&lt;br /&gt;
	if text ~= 'omit_label' then&lt;br /&gt;
		td:wikitext(text):css{&lt;br /&gt;
			['text-align'] = 'center',&lt;br /&gt;
			border = '1px solid #aaa',&lt;br /&gt;
			background = p.bgColor.head&lt;br /&gt;
		}&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function spacer(width)&lt;br /&gt;
	tab.r:tag'td'&lt;br /&gt;
		:attr{width = width}&lt;br /&gt;
		:wikitext(p.no_column_head and '' or '&amp;amp;nbsp;')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function dpBox(v, r)&lt;br /&gt;
	p.dpBoxBase = p.dpBoxBase or mw.html.create'td':attr{rowspan = 2, colspan = p.colspan}&lt;br /&gt;
	if not v then&lt;br /&gt;
		p.dpBoxEmpty = p.previewnumbers and mw.clone(p.dpBoxBase) or p.dpBoxEmpty or mw.clone(p.dpBoxBase):wikitext(p.flex_tree.wt)&lt;br /&gt;
		rowNum[r]:node(p.dpBoxEmpty)&lt;br /&gt;
	else&lt;br /&gt;
		rowNum[r]:node(mw.clone(p.dpBoxBase):wikitext(v))&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.scoreWasher = {&lt;br /&gt;
	numberFormat = '%-?%d+%.?%d*',&lt;br /&gt;
	main = function (self, s)&lt;br /&gt;
		if s then&lt;br /&gt;
			for _, cycle in ipairs(self.cycles) do&lt;br /&gt;
				s = s:gsub(unpack(cycle))&lt;br /&gt;
			end&lt;br /&gt;
			if p.scoreSumBox and self.plus then&lt;br /&gt;
				local t = 0&lt;br /&gt;
				for _, part in ipairs(mw.text.split(s, self.plus)) do&lt;br /&gt;
					t = t + (tonumber(part:match('%-?%d+%.?%d*')) or 0)&lt;br /&gt;
				end&lt;br /&gt;
				return t&lt;br /&gt;
			end&lt;br /&gt;
			return tonumber(s:match(self.numberFormat)) or math.huge&lt;br /&gt;
		end&lt;br /&gt;
		return 0&lt;br /&gt;
	end,&lt;br /&gt;
	spin = function(self, v)&lt;br /&gt;
		table.insert(self, v)&lt;br /&gt;
		return self&lt;br /&gt;
	end,&lt;br /&gt;
	load = function (self, cycle)&lt;br /&gt;
		local wash, rinse = 0, {spin = self.spin}&lt;br /&gt;
		for v in cycle:gfind('%(([^%(%)]-)%)') do&lt;br /&gt;
			if v == '_plus_' then&lt;br /&gt;
				self.plus = v&lt;br /&gt;
				rinse:spin(v)&lt;br /&gt;
				cycle = cycle:gsub('%(_plus_%)', '', 1)&lt;br /&gt;
			else&lt;br /&gt;
				wash = wash + 1&lt;br /&gt;
				rinse:spin('%'):spin(wash)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		table.insert(self.cycles, {esc.bs:undo(cycle, '%%'), table.concat(rinse)})&lt;br /&gt;
	end,&lt;br /&gt;
	init = function(self, setting)&lt;br /&gt;
		self.cycles = {original = setting}&lt;br /&gt;
		for cycle in (setting and esc.bs:text(setting) or '{&amp;lt;.-&amp;gt;} {[^%d]*}'):gfind('{(.-)}') do&lt;br /&gt;
			self:load(cycle)&lt;br /&gt;
		end&lt;br /&gt;
	end,&lt;br /&gt;
		sum = function (clean)&lt;br /&gt;
		local sum = {0, 0}&lt;br /&gt;
		for _, box in ipairs(clean) do&lt;br /&gt;
			for team, score in ipairs(box) do&lt;br /&gt;
				sum[team] = sum[team] + score&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return unpack(math.max(unpack(sum)) == math.huge and {'&amp;amp;mdash;', '&amp;amp;mdash;'} or sum)&lt;br /&gt;
	end&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local function boldWin(s1, s2)&lt;br /&gt;
	return setmetatable(&lt;br /&gt;
		p.bold and s1 ~= s2 and (math[({'min', 'max'})[p.bold]](s1, s2) == s1 and {true} or {[2] = true}) or callableEmpty,&lt;br /&gt;
		p.nilAsTab&lt;br /&gt;
	)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function maxSpan(span, start, rows)&lt;br /&gt;
	return math.min(span, math.max(0, rows - start + 1))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--in case of templates like RDseed need padding value&lt;br /&gt;
p.teamBoxPadding = function()&lt;br /&gt;
	return '.6ex'&lt;br /&gt;
end&lt;br /&gt;
p.teamBoxPadTab = {padding = '0 ' .. p.teamBoxPadding()}&lt;br /&gt;
p.teamBoxNormal = {border = '1px solid #aaa', background = p.bgColor[4]}&lt;br /&gt;
local function teamBox(v, r, f)&lt;br /&gt;
	if p.flex_tree.merge and not v and f.phase == 2 then&lt;br /&gt;
		for i = -2, 0 do&lt;br /&gt;
			if rowNum[r + i].first.unchanged then&lt;br /&gt;
				rowNum[r + i].first.unchanged = nil&lt;br /&gt;
				rowNum[r + i].first:node(p.unflex_div)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		tab.r:attr{rowspan = 4}:css{['vertical-align'] = 'center'}&lt;br /&gt;
	else&lt;br /&gt;
		if not p.bold then&lt;br /&gt;
		--backwards compatability (wikitemplates bold each arg individually)&lt;br /&gt;
			local hasBold, b = tostring(v):gsub(&amp;quot;([^']*)'''([^']*)&amp;quot;, '%1&amp;lt;b&amp;gt;%2&amp;lt;/b&amp;gt;')&lt;br /&gt;
			if b == 1 then&lt;br /&gt;
				v = hasBold&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		local cell&lt;br /&gt;
		if f[1] then&lt;br /&gt;
			cell = f.sumBox and f.sumBox[1] and&lt;br /&gt;
				{padding = f.sumBox[1]}&lt;br /&gt;
				or {['border-left'] = f.borderLeft}&lt;br /&gt;
			cell['text-align'] = v and f[1]&lt;br /&gt;
		else&lt;br /&gt;
			cell = p.teamBoxPadTab&lt;br /&gt;
		end&lt;br /&gt;
		tab.r = rowNum[r]:tag'td'&lt;br /&gt;
			:css(p.teamBoxCSS)&lt;br /&gt;
			:css(cell)&lt;br /&gt;
			:attr{rowspan = 2}&lt;br /&gt;
			:node(mw.html.create(f.bold and 'b'):wikitext(v or f[1] and '' or '&amp;amp;nbsp;'))&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._main(args)&lt;br /&gt;
	function args:clean(key, params)--prevent html comments from breaking named args and reduces repeat concatenation&lt;br /&gt;
		params = params or {}&lt;br /&gt;
		local clean = args[key] or params.ifNil&lt;br /&gt;
		if clean then&lt;br /&gt;
			params.append = params.append or ''&lt;br /&gt;
			clean = mw.text.decode(clean):gsub('&amp;lt;!%-.-%-&amp;gt;', ''):gsub(params.pattern or '[^%w-;%.]', '') .. params.append&lt;br /&gt;
			clean = clean ~= params.append and clean or params.ifNil&lt;br /&gt;
		end&lt;br /&gt;
		args[key] = params.keepOld and args[key] or clean&lt;br /&gt;
		return clean&lt;br /&gt;
	end&lt;br /&gt;
	p.cols = tonumber(args:clean('columns', {pattern = '%D'}))&lt;br /&gt;
	p.tCols = (tonumber(args:clean('final_RDs_excluded', {pattern = '%D'})) or 0) + p.cols&lt;br /&gt;
	local matchPer = {&lt;br /&gt;
		pattern = '%d*per%d+[%-x]%d+',&lt;br /&gt;
		vals = '(%d*)per(%d+)([%-x])(%d+)'&lt;br /&gt;
	}&lt;br /&gt;
	local skipMatch, unBold  = {}, {}--(skip|manualbold)match# to boolean&lt;br /&gt;
	for k, _ in pairs(args) do&lt;br /&gt;
		local mType, mNum = string.match(k, '^(%l+)match(%d*)$')&lt;br /&gt;
		mType, mNum = ({skip = skipMatch, manualbold = unBold})[mType], tonumber(mNum)&lt;br /&gt;
		if mType then&lt;br /&gt;
			if mNum then&lt;br /&gt;
				mType[mNum] = args:clean(k) == 'yes' or args[k] == 'true'&lt;br /&gt;
			else&lt;br /&gt;
				for pattern in args:clean(k, {ifNil = ''}):gfind(matchPer.pattern) do&lt;br /&gt;
					local d1, period, op, d2 = pattern:match(matchPer.vals)&lt;br /&gt;
					d1 = tonumber(d1) or 1&lt;br /&gt;
					d2 = op == '-' and d2 or (d1 + period * (d2 - 1))&lt;br /&gt;
					for y = d1, d2, period do&lt;br /&gt;
						mType[y] = true&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				for _, x in ipairs(mw.text.split(args[k]:gsub(matchPer.pattern, ''):gsub('[;%-%a][;%-%a]+', ';'):match('^;*(.-)[;%-]*$'), ';')) do&lt;br /&gt;
					x = mw.text.split(x, '-')&lt;br /&gt;
					for y = tonumber(x[1]) or 1, tonumber(x[2] or x[1]) or 0 do&lt;br /&gt;
						mType[y] = true&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	for _, v in ipairs({--more args to boolean&lt;br /&gt;
		'widescore',&lt;br /&gt;
		'template',&lt;br /&gt;
		'article_include',&lt;br /&gt;
		'color',&lt;br /&gt;
		'3rdplace',&lt;br /&gt;
		'omit_blanks',&lt;br /&gt;
		'scroll_head_unlock',&lt;br /&gt;
		'previewnumbers',&lt;br /&gt;
		'flex_tree',&lt;br /&gt;
		'no_column_head',&lt;br /&gt;
		'short_brackets',&lt;br /&gt;
		'branch_upwards'&lt;br /&gt;
	}) do&lt;br /&gt;
		if args[v] and (p[v] == nil or type(p[v]) == 'boolean') then&lt;br /&gt;
			p[v] = args:clean(v) == 'yes' or args[v] == 'true'&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	p.namespace = mw.title.getCurrentTitle().namespace&lt;br /&gt;
	p.previewnumbers = p.namespace ~= 0 and p.previewnumbers&lt;br /&gt;
	p.scoreWasher:init(args['score-clean'])&lt;br /&gt;
	p.scoreWasher.demo = args.demoWash and tonumber(args:clean('demoWash', {pattern = '%D'}), 10)&lt;br /&gt;
	p.scoreSumBox = args['score-boxes'] and args['score-boxes']:match('%d ?%+ ?sum')&lt;br /&gt;
	p.bold = ({low = 1, high = 2})[args:clean('bold_winner')] or p.scoreSumBox and 2&lt;br /&gt;
	local sumBox = p.scoreSumBox and 1 or 0&lt;br /&gt;
	p.scoreBoxes = (tonumber(args:clean('score-boxes', {pattern = '%D'})) or 1) + sumBox&lt;br /&gt;
	p.scoreSumBox = p.scoreBoxes &amp;gt; 0 and p.scoreSumBox or nil&lt;br /&gt;
	local boxStyle = p.scoreBoxes &amp;gt; 1 and&lt;br /&gt;
		(p.scoreSumBox and&lt;br /&gt;
			setmetatable(&lt;br /&gt;
				{{}, [p.scoreBoxes] = {'0 1ex'}},&lt;br /&gt;
				{__call = function(t, i) if t[i] then return nil end return 0 end}&lt;br /&gt;
			)&lt;br /&gt;
			or setmetatable(&lt;br /&gt;
				{},&lt;br /&gt;
				{__call = function() return 0 end}&lt;br /&gt;
			)&lt;br /&gt;
		)&lt;br /&gt;
		or setmetatable({}, {__call = function() return nil end})&lt;br /&gt;
	p.colspan = p.scoreBoxes &amp;gt; 0 and (p.scoreBoxes + 1) or nil&lt;br /&gt;
	local nodeArgs = {&lt;br /&gt;
		score = p.scoreBoxes - sumBox,&lt;br /&gt;
		team = {offset = 1 + p.scoreBoxes - sumBox}&lt;br /&gt;
	}&lt;br /&gt;
	nodeArgs.all = 1 + nodeArgs.team.offset * 2&lt;br /&gt;
	nodeArgs.tableSum = {&lt;br /&gt;
		__add = function(v, t)&lt;br /&gt;
			if #t == 3 then&lt;br /&gt;
				return v + nodeArgs.all&lt;br /&gt;
			end&lt;br /&gt;
			local s = v&lt;br /&gt;
			for i, n in ipairs(t) do&lt;br /&gt;
				s = s + n&lt;br /&gt;
			end&lt;br /&gt;
			return s--[[ + (p.scoreSumBox and #t == 3 and -2 or 0) --merging disabled with score boxes, uncomment if enable]]&lt;br /&gt;
		end&lt;br /&gt;
	}&lt;br /&gt;
	nodeArgs.team[1] = 1--constant to be replaced later by new param&lt;br /&gt;
	nodeArgs.team[2] = nodeArgs.team[1] + nodeArgs.team.offset&lt;br /&gt;
	nodeArgs.blank = setmetatable({}, nodeArgs.tableSum)&lt;br /&gt;
	p.unflex_div = mw.html.create'div'&lt;br /&gt;
					:css{overflow = 'hidden', height = '1ex'}&lt;br /&gt;
					:wikitext'&amp;amp;nbsp;'&lt;br /&gt;
	p.flex_tree = setmetatable({},{__index = {&lt;br /&gt;
		merge = p.flex_tree and p.scoreBoxes == 0,&lt;br /&gt;
		wt = p.flex_tree and '' or '&amp;amp;nbsp;',&lt;br /&gt;
		cell = mw.html.create'td'&lt;br /&gt;
			:node(not p.flex_tree and p.unflex_div or nil)&lt;br /&gt;
	}})&lt;br /&gt;
	if args:clean'scroll_height' then&lt;br /&gt;
		local fontSize, fontUnit = args.style and args.style:match('font%-size *: *(%d+)([^ ]+)')&lt;br /&gt;
		if fontSize then&lt;br /&gt;
			local units = {&lt;br /&gt;
				em = 1,&lt;br /&gt;
				ex = 2,&lt;br /&gt;
				['%'] = 0.01&lt;br /&gt;
			}&lt;br /&gt;
			fontSize, fontUnit = {fontSize * fontUnit}&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	tab&lt;br /&gt;
		:cssText(table.concat{args.scroll_height and 'padding' or 'margin', ':', fontSize and (math.ceil(fontSize * 10) / 10) or '.9', 'em 2em 1em 1em;border:0;', fontSize and '' or 'font-size:90%;border-collapse:separate;', args.style})&lt;br /&gt;
		:attr{cellpadding = 0, cellspacing = 0}&lt;br /&gt;
	if not p.no_column_head then--headings row&lt;br /&gt;
		newRow()&lt;br /&gt;
		head.row = tab.r&lt;br /&gt;
			:css{['white-space'] = args.scroll_height and 'nowrap'}&lt;br /&gt;
		newRow()&lt;br /&gt;
	else&lt;br /&gt;
		tab.r = tab:tag'tr'&lt;br /&gt;
		tab.r:tag'td'&lt;br /&gt;
	end&lt;br /&gt;
	local sp = {--set column widths&lt;br /&gt;
		args['team-width'] or 170,&lt;br /&gt;
		p.widescore and 40 or 30,&lt;br /&gt;
		p.short_brackets and 6 or 15,&lt;br /&gt;
		p.short_brackets and 4 or 20&lt;br /&gt;
	}&lt;br /&gt;
	local scoreWidth = args:clean('score-width', {pattern = '[^%d;]'}) and mw.text.split(args['score-width'], ';') or {}&lt;br /&gt;
	scoreWidth[1] = tonumber(scoreWidth[1], 10)&lt;br /&gt;
	if p.scoreSumBox and #scoreWidth ~= 1 then&lt;br /&gt;
		local _scoreWidth = {}&lt;br /&gt;
		for k = 1, p.scoreBoxes - 1 do&lt;br /&gt;
			_scoreWidth[k] = tonumber(scoreWidth[k], 10) or math.ceil(sp[2] * 0.75)&lt;br /&gt;
		end&lt;br /&gt;
		setmetatable(scoreWidth, _scoreWidth)&lt;br /&gt;
	end&lt;br /&gt;
	if p.template or p.article_include then&lt;br /&gt;
		p.template = mw.title.new(args.name)&lt;br /&gt;
		p.templateFixedName = (p.template.namespace == 0 and not p.article_include and 'Template:' or '') .. p.template.fullText&lt;br /&gt;
	end&lt;br /&gt;
	p.template = p.template and mw.title.new(args:clean('name', {pattern = ''}))&lt;br /&gt;
	local head_br = {&lt;br /&gt;
		count = 0,&lt;br /&gt;
		compare = function (self, text)&lt;br /&gt;
			if text and args.scroll_height then&lt;br /&gt;
				local _, count = text:gsub('&amp;lt;br[ &amp;gt;/]', '%1')&lt;br /&gt;
				self.count = math.max(self.count, count)&lt;br /&gt;
			end&lt;br /&gt;
			return text&lt;br /&gt;
		end&lt;br /&gt;
	}&lt;br /&gt;
	p.branch_upwards = p.branch_upwards and 0&lt;br /&gt;
	for k = 1, p.cols do&lt;br /&gt;
		if k &amp;gt; 1 then&lt;br /&gt;
			spacer(sp[3])&lt;br /&gt;
			spacer(sp[4])&lt;br /&gt;
			if not p.no_column_head then&lt;br /&gt;
				head.row:tag'td':attr{colspan = 2}&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		spacer(sp[1])&lt;br /&gt;
		for s = 1, p.scoreBoxes do&lt;br /&gt;
			spacer(#scoreWidth == 1 and scoreWidth[1] or scoreWidth[s] or sp[2])&lt;br /&gt;
		end&lt;br /&gt;
		if not p.no_column_head then&lt;br /&gt;
			head.wt = head_br:compare(args:clean('RD' .. k, {pattern = ''}))&lt;br /&gt;
				or p.RD[#p.RD + k - p.tCols - 1]&lt;br /&gt;
				or ('Round of ' .. math.pow(2, p.tCols - k + 1))&lt;br /&gt;
			drawHead(&lt;br /&gt;
				k == 1 and p.template and mw.getCurrentFrame():expandTemplate{&lt;br /&gt;
					title = 'navbar-header',&lt;br /&gt;
					args = {head.wt, p.templateFixedName}&lt;br /&gt;
				} or head.wt&lt;br /&gt;
			)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	sp.row = tab.r&lt;br /&gt;
	col.tot = math.pow(2, p.tCols - 1)&lt;br /&gt;
	local step, bump, bumpBase, rows = 1, 0, mw.html.create'td':attr{colspan = p.colspan}, col.tot * 6--Begin body row output&lt;br /&gt;
	args.line_px = table.concat{args:clean('line_px') or 3, args.line_px ~= '0' and 'px' or nil}&lt;br /&gt;
	tab.line = {--reduces concats and 'or' statements&lt;br /&gt;
		{&lt;br /&gt;
			[true] = args.line_px,&lt;br /&gt;
			[false] = 0&lt;br /&gt;
		},&lt;br /&gt;
		args.line_px:rep(2):gsub('(%a)(%d)', '%1 %2', 1)&lt;br /&gt;
	}&lt;br /&gt;
	p['3rdplace'] =  p.tCols == p.cols and (p['3rdplace'] or p.cols &amp;gt; 3 and nil == p['3rdplace'] and not p.no_column_head)&lt;br /&gt;
	if p['3rdplace'] then&lt;br /&gt;
		p.textThird = args.Consol or args['RD' .. (p.cols + 1)] or p.RD[4]&lt;br /&gt;
		local no3rdText = p.no_column_head or p.textThird and p.textThird:match('omit_label')&lt;br /&gt;
		rowNum.third = math.max(math.pow(2, p.branch_upwards and -3 or p.cols - 2) * 9 + (no3rdText and 4 or 9), no3rdText and 12 or 17, rows)&lt;br /&gt;
	end&lt;br /&gt;
	for r = 1, rowNum.third or rows do&lt;br /&gt;
		newRow(r)&lt;br /&gt;
	end&lt;br /&gt;
	p:saveStr('solid', tab.line[1][true], ' solid')&lt;br /&gt;
	p.cornerDiv = mw.html.create'div':css{height = tab.line[1][true], ['border-right'] = p.reuseStr.solid}&lt;br /&gt;
	for c = 1, p.cols do&lt;br /&gt;
		col.c = c&lt;br /&gt;
		local bumps = bump&lt;br /&gt;
		if c &amp;gt; 1 then&lt;br /&gt;
			col.tot = col.tot + math.pow(2, p.tCols - c)&lt;br /&gt;
			if p.branch_upwards then&lt;br /&gt;
				bumps = 0&lt;br /&gt;
				rowNum[1]:tag'td':attr{rowspan = 4}&lt;br /&gt;
			else&lt;br /&gt;
			rowNum[1]:node(c &amp;lt; p.cols and&lt;br /&gt;
				mw.clone(bumpBase):attr{rowspan = bump}&lt;br /&gt;
				or p.no_column_head and p.template and&lt;br /&gt;
					mw.html.create'td':wikitext(mw.getCurrentFrame():expandTemplate{&lt;br /&gt;
						title = 'navbar-header',&lt;br /&gt;
						args = {'', p.templateFixedName}&lt;br /&gt;
					})&lt;br /&gt;
			)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		col.top = m.num&lt;br /&gt;
		p.span = p.tCols &amp;gt; c and bump * 2 or p.branch_upwards or math.max((bump - 1) / 2, 2)&lt;br /&gt;
		col.show3rd = p['3rdplace'] and c == p.tCols and rowNum.third&lt;br /&gt;
		local colorFinal, bumpMid = p.color and c == p.tCols, p.span &amp;gt; 0 and mw.clone(bumpBase):attr{rowspan = p.span} or nil&lt;br /&gt;
		for r = 1, col.show3rd or rows, 2 do&lt;br /&gt;
			m.r = r + bumps&lt;br /&gt;
			if col.show3rd or rowNum[m.r] and m.num &amp;lt;= col.tot then&lt;br /&gt;
				if m.phase == 0 then&lt;br /&gt;
					m.showBox = setmetatable({1, nodeArgs.team.offset, nodeArgs.team.offset}, nodeArgs.tableSum)&lt;br /&gt;
					if nodeFunc:scanPattern(args, step) then&lt;br /&gt;
						nodeFunc.called = {}&lt;br /&gt;
						m.available = true&lt;br /&gt;
					else&lt;br /&gt;
						m.available = nil&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				if skipMatch[m.num] then&lt;br /&gt;
					if m.phase == 0 then&lt;br /&gt;
						if nodeFunc.pattern then&lt;br /&gt;
							for x, y in ipairs(nodeFunc.pattern) do&lt;br /&gt;
								if nodeFunc.skipAllowed[y] then&lt;br /&gt;
									nodeFunc.called[y] = nodeFunc[y].main(x)&lt;br /&gt;
								end&lt;br /&gt;
							end&lt;br /&gt;
						end&lt;br /&gt;
						local canvas = nodeFunc.pattern and nodeFunc.called.canvas and 6&lt;br /&gt;
						rowNum[m.r + (canvas or 0)]:tag'td':attr{rowspan = maxSpan((canvas and 0 or 6) + bump * 2, m.r + (canvas or 0), rows), colspan = p.colspan}&lt;br /&gt;
					elseif m.phase == 2 then&lt;br /&gt;
						if nodeFunc.pattern and (nodeFunc.called.bridge or nodeFunc.called.canvas) then&lt;br /&gt;
							step = step + 1&lt;br /&gt;
						end&lt;br /&gt;
						m.num = m.num + 1&lt;br /&gt;
						step = step + (p.omit_blanks and 0 or m.showBox)&lt;br /&gt;
						bumps = bumps + (col.show3rd and 0 or maxSpan(p.span, m.r, rows))&lt;br /&gt;
					end&lt;br /&gt;
				elseif m.phase == 0 then&lt;br /&gt;
					if nodeFunc.pattern then&lt;br /&gt;
						for x, y in ipairs(nodeFunc.pattern) do&lt;br /&gt;
							if nodeFunc[y] and nodeFunc[y].main then&lt;br /&gt;
								nodeFunc.called[y] = nodeFunc[y].main(x)&lt;br /&gt;
							end&lt;br /&gt;
						end&lt;br /&gt;
						if m.available == false then&lt;br /&gt;
							m.showBox = nodeArgs.blank&lt;br /&gt;
							step = step + 1&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
					if m.showBox[1] then&lt;br /&gt;
						if col.show3rd then&lt;br /&gt;
							col.show3rd = (m.num - col.top) * 2&lt;br /&gt;
							if col.show3rd == 2 then&lt;br /&gt;
								if p.textThird:match('omit_label') then&lt;br /&gt;
									p.textThird = nil&lt;br /&gt;
								end&lt;br /&gt;
								if rowNum[rows + 1] and p.cols &amp;gt; 1 then --if 3rd place extends below bottom cell&lt;br /&gt;
									rowNum[rows + 1]:tag'td':attr{&lt;br /&gt;
										rowspan = m.r + 9 - rows - (text and 0 or 2),&lt;br /&gt;
										colspan = (p.cols - 1) * (3 + p.scoreBoxes)&lt;br /&gt;
									}&lt;br /&gt;
								end&lt;br /&gt;
								if p.tCols == 1 then&lt;br /&gt;
									bumps = p.textThird and 3 or 0&lt;br /&gt;
								elseif p.branch_upwards then&lt;br /&gt;
									r = 7&lt;br /&gt;
									bumps = p.textThird and 2 or 0&lt;br /&gt;
								end&lt;br /&gt;
								m.r = r + bumps&lt;br /&gt;
								if p.textThird then&lt;br /&gt;
									drawHead(p.textThird, m.r)&lt;br /&gt;
									bumps = bumps + 2&lt;br /&gt;
									m.r = r + bumps&lt;br /&gt;
								end&lt;br /&gt;
							end&lt;br /&gt;
						end&lt;br /&gt;
						dpBox(nodeFunc.pattern and nodeFunc.nonFunc or args[step], m.r)&lt;br /&gt;
						if p.previewnumbers then					&lt;br /&gt;
							rowNum[m.r].nodes[#rowNum[m.r].nodes]&lt;br /&gt;
								:tag'div'&lt;br /&gt;
									:css{&lt;br /&gt;
										float = 'left',&lt;br /&gt;
										border = '1px solid red',&lt;br /&gt;
										padding = '0 .5ex',&lt;br /&gt;
										['color'] = 'red'&lt;br /&gt;
									}&lt;br /&gt;
									:wikitext(m.num)&lt;br /&gt;
									:attr{title = 'Number only visible outside article space (e.g. template) when |numberpreview=yes'}&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
					if p.colspan then&lt;br /&gt;
						m.nonEmpty = {}&lt;br /&gt;
						for s = step + 2, step + nodeArgs.team.offset do&lt;br /&gt;
							local i = {s, s + nodeArgs.team.offset}&lt;br /&gt;
							if args[i[1]] or args[i[2]] then&lt;br /&gt;
								table.insert(m.nonEmpty, i)&lt;br /&gt;
							end&lt;br /&gt;
						end&lt;br /&gt;
						if p.bold and m.showBox[2] and m.showBox[3] and not unBold[m.num] then&lt;br /&gt;
							m.bold = {&lt;br /&gt;
								box = {},&lt;br /&gt;
								clean = {}&lt;br /&gt;
							}&lt;br /&gt;
							local notSummed = not p.scoreSumBox or #m.nonEmpty &amp;lt; 2&lt;br /&gt;
							for s, i in ipairs(m.nonEmpty) do&lt;br /&gt;
								m.bold.clean[s] = {p.scoreWasher:main(args[i[1]]), p.scoreWasher:main(args[i[2]])}&lt;br /&gt;
								m.bold.box[s] = notSummed and boldWin(m.bold.clean[s][1], m.bold.clean[s][2]) or callableEmpty&lt;br /&gt;
							end&lt;br /&gt;
							if p.scoreSumBox and m.nonEmpty[2] then&lt;br /&gt;
								local i = {-step, -step - 1}&lt;br /&gt;
								table.insert(m.nonEmpty, i)&lt;br /&gt;
								args[i[1]], args[i[2]] = p.scoreWasher.sum(m.bold.clean)&lt;br /&gt;
								m.bold.box[p.scoreBoxes] = boldWin(args[i[1]], args[i[2]])&lt;br /&gt;
							end&lt;br /&gt;
							getmetatable(boxStyle).__index = p.scoreSumBoxes and {[#m.nonEmpty] = boxStyle[p.scoreBoxes]}&lt;br /&gt;
							m.bold.win = m.bold.box[#m.nonEmpty] or callableEmpty&lt;br /&gt;
						else&lt;br /&gt;
							m.bold = infiniteEmpty&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				else&lt;br /&gt;
					if m.showBox[m.phase] then&lt;br /&gt;
						p.teamBoxCSS = colorFinal and&lt;br /&gt;
							{border = p.teamBoxNormal.border, background = p.bgColor[m.phase + (col.show3rd or 0)]}&lt;br /&gt;
							or p.teamBoxNormal&lt;br /&gt;
						local f = {phase = m.phase, bold = m.bold.win(m.phase)}&lt;br /&gt;
						teamBox(args[step + nodeArgs.team[m.phase]], m.r, f)&lt;br /&gt;
						f[1] = 'center'&lt;br /&gt;
						if p.colspan then&lt;br /&gt;
							if m.nonEmpty[1] then&lt;br /&gt;
								local loneSum&lt;br /&gt;
								if #m.nonEmpty &amp;lt; p.scoreBoxes then&lt;br /&gt;
									loneSum = #m.nonEmpty == 1 and boxStyle[p.scoreBoxes]&lt;br /&gt;
									tab.r:attr{colspan = 1 + p.scoreBoxes - #m.nonEmpty}&lt;br /&gt;
								end&lt;br /&gt;
								for s, i in ipairs(m.nonEmpty) do&lt;br /&gt;
									f.borderLeft = boxStyle(s)&lt;br /&gt;
									f.sumBox = loneSum or boxStyle[s]&lt;br /&gt;
									f.bold = m.bold.box[s](m.phase)&lt;br /&gt;
									teamBox(args[i[m.phase]], m.r, f)&lt;br /&gt;
								end&lt;br /&gt;
							else&lt;br /&gt;
								for s = 1, p.scoreBoxes do&lt;br /&gt;
									f.borderLeft = boxStyle(s)&lt;br /&gt;
									teamBox(nil, m.r, f)&lt;br /&gt;
								end&lt;br /&gt;
							end&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
					if m.phase == 2 then&lt;br /&gt;
						col.show3rd = col.show3rd ~= 2 and col.show3rd or nil&lt;br /&gt;
						if p.scoreWasher.demo and p.scoreWasher.demo == m.num and p.namespace ~= 0 then&lt;br /&gt;
							table.insert(m.bold.clean, 1, {args[step + nodeArgs.team[1]], args[step + nodeArgs.team[2]]})&lt;br /&gt;
							return table.concat{&lt;br /&gt;
								'Score data for match specified by &amp;lt;code&amp;gt;|demoWash=&amp;lt;/code&amp;gt;:&amp;lt;br&amp;gt;',&lt;br /&gt;
								mw.dumpObject{scores = m.bold.clean, cycles = p.scoreWasher.cycles, sum = p.scoreSumBox and {m.nonEmpty[#m.nonEmpty][1], m.nonEmpty[#m.nonEmpty][1]}},&lt;br /&gt;
								'&amp;lt;table&amp;gt;',&lt;br /&gt;
								tostring(sp.row), '&amp;lt;tr&amp;gt;',&lt;br /&gt;
								tostring(rowNum[m.r - 4]), '&amp;lt;tr&amp;gt;',&lt;br /&gt;
								tostring(rowNum[m.r - 2]), '&amp;lt;tr&amp;gt;',&lt;br /&gt;
								tostring(rowNum[m.r]), '&amp;lt;/table&amp;gt;',&lt;br /&gt;
							}&lt;br /&gt;
						end&lt;br /&gt;
						if nodeFunc.orphan.num == m.num then&lt;br /&gt;
							skipMatch[m.num] = 'orphan'&lt;br /&gt;
						end&lt;br /&gt;
						step = step + m.showBox&lt;br /&gt;
						m.num = m.num + 1&lt;br /&gt;
						if bump &amp;gt; 0 and rowNum[m.r + 2] and not (nodeFunc.pattern and nodeFunc.called.canvas) then&lt;br /&gt;
							bumps = bumps + p.span&lt;br /&gt;
							rowNum[m.r + 2]:node(bumpMid)&lt;br /&gt;
						end&lt;br /&gt;
						r = r + (col.show3rd or bump)&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				m.phase = (m.phase + 1) % 3&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if p.cols &amp;gt; c then--draw lines to next round&lt;br /&gt;
			p.unit = bump + 3&lt;br /&gt;
			bump = 3 * math.pow(2, c) - 3&lt;br /&gt;
			bumps = p.branch_upwards and 4 or (p.unit + 1)&lt;br /&gt;
			rowNum[1]&lt;br /&gt;
				:tag'td':attr{rowspan = bumps}&lt;br /&gt;
			if not p.branch_upwards then&lt;br /&gt;
				rowNum[1]:tag'td'&lt;br /&gt;
					:attr{rowspan = (p.branch_upwards or bump) + 4}&lt;br /&gt;
					:css(nodeFunc.bridge.lay[c](0) and&lt;br /&gt;
						{['border-right'] = p.reuseStr.solid}&lt;br /&gt;
						or {}&lt;br /&gt;
					)&lt;br /&gt;
			end&lt;br /&gt;
			col.n = 0&lt;br /&gt;
			for r = bumps + 1, rows, p.unit * 2 do&lt;br /&gt;
				tab.r = rowNum[r]:tag'td'&lt;br /&gt;
				local interval = ((r - bumps - 1) / (p.unit * 2)) % 4&lt;br /&gt;
				if interval % 2 == 0 then&lt;br /&gt;
					--col.t and col.t2 control whether lines are drawn&lt;br /&gt;
					col.t = col.t2 or skipMatch[col.tot + col.n / 2 + 1] and 3 or ((skipMatch[col.top] and 1 or 0) + (skipMatch[col.top + 1] and 2 or 0))&lt;br /&gt;
					col.n = col.n + 2&lt;br /&gt;
					col.t2 = skipMatch[col.tot + col.n / 2 + 1] and 3 or ((skipMatch[col.top + col.n] and 1 or 0) + (skipMatch[col.top + col.n + 1] and 2 or 0))&lt;br /&gt;
					if col.t == 0 then&lt;br /&gt;
						tab.r&lt;br /&gt;
							:attr{rowspan = maxSpan(p.unit * 2, r, rows)}&lt;br /&gt;
							:css(skipMatch[col.tot + col.n / 2] and {} or {&lt;br /&gt;
								border = p.reuseStr.solid,&lt;br /&gt;
								['border-left'] = 0&lt;br /&gt;
							})&lt;br /&gt;
					else&lt;br /&gt;
						tab.r&lt;br /&gt;
							:attr{rowspan = maxSpan(p.unit, r, rows)}&lt;br /&gt;
							:cssText(col.t == 2 and&lt;br /&gt;
								p:saveStr('topRight', 'border-width:', tab.line[2], ' 0 0;border-style:solid')&lt;br /&gt;
								or col.t == 1 and (nodeFunc.bridge.lay[c](col.n - 2) and&lt;br /&gt;
									p:saveStr('right', ';border-right:', p.reuseStr.solid)&lt;br /&gt;
									or 'vertical-align:bottom'&lt;br /&gt;
								)&lt;br /&gt;
								or nil&lt;br /&gt;
							)&lt;br /&gt;
							:node(col.t == 1 and interval &amp;gt; 0 and not nodeFunc.bridge.lay[c](col.n - 2) and p.cornerDiv)&lt;br /&gt;
						rowNum[r + (p.branch_upwards and (4 - bump) or p.unit)]:tag'td'&lt;br /&gt;
							:attr{rowspan = maxSpan(p.unit, r + p.unit, rows)}&lt;br /&gt;
							:cssText(col.t == 1 and&lt;br /&gt;
								p:saveStr('bttmRght', 'border-width:0 ', tab.line[2], ' 0;border-style:solid')&lt;br /&gt;
								or col.t == 2 and (nodeFunc.bridge.lay[c](col.n + 2) and&lt;br /&gt;
									p:saveStr('right', ';border-right:', p.reuseStr.solid)&lt;br /&gt;
									or 'vertical-align:top'&lt;br /&gt;
								)&lt;br /&gt;
								or nil&lt;br /&gt;
							)&lt;br /&gt;
							:node(col.t == 2 and interval ~= 2 and not nodeFunc.bridge.lay[c](col.n + 2) and p.cornerDiv)&lt;br /&gt;
					end&lt;br /&gt;
					col.t = {&lt;br /&gt;
						col.t &amp;lt; 3,&lt;br /&gt;
						rowNum[r + p.unit * 5] and col.t2 &amp;lt; 3 or false&lt;br /&gt;
					}&lt;br /&gt;
					rowNum[r + (p.branch_upwards or p.unit)]:tag'td'&lt;br /&gt;
						:attr{rowspan = maxSpan(p.unit * 4, r + (p.branch_upwards and (4 - bump) or p.unit), rows)}&lt;br /&gt;
						:css(interval == 0 and (col.t[1] or col.t[2]) and {&lt;br /&gt;
							['border-width'] = table.concat{tab.line[1][col.t[1]], ' 0 ', tab.line[1][col.t[2]]},&lt;br /&gt;
							['border-style'] = 'solid'&lt;br /&gt;
						} or {})&lt;br /&gt;
				else&lt;br /&gt;
					tab.r&lt;br /&gt;
						:attr{rowspan = maxSpan(p.unit * 2, r, rows)}&lt;br /&gt;
						:css(nodeFunc.bridge.lay[c](col.n) and&lt;br /&gt;
							{['border-right'] = p.reuseStr.solid}&lt;br /&gt;
							or {}&lt;br /&gt;
						)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local lock_height = (head_br.count or 0) + 1&lt;br /&gt;
	return args.scroll_height and&lt;br /&gt;
		mw.html.create'div'&lt;br /&gt;
			:cssText'border-bottom:1px solid #eee;display:inline-block'&lt;br /&gt;
			:node(not (p.scroll_head_unlock or p.no_column_head) and mw.html.create'div'&lt;br /&gt;
				:css{&lt;br /&gt;
					overflow = 'hidden',&lt;br /&gt;
					height = lock_height * 1.4 + 1.6 .. 'em',&lt;br /&gt;
					['border-bottom'] = 'inherit',&lt;br /&gt;
					['margin-right'] = '17px'&lt;br /&gt;
				}&lt;br /&gt;
				:node(mw.clone(tab))&lt;br /&gt;
			)&lt;br /&gt;
			:tag'div'&lt;br /&gt;
				:css{&lt;br /&gt;
					['overflow-y'] = 'scroll',&lt;br /&gt;
					['max-height'] = tonumber(args.scroll_height, 10) and args.scroll_height .. 'px' or args.scroll_height&lt;br /&gt;
				}&lt;br /&gt;
				:node(not (p.scroll_head_unlock or p.no_column_head) and&lt;br /&gt;
					tab:css{['margin-top'] = math.floor(-10 * (lock_height * 1.4 + 1.6)/(fontSize or .9)) / 10 .. 'em', ['padding-top'] = '-3px'}&lt;br /&gt;
					or tab&lt;br /&gt;
				)&lt;br /&gt;
			:done()&lt;br /&gt;
		or tab&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[local standard = {&lt;br /&gt;
	'beta' = {&lt;br /&gt;
		bold_winner = 'high',&lt;br /&gt;
		omit_blanks = 'yes',&lt;br /&gt;
		auto_3rd = 'yes'&lt;br /&gt;
	}&lt;br /&gt;
}--]]&lt;br /&gt;
function p.main(frame, columns)&lt;br /&gt;
	local args = require'Module:Arguments'.getArgs(frame, {trim = false})&lt;br /&gt;
	args.columns = args.columns or columns&lt;br /&gt;
	return p._main(args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.seed(frame)&lt;br /&gt;
	local parent = frame:getParent() or frame&lt;br /&gt;
	local function arg(k, alt)&lt;br /&gt;
		return parent.args[k] or frame.args[k] or alt&lt;br /&gt;
	end&lt;br /&gt;
	local padding, width = arg(2, p.teamBoxPadding()), arg(3, arg('widescore') and 40 or 30)&lt;br /&gt;
	padding = tonumber(padding) and tonumber(padding) .. 'px' or padding&lt;br /&gt;
	width = tonumber(width) and tonumber(width) .. 'px' or width&lt;br /&gt;
	return mw.html.create'div'&lt;br /&gt;
		:css{&lt;br /&gt;
			margin = ('-1px %s -1px -%s'):format(padding, padding),&lt;br /&gt;
			float = 'left',&lt;br /&gt;
			['background-color'] = p.bgColor.head,&lt;br /&gt;
			border = '1px solid #aaa',&lt;br /&gt;
			['text-align'] = 'center',&lt;br /&gt;
			width = width&lt;br /&gt;
		}&lt;br /&gt;
		:wikitext(arg(1, '&amp;amp;nbsp;'))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Pokeylope</name></author>
	</entry>
	<entry>
		<id>https://glolfwiki.sibr.dev/index.php?title=Fourth_IGA_Open&amp;diff=229</id>
		<title>Fourth IGA Open</title>
		<link rel="alternate" type="text/html" href="https://glolfwiki.sibr.dev/index.php?title=Fourth_IGA_Open&amp;diff=229"/>
		<updated>2021-06-06T20:52:11Z</updated>

		<summary type="html">&lt;p&gt;Pokeylope: Created page with &amp;quot;The Fourth IGA Open was held on June 6, 2021.  ==Contestants== * Wyatts Mason * Fallen Locomotive * Brie Friendo * Billexed Floating * Lampy Bear * Lilac Starpyne * Melissa...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Fourth IGA Open was held on June 6, 2021.&lt;br /&gt;
&lt;br /&gt;
==Contestants==&lt;br /&gt;
* Wyatts Mason&lt;br /&gt;
* Fallen Locomotive&lt;br /&gt;
* Brie Friendo&lt;br /&gt;
* Billexed Floating&lt;br /&gt;
* Lampy Bear&lt;br /&gt;
* Lilac Starpyne&lt;br /&gt;
* [[Melissa Bop]]&lt;br /&gt;
* [[Baby Bop]]&lt;br /&gt;
* Indefensible Hyrax&lt;br /&gt;
* Ampersand Resplendent&lt;br /&gt;
* Critney Fails&lt;br /&gt;
* Baba&lt;br /&gt;
* [[Legally Jorts]]&lt;br /&gt;
* KerBethany McElroy&lt;br /&gt;
* Fran Beans&lt;br /&gt;
* Bell Carajas&lt;br /&gt;
* Case Sports&lt;br /&gt;
* Ban Freans&lt;br /&gt;
* Axel Cardenas&lt;br /&gt;
* Some Loser&lt;br /&gt;
* My Homosexuality&lt;br /&gt;
* Gaming (concept)&lt;br /&gt;
* Trunks from DBZA&lt;br /&gt;
* Bad Glolfer&lt;br /&gt;
* naruto mullen peterson&lt;br /&gt;
* Penny&lt;br /&gt;
* Course Desirable&lt;br /&gt;
* Literally another brick&lt;br /&gt;
* cthUwU&lt;br /&gt;
* The Censor||The Censor&lt;br /&gt;
* QWERTY&lt;br /&gt;
* Equity Rising&lt;br /&gt;
* PAPYRUS UNDERTALE&lt;br /&gt;
* Tobias Bagpipe&lt;br /&gt;
* Caldera Clembons&lt;br /&gt;
* Line Cook&lt;br /&gt;
* Parker MacMillan II&lt;br /&gt;
* Jessica Faxmachine&lt;br /&gt;
* Smig the Unwise&lt;br /&gt;
* Linoleum Blownaparte&lt;br /&gt;
* Crocodile 'Spits Fire' Spitfire&lt;br /&gt;
* Garry Bones&lt;br /&gt;
* THE VOID&lt;br /&gt;
* Matt Wiisports&lt;br /&gt;
* Kouma Wlaffle&lt;br /&gt;
* You.&lt;br /&gt;
* Ashkelon&lt;br /&gt;
* Toot Blan XIX&lt;br /&gt;
* Sonic 2 With A Line&lt;br /&gt;
* Crustability Factor&lt;br /&gt;
* [[Simulacrum]]&lt;br /&gt;
* Althaea Officinalis&lt;br /&gt;
* [ERROR] Jr.&lt;br /&gt;
* Elizabeth Monarch&lt;br /&gt;
* QWERTZ.&lt;br /&gt;
* Toffy Bucket&lt;br /&gt;
* Toffy Bucket Jr.&lt;br /&gt;
* Toffy Bucket Jr. Jr.&lt;br /&gt;
* Sappho Herself&lt;br /&gt;
* And Knuckles&lt;br /&gt;
* Works Everytime&lt;br /&gt;
* Mersenne Twisted&lt;br /&gt;
* Lex Marionette&lt;br /&gt;
* Critter Swarm&lt;br /&gt;
* Really Cool Sword&lt;br /&gt;
* Clip Clipperson&lt;br /&gt;
* Wyatt Mason&lt;/div&gt;</summary>
		<author><name>Pokeylope</name></author>
	</entry>
	<entry>
		<id>https://glolfwiki.sibr.dev/index.php?title=Module:Glolfer&amp;diff=227</id>
		<title>Module:Glolfer</title>
		<link rel="alternate" type="text/html" href="https://glolfwiki.sibr.dev/index.php?title=Module:Glolfer&amp;diff=227"/>
		<updated>2021-06-05T00:24:00Z</updated>

		<summary type="html">&lt;p&gt;Pokeylope: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local pyrandom = require &amp;quot;Module:Pyrandom&amp;quot;&lt;br /&gt;
&lt;br /&gt;
function titlecase(str)&lt;br /&gt;
	local buf = {}&lt;br /&gt;
	local inWord = false&lt;br /&gt;
	for i = 1, #str do&lt;br /&gt;
		local c = string.sub(str, i, i)&lt;br /&gt;
		if inWord then&lt;br /&gt;
			table.insert(buf, string.lower(c))&lt;br /&gt;
			if not string.find(c, '%a') then&lt;br /&gt;
				inWord = false&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			table.insert(buf, string.upper(c))&lt;br /&gt;
			inWord = true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return table.concat(buf)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function random_player_emoji(name)&lt;br /&gt;
	local humanoid = {&lt;br /&gt;
		&amp;quot;👶&amp;quot;,&amp;quot;👧&amp;quot;,&amp;quot;🧒&amp;quot;,&amp;quot;👦&amp;quot;,&amp;quot;👩&amp;quot;,&amp;quot;🧑&amp;quot;,&amp;quot;👨&amp;quot;,&amp;quot;👩‍🦱&amp;quot;,&amp;quot;🧑‍🦱&amp;quot;,&amp;quot;👨‍🦱&amp;quot;,&amp;quot;👩‍🦰&amp;quot;,&amp;quot;🧑‍🦰&amp;quot;,&amp;quot;👨‍🦰&amp;quot;,&amp;quot;👱‍♀️&amp;quot;,&lt;br /&gt;
		&amp;quot;👱&amp;quot;,&amp;quot;👱‍♂️&amp;quot;,&amp;quot;👩‍🦳&amp;quot;,&amp;quot;🧑‍🦳&amp;quot;,&amp;quot;👨‍🦳&amp;quot;,&amp;quot;👩‍🦲&amp;quot;,&amp;quot;🧑‍🦲&amp;quot;,&amp;quot;👨‍🦲&amp;quot;,&amp;quot;🧔&amp;quot;,&amp;quot;👵&amp;quot;,&amp;quot;🧓&amp;quot;,&amp;quot;👴&amp;quot;,&amp;quot;👲&amp;quot;,&amp;quot;👳‍♀️&amp;quot;,&lt;br /&gt;
		&amp;quot;👳&amp;quot;,&amp;quot;👳‍♂️&amp;quot;,&amp;quot;🧕&amp;quot;,&amp;quot;👮‍♀️&amp;quot;,&amp;quot;👮&amp;quot;,&amp;quot;👮‍♂️&amp;quot;,&amp;quot;👷‍♀️&amp;quot;,&amp;quot;👷&amp;quot;,&amp;quot;👷‍♂️&amp;quot;,&amp;quot;💂‍♀️&amp;quot;,&amp;quot;💂&amp;quot;,&amp;quot;💂‍♂️&amp;quot;,&amp;quot;🕵️‍♀️&amp;quot;,&amp;quot;🕵️&amp;quot;,&lt;br /&gt;
		&amp;quot;🕵️‍♂️&amp;quot;,&amp;quot;👩‍⚕️&amp;quot;,&amp;quot;🧑‍⚕️&amp;quot;,&amp;quot;👨‍⚕️&amp;quot;,&amp;quot;👩‍🌾&amp;quot;,&amp;quot;🧑‍🌾&amp;quot;,&amp;quot;👨‍🌾&amp;quot;,&amp;quot;👩‍🍳&amp;quot;,&amp;quot;🧑‍🍳&amp;quot;,&amp;quot;👨‍🍳&amp;quot;,&amp;quot;👩‍🎓&amp;quot;,&amp;quot;🧑‍🎓&amp;quot;,&amp;quot;👨‍🎓&amp;quot;,&amp;quot;👩‍🎤&amp;quot;,&lt;br /&gt;
		&amp;quot;🧑‍🎤&amp;quot;,&amp;quot;👨‍🎤&amp;quot;,&amp;quot;👩‍🏫&amp;quot;,&amp;quot;🧑‍🏫&amp;quot;,&amp;quot;👨‍🏫&amp;quot;,&amp;quot;👩‍🏭&amp;quot;,&amp;quot;🧑‍🏭&amp;quot;,&amp;quot;👨‍🏭&amp;quot;,&amp;quot;👩‍💻&amp;quot;,&amp;quot;🧑‍💻&amp;quot;,&amp;quot;👨‍💻&amp;quot;,&amp;quot;👩‍💼&amp;quot;,&amp;quot;🧑‍💼&amp;quot;,&amp;quot;👨‍💼&amp;quot;,&lt;br /&gt;
		&amp;quot;👩‍🔧&amp;quot;,&amp;quot;🧑‍🔧&amp;quot;,&amp;quot;👨‍🔧&amp;quot;,&amp;quot;👩‍🔬&amp;quot;,&amp;quot;🧑‍🔬&amp;quot;,&amp;quot;👨‍🔬&amp;quot;,&amp;quot;👩‍🎨&amp;quot;,&amp;quot;🧑‍🎨&amp;quot;,&amp;quot;👨‍🎨&amp;quot;,&amp;quot;👩‍🚒&amp;quot;,&amp;quot;🧑‍🚒&amp;quot;,&amp;quot;👨‍🚒&amp;quot;,&amp;quot;👩‍✈️&amp;quot;,&amp;quot;🧑‍✈️&amp;quot;,&lt;br /&gt;
		&amp;quot;👨‍✈️&amp;quot;,&amp;quot;👩‍🚀&amp;quot;,&amp;quot;🧑‍🚀&amp;quot;,&amp;quot;👨‍🚀&amp;quot;,&amp;quot;👩‍⚖️&amp;quot;,&amp;quot;🧑‍⚖️&amp;quot;,&amp;quot;👨‍⚖️&amp;quot;,&amp;quot;👰&amp;quot;,&amp;quot;🏋️&amp;quot;,&amp;quot;🤵&amp;quot;,&amp;quot;🤸&amp;quot;,&amp;quot;👸&amp;quot;,&amp;quot;🤴&amp;quot;,&amp;quot;🦸‍♀️&amp;quot;,&amp;quot;🦸&amp;quot;,&lt;br /&gt;
		&amp;quot;🦸‍♂️&amp;quot;,&amp;quot;🦹‍♀️&amp;quot;,&amp;quot;🦹&amp;quot;,&amp;quot;🦹‍♂️&amp;quot;,&amp;quot;🤶&amp;quot;,&amp;quot;🚴&amp;quot;,&amp;quot;🎅&amp;quot;,&amp;quot;🧙‍♀️&amp;quot;,&amp;quot;🧙&amp;quot;,&amp;quot;🧙‍♂️&amp;quot;,&amp;quot;🧝‍♀️&amp;quot;,&amp;quot;🧝&amp;quot;,&amp;quot;🧝‍♂️&amp;quot;,&amp;quot;🧛‍♀️&amp;quot;,&amp;quot;🧛&amp;quot;,&lt;br /&gt;
		&amp;quot;🧛‍♂️&amp;quot;,&amp;quot;🧟‍♀️&amp;quot;,&amp;quot;🧟&amp;quot;,&amp;quot;🧟‍♂️&amp;quot;,&amp;quot;🧞‍♀️&amp;quot;,&amp;quot;🧞&amp;quot;,&amp;quot;🧞‍♂️&amp;quot;,&amp;quot;🧜‍♀️&amp;quot;,&amp;quot;🧜&amp;quot;,&amp;quot;🧜‍♂️&amp;quot;,&amp;quot;🧚‍♀️&amp;quot;,&amp;quot;🧚&amp;quot;,&amp;quot;🧚‍♂️&amp;quot;,&amp;quot;👼&amp;quot;,&amp;quot;🤰&amp;quot;,&lt;br /&gt;
		&amp;quot;🤱&amp;quot;,&amp;quot;🙇‍♀️&amp;quot;,&amp;quot;🙇&amp;quot;,&amp;quot;🙇‍♂️&amp;quot;,&amp;quot;💁‍♀️&amp;quot;,&amp;quot;💁&amp;quot;,&amp;quot;💁‍♂️&amp;quot;,&amp;quot;🙅‍♀️&amp;quot;,&amp;quot;🙅&amp;quot;,&amp;quot;🙅‍♂️&amp;quot;,&amp;quot;🙆‍♀️&amp;quot;,&amp;quot;🙆&amp;quot;,&amp;quot;🙆‍♂️&amp;quot;,&amp;quot;🙋‍♀️&amp;quot;,&amp;quot;🙋&amp;quot;,&lt;br /&gt;
		&amp;quot;🙋‍♂️&amp;quot;,&amp;quot;🧏‍♀️&amp;quot;,&amp;quot;🧏&amp;quot;,&amp;quot;🧏‍♂️&amp;quot;,&amp;quot;🤦‍♀️&amp;quot;,&amp;quot;🤦&amp;quot;,&amp;quot;🤦‍♂️&amp;quot;,&amp;quot;🤷‍♀️&amp;quot;,&amp;quot;🤷&amp;quot;,&amp;quot;🤷‍♂️&amp;quot;,&amp;quot;🙎‍♀️&amp;quot;,&amp;quot;🙎&amp;quot;,&amp;quot;🙎‍♂️&amp;quot;,&amp;quot;🙍‍♀️&amp;quot;,&amp;quot;🙍&amp;quot;,&lt;br /&gt;
		&amp;quot;🙍‍♂️&amp;quot;,&amp;quot;💇‍♀️&amp;quot;,&amp;quot;💇&amp;quot;,&amp;quot;💇‍♂️&amp;quot;,&amp;quot;💆‍♀️&amp;quot;,&amp;quot;💆&amp;quot;,&amp;quot;💆‍♂️&amp;quot;,&amp;quot;🧖‍♀️&amp;quot;,&amp;quot;🧖&amp;quot;,&amp;quot;🧖‍♂️&amp;quot;,&amp;quot;💅&amp;quot;,&amp;quot;🤳&amp;quot;,&amp;quot;💃&amp;quot;,&amp;quot;🕺&amp;quot;,&amp;quot;🕴&amp;quot;,&amp;quot;👩‍🦽&amp;quot;,&lt;br /&gt;
		&amp;quot;🧑‍🦽&amp;quot;,&amp;quot;👨‍🦽&amp;quot;,&amp;quot;👩‍🦼&amp;quot;,&amp;quot;🧑‍🦼&amp;quot;,&amp;quot;👨‍🦼&amp;quot;,&amp;quot;🚶‍♀️&amp;quot;,&amp;quot;🚶&amp;quot;,&amp;quot;🚶‍♂️&amp;quot;,&amp;quot;👩‍🦯&amp;quot;,&amp;quot;🧑‍🦯&amp;quot;,&amp;quot;👨‍🦯&amp;quot;,&amp;quot;🧎‍♀️&amp;quot;,&amp;quot;🧎&amp;quot;,&amp;quot;🧎‍♂️&amp;quot;,&amp;quot;🏃‍♀️&amp;quot;,&amp;quot;🏃&amp;quot;,&lt;br /&gt;
		&amp;quot;🏃‍♂️&amp;quot;,&amp;quot;🧍‍♀️&amp;quot;,&amp;quot;🧍&amp;quot;,&amp;quot;🧍‍♂️&amp;quot;,&amp;quot;👭&amp;quot;,&amp;quot;🧑‍🤝‍🧑&amp;quot;,&amp;quot;👬&amp;quot;,&amp;quot;👫&amp;quot;,&amp;quot;👩‍❤️‍👩&amp;quot;,&amp;quot;💑&amp;quot;,&amp;quot;👨‍❤️‍👨&amp;quot;,&amp;quot;👩‍❤️‍👨&amp;quot;,&amp;quot;👩‍❤️‍💋‍👩&amp;quot;,&amp;quot;💏&amp;quot;,&amp;quot;👨‍❤️‍💋‍👨&amp;quot;,&amp;quot;👩‍❤️‍💋‍👨&amp;quot;,&lt;br /&gt;
		&amp;quot;👪&amp;quot;,&amp;quot;👨‍👩‍👦&amp;quot;,&amp;quot;👨‍👩‍👧&amp;quot;,&amp;quot;👨‍👩‍👧‍👦&amp;quot;,&amp;quot;👨‍👩‍👦‍👦&amp;quot;,&amp;quot;👨‍👩‍👧‍👧&amp;quot;,&amp;quot;👨‍👨‍👦&amp;quot;,&amp;quot;👨‍👨‍👧&amp;quot;,&amp;quot;👨‍👨‍👧‍👦&amp;quot;,&amp;quot;👨‍👨‍👦‍👦&amp;quot;,&amp;quot;👨‍👨‍👧‍👧&amp;quot;,&amp;quot;👩‍👩‍👦&amp;quot;,&amp;quot;👩‍👩‍👧&amp;quot;,&amp;quot;👩‍👩‍👧‍👦&amp;quot;,&amp;quot;👩‍👩‍👦‍👦&amp;quot;,&amp;quot;👩‍👩‍👧‍👧&amp;quot;,&lt;br /&gt;
		&amp;quot;👨‍👦&amp;quot;,&amp;quot;👨‍👦‍👦&amp;quot;,&amp;quot;👨‍👧&amp;quot;,&amp;quot;👨‍👧‍👦&amp;quot;,&amp;quot;👨‍👧‍👧&amp;quot;,&amp;quot;👩‍👦&amp;quot;,&amp;quot;👩‍👦‍👦&amp;quot;,&amp;quot;👩‍👧&amp;quot;,&amp;quot;👩‍👧‍👦&amp;quot;,&amp;quot;👩‍👧‍👧&amp;quot;,&amp;quot;🗣&amp;quot;,&amp;quot;👤&amp;quot;,&amp;quot;👥&amp;quot;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local nonhumanoid={&lt;br /&gt;
		&amp;quot;🐶&amp;quot;,&amp;quot;🐱&amp;quot;,&amp;quot;🐭&amp;quot;,&amp;quot;🐹&amp;quot;,&amp;quot;🐰&amp;quot;,&amp;quot;🦊&amp;quot;,&amp;quot;🐻&amp;quot;,&amp;quot;🐼&amp;quot;,&amp;quot;🐨&amp;quot;,&amp;quot;🐯&amp;quot;,&amp;quot;🦁&amp;quot;,&amp;quot;🐮&amp;quot;,&amp;quot;🐷&amp;quot;,&amp;quot;🐽&amp;quot;,&amp;quot;🐸&amp;quot;,&amp;quot;🐵&amp;quot;,&lt;br /&gt;
		&amp;quot;🙈&amp;quot;,&amp;quot;🙉&amp;quot;,&amp;quot;🙊&amp;quot;,&amp;quot;🐒&amp;quot;,&amp;quot;🐔&amp;quot;,&amp;quot;🐧&amp;quot;,&amp;quot;🐦&amp;quot;,&amp;quot;🐤&amp;quot;,&amp;quot;🐣&amp;quot;,&amp;quot;🐥&amp;quot;,&amp;quot;🦆&amp;quot;,&amp;quot;🦅&amp;quot;,&amp;quot;🦉&amp;quot;,&amp;quot;🦇&amp;quot;,&amp;quot;🐺&amp;quot;,&amp;quot;🐗&amp;quot;,&amp;quot;🐴&amp;quot;,&amp;quot;🦄&amp;quot;,&lt;br /&gt;
		&amp;quot;🐝&amp;quot;,&amp;quot;🐛&amp;quot;,&amp;quot;🦋&amp;quot;,&amp;quot;🐌&amp;quot;,&amp;quot;🐞&amp;quot;,&amp;quot;🐜&amp;quot;,&amp;quot;🦟&amp;quot;,&amp;quot;🦗&amp;quot;,&amp;quot;🕷️&amp;quot;,&amp;quot;🦂&amp;quot;,&amp;quot;🐢&amp;quot;,&amp;quot;🐍&amp;quot;,&amp;quot;🦎&amp;quot;,&amp;quot;🦖&amp;quot;,&amp;quot;🦕&amp;quot;,&amp;quot;🐙&amp;quot;,&amp;quot;🦑&amp;quot;,&amp;quot;🦐&amp;quot;,&lt;br /&gt;
		&amp;quot;🦞&amp;quot;,&amp;quot;🦀&amp;quot;,&amp;quot;🐡&amp;quot;,&amp;quot;🐠&amp;quot;,&amp;quot;🐟&amp;quot;,&amp;quot;🐬&amp;quot;,&amp;quot;🐳&amp;quot;,&amp;quot;🐋&amp;quot;,&amp;quot;🦈&amp;quot;,&amp;quot;🐊&amp;quot;,&amp;quot;🐅&amp;quot;,&amp;quot;🐆&amp;quot;,&amp;quot;🦓&amp;quot;,&amp;quot;🦍&amp;quot;,&amp;quot;🦧&amp;quot;,&amp;quot;🐘&amp;quot;,&amp;quot;🦛&amp;quot;,&amp;quot;🦏&amp;quot;,&lt;br /&gt;
		&amp;quot;🐪&amp;quot;,&amp;quot;🐫&amp;quot;,&amp;quot;🦒&amp;quot;,&amp;quot;🦘&amp;quot;,&amp;quot;🐃&amp;quot;,&amp;quot;🐂&amp;quot;,&amp;quot;🐄&amp;quot;,&amp;quot;🐎&amp;quot;,&amp;quot;🐖&amp;quot;,&amp;quot;🐏&amp;quot;,&amp;quot;🐑&amp;quot;,&amp;quot;🦙&amp;quot;,&amp;quot;🐐&amp;quot;,&amp;quot;🦌&amp;quot;,&amp;quot;🐕&amp;quot;,&amp;quot;🐩&amp;quot;,&amp;quot;🦮&amp;quot;,&amp;quot;🐕‍🦺&amp;quot;,&lt;br /&gt;
		&amp;quot;🐈&amp;quot;,&amp;quot;🐓&amp;quot;,&amp;quot;🦃&amp;quot;,&amp;quot;🦚&amp;quot;,&amp;quot;🦜&amp;quot;,&amp;quot;🦢&amp;quot;,&amp;quot;🦩&amp;quot;,&amp;quot;🕊️&amp;quot;,&amp;quot;🐇&amp;quot;,&amp;quot;🦝&amp;quot;,&amp;quot;🦨&amp;quot;,&amp;quot;🦡&amp;quot;,&amp;quot;🦦&amp;quot;,&amp;quot;🦥&amp;quot;,&amp;quot;🐁&amp;quot;,&amp;quot;🐀&amp;quot;,&amp;quot;🐿&amp;quot;,&amp;quot;🦔&amp;quot;,&lt;br /&gt;
		&amp;quot;🐉&amp;quot;,&amp;quot;🐲&amp;quot;,&amp;quot;🪐&amp;quot;,&amp;quot;💫&amp;quot;,&amp;quot;🌪&amp;quot;,&amp;quot;🌈&amp;quot;,&amp;quot;📠&amp;quot;,&amp;quot;📺&amp;quot;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local rand = pyrandom.new(titlecase(name))&lt;br /&gt;
	if rand:random() &amp;gt; 0.5 then&lt;br /&gt;
		return rand:choice(humanoid)&lt;br /&gt;
	else&lt;br /&gt;
		return rand:choice(nonhumanoid)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function generate_random_stlats_from_name(name)&lt;br /&gt;
	local rand = pyrandom.new(titlecase(name))&lt;br /&gt;
	return {&lt;br /&gt;
		nyoomability = math.max(rand:gauss(0,0.3),1.4),&lt;br /&gt;
		tofu = rand:random(),&lt;br /&gt;
		wiggle = rand:random(),&lt;br /&gt;
		ritualism = rand:random(),&lt;br /&gt;
		musclitude = rand:random(),&lt;br /&gt;
		finesse = rand:random(),&lt;br /&gt;
		needlethreadableness = rand:random(), &lt;br /&gt;
		left_handedness = rand:gauss(0,0.3),&lt;br /&gt;
		stance = rand:choice({&amp;quot;Tricky&amp;quot;,&amp;quot;Flashy&amp;quot;,&amp;quot;Aggro&amp;quot;,&amp;quot;Tanky&amp;quot;,&amp;quot;Twitchy&amp;quot;,&amp;quot;Powerful&amp;quot;,&lt;br /&gt;
		&amp;quot;Wibble&amp;quot;,&amp;quot;Wobble&amp;quot;,&amp;quot;Reverse&amp;quot;,&amp;quot;Feint&amp;quot;,&amp;quot;Electric&amp;quot;,&amp;quot;Spicy&amp;quot;,&amp;quot;Pomegranate&amp;quot;,&lt;br /&gt;
		&amp;quot;Explosive&amp;quot;,&amp;quot;Cottagecore&amp;quot;,&amp;quot;Corecore&amp;quot;,&amp;quot;Hardcore&amp;quot;,&amp;quot;Softcore&amp;quot;,&lt;br /&gt;
		&amp;quot;Hand to Hand&amp;quot;,&amp;quot;Lefty&amp;quot;,&amp;quot;Pop-Punk&amp;quot;,&amp;quot;DPS&amp;quot;,&amp;quot;Repose&amp;quot;}),&lt;br /&gt;
		fav_tea = rand:choice({&amp;quot;Iced&amp;quot;,&amp;quot;Boba&amp;quot;,&amp;quot;White&amp;quot;,&amp;quot;Green&amp;quot;,&amp;quot;Oolong&amp;quot;,&lt;br /&gt;
		&amp;quot;Pu'erh&amp;quot;,&amp;quot;Chai&amp;quot;,&amp;quot;Milk&amp;quot;,&amp;quot;Neon&amp;quot;,&amp;quot;Sweet&amp;quot;,&amp;quot;Void&amp;quot;,&amp;quot;Tea?&amp;quot;,&amp;quot;Caramel&amp;quot;,&lt;br /&gt;
		&amp;quot;Lightspeed&amp;quot;,&amp;quot;Time-traveling&amp;quot;,&amp;quot;Bloody&amp;quot;,&amp;quot;Black&amp;quot;,&amp;quot;Miso&amp;quot;,&amp;quot;Concrete&amp;quot;,&lt;br /&gt;
		&amp;quot;Hard-boiled egg&amp;quot;,&amp;quot;Hot Chocolate&amp;quot;,&amp;quot;Bubble&amp;quot;}),&lt;br /&gt;
		estimation = rand:random(),&lt;br /&gt;
&lt;br /&gt;
		earliness = rand:random(),&lt;br /&gt;
		twirliness = rand:random(),&lt;br /&gt;
		churliness = rand:random(),&lt;br /&gt;
		aceness = rand:random(),&lt;br /&gt;
		marbles = rand:randrange(2,4),&lt;br /&gt;
&lt;br /&gt;
		unworthiness = rand:random(),&lt;br /&gt;
		splortsmanship = rand:random(),&lt;br /&gt;
		tankitude = rand:random(),&lt;br /&gt;
		pettiness = rand:random(),&lt;br /&gt;
		owlishness = rand:random(),&lt;br /&gt;
		disco = rand:random(),&lt;br /&gt;
		pettability = rand:random(),&lt;br /&gt;
		softness = rand:random(),&lt;br /&gt;
		improv = rand:random(),&lt;br /&gt;
		tentacles = rand:randrange(0,10),&lt;br /&gt;
		capitalism = -rand:random(),&lt;br /&gt;
		polkadottedness = 0,&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function generate_random_player_from_name(name)&lt;br /&gt;
	local player = generate_random_stlats_from_name(name)&lt;br /&gt;
	player.name = name&lt;br /&gt;
	player.emoji = random_player_emoji(name)&lt;br /&gt;
	return player&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function search_array(a, v)&lt;br /&gt;
	for i = 1, #a do&lt;br /&gt;
		if a[i] == v then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function sum(a)&lt;br /&gt;
	local r = 0&lt;br /&gt;
	for i = 1, #a do&lt;br /&gt;
		r = r + a[i]&lt;br /&gt;
	end&lt;br /&gt;
	return r&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function unpredictability(p)&lt;br /&gt;
	local weights = {p.churliness,p.earliness,p.twirliness}&lt;br /&gt;
	if search_array({&amp;quot;Aggro&amp;quot;,&amp;quot;Powerful&amp;quot;,&amp;quot;Hand to Hand&amp;quot;,&amp;quot;DPS&amp;quot;,&amp;quot;Explosive&amp;quot;,&amp;quot;Hardcore&amp;quot;, &amp;quot;Wibble&amp;quot;,&amp;quot;Electric&amp;quot;}, p.stance) then&lt;br /&gt;
		weights[1] = weights[1] + 0.5&lt;br /&gt;
	elseif search_array({&amp;quot;Tanky&amp;quot;,&amp;quot;Twitchy&amp;quot;,&amp;quot;Repose&amp;quot;,&amp;quot;Reverse&amp;quot;,&amp;quot;Softcore&amp;quot;,  &amp;quot;Cottagecore&amp;quot;,&amp;quot;Pomegranate&amp;quot;}, p.stance) then&lt;br /&gt;
		weights[2] = weights[2] + 0.5&lt;br /&gt;
	elseif search_array(&amp;quot;Feint&amp;quot;,&amp;quot;Tricky&amp;quot;,&amp;quot;Pop-Punk&amp;quot;,&amp;quot;Flashy&amp;quot;,&amp;quot;Spicy&amp;quot;,       &amp;quot;Corecore&amp;quot;,&amp;quot;Wobble&amp;quot;,&amp;quot;Lefty&amp;quot;, p.stance) then&lt;br /&gt;
		weights[3] = weights[3] + 0.5&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local chanceOfBiggest = math.max(unpack(weights))/sum(weights)&lt;br /&gt;
&lt;br /&gt;
	local minChance = 1/#weights&lt;br /&gt;
&lt;br /&gt;
	return 1-(chanceOfBiggest-minChance)/(1-minChance)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function driving_rating(p)&lt;br /&gt;
	return (p.musclitude + p.tofu)*5/2&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function precision_rating(p)&lt;br /&gt;
	return (p.needlethreadableness*0.5 + p.finesse + p.estimation*0.2) * 5/(1+0.2+0.5) - math.abs(p.left_handedness)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function aerodynamics_rating(p)&lt;br /&gt;
	return (p.ritualism + p.owlishness + p.softness) * 5/3&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function self_awareness_rating(p)&lt;br /&gt;
	return (p.wiggle*0.5 + (p.marbles-2)/2 + unpredictability(p)*0.8) * 5/(0.5+1+0.8) + p.polkadottedness * 5&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local known_players = {&lt;br /&gt;
	[&amp;quot;Polkadot Patterson&amp;quot;] = {&lt;br /&gt;
		name=&amp;quot;Polkadot Patterson&amp;quot;,&lt;br /&gt;
		stance=&amp;quot;Squiddish&amp;quot;,&lt;br /&gt;
		fav_tea= &amp;quot;Iced&amp;quot;,&lt;br /&gt;
		nyoomability = 1.5,&lt;br /&gt;
		musclitude=1,&lt;br /&gt;
		finesse=1,&lt;br /&gt;
		needlethreadableness=1,&lt;br /&gt;
		polkadottedness=1,  &lt;br /&gt;
		left_handedness= 0,&lt;br /&gt;
		estimation=1,&lt;br /&gt;
		twirliness=0.3,&lt;br /&gt;
		churliness=0.3,&lt;br /&gt;
		earliness=0.3,&lt;br /&gt;
		aceness=0.3,&lt;br /&gt;
		marbles=4,&lt;br /&gt;
&lt;br /&gt;
		tofu=1,&lt;br /&gt;
		wiggle=1,&lt;br /&gt;
		ritualism=1,&lt;br /&gt;
		owlishness=1,&lt;br /&gt;
		disco=0.0,&lt;br /&gt;
		pettability=0.0,&lt;br /&gt;
		softness=1,&lt;br /&gt;
		improv=0.0,&lt;br /&gt;
		unworthiness=0,&lt;br /&gt;
		splortsmanship=1,&lt;br /&gt;
		tankitude=1.0,&lt;br /&gt;
		pettiness=0.0,&lt;br /&gt;
		tentacles=4,&lt;br /&gt;
		capitalism=-0.5,&lt;br /&gt;
		emoji=&amp;quot;😅&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function get_player_from_name(name)&lt;br /&gt;
	name = titlecase(name)&lt;br /&gt;
	return known_players[name] or generate_random_player_from_name(name)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local glolfer = {}&lt;br /&gt;
&lt;br /&gt;
function glolfer.emoji(frame)&lt;br /&gt;
	local args&lt;br /&gt;
	if frame.args.name then&lt;br /&gt;
		args = frame.args&lt;br /&gt;
	else&lt;br /&gt;
		args = frame:getParent().args&lt;br /&gt;
	end&lt;br /&gt;
	local name = args.name&lt;br /&gt;
	return random_player_emoji(name)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function glolfer.infobox(frame)&lt;br /&gt;
	local args&lt;br /&gt;
	if frame.args.name then&lt;br /&gt;
		args = frame.args&lt;br /&gt;
	else&lt;br /&gt;
		args = frame:getParent().args&lt;br /&gt;
	end&lt;br /&gt;
	local name = args.name&lt;br /&gt;
	local p = get_player_from_name(name)&lt;br /&gt;
	local template_args = {}&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		template_args[k] = v&lt;br /&gt;
	end&lt;br /&gt;
	for k, v in pairs({&lt;br /&gt;
		name = name,&lt;br /&gt;
		signature = p.emoji,&lt;br /&gt;
		stance = p.stance,&lt;br /&gt;
		tea = p.fav_tea,&lt;br /&gt;
		driving = driving_rating(p),&lt;br /&gt;
		grip = precision_rating(p),&lt;br /&gt;
		aerodynamics = aerodynamics_rating(p),&lt;br /&gt;
		[&amp;quot;self-awareness&amp;quot;] = self_awareness_rating(p),&lt;br /&gt;
	}) do&lt;br /&gt;
		template_args[k] = v&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return frame:expandTemplate{ title = &amp;quot;GlolferInfo&amp;quot;, args = template_args}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return glolfer&lt;/div&gt;</summary>
		<author><name>Pokeylope</name></author>
	</entry>
</feed>