From 9387f4d0876731e26cf26cd7c48ceb272721ca8e Mon Sep 17 00:00:00 2001 From: Dimitri Lizzi <dimitri.lizzi@etu.hesge.ch> Date: Sun, 16 Aug 2020 19:41:48 +0200 Subject: [PATCH] references and acknowledgments --- doc/Makefile | 4 +- doc/charts/chart_deploy_time_debian.png | 4 +- doc/charts/chart_deploy_time_debian.svg | 148 +- doc/charts/chart_deploy_time_win10.png | 4 +- doc/charts/chart_deploy_time_win10.svg | 132 +- doc/charts/chart_deploy_time_xubuntu.png | 4 +- doc/charts/chart_deploy_time_xubuntu.svg | 156 +- doc/charts/chart_image_sizes_debian.png | 4 +- doc/charts/chart_image_sizes_debian.svg | 126 +- doc/charts/chart_image_sizes_win10.png | 4 +- doc/charts/chart_image_sizes_win10.svg | 132 +- doc/charts/chart_image_sizes_xubuntu.png | 4 +- doc/charts/chart_image_sizes_xubuntu.svg | 118 +- doc/charts/chart_protocols.png | 4 +- doc/charts/chart_protocols.svg | 156 +- doc/gitlab-markdown.gpp | 6 +- doc/iso690.csl | 493 ++++ doc/pandoc-pdf-markdown.gpp | 4 + doc/rapport.gpp.md | 67 +- doc/rapport.md | 37 +- doc/rapport.pdf | Bin 1931895 -> 1935910 bytes doc/rapport.tex | 3202 ++++++++++++++++++++-- doc/references.bib | 123 + 23 files changed, 4264 insertions(+), 668 deletions(-) create mode 100644 doc/iso690.csl create mode 100644 doc/references.bib diff --git a/doc/Makefile b/doc/Makefile index 4a9592d..d79bcfd 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -20,10 +20,10 @@ rapport.md: rapport.gpp.md logbook.gpp.md markdown.gpp gitlab-markdown.gpp csv2b $(GPP) -DGITLAB_MARKDOWN $< | ./trimstart.py > $@ rapport.tex: rapport.gpp.md diagrams markdown.gpp pandoc-pdf-markdown.gpp logbook.gpp.md csv2barchart.py templates/default.latex $(PLANTUML_DIAGRAMS_SVG) $(PLANTUML_DIAGRAMS_PNG) - $(GPP) -DPANDOC_PDF $< | ./trimstart.py | pandoc --standalone --pdf-engine=xelatex --template=templates/default.latex -o $@ + $(GPP) -DPANDOC_PDF $< | ./trimstart.py | pandoc --filter=pandoc-citeproc --standalone --pdf-engine=xelatex --template=templates/default.latex -o $@ rapport.pdf: rapport.gpp.md markdown.gpp pandoc-pdf-markdown.gpp logbook.gpp.md csv2barchart.py templates/default.latex abstract.pdf statement.pdf $(PLANTUML_DIAGRAMS_SVG) $(PLANTUML_DIAGRAMS_PNG) - $(GPP) -DPANDOC_PDF $< | ./trimstart.py | pandoc --pdf-engine=xelatex --template=templates/default.latex -o $@ + $(GPP) -DPANDOC_PDF $< | ./trimstart.py | pandoc --filter=pandoc-citeproc --pdf-engine=xelatex --template=templates/default.latex -o $@ diagrams: $(PLANTUML_DIAGRAMS_SVG) $(PLANTUML_DIAGRAMS_PNG) diff --git a/doc/charts/chart_deploy_time_debian.png b/doc/charts/chart_deploy_time_debian.png index c4081ae..5226182 100644 --- a/doc/charts/chart_deploy_time_debian.png +++ b/doc/charts/chart_deploy_time_debian.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9a0bb3b1af44613e5674989b57e19b91f0bfcc3bcfb32cfc7647dbb60ce88a39 -size 18644 +oid sha256:45cfc1486e1a2ce929d279e728e26a08d00a29696cf6373894247253b72729aa +size 18578 diff --git a/doc/charts/chart_deploy_time_debian.svg b/doc/charts/chart_deploy_time_debian.svg index 1aaaff3..0393b33 100644 --- a/doc/charts/chart_deploy_time_debian.svg +++ b/doc/charts/chart_deploy_time_debian.svg @@ -3,10 +3,22 @@ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <!-- Created with matplotlib (https://matplotlib.org/) --> <svg height="345.6pt" version="1.1" viewBox="0 0 460.8 345.6" width="460.8pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <metadata> + <rdf:RDF xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> + <cc:Work> + <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> + <dc:date>2020-08-16T19:18:09.724445</dc:date> + <dc:format>image/svg+xml</dc:format> + <dc:creator> + <cc:Agent> + <dc:title>Matplotlib v3.3.0, https://matplotlib.org/</dc:title> + </cc:Agent> + </dc:creator> + </cc:Work> + </rdf:RDF> + </metadata> <defs> - <style type="text/css"> -*{stroke-linecap:butt;stroke-linejoin:round;} - </style> + <style type="text/css">*{stroke-linecap:butt;stroke-linejoin:round;}</style> </defs> <g id="figure_1"> <g id="patch_1"> @@ -72,8 +84,9 @@ L 0 3.5 </g> <g id="text_1"> <!-- Gzip --> - <defs> - <path d="M 59.515625 10.40625 + <g transform="translate(96.945171 308.358437)scale(0.1 -0.1)"> + <defs> + <path d="M 59.515625 10.40625 L 59.515625 29.984375 L 43.40625 29.984375 L 43.40625 38.09375 @@ -98,7 +111,7 @@ Q 48.046875 6.6875 52.140625 7.59375 Q 56.25 8.5 59.515625 10.40625 z " id="DejaVuSans-71"/> - <path d="M 5.515625 54.6875 + <path d="M 5.515625 54.6875 L 48.1875 54.6875 L 48.1875 46.484375 L 14.40625 7.171875 @@ -110,7 +123,7 @@ L 38.09375 47.515625 L 5.515625 47.515625 z " id="DejaVuSans-122"/> - <path d="M 9.421875 54.6875 + <path d="M 9.421875 54.6875 L 18.40625 54.6875 L 18.40625 0 L 9.421875 0 @@ -121,7 +134,7 @@ L 18.40625 64.59375 L 9.421875 64.59375 z " id="DejaVuSans-105"/> - <path d="M 18.109375 8.203125 + <path d="M 18.109375 8.203125 L 18.109375 -20.796875 L 9.078125 -20.796875 L 9.078125 54.6875 @@ -147,16 +160,16 @@ Q 40.53125 6.109375 44.609375 11.75 Q 48.6875 17.390625 48.6875 27.296875 z " id="DejaVuSans-112"/> - </defs> - <g transform="translate(96.945171 308.358437)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-71"/> <use x="77.490234" xlink:href="#DejaVuSans-122"/> <use x="129.980469" xlink:href="#DejaVuSans-105"/> <use x="157.763672" xlink:href="#DejaVuSans-112"/> </g> <!-- (sans cache) --> - <defs> - <path d="M 31 75.875 + <g transform="translate(76.266265 319.55625)scale(0.1 -0.1)"> + <defs> + <path d="M 31 75.875 Q 24.46875 64.65625 21.28125 53.65625 Q 18.109375 42.671875 18.109375 31.390625 Q 18.109375 20.125 21.3125 9.0625 @@ -168,7 +181,7 @@ Q 8.59375 42.28125 12.203125 53.3125 Q 15.828125 64.359375 23.1875 75.875 z " id="DejaVuSans-40"/> - <path d="M 44.28125 53.078125 + <path d="M 44.28125 53.078125 L 44.28125 44.578125 Q 40.484375 46.53125 36.375 47.5 Q 32.28125 48.484375 27.875 48.484375 @@ -199,7 +212,7 @@ Q 31.78125 56 36.171875 55.265625 Q 40.578125 54.546875 44.28125 53.078125 z " id="DejaVuSans-115"/> - <path d="M 34.28125 27.484375 + <path d="M 34.28125 27.484375 Q 23.390625 27.484375 19.1875 25 Q 14.984375 22.515625 14.984375 16.5 Q 14.984375 11.71875 18.140625 8.90625 @@ -231,7 +244,7 @@ Q 40.484375 56 46.34375 49.84375 Q 52.203125 43.703125 52.203125 31.203125 z " id="DejaVuSans-97"/> - <path d="M 54.890625 33.015625 + <path d="M 54.890625 33.015625 L 54.890625 0 L 45.90625 0 L 45.90625 32.71875 @@ -250,8 +263,8 @@ Q 45.21875 56 50.046875 50.171875 Q 54.890625 44.34375 54.890625 33.015625 z " id="DejaVuSans-110"/> - <path id="DejaVuSans-32"/> - <path d="M 48.78125 52.59375 + <path id="DejaVuSans-32"/> + <path d="M 48.78125 52.59375 L 48.78125 44.1875 Q 44.96875 46.296875 41.140625 47.34375 Q 37.3125 48.390625 33.40625 48.390625 @@ -272,7 +285,7 @@ Q 37.15625 56 41.109375 55.140625 Q 45.0625 54.296875 48.78125 52.59375 z " id="DejaVuSans-99"/> - <path d="M 54.890625 33.015625 + <path d="M 54.890625 33.015625 L 54.890625 0 L 45.90625 0 L 45.90625 32.71875 @@ -291,7 +304,7 @@ Q 45.21875 56 50.046875 50.171875 Q 54.890625 44.34375 54.890625 33.015625 z " id="DejaVuSans-104"/> - <path d="M 56.203125 29.59375 + <path d="M 56.203125 29.59375 L 56.203125 25.203125 L 14.890625 25.203125 Q 15.484375 15.921875 20.484375 11.0625 @@ -315,7 +328,7 @@ Q 24.90625 48.390625 20.390625 44.140625 Q 15.875 39.890625 15.1875 32.171875 z " id="DejaVuSans-101"/> - <path d="M 8.015625 75.875 + <path d="M 8.015625 75.875 L 15.828125 75.875 Q 23.140625 64.359375 26.78125 53.3125 Q 30.421875 42.28125 30.421875 31.390625 @@ -328,8 +341,7 @@ Q 20.90625 42.671875 17.703125 53.65625 Q 14.5 64.65625 8.015625 75.875 z " id="DejaVuSans-41"/> - </defs> - <g transform="translate(76.266265 319.55625)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-40"/> <use x="39.013672" xlink:href="#DejaVuSans-115"/> <use x="91.113281" xlink:href="#DejaVuSans-97"/> @@ -360,8 +372,9 @@ z <use x="157.763672" xlink:href="#DejaVuSans-112"/> </g> <!-- (avec cache) --> - <defs> - <path d="M 2.984375 54.6875 + <g transform="translate(161.29464 319.55625)scale(0.1 -0.1)"> + <defs> + <path d="M 2.984375 54.6875 L 12.5 54.6875 L 29.59375 8.796875 L 46.6875 54.6875 @@ -370,8 +383,7 @@ L 35.6875 0 L 23.484375 0 z " id="DejaVuSans-118"/> - </defs> - <g transform="translate(161.29464 319.55625)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-40"/> <use x="39.013672" xlink:href="#DejaVuSans-97"/> <use x="100.292969" xlink:href="#DejaVuSans-118"/> @@ -395,8 +407,9 @@ z </g> <g id="text_3"> <!-- Clonezilla --> - <defs> - <path d="M 64.40625 67.28125 + <g transform="translate(254.837078 308.358437)scale(0.1 -0.1)"> + <defs> + <path d="M 64.40625 67.28125 L 64.40625 56.890625 Q 59.421875 61.53125 53.78125 63.8125 Q 48.140625 66.109375 41.796875 66.109375 @@ -417,13 +430,13 @@ Q 47.75 74.21875 53.53125 72.484375 Q 59.328125 70.75 64.40625 67.28125 z " id="DejaVuSans-67"/> - <path d="M 9.421875 75.984375 + <path d="M 9.421875 75.984375 L 18.40625 75.984375 L 18.40625 0 L 9.421875 0 z " id="DejaVuSans-108"/> - <path d="M 30.609375 48.390625 + <path d="M 30.609375 48.390625 Q 23.390625 48.390625 19.1875 42.75 Q 14.984375 37.109375 14.984375 27.296875 Q 14.984375 17.484375 19.15625 11.84375 @@ -444,8 +457,7 @@ Q 5.515625 40.765625 12.171875 48.375 Q 18.84375 56 30.609375 56 z " id="DejaVuSans-111"/> - </defs> - <g transform="translate(254.837078 308.358437)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-67"/> <use x="69.824219" xlink:href="#DejaVuSans-108"/> <use x="97.607422" xlink:href="#DejaVuSans-111"/> @@ -513,8 +525,9 @@ z </g> <g id="text_5"> <!-- Type --> - <defs> - <path d="M -0.296875 72.90625 + <g transform="translate(224.677188 333.234375)scale(0.1 -0.1)"> + <defs> + <path d="M -0.296875 72.90625 L 61.375 72.90625 L 61.375 64.59375 L 35.5 64.59375 @@ -524,7 +537,7 @@ L 25.59375 64.59375 L -0.296875 64.59375 z " id="DejaVuSans-84"/> - <path d="M 32.171875 -5.078125 + <path d="M 32.171875 -5.078125 Q 28.375 -14.84375 24.75 -17.8125 Q 21.140625 -20.796875 15.09375 -20.796875 L 7.90625 -20.796875 @@ -540,8 +553,7 @@ L 46.6875 54.6875 L 56.203125 54.6875 z " id="DejaVuSans-121"/> - </defs> - <g transform="translate(224.677188 333.234375)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-84"/> <use x="45.458984" xlink:href="#DejaVuSans-121"/> <use x="104.638672" xlink:href="#DejaVuSans-112"/> @@ -563,8 +575,9 @@ L -3.5 0 </g> <g id="text_6"> <!-- 0 --> - <defs> - <path d="M 31.78125 66.40625 + <g transform="translate(44.2375 297.559219)scale(0.1 -0.1)"> + <defs> + <path d="M 31.78125 66.40625 Q 24.171875 66.40625 20.328125 58.90625 Q 16.5 51.421875 16.5 36.375 Q 16.5 21.390625 20.328125 13.890625 @@ -585,8 +598,7 @@ Q 6.59375 54.828125 13.0625 64.515625 Q 19.53125 74.21875 31.78125 74.21875 z " id="DejaVuSans-48"/> - </defs> - <g transform="translate(44.2375 297.559219)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-48"/> </g> </g> @@ -599,8 +611,9 @@ z </g> <g id="text_7"> <!-- 5 --> - <defs> - <path d="M 10.796875 72.90625 + <g transform="translate(44.2375 266.754823)scale(0.1 -0.1)"> + <defs> + <path d="M 10.796875 72.90625 L 49.515625 72.90625 L 49.515625 64.59375 L 19.828125 64.59375 @@ -624,8 +637,7 @@ Q 22.75 39.890625 18.8125 39.015625 Q 14.890625 38.140625 10.796875 36.28125 z " id="DejaVuSans-53"/> - </defs> - <g transform="translate(44.2375 266.754823)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-53"/> </g> </g> @@ -638,8 +650,9 @@ z </g> <g id="text_8"> <!-- 10 --> - <defs> - <path d="M 12.40625 8.296875 + <g transform="translate(37.875 235.950428)scale(0.1 -0.1)"> + <defs> + <path d="M 12.40625 8.296875 L 28.515625 8.296875 L 28.515625 63.921875 L 10.984375 60.40625 @@ -652,8 +665,7 @@ L 54.390625 0 L 12.40625 0 z " id="DejaVuSans-49"/> - </defs> - <g transform="translate(37.875 235.950428)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-49"/> <use x="63.623047" xlink:href="#DejaVuSans-48"/> </g> @@ -681,8 +693,9 @@ z </g> <g id="text_10"> <!-- 20 --> - <defs> - <path d="M 19.1875 8.296875 + <g transform="translate(37.875 174.341636)scale(0.1 -0.1)"> + <defs> + <path d="M 19.1875 8.296875 L 53.609375 8.296875 L 53.609375 0 L 7.328125 0 @@ -706,8 +719,7 @@ Q 44.1875 33.984375 37.640625 27.21875 Q 31.109375 20.453125 19.1875 8.296875 z " id="DejaVuSans-50"/> - </defs> - <g transform="translate(37.875 174.341636)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-50"/> <use x="63.623047" xlink:href="#DejaVuSans-48"/> </g> @@ -735,8 +747,9 @@ z </g> <g id="text_12"> <!-- 30 --> - <defs> - <path d="M 40.578125 39.3125 + <g transform="translate(37.875 112.732845)scale(0.1 -0.1)"> + <defs> + <path d="M 40.578125 39.3125 Q 47.65625 37.796875 51.625 33 Q 55.609375 28.21875 55.609375 21.1875 Q 55.609375 10.40625 48.1875 4.484375 @@ -768,8 +781,7 @@ Q 53.90625 49.265625 50.4375 45.09375 Q 46.96875 40.921875 40.578125 39.3125 z " id="DejaVuSans-51"/> - </defs> - <g transform="translate(37.875 112.732845)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-51"/> <use x="63.623047" xlink:href="#DejaVuSans-48"/> </g> @@ -797,8 +809,9 @@ z </g> <g id="text_14"> <!-- 40 --> - <defs> - <path d="M 37.796875 64.3125 + <g transform="translate(37.875 51.124054)scale(0.1 -0.1)"> + <defs> + <path d="M 37.796875 64.3125 L 12.890625 25.390625 L 37.796875 25.390625 z @@ -815,8 +828,7 @@ L 4.890625 17.1875 L 4.890625 26.703125 z " id="DejaVuSans-52"/> - </defs> - <g transform="translate(37.875 51.124054)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-52"/> <use x="63.623047" xlink:href="#DejaVuSans-48"/> </g> @@ -824,8 +836,9 @@ z </g> <g id="text_15"> <!-- Temps de déploiement (secondes) --> - <defs> - <path d="M 52 44.1875 + <g transform="translate(31.795312 253.394125)rotate(-90)scale(0.1 -0.1)"> + <defs> + <path d="M 52 44.1875 Q 55.375 50.25 60.0625 53.125 Q 64.75 56 71.09375 56 Q 79.640625 56 84.28125 50.015625 @@ -855,7 +868,7 @@ Q 41.65625 56 45.828125 52.96875 Q 50 49.953125 52 44.1875 z " id="DejaVuSans-109"/> - <path d="M 45.40625 46.390625 + <path d="M 45.40625 46.390625 L 45.40625 75.984375 L 54.390625 75.984375 L 54.390625 0 @@ -881,7 +894,7 @@ Q 22.953125 48.484375 18.875 42.84375 Q 14.796875 37.203125 14.796875 27.296875 z " id="DejaVuSans-100"/> - <path d="M 56.203125 29.59375 + <path d="M 56.203125 29.59375 L 56.203125 25.203125 L 14.890625 25.203125 Q 15.484375 15.921875 20.484375 11.0625 @@ -910,7 +923,7 @@ L 32.375 61.625 L 24.90625 61.625 z " id="DejaVuSans-233"/> - <path d="M 18.3125 70.21875 + <path d="M 18.3125 70.21875 L 18.3125 54.6875 L 36.8125 54.6875 L 36.8125 47.703125 @@ -930,8 +943,7 @@ L 9.28125 54.6875 L 9.28125 70.21875 z " id="DejaVuSans-116"/> - </defs> - <g transform="translate(31.795312 253.394125)rotate(-90)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-84"/> <use x="44.083984" xlink:href="#DejaVuSans-101"/> <use x="105.607422" xlink:href="#DejaVuSans-109"/> diff --git a/doc/charts/chart_deploy_time_win10.png b/doc/charts/chart_deploy_time_win10.png index ee8a4bf..9ffbe72 100644 --- a/doc/charts/chart_deploy_time_win10.png +++ b/doc/charts/chart_deploy_time_win10.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ccdd7f2f8a9352cc44a5d2d1d8fa6312b882072dbddeeafd8ddaabaf069c251f -size 19588 +oid sha256:ececbb3c526023b31d619469bef208357e4b9328d7191ace787f138945793566 +size 19594 diff --git a/doc/charts/chart_deploy_time_win10.svg b/doc/charts/chart_deploy_time_win10.svg index 3c64f1f..08df132 100644 --- a/doc/charts/chart_deploy_time_win10.svg +++ b/doc/charts/chart_deploy_time_win10.svg @@ -3,10 +3,22 @@ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <!-- Created with matplotlib (https://matplotlib.org/) --> <svg height="345.6pt" version="1.1" viewBox="0 0 460.8 345.6" width="460.8pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <metadata> + <rdf:RDF xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> + <cc:Work> + <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> + <dc:date>2020-08-16T19:18:10.751033</dc:date> + <dc:format>image/svg+xml</dc:format> + <dc:creator> + <cc:Agent> + <dc:title>Matplotlib v3.3.0, https://matplotlib.org/</dc:title> + </cc:Agent> + </dc:creator> + </cc:Work> + </rdf:RDF> + </metadata> <defs> - <style type="text/css"> -*{stroke-linecap:butt;stroke-linejoin:round;} - </style> + <style type="text/css">*{stroke-linecap:butt;stroke-linejoin:round;}</style> </defs> <g id="figure_1"> <g id="patch_1"> @@ -56,8 +68,9 @@ L 0 3.5 </g> <g id="text_1"> <!-- Gzip --> - <defs> - <path d="M 59.515625 10.40625 + <g transform="translate(134.916463 308.358437)scale(0.1 -0.1)"> + <defs> + <path d="M 59.515625 10.40625 L 59.515625 29.984375 L 43.40625 29.984375 L 43.40625 38.09375 @@ -82,7 +95,7 @@ Q 48.046875 6.6875 52.140625 7.59375 Q 56.25 8.5 59.515625 10.40625 z " id="DejaVuSans-71"/> - <path d="M 5.515625 54.6875 + <path d="M 5.515625 54.6875 L 48.1875 54.6875 L 48.1875 46.484375 L 14.40625 7.171875 @@ -94,7 +107,7 @@ L 38.09375 47.515625 L 5.515625 47.515625 z " id="DejaVuSans-122"/> - <path d="M 9.421875 54.6875 + <path d="M 9.421875 54.6875 L 18.40625 54.6875 L 18.40625 0 L 9.421875 0 @@ -105,7 +118,7 @@ L 18.40625 64.59375 L 9.421875 64.59375 z " id="DejaVuSans-105"/> - <path d="M 18.109375 8.203125 + <path d="M 18.109375 8.203125 L 18.109375 -20.796875 L 9.078125 -20.796875 L 9.078125 54.6875 @@ -131,16 +144,16 @@ Q 40.53125 6.109375 44.609375 11.75 Q 48.6875 17.390625 48.6875 27.296875 z " id="DejaVuSans-112"/> - </defs> - <g transform="translate(134.916463 308.358437)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-71"/> <use x="77.490234" xlink:href="#DejaVuSans-122"/> <use x="129.980469" xlink:href="#DejaVuSans-105"/> <use x="157.763672" xlink:href="#DejaVuSans-112"/> </g> <!-- (sans cache) --> - <defs> - <path d="M 31 75.875 + <g transform="translate(114.237557 319.55625)scale(0.1 -0.1)"> + <defs> + <path d="M 31 75.875 Q 24.46875 64.65625 21.28125 53.65625 Q 18.109375 42.671875 18.109375 31.390625 Q 18.109375 20.125 21.3125 9.0625 @@ -152,7 +165,7 @@ Q 8.59375 42.28125 12.203125 53.3125 Q 15.828125 64.359375 23.1875 75.875 z " id="DejaVuSans-40"/> - <path d="M 44.28125 53.078125 + <path d="M 44.28125 53.078125 L 44.28125 44.578125 Q 40.484375 46.53125 36.375 47.5 Q 32.28125 48.484375 27.875 48.484375 @@ -183,7 +196,7 @@ Q 31.78125 56 36.171875 55.265625 Q 40.578125 54.546875 44.28125 53.078125 z " id="DejaVuSans-115"/> - <path d="M 34.28125 27.484375 + <path d="M 34.28125 27.484375 Q 23.390625 27.484375 19.1875 25 Q 14.984375 22.515625 14.984375 16.5 Q 14.984375 11.71875 18.140625 8.90625 @@ -215,7 +228,7 @@ Q 40.484375 56 46.34375 49.84375 Q 52.203125 43.703125 52.203125 31.203125 z " id="DejaVuSans-97"/> - <path d="M 54.890625 33.015625 + <path d="M 54.890625 33.015625 L 54.890625 0 L 45.90625 0 L 45.90625 32.71875 @@ -234,8 +247,8 @@ Q 45.21875 56 50.046875 50.171875 Q 54.890625 44.34375 54.890625 33.015625 z " id="DejaVuSans-110"/> - <path id="DejaVuSans-32"/> - <path d="M 48.78125 52.59375 + <path id="DejaVuSans-32"/> + <path d="M 48.78125 52.59375 L 48.78125 44.1875 Q 44.96875 46.296875 41.140625 47.34375 Q 37.3125 48.390625 33.40625 48.390625 @@ -256,7 +269,7 @@ Q 37.15625 56 41.109375 55.140625 Q 45.0625 54.296875 48.78125 52.59375 z " id="DejaVuSans-99"/> - <path d="M 54.890625 33.015625 + <path d="M 54.890625 33.015625 L 54.890625 0 L 45.90625 0 L 45.90625 32.71875 @@ -275,7 +288,7 @@ Q 45.21875 56 50.046875 50.171875 Q 54.890625 44.34375 54.890625 33.015625 z " id="DejaVuSans-104"/> - <path d="M 56.203125 29.59375 + <path d="M 56.203125 29.59375 L 56.203125 25.203125 L 14.890625 25.203125 Q 15.484375 15.921875 20.484375 11.0625 @@ -299,7 +312,7 @@ Q 24.90625 48.390625 20.390625 44.140625 Q 15.875 39.890625 15.1875 32.171875 z " id="DejaVuSans-101"/> - <path d="M 8.015625 75.875 + <path d="M 8.015625 75.875 L 15.828125 75.875 Q 23.140625 64.359375 26.78125 53.3125 Q 30.421875 42.28125 30.421875 31.390625 @@ -312,8 +325,7 @@ Q 20.90625 42.671875 17.703125 53.65625 Q 14.5 64.65625 8.015625 75.875 z " id="DejaVuSans-41"/> - </defs> - <g transform="translate(114.237557 319.55625)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-40"/> <use x="39.013672" xlink:href="#DejaVuSans-115"/> <use x="91.113281" xlink:href="#DejaVuSans-97"/> @@ -337,8 +349,9 @@ z </g> <g id="text_2"> <!-- Clonezilla --> - <defs> - <path d="M 64.40625 67.28125 + <g transform="translate(302.301193 308.358437)scale(0.1 -0.1)"> + <defs> + <path d="M 64.40625 67.28125 L 64.40625 56.890625 Q 59.421875 61.53125 53.78125 63.8125 Q 48.140625 66.109375 41.796875 66.109375 @@ -359,13 +372,13 @@ Q 47.75 74.21875 53.53125 72.484375 Q 59.328125 70.75 64.40625 67.28125 z " id="DejaVuSans-67"/> - <path d="M 9.421875 75.984375 + <path d="M 9.421875 75.984375 L 18.40625 75.984375 L 18.40625 0 L 9.421875 0 z " id="DejaVuSans-108"/> - <path d="M 30.609375 48.390625 + <path d="M 30.609375 48.390625 Q 23.390625 48.390625 19.1875 42.75 Q 14.984375 37.109375 14.984375 27.296875 Q 14.984375 17.484375 19.15625 11.84375 @@ -386,8 +399,7 @@ Q 5.515625 40.765625 12.171875 48.375 Q 18.84375 56 30.609375 56 z " id="DejaVuSans-111"/> - </defs> - <g transform="translate(302.301193 308.358437)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-67"/> <use x="69.824219" xlink:href="#DejaVuSans-108"/> <use x="97.607422" xlink:href="#DejaVuSans-111"/> @@ -418,8 +430,9 @@ z </g> <g id="text_3"> <!-- Type --> - <defs> - <path d="M -0.296875 72.90625 + <g transform="translate(224.677188 333.234375)scale(0.1 -0.1)"> + <defs> + <path d="M -0.296875 72.90625 L 61.375 72.90625 L 61.375 64.59375 L 35.5 64.59375 @@ -429,7 +442,7 @@ L 25.59375 64.59375 L -0.296875 64.59375 z " id="DejaVuSans-84"/> - <path d="M 32.171875 -5.078125 + <path d="M 32.171875 -5.078125 Q 28.375 -14.84375 24.75 -17.8125 Q 21.140625 -20.796875 15.09375 -20.796875 L 7.90625 -20.796875 @@ -445,8 +458,7 @@ L 46.6875 54.6875 L 56.203125 54.6875 z " id="DejaVuSans-121"/> - </defs> - <g transform="translate(224.677188 333.234375)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-84"/> <use x="45.458984" xlink:href="#DejaVuSans-121"/> <use x="104.638672" xlink:href="#DejaVuSans-112"/> @@ -468,8 +480,9 @@ L -3.5 0 </g> <g id="text_4"> <!-- 0 --> - <defs> - <path d="M 31.78125 66.40625 + <g transform="translate(44.2375 297.559219)scale(0.1 -0.1)"> + <defs> + <path d="M 31.78125 66.40625 Q 24.171875 66.40625 20.328125 58.90625 Q 16.5 51.421875 16.5 36.375 Q 16.5 21.390625 20.328125 13.890625 @@ -490,8 +503,7 @@ Q 6.59375 54.828125 13.0625 64.515625 Q 19.53125 74.21875 31.78125 74.21875 z " id="DejaVuSans-48"/> - </defs> - <g transform="translate(44.2375 297.559219)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-48"/> </g> </g> @@ -504,8 +516,9 @@ z </g> <g id="text_5"> <!-- 500 --> - <defs> - <path d="M 10.796875 72.90625 + <g transform="translate(31.5125 262.56442)scale(0.1 -0.1)"> + <defs> + <path d="M 10.796875 72.90625 L 49.515625 72.90625 L 49.515625 64.59375 L 19.828125 64.59375 @@ -529,8 +542,7 @@ Q 22.75 39.890625 18.8125 39.015625 Q 14.890625 38.140625 10.796875 36.28125 z " id="DejaVuSans-53"/> - </defs> - <g transform="translate(31.5125 262.56442)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-53"/> <use x="63.623047" xlink:href="#DejaVuSans-48"/> <use x="127.246094" xlink:href="#DejaVuSans-48"/> @@ -545,8 +557,9 @@ z </g> <g id="text_6"> <!-- 1000 --> - <defs> - <path d="M 12.40625 8.296875 + <g transform="translate(25.15 227.569622)scale(0.1 -0.1)"> + <defs> + <path d="M 12.40625 8.296875 L 28.515625 8.296875 L 28.515625 63.921875 L 10.984375 60.40625 @@ -559,8 +572,7 @@ L 54.390625 0 L 12.40625 0 z " id="DejaVuSans-49"/> - </defs> - <g transform="translate(25.15 227.569622)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-49"/> <use x="63.623047" xlink:href="#DejaVuSans-48"/> <use x="127.246094" xlink:href="#DejaVuSans-48"/> @@ -592,8 +604,9 @@ z </g> <g id="text_8"> <!-- 2000 --> - <defs> - <path d="M 19.1875 8.296875 + <g transform="translate(25.15 157.580025)scale(0.1 -0.1)"> + <defs> + <path d="M 19.1875 8.296875 L 53.609375 8.296875 L 53.609375 0 L 7.328125 0 @@ -617,8 +630,7 @@ Q 44.1875 33.984375 37.640625 27.21875 Q 31.109375 20.453125 19.1875 8.296875 z " id="DejaVuSans-50"/> - </defs> - <g transform="translate(25.15 157.580025)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-50"/> <use x="63.623047" xlink:href="#DejaVuSans-48"/> <use x="127.246094" xlink:href="#DejaVuSans-48"/> @@ -650,8 +662,9 @@ z </g> <g id="text_10"> <!-- 3000 --> - <defs> - <path d="M 40.578125 39.3125 + <g transform="translate(25.15 87.590428)scale(0.1 -0.1)"> + <defs> + <path d="M 40.578125 39.3125 Q 47.65625 37.796875 51.625 33 Q 55.609375 28.21875 55.609375 21.1875 Q 55.609375 10.40625 48.1875 4.484375 @@ -683,8 +696,7 @@ Q 53.90625 49.265625 50.4375 45.09375 Q 46.96875 40.921875 40.578125 39.3125 z " id="DejaVuSans-51"/> - </defs> - <g transform="translate(25.15 87.590428)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-51"/> <use x="63.623047" xlink:href="#DejaVuSans-48"/> <use x="127.246094" xlink:href="#DejaVuSans-48"/> @@ -710,8 +722,9 @@ z </g> <g id="text_12"> <!-- Temps de déploiement (secondes) --> - <defs> - <path d="M 52 44.1875 + <g transform="translate(19.070312 253.394125)rotate(-90)scale(0.1 -0.1)"> + <defs> + <path d="M 52 44.1875 Q 55.375 50.25 60.0625 53.125 Q 64.75 56 71.09375 56 Q 79.640625 56 84.28125 50.015625 @@ -741,7 +754,7 @@ Q 41.65625 56 45.828125 52.96875 Q 50 49.953125 52 44.1875 z " id="DejaVuSans-109"/> - <path d="M 45.40625 46.390625 + <path d="M 45.40625 46.390625 L 45.40625 75.984375 L 54.390625 75.984375 L 54.390625 0 @@ -767,7 +780,7 @@ Q 22.953125 48.484375 18.875 42.84375 Q 14.796875 37.203125 14.796875 27.296875 z " id="DejaVuSans-100"/> - <path d="M 56.203125 29.59375 + <path d="M 56.203125 29.59375 L 56.203125 25.203125 L 14.890625 25.203125 Q 15.484375 15.921875 20.484375 11.0625 @@ -796,7 +809,7 @@ L 32.375 61.625 L 24.90625 61.625 z " id="DejaVuSans-233"/> - <path d="M 18.3125 70.21875 + <path d="M 18.3125 70.21875 L 18.3125 54.6875 L 36.8125 54.6875 L 36.8125 47.703125 @@ -816,8 +829,7 @@ L 9.28125 54.6875 L 9.28125 70.21875 z " id="DejaVuSans-116"/> - </defs> - <g transform="translate(19.070312 253.394125)rotate(-90)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-84"/> <use x="44.083984" xlink:href="#DejaVuSans-101"/> <use x="105.607422" xlink:href="#DejaVuSans-109"/> diff --git a/doc/charts/chart_deploy_time_xubuntu.png b/doc/charts/chart_deploy_time_xubuntu.png index 4d1fbeb..b0502c2 100644 --- a/doc/charts/chart_deploy_time_xubuntu.png +++ b/doc/charts/chart_deploy_time_xubuntu.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1f360c0e3544b5c6f67f9088263b6ce7f2c2261a4c4c46d288772646f9a37c81 -size 19288 +oid sha256:730faa3b5d5b5c1a31a1f9455154f66e7ebedff0b912f66255fa16222edbfa5a +size 19266 diff --git a/doc/charts/chart_deploy_time_xubuntu.svg b/doc/charts/chart_deploy_time_xubuntu.svg index b2746b1..e461743 100644 --- a/doc/charts/chart_deploy_time_xubuntu.svg +++ b/doc/charts/chart_deploy_time_xubuntu.svg @@ -3,10 +3,22 @@ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <!-- Created with matplotlib (https://matplotlib.org/) --> <svg height="345.6pt" version="1.1" viewBox="0 0 460.8 345.6" width="460.8pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <metadata> + <rdf:RDF xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> + <cc:Work> + <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> + <dc:date>2020-08-16T19:18:10.244037</dc:date> + <dc:format>image/svg+xml</dc:format> + <dc:creator> + <cc:Agent> + <dc:title>Matplotlib v3.3.0, https://matplotlib.org/</dc:title> + </cc:Agent> + </dc:creator> + </cc:Work> + </rdf:RDF> + </metadata> <defs> - <style type="text/css"> -*{stroke-linecap:butt;stroke-linejoin:round;} - </style> + <style type="text/css">*{stroke-linecap:butt;stroke-linejoin:round;}</style> </defs> <g id="figure_1"> <g id="patch_1"> @@ -72,8 +84,9 @@ L 0 3.5 </g> <g id="text_1"> <!-- Gzip --> - <defs> - <path d="M 59.515625 10.40625 + <g transform="translate(96.945171 308.358437)scale(0.1 -0.1)"> + <defs> + <path d="M 59.515625 10.40625 L 59.515625 29.984375 L 43.40625 29.984375 L 43.40625 38.09375 @@ -98,7 +111,7 @@ Q 48.046875 6.6875 52.140625 7.59375 Q 56.25 8.5 59.515625 10.40625 z " id="DejaVuSans-71"/> - <path d="M 5.515625 54.6875 + <path d="M 5.515625 54.6875 L 48.1875 54.6875 L 48.1875 46.484375 L 14.40625 7.171875 @@ -110,7 +123,7 @@ L 38.09375 47.515625 L 5.515625 47.515625 z " id="DejaVuSans-122"/> - <path d="M 9.421875 54.6875 + <path d="M 9.421875 54.6875 L 18.40625 54.6875 L 18.40625 0 L 9.421875 0 @@ -121,7 +134,7 @@ L 18.40625 64.59375 L 9.421875 64.59375 z " id="DejaVuSans-105"/> - <path d="M 18.109375 8.203125 + <path d="M 18.109375 8.203125 L 18.109375 -20.796875 L 9.078125 -20.796875 L 9.078125 54.6875 @@ -147,16 +160,16 @@ Q 40.53125 6.109375 44.609375 11.75 Q 48.6875 17.390625 48.6875 27.296875 z " id="DejaVuSans-112"/> - </defs> - <g transform="translate(96.945171 308.358437)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-71"/> <use x="77.490234" xlink:href="#DejaVuSans-122"/> <use x="129.980469" xlink:href="#DejaVuSans-105"/> <use x="157.763672" xlink:href="#DejaVuSans-112"/> </g> <!-- (sans cache) --> - <defs> - <path d="M 31 75.875 + <g transform="translate(76.266265 319.55625)scale(0.1 -0.1)"> + <defs> + <path d="M 31 75.875 Q 24.46875 64.65625 21.28125 53.65625 Q 18.109375 42.671875 18.109375 31.390625 Q 18.109375 20.125 21.3125 9.0625 @@ -168,7 +181,7 @@ Q 8.59375 42.28125 12.203125 53.3125 Q 15.828125 64.359375 23.1875 75.875 z " id="DejaVuSans-40"/> - <path d="M 44.28125 53.078125 + <path d="M 44.28125 53.078125 L 44.28125 44.578125 Q 40.484375 46.53125 36.375 47.5 Q 32.28125 48.484375 27.875 48.484375 @@ -199,7 +212,7 @@ Q 31.78125 56 36.171875 55.265625 Q 40.578125 54.546875 44.28125 53.078125 z " id="DejaVuSans-115"/> - <path d="M 34.28125 27.484375 + <path d="M 34.28125 27.484375 Q 23.390625 27.484375 19.1875 25 Q 14.984375 22.515625 14.984375 16.5 Q 14.984375 11.71875 18.140625 8.90625 @@ -231,7 +244,7 @@ Q 40.484375 56 46.34375 49.84375 Q 52.203125 43.703125 52.203125 31.203125 z " id="DejaVuSans-97"/> - <path d="M 54.890625 33.015625 + <path d="M 54.890625 33.015625 L 54.890625 0 L 45.90625 0 L 45.90625 32.71875 @@ -250,8 +263,8 @@ Q 45.21875 56 50.046875 50.171875 Q 54.890625 44.34375 54.890625 33.015625 z " id="DejaVuSans-110"/> - <path id="DejaVuSans-32"/> - <path d="M 48.78125 52.59375 + <path id="DejaVuSans-32"/> + <path d="M 48.78125 52.59375 L 48.78125 44.1875 Q 44.96875 46.296875 41.140625 47.34375 Q 37.3125 48.390625 33.40625 48.390625 @@ -272,7 +285,7 @@ Q 37.15625 56 41.109375 55.140625 Q 45.0625 54.296875 48.78125 52.59375 z " id="DejaVuSans-99"/> - <path d="M 54.890625 33.015625 + <path d="M 54.890625 33.015625 L 54.890625 0 L 45.90625 0 L 45.90625 32.71875 @@ -291,7 +304,7 @@ Q 45.21875 56 50.046875 50.171875 Q 54.890625 44.34375 54.890625 33.015625 z " id="DejaVuSans-104"/> - <path d="M 56.203125 29.59375 + <path d="M 56.203125 29.59375 L 56.203125 25.203125 L 14.890625 25.203125 Q 15.484375 15.921875 20.484375 11.0625 @@ -315,7 +328,7 @@ Q 24.90625 48.390625 20.390625 44.140625 Q 15.875 39.890625 15.1875 32.171875 z " id="DejaVuSans-101"/> - <path d="M 8.015625 75.875 + <path d="M 8.015625 75.875 L 15.828125 75.875 Q 23.140625 64.359375 26.78125 53.3125 Q 30.421875 42.28125 30.421875 31.390625 @@ -328,8 +341,7 @@ Q 20.90625 42.671875 17.703125 53.65625 Q 14.5 64.65625 8.015625 75.875 z " id="DejaVuSans-41"/> - </defs> - <g transform="translate(76.266265 319.55625)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-40"/> <use x="39.013672" xlink:href="#DejaVuSans-115"/> <use x="91.113281" xlink:href="#DejaVuSans-97"/> @@ -360,8 +372,9 @@ z <use x="157.763672" xlink:href="#DejaVuSans-112"/> </g> <!-- (avec cache) --> - <defs> - <path d="M 2.984375 54.6875 + <g transform="translate(161.29464 319.55625)scale(0.1 -0.1)"> + <defs> + <path d="M 2.984375 54.6875 L 12.5 54.6875 L 29.59375 8.796875 L 46.6875 54.6875 @@ -370,8 +383,7 @@ L 35.6875 0 L 23.484375 0 z " id="DejaVuSans-118"/> - </defs> - <g transform="translate(161.29464 319.55625)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-40"/> <use x="39.013672" xlink:href="#DejaVuSans-97"/> <use x="100.292969" xlink:href="#DejaVuSans-118"/> @@ -395,8 +407,9 @@ z </g> <g id="text_3"> <!-- Clonezilla --> - <defs> - <path d="M 64.40625 67.28125 + <g transform="translate(254.837078 308.358437)scale(0.1 -0.1)"> + <defs> + <path d="M 64.40625 67.28125 L 64.40625 56.890625 Q 59.421875 61.53125 53.78125 63.8125 Q 48.140625 66.109375 41.796875 66.109375 @@ -417,13 +430,13 @@ Q 47.75 74.21875 53.53125 72.484375 Q 59.328125 70.75 64.40625 67.28125 z " id="DejaVuSans-67"/> - <path d="M 9.421875 75.984375 + <path d="M 9.421875 75.984375 L 18.40625 75.984375 L 18.40625 0 L 9.421875 0 z " id="DejaVuSans-108"/> - <path d="M 30.609375 48.390625 + <path d="M 30.609375 48.390625 Q 23.390625 48.390625 19.1875 42.75 Q 14.984375 37.109375 14.984375 27.296875 Q 14.984375 17.484375 19.15625 11.84375 @@ -444,8 +457,7 @@ Q 5.515625 40.765625 12.171875 48.375 Q 18.84375 56 30.609375 56 z " id="DejaVuSans-111"/> - </defs> - <g transform="translate(254.837078 308.358437)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-67"/> <use x="69.824219" xlink:href="#DejaVuSans-108"/> <use x="97.607422" xlink:href="#DejaVuSans-111"/> @@ -513,8 +525,9 @@ z </g> <g id="text_5"> <!-- Type --> - <defs> - <path d="M -0.296875 72.90625 + <g transform="translate(224.677188 333.234375)scale(0.1 -0.1)"> + <defs> + <path d="M -0.296875 72.90625 L 61.375 72.90625 L 61.375 64.59375 L 35.5 64.59375 @@ -524,7 +537,7 @@ L 25.59375 64.59375 L -0.296875 64.59375 z " id="DejaVuSans-84"/> - <path d="M 32.171875 -5.078125 + <path d="M 32.171875 -5.078125 Q 28.375 -14.84375 24.75 -17.8125 Q 21.140625 -20.796875 15.09375 -20.796875 L 7.90625 -20.796875 @@ -540,8 +553,7 @@ L 46.6875 54.6875 L 56.203125 54.6875 z " id="DejaVuSans-121"/> - </defs> - <g transform="translate(224.677188 333.234375)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-84"/> <use x="45.458984" xlink:href="#DejaVuSans-121"/> <use x="104.638672" xlink:href="#DejaVuSans-112"/> @@ -563,8 +575,9 @@ L -3.5 0 </g> <g id="text_6"> <!-- 0 --> - <defs> - <path d="M 31.78125 66.40625 + <g transform="translate(44.2375 297.559219)scale(0.1 -0.1)"> + <defs> + <path d="M 31.78125 66.40625 Q 24.171875 66.40625 20.328125 58.90625 Q 16.5 51.421875 16.5 36.375 Q 16.5 21.390625 20.328125 13.890625 @@ -585,8 +598,7 @@ Q 6.59375 54.828125 13.0625 64.515625 Q 19.53125 74.21875 31.78125 74.21875 z " id="DejaVuSans-48"/> - </defs> - <g transform="translate(44.2375 297.559219)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-48"/> </g> </g> @@ -599,8 +611,9 @@ z </g> <g id="text_7"> <!-- 100 --> - <defs> - <path d="M 12.40625 8.296875 + <g transform="translate(31.5125 259.420443)scale(0.1 -0.1)"> + <defs> + <path d="M 12.40625 8.296875 L 28.515625 8.296875 L 28.515625 63.921875 L 10.984375 60.40625 @@ -613,8 +626,7 @@ L 54.390625 0 L 12.40625 0 z " id="DejaVuSans-49"/> - </defs> - <g transform="translate(31.5125 259.420443)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-49"/> <use x="63.623047" xlink:href="#DejaVuSans-48"/> <use x="127.246094" xlink:href="#DejaVuSans-48"/> @@ -629,8 +641,9 @@ z </g> <g id="text_8"> <!-- 200 --> - <defs> - <path d="M 19.1875 8.296875 + <g transform="translate(31.5125 221.281668)scale(0.1 -0.1)"> + <defs> + <path d="M 19.1875 8.296875 L 53.609375 8.296875 L 53.609375 0 L 7.328125 0 @@ -654,8 +667,7 @@ Q 44.1875 33.984375 37.640625 27.21875 Q 31.109375 20.453125 19.1875 8.296875 z " id="DejaVuSans-50"/> - </defs> - <g transform="translate(31.5125 221.281668)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-50"/> <use x="63.623047" xlink:href="#DejaVuSans-48"/> <use x="127.246094" xlink:href="#DejaVuSans-48"/> @@ -670,8 +682,9 @@ z </g> <g id="text_9"> <!-- 300 --> - <defs> - <path d="M 40.578125 39.3125 + <g transform="translate(31.5125 183.142892)scale(0.1 -0.1)"> + <defs> + <path d="M 40.578125 39.3125 Q 47.65625 37.796875 51.625 33 Q 55.609375 28.21875 55.609375 21.1875 Q 55.609375 10.40625 48.1875 4.484375 @@ -703,8 +716,7 @@ Q 53.90625 49.265625 50.4375 45.09375 Q 46.96875 40.921875 40.578125 39.3125 z " id="DejaVuSans-51"/> - </defs> - <g transform="translate(31.5125 183.142892)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-51"/> <use x="63.623047" xlink:href="#DejaVuSans-48"/> <use x="127.246094" xlink:href="#DejaVuSans-48"/> @@ -719,8 +731,9 @@ z </g> <g id="text_10"> <!-- 400 --> - <defs> - <path d="M 37.796875 64.3125 + <g transform="translate(31.5125 145.004117)scale(0.1 -0.1)"> + <defs> + <path d="M 37.796875 64.3125 L 12.890625 25.390625 L 37.796875 25.390625 z @@ -737,8 +750,7 @@ L 4.890625 17.1875 L 4.890625 26.703125 z " id="DejaVuSans-52"/> - </defs> - <g transform="translate(31.5125 145.004117)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-52"/> <use x="63.623047" xlink:href="#DejaVuSans-48"/> <use x="127.246094" xlink:href="#DejaVuSans-48"/> @@ -753,8 +765,9 @@ z </g> <g id="text_11"> <!-- 500 --> - <defs> - <path d="M 10.796875 72.90625 + <g transform="translate(31.5125 106.865341)scale(0.1 -0.1)"> + <defs> + <path d="M 10.796875 72.90625 L 49.515625 72.90625 L 49.515625 64.59375 L 19.828125 64.59375 @@ -778,8 +791,7 @@ Q 22.75 39.890625 18.8125 39.015625 Q 14.890625 38.140625 10.796875 36.28125 z " id="DejaVuSans-53"/> - </defs> - <g transform="translate(31.5125 106.865341)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-53"/> <use x="63.623047" xlink:href="#DejaVuSans-48"/> <use x="127.246094" xlink:href="#DejaVuSans-48"/> @@ -794,8 +806,9 @@ z </g> <g id="text_12"> <!-- 600 --> - <defs> - <path d="M 33.015625 40.375 + <g transform="translate(31.5125 68.726566)scale(0.1 -0.1)"> + <defs> + <path d="M 33.015625 40.375 Q 26.375 40.375 22.484375 35.828125 Q 18.609375 31.296875 18.609375 23.390625 Q 18.609375 15.53125 22.484375 10.953125 @@ -825,8 +838,7 @@ Q 40.921875 74.21875 44.703125 73.484375 Q 48.484375 72.75 52.59375 71.296875 z " id="DejaVuSans-54"/> - </defs> - <g transform="translate(31.5125 68.726566)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-54"/> <use x="63.623047" xlink:href="#DejaVuSans-48"/> <use x="127.246094" xlink:href="#DejaVuSans-48"/> @@ -835,8 +847,9 @@ z </g> <g id="text_13"> <!-- Temps de déploiement (secondes) --> - <defs> - <path d="M 52 44.1875 + <g transform="translate(25.432812 253.394125)rotate(-90)scale(0.1 -0.1)"> + <defs> + <path d="M 52 44.1875 Q 55.375 50.25 60.0625 53.125 Q 64.75 56 71.09375 56 Q 79.640625 56 84.28125 50.015625 @@ -866,7 +879,7 @@ Q 41.65625 56 45.828125 52.96875 Q 50 49.953125 52 44.1875 z " id="DejaVuSans-109"/> - <path d="M 45.40625 46.390625 + <path d="M 45.40625 46.390625 L 45.40625 75.984375 L 54.390625 75.984375 L 54.390625 0 @@ -892,7 +905,7 @@ Q 22.953125 48.484375 18.875 42.84375 Q 14.796875 37.203125 14.796875 27.296875 z " id="DejaVuSans-100"/> - <path d="M 56.203125 29.59375 + <path d="M 56.203125 29.59375 L 56.203125 25.203125 L 14.890625 25.203125 Q 15.484375 15.921875 20.484375 11.0625 @@ -921,7 +934,7 @@ L 32.375 61.625 L 24.90625 61.625 z " id="DejaVuSans-233"/> - <path d="M 18.3125 70.21875 + <path d="M 18.3125 70.21875 L 18.3125 54.6875 L 36.8125 54.6875 L 36.8125 47.703125 @@ -941,8 +954,7 @@ L 9.28125 54.6875 L 9.28125 70.21875 z " id="DejaVuSans-116"/> - </defs> - <g transform="translate(25.432812 253.394125)rotate(-90)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-84"/> <use x="44.083984" xlink:href="#DejaVuSans-101"/> <use x="105.607422" xlink:href="#DejaVuSans-109"/> diff --git a/doc/charts/chart_image_sizes_debian.png b/doc/charts/chart_image_sizes_debian.png index 33e7fa8..7eb8eba 100644 --- a/doc/charts/chart_image_sizes_debian.png +++ b/doc/charts/chart_image_sizes_debian.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:70cac82311df35270ca7e3df975b44c89250c29a2e92f16d5017f0c6d8c9ae4c -size 12262 +oid sha256:1c83eab1894f44baf8d346a345a9e98da1d2385f7b92abcc3bf363adc7416a24 +size 12235 diff --git a/doc/charts/chart_image_sizes_debian.svg b/doc/charts/chart_image_sizes_debian.svg index 601d6de..9d5b667 100644 --- a/doc/charts/chart_image_sizes_debian.svg +++ b/doc/charts/chart_image_sizes_debian.svg @@ -3,10 +3,22 @@ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <!-- Created with matplotlib (https://matplotlib.org/) --> <svg height="345.6pt" version="1.1" viewBox="0 0 460.8 345.6" width="460.8pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <metadata> + <rdf:RDF xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> + <cc:Work> + <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> + <dc:date>2020-08-16T19:18:08.204014</dc:date> + <dc:format>image/svg+xml</dc:format> + <dc:creator> + <cc:Agent> + <dc:title>Matplotlib v3.3.0, https://matplotlib.org/</dc:title> + </cc:Agent> + </dc:creator> + </cc:Work> + </rdf:RDF> + </metadata> <defs> - <style type="text/css"> -*{stroke-linecap:butt;stroke-linejoin:round;} - </style> + <style type="text/css">*{stroke-linecap:butt;stroke-linejoin:round;}</style> </defs> <g id="figure_1"> <g id="patch_1"> @@ -64,8 +76,9 @@ L 0 3.5 </g> <g id="text_1"> <!-- Déployé --> - <defs> - <path d="M 19.671875 64.796875 + <g transform="translate(99.626792 308.758437)scale(0.1 -0.1)"> + <defs> + <path d="M 19.671875 64.796875 L 19.671875 8.109375 L 31.59375 8.109375 Q 46.6875 8.109375 53.6875 14.9375 @@ -82,7 +95,7 @@ Q 51.171875 0 30.078125 0 L 9.8125 0 z " id="DejaVuSans-68"/> - <path d="M 56.203125 29.59375 + <path d="M 56.203125 29.59375 L 56.203125 25.203125 L 14.890625 25.203125 Q 15.484375 15.921875 20.484375 11.0625 @@ -111,7 +124,7 @@ L 32.375 61.625 L 24.90625 61.625 z " id="DejaVuSans-233"/> - <path d="M 18.109375 8.203125 + <path d="M 18.109375 8.203125 L 18.109375 -20.796875 L 9.078125 -20.796875 L 9.078125 54.6875 @@ -137,13 +150,13 @@ Q 40.53125 6.109375 44.609375 11.75 Q 48.6875 17.390625 48.6875 27.296875 z " id="DejaVuSans-112"/> - <path d="M 9.421875 75.984375 + <path d="M 9.421875 75.984375 L 18.40625 75.984375 L 18.40625 0 L 9.421875 0 z " id="DejaVuSans-108"/> - <path d="M 30.609375 48.390625 + <path d="M 30.609375 48.390625 Q 23.390625 48.390625 19.1875 42.75 Q 14.984375 37.109375 14.984375 27.296875 Q 14.984375 17.484375 19.15625 11.84375 @@ -164,7 +177,7 @@ Q 5.515625 40.765625 12.171875 48.375 Q 18.84375 56 30.609375 56 z " id="DejaVuSans-111"/> - <path d="M 32.171875 -5.078125 + <path d="M 32.171875 -5.078125 Q 28.375 -14.84375 24.75 -17.8125 Q 21.140625 -20.796875 15.09375 -20.796875 L 7.90625 -20.796875 @@ -180,8 +193,7 @@ L 46.6875 54.6875 L 56.203125 54.6875 z " id="DejaVuSans-121"/> - </defs> - <g transform="translate(99.626792 308.758437)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-68"/> <use x="77.001953" xlink:href="#DejaVuSans-233"/> <use x="138.525391" xlink:href="#DejaVuSans-112"/> @@ -200,8 +212,9 @@ z </g> <g id="text_2"> <!-- Gzip --> - <defs> - <path d="M 59.515625 10.40625 + <g transform="translate(225.098281 308.358437)scale(0.1 -0.1)"> + <defs> + <path d="M 59.515625 10.40625 L 59.515625 29.984375 L 43.40625 29.984375 L 43.40625 38.09375 @@ -226,7 +239,7 @@ Q 48.046875 6.6875 52.140625 7.59375 Q 56.25 8.5 59.515625 10.40625 z " id="DejaVuSans-71"/> - <path d="M 5.515625 54.6875 + <path d="M 5.515625 54.6875 L 48.1875 54.6875 L 48.1875 46.484375 L 14.40625 7.171875 @@ -238,7 +251,7 @@ L 38.09375 47.515625 L 5.515625 47.515625 z " id="DejaVuSans-122"/> - <path d="M 9.421875 54.6875 + <path d="M 9.421875 54.6875 L 18.40625 54.6875 L 18.40625 0 L 9.421875 0 @@ -249,8 +262,7 @@ L 18.40625 64.59375 L 9.421875 64.59375 z " id="DejaVuSans-105"/> - </defs> - <g transform="translate(225.098281 308.358437)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-71"/> <use x="77.490234" xlink:href="#DejaVuSans-122"/> <use x="129.980469" xlink:href="#DejaVuSans-105"/> @@ -266,8 +278,9 @@ z </g> <g id="text_3"> <!-- Clonezilla --> - <defs> - <path d="M 64.40625 67.28125 + <g transform="translate(328.067427 308.358437)scale(0.1 -0.1)"> + <defs> + <path d="M 64.40625 67.28125 L 64.40625 56.890625 Q 59.421875 61.53125 53.78125 63.8125 Q 48.140625 66.109375 41.796875 66.109375 @@ -288,7 +301,7 @@ Q 47.75 74.21875 53.53125 72.484375 Q 59.328125 70.75 64.40625 67.28125 z " id="DejaVuSans-67"/> - <path d="M 54.890625 33.015625 + <path d="M 54.890625 33.015625 L 54.890625 0 L 45.90625 0 L 45.90625 32.71875 @@ -307,7 +320,7 @@ Q 45.21875 56 50.046875 50.171875 Q 54.890625 44.34375 54.890625 33.015625 z " id="DejaVuSans-110"/> - <path d="M 56.203125 29.59375 + <path d="M 56.203125 29.59375 L 56.203125 25.203125 L 14.890625 25.203125 Q 15.484375 15.921875 20.484375 11.0625 @@ -331,7 +344,7 @@ Q 24.90625 48.390625 20.390625 44.140625 Q 15.875 39.890625 15.1875 32.171875 z " id="DejaVuSans-101"/> - <path d="M 34.28125 27.484375 + <path d="M 34.28125 27.484375 Q 23.390625 27.484375 19.1875 25 Q 14.984375 22.515625 14.984375 16.5 Q 14.984375 11.71875 18.140625 8.90625 @@ -363,8 +376,7 @@ Q 40.484375 56 46.34375 49.84375 Q 52.203125 43.703125 52.203125 31.203125 z " id="DejaVuSans-97"/> - </defs> - <g transform="translate(328.067427 308.358437)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-67"/> <use x="69.824219" xlink:href="#DejaVuSans-108"/> <use x="97.607422" xlink:href="#DejaVuSans-111"/> @@ -380,8 +392,9 @@ z </g> <g id="text_4"> <!-- Type --> - <defs> - <path d="M -0.296875 72.90625 + <g transform="translate(224.677188 322.436562)scale(0.1 -0.1)"> + <defs> + <path d="M -0.296875 72.90625 L 61.375 72.90625 L 61.375 64.59375 L 35.5 64.59375 @@ -391,8 +404,7 @@ L 25.59375 64.59375 L -0.296875 64.59375 z " id="DejaVuSans-84"/> - </defs> - <g transform="translate(224.677188 322.436562)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-84"/> <use x="45.458984" xlink:href="#DejaVuSans-121"/> <use x="104.638672" xlink:href="#DejaVuSans-112"/> @@ -414,8 +426,9 @@ L -3.5 0 </g> <g id="text_5"> <!-- 0.0 --> - <defs> - <path d="M 31.78125 66.40625 + <g transform="translate(34.696875 297.559219)scale(0.1 -0.1)"> + <defs> + <path d="M 31.78125 66.40625 Q 24.171875 66.40625 20.328125 58.90625 Q 16.5 51.421875 16.5 36.375 Q 16.5 21.390625 20.328125 13.890625 @@ -436,14 +449,13 @@ Q 6.59375 54.828125 13.0625 64.515625 Q 19.53125 74.21875 31.78125 74.21875 z " id="DejaVuSans-48"/> - <path d="M 10.6875 12.40625 + <path d="M 10.6875 12.40625 L 21 12.40625 L 21 0 L 10.6875 0 z " id="DejaVuSans-46"/> - </defs> - <g transform="translate(34.696875 297.559219)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-48"/> <use x="63.623047" xlink:href="#DejaVuSans-46"/> <use x="95.410156" xlink:href="#DejaVuSans-48"/> @@ -458,8 +470,9 @@ z </g> <g id="text_6"> <!-- 0.5 --> - <defs> - <path d="M 10.796875 72.90625 + <g transform="translate(34.696875 260.251591)scale(0.1 -0.1)"> + <defs> + <path d="M 10.796875 72.90625 L 49.515625 72.90625 L 49.515625 64.59375 L 19.828125 64.59375 @@ -483,8 +496,7 @@ Q 22.75 39.890625 18.8125 39.015625 Q 14.890625 38.140625 10.796875 36.28125 z " id="DejaVuSans-53"/> - </defs> - <g transform="translate(34.696875 260.251591)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-48"/> <use x="63.623047" xlink:href="#DejaVuSans-46"/> <use x="95.410156" xlink:href="#DejaVuSans-53"/> @@ -499,8 +511,9 @@ z </g> <g id="text_7"> <!-- 1.0 --> - <defs> - <path d="M 12.40625 8.296875 + <g transform="translate(34.696875 222.943963)scale(0.1 -0.1)"> + <defs> + <path d="M 12.40625 8.296875 L 28.515625 8.296875 L 28.515625 63.921875 L 10.984375 60.40625 @@ -513,8 +526,7 @@ L 54.390625 0 L 12.40625 0 z " id="DejaVuSans-49"/> - </defs> - <g transform="translate(34.696875 222.943963)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-49"/> <use x="63.623047" xlink:href="#DejaVuSans-46"/> <use x="95.410156" xlink:href="#DejaVuSans-48"/> @@ -544,8 +556,9 @@ z </g> <g id="text_9"> <!-- 2.0 --> - <defs> - <path d="M 19.1875 8.296875 + <g transform="translate(34.696875 148.328706)scale(0.1 -0.1)"> + <defs> + <path d="M 19.1875 8.296875 L 53.609375 8.296875 L 53.609375 0 L 7.328125 0 @@ -569,8 +582,7 @@ Q 44.1875 33.984375 37.640625 27.21875 Q 31.109375 20.453125 19.1875 8.296875 z " id="DejaVuSans-50"/> - </defs> - <g transform="translate(34.696875 148.328706)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-50"/> <use x="63.623047" xlink:href="#DejaVuSans-46"/> <use x="95.410156" xlink:href="#DejaVuSans-48"/> @@ -600,8 +612,9 @@ z </g> <g id="text_11"> <!-- 3.0 --> - <defs> - <path d="M 40.578125 39.3125 + <g transform="translate(34.696875 73.71345)scale(0.1 -0.1)"> + <defs> + <path d="M 40.578125 39.3125 Q 47.65625 37.796875 51.625 33 Q 55.609375 28.21875 55.609375 21.1875 Q 55.609375 10.40625 48.1875 4.484375 @@ -633,8 +646,7 @@ Q 53.90625 49.265625 50.4375 45.09375 Q 46.96875 40.921875 40.578125 39.3125 z " id="DejaVuSans-51"/> - </defs> - <g transform="translate(34.696875 73.71345)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-51"/> <use x="63.623047" xlink:href="#DejaVuSans-46"/> <use x="95.410156" xlink:href="#DejaVuSans-48"/> @@ -643,9 +655,10 @@ z </g> <g id="text_12"> <!-- Taille (GB) --> - <defs> - <path id="DejaVuSans-32"/> - <path d="M 31 75.875 + <g transform="translate(28.617187 192.948031)rotate(-90)scale(0.1 -0.1)"> + <defs> + <path id="DejaVuSans-32"/> + <path d="M 31 75.875 Q 24.46875 64.65625 21.28125 53.65625 Q 18.109375 42.671875 18.109375 31.390625 Q 18.109375 20.125 21.3125 9.0625 @@ -657,7 +670,7 @@ Q 8.59375 42.28125 12.203125 53.3125 Q 15.828125 64.359375 23.1875 75.875 z " id="DejaVuSans-40"/> - <path d="M 19.671875 34.8125 + <path d="M 19.671875 34.8125 L 19.671875 8.109375 L 35.5 8.109375 Q 43.453125 8.109375 47.28125 11.40625 @@ -686,7 +699,7 @@ Q 48.25 0 35.984375 0 L 9.8125 0 z " id="DejaVuSans-66"/> - <path d="M 8.015625 75.875 + <path d="M 8.015625 75.875 L 15.828125 75.875 Q 23.140625 64.359375 26.78125 53.3125 Q 30.421875 42.28125 30.421875 31.390625 @@ -699,8 +712,7 @@ Q 20.90625 42.671875 17.703125 53.65625 Q 14.5 64.65625 8.015625 75.875 z " id="DejaVuSans-41"/> - </defs> - <g transform="translate(28.617187 192.948031)rotate(-90)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-84"/> <use x="44.583984" xlink:href="#DejaVuSans-97"/> <use x="105.863281" xlink:href="#DejaVuSans-105"/> diff --git a/doc/charts/chart_image_sizes_win10.png b/doc/charts/chart_image_sizes_win10.png index 1f307b4..8358bb8 100644 --- a/doc/charts/chart_image_sizes_win10.png +++ b/doc/charts/chart_image_sizes_win10.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0399fa84632fda7b3c7e26e7f75125abb7343df1f9f19a34a6eb802bec6b0516 -size 12569 +oid sha256:1d7e8bc591131e9a18bbc29ef29294100fa01f9a8904c88004abeec831dd519a +size 12543 diff --git a/doc/charts/chart_image_sizes_win10.svg b/doc/charts/chart_image_sizes_win10.svg index 1dbdf6b..4f089ff 100644 --- a/doc/charts/chart_image_sizes_win10.svg +++ b/doc/charts/chart_image_sizes_win10.svg @@ -3,10 +3,22 @@ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <!-- Created with matplotlib (https://matplotlib.org/) --> <svg height="345.6pt" version="1.1" viewBox="0 0 460.8 345.6" width="460.8pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <metadata> + <rdf:RDF xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> + <cc:Work> + <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> + <dc:date>2020-08-16T19:18:09.215542</dc:date> + <dc:format>image/svg+xml</dc:format> + <dc:creator> + <cc:Agent> + <dc:title>Matplotlib v3.3.0, https://matplotlib.org/</dc:title> + </cc:Agent> + </dc:creator> + </cc:Work> + </rdf:RDF> + </metadata> <defs> - <style type="text/css"> -*{stroke-linecap:butt;stroke-linejoin:round;} - </style> + <style type="text/css">*{stroke-linecap:butt;stroke-linejoin:round;}</style> </defs> <g id="figure_1"> <g id="patch_1"> @@ -64,8 +76,9 @@ L 0 3.5 </g> <g id="text_1"> <!-- Déployé --> - <defs> - <path d="M 19.671875 64.796875 + <g transform="translate(99.626792 308.758437)scale(0.1 -0.1)"> + <defs> + <path d="M 19.671875 64.796875 L 19.671875 8.109375 L 31.59375 8.109375 Q 46.6875 8.109375 53.6875 14.9375 @@ -82,7 +95,7 @@ Q 51.171875 0 30.078125 0 L 9.8125 0 z " id="DejaVuSans-68"/> - <path d="M 56.203125 29.59375 + <path d="M 56.203125 29.59375 L 56.203125 25.203125 L 14.890625 25.203125 Q 15.484375 15.921875 20.484375 11.0625 @@ -111,7 +124,7 @@ L 32.375 61.625 L 24.90625 61.625 z " id="DejaVuSans-233"/> - <path d="M 18.109375 8.203125 + <path d="M 18.109375 8.203125 L 18.109375 -20.796875 L 9.078125 -20.796875 L 9.078125 54.6875 @@ -137,13 +150,13 @@ Q 40.53125 6.109375 44.609375 11.75 Q 48.6875 17.390625 48.6875 27.296875 z " id="DejaVuSans-112"/> - <path d="M 9.421875 75.984375 + <path d="M 9.421875 75.984375 L 18.40625 75.984375 L 18.40625 0 L 9.421875 0 z " id="DejaVuSans-108"/> - <path d="M 30.609375 48.390625 + <path d="M 30.609375 48.390625 Q 23.390625 48.390625 19.1875 42.75 Q 14.984375 37.109375 14.984375 27.296875 Q 14.984375 17.484375 19.15625 11.84375 @@ -164,7 +177,7 @@ Q 5.515625 40.765625 12.171875 48.375 Q 18.84375 56 30.609375 56 z " id="DejaVuSans-111"/> - <path d="M 32.171875 -5.078125 + <path d="M 32.171875 -5.078125 Q 28.375 -14.84375 24.75 -17.8125 Q 21.140625 -20.796875 15.09375 -20.796875 L 7.90625 -20.796875 @@ -180,8 +193,7 @@ L 46.6875 54.6875 L 56.203125 54.6875 z " id="DejaVuSans-121"/> - </defs> - <g transform="translate(99.626792 308.758437)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-68"/> <use x="77.001953" xlink:href="#DejaVuSans-233"/> <use x="138.525391" xlink:href="#DejaVuSans-112"/> @@ -200,8 +212,9 @@ z </g> <g id="text_2"> <!-- Gzip --> - <defs> - <path d="M 59.515625 10.40625 + <g transform="translate(225.098281 308.358437)scale(0.1 -0.1)"> + <defs> + <path d="M 59.515625 10.40625 L 59.515625 29.984375 L 43.40625 29.984375 L 43.40625 38.09375 @@ -226,7 +239,7 @@ Q 48.046875 6.6875 52.140625 7.59375 Q 56.25 8.5 59.515625 10.40625 z " id="DejaVuSans-71"/> - <path d="M 5.515625 54.6875 + <path d="M 5.515625 54.6875 L 48.1875 54.6875 L 48.1875 46.484375 L 14.40625 7.171875 @@ -238,7 +251,7 @@ L 38.09375 47.515625 L 5.515625 47.515625 z " id="DejaVuSans-122"/> - <path d="M 9.421875 54.6875 + <path d="M 9.421875 54.6875 L 18.40625 54.6875 L 18.40625 0 L 9.421875 0 @@ -249,8 +262,7 @@ L 18.40625 64.59375 L 9.421875 64.59375 z " id="DejaVuSans-105"/> - </defs> - <g transform="translate(225.098281 308.358437)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-71"/> <use x="77.490234" xlink:href="#DejaVuSans-122"/> <use x="129.980469" xlink:href="#DejaVuSans-105"/> @@ -266,8 +278,9 @@ z </g> <g id="text_3"> <!-- Clonezilla --> - <defs> - <path d="M 64.40625 67.28125 + <g transform="translate(328.067427 308.358437)scale(0.1 -0.1)"> + <defs> + <path d="M 64.40625 67.28125 L 64.40625 56.890625 Q 59.421875 61.53125 53.78125 63.8125 Q 48.140625 66.109375 41.796875 66.109375 @@ -288,7 +301,7 @@ Q 47.75 74.21875 53.53125 72.484375 Q 59.328125 70.75 64.40625 67.28125 z " id="DejaVuSans-67"/> - <path d="M 54.890625 33.015625 + <path d="M 54.890625 33.015625 L 54.890625 0 L 45.90625 0 L 45.90625 32.71875 @@ -307,7 +320,7 @@ Q 45.21875 56 50.046875 50.171875 Q 54.890625 44.34375 54.890625 33.015625 z " id="DejaVuSans-110"/> - <path d="M 56.203125 29.59375 + <path d="M 56.203125 29.59375 L 56.203125 25.203125 L 14.890625 25.203125 Q 15.484375 15.921875 20.484375 11.0625 @@ -331,7 +344,7 @@ Q 24.90625 48.390625 20.390625 44.140625 Q 15.875 39.890625 15.1875 32.171875 z " id="DejaVuSans-101"/> - <path d="M 34.28125 27.484375 + <path d="M 34.28125 27.484375 Q 23.390625 27.484375 19.1875 25 Q 14.984375 22.515625 14.984375 16.5 Q 14.984375 11.71875 18.140625 8.90625 @@ -363,8 +376,7 @@ Q 40.484375 56 46.34375 49.84375 Q 52.203125 43.703125 52.203125 31.203125 z " id="DejaVuSans-97"/> - </defs> - <g transform="translate(328.067427 308.358437)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-67"/> <use x="69.824219" xlink:href="#DejaVuSans-108"/> <use x="97.607422" xlink:href="#DejaVuSans-111"/> @@ -380,8 +392,9 @@ z </g> <g id="text_4"> <!-- Type --> - <defs> - <path d="M -0.296875 72.90625 + <g transform="translate(224.677188 322.436562)scale(0.1 -0.1)"> + <defs> + <path d="M -0.296875 72.90625 L 61.375 72.90625 L 61.375 64.59375 L 35.5 64.59375 @@ -391,8 +404,7 @@ L 25.59375 64.59375 L -0.296875 64.59375 z " id="DejaVuSans-84"/> - </defs> - <g transform="translate(224.677188 322.436562)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-84"/> <use x="45.458984" xlink:href="#DejaVuSans-121"/> <use x="104.638672" xlink:href="#DejaVuSans-112"/> @@ -414,8 +426,9 @@ L -3.5 0 </g> <g id="text_5"> <!-- 0 --> - <defs> - <path d="M 31.78125 66.40625 + <g transform="translate(44.2375 297.559219)scale(0.1 -0.1)"> + <defs> + <path d="M 31.78125 66.40625 Q 24.171875 66.40625 20.328125 58.90625 Q 16.5 51.421875 16.5 36.375 Q 16.5 21.390625 20.328125 13.890625 @@ -436,8 +449,7 @@ Q 6.59375 54.828125 13.0625 64.515625 Q 19.53125 74.21875 31.78125 74.21875 z " id="DejaVuSans-48"/> - </defs> - <g transform="translate(44.2375 297.559219)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-48"/> </g> </g> @@ -450,8 +462,9 @@ z </g> <g id="text_6"> <!-- 100 --> - <defs> - <path d="M 12.40625 8.296875 + <g transform="translate(31.5125 250.639368)scale(0.1 -0.1)"> + <defs> + <path d="M 12.40625 8.296875 L 28.515625 8.296875 L 28.515625 63.921875 L 10.984375 60.40625 @@ -464,8 +477,7 @@ L 54.390625 0 L 12.40625 0 z " id="DejaVuSans-49"/> - </defs> - <g transform="translate(31.5125 250.639368)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-49"/> <use x="63.623047" xlink:href="#DejaVuSans-48"/> <use x="127.246094" xlink:href="#DejaVuSans-48"/> @@ -480,8 +492,9 @@ z </g> <g id="text_7"> <!-- 200 --> - <defs> - <path d="M 19.1875 8.296875 + <g transform="translate(31.5125 203.719516)scale(0.1 -0.1)"> + <defs> + <path d="M 19.1875 8.296875 L 53.609375 8.296875 L 53.609375 0 L 7.328125 0 @@ -505,8 +518,7 @@ Q 44.1875 33.984375 37.640625 27.21875 Q 31.109375 20.453125 19.1875 8.296875 z " id="DejaVuSans-50"/> - </defs> - <g transform="translate(31.5125 203.719516)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-50"/> <use x="63.623047" xlink:href="#DejaVuSans-48"/> <use x="127.246094" xlink:href="#DejaVuSans-48"/> @@ -521,8 +533,9 @@ z </g> <g id="text_8"> <!-- 300 --> - <defs> - <path d="M 40.578125 39.3125 + <g transform="translate(31.5125 156.799665)scale(0.1 -0.1)"> + <defs> + <path d="M 40.578125 39.3125 Q 47.65625 37.796875 51.625 33 Q 55.609375 28.21875 55.609375 21.1875 Q 55.609375 10.40625 48.1875 4.484375 @@ -554,8 +567,7 @@ Q 53.90625 49.265625 50.4375 45.09375 Q 46.96875 40.921875 40.578125 39.3125 z " id="DejaVuSans-51"/> - </defs> - <g transform="translate(31.5125 156.799665)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-51"/> <use x="63.623047" xlink:href="#DejaVuSans-48"/> <use x="127.246094" xlink:href="#DejaVuSans-48"/> @@ -570,8 +582,9 @@ z </g> <g id="text_9"> <!-- 400 --> - <defs> - <path d="M 37.796875 64.3125 + <g transform="translate(31.5125 109.879814)scale(0.1 -0.1)"> + <defs> + <path d="M 37.796875 64.3125 L 12.890625 25.390625 L 37.796875 25.390625 z @@ -588,8 +601,7 @@ L 4.890625 17.1875 L 4.890625 26.703125 z " id="DejaVuSans-52"/> - </defs> - <g transform="translate(31.5125 109.879814)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-52"/> <use x="63.623047" xlink:href="#DejaVuSans-48"/> <use x="127.246094" xlink:href="#DejaVuSans-48"/> @@ -604,8 +616,9 @@ z </g> <g id="text_10"> <!-- 500 --> - <defs> - <path d="M 10.796875 72.90625 + <g transform="translate(31.5125 62.959963)scale(0.1 -0.1)"> + <defs> + <path d="M 10.796875 72.90625 L 49.515625 72.90625 L 49.515625 64.59375 L 19.828125 64.59375 @@ -629,8 +642,7 @@ Q 22.75 39.890625 18.8125 39.015625 Q 14.890625 38.140625 10.796875 36.28125 z " id="DejaVuSans-53"/> - </defs> - <g transform="translate(31.5125 62.959963)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-53"/> <use x="63.623047" xlink:href="#DejaVuSans-48"/> <use x="127.246094" xlink:href="#DejaVuSans-48"/> @@ -639,9 +651,10 @@ z </g> <g id="text_11"> <!-- Taille (GB) --> - <defs> - <path id="DejaVuSans-32"/> - <path d="M 31 75.875 + <g transform="translate(25.432812 192.948031)rotate(-90)scale(0.1 -0.1)"> + <defs> + <path id="DejaVuSans-32"/> + <path d="M 31 75.875 Q 24.46875 64.65625 21.28125 53.65625 Q 18.109375 42.671875 18.109375 31.390625 Q 18.109375 20.125 21.3125 9.0625 @@ -653,7 +666,7 @@ Q 8.59375 42.28125 12.203125 53.3125 Q 15.828125 64.359375 23.1875 75.875 z " id="DejaVuSans-40"/> - <path d="M 19.671875 34.8125 + <path d="M 19.671875 34.8125 L 19.671875 8.109375 L 35.5 8.109375 Q 43.453125 8.109375 47.28125 11.40625 @@ -682,7 +695,7 @@ Q 48.25 0 35.984375 0 L 9.8125 0 z " id="DejaVuSans-66"/> - <path d="M 8.015625 75.875 + <path d="M 8.015625 75.875 L 15.828125 75.875 Q 23.140625 64.359375 26.78125 53.3125 Q 30.421875 42.28125 30.421875 31.390625 @@ -695,8 +708,7 @@ Q 20.90625 42.671875 17.703125 53.65625 Q 14.5 64.65625 8.015625 75.875 z " id="DejaVuSans-41"/> - </defs> - <g transform="translate(25.432812 192.948031)rotate(-90)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-84"/> <use x="44.583984" xlink:href="#DejaVuSans-97"/> <use x="105.863281" xlink:href="#DejaVuSans-105"/> diff --git a/doc/charts/chart_image_sizes_xubuntu.png b/doc/charts/chart_image_sizes_xubuntu.png index 79d30c8..e6a8d8f 100644 --- a/doc/charts/chart_image_sizes_xubuntu.png +++ b/doc/charts/chart_image_sizes_xubuntu.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b2121f09a33bf4f6d93b02aefec24ebad4b3dbff972809d400bcb5c185db608a -size 13652 +oid sha256:32c51829ae50fd667e8fe755f9c9558dc4c382abc64b8ef76064107262e3bc35 +size 13627 diff --git a/doc/charts/chart_image_sizes_xubuntu.svg b/doc/charts/chart_image_sizes_xubuntu.svg index a67f2f8..c7418b6 100644 --- a/doc/charts/chart_image_sizes_xubuntu.svg +++ b/doc/charts/chart_image_sizes_xubuntu.svg @@ -3,10 +3,22 @@ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <!-- Created with matplotlib (https://matplotlib.org/) --> <svg height="345.6pt" version="1.1" viewBox="0 0 460.8 345.6" width="460.8pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <metadata> + <rdf:RDF xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> + <cc:Work> + <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> + <dc:date>2020-08-16T19:18:08.711073</dc:date> + <dc:format>image/svg+xml</dc:format> + <dc:creator> + <cc:Agent> + <dc:title>Matplotlib v3.3.0, https://matplotlib.org/</dc:title> + </cc:Agent> + </dc:creator> + </cc:Work> + </rdf:RDF> + </metadata> <defs> - <style type="text/css"> -*{stroke-linecap:butt;stroke-linejoin:round;} - </style> + <style type="text/css">*{stroke-linecap:butt;stroke-linejoin:round;}</style> </defs> <g id="figure_1"> <g id="patch_1"> @@ -64,8 +76,9 @@ L 0 3.5 </g> <g id="text_1"> <!-- Déployé --> - <defs> - <path d="M 19.671875 64.796875 + <g transform="translate(99.626792 308.758437)scale(0.1 -0.1)"> + <defs> + <path d="M 19.671875 64.796875 L 19.671875 8.109375 L 31.59375 8.109375 Q 46.6875 8.109375 53.6875 14.9375 @@ -82,7 +95,7 @@ Q 51.171875 0 30.078125 0 L 9.8125 0 z " id="DejaVuSans-68"/> - <path d="M 56.203125 29.59375 + <path d="M 56.203125 29.59375 L 56.203125 25.203125 L 14.890625 25.203125 Q 15.484375 15.921875 20.484375 11.0625 @@ -111,7 +124,7 @@ L 32.375 61.625 L 24.90625 61.625 z " id="DejaVuSans-233"/> - <path d="M 18.109375 8.203125 + <path d="M 18.109375 8.203125 L 18.109375 -20.796875 L 9.078125 -20.796875 L 9.078125 54.6875 @@ -137,13 +150,13 @@ Q 40.53125 6.109375 44.609375 11.75 Q 48.6875 17.390625 48.6875 27.296875 z " id="DejaVuSans-112"/> - <path d="M 9.421875 75.984375 + <path d="M 9.421875 75.984375 L 18.40625 75.984375 L 18.40625 0 L 9.421875 0 z " id="DejaVuSans-108"/> - <path d="M 30.609375 48.390625 + <path d="M 30.609375 48.390625 Q 23.390625 48.390625 19.1875 42.75 Q 14.984375 37.109375 14.984375 27.296875 Q 14.984375 17.484375 19.15625 11.84375 @@ -164,7 +177,7 @@ Q 5.515625 40.765625 12.171875 48.375 Q 18.84375 56 30.609375 56 z " id="DejaVuSans-111"/> - <path d="M 32.171875 -5.078125 + <path d="M 32.171875 -5.078125 Q 28.375 -14.84375 24.75 -17.8125 Q 21.140625 -20.796875 15.09375 -20.796875 L 7.90625 -20.796875 @@ -180,8 +193,7 @@ L 46.6875 54.6875 L 56.203125 54.6875 z " id="DejaVuSans-121"/> - </defs> - <g transform="translate(99.626792 308.758437)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-68"/> <use x="77.001953" xlink:href="#DejaVuSans-233"/> <use x="138.525391" xlink:href="#DejaVuSans-112"/> @@ -200,8 +212,9 @@ z </g> <g id="text_2"> <!-- Gzip --> - <defs> - <path d="M 59.515625 10.40625 + <g transform="translate(225.098281 308.358437)scale(0.1 -0.1)"> + <defs> + <path d="M 59.515625 10.40625 L 59.515625 29.984375 L 43.40625 29.984375 L 43.40625 38.09375 @@ -226,7 +239,7 @@ Q 48.046875 6.6875 52.140625 7.59375 Q 56.25 8.5 59.515625 10.40625 z " id="DejaVuSans-71"/> - <path d="M 5.515625 54.6875 + <path d="M 5.515625 54.6875 L 48.1875 54.6875 L 48.1875 46.484375 L 14.40625 7.171875 @@ -238,7 +251,7 @@ L 38.09375 47.515625 L 5.515625 47.515625 z " id="DejaVuSans-122"/> - <path d="M 9.421875 54.6875 + <path d="M 9.421875 54.6875 L 18.40625 54.6875 L 18.40625 0 L 9.421875 0 @@ -249,8 +262,7 @@ L 18.40625 64.59375 L 9.421875 64.59375 z " id="DejaVuSans-105"/> - </defs> - <g transform="translate(225.098281 308.358437)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-71"/> <use x="77.490234" xlink:href="#DejaVuSans-122"/> <use x="129.980469" xlink:href="#DejaVuSans-105"/> @@ -266,8 +278,9 @@ z </g> <g id="text_3"> <!-- Clonezilla --> - <defs> - <path d="M 64.40625 67.28125 + <g transform="translate(328.067427 308.358437)scale(0.1 -0.1)"> + <defs> + <path d="M 64.40625 67.28125 L 64.40625 56.890625 Q 59.421875 61.53125 53.78125 63.8125 Q 48.140625 66.109375 41.796875 66.109375 @@ -288,7 +301,7 @@ Q 47.75 74.21875 53.53125 72.484375 Q 59.328125 70.75 64.40625 67.28125 z " id="DejaVuSans-67"/> - <path d="M 54.890625 33.015625 + <path d="M 54.890625 33.015625 L 54.890625 0 L 45.90625 0 L 45.90625 32.71875 @@ -307,7 +320,7 @@ Q 45.21875 56 50.046875 50.171875 Q 54.890625 44.34375 54.890625 33.015625 z " id="DejaVuSans-110"/> - <path d="M 56.203125 29.59375 + <path d="M 56.203125 29.59375 L 56.203125 25.203125 L 14.890625 25.203125 Q 15.484375 15.921875 20.484375 11.0625 @@ -331,7 +344,7 @@ Q 24.90625 48.390625 20.390625 44.140625 Q 15.875 39.890625 15.1875 32.171875 z " id="DejaVuSans-101"/> - <path d="M 34.28125 27.484375 + <path d="M 34.28125 27.484375 Q 23.390625 27.484375 19.1875 25 Q 14.984375 22.515625 14.984375 16.5 Q 14.984375 11.71875 18.140625 8.90625 @@ -363,8 +376,7 @@ Q 40.484375 56 46.34375 49.84375 Q 52.203125 43.703125 52.203125 31.203125 z " id="DejaVuSans-97"/> - </defs> - <g transform="translate(328.067427 308.358437)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-67"/> <use x="69.824219" xlink:href="#DejaVuSans-108"/> <use x="97.607422" xlink:href="#DejaVuSans-111"/> @@ -380,8 +392,9 @@ z </g> <g id="text_4"> <!-- Type --> - <defs> - <path d="M -0.296875 72.90625 + <g transform="translate(224.677188 322.436562)scale(0.1 -0.1)"> + <defs> + <path d="M -0.296875 72.90625 L 61.375 72.90625 L 61.375 64.59375 L 35.5 64.59375 @@ -391,8 +404,7 @@ L 25.59375 64.59375 L -0.296875 64.59375 z " id="DejaVuSans-84"/> - </defs> - <g transform="translate(224.677188 322.436562)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-84"/> <use x="45.458984" xlink:href="#DejaVuSans-121"/> <use x="104.638672" xlink:href="#DejaVuSans-112"/> @@ -414,8 +426,9 @@ L -3.5 0 </g> <g id="text_5"> <!-- 0 --> - <defs> - <path d="M 31.78125 66.40625 + <g transform="translate(44.2375 297.559219)scale(0.1 -0.1)"> + <defs> + <path d="M 31.78125 66.40625 Q 24.171875 66.40625 20.328125 58.90625 Q 16.5 51.421875 16.5 36.375 Q 16.5 21.390625 20.328125 13.890625 @@ -436,8 +449,7 @@ Q 6.59375 54.828125 13.0625 64.515625 Q 19.53125 74.21875 31.78125 74.21875 z " id="DejaVuSans-48"/> - </defs> - <g transform="translate(44.2375 297.559219)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-48"/> </g> </g> @@ -450,8 +462,9 @@ z </g> <g id="text_6"> <!-- 25 --> - <defs> - <path d="M 19.1875 8.296875 + <g transform="translate(37.875 267.601602)scale(0.1 -0.1)"> + <defs> + <path d="M 19.1875 8.296875 L 53.609375 8.296875 L 53.609375 0 L 7.328125 0 @@ -475,7 +488,7 @@ Q 44.1875 33.984375 37.640625 27.21875 Q 31.109375 20.453125 19.1875 8.296875 z " id="DejaVuSans-50"/> - <path d="M 10.796875 72.90625 + <path d="M 10.796875 72.90625 L 49.515625 72.90625 L 49.515625 64.59375 L 19.828125 64.59375 @@ -499,8 +512,7 @@ Q 22.75 39.890625 18.8125 39.015625 Q 14.890625 38.140625 10.796875 36.28125 z " id="DejaVuSans-53"/> - </defs> - <g transform="translate(37.875 267.601602)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-50"/> <use x="63.623047" xlink:href="#DejaVuSans-53"/> </g> @@ -528,8 +540,9 @@ z </g> <g id="text_8"> <!-- 75 --> - <defs> - <path d="M 8.203125 72.90625 + <g transform="translate(37.875 207.686368)scale(0.1 -0.1)"> + <defs> + <path d="M 8.203125 72.90625 L 55.078125 72.90625 L 55.078125 68.703125 L 28.609375 0 @@ -538,8 +551,7 @@ L 43.21875 64.59375 L 8.203125 64.59375 z " id="DejaVuSans-55"/> - </defs> - <g transform="translate(37.875 207.686368)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-55"/> <use x="63.623047" xlink:href="#DejaVuSans-53"/> </g> @@ -553,8 +565,9 @@ z </g> <g id="text_9"> <!-- 100 --> - <defs> - <path d="M 12.40625 8.296875 + <g transform="translate(31.5125 177.728751)scale(0.1 -0.1)"> + <defs> + <path d="M 12.40625 8.296875 L 28.515625 8.296875 L 28.515625 63.921875 L 10.984375 60.40625 @@ -567,8 +580,7 @@ L 54.390625 0 L 12.40625 0 z " id="DejaVuSans-49"/> - </defs> - <g transform="translate(31.5125 177.728751)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-49"/> <use x="63.623047" xlink:href="#DejaVuSans-48"/> <use x="127.246094" xlink:href="#DejaVuSans-48"/> @@ -637,9 +649,10 @@ z </g> <g id="text_14"> <!-- Taille (GB) --> - <defs> - <path id="DejaVuSans-32"/> - <path d="M 31 75.875 + <g transform="translate(25.432812 192.948031)rotate(-90)scale(0.1 -0.1)"> + <defs> + <path id="DejaVuSans-32"/> + <path d="M 31 75.875 Q 24.46875 64.65625 21.28125 53.65625 Q 18.109375 42.671875 18.109375 31.390625 Q 18.109375 20.125 21.3125 9.0625 @@ -651,7 +664,7 @@ Q 8.59375 42.28125 12.203125 53.3125 Q 15.828125 64.359375 23.1875 75.875 z " id="DejaVuSans-40"/> - <path d="M 19.671875 34.8125 + <path d="M 19.671875 34.8125 L 19.671875 8.109375 L 35.5 8.109375 Q 43.453125 8.109375 47.28125 11.40625 @@ -680,7 +693,7 @@ Q 48.25 0 35.984375 0 L 9.8125 0 z " id="DejaVuSans-66"/> - <path d="M 8.015625 75.875 + <path d="M 8.015625 75.875 L 15.828125 75.875 Q 23.140625 64.359375 26.78125 53.3125 Q 30.421875 42.28125 30.421875 31.390625 @@ -693,8 +706,7 @@ Q 20.90625 42.671875 17.703125 53.65625 Q 14.5 64.65625 8.015625 75.875 z " id="DejaVuSans-41"/> - </defs> - <g transform="translate(25.432812 192.948031)rotate(-90)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-84"/> <use x="44.583984" xlink:href="#DejaVuSans-97"/> <use x="105.863281" xlink:href="#DejaVuSans-105"/> diff --git a/doc/charts/chart_protocols.png b/doc/charts/chart_protocols.png index 636fa46..39ca5ba 100644 --- a/doc/charts/chart_protocols.png +++ b/doc/charts/chart_protocols.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e11e376fd98f104b05bc323d98a563d706e772d3996de381ce0ebf5209f6ea8e -size 13071 +oid sha256:6315daadb53225c7f0e11ad6b9e8ac4267eb5ec25604961aacefa95e65f71285 +size 13041 diff --git a/doc/charts/chart_protocols.svg b/doc/charts/chart_protocols.svg index 19ba40b..c9472a5 100644 --- a/doc/charts/chart_protocols.svg +++ b/doc/charts/chart_protocols.svg @@ -3,10 +3,22 @@ "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <!-- Created with matplotlib (https://matplotlib.org/) --> <svg height="345.6pt" version="1.1" viewBox="0 0 460.8 345.6" width="460.8pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> + <metadata> + <rdf:RDF xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> + <cc:Work> + <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> + <dc:date>2020-08-16T19:18:07.697144</dc:date> + <dc:format>image/svg+xml</dc:format> + <dc:creator> + <cc:Agent> + <dc:title>Matplotlib v3.3.0, https://matplotlib.org/</dc:title> + </cc:Agent> + </dc:creator> + </cc:Work> + </rdf:RDF> + </metadata> <defs> - <style type="text/css"> -*{stroke-linecap:butt;stroke-linejoin:round;} - </style> + <style type="text/css">*{stroke-linecap:butt;stroke-linejoin:round;}</style> </defs> <g id="figure_1"> <g id="patch_1"> @@ -88,8 +100,9 @@ L 0 3.5 </g> <g id="text_1"> <!-- SCP --> - <defs> - <path d="M 53.515625 70.515625 + <g transform="translate(86.542227 308.358437)scale(0.1 -0.1)"> + <defs> + <path d="M 53.515625 70.515625 L 53.515625 60.890625 Q 47.90625 63.578125 42.921875 64.890625 Q 37.9375 66.21875 33.296875 66.21875 @@ -120,7 +133,7 @@ Q 37.3125 74.21875 42.625 73.28125 Q 47.953125 72.359375 53.515625 70.515625 z " id="DejaVuSans-83"/> - <path d="M 64.40625 67.28125 + <path d="M 64.40625 67.28125 L 64.40625 56.890625 Q 59.421875 61.53125 53.78125 63.8125 Q 48.140625 66.109375 41.796875 66.109375 @@ -141,7 +154,7 @@ Q 47.75 74.21875 53.53125 72.484375 Q 59.328125 70.75 64.40625 67.28125 z " id="DejaVuSans-67"/> - <path d="M 19.671875 64.796875 + <path d="M 19.671875 64.796875 L 19.671875 37.40625 L 32.078125 37.40625 Q 38.96875 37.40625 42.71875 40.96875 @@ -160,8 +173,7 @@ L 19.671875 0 L 9.8125 0 z " id="DejaVuSans-80"/> - </defs> - <g transform="translate(86.542227 308.358437)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-83"/> <use x="63.476562" xlink:href="#DejaVuSans-67"/> <use x="133.300781" xlink:href="#DejaVuSans-80"/> @@ -176,8 +188,9 @@ z </g> <g id="text_2"> <!-- HTTP --> - <defs> - <path d="M 9.8125 72.90625 + <g transform="translate(139.402305 308.358437)scale(0.1 -0.1)"> + <defs> + <path d="M 9.8125 72.90625 L 19.671875 72.90625 L 19.671875 43.015625 L 55.515625 43.015625 @@ -191,7 +204,7 @@ L 19.671875 0 L 9.8125 0 z " id="DejaVuSans-72"/> - <path d="M -0.296875 72.90625 + <path d="M -0.296875 72.90625 L 61.375 72.90625 L 61.375 64.59375 L 35.5 64.59375 @@ -201,8 +214,7 @@ L 25.59375 64.59375 L -0.296875 64.59375 z " id="DejaVuSans-84"/> - </defs> - <g transform="translate(139.402305 308.358437)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-72"/> <use x="75.195312" xlink:href="#DejaVuSans-84"/> <use x="134.529297" xlink:href="#DejaVuSans-84"/> @@ -218,8 +230,9 @@ z </g> <g id="text_3"> <!-- FTP --> - <defs> - <path d="M 9.8125 72.90625 + <g transform="translate(199.315508 308.358437)scale(0.1 -0.1)"> + <defs> + <path d="M 9.8125 72.90625 L 51.703125 72.90625 L 51.703125 64.59375 L 19.671875 64.59375 @@ -231,8 +244,7 @@ L 19.671875 0 L 9.8125 0 z " id="DejaVuSans-70"/> - </defs> - <g transform="translate(199.315508 308.358437)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-70"/> <use x="55.769531" xlink:href="#DejaVuSans-84"/> <use x="116.853516" xlink:href="#DejaVuSans-80"/> @@ -247,8 +259,9 @@ z </g> <g id="text_4"> <!-- NFS --> - <defs> - <path d="M 9.8125 72.90625 + <g transform="translate(254.444336 308.358437)scale(0.1 -0.1)"> + <defs> + <path d="M 9.8125 72.90625 L 23.09375 72.90625 L 55.421875 11.921875 L 55.421875 72.90625 @@ -260,8 +273,7 @@ L 19.390625 0 L 9.8125 0 z " id="DejaVuSans-78"/> - </defs> - <g transform="translate(254.444336 308.358437)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-78"/> <use x="74.804688" xlink:href="#DejaVuSans-70"/> <use x="130.574219" xlink:href="#DejaVuSans-83"/> @@ -276,8 +288,9 @@ z </g> <g id="text_5"> <!-- SMB --> - <defs> - <path d="M 9.8125 72.90625 + <g transform="translate(309.203632 308.358437)scale(0.1 -0.1)"> + <defs> + <path d="M 9.8125 72.90625 L 24.515625 72.90625 L 43.109375 23.296875 L 61.8125 72.90625 @@ -292,7 +305,7 @@ L 19.390625 0 L 9.8125 0 z " id="DejaVuSans-77"/> - <path d="M 19.671875 34.8125 + <path d="M 19.671875 34.8125 L 19.671875 8.109375 L 35.5 8.109375 Q 43.453125 8.109375 47.28125 11.40625 @@ -321,8 +334,7 @@ Q 48.25 0 35.984375 0 L 9.8125 0 z " id="DejaVuSans-66"/> - </defs> - <g transform="translate(309.203632 308.358437)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-83"/> <use x="63.476562" xlink:href="#DejaVuSans-77"/> <use x="149.755859" xlink:href="#DejaVuSans-66"/> @@ -337,15 +349,15 @@ z </g> <g id="text_6"> <!-- IPFS --> - <defs> - <path d="M 9.8125 72.90625 + <g transform="translate(365.64496 308.358437)scale(0.1 -0.1)"> + <defs> + <path d="M 9.8125 72.90625 L 19.671875 72.90625 L 19.671875 0 L 9.8125 0 z " id="DejaVuSans-73"/> - </defs> - <g transform="translate(365.64496 308.358437)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-73"/> <use x="29.492188" xlink:href="#DejaVuSans-80"/> <use x="89.794922" xlink:href="#DejaVuSans-70"/> @@ -355,8 +367,9 @@ z </g> <g id="text_7"> <!-- Protocole --> - <defs> - <path d="M 41.109375 46.296875 + <g transform="translate(212.936562 322.036562)scale(0.1 -0.1)"> + <defs> + <path d="M 41.109375 46.296875 Q 39.59375 47.171875 37.8125 47.578125 Q 36.03125 48 33.890625 48 Q 26.265625 48 22.1875 43.046875 @@ -372,7 +385,7 @@ Q 37.453125 56 38.578125 55.875 Q 39.703125 55.765625 41.0625 55.515625 z " id="DejaVuSans-114"/> - <path d="M 30.609375 48.390625 + <path d="M 30.609375 48.390625 Q 23.390625 48.390625 19.1875 42.75 Q 14.984375 37.109375 14.984375 27.296875 Q 14.984375 17.484375 19.15625 11.84375 @@ -393,7 +406,7 @@ Q 5.515625 40.765625 12.171875 48.375 Q 18.84375 56 30.609375 56 z " id="DejaVuSans-111"/> - <path d="M 18.3125 70.21875 + <path d="M 18.3125 70.21875 L 18.3125 54.6875 L 36.8125 54.6875 L 36.8125 47.703125 @@ -413,7 +426,7 @@ L 9.28125 54.6875 L 9.28125 70.21875 z " id="DejaVuSans-116"/> - <path d="M 48.78125 52.59375 + <path d="M 48.78125 52.59375 L 48.78125 44.1875 Q 44.96875 46.296875 41.140625 47.34375 Q 37.3125 48.390625 33.40625 48.390625 @@ -434,13 +447,13 @@ Q 37.15625 56 41.109375 55.140625 Q 45.0625 54.296875 48.78125 52.59375 z " id="DejaVuSans-99"/> - <path d="M 9.421875 75.984375 + <path d="M 9.421875 75.984375 L 18.40625 75.984375 L 18.40625 0 L 9.421875 0 z " id="DejaVuSans-108"/> - <path d="M 56.203125 29.59375 + <path d="M 56.203125 29.59375 L 56.203125 25.203125 L 14.890625 25.203125 Q 15.484375 15.921875 20.484375 11.0625 @@ -464,8 +477,7 @@ Q 24.90625 48.390625 20.390625 44.140625 Q 15.875 39.890625 15.1875 32.171875 z " id="DejaVuSans-101"/> - </defs> - <g transform="translate(212.936562 322.036562)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-80"/> <use x="58.552734" xlink:href="#DejaVuSans-114"/> <use x="97.416016" xlink:href="#DejaVuSans-111"/> @@ -492,8 +504,9 @@ L -3.5 0 </g> <g id="text_8"> <!-- 0 --> - <defs> - <path d="M 31.78125 66.40625 + <g transform="translate(44.2375 297.559219)scale(0.1 -0.1)"> + <defs> + <path d="M 31.78125 66.40625 Q 24.171875 66.40625 20.328125 58.90625 Q 16.5 51.421875 16.5 36.375 Q 16.5 21.390625 20.328125 13.890625 @@ -514,8 +527,7 @@ Q 6.59375 54.828125 13.0625 64.515625 Q 19.53125 74.21875 31.78125 74.21875 z " id="DejaVuSans-48"/> - </defs> - <g transform="translate(44.2375 297.559219)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-48"/> </g> </g> @@ -528,8 +540,9 @@ z </g> <g id="text_9"> <!-- 100 --> - <defs> - <path d="M 12.40625 8.296875 + <g transform="translate(31.5125 243.806582)scale(0.1 -0.1)"> + <defs> + <path d="M 12.40625 8.296875 L 28.515625 8.296875 L 28.515625 63.921875 L 10.984375 60.40625 @@ -542,8 +555,7 @@ L 54.390625 0 L 12.40625 0 z " id="DejaVuSans-49"/> - </defs> - <g transform="translate(31.5125 243.806582)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-49"/> <use x="63.623047" xlink:href="#DejaVuSans-48"/> <use x="127.246094" xlink:href="#DejaVuSans-48"/> @@ -558,8 +570,9 @@ z </g> <g id="text_10"> <!-- 200 --> - <defs> - <path d="M 19.1875 8.296875 + <g transform="translate(31.5125 190.053945)scale(0.1 -0.1)"> + <defs> + <path d="M 19.1875 8.296875 L 53.609375 8.296875 L 53.609375 0 L 7.328125 0 @@ -583,8 +596,7 @@ Q 44.1875 33.984375 37.640625 27.21875 Q 31.109375 20.453125 19.1875 8.296875 z " id="DejaVuSans-50"/> - </defs> - <g transform="translate(31.5125 190.053945)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-50"/> <use x="63.623047" xlink:href="#DejaVuSans-48"/> <use x="127.246094" xlink:href="#DejaVuSans-48"/> @@ -599,8 +611,9 @@ z </g> <g id="text_11"> <!-- 300 --> - <defs> - <path d="M 40.578125 39.3125 + <g transform="translate(31.5125 136.301309)scale(0.1 -0.1)"> + <defs> + <path d="M 40.578125 39.3125 Q 47.65625 37.796875 51.625 33 Q 55.609375 28.21875 55.609375 21.1875 Q 55.609375 10.40625 48.1875 4.484375 @@ -632,8 +645,7 @@ Q 53.90625 49.265625 50.4375 45.09375 Q 46.96875 40.921875 40.578125 39.3125 z " id="DejaVuSans-51"/> - </defs> - <g transform="translate(31.5125 136.301309)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-51"/> <use x="63.623047" xlink:href="#DejaVuSans-48"/> <use x="127.246094" xlink:href="#DejaVuSans-48"/> @@ -648,8 +660,9 @@ z </g> <g id="text_12"> <!-- 400 --> - <defs> - <path d="M 37.796875 64.3125 + <g transform="translate(31.5125 82.548672)scale(0.1 -0.1)"> + <defs> + <path d="M 37.796875 64.3125 L 12.890625 25.390625 L 37.796875 25.390625 z @@ -666,8 +679,7 @@ L 4.890625 17.1875 L 4.890625 26.703125 z " id="DejaVuSans-52"/> - </defs> - <g transform="translate(31.5125 82.548672)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-52"/> <use x="63.623047" xlink:href="#DejaVuSans-48"/> <use x="127.246094" xlink:href="#DejaVuSans-48"/> @@ -676,8 +688,9 @@ z </g> <g id="text_13"> <!-- Durée (secondes) --> - <defs> - <path d="M 19.671875 64.796875 + <g transform="translate(25.432812 211.735531)rotate(-90)scale(0.1 -0.1)"> + <defs> + <path d="M 19.671875 64.796875 L 19.671875 8.109375 L 31.59375 8.109375 Q 46.6875 8.109375 53.6875 14.9375 @@ -694,7 +707,7 @@ Q 51.171875 0 30.078125 0 L 9.8125 0 z " id="DejaVuSans-68"/> - <path d="M 8.5 21.578125 + <path d="M 8.5 21.578125 L 8.5 54.6875 L 17.484375 54.6875 L 17.484375 21.921875 @@ -715,7 +728,7 @@ z M 31.109375 56 z " id="DejaVuSans-117"/> - <path d="M 56.203125 29.59375 + <path d="M 56.203125 29.59375 L 56.203125 25.203125 L 14.890625 25.203125 Q 15.484375 15.921875 20.484375 11.0625 @@ -744,8 +757,8 @@ L 32.375 61.625 L 24.90625 61.625 z " id="DejaVuSans-233"/> - <path id="DejaVuSans-32"/> - <path d="M 31 75.875 + <path id="DejaVuSans-32"/> + <path d="M 31 75.875 Q 24.46875 64.65625 21.28125 53.65625 Q 18.109375 42.671875 18.109375 31.390625 Q 18.109375 20.125 21.3125 9.0625 @@ -757,7 +770,7 @@ Q 8.59375 42.28125 12.203125 53.3125 Q 15.828125 64.359375 23.1875 75.875 z " id="DejaVuSans-40"/> - <path d="M 44.28125 53.078125 + <path d="M 44.28125 53.078125 L 44.28125 44.578125 Q 40.484375 46.53125 36.375 47.5 Q 32.28125 48.484375 27.875 48.484375 @@ -788,7 +801,7 @@ Q 31.78125 56 36.171875 55.265625 Q 40.578125 54.546875 44.28125 53.078125 z " id="DejaVuSans-115"/> - <path d="M 54.890625 33.015625 + <path d="M 54.890625 33.015625 L 54.890625 0 L 45.90625 0 L 45.90625 32.71875 @@ -807,7 +820,7 @@ Q 45.21875 56 50.046875 50.171875 Q 54.890625 44.34375 54.890625 33.015625 z " id="DejaVuSans-110"/> - <path d="M 45.40625 46.390625 + <path d="M 45.40625 46.390625 L 45.40625 75.984375 L 54.390625 75.984375 L 54.390625 0 @@ -833,7 +846,7 @@ Q 22.953125 48.484375 18.875 42.84375 Q 14.796875 37.203125 14.796875 27.296875 z " id="DejaVuSans-100"/> - <path d="M 8.015625 75.875 + <path d="M 8.015625 75.875 L 15.828125 75.875 Q 23.140625 64.359375 26.78125 53.3125 Q 30.421875 42.28125 30.421875 31.390625 @@ -846,8 +859,7 @@ Q 20.90625 42.671875 17.703125 53.65625 Q 14.5 64.65625 8.015625 75.875 z " id="DejaVuSans-41"/> - </defs> - <g transform="translate(25.432812 211.735531)rotate(-90)scale(0.1 -0.1)"> + </defs> <use xlink:href="#DejaVuSans-68"/> <use x="77.001953" xlink:href="#DejaVuSans-117"/> <use x="140.380859" xlink:href="#DejaVuSans-114"/> diff --git a/doc/gitlab-markdown.gpp b/doc/gitlab-markdown.gpp index fd14f13..69b76fe 100644 --- a/doc/gitlab-markdown.gpp +++ b/doc/gitlab-markdown.gpp @@ -62,4 +62,8 @@ !!define{!!label{ref_id}}{} -!!define{!!ref{ref_id}}{} \ No newline at end of file +!!define{!!ref{ref_id}}{} + +!!define{!!cite{citation_id}}{} + +!!define{!!citelong{citation_content}}{} \ No newline at end of file diff --git a/doc/iso690.csl b/doc/iso690.csl new file mode 100644 index 0000000..93cca47 --- /dev/null +++ b/doc/iso690.csl @@ -0,0 +1,493 @@ +<?xml version="1.0" encoding="utf-8"?> +<style xmlns="http://purl.org/net/xbiblio/csl" class="in-text" version="1.0" demote-non-dropping-particle="never" default-locale="fr-FR"> + <info> + <title>ISO-690 (numeric, French)</title> + <id>http://www.zotero.org/styles/iso690-numeric-fr</id> + <link href="http://www.zotero.org/styles/iso690-numeric-fr" rel="self"/> + <link href="https://forums.zotero.org/discussion/23511" rel="documentation"/> + <author> + <name>Laure Mellifluo</name> + <email>laure.melli@gmail.com</email> + </author> + <author> + <name>Raphael Grolimund</name> + <email>raphael.grolimund@epfl.ch</email> + </author> + <author> + <name>Michel Hardegger</name> + <email>hardegger@gmail.com</email> + </author> + <category citation-format="numeric"/> + <category field="generic-base"/> + <summary>Style based on ISO 690:2010(F), V1.1</summary> + <updated>2015-01-22T16:03:28+00:00</updated> + <rights license="http://creativecommons.org/licenses/by-sa/3.0/">This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 License</rights> + </info> + <locale> + <terms> + <term name="no date">[sans date]</term> + <term name="in">in</term> + <term name="online">en ligne</term> + <term name="accessed">consulté le</term> + <term name="retrieved">disponible</term> + <term name="from">à l'adresse</term> + </terms> + </locale> + <macro name="author"> + <names variable="author"> + <name and="text" name-as-sort-order="all" sort-separator=", " delimiter=", " delimiter-precedes-last="never"> + <name-part name="family" text-case="uppercase"/> + <name-part name="given"/> + </name> + </names> + </macro> + <macro name="editor"> + <names variable="editor"> + <name and="text" name-as-sort-order="all" sort-separator=", " delimiter=", " delimiter-precedes-last="never"> + <name-part name="family" text-case="uppercase"/> + <name-part name="given"/> + </name> + <label prefix=" (" form="short" suffix=".)"/> + </names> + </macro> + <macro name="translator"> + <names variable="translator"> + <name and="text" name-as-sort-order="all" sort-separator=", " delimiter=", " delimiter-precedes-last="never"> + <name-part name="family" text-case="uppercase"/> + <name-part name="given"/> + </name> + <label prefix=" (" form="short" suffix=".)"/> + </names> + </macro> + <macro name="responsability"> + <choose> + <if variable="author editor translator" match="any"> + <choose> + <if variable="author"> + <text macro="author"/> + </if> + <else-if variable="editor"> + <text macro="editor"/> + </else-if> + <else> + <text macro="translator"/> + </else> + </choose> + </if> + </choose> + </macro> + <macro name="container-author"> + <names variable="container-author"> + <name and="text" name-as-sort-order="all" sort-separator=", " delimiter=", " delimiter-precedes-last="never"> + <name-part name="family" text-case="uppercase"/> + <name-part name="given"/> + </name> + </names> + </macro> + <macro name="container-responsability"> + <choose> + <if variable="container-author editor translator" match="any"> + <choose> + <if variable="container-author"> + <text macro="container-author"/> + </if> + <else-if variable="editor"> + <text macro="editor"/> + </else-if> + <else> + <text macro="translator"/> + </else> + </choose> + </if> + </choose> + </macro> + <macro name="year-date"> + <choose> + <if variable="issued"> + <date variable="issued"> + <date-part name="year" form="long"/> + </date> + </if> + <else> + <text term="no date"/> + </else> + </choose> + </macro> + <macro name="title"> + <choose> + <if type="book thesis map motion_picture song manuscript" match="any"> + <text variable="title" font-style="italic"/> + </if> + <else-if type="paper-conference speech chapter article-journal article-magazine article-newspaper entry entry-dictionary entry-encyclopedia post-weblog post webpage broadcast" match="any"> + <text variable="title" suffix=". "/> + <choose> + <if type="chapter paper-conference" match="any"> + <text term="in" text-case="capitalize-first" suffix=" : "/> + </if> + </choose> + <choose> + <if variable="container-author editor translator" match="any"> + <text macro="container-responsability"/> + <choose> + <if variable="container-title event" match="any"> + <text value=", "/> + </if> + </choose> + </if> + </choose> + <choose> + <if variable="container-title"> + <text variable="container-title" font-style="italic"/> + </if> + <else> + <text variable="event" font-style="italic"/> + </else> + </choose> + </else-if> + <else-if type="report"> + <text variable="number" suffix=": "/> + <text variable="title" font-style="italic"/> + </else-if> + <else-if type="patent"> + <text variable="title"/> + </else-if> + <else> + <text variable="title" font-style="italic"/> + </else> + </choose> + <choose> + <if variable="URL"> + <text term="online" prefix=" [" suffix="]"/> + </if> + </choose> + </macro> + <macro name="number"> + <text variable="number"/> + </macro> + <macro name="medium"> + <text variable="medium" prefix=" [" suffix="]"/> + </macro> + <macro name="genre"> + <choose> + <if type="map"> + <choose> + <if variable="genre"> + <text variable="genre" prefix="[" suffix="]"/> + </if> + <else> + <text value="carte" prefix="[" suffix="]"/> + </else> + </choose> + </if> + <else> + <text variable="genre"/> + </else> + </choose> + </macro> + <macro name="date"> + <choose> + <if variable="issued"> + <date variable="issued"> + <date-part name="day" suffix=" "/> + <date-part name="month" suffix=" "/> + <date-part name="year"/> + </date> + </if> + </choose> + </macro> + <macro name="edition"> + <text variable="edition" form="long"/> + </macro> + <macro name="publisher-group"> + <group delimiter=" : "> + <text variable="publisher-place"/> + <text variable="publisher"/> + </group> + </macro> + <macro name="issue"> + <group delimiter=", "> + <text variable="volume" prefix="Vol. "/> + <choose> + <if variable="volume"> + <text variable="issue" prefix="n° "/> + <text variable="page" prefix="pp. "/> + </if> + <else-if variable="issue"> + <text variable="issue" prefix="N° "/> + <text variable="page" prefix="pp. "/> + </else-if> + <else> + <text variable="page" prefix="pp. "/> + </else> + </choose> + </group> + </macro> + <macro name="accessed"> + <choose> + <if variable="URL"> + <group prefix=" [" suffix="]"> + <text term="accessed" text-case="capitalize-first"/> + <date variable="accessed"> + <date-part name="day" prefix=" "/> + <date-part name="month" prefix=" "/> + <date-part name="year" prefix=" "/> + </date> + </group> + </if> + </choose> + </macro> + <macro name="collection"> + <group delimiter=", "> + <text variable="collection-title"/> + <text variable="collection-number"/> + </group> + </macro> + <macro name="page"> + <choose> + <if type="book thesis manuscript" match="any"> + <text variable="number-of-pages" suffix=" p"/> + </if> + <else-if type="chapter paper-conference article-newspaper" match="any"> + <text variable="page" prefix="pp. "/> + </else-if> + <else-if type="report patent" match="any"> + <text variable="page" suffix=" p"/> + </else-if> + </choose> + </macro> + <macro name="isbn"> + <text variable="ISBN" prefix="ISBN "/> + </macro> + <macro name="doi"> + <text variable="DOI" prefix="DOI "/> + </macro> + <macro name="url"> + <choose> + <if variable="URL"> + <group> + <text term="retrieved" suffix=" " text-case="capitalize-first"/> + <text term="from" suffix=" : "/> + <text variable="URL"/> + </group> + </if> + </choose> + </macro> + <macro name="archive"> + <group delimiter=": "> + <text variable="archive"/> + <text macro="archive_location"/> + </group> + </macro> + <macro name="archive_location"> + <choose> + <if variable="archive_location"> + <text variable="archive_location"/> + </if> + <else> + <text variable="call-number"/> + </else> + </choose> + </macro> + <macro name="abstract"> + <text variable="abstract"/> + </macro> + <macro name="note"> + <text variable="note"/> + </macro> + <citation collapse="citation-number" after-collapse-delimiter="; "> + <sort> + <key variable="citation-number"/> + </sort> + <layout prefix="(" suffix=")" delimiter=", "> + <group delimiter=", "> + <text variable="citation-number"/> + <group> + <label variable="locator" suffix=". " form="short" strip-periods="true"/> + <text variable="locator"/> + </group> + </group> + </layout> + </citation> + <bibliography> + <sort> + <key variable="citation-number"/> + </sort> + <layout> + <text variable="citation-number" display="left-margin" font-weight="bold" suffix=". "/> + <choose> + <if type="book map" match="any"> + <group display="right-inline"> + <text macro="responsability" suffix=". "/> + <text macro="title" suffix=". "/> + <text macro="genre" suffix=". "/> + <text macro="edition" suffix=". "/> + <text macro="publisher-group" suffix=", "/> + <text macro="year-date" suffix=". "/> + <text macro="accessed" suffix=". "/> + <text macro="collection" suffix=". "/> + <text macro="isbn" suffix=". "/> + <text macro="url"/> + </group> + </if> + <else-if type="article-journal article-magazine" match="any"> + <group display="right-inline"> + <text macro="responsability" suffix=". "/> + <text macro="title" suffix=". "/> + <text macro="edition" suffix=". "/> + <text macro="date" suffix=". "/> + <text macro="issue" suffix=". "/> + <text macro="accessed" suffix=". "/> + <text macro="doi" suffix=". "/> + <text macro="url"/> + </group> + </else-if> + <else-if type="article-newspaper"> + <group display="right-inline"> + <text macro="responsability" suffix=". "/> + <text macro="title" suffix=". "/> + <text macro="edition" suffix=". "/> + <text macro="publisher-group" suffix=", "/> + <text macro="date" suffix=". "/> + <text macro="page" suffix=". "/> + <text macro="accessed" suffix=". "/> + <text macro="url"/> + </group> + </else-if> + <else-if type="chapter entry entry-dictionary entry-encyclopedia" match="any"> + <group display="right-inline"> + <text macro="responsability" suffix=". "/> + <text macro="title" font-style="normal" suffix=". "/> + <text macro="edition" suffix=". "/> + <text macro="publisher-group" suffix=", "/> + <text macro="year-date" suffix=". "/> + <text macro="page" suffix=". "/> + <text macro="collection" suffix=". "/> + <text macro="accessed" suffix=". "/> + <text macro="isbn" suffix=". "/> + <text macro="url"/> + </group> + </else-if> + <else-if type="speech"> + <group display="right-inline"> + <text macro="responsability" suffix=". "/> + <text macro="title" suffix=". "/> + <text macro="genre" suffix=". "/> + <text macro="publisher-group" suffix=". "/> + <text macro="date" suffix=". "/> + <text macro="accessed" suffix=". "/> + <text macro="page" suffix=". "/> + <text macro="url"/> + </group> + </else-if> + <else-if type="paper-conference"> + <group display="right-inline"> + <text macro="responsability" suffix=". "/> + <text macro="title" suffix=". "/> + <text macro="genre" suffix=". "/> + <text macro="publisher-group" suffix=", "/> + <text macro="date" suffix=". "/> + <text macro="page" suffix=". "/> + <text macro="accessed" suffix=". "/> + <text macro="collection" suffix=". "/> + <text macro="isbn" suffix=". "/> + <text macro="url"/> + </group> + </else-if> + <else-if type="thesis"> + <group display="right-inline"> + <text macro="responsability" suffix=". "/> + <text macro="title" suffix=". "/> + <text macro="genre" suffix=". "/> + <text macro="publisher-group" suffix=", "/> + <text macro="year-date" suffix=". "/> + <text macro="accessed" suffix=". "/> + <text macro="url"/> + </group> + </else-if> + <else-if type="post-weblog post webpage" match="any"> + <group display="right-inline"> + <text macro="responsability" suffix=". "/> + <text macro="title" suffix=". "/> + <text macro="date" suffix=". "/> + <text macro="accessed" suffix=". "/> + <text macro="url"/> + </group> + </else-if> + <else-if type="broadcast motion_picture song" match="any"> + <group display="right-inline"> + <text macro="responsability" suffix=". "/> + <text macro="title" suffix=". "/> + <text macro="medium" suffix=". "/> + <text macro="publisher-group" suffix=", "/> + <text macro="date" suffix=". "/> + <text macro="accessed" suffix=". "/> + <text macro="collection" suffix=". "/> + <text macro="isbn" suffix=". "/> + <text macro="url"/> + </group> + </else-if> + <else-if type="report" match="any"> + <group display="right-inline"> + <text macro="responsability" suffix=". "/> + <text macro="title" suffix=". "/> + <text macro="genre" suffix=". "/> + <text macro="edition" suffix=". "/> + <text macro="publisher-group" suffix=", "/> + <text macro="year-date" suffix=". "/> + <text macro="accessed" suffix=". "/> + <text macro="collection" suffix=". "/> + <text macro="url"/> + </group> + </else-if> + <else-if type="manuscript" match="any"> + <group display="right-inline"> + <text macro="responsability" suffix=". "/> + <text macro="title" suffix=". "/> + <text macro="genre" suffix=". "/> + <text macro="edition" suffix=". "/> + <text macro="publisher-group" suffix=", "/> + <text macro="year-date" suffix=". "/> + <text macro="accessed" suffix=". "/> + <text macro="collection" suffix=". "/> + <text macro="url"/> + </group> + </else-if> + <else-if type="patent"> + <group display="right-inline"> + <text macro="responsability" suffix=". "/> + <text macro="title" suffix=". "/> + <text macro="number" suffix=". "/> + <text macro="date" suffix=". "/> + <text macro="publisher-group" suffix=". "/> + <text macro="accessed" suffix=". "/> + <text macro="collection" suffix=". "/> + <text macro="url"/> + </group> + </else-if> + <else> + <group display="right-inline"> + <text macro="responsability" suffix=". "/> + <text macro="title" suffix=". "/> + <text macro="medium" suffix=". "/> + <text macro="genre" suffix=". "/> + <text macro="date" suffix=". "/> + <text macro="edition" suffix=". "/> + <text macro="publisher-group" suffix=". "/> + <text macro="number" suffix=". "/> + <text macro="accessed" suffix=". "/> + <text macro="collection" suffix=". "/> + <text macro="page" suffix=". "/> + <text macro="isbn" suffix=". "/> + <text macro="url"/> + </group> + </else> + </choose> + <group display="right-inline"> + <text macro="archive"/> + </group> + <group display="right-inline"> + <text macro="note"/> + </group> + </layout> + </bibliography> +</style> diff --git a/doc/pandoc-pdf-markdown.gpp b/doc/pandoc-pdf-markdown.gpp index f2b2e18..dd5fc5b 100644 --- a/doc/pandoc-pdf-markdown.gpp +++ b/doc/pandoc-pdf-markdown.gpp @@ -41,3 +41,7 @@ !!define{!!tableheader{ref_id}{description}}{ Table: !!description \label{!!ref_id} } + +!!define{!!cite{citation_id}}{[@@!!citation_id]} + +!!define{!!citelong{citation_content}}{[!!citation_content]} \ No newline at end of file diff --git a/doc/rapport.gpp.md b/doc/rapport.gpp.md index 179a3f4..3192f40 100644 --- a/doc/rapport.gpp.md +++ b/doc/rapport.gpp.md @@ -18,6 +18,11 @@ numbersections: true fontsize: 12pt monofont: JetBrains Mono output: pdf_document +filters: +- pandoc-citeproc +bibliography: references.bib +csl: iso690.csl +link-citations: true header-includes: | \usepackage{pdfpages} \usepackage{fancyhdr} @@ -44,7 +49,7 @@ header-includes: | \setlength{\parindent}{0pt} \setlength{\parskip}{9pt} - \setlength{\beforechapskip}{0pt} + \setlength{\beforechapskip}{-10pt} \OnehalfSpacing --- @@ -62,7 +67,8 @@ header-includes: | !!defacronym{FTP}{_File Transfer Protocol_: protocole de transfert de fichier} !!defacronym{GPT}{_GUID Partition Table_: table de partitionnement GUID} !!defacronym{GRUB}{_GRand Unified Bootloader_} -!!defacronym{HEPIA}{Haute école du paysage, d'ingénierie et d'architecture de Genève} +!!defacronym{HEPIA}{Haute École du Paysage, d'Ingénierie et d'Architecture de Genève} +!!defacronym{HES}{Haute École Spécialisée} !!defacronym{HTTPS}{_HyperText Transfer Protocol Secure_: protocole de transfert hypertexte sécurisé} !!defacronym{HTTP}{_HyperText Transfer Protocol_: protocole de transfert hypertexte} !!defacronym{IBM}{_International Business Machines corporation_} @@ -78,6 +84,7 @@ header-includes: | !!defacronym{PC}{_Personal Computer_: ordinateur personnel} !!defacronym{PXE}{_Pre-boot eXecution Environment_: environnement d'exécution pré-démarrage} !!defacronym{SCP}{_Secure CoPy_: protocole de copie sécurisée sur le réseau} +!!defacronym{SI}{Système d'Information} !!defacronym{SMB}{_Server Message Block_} !!defacronym{SSH}{_Secure SHell_: protocole de terminal à distance securisé} !!defacronym{TFTP}{_Trivial File Transfer Protocol_: protocole simplifié de transfert de fichiers} @@ -89,7 +96,20 @@ header-includes: | !!chapterwithoutnumber{Remerciements} -**TODO: remerciements** +Je souhaite remercier **Florent Glück**, professeur !!acronym{HES} +associé à !!acronym{HEPIA}, ainsi que **Sébastien Chassot**, assistant +!!acronym{HES} à !!acronym{HEPIA} pour leur implication et leur aide +précieuse apportée lors des rendez-vous hebdomadaire de suivi de ce +projet. + +Je souhaite également remercier ma compagne, **Nathalie Sieber**, pour +son soutien, sa patience et sa confiance, tout au long de mon cursus à +!!acronym{HEPIA}. + +Enfin, je souhaite remercier mes parents, Cristina Lizzi et Enzo Zonca +pour m'avoir fait découvrir le monde de l'informatique quand j'étais +petit et m'avoir toujours encouragé et aidé à poursuivre mes études dans +ce domaine. !!ifdef{PANDOC_PDF} \addcontentsline{toc}{chapter}{Résumé} @@ -111,6 +131,9 @@ header-includes: | ## Contexte +Le contexte du projet, tiré de l´énoncé de ce dernier +!!cite{gluck_enonce_2020}, est le suivant: + Aujourd’hui les machines des salles de cours à !!acronym{HEPIA} sont installées avec une image spécifique d’un système d’exploitation. Dans le cadre de certains cours, on désirerait pouvoir utiliser un autre @@ -131,6 +154,9 @@ d’un travail déjà existant. ## Objectifs +Les objectifs du projet, tirés de l´énoncé de ce dernier +!!cite{gluck_enonce_2020}, sont les suivants: + - Etude du travail existant. - Mise en place d’un déploiement automatisé et reproductible du travail existant. @@ -221,16 +247,19 @@ projet _Bootiful_. Il permet aux postes clients de lancer un mini système d'exploitation via !!acronym{PXE} au démarrage de la machine. Ce mini-système permet de télécharger et déployer des images de système d'exploitation sur la machine, tout en créant une copie en cache à la -fin du disque pour éviter de la télécharger plusieurs fois. +fin du disque pour éviter de la télécharger plusieurs fois +!!cite{bpbatch_homepage}. La première version, nommée _BpBatch_ fut distribuée gratuitement sur internet. Une entreprise nommée _Rembo Technology Sàrl_ a ensuite été -fondée en 1999 pour continuer un développement commercial de ce projet -sous le nom de _Rembo_. En 2006, la société a été rachetée par IBM et le -projet a été intégré à leur solution _Tivoli Provisionning Manager_. - -Ce système réponde aux besoins de !!acronym{HEPIA}, et il a même déjà -été utilisé au sein de l'institution par le passé. Il a cependant été +fondée en 1999 !!cite{registre_commerce_rembo} pour continuer un +développement commercial de ce projet sous le nom de _Rembo_. En 2006, +la société a été rachetée par IBM !!cite{registre_commerce_rembo} et le +projet a été intégré à leur solution _Tivoli Provisionning Manager_ +!!cite{ibm_rembo}. + +Ce système répond aux besoins de !!acronym{HEPIA}, et il a même déjà été +utilisé au sein de l'institution par le passé. Il a cependant été abandonné à cause de sa licence devenue très couteuse et de sa complexité devenue trop grande pour les besoins simple de l'école. @@ -242,6 +271,7 @@ intéressante. !!acronym{FOG} est une solution open-source gratuite permettant de déployer des images de systèmes d'exploitation sur des postes clients. +!!cite{fog_wiki_intro} Elle fonctionne avec une architecture client-serveur. Le serveur est accédé par une interface web, où un administrateur peut gérer ses images @@ -267,7 +297,7 @@ nouveau depuis le serveur, ce qui peut prendre beaucoup de temps et doit ### Clonezilla _Clonezilla_ est une solution open-source et gratuite de création et de -restauration d'images. +restauration d'images. !!cite{clonezilla_home} Cet outil peut être utilisé de deux manières: @@ -302,10 +332,11 @@ déploiement. Cette possibilité sera étudiée plus tard dans ce document. # Architecture initiale du projet Le projet _Bootiful_ n'a pas été initié dans le cadre de ce travail de -bachelor: une implémentation basique avait déjà été réalisée afin de -prouver que l'idée fonctionne. Cette version initiale a été créée par -Abhilash Venkatesh, un étudiant indien qui est venu à !!acronym{HEPIA} -effectuer un stage pendant la période de mai à juillet 2019. +bachelor: une implémentation basique !!cite{venkatesh_remote_imaging} +avait déjà été réalisée afin de prouver que l'idée fonctionne. Cette +version initiale a été créée par Abhilash Venkatesh, un étudiant indien +qui est venu à !!acronym{HEPIA} effectuer un stage pendant la période de +mai à juillet 2019. Les premières étapes de ce travail diplôme ont été de reproduire le système réalisé dans le projet initial afin de valider son @@ -2027,9 +2058,11 @@ avancés (_sIT_384_), programmation avancée des systèmes (_sIT_632_) et virtualisation des !!acronym{SI} (_sIT_632_). !!ifdef{PANDOC_PDF} -# Références -**TODO: add references** +!!chapterwithoutnumber{Références} + +::: {#refs} +::: \appendix !!endif diff --git a/doc/rapport.md b/doc/rapport.md index 163744a..2d8209a 100644 --- a/doc/rapport.md +++ b/doc/rapport.md @@ -61,6 +61,8 @@ - **SCP**: _Secure CoPy_: protocole de copie sécurisée sur le réseau +- **SI**: Système d'Information + - **SMB**: _Server Message Block_ - **SSH**: _Secure SHell_: protocole de terminal à distance securisé @@ -84,6 +86,9 @@ ## Contexte +Le contexte du projet, tiré de l´énoncé de ce dernier +, est le suivant: + Aujourd’hui les machines des salles de cours à <abbr title="Haute école du paysage, d’ingénierie et d’architecture de Genève ">HEPIA</abbr> sont installées avec une image spécifique d’un système d’exploitation. Dans le cadre de certains cours, on désirerait pouvoir utiliser un autre @@ -104,6 +109,9 @@ d’un travail déjà existant. ## Objectifs +Les objectifs du projet, tirés de l´énoncé de ce dernier +, sont les suivants: + - Etude du travail existant. - Mise en place d’un déploiement automatisé et reproductible du travail existant. @@ -208,16 +216,19 @@ projet _Bootiful_. Il permet aux postes clients de lancer un mini système d'exploitation via <abbr title="Pre-boot eXecution Environment: environnement d’exécution pré-démarrage ">PXE</abbr> au démarrage de la machine. Ce mini-système permet de télécharger et déployer des images de système d'exploitation sur la machine, tout en créant une copie en cache à la -fin du disque pour éviter de la télécharger plusieurs fois. +fin du disque pour éviter de la télécharger plusieurs fois +. La première version, nommée _BpBatch_ fut distribuée gratuitement sur internet. Une entreprise nommée _Rembo Technology Sàrl_ a ensuite été -fondée en 1999 pour continuer un développement commercial de ce projet -sous le nom de _Rembo_. En 2006, la société a été rachetée par IBM et le -projet a été intégré à leur solution _Tivoli Provisionning Manager_. +fondée en 1999 pour continuer un +développement commercial de ce projet sous le nom de _Rembo_. En 2006, +la société a été rachetée par IBM et le +projet a été intégré à leur solution _Tivoli Provisionning Manager_ +. -Ce système réponde aux besoins de <abbr title="Haute école du paysage, d’ingénierie et d’architecture de Genève ">HEPIA</abbr>, et il a même déjà -été utilisé au sein de l'institution par le passé. Il a cependant été +Ce système répond aux besoins de <abbr title="Haute école du paysage, d’ingénierie et d’architecture de Genève ">HEPIA</abbr>, et il a même déjà été +utilisé au sein de l'institution par le passé. Il a cependant été abandonné à cause de sa licence devenue très couteuse et de sa complexité devenue trop grande pour les besoins simple de l'école. @@ -230,6 +241,7 @@ intéressante. <abbr title="Free Open-source Ghost ">FOG</abbr> est une solution open-source gratuite permettant de déployer des images de systèmes d'exploitation sur des postes clients. + Elle fonctionne avec une architecture client-serveur. Le serveur est accédé par une interface web, où un administrateur peut gérer ses images et les déployer sur des clients qui démarrent un logiciel de déploiement @@ -254,7 +266,7 @@ nouveau depuis le serveur, ce qui peut prendre beaucoup de temps et doit ### Clonezilla _Clonezilla_ est une solution open-source et gratuite de création et de -restauration d'images. +restauration d'images. Cet outil peut être utilisé de deux manières: @@ -289,10 +301,11 @@ déploiement. Cette possibilité sera étudiée plus tard dans ce document. # Architecture initiale du projet Le projet _Bootiful_ n'a pas été initié dans le cadre de ce travail de -bachelor: une implémentation basique avait déjà été réalisée afin de -prouver que l'idée fonctionne. Cette version initiale a été créée par -Abhilash Venkatesh, un étudiant indien qui est venu à <abbr title="Haute école du paysage, d’ingénierie et d’architecture de Genève ">HEPIA</abbr> -effectuer un stage pendant la période de mai à juillet 2019. +bachelor: une implémentation basique +avait déjà été réalisée afin de prouver que l'idée fonctionne. Cette +version initiale a été créée par Abhilash Venkatesh, un étudiant indien +qui est venu à <abbr title="Haute école du paysage, d’ingénierie et d’architecture de Genève ">HEPIA</abbr> effectuer un stage pendant la période de +mai à juillet 2019. Les premières étapes de ce travail diplôme ont été de reproduire le système réalisé dans le projet initial afin de valider son @@ -2137,7 +2150,7 @@ suivis les quatre années précédentes, dont en particulier les cours de programmation des systèmes (_sIT_242_), systèmes d'exploitation (_sIT_244_), réseaux et protocoles informatiques (sIT_362), réseaux avancés (_sIT_384_), programmation avancée des systèmes (_sIT_632_) et -virtualisation des <abbr title=" ">SI</abbr> (_sIT_632_). +virtualisation des <abbr title="Système d’Information ">SI</abbr> (_sIT_632_). diff --git a/doc/rapport.pdf b/doc/rapport.pdf index 63c0b86d133ed20c40fba24a10b7ec7ee8ca9fbb..3c14f1fd62f75188d65774567252da9bc0efde8b 100644 GIT binary patch delta 128910 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	Xe5TW@Fk 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 delta 124618 zcmZ2BrR@8c(uOUJvZ0J7(*relRO$^4&CKlVxQa`PQWJBzDsH`vI@$NwOknSG?Jvw} z5!~hr9y&LuIOH+bNS`^F)&I<-{pWx09o|dsnk{E6Z|b>Vuw<G`=*0I|y?pPh&sg%m z`Q(F?EyCA)*WdrsYXA3rw(Y;NS#^J#)lw4IG``&8!!F=pBikc(>&DBHpI?-gZgY39 z|HrXDNXheLnAf4ljXb|s?`Zk|C-`I6r|=5D^I6Z&2Qq2Y>%9)1?_ck`e|}d1!^0_u z))pivANa)XogP+qZk_mgHxV<pHO!mb9Q!pcpFU>!>Qc<}(-WU~Un=%lzgA>Z|5c|< zR_m=7vu8Hz{NJr&JFU_o@AoXlgHKpAPAE?+p0TDroZ*sSJFEHni#7@t0kN-antY?a zS|o=@EY91cwkg{$L)BH-$}N9_jN{7Sho_U5+Ae3!u4%vYaAyMFLvaP&<U=ZEY60Q@ z-m#qEI=(I3{pZ7Dygp5TIA@gmDBa1=wbp(wYG$*jK-o&eCTa5$M+xWEQ{`o5F0d+D zCdv75>eR^U`nj5S^xk#Mo9ptwtJs)l`(X#}$2Rj%RM=^5ojcd}S5y461($ceYWTHu zO?kxbUElJ#3g7VdtZ%vT_@MRKzdna9r&?UIcVbI#S)S?6W*cs_LLlcw#Q~30Kc52y z|5H<SW@?8Q%obg{Wv=M|z_1PW6BDY#=7fuXRBit!b0_J?_D+%dSg%R3CuA2kI5Ee1 z-kteDMonX?p{n@-mQTxWe>~8yZS&ysEODKqnkRg-Ua<zH9N0Opbwaq)&PQ(|l{yXX zS6K6Hv(nP;S>|{0?n<73m+YPkE?n2YaruCmNkkEwv$t2i(wZGAel8lhRzbS4?>yW- zOy!L2yw_Oc<@3U8!)+CVp!x;R?9^6xG0h0}75L+Lz)HkQQPbb>VPVk)&Kqxk#C!0y zbtJ4+xMnN3W2Jmjz=5kz-K7pJDvo?<wls~8_4?DNvY`=NlS-DJJ~xFwv0+k_!MB%+ zfvFA|7mfsd4|?^vk2Cw|yi3k8&PS%n&o*<e+jM2&?Kp=Li`cbQ>!ln|9%78EKl@ny zNsqVbJ?1+zS*_k)=Z?JcPV(3nUD@upzjhh4)kZPJZ4_V3U6d_utSH)js)AXI_toKr z=|XX5o>%FIi!)Xz_gAJADwZE$laG_Iep>I=QoEwA$6#^5x-~*CS<+uHUfAg%<)Cl7 zW}UV{#EY##W$}Mip7iRR_{{JriYvCdvtF@fdX25cgBNAFx8>WeTL*XxrR=PKJMW6E z?eco=FSB*C^IMuOO#M4y=aw~zdb@pA=K7wFnz?@3yyUHS-pzAuin(RAPlP4+d|dpg z`sjA24TT!Fcufx8wrrVM9<5>?ETKC$VTHBh=i9y?cD@XHBE}w<F01JtSbpunv44l( z*14^&zmsR;EZaNl;JxPk71q6O8&>Ca_W25DO?FB1cwDyn?w74m59GfaS~XhN_-n?u zFGyFNvhqIDfnCexE_nrKO@47x&RqA__P5J^6~5&4C^%aBnBmQ=mawJ40^jtzqL)?P zz0Y^g?rm(y>G)qsrazj>-P)wSXI<U>be`N3IW2*CJN~N7`NzMt>s-gHU#9M#Qv-MN zbR0S%a9Wo0==J&6r!1`h|A}9F&yMMg*F}VxEKQ~--jP<Tw=_g4ucE#CmCOb9JrDmP zFL6Bd>2i}t0-BvuZfg~H7d0fFP_4cZ{IBlMw%dOfNJhLp*Cep$<*{Sy*56wvwU5W3 z;Cqwf;{{VwkMXUaf4BGk-QV*cPM`kp`TYWhgfK6eIKRWf1`38Yf}6wm^^fnLXX*YV z=FmIN`mdY!KZuDu*Sg#DR;>KptvCPv{d7FRM7SgGk;$9h&zBGO3j7l<Op$nc@6iOi ze(R9)b;s@sFZ{CDPsZ=m-&wnNKY0J^dG+M=9|YVltUR~E)!1sy3Eu+`OY`dX3mvkV z9Y6bj?oGL6tt<b0n>=;?@0YI=mN-ooEG+X+IH1DSu_gNd%lenk{`*eRZ1J-;`1p2S zh1b7dMm3TWk;?7=xm4ObrR?~fl!Wgrd;g!Wo^O8G2bQB-O6}E7FFDzu)!+4Te%{JF z-nyqIiY?XOY8Vau-aA?cJdarU*q%90?Q-HSRhEMe3ES0QS{(U!Mm8pLrBGYS^p#T@ zr_ahXvHkFy$wo%$!`hhoR1=%DI0dHrYAaWD{LYsvoEq?L$I9e~Z(LIj%bb2~)@3R7 zUaZdk#kO#R=Dm9us&#L=JUc1&;;7xhX34O>F)XIq9v_tEmK=H+V48i*<iyX7SDB`= ztKACiSQ7B2(kwENp~a_A;{AK}sb3kU9QQl<xgz?Yg#-VNl?|`&$+^nfAFbbf{d2r* z@P<j6&3EPA1;1JTK)6@Ky;x3qK|)xd+x^T6?}MA>Z&JE1=+9;MKy<2|<Id+FE<f7o z7<~HJhU|IAl1)F%liX9bf`8Rg{_j&_<8~+<USn{1>Tb)AHk+Fj*kZOV_K}#mQ}%o3 z?8)ImJ8g>gq<bzovTE6;S1%{boN>pa$fRCq!zPi3HUf+4bibe7TAY^sm&@XYcSHDr zfE9c{j!pln*UNslIG4q|Np8>Q&Cga_S=8z5d6qw`Usl<4)11o}Z{F-r^!T-Q-KOxb zs%f1^CbHQc*%+cUDfN;-x!>d$o}c$-7*0(n63~6;z|j`AQ#RxD3aPI`Q(daq7B3E( zA-2HSw*KX*$u6H1UM|<TY49m3+`?CCnW%4A@$;g+zK5jue3$;PZPv+0&w{5Mdk`*C z`B*gI|2t-{xlCRQ7ffDSk*>0STkWK$rghqJd13+jYa&xq62EYFXf{2yUn3WEcuQ4d z=JT*kuEiX!rE`{VGG3<9%wQP(VrBp31MALgQe)sa!=cVl&vD5$`ITU6?Np06HOI*A zr<)ci2u@a2U4G`=gU?eoW{a&kTNr!dh9O@}(eLn?zs#0xm~p4{oA2(>2{pD+h7+VD z#J8zGew!mblUKkiVb&SuL!2#Np1l;jzuG|RdBN{H&u2_|U*i6R?L^I~nA_|r!6&Y; z?dZDFd!oX5<zij|slyiab^>!0G~$H2Hn1L?*0r5EV9#9k3+(0#<T%bn+s!|6bnAr+ z1#P#!rPRn5Xa=e8mRl+QB*5U&7l%BpYJuk4n?HqLke>KSYUAezxt&Km6@;Ch9KQ4S z*TmPo8F9&9q%YV0G&nd@t@FbB?~7$QPqn<6maKTZ#AlXW@vS+Wr>1;5yZmMSN1hF7 ze%sa0+HkX|6wfPV`<pEk-*LnvdH?d?7Lptlm)Z7gO_VBaFE19TINb8m=k2l3Ql`@< zxD(nI+`r4;v1#UuY{S*-*Cx5mT$bi8yZQlZ;4|x!$veG%>8QNxc)duwZ&BE%J$?dh zA%Y2?<8>C?O-<e$x;E<R?1HPJSJkg7_1C|so$6|KTW1r)NsH~qJ3kgod3u6nQ{Hwf zX+PQJ!acDcS2BIPKkdholUsgwPnuFQ`$u}K;197A#dhCsujrX%`-0==R|e%I1@p=P z&F<T$x1~m%2y~S-RiD1{P_A3U$?#uS8yWRXxx-r)&zt1-`|QtbOSO5?GZ>d0xY8QC zEccr1#(Kf4cC(J{>#&_O%e9-g{>kB$mCe>)x9zRT41Ka@;(smcojvalT`-ziYZGE> zd46$1?_uBg^Go7<Uv|!#_1k-jPoxI(-@atYtff&`ZLAZ6JG&=0eeUct)G$x!;B8Ml z)Y<U(pHIKD)g7y60jqu;duw)mX6i{}ezpepXAx<ZU-hQd@4jbre)by6IF81`!#wl; z&N;=ofc;shvaOka{koZ<+t?rYY)Reb8ht23ZR?A@@1v%g#;eD!&Od+M%YX4Qr8fab z#hX8Rme`7iKb5-u@zwja-?TX1wH>lPse0L<bH!6p!BXYIvYdta(T#IWy*sa5=hBaz z(Cc??*WbFBo~x=7%7*pI>Z$IJ(gI7m*PPO;(rV(^aeH>+e#VCv^X#<_?cC&(cRJkr z;k%nbJ)7j8ubTcQyW6X9$)xbPtDl8;>lTSV{PAAi)Gb~-`}j)-OEwYRYm5EZD;w?j zr2btva^|F_?OGP*1*XnN>KysctUnqq9rkL$vQ<ClM9mX_za~mkTsTitsa|I7lR)PR zN8W{Z#N54C&p2?$SYg3h?w%Q!6Q!>eGq#2G+*T9cm9LYd<$h&Zn&Z|r3$Mkbg&M4! zb(7C@-Ri)QFQ+FhUpMQ^*%J@U*VX4f_IUSyQ)BtRJ*F3g-&U7jV$#m(SRh*QE9iRT zt?!$BANKFfK3%xYN3$(6X{qh6oT5cZ^`;5ZyOT}d2S2=jsV-oH%==%9lV{52xt=hY z&vNd{mo@K>`HA;ww-)byShdJyE!(BF-{jTzZVo?@|DyKyVja%E*X+-6ZfT$P=4YJh z(vFovu|FoCxUu?*$>M2oOE;fgu`u1Ue8zEg<>$IJ*|)Ddy$-&-uWVm%=AL&4PN*)Q zQN3Y#ulwy&2eV|{&G+8^8J2TDF7I&ov>7_CoQj>CGPaRfvMu=nm(A+io^q7@3J5YZ zUf3A0c7?ytnF(+H`zPJco@M^?<?{cGtsfR&o^Hq}Bf@Aj{o*qo)p{c%OVmci$v$aw zP$%dYyUS#qbq5^U8D=u<l$;qoq1j|pQ76CM)9=AY=e}{h6k#@}$3S42`KIoguUX2~ zzl=INAJ3n$X3m<AXMVo?Y8>}Nw7%Zge!q|Wyr(KGpQBE{d}{NSMR>t7S%dd)zZCs? z+*zz?c|ECq|Kx9-d=}>Oid)4GKKjVnfA`<{>G##rXHF8b_B(4=SZ9~S?dpGI+CtHP zR}BB!zg=3nNbbA!gjrE@cUnl-%z7N^82<9#!KccVJ-QEKs<*7llvO#zx1%EV)qEAk znbpcSU)(gZnaN`O(|zvL<12sPig21aIj`uO^}`l#;{}&8UfS26mEP++Rd0%~a>2*; z@(i{5%9;Coc=lYrY|kom+{9<T`cl>4JIg=sUw(gizjOuH;WfwGMbl-fyH7BjTF5Cl z#d!gb$}2_RbcQvO(<{1!FP=}EF-7I&A@9}{w*w!-dL@)ry?^6T^SQjj+nr5cVr!#k z5KC`X^Mx;634N}DCTAoB>!&`*3Y(L^=<lur=M1iVb$rw=w3oFcdq%kOv-YN)7H(&v zZ_j!wdeGI)u)r?z8kgBz!5eCfK4FLEn6U)OtrhzswAbI~ex6d^;d|L^$M_yJ?^k}P z=*nm$6gO}Ef&G(TEo8VK#Mr`MBT;L=<JE6*=B=w(W*?NgXe-^E!s0Po$A4M9iZ=g! zfh$pJh6OSzwJ#2ZKjJg;d7bdB^x)kNsYya^7tbu8ke~KS`DL{61m|d@UjdJv@gBS| zIhuKK%KN#0!;{wg9FkiwJ1N5JeoNq)4~HtV_!&Q4pS4$W`ktC^w_jE*u%CFVOoTuE z%No;@>J@q|=bkOB-Dj>=y}&SHGrQFNpF8UH_A<2xHcB5|?zq}NTw@P&+oUOu=O@pZ zx$ri-aoZ-(>Aj-*&w6TZtz3E_=3(^Z>1SfD?|L>fw=KeH^;bhrPM$R~>|g7jH}to? z^g5s_?lY6|z1sAJOU&F?JTjHs7I=DdA$Mqdw1IkY<ejIQS^cHF+hZzTTODyST=>MG z=X>(|y!s<i70>3#9<-~`-*8@>>9)+_FGY5LZtRlZ%~kq^L*YupFQ;#l&Q>|j)3-KV z`KOERh_$zr!22(1HaCBjyp~wkqPH-yK6lPv=FS`CN4oV-2%V8yXL-kHnyO~8LSD+& zfG^yodvee3@9GMgQ>pJB!NYgz*J;PjEpuiDg)Vb2VN+dN|E*$`o2lBI)k(VTyob3% z3jR$mJyWT+B&(@cF=v6rOoNQm^9%YSj?7uURmj)w$!57@Wix~`zfMu$$eQ$d#RDt8 z&q=2RbiO`H=E|KT^R)iH;g$!J?lagHoIbRa@7FphsfDLqeS#RHwI4J)a~_aeY<NoM zw95Y0bk)FDPpehD%q{9AL<{a1r214D3;v(6-R`V`s8c>efx4-@QS!>8lSG$I-Lz@e zq1D|d)z;_7`RqF9=p)wgZ+qx11(EeH%cECqTp6-i?TOc~dG~Lnn7llt$sd&yUUyN( zySG?d=kunB$6stj4yVtvx*YMW`&IweJy%%Lm+x`ey1vvs&fDj#RswT;eEp77YtHV> znbTZ*_C`#NR<f}B4#C6KJil31O=NoZvtR14`4o#7M^0tQhAL&%Yh2Br71YEfrmsHr zog?L4*iNO2L^D%+k&M2@rv>79qnx+T*eAxJ9CMN3>aT=2wOc(QpS<GqpBye#U9i>9 zp?SYj%14Q}mga3bru^4dGKeoe-w{>6&Z>0Dsm5n>3_fRt?ax-a{^QZ6z^!x4b;V-% z`mV2Ccl3uxccIZgVb^}s4dTXXtWBBPUQUyZm-QI7ib{4^yo|Ldv`m(Y7sxs~{ixB4 zw<TW%e$VYRJf`Soso=Icy6d=U<vZs2KU~T_-ejHJeZH&oZiUs!rjL7)mbzG)y!JCY zR&SizaOKnC>%c>X$EiW!Ng2cJDFE5$R89Tax@@td=-V$o#UhHh+U`@v$quLF;ob zO!_<9)^-1tywoTUIXj!x+p<$wukSkLwkg25%Jo3|67D}nOMlpSq_Y&C<y+Ucar53F zFVz&YGt){WSgZ`sedPBEIGuk%Cg-@!_vU9yjwA=y7dt(bxWu<%iS4W+55e^pZJVq@ zdS2W(md>)$VNvHZZwan-Gjjq}{)pc3K04*&+@=LqE}!H#CoMgpkf*`<eb(I6r#7K} zVr&hwlBUehPLw#@>Y7&LwQZq~%=c^4mRPh~XBv1&7ENo-$qH3olXfhbJ!(Nd(`S#H z`!B!Sp56Q+dsY2eDIH-pH#7Nl$;Am9y0+OHe7mwi>iko#$NIl{6i<Bo)?)T4uI1a| zd3RHt^nV$ho3f^;^~EI~(ISHjYQn}Fdt+|37`QB5_PE62u-xt1LlX}-Fh$Odcq8?j zaZ|6;`%Sij%IbNHQ{A$U?X3{_m)Fw2gmuPREuG2Nn4A||PZ0Z4Tkqk`!f{>koAfGv zk!QbdsO@+?wXS8w^M$t*R!cAcSE^KJz|nnV`W=IJRgbs}tv?p8KGRY#O>&C(!M2b( z0}-c3HrIBZ&Q@A>Q_U;cCws}`a8`y{nzlQx@6(%X%u=~#YO6reujucR$LD-kGkShC z`YmhltBuULwY9E4j-1WD7S8j%{>;sb3zvy}e!bJv&p36jVxqC3B=@X>ju_>0QwwJG z@pto0Gh6cW-r;3Ie|lXeN3B~Y`uff9S7xnC`Hti?R!!^=Yuh_1^-#+Bq?+Upk1Bn& zYF2NS$kRT*BV=}*O-1;HE>1;pj~cscMOhyn@44%}RR7vfO>frVKR>>mOKhI?NbX+! zH{W~T!hUHrr(Nv(xM3fEtux!~I~iqbU2gWB%IZAidAYwk#LYG^_nSw^wr6$+H@(a< ze|1A&>gm*uiFHxBoLxDW+`ey_J(K5l*rV45X1pD_WlBdj+$el@XNTPOt&@urEf36l zcEA0~(wUDA1Rt~%dEa+cD>t`P=iGG(6N4z*Iq!py?%1)8<Ej4tXY;wGy5G2XnZ@%w z^ZvN_;Macp-f*6Ur}xzJo>JxfD%CSnx%K(adI5LOqf6GsUAfR_vw33~YnSDP$G<xs zU&+>;@Z7QP&&zn`=QUl^AIdQcPk)xps9tYwVT{tcK^o$HR-l>J@X)!zr{NCU%jgNs zsoRTB$~>EL-(S>xqLJ$Aw=eyaZ8JD>Pv5z}da7xS^pOJ}{dvOpu2nqyQ}C-xzwYSs z^$(vfe|S0FlH=f>Yef~ic&rb$G$k&d@x83V>i@>)F<$4kTGYQ;a`!U(x!&h8AC_+V z@v~?C-G}Fw-)Bpg^yp+>o_BsuyxSYbD@xyZ_I_wI{A(}2<mTm$_PLX0RmJYuA(3<T z<Jtw=zx=-V)W4|5_DZVMMW?IQYdF{+Jh~!1KWtHoT<<lv+|%DuqGp`r=M9^6`9pB} z%2P8<+KX>+s>fI{dhA~Mzob6TM0$$ifn~Bgemu}GnY7=A_deUQJ(mxI8aG>{_VF!H zWqx=0`~LR(?fTl_#?7$<lE*J988rnQyvfsY)2{YfbNVTZ1#&`xE-#F`O5z?o_7qf$ zdRXlDzQEY&Xl%>(E!UOjR^8d`m%C!Eg3!f0|IBk`GlPuY9yu~sc;1Aszw0@e8img5 zD!OG@#W4%*@9h+}*niZ$S6A97KY6x|^AjJr=4YGL8sF~}u-g1J>)eIe&sJK_l+3HR z>G({E-}?U3z3*C5<96+Nd_*v+ddZBuiuFwA7rUI?qaS}ZH0t5Gb%9@JRq_e1V(jej zbLf+szVrIRiCcXZ<-FgL%uy-DTK(ojeTCf(^^Kpj=ZP<DSibVlsZ6znTR6DRqy(*e zuQHi;lc!q0r&{O4q)M5IDIV%}YH2ZV4=F5<(cav+wcBX+6b-EtwO2mP{1|C{>A!-u z-rmXFlcKL|%-py4z&)Ks%o@{^_|7XER3DwQ(Rj|opS*?Venl=(fALCh*(vtJ@yT2t zkBAx6w;nTaYG!$P%yO5cqsBL@S-0;@ujyKI_;8Ky{#~gTzb&zx%x3m{jidAF75SIv zE!wARF(>Ku$?_NPH}qUqT54;Y^{I5*f&=rfuV~8t%yqp(|1HyNyHCrrm%cuzB5Cq# z8xPmZnXb&&xD+)lUjNT-y)Eu?Tqe9+<N7h@y*7`U(yvdgcX93Q4JbVywJ?3v`g6ZR ze<+;X*!4m*bX%W&MB0J!57$4v{lL#>P<Qe86OnXh?MJ^CoT|BhgG+60t)cv;*%BK{ zCTsDzg|RuyRIOSnq25~~nJ@8(_1KhB7Ih1wv+EwTu99u`FlX;^V9)&~X(V$im*H;4 zvb8T8@{XCa*t$9}*3`@2PF*eI;J@#O&<D0wFS7&Q`=umV4I|m>m~8t(9r|m9AAGM$ zzdYlh^<zu3#oJ2PEV<UPz(mOLjN_RP%P*A5)-9j$Y!&<eLghcppV&CIMDOA#ZFpl8 zsK~yTrBdGQ`3#Zb(!4mi&Bqoll)IJWv8;4**~Lc;cI;D^v2@NYWxbzK|LV5Im1QlP zc9_&@Fs8-CZ4|SZf5=_v?Nzqd7Z!Yyx|X<1<4W!_4?T%59gF_dy3E|a`27^dOk>sc zo>THVzRVSTx?*)=S=IZ)i8-1K=cP3i1QOm>$rMOi7%YqF>Sy{cIHk4C>UHJ1%K?q= zuCG2fZ^aqiYZ2Bz`MN49Jma)x3hb;`tjPZulhiKh&9LDdU+Trbmu!O<<!@Gg?s}5B zVuIwSQ<6XC&k(#c?NrO0|C<g49thA&%h<Em@8%h)wSg0=9iLA-^LvhIqw4Y}{i~Mb zXV~0!X4$KzU8^3q<9^=?8GV!M>I?bj&pE9XRC9nWcM-FO&F-Iu`;BD1o_MO<5UTWA zJ)wTf-V?>%tISzMk6(G-F23u8_+z2?JG}E%i<db*y<2#U``G%RV^g(1C!ITU-;vL0 zvJ>OqS<jv^x^9rX@utVj{kz|#>H2C7kN8xR>dZrK&OOd)a60D8Cdr4f$2ae-nyxf^ zLBp{;vBNJnY<w1X@cv<y54-l|f8gdz%DP^pqi+9s{p9+eUgoUl7Sxq&p53&Tr=(%- ziV`QOKMHkAKIGq<wr}eCX`5<a3$Y)N+0l0-*Hb`z{uwpT=v|R_XBpoyi3`89Cgs=` zt?0F}4>VI>cWBpSJMW(J_i=fQM$5|5NtqhLI^o7Do;|xWyj7B3`hC;c%&<JdIBlBm zs#AuaSIHP$b&Y$yqrPK7W~Jl51)Z)R*BQR^TNPw}#j^0hnOW1gEE{KCJzt{o_0>y* z<cUFVb&qSGxs@U&kP;lX$s_aShbt=%xJaISGsUWQdsLFz+T*;JUVXT*K4|yUHT#`2 z*Jdr4ba-9y+9|O`H#EB!w$8ihTRZ)3%dxy=Q9BB9lheL`nZ8k7qeN9Rp?=kOgQQhc zPHpw|vR-!fPQx!x#}nS=vpGbkM;m$HKDFT0CZ?@H`!>Yf{{Gh_Vds);b0gu;g}Xv; zMlE+TQqbjWE<a;4t)6wUHs_qKsG`J&rKXEEc1WHI37s$_{^+bDPj3Z1ZhYvs+KI=; z#Z%nr>fWak@5{8Oi>nx{T>c{T;`y|<LTsG6yDokHInDg%)8+My3+Fj3g;b7ni$Im5 z0dn0qw|_s^AqSpg<@1&F3k*;GJt^zK?#OEX(5!Id*10k@|Bs49XUab1i2rfo>37z+ z0}kILLL7n*#w@6vRk%rN->&r=Y^x?T%$mCJ+XIQ4>;<b%%vw-(T{iGd=N^I9-|oVK zonIZV)xD7NH=Exz)nt2BoAX?A#WN8}Q&d};k1GkQq%!w*%P%%Nmu(V$Yp3+W|Lqa6 zI;Rbkn!H$Jv>0=5iyVJ`fBp2c(wpXb%7T5+-c!uj-c!uf-c!un-c!ud-c!ul-c!uh z-c!up-c!uc-c!uk-c!uAy{DKvue;vd0@<raqt5od-o|(DyXGgRK-E|B5@#MUZ5Q9M zn`yK5t`7Cd>vp~Po$uwfNaePdlKEvZ_G2?|2<d)&{@DH0a(lm5Dj(-tRa#VvyLK!; zfB)mL{~vy>{r7)<|K)!Bm%<Vco5Pp)-+sBK<<hf~Z*dy${p7F5-&<l*FQ-4@(nZmw zS3cBTyZ1<V$3^|BL*-Z0@5O%Tn{r8OPI>Khq4(8$5~o@Hy59eP{=eTFV>^PBqPYJ$ zO}VJ#6v^=*rP)cBt2|5N$QP#`p=13m7ql|Xw`fNcyq$I}<5E@No`cK7Z)w|m>hF1W z_x*gUso$@Eajy0~{rjW(3vn0jgU5H&-`O<He+uI}-Scl#G*TnuZIoW``gbW;e6``L zXQ#N<y^kz9b8Sax=C(ckZ=C%zT22-{d;4e#huR0beFbK51&%AL4jBY`Ja-G4G(YC^ zy^Q}kii<O@e(Bqib>i3g^2^cPZ*AhLG{q*pR}-86#8zznk(q68R^48qGX2f!dy_*y zuD$uK-b9&at>oelg}G-OwEXpy!j;ZHxL=f#Qh8MD;P+|1lV8ucn|I7Q)5vYt=G3x{ zZzcD}YjCcp>Q{VN`Lb3<ef`B3p3~1iJKvsUR`pQz`0Qh)Sy4A#4rHm$2~y^~SF*A6 z?V|AVTRz{s-Z!n$ztr@+Lch#U`EtC>`_g_3=jvk{tg7l$Dqp)!kiNWphtcd4w@<%a zyrHt9eTL%y^}Ew8tv+wwbvs9W#ueYVi>CbxmOqJR6<(&xeTs{H<7V!}`#wjqm76vx za~?I9OV)gBusE(gYIcQ0r1!(qOQj>anZ9=J$*j4ygZ=Bb3)hcZU5$!3J#j_sx#?31 zzoa^?cl0>2V6TY(kG6Wd`N>SL{vZABxzF^?<D=Rs)5X{2nkgsFUaQZkSfw-X{`#Y9 zWPD;Z&+$#Rd(y%t;c0N8vMOpJcQ&tzkIqKNjWZr^%6h!jX2F~f@8;E?Rc&(YTF$ck zp45l;)8jo(B<Qi4>&;oXhlwMv=w84HY2HPJfuEPI(DbofdNEPuU~Srs*825vU;Uj8 zoSh9bn=Z2Dmh%W1O0bz|zkA02^}CG3r>PG!y?5OBGh6n2wq3=-(if)nr#CoUVpzs8 zt+1RW)Xzn_A-Z?Q`O-Xx)Fr=jS(cn#zgQ)GwOI00PniM}-L(wql~dy_^(Q1xcyz^R z$`+#?s!_S_lO_qSkG(s|$EEUp9mlTv*SB~#MN0nlT%@Pgu04C!%<Y;HUdk_Y*97uK zFyDT&m+PTQvuwWffjRub(H*^_W_BCP9<^MmwAGBSjC>+{;)m3hfWUGo)h*{bY{Oe3 zO*jj8?Nzy?@od4QXs->46K;#HS3J_f+%eBx-l1gLdaL>I*CapiondiMy(xO8!PLFL zzMemQ^V9g44Yr5=*aY35mAy#me9qljW;c?hoY&|#im|?Nk9mB58uPzK(``))t9=%T zY^srEcS^H;9Dm|#$C_KM@6UhTTsbc%uX^_F=VtS_FFShZjzPCiX7`83Mn})iDOKjY z&DE`aCD+O~nt#rlmwVT(PPMpcwJxam__Ir)q1)e{sMpGVxkh((`qTSo)7hpTnRCtN z5^w%4+sXZ^Y1YA?lU8kW){H)T(<$nPr-_M^^ZC8EuN`=O>W9aCu9nHKq<@9*cf6R~ zb@PNw@ZY|C@7spgf3*LxmJ-a4Kj?F9-HaV;<b36JmifNC&tMjqSeVWhX3=3<9(w1R z^;)OJ4lPj!g0m&+XXZXymNnC*wxvtLebS`jDFMq$tMaPXybHJbb<{5)+SGOZnkjlZ zMlWM6_U3cn=8M>;?CGN3^YMPdj({o?Z+X+`bsU!c%Oi4R_jpH?*ZvSc9#q=#I=)|h z@zM|5<_X74>Y8kPAa#{({^I~I(^N;Eua$RNYQrs-Ur#$XCH<5B?0RGM>w2C4PhS%+ ze7Y$wBO|@w>0*x5%E-mO=XM==!zq)#%lCNMIX*QG@si~SLss8imh+%S!t=r9RyK+6 zuMey`d)rLp`%JMsXWyi!X>%n%th#koXV#N_8tZ%C-`79<JHpVLnXPMf*x9QyqF1?V zy#8G-v!T6s<;2)6KWF|id$s-Lw|dS1)7{e#N!~ACZl1=Uf42Yqkz>lo&ipJ}v_6aR zbYAW9vxiE|!msd7`@Z+8=rr3NNxS1ks)kQq{cDJAIv65X)q8G}iT0lMg)Qx7l`}gv zH3e?|4^ul9x!Cn~`ODj00?WQ7dqnr`I=0<MEbSE+`;T-9&sDh=QU7(Xx6N^^{vZ3j zzV-Xx^+ws2^AgW2RrGf^Yil{cz4-BguD0JUbN(-U|59c5)Khz2-!mxQm#5r$+~&gJ zJ#QVjV*Ssi_upacme7%5+x+`-Tj15HyVFD$E>l*?S~9t6g2ghXC34e)cb<9bX6jP2 z*1%<fK$PKORX<DTZia{T7CT*E-(5A+^8BUx<r`krpLq9aotWdV%aIG#)cQ9Yr-nzb z{ulD&R`I1PeIN24w_eMuv{+#OIzV(^aO3rt3*K7BR3|Q#^?Y$s){#A9nTBlW$`-ZC zHaQcv?VURP&yuTmuJc*NH?8m7k%g9fL<%{++iuPLBtPHnhazuMe*D(|ZJje$Ph|-> z$}6$v)ys~Ui7V<WZ&xXY<dz5QIA3Suv@+tL$DvhBG28RA11FrEtLr<<FlM)g$c^{! zK7O3hVw4><dG@-@)W>aa%Dz~AFl+y_UhOT1Q>cN$-e*lotEMg$*vKX%A-LyFSLdxm zuTS3Vns7ZV!7^=?VaA<5buxh(9Cx!Wb?sYb7xf{qSH;Fc<AqR!RsE?`Gs^w`q}<Uf zaCG_n=;KEDZBt6W%lh=+S9`OYrRU>1@0w?~>Ng%b7k++0oP~M8gO768|CA&YJn?2o z-k23ytvQo**QpshsxO59DVO+ZU)h$>%VD>#Pk*cBK9hGzrve@R?RkFna+|a2kv$(T z)-5!Xe(~Vv3HPM7e^-<>XFtx)t2dvcID>iqM8^%2=TA)CsbAwJrpxrq>eE5lpFKQt zDnA+<6}a0epI%-4)!69ygp#7F4_)g!H>b3kguZ9l@<=~Y`-{Bpk3&yatE;bHV7cs# z^q0N&s(H$*q+=9vc5S^oefHYoo!n91RRZm&e*06+!5|Qqq*iv3W6sIc&w9`Q{y99K z<%{?;{^<uViwaNQ&&lJ=WMn>_g^NeI-rU5{VY37O-o+Q$Z%%XEeB;xJBJ(%v?-y^9 z)6z^;evwkW+%R?ODx=TO&hGhsr}}ehc&FDYuiaiZy}BY+258n?W-8xw>4*HssL-$% zUawDi*33Ai9h@1>8sj0uYgCc4ecz>plP*0pUKAs*)%>ZnW9r1ITbx4NLN9qnO2&Gw z|BzX)CFyXiq2`FU$kLXpQ$J3fbS{kTYv8?bw$NltG11LVVPRoiQ#Y;(TEn|(MT1vF z^vVvGHC+!rGpGf)OCMzADrL%f(9N8Ftou}>wRFhS1Jk>g6(#6!gg0*K6M88V!SFxf zq({i5M%7j)*@#PVVH$^KG>9p3UtF9TP^ziLFV+-PKh=DN)vS}zA+ldCs)RM|W7l3$ zAsP@Wdtpk#$s+*^wWhrlJ}@hM7gtK7Z|@($pUkV&CfGNKp8T_-E2%CdRJoqTTkPjz zm#Y))H@!L`f3ckLr*cHc3j5Vs7w(;SwA3`zW$Kj0JR9E4+spZkr)w%xj78040mk== zx<L*18xCE3oWN55N#SCW<AV1~97I)5O>f$>pj0Eov01k>jFZh*=cL?>1H7-^tE#f~ z1aU1fdC+2{7?^rWxP^1if~`wko@!1G;w)g^r*ecnw)aTJ^A{5WCMB-dsCuBGBI#mz z(a2C+T_#xl*@;C-wxX3Oa)}34URkrr)mG)TvdrhqO{c=9>~Tqusz3WlW8<Vn{W@nH z!<HoTh0XY+zmnlc*QOOr7Z{%;=w&b#1@K<zJuz{{GM3;|DkY4n8yu$=oH>1K(|%PE zraw+LD#03O*|vrxb=yst_V)3OC7tR1atov$Oqmklp22>3qB!HiX@8cf9x?bj%Wth? zSCn&!>J_If=UF+Hxi|hz5xS#TFaJ5)`Q8mjtF1P>?{IWDX0b268Mg9X+y2O9AD<js zKFe{>Qva`>m67i?ICvL4WcsZh*mK5P@)OrwJ;nDs9vgQxUe8&6BHc~MEn-*l?#;PO z6^CL|>NMJ$YLx9=0^Fv_O^6C?Q^;++&}_}MLWw;f=Gg@uPTh4k$}c*yiCk5*`cgk- z(vruF+*(s54^C9-bGlimKJ&DouWB*tH1?IpKYx*adEsQm;vg>14UdccBfRgke0KbD zaQkE9<JJXy0Vz>ME+@jI{;u|Lk91m)WHtNJM`=M%NA&`CuL<c-f?7fj$2{R!+hTn} z<6*p`(vR844s0+D;yPR<v261T&8Zqz9y5$|>Qx0M&Ai|7CCor~XQSSOzNf-hdj0nQ z?AfuJ<Hxau`XaZFv0Ss8Dsn=4|4a|L8`f%z+!gQnoDNc)>%qM=e1czUu<p%S(}Whv z^v+^z(>S5&RdmMDO7B9&gW0SVp)8uLE1m7mKW~cJ^i(GB;qCm{@9o#f?~givt@zG) zmO5LTRVl^wR;!<szq~)c?9v>K?)&`nOzrQS+5bDwf7-L>^8WuU?PDMRWPin*^WpTq z1!q^giy!dbcSyEj-R{MEw!fV1e){y3zNG8>mNslDe=|$(X7|-kU#`~JX2!|bXT_bj zUo%@>eDn6t?Qf4ae|vm#i|YT#&iML0v&`M6Pd{Dy`PH+Ov-$qw_0#{~wTW1F?%C>2 z2i7B7elD!MWHaZ)x6^`~_GZcH$Lr62T>VHo<h|;SxfOxzCDSKwOnc7UmldHOVG_Pt zf_viR-A{5jwyNe?1YQ<z^j$UgVtntMucb!y`=(9sdhILg{3Gkil=Y$yLto7bNa<a< zHLUf-%Ge^cUAI*C@Rc%DMNTNKzbC4++_>o6wTr?tYJFQ-ZLT|=bb8|B=65^F`<7_@ z;kC`HmuJ1rQ7kf3R`;1y?@-4(ol|c4np(|gcN}<QpC(F_I$Up^utM_3(hud?+FqQ? z&Y##BVEs!=!TmJ%;Xvu9+!MJaEw!^&Pf`w;?Q-w>ttqc|&6s#O!)5ZD;<pL059R8w zZU}BYan`6vDC+Hti&wVnjXEvWBetk)lee$q$;rXlnua`UvI2SL`5R~1T`Ab~V$;=G z=e)LD`RerKoKevRCLZet{0BG=&i}BkjX9#@PK^Tld3m?qxc*hFwuW5GmacbtV$%9z z?(;8G)+HOQ+qBK@XXe)LOL>|^EFEWDK5*c`&Zzq8Fo&z_W*DC5k(={uR-wk8y|ebo zCo$i+8T3~3>bgA#+OGHLo)D`IIHH(wKj~icxm&`4DQADE9LP^FXuqbLCbHz@NzFia z_tbX7Pnze})@od<H&fS0cq>qrQ6p}~dT^`w-hJQi<-Na|x99HpuZ8u+SB<&5802F4 zUvR8l`_avLYrU7Hy^-<4I0h{hXSrrE=E@&yk52GPQ@i52<8i^ZkSnIiwk2FXnTBUi z<!CHfyUpro(uF6dS|hTfc~+!FUP)v)z~Z8@<<Sp`h8w4nn&w3YvMZSJtW~{vd4Yd( za8F#CyX3VMFSOsLo@HclKcJQ7{xovg2{VI34|gz6<Vuv0ITcawCtDQUbwO^Pqg3YF zWT`K#X48T@1RXWzq?RP7>N2@^xSYKh!982Jd*>M=^Lt`>s_i!w%{5cD7HIF)zPd!q z{GM1}YD0ORgNJtk$N5VugM3$|xEZicxWLA&eLT^dZGzeqCds8mO$GXEgPbQz?U=qR z;>-G?-?<FwRt2Y;{j46<>#$7r66ros%-v_P<k<^p`__ajT&9|8#yc6!FO&;9cQqzC zgfrbpGE@kidDE0(+lh~R4;*Mn+|+bacWJ9ue@tVxV^PtWYu8E=cj>V%(MsW6)tEia z*#Cq2f)34~_8HTZB#N63n0C)NqLA?{M<Tg2_Dp-&<~a+lWlr(RZjSI@R-X}jGRdoA zlJJxcA)Z7xwfSwEw7Og!UzzkbSva{qb*>PyG~|luJ}O~zTioPwcKEz$T1yt}oO6BM zv)_xJEjTbO>5JE|ePzpL@XbsA(vaHc*feSDGZ_Yhvt2<}E55sIWH6nrR^{{dq{4-0 z@y&ap-f_-e_@pV(Pi5DV9kNq3Tn)_YTVytc&WQ=yav=APo|C5F)oP|li+fGnoI1ZI z6)$Vpn&I_w!9C$qOxH4|TZkQhsJ$RcV5w7j?&gV%4N(`iGz&JiKK+yPw#)LztyE=s zrJH+AnwHc^TeK%Buc}IB*L9iPEhsSGb&I-FtVh-wf%&Zm&wMYevJ<~*<MiT1eSb%6 zdws2-^>Q}V2a}RRdTxXoUUxiRD`;JMYsal(N!BR68%aVlc)5*J%9>&u95})b2nUB4 zPCe%w)iQ0)=5Qg!WvM6nDm28HPueVDEvnGty)>ua@x(ltrAboLB174~tMGo!wBT0Z zFZ12_Zg#q|kkhr8e1~-{Yv!~}m?nJg%(7bxvi<6JvhUbD@rvN`7fHpLO3KeC)xKoA zVS9pkuB#?<dWsvr*YitGOtHn56HDg^>Z;CBla|<4(7HpTIpd_N?gzQ7L@&<eC!agL zd~~rV>cjDw@tjXNj{Y!?ym8bsK+o?X!;Z%*x)WzacEzRn@t%>gwP)24HnY6sC?@Q` zT|GyPLD;sZUhSZtLY{eiV}kjtBRj4ZUR)ZS`D2E&f<jc+g7cOx4^Fvy@hsSB*Z=vn zlj!S%wv9OnB1)GVwzl3h{SXneaUuWY^M{HiU7z)&k@JV*3%gs(gT8E1Ole!+nEf<C z!lL4+h1Iml7bo|~-O^v%<62zAsx4y|z3%^~nGq)P;!iInKEG6N$;&P1yz$*_W6|tv zy*(<MSoMx_Er`yMI5g+&%<iwI;eQXUXf|9Y(X6TS%yG6&R#=bA69&UC+@Y0O%+-^E z&&2Fmk*!x3wk2TS6zdG5_NL(V6IT~GoM+Q(b7=|4IooP^UpVm4ks?*~TZU`Pd#~&d zlAA30^UiwjF89mRuidHIQ7;lWZTa?@zgZLYc1(#enI?ATlG{|J89#mI{0UX!VLEj( zer0TB)#H=#vOA6mYsm+5aIgHiN^y-W`-Z9ro3e0**-5YOn@`*NYForM_tTp;t~txz zBXOo^KkF_nt@+F5mu^hB_G<6t^G?e-rQg?B|Bca^u{G`fm(8EcCe*TBUKU}HUH|!^ zCj0soy=kFm=Q8&!JMFsp+Ovx~B@Na23!YpkY~OKERJv~SO%q?Pc;!1$HP5FBFMr5$ zD(KpsUp4z?bBD)t?ccHEo~K@nX6l*T6Nl3ytn(5lWzO2YNf0zDaHRI3arwE7b>>{_ zc;}ZImd<$kaPxZB@&v^<kLPS}%~$F2RlZd}*`}s%!^)|B^OAKmtHhsP(D|JE@cgwo zAC*>cOl~TV<U3<@ecFOUu4-(KR%a$Wm70*${JU)4@mJH5WjQ)zn1m;V$8ZOA-K&&a z{rlD|0}Hof#kE;F{{BTNlY>r13ccerV*JOPt|xo_{<J9Vxs`Q1Q!S0Hc=!swHf(wN zGB>I8Z2d{*BXP4<w+Ln2PP)xD=ZyMJ%UMe%nJZq-Du{3npC@A-P`<EA>YAs)<+fM* zB<B2eJHNhRe|X;AM^|ruUVZhpu*$r(*FRrPEw=feT4+`O^M~W?gwLyU&4TRa#m`?S z7XJFFR&A}_?iuF!bv9Ms9(<fXUtiBJZ(aOZz4`a*H`LT$tGB7Luda@rIpy8K=BMo^ zYh6sQ)}HMxV0ssBBG_A9YqdXSF>mPSg0ioNYd(I9{oUL0<JrDR`zklh+Z#VeE_Pq7 z{d$+rS+@IsNISoN_FS*|>WP1O+n8Q|pC$fcZDjGKIcDi+_f%fjnf3jwYw=B;*{jp8 z#+biO`}=y+&-p*Ie)_JuUB8&sYpUKB-yh36x88~R{L(vnuHNizSGI|l-*WSx84x|a z*lzFRHB$SFuT4l@Ql449F7NUq%gf(hw$<FV-M(pA`rYD7>5<O1JKpWqp8fv#e5>5; z(_SXcvXixE-u}Dn{V(meeR-dK*(HDc`&3f7ZAZ;*8U1tTpRfM;^yQzbMYBG$zNydt zyneRolMdTUF=s!#`}=3lZg2jDlg_^U^eE}tp5GN;^XhKKD1Q9JQy24!_eb~}$q$Vo z@25}ypgddo$GWqJpY8a$ukwn`x;=UGLhhN>=gu=bKkNC~{<Ga$E1s!V{VDw%Eb98X z+~og?@8@T4_hkBaGIpD?<&SW6PV=++JifE}&$`$18JW1}hi{I5cBk)VjlK2W$n!gs zH~oB>!x*++{JM-nc3P~|i90rT%|1`rGIPFO*m866=kK4(?`Yi^nYYis{7MFcyxqjJ z%{RZ=*zWV4y3IuY?PT9s`y*o4Ykto;w0!eBIfwguBIm5VAG<tvi_eYkQMY_=cl}&G z<=4sX{eQ0?4v($(jnmVgr~ml!@AJ>nyKAd>pYB}0Q#O(#&{dsnuiFaKOWAd|Uu^Bz z{$i`dms=J)FTM`rxs|ujgkiCH(S^<f%T~|YU!F7}g>#XEM8fm+7vApgF}?pf?lXJu zx1{2U%DQa4cUE7#a-d{dgM`V9SymZeJU&l$>pSJ?Yo=Ecy);$J<Zk`r$uoNm4?q9$ zbHeiQm+$t~+dttf^hme9rOC@5{Gd9oGgPTIYAR2X=_<zU*4^)xt&jS>pn1lZ)IY{c zwk&?*d}^Q78n)o=^OKAI9`*Vvvh#8D_xFEZM1I<{JAKjasx)7#R|}86{j%rm`?t?F zEk1W+Z`(X6h8??wxEE)ixYBv-N7B*ysz8a@%gq-a^3A=&$g#eR;ZPq#(}ZixE#~oD z0{MOO|2#i$|32i|(?4&|<}yq?7v;gw_#=gZL;e^;;?o-+cJE~ne8VQ6V8m8q@#=y# z<5A@Whl6)89chVVzo~4IaaKUrrSGoos`-akseZl~sU0!#U{lWm*=s5DH@@zX);W7Z zi?80Toh_Za`OmuViq;x0)|U4B&b6`r7H#!?Ni*Xz!R>!kQn{sHnk(@{O||I{{Mr0$ zsqBZ`Ut1>MYxhyk-_7=(DfNr^Yssm1f)?ES{nA!3ZYAGbA=UF4O9GmYKl$_E=9l+u zd)|KPO}w(hLczW1Jl`v}6VeOM27G^a@BPEw>mTp%Evrww(()~bqb^FhJYkCFySBhj zw(kyysJ-6Ry~waetfTKmrMuYO3wQr+W_0<P!?S43j;ps7w2B2x7q7dqchcgUGtcR! z7pv6Ss&9{7bA9c5tJT-cufKbG>DBW;mG|F1es_N--{BY535DW|@AA2=7IZmWE2Cg_ zhw&oEk8^o`&sSG3-(1fcld*2rs?x9h)$gypUj2H%iEkB;&F-r07JJuCU%mbRk7u)= zJ<PIm7Tsq%fBt;##6<#meXm_O`t3^hD8$JLJv(6T;<jLRtCQ3oulu0~tYhw#OwaiI zO7h;^?bCmU?5t@okz=*83Hi8tTUz(iryp}{_m}?>cTIAXTH0&+>%7z7_WB16$1Vu= zho7FUT~)XG=F`$c_b&H$2wYn&9nly*yW-pS`6~tQ<hExO6b00LJaRVo+SeBc4?ljt z|Nm#_8T%(+O_B*vesg16S1m{G@pD^cf8VVs{c`%YN<hcd*v~oN7XD>=IH~i+Y`vv7 zEbi+p-nt{KKWFDu!>Q+s8%?_B@s;V!O{>2wZ6qhD{O-@jL;U-X+n>sR{^VKR!NfaV z?DuB~?D)9kQBc~%z9hv1POB?-h~AOx%e9<eX7Q2t`rQw2)@<ST-(IrTXWrVIhBIxv zPi4(JEqW>4YLSoHEh}Hv?OPA0KX6R+S$KO&NuK2)nMyVZ?@zyk_x!K_k?8&Jn$ZQf z?GKfv7}VSPe)^NaGVymxwM2Nu<{dV>_QdhrFAo&{yQ6nj70>J_{tc3U8~fh8K6>=e zub+Ry8@|5zbaZvd{Pgwq3v(6URjg80zxKO#o8(jTTg!Cre6Zf~_GQg9fqN_bJ{A}U z*+>g%-YRg^y1XRqoA<7@UscTQx4Ujn>d2j}^sY18RqSe>O#KA=OXuzS4tz{JwBGDc zefJhwz5gHeeu{6JUa#sFcc@?Hj$7vUd2<{S#Iujc6?lqWe|`0MwR`&M$v@3k{JeVg z_fOWRk$)CWO-orjMPkj=83l{yFSGIued2K;WcNwkEJM?(OD~UJ`EgQi>x?Mdn-{xR z_STq8buv0GVp#Rtc7=<cXZ@w+N0v-q-|pWxvnO_m+oSg5>!<h6m$9E6Yg!v_emp;D z!-47R?cx@9&Wo9+e_68BbHcW#-R##sew<yB5SxF>RZ401VMeib?uz*JzwJvl6_`2K zD?Bf?;_p8auV23_M!}Lj>G1T0Kk_FXUE#ioW9qFFizcV(bU&NCN#oe27i^I&_52TS z`Bqmm)Cj-o)?vBN?)!UQ|KZn#HX6GUn{z#0H@}RwZDnqHwok2{?Mzb1_v1ekPj}Qd z{!VN=bZ3?O{6yu7mM4yOlO}y~czdhtrkAUdSD&)r;`c#o^@MI7DmxG)-YKzBx>F;Q zuixcc*3{EmPv!0OJ(ahcCG6M1&EK|rdsx-4yuPeLwYEq(@m8C{<#M@QGrgWKan89M z^>nxYY2S7m&l$`4w*P!9fA;FDXw7P|!--KT`Q4^=&aGb-YNh<=zq_WMf3?}QLv^W# zwzaFK+Fv)DTDB?q@r(M8i@)w)X655{EGKKy^(*|M>fcw(s?LkLxH~2|TWzlA>{|wn z`DUewMfDF(yuYIUDc<M<_x*Ddd42>>zWCx%qFr3%_jU1Uo0PA6eR&sa^iS9B)Q6+* z?k=1cTYciqjm@vmPyTDw_4(D~qbEQ8RsYJWo6a93(JprHhL$G(hS0nvs*6Ge)6Rsd z<b@mw?3gk`LcOddHDSeq9*zC+Zch5jQ8~9SFsG)hc<s1oVf~wR884dePP&@(?WJGe z?b<z0`&Sq+xo&3dIw!}}Wxy({(Wh=R(Q;zeVZVUP*xLF9jNHo1*EUvcczUTkQt!_9 zHt*Tzzx<tMzWQhl>s9+Bd<!Gn)TSq9_l4hE7ItsO`OB+*+pL&>^fQNv*q)`~RUPqn z-%d8a{Z_8{c;f8WhpQ9IJ&V{^*~cx~EV=yR!|X>7_HTWxr)JaXDqNG`q&}_LXv1T( z-dzWN&ttQ1yv)0q`v_0ns)RR}8xPz0O`SgZ+}U|rGve<&7Jg>gwrcnEJqkP$^}k<! zT~d5Bka1dfl<VDPy=9knJ`LVr*O+Z*Dm4F=U+*`~Uc)t}tFj-y+0k%*#+?PZE%#rp zYO=_`5;w<u*YV2Dol`G`d~LL-pIuxleoJ~|_qStpassL@HFnW!r|qxf`mxoT<Hy$E z<i~PX6c6a<s^3yDa$2$=>cMo|5B;vUTY7El|4!OD-T&#Xw|hlD9f+J&Gb`=R9rnZX zKbA`@G&qy{`Mg=q_rC`2r+40be){UsH?`)f)#*Zhcb^4sjyd@0>;EjreG0qdZ~gr( ztND7<=P#9yI=;Tt58Tq;5*7J6BIoA*bN|0E@t<_qUwmGKXUj85$)kO9%zyv;!nA!U zM`ZQve@g;$>$~ShzuUz8Ro7mU=U7>`yuU{2QL`!5)Bmqz4|U&o^T0V~uf0W2Umgv} zK7KMc_;?AE$oI9!OYBzaml^H;ELlHEy)3uy#0Hy>t8QpkDObtXs~wwFf4TGb9!uAh zrL2FGcIP>jE%AErbKRYDDLVt_-E-INdaGV;xH!G^Y_HhibxJmJ({n{W?UziPB*K-N zmjc~apPHAFpOnRAWC7cCZ(?SEycXka)M?PJ`#qpt_s>3EtYK{9XWYbC#BH!$fjxWg zy<ond|Gjs4nt5KF6h7~Ou}9ekft<*iRjYQb-f8^TcBSVdd(%qWN^#eY%hUINXpjH+ zE6l#WZl+zW*<`kd&Ec0%ms)8o<ndwWcVe~Q8}rY?tDaL%Uw7$ZZLiEPFBA40RsZEx z{-vdUVVS_Er+RDqCkL(4|7pE-BbWW<&zI-x@Auum=gH9*o|=Mdul`M%a`65f-PIef zSYLSlazTMy)UoR}8omk7%p}kJ^y0p@PH)EhGds8Jo^z=-Dr3p=J(lGUw~2jPR`k2* z<)6%FZ+$a3m9%O%ch?tKMQGNq$QP_Rc)mq;1@px){uR4_UR@zR>skCWr{nv2ckObz zbwhBc!2fA`{=Vo{zjAH2SIttL^=f-ta_3oSmV}u9{&zm<EmzjLcL#1&^EmEFH~*jA z+8?2Q<b|*w``m~XQfs(>zApWlf4GW0C_qWVH1GX?^-QKSbIT9NtX*KUx!&RD)-J!S zrOR9NwS|pC!*uS&KQC<!QdvH6tyath<KSg6(-jSPzU(@uE31<9^3MF!dq0lEJaRec z{n+==+=c`L-Qy4E?w#Jpx!Tq+T3dO}N99A$+XdJ-k1q-{?FcqI`0G=X_v<M$f3DM# zi{H6_%1pgzwU(;hG`0Ve8uV&|tNY~YUuP7D7oQ0ZEDzr?aoN(R4E+11W~}>adgHN$ z>RM+ti7ny+wyk1<ruz$S9W+`H%G5UR$ju{#2Gu70h26P9_s^GTSup<iy5OQ<B)k0v z<xN3%1Mkc`v+|;@gG}<O&d|b?d!5hI&I$5|%)j$Vmfa}JS>x4C?kvfZ{__(X7j9x& za=cz^kxz}S>hJp{wVOWOxMQ?Qr+?E8mWafr%;p@eCh=W9_dPHE>0otZF4*>d>p7<! z+pIGu@>B8_#r6tnzhB$yIa59R+>5%@3%@S>+sI+?;?tQ0x7D+JGarhaTQ1ASBWkzh zTiDG@Z!Y9H{A-rpDs8rPcbdnHqi-YQSM7e(z9sV1>iP{;zBdJ0x;J)B>i)mv(WC=D z6I7?qHZn8O-n*zczoj>?{aj^o*@m~xKaFGd^q$L^xo_Lj%6Jnsm&8;V#ws~Mo?B|U zT7u`ypYqFwY^YRxp2>A4$8S=6L7j=Ap3H3j!n^OL>&^&RYTJJFS5I|ly3v<U+xK#n zom73jFkE+YaD;FD{z;yfiydFyn&i*5D6>Y!+E!KPCg01Q_e(eZfBtCKlU3%oP5joX zJYcyrm94X7;l3@tCd|J|eKQuV4LtYf!oqL5&F@zIv#B*^v3_$wewN0S-$8Y;vAf*s zqL=f#EEkd7-F)$3O_E|~-Ims$>)q7uNi^@2Twf$-$WofyWMFuOV^6((iL_PErnQf^ zel9T$DK<RAzAtp2YQdJhvnE{(ihDKZnr-aEL#^h84Vn2oYJ3N-%gQ)3t4x*mET}6N zdgHP~#@IMupGuA2pMauu(XNtvHvACEI(NQKIq>}M%bWh~(V6sxSN_iBpA1s3-DTZQ zSe+=$k}r4g6O?|#P#JE$SNutL{p5+KdmrC+=Wy^Bob_aHmR;Ym#oOOi+6tUbTpPdk z@*LrasdqS;@)@k=F1505O55cBOYe%pR*ty-fcEwU*96#BlvWki%wc*Ov%xm;!L7T> z>FuTaq-Q<(_-<MIofP?Sp3u%`rZ*KkUYu1k{KQr!pnUaM$%B<kq}SZcKJiF*nn6qb zu4#vk|9E)h-o?(l6`MAkpUhZv`t?S&qHh~#X&i_UX5GE;#-Al&rdyvYcdgx<Co<dp zzT~cCms`88Kl`L{U`2aT<?Wp1_ZE4!-pgJZRTZ}++#;1>j_?}cbF=!DS1*?hnJD&s zj(-DtVzbm%j(*9d8t#iluC|H&-gf8R!~d0!4fA{x!>TrAZn~6XEv!E6*QMLBYTQ@K zeZmC7@}6B<<F>w)=hfUN5~g||9<%)1S(LN%)ua9`)9S+)7}zKLZI*LaxOF%F#Fka< z)&Kupwx2dx`XQEb-g5fK7H-vgOSDox;$)w+JI~(d+P~OC^z>ZA7@1{xZZH-ZFNmIS z_{657Q;PrVIkR8;z6(5mU>lEx086QPxA(`76R%4BlTG;Wt<kYCz*BG8!_W5L9+dz7 zXZvrTJ@0$FOAT*Kw0M@kE?{6ka@g_a(FKQJetJIn`<idA@9S0TCx34_&YWq$8TUDM z+86amzWKgR%Y;{(+&_J^`sw5N<@Rm-%U?;bGfa0nurpbq#A#tA-!j>xf3|W5-lVc8 zY_G9daO>>XoO$O=t@d7d{Ydv}`a!YJOOLjHy7KtEcK_3P>q=cCYu6R_Ss$8hD>gSL zv}S6`-Zl64PMbPiYre^kJN3pl=Gz>vySnztn?7l6y$zgVvv2w-3P$tg2W9j%eZT+r z)S`@rz*~%)E5tV(*Eql3;COP&@>1Q%a}U^rFHB2(WqRw={+PhhV_yw#&pW;A+E<(S z?~AVOY!ceRwB<t6>X6xNk=0S!C1K?^lD<^7PPrSl@>jBEbJ$AXTiUMkv!~Sd*FQ^K z^LE$$prtY4Q-ZvHZoeAFzx(p#5VMa--}F>tnB8s$-(cMAcKqi>rZmg@?Ul_{d-sam zI(k%2&FXB>{k2zHwy<322}!nJZF4lr^Cs(6s}t2V-zPrb?d&i;VomF{+K1EIL_)b$ z4|rdW2{I{9nkTZp_T!?x1$V<WJ?2b3=^L$BKX;bk`KbHe9YJ6COxJF#RDKy5W%^;d z?9~ZJChm+2J^a~uRigZr1t%v>aXT_)mF|+0X(xY#KTIoaRNJvrV7+0CTH9x(9UoR4 z^0=tE)YNBp_W`EMvUBAdWh)~^8_)K*i!g50yH#vk_B*_kx%A?(w-HJPbGbI{?P>m2 z(UkAJX=zsdR29MLHa1)AH-t}DS=)GvN#15jTipTK7q@S+bY6RLeD{mZKSY1&SXiGI z&HEU0Y2%!C>z->?GA=vvb@O2p_swECA%0W$Soo|uUHjB|+WUl=h1)({{oHbpwc~J1 zd8m=?t=+1V*GAu*;n-*+6LaXs^1srjJens@VdTHpc!1xo=ii$8@DC3-CjD{?yZKSC zO=xa^q3!y^v6~hh>RPj6i{mw|mnp8b+>!2Ur8kAWwwA6GP`BGtdaYab?UT^WbzYa} zY&3ncx5rg9+1~uvtL+InCfx%6(%+mvc;jP%YsvhLPfp(R$-B4x$G?iNnYM8U^LxWT zeEw*4Z*SI~vij|hx8AsIH6t|S<-e1s1j}X5ys`cMv^law^VGA0YuZeo>-;tgylGNu z8@T`PM&37bLq6@duWWJuyYwcv{e-EPtKUEJ4~^NUsIt7!BBHvqE+zeEzVP*1^Xq=| zFZ;ESWjf<79$`j<>5S9FRHyfMi@7iwPyfIsr9Pei3J-t%*~rs*Z_Ie^e%JoPyx8l? zX*RaVm<QV&%2_vQ@9KDL9b0<w|NRgl&(2A2D_JxGSejL~xlC+d?|k;l`4qLeb!S8p zyAlIG8`b`sEB9xXUH#Sj_wOyAU%ye<LiBmYvhTM`3{ORv$0miSwY{wU{dkpWO-62h z)NKE?doSN=yq4%GKev9~;oC>u=7&{Q{QmrRyUO=Ri!ZgATTiyTJ^SkQZ6{}M(X?++ zG0l1Ty-R;{O271`HSgcAS=7nZQy%1M5Y-s>LSlaTIoED)p#`3~_H*(sZ+h|L{X2mf zJ%Qcd9om1S{AZmLW>sNzWKF)n`W2gsHEjRS&GlL~Bl?6xr>Upp^H{gUWA&SzD<?fH z(q`iFOxvM!;AYMClT-T~UVUdfus1SGf9KlgTP34brceH4IR7@k-Oar}1Q~uS*G@9X zzqpZeLa|_XD1)`&!krR@QCe;(wF^E>61#Uzkoj}x4%gnIPq$lCPino$7iw3UYp^~0 z>pxbp<!j<69bX)!;H7)__R@}X?dcMm>pNz&{1WBY*tq`eR!jN*v;L->oeQN>dfY|7 z{kG8YE<4LIp<&_qUYVDXOevi994mMaI_{JZ`6|M<b@qu!yZVT5hiiuz4Nl!-52@Pr zF}i5&g!vawXUlwe`D6Cd=L`$>@>q12OVut}WB6pjOqnTn<<>E2&RufGc;~#2S`V2k z_N`rAKW+7gD~r~*d^8I&jVV9ho_e&{&L{NcuGNJq2Y*{frZ{VrPk3bVE5$B+chByf z)AzZ#iXV$@^xx7`{d0X3|C^O<-t$wcw`^W|(`wU_&k82Tn`LD-Jvs0onZs%E*@@g1 zC6-bLnrA&%OuTz5X{znHMHbCnSEaMwZ&7{!&Hskn^1FxYmF9*Y6t$gqy3SF{WO4M| z13gEDb$-hEYXp8iD0k3D>8{)n!*}nwWTQR=q(|G_GTQXOrE1%>pr^UI`<RdN&YSyI z@5Z%r_pe`YP1$t2Tru16OY@=wzSCHZ4sVkSKh^VA_WJzbrd=nViaZf=J*TluVTq15 z+r40>oi@$~1P(}9&1$T-^+?Hn_eEt&U&``V+qWIiQJo}n$WLIKp6-?zbtf+rg=|Z8 zw>|XWg6Enk#&K7&*R5OQBlbx4X?d;UIo>-byJy5I>VJ%iQ_VD;CF7b=R@mrdet46Z zYI;HVk`9wS^XB^c&-f$}|65}J=_=!wI$lpBo-lPt@48?o^n*($BU`|>t^S|&dzJJ) zO(~X}9><>*y=vd2J-c^zi+zzSgWs0CZnvNr|Cmm)%@Ue+#2{`B>*j5bHYA)(RQl8+ znjw55DEeL@<8h(m*(s$NMHb3GV`g?Psc}ECD_H(R-VLjAgZnFbvbOO@Hojf-Zh^L3 z(1M$Se>56|pRVDRF*Ob9Tj@Jd<84ZPz3cS*UUMb{n6y8>=O(;{qhpQh0<+g9!O4ui zt2e6W{PX<X8L?yHyQ`H9KN|wgZYWmoQ9ox8!1zo_DAbQ@OLXv;GT8*@tnjQNl}qg& zbz5HL_E))0)y!u9zU1!9P&2lmzONcZJYD=Nr5hI9+c?om>BUYr7AcV~naz(rG)-Js zUjMv@Wz~82KK;8(ou+q(%w2I_#<I1!*LnNWjV!w6>o?@by?m)Nb=zi-N!16p&7c2m zQ_|GZb1Qv$PEJdieA&(Nvx=}ew?_Ws4cxP<r=0BiwkG%1la+mQ174qI<SPicA~os8 zuBs?i?fR|p9w||WPO7OEuiy4slkwn@m^EA%Wz5Vz)vw&%zIbQN>8W3~neFd8@?iyQ z6u<tB!q?}XUc1Z{dUfkER{Mp;t=mEmZ!N5^TK)9a<Cin;%lV~hxZbnxc&%FZU*+-) z_GOJ}`%jsydGA*4*0Xr3x69eLRUJR_MW+ePwAZn}XIJd~u<>HEqhZ>+vz2?5Vl7|3 z?|Sv{ciyRY+3VQ$)tj(NwuyMyD2f~peVWdBOj32r*>y@%hYSu!aUAyP@b`LhTP%3D z7304bVynZRwy$bla&l(EbhkL^xRP4!ciI7sZy(m?b0wKdo8S4~w)NikXHQOvZ0$+% z`Sf%{T5_)c%O&rG_N>3TGN(0U)84Bq>n=9V|M<~uM(CHk8yUW{H)QXqcbvfdu-jsP z+Y8~cU6DVZdbgEX-*xwYIQxIJ$=lb99Ud$Eiqms{(Ei(Io!TV!6yDQcgBPcGe`OBb zdG}7mmsHnmr~lT=+ZNdDSZ}fQcILH*-_k5MPB|4YxBc~j#qGZ8s?$yx9s1JnWgp9t zH&Z@;5LMVUcjul8^|p<r_C2LCm(L2-FZncIG`X<bbK|!?f2WB4^i=(LciybjQdxoi zDQ}kF-T&F^-TI;_btl%uOks|isQfc^uOH*e>b13bmJd=(cJ9uu)W3M{I+OCs<!kuj zIeO}z*9U%^C&l7$FXW>oGe39Iku&qHB=2^|C`P0`{X0jNS8hLN#D{GUwg$d+?Y|Y- zxHZ21W5)K&GtJIlV~F)vt2rxL<G)+VBVFP8d$V~zel5CVekGda=Bp_0-IqJx#YW1y zT<Y%q&XK7-v1~!mT@MfT<y@Ojd&~}Tko$F_dg)&IvPJ!Aa&eBIKDM^q`1{?n?4Dwo zUBKrHk$ZKnoz(8UyhS5_?UfaEm9zfN;ocd0`@6(n%TFfNwKbPwRf|mRy=HD(y5Ykr zw)*oS#~0+<Oquh`BKORqM{{B}SxoH{n`2Ycv%CKP%lJFSc@>Zv-EjKHhg_=lMuui6 zM}f?Z+})>bE_C*<=wIeVKQ;C-Br-97W11~#ee+PGiInBWX6c{beK$oMRobn3cc%o$ zr41*OZ2fJkes7!UJKcV>>+YiyLQma3en0i0{nO9Szn%X5?Q?#av0Li<x8LgS`?*Q7 z-#)o=&f{-&zyC*OXK(%Xtp07v<DLI5Sf#98sIx1g?*6IwU%nmxUB6vKG$NYgd-D9K z`|F>wT#>EVG*?T0$G7*lXY)Sy`uO(An)S=y-MZs^bM5I>D_4L0sd`br`l#?bI}JC1 z<<jo04QBH0U$oWF32i+UefRXEo97}H_^Teft^Kp`hSjx`OXh5!?5S4D>o9#=U3mT8 ztG63G9o`73{F$O2I(h%T{QG84i$2}9&zZDj&+UKr4n(tBegFUe*1zq4{~eikPy6lP zGN!d93)`lBRQUO}r}5pHd&i=J6A$_S^=-@V(*IqfR3=}XFo#PqZ~22zlZC|}1moqm zc)IeRKDf$YOM|WQd_#l%$0~|+ZzZ<QULbs9E>nG%Lg3>0AHsCkudrUV{LFEaSBHIX zcQ2du+bs9)ufE@}-rRj*{$=~#G;Pzv|J>wWoNG?o9P;YSEyu$*1sNK*3hd53%idkO zxH?8$=&8gii76*S`hBN#^)j|}zEKx4H2rrsnd#^@RUL7rd;JGiSar|6FZk@t`&^ci ztJmeixV9F&$g20-#299&VV6}BX7<g%&^20r?vzK_RyX%<i9Qf|PU4)*&C)ivC+2KZ zw%Hxt{L4YU@oV5x?JId(f~$6KQO-6rw!bgR*qaepR-73j5<RmdyhO@;uETTr@LK(2 zR@y=bzPkx5sDG8zykgVSC0`9T9GYyfD_-?VGTTH>hPl4$0zL@V`<(NC-r{JWC3M^) z^lW(KPi@5&*1~o5tfjsu#ZK;&Z@Bw&$!?C>va3Xb*N2==PT@;WyzeKfHZ|zh5)R4d zGRl^LlE-ET{T6+BI%WT|y>$~y50}LU<z3PG=ixP*kL_}6d2sEc6Bp+OxK?cFcU2Zq zS2@y=zw{z|zS-P}xKqNv73x#wOkek=P5W|vXrqWu^8EJ)?`LrRGU__+_ig^S_^FJ6 z0#79-6iLis*GgpA@M+3s;V2cRH__tT!>5NT@Ex-JTJmJ|^sD)i{o7ufEP536^jMvk z^R4pWqjF(WZ+`otb|C)H_7&kT#Tu<7;;i|Xxrk3SJ^I$AGCx-HgZJ8d!g<!A^(*4M zq;#jae(XD-Yy4J4Os(UO#lg?52Q}NCao^%BvGU?)I9yujz0uE~vsBeTuXK<4+ixje zt0e>FzE7CFQO{NGfb8nkimIJo{{GvNVsU8uD=VK>8-A>r<#kH*$lNJUyA)%1BibM2 zuj}WW@@DlWKV!xnUQ<-!vYbs>Sax6evwdRy((KYkr(n}tI%UaSQ|Hdw9U2*NxGRvU zY)+5fp`t6BH=n<;(Dn4mi}#|OT>4(m@lEq76t+_^k4ur{+I{?lc|rD^1j{dSho77} zpnKo;{&y$sI~NzM^}Hg{@}Y9g>Y2AD8JF*JIxQRKYOC2-wNCTm+|;7!+Q)ymSbsBk zqb5;y$fDlYw5sY7w{4zl!PezMovY9FaWaL?EGrV*)!xuGTmG5R2fMO8c{bIPKk-$q zpE#{7E}~tdv!-oQM^h-j_^$YVUl!)l*g4v%H>)4JZu)SC-<wO}Ma1h<Co&zwO9C{T zXIwIvBv~$3nXmHMZuW)Z=?<yZ654N$Y}Ng)bcpfUiiy+fr|mex=dr&~HhI0voF|9( zo;Ok1b<K57T16z|r3K8|pS}u-FFF5qd1&k_@7t*ddHY)({5@lKaY~iW=)SBhKVuok zp>M`+-515gx|dB?@tbod>BY4<)<JCh&VR`)dm59(y4L&zi`BQllg5clrpD@s+F!~o zD9xHF<+?7$deX#Csq^YL>3HrnHfmV1wSJ21vn$KoESWQ(XWZww{CHncR`EO${rlk^ zjbFK#bXsSej_Ej<x<pOu#Ek`}7nIcxznESUcULyL!1%fK#K&=Ac@Oq#{o8xUb$w0_ z$McJh6TUj~pI2ym@U6nDH6(2Q;j0geFUN)KxtLZfrT(EVD0iyfxg8t0e$-E`I$afT z>&Mh1dE0_w*J-bsuJB|2oUq`}T}%_E`yP_3p1Jp;q9k{XV|T0j%00)OS3k&^c+kPF zpuF!q!=h~C=ZyxBRvw5KU$$@EU-s+b?_^TGAMf06%lSG*H=y*G)bYMIS1Us0o(mcN z$TV@)jxS6;c!6uaucgVi?(KqFpL2J2)oXPe`pVI#A>G09Ehj2FM)RVg^wOVi`4ao; zi-f#Zyg7IFh1ipSAsdvZ&EE4-E6RD#vh7pOHQ)D3%uU+z>E_31m4o+AIxcc-yKejN z?~Ip<-4DBTOi$`4J6`VG;^w^gqw4nz^<!I>mit9XN{eq!;w*1@ewpF5;k^3WT~6L{ zKhwGExx6-(e+p<1+qutyDZp^%#+LUJ_}V`IO}Vgi>*qz4(@Qt*eb-zmCDdg&r}LJN z>hlvH5}wbz;wLpfS?E$rL`uPAliHV4O-`<y(_*kmWQlmmLo=4>d(D6TNPDcZ)av+b zeSVhhtsQo9JHM}-AHlV+dyd?l<z|mxTw9QIM%nGlA{&YN*3j883wJY{F(161-=$dO zZgM2L{8jR~kJok{{r>J~$^WhYiV{2<dL~N#S(_GjGUiD7&BWLT2R3OW>)K^KcK*Z{ zd3fpho$G!q;oWMVUH<t(Q0w-+OK<&ozpL-{O0^|&`Fk2PXE7SAm4AHh&84e$%P#LT zGP|eSU8q!<7I&X(hfQF;)rIw2!y>uYJYbu-%U_nKi&;GEgL>T`+3X99n@gvi4_>&t zWU8Uf+o^vWwR-(ey%tov%5atU<Kg!fX~lDLctiJxsoeWMZ`<{gf4A1Te+zrtws?Ep zZ}C@(&o+rXwJwdSVo|Cwah5Ju^u8M4%D7FlE#7y+^oQli>^@pg{!Y2GidVw9Vp_GM z>htT?uP=Jtd>VS;e*G_T>i}Oxa3f{9;!<JZ?O$zpj!QF|Zr>ZhvzL*{$Z~q3pqR+^ z2~j+3vW$k?r<e2WU}Q9&e$igsVtPj<Pb$Bmf`LMiewwbKt^t>^k@@t-O*~55<*Il% z*rtDElTxcUF)~7)i`p7-w(qeS&%W=PUzjd>D1A*<II%EexkG;UxwS76Z6e<<ZBFv9 z{X0oW^W;30&C`_(l1@Le|2c8f&%8Z_Up}j`PrjUVI_ciM%!lT?_RX9hf97(r!M)q6 z#}eYqia%Xro+W%E_2jdszn<URDKMw|UlG^OGxg@@mL9cS;(DT_e(CR`pRb>m2X8tm z(6MnsZE0R~CsU>S;x!>954HYZ_x4DCR$=Mb;j`6pzv`{G8CO4R?XTCZ62Iogc>BSO z!bR((1eu@T&-<9}tDs?it@nG`=O&G5Uy{;ltvAabVcg|kc5dgKnvbqF4N1EHH{Xwt zDifP=wCR#webwQ4f4&~AF&CRAbaub3%279i_iV`<UWirxyZt9|-<JxZi$cOeftz*+ z_-dH#JQUJlCVoF$>hAF$+_G=e9txef{>-OT>vxCm!v|)?N5UtG73S6@`~Q5ir^4y3 zl-j0O^{Ssu;|~AZ@x;hSadUCQO_9i-N2Y|l5n47SBv)NG^2z0T<8w#6H#KIt7F&v* z^-xMs+c&i}UUSlp0+q#kRMS;=olgmU_TtlLHKnp&KPPB38KnFuYh6D}_Q21kUir_d zR}Y_vjZ58oW5L$9E0)e$wI!J2px7$+F2+iSZp%C&i<L*DZoKvt53tl<xw_rdMmJ__ z$xfBU*4x#?7R}NLUpwhrm`Htl=qC0p62JHwMQ*5g#!P0(z3$Obo2Ng8P4gV5qIR%T zgW}`nev9PU$5VvM+BbaT;Y#7xJj7LaW?QMo(XYI5ul6rnc|dXvSLUjxwJu*RZ%?^0 zGctzdsZGJb{ia(^y%YMV!?A2#TTJ+rwAZdDw7WHqua1cq?N}ER-{g}UZCQS!eyTd_ z^R{B<1)?t6-$K9b2@YIf&Y=79-1_PawtK6ryfa_vvoE-J?WSbEPYd%UgAMOie!sSK z<=v9>thClh@y-R-A*Y{DeE39BUj4z{wT~|d`>o5Z_0S7VxEh<2w|n;4T<tY!b-Dk! zcD>oMQMpwx+ib<!RjXUQr`h`bUbpXJTy%B)kJ6~MRh#Z@@Y`Fm*U{eg;OmXgx2^uk zzI5W7mG%>hwN;eaML0fRY1VQ%wDIg_4c@~qp4lo(PhY)4G4kh%Ws<vWx3&j=NLYNF zdCC#@B_0(5pV==hQVG`gXXLu_(>KrGBti8PyADg%O!b|H4?^cGwCCDhT6(Iws;>Xp z^m-0%R^Ix{euDeb^IojDZkhXS0$WUX5IeWiwu`;jEF{<7tE*0^>k@k$xZ>MWcTID) zJ%ZP7Yi^fkdmi}S(Nb<t{r>6%H|gIwORg=yvAaE9`m$EX^Ic0EwiKWCeKtj4TS|RO z-`vXiM{lrO%608{oFpk4Sbkq-<Gb&xIxdQx+J0}%sus2Kta>fx=@neFHnzPDKO)t{ z{^MF-+ir!c>S^o$DMh`1JcXgu-Ig;X@|M+=^H~MbiY5Q~^me(tom^Y<HeY?o{G2D- zMIW+ivM=|)ELNU*d)_t8jvtF1UCOt+p4IdFFaOFiU6Au@5>vFD%FAC3mx8YfC&+4? ze$G0vW74(0%~D^QZp69Q$G?d?clden%8c!An9u88Pdz)U=l9}X2HqW?C7Let^VD@7 zJA2{qRX-=2ssg)>SF~dNw%*wlB{8e*Yf5zaz4bh@sn7cEWSCs8|G}~@WJ>q<w_GLs zbJ(g6KRHl0pGW3yyYfw4|J8AkHg}JmeziVxf^^t+<DQT$VH#(I&)vH;@70!i?K%DT zj%|K4#ZL25$%EGd+fN2^H<hZ&_D5NG9JcbgbIo1e;mV9}fy$j*{;g#!wCDf!-avj| z=9{DE78uN0q$HSg+2Q@S`POAuE?*b7<vB2?)qGY-gnV6LU~@{y9}8AlyXGZ(E(Fcn z-}2(pUVX;7Q}{YkmbJ8hRlm-*EtO|-%_OyF%sIc;zgnPw#O|G%oL$9ocGo6{UYSRM zY4)r2-JSRU`67Qa*&z>70TkZm72bZem4}Iu(PaCLHl9_2)33Mj2u+V&E2_MG`wSjO z#_3LH1ckP9&EioJoBm@akI;694Lse9)Acs+a8JK&FRnM8WfM=hngOUzu(Q*5%g-yZ zvC&V{HPAIsFg7s)3G0Ka3I$^mi|vh@cqX$mnu2Dt)aotFQPwOhjr8un1F9#&fAIGx zbyhJoTZ-gzeGx0kcjbRwddIt2Y5BjuU5hjV<<93^N=odJS8<&vAAjrV>m;$*e`kc= z3OR>q>gUIw>W)A4_4%jAr$0Sh9NQCkvwHWQH>ZzkFz4-TIAy7)fBSv-+O=12&AxrK z{+RZ?4B1WB*6nGDc(=W1eqQ~aKf9K!n6uTjAo=&2ulvOK+C`2;?mYGM+PB?zb9O8` za+`IH`?}cKwjx=v_oQmN@5c+@zd6++L0)LF@SV`bN)EHP8~<Fv88NMGmtyYydAVJz z`vM}=-9I+pblQG0WzOxRDwAii#@yEZx9Dzx>2=o~^*72UywHljFv)(uPP{m)<<F<{ z-%VO#qZ2Rod~K1{_UHSj-Jj-vcmAK~8GBiouYP~~ZP6ZMR|$)$Tb)IC3O)##-E0!* zm$$F^BQ$OPKfOctf<8?xo<&-bEuAO5W<M+7ID7C#Nz)O=STn8oko1-cmav<p5xf82 ztN8!@g2@Dt9TgGvQ*wLm9c$hFJlyT(n>{DzYG3r@TlZphUcN^8%F6X?553p^Wu|HS zMSV%{LPw44<Ua>$jD2rDHg8GPc;DrmvA$#4KIY_GR-z@+cddQ*d$jJJT{?A6UG7Hf zlZ(t<%kM5)b2Q_L#HuMf!h3Rd8_k<vn6XjHr25qJb>GXbY;2ddU0YQD{hO@zW9!|9 z`mTRZ@E+pxJF;$ekkI6ZYz9|DowI))-Nrk;caeAL$LNroYRA6s-lY8^u&h;Q6_3+R zzSG;>{G*KSZjs&Snz?db{H(q08rx6K;9x%9Zqqrlu#dOKssBO#+1WD#3^YFQei1#n zdh_%7IgV^kC$qejneFTr)T<EDqg^kl<RciOHHqum>7ZvXrYG+V5m}*k@ARUJ5AB%l zg=)WvS>M4HT({S;wquEaeaN95OT2U~vL5neK8TyYVcCKM$Ca}^Z0{T}*tG1>M~j&j z;h)kpFPs%wpOQX%e!Ec6fzXhnXKYgM&eGw$$?LOD)w_0{j;Gk6j+H5^q<$5=F#i== zS6|I9+^Z?EbB$<a_Nmad#*Pa`r~W<c+3l2cX7-iUdK<l}s`jt<xxd6jPN(XfaqL0= z%4X?xSr#cCkr{WDgStJegN>HHF6i=!$+NXsdVE<-w#~+7OJn)ZH5pgis%P(dy6cw? zd))3!tqpBF%jBzHXYcR3du!_bw!hP|*4}c-728=q*IM^d-%|Ehk!zbT+V65O?J^9Q zZMoAh!oT>}oUV<(H40XI-x%t&`+MHA(2V8MF+$y27k-H<2)Z@bf6*g@d3{S|)<>C6 zDq--Ra4yGR+kWYD!y`QDTN`KGe4djV(#S2*{w099y8O{&F1yOLmpA?m__fdLs;bos z-tv#{^V@a>sMmj1OpysWHpl64@AdP`XFCVA#@u>g5OwoPsPWvVj}%rhO>wUH{^<CQ z7q;AP`4?=NFQg<Nj-7vLQ;E64#08a-yaktXC%llG)hMkjHN~ZQ=}&Fey5+I%QH8Ph zE}s(Y$yl|pFY7zA;;Zr~Z7uV|hioKy4^)dfN9o;56aDqzmG_?G^+k=9hh{naG)k9^ zsOEZSb~}8c!`BrB4%KV_wHb-KPUhE4-m-C9w9NbmRw}19Zd;xwB_<_*{q;ff8bhi7 z?(-DZEkB_=X`xPxdywPOm5=4KHYqwBNXzPMJ@Qj#!Bg*vjqLADmR<~dYaqPl_<HtQ z`PmQFT=*BBBDSZqai!M#y<c?eZTCLDZ8fjr`k6b{56}F$V}3!HKl*o7(H6%bvy1nB zEBq3Eck0FIoo^N|b9w#a!_$=d!r3Vw81Brsn0eZ)`HNNd|MP#G&))jr+J5R}rqA`Y z&-c7%%9F2p^<h)5Qn|U=q&XS^N$*eX5>B1VBj!4{DbQNm>7{J2?W+w{#v2Tm-hTG2 zzF6MFeu_=7P|7ER>w9)vt~lqQzLjtJj5pTC;%-iHHWk$}MHfxFr^KA=jFP(?@+$Y+ zhnEi%p3YI$i+jKP)w~<qDpeHjw3<sQzO=F`b7$BS@iwIK0Au?e^$mwR_uSVyJ@b8$ zyO-9{hrIjm$A~4nzjUpYH*)qheHo^HS!rFJVtjq4>g5-S7xoCM-w=p;|9jS~Q_JV} zY+TUeA3MA2`YuI*=DTlHmfg61@n`eq<J(Hb*NF?w4C`}xXMB0ieBO{YyL`@m>&gdP zIy=g$N(`PvCx^adeV2XUzcd%)rRKm1)pd6B*F2Y3h%OG=Bwy)Jx85{=_pH9ZGd9ZS zUJiCoj!&y^sdt~9w9)66n8UoShZZpT%r(elh|zr=>>!=Kt0_No&8w@%<~<voWsX}{ zADOw&i|u3YEQ8gd9Oa5@&U@X_5J`CNx36lU;B(XE>_zYY_$PjfxAuCxJ2Uz53BL!s zwXSE|Yg_(PG?LG~C;MjUPlMgA=Ox*U=JD~`_f1~*a>~jX_S>&z?povaJx%UjUvSp@ z%CKi{&a+<6uvvD^Z@!u)|EXCTfn^ph`~SClcI@2K^{HO%PuIWPPd`@Zr06h*@i3=4 ziy0cvInl7}{;EFXl^x$N+gk{{ZZ|%(b4OD!=byr}r@GWm9`CLD^)P-;!_PUOs$OLJ z#e<TdzL`04-)ydwXW!u+ALoU?V7^um&#;)E(TK4~dP%+`Us&}N?`H<fYwTlIb-8v0 z-R^C>Xm(WV+P=Wk^SfhQeogKU?=COoE&TaQS@(}^?Z3@`z83#{8ot$Ir(5>bPdoL^ zcY5Vcn;n<@<@EE<@#TtBgbtnRpZ)23{U28j@m7P(z~5i~&fM4DUtj+(nX}H+OZ5oD zx7`B2rz!Z{3smF|`89+0pS}H*-RV8@=4*4>ZnfTty`_6;)tS{le=0vP-x|uX*SzPR z!3(EACxs{1dFq$BXdjuDdAhpOmbJz5PfE%b+r{|@ye9itJ*>HtGJ#Pgq2cx)`_sDf z(>Ur|KOS&gG5?E-_ow{%r{|wumAv8fe-G8ftyMph4a3&Dx%~Kh|LOeG`T8#|cZ90s zESTw@df1|NeNGko8#l$Ju797%K8wp-H!G!PR{CUj*D0*?o=&|Q$mr>$5p-n+<Hj%t z2j)5QGbaSDKewxqd+w6e!gi~L_kD@adoD3$+UjjZQx4Y)YifLPRoNXNAr-x4AE&0u zbiSbZOOt)JUfyNCKBe}(^vRz$ZH}{S;Apkx;heCfZ(q>gCmO3~UpgrwWN!ZQ`U<9k zsRiQvSw(rz#kf;SLR{6dMVR(1yr59fx@T#<-<0KB9ja5OM*W?-G;IGu?}=YCuC96h zU<qprH~+=d>_dM=#p>4@)ZaSi{(yb4Z&>1`$#egoIxn?zh16C<ukFeun~E71axl$g zS2aF!^<lU7&Q&Iiw-!Cv<#>Z(ZHB3UkNXvgG9G6ayCd!bJl%U*BQEPK;OI{L)izbg z+^{V5&NYEp>He+Csj+)jB+g`tKd_*nV_EvfMTOmlTR)ml=c#fsQ=i0LFO$Q(%6aD$ zQB$ja_rI*qZq2P=;$oCo!oGQqn$77<zMieJ4mEAY`+E}pq_W>?Us2Ij$n2uL@x#~C z>zDP{Yrd28-YK~ygSFUQS;}^SPV`-l?~Kp%Hd$?DTPU4$c*e^cbF|jls6Jk{_iN-H z^ZD!D?1c4FGY@WM+ZK8_#m8ipK}-F~o}FrsT`sphJLk)5x^}ym;ED!LW9fG?ymQtr zpXD4O_T*$IU!UL3X>-atv^>_nI)C$^X{BlNmI^m+3#Mhhdp$O1J>K=o(Q3QZD)z0v zFR03<yy-8_kPXX!#BtVpU6a~#U*1Q)Yvw;IP*MwJzGo7ZwZih!C2@w8W>@oA)J#>) z>&+xSUvQpUdDQu}UQbtSowZfSX%*3)c7LC<5=(Bc<0~|b)Cqcg=Ewx`p4PYF@x9mo z-m5jZW1C~T-iu{dzMXge<I81XJJx8-3|{u>YQG+5q0rroH!>5hJ5O11=7PH9xuZJD zD=#V=HYV{dV4q*~ywllRPDIEkTI9`6=Kd+0a{}timg~foD$Vlix;=e)-X{6pRbO4& z3|rL~eKb9xt#&cz;w=l)j+G&`*FLvoKK{$`+{&WmVcm6$zzIvex7}Olr5Uk%SBX-$ z1!w&e?M2$VFI?G_^x;C&k<&UAS3S=CR5a)K>KQacYuPhV+5Y`p^Y(77e0DRP;oZZz z23#fY@A^;hs;pnKU9m@4;AG^(Q#0$C)Q)~E>s-BNkCf~xgFB6#=PtiGwN!dyggH;u z=SLFJtJg|eb3MLsYjRlJiF@j@fB#LMc(n8OyyuIKEEd<4)XWc4mQ_2JQV{ptqlhu9 z=yN{*0>-9Q7gt{`<nY~kH~;0L53B!bKV5FOWA(S`Yjup7dplWXGuLn1Wy-#kW!Z(L z$LIcJxmWhhTJE7!j9%^Zm2a;ref_WWFQI5bYh3I)nJSTxpXF<N`QHDSWcOsnp$jY3 zUoX6)t9AX*ntu~K^q>3=GHSUHF8lK4vbq->&(D1bJAZwVa^(cm!zwFzzwJ84r^fWh zKrC%#lECx3ihf%!EctL@^SKWfr3~x$et)?k|5o~=l}w>V_ab>$JTZT~eOEJAkm|bj zLXHd1OgLIZMVHyEI~~|B%9I``s@xZ};n0Gtz|M_PEq~W49XxP1w7082@j>|UFNsFo zxlXDZWj>kuN?Gh({Wej2kBda~6_pRi!>_N-_gxfUJ(cm$SsiQUld<RJR<Dzrw0ow> ziu!_AE6)de-;uRQ;LxA4_UL@pehb$_A*&STU7Phg|Fz|jR|n%9($^Y_I<GZbePmY` zXVIxGC(2!)pFGiheZy4q;%$?YJzwscb?)z;WzC0n@MN78H)pkK{o4FO=7i;}*xR*P ztAxAOKk~S17|8VV%x2${KMovNQQ6+Pao<tNt_?ZgYU<Y<tL!|&E?8@x&Tnjd<p1NK z-?uBD9O2Ro3^%iKy0>|kbCBVizBOq}DkSEKzPDQI-4oO5-@4%BkCy6UnMX%oO_5u; za<SHx6?;#93(&eE6(rN6@W~|lxOKF#?iv<B-J8qbE&HUkY0BYX&+1#|zYEvsZK+tw z%D8a9W$Z;QnVB_x^;Ikrr%0VWef9DN=2*V;l9`9J=66q-xwEJ2iP5grR|NkaS#n~X zVw|as$*KU8=L|CZ{nc(#x9^nnv4$tczrRp8@5hTZbNTBM>UY*TyTAV)H}%eq=~GHX zf2zn|x*PfVBxgV*BRf+_Nxnw$aVd4F9jjJ-2uZg8ZQ~spakGBfPDb~7hdbYno{23F zx*J-zu}|iMAG^qgn;+_A*4?*0ShC$JBJs2J`X<{?Li;^KHfuLeer;?!fBNUEi_c!T zYX418V)CEK@qJsT^L<dtytaJH?}OLVUYfPWtmb)rR<qvW`)lUcYq(owuf0opzU&g? z%7a_YO8=eP-}3eGv$K1hZByD?v~M}oms{PPap!iS&%3wU$wlw$Ow{yGtbFtR-PDCU z->*5jxHtK+iMAeN@$r<y4R;sGtt<U8Tg|<vY)w0#<1XI3HC~cVeMb)_Z^^F<%-Lmm zt){CY@n3kp@|@md0^67Wj=!w_HR@;gVUM{yKmNFit_+|4=KHgdh>cJGeY$^m>Dzm= z<oufJ`Fi+ru4G^NBXzMPc=pW|hRfp@A6Htut|mMs<jtO#mD&<(wWoDQ9?>=3_oa;W zcx9-;mRqwlDi-<lx%%e_3ZK|nrRs6~WawFgwC{&YKWsO*2rKU1{7k)9_ORj0JZ?WN zyEX6XX1;%~r?*b*?kx9B=XQjeo{OLHY}xUzZ6yr69t!p0RjQvJJilyi?jbd6KeNe^ zlU*M+eO&3n^6gllR%-GV_2ggQk3BP;@m1N@Zg#c$t#5bJ%dMB(iJZCe+;YX2kJ+>Z z{@jYoeJpJezBNpn+n`VO{<~tkWvb`nKOA2AtMC5L)*anxz9r2@DRZq?$cRNfEBL89 zt>ZtprQ5O&$(z=SGo>Htu$Ese&DzYCd)$~iL(Ee~^6y*y|Li~C$zB4r(u5h!rwj5) zsn#2s8=4|F)YeAs>{Bu4Ir~@iE3@uvyM|*dY<t+|=-SMDxS;yf+auCBPwsD5nWPlz zzL?#Nt#_sKk`u?Hx7Ng;S@e2-<fPaj9j)n4A4k`I@c#RE>z^<C{`@$qcWi}FQ|vwY z(?>NP|0yb5HD$}5_50(uZVP*za8J*yKK6F&wT&5XUpr5K^)+h!=iBn{_v=||=I5sN zq||5q-4V`pKa3%D`6~PR<NsgJ?!A8O<J(6$86o_+avRrO`?@mI|Mu_bW!ly3T;CJ= zPIAA}3rt;b_PF4Gwa(2))}Fj}jqj@tm)OheGkTx)+6qUT8_YaVxqC*Ak<x>}+u!y- zyjJ$PzPZ(Zg=1TM?d1u7e%Ainrx9Kh@lR6iq}Gn7w;wf!#)<FwU;Q)pr`4Ovyzs{% zJ()Wz)|Ncw68q(`<+kO*vs$eC6-$;mS8v?7^5&fd&Al^n8@C%OmYtQAlE`&sUi8=M z)~t%gN`~T!OFEA>7tB2vxlU@E)SO+(e3Eb1&TM|SYworBO4W#K$CSR++&Ml=ZR5d+ z6V6f0uOs>%Tojeznqu-xyKA0Wzyr;0|F}boDq<Y-IoeibY@WOB-NcZMlDf|CayN_5 z*e})OV0z)Ch{3bwcWp-l=Hz(_7N{gC@SikVp}wSXcWQq@`A@ct6OQ~c#+FaLzn+;e z)r{}!@hydZp=-EGzt;P(7WTeONcHa%<gwscb@7_)@{`XQ=7wh3ZqRI*eIfUa;JXc{ z9AAWQ-Yr$g`qs;GMh;VE^S6W6r!RSyE8ny*{nh(4MW?mr_jRR-#cLT{D<2pB=IGYH zH*KB7gsW$p_8YA(NxhchlW(kkZrj2B_&p{beXEWfaDA+1Q_5;9<W{d+Z#@0UP1VNR zDfa|I<o4X~_blk*+mT(l`td5)u&nI4`!+pINI$mjDa!)+jeN%#H#E*@ViOAry7P=# zJxFn?Sf{v!bkQAFu3i3e+CpJ|n??U|eDD5fT6gB!**PBPT7?y7KjtWnpR%oIcW&RJ z%_r=Gg<Q&XuUR#{b!87tUvomivARA;W!m4`qX#maUv|&?rc(a=!Q4v*CxW-hE&Lp; zt-M8{iSd2&Zp-7@eoN1kMFa<PX1|sz*DF7ewaNHJdB*cfTb5PlPo-`*T`-?l<20M3 z;4jJZuANbfr|z2F;52#e9^0(tcS=vi1vk6yF7fMIqc=-O?9oh4mdWg$3iFH1-8n6f z)=zxY!}&)2OzZngR^KPzJ7vPp$B?znE;sBI$BRnW$s(s0thti1GCixGPvhh|;dgGf zejin<`K?y%)>I7nF>iJKERn~5FAD#eE1fo}On;@xr3pLKmmQ9pe@V^3qki|PzmfHP z#m63a+T<zvgx~90#+vWmX!mNRLT!Im^p4wa%Vx9HbKNRC!yWs1+rG@iK>HWE&;N<D zH~r7I`RQ|&vHvco{?6J}AEn>6<nj8>wOV=klevq&^NGUwO6&ZsL%wir|LVn6^!k!# ztX(dLug2G1+a_-7^H6npC9AZ>c<ua>?dne~R|veFc4wWtsrf3a?X{aOuRQ$Z>z3Pv zS{e2heH`VPx0CDrI&Mhn2)^^XrdRR)V(Qzu&a-bAy{Wc}(*LZzr?>bukMHvSQ+d_* zGR4m5pKY?VJ<smGR(~Sz&);D-%bw_Z{q=mT>>T;Z^WsyNz3%I*r=ELdt5st$gGch% zj*0OS%n_$Q8#=tY%^uBjJn-%{Ll)UouU9MfX86TsvVNKNB8&UVm3l{!&5xZ*cKDr{ z_~qG(br0emO<1A6?c0{^{Y7ezw|-vJ<II=F6gfTMTrTU6FZ0%0T};kMeQCgB5^s6Z zbFy=hU5@oRn^!CT*nHP$NiykPl+!8X+nQ6Xb11bfOGdW!%c3>>=Wotgkul}p?a~kG zrmG7SU*4WG{pHP+w=eIdILBlhthW%~X1B@L;Pz&(teU>(sq3CSOmPYhTkiY!&->4X z8kOOOdp4%KeM&3JdNG5YG5zSiymrYo)mC28>bh6&Wz7@`xND=bbK-xl#FP2k(xqxY zy;c&iD=<IXIQQ*3r=V+#AGU6l+#IW}B0c}5#<^E|2UpLs+;;crsXmjHwIwccXK(JT zZ|)A`VJ}d>{c7=H%b2eg+2;+D7EKitzB|p0;hyl-Z5!V@9lyJ8eTkT}Q{nfU${q_| z1>Q_O{-|(@Ouye73(<M~)7bB`*_D3sTAU`p=XbX2w)#b9`Kfi`DRz@0=NzA5S0{32 z=?!6<ckVOu<{7d*s;!#v>fGhZJE5#66hCn!*dFyu`W%_`-%w>)ki6<o+ZMTl>JvZv zM{leMy(+4<zT#F`(N3i!Wf`F_>cx-Gj=A~SGc{wwt}?e8JK2iop=F7?)0K1Q#NO2U z^|ig8@zBe!Dd4JY`k&K08uh4i!)qgV=c$_Wy!|ZtnK^v*cjg@hf(p_Ku?*#oT>a_l zp<RFKg*`<yy*_U!7uMl<f5t=P=<$b&d;e@+;rgsTi?fQ;u5-q;@B2S@$A3N_|K<1d z>rYRIZ_dzm;>oJKJH1`#)QzWtO#uh>*WZ@+*ZewrO4{_G`n}#S*GviXei{64;?KQx zl`|fE(%Qf8&(B}c(|#8?dbG~I%EkTlSJD$<mW2$9PybfSdCc@yIPB)y^?Liexy(K# ze~tV0C^&GvN1@jKK-Z4e<eF8t{(j<`eyux5$#VJ6rJs!^@@VBT%Pel5$MU*B<j>R9 zPnB|o^jdRz(i~&UZ-uDTudI_5e(=c5OtCrcT8DrL=gDmWyY<Z;c!_pb1Qq9ByAxhh zoaXu?Yu49QzUF$Yx;*|zol||cZaJdAqdMmLd;^C~+ipF7t`HydG0WEXy7u#_SrdX% zXO-RJ`hAA4OwTIxvga-LvK4A~c1)={bnB35Q|y~tDpRj+lKL~T$H49x2S>fq%Nsng zA?wp}pJ^SxC6uIQ#JV>xK0IJS+Y-<7ueF~CI7(IrYp(t-Rw!RCw?~uh&ULwOp<Qj| zfA-W|YqL^I3#xdvk$YC!-UC~t&Tv}EzMts7hB4gFwfFaRq1_2H=N-8l^<u&wpYN+J znr=+ou_jPCEqX)E;i<2dG~E2aXcZxPuwL|S{hb{j+}7VcP+|JRsZ!PR99N(F7p>(9 z0yAX8fBscnrQU6HpZR1)%v{ynRQClZ=9cQ@e?9kZOJk)M!$G?}w(FXNJ^w%R@-{zo z+0ki^Pu!DcGmZbcafg?N?u^rz{_#?U;G`@*!~387zfC`#wrSOjH^LpSyEM-1UgT9_ zJ&m=iKG=ZC&C2HGy!C94H`f(zQ{0-kZPwb%E!B(6`K7;$DF}4FRb3huYi$?l6IvBK zS$bdO7f<h}9$%T)PbzP(5e*NkS>1V=DgJlNfwuwErDBes_;lOk!fAJnr@waZ6JqAk zvfS(+@01~<eEiF=FPc968B4Rw4#a=`*7w8PYxPCp4f*ve;?;jWn9BE5BEzAX`Q-Kh zLuN+RV>U;9w_aXx!}M9v)V4(@&s!c|W&LSFrq`a<&6^%Ie9CgDylQY|=JOTX??ryo z*kgay_^YkOz0>MeybU~0o=ujrY?NKWdTUqqM5`AYsz01K6412%|MFwY@6Fs4P^|Nz z=hd&bO>4hhntHBqq0QHN57z>_jp^=I=J)rkYg}Y9X>qktEvIro&*ldqu?JY<F8whH z7rN1HvT&2x<-E=q=Gw=l{msJrO&+FfTXuyr-s9zx0HyOMqU;y`y7I%*W|xWcXU9sW z1BHJjdOvrq<KF-8`_H!1pKtRkv|p1~bdNpwl3`CH!+dGBiqDoEN4;}nRqC6U|7vq~ z5_Dr_&-f$rv1-NJ8v#A3iwapzKXTMQ(|sr>_x|rd2lM`Ge@(4!UuBbVO`1~hHRZhV z{JE@mG;d4&a1TFWzwvnXzh^t2=rb%gv%VAj^~&1vd}EJa+<e8eO8$%1OkkO%8ttW> zZppdjR;PxkS^QI_rPohCPYX?LUbX65J(pvM^zW=G=lWmgH1d>K+h;U>QncK9j`RH$ z6TTO&FT32HRG+tqydPk(zF5zs%rNxpu9IfTho>~`yy%y>Sio@OxAR+B!;Uh`oms`J zo>$y&-MW6(uUMriRjS7vEp_M5;r5BWf9z+Y-O64E8%yJg?&Uwr4+UADpDOY5-3>33 zNA2}mPHSS0drmsUGWD^F#6u=C!)@CfuJ4|5<&dRuzO`DH=&@gl3Ue<hN%EYi@!+lM zS#U2UiD`}tv;Sm%;R7>g2rJC{A{)H8WEIoGlerE;7d7|oSR?dcT3ufLdFfxSd?DXY zzI0DB-P&|y#_vpDewNUb?IkyR+o#&A{NmW3+Hv61xB5%$YENGju&Ymb7PbHG*Jo}n z@1N%`O`5gms&&_vJ1=(c+#J&LGQ#u7*Jh!xaIw`17ma(~Uwq?zuVB9sb5M|P$>mkY z{H@~7p0y0$Qp9V=$-)@&UuAXr*VC^1%sWHk)>@rd?!Er(%53=!59eIkkT3GLJXloH z<qTi7#e0`p_sNgB>NQ<!OE=&3n)vkm?MAB_rK^ht%~V`2luJCFVf1IW<rNLZ$9p7s z`zG4E{yFS%_N?~V178}p%-H%|)H3Q7^RtAD6I^bDP1~ToczP*o<@&B&t(=)Nu1_pU zx_ETT4jGZ_cT2x1w_EN_;hmVW+~JOAt@u=p&1&l}&UCvuv*O&G>Ha00^>+(I{J2hT zekob{;s|R%p`Gwfx#hhP-g`x)4>K-{W1oJmyxUBdUw`U`OU5ibsY2Dl({DYKik_5s z>sHV5wSso9tiN1-wfRMOB=03J7hCHS4%xD=QuFKl4B2+C&`T&-kz^Y={n6JyY?Jd9 z3a`lY?QKu0w|?npD1DTt_j2jVtM>KtoR=TzD?EPq#|3S%`+q06G5+Ni<&`S0>T|v& z&Gw>X(lPxR{2yHEg=YWr2u&044SI3?+pL9(=cM-TEX=dN%>Qd)apoDPx%1|*O;z_w zE>t~z*)jcxN!)yGFNXuq5_`^_iBp!kS7Y$)YKxC>*~KY22i7wuwjV5#dHzq<#q@J} zy6la^^Y^Qt@l+DI<6#yathK0A!T$Zfzsu_x_s%_%39hFZEkS$H)VBY<&2y29$r!Tr zbo<w5Jli=L4W@$@wQs-lfhT~2$<S!J;YLB>?dCsu*rXW^r`w6}&Sf;*en*7&s2ro= z_C?0LTa+0Mr-z4wg};XL>dQ~J72y@$ZeGsoAjoJqeIpCM@bvBu-Y!O??P8t0&jqH3 zh4Tt;7nsF+jc2;jPafgvKbP@#Ga7AgUC#TLYkGMHukiM%n|PJ^rY|(+6`p?j09Z2o zAn$pe>Ccw&3U9YO$7{hmU8S5?czVli-fl+Y?E-gr4Y{Z9IKV5iJ@h&6Kc4A-XYvY9 zPy52#&17sgUGNUC>~?{#yt}xjgBL>F{m)w`KD}uZukiFdalURwlkLC6`F2Q55B|a{ zy#1&FU%c3KwR60})6Lz%l84>-xW%VOi}ML@e;CI%muI@;b6(-;6SKjRvN?Q@Ij5_* z^9gSkF5}zEGyT+mUg7DtoA|mJO_!%P^KnhD%jOf_Ue(K2#WQ`A0iW=6_E{jg?UQHm zedC;dqKQv<`<x|wuLP!_i{lfXK65Ky7o*ws1(JgD0^6OB@!jE@{$(bg@OGoCd`$w= z%J_t*AAic%#bjo(eW9eFoWS<NZ+!NA)7!T432#5l!v9`idU`LP@bsgi{2)^T#Q6Wn zP2cjAPk4L0DgP?|>77gXgs026@^>+sZ(r`pKUa48CQ*Lj?cvG%bNHvrU*!{?&Q=VT zoLJ1iQg%A0E5Gn|---M(+|xIJ;;?28e;1?0cJ{ga4pP%U7x4>kkJ`>J%RSx4lwWvy z*CDW^=wW^zsp*+>_=TtYPUN3B-7Y|YZ9Dfp{#LH(F3J4D(-*(s?_#pBm_G5dfbe#w zm;7o{)5{L=i)^o97LekeZaI-(Wcn&Tflek9%k8H80)bM~`(N;jOs`=Um^l63M1HpI zhFSv6T+`jQ^NUPBVFFPXY%1U`HGMjtfbjOU{sM~J(-ZFUi%fqMCD6rWU;wg6WP4Mz zfTYy)ttJA((@X>>ZnrNJ=;NB6$t)l|{Xv637o)-U>_!1|sp;pV1cbM5oh@L+J-uC1 zKzKUSa*!Ed$4YKrzFdGyYWmp*0b#Inwuc@P=;E3_%U?iv`lmAjU5tj?YtIUpNlkyh zOh9=1vF8Fh+|y^53J6bU{S20z@L9lFYWn>%0^op|yuFf7u#;>0qS*q%(?ul(L3v|= zq@b_V^iQ7zgtwUp%5zWOcu+uix{<wL7n6|*$QzQ|uiFc<NKI#w6cpb6E>cjGd-~?* z0>ab9Qo-66rV6@9O_#S96yE-$UQmR4`ej~0;py_-f?bTp+gEi9#!F3SP8Ag1F0)Kf zn0xwLV?p8RP8$Wgn2gOpX-QsS``d$pAzagWx&?)|hnx`<=bnB$Qc!q$-F3k(MiWqq z)Dzfl{z6cJYq~zDILP`W*eN@mbD5y<b~XW_%Z$?<&j<={e<LUquf}M)-N!;mgNe!1 z1hSrVot02Ty&-t<kbZ@Qf{CFCc)?JGrGkl}1%zp6pkQJISw~c1XsBRfWCj&C;xaLY z>NGS~FfoQ|H8fE$F^1_iRWO0BL8>q`Q!p`s=`~j{F@@=^w@@%Kg=x0rGBJf}HZoK& zF@sucWTaqX2Gwk2tYBge)of&<U}6r{Yh<cmVh+=5reI<L(`(LUVgb`@p<rSO(`%_< zVrimaP_GcAUtw&ZU}6c?Y;34tY5>)2Y@}dn0M%@4tY8WYD`OKbQ&?abn<|*XLd)1p z!4wu+#^ws9u+TELP%wpsma(ORDJ-;13=}j>A;E>VdW*{x8gh`;Tc#!!kcGZyZG`+q z8BM1<DvPUbcM1}E$vEBHLWpPj?PomF+k--co^mjnO+WZRRCv30tk7om=?!~DM5YU+ z3Ux4=O`n}Abc4}+dr6v*5f`J`^yLLYvl-2|I~NLl5T5=oMM!wNTdU9%PDb<ThE^iN z)8F+8bugN5FYgyJ5}v-SKuCD|o<&0boYT!?g@mWetr6;EGPj&Q@sY61_M>ZrHVI9? z)h8spy=%Xa3fJ`FG$G;X2TuxhGFoi+J|$EoGM#&kknr{!_k`RyryI8l2~RhC0hZkT zLg=*6^tC62M7GcREtJkVedQt{;prl*!W~SemeV(yii&RE%ql!fXu9kRA(8Eg62e}b z)64b?iA>+GDBQtpYH2$C;x7@g?FmZ48-=E^3X5!4H5Cr$n11A*kjV52w!)oErk2~K z?Sz%trms;H7TzA{B3#Wmz5Tb4@bvq>!ktV8#?$jxiO6hk^Ai>lo?dG!EWCYnqOb$! zbUz7U;pzXfggY4xws&L;9~PQ^##dN)dt9AxGv{<6Q(@uhU)qH`L3OC9sPOiQ9m1c5 zroYY-7T!L6ws05cbUPPe;prwzg*%xHO(8*ad#Uhkq3I9Xg@w1D+#zhnHGM{+u<&%D z!yqM=AWsNy-*8xXn#gqUlJLkI!m~K1d)EmIPiK21+{tLPeZnJQ2jS`e4+#rzfBaQ= zCFk^(*}}rp=l=&uZq*doBs~4|Lt)|V?}SCHIj3*iAuK%IMpmSg(HInl!rO1kifk5| z-t%8rc>8<<k%^qs-EIgAPj|Kgsn~wjO2kWex~8m%@OCXfku~hoFMJgip8hfvELj{T zGF4!@ft85xcIk8xXU^%jg++v?7Z!+gGMY@E0E&F^LXpWr)31e!2yfrpEaJjBy~jXA zc)CchNGFqtImGk3dqpM+O^+)O5#AoZK%|Isy11W+@bo7uMLHQx!48~W<0s6uy?d3& zSE1>Qy&}TfC+`&z=9tcrE+RaA=TVTd?as$UE(uJ(xKc!TyT)~qS?tqSHH$!9X}UfB zKFF2Jj*19xXa69g!!_M!fr#*Qw_hTijAq*}{1VwBJpIr;5#jCA`9wQ8L0Lk0y0L_4 zCzBb}fwv??p9)Pk{v{&3{gSq*6X$f%>mtI_)lEe^8O^tEG!>m7G+jYLRCs%chp0X0 z^e^v4gr_eH1WOtOiJlUgE@CPwvYjtgbe-Vz{o10!+s~JYrZG-;^bi%^?olDSSc%bM z`<q#!e;B9lE)x~m{%4M;uK<&o<#zA2q9u&eU(FH~*?xJQXg4>b*>px$Vd3pXyF|?y zr@x#d$^%*A`FOWzc)gh^q~JAIFg3G;FbxeAOwEm<Y$F9zb8{%$M8VVovQ41E(3H#6 z0;<)}Ou^Iwrq^7-)DouGLc!D$rq@!z%mAv_$Uwo&0IIj%$WXz|0IJ!@h|A0ns@cd` z!ORe<*~mn}%m}90RKd&$s@cd)!ORGz*IdEO7^c@k!OR$@*OJT31gh8AK*7ues@K?1 z!OX-`!40(Op~Bcm!ORq@+1OaY%oM8G*hIn145rys!3-8y#%5e*u+TC#S1>c5Ubk0N zOa~fJkfPPh0%BmAu92>Rf*CY`(sYeMJWEqhv8%lO@m^7J{^?$8MR}(0S<NN2UE!?g zTgK@J)`<#lS2!=ag=KpDE>Yp_&o7JaVw%2kw<yo_IZs77wr{;A%EvtY*BMcs?dNZb zPG@E`+@5|{G?IBb?|D(t?N=X&?q-?3@S3Q|_9ah6jU}faz9}la{nbCw8I02pJP;M$ zI#n!-pV4TWfLJ`^^y~jbg|`<8igC*_8c$aQCB}(*Viy>v|K}GI-d<uLHcy1nWV^7d zSQF#)ctJ5}!a46I7Ex~i4I@hhb6ETt8Yq|>LW9fDP{AA)mxd+^=7!L4H#Frkhr}yd z&7@#%2#HEa@R>s+84`Tv#t>s6!Dnu4t}wj`v_Iv9yBG`C^jbYJp6N1tQc~ML1&TGY zFq%%kcu-Px`^+%0nLJEpM&L%t_MBufS8gUVV+ikco|uNf^x`lvwe6PmV)pDz=8!Yj zw$E!5JI%sq4(<^_4(>3Y?w~BL&TL|0G5ue+m~{PXhGSyv7U~YW7;dv_mX$pU(fst! zS0iwW#@VCa<aNZpWvFyL`l|f&c76V{WgpMqQM!{95fYVW|Nmg){zw1!-+ul+e*67@ zTg(fzmSyC{_up<0Jhtn$d(WvO1;20oE4(hXZ|gSxwP*XU-OGII@Os08{l^M_{Mm5v z@tO~Rf1Y2zU-51|zx-6QJvZz>si<tKi>g(3`e~_uE_qpRs?)o;`+7cNAMPe!wR*Kn z?*6Wp5?;f{vgdO2ul?G2F-2u^<*&!x{aK5c9?!MWl344YKlN@y`q!B@o0_d(RQ=f# ztv0XxOwx(t=aU$`=g(9YJDqHM{|d|MJ<-o%bti4t5KM1dT43y^d$0cRf%WEEGb6%x zd7MctWP2icYG-5X9XF$7lb}-bGrZBW+utW=eD3+E6FM)jZ}->7&(7-zO;_pNkUH<y zER)ZVbH#M*Bkhj5sb_xqT_d(<Nv2$55A(HEi&QMXp0NJYy=3;&CrQ<dJC#1iui5oU zBG#I{@0gDEeEZKCX4iCj7yX)AQLo$95ucF!+r3u*f(VO>6nC3T@Qin>9+*FSE_`V3 z4a+0evf7i~vkytOzMRSuVzYEj;_KCF@$TP0N9c$>=<L$Id;HIrh}{#q79>6|Xsx#D zPy07LOX{#^<ju&F8@N=j7;Z1sZ}*+E(Bs{mKQ~g`_*GZcls%MKek!W7A-45w)8eD` zCl2jww^~2R_{BoaRTCa-vL1LdQ@l=A=GWHyYgc)d<bKbQXncI<8tdst{h@ytwtZaH zYnHqwPkm-cRIh%?W9jpDKjI}b_g$N}X~o(PeaB*@R3j?mtDpR;^q4vS^r>5}towzh zofZ5Qs4H;tfM};gNLQZPL$k_R;XWY}W%qb4hX&P0Ezb(<{Cc8D`=zcihyBm!i`T+@ zH}@3Foc^S-<@W47($=xl?AO|rY%sF#KjO4D%IB(CPVF&?oUEpGn%iGTc`*IpnOp34 z%kfA}nfL8y+Y+3X$6LSs6S*|HN#N#+JMHIhq#FHt`nB@+y8AD0++8lBv|aO1)EVQ# zDU!a9xw3bvL+U5J+!-`Qu&Plr^^(lYL$CF;yVuB1Ui{F)ILmCBmYrartJXQCpKtxm zE85vaog6$vEx!EN@^RntW9iMWL}r+D-g=OIPrIFAN@wZBZ7o|)usm+b-JtbG>!?ZV zd;ZtLZ0Ai@moDA$e92OgiF1#B|Fuo^Y=L@0<ebGX_@DV4YZJF{so!9H{iv+W6rH&# z^UexP<`puK(e+b$dyrWox8PLqE@=@C<_A;K7cSOVG-*}kRhJu=O)8(?Dy%isvtG3I zX8YyVeL3C!nP!<*-jhN&?p&}r?OFYJ`*XppB_isH>5>U%%4dBye6T5eT)sWw*)~PZ z*Ejl%+<MI(AMal3w|d3jJzLc3pC&Cir<kz)^gR#O#X9ll1J8%5>!(fSQ#{-Fd)a~} z!?O=x?Yvv0Ui`d4`tZc<QOkvPY@6}H;`0@SW&Y34EdQO+!^&`^_+caCRHg+VCKPtO z>&@cOVOy2*e5sw`VaX5W>+}ruKh_3byU=sJAp3UV>n~M%>|M?r^*V4X=vr^sr6Y3n z(}Xw5M>HN@Fym1UYux@U)@~1mwG!%VJ7#po6mC~i%Mwiglo<Wz%mcquD?&^P!!J$| ze3Bh6KXt8j#HFpDG_|dD&BBvX7&Ky<ihiWa%3tG5HLoa95m4!E6OSvo(4R8(V_A^) z^*h(vwqKDF`%${}*M;09j&su*Be{R|u3cWSxc<zPqg=fkmTnfDQlrDkdveOQ$20ui z>}leBBTzTvRBG=uZ4Q2k^|B2{vdio>FRh86!kHFV7UF(%Wna^>=dnBWTCaEC4%z5? zflJK(s&JmL=oJRHHZSHThx1pQERLA`-2Zjsq!#<V>;@X??RlH-rDjIyaQzA8($Am0 z_vJhD9zDtWXTBOI{WLo7@cD~8iml7etWWlTy{T!!3b_@<-p8NMo+<sXXk}^hnkyNm zhxaX9x2*EC#I9E>-n6%xT*y9E(e?b+8^`ut?nWz}Z!Po9ZL-VRY>+yMOW7uG*_#}< zG!My_J(~`md%FI)&zaCm8N#Y>DuZ8_&0fJcdv@N|rEU4oe{t0B5!F4axLs}D`?lqa z*Gcc)`D)iio|%ia-m1($VD{0&Qdj)K(dI5jXHTaCqVpThDl$7<iU{~w`Es_w`6M-g z%#_!bxq0eWKJz^dncU4`zPN9P_I~3ap;b%eIF4F8p4ypqsxL+`Aj_7|QU59XMg8m$ zzoNGbm+`1^%iei=I5~38mwM|TS6D)djxB$D>G8T3-3xcJ9^n_Bb7+dm(WCG0++Wr; zD|G9Dz2&#QUD&+q#-gRCuRLSDd@9PgeBr@`Y0vHCZ9ixE$z6~VZ$9(6Nu&9V(T}U2 z)_C)7)mK*CCOg^ad)(}8H4C1)ZLr&UuQJHyma4{j!5!5R0t=3s_Z*qIKu72ErGoma z$>)A3zb(_g_<5?V?X=Y=&z^4d4($&<d*^VD+>*Oj__CMj{N}pl)pGk9%iYb=(Y+o4 zm8<OAoTqwlb60(mui9O@_2ljbrn+0d+A6o+-#)o-vFV|AGoHR(#Kj>~y`}Aacc@~b zA@66Sca;aMzQ5JZQ_l3XxEpc*Yre-h{Yd@b{q-%Wy>VO1c=WjCH1=HCVR4}6yz>{$ zL#HPwx+|3MCE9MAp1&x5PT`lDhbFhC?hwlL@39lVxGqn8=_dY~rixc@1b^CXR1r!3 z@FJ#;@#&oU<+mU96eT=g8tcM*#oj`{JKs$F+qAYjM@!e%?AmoJ^Y`EQaO;}AvOQsD zx8ir+<UF;b-XwU2cBRIrMRj`dU*2uq;k^C0=e-@Dj5}w(4FAAbBrSW!yZd3A<?@?5 zmpUrH2`O$oSK7QL{ny|4W8Vcs^NYEUn!kGCUzYf>V5wJO=dG---*%hDG4(9mb%n2a z`>A{H_zI`YyyLepy1bBgv#gkDOHGc;6KTF*nyObU9vums|LaKojm?vHTsyhX=v0U~ z_k=4slRmOeHrb(9&dtV@&h&`;&be7zqNS!j+;e`m;^Gdsq%gnZU#`6VE~U2l&W_9B z=DRZ5ckOh3f4A1>WZsUwuRq!OUrI^V6WeXDmpe&dxkH{H|F3<wq`NOzDzJS&B9(DW zalw*sXM4jR@g;UizE<%|`_$@1trj<b{+RKe<#+jMiEe|-Pu>W|1TcJ*Iowm;Xtq4X zSikyrP~ywj<Kk71c-p<x_s`kW)L3<rFN3YF?7#3;xv%B16Fy9tw=Ro!mZCMgiPPMi zo91)#IJd^!U%&Tr$Df}^R?8IFz4w3rN9{Ok#j`8yenkO?%dMsBTr3#pvUc-q5uANg z^N#bsO?lgYy|4c%|GDVgbjQ__!b}#1paE|6dJ~jw%4?%e_Z4sFz4u-757XioPInoS z#aJgX-DRB{d+}(6O!;M<O|M?Ni@0`P+Ii#ib_t2(`N}~euAh`OWB=`#(XChiOz5p@ z+nS(#HGkve{;aL}SNrqz@u$n<-yD^gx_A5Z{^L*2YCL}M=~>9RkDm(vKM&2$-dg|d z+26CrwCgT{4rj3`*;uoG`umrE<K^r3FIjQm)}b8}|1SIbI81}VT_AO-mi&&b|G$?@ zuRHPa@7c(H&_b()J=dPDJh=SFKjV+))yiDoC1jL2UTFm;E;xH#u71jq$Y*Vv9^Tkz zbDM?xk7HV`#U}Y9*GlL5oT{uhKDlHWW5(*E_5W9x&*8P=?#N~Bw0p{%_33&4X?gLd zMW3es|EBACYWL~);vd2q&%OO#ulIk)pI?XSn!<J!ES|fvx~#swxg%&%N%CL*dzW@y zQadv(|ALlY%-!^dpEG{_bJ}dFreCFX|L!41b@%ShUwgTNb(ci)y_=%{JLaZ+o<_~S zOLA9_fArc?zwM>fG}j-}y3bBLQn=>JytDdh#jdPb8!xQy-N;~)tob`@w_RnJKuhle zzH81BLQ0&Qk1zi?`QPK9RVVMv3_6v%Z&lU(o^2VLPrXBKE?edml9-{TI9YkBf`185 z*~3>(8oL@-PdLdkD|Hg*%NzD(S0gJo^q0tKWd3}5JMXGM!|alJ`AHj2^I4TtERvM@ zP?>Vs^zhxEvj3W%ZBKq(`DV|yNH56{jhqQRv9C*0*YKMiU(3guen<LgPv&nSabfm* z?6ys!XCs`Nx1YV0!D62n#k2eC*}bgWer<c}_VejFleQ;PWh$w%GRJ#Xm|yuaLtb^Y z*pbBFb~*>t=W+YAHn@c!E2&@28RnHCAEdVI-D?r;>3o^(HzU*^nQvY*d7@U-7T?1> z70j8d#J(3~f7zse^;lwyKw3oZy|o)ImJ6n3WW7$lkbNj&%d8KNEp&FRDbh(aw4Unp zXW{`V;f05fEUe!9&LHFVyoq<$i@83~s5!w|^5#J)lT5D12Ii&gkL^P5-+r#Ork>56 zQ9teJLXDGclg>4qFuPH@T2oT;z}%D18TSaAXs7RByM05A>*JA(wCr%(9d`EX=QGEI zD+t;dvPU~rZ;-f^+ju)cthz)0Mzb!%?8WhsH;&KSR>iR5l3|NM#zygP0!gbFO4Cne z@H{qOrW>P``|#nyw-!EKX?Y4pM-HF4V6dzH@idY0Rb>eWwVIdNSsEQYu|Z|qqFF{a z_G~UIh<fHydq%3(O5(~#*{WX^r%F%qoOvGZJlpC<C(DJhMe|~>7`B{aZeOPPcBbK5 z&XQNNn;m@q-)%X#jF*4nv^5{UvOaO&G{5fS^ffUa4aZ*hY8~7zF5>Y#`LlnF{4DKH zy}f0dY6|MP7QH-@G4bOGCC0ShTK<2gHbx%lTK6|oqSg4{R(ak7^Ie%IaB}@ks^|Fo zcVpuR4fEquB4=K6=44oGQ@ms1(o;++t+RjMH0hZ=zua`z)N|ify4|dP{MBLi)oSlk zt7MiO^)X93o#qkA!DK13^v${7qFerie7v~+_ku}+>++SBnk=us@a(VLmdgJ!2O>H& zEO{ed?QAog=d8FsvgJygcYqk{ro6LXB<~a^hS=nK-A(jPmYTTD)Bf46MJu<f#d`B8 zezw*A{88i7rd&DG=fXw2F@kG!8%_#;jnqq-vQ}-H_eq(07TeOW7k0+&_rzb^6lpxZ zWg4^b>XVt*8|%3?E5F_7R=+wW$h%tR^e5G{wm+}VOxTwydBI?B?QG>#yBDW;?mP+n zo#!3oKjHqXIky{%r7V}0#O=SZXGZb@W51me{sO7`?<`m6NEN;}mX-GTsQ8pQPt5OC z-GL`Dhcsq~iJ5*^QSJJ6XwkK~-<-O)Mn$HVdtL0h%aYH2&OJZda$oDgd9w=Y*^a+8 zk~*Dw^v$2$miIb^n>X#8a`D>HPfyvslvYpn%1d;JjEK2y`qlHT*#^g}9>*`3)nqhS z=$h;1Ieu|ZeJOD;)Y@Rmyk&QKS9|P?ot8bZR<S46@_^9(%*(T92FwlK*tUJQ#4qlm z3oGWG%eW}?&PF02SE^yx{Ck&we7eSWZ}0i~E4%EEwC=m<di_gZZ|~<Em)mCLQ*7co z`^{#)KjJRr$)sRAvo-z3iU|=#YUQ%FuPS6W+!gt7RIK*S9o>sMQ>6Z%O<TX|nb(cm zd{WD=n5}$~xKzzSbD?W-)Wz!WJjPNkI}PjJUbFuqbuv}#fkp9!e^b|a_^g_+c2b=- z+l&P{tmo@HU0Y4|dj9);Y3F~_d44z6J3gBDY|VtdX`dGPJziE7p!LCrT~ADaD{*o2 zeT|9V`)(CHD?7uK<zOIP>{+XN=lJD<CDKikLq2KAPCs#|j&<$sn{MYBVs;BM*D-s> z*{@_(xpUPgwd0|S)dgdY>JKt=F9}**4)>Wad)zX(romA0PW`^;7Tl)Rd}~S>PTb8C zRj$7+Hn&)2^3umAX8bADl`EGOZ7K=*u)NP}vVLz@s-cqO<FXGj2Y1|h9QM=ktIkr% zO>;{f{J3ANoxApJ`}^&De==ly4&CWoaIa2Qbd7uM<iMqu4?TQ&DEIbs_w2a^?P<mP zIKNd*`YqNUYPRhE#(({b>t!$dKYo@Y=i++%JdfO>S*y8TEEiqUw=^p+z@yUVoYqU< zPrvT^nOM8OpY}#{!Je(l_r7?$uFm*{%6gjub+ei};}<?x_D&Qyv$FX5b>UY62Zc<t zM7Y|NL;jk%uK4w&GJ1{ibj5-bmOBgUtM+x)HeSt*i`0`=>}X!SEB%1(U)|{X-%qAA z>|t6aTqc@We9GNiEvvPvC^6})en3K7eQwp4yKdW`Yv0c1V!!)3H^$)B$_%$Hvl+K{ zJop#ykh>*N?V0Gx?n%L&+rR2LcoasMDWCYJ;+S&g(}OE+FE3ByyH+lhylvj^{UIDj zeynv;SU1-|dp(O!tZ|ib|5K+u*JtZ9=+y_loqp@jwAVMncj@?YU93xUm771Y`Cjg? z{O-MJORfAh&n~KuyA#`YZ(hXAmkNIK*;qDr*1OHWs(NgVWw@;Tvd8+hQ_3ZaZ@f`b zQrBB!u;ln}9d=&xO=<JRs$!1%bM4Y?e^^$&oNxAOeYqItpo1bkdaDAWp3A?eR$bl` zFImx7KRK^!2j`Td>)w<w$Os)(vf=pVTHr5!Xy1ou5%oWJRxw$}3vkVKyR|QVUFX}< z7f(-UzLv~1mNiVPT-=n-U1pTCazW<RbuRuIrRQc}UpOV-Z%H9v?Cm)dtbAF&_(VCa zHWrC`U2hi{vDF|csM7oS%znnz$$x87!q!G@kGhz6hQEII&D(1v=dCW=+!X&t&PhbG z$yh)2w(!f^n0FJz|5UA9di~^u#@8;vyEpH9bmGADOUDd!#V)shZ@#sm*?LJpArouk zL|Znt_MZ+NKX$y;^o`kFBf+lp{#ljiM~_4oL)j&+`!7#kyqsBv|I35RSu>Xk7|K2Q z>e3&ZKYjU}8SjKe(&|?zT;9!fsQRo%i&<*e7o)xXpVTD(c2#9KNwq}0cR72{x@Ky? z_U|5_eXj47>{4FVli9b4r{~b}JGoMOrDY<08Jjkl<xTp(=g5j%|EGjUt&W-(`?BZM z(k(NebU*SoI6g%(M2Cg@X^BFFt4(&hc<8%@HCKe5F0OkdX>$Ifs@$`U_59}o=fC-! zY}?yaW&2Y((Y*R}(#F^;bCW(^bG^1==3cLZZ&-Y<-Fnu>^HtC+xB6m#<U2(fbIoY) z4SiqoD!Xs#WM59RT(opkd>hY<7`}PCWLn<Vc816Bg{@HVW7oTOtbW;BncI)QD$BOL z{+5-}ea~BV|K6jrNt%0$rikzSDR|fBsolqakJ33F_uMN<Yl^TrcV}a}XZXes_1*R> zH+<jw=Fp3-_0AS2pUbRx^2bVj+t~?Mo|Z1$|L>{4)ZNNw(+_rw2{Rgj2R~ViER4;j z7c3N$s+YUMZBQksVD3=X{6+7?qPueE)i%$#`sbg=B9FjT?Qh)*61T*v22Jshl?&W; zTE06j<lpk?3DX{2mb(1uYjxd+^M8Kk{``IX)8pllTjC}cr~TZapI>!VY?}G*Wg^r1 zZ`bR2NiLpp`F*}x%qj7uH9=gToTWc~kNzij|Nrlg>s8xC>w8Xi&AzeT>+bqUCNJ(O zYl40<U;p;~Ti&0g88!8rkBP3_eW`qY^y)t$)0aQ}o4zFfS(nhad!}pxm#!{a<M495 z?cbw9*&fjw*KT?GaAw+!<^F-k&UXLO%h5T1(!lb4zSXN6X$-eAPTx1mUuvEpDsYQK zsqWKkqsjk&MEr{go4qLdUwz8-BUf)e{mwck(sAjx-}R^WPmiDXL48GNYVHe3_DlE7 zVr^2{jx!|ad1>E0tEar)f8$-zyWE1QtMppWZ&<o_!{pg9Z&$POpPU*wFP3#dboP|3 zYyBt5uYKuvWP7u5c8`n65!aw+I%U_?8>WbgPgk7r%(!G{P9P84yE%_Izsk9)*YkB8 zYQJ?Y{^)(J-<oSqx|CfARz4ND<c=##&LZ{HO<ws=^FybdT5;;OT~?O&<AdcEXTS9Q zPJZswxab7mjtSA8lg&+vlM_tOZmG!Px%(miMEzaS*rb~(O)OnY)4n<COx#?hJ>}zW z!zo)gA6w*FA9#DguSHWk40iT7PO8a1W8=TQUQOax%@qanFdjZ$RoT*)F|Gn%&fSha zH1$&R-c#nO96#3jXjaO-W#Y`=o_R2A=0CTHj>11TO;$<n7F62UzFd5<`6lMX1KPpm zPkMzsigcSgT*Wz)wPS9%9?m+*U$Am*<m7EzWZstfgvs}uY%6?tf$8-Hr^)ZmCY;dA z%buQSCs42FAn>=qt?HQNj6ZQjey1noT7H{j`iODmw2jw_Zac0iy?ak4(>UJ5^!Q5O z+gE>2Sgvt2v@t*Ui>RFUtQ~CZo0puQHsky(X}-IU5?V#lPv*Rxy>VZ1)j!d=neUn$ zS3J;hmb%?2AN_o3p1|sRtM9FP?UjFg+a-x6u~Ux?X7n!c4X9`N<p1H$mNOUn=jVB@ z{wnxtN!9*Y3ugY?+3<0eY2xFHm36)M%GOo9PTSU(xwA-O>DwKLCRbdXbNQoEa!pKf zNANw{=3b#~l{LCKok{@-ljnQ=n5{75`~<VrR}XgVY02$<5NND>?3)eq*4pW2!HaY! zK3G}X{PEsn<2&5ZpJlH9n^*r#IoCpW`PBtSJ1^b3D01uA^PRf0gF+@tm){U<{N4Q1 zK4#CsCkbD@``Y&G4vf<I{b}QVId8QH(<70aE_ik~8#KTF6uiU7XPI5%t+4vD6T=MV zD9sGo#cSkTraN`HiSAj}Qdx6*Go!%Ge#)Fres5ba``MkYoua`WTjXZNy#Idfd3~(W zB3?<C-S3KgAFcYVm!FkTl%DzES+3htp`5B_kApQzn^h8bROpM%^XabR`sE<am;B^j zu<{K#J)NUA{ok0}41P7v+wx(Lr-9<jb5|->8y8p?Ir4rfIdh?c{}9V5E?((HTX!#$ zTeL#OuYdBU&cv@5Ym_znCz<6htUYo*GU;6X#HDlRFEunYU$(8YxaRWa&N|MQYpht` z{fW(0);Mz^W~+>2v9DT~zukRf>lfcw=+_Fz-J50ol0WKQYWhqsDV?pQ?<ywcmdyOO zq;gt!)gPJeri(L==ef*%Ubo$}bK1(uk&6q1m#OjO%>I_2q~Il=`s(4^4R`aqxulx7 z<gPh6eyLAq{rh!q+QW0r%YAsncy+EPzsdXm{O10NZ%%xB%{FfXqyIHGxe2#eBHkT3 z?#bfJ!Tv9Iy~I8zfeEqmlD55!+;nc`qBj=P1SL;3ueq}Doco@2Uvtc+`NmBwI9JCR zSEYGDLUVSxw#v3CUyO=={avKtRit&3{XK8G-ifmT1#>+^mFttXx@c-hO*^sRvO%V_ ztDsk)$V2_;?il6X&CdM)t_ACVkdFLxKs|ZVTkG_w^=|FL_gq?guD#MT{d{cAzpB*a zGM>z+wfEA(G91@GNHkBrs`PCm*YaxuiD4J3bafI#%a(bEAKc-UbJSpA?DM(ohN632 zE@=JFc(zeAaO<tfRc|=!-(>2rY&yDW-Lxe>drGdbEvhs0a9XiLHqqUtyT^G=2Xoj4 zx4&DXr~Ng%dTet0Y#W;oHA0{6@d-b<*)p5cA}nN{>H{|?p}8eCfuHm5zPaQd7-{-% zQ?yo<Y+Ic2RI{B|YgS(}_KNyHBfx6^vIXfUoiubk91g~x7k`ue`D|MFlWp}*w>N~& z+;`A=0?Vy)^KRM(HE%EtedqOB_+G=s$ndx6>vX?nslDEM>Hf0$6<1~)k9_pg>Q(~J z?#*sLH(fVsdoOlF`dQ>>pRn~N+own!=$ra9_iE0R#1KbIy_lrvQyG1x#;cun+t{wp zNbfx|<5!Fxr^?;a_8wx)OOEdJMhZQJV)|42)dD_gN4y3pdF>db4$_(bg;i~i*= zdA#*1--NKEH-4YWl2?7WdhL(NE^iL4+B#R&`%Ba0<;Q-!etEU;to+)tpk3}0WJ51K z54KpRVzEG>{9U1~@0Lds9;ts?lDT=toe7geuIH`ayRLsNpIOM3ZEL-cXaBz8nsv5e zZtRoVO1HrJ73XB7jog{dy)SOGmacU6S*sm&z2wi%wc=aMO(xFz#<NuC-m=~6G#`k4 zX5>1RQ#vnieu;$Iym<vZFYk8qFeC*p`kl5+K8wk){f5T0Z`EId+RrX1?`k^{{#9!7 zy$45L@0MGA)u&<0k<>q~;@%ednZ++Xj~%RNh(BMsbzX!@rd7RViNn^IrnOAYSz-OX zlN!#tUy6$V6~$Z_yezx=SwZrK_g4>J2zR_Wb5HWdhtdmdyry+o*GxP0^JG{5YQN11 zsUm88=9O{D3C}dyu1$HDQ1tpQ%jDdt2d%wda{9RS3Qhh!xz=aeV!Ol1Ii(>FoUG?F z#+NPXwd8x?`QhxzE8+Zn^+As1I)?<!tkh2NB%I#!Q@>Dsk=@MjQ-61{E3hB6s}5Up zqQY|O{+jou@0NFO^Z)-*xNYaBs<UT*=4@`UlHHOv$@NLq^MEU}Oxp}(x)w3=Jo&SF zmdMhV&S5LxYJ7T{*DoNxV%I80ZGqWRhs*RA`WuVB)j0ET7o)Lgt<E%)m75dmBksOg z7xr$y<)_((Q-Th3RCB!DbnBm@C11vkV?~@L_Dh4cKO1y;{@!tO)9-S*Zw9;P9W*Xp zam;!b>+zYzYfiq?JIJwGcY|y~=`T^YHK7r{J)2*6?^K#8dZ1Q4oM%#Md8k$<zh}*~ zHsAei`6Y&TR(-f7YwdZUVf}Q&WAb~xU(T&RWGkXp?se$;yBBkVCawHjdEG<(@!x0C zm&HG>W_{K7^ONs%o=-vkw-$cO^gZckx;ZO_RbwWrdxL?p=F?4*8I_TRJDhG_c+t9< zsYSuGf1h1tlj7ECTQ28svkeW=_B9vJl>Sxoc+D*KgE^nRNU6Ly{W7=f`Sr$a?HAT1 zdd-V)om-z4&%a&VB<7rro9v^hc{h*W%oN{Lvpeyp!}F|7=awe=F-XbDysA?EdVZ-; zv1ndO?c<=jj|ppIf0>+|f5CQE;$$_a>+{YO$=r84@g?h0>7_fr?_ZhQ7PoA5jfS&8 zgxQk$8|Nxr{Z=u1Vx8@tqf_SCTzxok-=}z<3rcpyx4vjkdt3i5=;rOCJGZp|i}T#@ z$gDQ~hSSz<((fX6ec{kveQGXW+YdjbRoS-{&wV_(ZoTxa(B7W1y0jT*ee6s{1ogHD zGdJdJHt223KYogNLSodKnKKW6vv>b7;nQM;|Me`khyE)S)*QX2zM@99HpZLXD!O>O zyVAZGKmRY=XE9r)eO-6?kJR~ZAJwImxU;w9y}K-VCFiouh4_Ep#Ge?5bAlVpOvXmj zFFxZ@tv5F?L*CuH7e4lUjyvMwUnYso92Zz#=$(AirFZOcq1jLIlgrk}PZU{s+Vb0v z`C>;8NXW}hTvYMXCFtJ2J7<=?o_}-FUC<Waw|}E$f9$NQyI)sxx9-QuJkS>3yK(uq zPij2=Q&zNU%9g!x|0}QEidtLWTxof;q)k8S_@b@roAs`~zy8a1|DV@i<)i&hMMq1T zZ{lB@Ki%tLB3qzR=-(gSzw2u^e&msf_dCb7U{_{wcj>lui`m>B{*8W?|IJC{-8D-! z`+&tRQyb0RyZ><%N}nlxf~`2UdK;(MPv$czRvX?Qxz_2Y_H@r2AG4jA2e#imR9}BV zdd;)eR{vb~nRZ`!Gd{gve|!GyBGvY{_md{AX}Y~H*Dm5|Y3BL*oc+1`Z8j`FtJUiD zX6vP?(VNdK%~fvmWLJ5(ggeA=wa%gw*FS3B%3}*DO4-`<D|z{>iVfZ!Ww$e;C3qK{ z+#jIjYjr15<f;4p1Nqy|DsFq+lw=`zYfpE^zWTKlPtTTqE|)UTEjZ6VwLo;<^uT@- zNuJfKO($!aZB}jRxBdRNNo0d~pRru>OTNYImK`VCb`(n}?&)K8jlY$b%Cd#+^HG*H zWdaL@Cv`nJ`7Pmb>&KlRc#L|Le<w#UEA%M(sI9$!d)k}ODT&Lso)WA#+~JYIKCkea z<>8w>48q*?hgf3Vl&&c4`*?Zkwuwsp3*-f3FRzMz(B#Is_}GIFXHQ?OHac$Gw&8Y9 z__^bplYC`ApWG5_@yUGo>+egfx3lki#Pi$h)8Z0^e6Dn}GUFV{`yKO_U0@QOY0Gzo zF@sG_`L^;4$79A{WIQhMWUt-SnArPp>+Sg}$(ot3f4^0kG9{#*)9z%uh-A9anTL^? zi$e8oKfE!!=iTR>*{NS@OV+;L;5bKf)6Y%Doc&Cy*_)dkn7Ip`pPl+>bC7jiX|_V~ z?h{ql&z*e!ENog@S)ak>ef^gbIuy=ZNjtNYz1BN?(jnyXyB`TI?XCYGaIZU8HTkFf z*{cs1_}FlrWc<bVzOu<`%Z+-^n?ch~^p{34sdIjaPuj)V*m1jvu`~D2{4d>eyuTTx z3n>>Rs2Dd1UE2EiuNA{trdP(5IkQ%Hv$3UZh@MsBcxi6=w{yQG8w$0Kg*Y!=rS$Vs z$j5nh%b(myT*mU-#%Jan8SbX$riu5?@V!29cFnt=_oLe<{kpcxLdh^fV9t@9dG%-W zJeRbZzt`UNJz=3?$q&`dJr2B{CtH8)`t`<6Lx1)0OP{;S9FL0ZU-Y8$(*B9UKTl6c zdMRdS$-9I9pQk0)9>Lyp4)^C3W^dU4-ubj!AYuETd%K=3n6-KC(Wf2pk(LXyrMSG# zRPdgBcfaK`do5GMLId>$o)dE~B^KHoeR5*@-1^2+g}RrA_w2dR)pUQwEIyr!@=P~H zbKaaPSQLE6>8#-X!>3L<{QJwQ+}{$T=u$nyzC-@_8BxKv!X-SZGX?FxE!<n1T(f$< z%dAfGhsiIJ?JHQ`a86_~nH;Mb-WV8hd(yK+wrS1x7q5(&!v9ly)hvyJ)gKOINjT5^ zw^`!w4<`Q&_0mp#VlOwvUu#IdQ*fBk%{Xe+qdZ&B3C?>ae7_l${ye7pMU;T`G2i)B z8aIok$X$A2JoAvpdH?KX3Es23g)M*Qawd0~s&t2aYAjr9lJYoLw>F1sR`vTEOG<aP zz4)Yh`}E^|+4KINQ1RW?u6FRruCprAGGVM59#igIpK)NPu}pD&)eD~j+pXVB6IT9Z z)W4#uoAUAY!F%^MxeJ+Hthcy+>-L3<7vk9}-Cn*6nPdOw$?^+byXwyG^?Y2lQ%7!z z^iz>3=dMJ2af%RpkfN-T{LD#%+1f=!aOXm^Mfu5#JeA*ED!d@0Hm7oqXnRc3ovkds z-R7(JZ1m3k8=}yvIl;+pMN|C(mE8O{Au-o3s#wqb*w(ESHGk*g&2d!|ndFWH^=4XI z>8yJZd|An^aOaaMf6l*CHaEF_F1WwvIj2^~yIa-l{|+f!h*8X0D!20HV)c*+vyC0v z3vM2Gc{`EMUC?3+r+eL#)oXLg9n_7M96J>dRQ>7dV<%7c!czgNdnetN^?V%_S-<=| zYi~PW{LdeH8WKk(H!JKkE(?sc5mI>))we_4B+NcxRk>Hn#B@ucb!viYQ$xFdx4u?< zv$@iV`To`q3#M*OKmNDPuzC)c|Kjs|z1vxhRux>=Rt&9|JIu?tXp^PhKBc3}%)Il@ znAhF;d|UKf!0wFNd(&@BYW%*vawY3l$=l)eU#7Ip>$iQ8l68%XY17=<lE32?yve+^ z(4$bcoZ-j8V%6>M|DN6bmiPIbqMd0M*QJPVouWG7)o%6_yA=Y5z1kiwj{fn$vTFU+ z1L-d|Ox_!>zP#t;{2yN@{-3vJ<;|IqiBD$+)#peQEdT!^ZbA8ebyfYwmBuDN_HSsO z73%i-*@gK*^;dq|&e?j|V9E<`|7&r_+J02*HQH{|7d>Zw``Rrw{>R*xu3c#;6RKBt zYFhj&#R*mId5?}JzLK5((Pa8znai6OPQLE-<0@CdMbiT}mo{29Z&Z(Iso~K*WWm{8 zBlBqSTGblMEqo`<v!=TJ=<2Xe``eqlS8Ush56_PI7nBsUoo!F7_hmUbd-hrn_bDms zsvfOw5|zrEtWy3cdHqGHu#H&>z4}2B!RzdU=B%xBeD_l|j^)LMdtonjEXsU%@no#& zW7G4mHO|&N^-4TpXPxUF7AE_peL>K%uAjZHlKwlE8vZ$cZjpFZq<Tx7eRAFV6#1b1 z?f;ygnMWKxby?(5)t>D#-5ctE+I;+dTHx8<+v-^h*BZ85Yb=~SQS41g_M;2O=Cy5^ z6|&=kul>SIZ_fEn(-t=$y1q%Z)-e32h(WKWf@2upsf6aFRvn=$?>6;5^m-DvZq}=f zna7WGv9Rv{kl)TIyt?4~ImX|a`toTzKUY0fZ*Q_*(V}8}XuF@-qplgz_Z}ZAo?U;N zxAaTRo*m~)uf62Yu)4E3<cUS{`EZkZqgyNHoJrhwW6|qVT)*WllQ>UVe!hQ2DRZ6c z5?NEn*}d(S2Ok$zFL}#bxNmbRM{M2S4+>uP=1)F<m;JrF@2|hI(^<uy*>$o9oxd=5 zHo8pZGW}Y5HRG(+zORi^e&^mjV|G5_XXPkwS-&iy?PB-@kH=g`8lNRUlG)b6s^zkI z)52%B6h)?PnKNr)?CJ2?E<VpJEjcqiycQ&`t8}|?SchT4s=#DE#?(tobG)C#ZLcd| z?0Hos??%Ssg7B$M8`kZNZhRZ9IVWI3?d=N-&K^E}bH!e*o2Q>%Jza48{so=)S|&SF zf6j|f70|b4t9RaZo`v~bRJFH7RASajtITzFKODu>d^Xk0fAiS;c*{cLu9vQ6&RhyF zuQV?`zRf#p|Lq6&8xm?K-d&ufHGAjD&A)BW{Fk&?v|Z~br$xn!zU{}O?unT*u%FTY zXID_tWLM;KkY{n2=CVT8M;`<%l2&A-Eb-8PdrIcAQCr)zCkO7<cYpfy^Xv1MAJ^Y6 z_ujE!%l);9Zy)-eb9kQpF7=ET`%1;8s3lVbKdW6=c<c4wuy#-B0VadP?{{4;H&`uy zect_B_3Lg{<gLE@W6IIe-}>VGjT>$!nm&y^Y&rE1L(7?m>#{ix?s{gcz|z%KFnRyB zg+He^urFD;sKQe?Q~H;PbN6~alZ2(AO@>(?*KISGy|vczulw36X5GGd*OM=@1V8%w zZen>{>Xo}&mff+RcJ+DP&)fA3Auo*@!7bS7ZVScKw+C()%jRIRFae)cvz_az*fZ|w z3olBlZx??kmcc&#$rUk;?aN<?G4e1QnVU>MkSMFdWN13Qut;3C-q0Ai;rli=d$RD( ztN;G}>-sk%ge%hO(#54(TSIwt8hLl$;ndkG&sK2bB)9SG#BEwXzgNm_)z95-+ruvD zqZKeO@4KtJl~ws%W$#aO->PIj&pBvVro?yrN~ONVGd-3%{kf~&tK8OeJ9@E{^SsA2 zy>z+SaISmj>obm9nsjuZo7yn>j%EJE9KE^RdgVbm&#ye5`N&F~d4b5wm>`>&n&(Eh zkI!Bw;BZj9JACPebg@{?9j|16IaN4r`7GwEQT1MTR=}3Wy7#&a%R~#j_DsFW{L;oc zyyCQF%+Viv9*2Hu?XAkMY`VQL?pQ9X-JTog+~dSze4E%Rx3bj7F?K1v_kQJcY{wq{ zxosW4;~KZN{QGeu^URUVcP64{@2z$D<{tmC__2o5%Onj3i6ZgIuJIweRhrsO%T87^ zT)nb%!HcG8dYX<8CMTu6XEA2_^Yg{-kOl^M=jpn?d0Ntr+a=$S)Hv+<%4qg?!*a_9 zv;DW7?z(yW!7dqPDVD@1Q|c{ZwoEqMD7U@%;F*eqwGn$>HQs#Wz%6I1F~_7|Up2yn z<CMlLhAB$~JH<=_g^s;#?3mPgeu1n_ukeMotzJ`_EG}ejaapvXDXv1O`RR>X#hGkh zt}?fu(`u-=(7ai&ye3gw(nY|a)57^P;}*uMBi|W%noMNhFS2z%!scD{bO}qn0N1;f zM<qF~X$q`q%y&5#lAs+~$tK}s7U(m1a>GY00nRT)Sr^>}sy$@ym)~POXYKZ+^=;xh z1|E&jGZR18n5%7K7nB#i?<<*ZIU)E%9Lu|y2Y*~2sZJ<TDqJeIx93P>)t=)QH=o|- zEwldF8RIRBSpC)ebeUuqsBIBC>B?!`T)(i9ebR?Kwm6{`7aBhloSm%Lxv?c*?_uhk zh07&{n~cARl(0xBPKakcpSVQt^In%d4KWpL5<3@s=d37gJu}VV_yf~#BK{T^c-ALQ zS^CZO<hN7bI)W$os>}=)VG*)<FwLhc{D8&|j$7>3%#sz%M|vkVY6-uH%n=Rzp?0lV zJLpk;an?zd31Vi8_H%AgHJdm!XsS_-`N!TSOaGbqB1ycuoE;o*8}A+AEM)C?bm9}| z=2q<^Y#cE%M^(}TWmp3i6_kif<<#Z8aPT>o>&&$^UWMFpz7y=5>KoX0i8uaudE%^6 z%6At>Ev|JQQ`()PJf}1t5))!oWYN1h_pRs`<=~*I`V#r{4E{@}9`d|(T=m&<3%ejo z*zzS`q$+r8*;YClMR-Ld=>%srdH<A2s4%Ku#=y&W-eFk)!{YBt<T$6SkW}(@Qs9Yk ze{MV9xtehkZ+eFQk`vE0_GHg*eJlDvGx(#%4AJx{FAnIRyO91hh*kU?(~<<XxlU)A zCmF3{))gr^FsEK4eTq=Tl;WATx3y>NeRI)k%K_0Pa_3|WS#C}8_;q?gPNzuJ%u^a# zAEq$h?|8#lz}&K#y)l17tIQ8J4pF1Yr!E({c$ISAd#$0a@=zwdLcFK>U*kMh7a7ge zm1&LN?f+MP`f`82ue!Ov|9L$%|GN6xgZbb6{r=Y%m6ZJ}tNM4U-pTZKyjr>XceU+t zJO7>b-SaKw)AY^D(<k4q?|9mOzt+6crndOwsubso@_VF;Rz)#OUTUoB`Sa;+`Ty%o zH$E~&Y-00T#H}YOFY-%Y;)7(v;~6#D73;4*Y-Hd~a60SOoY~sL^5X{Ao!Npr-tept z+nlyyrcuK5umkt{8eH>Nh&$DPT*hI#lC|Kv+`XOvgZ#Ez5?03@#4k25{JFq&uf)X8 zQ|;y^nRpJhUsvSr)zoa8;S<Xlwa`%Y;*zu*e}4aZk#Jh7=yy_yne>Z}Zy(YYH|rc+ zaj2$b!%D`u^at<e%#HitP}qM>&i`FN?$`7H#m@AM_YZ&GoUMMjJA88c_V+&X{ObRg z8t(l5@W<URVf7ZT_`gf>D&8!e;>sW5c<?}j@rEf@Ct{gT?-I2!Z%S{}(om3KY-39o zF}!Kstp56giF&Y6tC9!fDXm)xUD>WpC;J~f%t+KZ_}M@%i^EFbL$qNDmvTjbZr?fn zeeSdNY-Fg@Zu7Hha)0XNTz4$VfI(r$t>*gKg)@S79{4o#v^(q0L#uLF_4`URA2RiJ zKeTMsyZY_Jvo@wL-Cj{W`V)Aa^H}wJkFoz1O1Ry&NbN9NyK!=Y&9-)PdHJv0Zyeb- z`D{3PLTq7+ZPy8XZU4_n2jrU09MTV1vE#sj-lQW}YfTOEqYp+$&AO6XP-`$bp=M#$ z*S3H2>u;qreEr7oP@_Rr;?@N&iDSDKCOiIKv*Q1gDRqUh+fAlCJS$PP)zJB-fgPi! zP|H5+XCB`ixGzfa=eK+H-Q!ss_Up~7uFi|w*)?Vs2OZ9ATjDVHRE4C6%dOdbF6m1f zmMECA<ulCv=**nHR?uR<h$`3Q#(!~5nLOXP)DAS9J^G`*_0BBeyFpbtC;L4vuFoz# zx-|5W1E=0~13itVjU4%NzGYdriyC({@3Q^-<Jq4l+q*Y^{`GbFWB$u0A4m7c-Kqb# z{I~l0<<F0ctEVsb@AJ36XJJ+Sf16$L^B;##{;vO@Sh@T0UwglId+h7J3#tUlTUlBC zzP?(Tr}l1w&BTjFY~Snu=ufT|KmOkT-W{9T?{&9so;=&1zihd9>_)4^@QOO;IkWFr z{d@cF%agn7#lNmSIl22~`}5dsU!UmtXZicx^KUI$dHm<817aODRsVi(iL<r(XR)?i zPx}7JpU1nS_sh*MmigYF{(Mm$Z=|Wi8O{IyzMQ>zd-CP-$@}Ndxo7jY!sti+zi*GO z_pe_fbmW8m&1v(0mfIcd&)Re8_`5&z8CSj7cK>~}?7yvFe^#FVWo#9>$11;bTdBQN z+|Ic3`&$2Bmy|U4bo$B5o0~5S2OJhTvPfE^MELdJf-j#p@3)CoJ{!BUkMXVayuyNY zMN>k`(yjJ<;hd+v`{SKyjk#&&27fy4elopTpZoRy@^|`@X@7IR`npy9uI6k?_<2S3 zP3qgG*5_}|X{@{AUw`b!Q?1qCt?u#NQ`mEB+TFQRsy*%tJ$|_PkjK5X6YoCPIJ-3a z?Sh}q8ZmwbrGYGVw#*ZlioLGBKX~Qry&t=du~_$QEXjB)^gM7Evti-0YiHb&*?IR@ zeE21wF<Za3{=!VZ-Sb{<_LZ^QUHs*<fB*lI>R<hjpYPA#;`A%}cB<lZp54+13uktA z-{)KRO)OKRQh|3bpRd54(w!DOiROhnaucMVE-bE8;cwnQ$>xdD=jX*qj~0DCkg`+F zUffH5T?^a#y_|w6g(cIx6VH{#*!xdC=JfE<&ay`Cu04zMTqWvTDqPoAeK~wuy#K%1 zfp2*tDq<ocJ3~(GVf|Rd%XKJvdhmo>cQrB&&oC4A_e*}H8Llih-EMZtjuXB6pK7Jd zSXFXA$KUbfwUX|j{)v*Jx8l2FzRcE4m)jX5vpV$EtJ({K=cde*c6~K>o<!{5H}Sn2 z<>%KVwXO@jrMYuUOpNf0S@pAy2tE)jY7IMT@O{}jkELN&>bldfGfi*WVe)=q^^O{j zhQ|93XB~6?_?Z3P@1WDXe|{{Sl-%X_Lu=wPM+LQ2ojxK-A`^BRiA`&9Dly`jF{_o) z{q?k{uEb;Ao3m<`XmeaX(f0S?VHKn03k_~?o;z;h_VI0J$OQxAbf<?#>>plw)SD^D zb9d`3v2A&`L++WxiZJCKR+V%m>j_6A?lL>g{d`PKDnmlExT?nNjKwFZ#5>QvX|!HU zoKa}HIoCFA(=!g)ZMnaXR#pjQ@}Dy8)@yt=<zs&OjEc!FCvUygbh2T7wNUS^X7LOY z$=;ykmV?U<&sw-%BYS4OQ*g-AD@*TIo;R&;D8AMDb-E?5URR^diivq@S9XfLsK2Jt zK4rG9kltk;jg}dn+5uN3mqk4Y@=iGy))11zYM`(DJBIJfsVCOiUMsUbTTh<g`!HK~ z*7LxihUWdb%9E!jHX86w^i)o?zoim<?dZ=UPPGkbUXvbQQdG~I(s=h+tKD`3LnaY+ z-uc_q>fPj0gIqe=Ib4tO=<KK!+`*&zF0p3j%k0`$Q?G>R1Ub)Nm^3@kb@SJy>s<va zCFQvdjEsFdW_3TzTIZc0Rm<{w)fRRQzHQB$WE8GiNInfryJYj@<kD{{4~2f1UX4kK z*m}ll+p_adT1$0*)~gskid<-~@F3`gTk21S7S|_S7A5tI_1E%zm2vZa<CD?pqxD^( zQzqNVJ7ZeUtWq9<U7d^^>t1f2!BEhg&!*q^pfl?5pLBLZnVCoV)F!9hT+iHM6=kZk z&tPBJdxxjiVy+^}+x~>le0iIx`FnlMr%&tc<?3o8%X{_nrEi2jKE12BX69DS*Ntlf zl(lPPyVu!Vl{ep8KRIim)Z(*eJ}jSqs()?epEWC2<{$3XU3&iQ_N`q<ubtw*w)e=M z%HGxS`rT_(7rMqTk$ZkIW1jJmKb3-+dy8Ct-SfY1Us>{gf%2tY*)COwXP8Z%ePYI) zvQ7_n-KiW&;U&|$1Ah72mh)tu>$AJ|{F(gjZ)^X*tCcyrMwxp{#Fi;P>V4!7F6BP) zXnS3uQK{v()Bv4-FFUQyEV}&7NNA6f&ThT$%ZiRxm_5Fsvv20{EsD|MD>kLt><ryf zs=Mjb)wk<~B73bQ`2X-u%RF?VH|5LC2}x(%Vzsv`EO(S}ODOrqXgMw0i0APPn-yN^ zUjus2os@mG^HPlD{hj6iA2#PZNFLu(pZxChw#L{{$zadgok#C2{j`<&>h3+(A-krp zzVq?WdRg7yw^q5QKRe{G`&Q{)sm;3=<<%B`|JW=aC$}Z9H?mxLA#d`nMbYjvyZ&;$ z$y>d5Z(M3m%EYZZcI>{gcy;~sT_r31ujXG`zGGh1;rw;JxmTB#E%8j>d-CV4>_gYD zEn2;0di}atnI9hfJpBGW|Ff6JH(%bY`{nw_d(T+x&ic$=y7CmO`N``Fj(bWiImNao zA3FGKVXk1(;w8-yXE*y#eyDo-Ntjsu+Xp#+t1cg{-eT2a+-ACe*B;{^YXky6hN~<} z@9%qOS8s7eoIh^A{m<v`FW+U6{PB?OvRBL#HCD4_uLA;o=GQM+v?ck`<!>8vmn>P6 z?9?^i(_?qa`Xe*5Z|+`}=$dx3S4jJ3=*_@W2cz!`oc^{t<iZihFWzf7oA<Cizgke= z$lJ{q-TMBryS@D{Hl7nIySwh`GVfl+>7cx}m+@rB*+0dl#zkpPOMHcPy}#{s#pCj$ z_f==oGTq|zqb_gUr^6Pzy<Tr}OsIu@<;Tzc+vlx2e{?HLNsqvVJ3dFazRwk`mW>kr z%^7t&(4ju5Cj4vUj)}*ne~Gm7J{7*RZszo$&eQ8APP;3{<|Ey$Y$ka5boBPPe;@uj z?$$c_J|cE&qEGabDYAmS)6e_)?9F<SU$;&3M>_kuQ&kVv*R6MvUK>B{_nL1D>vjI; z6^Fh#6BAJy{N|A7#_78?w7)!C9~D>f{$Kq2za_tCZ_t^1-|$q?$s5}^)*3C_|L3UC zVtf0wGxluS{kfVmcI}0bg7)-ne2XU@mUwbun(h{f{ikkKNTld5i87SmY&^wq(Yb=< zn@^mXmKL4Pb6Iu9j^n9j%L=dd3N}AHmb@{quYSQ>M!j!Qn#(-qi=0_<^TgfqS-E<K z4bS%)7*DdAWvOm*dGT2_^V<<g8{VCNA~tD7(fhei7CxQ(&@T7X*>bNN&SkyDZNJmm z!gep$V==w+u}AV`&^H5z^G9N4@HS@7zq2CnXo2$92FBkz`WcP1`>KmMelRl6{cLNv z_G}REu_v65>!pk(#hys6nXzJ5J4;-CZ^J`bhT?2DwJ*<h)hZe2uy2~QdBP0#i76*U zuJ76`+Fz=^He|cF(5BKGhh<n<uU=kxJ!8lAn2^H<jJ)l=jrFpZzcdq#KlHm}_9OFk z`WIK9uX*rq*2Vg#Zww;D)ZD7v8o3zf@UuN+W16s3>U5*w5y$uS3{%**+Q;$g+FhMB zH`e&D(wmeUm2Te@ughHCv~zFDsnCY&xw#1^3W}FUq}Z=ASf$6%#*n7F(C|QFZ`8Lt zbsO^*JoZ|XYJW$?%EI*8QQI?#d~MyawVw*tEsI)vY~{)0sr*I!8drCHG?~$KTZ#L0 zf!A6iM#r}c|FGXVKBZ1-e@OkI#%-Bv3-~SHGA@*u-+O1zRcWhUrr0xk0v;YqkGjRo zbB29o_49M5q>9b%@Gs7de7vAdaY{l=98-v3@OI@qu7UtjC+3Nf9(uD6t-Tnz!?i-d z{^a!94=#+?pGUn*@?P~+k8z*&<_#Ac_ugzb4o=9E+h)qj_W1F;xq7+}I3G;CRDbJ> z1kZWRw{LfN=rpmcU31@TV}^&p%-;<^T~Eeu_<JsQwQ7BP#5bcOQZ;9`#MCEU+p52| zJMK@{9jyZW=b`$C7H!&9cX893R1SeVqC3@P%UPcF{d!>Ju5P!8`PzF%g+TF7hbB&& z!n57y{(R-$osX9pGKR2!Jh)b2r|GVDhnGJssrU5Vw&bm9=-rffZ|2-v>_!jw-B9>z zw&u=BnX;Cm;+(wD%RXm$yX6!0In2MzVSMAw9L+5ANxp@B@hqmymG{Ckk8ViQE#QB< zbd&$SY16ouEUkLCkYis$W)jn%J?+2vrd_=Fcn;^us5d9?=U6P+^@7*2X??iT+|w&8 z+?2bSA1|_~ciYS~^X!>Z2m9tV9yG{v=XvQNE46U9=9yKNx6gd7wAC|T^jbLElCS>n zk}A8MGbb8+s1d1&IVB_aUHMs+V{%14`@Csiid+&}mh9P(<XmvaXshUfmmCZ4BsglF zJn;FE+Y^(pTNBUhXyE?B;k%Ao>gyb@{q0U+$7LJ0{&Nvh30qe`Y00h_KC_-&wL|~x z^a7J>CNJXVnr`Kk;dH|8mC<vCof{nc8+Ml#b4%*wY*C(dQ09=!@`qO4URG{l5$v~2 zv?AYRG!$Pyp15G!&exaMussk+I&s-C(x{##HLUH;@B5k;IVLl13%vB@ew4#Sx5Y)p z+*@^S=q|gU)xJIcF5``A#rhx2%l0Hn{5hSJ|Hs=jA^Li^>c3mkf8N~4`&pbIec<GV zKMSqSO#Knz>n;|3*dg;rG|yWf_kXwMM9*I1ydpl|{LsM-V$FXaJ+Y8A+}z+GQ>=RM z%pLv4PR3j3WMw77H*0KSC_YrcS>E=*f7ZcSo8KN%Wp0oWJbihmG4BJ`mG=4%g&sV9 zy-??VZIj))mmYuFf7EflpMDUul+|qd#?@SE+b?_(Yv-9>|3XY{do82*LT=D*|BKIf z)V90vir?mBw3z<!ftc!ccX9Eb+>9369hJrRa4}n0nt*5Zx2x)j7jiLKSV9gJ*lQua zm6_21WUlJ=88+hPAdccH@p;?x9K?SZG8%wxK~vq{QzWj(G(D|ITy6V<67hHJOh$&F zg9qkr&#e{r*POlq<f=!@#O;_FjkYVU5_i;_zN<uBZF|QJaewCN=W4_kY%jkf-laKx z&oXhf?doh2hgq0ROr|%2d?3UvA;|-}ZS8@W>heHw37+Y%xFpoJmn%!W=9;cJPg-qz zhn@r<&-5fc3AOEetRxn2GMQU|ET6Oemy5)^T$p$HHcR9(Gg%lzq$IaXY|EcM%}PRT z`&Tu|Lgwi)E)w&%vuaDuh@Sp@lZ3|hV{MXN%*>XsP_gWitmbC2w1jx~&Q!^bpmXFH zm88_RZ<#N-h?~g}9DHiq>sCvi;AAwK4mtpRd(KwL6dp#S?H3P9268eQLyjBrI4v2; zHvPguNws=ILnG7!(j!jxJu&0i`&|1E^V*3TS<Gy;91}PvL^teWwJe!>+w$pz|NC9I zSFU|i6q<a&;MAm}b8D7V{mc*S?y1iz++ZQy!hibh{T&~xYyPd=zdvqTzWo;_jXC96 zJ9AFY7V>)h>Diosb9&Riu74kNsC`P+<e>VyOH4FWo2Hl@aX(gDQGfZ|kzlJm|7(9L zf2uY1^Ei6sRTST$ud%1!w+b3xnDDLh<}KqR6_<|6#&kz~*{gBmQe~X#RH3DTh3-dr zj~u!s)?2rG!@^UX0c_RIj-HH06E<0CB`wkrc3pX5QjhsZ+4Y`6o*vR-9$U9cOzUlk zTqJZ*qFzGfl|s{Zm5XYbCvE4y+%8q|+Shf`l9N*-Uv0Hn9K7jj?(<)>UOoB#eDCRr z@?pOGT<dhiQrsHvg^Jb5$@U+zws$=qmtE2`Z%cFb<azT;Kb$bD&e<L0SAB_#%T{Rq zvqhgzWVIfWDi^sKpe#MFFGu2%?Hjfy7oHf*klB||wB(Ro{eg!^8H|rk=!o1D)Ml7) zX^MkNnlr;U)d}_jPU{<V7!I<ftp8E5iosXp#fF((OY%N_T$A>Ax1h{Z4~D>Bo6cVi z{joWjJJ)J)-k-B&95WAXWG|Ymd*SlComc%#_R5`aH<=gzJ=SK5+rit*3bYqmD|q^U zTl>z&?OS^OA>}z1;wS#p7sWbspOZMe$i3&E=CUIx!WxOkru27d#=noq4E51d-#qKJ zWr2dkLOyFItz*5PzIpvD71`r;bbDmbyHMjmx!In7%5Rtbn`GIl>D`ds?cd8et@V4` zlEZ$JPF)DPr!etTyW6$1OvTqWZ`@{VBRK6+(%0xjtLXD-EXfP>)Rh>X+^=6E&)xU# z?Wu2u4~%P8GXF5T{%B(0X}Q?%26L7eH?+3xUi0;Jr-4Jl`-uIoZ&-g=vGm;hDIwL) zs_&;{wszIHEy$hGY*(YY%qQpmzA2weH7*rch)fl`EAi#P7ak4C%tfEiuy_?N`DfYO zr<NYD_dr>nr<?Rc6}iSqS9!dqskdy-sn=CMziDg1Hr^x4^rzPC&EH(Bv02~9HCH#F zbisz*{7gob_to6xPU`u|^}V+}&(l=-H6d#qr(yENV$t{N-2v_5x>`1Jkyk3zx=(Rs zmN?zsVD4Od)Z_lvibX#;tBPKyU)l5g`c#+1Ng*L?x!*kccQ~xX=6!*+)cbJvl^W&h zGBfJmm-WxN7<)Qy_gUL^>#)d1i}?Dj`Pc8C7uV;p4)?fy_Id4VwfuQb6J50#`rd^` zeA)BywsC-qNqT^YlRb+^Wghp%H{UFS&Tn0E^R-yT^0cgsr)%Z!emb%D>#C!n|DtZi zmA&3BU&rYbJ-@l{W8JEz-lG9FGat`f_HBjGvKXI-{`GG{)#@I9PJX%Ma_1_(*q642 z94bW}idhf0tW<jaV#l`C(&Yx{5<@@UySH$=H811*EmO2^1)X~FeZueKQI_{#tWG-j zwP{kg=D{!Of7v@$T&@XQG2b!!QSq&hZ!VnQsnGWSlH>c307naXZsi3XO*gl{bn7+# zI)DEke%)#AO<bvYDbt_IG4nGTOlM@1P}^Q~P4WuUbfwdhYRr}vCe!n8N=nuXl}0*D zSm+SFAi6Qfwf#r=<(1C&>sNYo3O%(re&wZmg37dt&yOd*e4nB=*FLSw;OK-abCzwl z|M?)hu5SB#|K~3si(5Aa7xtxD#V>CTJhtnlz+xjqpXXnX2WIcc$Xy>b+kEZb%eNY@ zDL!?7UTh(o^JV6#bIa#H&yRd}(0wVdaeMuCryifYb!P%vKJGOCS)J-QA++^d+ZMwq z?|t%n&Tr`s>G^Vf=`6FwTP9z1e_|C`e8k%5&F7haO#>T0`u*Z|)4s6sR!$(7U8K7i zZ|lMJ$GvoBEx)MJ?zaBL1d~a3;=68_8O)c7o_X6mukN$ne<x9irBbXZ)9ntX^myGn z{9y9tQ}stRCZFi^zRF-6&isLG+T0!i)_YfkIgb0a##D&CTyt{rxyzi^eGQFEPdGS; zay{91=7)A?!Gb?4SWkFNivO|gX4q!`YuRk--iJdbUhn-EwO1#>PWHr)iA!XIk64<j z<g;f#@ojSyUvhJ`p-`qg+tv&t4dH@KDr$2CTJyJymHAw$&+cKpF7;gFii~KXjQbX5 z-4^Z7eO(gL5;s?5Kg;Xcd?3t(J8RAy?VY;IpZvY0tM<0IvS@0UmbF*bjniUlRI^;G z&sOt$?R{D3u=Cm4y;pa5vutv0O@DkkE^XdS=ap(7e`_pSEhZZ%&iZ^(Rt8T=(1kni zR(qWj^o-hAT$nHM>red!<(^Q*BQFzjgH9IR|NKG9{EXJKe>)#O6Z?5X`<!QO^(0~L zIE6(YK0MKwk^ZO4FYr*jQ1ZHkL1%UAUdW$iylAX={zT<GKF8G;o;e)gx_;ESKjZt2 zJB)%)Z?1b$Wxn9t&438)mWl~YZ`kY>uKG~-eO+VD!$@~iPv&;5!=ESIoL#?W@v|Cd z!-D3XxT|JGY+0fq)lV-(E<KR`xGY3J>Oq|4+g{h{3AdRhPo3L&udFJj-`{9czrfx( zETK+EqxM{}x)kj>iMj84@(ksRNfv$q&&)#SvnKLCeHtew`E>8?YjN&(b~brkDCM`( z$w|NHvg`d<gL_X`Ob82HQM6Wx`DsCJ{o_Ts>U)9&Ql3BWp62cO@@Agc+6`Y^UthAm zeOPv*>-(#&-GYZ_E_^lD^@(@-tsMos!z;N@RTVFHk2r3-=ug#BcM-3f>}x*n5q*1S z?<M6mkF{Pd_RNx2dj8I>FXR2fwXZ7_*D1*zwcG#I>HYQ&+vkgNa#dvB9?D&8x<+Ms z(fQ)!fFJRSX3|2r?V)!%XYKv&@BC%{({0szf&>maxZU_R-+jlQ{-zz59(@=2aFCU? z*1VSekM)E3O#cpk%9zx(BU5$xCIdIoe{275efsa;L-{MG7TlZuP>xxc$-orS0PMLd zxt3{qpt6K|y^*mc@{IP<sMC4O+xhN(*Z#vCrW&-Ku}Oz(3+pcJ39%PlWv-W(ivRuZ zs~R{(qc=@vJ4aK+F(ucJg+BuH>f_J2E|)LnEa0pQF5F%7*M9F0)4%`L|NZ;&@u$c7 z6^yH$c%FUwxFe?5C`13cz!c7Zp9=p!_RaorrCv%tYPSB`xmRyBU90onZ?(7myEfbO zu*&cMo*&Qee1Da7X|GC|n&92b&!c}yU%vF^CbQw9_gpW}%j-<!<m%ZRq+}4)cuy<* zy-@0-Czrl;HlAC5>HY(5W1aKS6K_el&z`u%tozFeC6k@6J<o_=Wc~Z@W3S(A)-4lX z8rZh_|C-$&RIhP4P;R?p%?^phX3rA@?n{dLu6T4i;Ax{L(+8Et&6`<LQ!96sb3fUi z8XEbKo439ygmZGqSKoWe`*k<n->iFoy+DO#edYT#8OFC7rpy+-8NPFsPr8=!vz+`T zOH;US?L7H#mE2#orCQnfUt<p358?YG;^zM7^XJ`vPS+gU`*h#j`uJxPGe7_Px&1}h zW`1@4I}K-Br>bVUY}op9^6GZIH;;eB@Fj1~DthoF_tUh7)YL*>vF+<y+^^Tx&$jG; z?G(u3Ir;Eqr`Uy+Q`g_w@OfWpYiiY+O_P3~^-5ipwt?BxhTSDJ+48m7e9rdeZ(Lb@ zlJ4^Motds&n>kIy_1VMKqVHqtE4)wF|2cZf<H&-T6B{A~pL~ovWIumbh9c`+vAFr? zynWgVwuPyFl%6b;yCJuDi=Z5@(8m1BT#GV4UgujdbH|NEMjE$v_I~?#_L|Sc?JpiR zbi7y^%k8_#IWU3qruF5jhwhwRQ5u_CwrGV!i|5}?VKFH0W9Ie=X1LO)5RxF(wXS~s zMHS)1twkx?-sQ|?nb8|(EX*#GynnIOf-mq;?$OKUIVVhb$~$ihthg(AaQU7t;U&&J z%XvO^^~S27Tj!iFVDT%m+1G#S{=J@8Qfu$1PF`AmF?>l--K$rtvn~`ZZ<8>MTWTIE zBkg}wlSjhx!L=n~%houBF+5W)*thU<S<Wkw`rVT^=jOJ@aEiTgbAPzwaEaHJiNYqk zotLHNB($iV?4P{<qF=6IYJEvmWP+#Bqb0@3dSPccP2Extn*|CRd00xnyWeVjdWYQ| zMiZ^&g|`?twN0wgd;QnN&SA05jLuzc$3+D~3i7&yet5IUJq+VMn)i0!p*^N&vc#eo z*IDYGFRPd7Z=4<+T<maHd-AiyS(1T*r~S`nc1-p-JLf^u)ZZe_p^a6A4iogbRyoN? zd+Fsi%1w2hpEFUb+=O?^z7uE9o$0u!T~emjy8Da{$A7mg+Q$~;^aS5~cI3#3GkUpO zYbTj!9=%i(*1xpG{X&ezDHF%lZ(H15@)tgj5}C*8Yg5KouXk><yHKt$w`<gtI^(G( zIxP#ASZ-Q=d6zQ7wIKNzos{=Uf%{UIuuWUOw%c??PrgM~mVdkYiG(2Mor_zHRc=jT zwhvBl;+B8;J;&bPMgNWXmRo1?tpC@nKD+Ad{t}bL!UC`E-rOfVi!H|K#`QAikQaYX zWqmVF{>{1a{F21wq8ar^Kg`lO*yg{%aK3)JKuw+71<lirF>kY?`}cVX?LH#gcI0kV zb)J@&&y@VOZ5ne9y7i|xst0L*{=k0W;-rOs|K27Za{M9kbVBVko`ZUm6BkSGe<|Up zT@`$4PFvENJ&~E+D<Y$}yxaP%w^C+W+m^$*)1K`Pt+Tz)-4Sj+V`7a^b^X=CPZw5& zvIMFy*)HQ|@er9m(f(<heKnuCV@*=twDxan0w%1VdvsUe#b*)QXL~LDoAgAIzcou~ zdam@zgS%V<7u+^GtT}0sN9~-xTMbM5W?5~vV-|5=`_)WGcA`*PXv&1_|HUs;&Q9AT z`fke)-kNRKw4a~xnPs!rW$#u_$;Go5*Z)&|9`RBl@ch%9%4YMMDJSw5)E>@nle3(a zo?5za=0ujmW~)EnV`oS$k5Zh_VzHHP_uGBitrZo=pO(B{lD9d+f6*qck9!?b=BaWl zmUN9Z?X-C%v+Dov8(;X8CqAxh_`k|nbjo4x%709~8k0}$`t>CAz964-ob0ki6JDI( z`8;l4{gPd~Z!pfd9n<2q;qlB5I=b~z&!jcn_ib{0B>c2|;XZ9oHM3Rg=M{Ns@!K9r zy{+(0B#q_$KV3JD++&+&vCq(8=VdMb(rI=v$9u}<-5YK^NpRQ8ethjv*8JRTxvxuB z=s3t9nZuP>aYs47=tsusojY&dntO<EX~*rd7I9I<7d*Z7hXc#Qr8kELc-=iLcFv}< z+uwK3+0*>5C+T*q`MX!LcvZY;M9$}jF%P$Ltt@L){1!bo;rEj=!`!l{opu}bCI+-* zwLZRfZjbo-%;cs=(<Ha8Yphc}F5J6I@Oo`(EZfFMx!X_HMdz={OqF*#{`_#pstLX! z2Orvn&tp#BJzYCM`b|A|vmM8eWA_c-HoUE>^xV05N0?&ix+tI3n%-MhC12OqbTN;b zx=!`~EdH`vd@Q^DuCI%YyLWQo%ME3DOd02A*I3Ps+P?bo$Cs^c3nXr}tOyGHx@e)` z&YvgWI_$1+t9ZR#{Hy2poRD`)r*1#JnsvGVPXG5T-i(F$C+~d|kWjUdimWfqV-1it zSNyoj^XNjYJpc7uVnfrzM7n*Q=P(=#oMo3&lVa*<{LI<=V5F&G++Mr&YGqHS&dt9t z-%79a$D4#ZwP(Fj)Nhm~naEoh7ZkKBKYif$>{9NOJrXf{a$YA`28#bu3~awDG4cKU zrQg@?<P-n$Ys0EXLN@tFT4$H$9@_b*etqlXwQHMS?z+|e-|FSfIo~Z#JkmbW7bST+ zc*~CD(@Yn6Z|q)rTXUE2vU^39@^7XdzcKTvVIk{-(oo0yMk!a93%_4_*-+rZuXOSM zQ&-R1^tJYZ#*3Y&k3|2DpQgPegFA8Fo%5fkADKSK<Gt?5mB$yIxi~Fq;w$CcJk?uf zFIH={M8}p~-T8Li!UgZ2{Hu;nvEpp~vg{_~-JP;w|NRpTR6nh~y>Hq3pziNg$xlt( z8sCXJ$a8os_4HYBXx>iFUGLON;|%{yziu-BymJ5PtNCFs>+~~E{}1-Pvj6`F{s+F! zQ=qLLbI^fFYV~HQyH?glo$NboCbajt_7~<bjY*G~IP6$v@EB}Q_+>W3dAIEINis#J z-nXad>I6;6F>h+Sxb28i_trg8CtjY<oEh>fT5Y}h`$sa5zI=7B`tbhC&)i=xlYf0o zx79r@b3N2wzW?Q>Gu<06A3bCE>*eEr`+YUnPOXoc{@V4oZhhb>*QGgC88yG^{O=$B z`d|M4%%=HkuVp5w{0?1tTsQEB4U-0U=&u{n|Mtgkz5S`@diTZbWmPMlKD?AMb)MeO z%)0-QFJ|v!Y^}T^xmWZ`>td6}sC{mq)BSpu-89Ot)XDc(PVTd-G?JUQeEpGI8+@c5 z#^`%TFnJw#RG;_xzs~kOvz}_MIWEicV~Kg>r2oHW{F{>|eAw#mQ7z8TS<CFzcE7s0 zs$+ls{D0PeKQ-B{ofSHZ*W~g0wKAUCGq-QL>6#zfCbe^W`JF#WW{OKZ{6Fb+yG1;U z{BI)N!KYg1Uil&C>B+fuPYo-d9`bK_zf7ZT$>#ejuAN>}@}?}yxPGbjv=X1pzi*uU zJFj)#X};Q^(<OHC*eV;DlON*T*Wb(%pI!d{X8+f|C(Ea$s`jrCa_CmtI^l3gVe^Ry z4e{K=GFv>Qz87C<WNGL+y!3!3Q%zUL#i@aX;<8uU76%;UPvN;Yf&IXGpV%C^y)5%C zeS0k&^rEVHW7{0YivJ(ewM948t0;74=QJ$gxX%#&;)cV`6_?g*p3ZSZ`jnEw6RjuP z71?-a6e?CmuL!Q=GB`Z9;jx&+o{B>=o@O6;kTuy_YF_V?iHwfzI~ot`%uWy~?YpEd zF1#UXOZ(@PEQz0-6KV{vowe#@S#xNAf@nhF%|CC{3^v$Awyu7(UO2c-@XY3j^%nKt zV&AOm@ln$5`ta)1w)qKJDT)`*UJPCO!YcNjQzz4_U0Mgy{^*<Bd7<KYLNdNosAE3Q zxlZ+s{b$O*wJ&`BBlH*h<ty>}C%Bs9H)`$XpSxsrUhbEA<Mo<p+h^(hao^2&pXH?0 zx))Dfw{MJ^I%n_Kf2FHASd68%DD{@G-eP6hwxvGO=)ukwo?g?bl3x{CBw}rObqf;& zZ>_XstZbHC@=NG|O!PMn^G9!{W%;w#-c{S+Yq;O*&F{cwhJ9C6K2Bv;QWcX(-z#uK zt|nL1NW*m5l(RGaRvtMrGdpm}q|ee~SyG{A)-N-gIj>06X!j<z%aI#%PrP>NStPFh z;MS6iqML^U>OCy4m)A5s+kf4>Wm?L0?Sv&>NoAUb+gSScwdt?6G4gzuui4&N#Im#Y z?^nNP*;9p^JRd&mOh^#D#Ln61oV-AAt@cGLA&!E2j_jYx-#M#UJY3f8%aY^R;-+?H zE>}WJ!`G{MqAXw5I<-tuTF$!4xY{ppsta>S^Tm#`4{L8OF|5CRZ->0Iw(7Kk%c*)d zO#WL1_guUr!L#(JTbQs{pQ=mhsifDDF8{8ny;R~9d%fdS_!>4g4<DH?a!0cE@hf}k zm+4jg+4MGYm8NX(i_PU5YL=;g|NcvQ-Xtx*5aSEprrV95sT>ltcz9;D=#4&(hMd4P z?VdcdmhF8k^ok*Q&ppl;^_hi7lUA4<S@1BIXS>E$VT%LJOSpC~+~jT-D^|FAjb=*7 z;qV1Vl2lu!^l=u?jL&3w@gnM*iC0nCYOSYSw@&i3b9=?#+<JI}#}#E0^%-t<EA6Th z{r$?1ZF~G*W5FbmuDBV-SDv4!&xqDA>)1WTYz^CP=?`xW_G+9s8NF=Ek_&U{6%8&F z-U>VRK7He26WPf-7JuL>{_54X{P!op%UL&Cr&m{rGk#fBZM@5~K*jD&H0#mSnOk2K zKVQCep6&XtL55nBP6^HaqGvW${r!<;b0#o`2G_b*dG&IyK54<xlg*|V#I*N{?*ks) zfETl*gBZ_sisU=B&0IXCo69@G<w(^M`%Cqzedbq1HLoPjEAR~cI?Fm~?YCV~GdH)L zGgv6b>CQ0IsG#PNy=&SMt-$AusWrKipBVnTE>&~>3CEVLC%B%^UC`zKEa71sTMB2) zWARzr;)RzKy}J<8T6lb>zprqiTYX1ci>^#}<b$p%#&yR06-6&z-7_!UUVUn1#AE5H zuA5(Z)b9(_urz72%CVP9P2YVirsYQE$B9p-Y~Shd{nES={ocaOHzzyaKXg)SzU<6< zCbEq0?;lruVIXOL`^NMY`et_o>b25dhWpg<B+V(yp2=<$w&GU%^D?Hz7dMA><iyD3 zD|fyzxu|!y#H?F*?k@xNQnk5kw)&?6|9)<=j7WWU^vjg`P3LbMS|2{;Zj)K=remA7 zTzR%=nppM*MS)*Q>*QAV1o_%IDQ<qG<>(MJ_tuN;vshxq8YkX&d}6QpowsW1@w%$a z3KngC)kB-#$@V;-W4A_GyNt={Q~T_7v!vXcnVQv}o%qG)d}qq!yYntA*<aNAUCS`0 zai8hbh!@iP<16%*A6Kn^c3W=!-kavpD?jb-7INL%8_D#3-hQ9tytg+WN_=~J?b@DM zR{xgo<UgBU_V!EJ>++lY^0K8tT5Q5I5|7XHid~&*UY}Z?vh02B_gh<Suf?i5$Nk(Q znAB5uS3A@0Vsw-G?+N<pZSl`S{q|jVG5O`;p8C?(=ui>!<@Nc;Uu3)pDXkZ=ba`F1 zM#SX&2QPLex3ANjzUFkv_zJhr%b01;`uDuToH=>r4gvE%F*5eQTrFhw(IM<)&qRrp zAN3CJ*!TY1#V3Cq_fM^5uf21Cr`Gcm+oKtYi#)x~Z#(2G@ZMj?W16+*egWU*w`P3u ztv@&4<@GV;(>d&0%c@?dXngIRldQWev3{EI3GK$4yU$rP`kh)d^`hg}^-eGRPvwP6 zZ@<NmS^VSS%89dU3(g)?{G$GI%l)J2FP?;k$6i}rv-il0Sqmm9I&dC!mY?+DYLT$p z^>vXoRUZ>J+z7lfHTmSeE8lAvPW6<Q8NTs1pD&{uaKo&*j`N7kDqDpu_OGXB<hv@= zJdL?7SFfg}zkN@_+3EfF=RNg2JF&Q!_2BJyY5umK<mDH=-6X-d(7!qKiodel-G>Vp zjwotMt!!ISZeH+WrRejhMcmwa=h&~f-C=EZun2IDX*+&n*TW}~c1_ilU-sWK;+Q7$ zx^rj4<8)ge*3SKt)4pE5%zgK1=c74OC!4?J>uWrgzD49py=Ja}ZgS-FS(=5bre8f( zotwRZReVF{rnFUG?C&q~e4S=?=BmK4Chl0?*bR&!o9-UGeKGUY!K2-Yl74S2Wz&@N zR(3pQd!=(K%4y5vdFFS8-g{kq$r#-9@3C9Q9dowEHbaJr7x|7++P5ccwANqgKYQMy z>E_eU^_X`Vt6J|_6%bu-^3;kyziCqIEsdoT&nvE$9bS=Qz{(l4Ejv?oj-_`+OYy?m z=TBaUob2f8K6j+d;O8Ng-%5v1cHO@F`mNBRb(6Grer^5ic>MF$HTy1ewOF3{D485@ z@>s}G&VQc7uR!@osg&aR;;P&B+wN&!nJ)TUVqFT$1mo+`r*6Eh{^Gm2O3%ML;=F?U z^osB1^>h1QPMkiy{-xlZ|F(<^GM;Z?FN~ODw%B-6_{SY{_PPFwzp>H#(AphEd9QW$ zl)YQ>HRFxUnOp03W+|9%y#GSq{ts{GX+B|i<I+)CTy6X9&yuIP7%irQCkD^{lT_lE zzWKAHM!kVK^6*;igtJ-9hCD6rYq|C|#Cra_DCNZ0xa30g!R?ovH@|!~#rfX<Ngwm} zEU{!!R_RImVpyW8cud$x_4HBx)??gub^*_~zSr6-&y@MaY(~J`6P?oqPR^{{==1f< z-o$J1&kPJtpO~Xm9P%tCpr`)st_03#%e<KSSL!vfM&~ab<vjGV!!`PsQqxJ!W5-j^ zS$TioD%|;F(j+^f#Iw^c#C~Q-w|E)<TGsKnooUG2sI?W}clRdm`#I@xywk4}i-RVJ z?TlIEE;N^YW6Q(HzhBFk-EN1nKtsR+JYftzL!QOZz|sUfn>^i|Ps*+Sd*GCiy?-}$ z_8y*pW6qs9yl2|qewF32JN$M2r=O=!fBU>XYw|41_eZ{cDy<gs(b#KidAw!w?bC0! z`_Jjte*SBko~mWJl>PkqQ;a{p{QO@3KTD<mF+;r-6ZaJ4v4jX!d^X*>W$DzZKP2oN zmpu)5Y<0~cccUAF?D_y_$C>(D1D@O0$6XS5qQ=5~>_izyKridnGWBgdFT4Iu{}w!{ zw!Gw{<~Q!@h56?{%H7VInUyrNJ2k@k+fDPu9bY%PoHmKek~WRK9W}RBYVUdfz=Quj zI)4^DTHASXrOCFHUpF|f@JUY%)LCDa?>=wV%sZ;p*{;d6FD0*Cy|efIoTX+DXNb6! zpSx5)?<ZRx+po+?lk5Lo&37`C-EmOt)+Pn!1G=GMFQl2pzql{1)t9uCdB3^AZ>jKy zP!YyYqKwO}!<jiwxZd2C!BG_7<}4%|b<v4UZSVTIhtDN=Us%}sYsxP1-Yn%4?@Ig& zPOmZ8TA%X5qwCs*iIG<?q&%@VTh?TL`~RxKwP|rX-`3Y&b~8Hbto!TzxA$+oZ?kA5 zf7qBFBb5=z#q-!<*+x6ADT{Igyx(nCXpA$;cU`UM>G9RlSnMAsYuS(M&)<DJFSGs3 zvl-9%a@nMMnFP-n>z??=SIaFvY3^fJHmyK`sDt)vAI=Z;^bId^pZv&Y=7rTk+qpA@ zwU1=;1|2mJS|}7(ue2t$m|w!2Pta`DzQ^;E-d#*K{?Bqer=YifQ;YFG&Mwbf>1SS( z8T$OX1ZO=r;z`fzbY*^guy2>;tC&ZIt7lxOQ<uM^Y~ZuU*8X64$)e+znESNK<YUbX zrwC1wO!)cx#ZJl4?B>AdKFuXQrXC86>Jt_$NpWQ1Dzpe~e7$saMtuNBfzDxv&KEmU zOMb+#zyG`D9M^fSycv(muHRJMAn0WL`iz&i$AQ@f=l#`MZ2n5~h^#x;drU~mux7@E zGgJ0G2wB3dE|t8wC;OLN>W&i6Rfj+Ssn!<$=3FCg&|5I4(cjth!=c{|$250&|8;!q zW2d$@%JkFb2ICiOXVpADy)^w<Z}3a+w~)HJ&g8tOYc9UDHPoK_vb(YK^s9?(GK=r$ z&3dHbrSkBsuID%3C9U~heUmP;%-Go3d2v#vodiR(eCgCXL2AcRmZg@t*xj_URW5$? z^z*MrlU^n0Kfbde`+AXq+JWtJwzMC*?H#UOETnq$<NiyRE&e;`|CF|Q_;UBJS&JC! zm-QQJKD}D?akrn;<KpS=)oZ^O>KIM$uHJkz{*a!_O$$f<hMlq;s;#?}f2PN@U%9{g zLV>Nf#o^M1rPKZ~UN^Mko_?vW@Z_KCn#Y1;`VC{&ZCKu}She}}^+}%E2Tq-Q5m<KQ zyQ*@S`k($(W%+l7E-N^vv;DsKre%i6s)K21%t`gJFPJ}QW=JraHurBo)0r0NB6RKm z`y}g#?ppO4jo4%9_6$y9yX4Ahg}s@x)qg81T*(tVlMwP+rXkqzIL8LgIVR#f+t=K4 zubJB@obsuu+kNKoZ2qMgeE-W2tlF{f{o;t(tIH47o2)x?WQILcyr`b?qqHAF(=^{} z@AEjsS(ACEKD{+%*SfGrT&~Y`#g1HG8^3kU*^<nycfUSvHi~_&a9v=rZ&=DMk%sD% z&u*=|UeuRnwBXvBilym(y8;VC#9kHYFZ$u;eJZ7Hw~D05xjWK7C#GyzRI75PM~-Wg z<jps;C$t!UnQ*{kc}DZ;=f1l0HH4gBF`hbNB~kYF)XhEbZ{NCEzi0YhlUH^}?lDG) z==VF!Jm?gC>~?MDqyjdvC<AT3MNH>~3Qn8k{e7}nYtD_Uw=Z#SdHb53HB8azR?7P~ zW}Iv8Kkb)#5LS_*>#zF#yIXCvQuK-)8(yZm$HiT$44V`3>6+V}B^A~O);dj{m}{ID zd9J2<nS;=|g3}QaJ8fT|^3kZj<=rcJdQogjh0@at7x|OJ?v=h<yR9wC$~mXkS*+Om zuI%?*-9qb!Ti%)cJYavW#_Vi{)3xi;U%oP2<|=f1cXkF_=ak^H>&!eY4x89meBa_I zezVB)=ii5#XPy=9`E%*XvbVPneZFz(Ufzc-yjh>bLaOtR>9{?6qrUuA)4lB$LW%X= z((Wo}{>UAep4)Ji>D&(49Gz2)qOupXingylUht%>GB&Yl@r=*SzxcUkmwdV~JL#y` z`ZbEyC+(m4EM8WzcT)w=1=;_SyQ({iUoFYxQ!2XVH`D5Y&3Zm#elN?+4SQaEI_s$P zzRxmcr?EFvS%GE3_kT8<PN~%O^345kvEgiKb$!)L)-!(k*`VCHujS#ZH2#S!DTnH% zd#VpfGdgprdQSPd<&o*}+?kJdRaj5gUopYxV_dZDRz3B&yW65QYxn4=c<i+MGHZ{i z_(JKTo2l1NnQhXXarxx@)AMKY+@B`4{cpvx_RNDmpS*9)J*+Wz#q@ittB<^Vbhz<y zU)L1DY~zf2&BHsgxAA)(64|}<;ELj9j_hK$K8s9p*gW-9=iv|fDjub(Em{Y^OI%Zv zb52haH#vE?nm_kL_qRPJ_s(R_uFDPD$^0@(_D06+nW}5j&Y8^SQ)$!@bdHiS|FE6S zQmfJ-?SyznyjoM&bLJP5zf4tAy)ySt+n(=z$M`3Gzx_=2np8cno$-3^Ge6XHl{kYn zrn4<RH?wWQ%sg{p&qGWa)e_M+qpi7~N^E+3YjwokE8^ls3_@q${N4JC-+Wf~jI4N- zE^FqWIn7Sf3fXPK&KO5kB>A6ao_uzTCzIdjgGIcmiS0M4dv5eEF3Fa;kt4A~gYT@x zriMI;`#W!>FdB(#Gi|<AuM@NXa`)Q3PyWfCo%%kRPx;2vxXs_YewA7L_uAh6>R;@O zM~5CwI=IqUT#G+`)>ISD8AtnWC4^XBZqSy!y=SVE(79&Wp0zA{mv4M$yR_E&R4C8h zX=`rlEI+$nLtZOixb?BErPk|@`AnaL?kou?v+581q4f9MjV-72t?iYZFJD*8SbANP z-(@b-1i@rum&o%v`9j*0CcHYI#N|`?(VT--cjf0;v$=)^^%kw|cejP>^>QElW%ot$ zr`i?y%`W!8K1KKco}>Rw!q@Bc618U~`&B0i<Q9k@V!Ly9$y@nu`$IRL-ifdKWxsQ` zo<FoD1YIQ7CoWaQ#bf|EEN8pAl9W3aqXB3MnA-NKI#R8ijE3L=$?cA2QY$&83-C#) zZx^(ea_5+yAugr1z0O@~5BoGFDfR7%{!+&{r|0QNsc-j-lwtv`BV(K<rnbE@Nh%)1 z5#*Cn+x|aW>JukuQJMO7i83iMF36gWkOnDzE=CjZ0hilXc1gYDU^InTx^uGBRxU<U z&@wf(?NjGTP32-XGz4EHq_$mWhtwy~&352Mtm|Q^NgxjR%GAGSr7F1?!2_x4+vnYo zGUR47hZyngvD7|JCPQ;jBT#Moowri+IhYKg?cl}Vq;`OLU^ANjOWopRGPH!aqlHtN zi3`L7`(mB2v<BDo_YcH)r+10VNP*TJ-eeM;?jSDCS#M^7+=PA`6WbrNowxS=`W^jm zyWK=QJz1ETe>Oxjvq~MQ(@1!tSZ3xLeI!~UdcoiCw(grZ7n{#Jrm^N@O^N)T#j^38 zN|hcHmEM>2tLpDPr4;lba$1ng{B0|w>|Q6S{dm)DJuka*<+Tr*-mCw}7SHOdzo>0j zTR%}IV!>8duV??ixrS^A>2_U{kjJhYZgZz};;R{Vb0>!V<X!gp;5|dzs^bdNjKq3+ z=BCyNZxYeH5uC98m~Wfj(Vf~h;j5D8W_V{lSn3|{mA}p9*cXO_2j-bnA7{|<%9YsS z+AYe%<g;5xanp)kM!7N%4HxmXHxe6!b026P5r0}A=cKS`&c;n!j=KEt(Q(ss)9lVX zDIswrVgug~^KiZoKBj9HS1c>Ee{jU=`{G)|PjVIKSf%+-cRO=QoOsj~%6z-@liad^ zp2ihFA6<16Y5Krc%NF+i;O@k^4H?WjS7m;%IjwKiPId}i_lCDi)b8^1SFBeKmK_cE zb~wM)GA;3<Rec%9$!iU>7QMP;)XK1D%cP$^v9p|_7>}5={#bnMl8g{<0=w10dO;gr z295>GOW)`*%s&>&eEaRp>bwh!0^(hq6$1|})85CoV5xIZ^a0BfIR?%Nos8R<DiW;} zE^2;#P@jI(s=<XLMAq@8v+o2Qv!ypA-JF-SE>@iTF;;c)<DJLqW!c;xEdO1>w|YYM z$w|kRd!5fsejt9RU1Y<73HCVwBD31X|B3jmXr6Sy<-nJSo{(L|5j%LEb}FtlzT9AB zt|=5FyGVp_n&lCejT`yOb>endZQ-!#D;4ebEPm&*(<$6;bxh-m0~a#ZH!B|Pa%FS& z($<?>&A_%)BiEd{CMf4kPkpzzd{}<XHYxLy@=FWrXLe8bn>F)_cZ#2K^R84ej+Xix zb`AfVREzi<79S96-|@m>P0{{_B`eCg*cOPabrkv%d+YeFh6x!xrHsBCZJtDL?CI=H zm!5lJ0$+FwXYbJ$vvNGx6+}NDl)j)D#-8u6<bc;sy?XOswvtxcC6pHC)d<v|x-&2T zsJTt7WW|da56nI|<UhA#a588A@03+@D*JTwf6aSrVNLucvd)t@yx0vIAD>C_*pVda z6x7iY_3MY&<yFUih+SSVRUv0X#abhQ7Wu8bF$ZIolu0}1ENK(gJ`!}=rBk58cSW4y zFR8VH&cAYQDYyN&sB>(>Wvz0hmYCHC>q}SOy=Ht}^_-NgZrh9t>_1vdc3n_u;d+_6 zV1~tOt8d=hcK803T3#u4z9?#HV})P#PM#0RH!{1O=9JE3lX$dpL11!6rr{CQ7QsD? ztzK^qNcSt&9oQT+$;Ii1fGMMJX~(RrF1H-+i46WGZ@MqPcxJH1VjG**0gJXvmMkU( zYHanEY;q6uKTAlp+0A%AC+xIDk<{KL7ZyHvqRf%;!-9j2<H7N6p6;XT3|h=Aj+jKG z=)~7-to-`E{!Y%mn(yzv<$eA%KmXm2+w%W^y?Z}<ect{56`%i=9y>UH|NTFSpOZd+ z&A$2Xlj^d)cmDkQcJ=ME+4sNw+MRyh?Ec+7d#ictXWLw^zfql}qhKqlbymr-^1glb zx7j<tJg^IreHJpwN#sKQC&srP0tZx@Zpm>Rst|U)<8{a}N=MS*ma^id9qQlye7h@a zzkqSw*SpVt2An9nQLyD_S%<*Uck&J~i)0#4Y=57Bf8U;+)q8(_oBe!txcUEGxA*+` z*}nfy&ECI1vVMPjr1axg{hd2s=G!$ShBEVLOK7b$Xe;#pAo!W{(00}Ki;6j3bI+ai zUi91{VZwvZeg}bRtq0f(lU3TJA82X%88Wx;og@DtJR?5wX~=>8Ka3$)st!e3EC><| z%V=fS{`~S`jmOmGLF{uMN_i(0^b0G_jGy($?7ZNG?ZT@C4Be7mbaXH)rPQmaa5i4N z<P)4(Yv<UZck;wx9Z{8#tlnMGHr}VU&YR0uZe_LRY;cy|0f9Z&{EA!Scm;37oHdP% zj9+q0VEvONJ#z{jOpX=ZT5vIP*6NQA8xGiq$A#Y!*69=OlsppBlwH59saa7@NvZgU z>F3W~9p4&kWSr-`iivQYrezTzY2;DwxAeoY<&2Z|@MmiNuI%`jqV}ir_d0Ihhnv3t zeQv+^r}VXl%=X;+tgkgCvQpn?Zc=ZL)U@GYI?UAm*k<;uGoP~T-(;4$7JPBgvYNEc zZeqygsmyOX#e=#QJ95jeIF$UENh~jS*5SI%n|{xVy24(?u_{>l`W<6Vv)>H|n;I_6 zdQ&f<)4}e2hRfmgZGMS67jGL{On;yrb<1v_jli*(Ro5$y98~_la8K4gziT{euD(vl zWjz*O^m2{BoF@!7+Gk~P=yH4OS(;v3Xk+S_qw5h?HQ#^zbH{Vi=ViqzgBp8e75AQ1 zPxDyIbxtB&NB+>E$e<NRWnXTVZQR{7rRD3gNyS|e^<0-q-k%AOI+Sh6)Ep|z&GY@s znvYDO>X&Cfo4PPBcYm7fa<1E~nw6}tw0|V|E_*Uf=3zB!w%AvWN~WNzw^-90nht)- zFVeW+c;US6ZL1XrCa-)eAuhvi@#jv?&9id79Zz{?I-34Sn)Xd<kHntvwG7_Zer7yj zJ@rD{VZwD@$GM#KPi~0?r_O!C@r|wg=%W2fx@ostMFf&+`VMRO?{0s$&&!tQIgj7- zo&wP_^Fxu$jz6+bZa#E<pT7gkt|E&`6PBzIX8ZJ?&-%Qrr*)Id+7D?Rt}zBj%qGln zn<>3aQ1LVCswU?2DL=Q1yOm^YTPri~YwN}I{w>!e-mH{pVm!XCxwqbF7MK2asU(G& zsn@<9-`iKP;(<W*g6j|6_V_Qmer<aE0j5opn6k@qqhGge6g_Rw6nQc1uC*7hUW`0P z)VCv2zhj!#u3h)x;rs~i_qj(RyL9I4^;eZX?YP+@W~xeJ+#9VO%hNkv->5L2es9Z< zcU8f;+a`Z~ozi<YziRH9jq~3LZLKd`SXL5tJ%6LteZ^HN%k>xC*~8m8=ll6n`A=&m zuf42#tX9;iBFTGenCBZUH<^hyQdiGSjGybjp@HGIR^`OL1+w!!T>t!gRu{#ZTiUGj zu5<0pnTpI88_%Se<SWmc7v>%3Eh5Qb?d|P+AV%?IQ%`)w#Caz_=zMvvZKJdO!@M00 z^?_!`qSH1@pJDvLa{RNUN!#2vrgsG2oY{EmBZrp-Q<RkO>SupiyhN2k&0bE~yu19z zRql<#QolU{T5A8AZmgYqGRw^`Qn2Nl(dpo0cAjl(KgtT+JLgnBf%TGT^c^MN?%eB| zmNA?*+&#Ub+Ga`W`{W*Ic`iBgyl>@(&tXfCY0RweJlL-Ef3fWu?U`#ObnXeo*WVCa zqF<^|tanhfectw;)3rozx{1duzHGKk+kHpe^i`fWC+^R_lY3(Stazu#?+)gz;?8|& z+g?4jHoCD@W!t9k9o0Klva7AiUS+mcY+u%s(<csT%Y+unJgw!fmnk@x)qln*acbz+ z1)uGb{Wom%kEmA@wt05+*MF}5yPtk9E=o1Eo+Um@u6CEszw;~~PP#wQ63wwtDs<X- zNwKvws-@#ZzE7mUJh75DwXTVCtzR=c#{IfxH21+Ofd-e85ic8zZZw|o^9xhpnd5hQ ze$^kNwqT3s+?<RXZVW%7o{9S1U!&zdY0sONoSzTfN*9h1eS9OcUcb7^BkxDrvy`gU zmm-W+7HG3EZw#5~_hGraY{RZg2@f-`rFoZJ&5jYcAHMI?9%T;UM9r5KEQ!T;U!8cl zmxnFYggGi`vhoZCW}z_lZC_>-m@EtKfAP0`echp$f>5D0#q=HhvHg3MmZyC(+J3z5 z>CCNHe{WY5xD_tFRc7Dj?jQAPp5K*Yf-C%%=EWa35bI~ye`fo>8^$JYXC?jG`+(E% z;Pzuu#?OCm7g{szqPE%hwJqK2-PWoe6JeR@soz<D<WNIld-mFc)(4bj{w;bV5~#vv z+q<9h!89(DCs%_nM$YJ~mEP3d7p^+<<LC1cZ>F$tyZM!wvYx6`{Gqa`|I<R}*!sxX z&mZf%A5o3dUsG21!|Z8M^f|eWWgpI-aIV@LQ^$X&bnb-pTbH}!Tub`%vhT=#=_5t~ z&+pG}Sl&~nmVVQ#N?uz&X7<+j&eOZXcK@64dRL5vTv43(u|vo29Q*3ZHhtAfb+L0- z<K}JokaFAo+4CadS%=yGZhe{+E`831>;AgltulutzfEqmW&Gq)_<ifgVuP>Mr@q_q zbN^@DGJB`O^pD%6L>R$amejWYmzAEv&13)>fZo1KQ<{$(woU1siF6e=lOeQA*6$$A z&dq2D>5}dBme%41-30*J8pRtf{g)ebFMT6u2a-{;^bN373%BZagM4Wz9@r76+Y76u zd$}PSd(^h8wo6|E_qISr$WD@G;Q?)80v(mQ-D95gN3Q7~TDaA=$FG#0#mQs}b%VlY zX-;lN@I~Zm+XMDVpW>SSeWJA5c88PFX`pTwcvj);W$8&AOy)-06YoeTaWEM{ds(la zNVjn^8CgJjU^CxI$8&&q7Y|CRZCCg%t->`u?vAv^_8dl;mmJJS28Poc#AQ^bCoT{X z1NEpl>WxheP`XsnvFl~PU8)(!ck6GS<nfA`gXalzUNf8PgeQt?AF|iSh`R~z_K*Q} zsoH1V41JgNR;+aLk45_XWOy|@pIC~Nr^y6!ct<30ZQ62d|F$Ionp0FwmtGJ%dUr-r z%$6YaQ%Sv67pL9naf-}ZP?Y0c-z^dpljLFY*gi03(JD2s)XpTmM5nU>eoggjcCb8+ z*{R*=dUB?aPS!&frtW8AQX8*3*-lkG8l#c;f8_<IhYcd@R_A&~?VNS+kW?<OnCgXV z34wRY7oUE&XRE8zlNw7Mp`9nETvqa|Fn_I-q<2&4RrRq)5|3&mx7~c)veuI~M!a6@ z(&HxH%zo}U7d5sVDBF5`=@i$aG3)hKy%SUmE$)BNH0?q1jHPO~!eX~@=4Qv~XnYTP zoivfL*}PkIX|8v7r@N4+=~s_!n`Ri+H#tOvO`mZ4Oa_P8rX~Z&Lp7#FJOUd|d2r3y zs5VpRi<DSb)12oEyfk$!-Q<~Fl0I(S^<+v$eWOqME>_NR*9!6AR9?Gl3aRV5*Q6zj zvFN3&mf5`Fi4LFqnIMT+CQWNEmYrv&-b|`0D&=-iHQ#=sMSJskhbakm*QN<^hG}vN zJy!a$+`?e#gS=0X8}2rR1W#I;v4mAA&g3%FOTA};Sv#^_<|>?1?e3qtR3ym5x#dWy zXpW}o&-#egBc-A~+P#t?E$iA27#6H;^O<yH&y^Qq5i5=ziY$nnYjJ>o$+P4KN^|?T z3POA5u=cF#Q*%{VrMf>_F|;r7WS2wmA)TYwTUXx@xqh@aO8L6$oNQgYH1FJ3$v3<| zmmcgFtBG~l?iw%dy)B}4jb87Qo+aLs4@5F>J9KP5AZby5E^@)0Ie{uU#vcu%qxkIF zB8?1JdL$R?X)xUBT7P>(p08b-QAnpJvqO}!8gJg#W1CWAWG=Fn^hoduE^O5hc{wjx zuR_vjl1@c}qe@2~W3npu8JQzK6RpkkWPNH3XU(jRTRFkAF4dOzX5f{YE1m~zTZLqe z??fsl&gEWMv4yjKZo{46Cx@;+mauSko!fAtHM-=<hIhLTJ6&sao5S(Hu{fre?Z$>= ztDuxjL$Ul5F};(Izc6^>wrF$s)U=b#eMMY>%$wyk#MqmrS03l%mZ&&0SMYVj<jE6P z-JR}Y&gfv&o@edn;Oe(5uG%8mWSVK>*3M@-*?LAXK|5W<(iOkYt~a(-+n!uzGAUr= zhCN=(B41iO7HZun{(Z-Ft~{$SCl95&YkDs#&P`5U)~e8P_BE@cfb{9zLE5bAWmy>e z{Pc_0>~8cFw>MK-F0%gf#Xb8rM!4%Qid!7~<=64YN4&QhZ0clZI8tYD>CAcd|KT$l zp1c(O{JA$EAij4^-(Qx%^-{;`=SJ#J))TsVYSJ{F>Sw<z!>9M#S=rV6eZ~7<WzMn} zT>Gr-Qc|MCwYxpV=b9GCi}TCL?Emxd>*n?O_ie1|e%?I%*nIo{isC<ieyi8-{k!G= z&n5qV{`uI<zW?x@`+q*a-+sJ5es9&^XFtCB```cYs(bqSe`SB3eC0o%Ute(~O~uBp z{@=qNKR;e}-xy!Rvw400{`$XXUq4Pa58{jXwEA{>zFg#qY|(44u2!5`tFvJ1T8s8= zNB`N@|9gK(|Lq}$r3a<wOj_`>{rTAgZP_h917fSy|Juh~zt?z>f9Hw2$=Baye%vjd z`mj!P=kKSzI-c*8zrWvV|9s2eOY=f)E8FhdYS;Tm)W`DLr%qZr^+-o(*q^$;50olv zZiw0O{+il6>(r@s$*|K=Kbg0^ic*rFwKUYV{&en<{6&*OEGwrmoC!)fc>dqi^KmNA zruK7td1bHov`_4ec#B5iQ~tLqo6_u94is>Iy6th-($iVU|G<Ay>HgCe&se?(Ssyi& zeiU^tJaJ`Nx$TqsoTrQLFIf<`ku`g*<&*FG=P4yN_Ag}c(JAnXWinWNll}O|`HU~Z zU-z*+a~C$a=Xb_m@Py~nTI2t70y$4S3CLWt_U+#AS^rr-+h4ga`Ccpev%3EG?Yw{V zXHD0StNZ`yY=3{=p@(X6a`OMbJoz2HziXvszaf`l@SbGBOrskv=Bw)Oo>+V9jMhOf zw$&vaLP^_&PGzPo-EgXTs@xyXz0o%h%3s|*NArA{^fu0aKR*5J@BbsJUh+%&obQBK zjm^9wH?Ai#w{maYm(eP7_{^$<uTCahT`_al)yd8KpU#M|ZN0kr;44j2bN2ax^Oilf zTocC=cAo#=twU?``2XEI^i-U^zOb<V=yCDo5+9f5^?O{2y|MV3VbyWDnZ6JAFsf}k zJo)gywv;5{#3^ixD?V&j%X?~kX46ELFslebi<Q5pbMVgmIh`jgb%RpDl5}N3i%oB* z?G)YnDAAH#<EC8SF3wHuJ~?S|iTB%h1uW)nlleZ~R(Q4g2B`-VIAnP5c3pU}w9)FH zSw_7P^MZ+a?UEe4Z{K*fwE30)epH~GY{x0{c6aKYt;yaqqI1LVeC6C$;CZ`gvGrAx z{H9jRRQJyt*e#dZo>2cRDZ_eU5@VE8Mx_5nfhaTYjSNvn4&E<Tl{#=OOf`1kTA=D& zE97+AN}=__DP#6RhdU=4*cCq%u`dyjuDq?gapKqdS^aNily3`WR&V&!cf#iMMuzB5 zB{vv1PTeje99`MwQOUOYd9&!ma4V(O8(NoZ?i|X}2yl8b^{jK!>N7Sj53fI*kjUnB zzD=lN>HE-`w}aMKyb#V2JY~&sx^K~@<7>`1ta-49@A*_A%dN(KoxN7cbBb=8MHJqL z@J_d-Mbz`MdUej(Rq2s)WoA3qtd|8RG$vlIGMjQD^LF0M+tb$l{P9F)@vhIC-?6N& zzH;l$fgqU(s}K#<qHW(CJ9{(#FIeGa^}w-n&f5Bbq{ZL)uY6oDr<cy~GDjnz>_b0i zMswo-B?(E)$8JpUkNJIFIBzQ7zn?9qi$1(pe|GN|PxO{=Vf9YVcUbSXR<&+kTx-W# zneTe*WL=vF^R}D=V(b2X=DTm2ERb$#mT;Oa=b_Xr*@+VUQt2Hg38&k*T3@f&%l*LO z$;@`Pb2l5<W8B~B9`ChXy65dT$)_b}kEbt}$h;%4((wJEHV@y+I?T~#b1HVUJ)8D4 z`joMYl;56(9ny{0`@c!oyJ?@@G_la@=|YE8rS;nxW!h~%>o*rxTBI6HydK>*+vmyG ze~nfXK8y0#w&^-$x-V>ry^*YDERsG!o&Q{#((?HiWcpVbA4{DRQJK+fJn?chU!U{5 zROQ9I=bT$lx%B192}xUhHfT-<8@Sn2cIJtTx!cdY-O^YfKYxDm66<=$QuP_{0%w;A zNUDd)X@#g2ZR1lCmbuKwq^QNLAhB?5y~Yu@_wp;4Dv!-$%9*mzNfZ>$GT+xHsfQ)_ zNPdd!n6tKC<4o>*`4z&Yx419dF8bHGq*{OBwqV`mu_wYUtZyy1JrVT1)9;(Hix^wp zfw06UzY5P5{`bgEV$GS#7+v3b<5jx#amDijkqv8&LRL8Ce06JhJRx09tY95ag@#Mq zd#gOIje*<l3Q3#BeE#@H*!y(fiB0UQ-*l|mtg~3=`okm1A-@vOCY~_137cbH`l4BT z;&uNrP#7#;#J|qDb(Kq8KC^|~*0X<BC&bA5&GdTmbzXCS#oyZ&(`VjZ7H(5-^Z&@D zUCkTbDP&cjxW#j1>bJv<p^}U0oQh>W^%RM+hsoYbi21#IR^HbspG+h(nqLPjDBwMN z_TY2&{}n|^th0Kh_bh!htyg@?@3h+o?GMhbu6XxjYwnXR6Uq*jC6>jR&I!-e@ZZt5 zt(0G)-Nt&oRMsU2qZp@+;#1V7SeHs{ds%;&^FnTdwDK<7nF%Kz<;-7j>wt+{akiAi z`g_KA3}P-np6@p=GOhZ1!tc-A-ihL0xV+gXUE7<pb<g=?BYDFe|JiO|E!RC;8g75| zS>UVCuRq?-|9_~zFTAceJC{{I{_mH&<^AuqrfmKBKPjT|$jYX5Gh&+7WJH*;*8Qr! zq!H0Hzy7Os_$|?-<3AQOY}&l&**wuN?|6O$ACr6)+nScWB0tb$(#tcR3)NEtCTM7{ z`sS&4_p4HJTg<&h6S5*pKPYY8owsd|lK*mtuW3)x;~w}|cQ+|KvT$3kedOC_2iCpP z?TZR^KbI`u!E`;N``YB`x^u)mYKoV9nDpM#k4rN~BSJx|-jB;Hn4!0vb>|$$>Mfg{ zG{w0lT?>|pPCs?@Z$;RSISSWJ=X~2?8zdWi@_ND3n)rKCu9{ERe)rDI-z(pIrCcLM z<=48VrR5q|{#URSonqVY^<Q>RP)_!R%}y)D_nccDw^BFLwb5y7)a%MNlPP_7Y9_DX zS?inr;8CSx`_5;=V%zG~Ss#lP#Xa4^x>v)tCbv8-q__O7@u_61gL~r&tfm_&EbWTB zbNtuan*WQ`mTU=|-Olkd^TF)3MfVoOhRjWJ4qO?gFC(L!d{&(A$&R+qY^U$4cwfBg z$GGNe(m$q6^SIk$4(LoXJ@xf>TIq_)>EB&1NAP@k_pfNu*17NF7g(4@zP7FWTb4LK zSA%u>_vBpX8hvlZ$Raz@L#zjk3Vv-1Qc5^fP|?=?L*d`^;HR5HBs(U({`&jRB87K9 zeu^*Zf9DOJ>ti-GvH<t0n2ca21EY4SV!hYPnit)B9$qk0XW7y3%myqxX$Fxh9Bjh+ zYKB{OSZ&WwI52_9n{QJ6d@Z|OkvWr=_n+Iji8te6^@=>R$Ti20uX=R&5XWf?VYiB9 zD*xEhO#gTtY)W;KJl^sp;6uO$ChiaG8A3xI_;^*U>P^4oq+Boc?}R|K;DuSo)B`$v zSq@L(|KVb&o1A)f%ftu+pX!`|>b55bCLicI<~KL>SaK?R3TIBF*8+W^6*F3|U)Yr1 zmz=6M^YX?`N#{Iklx93<<DORebc4W*_G_&|b6EQhH-<F_{g~P==$v|3miu5L<Gtcm z-A4;70{E1hrEH4Wyf0YSPkS)G)BMJS1E;(gdxMSzCZ2q-p&{{rw@RpTpwRvc9#aE< zu+RSV!RhgKDHf*s3HEH70Y45Y&t-C#zu6)p(d#4Xv2OZL<8FPW$+|^>$?n&<bsR<2 zH;8hE&N&vQ@~6<CB17a}RpZwH89C1DCz9SPeZAn$@Xyh<S4!Zvb8JC`e?6y~rF$-e z=_H#|j8AlT9^T0KTE#%XTgr>8Jxg{<fR9v&x7U=(ZS`J~tf`L6m-JdOcr9JDLgtI0 zWcC8hPF{xp3zt~BmpRGbu-w8Pzo5#|p3O@`_wd8Dj+vRP@e<u%8+bCAzHvYC>TbTs zSSp#i()2=7;Ki+N`Ldfhr6=&Qrq&niId@d(3bzJ7^QCYZ)~p7P3;bKOC(NFt5zqWr ztG6pFp&>!!<Lv`eoOz8M8b4+DvPrCNa*J)ZpXEOFN`}crJ4X$xRb7m-mu@BPzo051 z^^NfnTku0q-4c)U2ikUY>}{+)dBf<2?3a$cjG1bmj!K;E3H>;eVfE!7YYop7NqSGK zkK}A_o5alRbKYjN+11BqszNlG1s+&<u|>X7ImH{5>NhjuQo_uS+!E8C>)A2izG7on zd}j9zb`HA_7G4I|1U4RTkYf=)&iIJ);F0u<g$jZ?PTVoeXDOJxd;H+zRDr^f6-NTP zTz@FXEa4RmC=!kSkg-Xzj_s~TuUhhl{*u{^p7ru4oxE8NbovKgbm=Jd-SYj%6nE8Q zWqW&PNmR=8nwB+MESSvc9^-OERLv!&=Y{YhMYpS+GfrJ}^7#|C<A&3fEhhv+l9GdB zr7Z=zH_r6%>)0^i)vFHffGrv3*B)v(ocf@iATE~ra8Zly^$uR8Ypg|c_&;i1`DF7= z^1;;p4e1x__w03BrJJ>LyOP+(Cigv?8Fn`G3if;m-C!jqsOR!VLWRv>!Yd`84<X_? z5|WLs2C*-c?Oe}HC=_8@sAP1EX{mx^2(NY}3-=!%r979b+ZY;xTpw%~)KAIbDTr!f zNQ!mgk++`4A;NU^1XK5cj#wS1`~^81HwpwQf8x=Kn4cq6Z&fDqg)7im;j0+;3IVYK z#tAGPT@FG^^F^<9E2Ij}l9@H@V3WI}!p#5{Rp%w2nU-cc#x9+%wM}9}M^<xgb?=1C z50X)ad)TsUi(asYh@AWP?b-YPALl15<ksjnO>BHv|KsWM`S<=hKi@kkk#VcUzUlXL z6S59}SNP6);`DpgSNZjq8N&jqSs&=Heb5u*u=bd!NXUdms~#-ZUGQM`_b8pbdVVkC zYW}Egd)cSPGUSC$@Saf3oOaK_Vow|6o4>0o|1&mZ|B@5Py0v#|_`dnu`B#<9vbWPQ zsMc6MeZ$L!Aa>c!0lC)=Z}-W+DP$~`+&BH2PTBu|2jpKmEmd%-bJELLQhzLzt0;$I zo=)9shUI%Cnfu-|a<69G(ahVhdvnLxjybuaA~IW#zS_t1id8KuRa-hsG{ogkT+EAN z2gR2Uj_4Y^$z$Dk!y;KX@dE1wj=biJQ-v0XyBuc-zIo`oVcRr!hWDr490bC19M1ac zM3moaYmH23a*}-eMOOO4Dcvk}gERHL4h4z)9xugTR(WVPJAYgyAhzFB;SXch!JZxO zX9nguR7c;G{Gq4I8TQe2#$Kk1YG3hVVO?CJd_j}SKK|BN8ruHzh+a^r=(BB?Rx$*C zUdQpEbgRiN1})pw42<U%slQ*!6l-1^TE?Mr;Fjx(Kvv<88ee)_S07E7v6$^!R})iu z{q2*kU(O1?F>sU5yI3UOEFQk2f_1Z^OICElhb5CzvIQiZD>@(S)!g!ly}NC`!D@x9 zfR`Z+9vOjEM>0z6jxg-F+`^rB*J!c8+e6)+tQ}e6k-U!EV>X>=Ie0~XVwue2clMmZ zevi*>{jT^(vn9HFWrf5M-UDo#rPy4yHSwP1-%!t3_c_T-EukVzD<i;}heu`om96vk zd2t`)-^p@?kvCzp-#0Z2-pkyJ@)>Tt*c)!Jwty$u@j>g^`?cSnoqxUj{Coqk{;L1q zbnSlsJAU4N?ft!L^z|R4W}Q>K_CSEKpt|wDLQ#{_cB`q1_x%3X`F)kK<Dau$?$o9$ zmA{|$UwF5FfBnzr{rBr@K0mL2^8d@Xx3l-#{oPadV@^zs%BTC+{{NjL#8B&0l)O=S zvUK>$&A)cW3JbRTxvsyw|KFZ}{-^A(sH`yL%=Snw+j-jb&ZS<JyD#d@r%!N8jQ_NL z*H&rQU50=2zNi}N_qqA2XbW*pd^l4@T+4Aw&otvpCW>e8c}AV^s;~59()_Bta;i~Y z%JwCzBv-agc=b;CYUvw|Ngbs%&eP^iOy!KMbC|ZuE!N}X(mN&TndST5Ied0x*RRy^ zuhdzUwEgXdTVJg-lew078@>oi|9rYj!uP|a&Ht8V+rNww{&11`!$r|uxhf(LcB*hX zpWpqY+wFr-7Ms?p3A{5C-P9QCHP#+WS+`Vr{_cxEzfY=<RowgXU*<JiMm<{wJzb-O z&YVdzx!c#>JHJcm!P2uX`(0aE47^@$vV6%U$;J7I>$AS`B#w-if*B`O@?)F(y_y_^ zo_haM6^;yh`fD%WN?wt)HSu3ghBf6ZZ=O0~J*V3XLAM(z$8M!|JQ6)2ygARR`el7- zSjAJ1>xoMHyiJcTyfIH>LG(qx%9?BI<^7ixdKp-&m4A$Udq>r4i?8g@-8@TJKD#n+ z(fwwt{ILG#$LId@%lZDkzPx;{bN;_CAH^lE$X^LybuSap>UV!9_CCtv-OD{IPo9#9 zIkCw!vd%(MFmv|7m_#j+lD8u3%ADu!&M#SKR?i}E_C#{<?#&W!kEgsmwXO7Swr&3< zfiK2YHnv9tJ6JXy<?Jl`XH%He^~~1%bL)zo8|z>DEZw;LSXx?gaJWo|afoR9)_D)z z_VrHKdM))@+S=2ZQx+Ra7<o$@U)y|^<I1_GkJew0S+i7dxlf$pC50t3dauUaDhyhG zN?>>9mg{}b>o4n``4~EXYN7S!<B>-F^}M^wL@du_zCUyE(AgL2`!*H|uV1-n=>zpk z3f+DmPc446;|=@T_dY?}Paivf%uUVz@$<U<wd;NfPp*9YFqvbs;f~{(S7Nfy^{rbP zCm<rg!dlbIlxFdLg2mC6$rfR!J<R%&jy1h#o%u#VmMQ<$9x0(+^$~@#Gv}-mc$ND6 zaiU$s_Z<hr3f(uoo3<+5X{zdvBzKAU4QHQy3>U2Xcxso#jqcpnA9goy?hDVH{pRGc zPoM3UN0@#*pZ74~ZvIrh8x~osX9kx)YdO<@%WK;&_H*lP&!x+5JyN`(YEp7F>%Xr$ zMMrjDe;(bJ7P86naJ1dNGe10<>YcLpeGL3<a_>j{Y44NidsHs2*?PaC)8hW~#WOxm z{NZq|_VMC4V|{+fM9as@AGfdhf9!b2#Pc&)vwp5ft5MmwgZKWAj+26i-K|!p?@`&e z^s(^$OYaRAf8HNjw<Xzp^Tu}1GIRAA+k4KQ{(2&J@rOyTjtWLeRZr3QD|kmCvh%sE zeEsFKXF9!Q+ao6RdL-!=dRYAU(;Ba0{_sf6+k!cBb|2a}DSeIcl4pGry>E9XpPJ$E z=fM+|$GKXwUa6#9EC0HspH=uv>ceGzm*kJ#b#ZWI&U+~RZD}#vht*GORL*K!Jo;;0 ztCT%8oW1aCO?>>_>xtg;_;)7wc^%jjvf|&S<KM$A>t$!z95}q=R*~+P9n(xN3ZB0| z^Y+9Y7nXa^a}E=VIliaxs#WjmHHD?t-#qHv*xpvmPkXF-Z|CO6AE(6}Sh;5At?<W5 z(++<xzLcJRjkiBERaX7SomT}nErX^N&0VIgefv()hcoxjS9sVIo1bo-nH82-w&BZk z-sc**@xglA7lpN7uiy2};hy-;ZF}~fsmP8$Z(Si<Quvi;{=+3_KIBcvT(WuL;>`>9 zZ?b*3rsmV6()?|Gfeov3v`?SidC%vc&CHXtEj8}EpKIZ~xsFv{e&ep7oWjp#e8z9A zq_scZ`g<a~+=NLgQ#JDA)T?>hCWf!gxOP-{|Aq5q(`ID#dhtD4#kl?YhWhi5SY7#N zAD!|daN5pion_TuD}LXzh|G1gEb>2>p%V4x>(`?nJeFJc+dnT;kqOVq-qL3rcH{B$ zom00z4&VGySpURqZH^_@)tlmGMOK)7e)@g!kGjo|<Yr0kQcUC(?RU@C@;ZNPUA({Y zW102e{>Jq6Z&r%8W8Qnkc!GL%tml;L_2~+mPCa>>GT-&-%86TL3Ui&We2rWg*S+$4 z@rmcwI~Jc|x#%vj@9jb@yH%OjOjloh7Ug_B;HS&<TGm|=Z>9u&bSYw;bK>KjI>}xA z2X|M0i`!DOWaD!6n-21Iy|Ti(tqa`~Cz{OM&0POhR!}$B-}qL?SJsaXadJt=r>*-g zyo>2#{W1ml=hN@)IqnggRwBf&?DH+_tC6kk`WMe~rdQ3os4l-F`cPQh@4dTKrl=aX zuNPF`xKW``R*COwY;Bx-%z{e3^o%+7UC~+o+y1RHFP7P>u!~E^!%XGQOkPdtmh(M_ z>Q3^7o~^zjuB#l``C#9ph!Xb5Ei*29U3=0rU-{lL%SZLQzL#>}y}Ksn=J{u<BL7^v zxbIi>%{gZ?Ue7;sV8`x1tEc@hI`;o!)~A<m-^NeNewBE@a8^uq$f>N@fX+8}FDZvC zy64F;S#n{Qu|V_Vokpg86V3l_F4>!MyE^0h)x}bW`4?X?QR6i2i_(iTRNI;OwRFql zm0$K>tGtsm_uZd!>oP^^4G#Z2sdvRn>yFCh)7;m^c85*On%({JdfBA#eLgRq%r^Gl z{ri<kr0VIS`&%9y+$r?^s^Lq%ey`nf>62<7|1~$A|0O&kFl_g>e7l?5mTz8q_k2e9 z=U|@FXNzs?Qu3t&y+do|7H=?kn3a~8o?gSzQs(y~Z{3{awPCBaUCx@kCosGI<J$b{ zcLn!!cib(~_+qfLCpN~OE7D-mk>un^4JB^Bltef8vJ*1yHQ{^CXU?nKF8bf6`;%^| z|77MxXMLVNQ<plebwO-<%FNu?-%P)I$%fy&alp^;bl>lTJ}3X0{;dtPS)zX>Pge5f zf$j}=P1n!aDwP^FVb!lWpP$zC)fmbyPp<#O{w(WDasTC`mtMv6iq;$|H}2GocY8f? z{eoWQd;Q;Bzij%u|5x6WFt^t}ZY-=VKZ+!8rrDn?JGA>p{`tpcPmE)~PRw?%KipTs zzj0&R`{*q<=X@~eoxb&B^!;sNA1o^O`8?4)aYpZn?5CVE<B7#xX8q;1ryj)J?D-~t zch=h%Z|hII>Px(m-q}Cz`;3fk^(QIsk7Sf@erUXNVu#}j>nCMd^L^sWT;0lVUyqdX zd-N(lpFdbT+HkUNXHm;O=WW-YBx=3+vRlSK`I2nKuZ(~3x9zvxT|6<lTIlM_V}98_ zCu)7a-;=bQyj<y%$^J)kZa%mjS?OK=bk8&1pNI749q*a-v3`b&>!E!{{kP{zRjx6= z-G6WK7QOoPn<Czi&p+gR*mljz+wU7gxaIoQzs3DNc-U?IblLc)q>}yj*Edc~KlNU) z`ZM3f9frnrk%#pE@A`8q$NIOP^fZ%Xi^Kchg<4(JY`Hh<&04#=1y7fs@m%+G>)emC zo-n&qq{f}TYqq^sjkTENZhiNsS%2<T{MEQ)f8qYA17}klikOS0Nq?9r{%8AS?j5S< zo8CUqyz?$I?Qyz|(#D-4&nvIkb(ekN+IZ{n4*|8B2`bB`E}n5M^yjqu$@f+~`Euyr zzgKx7(~S<#u(h4TWa@7`Z&F2Y-=nizyC&E7Z!_;XdjEWd^CQ!h=Rc<Hw%T~px1s*M z{M7YIKe+<mM!Z<F+pf)jy5xKh85Q=zfF<YC;{Ny<%J@6;`~ROE$rm%p!tK^)o2>aa zADRD%{TDC1|GCYKr!!PLS>4Pz=09?Lod31Pz;XsR-}zHD8S+y;OFjD3uzz9XT=Dcu z+tdHOgxpU!$`sy+H$P=K=WC(=w(@M7vip2R^}B@6w7vehsA}u1gxs0^%um^qPL*{x zWV}nt$~#oH_pjdEzl>jhel6R7rfi>g=-)5jZr+Mq7dh#Nd)xhKeShX%tJ}5j?#!Ae zvd_Kcl7uJQM*jU9xVG->r@NnSrCx5f4vnp~TKp~L+OsY5*R0(VD_iYfmU5+f;pSD- zWhI07wz*C4t(UmHcX`vBw=4WxxF)aqm;3k2$LaI+U#m|`-}C<e`~BfB9`C<4H~44P zcl+8uA0*{!ekuNBf6vGJBawMk=7Fhfbso(Lok7#8l2+Pzi?7;T5^3o@y?JwquC}-N zlZ_>twY|+_H<wH{@iw>GTyopU+gxUI$!Q($>H9a81nPR5zur_*AE@iC9ucu?WB=0E z){(nhzR1e1GE8ruweD}t_h<d`b~Q)-OE#*SKc4>HK6T{@=F9(|9#4M|u4J{+DJ6Or z%fzLxSt4(7oWHbDcADOfgqMf-r>zrDewn5-O|LBJWt`HqbypK#x=Bpab5DGkB`}ST zZF9-7X-hXB)tUPs{iT4FcY08Lq}73=mnzk!oom=wvTEYe!?ikdi<4ivNO-e%McmRj zed${LG`>X}O5QauO%~Oe8<((9z1d(|<3b}2c1e-wpNhF|X_?vj-nY9y)Q3%}cl|f@ zXZX|jx%IyPw*I{SG=6@4akbKR^&)h_s9yi`cQ8>8CL`lpbnd5Dr7TmIp6d~I{X=Mq zsNKPciBq;bTeCZM_vNKabl#rszoonBWOvSICF#8<!t^)Y?9TbFB)#v%H2qC4yK{ak zN$)>#O@GtR?wtQh%nc_v6pUCpdKeEq`R0>%{>e9?m%7YnB{*siA4oZF%B+2US(Z_J zRPnNtElm9H^CmY2q^3w8`(tnLSlt{lN@-?dFdcM%8Kc?sjimzM_4FL|hGr;7&(4iH z-S>0{@7?Fxf7n&KCV4P5Gd4x03G-~yP7zdTRha!QVO9FX{rsAN+q|c-?R)1My;M86 zz1{z2TT>yo^pqVFa};(sYW+&@ie|Z!q!+zpP58}#=U>?G1PMq#(G|=Ie6Q1C7HGy4 zdoJ~HK<bj-$oKW!iIaKE4ob5m%)R*4vHqIoEe55V9^nkLQ=+9qO>Wt7s9C?hrjhD= zVPy-O#q0W=e^)eZYI51KyZP;u&Hs*P9$vIs<NDWKQ?xIvxxMj4)m>(lYhU*q6)3Tt z$mf$_c$SfO=BW;aRUKJk$)bTFg(0bdoZUB`oE8gKKIE3f;T7~Oq&_8xYsv~OpOY#a zQ;&FDe5a$;>@4c-7JqNk!$iXrS9hn((`w!~CWziO7ZG-Il<eFT7?7)QRr9H?mgACo zMYEr2yS3&AxNFT9v0tVY@0xt=|B1XaNovbh><K)&UU`+wf`6yH>?Uf;zA`dhA~IX( z^06J}p^b0d!*~}*&1l(v#iqSJ(OdIb@6`;=<hwENbrP&Lo)evV_Tn-X)6c3wojqnN zYF52CvTJ?csc9;#e*>?38<r>EDhhaKc~e1JE=+4--nvD_JZfQ0eP`USo-I=L=se*j zp#9eJXw~u+f(PD(aHlJucpKz8!}1Elnp^3s_?90@&9Z;xw`SvkZK}bd3maTwC)JDA zi>-V8Im~J0>r`!lQrpdZSME5x(pA;635!$}JG|IL?95a*S=GlqA{&22-E<Mmun?K; zWfk;h5#K^NO|zvRGmpIVSUT~R%ay-Z97?-NmgsnH(R_R(#*;Bz;#tJ0jVmse+*0y< zuM(gx{@H-nCHkoJ(Tv&Ju_B`L7OZnO5zNY}_mWCXI;l9bS?GY<O{E(hi(eH^Gdp1u z7~*Vn__fH)^%MPG=9}hmhOBY8>p4-<%}|+Ti)Ltp<MX37$C8}FH}0BzGvMRP6Hhkt zuKKg$ncL*^&k|Ekh%A>nH(}=Vw7s4pva2WGm=d)@gGo@@C0T1#@Qh!(Cik9*={$34 z=e-5<GJG8B1By4zl=qk$*AqB5*fU`5ic3c~b*H(Rrm9>Hd3iC~chj$ZDy~e9o7=Da zancI;yz*(#<msDN=9{h5G|_mU<i^4sld2rK>T2nc(seVAg}TS8N7S!X(B8;9do7P? zB>T!k+E$;Vy+pnC9^S$;<5jNd{Adq$?xPdVq^~@5a+=S|dja)YX~70lUdfi_8+gC? z|8;rLb_1W7`qd6+VoNi)TUN!amK2qrDe+hQwUKnxvlTz%oKHQGsx!F!I=4!H!BbYF z7qi4KJh^eJ<*V6m>*!X-(;^r4Tv;VJ<7w%PT#wSm+?cEe$^QY#@@r%qeM3{Sn2V<- zWUF3fW!w9+iLvvl<N>b<^<lEX_p&BWo9ngep4j4t%4ZK-g*^ZJa{2cCf8Xzy&#(V` ze80Wj{kot3es7nTei^^N_Qis<mmB{6`ZoRlpVyydb2Ey6D|~0X{ouX*|3B)Y-(Mep z{{4Ra@8`#tPd!xiecwSv^R4l9KmWaL_p900d?3W-%+GZlD_CTe^t_H<o~yoejeq@0 zFAhD14?+xm3>kWh4&(~X(uuo%uuALl!78o&zwgf3dT#2I>u<v2qfe}V6P_8)RmZyD zZT~KtBFiU5C!S6?tvLO#UVALxZkaqAevyy2&SWm=m_76Uzdvtpf0v)XHvdZJDidpo zGJ`h>M-Fy03$iP(n_}Vl=v1e+x(Ty(k@T7m9QE5QZiK&ywkl73l^}7g&@G-Z@y27H z<G$HEH`k{w(q-GHKgTWiXKC)*-T4I{`jZ-;d#-xkYP+Ls^_zy-pC0UH_+k1>^skjF z^R$#F1``;SB_(&wkD44|?zp`nJ?O~GWfk?odvc`mqa4nO2|RyrLVbqpqUTa)HeWcf zho{$OiPf3p`iw1qV$HSlM9OQvq_oXDb78V%m65Z5+Kov!IaV#*61^Zw%%=Gi{}1Qq z?@v5?|DsaFwqI$f=9Nt?QEV%81?MlkbZ)+S@|TpJc|8{=8&(+|%QQMxYP7FmhsxtK z{69WLHJ5bx`#*iLQpR>_viDQvC#B0D%2hgi^LyNIXHAItSF48lIQ9##8T?)|tb2W+ z^zy}<+%^w7t>>iA+?d*Z_icIgy9VvgE2nbUHoEU$6hAqBbA0+qt+l6JC7X0(Pr2SS zcE~F<=Qw}%=zEUyzFRkcm_6}Mk>6vTN?osq57f=qeK{cahs$^cUj|z#$D%uBHqLjI zXU-C2dw9jC(A}a^)Ry!4^~(Aax@%q=FFwa?`unzK4V$5^ainBZ^Q9RlGx|NUWRJM% z@|hLMFAMWA&-!{+j^T&tPt)I59nH?))HtujGPOWDM^2mN;Om-6#|7qE34Ka(i#wAM zbtWVBOooNP#icX0-U>GVT;$Sn+4s|1-;6a3Q{+B8WS!3;m%8neaMVlAv;D@h^&h;H z4tb_nbRXH<+hX@Z$$QSWhc2hDxSMP$+q7Fe{nI0#xH+A7m)?w>bvJzv*MxA7Ph6gH ziYNK4pR~(<I?VSov3<{piD!azIPZoz9TV|35AH6vJo}|?f{Im;&el`AHZG6<Ht9&* zq#NEs)t*WG>ffduS-a`Q)W5GjC0w&H(3#C%FSTfXVvbyee<%+hn+%VIM1jGBgaZeE zC^jtC7LVQe;*{%j@z}UISEKuCq-$he>mFvV_6$$Xce*DTD>`SY)3H>|CyKKT`j$@k zKILeg$D@~uo!8r!yjByJyY$-TMs+LObB)e7>HgmqtNVK^ulHVDevkc%cjl8#pC_h$ zZ7klQUsJz^--o~A!(l%4T{Cy>-BB^`>vQ+JvE|io8>BbKJ-_+drh4x4%=sr?+f6*a zV8@rvB9|@YRd23#o?avQcv4<|*s(O9Jhz0?AJ6UhZa3%WgXKQWi*%ZujxEqg4mcrL z`Ojy<-#N$b*?ibi`JnW3!Obt1Y&@zCwA=GOC<+lM+n!|4xw$@kI-{2U{4=K{baXGy zUnn>6#nf4QgN*&>PI~z-O?>$h_B|D;seSDF_f$5RbH4Fqs-Aqn$aLiz-&4#bJ7<KH z%{$VowE2vx;+^{`Ct^enG1u)WOw#N(693+!YMba;uc+jna_S3<`f1@g^MCNArrI3* zIdL85@|6WU_2;-h{H`?NQ2k0q@%QIdWF({i99;FIIrJm@>PNYgDrT$PQ{(grZQQEm ze1Rh-<fd}SqbnSScg5uN-4?Lh{B%z5Jl^cs8NBy#RKDE8*e~~#{R&o@FS~uH@QU;y z=DmAcMQvW*l`@-~otSbzZp-T5z2Ac-rAc~T(ozomyn8a2X0O(fx%01WSz*CmKRGSc z$>`2Ko%TZGngi3f@0ui+s@DJMZg2VScMY>yKTWy0C#{U9t0wVVheiDZrGHO6_DmP5 z&r-V=+-d(v-2RaF%&ljFPUQxu_AkhD%kuWgV|;I}I=xxHK2+;pj^iF(q5SS6x0OD+ z|1qjPqQ509mB((^iXxY9TNVno-9B`@t*t((;=pA4HIptg^FCa8Z_gF$KF1@A?|tlu znD<JzAbLm4mt*WzzZG47Ecw2rd{XLr7sK8Q$11vhug;yhuW7<l?T*e58-0#^a>##Q z`XuuFlZ(4{KhB#k`{9#gY>e%S#s5z9?>=$C^-!V7_V*KS<;*Zk5x6EBDdXgRy)V@8 zUE@moY5VF0zcPMr+}?9gno+hS<eu6~hUFg;Ub;!RRT%sdJjBRvwJNWPK{oWwid}(D zZ&v(SIHh)#X{-3@+KNJ+{5{_%?UG(3Y4_!k*n&A{WGcJ(4-3i1edt}z?ZaOCcW1$i z`Hrmho$H%z?$3Ic-<x{J%6_3*ne^j7o3%JH&${nym?XSEvtG_t^X~NN$6h#AEmA4_ z?_2-lQiI?3%i{kF^UL|~zTKES@8Y&?OJlCs?0&jsW6OqjI_p2_txeq(x#1&s?#g!G zN5cF5d09MpcXsFc*ZQ5#@8YIff8LqicgfiO<;=zP;o_%k=1)zv^ESweJ61F8k>G@- zi?w7!>%R+Y_-tQRQJ>vZSf5?vRCVvBg*9vGy3Bc&8834mx2Jtu`I^H-Ugm51>c-u3 zciirL{_)Jqf7fh|eLmZNhplhLZUtRCb>2PCn)MchDe63ARV;d6e8y4u-NM5)>%D)? znrZW`y#9{oeZzBCqK;oyoqS@a{w%X;0@vm~b-8yV>e=j>nzajkcln>v^iVi+uU_-z zmsd+C)k_r|Vpr_@(f5Z@@%+=v+@Fr$IQ_$+{sk+ilhy0@=NK+epZ+!atLO#8pv0P5 z&z~Mb44HcS_bAlAc~eyB!cso<qYI0VwROkoigP6g&CAMuKhOI0_>1I1zvaI_>HBkT zwz;@}`wM}Gf&X5_YkgUtvTJ48nR6NSi~rPXFSzHq9f2$O};bkM%w>3=L`1nd2? zn;is>zOU=DT{dOGYBym4#jpILvz8rc`Ic3(#VID$w7ur{t9`2NdTT!1uH5{2j;!&i zM?PDGjrXU-KQr05OLXdzjr&hex-oTDn8cm5&}hF|SGK?DI%u%i*|0`T*6_1+<^PlY z>*d>n?~6A5el2YJJzDYl^x{*tVS&6~e;NvGt~X6D{3oIQ$|&%=4hPS%GnQ**)qf_e zuDu%nGS$-hR9A|&)V5tNJFQN>KU}c5@5m7yWuB|0GT%<^TU4mwHK{e@1jm}nRvnM$ zqEafW>I-i>-rA~H&%N_RrO9dC(~loIZDZc#n6JP-MWZM-piAP!Mn~xheYv7Lt+p}e zItqG(cR0owY6NcC7@*Huc*JC9SB>{X_NDyS<)%pQ_!e;Y`WEJcTidJbVt)Vf+i~x3 zdJ~ssjoK^uidSb-qHC5%t*PE=Qay9h^9fVRHJ_^oFJ97?Sh+pyLh-G(x`<6z{xREE zt)D)9qo<4rXpch+w`#qasTuO>|JbR4*|!ZuTJL|>{&U07OXub!DGtWt8x=RKi@xj> z9~*s=r#E-blZF55w(av~=ic%ma?*QC_wY|f_uqeut?r$+|JXjeAK4{2yVJf*|7Uj1 zuIl^pZP6OCrn$AET>oDeo9ayanQZ!J&AGa$zrWvp`10*<{qe`e_3NybzMud1<+s4z z@9XuKZVG(df2QuIOwE$k@4F8_fBNeD?{_!cUw>8Vns#~9w<1~l#k<$My#IIm&zqNT z{Mh)`@8aF;Iu3un?TJ4=q~DKST(R+H%XQ5sS8E^ZJBR+>_{y(tW8d=oYEjcK=WqTH z`}zJ4t<;;pH~tIm{amtj?y~yhg{#aOKRJk9nq|nV+QXUJqbiWU(P@wB$px_sUM4PR zD%A|x#OEcF%(iHk=%T7m43TM3Ck%sMG|t?V$Lh%%_*NlMSLM`_CXMDx68zR4CF>L} zYPOscc|ZBAfm({hZKsM2P8A-Wnn#;Og{}t0hHy_TjdDoIZ7rCx;LHO>T}7Mv2t^x} zH@goW-l8BNH%CCuWT%8p#>xhE-%o7(Qo3yXZdwlxa!%a3aI=opTmdWIxv3XlwggPu zP%oCs8JplL`A;W`CpO_Fr+UjKmwTO?Tvkn9cW|O=th&oCH?0o#Rn{LBROBwaJkmTN z#dn_HCb2`!%CYXd+Tw~VikvPzeKYa&lX{z)xt!*^wYGnLt5Ex@?EkY9lONp|{*~9- z-K1mm>iLxuE8-n~+AMp{tt=2JVxbc_Ie4kceWeLqp36A&rX;a<KZx@*7hPB%a?Ec^ z;`tE9T<8BQj5x1`@-4l<w<%!7^5mjZhpbC?xNdRUI!!pf?emJKGSe+xqMmBStSYKL zcm4GrrPv?8bgpbKoTK;h!$*$m|7(J`&;9>vAJ1Qd^<4G!jA2X4Y+=du;z3E(>2vI4 z1nXn7A32D$z5gp(d^1%u?UP}$BTFymiM-vex9=TKDPcC{G>rT4-hAfs3x~M4&YziM z`M&ab#j}@ryR%<8o{j&#&1Q$=+*iw9-QBwP>(XHN@^!Ok@`Z*@Z=Ud9SKrlq_VV+t z--BZ2%-a9w*N+?f|NZ&9Ctu%n@!{jXzawq;?SFb}#i{za7Qf2g&*5q<zkT?x)sEBa zEVpLuoTF)azu!E*{ogvdYoXO8_RF@~*FOEV%W`%5_b(5^`L?h7T_S#+M{CB~uzyy) z+cvGevsK&cy7<|fXQv(f5xFwet}e{@ddUB`(cU*chWyk0^>W9(p5x65*R=gtsx!AL zRx65ZRNs=O-?ZZ>M`6A9mbPv4j=B0v78*_wW_O*nmqlr}pi=dg1|D_Z6idx550)IU zb)4iF673Pf-Dz}E;nV_)1#P-2R`V4uYKk~tkz0H@N1^1Hh2Y}L9AN2|560&d{+Kwe z=sPiQf$=%T5-G(Jw>`N{^OGCYL!uY9WUaJa*cM>4z)GdM$xpky{!ye;yTq0V#Vsl& z9gf|iO4UcKB{sS5SvK*_m4p-XKFn&{zSYS>;^bV7ZWU`jwJ$9P9kpAUJ5we|oyc3t zrnr)EZdjIpkp0IqUGtr;Botl<YF_HR=8O8d+gnRMg`3}g`<?4!_9J7Zpf71FPIUTP z&V20n%#(e^`I@-3g_h9{lkKe&7wj#!GM~`T{dE3>-*SA(ug(P9$EEc7G^a`R$6wyK z=j&gKb$@uiHW$o_EPcH1SkCpb;3@zAF)Q&qKY=7BWAM!f^`?dvC}rOi$Na?x0<G`= zaLMnE3T-%8rtRu6g@rSB_wC$UhrhWUIH@Gs%whTDzWxu}ryD#vzZfQ;|152j7?`Vl z{j5^W+_tp*^ujkW);B*F%#_mR`*vlg!n8$iXU%-_fA&7P<_#4qkIyg7cm47F`{(D+ z``@3}ug`am-yLx;y!h``)9>={Q`fj=_j}as?+f!N+Ilzs{N}gX<uXUoggFHF=~mBw z{!;7Rr!tEh`LB1!2WKxoH}}Y0_l@84zfCXvvuSVX=8h(v&$o{TT<2M9+h3Zz{MOu@ z4V}}}g=ZI4ZaT2*+x{J45oH!;^{+F1`{z&lqT%)UOz=a``sO7rK21VLJS>wqId*4U z;@c<^qQvHvbVP(h)Pz%X68i+VWo(iuljJ6zv|V|$VMVKp?w!d|4w+9p^BhCIaV#>L z<n)G<C3O}{Y9?cqLyt@98i!Psin;F`qK`Omow_6hmg1~h^5EvC1HrFOPFN82XbaaW zRlg+*f;Y+41iq+W>sIRQRN8tkE5uyoiuZ%9ZhKj5FRfT`LAke2QmDpr2X~EU1phvb z8eyq@5<<IHK4@8%b;UTucTtuGh)n-*^n$Taj8VbK1>3dQAG)+1$rp%|{^oyw-%OdC z)<?YO6h2QjI&|yKZvDU0^&UUnwKjZOdGX#ouP^L8JLj2^?`aP450g*wPcP*wId`w^ zx<$`xt^dE-7hYE?houq5X=1ANCI%==Ib$c?&TBT{X?tJU6;n1#OJU)bsah(1!Rn>U zx7{{novt{wfoboH+xi<N=Zd{l|7D+ZJTT|@?G)|TjW_dG>3%cVP^|0CT3a2;x<NQ( z>z0^vr*=uWwclTK()x5?dFA&><_F%aKYzIT%a<QK&PzT;ecK&YzwI;signXt&i1#T z`5MWYe#+vGRYJ{|+bQ+0*)z6%y0hu*v7|HCGE41ONY8Fft!`pJ92d&DYMSV5*~hk% z{%(D(ccDRMMlvhowBnUV7wIm1|A{F?PkVz|UmWA@lqy!S6QAza`$aDQY+JMNuxvZ` ztvd%C{4PA-QK>iWm+zzCiI1%7!>#6YFYSBWx0~z2+7oLpu624WwoALj(6TRY?xJGb zl7;?yW_}$dIVTETnvO_!=C`C6n#pFRx*WUh;^v~H)F~)*UvZM()Z^7shk}*v$rmlR zyLe`fr^+7TR|zkb1RsXfzP!tMbj?a;L21E-R!TEBIaztn(0lo%BX3hr?=kU%;tB@m zbJ9wrE<Rc{MNUj6MaJ3KaBEBEwcXo{BUi|CMxR#$M;2@&=5%LQ8M*pxne2)img=%x zD>Zrfu5WEh+c7i0q8Iz)b*9UyZFo5G%dJnZH)wocI!U?Ze%NO&_l%`NV(hk&eHRkc zLj}|oROIDdtl!V%JoM<u8S&SGhkm8k+g({de|h)2nOZX>A7xY?%-dzSd(XAw7OahH z!>^P#Pq5i>C;WTjk$oX++jO`Y4%J7hwO_oK_))K<SzoVw8`IhlS)FyRt~0ZYp0(Mo z5?rKk{^gDv{U^2_IB3u}Z6#l`&Mf8jHx}-43xxi^ie8@;_3!kW*L~ePt-CH+luub> zqw2DHO2*u(Umv#WUbOo7#cj(?K~?reS1zad3fsIZ+H9db-|o}NTR&Z&m{mTVrz&b^ z&wV80ambc`4BuE=?tnvw(Re!OKEQfo)Y2~KbY8Q8z@E>dcH34d8ML%8J3SIqxpE;y z^(Vt|og+a8CuTVR+qZ4uk}lPrw6e6l_qNUzi##~f<=gfbnXE#lJ=d9z)d`7Q5RE#f z`)1Lsz?}-4FZc0Gn>#J#hmx$q?+CT!kDni(=yB}yKDLA2O8K+pGwPRH3(h`mdE7e0 z*|_>#KjVbm50qBREpA!&z_<U<1*a2XW@cU=9r6qB#y^ZLR$sWu=-#63-cgdvX0<)! zlP&0!(eCoGvJv+T<$Ua*!Eq>hgOmGOj@F$~6Iu7vbyjbFed~g>U{o)^*ISD?vCJn+ z*?ykvc{XGIOrLJ{|EU#nGo&RG`p%xW)p=zpw?}5j+3#M{Sm(`OI!|6wt=4E`T1`)Q z+U)aZf*<S8dUJ9{QSJ5EnR6G<tevBA?C8cq6~_e=ck}*>ci-;eUm<HSw<Vz0?EHbA zfb!Xe5%H%k@ZU<^7oT``ohdl5nT$=QH@*;4tv5q0H-cjQn+-&2pND@bJf;(1XR4^e z>~hg(dCtd~Tc>*(-CDMx{crWc>AsuQR4tc3mwPvT?$k=nTa7oQbt74sGoucge)+US za)PZ)RAS)t57T&!jpDCeJ+*0b>Dqg*`8xh?`dL%=dtZI4;?+{^Ut2|rW}Z^6kAJs~ zm6x-f?dk2!Opng(IJ3Ig-XXlpZIZ<{j*a`>zSmty-xN`}vwe5x?+Y>|+I%S+Piq|x zQD543p;4kES+#TH;u-RjWvW7rFKo4F5Vd~n=@HYTzR}^s>~i_V-*|to{JLbB|KeMP zdqR@}8Z}H$@bY}pTqJXG@yEHcD~b*O{I0K0E8&yc&7a}JyGU-5rIlMpkjb|RbAmri zJmRxQz|%*uV4{xROG%-r|76-vU2qhd%DAs}1<wUzht!sNj9SiLdM@n@(>b>{bDsFw z%%#((Rcc-nO1=E|{)$YI%R;f`9dozHv1gf`U31FhYS@8N$*Cd1Q+Dp(ow)BR=svUJ zlA_ea>AO5-xEYN>o1#^xzxI?7toQA1HV|NYuzSDKaXs&ki)ZC5<XC&nHKW|yp09dK z;TtYfuPyEWeqY_Quw7I{PTlzAgu=--XG3ibzAuQbT+|r4Rm=42TW9a2@Lg9=ePj;1 zR<yw={-(&>$7;V9{nnC_+H7BL|NQXpy!xEkPCxI}T)ua@M&sSqIq~Oao{#ht6*_mm zzAqwS?(*g7_5qVuuS#7#_3(^pnb+T&>o(oom9zef+27ySR9{Bjz42z!oHO$;FMj>* z$^@wy&yQ@>eEzs)lkUp*T%NlE%!|VA{Wy{{wb%d61g-x^n^iBZoBBuh%a%L$drsTx ze@R|^q{G><A%a0yU~`o6wuXS#=v+bWg*=8Cjk9c;>RFB`Mh8o@&I_F2WR}lan894@ zz?ri8hE27R_80NIg(8L;pBD0P^|quRDHLnGXBp=9V%p=BLs^^)qx=3Um7Lx<zk#Jn z;DyHm_KjxO)841=I*|DzZnL_4RDW`U+7+G~Cfr*WT^A_NHBX)Soxi~Kz)^Tq<bqiF z(+_ycurfj}zns3rTShSZes;5gK;8HCCz6kAWc}I5=dvQ|;HJFfZ5yte%!^&1rg*FU z-}lRN-nub+{@Azs{kuul=Igt>x*B)Pcl#*Cc8Tkz#EYv(3l!WfIA8vlV$#HKyh;82 zjIuj5$G=#=ZrE}4_V<N%?D7*&@Ca|ZuQ^@8M@FfB|FIu`6V|0{%)25uPwm}dlY|zV ziANRJ>juYfv2$iGQkXY+nc19v(W0vk>m}I_KjEBnL^|ASQc=uG=1r9w*jHF>`_n%2 z<m_LIw?Aif%@TCovQfh&I^>4O=Cso857P}c<=tDo_gKTUGdiEHd+dw2bbg|a;c2eo zMRUZyaRvINPZ#h#d1jJhkIF5jE?2e}O`le{2*oDVILtZAe_+zf!}2T-V;l=s+jSV~ z-@Wtgzx<54(peq99X@m$Cg;Doabul7uaMBY$xEls3n}~0v~lW|x6snYV*1278LR0I zC#41IkA_!<2$##vcbMd<=sMdl%=lgYF<rUXrx&s!bLX$yB_|RfxZ)Z!hXA8xQISg@ z1EZ6XCkG>^#3BV2OBccDi&28__if5sdwkpO)qA6JcW>Rb_Fvn-KgsGV*8aYA_uanj z@86!;bN|fj`yc<-*x!Hs{c&QA-Lc0X)z-)F%W}RmEAnE!;p-`upYB)+D!vwZS$VUl zcYQIdb?aYIWj37y5nab8)#<!F@Ap)>{l@=2GwSUnczpzQ{?vth(B^qOwg2;0_jyT@ zAJ^~HHxy$3UH7GXdEyTFV~164T$X5MO}?M>y|T`J;x-lEnTtAnf}gxHD*d%{;lqcY zr)h>(`KDF1_05x(`&WM_Cw_NBoRrso75}qAVi}u_GAr|>{sw8t3VW>&6Dz1UemV10 zjFsy|#q;;Pw6|aS*u`5iFKpq(OE0BT=Xw3k(U6@#aph9(DYJBDRcDLb<k}fF(e3%u zWtt{i^qd{n`*d_K57#IzEh$M`r4+t;fwNOa)arl>l2&uG5+i2l>Dz|Xuk_@<eX93j zTdKXp65h{exg$5GmDYHaJlXVg_2X&nueeITge`6J3x4rr=FM9d<W1t%UU_n2v*Ej0 zO}5Qv4>@f#$kE#-5#6=+(4q|zIl5xqN0U#^knuifv{A;Vy)?0-{QUgI6Lza5POeG$ zWGK!5c<G08zjeR8{y6_({KNW5@hAS*hi&k>pjs1mqcdNq({;AXdfP;f3cCmWjgKGf zQ!rck+joXh&DqE2)oQeC*T%Q650mr`o*~@K!1h>t#@|nj8}hS1_4#}{T532kdiU8< z-|AQ2%S6ob%tNDfOs_<*Rk!_p^6~OXN-I=q*8co{Y==x>N!vfs)|`v!m4}zNRh`?? zs8WCX-WA79r8|D=i_EHxvC>!5{5N&Wzr}Zb52sfj+;}c{>t3@!f$02_&Bb>EZtCwe z-IB<1%e~`$gz1@Shd7J(&5)bCMOT;oK(+;!j_`_)#k`@jSNy(T@nM~J)7jYe&F3cF zzw?j9Z{eafL0be_r(`k;&Yk<hYPRdtw@Ep2l6N|)CF-k-wJq!mZf)#-^RHU4YiZMs z`x3Sr-d+mrPr1)Ar^Yg?Wv7qH2H}K;E!UFPuh|me<(sguD%R0Ra_bA3Ii7-&1>dd) zKW959c5Hj2lj`J!can1!bugw+ul>Jts=B!E+|N3*8r13q>)89=H&!T%n(UhQv5&2) zvfvVj_U>2qR>F1lTCE#98j1s19Hw76)ZOc&RQg|GUc|9A3|SSN?VlHloNLKmsVaQ& z%9PSptqE&mryI<6sYzUQ^P>C4;~(v2KNe`HdHCBPMfuf&V>67aqJKS{E>j&>y5C>= zyTHPPt-^bM-0IquEb`mdZ-;y`-_%EZ!KY3*72P^hV8UrzYy9RlKYP8th3u7}IUa4o zKP;=Ju4525H|NZmS58LXXU;X?%WF`Y{yk&ARW1M3Dd(@eNacTV`gY`-w$pbeofC|( z^odDcx*@De{b8`m94SNDUT5L`b4tZOvA^GD)yor{X(;WJkQ!I>tjfr8XKjFMD!<|L zxakKEJ2kCao0?;t!YQUH*x%z+FY%^k{da+%-!5t#+5RgeWslC^fW5a58|2Q|aY(G- zmFvtbc8!b!?WgX$GjazhZ<lOfbyEDe{rKM{?BO$3EpCw7zLno7?oxG&;r8JEXU86! z`^DEh&#HZ**3e^bZoqNN@?qnglpj}0PqJTM)ZW3j<E;DIo$nZqauq(}IaGVd@A~ih z6}3J$5|=gS)K4{hzp%qo`sVFR-wsWydHd~<&D(Wv*S^)=ee1xDON;j{RV{Dps9RCD z<l+hjb-jPyqE;U7A4qJvxXdu+>O1y11?O8dk4P^*+AmnV=Ml5Wj-t=gSZp_Nte3u4 z_2`6naM*IO;Ayv=9!ZI7+5b4AzrkhCM{b+H&s+NHBR{*}aJla9YuP6F!yxWYzCqdF zNiQyLQ9A#ETkhV)^2n#V|1JLf&{uQHVo3uLU6<|v11@(@4NgCI#Sg4IB<z?EKTO-O z!?SCZK;xes(H+N}6?NKE3r_XkE`PY><_eYq%PTJupYN=U;VJ3;vHA1^Gri2#y5@=w zajWLj9Ft~mR;cIylvl^9s<0|<R$AQRTP)i&CUc8Ed3I$lvz1rzl4oBQyfMAa`Cf2C z{&$D>0+mk|s4brR>gE}jwBp9F{%h3_Ys~jNw0yAki$@;s;b($L&zj$8%={kuVOH<$ zps5eI{O(lWNiX^*8<|~Dc|Cj8L-)$dO0I`iToAu}IV$cv<I-H8x%IcF8_%A3t+CF5 z<%-p>UHy~8&$TNnit~M!(09o@mcD=9_L+(u`+a-b<u?j1-5a^vSUf*^QsB9x3jQ7? ziWkpEz0+V{mfc}kUX;)=eY)ffWs#VM`me9j>x-;(P5ll$30;+XEB2{%Z0@<eGP}RJ z-n%%V?B2!Xf>VYZeLpv68U$6<FZvKLll_FdQ0(lOsb$8(*XLYVQ=DbxdTQRMdvQ1A z{bGK7c-MM=;qo%3y?3(;C-L^|ZEf=0aXe}5Dx=w2J__nV1zv);1%3UZHxxu|GhXTM z_ci}!{-5l+?H?;%@=boxv#r{9PR`9X*Uv8`pDV_4-Vy8GI>{tThgHPu$k#CMxtHso zy~tz>vrfKU8X!{nr+HGc%9Fj{f5!Hyq?8;EpDp=aw>)$6lE)3N7<4QgTn_g?sCYSH z)#fX#MO8*~K2-(o$*%l7+bI9@%G=*xrKQ|-*m^Z_qrJ=N<DDPv_Na9)y}^*>Bl^@- zP4MFN=~FZA`YHXta^r?&`KR5hR&4jW?X$KjaB}@ZUHw?K>uN1$Pw)HCDJM{O*0krU zhtMDP8O_HHtk+ztVpr&y+s?Y`?(eJ1PevbB|NmyQ*7L&$xRbe5;`v|O3RHBwe^ANy zR<c%RpVL;?d9!!@E@t3&xYeB@(JU-kwb0Tc`P}EUKtaElpAug=xh0RZFDkB0U;nEo z?M*WC@5*Gx`gitX_mih`)b%e`um93D{X@r*rQTv8`wE#3yymawD>Ygf#&z`Z>KQ5P zg{GL5uF#(>|8Do4DE~<3R>w8-J{rX>7yniHQ0AR?QtIc<bB3JjMQ&GZ5t(#wsriD8 z`v;rfIlfNO-*-nRAl2ARcIh$Bz|A}N?QvPAufKX7i?`Ff<{b;_7fsw~nX*pSI%-XW z#hasNZ>6|7ui7LLEoc6C$>}MV{TyX%wKvR^4K+2oY_n?(i;7x~*-9NH(|>)w8)lzA zDmPzy{n|}pH@}^*`P$2?_u=2%{)r9&@z1o@O_?gu<0|G5VzY{K?%tlAz2429Ipuae zdJ}B!Gz#wj`#<ks$HStEfK&Ab+fK1Huoy%<&@#8=N%35{aL1XvvZ;XuY_oKJEZ_A1 zr^G+@t^Ys$U-a$xza`&<lbEFy??%4TGMurB_o<ALh|Y>N31@oNTx3W;aFQu}@!e}0 zkFzwTr}D?|JJ&3jSHEM@-=JG*`*zu_-w?6(Ug(``7m~`&8KP%i-4ZLdw$s;}Q7vrp z&SNUZS7&9-oqn&ePT@rPCdu=Y9=*KtlV$dKQ~$onB0Fy`)myP9zl__F!9Gs2u1S!+ zirJ>odTrS1!&#fJ-sCswI4akFI&XFHjhwAp`94nm&+s&a*%jQ-1f3rIKumS|i*Oky zCKDrYqqE-9z!GKg;Mr>S8e#Wa|4unYG50y|={TVGX4Zx7mwS_go!*}nNxoyS?diSQ zDbbsjOw2jC_jXZiaE?zto3xYADM1bvb|#fZhYU_m#hIp$f4`GHxn+03&fWj-*6!c` zc7E#GwDNnE&noX%-YY+*w8)v=Nk!;u#IE|Bw_U2)?K&}AYzz*>+7(T?T%<q0p#HnS z>GtB5c~1HX$GLPA3zQl+3d$UHde3*_s9(*6b<Vd{wrpOm^2Bn|7bT8~pJM;qPCHk9 zD0esihj``un_sua%t*W5uaL_j_|RdGe}PN<Bk@JPDW7-WORHkb`#9_QOI7~Qyxnr9 zIY&AS>-8EPFDmY{i#{yl-Ya2Pwc_b_7x(9heV^~z{$Wyf{#zq^_vyU8&+V3aQqOi+ z7zo9GEtQebD8KV)>(#sWZyR2?UAXjm)bS4i>n8-b&!2GM!-5Nrhh@U^zVep#@bG*r zKC)gh?qA%yg>m!x9v1np7dXCQZCqb*_}Yk<7U}_V&vsm>zkb+T?$y&5PoBJxc=hz@ z4pSYSj7uLLCO)(~%;a3tR{hv);o-lxrCa&7-+6A5e)7>&Kknx{&&2IX`nF-i3Iq4| z2L#;x*Bg|_|G$v9-ffSCfy#lq^AE)HT%7!);e|7gTAP3~r+Siv;T#Fi9wj&7#~mM! zup}uNcFyqeQC=o&+%dDh#rUDq8KpGg;*On1+K<#EF>ag?;i989P3UyT(<59-svEl^ zeAg&m6Iyqq>QL_upB=){9R7#8Kd5aJ+IPh4Q2z&YCJswM4;I0LE*yehErNnBDuS*q z!iFw7g8nK3Zj0I;bozIk?|9B~h-X6QwT`kbx$ZhaTj9THmoKKxIa?xKFFxBf$!6h? z)4c_oeRA2I6gP=V=HA=bxqYYBHer2H`F94}oO_SNP14^w_0&nnl%`zq+xtt-yuPyf z@(RB$zxYzQ%RBGnExnun{!Eqn(S6JRel3r^zxU?Ry{G4W-?eA^tG)d))2u?QY?k{4 znC})lac^?%#oRdahkrkPuYW!7+Fzgk`iZteFBwbhl22C{3!dS(jjb+yT{@}v@v(yW zmYez*`^u}s>o;sa-)86kOYF<+yX)85-`<~cpoeije~k5qhYR@GYi)L%fAB_eo3owF zu9KOwE?-RKZjW`X-?*Q>V#iGJYi?ap)5{;9{CP1U-lqM@+91!oRo6t$AIUb|n8jDQ z)wZYpzL3NohwILMc19jqeN4Hc$0xu0HDQy~Ef$_*Hs1{1C^ovi^fU=d@?nYMmE9oL zvZ3fwK%MLr1Jmh^+vYekh@A+SBXa9dzUsFuJ4L2tQ$z0k(Ylm){dvLZpJK+LS||2T zp34>QsK@Wy_npa?Ri{L8_QAOAwr~2@&i-_FMkjap+4||zk4z625e<FwnX&NBzfX&g zR?j>vU)}q}#$!vMaqS<IS+fkE{+{6fza-=RMWJb{Zcf;D_c=pwnbm)7zFvDp=_h+~ zH@}|tYw-r_In$!^6W&T2vWa^?th>j!N!MT<>z&Ao{!O{14csZ_bM`yU{Tz{X|L~*k z=j$%r@7vjWFa6^APxV1BpPDQ+zaHjXl|4l-XGzS4$wB8AzIpf7U1n2j{OM<FXEq$s zdBx6qX>MCjvrfqbyOr|0yH>kwPnj%sUgpT6bwTF2$Ncy{6>$DsQTWH?T-}0AArf(1 zwco9-Y-!lc9lc;<>n$ybh5LDe{OlDzp5j$}w@+t}Q&6?Q@(CwSo;M1Pso%M+J#Ev! zJx6x`X}E65Hp$+$%_whI+_#07Y_GI`?f>#2{`i_(QQ@+ORi`w5QIg72Txogqz=Yrv z*TQ9<^c!wHFLcrC+`kx>`&M(rP4A04tv<50&%kdQvk%u&zqyANUGzLr_AMdJENY{? zT+{D|mzt-~ueImm)q5($>oEEBljbc!^?X_<lM+H!l|(J=DxIrjxivFyE_buog1{fu z#-AFJFK}4!`|aTW?I3+lu2Splg#9;j#I9~V;Jf|Ep@bWe)21?+cv|@`YMU#%Pb)!m zb48G_43~QC=JgvNrp!sVoc@A$TZ`DykSWujd=^iWpW9-^_qtgo;JSPB0+zD%t!0sO zYNhKr<(!`;UwnH!X-B|<l&guUil0twn9y))#iy*|NZ#(e@*j6iYs6;>GKSlVIZh8U zjG3%uExhq~u$-uzOo&ii^n}TYCL1#|*%%rW<9ziw;vQ|A=zI0WmX%v>tuRa5TEpmh z?Vsd>Xw^L&-*)Mh>{id4%l`hv1Fa(m9%cx2&-*vexc<XR5x+JQ86NRM<u98=t(HGE zj{KhMy{#wRE<?S2!~89qp3nSpZNAO3w~zVGGX1s9;0{#!&SASYq|tYV_JXCWZKo<c zN#dV3dro1GaGmP?1P(5>pB-mQyCqYs69is$t!Qsv;CuSuu}L*~e4H!!E;<Oyp9?CD zcHVyCy5Yf&6K$*O^`E~peg9<J^mljfotU%ow#e+WPmeL=n&ig!&3&rFU;eo8+aAW) zvjr<|W{4%HpPba{eX--hg~$x8=Bj-P<v(pd1@`@qILE_%cxkfeKj#~Q0iO>kS9v^a zc>6lwKGQiJ-nNC4w$-jzSXK2j?ChnoWjQ*Gss+AFoO8K-?3`=0cn;R*7_Ph=dNOKj z)agF{e+Fmf7QT;XPA^j3Fl|ZSOx^`gmWT3Ru=cRprT?mF*MA#{uEgig6Eq%+9eigr zMWt2Q_`S$=gZ(oD^5bpO<pXs+v=;0-lz9K)irNiH@mCU0#Yb?epR6mhH2JD=JEHdK zhwES7ew@!EZ*jG<C4XCfum0@G3+k`O7HwT>C%-52Zu_~C_w%3q<vIF2-!A$2q4<>U zyD`&$ZalHg)#<IziBBu6+~)t!x!-#F`L!Jzo|$=>)!v$QQs=3`xu0j&X3NjDjX!;` ze3{3pB);GJ%iabX9_yVZuYFAW?1uF_Uz;CdPMmzEEBNdC!bwtE`<S=-+?8GM)Y7g& zW^w)5wa*tk<ol^mefvk*m*d*oEjKPs{Koy|{^UdZ{$yRTmf!s-`2e?UWrV0^)1uAa z*L6QU9L9b#PrmN&8_m_fHm-Oa^3$}W`OXrC&$=J?JX3kM@>j99&2weX^jyAoFRiA0 z=xC8Wxx1bJ{b`*GtBP)h#ClAc!>8S&yIw<QO@iS*$MX7F?+-j(I$`&&Cw>W~RZ9;0 zU-e&AztgcaS4iwouhEUlPyO;b<=mV+X$#psOI056UwK(1p|P_@+deisq;Lu^V~}Hz zmh`Tqy=pTSS_ynMo08^McxBV3DJHxOB}M^9i&jkRVOtfmIBx#zv+q`023<U161wwP zN|Ecls&M^V+&cVs>W>7a&aORV>wITM<!Aob&SzWPCZ9VY5}N*gRi_qDC!gOZneQ`O z^(V>8J9TY7e)-@hCyln}FXkUPBxVtL?7R52$*Kn==C5JwJgJkF_j%%p#D^T0qF0w} zJLmp;)%UC1Q({bR?%rAb#3rsSXsJPHg?keJ{q6^eO!_=q*zTS*KeAS?K0x=eXYL0X zfdfB!8QT>6_RZZhdD@G^x(X9T_Rg2FVb!(d`u>1p&zlEJZ|~P}*}OX9=>7f!Uq2mH zZ#T-2lj?O-Dwk<=f6QU?|FiVd=VirpN3FM~8qGWqa^fLtng6bjGTHriPCr;R`TjIV z=b6r5H}2@Z@KniSna#7}o>x}R93pJ>r@J0!Z(H~AOLuqrY36OuDh-wG=UC@f&Mhw! za<>gpIp%uW_GN0R;>@hF<U?-rO~1@xKmBm`hR^-J;o8A=ahv9@joQuElPb2nVN!<Q z%()>!ZsIe$Hhqr#uUzfOSN#1@dVH9=`H!~`zP+<#>haknm~q)M>kUups;HF<9&Z-r zHm>jPO%wBVHrtf3K~=3|synNO@{EfQmVZjxuztm?$KF|+PfNU7^N8<-{4vKxYbWQt z{K9*<-9rAi#^nvm7j~UBPjB=-qpQJ~Y_a-_<$tY7a}NlANZdX>SoO+;-Iq7%Z(h15 zMA}O5#LR}y0|KW`dV8*Ztf*?$c=6w2we^Q>zMY-jkY1ma&y;&qTkk+p1(WFht(|`z z-t<j-aPD+rh59+?{?AuL7fKxeR;sul?D)afC$#~>+nVnx-%t3IdaUZq_x|T4AJR3y z{_u?q_;xCB^(;ftpU=upZc`AHdGsLZ)6Jv7>F1uTk3F;K$ad2$?$aM^N(<yWBYc=^ zhtIX1Phk_ky*SXVx~~2?ui>66z5MFwd)!`YWp8sZ6x(c`&?CxaT=~^h#P~+RX^Z_w z4=(<;t#nSs(r2vEHeMcfWjj7s{EA#9v`R<G<m!%gVXFyO+*d45wRyfNq(X3Yjch|- z(wZVa=C^u%ul70p@C=iV5|WY-loQF}Tfa(o<$;52mQ5Yf{;e)?C4b!OEuQR(h`9W# z@#uD^m=7+w)i0y(N7k%9+bgp*@#U(Hr8Ac^--s&BEwqgljD9ICCiC9*^`Awz<M01x zxwWBb_fdDf2kiE4+)8C{MYGnp{l0grXxqP!O`E5Pmqcp|i>OE?82-qbmdf;NlD4Sv z^o<G99H-MYZ)+u|c?$ZLYV>RJrPi-BRy4f0@b&Cw|CoP2&e--9UD*Du^0Yz1^6M4b zs}eH8j!N|ZD%6m<r>k*i^X?4`*i#bM&zkj`E!xJSQt8GK7Jb$>13$lMFS{lmdbwlD zk`EkWbKTrkH?-PJW8Rlmc-Z`<SKVCZ4I4$5tY+%jzTmf7<jId*1wGB@RNnA-?%=q( ztbX;SV4hcUZ6SN3T-kp$M7)*_{~#OM>k!?Z`M6>4spj^*6%ttw-|MHZJl@0>E%$`~ z8*5QVTXxVU)y(wS#>O|h=gVA~{!(|EJ6rN4mi4*Y_jpX7E#mF&=E5wNSgJ0l<nij% z?U}tZ8*a8to;YjznSWDl%3ld4sj>=6c2!te#mUwuW`<Ytgc!5)I8--m{$9_!vf$vV zC^ijYf!3HAhWako^)}s`P(6F?(VS`hY|%3t0`tpr7(Ld?9P8g)vFe4+R_Rx}_Zlpj zs<5)V{`jk8vDMPLVYd(Wh(9Y3J+w*xOMFN4`~9jM3m;x8n5(BHnVyzg?^N`#X^Dy} z`ymOFKT}06)K7LyI2^EA+&nUD-m<cCd9J>Y;zNwKoT2saR05YQS4}sLWJ_-BY+kwc zn^5iT(3h(vLjH-)bHBGM<>uj;6>{aD(&LXS{AqT5w)R?Vy}p2NLHr}h)3uWOPwkl? z`NmYyXy#?xsX_MJei!T(So>pp(j|NOJ@59;dCZlV!rJ%x?K%1SJyI-2jjJ0KB{siN zyrJ;?*0YH(Is-IMdS7~ZSn`R=bh#BQnpb0P%LV-_zwpFz;hZx*Y`509H0JHTZfh64 z{`7$f%cQ@|DVX@=;KcSds!jh*E9ylK#3z6KVc#w~Et=Q-{q#7k*5}$Tzw-`VnVqDQ zmVau2Wa$nAshd1<eY+OF`|e(E_jA$0pB0+BdtJKtW2U#P^IOfG=zEDLcW<V7Zl5+M zUtce0+?5w~()-x&H`*pJSpQp>v*-GRi`>n9(^WQZ<bCi$@t252)YksBdh4Fep4tDS zH1TH4N^J>o_uGfh2|isLd`7JHadG^eU2Jvw&2kwUGOcqi%9wEU9$a;Vm(NjoVLkU8 zZuUbL3zV(bIJA8VIRCKu_riDm31U~A-d$^!S2Pw|8CktFa)z+xAxnqc?udfs+bIEN zFElr~mN{2PUpk=fyg;O^>JM{C!t(T!+nQVtO5ga}D7|=(#CzY?<4<BPDBeB(`z70l zm*1S<G|p;nEj=^u@5Omn?|kb`SZLmxI&Z`Ddi(a!xCgEq4c17%_wT!wAgNp9HI2De zMOtLnx!wB8>Zhe0uX?UqJLAhmmA<sU8y|<*vsura+uyKl*5+sKzqL1P*zlyW{r%yO z-;XkhT-kKI`MpA$YkB>AwtcbkD;|cdSzf>UpRoCw+13X><=b>yMBH3=Pu}C9MT5%h zjbRR}D=qfaha^<A-h4Ry^M(zruRiTcQIOi3n7FEKufx76Y}0)-^I~pqvtKmLSTbnO z`Ol@A3#DJ#l%FxFuZ;6lkq(m!k4n~5oWfA+r|4a38&bVyN#o96CpoS#9{<NABK*<D zF6fK%W{EiGm77cwIy95m|7>CMYnh$7;}?ftd2XV*nKie>rTUD?w<gRoxR^RYd-t~b z8Ol}D<)-#q%`Zrqc=x#Z^XCbF(+&21^pR+lk7DQDB&Pai6Vt6t7xG>n`OKvjx;8Yk zVVg!<^`-wJvpUQ!XMANdk(|6pc(u=_D+@#1a;xs0J#8<O-2Xp@k29ma(^9xDRBEUB zrjRQ&w<g8+ZvXS{m+$K*_17FC=Utkz=E{nxC*Ry)eLQLJj1?On+)`Pmqhw<}qi~)n zW2w`(>FV+OYF_Dye7<#eV(*;mKZCR8t+dO$bMwf{(%jSkZ9ErwUCO$$MM>Mz`t*#6 zi7Bk1tKE`L87+}~IXicI%7mD@>TCCHx^r)9@J#s{XI&e*r<kpzZL{8NE<ZEB`nRXK zif^;+dAn=tg^O`dEx!F$V*h5l<=4OPv{uPUOAqmFcK&Q@u}b9K4)eEiOI4!GHBxUX zc+cbs3MyIS-Ie_!EG_rOJMV=urE!d%%KRI5_b;t~zFPXBgNf9+yE{)$2|fEw`;2t; z^o7eb6Wnb}PCjZou-xd%@wM-th~^~wJUITjerD;Xv(ZhTlzF7`(ylh-FSO_7ov`!& z6Umx-j!PR?*zeL<JWY5bW1XhsnP)p}MQd)ZYwPziUvpyPiVpEDWk%f(K8h8{Z7F%H z`DD@6P2xJDe(sa*9aiDJI8S}K@rh;q!hLC17CQ!9soAh;<2>i?d&dgi*qf)+UHr7c z;M(ou-onT0ed2#Hs8^Ov-}mp)uYVh}Eq-SUF0GQAr`4)n$^K@q!H23#f8|fDm=gB= zwvq6OAdN<^mC4grJaw!)<MwpovJ}5c)1`)`?gzffb<KJ3YAWltkTd;H<LCXIRM(@j zJs@6eZpG}~)1&Xq-TyT$tAly2uBYj{n`=4NJS(eg?6CYIB2ZIbU@RTJ!Tya%vF`ga z$@Xnr$tlTZIu3Uut}u#uoOaBMv|4?B73)%-)MDl`){Ks$i3JS1Hf-M!TeCFoe&O6# zT=k+Fk+}h9pA~+37^oG-el)1d{mboZv&<(~Px9)V67>1D@t=uL9`F6W?~DmUtkvu} zQmeTZJ$>4B=+dP<S$podeyCroyjpkPmIq(9UQSY!)0<K&Ri=@l{<=0JxG&vo)5@3o z%<_XDTmHJVa`W{EEXGpXZyr&Ta>z29%-nNS=1$7l7}J#simi9IMHHp|-4kQZ)~Vk6 zYWuzux!c*ppGQvrQdtuF>Ew@^sc$E4c)L36f^pdSSsO9~&oPFV-R!(_de_`-yXt*Z z8MZL3SZukavxn_f&g6R&W*>a_$K_FA{k8AWY-Kw>UWlqXbFQ;taaW?_#*F8R615&Y z^Buje?a6fy5_`Sb_JoQ4b+ZFc=KSZ}yZ6n9SPdiI&*mFW{^FT%E$@wfSoGw@hb9Nz z@T#w$EZ=<Z<IL?rjN8m|o|dt^^Rk>%5;Sr7%KDxyx_zg)`InftuaURSuRT1uz-((o zIz!1WGtrD0W!BYEZ%tl(O?6#k$SlFdm1}Nd(ya9CX6NPWmem4^cYfEf^VMz6>ufy` zHgS#2N{=snX6sd^a!>!Ym{(}C$y$roK5>0(H9u>eNPiHPnQsyz^yH?zuY<Rtgxv3M z&9;>}%AED=p$@l|#dS(0UPKk{|5ftxyZQDzETVi7GH3QlR!^2%eSj%(GtW1PZ+9C4 zZ!crjx|t<3>%s2o*@d5+u3Xn<^0HXPJn;qVwgQoW7IBx*P%+UD>U;Y755Bu4don;^ zRbyHAzQmQ?#tUBjbH33#d&Ts%tg{#Gx$#xe&QR{mp@!g8&-$34sh@7B{;K-hU+(|u z-agixh2|04XKr)9D0u#{lIz(+)k%r(x-I4`@bn6J?E1NWj_NCx30>*t#+K^(y4LD* zTg&I~_UNfpkiGEj`Gz~nADVuv&r$6ayLNh!Zs?}tmoh}UJ~l4?wE5LTjb%I7GK_Zy z_1YQs<URI`7qIX6dhp(k`p23#4!`-yno(Y`hu@Op$@@nv^VXQ8h%VdQ<|8-7pde%# zzf`K`6ww4mr_Tk6OAcTD{4njtWgpw->xtqw-5+XuitpV0Jf>iON2_&WzTDSiTK%`A z^sZX|<dIysvG<7O8S{+YBAxp=vaNQ1K9hRdrRIBcw&|Q0#``<j-?fHW)Rfidzx#Wu zy7#*#XXEmuU2lHRoZc?7al5vE>`u4%`4v?k8fJFSjqIBFaHH+c1#1>9D09!K+u_As zBK2)^8~cG1Z*1hvHM}-E?VHJ6@cAms%bb<nsf<#dJ$j+jU9@`_%&^t@yDagWz?Xk_ z)~<W4KJCBfxxl_7e5U=uajQHJx=&$iW2--2-TUjDq`v!<#maALp5ODI(K7$=bN&S_ z<rd!_oQ{6bcwAS@HG*ULgCm~8llKHkX3w6oNoIL|#>6eV{#-5&72S5F*h0i=p4CTX z-jjmykEY%zdv{=CHh<HWO{<z@O#@XMJ>R-bH<7nHUsIfP?L*-@<LUYb{JND?7B+Qk z+28({v;J<}w4YmlZLNuKeY(5ms`gL0BMX<S6v<d!%=DbU_d=`au78D&$L6{GUGSED zLerhn8=pC~Z%m$F*Xg)Xe#IT-8}CH7YL{*dT@k(dMSw!!`|FNHdX{;Y*GLLqb)OaS z<7>BnR709bJKN;$2LHEaW;>GN9~CakV1H0vSW}tEyukfY{lNwE(gL$NUTGTtw^WhY z&n{R|&`_?C7wgiSQM#EgZ%3HW7Cs554=4Iwb1^Arie6atD00gZ-_C2Cu0mODR>z%6 z_X&n<x{~M3XD{1tP>@&6SHDc4LZrZ8;aXpze3KQQXV%n41+uX_x6Y27>dL<UW%UD9 zQ*|eagWX-N1{)WM)&GhXn0lPKK5Y?WfAaoo5(^eg-jY?SbesR_gRe{d7M;7!s2qE> zL2*-v-?avXw2q~3SH21PAH(;}@%-AkPmLtinwM_Q`><N4_+n%64&xu<GCS*@@PAsg z=y~3w=Z<fMcSLgEk+A6wn{0no^tbD!EZ<FLt**|upJdEoP}yaYn<f=of15>XO={Q7 zijGf5-wNNGvcB`&Ln9%hKc8y?=5Kp?_o9SjZ|)Y2leZo(I923)qlDWz?#_i6rac>G zuFL(e+-baQd79zOV_TS%+0{8)3yPu@_hnp3F^YWoa$2`{>w50~PfL4md@HUf+;Lp~ zkjK_Oq3!3g+_hAslugeW{c^r_XMsk&RKt@HRcjeho`$bNrR$D%%(}baOp?n3v7E0S z-j~~Ka-I0nL!RcH?vQCWx!ZogtJ8{K;?m1kwhNAMy|UtYW#E1L@y(TWmNF#=7Cch1 zRc$|Mv`kcLr}~D6oLLi&Bt>tYF=tE9oD#lCAKHGtadZ~k_SJP>cHUgwyx9KC-6kSe zTI&llr1vmI?%24Z$^J*c{liUrnAW5=iEX(a{w?#9Q*wsuDzB+6Tg_&*O6+i4<mrFb z;L^|3)~{htmPed0-CetEUE1our!01`TwSE;Auasqx#6Wvyg3#VnEQ;cKEJ)RX}99S zO&#Y9(`IanuweLgu+T%-Q1xZ$%95m#p5^DF)OWR&*887*e(l!$t$rqb?S5kZC&YqQ z*eLSyCzNhUbk}IV*KYi??eAIDR9n9H){{0iXR7z7Td%3S<rFF*J9$Zf>Sk^=-`cL+ z@YK``YRQFb?{U4lHQi_FJ9+(!Y>Bt6mDD>OXRo_-Vb;p#DV%F=YndNSo2$ER<v|8M zgYvCH^LTu{bx+hU=QcLl{Q1V|@A+0<U57UEUpjemqhr|X)qRPInSsl=m87CtQgw^& zEqtQ2gUfhb5MRE<6nW#5m%irZhDB^Sy3oM)m*V1<SKUV{eue&2V7_qW)GDihtc|8O zM2*WfJZ-x?GwZ(%A79qy!q>c8R-UwFN^06;X814gXajTU%hD3pkoq_iZ_y(z8c*YP z@15=U*1Bw4SF>?z<|OW`?q5`U{;F-*8+zt3tBI$MOq1)hw>$1>3Ld^#!{$4c>u#&P zx6$VYyXJG@%^KTs7lvHiXX9nG?S8{!2@AJd&wf1jn`E$e-5k*v-P?HwbSzxER<TNN zyuht(^~WYN=uFiW$=9-)Pg=j%t3+Cg89iUpAR!ie;JkG2{O_ArrkINuUI^>@w&m+2 z7wLwXt=E@EoZ4dL-t}$kfiq&>s*k$fO#9X5&t09}-F<Uvq?xzf!P(p~D`HwWstVeQ z|LT<en%BKhea7uxb-&Lse?t%RFMs)R=O+GxB}bFQZo269+&cB+tbW@f4Zn|^89VD; z?z6;;)SZdbu-f;R;c|ghP7dev?J_<yy>IW{bLaM<EQxQ{+~?}*=L)sNN6V&sjn2Ma zS>f8=wqbX3xP)P9K)dN)OP7CV^RB;6x_g@EC)<}lyKg66nKNBFDM;?-p}r^E*`@i# zo~$-qw*RhxbK}%a3Z+FMGP09J;};|aKXzzps&|u}Xg+0vef{MRp2r*o4sL!sb;s#= z_J~(c-q+b?zE^(ju}8-~*41~)%9UH6rJfCZ(Qq_zQ_HNIEuTf^PFu`o`f^K@!1)Dz z0ZM;=mK{ER)4g=x)-}72#VfA&(0HV=Y2^;3^4}kM+m{ty=~H_y>eyHp6T77PrB#}Q z(siqU#TgZU>ld>rd%h~UoEUsaj4yQm+EnSgx4fS%`|8_wvQIapaF@se-vt{#cDUF{ z^u)irW}bh4Estid{+hjq9xV~={8!<px%kkopMS$O&M3q!2=M=-$fYkR(P*{S`G~!F zip?Umqw+l`cC|NWP7hVt<Tvfd*2=XkE4@1dR!gi&znYmdZ@qneN9r$&b#H#>H}+Z_ zbWL;g{<Y!hg{fA|9xD^BE>Y5ql=N0#epEztW4_$>#z!0$ufHyw{b$+#3oE4`^(LD? zTUKB2u5FUg{X@(~CL-%aoiFa#Q*pwPsi<SZ9=oYuDp_QtUpmx&uCKG`eD#mRZ`wk; z0JW1oK{KcLr1+G$NG%VS7O6k#Ws&MpzF1SX{`S7kSL+1}KK^H4u<Bu)<SU+bucAqz zk{^A1d}6jpX>bXDc+|9OM$eDaEuvA+;}dssyh_*^aiTdZ@^sVX&FbqT45|+;z50Az zUDYqC?#K4G687ciW!W!%9B`dUe2dP0*Q5Wf*-NeNO8g79G4EaCXZEJ^`)vb>dY{K4 z57S=eZ?N7`k&=2-Yu(J2xtmrm)Og+7tQH?_`Qccm@T=;h^&j_eUY+ake)~T)ZQ~<i z?gm~{wJc{k*G|xhox09wRn-B_{;tiumQ~69`>keNvitsad9dHV#g{d!|3AH~IVHBs zASg^GSU`BaSD?z~6~<CoA(B_sO8G4~$|lx}JZqFu{u?f~_ru5ki#(?m9FN}n{lCcc z$_f9E=hSb#{O3ehXX@&A{}WgL><IXK?PFBAYTV)2+fH-;_viZs2!DF0p8r<1jBR(~ z(Yzm-OE~_W&ntXAD=E^Grz2UAUt2-{tUlY(Y2Rh)`tLVBdZ8hZ{8Qv(N{vZJpB9rv z@smK-NA*kB-{Za?_5QF??L31AhB2a=yMnluPmSWcvUXyq`%LC0AtlDur!Po;eo<5K z_>rsG>8MNQt9oB8(KMb|61ekt+`c0*M-M%{`)}#DX>!ZA$sd`0``**4ht@Y|ZrCfQ z&;K~|`BbK``HRBUFMLe6G{-V$($-V?w(aGAxiz+y{M6ri{7rqu&8ISV=D*&5YyRK3 z0RFkJTkF2^{ovpJt3`R%uP4g$+}B+@%=q=n<+E!qKXjIi>6)`ZII3%!qIyd0(f4y6 z80`>w^twRu^<`dP*S#OUi=5Ve!@B&C=7+1RpITY7e4VzGak3X{Q0SWVYHDU(oMEB) z{!c^LgDQOseG2(kDK9+Lp<Vys^rpWW?*slS{<^Yfv2cWmvRe4A^9#BjTsWSxBW!Q0 zZ_mV6pZl7emc7up@U+lXCDmDD$rYW}-PbanJ!s%gshp{`ZGtu@d#BtNH-T``Q);PU zDsNKwQca!}ose60;u>q^`Gn_(6@yMqJHaejS@H6v!;4;5h3S@mTAx<%o^$MXua6Mo zNNgx@S$2TiAnUND6Tj!YFOJhL{+V!6lf_DT`s%C8k6eCXB*{2w`lg45m(qWwTg|DS z=<TR>?vCDMR<`6YsoVdav>z*2?&D{$SSvD6X=h}%QFPP{-et@=c^3^boA^|cY(Lml zHS9XrK1s&(z^Z%+xxb9fT63J2pNJ6HF{ig)@oVdC$B9e*7Hc19j_1qb+PLY`<PGt& z_o^IC@Gv!WtBn%#+xnY3R^<h!<htOUk&dVBxw_Uacv`H#%1xii>$lqbpZ^Qqc1UfE zzwtM0dH#EuTX(mW$X5M6_4dZ+E6@MGyw|?y-=X5jQkTFAkC2p%h|HAA(uq5JT9bGE zeRqqy`CUxp;=lF0yy1!0?fbq?tH1X`$)N0SwIGY(%}?(o{AHC+u}o)@m@zj}E!Da- zLNepJ;EmE})^p#-EHan)S{1zO-iGZ5&Yg>yn{Oa_nTJj1?VEdoLc6x@)BhdcmHxm5 zyy^#Zab2JWkIHo8IvF8TgAMxs{?y<9-~0aG|9{60TsUyx#(@I|PMlz1V&mh{;So4+ zf`MJeAgZhJAmfpQB#{J0hJ7ozr!!s`5oR&8FfjwI8M0xrFr0qAPDY~s$i)JgBbHU? z5{`0BlaB6@)n+@|RO?VBy@Y2$(9*LxY)i_QbWRD(;hDzL=_Z_fMWWYy;}Mg^<{MR{ zV%g14ets{xr*q}^-~ayC@ADTq7W^$P`|Z~IU-wljF4WQ0>~u-mo^$fmRqZ=&`lYc8 z`9AW<+9$q|Dc!LB<vFIp1r{7PKh!JvcQ&~^sp|0J-Z)=%UUqWf!DE}WdA9RS>66LW zIaSUjaMA?3C)NG?)_2Um!J{_6O>diI)~<w9<DN-gDz(3OOMdM8ygm5Lx3KD;I-kCA z_VRS}%r!W7v+`0*X+%y%!~FUsMNOMOA2D3^K6q;JF-`I6JkB6@cNSI+Tj#w~yN_$u z#~#<5zH;%&s|-sQTZO!Q`uM%%o7Ew|wZeZ@Xe?H$Iix(L?%}Hy8#*RFo}&GiS!v3} zS05Bqe@ea+e)CxJ;p4SETwlL&hP(axts%aqD1K#0V7r^vbhez2oV_0c`(#&H{ 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 Y&C`E(%F6Q?nH!oLbE&Gj`nz!f0L|3ek^lez diff --git a/doc/rapport.tex b/doc/rapport.tex index e51283e..19a3c6b 100644 --- a/doc/rapport.tex +++ b/doc/rapport.tex @@ -18,6 +18,7 @@ \usepackage{unicode-math} \defaultfontfeatures{Scale=MatchLowercase} \defaultfontfeatures[\rmfamily]{Ligatures=TeX,Scale=1} + \setmonofont[]{JetBrains Mono} \fi % Use upquote if available, for straight quotes in verbatim environments \IfFileExists{upquote.sty}{\usepackage{upquote}}{} @@ -39,14 +40,14 @@ \IfFileExists{xurl.sty}{\usepackage{xurl}}{} % add URL line breaks if available \IfFileExists{bookmark.sty}{\usepackage{bookmark}}{\usepackage{hyperref}} \hypersetup{ - pdftitle={Bootiful Déploiement d'OS à choix durant le processus de boot}, + pdftitle={Bootiful}, pdfauthor={Dimitri Lizzi}, pdflang={fr-CH}, pdfkeywords={Bachelor, HEPIA, HESSO, Bootiful}, hidelinks, pdfcreator={LaTeX via pandoc}} \urlstyle{same} % disable monospaced font for URLs -\usepackage[margin=2.5cm,includefoot,includehead]{geometry} +\usepackage[includeheadfoot,margin=2.5cm]{geometry} \usepackage{color} \usepackage{fancyvrb} \newcommand{\VerbBar}{|} @@ -117,7 +118,7 @@ \usepackage{float} \usepackage{lastpage} \usepackage{fvextra} -\DefineVerbatimEnvironment{Highlighting}{Verbatim}{frame=single,breaklines,commandchars=\\\{\}} +\DefineVerbatimEnvironment{Highlighting}{Verbatim}{frame=single,breaklines,commandchars=\\\{\},fontsize=\footnotesize} \pagestyle{fancy} \setlength{\headheight}{14pt} @@ -129,7 +130,6 @@ \fancyhead[CO,CE]{Déploiement d'OS à choix durant le processus de boot} \fancyhead[RO,RE]{Dimitri Lizzi} \fancyfoot[LO,LE]{août 2020} - \fancyfoot[CO,CE]{} \fancyfoot[RE,RO]{\thepage /\pageref{LastPage}} @@ -137,6 +137,7 @@ \setlength{\parindent}{0pt} \setlength{\parskip}{9pt} +\setlength{\beforechapskip}{-10pt} \OnehalfSpacing \ifxetex @@ -146,9 +147,20 @@ \else \usepackage[shorthands=off,main=french]{babel} \fi +\newlength{\cslhangindent} +\setlength{\cslhangindent}{1.5em} +\newenvironment{cslreferences}% + {}% + {\par} -\title{Bootiful\\ -Déploiement d'OS à choix durant le processus de boot} +\title{Bootiful} +\usepackage{etoolbox} +\makeatletter +\providecommand{\subtitle}[1]{% add subtitle to \maketitle + \apptocmd{\@title}{\par {\large #1 \par}}{}{} +} +\makeatother +\subtitle{Déploiement d'OS à choix durant le processus de boot} \author{Dimitri Lizzi} \date{Août 2020} @@ -158,37 +170,36 @@ Déploiement d'OS à choix durant le processus de boot} \renewcommand*\listtablename{Liste des tableaux} % Sets the page numbering style to roman %\pagestyle{headings} -\setcounter{page}{1} -\pagenumbering{roman} +%\setcounter{page}{1} +%\pagenumbering{roman} % Hides the page number for the cover page \thispagestyle{empty} +\addtolength{\voffset}{-5pt} % Hides the header for the cover page % Cover page \begin{figure} + \vspace*{-5cm} \begin{sffamily} \begin{minipage}{.4\textwidth} \centering - \hspace*{-3cm}\includegraphics[height=2cm,bb=0 0 278.9 70.92]{images/logo_hepia.svg} + \hspace*{-3cm}\includegraphics[height=1.25cm]{images/logo_hepia.pdf} \end{minipage}\qquad \begin{minipage}{.4\textwidth} \centering - \hspace*{5cm}\includegraphics[scale=1]{images/hes.png} + \hspace*{5cm}\includegraphics[height=1.25cm]{images/logo-hesso-geneve.pdf} \end{minipage} \end{sffamily} \end{figure} \begin{center} - \huge{Bootiful\\ -Déploiement d'OS à choix durant le processus de boot}\\ - \vspace{.5cm} - \IfFileExists{images/front-logo.png}{ - \includegraphics[width=8cm,height=5cm]{images/front-logo.png}\\ - }{ - \vspace{5cm} - } - + \vspace{1.5cm} + \includegraphics[height=5cm]{images/bootiful_logo_final.pdf}\\ \vspace{5mm} + + \huge{Déploiement d'OS à choix durant le processus de boot}\\ + \vspace{2cm} + \large{Thèse de Bachelor présentée par}\\ \vspace{5mm} \textbf{\Large{Dimitri Lizzi}}\\ @@ -196,12 +207,12 @@ Déploiement d'OS à choix durant le processus de boot}\\ \large{pour l’obtention du titre Bachelor of Science HES-SO en}\\ \vspace{5mm} - \textbf{\Large{Ingénierie des technologies de l’information avec orientation en \\logiciels + \textbf{\Large{Ingénierie des technologies de l’information \\avec orientation en \\logiciels et systèmes complexes}} \vspace{5mm} \textbf{Août 2020\\} - \vspace{5mm} + \vspace{8mm} \begin{tabular}{ p{6cm} } \multicolumn{1}{c}{Professeur-e HES responsable}\\ \multicolumn{1}{c}{\textbf{Florent Glück}}\\ @@ -213,123 +224,96 @@ et systèmes complexes}} \tableofcontents \newpage +\chapter*{Remerciements} +\addcontentsline{toc}{chapter}{Remerciements} + +\textbf{TODO: remerciements} + +\addcontentsline{toc}{chapter}{Résumé} +\includepdf{abstract.pdf} + +\addcontentsline{toc}{chapter}{Énoncé} +\includepdf{statement.pdf} + \chapter*{Liste des acronymes} \addcontentsline{toc}{chapter}{Liste des acronymes} \begin{description} -\item[EFI \protect\hypertarget{acronym__EFI}{}{}] -\emph{Extensible Firmware Interface}: interface micrologicielle -extensible unifiée +\tightlist \item[BIOS \protect\hypertarget{acronym__BIOS}{}{}] \emph{Basic Input Output System}: système de base d'entrée sortie -\item[FTP \protect\hypertarget{acronym__FTP}{}{}] -\emph{File Transfer Protocol}: protocole de transfert de fichier \item[DHCP \protect\hypertarget{acronym__DHCP}{}{}] \emph{Dynamic Host Configuration Protocol}: protocole de configuration dynamique des hôtes -\item[GPT \protect\hypertarget{acronym__GPT}{}{}] -\emph{GUID Partition Table}: table de partitionnement GUID -\item[GRUB \protect\hypertarget{acronym__GRUB}{}{}] -\emph{GRand Unified Bootloader} EFI -\protect\hypertarget{acronym__EFI}{}{} - +\item[EFI \protect\hypertarget{acronym__EFI}{}{}] \emph{Extensible Firmware Interface}: interface micrologicielle extensible unifiée -\end{description} - -FTP \protect\hypertarget{acronym__FTP}{}{} HEPIA -\protect\hypertarget{acronym__HEPIA}{}{} \textasciitilde{} \emph{File -Transfer Protocol}: protocole de transfert de fichier \textasciitilde{} -Haute école du paysage, d'ingénierie et d'architecture de Genève - -\begin{description} -\tightlist +\item[ESP \protect\hypertarget{acronym__ESP}{}{}] +\emph{EFI System Partition}: partition système EFI +\item[FOG \protect\hypertarget{acronym__FOG}{}{}] +\emph{Free Open-source Ghost} +\item[FTP \protect\hypertarget{acronym__FTP}{}{}] +\emph{File Transfer Protocol}: protocole de transfert de fichier \item[GPT \protect\hypertarget{acronym__GPT}{}{}] \emph{GUID Partition Table}: table de partitionnement GUID -\item[HTTPS \protect\hypertarget{acronym__HTTPS}{}{}] -\emph{HyperText Transfer Protocol Secure}: protocole de transfert -hypertexte sécurisé \item[GRUB \protect\hypertarget{acronym__GRUB}{}{}] \emph{GRand Unified Bootloader} -\item[HTTP \protect\hypertarget{acronym__HTTP}{}{}] -\emph{HyperText Transfer Protocol}: protocole de transfert hypertexte \item[HEPIA \protect\hypertarget{acronym__HEPIA}{}{}] Haute école du paysage, d'ingénierie et d'architecture de Genève -\item[IPFS \protect\hypertarget{acronym__IPFS}{}{}] -\emph{InterPlanetary File System}: système de fichier inter-planétaire \item[HTTPS \protect\hypertarget{acronym__HTTPS}{}{}] \emph{HyperText Transfer Protocol Secure}: protocole de transfert hypertexte sécurisé -\item[IP \protect\hypertarget{acronym__IP}{}{}] -\emph{Internet Protocol}: protocole internet \item[HTTP \protect\hypertarget{acronym__HTTP}{}{}] \emph{HyperText Transfer Protocol}: protocole de transfert hypertexte -\item[LDAP \protect\hypertarget{acronym__LDAP}{}{}] -\emph{Lightweight Directory Access Protocol}: protocole léger d'accès à -un annuaire +\item[IBM \protect\hypertarget{acronym__IBM}{}{}] +\emph{International Business Machines corporation} \item[IPFS \protect\hypertarget{acronym__IPFS}{}{}] \emph{InterPlanetary File System}: système de fichier inter-planétaire -\item[MBR \protect\hypertarget{acronym__MBR}{}{}] -\emph{Master Boot Record}: enregistrement d'amorcage maître \item[IP \protect\hypertarget{acronym__IP}{}{}] \emph{Internet Protocol}: protocole internet -\item[NAT \protect\hypertarget{acronym__NAT}{}{}] -\emph{Network Address Translation}: traduction d'adresse réseau \item[LDAP \protect\hypertarget{acronym__LDAP}{}{}] \emph{Lightweight Directory Access Protocol}: protocole léger d'accès à un annuaire -\item[NFS \protect\hypertarget{acronym__NFS}{}{}] -\emph{Network File System}: système de fichiers en réseau +\item[MAC \protect\hypertarget{acronym__MAC}{}{}] +\emph{Media Access Control (address)}: adresse physique \item[MBR \protect\hypertarget{acronym__MBR}{}{}] \emph{Master Boot Record}: enregistrement d'amorcage maître -\item[OS \protect\hypertarget{acronym__OS}{}{}] -\emph{Operating System}: système d'exploitation \item[NAT \protect\hypertarget{acronym__NAT}{}{}] \emph{Network Address Translation}: traduction d'adresse réseau -\item[PC \protect\hypertarget{acronym__PC}{}{}] -\emph{Personal Computer}: ordinateur personnel \item[NFS \protect\hypertarget{acronym__NFS}{}{}] \emph{Network File System}: système de fichiers en réseau +\item[NVRAM \protect\hypertarget{acronym__NVRAM}{}{}] +\emph{Non-Volatile Random Access Memory}: mémoire vive non volatile +\item[OS \protect\hypertarget{acronym__OS}{}{}] +\emph{Operating System}: système d'exploitation +\item[PC \protect\hypertarget{acronym__PC}{}{}] +\emph{Personal Computer}: ordinateur personnel \item[PXE \protect\hypertarget{acronym__PXE}{}{}] \emph{Pre-boot eXecution Environment}: environnement d'exécution pré-démarrage -\item[OS \protect\hypertarget{acronym__OS}{}{}] -\emph{Operating System}: système d'exploitation \item[SCP \protect\hypertarget{acronym__SCP}{}{}] \emph{Secure CoPy}: protocole de copie sécurisée sur le réseau -\item[PC \protect\hypertarget{acronym__PC}{}{}] -\emph{Personal Computer}: ordinateur personnel +\item[SI \protect\hypertarget{acronym__SI}{}{}] +Système d'Information \item[SMB \protect\hypertarget{acronym__SMB}{}{}] \emph{Server Message Block} \item[SSH \protect\hypertarget{acronym__SSH}{}{}] \emph{Secure SHell}: protocole de terminal à distance securisé -\item[PXE \protect\hypertarget{acronym__PXE}{}{}] -\emph{Pre-boot eXecution Environment}: environnement d'exécution -pré-démarrage -\end{description} - -SCP \protect\hypertarget{acronym__SCP}{}{} TFTP -\protect\hypertarget{acronym__TFTP}{}{} \textasciitilde{} \emph{Secure -CoPy}: protocole de copie sécurisée sur le réseau \textasciitilde{} +\item[TFTP \protect\hypertarget{acronym__TFTP}{}{}] \emph{Trivial File Transfer Protocol}: protocole simplifié de transfert de fichiers - -\begin{description} \item[UEFI \protect\hypertarget{acronym__UEFI}{}{}] \emph{Unified Extensible Firmware Interface}: interface micrologicielle -extensible unifiée SMB \protect\hypertarget{acronym__SMB}{}{} - -\emph{Server Message Block} +extensible unifiée +\item[WWW \protect\hypertarget{acronym__WWW}{}{}] +\emph{World Wide Web}: toile mondiale / réseau mondial \end{description} -WWW \protect\hypertarget{acronym__WWW}{}{} SSH -\protect\hypertarget{acronym__SSH}{}{} \textasciitilde{} \emph{World -Wide Web}: toile mondiale / réseau mondial \textasciitilde{} -\emph{Secure SHell}: protocole de terminal à distance securisé - \newpage + \listoffigures \newpage + \listoftables \hypertarget{introduction}{% @@ -402,22 +386,99 @@ ce base sur une ébauche d'un travail déjà existant. dans le cas de nombreux téléchargements effectués en parallèle. \end{itemize} -\hypertarget{muxe9thodologie-de-travail}{% -\section{Méthodologie de travail}\label{muxe9thodologie-de-travail}} +\hypertarget{duxe9roulement}{% +\section{Déroulement}\label{duxe9roulement}} -\textbf{TODO: Expliquer comment le travail a été planifié, les meetings -hebdomadaires, les outils à disposition, le fait de travailler à -distance dans un contexte ``cours du soir''} +Ce projet n'a pas n'a pas été réalisé dans les locaux +d'\protect\hyperlink{acronym__HEPIA}{HEPIA} mais à distance, depuis la +maison, en partie à cause de la situation sanitaire due au COVID-19 mais +aussi parce qu'il est effectué dans le cadre d'un bachelor en cours du +soir, en parallèle à une activité professionnelle à 80\%. -\hypertarget{cas-dutilisation}{% -\chapter{Cas d'utilisation}\label{cas-dutilisation}} +Des rendez-vous hebdomadaires avec le professeur responsable Florent +Glück ainsi que l'assistant Sébastien Chassot ont été organisés tous les +mercredis, afin d'assurer un suivi du projet. + +\hypertarget{matuxe9riel-uxe0-disposition}{% +\section{Matériel à disposition}\label{matuxe9riel-uxe0-disposition}} + +Deux mini-ordinateurs ont étés prêtés par +\protect\hyperlink{acronym__HEPIA}{HEPIA} pour la durée du projet, afin +d'effectuer des tests sur du matériel réel. Les spécifications de ces +ordinateurs sont définies dans la table \ref{mini_pc_specs}. + +\begin{longtable}[]{@{}ll@{}} +\caption{Spécifications techniques des ordinateurs mis à disposition +\label{mini_pc_specs}}\tabularnewline +\toprule +\begin{minipage}[b]{0.19\columnwidth}\raggedright +Caractéristique\strut +\end{minipage} & \begin{minipage}[b]{0.75\columnwidth}\raggedright +Description\strut +\end{minipage}\tabularnewline +\midrule +\endfirsthead +\toprule +\begin{minipage}[b]{0.19\columnwidth}\raggedright +Caractéristique\strut +\end{minipage} & \begin{minipage}[b]{0.75\columnwidth}\raggedright +Description\strut +\end{minipage}\tabularnewline +\midrule +\endhead +\begin{minipage}[t]{0.19\columnwidth}\raggedright +Constructeur\strut +\end{minipage} & \begin{minipage}[t]{0.75\columnwidth}\raggedright +\emph{DELL}\strut +\end{minipage}\tabularnewline +\begin{minipage}[t]{0.19\columnwidth}\raggedright +Modèle\strut +\end{minipage} & \begin{minipage}[t]{0.75\columnwidth}\raggedright +\emph{Optiplex 7060 micro}\strut +\end{minipage}\tabularnewline +\begin{minipage}[t]{0.19\columnwidth}\raggedright +Processeur\strut +\end{minipage} & \begin{minipage}[t]{0.75\columnwidth}\raggedright +\emph{Intel® Core™ i7-8700 3.20GHz}\strut +\end{minipage}\tabularnewline +\begin{minipage}[t]{0.19\columnwidth}\raggedright +Mémoire vive\strut +\end{minipage} & \begin{minipage}[t]{0.75\columnwidth}\raggedright +8 GiB (2 barettes 4GiB \emph{SODIMM DDR4 Synchronous} 2666 MHz (0.4 +ns))\strut +\end{minipage}\tabularnewline +\begin{minipage}[t]{0.19\columnwidth}\raggedright +Disque\strut +\end{minipage} & \begin{minipage}[t]{0.75\columnwidth}\raggedright +\emph{TOSHIBA KSG60ZMV} SSD 476GiB (512GB)\strut +\end{minipage}\tabularnewline +\begin{minipage}[t]{0.19\columnwidth}\raggedright +Réseau\strut +\end{minipage} & \begin{minipage}[t]{0.75\columnwidth}\raggedright +\emph{Intel e1000e Gigabit Ethernet}\strut +\end{minipage}\tabularnewline +\bottomrule +\end{longtable} + +\hypertarget{muxe9thodologie}{% +\section{Méthodologie}\label{muxe9thodologie}} + +Le travail a été découpé en plusieurs parties, dont la durée a été +estimée en semaines de travail. Un planning a été effectué sous la forme +d'un diagramme de Gantt. Ce diagramme est visible dans la figure +\ref{planning_gantt}. + +\begin{figure} +\centering +\includegraphics{images/planning.pdf} +\caption{Diagramme de Gantt du planning\label{planning_gantt}} +\end{figure} -\textbf{TODO: décrire les cas d'utilisation du projet à l'aide d'un -diagramme de use cases qui montre les inter-actions possibles entre les -différentes entités du sytème que sont les utilsateurs, administrateurs, -les postes clients, le serveur, les images, les configurations. Le -diagramme doit décrire les aspects fonctionnels du système (quoi) sans -détailler les aspects techniques (comment).} +\hypertarget{analyse}{% +\section{Analyse}\label{analyse}} + +\hypertarget{cas-dutilisation}{% +\section{Cas d'utilisation}\label{cas-dutilisation}} L'aspect fonctionnel du système à réaliser est décrit avec un diagramme de cas d'utilisations dans la figure \ref{diagram_usecases}. @@ -429,8 +490,9 @@ de cas d'utilisations dans la figure \ref{diagram_usecases}. système.\label{diagram_usecases}} \end{figure} -\hypertarget{uxe9tat-de-lart}{% -\chapter{État de l'art}\label{uxe9tat-de-lart}} +\hypertarget{uxe9tude-des-solutions-existantes}{% +\section{Étude des solutions +existantes}\label{uxe9tude-des-solutions-existantes}} De nombreux systèmes de déploiement d'\protect\hyperlink{acronym__OS}{OS} existent, mais aucun d'entre eux @@ -441,53 +503,120 @@ Les sous-sections qui suivent décrivent quelques-uns de ces systèmes, leurs points forts et points faibles et pourquoi ils ne sont pas adaptés tels-quel pour ce projet. -\hypertarget{ibm-tivoli-rembo}{% -\section{IBM Tivoli / Rembo}\label{ibm-tivoli-rembo}} - -\textbf{TODO: expliquer que ce projet se rapproche le plus des objectifs -du projet, qu'il a été développé initialement à l'université de Genève -et a été utilisé à HEPIA par le passé avec succès. Expliquer le rachat -par IBM et la problématique de la licence couteuse. Introduire l'intérêt -d'une solution open source pour ne pas retomber dans le meme schéma.} - -\hypertarget{fog}{% -\section{Fog}\label{fog}} - -\textbf{TODO: expliquer le fonctionnement et les cas d'utilisation de -fog, l'utilisation actuelle de ce système dans l'école, de ses -limitations et pourquoi il ne permet pas de répondre aux objectifs de ce -projet.} +\hypertarget{bpbatch-rembo-ibm-tivoli}{% +\subsection{\texorpdfstring{BpBatch / Rembo / +\protect\hyperlink{acronym__IBM}{IBM} +Tivoli}{BpBatch / Rembo / IBM Tivoli}}\label{bpbatch-rembo-ibm-tivoli}} + +Ce système est l'inspiration directe de ce projet. Son développement a +commencé en 1996 au département informatique de l'université de Genève +par Marc Vuilleumier Stückelberg et David Clerc. + +Les fonctionnalités de ce projet sont similaires à celles visée par le +projet \emph{Bootiful}. Il permet aux postes clients de lancer un mini +système d'exploitation via \protect\hyperlink{acronym__PXE}{PXE} au +démarrage de la machine. Ce mini-système permet de télécharger et +déployer des images de système d'exploitation sur la machine, tout en +créant une copie en cache à la fin du disque pour éviter de la +télécharger plusieurs fois. + +La première version, nommée \emph{BpBatch} fut distribuée gratuitement +sur internet. Une entreprise nommée \emph{Rembo Technology Sàrl} a +ensuite été fondée en 1999 pour continuer un développement commercial de +ce projet sous le nom de \emph{Rembo}. En 2006, la société a été +rachetée par IBM et le projet a été intégré à leur solution \emph{Tivoli +Provisionning Manager}. + +Ce système réponde aux besoins de +\protect\hyperlink{acronym__HEPIA}{HEPIA}, et il a même déjà été utilisé +au sein de l'institution par le passé. Il a cependant été abandonné à +cause de sa licence devenue très couteuse et de sa complexité devenue +trop grande pour les besoins simple de l'école. + +Le développement d'une solution alternative \emph{open-source} plus +simple et se basant sur des briques logicielles existantes serait donc +très intéressante. + +\hypertarget{fog-project}{% +\subsection{\texorpdfstring{\protect\hyperlink{acronym__FOG}{FOG} +project}{FOG project}}\label{fog-project}} + +\protect\hyperlink{acronym__FOG}{FOG} est une solution open-source +gratuite permettant de déployer des images de systèmes d'exploitation +sur des postes clients. + +Elle fonctionne avec une architecture client-serveur. Le serveur est +accédé par une interface web, où un administrateur peut gérer ses images +et les déployer sur des clients qui démarrent un logiciel de déploiement +avec \protect\hyperlink{acronym__PXE}{PXE}. + +Cette solution est utilisées dans certaines classes à +\protect\hyperlink{acronym__HEPIA}{HEPIA} pour déployer des images sur +certains postes, notemment pour les travaux de laboratoire de réseau. + +Malheureusement, ce système ne répond pas exactement au cahier des +charges de ce projet: il est plutôt conçu pour ``pousser'' des images +sur des clients, depuis le serveur, après une initiation du déploiement +par un administrateur. Nous souhaitons plutôt un système ne nécessitant +pas d'intervention d'un administrateur pour initier un déploiement. + +De plus,\protect\hyperlink{acronym__FOG}{FOG} ne dispose pas de +mécanisme de cache sur les clients permettant de ne pas télécharger les +images plusieurs fois. À chaque fois qu'un image doit être déployée, +elle doit être téléchargée à nouveau depuis le serveur, ce qui peut +prendre beaucoup de temps et doit être planifié à l'avance. \hypertarget{clonezilla}{% -\section{Clonezilla}\label{clonezilla}} - -\textbf{TODO: expliquer le fonctionnement, les cas d'utilisation le -contexte. Parler de l'outil partclone et de ses avantages. Expliquer -pourquoi il n'est pas adapté tel quel, mais aussi pourquoi il est -intéressant de réutiliser certaines parties.} +\subsection{Clonezilla}\label{clonezilla}} -\hypertarget{ghost}{% -\section{Ghost}\label{ghost}} +\emph{Clonezilla} est une solution open-source et gratuite de création +et de restauration d'images. -\textbf{TODO: expliquer le fonctionnement et mettre en parallèle à fog -et clonezilla et souligner les problématiques d'une solution commerciale -au lieu d'une solution open-source. } +Cet outil peut être utilisé de deux manières: -\hypertarget{acronis-trueimage}{% -\section{Acronis TrueImage}\label{acronis-trueimage}} +\begin{itemize} +\tightlist +\item + En faisant démarrer les clients sur le réseau. Ils chargent un petit + système d'exploitation de déploiement depuis un un serveur + \protect\hyperlink{acronym__PXE}{PXE}. Ils peuvent ensuite initier le + déploiement ou la restauration d'une image depuis/vers ce serveur. +\item + En faisant démarrer les clients sur un CD ou une clé USB. Ils peuvent + ensuite initier le déploiement ou la restauration d'une image + d'\protect\hyperlink{acronym__OS}{OS} depuis/vers sur un autre disque + ou un serveur distant. +\end{itemize} -\textbf{TODO: expliquer le fonctionnement et mettre en parallèle à fog -et clonezilla et souligner les problématiques d'une solution commerciale -au lieu d'une solution open-source. } +Un avantage de \emph{Clonezilla} est le format utilisé pour la +sauvegarde des images. L'outil \emph{Partclone}, développé par la même +équipe, est utilisé. Il permet de créer des images de partitions en ne +copiant que les blocs utilisés dans le système de fichiers. Les parties +non utilisées de la partition ne sont pas comprises dans l'image créée, +ce qui permet de réduire sa taille et d'accélérer le processus de +sauvegarde et de restauration. + +Malheureusement, comme pour \protect\hyperlink{acronym__FOG}{FOG}, +\emph{Clonezilla} ne dispose pas de mécanisme de cache sur les clients +permettant de ne pas télécharger les images depuis un serveur distant +plusieurs fois. À chaque fois qu'un image doit être déployée, elle doit +être téléchargée à nouveau depuis le serveur, ce qui peut prendre +beaucoup de temps et doit être planifié à l'avance. + +\emph{Clonezilla} ne peut donc pas être utilisé tel-quel. Cependant, il +est possible de l'utiliser uniquement pour la création d'images et +d'intégrer son mécanisme de restauration à un autre système de +déploiement. Cette possibilité sera étudiée plus tard dans ce document. \hypertarget{architecture-initiale-du-projet}{% \chapter{Architecture initiale du projet}\label{architecture-initiale-du-projet}} Le projet \emph{Bootiful} n'a pas été initié dans le cadre de ce travail -de bachelor: une implémentation basique avait déjà été réalisée afin de -prouver que l'idée fonctionne. Cette version initiale a été créée par -Abhilash Venkatesh, un étudiant indien qui est venu à +de bachelor: une implémentation basique +(\protect\hyperlink{ref-venkatesh_remote_imaging}{1}) avait déjà été +réalisée afin de prouver que l'idée fonctionne. Cette version initiale a +été créée par Abhilash Venkatesh, un étudiant indien qui est venu à \protect\hyperlink{acronym__HEPIA}{HEPIA} effectuer un stage pendant la période de mai à juillet 2019. @@ -1759,16 +1888,17 @@ des images déployées et à la taille des images juste compressées avec \def\labelenumi{\arabic{enumi}.} \tightlist \item - Une petite image du système \emph{Debian}, comparée dans le tableau - \ref{table_image_sizes_debian} et la figure - \ref{chart_image_sizes_debian} + Une petite image (environ 3.2 GB) du système \emph{Debian}, dont les + tailles sont comparées dans le tableau \ref{table_image_sizes_debian} + et la figure \ref{chart_image_sizes_debian} \item - Une image moyenne du système \emph{Xubuntu}, comparée dans le tableau - \ref{table_image_sizes_xubuntu} et la figure - \ref{chart_image_sizes_xubuntu} + Une image moyenne (environ 200GB) du système \emph{Xubuntu}, dont les + tailles sont comparées dans le tableau \ref{table_image_sizes_xubuntu} + et la figure \ref{chart_image_sizes_xubuntu} \item - Une grande image du système \emph{Windows 10}, comparée dans le - tableau \ref{table_image_sizes_win10} et la figure + Une grande image (environ 512GB) du système \emph{Windows 10}, dont + les tailles sont comparées dans le tableau + \ref{table_image_sizes_win10} et la figure \ref{chart_image_sizes_win10} \end{enumerate} @@ -2042,10 +2172,11 @@ possible depuis d'autres distributions Linux, un conteneur \emph{Docker} a été créé. Le processus de création du système décrit dans la section précédente a -été automatisé et est décrit dans un fichier \texttt{Dockerfile}. La -nouvelle fonctionnalité de Docker de construction en plusieurs -``étages'' (\emph{multi-stage build}) a été utilisée. Trois ``étages'' -sont définis: +été automatisé et est décrit dans un fichier \texttt{Dockerfile} (le +code-souce de ce fichier peut être consulté dans la section +\ref{deployer_dockerfile}). La fonctionnalité de Docker de construction +en plusieurs ``étages'' (\emph{multi-stage build}) a été utilisée. Trois +``étages'' sont définis: \begin{itemize} \tightlist @@ -2101,41 +2232,493 @@ des deux derniers étages dans leurs dossiers respectifs: \protect\hyperlink{acronym__TFTP}{TFTP}. \end{itemize} +\hypertarget{duxe9ploiement-dimage-windows}{% +\section{Déploiement d'image +Windows}\label{duxe9ploiement-dimage-windows}} + +Une image \emph{Windows 10} a été créée avec \emph{Clonezilla}, à partir +du système présent par défaut sur les mini-pc DELL que l'école avait mis +à disposition. Les PC étant neufs il s'agit du système d'exploitation +par défaut installé pour le constructeur. L'image qui a été créée a déjà +été mentionnée dans la section \emph{Réduction de la taille des images}. +Elle a la particularité d'être très grande car elle prend l'espace +entier du disque. + +Un problème a été rencontré lors du premier déploiement de l'image: le +script de déploiement ne gérait pas une image qui est tellement grande +qu'elle écrase la partition de cache et plantait. Une vérification a +donc été rajoutée sur la taille de l'image. Quand une image va écraser +la partition de cache, un message d'avertissement est affiché et +l'utilisateur doit confirmer qu'il souhaite continuer. Si l'utilisateur +accepte, le déploiment se fait sans mise en cache de l'image et la +partition cachée de cache est détruite. + +Une fois ce système mis en place, le déploiement de l'image s'est +déroulé sans problème particulier, et a confirmé que le déploiement +d'une image \emph{Windows} est faisable avec ce système. + \hypertarget{ruxe9duction-du-temps-de-duxe9ploiement-total}{% \section{Réduction du temps de déploiement total}\label{ruxe9duction-du-temps-de-duxe9ploiement-total}} -\textbf{TODO: expliquer, détailler et comparer (tableaux, diagrammes) -les différentes mesures qui ont montré que clonezilla est intéressant -les images larges mais que dd est parfois plus performant pour de -petites images.} +Théoriquement, le déploiement d'images avec clonezilla devrait être plus +court que le déploiement d'images \emph{raw}. Des mesures ont été +effectuées avec les trois images dont les différences de taille ont déjà +étudiées précédemment dans la section \emph{Réduction de la taille des +images}: -\hypertarget{duxe9ploiement-dimage-windows}{% -\section{Déploiement d'image -Windows}\label{duxe9ploiement-dimage-windows}} +\begin{enumerate} +\def\labelenumi{\arabic{enumi}.} +\tightlist +\item + Une petite image (environ 3.2 GB) du système \emph{Debian}, dont les + temps de déploiement sont comparés dans le tableau + \ref{table_deploy_time_debian} et la figure + \ref{chart_deploy_time_debian} +\item + Une image moyenne (environ 200GB) du système \emph{Xubuntu}, dont les + temps de déploiement sont comparés dans le tableau + \ref{table_deploy_time_xubuntu} et la figure + \ref{chart_deploy_time_xubuntu} +\item + Une grande image (environ 512GB) du système \emph{Windows 10}, dont + les temps de déploiement sont comparés dans le tableau + \ref{table_deploy_time_win10} et la figure + \ref{chart_deploy_time_win10} +\end{enumerate} + +\clearpage + +\begin{longtable}[]{@{}ll@{}} +\caption{Table des temps de déploiement d'une petite image \emph{Debian} +dans plusieurs formats \label{table_deploy_time_debian}}\tabularnewline +\toprule +Type & Temps de déploiement (secondes)\tabularnewline +\midrule +\endfirsthead +\toprule +Type & Temps de déploiement (secondes)\tabularnewline +\midrule +\endhead +Gzip (sans cache) & 14\tabularnewline +Gzip (avec cache) & 13\tabularnewline +Clonezilla (sans cache) & 39\tabularnewline +Clonezilla (avec cache) & 39\tabularnewline +\bottomrule +\end{longtable} + +\begin{figure} +\centering +\includegraphics{charts/chart_deploy_time_debian.svg} +\caption{Graphique des temps de déploiement d'une petite image +\emph{Debian} dans plusieurs formats\label{chart_deploy_time_debian}} +\end{figure} + +\clearpage + +\begin{longtable}[]{@{}ll@{}} +\caption{Table des temps de déploiement d'une image \emph{Xubuntu} +moyenne dans plusieurs formats +\label{table_deploy_time_xubuntu}}\tabularnewline +\toprule +Type & Temps de déploiement (secondes)\tabularnewline +\midrule +\endfirsthead +\toprule +Type & Temps de déploiement (secondes)\tabularnewline +\midrule +\endhead +Gzip (sans cache) & 623\tabularnewline +Gzip (avec cache) & 630\tabularnewline +Clonezilla (sans cache) & 109\tabularnewline +Clonezilla (avec cache) & 85\tabularnewline +\bottomrule +\end{longtable} + +\begin{figure} +\centering +\includegraphics{charts/chart_deploy_time_xubuntu.svg} +\caption{Graphique des temps de déploiement d'une image \emph{Xubuntu} +moyenne dans plusieurs formats\label{chart_deploy_time_xubuntu}} +\end{figure} + +\clearpage + +\begin{longtable}[]{@{}ll@{}} +\caption{Table des temps de déploiement d'une grande image \emph{Windows +10} dans plusieurs formats +\label{table_deploy_time_win10}}\tabularnewline +\toprule +Type & Temps de déploiement (secondes)\tabularnewline +\midrule +\endfirsthead +\toprule +Type & Temps de déploiement (secondes)\tabularnewline +\midrule +\endhead +Gzip (sans cache) & 3433\tabularnewline +Clonezilla (sans cache) & 371\tabularnewline +\bottomrule +\end{longtable} + +\begin{figure} +\centering +\includegraphics{charts/chart_deploy_time_win10.svg} +\caption{Graphique des temps de déploiement d'une grande image +\emph{Windows 10} dans plusieurs formats\label{chart_deploy_time_win10}} +\end{figure} + +\clearpage + +Ces mesures permettent de se rendre contre de plusieurs faits +remarquables, qui ne sont pas forcément intuitifs. + +Sur des très petites images le déploiement au format \emph{raw} +compressé avec \emph{gzip} est plus rapide que le déploiement avec +\emph{Clonezilla}. Ceci peut s'expliquer par le fait que +\emph{Clonezilla} prend du temps pour créer une table des partitions, un +système de fichiers pour chacune de ces partitions et copie ensuite les +blocs un à un sur chaque système de fichiers. Sur une grande image, ce +mode de fonctionnement est ``rentable'' car il y a beaucoup de blocs qui +n'auront pas à être copiés, alors qu'une image \emph{raw} devra passer +du temps à copier les données de chacun de ces blocs. Sur une très +petite image comme l'image \emph{Debian} mesurée ici, presque tous les +blocs du système de fichiers sont déjà utilisés, donc la copie brute des +données des partitions est plus rapide car tout le temps est passé à +copier les données. + +Sur les plus grosses images, cependant, \emph{Clonezilla} a clairement +l'avantage, car de nombreux blocs vides n'ont pas besoin d'être copiés. +Ainsi, avec les images plus larges utilisées dans les mesures, le temps +de déploiement des images plus larges au format \emph{raw} prend environ +5 à 9 fois plus de temps que le temps de déploiement avec +\emph{Clonezilla}. + +Un autre fait remarquable est que le déploiement d'une image \emph{raw} +déjà mise en cache prend plus de temps que le déploiement avec une copie +simultanée dans le cache. Cela s'explique peut être par le fait que dans +le premier cas, des données doivent être lues depuis le disque et +écrites sur le même disque, tandis que dans le second cas, seule de +l'écriture est effectuée. + +Par contre, dans le cas des images \emph{Clonezilla}, le déploiement +d'une image déjà présente en cache s'effectue plus rapidement que le +déploiement d'une image présente en cache. C'est l'inverse de ce qui se +passe avec les images \emph{raw}. Cela s'explique par le fait que les +images \emph{Clonezilla} sont copiées avant d'être déployées, alors que +les images \emph{raw} sont copiées et déployées simultanément. + +Il est important de se rappeller que les mesures montrées ici sont +effectuées dans des circonstances idéales: il n'y a qu'un seul client +qui télécharge l'image, seul un switch réseau sépare le client du +serveur et le client et le serveur sont les appareils connectés à ce +réseau local. Dans des conditions réelles, plusieurs machines seront +fréquemment en train de télécharger des images depuis le serveur en même +temps. Dans ce cas, le temps de déploiement d'une image non présente en +cache risque de prendre beaucoup plus de temps. Au contraire, le +déploiement d'une image déjà mise en cache devrait théoriquement prendre +le même temps que dans ces circonstances idéales. \hypertarget{amuxe9lioration-des-scripts-de-duxe9ploiement}{% \section{Amélioration des scripts de déploiement}\label{amuxe9lioration-des-scripts-de-duxe9ploiement}} -\textbf{TODO: Expliquer les problèmes rencontrés avec les scripts de -déploiement initiaux et les nombreuses améliorations apportées par leur -ré-écriture\\ -quasi-complète (gestion des erreurs, stack traces, amélioration des -logs, gestion des images plus grandes que le cache, mesure des timings, -scripts utilitaires de maintenance, possibilité d'utiliser clonezilla, -détection du point d'entrée EFI).} +De très nombreuses améliorations ont été apportées aux scripts de +déploiement, au point qu'ils sont presque complètement différents des +scripts initiaux. + +\hypertarget{gestion-des-erreurs}{% +\subsection{Gestion des erreurs}\label{gestion-des-erreurs}} + +Premièrement, la gestion des erreurs, inexistante dans le script initial +a été rajoutée. Les codes de retour des commandes sont vérifiés et les +données récupérées depuis la sortie de ces commandes sont validées avant +utilisation. Si un code de retour ou une donnée récupérée n'est pas au +format attendu, une fonction spéciale \texttt{fatal\_error} est appelée +avec comme argument un message d'erreur adapté à la situation. Cette +fonction va afficher le message d'erreur, ainsi qu'une trace de la pile +des appels (\emph{stack trace} en anglais). Cette trace permet +d'identifier précisément à quelle ligne de quel fonction et dans quel +fichier une erreur a eu lieu. + +Finalement, le script de déploiement \texttt{bootiful-deploy} sera +quitté avec un code d'erreur, ce qui permet au script parent, +\texttt{bootiful-init}, de détecter qu'une erreur a eu lieu et de +proposer à l'utilisateur quelle action il souhaite effectuer parmi les +choix suivants: + +\begin{itemize} +\tightlist +\item + Recommencer le déploiement +\item + Redémarrer la machine +\item + Éteindre la machine +\item + Ouvrir un \emph{shell} interactif (\texttt{/bin/bash}) pour étudier la + cause de l'erreur. Une fois le \emph{shell} terminé, l'utilisateur + peut à nouveau choisir ce qu'il souhaite faire. +\end{itemize} + +Le mécanisme de gestion d'erreurs a été très utile lors du développement +et du test des scripts de déploiement pour comprendre pourquoi certaines +erreurs arrivaient et adapter les scripts pour les éviter. Ce mécanisme +sera aussi utile pour aider un futur administrateur du système à +comprendre ce qu'il se passe si un déploiement ne se déroule pas comme +prévu. + +\hypertarget{mesure-du-temps-uxe9couluxe9}{% +\subsection{Mesure du temps écoulé}\label{mesure-du-temps-uxe9couluxe9}} + +Un système permettant de mesurer et d'afficher le temps passé dans +chaque section du script de déploiement a été créé. Il permet de mesurer +chacune des parties et d'afficher le temps passé dans chaque partie à la +fin du script. Les parties mesurées sont classées en deux catégories: +\emph{batch} et \emph{interactive}. Les parties \emph{batch} sont celles +qui sont exécutées automatiquement, sans intervention de l'utilisateur, +tandis que les parties \emph{interactive} sont celles où le système +attend un choix de l'utilisateur, comme par exemple le choix de l'image +à déployer. Cette catégorisation des parties permet d'afficher à la fin +du script combien de temps a été passé dans les parties \emph{batch} +sans prendre en compte le temps passé à attendre un choix de +l'utilisateur. + +\hypertarget{amuxe9lioration-des-logs}{% +\subsection{Amélioration des logs}\label{amuxe9lioration-des-logs}} + +Plusieurs améliorations ont été apportées au mécanisme de logging. Dans +le système initial, les flux \texttt{stdin} et \texttt{stdout} du script +de déploiement étaient redirigés vers un fichier de log sur le serveur. +Cela permet d'étudier à \emph{posteriori} comment le déploiement s'est +effectué, et de vérifier la durée d'exécution. Cela permet aussi de +comprendre ce qui s'est mal passé en cas d'erreur. + +Dans le système initial, étant donné que les flux sont redirigés vers un +fichier, un écran noir est affiché sur l'écran du poste client. Cela a +l'inconvénient de ne pas permettre à l'utilisateur du poste client de +savoir ce qu'il est en train de se passer. Il n'est pas possible pour +l'utilisateur de savoir si le déploiement est en cours ou s'il est +bloqué sur une étape. La première modification apportée au système de +logging a été d'utiliser la commande \texttt{tee} pour écrire dans les +fichiers de log, au lieu d'une simple redirection. Cela permet aux +sorties d'être simultanément affichées sur l'écran du client et +sauvegardée dans les logs. + +De nombreux textes informatifs ont aussi été rajoutés dans la sortie du +script pour expliquer ce qu'il est en train de se passer petit à petit. +Cela permet de mieux contextualiser chaque ligne de log. Une barre de +progression a aussi été rajoutée lors du déploiement d'une image au +format \emph{raw} pour que l'utilisateur puisse suivre la progression du +déploiement et qu'il puisse voir le temps écoulé ainsi qu'une estimation +du temps restant. + +Le mécanisme initial de logging créait un fichier de log par poste +client, en le nommant avec l'adresse +\protect\hyperlink{acronym__MAC}{MAC} du poste. Chaque déploiement +successif était loggué dans ce même fichier. Pour bien différencier le +début et la fin d'un log, une ligne facilement reconnaissable contenant +la date et l'heure était affichée. Il y a plusieurs problèmes avec ce +système: + +\begin{itemize} +\tightlist +\item + Les fichiers de log peuvent devenir très gros après de nombreux + déploiements. +\item + Le nettoyage du dossier de logs pour ne garder que les plus récents + est compliqué, car chaque fichier contient les logs de plusieurs + déploiements. +\item + La manipulation avec des commandes standard telles que \texttt{grep}, + \texttt{awk}, \texttt{tail} du log d'un déploiement précis est + compliqué. +\item + La comparaison de deux logs de déploiement sur la même machine est + difficile car il faut trouver où les déploiements commencent et se + terminent dans le même fichier. +\end{itemize} + +Le système de log a donc été modifié pour qu'un fichier par déploiement +soit créé par déploiement. Chaque fichier de log est nommé selon +l'adresse mac de la machine ainsi que la date et l'heure du début du +déploiement. + +\hypertarget{intuxe9gration-de-clonezilla-comme-type-dimage}{% +\subsection{\texorpdfstring{Intégration de \emph{Clonezilla} comme type +d'image}{Intégration de Clonezilla comme type d'image}}\label{intuxe9gration-de-clonezilla-comme-type-dimage}} + +Le script de déploiement a été modifié pour pouvoir détecter si une +image est au format \emph{raw} ou s'il s'agit d'une image +\emph{Clonezilla}. Selon le type d'image, des stratégies différentes +sont utilisées pour différentes étapes du déploiement: + +\begin{itemize} +\tightlist +\item + Détermination de la place nécessaire sur le disque pour déployer + l'image +\item + Commandes utilisées pour le déploiement +\item + Détermination du point d'entrée EFI. +\end{itemize} + +\hypertarget{duxe9tection-automatique-du-point-dentruxe9e-efi}{% +\subsection{\texorpdfstring{Détection automatique du point d'entrée +\protect\hyperlink{acronym__EFI}{EFI}}{Détection automatique du point d'entrée EFI}}\label{duxe9tection-automatique-du-point-dentruxe9e-efi}} + +Si l'image est au format \emph{Clonezilla}, le script de déploiement est +capable de déterminer automatiquement quel sera le programme +\protect\hyperlink{acronym__EFI}{EFI} qui sera exécuté au prochain +démarrage pour démarrer l'\protect\hyperlink{acronym__OS}{OS} déployé. + +En effet, les images \emph{Clonezilla} de systèmes +\protect\hyperlink{acronym__EFI}{EFI} contiennent un fichier spécial, +\texttt{efi-nvram.dat}, qui contient les variables contenues dans la +\protect\hyperlink{acronym__NVRAM}{NVRAM} du système +\protect\hyperlink{acronym__EFI}{EFI} au moment de la création de +l'image. Cette mémoire contient notemment l'ordre des entrées de boot et +les programmes \protect\hyperlink{acronym__EFI}{EFI} à exécuter pour +chacune de ces entrées, si applicable. + +Par exemple, voici le contenu du fichier \texttt{nvram.dat} de l'image +\emph{Windows 10} mentionnée dans les sections précédentes: + +\begin{Shaded} +\begin{Highlighting}[] +\NormalTok{BootCurrent: 0001} +\NormalTok{Timeout: 0 seconds} +\NormalTok{BootOrder: 0000,0001} +\NormalTok{Boot0000* Windows Boot Manager HD(1,GPT,0cccfd69{-}e584{-}4e2d{-}8a5d{-}6afa7130fcab,0x800,0x15e000) /File(\textbackslash{}EFI\textbackslash{}Microsoft\textbackslash{}Boot\textbackslash{}bootmgfw.efi) WINDOWS.........x...B.C.D.O.B.J.E.C.T.=.\{.9.d.e.a.8.6.2.c.{-}.5.c.d.d.{-}.4.e.7.0.{-}.a.c.c.1.{-}.f.3.2.b.3.4.4.d.4.7.9.5.\}....................} +\NormalTok{Boot0001* UEFI: USB DISK 3.0 PMAP PciRoot(0x0)/Pci(0x14,0x0)/USB(16,0)/CDROM(1,0x344,0x5e00)..BO} +\end{Highlighting} +\end{Shaded} + +Le script de déploiement est capable de lire ce fichier, de trouver la +première entrée contenant un chemin vers un exécutable +\protect\hyperlink{acronym__EFI}{EFI}, et transformer ce chemin en un +chemin \emph{Unix}, c'est à dire avec le caractère \texttt{/} au lieu de +\texttt{\textbackslash{}} et des noms de dossiers et fichiers sensibles +à la casse, qui correspondent à des dossiers et fichiers présents sur la +partition \protect\hyperlink{acronym__ESP}{ESP} qui vient d'être +déployée. Cette conversion est importante car ce chemin devra être passé +à \protect\hyperlink{acronym__GRUB}{GRUB}, qui ne sait lire que des +chemins au format \emph{Unix}. + +Une fois le point d'entrée déterminé un fichier \texttt{efi\_entrypoint} +est écrit à la racine de la partition +\protect\hyperlink{acronym__ESP}{ESP}. Il sera ensuite lu par +\protect\hyperlink{acronym__GRUB}{GRUB} au prochain démarrage pour +trouver le point d'entrée à exécuter. Le contenu de ce fichier +ressemblera à ceci: + +\begin{Shaded} +\begin{Highlighting}[] +\KeywordTok{set} \VariableTok{efi\_entrypoint=}\NormalTok{/efi/Microsoft/Boot/bootmgfw.efi} +\end{Highlighting} +\end{Shaded} + +Si l'image est au format \emph{raw}, ou alors qu'il est souhaité +d'outrepasser la lecture automatique du point d'entrée d'une image +\emph{Clonezilla}, il suffit de rajouter un fichier +\texttt{efi\_entrypoint} dans le dossier de l'image. Ce fichier sera +directement copié dans l'\protect\hyperlink{acronym__ESP}{ESP}, sans +qu'une tentative de détermination automatique du point d'entrée à partir +du fichier \texttt{nvram.dat} soit effectuée. \hypertarget{personnalisation-dimages-post-duxe9ploiement}{% \section{Personnalisation d'images post-déploiement}\label{personnalisation-dimages-post-duxe9ploiement}} -\textbf{TODO: expliquer pourquoi Ansible a été choisi pour cette tache, -et des avantages que cela apporte de pouvoir customiser une image -post-déploiement plutôt que d'avoir une multitude d'images pour chaque -personnalisation (simplicité de création de playbook plutot que la -création d'une image complète, possiblité de réutiliser les mêmes -playbooks sur plusieurs images similaires, réutilisation d'images).} +Un système a été conçu pour que l'utilisateur puisse choisir des +personnalisations post-déploiement pour une image parmi un ensemble +prédéfini. Ces personnalisations peuvent être implémentées de plusieurs +manières: il ne s'agit que de fichiers qui seront copiés dans un dossier +présent dans un répertoire de la machine déployée. + +Une image supportant les personnalisation post-déploiement peut par +exemple être configurée pour exécuter des scripts qui auront été copiés +dans un répertoire. Par exemple, sur une image dont +l'\protect\hyperlink{acronym__OS}{OS} est une distribution \emph{Linux} +utilisant \emph{Systemd}, une unité peut être configurée pour être +exécutée au démarrage. Cette unité peut lancer au démarrage un script +servant à exécuter séquentiellement des scripts présents dans un dossier +prédéfini, ou alors exécuter des \emph{playbooks} \emph{Ansible}. + +Des personnalisations peuvent aussi être ``passives'' et ne pas +nécessiter de configuration particulière du côté du client. Par exemple, +si elle consiste uniquement à copier/remplacer un fichier de +configuration à un endroit précis. + +Après le choix d'une image, le script de déploiement va chercher si un +sous dossier \texttt{customizations} existe. Ce dossier contient un +sous-dossier par personnalisation que l'utilisateur peut choisir. Chaque +sous dossier personnalisation doit contenir une arborescence de dossiers +et de fichiers dont le premier niveau contient uniquement des dossier +correspondant à des noms de partitions existant dans l'image déployée. À +l'intérieur de ce dossier, une arborescence des fichiers copiés sur la +machine depuis laS + +Étudions une arborescence fictive de personnalisations pour mieux +comprendre ce système. Voici l'arborescence du dossier +\texttt{customizations} d'une image: + +\begin{Shaded} +\begin{Highlighting}[] +\NormalTok{customizations} +\NormalTok{├── C language development environment} +\NormalTok{│ └── sda2} +\NormalTok{│ └── etc} +\NormalTok{│ └── bootiful} +\NormalTok{│ └── postdeploy{-}playbooks} +\NormalTok{│ └── 002{-}install{-}c{-}dev.yml} +\NormalTok{├── Custom bashrc} +\NormalTok{│ └── sda2} +\NormalTok{│ └── etc} +\NormalTok{│ └── bash.bashrc} +\NormalTok{└── Join LDAP domain} +\NormalTok{ └── sda2} +\NormalTok{ └── etc} +\NormalTok{ └── bootiful} +\NormalTok{ └── postdeploy{-}playbooks} +\NormalTok{ └── 001{-}join{-}ldap.yml} +\end{Highlighting} +\end{Shaded} + +Cette arborescence définit les personnalisations suivantes, qui peuvent +être choisies par l'utilisateur: + +\begin{enumerate} +\def\labelenumi{\arabic{enumi}.} +\tightlist +\item + \texttt{C\ language\ development\ environment}: copie un + \emph{playbook} \emph{Ansible} servant à installer un environnement de + développement C dans le dossier + \texttt{/etc/bootiful/postdeploy-playbooks} de la partition + \texttt{sda2} +\item + \texttt{Custom\ bashrc}: remplace le ficher \texttt{/etc/bash.bashrc} + de la partition \texttt{sda2} par un fichier personnalisé. +\item + \texttt{Join\ LDAP\ domain}: copie un \emph{playbook} \emph{Ansible} + servant à rejoindre un domaine \protect\hyperlink{acronym__LDAP}{LDAP} + dans le dossier \texttt{/etc/bootiful/postdeploy-playbooks} de la + partition \texttt{sda2} +\end{enumerate} + +Les personnalisations \textbf{1} et \textbf{3} nécessitent que l'image +soit équipée d'un mécanisme qui va exécuter les \emph{playbooks Ansible} +présents dans \texttt{/etc/bootiful/postdeploy-playbooks} au démarrage. +Des exemples d'un tel script et de l'unité \emph{systemd} servant à le +lancer au démarrage sont consultables dans les sections +\ref{source_ansible_run} et \ref{source_ansible_init}.'w'\,'\,'\,' + +La personnalisation \textbf{2} est passive: elle remplace juste un +fichier mais ne nécessite pas de mécanisme spécial sur la machine de +déploiement pour l'exécuter. \hypertarget{architecture-finale-du-projet}{% \chapter{Architecture finale du @@ -2184,14 +2767,6 @@ cette configuration à un environnement de production.} \textbf{TODO: expliquer exactement comment sont structurées les données des images (raw et clonezilla).} -\hypertarget{systuxe8me-de-personnalisation-des-images}{% -\section{Système de personnalisation des -images}\label{systuxe8me-de-personnalisation-des-images}} - -\textbf{TODO: expliquer en détails comment fonctionne le système de -personnalisation des images, ce qui est nécéssaire sur le client et ce -qui est nécessaire sur le serveur} - \hypertarget{utilisation-du-systuxe8me-duxe9ployuxe9}{% \chapter{Utilisation du système déployé}\label{utilisation-du-systuxe8me-duxe9ployuxe9}} @@ -2200,6 +2775,18 @@ déployé}\label{utilisation-du-systuxe8me-duxe9ployuxe9}} \section{Déployer une image sur un poste}\label{duxe9ployer-une-image-sur-un-poste}} +Cette section contient une marche à suivre qui décrit les étapes pour +déployer une image sur un poste client quand un serveur est déjà +installé et configuré, que la machine est configurée pour démarrer sur +le réseau. + +\begin{enumerate} +\def\labelenumi{\arabic{enumi}.} +\tightlist +\item + Démarrer la machine et attendre qu'elle +\end{enumerate} + \textbf{TODO: expliquer pas à pas comment utiliser l'interface pour déployer une image sur un client et les différentes inter-actions de l'utilisateur, avec des captures d'écran, etc.} @@ -2229,15 +2816,2270 @@ scripts de personnalisation, avec un exemple type simple.} \chapter{Conclusion}\label{conclusion}} \hypertarget{synthuxe8se-du-travail-effectuuxe9}{% -\subsection{Synthèse du travail +\section{Synthèse du travail effectué}\label{synthuxe8se-du-travail-effectuuxe9}} +Le travail initial a été récupéré, analysé, documenté et remis en +fonctionnement en corrigeant quelques problèmes dans les fichiers de +configuration et les scripts de déploiement. L'outil \emph{Vagrant} a +été utilisé pour automatiser la création d'un serveur virtuel qui +exécute les différents services du système. + +Le système a été ensuite modifié pour le rendre compatible avec les +ordinateurs modernes utilisant le standard +\protect\hyperlink{acronym__UEFI}{UEFI} au lieu d'un +\protect\hyperlink{acronym__BIOS}{BIOS}. + +Des mesures ont été effectuées pour déterminer si le choix du protocole +\protect\hyperlink{acronym__NFS}{NFS}, le protocole réseau utilisé pour +transférer les images, était pertinent. Il été comparé aux protocoles +\protect\hyperlink{acronym__SCP}{SCP}, +\protect\hyperlink{acronym__HTTP}{HTTP}, +\protect\hyperlink{acronym__FTP}{FTP}, +\protect\hyperlink{acronym__NFS}{NFS}, +\protect\hyperlink{acronym__SMB}{SMB} et +\protect\hyperlink{acronym__IPFS}{IPFS} en mesurant le temps de +transfert d'une image. Ces mesures ont montré que les temps de +déploiement avec ces différents protocoles étaient similaires, à +l'exception d'\protect\hyperlink{acronym__IPFS}{IPFS} qui prenait +beaucoup plus de temps. Le protocole +\protect\hyperlink{acronym__NFS}{NFS} a donc été gardé car les mesures +ont prouvé que ses performances étaient similaires à ses alternatives. + +Un format d'images alternatif aux images brutes compressées a été +recherché. Une solution produisant des images plus petites et +déployables plus rapidement a été trouvée: utiliser des images produites +avec l'outil \emph{Clonezilla}. Cet outil permet aussi de faciliter la +création d'images en utilisant sa version \emph{live}. Des mesures +prouvant que ce système de déploiement d'images offre un réel avantage +en espace utilisé et en temps de déploiement par rapport aux images +brutes compressées. + +Le système d'exploitation utilisé pour effectuer le déploiement a été +complètement remplacé. Initialement construit avec \emph{Buildroot}, +avec un système de fichiers racine chargé entièrement en mémoire, il a +été remplacé par un système \emph{Debian} dont le système de fichiers +racine est monté depuis un partage \protect\hyperlink{acronym__NFS}{NFS} +en lecture seule. Ce système permet une installation aisée de tous les +paquets \emph{Debian}, notamment \emph{Clonezilla} qui était compliqué à +installer sur un système construit avec \emph{Buildroot}. La création de +ce système d'exploitation a été automatisée et encapsulée dans un +conteneur \emph{Docker} pour rendre sa modification et reconstruction +très simple, indépendamment du système d'exploitation utilisé. + +Les scripts de déploiement du système initial ont été réécrits. Une +gestion avancée des erreurs a été implémentée. Un système de mesure et +d'affichage du temps d'exécution de chaque partie du déploiement a été +développé. La génération de fichiers de log a été améliorée pour qu'ils +fournissent plus d'informations utiles et qu'ils soient structurés de +manière à rendre leur gestion et leur consultation plus aisée. Le +déploiement d'images avec \emph{Clonezilla} a été implémenté, tout en +gardant la possibilité d'utiliser des images brutes compressées pour +offrir plus de flexibilité et permettre de comparer les deux systèmes. +Le support des images de systèmes d'exploitations compatibles +\protect\hyperlink{acronym__UEFI}{UEFI} a aussi été implémenté, +notamment en permettant de déterminer automatiquement l'exécutable +\protect\hyperlink{acronym__EFI}{EFI} qui devra être lancé pour démarrer +le système déployé. + +Enfin, un système de personnalisation d'un système après son déploiement +a été conçu, permettant de définir des configurations que l'utilisateur +peut choisir de copier ou non sur le système déployé. Une image de +système d'exploitation peut être conçue pour exécuter les fichiers +copiés par ces personnalisations dans un dossier spécifique, pour +permettre des configurations complexes exécutées lors du démarrage avec +un outil choisi, par exemple \emph{Ansible}. Ce système offre beaucoup +de flexibilité et permet de définir des configurations avancées tout en +gardant le système de déploiement indépendant de ce qui est utilisé pour +les exécuter, car le seul mécanisme présent dans le système de +déploiement est la copie de fichiers sur une partition donnée. + \hypertarget{points-damuxe9lioration}{% -\subsection{Points d'amélioration}\label{points-damuxe9lioration}} +\section{Points d'amélioration}\label{points-damuxe9lioration}} + +Bien que le système à la fin de ce projet soit parfaitement fonctionnel, +il existe des points qui devraient ou pourraient être étudiés, améliorés +ou implémentés pour que le système soit prêt à une utilisation dans un +cadre réel. + +\hypertarget{amuxe9lioration-des-performances-de-tuxe9luxe9chargement-des-images-sur-un-ruxe9seau-ruxe9el-avec-de-nombreux-clients-simultanuxe9s}{% +\subsection{Amélioration des performances de téléchargement des images +sur un réseau réel avec de nombreux clients +simultanés}\label{amuxe9lioration-des-performances-de-tuxe9luxe9chargement-des-images-sur-un-ruxe9seau-ruxe9el-avec-de-nombreux-clients-simultanuxe9s}} + +Le protocole réseau utilisé pour le téléchargement des images a été +testé avec un client unique, sur un réseau minimal ne comprenant que le +client et le serveur. Il est très probable que le temps de +téléchargement des images soit beaucoup plus long que celui mesuré dans +le cadre de ce travail si de nombreux clients téléchargent des images en +même temps, dans un réseau plus complexe tel que celui de l'école. + +L'étude et la mitigation de cette problématique a volontairement été +mise de côté dans le cadre de ce travail car il était difficile de +simuler les conditions réelles du système déployé dans une école alors +que tout le travail a été effectué hors de l'école, dans un petit réseau +local domestique avec une quantité limitée d'ordinateurs à disposition +pour faire des tests. + +Différentes approches pourraient être utilisées pour améliorer ces +performances, telles que la copie en \emph{multicast} des images, la +redondance des serveurs mettant à disposition les images ou encore +l'utilisation d'un protocole \emph{pair à pair} tel que +\emph{Bittorrent} ou \emph{IPFS} pour permettre de distribuer le +transfert des images sur tous les clients connectés plutôt que +d'utiliser uniquement le serveur central comme source du fichiers. + +\hypertarget{amuxe9lioration-du-systuxe8me-de-personnalisation-des-images}{% +\subsection{Amélioration du système de personnalisation des +images}\label{amuxe9lioration-du-systuxe8me-de-personnalisation-des-images}} + +Le système de personnalisation des images a été implémenté tardivement +dans le travail. Bien qu'il soit fonctionnel, il n'a pas été testé +extensivement. Il faudrait passer un peu de temps à créer des +configurations post-déploiement complexes qui sont exécutées au +démarrage par le système déployé et de valider leur fonctionnement. + +Par exemple, il était prévu de tester l'exécution de \emph{playbooks} +\emph{Ansible} au démarrage du système, copiés selon les choix de +personnalisation de l'utilisateur. Ces \emph{playbooks} pourraient étre +utilisés pour effectuer de nombreuses actions, telles que l'installation +de groupes de paquets choisis, la génération d'un nom d'hôte unique pour +la machine et la connexion à un domaine \emph{Active Directory} pour +permettre aux élèves de se connecter avec le même nom d'utilisateur et +d'avoir accès à leur dossier \emph{home} depuis un partage +\protect\hyperlink{acronym__NFS}{NFS}, comme sur les postes de travail +standards présents de l'école. + +\hypertarget{amuxe9lioration-de-la-suxe9curituxe9}{% +\subsection{Amélioration de la +sécurité}\label{amuxe9lioration-de-la-suxe9curituxe9}} + +Sur le système actuel, un utilisateur mal intentionné peut détruire ou +modifier les images présentes sur le serveur distant, car elles sont +récupérées sur un partage \protect\hyperlink{acronym__NFS}{NFS} avec des +droits de lecture-écriture. La raison de ce partage en lecture et +écriture est que les logs sont écrits sur le même partage. Une manière +simple de résoudre ce problème serait de séparer ce partage en deux: le +premier en lecture seule contiendrait les images et le second +contiendrait les logs uniquement. + +Il faudrait ensuite trouver une solution pour empêcher une machine +d'aller modifier ou supprimer les logs d'une autre machine, ce qui est +compliqué à mettre en oeuvre avec un partage +\protect\hyperlink{acronym__NFS}{NFS}. Peut être que les logs pourraient +être transmis au serveur en utilisant un autre canal de communication et +de déléguer la création et le nommage du fichier au serveur, pour que +les clients ne soient plus capables d'accéder directement aux fichiers +des logs, mais que ce soit le serveur qui ait la responsabilité de les +créer et de les gérer. + +\hypertarget{ruxe9trospection-sur-le-duxe9roulement-du-travail}{% +\section{Rétrospection sur le déroulement du +travail}\label{ruxe9trospection-sur-le-duxe9roulement-du-travail}} + +J'ai eu beaucoup d'intérêt à travailler sur ce sujet. Cela m'a permis de +mettre en pratique de nombreuses compétences acquises lors des cours +suivis les quatre années précédentes, dont en particulier les cours de +programmation des systèmes (\emph{sIT\_242}), systèmes d'exploitation +(\emph{sIT\_244}), réseaux et protocoles informatiques (sIT\_362), +réseaux avancés (\emph{sIT\_384}), programmation avancée des systèmes +(\emph{sIT\_632}) et virtualisation des +\protect\hyperlink{acronym__SI}{SI} (\emph{sIT\_632}). + +\hypertarget{ruxe9fuxe9rences}{% +\chapter{Références}\label{ruxe9fuxe9rences}} + +\appendix + +\hypertarget{appendix_source}{% +\chapter{Codes sources notables}\label{appendix_source}} + +Cette annexe contient les listings des codes sources les plus importants +du projet. + +\hypertarget{makefile-configuration-gnu-make-du-projet}{% +\section{\texorpdfstring{\texttt{Makefile}: configuration \emph{GNU +Make} du +projet}{Makefile: configuration GNU Make du projet}}\label{makefile-configuration-gnu-make-du-projet}} + +\begin{Shaded} +\begin{Highlighting}[] +\DataTypeTok{SHELL }\CharTok{:=}\StringTok{ /bin/bash} +\DataTypeTok{MAKEFLAGS }\CharTok{+=}\StringTok{ "{-}j 4"} + +\DataTypeTok{DOCKER\_BUILDKIT\_BUILD }\CharTok{=}\StringTok{ DOCKER\_BUILDKIT=1 docker build {-}{-}progress=plain} + +\DataTypeTok{GRUB\_SRC }\CharTok{:=}\StringTok{ }\CharTok{$(}\KeywordTok{shell}\StringTok{ find grub/bootiful{-}grub/ {-}type f {-}regex ".*\textbackslash{}.[c|h|sh|py|cfg|conf]"}\CharTok{)} +\DataTypeTok{GRUB\_I386\_PC\_BIN }\CharTok{=}\StringTok{ tftp/tftpboot/boot/grub/i386{-}pc/core.0} +\DataTypeTok{GRUB\_I386\_EFI\_BIN }\CharTok{=}\StringTok{ tftp/tftpboot/boot/grub/i386{-}efi/core.efi} +\DataTypeTok{GRUB\_X86\_64\_EFI\_BIN }\CharTok{=}\StringTok{ tftp/tftpboot/boot/grub/x86\_64{-}efi/core.efi} +\DataTypeTok{DEPLOYER\_SRC }\CharTok{:=}\StringTok{ }\CharTok{$(}\KeywordTok{wildcard}\StringTok{ deployer/*}\CharTok{)} +\DataTypeTok{TFTP\_DEPLOYER\_DIR }\CharTok{=}\StringTok{ tftp/tftpboot/boot/deployer} +\DataTypeTok{TFTP\_DEPLOYER\_VMLINUZ }\CharTok{:=}\StringTok{ }\CharTok{$(}\DataTypeTok{TFTP\_DEPLOYER\_DIR}\CharTok{)}\StringTok{/vmlinuz} +\DataTypeTok{TFTP\_DEPLOYER\_INITRD }\CharTok{:=}\StringTok{ }\CharTok{$(}\DataTypeTok{TFTP\_DEPLOYER\_DIR}\CharTok{)}\StringTok{/initrd.img} +\DataTypeTok{NFS\_DEPLOYER\_ROOT }\CharTok{:=}\StringTok{ nfs/nfsroot.tar.gz} +\DataTypeTok{LATEST\_LOG }\CharTok{:=}\StringTok{ }\CharTok{$(}\KeywordTok{shell}\StringTok{ ls {-}1 nfs/nfsshared/log/*.log | tail {-}n 1}\CharTok{)} + +\OtherTok{.PHONY:}\DataTypeTok{ doc grub deployer start{-}server reprovision{-}server clean print\_last\_log help} + +\CommentTok{\# Builds everything} +\DecValTok{all:}\DataTypeTok{ doc grub deployer} + +\CommentTok{\# Builds PDF and markdown documents} +\DecValTok{doc:} + \CharTok{$(}\DataTypeTok{MAKE}\CharTok{)}\NormalTok{ {-}C doc} + +\DecValTok{grub/bootiful{-}grub/bootstrap partclone/bootiful{-}partclone/Makefile.am:}\DataTypeTok{ .gitmodules} +\NormalTok{ git submodule init \&\& git submodule update} + +\CommentTok{\# Bootstraps GRUB dependencies and configuration script} +\DecValTok{grub/bootiful{-}grub/configure:}\DataTypeTok{ grub/bootiful{-}grub/bootstrap} +\NormalTok{ (pushd grub/bootiful{-}grub \&\& ./bootstrap; popd)} + +\CommentTok{\# Builds GRUB for i386{-}pc} +\DecValTok{$(GRUB\_I386\_PC\_BIN):}\DataTypeTok{ grub/Dockerfile grub/bootiful{-}grub/configure }\CharTok{$(}\DataTypeTok{GRUB\_SRC}\CharTok{)} + \CharTok{$(}\DataTypeTok{DOCKER\_BUILDKIT\_BUILD}\CharTok{)}\NormalTok{ ./grub }\CharTok{\textbackslash{}} +\NormalTok{ {-}{-}output ./tftp/tftpboot }\CharTok{\textbackslash{}} +\NormalTok{ {-}{-}build{-}arg PLATFORM=pc }\CharTok{\textbackslash{}} +\NormalTok{ {-}{-}build{-}arg TARGET=i386} + +\CommentTok{\# Builds GRUB for i386{-}efi} +\DecValTok{$(GRUB\_I386\_EFI\_BIN):}\DataTypeTok{ grub/Dockerfile grub/bootiful{-}grub/configure }\CharTok{$(}\DataTypeTok{GRUB\_SRC}\CharTok{)} + \CharTok{$(}\DataTypeTok{DOCKER\_BUILDKIT\_BUILD}\CharTok{)}\NormalTok{ ./grub }\CharTok{\textbackslash{}} +\NormalTok{ {-}{-}output ./tftp/tftpboot }\CharTok{\textbackslash{}} +\NormalTok{ {-}{-}build{-}arg PLATFORM=efi }\CharTok{\textbackslash{}} +\NormalTok{ {-}{-}build{-}arg TARGET=i386} + +\CommentTok{\# Builds GRUB for x86\_64{-}efi} +\DecValTok{$(GRUB\_X86\_64\_EFI\_BIN):}\DataTypeTok{ grub/Dockerfile grub/bootiful{-}grub/configure }\CharTok{$(}\DataTypeTok{GRUB\_SRC}\CharTok{)} + \CharTok{$(}\DataTypeTok{DOCKER\_BUILDKIT\_BUILD}\CharTok{)}\NormalTok{ ./grub }\CharTok{\textbackslash{}} +\NormalTok{ {-}{-}output ./tftp/tftpboot }\CharTok{\textbackslash{}} +\NormalTok{ {-}{-}build{-}arg PLATFORM=efi }\CharTok{\textbackslash{}} +\NormalTok{ {-}{-}build{-}arg TARGET=x86\_64} + +\CommentTok{\# Builds GRUB for all platforms} +\DecValTok{grub:}\DataTypeTok{ }\CharTok{$(}\DataTypeTok{GRUB\_I386\_PC\_BIN}\CharTok{)}\DataTypeTok{ }\CharTok{$(}\DataTypeTok{GRUB\_I386\_EFI\_BIN}\CharTok{)}\DataTypeTok{ }\CharTok{$(}\DataTypeTok{GRUB\_X86\_64\_EFI\_BIN}\CharTok{)} + +\CommentTok{\# Builds the deployer OS} +\DecValTok{deployer:}\DataTypeTok{ }\CharTok{$(}\DataTypeTok{TFTP\_DEPLOYER\_VMLINUZ}\CharTok{)}\DataTypeTok{ }\CharTok{$(}\DataTypeTok{TFTP\_DEPLOYER\_INITRD}\CharTok{)}\DataTypeTok{ }\CharTok{$(}\DataTypeTok{NFS\_DEPLOYER\_ROOT}\CharTok{)} + +\DecValTok{$(TFTP\_DEPLOYER\_VMLINUZ) $(TFTP\_DEPLOYER\_INITRD) \&:}\DataTypeTok{ }\CharTok{$(}\DataTypeTok{DEPLOYER\_SRC}\CharTok{)} + \CharTok{$(}\DataTypeTok{DOCKER\_BUILDKIT\_BUILD}\CharTok{)}\NormalTok{ ./deployer {-}{-}target tftp{-}export{-}stage {-}{-}output }\CharTok{$(}\DataTypeTok{TFTP\_DEPLOYER\_DIR}\CharTok{)}\NormalTok{ \&\& }\CharTok{\textbackslash{}} +\NormalTok{ touch {-}c }\CharTok{$(}\DataTypeTok{TFTP\_DEPLOYER\_VMLINUZ}\CharTok{)} \CharTok{$(}\DataTypeTok{TFTP\_DEPLOYER\_INITRD}\CharTok{)} + +\DecValTok{$(NFS\_DEPLOYER\_ROOT):}\DataTypeTok{ }\CharTok{$(}\DataTypeTok{DEPLOYER\_SRC}\CharTok{)} + \CharTok{$(}\DataTypeTok{DOCKER\_BUILDKIT\_BUILD}\CharTok{)}\NormalTok{ ./deployer {-}{-}target nfs{-}export{-}stage {-}{-}output nfs/ \&\& }\CharTok{\textbackslash{}} +\NormalTok{ touch {-}c }\CharTok{$(}\DataTypeTok{NFS\_DEPLOYER\_ROOT}\CharTok{)} + +\CommentTok{\# Starts bootiful services in docker containers} +\DecValTok{start{-}server:}\DataTypeTok{ grub deployer} +\NormalTok{ docker{-}compose up {-}{-}build {-}{-}remove{-}orphans {-}{-}abort{-}on{-}container{-}exit} + +\CommentTok{\# Removes all generated files} +\DecValTok{clean:} +\NormalTok{ rm {-}rf deployer/rootfs} + \CharTok{$(}\DataTypeTok{MAKE}\CharTok{)}\NormalTok{ {-}C doc clean} + +\CommentTok{\# Prints the latest deployment log file} +\DecValTok{print{-}latest{-}log:} +\NormalTok{ cat }\CharTok{$(}\DataTypeTok{LATEST\_LOG}\CharTok{)} + +\CommentTok{\# Show this help.} +\DecValTok{help:} +\NormalTok{ printf }\StringTok{"Usage: make \textless{}target\textgreater{}\textbackslash{}n\textbackslash{}nTargets:\textbackslash{}n"} +\NormalTok{ awk }\StringTok{\textquotesingle{}/\^{}\#/\{c=substr(}\CharTok{$$}\StringTok{0,3);next\}c\&\&/\^{}[[:alpha:]][[:alnum:]\_{-}]+:/\{print " " substr(}\CharTok{$$}\StringTok{1,1,index(}\CharTok{$$}\StringTok{1,":")),c\}1\{c=0\}\textquotesingle{}} \CharTok{$(}\DataTypeTok{MAKEFILE\_LIST}\CharTok{)}\NormalTok{ | column {-}s: {-}t} +\end{Highlighting} +\end{Shaded} + +\hypertarget{docker-compose.yml-configuration-docker-compose-du-serveur-de-duxe9ploiement}{% +\section{\texorpdfstring{\texttt{docker-compose.yml}: configuration +\emph{docker-compose} du serveur de +déploiement}{docker-compose.yml: configuration docker-compose du serveur de déploiement}}\label{docker-compose.yml-configuration-docker-compose-du-serveur-de-duxe9ploiement}} + +\begin{Shaded} +\begin{Highlighting}[] +\FunctionTok{version}\KeywordTok{:}\AttributeTok{ }\StringTok{"3.8"} + +\FunctionTok{services}\KeywordTok{:} +\AttributeTok{ }\FunctionTok{bootiful{-}dhcp}\KeywordTok{:} +\AttributeTok{ }\FunctionTok{build}\KeywordTok{:}\AttributeTok{ ./dhcp} +\AttributeTok{ }\FunctionTok{network\_mode}\KeywordTok{:}\AttributeTok{ host} +\AttributeTok{ }\FunctionTok{bootiful{-}tftp}\KeywordTok{:} +\AttributeTok{ }\FunctionTok{build}\KeywordTok{:}\AttributeTok{ ./tftp} +\AttributeTok{ }\FunctionTok{network\_mode}\KeywordTok{:}\AttributeTok{ host} +\AttributeTok{ }\FunctionTok{volumes}\KeywordTok{:} +\AttributeTok{ }\KeywordTok{{-}}\AttributeTok{ }\FunctionTok{type}\KeywordTok{:}\AttributeTok{ bind} +\AttributeTok{ }\FunctionTok{source}\KeywordTok{:}\AttributeTok{ ./tftp/tftpboot} +\AttributeTok{ }\FunctionTok{target}\KeywordTok{:}\AttributeTok{ /tftpboot} +\AttributeTok{ }\FunctionTok{read\_only}\KeywordTok{:}\AttributeTok{ }\CharTok{yes} +\AttributeTok{ }\FunctionTok{bootiful{-}nfs}\KeywordTok{:} +\AttributeTok{ }\FunctionTok{build}\KeywordTok{:}\AttributeTok{ ./nfs} +\AttributeTok{ }\FunctionTok{network\_mode}\KeywordTok{:}\AttributeTok{ host} +\AttributeTok{ }\FunctionTok{privileged}\KeywordTok{:}\AttributeTok{ }\CharTok{yes} +\AttributeTok{ }\FunctionTok{volumes}\KeywordTok{:} +\AttributeTok{ }\KeywordTok{{-}}\AttributeTok{ }\FunctionTok{type}\KeywordTok{:}\AttributeTok{ tmpfs} +\AttributeTok{ }\FunctionTok{target}\KeywordTok{:}\AttributeTok{ /nfsroot} +\AttributeTok{ }\KeywordTok{{-}}\AttributeTok{ }\FunctionTok{type}\KeywordTok{:}\AttributeTok{ bind} +\AttributeTok{ }\FunctionTok{source}\KeywordTok{:}\AttributeTok{ /run/media/araxor/bigdata/nfsshared} +\AttributeTok{ }\FunctionTok{target}\KeywordTok{:}\AttributeTok{ /nfsshared} +\AttributeTok{ }\KeywordTok{{-}}\AttributeTok{ }\FunctionTok{type}\KeywordTok{:}\AttributeTok{ bind} +\AttributeTok{ }\FunctionTok{source}\KeywordTok{:}\AttributeTok{ /lib/modules} +\AttributeTok{ }\FunctionTok{target}\KeywordTok{:}\AttributeTok{ /lib/modules} +\AttributeTok{ }\FunctionTok{read\_only}\KeywordTok{:}\AttributeTok{ }\CharTok{yes} +\AttributeTok{ }\FunctionTok{environment}\KeywordTok{:} +\AttributeTok{ }\FunctionTok{NFS\_LOG\_LEVEL}\KeywordTok{:}\AttributeTok{ DEBUG} +\end{Highlighting} +\end{Shaded} + +\hypertarget{deployer_dockerfile}{% +\section{\texorpdfstring{\texttt{deployer/Dockerfile}: configuration +\emph{Docker} pour la construction de l'OS de +déploiement}{deployer/Dockerfile: configuration Docker pour la construction de l'OS de déploiement}}\label{deployer_dockerfile}} + +\begin{Shaded} +\begin{Highlighting}[] +\KeywordTok{FROM}\NormalTok{ debian:bullseye as build{-}stage} +\KeywordTok{RUN}\NormalTok{ apt{-}get update \&\& apt{-}get install {-}y multistrap} + +\KeywordTok{WORKDIR}\NormalTok{ /multistrap} + +\KeywordTok{ADD}\NormalTok{ ./multistrap.config ./} +\KeywordTok{RUN}\NormalTok{ multistrap {-}{-}arch amd64 {-}{-}file ./multistrap.config {-}{-}dir ./rootfs {-}{-}tidy{-}up} + +\KeywordTok{ADD}\NormalTok{ ./hostname ./rootfs/etc/hostname} +\KeywordTok{ADD}\NormalTok{ ./hosts ./rootfs/etc/hosts} +\KeywordTok{ADD}\NormalTok{ ./fstab ./rootfs/etc/fstab} +\KeywordTok{ADD}\NormalTok{ ./initramfs.conf ./rootfs/etc/initramfs{-}tools/initramfs.conf} +\KeywordTok{ADD}\NormalTok{ ./bootiful{-}deploy{-}log.service ./rootfs/etc/systemd/system/bootiful{-}deploy{-}log.service} + +\KeywordTok{ADD}\NormalTok{ ./configure.sh ./rootfs/} +\KeywordTok{RUN}\NormalTok{ chroot /multistrap/rootfs ./configure.sh} + +\KeywordTok{RUN}\NormalTok{ mkdir ./boot ./rootfs/bootiful ./rootfs/var/lib/clonezilla ./rootfs/home/partimag} +\KeywordTok{RUN}\NormalTok{ ln {-}s /proc/mounts rootfs/etc/mtab} +\KeywordTok{RUN}\NormalTok{ cp ./rootfs/vmlinuz ./rootfs/initrd.img ./boot/ \&\& \textbackslash{}} +\NormalTok{ rm {-}rf ./rootfs/configure.sh ./rootfs/vmlinuz* ./rootfs/initrd.img* ./rootfs/boot} + +\KeywordTok{ADD}\NormalTok{ ./bootiful{-}deploy{-}init ./rootfs/usr/bin/} +\KeywordTok{ADD}\NormalTok{ ./bootiful{-}common ./rootfs/usr/bin/} +\KeywordTok{ADD}\NormalTok{ ./bootiful{-}deploy ./rootfs/usr/bin/} +\KeywordTok{ADD}\NormalTok{ ./bootiful{-}save{-}image ./rootfs/usr/bin/} +\KeywordTok{ADD}\NormalTok{ ./bootiful{-}reset{-}cache ./rootfs/usr/bin/} +\KeywordTok{RUN}\NormalTok{ tar {-}czf nfsroot.tar.gz rootfs {-}{-}hard{-}dereference \&\& rm {-}rf ./rootfs} + +\KeywordTok{FROM}\NormalTok{ scratch AS nfs{-}export{-}stage} +\KeywordTok{COPY}\NormalTok{ {-}{-}from=build{-}stage /multistrap/nfsroot.tar.gz /} + +\KeywordTok{FROM}\NormalTok{ scratch AS tftp{-}export{-}stage} +\KeywordTok{COPY}\NormalTok{ {-}{-}from=build{-}stage /multistrap/boot /} + +\end{Highlighting} +\end{Shaded} + +\hypertarget{deployerbootiful-deploy-log.service-configuration-de-lunituxe9-systemd-des-script-de-duxe9ploiement}{% +\section{\texorpdfstring{\texttt{deployer/bootiful-deploy-log.service}: +configuration de l'unité \emph{Systemd} des script de +déploiement}{deployer/bootiful-deploy-log.service: configuration de l'unité Systemd des script de déploiement}}\label{deployerbootiful-deploy-log.service-configuration-de-lunituxe9-systemd-des-script-de-duxe9ploiement}} + +\begin{Shaded} +\begin{Highlighting}[] +\KeywordTok{[Unit]} +\DataTypeTok{Description}\OtherTok{=}\StringTok{Bootiful interactive remote image deployment} +\DataTypeTok{Conflicts}\OtherTok{=}\StringTok{gettytty1.service} +\DataTypeTok{Before}\OtherTok{=}\StringTok{getty.target} + +\KeywordTok{[Service]} +\DataTypeTok{Type}\OtherTok{=}\StringTok{oneshot} +\DataTypeTok{RemainAfterExit}\OtherTok{=}\KeywordTok{yes} +\DataTypeTok{ExecStartPre}\OtherTok{=}\StringTok{/bin/sleep }\DecValTok{2} +\DataTypeTok{ExecStart}\OtherTok{=}\StringTok{/usr/bin/bootiful{-}deploy{-}init} +\DataTypeTok{StandardInput}\OtherTok{=}\StringTok{tty} +\DataTypeTok{StandardOutput}\OtherTok{=}\StringTok{tty} +\DataTypeTok{StandardError}\OtherTok{=}\StringTok{tty} +\DataTypeTok{ } +\KeywordTok{[Install]} +\DataTypeTok{WantedBy}\OtherTok{=}\StringTok{multi{-}user.target} +\end{Highlighting} +\end{Shaded} + +\hypertarget{deployerinitramfs.conf-configuration-pour-cruxe9ation-dun-initramfs-pour-duxe9marrer-avec-nfs}{% +\section{\texorpdfstring{\texttt{deployer/initramfs.conf}: configuration +pour création d'un \emph{initramfs} pour démarrer avec +\protect\hyperlink{acronym__NFS}{NFS}}{deployer/initramfs.conf: configuration pour création d'un initramfs pour démarrer avec NFS}}\label{deployerinitramfs.conf-configuration-pour-cruxe9ation-dun-initramfs-pour-duxe9marrer-avec-nfs}} + +\begin{Shaded} +\begin{Highlighting}[] +\CommentTok{\#} +\CommentTok{\# initramfs.conf} +\CommentTok{\# Configuration file for mkinitramfs(8). See initramfs.conf(5).} +\CommentTok{\#} +\CommentTok{\# Note that configuration options from this file can be overridden} +\CommentTok{\# by config files in the /etc/initramfs{-}tools/conf.d directory.} + +\CommentTok{\#} +\CommentTok{\# MODULES: [ most | netboot | dep | list ]} +\CommentTok{\#} +\CommentTok{\# most {-} Add most filesystem and all harddrive drivers.} +\CommentTok{\#} +\CommentTok{\# dep {-} Try and guess which modules to load.} +\CommentTok{\#} +\CommentTok{\# netboot {-} Add the base modules, network modules, but skip block devices.} +\CommentTok{\#} +\CommentTok{\# list {-} Only include modules from the \textquotesingle{}additional modules\textquotesingle{} list} +\CommentTok{\#} + +\VariableTok{MODULES=}\NormalTok{netboot} + +\CommentTok{\#} +\CommentTok{\# BUSYBOX: [ y | n | auto ]} +\CommentTok{\#} +\CommentTok{\# Use busybox shell and utilities. If set to n, klibc utilities will be used.} +\CommentTok{\# If set to auto (or unset), busybox will be used if installed and klibc will} +\CommentTok{\# be used otherwise.} +\CommentTok{\#} + +\VariableTok{BUSYBOX=}\NormalTok{auto} + +\CommentTok{\#} +\CommentTok{\# KEYMAP: [ y | n ]} +\CommentTok{\#} +\CommentTok{\# Load a keymap during the initramfs stage.} +\CommentTok{\#} + +\VariableTok{KEYMAP=}\NormalTok{n} + +\CommentTok{\#} +\CommentTok{\# COMPRESS: [ gzip | bzip2 | lz4 | lzma | lzop | xz ]} +\CommentTok{\#} + +\VariableTok{COMPRESS=}\NormalTok{xz} + +\CommentTok{\#} +\CommentTok{\# NFS Section of the config.} +\CommentTok{\#} + +\CommentTok{\#} +\CommentTok{\# DEVICE: ...} +\CommentTok{\#} +\CommentTok{\# Specify a specific network interface, like eth0} +\CommentTok{\# Overridden by optional ip= or BOOTIF= bootarg} +\CommentTok{\#} + +\VariableTok{DEVICE=} + +\CommentTok{\#} +\CommentTok{\# NFSROOT: [ auto | HOST:MOUNT ]} +\CommentTok{\#} + +\VariableTok{NFSROOT=}\NormalTok{auto} + +\CommentTok{\#} +\CommentTok{\# RUNSIZE: ...} +\CommentTok{\#} +\CommentTok{\# The size of the /run tmpfs mount point, like 256M or 10\%} +\CommentTok{\# Overridden by optional initramfs.runsize= bootarg} +\CommentTok{\#} + +\VariableTok{RUNSIZE=}\NormalTok{10}\ExtensionTok{\%} +\end{Highlighting} +\end{Shaded} + +\hypertarget{deployermultistrap.config-configuration-multistrap-pour-la-cruxe9ation-du-systuxe8me-de-fichiers-racine}{% +\section{\texorpdfstring{\texttt{deployer/multistrap.config}: +configuration \emph{multistrap} pour la création du système de fichiers +racine}{deployer/multistrap.config: configuration multistrap pour la création du système de fichiers racine}}\label{deployermultistrap.config-configuration-multistrap-pour-la-cruxe9ation-du-systuxe8me-de-fichiers-racine}} + +\begin{Shaded} +\begin{Highlighting}[] +\KeywordTok{[General]} +\DataTypeTok{unpack}\OtherTok{=}\KeywordTok{true} +\DataTypeTok{bootstrap}\OtherTok{=}\StringTok{DRBL Debian} +\DataTypeTok{aptsources}\OtherTok{=}\StringTok{Debian} +\DataTypeTok{addimportant}\OtherTok{=}\KeywordTok{true} + +\KeywordTok{[Debian]} +\DataTypeTok{packages}\OtherTok{=}\StringTok{nfs{-}common linux{-}image{-}amd64 parted systemd udev strace zstd dialog lolcat gdisk gawk pigz pv clonezilla partclone partimage cifs{-}utils} +\DataTypeTok{source}\OtherTok{=}\StringTok{http://http.debian.net/debian} +\DataTypeTok{keyring}\OtherTok{=}\StringTok{debian{-}archive{-}keyring} +\DataTypeTok{suite}\OtherTok{=}\StringTok{bullseye} +\DataTypeTok{components}\OtherTok{=}\StringTok{main contrib non{-}free} +\end{Highlighting} +\end{Shaded} + +\hypertarget{deployerconfigure.sh-script-de-configuration-du-systuxe8me-de-fichier-racine-uxe0-exuxe9cuter-en-chroot}{% +\section{\texorpdfstring{\texttt{deployer/configure.sh}: script de +configuration du système de fichier racine à exécuter en +\texttt{chroot}}{deployer/configure.sh: script de configuration du système de fichier racine à exécuter en chroot}}\label{deployerconfigure.sh-script-de-configuration-du-systuxe8me-de-fichier-racine-uxe0-exuxe9cuter-en-chroot}} + +\begin{Shaded} +\begin{Highlighting}[] +\CommentTok{\#!/bin/bash} + +\KeywordTok{set} \ExtensionTok{{-}e} + +\BuiltInTok{export} \VariableTok{DEBIAN\_FRONTEND=}\NormalTok{noninteractive }\VariableTok{DEBCONF\_NONINTERACTIVE\_SEEN=}\NormalTok{true} +\BuiltInTok{export} \VariableTok{LC\_ALL=}\NormalTok{C }\VariableTok{LANGUAGE=}\NormalTok{C }\VariableTok{LANG=}\NormalTok{C} + +\ExtensionTok{dpkg}\NormalTok{ {-}{-}configure {-}a} + +\ExtensionTok{apt{-}get}\NormalTok{ autoremove {-}{-}purge} +\ExtensionTok{apt{-}get}\NormalTok{ clean} + +\ExtensionTok{update{-}initramfs}\NormalTok{ {-}u} + +\ExtensionTok{systemctl}\NormalTok{ enable bootiful{-}deploy{-}log.service} + +\BuiltInTok{echo} \StringTok{"root:bootiful"} \KeywordTok{|} \ExtensionTok{chpasswd} +\end{Highlighting} +\end{Shaded} + +\hypertarget{deployerbootiful-deploy-init-script-dinitialisation-du-duxe9ploiement}{% +\section{\texorpdfstring{\texttt{deployer/bootiful-deploy-init}: script +d'initialisation du +déploiement}{deployer/bootiful-deploy-init: script d'initialisation du déploiement}}\label{deployerbootiful-deploy-init-script-dinitialisation-du-duxe9ploiement}} + +\begin{Shaded} +\begin{Highlighting}[] +\CommentTok{\#!/bin/bash} + +\BuiltInTok{umask}\NormalTok{ {-}S 0000 }\OperatorTok{\&\textgreater{}}\NormalTok{/dev/null} +\FunctionTok{clear} +\ExtensionTok{/usr/games/lolcat}\NormalTok{ {-}a {-}d 6 {-}s 20 {-}F 0.5 }\OperatorTok{\textless{}\textless{}\textquotesingle{}EOF\textquotesingle{}} +\NormalTok{ .o8 . o8o .o88o. oooo} +\NormalTok{"888 .o8 \textasciigrave{}"\textquotesingle{} 888 \textasciigrave{}" \textasciigrave{}888} +\NormalTok{ 888oooo. .ooooo. .ooooo. .o888oo oooo o888oo oooo oooo 888} +\NormalTok{ d88\textquotesingle{} \textasciigrave{}88b d88\textquotesingle{} \textasciigrave{}88b d88\textquotesingle{} \textasciigrave{}88b 888 \textasciigrave{}888 888 \textasciigrave{}888 \textasciigrave{}888 888} +\NormalTok{ 888 888 888 888 888 888 888 888 888 888 888 888} +\NormalTok{ 888 888 888 888 888 888 888 . 888 888 888 888 888} +\NormalTok{ \textasciigrave{}Y8bod8P\textquotesingle{} \textasciigrave{}Y8bod8P\textquotesingle{} \textasciigrave{}Y8bod8P\textquotesingle{} "888" o888o o888o \textasciigrave{}V88V"V8P\textquotesingle{} o888o} +\OperatorTok{EOF} +\BuiltInTok{declare} \VariableTok{logo\_pressed\_key} +\BuiltInTok{read}\NormalTok{ {-}t 0.001 {-}n 1 {-}s {-}r }\VariableTok{logo\_pressed\_key} +\BuiltInTok{readonly} \VariableTok{logo\_pressed\_key} + +\FunctionTok{select\_next\_action()} \KeywordTok{\{} + \BuiltInTok{local} \VariableTok{next\_action\_pressed\_key} + \KeywordTok{while} \FunctionTok{true}\KeywordTok{;} \KeywordTok{do} + \BuiltInTok{echo} + \BuiltInTok{echo} \StringTok{"Press \textquotesingle{}d\textquotesingle{} to restart deployment"} + \BuiltInTok{echo} \StringTok{"Press \textquotesingle{}s\textquotesingle{} to start an interactive command{-}line shell"} + \BuiltInTok{echo} \StringTok{"Press \textquotesingle{}r\textquotesingle{} to reboot"} + \BuiltInTok{echo} \StringTok{"Press \textquotesingle{}p\textquotesingle{} to power off"} + + \BuiltInTok{read}\NormalTok{ {-}n 1 {-}s {-}r }\VariableTok{next\_action\_pressed\_key} + \KeywordTok{case} \StringTok{"}\VariableTok{$next\_action\_pressed\_key}\StringTok{"}\KeywordTok{ in} +\NormalTok{ [dD]}\KeywordTok{)} + \BuiltInTok{echo} \StringTok{"Restarting deployment..."} + \BuiltInTok{break} + \KeywordTok{;;} +\NormalTok{ [sS]}\KeywordTok{)} + \BuiltInTok{echo} \StringTok{"Starting an interactive command{-}line shell..."} + \ExtensionTok{/bin/bash}\NormalTok{ {-}i} + \KeywordTok{;;} +\NormalTok{ [rR]}\KeywordTok{)} + \BuiltInTok{echo} \StringTok{"Rebooting..."} + \ExtensionTok{reboot} + \KeywordTok{;;} +\NormalTok{ [pP]}\KeywordTok{)} + \BuiltInTok{echo} \StringTok{"Powering off..."} + \ExtensionTok{poweroff} + \KeywordTok{;;} +\NormalTok{ *}\KeywordTok{)} + \BuiltInTok{echo} \StringTok{"Error: No action defined for key \textquotesingle{}}\VariableTok{$next\_action\_pressed\_key}\StringTok{\textquotesingle{}"} + \KeywordTok{;;} + \KeywordTok{esac} + \KeywordTok{done} +\KeywordTok{\}} + +\KeywordTok{if [[} \StringTok{"}\VariableTok{$logo\_pressed\_key}\StringTok{"}\NormalTok{ =\textasciitilde{} \^{}[sS]$}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \BuiltInTok{echo} \StringTok{"Skipping deployment...."} + \ExtensionTok{/bin/bash}\NormalTok{ {-}i} + \ExtensionTok{select\_next\_action} +\KeywordTok{fi} + +\KeywordTok{while}\NormalTok{ ! }\ExtensionTok{bootiful{-}deploy}\KeywordTok{;} \KeywordTok{do} + \BuiltInTok{echo} \StringTok{"Error in deployment."} + \ExtensionTok{select\_next\_action} +\KeywordTok{done} + +\BuiltInTok{echo} \StringTok{"Deployment successful. Rebooting..."} +\ExtensionTok{reboot} + +\end{Highlighting} +\end{Shaded} + +\hypertarget{deployerbootiful-common-script-de-duxe9finition-des-fonctions-communes-aux-scripts-bootiful-}{% +\section{\texorpdfstring{\texttt{deployer/bootiful-common}: script de +définition des fonctions communes aux scripts +\texttt{bootiful-*}}{deployer/bootiful-common: script de définition des fonctions communes aux scripts bootiful-*}}\label{deployerbootiful-common-script-de-duxe9finition-des-fonctions-communes-aux-scripts-bootiful-}} + +\begin{Shaded} +\begin{Highlighting}[] +\CommentTok{\#!/bin/bash} + +\KeywordTok{if [[} \StringTok{"}\VariableTok{$\{BASH\_SOURCE[0]\}}\StringTok{"} \OtherTok{==} \StringTok{"}\VariableTok{$0}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \BuiltInTok{echo} \OperatorTok{\textgreater{}\&2} \StringTok{"Error: script \textquotesingle{}}\VariableTok{$0}\StringTok{\textquotesingle{} must be sourced, not executed."} + \BuiltInTok{return}\NormalTok{ 1} +\KeywordTok{fi} + +\KeywordTok{if [[} \OtherTok{{-}n} \StringTok{"}\VariableTok{$BOOTIFUL\_COMMON\_SOURCED}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \BuiltInTok{echo} \OperatorTok{\textgreater{}\&2} \StringTok{"Warning: script \textquotesingle{}}\VariableTok{$0}\StringTok{\textquotesingle{} sourced more than once."} + \BuiltInTok{return}\NormalTok{ 0} +\KeywordTok{fi} + +\BuiltInTok{readonly} \VariableTok{BOOTIFUL\_COMMON\_SOURCED=}\NormalTok{true} + +\FunctionTok{echo\_err()} \KeywordTok{\{} + \BuiltInTok{echo} \OperatorTok{\textgreater{}\&2} \StringTok{"$"} +\KeywordTok{\}} + +\CommentTok{\# Writes an error message and a stack trace to stderr, then exits the current} +\CommentTok{\# shell with the error status code 1.} +\CommentTok{\#} +\CommentTok{\# Warning: if called in a sub{-}shell, the error messages are written to stderr} +\CommentTok{\# but only the sub{-}shell is exited. The parent shell should always} +\CommentTok{\# check the sub{-}shells exit status codes and call \textasciigrave{}fatal\_error\textasciigrave{} if a} +\CommentTok{\# non{-}0 exit status is returned.} +\FunctionTok{fatal\_error()} \KeywordTok{\{} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{message=}\StringTok{"}\VariableTok{$\{1:{-}}\NormalTok{unknown reason}\VariableTok{\}}\StringTok{"} + + \ExtensionTok{echo\_err} \StringTok{"Fatal error: }\VariableTok{$message}\StringTok{"} + + \ExtensionTok{echo\_err} \StringTok{"Stack trace:"} + \BuiltInTok{local} \VariableTok{frame=}\NormalTok{0} + \KeywordTok{while} \OperatorTok{\textgreater{}\&2} \BuiltInTok{caller} \VariableTok{$frame}\KeywordTok{;} \KeywordTok{do} + \KeywordTok{((}\NormalTok{frame++}\KeywordTok{))} + \KeywordTok{done} + + \BuiltInTok{exit}\NormalTok{ 1} +\KeywordTok{\}} + +\CommentTok{\# If the INT signal (ctrl+c) is received, a fatal error is thrown} +\FunctionTok{fatal\_error\_on\_sigint()} \KeywordTok{\{} + \ExtensionTok{fatal\_error} \StringTok{"SIGINT received"} +\KeywordTok{\}} +\BuiltInTok{trap}\NormalTok{ fatal\_error\_on\_sigint INT} + +\BuiltInTok{declare}\NormalTok{ {-}a }\VariableTok{exit\_callbacks=()} +\FunctionTok{execute\_exit\_callbacks()} \KeywordTok{\{} + \KeywordTok{for} \ExtensionTok{exit\_callback}\NormalTok{ in }\StringTok{"}\VariableTok{$\{exit\_callbacks[]\}}\StringTok{"}\KeywordTok{;} \KeywordTok{do} + \StringTok{"}\VariableTok{$exit\_callback}\StringTok{"} + \KeywordTok{done} +\KeywordTok{\}} +\BuiltInTok{trap} \StringTok{\textquotesingle{}execute\_exit\_callbacks\textquotesingle{}}\NormalTok{ EXIT} + +\FunctionTok{add\_exit\_callback()} \KeywordTok{\{} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{exit\_callback\_function=}\StringTok{"}\VariableTok{$1}\StringTok{"} + \VariableTok{exit\_callbacks+=(}\StringTok{"}\VariableTok{$exit\_callback\_function}\StringTok{"}\VariableTok{)} +\KeywordTok{\}} + +\BuiltInTok{declare}\NormalTok{ {-}a }\VariableTok{step\_names=()} +\BuiltInTok{declare}\NormalTok{ {-}a }\VariableTok{step\_timestamps=()} +\BuiltInTok{declare}\NormalTok{ {-}a }\VariableTok{step\_durations=()} +\BuiltInTok{declare}\NormalTok{ {-}a }\VariableTok{step\_types=()} + +\BuiltInTok{readonly} \VariableTok{STEP\_TYPE\_BATCH=}\StringTok{"batch"} +\BuiltInTok{readonly} \VariableTok{STEP\_TYPE\_INTERACTIVE=}\StringTok{"interactive"} + +\FunctionTok{timestamp\_now()} \KeywordTok{\{} + \FunctionTok{date}\NormalTok{ +\%s} +\KeywordTok{\}} + +\FunctionTok{finish\_step()} \KeywordTok{\{} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{step\_name=}\StringTok{"}\VariableTok{$1}\StringTok{"} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{step\_start\_timestamp=}\StringTok{"}\VariableTok{$2}\StringTok{"} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{step\_finish\_timestamp=}\StringTok{"}\VariableTok{$3}\StringTok{"} + + \VariableTok{step\_durations+=($((}\StringTok{"}\VariableTok{$step\_finish\_timestamp}\StringTok{"}\NormalTok{ {-} }\StringTok{"}\VariableTok{$\{step\_start\_timestamp\}}\StringTok{"}\VariableTok{)))} + \ExtensionTok{echo\_err} \StringTok{"Finished }\VariableTok{$step\_name}\StringTok{ (duration: }\VariableTok{$\{step\_durations[{-}1]\}}\StringTok{s)"} +\KeywordTok{\}} + +\FunctionTok{print\_step\_durations()} \KeywordTok{\{} + + \KeywordTok{if [[} \StringTok{"$\{\#step\_timestamps[]\}"} \OtherTok{{-}gt}\NormalTok{ 1}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \ExtensionTok{finish\_step} \StringTok{"}\VariableTok{$\{step\_names[{-}1]\}}\StringTok{"} \KeywordTok{\textbackslash{}} + \StringTok{"}\VariableTok{$\{step\_timestamps[{-}1]\}}\StringTok{"} \KeywordTok{\textbackslash{}} + \StringTok{"}\VariableTok{$(}\ExtensionTok{timestamp\_now}\VariableTok{)}\StringTok{"} + \KeywordTok{fi} + + \BuiltInTok{local} \VariableTok{total\_batch\_duration=}\NormalTok{0} + \BuiltInTok{local} \VariableTok{total\_interactive\_duration=}\NormalTok{0} + \BuiltInTok{local} \VariableTok{total\_duration=}\NormalTok{0} + \BuiltInTok{local} \VariableTok{step\_name} + \BuiltInTok{local} \VariableTok{step\_type} + \BuiltInTok{local} \VariableTok{step\_duration} + \BuiltInTok{local} \VariableTok{step\_number} + + \ExtensionTok{echo\_err} + \ExtensionTok{echo\_err} \StringTok{"Steps duration summary:"} + + \KeywordTok{for} \ExtensionTok{i}\NormalTok{ in }\StringTok{"$\{!step\_durations[]\}"}\KeywordTok{;} \KeywordTok{do} + \VariableTok{step\_name=}\StringTok{"}\VariableTok{$\{step\_names[$i]\}}\StringTok{"} + \VariableTok{step\_duration=}\StringTok{"}\VariableTok{$\{step\_durations[$i]\}}\StringTok{"} + \VariableTok{step\_type=}\StringTok{"}\VariableTok{$\{step\_types[$i]\}}\StringTok{"} + \VariableTok{step\_number=$((}\NormalTok{i + 1}\VariableTok{))} + + \ExtensionTok{echo\_err} \StringTok{"}\VariableTok{$step\_number}\StringTok{ {-} }\VariableTok{$step\_name}\StringTok{ took }\VariableTok{$\{step\_duration\}}\StringTok{ seconds (}\VariableTok{$step\_type}\StringTok{)"} + + \KeywordTok{case} \StringTok{"}\VariableTok{$step\_type}\StringTok{"}\KeywordTok{ in} + \StringTok{"}\VariableTok{$STEP\_TYPE\_BATCH}\StringTok{"}\KeywordTok{)} + \KeywordTok{((}\NormalTok{total\_batch\_duration += }\StringTok{"}\VariableTok{$step\_duration}\StringTok{"}\KeywordTok{))} + \KeywordTok{;;} + \StringTok{"}\VariableTok{$STEP\_TYPE\_INTERACTIVE}\StringTok{"}\KeywordTok{)} + \KeywordTok{((}\NormalTok{total\_interactive\_duration += }\StringTok{"}\VariableTok{$step\_duration}\StringTok{"}\KeywordTok{))} + \KeywordTok{;;} + \KeywordTok{esac} + + \KeywordTok{((}\NormalTok{total\_duration += }\StringTok{"}\VariableTok{$step\_duration}\StringTok{"}\KeywordTok{))} + \KeywordTok{done} + + \ExtensionTok{echo\_err} + \ExtensionTok{echo\_err} \StringTok{"Total batch duration: }\VariableTok{$\{total\_batch\_duration\}}\StringTok{s"} + \ExtensionTok{echo\_err} \StringTok{"Total interactive duration: }\VariableTok{$\{total\_interactive\_duration\}}\StringTok{s"} + \ExtensionTok{echo\_err} \StringTok{"Total duration: }\VariableTok{$\{total\_duration\}}\StringTok{s"} +\KeywordTok{\}} + +\FunctionTok{start\_step()} \KeywordTok{\{} + \VariableTok{step\_timestamps+=(}\StringTok{"}\VariableTok{$(}\ExtensionTok{timestamp\_now}\VariableTok{)}\StringTok{"}\VariableTok{)} + \VariableTok{step\_names+=(}\StringTok{"}\VariableTok{$1}\StringTok{"}\VariableTok{)} + \VariableTok{step\_types+=(}\StringTok{"}\VariableTok{$2}\StringTok{"}\VariableTok{)} + + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{steps\_count=}\StringTok{"$\{\#step\_timestamps[]\}"} + + \KeywordTok{if [[} \VariableTok{$steps\_count} \OtherTok{{-}eq}\NormalTok{ 1}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \ExtensionTok{add\_exit\_callback} \StringTok{"print\_step\_durations"} + \KeywordTok{elif [[} \StringTok{"$\{\#step\_timestamps[]\}"} \OtherTok{{-}gt}\NormalTok{ 1}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \ExtensionTok{finish\_step} \StringTok{"}\VariableTok{$\{step\_names[{-}2]\}}\StringTok{"} \KeywordTok{\textbackslash{}} + \StringTok{"}\VariableTok{$\{step\_timestamps[{-}2]\}}\StringTok{"} \KeywordTok{\textbackslash{}} + \StringTok{"}\VariableTok{$\{step\_timestamps[{-}1]\}}\StringTok{"} + \KeywordTok{fi} + + \ExtensionTok{echo\_err} \StringTok{"Started }\VariableTok{$\{step\_names[{-}1]\}}\StringTok{"} +\KeywordTok{\}} + +\FunctionTok{start\_step\_batch()} \KeywordTok{\{} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{step\_name=}\StringTok{"}\VariableTok{$1}\StringTok{"} + \ExtensionTok{start\_step} \StringTok{"}\VariableTok{$step\_name}\StringTok{"} \StringTok{"}\VariableTok{$STEP\_TYPE\_BATCH}\StringTok{"} +\KeywordTok{\}} + +\FunctionTok{start\_step\_interactive()} \KeywordTok{\{} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{step\_name=}\StringTok{"}\VariableTok{$1}\StringTok{"} + \ExtensionTok{start\_step} \StringTok{"}\VariableTok{$step\_name}\StringTok{"} \StringTok{"}\VariableTok{$STEP\_TYPE\_INTERACTIVE}\StringTok{"} +\KeywordTok{\}} + +\FunctionTok{warning()} \KeywordTok{\{} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{message=}\StringTok{"}\VariableTok{$1}\StringTok{"} + + \ExtensionTok{echo\_err} + \ExtensionTok{echo\_err} \StringTok{"Warning: }\VariableTok{$message}\StringTok{"} + + \BuiltInTok{local} \VariableTok{pressed\_key} + \KeywordTok{while} \FunctionTok{true}\KeywordTok{;} \KeywordTok{do} + \ExtensionTok{echo\_err} + \ExtensionTok{echo\_err} \StringTok{"Continue? (y/n) "} + + \BuiltInTok{read}\NormalTok{ {-}n 1 {-}s {-}r }\VariableTok{pressed\_key} + \KeywordTok{case} \StringTok{"}\VariableTok{$pressed\_key}\StringTok{"}\KeywordTok{ in} +\NormalTok{ [yY]}\KeywordTok{)} + \ExtensionTok{echo\_err} \StringTok{"Continuing..."} + \BuiltInTok{return}\NormalTok{ 0} + \KeywordTok{;;} +\NormalTok{ [nN]}\KeywordTok{)} + \ExtensionTok{echo\_err} \StringTok{"Aborting..."} + \BuiltInTok{exit}\NormalTok{ 1} + \KeywordTok{;;} +\NormalTok{ *}\KeywordTok{)} + \ExtensionTok{echo\_err} \StringTok{"Invalid key \textquotesingle{}}\VariableTok{$pressed\_key}\StringTok{\textquotesingle{}"} + \KeywordTok{;;} + \KeywordTok{esac} + \KeywordTok{done} +\KeywordTok{\}} + +\FunctionTok{validation\_error()} \KeywordTok{\{} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{value=}\StringTok{"}\VariableTok{$1}\StringTok{"} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{validation\_error\_message=}\StringTok{"}\VariableTok{$2}\StringTok{"} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{fatal\_error\_message=}\StringTok{"}\VariableTok{$3}\StringTok{"} + \ExtensionTok{echo\_err} \StringTok{"Validation error: value \textquotesingle{}}\VariableTok{$value}\StringTok{\textquotesingle{} }\VariableTok{$validation\_error\_message}\StringTok{."} + \ExtensionTok{fatal\_error} \StringTok{"}\VariableTok{$fatal\_error\_message}\StringTok{"} +\KeywordTok{\}} + +\FunctionTok{validate\_not\_empty()} \KeywordTok{\{} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{value=}\StringTok{"}\VariableTok{$1}\StringTok{"} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{error\_message=}\StringTok{"}\VariableTok{$2}\StringTok{"} + + \KeywordTok{if [[} \OtherTok{{-}z} \StringTok{"}\VariableTok{$value}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \ExtensionTok{validation\_error} \StringTok{"}\VariableTok{$value}\StringTok{"} \StringTok{"is empty"} \StringTok{"}\VariableTok{$error\_message}\StringTok{"} + \KeywordTok{fi} +\KeywordTok{\}} + +\FunctionTok{validate\_with\_regex()} \KeywordTok{\{} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{value=}\StringTok{"}\VariableTok{$1}\StringTok{"} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{regex\_pattern=}\StringTok{"}\VariableTok{$2}\StringTok{"} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{fatal\_error\_message=}\StringTok{"}\VariableTok{$3}\StringTok{"} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{validation\_error\_message=}\StringTok{"}\VariableTok{$\{4:{-}}\StringTok{"does not match regex pattern \textquotesingle{}}\VariableTok{$regex\_pattern}\StringTok{\textquotesingle{}"}\VariableTok{\}}\StringTok{"} + + \KeywordTok{if [[} \OtherTok{!} \StringTok{"}\VariableTok{$value}\StringTok{"}\NormalTok{ =\textasciitilde{} }\VariableTok{$regex\_pattern}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \ExtensionTok{validation\_error} \StringTok{"}\VariableTok{$value}\StringTok{"} \StringTok{"}\VariableTok{$validation\_error\_message}\StringTok{"} \StringTok{"}\VariableTok{$fatal\_error\_message}\StringTok{"} + \KeywordTok{fi} +\KeywordTok{\}} + +\FunctionTok{validate\_uint()} \KeywordTok{\{} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{value=}\StringTok{"}\VariableTok{$1}\StringTok{"} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{error\_message=}\StringTok{"}\VariableTok{$2}\StringTok{"} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{regex\_pattern=}\StringTok{\textquotesingle{}\^{}[0{-}9]+$\textquotesingle{}} + + \ExtensionTok{validate\_with\_regex} \StringTok{"}\VariableTok{$value}\StringTok{"} \StringTok{"}\VariableTok{$regex\_pattern}\StringTok{"} \StringTok{"}\VariableTok{$error\_message}\StringTok{"} \StringTok{"is not a positive integer"} +\KeywordTok{\}} + +\FunctionTok{validate\_nonzero\_uint()} \KeywordTok{\{} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{value=}\StringTok{"}\VariableTok{$1}\StringTok{"} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{error\_message=}\StringTok{"}\VariableTok{$2}\StringTok{"} + + \ExtensionTok{validate\_uint} \StringTok{"}\VariableTok{$value}\StringTok{"} \StringTok{"}\VariableTok{$error\_message}\StringTok{"} + + \KeywordTok{if [[} \StringTok{"}\VariableTok{$value}\StringTok{"} \OtherTok{{-}le}\NormalTok{ 0}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \ExtensionTok{validation\_error} \StringTok{"}\VariableTok{$value}\StringTok{"} \StringTok{"is not bigger than zero"} \StringTok{"}\VariableTok{$error\_message}\StringTok{"} + \KeywordTok{fi} +\KeywordTok{\}} + +\FunctionTok{validate\_file\_exists()} \KeywordTok{\{} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{value=}\StringTok{"}\VariableTok{$1}\StringTok{"} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{error\_message=}\StringTok{"}\VariableTok{$\{2:{-}}\NormalTok{File does not exist}\VariableTok{\}}\StringTok{"} + + \KeywordTok{if [[} \OtherTok{!} \OtherTok{{-}f} \StringTok{"}\VariableTok{$value}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \ExtensionTok{validation\_error} \StringTok{"}\VariableTok{$value}\StringTok{"} \StringTok{"is not the path of an existing regular file"} \StringTok{"}\VariableTok{$error\_message}\StringTok{"} + \KeywordTok{fi} +\KeywordTok{\}} + +\CommentTok{\# Validates that the given file exists but do not test if it\textquotesingle{}s a regular file} +\CommentTok{\# like \textasciigrave{}validate\_file\_exists\textasciigrave{}.} +\FunctionTok{validate\_exists()} \KeywordTok{\{} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{value=}\StringTok{"}\VariableTok{$1}\StringTok{"} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{error\_message=}\StringTok{"}\VariableTok{$2}\StringTok{"} + + \KeywordTok{if [[} \OtherTok{!} \OtherTok{{-}e} \StringTok{"}\VariableTok{$value}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \ExtensionTok{validation\_error} \StringTok{"}\VariableTok{$value}\StringTok{"} \StringTok{"is not an existing path"} \StringTok{"}\VariableTok{$error\_message}\StringTok{"} + \KeywordTok{fi} +\KeywordTok{\}} + +\CommentTok{\# Usage:} +\CommentTok{\# ensure\_variable VARIABLE\_NAME COMPUTATION\_FUNCTION VALIDATION\_FUNCTION} +\CommentTok{\#} +\CommentTok{\# Description:} +\CommentTok{\# Ensures that a readonly global variable named VARIABLE\_NAME is declared,} +\CommentTok{\# that it\textquotesingle{}s value is initialized using COMPUTATION\_FUNCTION and validated} +\CommentTok{\# using VALIDATION\_FUNCTION.} +\CommentTok{\#} +\CommentTok{\# The value is computed, validated and set to a readonly global variable} +\CommentTok{\# during the first call to this function. Nothing more is done on} +\CommentTok{\# subsequent calls if the variable is already set.} +\CommentTok{\#} +\CommentTok{\# If this function returns, the variable VARIABLE\_NAME should be safe to} +\CommentTok{\# use without any further validation. The variable can be accessed from} +\CommentTok{\# it\textquotesingle{}s name, or using an expression like \textasciigrave{}$\{!VARIABLE\_NAME\}\textasciigrave{}.} +\CommentTok{\#} +\CommentTok{\# Arguments:} +\CommentTok{\# VARIABLE\_NAME} +\CommentTok{\# The name of the variable to ensure.} +\CommentTok{\#} +\CommentTok{\# COMPUTATION\_FUNCTION} +\CommentTok{\# A function that takes 0 arguments, writes the computed value to} +\CommentTok{\# standard output and returns 0 if the computation is successful.} +\CommentTok{\#} +\CommentTok{\# VALIDATION\_FUNCTION} +\CommentTok{\# A function that takes the computed value and returns 0 if the value} +\CommentTok{\# is valid.} +\CommentTok{\#} +\CommentTok{\# Exit status code:} +\CommentTok{\# 0 when no error is encountered. If any error is encountered during} +\CommentTok{\# declaration, computation, validation or assignation, the current shell} +\CommentTok{\# will be exited by a call to \textasciigrave{}fatal\_error\textasciigrave{} so the function will never} +\CommentTok{\# return.} +\FunctionTok{ensure\_variable()} \KeywordTok{\{} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{variable\_name=}\StringTok{"}\VariableTok{$1}\StringTok{"} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{computation\_function=}\StringTok{"}\VariableTok{$2}\StringTok{"} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{validation\_function=}\StringTok{"}\VariableTok{$3}\StringTok{"} + + \KeywordTok{if [[}\NormalTok{ {-}v }\StringTok{"}\VariableTok{$variable\_name}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \BuiltInTok{return}\NormalTok{ 0} + \KeywordTok{fi} + + \BuiltInTok{local} \VariableTok{computed\_value} \KeywordTok{||} + \ExtensionTok{fatal\_error} \StringTok{"cannot declare local variable \textquotesingle{}computed\_value\textquotesingle{}"} + + \VariableTok{computed\_value=}\StringTok{"}\VariableTok{$(}\StringTok{"}\VariableTok{$computation\_function}\StringTok{"}\VariableTok{)}\StringTok{"} \KeywordTok{||} + \ExtensionTok{fatal\_error} \StringTok{"cannot compute value of \textquotesingle{}}\VariableTok{$variable\_name}\StringTok{\textquotesingle{} with \textquotesingle{}}\VariableTok{$computation\_function}\StringTok{\textquotesingle{}"} + + \StringTok{"}\VariableTok{$validation\_function}\StringTok{"} \StringTok{"}\VariableTok{$computed\_value}\StringTok{"} \KeywordTok{||} + \ExtensionTok{fatal\_error} \StringTok{"cannot validate value of \textquotesingle{}}\VariableTok{$variable\_name}\StringTok{\textquotesingle{} with \textquotesingle{}}\VariableTok{$validation\_function}\StringTok{\textquotesingle{}"} + + \BuiltInTok{declare}\NormalTok{ {-}g {-}r }\StringTok{"}\VariableTok{$variable\_name}\StringTok{"}\VariableTok{=}\StringTok{"}\VariableTok{$computed\_value}\StringTok{"} \KeywordTok{||} + \ExtensionTok{fatal\_error} \StringTok{"cannot initialize global readonly variable \textquotesingle{}}\VariableTok{$variable\_name}\StringTok{\textquotesingle{} with value \textquotesingle{}}\VariableTok{$computed\_value}\StringTok{\textquotesingle{}"} + + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{log\_variable\_name=}\StringTok{"}\VariableTok{$(}\BuiltInTok{echo} \StringTok{"}\VariableTok{$\{variable\_name\^{}\}}\StringTok{"} \KeywordTok{|} \FunctionTok{tr} \StringTok{\textquotesingle{}\_\textquotesingle{}} \StringTok{\textquotesingle{} \textquotesingle{}}\VariableTok{)}\StringTok{"} + \ExtensionTok{echo\_err} \StringTok{"}\VariableTok{$log\_variable\_name}\StringTok{: }\VariableTok{$\{!variable\_name\}}\StringTok{"} + + \BuiltInTok{return}\NormalTok{ 0} +\KeywordTok{\}} + +\CommentTok{\# Ensures $remote\_address is declared, initialized and valid.} +\FunctionTok{ensure\_remote\_address()} \KeywordTok{\{} + \BuiltInTok{declare}\NormalTok{ {-}g }\VariableTok{remote\_address} + + \FunctionTok{get\_remote\_address()} \KeywordTok{\{} + \FunctionTok{mount}\NormalTok{ {-}t nfs }\KeywordTok{|} \FunctionTok{cut}\NormalTok{ {-}d}\StringTok{\textquotesingle{}:\textquotesingle{}}\NormalTok{ {-}f1 }\KeywordTok{|} \FunctionTok{head}\NormalTok{ {-}1 }\KeywordTok{||} + \ExtensionTok{fatal\_error} \StringTok{"cannot retrieve remote server address."} + \KeywordTok{\}} + + \FunctionTok{validate\_remote\_address()} \KeywordTok{\{} + \ExtensionTok{validate\_not\_empty} \StringTok{"}\VariableTok{$1}\StringTok{"} \StringTok{"no valid remote server address has not been found."} + \KeywordTok{\}} + + \ExtensionTok{ensure\_variable} \StringTok{"remote\_address"} \StringTok{"get\_remote\_address"} \StringTok{"validate\_remote\_address"} +\KeywordTok{\}} + +\CommentTok{\# Ensures $net\_interface is declared, initialized and valid.} +\FunctionTok{ensure\_net\_interface()} \KeywordTok{\{} + \BuiltInTok{declare}\NormalTok{ {-}g }\VariableTok{net\_interface} + + \ExtensionTok{ensure\_remote\_address} + + \FunctionTok{get\_net\_interface()} \KeywordTok{\{} + \ExtensionTok{ip}\NormalTok{ route get }\StringTok{"}\VariableTok{$remote\_address}\StringTok{"} \KeywordTok{|} \FunctionTok{head}\NormalTok{ {-}1 }\KeywordTok{|} \FunctionTok{sed}\NormalTok{ {-}n }\StringTok{\textquotesingle{}s/.* dev \textbackslash{}([\^{} ]*\textbackslash{}).*/\textbackslash{}1/p\textquotesingle{}} \KeywordTok{||} + \ExtensionTok{fatal\_error} \StringTok{"cannot retrieve network interface with route to \textquotesingle{}}\VariableTok{$remote\_address}\StringTok{\textquotesingle{}."} + \KeywordTok{\}} + + \FunctionTok{validate\_net\_interface()} \KeywordTok{\{} + \ExtensionTok{validate\_not\_empty} \StringTok{"}\VariableTok{$1}\StringTok{"} \StringTok{"no valid network interface has been found."} + \KeywordTok{\}} + + \ExtensionTok{ensure\_variable} \StringTok{"net\_interface"} \StringTok{"get\_net\_interface"} \StringTok{"validate\_net\_interface"} +\KeywordTok{\}} + +\CommentTok{\# Ensures $mac\_address is declared, initialized and valid.} +\FunctionTok{ensure\_mac\_address()} \KeywordTok{\{} + \CommentTok{\# shellcheck disable=SC2034 \# the variable is declared for parent scripts that source this one} + \BuiltInTok{declare}\NormalTok{ {-}g }\VariableTok{mac\_address} + + \ExtensionTok{ensure\_net\_interface} + + \FunctionTok{get\_mac\_address()} \KeywordTok{\{} + \FunctionTok{tr} \StringTok{"[:upper:]:"} \StringTok{"[:lower:]{-}"} \OperatorTok{\textless{}} \StringTok{"/sys/class/net/}\VariableTok{$net\_interface}\StringTok{/address"} \KeywordTok{||} + \ExtensionTok{fatal\_error} \StringTok{"failed to retrieve and convert mac address of network interface \textquotesingle{}}\VariableTok{$net\_interface}\StringTok{\textquotesingle{}"} + \KeywordTok{\}} + + \FunctionTok{validate\_mac\_address()} \KeywordTok{\{} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{value=}\StringTok{"}\VariableTok{$1}\StringTok{"} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{regex\_pattern=}\StringTok{\textquotesingle{}\^{}([0{-}9a{-}f]\{2\}{-})\{5\}[0{-}9a{-}f]\{2\}$\textquotesingle{}} + + \ExtensionTok{validate\_with\_regex} \KeywordTok{\textbackslash{}} + \StringTok{"}\VariableTok{$value}\StringTok{"} \StringTok{"}\VariableTok{$regex\_pattern}\StringTok{"} \KeywordTok{\textbackslash{}} + \StringTok{"mac address does not match required format."} \KeywordTok{\textbackslash{}} + \StringTok{"is not a mac address formatted as lower{-}case hexadecimal bytes separated by hyphens."} + \KeywordTok{\}} + + \ExtensionTok{ensure\_variable} \StringTok{"mac\_address"} \StringTok{"get\_mac\_address"} \StringTok{"validate\_mac\_address"} +\KeywordTok{\}} + +\BuiltInTok{readonly} \VariableTok{mounting\_point\_remote=}\StringTok{"/bootiful/shared"} +\BuiltInTok{readonly} \VariableTok{deployment\_disk=}\StringTok{"/dev/sda"} + +\CommentTok{\# Ensures the kernel is informed of the latest partition table changes} +\FunctionTok{refresh\_partition\_table()} \KeywordTok{\{} + \ExtensionTok{echo\_err} \StringTok{"Refreshing partition table on disk \textquotesingle{}}\VariableTok{$deployment\_disk}\StringTok{\textquotesingle{}..."} + \ExtensionTok{partprobe} \StringTok{"}\VariableTok{$deployment\_disk}\StringTok{"} +\KeywordTok{\}} + +\CommentTok{\# Checks if something is currently mounted on the given mount point} +\FunctionTok{is\_mounted()} \KeywordTok{\{} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{mount\_point=}\StringTok{"}\VariableTok{$1}\StringTok{"} + + \ExtensionTok{refresh\_partition\_table} + \ExtensionTok{findmnt}\NormalTok{ {-}{-}mountpoint }\StringTok{"}\VariableTok{$mount\_point}\StringTok{"} +\KeywordTok{\}} + +\CommentTok{\# Ensures that the given directory exists or create it. If the directory does} +\CommentTok{\# not exist and cannot be created, \textasciigrave{}fatal\_error\textasciigrave{} is called.} +\FunctionTok{ensure\_directory()} \KeywordTok{\{} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{directory=}\StringTok{"}\VariableTok{$1}\StringTok{"} + + \ExtensionTok{echo\_err} \StringTok{"Ensuring directory \textquotesingle{}}\VariableTok{$directory}\StringTok{\textquotesingle{} exists..."} + \KeywordTok{if [[} \OtherTok{{-}d} \StringTok{"}\VariableTok{$directory}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \ExtensionTok{echo\_err} \StringTok{"Directory \textquotesingle{}}\VariableTok{$directory}\StringTok{\textquotesingle{} already exists."} + \BuiltInTok{return}\NormalTok{ 0} + \KeywordTok{fi} + + \ExtensionTok{echo\_err} \StringTok{"Directory \textquotesingle{}}\VariableTok{$directory}\StringTok{\textquotesingle{} does not exist. Attempting to create it..."} + \FunctionTok{mkdir}\NormalTok{ {-}p }\StringTok{"}\VariableTok{$directory}\StringTok{"} \KeywordTok{||} + \ExtensionTok{fatal\_error} \StringTok{"Cannot create directory }\VariableTok{$directory}\StringTok{."} + \ExtensionTok{echo\_err} \StringTok{"Directory \textquotesingle{}}\VariableTok{$directory}\StringTok{\textquotesingle{} created."} +\KeywordTok{\}} + +\CommentTok{\# Mounts a device to a mount point if it\textquotesingle{}s not already mounted} +\FunctionTok{ensure\_mounted()} \KeywordTok{\{} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{source\_device=}\StringTok{"}\VariableTok{$1}\StringTok{"} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{mount\_point=}\StringTok{"}\VariableTok{$2}\StringTok{"} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{mount\_fstype=}\StringTok{"}\VariableTok{$3}\StringTok{"} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{mount\_options=}\StringTok{"}\VariableTok{$4}\StringTok{"} + + \ExtensionTok{echo\_err} \StringTok{"Ensuring device \textquotesingle{}}\VariableTok{$source\_device}\StringTok{\textquotesingle{} is mounted on \textquotesingle{}}\VariableTok{$mount\_point}\StringTok{\textquotesingle{}..."} + + \KeywordTok{if} \ExtensionTok{is\_mounted} \StringTok{"}\VariableTok{$mount\_point}\StringTok{"}\KeywordTok{;} \KeywordTok{then} + \ExtensionTok{echo\_err} \StringTok{"Mount point \textquotesingle{}}\VariableTok{$mount\_point}\StringTok{\textquotesingle{} is already mounted."} + \BuiltInTok{return}\NormalTok{ 0} + \KeywordTok{fi} + + \ExtensionTok{echo\_err} \StringTok{"Nothing is mounted on mount point \textquotesingle{}}\VariableTok{$mount\_point}\StringTok{\textquotesingle{}."} + + \ExtensionTok{ensure\_directory} \StringTok{"}\VariableTok{$mount\_point}\StringTok{"} + + \ExtensionTok{echo\_err} \StringTok{"Attempting to mount \textquotesingle{}}\VariableTok{$source\_device}\StringTok{\textquotesingle{} on \textquotesingle{}}\VariableTok{$mount\_point}\StringTok{\textquotesingle{} as \textquotesingle{}}\VariableTok{$mount\_fstype}\StringTok{\textquotesingle{} with options \textquotesingle{}}\VariableTok{$mount\_options}\StringTok{\textquotesingle{}."} + + \FunctionTok{mount}\NormalTok{ {-}t }\StringTok{"}\VariableTok{$mount\_fstype}\StringTok{"}\NormalTok{ {-}o }\StringTok{"}\VariableTok{$mount\_options}\StringTok{"} \StringTok{"}\VariableTok{$source\_device}\StringTok{"} \StringTok{"}\VariableTok{$mount\_point}\StringTok{"} \KeywordTok{||} + \ExtensionTok{fatal\_error} \StringTok{"Failed to mount device \textquotesingle{}}\VariableTok{$source\_device}\StringTok{\textquotesingle{} on \textquotesingle{}}\VariableTok{$mount\_point}\StringTok{\textquotesingle{}"}\NormalTok{.} + + \ExtensionTok{echo\_err} \StringTok{"Mount successful."} +\KeywordTok{\}} + +\CommentTok{\# Mounts the remote shared data if it\textquotesingle{}s not already mounted} +\FunctionTok{ensure\_remote\_shared\_mounted()} \KeywordTok{\{} + \ExtensionTok{ensure\_remote\_address} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{remote\_nfs\_share=}\StringTok{"}\VariableTok{$remote\_address}\StringTok{:/nfsshared"} + \ExtensionTok{ensure\_mounted} \StringTok{"}\VariableTok{$remote\_nfs\_share}\StringTok{"} \StringTok{"}\VariableTok{$mounting\_point\_remote}\StringTok{"} \StringTok{"nfs"} \StringTok{"nolock"} +\KeywordTok{\}} + +\CommentTok{\# Ensures $total\_disk\_size is declared, initialized and valid.} +\FunctionTok{ensure\_total\_disk\_size()} \KeywordTok{\{} + \BuiltInTok{declare}\NormalTok{ {-}g }\VariableTok{total\_disk\_size} + + \FunctionTok{get\_total\_disk\_size()} \KeywordTok{\{} + \ExtensionTok{parted}\NormalTok{ {-}{-}script }\StringTok{"}\VariableTok{$deployment\_disk}\StringTok{"}\NormalTok{ unit B print }\KeywordTok{|} + \FunctionTok{sed}\NormalTok{ {-}En }\StringTok{\textquotesingle{}s\#\^{}Disk\textbackslash{}s*\textquotesingle{}"}\VariableTok{$deployment\_disk}\StringTok{"\textquotesingle{}:\textbackslash{}s*([0{-}9]+)B$\#\textbackslash{}1\#p\textquotesingle{}} \KeywordTok{||} + \ExtensionTok{fatal\_error} \StringTok{"cannot retrieve total disk size"} + \KeywordTok{\}} + + \FunctionTok{validate\_total\_disk\_size()} \KeywordTok{\{} + \ExtensionTok{validate\_nonzero\_uint} \StringTok{"}\VariableTok{$1}\StringTok{"} \StringTok{"retrieved disk size format is invalid."} + \KeywordTok{\}} + + \ExtensionTok{ensure\_variable} \StringTok{"total\_disk\_size"} \StringTok{"get\_total\_disk\_size"} \StringTok{"validate\_total\_disk\_size"} +\KeywordTok{\}} + +\CommentTok{\# Ensures $sector\_sizes is declared, initialized and valid} +\FunctionTok{ensure\_sector\_sizes()} \KeywordTok{\{} + \BuiltInTok{declare}\NormalTok{ {-}g }\VariableTok{sector\_sizes} + + \FunctionTok{get\_sector\_sizes()} \KeywordTok{\{} + \ExtensionTok{parted}\NormalTok{ {-}{-}script }\StringTok{"}\VariableTok{$deployment\_disk}\StringTok{"}\NormalTok{ print }\KeywordTok{|} + \FunctionTok{sed}\NormalTok{ {-}En }\StringTok{\textquotesingle{}s\#\^{}Sector size \textbackslash{}(logical/physical\textbackslash{}):\textbackslash{}s*([0{-}9]+)B/([0{-}9]+)B$\#\textbackslash{}1\textbackslash{}t\textbackslash{}2\#p\textquotesingle{}} \KeywordTok{||} + \ExtensionTok{fatal\_error} \StringTok{"cannot retrieve sector size"} + \KeywordTok{\}} + + \FunctionTok{validate\_sector\_sizes()} \KeywordTok{\{} + \ExtensionTok{validate\_with\_regex} \KeywordTok{\textbackslash{}} + \StringTok{"}\VariableTok{$1}\StringTok{"} \KeywordTok{\textbackslash{}} + \StringTok{\textquotesingle{}\^{}[0{-}9]+\textbackslash{}s+[0{-}9]+$\textquotesingle{}} \KeywordTok{\textbackslash{}} + \StringTok{\textquotesingle{}retrieved sector sizes are invalid\textquotesingle{}} \KeywordTok{\textbackslash{}} + \StringTok{\textquotesingle{}does not contain two unsigned integers separated by spaces\textquotesingle{}} + \KeywordTok{\}} + + \ExtensionTok{ensure\_variable} \StringTok{"sector\_sizes"} \StringTok{"get\_sector\_sizes"} \StringTok{"validate\_sector\_sizes"} +\KeywordTok{\}} + +\CommentTok{\# Ensures $logical\_sector\_size is declared, initialized and valid} +\FunctionTok{ensure\_logical\_sector\_size()} \KeywordTok{\{} + \CommentTok{\# shellcheck disable=SC2034 \# the variable is declared for parent scripts that source this one} + \BuiltInTok{declare}\NormalTok{ {-}g }\VariableTok{logical\_sector\_size} + + \ExtensionTok{ensure\_sector\_sizes} + + \FunctionTok{extract\_logical\_sector\_size()} \KeywordTok{\{} + \BuiltInTok{echo} \StringTok{"}\VariableTok{$sector\_sizes}\StringTok{"} \KeywordTok{|} \FunctionTok{cut}\NormalTok{ {-}f 1 }\KeywordTok{||} + \ExtensionTok{fatal\_error} \StringTok{"cannot extract logical sector size from sector sizes"} + \KeywordTok{\}} + + \FunctionTok{validate\_logical\_sector\_size()} \KeywordTok{\{} + \ExtensionTok{validate\_nonzero\_uint} \StringTok{"}\VariableTok{$1}\StringTok{"} \StringTok{"retrieved logical sector size is invalid"} + \KeywordTok{\}} + + \ExtensionTok{ensure\_variable} \StringTok{"logical\_sector\_size"} \StringTok{"extract\_logical\_sector\_size"} \StringTok{"validate\_logical\_sector\_size"} +\KeywordTok{\}} + +\CommentTok{\# Ensures $physical\_sector\_size is declared, initialized and valid} +\FunctionTok{ensure\_physical\_sector\_size()} \KeywordTok{\{} + \BuiltInTok{declare}\NormalTok{ {-}g }\VariableTok{physical\_sector\_size} + + \ExtensionTok{ensure\_sector\_sizes} + + \FunctionTok{extract\_physical\_sector\_size()} \KeywordTok{\{} + \BuiltInTok{echo} \StringTok{"}\VariableTok{$sector\_sizes}\StringTok{"} \KeywordTok{|} \FunctionTok{cut}\NormalTok{ {-}f 2 }\KeywordTok{||} + \ExtensionTok{fatal\_error} \StringTok{"cannot extract physical sector size from sector sizes"} + \KeywordTok{\}} + + \FunctionTok{validate\_physical\_sector\_size()} \KeywordTok{\{} + \ExtensionTok{validate\_nonzero\_uint} \StringTok{"}\VariableTok{$1}\StringTok{"} \StringTok{"retrieved physical sector size is invalid"} + \KeywordTok{\}} + + \ExtensionTok{ensure\_variable} \StringTok{"physical\_sector\_size"} \StringTok{"extract\_physical\_sector\_size"} \StringTok{"validate\_physical\_sector\_size"} +\KeywordTok{\}} + +\CommentTok{\# Ensures $image\_cache\_partition\_size is declared, initialized and valid} +\FunctionTok{ensure\_image\_cache\_partition\_size()} \KeywordTok{\{} + \BuiltInTok{declare}\NormalTok{ {-}g }\VariableTok{image\_cache\_partition\_size} + + \ExtensionTok{ensure\_total\_disk\_size} + \ExtensionTok{ensure\_physical\_sector\_size} + + \FunctionTok{calculate\_image\_cache\_partition\_size()} \KeywordTok{\{} + \BuiltInTok{echo} \StringTok{"}\VariableTok{$((}\NormalTok{(20 * total\_disk\_size / 100) / physical\_sector\_size * physical\_sector\_size}\VariableTok{))}\StringTok{"} \KeywordTok{||} + \ExtensionTok{fatal\_error} \StringTok{"cannot calculate image partition size"} + \KeywordTok{\}} + + \FunctionTok{validate\_image\_cache\_partition\_size()} \KeywordTok{\{} + \ExtensionTok{validate\_nonzero\_uint} \StringTok{"}\VariableTok{$1}\StringTok{"} \StringTok{"calculated image cache partition size is invalid"} + \KeywordTok{\}} + + \ExtensionTok{ensure\_variable} \StringTok{"image\_cache\_partition\_size"} \KeywordTok{\textbackslash{}} + \StringTok{"calculate\_image\_cache\_partition\_size"} \KeywordTok{\textbackslash{}} + \StringTok{"validate\_image\_cache\_partition\_size"} +\KeywordTok{\}} + +\CommentTok{\# Ensures $image\_cache\_partition\_start is declared, initialized and valid} +\FunctionTok{ensure\_image\_cache\_partition\_start()} \KeywordTok{\{} + \BuiltInTok{declare}\NormalTok{ {-}g }\VariableTok{image\_cache\_partition\_start} + + \ExtensionTok{ensure\_total\_disk\_size} + \ExtensionTok{ensure\_physical\_sector\_size} + \ExtensionTok{ensure\_image\_cache\_partition\_size} + + \FunctionTok{calculate\_image\_cache\_partition\_start()} \KeywordTok{\{} + \BuiltInTok{echo} \StringTok{"}\VariableTok{$((}\NormalTok{(total\_disk\_size {-} image\_cache\_partition\_size) / physical\_sector\_size * physical\_sector\_size {-} 4096}\VariableTok{))}\StringTok{"} \KeywordTok{||} + \ExtensionTok{fatal\_error} \StringTok{"cannot calculate image cache partition start"} + \KeywordTok{\}} + + \FunctionTok{validate\_image\_cache\_partition\_start()} \KeywordTok{\{} + \ExtensionTok{validate\_nonzero\_uint} \StringTok{"}\VariableTok{$1}\StringTok{"} \StringTok{"calculated image cache partition start is invalid"} + \KeywordTok{\}} + + \ExtensionTok{ensure\_variable} \StringTok{"image\_cache\_partition\_start"} \KeywordTok{\textbackslash{}} + \StringTok{"calculate\_image\_cache\_partition\_start"} \KeywordTok{\textbackslash{}} + \StringTok{"validate\_image\_cache\_partition\_start"} +\KeywordTok{\}} + +\CommentTok{\# Ensures $image\_cache\_partition\_end is declared, initialized and valid} +\FunctionTok{ensure\_image\_cache\_partition\_end()} \KeywordTok{\{} + \CommentTok{\# shellcheck disable=SC2034 \# the variable is declared for parent scripts that source this one} + \BuiltInTok{declare}\NormalTok{ {-}g }\VariableTok{image\_cache\_partition\_end} + + \ExtensionTok{ensure\_image\_cache\_partition\_size} + \ExtensionTok{ensure\_image\_cache\_partition\_start} + + \FunctionTok{calculate\_image\_cache\_partition\_end()} \KeywordTok{\{} + \BuiltInTok{echo} \StringTok{"}\VariableTok{$((}\NormalTok{image\_cache\_partition\_start + image\_cache\_partition\_size}\VariableTok{))}\StringTok{"} \KeywordTok{||} + \ExtensionTok{fatal\_error} \StringTok{"cannot calculate image cache partition end"} + \KeywordTok{\}} + + \FunctionTok{validate\_image\_cache\_partition\_end()} \KeywordTok{\{} + \ExtensionTok{validate\_nonzero\_uint} \StringTok{"}\VariableTok{$1}\StringTok{"} \StringTok{"calculated image cache partition start is invalid"} + \KeywordTok{\}} + + \ExtensionTok{ensure\_variable} \StringTok{"image\_cache\_partition\_end"} \KeywordTok{\textbackslash{}} + \StringTok{"calculate\_image\_cache\_partition\_end"} \KeywordTok{\textbackslash{}} + \StringTok{"validate\_image\_cache\_partition\_end"} +\KeywordTok{\}} + +\FunctionTok{parse\_last\_partition\_end()} \KeywordTok{\{} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{gawk\_input\_data=}\StringTok{"}\VariableTok{$1}\StringTok{"} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{input\_size\_unit=}\StringTok{"}\VariableTok{$2}\StringTok{"} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{start\_parse\_token=}\StringTok{"}\VariableTok{$3}\StringTok{"} + + \BuiltInTok{local} \VariableTok{gawk\_program} + \BuiltInTok{read}\NormalTok{ {-}r {-}d }\StringTok{\textquotesingle{}\textquotesingle{}} \VariableTok{gawk\_program} \OperatorTok{\textless{}\textless{} \textquotesingle{}EOF\textquotesingle{}} +\NormalTok{ $0 \textasciitilde{} start\_parse\_regex\_pattern \{} +\NormalTok{ parsing=1;} +\NormalTok{ max\_part\_end=0;} +\NormalTok{ next;} +\NormalTok{ \}} +\NormalTok{ parsing \&\& $3 \textasciitilde{} disk\_end\_regex\_pattern \{} +\NormalTok{ part\_end=substr($3, 1, length($3){-}length(size\_unit)) + 0;} +\NormalTok{ if(part\_end\textgreater{}max\_part\_end) \{} +\NormalTok{ max\_part\_end=part\_end;} +\NormalTok{ \}} +\NormalTok{ \}} +\NormalTok{ END \{} +\NormalTok{ printf "\%d", max\_part\_end;} +\NormalTok{ \}} +\OperatorTok{EOF} + + \BuiltInTok{echo} \StringTok{"}\VariableTok{$gawk\_input\_data}\StringTok{"} \KeywordTok{|} \FunctionTok{gawk} \KeywordTok{\textbackslash{}} + \ExtensionTok{{-}v}\NormalTok{ start\_parse\_regex\_pattern=}\StringTok{"\^{}}\VariableTok{$start\_parse\_token}\StringTok{"} \KeywordTok{\textbackslash{}} + \ExtensionTok{{-}v}\NormalTok{ disk\_end\_regex\_pattern=}\StringTok{"\^{}[0{-}9]+}\VariableTok{$input\_size\_unit}\StringTok{$"} \KeywordTok{\textbackslash{}} + \ExtensionTok{{-}v}\NormalTok{ size\_unit=}\StringTok{"}\VariableTok{$input\_size\_unit}\StringTok{"} \KeywordTok{\textbackslash{}} + \ExtensionTok{{-}M} \StringTok{"}\VariableTok{$gawk\_program}\StringTok{"} \KeywordTok{\textbackslash{}} + \KeywordTok{||} \ExtensionTok{fatal\_error} \StringTok{"cannot extract image size"} +\KeywordTok{\}} + +\CommentTok{\# Print the end offset of the last partition of a parted output} +\FunctionTok{parse\_parted\_last\_partition\_end()} \KeywordTok{\{} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{parted\_output=}\StringTok{"}\VariableTok{$1}\StringTok{"} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{parted\_unit=}\StringTok{"}\VariableTok{$2}\StringTok{"} + + \ExtensionTok{parse\_last\_partition\_end} \StringTok{"}\VariableTok{$parted\_output}\StringTok{"} \StringTok{"}\VariableTok{$parted\_unit}\StringTok{"} \StringTok{\textquotesingle{}Number\textquotesingle{}} +\KeywordTok{\}} + +\FunctionTok{parse\_parted\_last\_partition\_end\_sector()} \KeywordTok{\{} + \ExtensionTok{parse\_parted\_last\_partition\_end} \StringTok{"}\VariableTok{$1}\StringTok{"} \StringTok{"s"} +\KeywordTok{\}} + +\FunctionTok{parse\_fdisk\_last\_partition\_end\_sector()} \KeywordTok{\{} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{fdisk\_output=}\StringTok{"}\VariableTok{$1}\StringTok{"} + + \ExtensionTok{parse\_last\_partition\_end} \StringTok{"}\VariableTok{$fdisk\_output}\StringTok{"} \StringTok{\textquotesingle{}\textquotesingle{}} \StringTok{\textquotesingle{}Device\textquotesingle{}} +\KeywordTok{\}} + +\FunctionTok{create\_hidden\_partition()} \KeywordTok{\{} + \BuiltInTok{echo} \StringTok{"Erasing MBR..."} + \FunctionTok{dd}\NormalTok{ if=/dev/zero bs=512 count=1 of=}\StringTok{"}\VariableTok{$deployment\_disk}\StringTok{"} + \BuiltInTok{echo} \StringTok{"MBR erased."} + + \BuiltInTok{echo} \StringTok{"Creating new partition table with hidden partition..."} + \ExtensionTok{ensure\_image\_cache\_partition\_start} + \ExtensionTok{ensure\_image\_cache\_partition\_end} + \ExtensionTok{parted}\NormalTok{ {-}s {-}a opt }\StringTok{"}\VariableTok{$deployment\_disk}\StringTok{"}\NormalTok{ mklabel msdos mkpart primary ext2 }\StringTok{"}\VariableTok{$\{image\_cache\_partition\_start\}}\StringTok{B"} \StringTok{"}\VariableTok{$\{image\_cache\_partition\_end\}}\StringTok{B"} \KeywordTok{||} + \ExtensionTok{fatal\_error} \StringTok{"parted exited with error code }\VariableTok{$?}\StringTok{"} + \BuiltInTok{echo} \StringTok{"New partition table with hidden partition created."} + + \ExtensionTok{refresh\_partition\_table} + + \BuiltInTok{echo} \StringTok{"Creating file system in hidden partition..."} + \ExtensionTok{mke2fs}\NormalTok{ {-}t ext2 }\StringTok{"}\VariableTok{$\{deployment\_disk\}}\StringTok{1"} \KeywordTok{||} + \ExtensionTok{fatal\_error} \StringTok{"mke2fs exited with error code }\VariableTok{$?}\StringTok{"} + \BuiltInTok{echo} \StringTok{"File system in hidden partition created."} + + \ExtensionTok{refresh\_partition\_table} +\KeywordTok{\}} +\end{Highlighting} +\end{Shaded} + +\hypertarget{deployerbootiful-deploy-script-de-duxe9ploiement-dimages}{% +\section{\texorpdfstring{\texttt{deployer/bootiful-deploy}: script de +déploiement +d'images}{deployer/bootiful-deploy: script de déploiement d'images}}\label{deployerbootiful-deploy-script-de-duxe9ploiement-dimages}} + +\begin{Shaded} +\begin{Highlighting}[] +\CommentTok{\#!/bin/bash} + +\BuiltInTok{shopt}\NormalTok{ {-}s nullglob} + +\BuiltInTok{readonly} \VariableTok{SCRIPT\_NAME=}\StringTok{"}\VariableTok{$(}\FunctionTok{basename} \StringTok{"}\VariableTok{$0}\StringTok{"}\VariableTok{)}\StringTok{"} +\BuiltInTok{readonly} \VariableTok{SCRIPT\_DIR=}\StringTok{"}\VariableTok{$(}\FunctionTok{readlink}\NormalTok{ {-}m }\StringTok{"}\VariableTok{$(}\FunctionTok{dirname} \StringTok{"}\VariableTok{$0}\StringTok{"}\VariableTok{)}\StringTok{"}\VariableTok{)}\StringTok{"} + +\FunctionTok{usage()} \KeywordTok{\{} + \FunctionTok{cat} \OperatorTok{\textless{}\textless{} EOF} +\NormalTok{Usage:} + \VariableTok{$SCRIPT\_DIR}\NormalTok{ [{-}h | {-}{-}help]} + +\NormalTok{Description:} +\NormalTok{ Deploys an operating system image on the disk.} + +\NormalTok{ The image is retrieved from the NFS server that already provides the root file} +\NormalTok{ system. The NFS shared directory /nfsshared is mounted on /bootiful/shared and} +\NormalTok{ contains multiple images that can be deployed.} + +\NormalTok{ The available images from the server are scanned from /bootiful/shared/images} +\NormalTok{ and displayed in an interactive menu that allows to choose which particular} +\NormalTok{ image will be deployed.} + +\NormalTok{ All the data written in the standard input and standard error during the} +\NormalTok{ deployment is also written in a log file in /bootiful/shared/logs.} + +\NormalTok{ If there is enough disk space available, the image is cached in a hidden} +\NormalTok{ partition to avoid downloading it again over the network during a future} +\NormalTok{ deployment. This hidden partition takes 20\% of the disk.} + +\NormalTok{ If the image to deploy overlaps the image cache partition (i.e. the image} +\NormalTok{ takes more than 80\% of the disk size), a warning message is shown and an} +\NormalTok{ interactive menu allows to choose whether to abort or continue the deployment} +\NormalTok{ without using the cache.} + +\NormalTok{Options:} +\NormalTok{ {-}h, {-}{-}help Shows this help} + +\NormalTok{Exit status:} +\NormalTok{ 0 if an image has been deployed successfully} +\NormalTok{ 1 if some error has occured during deployment} + +\NormalTok{Example:} + \VariableTok{$SCRIPT\_NAME} +\OperatorTok{EOF} +\KeywordTok{\}} + +\KeywordTok{if [[} \StringTok{"}\VariableTok{$1}\StringTok{"} \OtherTok{==} \StringTok{"{-}h"}\NormalTok{ || }\StringTok{"}\VariableTok{$1}\StringTok{"} \OtherTok{==} \StringTok{"{-}{-}help"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \ExtensionTok{usage} + \BuiltInTok{exit}\NormalTok{ 0} +\KeywordTok{fi} + +\CommentTok{\# Loads declarations from the \textquotesingle{}bootiful{-}common\textquotesingle{} script, which is a "library"} +\CommentTok{\# of functions and constants shared by multiple bootiful{-}* scripts.} +\BuiltInTok{readonly} \VariableTok{bootiful\_common\_script\_file=}\StringTok{"}\VariableTok{$SCRIPT\_DIR}\StringTok{/bootiful{-}common"} +\KeywordTok{if [[} \OtherTok{!} \OtherTok{{-}f} \StringTok{"}\VariableTok{$bootiful\_common\_script\_file}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \BuiltInTok{echo} \OperatorTok{\textgreater{}\&2} \StringTok{"Fatal error: cannot find required script file \textquotesingle{}}\VariableTok{$bootiful\_common\_script\_file}\StringTok{\textquotesingle{}."} + \BuiltInTok{exit}\NormalTok{ 1} +\KeywordTok{fi} +\CommentTok{\# shellcheck source=./bootiful{-}common} +\BuiltInTok{.} \StringTok{"}\VariableTok{$SCRIPT\_DIR}\StringTok{/bootiful{-}common"} + +\ExtensionTok{start\_step\_batch} \StringTok{"remote shared data mount initialization"} +\VariableTok{start\_timestamp=}\StringTok{"}\VariableTok{$\{step\_timestamps[0]\}}\StringTok{"} + +\ExtensionTok{ensure\_remote\_shared\_mounted} + +\ExtensionTok{start\_step\_batch} \StringTok{"log file initialization"} +\BuiltInTok{readonly} \VariableTok{log\_dir=}\StringTok{"}\VariableTok{$mounting\_point\_remote}\StringTok{/log"} + +\ExtensionTok{ensure\_mac\_address} +\ExtensionTok{ensure\_directory} \StringTok{"}\VariableTok{$log\_dir}\StringTok{"} +\BuiltInTok{readonly} \VariableTok{logfile\_date=$(}\FunctionTok{date}\NormalTok{ {-}{-}date }\StringTok{"}\VariableTok{$start\_timestamp}\StringTok{"}\NormalTok{ {-}{-}universal +\%Y{-}\%m{-}\%d\_\%H{-}\%M{-}\%S}\VariableTok{)} +\BuiltInTok{readonly} \VariableTok{log\_file\_prefix=}\StringTok{"}\VariableTok{$log\_dir}\StringTok{/}\VariableTok{$\{mac\_address\}}\StringTok{\_}\VariableTok{$logfile\_date}\StringTok{"} + +\BuiltInTok{readonly} \VariableTok{log\_file=}\StringTok{"}\VariableTok{$log\_file\_prefix}\StringTok{.log"} +\BuiltInTok{echo} \StringTok{"Starting logging stdout and stderr to }\VariableTok{$log\_file}\StringTok{..."} + +\KeywordTok{\{} + \ExtensionTok{start\_step\_batch} \StringTok{"hardware log files creation"} + + \FunctionTok{log\_command\_to\_file()} \KeywordTok{\{} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{prefix=}\StringTok{"}\VariableTok{$1}\StringTok{"} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{extension=}\StringTok{"}\VariableTok{$2}\StringTok{"} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{command=}\StringTok{"}\VariableTok{$3}\StringTok{"} + + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{hardware\_log\_file=}\StringTok{"}\VariableTok{$prefix}\StringTok{.}\VariableTok{$extension}\StringTok{"} + + \BuiltInTok{echo} \StringTok{"Writing }\VariableTok{$extension}\StringTok{ log file }\VariableTok{$hardware\_log\_file}\StringTok{..."} + + \CommentTok{\# shellcheck disable=SC2086 \# we need to expand args} + \FunctionTok{bash}\NormalTok{ {-}c }\StringTok{"}\VariableTok{$command}\StringTok{"} \OperatorTok{\textgreater{}} \StringTok{"}\VariableTok{$hardware\_log\_file}\StringTok{"} \KeywordTok{||} + \ExtensionTok{fatal\_error} \StringTok{"Cannot write }\VariableTok{$extension}\StringTok{ log file }\VariableTok{$hardware\_log\_file}\StringTok{."} + + \BuiltInTok{echo} \StringTok{"Wrote }\VariableTok{$extension}\StringTok{ log file }\VariableTok{$hardware\_log\_file}\StringTok{."} + \KeywordTok{\}} + + \ExtensionTok{log\_command\_to\_file} \StringTok{"}\VariableTok{$log\_file\_prefix}\StringTok{"}\NormalTok{ cpuinfo }\StringTok{\textquotesingle{}cat /proc/cpuinfo\textquotesingle{}} + \ExtensionTok{log\_command\_to\_file} \StringTok{"}\VariableTok{$log\_file\_prefix}\StringTok{"}\NormalTok{ meminfo }\StringTok{\textquotesingle{}cat /proc/meminfo\textquotesingle{}} + \ExtensionTok{log\_command\_to\_file} \StringTok{"}\VariableTok{$log\_file\_prefix}\StringTok{"}\NormalTok{ parted }\StringTok{\textquotesingle{}parted {-}{-}script {-}{-}list\textquotesingle{}} + + \ExtensionTok{start\_step\_batch} \StringTok{"remote images search"} + + \VariableTok{remote\_images\_dir=}\StringTok{"}\VariableTok{$mounting\_point\_remote}\StringTok{/images"} + + \BuiltInTok{echo} \StringTok{"Finding remote images..."} + \BuiltInTok{declare} \VariableTok{count=}\NormalTok{0} + \BuiltInTok{declare}\NormalTok{ {-}A }\VariableTok{images} + \BuiltInTok{declare} \VariableTok{found\_image\_name} + \KeywordTok{for} \ExtensionTok{image\_folder}\NormalTok{ in }\StringTok{"}\VariableTok{$remote\_images\_dir}\StringTok{"}\NormalTok{/*}\KeywordTok{;} \KeywordTok{do} + \VariableTok{found\_image\_name=$(}\FunctionTok{basename} \StringTok{"}\VariableTok{$image\_folder}\StringTok{"}\VariableTok{)} + \BuiltInTok{echo} \StringTok{"Image \textquotesingle{}}\VariableTok{$found\_image\_name}\StringTok{\textquotesingle{} found"} + \VariableTok{options=(}\StringTok{"}\VariableTok{$\{options[]\}}\StringTok{"} \StringTok{"}\VariableTok{$((}\NormalTok{++count}\VariableTok{))}\StringTok{"} \StringTok{"}\VariableTok{$found\_image\_name}\StringTok{"}\VariableTok{)} + \VariableTok{images[$count]=}\StringTok{"}\VariableTok{$found\_image\_name}\StringTok{"} + \KeywordTok{done} + \BuiltInTok{echo} \StringTok{"}\VariableTok{$count}\StringTok{ remote images found."} + + \KeywordTok{if [[} \VariableTok{$count} \OtherTok{{-}eq}\NormalTok{ 0}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \ExtensionTok{fatal\_error} \StringTok{"No image found in remote images directory }\VariableTok{$remote\_images\_dir}\StringTok{"} + \KeywordTok{fi} + + \ExtensionTok{start\_step\_interactive} \StringTok{"image selection"} + + \BuiltInTok{declare} \VariableTok{tty} + \VariableTok{tty=$(}\ExtensionTok{tty}\VariableTok{)} + \BuiltInTok{readonly} \VariableTok{tty} + + \BuiltInTok{declare} \VariableTok{choice} + \VariableTok{choice=$(}\ExtensionTok{dialog} \KeywordTok{\textbackslash{}} + \ExtensionTok{{-}{-}clear} \KeywordTok{\textbackslash{}} + \ExtensionTok{{-}{-}title} \StringTok{"Image selection"} \KeywordTok{\textbackslash{}} + \ExtensionTok{{-}{-}menu} \StringTok{"Select an image to deploy"} \KeywordTok{\textbackslash{}} + \ExtensionTok{0}\NormalTok{ 0 0 }\KeywordTok{\textbackslash{}} + \StringTok{"}\VariableTok{$\{options[]\}}\StringTok{"} \KeywordTok{\textbackslash{}} + \OperatorTok{2\textgreater{}\&1} \OperatorTok{\textgreater{}} \StringTok{"}\VariableTok{$tty}\StringTok{"}\VariableTok{)} + \BuiltInTok{readonly} \VariableTok{choice} + + \ExtensionTok{validate\_not\_empty} \StringTok{"}\VariableTok{$choice}\StringTok{"} \StringTok{"No image has been chosen"} + + \BuiltInTok{readonly} \VariableTok{image\_name=$\{images[$choice]\}} + + \BuiltInTok{echo} \StringTok{"Chosen image is }\VariableTok{$image\_name}\StringTok{"} + + \BuiltInTok{readonly} \VariableTok{remote\_image\_dir=}\StringTok{"}\VariableTok{$remote\_images\_dir}\StringTok{/}\VariableTok{$image\_name}\StringTok{"} + \BuiltInTok{readonly} \VariableTok{remote\_image\_gzip\_file=}\StringTok{"}\VariableTok{$remote\_image\_dir}\StringTok{/}\VariableTok{$image\_name}\StringTok{.img.gz"} + \BuiltInTok{readonly} \VariableTok{remote\_image\_clonezilla\_id\_file=}\StringTok{"}\VariableTok{$remote\_image\_dir}\StringTok{/Info{-}img{-}id.txt"} + + \BuiltInTok{readonly} \VariableTok{IMAGE\_TYPE\_RAW=}\StringTok{"raw"} + \BuiltInTok{readonly} \VariableTok{IMAGE\_TYPE\_CLONEZILLA=}\StringTok{"clonezilla"} + + \KeywordTok{if [[} \OtherTok{{-}f} \StringTok{"}\VariableTok{$remote\_image\_gzip\_file}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \BuiltInTok{readonly} \VariableTok{image\_type=}\StringTok{"}\VariableTok{$IMAGE\_TYPE\_RAW}\StringTok{"} + \BuiltInTok{readonly} \VariableTok{remote\_image\_md5\_file=}\StringTok{"}\VariableTok{$remote\_image\_dir}\StringTok{/}\VariableTok{$image\_name}\StringTok{.md5"} + \BuiltInTok{readonly} \VariableTok{remote\_image\_size\_file=}\StringTok{"}\VariableTok{$remote\_image\_dir}\StringTok{/}\VariableTok{$image\_name}\StringTok{.partition"} + \BuiltInTok{readonly} \VariableTok{parse\_end\_sector\_function=}\NormalTok{parse\_fdisk\_last\_partition\_end\_sector} + \KeywordTok{elif [[} \OtherTok{{-}f} \StringTok{"}\VariableTok{$remote\_image\_clonezilla\_id\_file}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \BuiltInTok{readonly} \VariableTok{image\_type=}\StringTok{"}\VariableTok{$IMAGE\_TYPE\_CLONEZILLA}\StringTok{"} + \BuiltInTok{readonly} \VariableTok{remote\_image\_size\_file=}\StringTok{"}\VariableTok{$remote\_image\_dir}\StringTok{/sda{-}pt.parted"} + \BuiltInTok{readonly} \VariableTok{parse\_end\_sector\_function=}\NormalTok{parse\_parted\_last\_partition\_end\_sector} + \KeywordTok{else} + \ExtensionTok{fatal\_error} \StringTok{"Cannot find type of image \textquotesingle{}}\VariableTok{$image\_name}\StringTok{\textquotesingle{} in \textquotesingle{}}\VariableTok{$remote\_image\_dir}\StringTok{\textquotesingle{}"} + \KeywordTok{fi} + + \ExtensionTok{start\_step\_batch} \StringTok{"image size verification"} + + \ExtensionTok{validate\_file\_exists} \KeywordTok{\textbackslash{}} + \StringTok{"}\VariableTok{$remote\_image\_size\_file}\StringTok{"} \KeywordTok{\textbackslash{}} + \StringTok{"cannot retrieve size of image because parted/fdisk dump file does not exist."} + + \BuiltInTok{readonly} \VariableTok{remote\_image\_size\_file\_content=}\StringTok{"}\OperatorTok{$(\textless{}} \StringTok{"}\VariableTok{$remote\_image\_size\_file}\StringTok{"}\OperatorTok{)}\StringTok{"} \KeywordTok{||} + \ExtensionTok{fatal\_error} \StringTok{"Cannot read parted/fdisk dump file \textquotesingle{}}\VariableTok{$remote\_image\_size\_file}\StringTok{\textquotesingle{}"} + + \BuiltInTok{declare} \VariableTok{image\_end\_sector} + \VariableTok{image\_end\_sector=$(}\StringTok{"}\VariableTok{$parse\_end\_sector\_function}\StringTok{"} \StringTok{"}\VariableTok{$remote\_image\_size\_file\_content}\StringTok{"}\VariableTok{)} + \BuiltInTok{readonly} \VariableTok{image\_end\_sector} + \ExtensionTok{validate\_nonzero\_uint} \StringTok{"}\VariableTok{$image\_end\_sector}\StringTok{"} \StringTok{"Invalid image end sector"} + + \ExtensionTok{ensure\_logical\_sector\_size} + \KeywordTok{((}\NormalTok{image\_size = image\_end\_sector * logical\_sector\_size}\KeywordTok{))} + \ExtensionTok{validate\_nonzero\_uint} \StringTok{"}\VariableTok{$image\_size}\StringTok{"} \StringTok{"Retrieved image size is invalid"} + + \BuiltInTok{echo} \StringTok{"Image type: }\VariableTok{$image\_type}\StringTok{"} + \BuiltInTok{echo} \StringTok{"Image size: }\VariableTok{$image\_size}\StringTok{ B"} + + \ExtensionTok{ensure\_total\_disk\_size} + \BuiltInTok{echo} \StringTok{"Available space in disk without image cache partition: }\VariableTok{$total\_disk\_size}\StringTok{ B"} + \ExtensionTok{ensure\_image\_cache\_partition\_size} + \BuiltInTok{echo} \StringTok{"Available space before image cache partition partition: }\VariableTok{$image\_cache\_partition\_size}\StringTok{ B"} + + \KeywordTok{if [[} \StringTok{"}\VariableTok{$image\_size}\StringTok{"} \OtherTok{{-}gt} \StringTok{"}\VariableTok{$total\_disk\_size}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \ExtensionTok{fatal\_error} \StringTok{"Insufficient disk space for imaging. Image size: }\VariableTok{$image\_size}\StringTok{ B Disk size: }\VariableTok{$total\_disk\_size}\StringTok{ B"} + \KeywordTok{fi} + + \VariableTok{mounting\_point\_hidden=}\StringTok{"/mnt"} + \VariableTok{DEPLOY\_MODE\_ALREADY\_CACHED=}\StringTok{\textquotesingle{}cached\textquotesingle{}} + \VariableTok{DEPLOY\_MODE\_CACHED\_NOW=}\StringTok{\textquotesingle{}cached\_now\textquotesingle{}} + \VariableTok{DEPLOY\_MODE\_NOT\_CACHED=}\StringTok{\textquotesingle{}not\_cached\textquotesingle{}} + + \ExtensionTok{ensure\_image\_cache\_partition\_start} + \KeywordTok{if [[} \StringTok{"}\VariableTok{$image\_size}\StringTok{"} \OtherTok{{-}gt} \StringTok{"}\VariableTok{$image\_cache\_partition\_start}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \ExtensionTok{start\_step\_interactive} \StringTok{"hidden partition destruction confirmation"} + + \ExtensionTok{warning} \StringTok{"Image overlaps with local image cache."} \KeywordTok{\textbackslash{}} + \StringTok{"It can be deployed from network but the image cache will be destroyed."} \KeywordTok{\textbackslash{}} + \StringTok{"Continue?"} + + \BuiltInTok{echo} \StringTok{"Sufficient disk space for imaging, but image cache partition will be destroyed if it exists."} + \VariableTok{deploy\_mode=}\StringTok{"}\VariableTok{$DEPLOY\_MODE\_NOT\_CACHED}\StringTok{"} + \KeywordTok{else} + \BuiltInTok{echo} \StringTok{"Sufficient disk space for imaging with cache. Image cache partition will be restored or created."} + + \BuiltInTok{readonly} \VariableTok{hidden\_partition\_dev=}\StringTok{"/dev/loop0"} + + \BuiltInTok{readonly} \VariableTok{HIDDEN\_PARTITION\_STATUS\_UNKNOWN=}\StringTok{\textquotesingle{}unknown\textquotesingle{}} + \BuiltInTok{readonly} \VariableTok{HIDDEN\_PARTITION\_STATUS\_CREATED=}\StringTok{\textquotesingle{}created\textquotesingle{}} + \BuiltInTok{readonly} \VariableTok{HIDDEN\_PARTITION\_STATUS\_RESTORED=}\StringTok{\textquotesingle{}restored\textquotesingle{}} + \BuiltInTok{declare} \VariableTok{hidden\_partition\_status=}\StringTok{"}\VariableTok{$HIDDEN\_PARTITION\_STATUS\_UNKNOWN}\StringTok{"} + + \CommentTok{\# Mounts the hidden partition.} + \CommentTok{\# If there is a mount error and the partition was restored, the partition will be} + \CommentTok{\# recreated and there will be another tentative to mount it.} + \FunctionTok{mount\_hidden\_partition()} \KeywordTok{\{} + \ExtensionTok{start\_step\_batch} \StringTok{"image cache partition mount tentative"} + + \BuiltInTok{echo} \StringTok{"Creating loopback node for }\VariableTok{$deployment\_disk}\StringTok{ (offset=}\VariableTok{$image\_cache\_partition\_start}\StringTok{) on }\VariableTok{$hidden\_partition\_dev}\StringTok{"} + + \ExtensionTok{losetup}\NormalTok{ {-}o }\StringTok{"}\VariableTok{$image\_cache\_partition\_start}\StringTok{"} \StringTok{"}\VariableTok{$hidden\_partition\_dev}\StringTok{"} \StringTok{"}\VariableTok{$deployment\_disk}\StringTok{"} \KeywordTok{||} + \ExtensionTok{fatal\_error} \StringTok{"Failed to create loopback node for }\VariableTok{$deployment\_disk}\StringTok{ on }\VariableTok{$hidden\_partition\_dev}\StringTok{"} + \BuiltInTok{echo} \StringTok{"Created loopback node for }\VariableTok{$deployment\_disk}\StringTok{ on }\VariableTok{$hidden\_partition\_dev}\StringTok{"} + + \BuiltInTok{echo} \StringTok{"Mounting hidden partition from }\VariableTok{$hidden\_partition\_dev}\StringTok{ on }\VariableTok{$mounting\_point\_hidden}\StringTok{..."} + \KeywordTok{if}\NormalTok{ ! }\FunctionTok{mount}\NormalTok{ {-}t ext2 }\StringTok{"}\VariableTok{$hidden\_partition\_dev}\StringTok{"} \StringTok{"}\VariableTok{$mounting\_point\_hidden}\StringTok{"}\KeywordTok{;} \KeywordTok{then} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{error\_message=}\StringTok{"Cannot mount }\VariableTok{$hidden\_partition\_status}\StringTok{ hidden partition from }\VariableTok{$hidden\_partition\_dev}\StringTok{ on }\VariableTok{$mounting\_point\_hidden}\StringTok{"} + + \KeywordTok{if [[} \StringTok{"}\VariableTok{$hidden\_partition\_status}\StringTok{"} \OtherTok{!=} \StringTok{"}\VariableTok{$HIDDEN\_PARTITION\_STATUS\_CREATED}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \BuiltInTok{echo} \StringTok{"}\VariableTok{$error\_message}\StringTok{"} + + \ExtensionTok{losetup}\NormalTok{ {-}d }\StringTok{"}\VariableTok{$hidden\_partition\_dev}\StringTok{"} \KeywordTok{||} + \ExtensionTok{fatal\_error} \StringTok{"Cannot detach loopback device }\VariableTok{$hidden\_partition\_dev}\StringTok{"} + + \ExtensionTok{start\_step\_batch} \StringTok{"image cache partition creation"} + \ExtensionTok{create\_hidden\_partition} + \ExtensionTok{mount\_hidden\_partition} + \VariableTok{hidden\_partition\_status=}\StringTok{"}\VariableTok{$HIDDEN\_PARTITION\_STATUS\_CREATED}\StringTok{"} + \KeywordTok{else} + \ExtensionTok{fatal\_error} \StringTok{"}\VariableTok{$error\_message}\StringTok{"} + \KeywordTok{fi} + \KeywordTok{fi} + + \KeywordTok{if [[} \StringTok{"}\VariableTok{$hidden\_partition\_status}\StringTok{"} \OtherTok{!=} \StringTok{"}\VariableTok{$HIDDEN\_PARTITION\_STATUS\_CREATED}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \VariableTok{hidden\_partition\_status=}\StringTok{"}\VariableTok{$HIDDEN\_PARTITION\_STATUS\_RESTORED}\StringTok{"} + \KeywordTok{fi} + + \BuiltInTok{echo} \StringTok{"Hidden partition mounted on }\VariableTok{$mounting\_point\_hidden}\StringTok{"} + \KeywordTok{\}} + + \ExtensionTok{mount\_hidden\_partition} + + \FunctionTok{read\_raw\_image\_id\_file()} \KeywordTok{\{} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{image\_id\_file=}\StringTok{"}\VariableTok{$1}\StringTok{"} + \FunctionTok{head}\NormalTok{ {-}n 1 }\StringTok{"}\VariableTok{$image\_id\_file}\StringTok{"} \KeywordTok{|} \FunctionTok{cut}\NormalTok{ {-}d }\StringTok{" "}\NormalTok{ {-}f 1} + \KeywordTok{\}} + + \FunctionTok{read\_clonezilla\_image\_id\_file()} \KeywordTok{\{} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{image\_id\_file=}\StringTok{"}\VariableTok{$1}\StringTok{"} + \FunctionTok{awk}\NormalTok{ {-}F }\StringTok{\textquotesingle{}=\textquotesingle{}} \StringTok{\textquotesingle{}/IMG\_ID/ \{print $2\}\textquotesingle{}} \StringTok{"}\VariableTok{$image\_id\_file}\StringTok{"} + \KeywordTok{\}} + + \CommentTok{\# Check if the selected image exists in cache by comparing its id file to the one stored in cache.} + \CommentTok{\# Return value: 0 if the image is cached, 1 if it\textquotesingle{}s not} + \FunctionTok{is\_image\_cached()} \KeywordTok{\{} + \KeywordTok{if [[}\NormalTok{ hidden\_partition\_status }\OtherTok{==} \StringTok{"}\VariableTok{$HIDDEN\_PARTITION\_STATUS\_CREATED}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \BuiltInTok{return}\NormalTok{ 1} + \KeywordTok{fi} + + \KeywordTok{if [[} \StringTok{"}\VariableTok{$image\_type}\StringTok{"} \OtherTok{==} \StringTok{"}\VariableTok{$IMAGE\_TYPE\_RAW}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{remote\_image\_id\_file=}\StringTok{"}\VariableTok{$remote\_image\_dir}\StringTok{/}\VariableTok{$image\_name}\StringTok{.md5"} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{cached\_image\_id\_file=}\StringTok{"}\VariableTok{$mounting\_point\_hidden}\StringTok{/}\VariableTok{$image\_name}\StringTok{.md5"} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{read\_image\_id\_file=}\NormalTok{read\_raw\_image\_id\_file} + \KeywordTok{elif [[} \StringTok{"}\VariableTok{$image\_type}\StringTok{"} \OtherTok{==} \StringTok{"}\VariableTok{$IMAGE\_TYPE\_CLONEZILLA}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{remote\_image\_id\_file=}\StringTok{"}\VariableTok{$remote\_image\_dir}\StringTok{/Info{-}img{-}id.txt"} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{cached\_image\_id\_file=}\StringTok{"}\VariableTok{$mounting\_point\_hidden}\StringTok{/}\VariableTok{$image\_name}\StringTok{/Info{-}img{-}id.txt"} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{read\_image\_id\_file=}\NormalTok{read\_clonezilla\_image\_id\_file} + \KeywordTok{else} + \ExtensionTok{fatal\_error} \StringTok{"Unhandled image type: }\VariableTok{$image\_type}\StringTok{"} + \KeywordTok{fi} + + \KeywordTok{if [[} \OtherTok{{-}f} \StringTok{"}\VariableTok{$cached\_image\_id\_file}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{cached\_image\_id=$($read\_image\_id\_file} \StringTok{"}\VariableTok{$cached\_image\_id\_file}\StringTok{"}\VariableTok{)} + \KeywordTok{if [[} \OtherTok{{-}z} \StringTok{"}\VariableTok{$cached\_image\_id}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \BuiltInTok{return}\NormalTok{ 1} + \KeywordTok{fi} + + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{remote\_image\_id=$($read\_image\_id\_file} \StringTok{"}\VariableTok{$remote\_image\_id\_file}\StringTok{"}\VariableTok{)} + \KeywordTok{if [[} \StringTok{"}\VariableTok{$cached\_image\_id}\StringTok{"} \OtherTok{==} \StringTok{"}\VariableTok{$remote\_image\_id}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \BuiltInTok{return}\NormalTok{ 0} + \KeywordTok{fi} + \KeywordTok{fi} + \BuiltInTok{return}\NormalTok{ 1} + \KeywordTok{\}} + + \ExtensionTok{start\_step\_batch} \StringTok{"cached image search"} + \BuiltInTok{echo} \StringTok{"Checking if image is cached..."} + \KeywordTok{if} \ExtensionTok{is\_image\_cached}\KeywordTok{;} \KeywordTok{then} + \BuiltInTok{echo} \StringTok{"Image found in cache."} + \VariableTok{deploy\_mode=}\StringTok{"}\VariableTok{$DEPLOY\_MODE\_ALREADY\_CACHED}\StringTok{"} + \KeywordTok{else} + \BuiltInTok{echo} \StringTok{"Image not found in cache."} + + \ExtensionTok{start\_step\_batch} \StringTok{"image cache space availability check"} + + \VariableTok{cache\_available\_size\_bytes=$(}\FunctionTok{df}\NormalTok{ {-}{-}block{-}size=1 {-}{-}output=avail }\StringTok{"}\VariableTok{$mounting\_point\_hidden}\StringTok{"} \KeywordTok{|} \FunctionTok{tail}\NormalTok{ {-}n 1}\VariableTok{)} + + \KeywordTok{if [[} \OtherTok{{-}z} \StringTok{"}\VariableTok{$cache\_available\_size\_bytes}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \ExtensionTok{fatal\_error} \StringTok{"Cannot retrieve available size in cache."} + \KeywordTok{fi} + + \KeywordTok{((}\NormalTok{cache\_available\_size\_bytes = cache\_available\_size\_bytes {-} 4096}\KeywordTok{))} + + \BuiltInTok{echo} \StringTok{"Available size in cache: }\VariableTok{$cache\_available\_size\_bytes}\StringTok{ B"} + + \KeywordTok{if [[} \StringTok{"}\VariableTok{$image\_type}\StringTok{"} \OtherTok{==} \StringTok{"}\VariableTok{$IMAGE\_TYPE\_RAW}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \VariableTok{image\_size\_bytes=$(}\FunctionTok{stat}\NormalTok{ {-}c \%s }\StringTok{"}\VariableTok{$remote\_image\_gzip\_file}\StringTok{"}\VariableTok{)} + \KeywordTok{elif [[} \StringTok{"}\VariableTok{$image\_type}\StringTok{"} \OtherTok{==} \StringTok{"}\VariableTok{$IMAGE\_TYPE\_CLONEZILLA}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \VariableTok{image\_size\_bytes=$(}\FunctionTok{du}\NormalTok{ {-}b {-}c }\StringTok{"}\VariableTok{$remote\_image\_dir}\StringTok{"} \KeywordTok{|} \FunctionTok{tail}\NormalTok{ {-}n1 }\KeywordTok{|} \FunctionTok{cut}\NormalTok{ {-}f1}\VariableTok{)} + \KeywordTok{else} + \ExtensionTok{fatal\_error} \StringTok{"Unhandled image type: }\VariableTok{$image\_type}\StringTok{"} + \KeywordTok{fi} + + \BuiltInTok{echo} \StringTok{"Size of image to download: }\VariableTok{$image\_size\_bytes}\StringTok{ B"} + + \CommentTok{\# Check enough space available in hidden partition for caching} + \KeywordTok{if [[} \StringTok{"}\VariableTok{$image\_size\_bytes}\StringTok{"} \OtherTok{{-}lt} \StringTok{"}\VariableTok{$cache\_available\_size\_bytes}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \BuiltInTok{echo} \StringTok{"Enough space for caching. Image will be cached and deployed simultaneously."} + \VariableTok{deploy\_mode=}\StringTok{"}\VariableTok{$DEPLOY\_MODE\_CACHED\_NOW}\StringTok{"} + \KeywordTok{else} + \BuiltInTok{echo} \StringTok{"Not enough space for caching. Image will be deployed without caching."} + \VariableTok{deploy\_mode=}\StringTok{"}\VariableTok{$DEPLOY\_MODE\_NOT\_CACHED}\StringTok{"} + \KeywordTok{fi} + \KeywordTok{fi} + \KeywordTok{fi} + + \FunctionTok{deploy\_image\_with\_clonezilla()} \KeywordTok{\{} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{clonezilla\_images\_dir=}\StringTok{"}\VariableTok{$1}\StringTok{"} + \BuiltInTok{echo} \StringTok{"Starting deployment of image }\VariableTok{$image\_name}\StringTok{ from }\VariableTok{$clonezilla\_images\_dir}\StringTok{ with clonezilla..."} + \CommentTok{\# yes \textquotesingle{}\textquotesingle{} 2\textgreater{}/dev/null |} + \ExtensionTok{ocs{-}sr} \KeywordTok{\textbackslash{}} + \ExtensionTok{{-}{-}ignore{-}update{-}efi{-}nvram} \KeywordTok{\textbackslash{}} + \ExtensionTok{{-}{-}ocsroot} \StringTok{"}\VariableTok{$clonezilla\_images\_dir}\StringTok{"} \KeywordTok{\textbackslash{}} + \ExtensionTok{{-}{-}skip{-}check{-}restorable{-}r} \KeywordTok{\textbackslash{}} + \ExtensionTok{{-}{-}nogui} \KeywordTok{\textbackslash{}} + \ExtensionTok{{-}{-}batch} \KeywordTok{\textbackslash{}} + \ExtensionTok{restoredisk} \StringTok{"}\VariableTok{$image\_name}\StringTok{"}\NormalTok{ sda} + + \BuiltInTok{echo} \StringTok{"Checking for error during clonezilla deployment..."} + + \KeywordTok{if} \FunctionTok{grep} \StringTok{"Failed to restore partition image file"}\NormalTok{ /var/log/clonezilla.log}\KeywordTok{;} \KeywordTok{then} + \ExtensionTok{fatal\_error} \StringTok{"Error while deploying image with clonezilla."} + \KeywordTok{fi} + + \BuiltInTok{echo} \StringTok{"Image deployed with clonezilla."} + \KeywordTok{\}} + + \FunctionTok{print\_progress()} \KeywordTok{\{} + \ExtensionTok{pv}\NormalTok{ {-}ptebar {-}{-}size }\StringTok{"}\VariableTok{$image\_size}\StringTok{"} \OperatorTok{2\textgreater{}}\StringTok{"}\VariableTok{$tty}\StringTok{"} + \KeywordTok{\}} + + \ExtensionTok{start\_step\_batch} \StringTok{"image deployment"} + \KeywordTok{if [[} \StringTok{"}\VariableTok{$deploy\_mode}\StringTok{"} \OtherTok{==} \StringTok{"}\VariableTok{$DEPLOY\_MODE\_CACHED\_NOW}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \BuiltInTok{echo} \StringTok{"Saving image to cache and deploying it..."} + \KeywordTok{if [[} \StringTok{"}\VariableTok{$image\_type}\StringTok{"} \OtherTok{==} \StringTok{"}\VariableTok{$IMAGE\_TYPE\_RAW}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \FunctionTok{cp} \StringTok{"}\VariableTok{$remote\_image\_md5\_file}\StringTok{"} \StringTok{"}\VariableTok{$mounting\_point\_hidden}\StringTok{/"} \KeywordTok{||} + \ExtensionTok{fatal\_error} \StringTok{"Cannot copy hash of image to }\VariableTok{$mounting\_point\_hidden}\StringTok{"} + + \FunctionTok{tee} \StringTok{"}\VariableTok{$mounting\_point\_hidden}\StringTok{/}\VariableTok{$image\_name}\StringTok{.img.gz"} \OperatorTok{\textless{}} \StringTok{"}\VariableTok{$remote\_image\_gzip\_file}\StringTok{"} \KeywordTok{|} + \FunctionTok{gunzip}\NormalTok{ {-}c }\KeywordTok{|} + \ExtensionTok{print\_progress} \KeywordTok{|} + \FunctionTok{dd}\NormalTok{ bs=128k of=}\StringTok{"}\VariableTok{$deployment\_disk}\StringTok{"} \KeywordTok{||} + \ExtensionTok{fatal\_error} \StringTok{"Cannot copy image to cache and disk."} + \KeywordTok{elif [[} \StringTok{"}\VariableTok{$image\_type}\StringTok{"} \OtherTok{==} \StringTok{"}\VariableTok{$IMAGE\_TYPE\_CLONEZILLA}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \BuiltInTok{echo} \StringTok{"Starting copy of clonezilla image to cache..."} + \FunctionTok{rm}\NormalTok{ {-}rf }\StringTok{"}\VariableTok{$\{mounting\_point\_hidden:?\}}\StringTok{/}\VariableTok{$image\_name}\StringTok{"} + \FunctionTok{cp}\NormalTok{ {-}r }\StringTok{"}\VariableTok{$remote\_image\_dir}\StringTok{"} \StringTok{"}\VariableTok{$\{mounting\_point\_hidden:?\}}\StringTok{/"} \KeywordTok{||} + \ExtensionTok{fatal\_error} \StringTok{"Error while copying remote image to cache."} + \BuiltInTok{echo} \StringTok{"Clonezilla image copied to cache."} + \BuiltInTok{echo} \StringTok{"Content of cache:"} + \FunctionTok{ls}\NormalTok{ {-}als }\StringTok{"}\VariableTok{$mounting\_point\_hidden}\StringTok{"} + + \ExtensionTok{deploy\_image\_with\_clonezilla} \StringTok{"}\VariableTok{$mounting\_point\_hidden}\StringTok{"} + \KeywordTok{else} + \ExtensionTok{fatal\_error} \StringTok{"Unhandled image type: }\VariableTok{$image\_type}\StringTok{"} + \KeywordTok{fi} + + \BuiltInTok{echo} \StringTok{"Image deployed and cached."} + \KeywordTok{elif [[} \StringTok{"}\VariableTok{$deploy\_mode}\StringTok{"} \OtherTok{==} \StringTok{"}\VariableTok{$DEPLOY\_MODE\_ALREADY\_CACHED}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \BuiltInTok{echo} \StringTok{"Deploying image from cache..."} + + \KeywordTok{if [[} \StringTok{"}\VariableTok{$image\_type}\StringTok{"} \OtherTok{==} \StringTok{"}\VariableTok{$IMAGE\_TYPE\_RAW}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \FunctionTok{gunzip}\NormalTok{ {-}c }\StringTok{"}\VariableTok{$mounting\_point\_hidden}\StringTok{/}\VariableTok{$image\_name}\StringTok{.img.gz"} \KeywordTok{|} + \ExtensionTok{print\_progress} \KeywordTok{|} + \FunctionTok{dd}\NormalTok{ bs=1M of=}\StringTok{"}\VariableTok{$deployment\_disk}\StringTok{"} \KeywordTok{||} + \ExtensionTok{fatal\_error} \StringTok{"Cannot copy image from cache to disk."} + \KeywordTok{elif [[} \StringTok{"}\VariableTok{$image\_type}\StringTok{"} \OtherTok{==} \StringTok{"}\VariableTok{$IMAGE\_TYPE\_CLONEZILLA}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \ExtensionTok{deploy\_image\_with\_clonezilla} \StringTok{"}\VariableTok{$mounting\_point\_hidden}\StringTok{"} + \KeywordTok{else} + \ExtensionTok{fatal\_error} \StringTok{"Unhandled image type: }\VariableTok{$image\_type}\StringTok{"} + \KeywordTok{fi} + + \BuiltInTok{echo} \StringTok{"Image deployed from cache."} + \KeywordTok{elif [[} \StringTok{"}\VariableTok{$deploy\_mode}\StringTok{"} \OtherTok{==} \StringTok{"}\VariableTok{$DEPLOY\_MODE\_NOT\_CACHED}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \BuiltInTok{echo} \StringTok{"Deploying image without caching..."} + + \KeywordTok{if [[} \StringTok{"}\VariableTok{$image\_type}\StringTok{"} \OtherTok{==} \StringTok{"}\VariableTok{$IMAGE\_TYPE\_RAW}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \FunctionTok{gunzip}\NormalTok{ {-}c }\StringTok{"}\VariableTok{$remote\_image\_gzip\_file}\StringTok{"} \KeywordTok{|} + \ExtensionTok{print\_progress} \KeywordTok{|} + \FunctionTok{dd}\NormalTok{ of=}\StringTok{"}\VariableTok{$deployment\_disk}\StringTok{"}\NormalTok{ bs=128k }\KeywordTok{||} + \ExtensionTok{fatal\_error} \StringTok{"Cannot copy image without caching."} + \KeywordTok{elif [[} \StringTok{"}\VariableTok{$image\_type}\StringTok{"} \OtherTok{==} \StringTok{"}\VariableTok{$IMAGE\_TYPE\_CLONEZILLA}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \ExtensionTok{deploy\_image\_with\_clonezilla} \StringTok{"}\VariableTok{$remote\_images\_dir}\StringTok{"} + \KeywordTok{else} + \ExtensionTok{fatal\_error} \StringTok{"Unhandled image type: }\VariableTok{$image\_type}\StringTok{"} + \KeywordTok{fi} + + \BuiltInTok{echo} \StringTok{"Image deployed without caching."} + \KeywordTok{else} + \ExtensionTok{fatal\_error} \StringTok{"Unhandled deploy mode: }\VariableTok{$deploy\_mode}\StringTok{"} + \KeywordTok{fi} + + \BuiltInTok{echo} \StringTok{"Deployment of image }\VariableTok{$image\_name}\StringTok{ (}\VariableTok{$image\_size}\StringTok{ B) done."} + + \KeywordTok{if} \ExtensionTok{findmnt}\NormalTok{ {-}{-}mountpoint }\StringTok{"}\VariableTok{$mounting\_point\_hidden}\StringTok{"}\KeywordTok{;} \KeywordTok{then} + \ExtensionTok{start\_step\_batch} \StringTok{"image cache partition unmount"} + \BuiltInTok{echo} \StringTok{"Unmounting hidden partition from }\VariableTok{$mounting\_point\_hidden}\StringTok{"} + \FunctionTok{umount} \StringTok{"}\VariableTok{$mounting\_point\_hidden}\StringTok{"} \KeywordTok{||} + \ExtensionTok{fatal\_error} \StringTok{"Cannot unmount hidden partition from }\VariableTok{$mounting\_point\_hidden}\StringTok{"} + \BuiltInTok{echo} \StringTok{"Unmounted hidden partition from }\VariableTok{$mounting\_point\_hidden}\StringTok{"} + + \ExtensionTok{start\_step\_batch} \StringTok{"image cache partition check"} + \ExtensionTok{fsck}\NormalTok{ {-}y }\StringTok{"}\VariableTok{$hidden\_partition\_dev}\StringTok{"} + \KeywordTok{fi} + + \ExtensionTok{start\_step\_batch} \StringTok{"EFI entrypoint file creation"} + + \BuiltInTok{readonly} \VariableTok{remote\_image\_efi\_entrypoint\_file=}\StringTok{"}\VariableTok{$remote\_image\_dir}\StringTok{/efi\_entrypoint"} + \BuiltInTok{readonly} \VariableTok{remote\_image\_efi\_nvram\_file=}\StringTok{"}\VariableTok{$remote\_image\_dir}\StringTok{/efi{-}nvram.dat"} + \BuiltInTok{readonly} \VariableTok{mounting\_point\_esp=}\StringTok{"/bootiful/esp"} + \BuiltInTok{readonly} \VariableTok{esp\_partition=}\StringTok{"}\VariableTok{$\{deployment\_disk\}}\StringTok{1"} + + \FunctionTok{mount\_esp()} \KeywordTok{\{} + \BuiltInTok{echo} \StringTok{"Mounting ESP partition..."} + \ExtensionTok{ensure\_directory} \StringTok{"}\VariableTok{$mounting\_point\_esp}\StringTok{"} + \ExtensionTok{refresh\_partition\_table} + \FunctionTok{mount} \StringTok{"}\VariableTok{$esp\_partition}\StringTok{"} \StringTok{"}\VariableTok{$mounting\_point\_esp}\StringTok{"} \KeywordTok{||} + \ExtensionTok{fatal\_error} \StringTok{"Cannot mount }\VariableTok{$esp\_partition}\StringTok{ on }\VariableTok{$mounting\_point\_esp}\StringTok{"} + \BuiltInTok{echo} \StringTok{"ESP partition mounted."} + \KeywordTok{\}} + + \FunctionTok{write\_efi\_entrypoint\_file()} \KeywordTok{\{} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{efi\_entrypoint\_file\_content=}\StringTok{"}\VariableTok{$1}\StringTok{"} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{target\_efi\_entrypoint\_file=}\StringTok{"}\VariableTok{$mounting\_point\_esp}\StringTok{/efi\_entrypoint"} + + \BuiltInTok{echo} \StringTok{"Writing efi entrypoint file \textquotesingle{}}\VariableTok{$target\_efi\_entrypoint\_file}\StringTok{\textquotesingle{}"} + + \BuiltInTok{echo} \StringTok{"}\VariableTok{$efi\_entrypoint\_file\_content}\StringTok{"} \OperatorTok{\textgreater{}} \StringTok{"}\VariableTok{$target\_efi\_entrypoint\_file}\StringTok{"} \KeywordTok{||} + \ExtensionTok{fatal\_error} \StringTok{"Cannot write EFI entrypoint file \textquotesingle{}}\VariableTok{$target\_efi\_entrypoint\_file}\StringTok{\textquotesingle{}."} + + \BuiltInTok{echo} \StringTok{"EFI entrypoint file \textquotesingle{}}\VariableTok{$target\_efi\_entrypoint\_file}\StringTok{\textquotesingle{} written."} + + \FunctionTok{umount} \StringTok{"}\VariableTok{$mounting\_point\_esp}\StringTok{"} + \KeywordTok{\}} + + \KeywordTok{if [[} \OtherTok{{-}e} \StringTok{"}\VariableTok{$remote\_image\_efi\_entrypoint\_file}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \BuiltInTok{echo} \StringTok{"EFI entrypoint file detected. Copying it to ESP root..."} + \ExtensionTok{mount\_esp} + \ExtensionTok{write\_efi\_entrypoint\_file} \StringTok{"}\VariableTok{$(}\FunctionTok{cat} \StringTok{"}\VariableTok{$remote\_image\_efi\_entrypoint\_file}\StringTok{"}\VariableTok{)}\StringTok{"} + \KeywordTok{elif [[} \OtherTok{{-}e} \StringTok{"}\VariableTok{$remote\_image\_efi\_nvram\_file}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \BuiltInTok{echo} \StringTok{"Trying to find boot entry from efi nvram file }\VariableTok{$remote\_image\_efi\_nvram\_file}\StringTok{..."} + + \VariableTok{boot\_order\_entries=}\StringTok{"}\VariableTok{$(}\FunctionTok{sed}\NormalTok{ {-}nr }\StringTok{\textquotesingle{}s/\^{}BootOrder: ([0{-}9]+(,[0{-}9]+)*)$/\textbackslash{}1/p\textquotesingle{}} \StringTok{"}\VariableTok{$remote\_image\_efi\_nvram\_file}\StringTok{"} \KeywordTok{|} + \FunctionTok{head}\NormalTok{ {-}n 1 }\KeywordTok{|} + \FunctionTok{tr} \StringTok{\textquotesingle{},\textquotesingle{}} \StringTok{\textquotesingle{} \textquotesingle{}}\VariableTok{)}\StringTok{"} + + \KeywordTok{if [[} \OtherTok{{-}n} \StringTok{"}\VariableTok{$boot\_order\_entries}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \BuiltInTok{echo} \StringTok{"Boot order entries found: }\VariableTok{$boot\_order\_entries}\StringTok{"} + \VariableTok{written\_boot\_order\_entry=}\StringTok{""} + \KeywordTok{for} \ExtensionTok{boot\_order\_entry}\NormalTok{ in }\VariableTok{$boot\_order\_entries}\KeywordTok{;} \KeywordTok{do} + \BuiltInTok{echo} \StringTok{"Trying to find boot file path for boot order entry }\VariableTok{$boot\_order\_entry}\StringTok{..."} + \VariableTok{boot\_file\_path=}\StringTok{"}\VariableTok{$(}\FunctionTok{sed}\NormalTok{ {-}nr }\StringTok{"s|\^{}Boot}\VariableTok{$boot\_order\_entry}\StringTok{.*\textbackslash{}tHD\textbackslash{}(1.*\textbackslash{})/File\textbackslash{}((.*)\textbackslash{}).*$|\textbackslash{}1|p"} \StringTok{"}\VariableTok{$remote\_image\_efi\_nvram\_file}\StringTok{"}\VariableTok{)}\StringTok{"} + + \KeywordTok{if [[} \OtherTok{{-}z} \StringTok{"}\VariableTok{$boot\_file\_path}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \BuiltInTok{echo} \StringTok{"Boot file path not found for boot entry }\VariableTok{$boot\_order\_entry}\StringTok{"} + \BuiltInTok{continue} + \KeywordTok{fi} + + \BuiltInTok{echo} \StringTok{"Boot file path found for boot entry }\VariableTok{$boot\_order\_entry}\StringTok{: }\VariableTok{$boot\_file\_path}\StringTok{"} + + \ExtensionTok{mount\_esp} + + \KeywordTok{if [[} \StringTok{"}\VariableTok{$boot\_file\_path}\StringTok{"}\NormalTok{ =\textasciitilde{} \^{}}\DataTypeTok{\textbackslash{}\textbackslash{}}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \BuiltInTok{echo} \StringTok{"Boot file path looks like a windows{-}like path. Converting it to a unix{-}like path..."} + \VariableTok{unix\_boot\_file\_path=}\StringTok{"}\VariableTok{$(}\BuiltInTok{echo} \StringTok{"}\VariableTok{$boot\_file\_path}\StringTok{"} \KeywordTok{|} \FunctionTok{tr} \DataTypeTok{\textbackslash{}\textbackslash{}\textbackslash{}\textbackslash{}}\NormalTok{ /}\VariableTok{)}\StringTok{"} + \BuiltInTok{echo} \StringTok{"Windows{-}like path \textquotesingle{}}\VariableTok{$boot\_file\_path}\StringTok{\textquotesingle{} converted to unix{-}like path \textquotesingle{}}\VariableTok{$unix\_boot\_file\_path}\StringTok{\textquotesingle{}"} + + \BuiltInTok{echo} \StringTok{"Trying to find the case sensitive path for \textquotesingle{}}\VariableTok{$unix\_boot\_file\_path}\StringTok{\textquotesingle{} in EFI..."} + \VariableTok{boot\_file\_path=}\StringTok{"}\VariableTok{$(} + \FunctionTok{find} \StringTok{"}\VariableTok{$mounting\_point\_esp}\StringTok{"} \KeywordTok{\textbackslash{}} + \ExtensionTok{{-}type}\NormalTok{ f }\KeywordTok{\textbackslash{}} + \ExtensionTok{{-}ipath} \StringTok{"}\VariableTok{$mounting\_point\_esp$unix\_boot\_file\_path}\StringTok{"} \KeywordTok{\textbackslash{}} + \ExtensionTok{{-}printf} \StringTok{\textquotesingle{}/\%P\textbackslash{}n\textquotesingle{}} \KeywordTok{|} + \FunctionTok{head}\NormalTok{ {-}n 1} + \VariableTok{)}\StringTok{"} + + \KeywordTok{if [[} \OtherTok{{-}z} \StringTok{"}\VariableTok{$boot\_file\_path}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \ExtensionTok{fatal\_error} \StringTok{"Cannot find a case insensitive match for efi boot file \textquotesingle{}}\VariableTok{$unix\_boot\_file\_path}\StringTok{\textquotesingle{}"} + \KeywordTok{fi} + + \BuiltInTok{echo} \StringTok{"Case insensitive EFI boot file path found: \textquotesingle{}}\VariableTok{$boot\_file\_path}\StringTok{\textquotesingle{}."} + \KeywordTok{fi} + + \ExtensionTok{write\_efi\_entrypoint\_file} \StringTok{"set efi\_entrypoint=}\VariableTok{$boot\_file\_path}\StringTok{"} + \VariableTok{written\_boot\_order\_entry=}\StringTok{"}\VariableTok{$boot\_order\_entry}\StringTok{"} + \BuiltInTok{break} + \KeywordTok{done} + + \KeywordTok{if [[} \OtherTok{{-}z} \StringTok{"}\VariableTok{$written\_boot\_order\_entry}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \ExtensionTok{fatal\_error} \StringTok{"No bootfile found in \textquotesingle{}}\VariableTok{$remote\_image\_efi\_nvram\_file}\StringTok{\textquotesingle{}."} + \KeywordTok{fi} + \KeywordTok{else} + \ExtensionTok{fatal\_error} \StringTok{"Boot order entries not found in \textquotesingle{}}\VariableTok{$remote\_image\_efi\_nvram\_file}\StringTok{\textquotesingle{}."} + \KeywordTok{fi} + \KeywordTok{else} + \BuiltInTok{echo} \StringTok{"No EFI entrypoint file or EFI nvram file found."} + \KeywordTok{fi} + + \ExtensionTok{start\_step\_batch} \StringTok{"signature creation"} + + \KeywordTok{((}\NormalTok{signature\_offset = total\_disk\_size {-} 200}\KeywordTok{))} + \VariableTok{signature=}\StringTok{"hepia2015"} + + \BuiltInTok{echo} \StringTok{"Writing signature \textquotesingle{}}\VariableTok{$signature}\StringTok{\textquotesingle{} on offset }\VariableTok{$signature\_offset}\StringTok{ B..."} + \BuiltInTok{echo}\NormalTok{ {-}ne }\StringTok{"}\VariableTok{$signature}\StringTok{"} \KeywordTok{|} \FunctionTok{dd}\NormalTok{ of=}\StringTok{"}\VariableTok{$deployment\_disk}\StringTok{"}\NormalTok{ seek=}\StringTok{"}\VariableTok{$signature\_offset}\StringTok{"}\NormalTok{ bs=1 iflag=skip\_bytes }\KeywordTok{||} + \ExtensionTok{fatal\_error} \StringTok{"Cannot write signature at the end of the disk"} + \BuiltInTok{echo} \StringTok{"Signature written."} + + \BuiltInTok{echo} \StringTok{"Image deployment process successful."} + + \ExtensionTok{print\_step\_durations} + +\KeywordTok{\}} \OperatorTok{2\textgreater{}\&1} \KeywordTok{|} \FunctionTok{tee} \StringTok{"}\VariableTok{$log\_file}\StringTok{"} + +\BuiltInTok{exit} \StringTok{"}\VariableTok{$\{PIPESTATUS[0]\}}\StringTok{"} +\end{Highlighting} +\end{Shaded} + +\hypertarget{deployerbootiful-save-image-script-utilitaire-de-cruxe9ation-dimage-raw}{% +\section{\texorpdfstring{\texttt{deployer/bootiful-save-image}: script +utilitaire de création d'image +raw}{deployer/bootiful-save-image: script utilitaire de création d'image raw}}\label{deployerbootiful-save-image-script-utilitaire-de-cruxe9ation-dimage-raw}} + +\begin{Shaded} +\begin{Highlighting}[] +\CommentTok{\#!/bin/bash} +\BuiltInTok{readonly} \VariableTok{SCRIPT\_NAME=}\StringTok{"}\VariableTok{$(}\FunctionTok{basename} \StringTok{"}\VariableTok{$0}\StringTok{"}\VariableTok{)}\StringTok{"} +\BuiltInTok{readonly} \VariableTok{SCRIPT\_DIR=}\StringTok{"}\VariableTok{$(}\FunctionTok{readlink}\NormalTok{ {-}m }\StringTok{"}\VariableTok{$(}\FunctionTok{dirname} \StringTok{"}\VariableTok{$0}\StringTok{"}\VariableTok{)}\StringTok{"}\VariableTok{)}\StringTok{"} + +\FunctionTok{usage()} \KeywordTok{\{} + \FunctionTok{cat} \OperatorTok{\textless{}\textless{} EOF} +\NormalTok{Usage:} + \VariableTok{$SCRIPT\_DIR}\NormalTok{ IMAGE\_NAME} + \VariableTok{$SCRIPT\_DIR}\NormalTok{ [{-}h | {-}{-}help]} + +\NormalTok{Description:} +\NormalTok{ Saves a raw dd image of the /dev/sda device to the remote server shared images} +\NormalTok{ folder.} + +\NormalTok{Parameters:} +\NormalTok{ IMAGE\_NAME Name of the image to create} + +\NormalTok{Options:} +\NormalTok{ {-}h {-}{-}help Shows this help} + +\NormalTok{Example:} +\NormalTok{ ./}\VariableTok{$SCRIPT\_NAME}\NormalTok{ debian{-}buster{-}x86\_64{-}efi} +\OperatorTok{EOF} +\KeywordTok{\}} + +\KeywordTok{if [[} \StringTok{"}\VariableTok{$1}\StringTok{"} \OtherTok{==} \StringTok{"{-}h"}\NormalTok{ || }\StringTok{"}\VariableTok{$1}\StringTok{"} \OtherTok{==} \StringTok{"{-}{-}help"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \ExtensionTok{usage} + \BuiltInTok{exit}\NormalTok{ 0} +\KeywordTok{fi} + +\BuiltInTok{readonly} \VariableTok{image\_name=}\StringTok{"}\VariableTok{$1}\StringTok{"} +\KeywordTok{if [[} \OtherTok{{-}z} \StringTok{"}\VariableTok{$image\_name}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \ExtensionTok{usage} + \BuiltInTok{exit}\NormalTok{ 1} +\KeywordTok{fi} + +\CommentTok{\# Loads declarations from the \textquotesingle{}bootiful{-}common\textquotesingle{} script, which is a "library"} +\CommentTok{\# of functions and constants shared by multiple bootiful{-}* scripts.} +\BuiltInTok{readonly} \VariableTok{bootiful\_common\_script\_file=}\StringTok{"}\VariableTok{$SCRIPT\_DIR}\StringTok{/bootiful{-}common"} +\KeywordTok{if [[} \OtherTok{!} \OtherTok{{-}f} \StringTok{"}\VariableTok{$bootiful\_common\_script\_file}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \OperatorTok{\textgreater{}\&2} \BuiltInTok{echo} \StringTok{"Fatal error: cannot find required script file \textquotesingle{}}\VariableTok{$bootiful\_common\_script\_file}\StringTok{\textquotesingle{}."} + \BuiltInTok{exit}\NormalTok{ 1} +\KeywordTok{fi} +\CommentTok{\# shellcheck source=./bootiful{-}common} +\BuiltInTok{.} \StringTok{"}\VariableTok{$bootiful\_common\_script\_file}\StringTok{"} + +\ExtensionTok{ensure\_remote\_shared\_mounted} + +\BuiltInTok{echo} \StringTok{"Finding size of the image to create..."} +\BuiltInTok{readonly} \VariableTok{parted\_unit=}\StringTok{"B"} + +\BuiltInTok{declare} \VariableTok{parted\_output} +\VariableTok{parted\_output=$(}\ExtensionTok{parted}\NormalTok{ {-}{-}script }\StringTok{"}\VariableTok{$deployment\_disk}\StringTok{"}\NormalTok{ unit }\StringTok{"}\VariableTok{$parted\_unit}\StringTok{"}\NormalTok{ print}\VariableTok{)} \KeywordTok{||} + \ExtensionTok{fatal\_error} \StringTok{"failed to save parted output"} +\BuiltInTok{readonly} \VariableTok{parted\_output} + +\BuiltInTok{declare} \VariableTok{image\_size} +\VariableTok{image\_size=$(}\ExtensionTok{parse\_parted\_last\_partition\_end} \StringTok{"}\VariableTok{$parted\_output}\StringTok{"} \StringTok{"}\VariableTok{$parted\_unit}\StringTok{"}\VariableTok{)} +\BuiltInTok{readonly} \VariableTok{image\_size} + +\BuiltInTok{echo} \StringTok{"Image size: }\VariableTok{$image\_size}\StringTok{"} + +\BuiltInTok{readonly} \VariableTok{image\_folder=}\StringTok{"}\VariableTok{$mounting\_point\_hidden}\StringTok{/images/}\VariableTok{$image\_name}\StringTok{"} + +\KeywordTok{if [[} \OtherTok{{-}d} \StringTok{"}\VariableTok{$image\_folder}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \BuiltInTok{echo} \StringTok{"Image folder \textquotesingle{}}\VariableTok{$image\_folder}\StringTok{\textquotesingle{} already exists."} + \BuiltInTok{exit}\NormalTok{ 1} +\KeywordTok{fi} + +\KeywordTok{if}\NormalTok{ ! }\FunctionTok{mkdir} \StringTok{"}\VariableTok{$image\_folder}\StringTok{"}\KeywordTok{;} \KeywordTok{then} + \BuiltInTok{echo} \StringTok{"Cannot create image folder \textquotesingle{}}\VariableTok{$image\_folder}\StringTok{\textquotesingle{}"} + \BuiltInTok{exit}\NormalTok{ 1} +\KeywordTok{fi} + +\BuiltInTok{readonly} \VariableTok{image\_file=}\StringTok{"}\VariableTok{$image\_folder}\StringTok{/}\VariableTok{$image\_name}\StringTok{.img.gz"} +\KeywordTok{if}\NormalTok{ ! }\ExtensionTok{pv}\NormalTok{ {-}{-}size }\StringTok{"}\VariableTok{$image\_size}\StringTok{"}\NormalTok{ {-}{-}stop{-}at{-}size /dev/sda }\KeywordTok{|} + \ExtensionTok{pigz}\NormalTok{ {-}c }\OperatorTok{\textgreater{}} \StringTok{"}\VariableTok{$image\_file}\StringTok{"} +\KeywordTok{then} + \BuiltInTok{echo} \StringTok{"Cannot create image file \textquotesingle{}}\VariableTok{$image\_file}\StringTok{\textquotesingle{}"} + \BuiltInTok{exit}\NormalTok{ 1} +\KeywordTok{fi} + +\CommentTok{\# }\AlertTok{TODO}\CommentTok{: Rename md5 files to uuid because creating md5 hashes takes too much time} +\BuiltInTok{readonly} \VariableTok{md5\_file=}\StringTok{"}\VariableTok{$image\_folder}\StringTok{/}\VariableTok{$image\_name}\StringTok{.md5"} +\KeywordTok{if}\NormalTok{ ! }\FunctionTok{cat}\NormalTok{ /proc/sys/kernel/random/uuid }\OperatorTok{\textgreater{}} \StringTok{"}\VariableTok{$md5\_file}\StringTok{"}\KeywordTok{;} \KeywordTok{then} + \BuiltInTok{echo} \StringTok{"Cannot create md5 file \textquotesingle{}}\VariableTok{$md5\_file}\StringTok{\textquotesingle{}"} + \BuiltInTok{exit}\NormalTok{ 1} +\KeywordTok{fi} + +\BuiltInTok{readonly} \VariableTok{partition\_file=}\StringTok{"}\VariableTok{$image\_folder}\StringTok{/}\VariableTok{$image\_name}\StringTok{.partition"} +\KeywordTok{if}\NormalTok{ ! }\ExtensionTok{fdisk}\NormalTok{ {-}l /dev/sda }\OperatorTok{\textgreater{}} \StringTok{"}\VariableTok{$partition\_file}\StringTok{"}\KeywordTok{;} \KeywordTok{then} + \BuiltInTok{echo} \StringTok{"Cannot create partition file }\VariableTok{$partition\_file}\StringTok{"} + \BuiltInTok{exit}\NormalTok{ 1} +\KeywordTok{fi} + +\BuiltInTok{readonly} \VariableTok{size\_file=}\StringTok{"}\VariableTok{$image\_folder}\StringTok{/}\VariableTok{$image\_name}\StringTok{.size"} +\KeywordTok{if}\NormalTok{ ! }\FunctionTok{du} \StringTok{"}\VariableTok{$image\_file}\StringTok{"} \OperatorTok{\textgreater{}} \StringTok{"}\VariableTok{$size\_file}\StringTok{"}\KeywordTok{;} \KeywordTok{then} + \BuiltInTok{echo} \StringTok{"Cannot create size file }\VariableTok{$size\_file}\StringTok{"} + \BuiltInTok{exit}\NormalTok{ 1} +\KeywordTok{fi} + +\BuiltInTok{echo} \StringTok{"Image creation successful."} +\BuiltInTok{exit}\NormalTok{ 0} + +\end{Highlighting} +\end{Shaded} + +\hypertarget{deployerbootiful-reset-cache-script-utilitaire-de-ruxe9initialisation-du-cache}{% +\section{\texorpdfstring{\texttt{deployer/bootiful-reset-cache}: script +utilitaire de réinitialisation du +cache}{deployer/bootiful-reset-cache: script utilitaire de réinitialisation du cache}}\label{deployerbootiful-reset-cache-script-utilitaire-de-ruxe9initialisation-du-cache}} + +\begin{Shaded} +\begin{Highlighting}[] +\CommentTok{\#!/bin/bash} + +\BuiltInTok{readonly} \VariableTok{SCRIPT\_NAME=}\StringTok{"}\VariableTok{$(}\FunctionTok{basename} \StringTok{"}\VariableTok{$0}\StringTok{"}\VariableTok{)}\StringTok{"} +\BuiltInTok{readonly} \VariableTok{SCRIPT\_DIR=}\StringTok{"}\VariableTok{$(}\FunctionTok{readlink}\NormalTok{ {-}m }\StringTok{"}\VariableTok{$(}\FunctionTok{dirname} \StringTok{"}\VariableTok{$0}\StringTok{"}\VariableTok{)}\StringTok{"}\VariableTok{)}\StringTok{"} + +\FunctionTok{usage()} \KeywordTok{\{} + \FunctionTok{cat} \OperatorTok{\textless{}\textless{} EOF} +\NormalTok{Usage:} + \VariableTok{$SCRIPT\_DIR}\NormalTok{ [{-}h | {-}{-}help]} + +\NormalTok{Description:} +\NormalTok{ Clears the bootiful image cache by re{-}creating the hidden partition} + +\NormalTok{Options:} +\NormalTok{ {-}h {-}{-}help Shows this help} + +\NormalTok{Example:} +\NormalTok{ ./}\VariableTok{$SCRIPT\_NAME} +\OperatorTok{EOF} +\KeywordTok{\}} + +\KeywordTok{if [[} \StringTok{"}\VariableTok{$1}\StringTok{"} \OtherTok{==} \StringTok{"{-}h"}\NormalTok{ || }\StringTok{"}\VariableTok{$1}\StringTok{"} \OtherTok{==} \StringTok{"{-}{-}help"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \ExtensionTok{usage} + \BuiltInTok{exit}\NormalTok{ 0} +\KeywordTok{fi} + +\CommentTok{\# Loads declarations from the \textquotesingle{}bootiful{-}common\textquotesingle{} script, which is a "library"} +\CommentTok{\# of functions and constants shared by multiple bootiful{-}* scripts.} +\BuiltInTok{readonly} \VariableTok{bootiful\_common\_script\_file=}\StringTok{"}\VariableTok{$SCRIPT\_DIR}\StringTok{/bootiful{-}common"} +\KeywordTok{if [[} \OtherTok{!} \OtherTok{{-}f} \StringTok{"}\VariableTok{$bootiful\_common\_script\_file}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \OperatorTok{\textgreater{}\&2} \BuiltInTok{echo} \StringTok{"Fatal error: cannot find required script file \textquotesingle{}}\VariableTok{$bootiful\_common\_script\_file}\StringTok{\textquotesingle{}."} + \BuiltInTok{exit}\NormalTok{ 1} +\KeywordTok{fi} +\CommentTok{\# shellcheck source=./bootiful{-}common} +\BuiltInTok{.} \StringTok{"}\VariableTok{$bootiful\_common\_script\_file}\StringTok{"} + +\ExtensionTok{validate\_exists} \StringTok{"}\VariableTok{$deployment\_disk}\StringTok{"} +\ExtensionTok{create\_hidden\_partition} +\end{Highlighting} +\end{Shaded} + +\hypertarget{dhcpdockerfile-configuration-docker-du-serveur-dhcp}{% +\section{\texorpdfstring{\texttt{dhcp/Dockerfile}: configuration +\emph{Docker} du serveur +\protect\hyperlink{acronym__DHCP}{DHCP}}{dhcp/Dockerfile: configuration Docker du serveur DHCP}}\label{dhcpdockerfile-configuration-docker-du-serveur-dhcp}} + +\begin{Shaded} +\begin{Highlighting}[] +\KeywordTok{FROM}\NormalTok{ alpine:3.12} +\KeywordTok{RUN}\NormalTok{ apk add dhcp{-}server{-}vanilla \&\& touch /var/lib/dhcp/dhcpd.leases} +\KeywordTok{COPY}\NormalTok{ dhcpd.conf /etc/dhcp/dhcpd.conf} +\KeywordTok{EXPOSE}\NormalTok{ 67} +\KeywordTok{ENTRYPOINT}\NormalTok{ [}\StringTok{"dhcpd"}\NormalTok{, }\StringTok{"{-}f"}\NormalTok{]} +\end{Highlighting} +\end{Shaded} + +\hypertarget{dhcpdhcpd.conf-configuration-du-serveur-dhcp}{% +\section{\texorpdfstring{\texttt{dhcp/dhcpd.conf}: configuration du +serveur +\protect\hyperlink{acronym__DHCP}{DHCP}}{dhcp/dhcpd.conf: configuration du serveur DHCP}}\label{dhcpdhcpd.conf-configuration-du-serveur-dhcp}} + +\begin{Shaded} +\begin{Highlighting}[] +\ExtensionTok{allow}\NormalTok{ bootp}\KeywordTok{;} + +\ExtensionTok{subnet}\NormalTok{ 192.168.56.0 netmask 255.255.255.0 \{} + \ExtensionTok{range}\NormalTok{ 192.168.56.10 192.168.56.80}\KeywordTok{;} + \ExtensionTok{default{-}lease{-}time}\NormalTok{ 600}\KeywordTok{;} + \ExtensionTok{max{-}lease{-}time}\NormalTok{ 7200}\KeywordTok{;} + +\CommentTok{\# option domain{-}name{-}servers 10.136.132.100;} +\CommentTok{\# option routers 192.168.56.100;} + + \ExtensionTok{class} \StringTok{"pxeclient"}\NormalTok{ \{} + \ExtensionTok{match}\NormalTok{ if substring (option vendor{-}class{-}identifier, 0, 9) = }\StringTok{"PXEClient"}\NormalTok{;} + \ExtensionTok{next{-}server}\NormalTok{ 192.168.56.100}\KeywordTok{;} + \ExtensionTok{option}\NormalTok{ tftp{-}server{-}name }\StringTok{"192.168.56.100"}\KeywordTok{;} + + \KeywordTok{if} \ExtensionTok{substring}\NormalTok{ (option vendor{-}class{-}identifier, 15, 5) = }\StringTok{"00000"} \KeywordTok{\{} + \ExtensionTok{option}\NormalTok{ bootfile{-}name }\StringTok{"/boot/grub/i386{-}pc/core.0"}\KeywordTok{;} + \KeywordTok{\}} + \ExtensionTok{elsif}\NormalTok{ substring (option vendor{-}class{-}identifier, 15, 5) = }\StringTok{"00006"} \KeywordTok{\{} + \ExtensionTok{option}\NormalTok{ bootfile{-}name }\StringTok{"/boot/grub/i386{-}efi/core.efi"}\KeywordTok{;} + \KeywordTok{\}} + \KeywordTok{else} \KeywordTok{\{} + \ExtensionTok{option}\NormalTok{ bootfile{-}name }\StringTok{"/boot/grub/x86\_64{-}efi/core.efi"}\KeywordTok{;} + \KeywordTok{\}} +\NormalTok{ \}} + + \ExtensionTok{class} \StringTok{"normalclient"}\NormalTok{ \{} + \ExtensionTok{match}\NormalTok{ if substring (option vendor{-}class{-}identifier, 0, 9) != }\StringTok{"PXEClient"}\NormalTok{;} +\NormalTok{ \}} +\NormalTok{\}} + +\end{Highlighting} +\end{Shaded} + +\hypertarget{grubdockerfile-configuration-docker-pour-la-compilation-de-grub}{% +\section{\texorpdfstring{\texttt{grub/Dockerfile}: configuration +\emph{Docker} pour la compilation de +\protect\hyperlink{acronym__GRUB}{GRUB}}{grub/Dockerfile: configuration Docker pour la compilation de GRUB}}\label{grubdockerfile-configuration-docker-pour-la-compilation-de-grub}} + +\begin{Shaded} +\begin{Highlighting}[] +\KeywordTok{FROM}\NormalTok{ debian:buster AS build{-}stage} +\KeywordTok{RUN}\NormalTok{ apt{-}get update \&\& apt{-}get install {-}y {-}{-}no{-}install{-}recommends \textbackslash{}} +\NormalTok{ gcc \textbackslash{}} +\NormalTok{ make \textbackslash{}} +\NormalTok{ bison \textbackslash{}} +\NormalTok{ gettext \textbackslash{}} +\NormalTok{ binutils \textbackslash{}} +\NormalTok{ flex \textbackslash{}} +\NormalTok{ pkg{-}config \textbackslash{}} +\NormalTok{ libdevmapper{-}dev \textbackslash{}} +\NormalTok{ libfreetype6{-}dev \textbackslash{}} +\NormalTok{ unifont \textbackslash{}} +\NormalTok{ python \textbackslash{}} +\NormalTok{ automake \textbackslash{}} +\NormalTok{ autoconf} + +\KeywordTok{WORKDIR}\NormalTok{ /bootiful{-}grub} +\KeywordTok{ADD}\NormalTok{ ./bootiful{-}grub ./} + +\KeywordTok{ARG}\NormalTok{ PLATFORM} +\KeywordTok{ARG}\NormalTok{ TARGET} +\KeywordTok{RUN}\NormalTok{ ./configure {-}{-}with{-}platform=$\{PLATFORM\} {-}{-}target=$\{TARGET\}} +\KeywordTok{RUN}\NormalTok{ make} +\KeywordTok{RUN}\NormalTok{ make install} + +\KeywordTok{RUN}\NormalTok{ grub{-}mknetdir {-}{-}net{-}directory=./netdir {-}{-}subdir=./boot/grub} + +\KeywordTok{FROM}\NormalTok{ scratch AS export{-}stage} +\KeywordTok{COPY}\NormalTok{ {-}{-}from=build{-}stage ./bootiful{-}grub/netdir /} +\end{Highlighting} +\end{Shaded} + +\hypertarget{nfsdockerfile-configuration-docker-du-serveur-nfs}{% +\section{\texorpdfstring{\texttt{nfs/Dockerfile}: configuration +\emph{Docker} du serveur +\protect\hyperlink{acronym__NFS}{NFS}}{nfs/Dockerfile: configuration Docker du serveur NFS}}\label{nfsdockerfile-configuration-docker-du-serveur-nfs}} + +\begin{Shaded} +\begin{Highlighting}[] +\KeywordTok{FROM}\NormalTok{ erichough/nfs{-}server} +\KeywordTok{ADD}\NormalTok{ nfsroot.tar.gz /nfsrootsrc/} +\KeywordTok{COPY}\NormalTok{ exports /etc/exports} +\KeywordTok{VOLUME}\NormalTok{ /nfsroot} +\KeywordTok{VOLUME}\NormalTok{ /nfsshared} +\KeywordTok{ENTRYPOINT}\NormalTok{ cp {-}a nfsrootsrc/rootfs/. /nfsroot/ \&\& entrypoint.sh} +\end{Highlighting} +\end{Shaded} + +\hypertarget{nfsexports-configuration-des-partages-du-serveur-nfs}{% +\section{\texorpdfstring{\texttt{nfs/exports}: configuration des +partages du serveur +\protect\hyperlink{acronym__NFS}{NFS}}{nfs/exports: configuration des partages du serveur NFS}}\label{nfsexports-configuration-des-partages-du-serveur-nfs}} + +\begin{Shaded} +\begin{Highlighting}[] +\CommentTok{\# /etc/exports: the access control list for filesystems which may be exported} +\CommentTok{\# to NFS clients. See exports(5).} +\CommentTok{\#} +\CommentTok{\# Example for NFSv2 and NFSv3:} +\CommentTok{\# /srv/homes hostname1(rw,sync,no\_subtree\_check) hostname2(ro,sync,no\_subtree\_check)} +\CommentTok{\#} +\CommentTok{\# Example for NFSv4:} +\CommentTok{\# /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no\_subtree\_check)} +\CommentTok{\# /srv/nfs4/homes gss/krb5i(rw,sync,no\_subtree\_check)} +\CommentTok{\#} +\ExtensionTok{/nfsroot}\NormalTok{ *(ro,fsid=0,no\_root\_squash,no\_subtree\_check,async,insecure)} +\ExtensionTok{/nfsshared}\NormalTok{ *(rw,fsid=1,no\_root\_squash,no\_subtree\_check,async,insecure)} +\end{Highlighting} +\end{Shaded} + +\hypertarget{tftpdockerfile-configuration-docker-du-serveur-tftp}{% +\section{\texorpdfstring{\texttt{tftp/Dockerfile}: configuration +\emph{Docker} du serveur +\protect\hyperlink{acronym__TFTP}{TFTP}}{tftp/Dockerfile: configuration Docker du serveur TFTP}}\label{tftpdockerfile-configuration-docker-du-serveur-tftp}} + +\begin{Shaded} +\begin{Highlighting}[] +\KeywordTok{FROM}\NormalTok{ alpine:3.12} +\KeywordTok{RUN}\NormalTok{ apk add tftp{-}hpa} +\KeywordTok{VOLUME}\NormalTok{ /tftpboot} +\KeywordTok{EXPOSE}\NormalTok{ 69/udp} +\KeywordTok{ENTRYPOINT}\NormalTok{ [}\StringTok{"in.tftpd"}\NormalTok{, }\StringTok{"{-}{-}foreground"}\NormalTok{, }\StringTok{"{-}{-}address"}\NormalTok{, }\StringTok{":69"}\NormalTok{, }\StringTok{"{-}{-}secure"}\NormalTok{, }\StringTok{"{-}{-}verbose"}\NormalTok{, }\StringTok{"/tftpboot"}\NormalTok{]} +\end{Highlighting} +\end{Shaded} + +\hypertarget{tftptftpd-hpa-configuration-du-serveur-tftp}{% +\section{\texorpdfstring{\texttt{tftp/tftpd-hpa}: configuration du +serveur +\protect\hyperlink{acronym__TFTP}{TFTP}}{tftp/tftpd-hpa: configuration du serveur TFTP}}\label{tftptftpd-hpa-configuration-du-serveur-tftp}} + +\begin{Shaded} +\begin{Highlighting}[] +\VariableTok{TFTP\_USERNAME=}\StringTok{"tftp"} +\VariableTok{TFTP\_DIRECTORY=}\StringTok{"/tftpboot"} +\VariableTok{TFTP\_ADDRESS=}\StringTok{":69"} +\VariableTok{TFTP\_OPTIONS=}\StringTok{"{-}s {-}c"} +\VariableTok{RUN\_DAEMON=}\StringTok{"yes"} +\end{Highlighting} +\end{Shaded} + +\hypertarget{tftptftpbootbootgrubgrub.cfg-configuration-de-grub-servie-par-tftp}{% +\section{\texorpdfstring{\texttt{tftp/tftpboot/boot/grub/grub.cfg}: +configuration de \protect\hyperlink{acronym__GRUB}{GRUB} servie par +\protect\hyperlink{acronym__TFTP}{TFTP}}{tftp/tftpboot/boot/grub/grub.cfg: configuration de GRUB servie par TFTP}}\label{tftptftpbootbootgrubgrub.cfg-configuration-de-grub-servie-par-tftp}} + +\begin{Shaded} +\begin{Highlighting}[] +\KeywordTok{set} \VariableTok{timeout=}\NormalTok{3} + +\ExtensionTok{insmod}\NormalTok{ part\_msdos} +\ExtensionTok{insmod}\NormalTok{ part\_gpt} +\ExtensionTok{insmod}\NormalTok{ isign} +\ExtensionTok{insmod}\NormalTok{ all\_video} + +\ExtensionTok{isign}\NormalTok{ {-}c hepia2015 (hd0)} +\KeywordTok{set} \VariableTok{check1=$?} +\KeywordTok{if}\BuiltInTok{ [} \VariableTok{$check1} \OtherTok{==}\NormalTok{ 101}\BuiltInTok{ ]}\NormalTok{; }\KeywordTok{then} + \ExtensionTok{isign}\NormalTok{ {-}w 000000000 (hd0)} + + \ExtensionTok{menuentry} \StringTok{"Local HDD"}\NormalTok{ \{} + \KeywordTok{set} \VariableTok{root=(}\NormalTok{hd0,1}\VariableTok{)} + + \KeywordTok{if}\BuiltInTok{ [} \OtherTok{{-}e}\NormalTok{ /efi\_entrypoint}\BuiltInTok{ ]}\NormalTok{; }\KeywordTok{then} + \BuiltInTok{echo} \StringTok{"Reading EFI entry point from (hd0,1)/efi\_entrypoint file..."} + \BuiltInTok{source}\NormalTok{ /efi\_entrypoint} + + \BuiltInTok{echo} \StringTok{"Chainloading to }\VariableTok{$efi\_entrypoint}\StringTok{"} + \ExtensionTok{chainloader} \VariableTok{$efi\_entrypoint} + \KeywordTok{else} + \BuiltInTok{echo} \StringTok{"Legacy chainloading to (hd0,1)+1..."} + \ExtensionTok{chainloader}\NormalTok{ +1} + \KeywordTok{fi} +\NormalTok{ \}} +\KeywordTok{fi} + +\ExtensionTok{menuentry} \StringTok{"Bootiful deployer"}\NormalTok{ \{} + \BuiltInTok{echo} \StringTok{"Loading vmlinuz..."} + \ExtensionTok{linux}\NormalTok{ boot/deployer/vmlinuz root=/dev/nfs nfsroot=}\VariableTok{$net\_default\_server}\NormalTok{:/nfsroot ro} + \ExtensionTok{initrd}\NormalTok{ boot/deployer/initrd.img} +\NormalTok{\}} + +\end{Highlighting} +\end{Shaded} + +\hypertarget{source_ansible_run}{% +\section{\texorpdfstring{\texttt{postdeploy/bootiful-postdeploy}: script +de post-déploiement qui exécute les playbooks \emph{Ansible} présents +dans un +dossier}{postdeploy/bootiful-postdeploy: script de post-déploiement qui exécute les playbooks Ansible présents dans un dossier}}\label{source_ansible_run}} + +\begin{Shaded} +\begin{Highlighting}[] +\CommentTok{\#!/bin/bash} + +\KeywordTok{function}\FunctionTok{ log()} \KeywordTok{\{} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{log\_message=}\StringTok{"}\VariableTok{$0}\StringTok{"} + \OperatorTok{\textgreater{}\&2} \BuiltInTok{echo} \StringTok{"}\VariableTok{$log\_message}\StringTok{"} +\KeywordTok{\}} + +\KeywordTok{function}\FunctionTok{ fatal\_error()} \KeywordTok{\{} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{error\_message=}\StringTok{"}\VariableTok{$0}\StringTok{"} + \ExtensionTok{log} \StringTok{"Fatal error: }\VariableTok{$error\_message}\StringTok{"} + + \ExtensionTok{log} \StringTok{"Stack trace:"} + \BuiltInTok{local} \VariableTok{frame=}\NormalTok{0} + \KeywordTok{while} \OperatorTok{\textgreater{}\&2} \BuiltInTok{caller} \VariableTok{$frame}\KeywordTok{;} \KeywordTok{do} + \KeywordTok{((}\NormalTok{frame++}\KeywordTok{))} + \KeywordTok{done} + + \BuiltInTok{exit}\NormalTok{ 1} +\KeywordTok{\}} + +\ExtensionTok{log} \StringTok{"Starting bootiful post{-}deployment script..."} +\BuiltInTok{readonly} \VariableTok{playbooks\_dir=}\StringTok{"/etc/bootiful/postdeploy{-}playbooks"} +\KeywordTok{[[} \OtherTok{{-}d} \StringTok{"}\VariableTok{$playbooks\_dir}\StringTok{"}\KeywordTok{ ]]} \KeywordTok{||} \ExtensionTok{fatal\_error} \StringTok{"playbooks directory \textquotesingle{}}\VariableTok{$playbooks\_dir}\StringTok{\textquotesingle{} not found."} + +\BuiltInTok{readonly} \VariableTok{playbook\_files=}\StringTok{"}\VariableTok{$()}\StringTok{"} + +\KeywordTok{if [[} \OtherTok{{-}z} \StringTok{"}\VariableTok{$playbook\_files}\StringTok{"}\KeywordTok{ ]]}\NormalTok{; }\KeywordTok{then} + \ExtensionTok{log} \StringTok{"no story found in directory \textquotesingle{}}\VariableTok{$playbooks\_dir}\StringTok{\textquotesingle{}. Exiting."} + \BuiltInTok{exit}\NormalTok{ 0} +\KeywordTok{fi} + +\FunctionTok{run\_playbook()} \KeywordTok{\{} + \BuiltInTok{local}\NormalTok{ {-}r }\VariableTok{playbook\_file=}\StringTok{"}\VariableTok{$0}\StringTok{"} + \ExtensionTok{log} \StringTok{"Executing playbook file \textquotesingle{}}\VariableTok{$playbook\_file}\StringTok{\textquotesingle{}..."} +\NormalTok{ [[ }\ExtensionTok{{-}f} \StringTok{"}\VariableTok{$playbook\_file}\StringTok{"}\NormalTok{ ]] }\KeywordTok{||} \ExtensionTok{fatal\_error} \StringTok{"playbook file }\VariableTok{$playbook\_file}\StringTok{ not found."} + + \ExtensionTok{ansible{-}playbook} \KeywordTok{\textbackslash{}} + \ExtensionTok{{-}{-}connection}\NormalTok{=local }\KeywordTok{\textbackslash{}} + \ExtensionTok{{-}{-}inventory}\NormalTok{=127.0.0.1, }\KeywordTok{\textbackslash{}} + \StringTok{"}\VariableTok{$playbook\_file}\StringTok{"} \KeywordTok{\textbackslash{}} + \KeywordTok{||} \ExtensionTok{fatal\_error} \StringTok{"error while executing playbook file "} + + \ExtensionTok{log} \StringTok{"Execution of playbook file \textquotesingle{}}\VariableTok{$playbook\_file}\StringTok{\textquotesingle{} successful."} +\KeywordTok{\}} +\BuiltInTok{export}\NormalTok{ {-}f }\VariableTok{run\_playbook} + +\CommentTok{\# shellcheck disable=SC2016 \# we do not want to expand $1 in bash command} +\FunctionTok{find} \StringTok{"}\VariableTok{$playbooks\_dir}\StringTok{"}\NormalTok{ {-}maxdepth 1 {-}type f {-}name }\StringTok{\textquotesingle{}*.yml\textquotesingle{}}\NormalTok{ {-}print0 }\KeywordTok{|} + \FunctionTok{sort}\NormalTok{ {-}z }\KeywordTok{|} + \FunctionTok{xargs}\NormalTok{ {-}n1 {-}0 bash {-}c }\StringTok{$\textquotesingle{}trap }\DataTypeTok{\textbackslash{}\textquotesingle{}}\StringTok{[[ $? == 0 ]] || exit 255}\DataTypeTok{\textbackslash{}\textquotesingle{}}\StringTok{ EXIT; run\_playbook "$1"\textquotesingle{}}\NormalTok{ {-}{-}} +\end{Highlighting} +\end{Shaded} + +\hypertarget{source_ansible_init}{% +\section{\texorpdfstring{\texttt{postdeploy/bootiful-postdeploy.service}: +configuration de l'unité \emph{Systemd} pour exécuter des scripts de +post-déploiement sur un +client}{postdeploy/bootiful-postdeploy.service: configuration de l'unité Systemd pour exécuter des scripts de post-déploiement sur un client}}\label{source_ansible_init}} + +\begin{Shaded} +\begin{Highlighting}[] +\KeywordTok{[Unit]} +\DataTypeTok{Description}\OtherTok{=}\StringTok{Runs bootiful post{-}deployment script }\KeywordTok{on}\StringTok{ boot} +\DataTypeTok{After}\OtherTok{=}\StringTok{network.target} + +\KeywordTok{[Service]} +\DataTypeTok{ExecStart}\OtherTok{=}\StringTok{/usr/local/bin/bootiful{-}postdeploy} +\DataTypeTok{Type}\OtherTok{=}\StringTok{oneshot} + +\KeywordTok{[Install]} +\DataTypeTok{WantedBy}\OtherTok{=}\StringTok{multi{-}user.target} +\end{Highlighting} +\end{Shaded} -\hypertarget{retour-personnel-sur-la-maniuxe8re-dont-le-travail-sest-effectuuxe9}{% -\subsection{Retour personnel sur la manière dont le travail s'est -effectué}\label{retour-personnel-sur-la-maniuxe8re-dont-le-travail-sest-effectuuxe9}} +\hypertarget{refs}{} +\begin{cslreferences} +\leavevmode\hypertarget{ref-venkatesh_remote_imaging}{}% +\textbf{1}. VENKATESH, Abhilash. Remote imaging. GitLab. {[}en~ligne{]}. +{[}Consulté~le~16~août~2020{]}. Disponible à l'adresse~: +\url{https://githepia.hesge.ch/abhilash.venkates/remote-imaging} +\end{cslreferences} \backmatter \end{document} diff --git a/doc/references.bib b/doc/references.bib new file mode 100644 index 0000000..87842cf --- /dev/null +++ b/doc/references.bib @@ -0,0 +1,123 @@ + +@online{venkatesh_remote_imaging, + title = {Remote imaging}, + url = {https://githepia.hesge.ch/abhilash.venkates/remote-imaging}, + abstract = {On fly remote imaging}, + titleaddon = {{GitLab}}, + author = {Venkatesh, Abhilash}, + urldate = {2020-08-16}, + langid = {english}, +} + +@online{noauthor_linux_nodate, + title = {Linux Remote-Boot mini-{HOWTO}: Configuring Remote-Boot Workstations with Linux, {DOS}, Windows 95/98 and Windows {NT}}, + url = {https://www.tldp.org/HOWTO/Remote-Boot.html#toc3}, + urldate = {2020-08-16} +} + +@online{noauthor_diskless_nodate, + title = {Diskless system - {ArchWiki}}, + url = {https://wiki.archlinux.org/index.php/Diskless_system}, + urldate = {2020-08-16} +} + +@article{blanchet_read-only_2016, + title = {Read-only {NFS} Root with Debian 8}, + pages = {20}, + author = {Blanchet, Sébastien}, + date = {2016}, + langid = {english}, +} + +@online{noauthor_multistrap1_nodate, + title = {multistrap(1) — multistrap — Debian buster — Debian Manpages}, + url = {https://manpages.debian.org/buster/multistrap/multistrap.1.en.html}, + urldate = {2020-08-16} +} + +@online{noauthor_execute_nodate, + title = {Execute an interactive script at boot with systemd}, + url = {https://alan-mushi.github.io/2014/10/26/execute-an-interactive-script-at-boot-with-systemd.html}, + urldate = {2020-08-16} +} + +@online{noauthor_lancer_nodate, + title = {Lancer un script sur une console virtuelle - systemd / Wiki / Debian-facile}, + url = {https://debian-facile.org/doc:programmation:bash:script:systemd:script-sur-un-vt}, + urldate = {2020-08-16} +} + +@online{noauthor_rethinking_nodate, + title = {Rethinking {PID} 1}, + url = {http://0pointer.de/blog/projects/systemd.html}, + urldate = {2020-08-16} +} + +@online{ludwar_ansible-pull_2016, + title = {Ansible-pull and kickstart, for one-touch server provisioning}, + url = {https://calgaryrhce.ca/blog/2016/02/03/ansible-pull-and-kickstart-for-one-touch-server-provisioning/}, + abstract = {Recently I’ve been learning and using Ansible as my configuration management tool. It came recommended by several colleagues, recently had an O’Reilly book published, and went through an aquisition. Safe to say its momentum and adoption is on a high… and so far, I’m loving using it. I find it vastly easier to setup and use than Puppet, Chef, {CFengine}, or {SaltStack}.}, + titleaddon = {Calgary {RHCE}}, + author = {Ludwar, Andrew}, + urldate = {2020-08-16}, + date = {2016-02-03}, + langid = {english}, +} + +@online{admin_how_2019, + title = {How to Run Ansible Playbook Locally {\textbar} {DevOps} Junction}, + url = {https://www.middlewareinventory.com/blog/run-ansible-playbook-locally/}, + abstract = {How to Run Ansible Playbook Locally on a Control machine. {HOw} to run Ansible Playbook on Localhost. In this post we are going to discuss about how to run your playbook on the local control machine before you execute it with the remote server or host. How to limit the playbook to run on localhost with example}, + titleaddon = {Middleware Inventory}, + author = {{admin}}, + urldate = {2020-08-16}, + date = {2019-07-17}, + langid = {american}, + note = {Section: Ansible}, +} + +@online{noauthor_gpp_nodate, + title = {{GPP} 2.26 — Generic Preprocessor}, + url = {https://files.nothingisreal.com/software/gpp/gpp.html}, + urldate = {2020-08-16} +} + +@online{bpbatch_homepage, + title = {BPBatch home page}, + url = {http://www.bpbatch.org}, + urldate = {2020-08-16}, +} + +@online{registre_commerce_rembo, + title = {Registre du Commerce du Canton de Genève}, + url = {http://ge.ch/hrcintapp/externalCompanyReport.action?companyOfsUid=CHE-105.105.486&lang=FR}, + urldate = {2020-08-16}, +} + +@online{clonezilla_home, + title = {Clonezilla}, + url = {https://clonezilla.org/}, + urldate = {2020-08-16} +} + +@online{ibm_rembo, + title = {{IBM} met la main sur Rembo Technology}, + url = {https://www.journaldunet.com/solutions/cloud-computing/1060590-ibm-met-la-main-sur-rembo-technology/}, + urldate = {2020-08-16}, + langid = {french}, + file = {Snapshot:/home/araxor/Zotero/storage/BU5TCN6Y/1060590-ibm-met-la-main-sur-rembo-technology.html:text/html} +} + +@online{fog_wiki_intro, + title = {{FOG} Project wiki (introduction)}, + url = {https://wiki.fogproject.org/wiki/index.php?title=Introduction}, + urldate = {2020-08-16} +} + +@online{gluck_enonce_2020, + title = {Énoncé du projet Bootiful}, + url = {https://gradechelor2.hesge.ch/studentFiles/1660/ITI_IN_enonce_diplome_Lizzi_Gluck_2020.pdf}, + author = {Glück, Florent}, + urldate = {2020-08-16}, + date = {2020-05-06} +} \ No newline at end of file -- GitLab