From 5b1919fd48bfdcc28a1e8258ec0bc685ad39e313 Mon Sep 17 00:00:00 2001 From: Phillip Lovelace Date: Wed, 14 Aug 2024 10:42:14 -0700 Subject: [PATCH] fix: updates placeholder assets & styles (#1947) * fix: add new image assets * style: adjust page heading image bg color * fix: add new image assets for storybook * fix: convert unsplash images to placeholders * fix: convert unsplash images to small placeholder * fix: hello linter my old friend * fix: update image in empty state --- docs/app/assets/images/card-placeholder-lg.png | Bin 551 -> 2239 bytes docs/app/assets/images/card-placeholder-sm.png | Bin 732 -> 1387 bytes .../components/empty_state/_preview.html.erb | 2 +- .../examples/components/list/_preview.html.erb | 4 ++-- .../components/media_tile/_preview.html.erb | 8 ++++---- .../stylesheets/components/_page_heading.scss | 2 +- packages/sage-react/lib/Card/Card.story.jsx | 4 +++- .../sage-react/lib/Choice/Choice.story.jsx | 5 +++-- .../lib/EmptyState/EmptyState.story.mdx | 6 ++++-- packages/sage-react/lib/Frame/Frame.story.jsx | 6 ++++-- packages/sage-react/lib/List/List.story.jsx | 3 ++- .../lib/MediaTile/MediaTile.story.jsx | 3 ++- .../lib/MediaTile/MediaTiles.story.jsx | 9 +++++---- .../NextBestAction/NextBestAction.story.jsx | 3 ++- packages/sage-react/lib/Panel/Panel.story.mdx | 5 +++-- .../sage-react/public/CardPlaceholderLarge.png | Bin 0 -> 2239 bytes .../sage-react/public/CardPlaceholderSmall.png | Bin 0 -> 1387 bytes 17 files changed, 36 insertions(+), 24 deletions(-) create mode 100644 packages/sage-react/public/CardPlaceholderLarge.png create mode 100644 packages/sage-react/public/CardPlaceholderSmall.png diff --git a/docs/app/assets/images/card-placeholder-lg.png b/docs/app/assets/images/card-placeholder-lg.png index b651c278c19f0893d8f46e1bda3340d47fa8a713..e069d7bf9c006c320615412e1d09b395e3a01261 100644 GIT binary patch literal 2239 zcmcJQ`(ILN9>=LrBuiT>s(EF$P3i7>>EgWvJ5#P>=4HxK%hH`Dp&GLUhd_xsu8r1) zIh6_;(NtQRWTQq%ilkyw0S6K9q^Tfy!BAAl$OYza=<~~Yp7;0je9rgzo*zzbbY$rA zrQa-t!C=e7zTbNQ23rilV2fVaEin@v)#1MRkrur_Cd6Pc==FM??xXIbMH3U_6XO1>4ygF{t3jz}cv$G4^3&dRL8Se@|-L!i}h_qm6cdKy4 zo~S3eP}wZM$JdZW8qD7mXjLoZjd_dJmHI{zFq^8HVr{#hkR z-7H)Bva)6ARaY*m;vbCmBTpXSoWgsmeK1) zjfGt~>i0_(G56OCIf$SQo&}#wiQ5n2^JCiWHa9PtXrDVaKlOC>9`BSeP8omH?FG~* z9UoIf74PmhzcUh+Oi$z%iucQdJ~t}`%TEV&Icb41RKd3xZ#!UpFxfd+PH za77KDFT@_o8&5k7@d(i~`SXQ+~mX%bb(y7Oe4ulh?xD^;};<03nm z0*{D;5~sr^T)<@8jwRri-w-$#8_`5cB*Jvz8sa~G4cQ@$`vO#l9#U?5VLfp_f)^zZ z4GP|E77|Im{cDDkkE|J?82)e?@D9s_DuRSJS@ca9wQJrF_6+1;)^XMOe*xaW1!$7n ze)jI9b_3Iq-@OIrYUfxd%AOm2EfIHs$)K85$o)vpG_m0#xBz&H@6YM5Ue?TD<*QD8aDSh2W8CKyp2C#h z`%4CAqG)4~dXlT>9zCqll6qB{VmnjSdy4sc%o>kF3A@x~L1M~I_NN}zLU}BxssqaW z@_ulX7z-s>0550xlm2&dG{9&p^9S%ER>j-;x4O^_gNX`w%L;F5Wq(T~yM(Xt$p?t- zq(>Y=bLY2`1$)MrO+9XU+g*7h^X>085$B*Gj<#oBfG!NNXH>E5w~}&{Io3)H^sqCt z=X8wZq!e`ZQ0qcCCpt&|zyT{)6Eu(4<)7%DW|_~MT`d{fxx?4hT)w%6BAk*BH;tbB zMvkYNkL^_N(CipNqKQ{gK9_;Qg2{z`LiMpyr1fnOE8MXn<(Pj&^+Fe0dtm3&5l-n- z9N^u5ccXU9=<7L4F}K9ERrKTc9ZHpg$xOgSW5k(LH>zJVqgHw17K5}g<4;!bh>7?M zXh_jkki$fvEDi@XDM`BE{D9%!9QFsBcKv`MbV5vbY5x!;nIYrnI>I-xa$ z%&!x`GIuaLGy}Iq*JFW$j10(xwr4C!-aw#AK-CQrLeXE%3dD5)b8{Xzhhn_7yusU{ zj*kUo*aj;mi~Q7Im^Kl7%Vf>&A4{#6M#oy+FoAWu7;ep?Z``4d*OzpFs!c#@vJ~HA z$Edn}jx3R79d|3*RuQQV#H|96fa7F5w10)O{wxYzHVLZMOG2QPWZE(^eW2!~*0B8= z^PneA{Oq;!JQ5vhYs!OT;if<{EZ$WPUoy--?SPKux(ilBXfH4zd>?Lso|Kc<_l#~{ zFG{|Xl#`M#UPg|jDrqU;-w$)gG_&Zf)%exo=^MP!;<*yW&z&^yTJ9Oj7?ZDJ`w6!7 z<3H%0qk~ni^57#5Qf_@zu!(e^xhBHzJN)xg+WJc9mF3Cu%n)Wb)!M{UbFaha*PCePds6~ew97*F4ZTL z?^ZP6D|r(RK90@D4#|cRKmYrhzCuS2k9#???vb!z@x#}*pN2|)P&Lx*2fIdE{NT|4NR$5k^5)av^r<(Q^gaDPES-Em z9-m%Zqh_7GN2QC8sPyVHYOU=nYSwlON>7pL?=5JplaqsHo!a!w>4gP}K0_vd2|BOu zSK|_Qp_ffL=+0Ma*!|l3lclo{O+KTZ=*efyd&s8QSARrWpZn+*lJ2q{nBIcY>uX&4 zr}v<=kErzIx*jp<)YE57diGYX@#%NB!OCrXI&XbwS_0CgO6Ah*Z^P5;E|pU$BHfGY zsmVV^r>FZfX0pepFHJqI@#*BI0V-Q*w(+ zD=K|SK4a27TY}QPSB{wUE-ib=*RHEHSKZ`*^rV>drYDc zxbt7I69n7aM8Z}919LkY27`AT!bc?(44X9a-2QN{pW+2bqEi8}W3=yjdJ*o*9F3O_Dk;7E{=Sg961tx|Mx;|6U8 zG~ebvhfB=!%q;SqzB%5V-Z=flWzWQ`V`CnA;xYCQgnu40~ zJTG#X_mXd&nVqr_=!&#P_mV@r_b@zCJ37_d?IS*2i=!Aj_xaq!)_CbFX*Jk|2=QGm z2;N?WWI_Z@@38$%9+wxeuX?*+Q>9 z2?(wO*C#-$ZH98#QX5tql(7~>Nm(YHQMK<5`sQ8`)y<-|M~+S+Um}!ATZ}}Ui=koZ zB=b?_+FBhq5P1Yn^LP6!Gbd0)c6Rjh#uhB%fCr-a5aZdg)WH-Ue;&A_Ge%n*BE&=Y zfNVWzycu^x zc?vV_Yf{Rk;>?CN84cs7dc@L8$>~$YqDiO|q~iMMeEwV>F|)`QgTVXiceaeuE%r&j z`u$BhO*4gwbqe)gm{u$smMP3fE=jK|6+X|4KUD^k1j*#Xyeja$0oKv*^oG+sxM~_E z<3P(AkSvG1NIF1IcF=c2^rR2;_d1>)Tq-ZO>B$WsfK^$j7sF|rxN0aiNeazCQBv0U zTY9d2aH?kw8nB)o^f924(Fc*&@0_JxB1QEB7XzKGh?+Ih!s9<5mj#nXrLp0wvsrqP z5t}I64V4Rp?@KuC%a_`RY9f!>0M3({*oxW4G(qxkL|N7lASSz_zB;{W=PdMM9D>lr zyGhaJTvBY|(tlb#x%77{)_lIo=WVWbq=`~)I!opx7dPkMtxCKl;*4<0np@ae581XD zk)r!S$2Bhy^+8B#`PRPgqACN-(0x$jR3fu*d7=Ho-0002BAlSJ8000S4OjJd?%h~7Ilgop%xZEp?0MHr(9F=#L(TK-)Go>)U*;e2|l_z77 z2UVYpB_32$V*8V^%!BIxJ@ yx%E@&hF5x6K#J0FWf7Hwj-I%GmS$4*2C?- zoxPo5%)si08Br~m6kjaZTU-E|8)jGKJVEZx*!1l@^n+^}&&mL-uAN!EF{((g03>J< zEJD9PmtYxM03;YtW?&PfaT!U>Pz9X@K8OfSfJN93(tit^?KkI~p&l>O3k%c(1GXb3 zURb1mp8W}$R~i$XTiTY+t23Y+HqAP8!e;CgXX*@OA1nafjMY+!4;BIJ?b%v-VHu#< zmbSwIK4}D?4%#-{;?>#0@#Gn>QR0OKM%k9O8$MXHW5@EfSMrAGxHYzDRr z{X;EwV}J2U;{vP^80uu@)7e<50Q>>YJIMu$&~E(0F}h$Gik-UKc_(;a9oR-A4ApA( zzyLn|&NVDMq!HL}&Zp$lS+lDqz>3YMD!^8oPn!U<^fCEkyIpo?ES)PAX@bs*jf^6| zY$snQf9!mu0Na&Vm0<}sWoPfdZdc~@rOOLTB1ugD`C9xkSXF*Zx&3PojtKw&Ko|fm zr1r030>7O=%Jw&@0RR910000000000000000DuD_p6h(>cc^Uu0000With Graphic <%= sage_component SageEmptyState, { - graphic: image_tag("empty-state-sm.svg", alt: ""), + graphic: image_tag("card-placeholder-lg.png", alt: ""), title: "Title for state, with graphic instead of icon", text: "Text to appear below. Lorem ipsum dolor sit amet consectituor.", } do %> diff --git a/docs/app/views/examples/components/list/_preview.html.erb b/docs/app/views/examples/components/list/_preview.html.erb index 998fb90be2..6958351c1d 100644 --- a/docs/app/views/examples/components/list/_preview.html.erb +++ b/docs/app/views/examples/components/list/_preview.html.erb @@ -124,7 +124,7 @@ Note that this example also implements the [Reveal utility class](#{pages_helper css_classes: SageClassnames::REVEAL_CONTAINER, } do %> <%= sage_component SageCardRow, { grid_template: "ete" } do %> - + <%= sage_component SageCardBlock, {} do %>

<%= item[:name] %>

Item <%= item[:id] %> specs

@@ -161,7 +161,7 @@ Note that this example also implements the [Reveal utility class](#{pages_helper more_actions: { items: dropdown_items(item[:id]) }, } do %> <%= sage_component SageCardRow, { grid_template: "ete" } do %> - + <%= sage_component SageCardBlock, {} do %> <%= sage_component SageLink, { spacer: { bottom: "2xs" }, diff --git a/docs/app/views/examples/components/media_tile/_preview.html.erb b/docs/app/views/examples/components/media_tile/_preview.html.erb index c0eb17fea4..dc7e7a48c5 100644 --- a/docs/app/views/examples/components/media_tile/_preview.html.erb +++ b/docs/app/views/examples/components/media_tile/_preview.html.erb @@ -32,7 +32,7 @@ panels = [ caption: %(

Vivamus dictum rutrum dui, nec placerat ante

), - media: %(Image of Product Abra), + media: %(Image of Product Abra), title: "Product Abra", }, { @@ -44,7 +44,7 @@ panels = [ caption: %(

Suspendisse eu tellus quis arcu sagittis semper

), - media: %(Image of Product Cadabra), + media: %(Image of Product Cadabra), title: "Product Cadabra", }, { @@ -56,7 +56,7 @@ panels = [ caption: %(

Maecenas vitae leo eu tellus efficitur viverra sit amet ut tortor vestibulum

), - media: %(Image of Product Jimminycricket), + media: %(Image of Product Jimminycricket), title: "Product Jimminycricket", }, ] @@ -155,7 +155,7 @@ NOTE: the examples below omit `media` but this can safely be used as well with t title_tag: "h2", } do %> <%= content_for :sage_media_tile_media do %> - MEDIA Image of Product Abra + MEDIA Image of Product Abra <% end %> <%= content_for :sage_media_tile_actions_custom do %> <%= sage_component SageBadge, { value: "CUSTOM Draft", color: "draft" } %> diff --git a/packages/sage-assets/lib/stylesheets/components/_page_heading.scss b/packages/sage-assets/lib/stylesheets/components/_page_heading.scss index 45ef8ab244..998e7ba6ce 100644 --- a/packages/sage-assets/lib/stylesheets/components/_page_heading.scss +++ b/packages/sage-assets/lib/stylesheets/components/_page_heading.scss @@ -84,7 +84,7 @@ $-page-heading-image-height-mobile: rem(120px); grid-area: image; overflow: hidden; min-height: $-page-heading-image-height-min; - background: sage-color(grey, 300); + background: sage-color(grey, 30); border-radius: sage-border(radius); border: sage-border(); diff --git a/packages/sage-react/lib/Card/Card.story.jsx b/packages/sage-react/lib/Card/Card.story.jsx index 8361f78b1c..7d8a1c8200 100644 --- a/packages/sage-react/lib/Card/Card.story.jsx +++ b/packages/sage-react/lib/Card/Card.story.jsx @@ -8,6 +8,8 @@ import { Link } from '../Link'; import { Card } from './Card'; import { Frame } from '../Frame'; +import placeholderImg from '../../public/CardPlaceholderLarge.png'; + export default { title: 'Sage/Card', component: Card, @@ -122,7 +124,7 @@ Default.args = { Figure (with side bleed) - + Divider diff --git a/packages/sage-react/lib/Choice/Choice.story.jsx b/packages/sage-react/lib/Choice/Choice.story.jsx index 1c7032b176..1279725dfd 100644 --- a/packages/sage-react/lib/Choice/Choice.story.jsx +++ b/packages/sage-react/lib/Choice/Choice.story.jsx @@ -3,6 +3,7 @@ import { selectArgs } from '../story-support/helpers'; import { SageTokens } from '../configs'; import { Avatar } from '../Avatar'; import { Choice } from './Choice'; +import placeholderImg from '../../public/CardPlaceholderSmall.png'; // Default Sandbox export default { @@ -113,7 +114,7 @@ export const WiredIcon = () => { export const Graphic = () => (
( export const LinkText = () => (
# Empty State @@ -79,7 +81,7 @@ The Empty State component has two sizes: default and `compact`. The default size )} - graphic={()} + graphic={()} title="Create your first Email Campaign" titleTag="h1" text={(

@@ -89,4 +91,4 @@ The Empty State component has two sizes: default and `compact`. The default size

)} /> - \ No newline at end of file + diff --git a/packages/sage-react/lib/Frame/Frame.story.jsx b/packages/sage-react/lib/Frame/Frame.story.jsx index c9d1458d37..fad57c1be9 100644 --- a/packages/sage-react/lib/Frame/Frame.story.jsx +++ b/packages/sage-react/lib/Frame/Frame.story.jsx @@ -4,6 +4,8 @@ import { SageClassnames, SageTokens } from '../configs'; import { Button, Label, Property } from '..'; import { Frame } from './Frame'; +import placeholderImg from '../../public/CardPlaceholderLarge.png'; + export default { title: 'Sage/Frame', component: Frame, @@ -91,7 +93,7 @@ export const NestingFrames = () => ( align={Frame.ALIGNMENTS.CENTER_LEFT} > - + @@ -195,7 +197,7 @@ export const CustomBlock = () => ( - + ); diff --git a/packages/sage-react/lib/List/List.story.jsx b/packages/sage-react/lib/List/List.story.jsx index 47cdc4ace6..8b34d5a877 100644 --- a/packages/sage-react/lib/List/List.story.jsx +++ b/packages/sage-react/lib/List/List.story.jsx @@ -9,6 +9,7 @@ import { OptionsDropdown } from '../Dropdown'; import { Property } from '../Property'; import { List } from './List'; import { ListItem } from './ListItem'; +import placeholderImg from '../../public/CardPlaceholderLarge.png'; import { sampleItems, sampleItemRenderer, @@ -81,7 +82,7 @@ export const otherActionItems = () => ( > + ), tileLink: { href: '//example.com', diff --git a/packages/sage-react/lib/MediaTile/MediaTiles.story.jsx b/packages/sage-react/lib/MediaTile/MediaTiles.story.jsx index 0a29bb0f6c..5cd2df51aa 100644 --- a/packages/sage-react/lib/MediaTile/MediaTiles.story.jsx +++ b/packages/sage-react/lib/MediaTile/MediaTiles.story.jsx @@ -1,6 +1,7 @@ import React from 'react'; import { selectArgs } from '../story-support/helpers'; import { MediaTiles } from './MediaTiles'; +import placeholderImg from '../../public/CardPlaceholderLarge.png'; const actionsDropdownItems = [ { @@ -55,7 +56,7 @@ export default { children: commonChildren, footer: null, media: ( - + ), tileLink: commonTileLink, }, @@ -66,7 +67,7 @@ export default { children: commonChildren, footer: null, media: ( - + ), tileLink: commonTileLink, }, @@ -77,7 +78,7 @@ export default { children: commonChildren, footer: null, media: ( - + ), tileLink: commonTileLink, }, @@ -88,7 +89,7 @@ export default { children: commonChildren, footer: null, media: ( - + ), tileLink: commonTileLink, }, diff --git a/packages/sage-react/lib/NextBestAction/NextBestAction.story.jsx b/packages/sage-react/lib/NextBestAction/NextBestAction.story.jsx index 7cf98be596..48619f744e 100644 --- a/packages/sage-react/lib/NextBestAction/NextBestAction.story.jsx +++ b/packages/sage-react/lib/NextBestAction/NextBestAction.story.jsx @@ -2,6 +2,7 @@ import React from 'react'; import { selectArgs } from '../story-support/helpers'; import { NextBestAction } from './NextBestAction'; import { Button } from '../Button'; +import placeholderImg from '../../public/CardPlaceholderLarge.png'; export default { title: 'Sage/Next Best Action', @@ -34,7 +35,7 @@ export default { ), dismissable: true, graphic: { - element: () + element: () }, // eslint-disable-next-line no-console onClickDismiss: () => { console.log('Add your own dismiss functionality here!'); }, diff --git a/packages/sage-react/lib/Panel/Panel.story.mdx b/packages/sage-react/lib/Panel/Panel.story.mdx index 585cca4b74..1b833bdec1 100644 --- a/packages/sage-react/lib/Panel/Panel.story.mdx +++ b/packages/sage-react/lib/Panel/Panel.story.mdx @@ -5,6 +5,7 @@ import { Icon } from "../Icon"; import { OptionsDropdown } from "../Dropdown"; import { Panel } from "./Panel"; import { SageClassnames, SageTokens } from "../configs"; +import placeholderImg from '../../public/CardPlaceholderLarge.png'; - + `} @@ -380,7 +381,7 @@ A panel figure contains an image that occupies a substantive space in the panel. - + diff --git a/packages/sage-react/public/CardPlaceholderLarge.png b/packages/sage-react/public/CardPlaceholderLarge.png new file mode 100644 index 0000000000000000000000000000000000000000..e069d7bf9c006c320615412e1d09b395e3a01261 GIT binary patch literal 2239 zcmcJQ`(ILN9>=LrBuiT>s(EF$P3i7>>EgWvJ5#P>=4HxK%hH`Dp&GLUhd_xsu8r1) zIh6_;(NtQRWTQq%ilkyw0S6K9q^Tfy!BAAl$OYza=<~~Yp7;0je9rgzo*zzbbY$rA zrQa-t!C=e7zTbNQ23rilV2fVaEin@v)#1MRkrur_Cd6Pc==FM??xXIbMH3U_6XO1>4ygF{t3jz}cv$G4^3&dRL8Se@|-L!i}h_qm6cdKy4 zo~S3eP}wZM$JdZW8qD7mXjLoZjd_dJmHI{zFq^8HVr{#hkR z-7H)Bva)6ARaY*m;vbCmBTpXSoWgsmeK1) zjfGt~>i0_(G56OCIf$SQo&}#wiQ5n2^JCiWHa9PtXrDVaKlOC>9`BSeP8omH?FG~* z9UoIf74PmhzcUh+Oi$z%iucQdJ~t}`%TEV&Icb41RKd3xZ#!UpFxfd+PH za77KDFT@_o8&5k7@d(i~`SXQ+~mX%bb(y7Oe4ulh?xD^;};<03nm z0*{D;5~sr^T)<@8jwRri-w-$#8_`5cB*Jvz8sa~G4cQ@$`vO#l9#U?5VLfp_f)^zZ z4GP|E77|Im{cDDkkE|J?82)e?@D9s_DuRSJS@ca9wQJrF_6+1;)^XMOe*xaW1!$7n ze)jI9b_3Iq-@OIrYUfxd%AOm2EfIHs$)K85$o)vpG_m0#xBz&H@6YM5Ue?TD<*QD8aDSh2W8CKyp2C#h z`%4CAqG)4~dXlT>9zCqll6qB{VmnjSdy4sc%o>kF3A@x~L1M~I_NN}zLU}BxssqaW z@_ulX7z-s>0550xlm2&dG{9&p^9S%ER>j-;x4O^_gNX`w%L;F5Wq(T~yM(Xt$p?t- zq(>Y=bLY2`1$)MrO+9XU+g*7h^X>085$B*Gj<#oBfG!NNXH>E5w~}&{Io3)H^sqCt z=X8wZq!e`ZQ0qcCCpt&|zyT{)6Eu(4<)7%DW|_~MT`d{fxx?4hT)w%6BAk*BH;tbB zMvkYNkL^_N(CipNqKQ{gK9_;Qg2{z`LiMpyr1fnOE8MXn<(Pj&^+Fe0dtm3&5l-n- z9N^u5ccXU9=<7L4F}K9ERrKTc9ZHpg$xOgSW5k(LH>zJVqgHw17K5}g<4;!bh>7?M zXh_jkki$fvEDi@XDM`BE{D9%!9QFsBcKv`MbV5vbY5x!;nIYrnI>I-xa$ z%&!x`GIuaLGy}Iq*JFW$j10(xwr4C!-aw#AK-CQrLeXE%3dD5)b8{Xzhhn_7yusU{ zj*kUo*aj;mi~Q7Im^Kl7%Vf>&A4{#6M#oy+FoAWu7;ep?Z``4d*OzpFs!c#@vJ~HA z$Edn}jx3R79d|3*RuQQV#H|96fa7F5w10)O{wxYzHVLZMOG2QPWZE(^eW2!~*0B8= z^PneA{Oq;!JQ5vhYs!OT;if<{EZ$WPUoy--?SPKux(ilBXfH4zd>?Lso|Kc<_l#~{ zFG{|Xl#`M#UPg|jDrqU;-w$)gG_&Zf)%exo=^MP!;<*yW&z&^yTJ9Oj7?ZDJ`w6!7 z<3H%0qk~ni^57#5Qf_@zu!(e^xhBHzJN)xg+WJc9mF3Cu%n)Wb)!M{UbFaha*PCePds6~ew97*F4ZTL z?^ZP6D|r(RK90@D4#|cRKmYrhzCuS2k9#???vbDc zxbt7I69n7aM8Z}919LkY27`AT!bc?(44X9a-2QN{pW+2bqEi8}W3=yjdJ*o*9F3O_Dk;7E{=Sg961tx|Mx;|6U8 zG~ebvhfB=!%q;SqzB%5V-Z=flWzWQ`V`CnA;xYCQgnu40~ zJTG#X_mXd&nVqr_=!&#P_mV@r_b@zCJ37_d?IS*2i=!Aj_xaq!)_CbFX*Jk|2=QGm z2;N?WWI_Z@@38$%9+wxeuX?*+Q>9 z2?(wO*C#-$ZH98#QX5tql(7~>Nm(YHQMK<5`sQ8`)y<-|M~+S+Um}!ATZ}}Ui=koZ zB=b?_+FBhq5P1Yn^LP6!Gbd0)c6Rjh#uhB%fCr-a5aZdg)WH-Ue;&A_Ge%n*BE&=Y zfNVWzycu^x zc?vV_Yf{Rk;>?CN84cs7dc@L8$>~$YqDiO|q~iMMeEwV>F|)`QgTVXiceaeuE%r&j z`u$BhO*4gwbqe)gm{u$smMP3fE=jK|6+X|4KUD^k1j*#Xyeja$0oKv*^oG+sxM~_E z<3P(AkSvG1NIF1IcF=c2^rR2;_d1>)Tq-ZO>B$WsfK^$j7sF|rxN0aiNeazCQBv0U zTY9d2aH?kw8nB)o^f924(Fc*&@0_JxB1QEB7XzKGh?+Ih!s9<5mj#nXrLp0wvsrqP z5t}I64V4Rp?@KuC%a_`RY9f!>0M3({*oxW4G(qxkL|N7lASSz_zB;{W=PdMM9D>lr zyGhaJTvBY|(tlb#x%77{)_lIo=WVWbq=`~)I!opx7dPkMtxCKl;*4<0np@ae581XD zk)r!S$2Bhy^+8B#`PRPgqACN-(