From e3077989876b16d389be33eb7afd5cca89ee92f9 Mon Sep 17 00:00:00 2001 From: Nikita Strygin Date: Wed, 6 Mar 2024 13:31:55 +0300 Subject: [PATCH] [refactor] #1981, #4195, #3068: Add event filters for PermissionTokenSchemaUpdate, Configuration and Executor events Signed-off-by: Nikita Strygin --- configs/swarm/executor.wasm | Bin 887587 -> 889798 bytes data_model/src/events/data/events.rs | 38 +------ data_model/src/events/data/filters.rs | 140 +++++++++++++++++++++++++- docs/source/references/schema.json | 39 +++++++ 4 files changed, 179 insertions(+), 38 deletions(-) diff --git a/configs/swarm/executor.wasm b/configs/swarm/executor.wasm index ac523fc51084c33a9b2fec24e0ed36f527e94e88..b70ed228c4e247cbfef80e48cb1b115cadbaa2f6 100755 GIT binary patch delta 54752 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 delta 54779 zcmeGF33OD&@&FD`_nn#BcP7guBxD69VM)Ro*094xKv59fA3hh*=Z2!-^SM1W2}B4G zLSO4@RMY@LQ33`Chzc4YEMk!DtL}SeOC~<__kHI(=YRg^KzeR< zbyanBb$4}j-@c!%=&^KOkD?7!+84N|cq1KPa(pOTiX}FkNDHI|jvOV-@$i9sdS`BKw}uLGtBr1ZRIaa35kkwp%Z^{x(IS&p)D z%Q04AskR)q%(P|&d}7=maFx!I=1Ehf6_%6Aa#Bhs(aAK8e(reN8rR}8OQtea`Ic3) zy_OZq6iZ&= z?*@Eq-C*5j{ngb7)?L=`trgaV*2~rd)@cEy);-oU)+^RU)|=K^>pE+m zbw_XOFV@9@mbD+W*%SB)CFWE*P#UNjR6_?te%{VBLp)W9oyPRmp6ql;AmRBu*U=?t zC@siyyctwX@u^dAPyX~=@P7OMEcvi48jBRaYCA5`x}4(CVe5_L+hS`}0wdoQca0lt zBzqjMx3))BWTmAUtm>q+w6xdbi~-bYr)mKkXWQdg-#USo%yt}Z-Gc6#?YP?dNpi6G z@iyBC$#FDKoIo-hvl8QDX3xOlb}7zG2ii?T0`aF^u`BApiMBb8^29jeC_bCmOrpC^ zI0D!20py$FJ392Do!SsC>#F2$DBb;=WA>so zj&|LGX!>Ob85&u9U$-dY0!R07g9r6!DZuL=D{;j16yUL`k;S+5{3C#4uYYW&qkKqL zjYuA6eSH65$FZSX8e~Q~Ub`dBh0t%9KZI}ZbR#Uh>o-oJ^GYACFOHZ@G!mnWhmZWq zqRG42RfRJTKO$sR3qIi>E@#4{nY#FH(9FkY2oR^ecdV$a-obpA2&J z8{N#Y?_amOKyQo*a-=@>FV|!Lr(bscv_A7oJvqL5_KEs(Sf9_XFUM=+r|F>Q9phhm zh)c}nIQo)Hj)xr6Uw*~KW%R$@3^zTmNtgeW)$zzHeO(wAU%8@{F*IRhBBOxuw(PBm! zFLZo{yK%N=O?7kmBU{km%@{vxkpO$O?4sEfI@!^V>2rb{{UOnD)A5d8EpJ=>=iE2l zn91N)<8{y_F0oOpeWkY!?wOzCmbv%BFEyfGmLBP-&Uf4D^7l@2gxQN+hUj=|@nH_} zlD63rv#wNkRmsw>I*9Ap?)YVyySkwt%+a%ac&4pz^Bh_zcy?atCKtHspf2*@;y01C!JU#ktxNkelqdVsqLvELa$DD zRGlutLCUcz`C&)RFU>~>?T9`%h(A1bE|;V^mejOzMAYsllN_gOegW`dn>b~dE-XPumnF|vR} z{&HqVnn4Y-oyY0M5NNkY7kX7dZS^S4xWMVxhb|P*`m$^iP%mXR z6OFbYVBe#N`56^O>~$=z>W%7oDNe2?52RZ6vhN> z$t7>WWdU0+U@ig80`{qZh2NzUGzs8g0gTjPMghAZV4*rp60nTlI1?9)3fR2gpnV`o z2`<+9iJFY_5%26T2a+YU>IVo9B3&YLGSQt=C0lwXns+=2M7ItRZIhgj2a#-vd<$no zNDs0ST8EMiWHD5Rl1efK);A%e0{3fl6KV30z;xN-B~fGs>}W-r zkUIFb6=_8e&46Qxq`eXSv?VaG7rBS*g0V@YIavVttx2=+8QiI}8|*YmDl(!Fr;Oul zb+ETJ7X45!YO7b&vOqY3h-`zLL=x5rjnCU4jV(Hj$a*x8eRe{l?8_3c=tp`{d&8nr z6B{kMDG`fa7ezaf`ZZ2VYP8&jB$7fm=`67&3hF5fk~9MQJ2q-2mSm(dPp6WDROWeW-a{qlPpL$ACcVfh z2r^Tlr&95! zR37e59;0V z9#kYjZEq5m?03kY&Zhxw_+K~`e+LBc<$Wp61_kw|m5_lXniSUqKFoo~yn(TGI>`#8 zp^;QvBv*MO;!IV;OMmAL^ix`PmEP@*h^60AvGj?0z|U1Og3i~KQh`c&zn(3X4r)}P zzYfB(m-Moy{FJS_tku-6q;d1bPuI@Nbn%W zU-YKZTj-JMrbUfHMc~h={+P8I*cUa!*(}HY0Irpaw4TyjU*FhK0vmH&G$#_ zu?I;xt@#n!KSbu!jBMw`v*aqFMKj^WTJjzF2`2WY&+x~!=gB5)oo)XlJ4rgUzlaXm zBI`<(nix)^k!V#xlG1dSgTh*vILI+}tZRQeUWYT~QsD5z@_WX+s!hi#W zJVidlAQ6;3MIzBRzxyTf6n*a(82B`4J!reAmC=i=29X*-FktEyM#I4_X|U~p*a@VY z^ZTa>nEqcY`hS`gRs9TuUi4!{D>W-}o`#Jt{eR7h=7((2hB&XG+b70E%TGf3MDhX6 z`HNwuc~HKP#KZ8{$efTr{PFmhUONeK?_ua>i*x^FQiI|7KOmjZuh1*!K_LEELFqF8 zF`%oEl182jDQZ9&LrYtTAUs+GnEus@{^bDERk)H#riXu`kNyS3duAgt-GlBXDkThp zPOvhv+qv%q>qco>227kurqP?zA?HW7k^BNN0rW=>K3_~WVl~d+LEqq^thkQ|U?|Hu z)d%~utu}3}kIe98%sek%w z1bt2UrSJYNH)5KNYO}u65 z|E-BHccm@Dmiub~T!k#7Yi`BwhnY?2)R05|RPEVtq2*%8`GD^F{jZM2!VEY0BmXg7 zqs@bK_tn2ODjbbR3!m2rX|K_^B<*im_#qGse)r1&R=rOC$>&*8>wIT9PU3%cD+e;W z(wSi=G~&LajcB~`TWUNc(gvK}>2qP1{819))-|zWTR{HWg3XBwHp=(&pnHG%0H)5Y z{9T9*1^1ibP0d%rP7-4vpRo2HlHOXa(!4kknw-Ad1t#3bYfW8k)t>f z^`OZ(P)j{%048frK+#xwg3N))_3Tl&@B|G@Wy4~EWSLOOXfhjc0ioK*B~rtXKr{Yq zHO{t{&td^)EhCkG|+^rn|0|t$E4-hio_FNw;%!ATJeNy7BVD|YM?WM5MQ*o zI1tVu6k}5&hc8}u(GSy|8=s^D+tI=k@Ow7xOd%VNEoBj)&Z1c~FB|sFqL0xz*|7eY z6zRM@ho(|e>HK^SMTfFv_9wi?kw}RjE5V;@O!)f*{@B8Q>^|bm$femWY32;Ldo7D} zwlAf(QIY`@Hq%y^Z1zr^$2QYI68tW2Grr2iMV#&38BqP1DHhg!Z3=ZJZJ}!kZr8%0 zt+Y8^RPDU7l@76Uz`&!l8NGVc`S?*Zo(v545cme3s8{xGp5>DGcka zfTcgtyW7`_DUYZ{2wKXAUR0jQ*TycQ)^bNPNjgPsAH)80vLenA%}t7q+=oL6piWDfE~8zB`$)Ctv1^E zVSDzJhi%)_x4?F-#`ex%ZiTJp@cLo9<`)m!Q@`8-+pQW~R&y(CwS|r!w&Q9%Y?s&E z0$ZoX_Omm$!dBbE_ro^vEDdwD?UQG3f$a^A?c{Sb`hT~rwy)oSZK8{#y_R$Q!^fIB z8PcwT?E-zkWlftkj_UbFD*BtZHEEMu1CC8#>3L5@kDmYEY-vUo9IvHg;O2!!YU;yR zb7K7P9dpsccj3kV&6n)cs=MXVt+3TRd_QcP{pK;J(ZAgS+Zv7So0o4z%bGLjhi%nm zS8a#<&vt!J2RGMe;v=`Y2sny82=9 zfW_0Uvn?JL)4fMpWZNU5fxWpxy)yg-T89Ir&RqY*Q&2IyRAF8~5}J8q@W(CQ?{E zf+ZTkswPr&;{>%cV}2y;9@cq)p;BiKD$ifLTJRgG17 zR(Jz~2Q`8}{3*fj8Y9@RX#;{^aDsO=E}XVo?5DQBHf^B3A2i|mNBo)kv`B^@f)F7( zlNhbPj*w!T6wSnytY<0L$xu2INTkO}S)lddvyqK-vWwo6#Qer|GBV1;c6!t;u>DPA zyFB_<*lN)hKed%(JY(44m|I|5uCW~x+eo+csjU`m^}}{&tY;>=iKPCQl4-iW)QD-` z$dK*BR||^!;rn*;2E)M-&04;0{%6BMm7ivdZXwMGp35`h%@|ry(}-;@l(dkZC#7Jw zOKmW@-7XElWU5`NCQf)ZPHINxI;X@*D+xlATS`x0;%F)56Q?t|6>5a#X7j_NbF*PY zYblCk!!xa=$x$=)5dTR$&G&)+yApq|a7t~YRAOJoVX7f6&>j#MVh@h9X)o~L;Xiwb zJqnFHVkhkwNXl|&?{HXHV34) z$6CySswC;Qz+A!DhVdvB5!ZH*>~z`@xVx>?^x+@5f!j$U# z6AB5yqXdY3zgmOc5#?_E2}g?$Or%CT{$V21HkShf@I-+?byabjkimpi{BJv{C0229 zJ85uxK>#%&X!R_6WMb(!KPb>Ja+o@IAqtU|l(rwrh zHSMJYu6Ci#nMa_agVc1at_Q9wRAQ@f9SjEB9H9YU{e|0`*_+t3N(Xc4@DKB=MWF(W z>G?FC&Mxs!*!ea^P)Dg{V@<)2fAOZky4>4QYNdQGDlB1zQ#(pY;rU0nMOkbG{77^F zN)nbgl}{B4x4@VmnK%|uu_XO@U3cv_t9dl*1U)s$#saS-AkA5 zPUh03kEw{3a@A~CsH~0TtKzKa1Bp)lkVacR@_Z$%hO}s zq+y|&A#gi(8G^HScc}#-Mb3wNNOMWBHY^2U4Mc~B8!6I39cXm}Pxh3u&^jje!s+}I z$m}Kcz+`(boJ2l>L%pP-o;-YN4UhDe;yfTkj|XRObU?hzv<7P*Z!A&pIUkTHxT}wJ zmxq?X8r~PDxFWdRSIWgq zRzpiwnh>*++fTgJ9@vAH@|Pzf$Jwp+AQd<5SHW5p39p8K3_=C1b-q4G3L)epn0}k| zG1&-12TQM!^{{QQw3}>zsY4_c53_zTMCus5UXTppB*!2{-24r)+c?Dy5HeJn)^sD! z=L3@%bL`RhwnvPu7>b5U?a4>ZBSWPyi7v}?UK}QkAI^U~F;Ch;$QEdkC%w!!M;v+5 zC4E0692U)&CQ*lYfVR8|EI8e&Fewhf%t`Z0EAW(iM_0|0255 zYA*k4$2}24ydg$4swTT3#ip=+wKt3W(;5$!m9Fg)l$%vy; z8_sILQ7J`Qki8SPc%%r(IV!E^O>o;W9L?uuJF#e;*bZEMTxvbIfU_Le$zbS%(MGfS z<~X}yP|jXM+Mtt$Nh?(Hidqlhb&gP$(a#$J!cL&mgBtE}LYpW?pTOxGpC_G=#_;sy z38@uNEk8&tdD`g*?fHQpqm-V7PZlf>CkvKXgtO`0S)h;UZ0v=23p$Iu3M~olX>0+lyBM2d4(9+5 zbrCF{?qckUMHh4tEJAu4qoAgXF@|IHLZ$t)o6!QDx*7u!fF$DJv987@8i}U3fo_b$ zva7lZwiR7{NCZK0H&M(*hwIiw!VC+$A$v`f;HLIadjJlJ&Fr!E5L*Qt=!TM4fTg=} z2%@-T3WC?VYh~PmeW(H4RDfu!pE=Y!8<*Tfo>JLVa)b zaH%K;_Vf@9BJ^ZVF@_`O*c74Gp(&!^3n{Mp#Xwn#K*p-IfGZj@7UVWExTh%dVo#yg z_j|g^Bm{*G`sTYS)89@1eqnPVS}%c*#aco^Z=(@j=q1$kW-nt3R(?Y-mr`TkB34*a z1aE(2ngB2M7OHTS4n=rzZ^8LUZ=t*#v%_irYN}H4{hQoM-|4%Yb{Fm>nBQ&>L*IS+D}y7RoV=D z`w6AGNN^KFQ;vcz{e`*R-Cv0RdVis~HT^xMZ)gb71BAjv`DX{X$~1)q1B4ZB86eo6 z7~m<`ZJ@v!HBc19@-a{_P&7O;i-GS33cL7mpeSfnMQw+u!X$9uh=N>IR2n-p>fQOX zYJ9=W=d%ayFm@Zrhoc#p#<7I|I6KYw2BAM@fqk&i4%22Jzss;~hB2@C&%$*?-!3uU zsFoRq=`T+XO8ewsC)+7_CCfOEoCfPm<30ES@}o1+s(yjjW*WQTNz_#{jqPJj^YVPO z#22h3F`ZZ7D$0m&Y5ol7XBy+;bOtJ(LimTB4#I;8X=R2KX%xDYI1w3bze3k+<8UON zmTe4gTO-^8aT`XCI5}t^XSdkSXhQO1gy=8eJD>=H?b*f_qy~;<8>fe!6~&M}u0d5S zXgdf0on<_YvOblAHLrzZImTfa>r9$$%qG7$OJ^Hz6EoHIImQ8`+}Y1z48_rUuJfKn z#z)O$53E~ed>fOvLbUx+9~d9T-@m1E_97Skme2Is?x14WpbkQFVSGC{X za^`>Jsp`8<4+#{pCtP%*h3|#LQh~EvOImF*a^06~62LB-dEzYEZ2VC;brXLzws-D4 zXEOKv}N;CIB{0IL!uhjIM^@LQwyBm4luoCZ|;K^ z`Cld@9u=PNOnJ%_O*$6l@#4qz;;09`GP?!*n2T(;aVYDlJV<@o6hSlRL*CP-&a`m8 z^Q)ZZ2SoZmfTD#bU6z?t)$X`+#jY0`_PZg{+C9`t(IbZ+R^Gr54cbm>7W`4R?| zH7%37cVV_~w5&n)6sgE8vhYuld7R2zS%{5}x83%Q^TmIg!U&#`pZtoc9r+s8y<(~e zJs`?U{FWV2&bA+B|HssX9B_W{A5(Wi56p$CS51X9XQ6Y-Yo;qk)IX%ZWjcu&&S%~> zJx$3G*qds)m&4=JO#dcFVP2YPMDP(Ys-bc4QO$P5c_Gadt&nPG;B-?Q!!n)bnC|0c zGUk{*jVJ=tqgrRsj4Gc0{-C>2 zZS`=ir{SW*l;WulwlS|xuUt_bxc@!Vz(}pGxGbw7aT4k}jUVUY=CbBJ(+Kp7=fc%R zrY%_M(#59x`D0Ll={0iHIi>tudgyyoAA}iqeZ6eG(Xq5c)jUq5_+5~I*waKA|HN;?U*y7*tF3^PtA4iEj6`> z#+B^ZuTA}+)=7=6jp{q&;&GLR@-;Xe$Y1<_7l{SK-QSo-I-TE`T1jY&aO6AF=KoBG`)ZW3dA2W^>kg&0W%Jn*7EXw4x478l|%LS zc)YG~5Q_~p#9?>C7$esfU(9M3dUS>%-?L%BK)X{(7Y^Jp>MV6NwHX2@`EWPhJGzOOKzAt z5cv6~DJ+Ipof)))k+L`zXRsBBbB)T}DDypp&3)dSMC7@1@vnLAcJrOY1Quc*NsRC? zF(;Y%=|@$DU}EkHTZlQrIf9yhdXVHgyNxzWq(kZZ*f+<;@kJ{dT5?yypr#q0kEgA~ZzNVt z(XMQ@>5hq=o22rPRW()VP|nMn9Y{x+|NEFJ_^%dn?m@dl;JDDvk4Pb{{SD~`vS%1EF@2hxH3_YNW!nZ_VW z3_Px=@>eB@?V1=8QSwp}XjBPTQ6k-fy@sP`)jO$?|T8O}&?3M$HQT8gvq=i?I2yNGbC znG}a%l}?5u5^mNY!XYURqc9x|l~P=AfDwu|n8Q=Knq{nVkV`Ed<-8#(!z_AF;JX@p z5Yd~|rJ}?@JQo}n=z2_YX+Zd~{Qf9nJFiut6RDKq1Nk9hf|NePEUKpBThU3xkV3dM zmI=@a4T4iYw?c9l!!D)502YXBM8XKMR-iyYkdljpJ+KeSL9@VuSSW?e;UaO_xn07CKJ?n-a33g8H4Y85U_(T{ z8fU}G2L*^1(zVLY=0>7vBav20t{#Xqw4R1o_`}r$(L|CED@Ec`bMM|q(qv82ZoFL+ zX%5$(?N#2U=&qoY9_hruY{g~_L}S8NTm!g`1gbZ0N)un^5-2EmPypZe(5>nxUCP^q zMtsE-0|gh;YoMqnzISI6(nIxHbNCaQxL$H5(!L)KvQM$o?x^MrVWvKM_SB$Q(=STT zYtgUGhOkEIrP!DW8w^hR8I5p62Ox zJ5THN1T7>mzzhSfp~B2Ag^d;p3*-v(vIh5{iVBmF<)15q?}U1k;jSb`yL~FjW#{W* zwCGemu4|odl;%qEx{D?cz>zgjjHcYg?{}%dueGRhToAW!{_26tkbkb%-Eefl-mM~i zZNd|Foa*jxB16o0T0eAI1XrND8*)$Gryq{-W7z-tQ&ByJy#ZS|6-N$k+1MiWEStYk zp)#~=zFj3YVZCO|34umeyG``8o7dcM#>>!gKIR4+XGL@6Eo8T*;2?o1wo9rQT~5`n z*0Y|r5CaI;t7r=`@4gUcQ59X`V*D-iol6UGKF7W)t9{~ZgA8#YYFh5EM%PTXQlH8s z1Fu-BnkUN6;f=-Hxq!qoj$eiKM;Vi(Ji-SD9=<@$yIqDH&O)GhrsUZ=W!-TQ&a}-< zIFsP~{LVxdZLCO=ltxnH@Qwj$H}#;^TqB_=Ql*5$ce+aeZ6vpc4zgvg(1us8NPFlC z>_J}hn6Nc2K8}|tIQK7n?W{2~OLdPtK6ZvCh_%&+VvTNmkV?@L)F|7y?HI)VV<(cw z`x8!qUSmNbJ*D^kYQ66t)%!k*k28J}&MI839a0So^+5wCxezo%neRRsREl08f5V5` zSs#+d8B9Wv(7|}Mw*h6ahosO9t}t6~!(^T+DN-HQ+HUDVFYy#jtcIrneaJ67#o6~1 zPjS3E$f)zkS;lJW$g&>93A-d*O{xS_tv+A1 zR}&Nwd($p-fQz`esL2ZaU5oHUT1LfkDor?^)fAZ19NPgMY1>SfT&Oy{1dXQPDG38I zwwrXR419Bus%dbK)7&DkmZV5`*adDifw!IJ=+>3QRRMz-3tSGmKE?{%-LS=JZicUo zA9kAmu+dWs;Je-Cj+i>lUzp1%|FQck^Gk#l&U5zKW0oYE3C{i%=67ja2@i3o2lRDx zw4K#+r)7pYy>ka)gO|2`{F|_u~~OJ5%J*WSO&BPkE+97Q##K zDDh$WA`D>Q=SgrgidWwDp7VGg`9etealR7580ptstJov>4T(R(sS$Dua@xu6mRq)^ z<-bFR*X1f6g|faOe@6qv7M5K`3&stqGyj$UL-%Gm|MiyK317_1g1K+Y{pg-7IPkVS z7`KF@-jO>uUCZMeIAWUlO0yL%dhuk{!7Lc_j@%wmX1*i$=Ud6|$UQKTQsocH66g9< zd9etf-kUBjC)IEzUG7A$E^xM;Bv0T=O2~g#ZjSNukKdJnta08qMZSyBoJ=T~Di5HJ zOgKJO9!Te9I$LJSkC3pXeC`#tclY8Q0Z5}Fm z12mg2kJXuo@lITPW3ZJtXU~^kHYH!?D`uQ&dZNp&4H0|ObkPyIEosND?v=E47Uf$>O~EVO`%@Vf10f7RsE;Y zs$SQB;ts&gnQ*OGj%n((Ngj+9vhYoE43=~#k(<%qXTtCjc?jR&ca+G9bY3=WEs=kZ zD(4-?YK`Dt6~3}*z`l%~q`j~mpC*B;yWPQnpH`-v=;4E+v6_4FWyaH;l%eD>t zI20afh{KAeVnHKjqv@H4#l)G>>1^|<+`{Ssm|)bWa+nvu2rqpqCrO9_H$Rozz(bql zAlUb*9MslR2%{gVg0ZcfGvg9^Ga(>*nEu?Fe_4;xuO)=^DrJH)Dx<2xjk*ljw<3*s=!|e6bXM;^`lyVB0Gv%4wT8Aq9?K zkekfC#%%I50WbsU$C|)fdu1D*=bO1#P6{p%8GKekmRnZC#1K4YQA?QxPVbdlTl8!d zk1<|5fK@)WSGK?%`!GkR=$o@*pPbl2XReCZJ5>dx&ia^(GfkW_GD4>)76-u<@?+3u zIE#gSzsm_>e~6l!)!H2#Q^qoNJ78CZ{2JYr1O4{P6S3>B+b=&BTQ#2}1gXD>)QE@} z3#}CoX^`}_JdsD#^1sHxYFCc)=+`oCq9I`P0eQYf*RC${oqY?w<)nhubt2_*BB}f} z9Oya@#wS8`jR3ihdkIBV!q}TQ)#QIGSL>0%7VzG8a$eFICodkNW^UtYQ>2OE{sQq( zB>px*P20z*rSRB6IW{R*pa-Z0B9#ywMJQd%%P!SH0)00uJt#jLv|MP3yPQZO6QU~R z*v>b_kqBH%aaiStSk!GZcpVl+k^yKlcC?vwqI4+aRLWuSW~Ch5bBBQNwG)=j^C^qh zWO-!GNBZ77dZR)TCu==nZ)$^o)abJtqJ`d@*HOE((f~2OoHyqxH=NaR2sG}|jjz{T(7aBg;%D)~{KK363#4$k?+g^4zGX&a9mM?vxtIX-OILXr|~S_KFFwghsFp+i^dZ}GK;z)svoWviITjd zY!Sc8Vf|5g@Zi#qu(TGLP1cQFdrHJDv`Tj#>Zi=}6zPLm0KJaM_gEaITn?*Rb_fz* zV=cjXOnx+=>T^MY2kBSyAbnT3uUfVT)Of&aH1GxvzUBdcsD<=x$K{R@iv(q+X6@!2 zxP4(wb9O^W8mct-bru>_?T*kJ)N&D_k9HOw=i>)DM=gJlCy;z+?ho>plwHc_4(V_C z@bpjUtDzfrY)VGTyAO1^zpN?H73i^nD12xTC+w!$=;iAHu?+->>p~ZWEQi z%B$cX|H0fvHFA9Lv}If{zKlS@vX*JqQDJ7yVc@s2x!sI|JUdX$UBFXr?wPnA$P-YX z)+;=ywce;Ra(h~O5HGN0kzjw58DYU0Idb$aQNoPn%lR+cZ~R1=S|y;t2(31ZQ)|3( zu8Eug%&EbgOx}KanLPemm>>>WMU`MZE8neGy)$H;m7R|i2wm&5*){&4_b(#i26nU= zK9!YvH%ZnP-e`OQ??Nm0M$3oA=j14Pxfp?hVB$GBEQT+wT*$QonO`A++T8L5q<6tt zjn$%_v-WVYxiMi*{vJ)wqoP;~DEk*<2}jFCtyJ+oi_r7Q%^Y%3!1W$-tz6S_)^N1Z zs#=^(E8tA6oFE_6u%JAF#e;1GHr|9S|fL3a2RgF(7N(Pzv3AOpxzR~PJD0k;?@}OW3Hxwgdg+~kzM-<}}Xkz59;KVRy z%83;sHut@_7*KROV=eS-b)n$QeWEmB?*&4JCYm30`m#Jg*4cX8J)NBZ2zM{|)GE$P z?~JvpGy&3t*0?``0wB;OKte+Key#rX`$3I>>%)|5O6pN3KM=f2OvriYp ztmI^ZH3rrE!QI3>8tUq<9<^~fR%(XiQ5gd3=4poXxoA1P`=+fDh7^2C0Cg@1oX~^C z$R|GFtOH=|6!~T#TAo(!v58=n;ViK$q z(-rlB5Rfc|Q#{XCq~-oZS}sHi&RNby;_vuijg~FfMkPK>TD_+xRtj_E{t${+%^&o}5?71jhgG!k zIv*atj+$8t(=eg6E1=}MoQM~|AHm0-d4;@+dQ%kg2R9AT;1c#vjf}7HL;oA->6MDo zXc%0AU4^iqEq2xe^?>U;v4|#o;_y*?H68}%*gm#^z~iy3rFW6dic(FgAqb&z;3kqjNX0q@Y#8 znDtgDnp?|agUbX+?^;F6_^1-&Yj%~(v<~f4dj$TE+Lza>eXGXJM^j?k>%xWt)U*ul z12MExG&zmTG%=j((@xF-J~X}>yidf#^x7QQ>|S2pj_)({lvo>529HZ@c>k?mag_$D zUy77RdF#->sT5DA#9!{SpbJ?m9(Hq=)8)qH0UU3JZX7kTK{V$pC^~~K&tpaw6udwn z>x161uVA2=h2cUn$H>M8dAxrdk<;L&kwpc2Rtac-h1igMKvqrc{?uh+1SNumY!uHOrgJrwG2~o3;!zweoyG4a~j#N*Hlq>v__?3N} z(=x-CO>vRlQ)cPhSN&LKVjUCBwDb)p*s49hsHc1Mw0(dEpP{F}1h9f&AHU^Vk(h40R-~w}to6c6k@blQW(T5n zrYE!DV4qoO&3ZAj1o@19TVP-ii|yg-%kZVCyVbot6dyn66w>3~=9(aOhp&`%>-|WX zxk2-#e5TL54Pu4~@)5KU(t>d?@R750gErmx2)cWNm~Mi6#HxhZ=yO4ojrH}Ks?ke1 zwZY@1cxYpvsN0~8DVfFGBKYDLm70&CQ{E}Q=5$Vq96lK%olBVGa=LuzWMGFwrz^;Z zPA*IcVgK@KFr=`o1aNGR@oFBFqNGGDZhf0)7cU(HcZaf3UL;Vwx^?hjD3b8eW@Ztm z+oUOTdDz}gN#49B*zr9ABay-)t&ZHa@+DtdH1~Xc>bnt}kH?s=Ij@KoN^xfpP7BVw4D%Q&v9~sXmnMTBp&#Wr(&uZFWFpOX@+9^0f#m zvPwMEtb)&Du|o@gi1pUFDgUhUCXcmnbi;g?FV^V9TzHd@eq1&|QR5_p_A9Bj>4X!~-}v`jr9QcsI` z3z75onkw|N?v50{ zTU5a4Wx(iQX%XQ}krf2LoR4cR%epf-6H``Lf+20f$tH!-R6yggzl`DK}=f~+p9vr z^h#Ix2vBeRS|c#^NOJ9GFacMeK|V45G?7k1PID>g`tSvJ` za69$@ZYMm|j>Xe!pJ*E0_aDW?9d|3NZ^!!3T^nJ?aCEy^dvss-Y~+M=87nt(_q9oc z%egsKFOx^w=*5jNzCF4R>F`2(Tqvz;&w3=x5=$sW%@Zk~Zwth)BK=tyVd+O&gsXK2 zb}ud5$zyH!7I6n=B}I_mfwd$%pbQgv&rU9qXwh)E*#TD|hj;Q8jS{ClMH8Ri$(JN8 zg7mdbttb(ug-YM*$e5ffAX8vQM>eAE$71UvSp8C@Hk1z6rd8tMD-meYLr^uJXab55 zei7_UbG%xXaEfx4oU9F|40By1s7y?(NH3B)28)|K6z(6Drg zmhIiRD4N(&5yF)}t_VKvj@`v)^>PZ%W1eqp83Qdm zw#da|~@8#m=2)!Vpfdq5O!;ED-q0jXVZkKpWoaE}0CpYXN% z&;1za+WIDFwKy}N$D?p%GJxgC1q+b8?Hbt5;%>vq+pr;Xvz>UELkhurs(TM%cF0uO zOY~YETv6F&KE`KG91p6h+Gf!u-Y8;Y9GPC*tdV$Z7)!eQsu0JlrV9+dtsoju z%@@x+#E`dtAJT|V)xQll$x@tu>fD`AGnhxv|Y1@*C@)p))ZmC-2&*6Q`7JsuOa1* zyVz0q`GTzPa2AOTEIl+__NCTQa0{&~-hNUxoFxQb7W-DN$^T1tc)V3xJxBfQeJ%!H zU80(_&8{1wkREl+_)=ppHs%(L;6CmBXvs6WFdH7=2Xz`Ae6T-GLLp6&@pMlIKKWjk z`8RLT>8Stu6n}@SvVt>|xTg}{T=N~=9*9o_stWHG7|CMB`0SI_@X~IlshXM=Ay*~-9q||qHBCGMFh*^Q2E3jw(NInzd2-gWlF+T z(b&Q2^u1go+;VfpuVvz|9$P5dtLgvqdsuh6dj$-5iuHkB_p;9L$`}?3_UBm$%)FPi z56t-hsq~=Sd&1rI^e6D}sC(^A@EQC@Dg~CKMYpYgnf?FyzMAFXwd{>8RdjgflO&JH4tjdc6NC6^%!M4=mRNt{Kl%f3+I* zA|h4kNLep7sFhI8osW7cClUf*^4I9eko*L0l;^$VpT?1wkj7IlBS!M`%mmFRuom^? zL5oO++a5s-KlZTYadulmfl!joOKn9B)mEmfZNL~*TjmE`ZNpq@YX@h?_?Sb&SpT|v zXRJ?+H;-k#>PagU)AR{M8;4qhd$H~fF_Pz@oxnFwuyzge^iCp__UMxhN(*hEzIys} zjL#D)M2)?>!^ws^xTNcVJ;l0{H0b{n`^H&W}%ZW5e?^cWEKbJXZ=}9Q+VK6BxQRVbu;@}|5U!?7$=bhgg(bQ`V&W3ZiPOA zEPjr)^oN9&8v_%bMN#6$`6H7IwI~3r9p}HeFj~<s5hZn8#?csFSDy{4OY5%U)k^ZcId$sNV|9iN5uxZfAwE@z7XroYQ(0h(5 z6%Zc{?$$Lpd?I%CYhsK{fz1I)tw11r`5fC>vOzS z+r5nf+yM!I)uF}!Xz^bb(K%UR^(!>04UpkDhaCwHGh{%ZU_?3UId4^&|pOfcV(P!lGx(^zmJ5FAeKvtT6yhnrv zxPKgr8&co%R{2JNcpKo_DWi&mjtWo|f(qAaE_BuFOx!VwYmOY4`v#k+`}(o)=G*LT zSn?)YI8a2E8>xAXM-LcaK%G|k08qa2Z{e-~vYvRXWaEEXl0|nD)spYvp5Azf%=#8f z^yRttEtc(qI8h2KaXo1=*;84jqPw8#SFj$xi_}y<&a3`9hgZ`b8?&XM*7U=_URuK? zgcefB@Gz= zjbyt3)gPcMe{>Qv%ldg4=scOl%KFI+@j&Y?L;J}rj(@XqO7XkLMizaE@ZO{c!&Itv)Cf?xice&QGyYosk7N5jOL+6!y9*19%40K;*wH+;D$G?N*;C*Qg@0VyN93?n!21#iJ2`f7nkA)_CynZbx5)+ z_|j3>3${66UxEIk1Ny9BFJiE0)e4rtCUbPF^)0xkGmCayX%`yoIdg*+UU5QfOI4rX z)HR$zj$Z6$(7IF80H78^iSd82qK<7OizQv4Jc90 z6u769CBcym*y0(#&MRgQ^Uno7Qq0EE-S5KoVwMt-A$E)`7(V7|)nhWb$F+?w5oJy; zVM7}I&R-b3SHhTd=-3X}JC+U$)m{_hZw^QD*W(Sg43IXmJIMjKd!vXNP1?vF!l%O< zS!|-XV;--i!7wk6E8uX9b2VO-$_KM$+>40jbC+!zlzoE+hex~I%{vtBcvLCtA|1mI zD;@g?$H)cVxil-A*Ss^`JQLPCk?(sxxs^Bg%W9qFYu9<5<6%ihe8H+{3u_UkeI0}E zg5g=k0KBEfc4In-&p_ti!e=0J$r2Zzdk*5LFhd9-S5D{W?vi1B8S6;!B%r4jwCr6C z<)k>87pI}%p<*wT+RK`-g}-rO?Owua-?i{3Y}PFaizlwV_$y1XVG1nI%v)eNZo&WObE?`mal}ox&-u!7%rY2(fR4!s`FB8+gbkfkoJ|HKc^KjBRGA9$esVdph#fy_95MM9G&SRSd z+cvRWa?poOm1bddO%|jbKrJ5j&HY_7u5@8s(VCu)_@Hdb(d5kM?wi_NL#g&bsnLzB zd z#vqqOE6SN-P-&}Sob$$@RT-N6nWDGr{pW%Y$|W&mcb4;}a6WoZ_{|5UMjzX73KvzZ z^U1B7EO^kI$uRo}*5aynE>dJSjErSm!o%@Hj#vj z&)Czn|Jx_jp;-;?EaIo3baBNHtaV(e6qgB$M`HN-Tn)Rc$1*Y3>2Dep@dx*b1rf%_ zg%Lli?sLN8z;V7m<9ooO)~BfN0gI&I>B3RbUzI63t~o07EFKtGeHq%EWpDAhc-dKY zB4&f=L@~BW{Kc-o$bbmGleG(XkoIK4l5;HL>7NBcl#b9eAl!wJHjQ_`06il-Ak3AK zB{G`m8DRlUTp5dfGMWVN>q-Q#4bz}`EsKaL69_?i$&dj4vZp}UI}Ju5!qbO+5P}25 zjYVAAQ$86%;yWgy21T@m$q8oUgMU1#25M0$UYZv-(3RC%2&E`~zZ3!O_t^EmJNF%Od zjei)6IrK-~q_tj!$nO!R^6Ac*hU=+pA#xHFgB?W?g5^D2~Ac9T+>? zc^&t;S2(X<$5km===+T)dY4}fj zjX|qJM|i=cwAU*#5FV72$Nf|U4ogaNMGrL8ulx+7;-~UG6#Z3rKYSK9WDy0Ao0Vqn zV299eM<_Nc4@%|l?|=!i(h@q!N-&pnpsaM@`|~f!N+N%rFDuU|y7p1?3R5~`W&1Ft zg3#qzToKWbU{S*P16POh35&7{n*#y^lw?{cfKA}u0A&L1%Dxe-bb<>3%I45DqCJiL zsy8!Um_ThGI=2NXPZ9476J|-a521Uo!oS;tg~wsiJ5=cip*F?ojjGWoaei-8EPiN| z!0#c-Ag%Bu+~nUHs;HRU3{_qy(;UanN04cd(?ltvyMKd0VakUz{W6>nQzFS?u!JjT z=-OZ5O1QF6KJ+U$>>h9xOiJ=@H6cy1E7`B9wgkYYn^@sXR{M z4D5?klE?+P5~)1Fd%~kpN*qtqqLhE|^l+3SdI*hHt~L2mXh(~<@TwVYUqMKWQtgw0 zH=Lk)zH%C4QPKQj7uQlT0#ci!E$*AwLYYGMWxbU$Ec5F z=Sz0wb3*nxQ{t5e3El{u-BM{I?-5uQ*zp2-czd79J99N|>{GDn+P&bNB>p)ttFzNyk z;$S;&5aD;y;V{>Ow!#EW`JVRJ_TM;j+bhA07A=Gix+$O1+I;5=-IZNNavnPOR-VU} zd9Sw;L4Jpgy_FZpZxG){*+?!sEBm0~;^VM>${11ytNJNRF<5bTf8}ZA0+$7axC~qS zD+zd+`j7pUr6GR^rSR3RI9rIfkk22WyoFqv4peqxT=4KfLIg&ordDT%?_-RgLYI^I8OyPgHkLCVYY zMi#WYO=*Mj-+LRj6e)K;F<40?q|P~Gh=M`7b1-M9@&LV>1*eB9G2|yO-LCu>1B>am zWA`CHLe?G1o-lV!D8BDc+E(1e+HW*Osz^p$ZK zN-;fe)8Ked)=0b>#;lg%#cOz@4uWCJT}mfj{LEcSM5?Peegz1z@Y+RA$(AM}JZ5oC zuvXTrR->7@;QWp>yxv2U!6-wzj?UdUS0TK1&ke^T=`P|Zhi#IMUPi_R3V!&9Q=bGm z!ne@6bRk)!VSCploq%X?+c?`4 z=rlr!XxBKt#$UtdVo!mISisF+%cvDnR3QJUuw(?b=P$5zgp$%O)29-c&+Evsba;+i zylK$lZZ!U>kaD-u6GK%K?pAn!p!9C#iSR5hDtNPviac$Z&}pPHA@GLY?i_R(){Im- zVBa`AQfZ0Fjgd;zgsU1tB3>b8Hz(5Fc;gukT6jgj&9`WuQA$+nD;znRcLTJZAe;Uu z^k)ySn|M*%On76I(hp}|=P2xQ7!Vw##ByuDK1zug;E!97hz9y_6EblwDA6t&uV|9l zX2E^;U|+9;UH2&OV+EeMSGlW+_oodAUV$vzX27TS;uM$zzu&7QGofO1!l3MKB@%AG zPYDU1?N?vp??bVt!Rq^zLASX(mYHAArd!B4E|yh$!1{|Uo2v!Wyv&B1(_~1#AKNP( z?zmt1gnygi0VTzUF;1PFHa65l4=DGdw5uLalAF4u)wyVGIUQ;rP;P6`%v$L?9>j@c zs`HBnm2iR={2Y5oX@{z@{sX7a^DyEcIMYvux_>CQ+vbQ`8?c%90U+c%ax{+Kr{T@f zO03PHXW}Ozw9KOqD{Y{Bv=Y$FmE|hOF~y~P=n_na-$pBa>GYW}c0C4F?tB<+^E6C; zSZUqEi=Cz=SpU;-?;}c2TW_Kv2AlOCGo^kytmdY12!z!%oVJdWLM5eIN@EU#*YQu)nnge>&d*jJCyHbD zjN&9eaZg)^LX*c!>mOA0>3DdEWz|{Iz{X~-#Z6Apla!eynI3EwdaxZG$&$J^u>5VK zTW+wrx+IEJmkiYyM5{z2#ZKjKo&38?>ia(x4|YrOMs*gcovm~X6t|~cZiL!ZblweT zRw)z?4OKoNrJj9e{8sG@tVLPb(iedZUjz{k(qIc$=rNBJ4NqU>kzxat^+jx7l*epZ zJOX^)BPF5O3m%mIUA0$wG(?fXNnYadmts;)jek&<7lC0l&G1U5(0T!bE;R;UBZVKw z?&_NFh!@pNyeVo^e+;zJsfv$|k&IWBYT`7+=Hf_1Z0517tfIhN>5etp!`ilJoQ^nXC}fhRJxK;P^*aLOQ{%| zLHW{r?Q%MsFIkXi3#3Fu7p4N~MEujD%EBs}z%HBa>07aIw$K1mZs3SGNFn%QCP|T6 z5f=9;l;T91U#N!5E9=w!g;J)V8z;j7AWfVs^%Ci%$%qz_Zka6QinM8wWEE+TBB@e$ zu8vL?NtyCbbxOS08biN~-iHLarbsvd=r8g|D*2coFTdI#{jo}pF2?JLFI=UxVpQVT zRjMhLhV!@n5`(_95-EzJN~Bi&;{EhwUUxq!ifV*t<+TP){vs|3`i2MT?Mp%5_8>i5 z(Dyw^-zMlM9;AOG=ocTP$CiP9<3W0^pf4BSbxYBS{`1%Kg)(UeJ}5wsO_ho|-S=6y zauF6bPy1R^kgpuYt$z89zL~1-eELjNc0Rt`X_BPX{p&OpPnSCCzC2AErehjyq$AU% zQ7wKK1}sh}jWMLn-9jB^VC~vS17}DN;S9}HGo-M{O~Ss?Ic8wHmN;eD0FMCB0ADH_ zH_@9jq;0_m!~plu!2Hs1&L^JZyjJI%Ia8XY!y}mAW=m1H;TJjwZfgsr&Ve;=rg?J^ z(rl)G%#mD30?Vb$`V%|bZWr1N;o{~;!{MDkaDu0C3+*YFhU00AwnFL~u}7KgIJHyR z%2(BxQ$AlD0;R+TG!H_QQg|^_NC92?r60&)OWr# z2tSrtIbS+he`+J9j95$XPdPR7()MP-RQQxM0z2F{pOPN`|Ic=$)CJNS-R3p)(E=$( zdysxzAlZ>5ER+T!@AQSzNbPHMcA;cNV|0t8;lb)Dk$=-i6BbFm{uje{U=da$-5T|& zY^b5L(mnOhYJU>PKc)qcb~_$!MN~@d#lez&D$#8R*Q0Idn@TA{95$(2f|X<+ znU_et`0Jt*)6|nE1J(}B4W^Y#q#)<7%8`-*_(@3G&3dq@|M zqz`cCy2WxtMklHJa_MfTQ=)$L+dA|Wmd6thP)_2Su1fT zm{QO=h4n1>8y4SJ+?ubqkYGBb^{h}9G)@sX=y*+z|e1! z;u~%xVUvaX3_UkV9dy`AW^IwmwX*+)9Nvp~hkkelVd5sr--_viAE|A{7Iz!n*$Sh2 zn<8rv`EI8tYv8x$(X1M28i?0xq)`wVR4Xk+a=un-uRY_tQHus@&(p?j(hBXz)Oowq z9f^CpGzG+uwo7C1QJ$n7(&n~bs}8iCRy^D{7W?j-on!1-qI(5AE*~!M{lEW?7F_Wh23}+CEP~m#NU>h(_^=#kilyp znwFhCxva3XA$QRTwf1R+Gtx>*yrq@E#VFOG$Y7*;;GsxcBNeT4AQe_Jg7)8*g7L=7 z$=g!2ew{``7j8@DP7h6<U9UTe3YIL$p$LBBSkxwKv3yL zq(c8(q!QA86I_M4UeDipVk77yi*k!y9lvg%cXFnxb1!f)7_T7}ZGIc681b7!i8W*4 zta+9?Xqdc-&Dd9g-#=+ohIp{I)a7xNx{SVd&Doo}u6}D9@tDf@7x$NIQ|{if^N zFs%La3QE1jd7kl;T&39)yv4sjxqq7A`z;!;82j-UEzldAh=Xcdunt-$oovCPBfCRV ztU1E^dH`-L*^{&_S#XnHAa|tiTd=mcWzK^CmL>JRENSFz$vO<~3-V)LZ?Q7QYDG2u zKoiz1G(B`*wshba{l97N@0X$4mJFXAZOKyUs8x=k6Gm3a2RAA$gPsUv5!xYC7RV~d zV`L#2jhivdUr@dB;rHPq?!!j{?>D(HCoi|G*d>-J4gD6#+S7y}*2O#;%qMX9dwLAu zCmZ2o0cSSC$I_u&($QwYnB%PKHxnu48!RJ6PpshIc+k&0$i*Qd`H&`TjKR+~qkhOiF3CZaTd z%R?p^H4LIrNJY#3zZRE_Raa6sIYaR|<9zalGW$rs|L`HVQ1}*7Q4zn7DS#&bkW2zx z*a)8tI2E$~nH5r~uKiEY)lf#-BHxl$>S%xEQ76 zfiC_4YD(_IOYg(W?!%`x#(llourQr(TLfFzO!vc7>fV73i`+EJh?g(b!4*9u>|rBv z-JOcgrsJ_JoWAV9n$p`HSdyfjZPdg=Ads{j*(hTc&?KOprx`VEkWye*7EGHvvKF+Y zBeNQhgKq*o75wmeei+G}Sdicc(-$3CD~bZj66P2+4oHldM%_EH$N3iEalmIICxV@B zER@c6VvG)TV)0=&!0ZNQ6_~;Sl#~{iWtYZK%*zmi1f!@})}B9Fu8M6JVrm)7V_9pO z8Oyq}m%wx)?`zZONGuy;jH)nd%)mc`a0F7S?ShuS_dGMu;Lgm>7J{D)`tQ?dWoK5% zb#sjx3-DIcjhePqu79P*Yu}{ZOtghT3L>GLEO z8(0l_5i&+kIj|7MJColr$;`j-6wVO z9kQ^o39;!1RHy$}pk3i$K9In?1o*j0ISc-VB}yjQl*z zm%PH<7|j9DMflhQsaPb-3iC>15X+Z&5&hNE)R0-Fehr$aZ=rWu>5L+8j5_ZyCk_~U zC~;|tcS@PJFxzW9sIIn?Tt%7~zD#Pee4O zWkm&E=u?=$JqM{b_`2B#eUH1?4|4eUQ>s_+A{7hPB&4GD2zka7vRK`QQ#8MjwP(jb z7s2w`Q@*{0Y-T{*=~DwcCyK1F*|G?x6_rr zpZ5P(#z%p_lLPUcjVU)|C-uH88}aFlA(v$rUIyKNSssAze_Z_ooaFDpc~#9Z=X>Pv zsr0u%r;N+;Q0n>vsQB@}D5vxXNWZ2^9~Si2>HQy2<{>iwh%yhWoPYiZ&Jh83r+Yuj zE%8>nQlp1|0{xf*2cfo}6tgASX~}Wtcunr~zA(iaQ(gqk1zWv6fYRs z(B1^O1sSf$t#PkGQB`^c8QvC6?@q_Apvq_H+!eV@i+2%3FICi`-S3J&nAu^lVP`$_J|>@`T`cVm#)gGIR8WGfNs|yex7<=ljmwbpd;7h z8M+Vg?tz}Sr|~!CK4kh9wOlz$?nW1`%Mo}xd&;kJ0gb*cxRMPVx>3(En-oUy9TRa}CCmXjX+>V@Nv)h*b6Z)-=^$c-ZQcPytxv<#17K_X7 zO8=S7ChZGyTT~&E%Kw!6>3?CFR69s+OJDwpFAZK%Gt&6G&{#)P?#iR_eDBO%xtIPL z8{QxoP3iYw9@lByJ$bQogU#2XagG#aTC>qQr1^cT{i@q1gn;31l(kEwX|i6N(-hdljRnWwa^VM57ht8=F#e( z5!c7*cov>MF4OT!{VnzaUF{^drbInot-Gxl%t759MzaI>blsnf_8WO3b!@@|b$1!{ z8e)i|kxjT!caPD457Ja z`LV|ZHs6q@@}6nRTkD=O(7s(5?(w`WHEjk}3k;U21?jrh-tJs%$>;ssZ{1++SRmN<~jN` zcoSuEIe&_%z&oRx0~V5D#RvhFV43Vxys3STfZO=T@qlkJWQ&FqA#3 zR^meeKc{932?4x~5~9%Ftv;-C)iH>p_AO&F6H7)ZM)HH_D4cdJruT7$GlWsec?UeRZ3 z@wqOg5PKVt_NnaY0^Uzc+wh%mg$g@A9Hf7$?A-!>nT~|>?eK>Rds75Rud3{e0`}1_ z5uEUhKw%$l3(`TAeOJJ*;e18D27XXs|2q<-Ln=EW3h-gkL)CDG3j4Mo9aY&qqX8eI zjA;He4gyoyF)<*$p|C@&$rhIhUft!g*-|_fZ~B{t^^`c0x2^8XBWQOF%;|)ht6w|h zI;j@A05CgcSfdQ4*+hZ+*f1Jm!FYtXhtz2`N49|95;;t?y*)R=@tyC0@qm@IpoLpl z8yeCTS!^93c1F!oF5q`mB}WDPuEWS! zt+&H@5M6A?IL&Isi)mdK$bX_%=3~I@f?=y_-B#7Q|B~Mn#%(mcE9C#Blpkcu@h0au zvT-BaGu>Hk){EV3;(P(~bo91d6MiHmV4?4qhX zvKwH0*uEQIt^HiEAAyHetlAk5&X>wmS9|@5&A5}L^!j^(bxAF(RRZ9zL>3c`PQXC@ zS4^B$cs8KuG9`ljjaossEyv_?dTc3XTejN^d-+zZoK8BF$cMw>D)J8}LH@E@gGvE^ zPfsWD9m3(7P`4jd&OsA6KZzNaL@|L_E%+hUoLZRqIPK4BIor&T_(hfeM!;9ZBrs8p z54${*g+BqmDij8#*t||R;xvoPmXcy|jjXaJDy2H~h ztk3XrcgQS~so)?>6pJzwGijY}u}rJQ^ghu87E~#8C`-1&jZ{~M5j~M}iA;e>@K4Y5 zgxpg4M^B!Q7la~uVVWcY(xuJ@+X6m9Zt79+2OJ~ zvMqLp)dX)E(2r;8Hpz7K0xPDE`$2fKOy@smBdF&?K(@$a9wd*&S!w9UXMkiHTme>_ zX{%bx;prHb8WpYJ7`-(B@J^bNfjBC9AmA6tJdmH(?($U);j)&RJPO)w`eH0kra=PUqrkyd zr_*b?7AO{*e9v zHkr{zLns{{#yh|%UK+;FORvd$6x+Abl!W^Ok07dhi6sTQUEUOXj@_Q)bf(x`4qN)` z=ywG9v|UTw_%xAEi4h)0Ad> z1oavR!S`v%I6g;rPWA`W3D^!Mj^`fT2bky2p+nyt4@3M=rgk%!okFuU-ua=WbQpUM5{ikpYgVK+~LoBP?#%k*E!IW%v*p*wBO=JEP3 zF|++5E$K!!kJMknoKplcJiI+z+!PNV1n+j(gNG94LtBHJu{)U_?%4|(XCh?ZEFrT-9gW8(U`@k=KA(EREUBK;l z^LA7L6#ap95|wRDM`t1?daZy*=x;TuRTuqj+>SWc(-2M0N!Wti!GbIHylz{H)9d!w zv%PRTUQEYLoPL|5k~xLf%GyPtIr%Fw&ES=-#>fCE8zvj>;?Jz3^@s>RVUH zAJ)&q`T%+u4V}zu^z->a70aB8T}(s~V!Eg3A4PnregR+EzzHPJ6rQVJ$Tv2SjP&ai zUZP*bm#L)r#W0J-s?IP9Ea98siuRV^cS%dAt^_V-Da|Y8?&iz*c(I8~A#*OACaTqh z0?K%remVcA+SyrUe6xN9c4dF{bL>=D)Jnd*LHShODo!zDaib?`8rF?lQ_%%g{G?hy z;xxWjznc3Ru$GiHnRlVY={!%r#!rVD109~u*X!5v*Bgn>o&nN2v|X`0l*P$8lTXyI z=lJ2WFh*pQ=(HeJ^Zx4Kt^5kEKW~=U6!N}my_I^^&f-zn6ds$!2Vg(QX2U+7rh&8Z zN$pLvXg22GW_ouvyx$gTIfwVgUN2(~BAl)C;vAj;4QFKV+;8@c&M!lG3NV38%p4uj#Y{UXc1Jrgn)c? zC5HaTMZ6vMY2d_A!eT@uFH`Tuyj1^+U*PSKVYq|SZ5amX4VtnHtJa%zbQvG6KfxarcTM7`&vM>g zf07SYv6aht2mL8O_PM}L^O5TPm4p>oBj4hWtJuO7JVE!iGE#l$`U-U58BXubl#6Nl zO5B@xhpJZcNxFAAU79L;$+HS|dyl5Bf|;D9gR8g|KIZ3DXvaB9sN%hK=dpKPV!)3z zsv!6QX; bool { - match (self, event) { - (Self::Upgraded, Self::Event::Upgraded) => true, - } - } } } @@ -652,7 +622,7 @@ pub mod prelude { }, config::{ConfigurationEvent, ConfigurationEventSet}, domain::{DomainEvent, DomainEventSet, DomainOwnerChanged}, - executor::{ExecutorEvent, ExecutorFilter}, + executor::{ExecutorEvent, ExecutorEventSet}, peer::{PeerEvent, PeerEventSet}, permission::PermissionTokenSchemaUpdateEvent, role::{PermissionRemoved, RoleEvent, RoleEventSet}, diff --git a/data_model/src/events/data/filters.rs b/data_model/src/events/data/filters.rs index 648021d30dd..8fda8ab4491 100644 --- a/data_model/src/events/data/filters.rs +++ b/data_model/src/events/data/filters.rs @@ -47,9 +47,13 @@ pub mod model { Trigger(TriggerEventFilter), /// Matches [`RoleEvent`]s Role(RoleEventFilter), - // We didn't have filters for these events before the refactor. Should we? - // Configuration(ConfigurationEventFilter), - // Executor(ExecutorEventFilter), + /// Matches [`PermissionTokenSchemaUpdateEvent`]s + // nothing to filter for, really + PermissionTokenSchemaUpdate, + /// Matches [`ConfigurationEvent`]s + Configuration(ConfigurationEventFilter), + /// Matches [`ExecutorEvent`]s + Executor(ExecutorEventFilter), } /// An event filter for [`PeerEvent`]s @@ -205,6 +209,49 @@ pub mod model { /// Matches only event from this set pub(super) event_set: RoleEventSet, } + + /// An event filter for [`ConfigurationEvent`]s + #[derive( + Debug, + Clone, + PartialEq, + Eq, + PartialOrd, + Ord, + Getters, + Decode, + Encode, + Deserialize, + Serialize, + IntoSchema, + )] + pub struct ConfigurationEventFilter { + /// If specified matches only events originating from this configuration + pub(super) id_matcher: Option, + /// Matches only event from this set + pub(super) event_set: ConfigurationEventSet, + } + + /// An event filter for [`ExecutorEvent`]. + #[derive( + Debug, + Clone, + PartialEq, + Eq, + PartialOrd, + Ord, + Getters, + Decode, + Encode, + Deserialize, + Serialize, + IntoSchema, + )] + pub struct ExecutorEventFilter { + // executor is a global entity, so no id here + /// Matches only event from this set + pub(super) event_set: ExecutorEventSet, + } } impl PeerEventFilter { @@ -536,6 +583,87 @@ impl super::EventFilter for RoleEventFilter { } } +impl ConfigurationEventFilter { + /// Creates a new [`ConfigurationEventFilter`] accepting all [`ConfigurationEvent`]s. + pub const fn new() -> Self { + Self { + id_matcher: None, + event_set: ConfigurationEventSet::all(), + } + } + + /// Modifies a [`ConfigurationEventFilter`] to accept only [`ConfigurationEvent`]s originating from ids matching `id_matcher`. + pub fn only_from(mut self, id_matcher: ParameterId) -> Self { + self.id_matcher = Some(id_matcher); + self + } + + /// Modifies a [`ConfigurationEventFilter`] to accept only [`ConfigurationEvent`]s of types matching `event_set`. + pub const fn only_events(mut self, event_set: ConfigurationEventSet) -> Self { + self.event_set = event_set; + self + } +} + +impl Default for ConfigurationEventFilter { + fn default() -> Self { + Self::new() + } +} + +#[cfg(feature = "transparent_api")] +impl super::EventFilter for ConfigurationEventFilter { + type Event = super::ConfigurationEvent; + + fn matches(&self, event: &Self::Event) -> bool { + if let Some(id_matcher) = &self.id_matcher { + if id_matcher != event.origin_id() { + return false; + } + } + + if !self.event_set.matches(event) { + return false; + } + + true + } +} + +impl ExecutorEventFilter { + /// Creates a new [`ExecutorEventFilter`] accepting all [`ExecutorEvent`]s. + pub const fn new() -> Self { + Self { + event_set: ExecutorEventSet::all(), + } + } + + /// Modifies a [`ExecutorEventFilter`] to accept only [`ExecutorEvent`]s of types matching `event_set`. + pub const fn only_events(mut self, event_set: ExecutorEventSet) -> Self { + self.event_set = event_set; + self + } +} + +impl Default for ExecutorEventFilter { + fn default() -> Self { + Self::new() + } +} + +#[cfg(feature = "transparent_api")] +impl super::EventFilter for ExecutorEventFilter { + type Event = super::ExecutorEvent; + + fn matches(&self, event: &Self::Event) -> bool { + if !self.event_set.matches(event) { + return false; + } + + true + } +} + #[cfg(feature = "transparent_api")] impl EventFilter for DataEventFilter { type Event = DataEvent; @@ -566,9 +694,13 @@ impl EventFilter for DataEventFilter { (DataEvent::Role(event), Role(filter)) => filter.matches(event), (DataEvent::Role(_), _) => false, - // no corresponding filters to those yet + (DataEvent::PermissionToken(_), PermissionTokenSchemaUpdate) => true, (DataEvent::PermissionToken(_), _) => false, + + (DataEvent::Configuration(event), Configuration(filter)) => filter.matches(event), (DataEvent::Configuration(_), _) => false, + + (DataEvent::Executor(event), Executor(filter)) => filter.matches(event), (DataEvent::Executor(_), _) => false, } } diff --git a/docs/source/references/schema.json b/docs/source/references/schema.json index 461068bdc09..1ab29751361 100644 --- a/docs/source/references/schema.json +++ b/docs/source/references/schema.json @@ -652,6 +652,19 @@ } ] }, + "ConfigurationEventFilter": { + "Struct": [ + { + "name": "id_matcher", + "type": "Option" + }, + { + "name": "event_set", + "type": "ConfigurationEventSet" + } + ] + }, + "ConfigurationEventSet": "u32", "Container": { "Enum": [ { @@ -760,6 +773,20 @@ "tag": "Role", "discriminant": 7, "type": "RoleEventFilter" + }, + { + "tag": "PermissionTokenSchemaUpdate", + "discriminant": 8 + }, + { + "tag": "Configuration", + "discriminant": 9, + "type": "ConfigurationEventFilter" + }, + { + "tag": "Executor", + "discriminant": 10, + "type": "ExecutorEventFilter" } ] }, @@ -1008,6 +1035,15 @@ } ] }, + "ExecutorEventFilter": { + "Struct": [ + { + "name": "event_set", + "type": "ExecutorEventSet" + } + ] + }, + "ExecutorEventSet": "u32", "ExecutorMode": { "Enum": [ { @@ -2322,6 +2358,9 @@ "Option>": { "Option": "NonZero" }, + "Option": { + "Option": "ParameterId" + }, "Option": { "Option": "PeerId" },