From 4314336ce346efb3f9aa128a3dd9680603cffaf4 Mon Sep 17 00:00:00 2001 From: Chris Evich Date: Mon, 8 Jun 2020 13:45:26 -0400 Subject: [PATCH] Improve swagger+CORS metadata docs Signed-off-by: Chris Evich --- contrib/cirrus/README.md | 60 +++++++++++++++++++------ contrib/cirrus/swagger_stack_trace.png | Bin 0 -> 42799 bytes docs/Readme.md | 28 +++++++++--- 3 files changed, 68 insertions(+), 20 deletions(-) create mode 100644 contrib/cirrus/swagger_stack_trace.png diff --git a/contrib/cirrus/README.md b/contrib/cirrus/README.md index 541cf2f541..c8ec766e7a 100644 --- a/contrib/cirrus/README.md +++ b/contrib/cirrus/README.md @@ -167,26 +167,50 @@ env: ### `docs` Task -Builds swagger API documentation YAML and uploads to google storage for both -PR's (for testing the process) and after a merge into any branch. For PR's +Builds swagger API documentation YAML and uploads to google storage (an online +service for storing unstructured data) for both +PR's (for testing the process) and the master branch. For PR's the YAML is uploaded into a [dedicated short-pruning cycle -bucket.](https://storage.googleapis.com/libpod-pr-releases/) For branches, -a [separate bucket is -used.](https://storage.googleapis.com/libpod-master-releases) -In both cases the filename includes the source -PR number or branch name. +bucket.](https://storage.googleapis.com/libpod-pr-releases/) for testing purposes +only. For the master branch, a [separate bucket is +used](https://storage.googleapis.com/libpod-master-releases) and provides the +content rendered on [the API Reference page](https://docs.podman.io/en/latest/_static/api.html) -***Note***: [The online documentation](http://docs.podman.io/en/latest/_static/api.html) -is presented through javascript on the client-side. This requires CORS to be properly -configured on the bucket, for the `http://docs.podman.io` origin. Please see -[Configuring CORS on a bucket](https://cloud.google.com/storage/docs/configuring-cors#configure-cors-bucket) -for details. This may be performed by anybody with admin access to the google storage bucket, -using the following JSON: +The online API reference is presented by javascript to the client. To prevent hijacking +of the client by malicious data, the [javascript utilises CORS](https://cloud.google.com/storage/docs/cross-origin). +This CORS metadata is served by `https://storage.googleapis.com` when configured correctly. +It will appear in [the request and response headers from the +client](https://cloud.google.com/storage/docs/configuring-cors#troubleshooting) when accessing +the API reference page. + +However, when the CORS metadata is missing or incorrectly configured, clients will receive an +error-message similar to: + +![Javascript Stack Trace Image](swagger_stack_trace.png) + +For documentation built by Read The Docs from the master branch, CORS metadata is +set on the `libpod-master-releases` storage bucket. Viewing or setting the CORS +metadata on the bucket requires having locally [installed and +configured the google-cloud SDK](https://cloud.google.com/sdk/docs). It also requires having +admin access to the google-storage bucket. Contact a project owner for help if you are +unsure of your permissions or need help resolving an error similar to the picture above. + +Assuming the SDK is installed, and you have the required admin access, the following command +will display the current CORS metadata: + +``` +gsutil cors get gs://libpod-master-releases +``` + +To function properly (allow client "trust" of content from `storage.googleapis.com`) the followiing +metadata JSON should be used. Following the JSON, is an example of the command used to set this +metadata on the libpod-master-releases bucket. For additional information about configuring CORS +please referr to [the google-storage documentation](https://cloud.google.com/storage/docs/configuring-cors). ```JSON [ { - "origin": ["http://docs.podman.io"], + "origin": ["http://docs.podman.io", "https://docs.podman.io"], "responseHeader": ["Content-Type"], "method": ["GET"], "maxAgeSeconds": 600 @@ -194,6 +218,14 @@ using the following JSON: ] ``` +``` +gsutil cors set /path/to/file.json gs://libpod-master-releases +``` + +***Note:*** The CORS metadata does _NOT_ change after the `docs` task uploads a new swagger YAML +file. Therefore, if it is not functioning or misconfigured, a person must have altered it or +changes were made to the referring site (e.g. `docs.podman.io`). + ## Base-images Base-images are VM disk-images specially prepared for executing as GCE VMs. diff --git a/contrib/cirrus/swagger_stack_trace.png b/contrib/cirrus/swagger_stack_trace.png new file mode 100644 index 0000000000000000000000000000000000000000..6aa063bab665237880b925ab33a37b4a5e05fb91 GIT binary patch literal 42799 zcmeFZ||ei888js3^I(zHZN7&=pqO0y=xv<~j z;;<`uBsF6EeRjM0)q zMYVa{Xnz)8Qepyv=$!%dZ^*EBtc{p&^5YkR=+yrHZq`MH%pcCoi%c1{aqqX1l9KsM zx%meHpZ?FqAJSh3qs*_vr$cIVE2Tb#t#sxeg!G90_coQtmJGFd^l1MI-y7t;2mklE zUz4JXOO?RA|L4j_!9`)E``=4NvF4pCrewBNqQVOVDZ#%l$9qBI?bqR-di14h(G0Ri zWt^NikB^Ua>Rhn0UWQIg5J7x=tX6h*UPn;yfPMR}lqOhHS0`9FPN(8_j;bHr@}EZ# z8*`9_>6oiNW}#E@?dr1bGbyjUnC}Av3X!y8N_yE&Bt%Ats`PWC*zr z>0CjxnC$HABKH}VHa4WDiuoMCv|?gosr`HiUUDTVtgWvv@98vULi?>R&K1=wMgG~6 z=w?*D3ktIGa$-c-r%yp-4gy^G3Z6?O_kZf>7%ifQ(dxF@K~j^Fdha$SDn0HILd(O; zYb?uL`Fw9i!pzJpr;`3eIfp&zpXH}hlb+g?l+6C2qcZtwhgZRs_Hn)H)1P%05?E?2 zZfHxZ-BIJ&ma3t6H#(_WO_g^h*&Rh&a#kgYc#iE?I+398pP>~fPi=uawLQSl85%&3 zCFtoi;WX?CLy09w;BtPsmNPp)m~#~PZQ|X^BSH&kv9GE7OulUF&%)b%brluWyzN!z zKeI)4V`F1USF`>Q56>NwhQ`MH8flfdvmBLwd^#IW!m4$zC01EfGjlajf$>4eO6WFG zUS!$WxTc61izBo8tS&9T$$d1j+iw(l>FTxSahvIx5&}M#GPUQnGbe&g`lW5HB6T*0 zGc0t3>@OQC?Q<%R)y+A`5b?F2txqn#))7M_ylOl%kH1_EPZZUpB2lsy+uxis6GAfh z{Zc2Vs=Ed&&rXAX=HzhMZZJazyl)1}&Z+s-)wQba+CQ&$Z;xb3BweuEKxu^_TXT8z z#cXesMwh{~uCAu^vG5n)OysFTbQX66>)dt}4)sKe#P^)pm4I^{o%@@q$K&v7ey)U$o z3yt3Hp;YSm&3ywXa;s3{#d61S60l2hmA(PZV!mD%MwcS)LWTI6+uMcIA|V)=nL647 zyyTggA0ucKk#Y|{7_Y8edcsOBU_}QvnpVdX*gvq3lgf{bNyLQbt zi*C9XGcnEUuJE|Vq5G?d$$Q^d`onpVB1C!ceTE2yPE-W^{7o8nN>p!K=g4|l>D+0~VlFEv{yz~%s+tJzSVqLa3c}EoS`gNZ# z;RkW?z4`jwxf{}LbuU37_x<9thaS?GN+f<~Sli^}y#4qzf^Dr5(i&AO-d!TR@x{7= zkJ4y=3TU++@jVqw3>S2jd-D5RZ<%TTeH@(f`h%^}EGiMNiED2p;+9<0r>1>YNlwma zvQX26$b*)Fkr8Z8YlY=F5o-9qqX%5#8y_5fy3Vzr9d&7B>kb0 zw!hDOX*w8A5q`&tt=f0Cr=^&hW~ zC6F8^i{xan7~@UWu^)gzbini!42e=lwrZAm3Nu#&80=kqYV*^#*H;$IlLru5cT=A z_s6;?Jc?=F;;FSczg`f=@?0H{z)#^{KL{w&y&bLcINPz>tvJ3T5dAn#Y)eiEZ;tfl z1{PZ}woU(zExtB0{S*^!0f8j147E}^qA#mwO3{417iFf{(q!f3H%FG+;T0R|c+{e8(9;Fu>j_fo z1yLege{+Qt)Rr%rCCvBYIZHn_&)2(m4-ZFy;B)6-5Ty*!!O<*fS+JqdD%+32!2;Y6 zy($}WaBihilyc=1tv(PAH+#P8;koXd! z)8IisOG}%YI#6AglbgG`zdv}q+HE;oktZ=b(AW1vDuMz}#LTk7Za$fSUg~Hi-1LUe zymzIO+j8t9rT2xKhCWMoL#8&LUXnnpzjCTf8nE5U68go^&c>-$;hk3V48OjL1ii8* znm&3VAxd*|^VGC7`9|esX9YRAm8>Yy72t%qj;mccf?Zt^l%KzRap~!dxLEK_INyhk z*DGhx?MBjw^hJrmTX13-iR=A6Y0$jouJ=gpl0~$CB)%B@w*piQak+|T?F|<2DFcIM zI3eMqM{4LS>na>utYqgVCT1~T6MH^Lgj$T}$F88ep@`+;$T^X7i2sB5fxn zqU>eLz<=2l(uTSewO>#{QrZ_s8A6&#;vahKZ@t9B{h)r^kgUE~BdoR0r5uqp9MK55 zw1iQJUfE#fSz0z+ccpmTcsQ#f1f@?Jn{XV({AJrh;yP~O3{%Z;eaN}6NRJlo9{Jdh zF*JimM`N?)3cHVbU>^?VPX9cYswxP!j|kIkfBrc(_E7`{U*?cd~ILs)nu`5qKb-5Rd0ll{H%G#vPuE(fv(`{ zTotPlF2&c_gx%kM{CzyQKHH-PXhc+1vrA!5Zn*jXJo}x4wOMnuHqkWx6MK5Y${Zj) z@ekrTR?~Wy+M{1zKI8awd3lLVjn?v~Gk7RXaAkkp6!$}ffB>e`_RJC+l_{(3;pc`v~C=6rd3TlREgket)x6Hlrux4i4|ufMX6PEXs1hlgk5O=T>k z!@qo4ORIIZjn{lVot>R6XE{#C%S#e)4cpasOybwGvtz5Y`m-`!YOFRNC+E1C<~|12 zjdMRXAwk;3g*zgJ+fhU8g_DAGGyZ<#6zh*4KkkF)zg}ifY(D_r6zApby}1PjQ4r6X zr&jPjFX|C7xooUTNGF5kOqpr0sDIxz*}q~doS1=u0oYz^zFGl<3=9}1I0IgSU;aAV zl~QSx?C#LWwPpEbovQ?~nckY->HadH0HNTs>Zrj&ZY+e-7|wn4*LS3qf2%Y5B&#Hw zWx3={>%(aR6;;(FKK~D}3-fe}ZnXBp9KW{@VL^eHQ(0MLH(To|+vc~Mir_=kV{V3Q zdK(2ibb6YRZ)2Y;oy;b|K>weMSxGV}y3Lz`a3H!I>F&RumTCYbkD7|1{~5JEy}JO_l;=Sw)xt+?tJYB^X6lU{^o0VnAoA> zL1^yw$3efJ$s!z+-V~~Xc2$@PVgdb~mAv6LeMVedT*pU8&q|Hs2oR{CZ26jmL{a-I z{$Wkoix2)<`+2iqO({ZJ>rK@A)w#M5}pA zFG7ft_3$Q8LWH!Ty{xX3R8Zi>rx^dLDLwC^ft!xbPL#;TtM5xMovD1#;^_rAUll#W z$HzZt*ezDEx93dy6dCzbABn)TL~dx?IrcdI3l>s6r>75MkdGe$IA*rm-oBiTkud}q z#7n0&8DWurG5;-qa5Ss!s9(N($vYlm@|+>QsFR@IG8OKq5?vw57Y@*j;mHE=FST zuOB}@D(Z(AA#e1_geIT(UT)MA^R|mFivHSqI9!d}5T`7vjrz(;i(=8II?!K4u(Dob0 zN@zqx1zK16E=Nb|U9wOT{uFAKI1ci(`c(S}++5JMSa5UN?hrXSI|D4;-usB@J~sAK zcCjz6M6tae^F}IrQUzU)Jhq-V5k5NV>Fr$7jxEetTzdbVlYcld;t4xGQ*K{T7#p+1 z`R5<~gz8J_rL>%3B>d!M^tOK0vJ%ctPL9sb^+rMDivQVsM(DabX$t>{)o|U%3~3Our@;vNK+34t28E`)!66-M^7Y1};%}KL zH^;hvf9d>*M4utSr z(Dd>WoYHZ|EonTbIBdFMb98i^a~W6kIUAL}ckdo#1G|lH(I*x_Qu*d~fhTrvbEG#TwHcAUQ zfm80)EA9J^3IYHI?e8a>me0lX++-MzZHDzQ6RRJ%T@edW_j_#-Pzz;%bH z;I%}p`=x_crIp%-vx~DcGv_-uKo%9eFIsu$!rj!=NRA(y26p9FuCN{9ZCK1 za9SJ`a6DEM-)-yN9#HW=3~GJl=EiH^3?t!Nbi&cDwt2$C6UV5S>@cP4z8r_VX1Cm0 z2OID{IOJrrHE4~*Yhhmm!*;g9aI`JB!e%C>JrqCo>(^JWUP0XFJemHAj{X=L>U_NN zCYjf^PuG1hA|Yt=>JDlV5Ojb3^vR%?(D^MVh=s{~_IkzZ>(Sr7bpVT=sds08#H3U~ z!wjNjt@CC~bad-}^`c%T#N$uCTF07xH|*%>F+YDIs5ny$+(F_8f6KWK1zduGy*QD!upC7e- zOPH?lEN@3OK#ICQ^f`=u8d_3~(R>Hhl)PSOVwGO%Eus&9C7G04s87*Fo-T_*s=D!Ogi%LxL5mXlD+vWamFjXSCHcN5F_|n zbIqpyFt^8z0jKUf_R?5Sp1}PC19}W&ozXZRTQM#LwhwC)4S&p%6bX})lV1F->$-#kR{HG%G_;GA(EV)xR^~4Fx6j(XS?X`8f|1x@DP!Kt6D~mI*58 za+Mu&>}*@Xf180(_*5af+hFQoe$EkmDPJvIF@^VdCO6{*j>G;oOA0rhU0Vu76EZPF zR8LROr;LnRK_$QeXYWxm#(w_w>zUmS^dhVuFk3Uf4bj9lhNF(AjiVe78!yTX+c6+! z1BtC5z;(DU`i3SXkPeF>g>SE6s~{|Z?BaMZCtz2%&8X+OP8`p!KLjk6oX6@L52UJs zfRwb`zWG)P_|V0iGd_qerhwjRI2)6v5^(wmqS|Pwu{4d>))P=#k@Gt|z6<*x9yGuv zwI5Ime%soz*cJZS3_rmMCt+O~R~BR7=Kl85xND?Hn{T$#+WbPm>vWJWiPIF@(9jTY z5U3n}a1Riui}bNUVbz%}8>{i#K>V}s<#uicnV6rjzRxi_wUFD|&0(|oYriGTjVpg$ z9UXp;qsOdT6_5eL8q<09W_Tc|67YqOAb?Rb?+hb`_<&~&B=dyFF{_V(l2XtA*7cz2 z#tsxvq2QCTOv;QbEMI8-;RGO*FLV`xR`mwp&p@HO($C)XJ-&p! z2wH)%1URe;OK7~`?RB&dLO6q6GtmE4z@P<+dVZm+n_E|j5;YCQOH=?)?~-;HF|!33 zl>%U__M7nKcc$uoa~KV$8V*dCdU$#gcyBxad9`hDaPYvJdTDN^9F)g#`6mKgT(Koh z*J0v8nB!Hp+A1n4925}{VNR!~wEkxV`?J-#)>Hk9?0sI5@$4-mnwpwEm&>7Z9;*>^ z&KL7fGsKkbJ_wP~;{@-er>AcW*K1Ys6H^Z&5f@^p@Y|vfb|6hhM@N70xHN?LT`nRu z>Rg^1BVi?k!?Xj=BvZ$yt9i(qX1ZZ-$0(GR&ySdDK%xM8!188>pV4w4`q|b@th7|* zQ$D_gl4eA*zW;4p{b7~AMB3lg#=AyY`|) zCVXA}i)4_&SZrAyaztd)F``s?$H4JXw7W;cgI$f-EeP56 z<3nf6JD$#}SNpCKwq4ZOID+u=Ks!=W2sL;cw#?Vo77!J_NV3&>bH~Q!dI>0c&2k9k z)?^VSu#NSO&yUC+V59`_0D7jR2_EJjK^+dFPPuK8j-T(zIV}hK{RbUnl+x$d zuo~gZ$4T;{-3(7Y%w?ODSxt8Eu;MZWp#%nUBvENc=){x}Mf28eBs;BpMUvy!enW&| zd6_2NN?kQie+yYZ_#TMeWU$xx7{o;6U&9~1DS}7`(q2bL$Ml0vov#dqMO&o1ZQagi zRU~Ob?p5y{&JV^z0TPWNe1!E&y=0(!XQ7Dl4jMuL#M#)2rr%p^&M4NckNNgZvie{? zPqUmcV2~<3{&(lfT&?q)*G%61EmU9mY-fo$kfC`%`?!lZ0J#7!qw+)Ey3ekKIsxuo z;K`FGg*vq{hV3E8t(deU_3rlRo*U#43_PkHP$cs^Z+uate8i~m`#o+HjYu-S=w%B< z$5erO6bc%~Z_iV+yWkZV7)T~?asnr_Z-kM6`Xp7zB z8QwWOyzeB1m?RjoH6`UF{N-* zzUhdasLe~XeT%T>X7pDmc zP(M=L8)RaDF#`+y{{1lkizpUu`;`o$qQK>IXxu~?7=q{KbhIigK7@u!=h+25-xVMs zX)?wHlH6pNzCA5%3M^RSe6mPeAK{(COC{v?WlJ^J=7pDi)0LUE>+x^zL(`$X89;Vw z&{i`apP&Dfj-r`tBJx`Z9|zL}`v%!^U5&W2B)vv2O)+*M*F70fG=JXzo9UJL^PHc> zsnt5%R98<6?CYc)6s#}EEa-_rQvio)K|#4%@2V>)`O$T;tPI|4cD&L#X;58*+$DP8 zFC9VQs`gVUcBcT4SsEZD?9DZXR#cqHk=KrMA`kyO2(n&qqa4!Hd!W@wVeBPHid|Um zan9m;bKdC$J4=EOf68*Eo)WWXXHP+G19fR23R)26!fSxIQUn4w2lZQ!O}EKWV$3(N z6=uitvr_WO8P2tGQ(bX3J<&K$(xW-sV;B1+@#>H_(lYmtT+Do`1sf{PSr*0KI%Udg zl0U#ez^08QrKDEY)=ao2$_omZ0pE`GsB3lQ`*UraD*1A=mSi~k*MyWH>({6={qf7^ zEw?8AjYO(;c%HA`+p!HPDXsC?8gbPv>nnOXi=;?Tb>}iZCuP?P?Wx!lD;cPGkHTj+ z@kx_i*?k&QwXZY$@^XU3vA*ox5rwl;p~Ne1Z_m+M)$TBt(LTZ!DXBMcwb(U3Se8!! zVQ5s|VDQ++-sq|iFK7L5kPvbR@az+bkfqH{^G5A)qr-*9Nn50y)l_i=7`A3`{$5|Z z0f&R4%qLgB6;N3n--Z$IEi|UwahxDT7$I9fl|2%i(SENXBXb|rK2PcBP(i6ZYLTs) zt27DI)6)Y+9zicXa2i1??D5rZ-i9f#`rS53E}$mfY#7@A$&XXC@VPuPjAzsB`+$a7 zxT$|6<`%5$e+$bdPIS)t-6pOjDR~b7D}Y)iX7zzA&4Sy<_)jl@+y?>j;)zfYw@!8n zN@l6bvrpL+oAGHy2li&lK?U37stNKxz&)v;_y+ba=+*!~lwan>2PwIqz1gPRrX>KS zP_L09K*al;C@-~wOvH=(V!@kzd3kvbKr-Rujz^OZ59L4#f4j!RVbB86^Sd$y;;Ms_ z6P>7NI=JQTASTxFFH8nOi`A;_BMhWOjVzeeoiH;uLv(b2DBe`)I-YLRU-2 zo%$|rFR(2Aa%N%SWg8M4@G*@4+6ZF9q-kw!Efv2*z@zS{*yMOAc&+nCo#h+ZBCX0_ zAZ&mB{27SUILz>dgpl>0k%6bLG4I_Y%Jcgd2i+VG*z1{(>FdA;LEK^jCD8BR9J>f~ z34<2Ke~B=zizm;hP`y1oh{$I>fo)*>cV+@ba%-*>P00Pwu>I%Y9Pid-jQfkM{9mZ& z1MJ^rgnTIiC@vQ9TXsHd)OuvROp@tYbX!+dc64e*)d`5P-(*j-F0t)OZ@f7=KUv9n z&c3p`-Jg!czlh;i6$+pIrY*PU2siT9NnHHTbWM52N-L*!4n4%FLQJK<4uAB z0)`x9m-|yZldsXFo!s0QtNk8M6ku)+iO*@?zyG-YJ?k7Hp+K{Zz)*WgOhQ`3?$znW zw$biX_dE8be9RVg`jT?209~C_`G)(O+uNxH-n<0DDIU&;^78UKA|}X& z9q!rzZ-(gBxzGtRhO93lTX2wmT|myylLI)H3E*Jx&v>)H{~i1Wgk9k-7boX*lW)B% zv^neK-iJ;{PBI`dp?^mPpj22drUQ#1ta4**F3}%;q%3Objv)8WRJ9Cx23R6t5s_M# zZ9-r;-;OnE493qZkz;~ul?)|pUqPXAas zbzN=?Hac9R5cc2z45ZKbj5&*L-8Vq3r2Q#S*JhRoSJg==E-s$*BWb$&9ukUKX+34u z#$|fxUNmB?HinBkGc)7!+kybJbo|s`Y`UDx?~H*XUyqW8p`TE&q0A*;6rN zBsxu&k&$`K#MI4bqTggg4xTnQQO%A(ASOM_130(JZe9*#w0Ud6 zcvIkT>X*!T<2lYuZU+nPhm?G3au6NjvcSOU%L!FUHjP(VY`Qh)>D~eTf0}X=*mDhP zWhlQ_p+OHPGC{05$nv{=Wmi|Kjwr)}WdHo>bm5DSy5Sjs(xlrIcoT~2s&Ruw`QFKI z(+kk6zuzNx0m>cZeIDu-lM*fGH9-&>+6*bN|75OFkX#rkvn=TE?iK36bsb8UzPmka ztDl-JuBhJS3R|sAL6hklV7&@3UEALN3~D1KB_&>zqr}lH&x?6ayhbJcudN1;+4)GP z#L;>+8}5+?eb`&?e~H@|`lW{dfk5q=nYr<`BSZSoPz}F;Va@u+3R~;#{)|o=Qeq$L1TAXITK_7vD6P%$n$iA*ZF`AGy!yUNTvuVBMz_;tEyus@>i#& zTB)MWAzoL1Yz)%*JeOKN2%qki1M7ES@!!g9qs#hXF_$g-xgU~}KLuDzr|UCI0MulG z`2&%`X11dD=dh6bK?NSx{Es&{cM!MU_gM*0r@hX$T8*Pbq-111wTqVEU}Ismc6W!4 zjEp$JGAlN9`N>#iQ+RDPYR3@5ROjhYZN>Emf|Ed*D7OK?aB{N%U}rdhs+|Y=xk}WG zN~t}79KI{o<>OhNmku*jV!g2!1qhu6P^^=EJ15V!LqfQ6m16-(RfL8~__l-wxUO6C z8Lu}*_qhktC2H_W`bIMm;(Fv~Hm<+ZC_ z`1 zqeBG&>BHxA9y_$c){q<_VAw8)H$>GwIy3wgbXpXC)VO=snq*8Rx>?d$y2jFUdy1-h zgR!#l0M|$7{)uBNc~3uAbgVHQ)Iv#^)9tj1?w}`kZjC_x+}P+J%yabE#g+&(kk`E**r0g+ccOGhlU4 z2lTT^S+zPq!3~<-eruy#xv%Z+%7dyO6o->xe=#vJHTe2WH`~)nWsPpoX1E#}Qi=K` zo}IY>)GzJ!o@8osxVDx{cup&tl$2B&pqQqsxI%q@7;y@3vOS@!f$z9jO~z|OhD*WS0(=292%N6PDihMs41o;cv5{mBS_gj*;on@YMwR>C zxB>c0{Pk;8XtljLkSmG320-PY0XQB?UYo~kY(r)T3uBjnklp%IK%>C`WIivzx22_;U!CdWK7Z3p6O;;O~0HvDi9`5ZaynXvnK7oya zi>rJ>{OH?r)jO^OhlJ%ZAXvVABWi1FgB%?n8v@?`4)E=A0OO9EK zV^D%sk4-z?*@@1_$2Y{pWXzd#l&2Y6SjYle2Jpwm$7ibTGX|~O7H)oL`%#091FZBH zDSDu>Fui;^s-<0OeoZ}#=|y;BbWXG9j!<&6M3kR~IiI0akIZJ{!uhwWA(DmvN zRV==MqVcr4;C3l!Lc8X7+kViM)_l3L7+~<%2gS>%6aCfN_stAqv}R_zU#z*aqAr%>;$+%aCWuh^KhvbjH1eBMnOp_ zvb_Wal#HnlFis9?sI@9lTLycv7Ed>iW#ro0XULhD(0)!%8B++~=To1OE0Af5+0;wz z1C^Xge#Rz~GV@h{+jRC1&}M1~;JFE9L=FYv2q7vd6`mI$)8h;1XMjlzrRVt8yRFYQ zfA7QdXT65K#HX%Z!*TARY_fKbwiOl;zHIJBzIi3EF~wZOJSd?PkM9)?%JDlfsx24? zXe1@BL;4(x>-=_eHO=er=JSan?Sv-Zo3cHqecoSL7|J5I+(6k`8WK7*QM35v+4Se; zuzKiprcje>vQY0%J8PZNX-_OQb_4(#^!NZKL8IAE#M06dxS7K#YxT&lzvw|17qH#x zp#nR0mpYY)e`=l0LmrR^_L{7K+peX#FO(L01JXQ^+ma9zW_+NcPO)!Fx&x2MQmfgD z=XYH8oh0eJF^~zY3Ao&s>FE>yRu3R>&eS;4ON2aVotjF(r1kj{qXD zY;*zs%VM%H$rX7w91wx-z5rT4wx>(!?;_tb|6fTUc9k1-V&DBHoW1E&bF-MT2#g3o zzcs)v-Z=!27Od;Cnsoy$EtS23o+t77%b!&@F<#!*>oG(Fc7>YdAs}GwOcwPA;fsEfM_h#af$l{xoRi5E`>}duTEJJSZaA~RXDEn>I?(V% zWu|8<;dN#auIYzB9S7YmTchQY zNSUd;UHv|9{iZe6n7mgBiOJ#1XHj?TK2UxL{SS0XC2amCo_fUE|J9&l4D>yl`MN)X z!}f;Ni+)1DJn|g8$JU^Fqg##b`A5BEn|6BKT;&o*dRAK`b~4h@X@B z3$dfNiEX#3#hVd&^{wu>TuNqKCO$sYjbY5kSN-hrmC9)Z^!F3RXqhnI8!m`W3ojlC z9S)mcq&IfVdokBv9F)IDVxVK3w3p?~c^=-TintGHp~Fk0r3DJ{dzW`Dcy60(Zuq_{ zB{WI0dg8R0`5E*#v_zKC^TzTpjd@ljh;_#d(rY!jYrl=&FUEJk9Qf0AXroAX;={{& zJD()Y-FHE=8!US zchYt(IC%M6Y*0ZtS52MK&J?K^4Cv0c`NOx`H0!v%xJl&Oyxw=!-8GC-qaa+4o|QE% zkIM}8=wPq9?@u(~dk84KL-4MQOVvB7#M~h7tS+_RYH10I6=_O%T(bQ*J%r$3;r*0P zP?~ewEy7Epok@>2re(_dCJ}i#Riw@Es7e0MonD;L&>$R1J*(Vp#~1&%m%f&e_}oL= zRRi!nXuHZ*(6@27Uwmhj0^s=zm~Jef4|ye2^cBNN*s`ssid}Z*YF~G2Hu(sAfbGl- z2wBCVznwkpAib>i$M7sB=@b&B-pC0r1 zq55p@k0#w?5lUV=#>{W3K37vk@)-+_HTGK~#CA|RcBl+oRXL6fRb2`!D+sBJKIZAG z7sbo?U*r8eiJ;$GUabtJS0WBp_XlS)_Lb$;wOF-v?N95~vq<>8ufG!bP6)D8geTyq zKVd!Dgos*|-!4mFGEX4p7bQ!dm)W#W+;|H(FKutQAdmQ$mARQcLpgsF6$#($HDlr8 zGCUVZs&n1tyv<4QxLhVkRQM@(t1~b-$RGs$BrhdsGq2?3Mxr!dx4fqP2p>NRJGi;j z(Q(o<8<`(=ujP4O9+3ZAK}YO!HR9j&AW7ZzyVtqw%PG=k6pWdC>?1n$243*rH2ejPyaPq1>NhBcaE2drE1yKFrK7L1oR zUe6i1Z2?jO;IHgz*Ga4cu0f1(GC=y(Lxltcj^#3+G!~52mYahv&1~(9gPa9v6mVn& zTr#~Z?TVO~m|S<72E%ZSU}ZC_e4;sU}u!z3vNUDj`xw%e%&4IJNAT{dXzmb!rPT zRcg;c2MegL6c}S&>*~U;wJ};CK(}mxc8Bf)l21+0aczrWOhpwudQi<$IlE33vZoP= z9Uw0c2Fo9VYH$ak2%-y=!CM&^%>91AekAoYNV0e5O@hNoUo@hTvgs`W6vyk#0FFld z&m}W6llFM3y*&s(wQ|>f5{w5mGf&n>K!>TxZ}3*oWh(&4067&;PLxeK$ofPCYNoxM z=4uLN(-RUB(uD{d$p8p7YkYq!@bO>mX4yXPu9)fQ)KliM4FW*I90kJw^u}v9x2kr^ zA%O0>BgO7ATnIgpz_v&-8H*hGnb21p5^)asHpnoSyBo;MEXE(*jKQvVtd zpk%J)`6*t@{qXVKwoqb&^#ZFh0)#$nG5cQ>hbS3XTH_I|c$R z2%J>FR6~U6paaS;panycMhq2$X$Rxpie8qKn!EgeZm!i^=kmGZvb-ZBJj=0smk69a zk%@b0VwRm?^#i2Qe~ui129+E=1B1MvC7Y~hXFw$^wfLc;qTVgV2Anw0BwoPe^yCDD zxizwgj_$N4yDE%QS*xM0|2c(q#pLYj+TIv~i6V~c;COf7Xlc!a=A)|N-JTOrl1krx z|DJ!)MI0vxsgjXZT$l8FNJT~@39=%Ol?OOU^S>vlczA*V6Ef7*NdV3~jhhYr+Fn(C z&O}G|CP{&@UM$}AKL=n`9ODC~3^=B5?+&kJX<@XG0AB(%)XM5AnA=k(ri6cvf32*1 z2@S5nY6*6=*gZ>O`|2LBPxmMJW@SercHvRwXcAqIb zI6g&?hs~xok3x{=gAs%h+xu>c_gX%b!h+RV{|KI*a3eNdH-y% zWIh%;I0^N?*PoC7cDaA<6>aqzxZeL>GCY|OjsM)@?nQR;+yAb{-*;0{dLU8zZOI41frM2EZOL`$n4EzwF95&}>xAyn9Ak2AJRT~ zIqFAzxHr>zSCBct`S+mep0~4&H%^z<(FvIH3Gek%PA=5ar%L~4Dm`Kf>liJ~aMast z!1Zh_megW2!N+uNQxYwT?}_>^z%T5ZUaBLsbQ&!1?&n-{lI^j(kM*qm?@;O1|MHa8 zRw4XChN7vtu{b}sbg{Uc8T#E!5o&u2ACN#IjxmK#WO7_(5k`V;-0GpEYb&VuVmdq^ zCjZZMl~T|E0o>UWfvb~4-MUw+UFr+nGvuPz_bGVtE9`ppKNS?z%7Jq82|t-#4a)l> z&gS?3H$DyMyx8w)Mp)f=TUl+NJG+OL8XL}XcVEaNyePOwQk(zJpz%~ZiCc1&p$NaD z$9r>{b-o!MsFNk3)eA2?p$)>9%a|T}FD;-X@Y}(5#hdG7=E%c3oQ)x#VJ@9id{K^J zY3;e;Ld}i+^Zg)cS{~YJDcoP`_+GF;e6f33qvwe!d@0P@lsufFvwnUf&0;=?+S=h9 zunEW;+AlP?MOxx%f*bjusWwwr=&~6Zq?i)6=s(HgjJ&ex zvq?x}=cnLx2F`r6wztFi`E2g{-Xz->3;5JrcK_ha=x-}4AKb^KvN$NHufKAx^!LBK zwm#(@|EXIm7EYQ_%=+K`kM{r6R{&vS;Ul$c{6keCeDdjv&fgIZA9$iC+txPFde{rj zjd*${1uZ#mK7P>$KV6ODaD4&4S>$luSZ^6=>&ATjy2XSO)92g=UMfH|Fx1q*BDw%C zH^pJm$75DcZjUF`|5&}qOFK*_Kt5T-g@m6y@;QwVXm~ahNxf0)Ku>2w3(hwUE)ODZ zH!^~82BUUK^@(tMtp0FjsO!;mbP(BQx$XZreJK>ToF1So7VNmnHhgO1xb^jFbGKwr z+^^iMYFAfx@D}w`c)71a_#-MCy!qjb&~M*vUlb7@=pG#8S^R1!@P2u7j-aG+tRb}T#w%}cs&t)9{YKzEc3=g!v-k1w z`3-D4_vmtUBLz>6klYgQ$RBxo!pX$sJYvJ0oYBu^KCr9rPkqn?rE1a}+${SphU8xS z?!5AG|K#$rKO?T-eVnlC{~qX{=15dPSCzx0;Ao*5nO$8oN#6v!>x^z2MYAE-U#3wr zLe)dEhZy8*cVE=S3nF3V3?)LJcZu~}n4#baqv2v5r1B%0tgo)6D3QQ)=2>eEdJ`m7 zqx0r61KAS6m(0A{);>s_6YP8RL14Pn{Lc$A!3kcn##KD$nzaKvJfRyHSEv(-Vshfm zyK1}9RR+e{l60RNTaN>Q8{gkGW5#8s;k7Fz@}!?4dBqlk^+EmCT4mcw+w5#UUD@xZ zi9~Gl$$F=I<82I->Tc}W_)+iASr$J%JK_k{2`(5xd0)aCns^Qu^LD2xQLRP#!y5-} zjDONatA2bKC&wxI?TK7pqSQwzrJ%OwY2TjW{)&A^p%n5?KaKIto3Sm6w=vn0oaWPA zzPE@=;Ys`X_PS7!Im!!95!$HRY40M}qRL{|B5Pgi{TpZfsXBz$_HlRC=EZ^S?%wnh z#WXAN^+o?ErK!ex*!9rBH@2F`9<;|_sJ1VPAHYtBN5y}u75oUYhV5$4f8lm7{*zHY z6hp#}rysxQ${Gh_V2AN*hVD=S5xjBe@_4MMS}sRk`<7X6F7U_h+sGnKS6sy8*Og}Np02WN+R zV~a@rM_|0hA^z;gO>a@b-?sSsdYbS8UwA1s_#PpW=*5~&d&tndN0#&Hrcgo}wLkQ* z$$D4P&Ui3+s{)8GhleNqLDluf(tE-Sj?x~p=^|OW}eAYRc4esD0M>`L20Cqr&}+jIg@+zU!C-uhhaoQOqF$K6kq#H@O72 zVoTLcUYnzFyTyY!ET(C&s8yc3Q`)ytI>=zs9~ZDFf63ee?WrBt?04z?<-?Im+CRTI zH{X(^AJlFdZ5kpGOSWkLUb-VOHrGQ44aci|J(1dqnVCuX^JwY9YQsja(#4tNG+PM) zX}nQrO(~2fe4^C&tYLe+$X&DSg?hYH1a`($qqj>PXe`29a-F(54I_%KbBj>AnRn-9 zamfY^tLg5U`R_^>Ix@8?KIvUV@D(x{i2u^~>v~hHJ+!oGBYDZNNFp>_F%F!ganJU8 z@$M^I?Nh<|wqRZ=`)myfiA4vAOP9}t=WI*wEGBvmi^#1e3%5L@CGflD>g_XdHPfOA zbZO8vr|_z;3FXBzf;`R-Ds9#BR)(3iC;M0@5?@X-i>Tx(jh+V1wi7c4dN*~)OgYy& zWWpXtx*T_ow%c6nCcu5~{d*xGGBGNo5H|gV5NMGa^X6``#uL{Ao5Q>>6(*k>g*a6J zJb~t`vwI-Mm6iNtL4p84JA;$vFnPd?O+V)fr6Nybvz7@Mg{9f z4eTG!mCnu6o1a~hDV=T4Q;i)~*Bf3>6=;Qu+@5WDg7f9yxc@U#tsT^s7?+dYv6J;N zGe4l4@XcW2E$=Yd$FQ0%Xn!x=2 zUNe`FjNY*6$jx|;gmWXxzbEiDM1>L(&+^P+w`kJ%prC|>Y_7H({bkHcH=E0|WS-XT zz(5L>y@2;7hft5eDuM}m&Rk3S&{D*H^^yy%kAcWCoqv^mlv2G@4(^*YtI|FmnKj3a z>es8|JsyOD?8;_lBd?rcNZXq*T%bM^7a}iO&P0qD0IjP^C}e4;R@R5p}oJ z0%s25Qbzw~EqAQfTBhQJwLiJRo&Si!B??FPVSdS6e4H^CI`(FPWE8(jpF^eeWOr^;F0RhizC2R~}9iWp44%iGPx9%R!#+6@{RyjWd$_;ws z>Z7a8MB~8C?i~X10;TnYt_Wj%@jZ0f#(C8L zzo5msCs!|?nWvLeL84&k!*5r+WRaKBm)>&Gsb+(L-r8MWOjewm^d*5_U)VJ1ShdZj zdIdJ88weS)mC}BUE2TcOoqv($SNE>q{h8B_mQkK4=GF2Su0ZdJE-QTZz595O3>TGF z*oNrpm!+%H9X+LzYTf#5O8akCQ}Ie7YF=0Ca9QRV(i95bikpe8(PM9|e|F5_Q?}pz zEucebez(}2Jlg*M+I!EaCbRZmm>Gv*Mh0+1K}A4E5s_vE=`yG^0Y#)26%Z*QN+3W2 zL{ULhK)Q4bMWmMmDIq8*0+LXqB@mi1h7dwaLP$c+W}avCe?Gh)&X=>^wT@q0>qZjp zd*6HS>$-mB+ShstYP#M97_vVub^6gD; zmS-Af57GKe3kORJD_fEgtQroUdV-Ov($5-p!8$kCHc}O6Y!WQ}+iKZ->P_>euvQV; zOrmsgw$3qrBrf@QMA&NZ*_h*3qU~PaSmjsZBnC@!^W|HgK5n}@# z_cPGDSbo!!)-HV~Xi7|%oyU)+q}jq zq*rtcBi;qEN7>T8^J8D13JT2O)+y*nSRQ^k8y#PaO3{>O})|+XzTn`DIbM$Thjh1@x?Sy%*g>eYZ?^20(_d`BM*4RzoV+n(>rK|D5-}ka z*Dp}#JmJFP^Lwd>>~73|eUYo`bQBSub_g$^d&F^$pju!kp37=uW+pxto(1brkTb-2 znN!au!slCWe`V+kn_+{cdZ3R$S2~)KazLjZffl%-{caF9Zx7(+=-|~|ucI7Z zZOg&fD!D{0_we$yXT04_5*rBNBQ0BP8_8SbEZ`;(j!^3>{_2hn33SKjo4t~^g98CK1^a~AFrnM7v5Q(DKxs# z+5kFR;8g8?vvxthQpYh{7LIn|;qy#X{o2mDyw9%OCA_-xw&pp!p7ii&j$`9-gyOK9 zYz~`}@nXPm;ZzW>GjSv9+j^*&b+XbnT=G{bjAxnSk=Gv&Ik3C0EKawFyJ3k9FoMLy z*{Qeq6M=KCg0-pTV@GqER&1$S&;+uzac*}d4qgFgj0|Uec4d;`ZldZWoYCvux}gcy zyru4N8@;HAV50Gzt@*P5zLd?5NvUVjN$A>qdA$M~!=!Yzq!#XbGWs>Vybe|@@y6-- zUDivz^{|pFCN%zXxw2blavZ0xD4wN|r#Bp<@+O~4u9ap^#9)_Qx@w>}V^54N_W-qXe7b)8XS5|@x~MD6X5`8Z2qHCrC9^9QU2GCbG$@(nC=%(moyc zQHSod3ra$A*1EA|41LI4POIHrIhfZ3e>c%mFR#f2(bsqEWT~o+{@$K^C`sqWsaN(^ zv%SWREPEOVB=vHmDO#1*I`3lkfPQ!Rvi>Kh@VVu9A8#dVITfQ>=Rekr4o>%R}aG7p(`)Fib;7B+_5slRxh zT64vu)MKE?yt3sGhz^h|4MF{#%9al9DsE8?tY)dLbVRn{IO0#-Vhro(I&Y$|TcaCE z%!XoS!l!@toiHr%v7wjz@!yx#dgVY{!v`D6Pwi+(w%xP8SNOk6tC{_>M>rOovhrcy z)N)sP{QA#g|GwJCcITNQzb5=*nPCBhQ76ZtI8lPp)Lnj$)Z+@Rz`8%>rdhL`U)-Rs z{{McW{j|uA1=rxDV4|Mpju&>}q(W=Q?tN~kNWW##f1l>h zMyslZI5uS(o_p!`wi5#9B zt$By|3&i%w#e1yP@#fK}n%cq|??TVSv|ZZi#QKcJkQ9qF-A@g_Cg_ij_Sa9W4U;$% zykR1n0e8Ffa?fC?@(KR~Zio_)cE{=t|2xvV{{$oU?*+(!E{{2XyAm;z{^i!c_W+O> zt1Tk`#t{*bTgQz>c6|TU{$GB&{Qc_32mcQS=QB!VH5*#+P&56X&{<%qv50a;CkHmF zOoV3oSf-mnNX~gu_tag=A~wsW%cxuQ80JMe`+YL=8z<&-@`Yv+y9%zM@-jTqt&QAt zLGPS-G1Hdl*OJkXcI=hdasCFc8(Q5}eny;jPj-%}ocDN_Rw@y#`Z_{>7S1vY60rLF zOf7*e<|QoJOa2vmv#9C?QUfG=@Xm{bWW0ex7e2w=zWVtmY!f;zw)S)fV!z=;M@lXv zobWOA8o}^WgU*t?Il&fhZW3$Z)@UZ{ew{PP*9t1ID@|wovjf~R*)QDGDj{c~iSvIhGp8LwmDQOU#0f7oK)}X(CQJ8( za4Bhm)Gb8|);#wKo~{XHJ%vL+64-`opHkObJnj4b4}a;Dn=iXG`>GY<2%N=jhrGfo zUAgC}`<;731VsP->JEi0{@n*5it6`$O8AYjsD<0dVMQxz^nRfrKk~wfq#XAQ&-Zsx zG?|Una?9kY+3k6d_mu!`;JDKCOV`mBt|Sf1;a_$-x}0RV>xAwnoe#O9;?tPvA#hG6=M_c?F1@mS*YeArGbrQ#eE;zaH<%(V zbPd{oO`&c`K%=QtNwBZ)PjNFj20)>T`^h3km~DeK(y{+-jy!X9%z#y zE!vk}^Th$0L_406O#;58RD}xT0xtYXr1urj0H$BF2 zRiSFdhf%HpbvNz#!!nL_p~VzW!N7U;Q)k!eTk*ntRD#>DojIhikfWKDxTW1*qer`K zK$4^;WfaiHG4Fq{9WHRcc`t3)J7ZJ~nLJnyjCJ>i`d&cf00yIouXOeGbw_kAN$Z~G z#wrrS8~H(c!vKXDHr>MH!{@GhkJWgGRj!3m{v`hD9$x4s+mq!)3Z~``y(qKJoy7Pu zoJ-E_EOBj^jELW{S3cBrrS}frJap{JFsD=5#XZ-uqHMpv>KdoMne+9}@rwNe6*0i8 zi^HN;ulV2b8%!ogxn!N_Hau_mWe3eexHN1Y3~BeZ7 z=^&vV=gkhWmO0Z8*I#ZP9mNP|2N@Am)257bdNTA?*xK$tRW7VoHsLFh%v0vZ!m0bo z4GEz(57F53&pM9Zd@j)qD1_YNcsa;#W8jm{!etv2wgFb&(>T4EJ{sC4(ND&%FO7|f zdyXegkBggtaGE>ZUnpQitv(x!y=a}(A~cL@G2tA86@4m*OM55aSWZOxgcMk8Ct*Sj zKDUPqkLt{glZe@l)49y2OWm}P{Yofi+;EY)^Zwl6WOQ5oxC}2WIkF|+KyN)9pGf76 zrKar{u(RFdOcmt?V{(=AU%qe+wHfWPiq6^0@zSP{l=aoNenOTvWw1EW?V-C~Mz%ky ze?L$7B?ngKj)BMt%C-b6#z&+(H;=G$ldfPVY>dXcRF*RLD--T6&QF0x2PW8+|E!7-$rweV;2dD}g+taCaSjpowO3r83@kV^^%@~1Q<@}fn^jW9c>~CHlOK})BUk-0${|x$*|gMI-GSLK22q2tT99j)%Gj3DJArL2CvuD=K7C~G(0nbtW6qIL3OT=+{*A@k8sIL^B#~^ z)^(_R2^%OHUBN)`AEuyX_ZYkU!+m+xms9wIZVmoB&SPN3ma0Jn`mFo53#Src#>ZqY3Ab% zh8x_Pa!9ou4Zlj{ASZu9aaqH9p=-4Dn?_6bA)ardzXm1fvz=-K5Nj(7o)e9OnCc+! zRfIPAt82dD)UqMBy+1*Yn$ZTHPy6yMD7)9Am4Q%SMK~Bfn=l?ZWPFK8G z#x1qialn-2GmX}7RGfLZ%9YpYZ#YH>4xBK|j-tv_yV78R0z@_&{{}!52K*&UYK%np zIJevl(C7)fD6X~F)?2`4onTalzh@B~C_UJDx;v$_7B)5frpOA@Gwe}MD^sId>vkr* z)1kKT@D-N`pb!oDx&@2XaLduV(OMKM6>v^YegCdM!6M*R^R^yT4*HOdnnbGgV~N>p`*J ztS^o*lv)Syt!bHPRrLNp((u!iy54|&lHB6+%;nZ&qd z`NsUDeUP;jo1E?sRX+D4c{#jg8>C@4#|@QR?V0OO($dv@W^FK-K&iydz19t7XXM^I zyBew8hn6qpCu0+mv7BGfzRx<=z!GB3?Tiw3)0ZR5mUBD^936F4XcL4))T*s{o{y9s z9QVp&nouygVXRB4^z-5}CmkB=(DC?DY`ItG0@BsGQc&&5*!7TAwuPQ)u;kRG2l~*V z5op+%2de~!PDAOK&BV~7ECX9F_uOtl$WHpsUY%0TU@4D_U7KBC>zf7U?VTQ1PFBhP zu%?BmgXQXS2dXPvn5Zkv#_^`%`C@lo&dYQEln5#rM1|Iw4i~8^CClf?pfG1l9rTgx zAuntMmgAD9Myos)Ruy?MvTGX;&O6dE!asB=;K_i>#kcjNr5Se5qEj<{neYd70hxk7 zc3&U3w|P{%$V7?g(4B4@w{^(Gt_J!{YRBb?g!BL$xxUz-(2}J6R7uW0tV7ZlpyffC zN7|MskQZiu^5E!t;njBqwuNP;Z|}(xwO?yPF$#y1S-%~0BO<)b+3HIbZg)7_OH8Fm z@WpA{(uVuv+2_^EmZ^EswL(iC^|h58ee|0U^+>J6IrR5gE&6%0@%H)Uv#BT;`*H>;# zC$Tiiy5mhGo=kl}b)M1aXnH8qo!h0l9(lxwi1i{?hjlQ`S9bro|HAs6{kp?CQ@59r z{?!7M6BYq9FplaSRBnMUIif-yWc=7!#4asz3_L}KH z#PxL=HkM+$|A0Gc9HC{MuMi>Z?q0@ji_BZ5a}A5VDGi^ulCH&V?IU12KaJ<;Pf&|; z?|UzK`9CamsHaI=S53Vxwi36=Nb&cmp~U5FPo@keI-?6_5;@&k+Jw8t$>q$&&+NuW zoIk$$_PxbF^a|Nm7x*rDz~_D#Cyswm(dKiAUU<-Ih)dZMMy222Scb|*P~PLQeN68b z*n|uh?%M&BaqTJBe`uul; zu%Zbcqm+I4P0XjGQFL59!7U|m^rD|QsJy)l%9kP_+5pW+HIL;4usb6D4nm|?a zB5^LVATv|ur9R*o8F%N0_0Cqx-v_8LU=>&2tO5QaMyg%}^3sty%Xe zM1wCK3i_~t=zrUO)idj%Pem8iSp7e7Dm&F$3&+X`(h_qjC!8pHs-j$;^s;Z zrlM&L%`&ZKCQGZQrE1@3Y?J%WcK_0?@=Oz{QG$f_NW&~?xFWX38xnqA@UY(c#aZ?< zA-$5s0wslf+uUfsmG8 zH5y`r0N0^RnRkCOCpg%*obBa-XJREj`N4 zhX0lB5w#e5kG=ckWsj`QX#>l(gvFlSLIRqI*~E= zL-Ri*F2$u)KBW&KWrG7ry8q;sEr(u<+(-w7TXo-sIBDNxe8nV)bN`#412{DQu#Ove3@-0a|#}JD};I%xG){*{Byk z8f*BhV@E?&uh@`IQl{@juT-SXW&3nMWs))37saHAv3yE5X(dL2{mkOt=6(+pmwAat zk@fwsg??|9ORcWw;Pv{LbDOhpp_RFG2M_cf;p>}hb)M1sZ-&E4mP9e5hLYNF101KDR44`p}|#RA+l$8+whF(u@lcki`# z3iocl`C=jv(cw^Al%F5Qc*ViLZ8i&re6Eu)v+KCJ^Z19T1QEE?k;Ix!)j{^lJ+rtI=6~{N!L&}SbeH4^$Ha?)UbM$S7VoXw0|bi z1-nzHAMrCfkO5V$WVqKb9ADu>pYz4cgDYUp`7m2e&(Ycr{PL3{>#`onOcJUvOf_FSLmF-}-5YSMFmYv{bXjlcLXex|@arG=l+^(Z^C`=qjs& z4sc0Not!+TL1+43Ay`uS3nAU|1=;QXJdbT+Ew zpypCgzFASkU$|eYATCSX2V?9?oO9k%|Ik0_$C8y_?5%`4P*3iB;&MlfBsM{=@Cov+BOKpWo~|+dlt$N?Er?tyCd44>X$_ zsd__Rx6w6UTQuc;!Fjcf-&o)ay48nV zKGj0=(_V1mSz*gY+;&7`7!c7AW)tcKPx+Dx0pTpeyLs9K(5g@xcPn;Aok_{1F>*4Pi1ATGMXXc&$?;e?{Z`wF_RGb{Kl4Qh;Q|9Xi^_$Dw=)z-Y^%Ih0 ze77dgx5yeT<*^T`9+stD-z=-{=dtwCuG6R^$y+O|Y6Xz7UJjFune!`Fi8kl_MzkSauh8QJc?DVmsdIz-JV z%zLAHZ-%y1hc}p`K-tqFqluyQWVdaKUfd}ANiSlJ{(h6`Lu`jyRfb#G)&5cytof?fw+0!BmmJVS&YPT+yz~D zwnyk*%DVdwX4JOs3OAWvN%`j(I~88?n|N(!Btvw1E2ZhF0kw=JE9oveNrC!VF*^P3RfyB7p@MQGO+G||O7l>tz*5Q}KNNdm( zY|iJNBVkS_E!*d8{C<-EpUFAcf%=8+dA*dXRmfCbA{bscFi68>RWWPB%w)Hv9XAP+$?h&miD6*KYoy&OI2 zZYpThrrB+s8z7X|(+wSV!!ySHyCrwum~W)#=+X955gd5n$YH8Q>W%ri+FVe7^#j!= zqyCIIRip7k!|hGE8%$$C= z(4{0W7bdTJGIX{C{%F&$tHX;PD5tFHce&Xo`|zZlJ|pY)6?NX4EnkO0FJ=h2^|rkf zkBweFaqS#fz3MZDkpYTijC7jmb-C5m8GKKUuQ%$`1$&KrR3NqK#udH1NL~QezC6bT z-8Er)zG3`kERKO>q8Y=L&~U}$ABZggzGxCg$sTZb(xHyMkB7Ut2E_?h<{4v(sMYQi zUk8&j7^&_IlA#h+qq&#(u)+<}2oz^6Yljv$%J3T+ugl{cIySQV_9ijN*w-;ihKpQ( zeI;zXiN~0DYK#XOH&-koinmP@3&Vr81yjzu4&kLaIO`0R)5mb@X|Ky4gf^!r>kSvh z4^rpH84<|gWLO_dGczOyR&mYBk_w_t!`b+^1D`=n9wD);OQsDg2m;KLPQh zC&>9MPv_E4vvjT_lm22dUYyklUFpLQmduPDBaGMpJnB;U>{xj{QCATaK&1kx8Yk=K zMUc`Sdt8sa(knPf#@=8!Q(rlR&c|!NO{CE)bGtwMhC8s8q8DV8tu=aco658+sQ$i4 z%3Y($9lsH{7K~$*xsFy0n7PYcYH3D0S*D++)_R%iMcF*}*L%s=?{qcA1ElYF$Ut8B zd!wQ3z#8^z-;1i13G$2x3WaM(4u@+9^O!JO`%Zn%`_iUP!ah+ef%BD!|G(MdN=4$XPRXUO7M+p=|0|;~Wwn4?Aj+TDA9Y zmpZd?!_8gz+@a-zOW6BdrQEK~T+Kn2=BR$VzlkKvV6&*_%vrfSVUM;{i1n?NAfbT0 zds3o2&mwj@bIV3HcuTlfRPUGL2@w~IiB&OqJC6n2AHfM2y%ZHqGSWtu+5DNRXzh$y ziPage?I4eaPTgymaR28PmW5fO;z8{7zxNo)OR_XC$R!7I4&Ftshw}^|S-}i+td^$8 zQjE{v8-GQ__JKm{hs;F7WPrz!YaL!bjzpsPtI;$k)>JH@l>6V_WB=4QU_)veUw3dr zmSau9WJSul#Y(cHn#K;@hh3(!jRPM3ESd`k4?f8 z|DMf7R$w>PS!@^omC9+-x-IlhIbfcm>>|aRA1_q7XxoH~jyUj-=yMXa<$otlgLD76 z%YXj)f0JLG^qL!29ekzaea*rrFZ?C!J2fqGTaqcVFhAZO$uU>XR~vi@xQiUX;q^b> z+b^bgw>VeJDof|s3GP96*ENc4iDkxEd48_CU`DauC!gX|@qJ+Tob&s+Rn~2Pxl;;< z0T@FAUYRHy#j{#tInXkF3WR*qT}FobkVBhV!vWnt9;y95-;qjMmdJvCrMbi|Gr%3a zA&jjq+xX7A($?sOYb*iRD$C6C{bw7)|3R9^7X<$H6$nnI+6s^1AGfUjMWrKe&ls)W zcZYW>^?&YUbI4f08d~I|G_c$vLF8O@f0+{|V(RY_7wrjxef=q!YtiO&Q-0^?RxN$!(&p02ho1szJWM5#Psjt_qF}@ z3l{FAwSmd>wXZW*`up67MSo(6Y^Xd8)?SJRCptS=vvtPPzSm#u+DryyOu@OSBe zu&-X@QBAC@o)1+t1gikfn9F^W=Txiq0l~z|@Y4#2XrRqYdC-18iIAfLnC6xDa@BWm zai3o9O;cBekk!UviJ}h)y4_3m4K<%I}W-;U&lQ=etFKB6#1tN5pai$|?~`n|z3s%Nk(5kdtVi~7^C)oIQJL7{ z^E3UAcFF|EYkiE)P60|E*Q7AHGY_4a#PDUcUZ7U6^;I)ZDztF7@o# zLiegxgpM{;A+PABr;2KK^aM3OpEL7)RBxDVKPNSb&xL%YOtq=s&%CJa>v#u^X4cd6Dn{E3nF*r{S0tq<^JmH|i`G5Nk0UJlyIXnndl-dH_w>6I6*KF}(s z5=d>dC+hZs@aKkDeAiC@JY=cqq)BEo1bfT&g@;enD6!$q$3bI(Eu%cArXjNGSf$50 zW#_k1Xx*EVC3550-#~L}X~e&bMZsn!jp-CR%UuGE!U-xI`|<(NB^s|p-`N~i4KZ1w zB8SSw^9`B$JOP(FwX7I%ewVgJ1o=pZ3Spu#ceB09u}yk;uf==e5V} z)_-!62_cRkAM9IhxqLgARygIGt}bp<8(Ilm-P8Q<8|ulw3J!<>Ma7T_#;&9pT8cu^ zI1>VzCN34!Au;#BDOC9$0CJe;QW^4ZI^=zP^P-3`sPuwRa?%%q)I^6;#t0i|Srw|2 zMSYdeRgvqf^%w7oUKf*ifcoR!W+$oZnyC8m1M03%R!5qGt3&x3j+X~Y9Y}^Imns8I z{Eb+tfH%>ClC)?EdTI-DSznS&3z#jn;bM}GS?VqYFA}YDzG(wRL}IajQ2%OrqHy+F zPtBEd-0E9I>HL^4vzr0Pe7Xibjt&}vl|Vh{CtO~ou6#UZd*|1Ff)S|+3d-u}_V`_+ z=LyW_eV0nF8ThC=q{HVPpM6xt5zWxl^u9(sKOnC=!j?N;btOe=ca?jqWd^agA9x;` z;7+$fXFrYnG_&(q0XRybE48|H69C9Cv8ED~<7lOXoK16P`>o#v{ z{WeiVZWR<>`|bMo>r=P)iTta)13&eR7CHR=KMQ{Ux%K&U{Yn{TvaWkhT;BsoiTU~gY*X+$w?CX}uG#X0Il3ys9$HuL+JWsFU0Ua9>c=($G3fFsKa6}gN~p@3Q(=AG%c3iz{gkk5=V_LV zM%{8B4krKt^hMo^MI+&JgWY&$V@Nmwb+pJPgNRP4Xzov_y`&0cIc)=FZmJ>l11#FU zkgt0TSaxqd|LY785&59J6R(rObQ!NTJ>+DYrROj^Hu_~lXaGw9Ah(RjM+V%!B2}Z& z%#Ub?nAZ{CLaqO4)5Z#o;wnV|<*C!<8-36D6UD%vS%^gz4%pa?8~z1iS8AFP*io%e z+` z6ggXB3p#fZ22)jRXWoP8sJ0`b-@G5Uz8#q>rkJ|MMo(6HQTT%n{h)6=cgxmY+SYy( z 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 Rc^hMIe#ZKA#ow2s{}-86YrX&g literal 0 HcmV?d00001 diff --git a/docs/Readme.md b/docs/Readme.md index 987a5b8e4c..9d3b9d06f4 100644 --- a/docs/Readme.md +++ b/docs/Readme.md @@ -30,10 +30,26 @@ link on that page. ## API Reference The [latest online documentation](http://docs.podman.io/en/latest/_static/api.html) is -automatically generated from committed upstream sources. There is a short-duration -cache involved, in case old content or an error is returned, try clearing your browser -cache or returning to the site after 10-30 minutes. +automatically generated by two cooperating automation systems based on committed upstream +source code. Firstly, [the Cirrus-CI docs task](../contrib/cirrus/README.md#docs-task) builds +`pkg/api/swagger.yaml` and uploads it to a public-facing location (Google Storage Bucket - +an online service for storing unstructured data). Second, [Read The Docs](readthedocs.com) +reacts to the github.com repository change, building the content for the [libpod documentation +site](https://podman.readthedocs.io/). This site includes for the API section, +some javascript which consumes the uploaded `swagger.yaml` file directly from the Google +Storage Bucket. -***Maintainers Note***: Please refer to [the Cirrus-CI tasks -documentation](../contrib/cirrus/README.md#docs-task) for -important operational details. +Since there are multiple systems and local cache is involved, it's possible that updates to +documentation (especially the swagger/API docs) will lag by 10-or-so minutes. However, +because the client (i.e. your web browser) is fetching content from multiple locations that +do not share a common domain, accessing the API section may show a stack-trace similar to +the following: + +![Javascript Stack Trace Image](../contrib/cirrus/swagger_stack_trace.png) + +If reloading the page, or clearing your local cache does not fix the problem, it is +likely caused by broken metadata needed to protect clients from cross-site-scripting +style attacks. Please [notify a maintainer](https://github.com/containers/libpod#communications) +so they may investigate how/why the swagger.yaml file's CORS-metadata is incorrect. See +[the Cirrus-CI tasks documentation](../contrib/cirrus/README.md#docs-task) for +details regarding this situation.