From d0447cbd6a711f2489a59bc76bd350a83e4fa864 Mon Sep 17 00:00:00 2001
From: Malin Freeborn <malinfreeborn@posteo.net>
Date: Thu, 28 Jul 2022 00:38:21 +0200
Subject: [PATCH] adjust to standardized boxes

---
 cc.tex      | 14 ++++++------
 combat.tex  | 61 +++++++++++++++++++++++++++--------------------------
 magic.tex   | 11 ++--------
 races.tex   |  4 ++--
 rules.tex   | 40 +++++++++++++++++------------------
 spheres.tex | 14 ++++++------
 6 files changed, 70 insertions(+), 74 deletions(-)

diff --git a/cc.tex b/cc.tex
index 1c68b98b..08db933e 100644
--- a/cc.tex
+++ b/cc.tex
@@ -42,8 +42,8 @@ Otherwise, you fail.
 \index{Race}
 \newcommand{\racechart}{
 
-\begin{tcolorbox}[tabularx={clX},adjusted title=Race,top=10pt,bottom=10pt,left=3pt,right=3pt]
 
+\begin{nametable}[clX]{Race}
 	
 	Roll & Race & Adjustments \\\hline
 
@@ -57,7 +57,7 @@ Otherwise, you fail.
 
 	11-12 & Gnome & \mbox{+1 Intelligence, +1 Dexterity,} \mbox{Strength -2, Speed -1} \\
 
-\end{tcolorbox}
+\end{nametable}
 }
 
 \begin{multicols}{2}
@@ -136,7 +136,8 @@ suffer only half the usual \glspl{fatigue} from travel.
 \noindent
 These are the basic Traits which characters must use over and over again for every roll.
 
-\begin{tcolorbox}[tabularx={XX},top=10pt,bottom=10pt]
+\sidebox[27]{
+\begin{boxtable}[cc]
 
 	Result & Attribute Bonus \\\hline
 
@@ -154,7 +155,8 @@ These are the basic Traits which characters must use over and over again for eve
 
 	12 & +3 \\
 
-\end{tcolorbox}
+\end{boxtable}
+}
 
 \iftoggle{verbose}{
 	\input{story/2-cc.tex}
@@ -295,7 +297,7 @@ All specialist Skills are marked with an asterisk.
 
 \iftoggle{verbose}{
 	\begin{figure*}[b]
-		\begin{tcolorbox}[title=Rolling with Bad Stats]
+		\begin{boxtext}[title=Rolling with Bad Stats]
 
 			If you find you've rolled up a particularly bad character, don't worry too much -- the \glspl{xp} players receive will even out differing character stats before long.
 			If that sounds a little suspicious, just keep your \glspl{xp} to yourself for a while -- remember that players, not characters, keep \glspl{xp}, so you can hold onto what you have earned, then introduce secondary characters with stories (see page \pageref{stories}).
@@ -303,7 +305,7 @@ All specialist Skills are marked with an asterisk.
 			If the poor stats mean your character dies a grizzly death in session 2, then no harm done -- just pull any character that the party has introduced already and add all the \glspl{xp} you've accumulated so far.
 			See page \pageref{pcdeath} for more information on \gls{pc} death.
 
-		\end{tcolorbox}
+		\end{boxtext}
 	\end{figure*}
 
 }{}
diff --git a/combat.tex b/combat.tex
index 3a0d6c4f..fda98f78 100644
--- a/combat.tex
+++ b/combat.tex
@@ -4,7 +4,7 @@
 
 \newcommand{\initiativechart}{
 
-	\begin{tcolorbox}[title={Initiative Costs},tabularx={XX},bottom=10pt,left=3pt,right=3pt]
+	\begin{nametable}[XX]{Initiative Costs}
 
 	\textbf{Action} & \textbf{Init. Cost} \\\hline
 
@@ -50,7 +50,7 @@
 
 	Use magic item & 8 \\
 
-\end{tcolorbox}
+\end{nametable}
 
 }
 
@@ -176,7 +176,7 @@ It works exactly like the Combat \gls{skill} but only adds to the Strike Factor,
 
 \iftoggle{verbose}{
 	\begin{figure*}[t]
-		\begin{tcolorbox}[title=Dicey Damage]
+		\begin{boxtext}[title=Dicey Damage]
 	
 			If you prefer your Dice in a more old-school format, you can easily give each weapon a different Damage die.
 			Weapons which would normally inflict +1 Damage can instead roll their Damage as 1D8, while weapons with +2 Damage would instead leave players rolling 1D10, leaving weapons of +3 Damage to be replaced with a D12.
@@ -189,7 +189,7 @@ It works exactly like the Combat \gls{skill} but only adds to the Strike Factor,
 			+0 Damage should remain as $1D6$ and anyone with a Strength score of +4 should replace the bonus with a $D6$ as normal.
 			Spells are unaffected.
 	
-		\end{tcolorbox}
+		\end{boxtext}
 	\end{figure*}
 
 }{}
@@ -298,7 +298,8 @@ See Chapter \ref{knacks} for a full list of knacks.
 \end{multicols}
 
 \newcommand{\weaponschart}{
-	\begin{tcolorbox}[tabularx={p{.20\textwidth}p{0.07\textwidth}rrrrX},bottom=10pt,top=10pt,left=3pt,right=3pt]
+	\begin{boxtable}[p{.20\textwidth}p{0.07\textwidth}rrrrX]
+
 	\textbf{Light Weapons} & \textbf{Dam.} & \textbf{Init.} & \textbf{Ev.} & \textbf{Wt.R} & Cost & \textbf{Knacks} \\\hline
 
 		Cudgel & +2 & \ 0 & \ 0 & -3 & & Stunning Strike (page~\pageref{stunningstrike}) \\
@@ -319,9 +320,9 @@ See Chapter \ref{knacks} for a full list of knacks.
 
 	Stick & +1 & +1 & +1 & -2 & & \\
 
-	\end{tcolorbox}
+	\end{boxtable}
 
-	\begin{tcolorbox}[tabularx={p{.20\textwidth}p{0.07\textwidth}rrrrX},top=10pt,bottom=10pt,left=3pt,right=3pt]
+	\begin{boxtable}[p{.20\textwidth}p{0.07\textwidth}rrrrX]
 
 	\textbf{Medium Weapons} & \textbf{Dam.} & \textbf{Init.} & \textbf{Ev.} & \textbf{Wt.R} & Cost & \textbf{Knacks} \\\hline
 
@@ -355,9 +356,9 @@ See Chapter \ref{knacks} for a full list of knacks.
 
 	Wood Axe & +2 & \ 0 & +1 & -1/1 & 1 sp & \\
 
-	\end{tcolorbox}
+	\end{boxtable}
 
-	\begin{tcolorbox}[tabularx={p{.20\textwidth}p{0.07\textwidth}rrrrX},bottom=10pt,top=10pt,left=3pt,right=3pt]
+	\begin{boxtable}[p{.20\textwidth}p{0.07\textwidth}rrrrX]
 
 	\textbf{Heavy Weapons} & \textbf{Dam.} & \textbf{Init.} & \textbf{Ev.} & \textbf{Wt.R} & Cost & \textbf{Knacks} \\\hline
 
@@ -369,9 +370,9 @@ See Chapter \ref{knacks} for a full list of knacks.
 
 	Poleax & +3 & +1 & +1 & 5 & 6 sp & First Strike (page~\pageref{firststrike}) \\
 
-	\end{tcolorbox}
+	\end{boxtable}
 
-	\begin{tcolorbox}[tabularx={p{.20\textwidth}p{0.07\textwidth}rrrrX},bottom=10pt,top=10pt,left=3pt,right=3pt]
+	\begin{boxtable}[p{.20\textwidth}p{0.07\textwidth}rrrrX]
 
 	\textbf{Shields} & \textbf{Dam.} & \textbf{Init.} & \textbf{Ev.} & \textbf{Wt.R} & Cost & \textbf{Knacks} \\\hline
 
@@ -381,7 +382,7 @@ See Chapter \ref{knacks} for a full list of knacks.
 
 	Round Shield & +1 & \ 0 & +2 & 0/2 & 5 sp & Dodger (page~\pageref{dodger}) \\
 
-\end{tcolorbox}}
+\end{boxtable}}
 
 \iftoggle{verbose}{%
 	\weaponschart
@@ -442,7 +443,7 @@ The secondary weapon adds half its Evasion Bonus, rounded up.
 
 \newcommand{\armourchart}{
 
-	\begin{tcolorbox}[tabularx={ccccX},bottom=10pt,top=10pt,left=3pt,right=3pt]
+	\begin{boxtable}[ccccX]
 
 	\textbf{Armour} & \textbf{\glsentrytext{dr}} & \textbf{Weight} & \textbf{Noise} & \textbf{Price} \\\hline
 
@@ -471,7 +472,7 @@ The secondary weapon adds half its Evasion Bonus, rounded up.
 
 	Plate & 5 &  3  & 5 & 36gp \\
 
-	\end{tcolorbox}
+	\end{boxtable}
 }
 
 \section{Armour}
@@ -641,7 +642,7 @@ Animals, undead and other creatures without any Charisma Bonus can never store \
 
 \newcommand{\fatiguechart}{
 
-	\begin{tcolorbox}[title={\gls{fatigue} Chart},tabularx={lX},bottom=10pt,top=10pt,left=3pt,right=3pt]
+	\begin{nametable}{\gls{fatigue} Chart}
 		\textbf{Action} & \textbf{\Glspl{fatigue}} \\\hline
 
 		Armour & Wearing armour inflicts 1 \gls{fatigue} per \gls{weightrating} of the armour. \\
@@ -659,7 +660,7 @@ Animals, undead and other creatures without any Charisma Bonus can never store \
 		Starving & Each meal skipped inflicts 1 \gls{fatigue} plus half the character's Strength Bonus (rounded up). \\
 
 		Swimming & Each square swum inflicts 1 \gls{fatigue}. \\
-	\end{tcolorbox}
+	\end{nametable}
 
 }
 
@@ -672,7 +673,7 @@ Animals, undead and other creatures without any Charisma Bonus can never store \
 	Fighting, running and swimming can really take it out of you, especially when wearing heavy armour.
 	Characters gain \glspl{fatigue} for exerting themselves, and if they accrue too many then they will quickly start to become ineffective.
 
-	\begin{tcolorbox}[tabularx={llllllllll},bottom=10pt,top=10pt]
+	\begin{boxtable}[lllllllllX]
 
 	\multicolumn{10}{l}{\Glsentrytext{hp}} \\
 	\CIRCLE & \CIRCLE & \CIRCLE & \CIRCLE & \CIRCLE & \CIRCLE & \Circle & \Circle & \Circle & \Circle \\
@@ -681,13 +682,13 @@ Animals, undead and other creatures without any Charisma Bonus can never store \
 	\XBox & \XBox & \Square & \Square & \Square & \Square & \Square & \Square & \Square & \Square \\
 	\multicolumn{10}{l}{Penalty: 0} \\
 	
-\end{tcolorbox}
+\end{boxtable}
 
 Below the character's \gls{hp} bar are spaces for \glspl{fatigue} to be gained.
 Once the character has more \glspl{fatigue} than their current \glspl{hp}, they take a -1 penalty for every \gls{fatigue} in excess of their \glspl{hp}.
 
 
-	\begin{tcolorbox}[tabularx={llllllllll},bottom=10pt,top=10pt]
+	\begin{boxtable}[lllllllllX]
 
 	\multicolumn{10}{l}{\Glsentrytext{hp}} \\
 	\CIRCLE & \CIRCLE & \CIRCLE & \CIRCLE & \CIRCLE & \CIRCLE & \Circle & \Circle & \Circle & \Circle \\
@@ -696,13 +697,13 @@ Once the character has more \glspl{fatigue} than their current \glspl{hp}, they
 	\XBox & \XBox & \XBox & \XBox & \Square & \Square & \Square & \Square & \Square & \Square \\
 	\multicolumn{10}{l}{Penalty: 1} \\
 	
-\end{tcolorbox}
+\end{boxtable}
 
 This might happen because the character has, say, 6 \glspl{hp} but gains a total of 8 \glspl{fatigue}, and then gains a -2 penalty to all actions.
 But it might also occur because the character has 4 \glspl{fatigue} and then Damage reduces them to only 2 \glspl{hp}, leaving them with a -2 penalty to all actions yet again.
 
 
-	\begin{tcolorbox}[tabularx={llllllllll},bottom=10pt,top=10pt]
+	\begin{boxtable}[lllllllllX]
 
 	\multicolumn{10}{l}{\Glsentrytext{hp}} \\
 	\CIRCLE & \CIRCLE & \CIRCLE & \CIRCLE & \CIRCLE & \CIRCLE & \Circle & \Circle & \Circle & \Circle \\
@@ -711,7 +712,7 @@ But it might also occur because the character has 4 \glspl{fatigue} and then Dam
 	\XBox & \XBox & \XBox & \XBox & \XBox & \Square & \Square & \Square & \Square & \Square \\
 	\multicolumn{10}{l}{Penalty: 3} \\
 	
-\end{tcolorbox}
+\end{boxtable}
 
 Characters may reach a maximum penalty of -5 due to \glspl{fatigue}, after which they fall unconscious.
 If the character is accruing \glspl{fatigue} from running or wrestling, they would normally simply pass out at this point, but if they are gaining \glspl{fatigue} swimming or bleeding, the character will almost certainly just die.
@@ -1014,7 +1015,7 @@ Each weapon will have to be held in one hand, increasing its \gls{weightrating}
 \begin{multicols}{2}
 
 \newcommand{\projectilesChart}{
-\begin{tcolorbox}[tabularx={p{.3\textwidth}XXXr},bottom=10pt,top=10pt,left=3pt,right=3pt]
+\begin{boxtable}[p{.3\textwidth}XXXr]
 
 	\textbf{Projectile} & \textbf{Initiative} & \textbf{Damage} & \textbf{Weight}  & \textbf{Cost} \\\hline
 
@@ -1026,7 +1027,7 @@ Each weapon will have to be held in one hand, increasing its \gls{weightrating}
 
 	Throwing knives & +1 & $1D6-1$ & -5/-3 &  {100 cp} \\
 
-\end{tcolorbox}
+\end{boxtable}
 }
 \iftoggle{verbose}{
 	\begin{figure*}[t]
@@ -1093,7 +1094,7 @@ Weapons also receive a -2 penalty to Damage.
 \label{morale}
 \index{Morale}
 \newcommand{\moralechart}{
-	\begin{tcolorbox}[title={Morale Chart},tabularx={cX},bottom=10pt,top=10pt,left=3pt,right=3pt]
+	\begin{nametable}{Morale Chart}
 		Bonus & Situation \\\hline
 
 		+4 & Monsters outnumber characters 3:1. \\
@@ -1110,7 +1111,7 @@ Weapons also receive a -2 penalty to Damage.
 
 		-1 & Players have displayed awesome magical abilities. \\
 
-			\end{tcolorbox}
+			\end{nametable}
 }
 
 \begin{multicols}{2}
@@ -1140,7 +1141,7 @@ When an enemy flees the scene after a fight has begun, characters still gain ful
 
 \newcommand{\chasechart}{
 
-	\begin{tcolorbox}[tabularx={lX},bottom=10pt,top=10pt,left=3pt,right=3pt]
+	\begin{boxtable}
 
 	Total & Result \\\hline
 
@@ -1158,13 +1159,13 @@ When an enemy flees the scene after a fight has begun, characters still gain ful
 
 	{\textless}5 & The characters are immediately caught. \\
 
-\end{tcolorbox}
+\end{boxtable}
 
 }
 
 \newcommand{\huntchart}{
 
-	\begin{tcolorbox}[tabularx={lX},bottom=10pt,top=10pt,left=3pt,right=3pt]
+	\begin{boxtable}
 
 	Total & Result \\\hline
 
@@ -1184,7 +1185,7 @@ When an enemy flees the scene after a fight has begun, characters still gain ful
 
 	{\textless}3 & The characters immediately lose their quarry. \\
 
-\end{tcolorbox}
+\end{boxtable}
 
 }
 \section{Chases}\index{Chases}
diff --git a/magic.tex b/magic.tex
index f53acdbd..988a81e2 100644
--- a/magic.tex
+++ b/magic.tex
@@ -10,14 +10,7 @@
 
 \begin{figure*}[b!]
 
-\begin{tcolorbox}[
-	tabularx={lp{.25\textwidth}X},
-	top=10pt,
-	bottom=10pt,
-	left=3pt,
-	right=3pt,
-	code={\rowcolors{3}{}{gray!10}}
-]
+\begin{boxtable}[lp{.25\textwidth}X]
 
 	Path & Spheres & Flavour \\\hline
 
@@ -33,7 +26,7 @@
 
 	Song & Aldaron, Enchantment, Fate, Illusion & Song magic must be cast slowly, as the spells are literally songs. The spells have subtle effects but song magic is no less powerful than other spheres. \\
 
-\end{tcolorbox}
+\end{boxtable}
 
 \end{figure*}
 
diff --git a/races.tex b/races.tex
index 4b3c46bc..b69865d1 100644
--- a/races.tex
+++ b/races.tex
@@ -116,7 +116,7 @@ At 200 years old the elf's maximum Strength score becomes 0 but their maximum Sp
 At 300 the elf's maximum Strength Bonus is -1 but they can move their Intelligence up to +4.
 Finally, at 400 years old the elf's Charisma Bonus becomes +4 and their maximum Strength becomes -2.
 
-	\begin{tcolorbox}[tabularx={XcX},top=10pt,bottom=10pt,left=3pt,right=3pt]
+	\begin{boxtable}[XcX]
 
 		Age & Max. Strength & Increase \\\hline
 
@@ -128,7 +128,7 @@ Finally, at 400 years old the elf's Charisma Bonus becomes +4 and their maximum
 
 		400 & -2 & Charisma \\
 
-	\end{tcolorbox}
+	\end{boxtable}
 
 \subsection{Starting Characters}
 
diff --git a/rules.tex b/rules.tex
index 7a123ac6..7bb7a792 100644
--- a/rules.tex
+++ b/rules.tex
@@ -411,7 +411,7 @@ The average free trader -- a blacksmith or cloth dyer -- can expect to make 5 \g
 
 Prices for weapons are placed next to the weapon in chapter \ref{combat}, page \pageref{weaponschart}.
 
-\begin{tcolorbox}[tabularx={p{.3\textwidth}XX},bottom=10pt,top=10pt,left=3pt,right=3pt]
+\begin{boxtable}[XcX]
 
 	\textbf{Animal} & & \textbf{Cost} \\\hline
 
@@ -429,9 +429,9 @@ Prices for weapons are placed next to the weapon in chapter \ref{combat}, page \
 
 	Plate Barding &   &  15 gp \\
 
-\end{tcolorbox}
+\end{boxtable}
 
-\begin{tcolorbox}[tabularx={p{.3\textwidth}XX},bottom=10pt,top=10pt,left=3pt,right=3pt]
+\begin{boxtable}[XcX]
 
 	\textbf{Buildings} & & \textbf{Cost} \\\hline
 
@@ -445,9 +445,9 @@ Prices for weapons are placed next to the weapon in chapter \ref{combat}, page \
 
 	Large Castle & &  30,000 gp \\
 
-\end{tcolorbox}
+\end{boxtable}
 
-\begin{tcolorbox}[tabularx={p{.3\textwidth}XX},bottom=10pt,top=10pt,left=3pt,right=3pt]
+\begin{boxtable}[XcX]
 
 	\textbf{Clothing} & \textbf{Weight} & \textbf{Cost} \\\hline
 
@@ -459,9 +459,9 @@ Prices for weapons are placed next to the weapon in chapter \ref{combat}, page \
 
 	Travelling clothes &  -3 &  5
 
-\end{tcolorbox}
+\end{boxtable}
 
-\begin{tcolorbox}[tabularx={p{.3\textwidth}XX},bottom=10pt,top=10pt,left=3pt,right=3pt]
+\begin{boxtable}[XcX]
 
 	\textbf{Professional Tools} & \textbf{Weight} & \textbf{Cost} \\\hline
 
@@ -487,28 +487,28 @@ Prices for weapons are placed next to the weapon in chapter \ref{combat}, page \
 
 	Rope, silk, 50' &  -4 &  3 sp \\
 
-\end{tcolorbox}
+\end{boxtable}
 
 \index{Camping}
-\begin{tcolorbox}[tabularx={XX},bottom=10pt,top=10pt,left=3pt,right=3pt]
+\begin{boxtable}[XcX]
 
-	\textbf{Travel} & \textbf{Cost} \\\hline
+	\textbf{Travel} & & \textbf{Cost} \\\hline
 
-	Ale &  1 cp \\
+	Ale & &  1 cp \\
 
-	Cart &  1 gp \\
+	Cart & &  1 gp \\
 
-	Camping equipment & {1 sp} \\
+	Camping equipment & & {1 sp} \\
 
-	One meal & 2 cp \\
+	One meal & & 2 cp \\
 
-	Barn for the night & 2 cp \\
+	Barn for the night & & 2 cp \\
 
-	Basic room for the night & 30 cp \\
+	Basic room for the night & & 30 cp \\
 
-	Fancy room for the night & 3 sp \\
+	Fancy room for the night & & 3 sp \\
 
-\end{tcolorbox}
+\end{boxtable}
 
 \subsection{Working Beasts}
 
@@ -560,7 +560,7 @@ Characters cannot carry any item which gives them a -5 Encumbrance rating or hig
 
 \newcommand{\servicesChart}{
 
-\begin{tcolorbox}[tabularx={XX},title=Services,bottom=10pt,left=3pt,right=3pt,code={\rowcolors{2}{}{gray!10}}]
+\begin{nametable}[XX]
 
 	\textbf{Sellsword} & 10sp/ day \\\hline
 
@@ -600,7 +600,7 @@ Characters cannot carry any item which gives them a -5 Encumbrance rating or hig
 
 	Fancy Room & 1sp \\
 
-\end{tcolorbox}
+\end{nametable}
 }
 
 \iftoggle{verbose}{
diff --git a/spheres.tex b/spheres.tex
index e1825362..9bb78da5 100644
--- a/spheres.tex
+++ b/spheres.tex
@@ -462,7 +462,7 @@ The player may be told that this is Damage, but the \gls{gm} should keep track o
 \spelllevel
 
 \spell{Domination}{Continuous}{Deceit}{The target obeys a command of Lv. + Int words. Intelligence + Deceit vs Wits + Academics.}\\
-The target is given a simple command by the enchanter, consisting of no more words than the spell's level, plus the enchanter's Intelligence.
+The target is given a simple command by the enchanter, consisting of no more words than the spells level, plus the enchanter's Intelligence.
 The target resists with their Wits + Academics, and if they fail, must immediately obey the command.%
 \footnote{The command must be a grammatically accurate, complete sentence. `Leave!', is fine, but `Find money, give me' is not.}
 
@@ -470,7 +470,7 @@ If the enchanter maintains the spell then the target can re-roll at the beginnin
 
 \end{multicols}
 
-	\begin{tcolorbox}[tabularx={llX},bottom=10pt,top=10pt,left=3pt,right=3pt]
+	\begin{boxtable}[llX]
 		Task Bonus & \gls{tn} & \\\hline
 
 		Humiliation & +2 & Any action which would humiliate the target grants a +2 bonus to resist. \\
@@ -484,7 +484,7 @@ If the enchanter maintains the spell then the target can re-roll at the beginnin
 		Code Fulfilment & Variable & As above, the caster gains a bonus to forcing people to act in line with their Code, equal to the \glspl{xp} they would gain.
 		\\
 
-	\end{tcolorbox}
+	\end{boxtable}
 
 \begin{multicols}{2}
 
@@ -1053,7 +1053,7 @@ As usual, replace 4 Damage with a $D6$, so a necromancer with basic Intelligence
 \end{multicols}
 
 \newcommand{\animalStats}{
-	\begin{tcolorbox}[tabularx={lccX},bottom=10pt,top=10pt,left=3pt,right=3pt]
+	\begin{boxtable}[lccX]
 
 	\textbf{Animal} & \textbf{Min Str.} & \textbf{Max Str.} & \textbf{Realistic Enhancements (Optional)} \\\hline
 
@@ -1098,13 +1098,13 @@ As usual, replace 4 Damage with a $D6$, so a necromancer with basic Intelligence
 
 	Wolf & -2 & +2 & Quadraped \\
 
-	\end{tcolorbox}
+	\end{boxtable}
 }
 
 \sphere{Polymorph}
 
 \newcommand{\animalAbilities}{
-	\begin{tcolorbox}[title=Animal Abilities]
+	\begin{boxtext}[title={Animal Abilities}]
 
 	\begin{itemize}
 
@@ -1118,7 +1118,7 @@ As usual, replace 4 Damage with a $D6$, so a necromancer with basic Intelligence
 
 	\end{itemize}
 
-	\end{tcolorbox}
+	\end{boxtext}
 }
 
 \begin{multicols}{2}
-- 
GitLab