|
|
|
@ -11,6 +11,7 @@
|
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
#include <string.h>
|
|
|
|
|
#include "un.h"
|
|
|
|
|
#include "../II/deux.c"
|
|
|
|
|
|
|
|
|
|
void titreMenuPrincipal(void) {
|
|
|
|
|
system("clear");
|
|
|
|
@ -22,10 +23,9 @@ void titreMenuPrincipal(void) {
|
|
|
|
|
printf("╚═╝ ╚═╝╚══════╝ ╚═════╝╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚══════╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ \n\n");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void menuCandidat(void) {
|
|
|
|
|
void menuCandidat(VilleIUT** tiut, int* nbVilles) {
|
|
|
|
|
int choix; // Contient le choix de l'utilisateur dans le menu
|
|
|
|
|
int nbVilles = 0;
|
|
|
|
|
VilleIUT** tiut = (VilleIUT**) malloc(sizeof(VilleIUT*));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
printf("\n-----------------------------------------------------------------------\n");
|
|
|
|
|
printf("\t1 - Consulter les ville possédant un IUT\n\n");
|
|
|
|
@ -47,15 +47,25 @@ void menuCandidat(void) {
|
|
|
|
|
case 1:
|
|
|
|
|
//system("clear");
|
|
|
|
|
printf("Consulter les ville possédant un IUT...\n\n");
|
|
|
|
|
afficherListeVilles(tiut, nbVilles);
|
|
|
|
|
afficherListeVilles(tiut, *nbVilles);
|
|
|
|
|
break;
|
|
|
|
|
case 2:
|
|
|
|
|
printf("Voir les disponibilités des départements dans un IUT...\n\n");
|
|
|
|
|
// TODO
|
|
|
|
|
printf("Saisissez le nom de la ville recherchée : ");
|
|
|
|
|
|
|
|
|
|
char searchIUT[LEN_MAX];
|
|
|
|
|
scanf("%s", searchIUT);
|
|
|
|
|
|
|
|
|
|
afficherListeDepartement(tiut, *nbVilles, searchIUT);
|
|
|
|
|
break;
|
|
|
|
|
case 3:
|
|
|
|
|
printf("Rechercher un département...\n\n");
|
|
|
|
|
// TODO
|
|
|
|
|
printf("Saisissez le nom du département recherché : ");
|
|
|
|
|
|
|
|
|
|
char searchDept[LEN_MAX];
|
|
|
|
|
scanf("%*c%[^\n]", searchDept);
|
|
|
|
|
|
|
|
|
|
afficherDepartement(tiut, *nbVilles, searchDept);
|
|
|
|
|
break;
|
|
|
|
|
case 4:
|
|
|
|
|
printf("Candidater...\n\n");
|
|
|
|
@ -84,7 +94,7 @@ void menuCandidat(void) {
|
|
|
|
|
printf("\nRetour au menu principal...\n");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void menuResponsable(void) {
|
|
|
|
|
void menuResponsable(VilleIUT** tiut, int* nbVilles) {
|
|
|
|
|
int choix;
|
|
|
|
|
|
|
|
|
|
printf("\n--------------------------------------------------------------------\n");
|
|
|
|
@ -124,7 +134,7 @@ void menuResponsable(void) {
|
|
|
|
|
printf("\nRetour au menu principal...\n");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void menuAdmin(void) {
|
|
|
|
|
void menuAdmin(VilleIUT** tiut, int* nbVilles) {
|
|
|
|
|
int choix; // Contient le choix de l'utilisateur dans le menu
|
|
|
|
|
|
|
|
|
|
printf("\n--------------------------------------------------------------------\n");
|
|
|
|
@ -145,15 +155,73 @@ void menuAdmin(void) {
|
|
|
|
|
switch (choix) {
|
|
|
|
|
case 1:
|
|
|
|
|
printf("Modifier le nombre de place d'une formation...\n\n");
|
|
|
|
|
// TODO
|
|
|
|
|
|
|
|
|
|
int nbPlaces;
|
|
|
|
|
char searchIUT[LEN_MAX], searchDept[LEN_MAX];
|
|
|
|
|
printf("Entrez une ville : ");
|
|
|
|
|
scanf("%s", searchIUT);
|
|
|
|
|
printf("Entrez un département : ");
|
|
|
|
|
scanf("%s", searchDept);
|
|
|
|
|
printf("Entrez le nouveau nombre de places pour le département '%s' : ", searchDept);
|
|
|
|
|
scanf("%d", &nbPlaces);
|
|
|
|
|
|
|
|
|
|
modifierNbPlaces(tiut, *nbVilles, searchIUT, searchDept, nbPlaces);
|
|
|
|
|
break;
|
|
|
|
|
case 2:
|
|
|
|
|
printf("Créer un nouveau département...\n\n");
|
|
|
|
|
// TODO
|
|
|
|
|
|
|
|
|
|
char searchIUT2[LEN_MAX];
|
|
|
|
|
printf("Entrez la ville dans laquelle vous souhaitez ajouter un département : ");
|
|
|
|
|
scanf("%s", searchIUT2);
|
|
|
|
|
|
|
|
|
|
VilleIUT* ville = NULL;
|
|
|
|
|
int i;
|
|
|
|
|
for(i=0; i<*nbVilles; i++)
|
|
|
|
|
if(strcmp(tiut[i]->ville, searchIUT2) == 0)
|
|
|
|
|
ville = tiut[i];
|
|
|
|
|
|
|
|
|
|
if(ville == NULL)
|
|
|
|
|
fprintf(stderr, "\e[1;91mErreur: la ville '%s' n'est pas dans la liste des IUT.\e[0m\n\n", searchIUT2);
|
|
|
|
|
else {
|
|
|
|
|
int nbP;
|
|
|
|
|
char addDept[LEN_MAX], responsable[LEN_MAX];
|
|
|
|
|
printf("Entrez le nom du nouveau département : ");
|
|
|
|
|
scanf("%*c%[^\n]", addDept);
|
|
|
|
|
printf("Entrez le nombre de place disponibles en 1ère année : ");
|
|
|
|
|
scanf("%d", &nbP);
|
|
|
|
|
printf("Entrez le nom du responsable de ce département : ");
|
|
|
|
|
scanf("%*c%[^\n]", responsable);
|
|
|
|
|
|
|
|
|
|
MaillonDept* dept = creerDepartement(addDept, nbP, responsable);
|
|
|
|
|
ville->ldept = ajouterDepartement(ville->ldept, dept);
|
|
|
|
|
|
|
|
|
|
printf("\nLe département '%s' a bien été ajouté à l'IUT '%s' !\n\n", addDept, searchIUT2);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case 3:
|
|
|
|
|
printf("Supprimer un département...\n\n");
|
|
|
|
|
// TODO
|
|
|
|
|
|
|
|
|
|
char searchIUT3[LEN_MAX];
|
|
|
|
|
printf("Entrez la ville dans laquelle vous souhaitez supprimer un département : ");
|
|
|
|
|
scanf("%s", searchIUT3);
|
|
|
|
|
|
|
|
|
|
VilleIUT* ville3 = NULL;
|
|
|
|
|
int i3;
|
|
|
|
|
for(i3=0; i<*nbVilles; i++)
|
|
|
|
|
if(strcmp(tiut[i3]->ville, searchIUT3) == 0)
|
|
|
|
|
ville3 = tiut[i3];
|
|
|
|
|
|
|
|
|
|
if(ville3 == NULL)
|
|
|
|
|
fprintf(stderr, "\e[1;91mErreur: la ville '%s' n'est pas dans la liste des IUT.\e[0m\n\n", searchIUT3);
|
|
|
|
|
else {
|
|
|
|
|
char searchDept3[LEN_MAX];
|
|
|
|
|
printf("Entrez le nom du département à supprimer : ");
|
|
|
|
|
scanf("%*c%[^\n]", searchDept3);
|
|
|
|
|
|
|
|
|
|
ville3->ldept = supprimerDepartement(ville3->ldept, searchDept3);
|
|
|
|
|
|
|
|
|
|
printf("\nLe département '%s' a bien été supprimé de l'IUT '%s' !\n\n", searchDept3, searchIUT3);
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case 4:
|
|
|
|
|
printf("Lancer/arrêter la phase de candidature...\n\n");
|
|
|
|
@ -161,22 +229,30 @@ void menuAdmin(void) {
|
|
|
|
|
break;
|
|
|
|
|
case 5:
|
|
|
|
|
printf("Modifier le nom du responsable d'un département...\n\n");
|
|
|
|
|
void modifierNomResponsable(VilleIUT** tiut, int nbVilles);
|
|
|
|
|
|
|
|
|
|
char searchIUT5[LEN_MAX], searchDept5[LEN_MAX], nom[LEN_MAX];
|
|
|
|
|
printf("Entrez une ville : ");
|
|
|
|
|
scanf("%s", searchIUT5);
|
|
|
|
|
printf("Entrez un département : ");
|
|
|
|
|
scanf("%s", searchDept5);
|
|
|
|
|
printf("Entrez le nom du nouveau responsable : ");
|
|
|
|
|
scanf("%*c%[^\n]", nom);
|
|
|
|
|
|
|
|
|
|
modifierNomResponsable(tiut, *nbVilles, searchIUT5, searchDept5, nom);
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
fprintf(stderr, "\e[0;91mErreur : la valeur entrée est invalide, merci de réessayer.\n\n\e[0m");
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
printf("\n----------------------------------------------------------------\n");
|
|
|
|
|
printf("\n--------------------------------------------------------------------\n");
|
|
|
|
|
printf("\t1 - Modifier le nombre de place d'une formation\n\n");
|
|
|
|
|
printf("\t2 - Créer un nouveau département\n\n");
|
|
|
|
|
printf("\t3 - Supprimer un département\n\n");
|
|
|
|
|
printf("\t4 - Administrateur\n\n");
|
|
|
|
|
printf("\t5 - Candidater\n\n");
|
|
|
|
|
printf("\t6 - Suivre sa candidature\n\n");
|
|
|
|
|
printf("\t4 - Lancer/arrêter la phase de candidature\n\n");
|
|
|
|
|
printf("\t5 - Modifier le nom du responsable d'un département\n\n");
|
|
|
|
|
printf("\t9 - Quitter\n");
|
|
|
|
|
printf("-----------------------------------------------------------------\n");
|
|
|
|
|
printf("---------------------------------------------------------------------\n");
|
|
|
|
|
scanf("%*c%d", &choix);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -186,6 +262,11 @@ void menuAdmin(void) {
|
|
|
|
|
void menuPrincipal(/* TODO: prise en compte des status actuels du recrutement */) {
|
|
|
|
|
int choix; // Contient le choix de l'utilisateur dans le menu
|
|
|
|
|
|
|
|
|
|
int nbVilles = 0;
|
|
|
|
|
VilleIUT** tiut;
|
|
|
|
|
|
|
|
|
|
tiut = readVilles(&nbVilles);
|
|
|
|
|
|
|
|
|
|
printf("--------------------------------------------\n");
|
|
|
|
|
printf("Vous êtes : \n");
|
|
|
|
|
printf("--------------------------------------------\n");
|
|
|
|
@ -211,7 +292,7 @@ void menuPrincipal(/* TODO: prise en compte des status actuels du recrutement */
|
|
|
|
|
printf("╚██████╗██║ ██║██║ ╚████║██████╔╝██║██████╔╝██║ ██║ ██║ \n");
|
|
|
|
|
printf(" ╚═════╝╚═╝ ╚═╝╚═╝ ╚═══╝╚═════╝ ╚═╝╚═════╝ ╚═╝ ╚═╝ ╚═╝ \n\n");
|
|
|
|
|
|
|
|
|
|
menuCandidat();
|
|
|
|
|
menuCandidat(tiut, &nbVilles);
|
|
|
|
|
titreMenuPrincipal();
|
|
|
|
|
break;
|
|
|
|
|
case 2:
|
|
|
|
@ -223,7 +304,7 @@ void menuPrincipal(/* TODO: prise en compte des status actuels du recrutement */
|
|
|
|
|
printf("██║ ██║██████╔╝██║ ╚═╝ ██║██║██║ ╚████║██║███████║ ██║ ██║ ██║██║ ██║ ██║ ███████╗╚██████╔╝██║ ██║\n");
|
|
|
|
|
printf("╚═╝ ╚═╝╚═════╝ ╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝╚═╝╚══════╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚══════╝ ╚═════╝ ╚═╝ ╚═╝\n\n");
|
|
|
|
|
|
|
|
|
|
menuAdmin();
|
|
|
|
|
menuAdmin(tiut, &nbVilles);
|
|
|
|
|
titreMenuPrincipal();
|
|
|
|
|
break;
|
|
|
|
|
case 3:
|
|
|
|
@ -235,7 +316,7 @@ void menuPrincipal(/* TODO: prise en compte des status actuels du recrutement */
|
|
|
|
|
printf("██║ ██║███████╗███████║██║ ╚██████╔╝██║ ╚████║███████║██║ ██║██████╔╝███████╗███████╗\n");
|
|
|
|
|
printf("╚═╝ ╚═╝╚══════╝╚══════╝╚═╝ ╚═════╝ ╚═╝ ╚═══╝╚══════╝╚═╝ ╚═╝╚═════╝ ╚══════╝╚══════╝\n\n");
|
|
|
|
|
|
|
|
|
|
menuResponsable();
|
|
|
|
|
menuResponsable(tiut, &nbVilles);
|
|
|
|
|
titreMenuPrincipal();
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
@ -287,25 +368,35 @@ ListeDept creerListeDepartement(void) {
|
|
|
|
|
return NULL;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void afficherListeDepartement(VilleIUT ville) {
|
|
|
|
|
if(ville.ldept == NULL)
|
|
|
|
|
fprintf(stderr, "Erreur: la ville '%s' ne contient aucun département\n", ville.ville);
|
|
|
|
|
else {
|
|
|
|
|
ListeDept search = ville.ldept;
|
|
|
|
|
void afficherListeDepartement(VilleIUT** tiut, int nbVilles, char* searchIUT) {
|
|
|
|
|
int i, foundIUT=0;
|
|
|
|
|
|
|
|
|
|
printf("Départements disponibles dans la ville '%s' :\n", ville.ville);
|
|
|
|
|
for(i=0; i<nbVilles; i++) {
|
|
|
|
|
if(strcmp(tiut[i]->ville, searchIUT) == 0) {
|
|
|
|
|
foundIUT = 1;
|
|
|
|
|
ListeDept ldept = tiut[i]->ldept;
|
|
|
|
|
|
|
|
|
|
while (search != NULL) {
|
|
|
|
|
printf(" - %s, %d places disponibles\n", search->departement, search->nbP);
|
|
|
|
|
search = search->suiv;
|
|
|
|
|
if(ldept == NULL)
|
|
|
|
|
fprintf(stderr, "\n\e[1;91mErreur: la ville '%s' ne contient aucun département\e[0m\n\n", tiut[i]->ville);
|
|
|
|
|
else {
|
|
|
|
|
printf("\nDépartements disponibles dans la ville '%s' :\n", tiut[i]->ville);
|
|
|
|
|
|
|
|
|
|
while (ldept != NULL) {
|
|
|
|
|
printf(" - %s, %d places disponibles\n", ldept->departement, ldept->nbP);
|
|
|
|
|
ldept = ldept->suiv;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
printf("\n\n");
|
|
|
|
|
printf("\n");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(foundIUT == 0)
|
|
|
|
|
fprintf(stderr, "\n\e[1;91mErreur: l'IUT '%s' n'existe pas !\e[0m\n\n", searchIUT);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void afficherDepartement(VilleIUT** tiut, int nbVilles, char* searchDept) {
|
|
|
|
|
printf("Liste des IUT contenant le département '%s':\n\n", searchDept);
|
|
|
|
|
printf("\nListe des IUT contenant le département '%s':\n\n", searchDept);
|
|
|
|
|
|
|
|
|
|
int i, nb=0;
|
|
|
|
|
for(i=0; i<nbVilles; i++) {
|
|
|
|
@ -330,7 +421,7 @@ void afficherDepartement(VilleIUT** tiut, int nbVilles, char* searchDept) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(nb == 0)
|
|
|
|
|
printf(" \e[0;91mAucun IUT ne contient ce département !\e[0m\n");
|
|
|
|
|
fprintf(stderr, " \e[1;91mAucun IUT ne contient ce département !\e[0m\n");
|
|
|
|
|
|
|
|
|
|
printf("\n\n");
|
|
|
|
|
}
|
|
|
|
@ -417,17 +508,7 @@ void modifierNbPlaces(VilleIUT** tiut, int nbVilles, char* searchIUT, char* sear
|
|
|
|
|
fprintf(stderr, "\e[1;91mErreur: le département '%s' n'a pas été trouvé dans l'IUT '%s'\e[0m\n\n", searchDept, searchIUT);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void modifierNomResponsable(VilleIUT** tiut, int nbVilles){
|
|
|
|
|
char searchIUT[LEN_MAX];
|
|
|
|
|
char searchDept[LEN_MAX];
|
|
|
|
|
char nom[LEN_MAX];
|
|
|
|
|
printf("Entrez une ville:\t");
|
|
|
|
|
scanf("%s", searchIUT);
|
|
|
|
|
printf("Entrez un département:\t");
|
|
|
|
|
scanf("%s", searchDept);
|
|
|
|
|
printf("Entrez le nom du nouveau responsable:\t");
|
|
|
|
|
scanf("%s[^\n]", nom);
|
|
|
|
|
|
|
|
|
|
void modifierNomResponsable(VilleIUT** tiut, int nbVilles, char* searchIUT, char* searchDept, char* nom) {
|
|
|
|
|
int i, foundIUT=0, foundDept=0;
|
|
|
|
|
for(i=0; i<nbVilles; i++) {
|
|
|
|
|
if(strcmp(tiut[i]->ville, searchIUT) == 0) {
|
|
|
|
@ -437,7 +518,7 @@ void modifierNomResponsable(VilleIUT** tiut, int nbVilles){
|
|
|
|
|
if(ldept != NULL) {
|
|
|
|
|
if(strcmp(ldept->departement, searchDept) == 0) {
|
|
|
|
|
strcpy(ldept->responsable, nom);
|
|
|
|
|
printf("Le responsable de la formation '%s' à l'IUT '%s' est désormais '%s'\n\n", searchDept, searchIUT, ldept->responsable);
|
|
|
|
|
printf("\nLe responsable de la formation '%s' à l'IUT '%s' est désormais '%s'.\n\n", searchDept, searchIUT, ldept->responsable);
|
|
|
|
|
foundDept = 1;
|
|
|
|
|
} else {
|
|
|
|
|
ListeDept search = ldept;
|
|
|
|
@ -445,7 +526,7 @@ void modifierNomResponsable(VilleIUT** tiut, int nbVilles){
|
|
|
|
|
while(search->suiv != NULL) {
|
|
|
|
|
if(strcmp(ldept->departement, searchDept) == 0) {
|
|
|
|
|
strcpy(search->responsable, nom);
|
|
|
|
|
printf("Le responsable de la formation '%s' à l'IUT '%s' est désormais '%s'\n\n", searchDept, searchIUT, search->responsable);
|
|
|
|
|
printf("\nLe responsable de la formation '%s' à l'IUT '%s' est désormais '%s'.\n\n", searchDept, searchIUT, search->responsable);
|
|
|
|
|
foundDept = 1;
|
|
|
|
|
}
|
|
|
|
|
search = search->suiv;
|
|
|
|
@ -458,10 +539,10 @@ void modifierNomResponsable(VilleIUT** tiut, int nbVilles){
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(foundIUT == 0)
|
|
|
|
|
fprintf(stderr, "\e[1;91mErreur: l'IUT '%s' n'a pas été trouvé !\e[0m\n\n", searchIUT);
|
|
|
|
|
fprintf(stderr, "\n\e[1;91mErreur: l'IUT '%s' n'a pas été trouvé !\e[0m\n\n", searchIUT);
|
|
|
|
|
else
|
|
|
|
|
if(foundDept == 0)
|
|
|
|
|
fprintf(stderr, "\e[1;91mErreur: le département '%s' n'a pas été trouvé dans l'IUT '%s'\e[0m\n\n", searchDept, searchIUT);
|
|
|
|
|
fprintf(stderr, "\n\e[1;91mErreur: le département '%s' n'a pas été trouvé dans l'IUT '%s'.\e[0m\n\n", searchDept, searchIUT);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void saveVilles(VilleIUT* tiut[], int nbVilles) {
|
|
|
|
@ -576,7 +657,7 @@ void test(void) {
|
|
|
|
|
|
|
|
|
|
tiut = ajouterVille(tiut, clermont, &nbVilles);
|
|
|
|
|
|
|
|
|
|
afficherListeDepartement(*clermont);
|
|
|
|
|
//afficherListeDepartement(*clermont);
|
|
|
|
|
|
|
|
|
|
MaillonDept* departement = creerDepartement("Informatique", 136, "Simon Carine");
|
|
|
|
|
tiut[0]->ldept = ajouterDepartement(tiut[0]->ldept, departement);
|
|
|
|
@ -587,7 +668,7 @@ void test(void) {
|
|
|
|
|
departement = creerDepartement("Testeuuu", 1337, "IDK");
|
|
|
|
|
tiut[0]->ldept = ajouterDepartement(tiut[0]->ldept, departement);
|
|
|
|
|
|
|
|
|
|
afficherListeDepartement(*clermont);
|
|
|
|
|
//afficherListeDepartement(*clermont);
|
|
|
|
|
|
|
|
|
|
saveVilles(tiut, nbVilles);
|
|
|
|
|
|
|
|
|
@ -598,7 +679,7 @@ void test(void) {
|
|
|
|
|
|
|
|
|
|
tiut2 = readVilles(&nbVilles2);
|
|
|
|
|
|
|
|
|
|
afficherListeDepartement(*tiut2[0]);
|
|
|
|
|
//afficherListeDepartement(*tiut2[0]);
|
|
|
|
|
|
|
|
|
|
VilleIUT* grenoble = creerVille();
|
|
|
|
|
strcpy(grenoble->ville, "Grenoble");
|
|
|
|
@ -615,13 +696,13 @@ void test(void) {
|
|
|
|
|
|
|
|
|
|
tiut2[0]->ldept = supprimerDepartement(tiut2[0]->ldept, "Testeuuu");
|
|
|
|
|
|
|
|
|
|
afficherListeDepartement(*tiut2[0]);
|
|
|
|
|
//afficherListeDepartement(*tiut2[0]);
|
|
|
|
|
|
|
|
|
|
modifierNbPlaces(tiut2, nbVilles2, "Clermond Ft", "Informatique", 140);
|
|
|
|
|
|
|
|
|
|
afficherListeDepartement(*tiut2[1]);
|
|
|
|
|
//afficherListeDepartement(*tiut2[1]);
|
|
|
|
|
|
|
|
|
|
modifierNomResponsable(tiut2, nbVilles2);
|
|
|
|
|
//modifierNomResponsable(tiut2, nbVilles2);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|