From d9c1a6e575c064f81ed94cb8560d88f1b747a141 Mon Sep 17 00:00:00 2001
From: marko
Date: Tue, 26 Jun 2018 18:59:00 +0200
Subject: [PATCH 01/14] =?UTF-8?q?zum=20Commit=20vorgemerkte=20=C3=84nderun?=
=?UTF-8?q?gen:=20=09ge=C3=A4ndert:=20=20=20=20=20=20=20../../../mitgliede?=
=?UTF-8?q?r/mitglieder.2018/anwesenheitsliste-2018.fods?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../anwesenheitsliste-2018.fods | 362 ++++++++++++++----
1 file changed, 277 insertions(+), 85 deletions(-)
diff --git a/mitglieder/mitglieder.2018/anwesenheitsliste-2018.fods b/mitglieder/mitglieder.2018/anwesenheitsliste-2018.fods
index f2c2b66..f514b19 100644
--- a/mitglieder/mitglieder.2018/anwesenheitsliste-2018.fods
+++ b/mitglieder/mitglieder.2018/anwesenheitsliste-2018.fods
@@ -1,52 +1,18 @@
- 2017-02-26T16:26:55.6448692282017-02-26T16:43:50.5216193632018-06-25T04:46:32.562022445PT3H27M19S9LibreOffice/4.3.3.2$Linux_X86_64 LibreOffice_project/430m0$Build-2
+ 2017-02-26T16:26:55.6448692282017-02-26T16:43:50.5216193632018-06-25T21:00:54.505725049PT3H31M19S10LibreOffice/4.3.3.2$Linux_X86_64 LibreOffice_project/430m0$Build-2
0
0
- 17240
- 27354
+ 11886
+ 6244
view1
- 0
- 56
- 0
- 0
- 0
- 0
- 2
- 0
- 0
- 0
- 45
- 0
- 100
- 60
- true
-
-
- 16
- 0
- 0
- 0
- 0
- 0
- 2
- 0
- 0
- 0
- 24
- 0
- 100
- 60
- true
-
-
1
0
0
@@ -63,9 +29,60 @@
60
true
+
+ 0
+ 1
+ 0
+ 0
+ 0
+ 0
+ 2
+ 0
+ 0
+ 0
+ 0
+ 0
+ 100
+ 60
+ true
+
+
+ 1
+ 0
+ 0
+ 0
+ 0
+ 0
+ 2
+ 0
+ 0
+ 0
+ 0
+ 0
+ 100
+ 60
+ true
+
+
+ 9
+ 5
+ 0
+ 0
+ 0
+ 0
+ 2
+ 0
+ 0
+ 0
+ 0
+ 0
+ 100
+ 60
+ true
+
- Sheet3
- 320
+ Sommerferienanwesenheit
+ 548
0
100
60
@@ -95,7 +112,7 @@
false
true
0
- qQH+/0dlbmVyaWMgUHJpbnRlcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU0dFTlBSVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAMAygAAAAAAAAAEAAhSAAAEdAAASm9iRGF0YSAxCnByaW50ZXI9R2VuZXJpYyBQcmludGVyCm9yaWVudGF0aW9uPVBvcnRyYWl0CmNvcGllcz0xCmNvbGxhdGU9ZmFsc2UKbWFyZ2luZGFqdXN0bWVudD0wLDAsMCwwCmNvbG9yZGVwdGg9MjQKcHNsZXZlbD0wCnBkZmRldmljZT0xCmNvbG9yZGV2aWNlPTAKUFBEQ29udGV4RGF0YQpQYWdlU2l6ZTpBNABEdXBsZXg6RHVwbGV4Tm9UdW1ibGUAABIAQ09NUEFUX0RVUExFWF9NT0RFDwBEVVBMRVhfTE9OR0VER0U=
+ qQH+/0dlbmVyaWMgUHJpbnRlcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU0dFTlBSVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAMAygAAAAAAAAAEAAhSAAAEdAAASm9iRGF0YSAxCnByaW50ZXI9R2VuZXJpYyBQcmludGVyCm9yaWVudGF0aW9uPVBvcnRyYWl0CmNvcGllcz0xCmNvbGxhdGU9ZmFsc2UKbWFyZ2luZGFqdXN0bWVudD0wLDAsMCwwCmNvbG9yZGVwdGg9MjQKcHNsZXZlbD0wCnBkZmRldmljZT0xCmNvbG9yZGV2aWNlPTAKUFBEQ29udGV4RGF0YQpEdXBsZXg6RHVwbGV4Tm9UdW1ibGUAUGFnZVNpemU6QTQAABIAQ09NUEFUX0RVUExFWF9NT0RFDwBEVVBMRVhfTE9OR0VER0U=
Generic Printer
true
true
@@ -223,12 +240,18 @@
+
+
+
+
+
+
@@ -417,6 +440,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -459,7 +514,7 @@
??? (???)
- 00.00.0000, 00:00:00
+ 00.00.0000, 00:00:00
@@ -2895,7 +2950,7 @@
-
+
@@ -2949,46 +3004,46 @@
Anwesend
-
+
44
-
+
41
-
+
32
-
+
32
-
+
30
-
+
28
-
+
24
-
+
24
-
+
24
-
+
22
-
+
21
-
+
17
-
+
15
-
+
0
@@ -3090,46 +3145,46 @@
nicht Anwesend
-
+
6
-
+
9
-
+
18
-
+
18
-
+
22
-
+
22
-
+
30
-
+
26
-
+
26
-
+
28
-
+
6
-
+
33
-
+
35
-
+
0
@@ -3372,50 +3427,187 @@
Kontrolle
-
+
50
-
+
50
-
+
50
-
+
50
-
+
52
-
+
50
-
+
54
-
+
50
-
+
50
-
+
50
-
+
27
-
+
50
-
+
50
-
+
0
+
+
+
+
+
+ 2018
+
+
+ Arthur
+
+
+ Elly
+
+
+ Eric
+
+
+ Jan
+
+
+ Jasmin
+
+
+ Lennox
+
+
+ Lionel
+
+
+ Nick
+
+
+ Nico
+
+
+ Pascal
+
+
+ Rio
+
+
+ Rolf
+
+
+ Romy
+
+
+ Sebastian
+
+
+
+
+ Mi 04.Jul 18
+
+
+
+
+
+ Fr 06.Jul 18
+
+
+
+
+
+ Mi 11.Jul 18
+
+
+
+
+
+ Fr 13.Jul 18
+
+
+
+
+
+ Mi 18.Jul 18
+
+
+
+
+
+ Fr 20.Jul 18
+
+
+
+
+
+ Mi 25.Jul 18
+
+
+
+
+
+ Fr 27.Jul 18
+
+
+
+
+
+ Mi 01.Aug 18
+
+
+
+
+
+ Fr 03.Aug 18
+
+
+
+
+
+ Mi 08.Aug 18
+
+
+
+
+
+ Fr 10.Aug 18
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -3423,7 +3615,7 @@
-
+
From 806ba97821e7d484def2ea178a5d735ddc59980c Mon Sep 17 00:00:00 2001
From: marko
Date: Mon, 1 Oct 2018 06:23:17 +0200
Subject: [PATCH 02/14] Die doppelten Vorschaubilder bei der Videogalerie
entfernt
Changes to be committed:
modified: homepage/redesign2018/markdownExperiment/phpLib/videoGallery/videoGallery.tmpl.php
---
.../phpLib/videoGallery/videoGallery.tmpl.php | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/homepage/redesign2018/markdownExperiment/phpLib/videoGallery/videoGallery.tmpl.php b/homepage/redesign2018/markdownExperiment/phpLib/videoGallery/videoGallery.tmpl.php
index ee02c68..848cc77 100644
--- a/homepage/redesign2018/markdownExperiment/phpLib/videoGallery/videoGallery.tmpl.php
+++ b/homepage/redesign2018/markdownExperiment/phpLib/videoGallery/videoGallery.tmpl.php
@@ -58,7 +58,7 @@ return $retVal;
@@ -128,10 +128,11 @@ return $retVal;
flex: auto;
width: 100%;
padding: 1vw 0;
+ flex-grow: unset;
}
.galImgList div img{
width: 100%;
- height: auto;
+ height: auto;
}
.galImgList div video{
width: 100%;
@@ -162,7 +163,9 @@ return $retVal;
foreach( $vidList as $vidKey => $vidEntry ){
echo( "" );
echo "
![]()
Date: Thu, 18 Oct 2018 13:55:26 +0200
Subject: [PATCH 03/14] =?UTF-8?q?-=20Funktion=20zum=20Erzeugen=20einer=20D?=
=?UTF-8?q?atenbankverbindung=20erg=C3=A4nzt=20=09modified:=20=20=20homepa?=
=?UTF-8?q?ge/redesign2018/markdownExperiment/phpLib/cwsvJudo/miscAssis.ph?=
=?UTF-8?q?p=20-=20Anzahl=20der=20Teilnehmer=20wird=20jetzt=20getrennt=20i?=
=?UTF-8?q?n=20K=C3=A4mpfer=20und=20Zuschauer;=20nicht=20teilnehmende,=20a?=
=?UTF-8?q?ber=20eingeschriebene=20Starter=20werden=20ignoriert=20=09modif?=
=?UTF-8?q?ied:=20=20=20homepage/redesign2018/markdownExperiment/wkPartici?=
=?UTF-8?q?po/admin/listUsers.php=20=09modified:=20=20=20homepage/redesign?=
=?UTF-8?q?2018/markdownExperiment/wkParticipo/index.php=20=09modified:=20?=
=?UTF-8?q?=20=20homepage/redesign2018/markdownExperiment/wkParticipo/lib/?=
=?UTF-8?q?wkParticipoLib.inc.php?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../phpLib/cwsvJudo/miscAssis.php | 14 ++++++++++++
.../wkParticipo/admin/listUsers.php | 10 +++++++++
.../markdownExperiment/wkParticipo/index.php | 8 +++++--
.../wkParticipo/lib/wkParticipoLib.inc.php | 22 ++++++++++++++-----
4 files changed, 47 insertions(+), 7 deletions(-)
diff --git a/homepage/redesign2018/markdownExperiment/phpLib/cwsvJudo/miscAssis.php b/homepage/redesign2018/markdownExperiment/phpLib/cwsvJudo/miscAssis.php
index 9de7524..ec8f622 100644
--- a/homepage/redesign2018/markdownExperiment/phpLib/cwsvJudo/miscAssis.php
+++ b/homepage/redesign2018/markdownExperiment/phpLib/cwsvJudo/miscAssis.php
@@ -4,6 +4,20 @@ function is_positive_integer($str){
return (is_numeric($str) && $str > 0 && $str == round($str));
}
+function getPdoDbConnection($hostname, $dbName, $user, $password){
+ try{
+ $dbConnection = new PDO(
+ 'mysql:host='.$hostname.';dbname='.$dbName,
+ $user,
+ $password
+ );
+ }
+ catch(PDOException $dbError){
+ echo( "Error whilst getting a dbConnection!: " . $dbError->getMessage() );
+ }
+return $dbConnection;
+}
+
function getCwsvJudoDbConn(){
global $cwsvJudoConfig;
// Datenbankverbindung bereit stellen
diff --git a/homepage/redesign2018/markdownExperiment/wkParticipo/admin/listUsers.php b/homepage/redesign2018/markdownExperiment/wkParticipo/admin/listUsers.php
index 5c616e5..6e6e40a 100644
--- a/homepage/redesign2018/markdownExperiment/wkParticipo/admin/listUsers.php
+++ b/homepage/redesign2018/markdownExperiment/wkParticipo/admin/listUsers.php
@@ -1,8 +1,18 @@
diff --git a/homepage/redesign2018/markdownExperiment/wkParticipo/index.php b/homepage/redesign2018/markdownExperiment/wkParticipo/index.php
index 937b5c9..ccd725c 100644
--- a/homepage/redesign2018/markdownExperiment/wkParticipo/index.php
+++ b/homepage/redesign2018/markdownExperiment/wkParticipo/index.php
@@ -5,6 +5,10 @@ setlocale (LC_ALL, 'de_DE@euro', 'de_DE', 'de', 'ge');
require_once('./local/db.php.inc');
require_once('./lib/wkParticipoLib.inc.php');
+ $basePath = "/users/cwsvjudo/www";
+ require_once($basePath."/config/phpcount.config.php");
+ require_once($basePath."/ressourcen/phpLib/phpcount/phpcount.php");
+
$sqlMessage = array();
$mysqlConn = @new mysqli($db_server, $db_user, $db_password, $db_name);
@@ -189,7 +193,7 @@ setlocale (LC_ALL, 'de_DE@euro', 'de_DE', 'de', 'ge');
Anstehende Wettkämpfe
- Nicht wundern, dass hier eventuell etwas doppelt steht! Ich experimentiere gerade.
+
"UTF-8") );
@@ -210,7 +214,7 @@ setlocale (LC_ALL, 'de_DE@euro', 'de_DE', 'de', 'ge');
$wkEvent,
getStarterForEvent($mysqlConn, $wkEvent['id']),
getFahrtenForEvent($mysqlConn, $wkEvent['id'])
- )
+ )
);
?>
diff --git a/homepage/redesign2018/markdownExperiment/wkParticipo/lib/wkParticipoLib.inc.php b/homepage/redesign2018/markdownExperiment/wkParticipo/lib/wkParticipoLib.inc.php
index ab5c18d..1388387 100644
--- a/homepage/redesign2018/markdownExperiment/wkParticipo/lib/wkParticipoLib.inc.php
+++ b/homepage/redesign2018/markdownExperiment/wkParticipo/lib/wkParticipoLib.inc.php
@@ -1201,6 +1201,7 @@ return $url;
function htmlWkEvent($aWkEvent, $starters, $fahrten){
//var_dump($aWkEvent, $starters, $fahrten);
+
$retHtml = "";
if( empty($aWkEvent['Datum']) )
@@ -1209,6 +1210,10 @@ $retHtml = "";
foreach($fahrten as $fahrt)
$anzPlätze += $fahrt['plaetze'];
+ $anzahlKaempfer = array_count_values(array_column($starters, 'type'))['1'];
+ $anzahlZuschauer = array_count_values(array_column($starters, 'type'))['2'];
+
+
$heuteDateTime = DateTimeImmutable::createFromFormat("Y-m-d", date("Y-m-d"));
$einschreibeDateTime = DateTimeImmutable::createFromFormat("Y-m-d", $aWkEvent['meldefrist']);
@@ -1235,10 +1240,17 @@ $retHtml = "";
"
"
)."".
(!empty($_SESSION['login'])?
- "angemeldete Starter".(
- empty($starters)?
- "Noch hat sich niemand für diesen Wettkampf gemeldet!":
- count($starters)
+ "eingeschriebene Starter".(
+ ( $anzahlKaempfer == 0 )?
+ "Noch hat sich niemand für diesen Wettkampf eingeschrieben!":
+ $anzahlKaempfer
+ ).""
+ :"").
+ (!empty($_SESSION['login'])?
+ "eingeschriebene Zuschauer".(
+ ( $anzahlZuschauer == 0 )?
+ "Noch will sich niemand diesen Wettkampf anschauen!":
+ $anzahlZuschauer
).""
:"").
(empty($_SESSION['login'])?
@@ -1257,7 +1269,7 @@ $retHtml = "";
).
""
).
- "Anzahl Mitfahrgelegenheiten" . $anzPlätze . "".
+ "Anzahl Mitfahrgelegenheiten" . $anzPlätze . "".
(empty($_SESSION['login'])?
"Das Anbieten von Mitfahrgelegenheiten ist nur eingeloggt möglich!"
:"
+
From 00a50e2f0cf540dcee8c6f3e1c27c6cdfdac2eab Mon Sep 17 00:00:00 2001
From: marko
Date: Fri, 2 Nov 2018 06:05:49 +0100
Subject: [PATCH 06/14] =?UTF-8?q?-=20node-csso=20funktioiniert=20auf=20ein?=
=?UTF-8?q?mal=20nicht=20mehr=20=09modified:=20=20=20homepage/redesign2018?=
=?UTF-8?q?/markdownExperiment/Makefile=20-=20Funktion=20zu=20Erzeugen=20d?=
=?UTF-8?q?es=20htmlCodes=20der=20Wettkampeinzelansicht=20=09modified:=20?=
=?UTF-8?q?=20=20homepage/redesign2018/markdownExperiment/phpLib/cwsvJudo/?=
=?UTF-8?q?wkKalender.php=20-=20cssStyles=20f=C3=BCr=20mit=20Text=20overla?=
=?UTF-8?q?ytes=20Bild=20hinzugef=C3=BCgt=20=09modified:=20=20=20homepage/?=
=?UTF-8?q?redesign2018/markdownExperiment/src/css/cwsvJudo-2018-wkKalende?=
=?UTF-8?q?r.css=20=09modified:=20=20=20homepage/redesign2018/markdownExpe?=
=?UTF-8?q?riment/src/css/cwsvJudo-2018.css=20=09modified:=20=20=20homepag?=
=?UTF-8?q?e/redesign2018/css/cwsvJudo-2018.css?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
homepage/redesign2018/css/cwsvJudo-2018.css | 4 ++
.../redesign2018/markdownExperiment/Makefile | 4 +-
.../phpLib/cwsvJudo/wkKalender.php | 70 +++++++++++++++----
.../src/css/cwsvJudo-2018-wkKalender.css | 28 ++++++++
.../src/css/cwsvJudo-2018.css | 9 ++-
5 files changed, 97 insertions(+), 18 deletions(-)
diff --git a/homepage/redesign2018/css/cwsvJudo-2018.css b/homepage/redesign2018/css/cwsvJudo-2018.css
index f5c8b8d..6c1c1dd 100644
--- a/homepage/redesign2018/css/cwsvJudo-2018.css
+++ b/homepage/redesign2018/css/cwsvJudo-2018.css
@@ -114,6 +114,10 @@ body{
width:100%;
}
+.valignMiddle{
+ vertical-align:middle;
+}
+
/* Bilder in voller Breite */
.bigPicture{
width: 100%;
diff --git a/homepage/redesign2018/markdownExperiment/Makefile b/homepage/redesign2018/markdownExperiment/Makefile
index 5c514de..036456a 100644
--- a/homepage/redesign2018/markdownExperiment/Makefile
+++ b/homepage/redesign2018/markdownExperiment/Makefile
@@ -45,10 +45,10 @@ ampTest: $(ampFiles)
build/css/cwsvJudo.css: $(cssFiles)
mkdir -p $(dir $@)
-# cat $(cssFiles) > $@
+ cat $^ > $@
# cat $(cssFiles) | cleancss -o $@
# cat $^ | ./node_modules/.bin/csso -o $@
- cat $^ | csso -o $@
+# cat $^ | csso -o $@
build/%.php: src/md/%.md build/yaml/%.yaml pandocTemplate/cwsvJudo.html5.pandocTemplate
mkdir -p build
diff --git a/homepage/redesign2018/markdownExperiment/phpLib/cwsvJudo/wkKalender.php b/homepage/redesign2018/markdownExperiment/phpLib/cwsvJudo/wkKalender.php
index ba236c2..7231aac 100644
--- a/homepage/redesign2018/markdownExperiment/phpLib/cwsvJudo/wkKalender.php
+++ b/homepage/redesign2018/markdownExperiment/phpLib/cwsvJudo/wkKalender.php
@@ -250,6 +250,8 @@ function nicerAkList($akArray){
$ret = join(' und ', $both);
return $ret;
}
+
+
/// Wettkampfdaten als json-formatierte strukturierte Event-Daten
function wkArray2jsonSdEvent($wk){
return
@@ -303,6 +305,23 @@ function wkTableHtml(){
"".
"".
"
".$wk['Veranstaltung']."
".
+ wkBoxMediaGalleryHtml($wkGals);
+/*
+ if( !empty($wkGals) ){
+ foreach($wkGals as $wkGal){
+ // Für den Fall einer ampSeite müssen die imgTags angepasst werden
+ if( strpos( $_SERVER['ORIG_PATH_TRANSLATED'], "pages/amp" ) !== false ){
+ $siteData['mainContent'] .=
+ "
".( !empty($wkGal['teaserBildUrl'])?(""):"").("".$wkGal['typ']."galerie
")."";
+ }
+ else{
+ $siteData['mainContent'] .=
+ "
".( !empty($wkGal['teaserBildUrl'])?("
"):"").("".$wkGal['typ']."galerie
")."";
+ }
+ }
+ }
+*/
+ $siteData['mainContent'] .=
"
Veranstaltungsdaten
".
"
".
"".
@@ -476,4 +480,40 @@ $wkInfoBoxHtml = "";
return $wkInfoBoxHtml;
}
+
+function wkBoxMediaGalleryHtml($wkGals){
+if(empty($wkGals)) return "";
+$retHtml = "";
+
+$retHtml .= "
";
+
+ $retHtml .= "";
+}
+
+$retHtml .= "
"; // Ende galImgList
+
+return $retHtml;
+}
+
?>
diff --git a/homepage/redesign2018/markdownExperiment/src/css/cwsvJudo-2018-wkKalender.css b/homepage/redesign2018/markdownExperiment/src/css/cwsvJudo-2018-wkKalender.css
index 46d879c..dcf2ce0 100644
--- a/homepage/redesign2018/markdownExperiment/src/css/cwsvJudo-2018-wkKalender.css
+++ b/homepage/redesign2018/markdownExperiment/src/css/cwsvJudo-2018-wkKalender.css
@@ -794,3 +794,31 @@
}
}
*/
+
+/*
+ * Mit Text overlay-tes Bild
+*/
+
+.textoverlayedImage{
+ position: relative;
+ display: table;
+}
+.textoverlayedImage > img {
+ width: 100%;
+ height: auto;
+}
+.textoverlayedImage > div {
+ z-index: 99;
+ width: 70%;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%,-50%);
+}
+.textoverlayedImage > div > p{
+ text-align: center;
+ color: white;
+ font-weight: lighter;
+ line-height: 2;
+ padding: 0 10%;
+}
diff --git a/homepage/redesign2018/markdownExperiment/src/css/cwsvJudo-2018.css b/homepage/redesign2018/markdownExperiment/src/css/cwsvJudo-2018.css
index f997542..ebf4d44 100644
--- a/homepage/redesign2018/markdownExperiment/src/css/cwsvJudo-2018.css
+++ b/homepage/redesign2018/markdownExperiment/src/css/cwsvJudo-2018.css
@@ -38,13 +38,17 @@ html{
/*
* Body
*/
+
body{
background: #FFAE00;
font-family: arial, helvetica, sans-serif;
}
-/* Container für eine einzelne News */
+/*
+ * Container für eine einzelne News
+ */
+
.newsBox{
border: solid 1px #000000;
padding: 1vmin;
@@ -113,6 +117,9 @@ body{
.fullWidth{
width:100%;
}
+.valignMiddle{
+ vertical-align:middle;
+}
/* Bilder in voller Breite */
.bigPicture{
From 2b7ab02db49dafff3f3cfc7e1479347351284bf8 Mon Sep 17 00:00:00 2001
From: marko
Date: Tue, 6 Nov 2018 10:21:53 +0100
Subject: [PATCH 07/14] =?UTF-8?q?Gallerien=20in=20der=20Wettkampfeinzelans?=
=?UTF-8?q?icht,=20Makefile=20f=C3=BCr=20den=20ftpUpload=20einer=20Videoga?=
=?UTF-8?q?llerie=20und=20Userattribute=20im=20Wettkampfplaner?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Changes to be committed:
- Erweiterung der Wettkampfeinzelansicht um die (evtl. vorhandenen)
Galerien
- modified: phpLib/cwsvJudo/wkKalender.php
- modified: src/css/cwsvJudo-2018-mainNav.css
- modified: src/css/cwsvJudo-2018-wkKalender.css
- Makefile für das Hochladen einer Videogalerie
- new file: src/Makefiles/Makefile.ftpUpload
- Gehören mit zu den Gallerientemplates
- new file: src/galleryTemplates/indexHier.php
- new file: src/galleryTemplates/indexInArbeit.php
- Userattribute im Wettkampfplaner (war liegengeblieben)
- new file: wkParticipo/lib/wkParticipo-userAttribute.php
---
.../phpLib/cwsvJudo/wkKalender.php | 5 +-
.../src/Makefiles/Makefile.ftpUpload | 18 ++
.../src/css/cwsvJudo-2018-mainNav.css | 14 +-
.../src/css/cwsvJudo-2018-wkKalender.css | 13 ++
.../src/galleryTemplates/indexHier.php | 7 +
.../src/galleryTemplates/indexInArbeit.php | 20 ++
.../lib/wkParticipo-userAttribute.php | 180 ++++++++++++++++++
7 files changed, 246 insertions(+), 11 deletions(-)
create mode 100644 homepage/redesign2018/markdownExperiment/src/Makefiles/Makefile.ftpUpload
create mode 100644 homepage/redesign2018/markdownExperiment/src/galleryTemplates/indexHier.php
create mode 100644 homepage/redesign2018/markdownExperiment/src/galleryTemplates/indexInArbeit.php
create mode 100644 homepage/redesign2018/markdownExperiment/wkParticipo/lib/wkParticipo-userAttribute.php
diff --git a/homepage/redesign2018/markdownExperiment/phpLib/cwsvJudo/wkKalender.php b/homepage/redesign2018/markdownExperiment/phpLib/cwsvJudo/wkKalender.php
index 7231aac..7437f24 100644
--- a/homepage/redesign2018/markdownExperiment/phpLib/cwsvJudo/wkKalender.php
+++ b/homepage/redesign2018/markdownExperiment/phpLib/cwsvJudo/wkKalender.php
@@ -485,7 +485,8 @@ function wkBoxMediaGalleryHtml($wkGals){
if(empty($wkGals)) return "";
$retHtml = "";
-$retHtml .= "";
+
+$retHtml .= "
";
foreach($wkGals as $wkGal){
$retHtml.=
@@ -511,7 +512,7 @@ foreach($wkGals as $wkGal){
$retHtml .= "";
}
-$retHtml .= "
"; // Ende galImgList
+$retHtml .= "
"; // Ende wkBoxMediaGallery
return $retHtml;
}
diff --git a/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefile.ftpUpload b/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefile.ftpUpload
new file mode 100644
index 0000000..9a08228
--- /dev/null
+++ b/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefile.ftpUpload
@@ -0,0 +1,18 @@
+include Makefile.cfg
+
+ftpServer = ftpupload.net
+ftpUser = unaux_22935783
+ftpPassword = eeloor0D
+
+ftpPathBase = /htdocs/videoalben/videoalben.2018
+
+vidGalIndexPhp = /d/temp/cwsvJudo/homepage/redesign2018/markdownExperiment/src/galleryTemplates/indexHier.php
+
+
+.PHONY: all
+all:
+
+.PHONY: ftpUpload
+ftpUpload:
+ lftp -e 'set net:limit-rate 25600; mkdir -f $(ftpPathBase)/$(VID_GAL_DIR); mkdir -f $(ftpPathBase)/$(VID_GAL_DIR)/thumbnails; mkdir -f $(ftpPathBase)/$(VID_GAL_DIR)/webm; put $(vidGalIndexPhp) -o $(ftpPathBase)/$(VID_GAL_DIR)/index.php; put videos/config.inc.php -o $(ftpPathBase)/$(VID_GAL_DIR)/config.inc.php; mirror -R --ignore-time videos/thumbnails $(ftpPathBase)/$(VID_GAL_DIR)/thumbnails; mirror -R --ignore-time videos/webm $(ftpPathBase)/$(VID_GAL_DIR)/webm;quit' -u $(ftpUser),$(ftpPassword) ftp://$(ftpServer)
+
diff --git a/homepage/redesign2018/markdownExperiment/src/css/cwsvJudo-2018-mainNav.css b/homepage/redesign2018/markdownExperiment/src/css/cwsvJudo-2018-mainNav.css
index d8e70e2..a927b90 100644
--- a/homepage/redesign2018/markdownExperiment/src/css/cwsvJudo-2018-mainNav.css
+++ b/homepage/redesign2018/markdownExperiment/src/css/cwsvJudo-2018-mainNav.css
@@ -2,8 +2,8 @@
display: flex;
flex-direction: column;
align-items: stretch;
+ justify-content: space-between;
font-family: 'Orbitron-Medium', sans-serif;
-/* line-height: 1.6;*/
margin: .5em 0;
padding: 0;
border: 1px solid #a2a2a2;
@@ -45,20 +45,16 @@
}
-
-
-/* =================================
- Media Queries
-==================================== */
-
-
+/*
+ * Media Queries
+*/
@media (min-width: 640px) {
#mainNav {
display: flex;
flex-direction: row;
- align-items: flex-end;
+/* align-items: flex-end;*/
}
#mainNav > a{
padding: .5em .5em;
diff --git a/homepage/redesign2018/markdownExperiment/src/css/cwsvJudo-2018-wkKalender.css b/homepage/redesign2018/markdownExperiment/src/css/cwsvJudo-2018-wkKalender.css
index dcf2ce0..c75e16c 100644
--- a/homepage/redesign2018/markdownExperiment/src/css/cwsvJudo-2018-wkKalender.css
+++ b/homepage/redesign2018/markdownExperiment/src/css/cwsvJudo-2018-wkKalender.css
@@ -822,3 +822,16 @@
line-height: 2;
padding: 0 10%;
}
+
+/*
+ * Die Galerie der Galerien in der wkInfoBox
+*/
+.wkBoxMediaGallery{
+ display: flex;
+ flex-flow: row wrap;
+ justify-content: space-around;
+ align-items: center;
+}
+.wkBoxMediaGallery > *{
+ flex-basis:50%;
+}
diff --git a/homepage/redesign2018/markdownExperiment/src/galleryTemplates/indexHier.php b/homepage/redesign2018/markdownExperiment/src/galleryTemplates/indexHier.php
new file mode 100644
index 0000000..b9813ff
--- /dev/null
+++ b/homepage/redesign2018/markdownExperiment/src/galleryTemplates/indexHier.php
@@ -0,0 +1,7 @@
+" : $wkName;
+
+ include_once( $_SERVER['DOCUMENT_ROOT']."/ressourcen/phpLib/videoGallery/videoGallery.tmpl.php" );
+?>
diff --git a/homepage/redesign2018/markdownExperiment/src/galleryTemplates/indexInArbeit.php b/homepage/redesign2018/markdownExperiment/src/galleryTemplates/indexInArbeit.php
new file mode 100644
index 0000000..ca8c976
--- /dev/null
+++ b/homepage/redesign2018/markdownExperiment/src/galleryTemplates/indexInArbeit.php
@@ -0,0 +1,20 @@
+
+
+
+
+ In Arbeit
+
+
+
+
+ Die Videos des Wettkampfes sind momentan noch in Vorbereitung. Einfach später noch mal probieren.
+
+ Wer ganz ungeduldig ist, kann ja schon mal kiebitzen.
+
+
diff --git a/homepage/redesign2018/markdownExperiment/wkParticipo/lib/wkParticipo-userAttribute.php b/homepage/redesign2018/markdownExperiment/wkParticipo/lib/wkParticipo-userAttribute.php
new file mode 100644
index 0000000..a9da008
--- /dev/null
+++ b/homepage/redesign2018/markdownExperiment/wkParticipo/lib/wkParticipo-userAttribute.php
@@ -0,0 +1,180 @@
+ "ISO-8859-1", "outCharset" => "UTF-8" ) ){
+//echo("Doing ".$aQueryString);
+var_dump($aBindArray);
+if( empty($someOptions['dbCharset']) ) $someOptions['dbCharset'] = "ISO-8859-1";
+if( empty($someOptions['outCharset']) ) $someOptions['outCharset'] = "UTF-8";
+/// @toDo: Bisher wird nur die Rückgabe konvertiert. Eigentlich muss
+/// doch auch die Eingabe konvertiert werden. Aber das jetzt
+/// umzustellen wird schwer! Die User m Wettkampfplaner sind ja z.B.
+/// als UTF8 in latin1(?) gespeichert.
+ try{
+ $pdoStatement = $aDbConnection->prepare( $aQueryString );
+ foreach( $aBindArray as $bindName => $bind ){
+ $pdoStatement->bindValue(
+ $bindName,
+ $bind['value'],
+ (isset($bind['data_type'])?$bind['data_type']:PDO::PARAM_STR)
+ );
+ }
+ $pdoStatement->execute();
+ $ret = $pdoStatement->fetchAll(PDO::FETCH_ASSOC);
+ }
+ catch(PDOException $db_error){
+ print "Error!: " . $db_error->getMessage() . "
";
+ return null;
+ }
+ //var_dump($ret);
+// Zeichensatzkonvertierung
+ if( is_array($ret) ){
+ foreach($ret as &$entry){
+ array_walk(
+ $entry,
+ function (&$value, $key, $someOptions) {
+ $value = iconv($someOptions['dbCharset'], $someOptions['outCharset'], $value);
+ },
+ $someOptions
+ );
+ }
+ }
+return $ret;
+}
+
+function array2htmlTableString($anArray){
+$ret = "";
+ if( !is_array($anArray) )
+ return "";
+ $ret .= "";
+ foreach($anArray as $row){
+ if( !is_array($anArray) )
+ continue;
+ $ret .= "";
+ foreach( $row as $entry )
+ $ret .= "| ".$entry." | ";
+ $ret .= "
";
+ }
+ $ret .= "
";
+return $ret;
+}
+
+function giveUserAnUserAttribute($aDbConnection, $anUserId, $anAttributeId){
+echo("Entering giveUserAnUserAttribute!");
+ try{
+ dbQuery(
+ $aDbConnection,
+ "INSERT INTO `wkParticipo_user<=>userAttributes` (userId, attributeId) VALUES (:userId, :attributeId);",
+ array(
+ ':userId' => array('value'=>$anUserId, 'data_type'=>PDO::PARAM_INT),
+ ':attributeId'=>array('value'=>$anAttributeId, 'data_type'=>PDO::PARAM_INT)
+ )
+ );
+ }
+ catch(PDOException $db_error){
+ print "Error!: " . $db_error->getMessage() . "
";
+ }
+return;
+}
+
+#exit();
+
+var_dump($_GET);
+
+$actions = ["giveUserAnUserAttribute"];
+
+
+$dbConn = getCwsvJudoDbConn();
+$dbConn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
+
+if(isset($_GET['action'])){
+ switch($_GET['action']){
+ case "giveUserAnUserAttribute":
+ //echo("Doing giveUserAnUserAttribute!");
+ try{
+ giveUserAnUserAttribute($dbConn, intval($_GET['userIdToGetAttribute']), intval($_GET['attributeIdToGet']));
+ }
+ catch(Exception $e){
+ print("UPS: ".$e->getMessage());
+ }
+ break;
+ default:
+ echo("Ungültige Aktion erwünscht!");
+ break;
+ }
+}
+
+$users =
+ dbQuery(
+ $dbConn,
+ "SELECT * FROM cwsvjudo.wkParticipo_Users;"
+ );
+
+$userAttributes =
+ dbQuery(
+ $dbConn,
+ "SELECT * FROM cwsvjudo.wkParticipo_userAttributes;"
+ );
+
+
+?>
+
+
+
+
+
+ Attribute
+
+ userAttributes` WHERE wkParticipo_Users.id = `wkParticipo_user<=>userAttributes`.userId AND `wkParticipo_user<=>userAttributes`.attributeId=:attributeId;",
+ array(":attributeId"=>array('value'=>$userAttribute['id'], 'data_type'=>PDO::PARAM_INT))
+ );
+ echo( "".$userAttribute['name']."
".array2htmlTableString($attributedUsers) );
+ }
+ ?>
+
+ User
+
+
+
From 93f4371093d33d7a91268849052764769780c0d8 Mon Sep 17 00:00:00 2001
From: marko
Date: Mon, 12 Nov 2018 09:29:37 +0100
Subject: [PATCH 08/14] =?UTF-8?q?-=20Das=20die=20cssKomprimierung=20wieder?=
=?UTF-8?q?=20aktiviert=20=09modified:=20=20=20Makefile=20-=20Ein=20Makefi?=
=?UTF-8?q?le=20zum=20Upload=20einer=20VideoGalerie=20auf=20eine=20ftpServ?=
=?UTF-8?q?er=20=09modified:=20=20=20src/Makefiles/Makefile.ftpUpload=20-?=
=?UTF-8?q?=20Starte=20"ohne=20Teilnahme"=20werden=20nicht=20mehr=20in=20d?=
=?UTF-8?q?er=20Gesamptanzahl=20ber=C3=BCcksichtigt=20=09modified:=20=20?=
=?UTF-8?q?=20wkParticipo/admin/showEvent.php=20=09modified:=20=20=20wkPar?=
=?UTF-8?q?ticipo/showWkEvent.php?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../redesign2018/markdownExperiment/Makefile | 4 ++--
.../src/Makefiles/Makefile.ftpUpload | 6 ++++--
.../wkParticipo/admin/showEvent.php | 20 ++++++++++++++++---
.../wkParticipo/showWkEvent.php | 15 ++++++++------
4 files changed, 32 insertions(+), 13 deletions(-)
diff --git a/homepage/redesign2018/markdownExperiment/Makefile b/homepage/redesign2018/markdownExperiment/Makefile
index 036456a..00be903 100644
--- a/homepage/redesign2018/markdownExperiment/Makefile
+++ b/homepage/redesign2018/markdownExperiment/Makefile
@@ -45,10 +45,10 @@ ampTest: $(ampFiles)
build/css/cwsvJudo.css: $(cssFiles)
mkdir -p $(dir $@)
- cat $^ > $@
+# cat $^ > $@
# cat $(cssFiles) | cleancss -o $@
# cat $^ | ./node_modules/.bin/csso -o $@
-# cat $^ | csso -o $@
+ cat $^ | csso -o $@
build/%.php: src/md/%.md build/yaml/%.yaml pandocTemplate/cwsvJudo.html5.pandocTemplate
mkdir -p build
diff --git a/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefile.ftpUpload b/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefile.ftpUpload
index 9a08228..34bc487 100644
--- a/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefile.ftpUpload
+++ b/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefile.ftpUpload
@@ -7,12 +7,14 @@ ftpPassword = eeloor0D
ftpPathBase = /htdocs/videoalben/videoalben.2018
vidGalIndexPhp = /d/temp/cwsvJudo/homepage/redesign2018/markdownExperiment/src/galleryTemplates/indexHier.php
-
+dryRun = --dry-run
+timeHandling= --only-newer
.PHONY: all
all:
.PHONY: ftpUpload
ftpUpload:
- lftp -e 'set net:limit-rate 25600; mkdir -f $(ftpPathBase)/$(VID_GAL_DIR); mkdir -f $(ftpPathBase)/$(VID_GAL_DIR)/thumbnails; mkdir -f $(ftpPathBase)/$(VID_GAL_DIR)/webm; put $(vidGalIndexPhp) -o $(ftpPathBase)/$(VID_GAL_DIR)/index.php; put videos/config.inc.php -o $(ftpPathBase)/$(VID_GAL_DIR)/config.inc.php; mirror -R --ignore-time videos/thumbnails $(ftpPathBase)/$(VID_GAL_DIR)/thumbnails; mirror -R --ignore-time videos/webm $(ftpPathBase)/$(VID_GAL_DIR)/webm;quit' -u $(ftpUser),$(ftpPassword) ftp://$(ftpServer)
+ lftp -e 'set net:limit-rate 25600; mkdir -f $(ftpPathBase)/$(VID_GAL_DIR); mkdir -f $(ftpPathBase)/$(VID_GAL_DIR)/thumbnails; mkdir -f $(ftpPathBase)/$(VID_GAL_DIR)/webm; put $(vidGalIndexPhp) -o $(ftpPathBase)/$(VID_GAL_DIR)/index.php; put videos/config.inc.php -o $(ftpPathBase)/$(VID_GAL_DIR)/config.inc.php; mirror $(dryRun) $(timeHandling) -R videos/thumbnails $(ftpPathBase)/$(VID_GAL_DIR)/thumbnails; mirror $(dryRun) $(timeHandling) -R videos/webm $(ftpPathBase)/$(VID_GAL_DIR)/webm; quit; ' \
+ -u $(ftpUser),$(ftpPassword) ftp://$(ftpServer)
diff --git a/homepage/redesign2018/markdownExperiment/wkParticipo/admin/showEvent.php b/homepage/redesign2018/markdownExperiment/wkParticipo/admin/showEvent.php
index 150a3c2..37c2f19 100644
--- a/homepage/redesign2018/markdownExperiment/wkParticipo/admin/showEvent.php
+++ b/homepage/redesign2018/markdownExperiment/wkParticipo/admin/showEvent.php
@@ -169,10 +169,24 @@
");
+ echo("| Name | Vorname | Masse | Platz | starterId | fahrtId |
");
+
+ foreach( $starterData as $starter ){
+ if($starter['type'] != $typeKey) continue;
+ echo("");
+ $userData = getUserData($mysqli, $starter['userId']);
+ echo("| ".mb_convert_encoding($userData['name'], 'UTF-8', 'ISO-8859-1')." | ");
+ echo("".mb_convert_encoding($userData['vorname'], 'UTF-8', 'ISO-8859-1')." | ");
+ echo("".$starter['masse']." | ");
+ echo("".$starter['platz']." | ");
+ echo("".$starter['id']." | ");
+ echo("".$starter['fahrtId']." | ");
+ echo("
");
+ }
+ echo("");
}
-?>
-
-Einschreibungen:
-
-
Eingeschrieben:
- Noch hat sich niemand für diesen Wettkampf gemeldet!
+ Noch will niemand zu diesem Wettkampf!
-
+
From e808faf8eb50a619da40bc9a27df2393ffc94040 Mon Sep 17 00:00:00 2001
From: marko
Date: Tue, 13 Nov 2018 14:28:18 +0100
Subject: [PATCH 09/14] Changes to be committed:
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- Starkes Komprimieren von png
new file: src/Makefiles/Makefile.pngCompress
- Dynamische Bitrate, damit eine max. Dateigröße von 10MB eingehalten wird
modified: src/Makefiles/Makefile.vidstabTest
new file: src/galleryHelper/getVideoDuration.py
new file: src/galleryHelper/getVideoDurationJson.py
---
.../src/Makefiles/Makefile.pngCompress | 11 +++
.../src/Makefiles/Makefile.vidstabTest | 78 ++++++++++++++-----
.../src/galleryHelper/getVideoDuration.py | 18 +++++
.../src/galleryHelper/getVideoDurationJson.py | 68 ++++++++++++++++
4 files changed, 154 insertions(+), 21 deletions(-)
create mode 100644 homepage/redesign2018/markdownExperiment/src/Makefiles/Makefile.pngCompress
create mode 100644 homepage/redesign2018/markdownExperiment/src/galleryHelper/getVideoDuration.py
create mode 100644 homepage/redesign2018/markdownExperiment/src/galleryHelper/getVideoDurationJson.py
diff --git a/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefile.pngCompress b/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefile.pngCompress
new file mode 100644
index 0000000..13d6fd3
--- /dev/null
+++ b/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefile.pngCompress
@@ -0,0 +1,11 @@
+pngCompressed/%.png: %.png
+ mkdir -p pngCompressed
+ pngquant --speed 1 --force --output $@ $^
+ zopflipng -y --iterations=500 --filters=01234mepb --lossy_8bit --lossy_transparent $@ $@
+
+pngCompressed/%.png: %.jpg
+ mkdir -p pngCompressed
+ convert $^ $(patsubst %.jpg,%.png,$^)
+ pngquant --speed 1 --force --output $@ $^
+ zopflipng -y --iterations=500 --filters=01234mepb --lossy_8bit --lossy_transparent $@ $@
+ rm -f $(patsubst %.jpg,%.png,$^)
diff --git a/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefile.vidstabTest b/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefile.vidstabTest
index 2da1067..a81df43 100644
--- a/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefile.vidstabTest
+++ b/homepage/redesign2018/markdownExperiment/src/Makefiles/Makefile.vidstabTest
@@ -1,18 +1,42 @@
FFMPEG = /c/proggis/media/editoren/ffmpeg-4.0.2-win64-static/bin/ffmpeg.exe
GUETZLI = /d/projekte/tests/guetzli.git/bin/Release/guetzli.exe
-VID_CODEC_HEIGHT = 360
-VID_CODEC_BITRATE = 500k
-VID_CODEC = libvpx-vp9
+#DEFAULT_FFMPEG = ffmpeg
+DEFAULT_FFMPEG = /c/proggis/media/editoren/ffmpeg-4.0.2-win64-static/bin/ffmpeg.exe
+
+# Für eine schnelle Komprimierung libvpx, sonst vp9
+DEFAULT_VID_CODEC_HEIGHT = 360
+DEFAULT_VID_CODEC_WIDTH = -2
+DEFAULT_VID_CODEC_BITRATE = 500k
+DEFAULT_VID_CODEC = libvpx-vp9
+
+# Standardwerte auf die benutzen Variablen schreiben, falls diese noch
+# nicht (z.B. aus dem Terminal heraus oder über ein IncludeCfgFile)
+# gesetzt worden sind
+VID_CODEC_BITRATE := $(if $(VID_CODEC_BITRATE),$(VID_CODEC_BITRATE),$(DEFAULT_VID_CODEC_BITRATE))
+VID_CODEC_HEIGHT := $(if $(VID_CODEC_HEIGHT),$(VID_CODEC_HEIGHT),$(DEFAULT_VID_CODEC_HEIGHT))
+VID_CODEC_WIDTH := $(if $(VID_CODEC_WIDTH),$(VID_CODEC_WIDTH),$(DEFAULT_VID_CODEC_WIDTH))
+VID_CODEC := $(if $(VID_CODEC),$(VID_CODEC),$(DEFAULT_VID_CODEC))
-sourceVideos = $(wildcard videos/.forCompressing/*.video)
+targetSourceDir = videos/aufnahmen/
+sourceVideos = $(wildcard videos/.forCompressing/*.video)
+
vidstabLogs = $(addsuffix .trf, $(basename $(sourceVideos)))
-firstPassLogs = $(addsuffix .firstPassLog, $(basename $(sourceVideos)))
+firstPassLogs = $(addsuffix .firstPassLog-0.log, $(basename $(sourceVideos)))
webmVideos = $(addprefix videos/webm/, $(addsuffix .webm, $(basename $(notdir $(sourceVideos)))))
jpegThumbs = $(addprefix videos/thumbnails/, $(addsuffix .jpg, $(basename $(notdir $(sourceVideos)))))
+# das result= fehlt absichtlich
+ffmpegVideoFilterVidstabDetect = vidstabdetect=shakiness=10:accuracy=15
+# das input= fehlt absichtlich
+ffmpegVideoFilterVidstabTransform = vidstabtransform=optzoom=2:interpol=bicubic:smoothing=30
+
+ffmpegVideoScaleFilter = scale=$(VID_CODEC_WIDTH):$(VID_CODEC_HEIGHT):sws_flags=lanczos,
+ffmpegVideoFilterDeinterlace = yadif,
+ffmpegVideoFilterDenoise = hqdn3d,
+
.SECONDARY: $(vidstabLogs) $(firstPassLogs)
@@ -29,31 +53,45 @@ clean:
.PHONY: thumbnails
thumbnails: $(jpegThumbs)
+.PHONY: echo
+echo:
+ @echo $(webmVideos)
+ @echo $(firstPassLogs)
+ @echo $(targetSourceDir)
+
+
# Erzeugen der Targets
.PHONY: targets
targets:
- for file in videos/aufnahmen/papaRomy/*.webm;\
+ mkdir -p videos/.forCompressing
+# for file in videos/aufnahmen/papaRomy/*.webm;\
+# do \
+# checkSum=$$(sha512sum $${file});\
+# ln -f $${file} videos/.forCompressing/$${checkSum%%\ *}.video;\
+# done;
+ for file in $(targetSourceDir)/*.*;\
do \
checkSum=$$(sha512sum $${file});\
ln -f $${file} videos/.forCompressing/$${checkSum%%\ *}.video;\
done;
-videos/.forCompressing/%.trf: videos/.forCompressing/%.video
# Die Stabilisierungsberechnung:
# eventuell sollte hier die Skalierung vorgeschaltet werden...
+videos/.forCompressing/%.trf: videos/.forCompressing/%.video
$(FFMPEG) -i $^ \
- -filter:v vidstabdetect=result="$@" \
+ -filter:v $(ffmpegVideoFilterDeinterlace)$(ffmpegVideoFilterDenoise)$(ffmpegVideoFilterVidstabDetect):result="$@" \
-f null \
-
-videos/.forCompressing/%.log: videos/.forCompressing/%.video videos/.forCompressing/%.trf
+videos/.forCompressing/%.firstPassLog-0.log: videos/.forCompressing/%.video videos/.forCompressing/%.trf
+# -b:v $(VID_CODEC_BITRATE) \
# First Pass
$(FFMPEG) -i $< \
- -filter:v vidstabtransform=smoothing=30:input="$(basename $<).trf",nlmeans=s=6:p=5:r=7,scale=-2:$(VID_CODEC_HEIGHT):sws_flags=sinc,unsharp=5:5:0.8:3:3:0.4 \
+ -filter:v $(ffmpegVideoFilterDeinterlace)$(ffmpegVideoFilterDenoise)$(ffmpegVideoFilterVidstabTransform):input="$(basename $<).trf",nlmeans=s=6:p=5:r=7,$(ffmpegVideoScaleFilter)unsharp=5:5:0.8:3:3:0.4 \
-codec:v $(VID_CODEC) \
-pass 1 \
-passlogfile "$(basename $<).firstPassLog" \
- -b:v $(VID_CODEC_BITRATE) \
+ -aspect 16:9 \
-threads 1 \
-speed 4 \
-tile-columns 0 \
@@ -68,16 +106,19 @@ videos/.forCompressing/%.log: videos/.forCompressing/%.video videos/.forCompress
# target und dependencies müssen noch angepasst werden
# Die erste Abhängigkeit muss das quellVideo sein!
-videos/webm/%.webm: videos/.forCompressing/%.video videos/.forCompressing/%.trf videos/.forCompressing/%.log
+videos/webm/%.webm: videos/.forCompressing/%.video videos/.forCompressing/%.trf videos/.forCompressing/%.firstPassLog-0.log
mkdir -p videos/webm
+
+# -b:v $(VID_CODEC_BITRATE) \
# Second Pass
$(FFMPEG) -i $< \
- -filter:v vidstabtransform=smoothing=30:input="$(basename $<).trf",nlmeans=s=6:p=5:r=7,scale=-2:$(VID_CODEC_HEIGHT),unsharp=5:5:0.8:3:3:0.4 \
+ -filter:v $(ffmpegVideoFilterDeinterlace)$(ffmpegVideoFilterDenoise)$(ffmpegVideoFilterVidstabTransform):input="$(basename $<).trf",nlmeans=s=6:p=5:r=7,$(ffmpegVideoScaleFilter)unsharp=5:5:0.8:3:3:0.4 \
-codec:v $(VID_CODEC) \
-pass 2 \
-passlogfile "$(basename $<).firstPassLog" \
-deadline best \
- -b:v $(VID_CODEC_BITRATE) \
+ -b:v $(shell /d/temp/cwsvJudo/homepage/redesign2018/markdownExperiment/src/galleryHelper/getVideoDurationJson.py $<)k \
+ -aspect 16:9 \
-threads 1 \
-speed 0 \
-tile-columns 0 \
@@ -92,14 +133,9 @@ videos/webm/%.webm: videos/.forCompressing/%.video videos/.forCompressing/%.trf
videos/thumbnails/%.png: videos/.forCompressing/%.video
mkdir -p videos/thumbnails
-# $(FFMPEG) -i "$<" -vf "select=gt(scene\,0.4)" -frames:v 5 -vsync vfr -vf scale=-2:$(VID_CODEC_HEIGHT),fps=fps=1/600 "$@"
- $(FFMPEG) -i "$<" -vf thumbnail,scale=-2:$(VID_CODEC_HEIGHT) -frames:v 1 "$@"
+# $(FFMPEG) -i "$<" -vf "select=gt(scene\,0.4)" -frames:v 5 -vsync vfr -vf $(ffmpegVideoScaleFilter)fps=fps=1/600 "$@"
+ $(FFMPEG) -i "$<" -vf $(ffmpegVideoScaleFilter)thumbnail -frames:v 1 "$@"
videos/thumbnails/%.jpg: videos/thumbnails/%.png
$(GUETZLI) --quality 90 "$<" "$@"
-
-###
-
-#$(FFMPEG) -i %1 -map 0 -c copy -c:v libvpx-vp9 -pass 1 -passlogfile "%~dpn1.log" -b:v 150K -threads 1 -deadline good -cpu-used 4 -tile-columns 0 -frame-parallel 0 -auto-alt-ref 1 -lag-in-frames 24 -g 9600 -aq-mode 1 -sws_dither none -pix_fmt yuv420p10le -filter:v nlmeans=s=6:p=5:r=7,scale=w=428:h=240:force_original_aspect_ratio=decrease:sws_flags=area:sws_dither=none,crop=trunc(iw/2)*2:trunc(ih/2)*2:0:0 -an -f null NUL
-#$(FFMPEG) -i %1 -map 0 -c copy -c:v libvpx-vp9 -pass 2 -passlogfile "%~dpn1.log" -b:v 150K -threads 1 -deadline good -cpu-used 1 -tile-columns 0 -frame-parallel 0 -auto-alt-ref 1 -lag-in-frames 24 -g 9600 -aq-mode 1 -sws_dither none -pix_fmt yuv420p10le -filter:v nlmeans=s=6:p=5:r=7,scale=w=428:h=240:force_original_aspect_ratio=decrease:sws_flags=area:sws_dither=none,crop=trunc(iw/2)*2:trunc(ih/2)*2:0:0 -c:a libopus -b:a 32k -ac 2 -f webm "%~dpn1.webm"
diff --git a/homepage/redesign2018/markdownExperiment/src/galleryHelper/getVideoDuration.py b/homepage/redesign2018/markdownExperiment/src/galleryHelper/getVideoDuration.py
new file mode 100644
index 0000000..1551fb6
--- /dev/null
+++ b/homepage/redesign2018/markdownExperiment/src/galleryHelper/getVideoDuration.py
@@ -0,0 +1,18 @@
+#!/usr/bin/env python3
+
+import sys
+import subprocess
+
+#ffprobe =
+
+def getLength(filename):
+ result = subprocess.Popen(
+ ["C:\\proggis\\media\\editoren\\ffmpeg-4.0.2-win64-static\\bin\\ffprobe.exe", filename],
+ stdout = subprocess.PIPE, stderr = subprocess.STDOUT)
+# print( result.stdout.readlines() )
+# for x in result.stdout.readlines():
+# print(x)
+ return [x for x in result.stdout.readlines() if b"Duration" in x]
+
+#print( str( getLength(sys.argv[1]) ) )
+getLength(sys.argv[1])
diff --git a/homepage/redesign2018/markdownExperiment/src/galleryHelper/getVideoDurationJson.py b/homepage/redesign2018/markdownExperiment/src/galleryHelper/getVideoDurationJson.py
new file mode 100644
index 0000000..62f417d
--- /dev/null
+++ b/homepage/redesign2018/markdownExperiment/src/galleryHelper/getVideoDurationJson.py
@@ -0,0 +1,68 @@
+#!/usr/bin/env python3
+
+#
+# Command line use of 'ffprobe':
+#
+# ffprobe -loglevel quiet -print_format json \
+# -show_format -show_streams \
+# video-file-name.mp4
+#
+# man ffprobe # for more information about ffprobe
+#
+
+import subprocess as sp
+import json
+import sys
+
+
+def probe(vid_file_path):
+ ''' Give a json from ffprobe command line
+
+ @vid_file_path : The absolute (full) path of the video file, string.
+ '''
+ if type(vid_file_path) != str:
+ raise Exception('Gvie ffprobe a full file path of the video')
+ return
+
+ command = ["ffprobe",
+ "-loglevel", "quiet",
+ "-print_format", "json",
+ "-show_format",
+ "-show_streams",
+ vid_file_path
+ ]
+
+ pipe = sp.Popen(command, stdout=sp.PIPE, stderr=sp.STDOUT)
+ out, err = pipe.communicate()
+ return json.loads(out)
+
+
+def duration(vid_file_path):
+ ''' Video's duration in seconds, return a float number
+ '''
+ _json = probe(vid_file_path)
+
+ if 'format' in _json:
+ if 'duration' in _json['format']:
+ return float(_json['format']['duration'])
+
+ if 'streams' in _json:
+ # commonly stream 0 is the video
+ for s in _json['streams']:
+ if 'duration' in s:
+ return float(s['duration'])
+
+ # if everything didn't happen,
+ # we got here because no single 'return' in the above happen.
+ raise Exception('I found no duration')
+ #return None
+
+
+if __name__ == "__main__":
+# video_file_path = "/tmp/tt1.mp4"
+ video_file_path = sys.argv[1]
+
+ durationInSec = duration(video_file_path)
+ rateInKbPerSec = (10 * 1024 * 1024 * 8)/( durationInSec * 1000 )
+ #print( duration(video_file_path) ) # 10.008
+ print( int(min(500, rateInKbPerSec)) )
From 0c2fc164de557d1e279e5579c9adbab03f22245d Mon Sep 17 00:00:00 2001
From: marko
Date: Tue, 20 Nov 2018 09:53:31 +0100
Subject: [PATCH 10/14] =?UTF-8?q?R=C3=A4ucherkerzenpokal=202018=20-=20Meld?=
=?UTF-8?q?ung?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- Meldelste/Anträge/Teilnehmer RKP
new file: "antr\303\244ge/2018-11-24_RKP_Schlettau_A.odt"
new file: "antr\303\244ge/2018-11-24_RKP_Schlettau_B.odt"
new file: meldelisten/meldeliste-rkp-2018-cwsv.xlsx
new file: teilnehmer/2018-11-24-RKP.fods
- vom Rudi Schulz noch liegen geblieben
new file: teilnehmer/2018-10-27-RudiSchulzII-StollbergErzgeb.fods
- aktuallisierte Liste (fehlen aber immer noch Geburtsdaten)
new file: ../teilnehmerListe.fods
---
.../anträge/2018-11-24_RKP_Schlettau_A.odt | Bin 0 -> 453562 bytes
.../anträge/2018-11-24_RKP_Schlettau_B.odt | Bin 0 -> 483948 bytes
.../meldelisten/meldeliste-rkp-2018-cwsv.xlsx | Bin 0 -> 11815 bytes
...18-10-27-RudiSchulzII-StollbergErzgeb.fods | 2642 +++++++++++++++
.../shiai.2018/teilnehmer/2018-11-24-RKP.fods | 2821 +++++++++++++++++
shiai/teilnehmerListe.fods | 2788 ++++++++++++++++
6 files changed, 8251 insertions(+)
create mode 100644 shiai/shiai.2018/anträge/2018-11-24_RKP_Schlettau_A.odt
create mode 100644 shiai/shiai.2018/anträge/2018-11-24_RKP_Schlettau_B.odt
create mode 100644 shiai/shiai.2018/meldelisten/meldeliste-rkp-2018-cwsv.xlsx
create mode 100644 shiai/shiai.2018/teilnehmer/2018-10-27-RudiSchulzII-StollbergErzgeb.fods
create mode 100644 shiai/shiai.2018/teilnehmer/2018-11-24-RKP.fods
create mode 100644 shiai/teilnehmerListe.fods
diff --git a/shiai/shiai.2018/anträge/2018-11-24_RKP_Schlettau_A.odt b/shiai/shiai.2018/anträge/2018-11-24_RKP_Schlettau_A.odt
new file mode 100644
index 0000000000000000000000000000000000000000..ea82a488aed875985ccc9d95073b25e205cc319e
GIT binary patch
literal 453562
zcmeFYc{r5e-#0wAkS$AyP_~qPFWV#$NfVWQ$!=^@*1<4E2qA=!eJx}gCXAUhmP(SH
zvCdesn-ODT@Jzqo@4oNny^s67pXYgx_n-GT-tXZ&=X+h(xqQy=bzbNBT~7B*85sEh
z02Tni${@(hu}6jd5&!`Bn`pNHeqcZMps>g8&W|7af?b`1zz~1M5PvrXh;tw~PyzDT
z-QNx38tmupAEXfE4h_2Ze`$Fnz2?(0qi4GB$2mTf6rmbDz)W@??+jT!5S4PH|+-`BLZU}A5+uQgd>F2o+Is44S_;Z}(Re+nx
zpFLe>0iH7BoQ9bv+J2(x+yn7}*jBnPhuiz^$`NiBPt0d-uG;YQTW2P`wOY?xK^|%c
zoQ;GZR_?nr6VBN!i%(_M4BcEc=p13^xAF!jXbxIhn(Cjm>PyVJBOlztr(R7haev_`
zWKK?U)(CE;i?3FnT7Q?sJ!NAmR$;0!|2SA-)ql;UD;k7dl2r~SIi7WsGM4_9>peT{
z;zV5QGeZovIrfnJk=j%8Kc3t7uI}vx`&K1?wuz}mHY!!=B-wP{dy_caq(+`d2Wve9
zcEw$JIJNWa>(>v(xuToz!|g#SFM9W0_%w24X1HRXwokQxsf28cbB$*`fEbY%uN*Vp
z{5@Wo>L>Rl;JsW|h<&DsBS>So1iN?Rh0#O%N4z6d+Mx8`6UUrC+cSvyi@9F`1^LfC
z5nqH-lLEegpPIT}KSO@uyf(;_EV=~aHnn7XCv0dr%*F@xoGlwS%I=1SUmP_UR~cX~
zF8U!J_aNr_rPQ~Z=p?Po-@B*m_ccDfF0RZHyk}i`SHU<#P}vOkDGOov@IziBhG**Z
z%cqw3^Iyp78Rtz9N_|-(oX)S$63)pv)UjL*IxXWFJMgooOkd;1D+_K%{YQ!6=W4bd
zu$A+NdmV1UlhcgqBd$jV1w>a|OZAV8w`W~RkqV6-1c+#(Hq!+JlK(Ls}wdL
zQp?q6{rxIkfEkoP7+yb-z9#R1d3at(BQNqm=hKQJf`6?pvgk;tpMF_={M_rBTc_{6
z%)fL~o9UK1oYiMSL;X;Dsy~Y9?r4>{?(|bLe$ZG=wDnUJNfC@^b;zZ2hj(Pvi|$_+
zvbw(c(E@b&OloZUp}%L{)c%{sGu?*zP?K?Ak0?7`_tbW?~)Do#sXV~uRBTnOJpg`c^_NaI(s-5~cDm2IOsGjnw>{n6~aIM+1m`h#B
z5>;b{SDqU=6~Pqad||&(=0%avtC9m5uURb}PuVv4X}49~MOb?lVwNbkW4)g@@~Z!i
zH>dN{!(s%Vli+vy*r)h~_U=DROuC_DVPM#|_CI@9>q+gx%tASH{wX_+xy2B}rfuP;1Olz3lp?t7%0gyhMUdZCL!QNcXa7e?;A_q-n7
zZxz*NhH70Bc+{J+&e4#8$eOyq<$dMdlhEGDxaW^=AZ?3SCd>;|or@7wnr5s@wmQZ}
z&c?AK(SpDE-tygR=1Ckfdth85rq$Y6{nk06hvAkN?c*qkbuqhoy(y-iyZQ6tIji<(
zrL(uje9tl{KKS^~=ws5^h2(qh(uA0b-M%EknF6%xn*Uh-^zMjVL?r}x=(+veMm&f9
zAr5of(U-E;p6Ux{yGbYN)qPb{+oXUTjM(j`O}
zNdJbjlM?jikSKXCM!ohP%S(0va9;Gx&8p5qKl)>!?VOq|_K^#kxGQm|F?}a-o^>dG
zlFIS`GFrhLrhjFE4p{Y+iLJD2_Mr|-LRzXbQ?QfrcYbz+0GqVMM)+sEsUkB*$&y!o
z><)ye@|0gY{2nNQ(-1d*#C|Q~e$K7Z?oW_M`kC}h7oBmt*Oo)Mg5JIqy%|L`Z6D?q
z_qZ7LKoaKVkNr~LR%{7+Set%Z=JLF%j3R4RJb5bSrx2+3Cu;aw`UY4g=4m_}iCEF>
z9UA~q_9Y&a{}R+%yyfZpOb#SaKltEo{Hc|wHju`as4H(Xm0QGJf$LQ0dFLj*8@8jC+wQQh!#&iv!be|`biZg$>Mbv>az4F|O#V3UBXe-B
z`nyQF1F6>%jMlpDTsL+hi1}gddLe`~{rH{+2lqQA#!ojnekCveP9g1`x=oIe+3~Ma
z_J3Uat?u+nNHOzEIY>#wTYUy)IcerksUvTF9UD^2ruyz){C#$vse5A-Ir&33Aul4X
zCCc}O3GRuD1*1-TPre{HE_fw=a8c$DQ;PMW)k|)FN{4^vA=ipj=#7=zUiVk^#BP7-
z!iTRtX;P>t0oEuS{2e!(?jT>x(uh>&_V_&7b;7wRowEI3|KBVpR
zrd3<#(Q{X{b4%=nbn*y<_kKe3FNs$o1Edb7)F%=wm1Ysv;gcqdhQAyIJf(-aEs;hc
zEh}PKJbO=>BHUtQrtCYp?(w05jD@2?H~9`8HUY1uwU%!x6dSpsF5S+@B#d?0f7Z)>!Yr04m@H5qTw`bQNb<-rv1NeUJ@S1FUg~#u22W!@{#9-)Tn*
ze(n)jS|0b@Hj)n#|MV=Ee)R4bPno?M2OyU9-6PSK9j91T%C+VH&}|2k+6$_1&U
z-qrcJ(PvB0Mn}A$BGH%0VrOp2v5N-eA0&>>c4%m%H%WGQ=WjuNePxI-R)ThwnP@#N
zmc286(fDd(9Ir$_NeC-#xZ=oKKEk}-T{y+vC{mC??D4$1(a|7mMEX2VU4dSpK)-w4
znC(9a{q66<&)zi&cbDlZ?VjYeuU^aAD1zssP+Y;BiQ!bfLPyQ>ZmL{%W}rSO1z10O
z%=TAJ%tt~tM*b>`vj3(g{#UvXJFS49vp?9wJupZiz|EsSqu)P9>CE$OomlrD6W0})
zm;z+JwR#tRQjfD{QryYqnMJ2$Selo;Un?A0_+X?umx9RKbUyzjsj;f_ftu@Osc*(!
z&8xCn?Fy~sQ(Cx*7Fn@e5t4UIdEu3|Q2#5}oU&r&HQ9X!no4A#xxaNlDDlqGt51yC
zdk`rstfI*`zCyYk6<^4~DPo^X9jFImD@pt87me-e&
zRrFNSyB1Sd@<_c_@YWQC@Us44wVm^ORm5jgXJMr#L;GPD7NN{>+dSYDWie9X%vzhm
zX5&bkgt(!3k+W9mZ3X+lCwtc~Cltl$6&p%Qd3hYhrDm;7uHPQRNmcds4jG*9ep5^e
zt4O{3?x2>5KCk#^{m#RklHv%lTf+xdif?^
z5*wTw8Fu6Gjn$OJXq8UzH>-0tPjVYB@0=DpDnf9Ds;9x-Is9mQ>+CABzU^Z%^iL%6
zpzC+t+oO+7@?Bo`TaoKA)8X=^`un5kxSO~n5?*e>eB{^K#}`nZO*AkkqPbQ4Yf0b(-3`}UH7E`<<_IDbwk{s@F)2y{F#{X^_{rw69-GhR_{+|DC
zlMp`gM9n#+5rVHUNak!j&vi2u)W)*2K4QrEo>wnSG%{8&;jG6TBfh&g+NYlv_S?j+
z(FwFn&sfZ%{r~id{l2UncIur=XPxP2YUU6t@!m~kF{kVU-R<4L)zrK>^ov0m&SL%q
zrF{DF%F~FR%WI5IzuvdNU=FvX>R8{qJX{Dm{k{U5Yy7m%sk-B>L*Eg4t7{rCYqeNDlt?!$*~lf!!>_lV{?QHs?|8`(9_&j=eW$CfLdYihc^RDz;9
zY1y#;aq;{sra*WxBU#%~|a9v*5lyah@A
zEHJ*keknX{o>!XkG3fpui&-gBRHM8gSU5(Ccv@v8)*Mk^@Hkcf!2Q8Zi7?3
z`&lnH1|zjg*TjN&7NSRQAl7gADC@2~E8O8ex!i?_FKg-d6E9QXOS28SXtBwXb@xw;
zl~_`^!;8w&*1at>RBhzOR(6N&*UORjnLb?@ITOYMSv(Ut(4UQ8`nmA13kRfYS~&c@
zx?^@;W76^z+;lk%IHwcs3|3l`^=D<^JLje*49?=Q7A&n(+rODN&YMBGw7!^FyAE?&Z5
zwiJTUjuY3Ft{RIQ?RaBxEhUuxi}J_aKWF^#mt8YTT--gn_$_%El8oPXTd4OkU#-fc
zGZu+|?S8RbSEv|-v%Z}l2Xeh^QE<*cm=tC(lv5r#C%@81U@SJ7`zFSuoY3%?4`R>GKH+;kT^iNp-;VDD{fnj7koWis?O$_{t+EhCEd
zmBKsXMQxXS>C?2|UkZM?D=qAn4>P@r_*$sH*7oYn#f|*@M|!4?kDfgeHxt2h>S|0|
zE5*5Md>p>1$S$KKq=VKh&dI~paz|ego}uq}RJ3KtV5H`*F#;)Zpf|t7X~yAs`OF)U
zw!XWbwL$)IxaZ#N{oW!qCgg1j?nj9<-hM^SM^sOHVAA~S%3Q9}@7wnjWb|%4C4S|1
z`F6FashV-HTK+(~`i*Eztw_M*z_P3MhJ2Ecn{7uh7MAiiC
zyT`BIAU+y%@u54{g{)Z3l%RBE$^VH|D%8X3t6sS?2dnTJp48D&-1QszR?gG4Y;k8l
zD)w3<@1m49AbRaMe3(zvN+q@jHEhU!fvWi?d=@5i1e6DN4O
z^M+8c2LNDVa^)ZXY!(0)9X)`iMgolQ0RU%cJR6MIo}fq|Z$_D9da$Uq}TMn)R`zw
z1tz+G&_9vUu4!E`oua91r`hNL4F7ya%m4ZKe|mTZKu<@5$H>6M#7L71UF2V3Fmf~T
zTvXOS#cS@&EdGQ~gMj@=>_%<3
z98pUWWdQ$w`hQ0T?`^ZnD_3wK#WmjJSvdd9vPlPT+pOX+6}!m^Fj>hYI4mqw=eZ>R
zPdh`&M&qt4?^SsK)y;oMCjch-k!E9{XQVdvAh^%2a{-co<|B^P@?>&ExSlE`i1Fbj
zW4TS_-XCnoAwr?GpVDu}4lgH{-J%Oo@dx^+ics}OgJpp3CxFSkUbqlSzPwiwL}I>=
zJ^{qS@p*^Ci*mq;
z*fgH1?)G3PIN8c>Slub!c5^US*jT)Qr0nB0xUE>pKUV97t1UGX{~L0mf8C@o^xXswQE2h!j)M$Dx8DSsawVxN?qUbKLCV>S^lo2_QOg<$fQ&Fk0vY@VvHQoG=XYCH6)~
z2}9F+a9`Es#jHt&wDrPHkzCsy`#mc}zM2wfoU>pUtYX_O+buqok9H+x%v)``65)7q
z0||5cs6kJPGTsw)dRTmH?*zc%0M2UBWB=H2GetfiQuXss$9#S}AI2=7ZG}VQoF!z#
z6X8y6`X7BWE!o@$1BNhlLMpDX3&??St)r)gk@VtS>nOjwXU`E!?7+Ffm!V1JP=viL&hYFK
z3W>Xm^b;-i^WmAXv$eHH(c8sH4fHxSCL=e&hjw03YNW^$z^2^-BtD8i-Uc(QP>Yb~
zGH4$y?6O5?I@g-Gma38Y*YPt9poTGDOJ&a>_gj|6mXp0WnP#*B@>}m__gTvJJe>V_
z24~eBX-9T%I(okw(I>);O`{+!C>if55ym8B(rzKAlPMqnWBK@mpjCDL@oh!O0vqJr
zx>mHlAKk~q6Tp!JDjhmyc2sf#aEIV{$$=3VoNCVr;2i8CDTbhsI==}qAeDEIm^Y6h
zYbbDRILYkPpy$x;jLK}Eed7q?kDM9mm4ls`u)bu#SGn@G(=(|Pw`G5Gkq0T+q=SKl
zflqVK#pqG))lkI;q`1Q6ufaa0wrk;r{bS8_=r<7ci7f=jy@84qoMmd&8t)(T6F}*8
z_kst?^-$E@LT?<#4>;-b`3cM~p4|MA(%@6!)8>Foq|FgXJkID@kvzIGKy6da)+bJQi`?eAFhcpQFS$E1Wphmf};Xm**_3B#_pv=C$S4_1ZV7Kr2k5!;AbP|rB`3~&NL
z3KT&MPC4Cr{Hi>8LpcH5QTsCl7*bW&?}WpWpHpI-NfFq&rt#>gOHeU#=uopFCzik^
zNcATju9EuP{leQ`XIYB!3oUe)*_Ab{YG&022g(Hwgau@go2+$nvi27T&Uqi}9OV}O
zj8dQ~A7N_XUi(cWyHgHu{D%$_CxmZ`l5q#a7V!?9Uj+XgNl3an|FPg3Xt&+RPvzHL
zL|f+O_9B$*z17Am
zit!)h_QU|*QPQNS>iMh9$+u@`{4b>*^I-VA1H2oojnn1Jhpkte+Fe3Yn9^$X{S@J^
zHh1(0bzix-qNbgikzIwn-sHK{KzBRHnUyiCajkpxXbh&IeQ=M>vcNLFD@q+T;)?=;
zAOFOGSdqrW45dk(6F_^)uRSz|CyMcS=*jVq0%gi?;zH*MfG+A1>;Z9;Hf;w4eQYHQ
z*>q&zmE%GT5^m`G)zY4`om{W3g8nuhlk7;{l!4R*&7HA@#)BG(dmo2!CK88{nZ(~0l(*AO
zc(jhL)FtY19*;X-rc{!IO^N)~hw@Z7#mBvB%DW%1fN^H7~g*_%>C(0m~_^`)Z{#jcX_3yT!6eLX9P
zj#R%OWIua(tl7`js@^VQ{cyM#8UTINB9vdF=O%OB#Y0MJ_|fjI)%>%6I!M}Pl(fTh
z#{*G%qf}*5Q?Jumov;On0C=qJ(u*i{Z!qBn^|C^7#mue9C-^DTq!*SGIB;9!R{5ft
z)KW=Dw90Bz8N?@Sz7Ym&7V{>FmeO_~-}G^Un$D|y
zY-nSz)`QJ6LY8&=xxb5z6vNWd+?(sE{qf&_yZ$<6T|WWvz|4ttolzGk9e6Wfrx^F1
z!{rYsb9|(NiDR#6n`X9&SA*m}G61J`;BDie`*z%l2lq9IJoIJfdKXoS=t(Xi^>&{C
zCh``t6Pr0;eWZAN-E;H>Fmm?d&!CB*bL>M5)vGS-mN)~p7Bv)`gBJ~U<{&UEf*4?HBA0SfxLt135
z<5B6MjX%5*@kQan2;#`G8*&0@{)Osj&e&9*!fCWRv~VBr8b_8yyucn0K8Ni5(73oKEbnTBubKky@4V+W)^v8X{1v!y0QldJ}VnAdFZ}Y^sUDj
zbh?9d#MPqqkLhFA^hS<~&{{BqqZ||~ks1FGlL%A(K)pvvf`~nD7Na%H=Vo@PGfFfA
zYl1h^?wZvmDHQrW;k`WsB3NIFzU)6HlXb4LqhRr~ONU&W`XA2T6?Lf7CdWc*5|B$z
zwC=?*J5>{u7$u+7g+7mHBeoV;m+J|)Vc0&*;>vijlH=9hCA0jT7PF>H9R=5FH!9+s
zz7OzH^(g)G5O!~jAeD(WcO;uA`E`_tJ9$0vpTkoVAEkB{T!M3{HF=Nay5~|&$D@
zXDm$JhDwJdq6zb5JodJT1o^rlxZnxEYdbOExEp{H
z_Q5dgs1tykl%|JcQEJd1y`AA_k@3F1+a-frAGQ%@DiKHiYY`N2Q`3lTZm^eYi>3gt
z>~}KpoBW)Z{`jIMl~4Qg34l8o^8(m7R#2ccxa+09X*>0~jkCl9`E!9d&|O`~4Yf8T
zd{k%rQF9@0Qz)oq-E&zzjX0go(KKV!e-KJ+|BRL-0-wTE@lFDi^#_z}f*F5jZLrgM
z9}SH*|I)fU{+>CPJ~lOl8l$SD5+~0s6?mGurH57IFQ)a&MUOSinH$1Dhj2C>jZxa~5j83WUcw|GRnY9)D%eQpa`j9wxiJ;6!ZB*EK!?V^5}h
z3~S?ZQ_`jK`@4p*=aqZIHzX$DUIVE@P8+Ml4Vb|wRlSDte&7&p^7C#^alf-)u&{UZ
z>hYA^!OKCc2tpZWQuwAxyDL!-R)<*Cdac!yS>a9oIXh*ymK#}6%7iX=4K82PAkNwK
z2J&eh`0bicukKf+zwh&Vaz3DIZSc$cZ`Y|;kLuNcQ$A+I!nmcQA{|#^wId}Wc)>Wi
zJRAEuWe$WS>5PTH&6Uq;0uw+SV9oIs<<;cc7ko30`gzui9d5Z-D}im;tLN6|7#Q@h
zm&EcFp29})PBpPel~;UnHT|l}^dS~VG>1eVi$`|?o1&y)
z;-u`jCDg^jBgIa#)^bDjmul&oyxqJM=`+N%HtorWqfxtP^TX>fMf6bv#!D;_eX4#;
z5vA*Ss7}=wQrqU7G4$cAE~BY!XO6|~x(Uff-wq&6#%k@-!)i0UcUz-5_DlTK749#!
z9O~5C9&E52>7hu{g|2wJI)Q1aZ>yG3Vuf89MF|{)Rq{cgclw3+{t17>My1JRzqy``
zKu7aK9V+Z6&})Ff5&9eJNSo8KLG3^uZ#^MXh~OkR%PRaiF1R8;OuD=R?!Ja3*{}Ml
zOCo>U8t41hY+vx|L{6Uo#4tUzUhqz}JubmDl>q`=0P}25EN1@(fe$&dr^r1AZG*&^
zPn$XGwq3WNYzK{h&xT=UGI=3;F_(%#d|N0g{2F+MJc
z>s`=gX^SjkTs
zDy5Nylw}-mg9V<|e3zQ0Cr>FPHy^$6guHB9&ym`E{5a)?k{ESH`*Us&;`Wh5v)Gd#T;y7#TcRRPu#ZC
z)7}Ta;tQ<{hOc9OQk5ei?`Iu!m-fkpFFq(xZ$$OEL)_i{cs>oz#wiK3F}d#1)2x!C
z+$g1}Axn&4lmwOisB8bJtI5cRdqnQt_}YBna
zS3mXI!W=~g*&8VYOvJElpqZ&xD3LWLp@H)QrzksqxA(iXdY-2%PBiNp?ce>`{6^ZR
z+=NH^_b%X9#2+?a^1em8?9L2Lu>f@gUxdRy!{cW!QP;_*dmy0Z7#&t5E|8-zfyh1_a$Nn%_mMUt@5kopYU
zZIVX;uAs1-k|nRg;XgaPX~qAuW5ZUX`khT>!7H{G)V#^xXS)nru6YeF4$#4%&6M>+
zNvh-Mv7}eHUuu#L^ZW@wgmRxS9yjAxKIArz5MwoihecM}*6vR2${R#IIsq8F@lMT5
z-BQE2sUQc$n1J{N9_mG6@Cg7Lc1(w(u;~+L%2Q+16a{eWYy=DsG|=RwVcFNys{sx+
zW#bx8~2rOwsF`Z4&Z`+-4ZWt_W&DJAZEbdqUY5^C7
zepvRin78ZI(RyH|G1%+Qr6~7%`bNxR0(&+umVL%4hI;D+z#1A0($%8qaDx5L^-Rl6?4;Qb!uEA)0NIf1=fjAWl8+e(je@%@Mj
zr_8w#Jrx*)GElS{Pt2Xm^G@5zhg
zI4-ViDXpF|bR~y9_>K0@_sXPJrPkQZ4d$r`2^y+>eHmjc2
z&F|=YA^&YD>;!%IGG$FG?8|e5#^7sbLyV`pK
zcm`)GZ6uPP)vRi@#FwsXd8QmoB)b}8Qg-0%P@k^0nM32Oww9b46OF=(b$O}h+!Ltm
z@r_|Ybkb2C6?o`Ou|2#$2=uBuOTA3O#LBB7KwQuatm-NL=AadM
z!3OTdDxD<(8^6qZPCDh5yFtTV2cP-%=tP+!`u`6nM#hkXm*JwX5$4yKV3~)$)bpcg
zH7djSE|A0KYZV3a`5-HAA@wwP@LN5)v})yDsONj|*dp$(+lW6^wi=p<>rv-Eg(>)A
za>ZbocdwR@jwH76`_KiZN%F*Y2!kkC62oUWhn_0bQITR4B|&qQ>Qz_5u94&%r3P!9
zb58&dlduJ{t@Z7P9D5mtRs3dEIS{0jXrBMI>Ow~fA|Pa;+h9`
z!jn{Q1(Pn}L!Y5M;Y@8f{c0cd`C6M9Fi=$BZE2
z`h4nV#pmE~3`Z1gJ?l)Z`kpa2z0zjZ(XqFfc9YoUuYSt1HIwJE#{;9+?-Q1A%(;h8
z^)4NC>~+9zk~}vav}PjO;W+Ki+#gL!498NR5r0
ztyKP+)MWC@1D$--6q|FDh1O)-V1rO@_9+(D
zczbN0^zoO)K~LZPM%1vnthR%}-4S_zxnK^xgIVEr*>%~EjBftR
zhHgP2mP{s$3_I(D_-F<6r4vA>x}LDuDVn>MTsc1gpvsXv3Z231>1zTf0Aj-ABv@48
zg{?M7ezQx6?^rtXf)SV6SlSgog)?Eu=X&h$PDvdf{HAbM0%3sOTDVWft*wQG>^bu3
zbi7hrdo$wU=hb)K;j!2p1x0ncm7uP|`vo>O`MA|(xy6RQKr@Y&VWP+Y*U_6A
zjO)5AD5-631B3sn&gMYpOr&{SQToO3&z?1Ql;@r0{WYD%6w|H(nGuf|n;m@iDUmBA
zbE$&S@(Un{+}ltpFM}Pir~FWTX0<@5eq;lPKS#+~ke9I3LLCHmFKx~cz{I>qdC17&y-ONgx
zshh9tY^_(xXSyL^KR)hWAwxc|sW*X$w0=FGi2rn$=p4Dlv~_ZE|O?
zN>C~TAKTiDX@LEYFHi*4
z10_*c<(qEEx^Z)XX|=RHWf{qpc*m$6mH-<}Y_s}kb4M}Cp4gM}bzbqVKm-Kv6dV1=Z
zB3Df8wuh=b(B&i@&wLrGq~!
znjj;U>~Sck_Xr{%(o0a}fChFSsBg#X*c5r8WoXtxeMM;zCFyp<7{X@{`7v&11`^b9
zo3-{smTY@O*iTblzjT(F$6w0W%;KlMP#2Dx@hQN`O0u7w6Q?~?@2Z|GOc2>jd>prH
z4-MRmVj*c{g7F?aY#}Y_J*E@BtSI9@$er(SFX&JU#&6TL6U|QPJLHGmB=r-AP(VB=
z0WBMUZ&V>D6g{+C?O;3bdFR%JNl
z&-ne}jb>r54;zpLB&Iofi)DMaeL`JcW$)t0Z%exokMU7$Zc(FK~d-qaD%R559n-?4O149*NuBx}zj3>C3p&}K7KrR2vTpeLmYVEG=7vqJ=5b9T$st2Y8aXs0v?ce)
zxIUS`jKCLL{(QV&Y!*dCnr=8v`jFiUOr-M2!4v_>CS`CL{5hIl
zQC2P53T$`CprU%UkN?M3;H$fi`A;dbo0#**Y*Zu4-2Ao>EmM3ECCDKNqn&Ls
zATIY>k5U~f*P=Ku<0xnR%-x~i4~8U%6r1}7eVC3pI=Tdef?G<-d7~{$DEK>g=Vd)X
zimk4}O`=td-j!MPAv@d(kTaNO%$=jW_vmQ<$YY{cR}F0uteH==UXm5rs^)zrY2w2h
zHdq~nH7r}b2W~l#6Y?nJO!f5haR--myZede`FOfDlxLQAL>pa*#?4%ebxGj1Q08F-
z$n@q-!cI|yD}1t!rH9e%FqvVh2^bcv?R3TlrbUdcX!Uz1T!Ge#Mc1B6LEf7a9`i}n
zmEsAjahpLczY5vW6Fh2?qcY<$v6#lQ%Q^EbsLK^zV!~*C2d^mpj9bk=bxiOeR)f+x
zAKY9_?Gz}#@OlSiqeEP_&(vnw3N=(alWQVJ$N_@Z3rJkgVV4OLhzT7ld@2_-S47yd
zaeVg$%%EhoZN%2Hy`nYa?igZXPZpfjYuTKZQ-pdhImj=qY2i~`6d8?Cq(wV&a$`GY
zlMnT8$+eYlAx{8o?&`Xxmg7O>rtxOs$oq!R?aXRACJ$lZ#puS-#gC2cCxBF&idXbQ
zX3BLVr+*S*dWtU9uU=iqAYKVLYUc=I~=W%99hq+Y)GgrqntKgsB(%E0J4VFnkQ3(|rTv(D
zfERkdM`$h<;rEpw5C7c8UsXq_)x-wgI$w7RDg8{Z$VFK{Q1-nkyV6&+!CF{S3FrjC
znER2o1Zr>cel8FhQ5XDBF`}bL_!1={CP;}oxOT_3BCXcz^Ui^T#_{%)o5$Z?>EJEtY?E?o6!-w2;$PCmCB?M%lCKjhl4d#>WAD>P{WgjudNd{E3p^
zYEBiVG~sJuuhv)y$JtAUkfc^cL|EmYZ}s4T6(M$l0{_6xGgyt!Om=
z81*u~))mVtbQ67kG)P|Y-cJje!O|4_(>}Te{5zB2(Ey1aiQ{*TTJIS6Fn4&-CT+ddzE?@L<
zOz#|2_I`n|d#+C=GSO~^$0&vF$rGIt^@|4m60U*ik*YU|$1(VPAuP5)cur5OvL>deDLaGoaA-ZPsI-5aoJOMdlz-kXJ|1Z{S~w@
znzWP-6|mb;Yu$Dpd_;Lhx@1X8UekA#OatRWWA+9FJ{0>zT%kMvWWdKGt?!CXqrq`Q
z$O*tFmU0g`UqDksFHt=4o1U~-DQ9qU;3wO<=pf-f2ctQQp(2v`Sg>rvhscWMV>q%;
zw6^BQzJ-HhdH+$Did6S!`?AL4_?hD$@TR5X+Tc1T*lEhOh!0NoePIzb4pbH5!=86x
zVb=n6mqw{L2{Ya4id%E4?b;CSH_IIYj>N)P)csO1PG}+4QH&%O|1ygwpV@H`vFT)_
zvTAkDaWz0h@m@>T)b}P-b92EAss<~MurPYKU_n()`DN5-mMLp@O`V>v2
zb`lA~oLLV~&dgs#iw^Ima?U}$%^s}5U4mkRohY~bgON?h9gkd7*~p-&o3nRb%&wCR
z=8;&M)5DZln4|_und9A^J539NHkZFHWI#)<+J?q9uP1C3n=FqJgp8^ok=0`A6T+Vhc1zX02ITG;r
zhWa>}ESnFKSzxy*w2f4lq(`X7g{b({06kCI!bT
zfSKOnQnSleqplIDxigD6H%)Gi8@Srv?m
zu3BwNF7J*juAG~~hPuLCL)oTgCTDH!CAx#b>Zo)>Nfil+(#HBLU1zwS(L!|?ToXAQ
zee@PBvogy<86f_CFitff_H}6q#O-njJQ&{d^IzJl<#AA%{Z4VA?H}H{&CBBvNv6<^
z1x1~btDAF>6qrSOef?1a+&L0-CuOE~1NP+bk~e9}#Mhr`w7Vj@Evwj@XvBZ+QUSD%
z$NdeR
zg^-lv&FqZ7=PghDGTu7wtcG2sz(05$3lhl<^M$9^Y`LPF<=L!>Q3;_%tLdwH{G&RG
zY<84@L+nAIU6_z=Pmb>ZQ?+fcKpHQ?d^0&QtxTd5?(bj{R5z)(@OI-{^smm^(#sLC
zEe^*QM%89cDY*g6ez>xQ*c1C6+Vp8mBT8%}c++FEWEcf3o$0GG31zU4%)}#xf+MmOncfzfbYb
zwBlb#(88(eiSVPHpj_4M2lmL#DlD^JJzz6sYR(Yc+?XdZ)xFqsNr-<_GKy?kGK*|jNTq|S
z60G7CbuKQtq;roc7hlh
z1Cu8nVzodqu(QSBV!+LV2Ti-FiwVRQLdArVX1-$>3m#T!@8|60^jn5X1&Cer_u?c)^1nfn)K1Zn6yD^&7!g0{Oz0h+1`sCE35
zo_X*-a)GGpQ9RzmH$h*fHV!?-(6kMXB0SdfV(wfId0bL9%6Gr^UH(WxT>y9u^7HqD
zYx5~%@E%l|)hU797+$uI^QaqHPIKnmeJ_q%KXyJ55!Z-kI**%%H#r@Dr%sh!euOuZ
zTpKh4>_ghiI&S^+mYrIt!m!Sygb~b;%FWNSVwi&G}2ZdLif~*(wciL$6
zx!#;^i!v*T$J1s+vboN2_ELJ3+p_XRg*cYlR`=$zNVx;5i3`_VIb!J95Irh8FiKNI
z?=Igi#(mFoADH%h6q`mrc;?X^QXyVjVujxT#8y|Q;MG7z^k2C|smqSKUKC|+N@u8e
zm^x=(6l%URD^gfDyI{CebaY%d>d3pfwDh-Ynx$OW<^}zO{jJyvoJ*%K`3WA1iAC`k
z>YUl!D9&RGUCilgVkL-Y!DLnB?Dvc9Ow|LYGk0bl5Bjzq-|1knUV=Z{tR+B8b~)Ki
zIZ@ZfSg8lL72tpQ0i=`QUMH#2QxSWpW_NQ-nsL*+pZlA`FMWLfUA6&N+@T_yB-1#F
zi#$m{L!}GP{#2*WEu+lcc1L)mZF4g7fx(zYRJNr^lcIC<@kMnV%htGt*i-PfYN<9)
z56;ZBei8-U5vnCK6@H_vq~GVe_a5k)@f*0ga!h5|jM{cFREOWC`)~*0TIc?)?R`@x
zdIkvEcw6C2D&BE=QvR(>V?c`GGgW{bR&I1sxi9XaZ|b@_)i;r%)cggmp6NaAwqM(-
z$Ef7!I~~`Ndpgk$R!)O>A4w$sw(xXwLbIN`*mD4H8((JBpJASNVNCnS59qSw*+%=`
zs=R6xF64r~S3+r?gwb0)+VR`U{yd9tP+ZN%sNy)79XA_;!bVQo|9c6PKh8AiAcE
z2JMui%nL&*1HwFBqr?S=hB4)ghQ_1|j;6Cm#E*Z#b5wVa($`bp(iLh%(WN4tzIOVa
z)b6$Hl-!-ge2Kr7`$N{}kf0wvV-Q1cnE`%{QZ{4qbMxU1o4
z%UrwJQ-fjujaqgO3ulqamVnF@2NnMup{qF*SGw>gV-Wg^qo(_XD}T%O<;&FP?z++j
zeHA^<{XA(^9)!anF26~4qpZZ8*y|d=`%VJC1EH6=(JoN9&|H&w(&uCC
zM`wMZU07|l6goy%!NK{~tnD6d^;_M
zjw_x>ce~kJvZ`MwG7%fEKckxhX|4X#u!P*}vi$`=&;rLx1D5u29fR|$Ugm}^O{4pT
zqpyNAi(~Dc$F$^HH9-y24=9=Bpxs$`=!;OiL^#Il2DR~3ao~D653m;LUIL1FsbmFU
z<_yS`rdUE%=jaEZuTc6*Bfg3z@`KcT>yy#xecqmltMHor%YEU${QY+qhps1y{lMlV
zdrW){hyghZ;+D`|fHF_^upGzknr5=??f{63L;GwzW=Anwn72{20b$uOM-j|X;dc6v
z4x3doeP)#`FI5LTxDYvaVM7N)S$d=#4{LsavxF(a%Q|1rHP25@bfRLR$y?u;mx#fWP!CP*{n#
z2QYl>BYmU#0qGr{;6{&gEmr*`hD$+rW?K~;5ozYXoMY>C)dUfv;Y#=ji1bPauwKAJbmU8?E8?Db5GTA(W1tfp4Ci^}SBlNOd2$PR(-}D(csnSUmsv
zb5G#4(SAe4JzGDisaF5p5-5Un!jl4^LRR^M)+=1NJdoPHhWGqyZc1yk)w+1zcWa(r
zLb3PUw8voh;?xA(Dm%O%L2He$P^tf%vh(1uIU%q|2$gN`Deo;p(XH1DA$$sRjh3@4OG*wf0fN9Y^$~!@
z@$;`iw)k_T+9H=ELDYKCrNKzpc0XV9#@-^}THK_kYms|X_@_dP2zYEK%j7p?`Ne65@mFKoNl)e1-*0NseD?i@eAO!*->{^LipFA>9I&j
zX>IK2)EC$ON9KE=r=JJ8#Lqlh&!bQ$Ls$&Rzj7gDux?Ug
z(i{x&`dJ-!357h^9$XB|hW=_AnlQ$uMz8sI-3RsZl(C~ABzZgnd@LU;-M3uZ%Y4qvNdNe(wS?Lmvvv--uPtM;$N39LR`NCp?s3loRTO)-cE
z*B-d`KfUzirNNzc$j;VH!Xfu8MQr|9{HdO>emv4!Qo-sbE*z
zV^SHx+7ssUHRE%_=_{MFK^K8>shmTK2m+w6;~YtZoh7*T>*F09yWaeu!|a$$Q#m1l
z*_`k(gM}@30%=r_+WCuareXCdT{q1C_-CvZi3C-c9Idsd->UKhQEDDhaq$sKrKOdJ
zR=+hiQCRI)*N48Rd}rPZtg67AJ8MLI60CRZ7~_dSAMkI(|`Hp
z;nA^NYIu6g6BDplQ1#07^UK3*2$VojuC*S$Tk!lP!ZEgd-X>~Tt6r-Z8!8Shd$XFWE5
zBYkV;hmQGg=HWcI8;{*gFW9)WYHPb#4&x9knVP68P5yDK8lSWi=H!oy%a
zL|fA$%vuvo9&?A6^PUUJG7p_}x%~IjtB!J^n~I8B8(7Fa^zDH1r93Clssu@(?-(_E
zpqpmQLhiyFflKQRhJSoYNNc
z2c57H*;(UTNd5CBJyJ_i3%C18_41?%xYp4Ex8dcNM>W4Kryc90+X?GwFXz$M(^t#k
zZ-%0L%3CBhF8lI6q_r06VkfB6pbN~*LgHQ_kyOO#D(c39rW&kq3VZO=Ap1b>_xbtn
zH@pP`euBPBrt=ji=No%BqBh(}=@2fZfb6VbYbVP=U9>fo58pBWm;GoSUrF&&?Fbbi
z2`$Og2Jz*^8`)Fe)pNCrL(-iU25d4F{;~^Xpkd=_QE?th1PAbenuR*&Zi8hSKw4PL5Go9`;A_D29%jw|BV9a9$
z*hNO|{>j)orq-SfyVN$TzREt3<`z+(|Db!o!Yf&7yk6{}fX6nC+;q?a2^e>gRcRr!
zL8l-??2m97#Z*pV>&jkOV0WR!)^&4%Zmm)-`md^QKi{Ghe;tz2`Q{Q-a`Hw;cRLX(TxOz`3u}KVAQ!aMz8FWEo?ifb6
z&Z^wA2YKK;q1Ixr#8Eb^8Nw$C%tRA>=sgRPx(|CkKoN)#qLGb4ybUtRGBucy5EXBI
zzOIcrWOO~ZU(x-YW!j%c&8d@rzO#F_04#`iiN@X{clzU9*Z(G1;X{eKz?nl)(Lz$P
zWtu?%O=O-Cq_nc~BcW{87m{F#iE4RY9$LV09X74L+VuC)y*^W_w9tR$ta&eP66!Db
zX?3&_nfiyoe&H7r9H5r$Z21&oJGeB#!(V{qYKjzB1SDM;Fs)i?GhcFNq}%4(p#9Gv
zp7~DkR9&T%s@HGt^JE6=jj&*t0{RXR=Lz)iW`;55g!j?x17tp29Tgq3F;q}s+Z)$u
zVsof*X>v5gzZ)x;$kSDq_
zY~37P8W^)Xd+NvF{MPHaTF#p_9A0oA$oDy%Sg&K;fF$Yf&Fh#t479vBS;h978V9Rx
za!3_GTTT_6;HCfU_RZ?BIajWq8n>q|_J-oved)UpQaE6E+3c&P1G%V)vmF4Z7#rdD
zEdJ8gg9H#IdY#)SHTBt#Md(#kyQ8~HpGa$25$gT!iV2z8FS4~S7$pzj-Mfgi
znZ*HcUiBt-P8|f^a~CktpQaac)|_)(jVv&o(PmVO9|E9qf5k)Ww7-qwrDH4Ks!9
z*u4&fxDMsn;p$CSqH9grKoYF)D+q8O@MGm*`A!C~bR*%rHuhS-qYUpHa{*24?
zaPb+&JMuL|J9NzR0xKEG2Oe}Gde9>y(r*Rv7j0t+!P$2ty^D)$`#wuXQ)Z+l{JtHy
z>CQE5N~<qQ#zIn(bQf9PV!_`LF&3p1#3JnV_v~ZU7ub_LXcGOj
zSl-0!&1$k^`ghynvd2F{3SfeRgZ*x8sv4vL1(Qy~cByYtH%G2jMRbRmOHK@GqzjG6
zkMXEGFQ%LeAOkC@W`FqMUJu)UTO^OCmQS_EsgJJ4oE1|xXLuYsa*X`(U%7h_4G1&G
z!DhV-Pm~0q0(3=NrqZSbj_t@gMl$_i50;0O|FTf=%7xcxcZC=4i0OC}khQJ%Tw@l%2B|*F
z2z!L9r|4W0hWDF>-7$ADabR@%!v_uN?fyu~_)+eRiSX%yCq
zptmjmX@2WiOia!t7c3f$#_D?5_p+FkHSO3vu0MX-9)A4_yy4JKgfT2=B5W61-~hop
z3ysqQ-fqGd>=Y4`q-RG19~{l24Ol8>g>TC~YS-JO3SCY7)3({N&fVM|>=F$=yN+u6yR*tgMpGR1>
za{t)-cSh6h>JR_Q0p3Ka=Y65O_{T7noJ=reh>#t9>CNe6ZrdfMramZa!jy1YXGP8l
zFBev$FHNF2Okn{>4rphr&Ohp|a$Aqp?=(LxQ1F5w`!?U-2{rqfPc5K6U?>>jF5W>4S56P-g
zx@i#JDhr-eU^yb#mpwo2CTw^TsdVR3$|tSF6VOlOa%9h~Na5jtKCMFM-$H
z=S1)a7^zuoeC0T^zL}Cvv9JjX=))-diGi9cwH_(z)`^W_a@f|>NhvZ-To#YWf_?@U
zXaCBjN!_@TCFS*&jwyYjE*{n((tlOjd(9Fgc@B(SvC(L&Dm2xq=i4s)e(}dk>sN;R
z?+oK+cwH4-2ymbRr`0vOcHki;v|x|$+xO}qKA34RY31Q>@b&J^R#1}*-T(*gE(b~*epw(Ly<>7H6($|p>d
zT~HBbZb#ZV!Jeeh6N1a~9%{U1ZO_P^G;WFw3ArJHKk^-8_KiQ}Y6(h(GiMk{z9ey^
z$YK<-BT6ID-toc^29GUc0|`+WXZD9p*stTCfg}&njv87sVght7)SUBVkGEElcrk(+
zQI8|w!;?U?WZ)5?x{&bjK;Fb|Dp?zcd`mED1n=dv%F)S7E@M${J0FetV!nOL`CQhB
zcK1JZ=z2Ed8S{wi{v+(c=@cLclpw#tj*md|r2NS@ZM@)ri
z+3BH0SU!=Jrr*;Qa6lBpoOs@fs&Lbb%ADm(=kRL^m?fre?L5$V;bJ*~sxG&5x|JtHaVxFB5V$!cv+l-X$BxA7wP
zDAPJK#*;@%b~R2Iy;Asg{OR>qu3leKI=xN(mIJw{%uthY}o;MliJ52sl
zHf*gEPfl$$L-Eos&YWpU3;$8-)_HQ{gf8OvG-$p?=T$ob+e--jL``C-E{W|jE#H|B
z<3S!qE+sb5Hv&;yGx){U77+{N7t?ILa{NZjt~WgPwj9*+G@-WE51JDrN>1I}?PEDy
zfxsijUSv!Yw-UAh^3!kuQ4)a5m#aWLi|VOn?7s+zDxE?BX|&}OqLc$NzeCJZ|6kFUL8O(%RJD@ud7aJIX+
zO{Cevvq!oJyGeE~V6H;DjWjpm3EP~3y;Wey7z@xvn>ofz6c5wX-#68${rNntO!07P
zDyIQ*Pqr7=$s4;D#YhZLpaBp0*hI)~yq?Ic)d)Y}fqFgXpj|&&()PgPaQvx$v{BW8
z8fR+5(Ezs{IVx=DpFOpX4S#}*%boco#r0ZPFazx6b`o@FVSB)}KU4@RYiOZC7k!&(
z5ycZgWhxSnxKsU7_wwGjaL3$EXg8N{r=XE7XV#7wnyZ8*|7j&O0;CFoT1_MVP
zrHtsq%-2=nFX`LyPQ#2)PNIzvs1Ta4h&!IFYSC3iTK8o}p|giz-l~H8NL+x*k>F3n#s1{tuM9j*=R$tU+y)NCgFLQTk?#W+euOycV?D|WNyxojI!9|#^+m2o4
zG_BNcqf&*{+I5=Js<llDP&U28gOF&9#DYyCWhTb?Lm%H-YOKR~WD&Qd?t{KNBEe<3
z6pURM-rLkTxU?J^JY@DF&Zqc~o>IdB!LuBj9EV-&ufeX`5brAFFyGs$Sa&Vyqilxn
zh9pvNIP4jSge%Y2%n2C}EX}TUo*$+x(VkljkMiUGZi>^)xsvz^{R$J9EyG5w|06xY
zC(7gH0Y@H8dv=tdFLFsFKyX1PM7{uc~#7
zDV<1kNe$A7hwZ8XR!V_xo_%!}kuA^SsDNJ)LKuiC*b6lA$!+D$0EQ$C>aF3!W@Rp-a8T_kZ@EaI+lgd4_Q*d;1B&J9j^}jM(l0Lz$g%
zKQT=mbx@hL7O#@@KbN=+IqdM>pndAz=`kD67cZAoei_xZdVh^+XzJc1F(C9ZHrgSl
zIqU}uU4$*dzO)}wCDBsXl!9>dA)f+0C)%3u0(Y^;e>8l#Wy1dOPx-p+pJGHy1uD2e
z{t#H97dINEF>C$SeYj+>L@qNXOs1i%d;)PNqXViAqNcNKz(rJo
zbO#NH;^`fGyB3m6*8^UQmt2IsnX>`sxB!B#yCmMggR#rI^a`jqx4=VGo$*klm;Wod@#v`Sxyp^Krd%P**aD4KBtx+NeL
z*QEyjPIbIAhiSebfi{vvveN?(NO}Qea4973!U(hOnfbC(z{C~I{tvuhSL0#hfeYpcG@Km<>);Eeb92tAV{Ue9aZ^-2`9UW(L0{+EU8<{QZ~JxCGY%C;0dwr<}tvUx23OxlTO}F&3hFj
z40t{rSG`!RgR0OI^J*2z}*I203_DM@p-J`CcUp~{>w);c7Of5OGIrV
z=B)kPln1Ox&fr}}iQEF2JWv=Mg)PK&^S@;4tBCX~c!Hzfr@A^mi6NR!)sraU7Z86c
zWpfZfxO?ai!oa>uuM6w*K4xwTu;jt@@D{bg@6UOkVcZOvC0(MQp_E@$YTO<(I`v~7
zVQZk*gX{ALBG>LexGD<~|Gk>&SLCw!aaF`OLQ)vAHt{(hJ|5GFtRtt`VX8SCT!`xc
zqmI76>y@pe}5h`XhGG1q=|jl#BbMKtnbs-i$mrlz;y2lDK%
zD8W&)Gc%o5^!@)lU*Zo4a=(T(Klv-M@y1UFr0{8V66{94;zhtm;zelp4M|zn)3?pT
z$&P~>Z+tLc$$7r#vX7;a#D%FB!0ysbee5u9_{Y?o%xEB7U~nJwYVOJIwcxyhDO2r*}aa9B1L(DsI4VrW|0M_MIT;zz#20G@-8^@52DS`P?vc!;n(
zHL!&$I*`CsR{9*a7Pb7|el#OWpRA_0(`|o2XvbVet@nN>ldk0Jue3i`xGLun1IZhF
zy=5O|CxF|{oMekUp2%bx`_NM01s}QOA&Nh)zjfpK%dEUDHL&;)2?zLq#abXLo{W`0dNr90qo2!9G>rJ{%i93&F&
zJR(?b+aBfoyv*?P{HXRWSdMlkk|UYv#6E=Rtsw7_Y328R_(=^#Gfc3$YJytp=CBxR
z%}noJ9!HgtSe5s_aUe}HD}#(?a{LCyF4Q+j;!CV+=Xd$WmmNGkbwyamLhdHsP*UrJ
zZKskyZ=LoRiOHpixw|ALF|pyUslK|Xq=qF%U{%9pR`tT@9z;)HEjzW*GOx#{@Zjze
z&yHQB7m?uRg`1xVZ0aH_z)WzoOL&0ER90LAiUqS
zHfHNNo*AV<7QOAPU!pVp{AO*U3bLE8d)AKo*}8o9cQfp}6LU9srFz`Bow3J45zZzo
z@Hrj0Rz;A+7u}?v=wDV+JTH87mrxO34YpW1WjRG*I*{a*-GV0}X9rIPLiQ(i=bw1&Bk4
zzL&5|V%93xtW%=U$CvBdbP^_Jr*ua44;ImK{f&a$3UhTQQr&)-jc)l3KP}`eqIv$C
zTmcQqX}lW15-RgEyfG_FDIc%J>A7D(^kA$njahh{nm#{#mAGYIjncmrqToLp;R}Xp
zmC)Y)Le7!z$&A-)?6wPoL6AgQ0l%R|=)!^~1?&cG%f=!oEBaEOFy|tzMr2=B7*}XT
z+iX@m2~?kdGh*qEv7|(~SD?yWtFWpcCd04S*G!YsVN`37ABh*nO&d$q{*?<5&5)vY
zcah4_Hqp#%x0E>GgG$b!e0=b2&Q
ziLvF^>yrs%cB>xhV_2oOs^VYeEDVCLEXbTv7RnMNYQQfZiK&Z;>s(8xfEkkHL~_S=
z?mEOHe)Y|q{=pHdnaLHA-rq6SDj#z3H%3wP4nudt=RuiMTF(Rn#0&uhLJVOfBGrf(
zEx1uGsZ(O-hQxY
z;$!4HeG}T&$5Qs&R6Q^C_M2N$s*H}lGx3Ev*p=n70ueaii?GrF)z^dkeTk-t?O%R-}Vp7x4U
ztrDz~QLhm`^<_m%ZaxKKMUSJC<_R-Dl_)_oka24!V_PJdUEVoF_ym!cIRIc_B@?y*
zm()pzg7;+Cgnv$lqu0MsQB0DBij(nTaFYk`wbVc?U2|VBrFg*nN5b~C;GPJC>l`m!sye@eIujaivl(=cDy{lwHFAMHX*
zv~Cj8vh#Qtcke{Bt>jnGjo?Rf@2+Nlx6g{Ne9MUd%DGE|?ZsfEtQ)}K61U7wLBTom
z7%w`D2iKJv0BJG2h17}P9LN5fG&6Wd^JD_&bEVV^9TWKSOpZxKS2}t8XQe9q##;Oj
zDTEp$$P+=CHX)B3bY&mz;13rJ{yGPypo~pNvMXh3LyJCpv)AmEELQsa9^bK<{4*03
zllz3V17k!h&zt#kXcdDdZ1_re08Wt@V&|G>D?7ZrsJ@{XmD>`!Hd4YS)Roki25;dF
zMWGcRx!sJiy=0wX-}LlEw`GEvJY+6<9L#Z~!
zVy@%DDK`=ZUB4xd>v
zY{*h^r4g;@?{!kNHG}VOwv^qko%?ZK$FlZ=f#)CBBWr8(BN%z=~U7*^a(?;
z63+?wCebO9h~zzYI>WmOHDk>+Iv{x54r8a
zijHQ+eZp?3ozRm}aiEO?xU@THfr;G|=L0J9xrs?dKB%0SfxOHcxbL~+lL6O)ueO)i
zj#tntB?82m!LM(UE)FlR+xUB~SWKFmEKH!?EX|y~zh>JiZZ0@&ol~uTw7Gp-tO9dU
zOTo3j`09V-3#<17d7>q5UwdIVLk&zAL3CKhWWh%{$8T}Tbr;oIdctj>r2}fUo-}9f>@yy2sj+vV2aM_e^
zKOPeG=*6heu}#+|F;IH}8B@L8*;l!e-OmR6y?#Lb?hV$^DG
z73CG@Z1$*cbY3~QIgF2wjX1O&i{4Usw8t?0)NALD=eFDlkOR`V$dmxRR2Ffk^im0~
zp>uH3?{ga5xmk^+v{HPqxu*F^LiPvo5yNx+elF^H#wi{xM$T7vj;3(whSGCFNQbh*
z7hsHU{g~1U<)zwI*dAJOuZUZqAtYAd(e*Dwn^K^7TgWCwT
zE$+;a<)re3+L2{{G#rG?;t^+?6IVS(EZUsew!N?mLra)^eoJi=HCMZ+!1#LRi7O*1
zZwxn`N-@b4Rg>)0gcGN7m@=3sB&k)4_u1S`U^v?9QQ;HX95y)x%Rz^kFMUt3YI@$e
zIoU0m&D?Ql?}oVQ#cyyI+(5UD)2MTnw4uz!tdi@_u#^KKcu$Pke##iL;Y3PlLg-z2QAla
zCaw&XWy}A5@swg-Xr_yQ$9(lwM{e$5QHtDu|5Weocd!FPeymwo4ZO-g>v?krW1I=x
z{}R(dC&y*%X6`7n?5TkV=5@f_Uvun?)1%Afp^HCeZZ*7=M4Qy!U6)h$dW?__Ah-P>
z9P`I-e8{YAVD^}3wlxm!BvrZu?s*l6t)Ssj%GJSG_9Hgyopg)#S}Zv1?xlPH9#EI7iQ)R(#K%?ZeI)l6KQ8sxIX*IRm5
zYCEwO13kAt_1w&)-rl_QKj!iCmx+(3a?7%?x5lhcbk}}r#!IgZmB%;a?nVFY^;~)q=oONAF!5cf8<5OX-s15(8FH2i
zc9=osoOzW~A9A#;eDQUPd3mnd{T>l}Jk)K+dLzFa8wTKA`f8%7gb+S)Gmvu%JP256
zUk#eDXT+42X3i_Rqb}->3$&=wE_&*F;+mLy|TOOQ0Lw^OFrZFUiM
zgT~2S4+)W)DZ8gLO8yFC1hXslJgWbLw2El1wg(;IwjGSEbOzjC&VUa4mnMMaDQhEu!7l;TPcRni?i~e2!(Zzr
zOM3KMh$Zf2VOjHTxs$d(>9S8)+ccF_@{hgLc!tnhqC>69TBvHlj>kOCR4^q
z_&4qgyP0GKDX}Wd;h?**sG#H}6mQI%R6I*<_<8dt<%hmW<5inS*6yf14EBYvW30;)
zzx2DT1q;(~b)2oZWStDEr+_X(WI^9nGel!-oYNfB`TGrSnyIC4m>)H%>s&La`8|T-
zh}xQgeQf%@F?yKt=#3wu^~n2W4)~B~i!)&SLVBcGwAzkMX$GIdFa-4Qp#{3>upQly
zq#cJVUIQ^+!W0z7EONiqv3U$@Z?CY_vi#%xqGw=-vxJ>Gv9VS>4I;&s#
z)=qrE2R98E55M^N^?49|1g}WM6!(V2po~g;(`2P3~%}f&6Fm!7ml?Pj6|H2D#CyKT8b!ZoBGoI
zzXQ;$jeJ`~RDpMKTuWY3B3nJvb)>X0&1YD(^OvL@qQL-H`YrsvSQK;yHpR7vY~2ky&`B-Yp~${(H&Jdk?o?YcKA%~nW{|Sbo>^{
zF~W#Wj6fNhM%Cpc$xHzxIPqUX?E+fbrw%=#*1Pz+58Ukcdyfi^tZMMZNH2oU%kaG0
z_xJzRp6p8c3LQsqIUSI6$Zjx%0GSL?vxA_f1;lf}446u{ZmKf7ucvNXc>9su285#JME?8=;$MXEJEmIRzxg
z^K?ySEhe#D(X~JUaR)Ng8miQKk&OVXKnQ?7fYlhLo~Cqt5>YT8H<=cAq+D}TsLPmLtk)SY@B&k{
z`|c?Veu-cKz%ky-NF*3ZD%FlF42$tKEAb52MFmoc_K8WAV4UI`pQEhJr`*kMxKYHF
z7bZi;5)W>^J#m)!C&5A*0T6|19WE@o{jj-#dmd?V3Cx0UZO|d5*!fr4!OiFod1-sx
zbi-`^X}@J{cb>W1?w2Fvlf!9Xf=AMqy<5v+LfCQKu2RsjZOm^A@9_dnY#}W79c%9S
z2;VpNr6C~3<2T5yAI95OAf}LEN|6nmiTd81Em6l1zipyQJPB7MNO0**RF6{rjJ^bb
z!@eSJD>hk?B6ShoXqpyyxl@H>Nm2~95HRo-K4G_g`%Zp^fWQ3gR_V|7ozS!ThNbD9
z8vS&H&b=^<(DnUSPO7do9iAp8sZJ7D5KZs_nQ3Q6t$z$clun*jQuHRd(M|TmJYX-p
zjX;UjOp9)LbEbSM6hnVt%{;z_!(3##(v!k&7IGsH#5aD3Ra#AydX=(Xqv~8M^q41~
zb6eiDCHS-GrNQw^z4;&aO?+si=Gu4PfVWQ>t>=PN8Ce4t_N$XUBPc9J&aF`@#cT8|
ztT3x{YLDcy)`zQYgQVnEYi!6XCHuvhX86(Fl>Ag@g)M$w)dVI)5h_!Y9-t3uO~Vpp
z7C3~b$f1~mbMX{LeqZfaGkVIr)medRHZNXpd);lSw$MMXRd*6&dW#hk8!hpT%S$%2
zXt*KYPu3D(umm+cysoY0;l;WpAa>f-oVxH*I)Pq@#h-X(SbwMM1g`8<(A5+BKAorr
zvx&IRer^S;>)9==k}g>4l&M$xl>1ObSltCJ>iOB%Gw~>M`gV5`4w%Wy;mBi;I*
zUH7@DR{k;GekVt!a13SEz4%nL^>XOuXdT8qXh>qHVXk|rzCGv#ZlgU<^E-)KUG>Z}
z!cA(SL&8sIi1kmbzi`l&ePYyMJ2{V=t&=P#FTEXe&=qQ?2^Tt=?aupz4TiEwiQHzP
zpz=M%uX80NV7>>)|1_>Yb>V8jeCbQ*vu*H!|u!FcH+{CX=i|kACjBrRU
z#P1E{dl+{%OLL~whAftLbe02HNxV64_~G2$(t_s^7(?qFqIuD48$Y)l@8pBNgRw3X
zw&D-M^$y?{6IRpJf)++qj~fnM8*FuTFdUz&gPTSV1)S9A?PcW;-%7~zY!gz_p5sOh
zVwKs`nPz0*Ad*ScnE%h?AIQ_do$78b6T
zI~eAhw)~f`KlNw#X4R7i3h)c5vr@Wa_kSJ)z#zxnokj=-IC=43b>M_M^H!`iwn|V1
z+T(Gnm=bu*&E)dh`Cni3ZlH158#ayuc_*99AmfoeF`0`#{?SNU2y5M|i}MD0kA9$(
zo{ys7_!4ee)9dj(#g=&UZf3TPIE$YrF^SW=P?b8j3s=!O3=nyw+mZee@o71Uvj52*_7CRlC9(-wiit<4|WK(?c`r>9fCTH
zVQk@`ex^)ee6CVNuwJq)R*xL*F?BlYDA=x?zX##)5;$ur-@!->I)j*9t^rG9`$G?p
zi!!}S7u`4TdaW1HFXy8Nz`zN-nY6}o_=0nmtNv*xFFEL2e`UM%mxLn=#0>;xG*J}~
z<4qvd!fXPndGYp<3%{{@-=r(WFm0kUB4T6Ap1=)37KXR&cIx-{n%@n+68l!xDc}u!
zm)to{KQhay>$?{Ogw>~3Ao`$5c5biGS~fb}yK;OUo<*iKN4G^4KR1+|zMH^E_;!Es
zQNwe|o{jS}vkc&ndl*F6>SyXjFcV^`3b9*wweBFG;x{qj-XZ0HzR%ye
z@~@nW@?Mp$CCC?@^qg{7QZ*G`^O;pbPm3yDzt@S`nWz8HC=?|=7Cw-NtMvT*o8Uw0
z@$MRIaXz$Izmu)6!iBO8&WWrShk_-i!=`jb3mCTM}_31z12i&-S&_H7f
zTs#BJ@rd$(Y(ZQGpoG;OvLpSGB-OGk5Kt(~<44ui4OePiOq@~*Vdacvx<~2uY@u}Z
zUgXPN%g-p4Gss@RY#g=E6JJ{|Utv6(SWs7@dL^iK(pD7u5bb<8@^2
zhG1%k{gvg4K6Nm}I)5MdpkPvEW%v^XeyCYE{?F{&kKCJhsEs>K#JGOKUMFFTOuCA+wngFXUi|@V1{f?6GO#6*o-jaJT?U2|tj1Bg>=a
zUe@|wfkXewIn6N|UA|l8@n%hl+?UOQZ`IFlM$;)5QyYNd-
zXUwH;(yXn1eXS%k=%@7e!t!^<@nz1=c@VMMVmD@KQoYEcVaEqr-O51YvxSvcVi)F8
zr~a-_Eei95XiEHgc~HfpMznthyDVSD361-nvwZunn|NCh*hDsffnmuq6{!v2Br={h
zX2oGFEz#?Wo%G!zbziHja=*DgA}V?(2k)b^hmE=YQim*A3^)J+r>wujToCK2mSxJCnX6nJy4i4R42QC}oxvv7Wi9w4Q|;
z(P!RHm-`M^32%7BcW7@%5T6lZwP0QbNEbUkhNe+v)R`-AdaJVAPcTj;daK5f@5JspjLE#1Gz-X}7gMYq|+O3>U=@
z0Y#&0fB~8ek)*RL?AQhsad3MdPEUm0pmNw-yL@N4Q+9O;S-*&5QJ@X9k+7K0BU2H+
z1p&(F$!C?p9J_
z@dA+d{EXeJI?nQ*H$U)bIO_bGNWXs#E$@yhQ;oPhXzYx-bgrMInTRSeJ+vG@Hb%wA
z^TPNSw~FxEfYSx;Bm*|4L4Q>IqQde@!9rNIGZ%A~d%Z3ru79rX1Z&=0Cr+O;ct<{<
z+8&LGRI+bC*&i)TIF9^=RGSt!ibhywi%T5RKHwn!FqX#AiN|^6OSzsKz!^O(fOl#R
zE7$yLy!+;_@1BkXt#y8`3In5>o)w{4X<472Vp~m>BLK$@3a8LE#zc^ERNdJDjaJSn
ztw!t}K~COf77s7|aJtT@2E8L~&;Y8FU_lb8zt+2ST0Mg7=yIBGYnF?<+;7}K!+^xi
zJovw2i(^ehz(vhG1+pYxO#YG4D3uZWbHJBEPVa@FrQZiACO4NxofmzrPd2s3sCPk^
zyeds7OR9o>K6TTN
zzDK2J>KD!y`;_~eTa_!A_J$qEe34zzGqYZ9#CUkv^=~SkFqeSa2A*x(GY@cA7TK8l
zrtn^Y3+_1TP4~S8)pC~!O~t)S{NqEnb&uUuNglC%OoC+9tZbhBz?oFTpF~dX!0m*_
z-Wk9M&vU%sS3Yn_k1bX5JrZm^dC`d`b5fNr^5!yckHdR#Pj7F8-5&4m8yT5!l5^BV
z9VUYRw$-xME6f#W23OW+f%tsF9o!YfqLc*!ED}PbBwYFfg(wn0V&FBNfF!*w4d(&U
z@><3I<=vjIc((hJcT)bw{1P2aVsR$<4TxAC{%Zx#6+92=k@D>#HQ-ti@?S9-aHbxy
zTOViRlP|fVW*b7n#$8cNsI(2(yvXe-U^NVk-lRx;F;krI0$DL(z&Js0Q+T6)S+vVE
zHHZgy;|~2R#(?bU4GQzA#HrVDDbZ`q;^&7~a5j-Uo72k*{uR6VPo>uLkyh=BpmO;4
zxsx$>+$wXvwEE1ih~w$_UEm6u!ZB=zB~dbAOA^yGHB?U|>OD4tZdg30cHo;&tV^%W
zw_26vFqg!^HYYm&b@oAY#S(gHigM%aIFD8>@mzQujC|AKf8;{xO-<3D=V_e~EjP#V
zihB1Ocxc01cQ*1CP4>A=M3lO(M@Vj&!o`h!f`jHd`e#0qDGrfN{3w7o?QGP(X}>5C
zK#`YG;ITmUD|U=DAeD?dgP|GE@ds0MU!->6O&aU&Dhz||WzD_2aSk(Sxv1x~HN4)1AWfwM!vPwNXM*EDh8mBF|4v`w@8`iDn>Y!;lO>Fw4y1C8>;}DO;YraO
zJn0zgouKY{u~Zj4+dh}3=o8$1yfYlRmAN{va6dpk|9iVy
z%kR9$*0;6_X?NodSqfdP8KK^$OuPzqnms`=rAzwJwS(m<-8E-D!R{&(+r&2-#%uI&rQLvda0J&eaTE;Q6GvOJW-_8JEpl5qTNk7c
zAY0TUZ=HgLgdXa-fk
z@|98^FD>OU5s)biLs{5Hn9Qzu*{vhK3LK9P)2e>9He=2LLu}eXPw-sxfOXJf9^#w_
zU0nu)*(F%p_7#KTpdBLFA${YRz@u?YFP|%k$JR{;lPii*@E1A9D_chS&IkU6p6nFL
zyE>(O?W8MbEa?ku76?*HE5@H!EVq?oGg&KkRC51Ya`SVSsGa?5zn*sbDH|)F`Ma=T
z)w1}6BZiM@hm3BpA?>|UrjxrZVN*-SfXc;za^uPUbF4c~MV{CTR@xI5UVjlJy~mDa
zoNuV5#2&SK{vt(Qi#lgQU1b>7^x4DLB}Edm;Nbjea1X{Wh&^t>uih%UN0t7|9>p`MLWYGNPGhX{7oVIiVgmqZJX|atJ_9Wg*{z
zy>^tILjRr>sj~UZ!hss+$npg<1()=y@dd?UjDAmh-`K|l&5D`M!?$Fu)Z)Z+*@U>s
zDzmnK#bR=-hgyzfQ5{5iyfk*hGkG~A62T_M=+(xfFKvdAQtwVj^9T&-c!IL^X-}-dDofDTsMAhR
z1W_Sj7aM8@HHP$lqXVrj#q5bqHJ&d`i4E7@TlnXu7FCMCs3V4%7c_{%860ICl+#UEV85mLh`d
zEWJJ8w=I%GOoG<>#S6jIzv7AWY?2(X02_Swdc-kMbbhek-`XL8DX#47hx7}%muUSt
zNc>2EK%#vT?1|e*2XGL`_CV^1{n^}!F{i5jwF(uxoQOTaHU+&0XHyA96PR#9Z3TuM
zxAL{Y45S7aEtNgUkT00%IWOHU{X&m+leUx8igum4MBzQ04s4zpBdLr6y>>Z2+jAgE
zuH1fPBZluyWRL3?aBGF3$;L1
zq;)+IG;L+y{^(M&bwwdc{4%#q%uYYcPiEpKaQME{{W^$XT^^PAY@dw>>@2-1549``s=6F)0q(}
zaML=JuIsZqRpn{Ft!P4d`6)YM`S^st$O2ffEOKy02J@=Lx|IZ)Nwmn=_d0oOy7}
zh8(V;nUs6r+TlAu|-5|EI-
zvjgbu<9aw>t_A-v0Ov|@j3?!B8l1^EkCqyp=yjM>Wj2Q-^UI8N(jBE(=ka2(UptNM
zWiGhfgep^dt0EB84<-I9X4svm7`@0k_D(vf1&U|T_7nVJ%5zW|aH0W*7jgY!gNf1}
zfLEXhGA}yRpTJB-zDERn(EN?^mK~~m_tvR&($4$q?2woCcDI=k-F7|N)En=;9~uWj
zj)7Uh7}kvtv;m)mLSKL!0vJk>C##QcH*pS<*fqDGwhM-eSWA*>b05
zqLxnulZSEgrR2A_MY{tX;;z%%vMg!D?ybM`o-ayt5o-~Pxl=@zch^ULjxi6BWbBCB
zyV*HH!s$k^yBycus5Y2FkNLUs)-tT$mD+SijehjRas7%V>KnDQ?|mK~3|C79_22;4
zjVU}4KAn_6s8wWO_5sivpvVO#2KuDN>&T#2w-#A%dIEv;v5S?;``Zqyx9e@nqO61R
zXu(q$?N_d8U8wlymJ>pGAe=YWR?3FNWZF)Sj?SAlGGoE(^m8$4LV38{5d}`1H_J7;
zs|Ii0b~u%CeA{v3s~s00sT$xJ8IJY4JZz~?nC@js@Dl+L&|%;10gVk_*$qnFmngBp
zx=qc}S1CjK`echpC;K$zukIk8#hRh|vUf+%;RkK>Zqm0e$0ags={S1<6fkR_RKW84-yJNFpDGS%DGwjnh;Uh~__p;}vthDlr9^#hQ
zBC}7xImL^hGAf=Z(;|g);3<@G5}+P{MkQilLb>|eig6iQ$F+e*<1$Nb@(!D^OvZZ{
zwPq6s2h>jZgxqA@X>?S!`77LdXNe$6m}buiF-a_
z&=cd8CRQg`9sBuC_c>12WXOLz#D$&uLImdviR|+SF8`lJj{g^w9REcvvTfV+OVN>M
zfBrYC3q+6Y{Ga}_4GO~eVXVf#^WYvVx;~?)r#*I`0-vklWc=IdsN{hw9p&ANXD%0{
zh?SQ8oMcfvn?ND|IIq~HirP4^;=|q5?1v8bmCg>sm{!~ievLigB!6BTQ>9}sy=P
zxTTGo_z$Qoq4g{dN%FKM2%w-;Kv8rYt8fUDU(Z|r`2y$Tn~Tyf_WIr$1g_w_0N1vb
zqmC77D%eq-mQ3c1Ch<%C0Q-aj<~{8$gmvxAR-sU}0vmmaJ6kr@6VaA)G?lKV%gw2I
zhzfsL6rkSLd#$d%hFT|UGMf>EdZghPsIRB3XlnM&s(R}m%No%q4=q|WIC_8F7(%9o
zz6a$3RIT^D`z|d%6(IWG4U>e%9mAghSvyRPerB
z9-RMsa4qRD5YJxuX!xY%6u>J5PR=fX?x+~t=^||U2E9>%EbirDO5EXnklR5CE6Iwy
z%8Ee#s8{yXVDd
ze9b8&Z?5I9+S(zI$)owkdbnu(;~kk=*JMY{s~6LurwFaq_>;IjfEl;b8*t+3x^pS5
z#Fy6cyh~(>_EPJkD3)s!gz>0AIboF?gSZ`SW-VRzYF;&
z+ZNm^wLxQ`+{=bf8k6XdLvxv($y1YufNP8v4K9O`F!6*F-<7m~p|Lk=?bLe7QXysd
zRxLcDE*)+Wy(h>tJFrIYmD9l+wG{n|;VW)iCwYo7Ytp;@Gc#f>uT>!Ns$5ahJy3H=
zE}s~iYrIPgc)lxVd3F9=+=1_3@*hfd&*$rXgrq`!4O!8bxALh@ytZvcNQD+Tu32pG
z4Ilyp+GRGUiO5q+c$nPST*kzaXD$s7GHdB{=ZHF$2(3ibt4eARQ;C#IKf$E$G_L(L
zDLyz!NqFU(Nv|B@SLQu)ubfOvKhC($8G%)EPtOlI>xBFTg)04iPp@uK@L4m$YX{F`
zq<_G92uU1x_>mw_KtcCoL;KmmE0WmX4&0oi@b?W3OxlOw1PteZj7LwTo}@|7dnZ{*
zBZmppS*HYEMvzBu{x1dSh1pCMf8TmAYBM4NJAwT9hI#B}l$N1p^`{?tL3z4HMlxbM
zQlB6WW3TZ$K@hAV%VS{5k6zFx^kF|?OCj6`TQvPQSzdFt?dGl-L8kG!S*Ntg!+O&-
z^|f-7wxR0sJ;oQhndQ}6;253l`n1IeYcBW*mAPjkb*+u{nh6?fHp5~pZP*P4J!Kh*
zD)Ez2^Py%&?jLSz)}`Eyx&-dM-=_&VT*Fp^I8Fh)4r8(KHt7C)m|$rsN3NMW4_yDJ
z&E}W2o2UpXVDzwb5AEDix_+C-ca>9Q#YFg6b}AfE@W2-H!@WK2>3C9~^h=QVcZjR|
z(VWzdQ2jpMnumPg;n9gMhQ~Lk?P)}*94n-&X8~YH{p#!rQlfl=lhg&
z^YdHOzu!9q`X!!Dh%^FcfBU&QF_uVyr6&T5u~E}(1|m4)5YEBbl%yk6kVzHX6XrO4
zx9X{}`YP5qJ9HU&^nnrPV3+ov{J7JmI12$D|0$CcrDswi();DD8e1ELvoxu2n^*RW
zFEMOdtiL{fL;Bdm$bZG&xvfu*PELb}BmbnR
zN3bN}>6uY)1<@B!a%s)XpnyL{FE9t0RTLd`KbgTVxe<7?f!ws3tLPGzPO#satTjNtAzS|UH>Gm~=t;<&e?>a>^$lHXg
z^(jdP`^(RMo!*3$IYsPBEA1&NmnxwbPdMGAoVC3-{9(+2Uv^*pX!oulrTfoKzc2kf
zsP8@!c@L+^i|04+dceKjk}W@cD-9=mizm(b`Z|>sM|I>Ja)E9K)K#F>1|*Ivhi`G)e2f#pw_b%WTPoj-^Rg*QI6lI*1
zeH+YB>|X+d*M7{gw@|R=T3C&}WeS4fQ{uteEgYSajWQenYf@byG~i#cT|y*JnXlrG
zyD<%mQM?>r{ya34IiO7}_E&>6J6l85`wzwqE;M#DmJN1jSq)jHUJ-Xtv<76V!Q3p}$W
zX)Z_L*uSz!l`ak7*D0?_v|qsz7|h*OFt&4O=ea@j`1*k%_j|AZa7)ZwhOZu_+)kQ<
z)PyBbok6Th7(EGsZL>OQ2<}R4%o?lumIChu&*{X8R=-+gMd&unrVsQ|>Y~D)e_?CB
z8QRbA=mFxVAW;Zuf*GMX{NkZis0@JcX8??0_spLwcFEF-YC3Q}F`3gW94Q+W`MP8;zt
zjeGziXGl(pF@x4XlUmg0ltX$tN`uNw3njqt9l!Db<^9=Z^V`Ud_Xy;jL*L~CLU|R<
zl?`a6j@pTWaCr4qDyx_QDAT)ic*nBRu8u1mBilY}Fr
zf93qm?Tk$bYKxKc#^MByqKO1vD{g@GoZ7t@}lxepi@tcGf1b>nYZadeN
zK~N9|0QwxLw8}~}C<;71#QJ@nX)GlHW0LeMjxa5g{qn5dvW5yeI=*&{R@QD=ama|;
z&$^V0pchGkU%6FI@K3Pt0`hrbABlS{cXFJXrCqAIu1RElWmH!aq~@2JB6ln5_3!Wg
z{6`@@EzimpT;;RX=WSK{8AqKGoR(xQG?yYmci_7Q9WA9bt2&KgdMcK`QqCcd{x%E8
z2ORH?sIxZPmR+nWg+GFg=7T;XI*8MiXd`a7mJ{`X=c3`%WUTof9=i
zw{}@L4?(wzG+Pqin1{~G^e
z52XHvJL%qZqmx2YozrJ^Bm27p?G)JV`%%{^2C8}c&o1w^yJVCp1fS8I?V
zzy&J`!(rS}CN6R)w|DL`dlu|uk>IU*gb_w4Vs(ND`p}o21=v`6>*-)q
zk%Zt1q16hnj8g$lb09Av(n5Eh`9=p+8eC9?G&Rv=0v>sj38iBOr3Itk=U)XVd&d@n
z90+FStiFrNf>UAC!RmTf^8K3;I=;pKEUiK>5RjAmgapv&+NEm2$MEnkrf6z5oF0wK
z&4c7WEGBb>p3cntr*YtRy_bZmY}5Rze`Dhk9rjG^udSTm
zq&;&8>E&Qd98^A-unRkI86+KqNll~`gFTkQKv624nZB8m6SfuYI#htZH05oB(yw^=
z(EStU3cQUL&>YsuA}+$Xt}fB-nJrJIX)-r3^dF=%y(O{lFd1vlgunO~XeUtNPKE
zl~gOVY4a3X#{-^V(Y7(1e#JAsOU23VLt`__spf9rohDJgg6QnX){8uvg#lse&EyUP
zp+zzF0U-to`4R7Q18y;j*FOK?+hUVqkdm&0q68RvV->F?j?UQBqEjMoO`_#BIT)^w4@opK*ejqxl3al(NaM
z3|=^O?`vrVLhp*?xW_O0&+lI~lDae9Apy%DM+&xqjoJVI1K$I0KVH^H6wiWf)=r3S
zx$!zf&4B9{6YOk4-klD2at>H=uJ@9>8hrC?b7Hlgp~fp*-)H~Cf|J{=PR5A|hqtnz
z_b|`F3=tc4(u;q^RLD)V7tjNEDZuX%*Dzja!WkDw)HE~@_PD|4LR~j4nS8}PB+tpY
z%WmKQ(RZ&bN)Pu|x%-5Z;zb-GFcfJD)<;C(vQRC*y8c-kQAVTz_?_YU4sE3|iIETg
zvvpYSh~H*PIW8!nRU51+yw-ePCnhh)rXzL-C#b_7~GWW
zq3Xk!*v2i6S+_-@n--ZpB`9U*_Sp&bm1-mHq3@wjGM9r@#m{oG4G3IX8O~qa+#>t%6x92XONN~DS(&?J-pJ^6tJcd@Gv+Ulyn^SP`sp+ppNje)k
z*Pdm>!QDm}2mU^K`;zQ|JE;>nvF`rRkAtLM!l(k^3FhwAl^=hglL(DXKXyCCy`>MO
zUrFQb(urXe)WFBuaXp_p+2yAQd$-|f(Fp;-zECEjx&JNhd0NwTWB
zBAMB;3tMa-^``=}tg4;}Q$sy^{^64RV)`|DNWrhFL%R;2FE@U0TJeKAKI$s^kkpd~
zo4xl>iu>G`s5*6MQ~JU-|L}|sm1%X`e=g
zP_9}wNSW>+P7!yH%x^M_GABN~9|bUW!%;v$v9aU~$-MrB~5k
zUMh!*|G)q`Gry59sAl+iuo
z#;w@b4Os61P#u$UA{}g$)(39q^B>&t<>Y;8N2uxG=7N61U6mB#^de^ozL+UhSKueG
zunW}Bf8|*`*Ph&|ZhSS*QDr;naNMCoup4)7+DLqhn>D6w2Xt(QG>4555?HuBvj|Sk
za_bjb70hiGl;N2Pxat6f^yIG#510ztH~S%fkDft#cVG2+h@%8yj-oL7k50@8gH>@2!>j5?N;k#kvJ_|14$IPQBU>U9m
zJQ%*g8;(*RAel&+MjEw+F>?+@dw(Nyr5!_eXvmihOMp!CCUZn)IgmL7fG`d7OF
z?ab!=Q{wODUS2ta&gEhlPeSrU-zRH`F(Cg{Z}1)&wjH#?Dw;1x=XnNXdX+UWQw|O-
zzk6Af>~qV2qT18bL+{8nkt7&~?~k_SZw&}xB{*en8`kM#jvnx&bW{lEUaH(Qd%EWA
zM)>h%_y%G@q8)A@*d+jme>uf^H_v#lCYU-C}6$8gNAZ9<<(^M{T+
z^yKzF1&5Fx*f7q$-$1H2cjLJU?0~;Wp?`)q+$xw0#My)txp_14(guPn0yw9aT~4*R
zjbGCISM2Phbl+rM0x5Qd=G*(SG3?ozmruL$Y$5y3fV{&ueczU$z}jXf*8x4;IVMwq
zKP)%DM>@LF1Rjf4k8;$B+H=dM(I%<*S1xkq7Jn7`H#nL`n=w2(7j3!n0_l$;^C6Hq
z?&J;qNq00E`Sv;$%dCsVN35v4u>@s<>yyWJ5Ysj9ZdL0iUyjmeWEN+>fUEdc|8@^
z73E`NKOnil5>LRN<_&|9fzjrjPrzKwUTCfNlM?Kc{BM@mIG~=}iiy_hGZs+B2nGHG
z?h8afs&-8YT#NB8XLcHvGI40aEjPvWCH+evLepcx3mm{&$NU@9;?x{^#^N5jqjIU!R@j&oLy{4=e-A
z#}f`*75gt^_5bG{ix5Bm6(jw(>fnP6;d!nztsS!ioBDCX`v?#5;wDe+?Pdfv{^RCS
zZxq$FKwk5q)nX}Q?dZ3gQY}0PWDBl}It{tH>{{9ZA*i|#
z-XAhtB#%qNc!zVWdEbW>bQNO^kMy~EBnoVvU7&tYp!{~bAi`xnS?%t2JNR3EqLu{c
zxV*1>1Ujt9|B5ZCnC8ma7&k^e;cVGDlEWFjte%Nfso4+jVa03*!D-YO?Rc_QcQiJo
z0y6u@&4Ukh{#A+a=0RUrL$Hw{;JAxq$Nl=E_`FoP=m-zrQ2dJ@G5w;BJX`i2h7tF2
zc;%=eH`U;J^VBKc%04`EvIh1tWXy0M5H{`l7!%TSVc9~;5SHPQbSd@vpibIN%0O*{
zi3uhC>Y!iRvv^BRorp*
zOam7atHou@EJ&J^4q|2~^>Of0y}*RGuhf5tTTZ3vs_EP`;$-XM?=MIVDAG
zIxNLnAK!|HauHD`((w~wTLpN%0E9eMBfpoE;0-$j4149U{?tCstgLE*@OJ(KUO*se
zI!zyKa(5`78tfGDnN6t=*JlLs#n)F;kKDYo{n7q6ojQ;g{|UI^tS}G>v}%*2c1Vr?$G*5bIsrbIvxaCR~j`FbQgKuiriI?as_?cCxQ&`c8;e(a2rn~GW
ze+wt{*U;r@>)LtYt*yskHWfyi&^E%8=!8jN`_`eLh-$y(m1&F^uzi{NjTJzXNn1lj
z9w+yN{#7v)`5U4G!IEwzOhiIjS&{KuX%{FSjtPnBkH5Cose;Gs4}#FD3j=^6X`{
zC3$ilEcY)j!7euddn7=WlC;-%2B$Y+!itNb>u+!C_`L}J_V_s!2Sxd)hcn}J3x8Jy
z7It7IPLD_RXoUC5GeU2~qi$Ny8=XCBw#%)3yU~fajWOqrhP}D?hNUt3JMim?uR-qS
z&{z;Bqcnk#Uf48fH~`bT>X<)YXZ|+m^R}1HD$TD~cVN5wc3rhWm>4C{q5n*RWFViU
zIHICRAGpTG#Dt6!+Mw0abm=HC!({kbR-5lq^tnW`
z&^&>e5aPQlEgv3pS8=0yFPFrM;2-0MTgY+x