From 45b0dc6f0a54802774ae4fa655eb6e4e17afd5ae Mon Sep 17 00:00:00 2001 From: rita Date: Thu, 14 Dec 2023 09:39:03 +0400 Subject: [PATCH] mashkova_margarita_lab_3 ready --- mashkova_margarita_lab_3/README.md | 206 +++++++++++++++ mashkova_margarita_lab_3/build_images.png | Bin 0 -> 14891 bytes mashkova_margarita_lab_3/containers.png | Bin 0 -> 40893 bytes mashkova_margarita_lab_3/docker-compose.yml | 58 +++++ .../groupe-service/.gitignore | 37 +++ .../groupe-service/Dockerfile | 7 + .../groupe-service/build.gradle | 37 +++ .../groupe-service/gradlew | 240 ++++++++++++++++++ .../groupe-service/gradlew.bat | 91 +++++++ .../groupe-service/settings.gradle | 2 + .../java/org/example/GroupeApplication.java | 11 + .../example/controller/GroupeController.java | 45 ++++ .../main/java/org/example/dto/GroupeDto.java | 9 + .../java/org/example/mapper/GroupeMapper.java | 12 + .../main/java/org/example/model/Groupe.java | 20 ++ .../example/repository/GroupeRepository.java | 7 + .../org/example/service/GroupeService.java | 47 ++++ .../src/main/resources/application.yml | 11 + mashkova_margarita_lab_3/images.png | Bin 0 -> 15187 bytes .../nginx-conf/nginx.conf | 18 ++ mashkova_margarita_lab_3/results.png | Bin 0 -> 98520 bytes .../student-service/.gitignore | 37 +++ .../student-service/Dockerfile | 7 + .../student-service/build.gradle | 37 +++ .../student-service/gradlew | 240 ++++++++++++++++++ .../student-service/gradlew.bat | 91 +++++++ .../student-service/settings.gradle | 2 + .../java/org/example/StudentApplication.java | 11 + .../example/controller/StudentController.java | 49 ++++ .../java/org/example/dto/GroupeInfoDto.java | 9 + .../main/java/org/example/dto/StudentDto.java | 11 + .../java/org/example/dto/StudentInfoDto.java | 11 + .../org/example/mapper/StudentMapper.java | 12 + .../main/java/org/example/model/Student.java | 24 ++ .../example/repository/StudentRepository.java | 7 + .../org/example/service/StudentService.java | 79 ++++++ .../src/main/resources/application.yml | 11 + 37 files changed, 1496 insertions(+) create mode 100644 mashkova_margarita_lab_3/README.md create mode 100644 mashkova_margarita_lab_3/build_images.png create mode 100644 mashkova_margarita_lab_3/containers.png create mode 100644 mashkova_margarita_lab_3/docker-compose.yml create mode 100644 mashkova_margarita_lab_3/groupe-service/.gitignore create mode 100644 mashkova_margarita_lab_3/groupe-service/Dockerfile create mode 100644 mashkova_margarita_lab_3/groupe-service/build.gradle create mode 100644 mashkova_margarita_lab_3/groupe-service/gradlew create mode 100644 mashkova_margarita_lab_3/groupe-service/gradlew.bat create mode 100644 mashkova_margarita_lab_3/groupe-service/settings.gradle create mode 100644 mashkova_margarita_lab_3/groupe-service/src/main/java/org/example/GroupeApplication.java create mode 100644 mashkova_margarita_lab_3/groupe-service/src/main/java/org/example/controller/GroupeController.java create mode 100644 mashkova_margarita_lab_3/groupe-service/src/main/java/org/example/dto/GroupeDto.java create mode 100644 mashkova_margarita_lab_3/groupe-service/src/main/java/org/example/mapper/GroupeMapper.java create mode 100644 mashkova_margarita_lab_3/groupe-service/src/main/java/org/example/model/Groupe.java create mode 100644 mashkova_margarita_lab_3/groupe-service/src/main/java/org/example/repository/GroupeRepository.java create mode 100644 mashkova_margarita_lab_3/groupe-service/src/main/java/org/example/service/GroupeService.java create mode 100644 mashkova_margarita_lab_3/groupe-service/src/main/resources/application.yml create mode 100644 mashkova_margarita_lab_3/images.png create mode 100644 mashkova_margarita_lab_3/nginx-conf/nginx.conf create mode 100644 mashkova_margarita_lab_3/results.png create mode 100644 mashkova_margarita_lab_3/student-service/.gitignore create mode 100644 mashkova_margarita_lab_3/student-service/Dockerfile create mode 100644 mashkova_margarita_lab_3/student-service/build.gradle create mode 100644 mashkova_margarita_lab_3/student-service/gradlew create mode 100644 mashkova_margarita_lab_3/student-service/gradlew.bat create mode 100644 mashkova_margarita_lab_3/student-service/settings.gradle create mode 100644 mashkova_margarita_lab_3/student-service/src/main/java/org/example/StudentApplication.java create mode 100644 mashkova_margarita_lab_3/student-service/src/main/java/org/example/controller/StudentController.java create mode 100644 mashkova_margarita_lab_3/student-service/src/main/java/org/example/dto/GroupeInfoDto.java create mode 100644 mashkova_margarita_lab_3/student-service/src/main/java/org/example/dto/StudentDto.java create mode 100644 mashkova_margarita_lab_3/student-service/src/main/java/org/example/dto/StudentInfoDto.java create mode 100644 mashkova_margarita_lab_3/student-service/src/main/java/org/example/mapper/StudentMapper.java create mode 100644 mashkova_margarita_lab_3/student-service/src/main/java/org/example/model/Student.java create mode 100644 mashkova_margarita_lab_3/student-service/src/main/java/org/example/repository/StudentRepository.java create mode 100644 mashkova_margarita_lab_3/student-service/src/main/java/org/example/service/StudentService.java create mode 100644 mashkova_margarita_lab_3/student-service/src/main/resources/application.yml diff --git a/mashkova_margarita_lab_3/README.md b/mashkova_margarita_lab_3/README.md new file mode 100644 index 0000000..ca6d7fb --- /dev/null +++ b/mashkova_margarita_lab_3/README.md @@ -0,0 +1,206 @@ +# Лабораторная работа №3 +## ПИбд-42 Машкова Маргарита +## Задание +1. Создать 2 микросервиса, реализующих CRUD на связанных сущностях. +2. Реализовать механизм синхронного обмена сообщениями между микросервисами. +3. Реализовать шлюз на основе прозрачного прокси-сервера nginx. + +## Запуск программы +В директории с файлом `docker-compose.yml` выполнить команду: +``` +docker-compose up -d +``` + +## Описание работы программы + +### 2 микросервиса, реализующих CRUD на связанных сущностях: + +#### Описание сущностей: +- `Groupe` - группа в университете, содержит 2 атрибута: id и name. + +P.S. Слово `group` специально написано неправильно, т.к. такое слово зарезервиравано в СУБД :) +- `Student` - студент, сущность содержит 4 атрибута: id, name, surname, groupeId. + +Соответственно сущности связаны один (группа) - ко многим (студенты). + +Данные микросервисы, выполняющие CRUD операции над сущностями, реализованы при помощи фреймворка `spring`. + +### Реализация механизма синхронного обмена сообщениями между микросервисами: +Реализуется при помощи `RestTemplate`. При получении информации о студенте или о всех студентах отправляется GET запрос +к сервису `groupe-service`, чтобы получить информацию о группе, в которой учится студент. +``` +private final RestTemplate restTemplate = new RestTemplate(); +private final String URL = "http://groupe-service:8080/groupe/"; + +public StudentInfoDto findStudentInfo(Integer id){ + Student student = studentRepository.findById(id) + .orElseThrow(() -> new RuntimeException(String.format("Student with id %s was not found", id))); + + GroupeInfoDto group = restTemplate.getForObject(URL + student.getGroupeId(), GroupeInfoDto.class); + + StudentInfoDto studentInfoDto = new StudentInfoDto(); + studentInfoDto.setId(id); + studentInfoDto.setName(student.getName()); + studentInfoDto.setSurname(student.getSurname()); + studentInfoDto.setGroupeInfoDto(group); + + return studentInfoDto; + } +``` + + +### Файл конфигурации `docker-compose.yml`: +Для обеспечения работы прокси-сервера nginx в качестве шлюза, необходимо чтобы все управляемые им сервисы находились +в одной сети типа "мост": +``` +networks: + my-network: + driver: bridge +``` + +#### Настройка сервисов: + +Для сервиса БД `db-university` используется образ postgres. Также указывается порт взаимодействия, +переменные окружения - логин, пароль для учетной записи в postgres и имя БД. Сервис добавлятся в созданную сеть. +Опция `restart: always` означает, что docker-compose перезапустит контейнер, если тот вдруг остановится. +``` +db-university: +image: postgres:latest +container_name: db-university +ports: + - 5432:5432 +environment: + POSTGRES_PASSWORD: admin + POSTGRES_USER: admin + POSTGRES_DB: university +restart: always +networks: + - my-network +``` +Для сервисов `groupe-service` и `student-service` используются образы приложений, созданные при помощи Dockerfile. +Также указывается порт взаимодействия, зависимость от сервиса БД (контейнер микросервиса запускается только +после запуска контейнера БД). +Сервис добавлятся в созданную сеть. +Опция `restart: always` означает, что docker-compose перезапустит контейнер, если тот вдруг остановится. +``` + groupe-service: + build: + context: . + dockerfile: ./groupe-service/Dockerfile + container_name: groupe-service + ports: + - 8080:8080 + restart: always + depends_on: + - db-university + networks: + - my-network + + student-service: + build: + context: . + dockerfile: ./student-service/Dockerfile + container_name: student-service + ports: + - 8081:8081 + restart: always + depends_on: + - db-university + networks: + - my-network +``` + +### Dockerfile сервиса `groupe-service`: +Используется базовый образ openjdk:17-jdk. Задается рабочая директория /app. В нее копируется jar файл приложения. +Указывается порт, на котором работает приложение. Запуск программы осуществляется посредством запуска jar файла. + +``` +FROM openjdk:17-jdk + +WORKDIR /app +COPY ./groupe-service/build/libs/groupe-service-1.0-SNAPSHOT.jar /app/groupe-service-1.0-SNAPSHOT.jar +EXPOSE 8080 + +CMD ["java", "-jar", "groupe-service-1.0-SNAPSHOT.jar"] +``` + +### Dockerfile сервиса `student-service`: +Структура аналогична Dockerfile сервиса `groupe-service`. +``` +FROM openjdk:17-jdk + +WORKDIR /app +COPY ./student-service/build/libs/student-service-1.0-SNAPSHOT.jar /app/student-service-1.0-SNAPSHOT.jar +EXPOSE 8081 + +CMD ["java", "-jar", "student-service-1.0-SNAPSHOT.jar"] +``` + + +### Реализация шлюза на основе прозрачного прокси-сервера nginx: + +Для сервиса `nginx` используется образ nginx, указывается порт взаимодействия. +`volumes` указывает, что при запуске контейнера, локальный файл конфигураций nginx.conf следует поместить вместо +стандартного файла конфигураций nginx, а `depends_on` указывает, что данный прокси-сервер зависит от обоих сервисов +и разворачивается только после их запуска. + +``` + nginx: + image: nginx + container_name: nginx + ports: + - "80:80" + networks: + - my-network + volumes: + - ./nginx-conf:/etc/nginx/conf.d + depends_on: + - groupe-service + - student-service +``` + +### Файл конфигурации `nginx.conf`: +Данная конфигурация позволяет перенаправлять запросы, начинающиеся с `/groupe-service/` на сервер +groupe-service на порту 8080, а запросы, начинающиеся с `/student-service/`, на сервер student-service на порту 8081. +Заголовки запроса также передаются и устанавливаются соответствующие значения для Host и X-Forwarded-Prefix. +Заголовок Host будет установлен в значение $host, заголовок X-Forwarded-Prefix - в значение `/student-service` или +`/groupe-service`. +``` +server { + listen 80; + + location /groupe-service/ { + proxy_pass_request_headers on; + proxy_set_header Host $host; + proxy_set_header X-Forwarded-Prefix '/groupe-service'; + proxy_pass http://groupe-service:8080/; + } + + location /student-service/ { + proxy_pass_request_headers on; + proxy_set_header Host $host; + proxy_set_header X-Forwarded-Prefix '/student-service'; + proxy_pass http://student-service:8081/; + + } +} +``` + +## Запуск сервисов + +### Результат выполнения команды `docker-compose up -d`: +![Вывод в консоли](build_images.png) + +### Созданные образы: +![Созданные образы](images.png) + +### Созданные контейнеры: +![Созданные контейнеры](containers.png) + +### Результаты синхронного обмена сообщениями между микросервисами: +При получения списка студентов, сервис `student-service` обращается к сервису `groupe-service`, +чтобы отобразить данные группы. +![results](results.png) + +Ссылка на видео: +https://youtu.be/BCF0Lxc6veo \ No newline at end of file diff --git a/mashkova_margarita_lab_3/build_images.png b/mashkova_margarita_lab_3/build_images.png new file mode 100644 index 0000000000000000000000000000000000000000..6520715e4248bba0edacfeaeb50adf90a5f1c0f8 GIT binary patch literal 14891 zcmbumcUTkcy0`74h@poXnp72#-lP)XA#e0q&)RFRwf6Vz^}hdbWR5vzn9P08o%1?>*F>v7QzF8r#lLam2GL_>`R6xo z`~k;)js)Oh|At@b^W3;0cKldgR?Ej^FT+=t?s3Zc#)CSe^_n-*x5lOB$H&J9C8QQN(xQfv1nR6F z;I?jEA4xDN^nQ)%@ArAh%6fd=&~f>p;}2ONj_f^74EGg5C=(!5`GGP3FO(@NF9MqI zYt!BWnxNewyAX>}_c_G*6xZ|O362VeQa`(u*DE2@MT*z$<@14krrd1eUBF}%_K2u^ zIsk_SW|z(TWB8m2?@e9vWZ&hlGHI_$>?j}xrCw0zjUdZ9^=O}em`p@Fh&+#1Kj$T~ zv`M(0HBCJ6P*A1CUXOXk1>|DWHq%UqYj2X3fZ5XP1?t+gKllvu!aWN^?(PhhHK_Nb zWBbEWztR&U<=#dD`;MCxR<=>GbQRfOtO65z*6F^_;{UMvHSA3m_M+4;)}eeYRrDOb zUi;ehOe+n+vd%6eB712W_v$~)b+!DsHwjktdott}Ix+aiD*Bo!$0`1A2XZmj&R_Aa z3Z?V}FxI;fGEeyP4T(jzR_Q9QSecjJq=ETdh1a_JZ42)=q5bX)U`9j|&VFVkB6k@R z#^=K)wDJk9w{9Aa1Vg1hwMN2NW;&k)y)%hCosE>-Gff;9d38D*EaPmWscKBl+^{pU z#=of4HKm_Na!on?6frWOh8-N+fEq}@W4`jirT;40OBdl+if_LE(<3iMJaOFzx_g9? z@#>;c*$Pc6CF_Z`MF7{Udb%mYM{rht51DedFZQ({cjqttn-9(AF4+! z>N{*U!s~?h&`XY~nM;D6JAn z%Ni6Al{PX?=VJVDm{sKrHozgMM;?z|0|*lU}d^6-2CKD#*?9ju<&6qO~gUMcp-&qHf>a?}+dG z4H*88vcvf6F*$Z%s=7h&PaO;=#<`Lh((ps2kbJ;MHGnJGjpQgR!5{s6h(AkZJGnz{ zA>#x8cnbmT9*1*HN8tr=-5E z+`{j{QmhgevmI!|w5~2YBe7+=*F#q@nz-q2(t*@Ga#7LixydVr8@1(GG^WefR$GKU zQiSC;grGhe`*Qvl0ZS0#2{sm}jq`^rRZ_U|?tT!wi{QzS zBpLi|mm?GM$6yv$x(?>)2sgydjX!2*-*T-4V2&?v5|b=Ik)^QrRp0TBk628+PP|LT zcyo|-Is(m^o|bM(%>%X;)f`CB9{x#hS=4qKzH`}z&s<_ABCX50(vXgAK%wXW%nKOmmm^ z3q|qlj=HBjG6oE<#^E2kidzqPr9O9_;?}?0&)#2_D?PwDys8(ZUkbC57?pYit9ymR zQHh_`K&o)Xr|NswxM3(OGt>8Z|ACJ0rKAmHO%t~|C2-HDnc`LLN?%K&PP(RPfO9@d zaj%OWtw-`~c|)~Kl0&$os{=_7&Nt-jAY~hsR-9BD&RXmK`UUKZ+%wzLCTWgDP0_pC zZS~bI3NcJvtv%;`@-lF+6k{OPL8qaJa97?$6j5l2qp)V&F6x^fZn`@6C=aFe>$B2_wRgl8;{*h%%M*=XWm-DWL?P(fz{y^}$j76$0 zwn%yMYtw=l^nk=^e8BC3~Y<@9htySh3{8#4Gu-lJ4d2ta5|#wLp~6$qSj=l;|8mOGGbm4tUN71 znD*qh`eenfi1p-_t|E%(i=&QCZ}Q}1{;}`&?&$Qnu+%AQNUV`Hb6;819L-S&lNzZ7 zC*q`O(>SPmq-*e9&!CpQG z?irAww#zT2#w?ErUAi#cl-J=D=B90<8~(K+aH-bt&J{o5`9_rW9xF6&KbvtD<(L0u zj~TZ>$^@34S`Cfj`TcbEPF4V=4v6_@X=pDTZGEe3^xAW$CO2w~(_%>B!00O%$(#|F zaCrzdNgG-nleWVHD3mzp*f_VbRF!7cyY!4x8~HhpyzAK361z=!;@*GBWfZ*RdDoR> zH!eWxZevG#tj*Un{`zIo;>8{3r&Gpir{{ezsq0j8Z2<4$m}ECa(5@BFBQf_&pKEhm zrTll`n&iSoRYx_zheCx0JxM01hH$s6fyr{#NNH_sIfQ2N&c<4#z*=K<50a`w-@D zXT;0%)NX4OVs#Iyh>+VNE_`>Ol}Uu z8v=5$RUdr{poT6Zzlp!PE-cMNAhv5L9p!saYsAV~ z*5*#ImORp##DM`uYCUNx9YML&J9|stXvD+C$-7!ulAF75_SjVi>@_t49bfs*s{;t0 zJL-!YA%$f`XUT;<1{yU~;n1({WCO`n22nJHcvYjjs+ zVkkKk%KXAY0nAAfFK>*G6Ew%O7d${5mg;{v8D?i!P|(m)a-@cP&Be2e4`fl(r1j>C z@0TIIE`M3E(YyRgD&3L%39lxeUF~TlMH1pVr0u(`mO%iqg;(w%n3&k+TP9_5CCBkZ z!4GMUN-Jwt&2!GmRRjxh;N5LOoEkdpv#m3uB&lQ<&>VIi##4(#9O|4qES93I=^FxZ zdMDNF7)@KovgEIO3*TVZqS}f+Y;AOAO0dyzQzAtM@N_qFX2YXUQNLG>8u?RhL;q{L z%?r8^rGbfD8tX~$OQWR<7gs(JzyT!TT-#whr#f&PxzfiFJOqT0wdp-L5%3Pm0S!_E zvQwL1ntU76^q{W(PQ%)ZG5HylA-IM?L~{wr60-7>LzZf7+e~C|^_}tEiWgz#$=6-4KPbK$PM^exiC*p^d@rk|JA6`u*k3Q@03(WJ10+#66~o_CQg~q;gDLrH zgQ+nM0n-*r6ck>l+bw?tNfU_VCDXMXE(Z>k9({g{Z8 z9+_>U%0IY6fPK?5g2je!8=su>{7I}@S?dKJ(huLAzh;}4`e(i4zE-o$OZ~s zxA{MDYdqbuMs&@x`IzW}yP8B9Y*^yCpf@%2N;GqDn9a0r=}q#!0G!Z&Ribu;5vWu# zS5)3e3vi{pHPXA%oNC#w(C&r2dyeY+%2?kuu*Na;sU%VJ9gZ8lvoO{=pI8hpaLzM8vkJ*vZfWAF2&QTkSiM{b$ z*H6EK)|V{>Zxx_{Z((lTFp$sl^gOg?tWqj~^gYK_i>*9i8STLxoD_zojctLX@95AC zMsNOEUjcJ@$h~nH1ULTD`7?nt#?WtXJ)YuqX|coklKHjb`6ke+5Zh?=ysOQFT=QLe zzmyA^Kw(zYeA5nZCEw;dR?)$}D8Bo-Pg399#gIMlG=BoQg&u78y01DE&v>9{;PwpN z1D9k?AYOrfPCFQNeDP;tb>m$5R>`3+Ygehz>pOJ;8X?+Whbxjg=qG(I!B1p&adr6S z4`f4z+v%;Xb{{!k{$PG=sP};eDzP{d{$_8Zg^#Z$g4^y+$+*-eLkuglO_#sADCvNk z*EG6E1j%V$O?;H2K%h!X)BC0MI%02Qv(L|!47>yB&6_|GWA;5z6!<@UhY*(kP|{h; zr#>7%PCI4P@dB0HsTkG%$cYJ$ytpSNN8VPEbTLd?<7aaqsMS)}?pU&JF_nk2ZuN}k zp)@y@Q-TPsgaZt}d)YYnn$90WB*wxCG ziMaJF#~6p$^W4IVGiu9ASl!CH{rC~mf!t`dca+wzB~T-ttCrM)0V+)f~T%EcH(CBSmK4&mnE93njv@opB-Hhn-Cr)>?S`Hd2 zW!KJFUhTo|);PLxV(D}kT6dg=V3gSBVl*o^jMdTLp4reB9OE_uhhDtHQ;0i1bvue7 zKQoC+pl6>fi~9Dv+@O3?AP+q!JQUi0YMty(dUwrYErtSH#?b6)OSVB{f7}W}JuR3s zrP__{Yy~yxZDeWQyfcWw}ih&6d$i?J|fVXb0k>vl1su$&8KOnZUmC5rT|FeVF{d~qpzmQn=}F_Kwa=yn?ovB ze=v%!GK2}Z_DbK1jpyT@<)`jHHa_QT+wB`JC!=`jg5i76!L%S_=XI?PJw^v|Z*DFu z$Tp&uQ#SzoN%9Ib&ZjdN zDS$9nI@xq2hwj2MnCh-?_6cJLT41MDk7ys>AsQB)9rV(7w?AsUK6-#{R%jEvyGz8y z(5fJU$$!|_Gn*lQf~RnYEz0GO-h;2D_R{r>&kLwWW?7NmEZJmJJ_dEbF%BMeUa<<6 zaCUKc8*pJ+g=?AN=?l}%r_-7}1&)Swi&KTZaV+yo6B!3r9Dr=#XTPim0ZK=>YbaBF zfc|?rRzr!@EzjH>tu%x^%~9VfsGE-c*LoC8x8kG`qC`-qJTrRhQX^_oT8Ro`$S|yk zqaa0|se>Ye^p8nW&(Cyr5pb|?zVEs=YS^ba{8DSGs3H7b!hh**M$a9d7?&XKXt4(x zmpIW^u=L&-*Ok3L*8O8#GyO|i-j=;9sKZ^JFOx-@QR!^EARIQ#tvp(yk(F)T=>30F^ zR|sE}7TqC;6tvZ4HH`fvetxK<8YJ5qGPa8vm{?%Q6n22T(NK?x$;l;JjaJ{yTA#3G zXf|cEsOLN#61)vk@;)3jq%;Trn#vB~9>s^WS^GcH9|`u_rCRq!bqE<7(DJ@cY15>G zZ7R;Z%iktRS#^Gm;p1)LxvyciKxjK_=Sm#u{dXbpEv7s1XqD8_r6P`-b%S@C;i;L6rVeFGCzq{$q=v7 zX_rT{rJH;UpKNKFN-p^JWIU&vBor85V+4?zyEO!geforEpb5|%Jes-nrO%DGH0Zs* zX>zd=mBHDU;8*_zxKlk3-$D5j0}Hs`HJwIDn0sAI@n%^ei4?1il*~h>h&VZS%=PfL|(?o_n#fTYNdQ%pC2QV6;w|rpo}j*d|xa@ z!#DaJKWiNVBL}_BVAtQhhY%{9cAvk|yJY?R192(*!zHWINILAA{K-MOgpBL9eO%#V z;G*DiT1H#S=QE?U%+fUm3_JH3*-$hZ(r-0vn|ON4e5s6 zHVzI|md0iXJuOPP9kG$9vAsm!*2N?yr_xSujC;3Avf9mDA9o#~1|e-En5EK{ZY|3$ z>>?<8N9`Wxa{iCs+W!fA-uq`%q(4-pdr842KOeijL8x&vn6t>+7Hl5mL<73Cj0?ie zwZ!wK5G>SA#9b3wf9`;f%#+z!|S6SD=6NmDcPZ+GKg zaYdTbYQy>VE>iet*a*jeao^Clf9AgFf8f4XJcLQZtWLBf_LpQh>rY<><)hXbhX*kl z_!c6Sp<6*D_&HsG*YmyHi{kg}2pj~%TsI6`)T_~4Y|hWFqhHmA)#+l9?^p?XU!cZi zuKfqggxaEA-{vxILq`a>S6saqwr2A@SWwSIYX4Hl2aRy6Y@s1l{1OwGdnKp@{t@=} zLLVf@m%r|P;hnX@COi>0dZs&U8sX68p$8JAb;sDn;ImpANrztOB(9Jy*c5p=pug*U z?Wuemt<;}xq!nPmH3NKYf@^3?_~qxL#zP@hb_T06UP7AYYu-rn=FjS5BTi3`SAs12 zNqXpNEli>2WDF&=5uci07jErFcJblOo?leWn<@hoR+5Q1s_=5hbFjJbtsNw_OH44A zrQK3z>(}PaR^FVOC%6lKqdYf9n*I4(D7#;_&}v8tn&Rd8IfaruU$Ldc5X88@$fgX@ zr|YY)6q|*u&)_G0uQd-ahL=3L-@(LMp-eFMUIsv(X-dS^BJ2+W-OZm{+3W1~#~YtK z?t0WM!+jap={m;@{U~ zf&1h77^IO+HMl3mCUZUq@Jd-#>K>hv@feU?9Eqd}NE=r2-aIi`wa5sL-{95VD}mqT z<#TyyX2u%N1}zrZEENW)H34Tv8(zNpqGSAX^7Hu=&1*tQWV2yx$sEs=35Jm}tO4JWsSdoy;VUm+$ZTm%=`eT$x@<_EN0-Dldg5-i; zYC#jWSjHmTJ~KPW`h5*omj|Zs<JG{&*!Meb1p%-eSu3R2Kh(?l%P zgcg5t-?fZwz_mKgDLSyH-ZA)q$tcK8^(EBPtAO}!29HV!xq{48NL@doBoJt0FBB4Z zg20vp<9lg|mxZ%dOV!VVb=>X*7uyMpQS$RduUV%&vFMXl@!@4ZX*@X zKv|kQjI2Ov#lVNWE~7-KDsXIk>r_1~7;QPL221`mL5Nq*6?KFeXI(fn<2LpZ14RU8(1(I#3~~ z3CtzQW^7`EG<{00%=<9FO~iMi+!q+l63e1y_fruf>Pnf9eY;D#(5nlLjIC2 z>xmK&QiJ#^cfKPxcnM!lKFR%bo)L zmH32Bz&hgfc11dCa>F$70!j0?{n;)5Aj_YiM3Q4f;#4(W9c_Ll;*Mx>YZv=^U zs%w4RIRPbU=aDiPhGR)jvFMnZ$5rW*vat`9-@4BWX4My29Gbbq1T*KK#0aOiW)RUl^A-f2{C#T8J@g~FRD<`(at?iW+w`RMx<9rU zT`HJ-^x@jW3mC$+XN97#l(K*U{-EJ>p%?EwEysc>n1!58W%Uop5IRbu2FAF3`9VV} zbkts)U?a#GHX3B-rFy7Vsn=U{tr&&&cd9@vW$lKPlDL>g=>?gD4D(z0cAVPLXu8#_VQ=X_aG=%Uf9JqP zEC;6A1n|%D690P+)T1eSZ5IBTT7SA{>GL06lS)e&7ccYyYbe}3&cfMUTmNI)gS9=% z*woEWc;J5G?-*?tx(JMVgPP=Cr?27anP71T%|FUf+8*aDzIqp(;2uSSg3w4&qxM@Z z?fVa~ZvHwxQDlICc^SK(hfy|QFv`XYVS+p9VdYo-&j00faU@7u5kL&Ocb>Ei+zNj% z|E0%9-d9m?v9C>z*+_{JatnEkz}sJI`o2dle3x*m8OezS#0}3g!SvW;<=3LsKzw=g zvS-m`Y=4Z0wAXp%oy*-fwc&MXvW+KY#_ZEUzY!6b@FyY`^p{>+ zlWtnkUGfkPm71%}eBOSE?aW{a|5g-ay=SS@zS-Q{Rdj8=MowJ^_Bgea5{=FhtXt8v z4~h&v7Ylm6xM4p5PC7|hnmMHZK^|cz@M|J+ulhjGX^Q6!f@`%s_#K}wlM1kbD6^KEpkt8CIQPM{f$VHR~51OYs^Cg{n7`{a{E>a)M9pRQufy`5(eZ~Kg zICR8{!`;}T&eo6y6EQx=@D@;wp{!~{3F&vilVq9J$p;rqLh(9B9Us}TWh7}+wwoit zhZ?kPd6|spnx#{>e$F}0ngcu>Bj%kQ0~hBe-9qZ$KJ3&g6eDSUz4U`IK^ z?l+5(5-IfTC61xqvhekBMX{UyFa5i7u_ACR0BmHnp}y>zJF?L?^Yiu^s^Cn73Nk94 znRp}A{-;Ubn!nGPIkpqR`b^M?@$Ip~q%cFonFvQ#XAzpl<2OHQ#)@$K=ErvFUNkG^ z_b>;8p9=(&7nk1rlg5rs0XRo>0EMJq=I}{u8)G=&ONje?3?PFPLvXB>{o;wd&&Ulm zPR*N0op|>ucLn^V{6a#+!%P#n!pj#>>Yy=1evxQir(vy)R)LL<%cH_$J_1DCN zj@?IpH8lu=AQD&ai20_A2?8W87$kDDL-c5DO}(@53R^NAnGYMK$A(D@7VLx0`-oQU zf6?Pd!GBAS-B@~D3IYF}9<_h|1%(_8(c3OO&MvkfD4aMPF)D?8?!b~#wgh-+Q1??{*7U&1 zqL%dFvuSdZeZRdL;JPL$q##zA5rG?7dV5P41R-TMf=4-jWN$jVLww2WZe=C_1M*^R zq3y}vY@svovl-AI8OeWn`{<7N%1Ic4v^tpnV47Ns}IR)^p-!a|Lzhe3pa7E zr?M23OdQ2l&S6uCam)N)Q^LIUz()I|3jI!?$7g{-I9_y_Ai1-5yf{4JnOlh87hg&a z`BBpC@Ixw73sOrx79_-FAoJlPtJz|7uk=?-3T)uNA26vV3kV1NKng8M#E7tOUagE2&bBmY}=zko6zOU$gi z#`e}l@7Vm1wqAQX?&vF8(%=Lp7j#Phy`ZGlfmKe-UOL<&;m!N_(SaE0G4GaT+IzrQ zwFfevg8NNg~Qv)GNx%sCbM1>4rVEy3aZ$J3wQIu$E+0&dnIKqE*0 zC=a7Ma>Rl#fV0KZLvICclA~qC*Ut76jlagwjAM>~-i-a>x3evRfrn!NSQ$hgK+dY= zO9*Pr)ym`HB9QtQP3Y*^`ylCm)`V02v3S2UVU^lQ7E3O4=_jO&pF7i+f(W$KwTC=g^I^Gcem96|Ry(PdX z^on4>FQu|UJm$x?fGE$IrO8ZZrQxMHS&Lo)V>`@`S*ScqAF0QYMQVK}!kN|i1X=ix z3Xvc~AEUf>W;{tX7D`OSw&=->D-mAH29 zTOoq+c|JwFY5> zbVcWpN&z5UqRv=oc9W;$ZIa579bj9ajG0!jbxrQx7l+oAhC(ijoWcjkvUONFX}lnP zbj{l^DoEcJ$l``Bt;MboLwqG2Sf{QtlVw$J_RuG)YfYkZXSO#l7&^Sjf2`UIp`>&TJ0tN%#{calWhTZ(X>>B>> z9mk5yO0*rn{ok5s$Rat|4~^}=k01DZT%2IqEG1CUn&e}7yB(RLhRW|!JlZd1%Apq` z4wg4tdNcqY?`;@@nSeu?q)CpR?<_OmP72a_v7U2JYaV3h8_b^ZNF|v>f#z)E` zq|CNt}#$9QgyA zcBPucJ^Aw~$saeH`P9W>wRVz4Yq5B(_P^H9e^G!p{zU=4`&-j2X@XZJqWI3d+;vo? zT;C_g8ttX?Iw`KX>XIW&bz|F&`oeOS0~~Q~S)eJ27{gLvgnfe-?`&}s^&^fWK-$~b z7`0dhx}4ELGlJI@G;_G1%m_Se|KoKyvz*BFm;WF9I)eYF0?(vte7-Gp9^azb_;q7u zS_O_@+oR74&h%x=!Lq+2+e-U?6WOkUUaV5uh3Jw46yPT%A-WCL2g^CRN&c;OQ+;^N zuMC2wB7l%D2VEH|#7WwZKDRKLpV(Q-Loel1v%t6iMd1PAD-&u7TQm`-$JwuA8_IfP z&&TMS;r~D26ZTea(aKF-JjUB|Pn+G)U8!)R_-nws8%W$~j zB48CzZ)S?K-qznEj-ekhEuYa1m%z&5&CX86f1ACQ|IS`x63PiDDq66uX2xpuKp!JU zyA6P5u5gEvpDMGXZUGs-Le9U5U&Dd>PlY0-e%2Pa;eh>?YSnd4PCz*u^UT%~a&TL@ z!PqwPk}P*s9)nC5I3|xg@ZcV5)R2m_?LAY}0f;npl0Pp>`@1I(mxgS|nkD^@LY{Ef zty@R<%&h?`u|8SPyTBe*F#zJs&URq)Nmpw?^2~W!nIz`vTFq{f)Y4ixw%O8L8ry8y zY>F{=aqTxqF!5lfAnm*#w+YSrm7=CMhYDG9Ls}jCWB~t$i4-A;o2YESIuaStAqZQL*kwx^5-Tbt3T+X5l%d$d`DDoM3acz|k(VnOw(&i{u_IrV zKeIsz@A=JtjXoj2qtCfp-(hli|1TbFgcSd8So1>eH`Y+WbIpRTrw~#^%&MMqUB~f0 zy;p=!w^7pAnw1Ko2krarqn6f87@Vd2?@g9&czLyKh5%7w3H^BwR6W5{fwaT#TDO#< zZkq^ynfo2b*8A=^leyAeHIIbtAF0m z1F||bBsKQUg66Twu4c@Mur6OSZ8tV!lv;fm&PRC$lV-j^@T7~`^>gj?=9!YiSAM9e z&xsLip;;%6S2Uma9X`5XSfJhW31wmE)gB?IGCL$QtlA#|d~B`i5vhV2)R7Ul?lrb#n_ItvGgwo^}~pJ!O~wCms-e z%A5q_aP00M;2|a!505VhrabX@7c;EDyNiCaE3HLC&jT}T5eKVH(^>w=i zCH#5AcA5mF^arJy9lv)GFtXxA61>4SoJE~N-tMn13+70&mL9AuWCP1{@v}n$eUUil z$8+0===a1CFXu047oc2SmO2}vbmCwmMM8e8^# z-}imJ-uhJE&-Zs-_jTO=+{bbMQOD6_-pgw_U+4LJJWpXdcT`C)UA=^ZgF~vWrgRqv zhX90wgNq9R1D~|l7c1c41mLJE$?GHFD>X!K^qYR3rO#^lIc?1eJDr8Cv=xx@x048h zAb}9t!4VzS8{jL-nJ}oT`~&<(P8bTs&JupCqSKp%$xX_wKxRHR$*PDzg*RWnE!0<+ z-s6)0(`|iqSb9`?RB*d}e*1K!*6rg`UyZ5W=tMiU`xO+JApU1kmY6!kGNd5BLe_i3O8vi3$jJVXTNB?;oH5PfST%00s>AyF+ zs}|fu^3p0Qx6vi7f9s9qzkm3}b!@%6b&Y0X+NtK@S&-(v^RGGm^>1_bGbZui*GNTX z+xl%5NKB;D7oz8{ka)etHi(BHp?qryOVIpP)F6|Ui712Zeh zDNp=&qA#ymfhqnD@D&O=1UO-j4wmMS93U~`MNf$UI~pklrv3X(l?>bEb~kQ|#Slwv zEPRqMe>&1bmYFtxXmD+7FfHKbz^BV%hEgP@XSvIwY*i?v`ikx>@#vlZ9{e7`0=?O@ zO+)}L+z+^uZn<~O^UG_aT6StWB-}cCbQ0fAJa+Ld(pf;h?th<7NT(Y`2Z^bNg9-%H z)VS+OVrsx7A2y*RwSJ0HQ?)_e^xt0yfQV7duU;ju$1pq8);vl(Yko{d0S8*%^K(mI|mM}l8i=mQp=?pF|@S$V5@m>0*FBdPr zdn#om@U&}aR|d&v3WHScinyMk4agqgopiWG_*#yO_VWmgrwHBO!l_nyEjw=c0pvMy z^mozS)mHy1SYV}`USVhuI`P_3@+xbEf#_$J7lpLBfoUmeoXH7jCm6MP=PmP%(ZTm& zi5bQ!NK(&{XA^Zl(r>y|SufEywV(y0@2|hevI8kMYHL5?SnMjAf16`D$dzN?2gh*S9$MTeT=W#DZhiDpD%qI^}%o}&bDtACp{Hd+^vMCU`G2sc-fCPuHPS~^Q34> zx;*zhO19}BqV$_AwhjW3F+C}hE*xz)b4|mlKv;HD?a*~yD?Y~#F1-r^GR8I6Lz0lQ zzToDXJq63t*(t*@n^-g>=_cx!^tRKDmPjk`BhEQ%quN^XnaTb0A7bL44FkSK+;WuO zxZ=9qCwc?i$HU{zV9ALcwzzHMNG))O;LArUr{q3DhUvC+UN?4d8RxCl%d&0y+FQoosh<4DCMdpapAOaA!@@%hGJeY?wCvgvxYRgQjoa_m^uxg0r-?AZaO zpr=u3_UFn4%T`I>IeRl{Hn+JSW{=0lO51#Pe;UlS@zn{PBQ~!Ku4Tvj9=^=*iIUwxpP%b@~Z8^abm;z6nfRC1#1Rk#n&)n!)FA$iEeAWND zm~RX=A>3`=HYfPj#+;FoZR&#!^Ayfmg<>H(5|4fhhBjt07cVrt8Q4I8)1}h?6p^uqh6I?djf2mB|^^3k@7=a@leRKuS>#n>CC=tQ|h|& z6lTdskhS%}`7}yg?46d=NtsO=cJNr~BGY#7c>11nL|cBvZOnCJ5~VaAV`c{(Y<@mc ztZF`pY(`uGb3D6KtVB!VMfNg1Cf$5&ux9w=Y%XdGej|uXyumwWeCUf_u+7e92bs*n zG5>SlO^T4yWSewBdZ*JMI@wMA?IAmK1R`sFcGkdjx{8TKm)oSM*Jp3g=FxiHxt2gd zEKvlV;q>6ocQ&$ZR@xyFZSj1QQdN7r(nk`jAIOvK$x4idxWEikL>7qEp{(yVZM>G| z6yExWuB#j!we?l&{C8g0+$!sqY1H!Fu&emClcJx+Vnj%$VoY88!EU#5lp|jtHu4ZL2f)4X1pS78Kcq>4o#Z)C$ zurlY>B|mEjXJ7W@B=3)TkDF`_k009C!M#7c3=uVpr9~YFslGL)W~Er04Dqi{f`J2- z=Xv6fXP!+CIsYu}PbND*)b<<~T1^;s)aF#c-_<2x3PIOx=6u;RC`0cn`?&mKF2t0H=neWJBglY;T`c>k5-%TF)7_mrT~kIL&3MY z;Ygk#kIi@QEZYcB+ceaK&_aUvCYrnmS|lepd_u(I6O?9iOqfaoF7!@tjoevHx^>T? z|6X_O`SQFFs6Z)ht2|f&Y;g;LGj5URgY$1*@fHzC-F?PA z24@Gv*%vpCtd9E4&ExQ0VJdUrgzc4Wz{sKalJZ!h&0;&J!jVZEmfeWH6_@sxJy@tS zDW&R+)=$R>WD@jjF$yko0vK40W#+ zBX^P;P)L;ak&skU-_KQUyk=_2uBrA($Mx>_FD^^^;eV|#k+#a&F^$wZ5WwtZ_#V9A zfsa;s)GZSQZ&PzqykPWY_LX^J!sLGNVoMeWNp?{R zUg^4wO5K;;$Utl_4TO6i&%|rbz*%l&rXHB}VF^y22Ayxx_c=i)q37rW2DwV_&m|}n zouOO(gpzhGDodJ%q@g2y1^D;Z+P#O{K;~9qU|vwe8(o3T*fC);)s~|X^=EHUp%dH) zE>1{(Q71N>D6{plxM?oOh7z$c2=~8~fOC!&P({5@=QriJJegZWkW+#94<+b^-;xr7C4p^FR64kxf z>fj=bDCqb7Di~)*zync+Hp?xawW!0L!j`|6Yb}FX)QwWo?_9C?NT`xq^z6{k@>Re^!m2uc0zgcP}m-;mU6*m*%ZEc=-|_6*YfJ)NQ&<< zMl+`LSbW=54ioZy*F4Vzi!mq1;~E=}zVYgJ#YbnEryrV0T$kNeMe=RT@qYLYry;w` zEj>3*bePr?(LOjs{sAb=Jw;znpiJmx4#db|?iME!y=Mhm#@Tpdzeb0#V5;?3@@XFv z%NF?WbhS)T1@1}hHxLKj5er)T3SQh;YmC#CWQ^BF1Y2~|vx6-ySNe#N3#ZcFGboWN zOPHLg#0U0dTynfq^2~fYJs5wzA`$DQ>SP#OeHFwqf3C|fhv`04zZd+LZv7@Ew1vrE zq55u@?8q{df(;$4T1$g6(kc=^RQwnJt9Sx zuA*!>&Ayw~3XErP;^Mq*qmZ>j!ks@fu8*!}mxl&JQ9=VFCxc2&GNzYL{A;`pwqT@% z1ci~b6K;kw-iQ3vkWs1ROv@MHhVpnXxenO42};2DCQGFk=$--}{bV&~@ z8}^P?Pt(;o%n%wsRVf*F0I8{yMCSJUGKtiRaC}+Mn1{UJUo)kn$r?Q}g>h#2e+{A< z`(*llgxmK=hbn|6+b<)Y|ClTg!v3Iggquo$U$2S_Jk;>Uf$X&q_}!q~OP3HCh-T7_ z#%=Jtyd{jiYa_Ujqj5tGsS2w$;>RVW1WhhZ_o;RhHZWnxAPkF|2P_*6jacftS9VE) z4+tllOS7~mq@R1hq+Zn?OcA@xkEV22%Gkcih{i3 zb`IqE(|X`Y9ZoQ=_7RUT-^0O3ppcKXdn+Q3eoC6GIs(;Uw~DkOo;~pj??F1|TwrTC zy;;vy79`hMvF>Hu$Ti}q{TUKLccUfE%zH^bqtQ@**$f^ZU5Kiil) z+>w5BF&w!e));4ol4expdm&}GW=E_5wHadeE4!J#U%_!nz63cCUqowItUm}>SenyP z`$P_MCPn$9=uu+GTw-U?3j@)&a(N1vE8JI~y@u%OW*WqzX2Z?Ppo!lFpS2Ob`?62} z^K2*_sk>W=ZDdcaCEsD_p#o9u9${{6-alquEv5vN2j&Wes~B<=TbY4=Z?*vao(XWm z*bnboJd5m5TG5gT#MGxaebG{4@xDchrNuDolZRQFuhnnKBW_v{IXO)25!AfDq|^*^ zQZ%7lKYW*Hc5^H{5$+d~?6T&wXl8hOu}=|23Y-QGmDN(WN%Ucv@&gTGL{49nH4?q2 zuXc}~WQbV8syB4}%P?{{n-q(v7rC3Jqh*gr5hBFYe6O7Q{Y2Jma3ELrO$DHM*~4ii zVH+en_?1_5yZA^%{qGh8_t|QfJ#H5O{WJ1JQTIvkIU#+opb*%cum4G|oG#SIqwirc z7FxGlgrSZc968~{%lx5_!MLg$kn9ZFB?Nw~xtIPTXZdAR&M9i}Zkh6-JQ2NgHYb?1 zk6G%Ha<;@iQBR2r8Xc0y))xFCC*^rYUQJ1VO&M=!6h%#-61PD`afsM{+K9~+{V_+g zfm@Tgd;RxGB0pa2oy8r}8h3{TA`kIduP|FfAt9N=U*ZdC5R8RXV29sUkB=-_Xl*ba zS}{ho9jC>qSNNV2JjI}pR%61wz+@lm$Vb^6j94G5Nl5SL_vc)(z>6|`0L3q5;!X_` zquR64e)vUGOmIRuc%N>f)Xu|mV^WpPFF9@cGzf~vLfgQjL}`2wM7zNI0v}2I2V{@u&C}|k~Ca4NvoR*(3h*z{5xgSg@s3d&NFErKWBYje z0fkJH^RVz~q~)%P`ZH0!(O%jc6H3E(2j!H8A$$tlihVYEBFo5cB7pLA(xOg2V6cm1Zaw`lD_=LK*$y6K7IU78C+y`%h_p72LV)2N11AL0cM}fkFNl!A3)%q z-jxOwUgJ8#1N6E|B~Nfe5Y*j1AE_nmO2_xZLbdLBIpdEmbk};}A{bv{r%PW1DsL9b z$dpe@xJs%N7uB`~W<|AyT|bt0_u-wmiW)xr{t10FRg8z)eM~llyK$b|7Hko!$|7U1 zaY#{ygrrg7t3{FzR4*1|WiGypn})o1N_Z^27Z-4-du!yRwZ3$8?;&L~2}yHDI#JY+ zV1Z76>NuGSiQsvuWsdfSi#*dzM+l8M6o_eJPCq?fLj0gM1tnKB6fOE^D*#o5b#e1u zZI!iR#2nS;EY%_kdDkFHZq9)%b8{8;x@qg{GIV}Vg{J7!YWs0h^z28t*YKS*F(O?e zjYM5OsrCumIT`xvKm?fA#eU;K%e~Q)ht6({Ex2V3t(V~*VB|_Zj~8wp1Qgnt?@#1< zjm}$4kEs?Nm!)Sxkiz}Ti1zMpQMaKkML=;{UGW^H`ry_sb(rqL+;yPh^M_D?aM|A` zJzi8Ijn^6dKsCmmwDIoRp7LN1IY{6|6Na2p9Tl)aB7eFjeFM5vP}0APSM1y*hsX_H z4Y#Fa16wM@*ko5R$M49=e)Xo`dGCwUfG3p;tDa(5r*tQ4zLR$l)IyH2^gW01%9$(q z%QHWJe9PlZVZ77v6TZ3;1Ku`9%-EP4%%reJicfL_OJ&-zj)0~eFhCCk<{LkV2R-%Ky^?S z;8*uNuCB()y_XhdjbBCH*N~LLyLS@qO_*aKW9&{2iXX`O-ru|y?$4_`+f%4Vl4sRR z38nYP_uRG6iv>0?7ky|h4ys>`ct{D~Era)SPig#0MrN|4`4FDDX=hQt#n^LN!`s9b zoe`n5v9kTWvo5+8UCJRAfc%vWt)C%-3wh;B+7Gq4n)0_cQPgIb@|yD7hO|W0P&!DM zH#oFh14{Hb1`m^#EgMK|YjAHKbdqiWP)^cY;HLjnn2~g}(J8W&fEFi^|DHJk$KU_t z@pe|xEi*X8S3ZzsD^s&`%RO^ z**SY#WMMU(Ms(rH;GRM|9k~E#_|@L68bWZ(PTQjM#Ku5r*K-UI2?q?Vz)XT}Y1%mY z(aB!7>fvtU8~R~48=8?sRT+b{W6{O)o{ft4wYF{K7E8 z@j^2Uo*{$;3@qRZOu7yh)qGK>HLTs+5yXCf*i-sf?o4e9B4T0Fg5fk|U2WSE$XA45 zZrO;M^#SK7ev!Udy$fIBe<`*$6XAA_`}j3OMUNe}QWfY~4Ywk$H|{+%pG{e&Zi_RU z!9_#~`PW{*s|t+dU(vf)ufY=hU4VDNb!AMFxBIJ|c68%2zp=v17!TiaY0^a#Og-D) zkzZON?SM-?lziI+$#+kO+O1+&ggwslgaBE6W4cfA4{eAA%Uw!CW|Uw9Ds&78Cyds1 z)lb>11Y#e?Ah_#w=ZtC6mnm^xfQ@zR<^Mi_5RBClJk;_LbUE64ouKKUt-Ek3;A`#j zmZ5(PT?+}@7u?PB0(@G2>c8Zo8>QAI2sK}HL?ab_(|iW;+}gG#0_@_Ci2jc_Wvs{b zf7#WCXnvGdhfsOacyT|Lo=DCadh5j?UwrI2erY%ZW(~y^{_dgzy?RoC~ zr0!LYseew?B=`5BV-;AVl8|eKCHqJ-?}MLPhC|)~XgCx74*(GS71tFmg&85hL-ko` zpL2O&b4e^xwF8*%IwaV5Tycc4w1#sV(w0C z$prnPG?G*ialI|u&z=99cYNy7)#m^D^#2Fc=@+89 z@n2NvPP-g}aO<0uNX-AFWZVJ;52}6yKV+<`)BV?rv~rZu8tPx0xI)!pHl6hJj^yg% z@amb$zaS7>Ixr?PwEy#KL}|zbRhk&7M~jd5MgL8-4ujK>Y%K$)QI@cqVwG>aQa>1# z4qqWf?+yNEajODkN_^|hd~*8mKR+jNKJ`Sebjv|c=)^TW>d)BQKK(!5I+E_2RrEhE zSahlS&?|4u>ifKuC7_76?Nn??>wQ_d*W*5*&!_#VHcN9q1bbVCfs0zo;p6>kYa`~T zkpoo#L$S~O1OSx}pPn?`>6z`N&*trYaQD=vC%d9s2rV{n!6&+n_n0hRC#;;i`JVc( z*)jhiNq7JCP!E)wdH+r5%D6#U6zWRNkrVI?2BG0`2=}v8jC}rxw(auA=y1`(E0&YIOVtI4&>K z(tI&eYmUP~A~}b#Dq?~V7ya{0HN`!&11eb!-gg*o-8zYYg7^lkhe)J!SBz9!ON?hn zw!tQ)!}^~`W<7~29sUBfOB7zhDN5oX&l*@F+aX~SZ(eh{ z0#d*493o-R&UF>e!{oEbOL>PKEW*e9n3GzT&l5Oz;$jp3%=JygMfiL%FNHlB`PVml z4*V7!VHBJIIf}FXS}9f0_|5D(D$4Qr?_vrJN<(_S%hdKaGg554_$EC>mXk{mKy`QO z?fT&cN?}MfJ0Kq`&w9E~pq(6ko$sd+2}XrwfIoYynlZ<->1&R<^Shhr|Elugf|S2+X1mcT$d3m81g3$WCn?)G3DGzW=yUyw{c$@3HVd%r)R3Ptl!Q9F2#y+i2xodV-ytU%pO??5O_}SuRvwyw*HSR|lUhdc5 z^rSibhPcZ?qiasK5y*(X{Cy&yMLhY=&xuOg)0dm({9|aJT)tMO-ig}@7RNd^maw8%?dj$R)h8r2Hm;jSM~tEM>R8?R6v zb`!W|61i5|SME8)gvp zip1V`vS_cbW}*WIMYE||vrSZ_R@U#Oc4r%P?r;qgOR!Rx+jkW`iD{-{r>gvm3p~VQ zcS{->^iTIc`{L<3JpBmMwHbwZ)`4l&YbRv(dwhmyG4l~oD8j{`uN(7DA3R?7PeIon zeP21802SNMa$=+V7lI1ju3xJ&RxPUs`wZl1-(Sfaa;Qx8d~bWd8(X|STo%6w)K(vi z3iYL+O^zD_5s23Cez3#JjX3R}HEN>2s=i)&)t~g2`Rxf79@96~ z?I@ZpLY6o6qaA=c zsWHpEsihC55Tc7Z?3u=Ze6Q8tBck@0dB#@OvJ3#pnf5z`76k{vv5N~Q(-b%E zvgAFi!5k&(wQ12WE4Q8*FA154T*(lIE-ly*xLr+7_^AC+a!HhT(i~82fyrjR!B6 znMgA9^%n)gs|{yj4X1Ur*`bx$Nd!<6S3@?enGT0z-q--q#?okyY0?f@Ouq?Nvd6eD z_QdA||AG)hIQD|658dwO?p2A5PJ0^E)Yv5^yU&rdri7nP$H=}2%jrAa;zFZB`x4Fk zZpJUxjkuL_XilMAvK!A}wHw!mB#GQ>H+y&uMEl@N)N2U8r3U z?|C#4_RJAYjrxf8oHf@gJRm@GKlT_P(eqn#?cpcAtUckVQ z1}S+NmxctP`V3;4QaFuIw{5~NPC9C_{8$6yT2b4)L){0-)n`DI9ow?n_X>`E9_6P? zgIh3V-ji2ScQd8xr)z38d}Zs?+2H=AgNE_UCrLBP$@~HZPnwKbaYTR+Y&&?Yc9=Qt zyhBmg=#p_V!lAjjX{Q9mI8GTl&Xh$!737j=5p53TZ4XJEPwoOW?qpN;X5Qd@(#`kj z7Vb6M(V7e|MDJDc0EO+rd&xDS&?p9L$EwqqTQ}d-El3qAW`7NScB&n8U_J#8067lIaC@@*!TovLl~znp=|btgt=`x428)4b9+%;wXawQJQyzms`E zH()dJ1wFU4B;6C&NjVQnmpt-p1sAgMv2_JUJA_Kdgx~HHM!pa_jh>9tB++NliMav_ zk~dR44>WwGNfK`J_LqLA zbHvSFm2w(u+g+RDql-4#ieva0&36Lu zwcb#(V_{kQ>phOUKZY--vEf;?@;T912ylu(S+X}N*ucCGYFRCkpK@Aecs&?&*Cb(? zduQnZh!?%}S;X@NR$&~~3Y}^5aD;p(kxi#GH1qL!=NZ*Y@Y_QG!YKJ5RyH{>TvSuR z#s(sf?{^zu#CG$!Qa26Ax6JhfI`?*nZ)=p+R?r?i4BVi3`G}GoJfr~oQTUKn0Dsgc ziV5}Y-^k}G>H8v{BEH-9NJ%QGKmzqXVj~$6yB_t{EmT{lF|xkr0XIZYpL0o2XN^9t ziyjrRik8*wbm>KF><2YJJ$8{#58)94g41zv#(kl?Sh>y%=JL;2|JiI6iI)uVPJqlK zZ6LJ&3Q%mxB@zu=GGpXS8>TP$*K2KuA%7$yhIvaC*`{E4A&RuF!%7gA@H-7FvJlp! zhl|gO^)dCDtNFAj^_;oVRr&bl3?YRp1_#6%dJ|D0?-DmI2fy#8G4rultM=A=6sSmA zd9|Kq8oNoNc@L0=`4%J(5WfWB}>3*wCZvQ#nV=V zy!wXrzpCAJN`fOlEhE*pDltjrSpNP#VBgcn<_B*-uHxeUqVx*Q1xP!kS`>o(9b1D% zzs@M#SvxC_amvKpt;L~>BB-F=IiyzqX_L%FZhM{C5{4Ij%}@+epE>!nR)kyuHFe2$ z;|VhKO8 z5(qmpYlDY++Zu`o2yxG9Stmc0*tNDwewqaRX5HY&-z;z6GdrtmnSn=6+Cbf`j%edC zsvKD^SM%5o8bTpA8Wc|l0m%-dk$p`iv)RLKIMZ!uf-R` zi>;&N0JEGAsR%H9WT+A*6H*&`X6?iuMmDK}C(udO zoKsMju}O4FqTx3w9O}YAUQFTHBj12^Rz5#DRkgSRY7 zs2o&HpR_z;vzTINc0Hz>*v3yQueh9W-OBUU9~Hh}wd-D67BI~h0q0?Rz4^#VGSmM) zqqj+R5)RB2W8?g8I>3M^+pDEmFwAdBkjcBk&y8#b4XHwGNAQVkU*{m_c72ZHwUc#Q zq6E44s@2%T7E!*sd#)HcZY@QaC-?LWn3av{B0J-gp;L-fEwk4esK$|lVIC3vOUiyC zA_bat@f;KB@tnFROz*c7hxPX%tKY}H$iUoJB(&&$j;otKJ2!}8FN zg2?lzA9sIf5aMHojT1{~SG4zwH0_d*P@dcXt5D9;LC6#a3cr9wes)?{i-j^;F;=fW z9kV(=D>~*q;`yzOe-*ndDPMxQuJs#LH^I7I~>-24(?XKpiT0QbFTNnN=g z-l5XTR05Ja>9KAoXv~79a~=2)4a?zUFX6Ezn2!U7yX`@nbZZaL3-?sPW~u~}k(0w< z0Z?VlC*igJ)yY4f_{``1d=Fr4%45%Ag;V`LUzH0xSVq zB9sq~ifl*E#mt5wENp5d_({Q*neQltH5CMO8)r!VFG@5tQ%)+NpZSR7h#&vemu;G( ztwFhm-`v~fI;*G54=)E`eS)_a0DIwitz#6Wy!&s`Yb{24 zx7P|!S?K#BNCk9OQ5?DSk@%D0NDCd3NcP(#_;od|sgWNR5*O0Rq>Ge~xa=2Pu2xa_ z57;6an~ke$#cY=ri}Fm{6d?M1iWv&-vC>aWn#J*-K_YLEX&bEw*$+GWa+5WSMM^;l zb(?EcaV8lXShgl*n0yY%$rpY~((G677CPLe844%Oi^VeSui7B7*GBcf1Lx&0tMSo% ze!&c|Yx_MLZdm}h=Ue(G7rsa4C~2Dcf41|^uS%Ji!C*myz+lCtss4ho9lUgddPdK}=3CGp=fNHw zXrZQ7_O!)~+y6OEvZh+cr3ZT?d3^kj%*7nfH29RLX1*Is&mGP=v*h8sG*l<7K?B4EgLU6PCzq_fAr%wE z6$xEtD}}~amKykOThvj!mBCni<`E3{8;UC|FUuG5h4#03Ylv}lrG zIyBUvYcw{A?5kC+d?$=5eB@363DRV*2IMxFG~fA1BE9V}XOz6y#{nODII){Z0vtRk_D9R(50eEFM6Fr{5@d(rDDi7;0-)ud z!op?}DX(tsbevoUY1=YB{~Xne(3wYg0$4LqfTOJ(!*N0YxRwy7tHRq-^h*JxZk7G5 z)Tm?}BuPX1X~ZQtm~n;0r-{(|JXBYJA<0!q%iZgB)bvxiFu4Odo9li8v8e=Bhk$=H zC5{$#6wB<)*U4le%U$t_=Lf+n#cFCyYCwG$-`UetRi@+qb65OY*DXAfOJeNXQ2Vah z2s8uBV!*6yrDnyG*?hzb^Cgd9Co?i&bBjQDAf+5M5!H%~8Hkh0QA5$s~4u>r6)+Bd5e6l$s`S4aj9 zZbh3p>62jc?*i%QlqtwTplOB$G7(@tx<@vSlcUKuUQVR=(SYDvey(Zg0iF4hRavGn8qK-eXCB+dDw&*dc? z?F0<)$UW*U7_b;A9&uYY-!Z;$U6m`ENc0moP=ieAC*uAffe)eo=svN%Tm>Wt=c&#` z+EAsT^WCM%wsbpv$S_c;D?u8`1&(0BU)REs(D@1Z(7N-Jd0C2d`6dy-f>ymT;NtNn zFt=>CtEJj&)w&_vi(SD-3XoLd+#A=OZt>M^g)ff!XLxA!ACu()2ImJwQb6iX(cOrV ztGbL}uiYOzE?N=)xg7GJj*6?WD6vQ8EDYP^0BrfCp$^C$0QHtV1aD)gw4W-!B1B6B z7X0DyJYdb}40_KLTx)hmRwGy#jA@=3G{%_O}N@ut|%k`St+zxulx2H3P- znlyXR-)0jb7_DGz3j^~ni9Xf~f~o)7a%ac+)DrSWMYDZzWAXaK{Hs&{c`OLa;l%|1QabN= zAG!a3aBT+9AKUHN|5x!8tlAE_kYkyb=I zaQvR+yJQ(QuvURz=&I-vMwDv$`3!J z`7y%H$P%`6L;6^Tyy+?YcQ3?U)xkVMsj4z!1txsqeVJg9RLye1wODso@mV81sk8E} zt8St^gR(_;&|1P1Oh)^XefqrqT3aHk1Ey<)`vmk$F6*DB7q+Lc)_~X9wOKmn$t*9q zCIEz3+#yI#JogkokC9r}P+MK$c7NGFEA&!4Ft5*M#Ib_1}f_!1G>)El0+ZN{8lyN~i&3lspl-*?aAxLVfR3JANw z<)=M+6MED1E--4dPpsq+4I78Ol{Mdi)xd+k%$BF*goR&Ks}!;PT9W&bd3wY8UVY=3 z1RWc#v^~|1S5iPX(dMWD(37AibVO8NueWw#5?PIrYN6a4x#gJZNIzjB-qLs!U|p^=Br8GKgP%*xXWZu?8&fg05}O- zeLrEcWIHNfePwbp^m;`uNF&IZS=X)7K_7M^kE0}x*kgGFvm~tCr`j>0So%N?+KiNl zloEYQYB3i5cdnp+0}R_ISaUj~D3c@}wYq(}hI~kl(}9`h2@wHb;F6y&VH+7aU=knQXzrn1KltBS~~J;oIC}NGM7jwL9>2$YVX?T(iaj6kMhL3g2?UY1oIKM%e-1BW7U;LkajTIFfGou zoB&8{+INP&#XR$h0%Axu1HM>k`HC|NeJXO}+Ei9TaybvM-Ss~9Q0>{fZj*CUHmks1 zuO%R3iO4C&kgS(@5kn>7j{_6UR;+%I`8xiYza`vAx}<(9<@Gb`^ka8c zg zq`DCSG*zm5tq8it9{y-}k`7r2lsYD%Ti{CPdhNb8>j`SGx|6t^kmieCY2ecEEGEgf zi$Lbr6n1C(epo;Ka~R$YxTxc);xH3?}h!@TW1jYbpCQSz2fwiHSvFPoe$-|ks=<|&d82_ zYl)8)KHk`VONm_!}*`yyuUV~ z{Nj#jaxHq`hPp_QQH`p544=&A-9i4=4%H{BEz|dJOPK}lJ#{z)$4h9gt<+&<&qt&x zSDgi?7KV1;yC#cyh96Eel65ezA4FhP)IUGs&WRjZaFMp(3)RAPqtZ)^M@ODS+8Pzr+5WV7h^OYH zE6&F9Iks^}Eq%DEKhLmq$mUaw5JG^z{?jKGy>9P}iJboHZmV>t8a~#L4^AUKZ4Pr; zF)|{6As^=JvmHd1yg%+g{)T^&rn@EGb5Fc@vrjf@lTuq4U9(q-5>*>7+SPSAyw`uQ z^oa*LcH71wL2O)0;$_&xJ&}2fp4}4CG(?{t#$K;*MtKkd4SWC`BkBhNxDCcY>rkuV z>L87j)$3On(OdSu6JmN_TtjbOl~8VWja z?CHw&W73`Ag1A%g0nn>lZ2h|!d~f$(XfgLFXyx|^Pnn7wd_`HzRTXQ;_pj|jSV-xq zYykm{`|Q(E$a*qB6;U{PcTeXJ&@)`_ucKSIciHils9<$Pgb0HAXtSTY20jSd`kwk) zc#BnHi*(JC{Ql~ddi<(zmCwh_08*@7ISr5D+X94$!^+R|GLxrQWBB%{BFxmFZvd&q zpmt`u%}>9o@mrH%Aga%8NhMis@=yrCeAbv_i=U1k&}}#STR6lTwb5>=oCA|g1ux?7 z+yMyZ4MH;FsO9j=)nm2iT;OmU<&`h^p7(>L6@AC!kzw@g1{LWAc2ya02jZg#7bvuq zWoWW=md2o|hQ!XYO=NXMFD+f_oOa`*Qe7e1w&ks|Y>?WAQ?0b~mnqfD4afKbE;a5= zX||zRH0)#k9p}o>3X!A4GD38h$}v+RUE-dsX42;QWNFh9@#o`nsl{{fn#M7Sef~Vz z*5s+y?9gB{73h`ZT6J4B&>K59Kh2TU+VfFatdOJR8#-R0bR6g^#a1n?npU-!2->KP z>8~*RpM+@&m98b4c`8el)Shf`A!s%rmPK2tlacg55>s#0oCZ6;Rv`ks316}^N9szIYR1@?iWb#d{E(_^o;n2R8NRph9NSpno{?W8NLS<7aScAkTB)Ee>- z1hO^N;HZR}%ZaxRN*VAXPHvA^Dz0d3U(fMbvr2nvIXw9QhYW1y-cf$rpef1UwMEyhD~ z`Z9UOh&w^4WTc7IHBEb1wfu~IpSA3ly67xy1hHCS7?DysAP_?fl{vUeKlG$3eVNZC z#_H9qK}GN2=Yv`f(}E&Q4Sb%JnvRh{)VCrn9YP3+R*>t*Z$f8JiBjwdD5^Lh85@^w zUWKogm*;KTiyy;rZRd-eeeD~a z{OpMCQNQH+Hw?L_UgD9)X|qtS5O3zhAhOg(s{Fw z-moHThMb%apRaS)F4|Bv`|cNi1TwdW3_+&N-2(@crh@nRWX#-rp6CkqmN1HR(0dDh z)|Mi)vMTffe~+6Q5clg0Vq8@@c4jsrT;m%&c=Hd74!Hr&M8EZy&%4bIZV;rh;*z>Y zcGW!>)pLH-U)N4$V8*p~&yJV8i+HhMS``}E_EYfD?K;2h&wv^a!LPqil$r-ZnFptS z)_Ct%rOAmoeP!LAls&&WmcOvAJH1uV81wQR7vghJmn6Jz5Z6x)Vi~9@b$K7`g@ZT+ z8rCoG+)$;3K*AprVtyPmBRZ>#y~`ot1=C|PhclF441oXOP*OZKIoKW2n01+WzDutp zhB@bwA&gyvbMX{02zFAPUyuu_hHFr!Ku0fACO{7B^wkDF`-_Q`Yg~~y2cILbyHg-m zpdew1N~}28^XOR$Kqu-?Xq28d4eVZdY-Dotu^)=1@}b)Imf8S~HKH=G4tJIgf)FIWeC3(EI-F&BjD{wPd)r4k0r{VrT=S0Iy z(_UVucX3mW=5lYzL!ix5Uo*G&Q=50QY#smGG}ubz29vt9@cOGEz_87U4oZ8AurgP; ze=S1=X%iH7@8?I4cfJ;BkMq?CH%J@=I#+|XxM}Jpc<4d-?`;7DF3l41lsj-i*QI9u zV;Uz8{KjKd!*fO7RDb7Ej^JtWQb4pw&QpYh7})nraq`KIdHasZ`?3t4Kj#5w{@8LU z=P04FbefOnrLquQ8X9C*BQYuRQEs?33GANTqN3F#T7`CvCP2*G$VIBs{IF=D&_;x0 zNMma@0y8LoWO&1ry3XF7a@`X!XJB&L*9!lH5;Nf zuT1X%zc<3u9YG2Re2)YVVz0HkiRRHvZUD{ep6;kfDE@o>bUJa~td3m&F3&aq#{*4} z!8AN)2Cm#HRb76JRSwMz{+Su`xn_xLgi(`w^MNwN#*Z=N^LsY(pC4xfE^dKl68!(> zug-i_1^5S&#Gj-K$1C_)5~uO+K?1OODHiMcnIfhd472&267Gvlf{xa&CfOd%%MEbZcmjpr6wNc zmkExkuOCJDuZfS*a9jVhZZJX{YeOAPdG;k6j9EYJ=1MQneeb>nxl4|fMP9|q?eHM( zE(sP5I}rOD{onvgIJ^iO|1wO8&x`17l7>!W$9-#&mKmob-0N4$Q}>ShA9bpCCyvh+v}@*O&9vb9?3zFZiZ&)?!EB#j^BQs|33bE zAN%Eg<#8a)taYs`zvt&X7Xv1-QkiqD7MrnQo~s5y`(3sDiKEX7CeNvv!q_i@b06$< zwhk(~yIYxXm;^;BU#qJ}f-yAaE810T=~kikNCs6*T}7EaIOOIu6AvZM12I z+26tA1?@hGUjjfQKPgKADdW%VnB>f>cXr+cN@8tS0tS;Ts&?@M-V3z7^AthPKi!e5 z)oAJ7JB}_JSX)tSXvTDai-z^BuH5B1U9oG*k3;eRp=Z{%v79nGJ{wB_TD9e4Nh zHe2$~CQ=BLIvspa%WECE)>Pa0M#n_nHkMSEu$V~7B-G6&aByxIgXqB|JKNjABtj9O z;Kg3y7sN?gwQtDC~+C}ndx{*9yNWNBrl>tn71tC zGJl#tbpB#On%J?W-#Jgl3EaqGyl?{NSyI5?o_B++13=;}pMtqCpPP#KvuGZYd(O4e zAQ@15U7WD7L0M`1k97I(D!$OXL^fKziaW}yr$R+pO^R!E>d<#UAq^Oau6l1k=`pO$!%Ce$>F@I7 z)+tfyGfnrOgp1x$RwSRIi_0-)PxPX4KvPfZM+8mLX;))YE z+>2H~rigO73U9<1>8IuM+TBX%b`70r%fT zSXDMxr3rs5kHc+~x=Vr`4-ABkE>2HusVLRbux-@23t+>f*V|d{p8L%d-cZDp!1Md1 z(EbP9f=42k6~tw2jmC?v=#DPKVORV18}sgJTm*ABPJ7}(>Ph`cYopGMOTiRf zcX{bbxx3RNDIvL*xObz>Ql}(?a$5VUrOsD9~_&#yHSvxIY_wwP18L zl{M&lZ}IuKt)uuDgS+8I?8DRgUN;bv``;?}cHK;b3&TuM|rev}XzU@r!0!-Pqb zg7mUPLGx0$A_Ak$dDL|uC;*19Fc9#9dZA_wTxVrr!IB~3pSrP`DdB)Qmc7%+3lw9D zEUWj&6}XaYXk`=;r?4kPaa;gy&}Y5U$NHt?xD$b{Xb?YO@VUDGvEYQ2!EHnXnbVSb z*G__>5u7p=KS!0LY#9fOojPlNox3ssAcE&_AOcQy_OgZS{6@ZtXEbUj!`98jH%R4u z{O%1VQ-S-%MA9WgdOk4=825;f7uSPP^bK_T%SNp$ndPha777n{d4(y_qWbOC_VZgi zy7IZxMm08$lfPDQDPzJdB2wtr*Y#!!_hp6wBiOmH9`AGHV`Em+@tUmHF&ttYhxU3X zb^Ou+A6Kaw7n6Ws*G!+i^w&=s!o1X1`P*|;_T&2|IE>SDN}@Dr%=XBw1XoL5`rj zY^|?a!n;{6fW6}X1-57I%Fl$h4F1;5yE%!q)ZYrl3|=TNToys|6_uylFgB?}t%f54 z-jzaufEq$|EJ;YOoX^%+xC70pjh%Ug0o-;<0CV%l^j8mhkTf9ra0r-oo1;|7(<#NdpkKDDs5GC zqwqb$4{hH;4q&q>FHG2t7P2LTf!JTa(a8aEqxQOF7L7IEIz>6m`jVfB4l3tP zS>?*!B=ezwWWK8U)>y??r*&m*cb-q)Ybs$1T{<4#9wDf`s!<3Kd5xeO) zKeVYi$$uVjuy@>O#`vj#;dO)bJPYs-UvFF_m)3ROTYNITb-0dkF&JRbw`t%Q?Ye6> z@{INtN8o_-+?8XXf!>rb*@dH>-|2gu;~|77J1i@2A79M3R$7$&g4%S{;+mOkn7reN zQu6UsI2XvDa8!DVvR&fYF$f#f9&N&cy|8=_v&KMM!ME89-40hTkF7^Ke|i~D)7F>d zwlTi(W6p%wmU57yo|#h|GSIE158M6v6@jx&M5u}cY(TK{q1-=gka+n&Y|!;kL|U20 zq;!X9PTK}Im64gkrOAJ~S<~y6KXAYa3RU5q)ciZE3gzAypB)c!#+&{+GScq=4jbkz zAE#-Oj2(&~V0J&O9_`(?{sI#Cxu&0A-25`b&u>?@^_?d$dy`e$LX5X0!;@~~zVrGX zBf+ns@012HH*$Ds%?l2oX-d7*8Aum+?-pi#$0P7QJd!ul-)NrYcA_gJv1=lWF%p{v zi$ZUY=0S+S+lvoN>>6E{##ZMO7ZX8J7;sbifSVwxk9UF=8D{s^A4lEg=(}5RN3rQ` z0v^)i*~K^7ZC^!%WY%gd;-=KDQ)O*u3z$!Ge9_UtPU1rGhPrTX!rQdAO@%}9Vj%or zZ+GmGN3MQ~It027eVgf@HFU^}DyzI$AAr!eZ=4%;dfvsVXcgmtkx7-{)pKmK4QWgn zdy{t6=4L!@VG(tZub%%31E#RX0SLT@a;7ETmV&+7xNTiEhhrxlQ60d!Is9Jl8zax# zRD2qd+n7xalk~njj6V&lT&XzDrR=qA@LfLzjD0b)A(Cs4kQB}S?A2OJ=Y@;e(It;X z25J+>=0N7?wW@u#3aKyOA}DcDMRW6yAWrU6Mj8*? z=L#qxpUc3vOH(N@rn4vMkAtKx0-`)iC;t#V+F=*(ZX*Sop(PwnNPP+fVwz;yFO44a z`AP-g+zD7S4q=02>?s*9{RF_4oKowtrtQylYAyd0I)wATK!qM@izPr_8H-;Ys1bvr==nz)c9(T#idCESSw4*JEVdmE zV7ot<0fd5uAIE1jcGMgiBUX}7na8>mqfd2ly(Z6x6EB3HLx(of948*`D&2S<6rN5p z3cQ_}y!H+`MfhFasaGz*wVZVW!U81!wu(}t{jbp?@Y>WpC|VXHrl5Q8{1n+`{AcIs z3Xm~%WZfS^@{&#+l0JlUgph~v=O@S$ft@3UiO3COB)DD$HwJpIo_=snVfCs7n`yW4 zct-Fh0}E5RT{Z|OvytHOm#tTy|ITwIMDxU6CIh6hSadKfKoq2*=Uh5o?^g2dW9WSx zre3b?Fn<9gYdV|0&klgw5(GiqM)SNxY1$=ous*8&wAu;#R&qE9bmF)Uf*`|Cvz9T} znIcl@EL%zp#uF*~itU(xSR7-(>-5z^qxJFTc-3!y{Fn9am+jF6d&UQ0AWK`}wuEJr zWuPhC{8HDQf>|IVECM_Z{Gl-w&jd!4CB+V=xjacE?o z>an1>w5r@l<-DLVT}P}LBs9e#l)*v^pLPh^Z@&URWdJzRePAEMA{qxo+^`+|?dy&9 zB>0;fiFJwHWGM^^^)*@p*tiXDOaX}7r*vyUBZwRL2Y{jSx9i#-FACe(dYK|AJxUL1@Nv zb0(~3LRW>ke^W&{0|52)o9mDVeTIL2BE~J5NWNKrvIpev{8CFFF#f0g^WTKf-}mzS zcW-=h|9d>r|6`r}b7o!u-s&NfL;4}WG$*d}B)dX< z(f*XJJ3#>zLf@T3B@E&@Jo|m|#(*Wj;W&1`W{O3t${=<*_d@v5) zD|->5%oOhbmu^oD==T4Zw-vuJ4{brl^8g<%^Vn-Hzcy#;`Uw<32|W<^jmUYhstmq|f7M?&rKh)EWYuj*TTdMb@l-GG%& zU+r2&;fcrMgMzDa%a^(jM%ybZm0d*w022?wS!7>Dt1jHL8!^s2ssdGovCl+m(l5$> z@-fiMw|z*4pPt}K7S(t^UBIJp(NbI2tQ#@Sg(x!HzT<+b3`lv*x1|TH-BziX8LPxjex8^!K(;CBk6AYBJ`HN6$f5$lUyon^g+S3a3cA0j zLtw11eOPa-5;pwcj-JpzcGm_jhMd_YFnlUbCO&=s`!2vQ8UINc(8`rP&iJ$y4#ec% zQVgyK+|U&$k1rN(9Yyzfp9c#=bo=U1E9FSqr>XUyb;Ie~Vn?F(8F>fv200dVzcH(c z+D24k)>!wq0U@v}?yc!MazCu+PYeU~w6L zqgTM*`Y*=v?#7M(+c_QD|BA!o2WfxUdyViuvg$IRmjF3hyV9=!zvtUeE}Ll;zNt8& z{`bSjd~fx~G~L9{_NlUl!85otItLA>Lc%;X$*rrOh~Z3cu+>#iFWG181O+`ceXaxS z4A{wGhJS)lJHpQUe+~Wz;D2@C03m-M;BGNg6|e<;WHhf`P>(yBRszCqF%ox~Re@Zr z*Fk|AX|_2(%;(&PzHWb!FC_-D?F_+vJviMgcj=;Z9w-Lo+Bh+ki(Y?i1mYJT<8?E3 z8UPd(roP4xuR`s^;`nXHy^raAoJbv(hU*{9jK-FZ`+HK%&Ck5vCYT|w<{iEug8ynD zbP^yPAyRb3V;R`f0U7XRw=j9#FO}|KtdMU0?n1wDs8Z&h2R-kO+4674Tp?gr-kG%voLrv4GhIJY}#F zsxge3I8UI+Cc^lPoAQQTUg=I9L2^O z&zy9}2j=@S!x7YEOX-13W(JZ00r++WoFAaYaO8>t@51MHr{$NoSRzI2H{%f7b zlKg#6&KH~fD|_iT_)k%!w@rF7h!yZzhdXo`P8Zg96By*})hC*kri$r=I12r)1a}}rGtCDzM zL?J4nF^XjB!1~=-t`x6o;F~wwR!`~~D6HFuJ)3twaO*sQN#UeaCKmCtrtyti04W1BQqNYK59K*yHryX9U>`arqq%34?;0f3ysQF*`>xx>$8)`TvJ{*6cA7kT?Xt$u z={^cO%2Q8AeARubd+gFi5a2-f#@DI;ONM&+{zZ1u|2af;G^KpqH;yY&aOqQd(w07K4Zc|xsz(H-J zS6|rcuGzpd=|Bn)sG*LU?_ML$EkLY&IhyWYGrM&elB^#X^>CQIgxA8LL8{p*rzK(2 z!uV#KVMVgfnb82&ad511mQ4J8k**KFn>FsZ(rlZUd8SgrQN^2NeE&Hyw#WzV#h#Q~ zfMtq;4SVK4v(rt}$F6c7tm`hYKauxAF6-FxGx!{oYSk@ZtRYhvyuUYGU!5-p;lZNC zuX@W7$r068Egv%6zj|y|j>(nr?@!!FgDm0z2$x{g7BW~zk7PYQR zuWBJhOhhHo(Uj;vEIN|V4r*B-^^My>q6bw2D^OhNL^-#+9H!tH?~GKEEM*;lZK@fnS={F* zs@&e)4Fc=YP&~p`srzzRbe6o$+NR<@hMCl&<~Q<|%KmIp0XDso4??fL1+7L=siWr* z3GWOZaEcR+Xi^8kH>%;S>WU>*$fBV#j~8{}9Mf>r#}7#`QJ-)`p!e+VzWBF|P}Mv; zqz9D2p?hBzLpj5)@7eo4Ur{Zm=I>#L{n=EbxWqP>ZFXho@kF9y@InUiBIq7AowLgZ zT0W1x_Bfv&6iEwC@wO+qrK+jCLR5P6w6QjFut>=`OrPqPe zkx7tE_IXlc&y_|E`TRSfDokbunA;qSzX%+!RgY%uUOIj!R#O(j!>L$2 zmdebZ^*H8!x$$)twy)yY?iN+qFr0IJieMO*9O}`(>Sj03JUoV7Ph$^B!1jw@C7E^! zPb&Bw)vgp4?>@#wr->SGofx_kC7xiLz4?P2A-0WS)mGAUq&?A;;dO;&6;7e&sI_;2 z&n@ut*}yiLk;KpANhk3QBF_WW_w-)Xhui7>*BMvf(ul(vKYh0YSJ}(lL&9J$f~6O> z9N3)+T_3x%xqgP$l{Trv<`sGhpBAc`h;1S6C!W9XjI=?JYkBNT&N=OJw9|CR*IZeIT|yn7ifMR{b;cm!6;QnK24K8x~oho`7e4d4&y1xxtwZvMHGUS_6TT@ZuEAl#A z9c9TASVQmWau&Yrk)$j=6)H#Tz0+^NZR8b4Io1*y-0*P;UybFifvsif_O-bA(9cUD z@pN#O6_V%*7r(*G!0o4ympr}4L<&n?(YS^Dpv4MlZxMDi{ZR`ueremx;2kK+%a+f2 z#Ds;peNB_x(CA$*IysK7C~1J4by}gA^9QjC6Q;RC2j1u!vv_{Ph4BonyC}ZNnG?5J zZ|O3*5`S|h$>}eG#n31Dv*+W@Sv)+F-cs+vHa@=I7X9Q9K{>|wlF6}H?9Ck!m@iVb zl8^E^(;h*pb7&~LxS>`uA5!X7gNl}}YIWTmmDEtf6jhGe+q_0vMSG8nfEj%3vj_*D;>c3*e>Zy)6O5+ zIP&hr(d5p#AB%Q%n3cK5OCgri0;F(Tm3+@iwb46yFDm!u;GzW13zd!67F0s3bKg*( zjABT1HU_Y*pHI8?PYco*d_g!VY}-}c{{jjmpQ z?CzhZx9SD#@7h(aWm0~Bw^KE_E#FkzW7}1v z==(OX^|6y`rLzn*cKqm!y-C?dI;m34T|e*J((kHwJ4UCYZL_Bbuq~ZR&2BP7l64&p zjY(fXx59e9g;zB(RuXVbg%_42J1WP#qqu_UdGC9XUHW>LQ2P!Jjo1alyGcQ#bd@%l zC8Eqe$*&4TH(>aes@igy=~E?*y5+PS2PL*tZ@4;wUG!Ij;lVZAJ=v+0tJ0sjMY1U6 zb+Ub!)IXAfN|kc$I$pYbbC^sKy4-~`uqNvI=H_w>pX-t~j;RQ9ORXm6(~C?`9H!Vc z+HgMsqXDUJpAJi59;@>eC^GgLMXc6w);{H{9k|4&N_Ly3moQP=khD#Scg^r?9dPWCcv*~5gj$?i~p+%E)Qrr4Mp zJH0ZrUa629X`vbCZ_ozWH~6@pcTc<@xBvvM zPXN0`s`}|Q+k%X)`klF4ic5c;DnhZNL>7YB9(`OY=w>PB2)j293q%=ie#rt}m;gt_L7h-SM9yghy1YMPiwY`h*LU8Cj zWj;lIhcLR2{oGbZB^K~6A;esyfFDtX`D^~zGuUlP@>KKNu77egW#QL0`e0V?xcqEq zr)h4K`44KXGWr>O^|0Zed|-8Wl0W#G1(=jQ@g`H+n{TUdY`q3?HD7!0{d|Q&*0)PC zVFo3*H*xw>M#?^D54<8ps02DpwjHk7<(lz$ajL(3ci(U;$Oc0$7g_tJUD%jlOH$S) zB1oqB>wxS7Op-llI|+f}!|K#;ueL?mhR64RIz}w`KWp$CsnYH_umSGgmqLc$t>DlR z=~xEo(YDK`Qxi1eh7Xk&8^wH1c;U-pli**$S-5>cO*UK)x3FDr_gimlJ8)*iuMG2d z{h*ev=xOU?|A{_5is((_ZKkWqkL($TK(ay4z7^1y|2W?)^=yBMD7xJeJV-e!C@vm< zUSfL5`h-a^XRvgm1IK6{M=D4vp*{te>_$@P!~F^P#O#vNAHC_FUUdL zeRoR!MX#j3%%d?r9&!v3<_cnt3Gf%F{%%7N!essE{J5EOk=3d&W&!QM6I1Rf( zK3eH=wR67)*lynFvsdeh4`z$n#L{dsDOc4e;sfz{$N?`fEe9bnTh}&2R6gY_i1FJj z+*pi*^xF04fZREYA6 zOL}%b`iZ_uFw~zeRde;*dredv<^3T0GMP^&MndGd^3{ejG@EY%12xCc=*NhYllokL zTG~}W$Th5{C;4GyETQd&#;i=TVx{~e|EnV`~c&vcg?S|gu@bcpMXQBQ!Jd}%WMzP z4*KPi^FpUeH|~)SLf^JXvsHwBefY*&rmkJ`2S{dk);H7C1>QJ z;CK=0WbLQ>09j^*Wo1^6z$BlXavGP**u2zBPvIfI(mV{g%+#TPXM(=g&c0GhKeRKO z3i6QKd45+;XR0mBX9BXl>CtX%m=6A46}iZw#1JyJytM?Z);Pq3M&Z6BR<%G}N8V<_ zrh~606)%`wv>QO2a3P7-ta4d!w}_1eGbbArVY8;ty!pz|ZS?5jZD3NuFxAcYq@~OW z(pX9I-?bwlT`5U~HYyOH=GvtV9<>{10OK(z?%rTKQCsPKGJJdpW_w*ZA9JD-H2Ffs zqrbbrxq+wgH3ysM&NdMEbK0Dln!>~Lrnx&*;kNWV)Vgu9%Irl!e|rA9Rea1AD1B#Y z{pRT`7&NGi&wHGF=Hg-vhjOepKYG?tSk;o0Z-Mu0xDL;RjBjx@WAf3S4GT6lI`WBh zwetv4fCS$GOvKVAso4U>ymgTZuE~NGz6;^7HdU_>hxuQLkz-_Lhx#8Vdt?+| zg}T1);Z}DlEWc}h&%+WRw+_mPZ+Tvc^(dbtt?{b~PQRTB>N)JO=3Ze@(kl=#^AL`U zSqybLSet(|=NquZ32)(~IyOBzK7h^|nAx^w%8owcGBJ9<(m$K7*g??C(r>WM_xp4= zpg~wV#>)E~cfRn$K!*%A1gB;PgIRsOc%mp#>tI}lxUFeqeX#r*tB6YsBv|O)Ae1IK zTZ29Am% zRBjmWCd6G!z{<|v28k#0204$(T$33y8>Jx5GG_SRY7jZgLJlHUc-rgLGBS!%6MiGF zcYNzmyZjn566z6ISM*50Vtb?}s>ahx7{)!DTq&|~qB7%m&vtf+1zhlJ1t0WI!TEH2 zn5!z5hN>EEU;M!DXBgP7-QM(UtrFs2lSeF1FQ}r-$ozF4h`&%q#xWU-9_-wajiW%r zV2ZoPvx~7g$O%f0`B*i9+as9*{$ihDbaXI+C!>9hIFPss2&O=z-+#D8BoFUS;#=LQ zMc7MxckJmS1p&9i_R-=Pa>~uxSS8kbW^iUi%6(azS=6LtD^en+&6CB&WNUijB-nOAIPQ@Ukl5Qg##@A^+n>)=s@I&rfvSg5Nsxyb~ zT1Xq7O!r~WE+(_mg;Yapq4O3#ZD4Y+fyd$Na4pIV_PB`W4D09+zbzIeVe;T9jT+dZ zGGl9{^t*PfbHE8957+?WI#n14y$q+@TVDdZLa`UU&DIMSha~@HVpo@2UGUFnLC+$V z9(;G%FUZu!8BQq)M$zy>L~#k}QT2nn3(oWxA+%2UEpGISrI4~35B;M&WH^F-rN}SW zbA|ZN?zKd17RsN>0D`^Fclc&gW}Yw0@u5VI z++mym`i0`KeAb%H`1QBS_Xba}UDET-I(@n(0tMM0R0m1Z+3cu)5d^XOdbJnWm&GR0 z>nJ}%GCJCVj$k|G7dE_D3i}FNHC37n6P29tQ3K@Kdghk`nyooDSV>^enq?;63px^S;NmcMWivpJbb0OJDfq&ElP}*GNcyDIaULSz`eY8dQma z1}KJD;qWd}(D|mzdk-u|8THrtnHiN-0kzeCoEhlr2Cc~=2oDg!zQU-CCksv7QJMt3 z+2!FtaA7coPR6tP93SzMfwmESh3q~L)HCtkhu%OYW4?_;_x#gjo%-!?@T&UzIcZmQ z&s^VR7feS?xg&UNLh}1I=g258o=YANFwQuu_)|&ur$TobR(6~1==uC-fCKx=Q+ltd z?yO=ZL)j+iEKv#8@turUY~t$5iyZ_NW}6$O&_765>`D%q1&xfc)xXac9zHZTRPp2= zLC)U2na@0bpFc87sEtd3w!gMHP6J3AAsJ&sR*Qp#Nmi5Nq*R4e4cr$5#&|@VyqROe z&bL5u_V0BItL#T_$$o#02k)5RY+@PKR2vDvFW7Zx4t~xgOiFMC&DwRzFyfEAW(itN zH6*5+E!l&xst~8e)fm7psnE+(qbI;XC1FhKd2h4#Kb@UhDfv0`(Q9T!f{Xm2Jc{m5 zn((}qC%ppg+lu24-M=;8PE?fTGgsYAjnN}f z$ka=C0MSvy4;F%f)BNRXZ@CF@!Peh8MYY+)t@xkQyF>4HW`gNHo=7y*4e_1t>heZy zYF>W4V`uQ=wB|e!#wTbpmE!QY^YU?pv^6zhB-L1Q!Z)klX1)C0`^0Ezz&{*af2|+r z*W+&QLcOl-cN<9Nxx=3mES^iGi-{;_6Aa$x7gxz&~4q~(?O%sn)dVwx6~9|h5^SVs=+l#c zev6t};ZSNg0SdS02trl!HSt%OPxi!7FvaJ0wadT;q+`#Qg*~LeV zmzmt1Mdz*Vf%Jhq2tKgewAWT60(gfd6WEv+s@p56o9uw!?}QXHKT{Hsz-+M>i3@+u z5*H5b-xcCo39AXsWjyR5VeVl9c6NV$X&tTyFUY3g(7Ys{7vwZp-}-CD40|t)5-Ggi zYP?1#t${8(Y0NoV_Kqkvh#F&`p81Et^W6UZUV7A&&6@lb2%W^vA;=^Tph-=X?Gz`S)+|d-iOqu{S5VoD;BhasU35tiTuw{sGSV zu#u0&2NOeWM=XCogdlL17|{RU@ZEH|zrIx(_ec7D^Un#&`tLWDjX(cZPjQ)KyqJ3= zf0(xZPk-MPPW48y$g1(`@YhBBrP>C)Q8lHy|4Hd)9sE6U0M}E&8bI9!wagk-urb(`S-vsW!ZO`dW~Ja+-X(nX&Zl2RF5@th6M6C1Rjc3m`xe9U z24A!{M?%^ICyKh!&=}kmWTamGHO|5Bjj`X3FaD~HhP@v`Zp6jKz4^bR`uCRLNt7b0y>_6tiECztx6Cye8q=q&t2}UpXn6Q(evCE8tT5ou+mmH z8sqtV5ZPRidQ^6;_|96rkBkm-rZZ?w$Pjp8JNBH_mL#)cVb<`W*(y)_bR^&4GX5Vdqw z1R%5?^LpvjqIzOoWaNWnFeQVUD^$uER7Yre$`(KUes)2t%r|?&+>uKC>)&(O;EGPU zcG2YR#-?HB{-Q}f4xl>Un6^0t2wGtr3uRx_321r!Jj(jNmnK*=H%XNFoNfDR#I-~OWvB*j&4Hz3A?*(7h5c; z%a-MsC_&%!T%uIx7hQ*c4c8yR(SHwY>M(p=T&+Slb5cnNFR0$fMb&A8&J#7=1*juR zoEKBwQQoh^{iSL%$H-TRhR#uZB2?asv9E&giwI0EPPnjNa!VX}akWofV=wN$ZI{B!YF# zooj>S1Y`+hOrKcOIQFJ>?Zo*e)~)32;;4F++tcTNa>)o3;XXGH^?#T0P(9`jd4us9 zByd`QF2m!317NHIpOQy%Q~b4rYbyWiE}xZ81$jk^G(5UJU+TtsJ)8~eIK4AtAZBc+ zT`jwQUYCBYbI!Wn*6Zh;&ddoyS0nMkPJWehWBSeMaq; zw@V`6uF>Jp-z{2*4LoM&p5iQ*T=vEzV7CLz$%OaPB{6#hWQsHiOlexDqqFU*D}Z83 zVRg%qxy@5?%$9klgbChtVh}p|!1}1b4~X4%V_U^YawNi?l?oWzMXkuJ<6D#YI-VTZ z82mtBv?@$+t-j~DFfv}Mp`{R6Z~rU}2jx}V!A7tlc6PpfSFCCbwy6Dg&ojPRx2a0I zl45Q2B5tk-#q3?1d+)S0J`{TvdGJ~xs)%J=sjeu&8^$BWLk?170=H})RLA+&BUD)z zzUM^C(eJ(ICmUtQW=4C7GZi#SU-9C{E*NuDwEwNku`Eg_+rm!~K>|{^6V*XznxST( zau%6kp&qOShj&NsL-&&%49d(in5w4rf~Re2|8-&7_stFKxt>~!vN(BZXy2?OhO8^I zaO+POvjuUn*G|K0ve1YMA=v84!O59v`7P&av%g0=trm6_dl^AtGq%AbOS0G1qpruJ zvyCsI+-B`dVG}2VRXQv;)prtNp7){#6XxNumnp&UI?~F(6rOTieuq#5Gs+Tl^f-S} z8~^ub{xw2V8f}dYlMjla^i|cLI+|-&40M=xhHnKJ>K1?L^*f@AzJSqHD_`xR#_wer z+#3t=d2okI!ha4L4bPc^zMGVDR;%>GRu>lE1>Sz303dfi zcx(37tzxVFuFn^BkjESf8x_CWkBlFRaTw-txCN`*Ejiy*XI_1Dt2;6Zh)O$b#S{VC z*>S%m10_@5PyO&kpIR>+tVf0ILa^0}FaYuw7JtAq#pq^mBbgJi?HjRkj4D! z>xR3^h3UPYoE-Pg-DVW7j{U9$PtRws(;Idc6ua6%w>i32Oe;;qArv`72^qR)@gHTA zw;PXr`RwM`)~@jTHBD`zA5Ms4xOjh%n@$sGMbNqjEZ?mYzp^O`leUHMIhvm2b9hdeVg;7jrt|7!YL2ivi!4gNt>M-s<4dUy9D$qfaO9(zq|UNkAz&H_b@#!q;c^vMLgH@3OpKLVcD>0h?~wwo41PC@(JH#N+1;5O0Uu!u`xER)@Q-2qP0Xo3dqYb~J5c%jbC26O7!{eMzBd)%?YDtPmbMBci0b0cs!N z>YjA9UMCfII-v3UiWjtD18t-$LG;5ZwpzF+gx7FC-C5>Vy&3a|vd!7Pm&c+-Ib4=$ zw^qo*<0L1dO}5x3Mr`8j5>d0nLLM_0!28C<6|RmXuJ7rKoThe=Ja*N*e@*L6eHLqW`smle< z;AQ=gq9SVD`SUlM1qNzGp<58@D+&X;JhQU}gh5GP)*o0$ zq_VdzNlmobw!&48jH!>?Tdq6t! zwxAWx5nd7fUN@<|4EH_rNbtX5J10 z>Aq1f*}1y^WM+czQ3S4K%z9|BVV0VvZRSXvPdTZNp3usyES9mCJiF1;S#IRay3J*s z#CS5MvWYK&vh%+n0nd)tYXW;emNj24e=BKB*gBuu=hoC|SdHz8T`_PkomUT-O1$u; z%?~~pH*=l8x(u2wxfE|4X(o)#47PyiPtqqW<8Rl}6V+eOSmdp-9HrGfY-Bi^-1xw} zJCK3L*4VsJx`ck@J;=8a^NK(>dj-v_X|;OA!i3gOU>EsK3&{nmuSe|tx>f3T#oDBH=o2)6o;>>b; z^TP-A0jWI2l6JM%5<;&s>6GhBb+ScXx9G9HW)XH3Qm;BTdUc1kJ{F4`-tjWlDMz$F z*@A|SfZBAIseuOm=Rhbeeh%~L;8P-x{E~|21$HOr@*1x=lYm8 zC2tGD}5z$41>~_;>kZFWIXp>U{W3(>2 zQ%jgR1?KWp6WNl|@-Ez@)QoX~c1vi3!Lf*tw$7$1q%oMNLvlUno@8|i>g^96rSK6FL?6( zo-0A5*{Jmqa?KDTY~KhKXXNe~SZCr=#f?!-r-Yoe8b%2DYDp_{{9hncvNq;0b~{a~ z?kj*MSZpx;(K6?OS0Sks!`7CS6s6lqIId>g_c^U#z`eH4lWA}Z5Myl=yI*_G>%Y&{ zJ;Q+7`{~#n2!`zy@>}DRqC6u-vJPixYw$wsqiBWJNW8j|Sh!1go zG)(kxY;DAK)_cRoi;6^h;A%NDWT;G|(4CtM*CONLsEq4``2QEk;uNkk=ar7dZNv!v zqX5TvrSVw8aHIh@EXThpl+D|8)LS-4r19p#I*IGyYC26`*{T3*Gej~$dMx;3zQ!_-{07qR-A4?zPmD1qm zw+t=*gNbDx(r+VFj|F_1Z%>=`KKim_xJ`7;5kh|+e$bMJ<3%5^-!2*Sn0~!$W%7RZ zcRn6U$`kR1U3frq_3r0Ldktke>9F?Z)+g5!fdXvQIZ2utUl+$p|>WG(KF3Y42m}0dE7Y?OMbkULF1Of>Vd~oUKzD;gUSn2145K9Z99CE zh1IU6)F^V+AgP(aa>98{wjEv|c!(g`JpL0q$?)~LTAM|n+S<+o48otkG41kn=hl3n zuGS-|Np~Zfq_nr6ZruAVj@D=p)}USQcd4nBMs43zKBAX=P0(vrL`^2kf*v=2MKDy2 zPM+u-%@N=_n@fQkN~0KhpUiVx>8Pj46HQyCz1;wl=wS0Dl^U+p;8lO533DlRhkNQ0 z?VN!Ug0oe;_^BL!s&YQB4UgAa!eiRomC`(s0vkmyZJ7hl`7jUA-vgBpG2x}tbtHqw#Fw*Uj; z0`dQu{}QHjYD>4Z<^Yf&gL$;N@1FRJy}!PDZL)U`M?UC0M*F^gT&hXb)6OPZh(zvXO?rjTw z^o2bT|K(>iqSpKGrh#IM4stc^D6eC{NpSL{#oMf-Idf>6laP}BdGT!~Sz|+{G^ZA2 z_sz`l1TU=(T~dx)$TGECfwY)iSLavIVJy!h(%PG+5*qxlomeJzfbHwx=ThP|5|Avx zR-opC`POt(Ln%3XvUXIX>r>K46nLVGasqj|BO58pf+ohz8_!A51mrNsl9O6uBL+wC^6{& zaK%(;jUY&JcirldVI>Fc2T4}B+!Zte=34R~^Zs>ki&79R}KWac$Y$yW6Q?j7%bFA8Ku^okGL) ziUf3ydN}kyIy>*6rm{VbLx9jBv=EA#pdc$DQlvMHp-ORWBmyddh$tQOQ6!k91PBTW z1Xu)wRYZ*-OA8PLR0u330=AXV(MT~8K!Qf)UEGK6+j;xu&C8#6CNp>Dp8LD!d_SMx zIil7j%A!Gwkj*ddRP1%q1%Lby0}qGG`69olG)jir4&b55D3?GVsj*w)@52#Smi#YF zFjIS!(9_x4*GCq!wM|b&>d9;DBCh)WIQ|jat7le0(`h+snDss&PhT%WwZ~F?ps_tY zbxdt_^G&ApLLnJREU4Og0iJZ?Y;xPhQ;Jdvz$m3`gQFllGG;C>m4h=^RNM^?$lD4# z>9TpqHe+EHSSPmV12K)j@M2CWQXU_vwHpOT=BczCn*UN4AEePkmoo(N2)J6*OC7*3<=J}olfCA)$jeJ_2k$mH;g{fj} zPzbyWU$g3evvH2qrs_N_rwTfl{7Jy=jggm8K^2*(Q2*Jf7k@XL3UJ%N&7WmNl(9Xq#e#BP;Gs z9Y~Ho1@d)>;e~1?t!5w*eGM_!VvZmG_++R%B+kvX-+W2j)QM(4eP+uQSA*@xt6`%<;I0nzgn69|Z8*Qn+LIj(QfR%Yr4!*% z=iCUr|Klc;bN!h4nI(N{L*#^0<|3_z|F8# z&B5VT-*gJR&HK{LZEFJ~NzTl&EP)h1k0FVnACbsfR(S56uopPruVmLb(B)B)IUOh! zKl$lx8XkP|KMGhwI~X?EGM3TdmXYwu7r@kc-_pXuMFL!Y%(P}a%|mBB%`0EJ$NB<| zWDS}9uI;vX6akxDBsGA(7T#~(Z~8e9pb2s_2DwXlLlOv6N!w%!sSc5_`ma|GsUID{|+ zb^{CZ5pZK8PFv(3E{13oA`Kz1B%{ZRB=yAoCAU=0D1pz{rN-wDo>34{>oN-Sho?!T z5+q(RIdIGEwMxWcT4sZAk{Gh$o-V$~w0*w4_t9_Sl&z2Os?rLo5Ln>OT3<{yF47%k zaSjk3jPc+IyE^lxV7?i*x%4p6DGkUc5#E;??`%Ihn$@ z&yVYt^A8pONWTf?-dz`vp68lDMPf+I_#$A)%kPB71)2Qd#-fN=&n`E(6z{$IR|{gq z4zM6@d07Yd`*|*=1#}k!;OX@6Rb6OvK!44V?h2{72!sS=i zR3_nqM;r+Wfdtuh*z6gDj%+@Q;(Y4z%k;uM$(5vasjdhn>c)xF*)AP`bupo#haQRrY|rh$`d%-4Gf=&ASE@`lT6VrlU8)q)TD`!% zn-id^Wq40%9aUvl$GP@z>(|3L6)!xCD#H@#f*cAD=%6bS11DeyR-0J&)H(|l(NV{u zyI~Y^OpfbSElch2)=L6okiP|@4zcTn(Y=~$`J@luCrQ96t`swW2SbIedfar|nPXC| zyM@4Ho)KlJO!TF-&h*A@-5cQ2tCUcfEgm{GB_CQBov6&w7k@QvlV4+Vey(-(<=k8S z{U%IFR-TzF7d=S@(UT7~LF>@W4ZlG_F`dK{394z^q`FUdaxPy(-%v`Gfv^5J$+#n; zt_x%p^iQ|%^x4QYxY3-sapUb}Ffuyo(4=5!*1cz*8ToD?h&fxO86!yVXO6Uf%57Ae z8qMf23ajjnlAS7B8Vq!A^D?7>M?4hQV-CZcQe2ym1o zeRllUM1f&Q*Hh8AP;}}gIS^dQX0^wzSo%S?8$fBIP!OST*-rfu;wA*djAMTM;ku`3 zCH2-9VA_(yUVZrS8Be6MSW7N}`{6k?M{h^s1%5|Sr*?@I=aHhY!Suf25a8%RIl;Zq z8q98SlDu&5-5Gqlyq@J|>I@dxl?O>SxO>IERGe%N@wdqsQu2CTjY;*lY7Z`G)X!Mj z%}|-$6CXXC2zyhV{%H#2du&8E)32$`@v0=q`k-75PTx|%uH{b4j_JP2#mS<;uW=Gw zt6&mMbOXZIWUWv4j)t!MF_86Wo7G5t2F5?b5Q?jixwMbd^&Q#_Srf5 zBz>Io>>s@#dxMjrt?R8MfufP+n!ioGpwH7`UAy><#sE9B&*vssVtZI#l_AwI7^PHB zVAC9gJ8gok>^&{f(Pl0?ZG`+67%P(aBQ94il44(2d-X$fT#=wY`sJl)@%a5=>9_Nop4 zcRL@)6aKGn`S7o1t?wE$ld&JtB$>Tac?@kfft5jeHZuD$I@Qfld|-)P|VsrT2& ze;t0EXa;aKVpd4_qItZnidC8B1NEK=Dv2(*4;Uq{`}ZA1YJyPp@^*`-21GT@M$g~D zvE6K^4ZQwwx#}{N^z=y|E@GH<1?cMPyl))t1T!{>LR8-9MSi2%7*(weX8RWnW*rQP zU7pKK_;@hlC7-ox&jPgs={y?uF20azlaZ~;lv$7HdS^oi+sWlMiz$<^8fD{da7g0> z4`{wK?s>R1vw%v&@{XP6k)xf|aE2lev5C2WW_DX6%+}Mp<;A7yg$(-{BHh_vkJZa(m<~zps5&9D`JyFM;M)Y3kAxrLs)~5MonH3t~U;dJ5=W9GiTpn8n^!lt17VQgT$dlLpio zXW|9`+LQ%+X6m0bJ)1i&zph+tTwllV-~YTpVK8xJ`J|(!F<&E-jf+WtgYma*Jh5+- zeFK;No!tO*DCie5Wd4`?xbn4pJdgbhtOo^a%_uCo;f4xF2>3bMyJITRCw}@T7K7SO literal 0 HcmV?d00001 diff --git a/mashkova_margarita_lab_3/docker-compose.yml b/mashkova_margarita_lab_3/docker-compose.yml new file mode 100644 index 0000000..7fe48ca --- /dev/null +++ b/mashkova_margarita_lab_3/docker-compose.yml @@ -0,0 +1,58 @@ +version: '3' + +networks: + my-network: + driver: bridge + +services: + db-university: + image: postgres:latest + container_name: db-university + ports: + - 5432:5432 + environment: + POSTGRES_PASSWORD: admin + POSTGRES_USER: admin + POSTGRES_DB: university + restart: always + networks: + - my-network + + groupe-service: + build: + context: . + dockerfile: ./groupe-service/Dockerfile + container_name: groupe-service + ports: + - 8080:8080 + restart: always + depends_on: + - db-university + networks: + - my-network + + student-service: + build: + context: . + dockerfile: ./student-service/Dockerfile + container_name: student-service + ports: + - 8081:8081 + restart: always + depends_on: + - db-university + networks: + - my-network + + nginx: + image: nginx + container_name: nginx + ports: + - "80:80" + networks: + - my-network + volumes: + - ./nginx-conf:/etc/nginx/conf.d + depends_on: + - groupe-service + - student-service \ No newline at end of file diff --git a/mashkova_margarita_lab_3/groupe-service/.gitignore b/mashkova_margarita_lab_3/groupe-service/.gitignore new file mode 100644 index 0000000..c2065bc --- /dev/null +++ b/mashkova_margarita_lab_3/groupe-service/.gitignore @@ -0,0 +1,37 @@ +HELP.md +.gradle +build/ +!gradle/wrapper/gradle-wrapper.jar +!**/src/main/**/build/ +!**/src/test/**/build/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ diff --git a/mashkova_margarita_lab_3/groupe-service/Dockerfile b/mashkova_margarita_lab_3/groupe-service/Dockerfile new file mode 100644 index 0000000..26d1b03 --- /dev/null +++ b/mashkova_margarita_lab_3/groupe-service/Dockerfile @@ -0,0 +1,7 @@ +FROM openjdk:17-jdk + +WORKDIR /app +COPY ./groupe-service/build/libs/groupe-service-1.0-SNAPSHOT.jar /app/groupe-service-1.0-SNAPSHOT.jar +EXPOSE 8080 + +CMD ["java", "-jar", "groupe-service-1.0-SNAPSHOT.jar"] \ No newline at end of file diff --git a/mashkova_margarita_lab_3/groupe-service/build.gradle b/mashkova_margarita_lab_3/groupe-service/build.gradle new file mode 100644 index 0000000..d98b955 --- /dev/null +++ b/mashkova_margarita_lab_3/groupe-service/build.gradle @@ -0,0 +1,37 @@ +plugins { + id 'java' + id 'org.springframework.boot' version '3.0.0' + id 'io.spring.dependency-management' version '1.1.0' +} + +group 'org.example' +version '1.0-SNAPSHOT' + +configurations { + compileOnly { + extendsFrom annotationProcessor + } +} + +repositories { + mavenCentral() +} + +dependencies { + implementation 'org.springframework.boot:spring-boot-starter-data-jpa' + implementation 'org.springframework.boot:spring-boot-starter-web' + implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.3' + implementation 'org.mapstruct:mapstruct:1.5.3.Final' + + compileOnly 'org.projectlombok:lombok' + annotationProcessor 'org.projectlombok:lombok' + runtimeOnly 'org.postgresql:postgresql' + annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.3.Final' + + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1' +} + +test { + useJUnitPlatform() +} \ No newline at end of file diff --git a/mashkova_margarita_lab_3/groupe-service/gradlew b/mashkova_margarita_lab_3/groupe-service/gradlew new file mode 100644 index 0000000..a69d9cb --- /dev/null +++ b/mashkova_margarita_lab_3/groupe-service/gradlew @@ -0,0 +1,240 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/mashkova_margarita_lab_3/groupe-service/gradlew.bat b/mashkova_margarita_lab_3/groupe-service/gradlew.bat new file mode 100644 index 0000000..f127cfd --- /dev/null +++ b/mashkova_margarita_lab_3/groupe-service/gradlew.bat @@ -0,0 +1,91 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/mashkova_margarita_lab_3/groupe-service/settings.gradle b/mashkova_margarita_lab_3/groupe-service/settings.gradle new file mode 100644 index 0000000..e4c037a --- /dev/null +++ b/mashkova_margarita_lab_3/groupe-service/settings.gradle @@ -0,0 +1,2 @@ +rootProject.name = 'groupe-service' + diff --git a/mashkova_margarita_lab_3/groupe-service/src/main/java/org/example/GroupeApplication.java b/mashkova_margarita_lab_3/groupe-service/src/main/java/org/example/GroupeApplication.java new file mode 100644 index 0000000..b527214 --- /dev/null +++ b/mashkova_margarita_lab_3/groupe-service/src/main/java/org/example/GroupeApplication.java @@ -0,0 +1,11 @@ +package org.example; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class GroupeApplication { + public static void main(String[] args) { + SpringApplication.run(GroupeApplication.class, args); + } +} \ No newline at end of file diff --git a/mashkova_margarita_lab_3/groupe-service/src/main/java/org/example/controller/GroupeController.java b/mashkova_margarita_lab_3/groupe-service/src/main/java/org/example/controller/GroupeController.java new file mode 100644 index 0000000..80816f5 --- /dev/null +++ b/mashkova_margarita_lab_3/groupe-service/src/main/java/org/example/controller/GroupeController.java @@ -0,0 +1,45 @@ +package org.example.controller; + +import org.example.dto.GroupeDto; +import org.example.mapper.GroupeMapper; +import org.example.service.GroupeService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/groupe") +public class GroupeController { + @Autowired + private GroupeService groupeService; + @Autowired + private GroupeMapper groupeMapper; + + @GetMapping("/") + public List getGroups() { + return groupeService.findAllGroups().stream() + .map(groupe -> groupeMapper.toGroupeDto(groupe)) + .toList(); + } + + @GetMapping("/{id}") + public GroupeDto getGroup(@PathVariable Integer id){ + return groupeMapper.toGroupeDto(groupeService.findGroup(id)); + } + + @PostMapping + public GroupeDto createGroup(@RequestBody GroupeDto groupeDto){ + return groupeMapper.toGroupeDto(groupeService.addGroup(groupeDto.getId(), groupeDto.getName())); + } + + @PutMapping("/{id}") + public GroupeDto editGroup(@RequestBody GroupeDto groupeDto){ + return groupeMapper.toGroupeDto(groupeService.updateGroup(groupeDto.getId(), groupeDto.getName())); + } + + @DeleteMapping("/{id}") + public void deleteGroup(@PathVariable Integer id){ + groupeService.deleteGroup(id); + } +} diff --git a/mashkova_margarita_lab_3/groupe-service/src/main/java/org/example/dto/GroupeDto.java b/mashkova_margarita_lab_3/groupe-service/src/main/java/org/example/dto/GroupeDto.java new file mode 100644 index 0000000..2a45b0e --- /dev/null +++ b/mashkova_margarita_lab_3/groupe-service/src/main/java/org/example/dto/GroupeDto.java @@ -0,0 +1,9 @@ +package org.example.dto; + +import lombok.Data; + +@Data +public class GroupeDto { + private Integer id; + private String name; +} diff --git a/mashkova_margarita_lab_3/groupe-service/src/main/java/org/example/mapper/GroupeMapper.java b/mashkova_margarita_lab_3/groupe-service/src/main/java/org/example/mapper/GroupeMapper.java new file mode 100644 index 0000000..92ed849 --- /dev/null +++ b/mashkova_margarita_lab_3/groupe-service/src/main/java/org/example/mapper/GroupeMapper.java @@ -0,0 +1,12 @@ +package org.example.mapper; + +import org.example.dto.GroupeDto; +import org.example.model.Groupe; +import org.mapstruct.Mapper; +import org.mapstruct.ReportingPolicy; + +@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE) +public interface GroupeMapper { + Groupe fromGroupeDto(GroupeDto groupeDto); + GroupeDto toGroupeDto(Groupe groupe); +} diff --git a/mashkova_margarita_lab_3/groupe-service/src/main/java/org/example/model/Groupe.java b/mashkova_margarita_lab_3/groupe-service/src/main/java/org/example/model/Groupe.java new file mode 100644 index 0000000..b9a65f4 --- /dev/null +++ b/mashkova_margarita_lab_3/groupe-service/src/main/java/org/example/model/Groupe.java @@ -0,0 +1,20 @@ +package org.example.model; + +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import lombok.*; + +@Data +@NoArgsConstructor +@RequiredArgsConstructor +@AllArgsConstructor +@Entity +public class Groupe { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Integer id; + @NonNull + private String name; +} diff --git a/mashkova_margarita_lab_3/groupe-service/src/main/java/org/example/repository/GroupeRepository.java b/mashkova_margarita_lab_3/groupe-service/src/main/java/org/example/repository/GroupeRepository.java new file mode 100644 index 0000000..526535d --- /dev/null +++ b/mashkova_margarita_lab_3/groupe-service/src/main/java/org/example/repository/GroupeRepository.java @@ -0,0 +1,7 @@ +package org.example.repository; + +import org.example.model.Groupe; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface GroupeRepository extends JpaRepository { +} diff --git a/mashkova_margarita_lab_3/groupe-service/src/main/java/org/example/service/GroupeService.java b/mashkova_margarita_lab_3/groupe-service/src/main/java/org/example/service/GroupeService.java new file mode 100644 index 0000000..7171b24 --- /dev/null +++ b/mashkova_margarita_lab_3/groupe-service/src/main/java/org/example/service/GroupeService.java @@ -0,0 +1,47 @@ +package org.example.service; + +import org.example.model.Groupe; +import org.example.repository.GroupeRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.Optional; + +@Service +public class GroupeService { + @Autowired + private GroupeRepository groupeRepository; + + @Transactional(readOnly = true) + public List findAllGroups(){ + return groupeRepository.findAll(); + } + + @Transactional(readOnly = true) + public Groupe findGroup(Integer id){ + final Optional group = groupeRepository.findById(id); + return group.orElseThrow(() -> new RuntimeException(String.format("Group with id %s was not found", id))); + } + + @Transactional + public Groupe addGroup(Integer id, String name){ + Groupe group = new Groupe(id, name); + return groupeRepository.save(group); + } + + @Transactional + public Groupe updateGroup(Integer id, String name){ + final Groupe group = findGroup(id); + group.setName(name); + return groupeRepository.save(group); + } + + @Transactional + public Groupe deleteGroup(Integer id){ + Groupe group = findGroup(id); + groupeRepository.delete(group); + return group; + } +} diff --git a/mashkova_margarita_lab_3/groupe-service/src/main/resources/application.yml b/mashkova_margarita_lab_3/groupe-service/src/main/resources/application.yml new file mode 100644 index 0000000..0771fbd --- /dev/null +++ b/mashkova_margarita_lab_3/groupe-service/src/main/resources/application.yml @@ -0,0 +1,11 @@ +server: + port: "8080" +spring: + datasource: + url: jdbc:postgresql://db-university:5432/university + username: admin + password: admin + driver-class-name: org.postgresql.Driver + jpa: + hibernate: + ddl-auto: update \ No newline at end of file diff --git a/mashkova_margarita_lab_3/images.png b/mashkova_margarita_lab_3/images.png new file mode 100644 index 0000000000000000000000000000000000000000..c136b316f210cf06ddd5c95dd0e9b35a54405ac4 GIT binary patch literal 15187 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 tzhS '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/mashkova_margarita_lab_3/student-service/gradlew.bat b/mashkova_margarita_lab_3/student-service/gradlew.bat new file mode 100644 index 0000000..f127cfd --- /dev/null +++ b/mashkova_margarita_lab_3/student-service/gradlew.bat @@ -0,0 +1,91 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/mashkova_margarita_lab_3/student-service/settings.gradle b/mashkova_margarita_lab_3/student-service/settings.gradle new file mode 100644 index 0000000..387d3f1 --- /dev/null +++ b/mashkova_margarita_lab_3/student-service/settings.gradle @@ -0,0 +1,2 @@ +rootProject.name = 'student-service' + diff --git a/mashkova_margarita_lab_3/student-service/src/main/java/org/example/StudentApplication.java b/mashkova_margarita_lab_3/student-service/src/main/java/org/example/StudentApplication.java new file mode 100644 index 0000000..5d6d386 --- /dev/null +++ b/mashkova_margarita_lab_3/student-service/src/main/java/org/example/StudentApplication.java @@ -0,0 +1,11 @@ +package org.example; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class StudentApplication { + public static void main(String[] args) { + SpringApplication.run(StudentApplication.class, args); + } +} \ No newline at end of file diff --git a/mashkova_margarita_lab_3/student-service/src/main/java/org/example/controller/StudentController.java b/mashkova_margarita_lab_3/student-service/src/main/java/org/example/controller/StudentController.java new file mode 100644 index 0000000..a2fc7d9 --- /dev/null +++ b/mashkova_margarita_lab_3/student-service/src/main/java/org/example/controller/StudentController.java @@ -0,0 +1,49 @@ +package org.example.controller; + +import org.example.dto.StudentDto; +import org.example.dto.StudentInfoDto; +import org.example.mapper.StudentMapper; +import org.example.service.StudentService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping("/student") +public class StudentController { + @Autowired + private StudentService studentService; + + @Autowired + private StudentMapper studentMapper; + + @GetMapping("/") + public List getStudents(){ + return studentService.findAllStudents(); + } + + @GetMapping("/{id}") + public StudentInfoDto getStudent(@PathVariable Integer id){ + return studentService.findStudentInfo(id); + } + + @PostMapping + public StudentDto createStudent(@RequestBody StudentDto studentDto){ + return studentMapper.toStudentDto( + studentService.addStudent(studentDto.getId(), studentDto.getName(), studentDto.getSurname(), + studentDto.getGroupeId())); + } + + @PutMapping("/{id}") + public StudentDto editStudent(@RequestBody StudentDto studentDto){ + return studentMapper.toStudentDto( + studentService.updateStudent(studentDto.getId(), studentDto.getName(), studentDto.getSurname(), + studentDto.getGroupeId())); + } + + @DeleteMapping("/{id}") + public void deleteStudent(@PathVariable Integer id){ + studentService.deleteStudent(id); + } +} diff --git a/mashkova_margarita_lab_3/student-service/src/main/java/org/example/dto/GroupeInfoDto.java b/mashkova_margarita_lab_3/student-service/src/main/java/org/example/dto/GroupeInfoDto.java new file mode 100644 index 0000000..ead5a8f --- /dev/null +++ b/mashkova_margarita_lab_3/student-service/src/main/java/org/example/dto/GroupeInfoDto.java @@ -0,0 +1,9 @@ +package org.example.dto; + +import lombok.Data; + +@Data +public class GroupeInfoDto { + private Integer id; + private String name; +} diff --git a/mashkova_margarita_lab_3/student-service/src/main/java/org/example/dto/StudentDto.java b/mashkova_margarita_lab_3/student-service/src/main/java/org/example/dto/StudentDto.java new file mode 100644 index 0000000..3faeaa5 --- /dev/null +++ b/mashkova_margarita_lab_3/student-service/src/main/java/org/example/dto/StudentDto.java @@ -0,0 +1,11 @@ +package org.example.dto; + +import lombok.Data; + +@Data +public class StudentDto { + private Integer id; + private String name; + private String surname; + private Integer groupeId; +} diff --git a/mashkova_margarita_lab_3/student-service/src/main/java/org/example/dto/StudentInfoDto.java b/mashkova_margarita_lab_3/student-service/src/main/java/org/example/dto/StudentInfoDto.java new file mode 100644 index 0000000..9001181 --- /dev/null +++ b/mashkova_margarita_lab_3/student-service/src/main/java/org/example/dto/StudentInfoDto.java @@ -0,0 +1,11 @@ +package org.example.dto; + +import lombok.Data; + +@Data +public class StudentInfoDto { + private Integer id; + private String name; + private String surname; + private GroupeInfoDto groupeInfoDto; +} diff --git a/mashkova_margarita_lab_3/student-service/src/main/java/org/example/mapper/StudentMapper.java b/mashkova_margarita_lab_3/student-service/src/main/java/org/example/mapper/StudentMapper.java new file mode 100644 index 0000000..b6ce7c5 --- /dev/null +++ b/mashkova_margarita_lab_3/student-service/src/main/java/org/example/mapper/StudentMapper.java @@ -0,0 +1,12 @@ +package org.example.mapper; + +import org.example.dto.StudentDto; +import org.example.model.Student; +import org.mapstruct.Mapper; +import org.mapstruct.ReportingPolicy; + +@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE) +public interface StudentMapper { + Student fromStudentDto(StudentDto studentDto); + StudentDto toStudentDto(Student student); +} diff --git a/mashkova_margarita_lab_3/student-service/src/main/java/org/example/model/Student.java b/mashkova_margarita_lab_3/student-service/src/main/java/org/example/model/Student.java new file mode 100644 index 0000000..b93bac2 --- /dev/null +++ b/mashkova_margarita_lab_3/student-service/src/main/java/org/example/model/Student.java @@ -0,0 +1,24 @@ +package org.example.model; + +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import lombok.*; +import org.example.dto.GroupeInfoDto; + +@Data +@NoArgsConstructor +@RequiredArgsConstructor +@AllArgsConstructor +@Entity +public class Student { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Integer id; + @NonNull + private String name; + @NonNull + private String surname; + private Integer groupeId; +} diff --git a/mashkova_margarita_lab_3/student-service/src/main/java/org/example/repository/StudentRepository.java b/mashkova_margarita_lab_3/student-service/src/main/java/org/example/repository/StudentRepository.java new file mode 100644 index 0000000..1f39dfb --- /dev/null +++ b/mashkova_margarita_lab_3/student-service/src/main/java/org/example/repository/StudentRepository.java @@ -0,0 +1,7 @@ +package org.example.repository; + +import org.example.model.Student; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface StudentRepository extends JpaRepository { +} diff --git a/mashkova_margarita_lab_3/student-service/src/main/java/org/example/service/StudentService.java b/mashkova_margarita_lab_3/student-service/src/main/java/org/example/service/StudentService.java new file mode 100644 index 0000000..c3d483a --- /dev/null +++ b/mashkova_margarita_lab_3/student-service/src/main/java/org/example/service/StudentService.java @@ -0,0 +1,79 @@ +package org.example.service; + +import org.example.dto.GroupeInfoDto; +import org.example.dto.StudentInfoDto; +import org.example.model.Student; +import org.example.repository.StudentRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.client.RestTemplate; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +@Service +public class StudentService { + @Autowired + private StudentRepository studentRepository; + + private final RestTemplate restTemplate = new RestTemplate(); + private final String URL = "http://groupe-service:8080/groupe/"; + + @Transactional(readOnly = true) + public List findAllStudents(){ + List students = studentRepository.findAll(); + List studentsInfo = new ArrayList<>(); + for (Student student : students) { + StudentInfoDto studentInfo = findStudentInfo(student.getId()); + studentsInfo.add(studentInfo); + } + return studentsInfo; + } + + @Transactional(readOnly = true) + public Student findStudent(Integer id){ + final Optional student = studentRepository.findById(id); + return student.orElseThrow(() -> new RuntimeException(String.format("Student with id %s was not found", id))); + } + + @Transactional(readOnly = true) + public StudentInfoDto findStudentInfo(Integer id){ + Student student = studentRepository.findById(id) + .orElseThrow(() -> new RuntimeException(String.format("Student with id %s was not found", id))); + + GroupeInfoDto group = restTemplate.getForObject(URL + student.getGroupeId(), GroupeInfoDto.class); + + StudentInfoDto studentInfoDto = new StudentInfoDto(); + studentInfoDto.setId(id); + studentInfoDto.setName(student.getName()); + studentInfoDto.setSurname(student.getSurname()); + studentInfoDto.setGroupeInfoDto(group); + + return studentInfoDto; + } + + @Transactional + public Student addStudent(Integer id, String name, String surname, Integer groupeId){ + Student student = new Student(id, name, surname, groupeId); + return studentRepository.save(student); + } + + @Transactional + public Student updateStudent(Integer id, String name, String surname, Integer groupeId){ + Student student = findStudent(id); + student.setName(name); + student.setSurname(surname); + student.setGroupeId(groupeId); + return studentRepository.save(student); + } + + @Transactional + public Student deleteStudent(Integer id){ + Student student = findStudent(id); + studentRepository.delete(student); + return student; + } +} diff --git a/mashkova_margarita_lab_3/student-service/src/main/resources/application.yml b/mashkova_margarita_lab_3/student-service/src/main/resources/application.yml new file mode 100644 index 0000000..7bae469 --- /dev/null +++ b/mashkova_margarita_lab_3/student-service/src/main/resources/application.yml @@ -0,0 +1,11 @@ +server: + port: "8081" +spring: + datasource: + url: jdbc:postgresql://db-university:5432/university + username: admin + password: admin + driver-class-name: org.postgresql.Driver + jpa: + hibernate: + ddl-auto: update \ No newline at end of file