From 6805fec170bd42d6a68c37ac7fe433b459ce0036 Mon Sep 17 00:00:00 2001 From: Vidhyadharan D Date: Mon, 29 May 2023 09:36:45 +0530 Subject: [PATCH] Added blog on SRI - sub resource integrity #22 --- .../subresource-integrity/feature-sri02.jpg | Bin 0 -> 55279 bytes .../gitbash-sri-hash.jpg | Bin 0 -> 28696 bytes .../posts/subresource-integrity/index.en.md | 98 ++++++++++++++++++ 3 files changed, 98 insertions(+) create mode 100644 content/posts/subresource-integrity/feature-sri02.jpg create mode 100644 content/posts/subresource-integrity/gitbash-sri-hash.jpg create mode 100644 content/posts/subresource-integrity/index.en.md diff --git a/content/posts/subresource-integrity/feature-sri02.jpg b/content/posts/subresource-integrity/feature-sri02.jpg new file mode 100644 index 0000000000000000000000000000000000000000..254308f06315fccdb6f6e9a41e51eb71d182e58a GIT binary patch literal 55279 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 VPF014IMb7D?n;NK1eUKV|JjW!eA)m2 literal 0 HcmV?d00001 diff --git a/content/posts/subresource-integrity/gitbash-sri-hash.jpg b/content/posts/subresource-integrity/gitbash-sri-hash.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8630fe6496a71779cca70c5d45f7362835f30267 GIT binary patch literal 28696 zcmeFZcT`hrw=W!|3y7ffrc#xrR23u&N)Zu7=|V(AO2llXOGs3tmk0=KK*&~_)QFTw zjdT$K=@NvHL_kU)K@3X>;VymO^S1q-bMJT0xa0fhERu{cR(WRq&F7hOKH2%SGXvRs z-rUL@!T}x{92yYF4jFRjT&V9Y2*kz)as&c_@PX$xVgY4qq`1$(l z!O6|}^Wfp);^gM#;pP4L=HnOO=i}SW$IH80X!mXbLGa+^-yB1g z-njROf48`Vq?EL>imKY-BYOGv=yk zJTf{q{%L|prcl4k&dq;aSY)hyTmR170Df%#UI!ZJnqMzJ@({8rlEQTn3#b;;1NXS2OrlWQX`n(N<>?Lf$W zK(WG_PG}_f^nGaX;q=<3%R3M=6~YcAk{=C}ZfnqamqWIo(@3q67EYkGcCUkZYC@b1SKDw!4v{42vYT0?^)h z@>a$jJ#CJ2aD&EscMf5e4+s2K_c1rIl@$1)?6HI5iQ}?EbK{w~b%Or&y3B=boj-sw zO4<%Y_iws{g4)gpwf%Rh+<-8Us&1f{p?!uv`@J%XoGaJlB^v;Q+cH#>^lbMmwj7K$ ztCK1(4-$BzRrwrVBWp-2;QV<;op3i`91=5P1F|-K^H#m*tdTu*S=vjhTyM*s9 zt2jBavlr$}mtL8iv!dWWb$7G50Ci6)EqJ{BzI<) zeJ0Q0aArbIxD;YO`Iuhpz$~$C?ZhS1IejI)sxmEaZ>`v1|H+cBe;w}SKUudmr~n5Z zwN8l}h9G#rL-YTEj;sHAYZ=$}O8Te;-L_*Gxj%<;XrZ1S)KaSuQ!rvODA60CBz)3r zcIDfNctiizV4*itsT}u-FK&9<+R%;=5BudW9g$GXC>r% zWBvu{O8&%Hl#;)IPQ&Zh&-Pjz7`}UP+2Q|08=MuAFP8U2vc+-n=zlP0t3O$Mg@Q1P zhjFo)f)QHK@uh#&4Q(OOvQG`f;wskVOg2e@aq|^ZOYL_KY74$p^4%q2eknxIQQ26N z>q8R$-ZNymq{4Gqg_kdAK0NdPJ2$_6`P?TN5WxQ>>imh}hvy`&BmShFe`A~6``sRb zvFl&p_fJ0TwEuE24+z))8x;B<@_q)d|B>GR*xsK4^#8cVf6q0}FAIULMOwRx1OeE? z6}K%rx`_oRV|?4?Y|&8N876MV_3QcoAFy`#*2rqDdXGJCENxu*{QFM_|1foYw@{;( zkUB(Ty#gwBAj%dUSf*IR4rH*;nJvb+SU7{&x6m+_fDS8!OP?BXtTU`j(=!wg=ps`y z4DF=coXvQ+_MSe}jLbP+mO(*Pn;*H@=ez@Pk(G*u33>^8T&}74v>mlw1ogrLxjPVU zk<@;YO~Xgyvm{|o=fbmDUY|BDj?v~7=+44K znby0gZWCU>n}XZxLy$1hx8QCm-huF6%#yu)uF&k@H-QyQkl18G-|%OS61kZMI2Nc3c3g@{MP%Y^HsxrqEbQ|vn{s9sF<4?^=6;SH__CJJO; zVr0gyeot~?F4>LhTW4vlYOUPVu?f;kbo&x)T&*i=Wt?h->;Fow7VJG57VRr$(`8dA zUOtWY>(N(GUm98L@(M-Ww=2Hfo1)1|&%nX#t2Q!OBE`%Y{B|bVdw?j=*^pc2Coi2m z-Oo|Zp`%kfKI8Z{SwhTdQC;?t6JVO|nW z@?xw5ci*ed+bs&6+O>4=y>NNcSMX~19eJ|HSD6DHom&zE9P5bk_630&!XF_HnR$V zVF%zY4zTSwx#xLM!BV!wvK!CyVwkJdY@hdCF=~(O%c(3k`-jWtJmGnA^vq7&Co}3e zO`%|t=n7a+Mogq_rN7oS5-86Y`{fT*`(G3)+c?nR%>9MKlH-n2(%mn6p?ZbD4{C{N zS?ECLg{rS;dZOCN+E#&rdFTXneg}fNmWsrD4}%7m_>ja{SI8vDlKcK)mKDw^6xNY? zMhlle=_lIhQQ9Qv&hzG>lZCo@$5X9>5~W0GbXdSY?+8~J$@I# z;9@{Fg#~3mJEq0x(e-4ScE`!NoIij+PV46yjIo_=fA`@0@gyNO{gKUVy+%$e@pGbd zf6o=>U0VL~)@ET4S_c>Q&HC2pxHUZJ>q^an=XXx#+tG65i7hcWtVWsE*_27BW#`On z?+WvH*44dbtQ(rnw3u35?>*J7MER1|d!v#)h2=wuu}7eFsx;T7N}g6Mnps*3?~-+CMim%l+DA@|;e=QF0|8T6eA25y+(3^K4 zvHHEMLZQJ{b3=hS2@76T!}9kkjLrxgv&=S)z4iz9`^tcat}TbRU!qh(m&o$zGeQW8 zM6y1HEx{r5}lnzvmyYI>5buuUxau3Fn@gn#R}5*$!LT4eqxu z4=Rsax6n?p{dx$B>&4W^SYf0i2$LUyR&Z$_4U;sHSt1Fx$N`aU25gbR8^cHoW?8+W z^hoL{%0R)}q?d~UMkmxRs2y^0xtXkHjr>*!zrWgwi9y#Ccj5K{yf%O*Rao4;hdy9R zpU%xU!1$7vrp~z7xOu!zY3dD(yl8>{bnnvQ-3=*Nav(bP{zgobe)x-p&FKoy{6%oi zpP6B>k!s-|a*B}k#ahYFw6Sxpx9WG%JkOb=?o;?~1tO^nT4V8mb@&h9#e%*taBhAC zfwjx9Djorsqdz*vCGf+&iZ$bcqI`H3p%EW@{fYC_mczC`2=5PXFX(?Wn;Q*7W#Xxb zjx8gqVcQO57XV}0F?ebEa59Wn1O!?q}o%DHqIH6Le`ZZjwix z#hv#j&XlE};2OOeLeT2pfoSTv`_Txg%Ob$-O>{e~XF|Ifi((xCE|Ka6S`iaq&gUE< z8nqj^(m7_L#z-ov29p8ySJ2xp&^56Mw7@?7x!N$j3LOd@I@PE24u9$Q zF9=N?&a*gJ`n16Ia}dgja=W2>fXPlG7fND8X>{FdxHci-a>4Yw*wky2v7f_qPnyRM zsYpJ)WCd{`#P2|EBNAGS81^mAmB=eVQUyE%7oZ`X1f~EGceKdizl##d8IDgHvaTl| ze-` z#fTFZr%w%2KI&-;x%vdV8{}9I9vIb2kfN14sLiF(?0(1e&e_U~Obn>1zC}yQP{7sB zJ`8y^!9)eAI2eQznq+^>4s^-D&Jg%qLeXr|UV#XmIqQU*HN#XqKGkV3H>6bY)o+zw z)YN~BzhL<=VxrfRgl&ge_7o!l1;IscmqA*^_ros|&J#@B@66a=KlJR!v0GO;b|8Vz zSov}xiO@UfB<$WM>*6K%13)Xo`r4RY&Sb>JuC2=qx9!os^wBqWxjXEP3sapsQn`W- zriEWm%x<}vQ#X)#am*LLxNPdaXh)hJ@0n6wyRfOqoS$xFna3_NDT8F%SJ+BJ3V)2aPBgL!gwgJ>@-pz4L| zRERz)9BmvFLBYgHW20+@MMDSPX5XsTit~WO;aa)3$0S}b`-kAIr$#>Xw%D$pjyrty z389A|*>VyfF=H5LmXg9=V^0cJc8Pu773~W|I$*Cf9a9PJp8K%8<)|v~OfZ{3H)B2n z(zkRLL&ix$>;nLm{GC}M+8TD3ToJrvm9e64l&<6>C!l8hzzXusx&7?;cMwlCg_PC% ztT!ictxIcAGqxV!-AbtDjfDEbB)?(>P|}mY`>}3vSH5^!d8i-BzM8%VSLS4Mw{+5# z=&n(9B+kWtORtpC{nRe&p}{Z^M_)a&owWn;he?5ohQ+L-_bj+`1D@nnIbULMikDnv zju)jbz^c|-l1AI`x1=_|dDG(bk?ZVhFHXo|7PSE=p(N0tu-crC?De`9^@ijvm#EcQ zpYI8=Q&TGSZlAKx`6^vsO%+T&(<{r&)7^g6O)>T=_?Eo$W4h9 zTEY$C$J5+n1TscndvEBzHk2C19n3kqFO6*`=gQz>ZJrr|j`R$&78WkyDLy67VOp^3 zlp>p-L48PFl|yxr#L4uKwr$}qm-$W`_}lvlK6zY2<^JCV_=as7>QttW8>ctKe(sZ= zvXK6~|A=70Biq@!C`Nl%i)73>j140uUJqdD%Z;2go%E}2(<^8Y#9QAHi+Nhj<8j~u zuV9F`O4bXO_b;c|XFJ?vPqF@sQw(YT-6?3JPJG2CSDn)#0kf)5wa#<6R#XW3{>T2i z_gIK;Hrn+QEYPGOv8$&Dl-+OYB^tSvx3N&$!;pa;*}GURP%2)1gRHs!r#XiG`5aBkjyUa7w- z?#}<+n!w3&GuexAPSEHw`p)ie$XLjlw!8M>ndRr387i0+*cM{mdt;My(I17FN5Lb; zVfRelZ&$FOWc0+9E>fLC{d3kq09F9c6K)33-hV7)7e8LERoCY04KK1{cE*n_9zJyA zBE8N2w|;SR!NqcQmeVlQn=}#G+9Cpkmxdxb+*Jly&h%u3y?WBNtr7b!HH@#~^okqO zoa-2R+3|}~TFMd-FVg1+!XYKF-DfSR_AJU(qX?-cjs+KW3Roh?q z!Z)CIPlny7ahV!2b^gBVS+2WM)(wfNomsz+(l=-i8Spk3Pi2ej0(!s6!3BaaBGqXH zc??c5dKU<YDhj zGetIUp2;H5JV%XU_Zw@^ObN6%AUZJezH9}0^T>FEK^B}M@aFbGGDtg24`?sxz}qffsPK`>6Td=9aKXXrn!0oaea~A>5zqiK~)` za+3fYzBg~Sn;BVD@wS5B1skZ&S-+f_op*g>G#jBMl zslAAY{Qvo0G|{oZQ|{E`0o)3>9w)3hYP+d+mNbFkdivmJ*Nyw>?-K=gAidtuu{x9l zyBE68#PF-G-?RV_L?uc1I&28}YOchQw<=7h4?imVJ&R&~iR>m>a)M)o%5}BdM(XIG z-)~nPUnu~p`0jztgF6sOC_Qlm4fH9{R}mQOx*7YZH@joXVh55qx<7PVY?+tMPh-%r zKmKxQ(m!8{CQE^-PewL`v8n#ambGu3`e_G}eUK3Y&WHNIXC&Ey%jjm*DNnX#OqVuG zQD1?re_GziT-UvQ2eO9=0QXsYfz})ZP*aQXE@fdLi_e+`xRkry-Q-bSL^!Z5ilysYai(IGa)(tSns|_ansaH9uHIA<^fGV!L z3Ei_7015vKwO}%Qnxt@S2ciU}^0Gx5Fgp;bKZF%tG)J=KXpD`2AlHIrG)Z0E-V4f9 z0We>LvTi*vM#VFQe-cLes}BAySi(;opvf|S7woTr&|hO%*FmBTe-fpKZf|Ze0n;qP zzod8Pr}TU{yT9VVD`LWt5r31+FGUXiVry#$a`xX*`j3MBe?Y15Psz2Rzr?V>irQbP z=b*0t)dWG^>p{U8;a}yK|F5DuEe|~x&hb;-$OwgRW^8S2apX@6_VjA?+8`{ga#h693)*=dKLt3+Me47GVAa10X*Ar$qiU41hKw^6!A;7ij;ZWB>A_ ze>*neZ(-m+uu*K8^Cu4fUz5?+N{}=rGFD>)` z0=*yn3}7uL-fYXiA=5Qdr|^U~C8Skomz--Cb`LU)ETlyt`yXl=TNh|HnRd={?yy#> zD$P8S+H*=mrxNrK#qI8^_05|d`iMK z`Mu>Bg}6BJBD662Y>=l`2-vdmgAmG_L3#z&XU||T(lN9XTc=o;8DoXM2#+8f(xTxm zTtK(5=JJBe)yo$3Ew|KVeF`xeXH?V9+4!k6qD)}8-z~@{dD}%h5T6{_M0=}?+XmBy z6swODg^N$if2_&zwG$ty6-YgMxdyk^ExCJTC7@O$*5SAvjk6mjqR}Kl5i;v^7pC7y zLl;fTB=7~UN?3>chD6rgYeYCdV1wk8j^*%Pq>Q((}?0C6m@nS#K*>i3jrW-(6ab`agM}@4hEhdXQMbQQLGZ^(tt`=N=80ll zLpHL>1&wMRufBtIlpV+|;r*d9%%~iScokKX*P(HQb&5A8NbY2NyJj&_!(qr;xvGX| z#ry%MUe1`A2`j1Sz%d7uFsk4E2q49f=n(ZmX?;|tYsWR2g;T8i4sEo*?kzocH`w}p z3QU<|UiE`;RM_v!VfD0jf#N$iNlrB^tPXxUHf_VjZTQE%B_OW{c7$~wI6+q6Mz@-o zKmd$69T&Zh-3vrs9ZxPRb@qKSIlXw(*G^>qL%h6u*pD7uY1x2@8WOC#N2M_EWLzSl zwxxRqvU_FzQvH^~1ag2TTS-Ss@o zi@xZ8Xu$Slq**yY)ARSfBJie1EGo_Az1Gd$1T|mJ&mC%~ENM-;Th{Fq0`Vk_W71bc zbG$Vp?`Xmm_%pq@y8(K;IQI-ZeJD=b>JRbs>9XZyWHR}hfgI{Uyh}8eYV9Ur1$4eJ zdjUir4isw|si4MB&0O{hzGWY6;LvNKq?0t6bzXO$gYtH=v4=mkPoRT{=!h`17+0hx znh1_pYBuTgF_)aYeLb`LZZ>-O9w!}`QYBuQlA0b^GyB40oADH?t3K}K9tznh}g8;Hfh+h=`{_7+zc^&oz4oM1L>vwi@JYy0eFL%&qFxOp-FgwHVBL5}1?e zLCY)n9S8`NuCg%Jev8gL;~b_4Bey%rSb@BKh%#XRQKcrbz2#7v%hnzJ9G#vlnx=u( z6Nu!I5aHhg-0SI$%)HUsfuw0Ax@wZKrsvG|74wf3tjqp-(w|2B=Z0sqeXMdn9OF|- zA{z}}h>J{7=g1xa3b*t^m#90Cw|$7#X+y?*RHe!Yu4b~)b!uN*zygCNRzPioe8a$u>IBqp+l+!{)~(`0?MUqk6IidV0hN_-EVPf*kEAsk2>SO^ zpY1wn6xg@}8L}trx7mRNueM;b3FNz^J!m*03Mz>_-=O^%rNTPJaHvx9Kk~^}{!n#G z{Y`i0$9FCJ9)70oYJyWFVzf~*>`z$1bwo_wVMbjEMaYgFVcSIvE~LQwuGq$$Id;A% zOtVrs)L-)R4=dg$DH7@jI8qc4Bim(f(cahz48{BHs?-vghU>891TsjSE}t8^8t)oD z(()M7hmbUWOL$(Y=kugPRIU4oy$ED7)#_05IurjLadC#tyN%oqS1?2k!D@xN+x=B3 zr1ZuIk5`uH_$|H zX4ZIfo(V}SB|gqSrk$P` zVG_~R`1lrMcv1ln*+q0=>85T@GpT1@)4!R$B$ewZmHF#`yVf8RoT{%?ayz;A=`_cQ z`4$ya=O(+EAwe<6k)g37fTJx?Th#7Fv35=3^Se^;idb77B5qgn?#Z#(7Y#l8-%oPL z@b`H-XkCrKrndxJ!`u*azBVt%=D{_Ydmc9B9bmzH+OnNP@W4e%FjU)}%2$k~ily!t zds3t59m-?xg{n-u#;AQMuR{+)x;5X4nNdhI=Ry{Y4kpjV;4Wje^wpUiNC(_CVLRMD z!8y$WZiKB?oN&J8x7Qfqzpwt;k2ocd>1jR9xZO~fptP#@^0B}()|a`>tYQ2MPEyO%ns7rqqXxTWqo7HEmk(8}>zvbp0- z>~~JNrIUaDq1C+)&dq7e`;5`N=kzNbFnZZKLDUUMJ2&bwaOI=PApmy;K6PYW!`$*# z!!uHk^bd_x)wDU&t;oaenUy)@)wgoqGvlp|G=(;{S~Wt_kC;dt%csZ%SQ!qINVZ2) zDbAW6*`(c$8$NMIe)v=+)=hhDKih$L$F=ZJ0@asBYncp-1mlo0gX&7Z8$GuxreP|_ z7329hPsB@-q1be{5gw1rA05|A=>5)kn!Qe-KUu=3UHDS*1v?Q=N$NS6<(+fm1$WW|jw@hV z0F6UB0gY6sEYM3vv?ak@s(^$FmtIP5?mgG3@N-)lMUoZetiEH`XZD^;;>(kLe(P9? zvg@Mog!K%Rr7N+#N`^spAbw!LN4M#EGi~wPIm;y99~1bna1vs=%TPYomr$Mg))w&I zR_x3m5J^N5{b?xfDg(?Yyxztxll-6ceen#xGm+Z}OpW`kmu}cQD&y6y$ClPv@fkJC z_&M8I@6AsPg@>uC?O5Wy2qTI;p|el5b6S~UQg0ZgFJ#drG43ugM!T?~GdXDn7h2D# zvdnPuil$7fY)`03r76Bc`)U)TspPse2BOm?Cb{WyKFgaf94}X+z|&rKv2Mdf_KN92 z#q+{nrd$U61~fALWsDJu4>eGBrQ7yps6LbmkiZyjcUNQJlJuIdoS|zK29$+{n++jN zh<9DH4yE#aX?l}77x3E+u+!qK)vgTx4|^c{ke=JQP4*1xHGkC(dHtbr^0Umb4ZO5a zW=yu6`L;)jva2sHd-mgGO-f0S_08aGMRfiT?H3(3)$jY&ejj9Ef4^FN?^_6KeSQ0) zDziPOBToeAq1(C+BZDYgr*u2=OorFP3BsM4H7DVx$1?AkP-WHc9=sK&^ZLRMIL6%uyL&mGXBtz@rF_`krjG#vp(>3e#v&p>uV;Ywr z7ooIMTY5-S;5!w|Pg*cJMMuO0V!4*arj>?h+QxDLFR$s3T(a3SQRH@BEEJPB@7Ixd zlyI!|16y}Hv&pfHb&)O-cb8FPbR!V*tOahNlWr#*5(~bou%Gv zeD}Gv>FsY~r^=agi2l!|q#rt4ao8Zj5txZLx^;WL9FVv)u5T;g(nmR^Z97<7B&g-D z5yV5Ni;X@I7NB>jx&$Iy;}h1(DK@_YsUgv%N|C!qn}iF$wumQmx)dkZx+WbV9uB%( z-03&ybZt5;nSJ$f@#YDkT5Ikb?30t+yhaT69ds6;qH%E9uDQTdoxm?;3>RaFzkzW zQ2K50P;31+9nOfpH&UO)tZP1p9Lde>1dF$Cj|+pJ%rS-pP0Cko2+8SDG`;99GTh`w z2EJ>Hh()tyiZfJ_XDM}0CUuN8uD-Bomf{zw@)^$C&NIg4RiRpS8BA0P&fg_ZK*@*L zpV+N*bL`CLh{$C&dcrHi7Obh1M>MiNhastVLS$#mytibw(`FD|2yQTGX4S|RXXaOs zwyU?G3KLM`CBC}b-=Gn*)Dxd`8a(cgUTv8BLdvkZ|4j?la`LhNfS6|e3sSKb0rTNG zJ%Ratya~=QdV60Xu4z}xzG@(sypEs=;rv{_d8RR#rl(_S?$UBwMv6bY`G%cue^~tor3R}WjKR*) z0H=Peq2_E$w!GEW1-N0^))}NqOedIXVriF$1~tL=%S(<`usp)#3yVlO0wvrZGSqLS z=tL#o{B-9U^8Kd)fkKMHBNpEZSP& z=Ib|x$GQsC-?`|E%4N-D_XA558B8)(fh`80+ou&60ai0G83TMJj0D`@vK{vK|Kn9l zWMD`@+mmaVsiC81g%29N{_T&H=UbOi@7QYFFDq8ppdF$s*$K+oKFFF z?ez-et-P?im zq_fA2yZ6WgVQh#UGt7ECQN?X}vwBG=?A6gWBOE`8~ZqOe! zSq`6;8mZZmK_Bz{HlHzONww)Wt#p3SyO$^Iz?G%vMdA)65?WtrHP|2AE<2EMCAR6C z9SG5gT8G^-V9AdfyS@BG@=N*DB+g_SxS9;21MV6J(@k^Uztq-vS$_kQcKGawIx(bbG4iq@uF>RI&|egmSNf9!y1;K zuAhNKj-}hIvr`6QhK|h{V>@AZi&&JfVZ0t8)`Vj?5Gv|x!ast%Tj08YQa+iUT+JOH zd8*`1xRbkjlsD#p*&+Xk_q0d(w&WcMExpnYErOC=FwvxI;-Ugc3DSY%d2;m$FgMd# z@A!#3dBhcw-AWg3XuTh_*1>8-f3g(oWPilIwnzY%rctDQ#$J?F(K8I*E;>tptVxr+ zB*)v1C~6h`{MOyvNpM4_H$=BvboQqG+uc=MZ!pMsqny?-4vIR?o9He##N~__>n*!P1B!_w0I99P)jc*By5} zYd>0`?yftyjpI=(VAur}Y0`xkTg~JQ2m*~AapW8xJfpBCPsJ+FAzHnp2BRGqj60Ng z?Ad$Kv$x^`9@Ykd-HuY@6?%yMp{cgfaN$SB`>6HEePxUHLgUVjyctn^ZC&Q-aR)g| zIwE1E6oWYEa&4a*=Iy|QXBVm3E4?_1rO4ns4U4XmPRw*@FfS%MYt>rI_ca^}toY#StBm&~kA5m3}X1V`A(vR@?WE*gse*6c?>Jx2u#r0(%XOhx)09Z}VPZ#5|_4 ziGl{gRkQ*+}JqdJuUl2 zH0*|!Y#7i-1F=rWKMOMIo1)G>7K1h?Uy|bJR+4Idfz502sdTCv-HaHpZP|>W1<^6> zXvv=$4-p$GmIrWk8PUV;nVz0(f9Y&iQj{LVw9xoyr4c4repJccE;#bxM;}y&!rCnu zKYID%5PCiN$mlSN+w3{}1A}FNAJaE_=|Lyc7yYsmB1%`zZ5cjMeL5RLVC*$`6e=lJ zLWh!Zti#wy`F(WEB(#P=79Xt8!`A*Vu_Yp7?X-1o%}qAm30^tguXBGarN-;BCRVfM z+Bj=45vP5NbWWZ1!~cg4mL|ezx7mJXA_#BM9o1aH`PcY7Ei9}vUYhulawD4S^JyWa z*X9pWA)09qVfsXt>v)qUXnMOcJ3!|#Dhky{8qv|0M^?IW%5!f__~(yYPk;BMmGehz zX=~>D$!Go{vY33R@4$m#XwB-|sqj|A&8U?$`BzoOhGV~fE3Z75ePSl-47tu)^w^bl zh=o*NSR$dy98bl>og9yEQ4XbycjjNCYpy35W_YAAiSJ@U@p@?Zh7 zdRHTacz5IJkF5aIF<+F%u$5W*cQ`#2ohmmYJZT6vRV1UNoPZc|5+PXKpfh9|hv}AfY41P;at8g!_PP6XO~)_Wfqm2ldcll{BRUqXNGQL`K}MM@lzr zBF^W;3%%v(J|LSoj$zqs=Nj9fw@zCy)Zb2PeqWGPhvrOsVtM!zo!?HqMio^Tvy}1{H@2n-yGr4g z-_VM`;DFCm)DhGWbPt<*+IbQnbx#Y>{k#51QZ9Fy!}}LEzc1m);_5GaptQ^UZuYkU z3;{2nNgqYY;i7U{*($bic-=DvaA{0jrZs(G?a5Id_VGJsG90d_n5R^wL|#uSYMus5 z;8a{YK>}$$Os%G`G|$kWws}&T-!-8fE&C(x4_tDXOnl)sxz}9sdi7z!drh2IaFlCy z2zOE(MFAfZkF@dx5oTik%1DzgLOU*#l7S^y4Cx;W5qNj|JNIR|4}-1sdg;tjv`#+8)E8exiXW2xQUN_p<^Q3#OZNm zBU)X!9ro&ii8x?S$F?!qhu?&SKA{N zO%Ai)GD%`JtI6W{JeBNeg~YUl%;U+eu3Lwf{b%CD+E2LtKJ|w~;Pr@<= zQJ0xCSw@p;;4R&#z=O%Z9Va}x-&dKmb-$a8)R1V_U4}%rv|$|1Si(2V|Aq5c zlx&1J(XioMvhVyit(81yL3picjgQX7q2JEPxa%x=qdT<+H`79VwUWwELTp2eJ{VVv zo?rF`&6ONsu+f=!vWDSBN(y?12y!!XeFNhSZM1ywStB^xttru8Dc8{TplfLAO*lL{ zOs2dgfq|uBV@;G$U`<>A(WG0knC<-_5En~rOWjT;zliB{RJ0|)`+yyYvp+)P@a{yK zZ~n6<$T!3W;axv-k^0(#3nu*ZjOWxcH(N5cJtEBb44HOVPgv2>$|KcE^LagC%gjRK zvR?7FTaDfEtAg|Mq$)-ToBuf-LkUSVRE^q&M!9N9J*zcqr{7!ED;2+S0_MH( z%?()*p01hizq#qmt}`|y3)6IeI(r$L-}5=k6b#y7dfO7V=?CiQ>6MMj)UM$rg_}Xi zD}hr7bsWx4Dbz^wm~x7iasJ zzMsBeDm7+lc@w5@a=Sc{J3x^sIJqUb0LDykALUiHuYLp&pXbdv)LU)H8ffte zR6lyKa^mfg^A}h9wm&zZzqDTboDsh8ql_(aLiphh1W#mHZx=oXyh>eIr`Ti7Lo46a zux+U0Fws*9u2!NwhzNy=>jpz9N7W+_Rax<%F4^FsV6`Mnivf_+Ap!)DZJuTGK4!r~ z$a2<~n;CYleR{zgru^EP9^$mQ#~0o)-qBN%UJhmF)AO0K48wMeEK+-{(l~@XSqQ)i zuZ7+l>gsJ%m|)^h-tOf?mQGb!zaC@kJAzf`c!1~nazA8wmcEZIwF9wac;T3MCZ44% zuRdyQOIRj=?Rt~mx?z&jlXc!QzYQhW^*6$E7-v)d;#X+6N7&SuqNeGpRxn zZ>Obe>acD$j@DS~YH-)7&o|}ADeZS<@4c_9>Q&Dg3A;$TMZDITzB%?Z=uz4fI~z9l zef^cS)mla7QbmjF{m*N#Nf_I*C3gqnnHh!teqeZMtPJcX_fy!lNDx6uPAqKd<0iEa zG7KKRG)DPZ#A*g57-f;PPXF+TH}AR^JhRJ^ckpmG;ExVtU)Eg47;YCrefH4>+Bbzi z)tqRura&d(M*+0y(9o>E-QvpG)C;}3JZsM_DJfHJjgTfqQI0iqELg*lvz=Le%syyF zLBudDsJNJld>ezfBH-bj^6%j`7a9K7^Tt*z4|>+J-u7yUkf{Q>PoeU^SIG+TU++E;vY9}$i&!jD4axnf>n*j7XaK0 z!;Z}Rwe!g)Dxr(3?G85DF)S1R8^h)0wLVH`YihjfpKyIs$u`fhI&&aZY`TJ3rQEH)SZ95RrCZl4&z+a-RI&_S<*zJ6>#!&j2 zsN{-Z{=29bd5W)U{FF>({Zn4SBLPm(^{#-q)^6cMuo}={Hj^*WA>f)*vEQe~pmr?C znp050XRX%yI2Bg)Zjk4Ig~rTDom9TQkZkC(|6QtrLTE8K)onUg1oYZ5B%+n**DftI zsQWO3U9Of7oaBNh#7X-)C9Q?Uze(EF_2$G!fSayLF>Li$Z)eLi0ZAath=i)P2R~{f zN;Ro4H%FL^4$p@wO|HY7`(<=`e4-xhd7NsW?XrqUU)h0Jhut|#V}`R6z7uA`NUbnH zt*((_)DGik*_I)7VL||u(p9`2_+^|X`=^k^L<&P4HjUIINiAsm{k9r zNJG|Cv(}FkW^aVN-um9aiZeFbx()}oDb}jg)A4O68F~b>g52xs+FQtwNVqwO(C3@8 zJ=)`OJHwG@?)XSln1J~Uvufjg*NRzU<1_P*k+3c4(8&%WJ_>1A8k%-yIA8i!MM#m^ zDdsbw5$CmAUfS~aPz!Q4L9kkhWef#FjGx|tn2xYK$VO;h*oCyysiB6nlg#+j*P4@l zG>WtyJ>sll(Eru-z%wl)3=use!O}x7FHy8(mdbkalkSfhU4CiILwi1P$b=I0vEJxd z@1FV+{2T10`_?v?(_pF&114)eE4**<2N(Cri;nlr3+a0(?KU|MO&Cg1?iZrPk+Z|c zszx9(pQA46riLBhe9*lc^)w!OMA^OZv=mNz8|>}#c3mZkj<;$T0Xb}u2YcNTm4n)72oVw;@M$rZ*sjsfRU7P%Xf9={a_Qvu^(}hm&Qa`W}Icmyg z5d9|QEwxZ8xN6q7l{4)4nM6Ur-6ay*uXKBp_aVG)X-+$9D%Zy0WV=L)0uG&DTb)rq z%X1|6GjRdYHNa@beN=>ljh+Hv*u!5zFs-)po6c-q08GX^_xZ3nYw4ARK3W=;>%vkd z^(T8%8m1}Gs?#Z!51zDorNN(HS#m!`h5;H1kw{O5OuIotU><)HeITL9GEeFi94+l? zMY)+Z>vN+a$8v4M!f#EjUFySgC3Bz51TCd%6?NU8S!mZqZZh4Mzq!HDedSUR^P^~1wAEAGu z&^p}5_+5gQO-I#X*(bv1Ssy^>eus2o7-G;f8Jn;eR#@4Y3a}0n!UzpTz?zbYMlgI$ z@X4nc<2NMVI*q}d4?F=2f3Y;!OHz&S@;>fkfyGjTS||7FPCN2Z_qx6w23AGqx0ePc%^aR3};y9!nK`qw`8 z&DUsfvM3M;n^yt=Z@RTY&(J z8B#RMxe%V+ZYwuMh(n(9M(=tIGwgT$o#yXwd`Kz%%XAFKan-_bd?I?L$V3FdR4##A z-VI_XeP}Wvu1TRF^vadd**r;>P1xO{^TV!wD+0zgM}6fk2&?bPx%$DfXKe@a5G~sx z&3?B7QD7N@(cC?h+AZzUiT1#``fZ-7j8u1?a%nEpB&3J@uX4Wp9m@A_UvFDNgvdH& zYe6b&86Wf^9YF&NYL?)&*Z z-{bk|`3IgKUdJ4B&m6~fUB`Xj*LA*Luk$>^1fsn%b}rgw8KsCo3&3RP;9SJ!IE3c7 z7UT>o%lS^2-`kV<(TSRthsVlseWdprDAUlLsDFB@1^Mk;X_)O!YiO`oFC%2%tt#+T zrsDISOI?a)e(m?PCt>?`NHJyzffwaNjcD5g&+(*FwD2X(S>2y7z2&D|MthQ|;D3DiCJl^r=rc5i*-*UhD-B=ZoPa7II>t6O#Tu(Yl7OF^P!Axk6ug~d)t z2$c3aB4$nob}2? z{K80$nb(%2AB%`RwJ0fji5!pS0_spG#>qxz`J(mdo~V;!n>fEm3kg;AHX<&*G-I(4 z+dGLT`aFXBmr6XM>pkV-wG8K98=M@$aqnLzRzpeM=|w9c22zvDnGrKn3y$g~b4D_j ze0`R`%qwbBTJGPKNtt1W?}x3SfbIXDG%7yoFkL4N2ciryt$`yT6jkI8nD^Xqw(#QO z7qt+mRM5?opRuHNA6=)NbKJ>szdbXV4{1|qriSjK-lUl=s3#zG%2{qXCNy$~n{>Bu zSkW)ikm)GP4dXAN;}X%>mtOBT>i2Vh_MXEnrYO z`5mZZ;ERZbR#TXgLiWDR9DP8r)9&-n%$Ip5wxrFYv+|d@j=W+2*qJdo2nD)9ns^tt zKOAmpF{5lgBE>q?nI>DExM&k!a5A3a)lg{|AFvKr7nf#?js`zJruNZ7W(1U}`yFr< zfaP*+f$DVDLordqE^*1{Ah-Rl+`v!{G}>2``gHRm^1B0(FON8|UVX*o=RTCX*!xgr z1gPA=Xq!aB6LcNy2T@)4&Ok*Nzx||o4)sM_b5?x^gLL~{!JGuVF40m$)r-8u6`pyw z7PD`}o^6($>`~_e>gopR<;>7)w5V3~lx(8??a{%B>VVh*Vut923l%-wxQJJcSsa7> z#~duW>2T=UQuQAWt>CjJBn$ZH-gYC!pLLC?Mw_HGK4I$`&!Y|l7(^wKcEdLy_`rDo z#_BTa*a{iuDw(&f9FiEI0}kR0`0$RuEc@Gq1r`**o6B^mY(3Q>E&CZj&(u=gTxH|0g1$8NQ{As8Ev_ztD(84 zyYfB6G2WrEF=>YA2n|$MtixtrcH3wid=H*9zbJDz{C=&+*RUGKcfciNXgY6y{!Rgi zZbBeN@^q^JZ`^9H46Le$!aXtNQ{lJQTF8$sL;FJUXc`Jwd3XtC zARupM)Cw|$$|+3?Vx%$wx&{L_3>NZ40Ea>zn?M=j^mA9v-UFSOc6OfmHa8OUdNqsjRc+35Zr#gY=tM=V9t2c4*&nT(+0KSms!91qm2)<3`M@ zK1RP9|3VG9`<~yaj^%OiiKRx*U$A)w)|2Q4bnop~+*9Wxbvj68ahk2-Di{$qG{Qq{ z(2UW4g#IN=?`^N`B_T_?^d?Ej^wYu9;LX@RSUIZ0$Y(JhEvnz1YS0ZU`4Bg2t9`)s zW=>_)1&kQn3zN3V$t!mI{d@TjhrDM+OeA)@akn62pNDmr>9YtY<=X-usp1eB$k_>b z>_jkJ^wn=O@emyi)pD7Kd;!PjIP8tU{toSDpqU4`cwQ!NC!x-)3!YG*TT73s0jgkv z6Uk7YvY(H~@h=$ZjaEU@^_c@ch#h3sNiNwNHrJg2L>A8SXZq}GvE1tDlc`#8nd-uK zT`0e!xkX_i6MNDL)en@hTT&D#^T?(8^%<_~hmE!b$>+;DhDd)nOb)W5c#$r&Mj}Xp zb-iH%2Q!G*&Zz0~E&w%0!xTS3-!JX!ulFZ)c=3NUBR_3AE$N_|gI0}V!%&CdjX^^= zQCj}hgAxNx(ux7^C}NYB={@(w>cD%`eVj7kYF;1hVpTb<6gM%BtWOazTiWpHh*MqV zMeO?nrw*a5hNRFQ>Ml;Z|AMK0la`iTqn-HPKSy=4266vmZJyU7`D|~24*93=-JYJ9 zM=Ib0{(F5g9kG;lrpXHPls z1bhT@?%!a4B_BbkgMI?MS6U5Aq0sMf2*Ix~EaLj87XJ#2YIj~Cd42gLZ0>ePH%9(& zvG=bL!=VZ+|!hqxJ8TVTM9ILF$Y&rt5tE=G6WIp%bRl(F`Y|CBo{Q2(?#^ zq9el}`IN8F9`L>I%z0r0_8ho$%_1wK|Ni?E9?pjKp)Aoq9QFq}>R>w{xuxj*b+U^U zku0MfWS0kN7lw+}h$tB6d+Z}eaxpuvlEA5a%$q0bT4y{5yFp}x#78iM+ z{f>m+q=WOoWLV<_$Odat8@IS#^?W7Micuea^oRY#(!=9Z%UIyB0D9s=^Qd$n<3|f3 zuh2jV24}*Yh;kwgnFpHr>D*Hmzy@=)fu0qyHiI2E_WDp;eG0B@aNMxEsE({M>N-HgY%VQOBtFa-QVx45H zu`7S!u-*sLP(v@988ae*(?AsJ!qZx|CN;hpk3cakqd-Ff7j_>9)H3`qxV|SFAzfRp zLkUE*_Ta^@*;Rx%a{cLOu-Cq7BLI~WgTh9wq~J+P^cy+VKeZkAN=Cr6F2ODwV`~Wh zyh91`^1AswBh%w*YOn)0z;|iVNN)wTh8nWz`~mF0UM+;DVEUK>z%qDMSI03A1huy5RqQOkV(ciBT=$ZvvNAM%$)gF9DF224ha0fShqAhb)Wt0vBC zqFNANx-cs*>sNjMT6wI+dCc=}OTs2s{M)v>f#+XmmRnoFAMa2%W;U+}y00~6vCy73 z8BY%0utizG?T>jIR=H5{o>cbCK=$3+X16!9r3^ru@9fo(-do_)BqDjz`L$+oU_(cj z^F!|NAD!rF4+9R?>2YuR*D+NjBD|)r=%>pq4f*a`=g;;G#zWh>j{7qLdPm|BxsAuf zCnkUq5|BR3pnXgBSNut4^8A~d-53O=a`;iuJ7^v^HtDu}XM(nk;QI1COA({A3x`&r zLX6&n;&qfCDCr7Mi#Ot3yaf%PUSx4l+Bl%$;%p+&^>9O5vtqsE`Hl7GeDZa~F5PyU zNKw}29+K$p^OFqJeEx8#YXmV8fU%?eA$2^(6qpK-kBLMbPZwo6-_2e$svkf9j?k3k z3^-;JhM$={d3iau#JSUdXo=cxFuRD3D-Z?P)%OUojRi9F$u`$ipTaI!M6W0Cv!V*Z&ES7k8-eMY!Bg@x82qbc$7H zQ$xIMs=_A|;qGTwikqLl)IUK_da;;8JyZ;IVDj+%Ozn;t`}kYTAg@YSfBPXRH5?W3 zUccX41R!LY9%?+dP?wVCXVPd5iKzVBo)Yih+2mq>F%%5`!;uU+%s#SaAhjQwXrK}n zFl3LX`;7$@w|w0eG!@SqRPnWA_cQ3_Pt27PXZv~^%xO)bZGaSchX|4K11xxg)rD`f z%mISc3D?_cTlOP}WFwCS@&~dt?1xsdvtHkkDv$4;k4`uo4dms_rFVjX5K z#t(n`1tq5gAgdOxFtizr&EmBnmu~u$`?ovbqT4Qt_k~1=r}OUGE2cl{8j2^=Ze`Pi z+Bahjczs#Mm@u2`qu5pj%IWxx?|fyuu_BR;IzDrFW zG9mOH`I6K(%yd8d+v>08QfXW4BZ2_c2F(T7vM?VOoEnFD(3cA<2jCQagIQIU(ZYV^ z3AMbAy)(8F1kM!$Z7H9Wb?OFAR=iBMrEj6t zYJDf9E<97U=dl_0_UEL#I@}~Mz*A}OW)m@&G(SMV;nGWr4KGMd?wRt_j=UbBhyCRkuBW> znmsz6ENr0aFaN`s9)O;QNFu?XXbpHZO2Z4=y7BWh5c?*4W6I~+e)I#6*l-1)aDMB_ zIgluTHsad=0v5TJkX%1bSK5gMD^MaKw{olR#Ul8psN1e*l@PIzzErg5@q{l6fro%2 z=1K@7BZaZHgWYvz^=9qfpExl1J~_ApQRu(P=EGv#kT>Gn7$_0EsK1=nmA;=&QcBg8 z2&I8H9mGfK{T(x3GK8l4y$Zv%EmZxKyA_X`T|J1$pY$&{UONe>W!xnG9S7@_hgEd^ z+FJ^lo4$SMhll6f&!yaB;wEn0|6V>4>JZ7#c!s6*P_Zz&>7ewmhtJ|Eih1F=%7-2j z1mD9~VJ%;1rt9|?b(dRb7EvrQr#6DHfiUtmtvdd1)5fn7bB8n)CRviioo+Gw(r@LF zV4E|avs-YB=l;jl{$Jlywq6IkMML_$c3bw8{e1VW3}d78$TY`oA6a_x{Ev1tKfA|3 zfSFhn2BpC8*u}m9S8Hs{ez&8JcJrNVbv6h8}0Qe!lLUM`{7ICC;>?0-WaXidE5%1El@xDG(l{ z-M$P{ePJ$<0#B@4bLYg3V^y3tanhbJXoUq5mXJ8DvLfr>k^sOrC2W_?-8xrjM`9q`>x9E;=~b zrZqud9LxZHSOn0^1bxkmRG$WvSpPV(3~zSguOK;w*^=x5LvEIrM^L$S1=956cs1fo zS%%bMsY%-i-_BFEmtvCm1HAi!+bFG~Y(900`8Juf)sE*JuNUG14AR)j`278AGcL61 z+zRWHuFki)nwp}2BpS=VHeJ1>G4}e$8sJNTKZd-2kYjKx%&<%DB+zJk6SRP>E{8rO zIX$bwM!1r(afKh+D7lSIuOz`w{yi3i7&c8J!W}p2#NtY}+}Y7R%L0>#nI`In$N8F-2r+nv=_j zx@LO9m8!P(GQZ}Cf4xMs+HXqT>5(^4JQp}1e=d4U)RyVWV9*XWscLj}N4j!)1&PT^ z;eED&TrY<|z%6E}bC{`CkbS1U*pV7Kn16 zNzggzeaO^E*RZY!P|iCsp3&l?k&lAZJBK)!hK`d6*lFjwF+{T3wN(ngn*5@zPPWdq zLGH8CR~52cW}m1(nIA_z19A~tz&Gp=0u&v>mX4?BkEeIsqT7%*H>#*=o9f=FsI)fa1)tD=?4hPGLa`eu}PmS}d*JZc?FH}0HM#!tx8 z%bwv}_QaEYj-@`>eDJn8i4^fktT5#0)|r&bGY2y-T9Uql9e~?JqQ}Ro;fy>_CnEVn z7vX%qsT5gwd&A@wzOHn-h)>DKlcPRdAtgTSUQ@V3V93L(Ep$%y5w#j594I0P8g|jU zN#FC1#uxf--FD@EQjJFZ(C-@D<G>t7|u7VN^ zz_f$qykNb2C}bTb$Nn`nbH}ap=c_)jhvf7r=&jvXoXQff*T>vu=LnB2$r0oapK7#b zSaXEHsV&qqGR+!t9O;1Ko@z`nkPGwaBnx8<>+3;6Yfd}1s}d8gNtmGx>i0O!yVal5 z&-KX{o|X0j8t~##Lx3~^K+k}1i75w9`~Y~%xu2s?ybwx=%U{6Un>246)?Dd3Ebzhx z8aO&64*+ddMazo5ty*y8&HXcx@sym-zl;<~q|H1z(H&IB^jSDj-*Vtp|G9{U%qAgk z5|7izcjZHB4*j9{0*ONuI;qE4#mRycreO%r>%dbDw~qAUQ0~A+}i5P@YiF zkodRTKk~T^{9y%s?Z0NLD}!M*SiPpwu(yr!Gr`ZmHlkjpJzUQfoHAfhJ)nB0 zcEWVNF`ZE;yVD6%r-)Z=`9+D-)d+D_SW_B1SDu;~oVZD4KrB<}n~okLFY0SO9Syw+ zGrS9g_1@!YS$;aHEQ`_=f(T20QL`0oimm-rFw)JBZ8AQL%X0KoYC8;`aCA`073wp| zp0lC@^{ha`(AOJ#1W3E#z|ms{}qlii^LeCRQ#F+F)5qy z#{uXs6$4p-t#LL^mG`dR$i3+LZtdPccFeJ^j0h z)%W6J0ZAt|;j=@ASWH<|drX842b(;{`;it|_6#wr(}kj?t;vbedE>MIhOHWDwSR6E z^Pco=M!~Z3VruqDdQ0cgJ3P8v3@3sNSajcz-G}CZuY1x>fP&n%p#bt4ZM&q7_|Ke8 zP`DJS>Mknzpox$-uPswe;vhsJ=ymlj(ELHOQpryY?A^lr=LQKWbwCy)A zO{!rRS#X>G)BRCa$y3{w{_Gt_;H>kV1x)nqWnr9u3fGr?tL}ugQ;TeVpd+bkaE9eK zfjkX`mrncAn2Xn&$A4R4OjjILrqpH?q7=yT8WxJaMF5((Wf;6s6pYbh_xz6$XURZD8O0*FHZKLKSXX{G+nP~Qr@&(vwWBLeF$7r&?)pEvV z^gc6qN0|71Mam182elIXQuVAV{osYaO}4Xh!JUlP`Kd48FbE4pgt^V1xmW62CCDxN z4g2Yr(F_xsL>gO>Wy_41??a30Bpb*~`8ze_m2OjU4ep9p0u~WcE+yv}OT$W;8b1cu zRcCplzK_^ULEE*-*z;)Gk=3ovVU{_*E@r~|0c0jse)4wSaDd}iQn;LFr|iVHK1M98 z6W=eSx;(V+#^h~7iA0?NZUl^wEYXEJR;8t)Vtr}v%bbe3;2W!l%^Bx2y(3~00272? zr~Yu6REIhg-Uc+ zn?zd7bB`mX=c!iqqrpSME1{%kR}dXooW=WZR~v4++Wf=!?Qn0_4pmv)E^puY_as3BydDH1tQA~wWDSIU`WJOA=C`M_8~-*o2t<_6TX!TbJm+a*?oPPLwpga z+mO@PLI-Gg)TP_)>WNwymF_wIR$6y*sB*p_rajM(T4HhDLqbH=BH@l~rlpZe%J+=M zORamq3<(hCp)WN7ugP&}nzgLiyz;00o5*W)?Q$rk=Gh`Kif?4$(N~VBbacAA zv+C-MnFn0u#s>0jt&60h*Zc+U@&dkt46p`lep4=N)RF!!chQEMDRjNADI3CP^$2>t zFd{q{My2XNNT#%mkIrr+-d#^=WB8XJ>^@LEJT3~vI?K$ZE%t~%UZCZ4u0??K?1n|o zVg;2~zj)`7ZpAsJo=&Ozi1Rk@z4?4T4bD_pbRweT435!vh<*BiBK*gbDEXCa2y|>C zSlU(A#(J!3<2taGqB$#>3~qJlvrVQRDl*kyF>f-5Lx6Xju<}cMe}|>1hmHY#D0>#A z!Q7w6W8d{sxM@0_x!bO;t>=~*lGroq^`EZ~-OV{G<4X;GcT6s!=&?XLL(49Rp1Y~cf(@8f9$WTth_dFZkKlW*2$;c zOaddBhA&(IAUek|9OqFAAmxMYiOL{MkDq|l!0h%|1~})UYt@p%Mb!%>{sDY?{1R?6 zP6YZSOUz$i4i(4PJO7C;O0lD%lBr;5CA2{A)30qo@71x28ImGYe<%YccJGe2AHP1a zL5$;FW^zb`Ta^FiMr+N|m>o=SyYBb&%x}W3^kdLEyp(n9;3dkBdjeY%hrdL(iM{!6 z-J?>;^P6Dx5QL@$WlK5c0{>axX={{ zJ6mw%O(A~tcSi#q+tDQ>KQ5+ONK)6eJpS|q+oK?&hk#9QZvn*-Q*L)Gcy{O^kJ-3tx;1Wb>3#nj%Zeqw zlDW4UfyA^iK6)K@lSZbvH@;&QK$0LwaQfo$Wm7XVGx&7O093liBjVA+Ux^;R8PCC1 z0tJ52=9&6E5=dYV;})XK0SMw*N;QWAHfC3TUi$@ zhfDhpO{hHKJ2ZBsk{VDPSb6u?Axh;q##>Jpkz6wRqpA6W^J`b@M;tMJp1o5;QZ3K! zH7OZ?;L7+^`@-?9k%^e?$)cn)9H%wyOgO}V;GiU(dHW9#od0#@@74bv!DtC8D?M>< zcMv&Xxx_{j9v!IUR|2*G2#V|tXkRaQEk9Ap8RYBM-|w8p!I^16srXtm_G*q4D`sc( zcfdpcQ<(bx#|!AMAJE_6cx0@-Xd=cTn)mmMFTg1|)Wrqpd&hxmc7G%9KhyocQx5Sn zzWZa(-tH>T-#?!Df1v@4$8l6p%F+TAHTM6ePs2ac{|6mg B(OLii literal 0 HcmV?d00001 diff --git a/content/posts/subresource-integrity/index.en.md b/content/posts/subresource-integrity/index.en.md new file mode 100644 index 0000000..2922e3c --- /dev/null +++ b/content/posts/subresource-integrity/index.en.md @@ -0,0 +1,98 @@ +--- +title: "Building Trust | Preventing Content Spoofing | Defending Against Attacks: How Subresource Integrity Can Safeguard Your web apps " +date: 2023-05-29T01:11:15+05:30 +lastmod: 2023-05-29T01:11:15+05:30 +draft: false +author: "Vidhya" +description: "Building Trust | Preventing Content Spoofing | Defending Against Attacks: How Subresource Integrity Can Safeguard Your web apps " + +tags: ["web", "security", "tools"] +categories: ["security"] + +resources: +- name: "featured-image" + src: "feature-sri02.jpg" + +toc: + auto: true +--- + + +## Introduction + - Ensuring the security and integrity of web resources is crucial in today's interconnected digital landscape. + - Subresource integrity (SRI) is [W3C specification](https://www.w3.org/TR/SRI/) + a powerful web security concept designed to protect against risks associated with external resource loading. + - SRI verifies the integrity of external resources, preventing tampering and ensuring their trustworthiness. + - By incorporating SRI into web development practices, you can enhance the security and trustworthiness of your applications. + - This blog will explore SRI, covering its concepts, benefits, implementation guidelines, and real-world use cases. + - It aims to equip web developers, security enthusiasts, and curious individuals with the knowledge needed to effectively utilize SRI. + - Understanding subresource integrity will provide insights into its inner workings and seamless integration into projects. + - Let's embark on a journey into the fascinating realm of subresource integrity, where trust, security, and the integrity of web resources converge. + +## Concept and Benefits of Subresource Integrity (SRI) + +Subresource Integrity (SRI) is a powerful security feature in web development that ensures the integrity and authenticity of external resources loaded by web pages. It revolves around verifying that these resources, such as scripts, stylesheets, or fonts, have not been modified or tampered with since their original publication. + + - 🛡️ **Protection against Unauthorized Modifications**: SRI ensures that external resources remain unmodified, mitigating security risks. + - 🤝 **Maintaining a Trusted User Experience**: SRI instills confidence by verifying the integrity of resources, assuring users they haven't been tampered with. + - 🌟 **Enhanced Security for Third-Party Resources**: SRI secures external resources like CDNs, analytics scripts, or social media widgets. + - 🛡️ **Protection from Supply Chain Attacks**: SRI defends against attacks injecting malicious code into trusted resources. + - 💪 **Fortify Security Posture**: SRI strengthens web application security and protects against potential threats. + +## Implementing Subresource Integritys +Implementing SRI involves a straightforward process. When referencing an external resource in your HTML document, include the integrity attribute within the corresponding ` + +``` +### Generating Integrity Hashes: + +The first step is to generate the integrity hashes for the resources you want to protect. This can be done using various tools and libraries available online. + + + - Using openssl command we can generate hash, download the file and execute the below command + ```sh + $ cat launch-29da95ff591c.min.js | openssl dgst -sha384 -binary | openssl base64 -A + ``` + here is how you can generate hash with the help of gitbash tool on windows + ![generating hash for a file](gitbash-sri-hash.jpg) + Example: + In your HTML code, when referencing the JavaScript file, add the `integrity` attribute with the calculated hash: + ```html + + ``` + the prefix sha384 indicates that it's a `sha384` hash. + + - We can also generate hash from online tool https://www.srihash.org/ + +## Blocking / Defending + +When subresource integrity (SRI) is implemented and the integrity of a script file doesn't match the expected hash, the browser will take a specific action to maintain the security and integrity of the web page. The exact behavior or error message may vary slightly depending on the browser, but typically it results in the following: + + - **Script Blocked**: The browser prevents the execution of the script file if the integrity check fails. The script is not loaded or executed on the web page. + - **Console Warning/Error**: The browser's developer console may display a warning or error message indicating that the script failed the integrity check. This helps developers identify the issue and take appropriate actions. + - **Network Error**: In some cases, the browser's network tab in the developer console may show an error message indicating that the script file failed to load due to a failed integrity check. This can be helpful for debugging and identifying the cause of the issue. + +## Conclusion + +- 🧱 **Subresource Integrity (SRI)**: A powerful security measure that protects web applications from content spoofing and attacks by verifying the integrity of external resources. +- 💻 **Implementation**: Include the `integrity` attribute in HTML tags, specifying the hashing algorithm and base64-encoded hash value of the resource. +- 🛡️ **Benefits**: Protects against unauthorized modifications and maintains a trusted user experience. +- 🌐 **Enhanced Security**: Secures third-party resources like CDNs and analytics scripts, defending against supply chain attacks. +- 💪 **Fortify Applications**: Strengthens the security posture of web applications and mitigates potential threats. +- 🔒 **Generating Integrity Hashes**: Use tools like OpenSSL or online hash generation services to generate integrity hashes for resources. +- ⚠️ **Failed Integrity Check**: Browsers take actions such as blocking script execution, displaying console warnings or errors, and showing network errors in the developer console. +- 🧑‍💻 **Web Developer's Role**: Understanding and implementing subresource integrity enhances trustworthiness and security. +- 🌐 **Building a Resilient Web**: SRI prevents content spoofing, defends against attacks, and ensures resource integrity. +- 🚀 **Incorporation into Practices**: Including SRI in web development practices ensures protection and trustworthiness in today's digital landscape. + +{{< admonition type=tip open=true >}} + Personally I use `gitbash` tool to generate `hash`. +{{< /admonition >}} + +