<?xml version="1.0"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>STARDIT  - Recent changes [en]</title>
		<link>https://stardit.wikimedia.org.au/wiki/Special:RecentChanges</link>
		<description>Track the most recent changes to the wiki in this feed.</description>
		<language>en</language>
		<generator>MediaWiki 1.44.2</generator>
		<lastBuildDate>Sun, 17 May 2026 00:20:37 GMT</lastBuildDate>
		<item>
			<title>STARDIT</title>
			<link>https://stardit.wikimedia.org.au/w/index.php?title=STARDIT&amp;diff=1699&amp;oldid=1691</link>
			<guid isPermaLink="false">https://stardit.wikimedia.org.au/w/index.php?title=STARDIT&amp;diff=1699&amp;oldid=1691</guid>
			<description>&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://stardit.wikimedia.org.au/w/index.php?title=STARDIT&amp;amp;diff=1699&amp;amp;oldid=1691&quot;&gt;Show changes&lt;/a&gt;</description>
			<pubDate>Wed, 13 May 2026 05:29:21 GMT</pubDate>
			<dc:creator>Jacknunn</dc:creator>
			<comments>https://stardit.wikimedia.org.au/wiki/Talk:STARDIT</comments>
		</item>
		<item>
			<title>0202510070004</title>
			<link>https://stardit.wikimedia.org.au/w/index.php?title=0202510070004&amp;diff=1695&amp;oldid=1517</link>
			<guid isPermaLink="false">https://stardit.wikimedia.org.au/w/index.php?title=0202510070004&amp;diff=1695&amp;oldid=1517</guid>
			<description>&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 03:01, 13 May 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l8&quot;&gt;Line 8:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 8:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;This research aims to determine what is needed to implement acceptable and efficacious wearables programs for older Indigenous people associated with Aboriginal Community Controlled Organisations (ACCO).&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;This research aims to determine what is needed to implement acceptable and efficacious wearables programs for older Indigenous people associated with Aboriginal Community Controlled Organisations (ACCO).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Identify which of the health metrics provided through wearable technologies (watches and patches) Indigenous people are interested in monitoring and sharing with their healthcare professionals.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;SWiTcH study was conducted as part &lt;/ins&gt;of &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;this study&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Determine if augmenting standard care with digital health technologies leads to earlier screening and better management of atrial fibrillation (AF) in Indigenous adults aged 55 and older.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;The &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;perspectives &lt;/del&gt;of &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ACCO staff about integrating data from wearable programs into community organisations, including primary care&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|aim_parameter={{aim parameter|learn whether smart watches might help improve heart health outcomes for Aboriginal people}}{{aim parameter|determine what is needed to implement acceptable and efficacious wearables programs for older Indigenous people associated with Aboriginal Community Controlled Organisations (ACCO)}}{{aim parameter|Identify which of the health metrics provided through wearable technologies (watches and patches) Indigenous people are interested in monitoring and sharing with their healthcare professionals.}}{{aim parameter|Determine if augmenting standard care with digital health technologies leads to earlier screening and better management of atrial fibrillation (AF) in Indigenous adults aged 55 and older.}}{{aim parameter|Integrate the perspectives of ACCO staff about integrating data from wearable programs into community organisations, including primary care.}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|aim_parameter={{aim parameter|learn whether smart watches might help improve heart health outcomes for Aboriginal people}}{{aim parameter|determine what is needed to implement acceptable and efficacious wearables programs for older Indigenous people associated with Aboriginal Community Controlled Organisations (ACCO)}}{{aim parameter|Identify which of the health metrics provided through wearable technologies (watches and patches) Indigenous people are interested in monitoring and sharing with their healthcare professionals.}}{{aim parameter|Determine if augmenting standard care with digital health technologies leads to earlier screening and better management of atrial fibrillation (AF) in Indigenous adults aged 55 and older.}}{{aim parameter|Integrate the perspectives of ACCO staff about integrating data from wearable programs into community organisations, including primary care.}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|keyword_parameter={{keyword parameter|wearables}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|keyword_parameter={{keyword parameter|wearables}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key stardit:diff:1.41:old-1517:rev-1695:php=table --&gt;
&lt;/table&gt;</description>
			<pubDate>Wed, 13 May 2026 03:01:13 GMT</pubDate>
			<dc:creator>Jacknunn</dc:creator>
			<comments>https://stardit.wikimedia.org.au/wiki/Talk:0202510070004</comments>
		</item>
		<item>
			<title>0202605130251</title>
			<link>https://stardit.wikimedia.org.au/w/index.php?title=0202605130251&amp;diff=1694&amp;oldid=1692</link>
			<guid isPermaLink="false">https://stardit.wikimedia.org.au/w/index.php?title=0202605130251&amp;diff=1694&amp;oldid=1692</guid>
			<description>&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 02:57, 13 May 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;4&quot; class=&quot;diff-multi&quot; lang=&quot;en&quot;&gt;(One intermediate revision by the same user not shown)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{item&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;{{item&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|title=Withings ScanWatch 2&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|title=Withings ScanWatch 2&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|type_parameter=&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;other&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|type_parameter=&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;technology/health monitoring&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|description_parameter=&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;d&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|description_parameter=&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;The Withings ScanWatch 2 is a hybrid smartwatch developed by [Withings](https://www.withings.com?utm_source=chatgpt.com) that combines analogue watch design with health monitoring technologies including electrocardiogram (ECG), heart rate monitoring, sleep tracking, blood oxygen sensing and temperature tracking.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|state_parameter=&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;completed&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|start_date_parameter=&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;2026&lt;/del&gt;-&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;05&lt;/del&gt;-&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;07&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;The ScanWatch line was among the first smartwatches approved by the Australian Therapeutic Goods Administration (TGA) for ECG and atrial fibrillation detection functionality in Australia. The device includes TGA-approved ECG and irregular heart rhythm notification features intended to support cardiovascular monitoring and general health tracking.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|location_parameter=&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Australia&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;The watch synchronises with the Withings mobile application and integrates with digital health ecosystems including Apple Health and Google Health Connect.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|aim_parameter={{aim parameter|To support personal health monitoring}}{{aim parameter|To detect signs of atrial fibrillation through ECG monitoring}}{{aim parameter|To encourage long-term health and wellbeing tracking}}{{aim parameter|To provide medical-style monitoring in a traditional watch format}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|keyword_parameter={{keyword parameter|Smartwatch}}{{keyword parameter|Digital Health}}{{keyword parameter|Wearable Technology}}{{keyword parameter|ECG}}{{keyword parameter|TGA Approved}}{{keyword parameter|Health Monitoring}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|state_parameter=&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ongoing&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|start_date_parameter=&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;2023&lt;/ins&gt;-&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;09&lt;/ins&gt;-&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;01&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|location_parameter=&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Global&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|location_link=No&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|location_link=No&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|URL_parameter=https://web.archive.org/web/20240723094045/https://www.withings.com/au/en/scanwatch-2&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|author_parameter={{author parameter&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|aut_nam=Jack Nunn&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|aut_ids=0000-0003-0316-3254&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|aut_url=https://orcid.org/0000-0003-0316-3254&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|aut_tas=Prepared STARDIT summary report&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|aut_con=non contact&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|contributor_parameter={{contributor parameter&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|con_typ=organisation&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|con_nam=Withings&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|con_tas=Product design, software development and device manufacturing&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|con_url=https://www.withings.com/&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|con_dates=No&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;}}{{contributor parameter&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|con_typ=organisation&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|con_nam=Therapeutic Goods Administration&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|con_tas=Regulatory approval of ECG and atrial fibrillation detection functionality&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|con_url=https://www.tga.gov.au/&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|con_dates=No&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;}}{{contributor parameter&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|con_typ=organisation&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|con_nam=Apple Health&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|con_tas=Health data integration platform&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|con_url=https://www.apple.com/au/ios/health/&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|con_dates=No&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;}}{{contributor parameter&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|con_typ=organisation&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|con_nam=Google Health Connect&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|con_tas=Health data integration platform&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|con_url=https://health.google/health-connect-android/&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|con_dates=No&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|output_parameter={{output parameter&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|out_typ=technology&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|out_out=TGA-approved hybrid smartwatch with ECG, atrial fibrillation detection, sleep tracking and health monitoring&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|out_stg=Commercially available&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|out_dates=No&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|out_url_oth=https://web.archive.org/web/20240723094045/https://www.withings.com/au/en/scanwatch-2&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;}}{{output parameter&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|out_typ=technology&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|out_out=Electrocardiogram (ECG) sensor&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|out_stg=Integrated into device&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|out_dates=No&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|out_imp=Supports detection of irregular heart rhythms and atrial fibrillation&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;}}{{output parameter&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|out_typ=technology&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|out_out=Photoplethysmography (PPG) sensor&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|out_stg=Integrated into device&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|out_dates=No&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|out_imp=Supports heart rate and blood oxygen monitoring&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;}}{{output parameter&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|out_typ=technology&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|out_out=Temperature sensor&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|out_stg=Integrated into device&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|out_dates=No&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|out_imp=Supports continuous temperature variation tracking&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;}}{{output parameter&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|out_typ=dataset&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|out_out=User-generated health and activity data&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|out_stg=Continuous collection and synchronisation through Withings application&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|out_dates=No&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|out_typ2=restricted&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|out_typ3=No&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|fair=Unknown&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;}}{{output parameter&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|out_typ=publication/report/document&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|out_out=Product documentation and clinical validation materials for ScanWatch series&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|out_dates=No&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|out_url_oth=https://web.archive.org/web/20240723094045/https://www.withings.com/au/en/scanwatch-2&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;}}{{output parameter&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|out_typ=learning item&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|out_out=Health insights and personalised wellness feedback&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|out_stg=Available through Withings application&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|out_dates=No&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|out_ler=Users receive health metrics, sleep analysis and cardiovascular insights&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|out_url_lea=https://www.withings.com/&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|out_imp=Supports self-monitoring and awareness of health trends&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key stardit:diff:1.41:old-1692:rev-1694:php=table --&gt;
&lt;/table&gt;</description>
			<pubDate>Wed, 13 May 2026 02:57:06 GMT</pubDate>
			<dc:creator>Jacknunn</dc:creator>
			<comments>https://stardit.wikimedia.org.au/wiki/Talk:0202605130251</comments>
		</item>
		<item>
			<title>0202605130251</title>
			<link>https://stardit.wikimedia.org.au/w/index.php?title=0202605130251&amp;diff=1692&amp;oldid=0</link>
			<guid isPermaLink="false">https://stardit.wikimedia.org.au/w/index.php?title=0202605130251&amp;diff=1692&amp;oldid=0</guid>
			<description>&lt;p&gt;Created page with &amp;quot;{{item |title=Withings ScanWatch 2 |type_parameter=other |description_parameter=d |state_parameter=completed |start_date_parameter=2026-05-07 |location_parameter=Australia |location_link=No }}&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{item&lt;br /&gt;
|title=Withings ScanWatch 2&lt;br /&gt;
|type_parameter=other&lt;br /&gt;
|description_parameter=d&lt;br /&gt;
|state_parameter=completed&lt;br /&gt;
|start_date_parameter=2026-05-07&lt;br /&gt;
|location_parameter=Australia&lt;br /&gt;
|location_link=No&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Wed, 13 May 2026 02:51:45 GMT</pubDate>
			<dc:creator>Jacknunn</dc:creator>
			<comments>https://stardit.wikimedia.org.au/wiki/Talk:0202605130251</comments>
		</item>
		<item>
			<title>STARDIT</title>
			<link>https://stardit.wikimedia.org.au/w/index.php?title=STARDIT&amp;diff=1691&amp;oldid=1606</link>
			<guid isPermaLink="false">https://stardit.wikimedia.org.au/w/index.php?title=STARDIT&amp;diff=1691&amp;oldid=1606</guid>
			<description>&lt;p&gt;Add space below top box.&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 21:46, 22 April 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l12&quot;&gt;Line 12:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 12:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}}&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Create a new STARDIT Report===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Create a new STARDIT Report===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</description>
			<pubDate>Wed, 22 Apr 2026 21:46:05 GMT</pubDate>
			<dc:creator>Samwilson</dc:creator>
			<comments>https://stardit.wikimedia.org.au/wiki/Talk:STARDIT</comments>
		</item>
		<item>
			<title>Template:Wikidata</title>
			<link>https://stardit.wikimedia.org.au/w/index.php?title=Template:Wikidata&amp;diff=1681&amp;oldid=0</link>
			<guid isPermaLink="false">https://stardit.wikimedia.org.au/w/index.php?title=Template:Wikidata&amp;diff=1681&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/w/index.php?title=User:Evolution_and_evolvability&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Evolution and evolvability (page does not exist)&quot;&gt;&lt;bdi&gt;Evolution and evolvability&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/wiki/Template:Wikidata&quot; title=&quot;Template:Wikidata&quot;&gt;Template:Wikidata&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;includeonly&amp;gt;{{safesubst:#invoke:Wd|main}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</description>
			<pubDate>Wed, 22 Apr 2026 07:22:40 GMT</pubDate>
			<dc:creator>Evolution and evolvability</dc:creator>
			<comments>https://stardit.wikimedia.org.au/wiki/Template_talk:Wikidata</comments>
		</item>
		<item>
			<title>Template:Nowrap</title>
			<link>https://stardit.wikimedia.org.au/w/index.php?title=Template:Nowrap&amp;diff=1683&amp;oldid=0</link>
			<guid isPermaLink="false">https://stardit.wikimedia.org.au/w/index.php?title=Template:Nowrap&amp;diff=1683&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/w/index.php?title=User:Evolution_and_evolvability&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Evolution and evolvability (page does not exist)&quot;&gt;&lt;bdi&gt;Evolution and evolvability&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/wiki/Template:Nowrap&quot; title=&quot;Template:Nowrap&quot;&gt;Template:Nowrap&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;{{{1}}}&amp;lt;/span&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;!-- Categories go on the /doc page; interwikis go to Wikidata. --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</description>
			<pubDate>Wed, 22 Apr 2026 07:22:40 GMT</pubDate>
			<dc:creator>Evolution and evolvability</dc:creator>
			<comments>https://stardit.wikimedia.org.au/wiki/Template_talk:Nowrap</comments>
		</item>
		<item>
			<title>Template:Tl</title>
			<link>https://stardit.wikimedia.org.au/w/index.php?title=Template:Tl&amp;diff=1685&amp;oldid=0</link>
			<guid isPermaLink="false">https://stardit.wikimedia.org.au/w/index.php?title=Template:Tl&amp;diff=1685&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/w/index.php?title=User:Evolution_and_evolvability&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Evolution and evolvability (page does not exist)&quot;&gt;&lt;bdi&gt;Evolution and evolvability&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/wiki/Template:Tl&quot; class=&quot;mw-redirect&quot; title=&quot;Template:Tl&quot;&gt;Template:Tl&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;#REDIRECT [[Template:Template link]]&lt;br /&gt;
&lt;br /&gt;
{{Redirect category shell|&lt;br /&gt;
{{R from move}}&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Wed, 22 Apr 2026 07:22:40 GMT</pubDate>
			<dc:creator>Evolution and evolvability</dc:creator>
			<comments>https://stardit.wikimedia.org.au/wiki/Template_talk:Tl</comments>
		</item>
		<item>
			<title>Template:Template link</title>
			<link>https://stardit.wikimedia.org.au/w/index.php?title=Template:Template_link&amp;diff=1687&amp;oldid=0</link>
			<guid isPermaLink="false">https://stardit.wikimedia.org.au/w/index.php?title=Template:Template_link&amp;diff=1687&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/w/index.php?title=User:Evolution_and_evolvability&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Evolution and evolvability (page does not exist)&quot;&gt;&lt;bdi&gt;Evolution and evolvability&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/wiki/Template:Template_link&quot; title=&quot;Template:Template link&quot;&gt;Template:Template link&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;&amp;amp;#123;&amp;amp;#123;&amp;lt;/span&amp;gt;[[Template:{{{1}}}|{{{1}}}]]&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;&amp;amp;#125;&amp;amp;#125;&amp;lt;/span&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;!-- Categories go on the /doc subpage and interwikis go on Wikidata. --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</description>
			<pubDate>Wed, 22 Apr 2026 07:22:40 GMT</pubDate>
			<dc:creator>Evolution and evolvability</dc:creator>
			<comments>https://stardit.wikimedia.org.au/wiki/Template_talk:Template_link</comments>
		</item>
		<item>
			<title>Template:Ifsubst</title>
			<link>https://stardit.wikimedia.org.au/w/index.php?title=Template:Ifsubst&amp;diff=1689&amp;oldid=0</link>
			<guid isPermaLink="false">https://stardit.wikimedia.org.au/w/index.php?title=Template:Ifsubst&amp;diff=1689&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/w/index.php?title=User:Evolution_and_evolvability&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Evolution and evolvability (page does not exist)&quot;&gt;&lt;bdi&gt;Evolution and evolvability&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/wiki/Template:Ifsubst&quot; title=&quot;Template:Ifsubst&quot;&gt;Template:Ifsubst&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{ safesubst:&amp;lt;noinclude/&amp;gt;#if:{{{demo|}}}&lt;br /&gt;
|{{ safesubst:&amp;lt;noinclude/&amp;gt;#ifeq:{{{demo}}} |no&lt;br /&gt;
 |{{{no|{{{2|}}}}}}&lt;br /&gt;
 |{{{yes|{{{1|}}}}}}&lt;br /&gt;
}}&lt;br /&gt;
|{{ safesubst:&amp;lt;noinclude/&amp;gt;#ifeq:{{ safesubst:&amp;lt;noinclude/&amp;gt;NAMESPACE}}|{{NAMESPACE}}&lt;br /&gt;
 |{{{no|{{{2|}}}}}}&lt;br /&gt;
 |{{{yes|{{{1|}}}}}}&lt;br /&gt;
}}}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</description>
			<pubDate>Wed, 22 Apr 2026 07:22:40 GMT</pubDate>
			<dc:creator>Evolution and evolvability</dc:creator>
			<comments>https://stardit.wikimedia.org.au/wiki/Template_talk:Ifsubst</comments>
		</item>
		<item>
			<title>Module:Citation/CS1/COinS</title>
			<link>https://stardit.wikimedia.org.au/w/index.php?title=Module:Citation/CS1/COinS&amp;diff=1678&amp;oldid=0</link>
			<guid isPermaLink="false">https://stardit.wikimedia.org.au/w/index.php?title=Module:Citation/CS1/COinS&amp;diff=1678&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/w/index.php?title=User:Evolution_and_evolvability&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Evolution and evolvability (page does not exist)&quot;&gt;&lt;bdi&gt;Evolution and evolvability&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/wiki/Module:Citation/CS1/COinS&quot; title=&quot;Module:Citation/CS1/COinS&quot;&gt;Module:Citation/CS1/COinS&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--[[--------------------------&amp;lt; F O R W A R D   D E C L A R A T I O N S &amp;gt;--------------------------------------&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local has_accept_as_written, is_set, in_array, remove_wiki_link, strip_apostrophe_markup;	-- functions in Module:Citation/CS1/Utilities&lt;br /&gt;
&lt;br /&gt;
local cfg;																		-- table of configuration tables that are defined in Module:Citation/CS1/Configuration&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; M A K E _ C O I N S _ T I T L E &amp;gt;----------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Makes a title for COinS from Title and / or ScriptTitle (or any other name-script pairs)&lt;br /&gt;
&lt;br /&gt;
Apostrophe markup (bold, italics) is stripped from each value so that the COinS metadata isn&amp;#039;t corrupted with strings&lt;br /&gt;
of %27%27...&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function make_coins_title (title, script)&lt;br /&gt;
	title = has_accept_as_written (title);&lt;br /&gt;
	if is_set (title) then&lt;br /&gt;
		title = strip_apostrophe_markup (title);								-- strip any apostrophe markup&lt;br /&gt;
	else&lt;br /&gt;
		title = &amp;#039;&amp;#039;;																-- if not set, make sure title is an empty string&lt;br /&gt;
	end&lt;br /&gt;
	if is_set (script) then&lt;br /&gt;
		script = script:gsub (&amp;#039;^%l%l%s*:%s*&amp;#039;, &amp;#039;&amp;#039;);								-- remove language prefix if present (script value may now be empty string)&lt;br /&gt;
		script = strip_apostrophe_markup (script);								-- strip any apostrophe markup&lt;br /&gt;
	else&lt;br /&gt;
		script = &amp;#039;&amp;#039;;															-- if not set, make sure script is an empty string&lt;br /&gt;
	end&lt;br /&gt;
	if is_set (title) and is_set (script) then&lt;br /&gt;
		script = &amp;#039; &amp;#039; .. script;													-- add a space before we concatenate&lt;br /&gt;
	end&lt;br /&gt;
	return title .. script;														-- return the concatenation&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; E S C A P E _ L U A _ M A G I C _ C H A R S &amp;gt;----------------------------------&lt;br /&gt;
&lt;br /&gt;
Returns a string where all of Lua&amp;#039;s magic characters have been escaped.  This is important because functions like&lt;br /&gt;
string.gsub() treat their pattern and replace strings as patterns, not literal strings.&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function escape_lua_magic_chars (argument)&lt;br /&gt;
	argument = argument:gsub(&amp;quot;%%&amp;quot;, &amp;quot;%%%%&amp;quot;);										-- replace % with %%&lt;br /&gt;
	argument = argument:gsub(&amp;quot;([%^%$%(%)%.%[%]%*%+%-%?])&amp;quot;, &amp;quot;%%%1&amp;quot;);				-- replace all other Lua magic pattern characters&lt;br /&gt;
	return argument;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; G E T _ C O I N S _ P A G E S &amp;gt;------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Extract page numbers from external wikilinks in any of the |page=, |pages=, or |at= parameters for use in COinS.&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function get_coins_pages (pages)&lt;br /&gt;
	local pattern;&lt;br /&gt;
	if not is_set (pages) then return pages; end								-- if no page numbers then we&amp;#039;re done&lt;br /&gt;
	&lt;br /&gt;
	while true do&lt;br /&gt;
		pattern = pages:match(&amp;quot;%[(%w*:?//[^ ]+%s+)[%w%d].*%]&amp;quot;);					-- pattern is the opening bracket, the URL and following space(s): &amp;quot;[url &amp;quot;&lt;br /&gt;
		if nil == pattern then break; end										-- no more URLs&lt;br /&gt;
		pattern = escape_lua_magic_chars (pattern);								-- pattern is not a literal string; escape Lua&amp;#039;s magic pattern characters&lt;br /&gt;
		pages = pages:gsub(pattern, &amp;quot;&amp;quot;);										-- remove as many instances of pattern as possible&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	pages = pages:gsub(&amp;quot;[%[%]]&amp;quot;, &amp;quot;&amp;quot;);											-- remove the brackets&lt;br /&gt;
	pages = pages:gsub(&amp;quot;–&amp;quot;, &amp;quot;-&amp;quot; );												-- replace endashes with hyphens&lt;br /&gt;
	pages = pages:gsub(&amp;quot;&amp;amp;%w+;&amp;quot;, &amp;quot;-&amp;quot; );											-- and replace HTML entities (&amp;amp;ndash; etc.) with hyphens; do we need to replace numerical entities like &amp;amp;#32; and the like?&lt;br /&gt;
	pages = pages:gsub (&amp;#039;%b&amp;lt;&amp;gt;&amp;#039;, &amp;#039;&amp;#039;);											-- remove html-like tags; spans are added to &amp;lt;Pages&amp;gt; by utilities.hyphen_to_dash() which should not appear in COinS metadata&lt;br /&gt;
	return pages;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[=[-------------------------&amp;lt; C O I N S _ R E P L A C E _ M A T H _ S T R I P M A R K E R &amp;gt;------------------&lt;br /&gt;
&lt;br /&gt;
There are three options for math markup rendering that depend on the editor&amp;#039;s math preference settings.  These&lt;br /&gt;
settings are at [[Special:Preferences#mw-prefsection-rendering]] and are&lt;br /&gt;
	PNG images&lt;br /&gt;
	TeX source&lt;br /&gt;
	MathML with SVG or PNG fallback&lt;br /&gt;
&lt;br /&gt;
All three are heavy with HTML and CSS which doesn&amp;#039;t belong in the metadata.&lt;br /&gt;
&lt;br /&gt;
Without this function, the metadata saved in the raw wikitext contained the rendering determined by the settings&lt;br /&gt;
of the last editor to save the page.&lt;br /&gt;
&lt;br /&gt;
This function gets the rendered form of an equation according to the editor&amp;#039;s preference before the page is saved.  It&lt;br /&gt;
then searches the rendering for the text equivalent of the rendered equation and replaces the rendering with that so&lt;br /&gt;
that the page is saved without extraneous HTML/CSS markup and with a reasonably readable text form of the equation.&lt;br /&gt;
&lt;br /&gt;
When a replacement is made, this function returns true and the value with replacement; otherwise false and the initial&lt;br /&gt;
value.  To replace multipe equations it is necessary to call this function from within a loop.&lt;br /&gt;
&lt;br /&gt;
]=]&lt;br /&gt;
&lt;br /&gt;
local function coins_replace_math_stripmarker (value)&lt;br /&gt;
	local stripmarker = cfg.stripmarkers[&amp;#039;math&amp;#039;];&lt;br /&gt;
	local rendering = value:match (stripmarker);								-- is there a math stripmarker&lt;br /&gt;
&lt;br /&gt;
	if not rendering then														-- when value doesn&amp;#039;t have a math stripmarker, abandon this test&lt;br /&gt;
		return false, value;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	rendering = mw.text.unstripNoWiki (rendering);								-- convert stripmarker into rendered value (or nil? &amp;#039;&amp;#039;? when math render error)&lt;br /&gt;
	&lt;br /&gt;
	if rendering:match (&amp;#039;alt=&amp;quot;[^&amp;quot;]+&amp;quot;&amp;#039;) then										-- if PNG math option&lt;br /&gt;
		rendering = rendering:match (&amp;#039;alt=&amp;quot;([^&amp;quot;]+)&amp;quot;&amp;#039;);							-- extract just the math text&lt;br /&gt;
	elseif rendering:match (&amp;#039;$%s+.+%s+%$&amp;#039;) then									-- if TeX math option; $ is legit character that is escapes as \$&lt;br /&gt;
		rendering = rendering:match (&amp;#039;$%s+(.+)%s+%$&amp;#039;)							-- extract just the math text&lt;br /&gt;
	elseif rendering:match (&amp;#039;&amp;lt;annotation[^&amp;gt;]+&amp;gt;.+&amp;lt;/annotation&amp;gt;&amp;#039;) then			-- if MathML math option&lt;br /&gt;
		rendering = rendering:match (&amp;#039;&amp;lt;annotation[^&amp;gt;]+&amp;gt;(.+)&amp;lt;/annotation&amp;gt;&amp;#039;)		-- extract just the math text&lt;br /&gt;
	else&lt;br /&gt;
		return false, value;													-- had math stripmarker but not one of the three defined forms&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return true, value:gsub (stripmarker, rendering, 1);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; C O I N S _ C L E A N U P &amp;gt;----------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Cleanup parameter values for the metadata by removing or replacing invisible characters and certain HTML entities.&lt;br /&gt;
&lt;br /&gt;
2015-12-10: there is a bug in mw.text.unstripNoWiki ().  It replaces math stripmarkers with the appropriate content&lt;br /&gt;
when it shouldn&amp;#039;t.  See https://phabricator.wikimedia.org/T121085 and Wikipedia_talk:Lua#stripmarkers_and_mw.text.unstripNoWiki.28.29&lt;br /&gt;
&lt;br /&gt;
TODO: move the replacement patterns and replacement values into a table in /Configuration similar to the invisible&lt;br /&gt;
characters table?&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function coins_cleanup (value)&lt;br /&gt;
	local replaced = true;														-- default state to get the do loop running&lt;br /&gt;
&lt;br /&gt;
	while replaced do															-- loop until all math stripmarkers replaced&lt;br /&gt;
		replaced, value = coins_replace_math_stripmarker (value);				-- replace math stripmarker with text representation of the equation&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	value = value:gsub (cfg.stripmarkers[&amp;#039;math&amp;#039;], &amp;quot;MATH RENDER ERROR&amp;quot;);			-- one or more couldn&amp;#039;t be replaced; insert vague error message&lt;br /&gt;
	&lt;br /&gt;
	value = mw.text.unstripNoWiki (value);										-- replace nowiki stripmarkers with their content&lt;br /&gt;
	value = value:gsub (&amp;#039;&amp;lt;span class=&amp;quot;nowrap&amp;quot; style=&amp;quot;padding%-left:0%.1em;&amp;quot;&amp;gt;&amp;amp;#39;(s?)&amp;lt;/span&amp;gt;&amp;#039;, &amp;quot;&amp;#039;%1&amp;quot;);	-- replace {{&amp;#039;}} or {{&amp;#039;s}} with simple apostrophe or apostrophe-s&lt;br /&gt;
	value = value:gsub (&amp;#039;&amp;amp;nbsp;&amp;#039;, &amp;#039; &amp;#039;);											-- replace &amp;amp;nbsp; entity with plain space&lt;br /&gt;
	value = value:gsub (&amp;#039;\226\128\138&amp;#039;, &amp;#039; &amp;#039;);									-- replace hair space with plain space&lt;br /&gt;
	if not mw.ustring.find (value, cfg.indic_script) then						-- don&amp;#039;t remove zero-width joiner characters from indic script&lt;br /&gt;
		value = value:gsub (&amp;#039;&amp;amp;zwj;&amp;#039;, &amp;#039;&amp;#039;);										-- remove &amp;amp;zwj; entities&lt;br /&gt;
		value = mw.ustring.gsub (value, &amp;#039;[\226\128\141\226\128\139\194\173]&amp;#039;, &amp;#039;&amp;#039;);	-- remove zero-width joiner, zero-width space, soft hyphen&lt;br /&gt;
	end&lt;br /&gt;
	value = value:gsub (&amp;#039;[\009\010\013 ]+&amp;#039;, &amp;#039; &amp;#039;);								-- replace horizontal tab, line feed, carriage return with plain space&lt;br /&gt;
	return value;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; C O I N S &amp;gt;--------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
COinS metadata (see &amp;lt;http://ocoins.info/&amp;gt;) allows automated tools to parse the citation information.&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function COinS(data, class)&lt;br /&gt;
	if &amp;#039;table&amp;#039; ~= type(data) or nil == next(data) then&lt;br /&gt;
		return &amp;#039;&amp;#039;;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for k, v in pairs (data) do													-- spin through all of the metadata parameter values&lt;br /&gt;
		if &amp;#039;ID_list&amp;#039; ~= k and &amp;#039;Authors&amp;#039; ~= k then								-- except the ID_list and Author tables (author nowiki stripmarker done when Author table processed)&lt;br /&gt;
			data[k] = coins_cleanup (v);&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local ctx_ver = &amp;quot;Z39.88-2004&amp;quot;;&lt;br /&gt;
	&lt;br /&gt;
	-- treat table strictly as an array with only set values.&lt;br /&gt;
	local OCinSoutput = setmetatable( {}, {&lt;br /&gt;
		__newindex = function(self, key, value)&lt;br /&gt;
			if is_set(value) then&lt;br /&gt;
				rawset( self, #self+1, table.concat{ key, &amp;#039;=&amp;#039;, mw.uri.encode( remove_wiki_link( value ) ) } );&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	});&lt;br /&gt;
	&lt;br /&gt;
	if in_array (class, {&amp;#039;arxiv&amp;#039;, &amp;#039;biorxiv&amp;#039;, &amp;#039;citeseerx&amp;#039;, &amp;#039;medrxiv&amp;#039;, &amp;#039;ssrn&amp;#039;, &amp;#039;journal&amp;#039;, &amp;#039;news&amp;#039;, &amp;#039;magazine&amp;#039;}) or&lt;br /&gt;
		(in_array (class, {&amp;#039;conference&amp;#039;, &amp;#039;interview&amp;#039;, &amp;#039;map&amp;#039;, &amp;#039;press release&amp;#039;, &amp;#039;web&amp;#039;}) and is_set(data.Periodical)) or&lt;br /&gt;
		(&amp;#039;citation&amp;#039; == class and is_set(data.Periodical) and not is_set (data.Encyclopedia)) then&lt;br /&gt;
			OCinSoutput.rft_val_fmt = &amp;quot;info:ofi/fmt:kev:mtx:journal&amp;quot;;			-- journal metadata identifier&lt;br /&gt;
			if in_array (class, {&amp;#039;arxiv&amp;#039;, &amp;#039;biorxiv&amp;#039;, &amp;#039;citeseerx&amp;#039;, &amp;#039;medrxiv&amp;#039;, &amp;#039;ssrn&amp;#039;}) then	-- set genre according to the type of citation template we are rendering&lt;br /&gt;
				OCinSoutput[&amp;quot;rft.genre&amp;quot;] = &amp;quot;preprint&amp;quot;;							-- cite arxiv, cite biorxiv, cite citeseerx, cite medrxiv, cite ssrn&lt;br /&gt;
			elseif &amp;#039;conference&amp;#039; == class then&lt;br /&gt;
				OCinSoutput[&amp;quot;rft.genre&amp;quot;] = &amp;quot;conference&amp;quot;;						-- cite conference (when Periodical set)&lt;br /&gt;
			elseif &amp;#039;web&amp;#039; == class then&lt;br /&gt;
				OCinSoutput[&amp;quot;rft.genre&amp;quot;] = &amp;quot;unknown&amp;quot;;							-- cite web (when Periodical set)&lt;br /&gt;
			else&lt;br /&gt;
				OCinSoutput[&amp;quot;rft.genre&amp;quot;] = &amp;quot;article&amp;quot;;							-- journal and other &amp;#039;periodical&amp;#039; articles&lt;br /&gt;
			end&lt;br /&gt;
			OCinSoutput[&amp;quot;rft.jtitle&amp;quot;] = data.Periodical;						-- journal only&lt;br /&gt;
			OCinSoutput[&amp;quot;rft.atitle&amp;quot;] = data.Title;								-- &amp;#039;periodical&amp;#039; article titles&lt;br /&gt;
&lt;br /&gt;
																				-- these used only for periodicals&lt;br /&gt;
			OCinSoutput[&amp;quot;rft.ssn&amp;quot;] = data.Season;								-- keywords: winter, spring, summer, fall&lt;br /&gt;
			OCinSoutput[&amp;quot;rft.quarter&amp;quot;] = data.Quarter;							-- single digits 1-&amp;gt;first quarter, etc.&lt;br /&gt;
			OCinSoutput[&amp;quot;rft.chron&amp;quot;] = data.Chron;								-- free-form date components&lt;br /&gt;
			OCinSoutput[&amp;quot;rft.volume&amp;quot;] = data.Volume;							-- does not apply to books&lt;br /&gt;
			OCinSoutput[&amp;quot;rft.issue&amp;quot;] = data.Issue;&lt;br /&gt;
			OCinSoutput[&amp;#039;rft.artnum&amp;#039;] = data.ArticleNumber;						-- {{cite journal}} only&lt;br /&gt;
			OCinSoutput[&amp;quot;rft.pages&amp;quot;] = data.Pages;								-- also used in book metadata&lt;br /&gt;
&lt;br /&gt;
	elseif &amp;#039;thesis&amp;#039; ~= class then												-- all others except cite thesis are treated as &amp;#039;book&amp;#039; metadata; genre distinguishes&lt;br /&gt;
		OCinSoutput.rft_val_fmt = &amp;quot;info:ofi/fmt:kev:mtx:book&amp;quot;;					-- book metadata identifier&lt;br /&gt;
		if &amp;#039;report&amp;#039; == class or &amp;#039;techreport&amp;#039; == class then						-- cite report and cite techreport&lt;br /&gt;
			OCinSoutput[&amp;quot;rft.genre&amp;quot;] = &amp;quot;report&amp;quot;;&lt;br /&gt;
		elseif &amp;#039;conference&amp;#039; == class then										-- cite conference when Periodical not set&lt;br /&gt;
			OCinSoutput[&amp;quot;rft.genre&amp;quot;] = &amp;quot;conference&amp;quot;;&lt;br /&gt;
			OCinSoutput[&amp;quot;rft.atitle&amp;quot;] = data.Chapter;							-- conference paper as chapter in proceedings (book)&lt;br /&gt;
		elseif in_array (class, {&amp;#039;book&amp;#039;, &amp;#039;citation&amp;#039;, &amp;#039;encyclopaedia&amp;#039;, &amp;#039;interview&amp;#039;, &amp;#039;map&amp;#039;}) then&lt;br /&gt;
			if is_set (data.Chapter) then&lt;br /&gt;
				OCinSoutput[&amp;quot;rft.genre&amp;quot;] = &amp;quot;bookitem&amp;quot;;&lt;br /&gt;
				OCinSoutput[&amp;quot;rft.atitle&amp;quot;] = data.Chapter;						-- book chapter, encyclopedia article, interview in a book, or map title&lt;br /&gt;
			else&lt;br /&gt;
				if &amp;#039;map&amp;#039; == class or &amp;#039;interview&amp;#039; == class then&lt;br /&gt;
					OCinSoutput[&amp;quot;rft.genre&amp;quot;] = &amp;#039;unknown&amp;#039;;						-- standalone map or interview&lt;br /&gt;
				else&lt;br /&gt;
					OCinSoutput[&amp;quot;rft.genre&amp;quot;] = &amp;#039;book&amp;#039;;							-- book and encyclopedia&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		else	-- {&amp;#039;audio-visual&amp;#039;, &amp;#039;AV-media-notes&amp;#039;, &amp;#039;DVD-notes&amp;#039;, &amp;#039;episode&amp;#039;, &amp;#039;interview&amp;#039;, &amp;#039;mailinglist&amp;#039;, &amp;#039;map&amp;#039;, &amp;#039;newsgroup&amp;#039;, &amp;#039;podcast&amp;#039;, &amp;#039;press release&amp;#039;, &amp;#039;serial&amp;#039;, &amp;#039;sign&amp;#039;, &amp;#039;speech&amp;#039;, &amp;#039;web&amp;#039;}&lt;br /&gt;
			OCinSoutput[&amp;quot;rft.genre&amp;quot;] = &amp;quot;unknown&amp;quot;;&lt;br /&gt;
		end&lt;br /&gt;
		OCinSoutput[&amp;quot;rft.btitle&amp;quot;] = data.Title;									-- book only&lt;br /&gt;
		OCinSoutput[&amp;quot;rft.place&amp;quot;] = data.PublicationPlace;						-- book only&lt;br /&gt;
		OCinSoutput[&amp;quot;rft.series&amp;quot;] = data.Series;								-- book only&lt;br /&gt;
		OCinSoutput[&amp;quot;rft.pages&amp;quot;] = data.Pages;									-- book, journal&lt;br /&gt;
		OCinSoutput[&amp;quot;rft.edition&amp;quot;] = data.Edition;								-- book only&lt;br /&gt;
		OCinSoutput[&amp;quot;rft.pub&amp;quot;] = data.PublisherName;							-- book and dissertation&lt;br /&gt;
		&lt;br /&gt;
	else																		-- cite thesis&lt;br /&gt;
		OCinSoutput.rft_val_fmt = &amp;quot;info:ofi/fmt:kev:mtx:dissertation&amp;quot;;			-- dissertation metadata identifier&lt;br /&gt;
		OCinSoutput[&amp;quot;rft.title&amp;quot;] = data.Title;									-- dissertation (also patent but that is not yet supported)&lt;br /&gt;
		OCinSoutput[&amp;quot;rft.degree&amp;quot;] = data.Degree;								-- dissertation only&lt;br /&gt;
		OCinSoutput[&amp;#039;rft.inst&amp;#039;] = data.PublisherName;							-- book and dissertation&lt;br /&gt;
	end&lt;br /&gt;
	-- NB. Not currently supported are &amp;quot;info:ofi/fmt:kev:mtx:patent&amp;quot;, &amp;quot;info:ofi/fmt:kev:mtx:dc&amp;quot;, &amp;quot;info:ofi/fmt:kev:mtx:sch_svc&amp;quot;, &amp;quot;info:ofi/fmt:kev:mtx:ctx&amp;quot;&lt;br /&gt;
																				-- and now common parameters (as much as possible)&lt;br /&gt;
	OCinSoutput[&amp;quot;rft.date&amp;quot;] = data.Date;										-- book, journal, dissertation&lt;br /&gt;
&lt;br /&gt;
	for k, v in pairs( data.ID_list ) do										-- what to do about these? For now assume that they are common to all?&lt;br /&gt;
		if k == &amp;#039;ISBN&amp;#039; then v = v:gsub( &amp;quot;[^-0-9X]&amp;quot;, &amp;quot;&amp;quot; ); end&lt;br /&gt;
		local id = cfg.id_handlers[k].COinS;&lt;br /&gt;
		if string.sub( id or &amp;quot;&amp;quot;, 1, 4 ) == &amp;#039;info&amp;#039; then							-- for ids that are in the info:registry&lt;br /&gt;
			OCinSoutput[&amp;quot;rft_id&amp;quot;] = table.concat{ id, &amp;quot;/&amp;quot;, v };&lt;br /&gt;
		elseif string.sub (id or &amp;quot;&amp;quot;, 1, 3 ) == &amp;#039;rft&amp;#039; then						-- for isbn, issn, eissn, etc. that have defined COinS keywords&lt;br /&gt;
			OCinSoutput[ id ] = v;&lt;br /&gt;
		elseif &amp;#039;url&amp;#039; == id then													-- for urls that are assembled in ~/Identifiers; |asin= and |ol=&lt;br /&gt;
			OCinSoutput[&amp;quot;rft_id&amp;quot;] = table.concat ({data.ID_list[k], &amp;quot;#id-name=&amp;quot;, cfg.id_handlers[k].label});&lt;br /&gt;
		elseif id then															-- when cfg.id_handlers[k].COinS is not nil so urls created here&lt;br /&gt;
			OCinSoutput[&amp;quot;rft_id&amp;quot;] = table.concat{ cfg.id_handlers[k].prefix, v, cfg.id_handlers[k].suffix or &amp;#039;&amp;#039;, &amp;quot;#id-name=&amp;quot;, cfg.id_handlers[k].label };	-- others; provide a URL and indicate identifier name as #fragment (human-readable, but transparent to browsers)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local last, first;&lt;br /&gt;
	for k, v in ipairs( data.Authors ) do&lt;br /&gt;
		last, first = coins_cleanup (v.last), coins_cleanup (v.first or &amp;#039;&amp;#039;);	-- replace any nowiki stripmarkers, non-printing or invisible characters&lt;br /&gt;
		if k == 1 then															-- for the first author name only&lt;br /&gt;
			if is_set(last) and is_set(first) then								-- set these COinS values if |first= and |last= specify the first author name&lt;br /&gt;
				OCinSoutput[&amp;quot;rft.aulast&amp;quot;] = last;								-- book, journal, dissertation&lt;br /&gt;
				OCinSoutput[&amp;quot;rft.aufirst&amp;quot;] = first;								-- book, journal, dissertation&lt;br /&gt;
			elseif is_set(last) then &lt;br /&gt;
				OCinSoutput[&amp;quot;rft.au&amp;quot;] = last;									-- book, journal, dissertation -- otherwise use this form for the first name&lt;br /&gt;
			end&lt;br /&gt;
		else																	-- for all other authors&lt;br /&gt;
			if is_set(last) and is_set(first) then&lt;br /&gt;
				OCinSoutput[&amp;quot;rft.au&amp;quot;] = table.concat{ last, &amp;quot;, &amp;quot;, first };		-- book, journal, dissertation&lt;br /&gt;
			elseif is_set(last) then&lt;br /&gt;
				OCinSoutput[&amp;quot;rft.au&amp;quot;] = last;									-- book, journal, dissertation&lt;br /&gt;
			end&lt;br /&gt;
			-- TODO: At present we do not report &amp;quot;et al.&amp;quot;. Add anything special if this condition applies?&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	OCinSoutput.rft_id = data.URL;&lt;br /&gt;
	OCinSoutput.rfr_id = table.concat{ &amp;quot;info:sid/&amp;quot;, mw.site.server:match( &amp;quot;[^/]*$&amp;quot; ), &amp;quot;:&amp;quot;, data.RawPage };&lt;br /&gt;
&lt;br /&gt;
	-- TODO: Add optional extra info:&lt;br /&gt;
	-- rfr_dat=#REVISION&amp;lt;version&amp;gt; (referrer private data)&lt;br /&gt;
	-- ctx_id=&amp;lt;data.RawPage&amp;gt;#&amp;lt;ref&amp;gt; (identifier for the context object)&lt;br /&gt;
	-- ctx_tim=&amp;lt;ts&amp;gt; (timestamp in format yyyy-mm-ddThh:mm:ssTZD or yyyy-mm-dd)&lt;br /&gt;
	-- ctx_enc=info:ofi/enc:UTF-8 (character encoding)&lt;br /&gt;
	&lt;br /&gt;
	OCinSoutput = setmetatable( OCinSoutput, nil );&lt;br /&gt;
&lt;br /&gt;
	-- sort with version string always first, and combine.&lt;br /&gt;
	-- table.sort( OCinSoutput );&lt;br /&gt;
	table.insert( OCinSoutput, 1, &amp;quot;ctx_ver=&amp;quot; .. ctx_ver ); -- such as &amp;quot;Z39.88-2004&amp;quot;&lt;br /&gt;
	return table.concat(OCinSoutput, &amp;quot;&amp;amp;&amp;quot;);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; S E T _ S E L E C T E D _ M O D U L E S &amp;gt;--------------------------------------&lt;br /&gt;
&lt;br /&gt;
Sets local cfg table and imported functions table to same (live or sandbox) as that used by the other modules.&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function set_selected_modules (cfg_table_ptr, utilities_page_ptr)&lt;br /&gt;
	cfg = cfg_table_ptr;&lt;br /&gt;
&lt;br /&gt;
	has_accept_as_written = utilities_page_ptr.has_accept_as_written;			-- import functions from selected Module:Citation/CS1/Utilities module&lt;br /&gt;
	is_set = utilities_page_ptr.is_set;&lt;br /&gt;
	in_array = utilities_page_ptr.in_array;&lt;br /&gt;
	remove_wiki_link = utilities_page_ptr.remove_wiki_link;&lt;br /&gt;
	strip_apostrophe_markup = utilities_page_ptr.strip_apostrophe_markup;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; E X P O R T E D   F U N C T I O N S &amp;gt;------------------------------------------&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
return {&lt;br /&gt;
	make_coins_title = make_coins_title,&lt;br /&gt;
	get_coins_pages = get_coins_pages,&lt;br /&gt;
	COinS = COinS,&lt;br /&gt;
	set_selected_modules = set_selected_modules,&lt;br /&gt;
	}&lt;/div&gt;</description>
			<pubDate>Wed, 22 Apr 2026 07:22:20 GMT</pubDate>
			<dc:creator>Evolution and evolvability</dc:creator>
			<comments>https://stardit.wikimedia.org.au/wiki/Module_talk:Citation/CS1/COinS</comments>
		</item>
		<item>
			<title>Module:Citation/CS1/Utilities</title>
			<link>https://stardit.wikimedia.org.au/w/index.php?title=Module:Citation/CS1/Utilities&amp;diff=1672&amp;oldid=0</link>
			<guid isPermaLink="false">https://stardit.wikimedia.org.au/w/index.php?title=Module:Citation/CS1/Utilities&amp;diff=1672&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/w/index.php?title=User:Evolution_and_evolvability&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Evolution and evolvability (page does not exist)&quot;&gt;&lt;bdi&gt;Evolution and evolvability&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/wiki/Module:Citation/CS1/Utilities&quot; title=&quot;Module:Citation/CS1/Utilities&quot;&gt;Module:Citation/CS1/Utilities&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local z = {&lt;br /&gt;
	error_cats_t = {};															-- for categorizing citations that contain errors&lt;br /&gt;
	error_ids_t = {};															-- list of error identifiers; used to prevent duplication of certain errors; local to this module&lt;br /&gt;
	error_msgs_t = {};															-- sequence table of error messages&lt;br /&gt;
	maint_cats_t = {};															-- for categorizing citations that aren&amp;#039;t erroneous per se, but could use a little work&lt;br /&gt;
	prop_cats_t = {};															-- for categorizing citations based on certain properties, language of source for instance&lt;br /&gt;
	prop_keys_t = {};															-- for adding classes to the citation&amp;#039;s &amp;lt;cite&amp;gt; tag&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; F O R W A R D   D E C L A R A T I O N S &amp;gt;--------------------------------------&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local cfg;																		-- table of tables imported from selected Module:Citation/CS1/Configuration&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; I S _ S E T &amp;gt;------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Returns true if argument is set; false otherwise. Argument is &amp;#039;set&amp;#039; when it exists (not nil) or when it is not an empty string.&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function is_set (var)&lt;br /&gt;
	return not (var == nil or var == &amp;#039;&amp;#039;);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; I N _ A R R A Y &amp;gt;--------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Whether needle is in haystack&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function in_array (needle, haystack)&lt;br /&gt;
	if needle == nil then&lt;br /&gt;
		return false;&lt;br /&gt;
	end&lt;br /&gt;
	for n, v in ipairs (haystack) do&lt;br /&gt;
		if v == needle then&lt;br /&gt;
			return n;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return false;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; H A S _ A C C E P T _ A S _ W R I T T E N &amp;gt;------------------------------------&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;str&amp;gt; is wholly wrapped in accept-as-written markup, return &amp;lt;str&amp;gt; without markup and true; return &amp;lt;str&amp;gt; and false else&lt;br /&gt;
&lt;br /&gt;
with allow_empty = false, &amp;lt;str&amp;gt; must have at least one character inside the markup&lt;br /&gt;
with allow_empty = true, &amp;lt;str&amp;gt; the markup frame can be empty like (()) to distinguish an empty template parameter from the specific condition &amp;quot;has no applicable value&amp;quot; in citation-context.&lt;br /&gt;
&lt;br /&gt;
After further evaluation the two cases might be merged at a later stage, but should be kept separated for now.&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function has_accept_as_written (str, allow_empty)&lt;br /&gt;
	if not is_set (str) then&lt;br /&gt;
		return str, false;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local count;&lt;br /&gt;
&lt;br /&gt;
	if true == allow_empty then&lt;br /&gt;
		str, count = str:gsub (&amp;#039;^%(%((.*)%)%)$&amp;#039;, &amp;#039;%1&amp;#039;); 						-- allows (()) to be an empty set&lt;br /&gt;
	else&lt;br /&gt;
		str, count = str:gsub (&amp;#039;^%(%((.+)%)%)$&amp;#039;, &amp;#039;%1&amp;#039;);&lt;br /&gt;
	end&lt;br /&gt;
	return str, 0 ~= count;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; S U B S T I T U T E &amp;gt;----------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Populates numbered arguments in a message string using an argument table. &amp;lt;args&amp;gt; may be a single string or a&lt;br /&gt;
sequence table of multiple strings.&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function substitute (msg, args)&lt;br /&gt;
	return args and mw.message.newRawMessage (msg, args):plain() or msg;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; E R R O R _ C O M M E N T &amp;gt;----------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Wraps error messages with CSS markup according to the state of hidden. &amp;lt;content&amp;gt; may be a single string or a&lt;br /&gt;
sequence table of multiple strings.&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function error_comment (content, hidden)&lt;br /&gt;
	return substitute (hidden and cfg.presentation[&amp;#039;hidden-error&amp;#039;] or cfg.presentation[&amp;#039;visible-error&amp;#039;], content);&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; H Y P H E N _ T O _ D A S H &amp;gt;--------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Converts a hyphen, endash, emdash to endash under certain conditions.  The hyphen/en/em must separate&lt;br /&gt;
like items; unlike items are returned unmodified.  These forms are modified:&lt;br /&gt;
	letter - letter (A-B)&lt;br /&gt;
	digit - digit (4-5)&lt;br /&gt;
	digit separator digit - digit separator digit (4.1-4.5 or 4-1-4-5)&lt;br /&gt;
	letterdigit - letterdigit (A1-A5) (an optional separator between letter and&lt;br /&gt;
		digit is supported – a.1-a.5 or a-1-a-5)&lt;br /&gt;
	digitletter - digitletter (5a-5d) (an optional separator between letter and&lt;br /&gt;
		digit is supported – 5.a-5.d or 5-a-5-d)&lt;br /&gt;
&lt;br /&gt;
any other forms are returned unmodified.&lt;br /&gt;
&lt;br /&gt;
str may be a comma- or semicolon-separated list of page ranges with/without single pages&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function hyphen_to_dash (str)&lt;br /&gt;
	if not is_set (str) then&lt;br /&gt;
		return str;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	str = str:gsub (&amp;quot;(%(%(.-%)%))&amp;quot;, function(m) return m:gsub(&amp;quot;,&amp;quot;, &amp;quot;，&amp;quot;):gsub(&amp;quot;;&amp;quot;, &amp;quot;；&amp;quot;) end) -- replace commas and semicolons in accept-as-written markup with similar unicode characters so they&amp;#039;ll be ignored during the split	&lt;br /&gt;
	str = str:gsub (&amp;#039;&amp;amp;[nm]dash;&amp;#039;, {[&amp;#039;&amp;amp;ndash;&amp;#039;] = &amp;#039;–&amp;#039;, [&amp;#039;&amp;amp;mdash;&amp;#039;] = &amp;#039;—&amp;#039;});		-- replace &amp;amp;mdash; and &amp;amp;ndash; entities with their characters; semicolon mucks up the text.split&lt;br /&gt;
	str = str:gsub (&amp;#039;&amp;amp;#45;&amp;#039;, &amp;#039;-&amp;#039;);												-- replace HTML numeric entity with hyphen character&lt;br /&gt;
	str = str:gsub (&amp;#039;&amp;amp;nbsp;&amp;#039;, &amp;#039; &amp;#039;);												-- replace &amp;amp;nbsp; entity with generic keyboard space character&lt;br /&gt;
	&lt;br /&gt;
	local out = {};&lt;br /&gt;
	local list = mw.text.split (str, &amp;#039;%s*[,;]%s*&amp;#039;);								-- split str at comma or semicolon separators if there are any&lt;br /&gt;
&lt;br /&gt;
	local accept;																-- boolean&lt;br /&gt;
&lt;br /&gt;
	for _, item in ipairs (list) do												-- for each item in the list&lt;br /&gt;
		item, accept = has_accept_as_written (item);							-- remove accept-this-as-written markup when it wraps all of item&lt;br /&gt;
		if not accept and mw.ustring.match (item, &amp;#039;^%w*[%.%-]?%w+%s*[—–-]%s*%w*[%.%-]?%w+$&amp;#039;) then	-- if pagination uses &amp;lt;hyphen|dot&amp;gt; separators with hyphen/endash/emdash &amp;lt;range separator&amp;gt;&lt;br /&gt;
			if mw.ustring.match (item, &amp;#039;^%a+[%.%-]%d+%s*[—–-]%s*%a+[%.%-]%d+$&amp;#039;) or		-- letter&amp;lt;hyphen|dot&amp;gt;digit &amp;lt;range separator&amp;gt; letter&amp;lt;hyphen|dot&amp;gt;digit (requires &amp;lt;hyphen|dot&amp;gt; separator between letter and digit)&lt;br /&gt;
				mw.ustring.match (item, &amp;#039;^%d+[%.%-]%a+%s*[—–-]%s*%d+[%.%-]%a+$&amp;#039;) or		-- digit&amp;lt;hyphen|dot&amp;gt;letter &amp;lt;range separator&amp;gt; digit&amp;lt;hyphen|dot&amp;gt;letter (requires &amp;lt;hyphen|dot&amp;gt; separator between digit and letter)&lt;br /&gt;
				mw.ustring.match (item, &amp;#039;^%d+[%.%-]%d+%s*[—–-]%s*%d+[%.%-]%d+$&amp;#039;) then	-- digit&amp;lt;hyphen|dot&amp;gt;digit &amp;lt;range separator&amp;gt; digit&amp;lt;hyphen|dot&amp;gt;digit (requires &amp;lt;hyphen|dot&amp;gt; separator between digit and digit)&lt;br /&gt;
					item = mw.ustring.gsub (item, &amp;#039;(%w*[%.%-]%w+)%s*[—–-]%s*(%w*[%.%-]%w+)&amp;#039;, &amp;#039;&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;%1 –&amp;lt;/span&amp;gt; &amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;%2&amp;lt;/span&amp;gt;&amp;#039;);	-- replace &amp;lt;range separator&amp;gt;, with spaced endash&lt;br /&gt;
&lt;br /&gt;
			elseif mw.ustring.match (item, &amp;#039;^%d+%a+%s*[—–-]%s*%d+%a+$&amp;#039;) or		-- digitletter &amp;lt;range separator&amp;gt; digitletter&lt;br /&gt;
				mw.ustring.match (item, &amp;#039;^%a+%d+%s*[—–-]%s*%a+%d+$&amp;#039;) or			-- letterdigit &amp;lt;range separator&amp;gt; letterdigit&lt;br /&gt;
				mw.ustring.match (item, &amp;#039;^%d+%s*[—–-]%s*%d+$&amp;#039;) or				-- digit &amp;lt;range separator&amp;gt; digit&lt;br /&gt;
				mw.ustring.match (item, &amp;#039;^%a+%s*[—–-]%s*%a+$&amp;#039;) then				-- letter&amp;lt;range separator&amp;gt; letter&lt;br /&gt;
					item = mw.ustring.gsub (item, &amp;#039;(%w+)%s*[—–-]%s*(%w+)&amp;#039;, &amp;#039;&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;%1–&amp;lt;/span&amp;gt;%2&amp;#039;);	-- replace &amp;lt;range separator&amp;gt; with endash, remove extraneous space characters&lt;br /&gt;
&lt;br /&gt;
			else&lt;br /&gt;
	--			item = mw.ustring.gsub (item, &amp;#039;%s*[—–-]%s*&amp;#039;, &amp;#039;–&amp;#039;);				-- disabled; here when &amp;#039;unlike&amp;#039; items so return &amp;lt;item&amp;gt; as is&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		table.insert (out, item);												-- add the (possibly modified) item to the output table&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local temp_str = &amp;#039;&amp;#039;;														-- concatenate the output table into a comma separated string&lt;br /&gt;
	temp_str, accept = has_accept_as_written (table.concat (out, &amp;#039;, &amp;#039;));		-- remove accept-this-as-written markup when it wraps all of concatenated out&lt;br /&gt;
	if accept then&lt;br /&gt;
		temp_str = has_accept_as_written (str);									-- when global markup removed, return original str; do it this way to suppress boolean second return value&lt;br /&gt;
		return temp_str:gsub(&amp;quot;，&amp;quot;, &amp;quot;,&amp;quot;):gsub(&amp;quot;；&amp;quot;, &amp;quot;;&amp;quot;);&lt;br /&gt;
	else&lt;br /&gt;
		return temp_str:gsub(&amp;quot;，&amp;quot;, &amp;quot;,&amp;quot;):gsub(&amp;quot;；&amp;quot;, &amp;quot;;&amp;quot;);						-- else, return assembled temp_str&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[=[-------------------------&amp;lt; M A K E _ W I K I L I N K &amp;gt;----------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Makes a wikilink; when both link and display text is provided, returns a wikilink in the form [[L|D]]; if only&lt;br /&gt;
link is provided (or link and display are the same), returns a wikilink in the form [[L]]; if neither are&lt;br /&gt;
provided or link is omitted, returns an empty string.&lt;br /&gt;
&lt;br /&gt;
]=]&lt;br /&gt;
&lt;br /&gt;
local function make_wikilink (link, display)&lt;br /&gt;
	if not is_set (link) then return &amp;#039;&amp;#039; end&lt;br /&gt;
&lt;br /&gt;
	if is_set (display) and link ~= display then			&lt;br /&gt;
		return table.concat ({&amp;#039;[[&amp;#039;, link, &amp;#039;|&amp;#039;, display, &amp;#039;]]&amp;#039;});			&lt;br /&gt;
	else&lt;br /&gt;
		return table.concat ({&amp;#039;[[&amp;#039;, link, &amp;#039;]]&amp;#039;});&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; S E T _ M E S S A G E &amp;gt;----------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Sets an error message using the ~/Configuration error_conditions{} table along with arguments supplied in the function&lt;br /&gt;
call, inserts the resulting message in z.error_msgs_t{} sequence table, and returns the error message.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;error_id&amp;gt; – key value for appropriate error handler in ~/Configuration error_conditions{} table &lt;br /&gt;
&amp;lt;arguments&amp;gt; – may be a single string or a sequence table of multiple strings to be subsititued into error_conditions[error_id].message&lt;br /&gt;
&amp;lt;raw&amp;gt; – boolean&lt;br /&gt;
	true –	causes this function to return the error message not wrapped in visible-error, hidden-error span tag;&lt;br /&gt;
			returns error_conditions[error_id].hidden as a second return value&lt;br /&gt;
			does not add message to z.error_msgs_t sequence table&lt;br /&gt;
	false, nil – adds message wrapped in visible-error, hidden-error span tag to z.error_msgs_t&lt;br /&gt;
			returns the error message wrapped in visible-error, hidden-error span tag; there is no second return value&lt;br /&gt;
&amp;lt;prefix&amp;gt; – string to be prepended to &amp;lt;message&amp;gt;									-- TODO: remove support for these unused(?) arguments?&lt;br /&gt;
&amp;lt;suffix&amp;gt; – string to be appended to &amp;lt;message&amp;gt;&lt;br /&gt;
&lt;br /&gt;
TODO: change z.error_cats_t and z.maint_cats_t to have the form cat_name = true?  this to avoid dups without having to have an extra table&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local added_maint_cats = {}														-- list of maintenance categories that have been added to z.maint_cats_t; TODO: figure out how to delete this table&lt;br /&gt;
&lt;br /&gt;
local function set_message (error_id, arguments, raw, prefix, suffix)&lt;br /&gt;
	local error_state = cfg.error_conditions[error_id];&lt;br /&gt;
	&lt;br /&gt;
	prefix = prefix or &amp;#039;&amp;#039;;&lt;br /&gt;
	suffix = suffix or &amp;#039;&amp;#039;;&lt;br /&gt;
	&lt;br /&gt;
	if error_state == nil then&lt;br /&gt;
		error (cfg.messages[&amp;#039;undefined_error&amp;#039;] .. &amp;#039;: &amp;#039; .. error_id);			-- because missing error handler in Module:Citation/CS1/Configuration&lt;br /&gt;
&lt;br /&gt;
	elseif is_set (error_state.category) then&lt;br /&gt;
		if error_state.message then												-- when error_state.message defined, this is an error message&lt;br /&gt;
			table.insert (z.error_cats_t, error_state.category);&lt;br /&gt;
		else&lt;br /&gt;
			if not added_maint_cats[error_id] then&lt;br /&gt;
				added_maint_cats[error_id] = true;								-- note that we&amp;#039;ve added this category&lt;br /&gt;
				table.insert (z.maint_cats_t, substitute (error_state.category, arguments));	-- make cat name then add to table&lt;br /&gt;
			end&lt;br /&gt;
			return;																-- because no message, nothing more to do&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local message = substitute (error_state.message, arguments);&lt;br /&gt;
&lt;br /&gt;
	message = table.concat (&lt;br /&gt;
		{&lt;br /&gt;
		message,&lt;br /&gt;
		&amp;#039; (&amp;#039;,&lt;br /&gt;
		make_wikilink (&lt;br /&gt;
			table.concat (&lt;br /&gt;
				{&lt;br /&gt;
				cfg.messages[&amp;#039;help page link&amp;#039;],&lt;br /&gt;
				&amp;#039;#&amp;#039;,&lt;br /&gt;
				error_state.anchor&lt;br /&gt;
				}),&lt;br /&gt;
			cfg.messages[&amp;#039;help page label&amp;#039;]),&lt;br /&gt;
		&amp;#039;)&amp;#039;&lt;br /&gt;
		});&lt;br /&gt;
&lt;br /&gt;
	z.error_ids_t[error_id] = true;&lt;br /&gt;
	if z.error_ids_t[&amp;#039;err_citation_missing_title&amp;#039;] and							-- if missing-title error already noted&lt;br /&gt;
		in_array (error_id, {&amp;#039;err_bare_url_missing_title&amp;#039;, &amp;#039;err_trans_missing_title&amp;#039;}) then		-- and this error is one of these&lt;br /&gt;
			return &amp;#039;&amp;#039;, false;													-- don&amp;#039;t bother because one flavor of missing title is sufficient&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	message = table.concat ({prefix, message, suffix});&lt;br /&gt;
&lt;br /&gt;
	if true == raw then&lt;br /&gt;
		return message, error_state.hidden;										-- return message not wrapped in visible-error, hidden-error span tag&lt;br /&gt;
	end		&lt;br /&gt;
&lt;br /&gt;
	message = error_comment (message, error_state.hidden);						-- wrap message in visible-error, hidden-error span tag&lt;br /&gt;
	table.insert (z.error_msgs_t, message);										-- add it to the messages sequence table&lt;br /&gt;
	return message;																-- and done; return value generally not used but is used as a flag in various functions of ~/Identifiers&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[-------------------------&amp;lt; I S _ A L I A S _ U S E D &amp;gt;-----------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
This function is used by select_one() to determine if one of a list of alias parameters is in the argument list&lt;br /&gt;
provided by the template.&lt;br /&gt;
&lt;br /&gt;
Input:&lt;br /&gt;
	args – pointer to the arguments table from calling template&lt;br /&gt;
	alias – one of the list of possible aliases in the aliases lists from Module:Citation/CS1/Configuration&lt;br /&gt;
	index – for enumerated parameters, identifies which one&lt;br /&gt;
	enumerated – true/false flag used to choose how enumerated aliases are examined&lt;br /&gt;
	value – value associated with an alias that has previously been selected; nil if not yet selected&lt;br /&gt;
	selected – the alias that has previously been selected; nil if not yet selected&lt;br /&gt;
	error_list – list of aliases that are duplicates of the alias already selected&lt;br /&gt;
&lt;br /&gt;
Returns:&lt;br /&gt;
	value – value associated with alias we selected or that was previously selected or nil if an alias not yet selected&lt;br /&gt;
	selected – the alias we selected or the alias that was previously selected or nil if an alias not yet selected&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function is_alias_used (args, alias, index, enumerated, value, selected, error_list)&lt;br /&gt;
	if enumerated then															-- is this a test for an enumerated parameters?&lt;br /&gt;
		alias = alias:gsub (&amp;#039;#&amp;#039;, index);										-- replace &amp;#039;#&amp;#039; with the value in index&lt;br /&gt;
	else&lt;br /&gt;
		alias = alias:gsub (&amp;#039;#&amp;#039;, &amp;#039;&amp;#039;);											-- remove &amp;#039;#&amp;#039; if it exists&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if is_set (args[alias]) then												-- alias is in the template&amp;#039;s argument list&lt;br /&gt;
		if value ~= nil and selected ~= alias then								-- if we have already selected one of the aliases&lt;br /&gt;
			local skip;&lt;br /&gt;
			for _, v in ipairs (error_list) do									-- spin through the error list to see if we&amp;#039;ve added this alias&lt;br /&gt;
				if v == alias then&lt;br /&gt;
					skip = true;&lt;br /&gt;
					break;														-- has been added so stop looking &lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if not skip then													-- has not been added so&lt;br /&gt;
				table.insert (error_list, alias);								-- add error alias to the error list&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			value = args[alias];												-- not yet selected an alias, so select this one&lt;br /&gt;
			selected = alias;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return value, selected;														-- return newly selected alias, or previously selected alias&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; A D D _ M A I N T _ C A T &amp;gt;------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Adds a category to z.maint_cats_t using names from the configuration file with additional text if any.&lt;br /&gt;
To prevent duplication, the added_maint_cats table lists the categories by key that have been added to z.maint_cats_t.&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function add_maint_cat (key, arguments)&lt;br /&gt;
	if not added_maint_cats [key] then&lt;br /&gt;
		added_maint_cats [key] = true;											-- note that we&amp;#039;ve added this category&lt;br /&gt;
		table.insert (z.maint_cats_t, substitute (cfg.maint_cats [key], arguments));	-- make name then add to table&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; A D D _ P R O P _ C A T &amp;gt;--------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Adds a category to z.prop_cats_t using names from the configuration file with additional text if any.&lt;br /&gt;
&lt;br /&gt;
foreign_lang_source and foreign_lang_source_2 keys have a language code appended to them so that multiple languages&lt;br /&gt;
may be categorized but multiples of the same language are not categorized.&lt;br /&gt;
&lt;br /&gt;
added_prop_cats is a table declared in page scope variables above&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local added_prop_cats = {};														-- list of property categories that have been added to z.prop_cats_t&lt;br /&gt;
&lt;br /&gt;
local function add_prop_cat (key, arguments, key_modifier)&lt;br /&gt;
	local key_modified = key .. ((key_modifier and key_modifier) or &amp;#039;&amp;#039;);		-- modify &amp;lt;key&amp;gt; with &amp;lt;key_modifier&amp;gt; if present and not nil&lt;br /&gt;
	&lt;br /&gt;
	if not added_prop_cats [key_modified] then&lt;br /&gt;
		added_prop_cats [key_modified] = true;									-- note that we&amp;#039;ve added this category&lt;br /&gt;
		table.insert (z.prop_cats_t, substitute (cfg.prop_cats [key], arguments));	-- make name then add to table&lt;br /&gt;
		table.insert (z.prop_keys_t, &amp;#039;cs1-prop-&amp;#039; .. key);						-- convert key to class for use in the citation&amp;#039;s &amp;lt;cite&amp;gt; tag&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; S A F E _ F O R _ I T A L I C S &amp;gt;----------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Protects a string that will be wrapped in wiki italic markup &amp;#039;&amp;#039; ... &amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Note: We cannot use &amp;lt;i&amp;gt; for italics, as the expected behavior for italics specified by &amp;#039;&amp;#039;...&amp;#039;&amp;#039; in the title is that&lt;br /&gt;
they will be inverted (i.e. unitalicized) in the resulting references.  In addition, &amp;lt;i&amp;gt; and &amp;#039;&amp;#039; tend to interact&lt;br /&gt;
poorly under Mediawiki&amp;#039;s HTML tidy.&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function safe_for_italics (str)&lt;br /&gt;
	if not is_set (str) then return str end&lt;br /&gt;
&lt;br /&gt;
	if str:sub (1, 1) == &amp;quot;&amp;#039;&amp;quot; then str = &amp;quot;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;quot; .. str; end&lt;br /&gt;
	if str:sub (-1, -1) == &amp;quot;&amp;#039;&amp;quot; then str = str .. &amp;quot;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;quot;; end&lt;br /&gt;
	&lt;br /&gt;
	return str:gsub (&amp;#039;\n&amp;#039;, &amp;#039; &amp;#039;);												-- Remove newlines as they break italics.&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; W R A P _ S T Y L E &amp;gt;----------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Applies styling to various parameters.  Supplied string is wrapped using a message_list configuration taking one&lt;br /&gt;
argument; protects italic styled parameters.  Additional text taken from citation_config.presentation - the reason&lt;br /&gt;
this function is similar to but separate from wrap_msg().&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function wrap_style (key, str)&lt;br /&gt;
	if not is_set (str) then&lt;br /&gt;
		return &amp;quot;&amp;quot;;&lt;br /&gt;
	elseif in_array (key, {&amp;#039;italic-title&amp;#039;, &amp;#039;trans-italic-title&amp;#039;}) then&lt;br /&gt;
		str = safe_for_italics (str);&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return substitute (cfg.presentation[key], {str});&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; M A K E _ S E P _ L I S T &amp;gt;------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
make a separated list of items using provided separators.&lt;br /&gt;
	&amp;lt;sep_list&amp;gt; - typically &amp;#039;&amp;lt;comma&amp;gt;&amp;lt;space&amp;gt;&amp;#039;&lt;br /&gt;
	&amp;lt;sep_list_pair&amp;gt; - typically &amp;#039;&amp;lt;space&amp;gt;and&amp;lt;space&amp;gt;&amp;#039;&lt;br /&gt;
	&amp;lt;sep_list_end&amp;gt; - typically &amp;#039;&amp;lt;comma&amp;gt;&amp;lt;space&amp;gt;and&amp;lt;space&amp;gt;&amp;#039; or &amp;#039;&amp;lt;comma&amp;gt;&amp;lt;space&amp;gt;&amp;amp;&amp;lt;space&amp;gt;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
defaults to cfg.presentation[&amp;#039;sep_list&amp;#039;], cfg.presentation[&amp;#039;sep_list_pair&amp;#039;], and cfg.presentation[&amp;#039;sep_list_end&amp;#039;]&lt;br /&gt;
if &amp;lt;sep_list_end&amp;gt; is specified, &amp;lt;sep_list&amp;gt; and &amp;lt;sep_list_pair&amp;gt; must also be supplied&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function make_sep_list (count, list_seq, sep_list, sep_list_pair, sep_list_end)&lt;br /&gt;
	local list = &amp;#039;&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
	if not sep_list then														-- set the defaults&lt;br /&gt;
		sep_list = cfg.presentation[&amp;#039;sep_list&amp;#039;];&lt;br /&gt;
		sep_list_pair = cfg.presentation[&amp;#039;sep_list_pair&amp;#039;];&lt;br /&gt;
		sep_list_end = cfg.presentation[&amp;#039;sep_list_end&amp;#039;];&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if 2 &amp;gt;= count then&lt;br /&gt;
		list = table.concat (list_seq, sep_list_pair);							-- insert separator between two items; returns list_seq[1] then only one item&lt;br /&gt;
	elseif 2 &amp;lt; count then&lt;br /&gt;
		list = table.concat (list_seq, sep_list, 1, count - 1);					-- concatenate all but last item with plain list separator&lt;br /&gt;
		list = table.concat ({list, list_seq[count]}, sep_list_end);			-- concatenate last item onto end of &amp;lt;list&amp;gt; with final separator&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return list;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; S E L E C T _ O N E &amp;gt;----------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Chooses one matching parameter from a list of parameters to consider.  The list of parameters to consider is just&lt;br /&gt;
names.  For parameters that may be enumerated, the position of the numerator in the parameter name is identified&lt;br /&gt;
by the &amp;#039;#&amp;#039; so |author-last1= and |author1-last= are represented as &amp;#039;author-last#&amp;#039; and &amp;#039;author#-last&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Because enumerated parameter |&amp;lt;param&amp;gt;1= is an alias of |&amp;lt;param&amp;gt;= we must test for both possibilities.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Generates an error if more than one match is present.&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function select_one (args, aliases_list, error_condition, index)&lt;br /&gt;
	local value = nil;															-- the value assigned to the selected parameter&lt;br /&gt;
	local selected = &amp;#039;&amp;#039;;														-- the name of the parameter we have chosen&lt;br /&gt;
	local error_list = {};&lt;br /&gt;
&lt;br /&gt;
	if index ~= nil then index = tostring(index); end&lt;br /&gt;
&lt;br /&gt;
	for _, alias in ipairs (aliases_list) do									-- for each alias in the aliases list&lt;br /&gt;
		if alias:match (&amp;#039;#&amp;#039;) then												-- if this alias can be enumerated&lt;br /&gt;
			if &amp;#039;1&amp;#039; == index then												-- when index is 1 test for enumerated and non-enumerated aliases&lt;br /&gt;
				value, selected = is_alias_used (args, alias, index, false, value, selected, error_list);	-- first test for non-enumerated alias&lt;br /&gt;
			end&lt;br /&gt;
			value, selected = is_alias_used (args, alias, index, true, value, selected, error_list);	-- test for enumerated alias&lt;br /&gt;
		else&lt;br /&gt;
			value, selected = is_alias_used (args, alias, index, false, value, selected, error_list);	-- test for non-enumerated alias&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if #error_list &amp;gt; 0 and &amp;#039;none&amp;#039; ~= error_condition then						-- for cases where this code is used outside of extract_names()&lt;br /&gt;
		for i, v in ipairs (error_list) do&lt;br /&gt;
			error_list[i] = wrap_style (&amp;#039;parameter&amp;#039;, v);&lt;br /&gt;
		end&lt;br /&gt;
		table.insert (error_list, wrap_style (&amp;#039;parameter&amp;#039;, selected));&lt;br /&gt;
		set_message (error_condition, {make_sep_list (#error_list, error_list)});&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return value, selected;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[=[-------------------------&amp;lt; R E M O V E _ W I K I _ L I N K &amp;gt;----------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Gets the display text from a wikilink like [[A|B]] or [[B]] gives B&lt;br /&gt;
&lt;br /&gt;
The str:gsub() returns either A|B froma [[A|B]] or B from [[B]] or B from B (no wikilink markup).&lt;br /&gt;
&lt;br /&gt;
In l(), l:gsub() removes the link and pipe (if they exist); the second :gsub() trims whitespace from the label&lt;br /&gt;
if str was wrapped in wikilink markup.  Presumably, this is because without wikimarkup in str, there is no match&lt;br /&gt;
in the initial gsub, the replacement function l() doesn&amp;#039;t get called.&lt;br /&gt;
&lt;br /&gt;
]=]&lt;br /&gt;
&lt;br /&gt;
local function remove_wiki_link (str)&lt;br /&gt;
	return (str:gsub (&amp;quot;%[%[([^%[%]]*)%]%]&amp;quot;, function(l)&lt;br /&gt;
		return l:gsub (&amp;quot;^[^|]*|(.*)$&amp;quot;, &amp;quot;%1&amp;quot; ):gsub (&amp;quot;^%s*(.-)%s*$&amp;quot;, &amp;quot;%1&amp;quot;);&lt;br /&gt;
	end));&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[=[-------------------------&amp;lt; I S _ W I K I L I N K &amp;gt;--------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Determines if str is a wikilink, extracts, and returns the wikilink type, link text, and display text parts.&lt;br /&gt;
If str is a complex wikilink ([[L|D]]):&lt;br /&gt;
	returns wl_type 2 and D and L from [[L|D]];&lt;br /&gt;
if str is a simple wikilink ([[D]])&lt;br /&gt;
	returns wl_type 1 and D from [[D]] and L as empty string;&lt;br /&gt;
if not a wikilink:&lt;br /&gt;
	returns wl_type 0, str as D, and L as empty string.&lt;br /&gt;
&lt;br /&gt;
trims leading and trailing whitespace and pipes from L and D ([[L|]] and [[|D]] are accepted by MediaWiki and&lt;br /&gt;
treated like [[D]]; while [[|D|]] is not accepted by MediaWiki, here, we accept it and return D without the pipes).&lt;br /&gt;
&lt;br /&gt;
]=]&lt;br /&gt;
&lt;br /&gt;
local function is_wikilink (str)&lt;br /&gt;
	local D, L&lt;br /&gt;
	local wl_type = 2;															-- assume that str is a complex wikilink [[L|D]]&lt;br /&gt;
&lt;br /&gt;
	if not str:match (&amp;#039;^%[%[[^%]]+%]%]$&amp;#039;) then									-- is str some sort of a wikilink (must have some sort of content)&lt;br /&gt;
		return 0, str, &amp;#039;&amp;#039;;														-- not a wikilink; return wl_type as 0, str as D, and empty string as L&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	L, D = str:match (&amp;#039;^%[%[([^|]+)|([^%]]+)%]%]$&amp;#039;);							-- get L and D from [[L|D]] &lt;br /&gt;
&lt;br /&gt;
	if not is_set (D) then														-- if no separate display&lt;br /&gt;
		D = str:match (&amp;#039;^%[%[([^%]]*)|*%]%]$&amp;#039;);									-- get D from [[D]] or [[D|]]&lt;br /&gt;
		wl_type = 1; &lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	D = mw.text.trim (D, &amp;#039;%s|&amp;#039;);												-- trim white space and pipe characters &lt;br /&gt;
	return wl_type, D, L or &amp;#039;&amp;#039;;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; S T R I P _ A P O S T R O P H E _ M A R K U P &amp;gt;--------------------------------&lt;br /&gt;
&lt;br /&gt;
Strip wiki italic and bold markup from argument so that it doesn&amp;#039;t contaminate COinS metadata.&lt;br /&gt;
This function strips common patterns of apostrophe markup.  We presume that editors who have taken the time to&lt;br /&gt;
markup a title have, as a result, provided valid markup. When they don&amp;#039;t, some single apostrophes are left behind.&lt;br /&gt;
&lt;br /&gt;
Returns the argument without wiki markup and a number; the number is more-or-less meaningless except as a flag&lt;br /&gt;
to indicate that markup was replaced; do not rely on it as an indicator of how many of any kind of markup was&lt;br /&gt;
removed; returns the argument and nil when no markup removed&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function strip_apostrophe_markup (argument)&lt;br /&gt;
	if not is_set (argument) then&lt;br /&gt;
		return argument, nil;													-- no argument, nothing to do&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if nil == argument:find ( &amp;quot;&amp;#039;&amp;#039;&amp;quot;, 1, true ) then								-- Is there at least one double apostrophe?  If not, exit.&lt;br /&gt;
		return argument, nil;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local flag;&lt;br /&gt;
	while true do&lt;br /&gt;
		if argument:find (&amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;quot;, 1, true) then								-- bold italic (5)&lt;br /&gt;
			argument, flag = argument:gsub (&amp;quot;%&amp;#039;%&amp;#039;%&amp;#039;%&amp;#039;%&amp;#039;&amp;quot;, &amp;quot;&amp;quot;);					-- remove all instances of it&lt;br /&gt;
		elseif argument:find (&amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;quot;, 1, true) then								-- italic start and end without content (4)&lt;br /&gt;
			argument, flag=argument:gsub (&amp;quot;%&amp;#039;%&amp;#039;%&amp;#039;%&amp;#039;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
		elseif argument:find (&amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;quot;, 1, true) then								-- bold (3)&lt;br /&gt;
			argument, flag=argument:gsub (&amp;quot;%&amp;#039;%&amp;#039;%&amp;#039;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
		elseif argument:find (&amp;quot;&amp;#039;&amp;#039;&amp;quot;, 1, true) then								-- italic (2)&lt;br /&gt;
			argument, flag = argument:gsub (&amp;quot;%&amp;#039;%&amp;#039;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
		else&lt;br /&gt;
			break;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return argument, flag;														-- done&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; S E T _ S E L E C T E D _ M O D U L E S &amp;gt;--------------------------------------&lt;br /&gt;
&lt;br /&gt;
Sets local cfg table to same (live or sandbox) as that used by the other modules.&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function set_selected_modules (cfg_table_ptr)&lt;br /&gt;
	cfg = cfg_table_ptr;&lt;br /&gt;
	&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; E X P O R T S &amp;gt;----------------------------------------------------------------&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
return {&lt;br /&gt;
	add_maint_cat = add_maint_cat,												-- exported functions&lt;br /&gt;
	add_prop_cat = add_prop_cat,&lt;br /&gt;
	error_comment = error_comment,&lt;br /&gt;
	has_accept_as_written = has_accept_as_written,&lt;br /&gt;
	hyphen_to_dash = hyphen_to_dash,&lt;br /&gt;
	in_array = in_array,&lt;br /&gt;
	is_set = is_set,&lt;br /&gt;
	is_wikilink = is_wikilink,&lt;br /&gt;
	make_sep_list = make_sep_list,&lt;br /&gt;
	make_wikilink = make_wikilink,&lt;br /&gt;
	remove_wiki_link = remove_wiki_link,&lt;br /&gt;
	safe_for_italics = safe_for_italics,&lt;br /&gt;
	select_one = select_one,&lt;br /&gt;
	set_message = set_message,&lt;br /&gt;
	set_selected_modules = set_selected_modules,&lt;br /&gt;
	strip_apostrophe_markup = strip_apostrophe_markup,&lt;br /&gt;
	substitute = substitute,&lt;br /&gt;
	wrap_style = wrap_style,&lt;br /&gt;
&lt;br /&gt;
	z = z,																		-- exported table&lt;br /&gt;
	}&lt;/div&gt;</description>
			<pubDate>Wed, 22 Apr 2026 07:22:19 GMT</pubDate>
			<dc:creator>Evolution and evolvability</dc:creator>
			<comments>https://stardit.wikimedia.org.au/wiki/Module_talk:Citation/CS1/Utilities</comments>
		</item>
		<item>
			<title>Module:Citation/CS1/Date validation</title>
			<link>https://stardit.wikimedia.org.au/w/index.php?title=Module:Citation/CS1/Date_validation&amp;diff=1674&amp;oldid=0</link>
			<guid isPermaLink="false">https://stardit.wikimedia.org.au/w/index.php?title=Module:Citation/CS1/Date_validation&amp;diff=1674&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/w/index.php?title=User:Evolution_and_evolvability&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Evolution and evolvability (page does not exist)&quot;&gt;&lt;bdi&gt;Evolution and evolvability&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/wiki/Module:Citation/CS1/Date_validation&quot; title=&quot;Module:Citation/CS1/Date validation&quot;&gt;Module:Citation/CS1/Date validation&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;a href=&quot;https://stardit.wikimedia.org.au/w/index.php?title=Module:Citation/CS1/Date_validation&amp;amp;diff=1674&quot;&gt;Show changes&lt;/a&gt;</description>
			<pubDate>Wed, 22 Apr 2026 07:22:19 GMT</pubDate>
			<dc:creator>Evolution and evolvability</dc:creator>
			<comments>https://stardit.wikimedia.org.au/wiki/Module_talk:Citation/CS1/Date_validation</comments>
		</item>
		<item>
			<title>Module:Citation/CS1/Identifiers</title>
			<link>https://stardit.wikimedia.org.au/w/index.php?title=Module:Citation/CS1/Identifiers&amp;diff=1676&amp;oldid=0</link>
			<guid isPermaLink="false">https://stardit.wikimedia.org.au/w/index.php?title=Module:Citation/CS1/Identifiers&amp;diff=1676&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/w/index.php?title=User:Evolution_and_evolvability&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Evolution and evolvability (page does not exist)&quot;&gt;&lt;bdi&gt;Evolution and evolvability&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/wiki/Module:Citation/CS1/Identifiers&quot; title=&quot;Module:Citation/CS1/Identifiers&quot;&gt;Module:Citation/CS1/Identifiers&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;a href=&quot;https://stardit.wikimedia.org.au/w/index.php?title=Module:Citation/CS1/Identifiers&amp;amp;diff=1676&quot;&gt;Show changes&lt;/a&gt;</description>
			<pubDate>Wed, 22 Apr 2026 07:22:19 GMT</pubDate>
			<dc:creator>Evolution and evolvability</dc:creator>
			<comments>https://stardit.wikimedia.org.au/wiki/Module_talk:Citation/CS1/Identifiers</comments>
		</item>
		<item>
			<title>Module:Message box</title>
			<link>https://stardit.wikimedia.org.au/w/index.php?title=Module:Message_box&amp;diff=1658&amp;oldid=0</link>
			<guid isPermaLink="false">https://stardit.wikimedia.org.au/w/index.php?title=Module:Message_box&amp;diff=1658&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/w/index.php?title=User:Evolution_and_evolvability&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Evolution and evolvability (page does not exist)&quot;&gt;&lt;bdi&gt;Evolution and evolvability&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/wiki/Module:Message_box&quot; title=&quot;Module:Message box&quot;&gt;Module:Message box&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;require(&amp;#039;strict&amp;#039;)&lt;br /&gt;
local getArgs&lt;br /&gt;
local yesno = require(&amp;#039;Module:Yesno&amp;#039;)&lt;br /&gt;
local lang = mw.language.getContentLanguage()&lt;br /&gt;
&lt;br /&gt;
local CONFIG_MODULE = &amp;#039;Module:Message box/configuration&amp;#039;&lt;br /&gt;
local DEMOSPACES = {talk = &amp;#039;tmbox&amp;#039;, image = &amp;#039;imbox&amp;#039;, file = &amp;#039;imbox&amp;#039;, category = &amp;#039;cmbox&amp;#039;, article = &amp;#039;ambox&amp;#039;, main = &amp;#039;ambox&amp;#039;}&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Helper functions&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local function getTitleObject(...)&lt;br /&gt;
	-- Get the title object, passing the function through pcall&lt;br /&gt;
	-- in case we are over the expensive function count limit.&lt;br /&gt;
	local success, title = pcall(mw.title.new, ...)&lt;br /&gt;
	if success then&lt;br /&gt;
		return title&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function union(t1, t2)&lt;br /&gt;
	-- Returns the union of two arrays.&lt;br /&gt;
	local vals = {}&lt;br /&gt;
	for i, v in ipairs(t1) do&lt;br /&gt;
		vals[v] = true&lt;br /&gt;
	end&lt;br /&gt;
	for i, v in ipairs(t2) do&lt;br /&gt;
		vals[v] = true&lt;br /&gt;
	end&lt;br /&gt;
	local ret = {}&lt;br /&gt;
	for k in pairs(vals) do&lt;br /&gt;
		table.insert(ret, k)&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(ret)&lt;br /&gt;
	return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getArgNums(args, prefix)&lt;br /&gt;
	local nums = {}&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		local num = mw.ustring.match(tostring(k), &amp;#039;^&amp;#039; .. prefix .. &amp;#039;([1-9]%d*)$&amp;#039;)&lt;br /&gt;
		if num then&lt;br /&gt;
			table.insert(nums, tonumber(num))&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(nums)&lt;br /&gt;
	return nums&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Box class definition&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local MessageBox = {}&lt;br /&gt;
MessageBox.__index = MessageBox&lt;br /&gt;
&lt;br /&gt;
function MessageBox.new(boxType, args, cfg)&lt;br /&gt;
	args = args or {}&lt;br /&gt;
	local obj = {}&lt;br /&gt;
&lt;br /&gt;
	-- Set the title object and the namespace.&lt;br /&gt;
	obj.title = getTitleObject(args.page) or mw.title.getCurrentTitle()&lt;br /&gt;
&lt;br /&gt;
	-- Set the config for our box type.&lt;br /&gt;
	obj.cfg = cfg[boxType]&lt;br /&gt;
	if not obj.cfg then&lt;br /&gt;
		local ns = obj.title.namespace&lt;br /&gt;
		-- boxType is &amp;quot;mbox&amp;quot; or invalid input&lt;br /&gt;
		if args.demospace and args.demospace ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			-- implement demospace parameter of mbox&lt;br /&gt;
			local demospace = string.lower(args.demospace)&lt;br /&gt;
			if DEMOSPACES[demospace] then&lt;br /&gt;
				-- use template from DEMOSPACES&lt;br /&gt;
				obj.cfg = cfg[DEMOSPACES[demospace]]&lt;br /&gt;
			elseif string.find( demospace, &amp;#039;talk&amp;#039; ) then&lt;br /&gt;
				-- demo as a talk page&lt;br /&gt;
				obj.cfg = cfg.tmbox&lt;br /&gt;
			else&lt;br /&gt;
				-- default to ombox&lt;br /&gt;
				obj.cfg = cfg.ombox&lt;br /&gt;
			end&lt;br /&gt;
		elseif ns == 0 then&lt;br /&gt;
			obj.cfg = cfg.ambox -- main namespace&lt;br /&gt;
		elseif ns == 6 then&lt;br /&gt;
			obj.cfg = cfg.imbox -- file namespace&lt;br /&gt;
		elseif ns == 14 then&lt;br /&gt;
			obj.cfg = cfg.cmbox -- category namespace&lt;br /&gt;
		else&lt;br /&gt;
			local nsTable = mw.site.namespaces[ns]&lt;br /&gt;
			if nsTable and nsTable.isTalk then&lt;br /&gt;
				obj.cfg = cfg.tmbox -- any talk namespace&lt;br /&gt;
			else&lt;br /&gt;
				obj.cfg = cfg.ombox -- other namespaces or invalid input&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Set the arguments, and remove all blank arguments except for the ones&lt;br /&gt;
	-- listed in cfg.allowBlankParams.&lt;br /&gt;
	do&lt;br /&gt;
		local newArgs = {}&lt;br /&gt;
		for k, v in pairs(args) do&lt;br /&gt;
			if v ~= &amp;#039;&amp;#039; then&lt;br /&gt;
				newArgs[k] = v&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		for i, param in ipairs(obj.cfg.allowBlankParams or {}) do&lt;br /&gt;
			newArgs[param] = args[param]&lt;br /&gt;
		end&lt;br /&gt;
		obj.args = newArgs&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Define internal data structure.&lt;br /&gt;
	obj.categories = {}&lt;br /&gt;
	obj.classes = {}&lt;br /&gt;
	-- For lazy loading of [[Module:Category handler]].&lt;br /&gt;
	obj.hasCategories = false&lt;br /&gt;
&lt;br /&gt;
	return setmetatable(obj, MessageBox)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MessageBox:addCat(ns, cat, sort)&lt;br /&gt;
	if not cat then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	if sort then&lt;br /&gt;
		cat = string.format(&amp;#039;[[Category:%s|%s]]&amp;#039;, cat, sort)&lt;br /&gt;
	else&lt;br /&gt;
		cat = string.format(&amp;#039;[[Category:%s]]&amp;#039;, cat)&lt;br /&gt;
	end&lt;br /&gt;
	self.hasCategories = true&lt;br /&gt;
	self.categories[ns] = self.categories[ns] or {}&lt;br /&gt;
	table.insert(self.categories[ns], cat)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MessageBox:addClass(class)&lt;br /&gt;
	if not class then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	table.insert(self.classes, class)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MessageBox:setParameters()&lt;br /&gt;
	local args = self.args&lt;br /&gt;
	local cfg = self.cfg&lt;br /&gt;
&lt;br /&gt;
	-- Get type data.&lt;br /&gt;
	self.type = args.type&lt;br /&gt;
	local typeData = cfg.types[self.type]&lt;br /&gt;
	self.invalidTypeError = cfg.showInvalidTypeError&lt;br /&gt;
		and self.type&lt;br /&gt;
		and not typeData&lt;br /&gt;
	typeData = typeData or cfg.types[cfg.default]&lt;br /&gt;
	self.typeClass = typeData.class&lt;br /&gt;
	self.typeImage = typeData.image&lt;br /&gt;
	self.typeImageNeedsLink = typeData.imageNeedsLink&lt;br /&gt;
&lt;br /&gt;
	-- Find if the box has been wrongly substituted.&lt;br /&gt;
	self.isSubstituted = cfg.substCheck and args.subst == &amp;#039;SUBST&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	-- Find whether we are using a small message box.&lt;br /&gt;
	self.isSmall = cfg.allowSmall and (&lt;br /&gt;
		cfg.smallParam and args.small == cfg.smallParam&lt;br /&gt;
		or not cfg.smallParam and yesno(args.small)&lt;br /&gt;
	)&lt;br /&gt;
&lt;br /&gt;
	-- Set the below row.&lt;br /&gt;
	self.below = cfg.below and args.below&lt;br /&gt;
	&lt;br /&gt;
	-- Add attributes, classes and styles.&lt;br /&gt;
	self.id = args.id&lt;br /&gt;
	self.name = args.name&lt;br /&gt;
	if self.name then&lt;br /&gt;
		self:addClass(&amp;#039;box-&amp;#039; .. string.gsub(self.name,&amp;#039; &amp;#039;,&amp;#039;_&amp;#039;))&lt;br /&gt;
	end&lt;br /&gt;
	if yesno(args.plainlinks) ~= false then&lt;br /&gt;
		self:addClass(&amp;#039;plainlinks&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	if self.below then&lt;br /&gt;
		self:addClass(&amp;#039;mbox-with-below&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	for _, class in ipairs(cfg.classes or {}) do&lt;br /&gt;
		self:addClass(class)&lt;br /&gt;
	end&lt;br /&gt;
	if self.isSmall then&lt;br /&gt;
		self:addClass(cfg.smallClass or &amp;#039;mbox-small&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	self:addClass(self.typeClass)&lt;br /&gt;
	self:addClass(args.class)&lt;br /&gt;
	self.style = args.style&lt;br /&gt;
	self.attrs = args.attrs&lt;br /&gt;
&lt;br /&gt;
	-- Set text style.&lt;br /&gt;
	self.textstyle = args.textstyle&lt;br /&gt;
&lt;br /&gt;
	-- Set image classes.&lt;br /&gt;
	self.imageRightClass = args.imagerightclass or args.imageclass&lt;br /&gt;
	self.imageLeftClass = args.imageleftclass or args.imageclass&lt;br /&gt;
&lt;br /&gt;
	-- Find if we are on the template page or not. This functionality is only&lt;br /&gt;
	-- used if useCollapsibleTextFields is set, or if both cfg.templateCategory&lt;br /&gt;
	-- and cfg.templateCategoryRequireName are set.&lt;br /&gt;
	self.useCollapsibleTextFields = cfg.useCollapsibleTextFields&lt;br /&gt;
	if self.useCollapsibleTextFields&lt;br /&gt;
		or cfg.templateCategory&lt;br /&gt;
		and cfg.templateCategoryRequireName&lt;br /&gt;
	then&lt;br /&gt;
		if self.name then&lt;br /&gt;
			local templateName = mw.ustring.match(&lt;br /&gt;
				self.name,&lt;br /&gt;
				&amp;#039;^[tT][eE][mM][pP][lL][aA][tT][eE][%s_]*:[%s_]*(.*)$&amp;#039;&lt;br /&gt;
			) or self.name&lt;br /&gt;
			templateName = &amp;#039;Template:&amp;#039; .. templateName&lt;br /&gt;
			self.templateTitle = getTitleObject(templateName)&lt;br /&gt;
		end&lt;br /&gt;
		self.isTemplatePage = self.templateTitle&lt;br /&gt;
			and mw.title.equals(self.title, self.templateTitle)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- Process data for collapsible text fields. At the moment these are only&lt;br /&gt;
	-- used in {{ambox}}.&lt;br /&gt;
	if self.useCollapsibleTextFields then&lt;br /&gt;
		-- Get the self.issue value.&lt;br /&gt;
		if self.isSmall and args.smalltext then&lt;br /&gt;
			self.issue = args.smalltext&lt;br /&gt;
		else&lt;br /&gt;
			local sect&lt;br /&gt;
			if args.sect == &amp;#039;&amp;#039; then&lt;br /&gt;
				sect = &amp;#039;This &amp;#039; .. (cfg.sectionDefault or &amp;#039;page&amp;#039;)&lt;br /&gt;
			elseif type(args.sect) == &amp;#039;string&amp;#039; then&lt;br /&gt;
				sect = &amp;#039;This &amp;#039; .. args.sect&lt;br /&gt;
			end&lt;br /&gt;
			local issue = args.issue&lt;br /&gt;
			issue = type(issue) == &amp;#039;string&amp;#039; and issue ~= &amp;#039;&amp;#039; and issue or nil&lt;br /&gt;
			local text = args.text&lt;br /&gt;
			text = type(text) == &amp;#039;string&amp;#039; and text or nil&lt;br /&gt;
			local issues = {}&lt;br /&gt;
			table.insert(issues, sect)&lt;br /&gt;
			table.insert(issues, issue)&lt;br /&gt;
			table.insert(issues, text)&lt;br /&gt;
			self.issue = table.concat(issues, &amp;#039; &amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Get the self.talk value.&lt;br /&gt;
		local talk = args.talk&lt;br /&gt;
		-- Show talk links on the template page or template subpages if the talk&lt;br /&gt;
		-- parameter is blank.&lt;br /&gt;
		if talk == &amp;#039;&amp;#039;&lt;br /&gt;
			and self.templateTitle&lt;br /&gt;
			and (&lt;br /&gt;
				mw.title.equals(self.templateTitle, self.title)&lt;br /&gt;
				or self.title:isSubpageOf(self.templateTitle)&lt;br /&gt;
			)&lt;br /&gt;
		then&lt;br /&gt;
			talk = &amp;#039;#&amp;#039;&lt;br /&gt;
		elseif talk == &amp;#039;&amp;#039; then&lt;br /&gt;
			talk = nil&lt;br /&gt;
		end&lt;br /&gt;
		if talk then&lt;br /&gt;
			-- If the talk value is a talk page, make a link to that page. Else&lt;br /&gt;
			-- assume that it&amp;#039;s a section heading, and make a link to the talk&lt;br /&gt;
			-- page of the current page with that section heading.&lt;br /&gt;
			local talkTitle = getTitleObject(talk)&lt;br /&gt;
			local talkArgIsTalkPage = true&lt;br /&gt;
			if not talkTitle or not talkTitle.isTalkPage then&lt;br /&gt;
				talkArgIsTalkPage = false&lt;br /&gt;
				talkTitle = getTitleObject(&lt;br /&gt;
					self.title.text,&lt;br /&gt;
					mw.site.namespaces[self.title.namespace].talk.id&lt;br /&gt;
				)&lt;br /&gt;
			end&lt;br /&gt;
			if talkTitle and talkTitle.exists then&lt;br /&gt;
                local talkText&lt;br /&gt;
                if self.isSmall then&lt;br /&gt;
                    local talkLink = talkArgIsTalkPage and talk or (talkTitle.prefixedText .. (talk == &amp;#039;#&amp;#039; and &amp;#039;&amp;#039; or &amp;#039;#&amp;#039;) .. talk)&lt;br /&gt;
                    talkText = string.format(&amp;#039;([[%s|talk]])&amp;#039;, talkLink)&lt;br /&gt;
                else&lt;br /&gt;
                    talkText = &amp;#039;Relevant discussion may be found on&amp;#039;&lt;br /&gt;
                    if talkArgIsTalkPage then&lt;br /&gt;
                        talkText = string.format(&lt;br /&gt;
                            &amp;#039;%s [[%s|%s]].&amp;#039;,&lt;br /&gt;
                            talkText,&lt;br /&gt;
                            talk,&lt;br /&gt;
                            talkTitle.prefixedText&lt;br /&gt;
                        )&lt;br /&gt;
                    else&lt;br /&gt;
                        talkText = string.format(&lt;br /&gt;
                            &amp;#039;%s the [[%s&amp;#039; .. (talk == &amp;#039;#&amp;#039; and &amp;#039;&amp;#039; or &amp;#039;#&amp;#039;) .. &amp;#039;%s|talk page]].&amp;#039;,&lt;br /&gt;
                            talkText,&lt;br /&gt;
                            talkTitle.prefixedText,&lt;br /&gt;
                            talk&lt;br /&gt;
                        )&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
				self.talk = talkText&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		-- Get other values.&lt;br /&gt;
		self.fix = args.fix ~= &amp;#039;&amp;#039; and args.fix or nil&lt;br /&gt;
		local date&lt;br /&gt;
		if args.date and args.date ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			date = args.date&lt;br /&gt;
		elseif args.date == &amp;#039;&amp;#039; and self.isTemplatePage then&lt;br /&gt;
			date = lang:formatDate(&amp;#039;F Y&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
		if date then&lt;br /&gt;
			self.date = string.format(&amp;quot; &amp;lt;span class=&amp;#039;date-container&amp;#039;&amp;gt;&amp;lt;i&amp;gt;(&amp;lt;span class=&amp;#039;date&amp;#039;&amp;gt;%s&amp;lt;/span&amp;gt;)&amp;lt;/i&amp;gt;&amp;lt;/span&amp;gt;&amp;quot;, date)&lt;br /&gt;
		end&lt;br /&gt;
		self.info = args.info&lt;br /&gt;
		if yesno(args.removalnotice) then&lt;br /&gt;
			self.removalNotice = cfg.removalNotice&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Set the non-collapsible text field. At the moment this is used by all box&lt;br /&gt;
	-- types other than ambox, and also by ambox when small=yes.&lt;br /&gt;
	if self.isSmall then&lt;br /&gt;
		self.text = args.smalltext or args.text&lt;br /&gt;
	else&lt;br /&gt;
		self.text = args.text&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- General image settings.&lt;br /&gt;
	self.imageCellDiv = not self.isSmall and cfg.imageCellDiv&lt;br /&gt;
	self.imageEmptyCell = cfg.imageEmptyCell&lt;br /&gt;
&lt;br /&gt;
	-- Left image settings.&lt;br /&gt;
	local imageLeft = self.isSmall and args.smallimage or args.image&lt;br /&gt;
	if cfg.imageCheckBlank and imageLeft ~= &amp;#039;blank&amp;#039; and imageLeft ~= &amp;#039;none&amp;#039;&lt;br /&gt;
		or not cfg.imageCheckBlank and imageLeft ~= &amp;#039;none&amp;#039;&lt;br /&gt;
	then&lt;br /&gt;
		self.imageLeft = imageLeft&lt;br /&gt;
		if not imageLeft then&lt;br /&gt;
			local imageSize = self.isSmall&lt;br /&gt;
				and (cfg.imageSmallSize or &amp;#039;30x30px&amp;#039;)&lt;br /&gt;
				or &amp;#039;40x40px&amp;#039;&lt;br /&gt;
			self.imageLeft = string.format(&amp;#039;[[File:%s|%s%s|alt=]]&amp;#039;, self.typeImage&lt;br /&gt;
				or &amp;#039;Information icon4.svg&amp;#039;, imageSize, self.typeImageNeedsLink and &amp;quot;&amp;quot; or &amp;quot;|link=&amp;quot; )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Right image settings.&lt;br /&gt;
	local imageRight = self.isSmall and args.smallimageright or args.imageright&lt;br /&gt;
	if not (cfg.imageRightNone and imageRight == &amp;#039;none&amp;#039;) then&lt;br /&gt;
		self.imageRight = imageRight&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	-- set templatestyles&lt;br /&gt;
	self.base_templatestyles = cfg.templatestyles&lt;br /&gt;
	self.templatestyles = args.templatestyles&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MessageBox:setMainspaceCategories()&lt;br /&gt;
	local args = self.args&lt;br /&gt;
	local cfg = self.cfg&lt;br /&gt;
&lt;br /&gt;
	if not cfg.allowMainspaceCategories then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local nums = {}&lt;br /&gt;
	for _, prefix in ipairs{&amp;#039;cat&amp;#039;, &amp;#039;category&amp;#039;, &amp;#039;all&amp;#039;} do&lt;br /&gt;
		args[prefix .. &amp;#039;1&amp;#039;] = args[prefix]&lt;br /&gt;
		nums = union(nums, getArgNums(args, prefix))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- The following is roughly equivalent to the old {{Ambox/category}}.&lt;br /&gt;
	local date = args.date&lt;br /&gt;
	date = type(date) == &amp;#039;string&amp;#039; and date&lt;br /&gt;
	local preposition = &amp;#039;from&amp;#039;&lt;br /&gt;
	for _, num in ipairs(nums) do&lt;br /&gt;
		local mainCat = args[&amp;#039;cat&amp;#039; .. tostring(num)]&lt;br /&gt;
			or args[&amp;#039;category&amp;#039; .. tostring(num)]&lt;br /&gt;
		local allCat = args[&amp;#039;all&amp;#039; .. tostring(num)]&lt;br /&gt;
		mainCat = type(mainCat) == &amp;#039;string&amp;#039; and mainCat&lt;br /&gt;
		allCat = type(allCat) == &amp;#039;string&amp;#039; and allCat&lt;br /&gt;
		if mainCat and date and date ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			local catTitle = string.format(&amp;#039;%s %s %s&amp;#039;, mainCat, preposition, date)&lt;br /&gt;
			self:addCat(0, catTitle)&lt;br /&gt;
			catTitle = getTitleObject(&amp;#039;Category:&amp;#039; .. catTitle)&lt;br /&gt;
			if not catTitle or not catTitle.exists then&lt;br /&gt;
				self:addCat(0, &amp;#039;Articles with invalid date parameter in template&amp;#039;)&lt;br /&gt;
			end&lt;br /&gt;
		elseif mainCat and (not date or date == &amp;#039;&amp;#039;) then&lt;br /&gt;
			self:addCat(0, mainCat)&lt;br /&gt;
		end&lt;br /&gt;
		if allCat then&lt;br /&gt;
			self:addCat(0, allCat)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MessageBox:setTemplateCategories()&lt;br /&gt;
	local args = self.args&lt;br /&gt;
	local cfg = self.cfg&lt;br /&gt;
&lt;br /&gt;
	-- Add template categories.&lt;br /&gt;
	if cfg.templateCategory then&lt;br /&gt;
		if cfg.templateCategoryRequireName then&lt;br /&gt;
			if self.isTemplatePage then&lt;br /&gt;
				self:addCat(10, cfg.templateCategory)&lt;br /&gt;
			end&lt;br /&gt;
		elseif not self.title.isSubpage then&lt;br /&gt;
			self:addCat(10, cfg.templateCategory)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add template error categories.&lt;br /&gt;
	if cfg.templateErrorCategory then&lt;br /&gt;
		local templateErrorCategory = cfg.templateErrorCategory&lt;br /&gt;
		local templateCat, templateSort&lt;br /&gt;
		if not self.name and not self.title.isSubpage then&lt;br /&gt;
			templateCat = templateErrorCategory&lt;br /&gt;
		elseif self.isTemplatePage then&lt;br /&gt;
			local paramsToCheck = cfg.templateErrorParamsToCheck or {}&lt;br /&gt;
			local count = 0&lt;br /&gt;
			for i, param in ipairs(paramsToCheck) do&lt;br /&gt;
				if not args[param] then&lt;br /&gt;
					count = count + 1&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			if count &amp;gt; 0 then&lt;br /&gt;
				templateCat = templateErrorCategory&lt;br /&gt;
				templateSort = tostring(count)&lt;br /&gt;
			end&lt;br /&gt;
			if self.categoryNums and #self.categoryNums &amp;gt; 0 then&lt;br /&gt;
				templateCat = templateErrorCategory&lt;br /&gt;
				templateSort = &amp;#039;C&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		self:addCat(10, templateCat, templateSort)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MessageBox:setAllNamespaceCategories()&lt;br /&gt;
	-- Set categories for all namespaces.&lt;br /&gt;
	if self.invalidTypeError then&lt;br /&gt;
		local allSort = (self.title.namespace == 0 and &amp;#039;Main:&amp;#039; or &amp;#039;&amp;#039;) .. self.title.prefixedText&lt;br /&gt;
		self:addCat(&amp;#039;all&amp;#039;, &amp;#039;Wikipedia message box parameter needs fixing&amp;#039;, allSort)&lt;br /&gt;
	end&lt;br /&gt;
	if self.isSubstituted then&lt;br /&gt;
		self:addCat(&amp;#039;all&amp;#039;, &amp;#039;Pages with incorrectly substituted templates&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MessageBox:setCategories()&lt;br /&gt;
	if self.title.namespace == 0 then&lt;br /&gt;
		self:setMainspaceCategories()&lt;br /&gt;
	elseif self.title.namespace == 10 then&lt;br /&gt;
		self:setTemplateCategories()&lt;br /&gt;
	end&lt;br /&gt;
	self:setAllNamespaceCategories()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MessageBox:renderCategories()&lt;br /&gt;
	if not self.hasCategories then&lt;br /&gt;
		-- No categories added, no need to pass them to Category handler so,&lt;br /&gt;
		-- if it was invoked, it would return the empty string.&lt;br /&gt;
		-- So we shortcut and return the empty string.&lt;br /&gt;
		return &amp;quot;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	-- Convert category tables to strings and pass them through&lt;br /&gt;
	-- [[Module:Category handler]].&lt;br /&gt;
	return require(&amp;#039;Module:Category handler&amp;#039;)._main{&lt;br /&gt;
		main = table.concat(self.categories[0] or {}),&lt;br /&gt;
		template = table.concat(self.categories[10] or {}),&lt;br /&gt;
		all = table.concat(self.categories.all or {}),&lt;br /&gt;
		nocat = self.args.nocat,&lt;br /&gt;
		page = self.args.page&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MessageBox:exportDiv()&lt;br /&gt;
	local root = mw.html.create()&lt;br /&gt;
&lt;br /&gt;
	-- Add the subst check error.&lt;br /&gt;
	if self.isSubstituted and self.name then&lt;br /&gt;
		root:tag(&amp;#039;b&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;error&amp;#039;)&lt;br /&gt;
			:wikitext(string.format(&lt;br /&gt;
				&amp;#039;Template &amp;lt;code&amp;gt;%s[[Template:%s|%s]]%s&amp;lt;/code&amp;gt; has been incorrectly substituted.&amp;#039;,&lt;br /&gt;
				mw.text.nowiki(&amp;#039;{{&amp;#039;), self.name, self.name, mw.text.nowiki(&amp;#039;}}&amp;#039;)&lt;br /&gt;
			))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	root:wikitext(frame:extensionTag{&lt;br /&gt;
		name = &amp;#039;templatestyles&amp;#039;,&lt;br /&gt;
		args = { src = self.base_templatestyles },&lt;br /&gt;
	})&lt;br /&gt;
	-- Add support for a single custom templatestyles sheet. Undocumented as&lt;br /&gt;
	-- need should be limited and many templates using mbox are substed; we&lt;br /&gt;
	-- don&amp;#039;t want to spread templatestyles sheets around to arbitrary places&lt;br /&gt;
	if self.templatestyles then&lt;br /&gt;
		root:wikitext(frame:extensionTag{&lt;br /&gt;
			name = &amp;#039;templatestyles&amp;#039;,&lt;br /&gt;
			args = { src = self.templatestyles },&lt;br /&gt;
		})&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Create the box.&lt;br /&gt;
	local mbox = root:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
	mbox:attr(&amp;#039;id&amp;#039;, self.id or nil)&lt;br /&gt;
	for i, class in ipairs(self.classes or {}) do&lt;br /&gt;
		mbox:addClass(class or nil)&lt;br /&gt;
	end&lt;br /&gt;
	mbox&lt;br /&gt;
		:cssText(self.style or nil)&lt;br /&gt;
&lt;br /&gt;
	if self.attrs then&lt;br /&gt;
		mbox:attr(self.attrs)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local flex_container&lt;br /&gt;
	if self.below then&lt;br /&gt;
		-- we need to wrap the flex components (`image(right)` and `text`) in their&lt;br /&gt;
		-- own container div to support the `below` parameter&lt;br /&gt;
		flex_container = mw.html.create(&amp;#039;div&amp;#039;)&lt;br /&gt;
		flex_container:addClass(&amp;#039;mbox-flex&amp;#039;)&lt;br /&gt;
	else&lt;br /&gt;
		-- the mbox itself is the parent, so we need no HTML flex_container&lt;br /&gt;
		flex_container = mw.html.create()&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add the left-hand image.&lt;br /&gt;
	if self.imageLeft then&lt;br /&gt;
		local imageLeftCell = flex_container:tag(&amp;#039;div&amp;#039;):addClass(&amp;#039;mbox-image&amp;#039;)&lt;br /&gt;
		imageLeftCell&lt;br /&gt;
			:addClass(self.imageLeftClass)&lt;br /&gt;
			:wikitext(self.imageLeft or nil)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add the text.&lt;br /&gt;
	local textCell = flex_container:tag(&amp;#039;div&amp;#039;):addClass(&amp;#039;mbox-text&amp;#039;)&lt;br /&gt;
	if self.useCollapsibleTextFields then&lt;br /&gt;
		-- The message box uses advanced text parameters that allow things to be&lt;br /&gt;
		-- collapsible. At the moment, only ambox uses this.&lt;br /&gt;
		textCell:cssText(self.textstyle or nil)&lt;br /&gt;
		local textCellDiv = textCell:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
		textCellDiv&lt;br /&gt;
			:addClass(&amp;#039;mbox-text-span&amp;#039;)&lt;br /&gt;
			:wikitext(self.issue or nil)&lt;br /&gt;
		if (self.talk or self.fix) then&lt;br /&gt;
			textCellDiv:tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
				:addClass(&amp;#039;hide-when-compact&amp;#039;)&lt;br /&gt;
				:wikitext(self.talk and (&amp;#039; &amp;#039; .. self.talk) or nil)&lt;br /&gt;
				:wikitext(self.fix and (&amp;#039; &amp;#039; .. self.fix) or nil)&lt;br /&gt;
		end&lt;br /&gt;
		textCellDiv:wikitext(self.date and (&amp;#039; &amp;#039; .. self.date) or nil)&lt;br /&gt;
		if self.info and not self.isSmall then&lt;br /&gt;
			textCellDiv&lt;br /&gt;
				:tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
				:addClass(&amp;#039;hide-when-compact&amp;#039;)&lt;br /&gt;
				:wikitext(self.info and (&amp;#039; &amp;#039; .. self.info) or nil)&lt;br /&gt;
		end&lt;br /&gt;
		if self.removalNotice then&lt;br /&gt;
			textCellDiv:tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
				:addClass(&amp;#039;hide-when-compact&amp;#039;)&lt;br /&gt;
				:tag(&amp;#039;i&amp;#039;)&lt;br /&gt;
					:wikitext(string.format(&amp;quot; (%s)&amp;quot;, self.removalNotice))&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		-- Default text formatting - anything goes.&lt;br /&gt;
		textCell&lt;br /&gt;
			:cssText(self.textstyle or nil)&lt;br /&gt;
			:wikitext(self.text or nil)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add the right-hand image.&lt;br /&gt;
	if self.imageRight then&lt;br /&gt;
		local imageRightCell = flex_container:tag(&amp;#039;div&amp;#039;):addClass(&amp;#039;mbox-imageright&amp;#039;)&lt;br /&gt;
		imageRightCell&lt;br /&gt;
			:addClass(self.imageRightClass)&lt;br /&gt;
			:wikitext(self.imageRight or nil)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	mbox:node(flex_container)&lt;br /&gt;
&lt;br /&gt;
	-- Add the below row.&lt;br /&gt;
	if self.below then&lt;br /&gt;
		mbox:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;mbox-text mbox-below&amp;#039;)&lt;br /&gt;
			:cssText(self.textstyle or nil)&lt;br /&gt;
			:wikitext(self.below or nil)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add error message for invalid type parameters.&lt;br /&gt;
	if self.invalidTypeError then&lt;br /&gt;
		root:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;mbox-invalid-type&amp;#039;)&lt;br /&gt;
			:wikitext(string.format(&lt;br /&gt;
				&amp;#039;This message box is using an invalid &amp;quot;type=%s&amp;quot; parameter and needs fixing.&amp;#039;,&lt;br /&gt;
				self.type or &amp;#039;&amp;#039;&lt;br /&gt;
			))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add categories.&lt;br /&gt;
	root:wikitext(self:renderCategories() or nil)&lt;br /&gt;
&lt;br /&gt;
	return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function MessageBox:export()&lt;br /&gt;
&lt;br /&gt;
	local root = mw.html.create()&lt;br /&gt;
&lt;br /&gt;
	-- Add the subst check error.&lt;br /&gt;
	if self.isSubstituted and self.name then&lt;br /&gt;
		root:tag(&amp;#039;b&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;error&amp;#039;)&lt;br /&gt;
			:wikitext(string.format(&lt;br /&gt;
				&amp;#039;Template &amp;lt;code&amp;gt;%s[[Template:%s|%s]]%s&amp;lt;/code&amp;gt; has been incorrectly substituted.&amp;#039;,&lt;br /&gt;
				mw.text.nowiki(&amp;#039;{{&amp;#039;), self.name, self.name, mw.text.nowiki(&amp;#039;}}&amp;#039;)&lt;br /&gt;
			))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local frame = mw.getCurrentFrame()&lt;br /&gt;
	root:wikitext(frame:extensionTag{&lt;br /&gt;
		name = &amp;#039;templatestyles&amp;#039;,&lt;br /&gt;
		args = { src = self.base_templatestyles },&lt;br /&gt;
	})&lt;br /&gt;
	-- Add support for a single custom templatestyles sheet. Undocumented as&lt;br /&gt;
	-- need should be limited and many templates using mbox are substed; we&lt;br /&gt;
	-- don&amp;#039;t want to spread templatestyles sheets around to arbitrary places&lt;br /&gt;
	if self.templatestyles then&lt;br /&gt;
		root:wikitext(frame:extensionTag{&lt;br /&gt;
			name = &amp;#039;templatestyles&amp;#039;,&lt;br /&gt;
			args = { src = self.templatestyles },&lt;br /&gt;
		})&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Create the box table.&lt;br /&gt;
	local boxTable = root:tag(&amp;#039;table&amp;#039;)&lt;br /&gt;
	boxTable:attr(&amp;#039;id&amp;#039;, self.id or nil)&lt;br /&gt;
	for i, class in ipairs(self.classes or {}) do&lt;br /&gt;
		boxTable:addClass(class or nil)&lt;br /&gt;
	end&lt;br /&gt;
	boxTable&lt;br /&gt;
		:cssText(self.style or nil)&lt;br /&gt;
		:attr(&amp;#039;role&amp;#039;, &amp;#039;presentation&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	if self.attrs then&lt;br /&gt;
		boxTable:attr(self.attrs)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add the left-hand image.&lt;br /&gt;
	local row = boxTable:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
	if self.imageLeft then&lt;br /&gt;
		local imageLeftCell = row:tag(&amp;#039;td&amp;#039;):addClass(&amp;#039;mbox-image&amp;#039;)&lt;br /&gt;
		if self.imageCellDiv then&lt;br /&gt;
			-- If we are using a div, redefine imageLeftCell so that the image&lt;br /&gt;
			-- is inside it. Divs use style=&amp;quot;width: 52px;&amp;quot;, which limits the&lt;br /&gt;
			-- image width to 52px. If any images in a div are wider than that,&lt;br /&gt;
			-- they may overlap with the text or cause other display problems.&lt;br /&gt;
			imageLeftCell = imageLeftCell:tag(&amp;#039;div&amp;#039;):addClass(&amp;#039;mbox-image-div&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
		imageLeftCell&lt;br /&gt;
			:addClass(self.imageLeftClass)&lt;br /&gt;
			:wikitext(self.imageLeft or nil)&lt;br /&gt;
	elseif self.imageEmptyCell then&lt;br /&gt;
		-- Some message boxes define an empty cell if no image is specified, and&lt;br /&gt;
		-- some don&amp;#039;t. The old template code in templates where empty cells are&lt;br /&gt;
		-- specified gives the following hint: &amp;quot;No image. Cell with some width&lt;br /&gt;
		-- or padding necessary for text cell to have 100% width.&amp;quot;&lt;br /&gt;
		row:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;mbox-empty-cell&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add the text.&lt;br /&gt;
	local textCell = row:tag(&amp;#039;td&amp;#039;):addClass(&amp;#039;mbox-text&amp;#039;)&lt;br /&gt;
	if self.useCollapsibleTextFields then&lt;br /&gt;
		-- The message box uses advanced text parameters that allow things to be&lt;br /&gt;
		-- collapsible. At the moment, only ambox uses this.&lt;br /&gt;
		textCell:cssText(self.textstyle or nil)&lt;br /&gt;
		local textCellDiv = textCell:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
		textCellDiv&lt;br /&gt;
			:addClass(&amp;#039;mbox-text-span&amp;#039;)&lt;br /&gt;
			:wikitext(self.issue or nil)&lt;br /&gt;
		if (self.talk or self.fix) then&lt;br /&gt;
			textCellDiv:tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
				:addClass(&amp;#039;hide-when-compact&amp;#039;)&lt;br /&gt;
				:wikitext(self.talk and (&amp;#039; &amp;#039; .. self.talk) or nil)&lt;br /&gt;
				:wikitext(self.fix and (&amp;#039; &amp;#039; .. self.fix) or nil)&lt;br /&gt;
		end&lt;br /&gt;
		textCellDiv:wikitext(self.date and (&amp;#039; &amp;#039; .. self.date) or nil)&lt;br /&gt;
		if self.info and not self.isSmall then&lt;br /&gt;
			textCellDiv&lt;br /&gt;
				:tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
				:addClass(&amp;#039;hide-when-compact&amp;#039;)&lt;br /&gt;
				:wikitext(self.info and (&amp;#039; &amp;#039; .. self.info) or nil)&lt;br /&gt;
		end&lt;br /&gt;
		if self.removalNotice then&lt;br /&gt;
			textCellDiv:tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
				:addClass(&amp;#039;hide-when-compact&amp;#039;)&lt;br /&gt;
				:tag(&amp;#039;i&amp;#039;)&lt;br /&gt;
					:wikitext(string.format(&amp;quot; (%s)&amp;quot;, self.removalNotice))&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		-- Default text formatting - anything goes.&lt;br /&gt;
		textCell&lt;br /&gt;
			:cssText(self.textstyle or nil)&lt;br /&gt;
			:wikitext(self.text or nil)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add the right-hand image.&lt;br /&gt;
	if self.imageRight then&lt;br /&gt;
		local imageRightCell = row:tag(&amp;#039;td&amp;#039;):addClass(&amp;#039;mbox-imageright&amp;#039;)&lt;br /&gt;
		if self.imageCellDiv then&lt;br /&gt;
			-- If we are using a div, redefine imageRightCell so that the image&lt;br /&gt;
			-- is inside it.&lt;br /&gt;
			imageRightCell = imageRightCell:tag(&amp;#039;div&amp;#039;):addClass(&amp;#039;mbox-image-div&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
		imageRightCell&lt;br /&gt;
			:addClass(self.imageRightClass)&lt;br /&gt;
			:wikitext(self.imageRight or nil)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add the below row.&lt;br /&gt;
	if self.below then&lt;br /&gt;
		boxTable:tag(&amp;#039;tr&amp;#039;)&lt;br /&gt;
			:tag(&amp;#039;td&amp;#039;)&lt;br /&gt;
				:attr(&amp;#039;colspan&amp;#039;, self.imageRight and &amp;#039;3&amp;#039; or &amp;#039;2&amp;#039;)&lt;br /&gt;
				:addClass(&amp;#039;mbox-text&amp;#039;)&lt;br /&gt;
				:cssText(self.textstyle or nil)&lt;br /&gt;
				:wikitext(self.below or nil)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add error message for invalid type parameters.&lt;br /&gt;
	if self.invalidTypeError then&lt;br /&gt;
		root:tag(&amp;#039;div&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;mbox-invalid-type&amp;#039;)&lt;br /&gt;
			:wikitext(string.format(&lt;br /&gt;
				&amp;#039;This message box is using an invalid &amp;quot;type=%s&amp;quot; parameter and needs fixing.&amp;#039;,&lt;br /&gt;
				self.type or &amp;#039;&amp;#039;&lt;br /&gt;
			))&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Add categories.&lt;br /&gt;
	root:wikitext(self:renderCategories() or nil)&lt;br /&gt;
&lt;br /&gt;
	return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
-- Exports&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
local p, mt = {}, {}&lt;br /&gt;
&lt;br /&gt;
function p._exportClasses()&lt;br /&gt;
	-- For testing.&lt;br /&gt;
	return {&lt;br /&gt;
		MessageBox = MessageBox&lt;br /&gt;
	}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.main(boxType, args, cfgTables)&lt;br /&gt;
	local box = MessageBox.new(boxType, args, cfgTables or mw.loadData(CONFIG_MODULE))&lt;br /&gt;
	box:setParameters()&lt;br /&gt;
	box:setCategories()&lt;br /&gt;
	-- DIV MIGRATION CONDITIONAL&lt;br /&gt;
	if box.cfg.div_structure then&lt;br /&gt;
		return box:exportDiv()&lt;br /&gt;
	end&lt;br /&gt;
	-- END DIV MIGRATION CONDITIONAL&lt;br /&gt;
	return box:export()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function mt.__index(t, k)&lt;br /&gt;
	return function (frame)&lt;br /&gt;
		if not getArgs then&lt;br /&gt;
			getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs&lt;br /&gt;
		end&lt;br /&gt;
		return t.main(k, getArgs(frame, {trim = false, removeBlanks = false}))&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return setmetatable(p, mt)&lt;/div&gt;</description>
			<pubDate>Wed, 22 Apr 2026 07:22:18 GMT</pubDate>
			<dc:creator>Evolution and evolvability</dc:creator>
			<comments>https://stardit.wikimedia.org.au/wiki/Module_talk:Message_box</comments>
		</item>
		<item>
			<title>Module:Message box/configuration</title>
			<link>https://stardit.wikimedia.org.au/w/index.php?title=Module:Message_box/configuration&amp;diff=1660&amp;oldid=0</link>
			<guid isPermaLink="false">https://stardit.wikimedia.org.au/w/index.php?title=Module:Message_box/configuration&amp;diff=1660&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/w/index.php?title=User:Evolution_and_evolvability&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Evolution and evolvability (page does not exist)&quot;&gt;&lt;bdi&gt;Evolution and evolvability&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/wiki/Module:Message_box/configuration&quot; title=&quot;Module:Message box/configuration&quot;&gt;Module:Message box/configuration&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--------------------------------------------------------------------------------&lt;br /&gt;
--                          Message box configuration                         --&lt;br /&gt;
--                                                                            --&lt;br /&gt;
-- This module contains configuration data for [[Module:Message box]].        --&lt;br /&gt;
--------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
return {&lt;br /&gt;
	ambox = {&lt;br /&gt;
		types = {&lt;br /&gt;
			speedy = {&lt;br /&gt;
				class = &amp;#039;ambox-speedy&amp;#039;,&lt;br /&gt;
				image = &amp;#039;Ambox warning pn.svg&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			delete = {&lt;br /&gt;
				class = &amp;#039;ambox-delete&amp;#039;,&lt;br /&gt;
				image = &amp;#039;Ambox warning pn.svg&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			content = {&lt;br /&gt;
				class = &amp;#039;ambox-content&amp;#039;,&lt;br /&gt;
				image = &amp;#039;Ambox important.svg&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			style = {&lt;br /&gt;
				class = &amp;#039;ambox-style&amp;#039;,&lt;br /&gt;
				image = &amp;#039;Edit-clear.svg&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			move = {&lt;br /&gt;
				class = &amp;#039;ambox-move&amp;#039;,&lt;br /&gt;
				image = &amp;#039;Merge-split-transwiki default.svg&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			protection = {&lt;br /&gt;
				class = &amp;#039;ambox-protection&amp;#039;,&lt;br /&gt;
				image = &amp;#039;Semi-protection-shackle-keyhole.svg&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			notice = {&lt;br /&gt;
				class = &amp;#039;ambox-notice&amp;#039;,&lt;br /&gt;
				image = &amp;#039;Information icon4.svg&amp;#039;&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		default                     = &amp;#039;notice&amp;#039;,&lt;br /&gt;
		allowBlankParams            = {&amp;#039;talk&amp;#039;, &amp;#039;sect&amp;#039;, &amp;#039;date&amp;#039;, &amp;#039;issue&amp;#039;, &amp;#039;fix&amp;#039;, &amp;#039;subst&amp;#039;, &amp;#039;hidden&amp;#039;},&lt;br /&gt;
		allowSmall                  = true,&lt;br /&gt;
		smallParam                  = &amp;#039;left&amp;#039;,&lt;br /&gt;
		smallClass                  = &amp;#039;mbox-small-left&amp;#039;,&lt;br /&gt;
		substCheck                  = true,&lt;br /&gt;
		classes                     = {&amp;#039;metadata&amp;#039;, &amp;#039;ambox&amp;#039;},&lt;br /&gt;
		imageEmptyCell              = true,&lt;br /&gt;
		imageCheckBlank             = true,&lt;br /&gt;
		imageSmallSize              = &amp;#039;20x20px&amp;#039;,&lt;br /&gt;
		imageCellDiv                = true,&lt;br /&gt;
		useCollapsibleTextFields    = true,&lt;br /&gt;
		imageRightNone              = true,&lt;br /&gt;
		sectionDefault              = &amp;#039;article&amp;#039;,&lt;br /&gt;
		allowMainspaceCategories    = true,&lt;br /&gt;
		templateCategory            = &amp;#039;Article message templates&amp;#039;,&lt;br /&gt;
	        templateCategoryRequireName = true,&lt;br /&gt;
		templateErrorCategory       = &amp;#039;Article message templates with missing parameters&amp;#039;,&lt;br /&gt;
		templateErrorParamsToCheck  = {&amp;#039;issue&amp;#039;, &amp;#039;fix&amp;#039;, &amp;#039;subst&amp;#039;},&lt;br /&gt;
		removalNotice               = &amp;#039;&amp;lt;small&amp;gt;[[Help:Maintenance template removal|Learn how and when to remove this message]]&amp;lt;/small&amp;gt;&amp;#039;,&lt;br /&gt;
		templatestyles              = &amp;#039;Module:Message box/ambox.css&amp;#039;&lt;br /&gt;
	},&lt;br /&gt;
	&lt;br /&gt;
	cmbox = {&lt;br /&gt;
		types = {&lt;br /&gt;
			speedy = {&lt;br /&gt;
				class = &amp;#039;cmbox-speedy&amp;#039;,&lt;br /&gt;
				image = &amp;#039;Ambox warning pn.svg&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			delete = {&lt;br /&gt;
				class = &amp;#039;cmbox-delete&amp;#039;,&lt;br /&gt;
				image = &amp;#039;Ambox warning pn.svg&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			content = {&lt;br /&gt;
				class = &amp;#039;cmbox-content&amp;#039;,&lt;br /&gt;
				image = &amp;#039;Ambox important.svg&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			style = {&lt;br /&gt;
				class = &amp;#039;cmbox-style&amp;#039;,&lt;br /&gt;
				image = &amp;#039;Edit-clear.svg&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			move = {&lt;br /&gt;
				class = &amp;#039;cmbox-move&amp;#039;,&lt;br /&gt;
				image = &amp;#039;Merge-split-transwiki default.svg&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			protection = {&lt;br /&gt;
				class = &amp;#039;cmbox-protection&amp;#039;,&lt;br /&gt;
				image = &amp;#039;Semi-protection-shackle-keyhole.svg&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			notice = {&lt;br /&gt;
				class = &amp;#039;cmbox-notice&amp;#039;,&lt;br /&gt;
				image = &amp;#039;Information icon4.svg&amp;#039;&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		default              = &amp;#039;notice&amp;#039;,&lt;br /&gt;
		showInvalidTypeError = true,&lt;br /&gt;
		classes              = {&amp;#039;cmbox&amp;#039;},&lt;br /&gt;
		imageEmptyCell       = true,&lt;br /&gt;
		templatestyles       = &amp;#039;Module:Message box/cmbox.css&amp;#039;,&lt;br /&gt;
		div_structure        = true,&lt;br /&gt;
	},&lt;br /&gt;
	&lt;br /&gt;
	fmbox = {&lt;br /&gt;
		types = {&lt;br /&gt;
			warning = {&lt;br /&gt;
				class = &amp;#039;fmbox-warning&amp;#039;,&lt;br /&gt;
				image = &amp;#039;Ambox warning pn.svg&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			editnotice = {&lt;br /&gt;
				class = &amp;#039;fmbox-editnotice&amp;#039;,&lt;br /&gt;
				image = &amp;#039;Information icon4.svg&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			system = {&lt;br /&gt;
				class = &amp;#039;fmbox-system&amp;#039;,&lt;br /&gt;
				image = &amp;#039;Information icon4.svg&amp;#039;&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		default              = &amp;#039;system&amp;#039;,&lt;br /&gt;
		showInvalidTypeError = true,&lt;br /&gt;
		classes              = {&amp;#039;fmbox&amp;#039;},&lt;br /&gt;
		imageEmptyCell       = false,&lt;br /&gt;
		imageRightNone       = false,&lt;br /&gt;
		templatestyles       = &amp;#039;Module:Message box/fmbox.css&amp;#039;,&lt;br /&gt;
		div_structure        = true,&lt;br /&gt;
	},&lt;br /&gt;
	&lt;br /&gt;
	imbox = {&lt;br /&gt;
		types = {&lt;br /&gt;
			speedy = {&lt;br /&gt;
				class = &amp;#039;imbox-speedy&amp;#039;,&lt;br /&gt;
				image = &amp;#039;Ambox warning pn.svg&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			delete = {&lt;br /&gt;
				class = &amp;#039;imbox-delete&amp;#039;,&lt;br /&gt;
				image = &amp;#039;Ambox warning pn.svg&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			content = {&lt;br /&gt;
				class = &amp;#039;imbox-content&amp;#039;,&lt;br /&gt;
				image = &amp;#039;Ambox important.svg&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			style = {&lt;br /&gt;
				class = &amp;#039;imbox-style&amp;#039;,&lt;br /&gt;
				image = &amp;#039;Edit-clear.svg&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			move = {&lt;br /&gt;
				class = &amp;#039;imbox-move&amp;#039;,&lt;br /&gt;
				image = &amp;#039;Merge-split-transwiki default.svg&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			protection = {&lt;br /&gt;
				class = &amp;#039;imbox-protection&amp;#039;,&lt;br /&gt;
				image = &amp;#039;Semi-protection-shackle-keyhole.svg&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			license = {&lt;br /&gt;
				class = &amp;#039;imbox-license licensetpl&amp;#039;,&lt;br /&gt;
				image = &amp;#039;Imbox-license.svg&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			[&amp;quot;license-related&amp;quot;] = {&lt;br /&gt;
				class = &amp;#039;imbox-license&amp;#039;,&lt;br /&gt;
				image = &amp;#039;Imbox-license.svg&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			featured = {&lt;br /&gt;
				class = &amp;#039;imbox-featured&amp;#039;,&lt;br /&gt;
				image = &amp;#039;Cscr-featured.svg&amp;#039;,&lt;br /&gt;
				imageNeedsLink = true&lt;br /&gt;
			},&lt;br /&gt;
			notice = {&lt;br /&gt;
				class = &amp;#039;imbox-notice&amp;#039;,&lt;br /&gt;
				image = &amp;#039;Information icon4.svg&amp;#039;&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		default              = &amp;#039;notice&amp;#039;,&lt;br /&gt;
		showInvalidTypeError = true,&lt;br /&gt;
		classes              = {&amp;#039;imbox&amp;#039;},&lt;br /&gt;
		imageEmptyCell       = true,&lt;br /&gt;
		below                = true,&lt;br /&gt;
		templateCategory     = &amp;#039;File message boxes&amp;#039;,&lt;br /&gt;
		templatestyles       = &amp;#039;Module:Message box/imbox.css&amp;#039;,&lt;br /&gt;
		div_structure        = true,&lt;br /&gt;
	},&lt;br /&gt;
	&lt;br /&gt;
	ombox = {&lt;br /&gt;
		types = {&lt;br /&gt;
			speedy = {&lt;br /&gt;
				class = &amp;#039;ombox-speedy&amp;#039;,&lt;br /&gt;
				image = &amp;#039;Ambox warning pn.svg&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			delete = {&lt;br /&gt;
				class = &amp;#039;ombox-delete&amp;#039;,&lt;br /&gt;
				image = &amp;#039;Ambox warning pn.svg&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			content = {&lt;br /&gt;
				class = &amp;#039;ombox-content&amp;#039;,&lt;br /&gt;
				image = &amp;#039;Ambox important.svg&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			style = {&lt;br /&gt;
				class = &amp;#039;ombox-style&amp;#039;,&lt;br /&gt;
				image = &amp;#039;Edit-clear.svg&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			move = {&lt;br /&gt;
				class = &amp;#039;ombox-move&amp;#039;,&lt;br /&gt;
				image = &amp;#039;Merge-split-transwiki default.svg&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			protection = {&lt;br /&gt;
				class = &amp;#039;ombox-protection&amp;#039;,&lt;br /&gt;
				image = &amp;#039;Semi-protection-shackle-keyhole.svg&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			notice = {&lt;br /&gt;
				class = &amp;#039;ombox-notice&amp;#039;,&lt;br /&gt;
				image = &amp;#039;Information icon4.svg&amp;#039;&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		default              = &amp;#039;notice&amp;#039;,&lt;br /&gt;
		showInvalidTypeError = true,&lt;br /&gt;
		classes              = {&amp;#039;ombox&amp;#039;},&lt;br /&gt;
		allowSmall           = true,&lt;br /&gt;
		imageEmptyCell       = true,&lt;br /&gt;
		imageRightNone       = true,&lt;br /&gt;
		templatestyles       = &amp;#039;Module:Message box/ombox.css&amp;#039;&lt;br /&gt;
	},&lt;br /&gt;
	&lt;br /&gt;
	tmbox = {&lt;br /&gt;
		types = {&lt;br /&gt;
			speedy = {&lt;br /&gt;
				class = &amp;#039;tmbox-speedy&amp;#039;,&lt;br /&gt;
				image = &amp;#039;Ambox warning pn.svg&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			delete = {&lt;br /&gt;
				class = &amp;#039;tmbox-delete&amp;#039;,&lt;br /&gt;
				image = &amp;#039;Ambox warning pn.svg&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			content = {&lt;br /&gt;
				class = &amp;#039;tmbox-content&amp;#039;,&lt;br /&gt;
				image = &amp;#039;Ambox important.svg&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			style = {&lt;br /&gt;
				class = &amp;#039;tmbox-style&amp;#039;,&lt;br /&gt;
				image = &amp;#039;Edit-clear.svg&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			move = {&lt;br /&gt;
				class = &amp;#039;tmbox-move&amp;#039;,&lt;br /&gt;
				image = &amp;#039;Merge-split-transwiki default.svg&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			protection = {&lt;br /&gt;
				class = &amp;#039;tmbox-protection&amp;#039;,&lt;br /&gt;
				image = &amp;#039;Semi-protection-shackle-keyhole.svg&amp;#039;&lt;br /&gt;
			},&lt;br /&gt;
			notice = {&lt;br /&gt;
				class = &amp;#039;tmbox-notice&amp;#039;,&lt;br /&gt;
				image = &amp;#039;Information icon4.svg&amp;#039;&lt;br /&gt;
			}&lt;br /&gt;
		},&lt;br /&gt;
		default              = &amp;#039;notice&amp;#039;,&lt;br /&gt;
		showInvalidTypeError = true,&lt;br /&gt;
		classes              = {&amp;#039;tmbox&amp;#039;},&lt;br /&gt;
		allowSmall           = true,&lt;br /&gt;
		imageRightNone       = true,&lt;br /&gt;
		imageEmptyCell       = true,&lt;br /&gt;
		templateCategory     = &amp;#039;Talk message boxes&amp;#039;,&lt;br /&gt;
		templatestyles       = &amp;#039;Module:Message box/tmbox.css&amp;#039;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</description>
			<pubDate>Wed, 22 Apr 2026 07:22:18 GMT</pubDate>
			<dc:creator>Evolution and evolvability</dc:creator>
			<comments>https://stardit.wikimedia.org.au/wiki/Module_talk:Message_box/configuration</comments>
		</item>
		<item>
			<title>Module:Redirect</title>
			<link>https://stardit.wikimedia.org.au/w/index.php?title=Module:Redirect&amp;diff=1662&amp;oldid=0</link>
			<guid isPermaLink="false">https://stardit.wikimedia.org.au/w/index.php?title=Module:Redirect&amp;diff=1662&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/w/index.php?title=User:Evolution_and_evolvability&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Evolution and evolvability (page does not exist)&quot;&gt;&lt;bdi&gt;Evolution and evolvability&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/wiki/Module:Redirect&quot; title=&quot;Module:Redirect&quot;&gt;Module:Redirect&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- This module provides functions for getting the target of a redirect page.&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Gets a mw.title object, using pcall to avoid generating script errors if we&lt;br /&gt;
-- are over the expensive function count limit (among other possible causes).&lt;br /&gt;
local function getTitle(...)&lt;br /&gt;
	local success, titleObj = pcall(mw.title.new, ...)&lt;br /&gt;
	if success then&lt;br /&gt;
		return titleObj&lt;br /&gt;
	else&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Gets the name of a page that a redirect leads to, or nil if it isn&amp;#039;t a&lt;br /&gt;
-- redirect.&lt;br /&gt;
function p.getTargetFromText(text)&lt;br /&gt;
	local target = string.match(&lt;br /&gt;
		text,&lt;br /&gt;
		&amp;quot;^%s*#[Rr][Ee][Dd][Ii][Rr][Ee][Cc][Tt]%s*:?%s*%[%[([^%[%]|]-)%]%]&amp;quot;&lt;br /&gt;
	) or string.match(&lt;br /&gt;
		text,&lt;br /&gt;
		&amp;quot;^%s*#[Rr][Ee][Dd][Ii][Rr][Ee][Cc][Tt]%s*:?%s*%[%[([^%[%]|]-)|[^%[%]]-%]%]&amp;quot;&lt;br /&gt;
	)&lt;br /&gt;
	return target and mw.uri.decode(target, &amp;#039;PATH&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Gets the target of a redirect. If the page specified is not a redirect,&lt;br /&gt;
-- returns nil.&lt;br /&gt;
function p.getTarget(page, fulltext)&lt;br /&gt;
	-- Get the title object. Both page names and title objects are allowed&lt;br /&gt;
	-- as input.&lt;br /&gt;
	local titleObj&lt;br /&gt;
	if type(page) == &amp;#039;string&amp;#039; or type(page) == &amp;#039;number&amp;#039; then&lt;br /&gt;
		titleObj = getTitle(page)&lt;br /&gt;
	elseif type(page) == &amp;#039;table&amp;#039; and type(page.getContent) == &amp;#039;function&amp;#039; then&lt;br /&gt;
		titleObj = page&lt;br /&gt;
	else&lt;br /&gt;
		error(string.format(&lt;br /&gt;
			&amp;quot;bad argument #1 to &amp;#039;getTarget&amp;#039;&amp;quot;&lt;br /&gt;
				.. &amp;quot; (string, number, or title object expected, got %s)&amp;quot;,&lt;br /&gt;
			type(page)&lt;br /&gt;
		), 2)&lt;br /&gt;
	end&lt;br /&gt;
	if not titleObj then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	local targetTitle = titleObj.redirectTarget&lt;br /&gt;
	if targetTitle then&lt;br /&gt;
		if fulltext then&lt;br /&gt;
			return targetTitle.fullText&lt;br /&gt;
		else&lt;br /&gt;
			return targetTitle.prefixedText&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
-- Given a single page name determines what page it redirects to and returns the&lt;br /&gt;
-- target page name, or the passed page name when not a redirect. The passed&lt;br /&gt;
-- page name can be given as plain text or as a page link.&lt;br /&gt;
--&lt;br /&gt;
-- Returns page name as plain text, or when the bracket parameter is given, as a&lt;br /&gt;
-- page link. Returns an error message when page does not exist or the redirect&lt;br /&gt;
-- target cannot be determined for some reason.&lt;br /&gt;
--]]&lt;br /&gt;
function p.luaMain(rname, bracket, fulltext)&lt;br /&gt;
	if type(rname) ~= &amp;quot;string&amp;quot; or not rname:find(&amp;quot;%S&amp;quot;) then&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
	bracket = bracket and &amp;quot;[[%s]]&amp;quot; or &amp;quot;%s&amp;quot;&lt;br /&gt;
	rname = rname:match(&amp;quot;%[%[(.+)%]%]&amp;quot;) or rname&lt;br /&gt;
	local target = p.getTarget(rname, fulltext)&lt;br /&gt;
	local ret = target or rname&lt;br /&gt;
	ret = getTitle(ret)&lt;br /&gt;
	if ret then&lt;br /&gt;
		if fulltext then&lt;br /&gt;
			ret = ret.fullText&lt;br /&gt;
		else&lt;br /&gt;
			ret = ret.prefixedText&lt;br /&gt;
		end&lt;br /&gt;
		return bracket:format(ret)&lt;br /&gt;
	else&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Provides access to the luaMain function from wikitext.&lt;br /&gt;
function p.main(frame)&lt;br /&gt;
	local args = require(&amp;#039;Module:Arguments&amp;#039;).getArgs(frame, {frameOnly = true})&lt;br /&gt;
	return p.luaMain(args[1], args.bracket, args.fulltext) or &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Returns true if the specified page is a redirect, and false otherwise.&lt;br /&gt;
function p.luaIsRedirect(page)&lt;br /&gt;
	local titleObj = getTitle(page)&lt;br /&gt;
	if not titleObj then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	if titleObj.isRedirect then&lt;br /&gt;
		return true&lt;br /&gt;
	else&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Provides access to the luaIsRedirect function from wikitext, returning &amp;#039;yes&amp;#039;&lt;br /&gt;
-- if the specified page is a redirect, and the blank string otherwise.&lt;br /&gt;
function p.isRedirect(frame)&lt;br /&gt;
	local args = require(&amp;#039;Module:Arguments&amp;#039;).getArgs(frame, {frameOnly = true})&lt;br /&gt;
	if p.luaIsRedirect(args[1]) then&lt;br /&gt;
		return &amp;#039;yes&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</description>
			<pubDate>Wed, 22 Apr 2026 07:22:18 GMT</pubDate>
			<dc:creator>Evolution and evolvability</dc:creator>
			<comments>https://stardit.wikimedia.org.au/wiki/Module_talk:Redirect</comments>
		</item>
		<item>
			<title>Module:Ifsubst</title>
			<link>https://stardit.wikimedia.org.au/w/index.php?title=Module:Ifsubst&amp;diff=1664&amp;oldid=0</link>
			<guid isPermaLink="false">https://stardit.wikimedia.org.au/w/index.php?title=Module:Ifsubst&amp;diff=1664&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/w/index.php?title=User:Evolution_and_evolvability&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Evolution and evolvability (page does not exist)&quot;&gt;&lt;bdi&gt;Evolution and evolvability&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/wiki/Module:Ifsubst&quot; title=&quot;Module:Ifsubst&quot;&gt;Module:Ifsubst&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{ safesubst:&amp;lt;noinclude/&amp;gt;#if:{{{demo|}}}&lt;br /&gt;
|{{ safesubst:&amp;lt;noinclude/&amp;gt;#ifeq:{{{demo}}} |no&lt;br /&gt;
 |{{{no|{{{2|}}}}}}&lt;br /&gt;
 |{{{yes|{{{1|}}}}}}&lt;br /&gt;
}}&lt;br /&gt;
|{{ safesubst:&amp;lt;noinclude/&amp;gt;#ifeq:{{ safesubst:&amp;lt;noinclude/&amp;gt;NAMESPACE}}|{{NAMESPACE}}&lt;br /&gt;
 |{{{no|{{{2|}}}}}}&lt;br /&gt;
 |{{{yes|{{{1|}}}}}}&lt;br /&gt;
}}}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Documentation}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</description>
			<pubDate>Wed, 22 Apr 2026 07:22:18 GMT</pubDate>
			<dc:creator>Evolution and evolvability</dc:creator>
			<comments>https://stardit.wikimedia.org.au/wiki/Module_talk:Ifsubst</comments>
		</item>
		<item>
			<title>Module:Citation/CS1</title>
			<link>https://stardit.wikimedia.org.au/w/index.php?title=Module:Citation/CS1&amp;diff=1666&amp;oldid=0</link>
			<guid isPermaLink="false">https://stardit.wikimedia.org.au/w/index.php?title=Module:Citation/CS1&amp;diff=1666&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/w/index.php?title=User:Evolution_and_evolvability&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Evolution and evolvability (page does not exist)&quot;&gt;&lt;bdi&gt;Evolution and evolvability&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/wiki/Module:Citation/CS1&quot; title=&quot;Module:Citation/CS1&quot;&gt;Module:Citation/CS1&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;a href=&quot;https://stardit.wikimedia.org.au/w/index.php?title=Module:Citation/CS1&amp;amp;diff=1666&quot;&gt;Show changes&lt;/a&gt;</description>
			<pubDate>Wed, 22 Apr 2026 07:22:18 GMT</pubDate>
			<dc:creator>Evolution and evolvability</dc:creator>
			<comments>https://stardit.wikimedia.org.au/wiki/Module_talk:Citation/CS1</comments>
		</item>
		<item>
			<title>Module:Citation/CS1/Configuration</title>
			<link>https://stardit.wikimedia.org.au/w/index.php?title=Module:Citation/CS1/Configuration&amp;diff=1668&amp;oldid=0</link>
			<guid isPermaLink="false">https://stardit.wikimedia.org.au/w/index.php?title=Module:Citation/CS1/Configuration&amp;diff=1668&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/w/index.php?title=User:Evolution_and_evolvability&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Evolution and evolvability (page does not exist)&quot;&gt;&lt;bdi&gt;Evolution and evolvability&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/wiki/Module:Citation/CS1/Configuration&quot; title=&quot;Module:Citation/CS1/Configuration&quot;&gt;Module:Citation/CS1/Configuration&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;a href=&quot;https://stardit.wikimedia.org.au/w/index.php?title=Module:Citation/CS1/Configuration&amp;amp;diff=1668&quot;&gt;Show changes&lt;/a&gt;</description>
			<pubDate>Wed, 22 Apr 2026 07:22:18 GMT</pubDate>
			<dc:creator>Evolution and evolvability</dc:creator>
			<comments>https://stardit.wikimedia.org.au/wiki/Module_talk:Citation/CS1/Configuration</comments>
		</item>
		<item>
			<title>Module:Citation/CS1/Whitelist</title>
			<link>https://stardit.wikimedia.org.au/w/index.php?title=Module:Citation/CS1/Whitelist&amp;diff=1670&amp;oldid=0</link>
			<guid isPermaLink="false">https://stardit.wikimedia.org.au/w/index.php?title=Module:Citation/CS1/Whitelist&amp;diff=1670&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/w/index.php?title=User:Evolution_and_evolvability&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Evolution and evolvability (page does not exist)&quot;&gt;&lt;bdi&gt;Evolution and evolvability&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/wiki/Module:Citation/CS1/Whitelist&quot; title=&quot;Module:Citation/CS1/Whitelist&quot;&gt;Module:Citation/CS1/Whitelist&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--[[--------------------------&amp;lt; S U P P O R T E D   P A R A M E T E R S &amp;gt;--------------------------------------&lt;br /&gt;
&lt;br /&gt;
Because a steady-state signal conveys no useful information, whitelist.basic_arguments[] list items can have three values:&lt;br /&gt;
	true - these parameters are valid and supported parameters&lt;br /&gt;
	false - these parameters are deprecated but still supported&lt;br /&gt;
	tracked - these parameters are valid and supported parameters tracked in an eponymous properties category&lt;br /&gt;
	nil - these parameters are no longer supported. remove entirely&lt;br /&gt;
	&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local basic_arguments_t = {&lt;br /&gt;
	[&amp;#039;accessdate&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;access-date&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;agency&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;archivedate&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;archive-date&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;archive-format&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;archiveurl&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;archive-url&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;article&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;article-format&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;article-number&amp;#039;] = true,													-- {{cite journal}}, {{cite conference}}; {{citation}} when |journal= has a value&lt;br /&gt;
	[&amp;#039;article-url&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;article-url-access&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;arxiv&amp;#039;] = true,															-- cite arxiv; here because allowed in cite ... as identifier&lt;br /&gt;
	[&amp;#039;asin&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;ASIN&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;asin-tld&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;at&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;author&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;author-first&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;author-given&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;author-last&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;author-surname&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;authorlink&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;author-link&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;author-mask&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;bibcode&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;bibcode-access&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;biorxiv&amp;#039;] = true,															-- cite biorxiv; here because allowed in cite ... as identifier&lt;br /&gt;
	[&amp;#039;chapter&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;chapter-format&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;chapter-url&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;chapter-url-access&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;citeseerx&amp;#039;] = true,														-- cite citeseerx; here because allowed in cite ... as identifier&lt;br /&gt;
	[&amp;#039;collaboration&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;contribution&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;contribution-format&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;contribution-url&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;contribution-url-access&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;contributor&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;contributor-first&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;contributor-given&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;contributor-last&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;contributor-surname&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;contributor-link&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;contributor-mask&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;date&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;department&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;df&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;dictionary&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;display-authors&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;display-contributors&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;display-editors&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;display-interviewers&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;display-subjects&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;display-translators&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;doi&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;DOI&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;doi-access&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;doi-broken-date&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;edition&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;editor&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;editor-first&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;editor-given&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;editor-last&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;editor-surname&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;editor-link&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;editor-mask&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;eissn&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;EISSN&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;encyclopaedia&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;encyclopedia&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;entry&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;entry-format&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;entry-url&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;entry-url-access&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;eprint&amp;#039;] = true,															-- cite arxiv; here because allowed in cite ... as identifier&lt;br /&gt;
	[&amp;#039;first&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;format&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;given&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;hdl&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;HDL&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;hdl-access&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;host&amp;#039;] = true,															-- unique to certain templates?&lt;br /&gt;
	[&amp;#039;id&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;ID&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;institution&amp;#039;] = true,														-- constrain to cite thesis?&lt;br /&gt;
	[&amp;#039;interviewer&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;interviewer-first&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;interviewer-given&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;interviewer-last&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;interviewer-surname&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;interviewer-link&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;interviewer-mask&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;isbn&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;ISBN&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;ismn&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;ISMN&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;issn&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;ISSN&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;issue&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;jfm&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;JFM&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;journal&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;jstor&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;JSTOR&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;jstor-access&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;lang&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;language&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;last&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;lccn&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;LCCN&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;location&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;magazine&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;medium&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;medrxiv&amp;#039;] = true,															-- cite medrxiv; here because allowed in cite ... as identifier&lt;br /&gt;
	[&amp;#039;minutes&amp;#039;] = true,															-- constrain to cite AV media and podcast?&lt;br /&gt;
	[&amp;#039;mode&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;mr&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;MR&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;name-list-style&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;newspaper&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;no-pp&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;no-tracking&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;number&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;oclc&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;OCLC&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;ol&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;OL&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;ol-access&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;orig-date&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;origyear&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;orig-year&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;osti&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;OSTI&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;osti-access&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;others&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;p&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;page&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;pages&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;periodical&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;place&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;pmc&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;PMC&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;pmc-embargo-date&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;pmid&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;PMID&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;postscript&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;pp&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;publication-date&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;publication-place&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;publisher&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;quotation&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;quote&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;quote-page&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;quote-pages&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;ref&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;rfc&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;RFC&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;sbn&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;SBN&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;scale&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;script-article&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;script-chapter&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;script-contribution&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;script-encyclopaedia&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;script-encyclopedia&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;script-entry&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;script-journal&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;script-magazine&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;script-newspaper&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;script-periodical&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;script-quote&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;script-section&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;script-title&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;script-website&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;script-work&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;section&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;section-format&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;section-url&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;section-url-access&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;series&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;ssrn&amp;#039;] = true,															-- cite ssrn; these three here because allowed in cite ... as identifier&lt;br /&gt;
	[&amp;#039;SSRN&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;ssrn-access&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;subject&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;subject-first&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;subject-given&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;subject-last&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;subject-link&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;subject-mask&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;subject-surname&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;surname&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;s2cid&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;S2CID&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;s2cid-access&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;template-doc-demo&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;time&amp;#039;] = true,															-- constrain to cite av media and podcast?&lt;br /&gt;
	[&amp;#039;time-caption&amp;#039;] = true,													-- constrain to cite av media and podcast?&lt;br /&gt;
	[&amp;#039;title&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;title-link&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;title-note&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;translator&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;translator-first&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;translator-given&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;translator-last&amp;#039;] = true,	&lt;br /&gt;
	[&amp;#039;translator-surname&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;translator-link&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;translator-mask&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;trans-article&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;trans-chapter&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;trans-contribution&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;trans-encyclopaedia&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;trans-encyclopedia&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;trans-entry&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;trans-journal&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;trans-magazine&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;trans-newspaper&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;trans-periodical&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;trans-quote&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;trans-section&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;trans-title&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;trans-website&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;trans-work&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;type&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;url&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;URL&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;url-access&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;url-status&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;vauthors&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;veditors&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;version&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;via&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;volume&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;website&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;work&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;year&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;zbl&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;ZBL&amp;#039;] = true,&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
local numbered_arguments_t = {&lt;br /&gt;
	[&amp;#039;author#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;author-first#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;author#-first&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;author-given#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;author#-given&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;author-last#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;author#-last&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;author-surname#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;author#-surname&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;author-link#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;author#-link&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;authorlink#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;author#link&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;author-mask#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;author#-mask&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;contributor#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;contributor-first#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;contributor#-first&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;contributor-given#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;contributor#-given&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;contributor-last#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;contributor#-last&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;contributor-surname#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;contributor#-surname&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;contributor-link#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;contributor#-link&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;contributor-mask#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;contributor#-mask&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;editor#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;editor-first#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;editor#-first&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;editor-given#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;editor#-given&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;editor-last#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;editor#-last&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;editor-surname#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;editor#-surname&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;editor-link#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;editor#-link&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;editor-mask#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;editor#-mask&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;first#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;given#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;host#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;interviewer#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;interviewer-first#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;interviewer#-first&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;interviewer-given#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;interviewer#-given&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;interviewer-last#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;interviewer#-last&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;interviewer-surname#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;interviewer#-surname&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;interviewer-link#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;interviewer#-link&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;interviewer-mask#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;interviewer#-mask&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;last#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;subject#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;subject-first#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;subject#-first&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;subject-given#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;subject#-given&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;subject-last#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;subject#-last&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;subject-link#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;subject#-link&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;subject-mask#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;subject#-mask&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;subject-surname#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;subject#-surname&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;surname#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;translator#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;translator-first#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;translator#-first&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;translator-given#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;translator#-given&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;translator-last#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;translator#-last&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;translator-surname#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;translator#-surname&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;translator-link#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;translator#-link&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;translator-mask#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;translator#-mask&amp;#039;] = true,&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; P R E P R I N T   S U P P O R T E D   P A R A M E T E R S &amp;gt;--------------------&lt;br /&gt;
&lt;br /&gt;
Cite arXiv, cite biorxiv, cite citeseerx, cite medrxiv, and cite ssrn are preprint templates that use the limited&lt;br /&gt;
set of parameters defined in the limited_basic_arguments and limited_numbered_arguments tables.  Those lists are&lt;br /&gt;
supplemented with a template-specific list of parameters that are required by the particular template and may be&lt;br /&gt;
exclusive to one of the preprint templates.  Some of these parameters may also be available to the general cs1|2&lt;br /&gt;
templates.&lt;br /&gt;
&lt;br /&gt;
Same conventions for true/false/tracked/nil as above.&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local preprint_arguments_t = {&lt;br /&gt;
	arxiv = {&lt;br /&gt;
		[&amp;#039;arxiv&amp;#039;] = true,														-- cite arxiv and arxiv identifiers&lt;br /&gt;
		[&amp;#039;class&amp;#039;] = true,&lt;br /&gt;
		[&amp;#039;eprint&amp;#039;] = true,														-- cite arxiv and arxiv identifiers&lt;br /&gt;
		},&lt;br /&gt;
	biorxiv = {&lt;br /&gt;
		[&amp;#039;biorxiv&amp;#039;] = true,&lt;br /&gt;
		},&lt;br /&gt;
	citeseerx = {&lt;br /&gt;
		[&amp;#039;citeseerx&amp;#039;] = true,&lt;br /&gt;
		},&lt;br /&gt;
	medrxiv = {&lt;br /&gt;
		[&amp;#039;medrxiv&amp;#039;] = true,&lt;br /&gt;
		},&lt;br /&gt;
	ssrn = {&lt;br /&gt;
		[&amp;#039;ssrn&amp;#039;] = true,&lt;br /&gt;
		[&amp;#039;SSRN&amp;#039;] = true,&lt;br /&gt;
		[&amp;#039;ssrn-access&amp;#039;] = true,&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; L I M I T E D   S U P P O R T E D   P A R A M E T E R S &amp;gt;----------------------&lt;br /&gt;
&lt;br /&gt;
cite arxiv, cite biorxiv, cite citeseerx, cite medrxiv, and cite ssrn templates are preprint templates so are&lt;br /&gt;
allowed only a limited subset of parameters allowed to all other cs1|2 templates.  The limited subset is defined&lt;br /&gt;
here.&lt;br /&gt;
&lt;br /&gt;
This list of parameters also used by {{cite document}}&lt;br /&gt;
&lt;br /&gt;
Same conventions for true/false/tracked/nil as above.&lt;br /&gt;
	&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local limited_basic_arguments_t = {&lt;br /&gt;
	[&amp;#039;at&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;author&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;author-first&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;author-given&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;author-last&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;author-surname&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;author-link&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;authorlink&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;author-mask&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;collaboration&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;date&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;df&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;display-authors&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;first&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;given&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;language&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;last&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;mode&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;name-list-style&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;no-tracking&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;p&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;page&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;pages&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;postscript&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;pp&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;quotation&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;quote&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;ref&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;surname&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;template-doc-demo&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;title&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;trans-title&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;vauthors&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;year&amp;#039;] = true,&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
local limited_numbered_arguments_t = {&lt;br /&gt;
	[&amp;#039;author#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;author-first#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;author#-first&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;author-given#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;author#-given&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;author-last#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;author#-last&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;author-surname#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;author#-surname&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;author-link#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;author#-link&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;authorlink#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;author#link&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;author-mask#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;author#-mask&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;first#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;given#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;last#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;surname#&amp;#039;] = true,&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; U N I Q U E _ A R G U M E N T S &amp;gt;----------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Some templates have unique parameters.  Those templates and their unique parameters are listed here. Keys in this&lt;br /&gt;
table are the template&amp;#039;s CitationClass parameter value&lt;br /&gt;
&lt;br /&gt;
Same conventions for true/false/tracked/nil as above.&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local unique_arguments_t = {&lt;br /&gt;
	[&amp;#039;audio-visual&amp;#039;] = {&lt;br /&gt;
		[&amp;#039;people&amp;#039;] = true,&lt;br /&gt;
		[&amp;#039;transcript&amp;#039;] = true,&lt;br /&gt;
		[&amp;#039;transcript-format&amp;#039;] = true,&lt;br /&gt;
		[&amp;#039;transcript-url&amp;#039;] = true,&lt;br /&gt;
		},&lt;br /&gt;
	conference = {&lt;br /&gt;
		[&amp;#039;book-title&amp;#039;] = true,&lt;br /&gt;
		[&amp;#039;conference&amp;#039;] = true,&lt;br /&gt;
		[&amp;#039;conference-format&amp;#039;] = true,&lt;br /&gt;
		[&amp;#039;conference-url&amp;#039;] = true,&lt;br /&gt;
		[&amp;#039;event&amp;#039;] = true,&lt;br /&gt;
		},&lt;br /&gt;
	episode = {&lt;br /&gt;
		[&amp;#039;airdate&amp;#039;] = true,&lt;br /&gt;
		[&amp;#039;air-date&amp;#039;] = true,&lt;br /&gt;
		[&amp;#039;credits&amp;#039;] = true,&lt;br /&gt;
		[&amp;#039;episode-link&amp;#039;] = true,												-- alias of |title-link=&lt;br /&gt;
		[&amp;#039;network&amp;#039;] = true,&lt;br /&gt;
		[&amp;#039;people&amp;#039;] = true,&lt;br /&gt;
		[&amp;#039;season&amp;#039;] = true,&lt;br /&gt;
		[&amp;#039;series-link&amp;#039;] = true,&lt;br /&gt;
		[&amp;#039;series-no&amp;#039;] = true,&lt;br /&gt;
		[&amp;#039;series-number&amp;#039;] = true,&lt;br /&gt;
		[&amp;#039;station&amp;#039;] = true,&lt;br /&gt;
		[&amp;#039;transcript&amp;#039;] = true,&lt;br /&gt;
		[&amp;#039;transcript-format&amp;#039;] = true,&lt;br /&gt;
		[&amp;#039;transcript-url&amp;#039;] = true,&lt;br /&gt;
		},&lt;br /&gt;
	mailinglist = {&lt;br /&gt;
		[&amp;#039;mailing-list&amp;#039;] = true,&lt;br /&gt;
		},&lt;br /&gt;
	map = {&lt;br /&gt;
		[&amp;#039;cartography&amp;#039;] = true,&lt;br /&gt;
		[&amp;#039;inset&amp;#039;] = true,&lt;br /&gt;
		[&amp;#039;map&amp;#039;] = true,&lt;br /&gt;
		[&amp;#039;map-format&amp;#039;] = true,&lt;br /&gt;
		[&amp;#039;map-url&amp;#039;] = true,&lt;br /&gt;
		[&amp;#039;map-url-access&amp;#039;] = true,&lt;br /&gt;
		[&amp;#039;script-map&amp;#039;] = true,&lt;br /&gt;
		[&amp;#039;sections&amp;#039;] = true,&lt;br /&gt;
		[&amp;#039;sheet&amp;#039;] = true,&lt;br /&gt;
		[&amp;#039;sheets&amp;#039;] = true,&lt;br /&gt;
		[&amp;#039;trans-map&amp;#039;] = true,&lt;br /&gt;
		},&lt;br /&gt;
	newsgroup = {&lt;br /&gt;
		[&amp;#039;message-id&amp;#039;] = true,&lt;br /&gt;
		[&amp;#039;newsgroup&amp;#039;] = true,&lt;br /&gt;
		},&lt;br /&gt;
	report = {&lt;br /&gt;
		[&amp;#039;docket&amp;#039;] = true,&lt;br /&gt;
		},&lt;br /&gt;
	serial = {&lt;br /&gt;
		[&amp;#039;airdate&amp;#039;] = true,&lt;br /&gt;
		[&amp;#039;air-date&amp;#039;] = true,&lt;br /&gt;
		[&amp;#039;credits&amp;#039;] = true,&lt;br /&gt;
		[&amp;#039;episode&amp;#039;] = true,														-- cite serial only TODO: make available to cite episode?&lt;br /&gt;
		[&amp;#039;episode-link&amp;#039;] = true,												-- alias of |title-link=&lt;br /&gt;
		[&amp;#039;network&amp;#039;] = true,&lt;br /&gt;
		[&amp;#039;people&amp;#039;] = true,&lt;br /&gt;
		[&amp;#039;series-link&amp;#039;] = true,&lt;br /&gt;
		[&amp;#039;station&amp;#039;] = true,&lt;br /&gt;
		},&lt;br /&gt;
	speech = {&lt;br /&gt;
		[&amp;#039;conference&amp;#039;] = true,&lt;br /&gt;
		[&amp;#039;conference-format&amp;#039;] = true,&lt;br /&gt;
		[&amp;#039;conference-url&amp;#039;] = true,&lt;br /&gt;
		[&amp;#039;event&amp;#039;] = true,&lt;br /&gt;
		},&lt;br /&gt;
	thesis = {&lt;br /&gt;
		[&amp;#039;degree&amp;#039;] = true,&lt;br /&gt;
		[&amp;#039;docket&amp;#039;] = true,&lt;br /&gt;
		},&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; C I T E _ D O C U M E N T &amp;gt;----------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Special case for cite document.  This template takes the limited basic and limited enumerated parameters plus&lt;br /&gt;
others that are apply only to standalone published sources that cannot be cited any other way; no url, book,&lt;br /&gt;
periodical, etc parameters; limited support for name lists and named identifiers.&lt;br /&gt;
&lt;br /&gt;
when validating parameters in {{cite document}} templates, the basic and &lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local document_arguments_t = {&lt;br /&gt;
	[&amp;#039;bibcode&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;bibcode-access&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;doi&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;DOI&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;doi-access&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;doi-broken-date&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;hdl&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;HDL&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;hdl-access&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;id&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;ID&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;jfm&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;JFM&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;lang&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;location&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;mr&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;MR&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;no-pp&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;orig-date&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;origyear&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;orig-year&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;osti&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;OSTI&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;osti-access&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;place&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;publisher&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;quote-page&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;quote-pages&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;script-quote&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;script-title&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;title-link&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;translator&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;translator-first&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;translator-given&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;translator-last&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;translator-surname&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;translator-link&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;translator-mask&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;trans-quote&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;type&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;zbl&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;ZBL&amp;#039;] = true,&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
local document_numbered_arguments_t = {&lt;br /&gt;
	[&amp;#039;translator#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;translator-first#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;translator#-first&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;translator-given#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;translator#-given&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;translator-last#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;translator#-last&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;translator-surname#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;translator#-surname&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;translator-link#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;translator#-link&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;translator-mask#&amp;#039;] = true,&lt;br /&gt;
	[&amp;#039;translator#-mask&amp;#039;] = true,&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; L I S T _ C O M B I N E &amp;gt;------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
makes one table from a list of tables.  &amp;lt;lists_t&amp;gt; is a sequence of tables to be combined&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function list_combine (lists_t)&lt;br /&gt;
	local out_t = {};&lt;br /&gt;
&lt;br /&gt;
	for _, list_t in ipairs (lists_t) do										-- for each list in &amp;lt;lists_t&amp;gt;&lt;br /&gt;
		for k, v in pairs (list_t) do											-- extract each k/v pair&lt;br /&gt;
			out_t[k] = v;														-- add to &amp;lt;out_t&amp;gt;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return out_t;																-- and done&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; T E M P L A T E _ L I S T _ G E T &amp;gt;--------------------------------------------&lt;br /&gt;
&lt;br /&gt;
gets a list of the templates from table t&lt;br /&gt;
&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
local function template_list_get (t)&lt;br /&gt;
	local out_t = {};															-- a table for output&lt;br /&gt;
	for k, _ in pairs (t) do													-- spin through the table and collect the keys&lt;br /&gt;
		table.insert (out_t, k)													-- add each key to the output table&lt;br /&gt;
	end&lt;br /&gt;
	return out_t;																-- and done&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[--------------------------&amp;lt; E X P O R T E D   T A B L E S &amp;gt;------------------------------------------------&lt;br /&gt;
]]&lt;br /&gt;
&lt;br /&gt;
return {&lt;br /&gt;
	preprint_arguments_t = preprint_arguments_t,&lt;br /&gt;
	preprint_template_list_t = template_list_get (preprint_arguments_t),		-- make a template list from preprint_arguments{} table&lt;br /&gt;
	unique_arguments_t = unique_arguments_t,&lt;br /&gt;
	unique_param_template_list_t = template_list_get (unique_arguments_t),		-- make a template list from unique_arguments{} table&lt;br /&gt;
	&lt;br /&gt;
	document_parameters_t = list_combine ({limited_basic_arguments_t, limited_numbered_arguments_t, document_arguments_t, document_numbered_arguments_t});&lt;br /&gt;
	common_parameters_t = list_combine ({basic_arguments_t, numbered_arguments_t});&lt;br /&gt;
	limited_parameters_t = list_combine ({limited_basic_arguments_t, limited_numbered_arguments_t});&lt;br /&gt;
	};&lt;/div&gt;</description>
			<pubDate>Wed, 22 Apr 2026 07:22:18 GMT</pubDate>
			<dc:creator>Evolution and evolvability</dc:creator>
			<comments>https://stardit.wikimedia.org.au/wiki/Module_talk:Citation/CS1/Whitelist</comments>
		</item>
		<item>
			<title>Module:Wd</title>
			<link>https://stardit.wikimedia.org.au/w/index.php?title=Module:Wd&amp;diff=1644&amp;oldid=0</link>
			<guid isPermaLink="false">https://stardit.wikimedia.org.au/w/index.php?title=Module:Wd&amp;diff=1644&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/w/index.php?title=User:Evolution_and_evolvability&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Evolution and evolvability (page does not exist)&quot;&gt;&lt;bdi&gt;Evolution and evolvability&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/wiki/Module:Wd&quot; title=&quot;Module:Wd&quot;&gt;Module:Wd&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;a href=&quot;https://stardit.wikimedia.org.au/w/index.php?title=Module:Wd&amp;amp;diff=1644&quot;&gt;Show changes&lt;/a&gt;</description>
			<pubDate>Wed, 22 Apr 2026 07:22:17 GMT</pubDate>
			<dc:creator>Evolution and evolvability</dc:creator>
			<comments>https://stardit.wikimedia.org.au/wiki/Module_talk:Wd</comments>
		</item>
		<item>
			<title>Module:WikidataIB</title>
			<link>https://stardit.wikimedia.org.au/w/index.php?title=Module:WikidataIB&amp;diff=1646&amp;oldid=0</link>
			<guid isPermaLink="false">https://stardit.wikimedia.org.au/w/index.php?title=Module:WikidataIB&amp;diff=1646&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/w/index.php?title=User:Evolution_and_evolvability&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Evolution and evolvability (page does not exist)&quot;&gt;&lt;bdi&gt;Evolution and evolvability&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/wiki/Module:WikidataIB&quot; title=&quot;Module:WikidataIB&quot;&gt;Module:WikidataIB&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;a href=&quot;https://stardit.wikimedia.org.au/w/index.php?title=Module:WikidataIB&amp;amp;diff=1646&quot;&gt;Show changes&lt;/a&gt;</description>
			<pubDate>Wed, 22 Apr 2026 07:22:17 GMT</pubDate>
			<dc:creator>Evolution and evolvability</dc:creator>
			<comments>https://stardit.wikimedia.org.au/wiki/Module_talk:WikidataIB</comments>
		</item>
		<item>
			<title>Module:Nowrap</title>
			<link>https://stardit.wikimedia.org.au/w/index.php?title=Module:Nowrap&amp;diff=1648&amp;oldid=0</link>
			<guid isPermaLink="false">https://stardit.wikimedia.org.au/w/index.php?title=Module:Nowrap&amp;diff=1648&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/w/index.php?title=User:Evolution_and_evolvability&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Evolution and evolvability (page does not exist)&quot;&gt;&lt;bdi&gt;Evolution and evolvability&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/wiki/Module:Nowrap&quot; title=&quot;Module:Nowrap&quot;&gt;Module:Nowrap&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;{{{1}}}&amp;lt;/span&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;!-- Categories go on the /doc page; interwikis go to Wikidata. --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</description>
			<pubDate>Wed, 22 Apr 2026 07:22:17 GMT</pubDate>
			<dc:creator>Evolution and evolvability</dc:creator>
			<comments>https://stardit.wikimedia.org.au/wiki/Module_talk:Nowrap</comments>
		</item>
		<item>
			<title>Module:Yesno</title>
			<link>https://stardit.wikimedia.org.au/w/index.php?title=Module:Yesno&amp;diff=1650&amp;oldid=0</link>
			<guid isPermaLink="false">https://stardit.wikimedia.org.au/w/index.php?title=Module:Yesno&amp;diff=1650&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/w/index.php?title=User:Evolution_and_evolvability&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Evolution and evolvability (page does not exist)&quot;&gt;&lt;bdi&gt;Evolution and evolvability&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/wiki/Module:Yesno&quot; title=&quot;Module:Yesno&quot;&gt;Module:Yesno&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- Function allowing for consistent treatment of boolean-like wikitext input.&lt;br /&gt;
-- It works similarly to the template {{yesno}}.&lt;br /&gt;
&lt;br /&gt;
return function (val, default)&lt;br /&gt;
	-- If your wiki uses non-ascii characters for any of &amp;quot;yes&amp;quot;, &amp;quot;no&amp;quot;, etc., you&lt;br /&gt;
	-- should replace &amp;quot;val:lower()&amp;quot; with &amp;quot;mw.ustring.lower(val)&amp;quot; in the&lt;br /&gt;
	-- following line.&lt;br /&gt;
	val = type(val) == &amp;#039;string&amp;#039; and val:lower() or val&lt;br /&gt;
	if val == nil then&lt;br /&gt;
		return nil&lt;br /&gt;
	elseif val == true &lt;br /&gt;
		or val == &amp;#039;yes&amp;#039;&lt;br /&gt;
		or val == &amp;#039;y&amp;#039;&lt;br /&gt;
		or val == &amp;#039;true&amp;#039;&lt;br /&gt;
		or val == &amp;#039;t&amp;#039;&lt;br /&gt;
		or val == &amp;#039;on&amp;#039;&lt;br /&gt;
		or tonumber(val) == 1&lt;br /&gt;
	then&lt;br /&gt;
		return true&lt;br /&gt;
	elseif val == false&lt;br /&gt;
		or val == &amp;#039;no&amp;#039;&lt;br /&gt;
		or val == &amp;#039;n&amp;#039;&lt;br /&gt;
		or val == &amp;#039;false&amp;#039;&lt;br /&gt;
		or val == &amp;#039;f&amp;#039;&lt;br /&gt;
		or val == &amp;#039;off&amp;#039;&lt;br /&gt;
		or tonumber(val) == 0&lt;br /&gt;
	then&lt;br /&gt;
		return false&lt;br /&gt;
	else&lt;br /&gt;
		return default&lt;br /&gt;
	end&lt;br /&gt;
end&lt;/div&gt;</description>
			<pubDate>Wed, 22 Apr 2026 07:22:17 GMT</pubDate>
			<dc:creator>Evolution and evolvability</dc:creator>
			<comments>https://stardit.wikimedia.org.au/wiki/Module_talk:Yesno</comments>
		</item>
		<item>
			<title>Module:Arguments</title>
			<link>https://stardit.wikimedia.org.au/w/index.php?title=Module:Arguments&amp;diff=1652&amp;oldid=0</link>
			<guid isPermaLink="false">https://stardit.wikimedia.org.au/w/index.php?title=Module:Arguments&amp;diff=1652&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/w/index.php?title=User:Evolution_and_evolvability&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Evolution and evolvability (page does not exist)&quot;&gt;&lt;bdi&gt;Evolution and evolvability&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/wiki/Module:Arguments&quot; title=&quot;Module:Arguments&quot;&gt;Module:Arguments&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- This module provides easy processing of arguments passed to Scribunto from&lt;br /&gt;
-- #invoke. It is intended for use by other Lua modules, and should not be&lt;br /&gt;
-- called from #invoke directly.&lt;br /&gt;
&lt;br /&gt;
local libraryUtil = require(&amp;#039;libraryUtil&amp;#039;)&lt;br /&gt;
local checkType = libraryUtil.checkType&lt;br /&gt;
&lt;br /&gt;
local arguments = {}&lt;br /&gt;
&lt;br /&gt;
-- Generate four different tidyVal functions, so that we don&amp;#039;t have to check the&lt;br /&gt;
-- options every time we call it.&lt;br /&gt;
&lt;br /&gt;
local function tidyValDefault(key, val)&lt;br /&gt;
	if type(val) == &amp;#039;string&amp;#039; then&lt;br /&gt;
		val = val:match(&amp;#039;^%s*(.-)%s*$&amp;#039;)&lt;br /&gt;
		if val == &amp;#039;&amp;#039; then&lt;br /&gt;
			return nil&lt;br /&gt;
		else&lt;br /&gt;
			return val&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return val&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function tidyValTrimOnly(key, val)&lt;br /&gt;
	if type(val) == &amp;#039;string&amp;#039; then&lt;br /&gt;
		return val:match(&amp;#039;^%s*(.-)%s*$&amp;#039;)&lt;br /&gt;
	else&lt;br /&gt;
		return val&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function tidyValRemoveBlanksOnly(key, val)&lt;br /&gt;
	if type(val) == &amp;#039;string&amp;#039; then&lt;br /&gt;
		if val:find(&amp;#039;%S&amp;#039;) then&lt;br /&gt;
			return val&lt;br /&gt;
		else&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return val&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function tidyValNoChange(key, val)&lt;br /&gt;
	return val&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function matchesTitle(given, title)&lt;br /&gt;
	local tp = type( given )&lt;br /&gt;
	return (tp == &amp;#039;string&amp;#039; or tp == &amp;#039;number&amp;#039;) and mw.title.new( given ).prefixedText == title&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local translate_mt = { __index = function(t, k) return k end }&lt;br /&gt;
&lt;br /&gt;
function arguments.getArgs(frame, options)&lt;br /&gt;
	checkType(&amp;#039;getArgs&amp;#039;, 1, frame, &amp;#039;table&amp;#039;, true)&lt;br /&gt;
	checkType(&amp;#039;getArgs&amp;#039;, 2, options, &amp;#039;table&amp;#039;, true)&lt;br /&gt;
	frame = frame or {}&lt;br /&gt;
	options = options or {}&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Set up argument translation.&lt;br /&gt;
	--]]&lt;br /&gt;
	options.translate = options.translate or {}&lt;br /&gt;
	if getmetatable(options.translate) == nil then&lt;br /&gt;
		setmetatable(options.translate, translate_mt)&lt;br /&gt;
	end&lt;br /&gt;
	if options.backtranslate == nil then&lt;br /&gt;
		options.backtranslate = {}&lt;br /&gt;
		for k,v in pairs(options.translate) do&lt;br /&gt;
			options.backtranslate[v] = k&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if options.backtranslate and getmetatable(options.backtranslate) == nil then&lt;br /&gt;
		setmetatable(options.backtranslate, {&lt;br /&gt;
			__index = function(t, k)&lt;br /&gt;
				if options.translate[k] ~= k then&lt;br /&gt;
					return nil&lt;br /&gt;
				else&lt;br /&gt;
					return k&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		})&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Get the argument tables. If we were passed a valid frame object, get the&lt;br /&gt;
	-- frame arguments (fargs) and the parent frame arguments (pargs), depending&lt;br /&gt;
	-- on the options set and on the parent frame&amp;#039;s availability. If we weren&amp;#039;t&lt;br /&gt;
	-- passed a valid frame object, we are being called from another Lua module&lt;br /&gt;
	-- or from the debug console, so assume that we were passed a table of args&lt;br /&gt;
	-- directly, and assign it to a new variable (luaArgs).&lt;br /&gt;
	--]]&lt;br /&gt;
	local fargs, pargs, luaArgs&lt;br /&gt;
	if type(frame.args) == &amp;#039;table&amp;#039; and type(frame.getParent) == &amp;#039;function&amp;#039; then&lt;br /&gt;
		if options.wrappers then&lt;br /&gt;
			--[[&lt;br /&gt;
			-- The wrappers option makes Module:Arguments look up arguments in&lt;br /&gt;
			-- either the frame argument table or the parent argument table, but&lt;br /&gt;
			-- not both. This means that users can use either the #invoke syntax&lt;br /&gt;
			-- or a wrapper template without the loss of performance associated&lt;br /&gt;
			-- with looking arguments up in both the frame and the parent frame.&lt;br /&gt;
			-- Module:Arguments will look up arguments in the parent frame&lt;br /&gt;
			-- if it finds the parent frame&amp;#039;s title in options.wrapper;&lt;br /&gt;
			-- otherwise it will look up arguments in the frame object passed&lt;br /&gt;
			-- to getArgs.&lt;br /&gt;
			--]]&lt;br /&gt;
			local parent = frame:getParent()&lt;br /&gt;
			if not parent then&lt;br /&gt;
				fargs = frame.args&lt;br /&gt;
			else&lt;br /&gt;
				local title = parent:getTitle():gsub(&amp;#039;/sandbox$&amp;#039;, &amp;#039;&amp;#039;)&lt;br /&gt;
				local found = false&lt;br /&gt;
				if matchesTitle(options.wrappers, title) then&lt;br /&gt;
					found = true&lt;br /&gt;
				elseif type(options.wrappers) == &amp;#039;table&amp;#039; then&lt;br /&gt;
					for _,v in pairs(options.wrappers) do&lt;br /&gt;
						if matchesTitle(v, title) then&lt;br /&gt;
							found = true&lt;br /&gt;
							break&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
&lt;br /&gt;
				-- We test for false specifically here so that nil (the default) acts like true.&lt;br /&gt;
				if found or options.frameOnly == false then&lt;br /&gt;
					pargs = parent.args&lt;br /&gt;
				end&lt;br /&gt;
				if not found or options.parentOnly == false then&lt;br /&gt;
					fargs = frame.args&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			-- options.wrapper isn&amp;#039;t set, so check the other options.&lt;br /&gt;
			if not options.parentOnly then&lt;br /&gt;
				fargs = frame.args&lt;br /&gt;
			end&lt;br /&gt;
			if not options.frameOnly then&lt;br /&gt;
				local parent = frame:getParent()&lt;br /&gt;
				pargs = parent and parent.args or nil&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		if options.parentFirst then&lt;br /&gt;
			fargs, pargs = pargs, fargs&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		luaArgs = frame&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Set the order of precedence of the argument tables. If the variables are&lt;br /&gt;
	-- nil, nothing will be added to the table, which is how we avoid clashes&lt;br /&gt;
	-- between the frame/parent args and the Lua args.&lt;br /&gt;
	local argTables = {fargs}&lt;br /&gt;
	argTables[#argTables + 1] = pargs&lt;br /&gt;
	argTables[#argTables + 1] = luaArgs&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Generate the tidyVal function. If it has been specified by the user, we&lt;br /&gt;
	-- use that; if not, we choose one of four functions depending on the&lt;br /&gt;
	-- options chosen. This is so that we don&amp;#039;t have to call the options table&lt;br /&gt;
	-- every time the function is called.&lt;br /&gt;
	--]]&lt;br /&gt;
	local tidyVal = options.valueFunc&lt;br /&gt;
	if tidyVal then&lt;br /&gt;
		if type(tidyVal) ~= &amp;#039;function&amp;#039; then&lt;br /&gt;
			error(&lt;br /&gt;
				&amp;quot;bad value assigned to option &amp;#039;valueFunc&amp;#039;&amp;quot;&lt;br /&gt;
					.. &amp;#039;(function expected, got &amp;#039;&lt;br /&gt;
					.. type(tidyVal)&lt;br /&gt;
					.. &amp;#039;)&amp;#039;,&lt;br /&gt;
				2&lt;br /&gt;
			)&lt;br /&gt;
		end&lt;br /&gt;
	elseif options.trim ~= false then&lt;br /&gt;
		if options.removeBlanks ~= false then&lt;br /&gt;
			tidyVal = tidyValDefault&lt;br /&gt;
		else&lt;br /&gt;
			tidyVal = tidyValTrimOnly&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		if options.removeBlanks ~= false then&lt;br /&gt;
			tidyVal = tidyValRemoveBlanksOnly&lt;br /&gt;
		else&lt;br /&gt;
			tidyVal = tidyValNoChange&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Set up the args, metaArgs and nilArgs tables. args will be the one&lt;br /&gt;
	-- accessed from functions, and metaArgs will hold the actual arguments. Nil&lt;br /&gt;
	-- arguments are memoized in nilArgs, and the metatable connects all of them&lt;br /&gt;
	-- together.&lt;br /&gt;
	--]]&lt;br /&gt;
	local args, metaArgs, nilArgs, metatable = {}, {}, {}, {}&lt;br /&gt;
	setmetatable(args, metatable)&lt;br /&gt;
&lt;br /&gt;
	local function mergeArgs(tables)&lt;br /&gt;
		--[[&lt;br /&gt;
		-- Accepts multiple tables as input and merges their keys and values&lt;br /&gt;
		-- into one table. If a value is already present it is not overwritten;&lt;br /&gt;
		-- tables listed earlier have precedence. We are also memoizing nil&lt;br /&gt;
		-- values, which can be overwritten if they are &amp;#039;s&amp;#039; (soft).&lt;br /&gt;
		--]]&lt;br /&gt;
		for _, t in ipairs(tables) do&lt;br /&gt;
			for key, val in pairs(t) do&lt;br /&gt;
				if metaArgs[key] == nil and nilArgs[key] ~= &amp;#039;h&amp;#039; then&lt;br /&gt;
					local tidiedVal = tidyVal(key, val)&lt;br /&gt;
					if tidiedVal == nil then&lt;br /&gt;
						nilArgs[key] = &amp;#039;s&amp;#039;&lt;br /&gt;
					else&lt;br /&gt;
						metaArgs[key] = tidiedVal&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--[[&lt;br /&gt;
	-- Define metatable behaviour. Arguments are memoized in the metaArgs table,&lt;br /&gt;
	-- and are only fetched from the argument tables once. Fetching arguments&lt;br /&gt;
	-- from the argument tables is the most resource-intensive step in this&lt;br /&gt;
	-- module, so we try and avoid it where possible. For this reason, nil&lt;br /&gt;
	-- arguments are also memoized, in the nilArgs table. Also, we keep a record&lt;br /&gt;
	-- in the metatable of when pairs and ipairs have been called, so we do not&lt;br /&gt;
	-- run pairs and ipairs on the argument tables more than once. We also do&lt;br /&gt;
	-- not run ipairs on fargs and pargs if pairs has already been run, as all&lt;br /&gt;
	-- the arguments will already have been copied over.&lt;br /&gt;
	--]]&lt;br /&gt;
&lt;br /&gt;
	metatable.__index = function (t, key)&lt;br /&gt;
		--[[&lt;br /&gt;
		-- Fetches an argument when the args table is indexed. First we check&lt;br /&gt;
		-- to see if the value is memoized, and if not we try and fetch it from&lt;br /&gt;
		-- the argument tables. When we check memoization, we need to check&lt;br /&gt;
		-- metaArgs before nilArgs, as both can be non-nil at the same time.&lt;br /&gt;
		-- If the argument is not present in metaArgs, we also check whether&lt;br /&gt;
		-- pairs has been run yet. If pairs has already been run, we return nil.&lt;br /&gt;
		-- This is because all the arguments will have already been copied into&lt;br /&gt;
		-- metaArgs by the mergeArgs function, meaning that any other arguments&lt;br /&gt;
		-- must be nil.&lt;br /&gt;
		--]]&lt;br /&gt;
		if type(key) == &amp;#039;string&amp;#039; then&lt;br /&gt;
			key = options.translate[key]&lt;br /&gt;
		end&lt;br /&gt;
		local val = metaArgs[key]&lt;br /&gt;
		if val ~= nil then&lt;br /&gt;
			return val&lt;br /&gt;
		elseif metatable.donePairs or nilArgs[key] then&lt;br /&gt;
			return nil&lt;br /&gt;
		end&lt;br /&gt;
		for _, argTable in ipairs(argTables) do&lt;br /&gt;
			local argTableVal = tidyVal(key, argTable[key])&lt;br /&gt;
			if argTableVal ~= nil then&lt;br /&gt;
				metaArgs[key] = argTableVal&lt;br /&gt;
				return argTableVal&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		nilArgs[key] = &amp;#039;h&amp;#039;&lt;br /&gt;
		return nil&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	metatable.__newindex = function (t, key, val)&lt;br /&gt;
		-- This function is called when a module tries to add a new value to the&lt;br /&gt;
		-- args table, or tries to change an existing value.&lt;br /&gt;
		if type(key) == &amp;#039;string&amp;#039; then&lt;br /&gt;
			key = options.translate[key]&lt;br /&gt;
		end&lt;br /&gt;
		if options.readOnly then&lt;br /&gt;
			error(&lt;br /&gt;
				&amp;#039;could not write to argument table key &amp;quot;&amp;#039;&lt;br /&gt;
					.. tostring(key)&lt;br /&gt;
					.. &amp;#039;&amp;quot;; the table is read-only&amp;#039;,&lt;br /&gt;
				2&lt;br /&gt;
			)&lt;br /&gt;
		elseif options.noOverwrite and args[key] ~= nil then&lt;br /&gt;
			error(&lt;br /&gt;
				&amp;#039;could not write to argument table key &amp;quot;&amp;#039;&lt;br /&gt;
					.. tostring(key)&lt;br /&gt;
					.. &amp;#039;&amp;quot;; overwriting existing arguments is not permitted&amp;#039;,&lt;br /&gt;
				2&lt;br /&gt;
			)&lt;br /&gt;
		elseif val == nil then&lt;br /&gt;
			--[[&lt;br /&gt;
			-- If the argument is to be overwritten with nil, we need to erase&lt;br /&gt;
			-- the value in metaArgs, so that __index, __pairs and __ipairs do&lt;br /&gt;
			-- not use a previous existing value, if present; and we also need&lt;br /&gt;
			-- to memoize the nil in nilArgs, so that the value isn&amp;#039;t looked&lt;br /&gt;
			-- up in the argument tables if it is accessed again.&lt;br /&gt;
			--]]&lt;br /&gt;
			metaArgs[key] = nil&lt;br /&gt;
			nilArgs[key] = &amp;#039;h&amp;#039;&lt;br /&gt;
		else&lt;br /&gt;
			metaArgs[key] = val&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function translatenext(invariant)&lt;br /&gt;
		local k, v = next(invariant.t, invariant.k)&lt;br /&gt;
		invariant.k = k&lt;br /&gt;
		if k == nil then&lt;br /&gt;
			return nil&lt;br /&gt;
		elseif type(k) ~= &amp;#039;string&amp;#039; or not options.backtranslate then&lt;br /&gt;
			return k, v&lt;br /&gt;
		else&lt;br /&gt;
			local backtranslate = options.backtranslate[k]&lt;br /&gt;
			if backtranslate == nil then&lt;br /&gt;
				-- Skip this one. This is a tail call, so this won&amp;#039;t cause stack overflow&lt;br /&gt;
				return translatenext(invariant)&lt;br /&gt;
			else&lt;br /&gt;
				return backtranslate, v&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	metatable.__pairs = function ()&lt;br /&gt;
		-- Called when pairs is run on the args table.&lt;br /&gt;
		if not metatable.donePairs then&lt;br /&gt;
			mergeArgs(argTables)&lt;br /&gt;
			metatable.donePairs = true&lt;br /&gt;
		end&lt;br /&gt;
		return translatenext, { t = metaArgs }&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local function inext(t, i)&lt;br /&gt;
		-- This uses our __index metamethod&lt;br /&gt;
		local v = t[i + 1]&lt;br /&gt;
		if v ~= nil then&lt;br /&gt;
			return i + 1, v&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	metatable.__ipairs = function (t)&lt;br /&gt;
		-- Called when ipairs is run on the args table.&lt;br /&gt;
		return inext, t, 0&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return args&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return arguments&lt;/div&gt;</description>
			<pubDate>Wed, 22 Apr 2026 07:22:17 GMT</pubDate>
			<dc:creator>Evolution and evolvability</dc:creator>
			<comments>https://stardit.wikimedia.org.au/wiki/Module_talk:Arguments</comments>
		</item>
		<item>
			<title>Module:Tl</title>
			<link>https://stardit.wikimedia.org.au/w/index.php?title=Module:Tl&amp;diff=1654&amp;oldid=0</link>
			<guid isPermaLink="false">https://stardit.wikimedia.org.au/w/index.php?title=Module:Tl&amp;diff=1654&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/w/index.php?title=User:Evolution_and_evolvability&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Evolution and evolvability (page does not exist)&quot;&gt;&lt;bdi&gt;Evolution and evolvability&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/wiki/Module:Tl&quot; class=&quot;mw-redirect&quot; title=&quot;Module:Tl&quot;&gt;Module:Tl&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;#REDIRECT [[Template:Template link]]&lt;br /&gt;
&lt;br /&gt;
{{Redirect category shell|&lt;br /&gt;
{{R from move}}&lt;br /&gt;
}}&lt;/div&gt;</description>
			<pubDate>Wed, 22 Apr 2026 07:22:17 GMT</pubDate>
			<dc:creator>Evolution and evolvability</dc:creator>
			<comments>https://stardit.wikimedia.org.au/wiki/Module_talk:Tl</comments>
		</item>
		<item>
			<title>Module:Template link</title>
			<link>https://stardit.wikimedia.org.au/w/index.php?title=Module:Template_link&amp;diff=1656&amp;oldid=0</link>
			<guid isPermaLink="false">https://stardit.wikimedia.org.au/w/index.php?title=Module:Template_link&amp;diff=1656&amp;oldid=0</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/w/index.php?title=User:Evolution_and_evolvability&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;mw-userlink new&quot; title=&quot;User:Evolution and evolvability (page does not exist)&quot;&gt;&lt;bdi&gt;Evolution and evolvability&lt;/bdi&gt;&lt;/a&gt; imported &lt;a href=&quot;/wiki/Module:Template_link&quot; title=&quot;Module:Template link&quot;&gt;Module:Template link&lt;/a&gt; by file upload (1 revision)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;&amp;amp;#123;&amp;amp;#123;&amp;lt;/span&amp;gt;[[Template:{{{1}}}|{{{1}}}]]&amp;lt;span class=&amp;quot;nowrap&amp;quot;&amp;gt;&amp;amp;#125;&amp;amp;#125;&amp;lt;/span&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{documentation}}&lt;br /&gt;
&amp;lt;!-- Categories go on the /doc subpage and interwikis go on Wikidata. --&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</description>
			<pubDate>Wed, 22 Apr 2026 07:22:17 GMT</pubDate>
			<dc:creator>Evolution and evolvability</dc:creator>
			<comments>https://stardit.wikimedia.org.au/wiki/Module_talk:Template_link</comments>
		</item>
		<item>
			<title>User:Evolution and evolvability</title>
			<link>https://stardit.wikimedia.org.au/wiki/User:Evolution_and_evolvability</link>
			<guid isPermaLink="false">https://stardit.wikimedia.org.au/wiki/User:Evolution_and_evolvability</guid>
			<description>&lt;p&gt;&lt;a href=&quot;/wiki/User:Samwilson&quot; class=&quot;mw-userlink&quot; title=&quot;User:Samwilson&quot;&gt;&lt;bdi&gt;Samwilson&lt;/bdi&gt;&lt;/a&gt; changed group membership for &lt;a href=&quot;/w/index.php?title=User:Evolution_and_evolvability&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;User:Evolution and evolvability (page does not exist)&quot;&gt;Evolution and evolvability&lt;/a&gt;: granted administrator, interface administrator and bureaucrat Trusted contributor.&lt;/p&gt;
</description>
			<pubDate>Wed, 22 Apr 2026 04:34:13 GMT</pubDate>
			<dc:creator>Samwilson</dc:creator>
			<comments>https://stardit.wikimedia.org.au/wiki/User_talk:Evolution_and_evolvability</comments>
		</item>
		<item>
			<title>0202011040528</title>
			<link>https://stardit.wikimedia.org.au/w/index.php?title=0202011040528&amp;diff=1642&amp;oldid=1255</link>
			<guid isPermaLink="false">https://stardit.wikimedia.org.au/w/index.php?title=0202011040528&amp;diff=1642&amp;oldid=1255</guid>
			<description>&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 04:05, 22 April 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l16&quot;&gt;Line 16:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 16:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}}{{ID parameter&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}}{{ID parameter&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|id_typ=QID&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|id_typ=QID&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|id_val=&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Q99440266&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|id_val=&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Q101116128&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}}{{ID parameter&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;}}{{ID parameter&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|id_typ=ISSN&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|id_typ=ISSN&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</description>
			<pubDate>Wed, 22 Apr 2026 04:05:26 GMT</pubDate>
			<dc:creator>Evolution and evolvability</dc:creator>
			<comments>https://stardit.wikimedia.org.au/wiki/Talk:0202011040528</comments>
		</item>
</channel></rss>