From 03ef1095441aa198dc6c5c9966a02a2953861720 Mon Sep 17 00:00:00 2001 From: esoe Date: Sat, 15 Oct 2022 15:59:36 +0300 Subject: [PATCH] ready to use --- book/src/main/java/ru/molokoin/Book.java | 217 ++++++++++++++---- book/src/main/java/ru/molokoin/Publisher.java | 9 +- book/target/classes/ru/molokoin/Book.class | Bin 5026 -> 7701 bytes .../classes/ru/molokoin/Publisher.class | Bin 3342 -> 3375 bytes 4 files changed, 177 insertions(+), 49 deletions(-) diff --git a/book/src/main/java/ru/molokoin/Book.java b/book/src/main/java/ru/molokoin/Book.java index 8988d32..937d17b 100644 --- a/book/src/main/java/ru/molokoin/Book.java +++ b/book/src/main/java/ru/molokoin/Book.java @@ -5,21 +5,25 @@ public class Book { private Publisher publisher; private int year; private String[] authors; - private Publisher[] publishers = Publisher.getDefaultArray(); Book(){} Book(String name, int year, Publisher publisher){} Book(String name, String author, int year, Publisher publisher){ this(name, year, publisher); - setAuthors(uppendAuthors((String)author)); + uppendAuthors(author); } Book(String name, String[] authors, int year, Publisher publisher){ this(name, year, publisher); - String[] a = (String[]) authors; + String[] a = authors; setAuthors(a); } + /** + * Создаем массив книг, заполняем книги данными по умолчанию + * и возвращаем массив книг + * @return + */ public static Book[] getDefaultArray(){ - Book[] books = new Book[2]; + Book[] books = new Book[5]; //book 1 String name = "Computer Science: основы программирования на Java, ООП, алгоритмы и структуры данных"; @@ -38,84 +42,191 @@ public class Book { books[1].setPublisher(Publisher.getPublisherByName(Publisher.getDefaultArray(), "БХВ")); books[1].setYear(2019); + //book 3 + name = "Java. Полное руководство, 10-е издание"; + books[2] = new Book(); + books[2].setName(name); + books[2].uppendAuthors("Шилдт Гербертт"); + books[2].setPublisher(Publisher.getPublisherByName(Publisher.getDefaultArray(), "Диалектика")); + books[2].setYear(2018); + + //book 4 + name = "C/C++. Процедурное программирование"; + books[3] = new Book(); + books[3].setName(name); + books[3].uppendAuthors("Полубенцева М.И."); + books[3].setPublisher(Publisher.getPublisherByName(Publisher.getDefaultArray(), "БХВ")); + books[3].setYear(2017); + + //book 5 + name = "Конституция РФ"; + books[4] = new Book(); + books[4].setName(name); + books[4].setPublisher(Publisher.getPublisherByName(Publisher.getDefaultArray(), "Проспект")); + books[4].setYear(2020); + return books; } + /** + * Печатть данных о книге в консоль + */ public void print(){ System.out.println("-------------------------------"); - System.out.println(toString()); System.out.println("Наименование книги (name) :: " + name); getPublisher().print(); System.out.println("Год издания (year) :: " + year); - System.out.println("Авторы:"); + System.out.println("Авторы: " + getAuthorsCount(authors) + " человек ..."); int i = 0; - while (i < getAuthorsCount()){ + while (i < getAuthorsCount(authors)){ System.out.println((i + 1) + ". " + getAuthors()[i]); i++; } System.out.println("-------------------------------"); } - //TODO добавляем список авторов - public String[] uppendAuthors(String author){ + /** + * Добавляем авторов книги + * @param author + */ + public void uppendAuthors(String author){ String[] result; - try { - if (getAuthors() == null)throw new NullPointerException("Перечень авторов пока пуст ..."); - } catch (NullPointerException e) { - e.printStackTrace(); - result = new String[1]; - result[0] = author; - } finally { - result = new String[getAuthorsCount() +1]; + /** + * в случае, если массив authors еще не создан и писать нового автора некуда, + * создаем пустой массив, пишем в него данные нового автора + */ + if (getAuthors() == null){ + try { + throw new NullPointerException("в случае, если массив authors еще не создан и писать нового автора некуда, создаем пустой массив, пишем в него данные нового автора ..."); + } catch (NullPointerException e) { + //e.printStackTrace(); + System.out.println(e); + result = new String[1]; + result[0] = author; + setAuthors(result); + } + } + /** + * Если массив авторов книги уже существует, создаем новый массив с увеличенным на единицу + * количеством полей и переписываем в него данные старого массива, + * после чего добавляем в него новую запись. + */ + else{ + int count = getAuthorsCount(authors); + result = new String[count +1]; + //переписываем данные старого массива int i = 0; - while (i < getAuthorsCount()){ - result[i] = getAuthorByIndex(i); + while (i < count){ + result[i] = getAuthors()[i]; i++; } + //добавляем нового автора + result[count] = author; + setAuthors(result); } - return result; } + /** + * Возвращает данные поля author, по индексу поля в массиве + * индексы нумеруются с нуля и не могут быть отрицательными. + * @param index + * @return + */ public String getAuthorByIndex(int index){ + //при получении отрицательного индекса, меняем его значение на ноль, сообщаем пользователю о проведеных изменениях + if (index < 0){ + try { + throw new IllegalArgumentException("В метод public String getAuthorByIndex(int index) передано значение меньше нуля, массив не может содержать отрицательное количество полей. Значение индекса исправлено на значение по умолчанию: 0 ..."); + + } catch (Exception e) { + e.printStackTrace(); + index = 0; + } + } String author = getAuthors()[index]; return author; } - //количество авторов книги - public int getAuthorsCount(){ + /** + * возвращает количество авторов книги + * @param authors + * @return + */ + public static int getAuthorsCount(String[] authors){ + //проверяем, имеется ли записи в перечне авторов int count = 0; try { - if (getAuthors() == null) throw new NullPointerException("авторы еще не добавлены в список ..."); - } catch (NullPointerException e) { + if (authors == null) throw new NullPointerException ("Авторы книги не установлены ..."); + } catch (Exception e) { + //e.printStackTrace(); count = 0; - } finally { - count = getAuthors().length; } + if (authors != null) count = authors.length; return count; } /** + * Устанавливаем название книги * @param name the name to set */ public void setName(String name) { - //TODO название книги не должно быть пустой ссылкой; - this.name = name; + // название книги не должно быть пустой ссылкой + if (name == null){ + try { + throw new NullPointerException("В качестве названия книги передана пустая ссылка, полю установлено значение по умолчанию {noname book}"); + } catch (NullPointerException e) { + System.out.println("Ошибка: " + e); + e.printStackTrace(); + this.name = "noname book"; + } + }else { + this.name = name; + } } /** + * Устанавливаем данные об издательстве. + * издательство не должно быть пустой ссылкой * @param publisher the publisher to set */ public void setPublisher(Publisher publisher) { - //TODO издательство не должно быть пустой ссылкой; - this.publisher = publisher; + if (publisher == null){ + try { + throw new NullPointerException("Передана пустая ссылка, при внесении данных об издательстве, что недопустимо. Установлено знаение издательства по умолчанию."); + } catch (NullPointerException e) { + e.printStackTrace(); + System.out.println("Ошибка: " + e); + this.publisher = new Publisher(); + } + }else{ + this.publisher = publisher; + } } /** + * устанавливаем год издания книги + * - год издания должен быть строго больше нуля * @param year the year to set */ public void setYear(int year) { - //TODO год издания должен быть строго больше нуля - this.year = year; + if (year < 0){ + try{ + throw new IllegalArgumentException("В качестве года издания книги указан значение еньше нуля. Значение заменен на значение по умолчанию {1800}"); + } catch (IllegalArgumentException e){ + e.printStackTrace(); + System.out.println("Ошибка: " + e); + year = 1800; + } + }else { + this.year = year; + } } /** + * Устанавливаем перечень авторов книги * @param author the author to set */ public void setAuthors(String[] authors) { - //TODO массив не должен содержать пустых ссылок - this.authors = authors; + try { + if (authors == null) throw new NullPointerException("setAuthors() ... передан пустой список авторов"); + } catch (NullPointerException e) { + e.printStackTrace(); + this.authors = new String[0]; + } finally { + this.authors = authors; + } } /** * @return the name @@ -139,25 +250,39 @@ public class Book { * @return the author */ public String[] getAuthors() { - String[] result = new String[0]; - try { - if (authors == null) throw new NullPointerException("Авторы еще не заносились в список ..."); - } catch (NullPointerException e) { - // TODO: handle exception - e.printStackTrace(); - result = new String[0]; - } finally { - result = authors; - } - return result; + return this.authors; } public static void main(String[] args) { Book[] books = Book.getDefaultArray(); + //Вывод данных по умолчанию int i = 0; while (i < books.length){ books[i].print(); i++; } - } + + //исправляем данные о городе издательства БХВ + String wrightSity = "Санкт-Петербург"; + String wrongSity = "Санкт-Петебург"; + i = 0; + while (i < books.length){ + if (books[i].getPublisher().getSity() == wrongSity){ + books[i].getPublisher().setSity(wrightSity); + } + i++; + } + //пояснения пользователю + System.out.println("#############################################"); + System.out.println("Вывод изменился для всех книг, изданных издательством \"БХВ\"."); + System.out.println("Устранена опечатка в наименовании города. \"Санкт-Петебург\" заменено на \"Санкт-Петербург\". " + "Была пропущена буква: \"Б\"."); + System.out.println("#############################################"); + + //Вывод исправленных данных + i = 0; + while (i < books.length){ + books[i].print(); + i++; + } + } } diff --git a/book/src/main/java/ru/molokoin/Publisher.java b/book/src/main/java/ru/molokoin/Publisher.java index 23a0a3d..fb0cc3b 100644 --- a/book/src/main/java/ru/molokoin/Publisher.java +++ b/book/src/main/java/ru/molokoin/Publisher.java @@ -19,11 +19,13 @@ public class Publisher { Publisher[] defaultPublishers = new Publisher[4]; defaultPublishers[0] = new Publisher("Проспект", "Москва"); defaultPublishers[1] = new Publisher("Питер", "Санкт-Петербург"); - defaultPublishers[2] = new Publisher("БХВ", "Санкт-Петербург"); + defaultPublishers[2] = new Publisher("БХВ", "Санкт-Петебург"); defaultPublishers[3] = new Publisher("Диалектика", "Киев"); return defaultPublishers; } - //выводим в консоль данные Издательства + /** + * выводим в консоль данные Издательства + */ public void print(){ System.out.println("Издательство: " + getName() + " ----> " + "город: " + getSity()); } @@ -42,8 +44,9 @@ public class Publisher { } } /** + * Устанавливаем наименование города - где находится издательство + * Наименование города издания не должно быть пустой ссылкой * @param sity the sity to set - * TODO: Наименование города издания не должно быть пустой ссылкой */ public void setSity(String sity) { String defaultSity = "noname sity"; diff --git a/book/target/classes/ru/molokoin/Book.class b/book/target/classes/ru/molokoin/Book.class index a71e01d9ebe1796be50bf238dfe82245a46075c6..e94b8fb110af8a555a3435865ae8193c688c8365 100644 GIT binary patch literal 7701 zcmb7JdvIJ;8ULMRH+vJdX}i!un!&-UD7SdZrtt` z3Zi{L3${=w_y9|xB32Y3N%Nv= z&pqGye&_ps-{ai<&VNph16Yhdhftz0Bb{yPPIaYjOC^#`t5d1lLI`klTWm+HsVkQ3 zY`V66Tf8Hq5J<+l;|h`1!lSlKI+5&LrcmCKZSP8K-x^OVoZDKw;>P>~&I;^|$2dW) zRS3nhnXRexc7?NV@LRBKc_Nv}tW+qit=mM&HK{G}3Y21I7}HRxFugUAjBm(xx5v}h z#oD_xu2e^?Yf~(pkk9U5AhR_=9gzu;WRpa*uy(5AwG$>5unUIEedfQD6)K=GN8rzv zyQ(nep;}>Dwx=ha+_EZfj#)lhM0=Srn8Fo46MRf~=ADT4^TSwx3lu80$1|Sl*|k3F zh;9|5!8_xbE91AuvR#=~>2z$T!mQf58zz`b+tos?!hLH}-96b%JZ-miB;v`Ac#G|f z=XN_|&bZT`J77DfbGvwZg8zG+Q~Vv#pZob~jQ59ZUV80yq+o;X9Odtmy!JYy&IvBF zi!=5(r(~HCJGVQxC$}rN*Ez}SUfywZKrb_vJCM6q_BvDk)rZj_<_>Yg8^~h|jr4(Y z%o*hLA*bINaZcLKQv}uL404%078a44&eOREoEM!j+j*QbW!6{)n(>|xE~Wu|c^<~Q zaEZd)$<`^5$-6sQVo=onvJ%cke4R(sAMv znu`N8nRco3qAm8F>~`V9soY+YLz{iKbDGBAPf=mPgN^pZ3!OoF*%@|yI^qnH2m_pc znt!95CR1gVK@0DrN1Vf)eL{P1xA?4=Kt?Sv;gmTKJI^?WEnLG$7G^ct^nh7};8dH9MJVrU}s@TWwRQHt5NG64n{hi_qA%bEMJvY@>w_3c|;^ zmodE;h72|AGr{$g^92jnGs(LEwA}@xLa?35(PZUf#~TQ6bRw z%I@w_n8)Zo;~p&RQ>b(vVjABgxj1*A#g=963*#(=1@$MxIDmtuV7R4aO)8rtAN=df zS_==-&9;vFQSBVYi{04RSb>LdIE05M@=UiJVLXCInUZ$Iy0Yv_eTE z9jfrzFdoC>OuV$FSMqcXo6H=hVU-Bs35A-%qYc@vu8nMwSk&HoM@PITlSm~kJgM*( zr=L~G8D)6wC&?s14a#RSihS#3^zA0W`fXFcx69M}C95%aiQITTxk)u+S{vb5FN5`< z%rM!AMNg`qYjKHj$$KXm`mA&f#fuC&rzCsq)geDFNw)|AfywgsQI@m%%_@3ruV5Nn zXV9uWas=HHo1d2ud|J$2#1zvgF4NsgI=-Eq0u9L!wu|QYnUVGmb{LAx@SL-H=i20! z_#Gj9Sz$rJ4Qso);+?UsRq4)bcRZOXa>a8>UF95>9S;gM$@?B@Jv(d@XZGZkYw1fn zAv)^BFp|He7m#vAa}V>M#kAt5QA~dfL?hh z?^BjYDjH!Xrjw~~G_2b(&Q&%%g8zqpunw8%<2me_=F zw%0xuvic;~(ir*p=w&XH=*%6UwYa2?53$FCz94*A;crL#u4GDzi7mzSZVM+RWgaDU zMp&$=$yAtAl5fW*6_I=l6@`r9Z=r}BL7#<}6wWGAV&UrwZ?PpPrt$yTtMHI{K&(#U z=$=akykwBOSNCP)l}S-~zPjXOqRZ`{}@lA>K2@5|lN2|$G@)N{?KMUjM(g%sownS#9jQui(_@e?8sG0YrZye@u>#RTW^7otB7zW0DFC93Qk!- zhCHk@odlNFBzcgXh`~zV5hF8bi|lLx566L6x|6+b#qH@t=T_|_zUH|-ol16!Z}^}s zl}&fVuS&?vmvT8EG)kGq`J_oH-!BDFB7HOON+eA6m7S)(vQ^|Y!au&u;r!{mYvNV$ z8jKEOMjvlV^n@}!SdOzf5;hZX4rcL_2+!t-2(RZgz^kutg%*yQ37&9JqthCt1ExBP zYovmH8qRf>-b%S3M=GQB)pG*FI4{~Tgt-NPm3p^f?r@skjR1X*k??d?db%o6Lz{@M zO089NRcfsQe;VeyTJNM*v0WsuwV@>#of8~_UCk$AB4tLTtU2-l5haiV-JOnmj7ZzbZ-@_ha?t20ktp>nOHvj%*u7 zS9Ac$A@mF(!w1nJ+%bfY<)44tJl{2hJ?44-!M*0e{t?{IXORcI1xlA6N7S8F6}V*t zhd49xDL&`YpQ&p0Cf=h|6;;a$$KK9SLIW#syIE(5b==W4v}h|WxSl)TfOcHV5{;4%xstykQHVHn%nLPs9AyPV{iYh zq1qMdqp}b~awd+rlv$_q*)1Gx=V%8%#Yvf4NuEv;W-E!ZjRg59$&jY=Ggyu+oxTI> za631jMH}A+T#vg*qr3H1ujWd?O?BKL6*x~1Q*i| z7t=ffcoj3WzXru$>pAcW%A(`TtDfWB63pOl9?@K#1|Q?-=Qw(VHa|)fPcdkZX*9Op z=RBPfC9LOayYPK6?+qFy?~GjxN4Ybx%hLK+u~;J*)(G+;@gj*%8;zPk;oW#Na(WQS zq_yE2_i#l}(seUGdfg-F+JU_29Vtv}hx`J4jXsln;SOt|o-smWrnbf~Ah?iZ!FP{nUC>I|i;Bf*zO>i#} z@Yh)JzCo}rlT@!10bbz&UO{?T8s57+zMEXN4#E+SGe}YT!vm&HRJfur>WfW4@5b3wI zY584=XWCM(%5TqTS{jXs<2#;dqovFZgV-Rk1QH*67*X|fERm!7i$I!;IL=f?=feX&Zy8< zG0_+5muaj1q8FUlRw;Su=p+2{WZ}R23crT$`v~uP&fBih{7+wDzM%6F-alFMzkP(u z>1x+Ws+P8vmhH|FIIX2Cjw4(@kEQ4JdrH*2`tf6L|0D9l4Ur$W1msbTe#ENx(>Z}J zVw(BH8t{w!l5l6be~8&SU$;c3735OqHUXrF*&xBEtLg zR5_|t1?H=>aJ~xTLNyJ|suIi941P@$<`*pI@SBENe3w6)Z`;r1>+regR8`of=AlPb z^Hp>ecB=W>8m8sElbn&(I>5RiEdk$Evyw;&EFq_ECX33L#pdG%a;l88_|iZ-=1>0x Dl9Ga) literal 5026 zcmb7HYgbg)8Gbg*z<@`=Q80+nsYxmfH-knK@Cs@~5p6(}Xd4Hd!00eThZ%#ZHi#x_ zjR|Tr7i)|rslAvMFAPKkKe|>woms2DpzYUw%jc%gyU$^`4X#v{v-dgs-S72zpS{oD z|NCeRz{|Loi8O`WNUWkW91I@~2SOD!;qcK+IQaI6@0hP5=nJ)1>~1~cZ;L88LcUJF zg1dfVsWBP}gxaeWvbtie!9aJ1KccXxezL|r;|r8>9QXSupz0JdeX(dqIMS`K;6N&c z*-3>IdG5fhDl^svLV@T8h4iB0W?HBXANFS>9SaQPAU7L%Sd@u;g}jtL8F&r_3OVim z=obImzF082ITG<5S6EzBJe$odC=?o)i+S8w9|-vyVx6u2NRzKMsIwDp^97rIk$^ng zFCEd20K;%ki9%A%oRk&K48LxQ;6w%`!i_29{~rz6bpHiOjz?xM8TdI?D9nv@b@@Yw zH;)%(MG7m-$c)O1j$#8|lqh6(`=dz(`9&$D#s3Ve@Cut!m`JhbS-DU?7Iu22bY5L} zS>ar5xU(x3^+!C7Z2^C%&0pm)#}cQ^QFF|^pSa*LpCo!YeZb!V^D+O1_49o`jdK36 zhr@tp2OFW(V}8lMn;Zws5%U4n^irbFd@O2)J&99^zC>^0wE2kRY0miep;j}RxR7{X zva~>cRvUN)YlwcPszG;CUWzOfH@omEL1x}E2dO4*-ZzKMM;`MlI(yF?r20M=s;JWZ zI&snb-W>IqUrc@j)D$1MkHS*Vn~Q9ZNT#j{9C zXf+0Eu|>gPXh|c|NVDuIZkAo!47`r*Rzg}dIXH^yB>o)==Na&TImAp4FzhjA`w`0_ ziDs~T!GLw4%E$vL%K-PuL9 zjAo$`do$5Ag<~6!cSrr52AZ*tR2GhrZu6}C2f`J5WE-j0@9V5~p+#X?*|Yy;;{bk{ ziGzfQ?%1h14E#!CPQ)nhzoBk zl$$qLm0>oMWN)HIO!XtakOU5UisU3I_Ec4ogWAv`Y_vvb^@sr{GUQ#*Kqo@N7Mhn* z)8tGCZBMF2#Ua7huMI@Nf*6ybuTa3?CKo6PSnkY2%)l>@>%uz<9`g!=csK0UTi;;qOle(el-l|ndQr|*C;cKU zY(M@@8zSH19EIBHURm!=AAxEaLS>^jy|N^ZRUF)FnUsApdCi`%!0zf{tdC+Zm7OBFf}4dXpZy5FZBYB*b1nN)a2sY1TGaO=l^$X;<{0j1p(s7MYOnCvl3RT z5-YKjA7+i5?ZqnW$7-D5jqyFs&tfe;#;eH;Fg6<-dr{35VE`qUc`F0zyp6r<;?z@w zN6_EmzC46ao-~xjan&)3-d&~XC5_^s7%63r*%`p%@Y0|H`xBA1hJIBN$caY-sDWl$z=m`CnFSk%3_X) zm0e82c+eJu?P3QvXs0}uVA829e5tFVTk&m53;V20Uni=cV!5vPO{w@U z>)jZE>u!+Mv2|rqB#wo5sV$AXvw#UnW1@wpts;174S0i3OHs7AUxi97BJ4s|s zw%l`~Y*QS$V>goG8Pq9KH^N$*tJc+L+m+Hws4I)!dc*;;B z6yYT5@`+9-5muBmU(VAK^wG(cd|bjJTw%L@LYZrnx=Nb3Mg)FJM!iPVeWu;C5W3b* zkdrJcjm$3^w!ekYEc`iHy)bP{s}>C7FZJo`@4zToLURA^OqyC!GIs07A0`UAluaxA u;h>rfLS0%l2RF%GH+T%+nq<5Hf2B!KGEX01yuGryggc}?{>GIw4Ezr;?C8b- diff --git a/book/target/classes/ru/molokoin/Publisher.class b/book/target/classes/ru/molokoin/Publisher.class index b522194fae182c031d5f5b69b9fd5aa6bceb3a07..82387e2da03b3368f31a9d73797a3cc7e6b57673 100644 GIT binary patch delta 1289 zcmZvbTT@$A6vzMj<%tKKF_aQ2jP%hNeL2kd;*4Lw8J+P9==eV;kygiKX0LtLUYFn6YwbI= z-_%zA@YnV(fD`ygg(47?hm_!Yb3t^}SzlTO>pN?EZ?(<(+}hk*wKlEwz1w@YtPLMb zfg{!@)&rXCP){T7x2=K?t@3wqw&4VxQE^hB@>=pnGBTgc%tl66mUF2E9jEZD99BZ2 zT`ns1qCRmMO!tW@!@5bkjZ9}3#p3G;`QnI^zvM4NyWGpH#P|Ev zJfcnR(^lJTGyAkNW!jlXw5k84Jw)#)#V~|Im)+XCI@R zbLcqEWx5EZ-42g=9}@*`N*C>Ql)X;1ddUEl%x3qJBhA(B<>SsX|8+k9k8`CRzU=Ks z8rS3(fhU4*47$2qQTH0^!e-EY(iwnx`D36~O(l$_E#%~Hf$Ds!%o9Zgqg>#NyvWQ0 z{2FA$A&$Z@nlOT9K9l3rMcCUejFa#Z`Z;TMx4KzA=y%(%i*xH4pIKfU9c_dbpnOdHJh($ delta 1230 zcmZvb+fx&F6vw~2n`D#Cg1CxYq!=fIHXATSBN3EP1*;&aHQpjxx?;pwNGL=py~WGB zGtRGXo$-~2&Qwqd4w>TgsWa_#W_fI1`VaKAk2-#L6VY+HJM%lgJ->7LoIU6FxcNb| z_WP^VH2|Hszoh*kHEy+ku%FwDcG+IGSJ&@xziKb~VTxLLpf!e06(32cyJ_9FVv|;G zB9@w;Eo7#2?8QDYEr+E2;-TCkCB)D24kM0k9ey-ukZ@4PA@quW3n#}oeh9%_kIcq9Y6Pmttbuv49BQvAo ztXNmV(s}Wp^2DD)cYxW`;<4wD@tK5R#XdAk1V26(FFnhFt2$KpR9q8f?<3zAm{Kt* z#(eck4tX)>3rk;$AANr*bcr)b!D+s1cUl~%`*lk2a zdmwQsigq?cLI)fIjr%k_+yT)i*i%M4ZFH^RfLTIM2}$FKvkY*d;uDGz21^)TqPdJ( zt{NrK0uvvIUjmWhrz6qd&{jq&ZJb-dg%>By_7b+5(Pdm*fYIY|cTJubu3VzCg3WwW zlnvOi5!Q6c!qm3$bQcWl=6Qq`A7UrvE+&ld-GeAL(aU5FKn$WasENF$6)(ZZ;0C-H z#bt(((98gpf`8(-*D*J)yrmu6plx*6tPNVLN^8BP9sgh2PHOj&HqNw7`B%;xlxBh1z5 z<-5+-`_2Pzoa>zMRqp^Ma6|kW+*Y3*QIblRX93%zX1!;xI{-Juzrkj8JZ(&`U`EvF zjm7aQPZw$!b#4PWci@&tUHU& z&Pxq%9QsjUO)?`M#x30Duc<*2bNGt=?W1-yg6lL6U>;vrOU~0=VYsH}_-0t?U4R~K zA^dmZPrYf-nQdnjM(J{yxv#J{qiDpK%Mq$LqKG>T;6c4hB+-70n^R_ryF8I`?=`OG B*Qx*j