<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://sierra.ss220.space/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Azizonkg</id>
	<title>SS220 Sierra (Space Station 13) - Вклад [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://sierra.ss220.space/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Azizonkg"/>
	<link rel="alternate" type="text/html" href="https://sierra.ss220.space/index.php/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Azizonkg"/>
	<updated>2026-06-04T15:38:16Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.39.1</generator>
	<entry>
		<id>https://sierra.ss220.space/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=14264</id>
		<title>Заглавная страница</title>
		<link rel="alternate" type="text/html" href="https://sierra.ss220.space/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=14264"/>
		<updated>2024-04-01T13:45:02Z</updated>

		<summary type="html">&lt;p&gt;Azizonkg: fix server address&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{#seo:&lt;br /&gt;
 |title=SS220 Sierra&lt;br /&gt;
 |description=Добро пожаловать на русскую версию вики Baystation 12 по игре Space Station 13!&lt;br /&gt;
 |keywords=Space Station 13, Космическая Станция 13, ss13, Byond, Infinity, Sierra, SS220, игра, ролевая, roleplay, рп, 2d песочница, космос, TaeRss, Mooniverse, Elwycco, Wycc, Wycc220, вики, wiki, игровой сервер&lt;br /&gt;
 |type=website&lt;br /&gt;
 |image_width=1003&lt;br /&gt;
 |image_height=755&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;div align=&amp;quot;center&amp;quot; style=&amp;quot;margin-top:10px;&amp;quot;&amp;gt;&lt;br /&gt;
{{main_page/header}}&lt;br /&gt;
Наш сервер находится по адресу: &#039;&#039;&#039;[byond://game.ss220.space:7733 byond://game.ss220.space:7733]&#039;&#039;&#039; &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Основано на вики [https://bay.ss13.me/ Baystation 12] и проекта [https://wiki.infinity-ss13.ru/ Infinity]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;wiki-mainpage-column&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;width: 49.7%; float:left&amp;quot;&amp;gt;&amp;lt;div align=&amp;quot;left&amp;quot;&amp;gt;&lt;br /&gt;
{{Main page/frame/test&lt;br /&gt;
 | color      = 008000&lt;br /&gt;
 | image      = Bluentlogo.png&lt;br /&gt;
 | title      = Правила сервера&lt;br /&gt;
 | content    = &amp;lt;span style=&amp;quot;font-size: 120%;&amp;quot;&amp;gt;&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;&#039;&#039;&#039;[[Правила сервера|Обязательны к ознакомлению]]&#039;&#039;&#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{main_page/frame/test&lt;br /&gt;
 | color      = 88b1ef&lt;br /&gt;
 | image      = IconConstruction.png&lt;br /&gt;
 | title      = Новым игрокам&lt;br /&gt;
 | content    = &amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;{{big|Добро пожаловать!}}  &lt;br /&gt;
&amp;lt;br&amp;gt;Прочтите [[Как начать играть?|руководство для новых игроков]] , чтобы узнать базовые механики игры.&amp;lt;br&amp;gt; Всё ещё остались вопросы? Просмотрите [[Часто_Задаваемые_Вопросы|часто задаваемые вопросы (FAQ)]].&amp;lt;/div&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{main_page/frame/test	&lt;br /&gt;
 | color      = dda0d0	&lt;br /&gt;
 | image      = Bluentlogo.png&lt;br /&gt;
 | title      = История мира	&lt;br /&gt;
 | content    = Прочтите об [[История вселенной Baystation12|истории вселенной &#039;&#039;Baystation 12&#039;&#039;]]. Так же, мы рекомендуем ознакомиться с [[Галактическая карта | галактической картой]]. {{Mainpage navbox lore}}&lt;br /&gt;
}}&lt;br /&gt;
{{main_page/frame/test&lt;br /&gt;
 | color      = 77D877&lt;br /&gt;
 | image      = IconTips.png&lt;br /&gt;
 | title      = Объекты&lt;br /&gt;
 | content    = Здесь находятся различные статьи об объектах в игре. &amp;lt;br&amp;gt;  {{Mainpage navbox object}} &lt;br /&gt;
}}&lt;br /&gt;
{{main_page/frame/test&lt;br /&gt;
 | color      = 7F7F7F&lt;br /&gt;
 | image      = Bluentlogo.png&lt;br /&gt;
 | title      = Локации	&lt;br /&gt;
 | content    = Здесь показаны карта палуб космического корабля &#039;&#039;&#039;ИКН Сьерра&#039;&#039;&#039;, на котором происходят основные события игры&lt;br /&gt;
{{Mainpage navbox locations}}&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-------------------------------------------&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;wiki-mainpage-column&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;width: 49.7%; float:right&amp;quot;&amp;gt;&amp;lt;div align=&amp;quot;left&amp;quot;&amp;gt;&lt;br /&gt;
{{main_page/frame/test&lt;br /&gt;
 | color      = BBA0DD&lt;br /&gt;
 | image      = IconJobs.png&lt;br /&gt;
 | title      = Профессии и роли&lt;br /&gt;
 | content    = {{Mainpage navbox jobs}}&lt;br /&gt;
}}&lt;br /&gt;
{{main_page/frame/test&lt;br /&gt;
 | color      = 242934&lt;br /&gt;
 | image      = IconGamemode.png&lt;br /&gt;
 | title      = Игровая механика&lt;br /&gt;
 | content    = {{Mainpage navbox guides}}&lt;br /&gt;
}}&lt;br /&gt;
{{main_page/frame/test&lt;br /&gt;
 | color      = 606D89&lt;br /&gt;
 | image      = IconLocations.png&lt;br /&gt;
 | title      = Разное&lt;br /&gt;
 | content    = {{MainPage-Misc}}&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:SS220 Sierra Wiki]]&lt;/div&gt;</summary>
		<author><name>Azizonkg</name></author>
	</entry>
	<entry>
		<id>https://sierra.ss220.space/index.php?title=MediaWiki:Custom-RcGcDw&amp;diff=14057</id>
		<title>MediaWiki:Custom-RcGcDw</title>
		<link rel="alternate" type="text/html" href="https://sierra.ss220.space/index.php?title=MediaWiki:Custom-RcGcDw&amp;diff=14057"/>
		<updated>2024-01-27T10:51:52Z</updated>

		<summary type="html">&lt;p&gt;Azizonkg: Защитил страницу MediaWiki:Custom-RcGcDw ([Редактирование=Разрешено только администраторам] (бессрочно) [Переименование=Разрешено только администраторам] (бессрочно))&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;617003227182792704&lt;/div&gt;</summary>
		<author><name>Azizonkg</name></author>
	</entry>
	<entry>
		<id>https://sierra.ss220.space/index.php?title=MediaWiki:Custom-RcGcDw&amp;diff=14056</id>
		<title>MediaWiki:Custom-RcGcDw</title>
		<link rel="alternate" type="text/html" href="https://sierra.ss220.space/index.php?title=MediaWiki:Custom-RcGcDw&amp;diff=14056"/>
		<updated>2024-01-27T10:51:46Z</updated>

		<summary type="html">&lt;p&gt;Azizonkg: Новая страница: «617003227182792704»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;617003227182792704&lt;/div&gt;</summary>
		<author><name>Azizonkg</name></author>
	</entry>
	<entry>
		<id>https://sierra.ss220.space/index.php?title=%D0%9A%D0%B0%D0%BA_%D0%BD%D0%B0%D1%87%D0%B0%D1%82%D1%8C_%D0%B8%D0%B3%D1%80%D0%B0%D1%82%D1%8C&amp;diff=10283</id>
		<title>Как начать играть</title>
		<link rel="alternate" type="text/html" href="https://sierra.ss220.space/index.php?title=%D0%9A%D0%B0%D0%BA_%D0%BD%D0%B0%D1%87%D0%B0%D1%82%D1%8C_%D0%B8%D0%B3%D1%80%D0%B0%D1%82%D1%8C&amp;diff=10283"/>
		<updated>2021-11-10T18:35:57Z</updated>

		<summary type="html">&lt;p&gt;Azizonkg: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;Первый раз в первый класс!&#039;&#039; Это руководство написано для людей, которые только узнали о игре Space Station 13, или же начинают делать в ней свои первые шаги.&lt;br /&gt;
= BYOND =&lt;br /&gt;
Для того, чтобы играть на серверах Space Station 13 нужна программа BYOND. Она является некой платформой, с которой осуществляется вход в игру.&lt;br /&gt;
&lt;br /&gt;
# Зайдите на сайт [http://www.byond.com/ BYOND]. Оттуда скачайте [http://www.byond.com/download/build/511/511.1384_byond.exe установщик BYOND].&lt;br /&gt;
# Запустите скачанный установщик, установите.&lt;br /&gt;
# [https://secure.byond.com/Join Зарегистрируйтесь на сайте.]&lt;br /&gt;
# Произведите вход, используя данные своего аккаунта.&lt;br /&gt;
&#039;&#039;Иногда бывают вылеты/ошибки у BYOND, для помощи обратитесь в [https://discord.ss220.space дискорд]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Первый заход в игру = &lt;br /&gt;
Вы установили BYOND, прекрасно. Теперь вам остается лишь зайти на наш сервер и начать играть.&lt;br /&gt;
&lt;br /&gt;
* Откройте BYOND.&lt;br /&gt;
* Зажмите сочетание клавиш &#039;&#039;&#039;&amp;quot;Сtrl + O&amp;quot;&#039;&#039;&#039; (или нажмите шестеренку, а там на Open).&lt;br /&gt;
* Введите в верхнюю строку постоянный IP-адрес нашего сервера - byond://play.ss220.space:7725, и нажмите &#039;&#039;&#039;OK&#039;&#039;&#039;.&lt;br /&gt;
* Обязательно ознакомьтесь с [[Правила сервера | правилами сервера]], чтобы не испортить игру другим и не быть забаненным в первые часы. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Важно:&#039;&#039;&#039; Помните, что сервер Infinity является РП сервером, где от Вас требуется максимальный отыгрыш своей роли в игре. Постарайтесь вжиться в роль, подробнее в [[общее руководство по ролевому отыгрышу|руководстве по ролевому отыгрышу]].&lt;br /&gt;
&lt;br /&gt;
= Ваш первый персонаж =&lt;br /&gt;
После входа в игру вы окажетесь в лобби игры, где вы можете настроить персонажа, войти в игру, войти в игру в роли призрака, которого никто не видит. Разберем каждую кнопку по пунктам:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Настройки&#039;&#039;&#039; - там вы создаете вашего персонаж и настраиваете другие нюансы.&lt;br /&gt;
* &#039;&#039;&#039;Список экипажа&#039;&#039;&#039; - список персонажей в игре по профессиям.&lt;br /&gt;
* &#039;&#039;&#039;Зайти в раунд!&#039;&#039;&#039; - кнопка входа в игру с выбором профессии. Рекомендуем заранее выбрать слот с вашим персонажа в &#039;&#039;&#039;Setup Character&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Наблюдать&#039;&#039;&#039; - кнопка входа в игру в качестве наблюдателя (призрака).&lt;br /&gt;
&lt;br /&gt;
= Setup Character =&lt;br /&gt;
Создаем вашего первого персонажа для сервера. Это не так просто как вы думаете :)&lt;br /&gt;
&lt;br /&gt;
== General ==&lt;br /&gt;
&lt;br /&gt;
[[Файл:SS13GG.jpg|400px|thumb|right|Setup Character]]&lt;br /&gt;
* &#039;&#039;&#039;Name&#039;&#039;&#039; &#039;&#039;(Имя)&#039;&#039; - Придумайте или выставьте случайное имя своему персонажу. Кнопка для генерации расположена немного ниже.&lt;br /&gt;
* &#039;&#039;&#039;Always Random Name&#039;&#039;&#039; &#039;&#039;(Каждый раунд будет генерироваться новое имя)&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Gender&#039;&#039;&#039; &#039;&#039;(Пол)&#039;&#039; - нажимаете на Male/Female и пол персонажа сменится.&lt;br /&gt;
* &#039;&#039;&#039;Age&#039;&#039;&#039; &#039;&#039;(Возраст)&#039;&#039; - возраст персонажа. Учтите, что некоторые профессии и должности могут потребовать возраста не ниже определенной планки. [https://wiki.infinity-ss13.info/index.php?title=%D0%A2%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0_%D0%B2%D0%BE%D0%B7%D1%80%D0%B0%D1%81%D1%82%D0%BE%D0%B2_%D0%B8_%D0%B4%D0%BE%D0%BB%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B5%D0%B9 Таблица возрастов и должностей].&lt;br /&gt;
* &#039;&#039;&#039;Spawn Point&#039;&#039;&#039; &#039;&#039;(Место появления)&#039;&#039; - место, где Вы появляетесь на карте. Обычно, привязано к стартовой локации &#039;&#039;(крио-капсулы)&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Body&#039;&#039;&#039; &#039;&#039;(Тело)&#039;&#039; - случайная генерация всех характеристик персонажа. &lt;br /&gt;
* &#039;&#039;&#039;Species&#039;&#039;&#039; &#039;&#039;(Вид)&#039;&#039; -  выбор расы. Каждая раса немного отличается в плане игровой механики. Настоятельно рекомендуется на первое время выбирать &amp;quot;Human&amp;quot;. Для дополнительных рас нужен вайт лист.&lt;br /&gt;
* &#039;&#039;&#039;Blood Type&#039;&#039;&#039; &#039;&#039;(Тип крови)&#039;&#039; - выбираете тип крови. Важно при переливании крови.&lt;br /&gt;
* &#039;&#039;&#039;Skin Tone&#039;&#039;&#039; &#039;&#039;(Цвет кожи)&#039;&#039; - выставляете нужное значение и палитра кожи Вашего персонажа изменяется.&lt;br /&gt;
* &#039;&#039;&#039;Needs Glasses&#039;&#039;&#039; &#039;&#039;(Необходимость в очках)&#039;&#039; - добавляете врожденный дефект зрения персонажу, из-за чего ухудшается зрение в игре &#039;&#039;(очки можно взять в лодауте)&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Limbs&#039;&#039;&#039; &#039;&#039;(Замена частей тела)&#039;&#039; - [[Протезы | протезирование]] или удаление частей тела персонажа.&lt;br /&gt;
* &#039;&#039;&#039;Internal Organs&#039;&#039;&#039; &#039;&#039;(Заменённые органы)&#039;&#039; - протезирование внутренних органов. Assisted - хуже, bionic - лучше &#039;&#039;(будьте адекватны. Они денег стоят)&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039; Height &#039;&#039;&#039; &#039;&#039;(Рост)&#039;&#039; - данный параметр изменяет рост вашего персонажа.&lt;br /&gt;
* &#039;&#039;&#039; Build &#039;&#039;&#039; &#039;&#039;(Телосложение)&#039;&#039; - данный параметр показывает телосложение вашего персонажа.&lt;br /&gt;
* &#039;&#039;&#039;Hair&#039;&#039;&#039; &#039;&#039;(Волосы)&#039;&#039; - изменение цвета и внешнего вида причёски персонажа.&lt;br /&gt;
* &#039;&#039;&#039;Facial&#039;&#039;&#039; &#039;&#039;(Борода)&#039;&#039; - выбираете цвет и внешнего вида бороды персонажа.&lt;br /&gt;
* &#039;&#039;&#039;Eyes&#039;&#039;&#039; &#039;&#039;(Глаза)&#039;&#039; - изменение цвета глаз.&lt;br /&gt;
* &#039;&#039;&#039;Body Markings&#039;&#039;&#039; &#039;&#039;(Отметки на теле)&#039;&#039; - данный параметр задает наличие (или отсутствие) у вас татуировок и прочих косметических отметок на теле.&lt;br /&gt;
* &#039;&#039;&#039;Underwear, top&#039;&#039;&#039; &#039;&#039;(Бюстгальтер/топик)&#039;&#039; - выбор вида и цвета нижнего белья для груди, предпочтительно женщинам &#039;&#039;(но кто узнает?)&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Underwear, bottom&#039;&#039;&#039; &#039;&#039;(Трусы)&#039;&#039; - выбор вида и цвета нижнего белья для паха.&lt;br /&gt;
* &#039;&#039;&#039;Socks&#039;&#039;&#039; &#039;&#039;(Носки)&#039;&#039; - выбор вида и цвета носков. Не совмещать со сланцами.&lt;br /&gt;
* &#039;&#039;&#039;Undershirt&#039;&#039;&#039; &#039;&#039;(Футболки)&#039;&#039; - выбор вида и цвета футболок.&lt;br /&gt;
* &#039;&#039;&#039;Backpack Type&#039;&#039;&#039; &#039;&#039;(Тип Рюкзака)&#039;&#039; - при заходе в игру, как правило, персонажу выдается рюкзак. Выберите его внешний вид - настоящий рюкзак, сумка, кожаная сумка, или маленькая сумка. Последняя обладает меньшим размером, чем все иные.&lt;br /&gt;
* &#039;&#039;&#039;Flavor&#039;&#039;&#039; - внешнее описание Вашего персонажа. Проявите дотошность к деталям. Не обязательно, но Вас запомнят лучше.&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
[[Файл:SS13BG+1.png|Setup Character - Background]]&lt;br /&gt;
#&#039;&#039;&#039;Home System&#039;&#039;&#039; &#039;&#039;(Родная Система)&#039;&#039; - планетарное скопление, в котором родился Ваш персонаж.&lt;br /&gt;
#*&#039;&#039;&#039;Citizenship&#039;&#039;&#039; &#039;&#039;([[Колонии, от горнодобывающих центров до Нью-Нью-Йорка! |Гражданство]])&#039;&#039; - Может отличаться от Home System. Гражданство ПСС только для людей и их подвидов.&lt;br /&gt;
#*&#039;&#039;&#039;Faction&#039;&#039;&#039; &#039;&#039;(Фракция)&#039;&#039; - фракция, к которой принадлежит персонаж. Вы можете выбрать [[Центральное Правительство Солнечной Системы | Правительство]], [[Гильгамешская Колониальная Конфедерация | Конфедерацию]] или одну из [[Итак, Вы хотите узнать о мире корпораций? | Межзвездных Корпораций]].&lt;br /&gt;
#*&#039;&#039;&#039;Religion&#039;&#039;&#039; &#039;&#039;(Религия)&#039;&#039; - исповедуемая персонажем религия.&lt;br /&gt;
#&#039;&#039;&#039;Languages&#039;&#039;&#039; &#039;&#039;(Языки)&#039;&#039; - известные Вашему персонажу языки. В игре есть множество языков и Вы можете выбрать 2 дополнительных языка, которые персонаж будет понимать и свободно говорить. Список языков - [[Языки | языки]]&lt;br /&gt;
#&#039;&#039;&#039;&#039;&#039;Records&#039;&#039;&#039;&#039;&#039; &#039;&#039;(Записи)&#039;&#039; - [[Записи в личном деле | записи в базе данных о персонаже]]. &lt;br /&gt;
#*Medical - медицинские записи. Доступны врачам.&lt;br /&gt;
#*Employment - личное дело. Профессиональные записи.&lt;br /&gt;
#*Security - записи Службы Безопасности.&lt;br /&gt;
&lt;br /&gt;
== Occupation ==&lt;br /&gt;
[[Файл:SS13OC+1.png|Setup Character - Occupation]]&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Veiw Skills&#039;&#039;&#039; &#039;&#039;(Скиллы)&#039;&#039; - при нажатие открывает меню настройки скиллов персонажа, так же имеется ограничение, которое зависит от возраста и профессии. &lt;br /&gt;
# &#039;&#039;&#039;Приоритет&#039;&#039;&#039; - настраиваемый приоритет профессии, обратите внимание, что высокий может быть только один.&lt;br /&gt;
Здесь находится длинный список [[Навыки|умений персонажа]]. На Infinity принят высокий/средний уровень ролевой игры, поэтому навыки стоит распределить в соответствии с той или иной ролью на корабле. Например, очень странно увидеть электрика мастерски владеющего огнестрельным оружием, или начальника службы охраны - профессионала в сфере электротехники. Набор навыков указывается для каждой профессии отдельно. &#039;&#039;&#039;Обязательно&#039;&#039;&#039; распределите очки навыков перед началом игры. Например, некоторый уровень навыков в сфере готовки и ботаники очень распространен среди пассажиров.&lt;br /&gt;
&lt;br /&gt;
== Roles ==&lt;br /&gt;
[[Файл:SS13RL.png|Setup Character - Roles]]&lt;br /&gt;
# &#039;&#039;&#039;Аплинк&#039;&#039;&#039; - Выбор приоритета вида аплинка, он доступен для [[Предатель|предателя]].&lt;br /&gt;
# &#039;&#039;&#039;Приоритет ролей&#039;&#039;&#039; - при высоком приоритете роль выдаётся в первую очередь, при низком - в последнею.&lt;br /&gt;
&lt;br /&gt;
== Matchmaking ==&lt;br /&gt;
[[Файл:SS13MCH.png|Setup Character - Matchmaking]]&lt;br /&gt;
&lt;br /&gt;
Тут можно включить себе случайный врагов и друзей.&lt;br /&gt;
&lt;br /&gt;
Враги не дают вам право убивать их при первой возможности, да и убивать вообще.&lt;br /&gt;
&lt;br /&gt;
Можно расписать, что о вас будут знать, например - Любит персики и пить кофе.&lt;br /&gt;
&lt;br /&gt;
== Loadout ==&lt;br /&gt;
[[Файл:SS13LD.png|Setup Character - Loadout]]&lt;br /&gt;
&lt;br /&gt;
Тут можно взять снаряжение, но некоторая его часть доступна только определенным профессиям.&lt;br /&gt;
== Global and Laws ==&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Laws&#039;&#039;&#039; - законы для [[ИПС]] и [[Робот| роботов]]&lt;br /&gt;
# &#039;&#039;&#039;Global&#039;&#039;&#039; - различные настройки игры, рекомендуется выставить FPS в диапазоне 40-60.&lt;br /&gt;
== Рекомендуемые действия при входе в игру ==&lt;br /&gt;
&lt;br /&gt;
* Если Вы уже прочитали правила, предупредите администрацию, что Вы являетесь новичком в игре и играете первый раз. Для этого используйте кнопку &#039;&#039;&#039;F1&#039;&#039;&#039; или воспользуйтесь кнопкой в левой части экрана, кнопка называется &#039;&#039;&#039;AdminHelp&#039;&#039;&#039; и находится во вкладке &#039;&#039;&#039;Admin&#039;&#039;&#039;.&lt;br /&gt;
* Постарайтесь не брать работы командования кораблём в первое время.&lt;br /&gt;
&lt;br /&gt;
= Вы в игре! =&lt;br /&gt;
Поздравляю, вы стали частью нашей компании! Теперь осмотритесь и запомните интерфейс, с ним вы проведете много времени. Это последние советы, которые вы от нас получите:&lt;br /&gt;
&lt;br /&gt;
# Разберитесь с основными слотами и управлением. Ознакомиться с управлением Вы сможете в следующей статье: [[Управление | Управление]]. Если у вас появятся вопросы - свяжитесь с администрацией.&lt;br /&gt;
# Если Вы поняли основы, то начинайте двигаться по кораблю, никому не мешая. Рассмотрите бортовые системы, оцените их работу. Осмотрите местоположение всех отсеков на корабле.&lt;br /&gt;
# Когда Вы освоились, Вы можете постепенно начинать осваивать различные сферы. Вы можете взять лазертаг в хранилище крио, и предложить кому нибудь сыграть, купить карты в торговом автомате с игрушками, написать книгу и с помощью сканера и консоли внести ее в архив. В вашем распоряжении целый корабль, а также море возможностей для отыгрыша!&lt;br /&gt;
# Ради интереса почитайте [[История_вселенной_Baystation12|предысторию]] и другие статьи нашей вики.&lt;br /&gt;
&lt;br /&gt;
= Интерфейс =&lt;br /&gt;
[[Файл:DolgaFotkat.png]]&lt;br /&gt;
#Руки. Ими можно брать и использовать предметы.&lt;br /&gt;
#Карманы. Можно положить в них маленькие предметы.&lt;br /&gt;
#Спина. Обычно используется для сумки, но можно повесить оружие, которое не лезет на пояс.&lt;br /&gt;
#Пояс. Обычное место для поясов или оружия.&lt;br /&gt;
#Карта. Логично что там должна быть карта и желательно в ПДА.&lt;br /&gt;
#Слот скафандра, бронежилета, халата и т.д.&lt;br /&gt;
#Обувь. Слот для сланцев, ботов, кроссовок и т.д.&lt;br /&gt;
#Верхняя одежда. Слот для халатов, скафандров, бронежилетов и т.д&lt;br /&gt;
#Перчатки.&lt;br /&gt;
#Маска. Можно надеть что-либо закрывающее лицо.&lt;br /&gt;
#Основная одежда.&lt;br /&gt;
#Очки.&lt;br /&gt;
#Наушники.&lt;br /&gt;
#Шлем. Можно надеть некоторых животных.&lt;br /&gt;
#Кукла состояния персонажа.&lt;br /&gt;
#Управление подачей кислорода.&lt;br /&gt;
#Кукла взаимодействия.&lt;br /&gt;
#Бег\ходьба.&lt;br /&gt;
#Режимы взаимодействия. Harm - удары. Grab - захваты. Help - помощь, поднятие с пола кого-либо, основной режим взаимодействия. Disarm - обезоружение.&lt;br /&gt;
#Автонаводка\ручная стрельба.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Администрация сервера и редакция вики желает Вам приятной игры и отличного настроения!&#039;&#039;&#039;&lt;br /&gt;
{{Navbox_guide}}{{relevant}}[[Категория:‏‎Руководства]]&lt;/div&gt;</summary>
		<author><name>Azizonkg</name></author>
	</entry>
	<entry>
		<id>https://sierra.ss220.space/index.php?title=%D0%9A%D0%B0%D0%BA_%D0%BD%D0%B0%D1%87%D0%B0%D1%82%D1%8C_%D0%B8%D0%B3%D1%80%D0%B0%D1%82%D1%8C&amp;diff=10282</id>
		<title>Как начать играть</title>
		<link rel="alternate" type="text/html" href="https://sierra.ss220.space/index.php?title=%D0%9A%D0%B0%D0%BA_%D0%BD%D0%B0%D1%87%D0%B0%D1%82%D1%8C_%D0%B8%D0%B3%D1%80%D0%B0%D1%82%D1%8C&amp;diff=10282"/>
		<updated>2021-11-10T18:35:12Z</updated>

		<summary type="html">&lt;p&gt;Azizonkg: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;Первый раз в первый класс!&#039;&#039; Это руководство написано для людей, которые только узнали о игре Space Station 13, или же начинают делать в ней свои первые шаги.&lt;br /&gt;
= BYOND =&lt;br /&gt;
Для того, чтобы играть на серверах Space Station 13 нужна программа BYOND. Она является некой платформой, с которой осуществляется вход в игру.&lt;br /&gt;
&lt;br /&gt;
# Зайдите на сайт [http://www.byond.com/ BYOND]. Оттуда скачайте [http://www.byond.com/download/build/511/511.1384_byond.exe установщик BYOND].&lt;br /&gt;
# Запустите скачанный установщик, установите.&lt;br /&gt;
# [https://secure.byond.com/Join Зарегистрируйтесь на сайте.]&lt;br /&gt;
# Произведите вход, используя данные своего аккаунта.&lt;br /&gt;
&#039;&#039;Иногда бывают вылеты/ошибки у BYOND, для помощи обратитесь в [https://discord.ss220.space дискорд]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
= Первый заход в игру = &lt;br /&gt;
Вы установили BYOND, прекрасно. Теперь вам остается лишь зайти на наш сервер и начать играть.&lt;br /&gt;
&lt;br /&gt;
* Откройте BYOND.&lt;br /&gt;
* Зажмите сочетание клавиш &#039;&#039;&#039;&amp;quot;Сtrl + O&amp;quot;&#039;&#039;&#039; (или нажмите шестеренку, а там на Open).&lt;br /&gt;
* Введите в верхнюю строку постоянный IP-адрес нашего сервера - &amp;lt;nowiki&amp;gt; byond://play.ss220.space:7725 &amp;lt;/nowiki&amp;gt;, и нажмите &#039;&#039;&#039;OK&#039;&#039;&#039;.&lt;br /&gt;
* Обязательно ознакомьтесь с [[Правила сервера | правилами сервера]], чтобы не испортить игру другим и не быть забаненным в первые часы. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Важно:&#039;&#039;&#039; Помните, что сервер Infinity является РП сервером, где от Вас требуется максимальный отыгрыш своей роли в игре. Постарайтесь вжиться в роль, подробнее в [[общее руководство по ролевому отыгрышу|руководстве по ролевому отыгрышу]].&lt;br /&gt;
&lt;br /&gt;
= Ваш первый персонаж =&lt;br /&gt;
После входа в игру вы окажетесь в лобби игры, где вы можете настроить персонажа, войти в игру, войти в игру в роли призрака, которого никто не видит. Разберем каждую кнопку по пунктам:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Настройки&#039;&#039;&#039; - там вы создаете вашего персонаж и настраиваете другие нюансы.&lt;br /&gt;
* &#039;&#039;&#039;Список экипажа&#039;&#039;&#039; - список персонажей в игре по профессиям.&lt;br /&gt;
* &#039;&#039;&#039;Зайти в раунд!&#039;&#039;&#039; - кнопка входа в игру с выбором профессии. Рекомендуем заранее выбрать слот с вашим персонажа в &#039;&#039;&#039;Setup Character&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Наблюдать&#039;&#039;&#039; - кнопка входа в игру в качестве наблюдателя (призрака).&lt;br /&gt;
&lt;br /&gt;
= Setup Character =&lt;br /&gt;
Создаем вашего первого персонажа для сервера. Это не так просто как вы думаете :)&lt;br /&gt;
&lt;br /&gt;
== General ==&lt;br /&gt;
&lt;br /&gt;
[[Файл:SS13GG.jpg|400px|thumb|right|Setup Character]]&lt;br /&gt;
* &#039;&#039;&#039;Name&#039;&#039;&#039; &#039;&#039;(Имя)&#039;&#039; - Придумайте или выставьте случайное имя своему персонажу. Кнопка для генерации расположена немного ниже.&lt;br /&gt;
* &#039;&#039;&#039;Always Random Name&#039;&#039;&#039; &#039;&#039;(Каждый раунд будет генерироваться новое имя)&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Gender&#039;&#039;&#039; &#039;&#039;(Пол)&#039;&#039; - нажимаете на Male/Female и пол персонажа сменится.&lt;br /&gt;
* &#039;&#039;&#039;Age&#039;&#039;&#039; &#039;&#039;(Возраст)&#039;&#039; - возраст персонажа. Учтите, что некоторые профессии и должности могут потребовать возраста не ниже определенной планки. [https://wiki.infinity-ss13.info/index.php?title=%D0%A2%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0_%D0%B2%D0%BE%D0%B7%D1%80%D0%B0%D1%81%D1%82%D0%BE%D0%B2_%D0%B8_%D0%B4%D0%BE%D0%BB%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B5%D0%B9 Таблица возрастов и должностей].&lt;br /&gt;
* &#039;&#039;&#039;Spawn Point&#039;&#039;&#039; &#039;&#039;(Место появления)&#039;&#039; - место, где Вы появляетесь на карте. Обычно, привязано к стартовой локации &#039;&#039;(крио-капсулы)&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Body&#039;&#039;&#039; &#039;&#039;(Тело)&#039;&#039; - случайная генерация всех характеристик персонажа. &lt;br /&gt;
* &#039;&#039;&#039;Species&#039;&#039;&#039; &#039;&#039;(Вид)&#039;&#039; -  выбор расы. Каждая раса немного отличается в плане игровой механики. Настоятельно рекомендуется на первое время выбирать &amp;quot;Human&amp;quot;. Для дополнительных рас нужен вайт лист.&lt;br /&gt;
* &#039;&#039;&#039;Blood Type&#039;&#039;&#039; &#039;&#039;(Тип крови)&#039;&#039; - выбираете тип крови. Важно при переливании крови.&lt;br /&gt;
* &#039;&#039;&#039;Skin Tone&#039;&#039;&#039; &#039;&#039;(Цвет кожи)&#039;&#039; - выставляете нужное значение и палитра кожи Вашего персонажа изменяется.&lt;br /&gt;
* &#039;&#039;&#039;Needs Glasses&#039;&#039;&#039; &#039;&#039;(Необходимость в очках)&#039;&#039; - добавляете врожденный дефект зрения персонажу, из-за чего ухудшается зрение в игре &#039;&#039;(очки можно взять в лодауте)&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Limbs&#039;&#039;&#039; &#039;&#039;(Замена частей тела)&#039;&#039; - [[Протезы | протезирование]] или удаление частей тела персонажа.&lt;br /&gt;
* &#039;&#039;&#039;Internal Organs&#039;&#039;&#039; &#039;&#039;(Заменённые органы)&#039;&#039; - протезирование внутренних органов. Assisted - хуже, bionic - лучше &#039;&#039;(будьте адекватны. Они денег стоят)&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039; Height &#039;&#039;&#039; &#039;&#039;(Рост)&#039;&#039; - данный параметр изменяет рост вашего персонажа.&lt;br /&gt;
* &#039;&#039;&#039; Build &#039;&#039;&#039; &#039;&#039;(Телосложение)&#039;&#039; - данный параметр показывает телосложение вашего персонажа.&lt;br /&gt;
* &#039;&#039;&#039;Hair&#039;&#039;&#039; &#039;&#039;(Волосы)&#039;&#039; - изменение цвета и внешнего вида причёски персонажа.&lt;br /&gt;
* &#039;&#039;&#039;Facial&#039;&#039;&#039; &#039;&#039;(Борода)&#039;&#039; - выбираете цвет и внешнего вида бороды персонажа.&lt;br /&gt;
* &#039;&#039;&#039;Eyes&#039;&#039;&#039; &#039;&#039;(Глаза)&#039;&#039; - изменение цвета глаз.&lt;br /&gt;
* &#039;&#039;&#039;Body Markings&#039;&#039;&#039; &#039;&#039;(Отметки на теле)&#039;&#039; - данный параметр задает наличие (или отсутствие) у вас татуировок и прочих косметических отметок на теле.&lt;br /&gt;
* &#039;&#039;&#039;Underwear, top&#039;&#039;&#039; &#039;&#039;(Бюстгальтер/топик)&#039;&#039; - выбор вида и цвета нижнего белья для груди, предпочтительно женщинам &#039;&#039;(но кто узнает?)&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;Underwear, bottom&#039;&#039;&#039; &#039;&#039;(Трусы)&#039;&#039; - выбор вида и цвета нижнего белья для паха.&lt;br /&gt;
* &#039;&#039;&#039;Socks&#039;&#039;&#039; &#039;&#039;(Носки)&#039;&#039; - выбор вида и цвета носков. Не совмещать со сланцами.&lt;br /&gt;
* &#039;&#039;&#039;Undershirt&#039;&#039;&#039; &#039;&#039;(Футболки)&#039;&#039; - выбор вида и цвета футболок.&lt;br /&gt;
* &#039;&#039;&#039;Backpack Type&#039;&#039;&#039; &#039;&#039;(Тип Рюкзака)&#039;&#039; - при заходе в игру, как правило, персонажу выдается рюкзак. Выберите его внешний вид - настоящий рюкзак, сумка, кожаная сумка, или маленькая сумка. Последняя обладает меньшим размером, чем все иные.&lt;br /&gt;
* &#039;&#039;&#039;Flavor&#039;&#039;&#039; - внешнее описание Вашего персонажа. Проявите дотошность к деталям. Не обязательно, но Вас запомнят лучше.&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
[[Файл:SS13BG+1.png|Setup Character - Background]]&lt;br /&gt;
#&#039;&#039;&#039;Home System&#039;&#039;&#039; &#039;&#039;(Родная Система)&#039;&#039; - планетарное скопление, в котором родился Ваш персонаж.&lt;br /&gt;
#*&#039;&#039;&#039;Citizenship&#039;&#039;&#039; &#039;&#039;([[Колонии, от горнодобывающих центров до Нью-Нью-Йорка! |Гражданство]])&#039;&#039; - Может отличаться от Home System. Гражданство ПСС только для людей и их подвидов.&lt;br /&gt;
#*&#039;&#039;&#039;Faction&#039;&#039;&#039; &#039;&#039;(Фракция)&#039;&#039; - фракция, к которой принадлежит персонаж. Вы можете выбрать [[Центральное Правительство Солнечной Системы | Правительство]], [[Гильгамешская Колониальная Конфедерация | Конфедерацию]] или одну из [[Итак, Вы хотите узнать о мире корпораций? | Межзвездных Корпораций]].&lt;br /&gt;
#*&#039;&#039;&#039;Religion&#039;&#039;&#039; &#039;&#039;(Религия)&#039;&#039; - исповедуемая персонажем религия.&lt;br /&gt;
#&#039;&#039;&#039;Languages&#039;&#039;&#039; &#039;&#039;(Языки)&#039;&#039; - известные Вашему персонажу языки. В игре есть множество языков и Вы можете выбрать 2 дополнительных языка, которые персонаж будет понимать и свободно говорить. Список языков - [[Языки | языки]]&lt;br /&gt;
#&#039;&#039;&#039;&#039;&#039;Records&#039;&#039;&#039;&#039;&#039; &#039;&#039;(Записи)&#039;&#039; - [[Записи в личном деле | записи в базе данных о персонаже]]. &lt;br /&gt;
#*Medical - медицинские записи. Доступны врачам.&lt;br /&gt;
#*Employment - личное дело. Профессиональные записи.&lt;br /&gt;
#*Security - записи Службы Безопасности.&lt;br /&gt;
&lt;br /&gt;
== Occupation ==&lt;br /&gt;
[[Файл:SS13OC+1.png|Setup Character - Occupation]]&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Veiw Skills&#039;&#039;&#039; &#039;&#039;(Скиллы)&#039;&#039; - при нажатие открывает меню настройки скиллов персонажа, так же имеется ограничение, которое зависит от возраста и профессии. &lt;br /&gt;
# &#039;&#039;&#039;Приоритет&#039;&#039;&#039; - настраиваемый приоритет профессии, обратите внимание, что высокий может быть только один.&lt;br /&gt;
Здесь находится длинный список [[Навыки|умений персонажа]]. На Infinity принят высокий/средний уровень ролевой игры, поэтому навыки стоит распределить в соответствии с той или иной ролью на корабле. Например, очень странно увидеть электрика мастерски владеющего огнестрельным оружием, или начальника службы охраны - профессионала в сфере электротехники. Набор навыков указывается для каждой профессии отдельно. &#039;&#039;&#039;Обязательно&#039;&#039;&#039; распределите очки навыков перед началом игры. Например, некоторый уровень навыков в сфере готовки и ботаники очень распространен среди пассажиров.&lt;br /&gt;
&lt;br /&gt;
== Roles ==&lt;br /&gt;
[[Файл:SS13RL.png|Setup Character - Roles]]&lt;br /&gt;
# &#039;&#039;&#039;Аплинк&#039;&#039;&#039; - Выбор приоритета вида аплинка, он доступен для [[Предатель|предателя]].&lt;br /&gt;
# &#039;&#039;&#039;Приоритет ролей&#039;&#039;&#039; - при высоком приоритете роль выдаётся в первую очередь, при низком - в последнею.&lt;br /&gt;
&lt;br /&gt;
== Matchmaking ==&lt;br /&gt;
[[Файл:SS13MCH.png|Setup Character - Matchmaking]]&lt;br /&gt;
&lt;br /&gt;
Тут можно включить себе случайный врагов и друзей.&lt;br /&gt;
&lt;br /&gt;
Враги не дают вам право убивать их при первой возможности, да и убивать вообще.&lt;br /&gt;
&lt;br /&gt;
Можно расписать, что о вас будут знать, например - Любит персики и пить кофе.&lt;br /&gt;
&lt;br /&gt;
== Loadout ==&lt;br /&gt;
[[Файл:SS13LD.png|Setup Character - Loadout]]&lt;br /&gt;
&lt;br /&gt;
Тут можно взять снаряжение, но некоторая его часть доступна только определенным профессиям.&lt;br /&gt;
== Global and Laws ==&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;&#039;Laws&#039;&#039;&#039; - законы для [[ИПС]] и [[Робот| роботов]]&lt;br /&gt;
# &#039;&#039;&#039;Global&#039;&#039;&#039; - различные настройки игры, рекомендуется выставить FPS в диапазоне 40-60.&lt;br /&gt;
== Рекомендуемые действия при входе в игру ==&lt;br /&gt;
&lt;br /&gt;
* Если Вы уже прочитали правила, предупредите администрацию, что Вы являетесь новичком в игре и играете первый раз. Для этого используйте кнопку &#039;&#039;&#039;F1&#039;&#039;&#039; или воспользуйтесь кнопкой в левой части экрана, кнопка называется &#039;&#039;&#039;AdminHelp&#039;&#039;&#039; и находится во вкладке &#039;&#039;&#039;Admin&#039;&#039;&#039;.&lt;br /&gt;
* Постарайтесь не брать работы командования кораблём в первое время.&lt;br /&gt;
&lt;br /&gt;
= Вы в игре! =&lt;br /&gt;
Поздравляю, вы стали частью нашей компании! Теперь осмотритесь и запомните интерфейс, с ним вы проведете много времени. Это последние советы, которые вы от нас получите:&lt;br /&gt;
&lt;br /&gt;
# Разберитесь с основными слотами и управлением. Ознакомиться с управлением Вы сможете в следующей статье: [[Управление | Управление]]. Если у вас появятся вопросы - свяжитесь с администрацией.&lt;br /&gt;
# Если Вы поняли основы, то начинайте двигаться по кораблю, никому не мешая. Рассмотрите бортовые системы, оцените их работу. Осмотрите местоположение всех отсеков на корабле.&lt;br /&gt;
# Когда Вы освоились, Вы можете постепенно начинать осваивать различные сферы. Вы можете взять лазертаг в хранилище крио, и предложить кому нибудь сыграть, купить карты в торговом автомате с игрушками, написать книгу и с помощью сканера и консоли внести ее в архив. В вашем распоряжении целый корабль, а также море возможностей для отыгрыша!&lt;br /&gt;
# Ради интереса почитайте [[История_вселенной_Baystation12|предысторию]] и другие статьи нашей вики.&lt;br /&gt;
&lt;br /&gt;
= Интерфейс =&lt;br /&gt;
[[Файл:DolgaFotkat.png]]&lt;br /&gt;
#Руки. Ими можно брать и использовать предметы.&lt;br /&gt;
#Карманы. Можно положить в них маленькие предметы.&lt;br /&gt;
#Спина. Обычно используется для сумки, но можно повесить оружие, которое не лезет на пояс.&lt;br /&gt;
#Пояс. Обычное место для поясов или оружия.&lt;br /&gt;
#Карта. Логично что там должна быть карта и желательно в ПДА.&lt;br /&gt;
#Слот скафандра, бронежилета, халата и т.д.&lt;br /&gt;
#Обувь. Слот для сланцев, ботов, кроссовок и т.д.&lt;br /&gt;
#Верхняя одежда. Слот для халатов, скафандров, бронежилетов и т.д&lt;br /&gt;
#Перчатки.&lt;br /&gt;
#Маска. Можно надеть что-либо закрывающее лицо.&lt;br /&gt;
#Основная одежда.&lt;br /&gt;
#Очки.&lt;br /&gt;
#Наушники.&lt;br /&gt;
#Шлем. Можно надеть некоторых животных.&lt;br /&gt;
#Кукла состояния персонажа.&lt;br /&gt;
#Управление подачей кислорода.&lt;br /&gt;
#Кукла взаимодействия.&lt;br /&gt;
#Бег\ходьба.&lt;br /&gt;
#Режимы взаимодействия. Harm - удары. Grab - захваты. Help - помощь, поднятие с пола кого-либо, основной режим взаимодействия. Disarm - обезоружение.&lt;br /&gt;
#Автонаводка\ручная стрельба.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Администрация сервера и редакция вики желает Вам приятной игры и отличного настроения!&#039;&#039;&#039;&lt;br /&gt;
{{Navbox_guide}}{{relevant}}[[Категория:‏‎Руководства]]&lt;/div&gt;</summary>
		<author><name>Azizonkg</name></author>
	</entry>
	<entry>
		<id>https://sierra.ss220.space/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:No_globals&amp;diff=9897</id>
		<title>Модуль:No globals</title>
		<link rel="alternate" type="text/html" href="https://sierra.ss220.space/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:No_globals&amp;diff=9897"/>
		<updated>2021-10-18T04:27:29Z</updated>

		<summary type="html">&lt;p&gt;Azizonkg: Защитил страницу Модуль:No globals ([Редактирование=Разрешено только администраторам] (бессрочно) [Переименование=Разрешено только администраторам] (бессрочно))&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--[[local mt = getmetatable(_G) or {}&lt;br /&gt;
function mt.__index (t, k)&lt;br /&gt;
	if k ~= &#039;arg&#039; then&lt;br /&gt;
		error(&#039;Tried to read nil global &#039; .. tostring(k), 2)&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
function mt.__newindex(t, k, v)&lt;br /&gt;
	if k ~= &#039;arg&#039; then&lt;br /&gt;
		error(&#039;Tried to write global &#039; .. tostring(k), 2)&lt;br /&gt;
	end&lt;br /&gt;
	rawset(t, k, v)&lt;br /&gt;
end&lt;br /&gt;
setmetatable(_G, mt)]]--&lt;/div&gt;</summary>
		<author><name>Azizonkg</name></author>
	</entry>
	<entry>
		<id>https://sierra.ss220.space/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:No_globals&amp;diff=9896</id>
		<title>Модуль:No globals</title>
		<link rel="alternate" type="text/html" href="https://sierra.ss220.space/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:No_globals&amp;diff=9896"/>
		<updated>2021-10-18T04:27:23Z</updated>

		<summary type="html">&lt;p&gt;Azizonkg: Новая страница: «--[[local mt = getmetatable(_G) or {} function mt.__index (t, k) 	if k ~= &amp;#039;arg&amp;#039; then 		error(&amp;#039;Tried to read nil global &amp;#039; .. tostring(k), 2) 	end 	return nil end f...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--[[local mt = getmetatable(_G) or {}&lt;br /&gt;
function mt.__index (t, k)&lt;br /&gt;
	if k ~= &#039;arg&#039; then&lt;br /&gt;
		error(&#039;Tried to read nil global &#039; .. tostring(k), 2)&lt;br /&gt;
	end&lt;br /&gt;
	return nil&lt;br /&gt;
end&lt;br /&gt;
function mt.__newindex(t, k, v)&lt;br /&gt;
	if k ~= &#039;arg&#039; then&lt;br /&gt;
		error(&#039;Tried to write global &#039; .. tostring(k), 2)&lt;br /&gt;
	end&lt;br /&gt;
	rawset(t, k, v)&lt;br /&gt;
end&lt;br /&gt;
setmetatable(_G, mt)]]--&lt;/div&gt;</summary>
		<author><name>Azizonkg</name></author>
	</entry>
	<entry>
		<id>https://sierra.ss220.space/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Sidebar&amp;diff=9895</id>
		<title>Модуль:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://sierra.ss220.space/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Sidebar&amp;diff=9895"/>
		<updated>2021-10-18T04:25:48Z</updated>

		<summary type="html">&lt;p&gt;Azizonkg: Защитил страницу Модуль:Sidebar ([Редактирование=Разрешено только администраторам] (бессрочно) [Переименование=Разрешено только администраторам] (бессрочно))&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--&lt;br /&gt;
-- This module implements {{Sidebar}}&lt;br /&gt;
--&lt;br /&gt;
require(&#039;Module:No globals&#039;)&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local getArgs = require(&#039;Module:Arguments&#039;).getArgs&lt;br /&gt;
local navbar = require(&#039;Module:Navbar&#039;)._navbar&lt;br /&gt;
&lt;br /&gt;
local function trimAndAddAutomaticNewline(s)&lt;br /&gt;
	-- For compatibility with the original {{sidebar with collapsible lists}}&lt;br /&gt;
	-- implementation, which passed some parameters through {{#if}} to trim&lt;br /&gt;
	-- their whitespace. This also triggered the automatic newline behavior.&lt;br /&gt;
	-- ([[meta:Help:Newlines and spaces#Automatic newline]])&lt;br /&gt;
	s = mw.ustring.gsub(s, &amp;quot;^%s*(.-)%s*$&amp;quot;, &amp;quot;%1&amp;quot;)&lt;br /&gt;
	if mw.ustring.find(s, &#039;^[#*:;]&#039;) or mw.ustring.find(s, &#039;^{|&#039;) then&lt;br /&gt;
		return &#039;\n&#039; .. s&lt;br /&gt;
	else&lt;br /&gt;
		return s&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.sidebar(frame, args)&lt;br /&gt;
	if not args then&lt;br /&gt;
		args = getArgs(frame)&lt;br /&gt;
	end&lt;br /&gt;
	local root = mw.html.create()&lt;br /&gt;
	local child = args.child and mw.text.trim(args.child) == &#039;yes&#039;&lt;br /&gt;
&lt;br /&gt;
	if not child then&lt;br /&gt;
		root = root&lt;br /&gt;
			:tag(&#039;table&#039;)&lt;br /&gt;
			:addClass(&#039;vertical-navbox&#039;)&lt;br /&gt;
			:addClass(args.wraplinks ~= &#039;true&#039; and &#039;nowraplinks&#039; or nil)&lt;br /&gt;
			:addClass(args.bodyclass or args.class)&lt;br /&gt;
			:css(&#039;float&#039;, args.float or &#039;right&#039;)&lt;br /&gt;
			:css(&#039;clear&#039;, (args.float == &#039;none&#039; and &#039;both&#039;) or args.float or &#039;right&#039;)&lt;br /&gt;
			:css(&#039;width&#039;, args.width or &#039;22.0em&#039;)&lt;br /&gt;
			:css(&#039;margin&#039;, args.float == &#039;left&#039; and &#039;0 1.0em 1.0em 0&#039; or &#039;0 0 1.0em 1.0em&#039;)&lt;br /&gt;
			:css(&#039;background&#039;, &#039;#f9f9f9&#039;)&lt;br /&gt;
			:css(&#039;border&#039;, &#039;1px solid #aaa&#039;)&lt;br /&gt;
			:css(&#039;padding&#039;, &#039;0.2em&#039;)&lt;br /&gt;
			:css(&#039;border-spacing&#039;, &#039;0.4em 0&#039;)&lt;br /&gt;
			:css(&#039;text-align&#039;, &#039;center&#039;)&lt;br /&gt;
			:css(&#039;line-height&#039;, &#039;1.4em&#039;)&lt;br /&gt;
			:css(&#039;font-size&#039;, &#039;88%&#039;)&lt;br /&gt;
			:cssText(args.bodystyle or args.style)&lt;br /&gt;
&lt;br /&gt;
		if args.outertitle then&lt;br /&gt;
			root&lt;br /&gt;
				:tag(&#039;caption&#039;)&lt;br /&gt;
					:addClass(args.outertitleclass)&lt;br /&gt;
					:css(&#039;padding-bottom&#039;, &#039;0.2em&#039;)&lt;br /&gt;
					:css(&#039;font-size&#039;, &#039;125%&#039;)&lt;br /&gt;
					:css(&#039;line-height&#039;, &#039;1.2em&#039;)&lt;br /&gt;
					:css(&#039;font-weight&#039;, &#039;bold&#039;)&lt;br /&gt;
					:cssText(args.outertitlestyle)&lt;br /&gt;
					:wikitext(args.outertitle)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if args.topimage then&lt;br /&gt;
			local imageCell = root:tag(&#039;tr&#039;):tag(&#039;td&#039;)&lt;br /&gt;
&lt;br /&gt;
			imageCell&lt;br /&gt;
				:addClass(args.topimageclass)&lt;br /&gt;
				:css(&#039;padding&#039;, &#039;0.4em 0&#039;)&lt;br /&gt;
				:cssText(args.topimagestyle)&lt;br /&gt;
				:wikitext(args.topimage)&lt;br /&gt;
&lt;br /&gt;
			if args.topcaption then&lt;br /&gt;
				imageCell&lt;br /&gt;
					:tag(&#039;div&#039;)&lt;br /&gt;
						:css(&#039;padding-top&#039;, &#039;0.2em&#039;)&lt;br /&gt;
						:css(&#039;line-height&#039;, &#039;1.2em&#039;)&lt;br /&gt;
						:cssText(args.topcaptionstyle)&lt;br /&gt;
						:wikitext(args.topcaption)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if args.pretitle then&lt;br /&gt;
			root&lt;br /&gt;
				:tag(&#039;tr&#039;)&lt;br /&gt;
					:tag(&#039;td&#039;)&lt;br /&gt;
						:addClass(args.pretitleclass)&lt;br /&gt;
						:cssText(args.basestyle)&lt;br /&gt;
						:css(&#039;padding-top&#039;, args.topimage and &#039;0.2em&#039; or &#039;0.4em&#039;)&lt;br /&gt;
						:css(&#039;line-height&#039;, &#039;1.2em&#039;)&lt;br /&gt;
						:cssText(args.pretitlestyle)&lt;br /&gt;
						:wikitext(args.pretitle)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args.title then&lt;br /&gt;
		if child then&lt;br /&gt;
			root&lt;br /&gt;
				:wikitext(args.title)&lt;br /&gt;
				:wikitext(&#039;&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&#039;) -- @todo replace this with unclosed again once mw.html gets it&lt;br /&gt;
		else&lt;br /&gt;
			root&lt;br /&gt;
				:tag(&#039;tr&#039;)&lt;br /&gt;
					:tag(&#039;th&#039;)&lt;br /&gt;
						:addClass(args.titleclass)&lt;br /&gt;
						:cssText(args.basestyle)&lt;br /&gt;
						:css(&#039;padding&#039;, &#039;0.2em 0.4em 0.2em&#039;)&lt;br /&gt;
						:css(&#039;padding-top&#039;, args.pretitle and 0)&lt;br /&gt;
						:css(&#039;font-size&#039;, &#039;145%&#039;)&lt;br /&gt;
						:css(&#039;line-height&#039;, &#039;1.2em&#039;)&lt;br /&gt;
						:cssText(args.titlestyle)&lt;br /&gt;
						:wikitext(args.title)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args.image then&lt;br /&gt;
		local imageCell = root:tag(&#039;tr&#039;):tag(&#039;td&#039;)&lt;br /&gt;
&lt;br /&gt;
		imageCell&lt;br /&gt;
			:addClass(args.imageclass)&lt;br /&gt;
			:css(&#039;padding&#039;, &#039;0.2em 0 0.4em&#039;)&lt;br /&gt;
			:cssText(args.imagestyle)&lt;br /&gt;
			:wikitext(args.image)&lt;br /&gt;
&lt;br /&gt;
		if args.caption then&lt;br /&gt;
			imageCell&lt;br /&gt;
				:tag(&#039;div&#039;)&lt;br /&gt;
					:css(&#039;padding-top&#039;, &#039;0.2em&#039;)&lt;br /&gt;
					:css(&#039;line-height&#039;, &#039;1.2em&#039;)&lt;br /&gt;
					:cssText(args.captionstyle)&lt;br /&gt;
					:wikitext(args.caption)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args.above then&lt;br /&gt;
		root&lt;br /&gt;
			:tag(&#039;tr&#039;)&lt;br /&gt;
				:tag(&#039;td&#039;)&lt;br /&gt;
					:addClass(args.aboveclass)&lt;br /&gt;
					:css(&#039;padding&#039;, &#039;0.3em 0.4em 0.3em&#039;)&lt;br /&gt;
					:css(&#039;font-weight&#039;, &#039;bold&#039;)&lt;br /&gt;
					:cssText(args.abovestyle)&lt;br /&gt;
					:newline() -- newline required for bullet-points to work&lt;br /&gt;
					:wikitext(args.above)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local rowNums = {}&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		k = &#039;&#039; .. k&lt;br /&gt;
		local num = k:match(&#039;^heading(%d+)$&#039;) or k:match(&#039;^content(%d+)$&#039;)&lt;br /&gt;
		if num then table.insert(rowNums, tonumber(num)) end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(rowNums)&lt;br /&gt;
	-- remove duplicates from the list (e.g. 3 will be duplicated if both heading3 and content3 are specified)&lt;br /&gt;
	for i = #rowNums, 1, -1 do&lt;br /&gt;
		if rowNums[i] == rowNums[i - 1] then&lt;br /&gt;
			table.remove(rowNums, i)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for i, num in ipairs(rowNums) do&lt;br /&gt;
		local heading = args[&#039;heading&#039; .. num]&lt;br /&gt;
		if heading then&lt;br /&gt;
			root&lt;br /&gt;
				:tag(&#039;tr&#039;)&lt;br /&gt;
					:tag(&#039;th&#039;)&lt;br /&gt;
						:addClass(args.headingclass)&lt;br /&gt;
						:css(&#039;padding&#039;, &#039;0.1em&#039;)&lt;br /&gt;
						:cssText(args.basestyle)&lt;br /&gt;
						:cssText(args.headingstyle)&lt;br /&gt;
						:cssText(args[&#039;heading&#039; .. num .. &#039;style&#039;])&lt;br /&gt;
						:newline()&lt;br /&gt;
						:wikitext(heading)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local content = args[&#039;content&#039; .. num]&lt;br /&gt;
		if content then&lt;br /&gt;
			root&lt;br /&gt;
				:tag(&#039;tr&#039;)&lt;br /&gt;
					:tag(&#039;td&#039;)&lt;br /&gt;
						:addClass(args.contentclass)&lt;br /&gt;
						:css(&#039;padding&#039;, &#039;0 0.1em 0.4em&#039;)&lt;br /&gt;
						:cssText(args.contentstyle)&lt;br /&gt;
						:cssText(args[&#039;content&#039; .. num .. &#039;style&#039;])&lt;br /&gt;
						:newline()&lt;br /&gt;
						:wikitext(content)&lt;br /&gt;
						:done()&lt;br /&gt;
					:newline() -- Without a linebreak after the &amp;lt;/td&amp;gt;, a nested list like &amp;quot;* {{hlist| ...}}&amp;quot; doesn&#039;t parse correctly.&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args.below then&lt;br /&gt;
		root&lt;br /&gt;
			:tag(&#039;tr&#039;)&lt;br /&gt;
				:tag(&#039;td&#039;)&lt;br /&gt;
					:addClass(args.belowclass)&lt;br /&gt;
					:css(&#039;padding&#039;, &#039;0.3em 0.4em 0.3em&#039;)&lt;br /&gt;
					:css(&#039;font-weight&#039;, &#039;bold&#039;)&lt;br /&gt;
					:cssText(args.belowstyle)&lt;br /&gt;
					:newline()&lt;br /&gt;
					:wikitext(args.below)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if not child then&lt;br /&gt;
		local navbarArg = args.navbar or args.tnavbar&lt;br /&gt;
		if navbarArg ~= &#039;none&#039; and navbarArg ~= &#039;off&#039; and (args.name or frame:getParent():getTitle():gsub(&#039;/sandbox$&#039;, &#039;&#039;) ~= &#039;Template:Sidebar&#039;) then&lt;br /&gt;
			root&lt;br /&gt;
				:tag(&#039;tr&#039;)&lt;br /&gt;
					:tag(&#039;td&#039;)&lt;br /&gt;
						:css(&#039;text-align&#039;, &#039;right&#039;)&lt;br /&gt;
						:css(&#039;font-size&#039;, &#039;115%&#039;)&lt;br /&gt;
						:cssText(args.navbarstyle or args.tnavbarstyle)&lt;br /&gt;
						:wikitext(navbar{&lt;br /&gt;
							args.name,&lt;br /&gt;
							mini = 1,&lt;br /&gt;
							fontstyle = args.navbarfontstyle or args.tnavbarfontstyle&lt;br /&gt;
						})&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.collapsible(frame)&lt;br /&gt;
	local args = getArgs(frame)&lt;br /&gt;
&lt;br /&gt;
	args.abovestyle = &#039;border-top: 1px solid #aaa; border-bottom: 1px solid #aaa;&#039; .. (args.abovestyle or &#039;&#039;)&lt;br /&gt;
	args.belowstyle = &#039;border-top: 1px solid #aaa; border-bottom: 1px solid #aaa;&#039; .. (args.belowstyle or &#039;&#039;)&lt;br /&gt;
	args.navbarstyle = &#039;padding-top: 0.6em;&#039; .. (args.navbarstyle or args.tnavbarstyle or &#039;&#039;)&lt;br /&gt;
	if not args.name and frame:getParent():getTitle():gsub(&#039;/sandbox$&#039;, &#039;&#039;) == &#039;Template:Sidebar with collapsible lists&#039; then&lt;br /&gt;
		args.navbar = &#039;none&#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local contentArgs = {}&lt;br /&gt;
&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		local num = string.match(k, &#039;^list(%d+)$&#039;)&lt;br /&gt;
		if num then&lt;br /&gt;
			local expand = args.expanded and (args.expanded == &#039;all&#039; or args.expanded == args[&#039;list&#039; .. num .. &#039;name&#039;])&lt;br /&gt;
&lt;br /&gt;
			local row = mw.html.create(&#039;div&#039;)&lt;br /&gt;
			row&lt;br /&gt;
				:addClass(&#039;NavFrame&#039;)&lt;br /&gt;
				:addClass((not expand) and &#039;collapsed&#039; or nil)&lt;br /&gt;
				:css(&#039;border&#039;, &#039;none&#039;)&lt;br /&gt;
				:css(&#039;padding&#039;, 0)&lt;br /&gt;
				:cssText(args.listframestyle)&lt;br /&gt;
				:cssText(args[&#039;list&#039; .. num .. &#039;framestyle&#039;])&lt;br /&gt;
				:tag(&#039;div&#039;)&lt;br /&gt;
					:addClass(&#039;NavHead&#039;)&lt;br /&gt;
					:addClass(args.listtitleclass)&lt;br /&gt;
					:css(&#039;font-size&#039;, &#039;105%&#039;)&lt;br /&gt;
					:css(&#039;background&#039;, &#039;transparent&#039;)&lt;br /&gt;
					:css(&#039;text-align&#039;, &#039;left&#039;)&lt;br /&gt;
					:cssText(args.basestyle)&lt;br /&gt;
					:cssText(args.listtitlestyle)&lt;br /&gt;
					:cssText(args[&#039;list&#039; .. num .. &#039;titlestyle&#039;])&lt;br /&gt;
					:wikitext(trimAndAddAutomaticNewline(args[&#039;list&#039; .. num .. &#039;title&#039;] or &#039;List&#039;))&lt;br /&gt;
					:done()&lt;br /&gt;
				:tag(&#039;div&#039;)&lt;br /&gt;
					:addClass(&#039;NavContent&#039;)&lt;br /&gt;
					:addClass(args.listclass)&lt;br /&gt;
					:addClass(args[&#039;list&#039; .. num .. &#039;class&#039;])&lt;br /&gt;
					:css(&#039;font-size&#039;, &#039;105%&#039;)&lt;br /&gt;
					:css(&#039;padding&#039;, &#039;0.2em 0 0.4em&#039;)&lt;br /&gt;
					:css(&#039;text-align&#039;, &#039;center&#039;)&lt;br /&gt;
					:cssText(args.liststyle)&lt;br /&gt;
					:cssText(args[&#039;list&#039; .. num .. &#039;style&#039;])&lt;br /&gt;
					:wikitext(trimAndAddAutomaticNewline(args[&#039;list&#039; .. num]))&lt;br /&gt;
&lt;br /&gt;
			contentArgs[&#039;content&#039; .. num] = tostring(row)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for k, v in pairs(contentArgs) do&lt;br /&gt;
		args[k] = v&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return p.sidebar(frame, args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Azizonkg</name></author>
	</entry>
	<entry>
		<id>https://sierra.ss220.space/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Sidebar&amp;diff=9894</id>
		<title>Модуль:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://sierra.ss220.space/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Sidebar&amp;diff=9894"/>
		<updated>2021-10-18T04:25:43Z</updated>

		<summary type="html">&lt;p&gt;Azizonkg: Новая страница: «-- -- This module implements {{Sidebar}} -- require(&amp;#039;Module:No globals&amp;#039;)  local p = {}  local getArgs = require(&amp;#039;Module:Arguments&amp;#039;).getArgs local navbar = require...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--&lt;br /&gt;
-- This module implements {{Sidebar}}&lt;br /&gt;
--&lt;br /&gt;
require(&#039;Module:No globals&#039;)&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local getArgs = require(&#039;Module:Arguments&#039;).getArgs&lt;br /&gt;
local navbar = require(&#039;Module:Navbar&#039;)._navbar&lt;br /&gt;
&lt;br /&gt;
local function trimAndAddAutomaticNewline(s)&lt;br /&gt;
	-- For compatibility with the original {{sidebar with collapsible lists}}&lt;br /&gt;
	-- implementation, which passed some parameters through {{#if}} to trim&lt;br /&gt;
	-- their whitespace. This also triggered the automatic newline behavior.&lt;br /&gt;
	-- ([[meta:Help:Newlines and spaces#Automatic newline]])&lt;br /&gt;
	s = mw.ustring.gsub(s, &amp;quot;^%s*(.-)%s*$&amp;quot;, &amp;quot;%1&amp;quot;)&lt;br /&gt;
	if mw.ustring.find(s, &#039;^[#*:;]&#039;) or mw.ustring.find(s, &#039;^{|&#039;) then&lt;br /&gt;
		return &#039;\n&#039; .. s&lt;br /&gt;
	else&lt;br /&gt;
		return s&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.sidebar(frame, args)&lt;br /&gt;
	if not args then&lt;br /&gt;
		args = getArgs(frame)&lt;br /&gt;
	end&lt;br /&gt;
	local root = mw.html.create()&lt;br /&gt;
	local child = args.child and mw.text.trim(args.child) == &#039;yes&#039;&lt;br /&gt;
&lt;br /&gt;
	if not child then&lt;br /&gt;
		root = root&lt;br /&gt;
			:tag(&#039;table&#039;)&lt;br /&gt;
			:addClass(&#039;vertical-navbox&#039;)&lt;br /&gt;
			:addClass(args.wraplinks ~= &#039;true&#039; and &#039;nowraplinks&#039; or nil)&lt;br /&gt;
			:addClass(args.bodyclass or args.class)&lt;br /&gt;
			:css(&#039;float&#039;, args.float or &#039;right&#039;)&lt;br /&gt;
			:css(&#039;clear&#039;, (args.float == &#039;none&#039; and &#039;both&#039;) or args.float or &#039;right&#039;)&lt;br /&gt;
			:css(&#039;width&#039;, args.width or &#039;22.0em&#039;)&lt;br /&gt;
			:css(&#039;margin&#039;, args.float == &#039;left&#039; and &#039;0 1.0em 1.0em 0&#039; or &#039;0 0 1.0em 1.0em&#039;)&lt;br /&gt;
			:css(&#039;background&#039;, &#039;#f9f9f9&#039;)&lt;br /&gt;
			:css(&#039;border&#039;, &#039;1px solid #aaa&#039;)&lt;br /&gt;
			:css(&#039;padding&#039;, &#039;0.2em&#039;)&lt;br /&gt;
			:css(&#039;border-spacing&#039;, &#039;0.4em 0&#039;)&lt;br /&gt;
			:css(&#039;text-align&#039;, &#039;center&#039;)&lt;br /&gt;
			:css(&#039;line-height&#039;, &#039;1.4em&#039;)&lt;br /&gt;
			:css(&#039;font-size&#039;, &#039;88%&#039;)&lt;br /&gt;
			:cssText(args.bodystyle or args.style)&lt;br /&gt;
&lt;br /&gt;
		if args.outertitle then&lt;br /&gt;
			root&lt;br /&gt;
				:tag(&#039;caption&#039;)&lt;br /&gt;
					:addClass(args.outertitleclass)&lt;br /&gt;
					:css(&#039;padding-bottom&#039;, &#039;0.2em&#039;)&lt;br /&gt;
					:css(&#039;font-size&#039;, &#039;125%&#039;)&lt;br /&gt;
					:css(&#039;line-height&#039;, &#039;1.2em&#039;)&lt;br /&gt;
					:css(&#039;font-weight&#039;, &#039;bold&#039;)&lt;br /&gt;
					:cssText(args.outertitlestyle)&lt;br /&gt;
					:wikitext(args.outertitle)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if args.topimage then&lt;br /&gt;
			local imageCell = root:tag(&#039;tr&#039;):tag(&#039;td&#039;)&lt;br /&gt;
&lt;br /&gt;
			imageCell&lt;br /&gt;
				:addClass(args.topimageclass)&lt;br /&gt;
				:css(&#039;padding&#039;, &#039;0.4em 0&#039;)&lt;br /&gt;
				:cssText(args.topimagestyle)&lt;br /&gt;
				:wikitext(args.topimage)&lt;br /&gt;
&lt;br /&gt;
			if args.topcaption then&lt;br /&gt;
				imageCell&lt;br /&gt;
					:tag(&#039;div&#039;)&lt;br /&gt;
						:css(&#039;padding-top&#039;, &#039;0.2em&#039;)&lt;br /&gt;
						:css(&#039;line-height&#039;, &#039;1.2em&#039;)&lt;br /&gt;
						:cssText(args.topcaptionstyle)&lt;br /&gt;
						:wikitext(args.topcaption)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if args.pretitle then&lt;br /&gt;
			root&lt;br /&gt;
				:tag(&#039;tr&#039;)&lt;br /&gt;
					:tag(&#039;td&#039;)&lt;br /&gt;
						:addClass(args.pretitleclass)&lt;br /&gt;
						:cssText(args.basestyle)&lt;br /&gt;
						:css(&#039;padding-top&#039;, args.topimage and &#039;0.2em&#039; or &#039;0.4em&#039;)&lt;br /&gt;
						:css(&#039;line-height&#039;, &#039;1.2em&#039;)&lt;br /&gt;
						:cssText(args.pretitlestyle)&lt;br /&gt;
						:wikitext(args.pretitle)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args.title then&lt;br /&gt;
		if child then&lt;br /&gt;
			root&lt;br /&gt;
				:wikitext(args.title)&lt;br /&gt;
				:wikitext(&#039;&amp;lt;/th&amp;gt;&amp;lt;/tr&amp;gt;&#039;) -- @todo replace this with unclosed again once mw.html gets it&lt;br /&gt;
		else&lt;br /&gt;
			root&lt;br /&gt;
				:tag(&#039;tr&#039;)&lt;br /&gt;
					:tag(&#039;th&#039;)&lt;br /&gt;
						:addClass(args.titleclass)&lt;br /&gt;
						:cssText(args.basestyle)&lt;br /&gt;
						:css(&#039;padding&#039;, &#039;0.2em 0.4em 0.2em&#039;)&lt;br /&gt;
						:css(&#039;padding-top&#039;, args.pretitle and 0)&lt;br /&gt;
						:css(&#039;font-size&#039;, &#039;145%&#039;)&lt;br /&gt;
						:css(&#039;line-height&#039;, &#039;1.2em&#039;)&lt;br /&gt;
						:cssText(args.titlestyle)&lt;br /&gt;
						:wikitext(args.title)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args.image then&lt;br /&gt;
		local imageCell = root:tag(&#039;tr&#039;):tag(&#039;td&#039;)&lt;br /&gt;
&lt;br /&gt;
		imageCell&lt;br /&gt;
			:addClass(args.imageclass)&lt;br /&gt;
			:css(&#039;padding&#039;, &#039;0.2em 0 0.4em&#039;)&lt;br /&gt;
			:cssText(args.imagestyle)&lt;br /&gt;
			:wikitext(args.image)&lt;br /&gt;
&lt;br /&gt;
		if args.caption then&lt;br /&gt;
			imageCell&lt;br /&gt;
				:tag(&#039;div&#039;)&lt;br /&gt;
					:css(&#039;padding-top&#039;, &#039;0.2em&#039;)&lt;br /&gt;
					:css(&#039;line-height&#039;, &#039;1.2em&#039;)&lt;br /&gt;
					:cssText(args.captionstyle)&lt;br /&gt;
					:wikitext(args.caption)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args.above then&lt;br /&gt;
		root&lt;br /&gt;
			:tag(&#039;tr&#039;)&lt;br /&gt;
				:tag(&#039;td&#039;)&lt;br /&gt;
					:addClass(args.aboveclass)&lt;br /&gt;
					:css(&#039;padding&#039;, &#039;0.3em 0.4em 0.3em&#039;)&lt;br /&gt;
					:css(&#039;font-weight&#039;, &#039;bold&#039;)&lt;br /&gt;
					:cssText(args.abovestyle)&lt;br /&gt;
					:newline() -- newline required for bullet-points to work&lt;br /&gt;
					:wikitext(args.above)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local rowNums = {}&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		k = &#039;&#039; .. k&lt;br /&gt;
		local num = k:match(&#039;^heading(%d+)$&#039;) or k:match(&#039;^content(%d+)$&#039;)&lt;br /&gt;
		if num then table.insert(rowNums, tonumber(num)) end&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(rowNums)&lt;br /&gt;
	-- remove duplicates from the list (e.g. 3 will be duplicated if both heading3 and content3 are specified)&lt;br /&gt;
	for i = #rowNums, 1, -1 do&lt;br /&gt;
		if rowNums[i] == rowNums[i - 1] then&lt;br /&gt;
			table.remove(rowNums, i)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for i, num in ipairs(rowNums) do&lt;br /&gt;
		local heading = args[&#039;heading&#039; .. num]&lt;br /&gt;
		if heading then&lt;br /&gt;
			root&lt;br /&gt;
				:tag(&#039;tr&#039;)&lt;br /&gt;
					:tag(&#039;th&#039;)&lt;br /&gt;
						:addClass(args.headingclass)&lt;br /&gt;
						:css(&#039;padding&#039;, &#039;0.1em&#039;)&lt;br /&gt;
						:cssText(args.basestyle)&lt;br /&gt;
						:cssText(args.headingstyle)&lt;br /&gt;
						:cssText(args[&#039;heading&#039; .. num .. &#039;style&#039;])&lt;br /&gt;
						:newline()&lt;br /&gt;
						:wikitext(heading)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		local content = args[&#039;content&#039; .. num]&lt;br /&gt;
		if content then&lt;br /&gt;
			root&lt;br /&gt;
				:tag(&#039;tr&#039;)&lt;br /&gt;
					:tag(&#039;td&#039;)&lt;br /&gt;
						:addClass(args.contentclass)&lt;br /&gt;
						:css(&#039;padding&#039;, &#039;0 0.1em 0.4em&#039;)&lt;br /&gt;
						:cssText(args.contentstyle)&lt;br /&gt;
						:cssText(args[&#039;content&#039; .. num .. &#039;style&#039;])&lt;br /&gt;
						:newline()&lt;br /&gt;
						:wikitext(content)&lt;br /&gt;
						:done()&lt;br /&gt;
					:newline() -- Without a linebreak after the &amp;lt;/td&amp;gt;, a nested list like &amp;quot;* {{hlist| ...}}&amp;quot; doesn&#039;t parse correctly.&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args.below then&lt;br /&gt;
		root&lt;br /&gt;
			:tag(&#039;tr&#039;)&lt;br /&gt;
				:tag(&#039;td&#039;)&lt;br /&gt;
					:addClass(args.belowclass)&lt;br /&gt;
					:css(&#039;padding&#039;, &#039;0.3em 0.4em 0.3em&#039;)&lt;br /&gt;
					:css(&#039;font-weight&#039;, &#039;bold&#039;)&lt;br /&gt;
					:cssText(args.belowstyle)&lt;br /&gt;
					:newline()&lt;br /&gt;
					:wikitext(args.below)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if not child then&lt;br /&gt;
		local navbarArg = args.navbar or args.tnavbar&lt;br /&gt;
		if navbarArg ~= &#039;none&#039; and navbarArg ~= &#039;off&#039; and (args.name or frame:getParent():getTitle():gsub(&#039;/sandbox$&#039;, &#039;&#039;) ~= &#039;Template:Sidebar&#039;) then&lt;br /&gt;
			root&lt;br /&gt;
				:tag(&#039;tr&#039;)&lt;br /&gt;
					:tag(&#039;td&#039;)&lt;br /&gt;
						:css(&#039;text-align&#039;, &#039;right&#039;)&lt;br /&gt;
						:css(&#039;font-size&#039;, &#039;115%&#039;)&lt;br /&gt;
						:cssText(args.navbarstyle or args.tnavbarstyle)&lt;br /&gt;
						:wikitext(navbar{&lt;br /&gt;
							args.name,&lt;br /&gt;
							mini = 1,&lt;br /&gt;
							fontstyle = args.navbarfontstyle or args.tnavbarfontstyle&lt;br /&gt;
						})&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.collapsible(frame)&lt;br /&gt;
	local args = getArgs(frame)&lt;br /&gt;
&lt;br /&gt;
	args.abovestyle = &#039;border-top: 1px solid #aaa; border-bottom: 1px solid #aaa;&#039; .. (args.abovestyle or &#039;&#039;)&lt;br /&gt;
	args.belowstyle = &#039;border-top: 1px solid #aaa; border-bottom: 1px solid #aaa;&#039; .. (args.belowstyle or &#039;&#039;)&lt;br /&gt;
	args.navbarstyle = &#039;padding-top: 0.6em;&#039; .. (args.navbarstyle or args.tnavbarstyle or &#039;&#039;)&lt;br /&gt;
	if not args.name and frame:getParent():getTitle():gsub(&#039;/sandbox$&#039;, &#039;&#039;) == &#039;Template:Sidebar with collapsible lists&#039; then&lt;br /&gt;
		args.navbar = &#039;none&#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local contentArgs = {}&lt;br /&gt;
&lt;br /&gt;
	for k, v in pairs(args) do&lt;br /&gt;
		local num = string.match(k, &#039;^list(%d+)$&#039;)&lt;br /&gt;
		if num then&lt;br /&gt;
			local expand = args.expanded and (args.expanded == &#039;all&#039; or args.expanded == args[&#039;list&#039; .. num .. &#039;name&#039;])&lt;br /&gt;
&lt;br /&gt;
			local row = mw.html.create(&#039;div&#039;)&lt;br /&gt;
			row&lt;br /&gt;
				:addClass(&#039;NavFrame&#039;)&lt;br /&gt;
				:addClass((not expand) and &#039;collapsed&#039; or nil)&lt;br /&gt;
				:css(&#039;border&#039;, &#039;none&#039;)&lt;br /&gt;
				:css(&#039;padding&#039;, 0)&lt;br /&gt;
				:cssText(args.listframestyle)&lt;br /&gt;
				:cssText(args[&#039;list&#039; .. num .. &#039;framestyle&#039;])&lt;br /&gt;
				:tag(&#039;div&#039;)&lt;br /&gt;
					:addClass(&#039;NavHead&#039;)&lt;br /&gt;
					:addClass(args.listtitleclass)&lt;br /&gt;
					:css(&#039;font-size&#039;, &#039;105%&#039;)&lt;br /&gt;
					:css(&#039;background&#039;, &#039;transparent&#039;)&lt;br /&gt;
					:css(&#039;text-align&#039;, &#039;left&#039;)&lt;br /&gt;
					:cssText(args.basestyle)&lt;br /&gt;
					:cssText(args.listtitlestyle)&lt;br /&gt;
					:cssText(args[&#039;list&#039; .. num .. &#039;titlestyle&#039;])&lt;br /&gt;
					:wikitext(trimAndAddAutomaticNewline(args[&#039;list&#039; .. num .. &#039;title&#039;] or &#039;List&#039;))&lt;br /&gt;
					:done()&lt;br /&gt;
				:tag(&#039;div&#039;)&lt;br /&gt;
					:addClass(&#039;NavContent&#039;)&lt;br /&gt;
					:addClass(args.listclass)&lt;br /&gt;
					:addClass(args[&#039;list&#039; .. num .. &#039;class&#039;])&lt;br /&gt;
					:css(&#039;font-size&#039;, &#039;105%&#039;)&lt;br /&gt;
					:css(&#039;padding&#039;, &#039;0.2em 0 0.4em&#039;)&lt;br /&gt;
					:css(&#039;text-align&#039;, &#039;center&#039;)&lt;br /&gt;
					:cssText(args.liststyle)&lt;br /&gt;
					:cssText(args[&#039;list&#039; .. num .. &#039;style&#039;])&lt;br /&gt;
					:wikitext(trimAndAddAutomaticNewline(args[&#039;list&#039; .. num]))&lt;br /&gt;
&lt;br /&gt;
			contentArgs[&#039;content&#039; .. num] = tostring(row)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for k, v in pairs(contentArgs) do&lt;br /&gt;
		args[k] = v&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return p.sidebar(frame, args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Azizonkg</name></author>
	</entry>
	<entry>
		<id>https://sierra.ss220.space/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:InfoboxImage&amp;diff=9893</id>
		<title>Модуль:InfoboxImage</title>
		<link rel="alternate" type="text/html" href="https://sierra.ss220.space/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:InfoboxImage&amp;diff=9893"/>
		<updated>2021-10-18T04:16:15Z</updated>

		<summary type="html">&lt;p&gt;Azizonkg: Защитил страницу Модуль:InfoboxImage ([Редактирование=Разрешено только администраторам] (бессрочно) [Переименование=Разрешено только администраторам] (бессрочно))&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Inputs:&lt;br /&gt;
--    image - Can either be a bare filename (with or without the File:/Image: prefix) or a fully formatted image link&lt;br /&gt;
--    page - page to display for multipage images (DjVu)&lt;br /&gt;
--    size - size to display the image&lt;br /&gt;
--    maxsize - maximum size for image&lt;br /&gt;
--    sizedefault - default size to display the image if size param is blank&lt;br /&gt;
--    alt - alt text for image&lt;br /&gt;
--    title - title text for image&lt;br /&gt;
--    border - set to yes if border&lt;br /&gt;
--    center - set to yes, if the image has to be centered&lt;br /&gt;
--    upright - upright image param&lt;br /&gt;
--    suppressplaceholder - if yes then checks to see if image is a placeholder and suppresses it&lt;br /&gt;
--    link - page to visit when clicking on image&lt;br /&gt;
-- Outputs:&lt;br /&gt;
--    Formatted image.&lt;br /&gt;
-- More details available at the &amp;quot;Module:InfoboxImage/doc&amp;quot; page&lt;br /&gt;
&lt;br /&gt;
local i = {};&lt;br /&gt;
&lt;br /&gt;
local placeholder_image = {&lt;br /&gt;
    &amp;quot;Blue - Replace this image female.svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Blue - Replace this image male.svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Female no free image yet.png&amp;quot;,&lt;br /&gt;
    &amp;quot;Flag of None (square).svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Flag of None.svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Flag of.svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Green - Replace this image female.svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Green - Replace this image male.svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Image is needed female.svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Image is needed male.svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Location map of None.svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Male no free image yet.png&amp;quot;,&lt;br /&gt;
    &amp;quot;Missing flag.png&amp;quot;,&lt;br /&gt;
    &amp;quot;No flag.svg&amp;quot;,&lt;br /&gt;
    &amp;quot;No free portrait.svg&amp;quot;,&lt;br /&gt;
    &amp;quot;No portrait (female).svg&amp;quot;,&lt;br /&gt;
    &amp;quot;No portrait (male).svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Red - Replace this image female.svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Red - Replace this image male.svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Replace this image female (blue).svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Replace this image female.svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Replace this image male (blue).svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Replace this image male.svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Silver - Replace this image female.svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Silver - Replace this image male.svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Replace this image.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;Cricket no pic.png&amp;quot;,&lt;br /&gt;
	&amp;quot;CarersLogo.gif&amp;quot;,&lt;br /&gt;
	&amp;quot;Diagram Needed.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;Example.jpg&amp;quot;,&lt;br /&gt;
	&amp;quot;Image placeholder.png&amp;quot;,&lt;br /&gt;
	&amp;quot;No male portrait.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;Nocover-upload.png&amp;quot;,&lt;br /&gt;
	&amp;quot;NoDVDcover copy.png&amp;quot;,&lt;br /&gt;
	&amp;quot;Noribbon.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;No portrait-BFD-test.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;Placeholder barnstar ribbon.png&amp;quot;,&lt;br /&gt;
	&amp;quot;Project Trains no image.png&amp;quot;,&lt;br /&gt;
	&amp;quot;Image-request.png&amp;quot;,&lt;br /&gt;
	&amp;quot;Sin bandera.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;Sin escudo.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;Replace this image - temple.png&amp;quot;,&lt;br /&gt;
	&amp;quot;Replace this image butterfly.png&amp;quot;,&lt;br /&gt;
	&amp;quot;Replace this image.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;Replace this image1.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;Resolution angle.png&amp;quot;,&lt;br /&gt;
	&amp;quot;Image-No portrait-text-BFD-test.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;Insert image here.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;No image available.png&amp;quot;,&lt;br /&gt;
	&amp;quot;NO IMAGE YET square.png&amp;quot;,&lt;br /&gt;
	&amp;quot;NO IMAGE YET.png&amp;quot;,&lt;br /&gt;
	&amp;quot;No Photo Available.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;No Screenshot.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;No-image-available.jpg&amp;quot;,&lt;br /&gt;
	&amp;quot;Null.png&amp;quot;,&lt;br /&gt;
	&amp;quot;PictureNeeded.gif&amp;quot;,&lt;br /&gt;
	&amp;quot;Place holder.jpg&amp;quot;,&lt;br /&gt;
	&amp;quot;Unbenannt.JPG&amp;quot;,&lt;br /&gt;
	&amp;quot;UploadACopyrightFreeImage.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;UploadAnImage.gif&amp;quot;,&lt;br /&gt;
	&amp;quot;UploadAnImage.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;UploadAnImageShort.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;CarersLogo.gif&amp;quot;,&lt;br /&gt;
	&amp;quot;Diagram Needed.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;No male portrait.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;NoDVDcover copy.png&amp;quot;,&lt;br /&gt;
	&amp;quot;Placeholder barnstar ribbon.png&amp;quot;,&lt;br /&gt;
	&amp;quot;Project Trains no image.png&amp;quot;,&lt;br /&gt;
	&amp;quot;Image-request.png&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function i.IsPlaceholder(image)&lt;br /&gt;
    -- change underscores to spaces&lt;br /&gt;
    image = mw.ustring.gsub(image, &amp;quot;_&amp;quot;, &amp;quot; &amp;quot;);&lt;br /&gt;
    assert(image ~= nil, &#039;mw.ustring.gsub(image, &amp;quot;_&amp;quot;, &amp;quot; &amp;quot;) must not return nil&#039;)&lt;br /&gt;
    -- if image starts with [[ then remove that and anything after |&lt;br /&gt;
    if mw.ustring.sub(image,1,2) == &amp;quot;[[&amp;quot; then&lt;br /&gt;
        image = mw.ustring.sub(image,3);&lt;br /&gt;
        image = mw.ustring.gsub(image, &amp;quot;([^|]*)|.*&amp;quot;, &amp;quot;%1&amp;quot;);&lt;br /&gt;
        assert(image ~= nil, &#039;mw.ustring.gsub(image, &amp;quot;([^|]*)|.*&amp;quot;, &amp;quot;%1&amp;quot;) must not return nil&#039;)&lt;br /&gt;
    end&lt;br /&gt;
    -- Trim spaces&lt;br /&gt;
    image = mw.ustring.gsub(image, &#039;^[ ]*(.-)[ ]*$&#039;, &#039;%1&#039;);&lt;br /&gt;
    assert(image ~= nil, &amp;quot;mw.ustring.gsub(image, &#039;^[ ]*(.-)[ ]*$&#039;, &#039;%1&#039;) must not return nil&amp;quot;)&lt;br /&gt;
    -- remove prefix if exists&lt;br /&gt;
    local allNames = mw.site.namespaces[6].aliases&lt;br /&gt;
    allNames[#allNames + 1] = mw.site.namespaces[6].name&lt;br /&gt;
    allNames[#allNames + 1] = mw.site.namespaces[6].canonicalName&lt;br /&gt;
    for i, name in ipairs(allNames) do&lt;br /&gt;
        if mw.ustring.lower(mw.ustring.sub(image, 1, mw.ustring.len(name) + 1)) == mw.ustring.lower(name .. &amp;quot;:&amp;quot;) then&lt;br /&gt;
            image = mw.ustring.sub(image, mw.ustring.len(name) + 2);&lt;br /&gt;
            break&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    -- Trim spaces&lt;br /&gt;
    image = mw.ustring.gsub(image, &#039;^[ ]*(.-)[ ]*$&#039;, &#039;%1&#039;);&lt;br /&gt;
    -- capitalise first letter&lt;br /&gt;
    image = mw.ustring.upper(mw.ustring.sub(image,1,1)) .. mw.ustring.sub(image,2);&lt;br /&gt;
&lt;br /&gt;
    for i,j in pairs(placeholder_image) do&lt;br /&gt;
        if image == j then&lt;br /&gt;
            return true&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function i.InfoboxImage(frame)&lt;br /&gt;
    local image = frame.args[&amp;quot;image&amp;quot;];&lt;br /&gt;
    &lt;br /&gt;
    if image == &amp;quot;&amp;quot; or image == nil then&lt;br /&gt;
        return &amp;quot;&amp;quot;;&lt;br /&gt;
    end&lt;br /&gt;
    if image == &amp;quot;&amp;amp;nbsp;&amp;quot; then&lt;br /&gt;
        return image;&lt;br /&gt;
    end&lt;br /&gt;
    if frame.args[&amp;quot;suppressplaceholder&amp;quot;] ~= &amp;quot;no&amp;quot; then&lt;br /&gt;
        if i.IsPlaceholder(image) == true then&lt;br /&gt;
            return &amp;quot;&amp;quot;;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if mw.ustring.lower(mw.ustring.sub(image,1,5)) == &amp;quot;http:&amp;quot; then&lt;br /&gt;
        return &amp;quot;&amp;quot;;&lt;br /&gt;
    end&lt;br /&gt;
    if mw.ustring.lower(mw.ustring.sub(image,1,6)) == &amp;quot;[http:&amp;quot; then&lt;br /&gt;
        return &amp;quot;&amp;quot;;&lt;br /&gt;
    end&lt;br /&gt;
    if mw.ustring.lower(mw.ustring.sub(image,1,7)) == &amp;quot;[[http:&amp;quot; then&lt;br /&gt;
        return &amp;quot;&amp;quot;;&lt;br /&gt;
    end&lt;br /&gt;
    if mw.ustring.lower(mw.ustring.sub(image,1,6)) == &amp;quot;https:&amp;quot; then&lt;br /&gt;
        return &amp;quot;&amp;quot;;&lt;br /&gt;
    end&lt;br /&gt;
    if mw.ustring.lower(mw.ustring.sub(image,1,7)) == &amp;quot;[https:&amp;quot; then&lt;br /&gt;
        return &amp;quot;&amp;quot;;&lt;br /&gt;
    end&lt;br /&gt;
    if mw.ustring.lower(mw.ustring.sub(image,1,8)) == &amp;quot;[[https:&amp;quot; then&lt;br /&gt;
        return &amp;quot;&amp;quot;;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if mw.ustring.sub(image,1,2) == &amp;quot;[[&amp;quot; then&lt;br /&gt;
        -- search for thumbnail images and add to tracking cat if found&lt;br /&gt;
        if mw.title.getCurrentTitle().namespace == 0 and (mw.ustring.find(image, &amp;quot;|%s*thumb%s*[|%]]&amp;quot;) or mw.ustring.find(image, &amp;quot;|%s*thumbnail%s*[|%]]&amp;quot;)) then&lt;br /&gt;
            return image .. &amp;quot;[[Category:Pages using infoboxes with thumbnail images]]&amp;quot;;&lt;br /&gt;
        elseif mw.title.getCurrentTitle().namespace == 0 then&lt;br /&gt;
            return image .. &amp;quot;[[Category:Pages using deprecated image syntax]]&amp;quot;;&lt;br /&gt;
        else&lt;br /&gt;
            return image;&lt;br /&gt;
        end&lt;br /&gt;
    elseif mw.ustring.sub(image,1,2) == &amp;quot;{{&amp;quot; and mw.ustring.sub(image,1,3) ~= &amp;quot;{{{&amp;quot; then&lt;br /&gt;
        return image;&lt;br /&gt;
    elseif mw.ustring.sub(image,1,1) == &amp;quot;&amp;lt;&amp;quot; then&lt;br /&gt;
        return image;&lt;br /&gt;
    elseif mw.ustring.sub(image,1,5) == mw.ustring.char(127)..&amp;quot;UNIQ&amp;quot; then&lt;br /&gt;
        -- Found strip marker at begining, so pass don&#039;t process at all&lt;br /&gt;
        return image;&lt;br /&gt;
    elseif mw.ustring.sub(image,4,9) == &amp;quot;`UNIQ-&amp;quot; then&lt;br /&gt;
        -- Found strip marker at begining, so pass don&#039;t process at all&lt;br /&gt;
        return image;&lt;br /&gt;
    else&lt;br /&gt;
        local result = &amp;quot;&amp;quot;;&lt;br /&gt;
        local page = frame.args[&amp;quot;page&amp;quot;];&lt;br /&gt;
        local size = frame.args[&amp;quot;size&amp;quot;];&lt;br /&gt;
        local maxsize = frame.args[&amp;quot;maxsize&amp;quot;];&lt;br /&gt;
        local sizedefault = frame.args[&amp;quot;sizedefault&amp;quot;];&lt;br /&gt;
        local alt = frame.args[&amp;quot;alt&amp;quot;];&lt;br /&gt;
        local link = frame.args[&amp;quot;link&amp;quot;];&lt;br /&gt;
        local title = frame.args[&amp;quot;title&amp;quot;];&lt;br /&gt;
        local border = frame.args[&amp;quot;border&amp;quot;];&lt;br /&gt;
        local upright = frame.args[&amp;quot;upright&amp;quot;] or &amp;quot;&amp;quot;;&lt;br /&gt;
        local thumbtime = frame.args[&amp;quot;thumbtime&amp;quot;] or &amp;quot;&amp;quot;;&lt;br /&gt;
        local center= frame.args[&amp;quot;center&amp;quot;];&lt;br /&gt;
        &lt;br /&gt;
        -- remove prefix if exists&lt;br /&gt;
        local allNames = mw.site.namespaces[6].aliases&lt;br /&gt;
        allNames[#allNames + 1] = mw.site.namespaces[6].name&lt;br /&gt;
        allNames[#allNames + 1] = mw.site.namespaces[6].canonicalName&lt;br /&gt;
        for i, name in ipairs(allNames) do&lt;br /&gt;
            if mw.ustring.lower(mw.ustring.sub(image, 1, mw.ustring.len(name) + 1)) == mw.ustring.lower(name .. &amp;quot;:&amp;quot;) then&lt;br /&gt;
                image = mw.ustring.sub(image, mw.ustring.len(name) + 2);&lt;br /&gt;
                break&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        if maxsize ~= &amp;quot;&amp;quot; and maxsize ~= nil then&lt;br /&gt;
            -- if no sizedefault then set to maxsize&lt;br /&gt;
            if sizedefault == &amp;quot;&amp;quot; or sizedefault == nil then&lt;br /&gt;
                sizedefault = maxsize&lt;br /&gt;
            end&lt;br /&gt;
            -- check to see if size bigger than maxsize&lt;br /&gt;
            if size ~= &amp;quot;&amp;quot; and size ~= nil then&lt;br /&gt;
                local sizenumber = tonumber(mw.ustring.match(size,&amp;quot;%d*&amp;quot;)) or 0;&lt;br /&gt;
                local maxsizenumber = tonumber(mw.ustring.match(maxsize,&amp;quot;%d*&amp;quot;)) or 0;&lt;br /&gt;
                if sizenumber&amp;gt;maxsizenumber and maxsizenumber&amp;gt;0 then&lt;br /&gt;
                    size = maxsize;&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        -- add px to size if just a number&lt;br /&gt;
        if (tonumber(size) or 0) &amp;gt; 0 then&lt;br /&gt;
            size = size .. &amp;quot;px&amp;quot;;&lt;br /&gt;
        end&lt;br /&gt;
        -- add px to sizedefault if just a number&lt;br /&gt;
        if (tonumber(sizedefault) or 0) &amp;gt; 0 then&lt;br /&gt;
            sizedefault = sizedefault .. &amp;quot;px&amp;quot;;&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        result = &amp;quot;[[File:&amp;quot; .. image;&lt;br /&gt;
        if page ~= &amp;quot;&amp;quot; and page ~= nil then&lt;br /&gt;
            result = result .. &amp;quot;|page=&amp;quot; .. page;&lt;br /&gt;
        end&lt;br /&gt;
        if size ~= &amp;quot;&amp;quot; and size ~= nil then&lt;br /&gt;
            result = result .. &amp;quot;|&amp;quot; .. size;&lt;br /&gt;
        elseif sizedefault ~= &amp;quot;&amp;quot; and sizedefault ~= nil then&lt;br /&gt;
            result = result .. &amp;quot;|&amp;quot; .. sizedefault;&lt;br /&gt;
        else&lt;br /&gt;
            result = result .. &amp;quot;|frameless&amp;quot;;&lt;br /&gt;
        end&lt;br /&gt;
        if center == &amp;quot;yes&amp;quot; then&lt;br /&gt;
            result = result .. &amp;quot;|center&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        if alt ~= &amp;quot;&amp;quot; and alt ~= nil then&lt;br /&gt;
            result = result .. &amp;quot;|alt=&amp;quot; .. alt;&lt;br /&gt;
        end&lt;br /&gt;
        if link ~= &amp;quot;&amp;quot; and link ~= nil then&lt;br /&gt;
            result = result .. &amp;quot;|link=&amp;quot; .. link;&lt;br /&gt;
        end&lt;br /&gt;
        if border == &amp;quot;yes&amp;quot; then&lt;br /&gt;
            result = result .. &amp;quot;|border&amp;quot;;&lt;br /&gt;
        end&lt;br /&gt;
        if upright == &amp;quot;yes&amp;quot; then&lt;br /&gt;
            result = result .. &amp;quot;|upright&amp;quot;;&lt;br /&gt;
        elseif upright ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            result = result .. &amp;quot;|upright=&amp;quot; .. upright;&lt;br /&gt;
        end&lt;br /&gt;
        if thumbtime ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            result = result .. &amp;quot;|thumbtime=&amp;quot; .. thumbtime;&lt;br /&gt;
        end&lt;br /&gt;
        if title ~= &amp;quot;&amp;quot; and title ~= nil then&lt;br /&gt;
            result = result .. &amp;quot;|&amp;quot; .. title;&lt;br /&gt;
        elseif alt ~= &amp;quot;&amp;quot; and alt ~= nil then&lt;br /&gt;
            result = result .. &amp;quot;|&amp;quot; .. alt;&lt;br /&gt;
        end&lt;br /&gt;
        result = result .. &amp;quot;]]&amp;quot;;&lt;br /&gt;
        &lt;br /&gt;
        return result;&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return i;&lt;/div&gt;</summary>
		<author><name>Azizonkg</name></author>
	</entry>
	<entry>
		<id>https://sierra.ss220.space/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:InfoboxImage&amp;diff=9892</id>
		<title>Модуль:InfoboxImage</title>
		<link rel="alternate" type="text/html" href="https://sierra.ss220.space/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:InfoboxImage&amp;diff=9892"/>
		<updated>2021-10-18T04:16:11Z</updated>

		<summary type="html">&lt;p&gt;Azizonkg: Новая страница: «-- Inputs: --    image - Can either be a bare filename (with or without the File:/Image: prefix) or a fully formatted image link --    page - page to display for...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;-- Inputs:&lt;br /&gt;
--    image - Can either be a bare filename (with or without the File:/Image: prefix) or a fully formatted image link&lt;br /&gt;
--    page - page to display for multipage images (DjVu)&lt;br /&gt;
--    size - size to display the image&lt;br /&gt;
--    maxsize - maximum size for image&lt;br /&gt;
--    sizedefault - default size to display the image if size param is blank&lt;br /&gt;
--    alt - alt text for image&lt;br /&gt;
--    title - title text for image&lt;br /&gt;
--    border - set to yes if border&lt;br /&gt;
--    center - set to yes, if the image has to be centered&lt;br /&gt;
--    upright - upright image param&lt;br /&gt;
--    suppressplaceholder - if yes then checks to see if image is a placeholder and suppresses it&lt;br /&gt;
--    link - page to visit when clicking on image&lt;br /&gt;
-- Outputs:&lt;br /&gt;
--    Formatted image.&lt;br /&gt;
-- More details available at the &amp;quot;Module:InfoboxImage/doc&amp;quot; page&lt;br /&gt;
&lt;br /&gt;
local i = {};&lt;br /&gt;
&lt;br /&gt;
local placeholder_image = {&lt;br /&gt;
    &amp;quot;Blue - Replace this image female.svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Blue - Replace this image male.svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Female no free image yet.png&amp;quot;,&lt;br /&gt;
    &amp;quot;Flag of None (square).svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Flag of None.svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Flag of.svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Green - Replace this image female.svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Green - Replace this image male.svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Image is needed female.svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Image is needed male.svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Location map of None.svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Male no free image yet.png&amp;quot;,&lt;br /&gt;
    &amp;quot;Missing flag.png&amp;quot;,&lt;br /&gt;
    &amp;quot;No flag.svg&amp;quot;,&lt;br /&gt;
    &amp;quot;No free portrait.svg&amp;quot;,&lt;br /&gt;
    &amp;quot;No portrait (female).svg&amp;quot;,&lt;br /&gt;
    &amp;quot;No portrait (male).svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Red - Replace this image female.svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Red - Replace this image male.svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Replace this image female (blue).svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Replace this image female.svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Replace this image male (blue).svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Replace this image male.svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Silver - Replace this image female.svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Silver - Replace this image male.svg&amp;quot;,&lt;br /&gt;
    &amp;quot;Replace this image.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;Cricket no pic.png&amp;quot;,&lt;br /&gt;
	&amp;quot;CarersLogo.gif&amp;quot;,&lt;br /&gt;
	&amp;quot;Diagram Needed.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;Example.jpg&amp;quot;,&lt;br /&gt;
	&amp;quot;Image placeholder.png&amp;quot;,&lt;br /&gt;
	&amp;quot;No male portrait.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;Nocover-upload.png&amp;quot;,&lt;br /&gt;
	&amp;quot;NoDVDcover copy.png&amp;quot;,&lt;br /&gt;
	&amp;quot;Noribbon.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;No portrait-BFD-test.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;Placeholder barnstar ribbon.png&amp;quot;,&lt;br /&gt;
	&amp;quot;Project Trains no image.png&amp;quot;,&lt;br /&gt;
	&amp;quot;Image-request.png&amp;quot;,&lt;br /&gt;
	&amp;quot;Sin bandera.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;Sin escudo.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;Replace this image - temple.png&amp;quot;,&lt;br /&gt;
	&amp;quot;Replace this image butterfly.png&amp;quot;,&lt;br /&gt;
	&amp;quot;Replace this image.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;Replace this image1.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;Resolution angle.png&amp;quot;,&lt;br /&gt;
	&amp;quot;Image-No portrait-text-BFD-test.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;Insert image here.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;No image available.png&amp;quot;,&lt;br /&gt;
	&amp;quot;NO IMAGE YET square.png&amp;quot;,&lt;br /&gt;
	&amp;quot;NO IMAGE YET.png&amp;quot;,&lt;br /&gt;
	&amp;quot;No Photo Available.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;No Screenshot.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;No-image-available.jpg&amp;quot;,&lt;br /&gt;
	&amp;quot;Null.png&amp;quot;,&lt;br /&gt;
	&amp;quot;PictureNeeded.gif&amp;quot;,&lt;br /&gt;
	&amp;quot;Place holder.jpg&amp;quot;,&lt;br /&gt;
	&amp;quot;Unbenannt.JPG&amp;quot;,&lt;br /&gt;
	&amp;quot;UploadACopyrightFreeImage.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;UploadAnImage.gif&amp;quot;,&lt;br /&gt;
	&amp;quot;UploadAnImage.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;UploadAnImageShort.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;CarersLogo.gif&amp;quot;,&lt;br /&gt;
	&amp;quot;Diagram Needed.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;No male portrait.svg&amp;quot;,&lt;br /&gt;
	&amp;quot;NoDVDcover copy.png&amp;quot;,&lt;br /&gt;
	&amp;quot;Placeholder barnstar ribbon.png&amp;quot;,&lt;br /&gt;
	&amp;quot;Project Trains no image.png&amp;quot;,&lt;br /&gt;
	&amp;quot;Image-request.png&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function i.IsPlaceholder(image)&lt;br /&gt;
    -- change underscores to spaces&lt;br /&gt;
    image = mw.ustring.gsub(image, &amp;quot;_&amp;quot;, &amp;quot; &amp;quot;);&lt;br /&gt;
    assert(image ~= nil, &#039;mw.ustring.gsub(image, &amp;quot;_&amp;quot;, &amp;quot; &amp;quot;) must not return nil&#039;)&lt;br /&gt;
    -- if image starts with [[ then remove that and anything after |&lt;br /&gt;
    if mw.ustring.sub(image,1,2) == &amp;quot;[[&amp;quot; then&lt;br /&gt;
        image = mw.ustring.sub(image,3);&lt;br /&gt;
        image = mw.ustring.gsub(image, &amp;quot;([^|]*)|.*&amp;quot;, &amp;quot;%1&amp;quot;);&lt;br /&gt;
        assert(image ~= nil, &#039;mw.ustring.gsub(image, &amp;quot;([^|]*)|.*&amp;quot;, &amp;quot;%1&amp;quot;) must not return nil&#039;)&lt;br /&gt;
    end&lt;br /&gt;
    -- Trim spaces&lt;br /&gt;
    image = mw.ustring.gsub(image, &#039;^[ ]*(.-)[ ]*$&#039;, &#039;%1&#039;);&lt;br /&gt;
    assert(image ~= nil, &amp;quot;mw.ustring.gsub(image, &#039;^[ ]*(.-)[ ]*$&#039;, &#039;%1&#039;) must not return nil&amp;quot;)&lt;br /&gt;
    -- remove prefix if exists&lt;br /&gt;
    local allNames = mw.site.namespaces[6].aliases&lt;br /&gt;
    allNames[#allNames + 1] = mw.site.namespaces[6].name&lt;br /&gt;
    allNames[#allNames + 1] = mw.site.namespaces[6].canonicalName&lt;br /&gt;
    for i, name in ipairs(allNames) do&lt;br /&gt;
        if mw.ustring.lower(mw.ustring.sub(image, 1, mw.ustring.len(name) + 1)) == mw.ustring.lower(name .. &amp;quot;:&amp;quot;) then&lt;br /&gt;
            image = mw.ustring.sub(image, mw.ustring.len(name) + 2);&lt;br /&gt;
            break&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    -- Trim spaces&lt;br /&gt;
    image = mw.ustring.gsub(image, &#039;^[ ]*(.-)[ ]*$&#039;, &#039;%1&#039;);&lt;br /&gt;
    -- capitalise first letter&lt;br /&gt;
    image = mw.ustring.upper(mw.ustring.sub(image,1,1)) .. mw.ustring.sub(image,2);&lt;br /&gt;
&lt;br /&gt;
    for i,j in pairs(placeholder_image) do&lt;br /&gt;
        if image == j then&lt;br /&gt;
            return true&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function i.InfoboxImage(frame)&lt;br /&gt;
    local image = frame.args[&amp;quot;image&amp;quot;];&lt;br /&gt;
    &lt;br /&gt;
    if image == &amp;quot;&amp;quot; or image == nil then&lt;br /&gt;
        return &amp;quot;&amp;quot;;&lt;br /&gt;
    end&lt;br /&gt;
    if image == &amp;quot;&amp;amp;nbsp;&amp;quot; then&lt;br /&gt;
        return image;&lt;br /&gt;
    end&lt;br /&gt;
    if frame.args[&amp;quot;suppressplaceholder&amp;quot;] ~= &amp;quot;no&amp;quot; then&lt;br /&gt;
        if i.IsPlaceholder(image) == true then&lt;br /&gt;
            return &amp;quot;&amp;quot;;&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if mw.ustring.lower(mw.ustring.sub(image,1,5)) == &amp;quot;http:&amp;quot; then&lt;br /&gt;
        return &amp;quot;&amp;quot;;&lt;br /&gt;
    end&lt;br /&gt;
    if mw.ustring.lower(mw.ustring.sub(image,1,6)) == &amp;quot;[http:&amp;quot; then&lt;br /&gt;
        return &amp;quot;&amp;quot;;&lt;br /&gt;
    end&lt;br /&gt;
    if mw.ustring.lower(mw.ustring.sub(image,1,7)) == &amp;quot;[[http:&amp;quot; then&lt;br /&gt;
        return &amp;quot;&amp;quot;;&lt;br /&gt;
    end&lt;br /&gt;
    if mw.ustring.lower(mw.ustring.sub(image,1,6)) == &amp;quot;https:&amp;quot; then&lt;br /&gt;
        return &amp;quot;&amp;quot;;&lt;br /&gt;
    end&lt;br /&gt;
    if mw.ustring.lower(mw.ustring.sub(image,1,7)) == &amp;quot;[https:&amp;quot; then&lt;br /&gt;
        return &amp;quot;&amp;quot;;&lt;br /&gt;
    end&lt;br /&gt;
    if mw.ustring.lower(mw.ustring.sub(image,1,8)) == &amp;quot;[[https:&amp;quot; then&lt;br /&gt;
        return &amp;quot;&amp;quot;;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if mw.ustring.sub(image,1,2) == &amp;quot;[[&amp;quot; then&lt;br /&gt;
        -- search for thumbnail images and add to tracking cat if found&lt;br /&gt;
        if mw.title.getCurrentTitle().namespace == 0 and (mw.ustring.find(image, &amp;quot;|%s*thumb%s*[|%]]&amp;quot;) or mw.ustring.find(image, &amp;quot;|%s*thumbnail%s*[|%]]&amp;quot;)) then&lt;br /&gt;
            return image .. &amp;quot;[[Category:Pages using infoboxes with thumbnail images]]&amp;quot;;&lt;br /&gt;
        elseif mw.title.getCurrentTitle().namespace == 0 then&lt;br /&gt;
            return image .. &amp;quot;[[Category:Pages using deprecated image syntax]]&amp;quot;;&lt;br /&gt;
        else&lt;br /&gt;
            return image;&lt;br /&gt;
        end&lt;br /&gt;
    elseif mw.ustring.sub(image,1,2) == &amp;quot;{{&amp;quot; and mw.ustring.sub(image,1,3) ~= &amp;quot;{{{&amp;quot; then&lt;br /&gt;
        return image;&lt;br /&gt;
    elseif mw.ustring.sub(image,1,1) == &amp;quot;&amp;lt;&amp;quot; then&lt;br /&gt;
        return image;&lt;br /&gt;
    elseif mw.ustring.sub(image,1,5) == mw.ustring.char(127)..&amp;quot;UNIQ&amp;quot; then&lt;br /&gt;
        -- Found strip marker at begining, so pass don&#039;t process at all&lt;br /&gt;
        return image;&lt;br /&gt;
    elseif mw.ustring.sub(image,4,9) == &amp;quot;`UNIQ-&amp;quot; then&lt;br /&gt;
        -- Found strip marker at begining, so pass don&#039;t process at all&lt;br /&gt;
        return image;&lt;br /&gt;
    else&lt;br /&gt;
        local result = &amp;quot;&amp;quot;;&lt;br /&gt;
        local page = frame.args[&amp;quot;page&amp;quot;];&lt;br /&gt;
        local size = frame.args[&amp;quot;size&amp;quot;];&lt;br /&gt;
        local maxsize = frame.args[&amp;quot;maxsize&amp;quot;];&lt;br /&gt;
        local sizedefault = frame.args[&amp;quot;sizedefault&amp;quot;];&lt;br /&gt;
        local alt = frame.args[&amp;quot;alt&amp;quot;];&lt;br /&gt;
        local link = frame.args[&amp;quot;link&amp;quot;];&lt;br /&gt;
        local title = frame.args[&amp;quot;title&amp;quot;];&lt;br /&gt;
        local border = frame.args[&amp;quot;border&amp;quot;];&lt;br /&gt;
        local upright = frame.args[&amp;quot;upright&amp;quot;] or &amp;quot;&amp;quot;;&lt;br /&gt;
        local thumbtime = frame.args[&amp;quot;thumbtime&amp;quot;] or &amp;quot;&amp;quot;;&lt;br /&gt;
        local center= frame.args[&amp;quot;center&amp;quot;];&lt;br /&gt;
        &lt;br /&gt;
        -- remove prefix if exists&lt;br /&gt;
        local allNames = mw.site.namespaces[6].aliases&lt;br /&gt;
        allNames[#allNames + 1] = mw.site.namespaces[6].name&lt;br /&gt;
        allNames[#allNames + 1] = mw.site.namespaces[6].canonicalName&lt;br /&gt;
        for i, name in ipairs(allNames) do&lt;br /&gt;
            if mw.ustring.lower(mw.ustring.sub(image, 1, mw.ustring.len(name) + 1)) == mw.ustring.lower(name .. &amp;quot;:&amp;quot;) then&lt;br /&gt;
                image = mw.ustring.sub(image, mw.ustring.len(name) + 2);&lt;br /&gt;
                break&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        if maxsize ~= &amp;quot;&amp;quot; and maxsize ~= nil then&lt;br /&gt;
            -- if no sizedefault then set to maxsize&lt;br /&gt;
            if sizedefault == &amp;quot;&amp;quot; or sizedefault == nil then&lt;br /&gt;
                sizedefault = maxsize&lt;br /&gt;
            end&lt;br /&gt;
            -- check to see if size bigger than maxsize&lt;br /&gt;
            if size ~= &amp;quot;&amp;quot; and size ~= nil then&lt;br /&gt;
                local sizenumber = tonumber(mw.ustring.match(size,&amp;quot;%d*&amp;quot;)) or 0;&lt;br /&gt;
                local maxsizenumber = tonumber(mw.ustring.match(maxsize,&amp;quot;%d*&amp;quot;)) or 0;&lt;br /&gt;
                if sizenumber&amp;gt;maxsizenumber and maxsizenumber&amp;gt;0 then&lt;br /&gt;
                    size = maxsize;&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        -- add px to size if just a number&lt;br /&gt;
        if (tonumber(size) or 0) &amp;gt; 0 then&lt;br /&gt;
            size = size .. &amp;quot;px&amp;quot;;&lt;br /&gt;
        end&lt;br /&gt;
        -- add px to sizedefault if just a number&lt;br /&gt;
        if (tonumber(sizedefault) or 0) &amp;gt; 0 then&lt;br /&gt;
            sizedefault = sizedefault .. &amp;quot;px&amp;quot;;&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        result = &amp;quot;[[File:&amp;quot; .. image;&lt;br /&gt;
        if page ~= &amp;quot;&amp;quot; and page ~= nil then&lt;br /&gt;
            result = result .. &amp;quot;|page=&amp;quot; .. page;&lt;br /&gt;
        end&lt;br /&gt;
        if size ~= &amp;quot;&amp;quot; and size ~= nil then&lt;br /&gt;
            result = result .. &amp;quot;|&amp;quot; .. size;&lt;br /&gt;
        elseif sizedefault ~= &amp;quot;&amp;quot; and sizedefault ~= nil then&lt;br /&gt;
            result = result .. &amp;quot;|&amp;quot; .. sizedefault;&lt;br /&gt;
        else&lt;br /&gt;
            result = result .. &amp;quot;|frameless&amp;quot;;&lt;br /&gt;
        end&lt;br /&gt;
        if center == &amp;quot;yes&amp;quot; then&lt;br /&gt;
            result = result .. &amp;quot;|center&amp;quot;&lt;br /&gt;
        end&lt;br /&gt;
        if alt ~= &amp;quot;&amp;quot; and alt ~= nil then&lt;br /&gt;
            result = result .. &amp;quot;|alt=&amp;quot; .. alt;&lt;br /&gt;
        end&lt;br /&gt;
        if link ~= &amp;quot;&amp;quot; and link ~= nil then&lt;br /&gt;
            result = result .. &amp;quot;|link=&amp;quot; .. link;&lt;br /&gt;
        end&lt;br /&gt;
        if border == &amp;quot;yes&amp;quot; then&lt;br /&gt;
            result = result .. &amp;quot;|border&amp;quot;;&lt;br /&gt;
        end&lt;br /&gt;
        if upright == &amp;quot;yes&amp;quot; then&lt;br /&gt;
            result = result .. &amp;quot;|upright&amp;quot;;&lt;br /&gt;
        elseif upright ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            result = result .. &amp;quot;|upright=&amp;quot; .. upright;&lt;br /&gt;
        end&lt;br /&gt;
        if thumbtime ~= &amp;quot;&amp;quot; then&lt;br /&gt;
            result = result .. &amp;quot;|thumbtime=&amp;quot; .. thumbtime;&lt;br /&gt;
        end&lt;br /&gt;
        if title ~= &amp;quot;&amp;quot; and title ~= nil then&lt;br /&gt;
            result = result .. &amp;quot;|&amp;quot; .. title;&lt;br /&gt;
        elseif alt ~= &amp;quot;&amp;quot; and alt ~= nil then&lt;br /&gt;
            result = result .. &amp;quot;|&amp;quot; .. alt;&lt;br /&gt;
        end&lt;br /&gt;
        result = result .. &amp;quot;]]&amp;quot;;&lt;br /&gt;
        &lt;br /&gt;
        return result;&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return i;&lt;/div&gt;</summary>
		<author><name>Azizonkg</name></author>
	</entry>
	<entry>
		<id>https://sierra.ss220.space/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Arguments&amp;diff=9891</id>
		<title>Модуль:Arguments</title>
		<link rel="alternate" type="text/html" href="https://sierra.ss220.space/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Arguments&amp;diff=9891"/>
		<updated>2021-10-18T04:03:04Z</updated>

		<summary type="html">&lt;p&gt;Azizonkg: Защитил страницу Модуль:Arguments ([Редактирование=Разрешено только администраторам] (бессрочно) [Переименование=Разрешено только администраторам] (бессрочно))&lt;/p&gt;
&lt;hr /&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(&#039;libraryUtil&#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&#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) == &#039;string&#039; then&lt;br /&gt;
		val = val:match(&#039;^%s*(.-)%s*$&#039;)&lt;br /&gt;
		if val == &#039;&#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) == &#039;string&#039; then&lt;br /&gt;
		return val:match(&#039;^%s*(.-)%s*$&#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) == &#039;string&#039; then&lt;br /&gt;
		if val:find(&#039;%S&#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 == &#039;string&#039; or tp == &#039;number&#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(&#039;getArgs&#039;, 1, frame, &#039;table&#039;, true)&lt;br /&gt;
	checkType(&#039;getArgs&#039;, 2, options, &#039;table&#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&#039;s availability. If we weren&#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) == &#039;table&#039; and type(frame.getParent) == &#039;function&#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&#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(&#039;/sandbox$&#039;, &#039;&#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) == &#039;table&#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&#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&#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) ~= &#039;function&#039; then&lt;br /&gt;
			error(&lt;br /&gt;
				&amp;quot;bad value assigned to option &#039;valueFunc&#039;&amp;quot;&lt;br /&gt;
					.. &#039;(function expected, got &#039;&lt;br /&gt;
					.. type(tidyVal)&lt;br /&gt;
					.. &#039;)&#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 &#039;s&#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] ~= &#039;h&#039; then&lt;br /&gt;
					local tidiedVal = tidyVal(key, val)&lt;br /&gt;
					if tidiedVal == nil then&lt;br /&gt;
						nilArgs[key] = &#039;s&#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) == &#039;string&#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] = &#039;h&#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) == &#039;string&#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;
				&#039;could not write to argument table key &amp;quot;&#039;&lt;br /&gt;
					.. tostring(key)&lt;br /&gt;
					.. &#039;&amp;quot;; the table is read-only&#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;
				&#039;could not write to argument table key &amp;quot;&#039;&lt;br /&gt;
					.. tostring(key)&lt;br /&gt;
					.. &#039;&amp;quot;; overwriting existing arguments is not permitted&#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&#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] = &#039;h&#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) ~= &#039;string&#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&#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;</summary>
		<author><name>Azizonkg</name></author>
	</entry>
	<entry>
		<id>https://sierra.ss220.space/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Arguments&amp;diff=9890</id>
		<title>Модуль:Arguments</title>
		<link rel="alternate" type="text/html" href="https://sierra.ss220.space/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Arguments&amp;diff=9890"/>
		<updated>2021-10-18T04:03:00Z</updated>

		<summary type="html">&lt;p&gt;Azizonkg: Новая страница: «-- This module provides easy processing of arguments passed to Scribunto from -- #invoke. It is intended for use by other Lua modules, and should not be -- called...»&lt;/p&gt;
&lt;hr /&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(&#039;libraryUtil&#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&#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) == &#039;string&#039; then&lt;br /&gt;
		val = val:match(&#039;^%s*(.-)%s*$&#039;)&lt;br /&gt;
		if val == &#039;&#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) == &#039;string&#039; then&lt;br /&gt;
		return val:match(&#039;^%s*(.-)%s*$&#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) == &#039;string&#039; then&lt;br /&gt;
		if val:find(&#039;%S&#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 == &#039;string&#039; or tp == &#039;number&#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(&#039;getArgs&#039;, 1, frame, &#039;table&#039;, true)&lt;br /&gt;
	checkType(&#039;getArgs&#039;, 2, options, &#039;table&#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&#039;s availability. If we weren&#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) == &#039;table&#039; and type(frame.getParent) == &#039;function&#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&#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(&#039;/sandbox$&#039;, &#039;&#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) == &#039;table&#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&#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&#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) ~= &#039;function&#039; then&lt;br /&gt;
			error(&lt;br /&gt;
				&amp;quot;bad value assigned to option &#039;valueFunc&#039;&amp;quot;&lt;br /&gt;
					.. &#039;(function expected, got &#039;&lt;br /&gt;
					.. type(tidyVal)&lt;br /&gt;
					.. &#039;)&#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 &#039;s&#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] ~= &#039;h&#039; then&lt;br /&gt;
					local tidiedVal = tidyVal(key, val)&lt;br /&gt;
					if tidiedVal == nil then&lt;br /&gt;
						nilArgs[key] = &#039;s&#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) == &#039;string&#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] = &#039;h&#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) == &#039;string&#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;
				&#039;could not write to argument table key &amp;quot;&#039;&lt;br /&gt;
					.. tostring(key)&lt;br /&gt;
					.. &#039;&amp;quot;; the table is read-only&#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;
				&#039;could not write to argument table key &amp;quot;&#039;&lt;br /&gt;
					.. tostring(key)&lt;br /&gt;
					.. &#039;&amp;quot;; overwriting existing arguments is not permitted&#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&#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] = &#039;h&#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) ~= &#039;string&#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&#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;</summary>
		<author><name>Azizonkg</name></author>
	</entry>
	<entry>
		<id>https://sierra.ss220.space/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Navbar&amp;diff=9889</id>
		<title>Модуль:Navbar</title>
		<link rel="alternate" type="text/html" href="https://sierra.ss220.space/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Navbar&amp;diff=9889"/>
		<updated>2021-10-18T04:02:01Z</updated>

		<summary type="html">&lt;p&gt;Azizonkg: Защитил страницу Модуль:Navbar ([Редактирование=Разрешено только администраторам] (бессрочно) [Переименование=Разрешено только администраторам] (бессрочно))&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
local getArgs&lt;br /&gt;
&lt;br /&gt;
function p._navbar(args)&lt;br /&gt;
	local titleArg = 1&lt;br /&gt;
&lt;br /&gt;
	if args.collapsible then&lt;br /&gt;
		titleArg = 2&lt;br /&gt;
		if not args.plain then&lt;br /&gt;
			args.mini = 1&lt;br /&gt;
		end&lt;br /&gt;
		if args.fontcolor then&lt;br /&gt;
			args.fontstyle = &#039;color:&#039; .. args.fontcolor .. &#039;;&#039;&lt;br /&gt;
		end&lt;br /&gt;
		args.style = &#039;float:left; text-align:left; width:6em;&#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local titleText = args[titleArg] or (&#039;:&#039; .. mw.getCurrentFrame():getParent():getTitle())&lt;br /&gt;
	local title = mw.title.new(mw.text.trim(titleText), &#039;Template&#039;);&lt;br /&gt;
&lt;br /&gt;
	if not title then&lt;br /&gt;
		error(&#039;Invalid title &#039; .. titleText)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local talkpage = title.talkPageTitle and title.talkPageTitle.fullText or &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
	local div = mw.html.create():tag(&#039;div&#039;)&lt;br /&gt;
	div&lt;br /&gt;
		:addClass(&#039;plainlinks&#039;)&lt;br /&gt;
		:addClass(&#039;hlist&#039;)&lt;br /&gt;
		:addClass(&#039;navbar&#039;)&lt;br /&gt;
		:cssText(args.style)&lt;br /&gt;
&lt;br /&gt;
	if args.mini then div:addClass(&#039;mini&#039;) end&lt;br /&gt;
&lt;br /&gt;
	if not (args.mini or args.plain) then&lt;br /&gt;
		div&lt;br /&gt;
			:tag(&#039;span&#039;)&lt;br /&gt;
				:css(&#039;word-spacing&#039;, 0)&lt;br /&gt;
				:cssText(args.fontstyle)&lt;br /&gt;
				:wikitext(args.text or &#039;This box:&#039;)&lt;br /&gt;
				:wikitext(&#039; &#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args.brackets then&lt;br /&gt;
		div&lt;br /&gt;
			:tag(&#039;span&#039;)&lt;br /&gt;
				:css(&#039;margin-right&#039;, &#039;-0.125em&#039;)&lt;br /&gt;
				:cssText(args.fontstyle)&lt;br /&gt;
				:wikitext(&#039;&amp;amp;#91;&#039;)&lt;br /&gt;
				:newline();&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local ul = div:tag(&#039;ul&#039;);&lt;br /&gt;
&lt;br /&gt;
	ul&lt;br /&gt;
		:tag(&#039;li&#039;)&lt;br /&gt;
			:addClass(&#039;nv-view&#039;)&lt;br /&gt;
			:wikitext(&#039;[[&#039; .. title.fullText .. &#039;|&#039;)&lt;br /&gt;
			:tag(args.mini and &#039;abbr&#039; or &#039;span&#039;)&lt;br /&gt;
				:attr(&#039;title&#039;, &#039;View this template&#039;)&lt;br /&gt;
				:cssText(args.fontstyle)&lt;br /&gt;
				:wikitext(args.mini and &#039;v&#039; or &#039;view&#039;)&lt;br /&gt;
				:done()&lt;br /&gt;
			:wikitext(&#039;]]&#039;)&lt;br /&gt;
			:done()&lt;br /&gt;
		:tag(&#039;li&#039;)&lt;br /&gt;
			:addClass(&#039;nv-talk&#039;)&lt;br /&gt;
			:wikitext(&#039;[[&#039; .. talkpage .. &#039;|&#039;)&lt;br /&gt;
			:tag(args.mini and &#039;abbr&#039; or &#039;span&#039;)&lt;br /&gt;
				:attr(&#039;title&#039;, &#039;Discuss this template&#039;)&lt;br /&gt;
				:cssText(args.fontstyle)&lt;br /&gt;
				:wikitext(args.mini and &#039;t&#039; or &#039;talk&#039;)&lt;br /&gt;
				:done()&lt;br /&gt;
			:wikitext(&#039;]]&#039;);&lt;br /&gt;
&lt;br /&gt;
	if not args.noedit then&lt;br /&gt;
		ul&lt;br /&gt;
			:tag(&#039;li&#039;)&lt;br /&gt;
				:addClass(&#039;nv-edit&#039;)&lt;br /&gt;
				:wikitext(&#039;[&#039; .. title:fullUrl(&#039;action=edit&#039;) .. &#039; &#039;)&lt;br /&gt;
				:tag(args.mini and &#039;abbr&#039; or &#039;span&#039;)&lt;br /&gt;
					:attr(&#039;title&#039;, &#039;Edit this template&#039;)&lt;br /&gt;
					:cssText(args.fontstyle)&lt;br /&gt;
					:wikitext(args.mini and &#039;e&#039; or &#039;edit&#039;)&lt;br /&gt;
					:done()&lt;br /&gt;
				:wikitext(&#039;]&#039;);&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args.brackets then&lt;br /&gt;
		div&lt;br /&gt;
			:tag(&#039;span&#039;)&lt;br /&gt;
				:css(&#039;margin-left&#039;, &#039;-0.125em&#039;)&lt;br /&gt;
				:cssText(args.fontstyle)&lt;br /&gt;
				:wikitext(&#039;&amp;amp;#93;&#039;)&lt;br /&gt;
				:newline();&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args.collapsible then&lt;br /&gt;
		div&lt;br /&gt;
			:done()&lt;br /&gt;
		:tag(&#039;span&#039;)&lt;br /&gt;
			:css(&#039;font-size&#039;, &#039;110%&#039;)&lt;br /&gt;
			:cssText(args.fontstyle)&lt;br /&gt;
			:wikitext(args[1])&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return tostring(div:done())&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.navbar(frame)&lt;br /&gt;
	if not getArgs then&lt;br /&gt;
		getArgs = require(&#039;Module:Arguments&#039;).getArgs&lt;br /&gt;
	end&lt;br /&gt;
	return p._navbar(getArgs(frame))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Azizonkg</name></author>
	</entry>
	<entry>
		<id>https://sierra.ss220.space/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Navbar&amp;diff=9888</id>
		<title>Модуль:Navbar</title>
		<link rel="alternate" type="text/html" href="https://sierra.ss220.space/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Navbar&amp;diff=9888"/>
		<updated>2021-10-18T04:01:56Z</updated>

		<summary type="html">&lt;p&gt;Azizonkg: Новая страница: «local p = {}  local getArgs  function p._navbar(args) 	local titleArg = 1  	if args.collapsible then 		titleArg = 2 		if not args.plain then 			args.mini = 1 		en...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
local getArgs&lt;br /&gt;
&lt;br /&gt;
function p._navbar(args)&lt;br /&gt;
	local titleArg = 1&lt;br /&gt;
&lt;br /&gt;
	if args.collapsible then&lt;br /&gt;
		titleArg = 2&lt;br /&gt;
		if not args.plain then&lt;br /&gt;
			args.mini = 1&lt;br /&gt;
		end&lt;br /&gt;
		if args.fontcolor then&lt;br /&gt;
			args.fontstyle = &#039;color:&#039; .. args.fontcolor .. &#039;;&#039;&lt;br /&gt;
		end&lt;br /&gt;
		args.style = &#039;float:left; text-align:left; width:6em;&#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local titleText = args[titleArg] or (&#039;:&#039; .. mw.getCurrentFrame():getParent():getTitle())&lt;br /&gt;
	local title = mw.title.new(mw.text.trim(titleText), &#039;Template&#039;);&lt;br /&gt;
&lt;br /&gt;
	if not title then&lt;br /&gt;
		error(&#039;Invalid title &#039; .. titleText)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local talkpage = title.talkPageTitle and title.talkPageTitle.fullText or &#039;&#039;;&lt;br /&gt;
&lt;br /&gt;
	local div = mw.html.create():tag(&#039;div&#039;)&lt;br /&gt;
	div&lt;br /&gt;
		:addClass(&#039;plainlinks&#039;)&lt;br /&gt;
		:addClass(&#039;hlist&#039;)&lt;br /&gt;
		:addClass(&#039;navbar&#039;)&lt;br /&gt;
		:cssText(args.style)&lt;br /&gt;
&lt;br /&gt;
	if args.mini then div:addClass(&#039;mini&#039;) end&lt;br /&gt;
&lt;br /&gt;
	if not (args.mini or args.plain) then&lt;br /&gt;
		div&lt;br /&gt;
			:tag(&#039;span&#039;)&lt;br /&gt;
				:css(&#039;word-spacing&#039;, 0)&lt;br /&gt;
				:cssText(args.fontstyle)&lt;br /&gt;
				:wikitext(args.text or &#039;This box:&#039;)&lt;br /&gt;
				:wikitext(&#039; &#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args.brackets then&lt;br /&gt;
		div&lt;br /&gt;
			:tag(&#039;span&#039;)&lt;br /&gt;
				:css(&#039;margin-right&#039;, &#039;-0.125em&#039;)&lt;br /&gt;
				:cssText(args.fontstyle)&lt;br /&gt;
				:wikitext(&#039;&amp;amp;#91;&#039;)&lt;br /&gt;
				:newline();&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local ul = div:tag(&#039;ul&#039;);&lt;br /&gt;
&lt;br /&gt;
	ul&lt;br /&gt;
		:tag(&#039;li&#039;)&lt;br /&gt;
			:addClass(&#039;nv-view&#039;)&lt;br /&gt;
			:wikitext(&#039;[[&#039; .. title.fullText .. &#039;|&#039;)&lt;br /&gt;
			:tag(args.mini and &#039;abbr&#039; or &#039;span&#039;)&lt;br /&gt;
				:attr(&#039;title&#039;, &#039;View this template&#039;)&lt;br /&gt;
				:cssText(args.fontstyle)&lt;br /&gt;
				:wikitext(args.mini and &#039;v&#039; or &#039;view&#039;)&lt;br /&gt;
				:done()&lt;br /&gt;
			:wikitext(&#039;]]&#039;)&lt;br /&gt;
			:done()&lt;br /&gt;
		:tag(&#039;li&#039;)&lt;br /&gt;
			:addClass(&#039;nv-talk&#039;)&lt;br /&gt;
			:wikitext(&#039;[[&#039; .. talkpage .. &#039;|&#039;)&lt;br /&gt;
			:tag(args.mini and &#039;abbr&#039; or &#039;span&#039;)&lt;br /&gt;
				:attr(&#039;title&#039;, &#039;Discuss this template&#039;)&lt;br /&gt;
				:cssText(args.fontstyle)&lt;br /&gt;
				:wikitext(args.mini and &#039;t&#039; or &#039;talk&#039;)&lt;br /&gt;
				:done()&lt;br /&gt;
			:wikitext(&#039;]]&#039;);&lt;br /&gt;
&lt;br /&gt;
	if not args.noedit then&lt;br /&gt;
		ul&lt;br /&gt;
			:tag(&#039;li&#039;)&lt;br /&gt;
				:addClass(&#039;nv-edit&#039;)&lt;br /&gt;
				:wikitext(&#039;[&#039; .. title:fullUrl(&#039;action=edit&#039;) .. &#039; &#039;)&lt;br /&gt;
				:tag(args.mini and &#039;abbr&#039; or &#039;span&#039;)&lt;br /&gt;
					:attr(&#039;title&#039;, &#039;Edit this template&#039;)&lt;br /&gt;
					:cssText(args.fontstyle)&lt;br /&gt;
					:wikitext(args.mini and &#039;e&#039; or &#039;edit&#039;)&lt;br /&gt;
					:done()&lt;br /&gt;
				:wikitext(&#039;]&#039;);&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args.brackets then&lt;br /&gt;
		div&lt;br /&gt;
			:tag(&#039;span&#039;)&lt;br /&gt;
				:css(&#039;margin-left&#039;, &#039;-0.125em&#039;)&lt;br /&gt;
				:cssText(args.fontstyle)&lt;br /&gt;
				:wikitext(&#039;&amp;amp;#93;&#039;)&lt;br /&gt;
				:newline();&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if args.collapsible then&lt;br /&gt;
		div&lt;br /&gt;
			:done()&lt;br /&gt;
		:tag(&#039;span&#039;)&lt;br /&gt;
			:css(&#039;font-size&#039;, &#039;110%&#039;)&lt;br /&gt;
			:cssText(args.fontstyle)&lt;br /&gt;
			:wikitext(args[1])&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return tostring(div:done())&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.navbar(frame)&lt;br /&gt;
	if not getArgs then&lt;br /&gt;
		getArgs = require(&#039;Module:Arguments&#039;).getArgs&lt;br /&gt;
	end&lt;br /&gt;
	return p._navbar(getArgs(frame))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Azizonkg</name></author>
	</entry>
	<entry>
		<id>https://sierra.ss220.space/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Infobox&amp;diff=9887</id>
		<title>Модуль:Infobox</title>
		<link rel="alternate" type="text/html" href="https://sierra.ss220.space/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Infobox&amp;diff=9887"/>
		<updated>2021-10-18T03:47:53Z</updated>

		<summary type="html">&lt;p&gt;Azizonkg: Защитил страницу Модуль:Infobox ([Редактирование=Разрешено только администраторам] (бессрочно) [Переименование=Разрешено только администраторам] (бессрочно))&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--&lt;br /&gt;
-- This module implements {{Infobox}}&lt;br /&gt;
--&lt;br /&gt;
 &lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local navbar = require(&#039;Module:Navbar&#039;)._navbar&lt;br /&gt;
&lt;br /&gt;
local args = {}&lt;br /&gt;
local origArgs&lt;br /&gt;
local root&lt;br /&gt;
&lt;br /&gt;
local function notempty( s ) return s and s:match( &#039;%S&#039; ) end&lt;br /&gt;
&lt;br /&gt;
local function fixChildBoxes(sval, tt)&lt;br /&gt;
	if notempty(sval) then&lt;br /&gt;
		local marker = &#039;&amp;lt;span class=special_infobox_marker&amp;gt;&#039;&lt;br /&gt;
		local s = sval&lt;br /&gt;
		s = mw.ustring.gsub(s, &#039;(&amp;lt;%s*[Tt][Rr])&#039;, marker .. &#039;%1&#039;)&lt;br /&gt;
		s = mw.ustring.gsub(s, &#039;(&amp;lt;/[Tt][Rr]%s*&amp;gt;)&#039;, &#039;%1&#039; .. marker)&lt;br /&gt;
		if s:match(marker) then&lt;br /&gt;
			s = mw.ustring.gsub(s, marker .. &#039;%s*&#039; .. marker, &#039;&#039;)&lt;br /&gt;
			s = mw.ustring.gsub(s, &#039;([\r\n]|-[^\r\n]*[\r\n])%s*&#039; .. marker, &#039;%1&#039;)&lt;br /&gt;
			s = mw.ustring.gsub(s, marker .. &#039;%s*([\r\n]|-)&#039;, &#039;%1&#039;)&lt;br /&gt;
			s = mw.ustring.gsub(s, &#039;(&amp;lt;/[Cc][Aa][Pp][Tt][Ii][Oo][Nn]%s*&amp;gt;%s*)&#039; .. marker, &#039;%1&#039;)&lt;br /&gt;
			s = mw.ustring.gsub(s, &#039;(&amp;lt;%s*[Tt][Aa][Bb][Ll][Ee][^&amp;lt;&amp;gt;]*&amp;gt;%s*)&#039; .. marker, &#039;%1&#039;)&lt;br /&gt;
			s = mw.ustring.gsub(s, &#039;^(%{|[^\r\n]*[\r\n]%s*)&#039; .. marker, &#039;%1&#039;)&lt;br /&gt;
			s = mw.ustring.gsub(s, &#039;([\r\n]%{|[^\r\n]*[\r\n]%s*)&#039; .. marker, &#039;%1&#039;)&lt;br /&gt;
			s = mw.ustring.gsub(s,  marker .. &#039;(%s*&amp;lt;/[Tt][Aa][Bb][Ll][Ee]%s*&amp;gt;)&#039;, &#039;%1&#039;)&lt;br /&gt;
			s = mw.ustring.gsub(s,  marker .. &#039;(%s*\n|%})&#039;, &#039;%1&#039;)&lt;br /&gt;
		end&lt;br /&gt;
		if s:match(marker) then&lt;br /&gt;
			local subcells = mw.text.split(s, marker)&lt;br /&gt;
			s = &#039;&#039;&lt;br /&gt;
			for k = 1, #subcells do&lt;br /&gt;
				if k == 1 then&lt;br /&gt;
					s = s .. subcells[k] .. &#039;&amp;lt;/&#039; .. tt .. &#039;&amp;gt;&amp;lt;/tr&amp;gt;&#039;&lt;br /&gt;
				elseif k == #subcells then&lt;br /&gt;
					local rowstyle = &#039; style=&amp;quot;display:none&amp;quot;&#039;&lt;br /&gt;
					if notempty(subcells[k]) then rowstyle = &#039;&#039;	end&lt;br /&gt;
					s = s .. &#039;&amp;lt;tr&#039; .. rowstyle ..&#039;&amp;gt;&amp;lt;&#039; .. tt .. &#039; colspan=2&amp;gt;\n&#039; .. subcells[k]&lt;br /&gt;
				elseif notempty(subcells[k]) then&lt;br /&gt;
					if (k % 2) == 0 then&lt;br /&gt;
						s = s .. subcells[k]&lt;br /&gt;
					else&lt;br /&gt;
						s = s .. &#039;&amp;lt;tr&amp;gt;&amp;lt;&#039; .. tt .. &#039; colspan=2&amp;gt;\n&#039; .. subcells[k] .. &#039;&amp;lt;/&#039; .. tt .. &#039;&amp;gt;&amp;lt;/tr&amp;gt;&#039;&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return s&lt;br /&gt;
	else&lt;br /&gt;
		return sval&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 the values of two tables, as a sequence.&lt;br /&gt;
    local vals = {}&lt;br /&gt;
    for k, v in pairs(t1) do&lt;br /&gt;
        vals[v] = true&lt;br /&gt;
    end&lt;br /&gt;
    for k, v in pairs(t2) do&lt;br /&gt;
        vals[v] = true&lt;br /&gt;
    end&lt;br /&gt;
    local ret = {}&lt;br /&gt;
    for k, v in pairs(vals) do&lt;br /&gt;
        table.insert(ret, k)&lt;br /&gt;
    end&lt;br /&gt;
    return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getArgNums(prefix)&lt;br /&gt;
    -- Returns a table containing the numbers of the arguments that exist&lt;br /&gt;
    -- for the specified prefix. For example, if the prefix was &#039;data&#039;, and&lt;br /&gt;
    -- &#039;data1&#039;, &#039;data2&#039;, and &#039;data5&#039; exist, it would return {1, 2, 5}.&lt;br /&gt;
    local nums = {}&lt;br /&gt;
    for k, v in pairs(args) do&lt;br /&gt;
        local num = tostring(k):match(&#039;^&#039; .. prefix .. &#039;([1-9]%d*)$&#039;)&lt;br /&gt;
        if num then table.insert(nums, tonumber(num)) 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;
local function addRow(rowArgs)&lt;br /&gt;
    -- Adds a row to the infobox, with either a header cell&lt;br /&gt;
    -- or a label/data cell combination.&lt;br /&gt;
    if rowArgs.header then&lt;br /&gt;
        root&lt;br /&gt;
            :tag(&#039;tr&#039;)&lt;br /&gt;
                :addClass(rowArgs.rowclass)&lt;br /&gt;
                :cssText(rowArgs.rowstyle)&lt;br /&gt;
                :attr(&#039;id&#039;, rowArgs.rowid)&lt;br /&gt;
                :tag(&#039;th&#039;)&lt;br /&gt;
                    :attr(&#039;colspan&#039;, 2)&lt;br /&gt;
                    :attr(&#039;id&#039;, rowArgs.headerid)&lt;br /&gt;
                    :addClass(rowArgs.class)&lt;br /&gt;
                    :addClass(args.headerclass)&lt;br /&gt;
                    :css(&#039;text-align&#039;, &#039;center&#039;)&lt;br /&gt;
                    :cssText(args.headerstyle)&lt;br /&gt;
                    :cssText(rowArgs.rowcellstyle)&lt;br /&gt;
                    :wikitext(fixChildBoxes(rowArgs.header, &#039;th&#039;))&lt;br /&gt;
    elseif rowArgs.data then&lt;br /&gt;
        local row = root:tag(&#039;tr&#039;)&lt;br /&gt;
        row:addClass(rowArgs.rowclass)&lt;br /&gt;
        row:cssText(rowArgs.rowstyle)&lt;br /&gt;
        row:attr(&#039;id&#039;, rowArgs.rowid)&lt;br /&gt;
        if rowArgs.label then&lt;br /&gt;
            row&lt;br /&gt;
                :tag(&#039;th&#039;)&lt;br /&gt;
                    :attr(&#039;scope&#039;, &#039;row&#039;)&lt;br /&gt;
                    :attr(&#039;id&#039;, rowArgs.labelid)&lt;br /&gt;
                    :cssText(args.labelstyle)&lt;br /&gt;
                    :cssText(rowArgs.rowcellstyle)&lt;br /&gt;
                    :wikitext(rowArgs.label)&lt;br /&gt;
                    :done()&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        local dataCell = row:tag(&#039;td&#039;)&lt;br /&gt;
        if not rowArgs.label then &lt;br /&gt;
            dataCell&lt;br /&gt;
                :attr(&#039;colspan&#039;, 2)&lt;br /&gt;
                :css(&#039;text-align&#039;, &#039;center&#039;) &lt;br /&gt;
        end&lt;br /&gt;
        dataCell&lt;br /&gt;
            :attr(&#039;id&#039;, rowArgs.dataid)&lt;br /&gt;
            :addClass(rowArgs.class)&lt;br /&gt;
            :cssText(rowArgs.datastyle)&lt;br /&gt;
            :cssText(rowArgs.rowcellstyle)&lt;br /&gt;
            :newline()&lt;br /&gt;
            :wikitext(fixChildBoxes(rowArgs.data, &#039;td&#039;))&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderTitle()&lt;br /&gt;
    if not args.title then return end&lt;br /&gt;
&lt;br /&gt;
    root&lt;br /&gt;
        :tag(&#039;caption&#039;)&lt;br /&gt;
            :addClass(args.titleclass)&lt;br /&gt;
            :cssText(args.titlestyle)&lt;br /&gt;
            :wikitext(args.title)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderAboveRow()&lt;br /&gt;
    if not args.above then return end&lt;br /&gt;
    &lt;br /&gt;
    root&lt;br /&gt;
        :tag(&#039;tr&#039;)&lt;br /&gt;
            :tag(&#039;th&#039;)&lt;br /&gt;
                :attr(&#039;colspan&#039;, 2)&lt;br /&gt;
                :addClass(args.aboveclass)&lt;br /&gt;
                :css(&#039;text-align&#039;, &#039;center&#039;)&lt;br /&gt;
                :css(&#039;font-size&#039;, &#039;125%&#039;)&lt;br /&gt;
                :css(&#039;font-weight&#039;, &#039;bold&#039;)&lt;br /&gt;
                :cssText(args.abovestyle)&lt;br /&gt;
                :wikitext(fixChildBoxes(args.above,&#039;th&#039;))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderBelowRow()&lt;br /&gt;
    if not args.below then return end&lt;br /&gt;
    &lt;br /&gt;
    root&lt;br /&gt;
        :tag(&#039;tr&#039;)&lt;br /&gt;
            :tag(&#039;td&#039;)&lt;br /&gt;
                :attr(&#039;colspan&#039;, &#039;2&#039;)&lt;br /&gt;
                :addClass(args.belowclass)&lt;br /&gt;
                :css(&#039;text-align&#039;, &#039;center&#039;)&lt;br /&gt;
                :cssText(args.belowstyle)&lt;br /&gt;
                :newline()&lt;br /&gt;
                :wikitext(fixChildBoxes(args.below,&#039;td&#039;))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderSubheaders()&lt;br /&gt;
    if args.subheader then&lt;br /&gt;
        args.subheader1 = args.subheader&lt;br /&gt;
    end&lt;br /&gt;
    if args.subheaderrowclass then&lt;br /&gt;
        args.subheaderrowclass1 = args.subheaderrowclass&lt;br /&gt;
    end&lt;br /&gt;
    local subheadernums = getArgNums(&#039;subheader&#039;)&lt;br /&gt;
    for k, num in ipairs(subheadernums) do&lt;br /&gt;
        addRow({&lt;br /&gt;
            data = args[&#039;subheader&#039; .. tostring(num)],&lt;br /&gt;
            datastyle = args.subheaderstyle or args[&#039;subheaderstyle&#039; .. tostring(num)],&lt;br /&gt;
            class = args.subheaderclass,&lt;br /&gt;
            rowclass = args[&#039;subheaderrowclass&#039; .. tostring(num)]&lt;br /&gt;
        })&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderImages()&lt;br /&gt;
    if args.image then&lt;br /&gt;
        args.image1 = args.image&lt;br /&gt;
    end&lt;br /&gt;
    if args.caption then&lt;br /&gt;
        args.caption1 = args.caption&lt;br /&gt;
    end&lt;br /&gt;
    local imagenums = getArgNums(&#039;image&#039;)&lt;br /&gt;
    for k, num in ipairs(imagenums) do&lt;br /&gt;
        local caption = args[&#039;caption&#039; .. tostring(num)]&lt;br /&gt;
        local data = mw.html.create():wikitext(args[&#039;image&#039; .. tostring(num)])&lt;br /&gt;
        if caption then&lt;br /&gt;
            data&lt;br /&gt;
                :tag(&#039;div&#039;)&lt;br /&gt;
                    :cssText(args.captionstyle)&lt;br /&gt;
                    :wikitext(caption)&lt;br /&gt;
        end&lt;br /&gt;
        addRow({&lt;br /&gt;
            data = tostring(data),&lt;br /&gt;
            datastyle = args.imagestyle,&lt;br /&gt;
            class = args.imageclass,&lt;br /&gt;
            rowclass = args[&#039;imagerowclass&#039; .. tostring(num)]&lt;br /&gt;
        })&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderRows()&lt;br /&gt;
    -- Gets the union of the header and data argument numbers,&lt;br /&gt;
    -- and renders them all in order using addRow.&lt;br /&gt;
    local rownums = union(getArgNums(&#039;header&#039;), getArgNums(&#039;data&#039;))&lt;br /&gt;
    table.sort(rownums)&lt;br /&gt;
    for k, num in ipairs(rownums) do&lt;br /&gt;
        addRow({&lt;br /&gt;
            header = args[&#039;header&#039; .. tostring(num)],&lt;br /&gt;
            label = args[&#039;label&#039; .. tostring(num)],&lt;br /&gt;
            data = args[&#039;data&#039; .. tostring(num)],&lt;br /&gt;
            datastyle = args.datastyle,&lt;br /&gt;
            class = args[&#039;class&#039; .. tostring(num)],&lt;br /&gt;
            rowclass = args[&#039;rowclass&#039; .. tostring(num)],&lt;br /&gt;
            rowstyle = args[&#039;rowstyle&#039; .. tostring(num)],&lt;br /&gt;
            rowcellstyle = args[&#039;rowcellstyle&#039; .. tostring(num)],&lt;br /&gt;
            dataid = args[&#039;dataid&#039; .. tostring(num)],&lt;br /&gt;
            labelid = args[&#039;labelid&#039; .. tostring(num)],&lt;br /&gt;
            headerid = args[&#039;headerid&#039; .. tostring(num)],&lt;br /&gt;
            rowid = args[&#039;rowid&#039; .. tostring(num)]&lt;br /&gt;
        })&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderNavBar()&lt;br /&gt;
    if not args.name then return end&lt;br /&gt;
    &lt;br /&gt;
    root&lt;br /&gt;
        :tag(&#039;tr&#039;)&lt;br /&gt;
            :tag(&#039;td&#039;)&lt;br /&gt;
                :attr(&#039;colspan&#039;, &#039;2&#039;)&lt;br /&gt;
                :css(&#039;text-align&#039;, &#039;right&#039;)&lt;br /&gt;
                :wikitext(navbar{&lt;br /&gt;
                    args.name,&lt;br /&gt;
                    mini = 1,&lt;br /&gt;
                })&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderItalicTitle()&lt;br /&gt;
    local italicTitle = args[&#039;italic title&#039;] and mw.ustring.lower(args[&#039;italic title&#039;])&lt;br /&gt;
    if italicTitle == &#039;&#039; or italicTitle == &#039;force&#039; or italicTitle == &#039;yes&#039; then&lt;br /&gt;
        root:wikitext(mw.getCurrentFrame():expandTemplate({title = &#039;italic title&#039;}))&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderTrackingCategories()&lt;br /&gt;
    if args.decat ~= &#039;yes&#039; then&lt;br /&gt;
        if #(getArgNums(&#039;data&#039;)) == 0 and mw.title.getCurrentTitle().namespace == 0 then&lt;br /&gt;
            root:wikitext(&#039;[[Category:Articles which use infobox templates with no data rows]]&#039;)&lt;br /&gt;
        end&lt;br /&gt;
        if args.child == &#039;yes&#039; and args.title then&lt;br /&gt;
            root:wikitext(&#039;[[Category:Pages which use embedded infobox templates with the title parameter]]&#039;)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function _infobox()&lt;br /&gt;
    -- Specify the overall layout of the infobox, with special settings&lt;br /&gt;
    -- if the infobox is used as a &#039;child&#039; inside another infobox.&lt;br /&gt;
    if args.child ~= &#039;yes&#039; then&lt;br /&gt;
        root = mw.html.create(&#039;table&#039;)&lt;br /&gt;
        &lt;br /&gt;
        root&lt;br /&gt;
            :addClass(&#039;infobox&#039;)&lt;br /&gt;
            :addClass(args.bodyclass)&lt;br /&gt;
            &lt;br /&gt;
            if args.subbox == &#039;yes&#039; then&lt;br /&gt;
                root&lt;br /&gt;
                    :css(&#039;padding&#039;, &#039;0&#039;)&lt;br /&gt;
                    :css(&#039;border&#039;, &#039;none&#039;)&lt;br /&gt;
                    :css(&#039;margin&#039;, &#039;-3px&#039;)&lt;br /&gt;
                    :css(&#039;width&#039;, &#039;auto&#039;)&lt;br /&gt;
                    :css(&#039;min-width&#039;, &#039;100%&#039;)&lt;br /&gt;
                    :css(&#039;font-size&#039;, &#039;100%&#039;)&lt;br /&gt;
                    :css(&#039;clear&#039;, &#039;none&#039;)&lt;br /&gt;
                    :css(&#039;float&#039;, &#039;none&#039;)&lt;br /&gt;
                    :css(&#039;background-color&#039;, &#039;transparent&#039;)&lt;br /&gt;
            else&lt;br /&gt;
                root&lt;br /&gt;
                    :css(&#039;width&#039;, &#039;22em&#039;)&lt;br /&gt;
            end&lt;br /&gt;
        root&lt;br /&gt;
            :cssText(args.bodystyle)&lt;br /&gt;
    &lt;br /&gt;
        renderTitle()&lt;br /&gt;
        renderAboveRow()&lt;br /&gt;
    else&lt;br /&gt;
        root = mw.html.create()&lt;br /&gt;
        &lt;br /&gt;
        root&lt;br /&gt;
            :wikitext(args.title)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    renderSubheaders()&lt;br /&gt;
    renderImages() &lt;br /&gt;
    renderRows() &lt;br /&gt;
    renderBelowRow()  &lt;br /&gt;
    renderNavBar()&lt;br /&gt;
    renderItalicTitle()&lt;br /&gt;
    renderTrackingCategories()&lt;br /&gt;
    &lt;br /&gt;
    return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function preprocessSingleArg(argName)&lt;br /&gt;
    -- If the argument exists and isn&#039;t blank, add it to the argument table.&lt;br /&gt;
    -- Blank arguments are treated as nil to match the behaviour of ParserFunctions.&lt;br /&gt;
    if origArgs[argName] and origArgs[argName] ~= &#039;&#039; then&lt;br /&gt;
        args[argName] = origArgs[argName]&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function preprocessArgs(prefixTable, step)&lt;br /&gt;
    -- Assign the parameters with the given prefixes to the args table, in order, in batches&lt;br /&gt;
    -- of the step size specified. This is to prevent references etc. from appearing in the&lt;br /&gt;
    -- wrong order. The prefixTable should be an array containing tables, each of which has&lt;br /&gt;
    -- two possible fields, a &amp;quot;prefix&amp;quot; string and a &amp;quot;depend&amp;quot; table. The function always parses&lt;br /&gt;
    -- parameters containing the &amp;quot;prefix&amp;quot; string, but only parses parameters in the &amp;quot;depend&amp;quot;&lt;br /&gt;
    -- table if the prefix parameter is present and non-blank.&lt;br /&gt;
    if type(prefixTable) ~= &#039;table&#039; then&lt;br /&gt;
        error(&amp;quot;Non-table value detected for the prefix table&amp;quot;, 2)&lt;br /&gt;
    end&lt;br /&gt;
    if type(step) ~= &#039;number&#039; then&lt;br /&gt;
        error(&amp;quot;Invalid step value detected&amp;quot;, 2)&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Get arguments without a number suffix, and check for bad input.&lt;br /&gt;
    for i,v in ipairs(prefixTable) do&lt;br /&gt;
        if type(v) ~= &#039;table&#039; or type(v.prefix) ~= &amp;quot;string&amp;quot; or (v.depend and type(v.depend) ~= &#039;table&#039;) then&lt;br /&gt;
            error(&#039;Invalid input detected to preprocessArgs prefix table&#039;, 2)&lt;br /&gt;
        end&lt;br /&gt;
        preprocessSingleArg(v.prefix)&lt;br /&gt;
        -- Only parse the depend parameter if the prefix parameter is present and not blank.&lt;br /&gt;
        if args[v.prefix] and v.depend then&lt;br /&gt;
            for j, dependValue in ipairs(v.depend) do&lt;br /&gt;
                if type(dependValue) ~= &#039;string&#039; then&lt;br /&gt;
                    error(&#039;Invalid &amp;quot;depend&amp;quot; parameter value detected in preprocessArgs&#039;)&lt;br /&gt;
                end&lt;br /&gt;
                preprocessSingleArg(dependValue)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Get arguments with number suffixes.&lt;br /&gt;
    local a = 1 -- Counter variable.&lt;br /&gt;
    local moreArgumentsExist = true&lt;br /&gt;
    while moreArgumentsExist == true do&lt;br /&gt;
        moreArgumentsExist = false&lt;br /&gt;
        for i = a, a + step - 1 do&lt;br /&gt;
            for j,v in ipairs(prefixTable) do&lt;br /&gt;
                local prefixArgName = v.prefix .. tostring(i)&lt;br /&gt;
                if origArgs[prefixArgName] then&lt;br /&gt;
                    moreArgumentsExist = true -- Do another loop if any arguments are found, even blank ones.&lt;br /&gt;
                    preprocessSingleArg(prefixArgName)&lt;br /&gt;
                end&lt;br /&gt;
                -- Process the depend table if the prefix argument is present and not blank, or&lt;br /&gt;
                -- we are processing &amp;quot;prefix1&amp;quot; and &amp;quot;prefix&amp;quot; is present and not blank, and&lt;br /&gt;
                -- if the depend table is present.&lt;br /&gt;
                if v.depend and (args[prefixArgName] or (i == 1 and args[v.prefix])) then&lt;br /&gt;
                    for j,dependValue in ipairs(v.depend) do&lt;br /&gt;
                        local dependArgName = dependValue .. tostring(i)&lt;br /&gt;
                        preprocessSingleArg(dependArgName)&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        a = a + step&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
 &lt;br /&gt;
function p.infobox(frame)&lt;br /&gt;
    -- If called via #invoke, use the args passed into the invoking template.&lt;br /&gt;
    -- Otherwise, for testing purposes, assume args are being passed directly in.&lt;br /&gt;
    if frame == mw.getCurrentFrame() then&lt;br /&gt;
        origArgs = frame:getParent().args&lt;br /&gt;
    else&lt;br /&gt;
        origArgs = frame&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Parse the data parameters in the same order that the old {{infobox}} did, so that&lt;br /&gt;
    -- references etc. will display in the expected places. Parameters that depend on&lt;br /&gt;
    -- another parameter are only processed if that parameter is present, to avoid&lt;br /&gt;
    -- phantom references appearing in article reference lists.&lt;br /&gt;
    preprocessSingleArg(&#039;child&#039;)&lt;br /&gt;
    preprocessSingleArg(&#039;bodyclass&#039;)&lt;br /&gt;
    preprocessSingleArg(&#039;subbox&#039;)&lt;br /&gt;
    preprocessSingleArg(&#039;bodystyle&#039;)&lt;br /&gt;
    preprocessSingleArg(&#039;title&#039;)&lt;br /&gt;
    preprocessSingleArg(&#039;titleclass&#039;)&lt;br /&gt;
    preprocessSingleArg(&#039;titlestyle&#039;)&lt;br /&gt;
    preprocessSingleArg(&#039;above&#039;)&lt;br /&gt;
    preprocessSingleArg(&#039;aboveclass&#039;)&lt;br /&gt;
    preprocessSingleArg(&#039;abovestyle&#039;)&lt;br /&gt;
    preprocessArgs({&lt;br /&gt;
        {prefix = &#039;subheader&#039;, depend = {&#039;subheaderstyle&#039;, &#039;subheaderrowclass&#039;}}&lt;br /&gt;
    }, 10)&lt;br /&gt;
    preprocessSingleArg(&#039;subheaderstyle&#039;)&lt;br /&gt;
    preprocessSingleArg(&#039;subheaderclass&#039;)&lt;br /&gt;
    preprocessArgs({&lt;br /&gt;
        {prefix = &#039;image&#039;, depend = {&#039;caption&#039;, &#039;imagerowclass&#039;}}&lt;br /&gt;
    }, 10)&lt;br /&gt;
    preprocessSingleArg(&#039;captionstyle&#039;)&lt;br /&gt;
    preprocessSingleArg(&#039;imagestyle&#039;)&lt;br /&gt;
    preprocessSingleArg(&#039;imageclass&#039;)&lt;br /&gt;
    preprocessArgs({&lt;br /&gt;
        {prefix = &#039;header&#039;},&lt;br /&gt;
        {prefix = &#039;data&#039;, depend = {&#039;label&#039;}},&lt;br /&gt;
        {prefix = &#039;rowclass&#039;},&lt;br /&gt;
        {prefix = &#039;rowstyle&#039;},&lt;br /&gt;
        {prefix = &#039;rowcellstyle&#039;},&lt;br /&gt;
        {prefix = &#039;class&#039;},&lt;br /&gt;
        {prefix = &#039;dataid&#039;},&lt;br /&gt;
        {prefix = &#039;labelid&#039;},&lt;br /&gt;
        {prefix = &#039;headerid&#039;},&lt;br /&gt;
        {prefix = &#039;rowid&#039;}&lt;br /&gt;
    }, 50)&lt;br /&gt;
    preprocessSingleArg(&#039;headerclass&#039;)&lt;br /&gt;
    preprocessSingleArg(&#039;headerstyle&#039;)&lt;br /&gt;
    preprocessSingleArg(&#039;labelstyle&#039;)&lt;br /&gt;
    preprocessSingleArg(&#039;datastyle&#039;)&lt;br /&gt;
    preprocessSingleArg(&#039;below&#039;)&lt;br /&gt;
    preprocessSingleArg(&#039;belowclass&#039;)&lt;br /&gt;
    preprocessSingleArg(&#039;belowstyle&#039;)&lt;br /&gt;
    preprocessSingleArg(&#039;name&#039;)&lt;br /&gt;
    args[&#039;italic title&#039;] = origArgs[&#039;italic title&#039;] -- different behaviour if blank or absent&lt;br /&gt;
    preprocessSingleArg(&#039;decat&#039;)&lt;br /&gt;
 &lt;br /&gt;
    return _infobox()&lt;br /&gt;
end&lt;br /&gt;
 &lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Azizonkg</name></author>
	</entry>
	<entry>
		<id>https://sierra.ss220.space/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Infobox&amp;diff=9886</id>
		<title>Модуль:Infobox</title>
		<link rel="alternate" type="text/html" href="https://sierra.ss220.space/index.php?title=%D0%9C%D0%BE%D0%B4%D1%83%D0%BB%D1%8C:Infobox&amp;diff=9886"/>
		<updated>2021-10-18T03:47:47Z</updated>

		<summary type="html">&lt;p&gt;Azizonkg: Новая страница: «-- -- This module implements {{Infobox}} --   local p = {}  local navbar = require(&amp;#039;Module:Navbar&amp;#039;)._navbar  local args = {} local origArgs local root  local func...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;--&lt;br /&gt;
-- This module implements {{Infobox}}&lt;br /&gt;
--&lt;br /&gt;
 &lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local navbar = require(&#039;Module:Navbar&#039;)._navbar&lt;br /&gt;
&lt;br /&gt;
local args = {}&lt;br /&gt;
local origArgs&lt;br /&gt;
local root&lt;br /&gt;
&lt;br /&gt;
local function notempty( s ) return s and s:match( &#039;%S&#039; ) end&lt;br /&gt;
&lt;br /&gt;
local function fixChildBoxes(sval, tt)&lt;br /&gt;
	if notempty(sval) then&lt;br /&gt;
		local marker = &#039;&amp;lt;span class=special_infobox_marker&amp;gt;&#039;&lt;br /&gt;
		local s = sval&lt;br /&gt;
		s = mw.ustring.gsub(s, &#039;(&amp;lt;%s*[Tt][Rr])&#039;, marker .. &#039;%1&#039;)&lt;br /&gt;
		s = mw.ustring.gsub(s, &#039;(&amp;lt;/[Tt][Rr]%s*&amp;gt;)&#039;, &#039;%1&#039; .. marker)&lt;br /&gt;
		if s:match(marker) then&lt;br /&gt;
			s = mw.ustring.gsub(s, marker .. &#039;%s*&#039; .. marker, &#039;&#039;)&lt;br /&gt;
			s = mw.ustring.gsub(s, &#039;([\r\n]|-[^\r\n]*[\r\n])%s*&#039; .. marker, &#039;%1&#039;)&lt;br /&gt;
			s = mw.ustring.gsub(s, marker .. &#039;%s*([\r\n]|-)&#039;, &#039;%1&#039;)&lt;br /&gt;
			s = mw.ustring.gsub(s, &#039;(&amp;lt;/[Cc][Aa][Pp][Tt][Ii][Oo][Nn]%s*&amp;gt;%s*)&#039; .. marker, &#039;%1&#039;)&lt;br /&gt;
			s = mw.ustring.gsub(s, &#039;(&amp;lt;%s*[Tt][Aa][Bb][Ll][Ee][^&amp;lt;&amp;gt;]*&amp;gt;%s*)&#039; .. marker, &#039;%1&#039;)&lt;br /&gt;
			s = mw.ustring.gsub(s, &#039;^(%{|[^\r\n]*[\r\n]%s*)&#039; .. marker, &#039;%1&#039;)&lt;br /&gt;
			s = mw.ustring.gsub(s, &#039;([\r\n]%{|[^\r\n]*[\r\n]%s*)&#039; .. marker, &#039;%1&#039;)&lt;br /&gt;
			s = mw.ustring.gsub(s,  marker .. &#039;(%s*&amp;lt;/[Tt][Aa][Bb][Ll][Ee]%s*&amp;gt;)&#039;, &#039;%1&#039;)&lt;br /&gt;
			s = mw.ustring.gsub(s,  marker .. &#039;(%s*\n|%})&#039;, &#039;%1&#039;)&lt;br /&gt;
		end&lt;br /&gt;
		if s:match(marker) then&lt;br /&gt;
			local subcells = mw.text.split(s, marker)&lt;br /&gt;
			s = &#039;&#039;&lt;br /&gt;
			for k = 1, #subcells do&lt;br /&gt;
				if k == 1 then&lt;br /&gt;
					s = s .. subcells[k] .. &#039;&amp;lt;/&#039; .. tt .. &#039;&amp;gt;&amp;lt;/tr&amp;gt;&#039;&lt;br /&gt;
				elseif k == #subcells then&lt;br /&gt;
					local rowstyle = &#039; style=&amp;quot;display:none&amp;quot;&#039;&lt;br /&gt;
					if notempty(subcells[k]) then rowstyle = &#039;&#039;	end&lt;br /&gt;
					s = s .. &#039;&amp;lt;tr&#039; .. rowstyle ..&#039;&amp;gt;&amp;lt;&#039; .. tt .. &#039; colspan=2&amp;gt;\n&#039; .. subcells[k]&lt;br /&gt;
				elseif notempty(subcells[k]) then&lt;br /&gt;
					if (k % 2) == 0 then&lt;br /&gt;
						s = s .. subcells[k]&lt;br /&gt;
					else&lt;br /&gt;
						s = s .. &#039;&amp;lt;tr&amp;gt;&amp;lt;&#039; .. tt .. &#039; colspan=2&amp;gt;\n&#039; .. subcells[k] .. &#039;&amp;lt;/&#039; .. tt .. &#039;&amp;gt;&amp;lt;/tr&amp;gt;&#039;&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		return s&lt;br /&gt;
	else&lt;br /&gt;
		return sval&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 the values of two tables, as a sequence.&lt;br /&gt;
    local vals = {}&lt;br /&gt;
    for k, v in pairs(t1) do&lt;br /&gt;
        vals[v] = true&lt;br /&gt;
    end&lt;br /&gt;
    for k, v in pairs(t2) do&lt;br /&gt;
        vals[v] = true&lt;br /&gt;
    end&lt;br /&gt;
    local ret = {}&lt;br /&gt;
    for k, v in pairs(vals) do&lt;br /&gt;
        table.insert(ret, k)&lt;br /&gt;
    end&lt;br /&gt;
    return ret&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getArgNums(prefix)&lt;br /&gt;
    -- Returns a table containing the numbers of the arguments that exist&lt;br /&gt;
    -- for the specified prefix. For example, if the prefix was &#039;data&#039;, and&lt;br /&gt;
    -- &#039;data1&#039;, &#039;data2&#039;, and &#039;data5&#039; exist, it would return {1, 2, 5}.&lt;br /&gt;
    local nums = {}&lt;br /&gt;
    for k, v in pairs(args) do&lt;br /&gt;
        local num = tostring(k):match(&#039;^&#039; .. prefix .. &#039;([1-9]%d*)$&#039;)&lt;br /&gt;
        if num then table.insert(nums, tonumber(num)) 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;
local function addRow(rowArgs)&lt;br /&gt;
    -- Adds a row to the infobox, with either a header cell&lt;br /&gt;
    -- or a label/data cell combination.&lt;br /&gt;
    if rowArgs.header then&lt;br /&gt;
        root&lt;br /&gt;
            :tag(&#039;tr&#039;)&lt;br /&gt;
                :addClass(rowArgs.rowclass)&lt;br /&gt;
                :cssText(rowArgs.rowstyle)&lt;br /&gt;
                :attr(&#039;id&#039;, rowArgs.rowid)&lt;br /&gt;
                :tag(&#039;th&#039;)&lt;br /&gt;
                    :attr(&#039;colspan&#039;, 2)&lt;br /&gt;
                    :attr(&#039;id&#039;, rowArgs.headerid)&lt;br /&gt;
                    :addClass(rowArgs.class)&lt;br /&gt;
                    :addClass(args.headerclass)&lt;br /&gt;
                    :css(&#039;text-align&#039;, &#039;center&#039;)&lt;br /&gt;
                    :cssText(args.headerstyle)&lt;br /&gt;
                    :cssText(rowArgs.rowcellstyle)&lt;br /&gt;
                    :wikitext(fixChildBoxes(rowArgs.header, &#039;th&#039;))&lt;br /&gt;
    elseif rowArgs.data then&lt;br /&gt;
        local row = root:tag(&#039;tr&#039;)&lt;br /&gt;
        row:addClass(rowArgs.rowclass)&lt;br /&gt;
        row:cssText(rowArgs.rowstyle)&lt;br /&gt;
        row:attr(&#039;id&#039;, rowArgs.rowid)&lt;br /&gt;
        if rowArgs.label then&lt;br /&gt;
            row&lt;br /&gt;
                :tag(&#039;th&#039;)&lt;br /&gt;
                    :attr(&#039;scope&#039;, &#039;row&#039;)&lt;br /&gt;
                    :attr(&#039;id&#039;, rowArgs.labelid)&lt;br /&gt;
                    :cssText(args.labelstyle)&lt;br /&gt;
                    :cssText(rowArgs.rowcellstyle)&lt;br /&gt;
                    :wikitext(rowArgs.label)&lt;br /&gt;
                    :done()&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        local dataCell = row:tag(&#039;td&#039;)&lt;br /&gt;
        if not rowArgs.label then &lt;br /&gt;
            dataCell&lt;br /&gt;
                :attr(&#039;colspan&#039;, 2)&lt;br /&gt;
                :css(&#039;text-align&#039;, &#039;center&#039;) &lt;br /&gt;
        end&lt;br /&gt;
        dataCell&lt;br /&gt;
            :attr(&#039;id&#039;, rowArgs.dataid)&lt;br /&gt;
            :addClass(rowArgs.class)&lt;br /&gt;
            :cssText(rowArgs.datastyle)&lt;br /&gt;
            :cssText(rowArgs.rowcellstyle)&lt;br /&gt;
            :newline()&lt;br /&gt;
            :wikitext(fixChildBoxes(rowArgs.data, &#039;td&#039;))&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderTitle()&lt;br /&gt;
    if not args.title then return end&lt;br /&gt;
&lt;br /&gt;
    root&lt;br /&gt;
        :tag(&#039;caption&#039;)&lt;br /&gt;
            :addClass(args.titleclass)&lt;br /&gt;
            :cssText(args.titlestyle)&lt;br /&gt;
            :wikitext(args.title)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderAboveRow()&lt;br /&gt;
    if not args.above then return end&lt;br /&gt;
    &lt;br /&gt;
    root&lt;br /&gt;
        :tag(&#039;tr&#039;)&lt;br /&gt;
            :tag(&#039;th&#039;)&lt;br /&gt;
                :attr(&#039;colspan&#039;, 2)&lt;br /&gt;
                :addClass(args.aboveclass)&lt;br /&gt;
                :css(&#039;text-align&#039;, &#039;center&#039;)&lt;br /&gt;
                :css(&#039;font-size&#039;, &#039;125%&#039;)&lt;br /&gt;
                :css(&#039;font-weight&#039;, &#039;bold&#039;)&lt;br /&gt;
                :cssText(args.abovestyle)&lt;br /&gt;
                :wikitext(fixChildBoxes(args.above,&#039;th&#039;))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderBelowRow()&lt;br /&gt;
    if not args.below then return end&lt;br /&gt;
    &lt;br /&gt;
    root&lt;br /&gt;
        :tag(&#039;tr&#039;)&lt;br /&gt;
            :tag(&#039;td&#039;)&lt;br /&gt;
                :attr(&#039;colspan&#039;, &#039;2&#039;)&lt;br /&gt;
                :addClass(args.belowclass)&lt;br /&gt;
                :css(&#039;text-align&#039;, &#039;center&#039;)&lt;br /&gt;
                :cssText(args.belowstyle)&lt;br /&gt;
                :newline()&lt;br /&gt;
                :wikitext(fixChildBoxes(args.below,&#039;td&#039;))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderSubheaders()&lt;br /&gt;
    if args.subheader then&lt;br /&gt;
        args.subheader1 = args.subheader&lt;br /&gt;
    end&lt;br /&gt;
    if args.subheaderrowclass then&lt;br /&gt;
        args.subheaderrowclass1 = args.subheaderrowclass&lt;br /&gt;
    end&lt;br /&gt;
    local subheadernums = getArgNums(&#039;subheader&#039;)&lt;br /&gt;
    for k, num in ipairs(subheadernums) do&lt;br /&gt;
        addRow({&lt;br /&gt;
            data = args[&#039;subheader&#039; .. tostring(num)],&lt;br /&gt;
            datastyle = args.subheaderstyle or args[&#039;subheaderstyle&#039; .. tostring(num)],&lt;br /&gt;
            class = args.subheaderclass,&lt;br /&gt;
            rowclass = args[&#039;subheaderrowclass&#039; .. tostring(num)]&lt;br /&gt;
        })&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderImages()&lt;br /&gt;
    if args.image then&lt;br /&gt;
        args.image1 = args.image&lt;br /&gt;
    end&lt;br /&gt;
    if args.caption then&lt;br /&gt;
        args.caption1 = args.caption&lt;br /&gt;
    end&lt;br /&gt;
    local imagenums = getArgNums(&#039;image&#039;)&lt;br /&gt;
    for k, num in ipairs(imagenums) do&lt;br /&gt;
        local caption = args[&#039;caption&#039; .. tostring(num)]&lt;br /&gt;
        local data = mw.html.create():wikitext(args[&#039;image&#039; .. tostring(num)])&lt;br /&gt;
        if caption then&lt;br /&gt;
            data&lt;br /&gt;
                :tag(&#039;div&#039;)&lt;br /&gt;
                    :cssText(args.captionstyle)&lt;br /&gt;
                    :wikitext(caption)&lt;br /&gt;
        end&lt;br /&gt;
        addRow({&lt;br /&gt;
            data = tostring(data),&lt;br /&gt;
            datastyle = args.imagestyle,&lt;br /&gt;
            class = args.imageclass,&lt;br /&gt;
            rowclass = args[&#039;imagerowclass&#039; .. tostring(num)]&lt;br /&gt;
        })&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderRows()&lt;br /&gt;
    -- Gets the union of the header and data argument numbers,&lt;br /&gt;
    -- and renders them all in order using addRow.&lt;br /&gt;
    local rownums = union(getArgNums(&#039;header&#039;), getArgNums(&#039;data&#039;))&lt;br /&gt;
    table.sort(rownums)&lt;br /&gt;
    for k, num in ipairs(rownums) do&lt;br /&gt;
        addRow({&lt;br /&gt;
            header = args[&#039;header&#039; .. tostring(num)],&lt;br /&gt;
            label = args[&#039;label&#039; .. tostring(num)],&lt;br /&gt;
            data = args[&#039;data&#039; .. tostring(num)],&lt;br /&gt;
            datastyle = args.datastyle,&lt;br /&gt;
            class = args[&#039;class&#039; .. tostring(num)],&lt;br /&gt;
            rowclass = args[&#039;rowclass&#039; .. tostring(num)],&lt;br /&gt;
            rowstyle = args[&#039;rowstyle&#039; .. tostring(num)],&lt;br /&gt;
            rowcellstyle = args[&#039;rowcellstyle&#039; .. tostring(num)],&lt;br /&gt;
            dataid = args[&#039;dataid&#039; .. tostring(num)],&lt;br /&gt;
            labelid = args[&#039;labelid&#039; .. tostring(num)],&lt;br /&gt;
            headerid = args[&#039;headerid&#039; .. tostring(num)],&lt;br /&gt;
            rowid = args[&#039;rowid&#039; .. tostring(num)]&lt;br /&gt;
        })&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderNavBar()&lt;br /&gt;
    if not args.name then return end&lt;br /&gt;
    &lt;br /&gt;
    root&lt;br /&gt;
        :tag(&#039;tr&#039;)&lt;br /&gt;
            :tag(&#039;td&#039;)&lt;br /&gt;
                :attr(&#039;colspan&#039;, &#039;2&#039;)&lt;br /&gt;
                :css(&#039;text-align&#039;, &#039;right&#039;)&lt;br /&gt;
                :wikitext(navbar{&lt;br /&gt;
                    args.name,&lt;br /&gt;
                    mini = 1,&lt;br /&gt;
                })&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderItalicTitle()&lt;br /&gt;
    local italicTitle = args[&#039;italic title&#039;] and mw.ustring.lower(args[&#039;italic title&#039;])&lt;br /&gt;
    if italicTitle == &#039;&#039; or italicTitle == &#039;force&#039; or italicTitle == &#039;yes&#039; then&lt;br /&gt;
        root:wikitext(mw.getCurrentFrame():expandTemplate({title = &#039;italic title&#039;}))&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function renderTrackingCategories()&lt;br /&gt;
    if args.decat ~= &#039;yes&#039; then&lt;br /&gt;
        if #(getArgNums(&#039;data&#039;)) == 0 and mw.title.getCurrentTitle().namespace == 0 then&lt;br /&gt;
            root:wikitext(&#039;[[Category:Articles which use infobox templates with no data rows]]&#039;)&lt;br /&gt;
        end&lt;br /&gt;
        if args.child == &#039;yes&#039; and args.title then&lt;br /&gt;
            root:wikitext(&#039;[[Category:Pages which use embedded infobox templates with the title parameter]]&#039;)&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function _infobox()&lt;br /&gt;
    -- Specify the overall layout of the infobox, with special settings&lt;br /&gt;
    -- if the infobox is used as a &#039;child&#039; inside another infobox.&lt;br /&gt;
    if args.child ~= &#039;yes&#039; then&lt;br /&gt;
        root = mw.html.create(&#039;table&#039;)&lt;br /&gt;
        &lt;br /&gt;
        root&lt;br /&gt;
            :addClass(&#039;infobox&#039;)&lt;br /&gt;
            :addClass(args.bodyclass)&lt;br /&gt;
            &lt;br /&gt;
            if args.subbox == &#039;yes&#039; then&lt;br /&gt;
                root&lt;br /&gt;
                    :css(&#039;padding&#039;, &#039;0&#039;)&lt;br /&gt;
                    :css(&#039;border&#039;, &#039;none&#039;)&lt;br /&gt;
                    :css(&#039;margin&#039;, &#039;-3px&#039;)&lt;br /&gt;
                    :css(&#039;width&#039;, &#039;auto&#039;)&lt;br /&gt;
                    :css(&#039;min-width&#039;, &#039;100%&#039;)&lt;br /&gt;
                    :css(&#039;font-size&#039;, &#039;100%&#039;)&lt;br /&gt;
                    :css(&#039;clear&#039;, &#039;none&#039;)&lt;br /&gt;
                    :css(&#039;float&#039;, &#039;none&#039;)&lt;br /&gt;
                    :css(&#039;background-color&#039;, &#039;transparent&#039;)&lt;br /&gt;
            else&lt;br /&gt;
                root&lt;br /&gt;
                    :css(&#039;width&#039;, &#039;22em&#039;)&lt;br /&gt;
            end&lt;br /&gt;
        root&lt;br /&gt;
            :cssText(args.bodystyle)&lt;br /&gt;
    &lt;br /&gt;
        renderTitle()&lt;br /&gt;
        renderAboveRow()&lt;br /&gt;
    else&lt;br /&gt;
        root = mw.html.create()&lt;br /&gt;
        &lt;br /&gt;
        root&lt;br /&gt;
            :wikitext(args.title)&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    renderSubheaders()&lt;br /&gt;
    renderImages() &lt;br /&gt;
    renderRows() &lt;br /&gt;
    renderBelowRow()  &lt;br /&gt;
    renderNavBar()&lt;br /&gt;
    renderItalicTitle()&lt;br /&gt;
    renderTrackingCategories()&lt;br /&gt;
    &lt;br /&gt;
    return tostring(root)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function preprocessSingleArg(argName)&lt;br /&gt;
    -- If the argument exists and isn&#039;t blank, add it to the argument table.&lt;br /&gt;
    -- Blank arguments are treated as nil to match the behaviour of ParserFunctions.&lt;br /&gt;
    if origArgs[argName] and origArgs[argName] ~= &#039;&#039; then&lt;br /&gt;
        args[argName] = origArgs[argName]&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function preprocessArgs(prefixTable, step)&lt;br /&gt;
    -- Assign the parameters with the given prefixes to the args table, in order, in batches&lt;br /&gt;
    -- of the step size specified. This is to prevent references etc. from appearing in the&lt;br /&gt;
    -- wrong order. The prefixTable should be an array containing tables, each of which has&lt;br /&gt;
    -- two possible fields, a &amp;quot;prefix&amp;quot; string and a &amp;quot;depend&amp;quot; table. The function always parses&lt;br /&gt;
    -- parameters containing the &amp;quot;prefix&amp;quot; string, but only parses parameters in the &amp;quot;depend&amp;quot;&lt;br /&gt;
    -- table if the prefix parameter is present and non-blank.&lt;br /&gt;
    if type(prefixTable) ~= &#039;table&#039; then&lt;br /&gt;
        error(&amp;quot;Non-table value detected for the prefix table&amp;quot;, 2)&lt;br /&gt;
    end&lt;br /&gt;
    if type(step) ~= &#039;number&#039; then&lt;br /&gt;
        error(&amp;quot;Invalid step value detected&amp;quot;, 2)&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Get arguments without a number suffix, and check for bad input.&lt;br /&gt;
    for i,v in ipairs(prefixTable) do&lt;br /&gt;
        if type(v) ~= &#039;table&#039; or type(v.prefix) ~= &amp;quot;string&amp;quot; or (v.depend and type(v.depend) ~= &#039;table&#039;) then&lt;br /&gt;
            error(&#039;Invalid input detected to preprocessArgs prefix table&#039;, 2)&lt;br /&gt;
        end&lt;br /&gt;
        preprocessSingleArg(v.prefix)&lt;br /&gt;
        -- Only parse the depend parameter if the prefix parameter is present and not blank.&lt;br /&gt;
        if args[v.prefix] and v.depend then&lt;br /&gt;
            for j, dependValue in ipairs(v.depend) do&lt;br /&gt;
                if type(dependValue) ~= &#039;string&#039; then&lt;br /&gt;
                    error(&#039;Invalid &amp;quot;depend&amp;quot; parameter value detected in preprocessArgs&#039;)&lt;br /&gt;
                end&lt;br /&gt;
                preprocessSingleArg(dependValue)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Get arguments with number suffixes.&lt;br /&gt;
    local a = 1 -- Counter variable.&lt;br /&gt;
    local moreArgumentsExist = true&lt;br /&gt;
    while moreArgumentsExist == true do&lt;br /&gt;
        moreArgumentsExist = false&lt;br /&gt;
        for i = a, a + step - 1 do&lt;br /&gt;
            for j,v in ipairs(prefixTable) do&lt;br /&gt;
                local prefixArgName = v.prefix .. tostring(i)&lt;br /&gt;
                if origArgs[prefixArgName] then&lt;br /&gt;
                    moreArgumentsExist = true -- Do another loop if any arguments are found, even blank ones.&lt;br /&gt;
                    preprocessSingleArg(prefixArgName)&lt;br /&gt;
                end&lt;br /&gt;
                -- Process the depend table if the prefix argument is present and not blank, or&lt;br /&gt;
                -- we are processing &amp;quot;prefix1&amp;quot; and &amp;quot;prefix&amp;quot; is present and not blank, and&lt;br /&gt;
                -- if the depend table is present.&lt;br /&gt;
                if v.depend and (args[prefixArgName] or (i == 1 and args[v.prefix])) then&lt;br /&gt;
                    for j,dependValue in ipairs(v.depend) do&lt;br /&gt;
                        local dependArgName = dependValue .. tostring(i)&lt;br /&gt;
                        preprocessSingleArg(dependArgName)&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        a = a + step&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
 &lt;br /&gt;
function p.infobox(frame)&lt;br /&gt;
    -- If called via #invoke, use the args passed into the invoking template.&lt;br /&gt;
    -- Otherwise, for testing purposes, assume args are being passed directly in.&lt;br /&gt;
    if frame == mw.getCurrentFrame() then&lt;br /&gt;
        origArgs = frame:getParent().args&lt;br /&gt;
    else&lt;br /&gt;
        origArgs = frame&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    -- Parse the data parameters in the same order that the old {{infobox}} did, so that&lt;br /&gt;
    -- references etc. will display in the expected places. Parameters that depend on&lt;br /&gt;
    -- another parameter are only processed if that parameter is present, to avoid&lt;br /&gt;
    -- phantom references appearing in article reference lists.&lt;br /&gt;
    preprocessSingleArg(&#039;child&#039;)&lt;br /&gt;
    preprocessSingleArg(&#039;bodyclass&#039;)&lt;br /&gt;
    preprocessSingleArg(&#039;subbox&#039;)&lt;br /&gt;
    preprocessSingleArg(&#039;bodystyle&#039;)&lt;br /&gt;
    preprocessSingleArg(&#039;title&#039;)&lt;br /&gt;
    preprocessSingleArg(&#039;titleclass&#039;)&lt;br /&gt;
    preprocessSingleArg(&#039;titlestyle&#039;)&lt;br /&gt;
    preprocessSingleArg(&#039;above&#039;)&lt;br /&gt;
    preprocessSingleArg(&#039;aboveclass&#039;)&lt;br /&gt;
    preprocessSingleArg(&#039;abovestyle&#039;)&lt;br /&gt;
    preprocessArgs({&lt;br /&gt;
        {prefix = &#039;subheader&#039;, depend = {&#039;subheaderstyle&#039;, &#039;subheaderrowclass&#039;}}&lt;br /&gt;
    }, 10)&lt;br /&gt;
    preprocessSingleArg(&#039;subheaderstyle&#039;)&lt;br /&gt;
    preprocessSingleArg(&#039;subheaderclass&#039;)&lt;br /&gt;
    preprocessArgs({&lt;br /&gt;
        {prefix = &#039;image&#039;, depend = {&#039;caption&#039;, &#039;imagerowclass&#039;}}&lt;br /&gt;
    }, 10)&lt;br /&gt;
    preprocessSingleArg(&#039;captionstyle&#039;)&lt;br /&gt;
    preprocessSingleArg(&#039;imagestyle&#039;)&lt;br /&gt;
    preprocessSingleArg(&#039;imageclass&#039;)&lt;br /&gt;
    preprocessArgs({&lt;br /&gt;
        {prefix = &#039;header&#039;},&lt;br /&gt;
        {prefix = &#039;data&#039;, depend = {&#039;label&#039;}},&lt;br /&gt;
        {prefix = &#039;rowclass&#039;},&lt;br /&gt;
        {prefix = &#039;rowstyle&#039;},&lt;br /&gt;
        {prefix = &#039;rowcellstyle&#039;},&lt;br /&gt;
        {prefix = &#039;class&#039;},&lt;br /&gt;
        {prefix = &#039;dataid&#039;},&lt;br /&gt;
        {prefix = &#039;labelid&#039;},&lt;br /&gt;
        {prefix = &#039;headerid&#039;},&lt;br /&gt;
        {prefix = &#039;rowid&#039;}&lt;br /&gt;
    }, 50)&lt;br /&gt;
    preprocessSingleArg(&#039;headerclass&#039;)&lt;br /&gt;
    preprocessSingleArg(&#039;headerstyle&#039;)&lt;br /&gt;
    preprocessSingleArg(&#039;labelstyle&#039;)&lt;br /&gt;
    preprocessSingleArg(&#039;datastyle&#039;)&lt;br /&gt;
    preprocessSingleArg(&#039;below&#039;)&lt;br /&gt;
    preprocessSingleArg(&#039;belowclass&#039;)&lt;br /&gt;
    preprocessSingleArg(&#039;belowstyle&#039;)&lt;br /&gt;
    preprocessSingleArg(&#039;name&#039;)&lt;br /&gt;
    args[&#039;italic title&#039;] = origArgs[&#039;italic title&#039;] -- different behaviour if blank or absent&lt;br /&gt;
    preprocessSingleArg(&#039;decat&#039;)&lt;br /&gt;
 &lt;br /&gt;
    return _infobox()&lt;br /&gt;
end&lt;br /&gt;
 &lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Azizonkg</name></author>
	</entry>
	<entry>
		<id>https://sierra.ss220.space/index.php?title=MediaWiki:Protect-level-confirmededitor&amp;diff=9885</id>
		<title>MediaWiki:Protect-level-confirmededitor</title>
		<link rel="alternate" type="text/html" href="https://sierra.ss220.space/index.php?title=MediaWiki:Protect-level-confirmededitor&amp;diff=9885"/>
		<updated>2021-10-18T03:34:58Z</updated>

		<summary type="html">&lt;p&gt;Azizonkg: Защитил страницу MediaWiki:Protect-level-confirmededitor ([Редактирование=Разрешено только администраторам] (бессрочно) [Переименование=Разрешено только администраторам] (бессрочно))&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Разрешено только подтверждённым редакторам. За разрешением обратитесь по этой ссылке в дискорд: [http://discord.ss220.space], к @BOTpurple#7721&lt;/div&gt;</summary>
		<author><name>Azizonkg</name></author>
	</entry>
	<entry>
		<id>https://sierra.ss220.space/index.php?title=MediaWiki:Protect-level-confirmededitor&amp;diff=9884</id>
		<title>MediaWiki:Protect-level-confirmededitor</title>
		<link rel="alternate" type="text/html" href="https://sierra.ss220.space/index.php?title=MediaWiki:Protect-level-confirmededitor&amp;diff=9884"/>
		<updated>2021-10-18T03:34:42Z</updated>

		<summary type="html">&lt;p&gt;Azizonkg: Новая страница: «Разрешено только подтверждённым редакторам. За разрешением обратитесь по этой ссылке в...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Разрешено только подтверждённым редакторам. За разрешением обратитесь по этой ссылке в дискорд: [http://discord.ss220.space], к @BOTpurple#7721&lt;/div&gt;</summary>
		<author><name>Azizonkg</name></author>
	</entry>
	<entry>
		<id>https://sierra.ss220.space/index.php?title=MediaWiki:Group-confirmededitor&amp;diff=9883</id>
		<title>MediaWiki:Group-confirmededitor</title>
		<link rel="alternate" type="text/html" href="https://sierra.ss220.space/index.php?title=MediaWiki:Group-confirmededitor&amp;diff=9883"/>
		<updated>2021-10-18T03:32:54Z</updated>

		<summary type="html">&lt;p&gt;Azizonkg: Защитил страницу MediaWiki:Group-confirmededitor ([Редактирование=Разрешено только администраторам] (бессрочно) [Переименование=Разрешено только администраторам] (бессрочно))&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Подтверждённые редакторы&lt;/div&gt;</summary>
		<author><name>Azizonkg</name></author>
	</entry>
	<entry>
		<id>https://sierra.ss220.space/index.php?title=MediaWiki:Group-confirmededitor&amp;diff=9882</id>
		<title>MediaWiki:Group-confirmededitor</title>
		<link rel="alternate" type="text/html" href="https://sierra.ss220.space/index.php?title=MediaWiki:Group-confirmededitor&amp;diff=9882"/>
		<updated>2021-10-18T03:32:50Z</updated>

		<summary type="html">&lt;p&gt;Azizonkg: Новая страница: «Подтверждённые редакторы»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Подтверждённые редакторы&lt;/div&gt;</summary>
		<author><name>Azizonkg</name></author>
	</entry>
	<entry>
		<id>https://sierra.ss220.space/index.php?title=MediaWiki:Group-confirmededitor-member&amp;diff=9881</id>
		<title>MediaWiki:Group-confirmededitor-member</title>
		<link rel="alternate" type="text/html" href="https://sierra.ss220.space/index.php?title=MediaWiki:Group-confirmededitor-member&amp;diff=9881"/>
		<updated>2021-10-18T03:32:30Z</updated>

		<summary type="html">&lt;p&gt;Azizonkg: Защитил страницу MediaWiki:Group-confirmededitor-member ([Редактирование=Разрешено только администраторам] (бессрочно) [Переименование=Разрешено только администраторам] (бессрочно))&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;подтверждённый редактор&lt;/div&gt;</summary>
		<author><name>Azizonkg</name></author>
	</entry>
	<entry>
		<id>https://sierra.ss220.space/index.php?title=MediaWiki:Group-confirmededitor-member&amp;diff=9880</id>
		<title>MediaWiki:Group-confirmededitor-member</title>
		<link rel="alternate" type="text/html" href="https://sierra.ss220.space/index.php?title=MediaWiki:Group-confirmededitor-member&amp;diff=9880"/>
		<updated>2021-10-18T03:32:15Z</updated>

		<summary type="html">&lt;p&gt;Azizonkg: Новая страница: «подтверждённый редактор»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;подтверждённый редактор&lt;/div&gt;</summary>
		<author><name>Azizonkg</name></author>
	</entry>
	<entry>
		<id>https://sierra.ss220.space/index.php?title=MediaWiki:Grouppage-confirmededitor&amp;diff=9879</id>
		<title>MediaWiki:Grouppage-confirmededitor</title>
		<link rel="alternate" type="text/html" href="https://sierra.ss220.space/index.php?title=MediaWiki:Grouppage-confirmededitor&amp;diff=9879"/>
		<updated>2021-10-18T03:31:35Z</updated>

		<summary type="html">&lt;p&gt;Azizonkg: Защитил страницу MediaWiki:Grouppage-confirmededitor ([Редактирование=Разрешено только администраторам] (бессрочно) [Переименование=Разрешено только администраторам] (бессрочно))&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Paradise:Подтверждённые редакторы&lt;/div&gt;</summary>
		<author><name>Azizonkg</name></author>
	</entry>
	<entry>
		<id>https://sierra.ss220.space/index.php?title=MediaWiki:Grouppage-confirmededitor&amp;diff=9878</id>
		<title>MediaWiki:Grouppage-confirmededitor</title>
		<link rel="alternate" type="text/html" href="https://sierra.ss220.space/index.php?title=MediaWiki:Grouppage-confirmededitor&amp;diff=9878"/>
		<updated>2021-10-18T03:31:25Z</updated>

		<summary type="html">&lt;p&gt;Azizonkg: Новая страница: «Paradise:Подтверждённые редакторы»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Paradise:Подтверждённые редакторы&lt;/div&gt;</summary>
		<author><name>Azizonkg</name></author>
	</entry>
	<entry>
		<id>https://sierra.ss220.space/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD_%D0%B4%D0%BB%D1%8F_Lua&amp;diff=9877</id>
		<title>Категория:Шаблон для Lua</title>
		<link rel="alternate" type="text/html" href="https://sierra.ss220.space/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD_%D0%B4%D0%BB%D1%8F_Lua&amp;diff=9877"/>
		<updated>2021-10-18T03:26:00Z</updated>

		<summary type="html">&lt;p&gt;Azizonkg: Защитил страницу Категория:Шаблон для Lua ([Редактирование=Разрешено только администраторам] (бессрочно) [Переименование=Разрешено только администраторам] (бессрочно)) [каскадная]&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Templates]]&lt;/div&gt;</summary>
		<author><name>Azizonkg</name></author>
	</entry>
	<entry>
		<id>https://sierra.ss220.space/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=7598</id>
		<title>Заглавная страница</title>
		<link rel="alternate" type="text/html" href="https://sierra.ss220.space/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=7598"/>
		<updated>2021-10-18T02:03:57Z</updated>

		<summary type="html">&lt;p&gt;Azizonkg: Содержимое страницы заменено на «{{main_page/header}} {{main_page/content}}»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{main_page/header}}&lt;br /&gt;
{{main_page/content}}&lt;/div&gt;</summary>
		<author><name>Azizonkg</name></author>
	</entry>
</feed>