From 86296a4e4645e060ce0af26a2955758e5ce2d573 Mon Sep 17 00:00:00 2001 From: Kijai <40791699+kijai@users.noreply.github.com> Date: Mon, 25 Mar 2024 18:31:00 +0200 Subject: [PATCH] Initial commit --- .gitignore | 9 + README.md | 12 + __init__.py | 3 + configs/v1-inference.yaml | 70 + example/geowizard_example.json | 272 ++ files/Stitch_OfficialDisney.webp | Bin 0 -> 11994 bytes files/header-mario.png | Bin 0 -> 564271 bytes models/attention.py | 777 ++++++ models/depth_normal_pipeline_clip.py | 380 +++ models/transformer_2d.py | 463 ++++ models/unet_2d_blocks.py | 3494 ++++++++++++++++++++++++++ models/unet_2d_condition.py | 1214 +++++++++ nodes.py | 191 ++ requirements.txt | 8 + utils/batch_size.py | 63 + utils/colormap.py | 45 + utils/common.py | 42 + utils/dataset_configuration.py | 81 + utils/de_normalized.py | 33 + utils/depth2normal.py | 185 ++ utils/depth_ensemble.py | 115 + utils/image_util.py | 83 + utils/normal_ensemble.py | 22 + utils/seed_all.py | 33 + utils/surface_normal.py | 213 ++ 25 files changed, 7808 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 __init__.py create mode 100644 configs/v1-inference.yaml create mode 100644 example/geowizard_example.json create mode 100644 files/Stitch_OfficialDisney.webp create mode 100644 files/header-mario.png create mode 100644 models/attention.py create mode 100644 models/depth_normal_pipeline_clip.py create mode 100644 models/transformer_2d.py create mode 100644 models/unet_2d_blocks.py create mode 100644 models/unet_2d_condition.py create mode 100644 nodes.py create mode 100644 requirements.txt create mode 100644 utils/batch_size.py create mode 100644 utils/colormap.py create mode 100644 utils/common.py create mode 100644 utils/dataset_configuration.py create mode 100644 utils/de_normalized.py create mode 100644 utils/depth2normal.py create mode 100644 utils/depth_ensemble.py create mode 100644 utils/image_util.py create mode 100644 utils/normal_ensemble.py create mode 100644 utils/seed_all.py create mode 100644 utils/surface_normal.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7b5392b --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +wandb/ +*debug* +debugs/ +outputs/ +samples/ +__pycache__/ +*.jpg +*.jpeg +*.pyc \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..1d9af0f --- /dev/null +++ b/README.md @@ -0,0 +1,12 @@ +--- +title: Geowizard +emoji: 🐨 +colorFrom: green +colorTo: indigo +sdk: gradio +sdk_version: 4.11.0 +app_file: app.py +pinned: false +--- + +Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference \ No newline at end of file diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..2e96bd6 --- /dev/null +++ b/__init__.py @@ -0,0 +1,3 @@ +from .nodes import NODE_CLASS_MAPPINGS, NODE_DISPLAY_NAME_MAPPINGS + +__all__ = ["NODE_CLASS_MAPPINGS", "NODE_DISPLAY_NAME_MAPPINGS"] \ No newline at end of file diff --git a/configs/v1-inference.yaml b/configs/v1-inference.yaml new file mode 100644 index 0000000..d4effe5 --- /dev/null +++ b/configs/v1-inference.yaml @@ -0,0 +1,70 @@ +model: + base_learning_rate: 1.0e-04 + target: ldm.models.diffusion.ddpm.LatentDiffusion + params: + linear_start: 0.00085 + linear_end: 0.0120 + num_timesteps_cond: 1 + log_every_t: 200 + timesteps: 1000 + first_stage_key: "jpg" + cond_stage_key: "txt" + image_size: 64 + channels: 4 + cond_stage_trainable: false # Note: different from the one we trained before + conditioning_key: crossattn + monitor: val/loss_simple_ema + scale_factor: 0.18215 + use_ema: False + + scheduler_config: # 10000 warmup steps + target: ldm.lr_scheduler.LambdaLinearScheduler + params: + warm_up_steps: [ 10000 ] + cycle_lengths: [ 10000000000000 ] # incredibly large number to prevent corner cases + f_start: [ 1.e-6 ] + f_max: [ 1. ] + f_min: [ 1. ] + + unet_config: + target: ldm.modules.diffusionmodules.openaimodel.UNetModel + params: + image_size: 32 # unused + in_channels: 4 + out_channels: 4 + model_channels: 320 + attention_resolutions: [ 4, 2, 1 ] + num_res_blocks: 2 + channel_mult: [ 1, 2, 4, 4 ] + num_heads: 8 + use_spatial_transformer: True + transformer_depth: 1 + context_dim: 768 + use_checkpoint: True + legacy: False + + first_stage_config: + target: ldm.models.autoencoder.AutoencoderKL + params: + embed_dim: 4 + monitor: val/rec_loss + ddconfig: + double_z: true + z_channels: 4 + resolution: 256 + in_channels: 3 + out_ch: 3 + ch: 128 + ch_mult: + - 1 + - 2 + - 4 + - 4 + num_res_blocks: 2 + attn_resolutions: [] + dropout: 0.0 + lossconfig: + target: torch.nn.Identity + + cond_stage_config: + target: ldm.modules.encoders.modules.FrozenCLIPEmbedder diff --git a/example/geowizard_example.json b/example/geowizard_example.json new file mode 100644 index 0000000..58e7b1c --- /dev/null +++ b/example/geowizard_example.json @@ -0,0 +1,272 @@ +{ + "last_node_id": 13, + "last_link_id": 19, + "nodes": [ + { + "id": 6, + "type": "PreviewImage", + "pos": [ + 1474, + 182 + ], + "size": [ + 755.4162181152351, + 501.0363755126955 + ], + "flags": {}, + "order": 4, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 5 + } + ], + "properties": { + "Node name for S&R": "PreviewImage" + } + }, + { + "id": 5, + "type": "VAELoader", + "pos": [ + 357, + 361 + ], + "size": { + "0": 392, + "1": 62 + }, + "flags": {}, + "order": 0, + "mode": 0, + "outputs": [ + { + "name": "VAE", + "type": "VAE", + "links": [ + 12 + ], + "shape": 3, + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "VAELoader" + }, + "widgets_values": [ + "vae-ft-mse-840000-ema-pruned.safetensors" + ] + }, + { + "id": 7, + "type": "PreviewImage", + "pos": [ + 1469, + 730 + ], + "size": [ + 760.8803516113289, + 519.6941013793949 + ], + "flags": {}, + "order": 5, + "mode": 0, + "inputs": [ + { + "name": "images", + "type": "IMAGE", + "link": 6 + } + ], + "properties": { + "Node name for S&R": "PreviewImage" + } + }, + { + "id": 3, + "type": "LoadImage", + "pos": [ + 516, + 495 + ], + "size": { + "0": 567.2470092773438, + "1": 467.51312255859375 + }, + "flags": {}, + "order": 1, + "mode": 0, + "outputs": [ + { + "name": "IMAGE", + "type": "IMAGE", + "links": [ + 19 + ], + "shape": 3, + "slot_index": 0 + }, + { + "name": "MASK", + "type": "MASK", + "links": null, + "shape": 3 + } + ], + "properties": { + "Node name for S&R": "LoadImage" + }, + "widgets_values": [ + "indoor.jpg", + "image" + ] + }, + { + "id": 11, + "type": "geowizard_model_loader", + "pos": [ + 777, + 357 + ], + "size": { + "0": 315, + "1": 58 + }, + "flags": {}, + "order": 2, + "mode": 0, + "inputs": [ + { + "name": "vae", + "type": "VAE", + "link": 12 + } + ], + "outputs": [ + { + "name": "geowizard_model", + "type": "GEOWIZMODEL", + "links": [ + 13 + ], + "shape": 3, + "slot_index": 0 + } + ], + "properties": { + "Node name for S&R": "geowizard_model_loader" + }, + "widgets_values": [ + "fp16" + ] + }, + { + "id": 2, + "type": "geowizard_sampler", + "pos": [ + 1127, + 363 + ], + "size": { + "0": 315, + "1": 198 + }, + "flags": {}, + "order": 3, + "mode": 0, + "inputs": [ + { + "name": "geowizard_model", + "type": "GEOWIZMODEL", + "link": 13, + "slot_index": 0 + }, + { + "name": "image", + "type": "IMAGE", + "link": 19, + "slot_index": 1 + } + ], + "outputs": [ + { + "name": "depth", + "type": "IMAGE", + "links": [ + 5 + ], + "shape": 3, + "slot_index": 0 + }, + { + "name": "normal", + "type": "IMAGE", + "links": [ + 6 + ], + "shape": 3, + "slot_index": 1 + } + ], + "properties": { + "Node name for S&R": "geowizard_sampler" + }, + "widgets_values": [ + 10, + 3, + 1120760087628591, + "fixed", + "indoor", + true + ] + } + ], + "links": [ + [ + 5, + 2, + 0, + 6, + 0, + "IMAGE" + ], + [ + 6, + 2, + 1, + 7, + 0, + "IMAGE" + ], + [ + 12, + 5, + 0, + 11, + 0, + "VAE" + ], + [ + 13, + 11, + 0, + 2, + 0, + "GEOWIZMODEL" + ], + [ + 19, + 3, + 0, + 2, + 1, + "IMAGE" + ] + ], + "groups": [], + "config": {}, + "extra": {}, + "version": 0.4 +} \ No newline at end of file diff --git a/files/Stitch_OfficialDisney.webp b/files/Stitch_OfficialDisney.webp new file mode 100644 index 0000000000000000000000000000000000000000..d6d22cd19d1bb4d349cfa67f345c3483f7b63f9b GIT binary patch literal 11994 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

Js{4ke+c#QXy;n`cIV9r4rt89aI6! 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 z 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%0A_(4a{+eXZ{>#J#HBT<=VoY;wp}%{& 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 z zC03faMQ1M6CL04h3B^ePCvMdxTdkDvB=Ve=Acpgt#O}Izh*&WX8x%wbfS)m0P2(iPv@Ft*yWWi`0~~+ z+djWMVJ7oaYdaPQd@x~ zLG*QPKtH$ka{X{H$8Y9vme=jGl_7X-ciFDr_Z67E-;sJ(?$$B0$vm&GfoZmn-h*Ri z0OtJdbC?}FeRKT8`L{8C;`M)zOx>J0JbD$qhtFbX#~8+re+$zW2%x5J;lS_}baET7 zdm3BzjH7w`2l1QDo1E+34)^v5Ew>K#>!Se61{GWXb-Mk>wr}&t>NhCi?FCH96Iqs>>T-# z0H~a;uOq$nHF%a@L2An>bPn9anw;}koqGzKO8VfOdm8KL;>Q4GE+FazRx0qcOi`bf zBy&w`0JTtorv$b2ano zN$p~-Ri@g`)0@dpYknxbpj11<=+_!Zm<4iQ;wa$QTZqz0-7`2VseR{A`cJ$2#RN7<9jr~^IWA(sR zZrn~ZeBR5(JL}5y@N`KAV`_e2>0k9=D8m7v2g5p444;48Nwa z1@l$)iGGe=pr4<6!-nu6hrDulCcVa83>vK9FqpXYhy-#D(A44!1Td-UQ>N}%2T@iA zh{fKpT_{ZL^q#Ruho_|8zx zjV3BoxPG|sxcJ`i+{ou52l0d-y?)3D?v9mhJPo4g`|)VvlyR`8rb3-C?8;MAC^ca7 zrF02T3`C-B$La3$JIzqWtO5qlr%_3J@Hm;IKJB$ zg&(%Z<7c~5@arCervrKT6A$?vDaAj=%klAKB|e+3!Dq+o@Tq{O27;$1e15SNpPg?N zZM%OnI9=a{-wx#AR$UNI5IBt#_+zv<2xBE12%0wHXoYOi9U~ax_S*yj&2fSp2B&ca zoTm7kpy*hwgs1Tu2}#EZ@Q&3-3TWawO2-16l-rKhMPaPg0968__`Fua7AsW~^m#@U zkP_`ZR;0=#NF6Q+6pGa0d^Vx`&kW`I;BE-6(0k|%PG5N!Q|G=X0IGlZ zD!Tg5Vpq>`Y~4GFmYt($+&YY!mcyuMJU|fDi=wJ-6jXE~w`?!6N_HYmK-3m&%4|kl zS|g&9B}8qEDM3JJ4%~ecU}5P2AD<{BB$pCA)g!B*897B;kWIxc!Ax!o=C>i06)l3X z#EeG7rxHZbYefoGs~j7nixC)+2fvU^cyEv@l!Nm|tX=1X)hnd}6&+uI;d4L5E&{0X zy>B6#04lBdCfrJ{AhY!(_8z{86QF3Q+QVS}08`i?71J>?pEp4r5W;8N5iZ%L9d9N>Kso zgs}=`0#K$9W!%a;W4tSG7A0!2UWLjzs{<*+=ocdeN;Q_7_@Y!ZxxSrenpnPCmldT4 zDZR0LO|fxnZ>?U5QpT9*p-OA{ct^huOesrAbI8Ll*yh@PO$Rx5j$9V>TQjF*F@p&Q(>H*tEIVVr}pmrI2P%1#_N4f}zQUJj^iocPTWP$k;8>2wb^)F4<_hxp*Be`)HBJ(;hJ)1-bn#c&+B07 z1*L8G9A|6M^X{VW?W6QLo}AuB&CQU(nd;m-&V3T<6YrR$*T2uL z4GUiJfyerA_}XnkFu_x(eKaENLI|KXBF=sTHaP}R`4K>QA=SxCs8F(f=YdQYPl6^- zPAuu**B^C)#$g>wW7Z`ViQou+8~ zXj>wFzBdiO?aRd<4i(@}gT?r8v<&|kE5kS{4brPObpc0BzjRDlgD!HV0 zid%bQREGjo<&Z2~`VQIDx0A>@@SMQ!Wam{RG z;(Xwl%kSXW*|%rLPP{QQG<9>PfA|uPOy0ox>p#KKGvC3Hqpt}Cs{7zs?CCv;ZJkqS z+dYBJ+lEoUWeC;H3{m|kt?NZ`br13dM0FsuXcyA*w;?%a3lcM15UW5GL(hire0cb8 z5}8o`0dYu9t3*~_6LJZh@=LZMuXG1;O12}XcsoJVR(hQ+Lebj9idOn&0PM%{-5F zIa7$u?}Q^=%+~WRJdQA+iy_0)3Z;YsrKwNTQhlNeuy?rk{+T&ar=&M<3#h~ zYltjAf`m#LVKA2f>P1C;deH=+UQz)nP5Db#0VxAOoi-$ub2~3f4^c8?(*RM556ZNa zr~0Du6gBFO!NcbjKh(K9JyAM8)G8A{luyAn3tLEj++gdOu^~0$;>*nO?Sme6_a1rl{?@`s7|FO%9B2#K-aFj z1D?cuyNg=J6Dv^9)6W!-16i)ids2r5>thQfJV`_I3j_e10d?1g0X!H!BHDLz*gVc{ zF9s3M{lforpM9P1D+&0q%2px_7@*SSYN1!63_J7GR-K`3m!m}>@aw4O3{;#2#Q-(O zzFD^uPc@SF=#1oj3P34Fa{XABJ5tHNIuGgr`d;x|N&bI$Ca?z&2l8;?ap8l~&&PWx z@t6isYA%!^om@hc+R|eP;vIV5Of|$EurZv0i`6HFH&&k>iWqsd+;^DvJ75MmQwWv>z*Wt5M zjl%o%Db*L3+VIaS?fA=BF}~Xpic=-Nm?#RsSgB$Pr_aHr?+K+nH_pIP5hj4?1i=sk zlYp5T>1E>LHr+`AqN9p}#O=7_1Vs!<3``73M;V?r%XMmVG^Pmvr z_9g}=Z{onvWpp1pi@klPu)XUT+F6C#F(y=~+O|PdH621ZK~za?FAA%AkXPP`?2$D3+D=DjmUW*`#UMni824M+Og$fAE6>U84fMhtig~8n1RYVy$(qCqYDHWK! z{7dW^V}N=KSzB%ifO5#cfPyVk*wT9)i__1+JbMx`xgD_2kpN{*wKnCr0#MUf#@;6? zp*|(405y%5>3DvURGw7zXYn0yVWn@&krIO}!6FZQ}`m(m_<{ zopA>2KjQC|WBpA$7k(Izt8F~78*fs8l&U~IqWGa6SF)k>5G8l!oe(WJhNkD#VmPJm zFRM%Z+&T359w7+&CcQ3$)IG7r?K{qXdRfVSTAq7O8ydV)A>Ciy_KcwCHk0OU_Z0XxVYQ&Ru$(ayW*-&6-xFJ;$I##cETQ z+NPuP3};Ka%~GgK3{Rp>=fn_2_pt)yz_3K1MBtQcrz%ftk;I{woEpyHB#u{MlhsOW zB5)G$wEh*u5&0U=jix2fep9h7?xOR;^PT|8(xLFMC-JGAO@yr0Y{>m z6g1PH z7f1l*e|sp`AESjK6TfTlHv3z>^PI0~X_k-mOO}}R^pBYpm6w=B$A&+6^1@p`I(hMX z3{d}J6>4DoRh+!^eVo4XKNvm!ItC}MfsoLoa;zTOq9SJ{ePe#z<8n7a0B>>Ym(72LvWmjGo)7p;k$YF?7D0yS4xFVTHVa?iu2T-oOC)#C!JtL?}=UOuC=~z@7h(8yZhYtZ#2d?c2%h)*^(vwJm*|9k`3w;gVZuBZ+TDD zN&uzJMJYhBOqE)8-ddKET4tGP>^&p6%6=3aX(7oNn3h4AiQ2U?JQ=D9R)QyW!p>;Q z?ydo%OyFscreT~Oe+l8~)exaTaof1;dotvn7C9TYLFRHueWG3?%J=9T2jCgM5yR>h z*Xv@!?L-HMx}UMkG3>vS5G0f*12pmVSggj*la`*D^8ADqruX7y4l0o|QcqbFz-nt5 zB)5}6a)&m93Z(_8)7m-%ZIFD>c&&?CXE3Y*C;?G4^+wZp8zUy+g$o_9ioi=w<2|PA z$CJHKWVJm@5EX7H*d%}=Kzb!oK-8;|25?edM_p263DU=<$-AdX;iLRhps?>=mi8Te z@ABR|2~f2AZZCfQ_9ZRi&xu)BYgYt2wmHDLW1iq>8368<-r!~F3I0~D5Mb>B!Bz-R z*5@JA=7Jg?k3xWou@}%3>u?gUry%ac309yIPC76^k?KU?lyu4-Z`*S)oD?WhqLNNp z^Yk34P00*T253?Mifp??4u+H3M9LFEl*l^~M8y#};eAq>Vx&D6Z*MMDr{fUA(1eEo z%H{|}Ssj8%OFBYvinKV$&_v2p7{k+ERdrI1|ADOtPn#K*Jojv3<%!@a+H41mM4y3g z<$1v;2oT?|3`Tg0f?u=~JSD?FTuX<4LU{V~a2EXANDlnB(Of*2#6n<%r~ff4vQPit z-Aee6*#h`ocO-mJ-~uyQj%?B0$Z%r|jHc=42vR7^l<&oA62Zy%WrU$Zp*l^IHHSb& z%F}eQ04Rc{X;P&Kq!5T^N+dYZ?J@~Sr2#NTFjVXhWAu1=0L)ed!Z?8xsZV7AtVj_^ z&ERcPqDCb^5j>3*$ov%BdLk1wB17f`b_7xcP(xWBq@d{sNrg&sd`Odd!znI*?o9RF z(v#}*H7q^qW#GmnD^YZ2mp+-BzyCd$SorJ#0o0B0_hIp!AHh6AlmMvr5TNcMKrJvp zQINd0P2`{`OkRutRZw{y^2@KXm6u)AhY-~bsh2u94;7cu1Tm>~3_c+-W#AWanQb?+ z+N`WEf`4EVB&3!>T6P0u=CwjrK?h`A?&M&4`lWVA&J_^F?gchP0-)?1Au7HAX5RlDw2ujZO04-9Vk$laYXq4~jZ;wE z@d0d(x(&w=pn{W|B|yz^ko=$osD1cDZx{Xm-6a8v6exzMa7BTdRuw4DIZ2RGb59IV z(>#HVQK3v14r^P= zwRYY%sX}cxS@p84-XPhyXj57FqD<%sfVyK8D1VftchIEn;D8BGEeEN$)NIrt8P0xG z=v*5hd7D zsg1{Ba=Ba>A%?(+mJ8G8{w1d_c#>_r5mDe8VAm5bo@HO=Z4`X1aR^G^g&d+>X3FFy7H!tGNB zL&1EPJvdtUfQzLccv|^@kCi+4S-V0IsZaRxGt}lhgxQ>da6D1Arx2h{;yK0Y6WMnJ zQNq4E0r4kK2#7*(N<1Zk;{;C0WZj*%VR%YBX@ekS%>YGHbZpPj>rPp7u1VyZM9zr{ zFew}!XOCcnfD~&dCh1}*&qS6TUSkNDZ1FLhqYz~+>^g#{C_H4_Mbe%+gr;zF<$91+ zr!ayi1gDVWdm#8I!P9mKIFjQ2#oT%gWP#pUj8SMB?v-jn!@W$MF7lI1;K1(AWY-!sd9uSdK~Z5<5LJz%RQEe_Q?CpZ!@kGWB-N{QWOsdg+U=M&~}!4^4ciUwZe)FnjmAaC7P- z7#w*AC|FKqnyo#v(AY7>LGsGR5h$x4hSJ(0p2(v>d0yE7^w6`Jn(h&INj>8*@eaG-bz$CIz>s1R+0F>dj(ha2zk}qf`@)p#y zIo=ecv;cM6kcU!^HVb89=k3rGZEDLlm-R%Y8rK}`dqf_JrpflF-BZgpO)b3xCTf&o z?;SJ&DQz&Dp-P6cmrd@OC{w0oou-zb0j}O&(VjcJB0Mcu%CuJ90kzjjw2Chai>u(I z*=v_-fTum0nu6W<`se&^!8-i6r&booo-ZZ$v{9;09Bd|q1pobUBQ}*eIt{?nw7P|I zLIfV9=1_fsLkq02E|Cr7$!Z2lC`@sG0ia?v02QYJs^x(7lFUXCNIh$jCxhfwCON21 z;~=?GXK>ae2X#^Apj&(D#CYXJ0XQ2DyI$N5XQ(7jG|nX8cr_--|)-e z5tI$iUP&rI9YKJiCh{|<-61}u6y`qo1N2V+67oB~fMn`{D*q77;uayRW)uPHeb~eR zb&~I^n0#eLeNj83muYp}8swMjFbrppz{~bqw-9TdVAA9!?G4}Y1OHJAGJ~3Bq*MCPop~BHCoG}T6Za$o+rHjtj{q1 zyP4*%2`f*Di|VdBb?Qz|g^_jlQkdBHMz$RR)RP2I1R4Y%1SBUBTI?G+K>mW-KyC<; z3q@%qaEj4nqQvzzqsPeVi&5=9rNNx8-?X40d9fx3MUCVw2vF?^PZFX|KB5nbEJq~= zKK7^K1lG|?fz zBD;^?hG1z8eysHfOsf&zC=0b3Vd^P4efNgCICzn_0kC~X2XE8j;5YDR!dj~w*tgXR zoQ^p&KzUfWgSUk%_*puEzr_UzvO3S|lgK}v#&e48yJ));!n$)f1u+f;QTA-%#j^q> z;3?^p9m7)mNn3<1D|{{~PXtb6)miavakXNrjuj_)pKUq^Y0(iV*_lC%oya!PHCl$k z$-0ZQmKGf!p+H4g9e{8GCJU)JS&(ff?uVM~Wz{Jdp(zC6Dd^}<2B)CIJHh|Zb{Q0> ztkY&zod}+2B}?JCBXB3(72ePDflo>T;QO@^@Iz9bIuj6{QsH-3GvJR1Pk(^G#D+Xer7oXAndv7*5$HQkBHj z7iI~JNO59-^5rSHDLm69N+{f)Gfa~u!g`x5F(^(1Oaw_Yl|e9tSAwb8N&!&QmEu0V zjv#8PLO>KfMrT5?^9ZO)gbFnwRVXD`K3X99qHd9umnQ<{G?jNN+Y^Q}g)PZp@+7AR z*AgA!MymT=Xx{TRB>knA-hr`IJ^eRz9bMP<&)xa-f6U(bE{x87swarL{mu_zV*XbI{5FHGu#%3e^Zul??6C>MHeL?6`lP^l=LoQ8fI10>4_d?dvmTI~Q3(s*`XgMK{UsE1 z5kP&60QCVJjah(6VHEPc?fV!)W;_q7tq@)_9tSm8P zqwX77dWTH*#3@S8p+_8bichN)nLv;>l&)4Ln1t0I4Q-;9z)(qW&$!P?Ght_{I_=YB zolN10>j~6jGHHkBY42g!j9+_Y;!epuQDLSCjvHHd&xeYAZ>td~);L{-$Em)6EH6@U zX!`C1LW^B3JZY6D3oujE9;jC}79J~15{Qfd$q1feiQtGsvlYxJ6PCp_&e zN;OwAK*?UHV6o!m2~D*Dbwp`FilB+?y=Ua1=hE8}tbG%K>?K)Fy4p`n`aL7R4Ys>%z{T7P+$}sAo_s7_z~9Ol;Yk9NHK|VsPj;sn zqR76BwI>Tts7|qXVjL9f&Yl4(5y2_pqzyw9S$RpPY!I9fm=K;4*uJw8=cFZ{M44}j zmDwf^f!hmMqA)nAOwnY~@m0J&iUH~f0~D!GbPcyUgy$ezcM(>HI5Zx?(6mn;1Sh#t`R_G!r$M>LV(JKKi$lRKi?7--hZFWgMS~%fL}BR!uywTz z3n#~NJ=wCOrtmR_4j+R>r(~Rp{l$G&mi#!+G*e=jq9b*Q@=Y{3H^Ww204qfbFwyNf zgrxcEV7vzNV{_F(Qe`5$E|3)|x;;}R0BX8Ys8I|~tXlaC5Am}9=@MTrTq+0nPdm%cZp0@P8-B$HbZQ>P@zOcLOBFR6>+73 zhkqJebdBV7E=P_cKpnDz^XEJuExQ(OfBg3_xcF-*?)feQR9wY}a3q!hN+?hp5TK67 z--N(K1gLlcP-Nj9h#(6O0gCNA2~hZha66uDVba1QfRakoW@+PT6{wBM{pcA4k9!bR za0`4c;r~R#W;qkZ@FW3BWS|T--a5X{@iEOot<-|NDb84h(%O02ZYX0r&k!hI37&Rn zx}p>{YWZ~D9iyo{)ymUM=qXUJ*94;WNq{nji@Pg^%?}uS?bb*eXjH6?igC-HCrQWZk{Sw$l_mD?vc#aRb)4ToVCuQfkANUbp`?IG@i2zQ4}1HMu4Jg970o!olu_QPMpMJhmYAI zP}wp_C7eWf!b9Mca6)FAqyiPk3X>&5l7J>wn@(7;Ek`Go)g}Q-1WpP-k-`*CnI-2N;}!j_nc3)6v}sPrF!oqP!D<6NSay z@i^{S4=xB$^&VDmFUteoMtJ(TGzh*^9S%Qeih-ZC$H6aqQ{XrK>8w8e0paNn*M;)* zr{OI4GXWG$;EmjrP(rJ&CQfj_&ZQ2PNe}bhtRWt5Jb0GVM1V{Y|}&;sYyWsl1OFZ6UY|c zj8vdzfrI2$>({4`ibSp>f)4M5FzUZ$c zIXxUmya?BlUH;UP9J1kSQu+%obq(#hAOGe*R)6`kf2Kms_W65Xz~th0zPj`NPxXs$ zf2kjteh+Sp-h(SQ7NFw5?=i*Pt@7=jWT*}^-5U~^bnc&tE$D;X#O zP&=fJw?%=cFvA4iMw3JK-FkXm{B5vEUxdu^TX2k}`f0ZAI0MB1WfCHnL2?05nn}DE zEkGF{YGbT6SiXEu-sZT)cW(-zFDo%z1Q-Aqr0qWo~rRpusQC|1f3eSDZ7?v^(u%?})JE)nc)56j|qdup5 zD+a_>a7vNjBqtk{op!r49Zz&6P=3mD2)4xw^>CB4?NoTuOx;l#6*eR6*%04{fj8p92aAJ%m_mm*HViD5EdD=1` z*6>ceO0G~K8&TMJ9Ri|OD%4bMJWZ*lqC&adFqy{Fwvr1Kin_2)71K1{6ufw$4L={( zRjZB8;}W8T5;Y+pN?yOA379MQ3ARYVBAf6@-%)sh;1oYLb!@GX^#weANBwR1bs~Tw z`)(IocnDGWy|)*?FJBFrg2(Xla`4S#;C##xT+Q9V)7%9C$_e}|93jAx;OVS@Cz~@6 zhVT?_bBa|b$~{GKc${oJgeZFlR-Gs~9)H4t;VJHfEgl;NrZ@+Lr;`$*q(vueJWICd z4A69(d!1s~raO+XbXdR>L)0;uZ#v3X1}7T=D4{ro5-?fP^#DQ>P1PM>SR&O)fYUw* zKE98EiLASTBf_@xKfDus4r~P<4vUM50y<6zPjp&*Y~g;EC%lCq@a-~!rwI67Lp1!P zJpq2vodUn=OM~AI2!Q(CU>5xGIw??@@DCIsM|k>|Tbb~ij&S&pRHrOQxS8P!lL${! zc|vuXkWJwemwkCB9fiNg3w+h;0alzyO`;&U>}8si6LV8C+q6K?L$Jh(QxKn7sVptj z1T!EpC`s#%plY_79uMZn=W2o^G)ZeuW}&7v>J%Ne@@R4oKmJIOl8X{56a~pgq=h#^ z6L{1I#e4I-;3j_VZe)v{dBd4*FqrE6@G6DKlU@F$Im!3UuPN!Tyxf|&yLxo$uI}p4 z)cLtPpTf-27y5f2{!Bl2=QI7S$+uzf=4}VwOry>O|do0kn|7qml09@P=h!r@woNh*iX=*!^cmjw2<7s1Oj6jIa6 zAit;;N~-$t3@}6$R19#QiU5j2>6x6Vl7aG^R)nZ#0Z}~NR|%o9rM%+BJ17&J+@s*c zX>YDEIDXWQAuT1N5|%#xBaGbpEmRJCA5!bT%>Z>A0V=2V7F=$97uJO@z@fNX5Rz06 zHi-mKGYn7%5T5pj6F^PD9t!L#02L-e3}_#l(*Qi?egjsK zLPGWzDLQQ5)xjF;V)!Oc;H9cLB>_-c8!!GZDoh3y$^^1x28tekf!DoI&r}LLW0?nQ ztz;v)T`hy00I0U*0Hv)nICI4SP>xy~?}iCPnS{ylJVB+JWaA+mzv$Qr&p7q->lJ`n zBdxr(@;n}_oJoeNZ%9?@aS2cKe9BSL$DsnuClu97W8V?9k?l_Zk=ZKqPrDeN@X$0K z{ycixYY?8>=>qmUEx_ftE4Z1tf|rFe!qY|YT6iJ@MGBNH#GbHY>n>Jio?`8-@U|tsp1{eR6{&b>*D01A=bPv@J|4|ebw~KI zC|d=dC@fBPojeFq0-g@x{X-CDDeO9es4$J<6haer1Wyc5dm!K#*><}SoVJ4>0o0-G z3{M`McOvC!BRKEez}8)}w>8{Dc)FMC1K%nMW_bE;Lk#>F;pyjHDe#NlH28IY8vN!8 z0@Srk`2Ap}1gI>8ryTgxja2wagFoEMz5tV%&J0dN8E!C+P%&HJ4Rb{Tny8v!Mo!et zP_BqNol1r3L>3(Z(j382IpvsS_?tkeLR?94nvp8eJVFsc(;Na4LC|7t2t(3*br3Ap zg}`)`P@m}av(+Im#ZVQ*P&HE}EIchh5mYJQ#UNECvQ$%L{xDi38q1aDayqy21wf6+ z925Z*S(C#EP&cwT2c^H7>iTdX$qB9|yZl>Yir?0+3F)sCYPNM;)#YX9>C#g&pPQP0 z|Ch6Oz5|PIfA8Vs!bkey@%#E~!wb+qI0HRbCZMBd3;}8s0qQ2ywG2UZ({-q7xQ+mI z4FPHZiYxn}5CN*7tQR4w8}f=fA-Av{GV@y?EvEqiss`dx${;K%A3VHcz~1H@1o%fo zW_AS>l(gad=!deJt5Cu)b`2rwDyvXRC;)9ilD?g$^3o|&MLYMhTM(j}AU3_8Tgt=Z z%OEJK0DOWoz}X`jPM-FG!$%#!{I~o>V8-<{RTCk-eP5fcUA#wzqeFRTo;urxG9u=V2zMFzgcza{ml#zY+2Ht-I ze{dd2S%jRb39w3DgxAA_b+TBiXhBQ;9fPOb@(Z!is$D|skIjf!7B zjrUg<4r_8z+mnn}zU(wnqjsCZRPxGd)E*g*=B}u;<+&&$RVv*WqV{Xl9jzK=oIBD0 zlaW$&&q#sNDoHECmWi@-&;;22Dm10vHCe%;nXWUcCXn!?K$8TgoeDT5Eg9{$qsLwg zo8+tv-QO(XiN5|Dq800ImZ$D$a_m|B1^*P4MB*>@)dWzESKu+PVPSKTiX*4*2wo^a z{=7w|++&v_Rm4AXc7Pl^iltVJ$7VObU;`d9$c9 zP=n-J6-wH8TxVc1ji;1qy8Z=#A{EMals~_AMIXVdK7;Vm#SVn7VP5UBN`a_A5h`C3 zEFg-e^wtIoRf-NhuGAmU+i+Q?Hv*Ku4CgEL1^7J0zS|V5 zx(YULGJ^{TPk^hL8+e&Jfw#FM_?n-GK+AJ{6x%KoPneAWs7SjL2vGKT95@Fh@=x|` z+c7}liMF?9NFwElj({h;eFCp|n*d3GlY}TzocQ)JR-2SCc%;oSJV(SKdk*hMPywd3 zP@W>BT^EYL6k>h=g3b4_Wk-kZ6F3FQDZ4_~Y!x*Pn-wj;~#;CArbw*|cRy$Nmz zPp-Q+!o}_D;R2p|PiwfH;Q@DZyy1hAAo!#z96qm)fgiLcz)!o9;b%Rm@XNk5_*H*8 z{9gkZ2vFjXh4&9bS@4Jcc=&F)JKWB^0HYbsT!=YCs#Crf+je8Jl7LpP%#pf8L2-nr z1q2hCv}4t&G=L#xu2M|Mao}4~n+R~qM8=77O=Qo_Rw6XvA>dg+a1sg=zODjKr2r;+ zY=*%}JXe7ze!MDJwf3f^%{L`MYEp*DC#3>KN)%h3V>AI(46a|M#oE{rN9-H^&#-W|uyJ z**l+pH8%6EerWWL{@TzS^j({T?*1|8=pBW&u3OO5HiQ6m1F9Pbp|bueRMZYYS@jht zB?YOn4~oir5u&;|({!n*9kTPAAtSeei!uqIB4YBu%{>$xY|cVhXd-0iRzY!j2b9Ks-y)j zO#s}ucHq7VG-=kZWN6f~WmcWGmf-F(#c2;KP6o(SL*mk|Ukn<9 z=Y5BTeHS-xWZe-wy+&j86m+KWbFgAD;V*jXL^{_EYrN$29f1hhcMb?FwpH+?RX&1E zh6s^!6M3?68@bZ)WcH|Hty$5S(nCn4%Z{JuL;^dW4CMcBO10*|{4GFT}p)T#glq$XHl zB2Zc_t-ZCH`}7=LfKZ>FrLHOZ91}pv_HoKfy+qS@__f&_yI=%RWZ~_?+q>~=NNaf> zKO6~1Hy;9*qZh#axDx`DGs4qF2(UzevN{JrR%ao^`V^~AbRrO*!fixwoRlX5s3?1T zR-R%{2>XuUiE>Xd1W+e!_{2Go`eY+=Ph{6o6@i_(5irHzea<&2A#nsOn!1a$IgGF* zEINXwa2X1xD_eD>G|6iy0TY5#5UWm7aWdPB0EO^GhrwwVTXtRuPCf^>f%pEc2v8E9 zIP<^FA$!7(U%UtWPnP8-;#xQ zP1tw8>WqN*@*QC&L*$)CvfMfIM2+H9ib<9oWt}J_PODZ3n0UIb*cWC?MPVgP)6G{3 zm5Ed*f+w=(NM%wwoMtM81-DQW!iv&-4FOUJ0}nyc428yPLgj67=J+vjdzxV?SYE~3 zD!`<|Qw70O5R6e!U1p#NqNr?BDb=Lw2zNmV3vZa9DNpoP4d;p=`Ea(_kvEj(t{+Tw zc{rHj0t3k|zb}sRedTLP`Ws#bho)8!4o&KM`)^oJFMRM|YT-i|nYypPese)TaD7_e zH!u!8eWTFPeG^(choGhX1~jx@huWrVP*p#G0Ck1or?jdU0jdXzE4rbmtP?JmbURkc83W&`iai%G74h`3_#56c1<&losy+6xXHvIT34Q{d|p z35iLUVe0-*VD6)Tgyvg6hRmi<5uiQy8cTM6YU#OgEzTb^Wi3bP>#&q0)DD%PF7uH!(DsGaRYeCOi}hkFq@i5oF5|B(Xhrn5{X2r!cD{cn%9|&XVBi z5Gzl?<^rBVEbz9OV%hCyXd4n~`5(n|cn5eBKpoh|%9Hz^%?wb^yEbs< zslvqqW>Vc?A=3-qMR@wCA`CvQi-s>-;^7A!$?)TD0Z>2d5%Bb@D{1hXfpqvSP2gS6 zfS!@M|q|qKZXvn?52vvDwR3PEmZ}o8K(tl z#SuKwZSHNt+XPGV5}M|v+B8=k%8Jr#wE>XkYeN~B=Iii^w`cM8Y>j{`1*#@V*{U|c z7pqeh!oHi9p>tNCq)j*_?Zok75g;e^X;cG9a~$g5<*@2c^G?0Cg?J z83s~ZKiho7bM4o3^jBWq|L(7KRkclOEBVO8(tDG0@50Tor3crCXJKG)Lf_Lr0^Pkg zp|g7k+B&X7bL&;8ZyA8PrYlfW-w#y{{RlsOP+r}OAk+mV<(*Je-T{SW?Qprc6)qJv zLv~&rWMo%Da#{(5g{Qy?o73Rt>;p-OIZ#kohi}^jRdrVo$Pi`_qJ)(s6LkdKRGY&cisWAae5}NpNf+wmg!1w(GLg{nV zHAUb?{ZDM)O^WhN{Qjly%{L`LaR(HsPz+G>-2JrLp%}JpJOYjf>=~du&4hL5Z*dj^ zEzclCorX}W(+o~w)+Zst_5^~I1BBbyL8Prc!j3&e+Sws6k!2_ByJ$OW1SM;cfuhWl zJ%W=hDNUAmEQIo8Pxp_r(nQ&&DBI(lYognca>|afP2p5WpjHwfFd;mJS{{@~08@yC z0#64Rq)2fJI3}$+1}HoXPrKN%^QEj41;!5|I33su?)$dzq@By|P2jk51DxHq9!i|d zVJ5{5<`JIWE(nAV%fsN4+GzN0a{_$7J&6J8C*7&=lb$sAc|QSE8lPWXL4dlN3O}q5 zfIC^|U?M}=W9JFuxp)vDs0@=T31*8$WB3Gu)NHAruItqx>6dhT13pEHy2vQ4N zJrD$oH3F76^o@@#)EZ!k0Ev{Q#kw#7OSNGzL&_5Z(E>h3z$D-)RJ~2lpRJbaRFz`o z2{md`s!o#{fSOV&4WtS+&Ovr1MD8aV$)$ZaCha@ULUEAXo9(+{-izm^zne0z1UGJ5fUSm^tVR&TW;o#7;zW?fozNc?k z-_<(=9bMO_dR+LGYo|3l%lp3__)q9Z+1+4#nkdP*m0mmy4R< z(&akH%Bh63j3RJ#@@9Yv3W$XCw0tNku7}FnZm4D$yUMm;dF=p{)(mj4ys*4SWU5NK zAh)oCgXx+1t-LpnvQ^2Mb&!-^1+hsb5E_*O?%uIr>);ND4_d*w)6NhYnh1#qYJ=k+ z!ky3l8M-Ha4wu@#11Z%XfnCyF2*^bs?70iu5umn2On`q}C7el`g~JR`GjK=)PkG*_%F zdEcn&Kw5h%DpE!(PZSI7uHkAj33tFmtunnHc!ZL*f5mK*rZrq+(J6cDR?0W+G0ixc zs7^afR3}AwQdYAl`wY1d6+iD!c?`k^vXSvQ>+$RNI{th4X22*s;XVj!9Q)yM=YDwJ z`#P)(9fM8LGx!U94xYn*dus?PF7%7OB+3$z`b72}Ld#m~VtCFXTLirMC>CC#tTNE- z#Cv4hxN&&=6^(@_ZpW*uVV=j2@jL<)t#l#f>oKchF^R{0P)ZJ}P3-6UOE#W%H=g65 zaj7Q#eLaSad!aN|9yNzM6nwz{mIIkrIhEe`h@TM8N5EGd@Ow5 z^!#sVcHe0MYP$re9r*R!f#1K+_}zjh4g`VO=KbJ$^fb65Jb9a)Lx2*tT`&XGDLg0f zoIrp=a6*8h>=Tt|5!*O7Hc5JdnLZD+xmC#ooj!4vCXg^!twsX7Tw zu@a&Pnm7z@LkiO&845ovjsz%%Ckq9d4zdEpw`Jxj&}=^h9;d9+KDO#ec_Mi7moVjr z(Byk$7YD}KwmYy5Joj$}x4oOe4dKaU*G4$IbsglLKMvEWZZMtZ33u}R;Jva?_*Qik zeAXBb-)~EV?;||@s4Iox=_ftu@OOP_e13H$1Ag6~3}06H!0n84Fp}m7w=#uoH=XYd zQ+TKtlS(mp=`UrP5S->q{nZJ(MGA?_VoPO$POPIRlC z%XIk~kp9*%d0}z6di%!Bskeql=HTk!_*eY{x1gtQNZ-|SL*LOk2(4{bpry4R8k>8e zzOe`D>JfZuJE5|sgHJ_uJCs+oLs?}TlvcDtNqLLDsH71t7uM?YFIPW|iB8em;|~Bg zXK#IUWD?|L7ei@jBUIu0sA=ejn#KWyr~#;~8$gJ<0wtBbP*l+a1!Y~3U)sT$s@%dh zZY|HuYl8IL21w1Wh1AR{NJuS(u&8YC@QDFC2Ny6qY70&mJRv+h8IqE6q4&mJxc8lZ zfh)7WfP&61Ag%UeIGuJMJkkfCrSCTEj-qVRB>2Qs!1?4UIEue;NP#*er||YEA@Zvr7K+rT=kbU04*Y>x-TNW94(xz=Plcvr|pPRmJlyfqYRDZ zrV5mLpCLnx@@w-#T2;zaiCSjyrQbCPotxZGySuE&a{u3O_LbQ!W;PS>ji=)*8x~_u?L=V?T1(V zhvCgAgnQXaPWJIPWVs^)#5shH3j+um*9DM}`b4z>wpH+i)n%T*d%+^zxJXk2PsTy= z;9>iYlrEmcLx8d_GUTA_wLx+dfKnjpjAl2UsS4%t2pdmn zCYMSSsYF!PYMK8&Jm+==A*z$ZII#K@&B~Lo?qVG%?_|pm6=QD$2@ZI*vxF$N?kt3L=U~Rr6r<*vj!FgUIETX{ zxRT%qLsSGSPXtp35u6UPRToU5a0yRA2u(p04Ck|-Ri{7>itlBJB7h1yE&$5!=x*>M za5}ORybqCWC%}mgP29Qe*$ghbH^QkcZ$SEqgD{%l0yF8Ja5p~y-YyA+4=N+!lloZr zyd@F7*OtTp^~0`I_%SO`sqk~kKV3BN(J+ss%vJ z))E|rBS3}o{TYHJvhVQu3kX$H)dHOOb!_EHz^WlDkJP7Nk%g)h!SgApMva#Ra-Wn^ zs7Wp46mTc?X{1nq6V)%!x*4|aNQsg)2Bbg@XL*V;&2(4&^)zSw)nsRAjdyeIP5ycp z-rw|6SX7~FXzJAUT^U~8+kaix+}dq+V|eO+UcEjBef`4^dwOp`XZN7Kqhmnd+SZQ% z)eB86z0lCui4fHVwGEvJQ5|^N#kHm#Dy!O{qN-J2UeyAn<&FB{lG=xta*M&`qC1>D z>8KA0ih|_COnt%S3aF@Tf||NcsB7$p+QutTU4I3t>iVI)rVmQ1DOc4EMdh6cQ5}#^ zmS7Rtf-R79xrqxnGjr=8J-Z5$(n|H=QCZ;S8?Cpuch=ilo&;A%Z+%2q5~QW(K}X*d zy!FMuz>TF}Luv2#Ag%6WaLjxQ&Ls@u>*nBS+#|Qlhk$-gcvU14GfKGNor~<0;uF zalNBX>FrvkNSUfr#uk{7#ixNPt@2|~gzjq8sJjw?Osu%SFzIKcGNl_so1!qO(3G|U zIHjzRb5d+OsW|OOHhkWctdj~)QhDOlEL4ywb8OTl^tfXWJc;1+lyeWf7C3~zkmvYg z(}do7{904v_~SHnN9qW{6Ipfy5vLJE9OdXgS!1j|)xj!Tk$<8IJONOO`lQW38Pp?V zOU@XejNwUh5TFc7RwBP|R-le2vvv5ml?;;G)EN4p95i(X416Xw-kBA`fi3-$E-~DDy-%9)3S=$H!lwNj|G=*u8!~I3BbIPqVWKP-nr%PZ2h@Y~e-O+9FihGBDAJVik&1CM$#_3wbri#|1cXNE~4* zhS#wO%T7R&2#E6}9RgA7jrWZ6-#lMIRbQ#}Ex zPe=EF?~&aCoXE06c=9^9Lx9u%ZQ#0hGuw7_&TM@HA}sd6aO_2xO!a_;Tt9dR;pshu zr*GB9!grbz;5)4dQ0*!3y^a+45d)M^p?=Yy4nOaTgZB$vU?TM_F9IIVc7y3l9x##T zDR$W9lkz08PP4KElM66upBz0_E<)mD(JfR5v290o+3ng8t|B0Sx=r9yOX2Sj2Bvws zUq=8Gj!+cN*V~QZ2ti>CP4jqv7H`kv>uxtiFf`3K5J(|d5n$olP7pLPXod0nDo^I15Ta-Tk7^7EpvGl=0fpXaoy(|PCd^d^Jb~v8H)$6hS$J9QRHUiD zp6>c^Akhi>5}f{6665=Nd9?S}aP+sn%+9~d*Zc2%XZ6xsAM1Mhu9XblAb`5@psVZJ z!_LkDXm9V+x3%@@TU&dexuqMLn!BK}sS_F+I`AL>)ptNGo|?LLeNA15zNWSfVG1Ft zvhhJlNi`(Jr~S$0yz2u$pJ0fON!Dj)=IcvKYUnvo*U$y^iY?gChY-~Vm36&PUfqol z)r}CP$yJrK!sX%?$SZ0_kZMGbs)y`LHTu-dQhjt>Hu(6(JhZdD@bHw~Iq-B3(8ok2 z>$5U1LsR<=xc~W|VdSmfLDkhCvI6Cq`wrMd-+;E>DR4+#f)|6Pz%9B0+*5DCvFHT> zP!uE&H&huY7T!u#28s&xYUm_9?mrG5#q1QNVgLXj07*naRBuDWwa?)o!r40fg|;!m zP^!t@P(~Ksv(q}`{<92vuu#$HoxzPl<2X|q!M zj8>}LHQ0kDz+`04secCTM4j>4m6fbI0w{xBr?Et(>a<0Lr$yCbC1_GgGN~~06;yr-? z#f{{=SXe34{3|w|(g$^J1sl&<(+TCK%|a;?c|wVzPAGHyS#SXVL-o8$zqs)>cqn&RQJ=0y0sB?-Pnfck!C3jB~PJW`-~5u`d| z;3HZDoO%vM(w$*4N2pE{d0t}5j+(fsB(u<8?6E5rt5;^r0$^U2UQU+RC zdZ1EtI4vS9QO&>{+jK&4x-C^DR+H)@7?>6tBUptZkRo_mYKp{b1kBdr{e}pbCYZu2 z!4y50V2j>v8sTY*>_N8m$Oa6N6MJGZkCZ2+)_`xzcJlF3p+JqR07VmcVvWnKd;w9^ zL_R7ZibCWBQ8zN(^@HiszDv9aJqgYW&~!`(<6jq%|IIIXmkV`{=NxqT`T44q*VTQc z`O3f$^z>YVj?ODzwRaFe^&&uZLrY7yo=y`2RAXZYft0?Xu~T2)h#=L_p|5Koh-!UM zUDNWQvZ@gZ3QFJcar4?68xi}fgxF-rOuzK-a(=14qP$*T-_VY4-wh2-JqS^~P}|rG zHTAtvRoBhgsEXF!|mep?>H`kWv3_2r76F%p-3>W5*ac zW!-^i{ionucolf3UWen+i(nQ#V-zIc7p?%*BuS?cgS%@V!PLcgHB(v^!<_WS#gs%JnPDa!!U`CtBjH z*mYXfNwMrU%C8rFE$OirgU8{UzQg>!>1+KeEw`mTceHARN**OZt??7~5<>%LpQv%X zRlvomZrS}*kFZj~@WS~g3)2ZaO^v~^c+EF90fy zGgkysG>JzbCjhF}qz`I^I)gKsQcblJ>Y9lPWm;)4ygX1&VRHQ3+ZKEPFZd0^vlkH7 zoNtKb!%~G(kH6+N^-1CTq?IjC({1ja67>ZXHs|upNRfXM_T4-yP`rKzucSUv^SJJ8 z9jx1U49@O43hu|wfVbHh@I!baa0;|M4M7$sAjFC$?@l1VI7kJGg5!1wJT`c>Md-0X zK(b}!iNHy#K1JaPw>gf_J z=mCneGLP`GIi1Bn;lGjD~MF2zdIe1p%rx8NS<&N7{G-o?_v>0%w>?KM!MB zu6W#F@{$+B(-eY}Qd2NrB9tdmpk`!E0l^dPtD}m7B?cyC4_z>qUM|!I8`LIwNGVbP ziBu<6o)C)Y{$is5ruhbOrN=WUrlj-a0LOX zEzTu#Fv&@GJ=tl^*JSixcxi3x*45WH>8h$~R+*b0WQgkM=qc*!z4}#8&sFH?=mUhO z2XtCmx*j&Sbn2U%JM|1t3{V{p@jO6y`l`OZ4eA@(psv0J%FAnJq9S8ozm%D$%gwyh zo|}~q`FX`(m6lZLYigSC?b@NKxtnc4&Q=jbHFQG_p6a?T&PP>LcR+b{JAza@lp;ix zRJ1^Gc{3E3H9=8ngTAo14zhF0AI2qJ0$=~AfAnzj__?oV0K`TmKFrR{hvK42R>T(G z|0T?R^bgP~C-EXnJ^-_bF{o@B0{_c*;TgYaunVmN|CC-Zk6VJ{yii!EPzRJYa%to3 zq2-!GLm$*Sqq71; zX#mPNR6ehkYKm?kWk=qE@xDA+zR1U9iC_vRT-=V_Iwr4{YG?V73s^*lY2Yca7{l)9JmvCidDsWifBsa=6;F5-g>z1WP91l%lC3SRov)AvMQ-USmI&-ri2Lecabe*SFo z-{Y^vGYC*mI9?IYVVh2YrV#@;Db^^y-zV_8h9PxGeVfN+dFE?M{)rX{OAC(xYAb%< zZN;B0PviSsb36(5t=kE%hpfTt_$dUa)8KD$nzK(q92_TrIw1hc+8&|C7LN_vcMMN< zws>1i+c7{9I62txlpW=s=o(GACwnuQZ&H+}LsD%z%vq;Uh9?S$AL6`I5Y-S^2n8yb zYIiXUQ-BK3(>CO@+02%OA>@+2%fVciLM+RfITfTvyHd0@MQr>)?!=S^@%aB|wc z3C{1>z=fH0-u7@a!4)CM3l=T~z*12dyj>9mAJ)dg$BpsuNfQB75`2N+^hIkDe2+6w zDe%Mg82Er~yK@Xrlb76KG{*zRNqIte;C6AUCP09og3Os>f6hKplQ?xIk!?34m;BO% z-ED3PmqGDrkv|d>bz;hnEVkKNVaX8y(OE!PnytfAPuB>%;^PQNx0|A19)XJCs)681 zJT{HbnW#oc!s`?%QuP9)$i^dxn#PYefgg8*rtqpmVZ2;a8Bkz-O0!^iiWR5;apW># z#l{;&h#I{t!sKF&iw`SLyvilVOQ=t2t`Dy!J3()})4x_nd+e-<@zB-BxUKq{ivEkm zn(ZCEx`u`pU1?brfAZdX`yE|%O@mEmXYZY^uKxe*?Ce93>V>xU9%yOlMDXbVQlXlg zyP&y+PA6ZRnh>Pwn?EfrtqdU$i;K_H6&01}E@fXfD=)43Uu7lLP*vHWudi>Vx7U*; z*xW+dsvc-;>R~miuCW_x>pP*QzEcL(+eJvdx(&*!TIFfcmsK|FOUfGbxp@^|B_>}2 zzkukJ_~@9EDG6zinU?eLa$d2%ysTDVUEQdkxbr0}e)4DNl9PDxO+i8JHHfdc zi~oz9f+N9g5R}{omT`9&ppHh)sC`hv#+wv5DExs-5Vbv2lxl85kXnsDNT0$Vo<+T1 zLU#Licq&h^TVT7Fft2yO7-L21 z&Wb9P(PL`Gz{;Sc*l`9(GlnIjY?JcmPFV?>j8&&?CTnuGNW1P$Bg<|PHpZL46R&8& zuQz_pp7p)~F9nQn=M$}JVR%y1r+{&I+s$UWI1{Ma%;5imvAip&#L7Es%G zgsp{8n{3UwvVf-Tl-!fZKpivmJITO!2!WIJ5xxd<-svENRFI-J;R!H1Aj07s5*N1> zaPmcHBBjX(fyw8{E^(W|X&2WNcpnl)nFLRC-1cojfI@iMwGl4t+z6+)ZGd7IOSlo| z0wc-p2v2@+yD$Xql}5q`HL>tfeH?tdF#*2almwq4IDIYw>Ia?4@cp(Jc=xh1Or;5U z8YkP1R42CVeEHC{9jQ*VOqaTyDECAFwLkzui+?M`I+Pi?ymzrC1n$&_!kq@$*MvZ| zR38RQjUuD8MD`n7Z;`M>fJ9)_Ai!v;B?|7eL^Cwa(PPcgu-F)d;1neRi@=JW6U8t^ zYL%i+Q67rzJ+=cyu1a)71&eESh@ntZnZ&CUL2?49F$qtj3Op5veRvcg=L&;MLV3EG z>j}4VJXn3Ymg@X~R=9M;IS+rHcTV@C;&ZF=LtVdyqW|hkc6PR|p|O5>ujiRfx5bu|7>jP&^I-AAwc!$n_GM6 zicp3S)l3l8%^~%=1_4nFQgxkBg&#yCjM_mw5Xno0v>1xjn> z&8rz3B@?A6Qp$85D^m$3N|bEHR{NqfbqCv4D&90%NW2nA8DQ#;p^P(S$q1s<+o{GN zrNEA<)u*jWSZ@E_)pStZ(E!t3BehHW@g9|J+Vx0qGOm8mmXsrTl%dEGKtccjLUwMB~4S%i?&J>oX?E!mdC zV`SfP|5LiEK)q~c=zvmzND~HEL*-`LcJc&Sd61y0O?=FgC6J|X-bsO{=hcsg2jT5G zi(LG(&`K8yl2?lylwFespgIfyW!eXIR+EELrtus#HlDKH#Z3cH+FAoVFXQLeuHXaC z9DehB3#_HEJw0CwO?12s>J!;_y!TE4D1<30&lK(BB0#=T0@Rza(!!%FKK>llBAh6L zjqCQq`Q3-X^Y}^dH9G}<<^)a%OqLWJcYt6^dxobFD|-k-a0<7!L68!maiz8(%Fc?d zyGW`lu(xD*q7!aIs?%{^!xG6ho@fpa;*w(Ir_SfWf5 zUGcs@D^L4`(!`mky{ts}9TiuCDDNWzq-fI469LMTL*ocgR8>Ig(_R9oP2jjoOx$Ii zJ_6TbT;Nu+2TW)AGCVDnM8Z2&(eObX0#rjho<#VhIf(=0WaE9eJrTY{PfN zTvI>`foBWIuJhq3J6;HkFfmEH?8vU8ih_y&p0uNhyW7@5PYTsMK7P9y zpHFawZ$C%*sJaMg2MS1=s}mhjG>u0#-jvZ=mtck_vhS2bVRBNSCQ1xD@Wu;8nI^## zLzGaSU^v^8+sCh^y6UecJL&rqoS-Sj?R-a^o310yb#-)r``1A9fAUgNQi8D5sEd!! z)8h)0R+W~O>hkh0z0%s!@e_it=H{;dY^FR_YY()v zst~0oORu4+O9iO9h7PD}?4*f5y>e>m+x6A8tq&`!o4=~4YJ!5oihqlUh%rk@OxHEF zwCXP96}2u}!WU)9$&L*KP&{nDp@(qCJoNxUy1qwZrknRFLIbNZmB^A5Zb zI0Nf^uRw5OJviVmH*0w&4>f?fV|=Cy)sh zT~Heto(Q500rCwhG#SF=>tyyxQJ@S;)a-H#k1Gx4WU=O)(NRO>stSdVt+;I108pmE z@=Y2AN-f)zjpfF52e*v?N()uX7809G?P>EsruN=W4MZ6fsU`L7{#(>3jgquSsYg&+ zz*CIvH)HU+vtmp5@+rDIJn^JtG3!4m<7Jp#!&**wnKCxjH6Quu~dzEOPv*=uTm z{J23ydPN4wS2~LFWH?f7(!i70f0xQ1hr{X!O=9mJ0-I$f{uy%N2?8i<1)!t?#W^Sm zQ0iX19^*bJZJmL#A5T%CoVC4B8Y|DF8;U~rhcoZP;jFjeDc39Tgkzt0djc$mCrt^b zgr>)-!hqhV>kZYuqkVZ)U+`L_82;ewngl3@DEdCd@A)+zgYd+mP&l-1E8BP8$4`L2 z`3dkdJAnXo0)YmhiQ&nf3o}E>x+8e9wi5uw`6prBMcRtYQ>2|GD^8KNW-3HcI6TTu zsV5MVbqYXHEkTHtP@Fv`+hR>jV zufupqb)vvHUfmCD2e|m9%=Cu2JcOF!aJXL)4e!^) zAV9^zhxG~Yt;R(7c2gpJ+MEbqwBc!vf%ghrVLJUhjAXiU-f1Mq6Gn4|`b6+FCDo?| zT6t0+8o6ijHigD1^E4ydyUDgAfFjk2>I&v-#A+4FJ>8~hxoWcS!Z{c|Np%JF5e!ZQ zPz#MhNg^m(#6Od`B2cx)^8MQgQww;19-n`&Jr*Aq>J+I_q+F3oMF2HNlX{ealF+1p z)3jXwLX`;y`!0m@PvfP5+(xbxX^s~AtCM(?eWDI1#lGYIr(AE|fp;_8LqDW;KRH5o zg7arK7lI!@;T)_h4s+GLoAY&z!T<4#kB^V8rlwi<>8J1O4j(?RtE+23C~8_gJ~p-5 z$@!!%zc61{SyiiRsBgy8gs*Ev@G8^o+r33MF>!l!eSOR7!plXvVBc`vH*_!QiV910 z4UJ8@#>VE=wY7D+lH$^BogKYD>+0%<_V!+AZR`08&jSUbnh>fQo4fT0QQ|aqQ9zv! zg49Cghg65xAyDm8hcjvbat=q?PSJwu#Gc(!x`0t$A@MB!;7n}#42lt+4%1TC&`EexvlGuqc?y@|aaD!VT6l)r zd>=pV>k%3oFVdhut&^pirVzDZg^4^RRK6kBw5fcBa!u2ga?QFIH5Zj&Z0l{+7H@Lp zfugjmtW0fNHnC^iYHq4Z8S+GTBv>h-a}7i#FRu;Q{m7#YeBWKMa=@sw$;6&h{ye7O zr~F;EY1Ag8CUH$Qgb_HIz^n4LQq;wD5}qjY^alRBd&adNUPf@IJ$Gc?JsC6sPtere zvfR^kVQ2Be;BEm>XZr+@u=-TN_MLHkfy_UdrKr%P7HOI#YU&KMDwNi)OP0!&1Sj(p znRSwRCkao_n`iPNaC;sfdx?O`G6$ZtEQD3sNjzKAJ}3=9o%~w?>iWvPQ0{UfPqFg6 zZ^AnKyj$nL4=)h}Id;PunpmW_@iu`ce2nb7#}xI+P1YA6gguU5lb6DUeYak23Q!d& zn#RNbl)XSjoadY1<;_;$uw@r`9CH9)GXkiS92yt!Bu=QcJ;PJDwKxP(lzAfSE}AO~ z@V1TUcZz1)&H}Gy5Ju_~w~3STB$ffQZD)H#0F;#oiHpfPp)QHs(*ZGIXD)2IKy#r+ z3B?Jai4-S>r#%c$WYv*n=XH1&Lex%q-No?aac~F1(>8EtctTLzyM-t2oOW-96I<7T z*TJpO9&{S6#k#^sst3&E`omm7C@hsl!P`~Q@Lo+UyjL5K5EZXxpgwI$fG=8N;GIHu zn8`Q~W7*U$j&DmVSqj985+yJ`O*`)JES8DIz+~HrX**i_>(A}tw9{^`S}gx1coOvl zV%-XbxTyehwnl`;?=*=l(^O5ku(6rbR3rhr0Edro!~dY(;)Ivb20-pT^lBqD4{}efV^7igpzIK6`CSVgeST^D(yQCk{8lS z8d+hGCwJkA1;ToszDuLzdk^=%l-nU%zf}@P@9vt!s5N*@PwKo7&pC2D`ia|KINJD?s@wf~l6)?uSh+T@RX? zyB{<*cYW2+)cHW1u7`~rHm4c|Jgs!Q^IvQ0TWX_XVqd93$h$r~y^7Q_CwEWX*sbYR zgG1x==XLMs=>2zo|82c6_wL_4oOu5q^o_TE0{Ly<(FYfP04HOwLreDrn8hu^Q(iZ~ zH>LtErp|!{{=g#@O0n?{Nfl~G2>x*O9O6;%9buDD(EokN?)U-@#o`ak5P~OR-E9h2 zGEmbhNT~o7VNjt6n%)Rk6sQ%{C~4unA?pkbRR)GWsCAEksEsSAPwK*9{$;&fiQ25) zo2N|XB`g?Od8&#MZ-A#Q3EKWB14NjH&bL1jq;4B}q_iNVZ8$f{N-1!&OS5~=6s~qY zLb2Ml(vg#aJChAT@ExY$WHeECd&N2eH12@I6UEch2iNL{3ZV+=bpykF`5>Wxg3TA`lU`b7TH=9vZg6E2ZWK+-6EV#ZQnL! zu-3Xz%|E@U6lih=Dp`|XlHjC)s8^3CXzC3TG@z9%p(#a$CdIN7wp|7v0w=025J!CM zSFCd2X{s`?(E?PxiH+B($w6sC}U+7(JfzHtb5h z3(vUp!!u4&h4PfWQOZ;!etxMubCnX%cOO#Q$Em*H6=~nm-pY+ih@6g8pVoQ}!)nV6 z*zx*SaNKtkypB77AFEFe5NK)7eNUu11zXzj#GN>beMj&l04mZ(?6jj3X=5gHPXtVq zbuyDVr=zM}7b1I}l!}57?seKPs|gOU%0&15m5Kth0|-kZ=j6v$od74FW4pme$vjB~ ziYf}cj)>s6m$dCX4@%|fz;=YEH^C9X>Ef*C;p`gr)Lo&YKyK5L1C_lmt>l9ea1nq@54liS5-3lN%= zLl#znuO=*> zQj@`YBUt+1?7atYRausXGnbRa07>^VFamKZr}A?(^*07*naRF1cAwK0e~zlQz%-A#=x|I#!19T@ud?`$pI ze`Y&z^E&b>5t$-<0IHxFbZ$5|Ct7*or0jFJ>bo5Xx>>|g<8)JW}sZyzw#&e z--g%Nzf89mJ%bAme+~y~zXQt|=wKFVUW(C1&X)?CRVcLs$~Y37di5Z=vs9#%0J*bn z;|=KfC}+!#JXdSIfv!X;6M3qYmu-y68JL?dugvCvk9ee#z$v`C%*Rf2Cc?53;-lEEaN$h6-c6_HO%zSL*o`PiV z={E0s+Ifw^2ZNC94eT@v^{E;he5>G%jpYoWiV0$5{^@h)n;UtbdVBY#2^S?C$G{^__U*cD>&ef59R@JJ(wTN0ZPwS3HuK7Pwy~* znn?;W|GP>Vs0@Cvb$l8&!~0)>cNY7DhwD5DUW@kK7KruQ#?Dp-Fk8sFOY+%FQ+G)W zobaUh@{_#LhYs3z8C$&B`@9$|dDFTU%sgSUcq-+c5SG@Hg_j~qF?pxcYJJ*{PuKB- z1(|W8t^k!Lgr+zGC~nn7Vy6=Wrzp|w6s6>y!ccWW#R-o9C$jBU@@s&w>;jg!gWtm0 zuyejE9NW7AZlwFey@L#b@*|+PlmX3&6c|074$rGI;Q6^M_=ug)1VDYGE}O&C$w=tQ z6M=CACsdq->V)8g*(Yon$7wr+CtM251LLujeL{;17XtT*Wx%91o#O?SgQE9|N-;$S z3G+?_Pgst5Nlw*CB`K4@NkY?T6N4s%CIyJxpblO#IBF4Vub?5D-5s$3N1ViPf_p)3p6XDs6g{kDWAS; z!?i61SezMbyLUA3#mz$j(3l-~wN37R%RJDWCc-~BK7z)8H1ogpYS{NulLXt>miy)>lkfgL+#3Fc?aZwo+X`yGWAn-Eh2t0QLBjE; z@OnrG>`gui5&4h7Cwmk&W@96HKP<%Vo#4ChrvEKioZ1ZsFMSuP@Ba)UPJBw!c=MCH zVLpQ)Y9tpBHCrqe#+_w&T$6dATtbv{G6yJUMR9UguW81W6o@oKiEvS1%4jI(z~o}7 zHE>h%P*$ZwAC*_YX|@7Wb1V~j?%Bh3cj%3s*pt~P^L5@deP=iu-ut&1dsOUMikLNO zl^`fBMPk)f)Nbt+t2SR+)T|jn?HaW=vG=IGgQE5xHJ|*h>-oRUyX49__qjily_!*c zwdn(t+3<@nw}%sfoyYjVFQd-@UBS9S6GKEsm3nmNj~R;8Dh3px^iSq%2 zM~m;penK~8kq_Ks32{8l5-a zw*QIKr4ubx0xiaHql3OtDv%-sXvQn{yx^eo9SJ;lj{~5!KZxda`3Kg{z7$Nu^%D`3Tg4X*(1(0HWo-yY zo#a`J>oJoB(2yFHXs-?Ih+S7oC$a!w+tuhq62oI<4O-kHf$MW>+`JIkabspY*?bGq z%+8$pOq70jyiaEn&VplP$>f0D-?Fc{_g+QAr0Yg0lfSH%*L-QixOM-h@!QUvdk-p; zNslPq{KpB_eH+x#-9eQ60~C{XT*LbXZU5g?0j>uja?bNda4C$rKvXqq*A^Wv&#FL- z?a*MRzOU5)j@fT+BLS<&wgZgTLWaUh8^a^{rXb?k-5d8%S3DgS%V3wt%46Z%u%0x# z)wOdL>uh?+@(4xnVxxkPGYfeTKLPHelq}z;!QdkE16{RmU3PD|mEpZ?k6+~6+|+8; z*5t_0BxRMA1|RM0yzZ_y##j;)^J-K8IwKnTHT?R{cDPDoHEZz{wJU9)g}h6%1Ghc# z18t>JubV#%H$LUd4(?$0y56eo|Gn6E1^XEj|<4X090)%*#>_Vy9w$J+t{ zKE^f?k~mBF$u7^|+6Z_2#&Pb*C{48Z_wyxX!*ATq8OM;nWEu2e$0s=_BUa1tyJ0g~ zLVQ}JsmIqhnSSACX4KWlJHI~RFWALD{=mX;NV5aWVoY@4Q&dIp&G?0%q>RZ(+`5Mu5;b*V>HqcMOhHr0f z4=8n2KI-s@tq4VnM(+81fXi#5Mdo~ZgLWABG|0evVx5R*V(gr<7PFuc=G^0ZXnF%x zI7A$ltx7x%lhxdHy&z_H2qLFQe1;?=?kOekJ`nkq@XqYf$1Ha~W_5_cX+u_Spsab6 z&&&cc6sGK{(A+O4%K?w>7?4@SC5@xQTRdbXf=BrsJ+~&XUg;;AaN5R$1|_b}JpU0R z^yFcc!u|13+hUj)nT&1;tCrU;fr zR*#nw67OAqwomOEm_Pt*xLCyj&5wb_IgUO+>p<*q2GN>D24F z>CP>(1wPKoA3XMABL4dVPpftZDLw@&vngor2uivCV^EL%8?GmEL7D7>Ex}zM?5)Q1 zNoI+nn64ea&-sOm!vpKSkdNjhya+6aD#a?I5Wo^QW|kC*dOZo}RS5{r2m*mM2Qd+p zzOUGl+>Nryp$?Ks?oEt5Z1gh8k_9V41WC)u(YOJ8W15wj*%t25Bz%m_6VqdMg)a5` zvBe?=JsJ5P?9Kv<=rj1R^)p`lg>}a`&PDo%{Y+!zqVwgxqKv7=OBI!&AEJg1gg=yR zwKK^X6TckNZbofqMX0x$L^$@ne@iq-g(#?&e_!NaF8uGH!&o?e8T}GGFo;u=9fol^ zRc>=rd;x-UHm5sq|4e~DBRV(8+mfwTErR@`>wiPaJs@e=gLe`EOJ~RYit7=(=jEw2 z8SAF~YXi;yz3Y7{mWDORL{qE?fN`Pg4)D|${27@gzGT6rqU!%q5%B2d)bV{Z<%ATM z{kcpZ&a;+TPw~&(F8=} zc8b+#(ARASH31xQ(}wHVPL(sJN_YdWo5n)F)yh$BV$?T4ls!;mnd|yf2q)WnfNmRU zn3W-S2~6(Wey9&fNITPNTW3&ZUThRwt=v)-71U4;cBSE4`2t-y$@1bq-`DxM?H2Hz z1&5k-STYBPhFwiWWP@6jp|Hm!+>&6r02c2r4d3!@VlODTrnO*msRr84UD zQ`L#EWDiu@y4Z!0;x^~lb}&t#p~y56;@s&urT(S_i@p`WjEC*i#6f zL3WytqPy0#TpJF|$(@4vfjpX9yuKt*rl9`#CoUCU*KcBYHNgHjC9?d0W|;)Io0ASZZaW z!dPm-JTH^Eu%Z!*WQi1f7l7#Xc8zkML6cP?);bjVJBA9H}7kJuY-#b zeu>Y!3@A2_ZmxQw-^&UIFk3B&E=ez5^XoqK+u~Mr60;{x^|mk6%o#sS@~+-y;%>F1 zHd{^)tbQoRi58cMb_6*Zrnjjp!FN9#PrWsT8t4m){~|HFY9~4(TyzRCGKA!uG&3{u zTzTkq=)4${&k3*3PpN{^vwAPVL-u9x=);&w1FqWguYV`GCroFM(EPaeO*{=N(UG2}7XELcA@(V8;i2$Rw;;GJm&@=Ef-*h9YHL7e zii&WPchtRcMSwML(UTcTncj&n5MH*~2+~Hp@mv?C5%}3mNg7jehlRrc`6rYC^~ASZ zJ}?wxsvB_+&Xbveysct0(Vz&reXW?&Dhz0f0UAY^I0JXZ|6>L0|Mcuh5!DTM%uB>dZVK* z1P`iwTBdl${9(*CANj2cpLToQzCjN$y~KuP(@^<60~s{CO3gh%!em_Sz_(%#@SctH z9@>LPfXiJwJtW5e1T>QU@Rw~3RsH_6>Exx3@l4|pq<_M19Gtur9HM}*<fB)}yM1B3 z-h}Yna1;*WO@Oq<+R3cMyN<<`z9cN4a%>n=?BC{H51Fw^Qr#ndpx5Lp-hwcUd-Y7B z!@dd{9|W>rb`47JF9-IxhrFzyGN>tKwmFg_!n_8$@N`H2sL>58INFO+^Gx?vM-1FM zrI&%z!nLv0wo*C4hWjm7b9-p5>&(vE$-Sey zN!{$@BPqVf1q2|qrJrr)WwR1`myB}rS3Jx6|1OqZ&4bDzIX5-&rW18%?0d1a_#aGB z+`}^eT44b zZtI#5-BhgN&T3X`Y8jTySHp-xdcA}$D4k~f;zZryal5su>gI_XIE(DaF#voSKuy*6TPb;MG{z+hFFDf>y)9 zXA7RC5fWe5D?3UPIr=FQ{Q&XnAsQnKx75oo1%!eh?{8dT^nr7M0!9sx+llv&?ZD5c zLxGbw*^kG^bn^G0zYqJ8LX0vG-6{Hyvd8kLgz4oJs0CbT2k$vCC$m!s%WFgkbOwt> z$O}yWs!a9h*?)>86wOH5Qd$II{30%oVF54pU|Q>#p;nGf{u>#J=Im}U1b${FHO-*1 zF5_RmBzkXe2~=X`1z{%OVxyp(V1T*CxMruI+<$JfgaqF%u19h>i+!X`VJ5#iwTx@ud^Q~O>9cHHR}|gv0?R?P^qN$%cIjL3roF84PKEn^~ z6L4U_01T1inLrU)R4@CsBft+|VA-9@=1_{n*{S&{77QoJaxI>i3wsbp>m7|6pVq@= zQ;xtpGs5f|KfxwkT6DI|WfSx(9P6yhxpNBbcegD(?|pF02)JQ@Xe49hms@qtCI$?% zUrR_iJ;&AGwyq3#;2<>Hz>gmQJ8G;vE&_gtwVypAQ+;Vb4HgIf$V(qIplDU;!t*Ue6$^ zM6YxI3rlj1Qd$K{jU~Y!gE+c~OCjaO*ixvByh}b&%kJ^WcxDShxh+1#*hvb^XZaL1 ziWQ8~3Dn~wMOZ;xi3M9c;JxUb#Is^yBU<8R{M(!>1N!sivlifjSKJW2fAZ^{q2MP- z7v;AgKPLTZv{c~Zj=^8+FAuQtW1Xo{faQG%TN#Y3lM6S9E4=bgBG(6>Cb}3nb%^6eUDBWzuH8X|dw*Z*S zt=(~Z<^Z9gE4z$tsXXPnK|F1N9(SB=b}w7|cJPep>g)F!^mpfdMze`W0RMlJfng}; zhpYpK)%SC;@9*OsA19n}iUb?kI)^JWzGW_w`kiH?wv?36elCP9)h{7s8g%*T#SJD6 zbSZ@RgJu9V#iWl3IS^G63efRio=Z%=E>zR23Z_{c9Ruq6vvWDkLszV#Y78ag&)_}- zXrSCAb+`vf)!nqmR&JLLf|7m2hrhLbfQ}H3)bhx<>!wPZzfP96o3p>UwGQZD&m&td zSBAU%43IjaQA<^|mo|TI|C^sxog`iGT~XzZ%@AcfBenjTDi8F9mJd}Lhy}6UY^OK$ z5xagZ2Hh;ot~l>b=Q5V*x4^5oQ3TeyERN-e)?6Kag=NFx%)tN}4yE8hy-PI9M49yM zG~Vlr$_7SiN!>yY3>DcI$q!4!hiIJ2^|D8gii8x^&)=>t>H2OMt3pv0kWGD9Zv0k8g#As>rwj z{Cb3hzvkpdv36NVzg4$SHe|yd?(+kge_gG`syjLZ)lHt@^V>9OUFmfDIs=56*lj|E zP{0x>kr|WnwPegn&0pJ;>n)ThJ;(p_~*7xp=X-`-x>W8?i44%zTuA7$}+o=LXI z0HL`li`?Rrw^LoDs3#Ba=<2ky6N-v_j#mUMCJmyO(#^-Th$2)&<3{tlB0(I;dUH09 zlrYF^dnu2EQ|cb%7uzfsWfILaPm(<+w3WblmeuT}D;~56d|^J>@YiSeNix1wXx5s> zMqaJ|@3KclDvd^qAir-4x?|zgMva|os_M&Y7Fg%!ZW06qLpaDc)|Q27*;=kWab%X{ zCGlO`R^^4P9KFS%nRbk*m0Rw3*RswfG=< z$gfb;NhB$stLw4Su3vOepI88$lTuLUPP5-Xl+YnFSx8FeI54Y+-AG@nGOr-qt}Ifi zuNt}$7s!TWCG%gqt~>%Byu0nc84EnWdORCoyJvIpyQZttssBuTOAj$^6DMvamJhj7 zbXHiO;3nkp2N=6YSX5&bk?jNi!>U!o(RC0C@23N``x1}Akk{ zavw1VKw@ue|~(0Xf^e@X@nm90RsQ! z9?#A#R(BnCRb6WuEx*c++e|Zf-(d#&6rP=-OD_w*Miwj2-D%XdbcXdz>X3 z7yKXSmCrTgYoU;WP9`12R}kFUO5Zu8h?A}52Ik6LteMe3oUDSMh7j}o-lAoNphVd1 zItfOC8q<3sp$lBZo4ht%q5#;CXEXU~3Rl`MR)2P3f};GJ8q)?US_9iKdKgoPm`gq?{9-iRLmvJp*`oC?+gY*>&9KD@q+7Hyp@2 zu7s6L+*LSFg93&Ucl_OEmE1wnsWeoK;ps^s|Wj6)NULbSRPUT5v@S6HO!#}Bo?yHEBfuQ%k68~mI5atd~0-?=t@ekhc`JCK)u zL>-}5{=RRu!m?h>p2gKa3M7;vk>?Illm1Pp&@*PSxb|eu%`O#t>M8b=wAbVdepst7 zK#hRsvSQ|?DgZo^0>mV|Z}Nq1NWZ!GD}hLSsL;Qx)6Jd2YNU^=qvO^W1Q$Cs%oR(x zj4&@g*>oUE%XkX;m1|>L%>Q~=SbVVrV(1(9gVCBt2M1QA*9+w!Mdu7Q0km#@W>Jj*U zt#h`4o^SH@=HkBx|McQTUT5`{sA!SC4l4PhH<+sWus%{~z9J2OaQ$3grs32_`v21c z)U!pBp=>S6S6`;K?QyiU=Fu|On~L5b36Vy<|0AmNAUi$j^`t>nbUYN=g0jkKoj(~C ze6hVz$=JyRp^FTJzpgjt`j{D(+S10A9j3)B+Sm7@AmGqeM5^KBWo@VN-fxRF56NTW zs*qqJf+7QK*vU$pVt``MLce)`2IAQ(t`~5%(>1K{r^%XGP}Zrlq_30SOtUU7mIO-c zH<~ie4<@xomf@y!&t`s&*JRahtEw-s^C(kEolFbZE#p_DSf|~+jOfMf>CSRmwwRQ{ zEpoJ57R(^A?W}_+t(!F@F!ZB&nHPvH-vsPRrQn%v4vg!u3$*ZMcD@a#5Lr#Er(@m1 zhk!y0S45W_=}>aty=AowGPC4Jzv}2I2%PJx=)hVqZs&Og@#xkVc2`~GjZ5@_dTvm` zEBL!?#T?hLB-EFd4WhDUEr2$Z2|lp-;>o2-5Tm`~<_;FvS@z94<`UH+$iUL%WQvmT zlE-*z%d^Eptk4pH36h>6F;^;zX@Oz+0pd^vtqdtR( z%CVU~V0#%?VCYAu`pUoVr_m_jbF!_qlV%@wn78n!$LUO$gWk1DqN^8qH48~dS7G|V zyFOM8NonSiJ>%NWD!%%$&)18q0e4-2VXxU9POUFmv*$xj{m?3luPZ~br_O}|u-6%c z$hxhs--tKeA^1gd1_QASNZ++kY8qsdPZT$TGe>S9vC|z!g`~{1vHXW1heb2y&%rfQ zn3MKH-0BSAyNjbujQLZHJZ~dSJ%bp>**hHe3~zJQo!@>N)W(_gO2VX}5{lpsGGE+# zH5Ckt6VVEb7OPwa{`}{NJEM-DL-3QB@zG2Q6Hhz(=`DWur@hlHQg_Ibm_^~aOtBB> zrTyzcVBObhrqgb?S<*j1vjUW`ks_89$^8_9{~t3sDzRVo;FGwqxA9)sjjkZpE;Ws9 zTkM*v#cC`6feZ`Mtq&`yk@*GmeGdmFO8^IY#8Y`5ON9733K}$>=+24{OfP~^hp=dF zuAS8?*qU2+__$m(V@-NZcQVO5CzAT4J=4_R3ZLzjNL&o(i4RW*cKcWahGEp7vG20+ z_%BZ|8jG1e*)U9dE1E}cmVHYkyF)2RZHpkeduRXPimGY;V_#eE=$WwNq0Jon4{0#} ztO)GH3cZf&ijX69lAr?TI7ZG|X(O%`%oRz52KquHdnf7^8xRYL{Cx*TN&6{5;P z^P;iXr&4%)LMsrDu| z{eFU$nxWaZz^eV2!({0F+Pf_B=6ZQNVT(eNJffo&?3E`J9U5Ep3ZOYKK7cO1eZ@zr zD*~4qz}nKqIj6Z%vVHh$H1^w5;48Y=xC2;!Bn9?dOHTo|lwf_|ww#^pZ-nE3OeTJZ zzC*xVgdfG+MB+a+$4;K;ru?gsOQuFVsX1`?M@%!!9wXtRXP4>*ZE3eJ(z419YZ8lo z3A*&B>{`QvE%iRLYf92cS$bhWkhp?7xUEBUjtPiNZ#f3LEG zUK%k;Q|9F7$KXz3hRC&D+w_J@!B%vNzT03L_S9;?O5+`- zVI@^dHJv7X#R{Kgz0oh#iDp20(C|$Y!?wUl7=Bgj>7d^H_wApWo7P3|ShGjn^$O0^ z2X$xWc5y#owiD4-Nvm}9GncAGL2IF}a#q?uzUKGRR#M5^lvkY_;KVm4=%v2^j1Ry6 zNGhC$wtutJTlGTKc2JTm_ScRHjf;3k@z`JQDqN`B%i~u$;MSN#Qv>}Vjg5zTl*KBU z3xvz+(e#;E+ikk#vMM~G7M~7oUr>1j3*fjNjr5j3QEtO;Vgb<<*r%K!n(*chld{s? z`L1&J=Z{}RV{Dxz5japj$N>$OGNmUpxagMn4Ur#|Pj6pJ^jqg_Cs#Vg)Irk1)X`=J zVcMKnv8rI`JeuMpf{`MQYrp!a?@sQSMOuu0^{M=bjnnT7fSHk6wJ<<@_Kv$9W!R(# zbdAx<$4PvQeff^x(XFx26~}cQ?>ULlu62&9Kh+6S+-*;Up z$7avB7ZE4NwW4P=|G7c6Jrx%*x+S$0!HzN*PPZ@mEn)$LA+VKCl#7HXcbbprZXUHz(^VwcNlz`OZk_NB+?5b zMbgN!Zn4hnTqk92I!2E4bri>OAHq`^QBmKmPFr-?Bw{!4FrXYM5-|n(lHU>~Z1i2t z!cjYWSLzj+MLd_0gMq{Rw}GdBv5KMhq`o(M)$lQ(=BkL)P2~k;c+V|^a7^^ERIxUp zX{x8gpFv=WX6Wy_<|G9@!uu&F1UETBkzCbb1K*5NbXt7C?)Z@C2jo3ocEd(^+EPr71}~IHAc4H;%ag^WSs7bSP`w_^cO0+u2_&#_}W1{vXfFz06)A_slh1~6Kefz)jzDGRV_YYgv|1Q`TfAim>KOa$;E6?!wQ+ktBy>$`} zy20~eW(gL2`3&vuLI|E4al5Av+6@lpZRzZ=TH|u3agZ?bQMG})sfl7aq+o$UctQ%~ zbZ8w4hIRgW#o?8FHjQ`Frs4e+_;#g*3pPL_w5wIEH3MlZrIPZl1xkDCd@2=j(5qtr z|HM*8T1zU4+Z7U<@4KIMXR}CY>yKNJ(AW=;72e%c#c)i#9K5wDT@9rI=*MMbS&x=; zeA)Ub8O>BdK>%W))nAJu=mkaJdl5pNE$RSeGA2|lbl(?Ns2U3w!D5HrF~;69G<)QZ z&j(3N|DeN&sY7{Qi}*zDPI4YmEjuOt13kmFj^JtRb4s_Po&6%xN-Rj5Wk+|#D}i`B zq#DUY~cBQDVC0s)nsqNAdij5tjlU>ByK_e*J z*~HZOxll)B+>fdn>RPi(ZrmH`!t$kv=WnS>klK$dZ{36_PyBuJ|CpN*DtkJ-QgW~K z@QZVgqV#D=wJo@xW6MFFhQBO80m`4NmL9$g<-y})rTX5JMliQ+eNrs5fKi(ocz;;(Y_!%~k%#VsmsX5fDsZV6ykt4VV*T#MbGuEwbq#~|j9zVA<7PG}?Zt*{ z*sX=P`*(k4bKZ`;8~Z}=tWIKE#ZK~+gB#2f^V{i^fpJYGFSC4q8OR4-I*cx?D`+=!rf+VB?z&)A8b=M=Nl zB)QK$l-2Z+NhV4CN{#=0*!`ltOEHz1RGRr$N0(1h$H}4JPP%?Bz`ZJ&NS;XBaBD}r z7J$|xiCsQO@*fomZ^D1Nll{Vu*nh09NbQgo%R`@!U>`e?=~mW5=Tu{+HSD=sMWQrT zP{r!7Zn<=hqKKaQ!kQ&|V1MgN@JW;_0Icz!w%5{uHsg*-avH=BPw(J@ zLn%mB7*Si1TyhlBOGF`#_372%3*-R*Y|D^lM33xrvVaNZ4++wO3J)xjgQHr2or%NX z6XH-z6$%xCThzd}?~1;qnMl8pIkb2mNnC5Ssyaulh5HuQ!D8jX7rt77y)u`NIW^?F zB|bt3qY`_)Tr+&F2V$uwV4`FPA$jtBPnQpY5%2!Uhk7T@?=kx0OQ=kD)gYP9&(zH; zrez4V3~W2fonMn&41m~{Y@UY+x^FA>?|M@9VDYU?GFcKKV8N$0=nZ_LeIE`(Z?kGtdw&5{0g36;dMLT3a7X#yZ=aYYxAn;h395&I&!%i`;Q#sCeEGSH}|G z*X4+rIqz#|!W8!6D}hQNj@tN*wOF04qX`5eW_%s@>g)eML@N^OE+@Yo4-Ed{>mna6 zUjSfAt9J)OHM>HN-`V`J$qwYh(_8~81#bb&aue8oB=W%ruT{*eVMqxp_n^+_JTJrR z4Jt(b(h%!P4r@?dvd9o>mhVURDMP3uK|T#Q;?JT&rvxw(8pxW4cY)4Q?Gl6ZLJ`capq-rlRJj2T7Pku4=ZW>kqw%_Q=2E=|~h|=JC|Z z2p!s zF3di7_V0ENk*Y4GD^`byK@s$AsCf^m?Oe47eprPmg~*;P?`;^mdo3zB>HGJ7S)U1o z|2@L)es0&|C;1p*FfFx2@7(erly=paTH7jl8Tg2Xnxn6CxPfe_+pyd=%MzRt)ge{C z*ML*|RUxV7Fv(tK7+j_RH&UN3>_{f@F~#0QY)zutK=J^nlxMw98$WJ!4~*qk@>F5U zS4e{oCWd=kxjMrS+&lmh4zfhT5O}6Esz2n&bbEBPY!;sYVBzfJTFk_#^c=R2OheH|I1g zKl7eW=ORj`T#ifYIY~yZUn%gFDRy?#9#z&mLX9~3S8^r)MQC2$22FawD}z~vMA@Rp zr6^)Iexr{o7KyviDrVQO7ebDS`0HNV>!q!c^Zr^}7#RM~l^%l#&`}pfDv@85)z<=T zg`@*cL)-8DbdjubkJCflB@~XhV}a@DVwB9~{Wd?SF+-I{&G17qw`6{Ws%*JhMM`O|=s>Y_>yWBZ>ENEY&VF?U z_f1wo$uae6zCMk5_b`S*n~1ajWF|DU6t`z+)Kike)Y;T*`Rj0(W-k`HY~jMJ$Mbr1 z!)mp)HXe7%szeC=50v&Xfp5ysD+SvabU+H{n^0O!>^4gA_WyeC^}8tplSCmU#h~Mz zD3OA)0zeZP1S}pW)d8B-bFM4z$Tf|JEExT=z2V}YqRK<{P#2XQ?btSl_F?s2k|c0l zY91hDnf~KivBjw@EtdnS6fZH24EgVsFYq@nWyXHTp-T64E*EmCJZauViu`x#ylHBp zaD@`dZ2jz4(XrRYh2F2h^S5nQ8ZW7({56AXDftxQ^90QG`-B6ZZy*C#w~8W^n++Pm zvm0Oun#Z)lK}~|!_YB|oe;s=*|7~#@rOqgG| ztJSKkfNId|J}C@c-*SW(8j)cBw_{01LAW+%Bc?qOrQ@BJ*|c#S)-f)KMVx~H#^h=m z_!_Cg9XIAiW&P!XKQ%wExvm^Ap0jMA#mB}Fp%cD%X;wyAA+Q$U#_Nl$x2(rH5#W~vbGy7r*w^NJ;j?qXkHmwyMZ#zCbDmd_B29lBq4l0toSMVV z#~eO>UsX@92Cp5L)DO#R=EL$ap&i#7?UxO1-W@rYrvYWBpC&Wo+8*m4&&#s!DT?eL zC%-cks(gBu{lI&j>`$t>|2|a}zwDdO*2{ffIJwLjf)e7hM$Kvj-`{FVUzYk_C<0eI zn9jh|p(ix)KK_`ce+rJmTyy>GgK5FEI8y>%Hotec|4U~#cTlOq)_ma+v^%{vV2I7j zAUt~pqxwM&cN3jvrk6m-euNtN%nZoR>hr!!Nzl}nxgf0W+g}3$13M3yaNnh+K3nqemz$xkect7$SbUya&F5Jo}ubql@cKgx1V zV8oeLuYKIUQV;4B+4Zcr$1HlnUt9slwBmnHgG4;*FE}V-F^?h(U|no>7!e0}6nn5= zzID$YD@ixEAmJvdg4$~9i**OS%8IH!Lbz1dQu{l6rufx>tm=R3AB|UN(+Z;u@;k_R zp`-}~Rc8+=ZmB)UfpApf-ldz%q87F$X+g?S1x|aI^f75W9)Advd3oTomij^>?tKT^ z#7KuMl=xZ5n!d)yf!4yn6)#uDuIDPt5HbA<cTu^+`5wvWFi(6HPwckVu<|ua!7pHokKa=} zH&9a&Z4j}T>grwGx%#hHvh3g-&&a{a@^E@)?{Hk>S(r z=+2~U8!`WoicPH;X+rgtm|7w>uVhjP%i)_*TjS~ZAMK`JiurP(0y0ZFktI(ST&^W- zvhAoUf)~A>)zonrue#0#@_yOQqO4(Ta1iI{TxUkS;$iuYH<`rdEd6@A_)H*_o3uv% zOx7EN7^M}CCi=g0p`)=rwQs(}ctUkYl{VsD9jazEedvq$2dX({r4G*tAP{{0jEar= zwLQg`F77*P_ew8*A&5+i_mLFgSNVrC3g=b9h1StHW~U{#DaLZJ(dh}r=i7?+cYm^< zZZ1hWZkGoVAB;WVq*#%6t)FX3nS91wFOef?zq7@IWl%hWkOdPot5%Fu;^V?68u6GSz?I1no{>J49gdRNrtGoNCi-4kSdmX)A7yMib{NCjAsg zCdvtOvvDa5>S>u|>eceOn}4cE(o56s+WEjZKH`P`q?LtE5wBx64QIdlxk{jRsmEE{ zt?h_ikCVuFr(*8*RqQyv+*qO*B&3HJ#l}^N5S71Q-!*y%LpFC`E%{os6ap z1C@hig$G5Sq>NWB@`rBhA7l}O<8O5HI)M7wF4iOweeXXUhy5$8e-(7cf>Xp{YN*Yw zb}7UDis4JJ-o-%WK6ez2K;pTcKyQLMOJ;Z9c{&ar=zY1g#)+~EU*wgOUrC=TQOoT*7XNQVQ=R4lWk8?knEKhD z5-0A9pH}hzL;6r2efEvRK25))uoyZSvp72$`#Uz+{Ge~HWlkpbFUzK)&k+7$$koNm zh?FVQMiCuNL)qvh*ex2Qc6`cdjuDwHCZ1{%YT-fUn653*R#;Qge8aEcYI-TSg*WAE zdq)0J5U#%{S60@-EmvrsBlDRCp=Nxv=WD?YOvTw$RI~V(^D6bmZSsR=B+Z$R3-dIl zX8ip2P}(tS^an_l@?2%BBEm?Ps^nl3$yfNSRxW3M6ee4Tu&I%zf5vPeiV9{ zEBsf0$Qp}A;dtuVLT@v_l_NIAH*dDM-=!qiO({};8}>D zw)bE~M>{x?sfaUP;Z8K*i-6zr0tIIc>GxDiK|t@8HZ0H)JW{6)5xQHr)AT8XTQ}?Y z++vNJ)|q%(^*Ld$l9#C?qafiSU7hLG%eHOuj4@Y^%D5W@Mgeeq)gYRpPtCl&n`lBM zFkKkg_v19I6-rH8FN+=oUdpvLyr&0zj|s$FSfLtWTr%p?8TCPk-FG&-I|~ z_a?OF;CA%jYJ!0_r68l82ir!m>Ayk0jr$Yf4^h%cs+W+)s*HRh1ty!Rfd#EE?68?>kbv`LR~xCSqSq;LrL>uhcV4v~7L9*pHSU`P3l9sc zy(Agtx%0+7-ld;Nzi~;|G=&U?nI_oAc`M0`O8P*6I zlryz}1)*Gv!BNG{WmT?s0`KRmiWAWGA(cnMkLNSJ+SliZ91ctYV_;qEY>lf4QZsT^TiMS z?n$}vi%il!*(c0>hxxvGKfvt5Ttt`^ zNK=(G7v_`e2x9kDxs@)Jp+x!Zj{n1K)J(cXjW)98PyY{SwkG<)*2k2N1VKCtuK zC5$YzkTJ96ZDFxY%@IPvrel)(Crv+cn2Ha2?|CP!n8s~}d^wlOwJ*cUSC|Rh`fBjyw~i`0Ab69b0GsA8w=5orLLi z4eQ7#05P8;cXhdSLGxE(xcs|?3ZqQIF7RxpVC2lA>m9dIfdnu~FFEx|_?bp|cMr6ChLRL4{J)tnGsTLA0j zM#0-}32I3V?4`B^L4^#`>J0A?iK6kKGZ?qIS~U-^SHby@T`LF;0e36uZz@Q=k>7JK z2xk5uO%C|9LQ^h89o7nS-3EvnR&ARNNt7;v>Vt|rHgBiiJ}*n-J~0XAzQ3Bz#VSFE zZAOW1ck2~81q?bx>t=sSTh zuBh{;LgN3l050iujm!nlq#Ok!4HpMd_$YgfL!d8c2RE!h7GzE&GjyrfN&Kj0z+!-J zmQ%+Z*bx71rz^6jx}acgCQ$!G~{MtJi`P=_@e(%mHzhsH%X~gN7t@$}=+^ZUpi+R8$r0utA*B`B`dK#%@ zVT7tZd;G>>o}dn1?dJq3!LCmjDV|_%dQ+1r8cMM1Ex9}Nq3X<@p+a!36;8fyB1RxF z=AKs(z-`HI@^z7HgaO;-0LD`c^(L`IV{9#IK;r=2`! zQ$6Nu79y(~5txGa;&L}~m??E8?LAbF8R@IMAyopC3YLUn(3(6PWv=w?M5$L<+dAH< z@|{f~6K{8Fj-0|wT{TEjY%F`QtP#6D;n#Wq7Lt6qmFEa8!!VT&lCgA5}4O@5j4f7gGAn+hGQnmnTgm|JtZHmk7Q%B?Z+S1 z@TDHA$!g-q0?n@0u09i>tl0trTF;E@2*y5RlgziX>a*@g-fif!Z!FPO@*nZ;4+auv z#C;8t^nwrt8I3qK49&-QsFoB7!7kC5HI*1&?boqM(u=ncYDC)lo1k^d9tDS{PcLYP ztowqJcl_SPUyTHZ(U&;dWi)IORdUm3pTGR%00b_TrUMa9Nty(F<_ zzo4I2Cf+-p=Ty^K#Kl*(X}KS)y7(N%>+;Gjfq3dUHVGkgk?AX1$~ybUjfc^yPhWGk z%T4*$?N~y%T3C#}KoS>z?jO|ES`Et#4V)&5W7txbM^2R&)g9hZH9NpaTeu_b#f__{?H6xwla zv)EgtvRE>1<8tL(*V=w1+7jXO?33kcF|~t{J4}>h)0TGzGr#rYo2-Kp+lgTm9qiGq zPWu;1PZ1e0lo!k`YH|^tjnKL5dJFiZ3>|ITmE69W6h-Gdp~xc7kM!U&5GFHzAj5P% z>S{g3G~o(hre7I<)RHAsWP`%UgI?Tx#SL# z&Zf-dm}M&4So>XN+-gvy`GqLA(jE+{;5Wd!Ro=$PL_hzKTWd<0ul$a!XBb408MlJ% zIdF@-fCw*1Q4LHNb{aJ3Q&Tu92JG_0f&9wv|FYW2RAm<&vQ~wb0N>G`SH)fADMwc7 z_PWdAX<>?EfwX4zncZDf8tH9c@}g=#PdrZXb1wj1yOCa;B3W| z#ixc&IMKVJ=RK%YZ^n*o(r+pmKKw7elrE-Dqh#@lRu}=Q9B;+_d1F31EfvnjMe7Te zN2x}PR;!LjDY$|S5_}{O0y1gdxe4kee8Nc}2L`$l;4}>(+<~9guyEal>7a$5*w3e( zQfb5D(QVDVJ0c}-ZQ@7}B-67O2M;IX#cwGw8 z2xt#NuLsk;zngf!5Gxiyk*O1D?tQ4lBeRN~18TE6KF6!uw0y9~YoUjf**+$k3}HFw z0k*PlFgNTM`VRBpg0@a&NRmwGkNF=EPm!QqoY^oZ7aK_}uqF{zZj+SMuNS6f^D$Qe z_(-1r2R=c;z6(W`o`j}86GY8QHBWo#87akL($y#h5Y+eC3!A%$pt%ZAPRf|RwDIU; zvKAqIELh>k-4wX8=B8Xt)c^_%Wm@w|N-inG+{L7WP)5J0PC#FzY?_=KFagt8d#+zs znoPg9%Feo3%Im0RBf>*9y(I#itu%MKgHUt>4n3AjrQC+^U;3l{K%H*2YW zphbn5C%>!wxvoCpS`(}KbVjI8l`sL-C+vRm!SJ{MDDP4oo@7%vwTbJ{B$fh;o~J2# z!+7zSX*vX_i2|S|DW#Z`p-#vE*Zu|2NIwjrV!76&!k-25-wCZY;OaA{GXUNwz3MuEC* zR-&-?N$$>*>XWE3&=n{Kz1T|rI(sd#hGGu;GrKDHDJ;twg(-3EFm<6HtaF|R`&M{B z#Jcqmz21WX4Fe~y4P@cP>*^DSCsdzMdBWNPZq==$hVfLPK%s4i6$Ytf-C_R|x9t+e z&O20|61|o)s1gd4Cl8NDtvB}EMXuu(9zl~_)k66vu10Z)S|~c77IEcCEC~(}eNX#v z*PW;>*tuXfY@P20*<07ZnTTz0G2RcF(gWb?p)k0S8x3~}p5h3g9+qPN6N8*`1_}iM za6e}+wB-fEqoPn~rxE;c+I81)OxSnqIp&@)K#t3CvBm&1P#7Y|y>FO*LaPhmgM#Cy zIgIp(2J#`?fp?Av$7#y#TrxaiQ1i5b7iOX|^rVqzl~8f&tKsSqhRE@4wDEY6Cf|jJ z(|JSG4~4m?Oj4~-g~IBCK{{y!Qaw0XSHm+;v>5mt2G{xNI?Kc2U1yB2_+zn}h1Ro( z@2&H=%sO#^r2TfKyk-0mzhcWcT6YLjFYn}s!rg)}xO6Byp}jO(>nIJM0521@Ppbm8 zlW~FL05Jae15DuE>2bJz^QLy@V!iVx-~Zd+CSCkCoVxbu%je(yjm_ui6ZWsjQAjPh z4*4}7!rr2fVR!yh*m7hPd~$|i1FBC9pw?sxfJzq%6aiGPVc+QhCDo@cJp<*;Zm3Rl z7(B5vgN~sZ;g6k*Cn@k!pL zdOZQDPP*b$0kgJMfXjANn@+%d223BYvuIBxEZtWH%l%Kns(_QQF8DNfho6N_QPr?B z{=98}@N01f*RCAE83c3%G2XzOMz|*xe$+^{Cig zGnZ;wTgeHaEa0TRP2utz#;Oe)8zMct89aH>^c@~jpuD&OmF(>y!s8y)IG*IaPN+{FWZ$I<^(jT)Z^!db zDOg$Hy;@%wjAfZ|!n#AtE>6@J#L&c@SRO1OidMIfg|~>{NmriMaBvEi7Tzkuy7Q;d zIESa*i|11I38(JDRxg06kj-!*b|*BX`a?@rFkH#O>{Arn7x07@-h+}@1_KNdibCN2 zq1_Cgg5W`Z2t39T$P%7?>K421x@2g+waO>=z(|>JtXY(Y_n10)0G0SZ;8uCs|`A<`bcQ+zE8Ruy1&>!Ij&Lc6Z* z7+(ndxST`O{o)8{E8(is{i1NVkJn-fjFa+&q45VrVK447fNDM*Ry|l0sC`u(;E)y_ zqdBdQ*G^`Sw~dcK{s50zGp1@!zV#OqzWdX^(S|16F=%2(!jo>{35Y^~dOwK=%H>Wi9i)^^@6%=3rm&I_rcBu!6_`@3AZ0X`J1MG* zlLeTZ#uRf7D3E2g_?#8>N-9#W83QJOaWw&!HKaaZDyJON@NL=eXWap4g(mqi7a9Cc zH&)%q#&##ACEPmMDB)>lYM%+3Q!09H>J|Pq!Kw$?Ij_hM_d`E*&pK8su1wwt&d{2t(6R$4d_Fb8<*h)-6Z(ep; zERLZ%>HF(M9f4f_I|iIES0&%)!&N7=>!yluIQBSkn~s6g?n+q5plQk8N~$G5Xj&6= z8azTylTEiZ<{a!!xL^xNt+9n?)!X878f__gO)oPGFTcn+b`^5Vufox?%YU6yc)l{` z(B32wH{4QPS)_O^lp{(hn5x#NnRKB(WbT-a1=a7UDt-cXheiz~iP z_~M(?0e!x1ECb=WT{{POh+T`Dz9z9uUpoiMpRQY@q2oK6xjn z?mWf9U=LAOuz?l?b7KPz;bCr^zN7krx^#l2 zUhHYAGkTlw`G9zv0IN1#N5pCun{R9X2H=49-ACX0v)kpj z{}>LQfA->AU;Ww^bo^7BTjnT4N0F;{mC>OHuM1Y(iiYrhOo(P=S=ShH)XPN-1>B&3`#g!>DOwANG zdnW-?ssg3%VdDjyW@wtFC^56r%-}@8lxA%<9~(q>vNPdlQiL+b+Gi^GNLaGwl$@17 zxAU0nQvcXargXCv=bUD>F3pRWozkq()Th@)s8%WE(Ng$i-Bi)%L;>-{9#Wj9By{WG zB(qMF6mXK3-Rr`#LvV7Cc_+Ln)6&{I0-kPgT~2P> zv4Y?@SDP3#Eo0EM!v7?!X3(@g_zZZ437anV9PCNDXbVcOwM8Ac1c^tQZ0QA;Umh&E z^5SUuHON149r7w#|1PJv=2UEI&g|Tiom$F~OVvRct*|lr^4Dv^FWVLbUbZ>!Z-uw_ zv(GE)dlQ%5-Cs~G;zm6<7>I{if;_F&I5ZNc0dz#O4PhwH< z&V}xc*A4^ku>?(+dFn#zPPB@nRf%fbT?C~P-Y|~p6MsLq z?ofTA98^*G*KGx%aP?@|bI)BdZy!mD*6I$0J6t&$pj zj~#AZZ`7I_&P^Zu@|S-Tee!d7F!=qK_n-ciZDHmhtT;3XN6K0u`@-k2Gw&Jf$iwhB zpT6@rFhus@1EglAD0K!xG0_1^ykCNoz5*ug6&9aWk+M#qjR7S?k&+XB_9_!x zRrM&ttVmhGNP>{P{w0?*^XFOfODZHenWpEgQ;Nz;96S9@QsH}Ff)nMOI6SF}(-Z+u z(yp7Vgv2L_2|EO*H$+7NsZL=Q)k*GLGr<$Pf%~;`^$Arc-MW+TRLiY9sx7D%*4-&# z-&GPky)FQX)F)kmGD6>0h??TX&t(0S>ig@s+QgyhE#zEjhQzmQi^5#i7#H7kS5TKw;%g z$Uolt>m$Xrr{a?jxu0no&=OK&wA9obE&E8t+}NDff7zAT0vjSPzg!;LVw)4t0@L@k z!UPFWv}D;*XQ1xKlK^F{G(hEP?+s&-uoa*}gaU;C6)6tBrhYB(+Lj8KKF1r@&2nPE zu?)i2tP#}(9#ovktvghqHV`=R$vcFo_0%+;N}+KNS`y4_3%FfJmYsknxv~Y}33E>f zF=*Q*crFt=?v@fjMd`UG-Z&mX&qd}*C{Gc%u0<$L!9smP3Zp*~S?T=YF5Ky8`t z278vyg~C0aa5`c;)Fk>rQ)VEv914ePM|pVsPC+bLcn^wW7z9MagMuKqdvG`0I}*U2 zhd>(xsID@;=MEtW^F8fCh3cu`iWAyd2o#UYqsh|h71ae;FiE*5TpoOe0SSW1>3BM* z@?d}*_umcb0dlTDp{>?08o_BF9p;uuHAJ-1G?$hyP+dXE#?vBb>QqWLIYcG%1_t{}p!9$@sJ*Mmv zx9;xZgk1?`ooo+Fsj>i7sIRf>>1J;DSI3jWW}M27)-E57bi7^^rQIuv&|+g_$8Y@O zkN^H-&YU^g4!;2HqwoFAgg^b|KWHC+`Mt=dzCVY=lTTlM^9O%z%c%Q~%{grt_U1l- zvh$B2^!S%loVg9#$4Pw}X7DrwYjFBb0Mt@;V_uB*oyb}JH$DZa7Fm8+f4b+Kd7sW4>*I}S;+tQ8Jv%DNlf!t5U#xKHH(Iu@KnKs=d) zlWY;6nrN(Gk(S-$1lj3iR-N7w#h7T>Ig;umg5t6qQ|4+gD87%~#P_N2bcF}Tw~JP5 z9iHkH>rTMaW)+^Q4ExT9Pv5;|vhZZ^TL!_6wJUmmlO7Z=5xFL=GU3mIK=$Uwat=<^ zAYM*6C#)lIv4E3Qn=sqt8Fm&nMpkp1F7YDxr`FmcvM<>Zjx^fR@|$hhMJ+FKj$L_~ zTX78vPTYWkRDD^IJs)Z>_zbIc*7u-)-Md6$-++t?DEc?C8` zH-Ei0yag5nUADRUx5AXYt>EY<0qUxqERMDz%dIGem@SsiASr$#!9cH3%0u8M#vhR*_^$C?5tS#uq z5cw%yK8e9`tOe*0Fx7n~fvZpFc?N1wOvKR&6;zIBA6*&&5h_ubiK6@x)*RHQ>+hG@ zrv6%?HsOy!U_zDY0?#?oIiIA1Q}@|;I-NpwYG=@gA@O!R#}S@l2$ri9zI*cd&%3hfzYF#EzkD(L&0pKr9UiqUI4}YS%C19h?I*Ci z;5n6NQuk91SD)5q^X${gOjMr+U_Cvq?g!hY ze3R&NvQ!dGO)?axDSFnaQxAz7cHLumGrEJ@b&+Di&ZIis=fPyUIp5;&M9R}OZrkC_ zf49>0Btzrd>&>~REi(6X+5}KIefI{bPZbP$xP>>-Tb^Tz5@qdfD$z4i6O~&pBZp3a{}3o+$U^$)QT-pX8o9IdK;ug5!GbNh}Hu z(?jFDaXe@xx9=$XB&P20koqL-JA@|$t&;sdq(0Rq?S;$P!K6N2KN1JlJk--C)1+I3{zk)4NjRy0)?P<;W}T+vi6 zi2#M!rw(i)7n65bK8esoA@b@3y~3cAK@_e_>A`(?WUZxA3wR#|y>Sm6U+RlMgl`Wp z$UpX8O=L>&RNoDG*Nul=gK4H^guTwYsdGUECLKC)%(@7x94hu3nPV!%0M@q-}sUb4(YnN_G6iV9_vZkoZtfD0p7uGSyS z8lzAdYhnmqQq7Zm^0}&7sadKqR-2s=xQklwseqa(Jl+ zaN5klX~wqWG*#!m6Ke=$F#IH}6w`EGVGNw2u!i6~>^1UDwxpv7PM2RED!uYGs!f=0 z%0F=xa?6^&IGBGndC$K6Q;t>N(;^eowG$T}J7(sbaEOjh(cJfZrX49dt)(5R(LzF^ zwbZgc#{-r9T6$jd)zIv#uqn3X>owsmurR2_HanmdrtG`QRVb={uukMD>s|aT{ZAM` z->(#DN(D+*7)XFpk5r%5rNaF8U196I`4G5j6-2CE3(@P=LL7sqc-npEK@gSbwT@la zi(PlPG}wb|J6hF3^#z!L;ydn=Y4UCrEe0klkHHnKZ1EDI@eRhbUF?RXV(%S)pM)r^ zGLQ>{G5dtjM3n_%>JH!5Z9K8IC5Qo3AgNDt^>r;fMdSE3b`EY^1C^m$;e6a~xRkmd zE*}Vkt4AUkJVmjaJLaEa7(hisTQNI%fpF)bAKc9ig0}n+XlG#X2vsHqNz`Fff{ogI zT%QytF}B}P7Dd)whX5$*M8bu_m7+5V0qRs7^f6eW<+}`)Iz){D*?85w#-LktFCj$X z4!my4M5Pc!VW7N+rsYxyta=fg7&LWNCqYLwSC&v^>Jk%t+@ixu1T4Z#f^OVphexPg z7+j~U6MUrG4+OzIOcGzk>Gk z)9;s+-}*6>G=BWzK5Oe5urYDfa2;?KP*M{ ziQR}7DG((AYAykkxj<7_peQ`fA!?>2|Ag5me(mDml+b1MWwY`C03ZNKL_t*8cT$OB z=RJ{!nx?D?Q8Q7~Ez5_^H3xkrn6g_8nPz;Bv$~=r&D@7H%K}zT{~vqr0bSLZ-h00i zU;`4(U<|kbqDx2u6^Z~!sP}r#(NXWc_kx6wP(vLAk`NtiY(#OvV~=Ot%amk_6VGJg znLEkN+$7&hvTo+C-1+WzZ-D)L@AH>B{!LtXs`9Gckg}nQ9%a%{D1!M|FIu$ zlK-mVm&$w9&ctr3B-xHdv7ImXSjzfWDoV!psVZ-3O1ORegZ%SaBX-o;z*CkjJQ?%r zj1er(X-2M-69uQGGS|s`Q;cJgs*^B@$JrUhb=66>?54Qt#4?{IxM4g{!qcb$Pmi_k zy4kKf1Sm(vJZ`H%wdqRKVtezq$ZT4ow(9&^b$EJ`g40q4PVE$&I$%ve2dq2V0UJY( z!xr387um_6X)oJNcM|rC7=oa*0f@{V)DjAYHESvNHx)JDZo0{bHSN<-clVORKxX=wH``O`YdSY+Nj%0Ogoh-tLfS&L+)c7fEhGD@ib?v%k|(CKEZC)2@>!K%Nal{ljgbEc(LR7G7Bp37X5TK-S z9Df#3R}FZQGx2O%cuJv~7&^hcPfu_11Mjt{KDj~C-aQQd*ZwAFsdMHzbnsw5(e^g>4jqI6HgwOZ96oIb9mwdg5~Zz zsXocL0$gPaFAfdla$E~7sXPU3+X#M}pJ&krEzt*|%M=Jh+2Jr=z||)NsF|7+xKu~s zslm$N30rj+OTyrCMKpt_>-9;jUJ^UYxc7-GF4(%`5S7BcP{)KfsEzMXn?0Vwl$^WR zqU+>v!iwJGZ9Fj!1yvvP9xUMM(f; zGdI&;7eI*sb+tZO!>~+z?P^2PqbqfZterPjo}5enyvY4_lVeZ2V8Mg?GmQs0?EUo>ZaO=oUNmX|;fqqUZI+E4xgPz>2brl z?asgrs{bl??pT3!xpRMwYn2wJ^fRqhVjiAWb}LHb{Zl!%(6n-nJSV9*t&m=)bR!Vc zS*T79n!ijscV~jR&3*c~2Cc`~^HI>Jv{MKh6MZ zkyM}#%Hja^qzy#1C=g|MoLI3|T^m!JmQiq8Nx|u&m%a6ad1M96Zbcr1V2*` z_;X{p7L~(e2-3^PwcMIBkBS@5KB#P+(ok(;;M6|(HmA3^j@zWL_RK^=(KH-MJNLlb zd=9q7pVMB5orG0UQ?MvZ0jOZR9eJU)Y2*%QK1aBXQpUJMDk_w2BEQamwg|@f^E^5L zOTF{JWzF*ti0YHOyJ+8eQjlNVE;()Q7HzZdg8WiycSV#aaqee!0z?)c6-)jaOb zR&38@i(PmUo-%X=imOhkQgsr$?^yfJ+g0qi69JkcvVeJ?Jhwx#n01#Rd{3x6#kjiY z02RT;weVecXdFLE*UBI-=twvMz36?)kAaDjL<&zP#ruTHla;mSE|rDDh0;jod%9ki z061y{$F#6fEzODoBUGm=_2~Ptu*|1h%qL`qTd3X$9BC$lWU8|TMSSUJJR zq0CZL{m=!(0DO(4n+oEPq z@-WO<5l`@Pmr$D+I8lJYn1W*%PhjPvSkNf0rilx`(^cGUhpbc=udEERPr#}=M!;vCeREIoQa?xZuIX{8-B>EI-0*DVv{S5}BxF5n5l$yw~Mld97b z=9{nxQ>l}MFGfZaupM@Dd7Tv1iM8w|c*c_iCp9Qj#uZ3-V#<>eSs-$sWczLbtwnw! zK$C@NwzF0qGk@za)hbk`7Nz(-Ckjr^qE(0Bv^t;z)>3eKHuyNWP;lD86sIomN;t`k z;plG)Oznq|i~%h=X9$=vykZ<<2p*!psp{Aig{B#(M}Je>#2=S8oT|?$tb5_~jc<{P zre5;>e*{w9G~$?+T|=Tw77|m?N-9e_iRa?*iXu9yS8Ok zP5o0?_9X02Irqq2s8G+wOo9`tP+?fpwh$FMV;IO;>+U=_Ak0QzwFM{{Ykjq+QdUM`R=k1_ela2Mi$6fcX2Yh zz-b-{BERDAc{%~rlc?UtAecT1=_*bvX44dF!<>W+vDKotrVp_kd3#-WFSQzpBQE5Z~iM+j6ecV)2quh8=sJJSRp z;e8HB`2Lqr^*WKx?(sGqUtd9R>a;R=da0e8#Cb4g3S4X9s?!beJ>hz-iTj=K`$l!? zTBA}8d_>EOO=k2xq2l!DYJH-1xt79HMRLRab`$w;BMA=86r4Kqtz@*s!hYAyAM?k* z>+#0Be@x11+jR5zy>I@>?Si3i!KnYV2s3{-&9Rj5n>PZ<)PW^Eyg zwejxQC{emMDo4VUZBn*PPL#UpB~%-|^<^7{AeEhGzCxi|mphkV%3hf=?n@ulTx~_Q zWv32Hwg)A(702fU8sM~A`M#y;ewAIR&?LbLch{+7SfoiD!D%@Kr)5%gQgWRZr*PG2 zfj$8E*X^*ghbL8a67UpkzuOL#r@_aSr^AYIT)>k91t(R3QVVzEJs}1P^Idep6s~~N zQd-Ws$B6;~g{E~u#~C zrv1EZ)BTU?*728%tGi@p+Y~zqYoaG%N%$m#D568udA*J2 zAk?P?^k?D7)Tb*(+fFY#BYCVS{CNiUgOgVtYIwg2;fI@JJb#r0G2L*G0LiH(x!qXv_=OL8ds|oXg z_5^>XK8@zZz(jE(OjVdzbiquG1uoU%_!cwsJDo2MgA3)cTz#rf#I5&my#aUGiPjY} zkn`Pl2n#owMAlI&2Pp&%1P+9!8)&v}=i^RZJVpy4g+WugP<{|%_-?n`EH)sGDNqPd zc%QY`Seq?_xA+i(PNeIgg$8t{Vj(E8kCn>WfiKhdzI2?o-KK!NJw1{Dh=IhgT#%cAMjfYXvw)LHR zI#}J)13I6{u{WZt0A-lTlpF#b|>w=dks zoPvd{Rf@`!P@!~yxiueMy`%XfW-ySw7n9aFk?K*xg12g%cU{@BJ znabLDyLo7)FpXo&&Z_LfLx3{vukm8Mxd+u%V!Hot|IE z45>~IKd1^JDBWo1K*Y{FQg!IMMq%s*YYTEE3&HB8jx?4Oe)D)5s~73>FLrQXVlf2t zxf=*^^xpN>6b?^qR;D;zXI`fi9hzPeJM6A7SQ72ICKFtue;zEV0RJrLdYJ;`rMhGd zcibUVQJ{Q8A?ne^+9WtrVd{IoJ&FMMlJ>l0hxVKV(pQ*BMrzITzvSnSfBz%FluBAV z2g$d7_F%!!{{hI`AN|R(+H>E7(=UGe;jMT7LUS#-ueq1L2K8N+p|Br^27jFalz-)$ z%=@GVXBHXJ1-r!VI~|~e`m{x~?>31R-V4G5^(?E~tTtqc79K*BEQF^_TXIKwlkC`S+ad6TX?8KNi+E( z1)`o{`Au!$%-VEqyiG^zDG5%&9q>YECj%#J)w$w~Iu?M*+jU2*eGHru3;39o{Ms`Q z%bG=Y6IYx5p}KYKMrmzN^r3)#PMxQ2lA_9EkbJ5G-J?I8uNvkOYwXGvk*#E_|M299P+*Dr2AAeaBTNtD-*X z^X~Q7I#FQsC?+%UQ+c&{Mmlq(y%>`;geVO{ypB@S$ zc`#!Mpn4eYK5x|hEf@bUBjJn?DL3^-^QQ2-pb#LD$|R)+LXc|58HLu znvHBH22G+piS0Rrq$~AF?0e+r$*S*3qfkYQfz+dm^!y4vpQuV6el(p+|7*`CU4_XG zCkvBFe^CM%s?V7JML&Q1=FH=LBh%zYPZGJ;8@c52{XhF*e*cH??q@%HSU&z;ZGG+= zT5R{rB-FkBwQ%$!dJES z)+#V%Z)CSsyKDhZEmdX0?`MVDj#Jv0hPrgywne9alA0dAlKGnquanxYlPx>0JiW}a zotW|@;t81QlxU|qMGMs_>Vjbumm^u!mR+#D-$@$9hm4#jraTSU8OFO6(>U(D>*Vb_ zsX!ev;7J82w&HF&TBtTjXj&tT;p>CAIou^oC{7fd++(}h&N|;jwyRFV45y^R5jJL} zu>S1B$`;wCo5s+~&#Rh88ghyow%q;JuSor|aS{@Cm{5RnEUE2w$S!Fj5wY>4@z?;# ztnMZL{{H_y|D%+UK!C2r)u$Y48+u4t^|2RnYtR4p$h>Jdm^%5$(=@4Vi=Wh!@@JI-g{a5PO4AoqJ78xPpCq9K{kb_Y!;HaN2HE>vf;p42lz;qYz9>B ztW}rAcHqet9tWp%Upeb;7xO%^Vk#8(K$(SkoF$I$~BULbh*&Be?U<<#`sG*&Ka{sZXb}B4Df_9?prKci6r|c)Ch~Xr??0&g6%|RB0T{ zRK??#d$>mLU!*W_xt>GP<$8n)4pP{*yHsal_Yf?uHd@#-2u)Y%Ggq28m@rQf1s8;% ztF2ZBR5#dlDg~WX20wU>0CW`8 ze)=_BY2lE>s#U-es!C#4-8Ipo!@AbYzdv@~WM%+(iGAOq=s7~wCArp{@{RXDi|M@bIrLokRD1K2ztVgv-_~|eII8Nn0Hvosg0Q-8(E2(ARCDi>kJ7$V zgEM#L+rrZ}1)!Mvl!NNiT^*j#|MZ+tqSo6fQ0f5T)ryH+H;*gkWu`vixvD^+UnkRO z;jL7*->*{Id8?InmKuGa`=jjqQXF86Y^k-mwy_9n6~LNncHCN}&1dhUddAMcE<-GF z)mw1c%FI8pvk;$IsfJo+8)}lR`TLFmNy<6G)G|e7VkLIe83u8#HnClH5}pv8q**)# z;prwkA^c8{8O3A1LUoEzvYqVVX|9$XQ=Qb1OsPB}Kq<HQZGfmp7y#IF&S=dr;Lj1$DTa zu45XiThDw@R^OMFXi9c&@3}&Xt6IqQcmBqq?$|i)rX$H&CB$T^CjntWq`mvvZ{+WL zMa@~VKhT?$9lN!ly7LuM+IY4kBnL@f;G z@dZo6Ct-CAy^i7lWn&&^V_ob(3g_mbpXw-ApSG>t2tixWL*xO8%sejqPu_c&0)^m| z#%eDEDBOjYL4hfKzo#CY$pMNhO<4zd_7fV$v-WdvLSRC8%49*AyO@F8>g%cx491q7 z)n_O7J$Z3(N)hL(X`CC!QGMD9iRgV2t-BZsPcd$rnfD2EpTc)+f-nkDK@_0&Z+Z@5 z=ySE9zHltwA9~Y5U^q7#P8TP@WQ9qz@33`8VWBz}&g6x_x#Ac&Uy%Uks}f zz?4Ycme7=KYs6kVhZ^*B&fK|5PuswiZOZr4`tCm4>op?uQyq@{w35xVLII{#dRxwD z$*r)99av$fGObj6P59@Co+f=~olu)p#fjG|uuS-!m{}a*$wJ}jv6kIcqh*Idil{n8 z*|+TM;3-6a6N9HwyOy0$o$NhNHimIUePZBrLco(Sk_&)Z$f_NlINT0PXf0#l)WN`M z0|h7MZwl*#Z4sTYGx7wuMsslTN$f$7ljfh&r{TDjgn|(*y<+@PQNvjldRfnQ(@j09 zZXJKUxVj77s|y=WoF^%%iKMOPvSVp&w?k%rBZ*1QA%0dX`Ecq_$wp7l-{{|W|7d?Q zN!OC90f&aVPEt|bvM#S~=5M3(&%>d#$wzxkliIGtDQ#oiB&?$l3I@pxjxN-3NSdP8cz&VI!T<~5 zia}I^1umcwok0%=pBa2j0FMMF1f1(S5YhM1_cHhqu!QeN2*dMB;$tH?A&{YRq=QhC z04Js%aUjBH5u7d|@HEMfZ)P9oB5OP1xrwVx^%4y6`!jI}tTXZNsh&gA`PyU#j`B4D zRScdGGSAl}KfFMnnV~gak#y{>W9V-J(oh+B674${oT-?{cjP?|P@8h40)+r&wD1s~P<`S6bw`J%b@W_^r%YRL;_W-N#4mdV z1|%TpEh?e1FvTUy7C7v8pUJsy5};PAYE_OfXe%IPUys8N2PXUY0GkXd<@smq%->IC zE54>2<7;{qRi~@GWfv`#rx`otY0^%4`gQQ6?zHQ(iz={Hp6uaC_dp%) zgaxz~9zIUNsRI_%a-!h00>du@kHdyw!x)bKCbyU_)~4GNcanjV9|b374$mIc5(`H# ziU9MQ9vc3pssBa6X||~1crdoetC~mH-!}?S6r4IqT0uRrqz{vDwC(Xz@Oo$np?EwiMo{+S6FQ0wqLjj5c z6UG-{3oli`Q~LfrdT~J7BVr0XSWE#=7)RyForh-bH`J$eW*&Fd;|uu67GWCqb`^=^ zGV_TW#Z98*&bvfm9Otb&KI@L{yc6SEF!L#rQ7*r=vcnXE#{3tkGngEmKv?`Nes+zuDYk{d+3Ro19rfN(u zU5hY5VS@tIB)y&zfHh6e&*Ms;zeoXUrj9>{uyd&~1uoEg)2MRM>x=XnpTT?h+Lb0N zgPIHaJq!Ez)A+F)5QtJ3uyH`6UkiN=KNrH#jDR^-_<8H`9tWMv__6Tg)^ljOC_o8U zUR+I+*B1mNacDF#7&?!tTRn#?{Ce;;@r*`a*YJHaHKvDC)%fR?3`3>K4R5rW3H-2` zbmk{H^c5$Qk#aLBnja24fBdG8lJYik*eXW=03ZNKL_t(i*)~YN^V0_le*SkrzV_jd z+8Zao2bW*_{NczeKhmDdd0h*xnT4*g*TLLL0ji#x$NAV6-o8`SC)a{kZQyAxfO5%I zT6j4^ebW6;yrcq!AoYyW#?xDPVsy(YC4pS-zFT2eHXtPp(MpDqY;EZPr9zdW>gcdy zvujQ6;=7{*&KdzUazuUV7L~&=)vRiE7Ejvg10l>0lhu|dP zNh(i~bHS5c%TB_Rj3}@P$W-7-_dLx7P~sfZ$7wB~wUENo6Gx82k|Q19Olze8r*&*c zT_=_oYqP3RE=e*3h*v;i$Ldk8&F2u`@8?h*Q%P;shjpZxo(=Hc^sB`rSx zi-J>i%OLX@R<(>drshI)VkOicq--+JfCnLUP!zE&e2z4N%Upgww+X) z!Y?ZDG|fC~()+Y;!v=_Ob%Qu}4+(sZR({Q!(ht9KnTwf zVkYVJRGomMx)cgv9Lz2@q_Ah?doI=+=Lm18aN*~`&y9eD>e6}fI{(~e20Bt1W9Rk! zW8-?hj;m&Pp97#tFI3gkYkWV#;Ke!)SLX#Zv9Afgo*E8L7brlTuVJq}K!g3+%B24@ zP?nr~tAoPR>zU+OZlXh1ej*tzO(vby@$XS)?0WgJUyeB$k%2W1BAKqq>OG+4dk*i`MMk-OR7#1sFd(WsYFSohO0QY zg-7bH&31mN>gX-KEdGpr+fSyOt8KP5za|>NMqyIkw^|9Yl&`5qaA^*gEjecaf)bQg zDe$yHj8$<)bxDAegr*hJ94^2Kjo`}_#mPDC6SRIHNhFFV+wHPr@FY~H z=!>>3I|QeQDPyNysNGJxUv{i_NH$YEv)lPwv$YTl%!4=>u9s&LD!*BMMFriW<&BRogW4 zH`TSD{qxGE!M3#ADwh}E`UNSg>mxtsfP!wQ<^7l<-z8-Y1ou70~=y5!4A_jY)rZe z%P9~qV(mMz>rSdq2u(7zoCR>6)xA&KpV!@#LI0D7Xy2g+3Rh3C`tD%> zl}h1>t5BX|_uXD*7U#R}_K3VE9+ruw@l2&{$9LQ9Vmt8U>^qkG#FQtaWtSpS#?dT} zz9+L#q7wJ)(AB3Tkv5*71C$GgC#F7ahOk{O5V~_S1WVZ0z52C^eyxF`X}C|He`qxsp);OTS~U8~J-7NLj&&l!4smR?WL zI#*+1*Yf-vT@i@RvTIt^77ASa93f1ulLE#NiYBZ1^9Ws&H5|UqQ6R&@XU^7efSRu1 z>d&NjeM-R6*{Wm?aWw|map)576Dk;gjXyJ8!=FEI^Knh=zJxzi-lhd4PK#&R`)iUl z1gJ^&oEZV?!DMwZe(!(ZTVf8s+MG(hKb+-In-ND^v*Sr`Vf?&deE#_D9GD{$Z_X!g zfA$v(e*Ck)Bkz9n153|~U%;uWfAr|e{V%o6`EO_eRd?XT=&N8o@d<+`Y~RV?OrHJ3 zN4L0(;7kTj`G)%BLZN9>&ON3$*%xo!-DM^HPpCMpr|UXZdCI!2wD1)FQ^sv0iChF| zN^r7Qp_beGeV9@Dj;=^OHkQQh-YWZR#UCZrpr;g=lAfriY&=qTjNNfcD^3EF1UCI+ z$cOFzE80byxj z>F(~9Mp8n$ySusj-8=Ume|DIiIq%LnPvWNmK13oWOid+l3R$7ejVB5$V<0N)yKYFP z$d;a%8?bT*LwO>(c`+T-qBl5l)*=I#5y7gF8+mDc`4<48WL=-%4dw$1{Q#C>X#0bU z2baS^P$&Qf%RAcwOu$JJg8${_^9Tg8J3%a9J2db)bN9z$V(hfXI(k;$Q4*?DzC1=k zRfiG^|Dqsu<;8sn3&%F2-jwz=)(Ty7{ zjeJu-oNolAQ_Rd}*eueDR7?KeB|+deYKFX2y*69WPR(Q>q016`R84Xgw8JQ1KFAXH zSqpW^-q|8pBGU%a zuCdMQofq&k<9KSvD!Gfiy{~_oe>z+@N*BY?#0eFnAihd~X6T~{fO95vhLE&$i z^4o-t83R?rs|<4idU=gck?gAMHK!u8Z=rKH%^>zfQg3!Zie7n8p|1PzP_g-2uZcdxU`gcimPxG#tnh+LBhpV+Jo4f;4` z?c&2=XQx4o09X<#EZ~DAvytx^ItG}T1(*?#p~{>xfKFKG3u<4Wb?zie5en#c;AFDb z;UkO{8!Z!gt|~gGFuF7UQ$6JW-w|G2_h7b%FGW;;Ysi#Tr{uKpmpvv_lM*}W%4y^H zp1)YkE&A_=`qz~g@}Gv2eX}Ju?3igS70}^=h_bRYMcgF5=QEXsx*hY>SvO`=Vf(jk zsb9O8pXtg91KJXh66o0=#>CNZ{^r3MJ4bwV4L$Br17Q*NkHc-HS)Jy5tM#-^#4>^i z#vRULvz&k2>kMhQ#2&A@;L z&7dzZQaVYujSB|9g9F*cOxJhsd>H*->U0L!JgUb7v%L?y){`=0%bM#M3;xde z)11!D^o&>X2K&r?6GBwyUJ*{*@;AbRN_voBjlvp|crb@7KzNNax)Nj7eI-M_w%jd))u z|CTl!X)Ta0XtQK7nWEm!^>@CQDLYZvlI0>Z#hV)CI@Sdu(-)-QWF9UjRyB;H8+r`i#TVd~7cniCnM(-U(2ea?) z7h)iqgPu&cm7@ePP~AZfeni_k5Q`8mpnUFa1p+_02U<|Dfkn%diQ^p=qQ)p^;WsyR zenPb9XmRR&}=hftIJV~p?qQ*9_xqom%o>5(zM?y zw~>w%J0%bg*hHlL$D&vz1ZCt`p-AvDp1pD4URk!7EqciFxELy4>r#^^95lQzfHb@r zKMKW22q)PLqGHj=u8Q6rTJR_mqvgmyC8#~#st|SsR(&IqyM|jhi-fX?G5&1YG*X5# zp7_EG-}{MQ?;pyUb{`%E#8uH3IH4~~iU%~0%vP%T4GABSjUBY5~ zfvFHzQ^zo)N>G;%49NvJ{)zIXIw$k)NDqG3A)uBtYJ?`fYbhAcfNq$pbJ4y{5#K*A`m_MO z_P&GRd5NiUiKC*Hy}y3GaGoY3Fi-z=o#RhL_Jx%v^}~}hX)%vDSt*Yw#U}NuwrF3$ zw>yq#{#^#>x>M9l6_&=Vk~Xps_onye&x+OnsLckjHO zPTJW&?H$b+r@mRfBe0deIn>j;jG7R5;gV@=8=ooE!y5B}qFC?-^mKRkQDo&kFqmRC zETr_^+X)wo>^q|TTVjZ*msHJ~HIFz`TKD!68nIm6r(!`@j(oLBtofzXP|6^~InGbh z3kqbi2^2hBygS{)zz%1*A|&Oh*Kg(~q#@5&Pz~2A(p7KCJUB5e7ti&z5H{Ii-8SXc zrbk20;v`rNhUS!U61;VMvEV6{-r~g*r}^wsqm@Vc)j{J|5_@@zIb48vSOYk5j%PYY z8KRp5X=ZEyW?0`ogCh^}dZ8*AJ%k?d!|LDLcdaTKGQN={4^LAdFlrQr0@7i5Yg>T% zckD54-DDWxLspgG?w2dzU_)}0PTc9gE8gXQ#+v=MnZuHSVozeOa^t&11=W0s_$ z4syR7Hp<%${4iCV^Hf{rrONp1j!t(uX8l4sz0h5Ex$sgKwU+6N?lWE4tM_o}M|Ti^ zY$uEk(UIF97ySOB9}5f0UkRVV(@W_i4cYkuum zD6s{1RAizGC)4ZkrjTuO_16uqciAZgZkXyVT~&>0ECV|fu`pMx_&DY{5|}H*Yzc;; zHp|UCr||wJ)e1B<0L-mf0$6UOC+F7Gg_sQh&sSwpKp0thE{)!-es*;NGR)LecahvHLzLlX%Q0%ku3#L~nFjl&o zLu1Z8b1w?zHzpRFQj}LhV367svm6;O-L}~Sp3ZR@q=D2zy|tt%1fp z@z2aQz198}(#yV|8S4C13|3?j;lw-&n(1Dy;;JKu;T#5)$1Sh1jjne@h?1QY2`hB7 z3b~_o?;G14|C1{c(5zE)_$GKc64{^q`I9E)dvDP%Np6N;@{1E?rnYPwS+^3mFh0=v1F+0)x~=yfXFSLS7a`Rh{hC28p$batEWu zuL3+xgR2DJdT%A=oDi-o!g_Qh`O`V0!?KrnNCu;gho>z`wSV+8iVT$~n6EKt7Vyn% zq%GGTI50?p{IK4{?0E``nG*gCk}#W@n~Vf}{>cVeH_|YEPg6LW(;Fi~om8p$-TA>0 zH!F;gXJcF!`8zrg|5itHa8CV)W_S_6HYM>Bxyg9GrSx_ZY8}F%M(TBCOQgEOM~X-t zmz)Wy0ygEC52Qo|!04nDkmf?$Dtz0gq&S?bv^e}l{rvlU~1%X{^euIjdryRHIr zHOSiDuh@3jUp=ba8&9ZzB`n00TFNZ=J6F*I83jk@_y(o}9AwBAYi9cg5%7dW&RLnp zEOfM%$`O?{zG3NDJc+3Q4k5!ko*-~Ki*t9G^OePVOJdaKod z6(8(vK%=}&Oo_=RL|Jo5{#}qQ=y#qL^yP)`mG(uMrOb*kmpBaMx|nCGxGSi(EOMki z;c)IhK=>t~str?5XN8foWiN8axE-6_w9@Gn+Oio#3ipe{w;6}@=clBHr0%5MWg4?Z zf$#I%=#H&$#}WjC0}VoDbhG2f%we;gjbwiPseTB`7)vjce*(2_Syr+#(S;PrR68iq z*B}@sgEo0NpeSEW4#6H7RlXJ%HJX|6ArA}|%h{)_l0}enIJFi*NH$1s8QN+Wh>M{j z=VoI(iBjAloJ}{6nP&Q&#eB{3V@D3IuLWT3gh+{p7IxEJiKH5rjgGDtB0bA#QD*gz zsAI86;j(??n*o(TOucmP4)Nnjy7JKKhl<{BQ*~67N+21@+MGC784t%JsrKgU+mdnB zqR?rCgqdg4F&bH<_)V>OWgwWW46y8!FS8Mw=#b_dvh?c zHQTI&TSAc%yyI#fxndtP^KL_$Z|Dvw{W$b@b9jD!0(-R)_eBD zmA^bRCWYS346umQr@z!SwFol{upJb?)EY7~YT9n0zGCI&c+S74?@ap5U;(`ddW)Z_ z4xyuaG2I?TMs|sB8M|a)t^fY_*1z}sZqGZfzeU9SJN3y@e!L&iNRmD)XE@& z9r5b2LQ(_X8ieRgDPO&{Rg_Y9#(-Prre*(+mtyNn!aum=%`g&B8ES7bLYVc$r~oh# zT}37~ z$g>^s2GFBU_W%oVOixVl9{2(OcS23kZ#1hrQU8WK_MDsfljKaew9rt1%~AL~$l$lE zKAj#s^=o)CDrAlcTgKdlv$kpu7bZJNA6jXgNII9B|8+%3x`_2dZLFYL!4f+GuI5)& z7+z$&9-3S}Qv6@daAs_I>3sYI6;FltUBy3w|ElOlp6fNY5uIs_b$v&|LoKAmhAjLn zT94EqsZh$@Ee53Td43|p(#m@-DP(YMVO?!Gl=|}4ier$0UUNSt+Vd;#(vm`0sUk?b z&j+~kbS^B0urSm|yz1a_dsqo=G;D7^-*^^(ZEfLO4bonH{70Wz;$9bQUTMkP-`O9; zNB`+@%&-X3Vd4^{eNHZLEc}&aRdDs1487em4&9%0Lfgl`c`vF;Au)f0yEfk6WW*f4XeE3*J})sb;1pSogZv-Q_c= zlvf4Q5*BF;I%zHVfBWo^f8qDm4hgn3_kFcjjWYd*4pO@^v!2_?F@k~=v~~ueaJy%< zP9Kr^i(~u*1N%A|Ds#O#F}o(Su!jl4hx?gff*>ddxd)lR8mmJWQ5J~|x(CJ{BC1{# zlJ^=20}PfFt)go})e67rT9}}k$DMsc-s^4jc?;wab&OaUVsM<*YzW_5Kn({M-^NAC z^42sKV=ni>{)KrB%-i?76q%LyZig+ z@MrhzyqsVBbxQFU{f^=N4YX>@6Sc*4_fxB%hqJ!&e6Xemvp7$P$qFT#vYM|+2lH1l;wveiyxm z3tq>RAKLMjQU}=n=_od>>x&nTo4$+M4gc2+>KuoC8kC}8>(=bS_aCqFdDmU^d$b~a z?=ei_hilb5abw5v^lV5AsUhm~-R-d*m!#0z}!}+*h*VfPeaM$fR8%#S1+et4EhU3mWalK*T zkEM>EM4=NQSaj!o1U+P48F$<0kBAymeSCt9vmH!(2?yx?GXEt|F+j*dbFC4Er+$_I z--ercl{`|X8a{Io7Aavsh`?iJJNQDp6RYa%d%1002Vg^qs=Q{;-mEs2Y(b==Or4)#69g*62 zz=P}@xc^D4HRiai_ENCVaGMaG_I?vTS@TQLGcpAe20sl-Al+^U)066LxH(90^cf=n zV-IDZ%RtAajyMVVI>_09yDV#>j;W3qhJF}o(d)gAqW3x1tNTL%s>p^{z3&jm2MV5E z^jtKjZ(~(jUzCM+K4#oY>e|}JR6brt{Q@gNquJ4{EHm9khf5v5L%@t3esU52G$iyE zT3@H19#xhdQ}1j)Lk_$xi0iPI=<02u0~h3#QpO`uI8z4(lMPH?CW+u^R!HF`9fxxy z@ktvdh57N{M5_I@W=G$?5*k8mnXMeBb~b7EmJfAD4)GON)Adlf|wUHHOmT z5~)OXP6C^ri`Ha?BEckb%f=S_qFcp7m60IDd`?Qg@`0VOxdx_JCS0tm=MLQE8cUQT zlEFMxM@A`9X|%=NYk7xlO@0)1%eO))i(us)3sf+nZ_8dA3|k8QZ$|v6n&CtndU__xv5Qm8_*nqt|q+B3<$SQ$DTUos z!4#b_9kbu8xuxQRWhE>osmAwB-g3!bEc4U1uXvwF4jw2<*w{hJwtpf^Oq2c8oHxv? zW;-q>822&YL}{L5K-x}dxp0A)ssuJkNFOS>ac=|enfpIPJUbZf;Rzx-ARS-#oXDVt zSUbz19xXts*CR5v73gk?3;&cx7LcJiLI-K3##Gj^VKIgsQfwlFx#%fpD6JBI07Yi? z-N`^3Q6f4P{?{TsuKr|~@4Cx2x@q^BX33TvS=B@8djIU^&(CUmVvTSwNsD;uE8W;G zkRr{MnT(`ASOm*#K*C=Dg|*$ph=x6^!f`_=Ml_f)ll15K&hKin(dg-M$aX*br`0HS zlsd^@k567aIP34$+2aD2XxK3n0WBo+)sLXI`F0ttH&^wD`k3+2a~O`wM7u**@W((? z0U=ELtx$><)jLyc0u|6PnQT()n?8%$Z^BjTaW6$Oui_J`kpHgDmP0$5pFZLJiaJcqU1 z7fEyV7=Y!~d{LEZ5^zI}ScH+1Icl2CDkp)g<7^ATZSq$Vi7kd~)?S3de2m|NS}-sF zhzhA?B2Li`E&^Spu@ZZbRPsCh<%Vni2yd`%*ub~c2T#T)R$GvTU@n;Ccg8UtI=sIN z|6UnR>jDr{6lKET;Waqjbyjn<{QCyX=-{bC2KY}nU3j4-I%N8-$R~_#kai{$P$U!t zhoT`$o@5`^A_zkZ*Cesw(q355LwDRPwA;6ezll02{HmJ`KHR+zM(qfN#B`6{j4jj+ z16P68HkAz@v*D%<+%&eMzKy?MTFyL)aWU&ljU$>cw;Mx)sJYJ)UK_D5sXD+BU(66LrV z^k-q;TZ-aTvc+g6P#{j%`+Fq7yW1|OQ@Z(%A!4b`_Ys_(Z;y)~Km|Bi%lw9vq1 z(YwJ4f9)^?TXo5~L#3eqyg%j{xj}KX)73sbV#6gSHidxd*0GI0?u)u1a}nDj5u?ml z4GCuQyGth=_D%-QvI$*8T_+;?_#i6*cXxl-Nh zJzSyiTj8EtLiU1nY29Fno{ntK9l@Ny>x$%qkg13L1;d|Z?*KJkJY8ACQtY1&ITbw1 zbGyjywvA}_+5XU+zEg2v13PmxFx0-@fVXzzDu(Y>IpCwd?syp;3mPBPy-WG7nlG>0isLB(&UnHB0TELy-*rS%x^p8) zGt+6uZgr>#Dd|>5n-Df@=6G!tjUPWG+c5ZpUKo1E`^ix+$(Ti8#KkCW`_{$WN((iS z@yI8M72*+dOJp(MGlMVOl!jS@#e#1uN||@po}Y?gX+EsV>u&Qo!p#wLs&+f?sA4k} zymYz6vET~s*{q{e{-?=2-RpQ1xoz$-M{eTrvd2#Sqn1R zR;B>dLfiMxYh-hk$JuLjtNaL(q|$o&FN3{5BBycQ$7CIlG#oJb=@_hL5*|@k)ipmN zRj0*+oaf93+NNY{u61#o&X1|%MuRXmwm(q!hs*i;GF!o(;uAF82R~yohZ}l{=kE}e zMKzzDMaW}~%Xp-1oB@8&e`eBow1YblblMk@R(^@nOxfc6_V7}jKg+{~2b4l@oPJ6< z@On015>c^104YHJ89ng8uaLAc?>iYfq}fx#4g;&Bm8)nCK&2B7ae>Cz ze8Y6?>Dmg&rCe@Q*k1q>EiCgH6WRtxVxb=lR3{RNP?oJG|NHdh;gw~_)Iq`SGU@vx zgO4bU(5ol2uN+CUP{PXUOPiLj%pwOvG5!;Z#-$%W;(1-f*FolKrgLSOSG5w02L6JM{H*~bKnEwQ1S z<;xtH<`cw60~4+XFiy256@fb^OOI<{F4wHfXCnK~OAI3BgBez}0*)vp7j+s^8excv zOEO|3W5n#Oml}Om5l9LL-*7b4%;OcH*=qk9wlv_86@Lr!OXk>m1B&wZb6k_TFx!>G zKt9bX=}A@Z+2PmJIH(`L$}J3M1u3|C6B?^Zj6;2>xfZtRJ*&xh@;dFTw2)yem*h8Er^Tu%djm_h5 zp|m%5lM0rUSolel@$rJEo?@Wf=x!TO5cX>2`CObczo)Z13nRrR-++*TM}bKiEwoNaaz6IkJW}ICmDRe>=X<`E=C8$C|5`aPs_iPi;oIfb%c>RvNo}i5`_^{1ssfl_H=g*H4AQCuNpa%e-z_I#%M-JYEq- zA>lgChqxCNa#93Wok_$AT!O(8RSoAORm+&onIJ;{gznGQNT@)AZoq*Q%ODD7O73n= zyi}H`AYcJ{cVErmH+Hg5_?EJOr(xp*?9$o`yj~tGwcw~nnS@r}iyy)6qDNm34yl80 z=5dK zX#exJ^A!iv??JnhF4O09B+ZoAA1#;rb-y<|*)Pv_sJT#gVKwYwa-60vhI}BFMLO6w zagq}rNX6<5H|Y!n^VzmT*d&UbPi7ZUENX7PBu#ek>AAyQPtV|eHWAWI-6TwcX6FJt zU7A3U0ryx6VHZF9UlwU!y|iv$$VDonRA4-((A&=*kU%CvucPc?P#~RVF9N1j*_PIq$GzxaH}r6YAAlMUvk7GJBR2JQ9L` z?@L;%dHAsURUIPyByb7H=~SX;vYCO)+Crl*rx3q|lw-Smkyy9FD`x~`C56B1Q8z9$ zdROj>_vXxIi*=sF6+_HhLPj1n0He5bPA=Yycxj>UF!>QHP*g_x>`!h9<#e!JylV&mBo z3h?;rSwbCgBFo3ODy&kWHFp~a!xFQH4B=2GupTNNg!j_a=lYDFYNs?kg!7?#S#Q{@v zG%K1ArBMOHZYE9#5wK?Y2}Q~lfYQW*?RbsmG>Npu()FSLtrWqRUmI0HS%PBn*4Z?( z@f0s3MAk<$4|O5*ujQSAb#PwazeD3w3#J;yVXbmr>qPh!Q;NK{A{VQa;n352|0mia zh$(bV-XDXu+|O+N_}1?Rp0P5%_7X1cpE7$H(ePn6W|rrIYU{=i4(3>1e|9K(Ql4#* z_J|J-7R81AK53rVZ(ebTCrs6vurwc0_@@3`-+CpSz~i+5^=9A z@aeg=P%EyoT1u?&Rxgf$;54eLPcagBOv`khdlqBIwMRZE*@!l@Aav)~T8a%0WbWPd zP{)_T67bEi`VY&+;$eb@W4iHklQV|Dg_Ymnvwg5lB8CywBWq+e&%=R39W+x1iy;Ye z1*F09C$6NfXlx=#LyoJ1tN2a;O{$g`Mr-^zfUp`8m zJcF|(BiAR`c%{!!JXD;QeHmnGeE+^?r0*9$_6n1y`Jdkd%$6_IA^s58v|m1m8Eky zHUec=SplT8@UIKnZ>oO3Sot%MA!?T&L&@@6-EVF6U znM$_yj9G-dkTH;0_K+#UL|&zTdLxg-mj4TXVxhQK)e%A_y`o@W9*+(BD=B{|JUFZ2 zWh?4{P=@L#ipKhQD~<7m^YJFo{1ws7_WU}3&Lw~Mt6N8GPb#}B>R_g zz+bifG`BMZ&K5NtMRAv(ekadAC5<^Z&mm@nY$n(=eOPo;j4-oXWMMnqqX8z z^7Mc9BepJ+M5f|?ZOtd7%H-638@w+un~JBBi;Rric@6qQ?XNRXy80BjiPL!(?{hcF zELmvh2gik;u}(T}o&U6NDgWs__yBY~;rnjy3(?L@xh+0=_mu_?uxMoJJaVlL`Yq(7 z3}{}1qPaW-6jfn54h7#iaXH&QDC|tD$G*dW)dw<@s#htIl@h*bCX-t;Q^!yF>Z%iu zz}S5NYR?~-DPVRj+L&`D{gXUjtoC57>(=kw96Y`QQz^Jw4(usS6k}J~Y}6USPGm0R zHyF8k&mp2oF`f~!5n|ic2N&|j8lNggzpkZ<+@_C<`0;{%-OB)3{||cj2t5B08cK+`JJo9xB=s-# zuLDWp2a|W9l8P+pyrELm<*+RkU@8D91HIcpgcf;WQ+iFuhNtc~vZT5T5C237x;Vy6 zSx^=oKfO>k77UDlpxl?A)D9s?8 zwIe96gCq2+aA4FseJ57DEjO<%%>_p}KJ(Sy!3RO2<7Fr_qg3Qlj>q{n9A|<1MFOsA zlp8tr!b}_U`9(V5xU;+-`LVk)ojI0X!V{jESIub`TFDzw6V26B*mxokncY3UyHpLL z^cPs1<*ztx8>xX%eZ<=I>TxT8tC9XCeTFNo!I6!iai8IYR8T|fLefHTTmbzSSGB(^ z*Mk3Mrx*Ra6i;KY)uXP7RyG6bWmKz)*x#eyU2}pv%LfRm+;Rh$-hy*%ck}9wf&8HB zh{tpX_vI-72E-(JSxR&cgu)!RZ)Oj$ICHVW-UeCyD<;gZJMO@M^^AX4TX0`DU6Z%Q zE6>L>t>Se8%*w>5IFJSInuHnCmvdJ4R*CwNxb@=%TK8l%2s^4QT9XAy&l+E zHO*(l*syJJ=5Af+$1lpnMxIxH-^giDIl_$5;BO$hI^iz=vBYTcCKq>q9~1o%TPo;O z3`1q*=ic!rYq+O;$NNG`S}+_w<90ufj{EgInBJ-s@iz0iVraL0onT=5!~&^dP~nsvv%tzDaLLB7+XFE3!wi#RL)TE=i!#)>Fr4Gw_p zKRBAwl|snQMX1DbcBuszy5#B{p0jB2Rw@S+0&dBnYocB+cGCE5igWg}#*AIU^$};T zdiHY+J#!_S>wijQJaT#Q3@X2eYmaQMQI#*|I|61+)(Q1KMwzU8N%AkTd=D(WpLAek z#^BnP=?yJoNg4YQH1tCrn2d*LVU>}+CXhrXna!Cl^%)r}rPsI%@U|VW;02XtX$tL$ zK-P=Mo`}PJJFo$4tFOkG)H9K$Zs?nQESSg4B$9=8R)8GlsR2VT!a{K$Gik*9pAf0( zcPoVTTY(A{N;jgu&&S-ayp6A>9?$LE)Sv2nvusD&^Ic&tOlG$}!+P#1Lhw|^B8mM2 zXo~l4fh@87sd~)&78HX2OoG_TvS~x@cse+{;=4_Iw`~745uE}Xo zeEw#QP-gQF60&TnB{;(f%)0pL43oDx8ylj-<+mf0oM_jI|)S zM%5oDVbl+Std=?JBX2VBRcR21LCB_KaP6e<(GJ`x{tU)XH<9_IyjTo@8fJ_AL4@Q` z^bB;rH=%&R(>^E!-_GvzAcRX6y+KLxef>pr00Ca2UybG)xkVa zMp4h6KgTxxFf}url#7v55U0cQ+~qzJFbpU(Eui9vN&gE6Hy$oUg^;jcmaBS75!xE4 zLx8K&Kbux@;%}(~7!0Z9FU~jE071~X*YOqaa7|a+(-#6y+hU zuT#MnEp87R!%#iDMf6pu7l$E-juwnUccJOX+w0v?nDZvwH2z82FxXStFq|~_A^3L7 z_~$oa!gXUJn_E3J;UL>=4y<+7F_bjuQkGyJL4`d|(Bfg+nuyfcwhX7ff=d`XXv{%y z2%T$Ep&&mL)8kmgKsa+RL?zTAF)P#=9gL>!;?h4=BNTO;uILo#?6E4?lDS7G>*qss zDylfXE^5(tPO8P_^TR!8ItSb**gXW~>`9gVp$EiMTvx&z$Yo78{xp&wbi<2l*)!ov(UTroz1Ip=*-a{njYc) zA^1zjmPr~py4z`3(aCYA4f(@StxT>f-Ep!wU#s(}x6{=Y;qt=8B5tO8MeV`a7pnln zQZs68)Ks|Whie^qG)e?bYaR9aaK-TwXumo%wApL+3N_Te9$ND~nCrVWYqR9R8TSFN z!@~_2lD@?yTfQ%I)Gjov*>dz0>f|K{QGce{6`dhfTK^)EpX~P*hNZ+y!-ILFQ{K5E(TiS5|GkJBvo4d>FQaw2ruOfrD;i^d^-(+T&d7DC+hc(3eEOG7 zZJvef0EGzVC;CHQ7e$w9poxWQ*s2#~ZrI*b?;viG4e*>2jCZ!e)_@ z?j<2|FI|i7O*F{(yiGXqQG>MjqwQHsuK;qPEss+BJ6Y>Sh0XK^kbR3?u%Ll%ys3j* zxVsG1n?iHPW;Kbeq+o+?)|)$1+ZK_po z-o1tkxEf)kQft_MYitWFN+z_W+O5GfsAKmyYjTB|DSWQuk2e|n%JVDrt*@MS*HN6h zq^PfeW#Kr&@!w)JRcN=>1;YebDj@CmqQ}8`?k7i&DJ7Eb$RKFaG0t2m1ds*Pc-QMJ z{ZH&#_&n8Bx@k3n6@u|Sr;9(PHzBS5bgL<-+h>R)e|Dqb z-t>dVg|iQ(qOhgsvlW-ayTb&SL=9w)w%FNxGcf}t$6!U)G2n*Sit~HI zSoQr5OnrIBJ}15(LoP0Gnjcz?TQL89m(=Gyg0p$nr>LG8tB}&^2fTH*6_kj9RI^sn9MDK*ZL`X_;!6f4kcE3K@*{jta+ z>k|Us&)WRY0C-x}wbl2@8qVnckp>s5)%_XfY>A=nBPZ-!tmo2JSk+LFg>7T6 zA{ykGvY}UE;Fw3Fol@4SQE@W^FMX-TD9NJ1j67v}oivV{GnzXj-_cV|;%-MEwrlIt z)vh4JH+p+TIs1<@o^tV4THoRmv>^JvJ%d;KH_M%8uZ6xUEkF}ueVc-J%hGit7(s>m zZr$u|o|KTqEfA50ZXO@ot_|`fDd_A%{sRYvI6?Z?KZu2?wOv*ZE)FmuQrd6vXA;rV z>?(jPegfHu4O@{9p@rwYq`=8IHf6E`;Q3AZk+aE~3}VDX##Rz#DedSf+^vcTRtRvS z;7jQv8a(^0wAp+AL%5}XxyKj{BF!ptjk@a?OuKByYvWQKB$D|_rDha+xK~p}aUEUK z*svs~dpZ!yexaB3>i@L>z?Ahj#Er<^g`a58+|q=XBnF!!cwG4?*?TEh`db1Y?eo3Q z@G8GRoO^Rrw!^l^`b%}R9bPfWtF^qUT3Xc7KNoNAp20?}sB)I7me%o4rdv`XO-qD> zE2CIX91vr<^E`N}a?V^~geaWI6$};}A452`RZYYvHN|-mq;GGTGAn8eUbulKCzt^%N2Cx%bP70aC(%ZvWwve{PJeTdL! z+i-bb<>jiWV0Zr;J#UN!@CtN?ks?_ZWv)9dUBE$E{GFl+HeWy*rR=*ckynu2YBW*p z>0M7Z+{{QKLd(-$5zai>a;a%1=4!P%RE;t|5{CkN``t?~8#wgVN!Qg&3Q?I?g0&lj zt_H~RiZW8d{E{)L)Vd-|ldq9;a7Dv7-oN?Ct2A@?*-xQwcxq5i)5455x$^o(<7AH1 z7pFj|`cx^fIL13e=GtwyqtL)^>GCQ?D)4|4)ohB?osMQ&sR+U(Yuoy&3}jNzLI(a5 z@3~~?g&Mf3NkOrc1p9LX3aNC6X8)a$1Wl`B!D`kRA2~?Yexd~9!osX;@~X!c^M~vf zja#_LcOG|KghIDmk$(e_-gRSrUs^b!N~uYC!Fmj-un-@iRsE&>;e>q#qZV7Ua{^lLI^nWmz^WLDcmN*Zo9qKxyn?m&GHwsXa|ELZ=oZ=c~)}V%JJ+$ z{&UqY6O;;P;((E|e`~y^Wbo`hF9Lr17>l#t(OXNed9W@~6%Ajt*j+Y2c#$zyP8}~$ znPO}_nz~=l$q5c!NhGSuAciubNRY1WzjMG%g(zG{koBip`RpMSi2afBP>ZD+TpzL$ z=$V#!3(@c_Nlau83GuaBnMjHWJ#(?F=T2Y1ML69;?uy1@_F$huw=-|*5-wd{0~eq! z=|#btb8dob!ApZJvD2I!n2M>T{7sswKw2l|H2~So{<}V7Q057dL-j`E7H(z9aQLZ=8rIUD5beCa|AR+pCkl-cQ|Hzyt>M$E5kaCD+ zPz1x^YYyG;y_$1z^`cHNpKE#(`pta4l23;9`*$SF5JpAPG!d*9<{eM9JD3h;tP~WX zXoX8ZkayZ?duaalFCpwkM2JQ`^Rg~C%1VE-0;F$WGSJm%3!M4_+Ko$^TLuu7978od~fOS;zJ7(S5t9BM5brqk>7+FL zF-0UL-kLsESXRq068gEz>_n(41s|nXZZY8Njg-T$PK2eM(YJG{e7IQ!0d5xzc66CQ zEs4KyGh#7rj>aZD!+}hW_8aiTG@6=;=39!Np;o4ubd%SUiZ4gtk-HNaGdtL)KO@)A zAMNvD3{pZb3ssU8^P1I=3I?RIJIA=P_o(}gjxhI(7oCk0>|L_~W|mCdanWwEDh|Xz z$rYZOLDNeNF2f9PCT}w`+@fQ_On;*}k}Toc^zN_Byp(huCI4@rk)V`x*_*oGrACHr z^f572;;Mi8XOZQAKZ}BbL1e&$ys#UMcNEGqHRoFj%)qpqKvOjHLdRDCk*NE(MD}!$ zdzdp2HlDSOMBMknh}<|*wzNLX_L0NAiS4FxAy?el5w= z+S5u1UoQNc81v13dJ5EjFVB7Vuevsj|3f-$=%@NTGj}M+)9M$sZ`MuZ1%X|2}kJ`=}7nWOli9lz*iNwI~_D$PV#E5g9_rANM&xQh6YC7cy{4F|$VjUTbxI z$AYxGDjh#Q zhi^RZdz)V4S3Na(q!1gcB!$g}c;my#+VcjYArFZQd)_;+DYFMFwF-pN(rCoRN;#3 zjHAry@^xD+0170mRw)KVRM?PNW<1K!DPS7>n2`;q{q!=*Yq*~l-P6$ZU30SXh)BWz z193r)zUuMA3~AyxsuZ*A)Z>KmL>C7ZBLyc1MeB}+W!jJAVVPWgGR(M}`^ErRG-LoI zEF2G8oM%CnZXWCkwuXvuN2rc*hUO#>Xi3#U3&K-dhBq8q^go{BtJ*5RYf~M1-*{vs-qpD z3im6qYNL5o<9P~sbe{rWJyuh!BkYTFfL029IJP0^?We$p#}xPuCu`s^LSK8b7LFn0 z9c81lbRyMBI+^MWr&FE(bvDff&w1?lVVfuUJy&N^8QpCp@815+R#dc$I5^HG@o~|l zz5N_Hbnvvvp|Q9lX+7qO_ zqMhumI83VRPLhhcv!t-}04YCsoj}WH!CuKWN>6hv)w*_S|(-}NZmZE(}4dcCp3e`1byqB9$pyc+Q@I9GR<%xQp z^a}!0a8kgNQCz_u;eG0|uAQ9s)HSYv`krhHjFqQHs7_pMqN5B>w6dU&@Hdfo`0 zvJsxLrExCVFx4Yln&p-IKpj#5eo=W3e8Sde+dFx`5Sm;>#teLpEQ`xBwQ~+6Q{Nau ze6rezmu5K`(G5=j*S7%!W)qiyc;c|4-qbmwiMTA!-#XK42Mkr^Jm_b;O?qbW7RhpM zCOkGV1g1=O03UlbcrIQ7o(txKyVWdko<0qnrc4CQptCQ$W>D^R?K zBm4|wFvZj;JwOfBx9}VVAgP5>obEf0={1;x@HB65e~6en8a6r2gdER#urm;WC=5XZ;i)mf4favP_)4lc`7rfqe}*3% zTk8*JH{x+T0#oo@C|hogud#*7ND3_UwX{@F5l!2FDg-eKW7LFB%TbIfgdBcfHN7WR zji7_a(JFRtC4D_sIlfU< zlp%m2(3J>KD`9Zw0K3EN7{KigwTI#rwon|(kLkE`g&n)Ecm>_Jg|py7v*s`Av(&|bWct~gKt*?eX7{Gp&YU?*n%e3}(av4u+?k8y z?CFapci;Kij2X6%o+U?*zD2HG{(^k{Q73CfByK9~vtv)w%T?9KMpRWFompFVd|_41 z(FF)j^GZrut#+5R%r2`q{AOv@$=9+=_CMM14>0|3%UW`=^$a<2;5<2T_!Rl%<|TZu zR5D`4S0+=V-!WYncg@s3{*0M@>=84kxPxZeuyRw6h}|a6!CBitiT zntAt%V!0N%p6?1zp7r_}cXGo?nk|k89 zECx=!89Ze%czTAxQ??$S1|mES)nrSfowH%GdyX{2Gq*#vEFXL#vTnQiCC=MWev`O( z1dtWUyG*riD|mALo;$?O*`HWhb+_vNUv3L$sfkx)q3N>tA`%#}-P$H-CydnONdxV- zNiQwgEcKbU1|FNV9Hvj#fWO)aylrj3YtaG(DDH!Do;F#u@y3E?5-o!QB?A;ypHv7< zj^lmm=SDdu$o+0cyUmRHWJt0Jm=I~_C)F%#3OnIWF zaRE^ChYWz(gI=B;kz@CsLP!Vp2@Z`W@C{7JE@mee=sEXC#v4$PjvU6G}$8!}}wF!7Vj*eQk zFIP3*L#u{fkLUMP;c+F7)p$(buPRO}Mue_d`kq=g()08)*=yM6sBxsD7fv3aAW|s7yoT#c#cCEuRY-oa!Cka61}H1+~EOL*mi|F z-cI&bzmVzgKnj+tOv@uw1TIE)|3dxQx15|D^6mZas6(67R#zi5T`>9E&;Mf3boTs3 z^5Og6vj;#;5((!hfQjt=sJ(hYUsn!T+ zEOiQyQj|H~*HZyhmPReTI-{1Kg;5-WvCqn)t8YpMCRuf&-$&tnqRNxpzOxj{lO@8F z1&u0jH9(Z9lbkeO!PO@jo*b161DAFID5Ys!hNqndc%rR4W&2JEP+b%!8J>DDqj(md zWk(|lY_>DA_%nLtDH~ozczWG23*JC@8s(e=liYHoX}a7_>%cs4U%sWn+D`p+NbDAp zQGDIhBQVK?{(h~%A8s%2NHVrNIs89jQ&j`e2BeZp4uq^G#KbA2;N)~&KD^z`!lUkfpiI$!Ny{1r|WYf64Y#JBp6I4vr)t+N~b;8=EbBxk6_{klXas2BTe6#EpCYUr3qk6n!S*?lhj^*B~1IJ08+ zB)BlRqUY;H)zE8LRrEf5eU;d+q@O|IERm12suQ#f#we6kB4|}o@QT-R;9?_%HVy2> zf79L=4tx~O==E|uM*)rgd&{F$5{?puu+k`X2L-F0;i@mw{nbO)1UityP?cG2jG7!z zb|Gs5x>e*q?UtR*;{Y<(uOiiz)#Uwm-Z#Z#(}PFa$=`nc7rS=q%$Y$~F5dCGapj}h ztLNYU^xUzVzaMYC0Q;+tK>hAUD9b5@U7HG_U~M*RPu&0;<5$DF*bG<`kpwG4VpwHH zCd1~`^-#EN4;1fgg@PT2p|Io>6joe?+=?6jT(k4a7b`ZLI^i7KSfq+**ya}3vd$;D zHO)7 zQP8HHV&13u!aP1jZr?36EF4U|PYj>}c52f0#%0q z#p`LK%qO{R$72g*<>_&eiS(F4Vd||=au|Sg0VhkH>@DJ>Vc!5yJr&31j|8b&JtUbM zfmIjPNoNd5`WbyX1z0@P=sDn0_q+bW(qw^zyQQ2mrM~))%=W9rC z<_hchlcS{hQ=#0DBgZhJZ%ph3hFa_bs z3JUxdL&v8m) zR$oH#lFDN>w4f|n-BF4VwL4t(%hu&C(+k3!$SRsGw}M1pvK=9ENlG6F0AF6b4*L^kxO6Pk1x6bDMc5hy=}aG=a$w4D|1i5;#j$T zcTnHHlg;B}S@L+ZKDt1jdH1>^IFrT}7%kg^-{&QvJn^;e6oHut6n!57PBJt-q4zq~ z8az)Pwfbc4$BbsM)f)Mf^x&cZCJX&NwR%;_LT7*?^M@2F!!^0hXRc7CWKimQPfx|? z_EZ3wk?%?mbG1gZ?s~b4eG!<+;i-nHQ8G9&<;kU*!IQZ#j_Vf(RzJe`q*tH>JUMm+ zC|P~l@v!=2tC)3XlM5!+v~s`{p^1W%IaQsk=`1@APmc+BdcrzOZy0~kK3k|y+3-5T z(-3WrG}rs#4X%<;(s$H2{}H4}-sn|3jA56Uo2+|))&_Ww*4IR+CeE3585IR9ar zl~p>iU0O;!0@6u=|3H$gd98<2NdASHx;z-^xV59-;R<3KfWEEe}bIZha!SX9A&>U~0ZIoRZ2~??6oc6*~J4lDD_P(ha9!Vbo#PzGK-> z2v3tkS`7ddWB{lk0mA#_s{|-xczQ{|(@Wlp#ex-S<5YQ~Gwz=CGI*Y3zmp77kBLA@ z3RJy349VQR6rQJE0#=l8VyQ2M`P+jlOtRXfSDri+#&HkBwVquds_QxZOg%-^fxhJ@ z&YOGI{#zru{GECVfU;C%KFP*$rb4l-C+>f;bmi4kq>WSci8zV40?q%#_k_^oC|Y+8 z#m1RWGCbLKZQbSTy-yUNOc9`Z*yONi0%{aDXP&2Q22T{6p0wG{;OSZ0Y{MR zyspZT25WMp5ze_V(JiNQhF2cg1#bJ^Rkv)oXFv>b4qRpC9hpb`qIZyKcHPsP|C2Z0 zz%(-5E|~a66`6)4>?8q^+jS1Xg)q^1TgMQ)4bs!oqNS+|1Er{dKv?GD1b%ilpqoDj z+^lAT^UP@sptu4>0cwmMpcp(+)rmpWa6LTH(H^16o`RBqC=;NP zFpU=DC<;)67(Cey=ZgbV^@+~3qo(n>Z}f-Axno#d!FI3tuyd&$Ti>oC8o?*goh{MQ zlI9Kj89@26IV-m7 zmE;Q53})QeNFk^(jqf*5D8l}kM4^{Qz zJ?VSVu{MpLuT7!ffqyruMpX-iiWY^W%0zx#iO^I|j}v$+u}TIigs18RCyDNt$7(1% zNoA2L$P3j3SI0Y(L+Q?@*7F_6jJd94ZE*L>0Dr3Og)uLX&p-N{^n39+cKqI*_gJg$ z!w)`W;PlR|JBz>h;@f>cef9G{e*EHR_~!0+@X3vjIzG96x8t4DS357Z9g|Mh?UN3a zR!9x`JD?^zPujh9J!Hkj!=|uM$W2Xyy*sO*YTsLsRrdj`*nS;sVvoXPI@=8&z=PbX z;8lE3zJw3T=kX!gSG^aWb}WM@9m=G~>`S4KeW}#ju2kw}yGNq?PvCi0cjQPlq;jp7vN+es;9eg_7e@wv|xsD z4p6fCMB$0fxU+EPfte=ghdo5w}_&V-g;ec}Ms zlNN%LrC64wk2P=GJ&oW*eNTOHe9<9?!P5YQr$L%rX_!;4G|n|wn&OeyX%mtrTThJ|-3+{7fF&~t6s+fs~0L9vP6Gw9eYWzqBPY&ZK zNO6E-pu}K_mmZ+x_8n81xY}e(fk~)P9H6-RWJ}ej5d)d>MB@sUu$1uu%rrh{aDP}j zb0lPHX23R&c~BT=1AD?KJUKCVs%Pqx7gL^E(|ut-!c+TNKRC4pAt!V`><(H8yI0sE zaB+B|W^W2iRCS{5Fxr-@5dcELsZOX#)k%D8O?QWubT?>O>BiKiMo}&4?s~9kq>2>6 zQsYX4(o`>0CkjXuf+#>Wq*Gw>z+-;C9;*T0yD^>L)3A~%QusOP9I~nqm?~&155E`v zoGJ=Vq6JvPV9%KWRi%JI3V@ZuM^$6+R7vFwplDl9E0sm5JNHDYA!oTd?NEY-yuCqd z67H%Z5n4yG%BTBx`%krP-0g#{n@*_EW`iuz$r(1V!F>tze<=WIQKl!g!c=-ST zAOJ~3K~$>c*KdE7e*5ZI`03*x;Jf#~?D*>TN1dNuyDfci{+e{L^^kO;rV)-;*Gnx$ zyP$e|4(wXB3UXp&pej2D+K-%rhT|VYX8HTzmVO3i(3x&N^)M74wy)!Z^JRQM_End| z69`Ow97>@V0+XfP9x%5l0W<3oe30#7BUy|O!-e<|oQDs=xmfdxzzoY`!A_|+p0}7+ zB)#NNDm9+^TuR(|LyF8k2Q`Q9Nw4_q1INS$$jCbZixJwW`eems-x<^=ZXRz&fD+kH z{(RlLfxe2FcRmdd&AOA7rx(2%^y(99+j+^YJD&UWqynDg_TA$Gr26PXGi&uq6APU5 zsMW)iK08SPQ5HrmGXp>|Xi?m2E)*yZRJ9KQl)18P=V1&&<_aH`xnicD?1@ssl`)|4 z&$1LCWubs6x?GE;NF1jCWg)llsOL!ll!XhQd1odf3-sP6O_#OqnCIzH-Y3P3JJ~p{ zRG{o+?^A(3zCZ>jQ!ENkW&)sSIHsjdwwQ63jQ~aAi3Vk6!}Inz@G=5ae^o9F(&WGp zZLT!NB^M@pQ9n-^Rb;)7eRpQtpJkgmbt<`Y>m8zUsx2uD zoGx5EKkVzzzuEoEH$VUW+n2wD5HUy-gKY?n^f z)I~89a^;LQ8}ubK5=m@G23t8^{u@`S`%I!Ux=}e6XBX2+!FR!(dGrjB&4oNnX`3 z-LDp=_|(9gUR5x{xfDXyorEKozXfgjNhoT%1sNqb;2HONh}ql_uy{hO0Vh{4 z;eG0*Nb7zm?@1_5atp8LBfL*?tIoWOIlQL=YGioop#Ug4_UO{Wv*=(o!o`zi2;^IPEle zpOg^QWdHF&r5@Avir{mjlmGcyh=^c*=!-j=AufIv3v1=1HSm z@?esCZpVE8d~jL5{XEg=U$l)Ly@14JHj%Yi*GO>8 zZqtZ_A`%q2VTp4{-oGZQ*TaBWVV%pD$3SeLpA?{Wl)SAMg2%ks2v9Sak(>k6I0PpS zQ7Sz=apSl>LXTg;yd?1S|SVWa4 zu}lk1B2Te>6V|)ThHYL8VOIzZoTStK5p)s}I+AqIoaTk_laXy}seUz$I|R$pIFKL6xCx%18)a-{tTRh`W4ee@AoQa!ROMCcRrH7x$%zl>7{GZ2dBiEX)gQgYo{2FwCotDNZlq!|-W*2=;a;g`ReM zn8L(h3Cl!=rkVIao1G6&FWL#ioXWr|pdJ>4w7|5WMwsBwA?#%YuxDwj&!G&S#rJx~ zrUbUvyaQ#2J^@wAQD{5;5!j}lgn|Bbu)g3hTl;Q7)M1z_%;QrP3kQ!8-lt&!iiLy4 zns)<)3iYbb!^ZKKl)fj?x-$YNR<*+WR4de{T1DoQXlXqZl3A-zo_OoaLIF`+WikdR zy?4o@RsfQ5yUtvpNcHGqGVj{nQ$m#aLyDDgYtTaBk+M)+H&Vm&@We+;z52v6pDYD9 z^_0~ov0$*QKoMndrlS&|lr6lHhXG2jLMcq-wn~61G*Y0(w8GrzisDp+Sgr!t3gdT6$kMMLf(+k>SZJ;!8F6<7mhKdL~9*7yIW=3inFVMhd z$jP(kxDlMshI3=ePMz>N(W1%^RheiDuXU9>>|4cEAqGbbkX#u=aaGAps7VM`2uT#0 zYN*mgN7}x__o>U^&{UtnA*x{&2dG;5o>Bbrh(osY14rj})HjQVl*S z3QN=jRn0t5P6DP_QFvnNQ(27qL0Oavio#Tf2ERGeA~evMY+0c-&53X!+d`a3oWDc& zFUuc&OHYp__rLgttjP^e8t>XtCDn=8JL@;i4`q-2niVT!6zJrJOJi0A@K7apG3LxgA2 zb?;1^6j26pjDcg>Bf>Mg&cIV0Wsc9G4Y<*NP39%U0GC-{k$KlZO(rV%23b zbCGTLAE5uzEhuy)3HI|QAweNTlXTuBIPD-=8ohnx9FGk!R~s*-MTK`Rb8`lN2U|(E zaIWM^jpPVWyp1g^@z3H@H_*hbPoncRBfU#Ri}q1cW7Rt zV^vSD;mBX(!4xUFPa%rJ6$PqVpkX{00U2veUAb$59x!`F%AhB}$iyGx)oHy4_6vf2^&syk* z55O0+WCs;}aE55mt#F1iK>FMb2g>8Bv4?lx?yxCKwS*F(hS0}!+Q49t%_ z%-VM|Lk-E}`h|l7TMX;o3Gb7f`y`vk`yn*F%u0l2Dvje_Tzz_4*}Cgu9)DcXwv)4- zdMni?5nrI6_Wy`Bp1vKXxJPcynd^aut4}gG$@?-?_0YHLlpd&BBk1a?G<7}hp;WvS zs#Xt$`ed#LE1`;Y1t?MGqOC`RG-Z(LB~0ZOdZ3ci$SW15@_(a9F%_yy1{9l#w?ml7 z6;THI9H>GDQ6{!rg)+yoKyb3a@o@%Fc?eK>@T@}~!c!i+>`37$A70nwNkg6Ur7^B~ zFjbfTz$Ul|Jj1u2nqp3Rc+Vxo&1b2JlZ!pkdM@k!BlO?AIXe^IrK?ED@+7isMKU2H zflOa^fcS)N%3SQZ2I8X=Al%ENGeG44UP~5AG*Hud)>Iy-IduZ4CXZzRrJ5vW;;~kq zLV*%(JXv|N70^VBffN>nCEL*)tSCTPkCfqwd!N`cEi|%#`kn^93QpsPK$`s&SnF&B z+kF;8(K3736G3x~X!s;opJ@B8KG~B2)R9bIIFh1*s-<(FblGAkqbcK2jx71RK2e4z zp5a7csX_RiXp63Cr7HucCSek%tvU)r6r!5bx#HBainrIOPl>hIXnQY%t4r1Ry5=<; zlp4BJvj8M|y>T@MsfN`Yp6EV3*C<~T?Y%~NJ;Pn^nW`6{R>N9^9?Sz(nZ#oass%7r z8$3_cw{e=PN7VSn)1s+`JKv?5%(cH$H)~lV3q-))i1C9fMg2 zDB}=D-au%e2JvSQcq|>b$H~m5go6_`gwMwR^Ph$P2d^$;YSSeDM&^q$MQAd`>%DAC z;Bos>cotv(g1Q`D5Wv(QAEK|hRKg&9unxri=|Rm9vGpP}pZyYcwtfhXDaWAo)F`kiLC4B}8uDwTS2fW%9UT*_PMz=J9&wdwR)B02EW7>WtcV zO7D}>_aqy~m7XWrFwP)K1}8m08DPm$obRQ8Ckq)yy0+iMd3~!*xvvBvg;Hd0!d z5maxE!xAmL3A9Eq|C61fjmJGu!@vgN$r{0Fi2$f2quyZ0tPq@*jOO692*GLb@PT@G zqOH4mLtcZ~gZqQ^@Yf)2@kCgoodsKT3s~!}Xt@f?qG|4t8&t(3TqGkvAv`stc)|Wv z-f$>Y%ixL5xGM{@XG@vTtfxAb;Ee#4f>6Zb23+*B?COR3)Q~3omAHYsj`@$MvV>r? zN^Z%yLo32i3xZB7g(V6;c)bPBQBbO(-Y20bF@-79Qvi~V1ChAaAdcyNO$I_111KFU z`W`g`s$^A)wFPmkNpodNm>g?RE%KolK#BHU6`x5cRUkZ-#cF99`2(6ZUL3CaIKy8v zaKln3k{_xytBP|W`%`r!!mHc!^auW*CTDW@?p@;R>&uS+@|Pb><6>hOI2}87sQ*`A zeZA$Y&wl**)0?#S45sje54~sbA!mUQWGZIT zF?0A_d}vM2g;(u%!`$E|n1I0Y1bql1G|}raG(D#(hnMhS+0ThX)9bEPFc=@GBk_Se z2H|BQf{lCXaadb=i-FU@OW#03(OVF(@eBi~;lZsiH)bDf-hCcyes#F-lv9#y-!}oz9+6e8T?Prc8M%tv+cx4VaZ?|7lD}`vgJ(l{=wLu|&KhjB|!_D=P9#4J5?h4Li7-bkI2Ki|Wk zh$+=ExrJxWOysqCGdY7OHv>e`QBEVb5RnFS4Ltoq!c>7WYU7nXtU$>vJXwXZ+htIp zY`Z8>U1sE&V)a0Hvc&3x^|%12z7F~Df@40sqN2)EKD>eOG}5I2CVAvbRz3xic10n0 zuUPFJlDvxqCY6~Lp8&EVZ6~p^>P{K|qii7|iNrr_0||{c=qE*Fo0s})3~8}AC#;< zS$C-=6rM)OBbETD#RyPTd0IGxWKXtt@ z4jo{s(`TQ3N~~ti@Ac)EUnKwf>tDb6=ChyS-jz?`y_0Wuym$Pv^ue+7aPR18>0bMB z>An4JaHpjOZZ*`y)yi@>SF#IE7w>@mTQl6DQLwR*$&V+^1St-Id(ye9!qLYb2NMV3Z+N{X;d8I(L~^{qM! zp)U2n`^?1o9y$e3Jz}O^Po1%fWc~<6iN0S?PuT-is|T^JOTHM4>Bir!M;CaKtEU)^ z6)5h5k^#!hg}3lbh5BUr?=qnr%6OcCgHWODyZE3eK-no45jHZE7wU_tP*~>n1<=c0 zz>`A(JdN=5yaR`){>=B3FAaAokS4h2!wm0&2M!@Sz$@ev#d5xsTM4t=y@dAHGyAE&bg_8Tc*^)Dj zGnhG;*_5TZp@B0Q!lQws&7 zHM|AKd`zo(YmGt?1)Y{m0YqyAEYW)fAT?$3`yI9&DJx**M@ ztPm9`3Ux3$m1aloZ1p6o{cO5_5&o!KY3UB8GIe(Rlf3udZPPJhrm^G8moLxw_19l6 z{_U^-gwOB(0Jl%S+i~;A<<47&&cdzz$E4dW2c@^`o20kv>fk2U)$+Y?xvT_E73Ra~ z9R<*~aV;Fm-U?T5d(+5+88pRDH7D z!&Ijpv-4o0XEn@T+5#`rhobdvmiI)}CJIe7NRvZTH4O2nfsyz=bP1Q)2s<{B2f#h~ z7({Kp2s;|ygVS$+2ZyhI3weznz~1&x;n-W>K|#}9u*Z8EkADmSo6p0G_|RXw;}rO2 zo@T8(8lE{#wC}k3WSD(NqYGs7ILm%gz*9dFTkw(qsFxIhna{DRXYfR4+dZue%T$=g z4eh&H5t>)`bi5Y+<#+MIz@l>n(O zu?ET(o(xcqiZ}y@-T%f+-epM_eQ|)YWB^qFee5Yb6~J?jh47N90A5uWz(7p_40A4! z#<~^2G|&8w#eqfO5teh?U2XMbu#c8_2F06rcm)ux*NW~xMt@XwfBACa6Oc-hLNp{T zF5YZiY6?k>i;Ik18U#z7wH-dTizVHHIg*Rj3~-($RH!NA1wfxJF?g~b zGgLs+5IrKU-!V?J#6w}!&y z2m%pKP#WzDdt=?8D#0BK0V7EVt?39V(R9Y$94K8uXWZFCRg8-Ho@h`e&3cm4#OpBr2anwdKzv}A9T+6>wk6S|=NrtXySKkjzuP$L^DFn#;& z=VtBghv}i&7hl|8_0NC){`+5l`xkt0<9^5Wqc=ORx1E!&wj714_4}o3wawDCsv3l* za=2De4wp)b;oOdVIGMX0jv+L)X0C)|MFnv6-LIjb{YzMpcMV+Do`VGm$6#9IAsCBL zGAyu#&0Kp0AE3|T!>$iLg>hrUZH+R6VEO3$NhAkg83u z;e&DzK1_$v_8daXn*mKQKXgB+7Tu7xn!vp|~bR|qbl zg&p1@sdIuNHxl2-EVGcr9mFSeefJu7e*%kyyN@SHjE*)*PfH_73Gw}tBEr94u5$xF zN83)%CG#Y=IWr~aSyMPbO&t%aDdU&|WiJ#cTLdUuB|u?ucp9Qto)(YdMd69ol97WD zqGH3m=%h7N$agZqOOn{_u5(j2G5TGzR-)prSG2ie1pFbxB!k|+eIICrRs_dtO1 zfaWxWmpFR{PkTa^Fy*Nd;i)EG!=eh9;*{jVJWh?m7|xQyGk7Kw3%#TYlzzq=Z`DzN z+P9XgMih=@^@yrPhJ7ytAsvSzgeMAAw5a0LvcVfiPqxpF*L#V5Pu9w#)w;opxAhok zA*j(Ad9*EvuvJ4_cB^y@r0A@?+LeaT&6-pLG|~8lN)ePc=~l+kY;Xi zxR%sKtIY_BAQlrn$eO@zc>2R`CyzCeu#lw!p#Ez1@kj5Hn##S;fB)TA2c*v5;n$!3 z0qAWmBzHJkSvIC#p6LcIRr-2m}neSn#x^EwC`` z05~Ncg^=~#ps}H*n>nU!k)7GtjL$ z1L?c3LrLphc-FlhJXart^n&w7?Yk+WeWzddE}$8PQ}xNuko)wSLV@Zh0P1D0N3`$6 zLcwxu!Lwr4-II#2%qKL_zIC5d{w^Paei)P?l;G?Ylbt3_N;l=3!`~ znRRKqb%m;)dez8a8aGp3>jGG^@5#{iGrU%RZx@K`Vbs1ewDFkNNfd40nTr{COmULo zNvKa|qK#+rP^f0PSP!pEp+fC3hA0M7iaaR0F3IE+qUC+vN;?}idM<>l zKs(3_QNu2Tr`-ror7>8s?of^ZRhx_ulcI(4;JL78*&^5*ZU+_7j(mw0go--0KrqjC zV(H>^cHK%IOF&_Xw(2-Yxv@9`-m3F3iWZ=NLxE`@0uTip3Og<9y`i49<`9B5dSf9N zZ4l6e*P5`Jai1PH(t8nz_<1jAq)HT4eI_3pS$T5UqRP{1ooM56Ulao<{LYmKdR4S& zyG~?4RU~lJcwI6BCp|osAw2DgRR4WrkmC}%zFkYa%8U$Dld&pKlH}LDM9Uv`JAJs8 zB*(^)A^k=mJaw4<{r4})>C;Ci{`$*T?}GF*{PNRp9XBt3)_L*36*%8?QaV%BCY>&= zl}_(2hcmnOz^VKKIGLLbCv&#L$?Pp~WMd{ASeF6K$uV$pZ#f*j{UfYt_z;39Jgqwq zi&Ia+%$RnV9C--Ft!RVc2qc3MMi_J;T=cLngQpRos9$L^LeUcrcZ!@qv%w@`t~`5rnJUh7Z6xp&hCZe+c0@m*E+=T1d-13c>5oz?^V-_T9tkld<XY98WN6n}c3JYI zm(Bo8%Gr133YAA`(l$4m{ig6H=^@6@V(Vc9N5(BUGX((2*UdbPqYHW{T8Z-eo5|lz z_G00G;~oN*dbk;TpJaIIp;w&@@YKWA;De$bC{x)3<@6|k+S>)5x&qYyA`i+4ps*Zv zfT=?f11L*`r>7l@5T1&d`ovmyTHd-F=UxcYy$T-K1n&T^@azk=6Np8iO+TXZTVdj= zvLdd&!QFq5{v?}Lt0haU=aYo!Xp^**6q1yX_(nol*v}yzuHffj)9JZ*p5#7%w&XH< z8fd0Z0?o7upq?@gA!;nxBShITh@wi=2(U(oVgNNpz!TOYxpg;60Z_Dchw!uji{?Gi zz)ZT<-SW9(Azd>QGTr9E7C#%vS?UM{E3~jP!Wni)x*$NgAwanyK)JI>g6ie-Vb9V9 z9G+NQ0fi?Xl*v-YsrMwP#_iK4GsZN zh@x#k`uWUvwVJD8G){q<+}ZLiir~zO1Q)41j>A)Byi-R-j2d=^ss6ShNNrafp&_j) zYO?{;+{heTH9(J|pkGci#H1zuo@{I=+VA ze*Njet*f6)=MkRHHk^=7>}`>b?W%y|J4)e1Q866P&4Xjxx53dZ8{p9T)o@@<8XU+> zgZkJ|I9|L9j=%d8tggQYLAlpKyZ!>;#~+2M(T8DT_(2#EvLA*bl)QmJ@*2WO zPgOY#z=x!L>|q#=Kthe;{ai$w4j+=VO*hKB0mdMtObKd+d7*9K7}pMdt4~98)@4{< zdJ9TgKZK)KzlEEh{08^F`yJl->hEysogbm*)P2Znz6V+L??cPQui?_YU!dm1=a9Vf z2543uhr{PThgs1_U_@{uY%4hfs^sGgo@jXHl;!f$EeKGu`V`Q``$XYMZr>q1>9e1d z>XQJdzMg#PmZwGg?kSz2efPL%-SzR{#_`@=+IGE!nOqLflotjzEPGO;pOI&zLg~7+ z#&iZ1O6h0n*%fGHzmifp@-SpKDOD-uJ+i_iLsbtCMQcyA@5~fRld^?pDtu4+Hlus3 ze%4(NS$T5jqq2p^6(|8y6rR{DJU$bTFo3Ewtcm9+4CF>e@<%98$~K;zGR{B&Q1(R# z{za^P*9SqWFN3E-gr`D;r$QLw%v*O;JPSG(1QdaLSix^T!Exh*!&ef&@C~L*W7ZMh z6|1}dApOa<_}FOTr}HH1k`qn0WTcbinCPsiKz|6(I6UyNT@3CEtRxq!>7b=%a)c<= z)N$bO<`@L1G0YETD_VIr^7Pxrr7G)+NEO+is5YB8-I2K1 zxR3-7P4^G^A9X9w+pgaS_}c8RKinqo+&FIi_h0V)P5Q^j@b@3@Ke+SOeK@oKG90Zs zB(?8pln(DGhr{{Ba5%dF4sY8Ihc|D8gX=Tl@P=}FKKy8_ztbD{m__gs0( zyACcJFM@T(X_%XI0%pXv!{n&LFo6OTg2`~&!b5=Sg%7&1!Oh^1coYWtAb8+I@eQv! zwv5XN1Q7~Of|Wbof}Gm-pyueOaPr1?@HWEJ zJNN$v*FOFYPTc+x>d$@&1^YgPEqG7S{*U0~?Z3d0>)*ki10RFu+Ov>YbQNmbKZch* z8^IxEKdjq%9u`Em!@S6Y`t}_KD5^e!Bj5W76{_T6czV>*E)1qPK$$V`QxQ|2ouSNo(iRruB>$@&Gs$q za0=Z4zAM&-hNV@I;N)tv&j85MloGbSWcT*x+Cqc5;us$hVUiplPog6t1}BDx{X|tL zf0bRQm-Pb4ZQd-&dG<7Lnl%N~((sQPW*$IQa#fdi#60_TkU)76R18d%wW3n?FGPxvyXcg3{)? z_hD1bdr)!gb9TP&)P2Zl_yCq9v_omzJxD9Q0Z+QrLhQD7h}?P>=0qIAl4sww{(tPf z1$bLmw)Vd**_jllGaa7JlqqeRwqcHgjzKcplFSS;GsnyfvSVhMAr3RPNz*iCrYU!r zZzs-K-(LHiBONKu-21=x{=e_usm}B4kt~@qb>v^(^{)4Y<>AKdI}xC;H2A?lUVXYx zj4cq-q+e}Q;&TP(I+J+OXenX^O2ntm=+mEfO-Sa$yGc& zNymB8QQl%hgn@Aj&stERM0mnuWypXsGmuLmN>re3C>A!)f->_#DR_XAE84(@!qXi} z9o$Xf>8H**_@zq=Jm}uSJ?^RFo>B9oJ4NJP@QbaU_%r^!qetQ5OqSk8h|)dC@}l%D zy{e0fh^Lz;smRTi)f5$wtmNeCr0`ItLIpVO2Gx$uoF{srHm+eRlyc3ppujO6g(ycs zg|dHo3GAj2Wk&&O*HToV@CX34a zv9qt19(p@h%iqWMnWN9|uSKW|Vd~UuRj^T&k^&T}UPb)(A;ueEgu-vZFD6bt}Y}e$eAq)SgwD; z3;)A@aCU_J2*PwmoU6?riDICA@Yk2Oh-^26o`~l9q z@q0K#-yS*p8MGh#2&%{5fs(;D7(|Vp`3z>B`vQ6nehBGpSHLmz7|fmd1nlYea6hJx zcboyQ+>@|5_5f^**)K^R=d+(MI1{4_9yRpd@xG^f89ea-h4A!qN%oU*bZ1N)|GofD zcWI2?r#saA`0h5fIKmqh!ZP_SJkbv&LX=n#yx1(hV37b+HmV!9+N`DdPi9+pM!*_1 z$!jvna8e6#2L|OTh!jCCD-Q%ib zkp+*sV`Kpv-Lc35O>EPzG(LX!ghfUZ|EO%4Pe?TJ@Qty&D1D1Bl}bfiw5}v2DbXrD zGlL`~B>prrG2vsap9TV*9p`=RcYycSO`N-+LOHKp4hr1JTe%Dzm-8x=J%y;<&pg2Z ziYZXS7!S{mCmx1v^w>WBAlOoXLU=;;2{WMLcC3J0w@py2*$I_F4p0}yt4}R49-xb* z5EaLd@A^|HKt%6=zQ`Rg5HF1FQr!$2cVacmc($i8u0V(^KqUv^X}W+<2^ZrC<|rs( zpydPuC_e^JGXgv@A5%3CP6$J@H6d`YA)JB|J$2!5pdkY0>goOZ2>N&=du%^FGu5Fm zO(AQhnpdb$ftnGHV<^c+gLZuuI>~D%^s>4B zM$%DNeD@#UIr-ZBr zlj->GF`@U4ZQuEi8^(9P6xAoe|HRZMOdOY*#)Xn#9N~ReBh7sp5wf0mNV-iJ--*y9 z^+Ab7aj62eQ0cCT3MEmcq$4~LYGe|SksJI^yobp!wo{uXi_6VMa^}IBa`9FzysyTn zKFQ6F2}G&*F`hWivo7N%P)oq>=_Rmh*<-Mi0@Mx)PuriQhr-iV5uWJT^vHd%_Q88WwdP64RIZ17 zPg^Jtu!p)(B{W94LbKKlT4Ft*E#8v>R8O)O48}V^Pxw~okLBYEM$+6^#~mt9BN!?v zZrurEEZr5;Z*%7P!Aj@C5tUcD1j3l|p z$=zPW!P}2yhIkT7`O?4e)mxrLoZU5KrW^fFi}4}Z*DuY@&VO(QuDx~i+F##z4lbX6 zmpeFef}8D}geeM7lQnHHURDc}rPVN=UkLiF4EisRWYDL?!*Egz48=!4f22R0IPyF+ z9{m!+G3TlLd2lQ^$KYvewxB+x9fLI#pw?1YdMf4sJVe37z2G!#O+5-r5t?ETz$$vy z(z8D90BlJ(2-}kmfdhRW6`|nLbC5v6EUWD$sHE_;mjckpiC@8?%U{E>tG|I0ulyDc zzW6mvJ@+N(Pk#oThd+i|3QWbrZ$dtWr=o#3pk?-b7&!hbwuM)%e-pN+9D(+kx1p%_ zWw^sr57Cv!A-(ZDg*JZs4##)6eYadNj~j}EP0ZsHg8C$ZC+YZ35}J9pXdFk?Nj+j1 z+3{!8;Co_)!Rk>1INfSyCcouo!I=_pvc4%unU2nEBpr9w(r`-&MA=A3Z{k=^&BK*U zWBRzYVO(cwE@$s+wsj|dZbRpt${1ZBj_wQqB|wz)7&h{}cohmEN@m!?8!}Y57!$}B z=)p5rpTrG3srn>t;wjpNjywUL6m77GjqY0E`+{-&m##W^$X&-R@oeFitBsKbfw5J! zQDrAdaM5|0-KNLMz%d}U+np>gN|uXwyLuCt{~HMn3nw3RwUDd(#zrGHXPna$AVOVAYU(Lnz19=&0=gKNS4+a(AF7OWC4EV5aza*< z`!;xyoDhrZ^e=sBG#c`ct8?r={Qi<0etm&_bapiVA8#Flf4p(z+CQ$$ac^FH4GvA6 z=VmB8jW_neIEAOt(pnfRuAr1&NC`cg{xBuee}%-tP@)zF;v%6t$O{hi>Y?+@*AS(< z0^XGfPiJ9A-f7s9brNhdPr#;(T4>-EkEvhTdQym_rnvrZ0TKpy|++uVMDm zS1^9=3m8IpI)d=@9uy6~1$+8lhuq%RpqPGK6aBb$3Qvs_??7tn6|m1Z3P+#+99;5F z!cXWg@!H;t;8%E>jqdR9)h)B|jG6c8VZk^qt!=qS+`JRYf-%kf$HI{o2BTSA8kmX7 z)1B%O!{*%`8Y3`?*-wVI%~Ypb%=4ejK*?r-94HZ#40%rr_?oPxk0a#xNI*#(@2N*5 zYLwA5Zh$R~5yZ?5c^w~iC!V;|fg93<0V65du$#NO4kg!manVmy2)6%T=+cHz zILdR_1>V~cqBd}@8&*?*LO;}Ua9p_z9B`Dk{3!}iPr|Ncs6z1&wSDQMuuXud&5u0* zn;(4uRzG+zxUXCS*)AI)-)kF``0a-3P=yhowC>PEPfMH!bS1b!cjOM}iP#PU@lG(9 z=*%JuSX=?ieB%926BvxiMtEK71TXp?43r?S?QMGXn!MnPHsMXLvDq!qHt%g3GnucqKGPJ6{M_ zdHk#_!ksi}UF0yPCgevNk{M_T$^4hU-r3hqK0ZE3K0iAmfA`n`d1113{a>%{`{p07 z9)xR`#;$*H={Y!d;3aORdln{I24S?e9fnJ4VW^-C^aUj_oSh4UDM>Jx98doxLg6Vs z5<2|dVZ5XS^yj~XgpOB0P2tI@@Eq)<@U%6DSDp}_Hl*V@2Fnu|+=| z`#DTM|0T>^{1PTnbvpYQ^qu$w+7EpUb<;dNc^th@fs?GW&pf)|9+TWB z1g9~R(H(CfA2n3Bi2kSBrG6)2jCYGL!jl@v7Yk!M@&2u9srN~57~L(F=;wf;dgL@uVX^!&xW~N{lfOz-f_C>B663 zNd}ZrfszZ}Cvk+ww(mT6h%z;g_nVr>l|2hb7&tDFLM{N5l|odX+6<$+pHqOk57j3( zess6mM|XXDa2u#&b$<_xNLwA9R7^sXs%7zcO(Z0#%<_U{xlFD+e}7V5P(T`+8cBXm zjx4_*pJb$_Zc2-d`Fn)g3;dN1*EPF$fYIuk z#^4DdN{0#LF%HlXyaoES_Rt@%;Em&{?kq49!!jq>=AB>~$F+a@*d!|k7JN@d#@@QA zVzFL@KNyTTL!oA0RUjWpP!-IeXO4o?{`znVP3U)`U_{~RKvOgvq-T~w(@Y(&Mll77 zg3~@hc|s2qs!!9*NFKr)&rx|Q=QsF7-_t~a4~*pT%F~DtRe&YI_-DYa~L@JDRdqE7+U62Y%m!B03ZNKL_t(OWXe;q{w>JveGO7O zUx8Hmu~`(LiiX~Vs?oQhdgLuA>U)(bUHu2&htmF6;Z6@dgp?nHJ*^jEQ_KMdP-`UB zEz;z1RG&-%YK%9I->`W%YA}x@INhx=Mi!vw>APzFm~7rjvY&31K+>&dIZ)#5q6O5a zg_I}jh3ZixF#^(>6>Ig4g}zds(;~@O&Twl`mPU*|C&5=G7YySzl7eEndf|;c+`_X~ zn~mu!k{S>UgmcaLs^z?kBs=-fdPmOCNGzl%xLv&43dt>s0@a@}xwdU_K53}2~L zn4KlBEGi-yNl8J;QIQbp?ZHuq;?#EAzynR?n<+$XTn&n~s6ssr_A8fxJsamOg`Egd z%a$+&YU>k^z-9_in;w4|V{Zr8i%{|6m03TTW} zwvZp%Tcbg|R_i7k&2cBsHF}a9e;3OS?YH6jaH58g+n*uu(P0^Uc$j>2q`T;w7slc5 z7ss#t<76-Q&bb%3{ZkjXiMCPD*LK2iMKcT*R>5Fi5%g!~LVs!+^u$wmii>9O)D;l` z9YNkOJ9P#MCqDwe>WiQ(KF^dV+w7AJo;G9VQ`#}uNC9bW%29YC_5ipSorPUFr(hig zs;v~3c2HQ_LEj(K$sKY}fr5U#N6|U(E586?wU;2a`9(-;zX}C?uS50NJFxe_htPNI zS1?F{34KljCqIGiqrZYS3RO+}K7bkuPbCzda_IXbJSFbE3d!_j(EIuQZ$R1bn@~Yd zSk?33y5}UEy8IQmJyIb?iAFgJJiO_JEI3m7~e@c@D@u#G8ZoZPAqIv;&ZYw?~{`}cSDG! zq|U_{O)zTct1}b^;Qfe23>27p5K$%?|$cQEsb!qbn%z)W`?_ZW`u zgtT#|2#hSKnMQLkUT$t)Wal$KB~Gpy%L|g_y6Ke~9Zf=1DiReIPHMBWtSWPJ5TZ&G zBf=oq({0{QVb6K*+6wMlH*l_-)`9be)!?+|S$>qa0wHP{?0V)&*p4GSdTbG(mOKpW zAAJB;J#a7hZF~mu+-;%IXBSiiJ3&pj3k4_~-|+y2r!|fORK!kb53+?`tvw9HD_|he z*`Pj+3Y&Lq>n;lo-n+Vk>+Tap|FI9H;eNlJEl6J+Jqy!YCh5cm8Z!He&cSIo(Z;b7r;jrPt6u3 zlJj7<=L{R$q58C0@IB$!ZfzN@-p1E${N6r3nX?LG7{G|zp=Mt0S>ZKvnQ zc4=J*PcK7!>s3gi0F~bH3gq>^MnUW~C>eMicF^ysbl?@3KJzI&6gUOTwK%@J3=XNs z*w!CEz7w;brr}8;d7PQY1@*~T96ZJK;M+a%`} zm8tr4tJx;rBDFDve3AO*{dYE!=mJCPxEV-EAxJJUc$)y0#_Ybyc+Qwyj^JgbmUi5k z`l{sSBRjRx^CZHPTw3QMylrEMF5qu%BpY}(k})0v6p_M{=z;pD-lql32IYdRX4ZW6;4ppW)e$$Tmo0w5NoGDMJP~p}c8q5#Yhw*U*LjDtO+~LR$ z;cTqfkM-V-7WjaEkA|g-=BsA(nFviDTz`rij_ja2-uYTrj1%mQR(w+x zstle=cA@|O?z^X=nugsRsipjFAjGOe{*gK z{(idu+TRYg!PR5uxyhlU+;Brb3{m zi@yhSg!{wrf!86i^L6kjy}(k&5uP>+$`h(i%rs69j_sW2^NRd4^lcuVcF_05QJ*~p zCnpL{E)<+RD1`Y`J`cgQmq6Qm1rpk>LUzwg&D22SN;Z$pu&JaxRxJ~meO5gA-wv;!xJA{aGw}kU{Ie%;inSyiRC_N_~1-~?@3Ud z?i5CMx2yT>J2Cs|Hi`G?7RfkIOcq~kwt>egPHqBC()a>{a-@<3XiDJ5#%zmDZc^tW z-j|N=Bw0}EQ3F89q%j3jRZ0?%AYVZJlCk=h8#nKy8BhjA3V}(;e-gLua1JIQ~%a(vG0@RX6U=4+*oy#7D z4A-rYud#!&AXJ~6p%wv3fTw!4f#(Xk&>gUs0#tX@Zs?8S&ErEU#>y53Q9^hoGmz)- z=J7FR9`|POG?uSoA(^wKzJ|WJnKED4SK(&}$z*C#6(3iyU&wMo^$E|MaL`D8un~>q z5$yR{NoXeKJ>kaQbVV?QCO&a|qBH=eSy-kogEkx;jxkltn;FK@;EslIAzhrqYL;R8 z=just;d&9Cv`)|*;q(awrma1(F66~M&Q>WJXRG26H=@&eklh}b zmVADoUG}TFz2wSJ{r10{?16tf)6f0eAszSWp$YELzKh&Q>j?B$cR+7R1N2aM>dr2J z?zAlEPELWY_!#Jj4u`g|0B8^Mhh~){47UzL@#M##D!%{@EGU!TxZ8rtQ~EK(=x$m3 zA=s6D0-OuZFy#ryd)pa2ouMCh7Mu#tf^*S1@G5(b!IOXWC5UW#5fb)Zh0N|(Vb8!D zP%-`vG)%wG6ev9Cb3$-JuT$m3J5Vz6HWUoL$vjUf9WOIrilzV-+4v$v(a#mras?78 zP~j*rp90hl`u#;WUWDgf`3>wyIRbanU*2V17a*ei9IV&wXWe&v_7jfpreSI5lrec+ z^gglC-53kbyvGn*VBEa>p@xU2A29Vv04Vi{!TWTlq^9L|$)?@ylA4xVB`~$v%>N{s z#l=9$#hQiTX`#F)X#%tVkz_xa093nKa3+7`ioI-fcb7uPw(i8y z-4ah7_pBtcz+YQdnOJ^`M3+1-+pzM-q+<%m4m*qFZ@K>Cm!F>>$xBZs#kqMTCnH0) zC%=FMM@4=wGb#C0TxbXcy1QQUaoo+R?6!mZ)=iwt=Jgy8Q7gb<)iYqXVj1jw`bn@| z`WS3_;t^Q=@B`qsW*O{J?Seu-d#DI?ftm^Aa znR=G-q=Mlr-tUBCJHhjWUMCJ!r~V|D>)o-6`HpBOXo+yVkm+mxP;Hni8H#g}hq^hC zM3pNk3{;Y`uVdx=>6riHOcPu@dVw47I|u`H z-OyX!0zLVa(34vX-5Gh%nUW42ak0=I6$TxVAZU) zl<_Q4c{&E`Qh9j7jk`_hN15*ll_%S*6T;Z;H0<7U2J9(#ITxR23Knkf`PW>6FbX|d z-4#ggcm=X35aA|W)x^6DmKtW?hx(cKp=Rn`22N$8Z$shGn~>N4I)g2Qr#OVCCJImV zdke3B0V3#$YP<}w6rxfnl%XMgS@awnd+|$Xr+n_6nR#4PpLl>0;7P-e?tW+hCwkQU?OnpTQ!=`{Lv1V#Hdmi+HQTgf_f@9( zPhx=PVim7OeMh1+NfjyiLgO;EX_>I`amnaTvVmvZnlpxLT1!&KP1L9blE&o=n9_|w zna1rq-Ul^e^h5~&wMbB&7MYCjj7k(jl&C<-+|BZzq`6N@X=vuna-Z7G>RQCn9d6yV zv97y&SYW1(d(=b6(#F^Nwp_!=0>9Y$v)h)E?}Ru#NPL1~t$a0}#4}K9c`>qF|0#%S zEG{OsWo0BkJ6o2Qw}-^XCs2q=IuwWFJP+4-A1C|ks@*%mWBV4)86j%J8gN>>5_YeA z8g?yz3bsA<1Z;WoF6X^!EQSJtSLiMRJcsn#xfNBr7 zgPs^i)_FISU5gwm7uHt*{C_v4i;)EkR;TF{=Eb(RP zQ-weCKVi2WUjQ5|q=)k$wZEQ1R2@PSp9O`Fp~q>eB7`5;v6>b%iU+cU@re>X-)Txv zoe-R`ngx|7eU2DY;LZF_m?}P$?!k>@cyI&Bt~j!r@5Yf`Bqp&tb*tPQZqE;LB)TYP z`E8GGBEE`Uq#(eBwlT5 z;Xd3q%*{=m;|7}sptrIOdJ1cxE3X7PGjgFbH3Qn?6QDIR4B8@sDLnZ>OP~sxDM0n~ z9)-m2x4@Nx(M};{T!bfaY=?oFD=0vD(D%XT&=bW*cNCuN@=i1LNl|nT+$lV%DxPB- ze8F{>A+q@j#8c2o>v|P(2i|~^k+&Eq;g}8$;uYg>Ln(bs1gET?*C3nT_jE zaYAqkt-Zufc%2cV(&*>in0N^MD$m2apZ*mBO3%S zA^XXwK1nKDC_MelXJLT4+uZx488I=BV`PB{Q3n5$#uTJP)#)~=aa?7rGZ6zQZEoUu zGRbDT2}GH{ZDSTuU~M>~%p@)~j~lk?G&kl)$%XzrnFOfBt~{AqZ<6^WR~tula>>XJ z@5{W6+jlmS5gtO5jU@jGM|Z?SvU%s)Z<;(V9o;!CG`d@$G#E#BPHkW<)U{w_!A~hX z-Rr7@hdo-jrD9}3NGqsgnttyW6umSuCWC~;7RzE%t4K&pf#t=>a{Z?-e}8|{qtlVP z%1V-*ktxf`$s=n2z{Q!#$pi7>;Sl8M&iN`F=QR#?;J$4Or`$v#YU5gPpb%xZ;%V5n z>wRh(43=iJQ#xX0ZiqM25Y0OnDLw<7~&elT9hCyV3PMFYE@0v&pu zun>4e=(I!CX*k^zYgwQtkssN0MmvHo!r@v~h+`_~ok)zYE2$21k{#RQMgTHNw$DyW zHOseBeR^q(43=f^g~9ZEwXgZm-;eBtKksjz|Ls^c_uT&DoW5%Y`l>sir=$@&_mn|r zRsnRRWI}slGUy^BC_IHiYghp2f;G_K(Y1y3d1s; zakNLD#~6dHhSA+=raWQXflKju@GN@{G?mXoK3$ptD^Yo76d3UdHfMW^7yz3K;1*3 zNopSdAp@up-uHyclbZKFi4Y~ilL$?C|27H+cPtQJaEoXnSBV}dNo5Oe+cAJL`k-vg z6ekfl3Qx;5E!^gS*6SYHRtStP2#n9|C6U>K@(=0Xxr72ed3xPC%Zria`Y&C z!}i@|4j-DS7fj?hzQe*`1ebAPe24HfAr$paVg6DvU)zF85rZiTP%{joC=68#hVlyD z7lmG?SvH#Ex9Zrak3NrMKL$-De4pJUGl^>$Jn_ntnvLub=J!T2czUlS&~e*PoD=;$=}C%%6;=&VE@UFtljLYDp2ctF747TGZa*5Y zm%Tq)N3L|2+Wz@K3-{*(I_{6-mE8N2-Q3Lh39i4P7rM(@pfkS;+A|BFJv9sVCZ$5F zRtqiR!O#*K2rWSxXb$j#Cbbf}`%i*)?`xneI1SsfjfQcAruD)>-;-VT3D})`nmvw? zwLM!@pU$w9a%Isua4Wq4US$`U`V>R~3deUbtuH|m<~H@b#R*Cg$wwGGVRg%jNTE1b%znb&JHb4Dzr;NL3t@zZ>XT?5|B>i>62^AY+7>bM z>5c`)cjjX}QISG`T5LFa22rMYPXbs-0ZM=on+3*a(kvzu<;lFp#jK7+W&&c8Z9KJk z%z zu$7Y$o_-{Z?jCT{agTZMkp=7hbk~%TZQvhMsY_^hiD{c&_?aw>~8=iO+B9uFzB1%n<7u3dh)8hs8F`n!+X`P|QcMG%xY-QuSZmk3K#VMd) zNFUdyVfwfyt876J5ev-B|iwu!X5gZvJjj+ zIW&v2RPiJi=!#Wd>(V+xXOsifhdNF~c{%;GGE_+h;+$mho{pp_*o`zrxRJn}n=C(c z-`4B>u`<%1pG=ARf)&6y^65ma{;vm`;g7Qo^Ir{@a_46baKqg*&|BRBokex9H@g_x z(sH3KIUU;K;-MLpr-%?}4)$dLRp(_7otZgMKK34XmYjo~m@-b`$)G%?@@Hkz5m=XU z1f26vQK+OvfT=xP*wp@WY3PcD-Sv{{Z4-{_I zAxz53h}y^*tT9o!wVFiEB|rN4e9JF@Fa6wjKcM1y2&I6w zOuHYRjXwx)eEesaI{z80rLc6Hryep|&O>h7C0G~Dt50j9c=I?$7hv+ZH2diRLuoLD zCtq><4&ljY9%th_A93@J0+iZReY%4J&+UTZWZ1k@-3U>)N^+mRW0w15h%nIb0JTW! zBf7~bPntk3^*&jfRkuh3F>TDu;xb8fi(K?RN&4-qr6t2R84VhIRR;CxMit7&JTOyG zq+|j-*?1dspKOF%nV38-^*%|r?#uzoFt#%Xs2kNM7Fi%I3U)=`Qwz7us|D8hv|QUA z)&@Q?wa+=@OJ2q*bO}~PHcQPoZ`aNr?Cuo7|-H2?+~EInE#2d zZQ%h*%?#uWqQuw&3Q@CVeD58DpHe@e{|@id+j2i1q{?`BLRE>C{R*9R_#8_RXVAna ziH{2VY2u*0#p{CijICK9NF90nkL@slnF+>OCD` zZ~Fm=YJC+Pa!)dN+Q`7^C=1ENTl78Q=uVk;$}rYL<2VDToRhE%&Et7|Y=Nt29!IsP z`Vxc+3Q&`kmp-=9s(##E!ED!-G1Y6@X{CX&KG}!@al^ce8%CS&`D?;y#k)}`$gmUI>9{7 z)F%p1Pf&n*ENBWI37mun19|iK{gUVcDM0b#yAi|Y-Q8+_g!etsIBqt+yF+a>lix1w zy~A4y4AR2jMP>lCNTNd7NX+5}#bzNtliC;wvK<<+?o!rD^j^Dp}#3cVoI=17zPl6&PQJ=)>7Av8;#gPB>&%96O>XRY! zX|HMGxS|biQRv`qLs4)G8{J`5%PLLF^=(0|;H_=^osWOS(umkB5)@Z1i^*yufiYEN z`SRtKmm$mb-~Y-U7)X+$wJd1U$H$lCrKQPpC{#to#@&&gl+>6Q9Ssrwe&FZkI`8dZ zf8BNaHqLS5Iz{N<0*(CWJy^e0!3a z%!TLygeBpzNv2*2F$jV|TpZQm!Exajt7Y-#Ygtfnl7Q22ng#; z>0)7k)0*LE+=|^wN`nh%VCPDGgo8Ve_mid}CrXFM9glBc~5q7&Q?jUT(I+pB{45o0rhu)`c2KDI- z%YDM}oqNf7Hoijz%CG7ogf(1-2#g%iU4ewXFYyWD?Ju(w@gxky)V;(;brs;QKee8a?&5O@| zs_B0bHpd;Jhc}Ni?^8IRJpTBC=5c;>_X}U+=G{*Wqq`Ay5S&nPLiOn`VSHx}PpCrO zsn(k$kn;egH}OC%HUlYxfn3sc_nn0lC)L6+1vVNoiuG+7~MIV!V`|}zC+>Z zE=4Q+Sg8|6cP$uMz`AHo+en5`CdQp1#g&U7^}{3p7)RY7gHH-O&!v z8>fK5Bo`P?<;#P|gzAmIXPJA+3Wf#n*|HN4S#y1UC}uzRmK3Ww{75jL+3%S`{Wn zldS0QJ3pVOe(Mjjb@1!)it8T^RC0482e_Wbe&{G}09{Tg=rZ;|OJXWC$0a~hR1`E) zcxniu|2hfqhB{w&ratMKry-){RpxEljGiY7NNbXLcw!rONrz!IJ&N2@>}~WyZKg1V zxlq#a9cD&h?vtAUP#UH{U4)Rj7a*KMRCM!;LipuXmgf{FjOnD?b!ZGnZxezOj_Ont zmb@uAdC<>|@Z?o+25eK0GBCN@e*(IWd;ov>hJ)$nKL=dl1fayw%Eqv()V16p7|3r| zNmM8m`kwTH|4DCF7;H3*TMH1i$gG})#TS@F67WYR#uJ!t&6%k|GKuk9tYnc%QpU}r z4Xh=fM<#(QYxTkaC#p;)s*?aw()4lMx|2(*Tm<#W#@nbm@%Q=B9l{eak1e>N^RD|w z^+~#UhXCc+M(?+>vxtJz9m-Y~S@3h07EBvwqdT#xMG?^ozR?wp+R7J6M8juRyLa&a za^2-~Ure=d+~v4m&;&b5zKh!mmAysp6RLL=S=!AB^b<1IbKvVu|7%Q4Y`$>TtQxU$J#K z#+i89+mq@Lg>3PfUBunTgXD%dlc=pLEk8__i@y@${K<#>ixZ-#>)ws z!$Y97?`3eO;IoZF(Rx93T9tH!LDL#~|C#th;6UMOQyQ;K;dl@IPYj@h>?f>jL4Z=? z1|I!fo}~y-&qF}XB?zJ?9LIQ#FR~mbEd?n&yyAr0buTc3cwhzZbJCQa7r=>r9tunz z^dLkzQdoO5VwP=Stw=fqr(gLs{Ph~Z$=7}hA@t*)iQET^J@ue2ItHyHFTu9N!z?&+ zP4pZ~9+#TOA6r0u`lUF!GlM4_-{IKqZXtR6djc#O%;Rc3U*95$FEI4pQ9uyAPoi0z zd7p$)-gnf3d0aIji7k)-l*X(uSaYM=BmXA>meT4L>Bq?=%9Kplz>`b-P;!YU%33{Y zGMo5TYF*m#vj}o;J%)y1LCYynqcDW9cg(1vRwaH zFU*Qcj*lk^v9WAhFEcGomX(u7O7ruHHY(~zX-P>LNwKjXMFj_gkBc+dZ`^o2Jv#ha zTYl2@`s84)G07ilLUwZ$pt!wZJ6U`|PplIKC}#>#Vt6KB-7+Rb0<9p)xfsDocX-8#nW&1gJuVX;N~Fk0Uto#&DGZoKSJn=kRqbVin6^ zI&TsmO7jHVvg=QFo9~HJUdKf7wn)c6)Py)@sNCIet)ieb7N?Z$@o})K3saKL&>f^I z)KUg)xg^&>c@~+gPA34DtpHAw_lL`-eluAKUyPK^f81BV9oA29oell4x2TS(Pfe*g z&={W#4KZ=hK;fxAH~{MW)eN8-{JfyrWji$I*Ft>z8(^1toCl<21Sb)oC_E(`f{m$1 zVRzOE`q*JuPw%4#%9g?tdZ2KGhboj^?kR8(s$1O9L{1?H6)3;Tix7w*nk=*FGV?a! zLB%P&o>!c3vknV}5uDT|=fS)9EO-{40rz|!o^V{ZF7Xf>ff45cP*q-lcfa^6{P7zO zj$HjU#5P`r^>GK_M-+N~89WJX`b!W|d7dSYi|P|^9-o1y1oJraJ_*5@7+dg5j4m($ z)R>U_G-3d#AE=G-1qS6wV^p3@Ms}z?nZeU-5(Ns+Vj-$PgeLsy%bDN_j0 zM1aELU?DO90SCh~nNn0BI(Z?nQa2gk54g{5o|2U!S7d=(@IfPh*(LBDx z4n0mIIXpO_*9nV%^%>0T1Vd>a+(4@P_5MT`geT~Xc7mn|$H^Rj#gjvEcEriih17&9 zWP!?UB-wi#DGT0B;=GiW9~{eNdWC0|kWel0+uDArY zX-8pw$`M$D@RWF%1!bi(cfSnM?d+M1J~8@U3uiPGqTeekqU9Q=gPd-q7- z1O+HQb)2bBSleQVEil`>6Aa|v7c!r|CsCiI9;ojM@N}!%2vDLDb&J?_Cn!&bba5g7 z$wth4QjM5~XR2<@cCxu4nn2ielRhTxp_9OmjkFWbEW$u$u4HKzzHk11GBYE&weWq5 z@MPG!lSCNU7&4&51afI~0fG~69w*}Fox2d8Df*w3H-jhh(9FFCctX=SMi$(u(7}(K zdEe86?mF%<3Qy0fnz_vZI?h9@1K)^TpNNb$5|Z8{*S`iNHh+YywY9ap09mg8r`PuF z+et!99NA*)P3-KPP?@sIO-*Itn}vCKBrz`j&a~uY_wc}=p^SvMFItN;=|7@_xyry@ zT&=GybVlwxeFa;TUDPfNJv0p6Js?PTH$%}!sDnlRvx`N4E9VUsBH2^4jZxq=b6`>o1q|?5 zXKe8p$rF+HffxWw;GO5|c&X$8^buK_S)ad;qUigs7z8)$-R$qO6( zJ&ZAsGl&PgDIwub#Sm}lmh#i4-c-NDYPDYI0M;zpl29aiGL^{!Y{FetQh6vgE3@5E%=Nq|t}l0xU8GWhL^QV?=&%o=_G z+`teh>b&wLiEwO7?n6kX1T7e$dL7;B7+7YrI~O@@C!S%WEmqoS^;TE%?%B=z8=$== z($lI4fEEK-s$p>~9I2pOQV4)YqZny)s?+7Dl^+eO^b=bnf)v%0ld<9B_vhZFCzp@C8fLl+fVvKr&k{VjKVj|=Yt3Yjd=6$lDH4NEy< z4L|SUB`)d3zXr!U_Hx=_!frEun`b^Exc5u{H12f`wAwFAVL#Btx-$=dXxVAV57B?a zUMnjrYo`=U97my}6@FXhV3X8nWaBQdDk~#&5tc5-!@Sedko_3*T9|Yg<=@x2+eLRo zvvH4lC72*cFBUGcf=(fKmt$92oHCNS8@ub(dgN*C0L3XDL_3Izz|FzQ%No z2xQgGzCOj6>^+NcN5{3frIm*j$tdr@Z+`p)SVJm zkd)q2i;lgwwm-bb>UU}4=ZPV(lP)j6NNcO28YSjLjW9{??I{$RB(r~PD;k(1wx4+o z+i4@QS8HXcJmx^i@Bj{Qyk1ox)2s0B5*s`cG)V{3Zf0r47$lWf0GW+u7i_c|r}+?N z278-vNZo`aE)WPaMA?eu(8Y>i(k=ry!Ej z14m6MZTBh;wPryU_LzknxbaaAyVUzs@I~6h5=1DoE_C$H1BhSXhk)N`n(s@*l_6_+ zhO@;oS21)eD_{EBD)gI^dZw9<4QHnSHG*SvN4;;lm5n_D59<}1?!_b(gOK|T?fk=H zS{FC}yLtTF5puHE%oXrfAxVu;|0jsHIwvGLF}+Md=?$74@zA3ijomnO!GL%lm?mZX z)l*4K#w$MbkQm7xJeJT;R=4?<)M9ONeFPI~*jZe$F2I=jGR41Euss~6)5hQ6kVZEb@v2@2U=lb( zQNp~Mk8D-@M=`z3jWI0?t5kXgo_hO=QyM4zu)zE*%V=9czHzpDk(1B()7j~ue1Fib zf;o`xYTK3j!<=iopR$aBAqH-iA}k{p*Ar3L5F+1b%t|a^@FEhzq|yGzE8XTL`7gB? zpoUzOo&4{0pL(XN6~bA!d^i&2RE7!XHD&jWfZCW^4h!h3TJv50u)$1xdq2{kj|hjx zJU<|{TfA}-wj5yuI1NeFzI!cv*Ht$+^ME=2(BzyTUz2wh>*1(FE$ADOBAs_yURZ|I zBeDNohL6bEqDzs_8bFkE5;iwmWIP9lf~cR2XHwPKJ2e8UVN&ffm1QB(;tY(IjrOq?D~{;t(^`0dD&9nA5)kL?9i;IMphK5MCD2HTcdwUC_e9!l&wbzD)%e zIMG&2MgFS`ZH8Tt5Xh zNidxbY2@m}+)k@|`{EPd-5%4G zIvl+C*RV1sIy8Hdpc3yi!rt7aa;jOL1duu+RH-%^ew&_Qp}eSN$fT7|kdDxM7%el* zLm2GzdMwa&Yx)WEk+d9%lcYLHE(#HBXazb@;u#|1nSnq{#J%?$HHSK=v{Y1cwTG)( z15*TMyNtkfwEfr4QGwAxVec(}hi5Je{PPYuT_=^F` zC-q5?QQ4u$lsM%>P0h2ZChmd9AX0k{Vqj7~k=mj7S(Q+PauqFQU0vQkfOR zxtBFx320Q#0lMI+a>3L5lQJgm_L+@LO6fIoh1&N5t7?mq5R>`(5Jj`~BnP7yTxK?wx}zOq*}8xo|DXrS)<3JZGj3EGLn z{Ov>fXS4Rj^PYDt&jzL)9UWE;<(V2BZ{T6u8jz4ukpb>%&Pn7qa$aLM17f^r)zZJS zsMOuUHUzvjV9Ba`gFfn?HV5tfe_$(NSzQnau*Q&*m+?fnK~4Q>VMOJ zoGrUp7s%XAG$(7j!OgKqKQe5KzaR z!O}%@(RJY0mS*GwKI|ePc4GUjlp-;{6o4+OE(V%R8XW@l;s!#UVH^7h%C)#IiD!t* zY+N1tKEY>DAr?Mhrv5fe{nO$AK)|O?&IP1X{0{XU&u zGr~Wm+jYP}QqC%u`fKF&K4E04f4>>SxQKfB`_JDFy?asjOyNSZb%!{`bw5~<<_;;7 z;ZRAyEFxgJIQee~@|&$! z$EbHDi%y1wtD7a-@6b|~pCcT%hLz{nME%&*QOE2gQ4dLtAj$nP>b168 zp_uyqe${+{pEQT&^LVN7xS~GMfo0m!o=kP1$_ox52holb`$?n83my04T;E3ahnlk~ z5T9Z4<@cL=?2dcyI)c@c(Vu}|+fy7|jzaF2`6|_xP&{MyVI>J+!-#Pn4>v?Lhzu!;?vXJXe^Pl}H;wS<$Y+TLRKK+u(0 z1n%X7g7=$}6$JNY@2$`Ff7hu6D$;?SB^2|Tha0y;`LomS(;P4Dt9|FH7s$Iy>6I!X zdR3P4WW>rS%5$AU0vZa~;o^Wv$OI@ORVwbHwIa5`sBF`YEIMJ$A4;2Gs<&fZ%DM@C zgP)n{99Yhzjkr#Ia7rZ88jAZ3L8HAhJp?RDWGcd^Rw?7+Etz70@@}p#2@6n7Z4}W6 zHbo3`B2J`KOsJQR_dUgkpZ)ueii$SRx;NAAV^XO-I_g)ycft)ZreCxk!i{}ee2B^P zqIVPr-JfbZ>WSnbW~!i}xYKX3*jTKT(5rt4VFTNNJawV+p~xEXVR)4M6^3kVC@ui+ zlC4#1zNjmVCt|Dd1O8hrz`p+|ay6tN zLOTKdd@lC!)KgI$@bS++BhA_ue2;1bq2@D6bB=&Advt|1B$CL~YG-3yUsU$v_GmH< zJEm6hC4t&~=gvLUTxi=~Isb8ITyopQBYipwP951i_qquauPc? zmA?(%l`U8KA``3%(yQ#nDXh~azbF#YiC$D?u&0tVysCe7h>CDc-O06V_rZh=n>=@D z12jeIm$LoI17m^F@9pb%v--pt#pOS_R%O z(@88ySMmsFjd#02h>fZWf)8^>Q{(h0b5LW3Esb4*cL#zXC^k)xy2DGCytVODuR2jQ z{s`|^6W5qny&pKEk~u^#i-}@=McCD+As!?59zlfBva_r!r6e8Q^p!tvZn?pd9ahbL zvC4n4LYND55x0_X7$aixx_^Zlr}?iE_e{5c-uoKiH&uhCU!AkZdjdf~v3=a&$ByK` z3PgomDG>wd1TS@RBa{t@3KbL~Dv}%Lz{%u-=QHo#}L=yUHtMG@u@wb-?dLn_aj%YGmurL+cCKVPTA&z?i|3g zomfS)WER3tCL`=PlIk0Kdx2XxmarIa9!GRaW%Cdnvehuj6@&ePjXHJ-tdiCWg8ZIx ziy@Wc1L_#7{Q zN)@vd`1@ag!}nux!s@ZGTv6P>3V?RH z&VEZ-AC%0pd%WL8qVZM`e(9AK@UYQ!XTj36OQ{f|WnpLuu-aFRYwB@-axjrq73a%b zm#5qefM|thaLQ82Jj19I>K{{|Nn{gU1W`{SuQC0A!q=0;|5Pkg-M)zHi>_s?`_mwj zuystN+i5gC_gqnhQxCf7vGiDh`j|#@h@ge82s)21+-9O{Y9Uy9<>R(M+fR5$7dp20 zrR*~n&0@b+g*BXlxM#jH{ZwIrTsE?OhrF)Ob}jqNGnrM|`U;YL^4*G+H>TOi@6S2i zr2Erc?V==wRU==FL_?rB!&<=d{nc^X1>GfCm-xT^i;53rCTgBkGw(^{J>7+L2Uz74 z6+pVM;A%{~aCdW()GEosW#eErd}XlL3Lcs@ap7nuQq2}#7yl(^3DP+zqN0o!V;#%4 zHKOM?@ICY3*(!t3X77?-XqLYQBR-4@Ex6}9OG2nFLi-y+poq_!v4oA`@Rk}Zu)t(u zO&vCSc^HuK?EWbF#PUY!meR!M1zIS5!EW`T1CX8Kp`PU%D>oSs0zZ8R6lvPX9P~^M z%wsB)z9h|UyX9qWG7AyBd@$t-sjwl;XY|>zV@LbK^7+D>X4k#n@ z(5QqGt662xW*nbni7<22h%*58hn3Y0!ZHdtVdCd+i3?=Q%H%nAQm1Va3WgV|`cQl? zP*{VHP6n_cgZ~7~y_1N2J$%>OM zl*Y|T;Uv__Pod9}uL9wLqRIv%*oiy$89$5LX;f@JVphfK!H;0vuWqdb*{=P3 z-3B~ijZczQSk3a}^%#B?T&A6v8?(S;1M`q%pufr`5_~QFN5KLH;e^jE4I5DHUi4`O?mC`qL|9yr43OCFy+uQ-voo@JPodKB%Eb~{{_VOJU$2uCLZDrxG~A>?ex zb*D!8nIr9oM`=5|MZWUsm44R6Mw!Chbs0*}t7KepylguClgInDODW}sxmu(6yf5i2 zGQkZEAQ7|Ey~(>PjZ29&q{ozJxD zLNC&-E={Rc72V7Az{5n11*=&xqcnbVOLX!Q|MBnm`a|~FrJvVSJKT47Wk2g?EYG3x z>Uz+>&>Dm#Ub~XsN)eW+7YGWPv?j z<3JA14=mOc3*T(rQpJ=Ybu6|sLWXP@|-XDbpy-KY}| zGaX!yO&gkg{IeWsZJsL*SIfkmZrmkaw~VF&sZV@qq}p-Byb=J#`R1yju0%{$gjZ#n7zea(kU|eFttS6rDK5j zhPi138k;(=aAMfem^oS$UJ8G2;fqa8T_;QAQk4qUL7i?Ey{A3vAb>(?K6Ub1hH@a?Ebpt2HX*tA10+SI5K^&$1LXDX$?m~p-EulLP3d)kCe70@az63MH0;-D4JI-i?#j79Swh-q_0Qf9>HDoCpp?SrwL z->3tL@DE!~mGv*s*E8J{Q6tA~)6?twhkvg==nKgyTZrb4 zj#s#*BL8D&pG-W^`Aj8-2=&+~oyK9K0Tqra7nU{S7B2?<8a8W1pgoaDX%8F@RxRQ$ zg7f(g*_&}GUVD;Sr#}&nqFX+}p)=FSds;)kz=j#*>gE=&h_Xpfd zl4!LUCGJ+_%lLi)(*aJ)5??PpeVyOr00_~a6rzdTSFXs$9Qnco{q|l~#$H;{xByaF0^Q^N8jVciX^;61U7*I}V zD(yYP%D(;-+=3y`TmAd1S@oZPfBdn+X7|E?gQBvMv&4t|$`~R;;(0oCAPfVEeFXA; zDKXndNht@-Fd~mra?yr+ayMG>@)wl9XD`K*e;j)!56|MXW{#b#w$kbcNC4u>7 zOu4A>m@#}d2o<{90T3t5t!MG>S(dfHO4z}v_BMhdgMS`d5U^Y&_^KjR$@de<&?rT3 z#%x(6>O}XXtZ?41FR3E$&TMn9hZQ_Asaw1o9g&XO9*1ry+=-u(M-(K0-0Kc+s0Z~< zn@o|t4x>&t$bxWd11}AdXYOK(1uTY+v7AZQ#=7k?94Vn`>RZi+cxj)%gu40jFZp=s zgjSHxJ~YJU43tf+T-lYimf_@<3mi;?jLA-aa}AG*3rDd5iH6(6GfHLH30UZ`^XZKu z_4eYE z^KdlK+16s%(*L>c(aJEE#%v8itUNoC@P=#b6Kt}iJTd`w5UuJiLkF6LI%9|Jx z8%8Ju1x5v##$KOF^-QlHSdiGA{c@;9-Q@nOCgKztWrW*?G&W%pyd%1?XA4iqXVnzHQ)GG>}?b9g+4Inusd$dMZ(CjS!a)7 z^$rsZDQ04_2j^Gy&9pCc=+{BMce+IzO2$$xQ@IaabP4(|Puznw>(i@Kt$Pz6eZ;Db zH>@l~8}>-${FHP4qvz| zs2cjP?-@=^#D|Q$a&p;-Xn2ASv?b42B9X{0zxMOZ?43r5;db3>e$!!0 z#+KyNQe>As)DG3UIhU$xJuXdE^}-G(T9wF{zk!J5vjk78|CV{(zI*w}Pkdcm-DDsMpRW`G{Cc8lK3_GLn@%&Aaj%#`c)OHF?FV2AsQpFx zkblJ|q1bKvxKq0kg-D_s59;^V#DrjK`k}fmCNRC>W0|$X;9ioMw#t8f&=yM;|;95LsBWoj6H(iEt*7VZb*Xnp?{4bs`?a*Z**cz<8Ly%9bb!oMHM z4iwTyGruNV^Eq=Y*>lvXsQ6L`SUis{66D8tlL9YdVW55U4lJQ4UNmbRCR7p8qXTY0 z2%!aOLU%6#(auk(*IFuziIb@;%#^>_ssG6^3HOkU{WFPKWPd1fH-GmG4o95U0>%%z z97pY2U+@)6W*B~Z7q7R(gHUe3vxE29R%hffSrFo>ASM`8kTv&B5xEC9eUfwvV~_D( z@N4AF#tQTWqwS@CO=fWcx^ae6rEpV9CbAM~T7Qtr5CTuFlxPQc!MFXi(a}c^;FAJ6 zv`h6e<*LlVVFAXxZb3I8E66`zTE*H&50og3xK@IHkQJ9QM$S|DZJ7ZW; zyj<2q#?R8r_e3Nt$kkTCL}Q!9i`KetK+*IS_dgy5Sj44$5c+NFt08DOxc}xu!bJO4 znYhnf9u927pe@Iy9yGSK^|mfPw9^`u)HsSl!fE{}pVkwv2mTwytBj%h=>?RL-6YP` z8B)4kAher$2@j8Ft#?`ydO}gcm%N9NxI8&F5J??yw0WHA z=ImMN@i**d$fiH*2| z7nJ4ORr5Mt?n=&oMM#lVsRuAmqDM{fIz42%>7GKmxq8wGA@?psB`>K4J{Lep21UKAeoBYp`X>sw6E7Y#CgdlNze1ph|4((?R{!o z#z`qi=6MaL$K4=% zYXn6adM#s%CyAt|XzEITp=YQ_C*^@K5KMd`8ZE)+KC);Ck^A*EKI5&^ftssyL^_vI z(*{E}zRj67-Pjk98ExTueF$J!RX}qK5o{+l89Hb|5kQcAuoeZMdm)cBf8e)mJI7Wz zxuZTxpyR701`vee%8gnsSJV0;H&(2L{?6!#tnGL%n0(osJ5?Vt9zE&9*);L=jjz(E zp0g7_IlBbY5pceOR-X(}<^LJEIIgoRM}oQ!p85UjFjjxjOh2t(VJ!N}#@5YZ!DXgtg9Fo1j-_$(@^owaH&$Z4427rC90F=1JoB zPHBVke<{Jq*LU?^q)yBmh>~b6L6?l$L_eAT9!by8^rUNjV^dnV$BlzL=mlT6yy57x z{4H&QI5K?6=gF;)${}a^%E&Fh(>tG(<##&o+G@$2^EfX)2ztq=X`wZ2gJg8xpbM~7 zAOs5lf&S*A{(r%w83{dbiZ{O{oTZV+8j;Fnc5DhF^LRm+a_H=r@c=ApWFj7%?RkO# zded+pR$ne#oX4K=FlosGr&d%C+wpSzdWv1_x0rd!!R)SxzxU!_h6M&1)7(%};eF3U z;bDZi?9vRK{AyQH*X%tZYHBA}rKT|Z2aRs(`}X(Q+@U2qDBdq|oe}s!k6tj|`*(lz zsAVC?tglbL5_>HSDY-3hCZ1kmMpa-Cvv~hBFOk?NXia>`SJ;6ZJRt(7dd9_h$u8Wu z;_jMBS*%asIIuQPJiGV+Ac)XV|ad}NWQG$E1zbpGf+}Xobg#3QpmjX!|v27`f~PX@GB^zh|z2B zoI!RO3a*mN&Jry{XQ~jvYYTKJzT5O|$b5*4Iz=x*hS%;DZuqUDw4#cxTx2&%jtup; ztox|g|7lNN43jd?y+y!tO|MT|Y`r9>Vc+lahu}Z*6BqTN@5~4V-tWr1bLS9Xg(18W zBX(`cA}U<{(Qt8h~hZ57B%|JU35J)K_M_}{w%tk z`#@wVCKU<0f5I=+$_t%DfpGJ<8inGIOkTLsp=JE3kq(;(yvCor=_v?qxehqC^Yx(= zkxVb5?BCJOtDnY8s{q-loa&o35^oIE*u9TOg=){8?SZ`CRPiRhdS+`v^ds%}tKS;Y zD7TsodveA$>>3Njc>9M$hZ1Hu6z)do`v&rUJ=4!(lpXi!P}vTzg2U7VT>UaG6}kXcuD)uj?ZUC6Z=f=-Lo{6G!sIT_tIY9qWC8?$+&& z%Ysh@V21OMob#KucRg;e(nGS1LtpY9?;OEV97Qv6su(J-k7Q?TqUYD4@locX7Tkf) zDMCaUb8^>53nf97e~Y4MeIJXIZQR7}a)#`;%*|_9={}GN28tR2UA(rJDO_C68`9_e zvfY72?2_1&@RY2VDqbPV>}A3fz)pj#S~%95x*ND8W;Ws(_uHRZ6SosT&7dQ4W|f=1 z{DR*#_Yu|6iB1+XqNr=}MAr2Qck~M2tCQo+kU!rmG2N?R2Y&rqP?AxD{TCr;CphN-Sah!IfD7Dq#z0RAA z(?9qx=-T7{J;7KTwi%O&>%1L&uA9}wC>5X|ipczNI<|7IzR96*-Nse~ghyXLms*oI*l+q_we`H=nYE>2`ts{$JqIgFUiZ$I)Vr2h z?a~6ZE9GzRx;bBG9QIjsSKmPN3UM}y0sVU58ey5ShQwaRCGyXWI^IA!KzIcWC_g`z z!fK4KP z7TjcX{cCI!-&!i!d4Sh87G=A5ga};!qZ=gh; z5@-<6%|!UDQu5liG|}01gXBnt%Z?l2a|@afpX`!KC|vc%ilhJjQK+Wy7 zOW9xs+t8B8xSFr39TbftY!XMuQKL|=04KB-vV6t%@NK)hi&4O*%Gv}1*JEw@P;p-% zBEp;b6CD+IEB3y0yp8|Y7i>;|gwe!BZZHKXe^wxQJ(>_rfd2I3ULrIO1E~Euf z|Aj3!SpNEZhedVd*L>t8Vt6ieRMC>Ot5fFE%j^5kZuH!1J!{y@2z{mvKSXe?1cF?1 zFR6cz{aNX)FInPbZTB@AbX}tT^HN<}=(rM4zyaLw*%jIYc(B&5_e%w6&5cP%=Bz!a z{rdYHFH4-=WgT{_X;u#Jit!@Oc+v=kJQ8+;6W1Fe{PL}4A>#?uh%czROdK61x1hP; zsf--lO)MPG{ks}^J}z$72-nyyKCw%LbzFF9y8now8jLv4v!^Z4^<%pW<&a(BeNIp9 z9t3m9139tQOOI|YXKS5)92l>E=&m}|+Mfzo z?Z^h$qt77526;JvK%bKQJ6&c0CI!XpqM?wT*0*SdlwtXy=c8hEGXZ_s+LriW>J7#u z$Az>PbZU-dUr7sL_bQEUs^MjEAqDc;54hkCse+kLVd^J=#|Yu@()*2mluc z*&_#ll^XpqbxxkqF56E9QT5t;-(sqL#MBh$D<#TH0Z0tl6Tg~csbY0&acpAQ@bQ+( zbg5vDsK7;>z|bj(YqU+?JC^8YLaTN1CK5|8+?X$!dz-d0;`PbYihl;rg(gqp_o+OO z;Smf$op2ywrbr+8t!IfXtCxlkyA&ekGc2L|Uw|Vh+i8`!USJN#vI@3UanAR-Re?n{ znEQDZH#;vvH4cyg)Ud?DCw|G#ybpK6K3e>`h1hH&&7hKlCC0ubbZakxKjYFxXe3%p z^g0f%5KzZbJ+gAXLnQ+GO1b5Fzcuq6)k;Y=vx6C-$%v#?|8ued|>W3l#_?B z4EYHha;UgS3RpJq-<$p8NbXd1(UAH_Cg45ZOa;PAvYMBH_MpUcay>S9K;@NyQn)N} zL-mTe<#6f0s>0Ip)(?I*Z4oSJ$w-=WPbY*3fJGav!wpiecaL0b>Dw-Fn=~F)EBK$hsyzAUFPgSp51#?cDZ~0pmGk zIV!Jm zLSGf@p1@0GAnOe?*o8BH&BS$bMqhkr7%XdotsoVa@aA5%r;i$L+cmdCd=IdDs)ZXTh7ivCc%D#n< z%P&^ZpcKFSZ67cDHMZ3Y2y!Jhk<7wtS8vLw{%c-@wg)5yFlLI9Y%Px5kXfG0OKu>H zenoxjDW`hOl!d0pTvj)hX}SQ}^q_>mV9C!G#fV|x@0n?A9E&BF`ao6`CIuo3H%AY;K;wzbx0xiGJ0nzYdk&Jj8Iul4KJcOdF;F`}4aB2d zh#xiZu?JjR;LRr0e#vPE%s(Jz?Oib$M?!qTKgYWuAr*i348M{-NGjg(Bzm}>hq3`t z>d(Uwa--wBK3RJ_;e?SfehLxMGQFdR?Y+xYi;C1AR?+80A~9p^xQl<#vr}@sV*ZKJ zi67)&R4E{^A5Q6;4-t?^<}mbp@&+s^wy<)OK?$g)i>urk@h1#4aRHPtCxlHuf@4^x z(dD>A&e@pI!$HLXC6f5(ir@P@ZvmA#uVX8JOFng;V;bRE!rZzWy4K|<6D#JNyalD3 zlUDiPQswa5I7Q*P_VC9*P@9?BsuVovx_!Fk)WoAZj~{m||2|i)Qf(ysXDM@KLR^F| zDmVibmOxzy3$bs^D?GjA6v!$F$?ghB&Ywa`(m^uPq|?RT?{#<`&^5Mu(5(a%wCx+9 zaK^s<`aPm8^+$9^;`f8}DU2;S$Da^7-;280kUPdhtcciYRbLmCe}0ovci4XeHlPe& z4*462@hvdB?ToY0Gq=_CZRXf_UB3!RCeyPTvk!<@YM4&Idn}>VWw7YPJhcBL_d#Q;B3XK+RcPKwdM?!BJaRN z1go+wVUdq#2$(c~Wqip;fmV>x{g0|1=S`-&#*GF=TcMNosfLCoia5%e1zV>JVZLqw z@yS^@u8#FAL?|JS$@u7I-gD3$@aVKvmkgLueE>UR(uH6!DN8Jw_RYNhj$)*`*e(mbz2neT7RbfFe}m;)9InxxwFB> zmnJdyb#0yfyvAW)sHu|B48qdM$r3O#pd@eFKy|S4X>z>*G1rBmbFLKutOH0X$B1O~ zXxFgWjcnd}^>}8IiK%znP(Ri!4?MBfe3KW6An=bKE5&bEnE%-2j`g_j@ZI+Q`_!_} z=~jY(4a`;!b4h9A*TQvx?axbo5x*^mUk6XQKX|>PQKm}lh$JLa?u(~dvF5%&rhcW_ z#l#XDPYP3HcKZ0Kw;&FIE6ymDm}~eJ;VkD1iAWHF|ibhNk&StmRUF&udxbA zv4Jy;6{RA)Ys8XfeRFsICfG}EgC6P2^}!V;9oY;O>p|HY=jhrX&bEhUUF)VOzJRUXE1({8Pr^{8zF5i_*qd$vM`=HxRA7 zo?75AF$OpX2bOX&G$Dp};YeI3;ZOZXT**SMFM3Z42!;0HbZ>+gx%7NjX86(k@WnIy zmW4J?c{Ak#$IWf1kD@|&WCpPUxV%kNl5EkL^`cU% zmhjvM6{hGEvLf0CVq5ci7=p|}P09EL=7JwFa7tkN_F$UVwm|}W3{*IrcpREK^L}0) z`MvBf9z$zRFNpyNRg*?GR~w4keb;bfP;O*7Ums6!D0%U}@z1$MEr`H#pO};{lL-E2qjqA6^Jg$c?TR8Y4wu5JQtV%dFm&hnKBAoSuZv@|afZQB6+|N{ z8&SJr;=xCGI;K66dH4$@HAet8z+n|dc?6%n>@X@>`j!byaR&rO z1p%_!r*d1__5Dhov2?s`>@xsh6Q__mk$EDH{;fN=TWNaKSEMFBJgw z$lCmnP^F2f{e13RuL4x}H(0>AzsLD#iUv0N@@bYrx?6bri;@pY3J$vxp{)RYnMN@( zJ);canRaS9IW-}7?|rEOzdA{=?hE|U47cZj&7Y_4+yiVaK6JuNF|ad}dh95r>SasW zWFEY5jb*65u`dOL=Fl*mx^CC)omEdlqv9Mq? zRJcEWJ6C!t%b1qp9x#r=T$HaM_W3bLv$j5w$hv16gY=Snpc#_~Y5EK~7$Aay>?1?P zTdQJ%a2e~W7bLlZ4h(%?+J$>Ug@Q+NOU(elS%q{&_&Bs%V}dJzuIu-ClZDrD%_(eA zt&T#u66Pv5izS}qlBQQ~6{xwfFN>#%sd2-m%48tq@pf@EK*N%|V(hH?Al!cXeY*CL zGaOd0v(Ek|lxV47kOF#^9W)Q|4UkE|&D|=-q7nmXsOr zEa>=)n4L__LoSY-Z@YQLBDGGqg6I=y2eRU1<64Q!Pcq${tM56tqW<7xsIpI^?qFy83=R1LCtM9;mi|GCJ}ioJ{at=jHUjmFDH`>nJ90 zNShDG;K|CkgnNykFyRuJi9NV&$xLsrYUtOME?b41o(c6#-++upDz?1|BH~fM62WaD zsBA))3EL6TDWF6YGdX=PY-<1QBEXH3!f?rw#`kTbi)72tZd+os^05#7S>E#~2i>45$0jsC!Ef7>;kDDA z{1N42ZN|6nTM*FrG7>Qft259*|A+2iFr-Axsjw?N##%hQ!jn3;&N1q=FD1WLA&3|a z0P)oBwqvL4YuBxS7)G!6jd(VX6T1tcg@|Hme#qka?%>aIHNGxu`v8jl%H-<_}s3qs30&zehh&%@MKphiFX zF|8@dHoXqX^t8Fq`dMPvke4Br5S7%84us+>C90O6&0Bc0y8WdxSS7bg|JWYi$%d(U z{MV3(w637pl>Hv#zu~tCQS-%s@S%+Mhym`0*k2c1qW_vG`QNsEI|>p`*Ok+=kF4Ne z_^p$GL=px>oPg;DjLc4N*ejutcoLD4Rac@NNgW>Bg_3M`!zl6TN{q^*K2dJ$4N%0v z_NzufOvqGXD%FucjhUMNrN(@ zhiWTk#!uaTyP{+w3DYni5OA08tu`^Ty?!|Ae=s8hN7EybH=A=o8^zB0h9-0tl z>%VOpFYP-`#G5pNE$6*1HX57svELg)DZE4GX%UG7$}FU9VF(`W3WDFQT*$DEq??l;vc0%eC%#3ZFSnH3CyNz= z;PoUf8@%;9_w)_K{xj{s2^W$0?I+9vLF(7{bwVT#V`U1BI21QnW;yFHMzMYs_;&Z< zOn5$dEy4Yy+^_|$+w)Ik@Ldk-53GE4Lx=^DkvDt!DlEe4gA!kqhco(&|~{FcGkzrjBB z;Q8&d@^Kk@OZc2XndB^{)P66WU{wff!r*Y#eVJ~W{V?`=^dI{1wbsufL+hpS2%IQS zMB+}nz%j*cIf+$h#Dr1`-GSzvYfv9pVw3vpD3LZo{!HFWep;EK#cCd&ZA$w_Yg#_m zA?gWzB1j$R;OjZv{NL@4qSe+d7r`>oU^{(}y8r9rzvH1K4pBYRt3A&aMOa#@dlQG$ zstyS;?yNK0tF>7r!=eFNz|}?(%mq6X{Zjhu8m&@hgSxGLa*M$9j7TE=nh%8%m5HM8 zPx*4_Kao|IeKDOvg8V-lhoOKUA+>xm-_-qOMbh75*=#tiuZJJ{0@a#5Tu_W%>Qd34 z%=Yqn%l@ELaySvRX;AGr03|fOrOuWMI(xR`t9_)-cQxJ6EkY2Oi&;kZ5T2#l05%gc z1=V$df}T--UkPD302m!gh^c8{G+wknaZY(FN>I$4e6E9}3P6+44-U<#Xje6Ie_^^a zWcPx|^pBHx9#HCdN5ka!ZFRwnq{d}g|q_q^zV52t;f2T$O<2cysbA?homqTau+ zXK03@OFE=Gr5jXw=q{BQO1eQB0qGuK2x*W8=|%*k8>G9DmVD;^?)|T4Endu8ygT3X zIkERS``oG-PrUd*)F9Lt6Y!Qi;?p}n8!EbIBxyC2%qv{*Kh+SfM1jqi3;t~zygqd| z;rhYm+`^8$l$+~QC(}y`Hp0Xc?f!lrhUX;0vg~!DTn-2+{%ar`3i(mcxQ)apg^i{c zA5~D%+9QPA1)QZY);mgsnX8YZ@0Ln2E>-7R8-McdH9te zQOc95yCIWyAM@{Tv2i!kJg97%Y^!wAVVSwq%3k^%z001pcOOK-s&weN0%v&heB52J zTWJ}QzMQW{wxet-U`SJlqe(qXv-CuSy8-$Q04evT7v}ZKZ_etObkWYSpj-R!&LC)GcC76C3pNly~qr(gjpqC%)+QJ*si7hX?d2@}# zS~jIaT!O+llnZ2@36&`ID*S9Nu9r+}2HCz0f0I`%55TAXNfwzi{`7kCoTry_yHk zAcqal4vA1=#RJ-7i0nU84RW}rpFe*#w=;o;)zp-wPN(Ui&XT73uq939(sPY!kx?M) zXgHR5h~|k;!811+q0p-B6{Z?(X1OWyN^xj6lo7SqGC_PF*&oxt`n}Rw!Hz5tzB3s4(t(l^ zz87_d5ZjjGp5sM~d;)utXex;azC8S9Vc|l zImI_PIAquv3qu2GrW7_bhe6=+Ud4P|h+s^ySsLXct5ZN_OYZ=QMsq=7F`}I|s`h3| zJ&R=n%)F?jVMDqO7PQ1`WNrsjuu3Z;#6}u0BhWt%2B3NrFPr1J(V&*-2n(lUZZ6|@`=@g~{+YnoKPXK2?Hp;~Z7|V7#W(3+1>bGAMSfl*C4d3S$wYab^sY!8q z_<>NtRf+G3nOz20NT#Vq{XtMcbu!osVFjhNzC_8sv`OP1>zIT(#R}``80rMloVf$( zVECS>-djv~WfzCfDTgsD(Z~l@nPmK+Ncb4WZdacLFfQf7Np(m%ubm5L%Kc|GBOtlz z%UJ?FQRMhGa^>enFlnhyOXXct5$lw~1J2rqR=>FQF56CKh(|nAz>S&Slc;uR?D6~7RzX8QLe#0ax;x#>SY7kt;1U=8-~1mCjijS(TTxoV zG-IhFW{0Kp)J!iz%(k&9L0mHdA=}OeY$MjoC{S6j>?{KRiJ0&(GdXK&a#}07M;>|0f#r|LQ*e#Ttv-SU{_bu&`b1s|gsYYmMyr+}nQ-dj1LX(l8g2`H8$se$2@ z5T_Qzt~)4%rARUiOOfU%8u8-8{}Q>8jJuM-cg8Q81+1s+((8D7MFgC^&cD*~B$-~+ zmE#qbsJ+_PU$A5fOd%B?yio}$DPLif`Xk6)-GVOtNTM^ehMZVr5-EeV{b-NX{ZXlbqUW>w-1@?DjqQZ_Yc38IZI= z-lAhLxe?FwVz53Y?wck7^9z;V{??)eAE;1Eygc!btN?=jUFbk)VTCMXJBFBxW3OC| zp1HyU)=>)>!tuV6KhUrrac@w}8W6_bLDCx(xuXP9Xa6c9JmDUOp{A7PRBA?e0yFB? zVcvmmSez!$4XH|TNh$8e4e9xt0zR$-Y|F%}~@Eu4pdapOzq)r(iIL9P2C61%+ zs;}vkKZl?DaGZuv0qW(FA*_5&L2b5k#=x$YM*Lax`++i}#MPq2nv%9-&uJdyQIc%E z_YE-}i&m`f5#r2OO&`H#{d-`ResnPV)C`kIjSdhgNg=%C!Y$kUZ0pTB6qxBOgm&2b zWPGQ));`n;J!S#j5(uC(G=Y8CWdQI25by+BdPP^yt zqW_IyYo3rnR7CFC{NM6)b7}K>!7wo)u{294S+`9q1CD9w>}-$FTdt>I%f=~*s^<+X z%LC}B1ItLTw@RexqOGsjYCY}<4bV=a^SXpnOs9;C9YK` zNGz$cd*}s7;!lb6ay%`YAyV-+hAJie%!{>0qds0klg}m!me_@v!gNDKQQm`gPcL4> zl!l0wn-ZB@Bq++L>V!QLn$7Y97Enz8K<@3KNqQV**F9vvSRGNbpWRTB_E$-gzpOWh zVhi0#q;9?|9)iW+=;!ag_W9DaWt|d>%||(pVpF^3KC$~%!=f!Y!?$~en7Fb-HRgOj zyCpyMwnwn~VoAFU%H)Jy5V^w9itBVg~(JtvZatjh}(0FkUTh5qCt#g28H35)8dKAx)q;T{w<*X7)=*@ zk&0aPy>h9oT=8lt%&wmmqPFE=eKsRzh5mZhrY77jbrQ=9M$!)JMVi6kzmQVg7F&>h z;$UAF90U;i#Ap1>R1?SPUr(s!{>$_`?i(`R=Xb0KJBM2SA&_?X)r1{aysjn!;wCCf zMU0t}%Mn_z8ln~N?)`BE!-)bn*6P172T$>(PQFbk#84kqw9Gvvz)_7hs8cSrPWl}X z=$+wZ;8!uF+u= zi`-@b=J#o)Z2X-ty-DZ@916fKj0%cItDx*eHuq<@AG9S_J?B{e8i3+(Z%5aBTrn??phvJmNdl=SOi=!JCS5o|Gal;|&5%=2%O~mawpf z-^xHUYl@yI2e}W%cYp6AFaiVzytH|IVyg*DQ+|EN{bDpuEn#Kn$FMu90wguvF9N9T zCV*UWj=`=iS^=@d4I`&0Q)l+V3VA=?HRL(}yw4-Rk9q(IDcQ-DfY@S&g(xOfFFaB% z5f4l=gff8CF*I-T62uP`=84?#Nd`0m^Q*Y?nv=`blx?_*0_#zdkR~>ZtHx770ezmy#aCjBf##q-WTBqSG$%xdVrqX-kc#-AsW z1RK2!wwbSYjjo&Xz>1}VxdB3YI7RLdy4QU}(=t5)2ewH6GoqPf%13)u~ zYXC7;ib0ydD62Em5*&p53B#9OrW^OBF$vaEB@9R{DCG=^g6+ZSmx4ZlCvxie+zSDX zc|!uups9DMTGi>Y^Y20#;L6+Y(+VU9*BG$Rx7QeOFD(y}rnfW?=G+vNa8&pNMz&3h znsrsQ)3|C0e%qVEGv#P@Fx1fQ@NV9-b|(VYG4(>}lH$Odkpp>`K_5k{;F(+{w2Z|D z`Xi)*Rc6!1gtW?77KU{Vq}q=-aJHID>&}g(Eb4%`$xM=b`wkBrQ@G@%o_3b}TLCkO z7T0nHbNXsz`ari0+1F>auhrA9WY?kTJyUp%?B-%8@GoSc)&%Gh7W;CZno6%}t1dsx zlm-b6mSRZ>o%q{R-Ah!rZeHP{{#RW2wmFx@3+xmmd~dOfSv~wno207nXwo1EfhYJE zi_=YnJQbg_kg~7p!)N1t{;Ky`!Psh z3#J`@E<{l_1#wUtQS{L^Fy8CTCpcwvyzXYcW(q4ltY!hZf=K9Sov$$CNb3r2nwc2W z^T$I6qJ;%Gqq35B#xS=!!W-QB_ZZWLaYAuuK94%t#GJ_ z_1=KHe9oS{3BO%?%Ht6_&48a;B(q4oYRc6NEc%=8Svpz~#9W7gXi05G^UvykNe-<+ zU-oGA@f=BeMNwZ;D!#Z3Ex-v#f(RfrZ(ILZeQ5qb?)kbOuY5*@-URawJ@{Xwuv3mw zM0PDsijnm20<3kF@gZOIG3f9cdtT4 zC6ngtyJr#Rly`DbY}Q9(L1FT6&>Tcn1E~__lDITL>6E>hvQgBPJe^k75*a@V@nn*< zakD8AvQOl-6aYrNfsUc_7@+ktBEC_*07|~~Y(9Z746~P?R`CK%fb2NNbmZfSasENN zd)}vZQ^{PUy0BtY40R371xGr) zEWA__7aPMpZPy?qRq>Zw+Pf1Yo8zINX}{KFSMLR!ZfIjzW_L!_KGN+3dQ$>YWOspV zjEpW!R)L3nx2s^#e559Q;|7DoT-p1v&B;MlrLc8YD5pU=2zeV%6vok~Mj=0NxH zuH^DA*H2ZR8aW-3Nb@%%r5p4aG_oKFVm)fBhU*bCUo^pp;9n4Pmiplqyr?BJM7ggP z(Gfd0(Ug}*vE*msR8km0gUGA$+t@O?2B$d%MMV{Z!|V(q{oj7%M@=z&KN8^09QprF zYvdJxx@D-9w{GZ5MrO}pf>;pfuKGbfl*dICrR$*Jw6^7JYnF$>^D!VqaTHbEEa$s!~F%uvq-`oUtQUkispuW_M?K{uJQ6svO`dzCBnu`6NAU;5P-zw9|0NJXIOC@m|CL&;3JR|U$ZXgd%`VgK{ROoZ zS453qSF?kDdzGbaS_vt;tm-P~$qH}eO4$j9s{JBB+D&9-tkOD0$jwOZln1{OpCd;) zd(Tbgr&Ro918uRAl)O2Ed~-)#kgk7xLFlydmE+|?Gzhdy!rYeA|A53(-H3ICxqE`= zcP*&HDw;1lyos`QwBEvYlV?%YN{xlMHQ5&Egh#$shl=FL5msWTxD0*O{@?{8<#I=} z-f_aw_-DgTTbmi0lAQ1CZkgMs6;8bk14F)cGU6w{?nEv45$66IT_38+g^q@0n+i6k zhd_rv=d%&}bW_y!aCxO6sY;q&AknRx;^)^pZRvoBmGX!DUDUjKwdP+$6l`BhK;@pb@K8$t{nD|F;wUBI<8l?D5g?*qE%ve0HRk=lGQ#*va=-&} zirMIJCyoh3PtkxW7Q?(8JW%V{UG!4}1QD{JMy>ER4wChPMUVISsm;B3J5m@QDl$O# zO~pBC>nwE6YY@kJbi|^th25TOnIm({6E;H3d?`UEoOg5eN-N9U?nXMnSiAO}= zmE@u}mx~`T_8Fk^QWFgmkGOBl0Cb==p6+9U#%VU!e;*<^l%`2?2{imCB+syt_4om2 z+bc6r_9kH)4W>2Fl^RT7E)#=I&x}B2PZCsRs9FPldCFm*{zQS@OL>9EQ3viZM0l`> zxCFVkT5xfCfbi>eR&hJPr1IFKk(HynzR3Wprtd*&&Vv{pS!U%Yy#M_6zQ1xaXsZ{l zxyiiC_A}F3S>10^YcIq0=Y>FOs;^R#mW1UWOn7Yx3(LThdV&WF?)SGK#DyV7gmn7$ zi|Ndq1OS49{EghN?AMLRd%MRkMA9p(N!ZJ!A4l7j`jXy z7d;HOhHphUtf-tv>JH7{AG9-dZ>7Zp8+JAA6GT%{anIj%J^P&}J7phH@Tz9L-8cx= z8-Alyw}+Rz<+v8m_IDeMqaJ#n4c@2}K4k@?r_`_6iuDC(I0p2r!; z@wzUfNhZ^HCcbx|(!)=4x3`b4Ydz;&2=FrtK4JWykrm`T=$ohG71tU(klS2ge$#rQ ze?s`1c{H?~ii@iIwBWKpHZE$Vuf~v_DD$Uc7ww!Qrjo`m>4p^Kcm_IQUmRsh<;iCg-4M}ciCs> zbVAo8;Iuu+$aU`#oDXr1lD3hZQ54NNUSlJ&5|+T}WCIdu!MXUIU?bKOBWqu^w|Lo~ zgl+pdQjU|+1AczgfCnp7lg$FA;_K0H6bCD@%XWi8B-f&H&}{)&W61tp=}2mlUCN4o z?mp+LVL}jU>c1i;{8a$uyfdrB6@r6UpQH>4{r8&CD$o2>RLNkn1KKI9$sOOv@o`ks zUq)^8X%|<^6p3=yfVJ$7zi6s4<)7a?p9aDGB9_`qEB^qNW6v! zlEe#nc_9ZLN@y!cc>&Pf|r{27e@@83*1}I6Nso(nOR%58C-TO5am9w@{Ht1 zb_qlWzo@M1W$YiM(P8ok2-~K_fv7la^!iwCLz(p8U)q#!!Tfsg99%Q%E4Vj8*=S9;%WkEWfe|oRFJucy1U($r}lThF5T+c=lNubi#{M;`{+R%a+pmvx9n6084;(!%Sj$mR8 zkV*;XYu$$pMRd3;YG$s5x^5ndtlSUb>;u!y+E*|~MRJY7^J2i4@k$247(5(CQg zhvsvE2r9F87km1DaXdr9F#VHcz4u44a#7@(^f1)|nbG7!dj16Z_`Q?%&oBy}}Gs&i>1q)UH1%N+JbY2q?H>_#Ij454zjQRU&0HLBEJ0MWb)E*dV z{j=IhvLZMM8vm3D?ovTh-!;!@rqMOJL)2uASKV^4lJocrhu%HQyCOtO=s-*f&to$G zcti|tEh#>U!x9KNTdFr0Jeq z)+4+_=@ohaQO}g3%9JFU29=B$9aBCab%CqL55$WBvB7!swFyOI&H~3ok7+eHdw;C= z?o1|~%0J||FH=s&j--8c)mdlAi5T_}MvT3Qp&p=LSy#3#`s(MLOCwtdA$$})b;!_$99AtEVPxhvetC9xQ5JQ@-0bKz}qR0Z!u7hVQf2dg-pKNtkyTz7i|Mq z0Qk{jAV_ti25e^7rAbuPy`NjCQ|*_6)6d6nZxH5UQB6|$A&^|7YS4*DoMEdPM%R0A zNG}iuKBtW5(;gzr+cmE&r6CE;Mu?qd>5d!QorJ}tQqR9T4ReU4o+n<|^d4G179m(d z4#G6?q_4fBt!tyH#iEF=?707a)Oppn#Ub}vjZAUajy^9h?~c3kKiekEzm+^<|8pPk ziOl;-I}df(lg90X7nAL|_{`sa_+;M)mRJut%&_9gpH3{;-=#A+iP)gJ3k-o}R{xN- zmr@egF&3Ib2U_JNk`qVqGHf4k1;VL=nW?NTNWxxF<^%)6o|sTd7Bny*iJ%6i<5x#2 z9cbmpA!{`5A!LKrlfKpvFNBhoK8&twQl&_^bi6N_*~h+Ksf;j$$@0aqg8N$4{ISuc zn0Euk3*D6LT$wx~X5^R>fh%7c^+jYyVZ~o-mhrNtA7l7iachU}pFDMC z9NwMYwr-j2Ju~z%GEmgIC@E@OL2Ey*NwEy>w|Sa#IOFY5PZ68HatIB$e%(8 zS@g6z?0cfwMM-Qg{Dmjpdc}jcxO6+%Ycg`bl&fPvbbd*59e0(#-xh-jOAD)LA_#~K z7M=_puLF!F^x|Llxm3em-Elz+rf3%|Ki4WmC~JBiRJkf;HN0S9->|C-Wvql@ z+@fTs6{k%13IHjVF~Kvl8ayy2eIX}-@UeU+200=&ji$;mFVse6Q-m~wE6>XVv|ldD zmThFQ>}zj;LqCa`(9{L6`2-BO*$PEbm_-m%v~ypYd4ahn8jV_pgrBSFLO$cBuu21p z2-^?H$9w5YB4}=0J|C=?J5>NkA~-}+PIr|{CsUF9w*$ZH*};Skmt4k|mKbFbqee%f zvIJwf0Rg|qk~((RsCiIsf_V#YALM+@xkeO-;HePAX6J#`TK&r8%Tl#QM=yakEDwdO zEAeg7O%Y005~PhWAC6M%QwEZ2IY;lgoFXfPr2TLA7&p_WAsZYqnf!O}-nt;xC_cZP z`m}%bKbGeLI8n=7 zERo=dS`3QhFr)M!O0jr7R=^d)5WnoAPs>G0!tqP z*#4vXqFS)o-iyPh7>P`)^%K!h7LXc;Mp#rUrjbS%=rn90AN8o^hfhm3*xMsXJd;`ODvuX5ss zO8yfy2ytK_fUcbc>jAUngeYR1avAS$W`StR+#kD7Cn(kWme4%SkT zo`sNx7sv`*p#0Z>0s6VuYPTR)QWFP+6NpJ)?lrrl}ZO*>rI- z6^saptj?Tq=UGQU%=%M;CTm<_W>2CW!E9kCQXG>hLa{C2EV>2AZ$NfRu9XW8Mq*@F z3-u(rVVlVi7}6?v?Vl(X?HiO-Z5MOwLxDH+Zg<)x8%d3xV?uo8Yj6@NC1$)^TXdz# z%3Pc$RM+6!!5`hSSi4b${-N>@d&nnkwW}0Akj6@-;=r$ud~$?@Sr>M*Wn3n2NTx>+ zSh|ln8Y+{b^FcT&9fq1jHMo0FzMHiI>s9(#j}^>_)7m`q7l8rljVJW9DRSflr+-1K&OY||d3rS(sx~aCbO7(8&6!q+rd1f>67rK{3 z9;5tHQ!16RgG$pXS!n}0CFs4r7C2=PqKXF=8?ya&m7rP^O+U5sYQsX~T?BEt@>QiC zn?B`7V(*FrNd8K3!IJqd`wk_n^o{H9uNo=xfg5LT4;4ZJgS+&`gS+ScrjXgqR+PO$ z!$@<+61|N>(*xbO8+Wuf?MN(FN|8gFwCzIGnTYselh`#Vt@n$pdzmMC=l2>{I?W`i zvP~t11Xj6CC2w}nm4&r=(qFK+&3@>citOr_4+2LXZa&w|q7rZN)#ap(iwCk?b~5MN z9DlMMKIIsMVPh_nev zycM1lBx?sq-7QM%LGlrlEIRSsbq2!p;oEa#=kHO9`6+X6eN@6(vE`xs(j9N!;#aC6 zT#fEB zEGjkjlXYQg(mNxo^^ro(#V0ne_AkeN%dKdQ;T2lOe~kz!%0oe%vBMDGms!iCjo=xw9Qjg3+@VfG34X!gihTzfh?VjEiJ|0wQqeBW({Db0Wiu<)vvdauTEjslonP` zaY`FeA7-2wXy(2~p(IWO4~XqA4$3J0QVUomqp4bEAG3X`s0(f>)T!*-bktcFo!InO z6**0mR#YK_;iV%L+J#HA#vrOUn^CYRaviI{NFjUh6aj2FSiM*2?xVli9#r326g#s= zjo)ce$u;vz;0P>*>PxTYdo8BUKeI3Ihj8ZKe^s?TND*5Ta*m2i@gkRd8xI@gn#&%8 zFYq0iOG`5fO7gQQMe^^n|D!p%zX+-AQmpQA(0*TZ4Us%%Kl7VR!RDSW^fFY6LI}+~ zTbxP+ZVlD)x9gz_jCV|+IgHyN3)ll$KGymb-V~M9w%srdTX~0^uk`w!nzUxXpbkVuy+mRpG}~`+Xel4$021FrmnbshytI&?sypJ!AvqlFh#c8CGyx0D!bgzb1Vt&u1Q-3-iX6VHD z-c&jXZMY4D&L&d<))>ClPd`4M|Izy0K20GUiZ$jr)cO(-xy+^lX zdQ{l&%w+3_4(!i~r@g-}TQl{l!*nYhb{N}i5Do&x7pqW4QB(FB__0-nGJs&);Y)F~@J*JVd zg|a0*gj~>{CKLQg&^DdmAX8SJ!EI#IDbp^!t17OUwcR(%I$S(w-fb!PxU+co=~-JW zz_-Tv@dRRGKD|o3S6L||1k~1(k!%ru?gRAiuHsAo0rs>Z$1O9j1PuU)#gWx<;)_4y zH9O^mUNGQJeh36Lp3Zw4lB9$ZCxlI!&ydC7WKx|@O0~SB5bwr`=;_B18x>~7YY2;T zX6=Y;@1WUqn(%H*@CRBb;O02z^~lm4SO>Bez@6c;xX0~hzyGj~q5l{QJ@WAl@LZ1E zU9@MXI~=O3BmgR=YoIZEn}CCgP@QQUjTgP1F4$2DE{ANvK^3$Ws5uS~598K(r&mjzVCI;r?~Q-wRgnapPf& zcRf4mE6I}2%bm%#2QzI+|618-{1`JQ^pmGy4-MDb&W_1HdpGL!>p5ey-^|Etz~ILF ziIKm>i3CU`;%?q`DS&42XGIlS&rB3)=O?Hx? zi>-|tSzGNh7IDkesLz#w4Z+-4!|^ZDfb03BT_ex2I1rDY`qJpFxb!!BQCYfif}&)w zG9Qn#122K_gnttpzVDr#rYvsuJFt9hF3R_j5koq%SS`IA1=&`In^@R5 z3U1+_u1S)NjY=CcNU9}JV5WIKBW-~~B`ftDYYxK*(^9VJbwPz@n6E{SoPSw#x{^d- zX2rHxgVTZ0lV`{1<`pIQN@2y; zcQEAkk#BpNXf__iPJzaQQrq*Efj(A&RwS`vd|N=+wf2{#Bug(BR9rl@?urm2PjZfy zB;uP$ppslya;Q#li4IURvM0sR^~bwp!14Qwing#79|LN|F0CJ~r$5!SfpXLS3DI{2 ze<>(gJHxXbgJC@pDEgi#@`{%M)E3pehlAIY(hf)USY!s~EoVpTZFy%O#4nC2#eize zpGe@cOCEV51=ybr7g@;QAIw3;hfYA5i+QC(-EbDu{zq|>vFLk;a1nccwlR!!6m7CC z(B|Z@op3u-WeVa7kM8))#!N|*$?I*wa7M$w)?pN+eXd;L&7Ae;W6M@qy&hBIrc7Qw zDYJ7U+Vv;7SDZ*i-+#HzLo<3?Qw@M>G>bcD2@WJVkmH&$kdx>ZjL`|Epnc7;;bM&h zYg>?hy>2XR#D}Zg-=n2|Jm~{HWP|z4jjxD3d%L^$=7kY@_KmhMJ?GjiIDBQ}C{H*) zpRR8D?-fkaRNfZ)CXHAK{qUdc-&92puq!;~{^U6mK@+PZWwH+qNtZTd!W}0PJ8N^i z{IE2^9P6~c?8(IY4EKvjZ?Po1{R>2f>g9I>l2UBu| zHC&hul9{QS8`;`^wl*VPLLXxj59a^P0?6@tM^Lpw#BWO1s0$ui-&J(etqKXpw|_Zq zo}(rH$(3B65Y|FA`2(v(Jx$KgL+N_ZZ{6T#(CtLTOA|2Ub+_Ic_%Lb~yKlG^tt zA~%ZAoG?uD#BOLbl4fRCUoL~(q(|Y4EJR^?oWHXlpyn;fywa-U-Kf*~*FIA}7w7*xk|E>rWK7#`!JH$L*<;Xx3CsGb3-mgt!>B9iSWh^H{VWk3pZVzg=D# zE8pt5ew$3%CplD~TSV$?pC-EXYhvSBS|-~oa|rA#c#(~2>K6G2mHP6W%nL<>PdWoL z_YwtS*c>*1lZ*r*jMXmmPh)CTr$EQBLwQ?s(f3VkREk&Nn@gvG5q|7J4y#F zgA}@bp9bCbQT#nTSM_3h_uSWNU$EH}>`fy@db*tg_zc`<+{`+EwAwz5Pn3b`wml0P znvn|1jSECm6_K?mT)mnR+aYUH?jOITOA9O_^OGIFWR;nc91y?}Ey7#R`oSAqymv&_ zhcC>yJ%XZnVU1+K2ol!euGkgi$ZL6z-2vZz9$%E;)ivJpxBKwacI)eKOi5Tdb-2X9 zT2*4m#>%Q8)rZK!nuP}+&8`?xCuwr7KK}hUc3a3@>~GRpw-~&d^-;f5OrPq-jVIcJ zj^N(LwTXo!Fgfef0sdcRB$nV}ApBV#z!>Y~Y=tj9_?Nlnel&#(Ir*hGa<13iZN8X- zFa!%EjB2N&O+Q>P9Lugo)C%!aTUkj( zq~mqyksCo9kvLHxqcaJc5p>%DFzwpy?2)4)GpES<9zz;+nRzqgbW8$uU6BT*7;ixF znL`-0cX>U3q%pVtAQ)#nc!O(jjR>Vk4_tfLdldyJGHA1nj|N7_>^8((SCLz7?V^QK zlf~bX&Dnuve$Wz)OguN9y8_>6e;jvhzV#s&D_QvsD1x@VPYl|ZK!r)>x~Ewh1{Fd5 zY_of;uURQ`MYpng@JWM`e90%^(7s(2x!yHx={0R}bgc#BE>n?CxYqaE`nDLk4ffTB z>tDaiN*zRfHhxqor7)V7T5q^{L7ig+g#1kn#cxuyjg3nKymS!XL1|_+n=4L0`L;#s z=-Ge#<)c^L)sQ-7Zh%9PR8LV#x6xP=8K+@Vb8=@}vL73X{i&npgM`*L z9thEYx^LjETgN#mb`y0c3Cjz6Jy9WYT^z^SUvDmX~I0CcnVim+k{6SpXlgoG5KmSzksOmJ}jrw4SfaA zg0mlqL>tYK;Y3b+Y-@d%!jBdAA238j`_Cj=k1vPm&gvi9TQ_?yUDh(|UUTnl>n?iq z^MV@pO!-*U;+=wa-zbi*6AfC?@pp&l;dWm8yxma4-M644)~UFd^?kpUeYJ zQ`IRDi?iywiQy{0R>q6eqSB)3=viD&t=oCg81)LUYSMhKBcaTc%m4#@R+6w1@jgrz z9Hb>%308w5Wm#D;IMwR>k{T&BGUT>1k$FExZs@ZU@O5;~;Z95X;Os_;e>Z^0bZMT9 z>9;1F#dM+!Zdv?q`aW@YDADy1>sHmnU+-+0KVJevq~Ik6Qgd1~dshuTX1Zvf@PXQ< zI1dXrZqe7-ssQazJkJa`c(d&27}gkpiA$c)vBpzlI^a2;*T(ND*qfJ8-Ow2G1BRff zj5cj&e|jO}Vu?R{Zu4ic0ZQR4j@!H_n4eo3*5y&@Z1o;-ol15juf>YD!P-wIj9Bi< zA4=p&*n~&TU*2DeONVtO*~~a+C)&Lf4miIz^6YNRHU+ZOaD^wg@vAv5jYL;Wl7uro zil8~qFd&RtS!3Al9g9OA`A%% z1dMXytxDw%);}Ldv87=I)tA7Tdz9CwSo)f@iqpw~h0FCPB-H|u>LoAI=b?AMUPV4? z9|=%-s6bRVN&=ZYGK=uiB*F@QL!CNUL%I~-tbJh1!4fXp$=R9asz|#{)mUv0Z+t5J zv^*;@p=V%N?do=&nA~QRC>oL4+uqzfSru?E4>N9N)6t$Tq0#-P8PmMFQN9_->^Y6O zFEIK#0?Xm}{xI{ALtt&f+}nKRG^Dcxa=J4>uSn)vLk&L_=i!I{~+305c1D!A7Y8SIG^ zHA|*570W2^HVmS!NtGmf>s1eIeFK&S%O7$5S^M={EWhyk*A3q5`;P8}Ebq1rNp87h zo9!^lKLo!MNKsg*&G6iEzgP=-E@3)}K4#q)2&?-r-W2Gqv8MY^a!05j;{sVca^!7{ z;k$ij^)a;2!`HONqipR(Td*dHoA3=jOlw8yq$A4X-++P)YrwvL;ffAmAGz>FqGay7 zw~OC|l{O58m8VdYwDKi2q@i&Rh92oJ(&dXHO_<2iV}+TWzZkilD9ZB-Y^%KF^#l!i zqo|?s2mQ*=2<&isWzOW}qC0lM!8}n`erl@V`#jWnu$Q@CUS8?_(eF?ARylVH8WVR| zTJmh9?(##aRI2TvQKA3+bt#SJe;-4=vv$5^TaRR^U?3@GC5JDOcI4%0(|hxGpG6rdi-{&C#WHik>rnTFWu)C_Gd~B}qa$GC!N4AG zmhcjDG4A`FB0>ecD;Y#+s=lV9H%^*|saEYSC)Gh@KD)34onw=-F-TLxg6>utmm^2U zZ!gyB*G0pc)VpW1`Qj8OhxuVmjR)JmrlN;%L@MX7Gs%jm!l4tDzRJK7&oBHSaa5p^ zN3yI1bV?PL035utzvskIddK*7Q7*n-4_NrZ5NLN!KF^Tv)oB&MfSTburV$-U%T++u56wvw&i z!Rp?4SJ0htxUSk!S^b#f$MD3YJbc*i$M-+87ap7z!fe?KR?Qq1&wa~PCpRPSPFD5p z`@U-l9?tm=A-{C^wpUR>0O1$FSI1a0}h55flfA(b`T}ewjiY&t2fK(@`#CdW&EazJjuas{aJ9g^J8QV z;+z((tw=%e8X`Rm%JKEO@rj2`4FO%ei>8kF0aq&Jj$aXXGYI2wcm~DR=N%Rm?C?_M z?_;D{F;r*_gq8~>UNuYB4T^1FBf5!Y#&E__UIk&M(B3|ov-eyJmK)c`0^h)@e^69m zZP0@1rDQ2o$Ekf~D`YDqX5Sg(E-n5})A6R;`dWX~5pk5dPy3&2j>$h(RkHb8yF9_B zCl)!d$4qfQLTSKt3t5wsa&J|SmlM0qwWQMjtvye_r;4!`cD5}OKYjdoTUb>@uI74w zayT(`rEEeR)IF#^eNZF2wZO08jg!9f?_@!-YF6Um}8kUCxVqHGcU&FOWU*&NZFGE4|x|D+e-y z-Hh3U%x5xV8MG)GZFaZ5YRZ>9oYx(<8GG+8U+3T7PTz3GreyU~!*Nr5Kk{Ss2f6IV z>>_Qie#hdT|AB?`OZ?B#&*1SIREnTKyWLR2Tn1h$V=}i=+);a2uku|6Uf`k|TzIv9 z>gTusdlnP^*{hGDYWc+083{{HsUxqlZ2DQd`c5W0up<;bQn$cUTd$R4Jx8eA2gP=S zyNEI+!fvxzYogVJRsSDT-yIES`$an#z4zXGFF|x8dLIm;MwDpLd(G&K7Cli%9|RG- zM-QSCA$m7@3n7U+-|zeGUH4u7u*O>cc;>w4*=O&4&H?H=W6lxiPE$<*3CbJMw1))p zfqMBKe6P(z%~#uD**y|XH$uO?EEWUpyu8-(w()byhwrtVoi4T7Qa_JoWNU_Q;y%i(yu38&*k(gtV2fz9F8jg7)SKHVwTa;c7USrK9MZg zBnbMdh49ZxKRcAp(?#^_FK%@%wUeqX9O_BMhKE7*wy!c-B<*7THcAnQUBW=E5(!*x zloBl!E|xcz0Xol&Zd|iBsPqX^w-yu1arSCqA*3EBkb3b};Mp-VGM3c~k-y4{#q2(G zK_rXCF65t!lWol(5AD8`UQtG8vT zC*;+L)ki<|k7e8G7XIn(dK3fXvS2aLgpKS%qEg`O)R%2soOf#?Ja(8#MkRrnAd$r; zevV^7Sv@>CGcHW=lV)A~9OoibmXgvL(`z5Fm7L4WxAW!|B5&Q50u~DHzo&UehWk$3 zdQw7{RD6O&T$jDZ3G06LJ+%FGY``3Ar@z8mi{6jc^Ig|X-+Cjz{gt@G&i;#N4EQ9r zUi-!^^db^sVZcME`vR~2$}es=J5ytH&wF%HLEun;>Lv>DFWh{2X#1u%Gv@^t6{^lm~&t3o%r5IRK1q8seMN%RkQb2c_VYZthbBi-r|P8$Hm;xvt`JZSU|eHp^7)%E?xxy0$AdvZ z$-F6c@U{P=yj9crGc=d<0&ewB-l2(V$Nd&?^UHGro}~!9(;nI4uVFG((IZnkA|jmR zIz!vfl=voh%cpZ=@na4l&TWv~n5!7tHpt7tUu1$GzRA3v%1w_LqCq$4)5%n)_1fr8 zCPwxQN8FFZ`=)NG?qkkO{(z!N1!;3h&>d~OOl=$3b?W5v15^BLOw(E9Ifo@8 zC@8QZ+=Qa_ToTR2oS=&Uor1XCe&4y$%Mds;BqSr6;cVEZ-zj(*7$Glb{+aIe%qVKu zFS;JR8CSW4`scyg_V2Hyrv^Ls#Y^O$a(+%IPAK4VyC5JafATSN3iukRSBI3|`8I)# zM@Ri_+#;vwlAtoBPr{d2@bRVTqpw+t^!8BNdn3avSu46+8S1s^dDe2y?`6z?h2IDn zXFt`TOE&ql@m~UJyIgN)w_>g%?3J+;E?`C^K3wRmK3)wZ@L8Vm5q)iX3NNk3VvNCb z8u!D8B7H430&=If#S%$^ii}dj9`2nMmaVkkAQu1 z(a=hal+k1pE0X-30v~dqUPg)PZD<9rw1*+;uUVEx+0Y8JcjK>YI6b`~lUOS#G;@O= zQBo0e1N&B9nGDn`PbR4kQS_0a%~ARn z(v-nwJ!|`+HI%`Y@cotHPLpDCwA<8A_au|sgwf=bulKDWEXd{IkGixaJwr;7Jjs>R z^)k3`y-(d_3{sA!k|pnggfh24hbG}IewFyRZ{uDSNp3h(SvaHQi?ofyT|#Is3pDq$ z#a0_7COjzv52U-r9?OmD-6QW0TUO_+i2N}eb2P|~lft*b5o?JTn45W}+ukQxa4h9O zMJ9zi;+*^0neHcywhbp=uGuG|D>f)oTv)Ew$;#4kq{{UU7@S)FJFzZelrQzyLE?5J zce&h%fwSkHZ(x{DYi4>H-=B>ikIK~^^l!zUJXs)q|8IsLsl<8_bv^`C_?E4`!XyM2kt$MY$%;@Q|+ANVL&kX!+{{@8At6A6uYorlwy$~ z>Y`0WM8V7=x2s_|**jxQwebNR>+^~TC zAa}g@`*$oz(5^8@d&oKLC?91$Q)w@fMXE-RDaX2mzkuhXX|OXwgW;^oL z7?ox889S$_wJ+GBDU3csQ9ZoL8@!F4bjw@L2ig@c$x`OT^NpVzOJQCj_YGFMNO(NV ze%Gz_qANzsZQPCa($Kv35absO4zoQ?f@CqXG8V~@TAv+dzs9QBVU}U_`>9j4QT8vu z@v5np)4#9XjTKZhbI&{_GEEMbFo`)@RXyTf*2W0aO?DFes_t5c?Z$+?Y)R$o{V=Jj zdOokb;5tqrC^xCd$Q_TDBJ!5|t?M9Qf_5m#Ha^#f%l73!#1>;9E;?Lq=XHvRR8|2C zN?K&oo0Gtp=S1hmLhy4QwsDvT9{Lt2kz{GQRsaw+Kx4VB4LqfJ)!^*?51;922VmsQ ze4T0)s1E%A&FFEDEzF?=85NQ&4U(JmsI{Ch(^$mDTiv7Gvr*+3!2A@$?xoKP_sP_= zc@y+XH;6Ej>q2b7bqa$bZUh&;M%{VF_0d8Ky#3vd*3=t?eUi!LlDFgS@;969-EbpT|@OPqT{hj~PZcvnR!4%_HoTZCk>3?#;CV({t0%Z;^6n;Qk1<0?t)#; zj{uAm9R^g0w3ORK!x#~oomfUhgcXdr$y94{3z1t2g1jfPLFnybVV1`|+7#y$K!nel zeg3%a;LvY-OOE&s5b9F32yl2`B1B!eX=uP#m;DN+GvBO*QD;I5%5w3l5WyhQ#S{JPpb5&+vsut3Q{$Dr;JfNJx&cnUFYi9&-8 z4s=<&c}gZ0L+dC7jc-;Wh36JnQbkip=EL>&*!bDju^g$?A*|AduYl~lY$qT6mv^TS zc&X*i%4iC&Bc;Chjs4+E$3@Wm@@UAc&6{3v$v3=RwXRaHA0vp%dX^M3?$u+<<{^H7 ziht7#ciEFa3$win#=sO!iE_4WL)PvMEmS|hFpbL&6*l)-aq=>oL5dVd zp^ep%0~W^7yoER)2Tx=RK?<+tY*w;4`nTt{2;|(iIr#ut94nQorsyWlR=dA5)ZMom z9(=jfV-bz*O3+!HK$)C8sCJB)iWRF<$5$bUmyA0E>D6tS=(=mxW?ek8swV3`|J<{C zInsiVC|_`4;I+We(Xon`Z0ZjehI=ZK@|}`n)7|N|BdnGL_7^>>DhqyP`#(3sxVzWG zOeb|P1NPi>_+sTl__)FEs;*FLpi5L*#0A!j=>r{ zRsA2D5%>G{f&(pp^LN19Y}DqZ@ELK|re#e)SaG+^w1HI=l?RdeCq^efiy1Y*g8O3W zxHIUf5~N<NV(?>d~gZ(z5+E!?Q3GE+wnK@`>LimpHRkD0Fc}c|+WL>+tiJ zE$=Y5i9GfU*V&=^zpWqtZfkGq1$01OxV-JSALjJ%YPjDt_!les`c;=&ru$!rANU?l z+WhiZLkjo3|F&|o)Pe+AI8dTNBtw~GL-n4RpJ36#86c8^!LMl#nk!1yvtg{RcxuNh z{c|>7>-wVQap#EIUuFGV4Hc1NLI-<8%whp6l3V_iL~6B86t)_;h*MFw@Z7U;EjD9FhURNlAio`nuzfOl zm%tZy0}*P<*N43AJZmwnjeD-guD|hepA{B~M~g7k9kwTnIG#^$qG-&(jdLFoN;zr| zb{(eI+o-svdkNIHXfnbBH9V-Cm(f$Bw*0~)(JliBw}Ig8J1CNUjz*!u^RF{Sk=gLa zA^`HO8>CI2?Lmc7m4tFXZBui*0A#*KA%FCZS-LH@ z?_%N2f~=IobJ-A6m#4Q*EC1IE;BlcDwe4y_mupeZ{Fkb%`REOsgv0`ZneIOpQpKYd zGPfq^TpjnKP2%~5x@l*k=UC2_Z*{HEw7In&U^imQA!h2OO3eV2sFSF`Ul0vK)lqwR z&|F@+J_exN0+E7r@u0I`PGn8faZ-h0jDf{OkjU?0BLF`(*+LdRgTe=uMFIl`rrr%y zZc(#G4cn8WEXVWQx(PPpawioRRar$$Z&^nXE{->P_Krq`BulQi`Qo8q`+K6+!zGsl zG}?RbZElCC%W>;EmzvsDB5}sVwjh@J$S21Q4+38=UlDzm7uM$9Q-BeV$c*>*R zV@W7|xoi2Q>5@f7o*0a;hyk|TBmhHxG-YVTqc{wt?oe28+{U35dgX1@`Je;SkJsx4 zj4i2~2Wo+#3=OAV96LH}yg3`1Qu;>yL1JWbOJkLr)w#Gk3sYEQp;r;hDML4>+uS1J zJ(qqV>bG^9398QChrw;VjvTLl4Z1ly-z3aG5#cqPze4^adZVsOvzl%RLm$(6`|IQ$ z&+gvesY1W-QBbfbrS%)8xt2CAe8tJ%%pUsbaN2!tjFu-P+i9}_L&8S4PXuiqr*AIa zI7-wt9UZLs&I{-W;&k6B%C=-Zk=2h3_53LIc-VxlFW0kSsV6rXLT-=Er-++_m+k=N z(`0|QbwsgJ%^_7SiG%3SpZ3i-ZD$gfz4*Le;l1f!K$*jz+@>TVQBVMz|6toyBmt$y zRGHv2D<{v(7>~Ltp($H=dagC9oR$a^QjAH;Ckj2_Ao+ClaUu@~|5b^k|9(LbRY{L9 zD#UjiFjP01RI8|c3Bcs&aBK3DPOmQI<~fnrTZDp03NG~iyEsgLLh06-A`YjJjlquo zq?0CRwu3zoZ?Di-6{ydN(%7mU4W>n?5l&VrQEv`AduB3d3d|pj?|pEN4w=)jxJ_C! zDNMA&R_zSeKj&w@Fs}^<|9iOAV8Q#E^2=c%-VR^equsSxMXB}osTn|Uso)LT3r*3` zB|ULj2dE3Xr%UB!BZk9-N-8I1Sc^D;7pW8@wqk6z2j_AS7aI7*Pl_%7C_+=5l2g*>x_f1;^77b42lwYL!y;v0 zZQ4SOiK2WYVXR}`s*|#$8g9aEiL1$q{b{)t(^Nm%*H#mAPWBIOEMVl63{61__U6B; zP|SR>84sF4BMd`Al|&*z5U77C)P>vCFDO^NShZ%tf|MUX01&Ig2BA9VO*t+_4iwn0 zOT8abSdj00bdI|ceNx$Z9T`S};QWwTs!=yti(eF|0k)|;IGL>i@CMgk&QllU?{XFY ztWF;U&fZ;jiOY0%++6M}W(hrx6=_EeG$Q4=|H~f_P1Dvwl#6%eI8&dq@#Q&t-_)@a zbK}5cL;WK5`q9OMj-9;UZ8RRvxXj^USI=c*_Hq)+e-mGd_{3rNrG!*a4rQ(U#ZB~9 zUzQ9LG(ieNh5fz`3lzo;)grkn+F1>_kkUj+!fWeG=%rbw}mS=x~~{Q!;_o57S!;X!B8Oc>n~quK!By(`|*?)E_<SH%S|wCco-sys#>bc9kQxBDg`KkDVQC?Np* zOM`?Mc+w)YNPbmPZYp^FHT%Tlv|k z`O#0+t8`Kk-=L(Rl`cJQIUk#|6AUzviACT>B1F5Y=?93aSwLR#zr)bLsK7>ZLG3-p zc4Locfo>feiMO6o-0}{|3axO5&2R`f7>TdvO{b}kP5 z(gznV;KT-XX+hd!!_Z)3`hX!p)V`xn0L1o6esRS5OpqYo=^RY9 zkWcNn!;Tu6Qi&rWD z>7K0g;YE`pxt!T~+fYo1AJ+=c6h%8iU63g)d8;63u{xQiap*Gzee&}#L4|L`8>s!3 z(H95|_vQvy4)b8gLV4{ef6C3myui*&?PIs!biABKU%vi)*=lDJz8Y*tUh;K)TLtq+ z5F5TKVCbqU8ebxzcG>H7X>bgZ@Pr3#o@T8$ILC#$^$Z9~-gpwp?O#Mh3S#t1g8gK4 zEFzPGJ?uE#I^)HrYo>*Gn@+Lyz9jN?3jO7*eI^#ViW*%T9yET6+(WBcQY2lI73co- zz%@@C^S?62@TO?aQoGomr!J#xe)uE#Nlb6pCr<1dg|pxnMq%(Yv@vI;(g`S6jR^n} zCy39OO>l=>7%aex4#)bc2{cHcDW+@WA_H;SM7k`eL21#sr9p)(E;E$em-_st&;LQy z1d}_GOlLhAj*6(z)`Ox*J0WT(L|aTwv@1~G6hFhOR6Ln43&dyjdCm>J3fu3M-0LRX zr?4VL*1-F&2|=VLe*~mE1~3+rw}53?Kfg((G@ndI{->@%M3qU+Rt@bZ{lmH1Jxhyy z66yD^yx8dVqbv@FAlNDonxW~r7AmaW??~Bdgq2O_23y3SanK3QkD4kXBMVlTwt zQ|1%jSn>-e4(y;V%9E(Ilktn|w|IsD`D5v>y~4|`hN zbQZYCI2Do}wJqn+)fOZQUX^LJUh9DNcU;_8w**x+xH=!*0 z{sS*iUz4Up#$EF>B5RY^nzn>i*neXJCV{4%|HgZK=-l@i?F$y->CAn_g2@!4{7RrD z2_TCFdjy}Rj10F>yiJe9FWDrvOxD<}&FFnh9uSg>Q^+J~u8M!AnMh7dC(vIUJpX!R zaW$x#Pv0y{{LIiSJoA~52mn38370L%(Onie6m_ZDRnfbX2Q z0TAiVo1i8BS7}z-fCVY?b4dYU=n1*h+P4D+H;=a+=F9zy!xV0}9)IO~X@d0?^$V=hjixe68^c|o@L-2^WXJbEC?X*>ND zz$ptZ%?{N0PA=k{IFMxJ4}Znz^)3JtjZf+G94zh$_yP#_CPFsR6r#R|b*~3K9p-&N zP&k{=KKBO96D|$}YqptW3SgidR411N=m?#ax-S$d^MA}Sn8-k@wKLmZjf5}!_TsbG zx@Fvtg3g0#=u^XpR!VQrQ@YiC-^3LlTrlw*#|~x>oV{4pJ$pN$lQ4d^BvWqpX)s=sZDzdu?Jp(0~oy z0k9Z;z=HUttJ-E=0r9*9p&h)KZ+iV(y3F#70AY({jOn~&H8a+KHzD;xQ@zT4!Aqm> zso0FO<`$cbXy97aqtzP;)H@a7@)3y(|FrR>vNWr@U}MxnPwlC(aGy~xFVnyt5FG(b zGTW}&5>Wz3xTTs}B7g!?+nE^AxFz{0wC8RY$klqL=P=^N@S~q-{?|$%>Vj-|;9%fE zuW}t4ZPP<-z%#b4I$fl>fC3J!n~4H&%6go_pnwqVde<>)8IW$uQYILL)n>~(iyl=4h5w|#t{ZYb4$Gz39=|+z) zB@^AymTF%0_07s)Ue*h{H>>RS+4=*P^Dz|q+&{mMoR_@E*u4&yukA3t={C9J z9ht$MEC1Yu_pT1*tO@Q!EpgPj(?KDyWu4J;BfmWH{s=k|Zai$*kATu_sU&ha-6e7$ zXq25`OY|&>Gag0_Xx_>mq5crG#%S6)c-mGT zYAK;xac}zvbwCk$oV<4{j;0Je#`-U}Y#nm{7X%tK>!i9dZkST=HR~a;DG|sd2uOtRMdART%CTX$P<&ize&V)L|UH=@m`#2{~o#GW*M^P!}HmZftIv@^&D9U-?5PwTIc>ZvC8rGw$#ws@>v3GjAq7 zIae|ZT(~ub5XIRS`XLL**`fLc8d|1jvCc@tBAfC&8Wt}-@qE5Yz9ZRkq=D2}tc?&8 zbXXS4>X#UwHrxLr9Hx7I9nErhMJ3zg5-|4! zn~B6`wOWJv{Cc1eeNzL)qHOrrlIGw{PwouPoRP=1%>S7Vy_VckTuK&CCQUG5{+V}w z;jYGP&HC2%GieH`tOgclnUsK#nBjib_RC53uU?ctu9$7q56MH#{Rw$Fw?(M^S;mjl zBP;Q-3!(z2#1h=F?iJo&c{`BkIOrIVYB-Q+IHYWr>qPQaKRwv*sij91z71I0-yKmc zrRr(#!WcRtS>NHz8+QGP_a$VLal|@Z=A5T6DbXsTK{UUTcjG^Y_crVahce37KZIbF zO%BJ31;Dm zD!uMq^*~g;>`LIgO-TrT40?xchAu*kGb|GtF zUB-d<%+yw&i+^Ks>=G;IETSpb5g!7LHQT%6$4@x{$f1|&ia(cQKaK=5sOKxk`w_FS zh5&Mp!^`%r``)f&C|h%1|FY7!@h8_Hj8~4m{ZaYWq$~PUtk?Wrn?WH{vWt;9ysys6 zL-^~kjnOKzsf7P)kK^O4U^@D;(NWEt0r-Dn!&b1Fxy$5_PsigqdwG}M`gh)KG1TXa zq@W;%2$?+8@JVvQ3UPFVcoU7$^eY`Q!7d>qwqRXc8ZZN5drt}zzJ-!SVjje`rw2RF zsVu#0@uX8lH%PJg>uAuxmjsAF%)*_YtEy`el>mzU!nW^09cmkc)4rt|QS?J}E43Qj zfm;t8D}wq17?IrJKjCU|!WIRAIv)oCH)Ts~$d?6ZMGvpAp3L8%x`A7Gb32+8B7o=W#4S2}wN%Qz&7!}KZ9yZZ+I z8e&v%`PBRA=_j!)`EA6u2}vqaAKomm$(!V_>FA z8r!0S9EkI1N^^aqi(FTW3-4~^pjH-4R(uv`*6*0Ub6aIJ^1nubtm+r$S3QyEG2hsn z>zbupo2B<<(RoBb3uK@L^BcsIC!q3iK)DpS;2&M&hGu)lF$sm;DQW-^f{NFo?<#T| zMqpNfK6?Jekwlp*9kQDVltlAY47-4rLt!%YP3J-=8<}d7kPS9pVcj<6NJ23$>C;4V zuU;|ofU&t4{F`{2!*Jc~wpUM)<5aRtq%86u<~DuM5zK!3c+^O=zS$@`!BdjgVKZBw z7yrHvRh_Z!FG- zK~%Dy=zbF?_evlcc(N0_-j`$BrjyvhU z{viJCEw$wGa~?toDpdgqhsTlf>`>o@MY-B>|Ke}2;BNwP;YrR;k`?fUd@exs>RX&% zRwnsasZ9_ei3;P>ArjCK4m7uH>*s0`y9sDM{|iXf?mfU|XkwB)3i83TSZ`LsF=cXZ z71I^3Ec-pYN3_)uoK`^R^fkR;y9ybH_OGhq0NhCpYo6+-}Ms@1p3} z=R~D!f1i|{Eydhfd9YrT2E3*7qFL6#{**tV;d!(9v7NaH`EcIT!tCKlxMh5T({jXh z9vP0ec~2XC=vcK!`f7vaSES*}-|hW5oJCzbe&(Z+B8oWtUagyoaGkG_%MLVs+;SRo z;z`Qcq$<)&UTmJ#@6$fH3@ zS!orbuxf$&jIlspq}`02J@lVz*2Fwel%`Q7kueY*ek}T~`HHBEMnJ|67jCP9<&wPN zJTY-j!Onn~TN2fR%DFd&{?H)hIt z8(E`DXZcm1WI%pue;Dr_a!L-cKck=aX=SHSC0T4^>%fxcTf13nhZoy-+k5BUvWjj16&gpXH*bbdCV2bLd z3xp^~@k}Cv|=wcnNMvNyG7;Qm&{i(R{-3^ZXJSej?%&WAngxDyOU=p2X1SdmIM%T(Poh?u#xa1kQg_ei41)4X8=in&W*3&A+n{}&9r_e zf0vH23p7?do$NCe6obfDFOW$&ka{|MwX#v(@;!+z9eO*QVtO9XmPws>C7mW!M6c{B zt|yyn^DUI7w(22`{ui&}GIr@2VRsddnxml3 zlAy@GU!Uc7V!J-T^)Cz&3W9!>npy<&X}YyNbpY#+A2_L{fOfSfU9@yN9858Z;n`OQ z+~+DM%6k1TcMNv9nbeB+a9~C$#o~fm$6fg7kXljB&wz!!=F;Bc%leMo+*ATzUybWW zpLaiY4Hbd^FZVb_88JC*jHgu~eY8*jkNJl8kDX@(n~41ie# zuHHLsg1qR@+N4b;L82)GT9*9)}uG<4oXt&fOmlooB% zfP15Qxf$xH21kWRFd#4Uc~IUh_-S_KbS@7-3nJZVKnv7&4g_bVjQGjOv4OT6w{lq$ z&U&3B@jnJbGB}rmQ;(Kv$0*MI>c!ehg^k-Ft=hW<;m6Sl*(Fca+U)jyN<4*R4L>-_ zk9@RE1?lghQH-3%{5t2JX1c>UeDG)Yo5I%k70A6HtMSK|d-i8n+}A(M&q5B2XxNDR z$(RXU4dn!I8z7<|In@TzK$LF?ejX@)Wd4EwBTc_bA@lRWf=}d<5i|N(4lGsoJN`q`-(z%etVgq4CRNW($6sw!?};`r9-WyBkP%A}jko-rK^?o4Qc__cQ?>ZmFsuwrO%WK*hf2diDbtz<~K(rtY7=8cg1HR`#1D|MN zRsZ;mntOtBz^Vx}0Kup%Q}KER2%ez_G#}VNw^)M2l^{vqmxf7(h%(<{s1DJVUad)4 zk`ZMdD_oqSZdWhkv0iX%{K?+2Sg;6jK4Ji z+1Vhi0Gp@2O-SNUoB`AvAwyB98E*Em`YoAA7?$I_LR;x=A9*9QbOW|(XUY?O0(}M= zVI3KPjVg{`JY%yd#d5mt>&7Txh$J`g&{J(R>OG}qC!hpHPh!9@-JugxsE10xXoL zs@1dNVE_#Wxau^Lz+U(svs9`z$Dj$>Oahel0tDv~QD8t&E{lTkG&EQN0)LGLh5ad? zC!}4WI+S3P=e`*%FpHo7tqkC?2+L}{4kgJD=mv@;MVlEw`gZ8`ZRZk%F4>n!WUS?} zT8F6AhpoX!s0pzydO966+qgeLK1B_I{95JA+^JElT3L}#0q9hw({|b9Y~xDbg>!R<$OKMHOJ^^Z1bFRNv*0CefMr5xeRm$o?3B?{y=J5nvgDPJ7NX`7kr z4lqhqX0UN{iO9qm$u=_S-+bxF_I zYuww1^2fm1C~OzhoH^4dbC1ambZ~^ZG9L1VZl>Q3C6z*57S#so6Q9)^Oo9k$OK}QI zL|jtHgixBBk)$=d=zctz>_v9I0Stq(Jo-y%493t^_Tbm@6&lgUgdn}eSuGx`CdFSQ8C;zDY6Q>D7hUOWe7=zX52 zMqS0XReIcOS5Uw)zJE!z*gU54Cgyl8`OZ^0ujspb zX1QPW4Wdq&n$v@)ZRokOWa+Ri)&WimFK{0XSRF zOGNBa$p8}ioEQ+46L#neU^ijd*?j8!v?bpO&456^BzZrX%CrAO*1y=DVi-TL-Hd|! zlRm-I04;K$%BoPx$f_Y$rM(;*4a&@{T`ym)Lw-6}%I9A$ewPnIUdf=>AjL0|B9Jc~ z@VdF)tYUQZsITAF0mKMTvp5ruWH}SI99P(!I?Z?%Z_w}mbfvXD+wheT##_8Bt+E|F z3s!A2N<%Nx>r8#Q5ClwY!TD;QV$)9%VKDIW`iQ7l_DDoVjHpi?wD2yNqhL)>SOOa>0__zo5T492qKO#*N8GvT4e$h2%ge|?%cNWL<-oKyFn^GKCDBOE zOR*UY1V+W;_`0%Bzo(68Nx~5?SA~n7h#(D#OJ#nE@TIeZ`-qG_S(XF!I0>E;=w0U$ z=&P$3S1_yksZpRoC|n2=oIaKTLsLFf7R0y{h?_hX)e83L2Y1MnyT4F=XHaSMc=un) z-&+-%dol~QYG|^3d`_2|(Zb~6@q2Y|mJPC$e1r$WrLMNlgK{xqKnRv`;4;l=2QQ%| zbmA(u-+3J2!-8pSkKzu}vCcIs{dvvmWT4UJlBNqi5~+f(DXdUf`VW+aa^I&^)e5q4 zs1;6t1|g{XIABB~`1w$c#2Q9xZ3_h9j%Y}!Uo>%%+;QOCwVP7ue;m{^%0)NQ1Zn}n z3j_wEfhwMyCc!^3TYmv{IPn5IEc&M@_}}Q?hlfsW_;&K-g0y0*^I~S&tVv?>es|8C z1x0*Nnvci3n6Uy}QqxS3M< z=#;MmPNgn-iqWy+bx}ZwWgJ-9#+Z{Y5*csltPa*ahvbnabbR2MKeRRQh*xhEq^xyc z4c328Js^0am>kgFDs^O0b~@~GSpRrmzn~cYpJd@t-PRUdRa&7!cXC9`%uJV!C1dVr z!KY<#C{k;h+lX$A4i`tD^6&g`zxp``K#Mv?$ciKQCXL1hD%ODSM^Fkub#dgs*~(=N z%neYnogrj%URix*Z&An14-|Mx3Eeu9MfctU z>fq+Y!&b{4fJ(Qxp-f~fqT;LE@6wfc-xoG?Wm?Tw*_@t4W1fNbStLtS^r+K=ucY)^7@y#lUS~Pag3LN@voJ(Wrk4f`=sEg zBcqRavfG>Yr6SENfN1+KlgM?F#dK(iN=?;8%4N}eB_nNMNAWz&#zt7CK)R@`AV}Q@ zJEvLo0mr1Msr+b@5OX;D$n`47k2Kbt-ZcBZqde%1YoM}m!gWT`Z=iklDXaPRs7hLO&jn^O9(mrdl1CZfnU4g?w z^BG78dO1*z<9V>~s#N@%^65mzHnO>b5&f4w{|k zlnW}g4TJ^k4Nn(rQv}P&spT+){08`W|9Sod-He|pI7T!WP-)nIf6nuBJ0aoX4eh}Z zx<}rh`5)KWdmdeAtUyG3Hx*hn)+`}P**j-G;k~wO%)+4H1drEJJ$G&WtR}0J88a|P z6s(UvZw0Kxz?R4`y|@W~u`3;49mySKjALM2f<0!O3{b7f8koZ-E0cN$URFMT=1hVb zUqbk7TAkgP!B;^Q6f9waQN*HQKsSV@89C=jmXCvwdVVojo!zTn^gvOZ_!~EJzH%j} z{Y5HXV6dix+%>=TBzZk7_3Wgk)bPe@=)GFL7mtV%11CxtdS7&&F{IH0Mx)!4D{V^g$}+a;RNYWe3Zy(E|5h9i6l)!)F2r zm0(a@G#G&3PjIG972fRv`j>;Lp&N;;oAY~Z@raDmocqGMQfUw&JNUv^>kgw(%j_cH z6Pt$Fd4S{<1R0K7CU6&KMj|)yan2!97rmP3$%htv;mv@qcu=zje?JmExThQIm8|f9 z&LZVIzxlrW#$WcM`_T(J$E`v{Q<<&y0ZXs>Cd2VTtJhlpdy3+o;ect+0)vDO97mxZ z?8nF09wFPKDp!INi=I~al9n+a|A?vJ!jFyLHkh)3%;4W`)Sx94TA+EdV9dvt+)(q8 zHwUdUf((T}JFY3lU;yJFp$M{yjKH&V1q2@vIP zS{yI%{frBd03>o79t9p8_uQ5!U*krvSj2gjDH1jiVq9i;_kQZmkrbik2d+*7aMp!s zy@}ob1myNQp)~)nfIhsV1y(&8f4VUS3ny>F`Jk}j>9h;Kn|B^M`y9C*gV|@8c}s*C zjO)=IrI^S>w)C6iU`k#*SgO~v=GXa~^t+f+e(+uV>^0i6%I2JKELQ}*t)gfWNAM8cxmrK-8*jeTPPry?`2IT zo@7Y%%kE07Z^8BbTI;%QL(YpP!y(PhDkM~mhkMOcnl0(NIi0fA^AmMt|2)@0hxMT+ zt^%|KnU33D*$E?c9CD?PbL*>E-sY;%la*`|znrK{N+JYybt((qsyc2Glsl3K4UArhAV$hBMgNJsB{RMh zTT5ic*Y~#0$KdH0e(9`}d7x6ISD}@umo;0Wg{JdcUaMRP_aj}+9_ShuZ9)1unTW9< zS+(fJ6+^We5K{0c@JR5+ik+;=XAe5^vgT8!;h{qhb(i{Bn-{O6W!vDY_NQ8#@S9~D+YKkWtd1#?~2b9bfHM~h{= z=AwO>faLOP{5L^`S-ZHoIb1+{1u{lIsmNU{L@!>Q{YlY7M;PgE6HX)oC_ftD8Dq@c zqh1!?JWOx@C&Jsh?4SvWydmcl61Honk&|P+Ap4bz(A1C@MGubNoQ7KuZe zgB-qo$TX@uKDt)h=pJ#M6O_~Tn1O2?4!cMChYNp z^Cci{{DWS`}Xr@=ia$9=giKX16`Bt z0>z3k#!^-UV14`Zi4Tf%iDkDswjwn11z|h?Q*AD|nW#y-d+L|N?$)hNHiJ@9^JSai z1ERCo(S_xIt7u%?Hzs6LuJiPR;7Gj8lhup_cJ^g4iG~Ud8k}I%`Ufs5MhPF9PD5ur zk*jLKnVW#Bu$Dkes!_wthb&64S6OmTHI+x#gJ&9cibzsjkei+ z%}|PQr}7|89|F*B`8CJ^jeSDZacipHgI6aa=t^#4KVR2_GA4S3M0%n|$P?H@7)nVV;753;2>2yWcABea3+NCOwfUde@#&YvJpanxqmN0WP9Yov!6fstO19^9S$K+Hh&x>{kYK(TR*xR)4z^TrP?<&KIc7HNoyIL^eY% zJ~TnU3yu<6)o;E(LTWyL+hzSP1+_N{3;dLQ{7gQ`nkGf|2=3Xt(MMH$j+Xe~(!NtH zJn>2GY@SE%w;uZHEjaX#HeDh`oiGXMK5MES-wCN5A%k7*Y%iPb8NUe@!89pK;~(3# z4oxu-1Xn)cJCSFlxIbg4=ZuCx+yHB*7Vd?`?_L$?cqtZG7T(4m#t8K!y5jxx#K60k z2F)*ky`jrNCkLm3Ip70^Ezxob+0;=(ovaUHPnny>0nDpmru74pS>G=QOCGm7GMdOP;(cTvVPsQ_WFRT=e@oI`NJyv_L_fffs^P&yX;!MaLcdSz z7k1f~aI$5T4qI*AYJBJKmo)^{C6@OC4_P;C66c3wXhyApmc#?#XfmWnLHymGZ8*Xz z9EpE}=JuKrhoJYM?4S5V)Phd~_(XTA;z5%#;V8R1xd8nF8&3B$54jfh%`{QbFcJ?m z$-l@a*P;BwF8z#onErMHTqG=Ugg%iud3$g?mfH+anGWYglp%`_WI6F~8t@1&)KeE+ z&$Vr~hu?ZGwY}fSPULHh#!7Qp!D4g!351j&*oj5~hrrw?G(zlF;_iUdEj&Mcu7pIX ztELX4gzegpjRK3k7!Df=?nK*X`;RVV-eP3t6hHJASN@^7<(IQ>_PJ;XQ?`N1$Db#n1`U;Izs~8>0Ij{2T8-} z!}};d`Nc0CH6D|O152-xCD86J->cD}l z{m4t%A6cOD(U&bwIg^|mc9U~1M3stTyFb(<6IYa?DGTnGOA(ds5OBdfB);e!paQgipK-0R--kG=rMqmb5rm1EZ#qZ>V-?cwY zFC#FsFN3uug3@c=p-Q3YV54%rwe|;fP-tDSX3GLVY9i@odaRmoolZvWl0R-FAth=Z z&%w8j&1pF!^G8BVN@=T|=us;m4kYVR^ihDqomM#DBp4j1+6qufn-yaD-^^erdA4dt zjOIl*u?$%ytF3@3PBFWW=WB;#OK}>#ke zwUoWy5%^pfuQcZC!KbK)p@X!#!v3G+&z*Ps^!`Cr6FV21P_@XI+7G>^l39^;7VI_8 zDck~@%Qr15icF}S+Vj+q?tsw4^Ka!0g&Q*H#SrUS2dH)cPTfdU8Ku>fL(`pvdl-*` zfJA*Pp>uGJjT2_v)i4Drde8xrH~>U*4g^7NksODK`hsdT%Qvvp7gc@y+2$_koi(=B zkyzBd4s9idCNDE+qLJvec-|sf?zs-Qf-&e;iB)caC6!<0??iVv<-qvC#ZuW9+a&0? zH(@7Nk;3O}(I|r@r5y0IiaWo@+6oAE7~D%;VqN$7p5sEI#cpNb-OH81hh#UW-l~JB zX8SkD2(gv_l|N_v-BN0nRmLxe*YzeJyiUHi*8YnSorv2lsT(!QGQ;ffJ_A8w!M;Al zr}CWi!FfukK#Niy&$sH%XR;TJLE*!s;gmyX$m+C$$|BB}yu* z;4>C-3&1F@&onk-pvr2A=L2*@9ob498=9_7UoR9GU8fDIU|M3*I|vs)&)270gKvDi zQH3J3pQf>p1_xy-JubD>Vrm%c9!HZLlqr}7+#SCBB7h|ldQ=RH=h z9yTtx zo5PNlw}ppEJd3q#W3J>0rd%OgBtFV$C6dWu$T!aYz$$PU{CKwUEcRm8n^T@+D)jM- zm|qt13;)Tjbn^ZZtT1vY2E$9v*@nH@kIke>&d)RQ_lH z)=Bi#K`fP<^NCcZDjN?E>6ydp6s|Yk?cP!oH7-jm`A05GYk;h%{{X+h_-&)`b*=(>#plXw$<(DL~p@v_g72{JEFS+A< z_k3ls@!MtE%rV}KC^R-YPlq>@Sr58;b8*X4RrECVZHSxsv+#jBT@Kd z9A~fKg-zM500xYWCy+JWOFrgP-0?Z~>P{ZX>Yzth3^#P%75$L#kG+?9WsT6P=#ny~ z8F$W7=a2R-S{~IDcbD0jZdu6U$bT6^gDl|{dFpZ9#j)u8Ad7(*^=;8WY{ZqU$J>v5 zOYB2LXvyUdCq#p* zvvnsz&=LWJo*2>)xfVi*BFiUWDcpR?ESh+eITXkzzXB@WI^6~qm-Jp4UxIgbNd4hn zj!YUwCW&T4>~}?f&ae)1aGqT`;3IRp2s9TKcU-n5jV*>SG%`0%f)KX8cl~45sF74 z0QpsZ%~ip2IxkQ;Jyp(SA;6@@DF=3@tD6LmL|N`;2+%UINW2cYH4qLbBGhpDUD}>0 z-x$;-B!8W;_rvnRhWL=#fb;R&pN9{5wX@kBJN(HQE}h7{&HLXz2&a;8bsPZ^%kC5) zigE7v(ktUc0}2e$9UR>q!JLyQ_^w>DYSmbbN-Ptus37E2{wr&Upf*nC_ZvZ1RP6@I z)$x`$Uek+6{TBDkH4pbhae(*)lhI`swnkOP+!9~Xp;)8Z)5?w;EB?!yk%7Z~=J~8K zlk3eZ$NI+7)YhL%!6(eEB$=`?T@Sv2Li5zRuN~Iwz{C<(6b2a0JGD7DHr#!rcy3}E) z3_~dHtx@7Zb4S9TV#TEW#P%zRl}TmcK8l#UJ2ZoJOY2`Y#leNy1Dz$-WAz|#2z#6? z1z1_f_DB+)tM!rxt4zRea`}XAZRDx@U@*A>LJgjA`ud109{{E#U3lY%Je=i^;BYk}`N7 zw}Nr^>rKSS8^JnjCqAn3x2H9j$0I@Zd17U(2_&ja0GCmLh={-RlGc_6SX5HMPFWo z0kDsf!Cq*EOK+MHmFV!hqSGAYAduYi&d08Gtu^Lh7oIp#i3HyOlwWzazj2T7aiNTK z1mWj9{`HiHMAKc5D`emI+6lc5#Xfp{#}O7^gza@R%nbc{;>(Gou)_6dN>xeHcy2YL z%9ZbE@}K#I{9!MQQnNm^*lfs3#+mIHxG?U}gqWFLmHsG~KNDP@?4tt7-GJT+U2_Dj zJ!qokYYD%eLqRS3?MM74mkk0pa9r7JXUSHeFnbpOCr5*m2f!U+$5}jb96_ELY!I@A zt3kpza0k<{XQFDyHi}77TF(fTjEiMF&vQs=#MupL)y4ETB1eU|vMRwT zEX|R0i0o!Z99{K{d8o@PpFEw@tf(=74T7OX)t;%3`i6$AW>H3&w1@OoT_1BnK6LH~ z(24M=O;n;ejn6)oBZNFx86*|T)UGC#YC-UN!jPjiz<$#=pRuX4pJ7@+DCPH<(##}W zvz-hO@0BCfp^R4;sv3p1Ph%*v_(z%FU?JGr7;0Bo#Oa?TdN0hRyQUsddbGcCFEBtU z+fj|GJU{xpSha26wh-dO*qi-(w4HELJx*5d@H&UfG+VW{r6FDPzY1nh+^CiLjZ!QP z&uIOi#eI*9Bockhm<=6$i>)WRU;LP!qClm|p>ZjP6Iv&GolNn;)hcwj&zaIG_K#OS zB|dfTR-uQv2cADE3xo_?D-opIr5A$2L6h(JCAJm&ZjnqpEkm`p0&bM zA{IYLqEYe}^2!ITCi)x>{;}i~OC(6H4FBoNB=S{#+3$Fw<)UOc@CZ-pugI5W#ZO{? z>$~3nNV=1Li=xBQqfNGOQ0?E*sZulVj_F36EsW)4YtPfx#6O8MoZY$pC-r&qm%;uY zp5OZ(yR%B`PF@i`J+0Hw=!%s7Lxj&EwVz(lSe_^~IEW`(o3_lpOO8@_GU*Y(?e45H zKWgzU`J92g=C79MnW=`&FBroZLx<)tmB;}3Q03}4U@5N2q>)|e3i9{L8z3Fr;m1J7 zA9WPhI5w^3HlEXXS}aZ+2y)P0vS%Tog;g-C>4^Vh0!G8QIR+DgrMV6H_#GmTXP=8}TV9E_}E*_zDFVAaHwW#NlX&!Qv- z3|VrGT4~rW38D#v9X#6C>@Y*^Kv27o&CmTOU>nlpsfpzZI_kT+H*bFNmx2t%BIv1b zOER?oRn;OmIX5joyb?|ut&gXj<(FnkeY&Q+0G%*oB!X`C zDyZ`rU9D|(T9>*MsWr_#P#MCd?OJOC*tEVx!HrG26H0W`Kv^N|;QS^JP8KseBAM`? z@RmtheSso`q#fNU*?^vG)yL&h+5&%yAumr z`RWdXZ(^H}`h0H0bn4W`KW(AD~ScdhtV6&$q%=S)B`XaFZ4&AVzpunM1 z(=0-u-hn@bo0l|#D+~N*-`Nu_KU2b|@R8D4%Z3vKTdvsG_Uj92Q9|q+9Zm&R?pi(7*Ttfxzn&prKkzg}ZoGZ$OS~|PyrHSGl zYzmA6y=D4^T3FHbhT3-$jQ)&t=ae_DXobx*A8ObRh-lD|y11`!2f2^v`0VZwkS|Gm}I7ZO!$g;XCI+Y2N;pBw?)%%;$iZ#0%BU`ltHHc1@7osDe4EXL zi5&``Q-*#Fbte+(*T{OkoDMG_CrVri#R7SSc_iMML|)BhO$6!nuJ+;gmZ&W0Xjr~rcy@*&+xdBC z$@fuw<%}0!V&e$5w8f+1)wXn|?JHK)wjxHK0}6R?W7jM@BJLZq*$*B*&PY2YfxWGZ zBzIHhlFW%6a|F8K?*fbF;fjA)%yzReI0H)B78Sh52TYHyu%Y?Z=ZlBJ-3PQJ3o?GK z-}c@)3iQOIz}kSBhq+EyZ{H(X#ESA&6-G(rl1feVal`KSu~pl&mBCqzGdY^M`_y$8 z4t`XDuz}tBB-=|WquDyY@nLaEqTzmcJKKLa4$NZyO8D?hpxHjOQk85tWqZruRl?;~ z!TVfh&foLCYxYilVaZ~na>SNx_~#4arX8sUw6V%Mpkj!!FE}RH5m#H8*9pc9MuAsw z?VSkX%GkBYrw)1QEUlO7yvdp)*|X|56l;9R01n|mvR@u_hrOw>w#}|Fp4#Pu$((-0 zPp(ZsQ2-wRl%%Tp$Lkry-E$O}$yI|e-&{%>oN^;-ZKf0kWD0xQzwfxht)Lg@e(l)P zgVL=nz(p@U8g-e;72Nlphe85cD?VsrX2nm+r4l4pK}>MwEBJo~vJ}y2vGf4QWkYc> zWF0=1X*Tf-{K8F(6nReYl}&gJd1cpomuE3Z?&Ek7f-w)cn#$uwyv4~8@!6O?7yME2 zF<)2L3HQ-*uaDKdf>iVI#l!L^vtM|80wlkcFSrR0EV*!lEWIIu7&-r7>G($6I8`c_ zBonFh7oNZ=XN%T)_|8+7V7eE9l^LGyq?^rUefziokhX0-{IMDRkV+sd7+!d?HT zrv`V$g>mqorSh7Q)tzMFWhcZ|rW)U#Bf?72E9QBCIbTL(JIb}Nz;!$q30{g?(V7E4 z&|-akeYfvF5c-~6D(yL8J&3D2;E{ellQXe;bX@y&H5*;T{nbn;m8{RZe(LdWRXg%eu_g*x!V;!S$2f*amNzWGg3s=PxH$WH0Ohj0Oq1M;^l zV&Kl@ew<>pilbW?Ixn3`(Xh(hAcqAlTJ8I6+bSR3GyO>=A~cw_6#_ZY=dg|b9;nmg zs@^})7~AqrpRHKPnALTW_e@zK@p&$ywd{RmTky{*&Yme;; zPNk}bi9u?%Rf|ijBwfTK?D{WpNQtz2`Idd7zaRT&*>O2yUEUDKX?>XzldsX)LFl9x ziV!EA^ectI5a2u}NNsqD9bDjY1}fXcFV>sqNgiPU2at6qijL}cGwinGw}`QYfa+P^Qo!{s_R4!T*|!`2XK zob_!J-gEG`b>H3@QK}ZE%g=`WWx9VmEE~p{0cIOUSh3BXx}iJu{HOyl4_^L_z@WD5(u;6ZSK^aN`%!dm6=uSO6fY(vx3O#wYYqfiQ{P9#6ES#VBwIk z6>N634`^RI|3|I(U!k#p-DFIK*+4Y8OW*XpK+ArRZ8}NP;Dahd+I3OnG9Ex*%83US zpWWPOl93xiEMlUV+KOv3Z+SdB(L{O7q=d;4B?}Fo!BB!Q$`dCsgw|!eR-GUo`%v(r zPZ?blmL6$M#Njw?tqc)!eWs^U`Rp}N22D2unP0m6?UK+F0s1a&$8Xy@MUvVT>_aF% zzP5f@;qvxg3_XfEWBS+5gwCx<~<&+OKTuKwf^MUS=d&_9BAD&PT_NC8Rm}zAn)Gi*g9R=Ok{h5 z%uoQmWpdOO>;De0^jRGE#G(xHwJ%!Y4zh zyHc@fZ3x%eM@P>csex)yOyRL1EQe)unnxkb2lss&+AL zn?U$R^-{z(sJkhlM>9rvlgdBM;Mmk+ZK8Z$;LHA|ODh)zL5kY8vqNdB`9U*0SM^^i z`N0>iSg?Px%WsrctnIPmoM4^FO&(DZ3%(%#5a$FFFCcci%nqhLV0$E#h>{JpYt2&= zG)Ct<@W3hDPw7&jw=55)m(?L%- zkGPol?^N0I%|4KmdO6zuq78&Sva*ZKtDjX>CG^aosA962ankzipD6k|^Jl!bpLOwI z2AY+E0?9~lk}uofQU7kQZpghTxJ-soDC>a01D0#6V-encOB zsv{M*V$c`4)2j<){E$&b$b^?g%cNo41Wyu2i@~K=4-?`=7NA4cd%&0ko*!Mn(7t(A z2f&SD73|R=K}`zt3QoCE#n$N&Xw6W=)@h);0TT-ifAps~cPLNtDsGJTqU^RUuB0sf z&fBfy#jWaQ?Ej%(m)*rAMD|Lp(r+d4s8Oc#hx{;s8})VwwdQ$rmxbu@_-U^3#Z9gXKyM(WMmRRL`9{o-S@Au_t-PEenL+iXxRIvTfx{-IBPudIqY=58_qw> zx^`&HeD4%bVov;7jQ+2U6rqcdeW!36N@=nYW1L<4vn5s+^Z?S?XnMIjvGcW91j1J1SjU0C;6$QD{j>u!d{i&hj=Y-fv(#dM zf=#-tMt(%4uBJ_8u&fb5EBWci6ozGAvQrua1HwaYm_c;YlZt-NW|ANMW51z0FR8d3 zAKB%D3lJS%m@M^hu` zpx#>y()8^&U($G;lHlo73v^#b`0vwH?+hR4nHR&%OPR7obqTF}sj?gHIHieF37SGm z9=R?z9NDN8h6PRZ_g;+{rQkr$atw}_g;bTXcEn@!N|qC83NJ;l%2{7-Otch(9cy9s zNj;;wu}*-lM5oeV<2@D^Zuh1O{tdAznWpvD zqGWQNQXC3$8o;m_#PfO_Ve-+MQc#8X->cd+3;$6o;K-llYDe<_;El-U8FXgX+h0wM z)sSo7I-#^TNR_95+B$+OLDhKpSAI1=>N0ZPN)NUc1Guo&Nc|y8EfH+Xn6$=+Nuq|W zov12gg88+;uhdMAJCKq`=C=tt!y8mxf&d*Mtg`Q;xF^BjLkn{eK^$BIA*HcuRZ4lE0J+^nVFZd1st_Gy<1V z$>(_I%jF~1xB)9IuaRp1Q1~oYn@EcJti_rh59N&l>)$u((L{3aO+QUjw$T`|JRQ#8 zvn4n44(Zj6wC&uk>CKz0*Tf~>Y9d|Bk&dlHQyc+hC_TC;2>Ko}f3hMSfJ+6SyX*wm zI|11-(B|&Vu>bsPZ#0F$zZikjqS0jHk8vf$J>m9FrD53*)X&X5pn05%Xu5@YJ_ z$2Wv-&6&^ISTrG}ME*m|dew10*t#ZxoP;_yre_zElE0nN1Fpqpya{@^5k=K9g*Tj_ zw^c(Il%NyOhKpy05pnZNlOGO58ehn2HxwKS&e=+Zxd>(UQdh=0U&vaG5VUmlewGB@ z!h)dUN#Ne6+eg*7(X}I}sDPoKYVQ!!BhID$@-kKl!nzMEqg| zG{q0s(%s!u*Foufov|s2_$7r62kJLn(u>x@a)y5~t|HkYRhr+?*Fr!su)s02A;(-E-k8miBhTW zX;N0QzpjO=EkPq$4FFI2dht=$b8BVCj`oG=a>AUXI+MFioM~ zVP=0^DG&EV!_M8QLjW~B(b4OgPV>s4(s(qxtSfeXjW;i@`nwN{&0G4%8?r&v2X70j z(LbOs5-S>j@d>2uMhMQAhcVlqiiin)N%CwNXd+DLh*&z?6V)aoUkZ1AAF@gaJ9XgF zB0p9?UUqUX&g}#K1H&9XPNb!kmU$PhO=RaatI6u*c$fx220MNLxAjqV4K>=3H_tFF zvo;rH%%ct`Ws6~G|5}UEb(SpG>8PyW`B9zBGF<@!)v=Zs#!eVSDT+vi2!{zfE}?)Y zkhcz+bs8!COiE*HZQSZ1`)DJeb9p!f{YMra){nRdh3PLR2B!Sv4?$a?wH{;2JdTX_ z-4=19zXCQ}Y)ZswB5EKh8EVg14IDm4djto=pA7yBTSqZH2L~1A9_f{>Sq>vR7GX+$ zmW+A)Vz)o&&g%sORCoZ^Q#+(aSzI+I$M6)b!E^no+SH<0a3gvA;K>Khv{8khMmNxn z65<%&fZU6#`qkf3Bl5COFA!f7V}id*&_#I{#D@BarbS92FVxk^m*J^2o%~qvcjuGq zKNh0*2(+;Cn5WZAe4~Ml8T`kq@D}R5tal%#uvOEbh2muRd`I6ySj^w+>Ff7j3JXKa z{vlRm%PKnHLOJN?d#i^beFHv9D{~%^2u5kk536-9q6Q|R^25(3!%l1AlrPoQPo^B< znUYC^bvLrvA2rBky#)u{KA7*r%B#MXmUXTo#m{J@d<*gphE1DwzT#YFIkYxsktrHG zNaR>~4WBtkW?0qV;Aae3LTz8Aa@Q2VMKhw torch.Tensor: + if not self.enabled: + return x + + n_visual = x.shape[1] + objs = self.linear(objs) + + x = x + self.alpha_attn.tanh() * self.attn(self.norm1(torch.cat([x, objs], dim=1)))[:, :n_visual, :] + x = x + self.alpha_dense.tanh() * self.ff(self.norm2(x)) + + return x + + +@maybe_allow_in_graph +class BasicTransformerBlock(nn.Module): + r""" + A basic Transformer block. + + Parameters: + dim (`int`): The number of channels in the input and output. + num_attention_heads (`int`): The number of heads to use for multi-head attention. + attention_head_dim (`int`): The number of channels in each head. + dropout (`float`, *optional*, defaults to 0.0): The dropout probability to use. + cross_attention_dim (`int`, *optional*): The size of the encoder_hidden_states vector for cross attention. + activation_fn (`str`, *optional*, defaults to `"geglu"`): Activation function to be used in feed-forward. + num_embeds_ada_norm (: + obj: `int`, *optional*): The number of diffusion steps used during training. See `Transformer2DModel`. + attention_bias (: + obj: `bool`, *optional*, defaults to `False`): Configure if the attentions should contain a bias parameter. + only_cross_attention (`bool`, *optional*): + Whether to use only cross-attention layers. In this case two cross attention layers are used. + double_self_attention (`bool`, *optional*): + Whether to use two self-attention layers. In this case no cross attention layers are used. + upcast_attention (`bool`, *optional*): + Whether to upcast the attention computation to float32. This is useful for mixed precision training. + norm_elementwise_affine (`bool`, *optional*, defaults to `True`): + Whether to use learnable elementwise affine parameters for normalization. + norm_type (`str`, *optional*, defaults to `"layer_norm"`): + The normalization layer to use. Can be `"layer_norm"`, `"ada_norm"` or `"ada_norm_zero"`. + final_dropout (`bool` *optional*, defaults to False): + Whether to apply a final dropout after the last feed-forward layer. + attention_type (`str`, *optional*, defaults to `"default"`): + The type of attention to use. Can be `"default"` or `"gated"` or `"gated-text-image"`. + positional_embeddings (`str`, *optional*, defaults to `None`): + The type of positional embeddings to apply to. + num_positional_embeddings (`int`, *optional*, defaults to `None`): + The maximum number of positional embeddings to apply. + """ + + def __init__( + self, + dim: int, + num_attention_heads: int, + attention_head_dim: int, + dropout=0.0, + cross_attention_dim: Optional[int] = None, + activation_fn: str = "geglu", + num_embeds_ada_norm: Optional[int] = None, + attention_bias: bool = False, + only_cross_attention: bool = False, + double_self_attention: bool = False, + upcast_attention: bool = False, + norm_elementwise_affine: bool = True, + norm_type: str = "layer_norm", # 'layer_norm', 'ada_norm', 'ada_norm_zero', 'ada_norm_single' + norm_eps: float = 1e-5, + final_dropout: bool = False, + attention_type: str = "default", + positional_embeddings: Optional[str] = None, + num_positional_embeddings: Optional[int] = None, + ada_norm_continous_conditioning_embedding_dim: Optional[int] = None, + ada_norm_bias: Optional[int] = None, + ff_inner_dim: Optional[int] = None, + ff_bias: bool = True, + attention_out_bias: bool = True, + ): + super().__init__() + self.only_cross_attention = only_cross_attention + + self.use_ada_layer_norm_zero = (num_embeds_ada_norm is not None) and norm_type == "ada_norm_zero" + self.use_ada_layer_norm = (num_embeds_ada_norm is not None) and norm_type == "ada_norm" + self.use_ada_layer_norm_single = norm_type == "ada_norm_single" + self.use_layer_norm = norm_type == "layer_norm" + self.use_ada_layer_norm_continuous = norm_type == "ada_norm_continuous" + + if norm_type in ("ada_norm", "ada_norm_zero") and num_embeds_ada_norm is None: + raise ValueError( + f"`norm_type` is set to {norm_type}, but `num_embeds_ada_norm` is not defined. Please make sure to" + f" define `num_embeds_ada_norm` if setting `norm_type` to {norm_type}." + ) + + if positional_embeddings and (num_positional_embeddings is None): + raise ValueError( + "If `positional_embedding` type is defined, `num_positition_embeddings` must also be defined." + ) + + if positional_embeddings == "sinusoidal": + self.pos_embed = SinusoidalPositionalEmbedding(dim, max_seq_length=num_positional_embeddings) + else: + self.pos_embed = None + + # Define 3 blocks. Each block has its own normalization layer. + # 1. Self-Attn + if self.use_ada_layer_norm: + self.norm1 = AdaLayerNorm(dim, num_embeds_ada_norm) + elif self.use_ada_layer_norm_zero: + self.norm1 = AdaLayerNormZero(dim, num_embeds_ada_norm) + elif self.use_ada_layer_norm_continuous: + self.norm1 = AdaLayerNormContinuous( + dim, + ada_norm_continous_conditioning_embedding_dim, + norm_elementwise_affine, + norm_eps, + ada_norm_bias, + "rms_norm", + ) + else: + self.norm1 = nn.LayerNorm(dim, elementwise_affine=norm_elementwise_affine, eps=norm_eps) + + + self.attn1 = CustomJointAttention( + query_dim=dim, + heads=num_attention_heads, + dim_head=attention_head_dim, + dropout=dropout, + bias=attention_bias, + cross_attention_dim=cross_attention_dim if only_cross_attention else None, + upcast_attention=upcast_attention, + out_bias=attention_out_bias + ) + + # 2. Cross-Attn + if cross_attention_dim is not None or double_self_attention: + # We currently only use AdaLayerNormZero for self attention where there will only be one attention block. + # I.e. the number of returned modulation chunks from AdaLayerZero would not make sense if returned during + # the second cross attention block. + + if self.use_ada_layer_norm: + self.norm2 = AdaLayerNorm(dim, num_embeds_ada_norm) + elif self.use_ada_layer_norm_continuous: + self.norm2 = AdaLayerNormContinuous( + dim, + ada_norm_continous_conditioning_embedding_dim, + norm_elementwise_affine, + norm_eps, + ada_norm_bias, + "rms_norm", + ) + else: + self.norm2 = nn.LayerNorm(dim, norm_eps, norm_elementwise_affine) + + self.attn2 = Attention( + query_dim=dim, + cross_attention_dim=cross_attention_dim if not double_self_attention else None, + heads=num_attention_heads, + dim_head=attention_head_dim, + dropout=dropout, + bias=attention_bias, + upcast_attention=upcast_attention, + out_bias=attention_out_bias, + ) # is self-attn if encoder_hidden_states is none + else: + self.norm2 = None + self.attn2 = None + + # 3. Feed-forward + if self.use_ada_layer_norm_continuous: + self.norm3 = AdaLayerNormContinuous( + dim, + ada_norm_continous_conditioning_embedding_dim, + norm_elementwise_affine, + norm_eps, + ada_norm_bias, + "layer_norm", + ) + elif not self.use_ada_layer_norm_single: + self.norm3 = nn.LayerNorm(dim, norm_eps, norm_elementwise_affine) + + self.ff = FeedForward( + dim, + dropout=dropout, + activation_fn=activation_fn, + final_dropout=final_dropout, + inner_dim=ff_inner_dim, + bias=ff_bias, + ) + + # 4. Fuser + if attention_type == "gated" or attention_type == "gated-text-image": + self.fuser = GatedSelfAttentionDense(dim, cross_attention_dim, num_attention_heads, attention_head_dim) + + # 5. Scale-shift for PixArt-Alpha. + if self.use_ada_layer_norm_single: + self.scale_shift_table = nn.Parameter(torch.randn(6, dim) / dim**0.5) + + # let chunk size default to None + self._chunk_size = None + self._chunk_dim = 0 + + def set_chunk_feed_forward(self, chunk_size: Optional[int], dim: int = 0): + # Sets chunk feed-forward + self._chunk_size = chunk_size + self._chunk_dim = dim + + def forward( + self, + hidden_states: torch.FloatTensor, + attention_mask: Optional[torch.FloatTensor] = None, + encoder_hidden_states: Optional[torch.FloatTensor] = None, + encoder_attention_mask: Optional[torch.FloatTensor] = None, + timestep: Optional[torch.LongTensor] = None, + cross_attention_kwargs: Dict[str, Any] = None, + class_labels: Optional[torch.LongTensor] = None, + added_cond_kwargs: Optional[Dict[str, torch.Tensor]] = None, + ) -> torch.FloatTensor: + # Notice that normalization is always applied before the real computation in the following blocks. + + # 0. Self-Attention + batch_size = hidden_states.shape[0] + + if self.use_ada_layer_norm: + norm_hidden_states = self.norm1(hidden_states, timestep) + elif self.use_ada_layer_norm_zero: + norm_hidden_states, gate_msa, shift_mlp, scale_mlp, gate_mlp = self.norm1( + hidden_states, timestep, class_labels, hidden_dtype=hidden_states.dtype + ) + elif self.use_layer_norm: + norm_hidden_states = self.norm1(hidden_states) + elif self.use_ada_layer_norm_continuous: + norm_hidden_states = self.norm1(hidden_states, added_cond_kwargs["pooled_text_emb"]) + elif self.use_ada_layer_norm_single: + shift_msa, scale_msa, gate_msa, shift_mlp, scale_mlp, gate_mlp = ( + self.scale_shift_table[None] + timestep.reshape(batch_size, 6, -1) + ).chunk(6, dim=1) + norm_hidden_states = self.norm1(hidden_states) + norm_hidden_states = norm_hidden_states * (1 + scale_msa) + shift_msa + norm_hidden_states = norm_hidden_states.squeeze(1) + else: + raise ValueError("Incorrect norm used") + + if self.pos_embed is not None: + norm_hidden_states = self.pos_embed(norm_hidden_states) + + # 1. Retrieve lora scale. + lora_scale = cross_attention_kwargs.get("scale", 1.0) if cross_attention_kwargs is not None else 1.0 + + # 2. Prepare GLIGEN inputs + cross_attention_kwargs = cross_attention_kwargs.copy() if cross_attention_kwargs is not None else {} + gligen_kwargs = cross_attention_kwargs.pop("gligen", None) + + attn_output = self.attn1( + norm_hidden_states, + encoder_hidden_states=encoder_hidden_states if self.only_cross_attention else None, + attention_mask=attention_mask, + **cross_attention_kwargs, + ) + if self.use_ada_layer_norm_zero: + attn_output = gate_msa.unsqueeze(1) * attn_output + elif self.use_ada_layer_norm_single: + attn_output = gate_msa * attn_output + + hidden_states = attn_output + hidden_states + if hidden_states.ndim == 4: + hidden_states = hidden_states.squeeze(1) + + # 2.5 GLIGEN Control + if gligen_kwargs is not None: + hidden_states = self.fuser(hidden_states, gligen_kwargs["objs"]) + + # 3. Cross-Attention + if self.attn2 is not None: + if self.use_ada_layer_norm: + norm_hidden_states = self.norm2(hidden_states, timestep) + elif self.use_ada_layer_norm_zero or self.use_layer_norm: + norm_hidden_states = self.norm2(hidden_states) + elif self.use_ada_layer_norm_single: + # For PixArt norm2 isn't applied here: + # https://github.com/PixArt-alpha/PixArt-alpha/blob/0f55e922376d8b797edd44d25d0e7464b260dcab/diffusion/model/nets/PixArtMS.py#L70C1-L76C103 + norm_hidden_states = hidden_states + elif self.use_ada_layer_norm_continuous: + norm_hidden_states = self.norm2(hidden_states, added_cond_kwargs["pooled_text_emb"]) + else: + raise ValueError("Incorrect norm") + + if self.pos_embed is not None and self.use_ada_layer_norm_single is False: + norm_hidden_states = self.pos_embed(norm_hidden_states) + + attn_output = self.attn2( + norm_hidden_states, + encoder_hidden_states=encoder_hidden_states, + attention_mask=encoder_attention_mask, + **cross_attention_kwargs, + ) + hidden_states = attn_output + hidden_states + + # 4. Feed-forward + if self.use_ada_layer_norm_continuous: + norm_hidden_states = self.norm3(hidden_states, added_cond_kwargs["pooled_text_emb"]) + elif not self.use_ada_layer_norm_single: + norm_hidden_states = self.norm3(hidden_states) + + if self.use_ada_layer_norm_zero: + norm_hidden_states = norm_hidden_states * (1 + scale_mlp[:, None]) + shift_mlp[:, None] + + if self.use_ada_layer_norm_single: + norm_hidden_states = self.norm2(hidden_states) + norm_hidden_states = norm_hidden_states * (1 + scale_mlp) + shift_mlp + + if self._chunk_size is not None: + # "feed_forward_chunk_size" can be used to save memory + ff_output = _chunked_feed_forward( + self.ff, norm_hidden_states, self._chunk_dim, self._chunk_size, lora_scale=lora_scale + ) + else: + ff_output = self.ff(norm_hidden_states, scale=lora_scale) + + if self.use_ada_layer_norm_zero: + ff_output = gate_mlp.unsqueeze(1) * ff_output + elif self.use_ada_layer_norm_single: + ff_output = gate_mlp * ff_output + + hidden_states = ff_output + hidden_states + if hidden_states.ndim == 4: + hidden_states = hidden_states.squeeze(1) + + return hidden_states + + +class CustomJointAttention(Attention): + def set_use_memory_efficient_attention_xformers( + self, use_memory_efficient_attention_xformers: bool, *args, **kwargs + ): + processor = XFormersJointAttnProcessor() + self.set_processor(processor) + # print("using xformers attention processor") + + +class XFormersJointAttnProcessor: + r""" + Default processor for performing attention-related computations. + """ + + def __call__( + self, + attn: Attention, + hidden_states, + encoder_hidden_states=None, + attention_mask=None, + temb=None, + num_tasks=2 + ): + + residual = hidden_states + + if attn.spatial_norm is not None: + hidden_states = attn.spatial_norm(hidden_states, temb) + + input_ndim = hidden_states.ndim + + if input_ndim == 4: + batch_size, channel, height, width = hidden_states.shape + hidden_states = hidden_states.view(batch_size, channel, height * width).transpose(1, 2) + + batch_size, sequence_length, _ = ( + hidden_states.shape if encoder_hidden_states is None else encoder_hidden_states.shape + ) + attention_mask = attn.prepare_attention_mask(attention_mask, sequence_length, batch_size) + + # from yuancheng; here attention_mask is None + if attention_mask is not None: + # expand our mask's singleton query_tokens dimension: + # [batch*heads, 1, key_tokens] -> + # [batch*heads, query_tokens, key_tokens] + # so that it can be added as a bias onto the attention scores that xformers computes: + # [batch*heads, query_tokens, key_tokens] + # we do this explicitly because xformers doesn't broadcast the singleton dimension for us. + _, query_tokens, _ = hidden_states.shape + attention_mask = attention_mask.expand(-1, query_tokens, -1) + + if attn.group_norm is not None: + hidden_states = attn.group_norm(hidden_states.transpose(1, 2)).transpose(1, 2) + + query = attn.to_q(hidden_states) + + if encoder_hidden_states is None: + encoder_hidden_states = hidden_states + elif attn.norm_cross: + encoder_hidden_states = attn.norm_encoder_hidden_states(encoder_hidden_states) + + key = attn.to_k(encoder_hidden_states) + value = attn.to_v(encoder_hidden_states) + + assert num_tasks == 2 # only support two tasks now + + key_0, key_1 = torch.chunk(key, dim=0, chunks=2) # keys shape (b t) d c + value_0, value_1 = torch.chunk(value, dim=0, chunks=2) + + # key = torch.cat([key_1, key_0], dim=0) + # value = torch.cat([value_1, value_0], dim=0) + + key = torch.cat([key_0, key_1], dim=1) # (b t) 2d c + value = torch.cat([value_0, value_1], dim=1) # (b t) 2d c + key = torch.cat([key]*2, dim=0) # (2 b t) 2d c + value = torch.cat([value]*2, dim=0) # (2 b t) 2d c + + query = attn.head_to_batch_dim(query).contiguous() + key = attn.head_to_batch_dim(key).contiguous() + value = attn.head_to_batch_dim(value).contiguous() + + hidden_states = xformers.ops.memory_efficient_attention(query, key, value, attn_bias=attention_mask) + hidden_states = attn.batch_to_head_dim(hidden_states) + + # linear proj + hidden_states = attn.to_out[0](hidden_states) + # dropout + hidden_states = attn.to_out[1](hidden_states) + + if input_ndim == 4: + hidden_states = hidden_states.transpose(-1, -2).reshape(batch_size, channel, height, width) + + if attn.residual_connection: + hidden_states = hidden_states + residual + + hidden_states = hidden_states / attn.rescale_output_factor + + return hidden_states + + +@maybe_allow_in_graph +class TemporalBasicTransformerBlock(nn.Module): + r""" + A basic Transformer block for video like data. + + Parameters: + dim (`int`): The number of channels in the input and output. + time_mix_inner_dim (`int`): The number of channels for temporal attention. + num_attention_heads (`int`): The number of heads to use for multi-head attention. + attention_head_dim (`int`): The number of channels in each head. + cross_attention_dim (`int`, *optional*): The size of the encoder_hidden_states vector for cross attention. + """ + + def __init__( + self, + dim: int, + time_mix_inner_dim: int, + num_attention_heads: int, + attention_head_dim: int, + cross_attention_dim: Optional[int] = None, + ): + super().__init__() + self.is_res = dim == time_mix_inner_dim + + self.norm_in = nn.LayerNorm(dim) + + # Define 3 blocks. Each block has its own normalization layer. + # 1. Self-Attn + self.norm_in = nn.LayerNorm(dim) + self.ff_in = FeedForward( + dim, + dim_out=time_mix_inner_dim, + activation_fn="geglu", + ) + + self.norm1 = nn.LayerNorm(time_mix_inner_dim) + self.attn1 = Attention( + query_dim=time_mix_inner_dim, + heads=num_attention_heads, + dim_head=attention_head_dim, + cross_attention_dim=None, + ) + + # 2. Cross-Attn + if cross_attention_dim is not None: + # We currently only use AdaLayerNormZero for self attention where there will only be one attention block. + # I.e. the number of returned modulation chunks from AdaLayerZero would not make sense if returned during + # the second cross attention block. + self.norm2 = nn.LayerNorm(time_mix_inner_dim) + self.attn2 = Attention( + query_dim=time_mix_inner_dim, + cross_attention_dim=cross_attention_dim, + heads=num_attention_heads, + dim_head=attention_head_dim, + ) # is self-attn if encoder_hidden_states is none + else: + self.norm2 = None + self.attn2 = None + + # 3. Feed-forward + self.norm3 = nn.LayerNorm(time_mix_inner_dim) + self.ff = FeedForward(time_mix_inner_dim, activation_fn="geglu") + + # let chunk size default to None + self._chunk_size = None + self._chunk_dim = None + + def set_chunk_feed_forward(self, chunk_size: Optional[int], **kwargs): + # Sets chunk feed-forward + self._chunk_size = chunk_size + # chunk dim should be hardcoded to 1 to have better speed vs. memory trade-off + self._chunk_dim = 1 + + def forward( + self, + hidden_states: torch.FloatTensor, + num_frames: int, + encoder_hidden_states: Optional[torch.FloatTensor] = None, + ) -> torch.FloatTensor: + # Notice that normalization is always applied before the real computation in the following blocks. + # 0. Self-Attention + batch_size = hidden_states.shape[0] + + batch_frames, seq_length, channels = hidden_states.shape + batch_size = batch_frames // num_frames + + hidden_states = hidden_states[None, :].reshape(batch_size, num_frames, seq_length, channels) + hidden_states = hidden_states.permute(0, 2, 1, 3) + hidden_states = hidden_states.reshape(batch_size * seq_length, num_frames, channels) + + residual = hidden_states + hidden_states = self.norm_in(hidden_states) + + if self._chunk_size is not None: + hidden_states = _chunked_feed_forward(self.ff_in, hidden_states, self._chunk_dim, self._chunk_size) + else: + hidden_states = self.ff_in(hidden_states) + + if self.is_res: + hidden_states = hidden_states + residual + + norm_hidden_states = self.norm1(hidden_states) + attn_output = self.attn1(norm_hidden_states, encoder_hidden_states=None) + hidden_states = attn_output + hidden_states + + # 3. Cross-Attention + if self.attn2 is not None: + norm_hidden_states = self.norm2(hidden_states) + attn_output = self.attn2(norm_hidden_states, encoder_hidden_states=encoder_hidden_states) + hidden_states = attn_output + hidden_states + + # 4. Feed-forward + norm_hidden_states = self.norm3(hidden_states) + + if self._chunk_size is not None: + ff_output = _chunked_feed_forward(self.ff, norm_hidden_states, self._chunk_dim, self._chunk_size) + else: + ff_output = self.ff(norm_hidden_states) + + if self.is_res: + hidden_states = ff_output + hidden_states + else: + hidden_states = ff_output + + hidden_states = hidden_states[None, :].reshape(batch_size, seq_length, num_frames, channels) + hidden_states = hidden_states.permute(0, 2, 1, 3) + hidden_states = hidden_states.reshape(batch_size * num_frames, seq_length, channels) + + return hidden_states + + +class SkipFFTransformerBlock(nn.Module): + def __init__( + self, + dim: int, + num_attention_heads: int, + attention_head_dim: int, + kv_input_dim: int, + kv_input_dim_proj_use_bias: bool, + dropout=0.0, + cross_attention_dim: Optional[int] = None, + attention_bias: bool = False, + attention_out_bias: bool = True, + ): + super().__init__() + if kv_input_dim != dim: + self.kv_mapper = nn.Linear(kv_input_dim, dim, kv_input_dim_proj_use_bias) + else: + self.kv_mapper = None + + self.norm1 = RMSNorm(dim, 1e-06) + + self.attn1 = Attention( + query_dim=dim, + heads=num_attention_heads, + dim_head=attention_head_dim, + dropout=dropout, + bias=attention_bias, + cross_attention_dim=cross_attention_dim, + out_bias=attention_out_bias, + ) + + self.norm2 = RMSNorm(dim, 1e-06) + + self.attn2 = Attention( + query_dim=dim, + cross_attention_dim=cross_attention_dim, + heads=num_attention_heads, + dim_head=attention_head_dim, + dropout=dropout, + bias=attention_bias, + out_bias=attention_out_bias, + ) + + def forward(self, hidden_states, encoder_hidden_states, cross_attention_kwargs): + cross_attention_kwargs = cross_attention_kwargs.copy() if cross_attention_kwargs is not None else {} + + if self.kv_mapper is not None: + encoder_hidden_states = self.kv_mapper(F.silu(encoder_hidden_states)) + + norm_hidden_states = self.norm1(hidden_states) + + attn_output = self.attn1( + norm_hidden_states, + encoder_hidden_states=encoder_hidden_states, + **cross_attention_kwargs, + ) + + hidden_states = attn_output + hidden_states + + norm_hidden_states = self.norm2(hidden_states) + + attn_output = self.attn2( + norm_hidden_states, + encoder_hidden_states=encoder_hidden_states, + **cross_attention_kwargs, + ) + + hidden_states = attn_output + hidden_states + + return hidden_states + + +class FeedForward(nn.Module): + r""" + A feed-forward layer. + + Parameters: + dim (`int`): The number of channels in the input. + dim_out (`int`, *optional*): The number of channels in the output. If not given, defaults to `dim`. + mult (`int`, *optional*, defaults to 4): The multiplier to use for the hidden dimension. + dropout (`float`, *optional*, defaults to 0.0): The dropout probability to use. + activation_fn (`str`, *optional*, defaults to `"geglu"`): Activation function to be used in feed-forward. + final_dropout (`bool` *optional*, defaults to False): Apply a final dropout. + bias (`bool`, defaults to True): Whether to use a bias in the linear layer. + """ + + def __init__( + self, + dim: int, + dim_out: Optional[int] = None, + mult: int = 4, + dropout: float = 0.0, + activation_fn: str = "geglu", + final_dropout: bool = False, + inner_dim=None, + bias: bool = True, + ): + super().__init__() + if inner_dim is None: + inner_dim = int(dim * mult) + dim_out = dim_out if dim_out is not None else dim + linear_cls = LoRACompatibleLinear if not USE_PEFT_BACKEND else nn.Linear + + if activation_fn == "gelu": + act_fn = GELU(dim, inner_dim, bias=bias) + if activation_fn == "gelu-approximate": + act_fn = GELU(dim, inner_dim, approximate="tanh", bias=bias) + elif activation_fn == "geglu": + act_fn = GEGLU(dim, inner_dim, bias=bias) + elif activation_fn == "geglu-approximate": + act_fn = ApproximateGELU(dim, inner_dim, bias=bias) + + self.net = nn.ModuleList([]) + # project in + self.net.append(act_fn) + # project dropout + self.net.append(nn.Dropout(dropout)) + # project out + self.net.append(linear_cls(inner_dim, dim_out, bias=bias)) + # FF as used in Vision Transformer, MLP-Mixer, etc. have a final dropout + if final_dropout: + self.net.append(nn.Dropout(dropout)) + + def forward(self, hidden_states: torch.Tensor, scale: float = 1.0) -> torch.Tensor: + compatible_cls = (GEGLU,) if USE_PEFT_BACKEND else (GEGLU, LoRACompatibleLinear) + for module in self.net: + if isinstance(module, compatible_cls): + hidden_states = module(hidden_states, scale) + else: + hidden_states = module(hidden_states) + return hidden_states diff --git a/models/depth_normal_pipeline_clip.py b/models/depth_normal_pipeline_clip.py new file mode 100644 index 0000000..dafb400 --- /dev/null +++ b/models/depth_normal_pipeline_clip.py @@ -0,0 +1,380 @@ +# A reimplemented version in public environments by Xiao Fu and Mu Hu + +from typing import Any, Dict, Union + +import torch +from torch.utils.data import DataLoader, TensorDataset +import numpy as np +from tqdm.auto import tqdm +from PIL import Image +from diffusers import ( + DiffusionPipeline, + DDIMScheduler, + AutoencoderKL, +) +from .unet_2d_condition import UNet2DConditionModel +from diffusers.utils import BaseOutput +from transformers import CLIPTextModel, CLIPTokenizer +from transformers import CLIPImageProcessor, CLIPVisionModelWithProjection +import torchvision.transforms.functional as TF +from torchvision.transforms import InterpolationMode + +from ..utils.image_util import resize_max_res,chw2hwc,colorize_depth_maps +from ..utils.colormap import kitti_colormap +from ..utils.depth_ensemble import ensemble_depths +from ..utils.normal_ensemble import ensemble_normals +from ..utils.batch_size import find_batch_size +import cv2 +import comfy.utils + +class DepthNormalPipelineOutput(BaseOutput): + """ + Output class for Marigold monocular depth prediction pipeline. + + Args: + depth_np (`np.ndarray`): + Predicted depth map, with depth values in the range of [0, 1]. + depth_colored (`PIL.Image.Image`): + Colorized depth map, with the shape of [3, H, W] and values in [0, 1]. + normal_np (`np.ndarray`): + Predicted normal map, with depth values in the range of [0, 1]. + normal_colored (`PIL.Image.Image`): + Colorized normal map, with the shape of [3, H, W] and values in [0, 1]. + uncertainty (`None` or `np.ndarray`): + Uncalibrated uncertainty(MAD, median absolute deviation) coming from ensembling. + """ + depth_np: np.ndarray + depth_colored: Image.Image + normal_np: np.ndarray + normal_colored: Image.Image + uncertainty: Union[None, np.ndarray] + +class DepthNormalEstimationPipeline(DiffusionPipeline): + # two hyper-parameters + latent_scale_factor = 0.18215 + + def __init__(self, + unet:UNet2DConditionModel, + vae:AutoencoderKL, + scheduler:DDIMScheduler, + image_encoder:CLIPVisionModelWithProjection, + feature_extractor:CLIPImageProcessor, + ): + super().__init__() + + self.register_modules( + unet=unet, + vae=vae, + scheduler=scheduler, + image_encoder=image_encoder, + feature_extractor=feature_extractor, + ) + self.img_embed = None + + @torch.no_grad() + def __call__(self, + input_image: torch.Tensor, + device, + denoising_steps: int = 10, + ensemble_size: int = 10, + processing_res: int = 768, + match_input_res:bool =True, + batch_size:int = 0, + domain: str = "indoor", + seed: int = 0, + color_map: str="Spectral", + show_progress_bar:bool = True, + ensemble_kwargs: Dict = None, + ) -> DepthNormalPipelineOutput: + + # inherit from thea Diffusion Pipeline + device = self.device + #input_size = input_image.size + _, height, width = input_image.size() + input_size = (width, height) + + # adjust the input resolution. + if not match_input_res: + assert ( + processing_res is not None + )," Value Error: `resize_output_back` is only valid with " + + assert processing_res >=0 + assert denoising_steps >=1 + assert ensemble_size >=1 + + # --------------- Image Processing ------------------------ + # Resize image + # if processing_res >0: + # input_image = resize_max_res( + # input_image, max_edge_resolution=processing_res + # ) + + # Convert the image to RGB, to 1. reomve the alpha channel. + #input_image = input_image.convert("RGB") + #image = np.array(input_image) + + rgb_norm = input_image * 2.0 - 1.0 + rgb_norm = torch.clamp(rgb_norm, min=-1.0, max=1.0) + rgb_norm = rgb_norm.to(dtype=self.dtype, device=device) + + assert rgb_norm.min() >= -1.0 and rgb_norm.max() <= 1.0 + + # ----------------- predicting depth ----------------- + duplicated_rgb = torch.stack([rgb_norm] * ensemble_size) + single_rgb_dataset = TensorDataset(duplicated_rgb) + + # find the batch size + if batch_size>0: + _bs = batch_size + else: + _bs = 1 + + single_rgb_loader = DataLoader(single_rgb_dataset, batch_size=_bs, shuffle=False) + + # predicted the depth + depth_pred_ls = [] + normal_pred_ls = [] + + if show_progress_bar: + iterable_bar = tqdm( + single_rgb_loader, desc=" " * 2 + "Inference batches", leave=False + ) + else: + iterable_bar = single_rgb_loader + + pbar_1 = comfy.utils.ProgressBar(len(single_rgb_dataset)) + for batch in iterable_bar: + (batched_image, )= batch # here the image is still around 0-1 + + depth_pred_raw, normal_pred_raw = self.single_infer( + input_rgb=batched_image, + num_inference_steps=denoising_steps, + domain=domain, + seed=seed, + show_pbar=show_progress_bar, + ) + depth_pred_ls.append(depth_pred_raw.detach().clone()) + normal_pred_ls.append(normal_pred_raw.detach().clone()) + pbar_1.update(1) + + depth_preds = torch.concat(depth_pred_ls, axis=0).squeeze() #(10,224,768) + normal_preds = torch.concat(normal_pred_ls, axis=0).squeeze() + torch.cuda.empty_cache() # clear vram cache for ensembling + + # ----------------- Test-time ensembling ----------------- + if ensemble_size > 1: + depth_pred, pred_uncert = ensemble_depths( + depth_preds, **(ensemble_kwargs or {}) + ) + normal_pred = ensemble_normals(normal_preds) + else: + depth_pred = depth_preds + normal_pred = normal_preds + pred_uncert = None + + # ----------------- Post processing ----------------- + # Scale prediction to [0, 1] + min_d = torch.min(depth_pred) + max_d = torch.max(depth_pred) + depth_pred_tensor = (depth_pred - min_d) / (max_d - min_d) + + # Convert to numpy + depth_pred = depth_pred.cpu().numpy().astype(np.float32) + normal_pred = normal_pred.cpu().numpy().astype(np.float32) + + # Resize back to original resolution + if match_input_res: + pred_img = Image.fromarray(depth_pred) + pred_img = pred_img.resize(input_size) + depth_pred = np.asarray(pred_img) + normal_pred = cv2.resize(chw2hwc(normal_pred), input_size, interpolation = cv2.INTER_NEAREST) + + # Clip output range: current size is the original size + depth_pred = depth_pred.clip(0, 1) + normal_pred = normal_pred.clip(-1, 1) + + # Colorize + depth_colored = colorize_depth_maps( + depth_pred, 0, 1, cmap=color_map + ).squeeze() # [3, H, W], value in (0, 1) + depth_colored = (depth_colored * 255).astype(np.uint8) + depth_colored_hwc = chw2hwc(depth_colored) + depth_colored_img = Image.fromarray(depth_colored_hwc) + + normal_colored = ((normal_pred + 1)/2 * 255).astype(np.uint8) + normal_colored_img = Image.fromarray(normal_colored) + + return DepthNormalPipelineOutput( + depth_np = depth_pred, + depth_pred_tensor = depth_pred_tensor, + depth_colored = depth_colored_img, + normal_np = normal_pred, + normal_colored = normal_colored_img, + uncertainty=pred_uncert, + ) + + def __encode_img_embed(self, rgb): + """ + Encode clip embeddings for img + """ + clip_image_mean = torch.as_tensor(self.feature_extractor.image_mean)[:,None,None].to(device=self.device, dtype=self.dtype) + clip_image_std = torch.as_tensor(self.feature_extractor.image_std)[:,None,None].to(device=self.device, dtype=self.dtype) + + img_in_proc = TF.resize((rgb +1)/2, + (self.feature_extractor.crop_size['height'], self.feature_extractor.crop_size['width']), + interpolation=InterpolationMode.BICUBIC, + antialias=True + ) + # do the normalization in float32 to preserve precision + img_in_proc = ((img_in_proc.float() - clip_image_mean) / clip_image_std).to(self.dtype) + img_embed = self.image_encoder(img_in_proc).image_embeds.unsqueeze(1).to(self.dtype) + + self.img_embed = img_embed + + + @torch.no_grad() + def single_infer(self,input_rgb:torch.Tensor, + num_inference_steps:int, + domain:str, + seed: int, + show_pbar:bool,): + + device = input_rgb.device + + # Set timesteps: inherit from the diffuison pipeline + self.scheduler.set_timesteps(num_inference_steps, device=device) # here the numbers of the steps is only 10. + timesteps = self.scheduler.timesteps # [T] + + # encode image + rgb_latent = self.encode_RGB(input_rgb) + + # Initial depth map (Guassian noise) + if seed >= 0: + torch.manual_seed(0) + geo_latent = torch.randn(rgb_latent.shape, device=device, dtype=self.dtype).repeat(2,1,1,1) + rgb_latent = rgb_latent.repeat(2,1,1,1) + + # Batched img embedding + if self.img_embed is None: + self.__encode_img_embed(input_rgb) + + batch_img_embed = self.img_embed.repeat( + (rgb_latent.shape[0], 1, 1) + ) # [B, 1, 768] + + # hybrid hierarchical switcher + geo_class = torch.tensor([[0., 1.], [1, 0]], device=device, dtype=self.dtype) + geo_embedding = torch.cat([torch.sin(geo_class), torch.cos(geo_class)], dim=-1) + + if domain == "indoor": + domain_class = torch.tensor([[1., 0., 0]], device=device, dtype=self.dtype).repeat(2,1) + elif domain == "outdoor": + domain_class = torch.tensor([[0., 1., 0]], device=device, dtype=self.dtype).repeat(2,1) + elif domain == "object": + domain_class = torch.tensor([[0., 0., 1]], device=device, dtype=self.dtype).repeat(2,1) + domain_embedding = torch.cat([torch.sin(domain_class), torch.cos(domain_class)], dim=-1) + + class_embedding = torch.cat((geo_embedding, domain_embedding), dim=-1) + + # Denoising loop + if show_pbar: + iterable = tqdm( + enumerate(timesteps), + total=len(timesteps), + leave=False, + desc=" " * 4 + "Diffusion denoising", + ) + else: + iterable = enumerate(timesteps) + + #pbar_2 = comfy.utils.ProgressBar(len(timesteps)) + for i, t in iterable: + unet_input = torch.cat([rgb_latent, geo_latent], dim=1) + + # predict the noise residual + noise_pred = self.unet( + unet_input, t.repeat(2), encoder_hidden_states=batch_img_embed, class_labels=class_embedding + ).sample # [B, 4, h, w] + + # compute the previous noisy sample x_t -> x_t-1 + geo_latent = self.scheduler.step(noise_pred, t, geo_latent).prev_sample + #pbar_2.update(1) + + geo_latent = geo_latent + torch.cuda.empty_cache() + + depth = self.decode_depth(geo_latent[0][None]) + depth = torch.clip(depth, -1.0, 1.0) + depth = (depth + 1.0) / 2.0 + + normal = self.decode_normal(geo_latent[1][None]) + normal /= (torch.norm(normal, p=2, dim=1, keepdim=True)+1e-5) + normal *= -1. + + return depth, normal + + + def encode_RGB(self, rgb_in: torch.Tensor) -> torch.Tensor: + """ + Encode RGB image into latent. + + Args: + rgb_in (`torch.Tensor`): + Input RGB image to be encoded. + + Returns: + `torch.Tensor`: Image latent. + """ + + # encode + h = self.vae.encoder(rgb_in) + + moments = self.vae.quant_conv(h) + mean, logvar = torch.chunk(moments, 2, dim=1) + # scale latent + rgb_latent = mean * self.latent_scale_factor + + return rgb_latent + + def decode_depth(self, depth_latent: torch.Tensor) -> torch.Tensor: + """ + Decode depth latent into depth map. + + Args: + depth_latent (`torch.Tensor`): + Depth latent to be decoded. + + Returns: + `torch.Tensor`: Decoded depth map. + """ + + # scale latent + depth_latent = depth_latent / self.latent_scale_factor + # decode + z = self.vae.post_quant_conv(depth_latent) + stacked = self.vae.decoder(z) + # mean of output channels + depth_mean = stacked.mean(dim=1, keepdim=True) + return depth_mean + + def decode_normal(self, normal_latent: torch.Tensor) -> torch.Tensor: + """ + Decode normal latent into normal map. + + Args: + normal_latent (`torch.Tensor`): + Depth latent to be decoded. + + Returns: + `torch.Tensor`: Decoded normal map. + """ + + # scale latent + normal_latent = normal_latent / self.latent_scale_factor + # decode + z = self.vae.post_quant_conv(normal_latent) + normal = self.vae.decoder(z) + return normal + + diff --git a/models/transformer_2d.py b/models/transformer_2d.py new file mode 100644 index 0000000..ac53937 --- /dev/null +++ b/models/transformer_2d.py @@ -0,0 +1,463 @@ +# Copyright 2023 The HuggingFace Team. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Some modifications are reimplemented in public environments by Xiao Fu and Mu Hu + +from dataclasses import dataclass +from typing import Any, Dict, Optional + +import torch +import torch.nn.functional as F +from torch import nn + +from diffusers.configuration_utils import ConfigMixin, register_to_config +from diffusers.models.embeddings import ImagePositionalEmbeddings +from diffusers.utils import USE_PEFT_BACKEND, BaseOutput, deprecate, is_torch_version +from .attention import BasicTransformerBlock +from diffusers.models.embeddings import PatchEmbed, PixArtAlphaTextProjection +from diffusers.models.lora import LoRACompatibleConv, LoRACompatibleLinear +from diffusers.models.modeling_utils import ModelMixin +from diffusers.models.normalization import AdaLayerNormSingle + + +@dataclass +class Transformer2DModelOutput(BaseOutput): + """ + The output of [`Transformer2DModel`]. + + Args: + sample (`torch.FloatTensor` of shape `(batch_size, num_channels, height, width)` or `(batch size, num_vector_embeds - 1, num_latent_pixels)` if [`Transformer2DModel`] is discrete): + The hidden states output conditioned on the `encoder_hidden_states` input. If discrete, returns probability + distributions for the unnoised latent pixels. + """ + + sample: torch.FloatTensor + + +class Transformer2DModel(ModelMixin, ConfigMixin): + """ + A 2D Transformer model for image-like data. + + Parameters: + num_attention_heads (`int`, *optional*, defaults to 16): The number of heads to use for multi-head attention. + attention_head_dim (`int`, *optional*, defaults to 88): The number of channels in each head. + in_channels (`int`, *optional*): + The number of channels in the input and output (specify if the input is **continuous**). + num_layers (`int`, *optional*, defaults to 1): The number of layers of Transformer blocks to use. + dropout (`float`, *optional*, defaults to 0.0): The dropout probability to use. + cross_attention_dim (`int`, *optional*): The number of `encoder_hidden_states` dimensions to use. + sample_size (`int`, *optional*): The width of the latent images (specify if the input is **discrete**). + This is fixed during training since it is used to learn a number of position embeddings. + num_vector_embeds (`int`, *optional*): + The number of classes of the vector embeddings of the latent pixels (specify if the input is **discrete**). + Includes the class for the masked latent pixel. + activation_fn (`str`, *optional*, defaults to `"geglu"`): Activation function to use in feed-forward. + num_embeds_ada_norm ( `int`, *optional*): + The number of diffusion steps used during training. Pass if at least one of the norm_layers is + `AdaLayerNorm`. This is fixed during training since it is used to learn a number of embeddings that are + added to the hidden states. + + During inference, you can denoise for up to but not more steps than `num_embeds_ada_norm`. + attention_bias (`bool`, *optional*): + Configure if the `TransformerBlocks` attention should contain a bias parameter. + """ + + _supports_gradient_checkpointing = True + + @register_to_config + def __init__( + self, + num_attention_heads: int = 16, + attention_head_dim: int = 88, + in_channels: Optional[int] = None, + out_channels: Optional[int] = None, + num_layers: int = 1, + dropout: float = 0.0, + norm_num_groups: int = 32, + cross_attention_dim: Optional[int] = None, + attention_bias: bool = False, + sample_size: Optional[int] = None, + num_vector_embeds: Optional[int] = None, + patch_size: Optional[int] = None, + activation_fn: str = "geglu", + num_embeds_ada_norm: Optional[int] = None, + use_linear_projection: bool = False, + only_cross_attention: bool = False, + double_self_attention: bool = False, + upcast_attention: bool = False, + norm_type: str = "layer_norm", + norm_elementwise_affine: bool = True, + norm_eps: float = 1e-5, + attention_type: str = "default", + caption_channels: int = None, + ): + super().__init__() + self.use_linear_projection = use_linear_projection + self.num_attention_heads = num_attention_heads + self.attention_head_dim = attention_head_dim + inner_dim = num_attention_heads * attention_head_dim + + conv_cls = nn.Conv2d if USE_PEFT_BACKEND else LoRACompatibleConv + linear_cls = nn.Linear if USE_PEFT_BACKEND else LoRACompatibleLinear + + # 1. Transformer2DModel can process both standard continuous images of shape `(batch_size, num_channels, width, height)` as well as quantized image embeddings of shape `(batch_size, num_image_vectors)` + # Define whether input is continuous or discrete depending on configuration + self.is_input_continuous = (in_channels is not None) and (patch_size is None) + self.is_input_vectorized = num_vector_embeds is not None + self.is_input_patches = in_channels is not None and patch_size is not None + + if norm_type == "layer_norm" and num_embeds_ada_norm is not None: + deprecation_message = ( + f"The configuration file of this model: {self.__class__} is outdated. `norm_type` is either not set or" + " incorrectly set to `'layer_norm'`.Make sure to set `norm_type` to `'ada_norm'` in the config." + " Please make sure to update the config accordingly as leaving `norm_type` might led to incorrect" + " results in future versions. If you have downloaded this checkpoint from the Hugging Face Hub, it" + " would be very nice if you could open a Pull request for the `transformer/config.json` file" + ) + deprecate("norm_type!=num_embeds_ada_norm", "1.0.0", deprecation_message, standard_warn=False) + norm_type = "ada_norm" + + if self.is_input_continuous and self.is_input_vectorized: + raise ValueError( + f"Cannot define both `in_channels`: {in_channels} and `num_vector_embeds`: {num_vector_embeds}. Make" + " sure that either `in_channels` or `num_vector_embeds` is None." + ) + elif self.is_input_vectorized and self.is_input_patches: + raise ValueError( + f"Cannot define both `num_vector_embeds`: {num_vector_embeds} and `patch_size`: {patch_size}. Make" + " sure that either `num_vector_embeds` or `num_patches` is None." + ) + elif not self.is_input_continuous and not self.is_input_vectorized and not self.is_input_patches: + raise ValueError( + f"Has to define `in_channels`: {in_channels}, `num_vector_embeds`: {num_vector_embeds}, or patch_size:" + f" {patch_size}. Make sure that `in_channels`, `num_vector_embeds` or `num_patches` is not None." + ) + + # 2. Define input layers + if self.is_input_continuous: + self.in_channels = in_channels + + self.norm = torch.nn.GroupNorm(num_groups=norm_num_groups, num_channels=in_channels, eps=1e-6, affine=True) + if use_linear_projection: + self.proj_in = linear_cls(in_channels, inner_dim) + else: + self.proj_in = conv_cls(in_channels, inner_dim, kernel_size=1, stride=1, padding=0) + elif self.is_input_vectorized: + assert sample_size is not None, "Transformer2DModel over discrete input must provide sample_size" + assert num_vector_embeds is not None, "Transformer2DModel over discrete input must provide num_embed" + + self.height = sample_size + self.width = sample_size + self.num_vector_embeds = num_vector_embeds + self.num_latent_pixels = self.height * self.width + + self.latent_image_embedding = ImagePositionalEmbeddings( + num_embed=num_vector_embeds, embed_dim=inner_dim, height=self.height, width=self.width + ) + elif self.is_input_patches: + assert sample_size is not None, "Transformer2DModel over patched input must provide sample_size" + + self.height = sample_size + self.width = sample_size + + self.patch_size = patch_size + interpolation_scale = self.config.sample_size // 64 # => 64 (= 512 pixart) has interpolation scale 1 + interpolation_scale = max(interpolation_scale, 1) + self.pos_embed = PatchEmbed( + height=sample_size, + width=sample_size, + patch_size=patch_size, + in_channels=in_channels, + embed_dim=inner_dim, + interpolation_scale=interpolation_scale, + ) + + # 3. Define transformers blocks + self.transformer_blocks = nn.ModuleList( + [ + BasicTransformerBlock( + inner_dim, + num_attention_heads, + attention_head_dim, + dropout=dropout, + cross_attention_dim=cross_attention_dim, + activation_fn=activation_fn, + num_embeds_ada_norm=num_embeds_ada_norm, + attention_bias=attention_bias, + only_cross_attention=only_cross_attention, + double_self_attention=double_self_attention, + upcast_attention=upcast_attention, + norm_type=norm_type, + norm_elementwise_affine=norm_elementwise_affine, + norm_eps=norm_eps, + attention_type=attention_type, + ) + for d in range(num_layers) + ] + ) + + # 4. Define output layers + self.out_channels = in_channels if out_channels is None else out_channels + if self.is_input_continuous: + # TODO: should use out_channels for continuous projections + if use_linear_projection: + self.proj_out = linear_cls(inner_dim, in_channels) + else: + self.proj_out = conv_cls(inner_dim, in_channels, kernel_size=1, stride=1, padding=0) + elif self.is_input_vectorized: + self.norm_out = nn.LayerNorm(inner_dim) + self.out = nn.Linear(inner_dim, self.num_vector_embeds - 1) + elif self.is_input_patches and norm_type != "ada_norm_single": + self.norm_out = nn.LayerNorm(inner_dim, elementwise_affine=False, eps=1e-6) + self.proj_out_1 = nn.Linear(inner_dim, 2 * inner_dim) + self.proj_out_2 = nn.Linear(inner_dim, patch_size * patch_size * self.out_channels) + elif self.is_input_patches and norm_type == "ada_norm_single": + self.norm_out = nn.LayerNorm(inner_dim, elementwise_affine=False, eps=1e-6) + self.scale_shift_table = nn.Parameter(torch.randn(2, inner_dim) / inner_dim**0.5) + self.proj_out = nn.Linear(inner_dim, patch_size * patch_size * self.out_channels) + + # 5. PixArt-Alpha blocks. + self.adaln_single = None + self.use_additional_conditions = False + if norm_type == "ada_norm_single": + self.use_additional_conditions = self.config.sample_size == 128 + # TODO(Sayak, PVP) clean this, for now we use sample size to determine whether to use + # additional conditions until we find better name + self.adaln_single = AdaLayerNormSingle(inner_dim, use_additional_conditions=self.use_additional_conditions) + + self.caption_projection = None + if caption_channels is not None: + self.caption_projection = PixArtAlphaTextProjection(in_features=caption_channels, hidden_size=inner_dim) + + self.gradient_checkpointing = False + + def _set_gradient_checkpointing(self, module, value=False): + if hasattr(module, "gradient_checkpointing"): + module.gradient_checkpointing = value + + def forward( + self, + hidden_states: torch.Tensor, + encoder_hidden_states: Optional[torch.Tensor] = None, + timestep: Optional[torch.LongTensor] = None, + added_cond_kwargs: Dict[str, torch.Tensor] = None, + class_labels: Optional[torch.LongTensor] = None, + cross_attention_kwargs: Dict[str, Any] = None, + attention_mask: Optional[torch.Tensor] = None, + encoder_attention_mask: Optional[torch.Tensor] = None, + return_dict: bool = True, + ): + """ + The [`Transformer2DModel`] forward method. + + Args: + hidden_states (`torch.LongTensor` of shape `(batch size, num latent pixels)` if discrete, `torch.FloatTensor` of shape `(batch size, channel, height, width)` if continuous): + Input `hidden_states`. + encoder_hidden_states ( `torch.FloatTensor` of shape `(batch size, sequence len, embed dims)`, *optional*): + Conditional embeddings for cross attention layer. If not given, cross-attention defaults to + self-attention. + timestep ( `torch.LongTensor`, *optional*): + Used to indicate denoising step. Optional timestep to be applied as an embedding in `AdaLayerNorm`. + class_labels ( `torch.LongTensor` of shape `(batch size, num classes)`, *optional*): + Used to indicate class labels conditioning. Optional class labels to be applied as an embedding in + `AdaLayerZeroNorm`. + cross_attention_kwargs ( `Dict[str, Any]`, *optional*): + A kwargs dictionary that if specified is passed along to the `AttentionProcessor` as defined under + `self.processor` in + [diffusers.models.attention_processor](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/attention_processor.py). + attention_mask ( `torch.Tensor`, *optional*): + An attention mask of shape `(batch, key_tokens)` is applied to `encoder_hidden_states`. If `1` the mask + is kept, otherwise if `0` it is discarded. Mask will be converted into a bias, which adds large + negative values to the attention scores corresponding to "discard" tokens. + encoder_attention_mask ( `torch.Tensor`, *optional*): + Cross-attention mask applied to `encoder_hidden_states`. Two formats supported: + + * Mask `(batch, sequence_length)` True = keep, False = discard. + * Bias `(batch, 1, sequence_length)` 0 = keep, -10000 = discard. + + If `ndim == 2`: will be interpreted as a mask, then converted into a bias consistent with the format + above. This bias will be added to the cross-attention scores. + return_dict (`bool`, *optional*, defaults to `True`): + Whether or not to return a [`~models.unet_2d_condition.UNet2DConditionOutput`] instead of a plain + tuple. + + Returns: + If `return_dict` is True, an [`~models.transformer_2d.Transformer2DModelOutput`] is returned, otherwise a + `tuple` where the first element is the sample tensor. + """ + # ensure attention_mask is a bias, and give it a singleton query_tokens dimension. + # we may have done this conversion already, e.g. if we came here via UNet2DConditionModel#forward. + # we can tell by counting dims; if ndim == 2: it's a mask rather than a bias. + # expects mask of shape: + # [batch, key_tokens] + # adds singleton query_tokens dimension: + # [batch, 1, key_tokens] + # this helps to broadcast it as a bias over attention scores, which will be in one of the following shapes: + # [batch, heads, query_tokens, key_tokens] (e.g. torch sdp attn) + # [batch * heads, query_tokens, key_tokens] (e.g. xformers or classic attn) + + if attention_mask is not None and attention_mask.ndim == 2: + # assume that mask is expressed as: + # (1 = keep, 0 = discard) + # convert mask into a bias that can be added to attention scores: + # (keep = +0, discard = -10000.0) + attention_mask = (1 - attention_mask.to(hidden_states.dtype)) * -10000.0 + attention_mask = attention_mask.unsqueeze(1) + + # convert encoder_attention_mask to a bias the same way we do for attention_mask + if encoder_attention_mask is not None and encoder_attention_mask.ndim == 2: + encoder_attention_mask = (1 - encoder_attention_mask.to(hidden_states.dtype)) * -10000.0 + encoder_attention_mask = encoder_attention_mask.unsqueeze(1) + + # Retrieve lora scale. + lora_scale = cross_attention_kwargs.get("scale", 1.0) if cross_attention_kwargs is not None else 1.0 + + # 1. Input + if self.is_input_continuous: + batch, _, height, width = hidden_states.shape + residual = hidden_states + + hidden_states = self.norm(hidden_states) + if not self.use_linear_projection: + hidden_states = ( + self.proj_in(hidden_states, scale=lora_scale) + if not USE_PEFT_BACKEND + else self.proj_in(hidden_states) + ) + inner_dim = hidden_states.shape[1] + hidden_states = hidden_states.permute(0, 2, 3, 1).reshape(batch, height * width, inner_dim) + else: + inner_dim = hidden_states.shape[1] + hidden_states = hidden_states.permute(0, 2, 3, 1).reshape(batch, height * width, inner_dim) + hidden_states = ( + self.proj_in(hidden_states, scale=lora_scale) + if not USE_PEFT_BACKEND + else self.proj_in(hidden_states) + ) + + elif self.is_input_vectorized: + hidden_states = self.latent_image_embedding(hidden_states) + elif self.is_input_patches: + height, width = hidden_states.shape[-2] // self.patch_size, hidden_states.shape[-1] // self.patch_size + hidden_states = self.pos_embed(hidden_states) + + if self.adaln_single is not None: + if self.use_additional_conditions and added_cond_kwargs is None: + raise ValueError( + "`added_cond_kwargs` cannot be None when using additional conditions for `adaln_single`." + ) + batch_size = hidden_states.shape[0] + timestep, embedded_timestep = self.adaln_single( + timestep, added_cond_kwargs, batch_size=batch_size, hidden_dtype=hidden_states.dtype + ) + + # 2. Blocks + if self.caption_projection is not None: + batch_size = hidden_states.shape[0] + encoder_hidden_states = self.caption_projection(encoder_hidden_states) + encoder_hidden_states = encoder_hidden_states.view(batch_size, -1, hidden_states.shape[-1]) + + for block in self.transformer_blocks: + if self.training and self.gradient_checkpointing: + + def create_custom_forward(module, return_dict=None): + def custom_forward(*inputs): + if return_dict is not None: + return module(*inputs, return_dict=return_dict) + else: + return module(*inputs) + + return custom_forward + + ckpt_kwargs: Dict[str, Any] = {"use_reentrant": False} if is_torch_version(">=", "1.11.0") else {} + hidden_states = torch.utils.checkpoint.checkpoint( + create_custom_forward(block), + hidden_states, + attention_mask, + encoder_hidden_states, + encoder_attention_mask, + timestep, + cross_attention_kwargs, + class_labels, + **ckpt_kwargs, + ) + else: + hidden_states = block( + hidden_states, + attention_mask=attention_mask, + encoder_hidden_states=encoder_hidden_states, + encoder_attention_mask=encoder_attention_mask, + timestep=timestep, + cross_attention_kwargs=cross_attention_kwargs, + class_labels=class_labels, + ) + + # 3. Output + if self.is_input_continuous: + if not self.use_linear_projection: + hidden_states = hidden_states.reshape(batch, height, width, inner_dim).permute(0, 3, 1, 2).contiguous() + hidden_states = ( + self.proj_out(hidden_states, scale=lora_scale) + if not USE_PEFT_BACKEND + else self.proj_out(hidden_states) + ) + else: + hidden_states = ( + self.proj_out(hidden_states, scale=lora_scale) + if not USE_PEFT_BACKEND + else self.proj_out(hidden_states) + ) + hidden_states = hidden_states.reshape(batch, height, width, inner_dim).permute(0, 3, 1, 2).contiguous() + + output = hidden_states + residual + elif self.is_input_vectorized: + hidden_states = self.norm_out(hidden_states) + logits = self.out(hidden_states) + # (batch, self.num_vector_embeds - 1, self.num_latent_pixels) + logits = logits.permute(0, 2, 1) + + # log(p(x_0)) + output = F.log_softmax(logits.double(), dim=1).float() + + if self.is_input_patches: + if self.config.norm_type != "ada_norm_single": + conditioning = self.transformer_blocks[0].norm1.emb( + timestep, class_labels, hidden_dtype=hidden_states.dtype + ) + shift, scale = self.proj_out_1(F.silu(conditioning)).chunk(2, dim=1) + hidden_states = self.norm_out(hidden_states) * (1 + scale[:, None]) + shift[:, None] + hidden_states = self.proj_out_2(hidden_states) + elif self.config.norm_type == "ada_norm_single": + shift, scale = (self.scale_shift_table[None] + embedded_timestep[:, None]).chunk(2, dim=1) + hidden_states = self.norm_out(hidden_states) + # Modulation + hidden_states = hidden_states * (1 + scale) + shift + hidden_states = self.proj_out(hidden_states) + hidden_states = hidden_states.squeeze(1) + + # unpatchify + if self.adaln_single is None: + height = width = int(hidden_states.shape[1] ** 0.5) + hidden_states = hidden_states.reshape( + shape=(-1, height, width, self.patch_size, self.patch_size, self.out_channels) + ) + hidden_states = torch.einsum("nhwpqc->nchpwq", hidden_states) + output = hidden_states.reshape( + shape=(-1, self.out_channels, height * self.patch_size, width * self.patch_size) + ) + + if not return_dict: + return (output,) + + return Transformer2DModelOutput(sample=output) diff --git a/models/unet_2d_blocks.py b/models/unet_2d_blocks.py new file mode 100644 index 0000000..f658be3 --- /dev/null +++ b/models/unet_2d_blocks.py @@ -0,0 +1,3494 @@ +# Copyright 2023 The HuggingFace Team. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Some modifications are reimplemented in public environments by Xiao Fu and Mu Hu + +from typing import Any, Dict, Optional, Tuple, Union + +import numpy as np +import torch +import torch.nn.functional as F +from torch import nn + +from diffusers.utils import is_torch_version, logging +from diffusers.utils.torch_utils import apply_freeu +from diffusers.models.activations import get_activation +from diffusers.models.attention_processor import Attention, AttnAddedKVProcessor, AttnAddedKVProcessor2_0 +from diffusers.models.dual_transformer_2d import DualTransformer2DModel +from diffusers.models.normalization import AdaGroupNorm +from diffusers.models.resnet import Downsample2D, FirDownsample2D, FirUpsample2D, KDownsample2D, KUpsample2D, ResnetBlock2D, Upsample2D +from .transformer_2d import Transformer2DModel + + +logger = logging.get_logger(__name__) # pylint: disable=invalid-name + + +def get_down_block( + down_block_type: str, + num_layers: int, + in_channels: int, + out_channels: int, + temb_channels: int, + add_downsample: bool, + resnet_eps: float, + resnet_act_fn: str, + transformer_layers_per_block: int = 1, + num_attention_heads: Optional[int] = None, + resnet_groups: Optional[int] = None, + cross_attention_dim: Optional[int] = None, + downsample_padding: Optional[int] = None, + dual_cross_attention: bool = False, + use_linear_projection: bool = False, + only_cross_attention: bool = False, + upcast_attention: bool = False, + resnet_time_scale_shift: str = "default", + attention_type: str = "default", + resnet_skip_time_act: bool = False, + resnet_out_scale_factor: float = 1.0, + cross_attention_norm: Optional[str] = None, + attention_head_dim: Optional[int] = None, + downsample_type: Optional[str] = None, + dropout: float = 0.0, +): + # If attn head dim is not defined, we default it to the number of heads + if attention_head_dim is None: + logger.warn( + f"It is recommended to provide `attention_head_dim` when calling `get_down_block`. Defaulting `attention_head_dim` to {num_attention_heads}." + ) + attention_head_dim = num_attention_heads + + down_block_type = down_block_type[7:] if down_block_type.startswith("UNetRes") else down_block_type + if down_block_type == "DownBlock2D": + return DownBlock2D( + num_layers=num_layers, + in_channels=in_channels, + out_channels=out_channels, + temb_channels=temb_channels, + dropout=dropout, + add_downsample=add_downsample, + resnet_eps=resnet_eps, + resnet_act_fn=resnet_act_fn, + resnet_groups=resnet_groups, + downsample_padding=downsample_padding, + resnet_time_scale_shift=resnet_time_scale_shift, + ) + elif down_block_type == "ResnetDownsampleBlock2D": + return ResnetDownsampleBlock2D( + num_layers=num_layers, + in_channels=in_channels, + out_channels=out_channels, + temb_channels=temb_channels, + dropout=dropout, + add_downsample=add_downsample, + resnet_eps=resnet_eps, + resnet_act_fn=resnet_act_fn, + resnet_groups=resnet_groups, + resnet_time_scale_shift=resnet_time_scale_shift, + skip_time_act=resnet_skip_time_act, + output_scale_factor=resnet_out_scale_factor, + ) + elif down_block_type == "AttnDownBlock2D": + if add_downsample is False: + downsample_type = None + else: + downsample_type = downsample_type or "conv" # default to 'conv' + return AttnDownBlock2D( + num_layers=num_layers, + in_channels=in_channels, + out_channels=out_channels, + temb_channels=temb_channels, + dropout=dropout, + resnet_eps=resnet_eps, + resnet_act_fn=resnet_act_fn, + resnet_groups=resnet_groups, + downsample_padding=downsample_padding, + attention_head_dim=attention_head_dim, + resnet_time_scale_shift=resnet_time_scale_shift, + downsample_type=downsample_type, + ) + elif down_block_type == "CrossAttnDownBlock2D": + if cross_attention_dim is None: + raise ValueError("cross_attention_dim must be specified for CrossAttnDownBlock2D") + return CrossAttnDownBlock2D( + num_layers=num_layers, + transformer_layers_per_block=transformer_layers_per_block, + in_channels=in_channels, + out_channels=out_channels, + temb_channels=temb_channels, + dropout=dropout, + add_downsample=add_downsample, + resnet_eps=resnet_eps, + resnet_act_fn=resnet_act_fn, + resnet_groups=resnet_groups, + downsample_padding=downsample_padding, + cross_attention_dim=cross_attention_dim, + num_attention_heads=num_attention_heads, + dual_cross_attention=dual_cross_attention, + use_linear_projection=use_linear_projection, + only_cross_attention=only_cross_attention, + upcast_attention=upcast_attention, + resnet_time_scale_shift=resnet_time_scale_shift, + attention_type=attention_type, + ) + elif down_block_type == "SimpleCrossAttnDownBlock2D": + if cross_attention_dim is None: + raise ValueError("cross_attention_dim must be specified for SimpleCrossAttnDownBlock2D") + return SimpleCrossAttnDownBlock2D( + num_layers=num_layers, + in_channels=in_channels, + out_channels=out_channels, + temb_channels=temb_channels, + dropout=dropout, + add_downsample=add_downsample, + resnet_eps=resnet_eps, + resnet_act_fn=resnet_act_fn, + resnet_groups=resnet_groups, + cross_attention_dim=cross_attention_dim, + attention_head_dim=attention_head_dim, + resnet_time_scale_shift=resnet_time_scale_shift, + skip_time_act=resnet_skip_time_act, + output_scale_factor=resnet_out_scale_factor, + only_cross_attention=only_cross_attention, + cross_attention_norm=cross_attention_norm, + ) + elif down_block_type == "SkipDownBlock2D": + return SkipDownBlock2D( + num_layers=num_layers, + in_channels=in_channels, + out_channels=out_channels, + temb_channels=temb_channels, + dropout=dropout, + add_downsample=add_downsample, + resnet_eps=resnet_eps, + resnet_act_fn=resnet_act_fn, + downsample_padding=downsample_padding, + resnet_time_scale_shift=resnet_time_scale_shift, + ) + elif down_block_type == "AttnSkipDownBlock2D": + return AttnSkipDownBlock2D( + num_layers=num_layers, + in_channels=in_channels, + out_channels=out_channels, + temb_channels=temb_channels, + dropout=dropout, + add_downsample=add_downsample, + resnet_eps=resnet_eps, + resnet_act_fn=resnet_act_fn, + attention_head_dim=attention_head_dim, + resnet_time_scale_shift=resnet_time_scale_shift, + ) + elif down_block_type == "DownEncoderBlock2D": + return DownEncoderBlock2D( + num_layers=num_layers, + in_channels=in_channels, + out_channels=out_channels, + dropout=dropout, + add_downsample=add_downsample, + resnet_eps=resnet_eps, + resnet_act_fn=resnet_act_fn, + resnet_groups=resnet_groups, + downsample_padding=downsample_padding, + resnet_time_scale_shift=resnet_time_scale_shift, + ) + elif down_block_type == "AttnDownEncoderBlock2D": + return AttnDownEncoderBlock2D( + num_layers=num_layers, + in_channels=in_channels, + out_channels=out_channels, + dropout=dropout, + add_downsample=add_downsample, + resnet_eps=resnet_eps, + resnet_act_fn=resnet_act_fn, + resnet_groups=resnet_groups, + downsample_padding=downsample_padding, + attention_head_dim=attention_head_dim, + resnet_time_scale_shift=resnet_time_scale_shift, + ) + elif down_block_type == "KDownBlock2D": + return KDownBlock2D( + num_layers=num_layers, + in_channels=in_channels, + out_channels=out_channels, + temb_channels=temb_channels, + dropout=dropout, + add_downsample=add_downsample, + resnet_eps=resnet_eps, + resnet_act_fn=resnet_act_fn, + ) + elif down_block_type == "KCrossAttnDownBlock2D": + return KCrossAttnDownBlock2D( + num_layers=num_layers, + in_channels=in_channels, + out_channels=out_channels, + temb_channels=temb_channels, + dropout=dropout, + add_downsample=add_downsample, + resnet_eps=resnet_eps, + resnet_act_fn=resnet_act_fn, + cross_attention_dim=cross_attention_dim, + attention_head_dim=attention_head_dim, + add_self_attention=True if not add_downsample else False, + ) + raise ValueError(f"{down_block_type} does not exist.") + + +def get_up_block( + up_block_type: str, + num_layers: int, + in_channels: int, + out_channels: int, + prev_output_channel: int, + temb_channels: int, + add_upsample: bool, + resnet_eps: float, + resnet_act_fn: str, + resolution_idx: Optional[int] = None, + transformer_layers_per_block: int = 1, + num_attention_heads: Optional[int] = None, + resnet_groups: Optional[int] = None, + cross_attention_dim: Optional[int] = None, + dual_cross_attention: bool = False, + use_linear_projection: bool = False, + only_cross_attention: bool = False, + upcast_attention: bool = False, + resnet_time_scale_shift: str = "default", + attention_type: str = "default", + resnet_skip_time_act: bool = False, + resnet_out_scale_factor: float = 1.0, + cross_attention_norm: Optional[str] = None, + attention_head_dim: Optional[int] = None, + upsample_type: Optional[str] = None, + dropout: float = 0.0, +) -> nn.Module: + # If attn head dim is not defined, we default it to the number of heads + if attention_head_dim is None: + logger.warn( + f"It is recommended to provide `attention_head_dim` when calling `get_up_block`. Defaulting `attention_head_dim` to {num_attention_heads}." + ) + attention_head_dim = num_attention_heads + + up_block_type = up_block_type[7:] if up_block_type.startswith("UNetRes") else up_block_type + if up_block_type == "UpBlock2D": + return UpBlock2D( + num_layers=num_layers, + in_channels=in_channels, + out_channels=out_channels, + prev_output_channel=prev_output_channel, + temb_channels=temb_channels, + resolution_idx=resolution_idx, + dropout=dropout, + add_upsample=add_upsample, + resnet_eps=resnet_eps, + resnet_act_fn=resnet_act_fn, + resnet_groups=resnet_groups, + resnet_time_scale_shift=resnet_time_scale_shift, + ) + elif up_block_type == "ResnetUpsampleBlock2D": + return ResnetUpsampleBlock2D( + num_layers=num_layers, + in_channels=in_channels, + out_channels=out_channels, + prev_output_channel=prev_output_channel, + temb_channels=temb_channels, + resolution_idx=resolution_idx, + dropout=dropout, + add_upsample=add_upsample, + resnet_eps=resnet_eps, + resnet_act_fn=resnet_act_fn, + resnet_groups=resnet_groups, + resnet_time_scale_shift=resnet_time_scale_shift, + skip_time_act=resnet_skip_time_act, + output_scale_factor=resnet_out_scale_factor, + ) + elif up_block_type == "CrossAttnUpBlock2D": + if cross_attention_dim is None: + raise ValueError("cross_attention_dim must be specified for CrossAttnUpBlock2D") + return CrossAttnUpBlock2D( + num_layers=num_layers, + transformer_layers_per_block=transformer_layers_per_block, + in_channels=in_channels, + out_channels=out_channels, + prev_output_channel=prev_output_channel, + temb_channels=temb_channels, + resolution_idx=resolution_idx, + dropout=dropout, + add_upsample=add_upsample, + resnet_eps=resnet_eps, + resnet_act_fn=resnet_act_fn, + resnet_groups=resnet_groups, + cross_attention_dim=cross_attention_dim, + num_attention_heads=num_attention_heads, + dual_cross_attention=dual_cross_attention, + use_linear_projection=use_linear_projection, + only_cross_attention=only_cross_attention, + upcast_attention=upcast_attention, + resnet_time_scale_shift=resnet_time_scale_shift, + attention_type=attention_type, + ) + elif up_block_type == "SimpleCrossAttnUpBlock2D": + if cross_attention_dim is None: + raise ValueError("cross_attention_dim must be specified for SimpleCrossAttnUpBlock2D") + return SimpleCrossAttnUpBlock2D( + num_layers=num_layers, + in_channels=in_channels, + out_channels=out_channels, + prev_output_channel=prev_output_channel, + temb_channels=temb_channels, + resolution_idx=resolution_idx, + dropout=dropout, + add_upsample=add_upsample, + resnet_eps=resnet_eps, + resnet_act_fn=resnet_act_fn, + resnet_groups=resnet_groups, + cross_attention_dim=cross_attention_dim, + attention_head_dim=attention_head_dim, + resnet_time_scale_shift=resnet_time_scale_shift, + skip_time_act=resnet_skip_time_act, + output_scale_factor=resnet_out_scale_factor, + only_cross_attention=only_cross_attention, + cross_attention_norm=cross_attention_norm, + ) + elif up_block_type == "AttnUpBlock2D": + if add_upsample is False: + upsample_type = None + else: + upsample_type = upsample_type or "conv" # default to 'conv' + + return AttnUpBlock2D( + num_layers=num_layers, + in_channels=in_channels, + out_channels=out_channels, + prev_output_channel=prev_output_channel, + temb_channels=temb_channels, + resolution_idx=resolution_idx, + dropout=dropout, + resnet_eps=resnet_eps, + resnet_act_fn=resnet_act_fn, + resnet_groups=resnet_groups, + attention_head_dim=attention_head_dim, + resnet_time_scale_shift=resnet_time_scale_shift, + upsample_type=upsample_type, + ) + elif up_block_type == "SkipUpBlock2D": + return SkipUpBlock2D( + num_layers=num_layers, + in_channels=in_channels, + out_channels=out_channels, + prev_output_channel=prev_output_channel, + temb_channels=temb_channels, + resolution_idx=resolution_idx, + dropout=dropout, + add_upsample=add_upsample, + resnet_eps=resnet_eps, + resnet_act_fn=resnet_act_fn, + resnet_time_scale_shift=resnet_time_scale_shift, + ) + elif up_block_type == "AttnSkipUpBlock2D": + return AttnSkipUpBlock2D( + num_layers=num_layers, + in_channels=in_channels, + out_channels=out_channels, + prev_output_channel=prev_output_channel, + temb_channels=temb_channels, + resolution_idx=resolution_idx, + dropout=dropout, + add_upsample=add_upsample, + resnet_eps=resnet_eps, + resnet_act_fn=resnet_act_fn, + attention_head_dim=attention_head_dim, + resnet_time_scale_shift=resnet_time_scale_shift, + ) + elif up_block_type == "UpDecoderBlock2D": + return UpDecoderBlock2D( + num_layers=num_layers, + in_channels=in_channels, + out_channels=out_channels, + resolution_idx=resolution_idx, + dropout=dropout, + add_upsample=add_upsample, + resnet_eps=resnet_eps, + resnet_act_fn=resnet_act_fn, + resnet_groups=resnet_groups, + resnet_time_scale_shift=resnet_time_scale_shift, + temb_channels=temb_channels, + ) + elif up_block_type == "AttnUpDecoderBlock2D": + return AttnUpDecoderBlock2D( + num_layers=num_layers, + in_channels=in_channels, + out_channels=out_channels, + resolution_idx=resolution_idx, + dropout=dropout, + add_upsample=add_upsample, + resnet_eps=resnet_eps, + resnet_act_fn=resnet_act_fn, + resnet_groups=resnet_groups, + attention_head_dim=attention_head_dim, + resnet_time_scale_shift=resnet_time_scale_shift, + temb_channels=temb_channels, + ) + elif up_block_type == "KUpBlock2D": + return KUpBlock2D( + num_layers=num_layers, + in_channels=in_channels, + out_channels=out_channels, + temb_channels=temb_channels, + resolution_idx=resolution_idx, + dropout=dropout, + add_upsample=add_upsample, + resnet_eps=resnet_eps, + resnet_act_fn=resnet_act_fn, + ) + elif up_block_type == "KCrossAttnUpBlock2D": + return KCrossAttnUpBlock2D( + num_layers=num_layers, + in_channels=in_channels, + out_channels=out_channels, + temb_channels=temb_channels, + resolution_idx=resolution_idx, + dropout=dropout, + add_upsample=add_upsample, + resnet_eps=resnet_eps, + resnet_act_fn=resnet_act_fn, + cross_attention_dim=cross_attention_dim, + attention_head_dim=attention_head_dim, + ) + + raise ValueError(f"{up_block_type} does not exist.") + + +class AutoencoderTinyBlock(nn.Module): + """ + Tiny Autoencoder block used in [`AutoencoderTiny`]. It is a mini residual module consisting of plain conv + ReLU + blocks. + + Args: + in_channels (`int`): The number of input channels. + out_channels (`int`): The number of output channels. + act_fn (`str`): + ` The activation function to use. Supported values are `"swish"`, `"mish"`, `"gelu"`, and `"relu"`. + + Returns: + `torch.FloatTensor`: A tensor with the same shape as the input tensor, but with the number of channels equal to + `out_channels`. + """ + + def __init__(self, in_channels: int, out_channels: int, act_fn: str): + super().__init__() + act_fn = get_activation(act_fn) + self.conv = nn.Sequential( + nn.Conv2d(in_channels, out_channels, kernel_size=3, padding=1), + act_fn, + nn.Conv2d(out_channels, out_channels, kernel_size=3, padding=1), + act_fn, + nn.Conv2d(out_channels, out_channels, kernel_size=3, padding=1), + ) + self.skip = ( + nn.Conv2d(in_channels, out_channels, kernel_size=1, bias=False) + if in_channels != out_channels + else nn.Identity() + ) + self.fuse = nn.ReLU() + + def forward(self, x: torch.FloatTensor) -> torch.FloatTensor: + return self.fuse(self.conv(x) + self.skip(x)) + + +class UNetMidBlock2D(nn.Module): + """ + A 2D UNet mid-block [`UNetMidBlock2D`] with multiple residual blocks and optional attention blocks. + + Args: + in_channels (`int`): The number of input channels. + temb_channels (`int`): The number of temporal embedding channels. + dropout (`float`, *optional*, defaults to 0.0): The dropout rate. + num_layers (`int`, *optional*, defaults to 1): The number of residual blocks. + resnet_eps (`float`, *optional*, 1e-6 ): The epsilon value for the resnet blocks. + resnet_time_scale_shift (`str`, *optional*, defaults to `default`): + The type of normalization to apply to the time embeddings. This can help to improve the performance of the + model on tasks with long-range temporal dependencies. + resnet_act_fn (`str`, *optional*, defaults to `swish`): The activation function for the resnet blocks. + resnet_groups (`int`, *optional*, defaults to 32): + The number of groups to use in the group normalization layers of the resnet blocks. + attn_groups (`Optional[int]`, *optional*, defaults to None): The number of groups for the attention blocks. + resnet_pre_norm (`bool`, *optional*, defaults to `True`): + Whether to use pre-normalization for the resnet blocks. + add_attention (`bool`, *optional*, defaults to `True`): Whether to add attention blocks. + attention_head_dim (`int`, *optional*, defaults to 1): + Dimension of a single attention head. The number of attention heads is determined based on this value and + the number of input channels. + output_scale_factor (`float`, *optional*, defaults to 1.0): The output scale factor. + + Returns: + `torch.FloatTensor`: The output of the last residual block, which is a tensor of shape `(batch_size, + in_channels, height, width)`. + + """ + + def __init__( + self, + in_channels: int, + temb_channels: int, + dropout: float = 0.0, + num_layers: int = 1, + resnet_eps: float = 1e-6, + resnet_time_scale_shift: str = "default", # default, spatial + resnet_act_fn: str = "swish", + resnet_groups: int = 32, + attn_groups: Optional[int] = None, + resnet_pre_norm: bool = True, + add_attention: bool = True, + attention_head_dim: int = 1, + output_scale_factor: float = 1.0, + ): + super().__init__() + resnet_groups = resnet_groups if resnet_groups is not None else min(in_channels // 4, 32) + self.add_attention = add_attention + + if attn_groups is None: + attn_groups = resnet_groups if resnet_time_scale_shift == "default" else None + + # there is always at least one resnet + resnets = [ + ResnetBlock2D( + in_channels=in_channels, + out_channels=in_channels, + temb_channels=temb_channels, + eps=resnet_eps, + groups=resnet_groups, + dropout=dropout, + time_embedding_norm=resnet_time_scale_shift, + non_linearity=resnet_act_fn, + output_scale_factor=output_scale_factor, + pre_norm=resnet_pre_norm, + ) + ] + attentions = [] + + if attention_head_dim is None: + logger.warn( + f"It is not recommend to pass `attention_head_dim=None`. Defaulting `attention_head_dim` to `in_channels`: {in_channels}." + ) + attention_head_dim = in_channels + + for _ in range(num_layers): + if self.add_attention: + attentions.append( + Attention( + in_channels, + heads=in_channels // attention_head_dim, + dim_head=attention_head_dim, + rescale_output_factor=output_scale_factor, + eps=resnet_eps, + norm_num_groups=attn_groups, + spatial_norm_dim=temb_channels if resnet_time_scale_shift == "spatial" else None, + residual_connection=True, + bias=True, + upcast_softmax=True, + _from_deprecated_attn_block=True, + ) + ) + else: + attentions.append(None) + + resnets.append( + ResnetBlock2D( + in_channels=in_channels, + out_channels=in_channels, + temb_channels=temb_channels, + eps=resnet_eps, + groups=resnet_groups, + dropout=dropout, + time_embedding_norm=resnet_time_scale_shift, + non_linearity=resnet_act_fn, + output_scale_factor=output_scale_factor, + pre_norm=resnet_pre_norm, + ) + ) + + self.attentions = nn.ModuleList(attentions) + self.resnets = nn.ModuleList(resnets) + + def forward(self, hidden_states: torch.FloatTensor, temb: Optional[torch.FloatTensor] = None) -> torch.FloatTensor: + hidden_states = self.resnets[0](hidden_states, temb) + for attn, resnet in zip(self.attentions, self.resnets[1:]): + if attn is not None: + hidden_states = attn(hidden_states, temb=temb) + hidden_states = resnet(hidden_states, temb) + + return hidden_states + + +class UNetMidBlock2DCrossAttn(nn.Module): + def __init__( + self, + in_channels: int, + temb_channels: int, + dropout: float = 0.0, + num_layers: int = 1, + transformer_layers_per_block: Union[int, Tuple[int]] = 1, + resnet_eps: float = 1e-6, + resnet_time_scale_shift: str = "default", + resnet_act_fn: str = "swish", + resnet_groups: int = 32, + resnet_pre_norm: bool = True, + num_attention_heads: int = 1, + output_scale_factor: float = 1.0, + cross_attention_dim: int = 1280, + dual_cross_attention: bool = False, + use_linear_projection: bool = False, + upcast_attention: bool = False, + attention_type: str = "default", + ): + super().__init__() + + self.has_cross_attention = True + self.num_attention_heads = num_attention_heads + resnet_groups = resnet_groups if resnet_groups is not None else min(in_channels // 4, 32) + + # support for variable transformer layers per block + if isinstance(transformer_layers_per_block, int): + transformer_layers_per_block = [transformer_layers_per_block] * num_layers + + # there is always at least one resnet + resnets = [ + ResnetBlock2D( + in_channels=in_channels, + out_channels=in_channels, + temb_channels=temb_channels, + eps=resnet_eps, + groups=resnet_groups, + dropout=dropout, + time_embedding_norm=resnet_time_scale_shift, + non_linearity=resnet_act_fn, + output_scale_factor=output_scale_factor, + pre_norm=resnet_pre_norm, + ) + ] + attentions = [] + + for i in range(num_layers): + if not dual_cross_attention: + attentions.append( + Transformer2DModel( + num_attention_heads, + in_channels // num_attention_heads, + in_channels=in_channels, + num_layers=transformer_layers_per_block[i], + cross_attention_dim=cross_attention_dim, + norm_num_groups=resnet_groups, + use_linear_projection=use_linear_projection, + upcast_attention=upcast_attention, + attention_type=attention_type, + ) + ) + else: + attentions.append( + DualTransformer2DModel( + num_attention_heads, + in_channels // num_attention_heads, + in_channels=in_channels, + num_layers=1, + cross_attention_dim=cross_attention_dim, + norm_num_groups=resnet_groups, + ) + ) + resnets.append( + ResnetBlock2D( + in_channels=in_channels, + out_channels=in_channels, + temb_channels=temb_channels, + eps=resnet_eps, + groups=resnet_groups, + dropout=dropout, + time_embedding_norm=resnet_time_scale_shift, + non_linearity=resnet_act_fn, + output_scale_factor=output_scale_factor, + pre_norm=resnet_pre_norm, + ) + ) + + self.attentions = nn.ModuleList(attentions) + self.resnets = nn.ModuleList(resnets) + + self.gradient_checkpointing = False + + def forward( + self, + hidden_states: torch.FloatTensor, + temb: Optional[torch.FloatTensor] = None, + encoder_hidden_states: Optional[torch.FloatTensor] = None, + attention_mask: Optional[torch.FloatTensor] = None, + cross_attention_kwargs: Optional[Dict[str, Any]] = None, + encoder_attention_mask: Optional[torch.FloatTensor] = None, + ) -> torch.FloatTensor: + lora_scale = cross_attention_kwargs.get("scale", 1.0) if cross_attention_kwargs is not None else 1.0 + hidden_states = self.resnets[0](hidden_states, temb, scale=lora_scale) + for attn, resnet in zip(self.attentions, self.resnets[1:]): + if self.training and self.gradient_checkpointing: + + def create_custom_forward(module, return_dict=None): + def custom_forward(*inputs): + if return_dict is not None: + return module(*inputs, return_dict=return_dict) + else: + return module(*inputs) + + return custom_forward + + ckpt_kwargs: Dict[str, Any] = {"use_reentrant": False} if is_torch_version(">=", "1.11.0") else {} + hidden_states = attn( + hidden_states, + encoder_hidden_states=encoder_hidden_states, + cross_attention_kwargs=cross_attention_kwargs, + attention_mask=attention_mask, + encoder_attention_mask=encoder_attention_mask, + return_dict=False, + )[0] + hidden_states = torch.utils.checkpoint.checkpoint( + create_custom_forward(resnet), + hidden_states, + temb, + **ckpt_kwargs, + ) + else: + hidden_states = attn( + hidden_states, + encoder_hidden_states=encoder_hidden_states, + cross_attention_kwargs=cross_attention_kwargs, + attention_mask=attention_mask, + encoder_attention_mask=encoder_attention_mask, + return_dict=False, + )[0] + hidden_states = resnet(hidden_states, temb, scale=lora_scale) + + return hidden_states + + +class UNetMidBlock2DSimpleCrossAttn(nn.Module): + def __init__( + self, + in_channels: int, + temb_channels: int, + dropout: float = 0.0, + num_layers: int = 1, + resnet_eps: float = 1e-6, + resnet_time_scale_shift: str = "default", + resnet_act_fn: str = "swish", + resnet_groups: int = 32, + resnet_pre_norm: bool = True, + attention_head_dim: int = 1, + output_scale_factor: float = 1.0, + cross_attention_dim: int = 1280, + skip_time_act: bool = False, + only_cross_attention: bool = False, + cross_attention_norm: Optional[str] = None, + ): + super().__init__() + + self.has_cross_attention = True + + self.attention_head_dim = attention_head_dim + resnet_groups = resnet_groups if resnet_groups is not None else min(in_channels // 4, 32) + + self.num_heads = in_channels // self.attention_head_dim + + # there is always at least one resnet + resnets = [ + ResnetBlock2D( + in_channels=in_channels, + out_channels=in_channels, + temb_channels=temb_channels, + eps=resnet_eps, + groups=resnet_groups, + dropout=dropout, + time_embedding_norm=resnet_time_scale_shift, + non_linearity=resnet_act_fn, + output_scale_factor=output_scale_factor, + pre_norm=resnet_pre_norm, + skip_time_act=skip_time_act, + ) + ] + attentions = [] + + for _ in range(num_layers): + processor = ( + AttnAddedKVProcessor2_0() if hasattr(F, "scaled_dot_product_attention") else AttnAddedKVProcessor() + ) + + attentions.append( + Attention( + query_dim=in_channels, + cross_attention_dim=in_channels, + heads=self.num_heads, + dim_head=self.attention_head_dim, + added_kv_proj_dim=cross_attention_dim, + norm_num_groups=resnet_groups, + bias=True, + upcast_softmax=True, + only_cross_attention=only_cross_attention, + cross_attention_norm=cross_attention_norm, + processor=processor, + ) + ) + resnets.append( + ResnetBlock2D( + in_channels=in_channels, + out_channels=in_channels, + temb_channels=temb_channels, + eps=resnet_eps, + groups=resnet_groups, + dropout=dropout, + time_embedding_norm=resnet_time_scale_shift, + non_linearity=resnet_act_fn, + output_scale_factor=output_scale_factor, + pre_norm=resnet_pre_norm, + skip_time_act=skip_time_act, + ) + ) + + self.attentions = nn.ModuleList(attentions) + self.resnets = nn.ModuleList(resnets) + + def forward( + self, + hidden_states: torch.FloatTensor, + temb: Optional[torch.FloatTensor] = None, + encoder_hidden_states: Optional[torch.FloatTensor] = None, + attention_mask: Optional[torch.FloatTensor] = None, + cross_attention_kwargs: Optional[Dict[str, Any]] = None, + encoder_attention_mask: Optional[torch.FloatTensor] = None, + ) -> torch.FloatTensor: + cross_attention_kwargs = cross_attention_kwargs if cross_attention_kwargs is not None else {} + lora_scale = cross_attention_kwargs.get("scale", 1.0) + + if attention_mask is None: + # if encoder_hidden_states is defined: we are doing cross-attn, so we should use cross-attn mask. + mask = None if encoder_hidden_states is None else encoder_attention_mask + else: + # when attention_mask is defined: we don't even check for encoder_attention_mask. + # this is to maintain compatibility with UnCLIP, which uses 'attention_mask' param for cross-attn masks. + # TODO: UnCLIP should express cross-attn mask via encoder_attention_mask param instead of via attention_mask. + # then we can simplify this whole if/else block to: + # mask = attention_mask if encoder_hidden_states is None else encoder_attention_mask + mask = attention_mask + + hidden_states = self.resnets[0](hidden_states, temb, scale=lora_scale) + for attn, resnet in zip(self.attentions, self.resnets[1:]): + # attn + hidden_states = attn( + hidden_states, + encoder_hidden_states=encoder_hidden_states, + attention_mask=mask, + **cross_attention_kwargs, + ) + + # resnet + hidden_states = resnet(hidden_states, temb, scale=lora_scale) + + return hidden_states + + +class AttnDownBlock2D(nn.Module): + def __init__( + self, + in_channels: int, + out_channels: int, + temb_channels: int, + dropout: float = 0.0, + num_layers: int = 1, + resnet_eps: float = 1e-6, + resnet_time_scale_shift: str = "default", + resnet_act_fn: str = "swish", + resnet_groups: int = 32, + resnet_pre_norm: bool = True, + attention_head_dim: int = 1, + output_scale_factor: float = 1.0, + downsample_padding: int = 1, + downsample_type: str = "conv", + ): + super().__init__() + resnets = [] + attentions = [] + self.downsample_type = downsample_type + + if attention_head_dim is None: + logger.warn( + f"It is not recommend to pass `attention_head_dim=None`. Defaulting `attention_head_dim` to `in_channels`: {out_channels}." + ) + attention_head_dim = out_channels + + for i in range(num_layers): + in_channels = in_channels if i == 0 else out_channels + resnets.append( + ResnetBlock2D( + in_channels=in_channels, + out_channels=out_channels, + temb_channels=temb_channels, + eps=resnet_eps, + groups=resnet_groups, + dropout=dropout, + time_embedding_norm=resnet_time_scale_shift, + non_linearity=resnet_act_fn, + output_scale_factor=output_scale_factor, + pre_norm=resnet_pre_norm, + ) + ) + attentions.append( + Attention( + out_channels, + heads=out_channels // attention_head_dim, + dim_head=attention_head_dim, + rescale_output_factor=output_scale_factor, + eps=resnet_eps, + norm_num_groups=resnet_groups, + residual_connection=True, + bias=True, + upcast_softmax=True, + _from_deprecated_attn_block=True, + ) + ) + + self.attentions = nn.ModuleList(attentions) + self.resnets = nn.ModuleList(resnets) + + if downsample_type == "conv": + self.downsamplers = nn.ModuleList( + [ + Downsample2D( + out_channels, use_conv=True, out_channels=out_channels, padding=downsample_padding, name="op" + ) + ] + ) + elif downsample_type == "resnet": + self.downsamplers = nn.ModuleList( + [ + ResnetBlock2D( + in_channels=out_channels, + out_channels=out_channels, + temb_channels=temb_channels, + eps=resnet_eps, + groups=resnet_groups, + dropout=dropout, + time_embedding_norm=resnet_time_scale_shift, + non_linearity=resnet_act_fn, + output_scale_factor=output_scale_factor, + pre_norm=resnet_pre_norm, + down=True, + ) + ] + ) + else: + self.downsamplers = None + + def forward( + self, + hidden_states: torch.FloatTensor, + temb: Optional[torch.FloatTensor] = None, + upsample_size: Optional[int] = None, + cross_attention_kwargs: Optional[Dict[str, Any]] = None, + ) -> Tuple[torch.FloatTensor, Tuple[torch.FloatTensor, ...]]: + cross_attention_kwargs = cross_attention_kwargs if cross_attention_kwargs is not None else {} + + lora_scale = cross_attention_kwargs.get("scale", 1.0) + + output_states = () + + for resnet, attn in zip(self.resnets, self.attentions): + cross_attention_kwargs.update({"scale": lora_scale}) + hidden_states = resnet(hidden_states, temb, scale=lora_scale) + hidden_states = attn(hidden_states, **cross_attention_kwargs) + output_states = output_states + (hidden_states,) + + if self.downsamplers is not None: + for downsampler in self.downsamplers: + if self.downsample_type == "resnet": + hidden_states = downsampler(hidden_states, temb=temb, scale=lora_scale) + else: + hidden_states = downsampler(hidden_states, scale=lora_scale) + + output_states += (hidden_states,) + + return hidden_states, output_states + + +class CrossAttnDownBlock2D(nn.Module): + def __init__( + self, + in_channels: int, + out_channels: int, + temb_channels: int, + dropout: float = 0.0, + num_layers: int = 1, + transformer_layers_per_block: Union[int, Tuple[int]] = 1, + resnet_eps: float = 1e-6, + resnet_time_scale_shift: str = "default", + resnet_act_fn: str = "swish", + resnet_groups: int = 32, + resnet_pre_norm: bool = True, + num_attention_heads: int = 1, + cross_attention_dim: int = 1280, + output_scale_factor: float = 1.0, + downsample_padding: int = 1, + add_downsample: bool = True, + dual_cross_attention: bool = False, + use_linear_projection: bool = False, + only_cross_attention: bool = False, + upcast_attention: bool = False, + attention_type: str = "default", + ): + super().__init__() + resnets = [] + attentions = [] + + self.has_cross_attention = True + self.num_attention_heads = num_attention_heads + if isinstance(transformer_layers_per_block, int): + transformer_layers_per_block = [transformer_layers_per_block] * num_layers + + for i in range(num_layers): + in_channels = in_channels if i == 0 else out_channels + resnets.append( + ResnetBlock2D( + in_channels=in_channels, + out_channels=out_channels, + temb_channels=temb_channels, + eps=resnet_eps, + groups=resnet_groups, + dropout=dropout, + time_embedding_norm=resnet_time_scale_shift, + non_linearity=resnet_act_fn, + output_scale_factor=output_scale_factor, + pre_norm=resnet_pre_norm, + ) + ) + if not dual_cross_attention: + attentions.append( + Transformer2DModel( + num_attention_heads, + out_channels // num_attention_heads, + in_channels=out_channels, + num_layers=transformer_layers_per_block[i], + cross_attention_dim=cross_attention_dim, + norm_num_groups=resnet_groups, + use_linear_projection=use_linear_projection, + only_cross_attention=only_cross_attention, + upcast_attention=upcast_attention, + attention_type=attention_type, + ) + ) + else: + attentions.append( + DualTransformer2DModel( + num_attention_heads, + out_channels // num_attention_heads, + in_channels=out_channels, + num_layers=1, + cross_attention_dim=cross_attention_dim, + norm_num_groups=resnet_groups, + ) + ) + self.attentions = nn.ModuleList(attentions) + self.resnets = nn.ModuleList(resnets) + + if add_downsample: + self.downsamplers = nn.ModuleList( + [ + Downsample2D( + out_channels, use_conv=True, out_channels=out_channels, padding=downsample_padding, name="op" + ) + ] + ) + else: + self.downsamplers = None + + self.gradient_checkpointing = False + + def forward( + self, + hidden_states: torch.FloatTensor, + temb: Optional[torch.FloatTensor] = None, + encoder_hidden_states: Optional[torch.FloatTensor] = None, + attention_mask: Optional[torch.FloatTensor] = None, + cross_attention_kwargs: Optional[Dict[str, Any]] = None, + encoder_attention_mask: Optional[torch.FloatTensor] = None, + additional_residuals: Optional[torch.FloatTensor] = None, + ) -> Tuple[torch.FloatTensor, Tuple[torch.FloatTensor, ...]]: + output_states = () + + lora_scale = cross_attention_kwargs.get("scale", 1.0) if cross_attention_kwargs is not None else 1.0 + + blocks = list(zip(self.resnets, self.attentions)) + + for i, (resnet, attn) in enumerate(blocks): + if self.training and self.gradient_checkpointing: + + def create_custom_forward(module, return_dict=None): + def custom_forward(*inputs): + if return_dict is not None: + return module(*inputs, return_dict=return_dict) + else: + return module(*inputs) + + return custom_forward + + ckpt_kwargs: Dict[str, Any] = {"use_reentrant": False} if is_torch_version(">=", "1.11.0") else {} + hidden_states = torch.utils.checkpoint.checkpoint( + create_custom_forward(resnet), + hidden_states, + temb, + **ckpt_kwargs, + ) + hidden_states = attn( + hidden_states, + encoder_hidden_states=encoder_hidden_states, + cross_attention_kwargs=cross_attention_kwargs, + attention_mask=attention_mask, + encoder_attention_mask=encoder_attention_mask, + return_dict=False, + )[0] + else: + hidden_states = resnet(hidden_states, temb, scale=lora_scale) + hidden_states = attn( + hidden_states, + encoder_hidden_states=encoder_hidden_states, + cross_attention_kwargs=cross_attention_kwargs, + attention_mask=attention_mask, + encoder_attention_mask=encoder_attention_mask, + return_dict=False, + )[0] + + # apply additional residuals to the output of the last pair of resnet and attention blocks + if i == len(blocks) - 1 and additional_residuals is not None: + hidden_states = hidden_states + additional_residuals + + output_states = output_states + (hidden_states,) + + if self.downsamplers is not None: + for downsampler in self.downsamplers: + hidden_states = downsampler(hidden_states, scale=lora_scale) + + output_states = output_states + (hidden_states,) + + return hidden_states, output_states + + +class DownBlock2D(nn.Module): + def __init__( + self, + in_channels: int, + out_channels: int, + temb_channels: int, + dropout: float = 0.0, + num_layers: int = 1, + resnet_eps: float = 1e-6, + resnet_time_scale_shift: str = "default", + resnet_act_fn: str = "swish", + resnet_groups: int = 32, + resnet_pre_norm: bool = True, + output_scale_factor: float = 1.0, + add_downsample: bool = True, + downsample_padding: int = 1, + ): + super().__init__() + resnets = [] + + for i in range(num_layers): + in_channels = in_channels if i == 0 else out_channels + resnets.append( + ResnetBlock2D( + in_channels=in_channels, + out_channels=out_channels, + temb_channels=temb_channels, + eps=resnet_eps, + groups=resnet_groups, + dropout=dropout, + time_embedding_norm=resnet_time_scale_shift, + non_linearity=resnet_act_fn, + output_scale_factor=output_scale_factor, + pre_norm=resnet_pre_norm, + ) + ) + + self.resnets = nn.ModuleList(resnets) + + if add_downsample: + self.downsamplers = nn.ModuleList( + [ + Downsample2D( + out_channels, use_conv=True, out_channels=out_channels, padding=downsample_padding, name="op" + ) + ] + ) + else: + self.downsamplers = None + + self.gradient_checkpointing = False + + def forward( + self, hidden_states: torch.FloatTensor, temb: Optional[torch.FloatTensor] = None, scale: float = 1.0 + ) -> Tuple[torch.FloatTensor, Tuple[torch.FloatTensor, ...]]: + output_states = () + + for resnet in self.resnets: + if self.training and self.gradient_checkpointing: + + def create_custom_forward(module): + def custom_forward(*inputs): + return module(*inputs) + + return custom_forward + + if is_torch_version(">=", "1.11.0"): + hidden_states = torch.utils.checkpoint.checkpoint( + create_custom_forward(resnet), hidden_states, temb, use_reentrant=False + ) + else: + hidden_states = torch.utils.checkpoint.checkpoint( + create_custom_forward(resnet), hidden_states, temb + ) + else: + hidden_states = resnet(hidden_states, temb, scale=scale) + + output_states = output_states + (hidden_states,) + + if self.downsamplers is not None: + for downsampler in self.downsamplers: + hidden_states = downsampler(hidden_states, scale=scale) + + output_states = output_states + (hidden_states,) + + return hidden_states, output_states + + +class DownEncoderBlock2D(nn.Module): + def __init__( + self, + in_channels: int, + out_channels: int, + dropout: float = 0.0, + num_layers: int = 1, + resnet_eps: float = 1e-6, + resnet_time_scale_shift: str = "default", + resnet_act_fn: str = "swish", + resnet_groups: int = 32, + resnet_pre_norm: bool = True, + output_scale_factor: float = 1.0, + add_downsample: bool = True, + downsample_padding: int = 1, + ): + super().__init__() + resnets = [] + + for i in range(num_layers): + in_channels = in_channels if i == 0 else out_channels + resnets.append( + ResnetBlock2D( + in_channels=in_channels, + out_channels=out_channels, + temb_channels=None, + eps=resnet_eps, + groups=resnet_groups, + dropout=dropout, + time_embedding_norm=resnet_time_scale_shift, + non_linearity=resnet_act_fn, + output_scale_factor=output_scale_factor, + pre_norm=resnet_pre_norm, + ) + ) + + self.resnets = nn.ModuleList(resnets) + + if add_downsample: + self.downsamplers = nn.ModuleList( + [ + Downsample2D( + out_channels, use_conv=True, out_channels=out_channels, padding=downsample_padding, name="op" + ) + ] + ) + else: + self.downsamplers = None + + def forward(self, hidden_states: torch.FloatTensor, scale: float = 1.0) -> torch.FloatTensor: + for resnet in self.resnets: + hidden_states = resnet(hidden_states, temb=None, scale=scale) + + if self.downsamplers is not None: + for downsampler in self.downsamplers: + hidden_states = downsampler(hidden_states, scale) + + return hidden_states + + +class AttnDownEncoderBlock2D(nn.Module): + def __init__( + self, + in_channels: int, + out_channels: int, + dropout: float = 0.0, + num_layers: int = 1, + resnet_eps: float = 1e-6, + resnet_time_scale_shift: str = "default", + resnet_act_fn: str = "swish", + resnet_groups: int = 32, + resnet_pre_norm: bool = True, + attention_head_dim: int = 1, + output_scale_factor: float = 1.0, + add_downsample: bool = True, + downsample_padding: int = 1, + ): + super().__init__() + resnets = [] + attentions = [] + + if attention_head_dim is None: + logger.warn( + f"It is not recommend to pass `attention_head_dim=None`. Defaulting `attention_head_dim` to `in_channels`: {out_channels}." + ) + attention_head_dim = out_channels + + for i in range(num_layers): + in_channels = in_channels if i == 0 else out_channels + resnets.append( + ResnetBlock2D( + in_channels=in_channels, + out_channels=out_channels, + temb_channels=None, + eps=resnet_eps, + groups=resnet_groups, + dropout=dropout, + time_embedding_norm=resnet_time_scale_shift, + non_linearity=resnet_act_fn, + output_scale_factor=output_scale_factor, + pre_norm=resnet_pre_norm, + ) + ) + attentions.append( + Attention( + out_channels, + heads=out_channels // attention_head_dim, + dim_head=attention_head_dim, + rescale_output_factor=output_scale_factor, + eps=resnet_eps, + norm_num_groups=resnet_groups, + residual_connection=True, + bias=True, + upcast_softmax=True, + _from_deprecated_attn_block=True, + ) + ) + + self.attentions = nn.ModuleList(attentions) + self.resnets = nn.ModuleList(resnets) + + if add_downsample: + self.downsamplers = nn.ModuleList( + [ + Downsample2D( + out_channels, use_conv=True, out_channels=out_channels, padding=downsample_padding, name="op" + ) + ] + ) + else: + self.downsamplers = None + + def forward(self, hidden_states: torch.FloatTensor, scale: float = 1.0) -> torch.FloatTensor: + for resnet, attn in zip(self.resnets, self.attentions): + hidden_states = resnet(hidden_states, temb=None, scale=scale) + cross_attention_kwargs = {"scale": scale} + hidden_states = attn(hidden_states, **cross_attention_kwargs) + + if self.downsamplers is not None: + for downsampler in self.downsamplers: + hidden_states = downsampler(hidden_states, scale) + + return hidden_states + + +class AttnSkipDownBlock2D(nn.Module): + def __init__( + self, + in_channels: int, + out_channels: int, + temb_channels: int, + dropout: float = 0.0, + num_layers: int = 1, + resnet_eps: float = 1e-6, + resnet_time_scale_shift: str = "default", + resnet_act_fn: str = "swish", + resnet_pre_norm: bool = True, + attention_head_dim: int = 1, + output_scale_factor: float = np.sqrt(2.0), + add_downsample: bool = True, + ): + super().__init__() + self.attentions = nn.ModuleList([]) + self.resnets = nn.ModuleList([]) + + if attention_head_dim is None: + logger.warn( + f"It is not recommend to pass `attention_head_dim=None`. Defaulting `attention_head_dim` to `in_channels`: {out_channels}." + ) + attention_head_dim = out_channels + + for i in range(num_layers): + in_channels = in_channels if i == 0 else out_channels + self.resnets.append( + ResnetBlock2D( + in_channels=in_channels, + out_channels=out_channels, + temb_channels=temb_channels, + eps=resnet_eps, + groups=min(in_channels // 4, 32), + groups_out=min(out_channels // 4, 32), + dropout=dropout, + time_embedding_norm=resnet_time_scale_shift, + non_linearity=resnet_act_fn, + output_scale_factor=output_scale_factor, + pre_norm=resnet_pre_norm, + ) + ) + self.attentions.append( + Attention( + out_channels, + heads=out_channels // attention_head_dim, + dim_head=attention_head_dim, + rescale_output_factor=output_scale_factor, + eps=resnet_eps, + norm_num_groups=32, + residual_connection=True, + bias=True, + upcast_softmax=True, + _from_deprecated_attn_block=True, + ) + ) + + if add_downsample: + self.resnet_down = ResnetBlock2D( + in_channels=out_channels, + out_channels=out_channels, + temb_channels=temb_channels, + eps=resnet_eps, + groups=min(out_channels // 4, 32), + dropout=dropout, + time_embedding_norm=resnet_time_scale_shift, + non_linearity=resnet_act_fn, + output_scale_factor=output_scale_factor, + pre_norm=resnet_pre_norm, + use_in_shortcut=True, + down=True, + kernel="fir", + ) + self.downsamplers = nn.ModuleList([FirDownsample2D(out_channels, out_channels=out_channels)]) + self.skip_conv = nn.Conv2d(3, out_channels, kernel_size=(1, 1), stride=(1, 1)) + else: + self.resnet_down = None + self.downsamplers = None + self.skip_conv = None + + def forward( + self, + hidden_states: torch.FloatTensor, + temb: Optional[torch.FloatTensor] = None, + skip_sample: Optional[torch.FloatTensor] = None, + scale: float = 1.0, + ) -> Tuple[torch.FloatTensor, Tuple[torch.FloatTensor, ...], torch.FloatTensor]: + output_states = () + + for resnet, attn in zip(self.resnets, self.attentions): + hidden_states = resnet(hidden_states, temb, scale=scale) + cross_attention_kwargs = {"scale": scale} + hidden_states = attn(hidden_states, **cross_attention_kwargs) + output_states += (hidden_states,) + + if self.downsamplers is not None: + hidden_states = self.resnet_down(hidden_states, temb, scale=scale) + for downsampler in self.downsamplers: + skip_sample = downsampler(skip_sample) + + hidden_states = self.skip_conv(skip_sample) + hidden_states + + output_states += (hidden_states,) + + return hidden_states, output_states, skip_sample + + +class SkipDownBlock2D(nn.Module): + def __init__( + self, + in_channels: int, + out_channels: int, + temb_channels: int, + dropout: float = 0.0, + num_layers: int = 1, + resnet_eps: float = 1e-6, + resnet_time_scale_shift: str = "default", + resnet_act_fn: str = "swish", + resnet_pre_norm: bool = True, + output_scale_factor: float = np.sqrt(2.0), + add_downsample: bool = True, + downsample_padding: int = 1, + ): + super().__init__() + self.resnets = nn.ModuleList([]) + + for i in range(num_layers): + in_channels = in_channels if i == 0 else out_channels + self.resnets.append( + ResnetBlock2D( + in_channels=in_channels, + out_channels=out_channels, + temb_channels=temb_channels, + eps=resnet_eps, + groups=min(in_channels // 4, 32), + groups_out=min(out_channels // 4, 32), + dropout=dropout, + time_embedding_norm=resnet_time_scale_shift, + non_linearity=resnet_act_fn, + output_scale_factor=output_scale_factor, + pre_norm=resnet_pre_norm, + ) + ) + + if add_downsample: + self.resnet_down = ResnetBlock2D( + in_channels=out_channels, + out_channels=out_channels, + temb_channels=temb_channels, + eps=resnet_eps, + groups=min(out_channels // 4, 32), + dropout=dropout, + time_embedding_norm=resnet_time_scale_shift, + non_linearity=resnet_act_fn, + output_scale_factor=output_scale_factor, + pre_norm=resnet_pre_norm, + use_in_shortcut=True, + down=True, + kernel="fir", + ) + self.downsamplers = nn.ModuleList([FirDownsample2D(out_channels, out_channels=out_channels)]) + self.skip_conv = nn.Conv2d(3, out_channels, kernel_size=(1, 1), stride=(1, 1)) + else: + self.resnet_down = None + self.downsamplers = None + self.skip_conv = None + + def forward( + self, + hidden_states: torch.FloatTensor, + temb: Optional[torch.FloatTensor] = None, + skip_sample: Optional[torch.FloatTensor] = None, + scale: float = 1.0, + ) -> Tuple[torch.FloatTensor, Tuple[torch.FloatTensor, ...], torch.FloatTensor]: + output_states = () + + for resnet in self.resnets: + hidden_states = resnet(hidden_states, temb, scale) + output_states += (hidden_states,) + + if self.downsamplers is not None: + hidden_states = self.resnet_down(hidden_states, temb, scale) + for downsampler in self.downsamplers: + skip_sample = downsampler(skip_sample) + + hidden_states = self.skip_conv(skip_sample) + hidden_states + + output_states += (hidden_states,) + + return hidden_states, output_states, skip_sample + + +class ResnetDownsampleBlock2D(nn.Module): + def __init__( + self, + in_channels: int, + out_channels: int, + temb_channels: int, + dropout: float = 0.0, + num_layers: int = 1, + resnet_eps: float = 1e-6, + resnet_time_scale_shift: str = "default", + resnet_act_fn: str = "swish", + resnet_groups: int = 32, + resnet_pre_norm: bool = True, + output_scale_factor: float = 1.0, + add_downsample: bool = True, + skip_time_act: bool = False, + ): + super().__init__() + resnets = [] + + for i in range(num_layers): + in_channels = in_channels if i == 0 else out_channels + resnets.append( + ResnetBlock2D( + in_channels=in_channels, + out_channels=out_channels, + temb_channels=temb_channels, + eps=resnet_eps, + groups=resnet_groups, + dropout=dropout, + time_embedding_norm=resnet_time_scale_shift, + non_linearity=resnet_act_fn, + output_scale_factor=output_scale_factor, + pre_norm=resnet_pre_norm, + skip_time_act=skip_time_act, + ) + ) + + self.resnets = nn.ModuleList(resnets) + + if add_downsample: + self.downsamplers = nn.ModuleList( + [ + ResnetBlock2D( + in_channels=out_channels, + out_channels=out_channels, + temb_channels=temb_channels, + eps=resnet_eps, + groups=resnet_groups, + dropout=dropout, + time_embedding_norm=resnet_time_scale_shift, + non_linearity=resnet_act_fn, + output_scale_factor=output_scale_factor, + pre_norm=resnet_pre_norm, + skip_time_act=skip_time_act, + down=True, + ) + ] + ) + else: + self.downsamplers = None + + self.gradient_checkpointing = False + + def forward( + self, hidden_states: torch.FloatTensor, temb: Optional[torch.FloatTensor] = None, scale: float = 1.0 + ) -> Tuple[torch.FloatTensor, Tuple[torch.FloatTensor, ...]]: + output_states = () + + for resnet in self.resnets: + if self.training and self.gradient_checkpointing: + + def create_custom_forward(module): + def custom_forward(*inputs): + return module(*inputs) + + return custom_forward + + if is_torch_version(">=", "1.11.0"): + hidden_states = torch.utils.checkpoint.checkpoint( + create_custom_forward(resnet), hidden_states, temb, use_reentrant=False + ) + else: + hidden_states = torch.utils.checkpoint.checkpoint( + create_custom_forward(resnet), hidden_states, temb + ) + else: + hidden_states = resnet(hidden_states, temb, scale) + + output_states = output_states + (hidden_states,) + + if self.downsamplers is not None: + for downsampler in self.downsamplers: + hidden_states = downsampler(hidden_states, temb, scale) + + output_states = output_states + (hidden_states,) + + return hidden_states, output_states + + +class SimpleCrossAttnDownBlock2D(nn.Module): + def __init__( + self, + in_channels: int, + out_channels: int, + temb_channels: int, + dropout: float = 0.0, + num_layers: int = 1, + resnet_eps: float = 1e-6, + resnet_time_scale_shift: str = "default", + resnet_act_fn: str = "swish", + resnet_groups: int = 32, + resnet_pre_norm: bool = True, + attention_head_dim: int = 1, + cross_attention_dim: int = 1280, + output_scale_factor: float = 1.0, + add_downsample: bool = True, + skip_time_act: bool = False, + only_cross_attention: bool = False, + cross_attention_norm: Optional[str] = None, + ): + super().__init__() + + self.has_cross_attention = True + + resnets = [] + attentions = [] + + self.attention_head_dim = attention_head_dim + self.num_heads = out_channels // self.attention_head_dim + + for i in range(num_layers): + in_channels = in_channels if i == 0 else out_channels + resnets.append( + ResnetBlock2D( + in_channels=in_channels, + out_channels=out_channels, + temb_channels=temb_channels, + eps=resnet_eps, + groups=resnet_groups, + dropout=dropout, + time_embedding_norm=resnet_time_scale_shift, + non_linearity=resnet_act_fn, + output_scale_factor=output_scale_factor, + pre_norm=resnet_pre_norm, + skip_time_act=skip_time_act, + ) + ) + + processor = ( + AttnAddedKVProcessor2_0() if hasattr(F, "scaled_dot_product_attention") else AttnAddedKVProcessor() + ) + + attentions.append( + Attention( + query_dim=out_channels, + cross_attention_dim=out_channels, + heads=self.num_heads, + dim_head=attention_head_dim, + added_kv_proj_dim=cross_attention_dim, + norm_num_groups=resnet_groups, + bias=True, + upcast_softmax=True, + only_cross_attention=only_cross_attention, + cross_attention_norm=cross_attention_norm, + processor=processor, + ) + ) + self.attentions = nn.ModuleList(attentions) + self.resnets = nn.ModuleList(resnets) + + if add_downsample: + self.downsamplers = nn.ModuleList( + [ + ResnetBlock2D( + in_channels=out_channels, + out_channels=out_channels, + temb_channels=temb_channels, + eps=resnet_eps, + groups=resnet_groups, + dropout=dropout, + time_embedding_norm=resnet_time_scale_shift, + non_linearity=resnet_act_fn, + output_scale_factor=output_scale_factor, + pre_norm=resnet_pre_norm, + skip_time_act=skip_time_act, + down=True, + ) + ] + ) + else: + self.downsamplers = None + + self.gradient_checkpointing = False + + def forward( + self, + hidden_states: torch.FloatTensor, + temb: Optional[torch.FloatTensor] = None, + encoder_hidden_states: Optional[torch.FloatTensor] = None, + attention_mask: Optional[torch.FloatTensor] = None, + cross_attention_kwargs: Optional[Dict[str, Any]] = None, + encoder_attention_mask: Optional[torch.FloatTensor] = None, + ) -> Tuple[torch.FloatTensor, Tuple[torch.FloatTensor, ...]]: + output_states = () + cross_attention_kwargs = cross_attention_kwargs if cross_attention_kwargs is not None else {} + + lora_scale = cross_attention_kwargs.get("scale", 1.0) + + if attention_mask is None: + # if encoder_hidden_states is defined: we are doing cross-attn, so we should use cross-attn mask. + mask = None if encoder_hidden_states is None else encoder_attention_mask + else: + # when attention_mask is defined: we don't even check for encoder_attention_mask. + # this is to maintain compatibility with UnCLIP, which uses 'attention_mask' param for cross-attn masks. + # TODO: UnCLIP should express cross-attn mask via encoder_attention_mask param instead of via attention_mask. + # then we can simplify this whole if/else block to: + # mask = attention_mask if encoder_hidden_states is None else encoder_attention_mask + mask = attention_mask + + for resnet, attn in zip(self.resnets, self.attentions): + if self.training and self.gradient_checkpointing: + + def create_custom_forward(module, return_dict=None): + def custom_forward(*inputs): + if return_dict is not None: + return module(*inputs, return_dict=return_dict) + else: + return module(*inputs) + + return custom_forward + + hidden_states = torch.utils.checkpoint.checkpoint(create_custom_forward(resnet), hidden_states, temb) + hidden_states = attn( + hidden_states, + encoder_hidden_states=encoder_hidden_states, + attention_mask=mask, + **cross_attention_kwargs, + ) + else: + hidden_states = resnet(hidden_states, temb, scale=lora_scale) + + hidden_states = attn( + hidden_states, + encoder_hidden_states=encoder_hidden_states, + attention_mask=mask, + **cross_attention_kwargs, + ) + + output_states = output_states + (hidden_states,) + + if self.downsamplers is not None: + for downsampler in self.downsamplers: + hidden_states = downsampler(hidden_states, temb, scale=lora_scale) + + output_states = output_states + (hidden_states,) + + return hidden_states, output_states + + +class KDownBlock2D(nn.Module): + def __init__( + self, + in_channels: int, + out_channels: int, + temb_channels: int, + dropout: float = 0.0, + num_layers: int = 4, + resnet_eps: float = 1e-5, + resnet_act_fn: str = "gelu", + resnet_group_size: int = 32, + add_downsample: bool = False, + ): + super().__init__() + resnets = [] + + for i in range(num_layers): + in_channels = in_channels if i == 0 else out_channels + groups = in_channels // resnet_group_size + groups_out = out_channels // resnet_group_size + + resnets.append( + ResnetBlock2D( + in_channels=in_channels, + out_channels=out_channels, + dropout=dropout, + temb_channels=temb_channels, + groups=groups, + groups_out=groups_out, + eps=resnet_eps, + non_linearity=resnet_act_fn, + time_embedding_norm="ada_group", + conv_shortcut_bias=False, + ) + ) + + self.resnets = nn.ModuleList(resnets) + + if add_downsample: + # YiYi's comments- might be able to use FirDownsample2D, look into details later + self.downsamplers = nn.ModuleList([KDownsample2D()]) + else: + self.downsamplers = None + + self.gradient_checkpointing = False + + def forward( + self, hidden_states: torch.FloatTensor, temb: Optional[torch.FloatTensor] = None, scale: float = 1.0 + ) -> Tuple[torch.FloatTensor, Tuple[torch.FloatTensor, ...]]: + output_states = () + + for resnet in self.resnets: + if self.training and self.gradient_checkpointing: + + def create_custom_forward(module): + def custom_forward(*inputs): + return module(*inputs) + + return custom_forward + + if is_torch_version(">=", "1.11.0"): + hidden_states = torch.utils.checkpoint.checkpoint( + create_custom_forward(resnet), hidden_states, temb, use_reentrant=False + ) + else: + hidden_states = torch.utils.checkpoint.checkpoint( + create_custom_forward(resnet), hidden_states, temb + ) + else: + hidden_states = resnet(hidden_states, temb, scale) + + output_states += (hidden_states,) + + if self.downsamplers is not None: + for downsampler in self.downsamplers: + hidden_states = downsampler(hidden_states) + + return hidden_states, output_states + + +class KCrossAttnDownBlock2D(nn.Module): + def __init__( + self, + in_channels: int, + out_channels: int, + temb_channels: int, + cross_attention_dim: int, + dropout: float = 0.0, + num_layers: int = 4, + resnet_group_size: int = 32, + add_downsample: bool = True, + attention_head_dim: int = 64, + add_self_attention: bool = False, + resnet_eps: float = 1e-5, + resnet_act_fn: str = "gelu", + ): + super().__init__() + resnets = [] + attentions = [] + + self.has_cross_attention = True + + for i in range(num_layers): + in_channels = in_channels if i == 0 else out_channels + groups = in_channels // resnet_group_size + groups_out = out_channels // resnet_group_size + + resnets.append( + ResnetBlock2D( + in_channels=in_channels, + out_channels=out_channels, + dropout=dropout, + temb_channels=temb_channels, + groups=groups, + groups_out=groups_out, + eps=resnet_eps, + non_linearity=resnet_act_fn, + time_embedding_norm="ada_group", + conv_shortcut_bias=False, + ) + ) + attentions.append( + KAttentionBlock( + out_channels, + out_channels // attention_head_dim, + attention_head_dim, + cross_attention_dim=cross_attention_dim, + temb_channels=temb_channels, + attention_bias=True, + add_self_attention=add_self_attention, + cross_attention_norm="layer_norm", + group_size=resnet_group_size, + ) + ) + + self.resnets = nn.ModuleList(resnets) + self.attentions = nn.ModuleList(attentions) + + if add_downsample: + self.downsamplers = nn.ModuleList([KDownsample2D()]) + else: + self.downsamplers = None + + self.gradient_checkpointing = False + + def forward( + self, + hidden_states: torch.FloatTensor, + temb: Optional[torch.FloatTensor] = None, + encoder_hidden_states: Optional[torch.FloatTensor] = None, + attention_mask: Optional[torch.FloatTensor] = None, + cross_attention_kwargs: Optional[Dict[str, Any]] = None, + encoder_attention_mask: Optional[torch.FloatTensor] = None, + ) -> Tuple[torch.FloatTensor, Tuple[torch.FloatTensor, ...]]: + output_states = () + lora_scale = cross_attention_kwargs.get("scale", 1.0) if cross_attention_kwargs is not None else 1.0 + + for resnet, attn in zip(self.resnets, self.attentions): + if self.training and self.gradient_checkpointing: + + def create_custom_forward(module, return_dict=None): + def custom_forward(*inputs): + if return_dict is not None: + return module(*inputs, return_dict=return_dict) + else: + return module(*inputs) + + return custom_forward + + ckpt_kwargs: Dict[str, Any] = {"use_reentrant": False} if is_torch_version(">=", "1.11.0") else {} + hidden_states = torch.utils.checkpoint.checkpoint( + create_custom_forward(resnet), + hidden_states, + temb, + **ckpt_kwargs, + ) + hidden_states = attn( + hidden_states, + encoder_hidden_states=encoder_hidden_states, + emb=temb, + attention_mask=attention_mask, + cross_attention_kwargs=cross_attention_kwargs, + encoder_attention_mask=encoder_attention_mask, + ) + else: + hidden_states = resnet(hidden_states, temb, scale=lora_scale) + hidden_states = attn( + hidden_states, + encoder_hidden_states=encoder_hidden_states, + emb=temb, + attention_mask=attention_mask, + cross_attention_kwargs=cross_attention_kwargs, + encoder_attention_mask=encoder_attention_mask, + ) + + if self.downsamplers is None: + output_states += (None,) + else: + output_states += (hidden_states,) + + if self.downsamplers is not None: + for downsampler in self.downsamplers: + hidden_states = downsampler(hidden_states) + + return hidden_states, output_states + + +class AttnUpBlock2D(nn.Module): + def __init__( + self, + in_channels: int, + prev_output_channel: int, + out_channels: int, + temb_channels: int, + resolution_idx: int = None, + dropout: float = 0.0, + num_layers: int = 1, + resnet_eps: float = 1e-6, + resnet_time_scale_shift: str = "default", + resnet_act_fn: str = "swish", + resnet_groups: int = 32, + resnet_pre_norm: bool = True, + attention_head_dim: int = 1, + output_scale_factor: float = 1.0, + upsample_type: str = "conv", + ): + super().__init__() + resnets = [] + attentions = [] + + self.upsample_type = upsample_type + + if attention_head_dim is None: + logger.warn( + f"It is not recommend to pass `attention_head_dim=None`. Defaulting `attention_head_dim` to `in_channels`: {out_channels}." + ) + attention_head_dim = out_channels + + for i in range(num_layers): + res_skip_channels = in_channels if (i == num_layers - 1) else out_channels + resnet_in_channels = prev_output_channel if i == 0 else out_channels + + resnets.append( + ResnetBlock2D( + in_channels=resnet_in_channels + res_skip_channels, + out_channels=out_channels, + temb_channels=temb_channels, + eps=resnet_eps, + groups=resnet_groups, + dropout=dropout, + time_embedding_norm=resnet_time_scale_shift, + non_linearity=resnet_act_fn, + output_scale_factor=output_scale_factor, + pre_norm=resnet_pre_norm, + ) + ) + attentions.append( + Attention( + out_channels, + heads=out_channels // attention_head_dim, + dim_head=attention_head_dim, + rescale_output_factor=output_scale_factor, + eps=resnet_eps, + norm_num_groups=resnet_groups, + residual_connection=True, + bias=True, + upcast_softmax=True, + _from_deprecated_attn_block=True, + ) + ) + + self.attentions = nn.ModuleList(attentions) + self.resnets = nn.ModuleList(resnets) + + if upsample_type == "conv": + self.upsamplers = nn.ModuleList([Upsample2D(out_channels, use_conv=True, out_channels=out_channels)]) + elif upsample_type == "resnet": + self.upsamplers = nn.ModuleList( + [ + ResnetBlock2D( + in_channels=out_channels, + out_channels=out_channels, + temb_channels=temb_channels, + eps=resnet_eps, + groups=resnet_groups, + dropout=dropout, + time_embedding_norm=resnet_time_scale_shift, + non_linearity=resnet_act_fn, + output_scale_factor=output_scale_factor, + pre_norm=resnet_pre_norm, + up=True, + ) + ] + ) + else: + self.upsamplers = None + + self.resolution_idx = resolution_idx + + def forward( + self, + hidden_states: torch.FloatTensor, + res_hidden_states_tuple: Tuple[torch.FloatTensor, ...], + temb: Optional[torch.FloatTensor] = None, + upsample_size: Optional[int] = None, + scale: float = 1.0, + ) -> torch.FloatTensor: + for resnet, attn in zip(self.resnets, self.attentions): + # pop res hidden states + res_hidden_states = res_hidden_states_tuple[-1] + res_hidden_states_tuple = res_hidden_states_tuple[:-1] + hidden_states = torch.cat([hidden_states, res_hidden_states], dim=1) + + hidden_states = resnet(hidden_states, temb, scale=scale) + cross_attention_kwargs = {"scale": scale} + hidden_states = attn(hidden_states, **cross_attention_kwargs) + + if self.upsamplers is not None: + for upsampler in self.upsamplers: + if self.upsample_type == "resnet": + hidden_states = upsampler(hidden_states, temb=temb, scale=scale) + else: + hidden_states = upsampler(hidden_states, scale=scale) + + return hidden_states + + +class CrossAttnUpBlock2D(nn.Module): + def __init__( + self, + in_channels: int, + out_channels: int, + prev_output_channel: int, + temb_channels: int, + resolution_idx: Optional[int] = None, + dropout: float = 0.0, + num_layers: int = 1, + transformer_layers_per_block: Union[int, Tuple[int]] = 1, + resnet_eps: float = 1e-6, + resnet_time_scale_shift: str = "default", + resnet_act_fn: str = "swish", + resnet_groups: int = 32, + resnet_pre_norm: bool = True, + num_attention_heads: int = 1, + cross_attention_dim: int = 1280, + output_scale_factor: float = 1.0, + add_upsample: bool = True, + dual_cross_attention: bool = False, + use_linear_projection: bool = False, + only_cross_attention: bool = False, + upcast_attention: bool = False, + attention_type: str = "default", + ): + super().__init__() + resnets = [] + attentions = [] + + self.has_cross_attention = True + self.num_attention_heads = num_attention_heads + + if isinstance(transformer_layers_per_block, int): + transformer_layers_per_block = [transformer_layers_per_block] * num_layers + + for i in range(num_layers): + res_skip_channels = in_channels if (i == num_layers - 1) else out_channels + resnet_in_channels = prev_output_channel if i == 0 else out_channels + + resnets.append( + ResnetBlock2D( + in_channels=resnet_in_channels + res_skip_channels, + out_channels=out_channels, + temb_channels=temb_channels, + eps=resnet_eps, + groups=resnet_groups, + dropout=dropout, + time_embedding_norm=resnet_time_scale_shift, + non_linearity=resnet_act_fn, + output_scale_factor=output_scale_factor, + pre_norm=resnet_pre_norm, + ) + ) + if not dual_cross_attention: + attentions.append( + Transformer2DModel( + num_attention_heads, + out_channels // num_attention_heads, + in_channels=out_channels, + num_layers=transformer_layers_per_block[i], + cross_attention_dim=cross_attention_dim, + norm_num_groups=resnet_groups, + use_linear_projection=use_linear_projection, + only_cross_attention=only_cross_attention, + upcast_attention=upcast_attention, + attention_type=attention_type, + ) + ) + else: + attentions.append( + DualTransformer2DModel( + num_attention_heads, + out_channels // num_attention_heads, + in_channels=out_channels, + num_layers=1, + cross_attention_dim=cross_attention_dim, + norm_num_groups=resnet_groups, + ) + ) + self.attentions = nn.ModuleList(attentions) + self.resnets = nn.ModuleList(resnets) + + if add_upsample: + self.upsamplers = nn.ModuleList([Upsample2D(out_channels, use_conv=True, out_channels=out_channels)]) + else: + self.upsamplers = None + + self.gradient_checkpointing = False + self.resolution_idx = resolution_idx + + def forward( + self, + hidden_states: torch.FloatTensor, + res_hidden_states_tuple: Tuple[torch.FloatTensor, ...], + temb: Optional[torch.FloatTensor] = None, + encoder_hidden_states: Optional[torch.FloatTensor] = None, + cross_attention_kwargs: Optional[Dict[str, Any]] = None, + upsample_size: Optional[int] = None, + attention_mask: Optional[torch.FloatTensor] = None, + encoder_attention_mask: Optional[torch.FloatTensor] = None, + ) -> torch.FloatTensor: + lora_scale = cross_attention_kwargs.get("scale", 1.0) if cross_attention_kwargs is not None else 1.0 + is_freeu_enabled = ( + getattr(self, "s1", None) + and getattr(self, "s2", None) + and getattr(self, "b1", None) + and getattr(self, "b2", None) + ) + + for resnet, attn in zip(self.resnets, self.attentions): + # pop res hidden states + res_hidden_states = res_hidden_states_tuple[-1] + res_hidden_states_tuple = res_hidden_states_tuple[:-1] + + # FreeU: Only operate on the first two stages + if is_freeu_enabled: + hidden_states, res_hidden_states = apply_freeu( + self.resolution_idx, + hidden_states, + res_hidden_states, + s1=self.s1, + s2=self.s2, + b1=self.b1, + b2=self.b2, + ) + + hidden_states = torch.cat([hidden_states, res_hidden_states], dim=1) + + if self.training and self.gradient_checkpointing: + + def create_custom_forward(module, return_dict=None): + def custom_forward(*inputs): + if return_dict is not None: + return module(*inputs, return_dict=return_dict) + else: + return module(*inputs) + + return custom_forward + + ckpt_kwargs: Dict[str, Any] = {"use_reentrant": False} if is_torch_version(">=", "1.11.0") else {} + hidden_states = torch.utils.checkpoint.checkpoint( + create_custom_forward(resnet), + hidden_states, + temb, + **ckpt_kwargs, + ) + hidden_states = attn( + hidden_states, + encoder_hidden_states=encoder_hidden_states, + cross_attention_kwargs=cross_attention_kwargs, + attention_mask=attention_mask, + encoder_attention_mask=encoder_attention_mask, + return_dict=False, + )[0] + else: + hidden_states = resnet(hidden_states, temb, scale=lora_scale) + hidden_states = attn( + hidden_states, + encoder_hidden_states=encoder_hidden_states, + cross_attention_kwargs=cross_attention_kwargs, + attention_mask=attention_mask, + encoder_attention_mask=encoder_attention_mask, + return_dict=False, + )[0] + + if self.upsamplers is not None: + for upsampler in self.upsamplers: + hidden_states = upsampler(hidden_states, upsample_size, scale=lora_scale) + + return hidden_states + + +class UpBlock2D(nn.Module): + def __init__( + self, + in_channels: int, + prev_output_channel: int, + out_channels: int, + temb_channels: int, + resolution_idx: Optional[int] = None, + dropout: float = 0.0, + num_layers: int = 1, + resnet_eps: float = 1e-6, + resnet_time_scale_shift: str = "default", + resnet_act_fn: str = "swish", + resnet_groups: int = 32, + resnet_pre_norm: bool = True, + output_scale_factor: float = 1.0, + add_upsample: bool = True, + ): + super().__init__() + resnets = [] + + for i in range(num_layers): + res_skip_channels = in_channels if (i == num_layers - 1) else out_channels + resnet_in_channels = prev_output_channel if i == 0 else out_channels + + resnets.append( + ResnetBlock2D( + in_channels=resnet_in_channels + res_skip_channels, + out_channels=out_channels, + temb_channels=temb_channels, + eps=resnet_eps, + groups=resnet_groups, + dropout=dropout, + time_embedding_norm=resnet_time_scale_shift, + non_linearity=resnet_act_fn, + output_scale_factor=output_scale_factor, + pre_norm=resnet_pre_norm, + ) + ) + + self.resnets = nn.ModuleList(resnets) + + if add_upsample: + self.upsamplers = nn.ModuleList([Upsample2D(out_channels, use_conv=True, out_channels=out_channels)]) + else: + self.upsamplers = None + + self.gradient_checkpointing = False + self.resolution_idx = resolution_idx + + def forward( + self, + hidden_states: torch.FloatTensor, + res_hidden_states_tuple: Tuple[torch.FloatTensor, ...], + temb: Optional[torch.FloatTensor] = None, + upsample_size: Optional[int] = None, + scale: float = 1.0, + ) -> torch.FloatTensor: + is_freeu_enabled = ( + getattr(self, "s1", None) + and getattr(self, "s2", None) + and getattr(self, "b1", None) + and getattr(self, "b2", None) + ) + + for resnet in self.resnets: + # pop res hidden states + res_hidden_states = res_hidden_states_tuple[-1] + res_hidden_states_tuple = res_hidden_states_tuple[:-1] + + # FreeU: Only operate on the first two stages + if is_freeu_enabled: + hidden_states, res_hidden_states = apply_freeu( + self.resolution_idx, + hidden_states, + res_hidden_states, + s1=self.s1, + s2=self.s2, + b1=self.b1, + b2=self.b2, + ) + + hidden_states = torch.cat([hidden_states, res_hidden_states], dim=1) + + if self.training and self.gradient_checkpointing: + + def create_custom_forward(module): + def custom_forward(*inputs): + return module(*inputs) + + return custom_forward + + if is_torch_version(">=", "1.11.0"): + hidden_states = torch.utils.checkpoint.checkpoint( + create_custom_forward(resnet), hidden_states, temb, use_reentrant=False + ) + else: + hidden_states = torch.utils.checkpoint.checkpoint( + create_custom_forward(resnet), hidden_states, temb + ) + else: + hidden_states = resnet(hidden_states, temb, scale=scale) + + if self.upsamplers is not None: + for upsampler in self.upsamplers: + hidden_states = upsampler(hidden_states, upsample_size, scale=scale) + + return hidden_states + + +class UpDecoderBlock2D(nn.Module): + def __init__( + self, + in_channels: int, + out_channels: int, + resolution_idx: Optional[int] = None, + dropout: float = 0.0, + num_layers: int = 1, + resnet_eps: float = 1e-6, + resnet_time_scale_shift: str = "default", # default, spatial + resnet_act_fn: str = "swish", + resnet_groups: int = 32, + resnet_pre_norm: bool = True, + output_scale_factor: float = 1.0, + add_upsample: bool = True, + temb_channels: Optional[int] = None, + ): + super().__init__() + resnets = [] + + for i in range(num_layers): + input_channels = in_channels if i == 0 else out_channels + + resnets.append( + ResnetBlock2D( + in_channels=input_channels, + out_channels=out_channels, + temb_channels=temb_channels, + eps=resnet_eps, + groups=resnet_groups, + dropout=dropout, + time_embedding_norm=resnet_time_scale_shift, + non_linearity=resnet_act_fn, + output_scale_factor=output_scale_factor, + pre_norm=resnet_pre_norm, + ) + ) + + self.resnets = nn.ModuleList(resnets) + + if add_upsample: + self.upsamplers = nn.ModuleList([Upsample2D(out_channels, use_conv=True, out_channels=out_channels)]) + else: + self.upsamplers = None + + self.resolution_idx = resolution_idx + + def forward( + self, hidden_states: torch.FloatTensor, temb: Optional[torch.FloatTensor] = None, scale: float = 1.0 + ) -> torch.FloatTensor: + for resnet in self.resnets: + hidden_states = resnet(hidden_states, temb=temb, scale=scale) + + if self.upsamplers is not None: + for upsampler in self.upsamplers: + hidden_states = upsampler(hidden_states) + + return hidden_states + + +class AttnUpDecoderBlock2D(nn.Module): + def __init__( + self, + in_channels: int, + out_channels: int, + resolution_idx: Optional[int] = None, + dropout: float = 0.0, + num_layers: int = 1, + resnet_eps: float = 1e-6, + resnet_time_scale_shift: str = "default", + resnet_act_fn: str = "swish", + resnet_groups: int = 32, + resnet_pre_norm: bool = True, + attention_head_dim: int = 1, + output_scale_factor: float = 1.0, + add_upsample: bool = True, + temb_channels: Optional[int] = None, + ): + super().__init__() + resnets = [] + attentions = [] + + if attention_head_dim is None: + logger.warn( + f"It is not recommend to pass `attention_head_dim=None`. Defaulting `attention_head_dim` to `out_channels`: {out_channels}." + ) + attention_head_dim = out_channels + + for i in range(num_layers): + input_channels = in_channels if i == 0 else out_channels + + resnets.append( + ResnetBlock2D( + in_channels=input_channels, + out_channels=out_channels, + temb_channels=temb_channels, + eps=resnet_eps, + groups=resnet_groups, + dropout=dropout, + time_embedding_norm=resnet_time_scale_shift, + non_linearity=resnet_act_fn, + output_scale_factor=output_scale_factor, + pre_norm=resnet_pre_norm, + ) + ) + attentions.append( + Attention( + out_channels, + heads=out_channels // attention_head_dim, + dim_head=attention_head_dim, + rescale_output_factor=output_scale_factor, + eps=resnet_eps, + norm_num_groups=resnet_groups if resnet_time_scale_shift != "spatial" else None, + spatial_norm_dim=temb_channels if resnet_time_scale_shift == "spatial" else None, + residual_connection=True, + bias=True, + upcast_softmax=True, + _from_deprecated_attn_block=True, + ) + ) + + self.attentions = nn.ModuleList(attentions) + self.resnets = nn.ModuleList(resnets) + + if add_upsample: + self.upsamplers = nn.ModuleList([Upsample2D(out_channels, use_conv=True, out_channels=out_channels)]) + else: + self.upsamplers = None + + self.resolution_idx = resolution_idx + + def forward( + self, hidden_states: torch.FloatTensor, temb: Optional[torch.FloatTensor] = None, scale: float = 1.0 + ) -> torch.FloatTensor: + for resnet, attn in zip(self.resnets, self.attentions): + hidden_states = resnet(hidden_states, temb=temb, scale=scale) + cross_attention_kwargs = {"scale": scale} + hidden_states = attn(hidden_states, temb=temb, **cross_attention_kwargs) + + if self.upsamplers is not None: + for upsampler in self.upsamplers: + hidden_states = upsampler(hidden_states, scale=scale) + + return hidden_states + + +class AttnSkipUpBlock2D(nn.Module): + def __init__( + self, + in_channels: int, + prev_output_channel: int, + out_channels: int, + temb_channels: int, + resolution_idx: Optional[int] = None, + dropout: float = 0.0, + num_layers: int = 1, + resnet_eps: float = 1e-6, + resnet_time_scale_shift: str = "default", + resnet_act_fn: str = "swish", + resnet_pre_norm: bool = True, + attention_head_dim: int = 1, + output_scale_factor: float = np.sqrt(2.0), + add_upsample: bool = True, + ): + super().__init__() + self.attentions = nn.ModuleList([]) + self.resnets = nn.ModuleList([]) + + for i in range(num_layers): + res_skip_channels = in_channels if (i == num_layers - 1) else out_channels + resnet_in_channels = prev_output_channel if i == 0 else out_channels + + self.resnets.append( + ResnetBlock2D( + in_channels=resnet_in_channels + res_skip_channels, + out_channels=out_channels, + temb_channels=temb_channels, + eps=resnet_eps, + groups=min(resnet_in_channels + res_skip_channels // 4, 32), + groups_out=min(out_channels // 4, 32), + dropout=dropout, + time_embedding_norm=resnet_time_scale_shift, + non_linearity=resnet_act_fn, + output_scale_factor=output_scale_factor, + pre_norm=resnet_pre_norm, + ) + ) + + if attention_head_dim is None: + logger.warn( + f"It is not recommend to pass `attention_head_dim=None`. Defaulting `attention_head_dim` to `out_channels`: {out_channels}." + ) + attention_head_dim = out_channels + + self.attentions.append( + Attention( + out_channels, + heads=out_channels // attention_head_dim, + dim_head=attention_head_dim, + rescale_output_factor=output_scale_factor, + eps=resnet_eps, + norm_num_groups=32, + residual_connection=True, + bias=True, + upcast_softmax=True, + _from_deprecated_attn_block=True, + ) + ) + + self.upsampler = FirUpsample2D(in_channels, out_channels=out_channels) + if add_upsample: + self.resnet_up = ResnetBlock2D( + in_channels=out_channels, + out_channels=out_channels, + temb_channels=temb_channels, + eps=resnet_eps, + groups=min(out_channels // 4, 32), + groups_out=min(out_channels // 4, 32), + dropout=dropout, + time_embedding_norm=resnet_time_scale_shift, + non_linearity=resnet_act_fn, + output_scale_factor=output_scale_factor, + pre_norm=resnet_pre_norm, + use_in_shortcut=True, + up=True, + kernel="fir", + ) + self.skip_conv = nn.Conv2d(out_channels, 3, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) + self.skip_norm = torch.nn.GroupNorm( + num_groups=min(out_channels // 4, 32), num_channels=out_channels, eps=resnet_eps, affine=True + ) + self.act = nn.SiLU() + else: + self.resnet_up = None + self.skip_conv = None + self.skip_norm = None + self.act = None + + self.resolution_idx = resolution_idx + + def forward( + self, + hidden_states: torch.FloatTensor, + res_hidden_states_tuple: Tuple[torch.FloatTensor, ...], + temb: Optional[torch.FloatTensor] = None, + skip_sample=None, + scale: float = 1.0, + ) -> Tuple[torch.FloatTensor, torch.FloatTensor]: + for resnet in self.resnets: + # pop res hidden states + res_hidden_states = res_hidden_states_tuple[-1] + res_hidden_states_tuple = res_hidden_states_tuple[:-1] + hidden_states = torch.cat([hidden_states, res_hidden_states], dim=1) + + hidden_states = resnet(hidden_states, temb, scale=scale) + + cross_attention_kwargs = {"scale": scale} + hidden_states = self.attentions[0](hidden_states, **cross_attention_kwargs) + + if skip_sample is not None: + skip_sample = self.upsampler(skip_sample) + else: + skip_sample = 0 + + if self.resnet_up is not None: + skip_sample_states = self.skip_norm(hidden_states) + skip_sample_states = self.act(skip_sample_states) + skip_sample_states = self.skip_conv(skip_sample_states) + + skip_sample = skip_sample + skip_sample_states + + hidden_states = self.resnet_up(hidden_states, temb, scale=scale) + + return hidden_states, skip_sample + + +class SkipUpBlock2D(nn.Module): + def __init__( + self, + in_channels: int, + prev_output_channel: int, + out_channels: int, + temb_channels: int, + resolution_idx: Optional[int] = None, + dropout: float = 0.0, + num_layers: int = 1, + resnet_eps: float = 1e-6, + resnet_time_scale_shift: str = "default", + resnet_act_fn: str = "swish", + resnet_pre_norm: bool = True, + output_scale_factor: float = np.sqrt(2.0), + add_upsample: bool = True, + upsample_padding: int = 1, + ): + super().__init__() + self.resnets = nn.ModuleList([]) + + for i in range(num_layers): + res_skip_channels = in_channels if (i == num_layers - 1) else out_channels + resnet_in_channels = prev_output_channel if i == 0 else out_channels + + self.resnets.append( + ResnetBlock2D( + in_channels=resnet_in_channels + res_skip_channels, + out_channels=out_channels, + temb_channels=temb_channels, + eps=resnet_eps, + groups=min((resnet_in_channels + res_skip_channels) // 4, 32), + groups_out=min(out_channels // 4, 32), + dropout=dropout, + time_embedding_norm=resnet_time_scale_shift, + non_linearity=resnet_act_fn, + output_scale_factor=output_scale_factor, + pre_norm=resnet_pre_norm, + ) + ) + + self.upsampler = FirUpsample2D(in_channels, out_channels=out_channels) + if add_upsample: + self.resnet_up = ResnetBlock2D( + in_channels=out_channels, + out_channels=out_channels, + temb_channels=temb_channels, + eps=resnet_eps, + groups=min(out_channels // 4, 32), + groups_out=min(out_channels // 4, 32), + dropout=dropout, + time_embedding_norm=resnet_time_scale_shift, + non_linearity=resnet_act_fn, + output_scale_factor=output_scale_factor, + pre_norm=resnet_pre_norm, + use_in_shortcut=True, + up=True, + kernel="fir", + ) + self.skip_conv = nn.Conv2d(out_channels, 3, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) + self.skip_norm = torch.nn.GroupNorm( + num_groups=min(out_channels // 4, 32), num_channels=out_channels, eps=resnet_eps, affine=True + ) + self.act = nn.SiLU() + else: + self.resnet_up = None + self.skip_conv = None + self.skip_norm = None + self.act = None + + self.resolution_idx = resolution_idx + + def forward( + self, + hidden_states: torch.FloatTensor, + res_hidden_states_tuple: Tuple[torch.FloatTensor, ...], + temb: Optional[torch.FloatTensor] = None, + skip_sample=None, + scale: float = 1.0, + ) -> Tuple[torch.FloatTensor, torch.FloatTensor]: + for resnet in self.resnets: + # pop res hidden states + res_hidden_states = res_hidden_states_tuple[-1] + res_hidden_states_tuple = res_hidden_states_tuple[:-1] + hidden_states = torch.cat([hidden_states, res_hidden_states], dim=1) + + hidden_states = resnet(hidden_states, temb, scale=scale) + + if skip_sample is not None: + skip_sample = self.upsampler(skip_sample) + else: + skip_sample = 0 + + if self.resnet_up is not None: + skip_sample_states = self.skip_norm(hidden_states) + skip_sample_states = self.act(skip_sample_states) + skip_sample_states = self.skip_conv(skip_sample_states) + + skip_sample = skip_sample + skip_sample_states + + hidden_states = self.resnet_up(hidden_states, temb, scale=scale) + + return hidden_states, skip_sample + + +class ResnetUpsampleBlock2D(nn.Module): + def __init__( + self, + in_channels: int, + prev_output_channel: int, + out_channels: int, + temb_channels: int, + resolution_idx: Optional[int] = None, + dropout: float = 0.0, + num_layers: int = 1, + resnet_eps: float = 1e-6, + resnet_time_scale_shift: str = "default", + resnet_act_fn: str = "swish", + resnet_groups: int = 32, + resnet_pre_norm: bool = True, + output_scale_factor: float = 1.0, + add_upsample: bool = True, + skip_time_act: bool = False, + ): + super().__init__() + resnets = [] + + for i in range(num_layers): + res_skip_channels = in_channels if (i == num_layers - 1) else out_channels + resnet_in_channels = prev_output_channel if i == 0 else out_channels + + resnets.append( + ResnetBlock2D( + in_channels=resnet_in_channels + res_skip_channels, + out_channels=out_channels, + temb_channels=temb_channels, + eps=resnet_eps, + groups=resnet_groups, + dropout=dropout, + time_embedding_norm=resnet_time_scale_shift, + non_linearity=resnet_act_fn, + output_scale_factor=output_scale_factor, + pre_norm=resnet_pre_norm, + skip_time_act=skip_time_act, + ) + ) + + self.resnets = nn.ModuleList(resnets) + + if add_upsample: + self.upsamplers = nn.ModuleList( + [ + ResnetBlock2D( + in_channels=out_channels, + out_channels=out_channels, + temb_channels=temb_channels, + eps=resnet_eps, + groups=resnet_groups, + dropout=dropout, + time_embedding_norm=resnet_time_scale_shift, + non_linearity=resnet_act_fn, + output_scale_factor=output_scale_factor, + pre_norm=resnet_pre_norm, + skip_time_act=skip_time_act, + up=True, + ) + ] + ) + else: + self.upsamplers = None + + self.gradient_checkpointing = False + self.resolution_idx = resolution_idx + + def forward( + self, + hidden_states: torch.FloatTensor, + res_hidden_states_tuple: Tuple[torch.FloatTensor, ...], + temb: Optional[torch.FloatTensor] = None, + upsample_size: Optional[int] = None, + scale: float = 1.0, + ) -> torch.FloatTensor: + for resnet in self.resnets: + # pop res hidden states + res_hidden_states = res_hidden_states_tuple[-1] + res_hidden_states_tuple = res_hidden_states_tuple[:-1] + hidden_states = torch.cat([hidden_states, res_hidden_states], dim=1) + + if self.training and self.gradient_checkpointing: + + def create_custom_forward(module): + def custom_forward(*inputs): + return module(*inputs) + + return custom_forward + + if is_torch_version(">=", "1.11.0"): + hidden_states = torch.utils.checkpoint.checkpoint( + create_custom_forward(resnet), hidden_states, temb, use_reentrant=False + ) + else: + hidden_states = torch.utils.checkpoint.checkpoint( + create_custom_forward(resnet), hidden_states, temb + ) + else: + hidden_states = resnet(hidden_states, temb, scale=scale) + + if self.upsamplers is not None: + for upsampler in self.upsamplers: + hidden_states = upsampler(hidden_states, temb, scale=scale) + + return hidden_states + + +class SimpleCrossAttnUpBlock2D(nn.Module): + def __init__( + self, + in_channels: int, + out_channels: int, + prev_output_channel: int, + temb_channels: int, + resolution_idx: Optional[int] = None, + dropout: float = 0.0, + num_layers: int = 1, + resnet_eps: float = 1e-6, + resnet_time_scale_shift: str = "default", + resnet_act_fn: str = "swish", + resnet_groups: int = 32, + resnet_pre_norm: bool = True, + attention_head_dim: int = 1, + cross_attention_dim: int = 1280, + output_scale_factor: float = 1.0, + add_upsample: bool = True, + skip_time_act: bool = False, + only_cross_attention: bool = False, + cross_attention_norm: Optional[str] = None, + ): + super().__init__() + resnets = [] + attentions = [] + + self.has_cross_attention = True + self.attention_head_dim = attention_head_dim + + self.num_heads = out_channels // self.attention_head_dim + + for i in range(num_layers): + res_skip_channels = in_channels if (i == num_layers - 1) else out_channels + resnet_in_channels = prev_output_channel if i == 0 else out_channels + + resnets.append( + ResnetBlock2D( + in_channels=resnet_in_channels + res_skip_channels, + out_channels=out_channels, + temb_channels=temb_channels, + eps=resnet_eps, + groups=resnet_groups, + dropout=dropout, + time_embedding_norm=resnet_time_scale_shift, + non_linearity=resnet_act_fn, + output_scale_factor=output_scale_factor, + pre_norm=resnet_pre_norm, + skip_time_act=skip_time_act, + ) + ) + + processor = ( + AttnAddedKVProcessor2_0() if hasattr(F, "scaled_dot_product_attention") else AttnAddedKVProcessor() + ) + + attentions.append( + Attention( + query_dim=out_channels, + cross_attention_dim=out_channels, + heads=self.num_heads, + dim_head=self.attention_head_dim, + added_kv_proj_dim=cross_attention_dim, + norm_num_groups=resnet_groups, + bias=True, + upcast_softmax=True, + only_cross_attention=only_cross_attention, + cross_attention_norm=cross_attention_norm, + processor=processor, + ) + ) + self.attentions = nn.ModuleList(attentions) + self.resnets = nn.ModuleList(resnets) + + if add_upsample: + self.upsamplers = nn.ModuleList( + [ + ResnetBlock2D( + in_channels=out_channels, + out_channels=out_channels, + temb_channels=temb_channels, + eps=resnet_eps, + groups=resnet_groups, + dropout=dropout, + time_embedding_norm=resnet_time_scale_shift, + non_linearity=resnet_act_fn, + output_scale_factor=output_scale_factor, + pre_norm=resnet_pre_norm, + skip_time_act=skip_time_act, + up=True, + ) + ] + ) + else: + self.upsamplers = None + + self.gradient_checkpointing = False + self.resolution_idx = resolution_idx + + def forward( + self, + hidden_states: torch.FloatTensor, + res_hidden_states_tuple: Tuple[torch.FloatTensor, ...], + temb: Optional[torch.FloatTensor] = None, + encoder_hidden_states: Optional[torch.FloatTensor] = None, + upsample_size: Optional[int] = None, + attention_mask: Optional[torch.FloatTensor] = None, + cross_attention_kwargs: Optional[Dict[str, Any]] = None, + encoder_attention_mask: Optional[torch.FloatTensor] = None, + ) -> torch.FloatTensor: + cross_attention_kwargs = cross_attention_kwargs if cross_attention_kwargs is not None else {} + + lora_scale = cross_attention_kwargs.get("scale", 1.0) + if attention_mask is None: + # if encoder_hidden_states is defined: we are doing cross-attn, so we should use cross-attn mask. + mask = None if encoder_hidden_states is None else encoder_attention_mask + else: + # when attention_mask is defined: we don't even check for encoder_attention_mask. + # this is to maintain compatibility with UnCLIP, which uses 'attention_mask' param for cross-attn masks. + # TODO: UnCLIP should express cross-attn mask via encoder_attention_mask param instead of via attention_mask. + # then we can simplify this whole if/else block to: + # mask = attention_mask if encoder_hidden_states is None else encoder_attention_mask + mask = attention_mask + + for resnet, attn in zip(self.resnets, self.attentions): + # resnet + # pop res hidden states + res_hidden_states = res_hidden_states_tuple[-1] + res_hidden_states_tuple = res_hidden_states_tuple[:-1] + hidden_states = torch.cat([hidden_states, res_hidden_states], dim=1) + + if self.training and self.gradient_checkpointing: + + def create_custom_forward(module, return_dict=None): + def custom_forward(*inputs): + if return_dict is not None: + return module(*inputs, return_dict=return_dict) + else: + return module(*inputs) + + return custom_forward + + hidden_states = torch.utils.checkpoint.checkpoint(create_custom_forward(resnet), hidden_states, temb) + hidden_states = attn( + hidden_states, + encoder_hidden_states=encoder_hidden_states, + attention_mask=mask, + **cross_attention_kwargs, + ) + else: + hidden_states = resnet(hidden_states, temb, scale=lora_scale) + + hidden_states = attn( + hidden_states, + encoder_hidden_states=encoder_hidden_states, + attention_mask=mask, + **cross_attention_kwargs, + ) + + if self.upsamplers is not None: + for upsampler in self.upsamplers: + hidden_states = upsampler(hidden_states, temb, scale=lora_scale) + + return hidden_states + + +class KUpBlock2D(nn.Module): + def __init__( + self, + in_channels: int, + out_channels: int, + temb_channels: int, + resolution_idx: int, + dropout: float = 0.0, + num_layers: int = 5, + resnet_eps: float = 1e-5, + resnet_act_fn: str = "gelu", + resnet_group_size: Optional[int] = 32, + add_upsample: bool = True, + ): + super().__init__() + resnets = [] + k_in_channels = 2 * out_channels + k_out_channels = in_channels + num_layers = num_layers - 1 + + for i in range(num_layers): + in_channels = k_in_channels if i == 0 else out_channels + groups = in_channels // resnet_group_size + groups_out = out_channels // resnet_group_size + + resnets.append( + ResnetBlock2D( + in_channels=in_channels, + out_channels=k_out_channels if (i == num_layers - 1) else out_channels, + temb_channels=temb_channels, + eps=resnet_eps, + groups=groups, + groups_out=groups_out, + dropout=dropout, + non_linearity=resnet_act_fn, + time_embedding_norm="ada_group", + conv_shortcut_bias=False, + ) + ) + + self.resnets = nn.ModuleList(resnets) + + if add_upsample: + self.upsamplers = nn.ModuleList([KUpsample2D()]) + else: + self.upsamplers = None + + self.gradient_checkpointing = False + self.resolution_idx = resolution_idx + + def forward( + self, + hidden_states: torch.FloatTensor, + res_hidden_states_tuple: Tuple[torch.FloatTensor, ...], + temb: Optional[torch.FloatTensor] = None, + upsample_size: Optional[int] = None, + scale: float = 1.0, + ) -> torch.FloatTensor: + res_hidden_states_tuple = res_hidden_states_tuple[-1] + if res_hidden_states_tuple is not None: + hidden_states = torch.cat([hidden_states, res_hidden_states_tuple], dim=1) + + for resnet in self.resnets: + if self.training and self.gradient_checkpointing: + + def create_custom_forward(module): + def custom_forward(*inputs): + return module(*inputs) + + return custom_forward + + if is_torch_version(">=", "1.11.0"): + hidden_states = torch.utils.checkpoint.checkpoint( + create_custom_forward(resnet), hidden_states, temb, use_reentrant=False + ) + else: + hidden_states = torch.utils.checkpoint.checkpoint( + create_custom_forward(resnet), hidden_states, temb + ) + else: + hidden_states = resnet(hidden_states, temb, scale=scale) + + if self.upsamplers is not None: + for upsampler in self.upsamplers: + hidden_states = upsampler(hidden_states) + + return hidden_states + + +class KCrossAttnUpBlock2D(nn.Module): + def __init__( + self, + in_channels: int, + out_channels: int, + temb_channels: int, + resolution_idx: int, + dropout: float = 0.0, + num_layers: int = 4, + resnet_eps: float = 1e-5, + resnet_act_fn: str = "gelu", + resnet_group_size: int = 32, + attention_head_dim: int = 1, # attention dim_head + cross_attention_dim: int = 768, + add_upsample: bool = True, + upcast_attention: bool = False, + ): + super().__init__() + resnets = [] + attentions = [] + + is_first_block = in_channels == out_channels == temb_channels + is_middle_block = in_channels != out_channels + add_self_attention = True if is_first_block else False + + self.has_cross_attention = True + self.attention_head_dim = attention_head_dim + + # in_channels, and out_channels for the block (k-unet) + k_in_channels = out_channels if is_first_block else 2 * out_channels + k_out_channels = in_channels + + num_layers = num_layers - 1 + + for i in range(num_layers): + in_channels = k_in_channels if i == 0 else out_channels + groups = in_channels // resnet_group_size + groups_out = out_channels // resnet_group_size + + if is_middle_block and (i == num_layers - 1): + conv_2d_out_channels = k_out_channels + else: + conv_2d_out_channels = None + + resnets.append( + ResnetBlock2D( + in_channels=in_channels, + out_channels=out_channels, + conv_2d_out_channels=conv_2d_out_channels, + temb_channels=temb_channels, + eps=resnet_eps, + groups=groups, + groups_out=groups_out, + dropout=dropout, + non_linearity=resnet_act_fn, + time_embedding_norm="ada_group", + conv_shortcut_bias=False, + ) + ) + attentions.append( + KAttentionBlock( + k_out_channels if (i == num_layers - 1) else out_channels, + k_out_channels // attention_head_dim + if (i == num_layers - 1) + else out_channels // attention_head_dim, + attention_head_dim, + cross_attention_dim=cross_attention_dim, + temb_channels=temb_channels, + attention_bias=True, + add_self_attention=add_self_attention, + cross_attention_norm="layer_norm", + upcast_attention=upcast_attention, + ) + ) + + self.resnets = nn.ModuleList(resnets) + self.attentions = nn.ModuleList(attentions) + + if add_upsample: + self.upsamplers = nn.ModuleList([KUpsample2D()]) + else: + self.upsamplers = None + + self.gradient_checkpointing = False + self.resolution_idx = resolution_idx + + def forward( + self, + hidden_states: torch.FloatTensor, + res_hidden_states_tuple: Tuple[torch.FloatTensor, ...], + temb: Optional[torch.FloatTensor] = None, + encoder_hidden_states: Optional[torch.FloatTensor] = None, + cross_attention_kwargs: Optional[Dict[str, Any]] = None, + upsample_size: Optional[int] = None, + attention_mask: Optional[torch.FloatTensor] = None, + encoder_attention_mask: Optional[torch.FloatTensor] = None, + ) -> torch.FloatTensor: + res_hidden_states_tuple = res_hidden_states_tuple[-1] + if res_hidden_states_tuple is not None: + hidden_states = torch.cat([hidden_states, res_hidden_states_tuple], dim=1) + + lora_scale = cross_attention_kwargs.get("scale", 1.0) if cross_attention_kwargs is not None else 1.0 + for resnet, attn in zip(self.resnets, self.attentions): + if self.training and self.gradient_checkpointing: + + def create_custom_forward(module, return_dict=None): + def custom_forward(*inputs): + if return_dict is not None: + return module(*inputs, return_dict=return_dict) + else: + return module(*inputs) + + return custom_forward + + ckpt_kwargs: Dict[str, Any] = {"use_reentrant": False} if is_torch_version(">=", "1.11.0") else {} + hidden_states = torch.utils.checkpoint.checkpoint( + create_custom_forward(resnet), + hidden_states, + temb, + **ckpt_kwargs, + ) + hidden_states = attn( + hidden_states, + encoder_hidden_states=encoder_hidden_states, + emb=temb, + attention_mask=attention_mask, + cross_attention_kwargs=cross_attention_kwargs, + encoder_attention_mask=encoder_attention_mask, + ) + else: + hidden_states = resnet(hidden_states, temb, scale=lora_scale) + hidden_states = attn( + hidden_states, + encoder_hidden_states=encoder_hidden_states, + emb=temb, + attention_mask=attention_mask, + cross_attention_kwargs=cross_attention_kwargs, + encoder_attention_mask=encoder_attention_mask, + ) + + if self.upsamplers is not None: + for upsampler in self.upsamplers: + hidden_states = upsampler(hidden_states) + + return hidden_states + + +# can potentially later be renamed to `No-feed-forward` attention +class KAttentionBlock(nn.Module): + r""" + A basic Transformer block. + + Parameters: + dim (`int`): The number of channels in the input and output. + num_attention_heads (`int`): The number of heads to use for multi-head attention. + attention_head_dim (`int`): The number of channels in each head. + dropout (`float`, *optional*, defaults to 0.0): The dropout probability to use. + cross_attention_dim (`int`, *optional*): The size of the encoder_hidden_states vector for cross attention. + attention_bias (`bool`, *optional*, defaults to `False`): + Configure if the attention layers should contain a bias parameter. + upcast_attention (`bool`, *optional*, defaults to `False`): + Set to `True` to upcast the attention computation to `float32`. + temb_channels (`int`, *optional*, defaults to 768): + The number of channels in the token embedding. + add_self_attention (`bool`, *optional*, defaults to `False`): + Set to `True` to add self-attention to the block. + cross_attention_norm (`str`, *optional*, defaults to `None`): + The type of normalization to use for the cross attention. Can be `None`, `layer_norm`, or `group_norm`. + group_size (`int`, *optional*, defaults to 32): + The number of groups to separate the channels into for group normalization. + """ + + def __init__( + self, + dim: int, + num_attention_heads: int, + attention_head_dim: int, + dropout: float = 0.0, + cross_attention_dim: Optional[int] = None, + attention_bias: bool = False, + upcast_attention: bool = False, + temb_channels: int = 768, # for ada_group_norm + add_self_attention: bool = False, + cross_attention_norm: Optional[str] = None, + group_size: int = 32, + ): + super().__init__() + self.add_self_attention = add_self_attention + + # 1. Self-Attn + if add_self_attention: + self.norm1 = AdaGroupNorm(temb_channels, dim, max(1, dim // group_size)) + self.attn1 = Attention( + query_dim=dim, + heads=num_attention_heads, + dim_head=attention_head_dim, + dropout=dropout, + bias=attention_bias, + cross_attention_dim=None, + cross_attention_norm=None, + ) + + # 2. Cross-Attn + self.norm2 = AdaGroupNorm(temb_channels, dim, max(1, dim // group_size)) + self.attn2 = Attention( + query_dim=dim, + cross_attention_dim=cross_attention_dim, + heads=num_attention_heads, + dim_head=attention_head_dim, + dropout=dropout, + bias=attention_bias, + upcast_attention=upcast_attention, + cross_attention_norm=cross_attention_norm, + ) + + def _to_3d(self, hidden_states: torch.FloatTensor, height: int, weight: int) -> torch.FloatTensor: + return hidden_states.permute(0, 2, 3, 1).reshape(hidden_states.shape[0], height * weight, -1) + + def _to_4d(self, hidden_states: torch.FloatTensor, height: int, weight: int) -> torch.FloatTensor: + return hidden_states.permute(0, 2, 1).reshape(hidden_states.shape[0], -1, height, weight) + + def forward( + self, + hidden_states: torch.FloatTensor, + encoder_hidden_states: Optional[torch.FloatTensor] = None, + # TODO: mark emb as non-optional (self.norm2 requires it). + # requires assessing impact of change to positional param interface. + emb: Optional[torch.FloatTensor] = None, + attention_mask: Optional[torch.FloatTensor] = None, + cross_attention_kwargs: Optional[Dict[str, Any]] = None, + encoder_attention_mask: Optional[torch.FloatTensor] = None, + ) -> torch.FloatTensor: + cross_attention_kwargs = cross_attention_kwargs if cross_attention_kwargs is not None else {} + + # 1. Self-Attention + if self.add_self_attention: + norm_hidden_states = self.norm1(hidden_states, emb) + + height, weight = norm_hidden_states.shape[2:] + norm_hidden_states = self._to_3d(norm_hidden_states, height, weight) + + attn_output = self.attn1( + norm_hidden_states, + encoder_hidden_states=None, + attention_mask=attention_mask, + **cross_attention_kwargs, + ) + attn_output = self._to_4d(attn_output, height, weight) + + hidden_states = attn_output + hidden_states + + # 2. Cross-Attention/None + norm_hidden_states = self.norm2(hidden_states, emb) + + height, weight = norm_hidden_states.shape[2:] + norm_hidden_states = self._to_3d(norm_hidden_states, height, weight) + attn_output = self.attn2( + norm_hidden_states, + encoder_hidden_states=encoder_hidden_states, + attention_mask=attention_mask if encoder_hidden_states is None else encoder_attention_mask, + **cross_attention_kwargs, + ) + attn_output = self._to_4d(attn_output, height, weight) + + hidden_states = attn_output + hidden_states + + return hidden_states diff --git a/models/unet_2d_condition.py b/models/unet_2d_condition.py new file mode 100644 index 0000000..e18f69f --- /dev/null +++ b/models/unet_2d_condition.py @@ -0,0 +1,1214 @@ +# Copyright 2023 The HuggingFace Team. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Some modifications are reimplemented in public environments by Xiao Fu and Mu Hu + +from dataclasses import dataclass +from typing import Any, Dict, List, Optional, Tuple, Union + +import torch +import torch.nn as nn +import torch.utils.checkpoint + +from diffusers.configuration_utils import ConfigMixin, register_to_config +from diffusers.loaders import UNet2DConditionLoadersMixin +from diffusers.utils import USE_PEFT_BACKEND, BaseOutput, deprecate, logging, scale_lora_layers, unscale_lora_layers +from diffusers.models.activations import get_activation +from diffusers.models.attention_processor import ( + ADDED_KV_ATTENTION_PROCESSORS, + CROSS_ATTENTION_PROCESSORS, + Attention, + AttentionProcessor, + AttnAddedKVProcessor, + AttnProcessor, +) +from diffusers.models.embeddings import ( + GaussianFourierProjection, + ImageHintTimeEmbedding, + ImageProjection, + ImageTimeEmbedding, + #PositionNet, + TextImageProjection, + TextImageTimeEmbedding, + TextTimeEmbedding, + TimestepEmbedding, + Timesteps, +) +from diffusers.models.modeling_utils import ModelMixin + +from .unet_2d_blocks import ( + UNetMidBlock2D, + UNetMidBlock2DCrossAttn, + UNetMidBlock2DSimpleCrossAttn, + get_down_block, + get_up_block, +) + + +logger = logging.get_logger(__name__) # pylint: disable=invalid-name + + +@dataclass +class UNet2DConditionOutput(BaseOutput): + """ + The output of [`UNet2DConditionModel`]. + + Args: + sample (`torch.FloatTensor` of shape `(batch_size, num_channels, height, width)`): + The hidden states output conditioned on `encoder_hidden_states` input. Output of last layer of model. + """ + + sample: torch.FloatTensor = None + + +class UNet2DConditionModel(ModelMixin, ConfigMixin, UNet2DConditionLoadersMixin): + r""" + A conditional 2D UNet model that takes a noisy sample, conditional state, and a timestep and returns a sample + shaped output. + + This model inherits from [`ModelMixin`]. Check the superclass documentation for it's generic methods implemented + for all models (such as downloading or saving). + + Parameters: + sample_size (`int` or `Tuple[int, int]`, *optional*, defaults to `None`): + Height and width of input/output sample. + in_channels (`int`, *optional*, defaults to 4): Number of channels in the input sample. + out_channels (`int`, *optional*, defaults to 4): Number of channels in the output. + center_input_sample (`bool`, *optional*, defaults to `False`): Whether to center the input sample. + flip_sin_to_cos (`bool`, *optional*, defaults to `False`): + Whether to flip the sin to cos in the time embedding. + freq_shift (`int`, *optional*, defaults to 0): The frequency shift to apply to the time embedding. + down_block_types (`Tuple[str]`, *optional*, defaults to `("CrossAttnDownBlock2D", "CrossAttnDownBlock2D", "CrossAttnDownBlock2D", "DownBlock2D")`): + The tuple of downsample blocks to use. + mid_block_type (`str`, *optional*, defaults to `"UNetMidBlock2DCrossAttn"`): + Block type for middle of UNet, it can be one of `UNetMidBlock2DCrossAttn`, `UNetMidBlock2D`, or + `UNetMidBlock2DSimpleCrossAttn`. If `None`, the mid block layer is skipped. + up_block_types (`Tuple[str]`, *optional*, defaults to `("UpBlock2D", "CrossAttnUpBlock2D", "CrossAttnUpBlock2D", "CrossAttnUpBlock2D")`): + The tuple of upsample blocks to use. + only_cross_attention(`bool` or `Tuple[bool]`, *optional*, default to `False`): + Whether to include self-attention in the basic transformer blocks, see + [`~models.attention.BasicTransformerBlock`]. + block_out_channels (`Tuple[int]`, *optional*, defaults to `(320, 640, 1280, 1280)`): + The tuple of output channels for each block. + layers_per_block (`int`, *optional*, defaults to 2): The number of layers per block. + downsample_padding (`int`, *optional*, defaults to 1): The padding to use for the downsampling convolution. + mid_block_scale_factor (`float`, *optional*, defaults to 1.0): The scale factor to use for the mid block. + dropout (`float`, *optional*, defaults to 0.0): The dropout probability to use. + act_fn (`str`, *optional*, defaults to `"silu"`): The activation function to use. + norm_num_groups (`int`, *optional*, defaults to 32): The number of groups to use for the normalization. + If `None`, normalization and activation layers is skipped in post-processing. + norm_eps (`float`, *optional*, defaults to 1e-5): The epsilon to use for the normalization. + cross_attention_dim (`int` or `Tuple[int]`, *optional*, defaults to 1280): + The dimension of the cross attention features. + transformer_layers_per_block (`int`, `Tuple[int]`, or `Tuple[Tuple]` , *optional*, defaults to 1): + The number of transformer blocks of type [`~models.attention.BasicTransformerBlock`]. Only relevant for + [`~models.unet_2d_blocks.CrossAttnDownBlock2D`], [`~models.unet_2d_blocks.CrossAttnUpBlock2D`], + [`~models.unet_2d_blocks.UNetMidBlock2DCrossAttn`]. + reverse_transformer_layers_per_block : (`Tuple[Tuple]`, *optional*, defaults to None): + The number of transformer blocks of type [`~models.attention.BasicTransformerBlock`], in the upsampling + blocks of the U-Net. Only relevant if `transformer_layers_per_block` is of type `Tuple[Tuple]` and for + [`~models.unet_2d_blocks.CrossAttnDownBlock2D`], [`~models.unet_2d_blocks.CrossAttnUpBlock2D`], + [`~models.unet_2d_blocks.UNetMidBlock2DCrossAttn`]. + encoder_hid_dim (`int`, *optional*, defaults to None): + If `encoder_hid_dim_type` is defined, `encoder_hidden_states` will be projected from `encoder_hid_dim` + dimension to `cross_attention_dim`. + encoder_hid_dim_type (`str`, *optional*, defaults to `None`): + If given, the `encoder_hidden_states` and potentially other embeddings are down-projected to text + embeddings of dimension `cross_attention` according to `encoder_hid_dim_type`. + attention_head_dim (`int`, *optional*, defaults to 8): The dimension of the attention heads. + num_attention_heads (`int`, *optional*): + The number of attention heads. If not defined, defaults to `attention_head_dim` + resnet_time_scale_shift (`str`, *optional*, defaults to `"default"`): Time scale shift config + for ResNet blocks (see [`~models.resnet.ResnetBlock2D`]). Choose from `default` or `scale_shift`. + class_embed_type (`str`, *optional*, defaults to `None`): + The type of class embedding to use which is ultimately summed with the time embeddings. Choose from `None`, + `"timestep"`, `"identity"`, `"projection"`, or `"simple_projection"`. + addition_embed_type (`str`, *optional*, defaults to `None`): + Configures an optional embedding which will be summed with the time embeddings. Choose from `None` or + "text". "text" will use the `TextTimeEmbedding` layer. + addition_time_embed_dim: (`int`, *optional*, defaults to `None`): + Dimension for the timestep embeddings. + num_class_embeds (`int`, *optional*, defaults to `None`): + Input dimension of the learnable embedding matrix to be projected to `time_embed_dim`, when performing + class conditioning with `class_embed_type` equal to `None`. + time_embedding_type (`str`, *optional*, defaults to `positional`): + The type of position embedding to use for timesteps. Choose from `positional` or `fourier`. + time_embedding_dim (`int`, *optional*, defaults to `None`): + An optional override for the dimension of the projected time embedding. + time_embedding_act_fn (`str`, *optional*, defaults to `None`): + Optional activation function to use only once on the time embeddings before they are passed to the rest of + the UNet. Choose from `silu`, `mish`, `gelu`, and `swish`. + timestep_post_act (`str`, *optional*, defaults to `None`): + The second activation function to use in timestep embedding. Choose from `silu`, `mish` and `gelu`. + time_cond_proj_dim (`int`, *optional*, defaults to `None`): + The dimension of `cond_proj` layer in the timestep embedding. + conv_in_kernel (`int`, *optional*, default to `3`): The kernel size of `conv_in` layer. conv_out_kernel (`int`, + *optional*, default to `3`): The kernel size of `conv_out` layer. projection_class_embeddings_input_dim (`int`, + *optional*): The dimension of the `class_labels` input when + `class_embed_type="projection"`. Required when `class_embed_type="projection"`. + class_embeddings_concat (`bool`, *optional*, defaults to `False`): Whether to concatenate the time + embeddings with the class embeddings. + mid_block_only_cross_attention (`bool`, *optional*, defaults to `None`): + Whether to use cross attention with the mid block when using the `UNetMidBlock2DSimpleCrossAttn`. If + `only_cross_attention` is given as a single boolean and `mid_block_only_cross_attention` is `None`, the + `only_cross_attention` value is used as the value for `mid_block_only_cross_attention`. Default to `False` + otherwise. + """ + + _supports_gradient_checkpointing = True + + @register_to_config + def __init__( + self, + sample_size: Optional[int] = None, + in_channels: int = 4, + out_channels: int = 4, + center_input_sample: bool = False, + flip_sin_to_cos: bool = True, + freq_shift: int = 0, + down_block_types: Tuple[str] = ( + "CrossAttnDownBlock2D", + "CrossAttnDownBlock2D", + "CrossAttnDownBlock2D", + "DownBlock2D", + ), + mid_block_type: Optional[str] = "UNetMidBlock2DCrossAttn", + up_block_types: Tuple[str] = ("UpBlock2D", "CrossAttnUpBlock2D", "CrossAttnUpBlock2D", "CrossAttnUpBlock2D"), + only_cross_attention: Union[bool, Tuple[bool]] = False, + block_out_channels: Tuple[int] = (320, 640, 1280, 1280), + layers_per_block: Union[int, Tuple[int]] = 2, + downsample_padding: int = 1, + mid_block_scale_factor: float = 1, + dropout: float = 0.0, + act_fn: str = "silu", + norm_num_groups: Optional[int] = 32, + norm_eps: float = 1e-5, + cross_attention_dim: Union[int, Tuple[int]] = 1280, + transformer_layers_per_block: Union[int, Tuple[int], Tuple[Tuple]] = 1, + reverse_transformer_layers_per_block: Optional[Tuple[Tuple[int]]] = None, + encoder_hid_dim: Optional[int] = None, + encoder_hid_dim_type: Optional[str] = None, + attention_head_dim: Union[int, Tuple[int]] = 8, + num_attention_heads: Optional[Union[int, Tuple[int]]] = None, + dual_cross_attention: bool = False, + use_linear_projection: bool = False, + class_embed_type: Optional[str] = None, + addition_embed_type: Optional[str] = None, + addition_time_embed_dim: Optional[int] = None, + num_class_embeds: Optional[int] = None, + upcast_attention: bool = False, + resnet_time_scale_shift: str = "default", + resnet_skip_time_act: bool = False, + resnet_out_scale_factor: int = 1.0, + time_embedding_type: str = "positional", + time_embedding_dim: Optional[int] = None, + time_embedding_act_fn: Optional[str] = None, + timestep_post_act: Optional[str] = None, + time_cond_proj_dim: Optional[int] = None, + conv_in_kernel: int = 3, + conv_out_kernel: int = 3, + projection_class_embeddings_input_dim: Optional[int] = None, + attention_type: str = "default", + class_embeddings_concat: bool = False, + mid_block_only_cross_attention: Optional[bool] = None, + cross_attention_norm: Optional[str] = None, + addition_embed_type_num_heads=64, + ): + super().__init__() + + self.sample_size = sample_size + + if num_attention_heads is not None: + raise ValueError( + "At the moment it is not possible to define the number of attention heads via `num_attention_heads` because of a naming issue as described in https://github.com/huggingface/diffusers/issues/2011#issuecomment-1547958131. Passing `num_attention_heads` will only be supported in diffusers v0.19." + ) + + # If `num_attention_heads` is not defined (which is the case for most models) + # it will default to `attention_head_dim`. This looks weird upon first reading it and it is. + # The reason for this behavior is to correct for incorrectly named variables that were introduced + # when this library was created. The incorrect naming was only discovered much later in https://github.com/huggingface/diffusers/issues/2011#issuecomment-1547958131 + # Changing `attention_head_dim` to `num_attention_heads` for 40,000+ configurations is too backwards breaking + # which is why we correct for the naming here. + num_attention_heads = num_attention_heads or attention_head_dim + + # Check inputs + if len(down_block_types) != len(up_block_types): + raise ValueError( + f"Must provide the same number of `down_block_types` as `up_block_types`. `down_block_types`: {down_block_types}. `up_block_types`: {up_block_types}." + ) + + if len(block_out_channels) != len(down_block_types): + raise ValueError( + f"Must provide the same number of `block_out_channels` as `down_block_types`. `block_out_channels`: {block_out_channels}. `down_block_types`: {down_block_types}." + ) + + if not isinstance(only_cross_attention, bool) and len(only_cross_attention) != len(down_block_types): + raise ValueError( + f"Must provide the same number of `only_cross_attention` as `down_block_types`. `only_cross_attention`: {only_cross_attention}. `down_block_types`: {down_block_types}." + ) + + if not isinstance(num_attention_heads, int) and len(num_attention_heads) != len(down_block_types): + raise ValueError( + f"Must provide the same number of `num_attention_heads` as `down_block_types`. `num_attention_heads`: {num_attention_heads}. `down_block_types`: {down_block_types}." + ) + + if not isinstance(attention_head_dim, int) and len(attention_head_dim) != len(down_block_types): + raise ValueError( + f"Must provide the same number of `attention_head_dim` as `down_block_types`. `attention_head_dim`: {attention_head_dim}. `down_block_types`: {down_block_types}." + ) + + if isinstance(cross_attention_dim, list) and len(cross_attention_dim) != len(down_block_types): + raise ValueError( + f"Must provide the same number of `cross_attention_dim` as `down_block_types`. `cross_attention_dim`: {cross_attention_dim}. `down_block_types`: {down_block_types}." + ) + + if not isinstance(layers_per_block, int) and len(layers_per_block) != len(down_block_types): + raise ValueError( + f"Must provide the same number of `layers_per_block` as `down_block_types`. `layers_per_block`: {layers_per_block}. `down_block_types`: {down_block_types}." + ) + if isinstance(transformer_layers_per_block, list) and reverse_transformer_layers_per_block is None: + for layer_number_per_block in transformer_layers_per_block: + if isinstance(layer_number_per_block, list): + raise ValueError("Must provide 'reverse_transformer_layers_per_block` if using asymmetrical UNet.") + + # input + conv_in_padding = (conv_in_kernel - 1) // 2 + self.conv_in = nn.Conv2d( + in_channels, block_out_channels[0], kernel_size=conv_in_kernel, padding=conv_in_padding + ) + + # time + if time_embedding_type == "fourier": + time_embed_dim = time_embedding_dim or block_out_channels[0] * 2 + if time_embed_dim % 2 != 0: + raise ValueError(f"`time_embed_dim` should be divisible by 2, but is {time_embed_dim}.") + self.time_proj = GaussianFourierProjection( + time_embed_dim // 2, set_W_to_weight=False, log=False, flip_sin_to_cos=flip_sin_to_cos + ) + timestep_input_dim = time_embed_dim + elif time_embedding_type == "positional": + time_embed_dim = time_embedding_dim or block_out_channels[0] * 4 + + self.time_proj = Timesteps(block_out_channels[0], flip_sin_to_cos, freq_shift) + timestep_input_dim = block_out_channels[0] + else: + raise ValueError( + f"{time_embedding_type} does not exist. Please make sure to use one of `fourier` or `positional`." + ) + + self.time_embedding = TimestepEmbedding( + timestep_input_dim, + time_embed_dim, + act_fn=act_fn, + post_act_fn=timestep_post_act, + cond_proj_dim=time_cond_proj_dim, + ) + + if encoder_hid_dim_type is None and encoder_hid_dim is not None: + encoder_hid_dim_type = "text_proj" + self.register_to_config(encoder_hid_dim_type=encoder_hid_dim_type) + logger.info("encoder_hid_dim_type defaults to 'text_proj' as `encoder_hid_dim` is defined.") + + if encoder_hid_dim is None and encoder_hid_dim_type is not None: + raise ValueError( + f"`encoder_hid_dim` has to be defined when `encoder_hid_dim_type` is set to {encoder_hid_dim_type}." + ) + + if encoder_hid_dim_type == "text_proj": + self.encoder_hid_proj = nn.Linear(encoder_hid_dim, cross_attention_dim) + elif encoder_hid_dim_type == "text_image_proj": + # image_embed_dim DOESN'T have to be `cross_attention_dim`. To not clutter the __init__ too much + # they are set to `cross_attention_dim` here as this is exactly the required dimension for the currently only use + # case when `addition_embed_type == "text_image_proj"` (Kadinsky 2.1)` + self.encoder_hid_proj = TextImageProjection( + text_embed_dim=encoder_hid_dim, + image_embed_dim=cross_attention_dim, + cross_attention_dim=cross_attention_dim, + ) + elif encoder_hid_dim_type == "image_proj": + # Kandinsky 2.2 + self.encoder_hid_proj = ImageProjection( + image_embed_dim=encoder_hid_dim, + cross_attention_dim=cross_attention_dim, + ) + elif encoder_hid_dim_type is not None: + raise ValueError( + f"encoder_hid_dim_type: {encoder_hid_dim_type} must be None, 'text_proj' or 'text_image_proj'." + ) + else: + self.encoder_hid_proj = None + + # class embedding + if class_embed_type is None and num_class_embeds is not None: + self.class_embedding = nn.Embedding(num_class_embeds, time_embed_dim) + elif class_embed_type == "timestep": + self.class_embedding = TimestepEmbedding(timestep_input_dim, time_embed_dim, act_fn=act_fn) + elif class_embed_type == "identity": + self.class_embedding = nn.Identity(time_embed_dim, time_embed_dim) + elif class_embed_type == "projection": + if projection_class_embeddings_input_dim is None: + raise ValueError( + "`class_embed_type`: 'projection' requires `projection_class_embeddings_input_dim` be set" + ) + # The projection `class_embed_type` is the same as the timestep `class_embed_type` except + # 1. the `class_labels` inputs are not first converted to sinusoidal embeddings + # 2. it projects from an arbitrary input dimension. + # + # Note that `TimestepEmbedding` is quite general, being mainly linear layers and activations. + # When used for embedding actual timesteps, the timesteps are first converted to sinusoidal embeddings. + # As a result, `TimestepEmbedding` can be passed arbitrary vectors. + self.class_embedding = TimestepEmbedding(projection_class_embeddings_input_dim, time_embed_dim) + elif class_embed_type == "simple_projection": + if projection_class_embeddings_input_dim is None: + raise ValueError( + "`class_embed_type`: 'simple_projection' requires `projection_class_embeddings_input_dim` be set" + ) + self.class_embedding = nn.Linear(projection_class_embeddings_input_dim, time_embed_dim) + else: + self.class_embedding = None + + if addition_embed_type == "text": + if encoder_hid_dim is not None: + text_time_embedding_from_dim = encoder_hid_dim + else: + text_time_embedding_from_dim = cross_attention_dim + + self.add_embedding = TextTimeEmbedding( + text_time_embedding_from_dim, time_embed_dim, num_heads=addition_embed_type_num_heads + ) + elif addition_embed_type == "text_image": + # text_embed_dim and image_embed_dim DON'T have to be `cross_attention_dim`. To not clutter the __init__ too much + # they are set to `cross_attention_dim` here as this is exactly the required dimension for the currently only use + # case when `addition_embed_type == "text_image"` (Kadinsky 2.1)` + self.add_embedding = TextImageTimeEmbedding( + text_embed_dim=cross_attention_dim, image_embed_dim=cross_attention_dim, time_embed_dim=time_embed_dim + ) + elif addition_embed_type == "text_time": + self.add_time_proj = Timesteps(addition_time_embed_dim, flip_sin_to_cos, freq_shift) + self.add_embedding = TimestepEmbedding(projection_class_embeddings_input_dim, time_embed_dim) + elif addition_embed_type == "image": + # Kandinsky 2.2 + self.add_embedding = ImageTimeEmbedding(image_embed_dim=encoder_hid_dim, time_embed_dim=time_embed_dim) + elif addition_embed_type == "image_hint": + # Kandinsky 2.2 ControlNet + self.add_embedding = ImageHintTimeEmbedding(image_embed_dim=encoder_hid_dim, time_embed_dim=time_embed_dim) + elif addition_embed_type is not None: + raise ValueError(f"addition_embed_type: {addition_embed_type} must be None, 'text' or 'text_image'.") + + if time_embedding_act_fn is None: + self.time_embed_act = None + else: + self.time_embed_act = get_activation(time_embedding_act_fn) + + self.down_blocks = nn.ModuleList([]) + self.up_blocks = nn.ModuleList([]) + + if isinstance(only_cross_attention, bool): + if mid_block_only_cross_attention is None: + mid_block_only_cross_attention = only_cross_attention + + only_cross_attention = [only_cross_attention] * len(down_block_types) + + if mid_block_only_cross_attention is None: + mid_block_only_cross_attention = False + + if isinstance(num_attention_heads, int): + num_attention_heads = (num_attention_heads,) * len(down_block_types) + + if isinstance(attention_head_dim, int): + attention_head_dim = (attention_head_dim,) * len(down_block_types) + + if isinstance(cross_attention_dim, int): + cross_attention_dim = (cross_attention_dim,) * len(down_block_types) + + if isinstance(layers_per_block, int): + layers_per_block = [layers_per_block] * len(down_block_types) + + if isinstance(transformer_layers_per_block, int): + transformer_layers_per_block = [transformer_layers_per_block] * len(down_block_types) + + if class_embeddings_concat: + # The time embeddings are concatenated with the class embeddings. The dimension of the + # time embeddings passed to the down, middle, and up blocks is twice the dimension of the + # regular time embeddings + blocks_time_embed_dim = time_embed_dim * 2 + else: + blocks_time_embed_dim = time_embed_dim + + # down + output_channel = block_out_channels[0] + for i, down_block_type in enumerate(down_block_types): + input_channel = output_channel + output_channel = block_out_channels[i] + is_final_block = i == len(block_out_channels) - 1 + + down_block = get_down_block( + down_block_type, + num_layers=layers_per_block[i], + transformer_layers_per_block=transformer_layers_per_block[i], + in_channels=input_channel, + out_channels=output_channel, + temb_channels=blocks_time_embed_dim, + add_downsample=not is_final_block, + resnet_eps=norm_eps, + resnet_act_fn=act_fn, + resnet_groups=norm_num_groups, + cross_attention_dim=cross_attention_dim[i], + num_attention_heads=num_attention_heads[i], + downsample_padding=downsample_padding, + dual_cross_attention=dual_cross_attention, + use_linear_projection=use_linear_projection, + only_cross_attention=only_cross_attention[i], + upcast_attention=upcast_attention, + resnet_time_scale_shift=resnet_time_scale_shift, + attention_type=attention_type, + resnet_skip_time_act=resnet_skip_time_act, + resnet_out_scale_factor=resnet_out_scale_factor, + cross_attention_norm=cross_attention_norm, + attention_head_dim=attention_head_dim[i] if attention_head_dim[i] is not None else output_channel, + dropout=dropout, + ) + self.down_blocks.append(down_block) + + # mid + if mid_block_type == "UNetMidBlock2DCrossAttn": + self.mid_block = UNetMidBlock2DCrossAttn( + transformer_layers_per_block=transformer_layers_per_block[-1], + in_channels=block_out_channels[-1], + temb_channels=blocks_time_embed_dim, + dropout=dropout, + resnet_eps=norm_eps, + resnet_act_fn=act_fn, + output_scale_factor=mid_block_scale_factor, + resnet_time_scale_shift=resnet_time_scale_shift, + cross_attention_dim=cross_attention_dim[-1], + num_attention_heads=num_attention_heads[-1], + resnet_groups=norm_num_groups, + dual_cross_attention=dual_cross_attention, + use_linear_projection=use_linear_projection, + upcast_attention=upcast_attention, + attention_type=attention_type, + ) + elif mid_block_type == "UNetMidBlock2DSimpleCrossAttn": + self.mid_block = UNetMidBlock2DSimpleCrossAttn( + in_channels=block_out_channels[-1], + temb_channels=blocks_time_embed_dim, + dropout=dropout, + resnet_eps=norm_eps, + resnet_act_fn=act_fn, + output_scale_factor=mid_block_scale_factor, + cross_attention_dim=cross_attention_dim[-1], + attention_head_dim=attention_head_dim[-1], + resnet_groups=norm_num_groups, + resnet_time_scale_shift=resnet_time_scale_shift, + skip_time_act=resnet_skip_time_act, + only_cross_attention=mid_block_only_cross_attention, + cross_attention_norm=cross_attention_norm, + ) + elif mid_block_type == "UNetMidBlock2D": + self.mid_block = UNetMidBlock2D( + in_channels=block_out_channels[-1], + temb_channels=blocks_time_embed_dim, + dropout=dropout, + num_layers=0, + resnet_eps=norm_eps, + resnet_act_fn=act_fn, + output_scale_factor=mid_block_scale_factor, + resnet_groups=norm_num_groups, + resnet_time_scale_shift=resnet_time_scale_shift, + add_attention=False, + ) + elif mid_block_type is None: + self.mid_block = None + else: + raise ValueError(f"unknown mid_block_type : {mid_block_type}") + + # count how many layers upsample the images + self.num_upsamplers = 0 + + # up + reversed_block_out_channels = list(reversed(block_out_channels)) + reversed_num_attention_heads = list(reversed(num_attention_heads)) + reversed_layers_per_block = list(reversed(layers_per_block)) + reversed_cross_attention_dim = list(reversed(cross_attention_dim)) + reversed_transformer_layers_per_block = ( + list(reversed(transformer_layers_per_block)) + if reverse_transformer_layers_per_block is None + else reverse_transformer_layers_per_block + ) + only_cross_attention = list(reversed(only_cross_attention)) + + output_channel = reversed_block_out_channels[0] + for i, up_block_type in enumerate(up_block_types): + is_final_block = i == len(block_out_channels) - 1 + + prev_output_channel = output_channel + output_channel = reversed_block_out_channels[i] + input_channel = reversed_block_out_channels[min(i + 1, len(block_out_channels) - 1)] + + # add upsample block for all BUT final layer + if not is_final_block: + add_upsample = True + self.num_upsamplers += 1 + else: + add_upsample = False + + up_block = get_up_block( + up_block_type, + num_layers=reversed_layers_per_block[i] + 1, + transformer_layers_per_block=reversed_transformer_layers_per_block[i], + in_channels=input_channel, + out_channels=output_channel, + prev_output_channel=prev_output_channel, + temb_channels=blocks_time_embed_dim, + add_upsample=add_upsample, + resnet_eps=norm_eps, + resnet_act_fn=act_fn, + resolution_idx=i, + resnet_groups=norm_num_groups, + cross_attention_dim=reversed_cross_attention_dim[i], + num_attention_heads=reversed_num_attention_heads[i], + dual_cross_attention=dual_cross_attention, + use_linear_projection=use_linear_projection, + only_cross_attention=only_cross_attention[i], + upcast_attention=upcast_attention, + resnet_time_scale_shift=resnet_time_scale_shift, + attention_type=attention_type, + resnet_skip_time_act=resnet_skip_time_act, + resnet_out_scale_factor=resnet_out_scale_factor, + cross_attention_norm=cross_attention_norm, + attention_head_dim=attention_head_dim[i] if attention_head_dim[i] is not None else output_channel, + dropout=dropout, + ) + self.up_blocks.append(up_block) + prev_output_channel = output_channel + + # out + if norm_num_groups is not None: + self.conv_norm_out = nn.GroupNorm( + num_channels=block_out_channels[0], num_groups=norm_num_groups, eps=norm_eps + ) + + self.conv_act = get_activation(act_fn) + + else: + self.conv_norm_out = None + self.conv_act = None + + conv_out_padding = (conv_out_kernel - 1) // 2 + self.conv_out = nn.Conv2d( + block_out_channels[0], out_channels, kernel_size=conv_out_kernel, padding=conv_out_padding + ) + + if attention_type in ["gated", "gated-text-image"]: + positive_len = 768 + if isinstance(cross_attention_dim, int): + positive_len = cross_attention_dim + elif isinstance(cross_attention_dim, tuple) or isinstance(cross_attention_dim, list): + positive_len = cross_attention_dim[0] + + feature_type = "text-only" if attention_type == "gated" else "text-image" + self.position_net = PositionNet( + positive_len=positive_len, out_dim=cross_attention_dim, feature_type=feature_type + ) + + @property + def attn_processors(self) -> Dict[str, AttentionProcessor]: + r""" + Returns: + `dict` of attention processors: A dictionary containing all attention processors used in the model with + indexed by its weight name. + """ + # set recursively + processors = {} + + def fn_recursive_add_processors(name: str, module: torch.nn.Module, processors: Dict[str, AttentionProcessor]): + if hasattr(module, "get_processor"): + processors[f"{name}.processor"] = module.get_processor(return_deprecated_lora=True) + + for sub_name, child in module.named_children(): + fn_recursive_add_processors(f"{name}.{sub_name}", child, processors) + + return processors + + for name, module in self.named_children(): + fn_recursive_add_processors(name, module, processors) + + return processors + + def set_attn_processor( + self, processor: Union[AttentionProcessor, Dict[str, AttentionProcessor]], _remove_lora=False + ): + r""" + Sets the attention processor to use to compute attention. + + Parameters: + processor (`dict` of `AttentionProcessor` or only `AttentionProcessor`): + The instantiated processor class or a dictionary of processor classes that will be set as the processor + for **all** `Attention` layers. + + If `processor` is a dict, the key needs to define the path to the corresponding cross attention + processor. This is strongly recommended when setting trainable attention processors. + + """ + count = len(self.attn_processors.keys()) + + if isinstance(processor, dict) and len(processor) != count: + raise ValueError( + f"A dict of processors was passed, but the number of processors {len(processor)} does not match the" + f" number of attention layers: {count}. Please make sure to pass {count} processor classes." + ) + + def fn_recursive_attn_processor(name: str, module: torch.nn.Module, processor): + if hasattr(module, "set_processor"): + if not isinstance(processor, dict): + module.set_processor(processor, _remove_lora=_remove_lora) + else: + module.set_processor(processor.pop(f"{name}.processor"), _remove_lora=_remove_lora) + + for sub_name, child in module.named_children(): + fn_recursive_attn_processor(f"{name}.{sub_name}", child, processor) + + for name, module in self.named_children(): + fn_recursive_attn_processor(name, module, processor) + + def set_default_attn_processor(self): + """ + Disables custom attention processors and sets the default attention implementation. + """ + if all(proc.__class__ in ADDED_KV_ATTENTION_PROCESSORS for proc in self.attn_processors.values()): + processor = AttnAddedKVProcessor() + elif all(proc.__class__ in CROSS_ATTENTION_PROCESSORS for proc in self.attn_processors.values()): + processor = AttnProcessor() + else: + raise ValueError( + f"Cannot call `set_default_attn_processor` when attention processors are of type {next(iter(self.attn_processors.values()))}" + ) + + self.set_attn_processor(processor, _remove_lora=True) + + def set_attention_slice(self, slice_size): + r""" + Enable sliced attention computation. + + When this option is enabled, the attention module splits the input tensor in slices to compute attention in + several steps. This is useful for saving some memory in exchange for a small decrease in speed. + + Args: + slice_size (`str` or `int` or `list(int)`, *optional*, defaults to `"auto"`): + When `"auto"`, input to the attention heads is halved, so attention is computed in two steps. If + `"max"`, maximum amount of memory is saved by running only one slice at a time. If a number is + provided, uses as many slices as `attention_head_dim // slice_size`. In this case, `attention_head_dim` + must be a multiple of `slice_size`. + """ + sliceable_head_dims = [] + + def fn_recursive_retrieve_sliceable_dims(module: torch.nn.Module): + if hasattr(module, "set_attention_slice"): + sliceable_head_dims.append(module.sliceable_head_dim) + + for child in module.children(): + fn_recursive_retrieve_sliceable_dims(child) + + # retrieve number of attention layers + for module in self.children(): + fn_recursive_retrieve_sliceable_dims(module) + + num_sliceable_layers = len(sliceable_head_dims) + + if slice_size == "auto": + # half the attention head size is usually a good trade-off between + # speed and memory + slice_size = [dim // 2 for dim in sliceable_head_dims] + elif slice_size == "max": + # make smallest slice possible + slice_size = num_sliceable_layers * [1] + + slice_size = num_sliceable_layers * [slice_size] if not isinstance(slice_size, list) else slice_size + + if len(slice_size) != len(sliceable_head_dims): + raise ValueError( + f"You have provided {len(slice_size)}, but {self.config} has {len(sliceable_head_dims)} different" + f" attention layers. Make sure to match `len(slice_size)` to be {len(sliceable_head_dims)}." + ) + + for i in range(len(slice_size)): + size = slice_size[i] + dim = sliceable_head_dims[i] + if size is not None and size > dim: + raise ValueError(f"size {size} has to be smaller or equal to {dim}.") + + # Recursively walk through all the children. + # Any children which exposes the set_attention_slice method + # gets the message + def fn_recursive_set_attention_slice(module: torch.nn.Module, slice_size: List[int]): + if hasattr(module, "set_attention_slice"): + module.set_attention_slice(slice_size.pop()) + + for child in module.children(): + fn_recursive_set_attention_slice(child, slice_size) + + reversed_slice_size = list(reversed(slice_size)) + for module in self.children(): + fn_recursive_set_attention_slice(module, reversed_slice_size) + + def _set_gradient_checkpointing(self, module, value=False): + if hasattr(module, "gradient_checkpointing"): + module.gradient_checkpointing = value + + def enable_freeu(self, s1, s2, b1, b2): + r"""Enables the FreeU mechanism from https://arxiv.org/abs/2309.11497. + + The suffixes after the scaling factors represent the stage blocks where they are being applied. + + Please refer to the [official repository](https://github.com/ChenyangSi/FreeU) for combinations of values that + are known to work well for different pipelines such as Stable Diffusion v1, v2, and Stable Diffusion XL. + + Args: + s1 (`float`): + Scaling factor for stage 1 to attenuate the contributions of the skip features. This is done to + mitigate the "oversmoothing effect" in the enhanced denoising process. + s2 (`float`): + Scaling factor for stage 2 to attenuate the contributions of the skip features. This is done to + mitigate the "oversmoothing effect" in the enhanced denoising process. + b1 (`float`): Scaling factor for stage 1 to amplify the contributions of backbone features. + b2 (`float`): Scaling factor for stage 2 to amplify the contributions of backbone features. + """ + for i, upsample_block in enumerate(self.up_blocks): + setattr(upsample_block, "s1", s1) + setattr(upsample_block, "s2", s2) + setattr(upsample_block, "b1", b1) + setattr(upsample_block, "b2", b2) + + def disable_freeu(self): + """Disables the FreeU mechanism.""" + freeu_keys = {"s1", "s2", "b1", "b2"} + for i, upsample_block in enumerate(self.up_blocks): + for k in freeu_keys: + if hasattr(upsample_block, k) or getattr(upsample_block, k, None) is not None: + setattr(upsample_block, k, None) + + def fuse_qkv_projections(self): + """ + Enables fused QKV projections. For self-attention modules, all projection matrices (i.e., query, + key, value) are fused. For cross-attention modules, key and value projection matrices are fused. + + + + This API is 🧪 experimental. + + + """ + self.original_attn_processors = None + + for _, attn_processor in self.attn_processors.items(): + if "Added" in str(attn_processor.__class__.__name__): + raise ValueError("`fuse_qkv_projections()` is not supported for models having added KV projections.") + + self.original_attn_processors = self.attn_processors + + for module in self.modules(): + if isinstance(module, Attention): + module.fuse_projections(fuse=True) + + def unfuse_qkv_projections(self): + """Disables the fused QKV projection if enabled. + + + + This API is 🧪 experimental. + + + + """ + if self.original_attn_processors is not None: + self.set_attn_processor(self.original_attn_processors) + + def forward( + self, + sample: torch.FloatTensor, + timestep: Union[torch.Tensor, float, int], + encoder_hidden_states: torch.Tensor, + class_labels: Optional[torch.Tensor] = None, + timestep_cond: Optional[torch.Tensor] = None, + attention_mask: Optional[torch.Tensor] = None, + cross_attention_kwargs: Optional[Dict[str, Any]] = None, + added_cond_kwargs: Optional[Dict[str, torch.Tensor]] = None, + down_block_additional_residuals: Optional[Tuple[torch.Tensor]] = None, + mid_block_additional_residual: Optional[torch.Tensor] = None, + down_intrablock_additional_residuals: Optional[Tuple[torch.Tensor]] = None, + encoder_attention_mask: Optional[torch.Tensor] = None, + return_dict: bool = True, + ) -> Union[UNet2DConditionOutput, Tuple]: + r""" + The [`UNet2DConditionModel`] forward method. + + Args: + sample (`torch.FloatTensor`): + The noisy input tensor with the following shape `(batch, channel, height, width)`. + timestep (`torch.FloatTensor` or `float` or `int`): The number of timesteps to denoise an input. + encoder_hidden_states (`torch.FloatTensor`): + The encoder hidden states with shape `(batch, sequence_length, feature_dim)`. + class_labels (`torch.Tensor`, *optional*, defaults to `None`): + Optional class labels for conditioning. Their embeddings will be summed with the timestep embeddings. + timestep_cond: (`torch.Tensor`, *optional*, defaults to `None`): + Conditional embeddings for timestep. If provided, the embeddings will be summed with the samples passed + through the `self.time_embedding` layer to obtain the timestep embeddings. + attention_mask (`torch.Tensor`, *optional*, defaults to `None`): + An attention mask of shape `(batch, key_tokens)` is applied to `encoder_hidden_states`. If `1` the mask + is kept, otherwise if `0` it is discarded. Mask will be converted into a bias, which adds large + negative values to the attention scores corresponding to "discard" tokens. + cross_attention_kwargs (`dict`, *optional*): + A kwargs dictionary that if specified is passed along to the `AttentionProcessor` as defined under + `self.processor` in + [diffusers.models.attention_processor](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/attention_processor.py). + added_cond_kwargs: (`dict`, *optional*): + A kwargs dictionary containing additional embeddings that if specified are added to the embeddings that + are passed along to the UNet blocks. + down_block_additional_residuals: (`tuple` of `torch.Tensor`, *optional*): + A tuple of tensors that if specified are added to the residuals of down unet blocks. + mid_block_additional_residual: (`torch.Tensor`, *optional*): + A tensor that if specified is added to the residual of the middle unet block. + encoder_attention_mask (`torch.Tensor`): + A cross-attention mask of shape `(batch, sequence_length)` is applied to `encoder_hidden_states`. If + `True` the mask is kept, otherwise if `False` it is discarded. Mask will be converted into a bias, + which adds large negative values to the attention scores corresponding to "discard" tokens. + return_dict (`bool`, *optional*, defaults to `True`): + Whether or not to return a [`~models.unet_2d_condition.UNet2DConditionOutput`] instead of a plain + tuple. + cross_attention_kwargs (`dict`, *optional*): + A kwargs dictionary that if specified is passed along to the [`AttnProcessor`]. + added_cond_kwargs: (`dict`, *optional*): + A kwargs dictionary containin additional embeddings that if specified are added to the embeddings that + are passed along to the UNet blocks. + down_block_additional_residuals (`tuple` of `torch.Tensor`, *optional*): + additional residuals to be added to UNet long skip connections from down blocks to up blocks for + example from ControlNet side model(s) + mid_block_additional_residual (`torch.Tensor`, *optional*): + additional residual to be added to UNet mid block output, for example from ControlNet side model + down_intrablock_additional_residuals (`tuple` of `torch.Tensor`, *optional*): + additional residuals to be added within UNet down blocks, for example from T2I-Adapter side model(s) + + Returns: + [`~models.unet_2d_condition.UNet2DConditionOutput`] or `tuple`: + If `return_dict` is True, an [`~models.unet_2d_condition.UNet2DConditionOutput`] is returned, otherwise + a `tuple` is returned where the first element is the sample tensor. + """ + + # By default samples have to be AT least a multiple of the overall upsampling factor. + # The overall upsampling factor is equal to 2 ** (# num of upsampling layers). + # However, the upsampling interpolation output size can be forced to fit any upsampling size + # on the fly if necessary. + default_overall_up_factor = 2**self.num_upsamplers + + # upsample size should be forwarded when sample is not a multiple of `default_overall_up_factor` + forward_upsample_size = False + upsample_size = None + + for dim in sample.shape[-2:]: + if dim % default_overall_up_factor != 0: + # Forward upsample size to force interpolation output size. + forward_upsample_size = True + break + + # ensure attention_mask is a bias, and give it a singleton query_tokens dimension + # expects mask of shape: + # [batch, key_tokens] + # adds singleton query_tokens dimension: + # [batch, 1, key_tokens] + # this helps to broadcast it as a bias over attention scores, which will be in one of the following shapes: + # [batch, heads, query_tokens, key_tokens] (e.g. torch sdp attn) + # [batch * heads, query_tokens, key_tokens] (e.g. xformers or classic attn) + if attention_mask is not None: + # assume that mask is expressed as: + # (1 = keep, 0 = discard) + # convert mask into a bias that can be added to attention scores: + # (keep = +0, discard = -10000.0) + attention_mask = (1 - attention_mask.to(sample.dtype)) * -10000.0 + attention_mask = attention_mask.unsqueeze(1) + + # convert encoder_attention_mask to a bias the same way we do for attention_mask + if encoder_attention_mask is not None: + encoder_attention_mask = (1 - encoder_attention_mask.to(sample.dtype)) * -10000.0 + encoder_attention_mask = encoder_attention_mask.unsqueeze(1) + + # 0. center input if necessary + if self.config.center_input_sample: + sample = 2 * sample - 1.0 + + # 1. time + timesteps = timestep + if not torch.is_tensor(timesteps): + # TODO: this requires sync between CPU and GPU. So try to pass timesteps as tensors if you can + # This would be a good case for the `match` statement (Python 3.10+) + is_mps = sample.device.type == "mps" + if isinstance(timestep, float): + dtype = torch.float32 if is_mps else torch.float64 + else: + dtype = torch.int32 if is_mps else torch.int64 + timesteps = torch.tensor([timesteps], dtype=dtype, device=sample.device) + elif len(timesteps.shape) == 0: + timesteps = timesteps[None].to(sample.device) + + # broadcast to batch dimension in a way that's compatible with ONNX/Core ML + timesteps = timesteps.expand(sample.shape[0]) + + t_emb = self.time_proj(timesteps) + + # `Timesteps` does not contain any weights and will always return f32 tensors + # but time_embedding might actually be running in fp16. so we need to cast here. + # there might be better ways to encapsulate this. + t_emb = t_emb.to(dtype=sample.dtype) + + emb = self.time_embedding(t_emb, timestep_cond) + aug_emb = None + + if self.class_embedding is not None: + if class_labels is None: + raise ValueError("class_labels should be provided when num_class_embeds > 0") + + if self.config.class_embed_type == "timestep": + class_labels = self.time_proj(class_labels) + + # `Timesteps` does not contain any weights and will always return f32 tensors + # there might be better ways to encapsulate this. + class_labels = class_labels.to(dtype=sample.dtype) + + class_emb = self.class_embedding(class_labels).to(dtype=sample.dtype) + + if self.config.class_embeddings_concat: + emb = torch.cat([emb, class_emb], dim=-1) + else: + emb = emb + class_emb + + if self.config.addition_embed_type == "text": + aug_emb = self.add_embedding(encoder_hidden_states) + elif self.config.addition_embed_type == "text_image": + # Kandinsky 2.1 - style + if "image_embeds" not in added_cond_kwargs: + raise ValueError( + f"{self.__class__} has the config param `addition_embed_type` set to 'text_image' which requires the keyword argument `image_embeds` to be passed in `added_cond_kwargs`" + ) + + image_embs = added_cond_kwargs.get("image_embeds") + text_embs = added_cond_kwargs.get("text_embeds", encoder_hidden_states) + aug_emb = self.add_embedding(text_embs, image_embs) + elif self.config.addition_embed_type == "text_time": + # SDXL - style + if "text_embeds" not in added_cond_kwargs: + raise ValueError( + f"{self.__class__} has the config param `addition_embed_type` set to 'text_time' which requires the keyword argument `text_embeds` to be passed in `added_cond_kwargs`" + ) + text_embeds = added_cond_kwargs.get("text_embeds") + if "time_ids" not in added_cond_kwargs: + raise ValueError( + f"{self.__class__} has the config param `addition_embed_type` set to 'text_time' which requires the keyword argument `time_ids` to be passed in `added_cond_kwargs`" + ) + time_ids = added_cond_kwargs.get("time_ids") + time_embeds = self.add_time_proj(time_ids.flatten()) + time_embeds = time_embeds.reshape((text_embeds.shape[0], -1)) + add_embeds = torch.concat([text_embeds, time_embeds], dim=-1) + add_embeds = add_embeds.to(emb.dtype) + aug_emb = self.add_embedding(add_embeds) + elif self.config.addition_embed_type == "image": + # Kandinsky 2.2 - style + if "image_embeds" not in added_cond_kwargs: + raise ValueError( + f"{self.__class__} has the config param `addition_embed_type` set to 'image' which requires the keyword argument `image_embeds` to be passed in `added_cond_kwargs`" + ) + image_embs = added_cond_kwargs.get("image_embeds") + aug_emb = self.add_embedding(image_embs) + elif self.config.addition_embed_type == "image_hint": + # Kandinsky 2.2 - style + if "image_embeds" not in added_cond_kwargs or "hint" not in added_cond_kwargs: + raise ValueError( + f"{self.__class__} has the config param `addition_embed_type` set to 'image_hint' which requires the keyword arguments `image_embeds` and `hint` to be passed in `added_cond_kwargs`" + ) + image_embs = added_cond_kwargs.get("image_embeds") + hint = added_cond_kwargs.get("hint") + aug_emb, hint = self.add_embedding(image_embs, hint) + sample = torch.cat([sample, hint], dim=1) + + emb = emb + aug_emb if aug_emb is not None else emb + + if self.time_embed_act is not None: + emb = self.time_embed_act(emb) + + if self.encoder_hid_proj is not None and self.config.encoder_hid_dim_type == "text_proj": + encoder_hidden_states = self.encoder_hid_proj(encoder_hidden_states) + elif self.encoder_hid_proj is not None and self.config.encoder_hid_dim_type == "text_image_proj": + # Kadinsky 2.1 - style + if "image_embeds" not in added_cond_kwargs: + raise ValueError( + f"{self.__class__} has the config param `encoder_hid_dim_type` set to 'text_image_proj' which requires the keyword argument `image_embeds` to be passed in `added_conditions`" + ) + + image_embeds = added_cond_kwargs.get("image_embeds") + encoder_hidden_states = self.encoder_hid_proj(encoder_hidden_states, image_embeds) + elif self.encoder_hid_proj is not None and self.config.encoder_hid_dim_type == "image_proj": + # Kandinsky 2.2 - style + if "image_embeds" not in added_cond_kwargs: + raise ValueError( + f"{self.__class__} has the config param `encoder_hid_dim_type` set to 'image_proj' which requires the keyword argument `image_embeds` to be passed in `added_conditions`" + ) + image_embeds = added_cond_kwargs.get("image_embeds") + encoder_hidden_states = self.encoder_hid_proj(image_embeds) + elif self.encoder_hid_proj is not None and self.config.encoder_hid_dim_type == "ip_image_proj": + if "image_embeds" not in added_cond_kwargs: + raise ValueError( + f"{self.__class__} has the config param `encoder_hid_dim_type` set to 'ip_image_proj' which requires the keyword argument `image_embeds` to be passed in `added_conditions`" + ) + image_embeds = added_cond_kwargs.get("image_embeds") + image_embeds = self.encoder_hid_proj(image_embeds).to(encoder_hidden_states.dtype) + encoder_hidden_states = torch.cat([encoder_hidden_states, image_embeds], dim=1) + + # 2. pre-process + sample = self.conv_in(sample) + + # 2.5 GLIGEN position net + if cross_attention_kwargs is not None and cross_attention_kwargs.get("gligen", None) is not None: + cross_attention_kwargs = cross_attention_kwargs.copy() + gligen_args = cross_attention_kwargs.pop("gligen") + cross_attention_kwargs["gligen"] = {"objs": self.position_net(**gligen_args)} + + # 3. down + lora_scale = cross_attention_kwargs.get("scale", 1.0) if cross_attention_kwargs is not None else 1.0 + if USE_PEFT_BACKEND: + # weight the lora layers by setting `lora_scale` for each PEFT layer + scale_lora_layers(self, lora_scale) + + is_controlnet = mid_block_additional_residual is not None and down_block_additional_residuals is not None + # using new arg down_intrablock_additional_residuals for T2I-Adapters, to distinguish from controlnets + is_adapter = down_intrablock_additional_residuals is not None + # maintain backward compatibility for legacy usage, where + # T2I-Adapter and ControlNet both use down_block_additional_residuals arg + # but can only use one or the other + if not is_adapter and mid_block_additional_residual is None and down_block_additional_residuals is not None: + deprecate( + "T2I should not use down_block_additional_residuals", + "1.3.0", + "Passing intrablock residual connections with `down_block_additional_residuals` is deprecated \ + and will be removed in diffusers 1.3.0. `down_block_additional_residuals` should only be used \ + for ControlNet. Please make sure use `down_intrablock_additional_residuals` instead. ", + standard_warn=False, + ) + down_intrablock_additional_residuals = down_block_additional_residuals + is_adapter = True + + down_block_res_samples = (sample,) + for downsample_block in self.down_blocks: + if hasattr(downsample_block, "has_cross_attention") and downsample_block.has_cross_attention: + # For t2i-adapter CrossAttnDownBlock2D + additional_residuals = {} + if is_adapter and len(down_intrablock_additional_residuals) > 0: + additional_residuals["additional_residuals"] = down_intrablock_additional_residuals.pop(0) + + sample, res_samples = downsample_block( + hidden_states=sample, + temb=emb, + encoder_hidden_states=encoder_hidden_states, + attention_mask=attention_mask, + cross_attention_kwargs=cross_attention_kwargs, + encoder_attention_mask=encoder_attention_mask, + **additional_residuals, + ) + else: + sample, res_samples = downsample_block(hidden_states=sample, temb=emb, scale=lora_scale) + if is_adapter and len(down_intrablock_additional_residuals) > 0: + sample += down_intrablock_additional_residuals.pop(0) + + down_block_res_samples += res_samples + + if is_controlnet: + new_down_block_res_samples = () + + for down_block_res_sample, down_block_additional_residual in zip( + down_block_res_samples, down_block_additional_residuals + ): + down_block_res_sample = down_block_res_sample + down_block_additional_residual + new_down_block_res_samples = new_down_block_res_samples + (down_block_res_sample,) + + down_block_res_samples = new_down_block_res_samples + + # 4. mid + if self.mid_block is not None: + if hasattr(self.mid_block, "has_cross_attention") and self.mid_block.has_cross_attention: + sample = self.mid_block( + sample, + emb, + encoder_hidden_states=encoder_hidden_states, + attention_mask=attention_mask, + cross_attention_kwargs=cross_attention_kwargs, + encoder_attention_mask=encoder_attention_mask, + ) + else: + sample = self.mid_block(sample, emb) + + # To support T2I-Adapter-XL + if ( + is_adapter + and len(down_intrablock_additional_residuals) > 0 + and sample.shape == down_intrablock_additional_residuals[0].shape + ): + sample += down_intrablock_additional_residuals.pop(0) + + if is_controlnet: + sample = sample + mid_block_additional_residual + + # 5. up + for i, upsample_block in enumerate(self.up_blocks): + is_final_block = i == len(self.up_blocks) - 1 + + res_samples = down_block_res_samples[-len(upsample_block.resnets) :] + down_block_res_samples = down_block_res_samples[: -len(upsample_block.resnets)] + + # if we have not reached the final block and need to forward the + # upsample size, we do it here + if not is_final_block and forward_upsample_size: + upsample_size = down_block_res_samples[-1].shape[2:] + + if hasattr(upsample_block, "has_cross_attention") and upsample_block.has_cross_attention: + sample = upsample_block( + hidden_states=sample, + temb=emb, + res_hidden_states_tuple=res_samples, + encoder_hidden_states=encoder_hidden_states, + cross_attention_kwargs=cross_attention_kwargs, + upsample_size=upsample_size, + attention_mask=attention_mask, + encoder_attention_mask=encoder_attention_mask, + ) + else: + sample = upsample_block( + hidden_states=sample, + temb=emb, + res_hidden_states_tuple=res_samples, + upsample_size=upsample_size, + scale=lora_scale, + ) + + # 6. post-process + if self.conv_norm_out: + sample = self.conv_norm_out(sample) + sample = self.conv_act(sample) + sample = self.conv_out(sample) + + if USE_PEFT_BACKEND: + # remove `lora_scale` from each PEFT layer + unscale_lora_layers(self, lora_scale) + + if not return_dict: + return (sample,) + + return UNet2DConditionOutput(sample=sample) diff --git a/nodes.py b/nodes.py new file mode 100644 index 0000000..acd77c9 --- /dev/null +++ b/nodes.py @@ -0,0 +1,191 @@ +import os +import torch + +from omegaconf import OmegaConf +from .models.depth_normal_pipeline_clip import DepthNormalEstimationPipeline +from .models.unet_2d_condition import UNet2DConditionModel +from diffusers import DDIMScheduler, AutoencoderKL + +import torch.nn.functional as F +from transformers import CLIPImageProcessor, CLIPVisionModelWithProjection +from torchvision import transforms +from contextlib import nullcontext + +import model_management as mm +import comfy.utils +import folder_paths +script_directory = os.path.dirname(os.path.abspath(__file__)) + +def convert_dtype(dtype_str): + if dtype_str == 'fp32': + return torch.float32 + elif dtype_str == 'fp16': + return torch.float16 + elif dtype_str == 'bf16': + return torch.bfloat16 + else: + raise NotImplementedError + +class geowizard_model_loader: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "vae": ("VAE",), + "dtype": ( + [ + 'fp32', + 'fp16', + ], { + "default": 'fp16' + }), + }, + } + + RETURN_TYPES = ("GEOWIZMODEL",) + RETURN_NAMES = ("geowizard_model",) + FUNCTION = "loadmodel" + CATEGORY = "champWrapper" + + def loadmodel(self, vae, dtype): + mm.soft_empty_cache() + + custom_config = { + 'dtype': dtype, + 'vae': vae + } + + if not hasattr(self, 'model') or self.model == None or custom_config != self.current_config: + self.current_config = custom_config + # setup pretrained models + original_config = OmegaConf.load(os.path.join(script_directory, f"configs/v1-inference.yaml")) + + dtype = convert_dtype(dtype) + + from diffusers.loaders.single_file_utils import (convert_ldm_vae_checkpoint, create_vae_diffusers_config) + + sd = vae.get_sd() + converted_vae_config = create_vae_diffusers_config(original_config, image_size=512) + converted_vae = convert_ldm_vae_checkpoint(sd, converted_vae_config) + self.vae = AutoencoderKL(**converted_vae_config) + self.vae.load_state_dict(converted_vae, strict=False) + + + model_path = os.path.join(folder_paths.models_dir,'diffusers', 'geowizard') + if not os.path.exists(model_path): + from huggingface_hub import snapshot_download + snapshot_download(repo_id="lemonaddie/geowizard", ignore_patterns=["*vae*", "*.ckpt", "*.pt", "*.png", "*non_ema*", "*safety_checker*", "*.bin"], + local_dir=model_path, local_dir_use_symlinks=False) + + unet = UNet2DConditionModel.from_pretrained(model_path, subfolder='unet') + scheduler = DDIMScheduler.from_pretrained(model_path, subfolder='scheduler') + feature_extractor = CLIPImageProcessor.from_pretrained(model_path, subfolder='feature_extractor') + image_enc = CLIPVisionModelWithProjection.from_pretrained(model_path, subfolder='image_encoder') + + self.model = DepthNormalEstimationPipeline( + vae=self.vae, + image_encoder=image_enc, + feature_extractor=feature_extractor, + unet=unet, + scheduler=scheduler) + self.model = self.model.to(dtype) + if mm.XFORMERS_IS_AVAILABLE: + self.model.enable_xformers_memory_efficient_attention() + + return (self.model,) + +class geowizard_sampler: + @classmethod + def INPUT_TYPES(s): + return {"required": { + "geowizard_model": ("GEOWIZMODEL",), + "image": ("IMAGE",), + "steps": ("INT", {"default": 10, "min": 1, "max": 200, "step": 1}), + "ensemble_size": ("INT", {"default": 3, "min": 1, "max": 200, "step": 1}), + "seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}), + "domain": ( + [ + 'outdoor', + 'indoor', + 'object' + ], { + "default": 'indoor' + }), + "keep_model_loaded": ("BOOLEAN", {"default": True}), + }, + + } + + RETURN_TYPES = ("IMAGE", "IMAGE",) + RETURN_NAMES = ("depth", "normal",) + FUNCTION = "process" + CATEGORY = "champWrapper" + + def process(self, geowizard_model, image, domain, ensemble_size, steps, seed, keep_model_loaded): + device = mm.get_torch_device() + mm.unload_all_models() + mm.soft_empty_cache() + pipe = geowizard_model + dtype = pipe.dtype + + torch.manual_seed(seed) + + + autocast_condition = (dtype != torch.float32) and not mm.is_device_mps(device) + with torch.autocast(mm.get_autocast_device(device), dtype=dtype) if autocast_condition else nullcontext(): + image = image.permute(0, 3, 1, 2) + + B, C, H, W = image.shape + orig_H, orig_W = H, W + if W % 64 != 0: + W = W - (W % 64) + if H % 64 != 0: + H = H - (H % 64) + if orig_H % 64 != 0 or orig_W % 64 != 0: + image = F.interpolate(image, size=(H, W), mode="bicubic") + + B, C, H, W = image.shape + + pipe = pipe.to(device) + depth_maps = [] + normal_maps = [] + if B > 1: + batch_pbar = comfy.utils.ProgressBar(B) + for img in image: + pipe_out = pipe( + image[0], + device=device, + denoising_steps=steps, + ensemble_size=ensemble_size, + processing_res=H, + batch_size=0, + domain=domain, + seed = seed, + show_progress_bar=True, + ) + + depth = pipe_out.depth_pred_tensor + depth = depth.repeat(3,1,1).unsqueeze(0).permute(0, 2, 3, 1) + depth_maps.append(depth) + normal_colored = pipe_out.normal_colored + normal_tensor = transforms.ToTensor()(normal_colored).unsqueeze(0).permute(0, 2, 3, 1) + normal_maps.append(normal_tensor) + if B > 1: + batch_pbar.update(1) + + depth_out = torch.cat(depth_maps, dim=0) + depth_out = torch.clamp(depth, 0.0, 1.0) + depth_out = 1.0 - depth + + normal_out = torch.cat(normal_maps, dim=0) + + return (depth_out, normal_out) + + +NODE_CLASS_MAPPINGS = { + "geowizard_model_loader": geowizard_model_loader, + "geowizard_sampler": geowizard_sampler, +} +NODE_DISPLAY_NAME_MAPPINGS = { + "geowizard_model_loader": "Geowizard Model Loader", + "geowizard_sampler": "Geowizard Sampler", +} diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..787e201 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,8 @@ +diffusers >= 0.26.0 +numpy >= 1.23.1 +Pillow +matplotlib>=3.7.5 +scikit-image>=0.18.1 +tqdm >= 4.65.0 +accelerate>=0.28.0 +transformers>=4.39.1 \ No newline at end of file diff --git a/utils/batch_size.py b/utils/batch_size.py new file mode 100644 index 0000000..c7ba2aa --- /dev/null +++ b/utils/batch_size.py @@ -0,0 +1,63 @@ +# A reimplemented version in public environments by Xiao Fu and Mu Hu + +import torch +import math + + +# Search table for suggested max. inference batch size +bs_search_table = [ + # tested on A100-PCIE-80GB + {"res": 768, "total_vram": 79, "bs": 35, "dtype": torch.float32}, + {"res": 1024, "total_vram": 79, "bs": 20, "dtype": torch.float32}, + # tested on A100-PCIE-40GB + {"res": 768, "total_vram": 39, "bs": 15, "dtype": torch.float32}, + {"res": 1024, "total_vram": 39, "bs": 8, "dtype": torch.float32}, + {"res": 768, "total_vram": 39, "bs": 30, "dtype": torch.float16}, + {"res": 1024, "total_vram": 39, "bs": 15, "dtype": torch.float16}, + # tested on RTX3090, RTX4090 + {"res": 512, "total_vram": 23, "bs": 20, "dtype": torch.float32}, + {"res": 768, "total_vram": 23, "bs": 7, "dtype": torch.float32}, + {"res": 1024, "total_vram": 23, "bs": 3, "dtype": torch.float32}, + {"res": 512, "total_vram": 23, "bs": 40, "dtype": torch.float16}, + {"res": 768, "total_vram": 23, "bs": 18, "dtype": torch.float16}, + {"res": 1024, "total_vram": 23, "bs": 10, "dtype": torch.float16}, + # tested on GTX1080Ti + {"res": 512, "total_vram": 10, "bs": 5, "dtype": torch.float32}, + {"res": 768, "total_vram": 10, "bs": 2, "dtype": torch.float32}, + {"res": 512, "total_vram": 10, "bs": 10, "dtype": torch.float16}, + {"res": 768, "total_vram": 10, "bs": 5, "dtype": torch.float16}, + {"res": 1024, "total_vram": 10, "bs": 3, "dtype": torch.float16}, +] + + +def find_batch_size(ensemble_size: int, input_res: int, dtype: torch.dtype) -> int: + """ + Automatically search for suitable operating batch size. + + Args: + ensemble_size (`int`): + Number of predictions to be ensembled. + input_res (`int`): + Operating resolution of the input image. + + Returns: + `int`: Operating batch size. + """ + if not torch.cuda.is_available(): + return 1 + + total_vram = torch.cuda.mem_get_info()[1] / 1024.0**3 + filtered_bs_search_table = [s for s in bs_search_table if s["dtype"] == dtype] + for settings in sorted( + filtered_bs_search_table, + key=lambda k: (k["res"], -k["total_vram"]), + ): + if input_res <= settings["res"] and total_vram >= settings["total_vram"]: + bs = settings["bs"] + if bs > ensemble_size: + bs = ensemble_size + elif bs > math.ceil(ensemble_size / 2) and bs < ensemble_size: + bs = math.ceil(ensemble_size / 2) + return bs + + return 1 \ No newline at end of file diff --git a/utils/colormap.py b/utils/colormap.py new file mode 100644 index 0000000..e2f0905 --- /dev/null +++ b/utils/colormap.py @@ -0,0 +1,45 @@ +# A reimplemented version in public environments by Xiao Fu and Mu Hu + +import numpy as np +import cv2 + +def kitti_colormap(disparity, maxval=-1): + """ + A utility function to reproduce KITTI fake colormap + Arguments: + - disparity: numpy float32 array of dimension HxW + - maxval: maximum disparity value for normalization (if equal to -1, the maximum value in disparity will be used) + + Returns a numpy uint8 array of shape HxWx3. + """ + if maxval < 0: + maxval = np.max(disparity) + + colormap = np.asarray([[0,0,0,114],[0,0,1,185],[1,0,0,114],[1,0,1,174],[0,1,0,114],[0,1,1,185],[1,1,0,114],[1,1,1,0]]) + weights = np.asarray([8.771929824561404,5.405405405405405,8.771929824561404,5.747126436781609,8.771929824561404,5.405405405405405,8.771929824561404,0]) + cumsum = np.asarray([0,0.114,0.299,0.413,0.587,0.701,0.8859999999999999,0.9999999999999999]) + + colored_disp = np.zeros([disparity.shape[0], disparity.shape[1], 3]) + values = np.expand_dims(np.minimum(np.maximum(disparity/maxval, 0.), 1.), -1) + bins = np.repeat(np.repeat(np.expand_dims(np.expand_dims(cumsum,axis=0),axis=0), disparity.shape[1], axis=1), disparity.shape[0], axis=0) + diffs = np.where((np.repeat(values, 8, axis=-1) - bins) > 0, -1000, (np.repeat(values, 8, axis=-1) - bins)) + index = np.argmax(diffs, axis=-1)-1 + + w = 1-(values[:,:,0]-cumsum[index])*np.asarray(weights)[index] + + + colored_disp[:,:,2] = (w*colormap[index][:,:,0] + (1.-w)*colormap[index+1][:,:,0]) + colored_disp[:,:,1] = (w*colormap[index][:,:,1] + (1.-w)*colormap[index+1][:,:,1]) + colored_disp[:,:,0] = (w*colormap[index][:,:,2] + (1.-w)*colormap[index+1][:,:,2]) + + return (colored_disp*np.expand_dims((disparity>0),-1)*255).astype(np.uint8) + +def read_16bit_gt(path): + """ + A utility function to read KITTI 16bit gt + Arguments: + - path: filepath + Returns a numpy float32 array of shape HxW. + """ + gt = cv2.imread(path,-1).astype(np.float32)/256. + return gt \ No newline at end of file diff --git a/utils/common.py b/utils/common.py new file mode 100644 index 0000000..fe476a1 --- /dev/null +++ b/utils/common.py @@ -0,0 +1,42 @@ +# A reimplemented version in public environments by Xiao Fu and Mu Hu + +import json +import yaml +import logging +import os +import numpy as np +import sys + +def load_loss_scheme(loss_config): + with open(loss_config, 'r') as f: + loss_json = yaml.safe_load(f) + return loss_json + + +DEBUG =0 +logger = logging.getLogger() + + +if DEBUG: + #coloredlogs.install(level='DEBUG') + logger.setLevel(logging.DEBUG) +else: + #coloredlogs.install(level='INFO') + logger.setLevel(logging.INFO) + + +strhdlr = logging.StreamHandler() +logger.addHandler(strhdlr) +formatter = logging.Formatter('%(asctime)s [%(filename)s:%(lineno)d] %(levelname)s %(message)s') +strhdlr.setFormatter(formatter) + + + +def count_parameters(model): + return sum(p.numel() for p in model.parameters() if p.requires_grad) + +def check_path(path): + if not os.path.exists(path): + os.makedirs(path, exist_ok=True) + + diff --git a/utils/dataset_configuration.py b/utils/dataset_configuration.py new file mode 100644 index 0000000..952a464 --- /dev/null +++ b/utils/dataset_configuration.py @@ -0,0 +1,81 @@ +# A reimplemented version in public environments by Xiao Fu and Mu Hu + +import torch +import torch.nn as nn +import torch.nn.functional as F +import numpy as np +import sys +sys.path.append("..") + +from dataloader.mix_loader import MixDataset +from torch.utils.data import DataLoader +from dataloader import transforms +import os + + +# Get Dataset Here +def prepare_dataset(data_dir=None, + batch_size=1, + test_batch=1, + datathread=4, + logger=None): + + # set the config parameters + dataset_config_dict = dict() + + train_dataset = MixDataset(data_dir=data_dir) + + img_height, img_width = train_dataset.get_img_size() + + datathread = datathread + if os.environ.get('datathread') is not None: + datathread = int(os.environ.get('datathread')) + + if logger is not None: + logger.info("Use %d processes to load data..." % datathread) + + train_loader = DataLoader(train_dataset, batch_size = batch_size, \ + shuffle = True, num_workers = datathread, \ + pin_memory = True) + + num_batches_per_epoch = len(train_loader) + + dataset_config_dict['num_batches_per_epoch'] = num_batches_per_epoch + dataset_config_dict['img_size'] = (img_height,img_width) + + return train_loader, dataset_config_dict + +def depth_scale_shift_normalization(depth): + + bsz = depth.shape[0] + + depth_ = depth[:,0,:,:].reshape(bsz,-1).cpu().numpy() + min_value = torch.from_numpy(np.percentile(a=depth_,q=2,axis=1)).to(depth)[...,None,None,None] + max_value = torch.from_numpy(np.percentile(a=depth_,q=98,axis=1)).to(depth)[...,None,None,None] + + normalized_depth = ((depth - min_value)/(max_value-min_value+1e-5) - 0.5) * 2 + normalized_depth = torch.clip(normalized_depth, -1., 1.) + + return normalized_depth + + + +def resize_max_res_tensor(input_tensor, mode, recom_resolution=768): + assert input_tensor.shape[1]==3 + original_H, original_W = input_tensor.shape[2:] + downscale_factor = min(recom_resolution/original_H, recom_resolution/original_W) + + if mode == 'normal': + resized_input_tensor = F.interpolate(input_tensor, + scale_factor=downscale_factor, + mode='nearest') + else: + resized_input_tensor = F.interpolate(input_tensor, + scale_factor=downscale_factor, + mode='bilinear', + align_corners=False) + + if mode == 'depth': + return resized_input_tensor / downscale_factor + else: + return resized_input_tensor diff --git a/utils/de_normalized.py b/utils/de_normalized.py new file mode 100644 index 0000000..4e918b0 --- /dev/null +++ b/utils/de_normalized.py @@ -0,0 +1,33 @@ +# A reimplemented version in public environments by Xiao Fu and Mu Hu + +import numpy as np +from scipy.optimize import least_squares +import torch + +def align_scale_shift(pred, target, clip_max): + mask = (target > 0) & (target < clip_max) + if mask.sum() > 10: + target_mask = target[mask] + pred_mask = pred[mask] + scale, shift = np.polyfit(pred_mask, target_mask, deg=1) + return scale, shift + else: + return 1, 0 + +def align_scale(pred: torch.tensor, target: torch.tensor): + mask = target > 0 + if torch.sum(mask) > 10: + scale = torch.median(target[mask]) / (torch.median(pred[mask]) + 1e-8) + else: + scale = 1 + pred_scale = pred * scale + return pred_scale, scale + +def align_shift(pred: torch.tensor, target: torch.tensor): + mask = target > 0 + if torch.sum(mask) > 10: + shift = torch.median(target[mask]) - (torch.median(pred[mask]) + 1e-8) + else: + shift = 0 + pred_shift = pred + shift + return pred_shift, shift \ No newline at end of file diff --git a/utils/depth2normal.py b/utils/depth2normal.py new file mode 100644 index 0000000..71537dc --- /dev/null +++ b/utils/depth2normal.py @@ -0,0 +1,185 @@ +# A reimplemented version in public environments by Xiao Fu and Mu Hu + +import pickle +import os +import numpy as np +import cv2 +import torch +import torch.nn as nn +import glob + + +def init_image_coor(height, width): + x_row = np.arange(0, width) + x = np.tile(x_row, (height, 1)) + x = x[np.newaxis, :, :] + x = x.astype(np.float32) + x = torch.from_numpy(x.copy()).cuda() + u_u0 = x - width/2.0 + + y_col = np.arange(0, height) # y_col = np.arange(0, height) + y = np.tile(y_col, (width, 1)).T + y = y[np.newaxis, :, :] + y = y.astype(np.float32) + y = torch.from_numpy(y.copy()).cuda() + v_v0 = y - height/2.0 + return u_u0, v_v0 + + +def depth_to_xyz(depth, focal_length): + b, c, h, w = depth.shape + u_u0, v_v0 = init_image_coor(h, w) + x = u_u0 * depth / focal_length[0] + y = v_v0 * depth / focal_length[1] + z = depth + pw = torch.cat([x, y, z], 1).permute(0, 2, 3, 1) # [b, h, w, c] + return pw + + +def get_surface_normal(xyz, patch_size=5): + # xyz: [1, h, w, 3] + x, y, z = torch.unbind(xyz, dim=3) + x = torch.unsqueeze(x, 0) + y = torch.unsqueeze(y, 0) + z = torch.unsqueeze(z, 0) + + xx = x * x + yy = y * y + zz = z * z + xy = x * y + xz = x * z + yz = y * z + patch_weight = torch.ones((1, 1, patch_size, patch_size), requires_grad=False).cuda() + xx_patch = nn.functional.conv2d(xx, weight=patch_weight, padding=int(patch_size / 2)) + yy_patch = nn.functional.conv2d(yy, weight=patch_weight, padding=int(patch_size / 2)) + zz_patch = nn.functional.conv2d(zz, weight=patch_weight, padding=int(patch_size / 2)) + xy_patch = nn.functional.conv2d(xy, weight=patch_weight, padding=int(patch_size / 2)) + xz_patch = nn.functional.conv2d(xz, weight=patch_weight, padding=int(patch_size / 2)) + yz_patch = nn.functional.conv2d(yz, weight=patch_weight, padding=int(patch_size / 2)) + ATA = torch.stack([xx_patch, xy_patch, xz_patch, xy_patch, yy_patch, yz_patch, xz_patch, yz_patch, zz_patch], + dim=4) + ATA = torch.squeeze(ATA) + ATA = torch.reshape(ATA, (ATA.size(0), ATA.size(1), 3, 3)) + eps_identity = 1e-6 * torch.eye(3, device=ATA.device, dtype=ATA.dtype)[None, None, :, :].repeat([ATA.size(0), ATA.size(1), 1, 1]) + ATA = ATA + eps_identity + x_patch = nn.functional.conv2d(x, weight=patch_weight, padding=int(patch_size / 2)) + y_patch = nn.functional.conv2d(y, weight=patch_weight, padding=int(patch_size / 2)) + z_patch = nn.functional.conv2d(z, weight=patch_weight, padding=int(patch_size / 2)) + AT1 = torch.stack([x_patch, y_patch, z_patch], dim=4) + AT1 = torch.squeeze(AT1) + AT1 = torch.unsqueeze(AT1, 3) + + patch_num = 4 + patch_x = int(AT1.size(1) / patch_num) + patch_y = int(AT1.size(0) / patch_num) + n_img = torch.randn(AT1.shape).cuda() + overlap = patch_size // 2 + 1 + for x in range(int(patch_num)): + for y in range(int(patch_num)): + left_flg = 0 if x == 0 else 1 + right_flg = 0 if x == patch_num -1 else 1 + top_flg = 0 if y == 0 else 1 + btm_flg = 0 if y == patch_num - 1 else 1 + at1 = AT1[y * patch_y - top_flg * overlap:(y + 1) * patch_y + btm_flg * overlap, + x * patch_x - left_flg * overlap:(x + 1) * patch_x + right_flg * overlap] + ata = ATA[y * patch_y - top_flg * overlap:(y + 1) * patch_y + btm_flg * overlap, + x * patch_x - left_flg * overlap:(x + 1) * patch_x + right_flg * overlap] + # n_img_tmp, _ = torch.solve(at1, ata) + n_img_tmp = torch.linalg.solve(ata, at1) + + n_img_tmp_select = n_img_tmp[top_flg * overlap:patch_y + top_flg * overlap, left_flg * overlap:patch_x + left_flg * overlap, :, :] + n_img[y * patch_y:y * patch_y + patch_y, x * patch_x:x * patch_x + patch_x, :, :] = n_img_tmp_select + + n_img_L2 = torch.sqrt(torch.sum(n_img ** 2, dim=2, keepdim=True)) + n_img_norm = n_img / n_img_L2 + + # re-orient normals consistently + orient_mask = torch.sum(torch.squeeze(n_img_norm) * torch.squeeze(xyz), dim=2) > 0 + n_img_norm[orient_mask] *= -1 + return n_img_norm + +def get_surface_normalv2(xyz, patch_size=5): + """ + xyz: xyz coordinates + patch: [p1, p2, p3, + p4, p5, p6, + p7, p8, p9] + surface_normal = [(p9-p1) x (p3-p7)] + [(p6-p4) - (p8-p2)] + return: normal [h, w, 3, b] + """ + b, h, w, c = xyz.shape + half_patch = patch_size // 2 + xyz_pad = torch.zeros((b, h + patch_size - 1, w + patch_size - 1, c), dtype=xyz.dtype, device=xyz.device) + xyz_pad[:, half_patch:-half_patch, half_patch:-half_patch, :] = xyz + + # xyz_left_top = xyz_pad[:, :h, :w, :] # p1 + # xyz_right_bottom = xyz_pad[:, -h:, -w:, :]# p9 + # xyz_left_bottom = xyz_pad[:, -h:, :w, :] # p7 + # xyz_right_top = xyz_pad[:, :h, -w:, :] # p3 + # xyz_cross1 = xyz_left_top - xyz_right_bottom # p1p9 + # xyz_cross2 = xyz_left_bottom - xyz_right_top # p7p3 + + xyz_left = xyz_pad[:, half_patch:half_patch + h, :w, :] # p4 + xyz_right = xyz_pad[:, half_patch:half_patch + h, -w:, :] # p6 + xyz_top = xyz_pad[:, :h, half_patch:half_patch + w, :] # p2 + xyz_bottom = xyz_pad[:, -h:, half_patch:half_patch + w, :] # p8 + xyz_horizon = xyz_left - xyz_right # p4p6 + xyz_vertical = xyz_top - xyz_bottom # p2p8 + + xyz_left_in = xyz_pad[:, half_patch:half_patch + h, 1:w+1, :] # p4 + xyz_right_in = xyz_pad[:, half_patch:half_patch + h, patch_size-1:patch_size-1+w, :] # p6 + xyz_top_in = xyz_pad[:, 1:h+1, half_patch:half_patch + w, :] # p2 + xyz_bottom_in = xyz_pad[:, patch_size-1:patch_size-1+h, half_patch:half_patch + w, :] # p8 + xyz_horizon_in = xyz_left_in - xyz_right_in # p4p6 + xyz_vertical_in = xyz_top_in - xyz_bottom_in # p2p8 + + n_img_1 = torch.cross(xyz_horizon_in, xyz_vertical_in, dim=3) + n_img_2 = torch.cross(xyz_horizon, xyz_vertical, dim=3) + + # re-orient normals consistently + orient_mask = torch.sum(n_img_1 * xyz, dim=3) > 0 + n_img_1[orient_mask] *= -1 + orient_mask = torch.sum(n_img_2 * xyz, dim=3) > 0 + n_img_2[orient_mask] *= -1 + + n_img1_L2 = torch.sqrt(torch.sum(n_img_1 ** 2, dim=3, keepdim=True)) + n_img1_norm = n_img_1 / (n_img1_L2 + 1e-8) + + n_img2_L2 = torch.sqrt(torch.sum(n_img_2 ** 2, dim=3, keepdim=True)) + n_img2_norm = n_img_2 / (n_img2_L2 + 1e-8) + + # average 2 norms + n_img_aver = n_img1_norm + n_img2_norm + n_img_aver_L2 = torch.sqrt(torch.sum(n_img_aver ** 2, dim=3, keepdim=True)) + n_img_aver_norm = n_img_aver / (n_img_aver_L2 + 1e-8) + # re-orient normals consistently + orient_mask = torch.sum(n_img_aver_norm * xyz, dim=3) > 0 + n_img_aver_norm[orient_mask] *= -1 + n_img_aver_norm_out = n_img_aver_norm.permute((1, 2, 3, 0)) # [h, w, c, b] + + # a = torch.sum(n_img1_norm_out*n_img2_norm_out, dim=2).cpu().numpy().squeeze() + # plt.imshow(np.abs(a), cmap='rainbow') + # plt.show() + return n_img_aver_norm_out#n_img1_norm.permute((1, 2, 3, 0)) + +def surface_normal_from_depth(depth, focal_length, valid_mask=None): + # para depth: depth map, [b, c, h, w] + b, c, h, w = depth.shape + focal_length = focal_length[:, None, None, None] + depth_filter = nn.functional.avg_pool2d(depth, kernel_size=3, stride=1, padding=1) + #depth_filter = nn.functional.avg_pool2d(depth_filter, kernel_size=3, stride=1, padding=1) + xyz = depth_to_xyz(depth_filter, focal_length) + sn_batch = [] + for i in range(b): + xyz_i = xyz[i, :][None, :, :, :] + #normal = get_surface_normalv2(xyz_i) + normal = get_surface_normal(xyz_i) + sn_batch.append(normal) + sn_batch = torch.cat(sn_batch, dim=3).permute((3, 2, 0, 1)) # [b, c, h, w] + + if valid_mask != None: + mask_invalid = (~valid_mask).repeat(1, 3, 1, 1) + sn_batch[mask_invalid] = 0.0 + + return sn_batch + diff --git a/utils/depth_ensemble.py b/utils/depth_ensemble.py new file mode 100644 index 0000000..170deb2 --- /dev/null +++ b/utils/depth_ensemble.py @@ -0,0 +1,115 @@ +# A reimplemented version in public environments by Xiao Fu and Mu Hu + +import numpy as np +import torch + +from scipy.optimize import minimize + +def inter_distances(tensors: torch.Tensor): + """ + To calculate the distance between each two depth maps. + """ + distances = [] + for i, j in torch.combinations(torch.arange(tensors.shape[0])): + arr1 = tensors[i : i + 1] + arr2 = tensors[j : j + 1] + distances.append(arr1 - arr2) + dist = torch.concat(distances, dim=0) + return dist + + +def ensemble_depths(input_images:torch.Tensor, + regularizer_strength: float =0.02, + max_iter: int =2, + tol:float =1e-3, + reduction: str='median', + max_res: int=None): + """ + To ensemble multiple affine-invariant depth images (up to scale and shift), + by aligning estimating the scale and shift + """ + + device = input_images.device + dtype = input_images.dtype + np_dtype = np.float32 + + + original_input = input_images.clone() + n_img = input_images.shape[0] + ori_shape = input_images.shape + + if max_res is not None: + scale_factor = torch.min(max_res / torch.tensor(ori_shape[-2:])) + if scale_factor < 1: + downscaler = torch.nn.Upsample(scale_factor=scale_factor, mode="nearest") + input_images = downscaler(torch.from_numpy(input_images)).numpy() + + # init guess + _min = np.min(input_images.reshape((n_img, -1)).cpu().numpy(), axis=1) # get the min value of each possible depth + _max = np.max(input_images.reshape((n_img, -1)).cpu().numpy(), axis=1) # get the max value of each possible depth + s_init = 1.0 / (_max - _min).reshape((-1, 1, 1)) #(10,1,1) : re-scale'f scale + t_init = (-1 * s_init.flatten() * _min.flatten()).reshape((-1, 1, 1)) #(10,1,1) + + x = np.concatenate([s_init, t_init]).reshape(-1).astype(np_dtype) #(20,) + + input_images = input_images.to(device) + + # objective function + def closure(x): + l = len(x) + s = x[: int(l / 2)] + t = x[int(l / 2) :] + s = torch.from_numpy(s).to(dtype=dtype).to(device) + t = torch.from_numpy(t).to(dtype=dtype).to(device) + + transformed_arrays = input_images * s.view((-1, 1, 1)) + t.view((-1, 1, 1)) + dists = inter_distances(transformed_arrays) + sqrt_dist = torch.sqrt(torch.mean(dists**2)) + + if "mean" == reduction: + pred = torch.mean(transformed_arrays, dim=0) + elif "median" == reduction: + pred = torch.median(transformed_arrays, dim=0).values + else: + raise ValueError + + near_err = torch.sqrt((0 - torch.min(pred)) ** 2) + far_err = torch.sqrt((1 - torch.max(pred)) ** 2) + + err = sqrt_dist + (near_err + far_err) * regularizer_strength + err = err.detach().cpu().numpy().astype(np_dtype) + return err + + res = minimize( + closure, x, method="BFGS", tol=tol, options={"maxiter": max_iter, "disp": False} + ) + x = res.x + l = len(x) + s = x[: int(l / 2)] + t = x[int(l / 2) :] + + # Prediction + s = torch.from_numpy(s).to(dtype=dtype).to(device) + t = torch.from_numpy(t).to(dtype=dtype).to(device) + transformed_arrays = original_input * s.view(-1, 1, 1) + t.view(-1, 1, 1) #[10,H,W] + + + if "mean" == reduction: + aligned_images = torch.mean(transformed_arrays, dim=0) + std = torch.std(transformed_arrays, dim=0) + uncertainty = std + + elif "median" == reduction: + aligned_images = torch.median(transformed_arrays, dim=0).values + # MAD (median absolute deviation) as uncertainty indicator + abs_dev = torch.abs(transformed_arrays - aligned_images) + mad = torch.median(abs_dev, dim=0).values + uncertainty = mad + + # Scale and shift to [0, 1] + _min = torch.min(aligned_images) + _max = torch.max(aligned_images) + aligned_images = (aligned_images - _min) / (_max - _min) + uncertainty /= _max - _min + + return aligned_images, uncertainty \ No newline at end of file diff --git a/utils/image_util.py b/utils/image_util.py new file mode 100644 index 0000000..a864ca1 --- /dev/null +++ b/utils/image_util.py @@ -0,0 +1,83 @@ +# A reimplemented version in public environments by Xiao Fu and Mu Hu + +import matplotlib +import numpy as np +import torch +from PIL import Image + + + + +def resize_max_res(img: Image.Image, max_edge_resolution: int) -> Image.Image: + """ + Resize image to limit maximum edge length while keeping aspect ratio. + Args: + img (`Image.Image`): + Image to be resized. + max_edge_resolution (`int`): + Maximum edge length (pixel). + Returns: + `Image.Image`: Resized image. + """ + + original_width, original_height = img.size + + downscale_factor = min( + max_edge_resolution / original_width, max_edge_resolution / original_height + ) + + new_width = int(original_width * downscale_factor) + new_height = int(original_height * downscale_factor) + + resized_img = img.resize((new_width, new_height)) + return resized_img + + +def colorize_depth_maps( + depth_map, min_depth, max_depth, cmap="Spectral", valid_mask=None +): + """ + Colorize depth maps. + """ + assert len(depth_map.shape) >= 2, "Invalid dimension" + + if isinstance(depth_map, torch.Tensor): + depth = depth_map.detach().clone().squeeze().numpy() + elif isinstance(depth_map, np.ndarray): + depth = depth_map.copy().squeeze() + # reshape to [ (B,) H, W ] + if depth.ndim < 3: + depth = depth[np.newaxis, :, :] + + # colorize + cm = matplotlib.colormaps[cmap] + depth = ((depth - min_depth) / (max_depth - min_depth)).clip(0, 1) + img_colored_np = cm(depth, bytes=False)[:, :, :, 0:3] # value from 0 to 1 + img_colored_np = np.rollaxis(img_colored_np, 3, 1) + + if valid_mask is not None: + if isinstance(depth_map, torch.Tensor): + valid_mask = valid_mask.detach().numpy() + valid_mask = valid_mask.squeeze() # [H, W] or [B, H, W] + if valid_mask.ndim < 3: + valid_mask = valid_mask[np.newaxis, np.newaxis, :, :] + else: + valid_mask = valid_mask[:, np.newaxis, :, :] + valid_mask = np.repeat(valid_mask, 3, axis=1) + img_colored_np[~valid_mask] = 0 + + if isinstance(depth_map, torch.Tensor): + img_colored = torch.from_numpy(img_colored_np).float() + elif isinstance(depth_map, np.ndarray): + img_colored = img_colored_np + + return img_colored + + +def chw2hwc(chw): + assert 3 == len(chw.shape) + if isinstance(chw, torch.Tensor): + hwc = torch.permute(chw, (1, 2, 0)) + elif isinstance(chw, np.ndarray): + hwc = np.moveaxis(chw, 0, -1) + return hwc diff --git a/utils/normal_ensemble.py b/utils/normal_ensemble.py new file mode 100644 index 0000000..f185122 --- /dev/null +++ b/utils/normal_ensemble.py @@ -0,0 +1,22 @@ +# A reimplemented version in public environments by Xiao Fu and Mu Hu + +import numpy as np +import torch + +def ensemble_normals(input_images:torch.Tensor): + normal_preds = input_images + + bsz, d, h, w = normal_preds.shape + normal_preds = normal_preds / (torch.norm(normal_preds, p=2, dim=1).unsqueeze(1)+1e-5) + + phi = torch.atan2(normal_preds[:,1,:,:], normal_preds[:,0,:,:]).mean(dim=0) + theta = torch.atan2(torch.norm(normal_preds[:,:2,:,:], p=2, dim=1), normal_preds[:,2,:,:]).mean(dim=0) + normal_pred = torch.zeros((d,h,w)).to(normal_preds) + normal_pred[0,:,:] = torch.sin(theta) * torch.cos(phi) + normal_pred[1,:,:] = torch.sin(theta) * torch.sin(phi) + normal_pred[2,:,:] = torch.cos(theta) + + angle_error = torch.acos(torch.cosine_similarity(normal_pred[None], normal_preds, dim=1)) + normal_idx = torch.argmin(angle_error.reshape(bsz,-1).sum(-1)) + + return normal_preds[normal_idx] \ No newline at end of file diff --git a/utils/seed_all.py b/utils/seed_all.py new file mode 100644 index 0000000..9579565 --- /dev/null +++ b/utils/seed_all.py @@ -0,0 +1,33 @@ +# Copyright 2023 Bingxin Ke, ETH Zurich. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# -------------------------------------------------------------------------- +# If you find this code useful, we kindly ask you to cite our paper in your work. +# Please find bibtex at: https://github.com/prs-eth/Marigold#-citation +# More information about the method can be found at https://marigoldmonodepth.github.io +# -------------------------------------------------------------------------- + + +import numpy as np +import random +import torch + + +def seed_all(seed: int = 0): + """ + Set random seeds of all components. + """ + random.seed(seed) + np.random.seed(seed) + torch.manual_seed(seed) + torch.cuda.manual_seed_all(seed) diff --git a/utils/surface_normal.py b/utils/surface_normal.py new file mode 100644 index 0000000..79d3a06 --- /dev/null +++ b/utils/surface_normal.py @@ -0,0 +1,213 @@ +# A reimplemented version in public environments by Xiao Fu and Mu Hu + +import torch +import numpy as np +import torch.nn as nn + + +def init_image_coor(height, width): + x_row = np.arange(0, width) + x = np.tile(x_row, (height, 1)) + x = x[np.newaxis, :, :] + x = x.astype(np.float32) + x = torch.from_numpy(x.copy()).cuda() + u_u0 = x - width/2.0 + + y_col = np.arange(0, height) # y_col = np.arange(0, height) + y = np.tile(y_col, (width, 1)).T + y = y[np.newaxis, :, :] + y = y.astype(np.float32) + y = torch.from_numpy(y.copy()).cuda() + v_v0 = y - height/2.0 + return u_u0, v_v0 + + +def depth_to_xyz(depth, focal_length): + b, c, h, w = depth.shape + u_u0, v_v0 = init_image_coor(h, w) + x = u_u0 * depth / focal_length + y = v_v0 * depth / focal_length + z = depth + pw = torch.cat([x, y, z], 1).permute(0, 2, 3, 1) # [b, h, w, c] + return pw + + +def get_surface_normal(xyz, patch_size=3): + # xyz: [1, h, w, 3] + x, y, z = torch.unbind(xyz, dim=3) + x = torch.unsqueeze(x, 0) + y = torch.unsqueeze(y, 0) + z = torch.unsqueeze(z, 0) + + xx = x * x + yy = y * y + zz = z * z + xy = x * y + xz = x * z + yz = y * z + patch_weight = torch.ones((1, 1, patch_size, patch_size), requires_grad=False).cuda() + xx_patch = nn.functional.conv2d(xx, weight=patch_weight, padding=int(patch_size / 2)) + yy_patch = nn.functional.conv2d(yy, weight=patch_weight, padding=int(patch_size / 2)) + zz_patch = nn.functional.conv2d(zz, weight=patch_weight, padding=int(patch_size / 2)) + xy_patch = nn.functional.conv2d(xy, weight=patch_weight, padding=int(patch_size / 2)) + xz_patch = nn.functional.conv2d(xz, weight=patch_weight, padding=int(patch_size / 2)) + yz_patch = nn.functional.conv2d(yz, weight=patch_weight, padding=int(patch_size / 2)) + ATA = torch.stack([xx_patch, xy_patch, xz_patch, xy_patch, yy_patch, yz_patch, xz_patch, yz_patch, zz_patch], + dim=4) + ATA = torch.squeeze(ATA) + ATA = torch.reshape(ATA, (ATA.size(0), ATA.size(1), 3, 3)) + eps_identity = 1e-6 * torch.eye(3, device=ATA.device, dtype=ATA.dtype)[None, None, :, :].repeat([ATA.size(0), ATA.size(1), 1, 1]) + ATA = ATA + eps_identity + x_patch = nn.functional.conv2d(x, weight=patch_weight, padding=int(patch_size / 2)) + y_patch = nn.functional.conv2d(y, weight=patch_weight, padding=int(patch_size / 2)) + z_patch = nn.functional.conv2d(z, weight=patch_weight, padding=int(patch_size / 2)) + AT1 = torch.stack([x_patch, y_patch, z_patch], dim=4) + AT1 = torch.squeeze(AT1) + AT1 = torch.unsqueeze(AT1, 3) + + patch_num = 4 + patch_x = int(AT1.size(1) / patch_num) + patch_y = int(AT1.size(0) / patch_num) + n_img = torch.randn(AT1.shape).cuda() + overlap = patch_size // 2 + 1 + for x in range(int(patch_num)): + for y in range(int(patch_num)): + left_flg = 0 if x == 0 else 1 + right_flg = 0 if x == patch_num -1 else 1 + top_flg = 0 if y == 0 else 1 + btm_flg = 0 if y == patch_num - 1 else 1 + at1 = AT1[y * patch_y - top_flg * overlap:(y + 1) * patch_y + btm_flg * overlap, + x * patch_x - left_flg * overlap:(x + 1) * patch_x + right_flg * overlap] + ata = ATA[y * patch_y - top_flg * overlap:(y + 1) * patch_y + btm_flg * overlap, + x * patch_x - left_flg * overlap:(x + 1) * patch_x + right_flg * overlap] + n_img_tmp, _ = torch.solve(at1, ata) + + n_img_tmp_select = n_img_tmp[top_flg * overlap:patch_y + top_flg * overlap, left_flg * overlap:patch_x + left_flg * overlap, :, :] + n_img[y * patch_y:y * patch_y + patch_y, x * patch_x:x * patch_x + patch_x, :, :] = n_img_tmp_select + + n_img_L2 = torch.sqrt(torch.sum(n_img ** 2, dim=2, keepdim=True)) + n_img_norm = n_img / n_img_L2 + + # re-orient normals consistently + orient_mask = torch.sum(torch.squeeze(n_img_norm) * torch.squeeze(xyz), dim=2) > 0 + n_img_norm[orient_mask] *= -1 + return n_img_norm + +def get_surface_normalv2(xyz, patch_size=3): + """ + xyz: xyz coordinates + patch: [p1, p2, p3, + p4, p5, p6, + p7, p8, p9] + surface_normal = [(p9-p1) x (p3-p7)] + [(p6-p4) - (p8-p2)] + return: normal [h, w, 3, b] + """ + b, h, w, c = xyz.shape + half_patch = patch_size // 2 + xyz_pad = torch.zeros((b, h + patch_size - 1, w + patch_size - 1, c), dtype=xyz.dtype, device=xyz.device) + xyz_pad[:, half_patch:-half_patch, half_patch:-half_patch, :] = xyz + + # xyz_left_top = xyz_pad[:, :h, :w, :] # p1 + # xyz_right_bottom = xyz_pad[:, -h:, -w:, :]# p9 + # xyz_left_bottom = xyz_pad[:, -h:, :w, :] # p7 + # xyz_right_top = xyz_pad[:, :h, -w:, :] # p3 + # xyz_cross1 = xyz_left_top - xyz_right_bottom # p1p9 + # xyz_cross2 = xyz_left_bottom - xyz_right_top # p7p3 + + xyz_left = xyz_pad[:, half_patch:half_patch + h, :w, :] # p4 + xyz_right = xyz_pad[:, half_patch:half_patch + h, -w:, :] # p6 + xyz_top = xyz_pad[:, :h, half_patch:half_patch + w, :] # p2 + xyz_bottom = xyz_pad[:, -h:, half_patch:half_patch + w, :] # p8 + xyz_horizon = xyz_left - xyz_right # p4p6 + xyz_vertical = xyz_top - xyz_bottom # p2p8 + + xyz_left_in = xyz_pad[:, half_patch:half_patch + h, 1:w+1, :] # p4 + xyz_right_in = xyz_pad[:, half_patch:half_patch + h, patch_size-1:patch_size-1+w, :] # p6 + xyz_top_in = xyz_pad[:, 1:h+1, half_patch:half_patch + w, :] # p2 + xyz_bottom_in = xyz_pad[:, patch_size-1:patch_size-1+h, half_patch:half_patch + w, :] # p8 + xyz_horizon_in = xyz_left_in - xyz_right_in # p4p6 + xyz_vertical_in = xyz_top_in - xyz_bottom_in # p2p8 + + n_img_1 = torch.cross(xyz_horizon_in, xyz_vertical_in, dim=3) + n_img_2 = torch.cross(xyz_horizon, xyz_vertical, dim=3) + + # re-orient normals consistently + orient_mask = torch.sum(n_img_1 * xyz, dim=3) > 0 + n_img_1[orient_mask] *= -1 + orient_mask = torch.sum(n_img_2 * xyz, dim=3) > 0 + n_img_2[orient_mask] *= -1 + + n_img1_L2 = torch.sqrt(torch.sum(n_img_1 ** 2, dim=3, keepdim=True)) + n_img1_norm = n_img_1 / (n_img1_L2 + 1e-8) + + n_img2_L2 = torch.sqrt(torch.sum(n_img_2 ** 2, dim=3, keepdim=True)) + n_img2_norm = n_img_2 / (n_img2_L2 + 1e-8) + + # average 2 norms + n_img_aver = n_img1_norm + n_img2_norm + n_img_aver_L2 = torch.sqrt(torch.sum(n_img_aver ** 2, dim=3, keepdim=True)) + n_img_aver_norm = n_img_aver / (n_img_aver_L2 + 1e-8) + # re-orient normals consistently + orient_mask = torch.sum(n_img_aver_norm * xyz, dim=3) > 0 + n_img_aver_norm[orient_mask] *= -1 + n_img_aver_norm_out = n_img_aver_norm.permute((1, 2, 3, 0)) # [h, w, c, b] + + # a = torch.sum(n_img1_norm_out*n_img2_norm_out, dim=2).cpu().numpy().squeeze() + # plt.imshow(np.abs(a), cmap='rainbow') + # plt.show() + return n_img_aver_norm_out#n_img1_norm.permute((1, 2, 3, 0)) + +def surface_normal_from_depth(depth, focal_length, valid_mask=None): + # para depth: depth map, [b, c, h, w] + b, c, h, w = depth.shape + focal_length = focal_length[:, None, None, None] + depth_filter = nn.functional.avg_pool2d(depth, kernel_size=3, stride=1, padding=1) + depth_filter = nn.functional.avg_pool2d(depth_filter, kernel_size=3, stride=1, padding=1) + xyz = depth_to_xyz(depth_filter, focal_length) + sn_batch = [] + for i in range(b): + xyz_i = xyz[i, :][None, :, :, :] + normal = get_surface_normalv2(xyz_i) + sn_batch.append(normal) + sn_batch = torch.cat(sn_batch, dim=3).permute((3, 2, 0, 1)) # [b, c, h, w] + mask_invalid = (~valid_mask).repeat(1, 3, 1, 1) + sn_batch[mask_invalid] = 0.0 + + return sn_batch + + +def vis_normal(normal): + """ + Visualize surface normal. Transfer surface normal value from [-1, 1] to [0, 255] + @para normal: surface normal, [h, w, 3], numpy.array + """ + n_img_L2 = np.sqrt(np.sum(normal ** 2, axis=2, keepdims=True)) + n_img_norm = normal / (n_img_L2 + 1e-8) + normal_vis = n_img_norm * 127 + normal_vis += 128 + normal_vis = normal_vis.astype(np.uint8) + return normal_vis + +def vis_normal2(normals): + ''' + Montage of normal maps. Vectors are unit length and backfaces thresholded. + ''' + x = normals[:, :, 0] # horizontal; pos right + y = normals[:, :, 1] # depth; pos far + z = normals[:, :, 2] # vertical; pos up + backfacing = (z > 0) + norm = np.sqrt(np.sum(normals**2, axis=2)) + zero = (norm < 1e-5) + x += 1.0; x *= 0.5 + y += 1.0; y *= 0.5 + z = np.abs(z) + x[zero] = 0.0 + y[zero] = 0.0 + z[zero] = 0.0 + normals[:, :, 0] = x # horizontal; pos right + normals[:, :, 1] = y # depth; pos far + normals[:, :, 2] = z # vertical; pos up + return normals + +if __name__ == '__main__': + import cv2, os \ No newline at end of file