From 72a2609663c94785319746e5d949176db3d1598b Mon Sep 17 00:00:00 2001 From: igorsatsyuk Date: Sun, 31 May 2026 16:56:38 +0300 Subject: [PATCH 1/4] docs(diagrams): migrate mermaid docs to plantuml and png Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- README.md | 107 +++--------------- docs/architecture.md | 39 +++++++ docs/diagrams/generate-diagrams.ps1 | 13 +++ .../diagrams/sequence-async-client-create.png | Bin 0 -> 67556 bytes .../sequence-async-client-create.puml | 31 +++++ docs/diagrams/sequence-auth-login.png | Bin 0 -> 27249 bytes docs/diagrams/sequence-auth-login.puml | 14 +++ docs/diagrams/sequence-auth-logout.png | Bin 0 -> 23156 bytes docs/diagrams/sequence-auth-logout.puml | 14 +++ docs/diagrams/sequence-auth-refresh.png | Bin 0 -> 27108 bytes docs/diagrams/sequence-auth-refresh.puml | 14 +++ docs/diagrams/sequence-observability-flow.png | Bin 0 -> 36456 bytes .../diagrams/sequence-observability-flow.puml | 21 ++++ 13 files changed, 162 insertions(+), 91 deletions(-) create mode 100644 docs/architecture.md create mode 100644 docs/diagrams/generate-diagrams.ps1 create mode 100644 docs/diagrams/sequence-async-client-create.png create mode 100644 docs/diagrams/sequence-async-client-create.puml create mode 100644 docs/diagrams/sequence-auth-login.png create mode 100644 docs/diagrams/sequence-auth-login.puml create mode 100644 docs/diagrams/sequence-auth-logout.png create mode 100644 docs/diagrams/sequence-auth-logout.puml create mode 100644 docs/diagrams/sequence-auth-refresh.png create mode 100644 docs/diagrams/sequence-auth-refresh.puml create mode 100644 docs/diagrams/sequence-observability-flow.png create mode 100644 docs/diagrams/sequence-observability-flow.puml diff --git a/README.md b/README.md index 557b81d..55aead5 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,7 @@ Reactive OAuth2 proxy/service built with Spring Boot 4 + Java 25, using WebFlux, - `SECURITY.md` - security policy and runtime security model - `CONTRIBUTING.md` - contribution workflow and coding/testing standards - `CHANGELOG.md` - notable project changes +- `docs/architecture.md` - architecture and sequence diagrams (PlantUML + PNG) This project keeps the same business scenarios as `jwt-demo`, but the implementation is fully reactive: - WebFlux controllers (`Mono>`) @@ -205,48 +206,21 @@ Authorization options: ### Login flow -```mermaid -sequenceDiagram - actor C as Client - participant S as Spring Boot (AuthController) - participant K as Keycloak - - C->>S: 1) POST /api/auth/login
{username, password, clientId, clientSecret} - S->>K: 2) KeycloakReactiveAuthService.login() - K->>K: 3) POST /realms/my-realm/protocol/openid-connect/token
grant_type=password
username, password
client_id, client_secret - K-->>S: 4) 200 OK
{access_token, refresh_token} - S-->>C: 5) AppResponse(code=0, data=tokens) -``` +![Login flow](docs/diagrams/sequence-auth-login.png) + +Source: `docs/diagrams/sequence-auth-login.puml` ### Refresh flow -```mermaid -sequenceDiagram - actor C as Client - participant S as Spring Boot (AuthController) - participant K as Keycloak - - C->>S: 1) POST /api/auth/refresh
{refreshToken, clientId, clientSecret} - S->>K: 2) KeycloakReactiveAuthService.refresh() - K->>K: 3) POST /realms/my-realm/protocol/openid-connect/token
grant_type=refresh_token
refresh_token
client_id, client_secret - K-->>S: 4) 200 OK
{new_access_token, new_refresh_token} - S-->>C: 5) AppResponse(code=0, data=tokens) -``` +![Refresh flow](docs/diagrams/sequence-auth-refresh.png) + +Source: `docs/diagrams/sequence-auth-refresh.puml` ### Logout flow -```mermaid -sequenceDiagram - actor C as Client - participant S as Spring Boot (AuthController) - participant K as Keycloak - - C->>S: 1) POST /api/auth/logout
{refreshToken, clientId, clientSecret} - S->>K: 2) KeycloakReactiveAuthService.logout() - K->>K: 3) POST /realms/my-realm/protocol/openid-connect/logout
client_id, client_secret
refresh_token - K-->>S: 4) 200 OK (Keycloak behavior) - S-->>C: 5) AppResponse(code=0) -``` +![Logout flow](docs/diagrams/sequence-auth-logout.png) + +Source: `docs/diagrams/sequence-auth-logout.puml` --- @@ -254,34 +228,9 @@ sequenceDiagram `POST /api/clients` does not create a client synchronously. -```mermaid -sequenceDiagram - actor C as Caller - participant A as API (/api/clients) - participant D as request table (PostgreSQL) - participant W as Request Worker - - C->>A: POST /api/clients - A->>A: Validate payload - A->>D: INSERT type=CLIENT_CREATE, status=PENDING - A-->>C: AppResponse(code=0, data={requestId}) - - loop Poll until terminal status - C->>A: GET /api/requests/{id} - A->>D: SELECT status by id - A-->>C: status=PENDING|PROCESSING|COMPLETED|FAILED - end - - W->>D: Reclaim stale PROCESSING rows - W->>D: Claim PENDING batch (FOR UPDATE SKIP LOCKED) - W->>D: UPDATE status=PROCESSING - - alt Success - W->>D: UPDATE status=COMPLETED, response_json - else Failure - W->>D: UPDATE status=FAILED, error_json - end -``` +![Asynchronous client creation flow](docs/diagrams/sequence-async-client-create.png) + +Source: `docs/diagrams/sequence-async-client-create.puml` For multi-instance safety, stale `PROCESSING` reclaim is implemented and indexed (`V2__add_request_reclaim_index.sql`). @@ -345,32 +294,9 @@ Recommended settings: - `management.otlp.metrics.export.enabled=false` - `management.tracing.sampling.probability=1.0` -```mermaid -flowchart LR - subgraph App[Spring Boot jwt-demo-reactive] - A1[HTTP metrics\nActuator /prometheus] - A2[Traces OTLP\nmanagement.otlp.tracing.endpoint] - A3[Logs OTLP\nmanagement.otlp.logging.endpoint] - end - - subgraph Infra[Observability Infra] - C[OTel Collector] - T[Tempo] - L[Loki] - P[Prometheus] - G[Grafana] - end - - A1 -->|pull /actuator/prometheus| P - A2 -->|OTLP traces| C - A3 -->|OTLP logs| C - C -->|traces| T - C -->|logs| L - - P --> G - T --> G - L --> G -``` +![Observability data flow](docs/diagrams/sequence-observability-flow.png) + +Source: `docs/diagrams/sequence-observability-flow.puml` --- @@ -472,4 +398,3 @@ Main integration suites: - This is the fastest path to diagnose `401`, `403`, and `429` scenarios across API + security filters. --- - diff --git a/docs/architecture.md b/docs/architecture.md new file mode 100644 index 0000000..f696b16 --- /dev/null +++ b/docs/architecture.md @@ -0,0 +1,39 @@ +# Architecture Diagrams + +Diagrams are stored in `docs/diagrams/` as PlantUML source and exported PNG files. + +To regenerate PNG files: + +```pwsh +.\docs\diagrams\generate-diagrams.ps1 +``` + +## Sequence: Login flow + +![Login flow](./diagrams/sequence-auth-login.png) + +Source: `docs/diagrams/sequence-auth-login.puml` + +## Sequence: Refresh flow + +![Refresh flow](./diagrams/sequence-auth-refresh.png) + +Source: `docs/diagrams/sequence-auth-refresh.puml` + +## Sequence: Logout flow + +![Logout flow](./diagrams/sequence-auth-logout.png) + +Source: `docs/diagrams/sequence-auth-logout.puml` + +## Sequence: Asynchronous client creation + +![Asynchronous client creation](./diagrams/sequence-async-client-create.png) + +Source: `docs/diagrams/sequence-async-client-create.puml` + +## Sequence: Observability data flow + +![Observability data flow](./diagrams/sequence-observability-flow.png) + +Source: `docs/diagrams/sequence-observability-flow.puml` diff --git a/docs/diagrams/generate-diagrams.ps1 b/docs/diagrams/generate-diagrams.ps1 new file mode 100644 index 0000000..844090b --- /dev/null +++ b/docs/diagrams/generate-diagrams.ps1 @@ -0,0 +1,13 @@ +param( + [string]$PlantUmlVersion = "1.2025.3" +) + +$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path +$tempJar = Join-Path $env:TEMP "plantuml-$PlantUmlVersion.jar" +$downloadUrl = "https://github.com/plantuml/plantuml/releases/download/v$PlantUmlVersion/plantuml-$PlantUmlVersion.jar" + +if (-not (Test-Path $tempJar)) { + Invoke-WebRequest -Uri $downloadUrl -OutFile $tempJar +} + +java -jar $tempJar -charset UTF-8 -tpng (Join-Path $scriptDir "*.puml") diff --git a/docs/diagrams/sequence-async-client-create.png b/docs/diagrams/sequence-async-client-create.png new file mode 100644 index 0000000000000000000000000000000000000000..9f9e6e8cafa72bd840294d43ecee300f254f3c7d GIT binary patch literal 67556 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

T&Y$@9B*?SrUc-TafQSy@Mskr1$E&lO`UD=RXs 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 b1G5|{Z!Z}BY;3+j{9#3fqX%>3js5-?xXs;{ literal 0 HcmV?d00001 diff --git a/docs/diagrams/sequence-async-client-create.puml b/docs/diagrams/sequence-async-client-create.puml new file mode 100644 index 0000000..2901fd9 --- /dev/null +++ b/docs/diagrams/sequence-async-client-create.puml @@ -0,0 +1,31 @@ +@startuml +title Asynchronous client creation flow + +autonumber +actor "Caller" as C +participant "API\nPOST /api/clients" as A +database "request table\n(PostgreSQL)" as D +participant "Request Worker" as W + +C -> A: POST /api/clients +A -> A: Validate payload +A -> D: INSERT type=CLIENT_CREATE,\nstatus=PENDING +A --> C: AppResponse(code=0,\ndata={requestId}) + +loop Poll until terminal status + C -> A: GET /api/requests/{id} + A -> D: SELECT status by id + A --> C: status=PENDING|PROCESSING|COMPLETED|FAILED +end + +W -> D: Reclaim stale PROCESSING rows +W -> D: Claim PENDING batch\n(FOR UPDATE SKIP LOCKED) +W -> D: UPDATE status=PROCESSING + +alt Success + W -> D: UPDATE status=COMPLETED,\nresponse_json +else Failure + W -> D: UPDATE status=FAILED,\nerror_json +end + +@enduml diff --git a/docs/diagrams/sequence-auth-login.png b/docs/diagrams/sequence-auth-login.png new file mode 100644 index 0000000000000000000000000000000000000000..8705e3c2c750d9ac2f1a79bc07abf4e4558978bd GIT binary patch literal 27249 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 literal 0 HcmV?d00001 diff --git a/docs/diagrams/sequence-auth-login.puml b/docs/diagrams/sequence-auth-login.puml new file mode 100644 index 0000000..aaad680 --- /dev/null +++ b/docs/diagrams/sequence-auth-login.puml @@ -0,0 +1,14 @@ +@startuml +title Login flow + +autonumber +actor "Client" as C +participant "jwt-demo-reactive\nAuthController" as S +participant "Keycloak\nToken endpoint" as K + +C -> S: POST /api/auth/login\n{username, password, clientId, clientSecret} +S -> K: grant_type=password\nusername, password\nclient_id, client_secret +K --> S: 200 OK\n{access_token, refresh_token} +S --> C: AppResponse(code=0, data=tokens) + +@enduml diff --git a/docs/diagrams/sequence-auth-logout.png b/docs/diagrams/sequence-auth-logout.png new file mode 100644 index 0000000000000000000000000000000000000000..771db076ce14b1bf345f397a8c74e2b0469a9f8f GIT binary patch literal 23156 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 literal 0 HcmV?d00001 diff --git a/docs/diagrams/sequence-auth-logout.puml b/docs/diagrams/sequence-auth-logout.puml new file mode 100644 index 0000000..1566abc --- /dev/null +++ b/docs/diagrams/sequence-auth-logout.puml @@ -0,0 +1,14 @@ +@startuml +title Logout flow + +autonumber +actor "Client" as C +participant "jwt-demo-reactive\nAuthController" as S +participant "Keycloak\nLogout endpoint" as K + +C -> S: POST /api/auth/logout\n{refreshToken, clientId, clientSecret} +S -> K: client_id, client_secret,\nrefresh_token +K --> S: 200 OK +S --> C: AppResponse(code=0) + +@enduml diff --git a/docs/diagrams/sequence-auth-refresh.png b/docs/diagrams/sequence-auth-refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..e2e32fdf9716e81cff382c8d0322d4bc6fc69179 GIT binary patch literal 27108 zcmcG0bySpV+wZ6-1|cny(jW}oD1vl%4+tVH2o5EsV8KWu2vX8r5)y(zcS|TJ(kb0= zuF<{syT9){f1I<E|gAu?i_#48mgwdTd`-dxjGxBY{MY&2JgOneWE#r-xT2%5OmKGbF z%+VK+p3cKZPiS3n#!Y)-&`+ydnZwMB_DvLFE9!kDWtJQAE}gaMnE?qED%!?~?eHwK zN2fB^czNldlfpxtej^kWlXU$>??(duQw*rjHwNv#bJ3ico^VmFE6`NlzT))lkZmlL z^nSpBaaynn@yD^90?H(NYO{|os9cnfQQRIGM;v#`UlO0gp^#7Ic`Q3Yb1{)GcE)Du z^zzNf-Q+Kqe;H7J)J7F{55{r2-A8>FS-g40Fl1DElw_i3C3%;ynDhN`hxZwI0Xj54*c}QHo>N0wQoo5g%S|oHF(g_HlUe?}kprO>QSX>w__qSw+j z@w(4ta`LT-h6}d-QyP8!_}RKo-^m8U2OGgHg~^0ai!RDcwnWaXcS%aRFUJdvSL2*M zJ=Go?xi&gF8Y!a~$@O@iT_-E7e-9Z!UPgKXVS`h3_6D&E#c286(ORGV!rHwYgJO$~ zVwphV>45@S40+VuonJqU%N@cq3`5AnBTKW=&mwLx!m~!)s@ho`=HFV~U7vw}Slgal zpm;U4Hr3{LxcMbVH^tY5 zPc7I#qPyH?Iuk6-iY*%8DJv5Kze*k-ymkC0rWAz1{8YqK#MGSax^b9UvOd!#>Al1A zmRiE&URUBZPFf-&scSDnLdaEol6S%x#fFtO2i-&A5fC6Xk`Z0qX^JFvxvmR?q^#K)cnM;z zDLdQae(I~Ia0xVOj4K>d=1(-w!YWblpR)+QENC~7Gxg)g$I@V1bpr!~!92rn-@dVz zcx^Aoi{6hwhac{&{%rTUfQQF);&zpS_x3mU_2~{qeU)O;-H<5jU*A8HW=bUa9qqoL zEB3v&CO< z*0(GyEZDNu62wTYD+FSZBcr3NOiZuXWsMYwh4K(_~VP=HxOim+;vWFbtyLR`a`k`}S4coT#h%1u@)a zYjGzK*hTeyTa)g(w*r!}0WQ5W-9dGwr>r$W-2DoXbyp%;6ngbDp`;~Q9J`?VvPr8| zjKa#;dqX1e9@U=YWO`>}c~y#RwV>ney5lKP#jR#yI=b;>sZ(0^+}zxI*qP}YXV=c? z9^YCTU2litUv>83rPcKYDq%;S!k(t4XV>@k_O!g~pA&IfD=3`xW0WhvEH5u}D(3fp zt9IXB8kJYo$QHdn9d=KvJX1aCJbPaQ+?m!vpSt9oEer+sNbFc98S%9*Cr_Ubd#liC zlPKXibh|lSIp(NP3-J(J7!(!8s$(VnY7^!%Y-D8W;jf#wTVuGB>gtZu6eD4s>XcY2 zx>fYOK<2z$TVGFg7|7KhFSGvwyNZUII*6RB)mM?8xk^DWhF!a{bMmxWqQvgcP{|C~ zh;P~FV9C0%9IYoEcQ@(f8x6-g4qf+LlhNTtAmBmI1|o?&;shC$VNJ2u-f1J(*VoTL zl5yzJJH43VO~u%yE1YZzv=kOyQgQl7eeFTiRE6>*Byo6nxN4k$xzmS;uSZAwD>XW0 zb_31t9ESO>^!PXomoTfJM({xWGx+dY*s0mwvT)Q!K3~V%`(Sh7OG{?dkap+iXM~?W ze?H!wp|d@SpcnoBRx95GAfG-##frI3@2rwEg&f}f`Yte%RbA2@xzX|3&pqN4l;an& zL1%8N}Yy5dE}?fTy>d|7dk zCB-cvq!OC`{_$t81^oWTC*1N*881E9-f{J^%7CJ$xJ47zV6UHdq2VNZWuKvpzF6^x`2w zRr3|ws5tm{#LfTX4*Zw}WdapR2fx(*i<+I5zg?sd_5x}60&^*H8K2Cck>9%a&vFbC z!@*sl;cxWXuz9>q)EKfkR_$K5;fKKM9D9#DD|z+UozZ~QZE57HD2#vD`8-rLlKxh@ zHx)U~=o49t-j5#N2Mla%Hmef@YkmU$>5m3e?zHJW@8UuerJbxhzHWG3jL3n8MeP8! zmxOrQ(9|S<#4T5Zgb~O5c~5tP&N=Oj9ff0(4@KR6+P{CR5-(!t?f3>mPxcU*p#=YD zO~#0wnPpJ$NycOoCu8Q$&8CDv5!0fZwaCGlwRmu{D(m(`q<=qd)hmt@Rj(2sBIhq9 zW9T;@{onn0(+i}W%-0yI{0qWP*MnYo(^pU-XI<5>A4oOFph_7hV$l{%MYwtSk=~cv zu2R9jZ$S_x;k8wjknru%smv+Gh$4sKJ+iApElU$TcKtYnq4O@)S58WPz)(2#iVjzA zzmo_}$KGL4IMS*s@%D7P=fTgBveEl9org;mK1>$2vLbGrQF3eHj5AY;(*YscH@I$4 zNX@5aVDt+cRpUjj2?!V^GM#gDOwUk#%~*j6c;gyQ_kDB0omKtlXKy;2C#~`+H1D-l zT6B2eg!}j*eV3IiAf#Iaf~XhI-^u%Gd3b!CA23!=BCwW=BOEQKx#b*zyOvV!Fsxsi zWq*7mxjcMd#q?adTI||PhN>4JirMbrY;7M3P6M?*m9Nx?_-75~e)7Mb=Ax{)E3UBG z@p?OGLBiu#d!FHu&eo?VRBPmlRavz2qjY}lnG<#$#YMN9%uBRMs@-VFzDW91jeo6t z^yUq(X2#9$xR;2WlQ`;Jri5G-7Zv;Vq?>GNxfHRp?U0XAA@w_O&JxkR-fQC+M7FTA z+6EQL!nq|YdNySwK0^IsF|rqJQ0pBKZLCCo8oM<5(c$Cr`DS%L2qp2%8|?<{A{2^t z9-q4|Xz#msxE*kRs#UkZ1nNclCf=oAX1LEJ@{KF58ulje-9yC-*k-(c@6#52cYg5h z_sPi`*9G4(lSme>`TpHJE#^>wN?NJV&fX02TX(83G_?{?2|bNVElKj$%Dnf3K}t%T zDL7Hg^~rp;=^=^I-M)g^D%%L5iDo!8nyB#+e}H8JsT?|4?XRgMJUpW2rcPR0$K>eR7wNlJp?9M5O^RP~mtoTi<4$(S3BjsxpG>V*6P2HlkP5h_l41V{d!>>Z@YIx7-gl=joWmZq%}A zB&S|DS1HrTZ(X3pKL6UtIOzB8NI?3oclc3LQ`;1Ap)S`i*)cB7_F$qS<0XR3YP~UQ z-8eeb111y$(@_&RflBcwKYqM|?lDYP5?mLS&ATAf(;)0L_Ja1>UT?bcM$AO7C1Q-( z5S7L*6B&GcZ=d@OMtg0>_t>ZL<<*M0^HHi)NUA8$sn!n87ni3tSDTnU?=s3i;6*WY zg+{q9f4xCIs}ybYMpn zE*CMkxajh;@n)58`taq=6}PA7|2(l#wOjR{d7c!H<~9rGQ^*-$o-M>Ydi3ZSA>A|` zyBfKs7(%ObmO(Xv#%C*go7F~W=f)S6YHFP|oiySE+Tk~!bq0;ToJ}#h|JG_(Ttwto z37S)2i2`XNC70;g65)EgQRM|OO|k(+i*Q**MUtc+dp^zL-P2{|L-K!$SSIGcM`vvm zmVIj?UmT?^6mZRmy5k5yk4Yj#a^ww~9j=;p)!5Z84wBy)dM|F-7VXnd=gY0%l>8Ry zI9}_sG*U*)XxNP8J^7(01!G*XoVm~ko4fDe%>~6c4^fxNw7`!p5u-An6k|#!CZGUl z2&t<(1wDIg;^NHSiVmMlgW?2xQ%1j5Kp$9zl8f?yT~EXM4CDF?_lL!Plh038r^XM% zu+KR8gN)PQxzA63zP{cY%PUiD6+xuVN1I=IGW>a8Ue%`&n2llUIT7RSG>%MmHb$qCc)Bf{ecO#_<&XYen-4gI}hN8+{O=`~kOFK;af zXW3}#qiV~U2p-H&48OIWX^&+ri=!7$SIS4c>Q2Fs+MF!4>4|FqOf4(cbU(sMqf;(8 zPT3BaIiqT(^b=~^iL$$+;r5qQ9fT{i(n>5dTga)YKfUHJ#E|M0jv3YLJQKLxqQ5^G zDYn=_;r#o_N=tO|jRK;o(Q`mEqNsQ+OgiI5ZBL&&KO(gmc{5(zeHpeymD`e9)GUIz z>YYUc%icSip3CcZ+0S5~?r@d?6`_}_*EdjhDflKoXyO zxdO#oT*AcgcM+T#hpcLk4Y%89bi(Qal6l#L+z)o9pd7aFN21nbk!7cJ@Ph6to`j}u z&WKVGVhbtFH{OmkHGO}XwS|*zU?N#0v!CU;YQXiX9S}f(8-v=QKq3R5`X;^?C+vr2 ze*;`iEn)t(p#5M`k%1?NbSoAjgd0_{ol7%6apG#r%)Q`wqYx6_4 z`H8~15TsW9F6@?;$cyN6uxVv3_cR3Hc8Q3I3EFhOI?M`|3LvPm>A~-{bgJ;jd!B-1 z7!t#_FIyRkK6!;~q|vH$aO{`+HyUyNh0CZ%z-=kZgL0+&yOy}x0u?{IN(Q7&X7g0xayRwP~ zb-wy#c7p6Tw-!bDtUJG!-<8kxOEhRpY?1iI?P~a5JYfraPg!#o00s5edB zg!^gp#`tyHG+)KO0;&PT*mYOx-q!kr&TD}amONTn7+{Ew-O0|Y6LfKvIMa`gyR#@! zCKZlegL%Vy+sEN+GO=6TY}y&r``_+e^`9`MvjhB?cT<%@J^t*d{fN(HOk9Mg35}%6LK-*yC(c$*^gS+&yn;Lhut~TFFlc6A_7EwK-KJ0jT^~*$q zeeCK;nK+uaxlYe}V^+4@y3ixQtN@eaVCs$)QUc5A&3c6R3BRH-wOOS%%^M-9Ylee*H1Q7U0Pi( zs9TfD5?Y*+(i-%Z+BKc<#<=($GxJ-uU-MiWPeM&e`H~U^j=JXxTKe+ew+A`UM==md zK)rLnBQ8lU)|b5$x=TA75!v(my&Smpg~b;(KPR5Y2Yk8<#(`9CM(Hk8<%9@rwb-re8W zO`M_wI2A}tC(Gohe-gxyIDE3%M=)P@0p0CIGg8Hzf@ua}HNp+=>kV&uzqN4Fp6Pz`b~@C5A*JRG8(`?4 z2Kg8+qtZ^0!C-F~&B+7x@}{?3Vg!mi0vJ+l`5!LnF7Y?-c;*L3U1Tq!G)&pBV-UoqzmY9 zId7mUEq5l#6+f@$El6aZENhaV)f>+b4ToH%G^Qv^@1)eu8-D zP;B{qt@}a(abD26`A=JmdF}e0%3PNeG5vxeLDK$1X zE9@zRx5aQPE8E=yxfhsyxRI3HCovQ?zm>%s=_kyggIHSOwzN0NCnhpU$!p;qHTOif zmeD!NCcuop>fM7)JtLyMEgFTlF*!z+F85)zXm$W0#Xds&#!s%Gmn!+RmB^gChzlqj z3(f)AGNNWOW~I`F!V!7_{zXp>POrTU-3EUC2q!h#=k85ad7fzz{QQV|R=uhcW)m-^0(VbO$HMRkH@Wb>Ze4q)Z1@q_7M0XfS^? z+)hkH#Cy*cRjZx4o66G{HexlM;m|Ud^6VMt>(}a|m1B@(NRyqfmG@03%-%ncb)>6n zcyPG42~XlURP?CwrN1pVN9&DY(D=zOUc7kua_b^U;hcJTmjaO$5AmM6R=skd*I)Vm zk$=ryu*~U~vVN*gfQ41VHJt(fSn{$jsqaoWC}CS~cpft6^b#Wv$DIHTui>-9rV}P( zo$-|!J8JQ=@*e|6>Q&^RV=*iq`KY~Bx3Fd#lTQ$KqD8$dbsDdA{@Dn2!Zp`+D)QL?DK(kQdjy`o7W|KifeMVLtFK_@UjuXFsZo%B{9 zO{++!erO)f_FPzFGJb4{c0NAx8_!@aiyWeKL77yc*?0YNNn%Csvkb3{*L9(JnV24v zZESAl8x%8OZc>~;^XmQ{gj(0tYtJmvtAqK*ZpTMkQbqN&mo8l*BD(UW!L~1Bsx4-v z&HYV0P=X7&zP`Tj-`38v41eDSNH|X|(cxK!Z>?ZkG(^Md8a>=kXua!#Vxr^qJ32V1 zeqjlkufDf;4JC?GI|C2R8*u7h0HI}J0%ZNSz#_rqX=-f5x+>qQzjSouYo^M~_m0WgO$TiUBbaVOvOSaEiq$|B_45nh;twe;q`S%@7x`q$c`gj3VSR}4% z8>n`7>Xnq5+hw2(r52r7UN%j>@d%owRyL^I=L1*1vCT6CGB87$ug>XkOo>BQWZCGJnFXtB388eL)Z%ry#G4k|hRHjB?%eKNW)cu> zBd8AFzu(GGY>Vc~)y*Z}^@cW;nPw!`?)a_B)6?@MmvQubo##4BWm|u&RYzPg)u$-f zV`^14$t5jTELQEWq++w5jr(lV^r6bGBLubhnol&_z^+J>MKP7_gAWAHp|}cjH#|Dp zMwh6YXArLE8T5iq@;W%hVDiNa-5r_h%VZwLd0RERuz+<5gJk68wXZIGDXjB5K7vN1 zU=KFI%{Zy~(E^k>AC&&Sj~{=4jb(w`=Dm7>0y)_n9#Ap0ysXwlOhN($EfEa9wFic} zW`2jR1_qZZYnYB_x{@gLy+Gy@D}~R)!ND=9cFXrzoj?~A7Z=+P=COlC+cE=#Yl1?Z zI(2I0TXl@XG!T~R%1TtF%agPOoNBli=@ew^KB8Ztg&vna)x3K*;widkc(@V_@Y3W+ z!pVt=PnIq)3n3vPyq3G1=FOW8q8+mqU^>UL?#=e3 zg8j?GC~8XQ{p&;^bswIKL2Lqb?Z*IIjBAg#vn-0#a$D2$5c&cuK8eggM8D=4V#$wa z+U8xamuG4Eo5LAf)U03B+~kS{*H+CsqJAYi5b)otxlTW$qji72Fu>)ftY`@60>;(&NZwXr-r{^^S z90oyaOh%RdVR$|t*Lz1{Zmx~!VCwDgZp zPZVA28)?Md!p_v!*XNm3Mv(igVtAl3Fc=a~=?-A44SK#mu%QK$qNfmmwF~zQ@(g&v z(7sZ$CKYgIb7ef~f?`PnH>xU1&|WWEisxJTC>z^Ogj8g**PCezvbAbC>sKO3~a!SWo)gm+@dZEXFkki;19S7D{y zx<$XMHAxuG7SV`DCG;W!Y+Pyoet6)aA%l+_jY_X!u~j&6BMUMxbw_&(&=(E7d(#w| z&Mn$MNi*%I)H2DSgw0K=qJEKvhGw^o&nRfT&M)b)9eCB2UrX*>po~RoT|=Ms4`K<- zB~$(eR_W5x61GpRLY1hhtSol7Bz4u~<<|s2lkpW6va_q}pPPpu%H-kP#9QmG9Gz_G zTprsO0v&lsVkUm5xUGrTyb4Sz;}a5EgsmB5!nUd+Fwd`&`P1nlKJ!?(q^oA^5D-?+NFgH@SaQBgrp9ASxx^Z_%x-#Vf| zF8FfzsU~!>exa#~BblJ0Nxs26PM_jE7Z(ow0&3T%$kRjb^<+^x?J7Y#Q!!={9NHvk z^J3QpJ>d2T1m9RB65=57fhloFyC0ni;%Ss??%JpOUUOra!QMu;fD}yx&Z<1I(flPZ zswW=>14fuN)m!6UaU8L6chX<@B1*8Sx5|cNSVnAcb*+;vS#;u=kB*lYN&-eGKIYHqIi~bo7__i{PKs#iSe#n zYfH3&MrC%zbjB2){gTxf#kS<{uBiC@;6fS{Jv7=~D6C5p<-GFuT^iIB3_pjK(VN3n zmUFw$2Y0~t{EZj8m(el@;<=Z(FW3J{N+8)7l)ZB2u&2a51Npq`0|*iiwib6C#Sn;^ z&-(_$Wkt{$07RZIQN?Xx7+2~Z+$U&tU4?O;T#R_EQMTyrSzk4~w4|DNmE@c!?$GrR zDBF2D*~FsB)7v6=`1pV+?!qE#!C2&qez~$b7<$>5$Z4DHIeK-d__mI2wpKb8wO65S z*Q?m(B1{i?>)bPHq@@N)xNge2oH;l+$kIQyCqy8k6s}f*7MT*wWqf|cQS1^4$@OQd5+E4 zk(AC~tqm}L{lmktWB@iZC$N}kyrO?B$fH^w=)*AALgoD#t@-aC1D1&W-suu~#)QyG z7U=u+Z*}VAX^fF@L@a8Am%f8O1NeXaDPSM9xb6l>Y4zzIK%(if`!*4&PB}5DL(NLE z425+^obLMvu1DCNbLtG8KQ+;$-#9QBs?!a$WGaYXOW?s%$khYN;iX z)df|WMYijsQ_f8OwrEMIeKw^=8DPUeuB3nKSZokktC#eq4JF3}dA2VrD{EE!#3tZ9 z96*!v@_A55nSSin9q&v2_~wIi`ei=OX{r@*ww{JJH=nsJ3~LLDOPwf6lB?(kN&E+7jOLKUj40Y9;LI^muD6K2 z55NV&w!M%2n2w*KpA6hM`kE{iFh7{zrf1zipfJLhinTKY?fSpdWh(`)mq4z?^fOe~EdIU> zRT3SsO4pd@uPGWL+KYHLJoP~{Om2lf0kqPTCMkPgs2^L+0ogNDofWtyM|{tku7?Ht26PM@j;eBJBahM z(&pbkJZcJ|iOdN62YIDrA~Pn5>^(e0ypl|7{WJCDLTMorcRO2fQ^EeQCjojhwBG)< zHs!dmvx>KYqd>&@74F z0?-tMvslM?i2uXU&iF7>AkG9%fZVY-F=5dtRsSE-cl5-^54z_dF|Ovx|FF!5=WfD+^Q(0Wgkx`m|!c74Q8Tz5X*=YH@MgBfkmlb27wIT7uLV01cQyrF@2nj$gF1 z{n^?udcHe9aBcn10I##Nw*GkX&XEUKKK`uqNGvz`qemwnUTKNp9uFj8P17T4vGO4F z-sq9XMp2E*%(Ek6B~6v>Pf=3hks`(*@I_07P^ub8hAO?}(9P9bf*dH*Pj$&dfS7~OrnQ(O^e#={jg5`f*49d7 zgUr@{egFc1?O>sKueGp3aL`f_EcP@VJ|X)-PLPWzAtuVVh+e2F_z1KjXv1xZ*Y;!it!<<-$?9%5g+z(+@bCbKW73HdRZo0Aa&0 zo@pK%3$0SX2+rZYm4xK#hexM4)d+@h>AY`TZXriUs93QI+kC5Xm3FDXKdt$6XJ-cl zhNbbkqzT|^2fH&#h6!o-oYtVQpCP1G;gC-3%awu4NbPYIXuNngV|6})HZp(>JBgze zPVQ(l)1j9g3_C@H8nC3qeoOsqzPuWF z%xaK=sfRwfw=wq_C!z+K6UiWvSy3Up8)9l|I{Aj2SW1=+D~EK9O^rI$k!_pgC)4-J zu9|a9XP!!P4C7W#yaNr*khMV_2lN2Q$+#S85{Qre1qrBpyuIUuosdlP7O;VuMKj(d z_u`km#n1aZzZ+2nRPIlSFu2y7srq^lBF{&~VBV`xytQok6g;6Npg~@SVyY^8%SpQlCAxWqRxF~45pf$n2M@;2bD$Z z+%<6iJOhf9F2mvo^1wjkVsHYhl&X|#OI)i&;9{$uw0xEdkmz|LgYsURJV)aI^9kx! zHH_^eSA%P2TE7*#TbuNuAt9Y$2SUX)tMfhlV&*r@eBF%nLL)?MZ8ohtTOl&W)&=7_ zpl2s9-vp%eUNyDiQx3=?vuj&HDqA{5p*>zyo5%Hq%Nbl;xW>1!F<)#%-FxTPo7b;j z$5yD-UlZ2W0Q+s71j@!83Y=F2Y zVL;6Tdh^hgo$qSPL_8u5_m)`;dMp!e)0Ytpx*M#V_wU~u(ngrGvSvbPJ-iq+JEk8s zLgyk9bIEl2Wg8CCo}2mZGTTzo-0De@t#JHimyKNenSOyF=b3J25<18})enb#0;=QW zpL^8eGt(l%%AVLkeg6EGndU{6m2aTo{wloq{0)=Kchee=E2#R)g>!NB=x+ zi<>*6Ja5rldEz0_6~pYdr5K6Cbp#)k6asDYgB%veLx` z0%WShLF%J!ml{OcMR>&jab)Ao|Lm(NQf4iuZ-`IhdU|;5K%Z$p#tZf=3g=c(f0e{- zOa6PHtir&M?nZ{guS=2~i%A_OFZ7aFO)DG8bvZkAYa<@I^`F`O@%fpeY@C3t3nX2y z`|N3$)J(l``+cFTju?TE#GhlynFz#E7XBIpB7-5n1qTC22?+>TWGMyhqC`#!t(~U4 zShgF{_)mYep`1*kPGbXYos5e6HltbCYB!%*FFh6u+=7DxOsvoxqH22mgS}7ioCj4I z{Sy>d`tU5Xy4nNxtm1HPgd8yShu1wGJcy7Mupe9mb*i`2UD!(ND^W}X8N9ZK!rvAV zVgL3a4ht}ZMS}S+EaXTNw$6vYulise)Y16y(U)b^nc8ae)Bp8evEp`* zbC_`zV}XS)c5L{>I%BraVc9m%SNbNoT6!|xuioar0nTT97kGyj(dQ0|GuStL_zNHX z^Fe=!;edd!Lbn_)oMg#a-I(hG#qT`(&|-HGK50Nez|V<^G(A@X)&aXd|5&wJT&)V% zTQbl|(=J1Z3B= zr4po&RJmZBmp0xAq zztZ7a2y=CMdi3BURmB!>MOiQt0%{{JJao&WodhA<)y>W7H3i5U6l@ybfdWVDX9ZDF zm+0)$KJz{$Tb7jg!~Oco*UCshC|F8MRE{4Vhm4zJDpVa;YjqFT$uldy-Qs8)>#*=) z@Za?lPU4)dv_JR>#1ynIh921ld;-rL@6em;!sjX@cK7xoy6Rt?J9iH3MZG>*{)EZ0 zxlzSkWJJ*BRX3Hk=;&!<-10_j>-as5xwyMfSBGk!S};{*z594Y{pE_Yjc?D4k`Q`U zquiA=6(EpZl}$!ujgXHx`?#!Dv2R0&?Qn0e_kX)BLOi@Y&D1l;??Bnh%3=#dayZ^= z)~-aQPX5vYVCnev9dE^J&sw;W#fo;*KTl{>UMesyRwVe}D-E_wB!~--PKS}BgT`w- zwNo%KdTTnSWHHp`j~FVHzo!ooU=|n7!%V(a_O5;BzG7;pX;QDk>Unq1O{*4@W^ouq z(^rz7zB~9RzxY9I8WOwRKH%l*<-54JH+hT?znh zL@|&(JfUk)?qKMW1Lr@w&^>SxsHtftfp7lL{7+RYoafkV6VJG#th}CoDmU<7G;QuA zRGO7gnANZa5-jz)Xx?)MX1u}D6SQy#hrFQ@INs5#T>ND9=+A&2S&C;Ea10MVa-|k^ zd0bF>hJe}wR-SF#N33^sORMBP#P(C^Bz-x{Mjl3?iPP?!Jaq~~c6EAw-l)#k$ItH= z{qwps#R(psr$eSa7ZY#>dGC%00NDn-QwB{2AoZ!fC;M6dE}174Q{RHR8tPQLn*kv2 ztB=5}_douY`8pjUxe<%bsuYN(uPbGS5ns;ArYn^fMl$)lLRSD0sqYyJF`y8Opt;DSGnd2C-ZK| zA?n<*#}_O~|0_@Wdl&zIv*g0`&Jq%igHQxIPeUUx2#2Af9{?pSQYpnD2gqN`0(yD< z7U)Spr>^-PyfTIZSj{f`TX!{)2tFj#-(H-X&j?`egJ<#<+CH4;At5Gi1_yd}c6JDK z4yDWdR(M@`R@OBhtNsxX9G*e^%{KE!_ z)H#iyyaa12y9;(U00X=qizXnu~D64#2XfGlEa#pOQ_5zt-H0JrcDR3LPmP66Ij!E0(?s zk8cKgq9xPO`R@LVS~RC&2<^32E*x9S>GoLlc#$j5u{nMK!1bahx{0VdD2!9FYwe{8 zqI8}1%r4A2h&I0S{p^yGb$go&_xIg_WWm8G>;;EPZ6g5}9c0)v1d&;{zq-OSKLPJi zBn85FrRB`SkeX+^78hU@7(C3!c6JXqhu9cGqr3`2)%xos98ou*82q=b!^Y=kXPYHm z?7kFquqD}8&Y=7kZkP&bI4k8R97@Ssg;FW?i)TRy6 z^I;oz-K%1LcxL&M?StL>j^?CXMp5U_2UdwVeiiwM76BB9dGR93^2`ki2Qf1TTx{Pf z`bIwvu7P6I4*O5Q&nOdJ0L)Upud~^cL7suq4xvh`e$P>=z|i_r))1H=E9@eV{~M&9PVl*!iJSOK!T62 z1WY*i=PvAF(EQU|5NYE7fab6@saoH|2jb$@M2vC@BnSofH1FCpEc)X7P$lIH2Iq-W zXNr=RGDPMqfB~e(!aEFv&9rEK1IcgnlAdeW<)5pQy#_}Y{UB(ShJkt!WySZtTnsY2 zP$HB`dd02WDjysjcxq^b_1k&F0pau(h{oY%O@#XkdcFa%$;Kkm8fI`hCk z^ABuprsH)Ct2(V#Jt)DjZB^qO_6p2lHGm7B)Z-hG4|y*1H~KObm(6)yF$thD)`QqRLZS6HoXi$fn>z+>J56{05jF*y4m z!2L(~F>mbd*5J?u*%O#x$sHX>qNu$a?XP&@Y+Qid{&MvSt%OIijpk%#l5Z<~0@$Yj zBjO5C#gJLSXnU1cm&_&L~>)12gED)Q} zgtwgT6O+AQ2)Y(XJJgphy<%35200`QYa2tkgI?|J;J_JZ0~DKqfdT57{Dq`j4-!~G zoGNwHI)I4+_xaHXWBTl@jhELx=qlhr`T>-I)Pp3v3Fd$+WfR@VNQ@v(DR9jBrwgz&rmSIueEjc{jKb{Tqu+$sB063?K3}+d*2Hy z4dGq-(AoHk_jVTlfpQX-$2+-@-sc!(f3@snjDD)fpXIWw1hL%|nR6}|%PjRIVizwC z>7LZA_4Xv@A&hZ%MXEE}#a^IG5f!96vrxf|`EMEDf44 zoTAQn9uq^c>-IzjxD9N8Bj45~4lvk`XOUR`}dQ1n)_ zz(iE6JvY!eoXzd#Qca6yd$s{Z{&U{A3-=6)*L zz`N>pQ$y5=Q|&q%nR=ecx&P9jZ>LK6E{zCAWWln%P{JHqc%8`#X6J`nl?0^SL}g)5 zVFO5?o?M9R8wN!RLaF(;o)8A^l8{cX3H_jK90+5 zZ(_8j+dv&`1Uq}kGQp_`pkyq53OxCXq=e_rg&R1I)npIhrofo0+yO)W=lncJ#dC4` zk3Bu%@7sxgJ5_3f47T_F2uh7zjj$ILl!x?9NI?J_+gkpnyjzLV5d9qFT7pNOU>?|? zt(%*L3Bo>+Y?aOLrAKccm1LgtnA*^h;&%0}g*F!R+$ae+fMoNIZIwRzZbpT})wFAlSqZ{mb{%zc-Q>!wQH%bV!p|8lCY5f44H@Kl@NxCZUhOQZ zp^Aw2pREBrS_o;quSk~R-3TEpr#WGDW*6`f5FJSB#)1f~&?j)Cz!*|eX?m0n;uck< zF)Rirb7hXi+F^E^!NGEBWXRfh1Y$EIV}s-%V?~yf=q|rdP}o(*mDkh_j?M6xZ6Hgf z>5&Nx+Om`D=DsrAZ_%j_;?EnxmxVK|`O`OE$8y_J{!Ji4yu7!` zO7jfnO1Cz}iDnHR++s^OakVgb2n|<}BA;CLX~!WaIkSR?nL)<@38yZ;okDl02CMz)VtoiIKQz_JH7StZD4$P z`$r6jIYRz*X0G4+46+z{$7A@2xlqd)shd> z$#n}5?*5(8#6q~g1C#%@)Bc^TR37PVfQGU>Ql@OD%EZa(08~pW*GkA?=wj4aLG+JL zr)@(@o1l|I7i2H9V-XPfXf~pTCF}V9Mc?4pabURfWm7UDw-U`Dd`^*SV4A2xevY{*buX zEP&I%`yhf82i9gsO!Ot5TOUBDNz?0iS6$s__|hnnk%y-nQkK9GJ3Bj}u!ghbhB+7m z27+@bY5j53)5>s!;$`ED{y2--p@H%Sg&%MiHzD|zavWztv%NB&sXO!n31>CApgc<+ zZuI#bt<%}Y2`Ny3Xxb(zCnq=E`qCb3B1O^OOW;|-_r;|2+nsB%dr7^fu|CxX=eC@& zdJ5$Eu1H9j#3=?^j;7eA~JYAvPFju{GPnXay&b^+0%sBcq0}jn%L3S^^}ulLIIJF$U8HxXK`2AQ=Wz=W$I7 z1X``)d2hp)EyzQGtpgkfiOsA5&Q}6?5dBHR*Es-$C~YAOlBEHxHW=nZ@O^?@`BE(w zpjoT}Ra@=u?grQh^fSWSq<~~i?sT7{Jd8WsaR1|TB(Oy~N|j8Hfv!A#-v(|%Gkjyt z7BRC@QO73c6<~$mz6lUf@ zgY^J+FBx4!ekhI;*$x4**M2w%OX}XoNFeM{dKFOF;Q5U;DX>n)M_jt1XBhOAE`2*A za;ThNAvx(Hj17);;-luSUOpX(1VwB6aUk5)=F+Gzz?#yBTD|{!v(7(SR#;frsL)pN zE{s1wy#c!r42IDxdeFI5u}Qks2bOoMiv5Fs5U4`Fw(gqPfRW$+R(@*gPl)g1L=wt( z3bcKPB1f4h=~pl`3jlC!xViWLK14!q|!HmiD@`Tn}en>8M(Tbod^k4Hlg{21?4fax4_9s zA-r6wRP1Z2@d;2{3-c76A{C%?RwZ@mVy=&+C$9L307H_c5J>Zvo}kez(-GY9(P{X3 zht(5^2-;V{#xP=H)$Z7x2lClw5OMhZn9v6Dz3TTiznEFWL9nmyoWW71UwMSajE_#j z5sSowr)w&))5|N8KhuU(W?Qpm7#2NQ{sU5T&zhQ=tT|~0 z1;LivsU=M5(A*faMf{Fxj5?rhEDh#URqXHV2sn+!bJZW9TEQ!WZf#_mncOSp8PspC z=hhmCF%uCAh-v!RT-)qjZB~pb5iQ72<)8MF)jRatsE5pLM*}#(j`_siE8; zUh!{tGt;v0h07Cd72O3w?sSiuMW&dm`XL3bY@HFLq59aV&DP;MZZ38VI~B$Y340)| z`CiNw@FhfUE7HnuL_S02$0jy4cb`A76z~VMet$&@TUoC=YmBEO?|)u)YYqNX-9^zd z&S6?3a$oCopOWggTh1T*85E~sGr%rWR-OTYz&4nrOD^APtr)DBPZ&ZFCvXC|>c2LV zTX-h;D?wD*EOX*`+wYk5mFYz|TydtW2#nLUQc|h}2~Rkm9b6fHZCyK0Qb@>cwVKCg zq|UDngSpUkFl?O!-+*QI`gtMoo zr$g}qbt-e{{psoi*tT^4T6Wbq!VSeAtV-QYz?^{Z;v1i1Tq22?b7~{k&zaUiJp`F`mo~|Z2>5oC7r}WRE>-9DZCDqq+6CX zHh5_vOha8=oy(MOB2)URHkNfmpC?H+S1nPmP$U@2#OFX+Y?t_SbNxHx#(`5w`GB_O zWaidi*x!;wfodmOK*s_wx%;hay+3Bn0eyn7|G<}GCwUetEtemc;iJNh!J5O7=o+boX*8i76zjt@#+pp>c$ zfjuB9T?GjRx#roUrkBKC>b@`wg*6hvuGVA-yy;W;`xE{gzV1)bKd^XWZweX}WxxjX zD;53=Xz%rl=keN5zr|SOvb{L=nk52Ru*wH5^CZd~tg8Dx^Tvy_hcAW|rI}}Y!`tp8 zHty|NP_+v6Dir*D8+ihxuei@Jfz3C>ZuIVy5vRmy1Yb^RiLg|*sQE^N0Fb;`cNIpb zBo5ChJ_)jc%5!Y15|*!AES;dE>ve>`5Pdm!=-_Dymkd^5&Tumyvs^=3ks?zL$ljTJ zWlS3rPWVIt4=LQ>$1In7qPLpcQ4{4NU@6u8T6Z1t7N5%<&7i3Qd7~?(naS4p0A6~B zRY;Zj>-fGL)7Q(ekTUyw%@@bJ!;y+ljo%BZJUSSsaIdV_?oB%|T-D)@3TK2a8IYkp z3G`xjH#boXp`s>DAQtnSRr<~|mUPh%`BrBj+&8$}*WaT7Sx{$;oe-h}I=-;!%|jNj zKWQ*Q+jDSm@GgQTr%`gh+mHUv70Du-;3ojspV(p0(f=cdHC~1F$1JQLGQrag{1@1! zbRQ}_Kyx@fXf&dy!`DD8`2%_O;*Yf2T3^_Ara*iG(F96-xr9|HATug=h;i-l0anL4g$W*&6(DmBEBr9H} z_V%W1ThLG4kBKS&bq>h>qQxwO!+*-jwxmXBe|^&s6h$2CPZR}7&oC?=6ozn^9psKD zgXqi!Y5qwd&8G+H*)t6U#4~7@rjR~<90i0I+Fg+T`Yet!eS|RC!g~C;22#)&urgZ> zMld9_hx`J>A)<`V;V0y)Y@y=jtH>e+XVv zMeL@bvEeSTi1XdvD(^k;=aJt=fhUN1d3eC8P`OokcS08w5bu)Ynq23h8BbZBH+cb} z%&g+hS7_14nrJ}6aCuKFWI$zpetyuLw4(KXVY5)bTewS@7+H5}k&^{Re?1aMc>VF#Q{SZ*v9>5nR2ZU8d{C4r7HHkS1W5n}bL zgJ9kOTShKE2gj=#V!jN|LdvGgkLZMC{{4CVSykb?jqQ=pmHT-)v`Qnl%Vi?~(}~;y z%;F+KMOoSKoSE5BFtc!x^j)U^el6HFiu4qNVkt-gcxgZ+%f|s-3AXB?m|10+I8iD> zALM2&8c4LR7^6Y%&~04_^Ol>dIfvQRP= zL%R}Y8hrYIsK_RDJCQQBQ|Xbi7NP(Xnjr1uWn)t!uW@8>@B;Ml)ovs9s!Z`H)`3-& zcJgLZrlt;6{^?H_4~21_qr};ojdRHz!REJ2`N|xJFsaJBCoj-+OuW#L)LQ2kP%z^g z0g5h&of&}F2TCC!SHMEJ=d0O4{iTzU0XyVYfjEBt@_XXr$M-1w0f9{~G1W_p6L+jK z)?PV$+QGu_$%V258y7ULYI$~hBw3+}5`B5{iJkVPVm=gj~~5ciMm$7?HG}Pn@p|Qns4$J%J1i3kaOcW zC3mLKen7`*>wWe{M-n?L8{1J!S$eD=6Vu9bs<6Rry_kk%$(N|RA>hwKb4Gj9U)6jb z%8tNby;0uKZ&`+gVaQqnc1x5cCd4jCG`B-=jh<Xp9%td5^{-OR-yz6gR~l9tU2X22VZt=&9A-7i$wM zLw^7T&7jhmxiLJZU&6f3my?59a{F`sO%37o^1 zlA||Pd?8vM`ahbXz<_*Y47IRC5Qnhbtq-hrVXauIM$(%A9R2PYyrkD;FLQ1-I3Ed= zY9%b&b?B_FPdRdMCXvc#fzYUxv;P}Y7`v39T38||!m`!{qx%`=cTmy(H;eRNk_g?8 z7!#Iex0`EnP;`1*eCfJ^STZlY4Wmsm0J$^M++49TaaQ)l#iztM&+-sUqO?B@3 z%(n83m}9B9epr?u!H$UL6dTS4k*6V5_K){O?A9K1T)uT*e7e1Z@lG3mT4>sf@9egS zfW=Aaf!a5Gt^7cJxB`}Gk50`9Dj@q4=X)z znCRiUZNP4;7LLhCq)>D=siP)O0#7|7=X|Tm`78SvzxoyOv3-XQrQ$lF9S~P5XkkjT z+T;I!@29mmKz#K|__ zk*cC#Qo3#jiyO=jjI>4B!OyKdQhgv_L0!hfK~ghLG!hrbf9Xq>mPzp2uW!c;T{b87 zX%W7@Z7PyRkMp9N6K*oGfQwL$`c(gnM>_jo^b)3&ck;dQ>3#lQ>Qjeaayoo+N&)FMA>_^+ui_Cl?kC@O!d2u2{~4( zY#Ld`#WeH6iS=kJ``+45$Av=dpcZqnn<32vALSErI)I-AKRt9S*K_?Cz=Inb8@;^3 zmX=Jpu>N>*Ng}Yz*GZ)Uwmax9+H|AiMaw;5SItg~T9`N;`x23WTZ_qvDz z@9odf;f-D&w%-VPcZi`{7I zF>w4_kqKN=>hYK%Y1v-Ke+5gi|AF1smhU}lq+XwAlao?L&U8wZY>bue`}RK*PM1jw z+ezK35{)N`>9Id0Hdr}WS?lVN%y*bw?lP>b&+KF1o>KY{$&=~m@#1D(^_pKO}_6;C`Jx7;9sA0m!W|`f4{zMZA~-9 zYcl3rip+Aw2oXAuQ=P{;Qhi$6+%H`k*=DPE7$-=J9i|BLTi7rQ@^e?m&P?pzmmPV! z*Vk<5aj~3xm;WXkeS*%Rm5J=P{&legiBbk6rAI-@^2v?;{)p=Hi3C>h*0}z@B`NCY z__*bDYft@z^lN%myN?W13=_@8VAp%;JkYwj)$!ngiUoqJTE|QLFzeD5dxsO3fa?^RQBL}GYR0x84h+MI={>D_l~u1nm74EQes)sGwG zex2yWyMK-hr4sG4cA-x3!BIbiX$S*mam_om>uROF>GEvT8czkIhd4LfA3b5*;@Vu= z&@2*ZaBVufeJmw#a>|VPHQj{PG$t{2wQ-%KY00B6Rek4co6FdG^gvM~YBM`{b%e<3 z(XBa7Xl~utR%nQtPxe?oswpyWcp`uSb8ydtmoI&vyw=Z3O$9>J`RSb*QsQ2PH8tG4 zyy-<$KZ3>~)SR%lu}-tx>}Kh!JIpiqC>J$-eSM7~DYTC~5bVSpH?Qvora%&&EPYxVWB5`ZIHx*Nznr1nhmrccOM$j}tx& zNKxxAE=5C6p))}$+~-nvHG@TyKru@brbMsi6MWqWv8APjL?VHsw(uY3+E=eGWokzK z{7NDYiIr9wb6Ir#vAO2pko3ao*0jBsc(bCuH-H#M9T*pXv+u;Pu>7j38`+n9+cyZ? zKagkFD5&=IM1_r(BzMu9eJ%&DGWMCA39Yqt@QLa)^9;DT@YuQ9q7s>e7~T2G*|B>M zX7PwDii+Q56S^;ydQkG76L~qemde+wbx-C^VgKIN(gx2UYF3sahXU!tknc!Yo;)=@ zw&H4yi4@*d+{K-s4!-e`Y%1JKM!YY-etw;|%iqs~m9Eg!sVS`JYF=|8c0Oq+{P!>Vp| zg=@VjTM)Rr%jlSd)U`$OwpAyay`7!0F{!a>oB6v!o3{Sko@i>^UNj(oQL7~`ta z92?G!xap zM)B-!RFN043VRbZd7$nctCXBh5s{hJy6#ijoC^2RJ=Tv{K=L|?$}u?i_+D9A#hsoqs57-#ffkUt5%r_yBuTD z+63Nst*l?8I8E5setru5`QS}erraNsr&5U}V>&0=^mDvv^ThtxY}IYDcdwC=5kl14 zc1wWAQ%9$Lv;X!SkGf$kw_h}xFY07+@q{sv0slxMPgS6M$%yGsy4j6j$z&}i2kj{Xs)N+dis+zW4OSas|X zChZL}rw0??iC??R!}4lr$(!RV8qObaj_i*(dIX|N9Zqx)hCV3JDpmeW zgvS^(+Q3xt?Cs>P5dN0m)i>k;5vK zt|6Y<+U{Q`RsaZyLw&!`W-XH9!*Uws8;70w`Eg!tm~!Hd1SqEiFgi^!Opp zS;WT2rxiE84GiZh#y2*qt_R@W?NE0b|Ls&NoJaFq5}Tu`dk(`;;h#5kKYy!*)q~bm z-M0%x6OLRTruCG$4iad;@bb|A-&|DjjR>e<^wXz322M26I9?V~or#GF(AtB|LASv= zX7C^!&e-?eqkC*&_k(lmk7~%DufU<_I0lTo6ZyQOBWjx;VpP@)98_vOoQHS~I!`&d z09CtGx7434UaSR`JUsktXcl2&{mhLdR7M+HOQ;L#k#cH$JX>KOy+fu?gFYPO3UV4J z0xt}9Y;7&AAoh!0`lP_+V^Z)Zx|U#=LPRpB&(EtL97U-v?XhhrH=#WV3b!3fw&GbM znaV-?l;@8-abb#nshiS!;lKD>=f4tJ6`y}F~>3G<(bG-gFhkO&G> z=}e4fzhC?br{_qf+52Amkapzmi>H=8TTtKIR);^!FY<~a00CLTS6#xJL literal 0 HcmV?d00001 diff --git a/docs/diagrams/sequence-auth-refresh.puml b/docs/diagrams/sequence-auth-refresh.puml new file mode 100644 index 0000000..1453445 --- /dev/null +++ b/docs/diagrams/sequence-auth-refresh.puml @@ -0,0 +1,14 @@ +@startuml +title Refresh flow + +autonumber +actor "Client" as C +participant "jwt-demo-reactive\nAuthController" as S +participant "Keycloak\nToken endpoint" as K + +C -> S: POST /api/auth/refresh\n{refreshToken, clientId, clientSecret} +S -> K: grant_type=refresh_token\nrefresh_token\nclient_id, client_secret +K --> S: 200 OK\n{new_access_token, new_refresh_token} +S --> C: AppResponse(code=0, data=tokens) + +@enduml diff --git a/docs/diagrams/sequence-observability-flow.png b/docs/diagrams/sequence-observability-flow.png new file mode 100644 index 0000000000000000000000000000000000000000..629c7ad012fed492d1a0a89eb76c8d9eb4343811 GIT binary patch literal 36456 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

App: pull /actuator/prometheus +App -> OTel: OTLP traces\nmanagement.otlp.tracing.endpoint +App -> OTel: OTLP logs\nmanagement.otlp.logging.endpoint +OTel -> Tempo: export traces +OTel -> Loki: export logs +Prom -> Grafana: metrics datasource +Tempo -> Grafana: traces datasource +Loki -> Grafana: logs datasource + +@enduml From b5291e4bbe6b2d3529de0ce4fdf52900dbb2554a Mon Sep 17 00:00:00 2001 From: igorsatsyuk Date: Sun, 31 May 2026 17:01:43 +0300 Subject: [PATCH 2/4] docs(diagrams): address copilot review comments Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- docs/architecture.md | 2 +- docs/diagrams/generate-diagrams.ps1 | 4 ++-- docs/diagrams/sequence-auth-logout.png | Bin 23156 -> 23153 bytes docs/diagrams/sequence-auth-logout.puml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/architecture.md b/docs/architecture.md index f696b16..2c2c87f 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -5,7 +5,7 @@ Diagrams are stored in `docs/diagrams/` as PlantUML source and exported PNG file To regenerate PNG files: ```pwsh -.\docs\diagrams\generate-diagrams.ps1 +./docs/diagrams/generate-diagrams.ps1 ``` ## Sequence: Login flow diff --git a/docs/diagrams/generate-diagrams.ps1 b/docs/diagrams/generate-diagrams.ps1 index 844090b..6a17ea8 100644 --- a/docs/diagrams/generate-diagrams.ps1 +++ b/docs/diagrams/generate-diagrams.ps1 @@ -3,11 +3,11 @@ param( ) $scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path -$tempJar = Join-Path $env:TEMP "plantuml-$PlantUmlVersion.jar" +$tempJar = Join-Path ([System.IO.Path]::GetTempPath()) "plantuml-$PlantUmlVersion.jar" $downloadUrl = "https://github.com/plantuml/plantuml/releases/download/v$PlantUmlVersion/plantuml-$PlantUmlVersion.jar" if (-not (Test-Path $tempJar)) { - Invoke-WebRequest -Uri $downloadUrl -OutFile $tempJar + Invoke-WebRequest -Uri $downloadUrl -OutFile $tempJar -ErrorAction Stop } java -jar $tempJar -charset UTF-8 -tpng (Join-Path $scriptDir "*.puml") diff --git a/docs/diagrams/sequence-auth-logout.png b/docs/diagrams/sequence-auth-logout.png index 771db076ce14b1bf345f397a8c74e2b0469a9f8f..b7a308a1d1042bc0dc4de19651d9e8089e966007 100644 GIT binary patch literal 23153 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 literal 23156 zcmdqJ1yGgy_b+T9B}yqFjnXX$NJ=9JO2byVySr4nK?!M*l5S8^2~m)45D*X$Hr>r# z+Y`V4jrW~9bKjYF=FS|?nX`rce4ppLzH5DAttaG(qRchyTi6#aT)6g7R#N%Gg^OG8 z#|`rmd_q0Cav%P~>?Eb>WN2&WZe?uZbV0`0#@IpM$=Hb6z@6I6$;r-9fP=%%O5euG z+1iTT(AL_eyMqe8BFtP>)9IhjFI!SbTrFU(Wq5p9X;NpeW(zjKrU4z(igw(NAB1;TgdgRJ7>#R zMXV&QY}vgt;bW__<*u>##c0DV(oUR&Foy_%K5>bqty6V9D$!f)2`ymLeIU3b`$TWcbd6uZUdieCK{t23?ZnN);qqJ` zW6Pu1>lfAxme(-!&1cn<4{;v^uMA{29Hu#KiT%O}ebMntrayh0UoBnA;;JSQt z`M2-W?%s)?%*_Z-`y(bZY@risgl~c;0^dCAAF=feZ^RO))>Ru$HN)pP*7rN@*xwebSYYKx0zr z&f14{{<+5W+mhm?w2b-Px>953xyL*`zTc~oyY3{9oi^%DYv@$;2yF{J-b-{}=dP&O z<|oB^NsTGk{4nJK9-7#1(tZIkJb!I51Ow*FQWjYxni!tT74uYT%;sY1B0@B=(VJP$ z@bh&qD;4q3^fjV~;kQ??{||qO>v5V;NJxnL*~wvnM#(`M$h90PPUW+m%8&^1 zU*h88(%0Ab+*@(qoNen)736sK;giNUo2{c=OCv$MpBFqsmN&LK;#k_FsCp7OsBV>d zAG`FCw#3|)fe(Y!t`f0+@H#A)MV42+J$e70v6`HUDvH@=vNpgt1zYcMW2QxjK`aaR z&$Z3GM~bz-e+>T;K_-zSn||NXWZ`?Fmcc-d!e)*4@!oRs$-3`(i#!JhN4zyG#_g~L zS9I{blAozgm4%u^*Lkz_W;ms=2R~M2v8sH5deO$#@=$@M%}6mteADUPQ`YtACaTU< z0cV06kMWi+nx~dtltTnDmUWDckrIfyZ{6WG=}8kNBqXdb?O9t`2(-6<_UzewM_lTw zs^ZEJB`qX#rgNb|=I+LZT{sf;q4L!)yP9bt-be5xe@sr6tt>7E?Yy{*VL+PcsegzT za~-u?Z?l}kQ)8xToh|pa&Q6cr5*Z$+?IK46v7{SW)C+$iG{#%s7do>Nvp*YsI5Y0C zI$l+_yfxpcxq#5fyVA)YVb=Gq4Ynjkv);}Aq;2s@0QOCXUti(&uZoSK#ZdlriQW5- z3wGOg^`x^(ccvOVDgiPg7%Z*2lltjG_>C2S4Z9LN)a3E+u zD|uo)QO(u^4+QpLq3)f|K`nrfPA%r@*Nt9Kz=$)ZF54_ zmT}E)*zKpg$dV?9d!BA?{MnL7=BnrB136`(oT@U3A06fmh~4AawU2Z&&|)G{%luS1 zRj5@Fbp-+!S8->1+wpFMBg3ON5Y7)-d){!(!BfeWPx#{ChkotS<;xXD-c zuoq^v*geJZH<*--Rz}MdzagmZS==ayEl9jw;GAi}_Es*ASys2&Dv`^5W9psMRekiA zvV5{gN$FobqUYfe5vRxNO=F$M`|B-n@Tecl$u)Pzv1mAmu~;{|@2zM(dzP}}aaHj; zX9p2ol2jhi%dhi@G|` zsd{$^7?NAJn7bhzVf`QGmwz)^06HQn*@dU5n6k4>`z`Sp>)`pM~#ZG!oJ} zb$b}ZwVcr+dY?8fV?>7W-Nt-L-A}+$6={D|s-Ky~OMKfoJLxuPf%E;;iQ zcAQ^_^9dPFsgPP}CrhP~Wo2dCiyW`yp7EM=A>8(?DnG!NVA5K{UsafN)jH6LS=fzz za9UEg+fcQ~hqNp?t`{-v=jWGwq#hD;yFE0F8gL%Q4)(3&HwTjW4*EExcenOdB{#pI z)|sTAJ^XpB!c^ZSn@jM^QcGZjfa5};8#n6q*vfQ}(gSb2zrTUR8#Xt$4y#S?H8dbt z=(DJ(j-sIb5n2Gpy2vhKA?Qm)!fe)@8BOxvo=)2$_v? zhVBI8-+l>&h+*w=^47uT+~%C0Oe8sjHCw<=6nR%_>MOl-=O|(7YDpBLNEN9wN5>cObPPtjKND@Kb z%L?>DE-P;4SDBPaAyRMt^%K-Z6L;tzy%Uyq_LlOwd+tjMOL`y`w<G%S`{YA0?zEdA5FTdQ|>$Z92)b*Ad7+x+u1WXu2YF{XlGO2a(Um3uIfJjY&mlFhI58bfiiveIl@%&d?9%~Ypf6x z5(neEEV!3rlI$;ErnIXpkV^w)toRrbM!$Tjaq9GO>Wn*e9zQNg6K;wM6`*HBvt&?A zX*5@fl|^FUrd`8IyzhJFKyKK)yuruHO3UwtejRZ~TAK0`WM@x*V@iHIlkv(YR-QA> z*UTe0IXc89e2%Rtc{TDQ+xAw2q9d7I)`VzTeYbv%IWG9?*2d~_o?bnnYW*gN-Q+NT zJ?V~6)Qe{uqWL3q*fIkGjz{~``^3h04ceo1{>{QZCxANy$I9R9W+4(Lxw5ob2L%M2 z4!5qwr@TVI5l21rR9*i(jgrr<)2FQj1*&=1+so#;3||6>I$W*scKr2KsoLtJQYL+{ z-0vYI24BsyB19FFS_d)dhvD|9^dw==Jt8)de3e|EnP$qTHEVN2_iTRDyR7cBsA7JN zW8q_F(;mmI5)>3{>9d-+csVdr!0LF)vkG8NrOl*^Qg*JQw%C2Og2tdKD(^w{JORn$ zz4W>|Vw(xx4L{slnb^FPRQDacs;!Es6F@6j%p5qA0y_a?0K)JCod*{TW1|=`m8= z@YeiIb6XoAj+?Ay<^#BOPD|!^Cw@OLF;84&qNHzceoy4L3aDlpq9cpU+=W6q-qm%@ zcBDTW>0e+pU3^=Hot7bRRQ99SA@5y1;#aH08Nywe}vSzP_*UxWXq`y zKF(JrG=H}{Qlg7X#>*-oaLc!hRYw7j{<{T5J8mRTJw~o&B{2Ziay}L(|}>gg}W{bBfC+&ptZvnfHs6 z1YJ)x9NI+Y^Dm=cC;uE@_B=uJlV%!QX>deCn1bC)jzT_GD>~b1Ip-&r5tvI4$cvu( z21=&H0MhQ8sN>;C4=O|*9QB-VQ6kPS{?)3>uZYa-?i5vUbB15u;L@#G!#JTN$*#Ft z+y3!Z_bBJ{PiKKCf9`B0vdm&=IPw)c?;TfK>9w=7`4}>(N=4Bh~>WZ)p zJHOI?^70Bx^jB^Of0u&|d-TtujDttn@-^kAJtDSK%E5l#GP$b6o=n*7eF9B{=$R(O z#Kb-U+DogUVRd0nDYs0%z1nRJAu0SjKyiM>xNsFk)s(OFIXl?}fL!LJI`USGa7p1cZ4rxF z(5Ca*$(7Nf(62a5KYz__%})eiyPs@zat;Jy-DFW;8(1{;`$=`ff}$@+fqJXPVo17y zUFoV8|Jz~w)1zxIAC44F=s)qU6FEPzdb1bFEc7P zH-X-@P)s`<_tZSQQM>uK3M066ghA%@tXlxt+XgmI+? zZPMiOSFk_KMYm{iYH&tc*xFKg$x>6uj2COmxH~T+WPX0Hb=!2c`(TiD0{L|;A-);U zTsu#IKigs6;@~Hf_IOWE39I6swzhUglryqA(<>$N*Z0H<}32kj;Q%Bw~rvQKyHE1yzx-PEPs6|JP{Wl>=z4&g$JK8@JK+(hK;Z>2s5f5fx(>q5)1T)XGbdZ~yxP$9Q(bpX_}TI(=N5F-*4UuF!HdJrWHuAr-1XurNzdM?n%(QBJn*M% zzLh;-Dch;kU+ZLoV{XoLt-(_JXsv9t)_J-$WB}@mkSlwd@SO)tO=GE&s+nTNw_|J5 z0-T75MeaW``~8YZWg$iAaGl#!Q}!uIx{zh4GTU-dl{6A911qo3V}0s0U!%mFQP_dI%X>-jb*Lm%Vs7y~zcft}n4@*u)ICiMv#zsUuPab_>+Kaj%$k z#F`Hm2FMZ*GbZUsRFi8J$>(}-epMKb>F=!?Hl7ytTM}Een!Q0qCF&)#9W>vuz*qM= zm^p40GrO4Yp0o)OaeR|}kF`)TFM0vs8?T_s=k!PdH;R_z z8tJ1b-)|}RxqZdMR`4yOpZU-9JU^KYE4B)~ycc^@Rt1qNreBT5;};j$LlRF(av;@} z5xFS82#r&? zz0bi6adpQEerF`12m?8~fmO4=T0u3fwz@fmOb28o)gC#LB8n0QNnBlRVTXOTV zRmD6*ex*D}@g{_Z$38kPTttsltNcyLrk!6@nq0u>#_G$m3nIJAc;Hbj5h~>}0#d_$gz5Z6%SPxTRLs z10*h$NWH^+$M#}RKnTP>0UMrwfM%}q%5SZ5qqgU%xj#u-5?Q5{HQ|Ko3a(FjzA9QC zLI(Z1z1MWe7+V?nUNuh+Ih>A#Y#wWPy>wVpUO`7L%!l6{;ZkY5 zeIV9nJU?DFU7}Wy_SvcFMe8B2&?_E9p# zRcWg$Im*aXo>Nxjj=u~=i4vnhwnG*|BWd}wedSpvM+@z3+>H-TOkzuuEqA91fK`dQ zvir1!DjaUjn|kNRPOm7^T7@XfFgiE%v$C^_D)Nl+JfiaICCT*3CPKV(9vd#_EZOzL zzy*Mj?R$QnO=m~)^<`HMj*j|;BO^nc5&PRL z6WQ{(O0zplP1_Arb&UlDERjTyA9IjLtnkmE?uVkxZSxjD#IMh1L~l@$99)UCsFo9W z`cg~{SuY(EYz*gV@-63(-<;XxlJ#f`P5FA-XPzSM!>zb-W5=Rr9}$b)lb!Kw?fr3E z1?zX-efjF*FE`TJJ==^z6X^Y}j*bOd71upQ>a4D^_0=j{UW+#qrlx-DxY*qs`}_Cr zmshT)3A#pFo(>ggkT`84xk3MZTB`Rs@EY0Z+bJ^-H;%j1PmPR>G&M&-8Pq)b_L?E= zCQD!sPMSFX^hm63G1giXK;P%x8 zMG4HTvq4O&mgroLJ7HC>eVz6G_AFh+2RkuTg+A)4x4PODsBGC~CM+T{wKN^}#8YYs zXDo~pR@wzp_C&Qc**%M2OH1y{gG_e}vZ8Qg^R(++CTpF!ZiEI0KREjI;N(55x6cSTj=Q*S6n@ZbdGJzLSH^B4VOqdxe z^hd|VNXAr}ArEo!ODT;Yp~vfk{sY<}FTJIA?^`j}2GHa|AT{lD!vCUA1M0@gV`T70 zM`Dflc+niXK2%gqGcD~}{5gs}!I8XZXsT@t(N1v-`qIeby;Z+R8cQVsiTqu7hz2_i z%!zp_xwNOB{V*OOWuhpJ$+}bSS9l$6StVAkm7>HFmpo@|{WpC_s}nUDb8wp>{Q$`4 z=H{{y={)AjfK)|%$bK0i7Hc}brwLC?Pp7lJ9;P7r8!^Bo-+JsWQwX};$N@Y+85tQK z9&15ydk3Z8dXC04!Xr)K(9JiS?CFWBTzm76IU#2mL?H{FdJ5=e^uIF4XaYb8-LlemF`RVz~phw^MT`i zs_2ZsCm7esHLF*q)1#ElZiW#R{irZa|4S*8Q&#Q=3Fu2yx@^q#7d5wRKYYNo>Pot2 zNw0_#Umf2ZO2Tcj5_}24vs8mM~mCtB~1cs~Y zKIEgRCg1d;fL^eMrm`Nsc3B;7*zOht5(TjIV!!Xv5`#Jd95-wt*01p~UoDMxmIfGT z#f1ppV%yu>n=$()_IHW3M^b>PXC8Zl&i^K;V*yrUH7`9kqczgc!>V>!OO>;i5 zgJ}54(H=pTz-Oz&yR$Z2^z^}l=b!cT3czR@f3I}gjl8o&w+SlOJ_N#OepXf%STonj z`8hwn@m>1y(GgN;0F(I1$qA*17o(zDKsp{t(YO#?7(_hIe2dhZ$-{_6Hk$9RlDw09 znPA`Ci!@~{)-VXnPY3f+1tsstrp4 zyuU+Hx0O*Yo*cN$Wpo@89y7d-*e>&GIy)gaSoPF0$# zKQ-DdQTwzNnAk~zb_M&oaW=83qWXNn=SY2%`5tFjN7Nw1Yt1Iy$?=8!r z{I(w$kyN5*5Tg2TQkYcef1mYd%QvSmBW#EAZwlhN?fmWopHYie@k%HW8@3Gh>a5d? zY{Te@8e83r;UT_+xI85X{J@0u_4Ou?U5m`OnmWyu<^%caMIB+{@{qX$TH#-1v5<4? zA;f!YQ49P}xa{C$?Lx5<8mq{72{uEZHw)@uVt#_jCwTk7y1ABVeaY}9k!St8Z) zRka$uK9*|gh@YRG3OX;hI-+A>@PQ?%+vKC`y?gVq)o3YAC42IKl{{uemdP}|Q>c$1 zCCvk!N8^TSG(eVvx@TO&7op# z!RmUGu3LjIqoSM6&&W6cTYRZZqmw7naZ4BR_Sjqbrfuc2{rk5WC_V9?&5p>+C6Ubr zA0xrR{qe!xFpV&m9%B79y#fJ!Jd+AKA^{ba{#yU+B&4%00y46zjty>`;`QQMNWH#y zQs9eXc)Kb67FU=BAjnrauri8c(jFGU0oNa9TDY+fDiAQcGsKsP~Nc_E58!*D2EZ_ z{H2l@YQe+yN3+Yz9mU^Ca00~xu%XJ~D0F~72Kke#^89pvI`z@Wu(4y3H7XNH9+{(B z0OFX{UaI`Oy(yqpbXl{%y`2G`KVD)`5Qbvp!MYioAMGN<_P*0dKU=j zPKY z7kkpTZxm|}vNUM7t}NhW*(o^oBF4^}8JW~Ec|TuB(RiWq8q!+1@nCn8QT&2YRwW%2 zi&&@rT7b`iuK|-OMhp*-_L&J}zE}W!VF@i75LYV$xwzdXI*ndT-I93za~avys*U=X z*RFYk8V~T%Icpbe;r+GArzuG>qfNfPi`}WBCmStrRHqv}HR_Xkug7^Omuf(5Mp#U) zoIW@LpT_R{+JygU#^0s;fB8Q>4?vAN+G!0TJY44;a^L#((9G;NWU8XN7>PZtMIw=R zsWeZ;5ueg)ZJZ-cOnM!}YtH=##cd2t(g~pEkN!RHR4b8w6ZT5dJv9427EIlJJWI6c$ zb6OO=zo`5taUQFv{)(-tfDwM*Gq1rdu*bt3HJ^{cor=PpGKsJb1Q$K65f_+MHJ`QX7PsLoP{ z*@+jQ1;UZ=+3w<7;d}q6qu(@@8*C+!)@Sc`Ax2a9INKkReM*~X)cgDr`zEvA0Y|=k zD?n&Ojg5A`DpR-3Kvce$3M0~l{uqaNRxOdE-B6Ii0r5)y00JKBXW$RAeF2{e5>Uu@z$?zgt)l4)$V3y zjJ&>kD~UVrg66A&Df7E4yNg}B61g!ffjb~$Pl8FbvJ?b-PClrwDtV|kTD|Cx*CVW` z3w{5kEsPj=UZ{p7p3B3)-XqcT6F;s&K;jYfMG{1Kd{3`L7;Nk^lVTi=H8dH?SEao}faX8S?XQLH`5-5BI9ox$;a9NwUvXUhz+C=GBs}d>=~&$l zcKRat><}Yxq?T<-8jqG)+_rtskJJ0I%mLN-_+C{kv(MLg@BlRUa9hjN#e}XCNQ$ue z>CxY1k+VMZkIK5W@z6lT#yt&H`Dnk3a7ex!K9W&)AHZll6);y*~e z=E&zQ>?k@K+E27GGXZt`=57srGp#xo>obBm)`d$M!|py~-}(8@=b}V^5~o!7LZbwP z&b=HE<8ir6>GXIeb04P*I4^U4{L1@4H6avbp%kbUe9?XP5ZzBKzwgEn?a+}w7U8XX z7Ojr?x=#~$v25$;SC!oV+D}Lr?XR?@4zB+^DU^+&1+ca-#@f0J2$ADxbq6QIIde&; z=CSDMAY=ON5I!r^X&CS9?0h3$)G5-M zlCZI}q{3s;pY>2W0G$!*y1KYenhlTekT3wOLfR8u%|__mQAIN4OC3CM&T-ybFZDd5 zy?s0NRY{Tjgkh{D!SYa+Fmq2w0^5`ESI|Eu?{afS@OfklDcN+Z!#|ZaO{uccVP4LK zAzT(%Uum)3O!Lac+0qNg4X+A^jkzU$Q~927MOwdU8yIi|!1m>a#U$fCo})e%greV* zQR0k#SX%eU2p>QHn_TV<5xs4|qBAYGSy{g`y7slad4=%DRaaP=Sm`Duv{f z2ic%4?^|hZqCAxcdzh68c`aC$H5&|t;H^m0pmHtB$% z{3f@}m)Bn3ms{mR4Bsi3$lNLP8oSh0E$PCdGZ#+E?XUa#c}o!P+*}b5RNxwfIbpJ0 z5Mej|MA+jlXm~0sTao6;d%hB<-x7GbJEA+QIuX-1o_QYtja7fvx8Hr4QcIkIif4B8 zL5>N%y-&tId;Wv4s|G!o6TyE3Kn~O##C7qjf!8Sjw78B%vA>ywG}PHyU@??WCm+uv z=*AEn{s0HGnM%pz{8R2Y{u^moFO{7_@3((HdrE5APmdyFBxgGndbLJQgceSW3}t`o>=r z_79Qtp>B?OF#wNTD@ztXZsz{K?3SNrrE&MM$e|>U5V6?5gf#N%X-Di6v8Gf-V4K_j z^4(gWCVgs5=f7z(!UB4cUY6efx9R1-G8ok$olC6w2bTjUie>H{dyRy zS?F(?3{T~a%!KzbXjx=@Hm%LTC;=%m=vZF_z>Uv9m#Mk{qzK3Zi=tZKJ>@(e`6uQ^ z0?|j~RjWHYlK(Jf)Hi?_0&&tJ4qauhRYIdaM^XraHlv)96t0}u*w~oNYfX^L+;S^V zHA!obEOFROxvn}jElqPkA3C+ri=8*1IkHA03HBaE4e@fZquB-oipXxtafgjb=P*?l zO)fx_39a=Lof6LYteLR%|;vW2WiaAeIUV34vM% z?CqhfEHrhD)H)-9T{9PdM{BZjfT9W~xCiQA^3Li6aflp3!~711!h|&J34}S>{mr~y z(6Z8mJv-t#COB1NA>;wEGqSR-z!U8+`aW#4k9u&|Kn=Wt-gyFYvL%(M4{QGs@HDPb zuee75{Qxk2AAzROFl!_d8P*lCP|RtE-;;8m@V0vVo7h;@Qav%cq5_^*2|3ocQOI{~ ztr1Kl5DaLPiiG6r0HC#uEay1st^P{uJ6jl6uH0mQMl!bs z_zKiJoocVKKrv)@cQ}H#cZ@IOv2kPKJXXGt5;8 z0nFRu2<*+YCvCGzXj0s8s|Z@OdO^NOD|WEf&W>p=YYL3;f-Y9b%ojfb+d2ZG!wP`N z>ahHp-!Qjn_jhHZn!8B_lj4PIPJa}kZOsPT=~`zNC>+pR#+4M9_@{QrB0=%!OcOqa z@Q>bFO!xKh^sL~Zj0<0aX9hxQ8v9Gzn}mdOK!Db^!@|RzYooTkEo74Jrk2MjbU$kdf8tx1eXw z%mC^F75-WAvyZ^30s;a^>4^19@$m6q2mxv7N*DD7us>!rCii8fKl^Gw@U;#NEPR`L zfP-&n<~$2c|gG0puvR(Jf*HruHr8o#bDErIu`o+*CVABY8g zuyLg>W9K6TgMz}hQS#XK`;`fxIWBTJ&uOrNQ*&3lKdXcHf_~nR5M$}a@u5~w6ufsXJh$r&@v+X z8zY=X>+R>hz#gs+7bU-56934rGJYY9B6k*-X`sJ-vP=L7Dt|^Ql=0oDy*|0jJ*=iYhu= z(ex!iWz4v^Vw%E+sFXeRyNpE}hdM`9UO+bNJRpCtp0LMI_uu$8@y2<3{_f4N^MLH5 zTkl4rBlDXyPO;~w8HkuuxRQ9wjH?rH8otId5!RjbPql*E(3;5l6A~||6p(h+n{GcL zVlkFeq>G-=gioG}7ZDdQ?24PCfr92p_ zi<`T9Ku{2sh}Wo<$r9R)N3EdfM}>qyi=hH^*7u}~a@fe+^$HCEb$q@n+4baLlhO1q zsp^B>%uA)WyD$MTD=`b(UEUS^I$2oaSz`C!$DaXH+~2MnBXg?~mrgGB)5eci-}|u` z-vl3WY(ZSp=vK2{t;6I7{txQpRx9X!JIh0zZwhxoNk2X~5OUl2^u8A-UO~VUJq8~- zEhTT!rfh$HFSL4jq;?GTO_CZd(7aa;)aXnZd%)vwC5RBt%9#Jn!pd^v&f1S3^~e6l zFYyR1?61UqhBV=pXLwtxh-a)p(^AofAt0ORZ+JjOcky>h=t zAZl>KJoxLN+C5cP8A#7#hUt@R%(NZeuG$I7i5btN7-oWK*jrB2X={fjW-UR zKo{K;oQgKvh zXn#p>CCVA_kNjjdIWmG01B`jwpHEItQ~5cK$*&5ao~Zxr=9KP6{(xT5!(W6h#7z_r zV2#Z)&j+U67b!3&MFJOTQMLj<5uh^=f5y5tp82E73M%^mhH|-l+QDP|d*6rpUw`1g zBDII8gZe)^4I|3Pqtn0_)Pw&qG{8}4Mj@I1X(;F4&HESZX*ca(#`hP<8>@ki5AdA= zKYZZd3^g(^G~~1S;Rf1@{%iypU+EA$+<*|~r4&?|;-N{xTmr_q0ugfPf&{ zVX>P+jD7a}p+fEi5eo6OFMHQPB2}aZ1jA#{in(c#Sq5G%B_$;&hyd2W)sdHz6E|>k z`%qVRoSW_wss`w1F)^;66pm>-Gap|KuINdrM9}rGW3VtN-W64k(?z7XslE3Is8C1n zV7Z`V^x2UAjRL_xz^z$mcy$6uVc^3I1kNZ_`4{sC2X6Z4S&Ls|=0F(L^f}z3`%Xzj zwD;@VYZxaY7xnpJmh|dI(ic0*PPwHN7}2?chDL&ezDGc53sMBgoCos7&I>zGRRI13 z+A0Q@77uV=`coI3kM|&g~*-o=l{fnqQ%}S90J2Z zoQA#iY2A9oPp}Oz2jH?(a_few3 zqv4~YUF6IT9Ey-~d}ZZa)I&}YUVh@wyaIonRdoogAh1d=-&V_9=vm*#Yoc`OxxL; zIZFBJ~*bjF|<+#od90W;g7~c(>ru@GZp%f z-G#1LO*c-CjU{UTAoejnTIeE65rA!+1FOCH#NQjW(8^iZ`cjK*xi}*BXPQtHG@Zd9 zYsLYv4E9e7m=&o;fUhr!NlbSpaL5FLA@t$n$H@lI5i^1sD*@AgZu&wil!Z13)}J$ZX!n_q${l@K3)W^V5FJxg`f#hDp=0)l2+{Tt?~#@(?@ z1CUtVuxVPYa!oZ+*ICD)#dKEPTQzKt+=cA{QUSdkL?zs)vg!9Zy1$d6mkWK+_x!Xb zU`ZT)AR#)Mx`8E77N0pa?em{Bn03q>xCogO@Zk2=7PC(M0VpI=q?ir2SDjFMjJb`u zZ_O*j0eUrPWMn*MPqJiVU^)tOi@@cjPk=P)C-kNlTDAfEyDs%#@fCg)J+ON76kFjR z0%r<3AxWCVEVM(iD!oG^6!`t)BlmTmz4@%ZJC_jEQO0j|GtBdxUzQqjqGpg{OG-*| zb8}_x0@+YK%88}6LQNnle*uJxs5Ap%P|AeiE@PX`2s|_8H zEAI-%i1q%H9l7dkS%Ciba+nATx4g?99!vO&rtkYV3I2abt^d_N{-3>H7=08QC5Ke^ zKTb*p{BwT)=EW$Z=FI0UsJ?5!>l1?gNk61dz|B+nB$?+!L_)%^B)a*tw z6~Eo5H$TGvJMNyq_L{C^cnY=(6wzugK!%`HBrvOCo06P(Ng?w3cwRWP1YY}(=$+$i zeh93Zbc1)UJxT`E>MR$__&M|vRJWG%&UmFhIBbW^LI0{@f61~iBp7NB2`U*lIa9%| z@7ZB43_Y$i3w#NG#sl^_uus5|pY?n})FMF`JYh;U<1zP!U1WH)GFevxX%tMgm+Pg= zP!HfAI4!CM2D8A$x92;Fsi<%R+&w)deDR$AQpodEwHihomweoB-`FgN{3 zR`&Nq4abz4nRc}oT@hsSI-LfO^M-Zl+ajKg=VzYP;g^ngmRdCK-%wwl@b~$v#{&8M zIdu|XVm+;gNZ4DZXCF2|{Vf%;9_I-c&=MHLa{O$(LWljr!-x>1^h`V)sSLwWQp1@y zZ%E=X5R!={ufXZ&hB-o;0L_s?t?kxUa8={vq+g?4Tmmf*C>ELv5b0%-IL^S1S=a{N zKRHGrm;0U2d5s<3=zhq!2;{6h4%PYtb}uU(6H^}89N_jIdP(2|YW{+C(HARf|977s zTTe1y3E*X~n__sRgcFv~`?3e{^A;G|u}muECSBO8TUT$Vz-Aj5t=hgb`u1vrqAul< zGZEvH=cZS&v74VDc>5SXVESd)K&zNOBWtM;2ousnSI{0Dk#HD3^&)^@xsoI3dseUf z?G%vBU>@OP-0RnEh6_mt1hDl({#Gq2A7zTKlH_K7wweebWO(;LM?|7p`3^cd`j(`Z zv^cVSK3&NDmAB{j!>vw^GOTWN|FyO8DkNZ$@9}+Sz!$dE(8P=$S(WU=faQGEyV4)v5ica4?+iS)V;K;5Y=lUNH&=as3fCJw`Qth` zS;|2catr)RDH)T4>DND+$k*bc&iM2Wc#tL?fMcu^IzJ>ZTr8p4>`K_*47WTwUqZA&^qyKGQhOUdc)KKJZAFwI5n<5~+i6pjGMdDIZSx$S@qYD6#jP^MIZ=cXn{Fu??0_ zerHB`d3!@R_pFh{DDcQtUPlQ8?fPgD^DvqSk|#8a5G6aUPf@5nXhg~SKd#-*6!5}f zjKkp^mr|_0U+2JvTCG)4rOO>?O>uw-XKewkCME-vs1?As z+QUkJ$Ps$aSjW+|4J6E5Xd1j*_2N=0nmViIs5%VeY1Wv*vyle(~6H-iYjJMbN(ob z2Hqg6*_sm!IPZA+6RN{s1Gxe>b+*OP*47pfD=y(LC-L>)`xD&F7JqDO5cBiFnBU+h z%W#y2u9_ZU*3!qKh#X^Kc0zw003Xr=Z99O2QPG&Mng@A@lAhD5=PRz<9T3?Wc!mWQ zK^O*EiyeAEU{0UYjiCZ&X|r(6vz^hY>Lrk%%^9I)hAY7>DDZ0eguV`yZ+xmo5pU@~ zPoc_YFPW~(*H{id{Ksfs%6ER*%k*Cq_`f^O{wt&Wm*xIT2me3P{zIIMLB4=7T{7+k z4R5J*k<+Y@+Td_rt}&>R65{kx6oNYAgW*KAzjxlg-6UiP{HYD2ttg0<@Gf{qe|6kB zjJV`3$=N&E8qIPeXGux_4-8iAzrLwJ1);NM2pGbru!cd;BAP0c^yZA3g`H$#>KFJD zNx=X^u`ldvD+6xig+s#!_OwyIK#Wf~)ni1B*v|pgAB5Gn8G|c}y~9cL%Z5QGa)ZDD zj&+q#x50xBL5+D8)oF^Fqa`vw1#WWBa@fhip(CCxxuU`msxiO{{~f3^G@C%I+(H82 zK!?>-K8NlJX(_1?6)cSBf6vdp899P>QyA&*hiHTpKQ|w6mAC`iKywu-G9Mrzlcc~& z0suufHF^ooKj^BAFllk&Kh2!bOafm^lp`r4L(HnV0SWLK63Sfj+hpDJk02j_xW{WX z`U!oPnu!UEG@9-1-Mb*jgW}G53M2=(M2ji z%5U-8=|M(;LHvUW+olj~h84>He4~<*Qtu|LQgR7~{h;gUC-?_76*#c-dCxwUb7>)= zN5NnT&}@-zlgQJYFwW~&|DHAG%-n^lD%Kudg=zx+V-y_e#C?Z`yqL3}pD*X^Ld7h< z2Ff>dM!8o%Lbz)FJ;)qHS_Cf*AQPCXvP@tE*+xi2L??gu;cI%BAzYlR5mU@@_9^%d zXB|YjvAgDz`bvEsUMH8$-#OcFFJvM|s9*@07}3B0Q%Oz&wK{Jc=DwsO8iLdl40i*W zu(=T!Ko{3X%Q89Vp#<4E85w1%B1tk9yOI;8TOxPhUQv>>6cUbMmUFx0L!@bsPRkUG zADS;QE3rPUMzy*3JE3OZ>8ao5^Jo))KK~p>Y&$DFRk~CSZEe}m1qN#N!-o$6W^eB8 z*^HLXfZ&~l@P+;#=&A$)`n)RoSVPx)er|3X-coY2NaOtz{a;^W-s#@Qk9_`Wcy4wr zl8kTcl}vz}=P@u(`6PB6ZOhbizmeioF8yZPzCLvGwAjGQ7OD47lWiMcn^e%Qh#~br zh=tQ3;Rgy1S{qc>IANMc`ObHs&2ki+W9Y$$zQ1;L=-uF<_cdlNaOS5dKvY{D>KgmE zy#2p&+?vQdbras-0?73*-yss-2LPOe%+O^M`~C)vzJ8g%Fjz}I_&GWa=+oZ&gz~7t zF7o#H_HZni(OamQ-b3})kCo3$MJ1oym!#-S3TE<*fmR`%1lVb zr3pA+nO7}3q8#?wQF@xajJG=BySAqD!Fu8ou83JU^QfB_yi8@R{3EaJ6!yF!+asD2 zjF0$whtManDF?hB3~t-F+N_x;FhDOe9WpF8UF>s;es~x+PbzYlHA$@NbnokK7`)vE zH4?e4SnqQ>6GTPQ$1n(x%O`zCOapWl9?v`+zs(x9!_ z^2rCx3eSBda#=FIHQqPHi$67u5$y+8Wwu_?S!z{7tGIIUGbtTym{7WwV><-8tZMPI z2=C7EjFyC6VIt0-&3VhAH_67T8$3=Ax&`T^rd#h80cvm8yA{Ty79>V{-DmVgHbm>y zq(CM+%6hvQ?D)~jr6ADbc`(ml@*M4~E>k8m#%D9ldKtX-T&C<4#U2D~@i=0(K&3G*{sO7<{N%Xn@ zuba8XU9F-dCf=X09cYh8=7iT!wEp@wU|?X-mWbJWsmPF&A)njid;8MHTd~{F*FRo9 z&j9Z(+23Vrad1F7uTKd&-i48fzymjPe#yjPu1`I2EUvHV+5GK)_uf~hXetiPwE6i7 z--`6ATga90`LRo3qoZ}BXbcC<9xcu4TP6jn828==L|@Ldm1-%dM%ckkht+`i1t0a+&J-Wb~spMsxVeBzxiifGc7T$@V3m-q9 z%n$w^eMwP-UAIyDeRMlV6Arian$L^D20#QJUq-D+VgoT`)bWo zM5Gb5jCwA9Gx2VQ%}QmGNX(T}c=3cmXID~{e~!B%Bkp}NUMqTL{kG5u{&;v(K|4)Q zg*7@Zt(h~8YU)hmxQZPX$rurllt4p%{DhfYai-b>SOlvZS%@_%DGavwa!MAa>`?)9=a{!Zc7#r znR_0%y^bUb9-be5+Iz{}yNz0R;LdF1nB9hPe%6b|db_CT$4=SeN3aUksB|m@L>fqe znvlhs@}Ltg&pKUd?Z zQP#QHGDQ9?sZjEau)bIG!OZHGhzqoAIvR1(kUU)F&81(X{zyAv=UdCeirg_whB*i9 zNFe{IqL-HY^d#;-KPZ1YtCDYOQ)aT}TIcn2EJL<~8*zf$(bP=%8%w=6)5*+XohKc10Z_xX^xjd8)cL9DZ#g$^6A@@!zG`mv zeKYWb#9jhSByaNM`bKcFz-BF99X6IPvRDDV@AnmEGc4h8|1^KEHZiUu}7m1J_HvA+TU&xrPGnhe3F=@^?3O`;d*ym0lk$lH! zGD&buqZIj|56&DmbENv>^lP2vOW zm-X`_j;DZ$4n#~T2a?lOm4rEKB3vsY#Yu_*ve5f>He&Z>x}L z{29~6I>Ok-cXTtyT7VbDg&z8=uqd4`zEp) z`wn23*~{~&-O7pnd&7#T)mj~*-(k$bJD&lI8Z4XL-P-?fs!n5jpS@oeK_;Q7t0A6Q z0_jF*FGEPJY0Zbm^=XRdI&&hhw3IPqyE0A<;f5nYjOMUmS-ABu z>PI;ZR#C?iOZ++=a(5mJ$TV?UvD3dHg0{;7gW()c)t8v3IOFm+VVx2CuMjQbENAO-d{F z3UU#P#fp!v)T#4BphRwIZ2ZjT@G49VS!XqCIXOuD>kVQq^JBs|N42(ecmn(*xx%+@ zt}w8aZ8Be9P=%suZGvgQk0TPnVmDYA7pA8b*H1yE&m4?1L@oN!088eI=pkJ_!iKXM zJAMLmUj>&BZh;!`4wVV3N){HJ$oiAeN2OH$k&l=9Za&0@xaD4#QA4w*bp6OU&AZ3b z7rNT6%%yu2vfsVek@FS<536lQ^mf=6NMPYoFQT)iJlG!*_+_AyvbUJ{Sok|!I2d20~WP9Eb_DEA)|I+-nLM7H< zj(m_O{2~!>F^u;!{qnvTT7PHfI-AJ6y!Cu*R_Yr$=5#s#?6;Sq9|UgnsC%>Z7L5F` z=L49u-A^(Ln9ex_vEt4JkP{VL`Q(i0g*J3g@N<`BY4KG#5h@smVk!cZ287St$BFXJ zV2u;*9*3|3+0y88s_;`9e^g!FS>(vI$e>k*-}Ry8S3pG96{qlATp#SduH=10kKH<& zQ@24arPb?h+ucl!9s4QH{GbBv=?J6p;w{<1tG6=i`<-TG2kt{fw?poj8)R_wgpHWw z#TX1beDUXknUu>tpC_XP(s;NfaV$z6Srq^>3{0>CL-C#yFRI(OTerY-E_9K3%Ou4g zXEJHm@gL1vi6x@GhR+W()LH}}`w42ea&F5*5Uc3~Xv<}-#p z(sz>LTF~FGKSnW-z<2Tlq)&_E+wdaLxD|FmU>7=Tdx0`ZOkC-E$gqe%=F=d)d7BgX zg>M?+%^=k%;=0Dh=+MTUpaA3r9nnT$&SiI(xI)u@KGG8mvfvkd3~MNeh(Q?qY~4ALCJrLa zIFokvrAzbBrJpD5(!-aeL+F`cd9v^wP-uvw(E1KfGdEHL5;VM^ZT1vPXuN=7Q=G3K z%dZ$ZtvF{iI13^FqP5Q}%FKS5R5!*fL2(LF(Tn%+x1qD13cIb&Itqi1iS}ARisSB` z&0)4)^S`;MAbwG$)-pqp$ZeK_g3q#a45gxV{ow^yg$k>r52>X*;9Xi|+1yteU^7g< zy#mSmHP|})+-`;P(f7K5(lwI5Y+<7kygH%<_J{wnz`*&VO9(R9RemvX^ASc_0FB9i nzXwNfoM8a|4~OrqPfAI)yMEcm)@=g)^RlCOyCcO|m$2Ue+ACoT diff --git a/docs/diagrams/sequence-auth-logout.puml b/docs/diagrams/sequence-auth-logout.puml index 1566abc..777f95b 100644 --- a/docs/diagrams/sequence-auth-logout.puml +++ b/docs/diagrams/sequence-auth-logout.puml @@ -7,7 +7,7 @@ participant "jwt-demo-reactive\nAuthController" as S participant "Keycloak\nLogout endpoint" as K C -> S: POST /api/auth/logout\n{refreshToken, clientId, clientSecret} -S -> K: client_id, client_secret,\nrefresh_token +S -> K: client_id, client_secret\nrefresh_token K --> S: 200 OK S --> C: AppResponse(code=0) From ec697ddfe301ce1c4e5ba7ed1c1f82b9e4e15e1b Mon Sep 17 00:00:00 2001 From: igorsatsyuk Date: Sun, 31 May 2026 17:06:16 +0300 Subject: [PATCH 3/4] docs(diagrams): fix rendering script and observability flow arrows Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- docs/diagrams/generate-diagrams.ps1 | 7 ++++++- docs/diagrams/sequence-observability-flow.png | Bin 36456 -> 37815 bytes .../diagrams/sequence-observability-flow.puml | 6 +++--- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/docs/diagrams/generate-diagrams.ps1 b/docs/diagrams/generate-diagrams.ps1 index 6a17ea8..d294dda 100644 --- a/docs/diagrams/generate-diagrams.ps1 +++ b/docs/diagrams/generate-diagrams.ps1 @@ -10,4 +10,9 @@ if (-not (Test-Path $tempJar)) { Invoke-WebRequest -Uri $downloadUrl -OutFile $tempJar -ErrorAction Stop } -java -jar $tempJar -charset UTF-8 -tpng (Join-Path $scriptDir "*.puml") +$pumlFiles = Get-ChildItem -Path $scriptDir -Filter "*.puml" | Select-Object -ExpandProperty FullName +if (-not $pumlFiles) { + throw "No .puml files found in $scriptDir" +} + +java -jar $tempJar -charset UTF-8 -tpng @pumlFiles diff --git a/docs/diagrams/sequence-observability-flow.png b/docs/diagrams/sequence-observability-flow.png index 629c7ad012fed492d1a0a89eb76c8d9eb4343811..a49d7b583b3f708c79c643c979f10aee5dd23a3b 100644 GIT binary patch literal 37815 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 literal 36456 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

OTel: OTLP traces\nmanagement.otlp.tracing.endpoint App -> OTel: OTLP logs\nmanagement.otlp.logging.endpoint OTel -> Tempo: export traces OTel -> Loki: export logs -Prom -> Grafana: metrics datasource -Tempo -> Grafana: traces datasource -Loki -> Grafana: logs datasource +Grafana -> Prom: query metrics datasource +Grafana -> Tempo: query traces datasource +Grafana -> Loki: query logs datasource @enduml From 7c8a070c862a3ac4a99d9a6419b842eab48715ee Mon Sep 17 00:00:00 2001 From: igorsatsyuk Date: Sun, 31 May 2026 17:13:27 +0300 Subject: [PATCH 4/4] docs(diagrams): fix refresh payload and localize plantuml cache Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .gitignore | 2 ++ docs/diagrams/generate-diagrams.ps1 | 7 ++++++- docs/diagrams/sequence-auth-refresh.png | Bin 27108 -> 26647 bytes docs/diagrams/sequence-auth-refresh.puml | 2 +- 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 1c87f25..a04dcdb 100644 --- a/.gitignore +++ b/.gitignore @@ -35,3 +35,5 @@ build/ # Local environment secrets .env +# PlantUML local cache for diagram generation +docs/diagrams/.plantuml-cache/ diff --git a/docs/diagrams/generate-diagrams.ps1 b/docs/diagrams/generate-diagrams.ps1 index d294dda..6e16996 100644 --- a/docs/diagrams/generate-diagrams.ps1 +++ b/docs/diagrams/generate-diagrams.ps1 @@ -3,9 +3,14 @@ param( ) $scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path -$tempJar = Join-Path ([System.IO.Path]::GetTempPath()) "plantuml-$PlantUmlVersion.jar" +$cacheDir = Join-Path $scriptDir ".plantuml-cache" +$tempJar = Join-Path $cacheDir "plantuml-$PlantUmlVersion.jar" $downloadUrl = "https://github.com/plantuml/plantuml/releases/download/v$PlantUmlVersion/plantuml-$PlantUmlVersion.jar" +if (-not (Test-Path $cacheDir)) { + New-Item -ItemType Directory -Path $cacheDir | Out-Null +} + if (-not (Test-Path $tempJar)) { Invoke-WebRequest -Uri $downloadUrl -OutFile $tempJar -ErrorAction Stop } diff --git a/docs/diagrams/sequence-auth-refresh.png b/docs/diagrams/sequence-auth-refresh.png index e2e32fdf9716e81cff382c8d0322d4bc6fc69179..fbbba9f9b88b3b078bea0164feb698f7b14c4c0e 100644 GIT binary patch literal 26647 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 diff --git a/docs/diagrams/sequence-auth-refresh.puml b/docs/diagrams/sequence-auth-refresh.puml index 1453445..f4d827f 100644 --- a/docs/diagrams/sequence-auth-refresh.puml +++ b/docs/diagrams/sequence-auth-refresh.puml @@ -8,7 +8,7 @@ participant "Keycloak\nToken endpoint" as K C -> S: POST /api/auth/refresh\n{refreshToken, clientId, clientSecret} S -> K: grant_type=refresh_token\nrefresh_token\nclient_id, client_secret -K --> S: 200 OK\n{new_access_token, new_refresh_token} +K --> S: 200 OK\n{access_token, refresh_token} S --> C: AppResponse(code=0, data=tokens) @enduml