From d4cd578793867c83978695072ff4716ee20f5c28 Mon Sep 17 00:00:00 2001 From: Shai Almog <67850168+shai-almog@users.noreply.github.com> Date: Sat, 7 Feb 2026 20:44:55 +0200 Subject: [PATCH 1/3] Gate sheet blocker on native peers --- CodenameOne/src/com/codename1/ui/Sheet.java | 83 +++++++++++++++---- .../tests/BrowserComponentScreenshotTest.java | 7 ++ 2 files changed, 75 insertions(+), 15 deletions(-) diff --git a/CodenameOne/src/com/codename1/ui/Sheet.java b/CodenameOne/src/com/codename1/ui/Sheet.java index 69cc9b045f..db35de1fae 100644 --- a/CodenameOne/src/com/codename1/ui/Sheet.java +++ b/CodenameOne/src/com/codename1/ui/Sheet.java @@ -25,6 +25,7 @@ import com.codename1.ui.ComponentSelector.ComponentClosure; import com.codename1.ui.events.ActionEvent; import com.codename1.ui.events.ActionListener; +import com.codename1.ui.geom.Dimension; import com.codename1.ui.geom.Rectangle; import com.codename1.ui.layouts.BorderLayout; import com.codename1.ui.layouts.BoxLayout; @@ -119,6 +120,8 @@ public class Sheet extends Container { private static final int W = 3; private static final int C = 4; private static final int DEFAULT_TRANSITION_DURATION = 300; + private static final String SHEET_BLOCKER_PROPERTY = "cn1$sheetBlocker"; + private static final String SHEET_LAYER_PROPERTY = "cn1$sheetLayer"; private final Sheet parentSheet; private final Label title = new Label(); private final EventDispatcher closeListeners = new EventDispatcher(); @@ -458,15 +461,16 @@ public void run() { remove(); } Container cnt = CN.getCurrentForm().getFormLayeredPane(Sheet.class, true); - if (!(cnt.getLayout() instanceof BorderLayout)) { - cnt.setLayout(new BorderLayout(BorderLayout.CENTER_BEHAVIOR_CENTER_ABSOLUTE)); + if (!(cnt.getLayout() instanceof LayeredLayout)) { + cnt.setLayout(new LayeredLayout()); cnt.getStyle().setBgPainter(new ShowPainter()); cnt.revalidate(); } - if (cnt.getComponentCount() > 0) { + Container sheetLayer = getSheetLayer(cnt); + if (sheetLayer.getComponentCount() > 0) { $(".Sheet", cnt).each(new ComponentClosure() { @Override public void call(Component c) { @@ -502,17 +506,17 @@ public void call(Component c) { } }); - Component existing = cnt.getComponentAt(0); - cnt.replace(existing, this, null); - cnt.animateLayout(duration); + Component existing = sheetLayer.getComponentAt(0); + sheetLayer.replace(existing, this, null); + sheetLayer.animateLayout(duration); } else { - cnt.add(getPosition(), this); + sheetLayer.add(getPosition(), this); - this.setWidth(getPreferredW(cnt)); - this.setHeight(getPreferredH(cnt)); - this.setX(getHiddenX(cnt)); - this.setY(getHiddenY(cnt)); - cnt.animateLayout(duration); + this.setWidth(getPreferredW(sheetLayer)); + this.setHeight(getPreferredH(sheetLayer)); + this.setX(getHiddenX(sheetLayer)); + this.setY(getHiddenY(sheetLayer)); + sheetLayer.animateLayout(duration); } } @@ -788,9 +792,10 @@ public void back(int duration) { private void hide(int duration) { final Container cnt = CN.getCurrentForm().getFormLayeredPane(Sheet.class, true); - setX(getHiddenX(cnt)); - setY(getHiddenY(cnt)); - cnt.animateUnlayout(duration, 255, new Runnable() { + final Container sheetLayer = getSheetLayer(cnt); + setX(getHiddenX(sheetLayer)); + setY(getHiddenY(sheetLayer)); + sheetLayer.animateUnlayout(duration, 255, new Runnable() { @Override public void run() { Container parent = cnt.getParent(); @@ -920,6 +925,42 @@ private void fireBackEvent() { } + private Container getSheetLayer(Container cnt) { + Container sheetLayer = (Container) cnt.getClientProperty(SHEET_LAYER_PROPERTY); + if (sheetLayer == null) { + sheetLayer = new Container(new BorderLayout(BorderLayout.CENTER_BEHAVIOR_CENTER_ABSOLUTE)); + sheetLayer.setName("SheetLayer"); + cnt.putClientProperty(SHEET_LAYER_PROPERTY, sheetLayer); + ensureSheetBlocker(cnt, sheetLayer); + cnt.add(sheetLayer); + } else { + ensureSheetBlocker(cnt, sheetLayer); + } + return sheetLayer; + } + + private void ensureSheetBlocker(Container cnt, Container sheetLayer) { + Component blocker = (Component) cnt.getClientProperty(SHEET_BLOCKER_PROPERTY); + if (Form.activePeerCount <= 0) { + if (blocker != null && blocker.getParent() == cnt) { + cnt.removeComponent(blocker); + } + return; + } + if (blocker == null) { + blocker = new SheetBlocker(); + cnt.putClientProperty(SHEET_BLOCKER_PROPERTY, blocker); + } + if (blocker.getParent() != cnt) { + int sheetLayerIndex = cnt.getComponentIndex(sheetLayer); + if (sheetLayerIndex > -1) { + cnt.addComponent(sheetLayerIndex, blocker); + } else { + cnt.addComponent(0, blocker); + } + } + } + private static class ShowPainter implements Painter { @Override @@ -932,4 +973,16 @@ public void paint(Graphics g, Rectangle rect) { } } + + private static class SheetBlocker extends Container { + SheetBlocker() { + setGrabsPointerEvents(true); + setUIID("SheetBlocker"); + } + + @Override + protected Dimension calcPreferredSize() { + return new Dimension(CN.getDisplayWidth(), CN.getDisplayHeight()); + } + } } diff --git a/scripts/hellocodenameone/common/src/main/java/com/codenameone/examples/hellocodenameone/tests/BrowserComponentScreenshotTest.java b/scripts/hellocodenameone/common/src/main/java/com/codenameone/examples/hellocodenameone/tests/BrowserComponentScreenshotTest.java index ff7c9e39de..4caa08eee4 100644 --- a/scripts/hellocodenameone/common/src/main/java/com/codenameone/examples/hellocodenameone/tests/BrowserComponentScreenshotTest.java +++ b/scripts/hellocodenameone/common/src/main/java/com/codenameone/examples/hellocodenameone/tests/BrowserComponentScreenshotTest.java @@ -2,6 +2,7 @@ import com.codename1.ui.BrowserComponent; import com.codename1.ui.Form; +import com.codename1.ui.Sheet; import com.codename1.ui.layouts.BorderLayout; import com.codename1.ui.util.UITimer; import com.codename1.util.SuccessCallback; @@ -13,6 +14,7 @@ public class BrowserComponentScreenshotTest extends BaseTest { private Form form; private boolean jsReady; private boolean jsCheckPending; + private boolean sheetShown; @Override public boolean runTest() throws Exception { @@ -56,6 +58,11 @@ public void onSucess(BrowserComponent.JSRef result) { return; } + if (!sheetShown) { + sheetShown = true; + Sheet sheet = new Sheet(null, "Browser Sheet"); + sheet.show(); + } UITimer.timer(2000, false, form, readyRunnable); readyRunnable = null; } From a52e0c040fb4c55a18cde92fc3d3d4c1b5f62132 Mon Sep 17 00:00:00 2001 From: Shai Almog <67850168+shai-almog@users.noreply.github.com> Date: Sat, 7 Feb 2026 21:14:42 +0200 Subject: [PATCH 2/3] Suppress PMD for sheet blocker parent checks --- CodenameOne/src/com/codename1/ui/Sheet.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CodenameOne/src/com/codename1/ui/Sheet.java b/CodenameOne/src/com/codename1/ui/Sheet.java index db35de1fae..01b96fd6e9 100644 --- a/CodenameOne/src/com/codename1/ui/Sheet.java +++ b/CodenameOne/src/com/codename1/ui/Sheet.java @@ -942,7 +942,7 @@ private Container getSheetLayer(Container cnt) { private void ensureSheetBlocker(Container cnt, Container sheetLayer) { Component blocker = (Component) cnt.getClientProperty(SHEET_BLOCKER_PROPERTY); if (Form.activePeerCount <= 0) { - if (blocker != null && blocker.getParent() == cnt) { + if (blocker != null && blocker.getParent() == cnt) { //NOPMD CompareObjectsWithEquals cnt.removeComponent(blocker); } return; @@ -951,7 +951,7 @@ private void ensureSheetBlocker(Container cnt, Container sheetLayer) { blocker = new SheetBlocker(); cnt.putClientProperty(SHEET_BLOCKER_PROPERTY, blocker); } - if (blocker.getParent() != cnt) { + if (blocker.getParent() != cnt) { //NOPMD CompareObjectsWithEquals int sheetLayerIndex = cnt.getComponentIndex(sheetLayer); if (sheetLayerIndex > -1) { cnt.addComponent(sheetLayerIndex, blocker); From 1f0ace63b786ddfa8edc7e50499a91f5e256abb7 Mon Sep 17 00:00:00 2001 From: Shai Almog <67850168+shai-almog@users.noreply.github.com> Date: Sun, 8 Feb 2026 03:45:01 +0200 Subject: [PATCH 3/3] Updated screenshot --- .../android/screenshots/BrowserComponent.png | Bin 16266 -> 18648 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/scripts/android/screenshots/BrowserComponent.png b/scripts/android/screenshots/BrowserComponent.png index ac97ac980edd144305e92b81ce18fbbc10d0bd93..469d7cfca94c7c2d9022d8d6e8c0e62894c6719e 100644 GIT binary patch literal 18648 zcmeIaXH?VOw>26-L`6VEKvV)YdPjOw>4G3Cy@@obfgl|c6cv=JNRuvAdT#+jlPbOU z-btuQ=y^B)bME*1;f^!L8TWn0a6ADa*}uKlUTdzo=Je|e4P~k;x2`}S5Gqv_g_jTr z$zuqF)bG+o@EuHeia+=tiOWmnr;z;aJ8R&J3ocJpUta?M`CPIHgg{s!stQkDd&F-} zx%+72=7>AG@RBx@3yqgP(Kb?FW8M67>G%A_cx^+6yqv$~cwL9QVMLw*A@}wjj&E%j z$F2#qK`-BZ%zEwm^-E(?D+J{>k!W?+>-&2MS*WKp9D5k=BAeub^_}TqBHYQ8a9P$1 z47}M^RmIJEuixl~-@Ugy?{a=B1E$2m7ZRprG6y}HKHH=?c0_9{(cor&CJ5Wa0Xt3*@Xpp zJ-wTbj*e7(3-(c#&YPoxLc+qFTwINV zS6o<_&ab9M`pT6nn+0O{(}!{)R+RPYBh&CE=+nA+#j6jOgw$9;hCx5IM3@SF` zBP=%UVeXIllf7XcCez|aLblEu7Z=xAfWUD>racy@o<4ngrzJWvvd9f%u-ucR`Rv)V zkTqXlUnUXT8zV+8RA2|FhVy>^{`fpjRL~u3M9nPu+WaK>iGSrz%k9fFGzG3llw%BC zb5AD>m!6h4^{1;HuBL|Bs_)GQ@k?GME{mb(z+zzPC5!C6_9S|^kX0-;G%3ln)>2JP z&66yD&WjiIhOk;idwU*;jMqLZ7uOXzIl0}vJqeF(){T(@ z>*as3xq3w(nS`ybF)-+u$JTn`-cHwe+K&~dH$c?Y)JlkG@O~G`oQP+qkoRl-=}HIm z^z=I&+y&Pd83TfXDCNIgy?gH-sivkT*nJgMRkNlqRR5CXl5iU%dtmX`X=$}qimy;o zdhT_JeGLiu`}gnXxu$@DDi>>MY3a6q|19>FyPE(0rDbGn-9i$*mBOILu&EwP!$$!b zwp*Va1EP2hg}@~}b{aY&y<<{P$NqrPw1j;22)99UQ`kz~ALT;H$Y+5WFEjGSl&L35 zS9RC(@bN8Itt6U{L3ragi->5mri+d!Ou5&@>mhDtX%D9m=Mt-~dwhJM`NpW- z;~8SzFmwo{iNozC8t`yShbu`dvDS%y$`B79KCIbpq_m%@OUTONz}6i*K9!ee?wE9H zqRKU@`awM1Le}8N?GBEP`q48b_XP%K7HD5yB{V1 zcCEO$*y9*e!O6+#%(1YvWVzM;kd1BF5M5a*4*5cLTS-HMT2)omHL8p!h}WW#X~atfdZQ4;w}U-=7*{ z(xo>o!Axa!syz(1ZgtS>8fn2|OG_Vth$K6ItC86cj*N_q=TB)+;rQIgM>r`Wfu*7i#7!^`XpC>pV#yn|{Bqyp6-9zsl60UI@J-LHZhtsIVEx zm_7noTG(^fB6(N+XiP{*=m2C?Cl{B6L~m@0Vh{ta8}=_oaDRO$h>l$Y9H-o%e!k$u zZ;3~i-f?iLw)DJqw-3?$rj9h<1_uYdIyGX2K6B?+{+^!dSkFgct1lvXU%Ccc9&FFO z-x$u*+QaSc&L3?Qtl&mWt>+p)2j3KIG?SP@xl?e>jJi*`>gHM7xo=HVy~cLqH^=C} zbBa1nwsnck7;TKrW>3$}Hu!HyAM2iOn)z0{VQl3j%=Dw=r$%!1<@NQMBG{hWZp&YN zQ!;i_%8du*zQqOtlJ>sRpuvAud~yTh@D1#GIU9x~BO^ofCgMd^=K*-4M@L8Kwzf8< zF1oBef5Yh2)pro;JK~SMysDcjMIFX_>wLX65+p6R=;QNj-OF_gOgy~3>FDU>ZEd*% zXjt;ge1@VGl4N~tgL95%*&aR=v6VSGK6V+>)^!Gdh7NkQ^TNhMg@@DESiinp!(KU3RF#V8(>P65I^$T;U6%iuft9Jpi}#rsJ$*_F5+b$ru@?bLRiE)ZZc~ns^W(>lr#dE8YOpj^NP)7gd!y1YSVz0G49*Vx#oWNhxidB8b7abw~M zpKlkODH!0HifJ!yQ0_LTP|?~sI)Y}6pY{?>hxBXqYBRF4bwP19H8+apGj?)!w+6Lv zab-nnayMsPiF(N0`t;=FrnHB^43a1Vu#LNTdkJht*3YYeZhwD&F(m-{7UWeP!}4H| zPh<}l>5}2KR5u0u5T{49%*@6sGW0pb{$$&cZKKHO=%kVNU2~c5V6W^cs`f=DT>U_m z2b=J{)|*i5a|q`{pX^e~B3{lU{OO4f2%zx4NcDEA+VzgOQ$5rzJw3g-rR6#UgVHe` z!<@nN=-svRC4tCyyHszCawF+2vF`DTURzvL07ytnOUuI2@;d-aXQ#(wRW9rRN`YUW zpPOrN9WicAQ;o1aWipEdfN8d7+?Nx(KD?B9UTV(QWe9n?l+XSc4i`E+JOtsNG~$yz zUBj-KC|ywEq%DIUcU--4jh_B*wd)3m#{wA$VQWUy%}o?s$?T$6MU#mq2%3Y za(2vtE*Gm z*Wgp~?y&|Lr$9e!U5BP-+)eIw=g0_SmUQ2b$Vk`j0o{bhea#XyAl$yAWOc`(s}}b#ofDiT@zjNB?Vu)j;Vo&e&P8towL+oVi+O+86;MT&5IYw z$t8?BcGO1VF?q26JQ-ObS1v$Ho3)jD+GTddj#Jexzw+1DPr-}6V#`j+PO3ZN*RoFZ zjlfBO$g>7{)fK;-?dG48PnRoc_HsmV90bL`c!>yr^d;kmay5r)01#!aQ;(02-y|3s zmDy^iF5_H=e_|XuKrXBUc<}e{d!UA1cs({lAoV%KUw)5ltYnf zM#IymyCwYhv#UE*!Int5W9UVn;HL%(mhhMu zl{atRL`>4~0<;Dy6v_6mA=dfO^xAvuBohk@3m!Yw3F_ze z-d?KRNIp*EJT(JY&8?e%A&bDr4OwUnqu_$Azc4T`fa&`U<>*eVc;oMW>g|2uSiQ!U z4EMbw<(AuUh?%a9qkww&VJ0fX^zbhS{JTYK)j7yBJMC6hkbdqkelJ5h-`|%eCZ8oa?OMLOyL$^=ygG#vbD#EHkubjA ze@$0c7wWZocN$6btvkj_o#6_QeV_({o@kpuIB!Y(DQJpaH*_GNgKP%%b23Y+|FLDV z_SA0Hx`rSQtbz)pD09$`m4eqTG88?aR5hiB$pUm-(+Gg;Xt5=wj5j_F92Wq3FJHcF z{7T0@TH`5PRaI44RpmV6OBiCx1#u*Ovfbo!Fc-jMS{J{PgiHk0SiouaF)0}tCogZA zY4`WII5mKNJhmGsFwyL%laI8$JlckZZzB)>XQ!B0y|%lKYG#W;I9SU!N-vi-+HfWL<-6Ff6D5^l;N zq*Il{WHXaywUPc}_zcK-A_h+gfKiTCtAxC~yytE^yMCE1J$NX~oZO{Gc|P@67)_$7tY+Nc_Bf<;pw=aLbc}ofTi+<@Dcw#wP|R?t*9m z&Bu1jZJ7AvqX%4E&qzjt;{gWT3zCH;fyY)-y6EZY3Hrqa(C4bCwDm0KGsnipE-o&H zM@I*ASv7&qa5&E}i2%#YDWCyIdUA5|ZmJr`j}JI|K6GBZL87=L0snMz;$viNY%`Rt z9l=cc!-Wt;^O*K~^@$J~uc&bA$^R%H!szZ!SkCtkR4H+)-Wj*cTh9L!sN&+}?CflV zl?)6tdau#lT{&uG9EXD5yT_P7Hw$W4-z4rDtqlVopdGr5DQLe3b+@-)jt&nGU(OE* zY*SoW+zeKG;pF5pBCn99U+LlLCF;(spz!N+P!8WG23q;GOsD^*emc*D!wnr#B}_SY z@4G3BvG&&)cPJo z>YAE&4(E00-T$r@M_Tw*f#zm?8*S6twP{)yKYvF@M_Xs-3V_?WhUgCoQtqPe^y!zc z-j)r%D=7G>3>H=q&6sYPZef|gCTqqL#K=F_{B?gh|93nY`7Aly)pbdXFxgfAgv`0I z{j55ui=4)t=A-||z))!Yc-h9mY*W~;q73+5A0M9sj4z?TM42XF#6k3SN}eIzc(sUp zz}4lwG1EfZq4niIY4O6$WHpb`hd7z5w;r`Y5lc%;7V-ZcZ0y_c@Ic}d;+bS@Z-6#t zGG04!&!S|^&8*yDNt6Hg*YZD7P;KQf<)|whdJCqj}CV3PgYiPR#ssAq!C!?#m8GFwFe6<&!gX80c_4$t_CBjfF_EWjzbM=3$prccj^|=WefZwa5DP#~V z6npiy=+A9xW@mSo3eAzbJfPa+0cdKk`!`+dCAbh4cCAl@6b6IYiyB&b($D~ogh}$j zm(qPYfK~pLVi!tpvIRj=3s=F-SiU4MQ`__kn=Sm|I)3 zp~;YNsk2(j*0vt^mKey?Am@_Lx9&-FHMzCFk4`Ki5_^y*3DnkJzpY2k*?o06m$&V$ z69Ih2)!{#X4nDx-%`adu0`ak)+1h3Fp+`C3wj%+-`U~T|%mjDg?leK3x*ExN z3PDKzLxU%R_KVHIfAG0X{odm8^0I)DmWi{*03q8=X{R^E!ux;(H1r=%he9K?6MU~; zx|IAp?#1!OOsm84cI;GAfB#Dc9s{F|;@=cX<}Ue@gO*E{K08Zct*l|`8O7FHVW?10 zsqzJ7-q0}n9UNTn=BG!T2#Etm7mXs49Ghw%kUYRnYzd&F8XC&@tXuU{ViK_)jagnY z0D|6WIiz@vNO`2_ol}`umY|l68|~K7(Xk@VTxPH7xuWUUU;NVhK)ZY{tLebc&yNlE zUr+HKFNP|?OxCG=G(5WrQ4UQTyonS)6!<<>tsO;0P0EEn%rUj|*sgyPU;{64u{G9t zS7!WxF^;lFj$ogF+ugzaaWQfQ%rSmSFRp9HVGxZ(Duv$E0R8+94%aX=G?X$OIWSm9 z>2vRXlUe0t@p`Vjr)O+a;YO?%VBpl$p56H}H95J#@%7Y0!0)s6hW>1DuzJAUZgI)@ zZ2!JPcr_=a=aoho%o)P3+2iu7&WolvxiGoqVA7Ta3i7i->2`BdQ&SPOL>a~On6!++ zqiPer@?Ws8n@W5XvjBX~cBs-ZlNMA~j?Q`5_;yo&S{Kr=8kWefrgVV0R#|`6b8=!; z4jVpcB;CfH2?k!F46>a%?P{wz03U7Bm5{l(*!1&f)ad2<>BDuY#2)4?WgHs5NR5inCLu1+URqB{!ETnQ;9M;EvW9#=4+ayzy9aR^j_} z1=NvubzM{5yAIKu=wd{f)t;v}X4jAXfxAoX=l15+QR+;6-G9G2bvvuZ5!0I@FA|#M z>E)$mWVGmHzh$I|!+v{^Y*8aPb1^H9Fy#LrR9h z1EE`Djy#CEx}gkI;l>`{u&8i?#z!N+vW?*hA_2d($1j0GxWaf#L#H6D{-Fm|WlM8>ko3nNPCo_zR#p95vUq_?I=@l}O8X51A| z^!NYhv6w=^>~(TZ>wVcMsGwP4Tr2?%j9NC;ODPs}N(aAr43=y@q#?~yjwS+Qh^(a2E-QQa2Z?rRmsEESh%?x6|O?1X=1=Av;S+o5ysuh3Kkm_9MP zyM^4QW!H!=)U0soyNBOAEFz4i$W!p$77MNOJsMrnjsuKa?;PV*C>9EShrPzU@>FjT z%z_T*0(e(y`N|z9T81$bn@u2vUJVY-u#4uS7NdgL)+(fNidcGgc6NHMMe1$_@Xxkl zjATx}seLnM=|<4a#9NRV84*A0$-?NU}=>d}>x;_-FbKUG&tIzwSh6#MGU)k1X}_e!&T^ z)6;obE9A~YByxVopojIGylF(5TI^?OU1hp1k8*Rcnd|#lTrAYzKX7Q)sRPD~MjNr6 zE}*T030QWBT!lUg2lHUA4sLO$ZB|ns!2s0OAw6b7NB^h9v;Rj60NvW0|75`AD%Rces(*JEwjpH#Q;(<>1HjgtEjLz ze_*j3;OF*1vH8vaeA~v?W&8n*MwvCk81Qo+8=r!zs8?*kIn(-A#Jme}Ys6UUb4*Ob z1#)t&moGcMgVVOfialUs6LlX#l-Ecq_Md(6R!PKhDgFrnGi~%cUS*T7NaEcGwY%=Q z-*%VtyU9@xy!=!tsJC}=^?ju67(fr!Fg2Cnjjaj-WEgmxUxU7cvoCh}b-&F2{P~x7 z`mi&KpPfTIP#NkOs4+L!Wn8QF5-=YJtNw(llj6>Go>#vT6wgu=I^ZR7_EnBg@>UNQ zCk}8-gBE-Cd@B=C;~Cr?;!0;9KA9>UG(7Ajy8wEcw|~Dy;^#j39v>jXPCtWiE<_T~ zta9}S)@BM=1O@#;6jHJH9DF~;g#c=IFoHPS(XP7-223L6RLHt#8W|D0OHy6NRQDHK zVC-TDZx`LvcBAVg9_0g>+~{^0=}D5+Vcw7Evn75W z(gL&{5tpPqNr*f2!P|rR#CbP}uHK_Q+mh>{WnrPIZ=#V=L1%FwyoqEtZY+{*XDVCI zZme_y0`CF@fF4VbCIJTpmz0VF%7dM*8c+NYc#&xH3U=?_Z*EYTn_JlhT!z`>r9H3v zjhOhxe){AKPOT4Mc1Bag=evUbfQnj*^W0+||K%nf(%gJnYBM!{_A4`!v0_>%1nf!g zZ$(NWAz}UM_e|Wnd8En8VbGJqJ|@r;K|us(0*JG_M|prn(c4dzCrrRlpEVL1Ir;dk zTJg*^goc2h(Ygq8^v+R^{Zw@b0Ql943NLg_y7LpHJc&(VoIE^*BPn$_gP|6OiSmW@ zWu@0Mb&zKE<~<;p7+YBY6jWZt^iv{2>zr5vgyZ?0-PySek(OKt14Mp_!^C+a_O}jV z0DbMxFxg*!Qx@f=@zHX0V|lkB73xVXL%N#F1RCkr3#aoFwQ`uu>CO)oNhusS0q`;) zD4Kr^B}OMbf5k{znp0h-v9F5d#jnWAeqBvL!*sA_l$xeJH1S4y=8w7)?p>OPy>r79 z+t~3OxS=UhERTJ%t!@SSki+Uu9{Y6j4tWx-5Z?C6D{A<`z{u*^Xpn`&gv$62{!P~_ zXuFHz5-zK?#M!=TnFQpqSSbIm5M9JaS?G%7WUbD*Q!9Cco&mUgG)|Bwp(+ zY!ifrbduJ$Tcr+Jjx5Z$3v@d|Z$Qzg z2d*46_HcA|=DSq)st#;#Nd+Dt<=(<_bTd^9LeLCh!t3jL_NBhudwT{l8VYDFc45s#4U{wPQHOL z-&-+9IER>7q1U~WNjO(q$AS_ZntJ1UZpdfbR{r)6}Qb!&Hm&+eKvXcB|%GL4!>1Q_`L+^+#J?MIK z;uZ`)=Z$os0gc4lsUw`v{*F2romZaX4VgsWXEnWlm0$H`C}(7Q-45oo*hZU=#u}U* zhOv(({cP?msA>6CwsBL^o`a6vWKLizaIOi=)aN2cOsoN{P@oC68ZV8*EZjCI&;}Uh ziM|adtoBrN#<$`lLQBiYbtn?QLzwhs^rxV*!2K%o!H?NXOB-xY9Ai@zDK))gLzyLe zK_hC_ee_8`389n|uA`pdMF%OdMmDsTSdkRMakos63wgIT^7#_Y5_Z0>b`?o%x$Nf< zoMBAQ;b+l^2$=6hE2i&xDCwpxe8{02WKx$FlKNy4ifF9*mW#>}R9 zm5o(fetouZJjw6Fkz7i6FU)R^zJGYi$e}Kwvbt!aAbrBWOO0Ka_3ru3go;moVt#p5 z?xfXAqb|~qbxkNrXKalWhXV+30wO%HuzI8o2X4Dwf&2YWVu8`Lj$_Z;3;qX z_V@-2Qs_1%X=G${Q_!AchS#*aXz(>?gjRi)4-7VXhf5u&z5%Lce{(1TK+!%h@$#wh z9Ys|X2i)u{<6c{1-$ec4*2!NiLZ8Hj>)eH?*TL@rvBcsG@r>r{F}J1>pkkbcv?JC= zi|&IlEB>hNXnX@t1W6ry<=|wzzdjaG=X<=3sn|R8!iqt1X9_>CC!I*?8jHkI6&2x& zM)Z;NyHy?5Q3KVX20MpTKKa$f}DR<~hcflqOs`h+|ABp%` zWUf>K0GfBg+3|nKsf1X*A7`h(A>tmZ*SbY-Lt0|Y&sy^{-Wz4R$QLjl&URta{SlHXU<;3!G!9u zbBnVi5qtUMxFx*I)z{yFx2q$ojMwr|BJCd{VA59#)4Df#LVEd@5OsX~dOX(t?m|Hd zk6iR3jcGF%f1Z(5w@qWlDFZsO5059kbGj~bB@9YBYq2RbKIK8f`?QHeMOAXeb?i0Y zSLiH&p8Cb_In|>0mIiv{tVa@M)N2pfjuPm%1XdQDAXgwJ}JPF2g9cA|U>!n!v5#GvfT9H54uqq7hI zNS~b|dv*_3N=Q~2m{h?)L-}Rs?A+W3FsuQe)G*dQhPc;cQ}kL_^4?Cw0vwVlVr5E)j9fiR@NmLKP+H`nnhw>;0{_WkpT)V zg^lF*ZO|8P?drC7bv1Q$VbrC(=0If_9l_0eABeG4eha;GIFyPC36-fT0TM{{qa1~Pn&K{4Uhkf zmwaM_wHeo}jSdV*N;x()WqUVjIlJkjQ7critpcZW8*QRt6*H4sB0uy{-iI4mSyi7B z`{Q#vj!@o@y!7QhtNo_%xOd;br~AUy`i{sPj~#T6%i+?(SovwIm;kNRSMO@Hx2j(0V%D z6d@5X|NHG1D&~$}GkH!94pu%ah3x63%d=V9wA6(13Z;ZovK2p=#jmMLamf>^tce9mvDpr~1}~p2>)#!}k=y_B znMPt(g?dLkkyhx4iCxB|b`H1v1Ktdgs;q*!CYmu>czK>^UY{Y;X0VH!98yMzB{ z#q=S|L!hx)0NajkzzUbzGpPgBQiA0?9sYYNd&6xA*$ zDEKofve<4U3?)QC^HA7!@e-KyjKZx(_{?Txj|f}JFW#^MF+p+kX-^4p89%{AgU@8v zT6OOkQoZMYj)^pgUYM|Hq zzX1_nxN`=3shzH+aZ9|!+RJoUk}Q~Lxa{j;THkgn0xs^(7jMFv{1dIaoSe!%Hnqdn zVDbwoy>i)EPm?J&7H^&zVy2xy-|R1bnA#eAv3?+xTt0xR0g(M7 zb|XU)&&|w8I-?3^kL)tHkB^bcK0c((Qf_Y!w#|UZy8A8%{^4e-drx9B`-9OiF$aJ^ zi_BY`B-tnC$UGNSuH07+O>Qh!k@)cx%(O0FzHGKf6G`E+(qmd*|DkV^IB~33_x2&X zX2OGPO%|XQYXVv?ZR<;Cg_e}(McWz75ipqN{bvtqd~2Al3&#}q3oZAULSAEww!|M!- z=6&KEb$_}Af9roaZsf}yYsc^^D#_op;9XW$VSt9dqo^MJ0fFfPy`{z0SxWce5=&rf z#R|ly8khcv@aRlS(C_qF)Six$hg{W;)H~lps!ET;7vbS~y zIBN3LdwWATrtlBpdt4>uR=x~o$pH)f8Ob1K%N(yK7^XpxRce)j&JEIRIPL5{wAg<~WzBe^L9zi@htyU#C| z1jc1MW7bJhKPT$UDa4GB%-;BuO1oD>8&a5%i0nO?ONNkkK#A& z);0B|dhDh_-6MM}T`?&X(jLL~*6e#!6lf7^3}H0aX1gk;mjSV7zMcH!>Ky?;(49~- zKU+>9)~+}`UC65-w&sENv~RlxMDI_){OufcQ*DS1N)cPei_9qiYuG#~l(72^K0iNy zC$vG-tyXjq;C%C=eVeOH(lJ0{e6EsR_LV~S%~3=$wilSx{sOA`>*Lj~5f@l>$N|cZ z1z?QAjL-_axzNzW_Toom!_HsRN0KM&wrcq9EoT~A#mD=XY8p{m;WbGB ziL125v{#Z>{N~|DX>BBPoN@$M*FDSGdG$_e$t}14I-Jhk*{5&Qz!tvd{0qzz$elVJ z+(liq7vFj;;B?2T?8IQT+Iu%M0y$-45AQmCg_7N%t-5*c7s<7fyU4+)I|R#8RQP|P z9YC7h+PhJvW>dGaL4)-8v~u=p&%~c`{iR*zN$G#=CsSAF7}Jhk4MO01aEzvw-Kwfv zLqmgloR=_QS?92G8U|jHGYFI)nC*G3c$WtTUUID7xhVPmQd4%J$}`FO%%q;>)xI0a zbL`VkPBr5<`qPDl&$a`bgjRfy^G**rBiK#bL65ji*jso#%n3wbZ<7eFBN}trIc$4J zaWLlv+z8#BI|{>V13sriMxbGp&UEYOF&yf;_Fq%iH%PMf9^Lh#*P&@?y%m})I{79| zVl)5l1KWX^m^<{iGxgx`u;^Xi+aEuu!Bp!iv(%Y~*yb^kV0iD|J&;1krQ9|j)R-$P z1>bBbcaTyE3@dQ0v)-5 z$usFXqAI#TK_ToosRxwHs;YmkwyQ?4T?hRM=rMexkg}PY*1FTZ!(*{sabk2y;g2)7 zH9WjLcN>HFX<5)=K>Bj7&+ZbNI+sc77kP=)$<_tmmWm>ypoW7wf}P@K3F=LM#m>NI zq+q|PRQ(>)2ofNeGA1s{w};qfo}3sXr*1q(lb zD?(&yXis0O07}LX$IKIW7R7&kR!GJ4T=hnV!28h`=hNJlc6A+}iXVT~q8@okOixeW zh_A{+MDFgw@z}f?I(PF#4|g7svIh3=m6KT|WwY9Zr!h=GQQNun>IOf_8*`?)!*$8A_8T)8RP+0(_%PR6HG|) zW|)omt+AJ(X}uZGIWXgA2ZL2$BEQqJQ6ThyEu%fjL$_8rrV=UlSy2%Lo!4lvJ9dGq+qlDXh9E*03I4h}v^g4_C6 zEn4XP=ryRvECNXR$${)Q__kOSkX!(`qNJ+o93ivA$Il+%2c4?2-L=58Kl~mZUcb9l zx3JzG;knvC0iui@Xxe}y#{-WYYm(ZkbD!SezjyEB1gti)$GXQ&JocU(@=CpF%y{DO z;TZO@TF`$_`V54q|9V8r7#9MRjIw8oblwGdf|}M~Xf%%#n_g_W?Kry}=a>e(IAAb- zPP#nnmL5g@N%SC0b!fj|pNu`{l}hyQn}{|h~%|M$@T z@1gyFYk7`7QUbQJkAkVneFdg+)$g$iKu-wD8Nbeyfl2C#x&=WvCH&#&K%LZS>^K=&fLIEJ$^~Bwu_P^!D zxM^xN1QbwXhgj6sW)mMDU#acTH{dIto!{*oYX$=Eb87_{)-*OXF$uoC08j(u94^X& zF=M%dVJK8){GUipz0W<(pyM)Golj#RCnpCG;7`j2U|IhC z64_wfQA>*C))n$SdJlSXOo1`taLH%qFC)P2#y=%}&JI`7GBeNJ4b|(8s_09MrIdGW z-|qCMk!^dWDWj;bub*cL7VLSnmgxy}_`vR28~#`IzVz9_f;91DPeEC^#AbjE>b+UC zoZnC0+0(NUDurbQZXYm+{sad0*O{5Sz%F_$Me6by$ei1ypojxA;0}7<*A#M_90Ivy zd;aeNL~+XHQLd8!tQ8I*ev#AM)8ySI-CA}%dIT`KE&^+T#ccftMjb<&UfznyrxlJ< zH^rS;Q)OpIg81mKN65Bl-pB_Q3M3VOg*h7cN|Q0a$BH#Y}fcB)8|uPAhZA7WjQ2 z@a+ZC$^5G2TLAN94gr8RqjU(F*S zyQrrrz4J-iz`z!H`jtJg5N-1EB|IhQhh)60?>H$>{WBGnLJ(lUY+*&B12zM^&IQxv ziB6!R)kh!@QI`6{z`+Vb)~;^>i%A9edlO%rHf7@EL%&Kpa{gd*@aIG2ZwJ z-L-3Ph(s_Hs;E`>J%2pF-!PjXR}$R$JW#58s98v9?ytLgdU{#gsK9KBH#j-)9(LHt zswhi|i(SC|Y9@2KKQR2~Rc0=D7y~~MZ@m2mFrAcAXgNCOm)Q<+Q5K%NRk%4h+htFI z`Zdow$#+=R*vF@aTn|{@bZl+2aT7CV!%$h^jKx3xB?e0raamTUEChbyT;Rwz*wBuv zm_baKLjq)BMFf>;H zOEiB+d1R7K#D!!_i7&HYttsFc)~`ISH>mY0v(yhI(R=aYjeeA6o?%5dX)bW0>Va(s z9jp$pZSvFu_9G`UG0~A^I7ZNXQ>HH4WYpMw%93OlxSR5Txm@3m{>BXpUcJJ4E-tR( zZ$UwMKmch60+!*8>stR`E)I@DU|7dIiHMBUwyRw~cMIA9KNx-&IJLm;;2@5Ss_+$?H!a&>jc zRy-l%v8-wBa-j?Y64ALK122;P}P|Bo#Kl;!ifQLp2u-LbZCD|$`sI8*kwK_g| zV*K$b)$WbYcP}x`J(MI*54Xt)TsK1yDaHyOjqq$};(gH?12YSW*7h}KJ?`GkLct*+ zYak}8J@+!w4qZM5QM?A4+we32t>>%)U(TBATjgDpkt0QMz*E;C&ZDBB7uE_rSdcWa(N#4}&uW7F*F>Zr*($Ivhi=xx)~*-{NF9M|Um2ANHK`SRuA*22Wd?8{ay8)jn0 z%*%|w1Jj9#P#g{ynLxeJ zz&2Ludpv^VICrk9_5*LzBWdZ}*Ienqz65ff>X^OG{rmSNeUC~X{Hd!m0j0aQCFC}4 zXF-|%3i;6RFdw%ci>y!Y;oeH5%7ekNu|L(-lD=mr`ahofadXNf!ok{%e+=iwBAdXc zMwe;kl5+df7(0#|I!Xr5z;-0+fxq?31Tc_3D*3zuQ3G0Fo{09C2b~r|Zrig@A}j#! zOgRx88u|qt7ZXzm#vj{zK;zl<&mQ>QuWEwx;!V(qdw>F7U~q(Ez##Yh2WAF6)14?| z$IHt*+}F1=buBHP<6EQe=5+1ExqTZL@(cx*coWF%-@OwkIc#@cLjV@va7UagFD^Dg z!i6n28Y-nzK~G-TuWTGROEhdyZOixOZ@n$GTIWK&{fV#1X2IhzwC>uL_UQQ18iLr}|%cV9r={r%mL2-9% ze4Z(K`hotv?}bKujBE{&q_ literal 16266 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