From e346f5661a3f05f3b7463f29f6a8fbc2fd57864d Mon Sep 17 00:00:00 2001 From: Daniel Siepmann Date: Thu, 13 Jun 2024 17:42:43 +0200 Subject: [PATCH] Upgrade typo3 configuration I got one project which uses helhum/typo3-config-handling. I therefore needed to adjust the config to return the final result, as the package expects an array instead of globals. It also loads config multiple times. I therefore needed to remove require_once and replace by require. But some code can't be required multiple times and was moved to dedicated files with require_once. This package prevents writing back silent upgrades, I therefore needed to clean up the very old configs for TYPO3 < 10. --- .../AdditionalConfiguration.inc.php | 30 ++++---- home/files/typo3-configuration/Autologin.php | 65 +----------------- .../typo3-configuration/AutologinClass.php | 61 ++++++++++++++++ ...{CachingConfigurations.php => Caching.php} | 29 ++++++-- ...FileBackend.php => CachingFileBackend.php} | 0 home/files/typo3-configuration/Database.php | 28 +++----- home/files/typo3-configuration/Debugging.php | 6 -- ...nsionConfigurations.php => Extensions.php} | 0 home/files/typo3-configuration/Gfx.php | 7 +- home/files/typo3-configuration/Logging.php | 18 +---- .../LoggingUriProcessor.php | 20 ++++++ .../typo3-configuration/SystemSettings.php | 9 +-- .../client-specific/ClientSpecific.php | Bin 814 -> 904 bytes .../client-specific/ItccSteelnet.php | Bin 0 -> 256 bytes .../client-specific/Sac.php | Bin 2868 -> 2786 bytes .../projects/customer/itcc-steel.nix | Bin 508 -> 651 bytes 16 files changed, 143 insertions(+), 130 deletions(-) create mode 100644 home/files/typo3-configuration/AutologinClass.php rename home/files/typo3-configuration/{CachingConfigurations.php => Caching.php} (69%) rename home/files/typo3-configuration/{CacheFileBackend.php => CachingFileBackend.php} (100%) rename home/files/typo3-configuration/{ExtensionConfigurations.php => Extensions.php} (100%) create mode 100644 home/files/typo3-configuration/LoggingUriProcessor.php create mode 100644 home/files/typo3-configuration/client-specific/ItccSteelnet.php diff --git a/home/files/typo3-configuration/AdditionalConfiguration.inc.php b/home/files/typo3-configuration/AdditionalConfiguration.inc.php index 8ef008d..9dd3660 100644 --- a/home/files/typo3-configuration/AdditionalConfiguration.inc.php +++ b/home/files/typo3-configuration/AdditionalConfiguration.inc.php @@ -1,18 +1,24 @@ = 10.4 -if (class_exists(\TYPO3\CMS\Core\Authentication\AbstractAuthenticationService::class) !== false) { - class AutoAuthenticationTypo3Service extends \TYPO3\CMS\Core\Authentication\AbstractAuthenticationService - { - public function getUser() - { - $possibleUsernames = [ - 'dsiepmann', - 'daniel.siepmann', - 'daniel_siepmann', - ]; - - foreach ($possibleUsernames as $username) { - $record = $this->fetchUserRecord($username); - if (is_array($record)) { - return $record; - } - } - - return []; - } - - public function authUser(array $user) - { - return 200; - } - } -} - -// < 10.4 -if (class_exists(\TYPO3\CMS\Sv\AbstractAuthenticationService\AbstractAuthenticationService::class) !== false) { - class AutoAuthenticationTypo3Service extends \TYPO3\CMS\Sv\AbstractAuthenticationService\AbstractAuthenticationService - { - public function getUser() - { - $possibleUsernames = [ - 'dsiepmann', - 'daniel.siepmann', - 'daniel_siepmann', - ]; - - foreach ($possibleUsernames as $username) { - $record = $this->fetchUserRecord($username); - if (is_array($record)) { - return $record; - } - } - - return []; - } - - public function authUser(array $user) - { - return 200; - } - } -} - -// Autologin if ( class_exists(\Codappix\CdxAutoLogin\AutoAuthenticationTypo3Service::class) && ($_COOKIE['das_prevent_login'] ?? false) == false @@ -73,7 +14,7 @@ if ( \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addService( 'sitepackage', 'auth', - AutoAuthenticationTypo3Service::class, + \Codappix\CdxAutoLogin\AutoAuthenticationTypo3Service::class, [ 'title' => 'Auto User authentication', 'description' => 'Auto authenticate user with configured username', @@ -81,7 +22,7 @@ if ( 'available' => true, 'priority' => 100, 'quality' => 50, - 'className' => AutoAuthenticationTypo3Service::class, + 'className' => \Codappix\CdxAutoLogin\AutoAuthenticationTypo3Service::class, ] ); } diff --git a/home/files/typo3-configuration/AutologinClass.php b/home/files/typo3-configuration/AutologinClass.php new file mode 100644 index 0000000..62170fd --- /dev/null +++ b/home/files/typo3-configuration/AutologinClass.php @@ -0,0 +1,61 @@ += 10.4 +if (class_exists(\TYPO3\CMS\Core\Authentication\AbstractAuthenticationService::class) !== false) { + class AutoAuthenticationTypo3Service extends \TYPO3\CMS\Core\Authentication\AbstractAuthenticationService + { + public function getUser() + { + $possibleUsernames = [ + 'dsiepmann', + 'daniel.siepmann', + 'daniel_siepmann', + ]; + + foreach ($possibleUsernames as $username) { + $record = $this->fetchUserRecord($username); + if (is_array($record)) { + return $record; + } + } + + return []; + } + + public function authUser(array $user) + { + return 200; + } + } +} + +// < 10.4 +if (class_exists(\TYPO3\CMS\Sv\AbstractAuthenticationService\AbstractAuthenticationService::class) !== false) { + class AutoAuthenticationTypo3Service extends \TYPO3\CMS\Sv\AbstractAuthenticationService\AbstractAuthenticationService + { + public function getUser() + { + $possibleUsernames = [ + 'dsiepmann', + 'daniel.siepmann', + 'daniel_siepmann', + ]; + + foreach ($possibleUsernames as $username) { + $record = $this->fetchUserRecord($username); + if (is_array($record)) { + return $record; + } + } + + return []; + } + + public function authUser(array $user) + { + return 200; + } + } +} diff --git a/home/files/typo3-configuration/CachingConfigurations.php b/home/files/typo3-configuration/Caching.php similarity index 69% rename from home/files/typo3-configuration/CachingConfigurations.php rename to home/files/typo3-configuration/Caching.php index 4e00801..2f46c68 100644 --- a/home/files/typo3-configuration/CachingConfigurations.php +++ b/home/files/typo3-configuration/Caching.php @@ -4,6 +4,8 @@ // Disable some for local development // => Done inside Vim, Vim will delete some files after editing +require_once 'CachingFileBackend.php'; + // Extensions $GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['thuecat_fetchdata']['backend'] = \Codappix\CdxFileBackend\FileBackend::class; $GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['thuecat_fetchdata']['options'] = [ @@ -27,10 +29,16 @@ if ( unset($GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['hash']['options']['compression']); $GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['pages']['backend'] = \Codappix\CdxFileBackend\FileBackend::class; - unset($GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['pages']['options']['compression']); + unset( + $GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['pages']['options']['compression'], + $GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['pages']['options']['tokenName'], + ); $GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['pagesection']['backend'] = \Codappix\CdxFileBackend\FileBackend::class; - unset($GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['pagesection']['options']['compression']); + unset( + $GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['pagesection']['options']['compression'], + $GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['pagesection']['options']['tokenName'], + ); $GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['imagesizes']['backend'] = \Codappix\CdxFileBackend\FileBackend::class; unset($GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['imagesizes']['options']['compression']); @@ -41,12 +49,25 @@ if ( } else { $GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['cache_rootline']['backend'] = \Codappix\CdxFileBackend\FileBackend::class; - unset($GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['cache_pagesection']['options']['compression']); + $GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['cache_pagesection']['backend'] = \Codappix\CdxFileBackend\FileBackend::class; + unset( + $GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['cache_pagesection']['options']['compression'], + $GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['cache_pagesection']['options']['tokenName'], + ); + $GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['cache_hash']['backend'] = \Codappix\CdxFileBackend\FileBackend::class; - unset($GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['cache_pages']['options']['compression']); + unset( + $GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['cache_hash']['options']['compression'], + $GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['cache_hash']['options']['tokenName'], + ); + $GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['cache_pages']['backend'] = \Codappix\CdxFileBackend\FileBackend::class; + unset( + $GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['cache_pages']['options']['compression'], + $GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['cache_pages']['options']['tokenName'], + ); } diff --git a/home/files/typo3-configuration/CacheFileBackend.php b/home/files/typo3-configuration/CachingFileBackend.php similarity index 100% rename from home/files/typo3-configuration/CacheFileBackend.php rename to home/files/typo3-configuration/CachingFileBackend.php diff --git a/home/files/typo3-configuration/Database.php b/home/files/typo3-configuration/Database.php index 6203a49..5e2d637 100644 --- a/home/files/typo3-configuration/Database.php +++ b/home/files/typo3-configuration/Database.php @@ -1,25 +1,13 @@ $GLOBALS['TYPO3_CONF_VARS']['DB']['database'], - 'host' => $GLOBALS['TYPO3_CONF_VARS']['DB']['host'], - 'password' => $GLOBALS['TYPO3_CONF_VARS']['DB']['password'], - 'user' => $GLOBALS['TYPO3_CONF_VARS']['DB']['username'], - 'port' => $GLOBALS['TYPO3_CONF_VARS']['DB']['port'] ?? null, - 'socket' => $GLOBALS['TYPO3_CONF_VARS']['DB']['socket'], - 'unix_socket' => $GLOBALS['TYPO3_CONF_VARS']['DB']['socket'], +$GLOBALS['TYPO3_CONF_VARS']['DB']['Connections']['Default'] = array_merge($GLOBALS['TYPO3_CONF_VARS']['DB']['Connections']['Default'] ?? [], [ + 'dbname' => $typo_db, + 'host' => '127.0.0.1', + 'password' => 'dev', + 'user' => 'dev', + 'port' => null, + 'socket' => '/var/run/mysqld/mysqld.sock', + 'unix_socket' => '/var/run/mysqld/mysqld.sock', 'driver' => 'mysqli', 'charset' => 'utf8mb4', 'tableoptions' => [ diff --git a/home/files/typo3-configuration/Debugging.php b/home/files/typo3-configuration/Debugging.php index eb31dfb..b598102 100644 --- a/home/files/typo3-configuration/Debugging.php +++ b/home/files/typo3-configuration/Debugging.php @@ -1,20 +1,14 @@ addData([ - 'URI' => GeneralUtility::getIndpEnv('TYPO3_REQUEST_URL'), - ]); - return $logRecord; - } -} +require_once 'LoggingUriProcessor.php'; $GLOBALS['TYPO3_CONF_VARS']['LOG']['das']['writerConfiguration'] = [ \TYPO3\CMS\Core\Log\LogLevel::DEBUG => [ diff --git a/home/files/typo3-configuration/LoggingUriProcessor.php b/home/files/typo3-configuration/LoggingUriProcessor.php new file mode 100644 index 0000000..686097f --- /dev/null +++ b/home/files/typo3-configuration/LoggingUriProcessor.php @@ -0,0 +1,20 @@ +addData([ + 'URI' => GeneralUtility::getIndpEnv('TYPO3_REQUEST_URL'), + ]); + return $logRecord; + } +} + diff --git a/home/files/typo3-configuration/SystemSettings.php b/home/files/typo3-configuration/SystemSettings.php index bb5287f..a00805e 100644 --- a/home/files/typo3-configuration/SystemSettings.php +++ b/home/files/typo3-configuration/SystemSettings.php @@ -15,10 +15,6 @@ } '); -$GLOBALS['TYPO3_CONF_VARS']['SYS']['clearCacheSystem'] = true; - -$GLOBALS['TYPO3_CONF_VARS']['SYS']['curlProxyServer'] = ''; -$GLOBALS['TYPO3_CONF_VARS']['SYS']['curlProxyTunnel'] = false; $GLOBALS['TYPO3_CONF_VARS']['SYS']['proxy_host'] = ''; $GLOBALS['TYPO3_CONF_VARS']['SYS']['proxy_port'] = ''; @@ -56,3 +52,8 @@ $GLOBALS['TYPO3_CONF_VARS']['SYS']['sitename'] = '*.localhost DEVELOPMENT'; if (isset($GLOBALS['_SERVER']['HTTP_HOST'])) { $GLOBALS['TYPO3_CONF_VARS']['SYS']['sitename'] = $GLOBALS['_SERVER']['HTTP_HOST'] . ' DEVELOPMENT'; } + +// TODO: Check readme/wiki and use provided key for project only? +if (isset($GLOBALS['TYPO3_CONF_VARS']['SYS']['encryptionKey']) === false) { + $GLOBALS['TYPO3_CONF_VARS']['SYS']['encryptionKey'] = 'some test key'; +} diff --git a/home/files/typo3-configuration/client-specific/ClientSpecific.php b/home/files/typo3-configuration/client-specific/ClientSpecific.php index 0b66fac4d0f54e325316d1c8c3c6d385537db2f8..f337b314197acaa95b2fcdc0799977b6342e2e08 100644 GIT binary patch literal 904 zcmV;319$uYM@dveQdv+`0K5sif-9h6F#L1`zK}iICagoRH9spkAH&XFaYrO?ROFZ0 zT>pm=Em{sEtkD8gX<#@WH{=G*gE)w@InVc{+;4>$USXz~-pip7UBKpES-t*DDajT2 zD)rM$2-2&5rpBo|itY(93*92(4JX;6Pf|J(JRVDQ%~X@=*1A^;%k#S1VP21M%*7Rr zVfDtJlK4El7;YbfU~+czrKE50F6mi6UD`2Ff*)d`1HcmkeINmZY>Ab%6@BBUjFGvS z=y!z_@=a940gG`n#!NK9sPrdFk_L=-HtH%c0Ff^>);r>_qpP=d>TPWT>C)psip?i% zr?IcLebc^pDVL8CbY~#)`bJb0EV@w)o2+3kCD|ocb|68B}YMxd~p3SqZd_! z#puzsJPBr)ARXV#U<=B$YnS{pJpjp!fiE}Ey}-#Xq8rFpb6J{C9JA^O+82?Dr!qe<ovh8sO~u6Zs-VOr7UyNSYKd&=X*zc|F(lnMff;t|d*e*R&^Z@j!f6cVsgB>h1oqL-UbL~aZa z8p0SF_x4BvDu26qhQns+v{-a+`4i1LvH22P=eNHib_EG?NuU#>?|Ni2%&MUxY-Q;H zliJw|2wjXo+XtA0I|VO26QlgAR0vL2*OG0%>7fHDoLoESBt;;%pr(y>sD)tI^Le3c z*VM=){PAl!8CvPHs6_>}B9GgNyv&$k5_|A(b$WOnC7iD|CIpb{2b}6)8&jnAdJIk^ z4nQTUIjlj^2Sqb^*9|m6@N7!i43-lUqx9(orU0NhKI0;c*KU(uaq?R~FE7Jyl^Zt5 zx5Qb{CQg;q#LZ~8qgah@TrXgt$)&e%cEBRnZVz_gfAZUN-w{|kF9kV}85La-^aKwW zB|fMPtpOPY!s)zWUMhlkv5I7+ny7IJVH{$P#LI)8fph=marO{w0H$pIKDGR#^b@p7 z>duIDV7L`$ZO)ik@vZ^bA>U@fIMFT^z3>{}?Vkr0=4HAe{_Yx1$%5SOPngR{=ZFSD z8&_x^Rs_Py0htBlXXZ6>x@w2Z&_)YlA$Ano;WFc%eBxTTdW$6 zS2N>=q(4#jmIn<G{^QTuy zk0+`TmbrsVhQ?!@rg{LI8q|P6l@cZb&ALHuR>)Mn!a6Nli-z7;L6=We+pi}%oNy6w zZ^6*PxrGLVsq5O@=bt;H;7-O(cM8l#V9M5qLcEmYYLdMKy_j0FRA-xJ%>jvyZRZi; zC%3(kihGhP3p1dPIE`*pu)bSRI4|$fVrd6DKeboR7j2QTg$sdiUlF~zRjGC8_yRD6 ssajc)EMaC_Fv^4x@AwF>%uh3wm_mwaV~x_Gb<=)+swoC~@LsSkr}%n~_y7O^ diff --git a/home/files/typo3-configuration/client-specific/ItccSteelnet.php b/home/files/typo3-configuration/client-specific/ItccSteelnet.php new file mode 100644 index 0000000000000000000000000000000000000000..20bbe991728d3b8b616823e978a700ef3d62e812 GIT binary patch literal 256 zcmV+b0ssC0M@dveQdv+`0H50SXfE$3<;!(M_7P`iiHMvnssdFias6V<2Z#AMY8{WW zX!xy1c~4umJZiO?yCS&eJ#y%%Oe{*6AGYX zb1bHQq!H7;EEex>bgYDfLueZ~=Ec~eaEYVtZ&`Ey#}Gdf5oLKsQCROQ3BV>^7?cNG zkr@>q;pPx92A&3*7x?hv=~hH{IoZ65aYQ$2us`JRc9) GFjhdG%X8!a literal 0 HcmV?d00001 diff --git a/home/files/typo3-configuration/client-specific/Sac.php b/home/files/typo3-configuration/client-specific/Sac.php index 8cb9007a7d9ea29aeb11dedcb6113b45d7ef2002..4e1cd5aec72bfdb152a4651e6e478299bb9cbda2 100644 GIT binary patch literal 2786 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 literal 2868 zcmV-43(NEXM@dveQdv+`049c!kA4A2n>k;eCboQ>Zfg1}%9JLkLpu28NjzQHm!LV{ zuk8)la#iLhmBSo9`XuF6bk@nmsoy+b}%r9h2pVq1FZGIR^H z6?8bv!Z5;AH(?Y+yPUUBPTCLZ@VUMTeDiXSTye->uG)OpY6yKU?B9K^G?y07}Nw^Cg5o8srOxreHpb)I0E=tOvB43Dtho>7JA zwWY7K;BR+~HI8!)qRSI~qQL@g;ga&Qv=BClUB!x?u$U8k^1zzG48?|GAX_ankHkfB zIPc|6cY5_^ahdYOgNFOWr(to94!jEta`IAE%PMpDcbnzC)Ih~1>75YckFwyY+=cj; zRs1X*+&aBR%5XIOcXKTmPdZEz3SR`s+nsJwCkI8~i?msT9nY;jCamdmw|-7KnnDc%KhX_#m}#K_j( zg5U1-_5)MUOb%?ZqU>5gn=Oz$gIcisM?2ZMAr@49r#Iq}0btZ+ZzEcqWmHdS5Q zb@zV(vP|auk*L2zy0T$1Yrok4C8-fx$}m=#N>Wp24{8Ygb1$L0?9yhmw*OD@&$n+| zB_?4#yw0;yv5lIxCY}e&D#x)jDr82d#XY;B(-^`*Mnb^0G<{s=3y{%Fmr%mPkCiINY@WBg~*Aw#XEE$># zZ6WrRelVGVEe#POz$8RkekZN{b6cb>d03_dw^aks6>LsoqLe(PO*@N~0WM782j`}6 zAHnb$>~CXjg;s%W4{7a8dGpmy!knQmLwcz+MbEnq=-tiE)U4zjd@CAs@8Ak>=1Pw7 zeiRb|&es}(o=ONRH*r?Ny>UP2ORV5-brxuM6YUv=;oa8R5PriMFAMPK4+ab}sn!~v z6eg;-u#CJ_o6rv<0rXF;HDCgGqu0m$fR3%B5`2SIX7OHXyK>K*!I1${D+`B)9N&tn zQiLjW3V}k-@~CYntw=kxuas{M+@Ecec-BV1VX|8uj2)u;8HiEfj=M%jS#cGBA zI}FJ21@d=dfSZvc4{(}p?|x|W6zLkRRA6{N-hSMj&~s1gi${f;KD((@8n1D&D7?uc zDY52pa1F7*QR3KIFqn3NQ^J-y0u}F}I^msD%fA!53CVoPHO{uTur&3>I}n7RlqzJI zxKa1nxKR+mPi80b|Ki!{Gq69Cwk6;0H|j2CP?$<;?6U#batlgUQXY4lLzT4Vvlo{W zIH2gmtj9eNQ>x=VVFuJZ0@i%XmAyDeOu#NywO+i!HON&^+>~Y!{d-aQu?HLJJadWF z&v8bFrTp6@NL~AV7?TBWSzDYdIa4y#B}^`D4sXszF8NLK_S|Htmi#*xnJ%ZhRIz1+ zV287r(Rt4{VHxt1C8V_rnz8ehKzl4czE|&9wSFk72yZ2ZZ6V1I-dL44GW{PgIf`Gt zpRikxn0Vh!FQ-3)`Hb97e)s=JWbt`azHDl{;I#nMPJhO+vZH2gvkH<9;*%N4y5vwP z!C!yZIsvb(V`k6yOhaD^6b0%MlfHm<)SKAE$rt&ZuIEls)_@W7sq{iVVW5imD$@2y zCA1LA_j_^)F{uH0m3cwCrsv-#F|&CAZ5$Z04F`l?u8=O1rHn-T&J-z{)c?ufgmMIq z-S7On>A*SBC{9;fzAoytilF(Ov>3pOcJ;LyR`^N{YrcsttmxU%*QAa>El}&Nl9@9Godl*8L(62mwP~n&lE>rx&)_ zZO@ZNNLIlYDkffAiIKe3T4H(_)#pQT zKOovRw|?4o@cZfziwrkkti2}faL+k(ysE*gok?}}v9p6FCctNa1dFSF!y>MA7r=ftK6k#I%6&)nZb;kvYlQ6q# z0YPu`1|~u(BGzf9I(4U?LrDD~=c(cWKq%tgzQhk^pQ3hqF||GAttR#2#UEA=wTj@N zYT8~Y*C$*bx>1HdNZVr{#eYGx#6LDsR4M#DVu{G-i=7G<34ACn)}W$gBaL90N3q}q zyC3#8cOYuUN1Me-7$gjLxAw^Kj_i#rSalBX^Dx;oKE#?n zYEI#)$LtuD#85R^N9VKSL=cl9e>8{C4zL*F8ls=csS0->^!nsgL=KLMm}Dot3n)lW zG13OgGV5Wt)I*$Z3m2@$cZ;6nLq_sY`3}m%1L#3#$xw!_O;3jl`7O z6n;(m5zdmw@1S0BHb%rOzreEld0`08A*D?QeLGk5So7u;UUfb6uBR+)$)nA^Bt_$$CB7broF<4`~aSx;MoY? z(wc?3ZymAfhVl|cj^LVf(Wg3ePXU2G zI&0hE>dzSb^S@SJ%57?(g`k&_y#dw&{_#r?V~q7Z;?TRTj-x%p4B*p;z(wl3_@f~n SPx4f_Hg>u;b>+nmpkB{K$C9`J diff --git a/systems/hikari3/web-development/projects/customer/itcc-steel.nix b/systems/hikari3/web-development/projects/customer/itcc-steel.nix index 08bf4080dbca5ac3c22114cfef81a140eefbcb94..64244c027af3cdff7134d6655f3ebe80f059d257 100644 GIT binary patch literal 651 zcmV;60(AWVM@dveQdv+`05ox2nnPkUYFd<)0bZ*e`NrCtfp2Q8sjiayK*tVO{FX{e z2!Yb%#HK5}ZybJoqg_2n+7y1$4pdZ|%CQ7vRGw}WhV_)ZAVD$$&AAlHyPGViE-MDO zsaz%A5rQMKv{5l7f2r3g5k9%ge@Z|D>NWL&Z^j9Pq^2NbClV%o|GiX!unvnw?!>&- zJ_%6Mj{J7P_WBrR4MO=ZK|7nl;e+JDJim(?z(lJSZ4J&oMx;nOYZ1aR(P*ZcBS=b z&4TOu&rH-m8ewdCSf_|2e3CI9m(Fs2z?EQRrO{clWx13D6lNggc`K6ztesN8yxpM? zoEDCoG~uk|osXVp;-#oiz!I2eKJ1Av^}TvmCr&?*g;5gA^-WLWXA8Xogtcw%!mGbFJ zroxsLvz%=sM*K7|Db~t7q{6{T9k2(ItNKH~NLE0vn-uN8kqKMRGf?NzJQU<$PTtP- z>6z6C=aB)aPNU{ zA4PZ6OGgGx(|MA~^?zaxKBk$RZDqOrfnaZO+-BZVu%x%C{SZ0$ le!|EUJ?i@3u1}vb8b`U0*4;f9s6mXy^7*VtI~cb?zwY&kNuB@z literal 508 zcmV#bUK_B=E(~cz*zc&y zWTskk2T8!1%rSbV+R2a73h!jfw&eynyTOtCPENOCpSZ(F1RXUQsXi zj_2(|O-($<7=j+@ll&sRZ23m*n#Bx<`{ufJ{R*BfXtWtc@ y&wLvFhNu$-&XXGfcNd?lRf8j(5S|>kvTcwzWSkxvBN7eI)wBpMu!p