Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • ffnw-firmware/siteconf
  • pic/siteconf
  • PowerPan/siteconf
  • netmon-sc/siteconf
  • floh1111/siteconf
  • lrnzo/siteconf
  • florian.lottes/siteconf
7 results
Show changes
Commits on Source (38)
Showing
with 458 additions and 7876 deletions
#!/bin/bash
# https://stackoverflow.com/questions/2870992/automatic-exit-from-bash-shell-script-on-error
set -e
echo ""
echo "##################################"
echo "Check debendencies"
echo "##################################"
echo ""
# if no OS is supported message should shown.
noOSsupport=1
# the exitcode which will be set by programm check.
ret=0
# Debian programmlist
debian_progarr=(
shellcheck
yamllint
git
subversion
python
build-essential
gawk
unzip
libncurses5-dev
zlib1g-dev
libssl-dev
wget
time
ecdsasign
)
# Arch programmlist
arch_progarr=(
shellcheck
yamllint
git
svn
python
gawk
unzip
ncurses
zlib
openssl
wget
time
ecdsasign
)
echop(){
echo "$1 detected ..."
}
comand(){
if command -v "$1" > /dev/null 2>&1; then
echop "$1"
return 0
fi
return 1
}
# Debian check installed dependencies
if [ -f /etc/debian_version ]; then
noOSsupport=0
for prog in "${debian_progarr[@]}"; do
if comand "$prog"; then
continue
fi
if dpkg -s "$prog" > /dev/null 2>&1; then
echop "$prog"
continue
fi
echo "$prog is not installed"
ret=1
done
fi
# Arch check installed dependencies
if [ -f /etc/arch-release ]; then
noOSsupport=0
for prog in "${arch_progarr[@]}"; do
if comand "$prog"; then
continue
fi
if pacman -Qi "$prog" > /dev/null 2>&1; then
echop "$prog"
continue
fi
echo "$prog is not installed"
ret=1
done
fi
if [ $noOSsupport -eq 1 ]; then
echo "OS is not supported"
ret=1
fi
exit $ret
#!/bin/bash
CI_BUILD_REF_NAME="$1"
if ! [ -e ".GLUON_RELEASE" ]; then
exit 1
fi
GLUON_RELEASE="$(cat ".GLUON_RELEASE")"
if ! [ -e ".GLUON_BRANCH" ]; then
exit 1
fi
GLUON_BRANCH="$(cat ".GLUON_BRANCH")"
ssh runner@firmware.ffnw.de -C "rm -rf /var/www/dev/firmware/fastd/nightly/$CI_BUILD_REF_NAME"
ssh runner@firmware.ffnw.de -C "rm -rf /var/www/dev/firmware/l2tp/nightly/$CI_BUILD_REF_NAME"
rsync -av ../output/images/fastd/"$GLUON_RELEASE"/factory/* runner@firmware.ffnw.de:/var/www/dev/firmware/fastd/nightly/"$CI_BUILD_REF_NAME"
rsync -av ../output/images/fastd/"$GLUON_RELEASE"/other/* runner@firmware.ffnw.de:/var/www/dev/firmware/fastd/nightly/"$CI_BUILD_REF_NAME"
rsync -av ../output/images/fastd/"$GLUON_RELEASE"/sysupgrade/* runner@firmware.ffnw.de:/var/www/dev/firmware/fastd/nightly/"$CI_BUILD_REF_NAME"
ssh runner@firmware.ffnw.de -C "ln -sr /var/www/dev/firmware/fastd/nightly/$CI_BUILD_REF_NAME/$GLUON_BRANCH.manifest /var/www/dev/firmware/fastd/nightly/$CI_BUILD_REF_NAME/manifest"
rsync -av ../output/images/l2tp/"$GLUON_RELEASE"/factory/* runner@firmware.ffnw.de:/var/www/dev/firmware/l2tp/nightly/"$CI_BUILD_REF_NAME"
rsync -av ../output/images/l2tp/"$GLUON_RELEASE"/other/* runner@firmware.ffnw.de:/var/www/dev/firmware/l2tp/nightly/"$CI_BUILD_REF_NAME"
rsync -av ../output/images/l2tp/"$GLUON_RELEASE"/sysupgrade/* runner@firmware.ffnw.de:/var/www/dev/firmware/l2tp/nightly/"$CI_BUILD_REF_NAME"
ssh runner@firmware.ffnw.de -C "ln -sr /var/www/dev/firmware/l2tp/nightly/$CI_BUILD_REF_NAME/$GLUON_BRANCH.manifest /var/www/dev/firmware/l2tp/nightly/$CI_BUILD_REF_NAME/manifest"
#!/bin/sh
echo "Executing pre-commit hook..."
gitRootDir=$(git rev-parse --show-toplevel)
if ! "$gitRootDir"/.ci/dependencies.sh ; then exit 1; fi
if ! "$gitRootDir"/.ci/shelllint.sh ; then exit 1; fi
if ! "$gitRootDir"/.ci/yamllint.sh ; then exit 1; fi
exit 0
#!/bin/sh
echo "Doing schelllint..."
ret=0
# explicitly set IFS to contain only a line feed
IFS='
'
filelist="$(find . -not \( -path './.git/*' -prune \) -type f ! -name "$(printf '*\n*')")"
for line in $filelist; do
if echo "$line" | grep -q -E '.*\.sh$' || head -n1 "$line" | grep -q -E "#.*(sh|bash|dash|ksh)$" ; then
if ! grep -q "$line" ".ci/shell_accepted"; then
shellcheck "$line"
if [ $? -eq 1 ]; then
ret=1
fi
fi
fi
done
exit $ret
#!/bin/bash
ECDSA_PRIVAT_KEY="$1"
echo "$ECDSA_PRIVAT_KEY" > ecdsa.priv
if ! [ -e ".GLUON_RELEASE" ]; then
exit 1
fi
GLUON_RELEASE="$(cat ".GLUON_RELEASE")"
if ! [ -e ".GLUON_BRANCH" ]; then
exit 1
fi
GLUON_BRANCH="$(cat ".GLUON_BRANCH")"
echo "$PWD"/ecdsa.priv
echo "$PWD/../output/images/fastd/$GLUON_RELEASE/sysupgrade/$GLUON_BRANCH.manifest"
#sign fastd
../contrib/sign.sh "$PWD"/ecdsa.priv "$PWD/../output/images/fastd/$GLUON_RELEASE/sysupgrade/$GLUON_BRANCH.manifest"
#sign l2tp
../contrib/sign.sh "$PWD"/ecdsa.priv "$PWD/../output/images/l2tp/$GLUON_RELEASE/sysupgrade/$GLUON_BRANCH.manifest"
rm ecdsa.priv
---
extends: default
rules:
line-length:
level: error
max: 100
allow-non-breakable-inline-mappings: true
#!/bin/sh
echo "Doing yamllint..."
ret=0
# explicitly set IFS to contain only a line feed
IFS='
'
filelist="$(find . -not \( -path './.git/*' -prune \) -type f ! -name "$(printf '*\n*')")"
for line in $filelist; do
if echo "$line" | grep -q -E '.*\.(yml|yaml)' ; then
if ! grep -q "$line" ".ci/shell_accepted"; then
tmp="$(yamllint --strict -d ./.ci/yaml_rules.yaml "$line")"
if ! [ "$tmp" = "" ]; then
echo "$tmp"
ret=1
fi
fi
fi
done
exit $ret
---
variables:
GIT_CLONE_PATH: $CI_BUILDS_DIR/2c952829/0/gluon/site
stages:
- dependencies
- lint
- patch
- parameters
- build
- sign
- deploy
- cleanup
# check all needed dependencies.
dependencies:
stage: dependencies
tags:
- firmware
script:
- ./.ci/dependencies.sh
# lint all common shell scripts
shelllint:
stage: lint
tags:
- firmware
script:
- ./.ci/shelllint.sh
# lint all common yamel files
yamllint:
stage: lint
tags:
- firmware
script:
- ./.ci/yamllint.sh
# update and patch gluon
prepare_gluon:
stage: patch
tags:
- firmware
artifacts:
paths:
- .patched
expire_in: 1 day
before_script:
- ( cd ..; [ $(git status | grep -c am) -eq 0 ] || git am --abort; )
script:
- touch .patched
- ./buildscript.sh clean_patches
- ( cd ..; git pull; git checkout $UPSTREAM_GLUON_BRANCH )
- ./buildscript.sh patch
parameters:
stage: parameters
tags:
- firmware
artifacts:
paths:
- .GLUON_BRANCH
- .GLUON_RELEASE
expire_in: 1 day
script:
- ./buildscript.sh prepare GLUON_BRANCH nightly_master
- ./buildscript.sh prepare GLUON_RELEASE $(date +%Y%m%d)
build:
stage: build
only:
- master
tags:
- firmware
script:
- touch .prepare
- ./buildscript.sh build all
sign:
stage: sign
only:
- master
tags:
- firmware
script:
- ./.ci/sign.sh $ECDSA_PRIVAT_KEY
deploy:
stage: deploy
only:
- master
tags:
- firmware
script:
- ./.ci/deploy.sh $CI_BUILD_REF_NAME
cleanup:
stage: cleanup
only:
- master
tags:
- firmware
script:
- touch .patched
- ./buildscript.sh clean_patches
- rm -rf ../output
......@@ -5,9 +5,9 @@ https://wiki.ffnw.de/Entwicklung/Als\_Entwickler\_t%C3%A4tig\_werden
## Firmware Kompilieren
### Voraussetzungen (Stand Gluon v2018.2.x):
### Voraussetzungen (Stand Gluon v2019.1.x):
Muss auf dem Rechner installiert sein. Hier Beispiel Debian:
Folgende Pakete müssen auf dem Rechner installiert sein. Hier Beispiel Debian:
apt-get install git subversion python build-essential gawk unzip libncurses-dev libz-dev libssl-dev
......@@ -17,7 +17,7 @@ Auf dieser Seite wird beschrieben, wie man die Gluon Firmware für das Freifunk
*Wichtig* Je nach Entwicklungsstand muss die Branch Version angepasst werden.
git clone https://github.com/freifunk-gluon/gluon.git ./freifunk_build -b v2018.2.x && cd ./freifunk_build
git clone https://github.com/freifunk-gluon/gluon.git -b v2019.1.x && cd gluon
git clone https://git.ffnw.de/ffnw-firmware/siteconf.git site && cd site
./buildscript.sh patch
./buildscript.sh prepare GLUON_BRANCH <autoupdater-branch, also zB "stable" oder "testing">
......
......@@ -20,8 +20,9 @@ help_print(){
echo " BROKEN y or n (default n)"
echo " build <command> <command> can be replaced by targets"
echo " target_list build all gluon targets"
echo " all build all gluon targes for each VPN"
echo " all build all gluon targets for each VPN"
echo " (optional) add \"fast\" as a parameter to build on multicore"
# echo " (optional) add \"silent\" as a parameter to avoid loads of output"
echo " create_manifest create manifest"
echo
}
......@@ -49,7 +50,7 @@ clean_patches(){
if [ -f "$EXECDIR/.patched" ]; then
local base="$EXECDIR"
cd "$EXECDIR"/.. || exit 1
git reset --hard "origin/v2018.2.x"
git reset --hard "origin/v2019.1.x"
cd "$EXECDIR" || exit 1
rm "$EXECDIR/.patched"
else
......@@ -60,7 +61,7 @@ clean_patches(){
update_patches() {
local base="$EXECDIR"
cd "$EXECDIR"/.. || exit 1
git format-patch "origin/v2018.2.x" -o "$EXECDIR/gluon_patches"
git format-patch "origin/v2019.1.x" -o "$EXECDIR/gluon_patches"
cd "$base" || exit 1
}
......@@ -140,11 +141,19 @@ prepare_sitemk(){
gluon_build(){
if [ "$2" == "fast" ] && [ -a "/proc/cpuinfo" ]; then
if [ -a "$EXECDIR/.BROKEN" ]; then
make -C "$EXECDIR/.." -j $(($(grep -c processor /proc/cpuinfo)*2)) BROKEN=1 GLUON_TARGET="$1" GLUON_IMAGEDIR="output/images/$(cat "$EXECDIR/.prepare")/$(cat "$EXECDIR/.GLUON_RELEASE")" GLUON_PACKAGEDIR="output/packages/$(cat "$EXECDIR/.prepare")"
else
make -C "$EXECDIR/.." -j $(($(grep -c processor /proc/cpuinfo)*2)) GLUON_TARGET="$1" GLUON_IMAGEDIR="output/images/$(cat "$EXECDIR/.prepare")/$(cat "$EXECDIR/.GLUON_RELEASE")" GLUON_PACKAGEDIR="output/packages/$(cat "$EXECDIR/.prepare")"
fi
if [ "$3" == "silent" ]; then
if [ -a "$EXECDIR/.BROKEN" ]; then
make --silent -C "$EXECDIR/.." -j $(($(grep -c processor /proc/cpuinfo)*2)) BROKEN=1 GLUON_TARGET="$1" GLUON_IMAGEDIR="output/images/$(cat "$EXECDIR/.prepare")/$(cat "$EXECDIR/.GLUON_RELEASE")" GLUON_PACKAGEDIR="output/packages/$(cat "$EXECDIR/.prepare")"
else
make --silent -C "$EXECDIR/.." -j $(($(grep -c processor /proc/cpuinfo)*2)) GLUON_TARGET="$1" GLUON_IMAGEDIR="output/images/$(cat "$EXECDIR/.prepare")/$(cat "$EXECDIR/.GLUON_RELEASE")" GLUON_PACKAGEDIR="output/packages/$(cat "$EXECDIR/.prepare")"
fi
else
if [ -a "$EXECDIR/.BROKEN" ]; then
make -C "$EXECDIR/.." -j $(($(grep -c processor /proc/cpuinfo)*2)) BROKEN=1 GLUON_TARGET="$1" GLUON_IMAGEDIR="output/images/$(cat "$EXECDIR/.prepare")/$(cat "$EXECDIR/.GLUON_RELEASE")" GLUON_PACKAGEDIR="output/packages/$(cat "$EXECDIR/.prepare")"
else
make -C "$EXECDIR/.." -j $(($(grep -c processor /proc/cpuinfo)*2)) GLUON_TARGET="$1" GLUON_IMAGEDIR="output/images/$(cat "$EXECDIR/.prepare")/$(cat "$EXECDIR/.GLUON_RELEASE")" GLUON_PACKAGEDIR="output/packages/$(cat "$EXECDIR/.prepare")"
fi
fi
else
if [ -a "$EXECDIR/.BROKEN" ]; then
make -C "$EXECDIR/.." BROKEN=1 GLUON_TARGET="$1" GLUON_IMAGEDIR="output/images/$(cat "$EXECDIR/.prepare")/$(cat "$EXECDIR/.GLUON_RELEASE")" GLUON_PACKAGEDIR="output/packages/$(cat "$EXECDIR/.prepare")"
......@@ -169,12 +178,13 @@ get_target_list(){
while read -r line; do
if [[ $line == *GluonTarget* ]]; then
# extract arcitecture parameter value
local targ="$(echo "$line" | sed -e 's/^.*GluonTarget,//' -e 's/)).*//' -r -e 's/([^,]+,[^,]*).*/\1/' -e 's/[,]/-/')"
local targ
targ="$(echo "$line" | sed -e 's/^.*GluonTarget,//' -e 's/)).*//' -r -e 's/([^,]+,[^,]*).*/\1/' -e 's/[,]/-/')"
if [ -n "$targ" ]; then
TARGET_LIST[${#TARGET_LIST[@]}]="$targ"
fi
else
if [[ $line == *BROKEN* ]] && ! [ -a "$EXECDIR/.BROKEN" ]; then
if [[ $line == *BROKEN* ]] && ! [[ $line == *GLUON_WLAN_MESH_11s* ]] && ! [ -a "$EXECDIR/.BROKEN" ]; then
break
fi
fi
......@@ -182,8 +192,8 @@ get_target_list(){
}
if ! git -C "$EXECDIR"/.. rev-parse --abbrev-ref HEAD | grep -q "v2018.2.x"; then
echo "no gluon repo found or wrong branch (should be v2018.2.x). Please clone this git repository into the gluon git repository"
if ! git -C "$EXECDIR"/.. rev-parse --abbrev-ref HEAD | grep -q "v2019.1.x"; then
echo "no gluon repo found or wrong branch (should be v2019.1.x). Please clone this git repository into the gluon git repository"
exit 1
fi
......@@ -259,7 +269,11 @@ case "$1" in
"target_list")
for targ in "${TARGET_LIST[@]}"; do
if [ "$3" == "fast" ]; then
gluon_build "$targ" "fast"
if [ "$4" == "silent" ]; then
gluon_build "$targ" "fast" "silent"
else
gluon_build "$targ" "fast"
fi
else
gluon_build "$targ"
fi
......@@ -267,10 +281,10 @@ case "$1" in
;;
"all")
"$EXECDIR/$0" prepare fastd
"$EXECDIR/$0" build target_list "fast"
"$EXECDIR/$0" build target_list "fast" "silent"
"$EXECDIR/$0" create_manifest
"$EXECDIR/$0" prepare l2tp
"$EXECDIR/$0" build target_list "fast"
"$EXECDIR/$0" build target_list "fast" "silent"
"$EXECDIR/$0" create_manifest
;;
*)
......@@ -286,7 +300,7 @@ case "$1" in
fi
done
if [ "$err" == "yes" ]; then
echo "Please use targes from the following list as parameter:"
echo "Please use targets from the following list as parameter:"
for targ in "${TARGET_LIST[@]}"; do
echo "$targ"
done
......
......@@ -2,7 +2,7 @@
domain_names = { butjadingen = 'Butjadingen' },
domain_seed = '951aab38a95615e4803084ab6aac24f6722f316a2a7e482488df9bfa39908bd2',
prefix6 = '2a06:e881:2000:4501::/64',
prefix6 = '2a06:e881:2000:4500::/64',
extra_prefixes6 = { 'fd74:fdaa:9dc4:b000::/64' },
prefix4 = '10.18.176.0/21',
......
......@@ -28,6 +28,10 @@
ip6 = 'fd74:fdaa:9dc4:e000::1:1',
},
mesh = {
vxlan = false,
},
mesh_vpn = {
fastd = {
groups = {
......
......@@ -56,88 +56,88 @@
hoodselector = {
shapes = {
{
{
lat = 52.24,
lon = 7.99
},
{
lat = 52.24,
lon = 8.15
},
{
lat = 52.32,
lon = 8.15
},
{
lat = 52.32,
lon = 7.99
},
{
lat = 52.24,
lon = 7.99
}
{
lat = 52.24,
lon = 7.99
},
{
lat = 52.24,
lon = 8.15
},
{
lat = 52.32,
lon = 8.15
},
{
lat = 52.32,
lon = 7.99
},
{
lat = 52.24,
lon = 7.99
}
},
{
{
lat = 52.27,
lon = 8.0417
},
{
lat = 52.2684,
lon = 8.0447
},
{
lat = 52.2676,
lon = 8.0471
},
{
lat = 52.2672,
lon = 8.05
},
{
lat = 52.2672,
lon = 8.0531
},
{
lat = 52.2684,
lon = 8.057
},
{
lat = 52.2705,
lon = 8.0585
},
{
lat = 52.2722,
lon = 8.0579
},
{
lat = 52.2765,
lon = 8.0501
},
{
lat = 52.2783,
lon = 8.0496
},
{
lat = 52.2821,
lon = 8.0431
},
{
lat = 52.2787,
lon = 8.0384
},
{
lat = 52.2765,
lon = 8.0382
},
{
lat = 52.2755,
lon = 8.0393
},
{
lat = 52.27,
lon = 8.0417
}
{
lat = 52.27,
lon = 8.0417
},
{
lat = 52.2684,
lon = 8.0447
},
{
lat = 52.2676,
lon = 8.0471
},
{
lat = 52.2672,
lon = 8.05
},
{
lat = 52.2672,
lon = 8.0531
},
{
lat = 52.2683,
lon = 8.0568
},
{
lat = 52.2705,
lon = 8.0585
},
{
lat = 52.2701,
lon = 8.0595
},
{
lat = 52.2727,
lon = 8.0618
},
{
lat = 52.2747,
lon = 8.057
},
{
lat = 52.2823,
lon = 8.0434
},
{
lat = 52.2787,
lon = 8.0384
},
{
lat = 52.2765,
lon = 8.0382
},
{
lat = 52.2755,
lon = 8.0393
},
{
lat = 52.27,
lon = 8.0417
}
}
}
}
......
......@@ -77,28 +77,28 @@
lon = 8.0531
},
{
lat = 52.2684,
lon = 8.057
lat = 52.2683,
lon = 8.0568
},
{
lat = 52.2705,
lon = 8.0585
},
{
lat = 52.2722,
lon = 8.0579
lat = 52.2701,
lon = 8.0595
},
{
lat = 52.2765,
lon = 8.0501
lat = 52.2727,
lon = 8.0618
},
{
lat = 52.2783,
lon = 8.0496
lat = 52.2747,
lon = 8.057
},
{
lat = 52.2821,
lon = 8.0431
lat = 52.2823,
lon = 8.0434
},
{
lat = 52.2787,
......
From 7944b7c6e627ddbfbc54b8c0238b5807de039ebe Mon Sep 17 00:00:00 2001
From 9f696624c92d853ef2717d788f170dd221e6bc84 Mon Sep 17 00:00:00 2001
From: runner01 <runner01@ffnw.de>
Date: Fri, 8 Feb 2019 04:43:50 +0100
Subject: [PATCH 1/5] add gluon-geolocator
Subject: [PATCH 1/6] add gluon-geolocator
---
package/gluon-geolocator/Makefile | 14 +++
package/gluon-geolocator/check_site.lua | 2 +
.../gluon-geolocator/files/etc/config/geolocator | 2 +
.../files/usr/lib/micron.d/geolocator | 1 +
.../luasrc/lib/gluon/geolocator/geolocator | 130 +++++++++++++++++++++
.../lib/gluon/upgrade/540-geolocator-settings | 26 +++++
package/gluon-geolocator/Makefile | 14 ++
package/gluon-geolocator/check_site.lua | 2 +
.../files/etc/config/geolocator | 2 +
.../files/usr/lib/micron.d/geolocator | 1 +
.../luasrc/lib/gluon/geolocator/geolocator | 130 ++++++++++++++++++
.../lib/gluon/upgrade/540-geolocator-settings | 26 ++++
6 files changed, 175 insertions(+)
create mode 100644 package/gluon-geolocator/Makefile
create mode 100644 package/gluon-geolocator/check_site.lua
......@@ -230,5 +230,5 @@ index 00000000..84c9f99c
+})
+uci:save(config)
--
2.11.0
2.20.1
From a41530ada3b1f14d36bfce80ff7f05fb67d4ee28 Mon Sep 17 00:00:00 2001
From a0dace39f87ef109ebb7c53f442cc7c1f25563bb Mon Sep 17 00:00:00 2001
From: Jan-Tarek Butt <tarek@ring0.de>
Date: Sun, 25 Feb 2018 08:42:42 +0100
Subject: [PATCH 3/5] ffnw config migration from gluon-node-info to geolocator
Subject: [PATCH 2/6] ffnw config migration from gluon-node-info to geolocator
Signed-off-by: Jan-Tarek Butt <tarek@ring0.de>
---
.../luasrc/lib/gluon/upgrade/900-geloc-conf-migration | 17 +++++++++++++++++
.../lib/gluon/upgrade/900-geloc-conf-migration | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
create mode 100755 package/gluon-geolocator/luasrc/lib/gluon/upgrade/900-geloc-conf-migration
......@@ -33,5 +33,5 @@ index 00000000..6bfb1059
+ uci:save('geolocator')
+end
--
2.11.0
2.20.1
From 363c606d384218b0a3741c0aa1c8e53a02d1cab8 Mon Sep 17 00:00:00 2001
From 6ea8b47ee5d30663fdaef97e9797b8eaab9d5ffb Mon Sep 17 00:00:00 2001
From: runner01 <runner01@ffnw.de>
Date: Mon, 18 Mar 2019 21:29:26 +0100
Subject: [PATCH 4/5] hoodselector to domain migration
Subject: [PATCH 4/6] hoodselector to domain migration
Domain migration: restart services after migration
Signed-off-by: runner01 <runner01@ffnw.de>
---
.../luasrc/lib/gluon/upgrade/010-domain-migrate | 38 ++++++++++++++++++++++
.../lib/gluon/upgrade/010-domain-migrate | 38 +++++++++++++++++++
1 file changed, 38 insertions(+)
create mode 100755 package/gluon-hoodselector/luasrc/lib/gluon/upgrade/010-domain-migrate
......@@ -56,5 +56,5 @@ index 00000000..9146970b
+ end
+end
--
2.11.0
2.20.1