From 340d053a487305b52e11b3537e3fb7ff3d942318 Mon Sep 17 00:00:00 2001
From: dgelessus <dgelessus@users.noreply.github.com>
Date: Thu, 10 May 2018 12:53:53 +0200
Subject: [PATCH] Add Gradle tasks to create and install the Jupyter kernel
 spec

---
 .gitignore                      |   3 +++
 build.gradle                    |  35 ++++++++++++++++++++++++++++++++
 kernelspec/prob2/logo-32x32.png | Bin 0 -> 3004 bytes
 kernelspec/prob2/logo-64x64.png | Bin 0 -> 7077 bytes
 4 files changed, 38 insertions(+)
 create mode 100644 kernelspec/prob2/logo-32x32.png
 create mode 100644 kernelspec/prob2/logo-64x64.png

diff --git a/.gitignore b/.gitignore
index a98bc7b..71c6a89 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,6 @@
 # Gradle
 .gradle/
 /build/
+
+# Generated
+/kernelspec/prob2/kernel.json
diff --git a/build.gradle b/build.gradle
index b1843d2..a725fcd 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,3 +1,6 @@
+import java.nio.charset.StandardCharsets
+import java.nio.file.Files
+import java.nio.file.Paths
 import java.util.concurrent.TimeUnit
 
 plugins {
@@ -47,3 +50,35 @@ tasks.withType(JavaCompile) {
 }
 
 mainClassName = "de.prob2.jupyter.Main"
+
+final KERNEL_SPEC_PATH = project.projectDir.toPath().resolve(Paths.get("kernelspec", "prob2"))
+final KERNEL_JSON_PATH = KERNEL_SPEC_PATH.resolve("kernel.json")
+task createKernelSpec {
+	dependsOn = [shadowJar]
+	outputs.files(KERNEL_JSON_PATH.toFile())
+	
+	doFirst {
+		final jarPath = shadowJar.archivePath
+		final jsonText = """{
+\t"argv": [
+\t\t"java",
+\t\t"-jar",
+\t\t"$jarPath",
+\t\t"{connection_file}"
+\t],
+\t"display_name": "ProB 2",
+\t"language": "prob"
+}
+"""
+		Files.write(KERNEL_JSON_PATH, jsonText.getBytes(StandardCharsets.UTF_8))
+	}
+}
+
+task installKernelSpec(type: Exec) {
+	dependsOn = [createKernelSpec]
+	executable = "python3"
+	args = ["-m", "jupyter", "kernelspec", "install", "--sys-prefix", KERNEL_SPEC_PATH.toString()]
+}
+if (hasProperty("pythonInterpreter")) {
+	installKernelSpec.executable = pythonInterpreter
+}
diff --git a/kernelspec/prob2/logo-32x32.png b/kernelspec/prob2/logo-32x32.png
new file mode 100644
index 0000000000000000000000000000000000000000..2331b0da00935831167950296364775dfe203027
GIT binary patch
literal 3004
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
R&8k6dWKUN=mvv4FO#qouV^078

literal 0
HcmV?d00001

diff --git a/kernelspec/prob2/logo-64x64.png b/kernelspec/prob2/logo-64x64.png
new file mode 100644
index 0000000000000000000000000000000000000000..44728e831a7df9e5492db14b45e127537e89e55b
GIT binary patch
literal 7077
zcmeAS@N?(olHy`uVBq!ia0y~yU~m9o4mJh`hE<t`_ZS!$SkfJR9T^xl_H+M9WMyDr
zP)PO&@?~JCQe$9fXklRZ#lXPO@PdJ%)PRBERRRNp)eHs(@q#(K0&N%=7&r?&B8wRq
zxP?KOkzv*x2?hqn$jp$4k_cZPtK|G#y~LFKq*T3%+yVv=u&J=B$SufCElE_U$j!+s
zwyLmI0;{mfE4Bg&>nkaMm6T-LDn<APC^+XAr7D=}ndliP*>Nc-DA*LGq*(>IxIwiS
zrKH&^Wt5Z@Sn2DRmzV368|&p4rRy77T3YHG80i}s=@zA==@wV!l_XZ^<`pYL41t;B
zl3JWxlvz-cnV+WsGB+_PzqG_wNeN_;0t`UhS(2HCuqm$?>aFDbTz!y?zM-ChKHO}O
z@gPwv|Dw#)yplwa`F4gjV3jChP<w3jL6##q2I5n&XpoDW9hZ$hI7~p{W5?xlNIjB)
zL2{d?i(^Oy<KAe_DKVil|E+p;_0rYf^VVA5jkNMC7ZSR5K(U2E(b0kJiw4i*rZWb`
zj}BR!va~WzDq-R8vtmDPX=!ze<J}=gGsT1eGhv4bsww<8cTe^!uZmxlJ@@_Y_j_Mm
zpSo&E;{)5juX4Zt`(5_F_HFd`yt(yv>st10-t+e1vbL4er;D}+g((OyM5|4{$ocE*
zOzq#Z^pD-Y89QgYgVkKOQ<Bf^o+w{7@;ID+jH{1%_Hv(FjE_Dm3w%h<D&?%Pn}6`2
zaL`H<t6je)ChgyHjC+=)_2WC$=hr&E_><A|!fUzl%83<L7cO7_e`THW#_YOH@0QKr
z7q2(k^lw@=ziynt?lzv~?QLy;H*Va~+reBs+gE%3?fP%o{`Q={?WY^8D&m4Cm@zAz
zs#RB0eI(MU!xjDGz^9`Ngm`53-{-&h`A2bnlF2-m1Mh{E*Znwi^Zdm)uf0EVWF&uB
z`k6%5)muI0|6y&ldw1WK{%sNW_avS@yjJ(DY4XO4PuBgFz4pK(N6EzTgURfO^UcC~
zvC)O`6`sZOE6=O+Y!9(Bo$KhDDd;p!UW`Aot)Iz5_3sN=nPU%5%n)oSFIkvv_<HHp
zrCJ^bCKedjE#0@xZ1T%Ld#+mSeOJ_FwYN6E{i?r;<LQY1ES*&opLkvWeQw{m^BWQ`
zc~3OHAaLrni&5*uh^ATUkJ(z>ZfyAClVr5cN#duW1;gCQulEVh=kk|18DbUU@=)mM
z^tF=~C9GOsuW-TKz{U9E=R_^*G^379bNvewvk#=6vSaVi_tO$OY4Ud;Pxo^l_teUb
zhT)!$hb9Wtn8a(Q>CAkxH|DX(i8CvlYIDRz*H05wh}ds`!QRBn=|z0m8*P(MTkOR1
zYY!){(CdCQOEh=JbsN!x3s{Tv<0X!}rv3fW|7g*MjY7XRboxJ*z4ud;_nwB8tIaf}
z?54mlc4t=BJa!3tO%tw)=O6rSo6amh`Ph<Ms_^EfuqokFCS)$-5}LNq^v1012WK>7
zMXp$<am*mrWtzgQ``*Iwibm@bvQ&RgUM8tFIpw}P6GybH&oe7lxiaH_D>l#CwR>Oq
z37@xyUg>pfEUM*Z>bqOnO%vUgc#kz_!KZeXvny6VkeJ}7=~Z!O`nSqUr!H9>ntuD_
zU0v6>WLA-;StjQd8Y7furXJgK;`ifC>!wS(W$eE=At+SgK=ZQIvkr)MaXVSGB^&P9
z`B*_OLdvaU+55%Qe60i$m$){b&pYB+oH-+^H!H1!F^#GFL-7xD=d=FrxW!kV>q}5g
zSsL>(*HfraPD?~2fz9pF3a#D+TUXxu@#N%#r-#D0-bzcT6?=ZUwBP-hkVY?yU}~PY
z%*;8roqEjsb8oe!$K7t0G<}*eFD|!hLEk#Y!%ysE$`>BYk9fM{(Ibwu&F43-fA8#C
z_``N*BTK>$zkmxK>MIm~F=xJ(?s~XpTIP=zqR$uYQF(RY)zwYjb^kWU<}RIi?$L{P
zvPT;G^7d?8&Ak4tZ5PMqs?0zRPtIEtnO{1*KcLa~jpt$OT6W%muig`8T$Md;SbfbT
zMTqnBo#)#N%A$qM{-v(xY<q9U$FVi{=@!4Jst2$7YijPk$l!6`#V)W+bKTz)M^~&_
z<<R!;A+OuE%b6AP4o{r;>-Wl=1u8BQsTp}|j^A9{JL7(Uvs?Sd&mRh1ni++Urt(^;
zv?#=?OKl1`QZ6`8^o^I2*sU32sf=xWT<dmi60tr0d*kB(^R64`b$6!ju3T~IzmHyK
zi-Y6ot0FAIEe1xjOqN9idYx4l7M}T>!OEhZE0Wn!itB{PQmtioLY8%{%l+pw`I%W>
z758`BpH{jDlWGz?XA7U?S!{Beao2@^%C;UyB)?9TnrrbWnQh0LKVdmFx$;6PR^@w6
z%<=jBbIQ+%`Uzp$u9_ciiAW0mT9ujPz+>s_n3G|UCh)Aw;jWX4&r8qJ7JHFLH$*Pa
zOm=)TK}}i5YD3!7nKR<zJ9pQ8b8it<v9*ldx~plvNYU%|bH_KS7W4Yt{-jaGrE~be
z9fQ4M*Vo5%eC^-Yv}~48u*b`}g1fv6_HE`+{Wxjouiuj2pD=|Ta&h)Ntac;Aaqit?
z=RCzc%kO?>vHI;Mu*@yB=-#pwYdp_<x#bmB99+m|8W$Psr=6gt=$xddeE<2z6{TYP
z3TnB^|9t6Ru|W03Mh<Ud>7y&I-nQS$^*K6i*2ZnmT2HR!@^z0X{V23W{`KL<_4k@r
ziUumP=-ckRzUo)cqZ89*4opuJ^LQB`>+n{+Vxf;hr^LOhx3yW~_<N5P))a^c{>too
zddu#t-EID_j~dVJHkdu@=kBZCg(o+e{Rp`&z1=`1pu12f)<)cX?aRaU_x4Mky?T`G
z`nq?DHGh+}c|MoLIxG}aQ_uUg&{Z{8JK)X&)7m%9;tvj7wA-`qzr?bs?wJS6q|T?t
zeK-2~aamQn*a2s+<*Fz0Gpj_JR_?lT`SyKD%}=WCzb}0Kkti6^p%xn_a%9aZ4Y!&9
z@^(M(|MBqe`3wD-kyj3|EL=J{qB2hVT;{seRX&S0+qccu%R9VOM1p;WW#_RU&WSw+
z@8vBo@yaJRF6`eCvP0B3toEbu>VkWBR^IS_*s7v&>1@)a2SRq=CzNWMy_|6E?UnrF
z4E0T-3%KN2S#C2~Tnd|Zcvo%F?-Qw?<Ye@9duA|kMOZ8qxqo{D>;8(I%^?fyFF#4j
zjEdf}L?T=_zJs~e(5-lxGS`I0ri0hc2^AjemEHaA@$T<=2iE@oDqz+BEr7#OnI+Tz
z<APaV4^RL1kLyms#hN{r?&W7sDcaC2^T|2ttmBVU5>{`H3Py9Nu`RK%^|=_H+_Uf1
zoaxneS9e?J9$obQN$)<(u*LhjUv+<6>mHx_Z(ip%R$sN{>C9rCv&^%#mQ87UF*)<k
zubsIaMzyEnzi*RwuP(R$x97cuSJS3>Jo{?zyWRQMAHHbH)djDEgq&1_j_Jxro^)Ep
zW?%J2H0QmHOL6FxHJT?@xvo~!^^X5`=!(iRk!insCU)%Ux!F~GDw(UHYti+T*?LQ3
zg>8Cy)8aoWH5>fRf9!qx;<ZZ;z7+o2v}f&FE!WpQUN-w5bFAui{&DNC{;Y$dir1J^
zYP>uzJh=3Adwi8NclzEY|C$We-yVTxGTY-Kw<c+x%gR3XerDGH_bbga1f4T<xfl0L
zUGa+hqQ<VxHd+S85>cLBC$2EvEV{8FMWCWSWXq1vZNe-GR#|r{l<nMpm}t$A{kLhe
ztYKKYU|3V+%Z<CY#JVefInK9mQp>ruOUg|9>@V$F6ZF-|`t+-<=_UzhTf2W8N{gFu
zr00&KuV}L9brHK?2e~)SnY>2Vn*ZTZ-QOQh&GWOV-66lX$My0d#w#B$>`G}mI&Ipm
zH7ecnSd??Rm^Lu4<h|ffTE`QZ;#R0IHA(7=m%|C$xl=#gS*FeU;N3w(o`SQALcEg=
zt9NBHN!9L~#;w5aJ}E=zv_V^svART?In&GTr5|>_4qs5`r7L;$%*A65`GXd$Y*~2x
z2<u@6$+=;N7xPUIPB`AjpYVR6UvS9R4Oi|T*V?o^Um&^1u>I#8rUmmSD5^=aFZTX-
zWHVD+&8e@eJM)jf-($M##gwZ@YQNo?&2h}yD%>YaVqt-*K<1U(&bRDun0HC*=Opf#
zagNJ$p6vP=TXJ9Djxb1PTVufbaEWJWK+c39l_|e|X(?M&E3lrqVd9ltlkIP9wtoxj
zKj*o7U%Zh!@=m!{LRNP3@25YfUV5shHtUmH&#BTB(Z}t&3ZL)1H1=9MZR0w9?M{nl
z*_$<VPu1VHWM8@TYR^WFqV#2}JWE#OTAOth-;(leyYT03&o-wYmsjuJ@Z+-m(fT#@
zEW5wU%v)e{&`iv+D%5_(x(g5e)}$<n;`O?4^iQqHS-o?2KAbZA@{Lcz_sPTi9PUR0
z=6GL@nteHHo<zFLMt;5^$yB~sJ55xQp6*}kTdI+?Wm@s%Z8^bHZ=B4KPkR+~?Sjum
z+Z0~rFPA?{d2P&)V|BO@HpAeB+4=lB;rYMbE#8sfCb;kW6|pU6_6qaoCNMm;j+}Hm
z#CylPq<NB0R+Y2(T5w+0iStl-y5{lTD?0;9#0=-OzP)$1v+)$i685X#qW1N*G%dSw
zwXLmb)~o7+Dh4hVt#4mQ9Zh|{ZHCOeu!+tx+y1i`?Ab1#|K_!m>f(J{)>k=9>9qJ}
z)Y7*xz^dkn#j9-X4W-W+|Gb*$yW{ckdbgWX6n=FsYs*}@UaM6yc=epX$9>CAPC3ft
z#X2?fSnHfwEjF5Rk(pPIy7ihR?M{F9zCv+vgn`o8&9}T~i_V`hanmb_pKG*_WU4Ce
z*;UVBzGhx`s&{loahK7XBWWxTHh;L*_xHzP=ieJkDoy+PGK13m+gc8<xfZ}Nm$`7x
zXMg)6XT{GR>aX7?`@(BMVWlOT<nAp|dzS0>Y1<hHrx)}o%D7dfRDGZ4{NqXZyThwC
zr$6l3dD)=3@#C7Kx@%UcM(v*cNK)LD*VAOa0Mn`?pUij{&W%cB;+Pbu9x*X-<C5*m
z0#_OB%$)Ni$KHa)VC~(X=dUZt^h*3MJ{$P8w#)A4gSPO-MIz!ZZWj(q99X#Qh**H5
z*qv8FS^Wj|e{STNY?&tc`c>!cb>d4|ja(PB3L8Yu|8-OELAq$A!0fuMqO;4sGSpjk
ztj>#UyI+^Tj>p)0!@=c@ZH#*@Jh?AC5qxxrwR@70+)}HIx}!FyDndTbmFN$$xIO>P
zkwZUCZ<OATGBNd?e_&5!6?e;rFZ1sm`To8}wD|e-#2F?noXRe*Og3M+<J59$)iDY6
zC5u;HUUa2O>UgH6+2lpD*neJ|a_@tq1*7f?9==Dv_gC>*lv~}3=xs7RvgnzWwVXuS
z+l8m<T0`oZG<MDC`|wEN+jfJeDlr;w)DFJ<H^EFdB4}QC>-&EXv})emdb(oeTBD2C
zGurcy?)mfa#KhzsAJ@4zq^jx!tnlTxD4TtOW!|+uMRo0pc&XRDKQ7)i&zW&qXX3w}
zuix$Zmdn|+EK8mGLhk7#DapG#w_kq1e<5p0<yn^ddG8Z>CbU?dFnHAZZs)X@>vpaX
zP1nnM#P#mS8NVZ*p8}Wdd}*3G!#<l!Y>UaFjSJ`LM?@WeJ9DnX%K2j6Rej$dUd#U@
zbC>=1&P&p+>wWGwzn&YTrCYq|z)t7+oGVIAr~dfoU)O%yZZ~6bxUZ{q_|7Sb%R*c~
zJb1<@lVRUxxmlX0>*2$|Kkv3WZ|Hex5s@o@R<Ye<i_X?}o3D#4@qN5SY(?enH43xy
zdk^0{<86Js@9TqE=l?S3+g<P5raJY8t;F*fMfP|{9rb+^szZW)=x^tLba;Mbe`N2~
z9p4|$&Dga>?rluiWbTtyt0MnBTC4cy-_7e94Qefs7JK)uXSO~6rK$SpF(<#4d7oYO
zh**iNyQH%+I61~Fd9H$VF>{<4&qoc{dpo+m{y7trbJw_GW{+gatnXKZLIOme3!ayk
zII!3Mjnm;XNhOz8E#cZOo38aWKA<!I@2}K1ceYNScA-^$-d!f0J`LU==U0_nt{HlD
zo6_2}`?(cnPdkvZ@ZG*WtM+C2h1nH<zWU>UYWkyZyX6m^e}Av3a(ei~4;tE=CNtWf
zw0<~MAZxLh&MxPAx#^QcH4@|{{SyA2eSJ}Y^FhFUfm5fQL>d_N3|dteSZwUhbUoT-
zlD#=2cxm7%<y!~Vtk-juG&cxoWR3heQ^oW2gxNC-&!wb>eKz^?;+%it%RTBJj&7AU
z$PeY^D?ao&uT{Y-X}Lja>rRbYrBlW1>hZIddKpX;6HnRn$gA}XXVC-Wvl96~KGjzI
z-KqCX`RsukH*YV=diL$wF^y&6B884yc*5t{i+hWoHA`I+uWdPJ-LAZa4_2)FD4w^I
z&GpXLzh8X&7o|?k<@|K}`(n;D5`3Q)HC;1UCLMQ~^~L_an__Nf9xc0Z==E7glj&?{
z&-v!XM;_cZFEGd2>WtEE;r&0~n`it_yz^`7<_+JDc}J`_pTrc|e5WZmE2{Ziw*5Y~
zyS9gayvjYF@NKE6#V<cyM=$LwpY|C4_E9>NsmATWac5rP{HK=1-_)5?bM0SoD=hP@
zn-_N0R<z#GnCbr1vl@#VjCcH=cfH{I-`g7=)~`GMO4R#7vd)E!sb`{=d@0`gtk`_*
z!OziriI1b*4VNnQBxa^>TC4D%HGYM{!f&~CGg;?+nz-^@?F|0yvHDs54aMzD?sJN}
zBog~SSXdp?-+jy|BX70C<1Gf}uK&dM*FI9cCG*ijDxkrq_+4CJWS_NNvFZlp&ZM>P
zyox8=rW~*AuZekL^EhDls*_xE#BXNjrz-{~o&0_2cHyC|ZnDWQPn}<9kY1|0Zui5w
zJzrk=Rj0k!F?XeqrMGqYNtv3T_s<`_eVaY-=%!z_xhg)4w~p^hl@YEqcJvB)Zf0BT
zqxSvk%6F{^Esn)g!Ww@%-uX4x-Qa+#=FEMYnrC%7GIC#!ty9a6i@xH=n|g2lH~EiA
zKbGvyVmxG)zi8pjr;qQeIUGr=-lsf^Wplq~Nu94?+^?sOHa}&Um$)xTlbskGxmITV
zzu9hY-pV?A=zZ8{68)m@&BN<Q%4Dt{k(qxq|JaJ@+w;G@U848Ip?1!X2WK?oDt_s%
zJ9SL6xsW*|CcrDEGR(L@p-t%At2akQ%O^hlGUuo7j7IHj@w#(%Zx^ung?vefk&xT>
z<AOkTp>Bhtjz;mkl+91qo;#y*Bs4m>=YG!HL$NX4IkO^<|2lB*v$3)3I?p+GPo4By
zzE7MZsX_a~`|!`~ozp*yd#~1Nv-FG+p2c+bc&mWkg2H`=RhKbk8kDaPTy}g)>3XFl
zuN(IA-83og^5iHJkN%>#R<>wuziZQ6gQCWHZPhdDt<L^s{B&e1yOFMAcB$+2tjAfK
z-~ZHh^kfj4q{?{XOWOVCyC)p3_+cJ<sOy6dcXCXS^~ThUjx{FP5tfrQeBXbbQ1obn
zr_IO8q`s#7rs$d?=2y<zi;uV*QQyokd0oV%Q>;3HsTSG}agE0p87uF9ZWO-osrhg3
zP_9`OThcS0_{2D=pY?Tm=O)wU5}V4NqJPHa?3(zXLt7Z0H?u2!dG|^}<DUFZ23FPm
zA5*=b7cRKBj;&8{!uOTA8J@f=dvE+^x%8ez;LhgfSEfEyYbx?Qt9L(p@|7a#O5cg{
z_Q_Jo49xRC%vh@Q)9Ihu(U;M7$-1q(pUS_nxthMt_D)ZP>1v_gV6B%O=iJ!u-~RMy
zR=oXlq0}{Ek!8`1-*-ekh&ab$|H#<)s<6l&p@wVnogFe4_e@pdGG*PbH0|`CJu?_S
zd2GGlaK1RV^u3i?oA&xVx6H`GZ>#xBC)zLD(f7aI+{)sy&ZE4on@>HFd>?lz!{_2N
zJByo<b7Sib(zzNwo>^qn9AcH+AXR^I#(aL+&>73`$tyE(c|^_0*mf_jb^X@Jq-!6t
zx(n|v<yJpn@S62VeM|QguZi40@AfOcjE#y))XLd1r^#@|<oHxZ!(|<-=M)>QyfuGK
zwg7X8-F~64nUj~l42#`*CDti$|Aul2{`!|nCTA|_z5ns6LH16~jW5p_OTMccrd!$f
zq&<zeA!qAx@95HP$945=G&Xc+{|o%g^Y+$;87G>!=hkZI*77aa-N<S8wCtoMcVC~<
zteJLmD--W?)cv~o`NP4ffA~&pp1k_ziuuvWbLZCnICl8<h8^>souBdKox#q8rE?~0
zo_PCwp8vIQ*XcSzAAPj8GES}(eh|Z9nf}vTbG31;>a)6qGcO-4&{-xLQ6l&3*PUf~
z@9u<%K3sWQ|EShFp-jCzlXHAl(r%UiSj{cBe^D<;^kp$z$NuE{zBv_}dO2KLqRJ%n
zWgKVaOQ|x5I&sy-_&+&)$j@Ble1f*P{_GX9anEw2=GdH@86Rb8zj403YS&l!dCjY*
zZ%_DTk{1{B`SBTRhZ$XRcXqJ;|MVm-Cg!~UnUr6w*N?{ZeOhFH(%D_YMenr7XEWc`
z;`i0KHS(ulWb)ZKnVskOgE`Zz&diF+Q(8X5Vq@X|hOkBcPo-9TjN}cSVY^uBYia7T
z)vrG{Eq%G(Of&NBgO}ppA2{1r3v0h#6mvKA-}2VE|J-8!Y~I{>X@Qx~m&*N}{yc0;
zw2tU%|Fgc?x#Q$oyXL>!`{&m`+HK>n;!-Q48LX^kd^6D8^WNP5zayV4*-`)D!29h9
zZ=J0-Y*Nem_Wur7^e551lXEM-PR!r%#KCHZW?#=y+s1^5NC!r}hN5RL;_6N(ca(H|
zWfR)`d_MmR&htCc7OXc)$>Wor)H=(qYzn_j&ikXb{yE35$Gto7>Xm_g*8^|6?@@O7
z>UU#)w6gDDd66UTWD@o`YYmI##|NKRswU=G7_{i-mnWWNs$1q~EXgm|>iE1``JiN@
z<Q}u4%sq2^?0<f8T=V~O;%Ck?Q@^TqWOmLy@*&@8ak$^EN>S69j$Mpi&3{%X=l;xO
z%dE>hD%8LE0>i$42f}Lpoe~i{zwVLw&tF-^i!8m2f2!n}xE)v&eM<UC{k$){M}PJf
zGO_pbJ!qA^d*jU8)y+Ihx=)3aX0?a?w3uGXxS{!~b!v{$neHDu(iZ*UzqII*mc4Pj
z!bHzL)~`o1JXN|B-9F5&-zn;?<#dMUi+JJW%bx_7<*mC^V(VZL8}r!yjO)d~Wn0C#
zwohW*)c610qW>I$@-rXCFW&j()tdGGZtd-tCN2`P|7f4hs(jJf*;O@O_SM@b_Co1O
zf?SD#l^o4?KEF@hS3FZ_;iW&FpDsAhR=j-OkpJz0kmBDf`=l2*<=CBimav)YK=tzI
zx__-l7*7AM3i9vu?E4;)<85fh%ljp3xwhHTOh*%Avo9OopUSrj%Urr)?$*M;0p|ma
zgM*^Bhzq#1Dov@l;_frYsyI10sn}&wd&b2Fd*)g^Szqg(x%!v)=0ALGhi2}Y`MKuh
z#)HTICO2P~viz^xD)7BMKUL?)^%NyJ6T?QAS4(A2N8XtrTpQr3J=5dg%Nd*fTPmvF
z^>p4$Q|U@=^{PG?U?BH_ec#vDxAk_<J#X}%|H-YhR>kk~yg`#;p00i_>zopr0OpTg
AasU7T

literal 0
HcmV?d00001

-- 
GitLab