<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://the-democratika.com/wiki/index.php?action=history&amp;feed=atom&amp;title=Module%3AInfobox_power_station</id>
	<title>Module:Infobox power station - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://the-democratika.com/wiki/index.php?action=history&amp;feed=atom&amp;title=Module%3AInfobox_power_station"/>
	<link rel="alternate" type="text/html" href="https://the-democratika.com/wiki/index.php?title=Module:Infobox_power_station&amp;action=history"/>
	<updated>2026-04-04T15:00:15Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://the-democratika.com/wiki/index.php?title=Module:Infobox_power_station&amp;diff=9527&amp;oldid=prev</id>
		<title>&gt;Primefac: Changed protection level for &quot;Module:Infobox power station&quot;: per request ([Edit=Require extended confirmed access] (indefinite) [Move=Require extended confirmed access] (indefinite))</title>
		<link rel="alternate" type="text/html" href="https://the-democratika.com/wiki/index.php?title=Module:Infobox_power_station&amp;diff=9527&amp;oldid=prev"/>
		<updated>2021-01-02T03:38:31Z</updated>

		<summary type="html">&lt;p&gt;Changed protection level for &amp;quot;&lt;a href=&quot;/wiki/index.php/Module:Infobox_power_station&quot; title=&quot;Module:Infobox power station&quot;&gt;Module:Infobox power station&lt;/a&gt;&amp;quot;: per request ([Edit=Require extended confirmed access] (indefinite) [Move=Require extended confirmed access] (indefinite))&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--[[&lt;br /&gt;
Power supply units&lt;br /&gt;
Custom module to autofill six parameters for use in Template:Infobox power station&lt;br /&gt;
Parameters are:&lt;br /&gt;
ps_units_operational&lt;br /&gt;
	→ The number of generation units operational and their nameplate capacity&lt;br /&gt;
	→ Example: 3 × 100 MW&amp;lt;br&amp;gt;1 × 110 MW&lt;br /&gt;
ps_units_manu_model&lt;br /&gt;
	→ The manufacturer and model of the generation units&lt;br /&gt;
	→ Example: Vestas V164&lt;br /&gt;
ps_units_uc&lt;br /&gt;
	→ The number of generation units under construction&lt;br /&gt;
	→ Example: 2 × 150 MW&amp;lt;br&amp;gt;1 × 160 MW&lt;br /&gt;
ps_units_decommissioned&lt;br /&gt;
	→ The number of generation units decommissioned&lt;br /&gt;
	→ Example: 1 × 75 MW&amp;lt;br&amp;gt;1 × 70 MW&lt;br /&gt;
ps_units_planned&lt;br /&gt;
&lt;br /&gt;
ps_units_cancelled&lt;br /&gt;
&lt;br /&gt;
--]]&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local i18n = {&lt;br /&gt;
	[&amp;quot;langcode&amp;quot;] = &amp;quot;en&amp;quot;,&lt;br /&gt;
	[&amp;quot;op_lbl&amp;quot;] = &amp;quot;Units&amp;amp;nbsp;operational&amp;quot;,&lt;br /&gt;
	[&amp;quot;mm_lbl&amp;quot;] = &amp;quot;Make&amp;amp;nbsp;and&amp;amp;nbsp;model&amp;quot;,&lt;br /&gt;
	[&amp;quot;uc_lbl&amp;quot;] = &amp;quot;Units&amp;amp;nbsp;under&amp;amp;nbsp;const.&amp;quot;,&lt;br /&gt;
	[&amp;quot;dc_lbl&amp;quot;] = &amp;quot;Units&amp;amp;nbsp;decommissioned&amp;quot;,&lt;br /&gt;
	[&amp;quot;pl_lbl&amp;quot;] = &amp;quot;Units&amp;amp;nbsp;planned&amp;quot;,&lt;br /&gt;
	[&amp;quot;ca_lbl&amp;quot;] = &amp;quot;Units&amp;amp;nbsp;cancelled&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-- numerically sort sequential tables whose values contain a number, like &amp;quot;350 MW&amp;quot;&lt;br /&gt;
-- sort on first number found&lt;br /&gt;
local function numcomp1( x, y )&lt;br /&gt;
	x = tonumber( tostring(x):match(&amp;quot;%d+&amp;quot;) ) or 0&lt;br /&gt;
	y = tonumber( tostring(y):match(&amp;quot;%d+&amp;quot;) ) or 0&lt;br /&gt;
	return x &amp;lt; y&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- numerically sort sequential tables whose values contain two numbers, like &amp;quot;1 x 350 MW&amp;quot;&lt;br /&gt;
-- sort on second number found&lt;br /&gt;
local function numcomp2( x, y )&lt;br /&gt;
	x = tonumber( tostring(x):match(&amp;quot;%d+%D+(%d+)&amp;quot;) ) or 0&lt;br /&gt;
	y = tonumber( tostring(y):match(&amp;quot;%d+%D+(%d+)&amp;quot;) ) or 0&lt;br /&gt;
	return x &amp;lt; y&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- alphabetically sort sequential tables whose values may contain wikilinks.&lt;br /&gt;
-- Formats: &amp;quot;[[Link|Text]]&amp;quot; or &amp;quot;[[Link]]&amp;quot; or &amp;quot;Text&amp;quot;&lt;br /&gt;
local function linkcomp( a, b )&lt;br /&gt;
	-- a = a:gsub(&amp;quot;%[%[.*|&amp;quot;, &amp;quot;&amp;quot;):gsub(&amp;quot;%[%[&amp;quot;, &amp;quot;&amp;quot;):gsub(&amp;quot;]]&amp;quot;,&amp;quot;&amp;quot;) -&amp;gt; test for best&lt;br /&gt;
	a = a:match(&amp;quot;%[%[.*|(.*)]]&amp;quot;) or a:match(&amp;quot;%[%[(.*)]]&amp;quot;) or a&lt;br /&gt;
	b = b:match(&amp;quot;%[%[.*|(.*)]]&amp;quot;) or b:match(&amp;quot;%[%[(.*)]]&amp;quot;) or b&lt;br /&gt;
	return a &amp;lt; b&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--Render monolingual text&lt;br /&gt;
local function rendermlt(props, langcode)&lt;br /&gt;
	for k, v in ipairs(props) do&lt;br /&gt;
		v = v.mainsnak or v&lt;br /&gt;
		if v.snaktype == &amp;quot;value&amp;quot; and v.datavalue.value.language == langcode then&lt;br /&gt;
			return v.datavalue.value.text&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Render quantity from snak&lt;br /&gt;
local function renderqty(snak, langcode)&lt;br /&gt;
	if snak and snak.snaktype == &amp;quot;value&amp;quot; then&lt;br /&gt;
		qty = tonumber(snak.datavalue.value.amount)&lt;br /&gt;
		if not qty then return end&lt;br /&gt;
		-- get qid of unit&lt;br /&gt;
		local uqid = (snak.datavalue.value.unit or &amp;quot;&amp;quot;):match(&amp;quot;(Q%d+)&amp;quot;)&lt;br /&gt;
		-- scan table of unit symbols&lt;br /&gt;
		local usym = &amp;quot;&amp;quot;&lt;br /&gt;
		for i2, v2 in ipairs( mw.wikibase.getAllStatements(uqid, &amp;quot;P5061&amp;quot;) ) do&lt;br /&gt;
			if v2.mainsnak.snaktype == &amp;quot;value&amp;quot;&lt;br /&gt;
			and v2.mainsnak.datavalue.value.language == langcode then&lt;br /&gt;
				usym = &amp;quot;&amp;amp;nbsp;&amp;quot; .. v2.mainsnak.datavalue.value.text&lt;br /&gt;
				break&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return qty .. usym&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Take a qid and return the shortname (P1813) or label, linked to an article if possible&lt;br /&gt;
local function linkedname(qid, langcode)&lt;br /&gt;
	local props1813 = mw.wikibase.getBestStatements(qid, &amp;quot;P1813&amp;quot;)&lt;br /&gt;
	-- may have to use mw.wikibase.getLabelByLang(qid, langcode) on multi-lingual wikis:&lt;br /&gt;
	local lbl = rendermlt(props1813, langcode) or mw.wikibase.getLabel(qid)&lt;br /&gt;
	local lnk = mw.wikibase.getSitelink(qid)&lt;br /&gt;
	return lnk and lbl and (&amp;quot;[[&amp;quot; .. lnk .. &amp;quot;|&amp;quot; .. lbl ..&amp;quot;]]&amp;quot;)&lt;br /&gt;
		or lnk and (&amp;quot;[[&amp;quot; .. lnk .. &amp;quot;]]&amp;quot;)&lt;br /&gt;
		or lbl&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
p.psunits = function(frame)&lt;br /&gt;
	local args = frame.args&lt;br /&gt;
	local psu_op = args.ps_units_operational or &amp;quot;&amp;quot;&lt;br /&gt;
	local psu_mm = args.ps_units_manu_model or &amp;quot;&amp;quot;&lt;br /&gt;
	local psu_uc = args.ps_units_uc or &amp;quot;&amp;quot;&lt;br /&gt;
	local psu_dc = args.ps_units_decommissioned or &amp;quot;&amp;quot;&lt;br /&gt;
	local psu_pl = args.ps_units_planned or &amp;quot;&amp;quot;&lt;br /&gt;
	local psu_ca = args.ps_units_cancelled or &amp;quot;&amp;quot;&lt;br /&gt;
	local qid = args.qid or &amp;quot;&amp;quot;&lt;br /&gt;
	if qid == &amp;quot;&amp;quot; then qid = mw.wikibase.getEntityIdForCurrentPage() end&lt;br /&gt;
	if not qid then return nil end&lt;br /&gt;
&lt;br /&gt;
	local langcode = args.lang or &amp;quot;&amp;quot;&lt;br /&gt;
	if langcode == &amp;quot;&amp;quot; then langcode = i18n.langcode end&lt;br /&gt;
&lt;br /&gt;
	local status = {}&lt;br /&gt;
	local mm = {}&lt;br /&gt;
	local cap = {}&lt;br /&gt;
	local num = {}&lt;br /&gt;
&lt;br /&gt;
	local props516 = mw.wikibase.getBestStatements(qid, &amp;quot;P516&amp;quot;)&lt;br /&gt;
	if #props516 &amp;gt; 0 then&lt;br /&gt;
		for i1, v1 in ipairs(props516) do&lt;br /&gt;
			-- set default count of this engine to 1&lt;br /&gt;
			num[i1] = 1&lt;br /&gt;
			-- set default status of this engine to planned&lt;br /&gt;
			status[i1] = &amp;quot;pl&amp;quot;&lt;br /&gt;
			-- model should be value of P516, get manufacturer from the linked P176 and capacity from linked P2109&lt;br /&gt;
			-- if there is a value that isn&amp;#039;t a model, just use the value&lt;br /&gt;
			local mdlqid = (v1.mainsnak.snaktype == &amp;quot;value&amp;quot;) and v1.mainsnak.datavalue.value.id&lt;br /&gt;
			if mdlqid then&lt;br /&gt;
				-- look for a shortname to use for model display label, otherwise use model label&lt;br /&gt;
				local mdl = linkedname(mdlqid, langcode)&lt;br /&gt;
				local mfr&lt;br /&gt;
				local props176snak = mw.wikibase.getBestStatements(mdlqid, &amp;quot;P176&amp;quot;)[1]&lt;br /&gt;
				if props176snak then&lt;br /&gt;
					-- model has a manufacturer&lt;br /&gt;
					props176snak = props176snak and props176snak.mainsnak&lt;br /&gt;
					local mfrqid = (props176snak.snaktype == &amp;quot;value&amp;quot;) and props176snak.datavalue.value.id&lt;br /&gt;
					if mfrqid then&lt;br /&gt;
						-- look for a shortname to use for manufacturer display label, otherwise use manufacturer label&lt;br /&gt;
						mfr = linkedname(mfrqid, langcode)&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				mm[i1] = mfr and mdl and (mfr .. &amp;quot; &amp;quot; .. mdl) or mfr or mdl&lt;br /&gt;
				-- get default capacity&lt;br /&gt;
				local props2109snak = mw.wikibase.getBestStatements(mdlqid, &amp;quot;P2109&amp;quot;)[1]&lt;br /&gt;
				props2109snak = props2109snak and props2109snak.mainsnak&lt;br /&gt;
				cap[i1] = renderqty(props2109snak, langcode)&lt;br /&gt;
			elseif v1.mainsnak.snaktype == &amp;quot;somevalue&amp;quot; then&lt;br /&gt;
				mm[i1] = &amp;quot;Unknown&amp;quot;&lt;br /&gt;
				-- set default capacity&lt;br /&gt;
				cap[i1] = 0&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			local quals = v1.qualifiers&lt;br /&gt;
			if quals then&lt;br /&gt;
				-- determine status from service retirement/entry/inception&lt;br /&gt;
				local dcsnak = quals.P730 and quals.P730[1].snaktype&lt;br /&gt;
				local opsnak = quals.P729 and quals.P729[1].snaktype&lt;br /&gt;
				local ucsnak = quals.P571 and quals.P571[1].snaktype&lt;br /&gt;
				if dcsnak == &amp;quot;value&amp;quot; or dcsnak == &amp;quot;somevalue&amp;quot; then&lt;br /&gt;
					status[i1] = &amp;quot;dc&amp;quot;&lt;br /&gt;
				elseif opsnak == &amp;quot;value&amp;quot; or opsnak == &amp;quot;somevalue&amp;quot; then&lt;br /&gt;
					status[i1] = &amp;quot;op&amp;quot;&lt;br /&gt;
				elseif ucsnak == &amp;quot;value&amp;quot; or ucsnak == &amp;quot;somevalue&amp;quot; then&lt;br /&gt;
					status[i1] = &amp;quot;uc&amp;quot;&lt;br /&gt;
				end&lt;br /&gt;
				-- override if state of use (P5817) is cancelled-abandoned (Q30108381)&lt;br /&gt;
				if quals.P5817&lt;br /&gt;
					and quals.P5817[1].snaktype == &amp;quot;value&amp;quot;&lt;br /&gt;
					and quals.P5817[1].datavalue.value.id == &amp;quot;Q30108381&amp;quot; then&lt;br /&gt;
					status[i1] = &amp;quot;ca&amp;quot;&lt;br /&gt;
				end&lt;br /&gt;
&lt;br /&gt;
				-- override default capacity from qualifier P2109 if available&lt;br /&gt;
				if quals.P2109 and quals.P2109[1].snaktype == &amp;quot;value&amp;quot; then&lt;br /&gt;
					cap[i1] = renderqty(quals.P2109[1], langcode)&lt;br /&gt;
				end&lt;br /&gt;
&lt;br /&gt;
				-- if quantity (P1114) is given, replace num value&lt;br /&gt;
				if quals.P1114 and quals.P1114[1].snaktype == &amp;quot;value&amp;quot; then&lt;br /&gt;
					num[i1] = tonumber(quals.P1114[1].datavalue.value.amount) or 1&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			-- convert capacity in kW to MW&lt;br /&gt;
			if (cap[i1] or &amp;quot;&amp;quot;):sub(-2) == &amp;quot;kW&amp;quot; then&lt;br /&gt;
				local c = tonumber(cap[i1]:match(&amp;quot;%d+&amp;quot;))&lt;br /&gt;
				cap[i1] = c/1000 .. &amp;quot;&amp;amp;nbsp;&amp;quot; .. &amp;quot;MW&amp;quot;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- construct set of manufacturers and models of operational units&lt;br /&gt;
	-- key is the manufacturer + model and value is count of that&lt;br /&gt;
	local opmm = {}&lt;br /&gt;
	for i, v in ipairs(status) do&lt;br /&gt;
		if v == &amp;quot;op&amp;quot; and mm[i] then opmm[mm[i]] = (opmm[mm[i]] or 0) + num[i] end&lt;br /&gt;
	end&lt;br /&gt;
	-- construct html string from the set of manufacturers and models&lt;br /&gt;
	-- first make a sequential table&lt;br /&gt;
	local opmmseq = {}&lt;br /&gt;
	for k, v in pairs(opmm) do&lt;br /&gt;
		opmmseq[#opmmseq+1] = k .. &amp;quot; (&amp;quot; .. v .. &amp;quot;)&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(opmmseq, linkcomp)&lt;br /&gt;
	if psu_mm == &amp;quot;&amp;quot; then psu_mm = table.concat(opmmseq, &amp;quot;&amp;lt;br&amp;gt;&amp;quot;) end&lt;br /&gt;
&lt;br /&gt;
	-- construct sets of capacities of operational units (opcap),&lt;br /&gt;
	-- units under construction (uccap), decommissioned (dccap)],&lt;br /&gt;
	-- planned (plcap) and cancelled (cacap)&lt;br /&gt;
	-- key is the capacity and value is count of that capacity.&lt;br /&gt;
	local opcap, uccap, dccap, plcap, cacap = {}, {}, {}, {}, {}&lt;br /&gt;
	for i, v in ipairs(status) do&lt;br /&gt;
		if v == &amp;quot;uc&amp;quot; and cap[i] then uccap[cap[i]] = (uccap[cap[i]] or 0) + num[i] end&lt;br /&gt;
		if v == &amp;quot;op&amp;quot; and cap[i] then opcap[cap[i]] = (opcap[cap[i]] or 0) + num[i] end&lt;br /&gt;
		if v == &amp;quot;dc&amp;quot; and cap[i] then dccap[cap[i]] = (dccap[cap[i]] or 0) + num[i] end&lt;br /&gt;
		if v == &amp;quot;pl&amp;quot; and cap[i] then plcap[cap[i]] = (plcap[cap[i]] or 0) + num[i] end&lt;br /&gt;
		if v == &amp;quot;ca&amp;quot; and cap[i] then cacap[cap[i]] = (cacap[cap[i]] or 0) + num[i] end&lt;br /&gt;
	end&lt;br /&gt;
	-- construct html strings from the sets of capacities&lt;br /&gt;
	-- first make a sequential table&lt;br /&gt;
	-- under construction&lt;br /&gt;
	local uccapseq = {}&lt;br /&gt;
	for k, v in pairs(uccap) do&lt;br /&gt;
		uccapseq[#uccapseq+1] = v .. &amp;quot; × &amp;quot; .. k&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(uccapseq, numcomp2)&lt;br /&gt;
	if psu_uc == &amp;quot;&amp;quot; then psu_uc = table.concat(uccapseq, &amp;quot;&amp;lt;br&amp;gt;&amp;quot;) end&lt;br /&gt;
	-- operational&lt;br /&gt;
	local opcapseq = {}&lt;br /&gt;
	for k, v in pairs(opcap) do&lt;br /&gt;
		opcapseq[#opcapseq+1] = v .. &amp;quot; × &amp;quot; .. k&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(opcapseq, numcomp2)&lt;br /&gt;
	if psu_op == &amp;quot;&amp;quot; then psu_op = table.concat(opcapseq, &amp;quot;&amp;lt;br&amp;gt;&amp;quot;) end&lt;br /&gt;
	-- decommissioned&lt;br /&gt;
	local dccapseq = {}&lt;br /&gt;
	for k, v in pairs(dccap) do&lt;br /&gt;
		dccapseq[#dccapseq+1] = v .. &amp;quot; × &amp;quot; .. k&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(dccapseq, numcomp2)&lt;br /&gt;
	if psu_dc == &amp;quot;&amp;quot; then psu_dc = table.concat(dccapseq, &amp;quot;&amp;lt;br&amp;gt;&amp;quot;) end&lt;br /&gt;
	-- planned&lt;br /&gt;
	local plcapseq = {}&lt;br /&gt;
	for k, v in pairs(plcap) do&lt;br /&gt;
		plcapseq[#plcapseq+1] = v .. &amp;quot; × &amp;quot; .. k&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(plcapseq, numcomp2)&lt;br /&gt;
	if psu_pl == &amp;quot;&amp;quot; then psu_pl = table.concat(plcapseq, &amp;quot;&amp;lt;br&amp;gt;&amp;quot;) end&lt;br /&gt;
	-- cancelled&lt;br /&gt;
	local cacapseq = {}&lt;br /&gt;
	for k, v in pairs(cacap) do&lt;br /&gt;
		cacapseq[#cacapseq+1] = v .. &amp;quot; × &amp;quot; .. k&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(cacapseq, numcomp2)&lt;br /&gt;
	if psu_ca == &amp;quot;&amp;quot; then psu_ca = table.concat(cacapseq, &amp;quot;&amp;lt;br&amp;gt;&amp;quot;) end&lt;br /&gt;
&lt;br /&gt;
	-- construct table rows&lt;br /&gt;
	local out = &amp;quot;&amp;quot;&lt;br /&gt;
	-- operational&lt;br /&gt;
	if psu_op ~= &amp;quot;&amp;quot; then&lt;br /&gt;
		out = out ..  &amp;quot;&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;&amp;quot; .. i18n.op_lbl&lt;br /&gt;
		.. &amp;quot;&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;&amp;quot; .. psu_op .. &amp;quot;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	-- make &amp;amp; model&lt;br /&gt;
	if psu_mm ~= &amp;quot;&amp;quot; then&lt;br /&gt;
		out = out ..  &amp;quot;&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;&amp;quot; .. i18n.mm_lbl&lt;br /&gt;
		.. &amp;quot;&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;&amp;quot; .. psu_mm .. &amp;quot;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	-- planned&lt;br /&gt;
	if psu_pl ~= &amp;quot;&amp;quot; then&lt;br /&gt;
		out = out ..  &amp;quot;&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;&amp;quot; .. i18n.pl_lbl&lt;br /&gt;
		.. &amp;quot;&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;&amp;quot; .. psu_pl .. &amp;quot;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	-- cancelled&lt;br /&gt;
	if psu_ca ~= &amp;quot;&amp;quot; then&lt;br /&gt;
		out = out ..  &amp;quot;&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;&amp;quot; .. i18n.ca_lbl&lt;br /&gt;
		.. &amp;quot;&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;&amp;quot; .. psu_ca .. &amp;quot;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	-- under const.&lt;br /&gt;
	if psu_uc ~= &amp;quot;&amp;quot; then&lt;br /&gt;
		out = out ..  &amp;quot;&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;&amp;quot; .. i18n.uc_lbl&lt;br /&gt;
		.. &amp;quot;&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;&amp;quot; .. psu_uc .. &amp;quot;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	-- decommissioned&lt;br /&gt;
	if psu_dc ~= &amp;quot;&amp;quot; then&lt;br /&gt;
		out = out ..  &amp;quot;&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;&amp;quot; .. i18n.dc_lbl&lt;br /&gt;
		.. &amp;quot;&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;&amp;quot; .. psu_dc .. &amp;quot;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args.dbug and args.dbug ~= &amp;quot;&amp;quot; then&lt;br /&gt;
		local debugstr = &amp;quot;debug info&amp;lt;br&amp;gt;&amp;quot;&lt;br /&gt;
		for i, v in pairs(status) do&lt;br /&gt;
			debugstr = debugstr .. i .. &amp;quot; - &amp;quot; .. v .. &amp;quot; - &amp;quot; .. (cap[i] or &amp;quot;&amp;quot;) .. &amp;quot; - &amp;quot; .. (mm[i] or &amp;quot;&amp;quot;) .. &amp;quot; x &amp;quot; .. (num[i] or &amp;quot;&amp;quot;) .. &amp;quot;&amp;lt;br&amp;gt;&amp;quot;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local count = 0&lt;br /&gt;
		for k, v in pairs(opmm) do&lt;br /&gt;
			count = count +1&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		debugstr = debugstr .. &amp;quot;opmm size = &amp;quot; .. count&lt;br /&gt;
		out = out  ..  &amp;quot;&amp;lt;tr&amp;gt;&amp;lt;td colspan=&amp;#039;2&amp;#039;&amp;gt;&amp;quot; .. debugstr .. &amp;quot;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- Construct html hack to fit in when passed to Template:Infobox, which prefixes the data with&lt;br /&gt;
	-- &amp;lt;td colspan=&amp;quot;2&amp;quot; style=&amp;quot;text-align:center&amp;quot;&amp;gt; and suffixes it with &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
	if #out &amp;gt; 0 then&lt;br /&gt;
		out = &amp;quot;&amp;lt;/td&amp;gt;&amp;quot; .. out:sub(1,-11)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return out&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>&gt;Primefac</name></author>
	</entry>
</feed>