From d68cd903e86ec2a00e16f924bec5dfeaa4362447 Mon Sep 17 00:00:00 2001 From: Good Guy Date: Thu, 20 Jun 2024 20:00:10 -0600 Subject: [PATCH] Credit Andrea - add ChromaKey Avid and modify ChromaKey HSV accordingly --- images/chroma_key_avid.png | Bin 0 -> 54984 bytes parts/Plugins.tex | 97 +++++++++++++++++++++++++++---------- parts/Rendering.tex | 6 +-- 3 files changed, 73 insertions(+), 30 deletions(-) create mode 100644 images/chroma_key_avid.png diff --git a/images/chroma_key_avid.png b/images/chroma_key_avid.png new file mode 100644 index 0000000000000000000000000000000000000000..b1001b1bcc9eddc63cf9a89c238f9f34f73b227a GIT binary patch literal 54984 zcmce;bx>qqvn>csU>xHRtWE{(gpyEX3a?$EfqHSX@#I26{n!xX>oyA$`lx%b7) zo0$2dVpkML_Q{>OGS}L92v?93hljy|0RaJlmy{4u0s;9#2K?AVK>&YgJM)YO4$$@z z8crY}2m_xV&}13}To4c<5J?e16?fgUO*e04Rl?z`Y1uhZEpusVFHM2_xGoX!ui&5> z_3>jV#6;@>Bd-2%8eb4OR=|_GsBw+Q#KbJ9={5tW$fgM`q@6l`%k*u(+`*6^WqCQV zT(Sd)!lWAQ%`hY(DB_^x74DTn>9*ZecL+HBg-rV6zBJ?ZI3-h%LS)9D#5Pfi2@DzH zetI<8=%R{qtSFzSNHEZ|T__S!uPTE<=f#5e3(u2Nqrfrg%XHg@ff*Gb7ZSih%sYy~ zW4ZVv)PfFDJbmm?TVZ^jIihJvROiA74qNr*d7l7@92CxT=2TGfOEhSdzaY~af0OzE zL{xK0PXs;{ibN1_epgsZVBr`7pj|`GqO<;jX3sr}VCKDLOoj_-fGFyIR?T@$G+c!Q z;qV~}ld8`080F zHJ4Ogvpzq(1%bXjmqiAd6zZ%8&K!aiC(8W0 z7%PsE<>L$>%Dky0l7chrxUmGOpg|IW*tLYn&lbH5OZBHzV&m-xT zfB^6f25n?IJyG1^)s*ySVBl)K4R?IJBEXbEd;CGO_BB-$?{0OtPWVOR?L{i1^QO67 zqj@ZeesW(@ufgfmR1Tkepj&5MgTrr%2DPlx; zgeC$Rt}ZY3yI~l6K`f+CfyG6b7;J4|5tGE^32F#g%W2A zPv^_Ag_G^{u+kZzmae4g7x zZUuc`j^5}n*xzy?eOHg#;56Ge;8?Hl-{Gw_}p!nNWESDAQ&I@aQ+G8(jW>Q zYO?p|TXLIRP0Fd#Ppz#OIT{Lv#TFY zya()wBh>pnxKjAMk;lZeDV=&f0Qwq7w-u@^(L0x`cNgk}(HPX=L>241^!TT)rJz9%8|c@j;<%J-YnGm@=j&(NCkX(np~P~@KOg}JuqA6 z8F4Cyx83n}1=@DI%}DLtcAml<4W6GtTPAaqUi@?;$A4?p9VYj{t$1e1U~8}K5FW4m(#A3XT?$(J$a#`WSvXVh~e`=iPMcI zSZ_X4JeCqUHdyi|%O(B8M(QXW?wp3BsZtFRE7O{@qR>BXNIbuOn$ftQ>rky?MJzGi zMVUJzp&JeqVkK2p{?X9Mm$3=Pm<)enE_K!#PerD;e5lT!aFlzp)7DC~mZxs7p3`yyVTx=h$TqS~FC3cWR4>eN0d+eXLYz>Ug#uNHwR8&iq+7U7|U#^To z+Hf-(F8sh@Efde(BFt4SlP^oOE8zI64)9o#tYA2Shrg`B_Uy&-5kyks+4uI3#W&U{F-V8zMk ze8b>&yJVw*d@NIj{G9BRj#q6{Q?W*(o6>0~yUk&fQt<@e{^reLvDze#yWK{XX3CP= zd}$oNpRecrg>WiC7b8w|qjyd4>d{V2b_ca);|S^{&w!t_S{EjDP7$W?`M{{MX?~Gw zRYtkN{v-7KQCcwpc*6b;rf>o>t`})@jQ%MUQveb=$bC$SWTid~-o0F2Q$U;W~Vv}^`*G|=x88A)=&wOVYQc5)*dpYl{KHBQy&INjdAu-k1(&0ojc>hSIUjW>FI ze))E>jkv$CU8>Q#kJ-RR*ytVm802p1`#~BYD7ew-5}AuhTO#=8S&mBk;(2F!a*ckr z(G=Z+<(?~bG%VbDi;%DdMa(TmL!?Q1Ly~0KDAyq9vDBqn6WXLzGp+vVk7u) zOs)c*iBf^P!|&hy&~R`n>ctH%>j=%(n{xX4M1Hw^{Yy67WtGnms*UEzLq1pNUJv+x zawAhEq@?N}eK*@(GRdV=_l}OHXN`tAogbm<9O@>XE$H36eK`HzzpS@hvSu!$5FiIU zluT}Por;TykXbEN56?1T2E$^?*(4%o%MDjvn#IM%^@dH0CngyKWJdrVW7*v7nI9X5 z7!pdZe=|SU5;Ri^tXG*=*4Im4LLNL7_Emythw#dm?llntri&Bcq6uR+Lzo{F}?OSNKc}91*y`}M*5j=ePGO@M^3q{08 z6$V)Rm7WY6A3x#Apu}UrASR|HG>XVldb8)ol0y~c|0^_TpTPiTl$T`G?@kiQcX~ni zOI{N=?u&S8m_Vx^n6*=Y4*k5IbT)@a#I#rp1u=2onO0s9@>LPg_ewMxC|1^24eadX z8%i!~EpBoFrsWanbYsDO?@Tluo_Fo5cl9P?aohcYU|z0{_LuYs7n_3%quY5@Fc(i7 zqemBVIXrEgetq7&M^o9uQ&TA@9BKp}bOW0mj{8YdXk0@3lprnSNEsM<_R$@%?f4)NaC)t==n#?d=JZTnepJ$YXwQ zeRtFJ@#)Fw@T_gYrHD$q3<>1@{b6E^+YK;MES=isI(dt;TI+xcH2yB|8I{)E?bc)> z-7*Vg-!YZ}Zx4^BHC4yTQ&j0iQW z&h!*R)0*d$Bv2O;BGCt!YSx;E1J`7r*=~EZ3_15|Nh^BRl9ejr_kDK9!lV*)M8ZWN zKk;nmi>@LXya{*I)|>sTjjoTkFCYHXJsEndG zpKOFXpmr;<%N|wt@Y_~b1FOXEnG6Z>D=R--6uAHfkun{QEUkJD4i4oX^6_cro_b~j ztE=hck-nyvTW`+iPfR;I$Y@k?x%gVl1WOX*OG6NQLT8(0vC_&Lw7CJ#L1|FBjRVAaz;adKM;FLg67^(R-QMI{sRCoyJF_SJ8h4r-ySS)mX=V$Vh?31+lNeKyeTk!(k@t5LzAVjpbx7Hq~76*ljgT#80 z*WcW+Cq8*kaQsrO61vpoRT^*b$^l_>w<{Rsw!6_RS90%Gi{Njumet{_N=w5!J3m*Z z9RJd2^9C9o9`3!+1c}e(BH2azZi0RJ-7W`*pFU zd0@yuVD{+|25|-JAYeqTXwZCw^UYO*y$8`7xxgQGVFqc^DH^+Vwer1v%5EuI-P1f} ztP`eX4a1`@M$AaXSqv(vO`t!)#<9&ysWrh6x&T1@`^=4>KGfzq%-k~AJVJq7gSAXA z703%}UEd%I3g&WeiX0E5yf-Q!(Z^CLdqN>=lE01qH4y$pSlq8^y$#Ol?k;2S-$v*tyb$>01> zBoc{p5mcJSvT}3zQG3!S@&ewh|wwkfkXy%6~MKNi{>FCZZb zs9?Yor&)jl{(6hirl(!CcGnOP4oh@XKJ3Uny8?ijQ%1*kuY|u`uZ3QA%QrGQlbMjY z^Y64My-xc?>fW$YiHrpd=C=XLF0W$PK@jlkqoZ!{o8TY?Zij0$pJ&7Z`47Qq+9;s) zsQdGC8-+zxRrO5kugyoqm~>=NC1gyb#`t0KnC|8*nPhDjEfPN{a?8ITR8~bSIoAzf z?hP5ci)%I|8=Vi%KfT;y1K~swEx1QMS5ZBa^VlgYJdt9)!izlw5qGR=z2(Vrm&{kA zlc-4+m?(L@9(EdtbD58ZFCFY_j|A-*wVG|^Z5q4>YX*h}nal3lA8vC$SD8My~&I)!_(76Et(70%|(Th99^%URuJxI8{@6^pmf z%VhI}Z%j=M4Djp&nyk)N;-3_fiwPclHO8i=b4QiU7_CQ2qwx5m{{FS^esRFilfx>t z%_z_Acu;6K#Ffcp4wutuM@2!&IKM&5jq7bb=RRKP#^097$uPA!1VX5kkkFUKUuu2R z+qppYrjRG#`~IUzY%}RN4GS20MLr$PpLI@@7%8v{A)=>`d41wtsiS#|=dyq&VEb8D zC|+;e=Zz+6@CIQAq-Z0!qk^zRe!hq>7_`0ECxRIA$H1ZtP*9oxtRCW~#q2L$!ClZP z<#G&xK~ay_tg1YwUTyo;{=^4k5JZZE%0WL$`42JHUVu9hG^?2M&)MRv?C(!VdRpS7 zT--BjfremWba?5?!3)NuK}ehuk%yCMj|Z5Y^OfL=v$Ftz%C>Co&#EdqVLsgQYR?@{ z*GsA8sciGvUsbD}7{t2h<-%+bq~&IM-*IGxIm9NsB+r6da7<(plT;)G3ls=a2FLvie$!-CRQu za_AW_XrL&=*On!osM*9dvzA8DXlYF-Yc6WkE}~Nt@f8Iqya@duxueS5c#n19+9e~} zO42Z9RsIxY;bqT9tj@68z{rxQ27|LqAwr@gtr;Q(ddX)X@SBiBk??P_!5ZG)vu3l@0T zu1QiMSh#R7fj56S_SJeSv&o3$JN)9_k3ZkPwFV=R8GJr~yUG5BKml65OAi~z#ajq+ zkiAMkR=vV zAzJ?1V;$>V=J-f;Xsg+XbhNG>$vi{6O4Vxwv+<6S&Kx`=^>=2rL z{mJ=ssyS78Cfl&QZ2xv$*o-5+_Kof9x$emI-n+4PWbD!Zcv&(&J~5qJA*=$@FbYIl zdK~vSUnsFXK!~&<6e7vIbMQbY5?V5@8|F=5D6LiI2yaiG8H!l1XKd!D4#+WxLE zx34V#3Sg%X%x*_u3<^dv-HQ>=VeLY4y>RCcN5U~BprN&~nlLw)_*~6tohf*-kW6<5 zet(+^Meofng5n!aL$f1)r|#V(h7%ZHKI;yZpG%tnr5QQUY}~~TZ;88JpR;aDzK?$U zdC*K5N&MR0)GP`-R)NLs*#1l)aTMsLl;GVNBml39-t}D6ih92`}u)RlPuz*7?XG&C(DQEMz7OZMvo!? zXSX=g-Q69ie zh*?hs=@r)ai|o+avtL2TKueI6dh7&FRjr}cy5bIoFHw+DrM;i!Fn|{k`mqX&NEUJoRWKTuDLuqq<>1m! z&J+Y0Z_zHlD-0De7F}V9J-$ZaIL#0iwHN#8B#u9$l>2VbyyKlf!OON=;amY+y+{~B zY0=yS9&=HXD{Xr_c!K6>9+kC?Rj*$^Pl<2ndK55h4S%=>TWQ7_T;4oYNevUTNrr0$es)D#NY`gf1*sn9bo}m~qV>|=Z2{`;ND>-`6 z{yB-93QWHwcq9jBgj}D^lvsX1-@-lks8MMgl5ecv(noKr*7Bnhz}Wib&h&6BpTi0T z>e&o)p0avZ6Xg(j45`;tdcCCBso1#*kOZq6>&W`m$aQ&f{2we$SNgU1EBD~NSw6R$ zR<~0^hc+jUCkN;b5iFDl<27%GNIy)?ndci8iQLSo>FK!1>LM zyIx{pp-BwFpf3*YLaUT1#J>bQEDi$yG~lP(oT$m}=`~+sqXl3$_ZN)G^)Zb2f=IyA z>(vk8k_>#ltK3u@B2ZY(6>m0S4!` z+F^~H$uL}Q^-pjHS;y8RGYH|i$q^`Hej>vMHYaTdK#OJk^CPZnuF2b)l`pYMxICYAOV2e1C@JBrD#O6FOq z@&W!Y$xyBbWw7d7Hj7oo)qs_+-!5ilU$c?knhI;Z%LE99wv=b%7vKZkgz9%V5LVM^ zDOZG{KKI^O>vE)`mkKihbEqaq@auRx^MQon&^piCQsEsan`q|EL5oee23J5jB!Rwj zxybMY0jhMfB5;vw3-E9y8k4yg8x^4%AYBiBeC2RY>LsPdDl8$Y8jdMU|DX+V;g*xA z9=pxti(x|U$3F2v6kbcF5;bS{<)Qn6d1X=)_y}-P9w85Z`4_+__q0Wwd4_p~bS@m< zf$w!MF?0)@)s4QedwP;B; zKLk%v_Q7rqD?KllILd}gh_6;bbBkcqVo@1Y`lk*IzR4AC;SZWv|oar39&${3(j< z>J3);Y{e+!(QqT|1jx|Jr@3?3|LQtGeQ=Nt1?kJZx2LdxXU?3t+(ea7TMB9ohU9I+ zYWTj=BQweKASxd*FxIP%J{e&aj+}7F%3iA+AQfGfV2` zhC>6j^t8tKan{@qD{-MX-WZs;5;x(!-4H87MnUAmqmh}`_MHT*-+?2n2Uo;jMGuBH z2YCuLme}IGd<74?SWd{0v5{}gZ*GZspj6A!hN*1|Wm>R726NhZyJl7>99Wq{lK2p0 zU1Op3SJ^(Dd+7=o8%zlWAIfm1!6KHEp~W->rF2 zAw%X)V;O(%O*i=dA#)WoshyYW$HEpYk|o~AMu+lQSo%b3Syi5EDx@rJ+oPCJr>}hm zhaJ|^>!u$p{9M|bj)h2uFyxwUJl8nkaIs(Tl(kHnCn+GRtMK|B;(61)@3UxbJ%#YU zB{GT_-=vWpm7KNwiMd ztkdL8iUt@yjUHV7m#N~S;?Ri(&W+A4^E*CzMoWHsCIXt5RQGl`h1}51;oafS`gkN<*BcQU$-y1L2+wn-W!c#G=(h0 zGsEWrRc-0tJSEs)R;(@7E3rs9d`Uu55;0iv<5)uSoUF5$L$is+Zd}Mr>L<6K_$-aQ zN1jZ!>nzt)h7elE;xs6K*qs=W03&Z-K&naeuHkIta=w%y5|cp*Gjcc|h*>+vJSi?l zfOrv?a~eTiN+GBwU_zUp%oA2Ds##i7`xdTJrNJQ1kD21zgDEc?zk>?&I}+4YASt0( zrw|%B1sZ9f)N^~`KY9U_M_myl^%aQFX;k)eBR|S2f{NkTAB*M1T~25Ug@PkC5Ibw= zKX=(_Q*4Mya4X2ONcdWdEDW{qK%C&80E9d`2bh$LUzS04JCD&+6g5upXXFtS~;{jZYDiKluqZ zwJZ{NGpH*<3SqX-lv~RMP4>SW+fyn3bMeW*{vWwa{md5{IPqBGP;eCRmS6bT{4bbn z?``4und(>T8w|%PTL@?_>zKrtvXq_;X6qkVYMXL8;U&hH7r|+=V|k5CsdZ%5HL^uDyA(s7E}(iqS)kJ+;_dEsSg_Mg)SJR18B0^L6)rxs z%kMZ9H(WdXoVvR;C%~&~h@Ah)#f`)B4-RqN)j$xq{oOuvbr5bJ6c*}CvU~0<|NHOf zyVI3cLx}z@`mBs!Xh0r_%^u0WRI@jIH~!@DTYSNJ`Da4t;dZr&VCwFu+Yjj{KIxUV z6RV64GPf=cw*7IJo0Ic$SzRp{(g#Gsffh?;oc7|Al2O$_j62~~KPnI-O9{~B4BkiA z3lz1Q=j>>!lYJjkR20n8Vta!E^Kj`s_)FzQtzy5KY2Vs9Ce8wj+rUF=zkAnVH& zicE)irM9Q4>@aIH{b#Mmk~b}|C4Bm}@EMBd&-4giX-o?xrt!GpLy)$COwAd@jY=o{wHzOX_tw=H%w1L$#+)-~O_*XRDyB%PNa|@q-UDJ$* zE-|yc8_Sg2@K*|y@70pnZ-P+%l07n!#wE7qXt((;3r_AUO53GV(0Kb7G}rk&YNcE^ z9=ktXyGZX2Vo}h2S+6d1W-x5|tEZYjr*ir}n#NQdRc2CtN!v_P`>wlYUc3C-EjxCv z(j@2b%BYaEXr>HiO6cd7i|>&{<#F*ZA-Zg&>MO?=hh|T6b2z@#`7|J$4sqDMvv?|Gu1gGx4aLd<}AR42~$^X zmxHQ^>=^Ic?mqfscaK&*AFv}_dKKKSFm(P!f`o_lTCwJ*ZY(IcC|CxMZ7W&GUm|AN zTw!l0LB%!)w^{vG$B=o0OT}{+uM4%Z;J0m9PFJ3^W_&B<$twiW3XZGkcIg3rO)hv+ zMET2ofu0@Kn%0O+#LTPe8w1miH>54Oc^QX1LpoyQi#ajWR9;g0(*?jQ*dsG348)E0W|;Z?W;;oD7tog}}6O3=El6 zpA>7QcET5WgyY8M)+EaTukYDyF8!%w4LW|FAszpXjF9n_%;97~G|Q^7MDb!CuR9A0 z!Y_spv2ZN(a@XV3PEOp|1=rK|VynMv%?DeJKMcRahp9~S_`3BE+TQRYx8gDAFmtrU z52?s6R2RimdNauQ`eC<6zwFR(a5MKMt2}=T{r0ebG%LBBj9gBeN@`%&YWl=fsc}WU z!DQ`X^Q9hm(un;*MKhwqzMiZ#rfj>eH^x8ZwzgA9y@%zAb?3{O=`^9cm6AlqxjHhr ztr1qEMnn!Duao4l?9?50)R?Fsz^)e8h@k58@TWUk#QHH(e*9u)WVumEN-XBk0iNT=6qU6AwrWmC}#IHxjTCyrb*DRbahr`hH1} z8H|u7=Yl_$t@!p-$1Y;;a>Q&}#UmJ(4|3j}DZFRYkJY|JsO&l_8aNw?jrPFXWtvOD zXR-<8golWIu6umiTFoVD$dtDMN2{Io^fYpzhF`U95x@*nGoTFa zQxJP&I^@#<+q2L3Qz;H{=)a_A_`MfZM<+{H_&ifISgmBANlMjNlS_IR+SJ*UyhSfFEdIVoyFzVur$?Egsmk8EV7+<29EK1>o5%Z5`D6QIvK#t?@m=4o zy@7(0N?#v>rh7P(+Z0A+dj*&|u1FI&n;?Z7JfVymt z?`M2y({5gx;Yw(0!~AF@kscfrt%$78E7p%BhEqAKeP|MuWRWREvyix1wySp-01&2qnZQ|7LwW#gs#2<0dms4lfi_!Q`NQ zc)YIoJ_q(}7p?umq<_4kP~AF|%Kh;(MyxN)#%zk>&yB#aZCg(@us*I_Lg=4DL&auV z+xASAQ*s(oW;u)7mSTd4yztP8E@=JEW%ZRB0I!Za7%%v0V3}b_{|Jn>aGBQ0pdjze zmbaMA;4%(~AZIJ-v+6VY7f_iubmU??>lweSfMDCS%=(e;iHFWq8&Q_f;Y!TRM$>Av zr^D`GZ-fO`zB~h!qpSK6wzwau0TO=vze#QD%*Vc!__6;qNEK(iQ=ke7`%hf4v46qI z=0)y{uY2Zmam`HYBY3mSlr?=2f_lpaRZtqB>B4>gI|?>Iu9-9YCz zd*WLR@b)pMGe6eRkH26~?tHIsziBY2`~k+U9(#1-(v88xc4DDTGjF5f^{v%PQc8ko zcgetX`i8jhA3=9l<5Rx;kh-+Z+Qu8du71E`|LbSWk*m5FzWjUCo%VESfixVT`A=C5 z!Y~;(nW*5Xp8q1A+}i9=aWb#0xwt1F^SksnJ3m&B>o+vSgYjqr5pWj2K z%b21Ap-@Eb?-=6h=Yb?gUd5sRWVI_t_wS+B12l!Iq0JxVEM2ym4WJTUYUz}TbLUTu zryiQmML%HB=`8Q@4jrasMO2J4)F|G&yUiQ#Kgy4^!m2&n=jj-7g#bc&c= z3GMe+z+L@}-%Cp=L-3~!R+qj}*x9S}8m^}vz=mNusVWHgNui-drz2n=-N~3d-u2FV z7i9TzFi6yVwWWcV{0`6fjK;z=#LLi<=ug>M5(f;sH?x`8lANkt?RBv~SNdrW} zQvKB`OayYblIYIE3#eGj)FB0g!ht%g<+B&*_^PNSqn!H5Uu+g__R~ zLO6G)8NTF_pED3OSE!*7hPJO)+n$sF%tzf4=S+p14omO?k12or?Ep2=KU;XuIW zG+3e_1x^5S!ah*%x!E+mAn$l=*6vEZmHwiyu`pbp)sS%vvii~Pc&iw-$*Mcv1WWR& zF~3NrZJDk;dl(&=ppt%U?q&^v_^Wo8vxd&?N*12emBmLaG(4=?LhEQyNN7bS$luFJ z?kF7o;8m6$LxmpQEMC9(WCH~bJN+~o{T3}g@b`xZluAK!P3KV~a? z>_i;OMM^=tEL6$)??a%fFSLg$lPRG*7tRe0f%C!;s_3-`V`vTcEeCOJ`GIInh+-Ik4QacrEt~Mngh`U;YkQZRtC2 zc{y0jW^j>T=ZUDZF7 z{@$36ooDpcF1C2Q>O{CF@4Gnd-Q(+BJZ`C~n~Y8_CjW^;a&c%LQ)A7|y{^pS*f0FI z=>{60$u8ObASuPg59xp8SYSyaV-QU39{4eOJ`!ztJ=iQ&ekgAaOfzTbW4L+QH(@xLVBWcII@5x|{}CLus_tij&m4GZRBXv*b!3O;qMY(h73j z8=fbzN7lRN3ajB`57tg-tubz(duFuF;uYWBEIaZP%1{poG@}WLKI`K)*;M##SNpN7 zF|lT!UM54xfgg->Z>%tVxIh&TS;dz`XVh_JbUl;XEI0v3>Kdgot#N*S82xyW)SM5l}CtT-{!{E`3i+lNVmtt*n%Kt#{|OEO;r zO6Ir$3f@M7)N4GaHcXFoRu>aVT4?E`s*wgPFA08=SZjWs=|#JjEEgTvQL*o74%|Ok z;F_!LqRrk*5h^p;l1BZu_YBs=q>#CMd2_hfyYo*+3Pn6w4JOVcy$NOlp*#9@-8mMH zoy{9Dy6GB>JTQR8MI;)%ivKCQtp*RPH6vD=%PB&!RI-A4vC$4?F6alHGIrAz`y^y{ z3gGQ<=2Wrp7LELlMRD&iCR0|!b4pX}D9N)5A6oF95Zgo-mmPfq!cR zOdl3G)^@1=A{S5K<*vpEN!}Ht|8v!ZAw@#VdOb^VdWWT;z?wI@_ir8EjcVPd?(h4@ z^2xVuQQ>=L-*eI5iT-{cyTi${8ZQQ@FlU;BymwwAdy=7BsvJ)~?7qBD3aZdj`5~Rk zha?q41jLMeP`({MI`esHw(Y`Bb0&kj{~U=*zEjp@;vS4A`&1Gj_)DkO@Xf}-3+$O* z{))_5+e29GTy0!6+BPE|h}=6)i%bhW;g@beLB|hlNGxpUz=s73k1uMK_$|~w5mO&7 zB{BaM3?fiyZ5m~e6R|Ck#sj-qavI-=bZ&LB>#Y zW?LZ>NsN0&!U>1+6fn#$K$}aTkE43BQfTOfk2yRYuSCD2N*5W};poOeg-?eAuG ziL~CY=x%^!#3(vh$xY+o3X2u9BOmJneQ71you{>m@{-8vLPb#9VtB7J#rGG@-@jdT zqSbrq7~CwgT&CAk#Nk;BGlcwb=a`fxq}C4*U$9W0#DyH2w{weu>Kp-M6&4K6GYxS z(}8lSwslKCWGb`2KQvrKd$o@*7fA+E&6M3SG@k(-`oI=&&_RovDAJn8<3l;y-wh#5N3wlxK zHL3gj{s?hk)9gq~pTfZnc{X={w#uoGi79Q3;EqBIO>Q=&qd&{=;kC;M6icujMzb^B zwxm8*l^g8^*IGRI?>wDl;MU#F{T2jF=JmK&Zq@G-50il+%#nYr4l(o6FJUcTt=GtQ zj%e)#+z;G9;h`CuzC~8y2nwmb*dMoAI?XOPLm`kQsqM{U3QO`1`kI**StIM=;601` zHTSswtfzhQD|CN zQ{w^`tMo;6yW(gHnE*S!THE(rJuHj(z(^j{)8$m;rTMb>({|%W zTvGwNSfR>%O8w+<1rs?fZU_x*>EqPA7iO!8sSL56v%H_u!sBobdVF+uQH>!5ifEnQ z%s6UwO?3v>1G7mqS~#MLk4BRezB)~OvasXEjTdNh!XyLIrbjtGfC9YJt<4T#*<*yk zbIoxiridm-z?W1){`m4-FuP{PrA8N2n-er3(w)u~d08U!XDwPw9!;zsSm8rmZJ4_t ze1%B+=-u*Rz5t&E5L~j}2!&zNeEXKcgj#}vj9y&rN%8N#3K9ckWI%zLSj@lrE*2#b z|LJE?qE4g8<*OmpWzHn02oTwK-+cBhpa&{LS9m5EI60J@XX>AfNR86zpB|5@y@UddU7Cz z!lNgT0=@|{RSB#0Nu4qx(5Xcprp|$#)acgM&gHrC;o-pdfqYVud#d`EFLNx*CwN~3 z3V{6}PQwXqgGAlj7!}n%Oax}QtU2y3bG_9V%;9(6xsMs(vd0Vqzs^tRbIE!T(UBED*Gh5CH z1Prnm3lfcr&WHCfm8g;V#axb8&R>}}WhChQ;HaS)w59F0TH$()`lrjpb(x^2V@Uh@ ze5pMF|P4j>0)ekNFA zN((hwxS#BCH~9Y{gF*rM&wF~`TpWAglQVjPFRBU4ePD+;F0y!19M7pwo*tIvv1_j} zAZ+M2#ybb|9CDeyT~i1zJ;pzYUp8!nXfIfQKuyZbBe?M z>boeW?7KWWSL?P{(tBFV#k4&(ehdeN1hZIf7z_3HFUo>EJ{;nUMd$uLOV?v6(_@&* z>5*`Dj%rWG{w!o(LJ#5;45gNXed9-9zK+pj~>;1%O&#lPVWx2mPc5>+6Kos6= zMM_65El|fpl3(lH(`65KzCB1t>G<78J%{qNb_Sjwc`MJzB(&>Y^#b1gvHM!A;>gdbaj!k&k!^y&ZMAs?=G5XSua>>#zOk;^Y9>{h`@sc`i zdeKew>)|QG0RCq8hZS3oUs7-MBI=`KCTdqho8Et|TNBK*DwiIWde0TnULdd``GkV? z$e1k=lQwz5N$L5r^1mI$mTXi*!)f_&M-ox!qI+y^v;xC`yW4G1Rm0KAg`9&-L?^4N z9)0qt6zYoPUkojwQ!aO^0qXw_L5m6w_}Z8sy6SMntJ$p+cW!lQ0J4F@TDW$nQwd`$ z0eSa@x)Ina*G!by4VaE1qFQh!)T zthX5zX_rT!pqE2;Y8*Ufbfx$U;C+geyh1BeF}M_ zP^O4yeXFR-t3B>q6?(biRlLI3UE~uB!Ub0o&%T2g`+=En>o@<=3-I62N#XK^fc$8o zG~Qa8VUpgy!mk99edaXxvMK2Ec#u8jb%?JTE5T^+n0S-`a0@XeN& z@|~zd(O^)q_xb@Xs$SO6wnkg=8o&noy9Zhgt7AVic~Y;-Hj~$)B+A&I$(e)wy!n%` zs3-Mge@;v0R+EU3Jr4b3cCQTbTGve>7sGDE$1a6c5XG z6tm+hmM3y>mQLY=f`WE;E=sDu4V)pPFvhuhQ@(^m7oIAgwk8~o-^4&ZzUQ(Ym)U0O zAzV2~y3rSL;d`Pb?N;BloIqW@gdx)i&*bZ$KaaT zFc$Pf_i{0lAvK!p`45Kgvj=V|X)_K3LnQwo4NWvVFC_c!G5ec_3#+V-ReLuSPOPmA z_F-?x$GdEcJg;3U4S~(^?TW^dEDYJVagd#N+9y3kweAIoBc1gynu8XxwmZG=n3y@{ z3OypEcpyhpklTw%@B&`jM~k9DN#zN0tBt3-TD#lOitWHx$0TG~J~m+DvJxT+1H0N= z<50e$5S@PEb}eN(eOmfz(oF6(eUvo`A@0JRY^96$0XsXs`x#yN}A&qNI`0FO1 zrS<)8G@MM!^UrRcfVZvi;1&V*;a zCNKVqU+(iZXJ{qSQG1i=FOt;1v^V>Nr5vmxg z$S&cUXoLd)xdXAysClzU_e90huSQ*$zY(y+`}Z&Ae};;Yn7urewO}1eAapO3thMoS zzFW@Z>sU3&_d+5Pk`w*Cz;J@h<+QtZ4WeSWcG6_R>iLB}xp7YpOLp9Py-Z&{O*r;L z2dbwNS8abJNP{)UnP4_kb2#YD)(sPMk-JI8!1GAH*6s?PD5E;Gi|g4IS41XHF$l&*Qx!U;?2_V&n| zR4ze(k2pKCOE^Ch!~_i4eo(FJ;g?@A{|9ex8CA!&Zfipz5In(Mf_re6;4Z=4-Q6K1 zxVr?0;O-8=-QC^Y9d41e*53PUIqlr<-1hy2*$S#=&6=b4{`7Zv#Akcf=#%=`8Sg-S zvop<8!!#1v`ntkC-^>$-;%RO0gv>o(Wcf1_!Ds`GLDmm;HP|4_rbe+hthImH!0wji zBTCnu$$j`qTXc!4ZAFC$EZeV}i<{{EOT?!hX-fIjB9FyR8`l8iYU7DFDtB`DGYp_5 z7x62Wex5f}(#p@npOLN}tf=LOHfGI*0Bh7Xo2pUM?DC! zA3y29(vc!#`(Xd0OWdpe;Po-m4Kx6KrEs9r+?q`5CbAyHYg?s6CAXwsnw>E7%$Hie z7cWTC{!qeXF>}C^Dntohp9;R?;q1<7(JCv{m(yA2KA65>QlwRJeK6~KfsoN%Vp|0k8Ym(IEu-Cr9U_Coy`aP4s*FwR8%C; zTfpxOYso8N#I{;h>&9Dfqf?z4k4F5Es&{f%C|WXEDTL9Cm$K8eY*O7rw>;FnC~ts8 zUy4<&fyVTAebj0VQ^tl~HHY7ooXncs^hMw?&{tDp{8_d!aoqIis&#*f#hc~{w#%YJ zs3Zq}dX?Vhjuhd|ZA$BvY{@&qlC*A`p}n=7O2B1mvtA08-I89-YWBojVWb7(=MED; zto6?DxjpTbzUd!4S2#FZX>R>hPa3XSx>HyWGXzhV6XV>Ub1rM`l0&MOGubgD70gE> zyK{X$RoiOQe0qk0lCnn9>ctKEaMN?TLX9V*kklUgM2W$3^Q)NST~c1HeYR&MDr1Ny zoL5go3Zk@n%P~qWqwQrPQBPN7^4s@aakM#d9_Orz4@x~GltD;IJbK;NnLKj}is#ZR z>QMFl-vq_`hU0cz_Wgkqthli%6&L06s#>xTK;_6y15?vp1$s@TXe z-`zRx|7!WlOV1GOmLB~cB~4;ZUZOikp@@n)ku`# zc-AMBi@|Q1K*rXVJ|NoDF;F;Ke1jAneO}$KFs^nIzm=;IG!F(vl-aIUeM{;v2A03V z!5{P}IHYG_Ao##se7e#+v%B%@B4J|!1c=k8Ofk-ewfAQ(0NX&d z)*KW+L*Sk4@u9hSp27l*u&~>gFXMHXm_n+mehrDDuSZ-xZ|{|pW+wXtPWk%MR8v>i zPwCPKKe!j(iHip>?BpIEVu#`K^z~0+LBX_^xGId{KJsSf_o!Wv$XaxfwQ$Fjlu(Oo z3`Gbs*r-j1Cwk8T!E1k4g!hw6!&r`S-plE^cKKBm5h z0cO&4|I%RW(Q~q?Duh6f1yPe^r&H}=v>p2G=mEV*5d4P3FGEk&I~JX{PWkvxOpdf_ zAy-{d2zVHJ3bk;>j6JhFf(HcomaV*uzmgg-;Fh7Bj^dilTh4~ zRJNq{Y*A*s-LHMBiGG{=M^0UM#)AcSIoU?d|l&Q&axgq;Eu8 zn(J1g{4_YUZK#tg@T5m=T&5aBlrg?(n)x5-;h;0!d32L%tZ}tk2XVt0y?4EgXgH;r zTbtOhXh`MiSQg(ixGyIofVe!8v`aGzh9h)2W{TmQUbU&LA@s>(MMTn_6f_uaTMl#b zZxvK`f3rb4f=>fXa0352pu~s4V?eUv#S{xn_^~;kRQdAd%hV9`Cx!_0I-6CiBF$qy ztaz|TT(^TS<})#9s$Jzy!t7i>mQ9WhFG%oU&BeKtIEt7sd=53blLbM4a&i1{(MwTg zx`uHS!1`5B9NprDg&Mvw@D;q0_7p+`lV#*&bwtjJe)#DFqfge1GlPDcH9gwB&XgJ1 zQX2i~L+1x7*pi_LU#A=$szo&h`$K&91CEUF*3J?p$oz9fxo<*JTQ~Z@B76mp;uA(I zv4%|9GbEeam$z0Jtfc8Bm+wN#Eedp24&A1kBD=D$@Gkc7;9*mFFoTC0^Y7aWtMZO~ zqU;m7ct#AKmk%~U#HRc%ap@8)Ll?`&ND-UtFzl3Y2~;7C)lKM5HI|Rn@s!lWMW75; z#^(m%K8-#O$@&f;G|;)Xfn(l!4bEOE1w-j((id*8w@;0J;_E2MFAUmRKa`L#FKU?m zc`uEkp7zlv?=}qlPzf!zKEA=Ry=^(w1tuO1L+HGdl&DPqPL(7Ct1EcKsncqrbf4sH z0)_}LmeW@pBdyJ?u;a)2HFnou+10e6FIPqy5?HR=W=Y64-z-)vHv~l9_z8O?-gn5{ zY65T=)PxX!h8muXvEo;Ev{pOfg z3OA*z#okFXkr87hpg!ctD?zz27lYZ29to-EY;F6149<-{$AW4l{IDlOpvW;p?$NmdZIk zh;_#thNbMH?ZwPF`%@CtEDBnP4awN{>^PB;kpePT63p?FupYqJtYlL#X}WMIaCSTwer4oQ!TM2synbsv zoXMU##c0gAFnV=HX|Ceolf;%T%|0}(@nO}5XV2luE{^a=3n)bjob#i5<&{NA$RhG_pzTj8=dHL!?)h-TjWv$aKhoHahfa&cE_bndxfwNn`l0;J`mf6NTdVVs;c7w!y-wG45qUh@ynly@Uh!iviQyjr4Rj;)-p?7<; zE0jZXM%w*V#oH(O{q(Rp?^O9o#pFobp^r8E5$9)XDL4o54cL6_Q#Ikno1Thxgp#7P zcHyL{Q2EO>^G98h{s>U_a&yMvY3R8#C7_iG|047=la)vE<&4XDTtQq)5jBti^49a& z^Gk|m=F6>#Z+~=kcoM4=0t>$oJH~X4^3H>cOp!(Tun6grc7x`SJm5m!^e4;Me%xgY zj(@hD0a87JkbKo_=oEHj?i=SR>s;ZRcuTL8s2}}l&u%A-GII?ckZQF_nvA84meU2u zQc1D#|3$J+=&p0`{vlZlXdsYr_s+nu7M{Dz^p4&8h4Pn^1PeW8mp2G&x^_qu!dXx& zYPQmvxD6R>ESpu7B|Jj*Ycr}ID5YAR{7w%bHlS*yOL2wx`{pjt5?ZaH=H{H(ScrV` zsumYDV7R7OSjhr>es=P0IXzUZe13A9*r-N>NpU;ZH!z?xn8zMYY0WF4r|?=a?V_1- zKUH2GODAATu|2shP;Q)PQ9^5?N!f0i3pNuJGz^#@z{|xNy%@@=QzcWbuQd`0S53Y> z0I`7>P0AC_?}Nef?C-59F&4{e{ZcV)Md)_@R=c-WdGFCzdz&y8?l?*CaYgyQN2qmyiTg5CPa%oPLiOp(`9>6q;YxTXHo{X(Xx?m4YK6-wGK)cUnpH0R zAhRQmBRwx2o`y0J}lJMAUVul>abYP|)p!`%@i;Gli$+ciE&<{99fN=Dqz*eo@ z3@*@HTPLu8nr8wQTeR;vld%hdF>S&K;G1SpA9Qq#tC$5#-qI0MawLry4Q(AH;@O>j z>DBQ4Aoqtxi;eiNGO??9#gLng%{LHlI!{DLsRrY~bsZtXzV@N!?E|UfE9mG+CyoQbaDJh|F)uwK1yT;ODVwg(&9U|fbGAsNUmWRaRISJ81xrs_PeZ{42Ut3BCf0pbgqX5>=8Q*C5JZU#k- zpPf#}Xs$*Z{$RwQ01Hj~FR_*}fAXl}71oe9Nsx>%XFM5J%x~cWsiKsWh5(BX5S~;nO$g!0^H4 z`e~{J9mIv&eZ65BqsWt4fi+soGUSm;%^b2>KO=Ll{Jm#rUdkXc;e8ej#q{^tzi#^&0>njRSU^|LV`aLf6Z>woBn>9ZJ|}ZJ#KpwOJ5;`r zfIyT~U|FQ%o2xkaSiT1#5>9k$ym{nml*V$Wt*y3SKd)2Vhp&G^zfA?-Zgy%EVj&0j zV7OAb9ZE%0{E{I3a=F>TL@1iZ9pjQ~XUk!IzBQo5ZfAcB&b;)9z`u<^YL|hh*z7m{ zL=M&}josF6$DZr~k-?e}4m)(r zyE};hMo6#R1z6=f$D&rJ$VAap?(EbLuDGSBxj`X2QDK`f+pDfU&Eg6w=sh$W^F%tM zJ!_Imt_l=}!`xI}eDI@9;01dL$7p<}AZ}d@=+F5P3<|7ekM^=l(lMb0jIP7*3 zaiz-3t^1E7%nqNGb-S1G8P{z$gAa`VB-EVDi08w)Ikdb|FB9kkY1S@o%d|jduBMFH zcaccEa&#VNnI6qRs;XVCn4EH?afXwPPj}A=R+>2?qJ@phX|>WR@0E${^vffk((|6U zJ6T9Soj2!1y9|r)V8YO(z^-sTxks7?jO4hGf>44`FkKQc>0i+Q2hk@*m{ZGSoA1_J5UI6x3>JY7VmH*LNrK zXi#UoCNo`18um&*9vBJe=mLN7_e?4X;Q-?ser_TIKcmACkyv5ZL~EZ9#4F$Bb9lDe z|2R#P(7x(eUDoK3I-$Wc6iErCkA+XV&-&ss|E2gx@mNx7f?zq(eW@T7k9%n6q&?s& z3miLgV3sP{pSN^wqkszNqkq!xvbLXskg9X)zBy~+%-LA9!eT{^^=*p~>}&xUR*~GU_kGlx4X-E5G_CN7h>#JSSR51xNQ6Z|dh5DZ3R~AsrkE#<$D(cYS~igu z=p>dS`Hrr+_Wr9pid_}RBP&31W1i{AQkX!jncN#aD5=S^am+Avq+*Fa*XU=^3zRDP zW;WIIE0W(`eLN+&S;`;xZI`k-<+*Ym*0;SU=IiDl-Rxxjxp-15uSADCX~z_|aDr;w z&-~cza#yuxw&edgh7K5NMaKfZB{j!6mhKrS#0oN;g3wY(j`j7rWu!2eqWG^I zPLH~?qjz~ZY_f{c!KOS)?u(6mnGzbBt|opx_4fdNv)g)Ew-)omP>s!rLFZc3R;kqf z__n@X>y0a`orz1ugGD=sXDwSU*XA#)2rOM=ffNNWt@mNGsL}{jYmUdGJw1q4cd+5? zQ+wnS+oV zRR58#5wV?wezM;9@-C69IltIXYppMO^)nBm`ntGeI$)=-NsdRwvPcb>37Eng?EE#L{0Z05;Uz z2M8$(8xc5CRz?gQ?H6UY`N^rM2b~2*L?k%p$-?j75rv_(M}?6-9El|PF_m*W_)1_q z-*;V4PW@1JIgqc`U+BA0eX4$Xv?<|Odf@4a#6v*Lx62V-dC3x;#O;QRKQ#TaSl&xe zJ?e?vx*|xv7!E4U9)2iUyfJWhmoBlem{T`ucnDe5Q1(>^GL*bq zBnK=|L&M$QX$Ne?bXILwwAm$5kHheyYuoxuwI`K}C8OT<3$Lmwb0C^ynUNRO5GXA9 zKPd>T(zAnbGiUS5p2tO+z=TcYkKy39WceAcm2dU2&-6qG5Y3J3TF?#%=a|hP6gwa; zruykvO)CPpH%1Ok4(bxVvlSX!QXVVs!XYn*A9Wo%MTWTZEF|a6)Iq`NGG~b3_hma| zbqH%Q)Z8m_|ET&-cI7ZD|3vKqzXjLq%&%>^0_0Y{^LmIng+ zzocDC0pHH0%%DHzd0DwOUF&ApNv9SSQRPS^b<|&=O(_U%ov0OqZ-DX1gVbE@ay@WB zU?_g_+=jO_HZQNN?3(VTzww`wZ~hXE#{C!*X`wL&;+NO_Xwv}7wPGGr==&|!&CTyJ zuPd+>{=E@MbKw1h0dRv{AHw{Kuo@e?gJ~Pox{U@NZ32lZEv8)0jW=klH=APzSME$s z8FN4+6D`NgCr?yk;diP@iBJ?Ht^D#xT03xMqvle&KqZx!$KykJl~kRsb7^|Z0Rby( zey7VmMH;SG?d4!zk;z(q$6#pQdbLLih(X!sy(CHkC6zK`^0~RW0!6-evJKnR%3@4A z1&k((WxquF!o?L6Ja`c8dI5zo8Uj3;(u0yJ`bKKyAg|woM0WHxSA5*{BomkBNWM?1 z^d>OxRFV2wRO6C&|7JMiqnGT3vWm)BizMZv(+Sf(>nUf>{Rfob-}2)5FL^Q00V1eE zIlyCler%;%WCe&GdBnK5xDZ^nnER_H8>iCYex?K94gsbRzmp{gg0jq4urkEi=o64q zWsw1CSq(^p%tzodI5IO&799CzWpR;{o2bLV5mHn0FAWmC9?{xGXEUD^3mLs3{`IBO zOk7;(qq&fhX%>Kx={mZQ116~nho|Xp?T7mKYAH1r7$X?sk4{{X$>WFxV=uF6oZ9tY(+fr z`IhQm6_%K*#&c4ew zvFLu<+rt0{$0Z-_MxXHRtS8*ycEL~_*6!^r)Ss4zhu4vkPa(r?mmW(%O%k7@fpKc}XDFcVc84xr3Vzr8)Gbv-nb}?BZf#1q~{o zBw&F#1z47-8Rm0Nk+b%I6^-c5c<$I-Ig;f5sf_wc{itkO|9yoMh8-&88q+O9cTK*Z zN9Bpig%E1|wAWy+m+Sf3kI0|Wc>PTiZ1p&-z@9I(DQxWSZ;~vZ{RuAoqw7Zz3N`un zo@2aMNW-+(*l>oq!3I}`fiy^y6{*(XDFGuPbp0IG!w(^Ip)!>$* zA&dECAoz)T_hPJYz%*za9LCwkUojE+-Ik!d7oU?_?!UoaT zYsh_w-^j0-aZ=YpM7tujy4CpxZSQ9QlKF!p7AYU%C(iwWNj$&tn_le}75b#B@R8iP z5;}=nYHp`ZzJtV*Si#ZB%_&*hiyr9-^iPC-At8&!vBn&jC+<%!<9hu>4L&0q9iE`- zGfG)|>Cy?0iGF8#GpD7X|1s-X2h$h}I$&5zQ6iD-X3?e5d%z=^J~r_iN*(O%v~jPy zV|UfyjF*Cl^q{VX6^_FN535Qji?M1R8_cVv-X0`$(N%5hxvF3RtXb%NQ#?7v~9KcC8kxGV-Vp{HPxu-mn_U z;*6N)AV`k|9m{RZ`IUrg=?v@>E)IfvjGNRP2c>&b;^E4Ic(6WSw5;d;QidWD{E|0) z2Da=)ABuJ7AAv0G>cQ-bs`HYq6(44gQ}d(fc;YTEx-u{=cKrC{*qDl{tg51A$4eDP zoa{3?fG^lhp5{sQPMH}>!yQ~f08_5dtexbPP;_m5z`ur=JvQHCJ!@L! z_SiCzuViyE#O-cU)F}?ZV6%1h5HHo=9@y{7${Z7iBTwXZ_o1K-+`}d}hH$%FshU+} zT9he~Ex28C<1^weCD0Fg!@WEuS*9&xxXAtI5aokXXF2uJ^KqQ*L8~bZ&A*izogQDt z$&(y4+{GU&2?R{a{xwTUKohYXz+WH5^t7BzrNwg7L%U=Amjs2ed5Zl;J>?}{2!L*o zZ#yJy>@$P*+e=#jLwEvAye@^~@~pg5jk_aD3c7P~e|A1r7zZgZuocN|a)Am?@G4(A zgp}X{IY~&$$jJ6XsK6N2!RSpi_fKk!p}5|77bdOP=|Xr-8v>t2?h*(~b!dXhT$bwU z_eSQjGA1`l(7GGzr$w^g;g3|4Jl5EpZ^=NtoodV2ZwFl}YYF?)nzS-GV=oH~EZw5L z1#GND4urqlvK&It^|51{R<8@<3G+Gnc+06_f9ZgNmlT4W<(W=pcBtO;JY@>~dz$eE z{c=n|fMYyIN3uv-g8&IK)w7(-p}LE9vdp?bwc=>gt@wG~^O(N~%#{#-y zEuR4ILbvw@b_L~oi&UFx*EDKUh%x;I4&$EyA10SqyrWmP(SJ}NogSNiAbh~pps#=L zE~=p)v&XBega+(jaQCYc^BUFli37P5+|#jcv&Z`lOkAudI-Xkbk0flqy@cM_Vy1b^=AanDkILf} z;0trfCtddGz&Sj)_ndfK(7cDBzaCzl znj?0ejpa@b)fyDQp#Mr67ur3iO2F|<;TAu%1_VcC);XFRB#Z%bJ|De*g7g>?CQd$* zX@#*1L}i@TB@hs%z?!KQU4*x*Ea;|0N;O1+smwpcGTZU>1*T6>Y2FWL_`iAyIi|4` z_WLroiyI0ZDY#2o4NneYrW9WHC(RSQ1_#$T=1Z2YV@>}ePMV*t23C&s{^ao7|09QI z1%k}^cMh-C=*X7s{JeHSyu8(I;v|LOv4OzrM@!Z}#~=*zq!iHqs!?L9nurVn!?P5KL z4e+K_#`8$EiUK4ZBI^sfXn57{Bt+Q;-wCwfRlA@Iq!7X=-#Q&O-#DeAW0A9Y5hUEf zctruEBN@YhQgKgTUnC6<41^v?v*w7B9oi2ZA&E$U?20{%ab7?7C}z!$%o-tLqY2xj z`bt*gPM5MD-BUi_%Fe7Jn>_o7!BDeuzZvKIcdfF${LmPF?jQBvC=y<>zu-9dL}2~> z!?l0=v*Kcmq-RSCdl@Z$#Ngn18Zj{i!s{;s%S})y#l;OJl6b%0Ujd8IYELzlYD>8m z)NQ(HCtLta%Z!?G)z}dE_57x-qput~DAW3qm$xPE{RdP(Au~DSTlIj7 znAnt|oyzU=tHJPkXY$RG_5gCg!+)QdY(i}w7({jZwHXT?@9mgs%pvmyUrgNQCNha9 zXK?4HzJo%3#2*8jDmzI@3WCKX15et43+SR z4sc@)i5SYlA6I0+XD99;*(J01Y_fkg{VnaT%(wXWjQKo!3TyoGtbwYb!}|@iZsu}D zrOf<^c;eQV?y#5ZUl-i&Xo?OCqiv0EG#;;JW}D6F7KV-T%wENq*bcXP|A}u{SsARV z!&RGXpO&R)M+r_@9jcV$^E$nrzjS!*p6ZId^o^A)mQAB*G)PjD2ccr0&z_qNF2G4-z|`5w_ckWdMj z-F4&ZLryM@b{^^$)C9ya9^ys}EUUw2pj6Eb=X+?Sk@pup?$swG>>#f;Ii}u%d`HXN zO_2*>u=v4_by*jzCff}G;fznF@Bq>YmG1GtnmdOzrWXnNuNJtp=W+kjz$_Kq2k>S; zgnwG{4lnW2J!r^yKfze*j78MGGu-NKikWn`}}p{CrOrvlF(vF&N1ckUs_P@Q(GGjtG^V9F5Vxd>A;{`&kogkpEwI!uM|xDoaWJtf4raF*@- zN&Fh0`Z0@peRslb`kEIV-J?{)*~2~w3G5#KB)itM%vimJT0 zfqRKld9e9736@BqP?4pO(9S^rXI^lSk;wY5Fg;k8LWboeC2QFesa!NuJM*U*BGzi^ zQF*5)M&a|80QO;?41N=UPU@Hw$vkWv&mO20c)ml(7*l%Zy9h=39lqI4yt{booDPJrXJ-xH5{Q@XNZR-Z)YaUccf?+R#(#@&X3S) z+t_P{@DcVuiW@&FkN5iv*O(Lc%UpU=%6xm8usN=U!w%|i2N5`gSzYX%IV;NfoK^L^ zag*o>G;Z(@D7;Em_`|oC_oe>%L=zM9_cI>`dFRhk4zZZSN~DW7#D36@aNw>!c#Ws) zwHO9bJIvo?mRb>V;vio_P%AW7sV`)wBdqktK$SNw7qV#4V2NI~Q9oW@FiVkw1;LHL zVSnqU@c%BFFQ|S9!{C#)>iihY=(*@;Ce7TjohFFQj@@C_{9|I48@W^nK6%bL%p46* zo$7$W`k4NHvswAiQVZ|c16+*ui)}!-`17w>hOrP8xJu3!| zWz+MKyKQ^|x(M9dNYLDaib7YCrC#nQ3w>;>;TF){`nq$l7E#ye`jh67fsC{ZGl8`M z&*N;)6_KyU^gZ9~LoCOG5^~L1n=UyMS=L$YFJ6qt?h(VC)%B%iFz*Y_i1br+Cwlh| zC1{!yJJ$EsudxP~ctH5qjzLHNjsVrRAOQ%FzBWHF!|1JS8;?P>a8GQjqfPUjOm|I? zVUL#1t^zexa>058rj)fYJ^Qcc^6RSnLP1dEnFh`^%ka19(n0vFR2ZSz#Ptkt?CW|+ zbuO#Ih9@Q65rH1Y+H&b;_X?|07{7jtwUfjx)CuQ1dq^n^c%uBAFsj8N!YkmRx%UK1qx!2o z7PZvzXGsls%Ig=4L0%L%;wORQt#Ag_m20p zVh3L;`T%rmtoxIzBqQ&3q8ICpu?4mixGgixFW%h@J$;u3yNg>9z*Ym6 z7Uh~St=il2eFqQSuKfv_f(NlI4Qs|~`C0YdnKt0kC{OqTA1Ho7?|mZ*elYVC#r-x&XE12KU;@_%R`ZefWqF2kxY{^=wY zm!R;0{0&YJnE&6v2|)H9&zzOOT|^kpwqyM?DP-tT;SJM`$E@bFm}DF3eBk1~-=J$I zLP~N-wSYRP<5AX7{QhGr!FPz!%eii$4v|#F5hlo2)3lCOwf0hHu(wS>a7BN5=AzD> zxQh3wX2tP5t)V*MwvB8Vi!R~v686oTaAae>kUn0-S}*PsN~uSyUk-+zP2Som4Zcvr zI2bp517)@l{3M#h9o=uGt!QHoRQBWe0^I)*H+TBO7(9x9pSk{y+euSHUKjq_v5Di6 zdVL)UoyP^j1`2AQ1Vp_BvHzBw;qJLGKLnFGAUbzADk`eLQt>NL_Kf*&g8fG@vL6MO zbt*m;1}lQP6L1l@qNiiMYO!~iZ-NFGE-|{I}VSjz-F>VLp> zFKXcbXVc7`Km_R5EfJKCI;m?##aoe{+Uk1$vQ6ra#+4%(BX-BdyM|e9Xu*_(^l0B4 zVGO}*^z(xIT7yd4EFUYK+tM+}D!%Xd5J5{CPU3pI^Y}sOf8xGLSlxc?PyM%Uo6pB( z<=;S}^go9B(8o@nfvw7_>neMTs*WyJ@?W_`?W2a#? zQ8CGUz|Tm)`nVR^HUC{tS0TRP{j}6$fFN4Ig_j&!xnmnLL~WsO%06fQnW-S@iMYAu z2VMa`P<};NVI_-IA2%a+ypaJ(_TlI9M5OXLZIO+BtAjhre1c+3j`S;Y{+XWAGJ~rR zmfK&s_ZZcj1Z7%d5yHv7a$~=^Xr0Mv7lB9hOZ>-X?O0gfb6liS_3ANlPh+CN zFwvC$w$hj~EA9)bY17OwKlx61jMbF|mx9YN&>-q9V1R+Ym`40^(AFP6zuIJmWm9l7 zC;tGBbhZE7uWBjM|0h@+ZvDy?Yvq{FJDgFUwE$c(kDD9Emx=Mot}Zbt(XO#JO%3&4 zE^tJ$?cpiG-hVX1_PlnkCtgu$>a;ak(zm*n4(3PwSz&>lojb&IFv%JP>DFd3{0IG6 zQ?NwDL|Ol6a|Jp{$RnzjvO9PAzPEkgV*Y!G&N}6uo`0PyIa&D7sP$jGEuP=rmj7gz z!N*r~>qh+d(;j7d@%jc?WH6(S<>wV4`6HI&_XK?$_-fU&%y2>ij`rTRZAXs(Cj8#f zK%sK3Fmw8Wee3JBPMvr0#fqIHc|8{?e|P=nVkTDUbuEDwhmB7)^fk5;t@=p!4(MKf zUl-kpY|eLZXXC+(F-htd`wP^yO8+wu4^_vLe61Fw{!6X2SqW`KOXjr_Ci_R5lpaGw zT{V2QvNlOuGqpWF&GIKvErRUf{yGOLgU;K(Sb!!DJZHs@Wj^Wsp#kg#x+Gd= z|E!(|DSi*41;e3VrnA~Ds%#L#lBi=wkBM9sIB0gg8b`V!o2QZTnyD>5;au2b!jR<# z+X#mtOd$V}z5V9PaD~Z|@p+I0XvM|G{pBfXq@e)T62rJC%X!WZQ>%iOrbHw$Dex4- zvvI9sHNZXQ#4b?G=gWon9pTbsTHG6Z%3jdQ{h4!~`?AadCtqW^(l&j>G1=vt083;8 z%5$#yE4*M_oXR6tsVy@Z%zgQZw~e0H%Y`y6WU+vzMQ}=bT!q>53bZ~~n-H0j{$;7N zNNYOZ4CGU1TKCDp*=;^0NQLyp#=_HNc4pL=uR6(Omp^+LbnXV+*Y+%j18uZxQXQe= zNWIs>K~Q>~jP3Q~+qlOj?39vkhehw#y(1%He6q3#xisC%f7RzYQquy1w^%?_R8%Aq znRgtQnm^TmSHF?#--<@aT>m6+v=u%9w|i$Or%sJrw79_VQ38~V2RS8C zHItNAN(Q{+`XenMuy?4IDXs4ZAANZuQ#7PtG=L{W(^ld1Mys2bx1BWZA8wNEtBp0K zLHFum`RWGf4xmlsbGu*{J{9UkqjUuhrP1lR*&h!bQ~eV-TgrPL9`pBpr4jEx^ecgx z4=o#6WcRFLUf0KOp!NvfKtT=RXW|R~kk1ap4-oqRO8((z0KV9V_X0lyxS_>_!S@8g zWd#Blp{Ua{W+HgWpa_~HTx&=02qMh;HSh^Qy-sFehK2@@w{4voSCSH!iq&!r<5Hu5 z2vg0S3sIcR0h6&0*Ug8Fgx%32MIkueI2ccy3)1;w!B292-F&{rHL$q_QbbB>T5+ki z!m@D2eL!hTypYrBnNq9HZ&8QcEcxf>*@Gk-cpeQMGq;UDKOcj86IZOv$ z23zx?iK@yZxei7VxIovFj>GYI8kMUIOR02yr;%3t)Vj)vR~9+!@MdTdu>=w_YeLN^ zY2>4ivwJph2i{$(xN}*&L3{Jjhq!@R^%EI&8@EPVF%sW4|MAIx4|y-X7K zduhDDoUSq~UNmTRey7hNUO(PTJfgp#vnfwh&5j-zggG;&7_8K=UBCjk;jZO=K_25^ z+}CTpbN_irCQ|@P(|j5{O~cK$3C9`2?!e{!acb(EWu4RWt&P0GkRlDsI@0=>T!NM{ zeTh}n#P8un0c8~xy0a19@`d}pNos70MVkJ7`s2(<1G|?iE$CrZJJvc_yB&qceqe~cT-n|aahw#L{`bJSM_mOrmb zfNQqw;d-V%WMr3&J`em^0N}kVsD1@_5hM@dhA`O65L}zXvYtsvHqBejzAvo?2k@yyUn0x#;I_WEJ&8(4wBLNy zieqLgCyQWZc1@epGea!X1^%}r33b1m=QOns8RyPO@)YV;Qi=unGTvl(Z=SJGc#@dDeN_zGb|8O2yj`hTuh}^v=)d z1rHM1oecwgL=P6SYX>&D$N={Izs>P=dHM+mD{8mQPgd)Kr=YgSeUhR ztI?%TQJ>-1I$OTBG=1qo^3WWS3*9ZIRPWJ63%HC*OU|=-FC+hJa z3LGB8?m8VGxcg*_$gSPWKGu27w5|Y6|3I=U>=O^RuyQ)WJLd^FiEgqtVK}5$rs_2- zvdApgjF^=^R`bb*<_~?3DdI*yJVGtq8Jn;|DLK+vx)JNFs4ESvHtp5#DT`=lk~22^ z#`6_biq=c5wU27u>(9~01WzG8)S3Ke9~1m|JTIQRoVrcnyEO zAUshosW#ul<_)$5NnbDRa0wCwxx|enowa(hJC{Rzw5%p5wnH9by7jnvviFeAfL=x+ zd+zg02;k`0AdvWg)LS2q_qnb4NGC+tGTKtSPx%m4`l1 z%bYyxA^)ycdmTZ4L)Mc;zD<5l9x|tAx%n<%qXMM?B?QP{iIqDiX1x%rT{X03!L~6g z1WCYKzy09yjv$CsZQ%>iVoNdgupH1IzjmwvRsn+$i0#rgoImkGf5_{1W&fh;AQP+i zV>}C5pRFiFw`te^QsGW6cZg%tI|&)xVpXf(6VrLcUwBtO9Xyz~;Tt>BEH0gt`7xlP zKoUdPw~@g_yx~hXx8G@ANT=bixh_y&j%I9ErT!Sjz|gP`WF$fRb0}u`#P%=_jqCLf zdJ2iPJV$LuT^+O7=M<$T2Mpruok7`F^mgOOh-feU1|u`OT2G%UyC0$<&^akLFfas0 zmu|j^8S}pH(`e57>EDap0|%oepihLmHE{7II0qGP5CD6>op|%l>jo$DI83h}Z7S)M zsJ%No-MZ;DF>$-_?nLg*F>o_sa%IfY+pctUu%l~Dwq_%ANWq-p z;o#c`u^ommT!>VQnZ$+%uk|!C zuviZJ-0CGL&r|7N=+)t^Z#c%Pz2t_em!(fFViAW^#2X4>O zVHc2jrYBERc^}f}VCONy@+)dIDHDSiymZxq$?fsJzA~uh3b@Ls=?|er4~~NECc5=Ik$|K_yT%> zQG=lKnb?U4M7)=6Cm3{hO!wF5owZNnrTmC!u91Y?S{G|0!u8p2)HiDH3SCTR!9C4C zh&!uu5_m$gBC9cY5SzYvm?_Qf@+VYo!F@9mYBV|0<}{)!E2fZfls@dfDT}H0JMbo&JO*$ zBy|gV&>X|tCM%VMd~Zw6F3=`qn%pkB#&uZZYcejVTa|5<>L3(uw;P; z3&%B_->GN^;UKzefb!J0XJ-HI5RFq%<^jJ^mje{Cl?2Z;DZPvb{rjPN|H+>MQDXBl z^mZefqF7=i#8Jwyn(pF!fiGv#RI29_9rmXkB86QTHFoMY}VX^~aw zG_D&=V_^4nN6)9F$Dc0QQr}6sv}@JA+G{$~CW|FzHz&|2Ie2V39Nx1RqSDqs+)i0t z)0aqnJnM6UZ(%n(JaQoF5~y@CMBrYCy~=b`9OBs+0i8jg+<~N7RuRxLW5vpi(cVwe zI+NZzrczc&TWJi@6_0@?t811{ZjP`Z)xtmHv~Qz*EUTO5 z{NaQKfwO_Ci7K;_Xc3U^y$y0ir%97 zf3U-y;QffJlz%2GVCY)Jx=b<@BcZNOWJCTnmU0S{G1G9C;+6w@B0E;%7T9*U=ebi6 z@+~sbT5b)!O~0XK0*GbBT`+kJ7E6=@_g0xyec(&ZNW#6Fa(N?}=C%wXx_u%r>mlL? zMe|p_fOaOMWkfL!4%u3%A*u|0po@m872b&$z7i4YTx9HTj%(xsH>W>cGbMg_#l>rD zTT!#05kY`OfNRADR~S=Pp}W6HCts?F0!%}xd{$B{SxU(FHLz86g4iSYu>PS^Z^zPN zjNf5nU*XaH#^C?d_LgCBty{V_36>DtEfCy2xFxs~+}+(>gS)#15AN>n?(XjH@J-fQ zd+*iVyT9w4zWVU1s7cMLdW(AJc%E^OF+Spi-2e&Gj>zYhMCFd_HBDRRLsPY8Ap92v zppbOQ^zPY7VoSU)do3LStZ(Aw9uQ2H41|X;H$46IXnYoZt9m=W@ZAcksvJ5bVkAIk zL>0L&f0aPuOVQCSWWLwAQU3!_hW8bB{zLv)#q&IDO?I$t64hepAqw%8&zh_?F5m-M z7+=!bu^$OrRT{u;9%R|4RM`rThs%BeSv&3Lu+&Zfto;Z#cRuJ@j~o zSJ2VWVO zjQfV)MbI%Y5TwNmAq~hQbMtMW`^;zJXyHX5M}i{^ES4h}P&f+#wy=EwV^C~n3KV#d;{N2zkPcU(bR>wucs3{_ zp}zfS2Nw<-zsoj}*E`sBR>dwsB-Z5*v9?5rdyB@NsaPS5G85A4YdE1n4;oNu3HFCQ;1VNyyDg$4n6+R2h&l zpq&tOB^a?ckT;FL5=AkEYcKS8Hb&xaUBT+RX$>=9K8`i-V1!NGdw!>h@18jTjVpDG zpB&69>s(fmVG7D`y!z_8>$YO12BUyQ5zyMPLZm@&Vu8*wo&C7>Vp}AKY9a%@>p-bD z1I67TcJmdTHW6W1L}yWxsc=;UPjeZJ_{7oc`(@9MWrOzwGit|JcN^8-tdlvkwINa8CX@?vwLKaOJbl^B2RYPu`hQgH?JHx1dgor|_@rN%G-=NCDvf2)|73n5NXWG31IRM z&=(XQ5izs4CP5;P*P@QOe+bdV-gFiC2Z|7p?drP`%mJwtqUTw<6_!8^&9C|7*~?Gy9wl=>8mh$OKIQKn zVV4p3^(CY{;A#hkfx7sI948t;!L8>WS5_Haa-bZ4p`(nTh$N1=7&g4M{gSM3Z$$wk zR!(wnw`*6xm_G{4kkVN0wuMP&)j03``QalW+|NtV%|zx*asxEj-Rl}Nqvs11R(}ML zW~7|Z*D}q!&YKh>$zuFM7A`0`W{{j>ns;<@=1$=VoeD zk7XQRQrkV{0;AxbBrVFkT;J+A%lMpbt-;hTu5+Me60oF@&hX1xUVhl?n-jYh5F;gJ z`&OQD5xnf!Xhy|xge+EoLn6tk;Gn-;pR}P9*o$BQ`FUx8BMx-UGn%styhjE5!_;9i z1~;)6bEBO>&jg;&=cOSyZu9k`Ul`(y6Xy`&M)eKlX5N`n&{!~p1gU5bb0iMH5MM1>gc`2;&(WjM*SdP;#u zKerHvzg`3WxF80kgUf0wr%?@bxFY5_B>hp1Ow(9=U=-+YdTzdAv8KYBaopJ)Ph;;0 zpyi)s@q*Q%4 zniSmzRY#7gxc;p{?ddHEtvhqkBWo`kz*ZgWv`X1aga63R@QFe&&2%Arg%NbV;px4R zXKXuEVT_~nNy`*DomQ=o-EEheWCmmuG(u#gV+_rxC{>cO>lusV-G>%PSfgMn>z65| z;93G4vkT>5$k@wBT8FqAW-OtU8SKT!5@+5Xx$4oX=-8=cqIEs@6jtc(7W34zl~6e6OYZfdbSEpC zt1vl}#_2AVS`I1k0-aTxFeh~kC6}Ie7&dLmf6Y=SR!+z{=5~ow`w&K;x};vVTkVl6 zXFxn&C}@&2+*l0McRzk?DVFY-j~2CRJBdy53s6MoQ0!=}wWs5%qX|8vh!zqJg_@ zzm+bQ`Xf$?w`DgT0UpaWBK=t+Vvg3Q?2&zj8~%T;KEYj@rkvKBEy?xbZnPgd8xRW} zP5)A# zms`TtR165!7fZ|d1W12)wlp_PZeQQb-*938-3kG^gxFw2eN29v^s=FP=t^OUhNw66 zqtw{cSgI+TvhPagg4DRccLRl3X6KqN%f9$YBTwm{3S4P@5j*<^{fY_&y`QEBv`v11 zfFD}JI5loocBOE2SF;;!oLIeJK>fSy-0Ny z;8_O8lC9tyO!TybP_s%0H~%1cmU*w|MVO&0w*PC@n*^_a2ca0Fw4^LX(r|5{;(z&Y3Wd^bU9>P!aWb z$-TnryiAGJX4i-=Zg3GPDMiJIuixo)380iEI?0KOiW1nIpn(A;{6I_AqSx416J~v5 zt;Cd>)bD`IbL={rt5;DWeCae-Z4OF5ZJ})M9A9|{RKixQGRuh8;b4bISfn1hg5X(4 z1HG7bCk@W8t3IlJ_|Q-aEXJF@bM)DVVOoOjclK`nVGT?f!Mborbi$(#4h}Xr^4ag| z>NYBb^7&H;DiV?t3#iCyLhVyxy(z~JgMUpKIgu7hcU4w2Xxd`(2C#F|8)q0-1(i4K z9DW-W6Dm68&r(?Yzov}*D=+sKJs$bzAmV`kUV;91iM{`|6S#1I25#`L){B~HMs)v! z1-Sd2!MN9arrwlh6Jl9EU*Q%^lvv7@VgVs)+I7zTiRK`Gx=ez=m>O`Qy^wV35A z{5_v_Z6H$>S}9#xVX}`eqAoNslVITNsb}*eQ-mRDFRX(7i(>3B)lN|n@k;Xxo}_vUH|%;#_>#)X@{%Z59otgAfwDGO~bj=|Cd zXI8+f9R#Jho5ag-PKpeq@?&*U*ogjR=r^gUv?ctiC}7R|H%3hB3PVU8vD z76$u3W0{Z4D^4$+w5AKbI*k%v3$_9fT>?1)cHY54b!72*66dtuTS&bOr?3QcPnCB& zyxd#KaVB6xIvJu5e_bpCX#Hm zS(An~O2pcu7;9-JKq7(Bbk0VJWp^J6k@Q1gy0fX_*E7EZxkA}{=!fLMJ>!OOcTTV@ z464GS3q-h?Wlb9wD9_T0Cb=`+_@XcHZC)Oi&PB)~?0#5t6plej!;KooK1_3H=JydN zN)V()7_MOB7{A!jBXhd|maS{s8HKf>KoM&0NI$fn%+Z<_ zD-KCnsfi>&*tgo>X#q|7JmY&o%|?4E8w(|Fbd1tRGwFa70|MVY{o@CDRo-;;JJY0t z!BAb#4`C%sp09%|Rc_9lXru4ZSu5>8{X3-J)s@f2Gw?R9Nh$ZHa{sUo`bnGaOL^I7 z#f(jclB8Hx45=`7N&xIR;Si$XkNTj(A|mF3wf6UwZ-!bA@Y8=7j<<>CKc&)`5* z3JcLaj*(aO!MxjeAT`Bm$}~Pk$h><|W`S<=mpLK%>Z15&Pqm8D0p;S1H^szlBmgI9 z)2zyH1q;wK!4%vj?@6`QI4Fbyrk!)(0NW*`Gsx5*@nZpy0(o~F;EUOm&Z$r^ai2;Y zQ!D>XBgh(MK>FZ;t0pyHC{LYcO_+T+6rD#`lhv zT~|ielzeihc_ieDG_<&#ucKHLd-;V(!?YnR2n~Kvs}+pRwI$&E z<_hP%oZR}zYvpr_lDSz(yb^;Mjs$_5+qxex-BO2q&J#hhE!kP-83L~ zNZg-oZ&j;)jk>;9YFHL$r3C$E_)<&sW_{AW+4r!GDM}oNL$4ID(~Y6}?GM z_{=tBAWPS@^;K3{D8#nXKhAKx8FEQER=4_f-<>NRL^4rJh=JNHg5yXm4UtNF; zxtN|SyW`k;pOOynX3=}*2tEZ7n%=OVNDGGP_ME}cPL zv5w_Q2GKstvP!@bem0Iw94!3<%vp7#gp$XH-_`CQ-nMVow&Ts5aysS zDk?%}()}`B;Jm&g9|p8z(4z03w)KS%hkQHy{>qut8}ceoS&jyoKf`EK;15HQza*xb z5rx7@+rmQB^~sD{PWVy*Z4{(p$Q|n@8wJtQN*}TR z<;6bW8vKi7fx7K51X}p)Qm<$E&HTFUa5;DGVXPT=xXhxyv_Z~L-jegRZzF60>kCvJ*8>|;_D`f(V456z6Yl- zQ*n|B+Hfp5C(xCyx{P20g?D!MvQ53}#Qh84a5R!JSWb{Ww*6qZ zoGC9^L>g-+E-E>{SGUy`Qn|X*Ji9my&bbm&YNGd9p`<*WulEGJo$Y?Q%xdHhqPA1O>u=xe=hXy}|X^6AtG_lNeSc?z3t=AU56z1cW+ z+$&aK!9O{qub;x^oyL5C(nYct{bf!($gex|XkxiPM@@kM{^?n1mI*^rT zMRXpE_du)w?vS?mQx-XX;mWZTuJkViW_4r&Akz`en=WrL{j?^ju@~(!rHBM$=0uN_ z*plmA%p>%FxBt4=`F+Ch6XCEFS-T9eTTbAN^j|)zQ6#eg2}uV5{s~u&?XFs}fSp++ zyzfb$y9R)3q&dsK@AoDR_%@NDMqw%%yYYB0YV&5M>S!ze7c&(|-80^OY4l?alej2xPK`hgZr^oUV%(5#$@^44d(Fj-{;M=h3F#<= zzFm9Uo5Y#j@A2n4Ms9YnxVKl^e)(UoAKVA(Mr}hd%9Dc0f0YX5jcg~-8^JSlwlxp; zx<0z&hJ8*PS?T(Vf=Tg-h;As|!`qBhZGrf8vHutPhfAeC`c{*!6$$)p3CY`M zbHUwtA9+cLGNXDL=BS@je?&MQ^)pp&Y@2JETSGH2*ifS2()Divj-Rz-%*@YyHjm-w zBqB%xhGIEG*4D3S^_|Tujg~B>wQh+_$IiMRv33qB%L;lUjGD_AxspcA)N_ZEkyzHa zJp0`WvLJtO?A^?>U_y8Zjxtdh-L8;Jt3Rel6{ifh;GX!8Xtovb^+UeoF)RLbjYj4{ zF1t9{{?On$eMD;wA?N$+7e!rT?6ka|&b-3!Et4aaXP8I%_^xIx1p(Ofkvt{>^j%O* zLh75F=9*lgj;vpP-p9=qPkm-8i<|jZ+6vB9POxz7;L!!W{W87Psr&59M;@55rXDo> zjty5IEi}ixQa4I^gsIxjTU$V%hpxV4Dou0T*K7M^;P5O+?UkTxU z@4xNx&%TUWZ6&W1u_f)h85lLkl_1;Cl!K+#i{O9jAd&zlI`gx8P?BN0)vqdWPO8>{ zgO7t!z12FWQBxexz!+h#g-@Kt+Ta4Hnaz!(p~}&%R+opXL>oT79qzG$0%gtBUp{5B z?*67pwdT>MqdugHH8nXxLPM+l1Xdqw%WE0ZKT>`obRe?XJj0ATaSPn9PVZVng8jqi z#M>D85lEpYQrIQXo1vYj#Km1l?z+k7H1WmV1hSOzbVPBmdDO_4ABfupp`=raX9EUiO6qGwA3KYx4vV zG9A6GmYXrRB8z7#pF838*!l@yO#iS_nCnk`W&;_~<1ThEt#tf!zjFxlG#r7}QND+P zKH!%a2L0DB0bAzkvJjX!O9zRs{A}{ks zl9v78`NdcA!inXES?qU)O}|Jj8BbgVI#NUUBjOlzm1rX^%vKT@y3iWUdHxwvp1f>7 zA?f|H_BXGp;B1F`aT?7X7FJ)B{+y(fY?=D0{X79=F;97{sv?XKq6M~@>5SG)d1RRvTrWOr zgnZ2EP2diolfjKV4o~7~3)_C0->_+baff;XXD*2^E#^}FW@ci(uAwRZvjy_cj+x2#&t?-X^rpSAxFR}=C7 zKE{>JE+AjJ_ozvyTADF?c1CTb4T0Nn?LA)1?@C!5IdMbyDk~@Z4?A*1^6-o0vZH`m z(}2aL!sS%iIi(TK-zc2XRlIo%&S0!v9rk2;?$RIb$y~9Br`HBM7jR{>Iq>!a{xl?| z+nJF?9^uf59&pV_>eYuoo@Yia&sGuhz4@`dwGx*}iN-)iLL;=E*4Sy|6y(Kl6%6;|mj+ktWvX6=%Z`MI#C~ zwd#1ZBzz(&DA@3LA`FguiaBluA}qL$@s+e0s>+ou__oR>EHyTVxy&96d>VWAx`N#?l*1gE2lni#gIWT70)LTza2p z%ZyrN+%{8^HHVn<9_qw`O7r^DqNB~7J`_FE4ffiw1s0Q0@H@xC!{m8C3t72sVEFZr zT3JHX*H6xCKBW2s4fXnsg{SwMy@6q&{qocfk8Y0iJU`!G?azl&m)4G2?J3I1{ln`V zRU49yPaZm)p=ZeIKwJpSZwJ>EcBgsTu9nd|bEGx4;aH=1OaGqd@00;XaR>IuyN>efFDbsz;2qoND`v zu%X;^_#0uvBkM`aLX~UeTLptK zor5SiUQjLlwuk{%QoZE{*mybJltmO5Ut;^H11>Y~g+soRm4`JjfSDfsKU$-5hwlAT z9rUcl?491%K!Xb$Hh|Ix0tSvKo)WdrQ3s8-Jm85@F(ehU{_~H5QlRJG9+}zq zU+m0iWnWT(i-sa=cjPH&9{>RAaoeJ-cQ$ih;8{<*NM5w~@^@WWzV?Oyz0;&8UI%I# zh;&)z=8=%%-OnqAwr9P)fj4~0H6r>SWZ{b_^X%Y0Z<10VB9UXc5|XR^asMUt;?4|# zkKpJiqcvlhoPc=v-h5i`1bgTSE-sl1i2kA`vz7@z_cMKO}Q^=Qg>e3q} zf5ht|0DNHh@V9m@Yww=(<)=UKOBpWIA-oM{;)|rvGZXI?Nt;_-M8x$-9#rtEcVib` z9HImSB(e>LR(4P2bfs;(2+-yaIR^^o-wgD9Ac@z>k)=IJen4@Ywiu?%w5^=2pdW11pXOR#)JIQ8jXuYa^$rM0Kk zHRZN{IKR92e<}s_J3fH?DFt=hTiTR3c^~DSseL%a|H5%N40fQ-Sq`SNuwV|R!B5n9 zzc7blF@BSqe#B{cBWj%daPaufk>08q$ZhRwavVK=aN}oXVsM(1zrkh1AYc&S4F9%( zfhmGCOpi1RZfCZY1~D<4N17BZ%r95rpy@2__8k$^X-_^c$)6le)GF$*)_rT_Z#J4H zG>NREi8QgsXi-Wnl~4HSsQmeQsv zH`q7bIjR4SscC64(6;VoC^L*8BMZVli``MK!5IdZ*oAAASPK>;Bi;aa&|6qNpluek z-ZV2g$D}6Aij*j4>&n$sz3#H0!6z5Bh|&u(H5U0U)OSPoL`7B zV*wBWz;`bJyxu}4&+PwDzu{5YfVzP%)H>*HWWN&&ugbLU4NpApr|p377^(R^1VgpW z6MR$sVc~@UEi6u}^j2tryD_q!gyFjHzqNkz->Y%od+vh1^tMUDA(_iX+7l4db-b|c z8yFa5+GI_Vq>t?^PzqdK5M;`VuRK~~>*#Q80E7!IM%D)w`;@6dD@1`H42oM+=u{3r z=4jOO1<2&Up{w`%gNz1yB)ofyg_QE=3M^&js0<1?1P>BeHrL8K3(19}aM9xdvA4f+?b)(jK~&>l>68)!Jl}+#^BAR6&LX&d*(?h2ik#V2mfoD)!53`NY>wJnyCspBQgV;;=)e zsL6vuaBk7Kb;naySeBs(76%I)$BrwlzCyo*rI{&DoHWa2H{GyiDYNFa;to%nB$`;1 zaHZQqfXWkzaGh~Cw?k1LeFob5iN-q62##$R>ib7B{3ZtjS8HD`E~+8N8f@Vq($HBw zu$ZfDAUuI-q_@7a<*LSLXTb#_uqv-Tt!Cs$!~ti-Ha(418fs%Gt!f`^PYjPM(I@;n zq=MlALLe2H*rP5+EQ^f%ne;}2C7T~HEnhh_Z0LNkU_%wtpi`#l@;JOHR_Zs6u!y3t zh@LrV5CVbl$6ckDbytbm$Dnv+-D0_=E1EDM-1|Fs@~ll_l+0GQv-X-@Zy2PYaM+)@yKdF@YY z>9?i}DJ;w;f?03eNGt!{@+zm-XOAb*QFk*Z=S{?s1YyF1Y41DrQ!&7bXRVt{7wV1` z0H*C!P(PaLUJr1+KppYLzlgKeI&!zy%89VJNaxFfp_P*SBFCx1nMe(KrQYoIc6c98 zx>8h3mWVA7XVVsiBus4-Tut=nSJVT1PWXnZghwnyYQ>-O$`?Puj^gc`Cv_ z5{<22@`pIo_9EM-3{SQg2onCv&cpx9vv-ZhD%NoF^K9L*maCK$KU-{XxfPgb86h9R z9@d&4I%H7SAFgs@2}K`(J2VvvZRyGQ{Gv)5H`-!$&BpCP2h-iiEaUEqyBh_SFBLyu zX-kY&LgKmdv2?-ixBH<1i{t4KxRh(Ya3Eo9RfcY^PObEWUlj0L!OmgzP&Ko{>#reS zL^-*0ZucmDQTGYgw6~$1EDMX14SF-lSMMC-9I`}rVI6RLyL&62OPdpwb*q7L!5ULW zZle`I_JY>ZTJ52lS+RZo74wB?4K0^OBd-|z8j&0J$bI*_Ik&+Ftxo^t`Cnw|v0j*ocaL*Zwc9<_ z7o?>^FubX)y6fM?9-~MIRToEW6cWsWVzu7tX#ABYpCnqP7&e^+x8^1hT zE$9P}PeW&AH8(#$4geKOeqj`HSJ|uV%TjW&F)_$Jl48b-_#&FqY&`3OKfNwU68=ic z7tC*?z?IY$vYEYt^H03dpH=uaV?Nh+(%j_x<*po0dw}waO`iNWDAR$ zmNnfIvX9UWLruP-LZXeMN|ihxv@-rKC7P@LgOnfxYNN^ao^#>Ba{=+FRP7j8b5}lP zTBO_NXH&hMDuJ|7&CqZXW-7|a#ioHaRd)mDhLSSR$e`^vY6Wil zkXi#^$=hT9d(@)RV1DSXLere0h|zw?5b(2s$Gv0$TcRi4X>%cvM!!UT`9%fvImher zNceAs%b!~4Z>0oLujHv{E5Wl2CFQX-Z=;$V_bAzpZ`aBAllv(!CdD&4ODiD)1}-h^&FwN`(V6Fr3ih1?rxN0R5dI5@&e@& z@7iC~YOyX`%KUd++yO&_ip@{3brgMN3ViXQQgNEo*V7Iup>8=^s?a}zMemD^#LB+C zrRiWuy0VS#7&_C6GvdF)9}-%RO`8*MFZ;z5e3>6wg(h~S#2&X1F;ej|3|tegeHmAW zPI+%JAroD4@mFm8wdSfm_1dQz%Jw4=-5|Qejp(1GVL8Nm1N`PSbCcs8ub)Mogfp%z zSyGr%S47wA`HjPigUZ|3EZ-dTn~1G8+gMH)P^)~olfB|d+ew*(pm>CXp z^|bSIo||gvn-TnS?HO)~jtznrcEl@-()AP$oriOzWd>Ev^^NO&;*1XMNRarygCoQK zDo?wA{z-_XZb zX5Oc}%RZ@SPaDknsb{SA^-G$H4dM_!H~+b*))l%Hb5Rms>+kU)?uhg+)W+Nb{m*2X zJ9bt1E-9t8J*ZG9yD4)LSM8eSb>(>WAT9*XS4D&IGX58}>QW(!2_pWHpdW6%FKZ1X zF7ESQbH2~A8_B~<7Oslb)?k>bzpi@4^6~Le=YJ}3h%c5t)bd+rxCSQ-=v3mrSV9Dsc&_wqB5xW@$jUCxnD4sHt)`hd^FEy}BZM zR~T_CIO!n!@U#ZyZ`ckHF{N$iQZ?KLy4ADZnff>_J<#!*^x?4#^> zLrE=t0Za`2FYVK25nDLu1xU!6Q7@tp#P(mpVz;zZ6W5P|I9X)IXRdJh-P0UUIB||@SQ4BbLH6JpUFe>nC5VC zq&Ssa9O&@OU1HbAkM>K~UrUk~!$9ac_&9oLEe1h-VEKBbR0V#~=`WmNfT7u7Sq~k; zBQEgm%k(nMo;mg`T;1>Im|X5w;gw;@-q(@h^-#yxcwT;-MRYq0ye1w;KEN- z=fvR&qcb+H51)OQS0#7L)Lbiw#@&bz5F$l;26LvB1!6%CY7aVop{3=-yMbEJye4wA zaUc%w`j_BsM27j?FMxO#v};uvuKB-1#}lusNyCM06O;V1W60*$`ID0tzLnv;t4nX~ z{gbk7rp~4f5$))PZPJv<3c82)6TCJtV)~xs;Ea|mXj}T>>qMZJI7hicYu|HM>{2@Z zkfJ>0oR`HYiQ`5KlMjS!_sLnt45I_RF%Ry+v17QNi#1IX%;xa9c+vc-7moMouMvmz z%HjPMuYiEQ9Gk>tU{;hkR_NoG$dn1Km&A-6^UA0)$v;&6`-8x>j>E-1RU!{W%U+o*J7NA3vwL z9|+&-mn(kDJ0Chl8ueK}Mc90C4g%JMXlr}jTa_&2z-({!kxg6Py?_?@?rfjXyXX>Z zj~I4&mr7(vZmMc?r}uA-UT~N4^YLYKkVUBO4-rse+`@}4EduupNaerpSE*dJvOq*Y zK)CO8bjz0mc8o3QNzr29Y}%~gZ}*p{yblZr2vC&x2^{02%=-o$!jF^r0vtjZB#QtJ z1#BY=0f)M*p$Pv+4}-mhaL6@kV19d=m?SOq6LGXNOd)y(hNa}Urxe*PD12H@4%%jn z0E3tzldE`pW~=yEyPoEJMRibN`x~WOV&JYw?ih7rl>fC?^?&?kSeLMZY&1q&r5f$2 z#3pSuZ1otvu#yGFQpnfQ+=m(~yq`Y3$UP@xpFX(-Sjy}Rx<5Yb$_#_jM^;Ns+{c>} zI}O6NYLA9E)Y&S^n=Yy2CYfhy3(WKinPd0#r~{JN=vhIgYGdEMY_j$hHdL`VFBZjXyM{OPEfKzTBI&fo z{8Kr!@zNPcCr(RnjkxiK&Wnik5{`T;W2oL^MgGDTQ-|4V#r|692^Lg~ZE{sao_T)I zyDh!+^{H|=){_t4IjV_s z#+IESKlggHwM8R2*{X}p_vBBkKGd3Sg|QUyZf!=alrZ= znm=l&{#|Bg9SAL*TI;5B4)=V_pdX5j_m1iPW{k@hy7wkBi#WXnG#)#)xgQfr0`70X z)+8IhM>`hjz&tH9w`Z=*W2-(uj~25AN^L@9`a!RyCG(tAW1l%_pYBdn`T` zXXrkgV94R1^Nk*gak)98SKe-GfmP?;j(zSnPR_3om74zjzq(#x|Z zb>?KpIpH((2D(nqnxu!W&0OJ3r8h1z;&nv|PmF+bTu(q$EZl6KzpI^W%B7h$P3$sP zYAdYFVpX?|kM#-Mw@&>;c>jJORC^}j3u4k=b9mpOJTc&9({)| z4QNel-q(9(sS84IGkKa*fm-EYZw15EAl=>8Jbis~;u2?U4ztVAGwEro6)91Rg-AuG zf51C2ME#ZqjE7+K4{{Ag+>H@g%iM)f5nq5qZ*OB)k)F(h(#6&qTvBk{9Lz?nx#Tbi zj^VFw<<;(S8}6CY=Lh2Rd0e>|mSp^plP ztPC`pjUIWoi^J%IbvRIxy}+6@wwoBa@8f|K1Fh%;K>d}&B zBemCfZMyzRfd8JIhec-3@CFc@s@Gi70*fnkKdM&JN$K?PQUA1*w{-WVdqWAyFlFX*-=Dgt~fWnO94>W(e z(_Y4GQLK&XS9|spvmf?Im3;p|dycz_G4Um7cE?o`LesGz`C~+HTJ_+(6FFMnw(ga} zk*-LxyPud@>)|#nzo3c;@4{H_+CX(38}6uiR~Tw-xE!FxI|rt);Cw2h!=^ zlPX$Zf}8Dbt1({iNn(4}^TOHk5bpi7XnN>Z5~DDPDQMcYtNZP+Lr7XZKJ-Eoj?qCn zjJn^Q&yxn@HDfgjJ_pC>Q>A3w?iJnwk>L|gk6)Qm>FGG9hLg#Q2h|l68lr6lL5=UQ zBBEL)J4b=70YCQoPJ*P{NV?J<#x#W*8J+jH%3@pns?t_7uH?{F)hA-b$@{mpeR~?|0#da%k95iSMrY#0z z3RC0C&Z~ZN|CL!N`oo;sRHai%a(X=Cd|`ZZ$kRF(gQ5iPrwWv=J8CniTL`7q?0p?%7D%+tU^emhk;%?J zRH9tlgZ9j6h0B3ayD?DtV{~>U+uA$-Rx{D7)~knAGIWp3quBYun>amNw0c9p=#Qj$ zG%}0gr5SJKs|8)il1LsakY{NTR<4+i2)gB#m1A>z4@|N+8pmI9O!vt&BImHFDTz3| zD)J2^dOvs=iz{lrkXT?&AB?kBP-H+ll$T<60&>Xd{Go5>NzgQy% zb3I1awX#0dS5IxpUE(ep`Oi<#1Q8V-NK#)iZFjU%x#$)NQmm}j8yHQpl>BbGmT49ON literal 0 HcmV?d00001 diff --git a/parts/Plugins.tex b/parts/Plugins.tex index 97ebc58..ae10f4e 100644 --- a/parts/Plugins.tex +++ b/parts/Plugins.tex @@ -1291,7 +1291,7 @@ It is important to note as you play or change the frame, the plugin re-computes \end{description} \paragraph{Shading box:} The boxing option allows for calculating the inversion of the digital negatives in a given area of the frame as opposed to the entire frame. The program will automatically calculate the columns and rows to shave from the frame when compute negfix values is checked. A default box area is initially calculated, called the shaving box, based on where the min/max difference in a row/column is less than the program defined tolerance. This row/column minimum and maximum difference must be greater than 0.05. The effect is to cut away the border areas with constant color. If you check the Show active area, you can see the box in the compositor window. The boundary search is constrained to a range of 0.1 to 0.9 times the frame dimensions, to create a 10 percent shaved margin to avoid over-scan and negative edge bleeding. Manual adjustment of the shaving box is controlled via the four sliders on the bottom right which move each of the left, right, top and bottom shaving margins. The slider bar new values automatically take effect as you move the box and you will see the right-hand side applied values change. When you have either the rows or the columns where the minimum slider is greater than or equal to the maximum slider, the default box will be in effect instead. -\paragraph{Optional postprocessing:} In order to have the values of Contrast and Brightness take effect, you must check the Postprocess checkbox. +\paragraph{Optional postprocessing:} in order to have the values of Contrast and Brightness take effect, you must check the Postprocess checkbox. \begin{description} \item[Contrast] is the difference in brightness between objects or regions. \item[Brightness] refers to the overall lightness or darkness of the image. @@ -1329,35 +1329,35 @@ Be aware that the output of the chroma key is fed back to the compositor, so sel \textit{Key parameters section} -If the lightness or hue is within a certain \textit{threshold} it is erased. Increasing the threshold determines the range of colors to be erased. It is not a simple on/off switch; it'a a range color. As the color approaches the edge of the threshold, it gradually gets erased if the \textit{slope} is high or is rapidly erased if the slope is low. The slope as defined here is the number of extra values flanking the threshold required to go from opaque to transparent. The \textit{Default} button returns Threshold to the value $10.0$; Slope to the value $0.0$; and Color to black (\#ff000000). The \textit{Reset} button and the \textit{reset} icons next to the sliders always return to the value $0.0$. Before the sliders are the \textit{input boxes} so that the precise numerical values can be written. +If the lightness or hue is within a certain \textit{threshold} it is erased. Increasing the threshold determines the range of colors to be erased. It is not a simple on/off switch; it's a range color. As the color approaches the edge of the threshold, it gradually gets erased if the \textit{slope} is high or is rapidly erased if the slope is low. The slope as defined here is the number of extra values flanking the threshold required to go from opaque to transparent. The \textit{Default} button returns Threshold to the value $10.0$; Slope to the value $0.0$; and Color to black (\#ff000000). The \textit{Reset} button and the \textit{reset} icons next to the sliders always return to the value $0.0$. Before the sliders are the \textit{input boxes} so that the precise numerical values can be written. Normally threshold is very low when using a high slope. The two parameters tend to be exclusive because slope fills in extra threshold. The slope tries to soften the edges of the chroma key but it does not work well for compressed sources. A popular softening technique is to use a maximum slope and chain a blur effect below the chroma key effect to blur just the alpha. -\subsection[Chroma Key (HSV)]{Chroma Key (HSV)}% -\label{sub:chroma_key_hsv} -\index{chroma key HSV} +\subsection[Chroma Key (Avid)]{Chroma Key (Avid)}% +\label{sub:chroma_key_avid} +\index{chroma key Avid} -Chroma Key (HSV)\protect\footnote{Credit for Plugin by Jerome Cornet \url{http://jcornet.free.fr/linux/chromakey.html}} (figure~\ref{fig:chroma-key-hsv}) replaces a color with another color or transparency using HSV variables; it is frequently used to remove a color from a video to composite with another image. This process is generally referred to as green screen or blue screen process (because of the background color that is keyed out). More information: {\small \url{http://en.wikipedia.org/wiki/Chromakey}} +Chroma Key (Avid)\protect\footnote{Credit for Plugin by Jerome Cornet \url{http://jcornet.free.fr/linux/chromakey.html} and credit to original creator for upgrade.} (figure~\ref{fig:chroma-key-hsv-avid}) replaces a color with another color or transparency using HSV variables. It is frequently used to remove a color from a video to composite with another image. This process is generally referred to as green screen or blue screen process because of the background color that is keyed out. More information is at: {\small \url{http://en.wikipedia.org/wiki/Chromakey}}. \begin{figure}[htpb] \centering - \includegraphics[width=0.55\linewidth]{chroma-key-hsv.png} - \caption{Windows config for Chroma Key (HSV)} - \label{fig:chroma-key-hsv} + \includegraphics[width=0.55\linewidth]{chroma_key_avid.png} + \caption{Windows config for Chroma Key (Avid/HSV)} + \label{fig:chroma-key-hsv-avid} \end{figure} \subsubsection*{Requirements} \label{ssub:requirements} -The subject in the movie should have a good background. The lighting is crucial and good lighting during production will save you time with much less effort than in post-production. Another tip is to use a low-compressed, intraframe codec with as high a color depth as possible. In case of YUV-type source signal, it is better to have subsampling $4:4:4$ or $4:2:2$. -Here we assume that we have a good video, filmed on green (or blue) screen that we want to use. Important: make sure you are using a color model that has an alpha channel, such as \textit{RGBA8}, \textit{RGBAFloat}, \textit{YUVA8}. To change color model, go to \texttt{Settings $\rightarrow$ Format $\rightarrow$ Color Model}. +The subject in the timeline video should have a good background. The lighting is crucial and good lighting during production will save you time with much less effort than in post-production. Another tip is to use a low-compressed, intraframe codec with as high a color depth as possible. In case of YUV-type source, it is better to have subsampling $4:4:4$ or $4:2:2$. +Here we assume that we have a good video, filmed on green or blue screen that we want to use. Important: make sure you are using a color model that has an alpha channel, such as \textit{RGBA8}, \textit{RGBAFloat}, \textit{YUVA8}. To change color model, go to \texttt{Settings $\rightarrow$ Format $\rightarrow$ Color Model}. Any manipulations with alpha masks in \CGG{} require a bottom track with some opaque background, otherwise the transparent holes are displayed as if the same track without transparency is located under it. \subsubsection*{Usage} \label{ssub:usage} -As in any other effect, add it to the timeline in the main window. You can tweak each parameter in order to improve the keying. +As in any other effect, drag it to the timeline in the main window. You can tweak each parameter in order to improve the keying. -To understand how the plugin parameters work, we need to refer to the HSV color wheel (foreground color) in figure~\ref{fig:hsv_color_wheel}. Coinsider that this is an abstract example; in the real world we will be dealing with much more complicated masks. +To understand how the plugin parameters work, we need to refer to the HSV color wheel (foreground color) in figure~\ref{fig:hsv_color_wheel}. You may want to first apply the \nameref{sub:color_swatch} plugin which is very helpful in determining which variables should be modified. Consider that this is an abstract example; in the real world we will be dealing with much more complicated masks. \begin{figure}[htpb] \centering @@ -1366,17 +1366,17 @@ To understand how the plugin parameters work, we need to refer to the HSV color \label{fig:hsv_color_wheel} \end{figure} -The left half has Saturation from 0 (in the center) to 100 on the edges. An example of a green screen is shown here. The right half has brightness from 0 (center) to 100 on the edges. The example of a blue screen is given here. The key color is the radius of the wheel, and its angle determines the hue. The Hue Tolerance is the arc of a circle (a wedge) that includes the radius. The wedge is the color range (mask) that we want to eliminate by keying, its shape is precise and easy to understand. The Brightness are the inner/outer extremes of the wedge; if the inner value (Min) is 0, then it coincides with the center point, if the outer value (max) is 100 then it coincides with the arc on the circumference. With intermediate values we will have masks similar to the one shown in the figure. Min Saturation is the distance from the center, along the Hue radius, from which we want to impose saturation with the value 0. It will be the value from which keying starts. Saturation Offset is an additional cut we make to the inner part of the wedge from the Min Saturation value. All of these adjustments allow us to establish a range of colors (Mask) that perfectly matches the background (the wedge in the example in the figure) that we want to eliminate. This is a precision operation, and it is not rare to return to the parameter combination several times to refine the mask. +The left half has Saturation from 0 in the center to 100 on the edges. An example of a green screen is shown here. The right half has brightness from 0 (center) to 100 on the edges. The example of a blue screen is given here. The key color is the radius of the wheel, and its angle determines the hue. The Hue Tolerance is the arc of a circle (a wedge) that includes the radius. The wedge is the color range (mask) that we want to eliminate by keying, its shape is precise and easy to understand. The Brightness are the inner/outer extremes of the wedge; if the inner value (Min) is 0, then it coincides with the center point, if the outer value (max) is 100 then it coincides with the arc on the circumference. With intermediate values we will have masks similar to the one shown in the figure. Min Saturation is the distance from the center, along the Hue radius, from which we want to impose saturation with the value 0. It will be the value from which keying starts. Saturation Offset is an additional cut we make to the inner part of the wedge from the Min Saturation value. All of these adjustments allow us to establish a range of colors (Mask) that perfectly matches the background (the wedge in the example in the figure~\ref{fig:hsv_color_wheel}) that we want to eliminate. This is a precision operation, and it is not rare to return to the parameter combination several times to refine the mask. -Start with \textit{Hue Tolerance} at $10\%$, \textit{Min Bright\-ness} at $0$, \textit{Max bright\-ness} at $100\%$, \textit{Saturation offset} at $0$, \textit{Min Saturation} at $0$, \textit{In Slope} at $0$, \textit{Out Slope} at $0$, \textit{Alpha Offset} at $0$ (that’s mid-way through), \textit{Spill Threshold} at $0$, \textit{Spill Compensation} at $100\%$. At any time, you can check what the Mask looks like by clicking on \textit{Show Mask}. This will output a black and white image of the mask (\textit{matte}). +Start with \textit{Hue Tolerance} at $10\%$, \textit{Min Bright\-ness} at $0$, \textit{Max bright\-ness} at $100\%$, \textit{Saturation offset} at $0$, \textit{Min Saturation} at $0$, \textit{In Slope} at $0$, \textit{Out Slope} at $0$, \textit{Alpha Offset} at $0$ (that is mid-way through), \textit{Spill Threshold} at $0$, \textit{Spill Compensation} at $100\%$. At any time, you can check what the Mask looks like by clicking on \textit{Show Mask}. This will output a black and white image of the mask (\textit{matte}). \qquad \textit{Color section} In this section of the configuration window, you choose the key color and have the ability to see the mask created. \begin{description} - \item[Color...] Select the key color (green, blue, etc) using the color wheel or the color picker. Remember, only the Hue matters, not Saturation or Value. To use the color picker, click on the \textit{color picker} icon in the Compositor window, then click on the color you want in the Compositor window. Finally in the Chromakey (HSV) parameters window, click on \textit{Use Color Picker}. Remember to disable ChromaKey (HSV) plugin when using the Color Picker on the Compositor window. - \item[Show Mask] The plugin does not create a true matte in the alpha channel, but creates a mask. Activating this option will show the foreground as a white (opaque) shape while the background in black (transparency). You will be able to control the extent of the mask, any jagged edges, small black areas within the mask or small white areas within the foreground, which are to be removed, etc. + \item[Color...] Select the key color (green, blue, or whatever) using the color wheel or the color picker. Only the Hue matters, not Saturation or Value. To use the color picker, click on the \textit{color picker} icon in the Compositor window, then click on the color you want in the Compositor window. Finally in the Chromakey (Avid) parameters window, click on \textit{Use Color Picker}. You will need to disable ChromaKey (Avid) plugin when using the Color Picker on the Compositor window. + \item[Show Mask] The plugin does not create a true matte in the alpha channel, but creates a mask. Activating this option will show the foreground as a white (opaque) shape while the background in transparency. You will be able to control the extent of the mask, any jagged edges, small white areas within the mask or small transparency areas within the foreground, which are to be removed. \end{description} \qquad \textit{Key parameters section} @@ -1384,14 +1384,14 @@ In this section of the configuration window, you choose the key color and have t In this section we expand the mask to a range of colors close to color key and refine the selection by also taking advantage of brightness and saturation. \begin{description} - \item[Hue Tolerance:] Because there are slight variations in lighting in real cases, the background will not be in a uniform key color hue. Increase or decrease the Hue tolerance to mask out the background. If there are dark spots that are keyed out that shouldn’t be, it can be corrected later (With the \texttt{Mask} tool, this operation is called the \textit{Garbage Matte}). + \item[Hue Tolerance:] Because there are slight variations in lighting in real cases, the background will not be in a uniform key color hue. Increase or decrease the Hue tolerance to mask out the background. In determining the hue range, it is useful to use the Color Swatch plugin in \textit{constant brightness} mode and with \textit{Draw Source} active, which allows us to see the pixels of the figure, making us choose which ones to let into the mask (keying out) and which ones not. If there are dark spots that are keyed out that shouldn’t be, it can be corrected later (With the \texttt{Mask} tool; this operation is called the \textit{Garbage Matte}). \item[Brightness:] It allows the color range (Mask) to be better defined by exploiting the differences in brightness between background and foreground. This could be referred to as a Luma Key within the Chroma Key. Increase \textit{Min Brightness} so that only the background is masked out, and not parts of the foreground. You can also reduce \textit{Max Brightness} if some clear areas are keyed out (useful for very dark backgrounds). - \item[Saturation:] It allows the color range (Mask) to be better defined by exploiting the differences in saturation between background and foreground. Since the best results are obtained by keying pure colors, it may come in handy to eliminate the less saturated colors (proper to the foreground) while leaving the more saturated colors (proper to the background, i.e. Green/Blue Screen) to the keying action. Increase \textit{Min Saturation} so that only the background is masked out, and not parts of the foreground. \textit{Saturation Offset} can be used to change this, because it acts similarly to Min Brightness. It could be said that Min Saturation concerns only the key color, while Saturation Offset concerns the range of Hue tolerance. But it is best to start by leaving it at $0$. + \item[Saturation:] Saturation allows the color range (Mask) to be better defined by exploiting the differences in saturation between background and foreground. Since the best results are obtained by keying pure colors, it may come in handy to eliminate the less saturated colors (proper to the foreground) while leaving the more saturated colors (proper to the background, i.e. Green/Blue Screen) to the keying action. Increase \textit{Saturation Start} so that only the background is masked out, and not parts of the foreground. \textit{Saturation Line} can be used to change this, because it acts similarly to Min Brightness. It could be said that Saturation Start concerns only the key color (wedge's vertex), while Saturation Line concerns the range of Hue tolerance. But it is best to start by leaving it at $0$. \end{description} Check what it looks like at this stage, your mask should be pretty clean. Toggle \textit{Show Mask} to check what it looks like, it -should be OK\@. If not, repeat steps $1 to 4$ to get a better +should be OK\@. If not, repeat steps in the Key parameters section to get a better key. The rest of the controls are useful to smear the mask to help compositing later on. They will help you to make your key look much cleaner. @@ -1401,19 +1401,55 @@ cleaner. In this section you intervene on the already created mask with edge smoothing and transparencies. \begin{description} - \item[Slope:] For now, the mask is a full on/ full off mask that can be really harsh on the edges and not necessarily what you are looking for. \textit{In Slope} and \textit{Out Slope} will help you to smooth that key. In Slope it acts on the inner side of the edges by grading them with keying (background) colors. It leaves more colors in the mask. Out Slope acts on the outer side of the edges by grading them with the foreground colors. It takes more colors out of the mask. Basically, the colors that are borderline in the mask will see their alpha channel reduced by half instead of being completely on or off. - \item[Alpha Offset:] This control offsets the whole alpha channel by some amount (from -100=full opacity to +100=full transparency). Be sure to know what you are doing if you change it from the default value of $0$. + \item[Slope:] For now, the mask is a full on/full off mask that can be really harsh on the edges and not necessarily what you are looking for. \textit{In Slope} and \textit{Out Slope} will help you to smooth that key. In Slope acts on the inner side of the edges by grading them with keying (background) colors. It leaves more colors in the mask. Out Slope acts on the outer side of the edges by grading them with the foreground colors. It takes more colors out of the mask. Basically, the colors that are borderline in the mask will see their alpha channel reduced by half instead of being completely on or off. + \item[Alpha Offset:] This control offsets the whole alpha channel by some amount, from -100=full opacity to +100=full transparency. Be sure to know what you are doing if you change it from the default value of $0$. \end{description} \qquad \textit{Spill light control section} -In this section we try to make halos, reflections and parasitic lights present on the foreground less noticeable. +In this section we try to make halos, reflections and parasitic lights present on the foreground less noticeable via spill suppression. + +\begin{description} + \item[Spill saturation:] Similar to Saturation Start, indicates the starting point from which spill suppression begins. It works if Saturation Start is > 0 because it acts only from that value, with the effect of retracting the starting point moving away from the Saturation Start value toward the center of the color wheel (white). This has the consequence of creating a small area beyond the edge of the wedge where spill suppression acts. Generally you set it with a small random value > 0 and then return to it after setting Spill Angle. + \item[Spill Angle:] Spill Angle is the main parameter of spill suppression because it causes a very noticeable effect. Basically, it is an area that extends beyond the edge of the mask, increasing its angle and thus its size. In this area (which is a gradient) pixels of the reflections of the key color (green, for example) are mixed with pixels of the adjacent color (cyan on one side and yellow on the other, because we always refer to the HSV color wheel). The suppression effect replaces green pixels with adjacent ones, taking into account the gradient. This parameter, in addition to the spill saturation, softens the edges of the mask without resorting to desaturation to gray or white of the green pixels, which create a more visible detachment. It should not be overdone so as not to compromise the color balance of the entire figure. + \item[Desature Only:] +\end{description} + +In the lower part we find various buttons: \begin{description} - \item[spill light control:] This step helps you remove the green or blue halo around the edges of the mask. It does so by removing the saturation of pixels of the foreground that have a similar hue to the key color (turning them into grey instead of green or blue). The hues to be desaturated are set with \textit{Spill Threshold}, the degree of desaturation is set with \textit{Spill Compensation}. In order for Spill compensation to work, Spill Threshold must be > 0. If you start with Spill Compensation at $100\%$, slowly increase the \textit{Spill Threshold} until the remaining green or blue areas turn grey. Then reduce Spill Compensation until the image looks good. + \item[Store:] Stores the complete current parameter set in memory. + \item[Recall:] Sets all the parameters to the values, memorized previously by Store. + \item[Exchange:] Swaps current values and Store'd values of the parameters. + \item[Undo:] Restores all the parameters to the undo'ed values. + \item[Reset:] Reset to default values. \end{description} -Now the mask is probably still very harsh, so just below the Chromakey (HSV) plugin, add a \textit{Blur} effect, and select only the \textit{Alpha channel}, with a radius of $2$ or $3$ (more if you really want to soften the edges). This will significantly help the keying. +All buttons work globally on the whole parameter set. Each time the ChromaKey dialog is opened, the \textit{Store} values are cleared and reset to default. Therefore, if you press \textit{Recall} having not pressed Store beforehand, it will do the same as \textit{Reset}. Each time the dialog is closed, the Store values are forgotten (reset to defaults). As long as the dialog remains opened, Store values remain intact, even if the current timeline position changes. The operations on distinct parameters (turning sliders etc.) do not update the \textit{Undo} values. The following operations update values for subsequent Undo: Global Recall, Exchange, Reset buttons (but not the buttons which reset individual parameters), opening the dialog, and moving current position in the timeline. + +Now the mask is probably still very harsh, so just below the Chromakey (Avid) plugin, add a \textit{Blur} effect, and select only the \textit{Alpha channel}, with a radius of $2$ or $3$ (more if you really want to soften the edges). This will significantly help the keying. + +\subsection[Chroma Key (HSV)]{Chroma Key (HSV)}% +\label{sub:chroma_key_hsv} +\index{chroma key HSV} + +Chroma Key (HSV)\protect\footnote{Credit for Plugin by Jerome Cornet \url{http://jcornet.free.fr/linux/chromakey.html}} (figure~\ref{fig:chroma-key-hsv}) replaces a color with another color or transparency using HSV variables. This plugin is replaced by the better Chroma Key (Avid) and is maintained only for reasons of compatibility with old projects. +Refer to Chroma Key (Avid) for theory and parameter descriptions, which are quite similar, except the description of spill suppression, which differs considerably. + +\begin{figure}[htpb] + \centering + \includegraphics[width=0.55\linewidth]{chroma-key-hsv.png} + \caption{Windows config for Chroma Key (HSV)} + \label{fig:chroma-key-hsv} +\end{figure} + +\qquad \textit{Spill light control section} + +In this section we try to make halos, reflections and parasitic lights present on the foreground less noticeable. + +\begin{description} + \item[Spill light control:] This step helps you remove the green or blue halo around the edges of the mask. It does so by removing the saturation of pixels of the foreground that have a similar hue to the key color, turning them into gray instead of green or blue. The hues to be desaturated are set with \textit{Spill Threshold}, the degree of desaturation is set with \textit{Spill Compensation}. In order for Spill compensation to work, Spill Threshold must be > 0. If you start with Spill Compensation at $100\%$, slowly increase the \textit{Spill Threshold} until the remaining green or blue areas turn gray. Then reduce Spill Compensation until the image looks good. +\end{description} \subsection{Color 3 Way}% \label{sub:color_3_way} @@ -1494,6 +1530,17 @@ color space or range so that you can fix it. \label{fig:colorspace} \end{figure} +\subsection[Color Swatch]{Color Swatch}% +\label{sub:color_swatch} + +Color Swatch is mainly used together with the two chroma key plugins. It should be applied first so that its output becomes the input for the chroma key. + +\begin{description} + \item[Constant Brightness:] creates the HSV color wheel in which the brightness is constant and you can only move the Brightness slider. + \item[Costant Saturation:] creates the HSV color wheel in which saturation is constant and you can only move the Saturation slider. + \item[Angle:] turns the HSV color wheel by a certain angle. + \item[Draw Source:] is analogous to vectorscope; shows the pixels of the upper track (figure + background = source) superimposed on the HSV color wheel. It basically displays the source colors that are also present in the color wheel, but not the others. You can easily see which colors fall within the wedge (mask) and are therefore extracted, while those outside make up the unextracted figure. This makes it easier to adjust the key color and the hue range according to our needs. +\end{description} \subsection{CriKey}% \label{sub:crikey} diff --git a/parts/Rendering.tex b/parts/Rendering.tex index a76d6e0..053096c 100644 --- a/parts/Rendering.tex +++ b/parts/Rendering.tex @@ -1157,11 +1157,7 @@ cin -d 10656 Similar to the previous point, the cursor positions itself in a new line ready to enter the next command, without exiting the task. \item When your video is ready, setup a render job via \texttt{File $\rightarrow$ Render} or \texttt{File $\rightarrow$ Batch Render} - and check OK. You should check "Project" for the "Render range", but if -you check "Selection" or "In/Out points" instead, although rendering will -always start at the beginning of the timeline, it will end at the Out Point -or the end of the Selection thereby saving some time. In this case, the -first render file created will usually be empty. + and check OK. \item The results will be in the shared file \texttt{path/filename} that you selected in the render menu with the additional numbered job section on the end as $001, 002, 003, \dots 099$ (example, -- 2.26.2