From d5563c24b5a4d2646c2c222bda33e8925a69f580 Mon Sep 17 00:00:00 2001 From: LocKey Date: Tue, 1 Sep 2026 15:01:09 +0900 Subject: [PATCH] =?UTF-8?q?perf:=20=EC=99=B8=EB=B6=80=20Provider=20?= =?UTF-8?q?=ED=98=B8=EC=B6=9C=EA=B3=BC=20DB=20=ED=8A=B8=EB=9E=9C=EC=9E=AD?= =?UTF-8?q?=EC=85=98=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/04-experiment.md | 153 ++++++++++++-- docs/images/transaction-boundary.png | Bin 0 -> 157617 bytes .../notification/dto/DeliveryCommand.java | 10 + .../notification/dto/DeliveryResult.java | 7 + .../dto/PreparedNotification.java | 17 ++ .../service/NotificationService.java | 172 ++++------------ .../NotificationTransactionService.java | 191 ++++++++++++++++++ 7 files changed, 398 insertions(+), 152 deletions(-) create mode 100644 docs/images/transaction-boundary.png create mode 100644 src/main/java/com/backendsystemdesignlab/notification/notification/dto/DeliveryCommand.java create mode 100644 src/main/java/com/backendsystemdesignlab/notification/notification/dto/DeliveryResult.java create mode 100644 src/main/java/com/backendsystemdesignlab/notification/notification/dto/PreparedNotification.java create mode 100644 src/main/java/com/backendsystemdesignlab/notification/notification/service/NotificationTransactionService.java diff --git a/docs/04-experiment.md b/docs/04-experiment.md index c07fad1..39c964e 100644 --- a/docs/04-experiment.md +++ b/docs/04-experiment.md @@ -94,17 +94,20 @@ ## 8. Warm-up -- Warm-up 실행 여부: -- Warm-up 시간: -- 측정에서 제외한 구간: -- 이유: +- Warm-up 실행 여부: 별도의 명시적 Warm-up 미적용 +- 측정에서 제외한 구간: 없음 +- 영향: + - 첫 번째 부하 테스트 구간에서 HikariCP Pending과 p99가 일시적으로 증가했다. + - 이후 테스트에서는 JVM, DB Connection Pool 등이 Warm-up된 상태였을 가능성이 있다. +- 후속 실험: + - 동일 조건 비교 시 사전 Warm-up을 수행하고 측정 구간에서 제외한다. ## 9. Baseline 결과 ### 동기식 Baseline Mock Provider는 Delivery당 100ms의 지연을 발생시키며, -Provider 호춣을 Notification API의 DB Transaction 내부에서 순차적으로 수행했다. +Provider 호출을 Notification API의 DB Transaction 내부에서 순차적으로 수행했다. | VU | RPS | Avg | p95 | p99 | Error Rate | |---:|---:|---:|---:|---:|---:| @@ -124,27 +127,137 @@ Connection 대기로 인해 응답 시간이 급격히 증가했다. ## 10. 개선 내용 -적용한 개선 사항과 적용 이유를 작성한다. +### Experiment 1. Transaction Boundary 분리 + +Baseline에서는 `NotificationService.send()` 전체를 하나의 DB Transaction으로 처리했다. + +```text +Transaction 시작 + ↓ +Notification / Delivery 저장 + ↓ +Mock Provider 순차 호출 + ↓ +Delivery 상태 변경 + ↓ +Transaction Commit +``` + +Mock Provider는 Delivery당 100ms의 지연을 발생시키며, +테스트 사용자는 Push Device 2개, SMS 1개, Email 1개로 총 4번의 Provider 호출이 발생한다. + +따라서 하나의 요청에서 최소 약 400ms 동안 외부 I/O가 발생했으며, +이 시간 동안 DB Transaction과 Connection도 유지되었다. + +Baseline 부하 테스트에서 HikariCP Connection Pool 최대 크기인 10에 도달했고, +30 VU에서는 약 20개, 50 VU에서는 약 40개의 Connection 대기가 발생했다. + +외부 I/O 대기 시간 동안 DB Connection을 점유하지 않도록 +Transaction Boundary를 다음과 같이 분리했다. + +```text +Transaction 1 +- User / Preference / Device 조회 +- Notification / Delivery 저장 +- Commit +- DB Connection 반환 + + ↓ + +Transaction 없음 +- Mock Provider 순차 호출 + + ↓ + +Transaction 2 +- Delivery 결과 저장 +- Notification 상태 변경 +- Commit +``` + +Provider 호출 방식과 지연 시간은 변경하지 않고, +DB Transaction의 범위만 변경하여 Connection 점유가 성능에 미치는 영향을 비교했다. ## 11. 개선 후 결과 -| 지표 | Baseline | Experiment | 변화 | -|---|---:|---:|---:| -| RPS | | | | -| p95 | | | | -| p99 | | | | -| Error Rate | | | | -| CPU | | | | -| Heap | | | | -| DB Query | | | | +### Experiment 1. Transaction Boundary 분리 결과 + +| VU | 지표 | Baseline | Experiment | 변화 | +|---:|---|---:|---:|---:| +| 30 | RPS | 22.09 | 65.88 | 2.98배 | +| 30 | Avg | 1.33s | 454.66ms | 65.8% 감소 | +| 30 | p95 | 2.13s | 560.98ms | 73.7% 감소 | +| 30 | p99 | 2.57s | 1.47s | 42.8% 감소 | +| 30 | Error Rate | 0% | 0% | 동일 | +| 50 | RPS | 23.55 | 117.74 | 5.00배 | +| 50 | Avg | 2.06s | 421.79ms | 79.5% 감소 | +| 50 | p95 | 3.80s | 456.86ms | 88.0% 감소 | +| 50 | p99 | 3.83s | 515.22ms | 86.5% 감소 | +| 50 | Error Rate | 0% | 0% | 동일 | + +Baseline에서는 동시 요청 증가에 따라 HikariCP Active Connection이 +최댓값인 10에 지속적으로 도달했고 Connection Pending이 증가했다. + +Transaction Boundary 분리 후에는 Provider 호출 중 DB Connection을 반환하면서 +Connection Pool의 지속적인 포화가 사라졌다. + + ## 12. 결과 분석 -- 가설이 맞았는가? -- 어떤 지표가 개선됐는가? -- 어떤 지표는 개선되지 않았는가? -- 새로운 병목은 어디에서 발생했는가? -- 측정 결과에 영향을 준 외부 요인은 무엇인가? +### 12.1 DB Connection Pool 병목 확인 + +Baseline에서는 VU를 30에서 50으로 증가시켜도 RPS가 +22.09에서 23.55로 약 6.6% 증가하는 데 그쳤다. + +반면 p95는 2.13초에서 3.80초로 증가하여, +동시 요청 증가가 처리량 증가보다 대기 시간 증가로 이어졌다. + +HikariCP의 최대 Connection 수는 10이었으며, +Provider 호출을 포함한 Transaction이 약 400ms 이상 Connection을 점유했다. + +따라서 이론적인 처리량 한계는 대략 다음과 같이 예상할 수 있다. + +```text +10 Connections / 약 0.42초 +≈ 23.8 RPS +``` + +실제 50 VU Baseline의 처리량은 23.55 RPS로, +Connection Pool에 의해 처리량이 제한되었다는 분석과 유사한 결과를 보였다. + +### 12.2 Transaction Boundary 분리 효과 + +외부 Provider 호출을 DB Transaction 밖으로 분리한 후 +50 VU에서 RPS는 23.55에서 117.74로 약 5배 증가했다. + +p95 역시 3.80초에서 456.86ms로 약 88% 감소했다. + +Provider 호출 중에는 DB Connection을 점유하지 않으므로, +동시 요청이 증가하더라도 Connection Pool 대기가 지속적으로 발생하지 않았다. + +50 VU에서 평균 응답 시간이 약 422ms였으므로 다음과 같이 예상할 수 있다. + +```text +50 VU / 약 0.422초 +≈ 118 RPS +``` +실제 처리량인 117.74 RPS와 유사핟. + +이를 통해 Transcation Boundary 분리 이후에는 DB Connection Pool보다 +동기식 Provider 호출 시간이 처리량과 응답 시간에 더 직접적인 영향을 주는 것으로 판단했다. + +### 12.3 남아 있는 병목 + +DB Connection Pool 병목은 완화되었지만, +Notification API는 여전히 모든 Provider 호출이 끝날 때까지 HTTP 응답을 반환하지 않는다. + +현재 한 요청은 총 4번의 Mock Provider를 순차적으로 호출하므로 +최소 약 400ms의 응답 시간이 발생한다. + +따라서 다음 실험에서는 RabbitMQ를 이용하여 +Provider 호출을 HTTP 요청 처리 경로에서 분리하고, +API가 알림 요청을 Queue에 등록한 뒤 즉시 응답하도록 비동기 구조로 변경한다. ## 13. Platform Thread와 Virtual Thread 비교 diff --git a/docs/images/transaction-boundary.png b/docs/images/transaction-boundary.png new file mode 100644 index 0000000000000000000000000000000000000000..5811a152ab2ff79f66040537c0a8a9e46cb90612 GIT binary patch literal 157617 zcmdSBWmJ@H8#YRJcMc!|(j`4Kib{)0C^>XDBV9_$V9||)0Z2DE5(CnL49x&iQbP~D zZ+PD4{odO9`@PqawT9uo?kmo`j^jLy)z{S|Ct)GM!oniIe^28f78V{93k#>3hyeHo zN)%U%g%yT%Uqkf~)O@35C6vx+Y&+0AGjKVL8K(14MQ$Y%_YKyP5EtH!6*d=%R7)~m z&9~mwJ#vr)SC3lzjr)U9eEkh8({H!VxyMT9oF3fc;rg&uwpBK}-gy*R@@cDVhNrY; zy$NZ4kaI$b=2oS``{zG+;~C!~!9RZmKEO?5P}KkD0oAXvH=zIWE0s_p5$Io^kLQli z{MQ#Q{9lIa=HTnKU9@V44)upzP3P?Zo0!>HCr@lO2VUdBJ`gi80HwV8OHgAxGMEMo zt;h)#Bc~wa=9p7qk#+dWNfd#~BikkByoBf7mgVeYKx{I7T`%XjDQ*D_Dp1Y5+kD8u zmfyMEiU>^D+fj*FSMj^COZeEN@EXkNTT=!bO# z0Sko@c(Uxs3rMFe$}B+Lty@7y;^D098EVu9J9KO`J;5fh$Sw6FaDR+YfsY+ z-Q^tW-aug})kb>_<0)a3SQq8h8G@4-#T8_4zlm%sw-|Dkd`>_?lDoKLsVO`%7uLsaw#78354;r} zMAe2H$t{bag!YFiOUS>L486Hb8o_By+p(SW)j>F$&nI>#YiEh>G8OZVky(M}2w#=z z3rR-^EP~LBP?e*%GC`C9SlkzUg0p!8Pw?uth%3hw4o>@XljLr8U}MgavWd{d6SA4k zAogi0&fXDBz?Jw+Ik(!Lprc-P>N{v8kR1XqZN};wvKE6iI(4N|-pHr1$rS}e$-|k= zUB(J&A-5>&f0?fMrhyyyl70UcRK-R+pY9PbGy2AUL~j=qR`}GwGj((Ggyrh(>6~Sh zOyjk>B}mJoq7YC0x>SdhoC(znS?>;5TDh-3i$J1x*x-;i17Zxx4Yl5<`r@ z`zWXesgX^BwSArM)eHD<-*~dn3Mf?y=d~hpX`q3jCGG2YdQ_w!{?03P6Ta4IeIjZw zAcjAGJtv&W3k^DtbV%Ap`4OCu9mWjctf1C8#%)hOf7|Ku%XRHqJc*b?S%&1OwqoDb z57gsmo6Uh$Rn&;8oXXVqDgnpAVMLUjC{F1~cZob&oAPOlFINf?g$>Ukpb5XkYNzgE zh01(OY2!w;`U5-WE~5dnFZv-;&%K_xvf}#7@FEdK18jj!tQ`ks;v7d*o~ zKvZm<{1JrkfZrv=)%M$-C+POK)wb&)EK&i0)@n9MLAk=q0*yG_kkhSN7ApEZs@J9GvMEs? zd?qn)(2su6iY6W4tQo8DDNiCX9k)#@yl}I?zV9IxHjlsvR=N#~3NLPikp~(jmoDbX zOSyc2TukNBLQbB%4K8-*pDcZ3`b6s@a#NYlKVnJF~iSWJRQv(xlxd1{d9$5fLv0`GvWWm5Yxu{X^!(gqL$hPbz7vgArDfHK(^W z=R(t;w47oey=D}dE=(RH&az1bq%Y|ahYEk)g*xzWJN1_jS)j>M@-{m?R+cs9?ry0b zKXEA&wrsn7C|atRh^$-pBAVc>{X+Y6WyCWXOSugUOWDQ`m#|Dyes6Sp=q;bJzL%5q zc3_&LjY1hD`sHPck@Qf`<=N#>XZ+D>$r!WZ`G&vG%77$A7gTums4%uJ*l#5*I%Q?8 zoO~2FvVC>Df^>f=C3IB24z{+{va&yO6dK57jB~6gUSI|0sBT#FYk6B0Jl4CZBxWpY4v<`dQ2LTOEEwL7KP-2yj|16t*9$Z&zkiH zv(K|B*ua_=p?ia12SlLSN$Ae;pwG&dq`VKNdCcfpf#V2cH7STKQu9O!ijh(bK6$FN z{Nugm{?yzB>nnB{9fg5821x}Q!nKt+s8hmb)@kZM1zmH(l;|l<$7Uj;El9^WP-s)6 z%kOL>k(O098t_4rEh|jy$|12z=lhx`7pH9_J#UTH(63>)6eVGHgXY?M%c6X3A}g%l z#4ncQS~HnegSN_Y!~ieA!bu>fj%Hfqx8~~Fi&5?8?(%weiurCPA9}%n*f@D<0N#35 z8>D!Cwx?VzUL#G=dYTDRJV}1|vvLX|esPEG?0oxD(5&r3BR-yEul{^zar>5n{XJxb ze~Ra2{AO$IrYPdr>@+qJ;_y`Z^(I>Yi@N{Tx_RP`!kk|7wA&Qpy*oThY?lale*Lc+I zr|yv;@QJ15QpJMe&FNuIUdIO?5K88DqMeD?2IkI|%6_g=qpJkr!)dxlzixX=54;zo zY=Ed1zfI28GBLHU@J1RarMz%2&qsHs=uxOB{1EuFMj47}`&d$+d9j9ce`x!d`+Ns> znROSIrsjTdG=C0EQe;?MwktjDz^T64PN_Hi({_6}txD#WLS46CRUZBtSEud%h~A~@ z+oHb0%d>b31MMJ*P2}W5Lu7tUKg`};d3>MCKW1Af!05E>M#IRr=fbAVcc(%!{I-?u z$~AOO4_IzCWy(2IXUTbI`E7x}OX6V?^$l*z`|n{yd}Lk@$kl%U`V8`B>4t)qoDerEFeOK@`nLP{{mcE&bNVVCvNKIbnJ*L) zJ5OCEn_&)fVY zJEsdT)wZ?rA#Y`S?G7_}rUxyh;&n)4SD)gr{bFK^ob^aQoMExS zZ1Q+9u>JJJX>O+5fOc)XB0ebb{V$y?UIico_+$e9(O*J>6q*@ZA-V8HDO+<|({G_a zBgbo_cS)^HNawy58I@_5@VUuJe=5D|L1X(7uCp?MPOZnK^{=KvBF z+#PM0RP0pw^wD*`LJ^PHhGvV)qqWqO4eYr~f`HozXHzo$M!dzIs^$2wBsg0PQ)+BC z`H-}M$wUp^N^i4#Aq{GUeXSv&J|YV0QoGIE+d#JmjLgj=bz)1 zoXZcs0zE=*tm>?~^x3{J5(-XsS~+j03|*(|}Hw9iO4E7hnY4UVYsi%v#m=g70Q z+djth2(>;u?hD0V3rkCaFd|y&ZtITcAh}&}`|KOD*81$9YdFpa`Se=t(_pEW6=UwG zF5A83;Qg~+<=uq+(y5%`F3Q8*R|FF8#KNL~H+;+@)X?)Vew4CJjZj-%e5N2`rR04m zKi8bQxvHr&a-u6V|J}YI=lc;5dl}CZQA|N8m{u9r*zOLfE+Wev-ZCJl{5hL~t1&I^bB>Lkdn1Psy{yKrwA7@ToX`tNgfkK7-bH!ag`}v- zpHz4ODM*`6<;>`@%y7=d{+wgq_{ZBWP$_%3`nNES5Dep|GG?mA(A63!MXD=9)+$>t zIs5x$Y?7$BI^(UvW}0Y{`f6wrJTf)5_0Q!=XL&tGWFIV6YaxInra{)j_R|xrM2N_* z#l?}7c#IDH@CSl^D)HrwI|--0M{6qk5ONQ2u|&(MuZ^o6$a}f)f~Kh~Jz(GS>@BMC z+41G0<{ZoUL8cS;({mw_O9*?)QG!(rvlkKjU^9MigV}0k(&MP3NTKgX;kLN41X%<) zG6YANlj(0dCAmiITl@JdFbPw2ZKwe<8P-)!uNn%{mAHk%Xv$CxeD#-Y#v%slZEG?r z&Y|>mlo8r^FwT33Oht<2DtcJz`(#+C8da+NMg{gS?uL9OtxFv6HLrqzN}C2RH%V5Rk) zMfZ=o@t&#oREo5`dyRGX5aif4WCZ&qn~{a)?oQ{FCzQ<$GMuZSL&}_ybTWh(?Ph{= zX1fCaE&09)`P2@TKgtVA$!yPBPEr?TPi{3c@-m-@K=Z2yFVYCNQ-xI8;x6dQStsPf zJ89j>Jhosp-YUv5wz#YDygJz;uo>@@NluI#jQ9L-(60*s{XwQ$sZ?0u%hDew_|zGr! z*1X3u1;sD2c!76Bv)T&^-DU4jZ4H}BjK$Sf%B90o+MYb%3)+q>bdu%Mw(B+qu(&Jd zenKPcgOkesB2SY=;SYE2S0=lg!(4Puk!XBUBmEfZ`a1$Q2zH4o#gNec!_DYhHv|%O zWTQyz1cwbc>kDvI0(dHozZTJNzdHKfkJo`85n!W@Q@nh6?tU4aBD}VMTjO-2fCf{9 zd&nx;N|eu(w7wqpN(#DvLPgYt@gJDx$+V5?W3HxkcGK$pW6Yw8=2ZU($?bGTKf?A2 zqvh>e7`Uq^_2QkHShS1k6LLI?-;|YMU!@tV#!_{IgU#A%WSdVIl z9(TjGcMigpX!|jBBI>KkTo@Bw{&_;*{SQqLUIttfA*~3eh|x75z#{?0Aa{~diJ}xN zofiU4<8jV%HPLF>AQG~=e7l~MPIgq{pX1pD8jLbkFpD$PFi=&A4{0h#8ppNbt-ODe z+!dOL0GQJWn=S`Q-R3jwk*ZR!`kZOqhqLz<&A+GpL;Mf z2T#zbW$Xw-{^M@z@9X-`-+9yDK%e6goM6g^%5#O!#XIA$2iqt6q0YDBE~+p0OrNLQLt!I#?4zmIrPE@!DDKCvH#>UoQ>9V zJFG$^Sta;z!d*^UJ=Zd#+T$KSB5*@pyCZ6C?(!nkVL!D;sN2948{)LDV0`yw2tf|) z4PoG6CTh|xNpSV4z-LxDZbB`Hr+e6a`%%SqW7c5O6MP%~JhLQlDpSc=*U(((kxXk2 zv}%r%McI=#GTPJsfD6@~%+_+AO&haOS?%Ot{u&Cg_s15w+u)idFLJeSJ z?8U?&vfS4aiK>E8#5kM;3q+GlR0XsuFDV|9iE}gO;fs@viwDN5N}HcX`hg$*oMSd>^#IT#ceml(a)r1hx2YO6V8!4?c|QAd;YnIJi{#G=uN3946Wr2;3P(q zeScoC*uIW_$CAlfTcEDqMTbZEo7qlbh#F;wE0us|hnO(`JoYT$xlYbaA_z@xLe&^- zC?70(0fK)_+`El`3ZqdF6V{6(7SR{kkHX&r7s6%Cf8Yo zHUmHUp2b|Z_+HN1q;E%Gr~~d**tr0 zEb=ln=7Ny9xXwLvppsX$$ppU6r)=X%4(|v@0!wkoh=fJ?2RHe198U5ht$9Ysw`~bt%T6c^9H)EsuPs zai)1lydcz7waS4L`5hDc0_sjg*#Swg(yY^&@3BmP?}T=*V>%usmc}dwmFKoFCNC^V z8bp)Vczk7_kh*m*p~p6p^@Kd3$)L_lqZbNdRWHd+c|z*Y$k1M4W6TJq z+PdXSRoMA-+B;}x;|S~rT&=rkPW0|^?gtzDz4TM-(viU z5@Z=xUNw^6T6WynK!>EN0)g`9k=6c{*h!y{&NvV0wg}f-eS0Gw#0M1((o4JC2|TR z;97SG3gN5dL>Lo@VKn`CW*IAzAj`ie&X{YD$bXL~ES0X}ayAabRK_7#i7a-hW}P-z zv$!iUNXupBQ+;KebCM3qo1~TEu6o}|e*0N92u&s+^Jkfp)#v%G#tB}-yoHz^{^*V3 zn&LWaV)bD?eGsg$P}v$qUSTQHCu?#Ma2HuOmm>T|9otjsAo?A8!QiQ#Gj!Cg4&M&Bjl~d4 z2c9`rR7(YW1^v#<;Rn;HdX9;dm?mM<(1=0A2dv6xN%(QH@d1uZT6H~T%sIAyinC8&FZz`}AaVO=C`kk-RxuGMjB{j1yp%}e zUfbyBCT{)t%dbdw+@@A`Dcdsh;10d8$`+9*SZ5gP_N&l?Z?T#k)*OlL>#w#8ML$cp zA#rW|%YO|k*EMmHHwK=sn?t5JhFnh-wgV^b4(%wchbSc0wWNfYpLog^?Hx}j;ZDi7 z>H>EK6|l!k6#VVEK7`Ojq$|}qL5|&G&Wubd9}#?hnZ(Fm1+ai=(}R|8&1H3ABei>*$5q%TZClpO)DR2Dz|CIhOvPp`#C1v`JGxcR zy_{?pUlmFpV>mzs?iM@Vbid5{@x$5V0~3T3ag*aISgPyWz~We04kW%b%OV=0fM_c_ zCpaOv=wtMxVpi{t3O$){pW0SWIM?=H$wwF|ekOWb$FBVJG9hvMmtm;o2gtK+jA?V- zMb*Vg;yL9}F#Ab-%F6740>EAkd8VU0>F@-Yd~H5=TRsLrYc{bM9}V=Xr5&9~R2RIe zI7|t@s#4OfrF}xK#qlk`IMmIP!6Wahb^s9T+wP;(E~NUxU>C8bo+K$my>^|6to9uLsrqHHhl3L8{j?{l!NA2le*<%jIcv za^7n0m8RFPo3TppY$EBF+HM>ip@uIq1)W@UfVO4hez+2Ts+;+-$q0ww05q&w?Z>dV&91Opx54QV>fB8mdwx_HkN(H3bh}cp zm@$IRvF7C)&<%v&CWQai&HP>^dLl9kqg{7U?xxl2iU+mqu3f$ef6M7&984f$uH|ug z3lRuG1l_4~pDrWdqN4#pCUz1Fq6DT7zga$=mUJ`1@6Zs09cZ9aRWy8pQd|Xct((L- zNk$@6JW>PLvG6F%8k{24T9;psZSLPekHa=6KMO-|V0e6vt?R(-4TG02Xrx9fPW10k*7p^%VV-NCfcVM-0lq z$g5=9j~YA%T8~AEW7FRu)UTMi0o6bolT(8af#L-`Sez>(9Qa_Xfi4l0d*s$c1aiLK zX;@r7ZppYCH5i!cB@yV9`s%69+N)(1NZf#qzGoAt1J+c72)F^&R=G2b{m7;6YNb!q z@nGkGvcn6kr>>S|z)TJP^MK+#uqMPLM3EZIo14FiB~bhHYNemKA`l@OS5H*{TLPAl zKm_vTiT(ks39?y{O$4IVH}JutpAx=W=`SicMEM3(NC=9f)`OHuJv)nN+FHlI-p;{f zJj#>o|2~uPBQ&0a%$n8wyC=!2I}P`LE7xzYh+e(@FD0P*e>-1eeYAs2U}`6Ft@2U| z<5W&e{3<`}n@5uy-OQ`&(}C!~7nNn-eM))sbGLkDr% zis-ImBx7N^w{v{|wx7FTjf+!$Nj0?hK5*KA3=shlgpp^cn0x8o!6d?gO0XwEO<{N4 z9Ie+N;99L~I%cZrJ||0@NtI1&U!9(*#Do;Iip68JsN)gSP4|DjjLT4>BM zf#DytkLihvNGZlnNjOA453sIegG?DerW=)bJwrbuDC>`KY@$vO?Hyf>_{kt(Y(!IQd?%eErW5FT0{hw!) zl$IqUk&_%G9*uD7&F(L39t#@ikpBNz4dD%5G1-K>+ia@d?%IWo^uL<>?e&pM#xwJh zVo7h}3?2V`tf*e?arsfwvkY zZskeh4BkYshzmXEu`O}3&Mjl^&L$)1_Rm-3xGtaXJ z{^=2%i9y|Ied$6@#%8_BtVc%#)r@+>alH?gtxLnX=7W;s^p8G~n;dQ5M9OOj&)|3O@(qoZ65iq# zoGZ|P{q66@Xuz^Y)6<N<`^0GUaJ|+puIC=-oN9S%=zdY{5&g9Fl$KPjfmN%|piFI2drkFyPHmy~FEpi}dd zc?xZME_;^Xdg8|xJt*|Kq*yBjr2q905lzO`23Hk&k1pR~GmHJ_hN!{y6_E+dRrWWP z1!iXVYG-~U^i@=3MTgaPmRfCa>REwosKZ(jVhH;Qdd%C5QuJmt;vLn(HKIbh|iom$;4>0^F8+4p=1CLEj&N2de7Wif5Hr)GU zUn*VRRmpaR!9ab{;gdVl9rb9Vk(s8!V_pvwXDC3QaMdKHYv9&|E15@!Uo?G|8JVTj z`?*7#a!Z&SmMjzuD|_}_1Hh|_-&M1*1`{Yn?9H&ySE9n6>Ir~pSInvua z@a@UwQvv35PaKhGksra;K9fFN@OQBB#iJavT-@n?0U7TK18LxY3bcD(R)^#0{63WR$NG_?5lw~l8&ljzKylzko$ z!{!qv#%CuFXF0DUVl+Obe3ZwgR(-&M_)P1$T$XZZeA%;LjfUqukBpSx3}iN_;u1K@ zP$*qgJ0BSgpqW=8v|uWA`+?b9?@4E`-8hG?zPhzD&AN}d9e7=4U|_ zP0Q&b9D!O^nezINyxOF9 z^&Ae;h4+8=PzJFroL!vTua2gzS6eN*1z=WLA3W&Uc+=z9J6UaOzdMKx-}IbLhCBBD z-Vmv6A_)?G0ubZyr+AbDb5C5J`;`ClxM6#KFHrFHrruo5FUTsif^O>q^sEhHfr^bm z?U?sqPn3&JsJY%9U0q9kz1i;?%6=X0yp7SEVg(EXSFG*yaj&d#xp71I;ij_AW2t_h z!)cv?ugs`Ly}-ll+&l3|9~yA6uEo-lSzExOFi>1(xR2TK_t{^?A6Srk{)glhlU(*d zR@0qx0?h7u55lloC8kQEBYazr)US^qfT%{`#F^j%NS1l)gs{WTh7gR*Fq(i8^}F zr&VY$bywf`5m~R&;!YV>We-z^#fyRn!W)EXDFNqIyKw|83L*0LYtv1a^!COVe`L;A zBl`o_S`Mc8#pT|D6wi_ib=$&QGi@8tS&xM-#Gx9zOi@%P(Sk;xkvBZfj_b9NK8sz& zne=gktWQh}4(O4qi=_UJKi@T&Ei?fkW05_AaKC1}@;dQrIV__BQ*F;r_FGze5s*@s_wlaTu^`z(bqK>R|E>M3LUZ8WjMRh zs$Jv+8_+Bf=-pb~T$xkyg^3yO6*n)~HS@g%pb9tmgf@ zt9@zfXP|L&lNpWY`08ul;8i}qR}q=wqdROn$6QthB3#m3g;!UWikXs2I`)k2NQ*@! zcR~qVB->oLXHIdrw~P7Qz5D79O%9okj__NTJ!8SB_Mgp`u3sl>op16m7JARy0#eBp zl`&5w0eN7$HTSP76Aq_^8-3R$oj~HrKPC5Sm@e@N)N!gY$Wa$0jZ zqSw0YYkk?gHQ>(e`=dGMQjm}H1`U@{dun<=2w)X3rHQNe4IFt)z))4Hdf=YJOI=#3<1$$wX47QnGxUZ zGh06Er}@5FcPI!>jmLb?PiW<#XrY%Dn#$F{Wrpqb__mxPKkK9A<}2tt|0JV0{f13x=FjcMXB3Lokd+-5E^ z7ic)41Uqk@3e}W;ar%u7wpLy^%LfdnH~BmZkJ3i5GHi%%dh{f2be}Ex#D6OYzAfYV z)1|TCfSXEd={>pG041&mRf)l#ZqMxfV1;c2p);#tmPi# z07^zu9KYHQPvPkqYX~9y!M2Ph*;I$C>Hui1#St77Em1|{I6w7ywc3yDaD62V0%#=W zBDeZWvU~N0oU%O-p-%B(6kYN2#Nv;dn&VWdmzT-O>9VNHGk;%Q2&2OtHM?{T_n69J zBQH-0@%B<8O^o^$ZVdT9%ZazldT-dxOod@SRFad@S|{onLjPpRmV%$6e0>i}GaJ0; zzbm#{sYHi|da8#(9zLvUz*W_xVzS9FlgcjmtY0xM2AEzgb^@J=^w!=@eb!>U&i4q} zC(lfx%jM#P{F%_XiP4Yagcr{?8Nt%xZ5QWR)et20$uHJ(=rTQxGM9K()ote*WAf*b zjS9wP@v5hMIYEe;U+7jw(b=m)PLE`s3)o!2h<#ZF3Vy1NwzPyH=g-Ba;>TeN$K50+ z3-LKk;8)b!)YCe4Z>uV7-FZA`G;eZ@gM5zojZE6vx!DEBL)u8oO|1l`J$o z2N~Un&}4_>az0msWcmShh|*k;e0y zD)7OTC-3&f@C#zUL=-JT+fw+`pzO7I+_E7H5&$=7XnNPJ*oAXy-32yZQ}@=3;csvO zT8o-rr)BM&P+0w%xe_B)23FUs_ zN5d6QPg|GhlKT$^e%CjICwrSO8=#5;Qq8?$>2-_ ze32D^?+^&3!z=TzZV~-IRuQ@lSVf8RoQ_KfJ*Gw45RGNCu}Iu#tUG0Z=7iV}zmdA_ zdx9hKBXqILP^9>4;GlSV=>aQKm3l5$t@`hRP;6UU-)0SepoZ~w^Ot0rw-Rjf%9;Q^ z06^Ye!gS_cA7cSwp)T0}HC=bRCw;CNEy?c6?Rn%()+Qkd2nENK7m7v%Eu@<3J;c=k2lc*4|U zF4fZ(&E+D`rl%;v;|`zLCPgcLIIfFU+s1a(Gi;HUo*5+9z*Dv`bU&jGb7sT9(sh0~ zl!Y3ugS6CcR)H}Jo)IYQfUyr1Vnx|Kj?WU~O?$*tF&2ih%IH(#S+U76)<{GT@G0#s8^(7dc0rQZK%ALlj?laVBuF_ZRe69gVG>n?R{pAt=HeVf>Ox3E-Vg=^xKxxm20@O zi9>kGT|n#b>yJ*ek27)$@-9Vr)YZ!Z50)Mgy=bn@CiUf0L6q8HcD*F-f5C=eBeZN& zedPd9AB3{*B~)y>O8fv|a4|T7FxTzLFy@9py1q>yjkyfs3IK%sa^5BZT$ClyA+mfl z?7U{FP#G9hU&~vmfD2_!toXG-mLD#9v57GsFKzMQ*~Wq}jC z()Tix@!jaJv%!CbMt8K~?a0oa&iB5+(an&81nHi39mk_8DF0S^0q772@DIa6j<0_~ zz;~~)M)SbTIzc=bGxWP$EXu$b9i?IDW{CZMKxDJl0&Vxd=78Mww9U!}gck=~=qfm< z!L$6(uu^lQO~HR&IoxgGi^NwzD>^EwOW)c}KVR@63raep z+0*>`N@B02nh3t35;(2jEfvJ%?<{;ld9$IxyBj=%inb zha#umgLV3AJi6He&ABMj#1;L=2wAx?T=#E+j6o5Tz))(vu`l>RQrVKU|7}y6Xb;b& zvzshch|Gl_@-6h>Zr&e`0|lS_1+?Gl90Ca#fR97lQ1HqxNhSAK8VX~-FN!^N{tMy% z8y+jD1*VDp{Uyt4B-&s$25d`mr40WLEicMNM8^y2NtM@E>bm1o65ze=sTi%bzxhJr zZb0AB&A;ctj^Su8qAaAL`xRuMuJvz{@VwHZv@8?fiQ7S4Vm&AWywCs66l8NjG4dU0 zPoDt+CxQ^Q{1t$imu@fnJqNOczp(pJDlpSGZq~29&XNeZkf_Ehcg)aocmv7?AWcM| zgcR#4nvZt(>G3r+ppVS%{11ha#DfW5iTXa;Vdc%E%m<}Y>8?{?OZ~qNs)P%Q^=Esu z{7c@uyxRXz)*DbUMq%hc6fVdGOKrqm9Mb<{y*H@Uq%~)g3l2+DLfG^`>-FU&GY9<&;COO zA@IddfRuv)DU1AAvhICf)LVQ70|7EF;f4;~6{&4*i2c3*U@G^n&coUKiUtD=7>_cf z3sY+2MNFRcWPutYR|WWr|G>o0BZ^zY9XaB-b0ha5Z+|L$0`0Tu?1W*|Ze9CWLFfU5} zf7opaP$YI+@MHHAb-`PslQPGNz%C~L0qI}8R=kx=FQM?|FJC$k$KsovB8C56am&?; zcbk?Ojm9c8(JFsFq}cyl%@VG4b^F^n0Fz)XJQ!(|e<0ZV0ce#foGiPBg#l*kYL1;F zYB~`707Oe_*nHu+_FvpZy%8E!#afe5j>iae6$5i%jS@PAw1opoHZ8vgz};8J&IkRf z{TZr8jT|D`hw10n7g1jU@Q-piV&VTsQHB-&&veMzCg-R zJIo(uZs`gXeY!(`R^{3D8K{leIiUPWWOGI^H5rNYou1tZJ|iI9lU_VE20;El#Gq>W z&SXt@_q>SL>KJ=}5>tPmx$>H}1IV*W4%*n~rN@t?iyuiqo7w)u(za;9Wg^$J!gZ{C zOu@<$iej>Tt~F4gcJGa0Rv?MF|d1*S4%z>&o3_>JJ*X4O`>@# z$q!_Xcl6w6=V*b+vQcnO5OV}6M_=yJTwk$xpy@4H3AIy-M$mfcHI)YtegJ8IsTmp; z+c|0bi;fL6Kelve2OQylP0Hb=XNf)6BQtJ5yC62+kckDZwd^Xmc{#(oy zDB>X{nVSheR^I#G93r{ai6V`U%im!+v#30`BDw#*XB#GQ=X^7*@%i5_YaK`DK%LHli^#N!@%@WONH(|qE?U+eRpe%><>x<3ms{1nCRqV0_6AhmtzEU-RbiHU-@oZ_gBQ$@+5K7?0(iXP$`x;^WrMqq zleGrfWd)!~W`;l;>s9w;B74&}W;te)<10wsv@u9gG31OL=q-J@JYX?!qo_GQ`>F$Q zeo}=P@x`R+y|l}?&N<=9?h5K?b^7?}Rr4p%WGWF~AZhPD^!_t!_4mimL52->GfxH> zfEG+}aQ!x&f1_enfeDau>7lXCN^de28}vlc#A(MCMAWLWG}OdC?3Iw^eZD6oaz#{J z@!CG`***=KO^MqHrakQA!Fi?_;?46H@C)2KT?B_NVG9|lAMpo7zQzu8n@Kh({`1zh zj<09u%RriKYcWtr4;V(@q{}QoZwPGw{#$~Cj2wv4KOEub%%hbbD}n=4AUYjDw~(#j zTH5jcR(k)ayweTWDZiu?N3PzYypOMvg)Q{BpYox-zC7PcF*FMnG^_VW0n$8Z!`Srm zUX0W^fe#&6#u2!1nktK@N(RL}_`xp%D3CHHj^@ozlMOZi0QmGN<5s!lt+pS<(opM5rE6y>y?2S5oqqD+E*!~agPtS~Jm!R%I z4GU4WAE)P^jJqRe_<|U%3i`3WT%e<-=tyQ`AwPqC3C2C{_K?OAG0+YU{DO2s|Feq0 zvlL~;oF6O#dew@WCHrLZP&J&(O62`bKhkW*@&jhNd+J^E2A$0kbzq%d19-a(X~q3_ zndv(2%@a9lY6bOMx=sNUg$`3{?FDPfmkTMkfzo(+C&0z0w0(o}(8}H>Yw8gREKhw*Kf`^`pru+|oWxNL+E~ z6^fN%C)-_oJ5m!O{t>7XiHXzs(D9D!0+evt%wDai+H@E&)&3pAFR%3ar5>}ctAgpR zHY*}`QrLd$Ho?DFk?@_*9`R&6xDKpq0&pJD``E8s4t* zRb@HoqI1yaXx6)Rt%iKMd?ZhO#c?nB+y~$X-sO^yD*RxwL9PCbb`LpofsJ*FpA`64 zkRv8QRnAicX^+e&Q~&^Lg*5DP(HHvaLf$`o09mhte_ejTNSdu8UIJI50E}Q4E18onWM2<;cbZmCxs*CXZ8&53bR0G|C7YrKQzK&wb7cs=0%a=ij{uVEffDnK9j}Y&j zj#4#y2{61rYn=6};U{L_4WH;2V@uYh4zq}L!$iyiRIX}ii}S|KY415BT?=pt2c2Z_ zjbt}NJ0DE-e+Sx78pe6E(?~H~W$@K79R}C9OYfD_ttc1P-ffhDEI^Mft zdd>&TDaIK8uF3IiL50&XH#EfFpqY{MUMN9XMW}tWHKe`6+u7Jm4#529ib;9i%YD88 zNX=%yX8HW_vmgQ2iN>6P>=sq$F_%0dSN()mY?!99hf4fjarrQYSW-ceowQ9;E4i$o zGA>}YcB^GGvx2tFw=78w3Y$E6-K??R(bEesAVPKB>{l6rp1-T+j}Xgyvh<1kA3RSr z4g4S!?%oG;wSZFuf;kYY8y`?ShCZI6p3<_XEC#9<%7v?e+ZGV2i;1$sl`hU6z0*qB zG7MgHX!O_ti556Guocc=OlW!Wwyi&328zb_?JiY)Oq)zfoE-`izTlhy{bCQ-SMP%{9FlHM zbz1PD=M6YMcwN`EQ=SE}Jp8J8wfW@&;cfiSyn_h4g6+aHilQQH214dtBbz`F=__in zhE@KwT+R;j`o%ls8^l%h06pZ(Ix*XJ36Rt-##EiO0Y$fWL!0F;e$5enZ&}=#X-N?Y z-bZ4e+dp-!!x|Xa*g7b~S+PFQouk%3H=powOvz>NjU;CwYd^pEPHWvgND3-Wtc^uI zKd3qK@tD0Xpwc^fqmFO>%P-*$m;aCDcMk|)Db@!S+3gX8xB+0^qp{6F$BT%iQ3)^b zW#*ggcE^*IftlZ`Cs-WHlc)3d1MG+Y=mNFcGJp!^TeJ+r4mTCB|>@*-9@tqzz=8PfRoVrL@OOB5GYL$5c!B| zRDh0d9JPrMI?n62nna>; zB5yQq_~V~QQO0|r(xWvVy4caYnpIK@%wa0C7+FeH8cJamMFNNcfB+C>&sMV|FfHB7 zj>d*s+)56p0CHMbt%12#>r%2??B9l#!X|+JRLlJ``mUzI$O%E*Kup~;?QQbEd1b61 z>?9%RpZj|;;(&8Ee4ssG6J7-n6+YXuDVe__i*ry0{|{kr8C7-nMUAQ;AtjAR&Vg|!79Sxymv+00Nw1|O%VE{2vqGqzC2lIQrhjmr+K(d z!?fy;*rv%a1Q9UF#siI{3f58UYU4TZ(T6oLF5q|);EP$94HkJdwzX>co3 z%D#Qje`CfWxO?xMmnq@9=kScM6RxLt!Y9x^g(+J@TS@-o1P;{h?TFf#3usQ9c zE9oOFz2RTGj?;4>xBYEE92%=U$G(@EiYZn;A9uI>V&k-Yb!hxybR3;G0@!gCiSeOD zQ6w|+3YNa#m}9hMMY1B1eQlR&AP2jd3IUXNm7G_gxs%4~&IFl(6%=BZx!`m`hFFL9 zkIbS>hAi2GjuW}LR?8AAub!+S9FBRN{~*UW>l1)F$4$_x6<_HD3~IETnk;y#H;+w8 zdDE8h2E30}-L=DA@GSfGzmz42J=Gm}7#VZzlJB*(x;R{nbrMCT#B!J-YlFQx0iClj z;fBF&{hNeX83}8dT+7)C;a!W2Q7I{&vLpyLe)cEAV?o%2SA3SNDjC$Hbp_c#xahB(`bxn^h8YbzWh6_Xmr%2o|;U+dTh2ByPD#`o^o z>x2sYp*&FG{FYHm~W%lzvG#H{C*kO-b%IX~TsP zM{e4jRS`5vBr+`~*ydh+Oi2qV)hbBSSs6(cs-TIN-WxmBrQ2|P;8#k(Cw@xL#5Z8% z2r|<@9$BX<{%=R;K0lMDzsjUlym?H5zc%`2RO_G2=kL8n%*xn^qK+^XWmZp7$+Ye@ z-VhfC{9Txk=gIM_u#fMzJ{J>lTGG8Zw}af|bz{o@l71=e>2H|gu^!wDqc5TR^uRa$ zb!R_&uRuq3=X|O~c31Jqnnht(@xi#Z^ibs~Huk&QtwanECO2&$qI>8s*O_^cp4Pr} zL+4gT&Kcu{6%`kRcyVsu5W0UnxNH;K3k0o7O=}IVT94tr2-llDt@}>W8vW8E-A@>a z>N2?2D~^`F!}M{=(k_(y4Tb%HdHx*YUT%i?@z6tSiR_QQ)^57(s98h2OQidhm8guazAy zV29LJ1vz(Un#LDB%Il2*vH!LL$cKSNdV90&sf>q^wU`os?E1o5;#_nl@rU*_v0$ma z3^G=30spVLMEAWgXhsoMZpw|VLjUxss>NHJ_~+ARY$jC2(|V=Ys{zzp9o--1F3O)X z2KsYEG%$jG_J89rxhGEO^xU20zMTmUnfg5lqh79-M$fEI9iO7fJxIMe>>YN6dw=`b z*rT!6f5(W0{7OnIbTQG_`{y|9hMV`JF?HQ+M3E;3E|!K=Mx%zxuY|u)N5Ax&vlTdD zoD#D7Ssjolc#Wb{bLJNo#x|K$9&icM5AY&S93&oI!>lh9|965fAwhjIfDDS9uyq=q zKLCzT;Ar`+VGxk==2j3Z*ga+S#E|3XNo36{rDtL9R&(<;fAN#0F_Y3g(8;~n$pFu+ zC3X4J{qKF*9O1kdpO6}3swaPmioZUcQi`>EPl6NoGQ#{;O{u+Y%$$p@Pk(KNKhT1w zJbmV5n^BN%EOzz;z{6OR{@;GZSR!WiZB(dCtTQ8xOiN}xxJvkc`OV$#*%=%9VolgT z2{%zv^Qc^kV*Nee{C?z<_oN)5nX)kwSqgd!zS%;HHt{1zFLaI|H$`r^q`V5JcSWXY zfcx!$k*7Xp42TShfifFvqpuC^;wKSVz5h|^90Mt7N_8)93Ac%DRMJQjM~V4dww#Dh z!?dkoBgwgZzrtCe37_R({F2xX9_I^-a_97o^5WkS!%4!9?!8kdjhy3?d?A@&fajZkFC{YDL!2fk_G3kS(--BvdJ=Q|00EBO8;n)UYE=X@w`cj2DRe@&)LfqXl!# zJaIkxmicLVUWXW&A;>59hOf|SxA#3=hn!>!=M~p-LJmAD(X(MFw}pQ(Rs(JG_Dg(^ zMBBQ$C)l}STL0T=WA7g{FO2^z1my~kyac-+ zKyStH5pie?*A|Q)MF`;$kein2c+-9xRY-=AMzM+@vEu}WDd%B&fP9C9@Pu%Y-i3o& z*B?K!277fR)NQG4^RXul_57X>x=-_T79qJu6LPoX3oU z^+d4Shtik~70$fCSLGla6x=HveYc=`*#IAyNbEl5Zrj>^#?6>3bFm4iO`7De)m1;~ zt==Uq{PwdPUXJBN=FhDR3MircQj5U=#5jDQsrfW>_08%iGMeR6VcrWy&|HV0|^SIMs z=BA(gcs6!F$4P_ZuCI6rj2&VicAp^i-3XZ0mytsLfXKr0DPcWC!cBz(^}qnW>O>EG zlSyjHmAk#VALYX?ciFF}0#~45gj6ieDKNR3WNg@G!1mMJ+tbkdB59Qz$~K1S68Y9n zz}oCenh3I+p`w(3f@gPSnxJs=Wp34Ti*a|Fu9+FoJ90n|zNu7>`D4#sVzGuwYXBs4 zFY$Dc@qBJ&pf|+g!-u#lXM7+jO^f478VroFcE*PmzIu;5(DrSMTa%l7x%(tMRH)*4 zt_ySqKf zw`yJ?=g#Gx_qkIHX^&MVvH(NOQKP9lexxkZOOI0!&;JDd?#lhJ%sG~)yTX)&NM|Ft zibP-lDQ|*1Ef7G+VpZ!^2HJ-<&P<~7qipe=;SEr z7DqM=7SA1GFu-XL9)S&~`}Ig8zsB8WL&Y0peu?r|%vQ*%q;iw;KM3IYM6beVr&KDY zueklX;2G({%fi+e@Gl(+A>SC~0M(`fzj=tS<5$o@<(8kp-HDSr3;7&Gpem`@zY^Bn zfdSH)8LQqIdZ{!_UkPRX_AZGP7w@^|O<~b@*f$p>+`7u7!C3F57IMy`=BhUspHWad zGUk9+79aXe>^~e;_@1wnkj=c*6gawdM-7c-VWho}p=w&Wpyt{VgnD^97-fScNCyE1 z%GFW(A-1RU5{(O>>A$OttO-erzE4i#h`=>jV1`vY4JOGXKAw)pzW(RA+sx7Lm*N;IZgyqD zZ*DDN5h;E)==89?=&PQ%zlai4SMwO{zjb;{%KxipOWa9pck!K8$t>YG-?wm7yl>yU zhDVL1A+g4}RJV+=ARo^72G({VBO0;PF!Dw3XV0pu-@l1>`B9oc4FfICZs=g}Rb?#> zGkW5n%DcZ}c=RZGzb9Gm!k`;c6>w`oK-^EYR?3wQ~ef?lA5)>=i<$I>Ns11lnh6TunY% z%>7KUOBLJcAIipESJDkxB)b+J$5$QNvCTf&GNiJL?#v zSF19UiX?(S*3W&c`rb=M=U5Ar%>8r1ACVTdXiWwU+hP|7fn6Iyh2ui1NRy&PuRND= zes(_uZJE-pbyM}HcI3eiPIOv!G*07{h9#|RuVX~|UD34E| zXnm(;={cU+cD<2iQ>bV(lVCb1Wl$_W;^&7UIf6(yLP6uk)0Iqo1C5K-otx%wpbw(i z;37{%j86LwJV|-Tj{BSz6hvxj()Rz{9RddL7RxY@%VI#Ht4I}o1_UObja0-p3?*M~ ztjtsA8H3uR4!_Lfb(iJI{OT19P|^p$>kf!^1JRX~C@(qLLZ6NfE1Eh)tQkG%{?~W$ zO-l^1foyX!_~wI9gHO!Jrj+PJ_rOv?3qodyV1ReOvGMNL7cj7BudM=B_{GO$n|<<0 z{dgWmac)fT0I5id&3IGA^=R|h;ozs3=Jl2Q7a7S6U~sE-+u^xBkE=rK2aTL=jOQxQ z@-VBZlZfvX9|yHAJ#MN6Zps7J1^c4~(VHYz1Z(APXeEhYPg%e}i<$Il-;}}hud$86 zLUw1)NFA2eDQ`Sm|En1RuTpSj+H7-=2qA_o6k;@PGn5WJ51~*kI4`tLVgeFm@oJLv5tJ@JUXMFat#CpTN6yk=73sojgJgV! zOP`@tC15g+63S+Ic4wkygN}neI1|o1l>xx`I@dQ}Hup+PzU<2jC4dUN!i{@$yZ2U` zTZ(duvjg8PD6fLvY;+X#3DIt(g0}weH#F(EKCElu zG&OT=+Y`2(j1l~HZTvYgW0ecm*%tEjMkB^`4nze+H$*h$6QuaS0C9c6G{!KDed}uj zWer5uIklA%RN=iq$+YOTY0Hmr#%Arg53M}o+a0d$*JP*TMQGHcBn@t@L9! zkWstR$aRWU)(M;3eeCvSR)4h=(Q_63wLRk|PH)C@(8VSjn zd%CsqmFc|a&fj9titP9A24=12K`Jk^yg`!hO!&LRn6IcIw9!!6|96q9M>xrhsNQ67 ziL~F`nM8_fc+7sRTtWz%x#Rp(WH0XY4j?Q0Y)zM?14cwi-S!y z4_uZ@206F8`n99r&1$$gDdxyJz$n>CoVKnVW31R zzQ>2w;ie)=E`}4HDX;fUriI+2cKBEGPIU)T=|RKLj&V~J!IOh`{*PH1YsYtblDFzb zyMjQjiA6*DI)s~%snclX`z2yGbZ0g6E^_$K?h}y5@jRUqj z6+5C_wl$#k<3@#S1Q&d25#T(eh+^Ah%w7tc_08sG{dP#`f14DQu-?sdGD!BxU`?xp zC!<;>pXSQmQvm+iRKt_Nw<;hpe5j}&J2!xKI1<2Lc7@9VKo89`CNBTj(Gh$!^GjW zHOAkrL?s`@rQ;iSG&IGnQU-=s!tV&?U7eGAj7R6zFy09yiVgu)!uvb_0-DtO-`DTo zOE5;O9>>N0`Y-gTC#zWhg&`{5GjFbn$uVX>GOl1=7JmMc)^K1VeNbGUZ+R>krP>Rj z1DNKHcZ=!bGR+ssz3$!ti)K)5FtjI3@Ckw7zT^YIeRb!fEX42W<-qb!++FW$1HPjT zgn{6dU^{5keY`YO=1{EQg;x*R!8=IW^@KU_8Y(&$IsdM9tghSg+W`FJg~|&P#Ao$i z(#<}e_dJ*qb5(imze-4Y{<%r50o$``KDi5XFx(zyEJ$soppVkcr2fY@GAEas#tc)g z3oY?M4A_0}6g$F28iGM?|IQ;cJq3!aeEGjpz{p7-+zZb!vQM*&3(tsPv-vdlix(=x zpuu`{aBhMJ`dZ}v{(NZ5NnfV8c<^UnD>%Elui{4EOB9-9&FgG|{M+K0C8He&G(6+ozR%QhOQEc;~A zIv}rZ#7G1rI&hhsG4a&jb(`4UFwrvBtjG=v88Dc#{$q3nMUy_m?!)^1%4>&Pl68pd z5}l&DImUjXao+Sse%3*YdNGHCM_`2M7*WO)I5X?sz5~2p+c+E_{sthu#NT2lU?IH| z#kHSVb6NGyr|YnQ+ZkGdGnVHf(%^LYDn7R3kKYee#r;*eK%)CtE12^VU~F%6p%amJ zsxNYr13P7zzHQ?EvtT-QFf6cO3qOB$i@xt~oA%S_C26X8@EZ_;V%B73j4@Bl*ADi_ zi3IGaMkLlE4XDuDMxev9+0Zf`eUtvzAu7Dt^i~?PBNVG^H!t(ceVy;5(0%+}_A zoL^`@+-b$h+InJ-&R5hzEb7Y-6REQu3eXs+kGjx(5me$m_qMzV2O9ZT87yAqpl940 zeU={*G+EkVzp-;m9TPG&rP8R=E3+9-zx)r$ojB;kRH?lg`>t#I0rX9jYE5yxnmb<- zFzd(!Bz7;;V)N$VZM^scWM%=F)3=`7tpYBxh|>3EF8M}N)^~p&^p%IrDERwFe0kZR zmD%NdbW^4Qf_b2OJRlpCzfRZe-xb_;`X;0o^)hWTvt01*-Ff57bG|iDOXYCZ&C%QH z;(TZfn!eH}KwUn8&c-M73^2y+!wrRUOZC%gP_*I-$hC%sRh?e!@8>Uu1+FJ56jnED zh;JZWnQ!3A8biIX!%v@)$slr)xNu2>V|Z$Ev7auEQ$8?hwgkk?oJDfT=Z)XceESSQ znQSq^wV&XLy&=X>4QBk@v;NByVM>$NUPm+Mb-CtU`yOc$BL%e`V>Fmc@%VmpLW|_3 z?L6q=_Gq+WwC`mNh45Eowx*#k~-G;Y~|HA!npz>+#W|zDibYT9>XS;me)K3eG3Z z1XfR)hgibWc#=~}!+B=yrE9RYSy`-_(v46R+|OMVfiIP+tL%lQ`EqX$vu8xFPM1+@ zHm2R)qL|qLgRo|W+4J*bvQQl2Dph=_;jeh8qi_dFl-QhE8LMn;|5qcDCq+z!5- z#4udauEo)UB%_0$Ik?J;)?VidM9_4ls{`%l$D3GZ!M!@Jop{GrIyAEJ^h23_(ZGx` zT>B7vVdUYr`=SsmlzAO1&PvioPrnES=IGIaF!T5#9K#5Zh47-x;lC=m=Y86psvT2r z9iP5rv~e9eHcS{uKM~LC2OYaVR}P=D~cNyON2i%jWb!2w$m)OlqX(tVu;wS zW1y!0A#)y7-zJe>==QLB1|#wFM^}I6wAm+MfwY7httz2;RVw+|PGv@ho=;KnJ}mx{ z(bSQMmO94dKfnrL{AJmxVM_`7jzbB1DsIP)&aUDlnGn{PQOn`IO+cJRvumO+UF=QJn=aYkJ6)+-YDZr&y!b1|ZvBATrBaNzVJBR{O8Q5LG!RQ86$CF| zN%J|XFLgaA$y09%ZzyWWLtJEN3n)$BG8#>=2uN1^SyBKK>boNmy zOj#v8U2c)1;^W31mJAhbQ+8X;SMQDUoE#pdlJZxs3Oi{{=Gw{%hP+D>aUxEliFwR6 zO!i;y8FgM^hK;41_-|aB2~E~#ifGx$?(*j-@<&UgX-4T+?e-IS7a6ow*cB8Pw)oPUc8bM2>n)Xpy^x5J?_9^) zYq}vkxv*Z!I_YQO4z`?)fph-Wddv){crxX@PTLgV;fKhj=bQ}qErb=WM^DN1rp}~l zoi;Lr+bhgx&DwBQs{3eRH1e?-fAv>dTDRvY6K14~s5e;6FKV#b^h?$_U7~mNSkrzI zBVF8{Zjx-eEn@W3Z`W?V)x|^I^Q{|^29IL211UF5JK9f}L6w;@7_-Zi+|^q=5$l8! z{^|BE1D7;oifSzO*IB)@-tFg7{zM#wIat_NB!sIAClZMP9HttRgq?p)8&I<`D<}=U z*HtD zP?Db8IMMtfp9>2^aAwP#e?D7dt5cYB%Mc?LN48cK5kB%p|GtcLGg;d4x}LRL-h6br zI22dvFplO@XhiI?w$xy^(8gcmy2a;mzLm!Gq$7v*nLu;PAVZ;1&WK6UbXb~%V5Iq2 zW8|afoNKzg=d%|=JAxaDmm5XbRR?S86wLM2647oYjQQ2+;qFJLmY_4Sw|325fidPO z)!>j&{f^ks>(;a>x~cfVSMb4H3m??iwXc=y1F{w{$*pR%lPKvt|g! zx*=B~!fbA{vtC)td!28*2^Z0u(DBH>u4#_TF{t4NYc_yjX7i-k097HsW9DJp3&ewF zl=j6nwmf*?q{f=Z7Atv;$KNsUbr|K9$9Pgo_vb4*%;3=hfVVo<9#S`k!KX-hKOe&;g2hKm^ zl2I--piOx>_1JMfnh#y|Lz|bgim)-ZO=RTeQ|7#O$zVKls9bcQ%N`5Vug8a`*OZwp zEpoNF^lDSKNwH%>Cf;>FPfM?^r&{JpH<$L7z?2-LJ#}!Gb~R3$$XkyQN3uT=M}k=g zl%h9`+vNk!l-4DL&ou1sLvj{Q(sLIlG~tBc8nzmHPvd$^N#p$RUCiY#6{6DIS9`pV za>*bYo=hy>w2dAO+4rFzj5P1F3%EZ+&{_#uw)vdrlC3n3VoKrZ?C?`cmARkHKSoth ztP8FcZEgB|-j0#G!7t|zqvTEf1PhOoi{!)Gc}DD|&9u>|lgh}aXPetc7{ERU-lIZ) zy^L8WAtRN98*~pXRUFA}@HHyDfLJJNWeIgXTLNWbSxyv5r!;6ZKT{Gm-AK;hC~_J! zXZEDN5^nt`QpX8j`Se6}9Jtw?AEpZ}zX9FW9(9y?L_C-q=!aK;_;d43{F!cKLP^A? zgHm*;P9#jBr#Fl#t+u0e+Q4u%w>eBpGx^H-HShDMf6o{nDt8-AR?#-cit{O!sJxCJ zS1P5ZA6JcH{y6n1>-8`;wR4o74*A{bFB?Dd5tPj>o5E{z^0jqdjNmn@+bC~Nzx#>DEl8$i`J6M~bD%`@L9Ju{wNa+=QJiKz8Gg_H(vVHsla$y@W zqz`bs5wm!v!=t}y*Blp5-?R>q!&nY{qHqrctY_O@S^vE~qDVcYYrTGa5mwabU896x zK!ol`EZ#}ObZdiADMUn>|Jg`~z2Ut10#zEhx`S7&W?>%l{HM9w zm`oVb9o>V}1((Z*0iBIj;>f?iJ;sjHfgfP{e%wQ;b|c%W^sGzl?Dp3l!J>ZVySZ0E zVe(!N{y)ZeBA&X?->Y;wk3m#p_NJk!{~?aIuU(**WBH;p{g;4C=Wk%`*uOFKhVRyi z*Ue?vir=8ZKlnw*sf~j-;Z{l`Zv#^+K{HA*b&iGxs}q8bK1ogY5j#g~8;f~jeEiy` zyJuR*Vb)!63eYKGu~CbD)KHvp)s=LU&I4zfj?5(W_9#8|&h)W1*OgeCKu%Dg{dkSF zjHVa*{#WSgt+x?;R+x~G#f*b}w{{D5-7TZVEfqf#b4w`b*&qkT`|vpky1q)8M;3w4N~gj{fXe~&$J(eDxT#rOc*)_G*-fe(RW z%xJktczRcRVd4%Ub;A`m`+NYv5<#RGpB73`Lwe3OfZ(NL25s;+%r;~Tn5 zLT*ytjI3>wBkqH*!^#YLPnd{zUPK28zKC8@Uy*T=@=U`x%DVk$j)}M(_*k&m(zLqp zAy$>y=`4y66i(87ky1qhJ{$yVQb}ayzh@5%A@%5N zG`?Iu3hIQg+sYuzr9-dw&%u$3e%@Sml=p+xa73RUZD61KwHIT+G}7nzrT5`1Q|J*2 z-@1KTMU$d3xh5*SsOynscwV8G&^m36Ipl!rY6X_ZNdhM$Cc~tJB|7q=-Nr5|QzD^SE457Wwcqrz1 z>#U^4$*dsZ=|$$N`g2!tB?%}FM zW%vGk=$x>XH>P(04xU+F0$WB$ zq4cE}>v!mxOo)UpxIJ}4W)D#D4mk~%^v6#YST&Bfl-9VKtbL;NUSG9=ZglH0y-1Py zi;Mm1kkh`Rh}p|s4UKxk0upW;*+Eu2s^?j+QNB;rzpHWCmmuQvtSx`O#>izg6>dwA z`8;Jo&>DbdR*P2dm@55G4$n7Uh7OT%i88e=|;;6&*~1nd2Q;}ZuuP$V!%4aScb|DW%3@^3^lvHMPEsgTgZ-E>9 z>tExgj?wWv_8N(L)tZhTbw>#qGF7^ER~MG!l^#j;$1@r(E7QvIg2s9BzWuZHE?M!s zj*9*%>5G9+m%hU#9fbPMFR?CrdHkNWKf<|44C_S)w>56Zz_1_3xGI_OUOwqF0MP6_ z*wTbO=faayQ1O!E@9G3(Sjfg~S4gShC4F4s4##tUlYwZ3u$qnw5p8WgO#0+|AY4_d z{#3NTjVx*{x|Mu6FEPRH`c&R{vG7jo>$r29owt+zH@%mOO#&CA9)ss%OAwkmrfbuJ z=Pfy|UbDV;;ATqDQ*KI?mm*x$vSJpJ*L84+ez|fQ>o*4_g#+U1ewC= zt%Hwy`IkLPytBlRR2i8YvhAPUx*T-&^YJpX4YX%n1JIg>N*%Sv%Z+^NH{wrQd=Dlrri;gXobYdwy zZC0Tu-B?=UM!npw`k&_(-}4L%r;Y|#JrPfGrg&e`GK)7smBgD^mAvpYcqB24n!C`X z0A^#oKEOT2b42gKGYhd~xfA1|y{sI~$)sR|8Cl zv8LNGDWiI!d)hereJ0S4NqbU+Xa;Y+Q6uR>LmUsOoRH08I(R^FTNirA~nqZd+U{jzot&D9A@sK|bGgn{g zbdFEE{o7j$(|E{B1NV>*%oaF$Tq-mT0`k(&dDZXU4n0QyD0z8ICkg^N?u>wqw!rm8 z<%7NZFB9sbp66V5R&qtmeT+CowkV|A9T@7wRydrZ@ym0rbc7S8Uw?QzlL*C>Vtuy= ztMNGRV+AigjaR$WmC??2&VkxSQiNgGsJc;m|G*x2{>*H7B~Sw^K`!Qv`D1vP)omaD zhklps3%@>Wtn@n3&L*i~62DV*((zt&e|2<^_9r%y>#zC*Q*XPG1D}r4|q~|wWZ$gWg7_Y-7 z4JqGoNdD%X)2!KxyzaOrZQLejan}gE5c9F7v7oO>E|nSe+a%Wo%=HX?6|()ud)NDd82fbcni{p#5iT)KI{8*JJ7k! z!*Fun%T+VcfoMV}b2EvYauhe(d+;bMF;RViXh7VfG^al@hyv!mxKuUNO?trGDxkre zH&##1=d@k)3`Rch3nwW$Kgic?P?b8b_kO_RaTaF0b%NRl-gabHW}_{Vq)|wCety(c z#CbdQdSn{?@I?1Guq(Q06uTD?;*c{2$`20TAEV<;)FfAn1TDP19sXjxkpCIn_jU;* zp8+Q|wS=qO`U~ZmC(P7K8DX(e$_urh@9>A~4L7#!CN~@EJ9(x=z;~#1K1Y}>GuAFq zqzhs%0&8WZ1F0H~JzO@L2%Sd8S0I6!hrWw+WojX0Yn@%I7H5ZPU*IeK&}=*-$}(=m zK%7L!329me;;+OoJg6_F6>TSvIl3+`wP`aV3@u`M&A)%v|p5=^lFP8SB0HT7=@xBWawthX^_QrcR z2UY^Y^kapeeB!*=+fD$n*^usXP*qFmKz^vL=nJ*w730 z4>##r8;Xt$SrfGRYJB3brpXkLU7w)7|(_XI~xb-}i>y0o(KRWmVz2>IMGBnd}qv;^uyIA;k z$#eHd?(qWxHthuCRb8lvx_Wzg6-{UHh)71UjQ?mwV_uYrDDmO+Q$Wc4jS{R#l9t7h zrjHfyg`255w%)9I?B+&otOM5usx#4mD$ORO!0qvBTPF?`eIgBr1dp2u?*9JtZ%M?* zXcU`vXx^}%&@l#KDI(6v3*>56>Dv}gQsVnO>3cg~`zSq)K+y<>?03Bq)U0_Qfc=D9 z8*VvMD#PaVm3}#oF{ZcXS+@SZJge{5tspAr*n7H@lMpC;gRBRCw-S)S2dC|FE$Jvp z$5wNnzqON$xgpsf1Uh^9%P;bf#rq6*Y^Y=>shQ|ul)k+TN{G}p7n(jN&gMMuY~Z?w ziub1RU7EY?25pVaZm_YX)B2z?8z&wKlu5nFGjH)Cwt|@fUwJSkkA(jyM!WW+Lc8h8 z$JpTvHK=vIHvf{guItBC=XbVMWPXw?5pG5*1cy z%6aRCY@HEcm-_?@NhlIaG3nn8KMo2%x|DGYxa&2=IoxNp34tmQtL}~2ZA;B5ET3Mx zoug%}vc8OJlk+r)S79W}whgn|)4sIdxoWh=$v+pLO|n2$Apb-CaG?~};6p#i5|8Gq zHL|4kGQ)>`=Y&Ddw6b1!l#9IqGlmLHLKjgL9Fa8+7{rYscXq#Lb=%IJ=GR=4kl0@x z3;OEr6ItfPJ8vK3lwHTIR9P%E_#TVR%&H(K0L5{30AKcoQN#LYFB6#bfMWOnPvghw zAt+$HjMJZfy5EgC;6xMa~@rbl- zW!GPKoFk$s9!w2A@kV%|dGR?vA8T+R-yax{9r+qV>v4t?S_<))=Fp8IL})}!_UT|X z?`$|+YurC^{}dn)xpjeYq`APYr*pu@&ePTi-K=}8k(l`xKD0!^4)qf(jC5LgI8F4p zdXu9fI%|dE9=SiU(8E@~=Ak#kOB<(pTkr5H3nQluH!Bruf7t`3p}vTNHPkNYt93hJ zuZsFi)c{V-tnYvKU}D%PEt}$BBj= zJEo`xJe0EERm!OI>fJRP?3&h_l{>tVO8!d;?WtfSl3bhY`2koMpGVhK1n8T62A|fx zFUHnp7xI!wgmb}!8}XrU!P>w%&w7Z&kx-WqGOXnMoEVK#MqLLCPtqbng z+os^XiBEu@6|)m1*rnt1PM{nAks7*CZM|`)OLn zu=8qHbI1LM`AEU1v%|?m<<5+;azxrnL}Kh=&2}91S>Td7;i@_daaadXjs8WnkAfTX7g zgoZ20U{eZ+5n^XsAjMbW!A1S6(J7tuIF_+!5>D@|#714E+Vx{dxNGOx4%E)FXZi>0 zyO!5$T+w~SZmpMT-%!5+hFrCR6jf2GNomaKaIEJ)!iCG(8(l=$Mra}h?e2&YlngZP zvbHTcV!fObmFnv$bbgJW2L@38C(nu?MF{ZlD@(ge|Dy zhNR^Nr^1U$qWnI*v}}!a+($$WSIsU)_S+)6R;sEVd+V5pZz=VU;)+MCD=j&L)>eWe zla`tzR7i7_bb+qi%X13%r=|6{{~fLADNIN|=Sv+no7&*@qyEob@Mo~sre-`myarRY zk|wI!p<}Jj|6OlgBWu|jAp3APqdaxhW8dNW&1wHxK3yXdMif8N!%1SH`!}uzJ%uLN z>N@0ICWYhd&-4HDG_%pd$nV_ioaiV=A&AsCitI_lfRsA6ZIKjg$S-&(FG>D;m~q(7 zdTs-j8QKmvAqQXe?&J~p8!kxlX*+;;QMYNhFA8x}x>*^$qL+?jLFYkpn77_i@d`az z!bNFD(X5gW#gF?eRbR%aK+r70DKGvuQC5&$k@cP(M*xBr#*OIRU2qDDvNGt5oo?hC0U-?b_V-vLrf(bq z-?70T8N0tUoB#_qIfez&w5hfJlDN&ErAG!1ly?Wx0dtbb!MHKmAv_SbVJV0bjWp%~L!`oNk97jioLPQN`bT;&ugZ5@7 zzt!R=MqD?lIt$PTkzpinqo#jLRCg$0EDv+6UdQvhsm{1=WY=GGZrB~JI}a9mtoXJ+ zDYbqOrldpdisEPQz_5K>WIoNQL5fv)i1Rv+Q;OAa^~veU!iFo!e7iM9ds6!zJN4ho z>!&pRgDx8{=t{`tXp>wsgh3Qhxjdaz=kRoS$!8vm@{L|35I$oKjt-GxGT?ka-K; z)QG|VWzK4}4mBI+RV?}#FB&+9q>CZp!3)VtUD#i%oGf%*lPgp^PFMjY|K-)tZ_${@IYz1e1| zV3sbc-wGuV*F(6|5b~knw9JwLYM9dBH)p*>K`$0vF{IF)1mGkRIGKxoSou7Xx@)v6 zXDB+|UDbxM4!{@_lLx>gk5wHQ9e|q5xL+MHuzx?dfx8BCfZe zWn-ZdH1dh68%ivJ>dLo7?*B<<3{QExDmQJxxJ zZWXD$KVghvxu35sB_EK$2_JTZ-x(tYf#o&xuGJrkn5*3y`vw`ESh{suqAIlfUsHSl zjWnR?T4ReoQ%5;VHiqv%gLZPe8t;_JTN+zSLm{rPN{@r3l z4}Q6eZi@MS{ZF&~vnLcF+~cl)I`W+gfD)qJpF`LuPd>@sq`>j^c*mBHinqX@h_Cz?^6hH7p9MyZ}XGx#o_tuy_?Jmw*_Kk1_ z>rQ`ym8G-89i#C*oU_2OS(w80HE@OObunKnAJ4h0Wi*s}wmjdAugTw zmtg}*d>sxW>%2ytiz(q~woU9XdLnM}Sy-aQzf?>sG07iD&Tq zbJ&RZ!LS;yer4tPDmoeBUOp)32H(=}LzakSQnkI37r!{;3lf8#y9RxlsP8U5ax1Nx zuiHWa9Tw4i`r^a=mE(3LC1qV!xeal~_WT{Ls|8v}-3pDox4YO3S4}&ZEsDm4JoQiK z1dbCIV|UCn4TtRjnUOa|A@1jwunc1S(}3cQ8kR2WQeVQ|=S}!fG@s`COsMimQR4f2 zW<)%A_(I?(`Y={-Q?NY2{srRJ@84)8Z5GLte=UwNNVm7Yu6y)4EHR)SauOrrd31j* z5Kpk|s5=Awm}Z1~Cz^5(_BwmZ!*g^vyj|x~_gVv9TUF_b2Ct>XII$!?{lRf%ttwM@ zk}T&zls9``eGaMLc}qkPrsOD?TPcMXO(}^ioS4zj(u3K+$7plAATHg+C>7J{%2vV3 zdZCA8RO_xLaiWWb4O`_Gj^(Fm>v`)QmhT%C&cBR$Z5`jmoFNkT&MMs1h!(gLdRbTL zlrLk#zj}-}y8v%!Ul48?(;9(~aBzC4jO~vgj?&f_Q_Pta=;X0Fqj?rF8@;~H+?;ZBe8!v2#PhyvX=IXAG?;p)G4`^%iK`S_?&HLaR@l4nt10rT_yP0)A=$KOYw+Y!MeF?h*e<`YHn)p5n|J1~=h*HE z1oS34Mh81NJ%|D;EQq7E<>C6Q)+E1hN?|FxsMFlB|HQT%vN6{2lHCy9vEkTuPomP+ zuudY_cl~&T$*qSI;-S4$L6lI2cKTD$5gpU)SZ z@5M>FG1{OI8Az(#ghaPhtW%m6>?{gcKOShzU)lsrQ#tdN+DJ5=guHGEw%txzk|^&p z;cspxp^f29SA3_F8Co@-8BBm!rXVt?wd*6por&f+qmxnPQbYt2!bRc?`n zT(#imv$~fmgDD&T4{z`N4%henff8kinh+&=v`C2FnNflyS`rBnWr!ZV*C9xPL?=Y_ zAR>b3QOAVnjNTcdjXL@$Q||Hpe4pn&&;0|gU)YX0c3Efbwa9Irja!rec|0Kk2E@v$vH62jH%+bJvKQUWb{^!6!Etj{`yHaba{j zafD*b{fYEq=s``zjT;3}?jzYwMc3S|PMFbAaPND<#zJ-Ok6Asdm z^1?&13uCa_&J|coQ)%@bF7%P9ZOeW<_ioV9J0h3>9tyW`ZWgC{_NmB$cwrYfw3}g? zL&&Fdjz`Fd6^JWiZz)d}DRCG!RfSo(Vm)b9r%JJTccw{?-@ENhH3W-cDaeQ|X!Itg z2$dg6X%agEW8j~S2;S3Fv4G}>(gyvS>*=UmfPr)y4*h>wgw8tWK04}TTK~~UKL%Fd z`6wl$m1uTsX<|=o;nZQ>dp@adaB{_={dJwzmv|@leuiOBP1s`xwC8TAn|vu;TvEhh zi?V4kx0oBPj0e$rBX^9KTfdRm(QqJ^>%;sVnl@5gF+8J{xfXdl!{xB_mopHHW4@i} z+{kiWePl_HkZTNsF3*Rb;yGGB)ld%~9)?htFNwE`Eq|4R@=-lz>78K|ufmTy6P5wd}2f=cg`;v}`WjMH=1U(F6-DBf}Xh^uFg^KHhi%4Te* z7UeoG<8D=mqB$2VW=fhiHDA>}nBG4-+pHE>UOl;>C6xL@ZL*iFB1_$h5_ zWZn0&3JOw~J0FJY<*{X$%4r=n4?O5%Khqh;lS{~jzPRoR6$9kVZ=9ygCc~=ezd?OPbgj!=w_i2WNjy?}t1O@S= zlqjwpUY!Z_Qi3-&;>JL(iA$THSvJ#&JRk&<8Z=1$X?hqj*BodF=^+3yV^CJ7qW4-= z2;oc&e|-u-UYFX#NU$x(6H#8rGyXt~Tk3T*<#4lk^jF9?*vfb6gF_@y69^j1pvSM) zCgASAP36baq#r?bpTUl7M&M zA{8#PCPkcQeHSdE=Bqvas~pqy7?_~mi`iE1Ni(m%;~-3d9(d_G`EA1(>FtnDaY3zq zJHhPF6-{$ohqdhoOt)uNmCxpS22G}~eo&@TC&lv0Uwsq$XL13I-=;CGKG8ZG^)9nL z?cVp=0Ny@sjF_C8LmWxQ*gOA&0DpCMU&)nl`W6gz_9ZW=IAm@0@%7jJL7_=GJ>a)_VD2%n>GPCK_9~Vbii$cKu7AWKeuL+tbX*G@|k@QxI z+%hb-ljR3U9eUHfFjGNC^oUX5971G=jrUek{lbZkq4RvN@kq2W{&Y7pv;D zjr!(I#Swuc%WIC&`aAFAC&aa`-2HE77^$bIP{%kO{P`HX@_y6|o#Q%-4P4IG zWhgE!Z<6%Xg?j;*{@9C?fl*V1H&f(C%hL(vJxL7UG}?7?^^lPLzlP73t^f9l-HEJN zZ}9J}QwGfZHUhJBj;`8}T1fceYSfNZ+7yG&K2467^EN?Qz@2+B)z7Ey_5z7Y z@=x=VlM26dzzW5%NCsujP)uyRdzLSF&jYbhomozQN5{~ZU1ho@G}1C}00HFab|>xL zH{(y9aA8BP`E>Tb3$IspP1=m;*DR;2ESowDq%rzS71lHP5t-BRK38d$QEuT#)g^i$0J(0Kpk z#$EYw-qf#j3lFp5C+AHwt>}%~Ez9JzL58hyhs0{rsaf%wtjN1}N_%pCsAFQ7SjXhm zAUrAo8o8hn9o3PODe187bL{?tYA|Zpnaxl)-E|18C9#AJ?(8V+@xGD{xtpS~^k)2%s?%xT9MOf|BoZt0-7H0Tart}Aj3^(P!pjfng1s_c>FtpCO6NB=`mckWs zJ(KI;7*?`Q*`59t_ZHtHLZQWn&}oyM*kBYePsd#96SA251~{pmYBx~^4oL%i@_Kd{ zY(IH2YI-y^<{`>0zmJlRd$sqhES|w-0mu@JuZck$Ox@-QrpHVBOzWTauq#+xcDY^4 zxPx}+u3a-D=y`n3zcaORg9UG}hxHSu@c`;8-H55etZu^D+3XLDLaXhDk{D0uX%i;L z7)DS#u?12qv76#JIa}x+?oQmikbXvi)X;kjoH(rMOZh9NLyz@%+JD@nbF#ex-~TtE znF)3MRpJ(ZAE!Pq=wJly)MZpG?rg4}bqv^NEf+c}ILp9c8PEqGsb{hv!Yq9SeL5+ss8jFU;|fL+qJGiV_xMT=0CR`y*OHW z3z>FwW^I=FCKEkBecX5A32Ccm;2fu}+r)>aRI5^^m>K}3;p@>WrbQ5p{a@Rc~!$c_ba77`})?C z1;fY_*u}!A=-USG^pa}LNDcZGMF&ukPU2NlvWqUaEwD1OUnP!^4#$aSD8X7OX@14* znD6z;(grb$X@A;cQT|KDABsO$mH%$9;P4|-Nprc=kU?~BwU6ZXtA+4GN>6nO8m1Vd z$Q0#acE}a7Ebml4Q;x#gO=h^^PR0eB-VXab%^P0bNLHom%2ebpz42Wl+B2U~ ztoIh49KGAqMXle)C=6vF5k3dnA873(7s$*e<#?7`p@P zZ?jdI)V1UrkmHw&(y_1cQhujR zuCriOLfw{olO@b-OTMaKoiBvk@Wb}B_k-C;Kjo0qpLG!YXHSM<#LwADC{dr9?E&or z`RHzd?b917FVui^4}L)AL;NPDyn0C}Q}jUpj^`OX3yQEh`0O2V*0^vJ%h8qY%(i@i z4a;jxk9k{fKExx?L%Q*1;jbcMNkeDUgs=FUJ~XdGNy)m_JCthXITT=agi|+if$YZ6 z50ygCa-DUa8$9#sC0_X!y4}`NS}@8qCUQ;$$XG=ncFo;ve+*7bnsumQio>NRt3h{s z{~?3KP=2cjKWPqx%)hJ0AY)hy%{!A+d4>S3`%KeSW2W4WWYlL8tqV$R*I)YFP*NV~ z>9M6i+{E13dG-xY=9TGhrKzl>y0@ARM{lp+Ul&+@Hp(((=JMJ#qhu491(uJ2a7=J;-7 zix@7RPfB;8aG{cJO)S-;^z~Vs(!C_F9j|5bpr<+(T25xH$89QFLSNVwtDKb56#0X*B;DO0l9t|ZL9tZcH9&ao9*5ou#N@spxye) z^<}26{H8=}>~7=?!!OeALFGyJsc+tqUL#!PMDltcL;t%B$8h8bc`3a;FEpr6v^JZa?6R5;KE7r_5cJHeV$6SC{$NC#)|rE^g;P z%K;!kgFhtuI=#eF>9ap#FJJt(hte4Un;G5W_UXpkN39CQOi`Q-ykL(`^e+%Sr%};a zqtWMzMpDg_2z%GxdD!npQ;)0^bwE{X7Z{?x!S6PExU}f6PK7wz+hS&|PfYD-uU;jK za>C|BR!vhpJY@Yj=ATHdX&NBcM;UQ7q?x4t1)29I@m>0fV_*_#S9XmBGrp(~y3sEb zuKZK3mrIbi<4;WFA0&Atb1;9(d%J`0ehlB;c*y(k*tksj-I7WNAp*+y()qd|?!`BVyi|%-`j(&awojR%X*lk(PNWnqt)3r=^ zA5hfj8fX5Hgj*s@A`iJ(A#RyXVw6-}!=u@4zV9XSwi2gXgq3|7K$u-!aVzNuR~I#l zf6w6BOu^a|q8->I+eB%+mVXaq!ZlXyP5-GC4^ew~7~3N)e^>W-3K`SP0JO_&L?xOh7|G3P1kY=(VfqIe8X&4%1{^pH$N32lL8#{f4 zU>er)iBRNelx>?SuXN&K0yw<2*<(ppkU63hBU9^sqz4scEt6gNkC{Pn;r-8)%IF1uYWH7RJ{M{C~E!pVRr)Iy;VeW zwyJ-Oy{@a5x@46!Jv(%2KCe@yEnL&DQ&D6kR=?Bdbx@kpFUFH2kc;$WN?F9N4mWht z8j~^pEvx&WuKIcZeRvftx6buLFiRoiExQ4~bgsg5GgH%*jJJ@ybJPa6kH~qv50RG( zJd@n|cZF`JGgd&UNBFyUrHEdk>gl++ zFW4cAP`S?)bcIWYqdF_bG_+H41xZzmMPpUGyW-_#^Y{ZeAlC2Wp+{?dvz8{ahD6~v z0%j@OyC!pn{Y5uJ^Pz>Bo*c;?tHMC{ zjdw6QA;#D7;@!uI+YQ>8RVJWdXbiKWZJ`x&kN0be&%1yyus{4(o4qi z2t+4W!2je1{nZ}b`LJL46Y&=AiVei3!IxE`Hv&IkDk|?=ekPU}Ao%NdWtRr?nW@Nm zl|4MZL#UV*)E|K(=SF=4<4iNn>cAGE0{P z6|VYjOf=o$e|N!4GTC@AVqExILLgrKjkPE=QD0um3m&1YEuz4a3$Ycsnk z`#4=EPeG(FG2cdpq(gzCggj6V0lNCJzjp45`~3HbC~3=nrDfVD^vr^kNnq;0b~d(6 zTgdtqinPUHc~ViZEe~>ki)NkGPUqWAFB@h)MW4X8TO5hEYZR-g`(Ixt0XdzjHq8D$ z_&K764C6r{Jtk2vywuNlEuVCBt3lLbDl9J|>J&?Q`d3Cw(ACfe61ME{rS|XF+5X)> zNSE84b^qQ=H68eu!dJn#nM@<5DwbPQ`?I`3gv;S36+c2#xxl;oA40^&KF#K6{@q}S zPSny0MU=IL4=3J&_tYt-@(BlWb~5Rr;y4?seN}rMDs78hZtQ*7DU1Lv0qDqOmv! zTsQ@d$!m|qZ6B^WE{%YV1G+)=xt&dy(izrsZc`Ekc#XPkU;%ZnHmv&Dn-iNg?xtSJ z6Cu8~$bMcD?a-=eG*jZM)bvop#Nuh=^0~Q>#E7^(Y)U?ykwhbPh$le2is{7?&ownB z@{3T~>QnEvd(>kU`{D8L^z!j9ZoVUS2JYHPd3shAh*$mW%et+vx1WoB54J@zTpOBu4qE(MrI(UOV&~je!yAnj@32EYP zN?_1xGt68DjRHmd;7^5}G8P4Y^E;=wy*&te zB|>u`v8JmWg#WzglQDXsr*IuDeeI)LBzev%PE%?;#+}!DhCTN?5tD1-3!n5LIu39ATxQJJc-eYWPr0qE)O{JM1NAwKB7@7LA zTDASCuKMsWC85HI(At4tJbJbs+&l@-L5X!})j?|$G((5tY0nX8GaXyi%rUEGLE(Cc zHfxSN&>Shi{0g@G*88#{c-NOv=cjrA~IWD%2dgA^Qym zBvtow{TZDHa+;pS+zNZD0-PcN-ivL8=1|X*1zM^s3Cb(Bbch|EoWMavwNHa3XXCo_ z{)0(6u`3(e$&Bi7JU%z;&+i|$bk$~s!YQyw{`(YayGv(6e z5~clll8ynz-zFNo)$R6%hPy2nRV$jpKXTr_&B^ruWdE{9hIch<+KE}lYx$JvsLm5h z+`?Tk0-I_4O_I#YUN~vg|>dez)$y>%ip#nR$R`ca(AWWh*b2Sa0O81NF_T z>=BXAUPj*u(`J9qK@ns0fmRgS_IOn>a?jA9v&Tr4k|Qdk?!5qze2gRQ%^|$?{sp@L z3uAd?+KyvxWQAlAQ3?$is~sCfwCZ;t7H+GtqVyaaX%bug2P2_l{&$6yd$at$8a#93 z409lvGFr_g9{WF1`6qgPu~M7?PnyBL%xE79+gI6)Vt27UO0Qj1`Nx}hZBHDIkG%IB zL2{VGJKL=E2LL0_Hp+d4Xnw!mR*>LP~6X>{29Car=k3rPa zbB>F)!U@Na=Mc5-u;X!*3_t07y!XePHp(F$N1G}V(_4QP5G4X)oOtyUmO+Q(xU)zS zo14Yt*K?(Y>pe+^2goRH~RfD&@ExZe(gVB+|@x5y@Yp#qGCz zk`eP{XOXJfQ3b5szu8soe<J53?S3*Z_~psg6H9>l~bX&QMC z*DftKHp$xt6d%~x{u-I#p@A9kJH0U_eC@Ifn>Y{ zelgqMuwk?meTqVAByM|$fby9O|gBv!uQOqMf8%GDN4f<$5`=erUw;)%|GI`*> z#gOnX=`m@rV4q1SvCCn8%G&8X;kmBztv*iXKM(eX(nJdsd^eNhVV%Oh^y>QGu4Yi2 znjbNgA0BguQrVpkq>H&h@qXaBKEE5A_-7;fFz6b~*NIw$%S< zR_25cP%vyNkUhCK1^b*ll^~!+=HA<3dkdEO=0=1uby})Vw%S4+KJFs)$2w+6emG<5 zUWn~B^4k{c!&4|gZxv?^@j6+DGsm>KT z=v!$3kb}8zLkbxWPuRLV@f?&rb&D*wQDD%{iLZmgwHVx*!h`>fI?jJy3iXfzmkLnt z=o`z}vfwfG27YN`uW0tgBgTTe2M+g_Z-dCW!PErmyMocC8>NY2ry8+ls7Zb>LKqk4 z94thLadsH6{0hEFfE3b)woYUK6ww4oLbhfCudo1*Ep)O9JOe_z$AXR+g7`%m)`SMs zZvk}9PjMrWu=fMS;g05%BnZ~~w9=I>Y~7Sk6WRJ7{}WwePV`hiXX)oLxb;5VrwpKV z4zUl5XB~d5&fVCxp`QHkJahcvs}y18TNs-%xoR?60ZIXpEb_&l?3n4hpY;`zI0SXB zDw--OsP)S*hNKwi?DdMyzAP5t&GvYo6g5qM#g3NcQ4Yxo02@LP|J{G56hTY!fIdr` zQ_23yLkGJ>N%U`qRYa}mvb7Z=QOc~@X5H)yAy$h1HSgox#B19L9gQ!p+>;WyeV3Fi zgI%J9O*{H-EZ4!%Ne$niR5kl{#UJgd8jemL8^z$kSAxM3v4VrQcZ0^wG8F^5Z-4UN zZC>?4XQvztE*Z@*eCCUo%cCX#j6?2sOX<*b8{}Tphg}eTgs4HB|LFd9(qg|2D9ftZ z7(Ko6I6@7OHHUpg0b!>+xt^$U+e4w}DC9zZoMa-o7rA>Z#YxR8(fns9fP{8~ACt$O zq1ZL_I4y70zVrA}d8d&jTXMjKLi(}G?}pK1*L5Dg zQ1C@RI9G*z_(^g_@m#TvqL@WEMaHd)53S4i4xOGy6+(iDARwmOa;#<(b9vwMMix;W z1xx8qL9UoZFKa&jCpLX%oX%hIqQP`^>7&1bG#X?ZS=iOORP&18l=9uE=Hq^tXwR+S z7$s{AnGpEbU0b|I1twNIP5EXX{x*$(lI#6IPlZacLRTAyZ+h9KrV4tykF{qwqBt!Q zVz-gn9Qho9EREr?jw#*Mv5k*kN_v~vX1D#@y~L!>hhh>*jzqSj;NsWf*IV%z=a=#s z@#;PFXspXW4F$;qUe{Jesz4_*UnToZaMvD zS$k-^GQ^@M$E!?Q8tVD|SL6xnHW#~MtO-tCYQFotEgcA9(M7-I3d{IDWGo^kmbzR} z``=E)H)E;EXSh)@m49O8?P#A80JIOVa5a$g&m=q+G7f`J$GvO#!7RErdVV@2FwW$* zR(Y+m9Jg;&ko(%^xK91jj|{H5XWFY2hVZH-O`LHtNlY>ODZoddODQ^it9SL4JMZb# zYc=77Yu$h`d|Y;?=^yS>Tk44<~^Z z#+niRWQZE*zkFDah|LE{R0UCD{4n-zmG}3%F8l|toJD9>Kpn!{fvA4*3YXt_xY3w|7l-2vkB9k8g0Sp`Ft*vZ zFkx+e{syljfdQen0X8^(h7`8b@*}!)rQ?S6TK^hANsFjSu5Niv$m=Lu-g1D+%5K73+I>+&SKBn6)G-kVm* zfisITvYfH#`)F$Jr)M6@KZbm!si1Bdr+aHJ$j3(R=f~zGOD#>fD<#tsR|Eg=?IVYP@uu1weA?qkh|N z@$1||I!7!39(3B25(N(`!!l0VAM=r!swxN-N_{0aHP)H8YNk#N5GrJ>HUU>BG{*|3 zz4f4dr`xjK2#12YzMC-fA^%W0ZN7Ty(GPY7|7E|`x$lgf<m7frO?qRumwWGN4 zQt0D<^y?I`2b65=VX-&d*&qA629M;IK;lPF7z>a1XL2s6Llq5(H0RED2(h99l;_mh z`X8F>pIF6HavnKvQoyp&y&9w-azC_Z?%QHI&+d&}v|#iDsX;Vq+*MI7gYbr~UEQAc6z?~GZjySW=64dH zQO~X9^ORb=m*mBjJ_3{Ib8A0&^s301t0{xa+0u_X9gGpCabx>qQ|ZZYJBv+}=~sh{ z{rxH3hr%8UCuvqjJc;L15@ppU&63$`yR)q@_>94d!vY@(UzUJLaz$kCQucM&r&VIw^}m|{42?Gt+?Sa z%a+FOU+!($LGR44nEl}vIC9ECK801y@g}q&lZCf_2h0O+ZmC<{jA|eRdK=WCKloY8 zUqU>2aV*V>!`BtvXR{QM_pk;9t@ zA-NoRadlq0GQUHndR?>y+M0Ksfi)MBe0DOa3T5~cc~I%8bWYpSDWJ4t0Lz1CH1k?@ z4f2zPiUcM532%K2I-2p#>HTZlsVnXY1=Vt$;!m%Mx75`4BJIvtz|x__S6Hx6QY5F1 z3Ws94a-fsVwvy?_7-)w=M2E*Vg2Jp{Qb=iky)q_oR$OWR0e){>M(*3-pvcJnKMV)u z1KT%@I_Z4M7vFCw>n5H3RH~AGsA13G+r#>EZ$C0EyNc1!#64K33caj1mzTZ~#pq_< zw<1SpJj%s1|`6w=Lx5`%KkqtF~3M~?mim321ODIDhHm|ig zDB!e}H@upjbiHrK;W00(Z4_#4ED2>ySUj4IJ8aEAS^XM{JBe*Zx*H)M?%A%)MXsy< zmV59xezWRgM<@GK>U3JB)jYND?pC{RyDYAJ_t%Bg+1r73ui&nn_jAo#`Eqb^e%PUU zX8pJz<@oIGQWe_V7>ZEoOAR~{!6Nmp}KKoy@&VXHmmQ(uj(sAFG?!ErimZFr;IN+hdl?Y-_PEVb!{e=P8tp6iSsv2g!f`# zWymciYNZ0SxYj-{8wAj8()cr>!sDnVY&r-WFC2WF@tO$U6m<0JimFqsnsmIluu(!d zU)-6lb;;Qt@7uygMQ#2(hmFrvZ-P}%JmA<_aCb%2IK{auFtR6oF$|Pj7|~55GT&_e_jKd z`J(10NjU+~Vy?rXO7_M@*c?wFbm+TC6J{Blm@W0x-tc`_-)=h5dK!cB4>SD%Il*6q zOt)YIkC{y;c-0y<5BzbVF9f4b^ebG(XL~Umgn$ya>Z8WjzTc3g16>spJYOF9Etmw) zLbkWYXHK#b5(_4jKK`xI{^%2OyVwNiYgQ6$8sxP4z#BUNuT6D#XdQ4Mw3Ly2 z0H^AI*Z$X3`Cs!7Koq>ZdjJ2Lfa1?()BOMMKL(1421tmOF(uz{o%uEvq{6q4*zfjE zLQ1pIQflgVkRehMKi?^v5!gU&c7?#)l~BMib7=Q9_Qt-=iljKuaGwzA06_X<`B!fj zAEwkCasCIK-GMx7^ttQbB~_?DYunS^n|`oBR+Ou}kZ+S=bW*a3js(iCY{*-EPQ~8L zLw@I`1^!uNzR;`eMFavV?jo-FK0av<=l2?P+psCwV5A7J7y%mbIeMbx_oCA_?( zQ~(StO<8ioJ~ejWwko_o$PEkQ6Yj4ZkH4v2sPg?<<2XLSmw!joq5GGl*A9T`B;e9N z0C=n8(@cXd)NfBifaY|Iha3OQ^-a<_(EmNh``L>zV~2*{57kTMVt!zAoip;_feud} zy}#6q0W?nm6g570y3!kNzvBa7!7o9FJ0y)^fKrpJR0uF#h{sHTJo4iqUPZCxq`iud z%{&pshA4#B@|x<#LP5oK1%Snq3c&Yz@;*EIvnDb#`##oi0IIY}c^+^!1ZGzXBpx`bUF0o2L)ZzO@SYL}djGP_;O91IP#f7?V<} z%xZ^k<(e%K@<%k@kL$VPd`yo&+p~mVy5zIm5Y%NbR?r ziul4*&_gLY>pFf*Y{r>0b#QVMa-r0otsXPXp4d&OBlG`*uxFrTPG)H z6k(r*y*J!5Z#l{KK~L%5AY5R=1jJiwOsI1JESORkMBgE(XC*Ln=?=S0K&n0NQWqlb z3S}E-=;aK^05s^uW{29oOXZQ?5gOkuoFMC3Z{nv&=Q)P%sSIWJ4BRpgvBG{WvGQyo z*x^%igU3?*CDAMN;=;l9>>%#Tct*C_Z2&AP3h2y~Pb=GW8dUngF7JH>kb^;3rW%T* zzsv1U`@8PE89aWrdx|rXF2uLR2f=LF_eOi#nqe2L)799-O9=6$BsCc*4v;HpHQ@ov zs+yIXpJ@Xp)2;GAogM;;xNo|Cn2;zw4^s^Mn;=?@0H*z`+Fp%Q%AKM}C1g%%h09_@LA5HodTbk_m$ z-AHRqCM8wm9qrzxC_`ob{enyOV^8;Bed>QhAqS=jpsC#g#DCMu!YnL4=2QTpO?Eqz zx&loWp>gaMxr+@!$I8B&qf%b09|5f;13+XOfZ@q-5eMWUiL+3`EuP$_djN{R%5nH6 zJ0>C=fP8kFK=JyGX~)C(z*~I|mun4j6h*Y}7aq}O1iyOkLXd6^6+0(@>u`3pvGbBI zXM|L6qPdHT7sImIpYedii}7X3<6&?#o@o#c0aCZkVJrM+eNaNWUM3iN&cOCN3fIUSn=a{AndxNv?Y_*!+ao)XGaw99#*Y<-g%gThuNvZho zt5I7if3TN!o>m|ECCX@UZV*5>jGkFz%r=g1jFfmYoZ)$LM~lo7Rrv1;JDnKXvR}H! z#r#TgLycJ(5m9I1kKkGRug8LrEK+*#`RP2qpx^W_W|IIB9};kg+NPZEmXXa zd@(U+D(VdXQGy}uGFdRcJuiHe`1b9LbO2CD{YT?PE^*ag%5%i!__$|?Qx-rMWy=9d z3!*@6yySf*d-Mqnz=-_BE}fh1B+cUJS6tr^I=?D&=}4IYAt~#WFWF)ZMehJjpgd!b z_#*S975X=e8Oh z^?KyI8T3wh@U8ob9Bn8&Zve0RAb=fa5*|oKf}6ygCt7d6`^zQc>^*%DS7p5{C%D(Z zGOIR05OARB-ktvK)YM6ngp>n1+TI?06+!lRp?~|&!6c=sNz^6hYq-V#@j@VlVB;ix zZ?24i+&^;w2(ENWz~k&v27nV=A_G`K7+Aa#moSawBG;Rjy<-GqGILW-9kVOG{~ZQ} zQZn>aoNTM!1`tH)p=9sx#3ay70jh7i?VYlT=ZuN~BXN>Wo`GBCUcnvV=>yUK`42#e z^kL3IMgDqe0gDDoT+{1y+9f(N5Yr-kFxXUlqgK08>xYOU2@gQ)!m5lY5KL{t);;Pvgm`1(b7N{}z5FHY~Pd(r50E`gW!~yMOnJbU> z3hg$co_Lng0g}FQ7o!m1UQ{fV zYI~==X4U#%ce3q)`>Fr=Um$kv)w@N>%Mb2F1NBob_asF7|6Ktj6afFS*Y>|A>;IaJ zi2pSi{@3*Qzvi|7&mVK^?yaoUrxd2f-ju%_I3Hn=NyYWGV8C_3`n>zs2ZrT=Td$E8 zBZs$qud9?yCud~4lP3VqS%yg^c~O1e!S=?3m)Zt#9RCe7q5E+}v77^3tFJCO+f1~l z#I$zqKj#-fcFx(d@KtN}rV>nq3zoy^3 zr(fh}Qp@rdZtRFt^?&i&KMu6#kz!DbTs8ym$>D*nfTC=5Cmxtyt7!Q`)h~5$r81z*2m|uQ0xbWd??ZIV0 z$1iM4uBS0nUQnzr6%LHBgFU2$&NMgci-m9l(2u&94W)uUg7ddaPs`W(WgZ{fds|GEoKmHhPkN}Ap#3m&feP<#SahhIR z=K$89lf)uBE3G8B%x*m>*adtIK_!0{M!JfetUao@+&Et`p`Ab{R&NR`fC1N* zy%gTizEC_9OwNXyA6`B%R?+O=bNtS~n3^B?!+csRuuLf%_S9ERZ?>&ohC;xAZnbBjjblPJ7`6bQmy!`v2 z7SSQC|8<@wDTo75!o9S1psSbnxcsI9NKaf&@BjNd#`XW1(Es}@zQHH%5jvAWiZza( z0Dz+4<+j3SpLD9`KKT`yOHOD}DP6lV#Py!Lj+amMdp0dM>tOtx>+7KSo8jjQ_|{0kFvLtlq$YhXJKZ5O zG-}$QW#H~0i*|l#j#AUX9*I(t^^(YH@0_g-60(r{g{DDYqKVEPo{?zaKQL*uQiV5*_qI zqiE+NKete2e8_GJIs}R-E?oa!_5j(RQpo&YEWkGrUT)CW|0Gvc^)B@Ij0w;QP*xm# zTxhqp87aYgIf>B>dG&ljj|mCa=lL%4>8GPvJ2Wb77%f z#^B}DD!kJfADk3kT85a}IJiK!^PA%3No7do4Opi_XETVw6*$a2tEK+m({$Lz52!-#q=JLx z?=LuBF2X5U@ZMs7y}^T$e2m#I)XVUqjmyz_UkPf_(#0@sjw9~hgUz?8vPepiK{ zY8M(Y^fj|A%+i-%>7N@qM5i@AX4v(xyogP+t?W;B$!MCF&>xldw%(1rAVlH+H5F8) ze#&_M=>=nD*y+z7S9_zGOhMrFEEtZgT}0ykKbNZ!ypBLcO;&1K-odgSjl;JhP6qbLEnq^46Ha+ghZA{_Tm%d#@5{A?8P9|b=u7-vwHvL z+XHPza>OUz3ZJya4GSK56vTXEE9WAZ+qu5vsMdm!+u)`yl%(a@;!9s_TJRgz>SJK^Mn@pNlh4l=ycWr-OBF_PS$i#3UzNt2c z1dmSwUC|A!DRND#Q?CBWNUr|t22f?zHmyg*^azo$<%93EY0Tdn*2#TpbEq&Vs!v1L zj)J+$n@iv0`(%*Se1EcH`HLZXt*qGR9AC=Jl{uHKj;-5GEB}bPIOiPQ={~J@nMWc$ z4%du=Fk?5q$OOueJozCGTeus^@v)RElyu3gf3dVrP-?2BUXwKz|s(TBiF-ryDYdbY=l z`Vjx{YxTO@NbOd_Zv%i4`J|k9^T1O#@D()BCG5gw*3D^lYq4SFnNmfn)|9_RU=EjZ!ei?vg6lmLS~tu)3msM}Pt^&iA(?nU>-CYO=R?(F zn7PB?ToF*%G9w46HC+#|ux6^)Pv2mj&N5;#sAka(45vCH`64qS@@i?5=4plw#iUEqK|LaXUvr@UUYK}+PZ+psc+ z-^iNSh2!cE{YT3Jb?XW*{LTBUmMRAz5;Ye$!OaYdLGNj=g)Mt~W+kAuxNSHY6pxQK z?!F|R_!S|%(n1e2iFtn?X~$_(*xmrQKW@Mtoh;|dyMgm}lf>*&C!67(eX*8G;fH zh$B_2m?1}b!$C9W&6l4Jmf@pF2oX3&d`b@Xw^Y)ehS<%hobR|3BZ2Cj3P>*1i4^<6 zm-pfL0r;Vu%ssuspmy&@Uw56HxMfMj!nq+jeAdIbjQ0n05V|u67}RCcwB(NKkeh?_zI&7BasKRKl-MIh#n-V>re6S8 zp+K`@7=M*}#pYp8#-r?0)CL|~;mO6GT@DSygL?bKSMl$MGZ{}5K!E}WAuEBMz8=de z*Ds*!(*&Gyy!>D~U10IX{`=-*U+%eJ0o8c3ngA~R5|)^voLAo({059a(h2%Hwr}(A z>1p8Ox-2D_7GOC(7bn6;|Nde`#P}0lzc$^uOb3^yoi(Hfg(6FE*v>g`q1MBQ~$TleJYSeu1?pWQsrGTGa_H%MiN1us}(tf=( zbGCIV?xF}wGgK!#)KXp1B=m_BmuzP?P^Ap0h*|O78|O2)&A>%?0~}Wnvq0|l_@q4w zIYb~U4l0k)6Xm}PZCK+eDG5};^AJ~g&^*Mm$)nE90!5>_>UHuK?1CM)NX_eGmLKI# z`F-gS`=-!`XVla(-fJ3-!C3EA@7BV=!*p-^Xi7vB>+aqeG6$w>cjH)9Q_7Qvt;Kt9 z2!u0*bIYccTf(|qdL12o;xh*++KO`tZP)lkBm!E`gPX#_J(Ib|Qyg21wT}eB-u9EVt|H%nnzsKFCLGNrGsG{0q zw039m^sZLd57m-H$?h%8!bQY4gG^+g>cM>AVcOkQq_yJs~fxY;xy#)Kx~qQbtt zE%ad#==Lsk{<6{g>Ee}+#?ZHwme*6jKMFhfj)%8lcYmC0`BYOfFIqYdXQP_9B?l2rB8AZp)K2FAx1 z*xa=pc&M{zAII2Im;PsUPihf!<8gVPgF`E!KbX)njEv`j%bg0x#UR*2C;f!Q4B236 z)i8qc;6)q-vT2t7K$VRq2X=v4KA`Xt))C9qym1{AkC5H#2Zgn;r-qqV_{}B1 zQgN+4$X)Id_b{z=CyH=ezdblC8+Myx_u3y(E#f@ab_&}rT1@N?MP>3*op(4zfY?zy zgguC&rUqqnzv$Bvwt|sn2h794&%;z|g00``-f>U_f7(e1ylC9rDbudfx}hQtCFDeP zAakly8(GS~rPV#0iwxd4P`&3UF<14X=M5i}fLkX<4Q4gu+YWmFZd321vw?e#a-Tm@ zWKl)z$2f(Ap`Tbb?ONQ+qh+sE-{ZB>!bo3bcyU&sgY+bgr0f~A=yIGnqBt5T4a<+? z@HbMorcix;lL1{hC@xxDb)a-kxPXs*sl|+JPk%HG@)a}x>ty@I4cIXwv`EU z6;Nk|>T5k}TD>m~KCt@tVUZMZb3FHSj+)8AGe4{%9{SseuNJIq%>9*%&o> z!ON#Fu|oXz)VQYBaBYJY-Tj8~&+TW?Wvjia8YKAr1mefshnEpndB=2wLv!+aK6gC* z2#QDu^U&E*pjdHAzc*j7A>H`>SqV)Tc0P9_`e~SDc`8MsAjW0xFTe4<+g-do*>Eet z^-pN>_nfB1D;3CGqDD%p67K(@?k(e@?AEq%8l*u$awvmTkcOdCLb_9tRJw*1kdPWs z8l{F(N&c4tCh{Exj>0~3oLoY(o)&$q{t z=vH5R;!=-cv}kCt<=L((ch$>Tk$u(TMQmswD#-`is-D|fAje7xYa9e^$T43lW>xaP z3r-cwIqdCclDyOWmRHBE^VOzq_=@#u|60T@9;cO5r&iH;mdB3`chaOo1PIL{n z_1w8GlAah>%NG*%RdI^l@{a2CFI~d2zN_l>${8d`HTN|=% zg0V$IU;QXXWLtKM^?GFGta%f{K_{NO?R;5PNIprggT@PddCDl<0ct3edDfT~+P%%@ z#AcBM&yn5!z7-Y+q?^O&2bmU7-c++p|8uch>h zIV%l=4XP{H(g<-v>ALRdT$!`91va_G(}RYKgup=Eok~5P4M!TABWXMe88KnLELjI| ze)&Gd#XdpTY1o^tQZ_|~(eyd_Pp3Q2-AvGO7Ww_AZ|#NN)@#iZOI1eJY>)3y90$;+ z#wJqi6UYYbKO2;n2=o3R-Ax3Mr?f~w;c4p;1RtJRo7e|=ujr>y(=R0kK{z1ySvl!0 z)@9FQRp;5Ny1aQudm4CrY~w>T2m2lFj1Ehrp063Z=^AJj)KtjzT(%XrR<#W6?7wOD zHbCg?r`tvL-o?O<(CSL=d4eLlT&GPT34C!j@Y$Y?_w~FzdFi}mZ0 zsyMYsog#g^W`b`V`%k4V2!yYmY@aLi88;)QR+I)Vbc^%!VOb-^CY5#E?v{1BLu>JY zS+{*|rfW~U`@}a4j<(;emOV#TS@>$btbe>Ub@oCkUu!lMlsWo%6u0{`8Xu6iNA+(d zh^g)n<;10L`5OP|m@w#2050$e?@mR*a$(J( zxOjF%#%^T(nQ=1qVmPMJZ(AcEeP!o7&ti|dMWQ!>>Gn1c12mvauw{L3FmyTG zacs*LdX+V^#wngqp7Ke4J2F+5VU{m?89J?BcVB!a@s@E8yNgb>Y6v-Z=mpZN z@`0_=ja@5E62*-tE4M6*kD5fVJW|Unj=i-*tT#~_UM(My@EuX`*Mik z$D8Bz4uf~L9OV%B`pL%SQ)=m{HAIIsipLwLABb<(4k6nQ3l=Y!M7Ij2PWA5QHq6cp zpyHFsR~_Zx6~ArssSy6)q3mhu-a{h#_(kNX{^C7w4(ZA%bG3`kE&H{dMOy32`Utjb zLmsgLKV6_pbYq_cDWz9+B5mX$JUGo%LN^y`RhrTISJ!3u=A5fIgF&dV;^mGjxh@}7-jL=o<9@E`QNg1n& z`A`b+=2!^&nAO3B${1hF8I%viMF_E*QKHB;@u3&Pwkz+ZBUU3k#vLueX|ko|GPjG5LYGDlKC#c( z|Ek23rv#@5C*|kYoS&9ir^Nc)fP2fUz-LT9R?83B8Mr3jvxTvf%HGx__1m5}*PABq z34h2)0*TMKGuXf2U(R5PZvpUWX5-s-wn$vuME1hcm?}Nu%lqj2MBFO0EjkDHU|jGy z-7W0M$ZJSk(}?`T7$j;~qN3{s=ktrb+;g`ahj_UHu9!EybhmdWS%Ve2v@I4-!1jTJ z-c%9Bk5t-ao~Tdc=751>obLDO=Lkb9o@3@+xqShS1F{E=jO{bEm5Ewq$Nv9;W)LX?^Egy2}J z_jz;p?JQ|OZuqx5hCJQiG$wV#yxUY+IdP6GdX#T*sVs#6C){bCSy4cFEV21oo zZl<9c%R=!mh3t7k$?1Jr6_=Y9bx{#&h}-a$57PI4Tw!GF-V>}Lw8N4Vq7>Tt-jSY? zmD8tBd4AM&u^1Kh$LvseaJ{z9lC|*vphUnVha^6X_OkU}#(g1F?-c2K3sK-1teDovH9X!{lZaFBUH9dciXua-@LY%xxJ6OXDg`gs(o_Vdp2sysn@%?Bsv5F)as8vu70NEbL4= zD#F5v>p!7b2t`4hi~W-^6ZL$u$9X-JzdF~R_$t~Na%$s8yis)!P??>B2(nz!??E%K zPN`&L)n0-?g9dgYhgu&uhLtKzxF2k2B`SKaf4#w+O~?uN-Ilo<`U`dOX(wQ){sYZ} z7ZHO|Qy+Y!o32m*{6hd!Ovkg*KE$j1sN>h4t$aNS?0w2%uUO6Q$y-SgRqWj+9!~sy z*{03XF^C;o6WM}KoO?=3^m;4csHc^6dHQ^G`|arN6sk!q{3r70JOTOTL@H=$5Mmzw z0dJ)s+2gze4r4l4XlzwMTeR*9cB#sBgs%|u4u;KOPxX;4&9v$8>=0o^Kjav?T^y7D zSRp@}J=5gbPM&8g`@o<>?uFW0pNfB)AJ%Tre(e1$s$Gxn1pA^9H)cgLl;H(B`l66l z{n{1U5R1#-pB$cbBcdot2vY+VRyt?tzu+=F zIfWqn1#T1OK3y??f9i5`lCu5yIL`XWBt<#l^Mb^->J6-3#g8WKK3==(5(3vHB_LdO zM7`HFkExNIMB%(1X>;;t44i7;q>A^6r5*=S;4Ec6Tlv&kvRhp$yFKplL{)>sy3@O; zd_zH|sv?+pWvq0J(^}=m&C0O$Q=+ts%x9qmxY#v>$AMn!c$NC01$Bf;p<7eIDciJ& z`vM9y{sNVRuiTj71T6TJ7b^p^%gK`6>()H}5(@lzwq~0Tj)X)SG=)hJkD(B|Zzbxc zVYjjT&o<#QOP-&Ogxp!Vcy)@uo4V(M{%H*u6JX*jEkG=mDgdF%M1+PeR&^ zOD>P$?2mIqC=o=H(jmLtNqNS¨Kc3p!y^QIiP5ad)lLM0M!^Ja@kKDRbG2q?}mk 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

da!I# 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 deliveries, + boolean alreadyProcessed +) { + + public long deliveryCount() { + return deliveries.size(); + } +} diff --git a/src/main/java/com/backendsystemdesignlab/notification/notification/service/NotificationService.java b/src/main/java/com/backendsystemdesignlab/notification/notification/service/NotificationService.java index e73acea..52ed969 100644 --- a/src/main/java/com/backendsystemdesignlab/notification/notification/service/NotificationService.java +++ b/src/main/java/com/backendsystemdesignlab/notification/notification/service/NotificationService.java @@ -1,177 +1,85 @@ package com.backendsystemdesignlab.notification.notification.service; -import com.backendsystemdesignlab.notification.notification.domain.DeliveryStatus; -import com.backendsystemdesignlab.notification.notification.domain.Notification; -import com.backendsystemdesignlab.notification.notification.domain.NotificationDelivery; -import com.backendsystemdesignlab.notification.notification.dto.SendNotificationRequest; -import com.backendsystemdesignlab.notification.notification.dto.SendNotificationResponse; +import com.backendsystemdesignlab.notification.notification.domain.NotificationStatus; +import com.backendsystemdesignlab.notification.notification.dto.*; import com.backendsystemdesignlab.notification.notification.provider.EmailProvider; import com.backendsystemdesignlab.notification.notification.provider.ProviderResult; import com.backendsystemdesignlab.notification.notification.provider.PushProvider; import com.backendsystemdesignlab.notification.notification.provider.SmsProvider; -import com.backendsystemdesignlab.notification.notification.repository.NotificationDeliveryRepository; -import com.backendsystemdesignlab.notification.notification.repository.NotificationRepository; -import com.backendsystemdesignlab.notification.user.domain.NotificationChannel; -import com.backendsystemdesignlab.notification.user.domain.NotificationPreference; -import com.backendsystemdesignlab.notification.user.domain.User; -import com.backendsystemdesignlab.notification.user.domain.UserDevice; -import com.backendsystemdesignlab.notification.user.repository.NotificationPreferenceRepository; -import com.backendsystemdesignlab.notification.user.repository.UserDeviceRepository; -import com.backendsystemdesignlab.notification.user.repository.UserRepository; + import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; @Service @RequiredArgsConstructor public class NotificationService { - private final UserRepository userRepository; - private final UserDeviceRepository userDeviceRepository; - private final NotificationPreferenceRepository preferenceRepository; - private final NotificationRepository notificationRepository; - private final NotificationDeliveryRepository deliveryRepository; + private final NotificationTransactionService transactionService; + private final PushProvider pushProvider; private final SmsProvider smsProvider; private final EmailProvider emailProvider; - @Transactional public SendNotificationResponse send(SendNotificationRequest request) { - // 동일 eventId가 이미 처리된 경우 기존 결과 반환 - var existing = notificationRepository.findByEventId(request.eventId()); - - if (existing.isPresent()) { - Notification notification = existing.get(); + // DB 작업 + PreparedNotification prepared = transactionService.prepare(request); + // 이미 처리했던 eventId + if (prepared.alreadyProcessed()) { + long deliveryCount = transactionService.countDeliveries(prepared.notificationId()); return new SendNotificationResponse( - notification.getId(), - notification.getStatus(), - deliveryRepository.countByNotificationId(notification.getId()) + prepared.notificationId(), + prepared.status(), + deliveryCount ); } - User user = userRepository.findById(request.userId()) - .orElseThrow(() -> new IllegalArgumentException("사용자를 찾을 수 없습니다.")); - - Set enabledChannels = preferenceRepository.findAllByUserIdAndEnabledTrue(user.getId()) - .stream() - .map(NotificationPreference::getChannel) - .collect(Collectors.toSet()); - - Notification notification = notificationRepository.save(new Notification(request.eventId(), user)); - - List deliveries = new ArrayList<>(); - - for (NotificationChannel channel : request.channels()) { - - if (!enabledChannels.contains(channel)) { - continue; - } - - switch (channel) { - case PUSH -> createPushDeliveries( - user, - notification, - deliveries - ); - - case SMS -> createSmsDelivery( - user, - notification, - deliveries - ); - - case EMAIL -> createEmailDelivery( - user, - notification, - deliveries - ); - } - } - - deliveryRepository.saveAll(deliveries); - - notification.startProcessing(); + // Provider 호출 (DB 트랜잭션을 사용하지 않음) + List results = sendDeliveries(prepared.deliveries()); - sendDeliveries(deliveries); + // DB 작업 + transactionService.complete(prepared.notificationId(), results); - boolean allSucceeded = deliveries.stream() - .allMatch(delivery -> delivery.getStatus() == DeliveryStatus.SENT); - - if (allSucceeded) { - notification.complete(); - } else { - notification.fail(); - } + boolean allSucceeded = results.stream().allMatch(DeliveryResult::success); return new SendNotificationResponse( - notification.getId(), - notification.getStatus(), - deliveries.size() + prepared.notificationId(), + allSucceeded + ? NotificationStatus.COMPLETED + : NotificationStatus.FAILED, + prepared.deliveryCount() ); + } - private void sendDeliveries(List deliveries) { + private List sendDeliveries(List deliveries) { - for (NotificationDelivery delivery : deliveries) { - delivery.recordAttempt(); + List results = new ArrayList<>(); - ProviderResult result = switch (delivery.getChannel()) { - case PUSH -> pushProvider.send(delivery.getDestination()); - case SMS -> smsProvider.send(delivery.getDestination()); - case EMAIL -> emailProvider.send(delivery.getDestination()); - }; + for (DeliveryCommand delivery : deliveries) { + boolean success; - if (result.success()) { - delivery.markSent(); - } else { - delivery.markFailed(); + try { + ProviderResult result = + switch (delivery.channel()) { + case PUSH -> pushProvider.send(delivery.destination()); + case SMS -> smsProvider.send(delivery.destination()); + case EMAIL -> emailProvider.send(delivery.destination()); + }; + success = result.success(); + } catch (RuntimeException e) { + success = false; } - } - } - - private void createPushDeliveries(User user, Notification notification, List deliveries) { - List devices = userDeviceRepository.findAllByUserIdAndActiveTrue(user.getId()); - for (UserDevice device : devices) { - deliveries.add( - new NotificationDelivery( - notification, - NotificationChannel.PUSH, - device.getDeviceToken() - ) - ); + results.add(new DeliveryResult(delivery.deliveryId(), success)); } - } - - private void createSmsDelivery(User user, Notification notification, List deliveries) { - if (user.getPhoneNumber() == null || user.getPhoneNumber().isBlank()) return; - deliveries.add( - new NotificationDelivery( - notification, - NotificationChannel.SMS, - user.getPhoneNumber() - ) - ); + return results; } - private void createEmailDelivery(User user, Notification notification, List deliveries) { - if (user.getEmail() == null || user.getEmail().isBlank()) return; - - deliveries.add( - new NotificationDelivery( - notification, - NotificationChannel.EMAIL, - user.getEmail() - ) - ); - } } diff --git a/src/main/java/com/backendsystemdesignlab/notification/notification/service/NotificationTransactionService.java b/src/main/java/com/backendsystemdesignlab/notification/notification/service/NotificationTransactionService.java new file mode 100644 index 0000000..73cb3ce --- /dev/null +++ b/src/main/java/com/backendsystemdesignlab/notification/notification/service/NotificationTransactionService.java @@ -0,0 +1,191 @@ +package com.backendsystemdesignlab.notification.notification.service; + +import com.backendsystemdesignlab.notification.notification.domain.Notification; +import com.backendsystemdesignlab.notification.notification.domain.NotificationDelivery; +import com.backendsystemdesignlab.notification.notification.dto.DeliveryCommand; +import com.backendsystemdesignlab.notification.notification.dto.DeliveryResult; +import com.backendsystemdesignlab.notification.notification.dto.PreparedNotification; +import com.backendsystemdesignlab.notification.notification.dto.SendNotificationRequest; +import com.backendsystemdesignlab.notification.notification.repository.NotificationDeliveryRepository; +import com.backendsystemdesignlab.notification.notification.repository.NotificationRepository; +import com.backendsystemdesignlab.notification.user.domain.NotificationChannel; +import com.backendsystemdesignlab.notification.user.domain.NotificationPreference; +import com.backendsystemdesignlab.notification.user.domain.User; +import com.backendsystemdesignlab.notification.user.domain.UserDevice; +import com.backendsystemdesignlab.notification.user.repository.NotificationPreferenceRepository; +import com.backendsystemdesignlab.notification.user.repository.UserDeviceRepository; +import com.backendsystemdesignlab.notification.user.repository.UserRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.function.Function; +import java.util.stream.Collectors; + +@Service +@RequiredArgsConstructor +public class NotificationTransactionService { + + private final UserRepository userRepository; + private final UserDeviceRepository userDeviceRepository; + private final NotificationPreferenceRepository preferenceRepository; + private final NotificationRepository notificationRepository; + private final NotificationDeliveryRepository deliveryRepository; + + @Transactional + public PreparedNotification prepare(SendNotificationRequest request) { + + var existing = notificationRepository.findByEventId(request.eventId()); + + if (existing.isPresent()) { + Notification notification = existing.get(); + + return new PreparedNotification( + notification.getId(), + notification.getStatus(), + List.of(), + true + ); + } + + User user = userRepository.findById(request.userId()) + .orElseThrow(() -> new IllegalArgumentException("사용자를 찾을 수 없습니다.")); + + Set enabledChannels = preferenceRepository.findAllByUserIdAndEnabledTrue(user.getId()) + .stream() + .map(NotificationPreference::getChannel) + .collect(Collectors.toSet()); + + Notification notification = notificationRepository.save(new Notification(request.eventId(), user)); + + List deliveries = new ArrayList<>(); + + for (NotificationChannel channel : request.channels()) { + + if (!enabledChannels.contains(channel)) { + continue; + } + + switch (channel) { + case PUSH -> createPushDeliveries( + user, + notification, + deliveries + ); + + case SMS -> createSmsDelivery( + user, + notification, + deliveries + ); + + case EMAIL -> createEmailDelivery( + user, + notification, + deliveries + ); + } + } + + deliveryRepository.saveAll(deliveries); + + deliveryRepository.flush(); // DB의 ID를 얻기 위함 (delivery.getId()) + + notification.startProcessing(); + + List commands = deliveries.stream() + .map(delivery -> new DeliveryCommand(delivery.getId(), delivery.getChannel(), delivery.getDestination())).toList(); + + return new PreparedNotification( + notification.getId(), + notification.getStatus(), + commands, + false + ); + } + + @Transactional + public void complete(Long notificationId, List results) { + + // 기존 notification 객체를 쓰지 않는 이유는 첫 번째 Transaction이 끝났기 때문에 두 번째 Transaction에서는 새 영속성 컨텍스트에서 다시 조회 + Notification notification = notificationRepository.findById(notificationId) + .orElseThrow(() -> new IllegalArgumentException("알림을 찾을 수 없습니다.")); + + List deliveryIds = results.stream().map(DeliveryResult::deliveryId).toList(); + + Map deliveryMap = deliveryRepository.findAllById(deliveryIds) + .stream() + .collect(Collectors.toMap(NotificationDelivery::getId, Function.identity())); + + for (DeliveryResult result : results) { + NotificationDelivery delivery = deliveryMap.get(result.deliveryId()); + + if (delivery == null) { + throw new IllegalStateException("전송 정보를 찾을 수 없습니다. id=" + result.deliveryId()); + } + + delivery.recordAttempt(); + + if (result.success()) { + delivery.markSent(); + } else { + delivery.markFailed(); + } + } + + boolean allSucceeded = results.stream().allMatch(DeliveryResult::success); + + if (allSucceeded) { + notification.complete(); + } else { + notification.fail(); + } + } + + @Transactional(readOnly = true) + public long countDeliveries(Long notificationId) { + return deliveryRepository.countByNotificationId(notificationId); + } + + private void createPushDeliveries(User user, Notification notification, List deliveries) { + List devices = userDeviceRepository.findAllByUserIdAndActiveTrue(user.getId()); + + for (UserDevice device : devices) { + deliveries.add( + new NotificationDelivery( + notification, + NotificationChannel.PUSH, + device.getDeviceToken() + ) + ); + } + } + + private void createSmsDelivery(User user, Notification notification, List deliveries) { + if (user.getPhoneNumber() == null || user.getPhoneNumber().isBlank()) return; + + deliveries.add( + new NotificationDelivery( + notification, + NotificationChannel.SMS, + user.getPhoneNumber() + ) + ); + } + + private void createEmailDelivery(User user, Notification notification, List deliveries) { + if (user.getEmail() == null || user.getEmail().isBlank()) return; + + deliveries.add( + new NotificationDelivery( + notification, + NotificationChannel.EMAIL, + user.getEmail() + ) + ); + } +}