From bc199c3f61af5a82e01007601febcc6de77701e2 Mon Sep 17 00:00:00 2001
From: "thibault.chatillo" <thibault.chatillon@etu.hesge.ch>
Date: Wed, 23 Jun 2021 16:05:07 +0200
Subject: [PATCH] finito

---
 exam2/ex1/main.c   |  54 +++++++----
 exam2/ex2/Makefile |  15 +--
 exam2/ex2/main     | Bin 0 -> 39944 bytes
 exam2/ex2/main.c   |  35 +++----
 exam2/ex2/tree.c   | 227 +++++++++++++++++++++++++++++++++++++++++++++
 exam2/ex2/tree.h   |  49 ++++++++++
 exam2/ex3/main     | Bin 0 -> 27504 bytes
 exam2/ex3/main.c   |  53 +++++++----
 exam2/ex4/main     | Bin 0 -> 28088 bytes
 exam2/ex4/main.c   |  98 +++++++++++++++----
 exam2/ex5/Makefile |  10 --
 exam2/ex5/main.c   |  29 ------
 12 files changed, 446 insertions(+), 124 deletions(-)
 create mode 100755 exam2/ex2/main
 create mode 100644 exam2/ex2/tree.c
 create mode 100644 exam2/ex2/tree.h
 create mode 100755 exam2/ex3/main
 create mode 100755 exam2/ex4/main
 delete mode 100644 exam2/ex5/Makefile
 delete mode 100644 exam2/ex5/main.c

diff --git a/exam2/ex1/main.c b/exam2/ex1/main.c
index 45422d4..0784e35 100644
--- a/exam2/ex1/main.c
+++ b/exam2/ex1/main.c
@@ -2,27 +2,43 @@
 #include <stdlib.h>
 #include <string.h>
 
-typedef struct _element {
-  char c;
-  struct _element *next;
-} element;
-
-int main(int argc, char **argv) {
-
-  // read user input
-  char str[16];
-  scanf("%s", str);
-  int len = strlen(str);
-  // cli args
-  if (argc == 1) {
-    printf("need more arguments");
-    return EXIT_FAILURE;
+
+float moyenne(int i,float*arr){
+  if(i==14){
+    return arr[i]/15;
+  }else{
+    return arr[i]/15+moyenne(i+1,arr);
+  }
+}
+
+void swap(float*a,float*b){
+  float tmp=*a;
+  *a=*b;
+  *b=tmp;
+}
+
+void inverse(int i,float* arr){
+  if(i>7){
+    return;
   }
+  swap(&arr[i],&arr[14-i]);
+  inverse(i+1,arr);
+}
+
+int main() {
+
+  float change[15];
+  for(int i=0;i<15;i++){
+    scanf("%f",&change[i]);
+  }
+  
+  // printf("")
+   printf("moyenne: %.3f\ninversion:\n",moyenne(0,change));
+
+   inverse(0,change);
 
-  for (int i = 0; i < argc; i++) {
-    if (!strcmp(argv[i], "-c")) {
-      // do stuff with atof/atoi (argv[++i])
-    }
+   for(int i=0;i<15;i++){
+    printf("%.2f\n",change[i]);
   }
 
   return EXIT_SUCCESS;
diff --git a/exam2/ex2/Makefile b/exam2/ex2/Makefile
index 478f28e..e9c975e 100644
--- a/exam2/ex2/Makefile
+++ b/exam2/ex2/Makefile
@@ -1,10 +1,11 @@
-main: main.o
-	gcc -o $@ $< -fsanitize=address -fsanitize=leak
+cc=gcc
+CFLAGS=-Wextra -Wall -g -fsanitize=address -fsanitize=leak
+LFLAGS=-fsanitize=address -fsanitize=leak -lm
 
-main.o: main.c 
-	gcc -c -Wall -Wextra -pedantic -fsanitize=address -fsanitize=leak $<
 
-clean:
-	rm -f *.o main
 
-rebuild: clean main
\ No newline at end of file
+main: tree.o main.o 
+	$(cc) -o $@ $^ $(CFLAGS) $(LFLAGS)
+
+clean:
+	rm -f *.o *.x
diff --git a/exam2/ex2/main b/exam2/ex2/main
new file mode 100755
index 0000000000000000000000000000000000000000..76d13cef127266f7757a96ad2465312e35d058c4
GIT binary patch
literal 39944
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
BGi(3=

literal 0
HcmV?d00001

diff --git a/exam2/ex2/main.c b/exam2/ex2/main.c
index 45422d4..931dbd8 100644
--- a/exam2/ex2/main.c
+++ b/exam2/ex2/main.c
@@ -1,29 +1,20 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
+#include "tree.h"
 
-typedef struct _element {
-  char c;
-  struct _element *next;
-} element;
+int main() {
 
-int main(int argc, char **argv) {
+  node_t *tree = bst_create();
+  int input[15];
 
-  // read user input
-  char str[16];
-  scanf("%s", str);
-  int len = strlen(str);
-  // cli args
-  if (argc == 1) {
-    printf("need more arguments");
-    return EXIT_FAILURE;
+  for(int i=0;i<15;i++){
+    scanf("%d",&input[i]);
+    tree = bst_insert(tree, input[i]);
   }
+  
+  // manque de temps je fais l'affichage seulement
 
-  for (int i = 0; i < argc; i++) {
-    if (!strcmp(argv[i], "-c")) {
-      // do stuff with atof/atoi (argv[++i])
-    }
-  }
+  bst_to_array_incr(tree);
+  bst_to_array_decr(tree);
 
-  return EXIT_SUCCESS;
+ 
+  bst_destroy(tree);
 }
\ No newline at end of file
diff --git a/exam2/ex2/tree.c b/exam2/ex2/tree.c
new file mode 100644
index 0000000..57348da
--- /dev/null
+++ b/exam2/ex2/tree.c
@@ -0,0 +1,227 @@
+#include "tree.h"
+
+// typedef struct _node_t {
+// int val;
+// struct _node_t *left;
+// struct _node_t *right;
+// } node_t;
+
+node_t *test(node_t *tree) {
+  if (tree->left != NULL) {
+    printf("%d\n",tree->val);
+    return bst_find_min_node(tree->left);
+  } else {
+    return tree;
+  }
+}
+
+
+void incr(node_t *tree) { 
+
+  if (tree == NULL) {
+    return;
+  }
+  incr(tree->left);
+  printf("%d\n", tree->val);
+  
+  incr(tree->right);
+}
+
+void swap(node_t* a,node_t*b){
+  node_t tmp=*a;
+  *a=*b;
+  *b=tmp;
+}
+void reverse_tree(node_t* tree){
+  if(tree==NULL){
+    return;
+  }
+  if(tree->right!=NULL&&tree->left!=NULL){
+    swap(tree->right,tree->left);
+
+  }
+    reverse_tree(tree->right);
+    reverse_tree(tree->left);
+}
+
+int* bst_to_array_incr(node_t *tree){
+  //pas assez de temps donc j'affiche seulement les valeurs dans l'ordre
+  printf("ordre croissant:\n");
+  incr(tree);
+  printf("\n");
+  //  int *values=malloc(sizeof(int)*15);
+
+  return NULL;
+}
+
+int* bst_to_array_decr(node_t *tree){
+  //pareil 
+  printf("ordre decroissant (presque):\n");
+  reverse_tree(tree);
+  incr(tree);
+  // int *values=malloc(sizeof(int)*15);
+
+  return NULL;
+}
+
+
+// peite gauche et plus grand droite
+bool bst_is_empty(node_t *tree) { return tree == NULL; }
+
+static node_t *create_node(int val) {
+  node_t *node = malloc(sizeof(node_t));
+  if (node == NULL) { // memory error
+    return NULL;
+  }
+  node->left = NULL;
+  node->right = NULL;
+  node->val = val;
+  return node;
+}
+
+node_t *bst_create() { return NULL; }
+
+void bst_destroy(node_t *tree) {
+  if (!bst_is_empty(tree)) {
+    if (tree->left != NULL) {
+      bst_destroy(tree->left);
+    }
+    if (tree->right != NULL) {
+      bst_destroy(tree->right);
+    }
+    free(tree);
+  }
+}
+
+void bst_print(node_t *tree, int depth) { // affiche l'arbre ordre croissant
+
+  if (tree == NULL) {
+    return;
+  }
+  bst_print(tree->left, depth + 1);
+  for (int i = 0; i < depth; i++) {
+    printf("-------");
+  }
+  printf(" %d \n\n", tree->val);
+  bst_print(tree->right, depth + 1);
+}
+
+// insertion de val dans l'arbre et retourne l'arbre (ou NULL si problème)
+node_t *bst_insert(node_t *tree, int val) {
+
+  if (bst_is_empty(tree)) { // root
+    tree = create_node(val);
+  } else {
+
+    if (val > tree->val) { // right
+      if (tree->right == NULL) {
+        tree->right = create_node(val);
+      } else {
+        tree->right = bst_insert(tree->right, val);
+      }
+
+    } else { // left
+      if (tree->left == NULL) {
+        tree->left = create_node(val);
+      } else {
+        tree->left = bst_insert(tree->left, val);
+      }
+    }
+  }
+  return tree;
+}
+
+// la valeur val est-elle présente dans l'arbre?
+bool bst_is_present(node_t *tree, int val) {
+  return bst_search(tree, val) != NULL;
+}
+
+// retourne le noeud où la valeur val se trouve (NULL si absent)
+node_t *bst_search(node_t *tree, int val) {
+
+  if (!bst_is_empty(tree)) {
+
+    if (val == tree->val) { // found it
+      return tree;
+    } else if (val > tree->val) { // right
+      return bst_search(tree->right, val);
+    } else { // left
+      return bst_search(tree->left, val);
+    }
+  }
+
+  return NULL;
+}
+
+// l'arbre est-il un arbre binaire de recherche?
+bool bst_is_bst(node_t *tree) {
+  if(tree==NULL){
+    return true;
+  }
+  if (tree->left != NULL && tree->left->val > tree->val) {
+    return false;
+  }
+
+  if (tree->right != NULL && tree->right->val < tree->val) {
+    return false;
+  }
+  return bst_is_bst(tree->left) && bst_is_bst(tree->right);
+}
+
+
+node_t *bst_find_min_node(node_t *tree) {
+  if (tree->left != NULL) {
+    return bst_find_min_node(tree->left);
+  } else {
+    return tree;
+  }
+}
+
+int bst_find_min(node_t *tree) { return bst_find_min_node(tree)->val; }
+
+node_t *bst_find_max_node(node_t *tree) {
+  if (tree->right != NULL) {
+    return bst_find_min_node(tree->right);
+  } else {
+    return tree;
+  }
+}
+
+int bst_find_max(node_t *tree) { return bst_find_max_node(tree)->val; }
+
+int count_child(node_t *node) {
+  int nb = (node->left != NULL) + (node->right != NULL);
+  // printf("%d child(s)\n", nb);
+  return nb;
+}
+
+node_t *bst_delete(node_t *tree, int val) {
+  if (!bst_is_empty(tree)) {
+
+    if (val > tree->val) {
+      tree->right = bst_delete(tree->right, val); // go right
+
+    } else if (val < tree->val) {
+      tree->left = bst_delete(tree->left, val); // go left
+
+      // found node
+    } else if (count_child(tree) == 2) {
+
+      node_t *next = bst_find_min_node(tree->right);
+      tree->val = next->val;
+      tree->right = bst_delete(next, next->val);
+
+    } else { // 1 or 0 childs
+      node_t *tmp = tree;
+      if (tmp->left != NULL) { // left
+        tree = tree->left;
+      } else if (tmp->right != NULL) { // right
+        tree = tree->right;
+      } else {
+        tree = NULL;
+      }
+      free(tmp);
+    }
+  }
+  return tree;
+}
diff --git a/exam2/ex2/tree.h b/exam2/ex2/tree.h
new file mode 100644
index 0000000..cdadfd8
--- /dev/null
+++ b/exam2/ex2/tree.h
@@ -0,0 +1,49 @@
+#ifndef _STACK_H_
+#define _STACK_H_
+
+#include <stdio.h>
+#include <stdbool.h>
+#include <malloc.h>
+
+typedef struct _node_t {
+int val;
+struct _node_t *left;
+struct _node_t *right;
+} node_t;
+
+//BINARY SEARCH TREE (BST)
+
+// Fonctions de création, destruction et affichage
+node_t *bst_create(); // création d'un arbre vide (retourne NULL)
+void bst_destroy(node_t *tree); // détruit l'arbre et vide la mémoire
+
+void bst_print(node_t *tree, int depth); // affiche l'arbre (voir plus bas)
+// insertion de val dans l'arbre et retourne l'arbre (ou NULL si problème)
+node_t *bst_insert(node_t *tree, int val);
+// efface le premier élément contenant la valeur val dans l'arbre
+// et retourne l'arbre (ne fait rien si val est absente)
+node_t *bst_delete(node_t *tree, int val);
+// la valeur val est-elle présente dans l'arbre?
+bool bst_is_present(node_t *tree, int val);
+// retourne le noeud où la valeur val se trouve (NULL si absent)
+node_t *bst_search(node_t *tree, int val);
+// l'arbre est-il un arbre binaire de recherche?
+bool bst_is_bst(node_t *tree);
+// retourne le noeud avec la valeur minimale de l'arbre (NULL s'il y a pas)
+node_t *bst_find_min_node(node_t *tree);
+// retourne la valeur la plus petite stockée dans l'arbre (ou MIN_INT)
+int bst_find_min(node_t *tree);
+// retourne le noeud avec la valeur maximale de l'arbre (NULL s'il y a pas)
+node_t *bst_find_max_node(node_t *tree);
+// retourne la valeur la plus grande stockée dans l'arbre (ou MAX_INT)
+int bst_find_max(node_t *tree);
+
+int count_child(node_t *node);
+
+int* bst_to_array_incr(node_t *tree);
+
+int* bst_to_array_decr(node_t *tree);
+
+int* bst_find_min_and_free(node_t *tree);
+
+#endif
\ No newline at end of file
diff --git a/exam2/ex3/main b/exam2/ex3/main
new file mode 100755
index 0000000000000000000000000000000000000000..2c97531137305d6eb4ad608dc6873c217d6fd24a
GIT binary patch
literal 27504
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
AxBvhE

literal 0
HcmV?d00001

diff --git a/exam2/ex3/main.c b/exam2/ex3/main.c
index 45422d4..e719885 100644
--- a/exam2/ex3/main.c
+++ b/exam2/ex3/main.c
@@ -2,28 +2,45 @@
 #include <stdlib.h>
 #include <string.h>
 
-typedef struct _element {
-  char c;
-  struct _element *next;
-} element;
-
-int main(int argc, char **argv) {
-
-  // read user input
-  char str[16];
-  scanf("%s", str);
-  int len = strlen(str);
-  // cli args
-  if (argc == 1) {
-    printf("need more arguments");
-    return EXIT_FAILURE;
+
+int my_strlen(char* str){
+  int i=0;
+  while(str[i]!='\0'){
+    i++;
+  }
+  return i;
+}
+
+void hamming_distance(char*s1,char*s2){
+  int len1=my_strlen(s1);
+  if(len1!=my_strlen(s2)){
+    
+    printf("Distance %s - %s: Impossible\n",s1,s2);
+    return;
   }
 
-  for (int i = 0; i < argc; i++) {
-    if (!strcmp(argv[i], "-c")) {
-      // do stuff with atof/atoi (argv[++i])
+  int cnt=0;
+  for(int i;i<len1;i++){
+    if(s1[i]!=s2[i]){
+      cnt++;
     }
   }
+  printf("Distance %s - %s: %d\n",s1,s2,cnt);
+}
+
+int main() {
+
+  char str0[40];
+  char str1[40];
+  char str2[40];
+  scanf("%s", str0);
+  scanf("%s", str1);
+  scanf("%s", str2);
+
+  hamming_distance(str0,str1);
+  hamming_distance(str0,str2);
+  hamming_distance(str1,str2);
+  printf("\n");
 
   return EXIT_SUCCESS;
 }
\ No newline at end of file
diff --git a/exam2/ex4/main b/exam2/ex4/main
new file mode 100755
index 0000000000000000000000000000000000000000..e3b7eb536cbb6ce444e753366e5aa654193209e6
GIT binary patch
literal 28088
zcmb<-^>JfjWMqH=W(GS35HCRpBH{p{7%Ebr3<d@U2L=lUUIqsSRR$FXHU<U;7O)sZ
z9;O~f-(Z4>!)Oi&mw_3oPXfeXU|>L}WuWR{G{{XLArK9+55&fX3wR)+Fq%OC!UySN
z1u>y~m^h3M<pN1EFu-V-I7lDZJ_U$80~*}{mSkXn(a8EhVe>%;qVIzZDqR58R{^DA
z`ar=2(kGz{Q7>VON-KaAFfcH{XjpiHi~(T_Xn3O2XwGIp*B1fRhfcddtY?7HAUi-p
z!B0z4Kx}k-V0>Km1wi$kPz0I6z<^HoK!h1!G{_E+P~g*&6i~Q;*u-F1GzUTL!xaw#
zP=CW{P<(^T*U!mJGBeT7Nzu*8%qy+Xt*|iDH8asG&et;nNrTfo$PQ4Na`y{mU}9i6
z0CFqTIIz430|PjngXBX!_x$E<mt8k&WyEsdpW%z+jlN9;sRx+>vJ<2RWH3lSG>So7
zuzpbn25_DP`M-s+5iAW769=ncV7QQaE|*<sqVUXwi}6q)4C*oi0|PWmqsXnsAwG{0
zyZZe&)XRd>B#Oxp&V3x}4RDx$3y1n_9O`><h)=^|P9qL+MI7dA#Uajz!@p@b%=f}!
z4k*H~#fv2l^Q&-}zl@QAK?xG%DCAcL1_nU}X@&$xh%hM4fmp#%a}>}m&&f<mEKbY=
zrF2t<`1thP{Ji+$lEk8t_;`kR&k*1El+>cs^vvRt)S?hy=bZe!)R4raoK%P$cA0pP
zf$^DnnI#OxB}F-@c?|Iop`z4+{GyWhoczQTLx$YMoSgh*G^yf}{GwC~Y=S0ef*?cC
z6@tV}7z&Cq^Gebf(uz`3VS0*75|gvzAvVSv!9?>5N;32F;!{#fQj<$So=(n=FD*`u
zPfROGEs8HnEh#MmIX$yDKiSeUzBoBCFAb)(G!N$W`1G9oq{N(Jm`qt}Q8CEW+|1(K
z#FFHU_~eY#<m~t|B)39B6Rt5QGbtGq{ALXCP)8(ZWXGo^X67&yl$IoCBo;Bm$0t`L
z#;0ZGCFW#SfqVth15#X65}%uxnaAMn<LTraZ=`1eXBp|4g5n*7!37A20mh&b2gE=X
zh4B~}m>8NF8DP~DgGgp3FQ`;I4izhv%H(8VU}CrkD#REV7=A$OIavKNPZDG{0|NuJ
z9)pQH2t&j<(8Qae>IKlm8DQ$64GWk#98kUjl!l2XKr0{%H1P${ddC4xd>K?c0Zse?
z)SL=5@wHI(4QS#pa~7b9FMyh}15JE0)SLro;xKa_pouF$&G~^Qz7uK=12mt*!U1NE
z0-AUNRJ{e7_<pFk1DZI@99TOB6y31;2NaVx>_H?0xIGA}6CpeXh6hOEpfVFC{sKvy
zA127a!0-V{92(_d*&j&apt=t%$iM(E*FbiP!2}r?7y_W`*`akOOez9N9G1pGatTP{
zup9vr&p;A~m7O5*0wi%zy$liq;R+;ikli3L5N<#chs6y@yaP#`6C?n|6OhEAO;fPU
z3?y-Gun2@$fFurW0)r)1Ac^yWMIgimBymt11R~17umedPIerfyi3`FMGcYimKoUo;
zN-iLYgW5qzT1J_pAut*OgCqn#^UMA6Xnw=t(am~OpMk-n^*{;J{|g??M>r0HUHIQr
zN}qw@(|=WIeFg@8c?OXB43NyHmk<B{|33lD2UP~2US5RrK?Uolmj~f|P=WgC<wiIk
zRFHmpxe(3=72cm-PK5J81?s1ljc`7wApP{R5Y7h`pr2kQ!ug<r^V7>fI3HACetPK$
z=YtB$PcIGOd{6=T>7^o^4=NZxy%dD=K^4`fmyB>esDk?R^5Z|4e?bN2r<V_5{7?T?
z*Xn^n$AtkLKA--pe$_?gzeVFeMdRN^<6lMNpGD&zMdR;9<8MXduSMf8MdQy!<4;B7
z_oDGz(fGA!{8D7T;aktni*X*Ek35>6d<Y2f>192}&cNW&%j*xOY@=8i82*a}=`t{U
znc&fDdr}W1$$AJxS^g*y_2_2R(}g5W&i@bi<r_fB?=Y11=(U{*QrK%c2}EiB^XUBG
zaqykJ$H5=W9*oC4F8(VK@#tn{g&M%||3MnRybA*ZOg||7HrPh$F)%QcYKM9>+dcvf
z*m!h4E#dL#wtc3<!0<xy-~azFQvUz{e~i^okAZ<P_AtLZivE}7|Ns9785HW#`P8HN
zje$pJ?G2A^*Bc(4$6wt3_y2#V>zCuMZ$QpI?)m{ly^iR1{os*&0j#K(hsmS!gh%Hg
zkAtt6JsJ-&H2kmU-zL;@$$@|BF^|sU&Cl5#EUxp<J*4=l<x&X;$k4EV|NrxEW8~j=
zAp3y!%<r{dIxjG~zG-&-z}W5j!P@mp&4T@)H2Na%-~ay}ovuGTx?O)@u>fM&%fJ8s
zgB5g#-tg!Y05h8paDdczUhp{hg4u%=;v|Na1N>7D+A#CaJD_-?<p4<c^%t|Dy1PT)
zbOvyMG@m>S4~x!Pu+^~$k>)oF9-Xx>AkI4v(hG6k3y^ha{s&ob{Kc+6VCTK?=!Q70
z^PtDUm&_iG2O*B)Y&i*0rvx$#>`#!o7aqiWp#o|{w+Gn$ICX;J1LFG+FyGIGX#LR%
z(Te2t<~IT!Q19b35HmF2{sw#YM>ixWJ#cw;DO8<DH-ks#F^^u`5H1FW9iXK3qU!hm
z{}XUHr1SWT-5Ao~2=VAFec;jU`T&%=H2#2+?4RSVUqA*Pcl`mPKuPuoB*{MTAS1~x
z{*9Vs|A3P0muA-=jNPt3tX==qEb!=d#hnUVARd0<(H;5#l1NF3;cvgd!TO>*^h;*|
z2Wsdb<yKHYdUL`8(h#BvoQvf^@!aY90^-KwFGN8Z3+&$GFBCutuhaE|2PjYXntE|E
zFn~gF7DUMh5c?TO2~_zlB=%*9vEWSN(QE1t)fx}c`U0eNHAFesnE4R)50Lm|2pg<M
z0HPkOhUMS?|NB7|;ERbrQ4)e<m}978NU%ran+FV_0(LIL|Ns9zJMT5yhHEk~Fq8=G
zKfu7i@S^(X|No#?0JBHuVUONskXp~qqaMeZH+OAy^yp=M%>nYBGlxen>!Sal(#2W8
zv-6JU!8go~$6HiDdGh1Oj~_v7j)wpB44*!I0<n1-{?~u{#J~Vz3xLEK7(Rp8A`SoR
zKY#xGImM%!MO6dju1?n*h6g-*TOGiLgJNVS2P{VXfBygP+3Pw1lH?b{#m&LuP%Xz_
z$p3>WJN`oW-~a#Me9?Kx)AC-4r^j(-KC=g|9{avRfyaI*<Ev-q7O?w0JNKx7-0rah
zA=9D)a<xZyGbk?{V_<l#0&+dbx1hY?dAtRz1I7la1+hWJdy0oK#AhX}FXDgv|KEAR
zqwxqRRHGeZ9Ah2h5M|>&P&3G**S1rQf#C(qkN^J>QZGt>{Qv)=;m7~~FhwaKMgPBp
z6s76$%eR26gSF2b!+m;frIi^N9K$?2uQ`T#c7AmXaqRpP>d~t!qRhY$?4$V?)aHBf
z|Lgz%9tZz2m&hC5hSsM(ou7O<-??-?cl<AM-=q03qle|)(pRANV00|R!H)5V(-2mI
zih58>5k!N`1gQk^!R{F)MnhmU1V%$(Gz1212!O`-@i|VlSVuuM1=OCvrwX@Rd1_8_
zer~FQYB70cq@<=6#21&8rljVT;I;*~OmPNiTB)3DBa9S`jTB4_6f6|-5_3}xt;{VI
z3=NS)jI1mSaNEwnpjwPimav?bo{uwVZY(oTFPQ<vF$R-HVA23gg6DM@rJ1ckbLOCK
zU&Oor|3PiJiueEjzhGcs=y?DCKWGAZ#)tp^S1>RzG=BX5UxJZ=q4(4O{}zl44D&zz
z{~y7~z|ise|Nja`1_r?||NqZmWMDA(^8f!1Mg|7`umAtwU}RvB`u6|-4@L%t-QWNJ
z2dzK2_Wl2V2POsvjvxR3ConNERQ&k=e+6jlhk=0sHs;G%6~w?;A;2ij!_F~*5h4y+
z)A8c{|Nr_R@4K*roXnuYz`$U_z`!u!?f?G@pz$O=0XIGgFMjTFjs^yMDJv~w74Y;X
z$lMr^pWgld57r1W18N^Afi!@`LHeQMAiF@}lKA2Oe;$yyE1y6clQS<HGczL(I|l<u
zehmWygYU=x|H0$eFnLdqECX2n3<Cp${m1|RUxLhp$um6wD*)*S_3Sx5{r}&IBHsX)
z2iaTr>HmLuWce_#G}wF{Mh1q0Pyhe_N0w*$237zv--nTb!T<CB|F2QxAA#jT;g$o6
zn=k+WFGTjAUmtTXOAl)^8*>-PqabspFfuSq{`&vFG_pBCU}M1U*uu!b(D(KKe^q4p
z7>GP*{l^tX28IP+|Nl<~$-D6h^fP(#N%S$h@+tJPxbkWAu)6RWw6S^cSv0e|^Eu@4
zSvc|;IPz&Y@hLd*NjUKdIPr0S=MiO?7#L1`{r?}--US&oibq3WGz3ONU^E0qLtr!n
zMnixeApl#K1Y3s$TXzIoX9Q|Wf!u*kgVsWU#6eStAR64DVPIeYO(BB#9#SBZ0lrKa
zwq6FhtOmaB7P`y{zFrF4CSyRXvw|AK09zjgYQKR@hP8RW{`;Q~;x7Qrtuin$z}iv*
zpt(~9$T}R5`~|2ytoL;n>LJjSC`eucL@+QgAg`$b2|=|nSU}ftK%4appnd^J9@Gv8
z(V(eW5Di-^asz4+OgsQISIfWv_jd=>AkdU8NFU68IS>a)-S7Vp|1m<f{)6%rpyvID
z@}b^g_yFa<gIfF(%7?iVYCP2_*t%?V0}Y@N<N&1upmYM1E`ZVvP<jHCUI3*xK<NWe
z`T~@G0Hr@bX$I&b904e;0HqC}G`hP8@nP%e(AB}#(ZSL?blDjLY#kkJT^PDP7$3HN
z4(4o_e%SgsLi%Cr=3w~?rXRL$j*x!XdO2vaVSwp}t(PODAGS^omLFjHVe8}w>34T_
zwo=dtO)AYRDOIr4GuAWEH8d{;a}Dc^4D<|4G$F#^9vCEZz}yN8LkL~M3)yMGz`((H
z9>nfsWnfqYjcz7SRt5%^W^M;|1_tJz0t^i7EFdP6Fq<D}qs42GGL{`&3=E7cQcR%r
znyjD>`v)dTjszA42DWMr1_nk^Mov&HvvCPBFfd9o3h*#6aIjUfGB7a8f@K8Q_VX|>
zFe-s%B-mE7GcYi!fMpces+brU7}dcXMYacQ3=E7~V2%<SsB_Aw3+5=ZX@Fdy$Ed`^
zz@Wk=58@brP19g|4zkAttjvHd9OMEEFvpPXIwJ!EqYYS(30on^q4r=I3pQSE1_nka
zFvpUOm!E-w(HYFKV)Fp4`ttyDtl74*FfcHBgE=;A7eQX|1Doc+_77xqAXvtQ?G{K`
z7$ayd%!4fl<evyI#|K=ZGDd+p0c>6%&&7Z_A#78b85kJjz?=xSU{HW0fH^U29U$i<
zgN;sLO9Z((4a`YoI|g!f2AGq?wijei7Go+4149N|707LQ-~cIL`v5Ya0IaNn?Fz`A
zVlbzYEd?Y~0_Ie)%>`Ln3O1mD?KddgD!`l$ws=kk2F6-2X9AlFD0thzdS<Xmfn3ne
zSjNJ@Fo*3DNLepfW&zuEkjw-yXCd2HkaMPhowI^15foX|!7>}z7JytZ3(VQbwhZLC
zIbhBvww0jJSqSEAW@7}&ECF-2uuTIQunf%E%60(c>XqPF*uiEG3ix$kdk(NgfLyQ%
ztn36^I4FL$fH^1GYIzwL7`K5rr`Y^JuHFgeoMyWZa?Tzw=L}l}$h7@n&RMnsP&zmS
z=A2_&3Nq~|m~)=35M<8@Fy{iBA;_nv!JLb1O(2<bV9q5re^C5f1amI4m4ocL4CY*6
zI}CEcH8AHY+hve{Zh|@2*vvs;a0kq}&eku)z`%GP?9&@;S)f>W2$s3S_6TI@Q!wW)
zTN22jFTk98Y`a0qUV%CH*~~$K_!=BK57;6=M!x~eykIK>x!@g`^O7wF6gnTloLB6s
zJPZs>avT>p7#QqW7#Lhw7#KKAL3x|=84CjglRQT|0|P?{Oq9zSB*nlDDk*p#GBPl*
zbcyTnFfed~QYCM(u@M8yEHO})<p!k~J|AWV1}0?@1%3twkPcRRCI$u;W^IncEDQ`h
zF&qpG%sTuaHvbY($>Jr*z`(34xB;}}i-ETkWY{z@P|?H<Qo~znX2QTST_y}<-4zxF
z27wtu3=FKQJcS^~30!AoU|>}Pa~uSAvoSERYCt%G?OY5DtXg0WgMiRX9tH+h9SDzs
z!9mCnq)$&6WC&>IjPOd3Y9sCkU`K#UQvtr;ATbk>7B&V3P)Wyko{@op)l9;Mi-BP}
z3j+gR9xnp}t37WkCj$d09Qd|_<d5=hVSw@*Kz1JE4Hba!MW%2tFt8dka%+MDlSPyl
z<d3yXU^fYfIxsUZu&#sh#3pbvFt9FT=5AtPV5k@G5M*Fr-N4Kv#K^z^3KK!lRwOnd
zq4OZuGP3>wH453(Ijq<j7}$b9L8`(35M&2iI0pj*n<hI*4~IlaVmbqx7MQ~$+0Vql
zz@{Stc8a76Cj$eUE||k8*(kukz@`W0FiEmAGBB{|gE=YeAbZ#hndO-o7>d{!7%JEp
z7&xAT?19J_F<bC5F!Zp2iVUa>7swf0AnO?*YK)mT^D{7PU}Io73e$~H16AnB&%nTD
z&hd(gf#D__1H*lg!nYu6q$Y!0W66J9fPn#25B+3gVBi8V7^JrgF)*+>@;~5)1hrHl
zC@7r7rtw1f%IpjbT%b5&knsnZ?#%xR8fg$w2JUa5*0C%LyAcZmgWPOE1_qYJjNHuJ
z3=Hxtiy2ixTbEeVK;zf!avXa>p_Rzaz`!8{&a@0{k3bv|Fo%WhF9!nyhXk0z!S)j*
zBM0X2uzdw_6u}$;Hqb634rOp|6k%%x=}`mANU&Lelxc%yWY|u#GB9vJ>PA_%EKrg+
z1k1>=*$6Q(a2SI*@@x*EMzAT^00lNscypM8IVx=b`4|{DtiZ}N*g#zb4oF3*!`8&i
zz`)@ER%XC<6EsNg0_K>oEdj~6fjJgz8@U-6I3N|J4O<Bp0|SRQSjK@(7UY5eFvo?>
z8RUf!ust4Zi$F5rV2&qS7sx-6V2&3X6E6b;M>Lq@&1Ngez`zj)=J>ExfH?7BjxU=N
zsAZ7|=J>HGgJe>`9Dg=hP6h@JNZlB~25Rzg<bY)Y*`9;k2B{8%*wh3V7&ywoGQn)y
zL2j!Cb3)jzf|S*QIiYN-pv2V(=7h0*193XQ{)u4w1PX&*uuKeFK1gOFSSEpO89xI9
z$5e1}o55xX3b$!sWd&?&L9U(&<`lAh0ma;GFsF#^Jt*epgE_^Vpt6@;nInmrfngiS
zH&Z}~n}P2U9|Hrs8Xq4o14Ar31A_vmwFoFx@}1;jVBoChDHCE~02Q%(M}!y{I2(Cc
zpt*pLmxqCYvxz@Sh=Jh?4+DdM9XA65XA8KL`6V!$iGhK$70mf7um+^14b1r{P|3)^
zz}XJwd=lVcVPN3w0CPSIXmT<zaCU+@Uj-yN7#KLaz?^Ra6G6(l!JO{`o0%CHID5dH
zKLVgle4M>t&JTe~kg`57=cj-n0|NtRKbZ4R;1nAJ1Lp)VXN|xVkaH%2IlBecfh?T_
z=A07XV`X6AoDAli7T^YXVH%ioM#vVVX9l?32CX&{dIs{vOfVm`Xoo>=6*mI|%MwOz
zPzy$$WeFtjGRU#9GBB_#W#l#lXX&Ld;n&Oz3@pnSxjn$b%V5ImSQr>smNRn4gN2vF
zgm3UOFtDs(<SqjXuYd`A@-Q&4tYqY#1{Pk)s17PF<XP537z}c~0t^f+s~EZ0g5_7i
zw1MW;SXMJ~9{~%mh6(q98t!Wtxo?Ao*T96Ab22cntYzf>1QuQk6J7_ZTGughgNi|U
zmUWD}AiEi48JP+>85k5fWO*1EWEt6t_!$_u#dsJPlvr3Z^GX=FK?zBggI$*eqzF_;
zD}!74vK*{3U>zKp{0t1TOzf$G3=Fay>>4Z#3@T4S#3vB(A4Kr5GBBt}fe0-SVFe=Q
zfrzyrVmF95$qF(aoS3=9ML^}R0+)mcs1jG;k`w_IQ>wzCl6f;fNKRExh=GA?J0Hkx
zszE#q3|zYeuJM3O0LiMn02>CXuoXE#`9cv~->E5bd<JzDSh*M&RD?hTsL!CH17cZ%
z2saQB3?dRhL@tP^0uiA0fyxvRYaxhO2O@TZh!Y?JR7$8k0<k`EF)*le^9j1MGcag`
zvVsDV3zW||nPCGr42*(|s(ixS%zV;(0^$q|OqPtyd{*4n+?L#o!VC<|ER4*2cHG?D
zp27%077YewJ{eFgFU-iy$IXq9VdG_h>Gl-1;AUW8*JHGogbC&G*+`}cgN)^1W$+X>
zkz`=t#FS@X-~!1qFmS6ecnUKx@Q5Lq$-uxX#=y)0u@NN8X9Aba<MR}@m$Z>&VBj|e
z>l8r9c?#P|f?O<!CdA6XAcQ8w#=szqCdAIbAOaO)wd4ky#mc}SiYCO(z#xVu#LK`S
zju1jPP=Xi96QFRCL=HHRCqRysLJb^{y`aF8)?+{pQ;;wNgAArx1_oIb25xRUZe~6P
z203WFvO?lj-ipDB+nUvqTSAzDL4gCr;f8P&`58d5&A^}p)y%=bpez6tQ!!z17iM5k
zh5Csb6c`}aGBButM%dKBra}$UKvl#98VZYL1Z}Pa_j?$B^YJn;GBScjxIjG@Jw1Im
zDlSR}ZBQ>x%*!mvtV%7?hqL07^K*0a^BCYt_4M>HRD<^8GB6<Yq~#>07wcu_C4*K8
zpbKZ93MQ81=Vm7Bp^0YZm82HsCFaDZq^1?4OG2E4E(+d*TT+ymoC=WvIVv9Fk_^yx
zdL%x`WlRhVU=f&2dI&{ep|r&0)Oau}FEIy6vY;pxwDVXmIT>UqLq=j=N=|BgVp4ul
z2}41CW^sOAd_iJSNoHaWLvCUPY)^1nW=>9gF=%gXwqtQ(o+s3M9;t~1zKQ9X$qb-X
zCCP~;`9<-$iIvd3!SQ*eIXRH+#_`FyDLI*WsSIEjC8rjE_7j7*KBuH6m8LVqNBJ2V
z#>d0M+R)G$9B*!*n6PlpFQ{}Y%FlHT@(wnL$53o!TwIc0P?C{ao?n!c5)Tf;qWFT$
z6juhYYlA_%n?s9J9n(rui-ME$3sNC&28)M)LYyJQ(LLTdG&scH7sGTz3%}Cbq|_q+
zH0OZOV&}x<jMNlY&{pK+(v*CL+|0cA(!?UrUgP9!a0tcc<fnu7b!US2Oc!P5r9-wj
z7sJ9jGe5Z`2gzl=nJGc3DOLG-P-lf_=H!GHr@AE;mxSh(XXd4#23lT9X#oQc4>Kf}
z78RxDmBg2&7A55uXO>hllopf}F=Pj&mSh&Crht9yR+N|vwF<KL8oD7I5>^?BDf#8@
zi3JSV9^j-AoSB}NnB!WJoKsqyS(eI>k(g5wpPv_>T2z!@!~jYC@uiu0CB{baB}gvK
zP0h_s&1FD}MwtJLGt-kwiy6`qi%a55!5##emzG$Pm;;W7P(N=!|8PG@2!T?VTTv?1
zz44F~4N5<m`FRY<IjNwa2Rk`FH#e~$z9ge4wKyX`Ck48FJ|3KKlPXJ6LGkL1n#K&k
z!2wPHrU9T$@vdbI*$6S;#0romoO+y1K<a%HD}qzg{StFi86f!@l4s*n^7BeSyX8Sf
zm_hdUn}Sobp<!@piA!o)VrfoEv1=JPmx1=;L!1iEW6(@loS9xylvn`XsSl9_djuR$
z&iQ#IndznZrNtmtVrE`yk-xtaBwZu&SV>NCe0pk0d}2xpXp?+uabg|=bUS}?eqIS!
zTYP?5YEfEFemNw-!Tt}*OwTAmNt8MHdFcvZqBO5KGd(XgMFG^d0vB4492cLKUzD3z
z!T`>GNC~01q^KaND4U@uwIBytCKYAoK`e6zpACRw5!iR3#i>OB;KC?1#WyuKzo-)8
zv-tQNkQcxSHomwtH#f1U5*&b7vLGxFQ`5^BU<C+6S!z*cS|#MPg`CX1?D+hmlvGgA
zq@;li23zh3I(H!v90U+sGg1=^;tPuM(=u~X8M0kL3EwxhxHvIA)u}WsEwv~ZR4yVF
zUJUW^Ir+(nIS^~01ug@)hy|r|XwJ#W$u9>-j1jnCBv?V|gNu8pX`tdeqa-&cJ~_WE
z9&&61Jb;Tq89qF}C<Wv$&pfBhl46FO{Pg(Liqv?}qCKRt8kFve;}i2zpe1%OxX1=M
zvM3c?qQ_UI7UeTQ&bvrSO-wGyEK4j&O<_n$P0lY$EJ+0gOLBZ}VgbB#E6z;M%*kO$
zDa|d2&&(?>DJo3{pCSQDy2Y@>m!DD;UzVAllL(Rm<q*_NW*!Wy$V2k;b3l2^l>v0{
zL~deA88~BsOlQajm&HDrd8r_eLK2i?QBh*0bAEnyCbYyrD`g-@T)>=>nOByWlbI4<
zkPpr>@db&QMeu_vilM~{IQhk=ROTh-W+sCpEVa0p0a9{;YSK*5nG;}-Kob)z;bo?$
z6{Ip0mL?V@=9OgTrGje*2KUsGfTGm0%>2?~PekwpBr_Bg<wMTdfY_U!Sik@-(sD9$
zGfU!glh6xHunQPcQd3F`;!E<gQ}g0;QuESFGLW-gYF-Mu13)H$D)u5smBUb6nVXak
zIyECcGY^yy<I_OZLop;cJwfd$xc~e?c?FUsiWBodDX$>0Bm){0kdTcpEe4%_0`Y1{
zWkD)9-ikBR6LU(yWd*oqEQn9dD?``}O1YqOPhcm7WP{37Napr|cqt_lVr+7LQ7Sm@
z^HR&>Q&MwMOH$)YDhpEMVW){;rX}Qt1bWd6sx1;zpqUjdqT;iYVC^AL{)dDIxNrnF
zBZ9!EpFjcw)Oc|8@$q*?4*HU!;(|Pe;{3Fd_@d(Ccz7%(<>y0l2keBDVoXPy1SF<|
zQ#Ck=gPR)_MTwOVM?lIapVYJxi1pyK3#t-9jgS(C<itEsy@SY^VBuU$OOUERBLnx;
z62H`n5|kwAnhP#Bz>y4%UQn%(T2TUtUyMeZIY#rtl_9M(CkK{m;)@FslT#Urb5c_a
z;*(O-@{3aAQz|p_(iuQe9*|g)0gZ1&qAV+pFD|JBm%9~^CUt<bQ)UTj>m)L@7}glh
z1eH$3B}Jgt7btf^^CYxon+Pf%;*-JU0|Q1O11lDCQWLX_kxI#;)ST4B;?($({P_H0
zNDHJaF(*D3nn^%S6i{rSRAYJh@foG*sqqDg>8Zt_sxcl?o}ea?<cuP4hDa`n&rQuu
z&Mg47)WDX7<ogGEf?C;Si8+3$Wso|mI57|Gta4BU7lDec;`}^N@ImYJl+?tOoc!eM
zVuoZ;rJk4$ZuOv+tw^zMXyl$+;tXjq1|++dF{Gp>mSn^yC+6fNB_?MxfUA2@EsxY-
zL2^IT#fc@U6`3Ur@$nhupc)Ex&QD2dF{quG1L_QbPBltRiBBp`Pp<^I8ssmA<ouj`
zkngdy+zT>Oz$qdmqbM~I(r5)2@t`^YRCQ$LrDTFT8{ohzhzF(6_=2L;w9E=<cOy4H
zr8FlMR539WmlhNhr4|>*rxunb=EN5yBSI%WC9?>sp|~Wm1e_6}Z8akckY~`^av=4o
z$t5|Ju6T2kvx#efcWxFeIh7Y>mZXAe-(&{VY>gC_#U(|cYCAr@Gzk>R7&!|m){IPW
zRUxjq4DNoR3eMWvhK7(ybOqhqlG40X+w|1D)S}E}1>M}lqT~!)$l+}Yy6FnK{zeMA
z#U&}W>3OAKZMtazp3VxoX?gj&Nu`-NC7F2;PHF|Hgvrd$D~9lkN=h;nbkp*4GfQ;A
zHHI#<5>?PmgEZ=OOF%UNNO@Uiab{9xPG(7^ZANBFN-EUI%z{MS%;Yo$-L%Bw%Dm)^
zqWrx4(qdh7-Qa3N7g{^!7wHz46oJ~Jx@i!J<ebFf448CgKFI9kG$cNxU;y`{!A%EH
z)`7<(1E}4YmtT}xoLW?t$^gpvkj`3sVo5wCS)+AKjSR82@?9Cg9SBhEj!}#<WTfU4
zFu<G5-~+1=Wp-v>38*;?YHdNYb#ZEXSv;f>0Z*OKGz<!VVv=4KLwtNLC?O&2DK050
z$<JoUNli~ou8c2$R(;9&c_|<RVX58#oa(^^XJ&DHQE48icyR?6I?3@V&^95wvdxAT
z9^h&bsauJje2q-7_E*6@bWr8#;tHug<Ks&}js~~FJ@ZP668)31Qj=jF5lHO^whN=U
zMYquqDZ?0=WAvz9lNgYDx4!u)sSK$VkoqMaUilP(3l?Yr0j|fOp_Y*eI)|+iDwC6%
z4r*tCsswna57gc+$&W9tEC!DTWaJl>D8N$ys7Qr&VUiPzGV?&~Nz5?@XhF)L56Xur
z`svBZx|X^g#o1A=iBJxB`3zLL!on=x%mjKkV|rdG>Tnn+R#B@=zkG&_#G(|`wn?@x
zxY!I0^>hK3w~&e&a@-pzO+cL#Pu#(9QGU==WoUw0v4BfYn4BTVZQ#T3K*K7aJeLfL
zjciy4hM_bM)Uk)uo}iuyNC_yPLDOD9G9-tC+!v2Xv*1~60t7PyBmA6IWTnguOboDd
zJ5j}%8DQsuqKdOH)W8-*AxSVZurk2bBO(biFf*_*z}6w6inBAo)+?flb1=Zx@u7-y
zf`(#|g}`iP1}+BJIzzAklwfAyW`M0ngbINvW(Lqq8kmVfFf;HnD8Lq~A;~Z^@G&@m
zR!|{{ftbt;{0sqD#RV8(=jVdd!7wv}AOmcDC`=4QGlNd%gr4gL;=?dAgE0JjRG1iu
zW@Zp!hyd?~0`U--nL(5RK5c;zW?*IzgRe715@uj#5QncXMHQD|z_z}TnL!f19u!r*
z6zEW3WFat{8R^_fumF@`2CsF4a*!xy2JrkAk_d#!%m7;*3gN>@W(M$%Di{||Gs9Qk
z!iB&LW(L?QTrd|*fJWC@7(RlxUV#Om1ZdWli9vv20(esxRFHvz0dzDFNc;erILKs>
zIBfkeOousWVGn~eLkjdfJ&=7MIXAGlI0NjQLy#B<=Q4m+=Ls;t)+K|)K)4dDUJQPY
zB1jB`XMmRXVR1ibpC2}Vt%sTqTki~8cf1cO4qF!u-U9}<6SV3OGkng1<wO`-KpW6N
z4ne}$?7a<^7sE(zpuKa944CN+bZ#jFmUPPj4nWL&Aq|=$!IC~TK&zFo<aa|H=dpt3
zZG{*F7#yGrut6(FKu-6-p*{wOcp(n)Rz}3yaFDq$T*m|w$IM5dJ$-0N4Xg#U90{8^
z=p0Uv`@cgELj>;`WME);g2O#8!RL5N!Ou|y8xA^$5r=vwkT?@&ImW?+{k&im9O9NZ
z#QkuH$KnvLVFIn0#|*blaCpLegP><HF)#=+Nim?WcU}q-M=FOwi?2Ysw&1Y$1Xx^v
z;Rk41kAZ;!R)AatnZtxAhhb}ZpF!2%gsO*?TwkH$7oZygz<Vnh7#N;|mVGfuGh{%^
z4Uk(vxCyErR=<Gv(1O<gGlRlk06eV=QU}^|3Zey>LE(cq{}&_%!m?2HkDv?pLFo)6
zt^^imU_d_?SPv{Nzz_;uP!CIc)==>PsK3B_U>O(~Ji+216H##%GbH?B=MlqX%W$Z#
zWd`L7m?{K49jsn}Asy--@ZMYo28M;q*v~=U3$hofK7z&XORzZzbK$JyqLSj0(zG<a
zWCp~E$MGe(@yR*)d8wdL)0BMZk-hOLCHY0g@rk7sped08&?sGso`r##0YiK|7Db?Q
zdo$x9Lo=y)B}J7C;0|ScN@;FxB||)9KoY_Ow-Zs6f?JPBgW{mme)W<W;)_d@;$7km
z3=AwS;|(BOPbk-rAwJ$M$kEp|-qp_qbc!>osVNNcE|GqYzMjqupy{T}5~zLPL2!on
zcz3_hcvlao2_7y%4Ds$h{!WfQ@&0aZ!LA|kA&yQyuJMq*0q8tr@KMCc#id|x!dlRf
zA^UjHfy@@LQ;Z!PV5by=&L)OT89~SP!3s?vXG$YNKLq8xX~=8?xKj+9wKalShvhit
zl>A^&bcSb^WCTNx69CNyFvO>(B$gz?G{VLxp)m`JW{3^R&?A@;jz&L#8q`Hf#VQCo
z>KX0OXmB8bLl}HsGs09zP=K5S8pbRFjWeMh!5yDcoDc0SGsJuP#}}8RfTm=NQ&SLr
z0F6I^gV2znIJE>a34(Qw20Ek+J6|C_9_%hq<bk>u44_eGgj`ZFXlydEsDuHO=wP;i
z6~azgNX{>S^%4>Kz)2S0G1wu#&d{V;3_Ttkbj~;|Do|n_d>jPW7StoK(E|`{CsExt
z$UrXxgI;lEZb@PigC1z$08D4VSl~g00tUUj{E}3?^t@8Nf};F_)S{9~Bq4C8RW~yQ
zD&*+osS8??3s#<ySe(J2mr|KmT$u}@ONto4GSE;#;lvj)=oO{rB!V<RSp_*I40_;z
z)+@*<(M!)SVE{9VQ<E9=N>VFI81&LI^D-Iqit<4zhe0nj16qn?q!b}|40_OlBOYA%
zK#YX3K?cCs(8(VLJ&0*Z#l;MIpkW};860}x1q|_^NuKo7Vg@KTGcPS4#!gI1DoQPb
z@j!DdFg9q&4_?4h#sIZjK}|u(jv3tdhrnzBsfDpYv@!z&18A!lOh2su3!~AyW3YN0
zq!)zE(DcLl$uJtdSq!UhKzc#g6HPy?KMkYN?MK%i&cML%?f?ILnEPS<ZWs+almxta
z1!-R$$Zil$WME(b?E!@8hxN~4H0WFpkUCHpfx-^ve+iHv0|P@Q^ll57epo*qM#J_Q
zLY0Ho5W$#Wx)9W6LUKQ>zYn9)-4C+|M%OVgFo5<1!uYU#fiN1TAKm?6%NZCLdcplB
zP+too0vkVo(Xf4r=-~(R|8%H+Cx~|VI0J0F0k%&Pq#x9@Ll3`&;QkY0pC)V{DU1fC
zZ>Z5=3O)Ykpy`K=Tfk{hq=9up2-vU&j9!kWA2z-LqhabGx<PG72n!~@0Zl(_90W!S
z5U_tIntoV&7Dhh>MI6LRFbT64%wb?)0Nq0ZvH}#oATiju3XBFV9tVlTFnahMh1w5G
zKky*~XvRAVG90EE%Uv9h{x2f^;JU{KW(2zZp#Ct(3Yh({@f;X!0F!_k082kmF2hrB
z{{XaD5F!E__krDWgRUONhtZ&;Jwam`uwgvdy$wG=$KOKDhL{W?VftV+C_{seMTY5z
z?NjD}-dltoUod?z8q_}l#T`sPY`h6}?-A&HA&||mWB}6#GZ%Dk4JiCz`eFN&EubBu
z6Clk<7^WXai-N}s5a9>k7z!;o5<rF{>4zo@xCm&x0b~};epr7d0kk3>OL>c~A9ThM
z$O@=+aC2e$wcsKU21qT41*0{g?gxn><1VQE==Q<%!PJ7rInc#Ga;u>FE6_3!x>^?;
z_A5d6i|3-HUv&LJIP~{Bf?UDCkcg%Mjmr=R)sG&2AD{*DO;`sNVjL*Bf>|(gKs1^Y
z!SWYE!4!iBbb~smod6oc1I0B+23G!qq+xLn5{F?4(1kvr@e?#jkbN*UAR07mjHU!6
Q%)pThrWi8OG@x-A06jz;Jpcdz

literal 0
HcmV?d00001

diff --git a/exam2/ex4/main.c b/exam2/ex4/main.c
index 45422d4..dfd5e1c 100644
--- a/exam2/ex4/main.c
+++ b/exam2/ex4/main.c
@@ -2,28 +2,88 @@
 #include <stdlib.h>
 #include <string.h>
 
-typedef struct _element {
-  char c;
-  struct _element *next;
-} element;
-
-int main(int argc, char **argv) {
-
-  // read user input
-  char str[16];
-  scanf("%s", str);
-  int len = strlen(str);
-  // cli args
-  if (argc == 1) {
-    printf("need more arguments");
-    return EXIT_FAILURE;
+typedef struct _etudiante {
+  char *name;
+  int hash;
+} etudiante;
+
+etudiante* new_student(char* name){
+  int len=strlen(name);
+  int hash=0;
+  for(int i=0;i<len;i++){
+    hash+=(43*name[i])%len;
   }
+  etudiante *etu=malloc(sizeof(etudiante));
+  etu->name=name;
+  etu->hash=hash;
+  return etu;
+}
+
+etudiante* shallow_copy(etudiante* stu){
+  return stu;
+}
+
+etudiante* deep_copy(etudiante* stu){
+  etudiante *etu=malloc(sizeof(etudiante));
+  etu->name=stu->name;
+  etu->hash=stu->hash;
+  return etu;
+}
+
+void print_student(etudiante* stu){
+  printf("%s, %d\n",stu->name,stu->hash);
+}
 
-  for (int i = 0; i < argc; i++) {
-    if (!strcmp(argv[i], "-c")) {
-      // do stuff with atof/atoi (argv[++i])
-    }
+void delete_student(etudiante* stu){
+  free(stu);
+}
+
+void set_name(etudiante* stu,char* newName){
+  int len=strlen(newName);
+  int hash=0;
+  for(int i=0;i<len;i++){
+    hash+=(43*newName[i])%len;
   }
 
+  stu->name=newName;
+  stu->hash=hash;
+}
+
+void doStuffWithStudent(char* name){
+  printf("welcome %s\n",name);
+
+  etudiante *s = new_student(name);
+  print_student(s);
+
+  etudiante* s_deep = deep_copy(s);
+  set_name(s_deep, "deep_student");
+
+  print_student(s_deep);
+  print_student(s);
+
+  etudiante* s_shallow = shallow_copy(s);
+  set_name(s_shallow, "shallow_student");
+
+  print_student(s);
+  print_student(s_deep);
+  print_student(s_shallow);
+
+  //free the students !
+  delete_student(s);
+  delete_student(s_deep);
+  printf("\n");
+}
+
+int main() {
+
+  char name1[40];
+  char name2[40];
+  scanf("%s", name1);
+  scanf("%s", name2);
+
+  doStuffWithStudent(name1);
+  doStuffWithStudent(name2);
+  
+ 
   return EXIT_SUCCESS;
 }
\ No newline at end of file
diff --git a/exam2/ex5/Makefile b/exam2/ex5/Makefile
deleted file mode 100644
index 478f28e..0000000
--- a/exam2/ex5/Makefile
+++ /dev/null
@@ -1,10 +0,0 @@
-main: main.o
-	gcc -o $@ $< -fsanitize=address -fsanitize=leak
-
-main.o: main.c 
-	gcc -c -Wall -Wextra -pedantic -fsanitize=address -fsanitize=leak $<
-
-clean:
-	rm -f *.o main
-
-rebuild: clean main
\ No newline at end of file
diff --git a/exam2/ex5/main.c b/exam2/ex5/main.c
deleted file mode 100644
index 45422d4..0000000
--- a/exam2/ex5/main.c
+++ /dev/null
@@ -1,29 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-typedef struct _element {
-  char c;
-  struct _element *next;
-} element;
-
-int main(int argc, char **argv) {
-
-  // read user input
-  char str[16];
-  scanf("%s", str);
-  int len = strlen(str);
-  // cli args
-  if (argc == 1) {
-    printf("need more arguments");
-    return EXIT_FAILURE;
-  }
-
-  for (int i = 0; i < argc; i++) {
-    if (!strcmp(argv[i], "-c")) {
-      // do stuff with atof/atoi (argv[++i])
-    }
-  }
-
-  return EXIT_SUCCESS;
-}
\ No newline at end of file
-- 
GitLab